{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,67 +1,67 @@\n-Zip file size: 1670202 bytes, number of entries: 374\n+Zip file size: 1701014 bytes, number of entries: 374\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/\n -rw----     2.0 fat     1875 bX stor 70-Jan-01 00:00 META-INF/DEPENDENCIES\n -rw----     2.0 fat    11358 bX stor 70-Jan-01 00:00 META-INF/LICENSE\n -rw----     2.0 fat       25 bX stor 70-Jan-01 00:00 META-INF/MANIFEST.MF\n -rw----     2.0 fat      169 bX stor 70-Jan-01 00:00 META-INF/NOTICE\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/dubbo/internal/\n -rwx---     2.0 fat      194 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.compiler.Compiler\n--rw----     2.0 fat      174 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory\n--rw----     2.0 fat      163 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.context.FrameworkExt\n--rw----     2.0 fat      786 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.convert.Converter\n--rw----     2.0 fat     1022 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.convert.multiple.MultiValueConverter\n+-rw----     2.0 fat      175 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory\n+-rw----     2.0 fat      165 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.context.FrameworkExt\n+-rw----     2.0 fat      796 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.convert.Converter\n+-rw----     2.0 fat     1034 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.convert.multiple.MultiValueConverter\n -rw----     2.0 fat      142 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.extension.ExtensionFactory\n -rw----     2.0 fat       68 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.infra.InfraAdapter\n -rw----     2.0 fat      306 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.logger.LoggerAdapter\n -rw----     2.0 fat      128 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.status.StatusChecker\n -rw----     2.0 fat       60 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.store.DataStore\n -rw----     2.0 fat      297 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.threadpool.ThreadPool\n -rwx---     2.0 fat       76 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.common.threadpool.manager.ExecutorRepository\n--rw----     2.0 fat      108 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.event.EventDispatcher\n--rw----     2.0 fat      113 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.rpc.model.BuiltinServiceDetector\n+-rw----     2.0 fat      110 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.event.EventDispatcher\n+-rw----     2.0 fat      114 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.rpc.model.BuiltinServiceDetector\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-common/\n -rw----     2.0 fat        0 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-common/pom.properties\n--rw----     2.0 fat     2978 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-common/pom.xml\n+-rw----     2.0 fat     2896 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-common/pom.xml\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/services/\n--rw----     2.0 fat      175 bX stor 70-Jan-01 00:00 META-INF/services/org.apache.dubbo.common.extension.LoadingStrategy\n+-rw----     2.0 fat      177 bX stor 70-Jan-01 00:00 META-INF/services/org.apache.dubbo.common.extension.LoadingStrategy\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 com/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 com/alibaba/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 com/alibaba/dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 com/alibaba/dubbo/common/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 com/alibaba/dubbo/common/extension/\n -rw----     2.0 fat     1487 bX stor 70-Jan-01 00:00 com/alibaba/dubbo/common/extension/Activate.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 com/alibaba/dubbo/config/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 com/alibaba/dubbo/config/annotation/\n--rw----     2.0 fat     2623 bX stor 70-Jan-01 00:00 com/alibaba/dubbo/config/annotation/Reference.java\n--rw----     2.0 fat     2711 bX stor 70-Jan-01 00:00 com/alibaba/dubbo/config/annotation/Service.java\n+-rw----     2.0 fat     2736 bX stor 70-Jan-01 00:00 com/alibaba/dubbo/config/annotation/Reference.java\n+-rw----     2.0 fat     2831 bX stor 70-Jan-01 00:00 com/alibaba/dubbo/config/annotation/Service.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/\n--rw----     2.0 fat     4343 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/BaseServiceMetadata.java\n--rw----     2.0 fat     1362 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/Experimental.java\n+-rw----     2.0 fat     4480 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/BaseServiceMetadata.java\n+-rw----     2.0 fat     1399 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/Experimental.java\n -rw----     2.0 fat     2475 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/Extension.java\n -rw----     2.0 fat     1183 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/Node.java\n -rw----     2.0 fat     8858 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/Parameters.java\n -rw----     2.0 fat     1000 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/Resetable.java\n -rw----     2.0 fat    70537 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/URL.java\n -rw----     2.0 fat    13668 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/URLBuilder.java\n--rw----     2.0 fat    13473 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/URLStrParser.java\n--rw----     2.0 fat     9765 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/Version.java\n+-rw----     2.0 fat    13840 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/URLStrParser.java\n+-rw----     2.0 fat    10043 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/Version.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/beanutil/\n -rw----     2.0 fat     1364 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/beanutil/JavaBeanAccessor.java\n--rw----     2.0 fat     6309 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/beanutil/JavaBeanDescriptor.java\n--rw----     2.0 fat    20174 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/beanutil/JavaBeanSerializeUtil.java\n+-rw----     2.0 fat     6516 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/beanutil/JavaBeanDescriptor.java\n+-rw----     2.0 fat    20660 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/beanutil/JavaBeanSerializeUtil.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/bytecode/\n--rw----     2.0 fat    13023 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/bytecode/ClassGenerator.java\n--rw----     2.0 fat     3506 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/bytecode/CustomizedLoaderClassPath.java\n+-rw----     2.0 fat    13410 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/bytecode/ClassGenerator.java\n+-rw----     2.0 fat     3611 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/bytecode/CustomizedLoaderClassPath.java\n -rw----     2.0 fat     8215 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/bytecode/Mixin.java\n -rw----     2.0 fat     1182 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/bytecode/NoSuchMethodException.java\n -rw----     2.0 fat     1190 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/bytecode/NoSuchPropertyException.java\n -rw----     2.0 fat    12109 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/bytecode/Proxy.java\n -rw----     2.0 fat    17928 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/bytecode/Wrapper.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/compiler/\n -rw----     2.0 fat     1255 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/compiler/Compiler.java\n@@ -69,137 +69,137 @@\n -rw----     2.0 fat     2843 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/compiler/support/AbstractCompiler.java\n -rw----     2.0 fat     1843 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/compiler/support/AdaptiveCompiler.java\n -rw----     2.0 fat    15556 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/compiler/support/ClassUtils.java\n -rw----     2.0 fat     5050 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/compiler/support/CtClassBuilder.java\n -rw----     2.0 fat     3504 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/compiler/support/JavassistCompiler.java\n -rw----     2.0 fat    11461 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/compiler/support/JdkCompiler.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/config/\n--rw----     2.0 fat     4350 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/CompositeConfiguration.java\n--rw----     2.0 fat     6853 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/Configuration.java\n--rw----     2.0 fat     4779 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/ConfigurationUtils.java\n--rw----     2.0 fat    10005 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/Environment.java\n--rw----     2.0 fat     1267 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/EnvironmentConfiguration.java\n--rw----     2.0 fat     1904 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/InmemoryConfiguration.java\n--rw----     2.0 fat     1201 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/OrderedPropertiesProvider.java\n--rw----     2.0 fat     2636 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/PropertiesConfiguration.java\n--rw----     2.0 fat     1197 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/SystemConfiguration.java\n+-rw----     2.0 fat     4477 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/CompositeConfiguration.java\n+-rw----     2.0 fat     7032 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/Configuration.java\n+-rw----     2.0 fat     4912 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/ConfigurationUtils.java\n+-rw----     2.0 fat    10238 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/Environment.java\n+-rw----     2.0 fat     1302 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/EnvironmentConfiguration.java\n+-rw----     2.0 fat     1968 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/InmemoryConfiguration.java\n+-rw----     2.0 fat     1245 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/OrderedPropertiesProvider.java\n+-rw----     2.0 fat     2700 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/PropertiesConfiguration.java\n+-rw----     2.0 fat     1230 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/SystemConfiguration.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/\n--rw----     2.0 fat     9806 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/AbstractDynamicConfiguration.java\n--rw----     2.0 fat     1739 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/AbstractDynamicConfigurationFactory.java\n--rw----     2.0 fat     1096 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/ConfigChangeType.java\n--rw----     2.0 fat     2827 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/ConfigChangedEvent.java\n--rw----     2.0 fat     1297 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/ConfigurationListener.java\n--rw----     2.0 fat     1095 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/Constants.java\n--rw----     2.0 fat     9201 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/DynamicConfiguration.java\n--rw----     2.0 fat     1987 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/DynamicConfigurationFactory.java\n--rw----     2.0 fat     7035 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/TreePathDynamicConfiguration.java\n+-rw----     2.0 fat    10112 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/AbstractDynamicConfiguration.java\n+-rw----     2.0 fat     1782 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/AbstractDynamicConfigurationFactory.java\n+-rw----     2.0 fat     1133 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/ConfigChangeType.java\n+-rw----     2.0 fat     2921 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/ConfigChangedEvent.java\n+-rw----     2.0 fat     1330 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/ConfigurationListener.java\n+-rw----     2.0 fat     1120 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/Constants.java\n+-rw----     2.0 fat     9446 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/DynamicConfiguration.java\n+-rw----     2.0 fat     2033 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/DynamicConfigurationFactory.java\n+-rw----     2.0 fat     7221 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/TreePathDynamicConfiguration.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/file/\n--rw----     2.0 fat    22570 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfiguration.java\n--rw----     2.0 fat     1487 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfigurationFactory.java\n+-rw----     2.0 fat    23176 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfiguration.java\n+-rw----     2.0 fat     1522 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfigurationFactory.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/nop/\n--rw----     2.0 fat     2215 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java\n--rw----     2.0 fat     1316 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfigurationFactory.java\n+-rw----     2.0 fat     2287 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java\n+-rw----     2.0 fat     1349 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfigurationFactory.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/wrapper/\n--rw----     2.0 fat     3914 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java\n+-rw----     2.0 fat     4015 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/constants/\n--rw----     2.0 fat    10256 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/constants/CommonConstants.java\n--rw----     2.0 fat      959 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/constants/FilterConstants.java\n--rw----     2.0 fat     1071 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/constants/QosConstants.java\n--rw----     2.0 fat     3469 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/constants/RegistryConstants.java\n--rw----     2.0 fat      950 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/constants/RemotingConstants.java\n+-rw----     2.0 fat    10649 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/constants/CommonConstants.java\n+-rw----     2.0 fat      983 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/constants/FilterConstants.java\n+-rw----     2.0 fat     1103 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/constants/QosConstants.java\n+-rw----     2.0 fat     3591 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/constants/RegistryConstants.java\n+-rw----     2.0 fat      976 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/constants/RemotingConstants.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/context/\n--rw----     2.0 fat      949 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/context/FrameworkExt.java\n--rw----     2.0 fat     1469 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/context/Lifecycle.java\n--rw----     2.0 fat     1146 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/context/LifecycleAdapter.java\n+-rw----     2.0 fat      973 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/context/FrameworkExt.java\n+-rw----     2.0 fat     1517 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/context/Lifecycle.java\n+-rw----     2.0 fat     1181 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/context/LifecycleAdapter.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/\n--rw----     2.0 fat     3680 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/Converter.java\n--rw----     2.0 fat     1041 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringConverter.java\n--rw----     2.0 fat     1330 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToBooleanConverter.java\n--rw----     2.0 fat     1300 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToCharArrayConverter.java\n--rw----     2.0 fat     1498 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToCharacterConverter.java\n--rw----     2.0 fat     1326 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToDoubleConverter.java\n--rw----     2.0 fat     1320 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToFloatConverter.java\n--rw----     2.0 fat     1326 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToIntegerConverter.java\n--rw----     2.0 fat     1316 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToLongConverter.java\n--rw----     2.0 fat     1267 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToOptionalConverter.java\n--rw----     2.0 fat     1321 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToShortConverter.java\n--rw----     2.0 fat     1106 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToStringConverter.java\n+-rw----     2.0 fat     3788 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/Converter.java\n+-rw----     2.0 fat     1068 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringConverter.java\n+-rw----     2.0 fat     1368 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToBooleanConverter.java\n+-rw----     2.0 fat     1339 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToCharArrayConverter.java\n+-rw----     2.0 fat     1542 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToCharacterConverter.java\n+-rw----     2.0 fat     1365 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToDoubleConverter.java\n+-rw----     2.0 fat     1358 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToFloatConverter.java\n+-rw----     2.0 fat     1364 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToIntegerConverter.java\n+-rw----     2.0 fat     1355 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToLongConverter.java\n+-rw----     2.0 fat     1307 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToOptionalConverter.java\n+-rw----     2.0 fat     1360 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToShortConverter.java\n+-rw----     2.0 fat     1136 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/StringToStringConverter.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/\n--rw----     2.0 fat     3377 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/MultiValueConverter.java\n--rw----     2.0 fat     1908 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToArrayConverter.java\n--rw----     2.0 fat     1295 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToBlockingDequeConverter.java\n--rw----     2.0 fat     1336 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToBlockingQueueConverter.java\n--rw----     2.0 fat     1238 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToCollectionConverter.java\n--rw----     2.0 fat     1215 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToDequeConverter.java\n--rw----     2.0 fat     3106 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToIterableConverter.java\n--rw----     2.0 fat     1208 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToListConverter.java\n--rw----     2.0 fat     2163 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToMultiValueConverter.java\n--rw----     2.0 fat     1265 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToNavigableSetConverter.java\n--rw----     2.0 fat     1239 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToQueueConverter.java\n--rw----     2.0 fat     1199 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToSetConverter.java\n--rw----     2.0 fat     1225 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToSortedSetConverter.java\n--rw----     2.0 fat     1291 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToTransferQueueConverter.java\n+-rw----     2.0 fat     3469 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/MultiValueConverter.java\n+-rw----     2.0 fat     1968 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToArrayConverter.java\n+-rw----     2.0 fat     1328 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToBlockingDequeConverter.java\n+-rw----     2.0 fat     1370 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToBlockingQueueConverter.java\n+-rw----     2.0 fat     1271 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToCollectionConverter.java\n+-rw----     2.0 fat     1248 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToDequeConverter.java\n+-rw----     2.0 fat     3186 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToIterableConverter.java\n+-rw----     2.0 fat     1241 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToListConverter.java\n+-rw----     2.0 fat     2224 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToMultiValueConverter.java\n+-rw----     2.0 fat     1299 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToNavigableSetConverter.java\n+-rw----     2.0 fat     1273 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToQueueConverter.java\n+-rw----     2.0 fat     1232 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToSetConverter.java\n+-rw----     2.0 fat     1258 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToSortedSetConverter.java\n+-rw----     2.0 fat     1324 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/convert/multiple/StringToTransferQueueConverter.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/\n -rw----     2.0 fat     3450 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/Activate.java\n--rw----     2.0 fat     2631 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/Adaptive.java\n--rw----     2.0 fat    15367 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/AdaptiveClassCodeGenerator.java\n+-rw----     2.0 fat     2690 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/Adaptive.java\n+-rw----     2.0 fat    15763 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/AdaptiveClassCodeGenerator.java\n -rw----     2.0 fat     1209 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/DisableInject.java\n--rw----     2.0 fat     1165 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/DubboInternalLoadingStrategy.java\n--rw----     2.0 fat     1220 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/DubboLoadingStrategy.java\n+-rw----     2.0 fat     1200 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/DubboInternalLoadingStrategy.java\n+-rw----     2.0 fat     1262 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/DubboLoadingStrategy.java\n -rw----     2.0 fat     1146 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/ExtensionFactory.java\n--rw----     2.0 fat    40175 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/ExtensionLoader.java\n--rw----     2.0 fat     1422 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/LoadingStrategy.java\n+-rw----     2.0 fat    41222 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/ExtensionLoader.java\n+-rw----     2.0 fat     1464 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/LoadingStrategy.java\n -rw----     2.0 fat     2354 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/SPI.java\n--rw----     2.0 fat     1225 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/ServicesLoadingStrategy.java\n--rw----     2.0 fat     1296 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/Wrapper.java\n+-rw----     2.0 fat     1266 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/ServicesLoadingStrategy.java\n+-rw----     2.0 fat     1333 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/Wrapper.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/factory/\n -rw----     2.0 fat     2048 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/factory/AdaptiveExtensionFactory.java\n -rw----     2.0 fat     1551 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/factory/SpiExtensionFactory.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/support/\n -rw----     2.0 fat     4564 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/support/ActivateComparator.java\n--rw----     2.0 fat     3066 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/support/WrapperComparator.java\n+-rw----     2.0 fat     3160 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/extension/support/WrapperComparator.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/function/\n--rw----     2.0 fat     2341 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/function/Predicates.java\n--rw----     2.0 fat     2683 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/function/Streams.java\n--rw----     2.0 fat     1592 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/function/ThrowableAction.java\n--rw----     2.0 fat     2032 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/function/ThrowableConsumer.java\n--rw----     2.0 fat     2181 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/function/ThrowableFunction.java\n+-rw----     2.0 fat     2415 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/function/Predicates.java\n+-rw----     2.0 fat     2754 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/function/Streams.java\n+-rw----     2.0 fat     1643 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/function/ThrowableAction.java\n+-rw----     2.0 fat     2098 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/function/ThrowableConsumer.java\n+-rw----     2.0 fat     2252 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/function/ThrowableFunction.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/infra/\n--rw----     2.0 fat     1561 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/infra/InfraAdapter.java\n+-rw----     2.0 fat     1607 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/infra/InfraAdapter.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/infra/support/\n--rw----     2.0 fat     1284 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/infra/support/CmdbAdapter.java\n--rw----     2.0 fat     2901 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/infra/support/EnvironmentAdapter.java\n+-rw----     2.0 fat     1323 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/infra/support/CmdbAdapter.java\n+-rw----     2.0 fat     2973 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/infra/support/EnvironmentAdapter.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/io/\n--rw----     2.0 fat    25880 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/io/Bytes.java\n--rw----     2.0 fat     6914 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/io/StreamUtils.java\n--rw----     2.0 fat     3051 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/io/UnsafeByteArrayInputStream.java\n--rw----     2.0 fat     2958 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/io/UnsafeByteArrayOutputStream.java\n+-rw----     2.0 fat    26815 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/io/Bytes.java\n+-rw----     2.0 fat     7145 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/io/StreamUtils.java\n+-rw----     2.0 fat     3169 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/io/UnsafeByteArrayInputStream.java\n+-rw----     2.0 fat     3059 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/io/UnsafeByteArrayOutputStream.java\n -rw----     2.0 fat     3173 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/io/UnsafeStringReader.java\n--rw----     2.0 fat     2773 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/io/UnsafeStringWriter.java\n+-rw----     2.0 fat     2879 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/io/UnsafeStringWriter.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/json/\n--rw----     2.0 fat    17621 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/GenericJSONConverter.java\n+-rw----     2.0 fat    18149 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/GenericJSONConverter.java\n -rw----     2.0 fat    13189 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/J2oVisitor.java\n -rw----     2.0 fat    27300 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/JSON.java\n -rw----     2.0 fat     4912 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/JSONArray.java\n -rw----     2.0 fat     1461 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/JSONConverter.java\n -rw----     2.0 fat     1198 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/JSONNode.java\n -rw----     2.0 fat     5627 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/JSONObject.java\n -rw----     2.0 fat     2214 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/JSONReader.java\n -rw----     2.0 fat     2247 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/JSONToken.java\n -rw----     2.0 fat     2796 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/JSONVisitor.java\n -rw----     2.0 fat     8159 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/JSONWriter.java\n -rw----     2.0 fat     1161 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/ParseException.java\n--rw----     2.0 fat    29369 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/Yylex.java\n+-rw----     2.0 fat    30215 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/json/Yylex.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/lang/\n--rw----     2.0 fat     2306 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/lang/Prioritized.java\n--rw----     2.0 fat     1160 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/lang/ShutdownHookCallback.java\n--rw----     2.0 fat     2336 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/lang/ShutdownHookCallbacks.java\n+-rw----     2.0 fat     2382 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/lang/Prioritized.java\n+-rw----     2.0 fat     1195 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/lang/ShutdownHookCallback.java\n+-rw----     2.0 fat     2407 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/lang/ShutdownHookCallbacks.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/logger/\n -rw----     2.0 fat     1214 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/logger/Level.java\n--rw----     2.0 fat     3800 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/logger/Logger.java\n+-rw----     2.0 fat     3970 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/logger/Logger.java\n -rw----     2.0 fat     1861 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/logger/LoggerAdapter.java\n -rw----     2.0 fat     5253 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/logger/LoggerFactory.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/logger/jcl/\n -rw----     2.0 fat     3342 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/logger/jcl/JclLogger.java\n -rw----     2.0 fat     1784 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/logger/jcl/JclLoggerAdapter.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/logger/jdk/\n -rw----     2.0 fat     3355 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/logger/jdk/JdkLogger.java\n@@ -221,156 +221,156 @@\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/status/support/\n -rw----     2.0 fat     2215 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/status/support/LoadStatusChecker.java\n -rw----     2.0 fat     1793 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/status/support/MemoryStatusChecker.java\n -rw----     2.0 fat     2004 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/status/support/StatusUtils.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/store/\n -rw----     2.0 fat     1280 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/store/DataStore.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/store/support/\n--rw----     2.0 fat     2247 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/store/support/SimpleDataStore.java\n+-rw----     2.0 fat     2312 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/store/support/SimpleDataStore.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/threadlocal/\n--rw----     2.0 fat     1849 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadlocal/InternalRunnable.java\n+-rw----     2.0 fat     1902 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadlocal/InternalRunnable.java\n -rw----     2.0 fat     2445 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadlocal/InternalThread.java\n--rw----     2.0 fat     6904 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadlocal/InternalThreadLocal.java\n--rw----     2.0 fat     5464 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadlocal/InternalThreadLocalMap.java\n--rw----     2.0 fat     1630 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadlocal/NamedInternalThreadFactory.java\n+-rw----     2.0 fat     7102 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadlocal/InternalThreadLocal.java\n+-rw----     2.0 fat     5631 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadlocal/InternalThreadLocalMap.java\n+-rw----     2.0 fat     1677 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadlocal/NamedInternalThreadFactory.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/\n--rw----     2.0 fat     1355 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/ThreadPool.java\n--rw----     2.0 fat     6805 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/ThreadlessExecutor.java\n+-rw----     2.0 fat     1397 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/ThreadPool.java\n+-rw----     2.0 fat     7007 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/ThreadlessExecutor.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/concurrent/\n--rw----     2.0 fat     2316 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/concurrent/ScheduledCompletableFuture.java\n+-rw----     2.0 fat     2381 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/concurrent/ScheduledCompletableFuture.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/event/\n--rw----     2.0 fat     1243 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEvent.java\n+-rw----     2.0 fat     1281 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEvent.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/manager/\n--rw----     2.0 fat     7728 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/manager/DefaultExecutorRepository.java\n--rw----     2.0 fat     2329 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/manager/ExecutorRepository.java\n--rw----     2.0 fat     2042 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/manager/Ring.java\n+-rw----     2.0 fat     7903 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/manager/DefaultExecutorRepository.java\n+-rw----     2.0 fat     2400 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/manager/ExecutorRepository.java\n+-rw----     2.0 fat     2108 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/manager/Ring.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/\n -rw----     2.0 fat     5991 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/AbortPolicyWithReport.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/cached/\n -rw----     2.0 fat     3197 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/cached/CachedThreadPool.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/eager/\n--rw----     2.0 fat     3009 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/eager/EagerThreadPool.java\n+-rw----     2.0 fat     3074 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/eager/EagerThreadPool.java\n -rw----     2.0 fat     3262 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/eager/EagerThreadPoolExecutor.java\n -rw----     2.0 fat     2951 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/eager/TaskQueue.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/fixed/\n -rw----     2.0 fat     2723 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/fixed/FixedThreadPool.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/limited/\n--rw----     2.0 fat     2933 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/limited/LimitedThreadPool.java\n+-rw----     2.0 fat     2992 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/threadpool/support/limited/LimitedThreadPool.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/timer/\n--rw----     2.0 fat    31161 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/timer/HashedWheelTimer.java\n+-rw----     2.0 fat    31975 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/timer/HashedWheelTimer.java\n -rw----     2.0 fat     1692 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/timer/Timeout.java\n -rw----     2.0 fat     1897 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/timer/Timer.java\n -rw----     2.0 fat     1175 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/timer/TimerTask.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/\n--rw----     2.0 fat    21253 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/AnnotationUtils.java\n--rw----     2.0 fat     2358 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ArrayUtils.java\n+-rw----     2.0 fat    21735 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/AnnotationUtils.java\n+-rw----     2.0 fat     2437 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ArrayUtils.java\n -rw----     2.0 fat     1438 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/Assert.java\n -rw----     2.0 fat     4681 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/AtomicPositiveInteger.java\n -rw----     2.0 fat     4986 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/CIDRUtils.java\n--rw----     2.0 fat     1296 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/CharSequenceComparator.java\n--rw----     2.0 fat     5560 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ClassHelper.java\n--rw----     2.0 fat    17955 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ClassUtils.java\n+-rw----     2.0 fat     1333 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/CharSequenceComparator.java\n+-rw----     2.0 fat     5713 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ClassHelper.java\n+-rw----     2.0 fat    18451 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ClassUtils.java\n -rw----     2.0 fat    11618 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/CollectionUtils.java\n--rw----     2.0 fat     9054 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/CompatibleTypeUtils.java\n+-rw----     2.0 fat     9283 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/CompatibleTypeUtils.java\n -rw----     2.0 fat     4553 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ConcurrentHashSet.java\n -rw----     2.0 fat    12213 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ConfigUtils.java\n--rw----     2.0 fat     2212 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/DefaultPage.java\n+-rw----     2.0 fat     2294 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/DefaultPage.java\n -rw----     2.0 fat     2063 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/DubboAppender.java\n--rw----     2.0 fat     5181 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ExecutorUtil.java\n--rw----     2.0 fat     4929 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/FieldUtils.java\n+-rw----     2.0 fat     5321 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ExecutorUtil.java\n+-rw----     2.0 fat     5071 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/FieldUtils.java\n -rw----     2.0 fat     1091 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/Holder.java\n -rw----     2.0 fat     8471 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/IOUtils.java\n -rw----     2.0 fat     4172 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/JVMUtil.java\n--rw----     2.0 fat     8550 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/LFUCache.java\n+-rw----     2.0 fat     8835 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/LFUCache.java\n -rw----     2.0 fat     3010 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/LRUCache.java\n -rw----     2.0 fat     3498 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/Log.java\n -rw----     2.0 fat     4289 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/LogHelper.java\n -rw----     2.0 fat     4258 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/LogUtil.java\n--rw----     2.0 fat     2400 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/MemberUtils.java\n--rw----     2.0 fat     2361 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/MethodComparator.java\n--rw----     2.0 fat    14795 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/MethodUtils.java\n+-rw----     2.0 fat     2461 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/MemberUtils.java\n+-rw----     2.0 fat     2432 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/MethodComparator.java\n+-rw----     2.0 fat    15184 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/MethodUtils.java\n -rw----     2.0 fat     2139 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/NamedThreadFactory.java\n -rw----     2.0 fat    24007 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/NetUtils.java\n--rw----     2.0 fat     2067 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/Page.java\n--rw----     2.0 fat     2394 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/PathUtils.java\n+-rw----     2.0 fat     2154 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/Page.java\n+-rw----     2.0 fat     2468 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/PathUtils.java\n -rw----     2.0 fat    33568 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/PojoUtils.java\n--rw----     2.0 fat    47389 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ReflectUtils.java\n--rw----     2.0 fat     5895 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/SerializeClassChecker.java\n--rw----     2.0 fat     4554 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ServiceAnnotationResolver.java\n--rw----     2.0 fat     3261 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/Stack.java\n--rw----     2.0 fat     2588 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/StringConstantFieldValuePredicate.java\n+-rw----     2.0 fat    48784 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ReflectUtils.java\n+-rw----     2.0 fat     6045 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/SerializeClassChecker.java\n+-rw----     2.0 fat     4686 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/ServiceAnnotationResolver.java\n+-rw----     2.0 fat     3403 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/Stack.java\n+-rw----     2.0 fat     2655 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/StringConstantFieldValuePredicate.java\n -rw----     2.0 fat    37744 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/StringUtils.java\n--rw----     2.0 fat     8696 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/TypeUtils.java\n+-rw----     2.0 fat     8920 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/TypeUtils.java\n -rw----     2.0 fat    25423 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/UrlUtils.java\n--rw----     2.0 fat     9926 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/Utf8Utils.java\n+-rw----     2.0 fat    10155 bX stor 70-Jan-01 00:00 org/apache/dubbo/common/utils/Utf8Utils.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/config/\n--rw----     2.0 fat    25642 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/AbstractConfig.java\n--rw----     2.0 fat    24311 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/AbstractInterfaceConfig.java\n--rw----     2.0 fat     4661 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/AbstractMethodConfig.java\n--rw----     2.0 fat     5621 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/AbstractReferenceConfig.java\n--rw----     2.0 fat     6722 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/AbstractServiceConfig.java\n--rw----     2.0 fat    13583 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ApplicationConfig.java\n--rw----     2.0 fat     2126 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ArgumentConfig.java\n--rw----     2.0 fat     8859 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ConfigCenterConfig.java\n--rw----     2.0 fat     2849 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/Constants.java\n--rw----     2.0 fat     3568 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ConsumerConfig.java\n--rw----     2.0 fat     6022 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/MetadataReportConfig.java\n--rw----     2.0 fat     8564 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/MethodConfig.java\n--rw----     2.0 fat     1626 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/MetricsConfig.java\n--rw----     2.0 fat     3573 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ModuleConfig.java\n--rw----     2.0 fat     3712 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/MonitorConfig.java\n--rw----     2.0 fat    13245 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ProtocolConfig.java\n--rw----     2.0 fat    10388 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ProviderConfig.java\n--rw----     2.0 fat     8359 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ReferenceConfigBase.java\n--rw----     2.0 fat    13074 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/RegistryConfig.java\n--rw----     2.0 fat    13449 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ServiceConfigBase.java\n--rw----     2.0 fat     7142 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/SslConfig.java\n+-rw----     2.0 fat    26256 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/AbstractConfig.java\n+-rw----     2.0 fat    25069 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/AbstractInterfaceConfig.java\n+-rw----     2.0 fat     4869 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/AbstractMethodConfig.java\n+-rw----     2.0 fat     5847 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/AbstractReferenceConfig.java\n+-rw----     2.0 fat     7013 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/AbstractServiceConfig.java\n+-rw----     2.0 fat    14087 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ApplicationConfig.java\n+-rw----     2.0 fat     2209 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ArgumentConfig.java\n+-rw----     2.0 fat     9148 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ConfigCenterConfig.java\n+-rw----     2.0 fat     2969 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/Constants.java\n+-rw----     2.0 fat     3703 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ConsumerConfig.java\n+-rw----     2.0 fat     6249 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/MetadataReportConfig.java\n+-rw----     2.0 fat     8896 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/MethodConfig.java\n+-rw----     2.0 fat     1679 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/MetricsConfig.java\n+-rw----     2.0 fat     3726 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ModuleConfig.java\n+-rw----     2.0 fat     3872 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/MonitorConfig.java\n+-rw----     2.0 fat    13843 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ProtocolConfig.java\n+-rw----     2.0 fat    10860 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ProviderConfig.java\n+-rw----     2.0 fat     8623 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ReferenceConfigBase.java\n+-rw----     2.0 fat    13607 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/RegistryConfig.java\n+-rw----     2.0 fat    13864 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/ServiceConfigBase.java\n+-rw----     2.0 fat     7330 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/SslConfig.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/\n--rw----     2.0 fat     1444 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/Argument.java\n--rw----     2.0 fat     7538 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/DubboReference.java\n--rw----     2.0 fat     6794 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/DubboService.java\n--rw----     2.0 fat     1873 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/Method.java\n--rw----     2.0 fat     7067 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/Reference.java\n--rw----     2.0 fat     6844 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/Service.java\n+-rw----     2.0 fat     1488 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/Argument.java\n+-rw----     2.0 fat     7836 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/DubboReference.java\n+-rw----     2.0 fat     7072 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/DubboService.java\n+-rw----     2.0 fat     1944 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/Method.java\n+-rw----     2.0 fat     7349 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/Reference.java\n+-rw----     2.0 fat     7125 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/annotation/Service.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/config/context/\n--rw----     2.0 fat     1937 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/context/ConfigConfigurationAdapter.java\n--rw----     2.0 fat    18420 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/context/ConfigManager.java\n+-rw----     2.0 fat     1985 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/context/ConfigConfigurationAdapter.java\n+-rw----     2.0 fat    18951 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/context/ConfigManager.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/config/support/\n--rw----     2.0 fat     2038 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/support/Parameter.java\n+-rw----     2.0 fat     2099 bX stor 70-Jan-01 00:00 org/apache/dubbo/config/support/Parameter.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/event/\n--rw----     2.0 fat     5846 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/AbstractEventDispatcher.java\n--rw----     2.0 fat     1371 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/ConditionalEventListener.java\n--rw----     2.0 fat     1124 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/DirectEventDispatcher.java\n--rw----     2.0 fat     1566 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/Event.java\n--rw----     2.0 fat     2268 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/EventDispatcher.java\n--rw----     2.0 fat     4714 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/EventListener.java\n--rw----     2.0 fat     1123 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/GenericEvent.java\n--rw----     2.0 fat     4621 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/GenericEventListener.java\n--rw----     2.0 fat     5306 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/Listenable.java\n--rw----     2.0 fat     1213 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/ParallelEventDispatcher.java\n+-rw----     2.0 fat     6014 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/AbstractEventDispatcher.java\n+-rw----     2.0 fat     1406 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/ConditionalEventListener.java\n+-rw----     2.0 fat     1154 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/DirectEventDispatcher.java\n+-rw----     2.0 fat     1615 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/Event.java\n+-rw----     2.0 fat     2334 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/EventDispatcher.java\n+-rw----     2.0 fat     4832 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/EventListener.java\n+-rw----     2.0 fat     1157 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/GenericEvent.java\n+-rw----     2.0 fat     4751 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/GenericEventListener.java\n+-rw----     2.0 fat     5437 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/Listenable.java\n+-rw----     2.0 fat     1245 bX stor 70-Jan-01 00:00 org/apache/dubbo/event/ParallelEventDispatcher.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/\n--rw----     2.0 fat      996 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ApplicationInitListener.java\n--rw----     2.0 fat     4776 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ApplicationModel.java\n--rw----     2.0 fat     2617 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/AsyncMethodInfo.java\n--rw----     2.0 fat      964 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/BuiltinServiceDetector.java\n--rw----     2.0 fat     3054 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ConsumerMethodModel.java\n--rw----     2.0 fat     7069 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ConsumerModel.java\n--rw----     2.0 fat     2992 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/MethodDescriptor.java\n--rw----     2.0 fat     2673 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ProviderMethodModel.java\n--rw----     2.0 fat     6669 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ProviderModel.java\n--rw----     2.0 fat     4362 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ServiceDescriptor.java\n--rw----     2.0 fat     3100 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ServiceMetadata.java\n--rw----     2.0 fat     7293 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ServiceRepository.java\n+-rw----     2.0 fat     1022 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ApplicationInitListener.java\n+-rw----     2.0 fat     4904 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ApplicationModel.java\n+-rw----     2.0 fat     2704 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/AsyncMethodInfo.java\n+-rw----     2.0 fat      990 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/BuiltinServiceDetector.java\n+-rw----     2.0 fat     3155 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ConsumerMethodModel.java\n+-rw----     2.0 fat     7288 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ConsumerModel.java\n+-rw----     2.0 fat     3085 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/MethodDescriptor.java\n+-rw----     2.0 fat     2753 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ProviderMethodModel.java\n+-rw----     2.0 fat     6874 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ProviderModel.java\n+-rw----     2.0 fat     4481 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ServiceDescriptor.java\n+-rw----     2.0 fat     3202 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ServiceMetadata.java\n+-rw----     2.0 fat     7478 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/model/ServiceRepository.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/\n--rw----     2.0 fat      897 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/Destroyable.java\n--rw----     2.0 fat     1041 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/EchoService.java\n--rw----     2.0 fat     1062 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/EchoServiceDetector.java\n--rw----     2.0 fat     1993 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/GenericException.java\n--rw----     2.0 fat     1886 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/GenericService.java\n--rw----     2.0 fat     1068 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/GenericServiceDetector.java\n+-rw----     2.0 fat      920 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/Destroyable.java\n+-rw----     2.0 fat     1073 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/EchoService.java\n+-rw----     2.0 fat     1090 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/EchoServiceDetector.java\n+-rw----     2.0 fat     2057 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/GenericException.java\n+-rw----     2.0 fat     1933 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/GenericService.java\n+-rw----     2.0 fat     1096 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/service/GenericServiceDetector.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/support/\n--rw----     2.0 fat     2889 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/support/GroupServiceKeyCache.java\n--rw----     2.0 fat     4189 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/support/ProtocolUtils.java\n+-rw----     2.0 fat     2960 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/support/GroupServiceKeyCache.java\n+-rw----     2.0 fat     4280 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/support/ProtocolUtils.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 security/\n--rw----     2.0 fat     4520 bX stor 70-Jan-01 00:00 security/serialize.blockedlist\n-374 files, 1593298 bytes uncompressed, 1593298 bytes compressed:  0.0%\n+-rw----     2.0 fat     4686 bX stor 70-Jan-01 00:00 security/serialize.blockedlist\n+374 files, 1624110 bytes uncompressed, 1624110 bytes compressed:  0.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -222,20905 +222,20905 @@\n #          Zero length filename\n #\n 0037F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 0037F5   Length              0005 (5)\n 0037F7   Flags               01 (1) 'Modification'\n 0037F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n 0037FC PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-0038AA DATA DESCRIPTOR       08074B50 (134695760)\n-0038AE CRC                   193ACDA3 (423284131)\n-0038B2 Compressed Size       000000AE (174)\n-0038B6 Uncompressed Size     000000AE (174)\n-\n-0038BA LOCAL HEADER #10      04034B50 (67324752)\n-0038BE Extract Zip Spec      14 (20) '2.0'\n-0038BF Extract OS            00 (0) 'MS-DOS'\n-0038C0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0038C2 Compression Method    0000 (0) 'Stored'\n-0038C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0038C8 CRC                   00000000 (0)\n-0038CC Compressed Size       00000000 (0)\n-0038D0 Uncompressed Size     00000000 (0)\n-0038D4 Filename Length       0044 (68)\n-0038D6 Extra Length          0009 (9)\n-0038D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x38D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-00391C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-00391E   Length              0005 (5)\n-003920   Flags               01 (1) 'Modification'\n-003921   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-003925 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-\n-0039C8 DATA DESCRIPTOR       08074B50 (134695760)\n-0039CC CRC                   DA7850A4 (3665318052)\n-0039D0 Compressed Size       000000A3 (163)\n-0039D4 Uncompressed Size     000000A3 (163)\n-\n-0039D8 LOCAL HEADER #11      04034B50 (67324752)\n-0039DC Extract Zip Spec      14 (20) '2.0'\n-0039DD Extract OS            00 (0) 'MS-DOS'\n-0039DE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0039E0 Compression Method    0000 (0) 'Stored'\n-0039E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0039E6 CRC                   00000000 (0)\n-0039EA Compressed Size       00000000 (0)\n-0039EE Uncompressed Size     00000000 (0)\n-0039F2 Filename Length       0041 (65)\n-0039F4 Extra Length          0009 (9)\n-0039F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x39F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-003A37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-003A39   Length              0005 (5)\n-003A3B   Flags               01 (1) 'Modification'\n-003A3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-003A40 PAYLOAD\n-\n-003D52 DATA DESCRIPTOR       08074B50 (134695760)\n-003D56 CRC                   99161436 (2568361014)\n-003D5A Compressed Size       00000312 (786)\n-003D5E Uncompressed Size     00000312 (786)\n-\n-003D62 LOCAL HEADER #12      04034B50 (67324752)\n-003D66 Extract Zip Spec      14 (20) '2.0'\n-003D67 Extract OS            00 (0) 'MS-DOS'\n-003D68 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-003D6A Compression Method    0000 (0) 'Stored'\n-003D6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-003D70 CRC                   00000000 (0)\n-003D74 Compressed Size       00000000 (0)\n-003D78 Uncompressed Size     00000000 (0)\n-003D7C Filename Length       0054 (84)\n-003D7E Extra Length          0009 (9)\n-003D80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-003DD4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-003DD6   Length              0005 (5)\n-003DD8   Flags               01 (1) 'Modification'\n-003DD9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-003DDD PAYLOAD\n-\n-0041DB DATA DESCRIPTOR       08074B50 (134695760)\n-0041DF CRC                   81B9C79B (2176436123)\n-0041E3 Compressed Size       000003FE (1022)\n-0041E7 Uncompressed Size     000003FE (1022)\n-\n-0041EB LOCAL HEADER #13      04034B50 (67324752)\n-0041EF Extract Zip Spec      14 (20) '2.0'\n-0041F0 Extract OS            00 (0) 'MS-DOS'\n-0041F1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0041F3 Compression Method    0000 (0) 'Stored'\n-0041F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0041F9 CRC                   00000000 (0)\n-0041FD Compressed Size       00000000 (0)\n-004201 Uncompressed Size     00000000 (0)\n-004205 Filename Length       004A (74)\n-004207 Extra Length          0009 (9)\n-004209 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4209: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-004253 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-004255   Length              0005 (5)\n-004257   Flags               01 (1) 'Modification'\n-004258   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-00425C PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0038AB DATA DESCRIPTOR       08074B50 (134695760)\n+0038AF CRC                   C7151CD7 (3340049623)\n+0038B3 Compressed Size       000000AF (175)\n+0038B7 Uncompressed Size     000000AF (175)\n+\n+0038BB LOCAL HEADER #10      04034B50 (67324752)\n+0038BF Extract Zip Spec      14 (20) '2.0'\n+0038C0 Extract OS            00 (0) 'MS-DOS'\n+0038C1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0038C3 Compression Method    0000 (0) 'Stored'\n+0038C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0038C9 CRC                   00000000 (0)\n+0038CD Compressed Size       00000000 (0)\n+0038D1 Uncompressed Size     00000000 (0)\n+0038D5 Filename Length       0044 (68)\n+0038D7 Extra Length          0009 (9)\n+0038D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x38D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+00391D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+00391F   Length              0005 (5)\n+003921   Flags               01 (1) 'Modification'\n+003922   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+003926 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+\n+0039CB DATA DESCRIPTOR       08074B50 (134695760)\n+0039CF CRC                   FD9DED40 (4254985536)\n+0039D3 Compressed Size       000000A5 (165)\n+0039D7 Uncompressed Size     000000A5 (165)\n+\n+0039DB LOCAL HEADER #11      04034B50 (67324752)\n+0039DF Extract Zip Spec      14 (20) '2.0'\n+0039E0 Extract OS            00 (0) 'MS-DOS'\n+0039E1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0039E3 Compression Method    0000 (0) 'Stored'\n+0039E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0039E9 CRC                   00000000 (0)\n+0039ED Compressed Size       00000000 (0)\n+0039F1 Uncompressed Size     00000000 (0)\n+0039F5 Filename Length       0041 (65)\n+0039F7 Extra Length          0009 (9)\n+0039F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x39F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+003A3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+003A3C   Length              0005 (5)\n+003A3E   Flags               01 (1) 'Modification'\n+003A3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+003A43 PAYLOAD\n+\n+003D5F DATA DESCRIPTOR       08074B50 (134695760)\n+003D63 CRC                   6F27839F (1864860575)\n+003D67 Compressed Size       0000031C (796)\n+003D6B Uncompressed Size     0000031C (796)\n+\n+003D6F LOCAL HEADER #12      04034B50 (67324752)\n+003D73 Extract Zip Spec      14 (20) '2.0'\n+003D74 Extract OS            00 (0) 'MS-DOS'\n+003D75 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+003D77 Compression Method    0000 (0) 'Stored'\n+003D79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+003D7D CRC                   00000000 (0)\n+003D81 Compressed Size       00000000 (0)\n+003D85 Uncompressed Size     00000000 (0)\n+003D89 Filename Length       0054 (84)\n+003D8B Extra Length          0009 (9)\n+003D8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+003DE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+003DE3   Length              0005 (5)\n+003DE5   Flags               01 (1) 'Modification'\n+003DE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+003DEA PAYLOAD\n+\n+0041F4 DATA DESCRIPTOR       08074B50 (134695760)\n+0041F8 CRC                   0A4E0AA7 (172886695)\n+0041FC Compressed Size       0000040A (1034)\n+004200 Uncompressed Size     0000040A (1034)\n+\n+004204 LOCAL HEADER #13      04034B50 (67324752)\n+004208 Extract Zip Spec      14 (20) '2.0'\n+004209 Extract OS            00 (0) 'MS-DOS'\n+00420A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+00420C Compression Method    0000 (0) 'Stored'\n+00420E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+004212 CRC                   00000000 (0)\n+004216 Compressed Size       00000000 (0)\n+00421A Uncompressed Size     00000000 (0)\n+00421E Filename Length       004A (74)\n+004220 Extra Length          0009 (9)\n+004222 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4222: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+00426C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+00426E   Length              0005 (5)\n+004270   Flags               01 (1) 'Modification'\n+004271   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+004275 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXX\n \n-0042EA DATA DESCRIPTOR       08074B50 (134695760)\n-0042EE CRC                   0FF999F7 (268016119)\n-0042F2 Compressed Size       0000008E (142)\n-0042F6 Uncompressed Size     0000008E (142)\n-\n-0042FA LOCAL HEADER #14      04034B50 (67324752)\n-0042FE Extract Zip Spec      14 (20) '2.0'\n-0042FF Extract OS            00 (0) 'MS-DOS'\n-004300 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-004302 Compression Method    0000 (0) 'Stored'\n-004304 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-004308 CRC                   00000000 (0)\n-00430C Compressed Size       00000000 (0)\n-004310 Uncompressed Size     00000000 (0)\n-004314 Filename Length       0042 (66)\n-004316 Extra Length          0009 (9)\n-004318 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4318: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-00435A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-00435C   Length              0005 (5)\n-00435E   Flags               01 (1) 'Modification'\n-00435F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-004363 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-\n-0043A7 DATA DESCRIPTOR       08074B50 (134695760)\n-0043AB CRC                   9C0450EC (2617528556)\n-0043AF Compressed Size       00000044 (68)\n-0043B3 Uncompressed Size     00000044 (68)\n-\n-0043B7 LOCAL HEADER #15      04034B50 (67324752)\n-0043BB Extract Zip Spec      14 (20) '2.0'\n-0043BC Extract OS            00 (0) 'MS-DOS'\n-0043BD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0043BF Compression Method    0000 (0) 'Stored'\n-0043C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0043C5 CRC                   00000000 (0)\n-0043C9 Compressed Size       00000000 (0)\n-0043CD Uncompressed Size     00000000 (0)\n-0043D1 Filename Length       0044 (68)\n-0043D3 Extra Length          0009 (9)\n-0043D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x43D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-004419 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-00441B   Length              0005 (5)\n-00441D   Flags               01 (1) 'Modification'\n-00441E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-004422 PAYLOAD\n-\n-004554 DATA DESCRIPTOR       08074B50 (134695760)\n-004558 CRC                   56E1501D (1457606685)\n-00455C Compressed Size       00000132 (306)\n-004560 Uncompressed Size     00000132 (306)\n-\n-004564 LOCAL HEADER #16      04034B50 (67324752)\n-004568 Extract Zip Spec      14 (20) '2.0'\n-004569 Extract OS            00 (0) 'MS-DOS'\n-00456A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-00456C Compression Method    0000 (0) 'Stored'\n-00456E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-004572 CRC                   00000000 (0)\n-004576 Compressed Size       00000000 (0)\n-00457A Uncompressed Size     00000000 (0)\n-00457E Filename Length       0044 (68)\n-004580 Extra Length          0009 (9)\n-004582 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4582: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0045C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0045C8   Length              0005 (5)\n-0045CA   Flags               01 (1) 'Modification'\n-0045CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0045CF PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-\n-00464F DATA DESCRIPTOR       08074B50 (134695760)\n-004653 CRC                   F0F60C18 (4042656792)\n-004657 Compressed Size       00000080 (128)\n-00465B Uncompressed Size     00000080 (128)\n-\n-00465F LOCAL HEADER #17      04034B50 (67324752)\n-004663 Extract Zip Spec      14 (20) '2.0'\n-004664 Extract OS            00 (0) 'MS-DOS'\n-004665 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-004667 Compression Method    0000 (0) 'Stored'\n-004669 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-00466D CRC                   00000000 (0)\n-004671 Compressed Size       00000000 (0)\n-004675 Uncompressed Size     00000000 (0)\n-004679 Filename Length       003F (63)\n-00467B Extra Length          0009 (9)\n-00467D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x467D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0046BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0046BE   Length              0005 (5)\n-0046C0   Flags               01 (1) 'Modification'\n-0046C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0046C5 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-\n-004701 DATA DESCRIPTOR       08074B50 (134695760)\n-004705 CRC                   5CED5836 (1559058486)\n-004709 Compressed Size       0000003C (60)\n-00470D Uncompressed Size     0000003C (60)\n-\n-004711 LOCAL HEADER #18      04034B50 (67324752)\n-004715 Extract Zip Spec      14 (20) '2.0'\n-004716 Extract OS            00 (0) 'MS-DOS'\n-004717 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-004719 Compression Method    0000 (0) 'Stored'\n-00471B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-00471F CRC                   00000000 (0)\n-004723 Compressed Size       00000000 (0)\n-004727 Uncompressed Size     00000000 (0)\n-00472B Filename Length       0045 (69)\n-00472D Extra Length          0009 (9)\n-00472F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x472F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-004774 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-004776   Length              0005 (5)\n-004778   Flags               01 (1) 'Modification'\n-004779   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-00477D PAYLOAD\n-\n-0048A6 DATA DESCRIPTOR       08074B50 (134695760)\n-0048AA CRC                   9C4BEDD5 (2622221781)\n-0048AE Compressed Size       00000129 (297)\n-0048B2 Uncompressed Size     00000129 (297)\n-\n-0048B6 LOCAL HEADER #19      04034B50 (67324752)\n-0048BA Extract Zip Spec      14 (20) '2.0'\n-0048BB Extract OS            00 (0) 'MS-DOS'\n-0048BC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0048BE Compression Method    0000 (0) 'Stored'\n-0048C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0048C4 CRC                   00000000 (0)\n-0048C8 Compressed Size       00000000 (0)\n-0048CC Uncompressed Size     00000000 (0)\n-0048D0 Filename Length       0055 (85)\n-0048D2 Extra Length          0009 (9)\n-0048D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x48D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-004929 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-00492B   Length              0005 (5)\n-00492D   Flags               01 (1) 'Modification'\n-00492E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-004932 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-\n-00497E DATA DESCRIPTOR       08074B50 (134695760)\n-004982 CRC                   BF790872 (3212380274)\n-004986 Compressed Size       0000004C (76)\n-00498A Uncompressed Size     0000004C (76)\n-\n-00498E LOCAL HEADER #20      04034B50 (67324752)\n-004992 Extract Zip Spec      14 (20) '2.0'\n-004993 Extract OS            00 (0) 'MS-DOS'\n-004994 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-004996 Compression Method    0000 (0) 'Stored'\n-004998 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-00499C CRC                   00000000 (0)\n-0049A0 Compressed Size       00000000 (0)\n-0049A4 Uncompressed Size     00000000 (0)\n-0049A8 Filename Length       003E (62)\n-0049AA Extra Length          0009 (9)\n-0049AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x49AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0049EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0049EC   Length              0005 (5)\n-0049EE   Flags               01 (1) 'Modification'\n-0049EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0049F3 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-\n-004A5F DATA DESCRIPTOR       08074B50 (134695760)\n-004A63 CRC                   58896C3D (1485401149)\n-004A67 Compressed Size       0000006C (108)\n-004A6B Uncompressed Size     0000006C (108)\n-\n-004A6F LOCAL HEADER #21      04034B50 (67324752)\n-004A73 Extract Zip Spec      14 (20) '2.0'\n-004A74 Extract OS            00 (0) 'MS-DOS'\n-004A75 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-004A77 Compression Method    0000 (0) 'Stored'\n-004A79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-004A7D CRC                   00000000 (0)\n-004A81 Compressed Size       00000000 (0)\n-004A85 Uncompressed Size     00000000 (0)\n-004A89 Filename Length       0049 (73)\n-004A8B Extra Length          0009 (9)\n-004A8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-004AD6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-004AD8   Length              0005 (5)\n-004ADA   Flags               01 (1) 'Modification'\n-004ADB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-004ADF PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-\n-004B50 DATA DESCRIPTOR       08074B50 (134695760)\n-004B54 CRC                   BA3A525C (3124384348)\n-004B58 Compressed Size       00000071 (113)\n-004B5C Uncompressed Size     00000071 (113)\n-\n-004B60 LOCAL HEADER #22      04034B50 (67324752)\n-004B64 Extract Zip Spec      14 (20) '2.0'\n-004B65 Extract OS            00 (0) 'MS-DOS'\n-004B66 General Purpose Flag  0000 (0)\n-004B68 Compression Method    0000 (0) 'Stored'\n-004B6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-004B6E CRC                   00000000 (0)\n-004B72 Compressed Size       00000000 (0)\n-004B76 Uncompressed Size     00000000 (0)\n-004B7A Filename Length       000F (15)\n-004B7C Extra Length          0009 (9)\n-004B7E Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4B7E: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-004B8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-004B8F   Length              0005 (5)\n-004B91   Flags               01 (1) 'Modification'\n-004B92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-004B96 LOCAL HEADER #23      04034B50 (67324752)\n-004B9A Extract Zip Spec      14 (20) '2.0'\n-004B9B Extract OS            00 (0) 'MS-DOS'\n-004B9C General Purpose Flag  0000 (0)\n-004B9E Compression Method    0000 (0) 'Stored'\n-004BA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-004BA4 CRC                   00000000 (0)\n-004BA8 Compressed Size       00000000 (0)\n-004BAC Uncompressed Size     00000000 (0)\n-004BB0 Filename Length       0020 (32)\n-004BB2 Extra Length          0009 (9)\n-004BB4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4BB4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-004BD4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-004BD6   Length              0005 (5)\n-004BD8   Flags               01 (1) 'Modification'\n-004BD9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-004BDD LOCAL HEADER #24      04034B50 (67324752)\n-004BE1 Extract Zip Spec      14 (20) '2.0'\n-004BE2 Extract OS            00 (0) 'MS-DOS'\n-004BE3 General Purpose Flag  0000 (0)\n-004BE5 Compression Method    0000 (0) 'Stored'\n-004BE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-004BEB CRC                   00000000 (0)\n-004BEF Compressed Size       00000000 (0)\n-004BF3 Uncompressed Size     00000000 (0)\n-004BF7 Filename Length       002D (45)\n-004BF9 Extra Length          0009 (9)\n-004BFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4BFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-004C28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-004C2A   Length              0005 (5)\n-004C2C   Flags               01 (1) 'Modification'\n-004C2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-004C31 LOCAL HEADER #25      04034B50 (67324752)\n-004C35 Extract Zip Spec      14 (20) '2.0'\n-004C36 Extract OS            00 (0) 'MS-DOS'\n-004C37 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-004C39 Compression Method    0000 (0) 'Stored'\n-004C3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-004C3F CRC                   00000000 (0)\n-004C43 Compressed Size       00000000 (0)\n-004C47 Uncompressed Size     00000000 (0)\n-004C4B Filename Length       003B (59)\n-004C4D Extra Length          0009 (9)\n-004C4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4C4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-004C8A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-004C8C   Length              0005 (5)\n-004C8E   Flags               01 (1) 'Modification'\n-004C8F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-004C93 DATA DESCRIPTOR       08074B50 (134695760)\n-004C97 CRC                   00000000 (0)\n-004C9B Compressed Size       00000000 (0)\n-004C9F Uncompressed Size     00000000 (0)\n-\n-004CA3 LOCAL HEADER #26      04034B50 (67324752)\n-004CA7 Extract Zip Spec      14 (20) '2.0'\n-004CA8 Extract OS            00 (0) 'MS-DOS'\n-004CA9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-004CAB Compression Method    0000 (0) 'Stored'\n-004CAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-004CB1 CRC                   00000000 (0)\n-004CB5 Compressed Size       00000000 (0)\n-004CB9 Uncompressed Size     00000000 (0)\n-004CBD Filename Length       0034 (52)\n-004CBF Extra Length          0009 (9)\n-004CC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4CC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-004CF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-004CF7   Length              0005 (5)\n-004CF9   Flags               01 (1) 'Modification'\n-004CFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-004CFE PAYLOAD\n-\n-0058A0 DATA DESCRIPTOR       08074B50 (134695760)\n-0058A4 CRC                   4D73DC93 (1299438739)\n-0058A8 Compressed Size       00000BA2 (2978)\n-0058AC Uncompressed Size     00000BA2 (2978)\n-\n-0058B0 LOCAL HEADER #27      04034B50 (67324752)\n-0058B4 Extract Zip Spec      14 (20) '2.0'\n-0058B5 Extract OS            00 (0) 'MS-DOS'\n-0058B6 General Purpose Flag  0000 (0)\n-0058B8 Compression Method    0000 (0) 'Stored'\n-0058BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0058BE CRC                   00000000 (0)\n-0058C2 Compressed Size       00000000 (0)\n-0058C6 Uncompressed Size     00000000 (0)\n-0058CA Filename Length       0012 (18)\n-0058CC Extra Length          0009 (9)\n-0058CE Filename              'XXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x58CE: Filename 'XXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0058E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0058E2   Length              0005 (5)\n-0058E4   Flags               01 (1) 'Modification'\n-0058E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0058E9 LOCAL HEADER #28      04034B50 (67324752)\n-0058ED Extract Zip Spec      14 (20) '2.0'\n-0058EE Extract OS            00 (0) 'MS-DOS'\n-0058EF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0058F1 Compression Method    0000 (0) 'Stored'\n-0058F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0058F7 CRC                   00000000 (0)\n-0058FB Compressed Size       00000000 (0)\n-0058FF Uncompressed Size     00000000 (0)\n-005903 Filename Length       0043 (67)\n-005905 Extra Length          0009 (9)\n-005907 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5907: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-00594A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-00594C   Length              0005 (5)\n-00594E   Flags               01 (1) 'Modification'\n-00594F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-005953 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-\n-005A02 DATA DESCRIPTOR       08074B50 (134695760)\n-005A06 CRC                   7CA8E715 (2091443989)\n-005A0A Compressed Size       000000AF (175)\n-005A0E Uncompressed Size     000000AF (175)\n-\n-005A12 LOCAL HEADER #29      04034B50 (67324752)\n-005A16 Extract Zip Spec      14 (20) '2.0'\n-005A17 Extract OS            00 (0) 'MS-DOS'\n-005A18 General Purpose Flag  0000 (0)\n-005A1A Compression Method    0000 (0) 'Stored'\n-005A1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-005A20 CRC                   00000000 (0)\n-005A24 Compressed Size       00000000 (0)\n-005A28 Uncompressed Size     00000000 (0)\n-005A2C Filename Length       0004 (4)\n-005A2E Extra Length          0009 (9)\n-005A30 Filename              'XXXX'\n-#\n-# WARNING: Offset 0x5A30: Filename 'XXXX'\n-#          Zero length filename\n-#\n-005A34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-005A36   Length              0005 (5)\n-005A38   Flags               01 (1) 'Modification'\n-005A39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-005A3D LOCAL HEADER #30      04034B50 (67324752)\n-005A41 Extract Zip Spec      14 (20) '2.0'\n-005A42 Extract OS            00 (0) 'MS-DOS'\n-005A43 General Purpose Flag  0000 (0)\n-005A45 Compression Method    0000 (0) 'Stored'\n-005A47 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-005A4B CRC                   00000000 (0)\n-005A4F Compressed Size       00000000 (0)\n-005A53 Uncompressed Size     00000000 (0)\n-005A57 Filename Length       000C (12)\n-005A59 Extra Length          0009 (9)\n-005A5B Filename              'XXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5A5B: Filename 'XXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-005A67 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-005A69   Length              0005 (5)\n-005A6B   Flags               01 (1) 'Modification'\n-005A6C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-005A70 LOCAL HEADER #31      04034B50 (67324752)\n-005A74 Extract Zip Spec      14 (20) '2.0'\n-005A75 Extract OS            00 (0) 'MS-DOS'\n-005A76 General Purpose Flag  0000 (0)\n-005A78 Compression Method    0000 (0) 'Stored'\n-005A7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-005A7E CRC                   00000000 (0)\n-005A82 Compressed Size       00000000 (0)\n-005A86 Uncompressed Size     00000000 (0)\n-005A8A Filename Length       0012 (18)\n-005A8C Extra Length          0009 (9)\n-005A8E Filename              'XXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5A8E: Filename 'XXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-005AA0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-005AA2   Length              0005 (5)\n-005AA4   Flags               01 (1) 'Modification'\n-005AA5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-005AA9 LOCAL HEADER #32      04034B50 (67324752)\n-005AAD Extract Zip Spec      14 (20) '2.0'\n-005AAE Extract OS            00 (0) 'MS-DOS'\n-005AAF General Purpose Flag  0000 (0)\n-005AB1 Compression Method    0000 (0) 'Stored'\n-005AB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-005AB7 CRC                   00000000 (0)\n-005ABB Compressed Size       00000000 (0)\n-005ABF Uncompressed Size     00000000 (0)\n-005AC3 Filename Length       0019 (25)\n-005AC5 Extra Length          0009 (9)\n-005AC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5AC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-005AE0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-005AE2   Length              0005 (5)\n-005AE4   Flags               01 (1) 'Modification'\n-005AE5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-005AE9 LOCAL HEADER #33      04034B50 (67324752)\n-005AED Extract Zip Spec      14 (20) '2.0'\n-005AEE Extract OS            00 (0) 'MS-DOS'\n-005AEF General Purpose Flag  0000 (0)\n-005AF1 Compression Method    0000 (0) 'Stored'\n-005AF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-005AF7 CRC                   00000000 (0)\n-005AFB Compressed Size       00000000 (0)\n-005AFF Uncompressed Size     00000000 (0)\n-005B03 Filename Length       0023 (35)\n-005B05 Extra Length          0009 (9)\n-005B07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5B07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-005B2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-005B2C   Length              0005 (5)\n-005B2E   Flags               01 (1) 'Modification'\n-005B2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-005B33 LOCAL HEADER #34      04034B50 (67324752)\n-005B37 Extract Zip Spec      14 (20) '2.0'\n-005B38 Extract OS            00 (0) 'MS-DOS'\n-005B39 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-005B3B Compression Method    0000 (0) 'Stored'\n-005B3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-005B41 CRC                   00000000 (0)\n-005B45 Compressed Size       00000000 (0)\n-005B49 Uncompressed Size     00000000 (0)\n-005B4D Filename Length       0030 (48)\n-005B4F Extra Length          0009 (9)\n-005B51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5B51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-005B81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-005B83   Length              0005 (5)\n-005B85   Flags               01 (1) 'Modification'\n-005B86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-005B8A PAYLOAD\n-\n-006159 DATA DESCRIPTOR       08074B50 (134695760)\n-00615D CRC                   87D33073 (2278764659)\n-006161 Compressed Size       000005CF (1487)\n-006165 Uncompressed Size     000005CF (1487)\n-\n-006169 LOCAL HEADER #35      04034B50 (67324752)\n-00616D Extract Zip Spec      14 (20) '2.0'\n-00616E Extract OS            00 (0) 'MS-DOS'\n-00616F General Purpose Flag  0000 (0)\n-006171 Compression Method    0000 (0) 'Stored'\n-006173 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-006177 CRC                   00000000 (0)\n-00617B Compressed Size       00000000 (0)\n-00617F Uncompressed Size     00000000 (0)\n-006183 Filename Length       0019 (25)\n-006185 Extra Length          0009 (9)\n-006187 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6187: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0061A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0061A2   Length              0005 (5)\n-0061A4   Flags               01 (1) 'Modification'\n-0061A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0061A9 LOCAL HEADER #36      04034B50 (67324752)\n-0061AD Extract Zip Spec      14 (20) '2.0'\n-0061AE Extract OS            00 (0) 'MS-DOS'\n-0061AF General Purpose Flag  0000 (0)\n-0061B1 Compression Method    0000 (0) 'Stored'\n-0061B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0061B7 CRC                   00000000 (0)\n-0061BB Compressed Size       00000000 (0)\n-0061BF Uncompressed Size     00000000 (0)\n-0061C3 Filename Length       0024 (36)\n-0061C5 Extra Length          0009 (9)\n-0061C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x61C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0061EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0061ED   Length              0005 (5)\n-0061EF   Flags               01 (1) 'Modification'\n-0061F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0061F4 LOCAL HEADER #37      04034B50 (67324752)\n-0061F8 Extract Zip Spec      14 (20) '2.0'\n-0061F9 Extract OS            00 (0) 'MS-DOS'\n-0061FA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0061FC Compression Method    0000 (0) 'Stored'\n-0061FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-006202 CRC                   00000000 (0)\n-006206 Compressed Size       00000000 (0)\n-00620A Uncompressed Size     00000000 (0)\n-00620E Filename Length       0032 (50)\n-006210 Extra Length          0009 (9)\n-006212 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6212: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-006244 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-006246   Length              0005 (5)\n-006248   Flags               01 (1) 'Modification'\n-006249   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-00624D PAYLOAD\n-\n-006C8C DATA DESCRIPTOR       08074B50 (134695760)\n-006C90 CRC                   9122A7A7 (2434967463)\n-006C94 Compressed Size       00000A3F (2623)\n-006C98 Uncompressed Size     00000A3F (2623)\n-\n-006C9C LOCAL HEADER #38      04034B50 (67324752)\n-006CA0 Extract Zip Spec      14 (20) '2.0'\n-006CA1 Extract OS            00 (0) 'MS-DOS'\n-006CA2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-006CA4 Compression Method    0000 (0) 'Stored'\n-006CA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-006CAA CRC                   00000000 (0)\n-006CAE Compressed Size       00000000 (0)\n-006CB2 Uncompressed Size     00000000 (0)\n-006CB6 Filename Length       0030 (48)\n-006CB8 Extra Length          0009 (9)\n-006CBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6CBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-006CEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-006CEC   Length              0005 (5)\n-006CEE   Flags               01 (1) 'Modification'\n-006CEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-006CF3 PAYLOAD\n-\n-00778A DATA DESCRIPTOR       08074B50 (134695760)\n-00778E CRC                   3228CAA5 (841534117)\n-007792 Compressed Size       00000A97 (2711)\n-007796 Uncompressed Size     00000A97 (2711)\n-\n-00779A LOCAL HEADER #39      04034B50 (67324752)\n-00779E Extract Zip Spec      14 (20) '2.0'\n-00779F Extract OS            00 (0) 'MS-DOS'\n-0077A0 General Purpose Flag  0000 (0)\n-0077A2 Compression Method    0000 (0) 'Stored'\n-0077A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0077A8 CRC                   00000000 (0)\n-0077AC Compressed Size       00000000 (0)\n-0077B0 Uncompressed Size     00000000 (0)\n-0077B4 Filename Length       0004 (4)\n-0077B6 Extra Length          0009 (9)\n-0077B8 Filename              'XXXX'\n-#\n-# WARNING: Offset 0x77B8: Filename 'XXXX'\n-#          Zero length filename\n-#\n-0077BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0077BE   Length              0005 (5)\n-0077C0   Flags               01 (1) 'Modification'\n-0077C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0077C5 LOCAL HEADER #40      04034B50 (67324752)\n-0077C9 Extract Zip Spec      14 (20) '2.0'\n-0077CA Extract OS            00 (0) 'MS-DOS'\n-0077CB General Purpose Flag  0000 (0)\n-0077CD Compression Method    0000 (0) 'Stored'\n-0077CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0077D3 CRC                   00000000 (0)\n-0077D7 Compressed Size       00000000 (0)\n-0077DB Uncompressed Size     00000000 (0)\n-0077DF Filename Length       000B (11)\n-0077E1 Extra Length          0009 (9)\n-0077E3 Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x77E3: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0077EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0077F0   Length              0005 (5)\n-0077F2   Flags               01 (1) 'Modification'\n-0077F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0077F7 LOCAL HEADER #41      04034B50 (67324752)\n-0077FB Extract Zip Spec      14 (20) '2.0'\n-0077FC Extract OS            00 (0) 'MS-DOS'\n-0077FD General Purpose Flag  0000 (0)\n-0077FF Compression Method    0000 (0) 'Stored'\n-007801 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-007805 CRC                   00000000 (0)\n-007809 Compressed Size       00000000 (0)\n-00780D Uncompressed Size     00000000 (0)\n-007811 Filename Length       0011 (17)\n-007813 Extra Length          0009 (9)\n-007815 Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7815: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-007826 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-007828   Length              0005 (5)\n-00782A   Flags               01 (1) 'Modification'\n-00782B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-00782F LOCAL HEADER #42      04034B50 (67324752)\n-007833 Extract Zip Spec      14 (20) '2.0'\n-007834 Extract OS            00 (0) 'MS-DOS'\n-007835 General Purpose Flag  0000 (0)\n-007837 Compression Method    0000 (0) 'Stored'\n-007839 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-00783D CRC                   00000000 (0)\n-007841 Compressed Size       00000000 (0)\n-007845 Uncompressed Size     00000000 (0)\n-007849 Filename Length       0018 (24)\n-00784B Extra Length          0009 (9)\n-00784D Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x784D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-007865 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-007867   Length              0005 (5)\n-007869   Flags               01 (1) 'Modification'\n-00786A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-00786E LOCAL HEADER #43      04034B50 (67324752)\n-007872 Extract Zip Spec      14 (20) '2.0'\n-007873 Extract OS            00 (0) 'MS-DOS'\n-007874 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-007876 Compression Method    0000 (0) 'Stored'\n-007878 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-00787C CRC                   00000000 (0)\n-007880 Compressed Size       00000000 (0)\n-007884 Uncompressed Size     00000000 (0)\n-007888 Filename Length       0030 (48)\n-00788A Extra Length          0009 (9)\n-00788C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x788C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0078BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0078BE   Length              0005 (5)\n-0078C0   Flags               01 (1) 'Modification'\n-0078C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0078C5 PAYLOAD\n-\n-0089BC DATA DESCRIPTOR       08074B50 (134695760)\n-0089C0 CRC                   4059C95D (1079626077)\n-0089C4 Compressed Size       000010F7 (4343)\n-0089C8 Uncompressed Size     000010F7 (4343)\n-\n-0089CC LOCAL HEADER #44      04034B50 (67324752)\n-0089D0 Extract Zip Spec      14 (20) '2.0'\n-0089D1 Extract OS            00 (0) 'MS-DOS'\n-0089D2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0089D4 Compression Method    0000 (0) 'Stored'\n-0089D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0089DA CRC                   00000000 (0)\n-0089DE Compressed Size       00000000 (0)\n-0089E2 Uncompressed Size     00000000 (0)\n-0089E6 Filename Length       0029 (41)\n-0089E8 Extra Length          0009 (9)\n-0089EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x89EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-008A13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-008A15   Length              0005 (5)\n-008A17   Flags               01 (1) 'Modification'\n-008A18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-008A1C PAYLOAD\n-\n-008F6E DATA DESCRIPTOR       08074B50 (134695760)\n-008F72 CRC                   BF971C06 (3214351366)\n-008F76 Compressed Size       00000552 (1362)\n-008F7A Uncompressed Size     00000552 (1362)\n-\n-008F7E LOCAL HEADER #45      04034B50 (67324752)\n-008F82 Extract Zip Spec      14 (20) '2.0'\n-008F83 Extract OS            00 (0) 'MS-DOS'\n-008F84 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-008F86 Compression Method    0000 (0) 'Stored'\n-008F88 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-008F8C CRC                   00000000 (0)\n-008F90 Compressed Size       00000000 (0)\n-008F94 Uncompressed Size     00000000 (0)\n-008F98 Filename Length       0026 (38)\n-008F9A Extra Length          0009 (9)\n-008F9C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8F9C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-008FC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-008FC4   Length              0005 (5)\n-008FC6   Flags               01 (1) 'Modification'\n-008FC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-008FCB PAYLOAD\n-\n-009976 DATA DESCRIPTOR       08074B50 (134695760)\n-00997A CRC                   1CCCA507 (483173639)\n-00997E Compressed Size       000009AB (2475)\n-009982 Uncompressed Size     000009AB (2475)\n-\n-009986 LOCAL HEADER #46      04034B50 (67324752)\n-00998A Extract Zip Spec      14 (20) '2.0'\n-00998B Extract OS            00 (0) 'MS-DOS'\n-00998C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-00998E Compression Method    0000 (0) 'Stored'\n-009990 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-009994 CRC                   00000000 (0)\n-009998 Compressed Size       00000000 (0)\n-00999C Uncompressed Size     00000000 (0)\n-0099A0 Filename Length       0021 (33)\n-0099A2 Extra Length          0009 (9)\n-0099A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x99A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0099C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0099C7   Length              0005 (5)\n-0099C9   Flags               01 (1) 'Modification'\n-0099CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0099CE PAYLOAD\n-\n-009E6D DATA DESCRIPTOR       08074B50 (134695760)\n-009E71 CRC                   0622E0A0 (102949024)\n-009E75 Compressed Size       0000049F (1183)\n-009E79 Uncompressed Size     0000049F (1183)\n-\n-009E7D LOCAL HEADER #47      04034B50 (67324752)\n-009E81 Extract Zip Spec      14 (20) '2.0'\n-009E82 Extract OS            00 (0) 'MS-DOS'\n-009E83 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-009E85 Compression Method    0000 (0) 'Stored'\n-009E87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-009E8B CRC                   00000000 (0)\n-009E8F Compressed Size       00000000 (0)\n-009E93 Uncompressed Size     00000000 (0)\n-009E97 Filename Length       0027 (39)\n-009E99 Extra Length          0009 (9)\n-009E9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9E9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-009EC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-009EC4   Length              0005 (5)\n-009EC6   Flags               01 (1) 'Modification'\n-009EC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-009ECB PAYLOAD\n-\n-00C165 DATA DESCRIPTOR       08074B50 (134695760)\n-00C169 CRC                   3DF15F74 (1039228788)\n-00C16D Compressed Size       0000229A (8858)\n-00C171 Uncompressed Size     0000229A (8858)\n-\n-00C175 LOCAL HEADER #48      04034B50 (67324752)\n-00C179 Extract Zip Spec      14 (20) '2.0'\n-00C17A Extract OS            00 (0) 'MS-DOS'\n-00C17B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-00C17D Compression Method    0000 (0) 'Stored'\n-00C17F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-00C183 CRC                   00000000 (0)\n-00C187 Compressed Size       00000000 (0)\n-00C18B Uncompressed Size     00000000 (0)\n-00C18F Filename Length       0026 (38)\n-00C191 Extra Length          0009 (9)\n-00C193 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC193: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-00C1B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-00C1BB   Length              0005 (5)\n-00C1BD   Flags               01 (1) 'Modification'\n-00C1BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-00C1C2 PAYLOAD\n-\n-00C5AA DATA DESCRIPTOR       08074B50 (134695760)\n-00C5AE CRC                   52712A03 (1383148035)\n-00C5B2 Compressed Size       000003E8 (1000)\n-00C5B6 Uncompressed Size     000003E8 (1000)\n-\n-00C5BA LOCAL HEADER #49      04034B50 (67324752)\n-00C5BE Extract Zip Spec      14 (20) '2.0'\n-00C5BF Extract OS            00 (0) 'MS-DOS'\n-00C5C0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-00C5C2 Compression Method    0000 (0) 'Stored'\n-00C5C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-00C5C8 CRC                   00000000 (0)\n-00C5CC Compressed Size       00000000 (0)\n-00C5D0 Uncompressed Size     00000000 (0)\n-00C5D4 Filename Length       0020 (32)\n-00C5D6 Extra Length          0009 (9)\n-00C5D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC5D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-00C5F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-00C5FA   Length              0005 (5)\n-00C5FC   Flags               01 (1) 'Modification'\n-00C5FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-00C601 PAYLOAD\n-\n-01D98A DATA DESCRIPTOR       08074B50 (134695760)\n-01D98E CRC                   4B96BF4D (1268170573)\n-01D992 Compressed Size       00011389 (70537)\n-01D996 Uncompressed Size     00011389 (70537)\n-\n-01D99A LOCAL HEADER #50      04034B50 (67324752)\n-01D99E Extract Zip Spec      14 (20) '2.0'\n-01D99F Extract OS            00 (0) 'MS-DOS'\n-01D9A0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01D9A2 Compression Method    0000 (0) 'Stored'\n-01D9A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01D9A8 CRC                   00000000 (0)\n-01D9AC Compressed Size       00000000 (0)\n-01D9B0 Uncompressed Size     00000000 (0)\n-01D9B4 Filename Length       0027 (39)\n-01D9B6 Extra Length          0009 (9)\n-01D9B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1D9B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01D9DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01D9E1   Length              0005 (5)\n-01D9E3   Flags               01 (1) 'Modification'\n-01D9E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01D9E8 PAYLOAD\n-\n-020F4C DATA DESCRIPTOR       08074B50 (134695760)\n-020F50 CRC                   E6F6EE92 (3874942610)\n-020F54 Compressed Size       00003564 (13668)\n-020F58 Uncompressed Size     00003564 (13668)\n-\n-020F5C LOCAL HEADER #51      04034B50 (67324752)\n-020F60 Extract Zip Spec      14 (20) '2.0'\n-020F61 Extract OS            00 (0) 'MS-DOS'\n-020F62 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-020F64 Compression Method    0000 (0) 'Stored'\n-020F66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-020F6A CRC                   00000000 (0)\n-020F6E Compressed Size       00000000 (0)\n-020F72 Uncompressed Size     00000000 (0)\n-020F76 Filename Length       0029 (41)\n-020F78 Extra Length          0009 (9)\n-020F7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20F7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-020FA3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-020FA5   Length              0005 (5)\n-020FA7   Flags               01 (1) 'Modification'\n-020FA8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-020FAC PAYLOAD\n-\n-02444D DATA DESCRIPTOR       08074B50 (134695760)\n-024451 CRC                   8B1361FF (2333303295)\n-024455 Compressed Size       000034A1 (13473)\n-024459 Uncompressed Size     000034A1 (13473)\n-\n-02445D LOCAL HEADER #52      04034B50 (67324752)\n-024461 Extract Zip Spec      14 (20) '2.0'\n-024462 Extract OS            00 (0) 'MS-DOS'\n-024463 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-024465 Compression Method    0000 (0) 'Stored'\n-024467 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02446B CRC                   00000000 (0)\n-02446F Compressed Size       00000000 (0)\n-024473 Uncompressed Size     00000000 (0)\n-024477 Filename Length       0024 (36)\n-024479 Extra Length          0009 (9)\n-02447B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2447B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02449F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0244A1   Length              0005 (5)\n-0244A3   Flags               01 (1) 'Modification'\n-0244A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0244A8 PAYLOAD\n-\n-026ACD DATA DESCRIPTOR       08074B50 (134695760)\n-026AD1 CRC                   F43D3BE1 (4097653729)\n-026AD5 Compressed Size       00002625 (9765)\n-026AD9 Uncompressed Size     00002625 (9765)\n-\n-026ADD LOCAL HEADER #53      04034B50 (67324752)\n-026AE1 Extract Zip Spec      14 (20) '2.0'\n-026AE2 Extract OS            00 (0) 'MS-DOS'\n-026AE3 General Purpose Flag  0000 (0)\n-026AE5 Compression Method    0000 (0) 'Stored'\n-026AE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-026AEB CRC                   00000000 (0)\n-026AEF Compressed Size       00000000 (0)\n-026AF3 Uncompressed Size     00000000 (0)\n-026AF7 Filename Length       0021 (33)\n-026AF9 Extra Length          0009 (9)\n-026AFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x26AFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-026B1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-026B1E   Length              0005 (5)\n-026B20   Flags               01 (1) 'Modification'\n-026B21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-026B25 LOCAL HEADER #54      04034B50 (67324752)\n-026B29 Extract Zip Spec      14 (20) '2.0'\n-026B2A Extract OS            00 (0) 'MS-DOS'\n-026B2B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-026B2D Compression Method    0000 (0) 'Stored'\n-026B2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-026B33 CRC                   00000000 (0)\n-026B37 Compressed Size       00000000 (0)\n-026B3B Uncompressed Size     00000000 (0)\n-026B3F Filename Length       0036 (54)\n-026B41 Extra Length          0009 (9)\n-026B43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x26B43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-026B79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-026B7B   Length              0005 (5)\n-026B7D   Flags               01 (1) 'Modification'\n-026B7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-026B82 PAYLOAD\n-\n-0270D6 DATA DESCRIPTOR       08074B50 (134695760)\n-0270DA CRC                   62810B39 (1652624185)\n-0270DE Compressed Size       00000554 (1364)\n-0270E2 Uncompressed Size     00000554 (1364)\n-\n-0270E6 LOCAL HEADER #55      04034B50 (67324752)\n-0270EA Extract Zip Spec      14 (20) '2.0'\n-0270EB Extract OS            00 (0) 'MS-DOS'\n-0270EC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0270EE Compression Method    0000 (0) 'Stored'\n-0270F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0270F4 CRC                   00000000 (0)\n-0270F8 Compressed Size       00000000 (0)\n-0270FC Uncompressed Size     00000000 (0)\n-027100 Filename Length       0038 (56)\n-027102 Extra Length          0009 (9)\n-027104 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x27104: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02713C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02713E   Length              0005 (5)\n-027140   Flags               01 (1) 'Modification'\n-027141   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-027145 PAYLOAD\n-\n-0289EA DATA DESCRIPTOR       08074B50 (134695760)\n-0289EE CRC                   F49AF035 (4103794741)\n-0289F2 Compressed Size       000018A5 (6309)\n-0289F6 Uncompressed Size     000018A5 (6309)\n-\n-0289FA LOCAL HEADER #56      04034B50 (67324752)\n-0289FE Extract Zip Spec      14 (20) '2.0'\n-0289FF Extract OS            00 (0) 'MS-DOS'\n-028A00 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-028A02 Compression Method    0000 (0) 'Stored'\n-028A04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-028A08 CRC                   00000000 (0)\n-028A0C Compressed Size       00000000 (0)\n-028A10 Uncompressed Size     00000000 (0)\n-028A14 Filename Length       003B (59)\n-028A16 Extra Length          0009 (9)\n-028A18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x28A18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-028A53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-028A55   Length              0005 (5)\n-028A57   Flags               01 (1) 'Modification'\n-028A58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-028A5C PAYLOAD\n-\n-02D92A DATA DESCRIPTOR       08074B50 (134695760)\n-02D92E CRC                   11EE6DF6 (300838390)\n-02D932 Compressed Size       00004ECE (20174)\n-02D936 Uncompressed Size     00004ECE (20174)\n-\n-02D93A LOCAL HEADER #57      04034B50 (67324752)\n-02D93E Extract Zip Spec      14 (20) '2.0'\n-02D93F Extract OS            00 (0) 'MS-DOS'\n-02D940 General Purpose Flag  0000 (0)\n-02D942 Compression Method    0000 (0) 'Stored'\n-02D944 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02D948 CRC                   00000000 (0)\n-02D94C Compressed Size       00000000 (0)\n-02D950 Uncompressed Size     00000000 (0)\n-02D954 Filename Length       0021 (33)\n-02D956 Extra Length          0009 (9)\n-02D958 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D958: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02D979 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02D97B   Length              0005 (5)\n-02D97D   Flags               01 (1) 'Modification'\n-02D97E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02D982 LOCAL HEADER #58      04034B50 (67324752)\n-02D986 Extract Zip Spec      14 (20) '2.0'\n-02D987 Extract OS            00 (0) 'MS-DOS'\n-02D988 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02D98A Compression Method    0000 (0) 'Stored'\n-02D98C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02D990 CRC                   00000000 (0)\n-02D994 Compressed Size       00000000 (0)\n-02D998 Uncompressed Size     00000000 (0)\n-02D99C Filename Length       0034 (52)\n-02D99E Extra Length          0009 (9)\n-02D9A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D9A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02D9D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02D9D6   Length              0005 (5)\n-02D9D8   Flags               01 (1) 'Modification'\n-02D9D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02D9DD PAYLOAD\n-\n-030CBC DATA DESCRIPTOR       08074B50 (134695760)\n-030CC0 CRC                   87F19404 (2280756228)\n-030CC4 Compressed Size       000032DF (13023)\n-030CC8 Uncompressed Size     000032DF (13023)\n-\n-030CCC LOCAL HEADER #59      04034B50 (67324752)\n-030CD0 Extract Zip Spec      14 (20) '2.0'\n-030CD1 Extract OS            00 (0) 'MS-DOS'\n-030CD2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-030CD4 Compression Method    0000 (0) 'Stored'\n-030CD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-030CDA CRC                   00000000 (0)\n-030CDE Compressed Size       00000000 (0)\n-030CE2 Uncompressed Size     00000000 (0)\n-030CE6 Filename Length       003F (63)\n-030CE8 Extra Length          0009 (9)\n-030CEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x30CEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-030D29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-030D2B   Length              0005 (5)\n-030D2D   Flags               01 (1) 'Modification'\n-030D2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-030D32 PAYLOAD\n-\n-031AE4 DATA DESCRIPTOR       08074B50 (134695760)\n-031AE8 CRC                   AA2CE6AF (2855069359)\n-031AEC Compressed Size       00000DB2 (3506)\n-031AF0 Uncompressed Size     00000DB2 (3506)\n-\n-031AF4 LOCAL HEADER #60      04034B50 (67324752)\n-031AF8 Extract Zip Spec      14 (20) '2.0'\n-031AF9 Extract OS            00 (0) 'MS-DOS'\n-031AFA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-031AFC Compression Method    0000 (0) 'Stored'\n-031AFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031B02 CRC                   00000000 (0)\n-031B06 Compressed Size       00000000 (0)\n-031B0A Uncompressed Size     00000000 (0)\n-031B0E Filename Length       002B (43)\n-031B10 Extra Length          0009 (9)\n-031B12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31B12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-031B3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-031B3F   Length              0005 (5)\n-031B41   Flags               01 (1) 'Modification'\n-031B42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-031B46 PAYLOAD\n-\n-033B5D DATA DESCRIPTOR       08074B50 (134695760)\n-033B61 CRC                   4F0E9D5D (1326357853)\n-033B65 Compressed Size       00002017 (8215)\n-033B69 Uncompressed Size     00002017 (8215)\n-\n-033B6D LOCAL HEADER #61      04034B50 (67324752)\n-033B71 Extract Zip Spec      14 (20) '2.0'\n-033B72 Extract OS            00 (0) 'MS-DOS'\n-033B73 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-033B75 Compression Method    0000 (0) 'Stored'\n-033B77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-033B7B CRC                   00000000 (0)\n-033B7F Compressed Size       00000000 (0)\n-033B83 Uncompressed Size     00000000 (0)\n-033B87 Filename Length       003B (59)\n-033B89 Extra Length          0009 (9)\n-033B8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x33B8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-033BC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-033BC8   Length              0005 (5)\n-033BCA   Flags               01 (1) 'Modification'\n-033BCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-033BCF PAYLOAD\n-\n-03406D DATA DESCRIPTOR       08074B50 (134695760)\n-034071 CRC                   35B34ECC (900943564)\n-034075 Compressed Size       0000049E (1182)\n-034079 Uncompressed Size     0000049E (1182)\n-\n-03407D LOCAL HEADER #62      04034B50 (67324752)\n-034081 Extract Zip Spec      14 (20) '2.0'\n-034082 Extract OS            00 (0) 'MS-DOS'\n-034083 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-034085 Compression Method    0000 (0) 'Stored'\n-034087 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03408B CRC                   00000000 (0)\n-03408F Compressed Size       00000000 (0)\n-034093 Uncompressed Size     00000000 (0)\n-034097 Filename Length       003D (61)\n-034099 Extra Length          0009 (9)\n-03409B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3409B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0340D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0340DA   Length              0005 (5)\n-0340DC   Flags               01 (1) 'Modification'\n-0340DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0340E1 PAYLOAD\n-\n-034587 DATA DESCRIPTOR       08074B50 (134695760)\n-03458B CRC                   AE36D6DB (2922829531)\n-03458F Compressed Size       000004A6 (1190)\n-034593 Uncompressed Size     000004A6 (1190)\n-\n-034597 LOCAL HEADER #63      04034B50 (67324752)\n-03459B Extract Zip Spec      14 (20) '2.0'\n-03459C Extract OS            00 (0) 'MS-DOS'\n-03459D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03459F Compression Method    0000 (0) 'Stored'\n-0345A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0345A5 CRC                   00000000 (0)\n-0345A9 Compressed Size       00000000 (0)\n-0345AD Uncompressed Size     00000000 (0)\n-0345B1 Filename Length       002B (43)\n-0345B3 Extra Length          0009 (9)\n-0345B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x345B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0345E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0345E2   Length              0005 (5)\n-0345E4   Flags               01 (1) 'Modification'\n-0345E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0345E9 PAYLOAD\n-\n-037536 DATA DESCRIPTOR       08074B50 (134695760)\n-03753A CRC                   693DBCBA (1765653690)\n-03753E Compressed Size       00002F4D (12109)\n-037542 Uncompressed Size     00002F4D (12109)\n-\n-037546 LOCAL HEADER #64      04034B50 (67324752)\n-03754A Extract Zip Spec      14 (20) '2.0'\n-03754B Extract OS            00 (0) 'MS-DOS'\n-03754C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03754E Compression Method    0000 (0) 'Stored'\n-037550 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-037554 CRC                   00000000 (0)\n-037558 Compressed Size       00000000 (0)\n-03755C Uncompressed Size     00000000 (0)\n-037560 Filename Length       002D (45)\n-037562 Extra Length          0009 (9)\n-037564 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x37564: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-037591 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-037593   Length              0005 (5)\n-037595   Flags               01 (1) 'Modification'\n-037596   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03759A PAYLOAD\n-\n-03BBA2 DATA DESCRIPTOR       08074B50 (134695760)\n-03BBA6 CRC                   44BCC62B (1153222187)\n-03BBAA Compressed Size       00004608 (17928)\n-03BBAE Uncompressed Size     00004608 (17928)\n-\n-03BBB2 LOCAL HEADER #65      04034B50 (67324752)\n-03BBB6 Extract Zip Spec      14 (20) '2.0'\n-03BBB7 Extract OS            00 (0) 'MS-DOS'\n-03BBB8 General Purpose Flag  0000 (0)\n-03BBBA Compression Method    0000 (0) 'Stored'\n-03BBBC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03BBC0 CRC                   00000000 (0)\n-03BBC4 Compressed Size       00000000 (0)\n-03BBC8 Uncompressed Size     00000000 (0)\n-03BBCC Filename Length       0021 (33)\n-03BBCE Extra Length          0009 (9)\n-03BBD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3BBD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03BBF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03BBF3   Length              0005 (5)\n-03BBF5   Flags               01 (1) 'Modification'\n-03BBF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03BBFA LOCAL HEADER #66      04034B50 (67324752)\n-03BBFE Extract Zip Spec      14 (20) '2.0'\n-03BBFF Extract OS            00 (0) 'MS-DOS'\n-03BC00 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03BC02 Compression Method    0000 (0) 'Stored'\n-03BC04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03BC08 CRC                   00000000 (0)\n-03BC0C Compressed Size       00000000 (0)\n-03BC10 Uncompressed Size     00000000 (0)\n-03BC14 Filename Length       002E (46)\n-03BC16 Extra Length          0009 (9)\n-03BC18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3BC18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03BC46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03BC48   Length              0005 (5)\n-03BC4A   Flags               01 (1) 'Modification'\n-03BC4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03BC4F PAYLOAD\n-\n-03C136 DATA DESCRIPTOR       08074B50 (134695760)\n-03C13A CRC                   01EEDE5E (32431710)\n-03C13E Compressed Size       000004E7 (1255)\n-03C142 Uncompressed Size     000004E7 (1255)\n-\n-03C146 LOCAL HEADER #67      04034B50 (67324752)\n-03C14A Extract Zip Spec      14 (20) '2.0'\n-03C14B Extract OS            00 (0) 'MS-DOS'\n-03C14C General Purpose Flag  0000 (0)\n-03C14E Compression Method    0000 (0) 'Stored'\n-03C150 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C154 CRC                   00000000 (0)\n-03C158 Compressed Size       00000000 (0)\n-03C15C Uncompressed Size     00000000 (0)\n-03C160 Filename Length       0029 (41)\n-03C162 Extra Length          0009 (9)\n-03C164 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C164: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C18D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C18F   Length              0005 (5)\n-03C191   Flags               01 (1) 'Modification'\n-03C192   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03C196 LOCAL HEADER #68      04034B50 (67324752)\n-03C19A Extract Zip Spec      14 (20) '2.0'\n-03C19B Extract OS            00 (0) 'MS-DOS'\n-03C19C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03C19E Compression Method    0000 (0) 'Stored'\n-03C1A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C1A4 CRC                   00000000 (0)\n-03C1A8 Compressed Size       00000000 (0)\n-03C1AC Uncompressed Size     00000000 (0)\n-03C1B0 Filename Length       003E (62)\n-03C1B2 Extra Length          0009 (9)\n-03C1B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C1B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C1F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C1F4   Length              0005 (5)\n-03C1F6   Flags               01 (1) 'Modification'\n-03C1F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03C1FB PAYLOAD\n-\n-03CD16 DATA DESCRIPTOR       08074B50 (134695760)\n-03CD1A CRC                   20854F04 (545607428)\n-03CD1E Compressed Size       00000B1B (2843)\n-03CD22 Uncompressed Size     00000B1B (2843)\n-\n-03CD26 LOCAL HEADER #69      04034B50 (67324752)\n-03CD2A Extract Zip Spec      14 (20) '2.0'\n-03CD2B Extract OS            00 (0) 'MS-DOS'\n-03CD2C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03CD2E Compression Method    0000 (0) 'Stored'\n-03CD30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03CD34 CRC                   00000000 (0)\n-03CD38 Compressed Size       00000000 (0)\n-03CD3C Uncompressed Size     00000000 (0)\n-03CD40 Filename Length       003E (62)\n-03CD42 Extra Length          0009 (9)\n-03CD44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3CD44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03CD82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03CD84   Length              0005 (5)\n-03CD86   Flags               01 (1) 'Modification'\n-03CD87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03CD8B PAYLOAD\n-\n-03D4BE DATA DESCRIPTOR       08074B50 (134695760)\n-03D4C2 CRC                   D19D012A (3516727594)\n-03D4C6 Compressed Size       00000733 (1843)\n-03D4CA Uncompressed Size     00000733 (1843)\n-\n-03D4CE LOCAL HEADER #70      04034B50 (67324752)\n-03D4D2 Extract Zip Spec      14 (20) '2.0'\n-03D4D3 Extract OS            00 (0) 'MS-DOS'\n-03D4D4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03D4D6 Compression Method    0000 (0) 'Stored'\n-03D4D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03D4DC CRC                   00000000 (0)\n-03D4E0 Compressed Size       00000000 (0)\n-03D4E4 Uncompressed Size     00000000 (0)\n-03D4E8 Filename Length       0038 (56)\n-03D4EA Extra Length          0009 (9)\n-03D4EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D4EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03D524 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03D526   Length              0005 (5)\n-03D528   Flags               01 (1) 'Modification'\n-03D529   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03D52D PAYLOAD\n-\n-0411F1 DATA DESCRIPTOR       08074B50 (134695760)\n-0411F5 CRC                   489CA2B6 (1218224822)\n-0411F9 Compressed Size       00003CC4 (15556)\n-0411FD Uncompressed Size     00003CC4 (15556)\n-\n-041201 LOCAL HEADER #71      04034B50 (67324752)\n-041205 Extract Zip Spec      14 (20) '2.0'\n-041206 Extract OS            00 (0) 'MS-DOS'\n-041207 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-041209 Compression Method    0000 (0) 'Stored'\n-04120B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04120F CRC                   00000000 (0)\n-041213 Compressed Size       00000000 (0)\n-041217 Uncompressed Size     00000000 (0)\n-04121B Filename Length       003C (60)\n-04121D Extra Length          0009 (9)\n-04121F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4121F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04125B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04125D   Length              0005 (5)\n-04125F   Flags               01 (1) 'Modification'\n-041260   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-041264 PAYLOAD\n-\n-04261E DATA DESCRIPTOR       08074B50 (134695760)\n-042622 CRC                   BD63F8B8 (3177445560)\n-042626 Compressed Size       000013BA (5050)\n-04262A Uncompressed Size     000013BA (5050)\n-\n-04262E LOCAL HEADER #72      04034B50 (67324752)\n-042632 Extract Zip Spec      14 (20) '2.0'\n-042633 Extract OS            00 (0) 'MS-DOS'\n-042634 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-042636 Compression Method    0000 (0) 'Stored'\n-042638 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04263C CRC                   00000000 (0)\n-042640 Compressed Size       00000000 (0)\n-042644 Uncompressed Size     00000000 (0)\n-042648 Filename Length       003F (63)\n-04264A Extra Length          0009 (9)\n-04264C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4264C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04268B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04268D   Length              0005 (5)\n-04268F   Flags               01 (1) 'Modification'\n-042690   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-042694 PAYLOAD\n-\n-043444 DATA DESCRIPTOR       08074B50 (134695760)\n-043448 CRC                   C96B89A9 (3379268009)\n-04344C Compressed Size       00000DB0 (3504)\n-043450 Uncompressed Size     00000DB0 (3504)\n-\n-043454 LOCAL HEADER #73      04034B50 (67324752)\n-043458 Extract Zip Spec      14 (20) '2.0'\n-043459 Extract OS            00 (0) 'MS-DOS'\n-04345A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04345C Compression Method    0000 (0) 'Stored'\n-04345E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-043462 CRC                   00000000 (0)\n-043466 Compressed Size       00000000 (0)\n-04346A Uncompressed Size     00000000 (0)\n-04346E Filename Length       0039 (57)\n-043470 Extra Length          0009 (9)\n-043472 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x43472: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0434AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0434AD   Length              0005 (5)\n-0434AF   Flags               01 (1) 'Modification'\n-0434B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0434B4 PAYLOAD\n-\n-046179 DATA DESCRIPTOR       08074B50 (134695760)\n-04617D CRC                   3FE3ACCB (1071885515)\n-046181 Compressed Size       00002CC5 (11461)\n-046185 Uncompressed Size     00002CC5 (11461)\n-\n-046189 LOCAL HEADER #74      04034B50 (67324752)\n-04618D Extract Zip Spec      14 (20) '2.0'\n-04618E Extract OS            00 (0) 'MS-DOS'\n-04618F General Purpose Flag  0000 (0)\n-046191 Compression Method    0000 (0) 'Stored'\n-046193 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-046197 CRC                   00000000 (0)\n-04619B Compressed Size       00000000 (0)\n-04619F Uncompressed Size     00000000 (0)\n-0461A3 Filename Length       001F (31)\n-0461A5 Extra Length          0009 (9)\n-0461A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x461A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0461C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0461C8   Length              0005 (5)\n-0461CA   Flags               01 (1) 'Modification'\n-0461CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0461CF LOCAL HEADER #75      04034B50 (67324752)\n-0461D3 Extract Zip Spec      14 (20) '2.0'\n-0461D4 Extract OS            00 (0) 'MS-DOS'\n-0461D5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0461D7 Compression Method    0000 (0) 'Stored'\n-0461D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0461DD CRC                   00000000 (0)\n-0461E1 Compressed Size       00000000 (0)\n-0461E5 Uncompressed Size     00000000 (0)\n-0461E9 Filename Length       003A (58)\n-0461EB Extra Length          0009 (9)\n-0461ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x461ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-046227 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-046229   Length              0005 (5)\n-04622B   Flags               01 (1) 'Modification'\n-04622C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-046230 PAYLOAD\n-\n-04732E DATA DESCRIPTOR       08074B50 (134695760)\n-047332 CRC                   F325AC46 (4079332422)\n-047336 Compressed Size       000010FE (4350)\n-04733A Uncompressed Size     000010FE (4350)\n-\n-04733E LOCAL HEADER #76      04034B50 (67324752)\n-047342 Extract Zip Spec      14 (20) '2.0'\n-047343 Extract OS            00 (0) 'MS-DOS'\n-047344 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-047346 Compression Method    0000 (0) 'Stored'\n-047348 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04734C CRC                   00000000 (0)\n-047350 Compressed Size       00000000 (0)\n-047354 Uncompressed Size     00000000 (0)\n-047358 Filename Length       0031 (49)\n-04735A Extra Length          0009 (9)\n-04735C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4735C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04738D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04738F   Length              0005 (5)\n-047391   Flags               01 (1) 'Modification'\n-047392   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-047396 PAYLOAD\n-\n-048E5B DATA DESCRIPTOR       08074B50 (134695760)\n-048E5F CRC                   9BAFC26A (2611987050)\n-048E63 Compressed Size       00001AC5 (6853)\n-048E67 Uncompressed Size     00001AC5 (6853)\n-\n-048E6B LOCAL HEADER #77      04034B50 (67324752)\n-048E6F Extract Zip Spec      14 (20) '2.0'\n-048E70 Extract OS            00 (0) 'MS-DOS'\n-048E71 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-048E73 Compression Method    0000 (0) 'Stored'\n-048E75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-048E79 CRC                   00000000 (0)\n-048E7D Compressed Size       00000000 (0)\n-048E81 Uncompressed Size     00000000 (0)\n-048E85 Filename Length       0036 (54)\n-048E87 Extra Length          0009 (9)\n-048E89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x48E89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-048EBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-048EC1   Length              0005 (5)\n-048EC3   Flags               01 (1) 'Modification'\n-048EC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-048EC8 PAYLOAD\n-\n-04A173 DATA DESCRIPTOR       08074B50 (134695760)\n-04A177 CRC                   68B50306 (1756693254)\n-04A17B Compressed Size       000012AB (4779)\n-04A17F Uncompressed Size     000012AB (4779)\n-\n-04A183 LOCAL HEADER #78      04034B50 (67324752)\n-04A187 Extract Zip Spec      14 (20) '2.0'\n-04A188 Extract OS            00 (0) 'MS-DOS'\n-04A189 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04A18B Compression Method    0000 (0) 'Stored'\n-04A18D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04A191 CRC                   00000000 (0)\n-04A195 Compressed Size       00000000 (0)\n-04A199 Uncompressed Size     00000000 (0)\n-04A19D Filename Length       002F (47)\n-04A19F Extra Length          0009 (9)\n-04A1A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A1A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04A1D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04A1D2   Length              0005 (5)\n-04A1D4   Flags               01 (1) 'Modification'\n-04A1D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04A1D9 PAYLOAD\n-\n-04C8EE DATA DESCRIPTOR       08074B50 (134695760)\n-04C8F2 CRC                   0BFFCD1E (201313566)\n-04C8F6 Compressed Size       00002715 (10005)\n-04C8FA Uncompressed Size     00002715 (10005)\n-\n-04C8FE LOCAL HEADER #79      04034B50 (67324752)\n-04C902 Extract Zip Spec      14 (20) '2.0'\n-04C903 Extract OS            00 (0) 'MS-DOS'\n-04C904 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04C906 Compression Method    0000 (0) 'Stored'\n-04C908 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04C90C CRC                   00000000 (0)\n-04C910 Compressed Size       00000000 (0)\n-04C914 Uncompressed Size     00000000 (0)\n-04C918 Filename Length       003C (60)\n-04C91A Extra Length          0009 (9)\n-04C91C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4C91C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04C958 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04C95A   Length              0005 (5)\n-04C95C   Flags               01 (1) 'Modification'\n-04C95D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04C961 PAYLOAD\n-\n-04CE54 DATA DESCRIPTOR       08074B50 (134695760)\n-04CE58 CRC                   94D758DF (2497140959)\n-04CE5C Compressed Size       000004F3 (1267)\n-04CE60 Uncompressed Size     000004F3 (1267)\n-\n-04CE64 LOCAL HEADER #80      04034B50 (67324752)\n-04CE68 Extract Zip Spec      14 (20) '2.0'\n-04CE69 Extract OS            00 (0) 'MS-DOS'\n-04CE6A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04CE6C Compression Method    0000 (0) 'Stored'\n-04CE6E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04CE72 CRC                   00000000 (0)\n-04CE76 Compressed Size       00000000 (0)\n-04CE7A Uncompressed Size     00000000 (0)\n-04CE7E Filename Length       0039 (57)\n-04CE80 Extra Length          0009 (9)\n-04CE82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4CE82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04CEBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04CEBD   Length              0005 (5)\n-04CEBF   Flags               01 (1) 'Modification'\n-04CEC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04CEC4 PAYLOAD\n-\n-04D634 DATA DESCRIPTOR       08074B50 (134695760)\n-04D638 CRC                   778123FC (2004952060)\n-04D63C Compressed Size       00000770 (1904)\n-04D640 Uncompressed Size     00000770 (1904)\n-\n-04D644 LOCAL HEADER #81      04034B50 (67324752)\n-04D648 Extract Zip Spec      14 (20) '2.0'\n-04D649 Extract OS            00 (0) 'MS-DOS'\n-04D64A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04D64C Compression Method    0000 (0) 'Stored'\n-04D64E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04D652 CRC                   00000000 (0)\n-04D656 Compressed Size       00000000 (0)\n-04D65A Uncompressed Size     00000000 (0)\n-04D65E Filename Length       003D (61)\n-04D660 Extra Length          0009 (9)\n-04D662 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4D662: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04D69F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04D6A1   Length              0005 (5)\n-04D6A3   Flags               01 (1) 'Modification'\n-04D6A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04D6A8 PAYLOAD\n-\n-04DB59 DATA DESCRIPTOR       08074B50 (134695760)\n-04DB5D CRC                   041CAAC9 (68987593)\n-04DB61 Compressed Size       000004B1 (1201)\n-04DB65 Uncompressed Size     000004B1 (1201)\n-\n-04DB69 LOCAL HEADER #82      04034B50 (67324752)\n-04DB6D Extract Zip Spec      14 (20) '2.0'\n-04DB6E Extract OS            00 (0) 'MS-DOS'\n-04DB6F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04DB71 Compression Method    0000 (0) 'Stored'\n-04DB73 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04DB77 CRC                   00000000 (0)\n-04DB7B Compressed Size       00000000 (0)\n-04DB7F Uncompressed Size     00000000 (0)\n-04DB83 Filename Length       003B (59)\n-04DB85 Extra Length          0009 (9)\n-04DB87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4DB87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04DBC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04DBC4   Length              0005 (5)\n-04DBC6   Flags               01 (1) 'Modification'\n-04DBC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04DBCB PAYLOAD\n-\n-04E617 DATA DESCRIPTOR       08074B50 (134695760)\n-04E61B CRC                   01D0CBB6 (30460854)\n-04E61F Compressed Size       00000A4C (2636)\n-04E623 Uncompressed Size     00000A4C (2636)\n-\n-04E627 LOCAL HEADER #83      04034B50 (67324752)\n-04E62B Extract Zip Spec      14 (20) '2.0'\n-04E62C Extract OS            00 (0) 'MS-DOS'\n-04E62D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04E62F Compression Method    0000 (0) 'Stored'\n-04E631 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04E635 CRC                   00000000 (0)\n-04E639 Compressed Size       00000000 (0)\n-04E63D Uncompressed Size     00000000 (0)\n-04E641 Filename Length       0037 (55)\n-04E643 Extra Length          0009 (9)\n-04E645 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4E645: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04E67C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04E67E   Length              0005 (5)\n-04E680   Flags               01 (1) 'Modification'\n-04E681   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04E685 PAYLOAD\n-\n-04EB32 DATA DESCRIPTOR       08074B50 (134695760)\n-04EB36 CRC                   790D5CAF (2030918831)\n-04EB3A Compressed Size       000004AD (1197)\n-04EB3E Uncompressed Size     000004AD (1197)\n-\n-04EB42 LOCAL HEADER #84      04034B50 (67324752)\n-04EB46 Extract Zip Spec      14 (20) '2.0'\n-04EB47 Extract OS            00 (0) 'MS-DOS'\n-04EB48 General Purpose Flag  0000 (0)\n-04EB4A Compression Method    0000 (0) 'Stored'\n-04EB4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04EB50 CRC                   00000000 (0)\n-04EB54 Compressed Size       00000000 (0)\n-04EB58 Uncompressed Size     00000000 (0)\n-04EB5C Filename Length       002C (44)\n-04EB5E Extra Length          0009 (9)\n-04EB60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4EB60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04EB8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04EB8E   Length              0005 (5)\n-04EB90   Flags               01 (1) 'Modification'\n-04EB91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04EB95 LOCAL HEADER #85      04034B50 (67324752)\n-04EB99 Extract Zip Spec      14 (20) '2.0'\n-04EB9A Extract OS            00 (0) 'MS-DOS'\n-04EB9B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04EB9D Compression Method    0000 (0) 'Stored'\n-04EB9F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04EBA3 CRC                   00000000 (0)\n-04EBA7 Compressed Size       00000000 (0)\n-04EBAB Uncompressed Size     00000000 (0)\n-04EBAF Filename Length       004D (77)\n-04EBB1 Extra Length          0009 (9)\n-04EBB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4EBB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04EC00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04EC02   Length              0005 (5)\n-04EC04   Flags               01 (1) 'Modification'\n-04EC05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04EC09 PAYLOAD\n-\n-051257 DATA DESCRIPTOR       08074B50 (134695760)\n-05125B CRC                   A679BD52 (2792996178)\n-05125F Compressed Size       0000264E (9806)\n-051263 Uncompressed Size     0000264E (9806)\n-\n-051267 LOCAL HEADER #86      04034B50 (67324752)\n-05126B Extract Zip Spec      14 (20) '2.0'\n-05126C Extract OS            00 (0) 'MS-DOS'\n-05126D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05126F Compression Method    0000 (0) 'Stored'\n-051271 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-051275 CRC                   00000000 (0)\n-051279 Compressed Size       00000000 (0)\n-05127D Uncompressed Size     00000000 (0)\n-051281 Filename Length       0054 (84)\n-051283 Extra Length          0009 (9)\n-051285 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51285: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0512D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0512DB   Length              0005 (5)\n-0512DD   Flags               01 (1) 'Modification'\n-0512DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0512E2 PAYLOAD\n-\n-0519AD DATA DESCRIPTOR       08074B50 (134695760)\n-0519B1 CRC                   5C1CB033 (1545383987)\n-0519B5 Compressed Size       000006CB (1739)\n-0519B9 Uncompressed Size     000006CB (1739)\n-\n-0519BD LOCAL HEADER #87      04034B50 (67324752)\n-0519C1 Extract Zip Spec      14 (20) '2.0'\n-0519C2 Extract OS            00 (0) 'MS-DOS'\n-0519C3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0519C5 Compression Method    0000 (0) 'Stored'\n-0519C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0519CB CRC                   00000000 (0)\n-0519CF Compressed Size       00000000 (0)\n-0519D3 Uncompressed Size     00000000 (0)\n-0519D7 Filename Length       0041 (65)\n-0519D9 Extra Length          0009 (9)\n-0519DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-051A1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-051A1E   Length              0005 (5)\n-051A20   Flags               01 (1) 'Modification'\n-051A21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-051A25 PAYLOAD\n-\n-051E6D DATA DESCRIPTOR       08074B50 (134695760)\n-051E71 CRC                   E6853BBE (3867491262)\n-051E75 Compressed Size       00000448 (1096)\n-051E79 Uncompressed Size     00000448 (1096)\n-\n-051E7D LOCAL HEADER #88      04034B50 (67324752)\n-051E81 Extract Zip Spec      14 (20) '2.0'\n-051E82 Extract OS            00 (0) 'MS-DOS'\n-051E83 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-051E85 Compression Method    0000 (0) 'Stored'\n-051E87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-051E8B CRC                   00000000 (0)\n-051E8F Compressed Size       00000000 (0)\n-051E93 Uncompressed Size     00000000 (0)\n-051E97 Filename Length       0043 (67)\n-051E99 Extra Length          0009 (9)\n-051E9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-051EDE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-051EE0   Length              0005 (5)\n-051EE2   Flags               01 (1) 'Modification'\n-051EE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-051EE7 PAYLOAD\n-\n-0529F2 DATA DESCRIPTOR       08074B50 (134695760)\n-0529F6 CRC                   B9E6C475 (3118908533)\n-0529FA Compressed Size       00000B0B (2827)\n-0529FE Uncompressed Size     00000B0B (2827)\n-\n-052A02 LOCAL HEADER #89      04034B50 (67324752)\n-052A06 Extract Zip Spec      14 (20) '2.0'\n-052A07 Extract OS            00 (0) 'MS-DOS'\n-052A08 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-052A0A Compression Method    0000 (0) 'Stored'\n-052A0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-052A10 CRC                   00000000 (0)\n-052A14 Compressed Size       00000000 (0)\n-052A18 Uncompressed Size     00000000 (0)\n-052A1C Filename Length       0046 (70)\n-052A1E Extra Length          0009 (9)\n-052A20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52A20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-052A66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-052A68   Length              0005 (5)\n-052A6A   Flags               01 (1) 'Modification'\n-052A6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-052A6F PAYLOAD\n-\n-052F80 DATA DESCRIPTOR       08074B50 (134695760)\n-052F84 CRC                   74E6231A (1961239322)\n-052F88 Compressed Size       00000511 (1297)\n-052F8C Uncompressed Size     00000511 (1297)\n-\n-052F90 LOCAL HEADER #90      04034B50 (67324752)\n-052F94 Extract Zip Spec      14 (20) '2.0'\n-052F95 Extract OS            00 (0) 'MS-DOS'\n-052F96 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-052F98 Compression Method    0000 (0) 'Stored'\n-052F9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-052F9E CRC                   00000000 (0)\n-052FA2 Compressed Size       00000000 (0)\n-052FA6 Uncompressed Size     00000000 (0)\n-052FAA Filename Length       003A (58)\n-052FAC Extra Length          0009 (9)\n-052FAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-052FE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-052FEA   Length              0005 (5)\n-052FEC   Flags               01 (1) 'Modification'\n-052FED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-052FF1 PAYLOAD\n-\n-053438 DATA DESCRIPTOR       08074B50 (134695760)\n-05343C CRC                   695FC9AE (1767885230)\n-053440 Compressed Size       00000447 (1095)\n-053444 Uncompressed Size     00000447 (1095)\n-\n-053448 LOCAL HEADER #91      04034B50 (67324752)\n-05344C Extract Zip Spec      14 (20) '2.0'\n-05344D Extract OS            00 (0) 'MS-DOS'\n-05344E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-053450 Compression Method    0000 (0) 'Stored'\n-053452 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-053456 CRC                   00000000 (0)\n-05345A Compressed Size       00000000 (0)\n-05345E Uncompressed Size     00000000 (0)\n-053462 Filename Length       0045 (69)\n-053464 Extra Length          0009 (9)\n-053466 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53466: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0534AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0534AD   Length              0005 (5)\n-0534AF   Flags               01 (1) 'Modification'\n-0534B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0534B4 PAYLOAD\n-\n-0558A5 DATA DESCRIPTOR       08074B50 (134695760)\n-0558A9 CRC                   1744C936 (390383926)\n-0558AD Compressed Size       000023F1 (9201)\n-0558B1 Uncompressed Size     000023F1 (9201)\n-\n-0558B5 LOCAL HEADER #92      04034B50 (67324752)\n-0558B9 Extract Zip Spec      14 (20) '2.0'\n-0558BA Extract OS            00 (0) 'MS-DOS'\n-0558BB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0558BD Compression Method    0000 (0) 'Stored'\n-0558BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0558C3 CRC                   00000000 (0)\n-0558C7 Compressed Size       00000000 (0)\n-0558CB Uncompressed Size     00000000 (0)\n-0558CF Filename Length       004C (76)\n-0558D1 Extra Length          0009 (9)\n-0558D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x558D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05591F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-055921   Length              0005 (5)\n-055923   Flags               01 (1) 'Modification'\n-055924   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-055928 PAYLOAD\n-\n-0560EB DATA DESCRIPTOR       08074B50 (134695760)\n-0560EF CRC                   287FAB99 (679455641)\n-0560F3 Compressed Size       000007C3 (1987)\n-0560F7 Uncompressed Size     000007C3 (1987)\n-\n-0560FB LOCAL HEADER #93      04034B50 (67324752)\n-0560FF Extract Zip Spec      14 (20) '2.0'\n-056100 Extract OS            00 (0) 'MS-DOS'\n-056101 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-056103 Compression Method    0000 (0) 'Stored'\n-056105 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-056109 CRC                   00000000 (0)\n-05610D Compressed Size       00000000 (0)\n-056111 Uncompressed Size     00000000 (0)\n-056115 Filename Length       004D (77)\n-056117 Extra Length          0009 (9)\n-056119 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x56119: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-056166 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-056168   Length              0005 (5)\n-05616A   Flags               01 (1) 'Modification'\n-05616B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05616F PAYLOAD\n-\n-057CEA DATA DESCRIPTOR       08074B50 (134695760)\n-057CEE CRC                   9083C03B (2424553531)\n-057CF2 Compressed Size       00001B7B (7035)\n-057CF6 Uncompressed Size     00001B7B (7035)\n-\n-057CFA LOCAL HEADER #94      04034B50 (67324752)\n-057CFE Extract Zip Spec      14 (20) '2.0'\n-057CFF Extract OS            00 (0) 'MS-DOS'\n-057D00 General Purpose Flag  0000 (0)\n-057D02 Compression Method    0000 (0) 'Stored'\n-057D04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-057D08 CRC                   00000000 (0)\n-057D0C Compressed Size       00000000 (0)\n-057D10 Uncompressed Size     00000000 (0)\n-057D14 Filename Length       0031 (49)\n-057D16 Extra Length          0009 (9)\n-057D18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x57D18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-057D49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-057D4B   Length              0005 (5)\n-057D4D   Flags               01 (1) 'Modification'\n-057D4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-057D52 LOCAL HEADER #95      04034B50 (67324752)\n-057D56 Extract Zip Spec      14 (20) '2.0'\n-057D57 Extract OS            00 (0) 'MS-DOS'\n-057D58 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-057D5A Compression Method    0000 (0) 'Stored'\n-057D5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-057D60 CRC                   00000000 (0)\n-057D64 Compressed Size       00000000 (0)\n-057D68 Uncompressed Size     00000000 (0)\n-057D6C Filename Length       0054 (84)\n-057D6E Extra Length          0009 (9)\n-057D70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x57D70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-057DC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-057DC6   Length              0005 (5)\n-057DC8   Flags               01 (1) 'Modification'\n-057DC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-057DCD PAYLOAD\n-\n-05D5F7 DATA DESCRIPTOR       08074B50 (134695760)\n-05D5FB CRC                   F23B4D60 (4063972704)\n-05D5FF Compressed Size       0000582A (22570)\n-05D603 Uncompressed Size     0000582A (22570)\n-\n-05D607 LOCAL HEADER #96      04034B50 (67324752)\n-05D60B Extract Zip Spec      14 (20) '2.0'\n-05D60C Extract OS            00 (0) 'MS-DOS'\n-05D60D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05D60F Compression Method    0000 (0) 'Stored'\n-05D611 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05D615 CRC                   00000000 (0)\n-05D619 Compressed Size       00000000 (0)\n-05D61D Uncompressed Size     00000000 (0)\n-05D621 Filename Length       005B (91)\n-05D623 Extra Length          0009 (9)\n-05D625 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5D625: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05D680 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05D682   Length              0005 (5)\n-05D684   Flags               01 (1) 'Modification'\n-05D685   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05D689 PAYLOAD\n-\n-05DC58 DATA DESCRIPTOR       08074B50 (134695760)\n-05DC5C CRC                   E57CCA12 (3850160658)\n-05DC60 Compressed Size       000005CF (1487)\n-05DC64 Uncompressed Size     000005CF (1487)\n-\n-05DC68 LOCAL HEADER #97      04034B50 (67324752)\n-05DC6C Extract Zip Spec      14 (20) '2.0'\n-05DC6D Extract OS            00 (0) 'MS-DOS'\n-05DC6E General Purpose Flag  0000 (0)\n-05DC70 Compression Method    0000 (0) 'Stored'\n-05DC72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05DC76 CRC                   00000000 (0)\n-05DC7A Compressed Size       00000000 (0)\n-05DC7E Uncompressed Size     00000000 (0)\n-05DC82 Filename Length       0030 (48)\n-05DC84 Extra Length          0009 (9)\n-05DC86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5DC86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05DCB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05DCB8   Length              0005 (5)\n-05DCBA   Flags               01 (1) 'Modification'\n-05DCBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05DCBF LOCAL HEADER #98      04034B50 (67324752)\n-05DCC3 Extract Zip Spec      14 (20) '2.0'\n-05DCC4 Extract OS            00 (0) 'MS-DOS'\n-05DCC5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05DCC7 Compression Method    0000 (0) 'Stored'\n-05DCC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05DCCD CRC                   00000000 (0)\n-05DCD1 Compressed Size       00000000 (0)\n-05DCD5 Uncompressed Size     00000000 (0)\n-05DCD9 Filename Length       004C (76)\n-05DCDB Extra Length          0009 (9)\n-05DCDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5DCDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05DD29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05DD2B   Length              0005 (5)\n-05DD2D   Flags               01 (1) 'Modification'\n-05DD2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05DD32 PAYLOAD\n-\n-05E5D9 DATA DESCRIPTOR       08074B50 (134695760)\n-05E5DD CRC                   B946295F (3108383071)\n-05E5E1 Compressed Size       000008A7 (2215)\n-05E5E5 Uncompressed Size     000008A7 (2215)\n-\n-05E5E9 LOCAL HEADER #99      04034B50 (67324752)\n-05E5ED Extract Zip Spec      14 (20) '2.0'\n-05E5EE Extract OS            00 (0) 'MS-DOS'\n-05E5EF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05E5F1 Compression Method    0000 (0) 'Stored'\n-05E5F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05E5F7 CRC                   00000000 (0)\n-05E5FB Compressed Size       00000000 (0)\n-05E5FF Uncompressed Size     00000000 (0)\n-05E603 Filename Length       0053 (83)\n-05E605 Extra Length          0009 (9)\n-05E607 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5E607: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05E65A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05E65C   Length              0005 (5)\n-05E65E   Flags               01 (1) 'Modification'\n-05E65F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05E663 PAYLOAD\n-\n-05EB87 DATA DESCRIPTOR       08074B50 (134695760)\n-05EB8B CRC                   208B91F5 (546017781)\n-05EB8F Compressed Size       00000524 (1316)\n-05EB93 Uncompressed Size     00000524 (1316)\n-\n-05EB97 LOCAL HEADER #100     04034B50 (67324752)\n-05EB9B Extract Zip Spec      14 (20) '2.0'\n-05EB9C Extract OS            00 (0) 'MS-DOS'\n-05EB9D General Purpose Flag  0000 (0)\n-05EB9F Compression Method    0000 (0) 'Stored'\n-05EBA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05EBA5 CRC                   00000000 (0)\n-05EBA9 Compressed Size       00000000 (0)\n-05EBAD Uncompressed Size     00000000 (0)\n-05EBB1 Filename Length       0034 (52)\n-05EBB3 Extra Length          0009 (9)\n-05EBB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EBB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05EBE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05EBEB   Length              0005 (5)\n-05EBED   Flags               01 (1) 'Modification'\n-05EBEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05EBF2 LOCAL HEADER #101     04034B50 (67324752)\n-05EBF6 Extract Zip Spec      14 (20) '2.0'\n-05EBF7 Extract OS            00 (0) 'MS-DOS'\n-05EBF8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05EBFA Compression Method    0000 (0) 'Stored'\n-05EBFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05EC00 CRC                   00000000 (0)\n-05EC04 Compressed Size       00000000 (0)\n-05EC08 Uncompressed Size     00000000 (0)\n-05EC0C Filename Length       0056 (86)\n-05EC0E Extra Length          0009 (9)\n-05EC10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5EC10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05EC66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05EC68   Length              0005 (5)\n-05EC6A   Flags               01 (1) 'Modification'\n-05EC6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05EC6F PAYLOAD\n-\n-05FBB9 DATA DESCRIPTOR       08074B50 (134695760)\n-05FBBD CRC                   C03FB50A (3225400586)\n-05FBC1 Compressed Size       00000F4A (3914)\n-05FBC5 Uncompressed Size     00000F4A (3914)\n-\n-05FBC9 LOCAL HEADER #102     04034B50 (67324752)\n-05FBCD Extract Zip Spec      14 (20) '2.0'\n-05FBCE Extract OS            00 (0) 'MS-DOS'\n-05FBCF General Purpose Flag  0000 (0)\n-05FBD1 Compression Method    0000 (0) 'Stored'\n-05FBD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05FBD7 CRC                   00000000 (0)\n-05FBDB Compressed Size       00000000 (0)\n-05FBDF Uncompressed Size     00000000 (0)\n-05FBE3 Filename Length       0022 (34)\n-05FBE5 Extra Length          0009 (9)\n-05FBE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FBE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05FC09 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05FC0B   Length              0005 (5)\n-05FC0D   Flags               01 (1) 'Modification'\n-05FC0E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05FC12 LOCAL HEADER #103     04034B50 (67324752)\n-05FC16 Extract Zip Spec      14 (20) '2.0'\n-05FC17 Extract OS            00 (0) 'MS-DOS'\n-05FC18 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05FC1A Compression Method    0000 (0) 'Stored'\n-05FC1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05FC20 CRC                   00000000 (0)\n-05FC24 Compressed Size       00000000 (0)\n-05FC28 Uncompressed Size     00000000 (0)\n-05FC2C Filename Length       0036 (54)\n-05FC2E Extra Length          0009 (9)\n-05FC30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FC30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05FC66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05FC68   Length              0005 (5)\n-05FC6A   Flags               01 (1) 'Modification'\n-05FC6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05FC6F PAYLOAD\n-\n-06247F DATA DESCRIPTOR       08074B50 (134695760)\n-062483 CRC                   2CFFA2CA (754950858)\n-062487 Compressed Size       00002810 (10256)\n-06248B Uncompressed Size     00002810 (10256)\n-\n-06248F LOCAL HEADER #104     04034B50 (67324752)\n-062493 Extract Zip Spec      14 (20) '2.0'\n-062494 Extract OS            00 (0) 'MS-DOS'\n-062495 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-062497 Compression Method    0000 (0) 'Stored'\n-062499 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06249D CRC                   00000000 (0)\n-0624A1 Compressed Size       00000000 (0)\n-0624A5 Uncompressed Size     00000000 (0)\n-0624A9 Filename Length       0036 (54)\n-0624AB Extra Length          0009 (9)\n-0624AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x624AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0624E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0624E5   Length              0005 (5)\n-0624E7   Flags               01 (1) 'Modification'\n-0624E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0624EC PAYLOAD\n-\n-0628AB DATA DESCRIPTOR       08074B50 (134695760)\n-0628AF CRC                   A6E18129 (2799796521)\n-0628B3 Compressed Size       000003BF (959)\n-0628B7 Uncompressed Size     000003BF (959)\n-\n-0628BB LOCAL HEADER #105     04034B50 (67324752)\n-0628BF Extract Zip Spec      14 (20) '2.0'\n-0628C0 Extract OS            00 (0) 'MS-DOS'\n-0628C1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0628C3 Compression Method    0000 (0) 'Stored'\n-0628C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0628C9 CRC                   00000000 (0)\n-0628CD Compressed Size       00000000 (0)\n-0628D1 Uncompressed Size     00000000 (0)\n-0628D5 Filename Length       0033 (51)\n-0628D7 Extra Length          0009 (9)\n-0628D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x628D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06290C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06290E   Length              0005 (5)\n-062910   Flags               01 (1) 'Modification'\n-062911   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-062915 PAYLOAD\n-\n-062D44 DATA DESCRIPTOR       08074B50 (134695760)\n-062D48 CRC                   0D4F07B4 (223283124)\n-062D4C Compressed Size       0000042F (1071)\n-062D50 Uncompressed Size     0000042F (1071)\n-\n-062D54 LOCAL HEADER #106     04034B50 (67324752)\n-062D58 Extract Zip Spec      14 (20) '2.0'\n-062D59 Extract OS            00 (0) 'MS-DOS'\n-062D5A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-062D5C Compression Method    0000 (0) 'Stored'\n-062D5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-062D62 CRC                   00000000 (0)\n-062D66 Compressed Size       00000000 (0)\n-062D6A Uncompressed Size     00000000 (0)\n-062D6E Filename Length       0038 (56)\n-062D70 Extra Length          0009 (9)\n-062D72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x62D72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-062DAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-062DAC   Length              0005 (5)\n-062DAE   Flags               01 (1) 'Modification'\n-062DAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-062DB3 PAYLOAD\n-\n-063B40 DATA DESCRIPTOR       08074B50 (134695760)\n-063B44 CRC                   E90F01CB (3910074827)\n-063B48 Compressed Size       00000D8D (3469)\n-063B4C Uncompressed Size     00000D8D (3469)\n-\n-063B50 LOCAL HEADER #107     04034B50 (67324752)\n-063B54 Extract Zip Spec      14 (20) '2.0'\n-063B55 Extract OS            00 (0) 'MS-DOS'\n-063B56 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-063B58 Compression Method    0000 (0) 'Stored'\n-063B5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-063B5E CRC                   00000000 (0)\n-063B62 Compressed Size       00000000 (0)\n-063B66 Uncompressed Size     00000000 (0)\n-063B6A Filename Length       0038 (56)\n-063B6C Extra Length          0009 (9)\n-063B6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x63B6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-063BA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-063BA8   Length              0005 (5)\n-063BAA   Flags               01 (1) 'Modification'\n-063BAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-063BAF PAYLOAD\n-\n-063F65 DATA DESCRIPTOR       08074B50 (134695760)\n-063F69 CRC                   1B8CE743 (462219075)\n-063F6D Compressed Size       000003B6 (950)\n-063F71 Uncompressed Size     000003B6 (950)\n-\n-063F75 LOCAL HEADER #108     04034B50 (67324752)\n-063F79 Extract Zip Spec      14 (20) '2.0'\n-063F7A Extract OS            00 (0) 'MS-DOS'\n-063F7B General Purpose Flag  0000 (0)\n-063F7D Compression Method    0000 (0) 'Stored'\n-063F7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-063F83 CRC                   00000000 (0)\n-063F87 Compressed Size       00000000 (0)\n-063F8B Uncompressed Size     00000000 (0)\n-063F8F Filename Length       0020 (32)\n-063F91 Extra Length          0009 (9)\n-063F93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x63F93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-063FB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-063FB5   Length              0005 (5)\n-063FB7   Flags               01 (1) 'Modification'\n-063FB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-063FBC LOCAL HEADER #109     04034B50 (67324752)\n-063FC0 Extract Zip Spec      14 (20) '2.0'\n-063FC1 Extract OS            00 (0) 'MS-DOS'\n-063FC2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-063FC4 Compression Method    0000 (0) 'Stored'\n-063FC6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-063FCA CRC                   00000000 (0)\n-063FCE Compressed Size       00000000 (0)\n-063FD2 Uncompressed Size     00000000 (0)\n-063FD6 Filename Length       0031 (49)\n-063FD8 Extra Length          0009 (9)\n-063FDA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x63FDA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06400B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06400D   Length              0005 (5)\n-06400F   Flags               01 (1) 'Modification'\n-064010   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-064014 PAYLOAD\n-\n-0643C9 DATA DESCRIPTOR       08074B50 (134695760)\n-0643CD CRC                   94BF4E7B (2495565435)\n-0643D1 Compressed Size       000003B5 (949)\n-0643D5 Uncompressed Size     000003B5 (949)\n-\n-0643D9 LOCAL HEADER #110     04034B50 (67324752)\n-0643DD Extract Zip Spec      14 (20) '2.0'\n-0643DE Extract OS            00 (0) 'MS-DOS'\n-0643DF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0643E1 Compression Method    0000 (0) 'Stored'\n-0643E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0643E7 CRC                   00000000 (0)\n-0643EB Compressed Size       00000000 (0)\n-0643EF Uncompressed Size     00000000 (0)\n-0643F3 Filename Length       002E (46)\n-0643F5 Extra Length          0009 (9)\n-0643F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x643F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-064425 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-064427   Length              0005 (5)\n-064429   Flags               01 (1) 'Modification'\n-06442A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06442E PAYLOAD\n-\n-0649EB DATA DESCRIPTOR       08074B50 (134695760)\n-0649EF CRC                   01244711 (19154705)\n-0649F3 Compressed Size       000005BD (1469)\n-0649F7 Uncompressed Size     000005BD (1469)\n-\n-0649FB LOCAL HEADER #111     04034B50 (67324752)\n-0649FF Extract Zip Spec      14 (20) '2.0'\n-064A00 Extract OS            00 (0) 'MS-DOS'\n-064A01 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-064A03 Compression Method    0000 (0) 'Stored'\n-064A05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-064A09 CRC                   00000000 (0)\n-064A0D Compressed Size       00000000 (0)\n-064A11 Uncompressed Size     00000000 (0)\n-064A15 Filename Length       0035 (53)\n-064A17 Extra Length          0009 (9)\n-064A19 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64A19: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-064A4E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-064A50   Length              0005 (5)\n-064A52   Flags               01 (1) 'Modification'\n-064A53   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-064A57 PAYLOAD\n-\n-064ED1 DATA DESCRIPTOR       08074B50 (134695760)\n-064ED5 CRC                   8B9FA779 (2342496121)\n-064ED9 Compressed Size       0000047A (1146)\n-064EDD Uncompressed Size     0000047A (1146)\n-\n-064EE1 LOCAL HEADER #112     04034B50 (67324752)\n-064EE5 Extract Zip Spec      14 (20) '2.0'\n-064EE6 Extract OS            00 (0) 'MS-DOS'\n-064EE7 General Purpose Flag  0000 (0)\n-064EE9 Compression Method    0000 (0) 'Stored'\n-064EEB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-064EEF CRC                   00000000 (0)\n-064EF3 Compressed Size       00000000 (0)\n-064EF7 Uncompressed Size     00000000 (0)\n-064EFB Filename Length       0020 (32)\n-064EFD Extra Length          0009 (9)\n-064EFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64EFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-064F1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-064F21   Length              0005 (5)\n-064F23   Flags               01 (1) 'Modification'\n-064F24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-064F28 LOCAL HEADER #113     04034B50 (67324752)\n-064F2C Extract Zip Spec      14 (20) '2.0'\n-064F2D Extract OS            00 (0) 'MS-DOS'\n-064F2E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-064F30 Compression Method    0000 (0) 'Stored'\n-064F32 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-064F36 CRC                   00000000 (0)\n-064F3A Compressed Size       00000000 (0)\n-064F3E Uncompressed Size     00000000 (0)\n-064F42 Filename Length       002E (46)\n-064F44 Extra Length          0009 (9)\n-064F46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x64F46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-064F74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-064F76   Length              0005 (5)\n-064F78   Flags               01 (1) 'Modification'\n-064F79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-064F7D PAYLOAD\n-\n-065DDD DATA DESCRIPTOR       08074B50 (134695760)\n-065DE1 CRC                   6A25F272 (1780871794)\n-065DE5 Compressed Size       00000E60 (3680)\n-065DE9 Uncompressed Size     00000E60 (3680)\n-\n-065DED LOCAL HEADER #114     04034B50 (67324752)\n-065DF1 Extract Zip Spec      14 (20) '2.0'\n-065DF2 Extract OS            00 (0) 'MS-DOS'\n-065DF3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-065DF5 Compression Method    0000 (0) 'Stored'\n-065DF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-065DFB CRC                   00000000 (0)\n-065DFF Compressed Size       00000000 (0)\n-065E03 Uncompressed Size     00000000 (0)\n-065E07 Filename Length       0034 (52)\n-065E09 Extra Length          0009 (9)\n-065E0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x65E0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-065E3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-065E41   Length              0005 (5)\n-065E43   Flags               01 (1) 'Modification'\n-065E44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-065E48 PAYLOAD\n-\n-066259 DATA DESCRIPTOR       08074B50 (134695760)\n-06625D CRC                   94774B8E (2490846094)\n-066261 Compressed Size       00000411 (1041)\n-066265 Uncompressed Size     00000411 (1041)\n-\n-066269 LOCAL HEADER #115     04034B50 (67324752)\n-06626D Extract Zip Spec      14 (20) '2.0'\n-06626E Extract OS            00 (0) 'MS-DOS'\n-06626F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-066271 Compression Method    0000 (0) 'Stored'\n-066273 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-066277 CRC                   00000000 (0)\n-06627B Compressed Size       00000000 (0)\n-06627F Uncompressed Size     00000000 (0)\n-066283 Filename Length       003D (61)\n-066285 Extra Length          0009 (9)\n-066287 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x66287: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0662C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0662C6   Length              0005 (5)\n-0662C8   Flags               01 (1) 'Modification'\n-0662C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0662CD PAYLOAD\n-\n-0667FF DATA DESCRIPTOR       08074B50 (134695760)\n-066803 CRC                   A95D9412 (2841482258)\n-066807 Compressed Size       00000532 (1330)\n-06680B Uncompressed Size     00000532 (1330)\n-\n-06680F LOCAL HEADER #116     04034B50 (67324752)\n-066813 Extract Zip Spec      14 (20) '2.0'\n-066814 Extract OS            00 (0) 'MS-DOS'\n-066815 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-066817 Compression Method    0000 (0) 'Stored'\n-066819 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06681D CRC                   00000000 (0)\n-066821 Compressed Size       00000000 (0)\n-066825 Uncompressed Size     00000000 (0)\n-066829 Filename Length       003F (63)\n-06682B Extra Length          0009 (9)\n-06682D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6682D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06686C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06686E   Length              0005 (5)\n-066870   Flags               01 (1) 'Modification'\n-066871   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-066875 PAYLOAD\n-\n-066D89 DATA DESCRIPTOR       08074B50 (134695760)\n-066D8D CRC                   578BE304 (1468785412)\n-066D91 Compressed Size       00000514 (1300)\n-066D95 Uncompressed Size     00000514 (1300)\n-\n-066D99 LOCAL HEADER #117     04034B50 (67324752)\n-066D9D Extract Zip Spec      14 (20) '2.0'\n-066D9E Extract OS            00 (0) 'MS-DOS'\n-066D9F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-066DA1 Compression Method    0000 (0) 'Stored'\n-066DA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-066DA7 CRC                   00000000 (0)\n-066DAB Compressed Size       00000000 (0)\n-066DAF Uncompressed Size     00000000 (0)\n-066DB3 Filename Length       003F (63)\n-066DB5 Extra Length          0009 (9)\n-066DB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x66DB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-066DF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-066DF8   Length              0005 (5)\n-066DFA   Flags               01 (1) 'Modification'\n-066DFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-066DFF PAYLOAD\n-\n-0673D9 DATA DESCRIPTOR       08074B50 (134695760)\n-0673DD CRC                   8AE0BB27 (2329983783)\n-0673E1 Compressed Size       000005DA (1498)\n-0673E5 Uncompressed Size     000005DA (1498)\n-\n-0673E9 LOCAL HEADER #118     04034B50 (67324752)\n-0673ED Extract Zip Spec      14 (20) '2.0'\n-0673EE Extract OS            00 (0) 'MS-DOS'\n-0673EF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0673F1 Compression Method    0000 (0) 'Stored'\n-0673F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0673F7 CRC                   00000000 (0)\n-0673FB Compressed Size       00000000 (0)\n-0673FF Uncompressed Size     00000000 (0)\n-067403 Filename Length       003C (60)\n-067405 Extra Length          0009 (9)\n-067407 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x67407: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-067443 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-067445   Length              0005 (5)\n-067447   Flags               01 (1) 'Modification'\n-067448   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06744C PAYLOAD\n-\n-06797A DATA DESCRIPTOR       08074B50 (134695760)\n-06797E CRC                   D8EB7635 (3639309877)\n-067982 Compressed Size       0000052E (1326)\n-067986 Uncompressed Size     0000052E (1326)\n-\n-06798A LOCAL HEADER #119     04034B50 (67324752)\n-06798E Extract Zip Spec      14 (20) '2.0'\n-06798F Extract OS            00 (0) 'MS-DOS'\n-067990 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-067992 Compression Method    0000 (0) 'Stored'\n-067994 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-067998 CRC                   00000000 (0)\n-06799C Compressed Size       00000000 (0)\n-0679A0 Uncompressed Size     00000000 (0)\n-0679A4 Filename Length       003B (59)\n-0679A6 Extra Length          0009 (9)\n-0679A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x679A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0679E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0679E5   Length              0005 (5)\n-0679E7   Flags               01 (1) 'Modification'\n-0679E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0679EC PAYLOAD\n-\n-067F14 DATA DESCRIPTOR       08074B50 (134695760)\n-067F18 CRC                   7C7DD03D (2088620093)\n-067F1C Compressed Size       00000528 (1320)\n-067F20 Uncompressed Size     00000528 (1320)\n-\n-067F24 LOCAL HEADER #120     04034B50 (67324752)\n-067F28 Extract Zip Spec      14 (20) '2.0'\n-067F29 Extract OS            00 (0) 'MS-DOS'\n-067F2A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-067F2C Compression Method    0000 (0) 'Stored'\n-067F2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-067F32 CRC                   00000000 (0)\n-067F36 Compressed Size       00000000 (0)\n-067F3A Uncompressed Size     00000000 (0)\n-067F3E Filename Length       003D (61)\n-067F40 Extra Length          0009 (9)\n-067F42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x67F42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-067F7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-067F81   Length              0005 (5)\n-067F83   Flags               01 (1) 'Modification'\n-067F84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-067F88 PAYLOAD\n-\n-0684B6 DATA DESCRIPTOR       08074B50 (134695760)\n-0684BA CRC                   39AACB0F (967494415)\n-0684BE Compressed Size       0000052E (1326)\n-0684C2 Uncompressed Size     0000052E (1326)\n-\n-0684C6 LOCAL HEADER #121     04034B50 (67324752)\n-0684CA Extract Zip Spec      14 (20) '2.0'\n-0684CB Extract OS            00 (0) 'MS-DOS'\n-0684CC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0684CE Compression Method    0000 (0) 'Stored'\n-0684D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0684D4 CRC                   00000000 (0)\n-0684D8 Compressed Size       00000000 (0)\n-0684DC Uncompressed Size     00000000 (0)\n-0684E0 Filename Length       003A (58)\n-0684E2 Extra Length          0009 (9)\n-0684E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x684E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06851E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-068520   Length              0005 (5)\n-068522   Flags               01 (1) 'Modification'\n-068523   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-068527 PAYLOAD\n-\n-068A4B DATA DESCRIPTOR       08074B50 (134695760)\n-068A4F CRC                   5BF59138 (1542820152)\n-068A53 Compressed Size       00000524 (1316)\n-068A57 Uncompressed Size     00000524 (1316)\n-\n-068A5B LOCAL HEADER #122     04034B50 (67324752)\n-068A5F Extract Zip Spec      14 (20) '2.0'\n-068A60 Extract OS            00 (0) 'MS-DOS'\n-068A61 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-068A63 Compression Method    0000 (0) 'Stored'\n-068A65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-068A69 CRC                   00000000 (0)\n-068A6D Compressed Size       00000000 (0)\n-068A71 Uncompressed Size     00000000 (0)\n-068A75 Filename Length       003E (62)\n-068A77 Extra Length          0009 (9)\n-068A79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x68A79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-068AB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-068AB9   Length              0005 (5)\n-068ABB   Flags               01 (1) 'Modification'\n-068ABC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-068AC0 PAYLOAD\n-\n-068FB3 DATA DESCRIPTOR       08074B50 (134695760)\n-068FB7 CRC                   9AA4AEC4 (2594483908)\n-068FBB Compressed Size       000004F3 (1267)\n-068FBF Uncompressed Size     000004F3 (1267)\n-\n-068FC3 LOCAL HEADER #123     04034B50 (67324752)\n-068FC7 Extract Zip Spec      14 (20) '2.0'\n-068FC8 Extract OS            00 (0) 'MS-DOS'\n-068FC9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-068FCB Compression Method    0000 (0) 'Stored'\n-068FCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-068FD1 CRC                   00000000 (0)\n-068FD5 Compressed Size       00000000 (0)\n-068FD9 Uncompressed Size     00000000 (0)\n-068FDD Filename Length       003B (59)\n-068FDF Extra Length          0009 (9)\n-068FE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x68FE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06901C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06901E   Length              0005 (5)\n-069020   Flags               01 (1) 'Modification'\n-069021   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-069025 PAYLOAD\n-\n-06954E DATA DESCRIPTOR       08074B50 (134695760)\n-069552 CRC                   FD88956D (4253586797)\n-069556 Compressed Size       00000529 (1321)\n-06955A Uncompressed Size     00000529 (1321)\n-\n-06955E LOCAL HEADER #124     04034B50 (67324752)\n-069562 Extract Zip Spec      14 (20) '2.0'\n-069563 Extract OS            00 (0) 'MS-DOS'\n-069564 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-069566 Compression Method    0000 (0) 'Stored'\n-069568 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06956C CRC                   00000000 (0)\n-069570 Compressed Size       00000000 (0)\n-069574 Uncompressed Size     00000000 (0)\n-069578 Filename Length       003C (60)\n-06957A Extra Length          0009 (9)\n-06957C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6957C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0695B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0695BA   Length              0005 (5)\n-0695BC   Flags               01 (1) 'Modification'\n-0695BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0695C1 PAYLOAD\n-\n-069A13 DATA DESCRIPTOR       08074B50 (134695760)\n-069A17 CRC                   88F80863 (2297956451)\n-069A1B Compressed Size       00000452 (1106)\n-069A1F Uncompressed Size     00000452 (1106)\n-\n-069A23 LOCAL HEADER #125     04034B50 (67324752)\n-069A27 Extract Zip Spec      14 (20) '2.0'\n-069A28 Extract OS            00 (0) 'MS-DOS'\n-069A29 General Purpose Flag  0000 (0)\n-069A2B Compression Method    0000 (0) 'Stored'\n-069A2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-069A31 CRC                   00000000 (0)\n-069A35 Compressed Size       00000000 (0)\n-069A39 Uncompressed Size     00000000 (0)\n-069A3D Filename Length       0029 (41)\n-069A3F Extra Length          0009 (9)\n-069A41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x69A41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-069A6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-069A6C   Length              0005 (5)\n-069A6E   Flags               01 (1) 'Modification'\n-069A6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-069A73 LOCAL HEADER #126     04034B50 (67324752)\n-069A77 Extract Zip Spec      14 (20) '2.0'\n-069A78 Extract OS            00 (0) 'MS-DOS'\n-069A79 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-069A7B Compression Method    0000 (0) 'Stored'\n-069A7D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-069A81 CRC                   00000000 (0)\n-069A85 Compressed Size       00000000 (0)\n-069A89 Uncompressed Size     00000000 (0)\n-069A8D Filename Length       0041 (65)\n-069A8F Extra Length          0009 (9)\n-069A91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x69A91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-069AD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-069AD4   Length              0005 (5)\n-069AD6   Flags               01 (1) 'Modification'\n-069AD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-069ADB PAYLOAD\n-\n-06A80C DATA DESCRIPTOR       08074B50 (134695760)\n-06A810 CRC                   56E92431 (1458119729)\n-06A814 Compressed Size       00000D31 (3377)\n-06A818 Uncompressed Size     00000D31 (3377)\n-\n-06A81C LOCAL HEADER #127     04034B50 (67324752)\n-06A820 Extract Zip Spec      14 (20) '2.0'\n-06A821 Extract OS            00 (0) 'MS-DOS'\n-06A822 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06A824 Compression Method    0000 (0) 'Stored'\n-06A826 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06A82A CRC                   00000000 (0)\n-06A82E Compressed Size       00000000 (0)\n-06A832 Uncompressed Size     00000000 (0)\n-06A836 Filename Length       0044 (68)\n-06A838 Extra Length          0009 (9)\n-06A83A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6A83A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06A87E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06A880   Length              0005 (5)\n-06A882   Flags               01 (1) 'Modification'\n-06A883   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06A887 PAYLOAD\n-\n-06AFFB DATA DESCRIPTOR       08074B50 (134695760)\n-06AFFF CRC                   54A7512C (1420251436)\n-06B003 Compressed Size       00000774 (1908)\n-06B007 Uncompressed Size     00000774 (1908)\n-\n-06B00B LOCAL HEADER #128     04034B50 (67324752)\n-06B00F Extract Zip Spec      14 (20) '2.0'\n-06B010 Extract OS            00 (0) 'MS-DOS'\n-06B011 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06B013 Compression Method    0000 (0) 'Stored'\n-06B015 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06B019 CRC                   00000000 (0)\n-06B01D Compressed Size       00000000 (0)\n-06B021 Uncompressed Size     00000000 (0)\n-06B025 Filename Length       004C (76)\n-06B027 Extra Length          0009 (9)\n-06B029 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6B029: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06B075 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06B077   Length              0005 (5)\n-06B079   Flags               01 (1) 'Modification'\n-06B07A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06B07E PAYLOAD\n-\n-06B58D DATA DESCRIPTOR       08074B50 (134695760)\n-06B591 CRC                   44B63BF0 (1152793584)\n-06B595 Compressed Size       0000050F (1295)\n-06B599 Uncompressed Size     0000050F (1295)\n-\n-06B59D LOCAL HEADER #129     04034B50 (67324752)\n-06B5A1 Extract Zip Spec      14 (20) '2.0'\n-06B5A2 Extract OS            00 (0) 'MS-DOS'\n-06B5A3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06B5A5 Compression Method    0000 (0) 'Stored'\n-06B5A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06B5AB CRC                   00000000 (0)\n-06B5AF Compressed Size       00000000 (0)\n-06B5B3 Uncompressed Size     00000000 (0)\n-06B5B7 Filename Length       004C (76)\n-06B5B9 Extra Length          0009 (9)\n-06B5BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6B5BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06B607 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06B609   Length              0005 (5)\n-06B60B   Flags               01 (1) 'Modification'\n-06B60C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06B610 PAYLOAD\n-\n-06BB48 DATA DESCRIPTOR       08074B50 (134695760)\n-06BB4C CRC                   6FDF7D92 (1876917650)\n-06BB50 Compressed Size       00000538 (1336)\n-06BB54 Uncompressed Size     00000538 (1336)\n-\n-06BB58 LOCAL HEADER #130     04034B50 (67324752)\n-06BB5C Extract Zip Spec      14 (20) '2.0'\n-06BB5D Extract OS            00 (0) 'MS-DOS'\n-06BB5E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06BB60 Compression Method    0000 (0) 'Stored'\n-06BB62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06BB66 CRC                   00000000 (0)\n-06BB6A Compressed Size       00000000 (0)\n-06BB6E Uncompressed Size     00000000 (0)\n-06BB72 Filename Length       0049 (73)\n-06BB74 Extra Length          0009 (9)\n-06BB76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6BB76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06BBBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06BBC1   Length              0005 (5)\n-06BBC3   Flags               01 (1) 'Modification'\n-06BBC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06BBC8 PAYLOAD\n-\n-06C09E DATA DESCRIPTOR       08074B50 (134695760)\n-06C0A2 CRC                   E28B1205 (3800764933)\n-06C0A6 Compressed Size       000004D6 (1238)\n-06C0AA Uncompressed Size     000004D6 (1238)\n-\n-06C0AE LOCAL HEADER #131     04034B50 (67324752)\n-06C0B2 Extract Zip Spec      14 (20) '2.0'\n-06C0B3 Extract OS            00 (0) 'MS-DOS'\n-06C0B4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06C0B6 Compression Method    0000 (0) 'Stored'\n-06C0B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06C0BC CRC                   00000000 (0)\n-06C0C0 Compressed Size       00000000 (0)\n-06C0C4 Uncompressed Size     00000000 (0)\n-06C0C8 Filename Length       0044 (68)\n-06C0CA Extra Length          0009 (9)\n-06C0CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6C0CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06C110 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06C112   Length              0005 (5)\n-06C114   Flags               01 (1) 'Modification'\n-06C115   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06C119 PAYLOAD\n-\n-06C5D8 DATA DESCRIPTOR       08074B50 (134695760)\n-06C5DC CRC                   8C9A6BCF (2358930383)\n-06C5E0 Compressed Size       000004BF (1215)\n-06C5E4 Uncompressed Size     000004BF (1215)\n-\n-06C5E8 LOCAL HEADER #132     04034B50 (67324752)\n-06C5EC Extract Zip Spec      14 (20) '2.0'\n-06C5ED Extract OS            00 (0) 'MS-DOS'\n-06C5EE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06C5F0 Compression Method    0000 (0) 'Stored'\n-06C5F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06C5F6 CRC                   00000000 (0)\n-06C5FA Compressed Size       00000000 (0)\n-06C5FE Uncompressed Size     00000000 (0)\n-06C602 Filename Length       0047 (71)\n-06C604 Extra Length          0009 (9)\n-06C606 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6C606: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06C64D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06C64F   Length              0005 (5)\n-06C651   Flags               01 (1) 'Modification'\n-06C652   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06C656 PAYLOAD\n-\n-06D278 DATA DESCRIPTOR       08074B50 (134695760)\n-06D27C CRC                   17228680 (388138624)\n-06D280 Compressed Size       00000C22 (3106)\n-06D284 Uncompressed Size     00000C22 (3106)\n-\n-06D288 LOCAL HEADER #133     04034B50 (67324752)\n-06D28C Extract Zip Spec      14 (20) '2.0'\n-06D28D Extract OS            00 (0) 'MS-DOS'\n-06D28E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06D290 Compression Method    0000 (0) 'Stored'\n-06D292 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D296 CRC                   00000000 (0)\n-06D29A Compressed Size       00000000 (0)\n-06D29E Uncompressed Size     00000000 (0)\n-06D2A2 Filename Length       0043 (67)\n-06D2A4 Extra Length          0009 (9)\n-06D2A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6D2A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06D2E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06D2EB   Length              0005 (5)\n-06D2ED   Flags               01 (1) 'Modification'\n-06D2EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06D2F2 PAYLOAD\n-\n-06D7AA DATA DESCRIPTOR       08074B50 (134695760)\n-06D7AE CRC                   90DCE257 (2430394967)\n-06D7B2 Compressed Size       000004B8 (1208)\n-06D7B6 Uncompressed Size     000004B8 (1208)\n-\n-06D7BA LOCAL HEADER #134     04034B50 (67324752)\n-06D7BE Extract Zip Spec      14 (20) '2.0'\n-06D7BF Extract OS            00 (0) 'MS-DOS'\n-06D7C0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06D7C2 Compression Method    0000 (0) 'Stored'\n-06D7C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D7C8 CRC                   00000000 (0)\n-06D7CC Compressed Size       00000000 (0)\n-06D7D0 Uncompressed Size     00000000 (0)\n-06D7D4 Filename Length       0049 (73)\n-06D7D6 Extra Length          0009 (9)\n-06D7D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6D7D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06D821 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06D823   Length              0005 (5)\n-06D825   Flags               01 (1) 'Modification'\n-06D826   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06D82A PAYLOAD\n-\n-06E09D DATA DESCRIPTOR       08074B50 (134695760)\n-06E0A1 CRC                   092E21B3 (154018227)\n-06E0A5 Compressed Size       00000873 (2163)\n-06E0A9 Uncompressed Size     00000873 (2163)\n-\n-06E0AD LOCAL HEADER #135     04034B50 (67324752)\n-06E0B1 Extract Zip Spec      14 (20) '2.0'\n-06E0B2 Extract OS            00 (0) 'MS-DOS'\n-06E0B3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06E0B5 Compression Method    0000 (0) 'Stored'\n-06E0B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06E0BB CRC                   00000000 (0)\n-06E0BF Compressed Size       00000000 (0)\n-06E0C3 Uncompressed Size     00000000 (0)\n-06E0C7 Filename Length       004B (75)\n-06E0C9 Extra Length          0009 (9)\n-06E0CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6E0CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06E116 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06E118   Length              0005 (5)\n-06E11A   Flags               01 (1) 'Modification'\n-06E11B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06E11F PAYLOAD\n-\n-06E610 DATA DESCRIPTOR       08074B50 (134695760)\n-06E614 CRC                   D50997CD (3574175693)\n-06E618 Compressed Size       000004F1 (1265)\n-06E61C Uncompressed Size     000004F1 (1265)\n-\n-06E620 LOCAL HEADER #136     04034B50 (67324752)\n-06E624 Extract Zip Spec      14 (20) '2.0'\n-06E625 Extract OS            00 (0) 'MS-DOS'\n-06E626 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06E628 Compression Method    0000 (0) 'Stored'\n-06E62A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06E62E CRC                   00000000 (0)\n-06E632 Compressed Size       00000000 (0)\n-06E636 Uncompressed Size     00000000 (0)\n-06E63A Filename Length       0044 (68)\n-06E63C Extra Length          0009 (9)\n-06E63E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6E63E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06E682 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06E684   Length              0005 (5)\n-06E686   Flags               01 (1) 'Modification'\n-06E687   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06E68B PAYLOAD\n-\n-06EB62 DATA DESCRIPTOR       08074B50 (134695760)\n-06EB66 CRC                   1389D7CB (327800779)\n-06EB6A Compressed Size       000004D7 (1239)\n-06EB6E Uncompressed Size     000004D7 (1239)\n-\n-06EB72 LOCAL HEADER #137     04034B50 (67324752)\n-06EB76 Extract Zip Spec      14 (20) '2.0'\n-06EB77 Extract OS            00 (0) 'MS-DOS'\n-06EB78 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06EB7A Compression Method    0000 (0) 'Stored'\n-06EB7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06EB80 CRC                   00000000 (0)\n-06EB84 Compressed Size       00000000 (0)\n-06EB88 Uncompressed Size     00000000 (0)\n-06EB8C Filename Length       0042 (66)\n-06EB8E Extra Length          0009 (9)\n-06EB90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6EB90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06EBD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06EBD4   Length              0005 (5)\n-06EBD6   Flags               01 (1) 'Modification'\n-06EBD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06EBDB PAYLOAD\n-\n-06F08A DATA DESCRIPTOR       08074B50 (134695760)\n-06F08E CRC                   0204ADF7 (33861111)\n-06F092 Compressed Size       000004AF (1199)\n-06F096 Uncompressed Size     000004AF (1199)\n-\n-06F09A LOCAL HEADER #138     04034B50 (67324752)\n-06F09E Extract Zip Spec      14 (20) '2.0'\n-06F09F Extract OS            00 (0) 'MS-DOS'\n-06F0A0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06F0A2 Compression Method    0000 (0) 'Stored'\n-06F0A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06F0A8 CRC                   00000000 (0)\n-06F0AC Compressed Size       00000000 (0)\n-06F0B0 Uncompressed Size     00000000 (0)\n-06F0B4 Filename Length       0048 (72)\n-06F0B6 Extra Length          0009 (9)\n-06F0B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6F0B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06F100 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06F102   Length              0005 (5)\n-06F104   Flags               01 (1) 'Modification'\n-06F105   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06F109 PAYLOAD\n-\n-06F5D2 DATA DESCRIPTOR       08074B50 (134695760)\n-06F5D6 CRC                   DE2764C3 (3727123651)\n-06F5DA Compressed Size       000004C9 (1225)\n-06F5DE Uncompressed Size     000004C9 (1225)\n-\n-06F5E2 LOCAL HEADER #139     04034B50 (67324752)\n-06F5E6 Extract Zip Spec      14 (20) '2.0'\n-06F5E7 Extract OS            00 (0) 'MS-DOS'\n-06F5E8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06F5EA Compression Method    0000 (0) 'Stored'\n-06F5EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06F5F0 CRC                   00000000 (0)\n-06F5F4 Compressed Size       00000000 (0)\n-06F5F8 Uncompressed Size     00000000 (0)\n-06F5FC Filename Length       004C (76)\n-06F5FE Extra Length          0009 (9)\n-06F600 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6F600: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06F64C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06F64E   Length              0005 (5)\n-06F650   Flags               01 (1) 'Modification'\n-06F651   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06F655 PAYLOAD\n-\n-06FB60 DATA DESCRIPTOR       08074B50 (134695760)\n-06FB64 CRC                   A00FADB6 (2685382070)\n-06FB68 Compressed Size       0000050B (1291)\n-06FB6C Uncompressed Size     0000050B (1291)\n-\n-06FB70 LOCAL HEADER #140     04034B50 (67324752)\n-06FB74 Extract Zip Spec      14 (20) '2.0'\n-06FB75 Extract OS            00 (0) 'MS-DOS'\n-06FB76 General Purpose Flag  0000 (0)\n-06FB78 Compression Method    0000 (0) 'Stored'\n-06FB7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06FB7E CRC                   00000000 (0)\n-06FB82 Compressed Size       00000000 (0)\n-06FB86 Uncompressed Size     00000000 (0)\n-06FB8A Filename Length       0022 (34)\n-06FB8C Extra Length          0009 (9)\n-06FB8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6FB8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06FBB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06FBB2   Length              0005 (5)\n-06FBB4   Flags               01 (1) 'Modification'\n-06FBB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06FBB9 LOCAL HEADER #141     04034B50 (67324752)\n-06FBBD Extract Zip Spec      14 (20) '2.0'\n-06FBBE Extract OS            00 (0) 'MS-DOS'\n-06FBBF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06FBC1 Compression Method    0000 (0) 'Stored'\n-06FBC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06FBC7 CRC                   00000000 (0)\n-06FBCB Compressed Size       00000000 (0)\n-06FBCF Uncompressed Size     00000000 (0)\n-06FBD3 Filename Length       002F (47)\n-06FBD5 Extra Length          0009 (9)\n-06FBD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6FBD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06FC06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06FC08   Length              0005 (5)\n-06FC0A   Flags               01 (1) 'Modification'\n-06FC0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06FC0F PAYLOAD\n-\n-070989 DATA DESCRIPTOR       08074B50 (134695760)\n-07098D CRC                   9A2D2058 (2586648664)\n-070991 Compressed Size       00000D7A (3450)\n-070995 Uncompressed Size     00000D7A (3450)\n-\n-070999 LOCAL HEADER #142     04034B50 (67324752)\n-07099D Extract Zip Spec      14 (20) '2.0'\n-07099E Extract OS            00 (0) 'MS-DOS'\n-07099F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0709A1 Compression Method    0000 (0) 'Stored'\n-0709A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0709A7 CRC                   00000000 (0)\n-0709AB Compressed Size       00000000 (0)\n-0709AF Uncompressed Size     00000000 (0)\n-0709B3 Filename Length       002F (47)\n-0709B5 Extra Length          0009 (9)\n-0709B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x709B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0709E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0709E8   Length              0005 (5)\n-0709EA   Flags               01 (1) 'Modification'\n-0709EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0709EF PAYLOAD\n-\n-071436 DATA DESCRIPTOR       08074B50 (134695760)\n-07143A CRC                   5D8BAE4F (1569435215)\n-07143E Compressed Size       00000A47 (2631)\n-071442 Uncompressed Size     00000A47 (2631)\n-\n-071446 LOCAL HEADER #143     04034B50 (67324752)\n-07144A Extract Zip Spec      14 (20) '2.0'\n-07144B Extract OS            00 (0) 'MS-DOS'\n-07144C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-07144E Compression Method    0000 (0) 'Stored'\n-071450 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-071454 CRC                   00000000 (0)\n-071458 Compressed Size       00000000 (0)\n-07145C Uncompressed Size     00000000 (0)\n-071460 Filename Length       0041 (65)\n-071462 Extra Length          0009 (9)\n-071464 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x71464: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0714A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0714A7   Length              0005 (5)\n-0714A9   Flags               01 (1) 'Modification'\n-0714AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0714AE PAYLOAD\n-\n-0750B5 DATA DESCRIPTOR       08074B50 (134695760)\n-0750B9 CRC                   B148CBF0 (2974338032)\n-0750BD Compressed Size       00003C07 (15367)\n-0750C1 Uncompressed Size     00003C07 (15367)\n-\n-0750C5 LOCAL HEADER #144     04034B50 (67324752)\n-0750C9 Extract Zip Spec      14 (20) '2.0'\n-0750CA Extract OS            00 (0) 'MS-DOS'\n-0750CB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0750CD Compression Method    0000 (0) 'Stored'\n-0750CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0750D3 CRC                   00000000 (0)\n-0750D7 Compressed Size       00000000 (0)\n-0750DB Uncompressed Size     00000000 (0)\n-0750DF Filename Length       0034 (52)\n-0750E1 Extra Length          0009 (9)\n-0750E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x750E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-075117 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-075119   Length              0005 (5)\n-07511B   Flags               01 (1) 'Modification'\n-07511C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-075120 PAYLOAD\n-\n-0755D9 DATA DESCRIPTOR       08074B50 (134695760)\n-0755DD CRC                   D1BB774A (3518723914)\n-0755E1 Compressed Size       000004B9 (1209)\n-0755E5 Uncompressed Size     000004B9 (1209)\n-\n-0755E9 LOCAL HEADER #145     04034B50 (67324752)\n-0755ED Extract Zip Spec      14 (20) '2.0'\n-0755EE Extract OS            00 (0) 'MS-DOS'\n-0755EF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0755F1 Compression Method    0000 (0) 'Stored'\n-0755F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0755F7 CRC                   00000000 (0)\n-0755FB Compressed Size       00000000 (0)\n-0755FF Uncompressed Size     00000000 (0)\n-075603 Filename Length       0043 (67)\n-075605 Extra Length          0009 (9)\n-075607 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x75607: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07564A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07564C   Length              0005 (5)\n-07564E   Flags               01 (1) 'Modification'\n-07564F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-075653 PAYLOAD\n-\n-075AE0 DATA DESCRIPTOR       08074B50 (134695760)\n-075AE4 CRC                   F2DE48ED (4074653933)\n-075AE8 Compressed Size       0000048D (1165)\n-075AEC Uncompressed Size     0000048D (1165)\n-\n-075AF0 LOCAL HEADER #146     04034B50 (67324752)\n-075AF4 Extract Zip Spec      14 (20) '2.0'\n-075AF5 Extract OS            00 (0) 'MS-DOS'\n-075AF6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-075AF8 Compression Method    0000 (0) 'Stored'\n-075AFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-075AFE CRC                   00000000 (0)\n-075B02 Compressed Size       00000000 (0)\n-075B06 Uncompressed Size     00000000 (0)\n-075B0A Filename Length       003B (59)\n-075B0C Extra Length          0009 (9)\n-075B0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x75B0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-075B49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-075B4B   Length              0005 (5)\n-075B4D   Flags               01 (1) 'Modification'\n-075B4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-075B52 PAYLOAD\n-\n-076016 DATA DESCRIPTOR       08074B50 (134695760)\n-07601A CRC                   0662480F (107104271)\n-07601E Compressed Size       000004C4 (1220)\n-076022 Uncompressed Size     000004C4 (1220)\n-\n-076026 LOCAL HEADER #147     04034B50 (67324752)\n-07602A Extract Zip Spec      14 (20) '2.0'\n-07602B Extract OS            00 (0) 'MS-DOS'\n-07602C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-07602E Compression Method    0000 (0) 'Stored'\n-076030 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-076034 CRC                   00000000 (0)\n-076038 Compressed Size       00000000 (0)\n-07603C Uncompressed Size     00000000 (0)\n-076040 Filename Length       0037 (55)\n-076042 Extra Length          0009 (9)\n-076044 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x76044: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07607B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07607D   Length              0005 (5)\n-07607F   Flags               01 (1) 'Modification'\n-076080   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-076084 PAYLOAD\n-\n-0764FE DATA DESCRIPTOR       08074B50 (134695760)\n-076502 CRC                   4C849D6C (1283759468)\n-076506 Compressed Size       0000047A (1146)\n-07650A Uncompressed Size     0000047A (1146)\n-\n-07650E LOCAL HEADER #148     04034B50 (67324752)\n-076512 Extract Zip Spec      14 (20) '2.0'\n-076513 Extract OS            00 (0) 'MS-DOS'\n-076514 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-076516 Compression Method    0000 (0) 'Stored'\n-076518 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07651C CRC                   00000000 (0)\n-076520 Compressed Size       00000000 (0)\n-076524 Uncompressed Size     00000000 (0)\n-076528 Filename Length       0036 (54)\n-07652A Extra Length          0009 (9)\n-07652C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7652C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-076562 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-076564   Length              0005 (5)\n-076566   Flags               01 (1) 'Modification'\n-076567   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-07656B PAYLOAD\n-\n-08025A DATA DESCRIPTOR       08074B50 (134695760)\n-08025E CRC                   A96FE6E5 (2842683109)\n-080262 Compressed Size       00009CEF (40175)\n-080266 Uncompressed Size     00009CEF (40175)\n-\n-08026A LOCAL HEADER #149     04034B50 (67324752)\n-08026E Extract Zip Spec      14 (20) '2.0'\n-08026F Extract OS            00 (0) 'MS-DOS'\n-080270 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-080272 Compression Method    0000 (0) 'Stored'\n-080274 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-080278 CRC                   00000000 (0)\n-08027C Compressed Size       00000000 (0)\n-080280 Uncompressed Size     00000000 (0)\n-080284 Filename Length       0036 (54)\n-080286 Extra Length          0009 (9)\n-080288 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x80288: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0802BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0802C0   Length              0005 (5)\n-0802C2   Flags               01 (1) 'Modification'\n-0802C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0802C7 PAYLOAD\n-\n-080855 DATA DESCRIPTOR       08074B50 (134695760)\n-080859 CRC                   CA31D6AC (3392263852)\n-08085D Compressed Size       0000058E (1422)\n-080861 Uncompressed Size     0000058E (1422)\n-\n-080865 LOCAL HEADER #150     04034B50 (67324752)\n-080869 Extract Zip Spec      14 (20) '2.0'\n-08086A Extract OS            00 (0) 'MS-DOS'\n-08086B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08086D Compression Method    0000 (0) 'Stored'\n-08086F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-080873 CRC                   00000000 (0)\n-080877 Compressed Size       00000000 (0)\n-08087B Uncompressed Size     00000000 (0)\n-08087F Filename Length       002A (42)\n-080881 Extra Length          0009 (9)\n-080883 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x80883: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0808AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0808AF   Length              0005 (5)\n-0808B1   Flags               01 (1) 'Modification'\n-0808B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0808B6 PAYLOAD\n-\n-0811E8 DATA DESCRIPTOR       08074B50 (134695760)\n-0811EC CRC                   48D76DDD (1222077917)\n-0811F0 Compressed Size       00000932 (2354)\n-0811F4 Uncompressed Size     00000932 (2354)\n-\n-0811F8 LOCAL HEADER #151     04034B50 (67324752)\n-0811FC Extract Zip Spec      14 (20) '2.0'\n-0811FD Extract OS            00 (0) 'MS-DOS'\n-0811FE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-081200 Compression Method    0000 (0) 'Stored'\n-081202 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-081206 CRC                   00000000 (0)\n-08120A Compressed Size       00000000 (0)\n-08120E Uncompressed Size     00000000 (0)\n-081212 Filename Length       003E (62)\n-081214 Extra Length          0009 (9)\n-081216 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x81216: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-081254 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-081256   Length              0005 (5)\n-081258   Flags               01 (1) 'Modification'\n-081259   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08125D PAYLOAD\n-\n-081726 DATA DESCRIPTOR       08074B50 (134695760)\n-08172A CRC                   C525F495 (3307598997)\n-08172E Compressed Size       000004C9 (1225)\n-081732 Uncompressed Size     000004C9 (1225)\n-\n-081736 LOCAL HEADER #152     04034B50 (67324752)\n-08173A Extract Zip Spec      14 (20) '2.0'\n-08173B Extract OS            00 (0) 'MS-DOS'\n-08173C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08173E Compression Method    0000 (0) 'Stored'\n-081740 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-081744 CRC                   00000000 (0)\n-081748 Compressed Size       00000000 (0)\n-08174C Uncompressed Size     00000000 (0)\n-081750 Filename Length       002E (46)\n-081752 Extra Length          0009 (9)\n-081754 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x81754: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-081782 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-081784   Length              0005 (5)\n-081786   Flags               01 (1) 'Modification'\n-081787   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08178B PAYLOAD\n-\n-081C9B DATA DESCRIPTOR       08074B50 (134695760)\n-081C9F CRC                   25A296EC (631412460)\n-081CA3 Compressed Size       00000510 (1296)\n-081CA7 Uncompressed Size     00000510 (1296)\n-\n-081CAB LOCAL HEADER #153     04034B50 (67324752)\n-081CAF Extract Zip Spec      14 (20) '2.0'\n-081CB0 Extract OS            00 (0) 'MS-DOS'\n-081CB1 General Purpose Flag  0000 (0)\n-081CB3 Compression Method    0000 (0) 'Stored'\n-081CB5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-081CB9 CRC                   00000000 (0)\n-081CBD Compressed Size       00000000 (0)\n-081CC1 Uncompressed Size     00000000 (0)\n-081CC5 Filename Length       002A (42)\n-081CC7 Extra Length          0009 (9)\n-081CC9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x81CC9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-081CF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-081CF5   Length              0005 (5)\n-081CF7   Flags               01 (1) 'Modification'\n-081CF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-081CFC LOCAL HEADER #154     04034B50 (67324752)\n-081D00 Extract Zip Spec      14 (20) '2.0'\n-081D01 Extract OS            00 (0) 'MS-DOS'\n-081D02 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-081D04 Compression Method    0000 (0) 'Stored'\n-081D06 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-081D0A CRC                   00000000 (0)\n-081D0E Compressed Size       00000000 (0)\n-081D12 Uncompressed Size     00000000 (0)\n-081D16 Filename Length       0047 (71)\n-081D18 Extra Length          0009 (9)\n-081D1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x81D1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-081D61 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-081D63   Length              0005 (5)\n-081D65   Flags               01 (1) 'Modification'\n-081D66   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-081D6A PAYLOAD\n-\n-08256A DATA DESCRIPTOR       08074B50 (134695760)\n-08256E CRC                   EA8B59C6 (3935001030)\n-082572 Compressed Size       00000800 (2048)\n-082576 Uncompressed Size     00000800 (2048)\n-\n-08257A LOCAL HEADER #155     04034B50 (67324752)\n-08257E Extract Zip Spec      14 (20) '2.0'\n-08257F Extract OS            00 (0) 'MS-DOS'\n-082580 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-082582 Compression Method    0000 (0) 'Stored'\n-082584 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-082588 CRC                   00000000 (0)\n-08258C Compressed Size       00000000 (0)\n-082590 Uncompressed Size     00000000 (0)\n-082594 Filename Length       0042 (66)\n-082596 Extra Length          0009 (9)\n-082598 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x82598: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0825DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0825DC   Length              0005 (5)\n-0825DE   Flags               01 (1) 'Modification'\n-0825DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0825E3 PAYLOAD\n-\n-082BF2 DATA DESCRIPTOR       08074B50 (134695760)\n-082BF6 CRC                   3280412A (847266090)\n-082BFA Compressed Size       0000060F (1551)\n-082BFE Uncompressed Size     0000060F (1551)\n-\n-082C02 LOCAL HEADER #156     04034B50 (67324752)\n-082C06 Extract Zip Spec      14 (20) '2.0'\n-082C07 Extract OS            00 (0) 'MS-DOS'\n-082C08 General Purpose Flag  0000 (0)\n-082C0A Compression Method    0000 (0) 'Stored'\n-082C0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-082C10 CRC                   00000000 (0)\n-082C14 Compressed Size       00000000 (0)\n-082C18 Uncompressed Size     00000000 (0)\n-082C1C Filename Length       002A (42)\n-082C1E Extra Length          0009 (9)\n-082C20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x82C20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-082C4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-082C4C   Length              0005 (5)\n-082C4E   Flags               01 (1) 'Modification'\n-082C4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-082C53 LOCAL HEADER #157     04034B50 (67324752)\n-082C57 Extract Zip Spec      14 (20) '2.0'\n-082C58 Extract OS            00 (0) 'MS-DOS'\n-082C59 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-082C5B Compression Method    0000 (0) 'Stored'\n-082C5D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-082C61 CRC                   00000000 (0)\n-082C65 Compressed Size       00000000 (0)\n-082C69 Uncompressed Size     00000000 (0)\n-082C6D Filename Length       0041 (65)\n-082C6F Extra Length          0009 (9)\n-082C71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x82C71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-082CB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-082CB4   Length              0005 (5)\n-082CB6   Flags               01 (1) 'Modification'\n-082CB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-082CBB PAYLOAD\n-\n-083E8F DATA DESCRIPTOR       08074B50 (134695760)\n-083E93 CRC                   B81BB8E1 (3088824545)\n-083E97 Compressed Size       000011D4 (4564)\n-083E9B Uncompressed Size     000011D4 (4564)\n-\n-083E9F LOCAL HEADER #158     04034B50 (67324752)\n-083EA3 Extract Zip Spec      14 (20) '2.0'\n-083EA4 Extract OS            00 (0) 'MS-DOS'\n-083EA5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-083EA7 Compression Method    0000 (0) 'Stored'\n-083EA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-083EAD CRC                   00000000 (0)\n-083EB1 Compressed Size       00000000 (0)\n-083EB5 Uncompressed Size     00000000 (0)\n-083EB9 Filename Length       0040 (64)\n-083EBB Extra Length          0009 (9)\n-083EBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x83EBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-083EFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-083EFF   Length              0005 (5)\n-083F01   Flags               01 (1) 'Modification'\n-083F02   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-083F06 PAYLOAD\n-\n-084B00 DATA DESCRIPTOR       08074B50 (134695760)\n-084B04 CRC                   C0FD96E7 (3237844711)\n-084B08 Compressed Size       00000BFA (3066)\n-084B0C Uncompressed Size     00000BFA (3066)\n-\n-084B10 LOCAL HEADER #159     04034B50 (67324752)\n-084B14 Extract Zip Spec      14 (20) '2.0'\n-084B15 Extract OS            00 (0) 'MS-DOS'\n-084B16 General Purpose Flag  0000 (0)\n-084B18 Compression Method    0000 (0) 'Stored'\n-084B1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-084B1E CRC                   00000000 (0)\n-084B22 Compressed Size       00000000 (0)\n-084B26 Uncompressed Size     00000000 (0)\n-084B2A Filename Length       0021 (33)\n-084B2C Extra Length          0009 (9)\n-084B2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x84B2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-084B4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-084B51   Length              0005 (5)\n-084B53   Flags               01 (1) 'Modification'\n-084B54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-084B58 LOCAL HEADER #160     04034B50 (67324752)\n-084B5C Extract Zip Spec      14 (20) '2.0'\n-084B5D Extract OS            00 (0) 'MS-DOS'\n-084B5E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-084B60 Compression Method    0000 (0) 'Stored'\n-084B62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-084B66 CRC                   00000000 (0)\n-084B6A Compressed Size       00000000 (0)\n-084B6E Uncompressed Size     00000000 (0)\n-084B72 Filename Length       0030 (48)\n-084B74 Extra Length          0009 (9)\n-084B76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x84B76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-084BA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-084BA8   Length              0005 (5)\n-084BAA   Flags               01 (1) 'Modification'\n-084BAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-084BAF PAYLOAD\n-\n-0854D4 DATA DESCRIPTOR       08074B50 (134695760)\n-0854D8 CRC                   3980931B (964727579)\n-0854DC Compressed Size       00000925 (2341)\n-0854E0 Uncompressed Size     00000925 (2341)\n-\n-0854E4 LOCAL HEADER #161     04034B50 (67324752)\n-0854E8 Extract Zip Spec      14 (20) '2.0'\n-0854E9 Extract OS            00 (0) 'MS-DOS'\n-0854EA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0854EC Compression Method    0000 (0) 'Stored'\n-0854EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0854F2 CRC                   00000000 (0)\n-0854F6 Compressed Size       00000000 (0)\n-0854FA Uncompressed Size     00000000 (0)\n-0854FE Filename Length       002D (45)\n-085500 Extra Length          0009 (9)\n-085502 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x85502: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08552F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-085531   Length              0005 (5)\n-085533   Flags               01 (1) 'Modification'\n-085534   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-085538 PAYLOAD\n-\n-085FB3 DATA DESCRIPTOR       08074B50 (134695760)\n-085FB7 CRC                   4F8202FE (1333920510)\n-085FBB Compressed Size       00000A7B (2683)\n-085FBF Uncompressed Size     00000A7B (2683)\n-\n-085FC3 LOCAL HEADER #162     04034B50 (67324752)\n-085FC7 Extract Zip Spec      14 (20) '2.0'\n-085FC8 Extract OS            00 (0) 'MS-DOS'\n-085FC9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-085FCB Compression Method    0000 (0) 'Stored'\n-085FCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-085FD1 CRC                   00000000 (0)\n-085FD5 Compressed Size       00000000 (0)\n-085FD9 Uncompressed Size     00000000 (0)\n-085FDD Filename Length       0035 (53)\n-085FDF Extra Length          0009 (9)\n-085FE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x85FE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-086016 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-086018   Length              0005 (5)\n-08601A   Flags               01 (1) 'Modification'\n-08601B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08601F PAYLOAD\n-\n-086657 DATA DESCRIPTOR       08074B50 (134695760)\n-08665B CRC                   3F1DB4B7 (1058911415)\n-08665F Compressed Size       00000638 (1592)\n-086663 Uncompressed Size     00000638 (1592)\n-\n-086667 LOCAL HEADER #163     04034B50 (67324752)\n-08666B Extract Zip Spec      14 (20) '2.0'\n-08666C Extract OS            00 (0) 'MS-DOS'\n-08666D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08666F Compression Method    0000 (0) 'Stored'\n-086671 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-086675 CRC                   00000000 (0)\n-086679 Compressed Size       00000000 (0)\n-08667D Uncompressed Size     00000000 (0)\n-086681 Filename Length       0037 (55)\n-086683 Extra Length          0009 (9)\n-086685 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x86685: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0866BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0866BE   Length              0005 (5)\n-0866C0   Flags               01 (1) 'Modification'\n-0866C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0866C5 PAYLOAD\n-\n-086EB5 DATA DESCRIPTOR       08074B50 (134695760)\n-086EB9 CRC                   86537D4A (2253618506)\n-086EBD Compressed Size       000007F0 (2032)\n-086EC1 Uncompressed Size     000007F0 (2032)\n-\n-086EC5 LOCAL HEADER #164     04034B50 (67324752)\n-086EC9 Extract Zip Spec      14 (20) '2.0'\n-086ECA Extract OS            00 (0) 'MS-DOS'\n-086ECB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-086ECD Compression Method    0000 (0) 'Stored'\n-086ECF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-086ED3 CRC                   00000000 (0)\n-086ED7 Compressed Size       00000000 (0)\n-086EDB Uncompressed Size     00000000 (0)\n-086EDF Filename Length       0037 (55)\n-086EE1 Extra Length          0009 (9)\n-086EE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x86EE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-086F1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-086F1C   Length              0005 (5)\n-086F1E   Flags               01 (1) 'Modification'\n-086F1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-086F23 PAYLOAD\n-\n-0877A8 DATA DESCRIPTOR       08074B50 (134695760)\n-0877AC CRC                   76835014 (1988317204)\n-0877B0 Compressed Size       00000885 (2181)\n-0877B4 Uncompressed Size     00000885 (2181)\n-\n-0877B8 LOCAL HEADER #165     04034B50 (67324752)\n-0877BC Extract Zip Spec      14 (20) '2.0'\n-0877BD Extract OS            00 (0) 'MS-DOS'\n-0877BE General Purpose Flag  0000 (0)\n-0877C0 Compression Method    0000 (0) 'Stored'\n-0877C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0877C6 CRC                   00000000 (0)\n-0877CA Compressed Size       00000000 (0)\n-0877CE Uncompressed Size     00000000 (0)\n-0877D2 Filename Length       001E (30)\n-0877D4 Extra Length          0009 (9)\n-0877D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x877D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0877F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0877F6   Length              0005 (5)\n-0877F8   Flags               01 (1) 'Modification'\n-0877F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0877FD LOCAL HEADER #166     04034B50 (67324752)\n-087801 Extract Zip Spec      14 (20) '2.0'\n-087802 Extract OS            00 (0) 'MS-DOS'\n-087803 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-087805 Compression Method    0000 (0) 'Stored'\n-087807 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08780B CRC                   00000000 (0)\n-08780F Compressed Size       00000000 (0)\n-087813 Uncompressed Size     00000000 (0)\n-087817 Filename Length       002F (47)\n-087819 Extra Length          0009 (9)\n-08781B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8781B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08784A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08784C   Length              0005 (5)\n-08784E   Flags               01 (1) 'Modification'\n-08784F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-087853 PAYLOAD\n-\n-087E6C DATA DESCRIPTOR       08074B50 (134695760)\n-087E70 CRC                   7A06D81E (2047268894)\n-087E74 Compressed Size       00000619 (1561)\n-087E78 Uncompressed Size     00000619 (1561)\n-\n-087E7C LOCAL HEADER #167     04034B50 (67324752)\n-087E80 Extract Zip Spec      14 (20) '2.0'\n-087E81 Extract OS            00 (0) 'MS-DOS'\n-087E82 General Purpose Flag  0000 (0)\n-087E84 Compression Method    0000 (0) 'Stored'\n-087E86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-087E8A CRC                   00000000 (0)\n-087E8E Compressed Size       00000000 (0)\n-087E92 Uncompressed Size     00000000 (0)\n-087E96 Filename Length       0026 (38)\n-087E98 Extra Length          0009 (9)\n-087E9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x87E9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-087EC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-087EC2   Length              0005 (5)\n-087EC4   Flags               01 (1) 'Modification'\n-087EC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-087EC9 LOCAL HEADER #168     04034B50 (67324752)\n-087ECD Extract Zip Spec      14 (20) '2.0'\n-087ECE Extract OS            00 (0) 'MS-DOS'\n-087ECF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-087ED1 Compression Method    0000 (0) 'Stored'\n-087ED3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-087ED7 CRC                   00000000 (0)\n-087EDB Compressed Size       00000000 (0)\n-087EDF Uncompressed Size     00000000 (0)\n-087EE3 Filename Length       0036 (54)\n-087EE5 Extra Length          0009 (9)\n-087EE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x87EE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-087F1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-087F1F   Length              0005 (5)\n-087F21   Flags               01 (1) 'Modification'\n-087F22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-087F26 PAYLOAD\n-\n-08842A DATA DESCRIPTOR       08074B50 (134695760)\n-08842E CRC                   596F5AFB (1500470011)\n-088432 Compressed Size       00000504 (1284)\n-088436 Uncompressed Size     00000504 (1284)\n-\n-08843A LOCAL HEADER #169     04034B50 (67324752)\n-08843E Extract Zip Spec      14 (20) '2.0'\n-08843F Extract OS            00 (0) 'MS-DOS'\n-088440 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-088442 Compression Method    0000 (0) 'Stored'\n-088444 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-088448 CRC                   00000000 (0)\n-08844C Compressed Size       00000000 (0)\n-088450 Uncompressed Size     00000000 (0)\n-088454 Filename Length       003D (61)\n-088456 Extra Length          0009 (9)\n-088458 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x88458: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-088495 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-088497   Length              0005 (5)\n-088499   Flags               01 (1) 'Modification'\n-08849A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08849E PAYLOAD\n-\n-088FF3 DATA DESCRIPTOR       08074B50 (134695760)\n-088FF7 CRC                   DAE5D322 (3672494882)\n-088FFB Compressed Size       00000B55 (2901)\n-088FFF Uncompressed Size     00000B55 (2901)\n-\n-089003 LOCAL HEADER #170     04034B50 (67324752)\n-089007 Extract Zip Spec      14 (20) '2.0'\n-089008 Extract OS            00 (0) 'MS-DOS'\n-089009 General Purpose Flag  0000 (0)\n-08900B Compression Method    0000 (0) 'Stored'\n-08900D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-089011 CRC                   00000000 (0)\n-089015 Compressed Size       00000000 (0)\n-089019 Uncompressed Size     00000000 (0)\n-08901D Filename Length       001B (27)\n-08901F Extra Length          0009 (9)\n-089021 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x89021: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08903C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08903E   Length              0005 (5)\n-089040   Flags               01 (1) 'Modification'\n-089041   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-089045 LOCAL HEADER #171     04034B50 (67324752)\n-089049 Extract Zip Spec      14 (20) '2.0'\n-08904A Extract OS            00 (0) 'MS-DOS'\n-08904B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08904D Compression Method    0000 (0) 'Stored'\n-08904F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-089053 CRC                   00000000 (0)\n-089057 Compressed Size       00000000 (0)\n-08905B Uncompressed Size     00000000 (0)\n-08905F Filename Length       0025 (37)\n-089061 Extra Length          0009 (9)\n-089063 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x89063: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-089088 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08908A   Length              0005 (5)\n-08908C   Flags               01 (1) 'Modification'\n-08908D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-089091 PAYLOAD\n-\n-08F5A9 DATA DESCRIPTOR       08074B50 (134695760)\n-08F5AD CRC                   0BDE6714 (199124756)\n-08F5B1 Compressed Size       00006518 (25880)\n-08F5B5 Uncompressed Size     00006518 (25880)\n-\n-08F5B9 LOCAL HEADER #172     04034B50 (67324752)\n-08F5BD Extract Zip Spec      14 (20) '2.0'\n-08F5BE Extract OS            00 (0) 'MS-DOS'\n-08F5BF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08F5C1 Compression Method    0000 (0) 'Stored'\n-08F5C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08F5C7 CRC                   00000000 (0)\n-08F5CB Compressed Size       00000000 (0)\n-08F5CF Uncompressed Size     00000000 (0)\n-08F5D3 Filename Length       002B (43)\n-08F5D5 Extra Length          0009 (9)\n-08F5D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8F5D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08F602 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08F604   Length              0005 (5)\n-08F606   Flags               01 (1) 'Modification'\n-08F607   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08F60B PAYLOAD\n-\n-09110D DATA DESCRIPTOR       08074B50 (134695760)\n-091111 CRC                   16F10E62 (384896610)\n-091115 Compressed Size       00001B02 (6914)\n-091119 Uncompressed Size     00001B02 (6914)\n-\n-09111D LOCAL HEADER #173     04034B50 (67324752)\n-091121 Extract Zip Spec      14 (20) '2.0'\n-091122 Extract OS            00 (0) 'MS-DOS'\n-091123 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-091125 Compression Method    0000 (0) 'Stored'\n-091127 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09112B CRC                   00000000 (0)\n-09112F Compressed Size       00000000 (0)\n-091133 Uncompressed Size     00000000 (0)\n-091137 Filename Length       003A (58)\n-091139 Extra Length          0009 (9)\n-09113B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9113B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-091175 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-091177   Length              0005 (5)\n-091179   Flags               01 (1) 'Modification'\n-09117A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09117E PAYLOAD\n-\n-091D69 DATA DESCRIPTOR       08074B50 (134695760)\n-091D6D CRC                   A6F50F6E (2801078126)\n-091D71 Compressed Size       00000BEB (3051)\n-091D75 Uncompressed Size     00000BEB (3051)\n-\n-091D79 LOCAL HEADER #174     04034B50 (67324752)\n-091D7D Extract Zip Spec      14 (20) '2.0'\n-091D7E Extract OS            00 (0) 'MS-DOS'\n-091D7F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-091D81 Compression Method    0000 (0) 'Stored'\n-091D83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-091D87 CRC                   00000000 (0)\n-091D8B Compressed Size       00000000 (0)\n-091D8F Uncompressed Size     00000000 (0)\n-091D93 Filename Length       003B (59)\n-091D95 Extra Length          0009 (9)\n-091D97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x91D97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-091DD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-091DD4   Length              0005 (5)\n-091DD6   Flags               01 (1) 'Modification'\n-091DD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-091DDB PAYLOAD\n-\n-092969 DATA DESCRIPTOR       08074B50 (134695760)\n-09296D CRC                   5110A2B9 (1360044729)\n-092971 Compressed Size       00000B8E (2958)\n-092975 Uncompressed Size     00000B8E (2958)\n-\n-092979 LOCAL HEADER #175     04034B50 (67324752)\n-09297D Extract Zip Spec      14 (20) '2.0'\n-09297E Extract OS            00 (0) 'MS-DOS'\n-09297F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-092981 Compression Method    0000 (0) 'Stored'\n-092983 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-092987 CRC                   00000000 (0)\n-09298B Compressed Size       00000000 (0)\n-09298F Uncompressed Size     00000000 (0)\n-092993 Filename Length       0032 (50)\n-092995 Extra Length          0009 (9)\n-092997 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x92997: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0929C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0929CB   Length              0005 (5)\n-0929CD   Flags               01 (1) 'Modification'\n-0929CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0929D2 PAYLOAD\n-\n-093637 DATA DESCRIPTOR       08074B50 (134695760)\n-09363B CRC                   490F11E6 (1225724390)\n-09363F Compressed Size       00000C65 (3173)\n-093643 Uncompressed Size     00000C65 (3173)\n-\n-093647 LOCAL HEADER #176     04034B50 (67324752)\n-09364B Extract Zip Spec      14 (20) '2.0'\n-09364C Extract OS            00 (0) 'MS-DOS'\n-09364D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-09364F Compression Method    0000 (0) 'Stored'\n-093651 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-093655 CRC                   00000000 (0)\n-093659 Compressed Size       00000000 (0)\n-09365D Uncompressed Size     00000000 (0)\n-093661 Filename Length       0032 (50)\n-093663 Extra Length          0009 (9)\n-093665 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x93665: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-093697 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-093699   Length              0005 (5)\n-09369B   Flags               01 (1) 'Modification'\n-09369C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0936A0 PAYLOAD\n-\n-094175 DATA DESCRIPTOR       08074B50 (134695760)\n-094179 CRC                   2D3D8039 (759005241)\n-09417D Compressed Size       00000AD5 (2773)\n-094181 Uncompressed Size     00000AD5 (2773)\n-\n-094185 LOCAL HEADER #177     04034B50 (67324752)\n-094189 Extract Zip Spec      14 (20) '2.0'\n-09418A Extract OS            00 (0) 'MS-DOS'\n-09418B General Purpose Flag  0000 (0)\n-09418D Compression Method    0000 (0) 'Stored'\n-09418F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-094193 CRC                   00000000 (0)\n-094197 Compressed Size       00000000 (0)\n-09419B Uncompressed Size     00000000 (0)\n-09419F Filename Length       001D (29)\n-0941A1 Extra Length          0009 (9)\n-0941A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x941A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0941C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0941C2   Length              0005 (5)\n-0941C4   Flags               01 (1) 'Modification'\n-0941C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0941C9 LOCAL HEADER #178     04034B50 (67324752)\n-0941CD Extract Zip Spec      14 (20) '2.0'\n-0941CE Extract OS            00 (0) 'MS-DOS'\n-0941CF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0941D1 Compression Method    0000 (0) 'Stored'\n-0941D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0941D7 CRC                   00000000 (0)\n-0941DB Compressed Size       00000000 (0)\n-0941DF Uncompressed Size     00000000 (0)\n-0941E3 Filename Length       0036 (54)\n-0941E5 Extra Length          0009 (9)\n-0941E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x941E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09421D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09421F   Length              0005 (5)\n-094221   Flags               01 (1) 'Modification'\n-094222   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-094226 PAYLOAD\n-\n-0986FB DATA DESCRIPTOR       08074B50 (134695760)\n-0986FF CRC                   BACA53B9 (3133821881)\n-098703 Compressed Size       000044D5 (17621)\n-098707 Uncompressed Size     000044D5 (17621)\n-\n-09870B LOCAL HEADER #179     04034B50 (67324752)\n-09870F Extract Zip Spec      14 (20) '2.0'\n-098710 Extract OS            00 (0) 'MS-DOS'\n-098711 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-098713 Compression Method    0000 (0) 'Stored'\n-098715 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-098719 CRC                   00000000 (0)\n-09871D Compressed Size       00000000 (0)\n-098721 Uncompressed Size     00000000 (0)\n-098725 Filename Length       002C (44)\n-098727 Extra Length          0009 (9)\n-098729 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x98729: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-098755 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-098757   Length              0005 (5)\n-098759   Flags               01 (1) 'Modification'\n-09875A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09875E PAYLOAD\n-\n-09BAE3 DATA DESCRIPTOR       08074B50 (134695760)\n-09BAE7 CRC                   FA032BB6 (4194511798)\n-09BAEB Compressed Size       00003385 (13189)\n-09BAEF Uncompressed Size     00003385 (13189)\n-\n-09BAF3 LOCAL HEADER #180     04034B50 (67324752)\n-09BAF7 Extract Zip Spec      14 (20) '2.0'\n-09BAF8 Extract OS            00 (0) 'MS-DOS'\n-09BAF9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-09BAFB Compression Method    0000 (0) 'Stored'\n-09BAFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09BB01 CRC                   00000000 (0)\n-09BB05 Compressed Size       00000000 (0)\n-09BB09 Uncompressed Size     00000000 (0)\n-09BB0D Filename Length       0026 (38)\n-09BB0F Extra Length          0009 (9)\n-09BB11 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9BB11: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09BB37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09BB39   Length              0005 (5)\n-09BB3B   Flags               01 (1) 'Modification'\n-09BB3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09BB40 PAYLOAD\n-\n-0A25E4 DATA DESCRIPTOR       08074B50 (134695760)\n-0A25E8 CRC                   39C07894 (968915092)\n-0A25EC Compressed Size       00006AA4 (27300)\n-0A25F0 Uncompressed Size     00006AA4 (27300)\n-\n-0A25F4 LOCAL HEADER #181     04034B50 (67324752)\n-0A25F8 Extract Zip Spec      14 (20) '2.0'\n-0A25F9 Extract OS            00 (0) 'MS-DOS'\n-0A25FA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A25FC Compression Method    0000 (0) 'Stored'\n-0A25FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A2602 CRC                   00000000 (0)\n-0A2606 Compressed Size       00000000 (0)\n-0A260A Uncompressed Size     00000000 (0)\n-0A260E Filename Length       002B (43)\n-0A2610 Extra Length          0009 (9)\n-0A2612 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA2612: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A263D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A263F   Length              0005 (5)\n-0A2641   Flags               01 (1) 'Modification'\n-0A2642   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A2646 PAYLOAD\n-\n-0A3976 DATA DESCRIPTOR       08074B50 (134695760)\n-0A397A CRC                   2313A478 (588489848)\n-0A397E Compressed Size       00001330 (4912)\n-0A3982 Uncompressed Size     00001330 (4912)\n-\n-0A3986 LOCAL HEADER #182     04034B50 (67324752)\n-0A398A Extract Zip Spec      14 (20) '2.0'\n-0A398B Extract OS            00 (0) 'MS-DOS'\n-0A398C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A398E Compression Method    0000 (0) 'Stored'\n-0A3990 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A3994 CRC                   00000000 (0)\n-0A3998 Compressed Size       00000000 (0)\n-0A399C Uncompressed Size     00000000 (0)\n-0A39A0 Filename Length       002F (47)\n-0A39A2 Extra Length          0009 (9)\n-0A39A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA39A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A39D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A39D5   Length              0005 (5)\n-0A39D7   Flags               01 (1) 'Modification'\n-0A39D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A39DC PAYLOAD\n-\n-0A3F91 DATA DESCRIPTOR       08074B50 (134695760)\n-0A3F95 CRC                   10BC97FD (280795133)\n-0A3F99 Compressed Size       000005B5 (1461)\n-0A3F9D Uncompressed Size     000005B5 (1461)\n-\n-0A3FA1 LOCAL HEADER #183     04034B50 (67324752)\n-0A3FA5 Extract Zip Spec      14 (20) '2.0'\n-0A3FA6 Extract OS            00 (0) 'MS-DOS'\n-0A3FA7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A3FA9 Compression Method    0000 (0) 'Stored'\n-0A3FAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A3FAF CRC                   00000000 (0)\n-0A3FB3 Compressed Size       00000000 (0)\n-0A3FB7 Uncompressed Size     00000000 (0)\n-0A3FBB Filename Length       002A (42)\n-0A3FBD Extra Length          0009 (9)\n-0A3FBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA3FBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A3FE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A3FEB   Length              0005 (5)\n-0A3FED   Flags               01 (1) 'Modification'\n-0A3FEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A3FF2 PAYLOAD\n-\n-0A44A0 DATA DESCRIPTOR       08074B50 (134695760)\n-0A44A4 CRC                   982A34CC (2552902860)\n-0A44A8 Compressed Size       000004AE (1198)\n-0A44AC Uncompressed Size     000004AE (1198)\n-\n-0A44B0 LOCAL HEADER #184     04034B50 (67324752)\n-0A44B4 Extract Zip Spec      14 (20) '2.0'\n-0A44B5 Extract OS            00 (0) 'MS-DOS'\n-0A44B6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A44B8 Compression Method    0000 (0) 'Stored'\n-0A44BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A44BE CRC                   00000000 (0)\n-0A44C2 Compressed Size       00000000 (0)\n-0A44C6 Uncompressed Size     00000000 (0)\n-0A44CA Filename Length       002C (44)\n-0A44CC Extra Length          0009 (9)\n-0A44CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA44CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A44FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A44FC   Length              0005 (5)\n-0A44FE   Flags               01 (1) 'Modification'\n-0A44FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A4503 PAYLOAD\n-\n-0A5AFE DATA DESCRIPTOR       08074B50 (134695760)\n-0A5B02 CRC                   7653CF57 (1985204055)\n-0A5B06 Compressed Size       000015FB (5627)\n-0A5B0A Uncompressed Size     000015FB (5627)\n-\n-0A5B0E LOCAL HEADER #185     04034B50 (67324752)\n-0A5B12 Extract Zip Spec      14 (20) '2.0'\n-0A5B13 Extract OS            00 (0) 'MS-DOS'\n-0A5B14 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A5B16 Compression Method    0000 (0) 'Stored'\n-0A5B18 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A5B1C CRC                   00000000 (0)\n-0A5B20 Compressed Size       00000000 (0)\n-0A5B24 Uncompressed Size     00000000 (0)\n-0A5B28 Filename Length       002C (44)\n-0A5B2A Extra Length          0009 (9)\n-0A5B2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA5B2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A5B58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A5B5A   Length              0005 (5)\n-0A5B5C   Flags               01 (1) 'Modification'\n-0A5B5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A5B61 PAYLOAD\n-\n-0A6407 DATA DESCRIPTOR       08074B50 (134695760)\n-0A640B CRC                   4D87180A (1300699146)\n-0A640F Compressed Size       000008A6 (2214)\n-0A6413 Uncompressed Size     000008A6 (2214)\n-\n-0A6417 LOCAL HEADER #186     04034B50 (67324752)\n-0A641B Extract Zip Spec      14 (20) '2.0'\n-0A641C Extract OS            00 (0) 'MS-DOS'\n-0A641D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A641F Compression Method    0000 (0) 'Stored'\n-0A6421 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A6425 CRC                   00000000 (0)\n-0A6429 Compressed Size       00000000 (0)\n-0A642D Uncompressed Size     00000000 (0)\n-0A6431 Filename Length       002B (43)\n-0A6433 Extra Length          0009 (9)\n-0A6435 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA6435: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A6460 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A6462   Length              0005 (5)\n-0A6464   Flags               01 (1) 'Modification'\n-0A6465   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A6469 PAYLOAD\n-\n-0A6D30 DATA DESCRIPTOR       08074B50 (134695760)\n-0A6D34 CRC                   8F2D4992 (2402109842)\n-0A6D38 Compressed Size       000008C7 (2247)\n-0A6D3C Uncompressed Size     000008C7 (2247)\n-\n-0A6D40 LOCAL HEADER #187     04034B50 (67324752)\n-0A6D44 Extract Zip Spec      14 (20) '2.0'\n-0A6D45 Extract OS            00 (0) 'MS-DOS'\n-0A6D46 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A6D48 Compression Method    0000 (0) 'Stored'\n-0A6D4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A6D4E CRC                   00000000 (0)\n-0A6D52 Compressed Size       00000000 (0)\n-0A6D56 Uncompressed Size     00000000 (0)\n-0A6D5A Filename Length       002D (45)\n-0A6D5C Extra Length          0009 (9)\n-0A6D5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA6D5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A6D8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A6D8D   Length              0005 (5)\n-0A6D8F   Flags               01 (1) 'Modification'\n-0A6D90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A6D94 PAYLOAD\n-\n-0A7880 DATA DESCRIPTOR       08074B50 (134695760)\n-0A7884 CRC                   33828390 (864191376)\n-0A7888 Compressed Size       00000AEC (2796)\n-0A788C Uncompressed Size     00000AEC (2796)\n-\n-0A7890 LOCAL HEADER #188     04034B50 (67324752)\n-0A7894 Extract Zip Spec      14 (20) '2.0'\n-0A7895 Extract OS            00 (0) 'MS-DOS'\n-0A7896 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A7898 Compression Method    0000 (0) 'Stored'\n-0A789A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A789E CRC                   00000000 (0)\n-0A78A2 Compressed Size       00000000 (0)\n-0A78A6 Uncompressed Size     00000000 (0)\n-0A78AA Filename Length       002C (44)\n-0A78AC Extra Length          0009 (9)\n-0A78AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA78AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A78DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A78DC   Length              0005 (5)\n-0A78DE   Flags               01 (1) 'Modification'\n-0A78DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A78E3 PAYLOAD\n-\n-0A98C2 DATA DESCRIPTOR       08074B50 (134695760)\n-0A98C6 CRC                   ECCF2EAF (3973000879)\n-0A98CA Compressed Size       00001FDF (8159)\n-0A98CE Uncompressed Size     00001FDF (8159)\n-\n-0A98D2 LOCAL HEADER #189     04034B50 (67324752)\n-0A98D6 Extract Zip Spec      14 (20) '2.0'\n-0A98D7 Extract OS            00 (0) 'MS-DOS'\n-0A98D8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A98DA Compression Method    0000 (0) 'Stored'\n-0A98DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A98E0 CRC                   00000000 (0)\n-0A98E4 Compressed Size       00000000 (0)\n-0A98E8 Uncompressed Size     00000000 (0)\n-0A98EC Filename Length       0030 (48)\n-0A98EE Extra Length          0009 (9)\n-0A98F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA98F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A9920 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A9922   Length              0005 (5)\n-0A9924   Flags               01 (1) 'Modification'\n-0A9925   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A9929 PAYLOAD\n-\n-0A9DB2 DATA DESCRIPTOR       08074B50 (134695760)\n-0A9DB6 CRC                   4EF6CDD0 (1324797392)\n-0A9DBA Compressed Size       00000489 (1161)\n-0A9DBE Uncompressed Size     00000489 (1161)\n-\n-0A9DC2 LOCAL HEADER #190     04034B50 (67324752)\n-0A9DC6 Extract Zip Spec      14 (20) '2.0'\n-0A9DC7 Extract OS            00 (0) 'MS-DOS'\n-0A9DC8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A9DCA Compression Method    0000 (0) 'Stored'\n-0A9DCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A9DD0 CRC                   00000000 (0)\n-0A9DD4 Compressed Size       00000000 (0)\n-0A9DD8 Uncompressed Size     00000000 (0)\n-0A9DDC Filename Length       0027 (39)\n-0A9DDE Extra Length          0009 (9)\n-0A9DE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA9DE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A9E07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A9E09   Length              0005 (5)\n-0A9E0B   Flags               01 (1) 'Modification'\n-0A9E0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A9E10 PAYLOAD\n-\n-0B10C9 DATA DESCRIPTOR       08074B50 (134695760)\n-0B10CD CRC                   D5F1D071 (3589394545)\n-0B10D1 Compressed Size       000072B9 (29369)\n-0B10D5 Uncompressed Size     000072B9 (29369)\n-\n-0B10D9 LOCAL HEADER #191     04034B50 (67324752)\n-0B10DD Extract Zip Spec      14 (20) '2.0'\n-0B10DE Extract OS            00 (0) 'MS-DOS'\n-0B10DF General Purpose Flag  0000 (0)\n-0B10E1 Compression Method    0000 (0) 'Stored'\n-0B10E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B10E7 CRC                   00000000 (0)\n-0B10EB Compressed Size       00000000 (0)\n-0B10EF Uncompressed Size     00000000 (0)\n-0B10F3 Filename Length       001D (29)\n-0B10F5 Extra Length          0009 (9)\n-0B10F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB10F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1114 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1116   Length              0005 (5)\n-0B1118   Flags               01 (1) 'Modification'\n-0B1119   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B111D LOCAL HEADER #192     04034B50 (67324752)\n-0B1121 Extract Zip Spec      14 (20) '2.0'\n-0B1122 Extract OS            00 (0) 'MS-DOS'\n-0B1123 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B1125 Compression Method    0000 (0) 'Stored'\n-0B1127 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B112B CRC                   00000000 (0)\n-0B112F Compressed Size       00000000 (0)\n-0B1133 Uncompressed Size     00000000 (0)\n-0B1137 Filename Length       002D (45)\n-0B1139 Extra Length          0009 (9)\n-0B113B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB113B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1168 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B116A   Length              0005 (5)\n-0B116C   Flags               01 (1) 'Modification'\n-0B116D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B1171 PAYLOAD\n-\n-0B1A73 DATA DESCRIPTOR       08074B50 (134695760)\n-0B1A77 CRC                   99C9FFC3 (2580152259)\n-0B1A7B Compressed Size       00000902 (2306)\n-0B1A7F Uncompressed Size     00000902 (2306)\n-\n-0B1A83 LOCAL HEADER #193     04034B50 (67324752)\n-0B1A87 Extract Zip Spec      14 (20) '2.0'\n-0B1A88 Extract OS            00 (0) 'MS-DOS'\n-0B1A89 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B1A8B Compression Method    0000 (0) 'Stored'\n-0B1A8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1A91 CRC                   00000000 (0)\n-0B1A95 Compressed Size       00000000 (0)\n-0B1A99 Uncompressed Size     00000000 (0)\n-0B1A9D Filename Length       0036 (54)\n-0B1A9F Extra Length          0009 (9)\n-0B1AA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB1AA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1AD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1AD9   Length              0005 (5)\n-0B1ADB   Flags               01 (1) 'Modification'\n-0B1ADC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B1AE0 PAYLOAD\n-\n-0B1F68 DATA DESCRIPTOR       08074B50 (134695760)\n-0B1F6C CRC                   C53EC878 (3309226104)\n-0B1F70 Compressed Size       00000488 (1160)\n-0B1F74 Uncompressed Size     00000488 (1160)\n-\n-0B1F78 LOCAL HEADER #194     04034B50 (67324752)\n-0B1F7C Extract Zip Spec      14 (20) '2.0'\n-0B1F7D Extract OS            00 (0) 'MS-DOS'\n-0B1F7E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B1F80 Compression Method    0000 (0) 'Stored'\n-0B1F82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1F86 CRC                   00000000 (0)\n-0B1F8A Compressed Size       00000000 (0)\n-0B1F8E Uncompressed Size     00000000 (0)\n-0B1F92 Filename Length       0037 (55)\n-0B1F94 Extra Length          0009 (9)\n-0B1F96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB1F96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1FCD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1FCF   Length              0005 (5)\n-0B1FD1   Flags               01 (1) 'Modification'\n-0B1FD2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B1FD6 PAYLOAD\n-\n-0B28F6 DATA DESCRIPTOR       08074B50 (134695760)\n-0B28FA CRC                   8EF8ABEC (2398661612)\n-0B28FE Compressed Size       00000920 (2336)\n-0B2902 Uncompressed Size     00000920 (2336)\n-\n-0B2906 LOCAL HEADER #195     04034B50 (67324752)\n-0B290A Extract Zip Spec      14 (20) '2.0'\n-0B290B Extract OS            00 (0) 'MS-DOS'\n-0B290C General Purpose Flag  0000 (0)\n-0B290E Compression Method    0000 (0) 'Stored'\n-0B2910 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B2914 CRC                   00000000 (0)\n-0B2918 Compressed Size       00000000 (0)\n-0B291C Uncompressed Size     00000000 (0)\n-0B2920 Filename Length       001F (31)\n-0B2922 Extra Length          0009 (9)\n-0B2924 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB2924: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B2943 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B2945   Length              0005 (5)\n-0B2947   Flags               01 (1) 'Modification'\n-0B2948   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B294C LOCAL HEADER #196     04034B50 (67324752)\n-0B2950 Extract Zip Spec      14 (20) '2.0'\n-0B2951 Extract OS            00 (0) 'MS-DOS'\n-0B2952 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B2954 Compression Method    0000 (0) 'Stored'\n-0B2956 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B295A CRC                   00000000 (0)\n-0B295E Compressed Size       00000000 (0)\n-0B2962 Uncompressed Size     00000000 (0)\n-0B2966 Filename Length       0029 (41)\n-0B2968 Extra Length          0009 (9)\n-0B296A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB296A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B2993 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B2995   Length              0005 (5)\n-0B2997   Flags               01 (1) 'Modification'\n-0B2998   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B299C PAYLOAD\n-\n-0B2E5A DATA DESCRIPTOR       08074B50 (134695760)\n-0B2E5E CRC                   9D821087 (2642546823)\n-0B2E62 Compressed Size       000004BE (1214)\n-0B2E66 Uncompressed Size     000004BE (1214)\n-\n-0B2E6A LOCAL HEADER #197     04034B50 (67324752)\n-0B2E6E Extract Zip Spec      14 (20) '2.0'\n-0B2E6F Extract OS            00 (0) 'MS-DOS'\n-0B2E70 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B2E72 Compression Method    0000 (0) 'Stored'\n-0B2E74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B2E78 CRC                   00000000 (0)\n-0B2E7C Compressed Size       00000000 (0)\n-0B2E80 Uncompressed Size     00000000 (0)\n-0B2E84 Filename Length       002A (42)\n-0B2E86 Extra Length          0009 (9)\n-0B2E88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB2E88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B2EB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B2EB4   Length              0005 (5)\n-0B2EB6   Flags               01 (1) 'Modification'\n-0B2EB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B2EBB PAYLOAD\n-\n-0B3D93 DATA DESCRIPTOR       08074B50 (134695760)\n-0B3D97 CRC                   7A6DF346 (2054026054)\n-0B3D9B Compressed Size       00000ED8 (3800)\n-0B3D9F Uncompressed Size     00000ED8 (3800)\n-\n-0B3DA3 LOCAL HEADER #198     04034B50 (67324752)\n-0B3DA7 Extract Zip Spec      14 (20) '2.0'\n-0B3DA8 Extract OS            00 (0) 'MS-DOS'\n-0B3DA9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B3DAB Compression Method    0000 (0) 'Stored'\n-0B3DAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B3DB1 CRC                   00000000 (0)\n-0B3DB5 Compressed Size       00000000 (0)\n-0B3DB9 Uncompressed Size     00000000 (0)\n-0B3DBD Filename Length       0031 (49)\n-0B3DBF Extra Length          0009 (9)\n-0B3DC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB3DC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B3DF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B3DF4   Length              0005 (5)\n-0B3DF6   Flags               01 (1) 'Modification'\n-0B3DF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B3DFB PAYLOAD\n-\n-0B4540 DATA DESCRIPTOR       08074B50 (134695760)\n-0B4544 CRC                   A6EF1A57 (2800687703)\n-0B4548 Compressed Size       00000745 (1861)\n-0B454C Uncompressed Size     00000745 (1861)\n-\n-0B4550 LOCAL HEADER #199     04034B50 (67324752)\n-0B4554 Extract Zip Spec      14 (20) '2.0'\n-0B4555 Extract OS            00 (0) 'MS-DOS'\n-0B4556 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B4558 Compression Method    0000 (0) 'Stored'\n-0B455A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B455E CRC                   00000000 (0)\n-0B4562 Compressed Size       00000000 (0)\n-0B4566 Uncompressed Size     00000000 (0)\n-0B456A Filename Length       0031 (49)\n-0B456C Extra Length          0009 (9)\n-0B456E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB456E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B459F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B45A1   Length              0005 (5)\n-0B45A3   Flags               01 (1) 'Modification'\n-0B45A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B45A8 PAYLOAD\n-\n-0B5A2D DATA DESCRIPTOR       08074B50 (134695760)\n-0B5A31 CRC                   626EDC3E (1651432510)\n-0B5A35 Compressed Size       00001485 (5253)\n-0B5A39 Uncompressed Size     00001485 (5253)\n-\n-0B5A3D LOCAL HEADER #200     04034B50 (67324752)\n-0B5A41 Extract Zip Spec      14 (20) '2.0'\n-0B5A42 Extract OS            00 (0) 'MS-DOS'\n-0B5A43 General Purpose Flag  0000 (0)\n-0B5A45 Compression Method    0000 (0) 'Stored'\n-0B5A47 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B5A4B CRC                   00000000 (0)\n-0B5A4F Compressed Size       00000000 (0)\n-0B5A53 Uncompressed Size     00000000 (0)\n-0B5A57 Filename Length       0023 (35)\n-0B5A59 Extra Length          0009 (9)\n-0B5A5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB5A5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B5A7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B5A80   Length              0005 (5)\n-0B5A82   Flags               01 (1) 'Modification'\n-0B5A83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B5A87 LOCAL HEADER #201     04034B50 (67324752)\n-0B5A8B Extract Zip Spec      14 (20) '2.0'\n-0B5A8C Extract OS            00 (0) 'MS-DOS'\n-0B5A8D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B5A8F Compression Method    0000 (0) 'Stored'\n-0B5A91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B5A95 CRC                   00000000 (0)\n-0B5A99 Compressed Size       00000000 (0)\n-0B5A9D Uncompressed Size     00000000 (0)\n-0B5AA1 Filename Length       0031 (49)\n-0B5AA3 Extra Length          0009 (9)\n-0B5AA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB5AA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B5AD6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B5AD8   Length              0005 (5)\n-0B5ADA   Flags               01 (1) 'Modification'\n-0B5ADB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B5ADF PAYLOAD\n-\n-0B67ED DATA DESCRIPTOR       08074B50 (134695760)\n-0B67F1 CRC                   65EBC1EB (1709949419)\n-0B67F5 Compressed Size       00000D0E (3342)\n-0B67F9 Uncompressed Size     00000D0E (3342)\n-\n-0B67FD LOCAL HEADER #202     04034B50 (67324752)\n-0B6801 Extract Zip Spec      14 (20) '2.0'\n-0B6802 Extract OS            00 (0) 'MS-DOS'\n-0B6803 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B6805 Compression Method    0000 (0) 'Stored'\n-0B6807 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B680B CRC                   00000000 (0)\n-0B680F Compressed Size       00000000 (0)\n-0B6813 Uncompressed Size     00000000 (0)\n-0B6817 Filename Length       0038 (56)\n-0B6819 Extra Length          0009 (9)\n-0B681B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB681B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B6853 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B6855   Length              0005 (5)\n-0B6857   Flags               01 (1) 'Modification'\n-0B6858   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B685C PAYLOAD\n-\n-0B6F54 DATA DESCRIPTOR       08074B50 (134695760)\n-0B6F58 CRC                   006A5B46 (6970182)\n-0B6F5C Compressed Size       000006F8 (1784)\n-0B6F60 Uncompressed Size     000006F8 (1784)\n-\n-0B6F64 LOCAL HEADER #203     04034B50 (67324752)\n-0B6F68 Extract Zip Spec      14 (20) '2.0'\n-0B6F69 Extract OS            00 (0) 'MS-DOS'\n-0B6F6A General Purpose Flag  0000 (0)\n-0B6F6C Compression Method    0000 (0) 'Stored'\n-0B6F6E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B6F72 CRC                   00000000 (0)\n-0B6F76 Compressed Size       00000000 (0)\n-0B6F7A Uncompressed Size     00000000 (0)\n-0B6F7E Filename Length       0023 (35)\n-0B6F80 Extra Length          0009 (9)\n-0B6F82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB6F82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B6FA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B6FA7   Length              0005 (5)\n-0B6FA9   Flags               01 (1) 'Modification'\n-0B6FAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B6FAE LOCAL HEADER #204     04034B50 (67324752)\n-0B6FB2 Extract Zip Spec      14 (20) '2.0'\n-0B6FB3 Extract OS            00 (0) 'MS-DOS'\n-0B6FB4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B6FB6 Compression Method    0000 (0) 'Stored'\n-0B6FB8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B6FBC CRC                   00000000 (0)\n-0B6FC0 Compressed Size       00000000 (0)\n-0B6FC4 Uncompressed Size     00000000 (0)\n-0B6FC8 Filename Length       0031 (49)\n-0B6FCA Extra Length          0009 (9)\n-0B6FCC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB6FCC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B6FFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B6FFF   Length              0005 (5)\n-0B7001   Flags               01 (1) 'Modification'\n-0B7002   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B7006 PAYLOAD\n-\n-0B7D21 DATA DESCRIPTOR       08074B50 (134695760)\n-0B7D25 CRC                   8FD172CF (2412868303)\n-0B7D29 Compressed Size       00000D1B (3355)\n-0B7D2D Uncompressed Size     00000D1B (3355)\n-\n-0B7D31 LOCAL HEADER #205     04034B50 (67324752)\n-0B7D35 Extract Zip Spec      14 (20) '2.0'\n-0B7D36 Extract OS            00 (0) 'MS-DOS'\n-0B7D37 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B7D39 Compression Method    0000 (0) 'Stored'\n-0B7D3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B7D3F CRC                   00000000 (0)\n-0B7D43 Compressed Size       00000000 (0)\n-0B7D47 Uncompressed Size     00000000 (0)\n-0B7D4B Filename Length       0038 (56)\n-0B7D4D Extra Length          0009 (9)\n-0B7D4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB7D4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B7D87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B7D89   Length              0005 (5)\n-0B7D8B   Flags               01 (1) 'Modification'\n-0B7D8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B7D90 PAYLOAD\n-\n-0B908C DATA DESCRIPTOR       08074B50 (134695760)\n-0B9090 CRC                   7ADBDBE0 (2061229024)\n-0B9094 Compressed Size       000012FC (4860)\n-0B9098 Uncompressed Size     000012FC (4860)\n-\n-0B909C LOCAL HEADER #206     04034B50 (67324752)\n-0B90A0 Extract Zip Spec      14 (20) '2.0'\n-0B90A1 Extract OS            00 (0) 'MS-DOS'\n-0B90A2 General Purpose Flag  0000 (0)\n-0B90A4 Compression Method    0000 (0) 'Stored'\n-0B90A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B90AA CRC                   00000000 (0)\n-0B90AE Compressed Size       00000000 (0)\n-0B90B2 Uncompressed Size     00000000 (0)\n-0B90B6 Filename Length       0025 (37)\n-0B90B8 Extra Length          0009 (9)\n-0B90BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB90BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B90DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B90E1   Length              0005 (5)\n-0B90E3   Flags               01 (1) 'Modification'\n-0B90E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B90E8 LOCAL HEADER #207     04034B50 (67324752)\n-0B90EC Extract Zip Spec      14 (20) '2.0'\n-0B90ED Extract OS            00 (0) 'MS-DOS'\n-0B90EE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B90F0 Compression Method    0000 (0) 'Stored'\n-0B90F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B90F6 CRC                   00000000 (0)\n-0B90FA Compressed Size       00000000 (0)\n-0B90FE Uncompressed Size     00000000 (0)\n-0B9102 Filename Length       0035 (53)\n-0B9104 Extra Length          0009 (9)\n-0B9106 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB9106: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B913B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B913D   Length              0005 (5)\n-0B913F   Flags               01 (1) 'Modification'\n-0B9140   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B9144 PAYLOAD\n-\n-0B9FA5 DATA DESCRIPTOR       08074B50 (134695760)\n-0B9FA9 CRC                   0237005F (37159007)\n-0B9FAD Compressed Size       00000E61 (3681)\n-0B9FB1 Uncompressed Size     00000E61 (3681)\n-\n-0B9FB5 LOCAL HEADER #208     04034B50 (67324752)\n-0B9FB9 Extract Zip Spec      14 (20) '2.0'\n-0B9FBA Extract OS            00 (0) 'MS-DOS'\n-0B9FBB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B9FBD Compression Method    0000 (0) 'Stored'\n-0B9FBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B9FC3 CRC                   00000000 (0)\n-0B9FC7 Compressed Size       00000000 (0)\n-0B9FCB Uncompressed Size     00000000 (0)\n-0B9FCF Filename Length       003C (60)\n-0B9FD1 Extra Length          0009 (9)\n-0B9FD3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB9FD3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BA00F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BA011   Length              0005 (5)\n-0BA013   Flags               01 (1) 'Modification'\n-0BA014   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BA018 PAYLOAD\n-\n-0BB0E4 DATA DESCRIPTOR       08074B50 (134695760)\n-0BB0E8 CRC                   CE737695 (3463673493)\n-0BB0EC Compressed Size       000010CC (4300)\n-0BB0F0 Uncompressed Size     000010CC (4300)\n-\n-0BB0F4 LOCAL HEADER #209     04034B50 (67324752)\n-0BB0F8 Extract Zip Spec      14 (20) '2.0'\n-0BB0F9 Extract OS            00 (0) 'MS-DOS'\n-0BB0FA General Purpose Flag  0000 (0)\n-0BB0FC Compression Method    0000 (0) 'Stored'\n-0BB0FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BB102 CRC                   00000000 (0)\n-0BB106 Compressed Size       00000000 (0)\n-0BB10A Uncompressed Size     00000000 (0)\n-0BB10E Filename Length       0026 (38)\n-0BB110 Extra Length          0009 (9)\n-0BB112 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBB112: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BB138 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BB13A   Length              0005 (5)\n-0BB13C   Flags               01 (1) 'Modification'\n-0BB13D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BB141 LOCAL HEADER #210     04034B50 (67324752)\n-0BB145 Extract Zip Spec      14 (20) '2.0'\n-0BB146 Extract OS            00 (0) 'MS-DOS'\n-0BB147 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BB149 Compression Method    0000 (0) 'Stored'\n-0BB14B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BB14F CRC                   00000000 (0)\n-0BB153 Compressed Size       00000000 (0)\n-0BB157 Uncompressed Size     00000000 (0)\n-0BB15B Filename Length       0037 (55)\n-0BB15D Extra Length          0009 (9)\n-0BB15F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBB15F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BB196 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BB198   Length              0005 (5)\n-0BB19A   Flags               01 (1) 'Modification'\n-0BB19B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BB19F PAYLOAD\n-\n-0BBE37 DATA DESCRIPTOR       08074B50 (134695760)\n-0BBE3B CRC                   719AAFB0 (1905962928)\n-0BBE3F Compressed Size       00000C98 (3224)\n-0BBE43 Uncompressed Size     00000C98 (3224)\n-\n-0BBE47 LOCAL HEADER #211     04034B50 (67324752)\n-0BBE4B Extract Zip Spec      14 (20) '2.0'\n-0BBE4C Extract OS            00 (0) 'MS-DOS'\n-0BBE4D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BBE4F Compression Method    0000 (0) 'Stored'\n-0BBE51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BBE55 CRC                   00000000 (0)\n-0BBE59 Compressed Size       00000000 (0)\n-0BBE5D Uncompressed Size     00000000 (0)\n-0BBE61 Filename Length       003E (62)\n-0BBE63 Extra Length          0009 (9)\n-0BBE65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBBE65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BBEA3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BBEA5   Length              0005 (5)\n-0BBEA7   Flags               01 (1) 'Modification'\n-0BBEA8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BBEAC PAYLOAD\n-\n-0BCB99 DATA DESCRIPTOR       08074B50 (134695760)\n-0BCB9D CRC                   B7D93D08 (3084467464)\n-0BCBA1 Compressed Size       00000CED (3309)\n-0BCBA5 Uncompressed Size     00000CED (3309)\n-\n-0BCBA9 LOCAL HEADER #212     04034B50 (67324752)\n-0BCBAD Extract Zip Spec      14 (20) '2.0'\n-0BCBAE Extract OS            00 (0) 'MS-DOS'\n-0BCBAF General Purpose Flag  0000 (0)\n-0BCBB1 Compression Method    0000 (0) 'Stored'\n-0BCBB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BCBB7 CRC                   00000000 (0)\n-0BCBBB Compressed Size       00000000 (0)\n-0BCBBF Uncompressed Size     00000000 (0)\n-0BCBC3 Filename Length       0025 (37)\n-0BCBC5 Extra Length          0009 (9)\n-0BCBC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBCBC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BCBEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BCBEE   Length              0005 (5)\n-0BCBF0   Flags               01 (1) 'Modification'\n-0BCBF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BCBF5 LOCAL HEADER #213     04034B50 (67324752)\n-0BCBF9 Extract Zip Spec      14 (20) '2.0'\n-0BCBFA Extract OS            00 (0) 'MS-DOS'\n-0BCBFB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BCBFD Compression Method    0000 (0) 'Stored'\n-0BCBFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BCC03 CRC                   00000000 (0)\n-0BCC07 Compressed Size       00000000 (0)\n-0BCC0B Uncompressed Size     00000000 (0)\n-0BCC0F Filename Length       0035 (53)\n-0BCC11 Extra Length          0009 (9)\n-0BCC13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBCC13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BCC48 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BCC4A   Length              0005 (5)\n-0BCC4C   Flags               01 (1) 'Modification'\n-0BCC4D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BCC51 PAYLOAD\n-\n-0BE4C7 DATA DESCRIPTOR       08074B50 (134695760)\n-0BE4CB CRC                   FD6565BB (4251280827)\n-0BE4CF Compressed Size       00001876 (6262)\n-0BE4D3 Uncompressed Size     00001876 (6262)\n-\n-0BE4D7 LOCAL HEADER #214     04034B50 (67324752)\n-0BE4DB Extract Zip Spec      14 (20) '2.0'\n-0BE4DC Extract OS            00 (0) 'MS-DOS'\n-0BE4DD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BE4DF Compression Method    0000 (0) 'Stored'\n-0BE4E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BE4E5 CRC                   00000000 (0)\n-0BE4E9 Compressed Size       00000000 (0)\n-0BE4ED Uncompressed Size     00000000 (0)\n-0BE4F1 Filename Length       003C (60)\n-0BE4F3 Extra Length          0009 (9)\n-0BE4F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBE4F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BE531 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BE533   Length              0005 (5)\n-0BE535   Flags               01 (1) 'Modification'\n-0BE536   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BE53A PAYLOAD\n-\n-0BEC29 DATA DESCRIPTOR       08074B50 (134695760)\n-0BEC2D CRC                   2D853131 (763703601)\n-0BEC31 Compressed Size       000006EF (1775)\n-0BEC35 Uncompressed Size     000006EF (1775)\n-\n-0BEC39 LOCAL HEADER #215     04034B50 (67324752)\n-0BEC3D Extract Zip Spec      14 (20) '2.0'\n-0BEC3E Extract OS            00 (0) 'MS-DOS'\n-0BEC3F General Purpose Flag  0000 (0)\n-0BEC41 Compression Method    0000 (0) 'Stored'\n-0BEC43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BEC47 CRC                   00000000 (0)\n-0BEC4B Compressed Size       00000000 (0)\n-0BEC4F Uncompressed Size     00000000 (0)\n-0BEC53 Filename Length       0027 (39)\n-0BEC55 Extra Length          0009 (9)\n-0BEC57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBEC57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BEC7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BEC80   Length              0005 (5)\n-0BEC82   Flags               01 (1) 'Modification'\n-0BEC83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BEC87 LOCAL HEADER #216     04034B50 (67324752)\n-0BEC8B Extract Zip Spec      14 (20) '2.0'\n-0BEC8C Extract OS            00 (0) 'MS-DOS'\n-0BEC8D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BEC8F Compression Method    0000 (0) 'Stored'\n-0BEC91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BEC95 CRC                   00000000 (0)\n-0BEC99 Compressed Size       00000000 (0)\n-0BEC9D Uncompressed Size     00000000 (0)\n-0BECA1 Filename Length       003A (58)\n-0BECA3 Extra Length          0009 (9)\n-0BECA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBECA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BECDF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BECE1   Length              0005 (5)\n-0BECE3   Flags               01 (1) 'Modification'\n-0BECE4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BECE8 PAYLOAD\n-\n-0C009D DATA DESCRIPTOR       08074B50 (134695760)\n-0C00A1 CRC                   01B8CE5D (28888669)\n-0C00A5 Compressed Size       000013B5 (5045)\n-0C00A9 Uncompressed Size     000013B5 (5045)\n-\n-0C00AD LOCAL HEADER #217     04034B50 (67324752)\n-0C00B1 Extract Zip Spec      14 (20) '2.0'\n-0C00B2 Extract OS            00 (0) 'MS-DOS'\n-0C00B3 General Purpose Flag  0000 (0)\n-0C00B5 Compression Method    0000 (0) 'Stored'\n-0C00B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C00BB CRC                   00000000 (0)\n-0C00BF Compressed Size       00000000 (0)\n-0C00C3 Uncompressed Size     00000000 (0)\n-0C00C7 Filename Length       001F (31)\n-0C00C9 Extra Length          0009 (9)\n-0C00CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC00CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C00EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C00EC   Length              0005 (5)\n-0C00EE   Flags               01 (1) 'Modification'\n-0C00EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C00F3 LOCAL HEADER #218     04034B50 (67324752)\n-0C00F7 Extract Zip Spec      14 (20) '2.0'\n-0C00F8 Extract OS            00 (0) 'MS-DOS'\n-0C00F9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C00FB Compression Method    0000 (0) 'Stored'\n-0C00FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C0101 CRC                   00000000 (0)\n-0C0105 Compressed Size       00000000 (0)\n-0C0109 Uncompressed Size     00000000 (0)\n-0C010D Filename Length       002A (42)\n-0C010F Extra Length          0009 (9)\n-0C0111 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC0111: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C013B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C013D   Length              0005 (5)\n-0C013F   Flags               01 (1) 'Modification'\n-0C0140   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C0144 PAYLOAD\n-\n-0C08A1 DATA DESCRIPTOR       08074B50 (134695760)\n-0C08A5 CRC                   EE49CD50 (3997814096)\n-0C08A9 Compressed Size       0000075D (1885)\n-0C08AD Uncompressed Size     0000075D (1885)\n-\n-0C08B1 LOCAL HEADER #219     04034B50 (67324752)\n-0C08B5 Extract Zip Spec      14 (20) '2.0'\n-0C08B6 Extract OS            00 (0) 'MS-DOS'\n-0C08B7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C08B9 Compression Method    0000 (0) 'Stored'\n-0C08BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C08BF CRC                   00000000 (0)\n-0C08C3 Compressed Size       00000000 (0)\n-0C08C7 Uncompressed Size     00000000 (0)\n-0C08CB Filename Length       0031 (49)\n-0C08CD Extra Length          0009 (9)\n-0C08CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC08CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C0900 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C0902   Length              0005 (5)\n-0C0904   Flags               01 (1) 'Modification'\n-0C0905   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C0909 PAYLOAD\n-\n-0C0D3B DATA DESCRIPTOR       08074B50 (134695760)\n-0C0D3F CRC                   4C723E93 (1282555539)\n-0C0D43 Compressed Size       00000432 (1074)\n-0C0D47 Uncompressed Size     00000432 (1074)\n-\n-0C0D4B LOCAL HEADER #220     04034B50 (67324752)\n-0C0D4F Extract Zip Spec      14 (20) '2.0'\n-0C0D50 Extract OS            00 (0) 'MS-DOS'\n-0C0D51 General Purpose Flag  0000 (0)\n-0C0D53 Compression Method    0000 (0) 'Stored'\n-0C0D55 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C0D59 CRC                   00000000 (0)\n-0C0D5D Compressed Size       00000000 (0)\n-0C0D61 Uncompressed Size     00000000 (0)\n-0C0D65 Filename Length       0027 (39)\n-0C0D67 Extra Length          0009 (9)\n-0C0D69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC0D69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C0D90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C0D92   Length              0005 (5)\n-0C0D94   Flags               01 (1) 'Modification'\n-0C0D95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C0D99 LOCAL HEADER #221     04034B50 (67324752)\n-0C0D9D Extract Zip Spec      14 (20) '2.0'\n-0C0D9E Extract OS            00 (0) 'MS-DOS'\n-0C0D9F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C0DA1 Compression Method    0000 (0) 'Stored'\n-0C0DA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C0DA7 CRC                   00000000 (0)\n-0C0DAB Compressed Size       00000000 (0)\n-0C0DAF Uncompressed Size     00000000 (0)\n-0C0DB3 Filename Length       003D (61)\n-0C0DB5 Extra Length          0009 (9)\n-0C0DB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC0DB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C0DF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C0DF6   Length              0005 (5)\n-0C0DF8   Flags               01 (1) 'Modification'\n-0C0DF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C0DFD PAYLOAD\n-\n-0C16A4 DATA DESCRIPTOR       08074B50 (134695760)\n-0C16A8 CRC                   CD3068DB (3442501851)\n-0C16AC Compressed Size       000008A7 (2215)\n-0C16B0 Uncompressed Size     000008A7 (2215)\n-\n-0C16B4 LOCAL HEADER #222     04034B50 (67324752)\n-0C16B8 Extract Zip Spec      14 (20) '2.0'\n-0C16B9 Extract OS            00 (0) 'MS-DOS'\n-0C16BA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C16BC Compression Method    0000 (0) 'Stored'\n-0C16BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C16C2 CRC                   00000000 (0)\n-0C16C6 Compressed Size       00000000 (0)\n-0C16CA Uncompressed Size     00000000 (0)\n-0C16CE Filename Length       003F (63)\n-0C16D0 Extra Length          0009 (9)\n-0C16D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC16D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C1711 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C1713   Length              0005 (5)\n-0C1715   Flags               01 (1) 'Modification'\n-0C1716   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C171A PAYLOAD\n-\n-0C1E1B DATA DESCRIPTOR       08074B50 (134695760)\n-0C1E1F CRC                   E601D6EE (3858880238)\n-0C1E23 Compressed Size       00000701 (1793)\n-0C1E27 Uncompressed Size     00000701 (1793)\n-\n-0C1E2B LOCAL HEADER #223     04034B50 (67324752)\n-0C1E2F Extract Zip Spec      14 (20) '2.0'\n-0C1E30 Extract OS            00 (0) 'MS-DOS'\n-0C1E31 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C1E33 Compression Method    0000 (0) 'Stored'\n-0C1E35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C1E39 CRC                   00000000 (0)\n-0C1E3D Compressed Size       00000000 (0)\n-0C1E41 Uncompressed Size     00000000 (0)\n-0C1E45 Filename Length       0037 (55)\n-0C1E47 Extra Length          0009 (9)\n-0C1E49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC1E49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C1E80 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C1E82   Length              0005 (5)\n-0C1E84   Flags               01 (1) 'Modification'\n-0C1E85   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C1E89 PAYLOAD\n-\n-0C265D DATA DESCRIPTOR       08074B50 (134695760)\n-0C2661 CRC                   577B6C79 (1467706489)\n-0C2665 Compressed Size       000007D4 (2004)\n-0C2669 Uncompressed Size     000007D4 (2004)\n-\n-0C266D LOCAL HEADER #224     04034B50 (67324752)\n-0C2671 Extract Zip Spec      14 (20) '2.0'\n-0C2672 Extract OS            00 (0) 'MS-DOS'\n-0C2673 General Purpose Flag  0000 (0)\n-0C2675 Compression Method    0000 (0) 'Stored'\n-0C2677 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C267B CRC                   00000000 (0)\n-0C267F Compressed Size       00000000 (0)\n-0C2683 Uncompressed Size     00000000 (0)\n-0C2687 Filename Length       001E (30)\n-0C2689 Extra Length          0009 (9)\n-0C268B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC268B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C26A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C26AB   Length              0005 (5)\n-0C26AD   Flags               01 (1) 'Modification'\n-0C26AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C26B2 LOCAL HEADER #225     04034B50 (67324752)\n-0C26B6 Extract Zip Spec      14 (20) '2.0'\n-0C26B7 Extract OS            00 (0) 'MS-DOS'\n-0C26B8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C26BA Compression Method    0000 (0) 'Stored'\n-0C26BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C26C0 CRC                   00000000 (0)\n-0C26C4 Compressed Size       00000000 (0)\n-0C26C8 Uncompressed Size     00000000 (0)\n-0C26CC Filename Length       002C (44)\n-0C26CE Extra Length          0009 (9)\n-0C26D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC26D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C26FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C26FE   Length              0005 (5)\n-0C2700   Flags               01 (1) 'Modification'\n-0C2701   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C2705 PAYLOAD\n-\n-0C2C05 DATA DESCRIPTOR       08074B50 (134695760)\n-0C2C09 CRC                   BF5F9C1E (3210714142)\n-0C2C0D Compressed Size       00000500 (1280)\n-0C2C11 Uncompressed Size     00000500 (1280)\n-\n-0C2C15 LOCAL HEADER #226     04034B50 (67324752)\n-0C2C19 Extract Zip Spec      14 (20) '2.0'\n-0C2C1A Extract OS            00 (0) 'MS-DOS'\n-0C2C1B General Purpose Flag  0000 (0)\n-0C2C1D Compression Method    0000 (0) 'Stored'\n-0C2C1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C2C23 CRC                   00000000 (0)\n-0C2C27 Compressed Size       00000000 (0)\n-0C2C2B Uncompressed Size     00000000 (0)\n-0C2C2F Filename Length       0026 (38)\n-0C2C31 Extra Length          0009 (9)\n-0C2C33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC2C33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C2C59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C2C5B   Length              0005 (5)\n-0C2C5D   Flags               01 (1) 'Modification'\n-0C2C5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C2C62 LOCAL HEADER #227     04034B50 (67324752)\n-0C2C66 Extract Zip Spec      14 (20) '2.0'\n-0C2C67 Extract OS            00 (0) 'MS-DOS'\n-0C2C68 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C2C6A Compression Method    0000 (0) 'Stored'\n-0C2C6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C2C70 CRC                   00000000 (0)\n-0C2C74 Compressed Size       00000000 (0)\n-0C2C78 Uncompressed Size     00000000 (0)\n-0C2C7C Filename Length       003A (58)\n-0C2C7E Extra Length          0009 (9)\n-0C2C80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC2C80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C2CBA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C2CBC   Length              0005 (5)\n-0C2CBE   Flags               01 (1) 'Modification'\n-0C2CBF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C2CC3 PAYLOAD\n-\n-0C358A DATA DESCRIPTOR       08074B50 (134695760)\n-0C358E CRC                   5E930431 (1586693169)\n-0C3592 Compressed Size       000008C7 (2247)\n-0C3596 Uncompressed Size     000008C7 (2247)\n-\n-0C359A LOCAL HEADER #228     04034B50 (67324752)\n-0C359E Extract Zip Spec      14 (20) '2.0'\n-0C359F Extract OS            00 (0) 'MS-DOS'\n-0C35A0 General Purpose Flag  0000 (0)\n-0C35A2 Compression Method    0000 (0) 'Stored'\n-0C35A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C35A8 CRC                   00000000 (0)\n-0C35AC Compressed Size       00000000 (0)\n-0C35B0 Uncompressed Size     00000000 (0)\n-0C35B4 Filename Length       0024 (36)\n-0C35B6 Extra Length          0009 (9)\n-0C35B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC35B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C35DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C35DE   Length              0005 (5)\n-0C35E0   Flags               01 (1) 'Modification'\n-0C35E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C35E5 LOCAL HEADER #229     04034B50 (67324752)\n-0C35E9 Extract Zip Spec      14 (20) '2.0'\n-0C35EA Extract OS            00 (0) 'MS-DOS'\n-0C35EB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C35ED Compression Method    0000 (0) 'Stored'\n-0C35EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C35F3 CRC                   00000000 (0)\n-0C35F7 Compressed Size       00000000 (0)\n-0C35FB Uncompressed Size     00000000 (0)\n-0C35FF Filename Length       0039 (57)\n-0C3601 Extra Length          0009 (9)\n-0C3603 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC3603: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C363C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C363E   Length              0005 (5)\n-0C3640   Flags               01 (1) 'Modification'\n-0C3641   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C3645 PAYLOAD\n-\n-0C3D7E DATA DESCRIPTOR       08074B50 (134695760)\n-0C3D82 CRC                   54C421FF (1422139903)\n-0C3D86 Compressed Size       00000739 (1849)\n-0C3D8A Uncompressed Size     00000739 (1849)\n-\n-0C3D8E LOCAL HEADER #230     04034B50 (67324752)\n-0C3D92 Extract Zip Spec      14 (20) '2.0'\n-0C3D93 Extract OS            00 (0) 'MS-DOS'\n-0C3D94 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C3D96 Compression Method    0000 (0) 'Stored'\n-0C3D98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C3D9C CRC                   00000000 (0)\n-0C3DA0 Compressed Size       00000000 (0)\n-0C3DA4 Uncompressed Size     00000000 (0)\n-0C3DA8 Filename Length       0037 (55)\n-0C3DAA Extra Length          0009 (9)\n-0C3DAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC3DAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C3DE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C3DE5   Length              0005 (5)\n-0C3DE7   Flags               01 (1) 'Modification'\n-0C3DE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C3DEC PAYLOAD\n-\n-0C4779 DATA DESCRIPTOR       08074B50 (134695760)\n-0C477D CRC                   DFEE0135 (3756917045)\n-0C4781 Compressed Size       0000098D (2445)\n-0C4785 Uncompressed Size     0000098D (2445)\n-\n-0C4789 LOCAL HEADER #231     04034B50 (67324752)\n-0C478D Extract Zip Spec      14 (20) '2.0'\n-0C478E Extract OS            00 (0) 'MS-DOS'\n-0C478F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C4791 Compression Method    0000 (0) 'Stored'\n-0C4793 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C4797 CRC                   00000000 (0)\n-0C479B Compressed Size       00000000 (0)\n-0C479F Uncompressed Size     00000000 (0)\n-0C47A3 Filename Length       003C (60)\n-0C47A5 Extra Length          0009 (9)\n-0C47A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC47A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C47E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C47E5   Length              0005 (5)\n-0C47E7   Flags               01 (1) 'Modification'\n-0C47E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C47EC PAYLOAD\n-\n-0C62E4 DATA DESCRIPTOR       08074B50 (134695760)\n-0C62E8 CRC                   F7472DA9 (4148637097)\n-0C62EC Compressed Size       00001AF8 (6904)\n-0C62F0 Uncompressed Size     00001AF8 (6904)\n-\n-0C62F4 LOCAL HEADER #232     04034B50 (67324752)\n-0C62F8 Extract Zip Spec      14 (20) '2.0'\n-0C62F9 Extract OS            00 (0) 'MS-DOS'\n-0C62FA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C62FC Compression Method    0000 (0) 'Stored'\n-0C62FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C6302 CRC                   00000000 (0)\n-0C6306 Compressed Size       00000000 (0)\n-0C630A Uncompressed Size     00000000 (0)\n-0C630E Filename Length       003F (63)\n-0C6310 Extra Length          0009 (9)\n-0C6312 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC6312: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C6351 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C6353   Length              0005 (5)\n-0C6355   Flags               01 (1) 'Modification'\n-0C6356   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C635A PAYLOAD\n-\n-0C78B2 DATA DESCRIPTOR       08074B50 (134695760)\n-0C78B6 CRC                   17B25B54 (397564756)\n-0C78BA Compressed Size       00001558 (5464)\n-0C78BE Uncompressed Size     00001558 (5464)\n-\n-0C78C2 LOCAL HEADER #233     04034B50 (67324752)\n-0C78C6 Extract Zip Spec      14 (20) '2.0'\n-0C78C7 Extract OS            00 (0) 'MS-DOS'\n-0C78C8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C78CA Compression Method    0000 (0) 'Stored'\n-0C78CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C78D0 CRC                   00000000 (0)\n-0C78D4 Compressed Size       00000000 (0)\n-0C78D8 Uncompressed Size     00000000 (0)\n-0C78DC Filename Length       0043 (67)\n-0C78DE Extra Length          0009 (9)\n-0C78E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC78E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C7923 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C7925   Length              0005 (5)\n-0C7927   Flags               01 (1) 'Modification'\n-0C7928   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C792C PAYLOAD\n-\n-0C7F8A DATA DESCRIPTOR       08074B50 (134695760)\n-0C7F8E CRC                   9C1B711A (2619044122)\n-0C7F92 Compressed Size       0000065E (1630)\n-0C7F96 Uncompressed Size     0000065E (1630)\n-\n-0C7F9A LOCAL HEADER #234     04034B50 (67324752)\n-0C7F9E Extract Zip Spec      14 (20) '2.0'\n-0C7F9F Extract OS            00 (0) 'MS-DOS'\n-0C7FA0 General Purpose Flag  0000 (0)\n-0C7FA2 Compression Method    0000 (0) 'Stored'\n-0C7FA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C7FA8 CRC                   00000000 (0)\n-0C7FAC Compressed Size       00000000 (0)\n-0C7FB0 Uncompressed Size     00000000 (0)\n-0C7FB4 Filename Length       0023 (35)\n-0C7FB6 Extra Length          0009 (9)\n-0C7FB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC7FB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C7FDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C7FDD   Length              0005 (5)\n-0C7FDF   Flags               01 (1) 'Modification'\n-0C7FE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C7FE4 LOCAL HEADER #235     04034B50 (67324752)\n-0C7FE8 Extract Zip Spec      14 (20) '2.0'\n-0C7FE9 Extract OS            00 (0) 'MS-DOS'\n-0C7FEA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C7FEC Compression Method    0000 (0) 'Stored'\n-0C7FEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C7FF2 CRC                   00000000 (0)\n-0C7FF6 Compressed Size       00000000 (0)\n-0C7FFA Uncompressed Size     00000000 (0)\n-0C7FFE Filename Length       0032 (50)\n-0C8000 Extra Length          0009 (9)\n-0C8002 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC8002: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C8034 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C8036   Length              0005 (5)\n-0C8038   Flags               01 (1) 'Modification'\n-0C8039   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C803D PAYLOAD\n-\n-0C8588 DATA DESCRIPTOR       08074B50 (134695760)\n-0C858C CRC                   8247BF31 (2185740081)\n-0C8590 Compressed Size       0000054B (1355)\n-0C8594 Uncompressed Size     0000054B (1355)\n-\n-0C8598 LOCAL HEADER #236     04034B50 (67324752)\n-0C859C Extract Zip Spec      14 (20) '2.0'\n-0C859D Extract OS            00 (0) 'MS-DOS'\n-0C859E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C85A0 Compression Method    0000 (0) 'Stored'\n-0C85A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C85A6 CRC                   00000000 (0)\n-0C85AA Compressed Size       00000000 (0)\n-0C85AE Uncompressed Size     00000000 (0)\n-0C85B2 Filename Length       003A (58)\n-0C85B4 Extra Length          0009 (9)\n-0C85B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC85B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C85F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C85F2   Length              0005 (5)\n-0C85F4   Flags               01 (1) 'Modification'\n-0C85F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C85F9 PAYLOAD\n-\n-0CA08E DATA DESCRIPTOR       08074B50 (134695760)\n-0CA092 CRC                   8DDA963E (2379912766)\n-0CA096 Compressed Size       00001A95 (6805)\n-0CA09A Uncompressed Size     00001A95 (6805)\n-\n-0CA09E LOCAL HEADER #237     04034B50 (67324752)\n-0CA0A2 Extract Zip Spec      14 (20) '2.0'\n-0CA0A3 Extract OS            00 (0) 'MS-DOS'\n-0CA0A4 General Purpose Flag  0000 (0)\n-0CA0A6 Compression Method    0000 (0) 'Stored'\n-0CA0A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CA0AC CRC                   00000000 (0)\n-0CA0B0 Compressed Size       00000000 (0)\n-0CA0B4 Uncompressed Size     00000000 (0)\n-0CA0B8 Filename Length       002E (46)\n-0CA0BA Extra Length          0009 (9)\n-0CA0BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCA0BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CA0EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CA0EC   Length              0005 (5)\n-0CA0EE   Flags               01 (1) 'Modification'\n-0CA0EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CA0F3 LOCAL HEADER #238     04034B50 (67324752)\n-0CA0F7 Extract Zip Spec      14 (20) '2.0'\n-0CA0F8 Extract OS            00 (0) 'MS-DOS'\n-0CA0F9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CA0FB Compression Method    0000 (0) 'Stored'\n-0CA0FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CA101 CRC                   00000000 (0)\n-0CA105 Compressed Size       00000000 (0)\n-0CA109 Uncompressed Size     00000000 (0)\n-0CA10D Filename Length       004D (77)\n-0CA10F Extra Length          0009 (9)\n-0CA111 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCA111: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CA15E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CA160   Length              0005 (5)\n-0CA162   Flags               01 (1) 'Modification'\n-0CA163   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CA167 PAYLOAD\n-\n-0CAA73 DATA DESCRIPTOR       08074B50 (134695760)\n-0CAA77 CRC                   A445CFD0 (2756038608)\n-0CAA7B Compressed Size       0000090C (2316)\n-0CAA7F Uncompressed Size     0000090C (2316)\n-\n-0CAA83 LOCAL HEADER #239     04034B50 (67324752)\n-0CAA87 Extract Zip Spec      14 (20) '2.0'\n-0CAA88 Extract OS            00 (0) 'MS-DOS'\n-0CAA89 General Purpose Flag  0000 (0)\n-0CAA8B Compression Method    0000 (0) 'Stored'\n-0CAA8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CAA91 CRC                   00000000 (0)\n-0CAA95 Compressed Size       00000000 (0)\n-0CAA99 Uncompressed Size     00000000 (0)\n-0CAA9D Filename Length       0029 (41)\n-0CAA9F Extra Length          0009 (9)\n-0CAAA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCAAA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CAACA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CAACC   Length              0005 (5)\n-0CAACE   Flags               01 (1) 'Modification'\n-0CAACF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CAAD3 LOCAL HEADER #240     04034B50 (67324752)\n-0CAAD7 Extract Zip Spec      14 (20) '2.0'\n-0CAAD8 Extract OS            00 (0) 'MS-DOS'\n-0CAAD9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CAADB Compression Method    0000 (0) 'Stored'\n-0CAADD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CAAE1 CRC                   00000000 (0)\n-0CAAE5 Compressed Size       00000000 (0)\n-0CAAE9 Uncompressed Size     00000000 (0)\n-0CAAED Filename Length       0046 (70)\n-0CAAEF Extra Length          0009 (9)\n-0CAAF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCAAF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CAB37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CAB39   Length              0005 (5)\n-0CAB3B   Flags               01 (1) 'Modification'\n-0CAB3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CAB40 PAYLOAD\n-\n-0CB01B DATA DESCRIPTOR       08074B50 (134695760)\n-0CB01F CRC                   0A4E202C (172892204)\n-0CB023 Compressed Size       000004DB (1243)\n-0CB027 Uncompressed Size     000004DB (1243)\n-\n-0CB02B LOCAL HEADER #241     04034B50 (67324752)\n-0CB02F Extract Zip Spec      14 (20) '2.0'\n-0CB030 Extract OS            00 (0) 'MS-DOS'\n-0CB031 General Purpose Flag  0000 (0)\n-0CB033 Compression Method    0000 (0) 'Stored'\n-0CB035 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CB039 CRC                   00000000 (0)\n-0CB03D Compressed Size       00000000 (0)\n-0CB041 Uncompressed Size     00000000 (0)\n-0CB045 Filename Length       002B (43)\n-0CB047 Extra Length          0009 (9)\n-0CB049 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCB049: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CB074 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CB076   Length              0005 (5)\n-0CB078   Flags               01 (1) 'Modification'\n-0CB079   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CB07D LOCAL HEADER #242     04034B50 (67324752)\n-0CB081 Extract Zip Spec      14 (20) '2.0'\n-0CB082 Extract OS            00 (0) 'MS-DOS'\n-0CB083 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CB085 Compression Method    0000 (0) 'Stored'\n-0CB087 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CB08B CRC                   00000000 (0)\n-0CB08F Compressed Size       00000000 (0)\n-0CB093 Uncompressed Size     00000000 (0)\n-0CB097 Filename Length       0049 (73)\n-0CB099 Extra Length          0009 (9)\n-0CB09B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCB09B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CB0E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CB0E6   Length              0005 (5)\n-0CB0E8   Flags               01 (1) 'Modification'\n-0CB0E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CB0ED PAYLOAD\n-\n-0CCF1D DATA DESCRIPTOR       08074B50 (134695760)\n-0CCF21 CRC                   6D3F9D1E (1832885534)\n-0CCF25 Compressed Size       00001E30 (7728)\n-0CCF29 Uncompressed Size     00001E30 (7728)\n-\n-0CCF2D LOCAL HEADER #243     04034B50 (67324752)\n-0CCF31 Extract Zip Spec      14 (20) '2.0'\n-0CCF32 Extract OS            00 (0) 'MS-DOS'\n-0CCF33 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CCF35 Compression Method    0000 (0) 'Stored'\n-0CCF37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CCF3B CRC                   00000000 (0)\n-0CCF3F Compressed Size       00000000 (0)\n-0CCF43 Uncompressed Size     00000000 (0)\n-0CCF47 Filename Length       0042 (66)\n-0CCF49 Extra Length          0009 (9)\n-0CCF4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCCF4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CCF8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CCF8F   Length              0005 (5)\n-0CCF91   Flags               01 (1) 'Modification'\n-0CCF92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CCF96 PAYLOAD\n-\n-0CD8AF DATA DESCRIPTOR       08074B50 (134695760)\n-0CD8B3 CRC                   355480AB (894730411)\n-0CD8B7 Compressed Size       00000919 (2329)\n-0CD8BB Uncompressed Size     00000919 (2329)\n-\n-0CD8BF LOCAL HEADER #244     04034B50 (67324752)\n-0CD8C3 Extract Zip Spec      14 (20) '2.0'\n-0CD8C4 Extract OS            00 (0) 'MS-DOS'\n-0CD8C5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CD8C7 Compression Method    0000 (0) 'Stored'\n-0CD8C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CD8CD CRC                   00000000 (0)\n-0CD8D1 Compressed Size       00000000 (0)\n-0CD8D5 Uncompressed Size     00000000 (0)\n-0CD8D9 Filename Length       0034 (52)\n-0CD8DB Extra Length          0009 (9)\n-0CD8DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCD8DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CD911 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CD913   Length              0005 (5)\n-0CD915   Flags               01 (1) 'Modification'\n-0CD916   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CD91A PAYLOAD\n-\n-0CE114 DATA DESCRIPTOR       08074B50 (134695760)\n-0CE118 CRC                   47FCDE13 (1207754259)\n-0CE11C Compressed Size       000007FA (2042)\n-0CE120 Uncompressed Size     000007FA (2042)\n-\n-0CE124 LOCAL HEADER #245     04034B50 (67324752)\n-0CE128 Extract Zip Spec      14 (20) '2.0'\n-0CE129 Extract OS            00 (0) 'MS-DOS'\n-0CE12A General Purpose Flag  0000 (0)\n-0CE12C Compression Method    0000 (0) 'Stored'\n-0CE12E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CE132 CRC                   00000000 (0)\n-0CE136 Compressed Size       00000000 (0)\n-0CE13A Uncompressed Size     00000000 (0)\n-0CE13E Filename Length       002B (43)\n-0CE140 Extra Length          0009 (9)\n-0CE142 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCE142: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CE16D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CE16F   Length              0005 (5)\n-0CE171   Flags               01 (1) 'Modification'\n-0CE172   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CE176 LOCAL HEADER #246     04034B50 (67324752)\n-0CE17A Extract Zip Spec      14 (20) '2.0'\n-0CE17B Extract OS            00 (0) 'MS-DOS'\n-0CE17C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CE17E Compression Method    0000 (0) 'Stored'\n-0CE180 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CE184 CRC                   00000000 (0)\n-0CE188 Compressed Size       00000000 (0)\n-0CE18C Uncompressed Size     00000000 (0)\n-0CE190 Filename Length       0045 (69)\n-0CE192 Extra Length          0009 (9)\n-0CE194 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCE194: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CE1D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CE1DB   Length              0005 (5)\n-0CE1DD   Flags               01 (1) 'Modification'\n-0CE1DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CE1E2 PAYLOAD\n-\n-0CF949 DATA DESCRIPTOR       08074B50 (134695760)\n-0CF94D CRC                   A9E4FF87 (2850357127)\n-0CF951 Compressed Size       00001767 (5991)\n-0CF955 Uncompressed Size     00001767 (5991)\n-\n-0CF959 LOCAL HEADER #247     04034B50 (67324752)\n-0CF95D Extract Zip Spec      14 (20) '2.0'\n-0CF95E Extract OS            00 (0) 'MS-DOS'\n-0CF95F General Purpose Flag  0000 (0)\n-0CF961 Compression Method    0000 (0) 'Stored'\n-0CF963 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CF967 CRC                   00000000 (0)\n-0CF96B Compressed Size       00000000 (0)\n-0CF96F Uncompressed Size     00000000 (0)\n-0CF973 Filename Length       0032 (50)\n-0CF975 Extra Length          0009 (9)\n-0CF977 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCF977: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CF9A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CF9AB   Length              0005 (5)\n-0CF9AD   Flags               01 (1) 'Modification'\n-0CF9AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CF9B2 LOCAL HEADER #248     04034B50 (67324752)\n-0CF9B6 Extract Zip Spec      14 (20) '2.0'\n-0CF9B7 Extract OS            00 (0) 'MS-DOS'\n-0CF9B8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CF9BA Compression Method    0000 (0) 'Stored'\n-0CF9BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CF9C0 CRC                   00000000 (0)\n-0CF9C4 Compressed Size       00000000 (0)\n-0CF9C8 Uncompressed Size     00000000 (0)\n-0CF9CC Filename Length       0047 (71)\n-0CF9CE Extra Length          0009 (9)\n-0CF9D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCF9D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CFA17 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CFA19   Length              0005 (5)\n-0CFA1B   Flags               01 (1) 'Modification'\n-0CFA1C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CFA20 PAYLOAD\n-\n-0D069D DATA DESCRIPTOR       08074B50 (134695760)\n-0D06A1 CRC                   7C2CDC15 (2083314709)\n-0D06A5 Compressed Size       00000C7D (3197)\n-0D06A9 Uncompressed Size     00000C7D (3197)\n-\n-0D06AD LOCAL HEADER #249     04034B50 (67324752)\n-0D06B1 Extract Zip Spec      14 (20) '2.0'\n-0D06B2 Extract OS            00 (0) 'MS-DOS'\n-0D06B3 General Purpose Flag  0000 (0)\n-0D06B5 Compression Method    0000 (0) 'Stored'\n-0D06B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D06BB CRC                   00000000 (0)\n-0D06BF Compressed Size       00000000 (0)\n-0D06C3 Uncompressed Size     00000000 (0)\n-0D06C7 Filename Length       0031 (49)\n-0D06C9 Extra Length          0009 (9)\n-0D06CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD06CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D06FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D06FE   Length              0005 (5)\n-0D0700   Flags               01 (1) 'Modification'\n-0D0701   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D0705 LOCAL HEADER #250     04034B50 (67324752)\n-0D0709 Extract Zip Spec      14 (20) '2.0'\n-0D070A Extract OS            00 (0) 'MS-DOS'\n-0D070B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D070D Compression Method    0000 (0) 'Stored'\n-0D070F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D0713 CRC                   00000000 (0)\n-0D0717 Compressed Size       00000000 (0)\n-0D071B Uncompressed Size     00000000 (0)\n-0D071F Filename Length       0045 (69)\n-0D0721 Extra Length          0009 (9)\n-0D0723 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD0723: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D0768 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D076A   Length              0005 (5)\n-0D076C   Flags               01 (1) 'Modification'\n-0D076D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D0771 PAYLOAD\n-\n-0D1332 DATA DESCRIPTOR       08074B50 (134695760)\n-0D1336 CRC                   DF3FC6E9 (3745498857)\n-0D133A Compressed Size       00000BC1 (3009)\n-0D133E Uncompressed Size     00000BC1 (3009)\n-\n-0D1342 LOCAL HEADER #251     04034B50 (67324752)\n-0D1346 Extract Zip Spec      14 (20) '2.0'\n-0D1347 Extract OS            00 (0) 'MS-DOS'\n-0D1348 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D134A Compression Method    0000 (0) 'Stored'\n-0D134C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D1350 CRC                   00000000 (0)\n-0D1354 Compressed Size       00000000 (0)\n-0D1358 Uncompressed Size     00000000 (0)\n-0D135C Filename Length       004D (77)\n-0D135E Extra Length          0009 (9)\n-0D1360 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD1360: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D13AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D13AF   Length              0005 (5)\n-0D13B1   Flags               01 (1) 'Modification'\n-0D13B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D13B6 PAYLOAD\n-\n-0D2074 DATA DESCRIPTOR       08074B50 (134695760)\n-0D2078 CRC                   B7E8049A (3085436058)\n-0D207C Compressed Size       00000CBE (3262)\n-0D2080 Uncompressed Size     00000CBE (3262)\n-\n-0D2084 LOCAL HEADER #252     04034B50 (67324752)\n-0D2088 Extract Zip Spec      14 (20) '2.0'\n-0D2089 Extract OS            00 (0) 'MS-DOS'\n-0D208A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D208C Compression Method    0000 (0) 'Stored'\n-0D208E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D2092 CRC                   00000000 (0)\n-0D2096 Compressed Size       00000000 (0)\n-0D209A Uncompressed Size     00000000 (0)\n-0D209E Filename Length       003F (63)\n-0D20A0 Extra Length          0009 (9)\n-0D20A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD20A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D20E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D20E3   Length              0005 (5)\n-0D20E5   Flags               01 (1) 'Modification'\n-0D20E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D20EA PAYLOAD\n-\n-0D2C71 DATA DESCRIPTOR       08074B50 (134695760)\n-0D2C75 CRC                   365FEBC7 (912255943)\n-0D2C79 Compressed Size       00000B87 (2951)\n-0D2C7D Uncompressed Size     00000B87 (2951)\n-\n-0D2C81 LOCAL HEADER #253     04034B50 (67324752)\n-0D2C85 Extract Zip Spec      14 (20) '2.0'\n-0D2C86 Extract OS            00 (0) 'MS-DOS'\n-0D2C87 General Purpose Flag  0000 (0)\n-0D2C89 Compression Method    0000 (0) 'Stored'\n-0D2C8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D2C8F CRC                   00000000 (0)\n-0D2C93 Compressed Size       00000000 (0)\n-0D2C97 Uncompressed Size     00000000 (0)\n-0D2C9B Filename Length       0031 (49)\n-0D2C9D Extra Length          0009 (9)\n-0D2C9F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD2C9F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D2CD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D2CD2   Length              0005 (5)\n-0D2CD4   Flags               01 (1) 'Modification'\n-0D2CD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D2CD9 LOCAL HEADER #254     04034B50 (67324752)\n-0D2CDD Extract Zip Spec      14 (20) '2.0'\n-0D2CDE Extract OS            00 (0) 'MS-DOS'\n-0D2CDF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D2CE1 Compression Method    0000 (0) 'Stored'\n-0D2CE3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D2CE7 CRC                   00000000 (0)\n-0D2CEB Compressed Size       00000000 (0)\n-0D2CEF Uncompressed Size     00000000 (0)\n-0D2CF3 Filename Length       0045 (69)\n-0D2CF5 Extra Length          0009 (9)\n-0D2CF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD2CF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D2D3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D2D3E   Length              0005 (5)\n-0D2D40   Flags               01 (1) 'Modification'\n-0D2D41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D2D45 PAYLOAD\n-\n-0D37E8 DATA DESCRIPTOR       08074B50 (134695760)\n-0D37EC CRC                   3EDDC0EF (1054720239)\n-0D37F0 Compressed Size       00000AA3 (2723)\n-0D37F4 Uncompressed Size     00000AA3 (2723)\n-\n-0D37F8 LOCAL HEADER #255     04034B50 (67324752)\n-0D37FC Extract Zip Spec      14 (20) '2.0'\n-0D37FD Extract OS            00 (0) 'MS-DOS'\n-0D37FE General Purpose Flag  0000 (0)\n-0D3800 Compression Method    0000 (0) 'Stored'\n-0D3802 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D3806 CRC                   00000000 (0)\n-0D380A Compressed Size       00000000 (0)\n-0D380E Uncompressed Size     00000000 (0)\n-0D3812 Filename Length       0033 (51)\n-0D3814 Extra Length          0009 (9)\n-0D3816 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD3816: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D3849 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D384B   Length              0005 (5)\n-0D384D   Flags               01 (1) 'Modification'\n-0D384E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D3852 LOCAL HEADER #256     04034B50 (67324752)\n-0D3856 Extract Zip Spec      14 (20) '2.0'\n-0D3857 Extract OS            00 (0) 'MS-DOS'\n-0D3858 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D385A Compression Method    0000 (0) 'Stored'\n-0D385C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D3860 CRC                   00000000 (0)\n-0D3864 Compressed Size       00000000 (0)\n-0D3868 Uncompressed Size     00000000 (0)\n-0D386C Filename Length       0049 (73)\n-0D386E Extra Length          0009 (9)\n-0D3870 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD3870: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D38B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D38BB   Length              0005 (5)\n-0D38BD   Flags               01 (1) 'Modification'\n-0D38BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D38C2 PAYLOAD\n-\n-0D4437 DATA DESCRIPTOR       08074B50 (134695760)\n-0D443B CRC                   25691E02 (627645954)\n-0D443F Compressed Size       00000B75 (2933)\n-0D4443 Uncompressed Size     00000B75 (2933)\n-\n-0D4447 LOCAL HEADER #257     04034B50 (67324752)\n-0D444B Extract Zip Spec      14 (20) '2.0'\n-0D444C Extract OS            00 (0) 'MS-DOS'\n-0D444D General Purpose Flag  0000 (0)\n-0D444F Compression Method    0000 (0) 'Stored'\n-0D4451 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D4455 CRC                   00000000 (0)\n-0D4459 Compressed Size       00000000 (0)\n-0D445D Uncompressed Size     00000000 (0)\n-0D4461 Filename Length       001E (30)\n-0D4463 Extra Length          0009 (9)\n-0D4465 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD4465: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D4483 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D4485   Length              0005 (5)\n-0D4487   Flags               01 (1) 'Modification'\n-0D4488   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D448C LOCAL HEADER #258     04034B50 (67324752)\n-0D4490 Extract Zip Spec      14 (20) '2.0'\n-0D4491 Extract OS            00 (0) 'MS-DOS'\n-0D4492 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D4494 Compression Method    0000 (0) 'Stored'\n-0D4496 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D449A CRC                   00000000 (0)\n-0D449E Compressed Size       00000000 (0)\n-0D44A2 Uncompressed Size     00000000 (0)\n-0D44A6 Filename Length       0033 (51)\n-0D44A8 Extra Length          0009 (9)\n-0D44AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD44AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D44DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D44DF   Length              0005 (5)\n-0D44E1   Flags               01 (1) 'Modification'\n-0D44E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D44E6 PAYLOAD\n-\n-0DBE9F DATA DESCRIPTOR       08074B50 (134695760)\n-0DBEA3 CRC                   15C91CF2 (365501682)\n-0DBEA7 Compressed Size       000079B9 (31161)\n-0DBEAB Uncompressed Size     000079B9 (31161)\n-\n-0DBEAF LOCAL HEADER #259     04034B50 (67324752)\n-0DBEB3 Extract Zip Spec      14 (20) '2.0'\n-0DBEB4 Extract OS            00 (0) 'MS-DOS'\n-0DBEB5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DBEB7 Compression Method    0000 (0) 'Stored'\n-0DBEB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DBEBD CRC                   00000000 (0)\n-0DBEC1 Compressed Size       00000000 (0)\n-0DBEC5 Uncompressed Size     00000000 (0)\n-0DBEC9 Filename Length       002A (42)\n-0DBECB Extra Length          0009 (9)\n-0DBECD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDBECD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DBEF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DBEF9   Length              0005 (5)\n-0DBEFB   Flags               01 (1) 'Modification'\n-0DBEFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DBF00 PAYLOAD\n-\n-0DC59C DATA DESCRIPTOR       08074B50 (134695760)\n-0DC5A0 CRC                   896B8386 (2305524614)\n-0DC5A4 Compressed Size       0000069C (1692)\n-0DC5A8 Uncompressed Size     0000069C (1692)\n-\n-0DC5AC LOCAL HEADER #260     04034B50 (67324752)\n-0DC5B0 Extract Zip Spec      14 (20) '2.0'\n-0DC5B1 Extract OS            00 (0) 'MS-DOS'\n-0DC5B2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DC5B4 Compression Method    0000 (0) 'Stored'\n-0DC5B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DC5BA CRC                   00000000 (0)\n-0DC5BE Compressed Size       00000000 (0)\n-0DC5C2 Uncompressed Size     00000000 (0)\n-0DC5C6 Filename Length       0028 (40)\n-0DC5C8 Extra Length          0009 (9)\n-0DC5CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDC5CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DC5F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DC5F4   Length              0005 (5)\n-0DC5F6   Flags               01 (1) 'Modification'\n-0DC5F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DC5FB PAYLOAD\n-\n-0DCD64 DATA DESCRIPTOR       08074B50 (134695760)\n-0DCD68 CRC                   2D8D7FE9 (764248041)\n-0DCD6C Compressed Size       00000769 (1897)\n-0DCD70 Uncompressed Size     00000769 (1897)\n-\n-0DCD74 LOCAL HEADER #261     04034B50 (67324752)\n-0DCD78 Extract Zip Spec      14 (20) '2.0'\n-0DCD79 Extract OS            00 (0) 'MS-DOS'\n-0DCD7A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DCD7C Compression Method    0000 (0) 'Stored'\n-0DCD7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DCD82 CRC                   00000000 (0)\n-0DCD86 Compressed Size       00000000 (0)\n-0DCD8A Uncompressed Size     00000000 (0)\n-0DCD8E Filename Length       002C (44)\n-0DCD90 Extra Length          0009 (9)\n-0DCD92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDCD92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DCDBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DCDC0   Length              0005 (5)\n-0DCDC2   Flags               01 (1) 'Modification'\n-0DCDC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DCDC7 PAYLOAD\n-\n-0DD25E DATA DESCRIPTOR       08074B50 (134695760)\n-0DD262 CRC                   E9761FB8 (3916832696)\n-0DD266 Compressed Size       00000497 (1175)\n-0DD26A Uncompressed Size     00000497 (1175)\n-\n-0DD26E LOCAL HEADER #262     04034B50 (67324752)\n-0DD272 Extract Zip Spec      14 (20) '2.0'\n-0DD273 Extract OS            00 (0) 'MS-DOS'\n-0DD274 General Purpose Flag  0000 (0)\n-0DD276 Compression Method    0000 (0) 'Stored'\n-0DD278 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DD27C CRC                   00000000 (0)\n-0DD280 Compressed Size       00000000 (0)\n-0DD284 Uncompressed Size     00000000 (0)\n-0DD288 Filename Length       001E (30)\n-0DD28A Extra Length          0009 (9)\n-0DD28C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDD28C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DD2AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DD2AC   Length              0005 (5)\n-0DD2AE   Flags               01 (1) 'Modification'\n-0DD2AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DD2B3 LOCAL HEADER #263     04034B50 (67324752)\n-0DD2B7 Extract Zip Spec      14 (20) '2.0'\n-0DD2B8 Extract OS            00 (0) 'MS-DOS'\n-0DD2B9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DD2BB Compression Method    0000 (0) 'Stored'\n-0DD2BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DD2C1 CRC                   00000000 (0)\n-0DD2C5 Compressed Size       00000000 (0)\n-0DD2C9 Uncompressed Size     00000000 (0)\n-0DD2CD Filename Length       0032 (50)\n-0DD2CF Extra Length          0009 (9)\n-0DD2D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDD2D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DD303 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DD305   Length              0005 (5)\n-0DD307   Flags               01 (1) 'Modification'\n-0DD308   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DD30C PAYLOAD\n-\n-0E2611 DATA DESCRIPTOR       08074B50 (134695760)\n-0E2615 CRC                   24647E40 (610565696)\n-0E2619 Compressed Size       00005305 (21253)\n-0E261D Uncompressed Size     00005305 (21253)\n-\n-0E2621 LOCAL HEADER #264     04034B50 (67324752)\n-0E2625 Extract Zip Spec      14 (20) '2.0'\n-0E2626 Extract OS            00 (0) 'MS-DOS'\n-0E2627 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E2629 Compression Method    0000 (0) 'Stored'\n-0E262B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E262F CRC                   00000000 (0)\n-0E2633 Compressed Size       00000000 (0)\n-0E2637 Uncompressed Size     00000000 (0)\n-0E263B Filename Length       002D (45)\n-0E263D Extra Length          0009 (9)\n-0E263F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE263F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E266C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E266E   Length              0005 (5)\n-0E2670   Flags               01 (1) 'Modification'\n-0E2671   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E2675 PAYLOAD\n-\n-0E2FAB DATA DESCRIPTOR       08074B50 (134695760)\n-0E2FAF CRC                   9612E24D (2517819981)\n-0E2FB3 Compressed Size       00000936 (2358)\n-0E2FB7 Uncompressed Size     00000936 (2358)\n-\n-0E2FBB LOCAL HEADER #265     04034B50 (67324752)\n-0E2FBF Extract Zip Spec      14 (20) '2.0'\n-0E2FC0 Extract OS            00 (0) 'MS-DOS'\n-0E2FC1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E2FC3 Compression Method    0000 (0) 'Stored'\n-0E2FC5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E2FC9 CRC                   00000000 (0)\n-0E2FCD Compressed Size       00000000 (0)\n-0E2FD1 Uncompressed Size     00000000 (0)\n-0E2FD5 Filename Length       0029 (41)\n-0E2FD7 Extra Length          0009 (9)\n-0E2FD9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE2FD9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E3002 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E3004   Length              0005 (5)\n-0E3006   Flags               01 (1) 'Modification'\n-0E3007   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E300B PAYLOAD\n-\n-0E35A9 DATA DESCRIPTOR       08074B50 (134695760)\n-0E35AD CRC                   40170699 (1075250841)\n-0E35B1 Compressed Size       0000059E (1438)\n-0E35B5 Uncompressed Size     0000059E (1438)\n-\n-0E35B9 LOCAL HEADER #266     04034B50 (67324752)\n-0E35BD Extract Zip Spec      14 (20) '2.0'\n-0E35BE Extract OS            00 (0) 'MS-DOS'\n-0E35BF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E35C1 Compression Method    0000 (0) 'Stored'\n-0E35C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E35C7 CRC                   00000000 (0)\n-0E35CB Compressed Size       00000000 (0)\n-0E35CF Uncompressed Size     00000000 (0)\n-0E35D3 Filename Length       0038 (56)\n-0E35D5 Extra Length          0009 (9)\n-0E35D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE35D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E360F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E3611   Length              0005 (5)\n-0E3613   Flags               01 (1) 'Modification'\n-0E3614   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E3618 PAYLOAD\n-\n-0E4861 DATA DESCRIPTOR       08074B50 (134695760)\n-0E4865 CRC                   A604EAF8 (2785340152)\n-0E4869 Compressed Size       00001249 (4681)\n-0E486D Uncompressed Size     00001249 (4681)\n-\n-0E4871 LOCAL HEADER #267     04034B50 (67324752)\n-0E4875 Extract Zip Spec      14 (20) '2.0'\n-0E4876 Extract OS            00 (0) 'MS-DOS'\n-0E4877 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E4879 Compression Method    0000 (0) 'Stored'\n-0E487B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E487F CRC                   00000000 (0)\n-0E4883 Compressed Size       00000000 (0)\n-0E4887 Uncompressed Size     00000000 (0)\n-0E488B Filename Length       002C (44)\n-0E488D Extra Length          0009 (9)\n-0E488F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE488F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E48BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E48BD   Length              0005 (5)\n-0E48BF   Flags               01 (1) 'Modification'\n-0E48C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E48C4 PAYLOAD\n-\n-0E5C3E DATA DESCRIPTOR       08074B50 (134695760)\n-0E5C42 CRC                   D7EB77B9 (3622533049)\n-0E5C46 Compressed Size       0000137A (4986)\n-0E5C4A Uncompressed Size     0000137A (4986)\n-\n-0E5C4E LOCAL HEADER #268     04034B50 (67324752)\n-0E5C52 Extract Zip Spec      14 (20) '2.0'\n-0E5C53 Extract OS            00 (0) 'MS-DOS'\n-0E5C54 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E5C56 Compression Method    0000 (0) 'Stored'\n-0E5C58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E5C5C CRC                   00000000 (0)\n-0E5C60 Compressed Size       00000000 (0)\n-0E5C64 Uncompressed Size     00000000 (0)\n-0E5C68 Filename Length       0039 (57)\n-0E5C6A Extra Length          0009 (9)\n-0E5C6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE5C6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E5CA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E5CA7   Length              0005 (5)\n-0E5CA9   Flags               01 (1) 'Modification'\n-0E5CAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E5CAE PAYLOAD\n-\n-0E61BE DATA DESCRIPTOR       08074B50 (134695760)\n-0E61C2 CRC                   95FCA49F (2516362399)\n-0E61C6 Compressed Size       00000510 (1296)\n-0E61CA Uncompressed Size     00000510 (1296)\n-\n-0E61CE LOCAL HEADER #269     04034B50 (67324752)\n-0E61D2 Extract Zip Spec      14 (20) '2.0'\n-0E61D3 Extract OS            00 (0) 'MS-DOS'\n-0E61D4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E61D6 Compression Method    0000 (0) 'Stored'\n-0E61D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E61DC CRC                   00000000 (0)\n-0E61E0 Compressed Size       00000000 (0)\n-0E61E4 Uncompressed Size     00000000 (0)\n-0E61E8 Filename Length       002E (46)\n-0E61EA Extra Length          0009 (9)\n-0E61EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE61EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E621A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E621C   Length              0005 (5)\n-0E621E   Flags               01 (1) 'Modification'\n-0E621F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E6223 PAYLOAD\n-\n-0E77DB DATA DESCRIPTOR       08074B50 (134695760)\n-0E77DF CRC                   EEA257C4 (4003616708)\n-0E77E3 Compressed Size       000015B8 (5560)\n-0E77E7 Uncompressed Size     000015B8 (5560)\n-\n-0E77EB LOCAL HEADER #270     04034B50 (67324752)\n-0E77EF Extract Zip Spec      14 (20) '2.0'\n-0E77F0 Extract OS            00 (0) 'MS-DOS'\n-0E77F1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E77F3 Compression Method    0000 (0) 'Stored'\n-0E77F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E77F9 CRC                   00000000 (0)\n-0E77FD Compressed Size       00000000 (0)\n-0E7801 Uncompressed Size     00000000 (0)\n-0E7805 Filename Length       002D (45)\n-0E7807 Extra Length          0009 (9)\n-0E7809 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE7809: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E7836 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E7838   Length              0005 (5)\n-0E783A   Flags               01 (1) 'Modification'\n-0E783B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E783F PAYLOAD\n-\n-0EBE62 DATA DESCRIPTOR       08074B50 (134695760)\n-0EBE66 CRC                   54F0EEAE (1425075886)\n-0EBE6A Compressed Size       00004623 (17955)\n-0EBE6E Uncompressed Size     00004623 (17955)\n-\n-0EBE72 LOCAL HEADER #271     04034B50 (67324752)\n-0EBE76 Extract Zip Spec      14 (20) '2.0'\n-0EBE77 Extract OS            00 (0) 'MS-DOS'\n-0EBE78 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0EBE7A Compression Method    0000 (0) 'Stored'\n-0EBE7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EBE80 CRC                   00000000 (0)\n-0EBE84 Compressed Size       00000000 (0)\n-0EBE88 Uncompressed Size     00000000 (0)\n-0EBE8C Filename Length       0032 (50)\n-0EBE8E Extra Length          0009 (9)\n-0EBE90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEBE90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EBEC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EBEC4   Length              0005 (5)\n-0EBEC6   Flags               01 (1) 'Modification'\n-0EBEC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EBECB PAYLOAD\n-\n-0EEC2D DATA DESCRIPTOR       08074B50 (134695760)\n-0EEC31 CRC                   49173B6A (1226259306)\n-0EEC35 Compressed Size       00002D62 (11618)\n-0EEC39 Uncompressed Size     00002D62 (11618)\n-\n-0EEC3D LOCAL HEADER #272     04034B50 (67324752)\n-0EEC41 Extract Zip Spec      14 (20) '2.0'\n-0EEC42 Extract OS            00 (0) 'MS-DOS'\n-0EEC43 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0EEC45 Compression Method    0000 (0) 'Stored'\n-0EEC47 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EEC4B CRC                   00000000 (0)\n-0EEC4F Compressed Size       00000000 (0)\n-0EEC53 Uncompressed Size     00000000 (0)\n-0EEC57 Filename Length       0036 (54)\n-0EEC59 Extra Length          0009 (9)\n-0EEC5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEEC5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EEC91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EEC93   Length              0005 (5)\n-0EEC95   Flags               01 (1) 'Modification'\n-0EEC96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EEC9A PAYLOAD\n-\n-0F0FF8 DATA DESCRIPTOR       08074B50 (134695760)\n-0F0FFC CRC                   094FFA20 (156236320)\n-0F1000 Compressed Size       0000235E (9054)\n-0F1004 Uncompressed Size     0000235E (9054)\n-\n-0F1008 LOCAL HEADER #273     04034B50 (67324752)\n-0F100C Extract Zip Spec      14 (20) '2.0'\n-0F100D Extract OS            00 (0) 'MS-DOS'\n-0F100E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F1010 Compression Method    0000 (0) 'Stored'\n-0F1012 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F1016 CRC                   00000000 (0)\n-0F101A Compressed Size       00000000 (0)\n-0F101E Uncompressed Size     00000000 (0)\n-0F1022 Filename Length       0034 (52)\n-0F1024 Extra Length          0009 (9)\n-0F1026 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF1026: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F105A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F105C   Length              0005 (5)\n-0F105E   Flags               01 (1) 'Modification'\n-0F105F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F1063 PAYLOAD\n-\n-0F222C DATA DESCRIPTOR       08074B50 (134695760)\n-0F2230 CRC                   0EFD7C48 (251493448)\n-0F2234 Compressed Size       000011C9 (4553)\n-0F2238 Uncompressed Size     000011C9 (4553)\n-\n-0F223C LOCAL HEADER #274     04034B50 (67324752)\n-0F2240 Extract Zip Spec      14 (20) '2.0'\n-0F2241 Extract OS            00 (0) 'MS-DOS'\n-0F2242 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F2244 Compression Method    0000 (0) 'Stored'\n-0F2246 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F224A CRC                   00000000 (0)\n-0F224E Compressed Size       00000000 (0)\n-0F2252 Uncompressed Size     00000000 (0)\n-0F2256 Filename Length       002E (46)\n-0F2258 Extra Length          0009 (9)\n-0F225A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF225A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F2288 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F228A   Length              0005 (5)\n-0F228C   Flags               01 (1) 'Modification'\n-0F228D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F2291 PAYLOAD\n-\n-0F5246 DATA DESCRIPTOR       08074B50 (134695760)\n-0F524A CRC                   8CFD4A70 (2365409904)\n-0F524E Compressed Size       00002FB5 (12213)\n-0F5252 Uncompressed Size     00002FB5 (12213)\n-\n-0F5256 LOCAL HEADER #275     04034B50 (67324752)\n-0F525A Extract Zip Spec      14 (20) '2.0'\n-0F525B Extract OS            00 (0) 'MS-DOS'\n-0F525C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F525E Compression Method    0000 (0) 'Stored'\n-0F5260 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F5264 CRC                   00000000 (0)\n-0F5268 Compressed Size       00000000 (0)\n-0F526C Uncompressed Size     00000000 (0)\n-0F5270 Filename Length       002E (46)\n-0F5272 Extra Length          0009 (9)\n-0F5274 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF5274: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F52A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F52A4   Length              0005 (5)\n-0F52A6   Flags               01 (1) 'Modification'\n-0F52A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F52AB PAYLOAD\n-\n-0F5B4F DATA DESCRIPTOR       08074B50 (134695760)\n-0F5B53 CRC                   81A24999 (2174896537)\n-0F5B57 Compressed Size       000008A4 (2212)\n-0F5B5B Uncompressed Size     000008A4 (2212)\n-\n-0F5B5F LOCAL HEADER #276     04034B50 (67324752)\n-0F5B63 Extract Zip Spec      14 (20) '2.0'\n-0F5B64 Extract OS            00 (0) 'MS-DOS'\n-0F5B65 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F5B67 Compression Method    0000 (0) 'Stored'\n-0F5B69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F5B6D CRC                   00000000 (0)\n-0F5B71 Compressed Size       00000000 (0)\n-0F5B75 Uncompressed Size     00000000 (0)\n-0F5B79 Filename Length       0030 (48)\n-0F5B7B Extra Length          0009 (9)\n-0F5B7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF5B7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F5BAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F5BAF   Length              0005 (5)\n-0F5BB1   Flags               01 (1) 'Modification'\n-0F5BB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F5BB6 PAYLOAD\n-\n-0F63C5 DATA DESCRIPTOR       08074B50 (134695760)\n-0F63C9 CRC                   831A7179 (2199548281)\n-0F63CD Compressed Size       0000080F (2063)\n-0F63D1 Uncompressed Size     0000080F (2063)\n-\n-0F63D5 LOCAL HEADER #277     04034B50 (67324752)\n-0F63D9 Extract Zip Spec      14 (20) '2.0'\n-0F63DA Extract OS            00 (0) 'MS-DOS'\n-0F63DB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F63DD Compression Method    0000 (0) 'Stored'\n-0F63DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F63E3 CRC                   00000000 (0)\n-0F63E7 Compressed Size       00000000 (0)\n-0F63EB Uncompressed Size     00000000 (0)\n-0F63EF Filename Length       002F (47)\n-0F63F1 Extra Length          0009 (9)\n-0F63F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF63F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F6422 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F6424   Length              0005 (5)\n-0F6426   Flags               01 (1) 'Modification'\n-0F6427   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F642B PAYLOAD\n-\n-0F7868 DATA DESCRIPTOR       08074B50 (134695760)\n-0F786C CRC                   7319AF3E (1931063102)\n-0F7870 Compressed Size       0000143D (5181)\n-0F7874 Uncompressed Size     0000143D (5181)\n-\n-0F7878 LOCAL HEADER #278     04034B50 (67324752)\n-0F787C Extract Zip Spec      14 (20) '2.0'\n-0F787D Extract OS            00 (0) 'MS-DOS'\n-0F787E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F7880 Compression Method    0000 (0) 'Stored'\n-0F7882 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F7886 CRC                   00000000 (0)\n-0F788A Compressed Size       00000000 (0)\n-0F788E Uncompressed Size     00000000 (0)\n-0F7892 Filename Length       002D (45)\n-0F7894 Extra Length          0009 (9)\n-0F7896 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF7896: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F78C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F78C5   Length              0005 (5)\n-0F78C7   Flags               01 (1) 'Modification'\n-0F78C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F78CC PAYLOAD\n-\n-0F8C0D DATA DESCRIPTOR       08074B50 (134695760)\n-0F8C11 CRC                   D07CEF7E (3497848702)\n-0F8C15 Compressed Size       00001341 (4929)\n-0F8C19 Uncompressed Size     00001341 (4929)\n-\n-0F8C1D LOCAL HEADER #279     04034B50 (67324752)\n-0F8C21 Extract Zip Spec      14 (20) '2.0'\n-0F8C22 Extract OS            00 (0) 'MS-DOS'\n-0F8C23 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F8C25 Compression Method    0000 (0) 'Stored'\n-0F8C27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F8C2B CRC                   00000000 (0)\n-0F8C2F Compressed Size       00000000 (0)\n-0F8C33 Uncompressed Size     00000000 (0)\n-0F8C37 Filename Length       0029 (41)\n-0F8C39 Extra Length          0009 (9)\n-0F8C3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF8C3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F8C64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F8C66   Length              0005 (5)\n-0F8C68   Flags               01 (1) 'Modification'\n-0F8C69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F8C6D PAYLOAD\n-\n-0F90B0 DATA DESCRIPTOR       08074B50 (134695760)\n-0F90B4 CRC                   4E3FC833 (1312802867)\n-0F90B8 Compressed Size       00000443 (1091)\n-0F90BC Uncompressed Size     00000443 (1091)\n-\n-0F90C0 LOCAL HEADER #280     04034B50 (67324752)\n-0F90C4 Extract Zip Spec      14 (20) '2.0'\n-0F90C5 Extract OS            00 (0) 'MS-DOS'\n-0F90C6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F90C8 Compression Method    0000 (0) 'Stored'\n-0F90CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F90CE CRC                   00000000 (0)\n-0F90D2 Compressed Size       00000000 (0)\n-0F90D6 Uncompressed Size     00000000 (0)\n-0F90DA Filename Length       002A (42)\n-0F90DC Extra Length          0009 (9)\n-0F90DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF90DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F9108 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F910A   Length              0005 (5)\n-0F910C   Flags               01 (1) 'Modification'\n-0F910D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F9111 PAYLOAD\n-\n-0FB228 DATA DESCRIPTOR       08074B50 (134695760)\n-0FB22C CRC                   7A9C058A (2057045386)\n-0FB230 Compressed Size       00002117 (8471)\n-0FB234 Uncompressed Size     00002117 (8471)\n-\n-0FB238 LOCAL HEADER #281     04034B50 (67324752)\n-0FB23C Extract Zip Spec      14 (20) '2.0'\n-0FB23D Extract OS            00 (0) 'MS-DOS'\n-0FB23E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FB240 Compression Method    0000 (0) 'Stored'\n-0FB242 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FB246 CRC                   00000000 (0)\n-0FB24A Compressed Size       00000000 (0)\n-0FB24E Uncompressed Size     00000000 (0)\n-0FB252 Filename Length       002A (42)\n-0FB254 Extra Length          0009 (9)\n-0FB256 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFB256: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FB280 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FB282   Length              0005 (5)\n-0FB284   Flags               01 (1) 'Modification'\n-0FB285   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FB289 PAYLOAD\n-\n-0FC2D5 DATA DESCRIPTOR       08074B50 (134695760)\n-0FC2D9 CRC                   A4F19F22 (2767298338)\n-0FC2DD Compressed Size       0000104C (4172)\n-0FC2E1 Uncompressed Size     0000104C (4172)\n-\n-0FC2E5 LOCAL HEADER #282     04034B50 (67324752)\n-0FC2E9 Extract Zip Spec      14 (20) '2.0'\n-0FC2EA Extract OS            00 (0) 'MS-DOS'\n-0FC2EB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FC2ED Compression Method    0000 (0) 'Stored'\n-0FC2EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FC2F3 CRC                   00000000 (0)\n-0FC2F7 Compressed Size       00000000 (0)\n-0FC2FB Uncompressed Size     00000000 (0)\n-0FC2FF Filename Length       002B (43)\n-0FC301 Extra Length          0009 (9)\n-0FC303 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFC303: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FC32E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FC330   Length              0005 (5)\n-0FC332   Flags               01 (1) 'Modification'\n-0FC333   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FC337 PAYLOAD\n-\n-0FE49D DATA DESCRIPTOR       08074B50 (134695760)\n-0FE4A1 CRC                   E7A31A4E (3886225998)\n-0FE4A5 Compressed Size       00002166 (8550)\n-0FE4A9 Uncompressed Size     00002166 (8550)\n-\n-0FE4AD LOCAL HEADER #283     04034B50 (67324752)\n-0FE4B1 Extract Zip Spec      14 (20) '2.0'\n-0FE4B2 Extract OS            00 (0) 'MS-DOS'\n-0FE4B3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FE4B5 Compression Method    0000 (0) 'Stored'\n-0FE4B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FE4BB CRC                   00000000 (0)\n-0FE4BF Compressed Size       00000000 (0)\n-0FE4C3 Uncompressed Size     00000000 (0)\n-0FE4C7 Filename Length       002B (43)\n-0FE4C9 Extra Length          0009 (9)\n-0FE4CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFE4CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FE4F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FE4F8   Length              0005 (5)\n-0FE4FA   Flags               01 (1) 'Modification'\n-0FE4FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FE4FF PAYLOAD\n-\n-0FF0C1 DATA DESCRIPTOR       08074B50 (134695760)\n-0FF0C5 CRC                   139F375C (329201500)\n-0FF0C9 Compressed Size       00000BC2 (3010)\n-0FF0CD Uncompressed Size     00000BC2 (3010)\n-\n-0FF0D1 LOCAL HEADER #284     04034B50 (67324752)\n-0FF0D5 Extract Zip Spec      14 (20) '2.0'\n-0FF0D6 Extract OS            00 (0) 'MS-DOS'\n-0FF0D7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FF0D9 Compression Method    0000 (0) 'Stored'\n-0FF0DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FF0DF CRC                   00000000 (0)\n-0FF0E3 Compressed Size       00000000 (0)\n-0FF0E7 Uncompressed Size     00000000 (0)\n-0FF0EB Filename Length       0026 (38)\n-0FF0ED Extra Length          0009 (9)\n-0FF0EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFF0EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FF115 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FF117   Length              0005 (5)\n-0FF119   Flags               01 (1) 'Modification'\n-0FF11A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FF11E PAYLOAD\n-\n-0FFEC8 DATA DESCRIPTOR       08074B50 (134695760)\n-0FFECC CRC                   C39767CB (3281479627)\n-0FFED0 Compressed Size       00000DAA (3498)\n-0FFED4 Uncompressed Size     00000DAA (3498)\n-\n-0FFED8 LOCAL HEADER #285     04034B50 (67324752)\n-0FFEDC Extract Zip Spec      14 (20) '2.0'\n-0FFEDD Extract OS            00 (0) 'MS-DOS'\n-0FFEDE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FFEE0 Compression Method    0000 (0) 'Stored'\n-0FFEE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FFEE6 CRC                   00000000 (0)\n-0FFEEA Compressed Size       00000000 (0)\n-0FFEEE Uncompressed Size     00000000 (0)\n-0FFEF2 Filename Length       002C (44)\n-0FFEF4 Extra Length          0009 (9)\n-0FFEF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFFEF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FFF22 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FFF24   Length              0005 (5)\n-0FFF26   Flags               01 (1) 'Modification'\n-0FFF27   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FFF2B PAYLOAD\n-\n-100FEC DATA DESCRIPTOR       08074B50 (134695760)\n-100FF0 CRC                   0C719C80 (208772224)\n-100FF4 Compressed Size       000010C1 (4289)\n-100FF8 Uncompressed Size     000010C1 (4289)\n-\n-100FFC LOCAL HEADER #286     04034B50 (67324752)\n-101000 Extract Zip Spec      14 (20) '2.0'\n-101001 Extract OS            00 (0) 'MS-DOS'\n-101002 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-101004 Compression Method    0000 (0) 'Stored'\n-101006 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10100A CRC                   00000000 (0)\n-10100E Compressed Size       00000000 (0)\n-101012 Uncompressed Size     00000000 (0)\n-101016 Filename Length       002A (42)\n-101018 Extra Length          0009 (9)\n-10101A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10101A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-101044 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-101046   Length              0005 (5)\n-101048   Flags               01 (1) 'Modification'\n-101049   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10104D PAYLOAD\n-\n-1020EF DATA DESCRIPTOR       08074B50 (134695760)\n-1020F3 CRC                   4A73FA6D (1249114733)\n-1020F7 Compressed Size       000010A2 (4258)\n-1020FB Uncompressed Size     000010A2 (4258)\n-\n-1020FF LOCAL HEADER #287     04034B50 (67324752)\n-102103 Extract Zip Spec      14 (20) '2.0'\n-102104 Extract OS            00 (0) 'MS-DOS'\n-102105 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-102107 Compression Method    0000 (0) 'Stored'\n-102109 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10210D CRC                   00000000 (0)\n-102111 Compressed Size       00000000 (0)\n-102115 Uncompressed Size     00000000 (0)\n-102119 Filename Length       002E (46)\n-10211B Extra Length          0009 (9)\n-10211D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10211D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10214B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10214D   Length              0005 (5)\n-10214F   Flags               01 (1) 'Modification'\n-102150   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-102154 PAYLOAD\n-\n-102AB4 DATA DESCRIPTOR       08074B50 (134695760)\n-102AB8 CRC                   7D5526CA (2102732490)\n-102ABC Compressed Size       00000960 (2400)\n-102AC0 Uncompressed Size     00000960 (2400)\n-\n-102AC4 LOCAL HEADER #288     04034B50 (67324752)\n-102AC8 Extract Zip Spec      14 (20) '2.0'\n-102AC9 Extract OS            00 (0) 'MS-DOS'\n-102ACA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-102ACC Compression Method    0000 (0) 'Stored'\n-102ACE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-102AD2 CRC                   00000000 (0)\n-102AD6 Compressed Size       00000000 (0)\n-102ADA Uncompressed Size     00000000 (0)\n-102ADE Filename Length       0033 (51)\n-102AE0 Extra Length          0009 (9)\n-102AE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x102AE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-102B15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-102B17   Length              0005 (5)\n-102B19   Flags               01 (1) 'Modification'\n-102B1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-102B1E PAYLOAD\n-\n-103457 DATA DESCRIPTOR       08074B50 (134695760)\n-10345B CRC                   3C2ED9BE (1009703358)\n-10345F Compressed Size       00000939 (2361)\n-103463 Uncompressed Size     00000939 (2361)\n-\n-103467 LOCAL HEADER #289     04034B50 (67324752)\n-10346B Extract Zip Spec      14 (20) '2.0'\n-10346C Extract OS            00 (0) 'MS-DOS'\n-10346D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10346F Compression Method    0000 (0) 'Stored'\n-103471 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-103475 CRC                   00000000 (0)\n-103479 Compressed Size       00000000 (0)\n-10347D Uncompressed Size     00000000 (0)\n-103481 Filename Length       002E (46)\n-103483 Extra Length          0009 (9)\n-103485 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x103485: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1034B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1034B5   Length              0005 (5)\n-1034B7   Flags               01 (1) 'Modification'\n-1034B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1034BC PAYLOAD\n-\n-106E87 DATA DESCRIPTOR       08074B50 (134695760)\n-106E8B CRC                   BA95C40E (3130377230)\n-106E8F Compressed Size       000039CB (14795)\n-106E93 Uncompressed Size     000039CB (14795)\n-\n-106E97 LOCAL HEADER #290     04034B50 (67324752)\n-106E9B Extract Zip Spec      14 (20) '2.0'\n-106E9C Extract OS            00 (0) 'MS-DOS'\n-106E9D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-106E9F Compression Method    0000 (0) 'Stored'\n-106EA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-106EA5 CRC                   00000000 (0)\n-106EA9 Compressed Size       00000000 (0)\n-106EAD Uncompressed Size     00000000 (0)\n-106EB1 Filename Length       0035 (53)\n-106EB3 Extra Length          0009 (9)\n-106EB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x106EB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-106EEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-106EEC   Length              0005 (5)\n-106EEE   Flags               01 (1) 'Modification'\n-106EEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-106EF3 PAYLOAD\n-\n-10774E DATA DESCRIPTOR       08074B50 (134695760)\n-107752 CRC                   A4EA9AD2 (2766838482)\n-107756 Compressed Size       0000085B (2139)\n-10775A Uncompressed Size     0000085B (2139)\n-\n-10775E LOCAL HEADER #291     04034B50 (67324752)\n-107762 Extract Zip Spec      14 (20) '2.0'\n-107763 Extract OS            00 (0) 'MS-DOS'\n-107764 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-107766 Compression Method    0000 (0) 'Stored'\n-107768 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10776C CRC                   00000000 (0)\n-107770 Compressed Size       00000000 (0)\n-107774 Uncompressed Size     00000000 (0)\n-107778 Filename Length       002B (43)\n-10777A Extra Length          0009 (9)\n-10777C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10777C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1077A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1077A9   Length              0005 (5)\n-1077AB   Flags               01 (1) 'Modification'\n-1077AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1077B0 PAYLOAD\n-\n-10D577 DATA DESCRIPTOR       08074B50 (134695760)\n-10D57B CRC                   90514D51 (2421247313)\n-10D57F Compressed Size       00005DC7 (24007)\n-10D583 Uncompressed Size     00005DC7 (24007)\n-\n-10D587 LOCAL HEADER #292     04034B50 (67324752)\n-10D58B Extract Zip Spec      14 (20) '2.0'\n-10D58C Extract OS            00 (0) 'MS-DOS'\n-10D58D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10D58F Compression Method    0000 (0) 'Stored'\n-10D591 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10D595 CRC                   00000000 (0)\n-10D599 Compressed Size       00000000 (0)\n-10D59D Uncompressed Size     00000000 (0)\n-10D5A1 Filename Length       0027 (39)\n-10D5A3 Extra Length          0009 (9)\n-10D5A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10D5A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10D5CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10D5CE   Length              0005 (5)\n-10D5D0   Flags               01 (1) 'Modification'\n-10D5D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10D5D5 PAYLOAD\n-\n-10DDE8 DATA DESCRIPTOR       08074B50 (134695760)\n-10DDEC CRC                   6148ED28 (1632169256)\n-10DDF0 Compressed Size       00000813 (2067)\n-10DDF4 Uncompressed Size     00000813 (2067)\n-\n-10DDF8 LOCAL HEADER #293     04034B50 (67324752)\n-10DDFC Extract Zip Spec      14 (20) '2.0'\n-10DDFD Extract OS            00 (0) 'MS-DOS'\n-10DDFE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10DE00 Compression Method    0000 (0) 'Stored'\n-10DE02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10DE06 CRC                   00000000 (0)\n-10DE0A Compressed Size       00000000 (0)\n-10DE0E Uncompressed Size     00000000 (0)\n-10DE12 Filename Length       002C (44)\n-10DE14 Extra Length          0009 (9)\n-10DE16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10DE16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10DE42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10DE44   Length              0005 (5)\n-10DE46   Flags               01 (1) 'Modification'\n-10DE47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10DE4B PAYLOAD\n-\n-10E7A5 DATA DESCRIPTOR       08074B50 (134695760)\n-10E7A9 CRC                   32B357AB (850614187)\n-10E7AD Compressed Size       0000095A (2394)\n-10E7B1 Uncompressed Size     0000095A (2394)\n-\n-10E7B5 LOCAL HEADER #294     04034B50 (67324752)\n-10E7B9 Extract Zip Spec      14 (20) '2.0'\n-10E7BA Extract OS            00 (0) 'MS-DOS'\n-10E7BB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10E7BD Compression Method    0000 (0) 'Stored'\n-10E7BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10E7C3 CRC                   00000000 (0)\n-10E7C7 Compressed Size       00000000 (0)\n-10E7CB Uncompressed Size     00000000 (0)\n-10E7CF Filename Length       002C (44)\n-10E7D1 Extra Length          0009 (9)\n-10E7D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10E7D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10E7FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10E801   Length              0005 (5)\n-10E803   Flags               01 (1) 'Modification'\n-10E804   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10E808 PAYLOAD\n-\n-116B28 DATA DESCRIPTOR       08074B50 (134695760)\n-116B2C CRC                   34D97477 (886666359)\n-116B30 Compressed Size       00008320 (33568)\n-116B34 Uncompressed Size     00008320 (33568)\n-\n-116B38 LOCAL HEADER #295     04034B50 (67324752)\n-116B3C Extract Zip Spec      14 (20) '2.0'\n-116B3D Extract OS            00 (0) 'MS-DOS'\n-116B3E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-116B40 Compression Method    0000 (0) 'Stored'\n-116B42 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-116B46 CRC                   00000000 (0)\n-116B4A Compressed Size       00000000 (0)\n-116B4E Uncompressed Size     00000000 (0)\n-116B52 Filename Length       002F (47)\n-116B54 Extra Length          0009 (9)\n-116B56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x116B56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-116B85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-116B87   Length              0005 (5)\n-116B89   Flags               01 (1) 'Modification'\n-116B8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-116B8E PAYLOAD\n-\n-1224AB DATA DESCRIPTOR       08074B50 (134695760)\n-1224AF CRC                   6788144F (1736971343)\n-1224B3 Compressed Size       0000B91D (47389)\n-1224B7 Uncompressed Size     0000B91D (47389)\n-\n-1224BB LOCAL HEADER #296     04034B50 (67324752)\n-1224BF Extract Zip Spec      14 (20) '2.0'\n-1224C0 Extract OS            00 (0) 'MS-DOS'\n-1224C1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1224C3 Compression Method    0000 (0) 'Stored'\n-1224C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1224C9 CRC                   00000000 (0)\n-1224CD Compressed Size       00000000 (0)\n-1224D1 Uncompressed Size     00000000 (0)\n-1224D5 Filename Length       0038 (56)\n-1224D7 Extra Length          0009 (9)\n-1224D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1224D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-122511 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-122513   Length              0005 (5)\n-122515   Flags               01 (1) 'Modification'\n-122516   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-12251A PAYLOAD\n-\n-123C21 DATA DESCRIPTOR       08074B50 (134695760)\n-123C25 CRC                   9D4E3C73 (2639150195)\n-123C29 Compressed Size       00001707 (5895)\n-123C2D Uncompressed Size     00001707 (5895)\n-\n-123C31 LOCAL HEADER #297     04034B50 (67324752)\n-123C35 Extract Zip Spec      14 (20) '2.0'\n-123C36 Extract OS            00 (0) 'MS-DOS'\n-123C37 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-123C39 Compression Method    0000 (0) 'Stored'\n-123C3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-123C3F CRC                   00000000 (0)\n-123C43 Compressed Size       00000000 (0)\n-123C47 Uncompressed Size     00000000 (0)\n-123C4B Filename Length       003C (60)\n-123C4D Extra Length          0009 (9)\n-123C4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x123C4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-123C8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-123C8D   Length              0005 (5)\n-123C8F   Flags               01 (1) 'Modification'\n-123C90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-123C94 PAYLOAD\n-\n-124E5E DATA DESCRIPTOR       08074B50 (134695760)\n-124E62 CRC                   359BAAF7 (899394295)\n-124E66 Compressed Size       000011CA (4554)\n-124E6A Uncompressed Size     000011CA (4554)\n-\n-124E6E LOCAL HEADER #298     04034B50 (67324752)\n-124E72 Extract Zip Spec      14 (20) '2.0'\n-124E73 Extract OS            00 (0) 'MS-DOS'\n-124E74 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-124E76 Compression Method    0000 (0) 'Stored'\n-124E78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-124E7C CRC                   00000000 (0)\n-124E80 Compressed Size       00000000 (0)\n-124E84 Uncompressed Size     00000000 (0)\n-124E88 Filename Length       0028 (40)\n-124E8A Extra Length          0009 (9)\n-124E8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x124E8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-124EB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-124EB6   Length              0005 (5)\n-124EB8   Flags               01 (1) 'Modification'\n-124EB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-124EBD PAYLOAD\n-\n-125B7A DATA DESCRIPTOR       08074B50 (134695760)\n-125B7E CRC                   4DF6AB6E (1308011374)\n-125B82 Compressed Size       00000CBD (3261)\n-125B86 Uncompressed Size     00000CBD (3261)\n-\n-125B8A LOCAL HEADER #299     04034B50 (67324752)\n-125B8E Extract Zip Spec      14 (20) '2.0'\n-125B8F Extract OS            00 (0) 'MS-DOS'\n-125B90 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-125B92 Compression Method    0000 (0) 'Stored'\n-125B94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-125B98 CRC                   00000000 (0)\n-125B9C Compressed Size       00000000 (0)\n-125BA0 Uncompressed Size     00000000 (0)\n-125BA4 Filename Length       0044 (68)\n-125BA6 Extra Length          0009 (9)\n-125BA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x125BA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-125BEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-125BEE   Length              0005 (5)\n-125BF0   Flags               01 (1) 'Modification'\n-125BF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-125BF5 PAYLOAD\n-\n-126611 DATA DESCRIPTOR       08074B50 (134695760)\n-126615 CRC                   E15897D6 (3780679638)\n-126619 Compressed Size       00000A1C (2588)\n-12661D Uncompressed Size     00000A1C (2588)\n-\n-126621 LOCAL HEADER #300     04034B50 (67324752)\n-126625 Extract Zip Spec      14 (20) '2.0'\n-126626 Extract OS            00 (0) 'MS-DOS'\n-126627 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-126629 Compression Method    0000 (0) 'Stored'\n-12662B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-12662F CRC                   00000000 (0)\n-126633 Compressed Size       00000000 (0)\n-126637 Uncompressed Size     00000000 (0)\n-12663B Filename Length       002E (46)\n-12663D Extra Length          0009 (9)\n-12663F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12663F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12666D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12666F   Length              0005 (5)\n-126671   Flags               01 (1) 'Modification'\n-126672   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-126676 PAYLOAD\n-\n-12F9E6 DATA DESCRIPTOR       08074B50 (134695760)\n-12F9EA CRC                   080CFD86 (135069062)\n-12F9EE Compressed Size       00009370 (37744)\n-12F9F2 Uncompressed Size     00009370 (37744)\n-\n-12F9F6 LOCAL HEADER #301     04034B50 (67324752)\n-12F9FA Extract Zip Spec      14 (20) '2.0'\n-12F9FB Extract OS            00 (0) 'MS-DOS'\n-12F9FC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-12F9FE Compression Method    0000 (0) 'Stored'\n-12FA00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-12FA04 CRC                   00000000 (0)\n-12FA08 Compressed Size       00000000 (0)\n-12FA0C Uncompressed Size     00000000 (0)\n-12FA10 Filename Length       002C (44)\n-12FA12 Extra Length          0009 (9)\n-12FA14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12FA14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12FA40 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12FA42   Length              0005 (5)\n-12FA44   Flags               01 (1) 'Modification'\n-12FA45   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-12FA49 PAYLOAD\n-\n-131C41 DATA DESCRIPTOR       08074B50 (134695760)\n-131C45 CRC                   45127F53 (1158840147)\n-131C49 Compressed Size       000021F8 (8696)\n-131C4D Uncompressed Size     000021F8 (8696)\n-\n-131C51 LOCAL HEADER #302     04034B50 (67324752)\n-131C55 Extract Zip Spec      14 (20) '2.0'\n-131C56 Extract OS            00 (0) 'MS-DOS'\n-131C57 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-131C59 Compression Method    0000 (0) 'Stored'\n-131C5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-131C5F CRC                   00000000 (0)\n-131C63 Compressed Size       00000000 (0)\n-131C67 Uncompressed Size     00000000 (0)\n-131C6B Filename Length       002B (43)\n-131C6D Extra Length          0009 (9)\n-131C6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x131C6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-131C9A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-131C9C   Length              0005 (5)\n-131C9E   Flags               01 (1) 'Modification'\n-131C9F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-131CA3 PAYLOAD\n-\n-137FF2 DATA DESCRIPTOR       08074B50 (134695760)\n-137FF6 CRC                   BCEF5B37 (3169803063)\n-137FFA Compressed Size       0000634F (25423)\n-137FFE Uncompressed Size     0000634F (25423)\n-\n-138002 LOCAL HEADER #303     04034B50 (67324752)\n-138006 Extract Zip Spec      14 (20) '2.0'\n-138007 Extract OS            00 (0) 'MS-DOS'\n-138008 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-13800A Compression Method    0000 (0) 'Stored'\n-13800C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-138010 CRC                   00000000 (0)\n-138014 Compressed Size       00000000 (0)\n-138018 Uncompressed Size     00000000 (0)\n-13801C Filename Length       002C (44)\n-13801E Extra Length          0009 (9)\n-138020 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x138020: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13804C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13804E   Length              0005 (5)\n-138050   Flags               01 (1) 'Modification'\n-138051   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-138055 PAYLOAD\n-\n-13A71B DATA DESCRIPTOR       08074B50 (134695760)\n-13A71F CRC                   E7AAF9A0 (3886741920)\n-13A723 Compressed Size       000026C6 (9926)\n-13A727 Uncompressed Size     000026C6 (9926)\n-\n-13A72B LOCAL HEADER #304     04034B50 (67324752)\n-13A72F Extract Zip Spec      14 (20) '2.0'\n-13A730 Extract OS            00 (0) 'MS-DOS'\n-13A731 General Purpose Flag  0000 (0)\n-13A733 Compression Method    0000 (0) 'Stored'\n-13A735 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13A739 CRC                   00000000 (0)\n-13A73D Compressed Size       00000000 (0)\n-13A741 Uncompressed Size     00000000 (0)\n-13A745 Filename Length       0018 (24)\n-13A747 Extra Length          0009 (9)\n-13A749 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13A749: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13A761 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13A763   Length              0005 (5)\n-13A765   Flags               01 (1) 'Modification'\n-13A766   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13A76A LOCAL HEADER #305     04034B50 (67324752)\n-13A76E Extract Zip Spec      14 (20) '2.0'\n-13A76F Extract OS            00 (0) 'MS-DOS'\n-13A770 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-13A772 Compression Method    0000 (0) 'Stored'\n-13A774 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13A778 CRC                   00000000 (0)\n-13A77C Compressed Size       00000000 (0)\n-13A780 Uncompressed Size     00000000 (0)\n-13A784 Filename Length       002B (43)\n-13A786 Extra Length          0009 (9)\n-13A788 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13A788: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13A7B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13A7B5   Length              0005 (5)\n-13A7B7   Flags               01 (1) 'Modification'\n-13A7B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-13A7BC PAYLOAD\n-\n-140BE6 DATA DESCRIPTOR       08074B50 (134695760)\n-140BEA CRC                   4A1B9248 (1243320904)\n-140BEE Compressed Size       0000642A (25642)\n-140BF2 Uncompressed Size     0000642A (25642)\n-\n-140BF6 LOCAL HEADER #306     04034B50 (67324752)\n-140BFA Extract Zip Spec      14 (20) '2.0'\n-140BFB Extract OS            00 (0) 'MS-DOS'\n-140BFC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-140BFE Compression Method    0000 (0) 'Stored'\n-140C00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-140C04 CRC                   00000000 (0)\n-140C08 Compressed Size       00000000 (0)\n-140C0C Uncompressed Size     00000000 (0)\n-140C10 Filename Length       0034 (52)\n-140C12 Extra Length          0009 (9)\n-140C14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x140C14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-140C48 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-140C4A   Length              0005 (5)\n-140C4C   Flags               01 (1) 'Modification'\n-140C4D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-140C51 PAYLOAD\n-\n-146B48 DATA DESCRIPTOR       08074B50 (134695760)\n-146B4C CRC                   4BCB8E78 (1271631480)\n-146B50 Compressed Size       00005EF7 (24311)\n-146B54 Uncompressed Size     00005EF7 (24311)\n-\n-146B58 LOCAL HEADER #307     04034B50 (67324752)\n-146B5C Extract Zip Spec      14 (20) '2.0'\n-146B5D Extract OS            00 (0) 'MS-DOS'\n-146B5E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-146B60 Compression Method    0000 (0) 'Stored'\n-146B62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-146B66 CRC                   00000000 (0)\n-146B6A Compressed Size       00000000 (0)\n-146B6E Uncompressed Size     00000000 (0)\n-146B72 Filename Length       0031 (49)\n-146B74 Extra Length          0009 (9)\n-146B76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x146B76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-146BA7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-146BA9   Length              0005 (5)\n-146BAB   Flags               01 (1) 'Modification'\n-146BAC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-146BB0 PAYLOAD\n-\n-147DE5 DATA DESCRIPTOR       08074B50 (134695760)\n-147DE9 CRC                   EBCB75D3 (3955979731)\n-147DED Compressed Size       00001235 (4661)\n-147DF1 Uncompressed Size     00001235 (4661)\n-\n-147DF5 LOCAL HEADER #308     04034B50 (67324752)\n-147DF9 Extract Zip Spec      14 (20) '2.0'\n-147DFA Extract OS            00 (0) 'MS-DOS'\n-147DFB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-147DFD Compression Method    0000 (0) 'Stored'\n-147DFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-147E03 CRC                   00000000 (0)\n-147E07 Compressed Size       00000000 (0)\n-147E0B Uncompressed Size     00000000 (0)\n-147E0F Filename Length       0034 (52)\n-147E11 Extra Length          0009 (9)\n-147E13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x147E13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-147E47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-147E49   Length              0005 (5)\n-147E4B   Flags               01 (1) 'Modification'\n-147E4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-147E50 PAYLOAD\n-\n-149445 DATA DESCRIPTOR       08074B50 (134695760)\n-149449 CRC                   0D6CD567 (225236327)\n-14944D Compressed Size       000015F5 (5621)\n-149451 Uncompressed Size     000015F5 (5621)\n-\n-149455 LOCAL HEADER #309     04034B50 (67324752)\n-149459 Extract Zip Spec      14 (20) '2.0'\n-14945A Extract OS            00 (0) 'MS-DOS'\n-14945B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-14945D Compression Method    0000 (0) 'Stored'\n-14945F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-149463 CRC                   00000000 (0)\n-149467 Compressed Size       00000000 (0)\n-14946B Uncompressed Size     00000000 (0)\n-14946F Filename Length       0032 (50)\n-149471 Extra Length          0009 (9)\n-149473 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x149473: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1494A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1494A7   Length              0005 (5)\n-1494A9   Flags               01 (1) 'Modification'\n-1494AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1494AE PAYLOAD\n-\n-14AEF0 DATA DESCRIPTOR       08074B50 (134695760)\n-14AEF4 CRC                   6E97D75C (1855444828)\n-14AEF8 Compressed Size       00001A42 (6722)\n-14AEFC Uncompressed Size     00001A42 (6722)\n-\n-14AF00 LOCAL HEADER #310     04034B50 (67324752)\n-14AF04 Extract Zip Spec      14 (20) '2.0'\n-14AF05 Extract OS            00 (0) 'MS-DOS'\n-14AF06 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-14AF08 Compression Method    0000 (0) 'Stored'\n-14AF0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-14AF0E CRC                   00000000 (0)\n-14AF12 Compressed Size       00000000 (0)\n-14AF16 Uncompressed Size     00000000 (0)\n-14AF1A Filename Length       002E (46)\n-14AF1C Extra Length          0009 (9)\n-14AF1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x14AF1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-14AF4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-14AF4E   Length              0005 (5)\n-14AF50   Flags               01 (1) 'Modification'\n-14AF51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-14AF55 PAYLOAD\n-\n-14E464 DATA DESCRIPTOR       08074B50 (134695760)\n-14E468 CRC                   327F969A (847222426)\n-14E46C Compressed Size       0000350F (13583)\n-14E470 Uncompressed Size     0000350F (13583)\n-\n-14E474 LOCAL HEADER #311     04034B50 (67324752)\n-14E478 Extract Zip Spec      14 (20) '2.0'\n-14E479 Extract OS            00 (0) 'MS-DOS'\n-14E47A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-14E47C Compression Method    0000 (0) 'Stored'\n-14E47E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-14E482 CRC                   00000000 (0)\n-14E486 Compressed Size       00000000 (0)\n-14E48A Uncompressed Size     00000000 (0)\n-14E48E Filename Length       002B (43)\n-14E490 Extra Length          0009 (9)\n-14E492 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x14E492: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-14E4BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-14E4BF   Length              0005 (5)\n-14E4C1   Flags               01 (1) 'Modification'\n-14E4C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-14E4C6 PAYLOAD\n-\n-14ED14 DATA DESCRIPTOR       08074B50 (134695760)\n-14ED18 CRC                   C17F60B4 (3246350516)\n-14ED1C Compressed Size       0000084E (2126)\n-14ED20 Uncompressed Size     0000084E (2126)\n-\n-14ED24 LOCAL HEADER #312     04034B50 (67324752)\n-14ED28 Extract Zip Spec      14 (20) '2.0'\n-14ED29 Extract OS            00 (0) 'MS-DOS'\n-14ED2A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-14ED2C Compression Method    0000 (0) 'Stored'\n-14ED2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-14ED32 CRC                   00000000 (0)\n-14ED36 Compressed Size       00000000 (0)\n-14ED3A Uncompressed Size     00000000 (0)\n-14ED3E Filename Length       002F (47)\n-14ED40 Extra Length          0009 (9)\n-14ED42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x14ED42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-14ED71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-14ED73   Length              0005 (5)\n-14ED75   Flags               01 (1) 'Modification'\n-14ED76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-14ED7A PAYLOAD\n-\n-151015 DATA DESCRIPTOR       08074B50 (134695760)\n-151019 CRC                   60259860 (1613076576)\n-15101D Compressed Size       0000229B (8859)\n-151021 Uncompressed Size     0000229B (8859)\n-\n-151025 LOCAL HEADER #313     04034B50 (67324752)\n-151029 Extract Zip Spec      14 (20) '2.0'\n-15102A Extract OS            00 (0) 'MS-DOS'\n-15102B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-15102D Compression Method    0000 (0) 'Stored'\n-15102F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-151033 CRC                   00000000 (0)\n-151037 Compressed Size       00000000 (0)\n-15103B Uncompressed Size     00000000 (0)\n-15103F Filename Length       0026 (38)\n-151041 Extra Length          0009 (9)\n-151043 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x151043: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-151069 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15106B   Length              0005 (5)\n-15106D   Flags               01 (1) 'Modification'\n-15106E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-151072 PAYLOAD\n-\n-151B93 DATA DESCRIPTOR       08074B50 (134695760)\n-151B97 CRC                   CBED4405 (3421324293)\n-151B9B Compressed Size       00000B21 (2849)\n-151B9F Uncompressed Size     00000B21 (2849)\n-\n-151BA3 LOCAL HEADER #314     04034B50 (67324752)\n-151BA7 Extract Zip Spec      14 (20) '2.0'\n-151BA8 Extract OS            00 (0) 'MS-DOS'\n-151BA9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-151BAB Compression Method    0000 (0) 'Stored'\n-151BAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-151BB1 CRC                   00000000 (0)\n-151BB5 Compressed Size       00000000 (0)\n-151BB9 Uncompressed Size     00000000 (0)\n-151BBD Filename Length       002B (43)\n-151BBF Extra Length          0009 (9)\n-151BC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x151BC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-151BEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-151BEE   Length              0005 (5)\n-151BF0   Flags               01 (1) 'Modification'\n-151BF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-151BF5 PAYLOAD\n-\n-1529E5 DATA DESCRIPTOR       08074B50 (134695760)\n-1529E9 CRC                   4EECAFD1 (1324134353)\n-1529ED Compressed Size       00000DF0 (3568)\n-1529F1 Uncompressed Size     00000DF0 (3568)\n-\n-1529F5 LOCAL HEADER #315     04034B50 (67324752)\n-1529F9 Extract Zip Spec      14 (20) '2.0'\n-1529FA Extract OS            00 (0) 'MS-DOS'\n-1529FB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1529FD Compression Method    0000 (0) 'Stored'\n-1529FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-152A03 CRC                   00000000 (0)\n-152A07 Compressed Size       00000000 (0)\n-152A0B Uncompressed Size     00000000 (0)\n-152A0F Filename Length       0031 (49)\n-152A11 Extra Length          0009 (9)\n-152A13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x152A13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-152A44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-152A46   Length              0005 (5)\n-152A48   Flags               01 (1) 'Modification'\n-152A49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-152A4D PAYLOAD\n-\n-1541D3 DATA DESCRIPTOR       08074B50 (134695760)\n-1541D7 CRC                   44E5E8ED (1155918061)\n-1541DB Compressed Size       00001786 (6022)\n-1541DF Uncompressed Size     00001786 (6022)\n-\n-1541E3 LOCAL HEADER #316     04034B50 (67324752)\n-1541E7 Extract Zip Spec      14 (20) '2.0'\n-1541E8 Extract OS            00 (0) 'MS-DOS'\n-1541E9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1541EB Compression Method    0000 (0) 'Stored'\n-1541ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1541F1 CRC                   00000000 (0)\n-1541F5 Compressed Size       00000000 (0)\n-1541F9 Uncompressed Size     00000000 (0)\n-1541FD Filename Length       0029 (41)\n-1541FF Extra Length          0009 (9)\n-154201 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x154201: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15422A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15422C   Length              0005 (5)\n-15422E   Flags               01 (1) 'Modification'\n-15422F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-154233 PAYLOAD\n-\n-1563A7 DATA DESCRIPTOR       08074B50 (134695760)\n-1563AB CRC                   AEF897E4 (2935527396)\n-1563AF Compressed Size       00002174 (8564)\n-1563B3 Uncompressed Size     00002174 (8564)\n-\n-1563B7 LOCAL HEADER #317     04034B50 (67324752)\n-1563BB Extract Zip Spec      14 (20) '2.0'\n-1563BC Extract OS            00 (0) 'MS-DOS'\n-1563BD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1563BF Compression Method    0000 (0) 'Stored'\n-1563C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1563C5 CRC                   00000000 (0)\n-1563C9 Compressed Size       00000000 (0)\n-1563CD Uncompressed Size     00000000 (0)\n-1563D1 Filename Length       002A (42)\n-1563D3 Extra Length          0009 (9)\n-1563D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1563D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1563FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-156401   Length              0005 (5)\n-156403   Flags               01 (1) 'Modification'\n-156404   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-156408 PAYLOAD\n-\n-156A62 DATA DESCRIPTOR       08074B50 (134695760)\n-156A66 CRC                   1F3B896F (523995503)\n-156A6A Compressed Size       0000065A (1626)\n-156A6E Uncompressed Size     0000065A (1626)\n-\n-156A72 LOCAL HEADER #318     04034B50 (67324752)\n-156A76 Extract Zip Spec      14 (20) '2.0'\n-156A77 Extract OS            00 (0) 'MS-DOS'\n-156A78 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-156A7A Compression Method    0000 (0) 'Stored'\n-156A7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-156A80 CRC                   00000000 (0)\n-156A84 Compressed Size       00000000 (0)\n-156A88 Uncompressed Size     00000000 (0)\n-156A8C Filename Length       0029 (41)\n-156A8E Extra Length          0009 (9)\n-156A90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x156A90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-156AB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-156ABB   Length              0005 (5)\n-156ABD   Flags               01 (1) 'Modification'\n-156ABE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-156AC2 PAYLOAD\n-\n-1578B7 DATA DESCRIPTOR       08074B50 (134695760)\n-1578BB CRC                   FE661D4B (4268105035)\n-1578BF Compressed Size       00000DF5 (3573)\n-1578C3 Uncompressed Size     00000DF5 (3573)\n-\n-1578C7 LOCAL HEADER #319     04034B50 (67324752)\n-1578CB Extract Zip Spec      14 (20) '2.0'\n-1578CC Extract OS            00 (0) 'MS-DOS'\n-1578CD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1578CF Compression Method    0000 (0) 'Stored'\n-1578D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1578D5 CRC                   00000000 (0)\n-1578D9 Compressed Size       00000000 (0)\n-1578DD Uncompressed Size     00000000 (0)\n-1578E1 Filename Length       002A (42)\n-1578E3 Extra Length          0009 (9)\n-1578E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1578E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15790F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-157911   Length              0005 (5)\n-157913   Flags               01 (1) 'Modification'\n-157914   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-157918 PAYLOAD\n-\n-158798 DATA DESCRIPTOR       08074B50 (134695760)\n-15879C CRC                   32F83356 (855126870)\n-1587A0 Compressed Size       00000E80 (3712)\n-1587A4 Uncompressed Size     00000E80 (3712)\n-\n-1587A8 LOCAL HEADER #320     04034B50 (67324752)\n-1587AC Extract Zip Spec      14 (20) '2.0'\n-1587AD Extract OS            00 (0) 'MS-DOS'\n-1587AE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1587B0 Compression Method    0000 (0) 'Stored'\n-1587B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1587B6 CRC                   00000000 (0)\n-1587BA Compressed Size       00000000 (0)\n-1587BE Uncompressed Size     00000000 (0)\n-1587C2 Filename Length       002B (43)\n-1587C4 Extra Length          0009 (9)\n-1587C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1587C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1587F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1587F3   Length              0005 (5)\n-1587F5   Flags               01 (1) 'Modification'\n-1587F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1587FA PAYLOAD\n-\n-15BBB7 DATA DESCRIPTOR       08074B50 (134695760)\n-15BBBB CRC                   5B6E7792 (1533966226)\n-15BBBF Compressed Size       000033BD (13245)\n-15BBC3 Uncompressed Size     000033BD (13245)\n-\n-15BBC7 LOCAL HEADER #321     04034B50 (67324752)\n-15BBCB Extract Zip Spec      14 (20) '2.0'\n-15BBCC Extract OS            00 (0) 'MS-DOS'\n-15BBCD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-15BBCF Compression Method    0000 (0) 'Stored'\n-15BBD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-15BBD5 CRC                   00000000 (0)\n-15BBD9 Compressed Size       00000000 (0)\n-15BBDD Uncompressed Size     00000000 (0)\n-15BBE1 Filename Length       002B (43)\n-15BBE3 Extra Length          0009 (9)\n-15BBE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15BBE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15BC10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15BC12   Length              0005 (5)\n-15BC14   Flags               01 (1) 'Modification'\n-15BC15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-15BC19 PAYLOAD\n-\n-15E4AD DATA DESCRIPTOR       08074B50 (134695760)\n-15E4B1 CRC                   321C1C15 (840702997)\n-15E4B5 Compressed Size       00002894 (10388)\n-15E4B9 Uncompressed Size     00002894 (10388)\n-\n-15E4BD LOCAL HEADER #322     04034B50 (67324752)\n-15E4C1 Extract Zip Spec      14 (20) '2.0'\n-15E4C2 Extract OS            00 (0) 'MS-DOS'\n-15E4C3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-15E4C5 Compression Method    0000 (0) 'Stored'\n-15E4C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-15E4CB CRC                   00000000 (0)\n-15E4CF Compressed Size       00000000 (0)\n-15E4D3 Uncompressed Size     00000000 (0)\n-15E4D7 Filename Length       0030 (48)\n-15E4D9 Extra Length          0009 (9)\n-15E4DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15E4DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15E50B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15E50D   Length              0005 (5)\n-15E50F   Flags               01 (1) 'Modification'\n-15E510   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-15E514 PAYLOAD\n-\n-1605BB DATA DESCRIPTOR       08074B50 (134695760)\n-1605BF CRC                   52C8839A (1388872602)\n-1605C3 Compressed Size       000020A7 (8359)\n-1605C7 Uncompressed Size     000020A7 (8359)\n-\n-1605CB LOCAL HEADER #323     04034B50 (67324752)\n-1605CF Extract Zip Spec      14 (20) '2.0'\n-1605D0 Extract OS            00 (0) 'MS-DOS'\n-1605D1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1605D3 Compression Method    0000 (0) 'Stored'\n-1605D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1605D9 CRC                   00000000 (0)\n-1605DD Compressed Size       00000000 (0)\n-1605E1 Uncompressed Size     00000000 (0)\n-1605E5 Filename Length       002B (43)\n-1605E7 Extra Length          0009 (9)\n-1605E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1605E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-160614 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-160616   Length              0005 (5)\n-160618   Flags               01 (1) 'Modification'\n-160619   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-16061D PAYLOAD\n-\n-16392F DATA DESCRIPTOR       08074B50 (134695760)\n-163933 CRC                   838E36DD (2207135453)\n-163937 Compressed Size       00003312 (13074)\n-16393B Uncompressed Size     00003312 (13074)\n-\n-16393F LOCAL HEADER #324     04034B50 (67324752)\n-163943 Extract Zip Spec      14 (20) '2.0'\n-163944 Extract OS            00 (0) 'MS-DOS'\n-163945 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-163947 Compression Method    0000 (0) 'Stored'\n-163949 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16394D CRC                   00000000 (0)\n-163951 Compressed Size       00000000 (0)\n-163955 Uncompressed Size     00000000 (0)\n-163959 Filename Length       002E (46)\n-16395B Extra Length          0009 (9)\n-16395D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16395D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16398B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16398D   Length              0005 (5)\n-16398F   Flags               01 (1) 'Modification'\n-163990   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-163994 PAYLOAD\n-\n-166E1D DATA DESCRIPTOR       08074B50 (134695760)\n-166E21 CRC                   CB5B9E0C (3411779084)\n-166E25 Compressed Size       00003489 (13449)\n-166E29 Uncompressed Size     00003489 (13449)\n-\n-166E2D LOCAL HEADER #325     04034B50 (67324752)\n-166E31 Extract Zip Spec      14 (20) '2.0'\n-166E32 Extract OS            00 (0) 'MS-DOS'\n-166E33 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-166E35 Compression Method    0000 (0) 'Stored'\n-166E37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-166E3B CRC                   00000000 (0)\n-166E3F Compressed Size       00000000 (0)\n-166E43 Uncompressed Size     00000000 (0)\n-166E47 Filename Length       0026 (38)\n-166E49 Extra Length          0009 (9)\n-166E4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x166E4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-166E71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-166E73   Length              0005 (5)\n-166E75   Flags               01 (1) 'Modification'\n-166E76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-166E7A PAYLOAD\n-\n-168A60 DATA DESCRIPTOR       08074B50 (134695760)\n-168A64 CRC                   5FCFA231 (1607442993)\n-168A68 Compressed Size       00001BE6 (7142)\n-168A6C Uncompressed Size     00001BE6 (7142)\n-\n-168A70 LOCAL HEADER #326     04034B50 (67324752)\n-168A74 Extract Zip Spec      14 (20) '2.0'\n-168A75 Extract OS            00 (0) 'MS-DOS'\n-168A76 General Purpose Flag  0000 (0)\n-168A78 Compression Method    0000 (0) 'Stored'\n-168A7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-168A7E CRC                   00000000 (0)\n-168A82 Compressed Size       00000000 (0)\n-168A86 Uncompressed Size     00000000 (0)\n-168A8A Filename Length       0023 (35)\n-168A8C Extra Length          0009 (9)\n-168A8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x168A8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-168AB1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-168AB3   Length              0005 (5)\n-168AB5   Flags               01 (1) 'Modification'\n-168AB6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-168ABA LOCAL HEADER #327     04034B50 (67324752)\n-168ABE Extract Zip Spec      14 (20) '2.0'\n-168ABF Extract OS            00 (0) 'MS-DOS'\n-168AC0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-168AC2 Compression Method    0000 (0) 'Stored'\n-168AC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-168AC8 CRC                   00000000 (0)\n-168ACC Compressed Size       00000000 (0)\n-168AD0 Uncompressed Size     00000000 (0)\n-168AD4 Filename Length       0030 (48)\n-168AD6 Extra Length          0009 (9)\n-168AD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x168AD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-168B08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-168B0A   Length              0005 (5)\n-168B0C   Flags               01 (1) 'Modification'\n-168B0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-168B11 PAYLOAD\n-\n-1690B5 DATA DESCRIPTOR       08074B50 (134695760)\n-1690B9 CRC                   53B2D875 (1404229749)\n-1690BD Compressed Size       000005A4 (1444)\n-1690C1 Uncompressed Size     000005A4 (1444)\n-\n-1690C5 LOCAL HEADER #328     04034B50 (67324752)\n-1690C9 Extract Zip Spec      14 (20) '2.0'\n-1690CA Extract OS            00 (0) 'MS-DOS'\n-1690CB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1690CD Compression Method    0000 (0) 'Stored'\n-1690CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1690D3 CRC                   00000000 (0)\n-1690D7 Compressed Size       00000000 (0)\n-1690DB Uncompressed Size     00000000 (0)\n-1690DF Filename Length       0036 (54)\n-1690E1 Extra Length          0009 (9)\n-1690E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1690E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-169119 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16911B   Length              0005 (5)\n-16911D   Flags               01 (1) 'Modification'\n-16911E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-169122 PAYLOAD\n-\n-16AE94 DATA DESCRIPTOR       08074B50 (134695760)\n-16AE98 CRC                   07CF28F9 (131016953)\n-16AE9C Compressed Size       00001D72 (7538)\n-16AEA0 Uncompressed Size     00001D72 (7538)\n-\n-16AEA4 LOCAL HEADER #329     04034B50 (67324752)\n-16AEA8 Extract Zip Spec      14 (20) '2.0'\n-16AEA9 Extract OS            00 (0) 'MS-DOS'\n-16AEAA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-16AEAC Compression Method    0000 (0) 'Stored'\n-16AEAE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16AEB2 CRC                   00000000 (0)\n-16AEB6 Compressed Size       00000000 (0)\n-16AEBA Uncompressed Size     00000000 (0)\n-16AEBE Filename Length       0034 (52)\n-16AEC0 Extra Length          0009 (9)\n-16AEC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16AEC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16AEF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16AEF8   Length              0005 (5)\n-16AEFA   Flags               01 (1) 'Modification'\n-16AEFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-16AEFF PAYLOAD\n-\n-16C989 DATA DESCRIPTOR       08074B50 (134695760)\n-16C98D CRC                   FF8666DF (4286998239)\n-16C991 Compressed Size       00001A8A (6794)\n-16C995 Uncompressed Size     00001A8A (6794)\n-\n-16C999 LOCAL HEADER #330     04034B50 (67324752)\n-16C99D Extract Zip Spec      14 (20) '2.0'\n-16C99E Extract OS            00 (0) 'MS-DOS'\n-16C99F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-16C9A1 Compression Method    0000 (0) 'Stored'\n-16C9A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16C9A7 CRC                   00000000 (0)\n-16C9AB Compressed Size       00000000 (0)\n-16C9AF Uncompressed Size     00000000 (0)\n-16C9B3 Filename Length       002E (46)\n-16C9B5 Extra Length          0009 (9)\n-16C9B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16C9B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16C9E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16C9E7   Length              0005 (5)\n-16C9E9   Flags               01 (1) 'Modification'\n-16C9EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-16C9EE PAYLOAD\n-\n-16D13F DATA DESCRIPTOR       08074B50 (134695760)\n-16D143 CRC                   C4C508F0 (3301247216)\n-16D147 Compressed Size       00000751 (1873)\n-16D14B Uncompressed Size     00000751 (1873)\n-\n-16D14F LOCAL HEADER #331     04034B50 (67324752)\n-16D153 Extract Zip Spec      14 (20) '2.0'\n-16D154 Extract OS            00 (0) 'MS-DOS'\n-16D155 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-16D157 Compression Method    0000 (0) 'Stored'\n-16D159 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16D15D CRC                   00000000 (0)\n-16D161 Compressed Size       00000000 (0)\n-16D165 Uncompressed Size     00000000 (0)\n-16D169 Filename Length       0031 (49)\n-16D16B Extra Length          0009 (9)\n-16D16D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16D16D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16D19E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16D1A0   Length              0005 (5)\n-16D1A2   Flags               01 (1) 'Modification'\n-16D1A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-16D1A7 PAYLOAD\n-\n-16ED42 DATA DESCRIPTOR       08074B50 (134695760)\n-16ED46 CRC                   55945694 (1435784852)\n-16ED4A Compressed Size       00001B9B (7067)\n-16ED4E Uncompressed Size     00001B9B (7067)\n-\n-16ED52 LOCAL HEADER #332     04034B50 (67324752)\n-16ED56 Extract Zip Spec      14 (20) '2.0'\n-16ED57 Extract OS            00 (0) 'MS-DOS'\n-16ED58 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-16ED5A Compression Method    0000 (0) 'Stored'\n-16ED5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16ED60 CRC                   00000000 (0)\n-16ED64 Compressed Size       00000000 (0)\n-16ED68 Uncompressed Size     00000000 (0)\n-16ED6C Filename Length       002F (47)\n-16ED6E Extra Length          0009 (9)\n-16ED70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16ED70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16ED9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16EDA1   Length              0005 (5)\n-16EDA3   Flags               01 (1) 'Modification'\n-16EDA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-16EDA8 PAYLOAD\n-\n-170864 DATA DESCRIPTOR       08074B50 (134695760)\n-170868 CRC                   CEB8A43B (3468207163)\n-17086C Compressed Size       00001ABC (6844)\n-170870 Uncompressed Size     00001ABC (6844)\n-\n-170874 LOCAL HEADER #333     04034B50 (67324752)\n-170878 Extract Zip Spec      14 (20) '2.0'\n-170879 Extract OS            00 (0) 'MS-DOS'\n-17087A General Purpose Flag  0000 (0)\n-17087C Compression Method    0000 (0) 'Stored'\n-17087E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-170882 CRC                   00000000 (0)\n-170886 Compressed Size       00000000 (0)\n-17088A Uncompressed Size     00000000 (0)\n-17088E Filename Length       0020 (32)\n-170890 Extra Length          0009 (9)\n-170892 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x170892: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1708B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1708B4   Length              0005 (5)\n-1708B6   Flags               01 (1) 'Modification'\n-1708B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1708BB LOCAL HEADER #334     04034B50 (67324752)\n-1708BF Extract Zip Spec      14 (20) '2.0'\n-1708C0 Extract OS            00 (0) 'MS-DOS'\n-1708C1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1708C3 Compression Method    0000 (0) 'Stored'\n-1708C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1708C9 CRC                   00000000 (0)\n-1708CD Compressed Size       00000000 (0)\n-1708D1 Uncompressed Size     00000000 (0)\n-1708D5 Filename Length       003F (63)\n-1708D7 Extra Length          0009 (9)\n-1708D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1708D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-170918 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17091A   Length              0005 (5)\n-17091C   Flags               01 (1) 'Modification'\n-17091D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-170921 PAYLOAD\n-\n-1710B2 DATA DESCRIPTOR       08074B50 (134695760)\n-1710B6 CRC                   339D235A (865936218)\n-1710BA Compressed Size       00000791 (1937)\n-1710BE Uncompressed Size     00000791 (1937)\n-\n-1710C2 LOCAL HEADER #335     04034B50 (67324752)\n-1710C6 Extract Zip Spec      14 (20) '2.0'\n-1710C7 Extract OS            00 (0) 'MS-DOS'\n-1710C8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1710CA Compression Method    0000 (0) 'Stored'\n-1710CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1710D0 CRC                   00000000 (0)\n-1710D4 Compressed Size       00000000 (0)\n-1710D8 Uncompressed Size     00000000 (0)\n-1710DC Filename Length       0032 (50)\n-1710DE Extra Length          0009 (9)\n-1710E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1710E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-171112 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-171114   Length              0005 (5)\n-171116   Flags               01 (1) 'Modification'\n-171117   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17111B PAYLOAD\n-\n-17590F DATA DESCRIPTOR       08074B50 (134695760)\n-175913 CRC                   F30DAB50 (4077759312)\n-175917 Compressed Size       000047F4 (18420)\n-17591B Uncompressed Size     000047F4 (18420)\n-\n-17591F LOCAL HEADER #336     04034B50 (67324752)\n-175923 Extract Zip Spec      14 (20) '2.0'\n-175924 Extract OS            00 (0) 'MS-DOS'\n-175925 General Purpose Flag  0000 (0)\n-175927 Compression Method    0000 (0) 'Stored'\n-175929 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17592D CRC                   00000000 (0)\n-175931 Compressed Size       00000000 (0)\n-175935 Uncompressed Size     00000000 (0)\n-175939 Filename Length       0020 (32)\n-17593B Extra Length          0009 (9)\n-17593D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17593D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17595D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17595F   Length              0005 (5)\n-175961   Flags               01 (1) 'Modification'\n-175962   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-175966 LOCAL HEADER #337     04034B50 (67324752)\n-17596A Extract Zip Spec      14 (20) '2.0'\n-17596B Extract OS            00 (0) 'MS-DOS'\n-17596C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-17596E Compression Method    0000 (0) 'Stored'\n-175970 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-175974 CRC                   00000000 (0)\n-175978 Compressed Size       00000000 (0)\n-17597C Uncompressed Size     00000000 (0)\n-175980 Filename Length       002E (46)\n-175982 Extra Length          0009 (9)\n-175984 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x175984: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1759B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1759B4   Length              0005 (5)\n-1759B6   Flags               01 (1) 'Modification'\n-1759B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1759BB PAYLOAD\n-\n-1761B1 DATA DESCRIPTOR       08074B50 (134695760)\n-1761B5 CRC                   9409E400 (2483676160)\n-1761B9 Compressed Size       000007F6 (2038)\n-1761BD Uncompressed Size     000007F6 (2038)\n-\n-1761C1 LOCAL HEADER #338     04034B50 (67324752)\n-1761C5 Extract Zip Spec      14 (20) '2.0'\n-1761C6 Extract OS            00 (0) 'MS-DOS'\n-1761C7 General Purpose Flag  0000 (0)\n-1761C9 Compression Method    0000 (0) 'Stored'\n-1761CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1761CF CRC                   00000000 (0)\n-1761D3 Compressed Size       00000000 (0)\n-1761D7 Uncompressed Size     00000000 (0)\n-1761DB Filename Length       0017 (23)\n-1761DD Extra Length          0009 (9)\n-1761DF Filename              'XXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1761DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1761F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1761F8   Length              0005 (5)\n-1761FA   Flags               01 (1) 'Modification'\n-1761FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1761FF LOCAL HEADER #339     04034B50 (67324752)\n-176203 Extract Zip Spec      14 (20) '2.0'\n-176204 Extract OS            00 (0) 'MS-DOS'\n-176205 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-176207 Compression Method    0000 (0) 'Stored'\n-176209 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17620D CRC                   00000000 (0)\n-176211 Compressed Size       00000000 (0)\n-176215 Uncompressed Size     00000000 (0)\n-176219 Filename Length       0033 (51)\n-17621B Extra Length          0009 (9)\n-17621D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17621D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-176250 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-176252   Length              0005 (5)\n-176254   Flags               01 (1) 'Modification'\n-176255   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-176259 PAYLOAD\n-\n-17792F DATA DESCRIPTOR       08074B50 (134695760)\n-177933 CRC                   0896EC5C (144108636)\n-177937 Compressed Size       000016D6 (5846)\n-17793B Uncompressed Size     000016D6 (5846)\n-\n-17793F LOCAL HEADER #340     04034B50 (67324752)\n-177943 Extract Zip Spec      14 (20) '2.0'\n-177944 Extract OS            00 (0) 'MS-DOS'\n-177945 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-177947 Compression Method    0000 (0) 'Stored'\n-177949 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17794D CRC                   00000000 (0)\n-177951 Compressed Size       00000000 (0)\n-177955 Uncompressed Size     00000000 (0)\n-177959 Filename Length       0034 (52)\n-17795B Extra Length          0009 (9)\n-17795D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17795D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-177991 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-177993   Length              0005 (5)\n-177995   Flags               01 (1) 'Modification'\n-177996   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17799A PAYLOAD\n-\n-177EF5 DATA DESCRIPTOR       08074B50 (134695760)\n-177EF9 CRC                   7DBCFDD1 (2109537745)\n-177EFD Compressed Size       0000055B (1371)\n-177F01 Uncompressed Size     0000055B (1371)\n-\n-177F05 LOCAL HEADER #341     04034B50 (67324752)\n-177F09 Extract Zip Spec      14 (20) '2.0'\n-177F0A Extract OS            00 (0) 'MS-DOS'\n-177F0B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-177F0D Compression Method    0000 (0) 'Stored'\n-177F0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-177F13 CRC                   00000000 (0)\n-177F17 Compressed Size       00000000 (0)\n-177F1B Uncompressed Size     00000000 (0)\n-177F1F Filename Length       0031 (49)\n-177F21 Extra Length          0009 (9)\n-177F23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x177F23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-177F54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-177F56   Length              0005 (5)\n-177F58   Flags               01 (1) 'Modification'\n-177F59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-177F5D PAYLOAD\n-\n-1783C1 DATA DESCRIPTOR       08074B50 (134695760)\n-1783C5 CRC                   3AC92564 (986260836)\n-1783C9 Compressed Size       00000464 (1124)\n-1783CD Uncompressed Size     00000464 (1124)\n-\n-1783D1 LOCAL HEADER #342     04034B50 (67324752)\n-1783D5 Extract Zip Spec      14 (20) '2.0'\n-1783D6 Extract OS            00 (0) 'MS-DOS'\n-1783D7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1783D9 Compression Method    0000 (0) 'Stored'\n-1783DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1783DF CRC                   00000000 (0)\n-1783E3 Compressed Size       00000000 (0)\n-1783E7 Uncompressed Size     00000000 (0)\n-1783EB Filename Length       0021 (33)\n-1783ED Extra Length          0009 (9)\n-1783EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1783EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-178410 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-178412   Length              0005 (5)\n-178414   Flags               01 (1) 'Modification'\n-178415   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-178419 PAYLOAD\n-\n-178A37 DATA DESCRIPTOR       08074B50 (134695760)\n-178A3B CRC                   0EB290DE (246583518)\n-178A3F Compressed Size       0000061E (1566)\n-178A43 Uncompressed Size     0000061E (1566)\n-\n-178A47 LOCAL HEADER #343     04034B50 (67324752)\n-178A4B Extract Zip Spec      14 (20) '2.0'\n-178A4C Extract OS            00 (0) 'MS-DOS'\n-178A4D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-178A4F Compression Method    0000 (0) 'Stored'\n-178A51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-178A55 CRC                   00000000 (0)\n-178A59 Compressed Size       00000000 (0)\n-178A5D Uncompressed Size     00000000 (0)\n-178A61 Filename Length       002B (43)\n-178A63 Extra Length          0009 (9)\n-178A65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x178A65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-178A90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-178A92   Length              0005 (5)\n-178A94   Flags               01 (1) 'Modification'\n-178A95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-178A99 PAYLOAD\n-\n-179375 DATA DESCRIPTOR       08074B50 (134695760)\n-179379 CRC                   2A1C7A3B (706509371)\n-17937D Compressed Size       000008DC (2268)\n-179381 Uncompressed Size     000008DC (2268)\n-\n-179385 LOCAL HEADER #344     04034B50 (67324752)\n-179389 Extract Zip Spec      14 (20) '2.0'\n-17938A Extract OS            00 (0) 'MS-DOS'\n-17938B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-17938D Compression Method    0000 (0) 'Stored'\n-17938F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-179393 CRC                   00000000 (0)\n-179397 Compressed Size       00000000 (0)\n-17939B Uncompressed Size     00000000 (0)\n-17939F Filename Length       0029 (41)\n-1793A1 Extra Length          0009 (9)\n-1793A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1793A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1793CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1793CE   Length              0005 (5)\n-1793D0   Flags               01 (1) 'Modification'\n-1793D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1793D5 PAYLOAD\n-\n-17A63F DATA DESCRIPTOR       08074B50 (134695760)\n-17A643 CRC                   3A57EAC8 (978840264)\n-17A647 Compressed Size       0000126A (4714)\n-17A64B Uncompressed Size     0000126A (4714)\n-\n-17A64F LOCAL HEADER #345     04034B50 (67324752)\n-17A653 Extract Zip Spec      14 (20) '2.0'\n-17A654 Extract OS            00 (0) 'MS-DOS'\n-17A655 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-17A657 Compression Method    0000 (0) 'Stored'\n-17A659 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17A65D CRC                   00000000 (0)\n-17A661 Compressed Size       00000000 (0)\n-17A665 Uncompressed Size     00000000 (0)\n-17A669 Filename Length       0028 (40)\n-17A66B Extra Length          0009 (9)\n-17A66D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17A66D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17A695 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17A697   Length              0005 (5)\n-17A699   Flags               01 (1) 'Modification'\n-17A69A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17A69E PAYLOAD\n-\n-17AB01 DATA DESCRIPTOR       08074B50 (134695760)\n-17AB05 CRC                   B1AAD78E (2980763534)\n-17AB09 Compressed Size       00000463 (1123)\n-17AB0D Uncompressed Size     00000463 (1123)\n-\n-17AB11 LOCAL HEADER #346     04034B50 (67324752)\n-17AB15 Extract Zip Spec      14 (20) '2.0'\n-17AB16 Extract OS            00 (0) 'MS-DOS'\n-17AB17 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-17AB19 Compression Method    0000 (0) 'Stored'\n-17AB1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17AB1F CRC                   00000000 (0)\n-17AB23 Compressed Size       00000000 (0)\n-17AB27 Uncompressed Size     00000000 (0)\n-17AB2B Filename Length       0030 (48)\n-17AB2D Extra Length          0009 (9)\n-17AB2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17AB2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17AB5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17AB61   Length              0005 (5)\n-17AB63   Flags               01 (1) 'Modification'\n-17AB64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17AB68 PAYLOAD\n-\n-17BD75 DATA DESCRIPTOR       08074B50 (134695760)\n-17BD79 CRC                   903888C3 (2419624131)\n-17BD7D Compressed Size       0000120D (4621)\n-17BD81 Uncompressed Size     0000120D (4621)\n-\n-17BD85 LOCAL HEADER #347     04034B50 (67324752)\n-17BD89 Extract Zip Spec      14 (20) '2.0'\n-17BD8A Extract OS            00 (0) 'MS-DOS'\n-17BD8B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-17BD8D Compression Method    0000 (0) 'Stored'\n-17BD8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17BD93 CRC                   00000000 (0)\n-17BD97 Compressed Size       00000000 (0)\n-17BD9B Uncompressed Size     00000000 (0)\n-17BD9F Filename Length       0026 (38)\n-17BDA1 Extra Length          0009 (9)\n-17BDA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17BDA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17BDC9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17BDCB   Length              0005 (5)\n-17BDCD   Flags               01 (1) 'Modification'\n-17BDCE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17BDD2 PAYLOAD\n-\n-17D28C DATA DESCRIPTOR       08074B50 (134695760)\n-17D290 CRC                   98A61B9D (2561022877)\n-17D294 Compressed Size       000014BA (5306)\n-17D298 Uncompressed Size     000014BA (5306)\n-\n-17D29C LOCAL HEADER #348     04034B50 (67324752)\n-17D2A0 Extract Zip Spec      14 (20) '2.0'\n-17D2A1 Extract OS            00 (0) 'MS-DOS'\n-17D2A2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-17D2A4 Compression Method    0000 (0) 'Stored'\n-17D2A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17D2AA CRC                   00000000 (0)\n-17D2AE Compressed Size       00000000 (0)\n-17D2B2 Uncompressed Size     00000000 (0)\n-17D2B6 Filename Length       0033 (51)\n-17D2B8 Extra Length          0009 (9)\n-17D2BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17D2BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17D2ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17D2EF   Length              0005 (5)\n-17D2F1   Flags               01 (1) 'Modification'\n-17D2F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17D2F6 PAYLOAD\n-\n-17D7B3 DATA DESCRIPTOR       08074B50 (134695760)\n-17D7B7 CRC                   1AE780F7 (451379447)\n-17D7BB Compressed Size       000004BD (1213)\n-17D7BF Uncompressed Size     000004BD (1213)\n-\n-17D7C3 LOCAL HEADER #349     04034B50 (67324752)\n-17D7C7 Extract Zip Spec      14 (20) '2.0'\n-17D7C8 Extract OS            00 (0) 'MS-DOS'\n-17D7C9 General Purpose Flag  0000 (0)\n-17D7CB Compression Method    0000 (0) 'Stored'\n-17D7CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17D7D1 CRC                   00000000 (0)\n-17D7D5 Compressed Size       00000000 (0)\n-17D7D9 Uncompressed Size     00000000 (0)\n-17D7DD Filename Length       0015 (21)\n-17D7DF Extra Length          0009 (9)\n-17D7E1 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17D7E1: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17D7F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17D7F8   Length              0005 (5)\n-17D7FA   Flags               01 (1) 'Modification'\n-17D7FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-17D7FF LOCAL HEADER #350     04034B50 (67324752)\n-17D803 Extract Zip Spec      14 (20) '2.0'\n-17D804 Extract OS            00 (0) 'MS-DOS'\n-17D805 General Purpose Flag  0000 (0)\n-17D807 Compression Method    0000 (0) 'Stored'\n-17D809 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17D80D CRC                   00000000 (0)\n-17D811 Compressed Size       00000000 (0)\n-17D815 Uncompressed Size     00000000 (0)\n-17D819 Filename Length       001B (27)\n-17D81B Extra Length          0009 (9)\n-17D81D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17D81D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17D838 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17D83A   Length              0005 (5)\n-17D83C   Flags               01 (1) 'Modification'\n-17D83D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-17D841 LOCAL HEADER #351     04034B50 (67324752)\n-17D845 Extract Zip Spec      14 (20) '2.0'\n-17D846 Extract OS            00 (0) 'MS-DOS'\n-17D847 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-17D849 Compression Method    0000 (0) 'Stored'\n-17D84B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17D84F CRC                   00000000 (0)\n-17D853 Compressed Size       00000000 (0)\n-17D857 Uncompressed Size     00000000 (0)\n-17D85B Filename Length       0037 (55)\n-17D85D Extra Length          0009 (9)\n-17D85F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17D85F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17D896 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17D898   Length              0005 (5)\n-17D89A   Flags               01 (1) 'Modification'\n-17D89B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17D89F PAYLOAD\n-\n-17DC83 DATA DESCRIPTOR       08074B50 (134695760)\n-17DC87 CRC                   86E81518 (2263356696)\n-17DC8B Compressed Size       000003E4 (996)\n-17DC8F Uncompressed Size     000003E4 (996)\n-\n-17DC93 LOCAL HEADER #352     04034B50 (67324752)\n-17DC97 Extract Zip Spec      14 (20) '2.0'\n-17DC98 Extract OS            00 (0) 'MS-DOS'\n-17DC99 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-17DC9B Compression Method    0000 (0) 'Stored'\n-17DC9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17DCA1 CRC                   00000000 (0)\n-17DCA5 Compressed Size       00000000 (0)\n-17DCA9 Uncompressed Size     00000000 (0)\n-17DCAD Filename Length       0030 (48)\n-17DCAF Extra Length          0009 (9)\n-17DCB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17DCB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17DCE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17DCE3   Length              0005 (5)\n-17DCE5   Flags               01 (1) 'Modification'\n-17DCE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17DCEA PAYLOAD\n-\n-17EF92 DATA DESCRIPTOR       08074B50 (134695760)\n-17EF96 CRC                   201D5BFC (538795004)\n-17EF9A Compressed Size       000012A8 (4776)\n-17EF9E Uncompressed Size     000012A8 (4776)\n-\n-17EFA2 LOCAL HEADER #353     04034B50 (67324752)\n-17EFA6 Extract Zip Spec      14 (20) '2.0'\n-17EFA7 Extract OS            00 (0) 'MS-DOS'\n-17EFA8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-17EFAA Compression Method    0000 (0) 'Stored'\n-17EFAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17EFB0 CRC                   00000000 (0)\n-17EFB4 Compressed Size       00000000 (0)\n-17EFB8 Uncompressed Size     00000000 (0)\n-17EFBC Filename Length       002F (47)\n-17EFBE Extra Length          0009 (9)\n-17EFC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17EFC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17EFEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17EFF1   Length              0005 (5)\n-17EFF3   Flags               01 (1) 'Modification'\n-17EFF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17EFF8 PAYLOAD\n-\n-17FA31 DATA DESCRIPTOR       08074B50 (134695760)\n-17FA35 CRC                   E946A330 (3913720624)\n-17FA39 Compressed Size       00000A39 (2617)\n-17FA3D Uncompressed Size     00000A39 (2617)\n-\n-17FA41 LOCAL HEADER #354     04034B50 (67324752)\n-17FA45 Extract Zip Spec      14 (20) '2.0'\n-17FA46 Extract OS            00 (0) 'MS-DOS'\n-17FA47 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-17FA49 Compression Method    0000 (0) 'Stored'\n-17FA4B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17FA4F CRC                   00000000 (0)\n-17FA53 Compressed Size       00000000 (0)\n-17FA57 Uncompressed Size     00000000 (0)\n-17FA5B Filename Length       0036 (54)\n-17FA5D Extra Length          0009 (9)\n-17FA5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17FA5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17FA95 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17FA97   Length              0005 (5)\n-17FA99   Flags               01 (1) 'Modification'\n-17FA9A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17FA9E PAYLOAD\n-\n-17FE62 DATA DESCRIPTOR       08074B50 (134695760)\n-17FE66 CRC                   FBAECD89 (4222537097)\n-17FE6A Compressed Size       000003C4 (964)\n-17FE6E Uncompressed Size     000003C4 (964)\n-\n-17FE72 LOCAL HEADER #355     04034B50 (67324752)\n-17FE76 Extract Zip Spec      14 (20) '2.0'\n-17FE77 Extract OS            00 (0) 'MS-DOS'\n-17FE78 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-17FE7A Compression Method    0000 (0) 'Stored'\n-17FE7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17FE80 CRC                   00000000 (0)\n-17FE84 Compressed Size       00000000 (0)\n-17FE88 Uncompressed Size     00000000 (0)\n-17FE8C Filename Length       0033 (51)\n-17FE8E Extra Length          0009 (9)\n-17FE90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17FE90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17FEC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17FEC5   Length              0005 (5)\n-17FEC7   Flags               01 (1) 'Modification'\n-17FEC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17FECC PAYLOAD\n-\n-180ABA DATA DESCRIPTOR       08074B50 (134695760)\n-180ABE CRC                   E22DB581 (3794646401)\n-180AC2 Compressed Size       00000BEE (3054)\n-180AC6 Uncompressed Size     00000BEE (3054)\n-\n-180ACA LOCAL HEADER #356     04034B50 (67324752)\n-180ACE Extract Zip Spec      14 (20) '2.0'\n-180ACF Extract OS            00 (0) 'MS-DOS'\n-180AD0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-180AD2 Compression Method    0000 (0) 'Stored'\n-180AD4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-180AD8 CRC                   00000000 (0)\n-180ADC Compressed Size       00000000 (0)\n-180AE0 Uncompressed Size     00000000 (0)\n-180AE4 Filename Length       002D (45)\n-180AE6 Extra Length          0009 (9)\n-180AE8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x180AE8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-180B15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-180B17   Length              0005 (5)\n-180B19   Flags               01 (1) 'Modification'\n-180B1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-180B1E PAYLOAD\n-\n-1826BB DATA DESCRIPTOR       08074B50 (134695760)\n-1826BF CRC                   02426CD5 (37907669)\n-1826C3 Compressed Size       00001B9D (7069)\n-1826C7 Uncompressed Size     00001B9D (7069)\n-\n-1826CB LOCAL HEADER #357     04034B50 (67324752)\n-1826CF Extract Zip Spec      14 (20) '2.0'\n-1826D0 Extract OS            00 (0) 'MS-DOS'\n-1826D1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1826D3 Compression Method    0000 (0) 'Stored'\n-1826D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1826D9 CRC                   00000000 (0)\n-1826DD Compressed Size       00000000 (0)\n-1826E1 Uncompressed Size     00000000 (0)\n-1826E5 Filename Length       0030 (48)\n-1826E7 Extra Length          0009 (9)\n-1826E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1826E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-182719 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18271B   Length              0005 (5)\n-18271D   Flags               01 (1) 'Modification'\n-18271E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-182722 PAYLOAD\n-\n-1832D2 DATA DESCRIPTOR       08074B50 (134695760)\n-1832D6 CRC                   641CBA7B (1679604347)\n-1832DA Compressed Size       00000BB0 (2992)\n-1832DE Uncompressed Size     00000BB0 (2992)\n-\n-1832E2 LOCAL HEADER #358     04034B50 (67324752)\n-1832E6 Extract Zip Spec      14 (20) '2.0'\n-1832E7 Extract OS            00 (0) 'MS-DOS'\n-1832E8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1832EA Compression Method    0000 (0) 'Stored'\n-1832EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1832F0 CRC                   00000000 (0)\n-1832F4 Compressed Size       00000000 (0)\n-1832F8 Uncompressed Size     00000000 (0)\n-1832FC Filename Length       0033 (51)\n-1832FE Extra Length          0009 (9)\n-183300 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x183300: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-183333 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-183335   Length              0005 (5)\n-183337   Flags               01 (1) 'Modification'\n-183338   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-18333C PAYLOAD\n-\n-183DAD DATA DESCRIPTOR       08074B50 (134695760)\n-183DB1 CRC                   C652D326 (3327316774)\n-183DB5 Compressed Size       00000A71 (2673)\n-183DB9 Uncompressed Size     00000A71 (2673)\n-\n-183DBD LOCAL HEADER #359     04034B50 (67324752)\n-183DC1 Extract Zip Spec      14 (20) '2.0'\n-183DC2 Extract OS            00 (0) 'MS-DOS'\n-183DC3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-183DC5 Compression Method    0000 (0) 'Stored'\n-183DC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-183DCB CRC                   00000000 (0)\n-183DCF Compressed Size       00000000 (0)\n-183DD3 Uncompressed Size     00000000 (0)\n-183DD7 Filename Length       002D (45)\n-183DD9 Extra Length          0009 (9)\n-183DDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x183DDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-183E08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-183E0A   Length              0005 (5)\n-183E0C   Flags               01 (1) 'Modification'\n-183E0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-183E11 PAYLOAD\n-\n-18581E DATA DESCRIPTOR       08074B50 (134695760)\n-185822 CRC                   DE4FB79A (3729766298)\n-185826 Compressed Size       00001A0D (6669)\n-18582A Uncompressed Size     00001A0D (6669)\n-\n-18582E LOCAL HEADER #360     04034B50 (67324752)\n-185832 Extract Zip Spec      14 (20) '2.0'\n-185833 Extract OS            00 (0) 'MS-DOS'\n-185834 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-185836 Compression Method    0000 (0) 'Stored'\n-185838 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18583C CRC                   00000000 (0)\n-185840 Compressed Size       00000000 (0)\n-185844 Uncompressed Size     00000000 (0)\n-185848 Filename Length       0031 (49)\n-18584A Extra Length          0009 (9)\n-18584C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18584C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18587D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18587F   Length              0005 (5)\n-185881   Flags               01 (1) 'Modification'\n-185882   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-185886 PAYLOAD\n-\n-186990 DATA DESCRIPTOR       08074B50 (134695760)\n-186994 CRC                   C6C2FD7D (3334667645)\n-186998 Compressed Size       0000110A (4362)\n-18699C Uncompressed Size     0000110A (4362)\n-\n-1869A0 LOCAL HEADER #361     04034B50 (67324752)\n-1869A4 Extract Zip Spec      14 (20) '2.0'\n-1869A5 Extract OS            00 (0) 'MS-DOS'\n-1869A6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1869A8 Compression Method    0000 (0) 'Stored'\n-1869AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1869AE CRC                   00000000 (0)\n-1869B2 Compressed Size       00000000 (0)\n-1869B6 Uncompressed Size     00000000 (0)\n-1869BA Filename Length       002F (47)\n-1869BC Extra Length          0009 (9)\n-1869BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1869BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1869ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1869EF   Length              0005 (5)\n-1869F1   Flags               01 (1) 'Modification'\n-1869F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1869F6 PAYLOAD\n-\n-187612 DATA DESCRIPTOR       08074B50 (134695760)\n-187616 CRC                   92839F02 (2458099458)\n-18761A Compressed Size       00000C1C (3100)\n-18761E Uncompressed Size     00000C1C (3100)\n-\n-187622 LOCAL HEADER #362     04034B50 (67324752)\n-187626 Extract Zip Spec      14 (20) '2.0'\n-187627 Extract OS            00 (0) 'MS-DOS'\n-187628 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18762A Compression Method    0000 (0) 'Stored'\n-18762C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-187630 CRC                   00000000 (0)\n-187634 Compressed Size       00000000 (0)\n-187638 Uncompressed Size     00000000 (0)\n-18763C Filename Length       0031 (49)\n-18763E Extra Length          0009 (9)\n-187640 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x187640: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-187671 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-187673   Length              0005 (5)\n-187675   Flags               01 (1) 'Modification'\n-187676   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-18767A PAYLOAD\n-\n-1892F7 DATA DESCRIPTOR       08074B50 (134695760)\n-1892FB CRC                   ED067114 (3976622356)\n-1892FF Compressed Size       00001C7D (7293)\n-189303 Uncompressed Size     00001C7D (7293)\n-\n-189307 LOCAL HEADER #363     04034B50 (67324752)\n-18930B Extract Zip Spec      14 (20) '2.0'\n-18930C Extract OS            00 (0) 'MS-DOS'\n-18930D General Purpose Flag  0000 (0)\n-18930F Compression Method    0000 (0) 'Stored'\n-189311 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-189315 CRC                   00000000 (0)\n-189319 Compressed Size       00000000 (0)\n-18931D Uncompressed Size     00000000 (0)\n-189321 Filename Length       001D (29)\n-189323 Extra Length          0009 (9)\n-189325 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x189325: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-189342 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-189344   Length              0005 (5)\n-189346   Flags               01 (1) 'Modification'\n-189347   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18934B LOCAL HEADER #364     04034B50 (67324752)\n-18934F Extract Zip Spec      14 (20) '2.0'\n-189350 Extract OS            00 (0) 'MS-DOS'\n-189351 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-189353 Compression Method    0000 (0) 'Stored'\n-189355 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-189359 CRC                   00000000 (0)\n-18935D Compressed Size       00000000 (0)\n-189361 Uncompressed Size     00000000 (0)\n-189365 Filename Length       002D (45)\n-189367 Extra Length          0009 (9)\n-189369 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x189369: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-189396 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-189398   Length              0005 (5)\n-18939A   Flags               01 (1) 'Modification'\n-18939B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-18939F PAYLOAD\n-\n-189720 DATA DESCRIPTOR       08074B50 (134695760)\n-189724 CRC                   D7F884E9 (3623388393)\n-189728 Compressed Size       00000381 (897)\n-18972C Uncompressed Size     00000381 (897)\n-\n-189730 LOCAL HEADER #365     04034B50 (67324752)\n-189734 Extract Zip Spec      14 (20) '2.0'\n-189735 Extract OS            00 (0) 'MS-DOS'\n-189736 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-189738 Compression Method    0000 (0) 'Stored'\n-18973A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18973E CRC                   00000000 (0)\n-189742 Compressed Size       00000000 (0)\n-189746 Uncompressed Size     00000000 (0)\n-18974A Filename Length       002D (45)\n-18974C Extra Length          0009 (9)\n-18974E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18974E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18977B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18977D   Length              0005 (5)\n-18977F   Flags               01 (1) 'Modification'\n-189780   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-189784 PAYLOAD\n-\n-189B95 DATA DESCRIPTOR       08074B50 (134695760)\n-189B99 CRC                   28AB9AE3 (682334947)\n-189B9D Compressed Size       00000411 (1041)\n-189BA1 Uncompressed Size     00000411 (1041)\n-\n-189BA5 LOCAL HEADER #366     04034B50 (67324752)\n-189BA9 Extract Zip Spec      14 (20) '2.0'\n-189BAA Extract OS            00 (0) 'MS-DOS'\n-189BAB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-189BAD Compression Method    0000 (0) 'Stored'\n-189BAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-189BB3 CRC                   00000000 (0)\n-189BB7 Compressed Size       00000000 (0)\n-189BBB Uncompressed Size     00000000 (0)\n-189BBF Filename Length       0035 (53)\n-189BC1 Extra Length          0009 (9)\n-189BC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x189BC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-189BF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-189BFA   Length              0005 (5)\n-189BFC   Flags               01 (1) 'Modification'\n-189BFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-189C01 PAYLOAD\n-\n-18A027 DATA DESCRIPTOR       08074B50 (134695760)\n-18A02B CRC                   9CAA7033 (2628415539)\n-18A02F Compressed Size       00000426 (1062)\n-18A033 Uncompressed Size     00000426 (1062)\n-\n-18A037 LOCAL HEADER #367     04034B50 (67324752)\n-18A03B Extract Zip Spec      14 (20) '2.0'\n-18A03C Extract OS            00 (0) 'MS-DOS'\n-18A03D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18A03F Compression Method    0000 (0) 'Stored'\n-18A041 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18A045 CRC                   00000000 (0)\n-18A049 Compressed Size       00000000 (0)\n-18A04D Uncompressed Size     00000000 (0)\n-18A051 Filename Length       0032 (50)\n-18A053 Extra Length          0009 (9)\n-18A055 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18A055: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18A087 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18A089   Length              0005 (5)\n-18A08B   Flags               01 (1) 'Modification'\n-18A08C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-18A090 PAYLOAD\n-\n-18A859 DATA DESCRIPTOR       08074B50 (134695760)\n-18A85D CRC                   C2B7ABEC (3266817004)\n-18A861 Compressed Size       000007C9 (1993)\n-18A865 Uncompressed Size     000007C9 (1993)\n-\n-18A869 LOCAL HEADER #368     04034B50 (67324752)\n-18A86D Extract Zip Spec      14 (20) '2.0'\n-18A86E Extract OS            00 (0) 'MS-DOS'\n-18A86F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18A871 Compression Method    0000 (0) 'Stored'\n-18A873 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18A877 CRC                   00000000 (0)\n-18A87B Compressed Size       00000000 (0)\n-18A87F Uncompressed Size     00000000 (0)\n-18A883 Filename Length       0030 (48)\n-18A885 Extra Length          0009 (9)\n-18A887 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18A887: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18A8B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18A8B9   Length              0005 (5)\n-18A8BB   Flags               01 (1) 'Modification'\n-18A8BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-18A8C0 PAYLOAD\n-\n-18B01E DATA DESCRIPTOR       08074B50 (134695760)\n-18B022 CRC                   2C4FF5E6 (743437798)\n-18B026 Compressed Size       0000075E (1886)\n-18B02A Uncompressed Size     0000075E (1886)\n-\n-18B02E LOCAL HEADER #369     04034B50 (67324752)\n-18B032 Extract Zip Spec      14 (20) '2.0'\n-18B033 Extract OS            00 (0) 'MS-DOS'\n-18B034 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18B036 Compression Method    0000 (0) 'Stored'\n-18B038 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18B03C CRC                   00000000 (0)\n-18B040 Compressed Size       00000000 (0)\n-18B044 Uncompressed Size     00000000 (0)\n-18B048 Filename Length       0038 (56)\n-18B04A Extra Length          0009 (9)\n-18B04C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18B04C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18B084 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18B086   Length              0005 (5)\n-18B088   Flags               01 (1) 'Modification'\n-18B089   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-18B08D PAYLOAD\n-\n-18B4B9 DATA DESCRIPTOR       08074B50 (134695760)\n-18B4BD CRC                   420D2C18 (1108159512)\n-18B4C1 Compressed Size       0000042C (1068)\n-18B4C5 Uncompressed Size     0000042C (1068)\n-\n-18B4C9 LOCAL HEADER #370     04034B50 (67324752)\n-18B4CD Extract Zip Spec      14 (20) '2.0'\n-18B4CE Extract OS            00 (0) 'MS-DOS'\n-18B4CF General Purpose Flag  0000 (0)\n-18B4D1 Compression Method    0000 (0) 'Stored'\n-18B4D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18B4D7 CRC                   00000000 (0)\n-18B4DB Compressed Size       00000000 (0)\n-18B4DF Uncompressed Size     00000000 (0)\n-18B4E3 Filename Length       001D (29)\n-18B4E5 Extra Length          0009 (9)\n-18B4E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18B4E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18B504 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18B506   Length              0005 (5)\n-18B508   Flags               01 (1) 'Modification'\n-18B509   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18B50D LOCAL HEADER #371     04034B50 (67324752)\n-18B511 Extract Zip Spec      14 (20) '2.0'\n-18B512 Extract OS            00 (0) 'MS-DOS'\n-18B513 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18B515 Compression Method    0000 (0) 'Stored'\n-18B517 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18B51B CRC                   00000000 (0)\n-18B51F Compressed Size       00000000 (0)\n-18B523 Uncompressed Size     00000000 (0)\n-18B527 Filename Length       0036 (54)\n-18B529 Extra Length          0009 (9)\n-18B52B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18B52B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18B561 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18B563   Length              0005 (5)\n-18B565   Flags               01 (1) 'Modification'\n-18B566   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-18B56A PAYLOAD\n-\n-18C0B3 DATA DESCRIPTOR       08074B50 (134695760)\n-18C0B7 CRC                   40BAC24E (1085981262)\n-18C0BB Compressed Size       00000B49 (2889)\n-18C0BF Uncompressed Size     00000B49 (2889)\n-\n-18C0C3 LOCAL HEADER #372     04034B50 (67324752)\n-18C0C7 Extract Zip Spec      14 (20) '2.0'\n-18C0C8 Extract OS            00 (0) 'MS-DOS'\n-18C0C9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18C0CB Compression Method    0000 (0) 'Stored'\n-18C0CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18C0D1 CRC                   00000000 (0)\n-18C0D5 Compressed Size       00000000 (0)\n-18C0D9 Uncompressed Size     00000000 (0)\n-18C0DD Filename Length       002F (47)\n-18C0DF Extra Length          0009 (9)\n-18C0E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18C0E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18C110 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18C112   Length              0005 (5)\n-18C114   Flags               01 (1) 'Modification'\n-18C115   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-18C119 PAYLOAD\n-\n-18D176 DATA DESCRIPTOR       08074B50 (134695760)\n-18D17A CRC                   CC5CA724 (3428624164)\n-18D17E Compressed Size       0000105D (4189)\n-18D182 Uncompressed Size     0000105D (4189)\n-\n-18D186 LOCAL HEADER #373     04034B50 (67324752)\n-18D18A Extract Zip Spec      14 (20) '2.0'\n-18D18B Extract OS            00 (0) 'MS-DOS'\n-18D18C General Purpose Flag  0000 (0)\n-18D18E Compression Method    0000 (0) 'Stored'\n-18D190 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18D194 CRC                   00000000 (0)\n-18D198 Compressed Size       00000000 (0)\n-18D19C Uncompressed Size     00000000 (0)\n-18D1A0 Filename Length       0009 (9)\n-18D1A2 Extra Length          0009 (9)\n-18D1A4 Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x18D1A4: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-18D1AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18D1AF   Length              0005 (5)\n-18D1B1   Flags               01 (1) 'Modification'\n-18D1B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18D1B6 LOCAL HEADER #374     04034B50 (67324752)\n-18D1BA Extract Zip Spec      14 (20) '2.0'\n-18D1BB Extract OS            00 (0) 'MS-DOS'\n-18D1BC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18D1BE Compression Method    0000 (0) 'Stored'\n-18D1C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18D1C4 CRC                   00000000 (0)\n-18D1C8 Compressed Size       00000000 (0)\n-18D1CC Uncompressed Size     00000000 (0)\n-18D1D0 Filename Length       001E (30)\n-18D1D2 Extra Length          0009 (9)\n-18D1D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18D1D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18D1F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18D1F4   Length              0005 (5)\n-18D1F6   Flags               01 (1) 'Modification'\n-18D1F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-18D1FB PAYLOAD\n-\n-18E3A3 DATA DESCRIPTOR       08074B50 (134695760)\n-18E3A7 CRC                   94CE4031 (2496544817)\n-18E3AB Compressed Size       000011A8 (4520)\n-18E3AF Uncompressed Size     000011A8 (4520)\n-\n-18E3B3 CENTRAL HEADER #1     02014B50 (33639248)\n-18E3B7 Created Zip Spec      14 (20) '2.0'\n-18E3B8 Created OS            00 (0) 'MS-DOS'\n-18E3B9 Extract Zip Spec      14 (20) '2.0'\n-18E3BA Extract OS            00 (0) 'MS-DOS'\n-18E3BB General Purpose Flag  0000 (0)\n-18E3BD Compression Method    0000 (0) 'Stored'\n-18E3BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E3C3 CRC                   00000000 (0)\n-18E3C7 Compressed Size       00000000 (0)\n-18E3CB Uncompressed Size     00000000 (0)\n-18E3CF Filename Length       0009 (9)\n-18E3D1 Extra Length          0009 (9)\n-18E3D3 Comment Length        0000 (0)\n-18E3D5 Disk Start            0000 (0)\n-18E3D7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E3D9 Ext File Attributes   00000000 (0)\n-18E3DD Local Header Offset   00000000 (0)\n-18E3E1 Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E3E1: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-18E3EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E3EC   Length              0005 (5)\n-18E3EE   Flags               01 (1) 'Modification'\n-18E3EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E3F3 CENTRAL HEADER #2     02014B50 (33639248)\n-18E3F7 Created Zip Spec      14 (20) '2.0'\n-18E3F8 Created OS            00 (0) 'MS-DOS'\n-18E3F9 Extract Zip Spec      14 (20) '2.0'\n-18E3FA Extract OS            00 (0) 'MS-DOS'\n-18E3FB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E3FD Compression Method    0000 (0) 'Stored'\n-18E3FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E403 CRC                   84843D83 (2223259011)\n-18E407 Compressed Size       00000753 (1875)\n-18E40B Uncompressed Size     00000753 (1875)\n-18E40F Filename Length       0015 (21)\n-18E411 Extra Length          0009 (9)\n-18E413 Comment Length        0000 (0)\n-18E415 Disk Start            0000 (0)\n-18E417 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E419 Ext File Attributes   00000000 (0)\n-18E41D Local Header Offset   00000030 (48)\n-18E421 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E421: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E436 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E438   Length              0005 (5)\n-18E43A   Flags               01 (1) 'Modification'\n-18E43B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E43F CENTRAL HEADER #3     02014B50 (33639248)\n-18E443 Created Zip Spec      14 (20) '2.0'\n-18E444 Created OS            00 (0) 'MS-DOS'\n-18E445 Extract Zip Spec      14 (20) '2.0'\n-18E446 Extract OS            00 (0) 'MS-DOS'\n-18E447 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E449 Compression Method    0000 (0) 'Stored'\n-18E44B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E44F CRC                   86E2B4B4 (2263004340)\n-18E453 Compressed Size       00002C5E (11358)\n-18E457 Uncompressed Size     00002C5E (11358)\n-18E45B Filename Length       0010 (16)\n-18E45D Extra Length          0009 (9)\n-18E45F Comment Length        0000 (0)\n-18E461 Disk Start            0000 (0)\n-18E463 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E465 Ext File Attributes   00000000 (0)\n-18E469 Local Header Offset   000007CF (1999)\n-18E46D Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E46D: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E47D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E47F   Length              0005 (5)\n-18E481   Flags               01 (1) 'Modification'\n-18E482   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E486 CENTRAL HEADER #4     02014B50 (33639248)\n-18E48A Created Zip Spec      14 (20) '2.0'\n-18E48B Created OS            00 (0) 'MS-DOS'\n-18E48C Extract Zip Spec      14 (20) '2.0'\n-18E48D Extract OS            00 (0) 'MS-DOS'\n-18E48E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E490 Compression Method    0000 (0) 'Stored'\n-18E492 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E496 CRC                   EE027FB2 (3993141170)\n-18E49A Compressed Size       00000019 (25)\n-18E49E Uncompressed Size     00000019 (25)\n-18E4A2 Filename Length       0014 (20)\n-18E4A4 Extra Length          0009 (9)\n-18E4A6 Comment Length        0000 (0)\n-18E4A8 Disk Start            0000 (0)\n-18E4AA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E4AC Ext File Attributes   00000000 (0)\n-18E4B0 Local Header Offset   00003474 (13428)\n-18E4B4 Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E4B4: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E4C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E4CA   Length              0005 (5)\n-18E4CC   Flags               01 (1) 'Modification'\n-18E4CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E4D1 CENTRAL HEADER #5     02014B50 (33639248)\n-18E4D5 Created Zip Spec      14 (20) '2.0'\n-18E4D6 Created OS            00 (0) 'MS-DOS'\n-18E4D7 Extract Zip Spec      14 (20) '2.0'\n-18E4D8 Extract OS            00 (0) 'MS-DOS'\n-18E4D9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E4DB Compression Method    0000 (0) 'Stored'\n-18E4DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E4E1 CRC                   59F12043 (1508974659)\n-18E4E5 Compressed Size       000000A9 (169)\n-18E4E9 Uncompressed Size     000000A9 (169)\n-18E4ED Filename Length       000F (15)\n-18E4EF Extra Length          0009 (9)\n-18E4F1 Comment Length        0000 (0)\n-18E4F3 Disk Start            0000 (0)\n-18E4F5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E4F7 Ext File Attributes   00000000 (0)\n-18E4FB Local Header Offset   000034D8 (13528)\n-18E4FF Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E4FF: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E50E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E510   Length              0005 (5)\n-18E512   Flags               01 (1) 'Modification'\n-18E513   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E517 CENTRAL HEADER #6     02014B50 (33639248)\n-18E51B Created Zip Spec      14 (20) '2.0'\n-18E51C Created OS            00 (0) 'MS-DOS'\n-18E51D Extract Zip Spec      14 (20) '2.0'\n-18E51E Extract OS            00 (0) 'MS-DOS'\n-18E51F General Purpose Flag  0000 (0)\n-18E521 Compression Method    0000 (0) 'Stored'\n-18E523 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E527 CRC                   00000000 (0)\n-18E52B Compressed Size       00000000 (0)\n-18E52F Uncompressed Size     00000000 (0)\n-18E533 Filename Length       000F (15)\n-18E535 Extra Length          0009 (9)\n-18E537 Comment Length        0000 (0)\n-18E539 Disk Start            0000 (0)\n-18E53B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E53D Ext File Attributes   00000000 (0)\n-18E541 Local Header Offset   000035C7 (13767)\n-18E545 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E545: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E554 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E556   Length              0005 (5)\n-18E558   Flags               01 (1) 'Modification'\n-18E559   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E55D CENTRAL HEADER #7     02014B50 (33639248)\n-18E561 Created Zip Spec      14 (20) '2.0'\n-18E562 Created OS            00 (0) 'MS-DOS'\n-18E563 Extract Zip Spec      14 (20) '2.0'\n-18E564 Extract OS            00 (0) 'MS-DOS'\n-18E565 General Purpose Flag  0000 (0)\n-18E567 Compression Method    0000 (0) 'Stored'\n-18E569 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E56D CRC                   00000000 (0)\n-18E571 Compressed Size       00000000 (0)\n-18E575 Uncompressed Size     00000000 (0)\n-18E579 Filename Length       0018 (24)\n-18E57B Extra Length          0009 (9)\n-18E57D Comment Length        0000 (0)\n-18E57F Disk Start            0000 (0)\n-18E581 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E583 Ext File Attributes   00000000 (0)\n-18E587 Local Header Offset   000035FD (13821)\n-18E58B Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E58B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E5A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E5A5   Length              0005 (5)\n-18E5A7   Flags               01 (1) 'Modification'\n-18E5A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E5AC CENTRAL HEADER #8     02014B50 (33639248)\n-18E5B0 Created Zip Spec      14 (20) '2.0'\n-18E5B1 Created OS            00 (0) 'MS-DOS'\n-18E5B2 Extract Zip Spec      14 (20) '2.0'\n-18E5B3 Extract OS            00 (0) 'MS-DOS'\n-18E5B4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E5B6 Compression Method    0000 (0) 'Stored'\n-18E5B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E5BC CRC                   BC0369E6 (3154340326)\n-18E5C0 Compressed Size       000000C2 (194)\n-18E5C4 Uncompressed Size     000000C2 (194)\n-18E5C8 Filename Length       0041 (65)\n-18E5CA Extra Length          0009 (9)\n-18E5CC Comment Length        0000 (0)\n-18E5CE Disk Start            0000 (0)\n-18E5D0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E5D2 Ext File Attributes   00000000 (0)\n-18E5D6 Local Header Offset   0000363C (13884)\n-18E5DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E5DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E61B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E61D   Length              0005 (5)\n-18E61F   Flags               01 (1) 'Modification'\n-18E620   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E624 CENTRAL HEADER #9     02014B50 (33639248)\n-18E628 Created Zip Spec      14 (20) '2.0'\n-18E629 Created OS            00 (0) 'MS-DOS'\n-18E62A Extract Zip Spec      14 (20) '2.0'\n-18E62B Extract OS            00 (0) 'MS-DOS'\n-18E62C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E62E Compression Method    0000 (0) 'Stored'\n-18E630 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E634 CRC                   193ACDA3 (423284131)\n-18E638 Compressed Size       000000AE (174)\n-18E63C Uncompressed Size     000000AE (174)\n-18E640 Filename Length       005F (95)\n-18E642 Extra Length          0009 (9)\n-18E644 Comment Length        0000 (0)\n-18E646 Disk Start            0000 (0)\n-18E648 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E64A Ext File Attributes   00000000 (0)\n-18E64E Local Header Offset   00003776 (14198)\n-18E652 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E652: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E6B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E6B3   Length              0005 (5)\n-18E6B5   Flags               01 (1) 'Modification'\n-18E6B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E6BA CENTRAL HEADER #10    02014B50 (33639248)\n-18E6BE Created Zip Spec      14 (20) '2.0'\n-18E6BF Created OS            00 (0) 'MS-DOS'\n-18E6C0 Extract Zip Spec      14 (20) '2.0'\n-18E6C1 Extract OS            00 (0) 'MS-DOS'\n-18E6C2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E6C4 Compression Method    0000 (0) 'Stored'\n-18E6C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E6CA CRC                   DA7850A4 (3665318052)\n-18E6CE Compressed Size       000000A3 (163)\n-18E6D2 Uncompressed Size     000000A3 (163)\n-18E6D6 Filename Length       0044 (68)\n-18E6D8 Extra Length          0009 (9)\n-18E6DA Comment Length        0000 (0)\n-18E6DC Disk Start            0000 (0)\n-18E6DE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E6E0 Ext File Attributes   00000000 (0)\n-18E6E4 Local Header Offset   000038BA (14522)\n-18E6E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E6E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E72C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E72E   Length              0005 (5)\n-18E730   Flags               01 (1) 'Modification'\n-18E731   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E735 CENTRAL HEADER #11    02014B50 (33639248)\n-18E739 Created Zip Spec      14 (20) '2.0'\n-18E73A Created OS            00 (0) 'MS-DOS'\n-18E73B Extract Zip Spec      14 (20) '2.0'\n-18E73C Extract OS            00 (0) 'MS-DOS'\n-18E73D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E73F Compression Method    0000 (0) 'Stored'\n-18E741 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E745 CRC                   99161436 (2568361014)\n-18E749 Compressed Size       00000312 (786)\n-18E74D Uncompressed Size     00000312 (786)\n-18E751 Filename Length       0041 (65)\n-18E753 Extra Length          0009 (9)\n-18E755 Comment Length        0000 (0)\n-18E757 Disk Start            0000 (0)\n-18E759 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E75B Ext File Attributes   00000000 (0)\n-18E75F Local Header Offset   000039D8 (14808)\n-18E763 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E763: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E7A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E7A6   Length              0005 (5)\n-18E7A8   Flags               01 (1) 'Modification'\n-18E7A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E7AD CENTRAL HEADER #12    02014B50 (33639248)\n-18E7B1 Created Zip Spec      14 (20) '2.0'\n-18E7B2 Created OS            00 (0) 'MS-DOS'\n-18E7B3 Extract Zip Spec      14 (20) '2.0'\n-18E7B4 Extract OS            00 (0) 'MS-DOS'\n-18E7B5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E7B7 Compression Method    0000 (0) 'Stored'\n-18E7B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E7BD CRC                   81B9C79B (2176436123)\n-18E7C1 Compressed Size       000003FE (1022)\n-18E7C5 Uncompressed Size     000003FE (1022)\n-18E7C9 Filename Length       0054 (84)\n-18E7CB Extra Length          0009 (9)\n-18E7CD Comment Length        0000 (0)\n-18E7CF Disk Start            0000 (0)\n-18E7D1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E7D3 Ext File Attributes   00000000 (0)\n-18E7D7 Local Header Offset   00003D62 (15714)\n-18E7DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E7DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E82F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E831   Length              0005 (5)\n-18E833   Flags               01 (1) 'Modification'\n-18E834   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E838 CENTRAL HEADER #13    02014B50 (33639248)\n-18E83C Created Zip Spec      14 (20) '2.0'\n-18E83D Created OS            00 (0) 'MS-DOS'\n-18E83E Extract Zip Spec      14 (20) '2.0'\n-18E83F Extract OS            00 (0) 'MS-DOS'\n-18E840 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E842 Compression Method    0000 (0) 'Stored'\n-18E844 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E848 CRC                   0FF999F7 (268016119)\n-18E84C Compressed Size       0000008E (142)\n-18E850 Uncompressed Size     0000008E (142)\n-18E854 Filename Length       004A (74)\n-18E856 Extra Length          0009 (9)\n-18E858 Comment Length        0000 (0)\n-18E85A Disk Start            0000 (0)\n-18E85C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E85E Ext File Attributes   00000000 (0)\n-18E862 Local Header Offset   000041EB (16875)\n-18E866 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E866: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E8B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E8B2   Length              0005 (5)\n-18E8B4   Flags               01 (1) 'Modification'\n-18E8B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E8B9 CENTRAL HEADER #14    02014B50 (33639248)\n-18E8BD Created Zip Spec      14 (20) '2.0'\n-18E8BE Created OS            00 (0) 'MS-DOS'\n-18E8BF Extract Zip Spec      14 (20) '2.0'\n-18E8C0 Extract OS            00 (0) 'MS-DOS'\n-18E8C1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E8C3 Compression Method    0000 (0) 'Stored'\n-18E8C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E8C9 CRC                   9C0450EC (2617528556)\n-18E8CD Compressed Size       00000044 (68)\n-18E8D1 Uncompressed Size     00000044 (68)\n-18E8D5 Filename Length       0042 (66)\n-18E8D7 Extra Length          0009 (9)\n-18E8D9 Comment Length        0000 (0)\n-18E8DB Disk Start            0000 (0)\n-18E8DD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E8DF Ext File Attributes   00000000 (0)\n-18E8E3 Local Header Offset   000042FA (17146)\n-18E8E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E8E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E929 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E92B   Length              0005 (5)\n-18E92D   Flags               01 (1) 'Modification'\n-18E92E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E932 CENTRAL HEADER #15    02014B50 (33639248)\n-18E936 Created Zip Spec      14 (20) '2.0'\n-18E937 Created OS            00 (0) 'MS-DOS'\n-18E938 Extract Zip Spec      14 (20) '2.0'\n-18E939 Extract OS            00 (0) 'MS-DOS'\n-18E93A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E93C Compression Method    0000 (0) 'Stored'\n-18E93E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E942 CRC                   56E1501D (1457606685)\n-18E946 Compressed Size       00000132 (306)\n-18E94A Uncompressed Size     00000132 (306)\n-18E94E Filename Length       0044 (68)\n-18E950 Extra Length          0009 (9)\n-18E952 Comment Length        0000 (0)\n-18E954 Disk Start            0000 (0)\n-18E956 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E958 Ext File Attributes   00000000 (0)\n-18E95C Local Header Offset   000043B7 (17335)\n-18E960 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E960: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18E9A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18E9A6   Length              0005 (5)\n-18E9A8   Flags               01 (1) 'Modification'\n-18E9A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18E9AD CENTRAL HEADER #16    02014B50 (33639248)\n-18E9B1 Created Zip Spec      14 (20) '2.0'\n-18E9B2 Created OS            00 (0) 'MS-DOS'\n-18E9B3 Extract Zip Spec      14 (20) '2.0'\n-18E9B4 Extract OS            00 (0) 'MS-DOS'\n-18E9B5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18E9B7 Compression Method    0000 (0) 'Stored'\n-18E9B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18E9BD CRC                   F0F60C18 (4042656792)\n-18E9C1 Compressed Size       00000080 (128)\n-18E9C5 Uncompressed Size     00000080 (128)\n-18E9C9 Filename Length       0044 (68)\n-18E9CB Extra Length          0009 (9)\n-18E9CD Comment Length        0000 (0)\n-18E9CF Disk Start            0000 (0)\n-18E9D1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18E9D3 Ext File Attributes   00000000 (0)\n-18E9D7 Local Header Offset   00004564 (17764)\n-18E9DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E9DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18EA1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EA21   Length              0005 (5)\n-18EA23   Flags               01 (1) 'Modification'\n-18EA24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18EA28 CENTRAL HEADER #17    02014B50 (33639248)\n-18EA2C Created Zip Spec      14 (20) '2.0'\n-18EA2D Created OS            00 (0) 'MS-DOS'\n-18EA2E Extract Zip Spec      14 (20) '2.0'\n-18EA2F Extract OS            00 (0) 'MS-DOS'\n-18EA30 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18EA32 Compression Method    0000 (0) 'Stored'\n-18EA34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18EA38 CRC                   5CED5836 (1559058486)\n-18EA3C Compressed Size       0000003C (60)\n-18EA40 Uncompressed Size     0000003C (60)\n-18EA44 Filename Length       003F (63)\n-18EA46 Extra Length          0009 (9)\n-18EA48 Comment Length        0000 (0)\n-18EA4A Disk Start            0000 (0)\n-18EA4C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18EA4E Ext File Attributes   00000000 (0)\n-18EA52 Local Header Offset   0000465F (18015)\n-18EA56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18EA56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18EA95 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EA97   Length              0005 (5)\n-18EA99   Flags               01 (1) 'Modification'\n-18EA9A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18EA9E CENTRAL HEADER #18    02014B50 (33639248)\n-18EAA2 Created Zip Spec      14 (20) '2.0'\n-18EAA3 Created OS            00 (0) 'MS-DOS'\n-18EAA4 Extract Zip Spec      14 (20) '2.0'\n-18EAA5 Extract OS            00 (0) 'MS-DOS'\n-18EAA6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18EAA8 Compression Method    0000 (0) 'Stored'\n-18EAAA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18EAAE CRC                   9C4BEDD5 (2622221781)\n-18EAB2 Compressed Size       00000129 (297)\n-18EAB6 Uncompressed Size     00000129 (297)\n-18EABA Filename Length       0045 (69)\n-18EABC Extra Length          0009 (9)\n-18EABE Comment Length        0000 (0)\n-18EAC0 Disk Start            0000 (0)\n-18EAC2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18EAC4 Ext File Attributes   00000000 (0)\n-18EAC8 Local Header Offset   00004711 (18193)\n-18EACC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18EACC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18EB11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EB13   Length              0005 (5)\n-18EB15   Flags               01 (1) 'Modification'\n-18EB16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18EB1A CENTRAL HEADER #19    02014B50 (33639248)\n-18EB1E Created Zip Spec      14 (20) '2.0'\n-18EB1F Created OS            00 (0) 'MS-DOS'\n-18EB20 Extract Zip Spec      14 (20) '2.0'\n-18EB21 Extract OS            00 (0) 'MS-DOS'\n-18EB22 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18EB24 Compression Method    0000 (0) 'Stored'\n-18EB26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18EB2A CRC                   BF790872 (3212380274)\n-18EB2E Compressed Size       0000004C (76)\n-18EB32 Uncompressed Size     0000004C (76)\n-18EB36 Filename Length       0055 (85)\n-18EB38 Extra Length          0009 (9)\n-18EB3A Comment Length        0000 (0)\n-18EB3C Disk Start            0000 (0)\n-18EB3E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18EB40 Ext File Attributes   00000000 (0)\n-18EB44 Local Header Offset   000048B6 (18614)\n-18EB48 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18EB48: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18EB9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EB9F   Length              0005 (5)\n-18EBA1   Flags               01 (1) 'Modification'\n-18EBA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18EBA6 CENTRAL HEADER #20    02014B50 (33639248)\n-18EBAA Created Zip Spec      14 (20) '2.0'\n-18EBAB Created OS            00 (0) 'MS-DOS'\n-18EBAC Extract Zip Spec      14 (20) '2.0'\n-18EBAD Extract OS            00 (0) 'MS-DOS'\n-18EBAE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18EBB0 Compression Method    0000 (0) 'Stored'\n-18EBB2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18EBB6 CRC                   58896C3D (1485401149)\n-18EBBA Compressed Size       0000006C (108)\n-18EBBE Uncompressed Size     0000006C (108)\n-18EBC2 Filename Length       003E (62)\n-18EBC4 Extra Length          0009 (9)\n-18EBC6 Comment Length        0000 (0)\n-18EBC8 Disk Start            0000 (0)\n-18EBCA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18EBCC Ext File Attributes   00000000 (0)\n-18EBD0 Local Header Offset   0000498E (18830)\n-18EBD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18EBD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18EC12 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EC14   Length              0005 (5)\n-18EC16   Flags               01 (1) 'Modification'\n-18EC17   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18EC1B CENTRAL HEADER #21    02014B50 (33639248)\n-18EC1F Created Zip Spec      14 (20) '2.0'\n-18EC20 Created OS            00 (0) 'MS-DOS'\n-18EC21 Extract Zip Spec      14 (20) '2.0'\n-18EC22 Extract OS            00 (0) 'MS-DOS'\n-18EC23 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18EC25 Compression Method    0000 (0) 'Stored'\n-18EC27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18EC2B CRC                   BA3A525C (3124384348)\n-18EC2F Compressed Size       00000071 (113)\n-18EC33 Uncompressed Size     00000071 (113)\n-18EC37 Filename Length       0049 (73)\n-18EC39 Extra Length          0009 (9)\n-18EC3B Comment Length        0000 (0)\n-18EC3D Disk Start            0000 (0)\n-18EC3F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18EC41 Ext File Attributes   00000000 (0)\n-18EC45 Local Header Offset   00004A6F (19055)\n-18EC49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18EC49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18EC92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EC94   Length              0005 (5)\n-18EC96   Flags               01 (1) 'Modification'\n-18EC97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18EC9B CENTRAL HEADER #22    02014B50 (33639248)\n-18EC9F Created Zip Spec      14 (20) '2.0'\n-18ECA0 Created OS            00 (0) 'MS-DOS'\n-18ECA1 Extract Zip Spec      14 (20) '2.0'\n-18ECA2 Extract OS            00 (0) 'MS-DOS'\n-18ECA3 General Purpose Flag  0000 (0)\n-18ECA5 Compression Method    0000 (0) 'Stored'\n-18ECA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18ECAB CRC                   00000000 (0)\n-18ECAF Compressed Size       00000000 (0)\n-18ECB3 Uncompressed Size     00000000 (0)\n-18ECB7 Filename Length       000F (15)\n-18ECB9 Extra Length          0009 (9)\n-18ECBB Comment Length        0000 (0)\n-18ECBD Disk Start            0000 (0)\n-18ECBF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18ECC1 Ext File Attributes   00000000 (0)\n-18ECC5 Local Header Offset   00004B60 (19296)\n-18ECC9 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18ECC9: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18ECD8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18ECDA   Length              0005 (5)\n-18ECDC   Flags               01 (1) 'Modification'\n-18ECDD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18ECE1 CENTRAL HEADER #23    02014B50 (33639248)\n-18ECE5 Created Zip Spec      14 (20) '2.0'\n-18ECE6 Created OS            00 (0) 'MS-DOS'\n-18ECE7 Extract Zip Spec      14 (20) '2.0'\n-18ECE8 Extract OS            00 (0) 'MS-DOS'\n-18ECE9 General Purpose Flag  0000 (0)\n-18ECEB Compression Method    0000 (0) 'Stored'\n-18ECED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18ECF1 CRC                   00000000 (0)\n-18ECF5 Compressed Size       00000000 (0)\n-18ECF9 Uncompressed Size     00000000 (0)\n-18ECFD Filename Length       0020 (32)\n-18ECFF Extra Length          0009 (9)\n-18ED01 Comment Length        0000 (0)\n-18ED03 Disk Start            0000 (0)\n-18ED05 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18ED07 Ext File Attributes   00000000 (0)\n-18ED0B Local Header Offset   00004B96 (19350)\n-18ED0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18ED0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18ED2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18ED31   Length              0005 (5)\n-18ED33   Flags               01 (1) 'Modification'\n-18ED34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18ED38 CENTRAL HEADER #24    02014B50 (33639248)\n-18ED3C Created Zip Spec      14 (20) '2.0'\n-18ED3D Created OS            00 (0) 'MS-DOS'\n-18ED3E Extract Zip Spec      14 (20) '2.0'\n-18ED3F Extract OS            00 (0) 'MS-DOS'\n-18ED40 General Purpose Flag  0000 (0)\n-18ED42 Compression Method    0000 (0) 'Stored'\n-18ED44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18ED48 CRC                   00000000 (0)\n-18ED4C Compressed Size       00000000 (0)\n-18ED50 Uncompressed Size     00000000 (0)\n-18ED54 Filename Length       002D (45)\n-18ED56 Extra Length          0009 (9)\n-18ED58 Comment Length        0000 (0)\n-18ED5A Disk Start            0000 (0)\n-18ED5C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18ED5E Ext File Attributes   00000000 (0)\n-18ED62 Local Header Offset   00004BDD (19421)\n-18ED66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18ED66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18ED93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18ED95   Length              0005 (5)\n-18ED97   Flags               01 (1) 'Modification'\n-18ED98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18ED9C CENTRAL HEADER #25    02014B50 (33639248)\n-18EDA0 Created Zip Spec      14 (20) '2.0'\n-18EDA1 Created OS            00 (0) 'MS-DOS'\n-18EDA2 Extract Zip Spec      14 (20) '2.0'\n-18EDA3 Extract OS            00 (0) 'MS-DOS'\n-18EDA4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18EDA6 Compression Method    0000 (0) 'Stored'\n-18EDA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18EDAC CRC                   00000000 (0)\n-18EDB0 Compressed Size       00000000 (0)\n-18EDB4 Uncompressed Size     00000000 (0)\n-18EDB8 Filename Length       003B (59)\n-18EDBA Extra Length          0009 (9)\n-18EDBC Comment Length        0000 (0)\n-18EDBE Disk Start            0000 (0)\n-18EDC0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18EDC2 Ext File Attributes   00000000 (0)\n-18EDC6 Local Header Offset   00004C31 (19505)\n-18EDCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18EDCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18EE05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EE07   Length              0005 (5)\n-18EE09   Flags               01 (1) 'Modification'\n-18EE0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18EE0E CENTRAL HEADER #26    02014B50 (33639248)\n-18EE12 Created Zip Spec      14 (20) '2.0'\n-18EE13 Created OS            00 (0) 'MS-DOS'\n-18EE14 Extract Zip Spec      14 (20) '2.0'\n-18EE15 Extract OS            00 (0) 'MS-DOS'\n-18EE16 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18EE18 Compression Method    0000 (0) 'Stored'\n-18EE1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18EE1E CRC                   4D73DC93 (1299438739)\n-18EE22 Compressed Size       00000BA2 (2978)\n-18EE26 Uncompressed Size     00000BA2 (2978)\n-18EE2A Filename Length       0034 (52)\n-18EE2C Extra Length          0009 (9)\n-18EE2E Comment Length        0000 (0)\n-18EE30 Disk Start            0000 (0)\n-18EE32 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18EE34 Ext File Attributes   00000000 (0)\n-18EE38 Local Header Offset   00004CA3 (19619)\n-18EE3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18EE3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18EE70 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EE72   Length              0005 (5)\n-18EE74   Flags               01 (1) 'Modification'\n-18EE75   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18EE79 CENTRAL HEADER #27    02014B50 (33639248)\n-18EE7D Created Zip Spec      14 (20) '2.0'\n-18EE7E Created OS            00 (0) 'MS-DOS'\n-18EE7F Extract Zip Spec      14 (20) '2.0'\n-18EE80 Extract OS            00 (0) 'MS-DOS'\n-18EE81 General Purpose Flag  0000 (0)\n-18EE83 Compression Method    0000 (0) 'Stored'\n-18EE85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18EE89 CRC                   00000000 (0)\n-18EE8D Compressed Size       00000000 (0)\n-18EE91 Uncompressed Size     00000000 (0)\n-18EE95 Filename Length       0012 (18)\n-18EE97 Extra Length          0009 (9)\n-18EE99 Comment Length        0000 (0)\n-18EE9B Disk Start            0000 (0)\n-18EE9D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18EE9F Ext File Attributes   00000000 (0)\n-18EEA3 Local Header Offset   000058B0 (22704)\n-18EEA7 Filename              'XXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18EEA7: Filename 'XXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18EEB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EEBB   Length              0005 (5)\n-18EEBD   Flags               01 (1) 'Modification'\n-18EEBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18EEC2 CENTRAL HEADER #28    02014B50 (33639248)\n-18EEC6 Created Zip Spec      14 (20) '2.0'\n-18EEC7 Created OS            00 (0) 'MS-DOS'\n-18EEC8 Extract Zip Spec      14 (20) '2.0'\n-18EEC9 Extract OS            00 (0) 'MS-DOS'\n-18EECA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18EECC Compression Method    0000 (0) 'Stored'\n-18EECE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18EED2 CRC                   7CA8E715 (2091443989)\n-18EED6 Compressed Size       000000AF (175)\n-18EEDA Uncompressed Size     000000AF (175)\n-18EEDE Filename Length       0043 (67)\n-18EEE0 Extra Length          0009 (9)\n-18EEE2 Comment Length        0000 (0)\n-18EEE4 Disk Start            0000 (0)\n-18EEE6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18EEE8 Ext File Attributes   00000000 (0)\n-18EEEC Local Header Offset   000058E9 (22761)\n-18EEF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18EEF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18EF33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EF35   Length              0005 (5)\n-18EF37   Flags               01 (1) 'Modification'\n-18EF38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18EF3C CENTRAL HEADER #29    02014B50 (33639248)\n-18EF40 Created Zip Spec      14 (20) '2.0'\n-18EF41 Created OS            00 (0) 'MS-DOS'\n-18EF42 Extract Zip Spec      14 (20) '2.0'\n-18EF43 Extract OS            00 (0) 'MS-DOS'\n-18EF44 General Purpose Flag  0000 (0)\n-18EF46 Compression Method    0000 (0) 'Stored'\n-18EF48 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18EF4C CRC                   00000000 (0)\n-18EF50 Compressed Size       00000000 (0)\n-18EF54 Uncompressed Size     00000000 (0)\n-18EF58 Filename Length       0004 (4)\n-18EF5A Extra Length          0009 (9)\n-18EF5C Comment Length        0000 (0)\n-18EF5E Disk Start            0000 (0)\n-18EF60 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18EF62 Ext File Attributes   00000000 (0)\n-18EF66 Local Header Offset   00005A12 (23058)\n-18EF6A Filename              'XXXX'\n-#\n-# WARNING: Offset 0x18EF6A: Filename 'XXXX'\n-#          Zero length filename\n-#\n-18EF6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EF70   Length              0005 (5)\n-18EF72   Flags               01 (1) 'Modification'\n-18EF73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18EF77 CENTRAL HEADER #30    02014B50 (33639248)\n-18EF7B Created Zip Spec      14 (20) '2.0'\n-18EF7C Created OS            00 (0) 'MS-DOS'\n-18EF7D Extract Zip Spec      14 (20) '2.0'\n-18EF7E Extract OS            00 (0) 'MS-DOS'\n-18EF7F General Purpose Flag  0000 (0)\n-18EF81 Compression Method    0000 (0) 'Stored'\n-18EF83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18EF87 CRC                   00000000 (0)\n-18EF8B Compressed Size       00000000 (0)\n-18EF8F Uncompressed Size     00000000 (0)\n-18EF93 Filename Length       000C (12)\n-18EF95 Extra Length          0009 (9)\n-18EF97 Comment Length        0000 (0)\n-18EF99 Disk Start            0000 (0)\n-18EF9B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18EF9D Ext File Attributes   00000000 (0)\n-18EFA1 Local Header Offset   00005A3D (23101)\n-18EFA5 Filename              'XXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18EFA5: Filename 'XXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18EFB1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EFB3   Length              0005 (5)\n-18EFB5   Flags               01 (1) 'Modification'\n-18EFB6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18EFBA CENTRAL HEADER #31    02014B50 (33639248)\n-18EFBE Created Zip Spec      14 (20) '2.0'\n-18EFBF Created OS            00 (0) 'MS-DOS'\n-18EFC0 Extract Zip Spec      14 (20) '2.0'\n-18EFC1 Extract OS            00 (0) 'MS-DOS'\n-18EFC2 General Purpose Flag  0000 (0)\n-18EFC4 Compression Method    0000 (0) 'Stored'\n-18EFC6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18EFCA CRC                   00000000 (0)\n-18EFCE Compressed Size       00000000 (0)\n-18EFD2 Uncompressed Size     00000000 (0)\n-18EFD6 Filename Length       0012 (18)\n-18EFD8 Extra Length          0009 (9)\n-18EFDA Comment Length        0000 (0)\n-18EFDC Disk Start            0000 (0)\n-18EFDE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18EFE0 Ext File Attributes   00000000 (0)\n-18EFE4 Local Header Offset   00005A70 (23152)\n-18EFE8 Filename              'XXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18EFE8: Filename 'XXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18EFFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18EFFC   Length              0005 (5)\n-18EFFE   Flags               01 (1) 'Modification'\n-18EFFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F003 CENTRAL HEADER #32    02014B50 (33639248)\n-18F007 Created Zip Spec      14 (20) '2.0'\n-18F008 Created OS            00 (0) 'MS-DOS'\n-18F009 Extract Zip Spec      14 (20) '2.0'\n-18F00A Extract OS            00 (0) 'MS-DOS'\n-18F00B General Purpose Flag  0000 (0)\n-18F00D Compression Method    0000 (0) 'Stored'\n-18F00F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F013 CRC                   00000000 (0)\n-18F017 Compressed Size       00000000 (0)\n-18F01B Uncompressed Size     00000000 (0)\n-18F01F Filename Length       0019 (25)\n-18F021 Extra Length          0009 (9)\n-18F023 Comment Length        0000 (0)\n-18F025 Disk Start            0000 (0)\n-18F027 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F029 Ext File Attributes   00000000 (0)\n-18F02D Local Header Offset   00005AA9 (23209)\n-18F031 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F031: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F04A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F04C   Length              0005 (5)\n-18F04E   Flags               01 (1) 'Modification'\n-18F04F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F053 CENTRAL HEADER #33    02014B50 (33639248)\n-18F057 Created Zip Spec      14 (20) '2.0'\n-18F058 Created OS            00 (0) 'MS-DOS'\n-18F059 Extract Zip Spec      14 (20) '2.0'\n-18F05A Extract OS            00 (0) 'MS-DOS'\n-18F05B General Purpose Flag  0000 (0)\n-18F05D Compression Method    0000 (0) 'Stored'\n-18F05F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F063 CRC                   00000000 (0)\n-18F067 Compressed Size       00000000 (0)\n-18F06B Uncompressed Size     00000000 (0)\n-18F06F Filename Length       0023 (35)\n-18F071 Extra Length          0009 (9)\n-18F073 Comment Length        0000 (0)\n-18F075 Disk Start            0000 (0)\n-18F077 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F079 Ext File Attributes   00000000 (0)\n-18F07D Local Header Offset   00005AE9 (23273)\n-18F081 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F081: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F0A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F0A6   Length              0005 (5)\n-18F0A8   Flags               01 (1) 'Modification'\n-18F0A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F0AD CENTRAL HEADER #34    02014B50 (33639248)\n-18F0B1 Created Zip Spec      14 (20) '2.0'\n-18F0B2 Created OS            00 (0) 'MS-DOS'\n-18F0B3 Extract Zip Spec      14 (20) '2.0'\n-18F0B4 Extract OS            00 (0) 'MS-DOS'\n-18F0B5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F0B7 Compression Method    0000 (0) 'Stored'\n-18F0B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F0BD CRC                   87D33073 (2278764659)\n-18F0C1 Compressed Size       000005CF (1487)\n-18F0C5 Uncompressed Size     000005CF (1487)\n-18F0C9 Filename Length       0030 (48)\n-18F0CB Extra Length          0009 (9)\n-18F0CD Comment Length        0000 (0)\n-18F0CF Disk Start            0000 (0)\n-18F0D1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F0D3 Ext File Attributes   00000000 (0)\n-18F0D7 Local Header Offset   00005B33 (23347)\n-18F0DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F0DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F10B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F10D   Length              0005 (5)\n-18F10F   Flags               01 (1) 'Modification'\n-18F110   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F114 CENTRAL HEADER #35    02014B50 (33639248)\n-18F118 Created Zip Spec      14 (20) '2.0'\n-18F119 Created OS            00 (0) 'MS-DOS'\n-18F11A Extract Zip Spec      14 (20) '2.0'\n-18F11B Extract OS            00 (0) 'MS-DOS'\n-18F11C General Purpose Flag  0000 (0)\n-18F11E Compression Method    0000 (0) 'Stored'\n-18F120 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F124 CRC                   00000000 (0)\n-18F128 Compressed Size       00000000 (0)\n-18F12C Uncompressed Size     00000000 (0)\n-18F130 Filename Length       0019 (25)\n-18F132 Extra Length          0009 (9)\n-18F134 Comment Length        0000 (0)\n-18F136 Disk Start            0000 (0)\n-18F138 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F13A Ext File Attributes   00000000 (0)\n-18F13E Local Header Offset   00006169 (24937)\n-18F142 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F142: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F15B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F15D   Length              0005 (5)\n-18F15F   Flags               01 (1) 'Modification'\n-18F160   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F164 CENTRAL HEADER #36    02014B50 (33639248)\n-18F168 Created Zip Spec      14 (20) '2.0'\n-18F169 Created OS            00 (0) 'MS-DOS'\n-18F16A Extract Zip Spec      14 (20) '2.0'\n-18F16B Extract OS            00 (0) 'MS-DOS'\n-18F16C General Purpose Flag  0000 (0)\n-18F16E Compression Method    0000 (0) 'Stored'\n-18F170 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F174 CRC                   00000000 (0)\n-18F178 Compressed Size       00000000 (0)\n-18F17C Uncompressed Size     00000000 (0)\n-18F180 Filename Length       0024 (36)\n-18F182 Extra Length          0009 (9)\n-18F184 Comment Length        0000 (0)\n-18F186 Disk Start            0000 (0)\n-18F188 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F18A Ext File Attributes   00000000 (0)\n-18F18E Local Header Offset   000061A9 (25001)\n-18F192 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F192: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F1B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F1B8   Length              0005 (5)\n-18F1BA   Flags               01 (1) 'Modification'\n-18F1BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F1BF CENTRAL HEADER #37    02014B50 (33639248)\n-18F1C3 Created Zip Spec      14 (20) '2.0'\n-18F1C4 Created OS            00 (0) 'MS-DOS'\n-18F1C5 Extract Zip Spec      14 (20) '2.0'\n-18F1C6 Extract OS            00 (0) 'MS-DOS'\n-18F1C7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F1C9 Compression Method    0000 (0) 'Stored'\n-18F1CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F1CF CRC                   9122A7A7 (2434967463)\n-18F1D3 Compressed Size       00000A3F (2623)\n-18F1D7 Uncompressed Size     00000A3F (2623)\n-18F1DB Filename Length       0032 (50)\n-18F1DD Extra Length          0009 (9)\n-18F1DF Comment Length        0000 (0)\n-18F1E1 Disk Start            0000 (0)\n-18F1E3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F1E5 Ext File Attributes   00000000 (0)\n-18F1E9 Local Header Offset   000061F4 (25076)\n-18F1ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F1ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F21F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F221   Length              0005 (5)\n-18F223   Flags               01 (1) 'Modification'\n-18F224   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F228 CENTRAL HEADER #38    02014B50 (33639248)\n-18F22C Created Zip Spec      14 (20) '2.0'\n-18F22D Created OS            00 (0) 'MS-DOS'\n-18F22E Extract Zip Spec      14 (20) '2.0'\n-18F22F Extract OS            00 (0) 'MS-DOS'\n-18F230 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F232 Compression Method    0000 (0) 'Stored'\n-18F234 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F238 CRC                   3228CAA5 (841534117)\n-18F23C Compressed Size       00000A97 (2711)\n-18F240 Uncompressed Size     00000A97 (2711)\n-18F244 Filename Length       0030 (48)\n-18F246 Extra Length          0009 (9)\n-18F248 Comment Length        0000 (0)\n-18F24A Disk Start            0000 (0)\n-18F24C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F24E Ext File Attributes   00000000 (0)\n-18F252 Local Header Offset   00006C9C (27804)\n-18F256 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F256: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F286 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F288   Length              0005 (5)\n-18F28A   Flags               01 (1) 'Modification'\n-18F28B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F28F CENTRAL HEADER #39    02014B50 (33639248)\n-18F293 Created Zip Spec      14 (20) '2.0'\n-18F294 Created OS            00 (0) 'MS-DOS'\n-18F295 Extract Zip Spec      14 (20) '2.0'\n-18F296 Extract OS            00 (0) 'MS-DOS'\n-18F297 General Purpose Flag  0000 (0)\n-18F299 Compression Method    0000 (0) 'Stored'\n-18F29B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F29F CRC                   00000000 (0)\n-18F2A3 Compressed Size       00000000 (0)\n-18F2A7 Uncompressed Size     00000000 (0)\n-18F2AB Filename Length       0004 (4)\n-18F2AD Extra Length          0009 (9)\n-18F2AF Comment Length        0000 (0)\n-18F2B1 Disk Start            0000 (0)\n-18F2B3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F2B5 Ext File Attributes   00000000 (0)\n-18F2B9 Local Header Offset   0000779A (30618)\n-18F2BD Filename              'XXXX'\n-#\n-# WARNING: Offset 0x18F2BD: Filename 'XXXX'\n-#          Zero length filename\n-#\n-18F2C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F2C3   Length              0005 (5)\n-18F2C5   Flags               01 (1) 'Modification'\n-18F2C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F2CA CENTRAL HEADER #40    02014B50 (33639248)\n-18F2CE Created Zip Spec      14 (20) '2.0'\n-18F2CF Created OS            00 (0) 'MS-DOS'\n-18F2D0 Extract Zip Spec      14 (20) '2.0'\n-18F2D1 Extract OS            00 (0) 'MS-DOS'\n-18F2D2 General Purpose Flag  0000 (0)\n-18F2D4 Compression Method    0000 (0) 'Stored'\n-18F2D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F2DA CRC                   00000000 (0)\n-18F2DE Compressed Size       00000000 (0)\n-18F2E2 Uncompressed Size     00000000 (0)\n-18F2E6 Filename Length       000B (11)\n-18F2E8 Extra Length          0009 (9)\n-18F2EA Comment Length        0000 (0)\n-18F2EC Disk Start            0000 (0)\n-18F2EE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F2F0 Ext File Attributes   00000000 (0)\n-18F2F4 Local Header Offset   000077C5 (30661)\n-18F2F8 Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F2F8: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F303 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F305   Length              0005 (5)\n-18F307   Flags               01 (1) 'Modification'\n-18F308   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F30C CENTRAL HEADER #41    02014B50 (33639248)\n-18F310 Created Zip Spec      14 (20) '2.0'\n-18F311 Created OS            00 (0) 'MS-DOS'\n-18F312 Extract Zip Spec      14 (20) '2.0'\n-18F313 Extract OS            00 (0) 'MS-DOS'\n-18F314 General Purpose Flag  0000 (0)\n-18F316 Compression Method    0000 (0) 'Stored'\n-18F318 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F31C CRC                   00000000 (0)\n-18F320 Compressed Size       00000000 (0)\n-18F324 Uncompressed Size     00000000 (0)\n-18F328 Filename Length       0011 (17)\n-18F32A Extra Length          0009 (9)\n-18F32C Comment Length        0000 (0)\n-18F32E Disk Start            0000 (0)\n-18F330 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F332 Ext File Attributes   00000000 (0)\n-18F336 Local Header Offset   000077F7 (30711)\n-18F33A Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F33A: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F34B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F34D   Length              0005 (5)\n-18F34F   Flags               01 (1) 'Modification'\n-18F350   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F354 CENTRAL HEADER #42    02014B50 (33639248)\n-18F358 Created Zip Spec      14 (20) '2.0'\n-18F359 Created OS            00 (0) 'MS-DOS'\n-18F35A Extract Zip Spec      14 (20) '2.0'\n-18F35B Extract OS            00 (0) 'MS-DOS'\n-18F35C General Purpose Flag  0000 (0)\n-18F35E Compression Method    0000 (0) 'Stored'\n-18F360 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F364 CRC                   00000000 (0)\n-18F368 Compressed Size       00000000 (0)\n-18F36C Uncompressed Size     00000000 (0)\n-18F370 Filename Length       0018 (24)\n-18F372 Extra Length          0009 (9)\n-18F374 Comment Length        0000 (0)\n-18F376 Disk Start            0000 (0)\n-18F378 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F37A Ext File Attributes   00000000 (0)\n-18F37E Local Header Offset   0000782F (30767)\n-18F382 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F382: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F39A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F39C   Length              0005 (5)\n-18F39E   Flags               01 (1) 'Modification'\n-18F39F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F3A3 CENTRAL HEADER #43    02014B50 (33639248)\n-18F3A7 Created Zip Spec      14 (20) '2.0'\n-18F3A8 Created OS            00 (0) 'MS-DOS'\n-18F3A9 Extract Zip Spec      14 (20) '2.0'\n-18F3AA Extract OS            00 (0) 'MS-DOS'\n-18F3AB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F3AD Compression Method    0000 (0) 'Stored'\n-18F3AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F3B3 CRC                   4059C95D (1079626077)\n-18F3B7 Compressed Size       000010F7 (4343)\n-18F3BB Uncompressed Size     000010F7 (4343)\n-18F3BF Filename Length       0030 (48)\n-18F3C1 Extra Length          0009 (9)\n-18F3C3 Comment Length        0000 (0)\n-18F3C5 Disk Start            0000 (0)\n-18F3C7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F3C9 Ext File Attributes   00000000 (0)\n-18F3CD Local Header Offset   0000786E (30830)\n-18F3D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F3D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F401 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F403   Length              0005 (5)\n-18F405   Flags               01 (1) 'Modification'\n-18F406   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F40A CENTRAL HEADER #44    02014B50 (33639248)\n-18F40E Created Zip Spec      14 (20) '2.0'\n-18F40F Created OS            00 (0) 'MS-DOS'\n-18F410 Extract Zip Spec      14 (20) '2.0'\n-18F411 Extract OS            00 (0) 'MS-DOS'\n-18F412 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F414 Compression Method    0000 (0) 'Stored'\n-18F416 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F41A CRC                   BF971C06 (3214351366)\n-18F41E Compressed Size       00000552 (1362)\n-18F422 Uncompressed Size     00000552 (1362)\n-18F426 Filename Length       0029 (41)\n-18F428 Extra Length          0009 (9)\n-18F42A Comment Length        0000 (0)\n-18F42C Disk Start            0000 (0)\n-18F42E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F430 Ext File Attributes   00000000 (0)\n-18F434 Local Header Offset   000089CC (35276)\n-18F438 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F438: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F461 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F463   Length              0005 (5)\n-18F465   Flags               01 (1) 'Modification'\n-18F466   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F46A CENTRAL HEADER #45    02014B50 (33639248)\n-18F46E Created Zip Spec      14 (20) '2.0'\n-18F46F Created OS            00 (0) 'MS-DOS'\n-18F470 Extract Zip Spec      14 (20) '2.0'\n-18F471 Extract OS            00 (0) 'MS-DOS'\n-18F472 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F474 Compression Method    0000 (0) 'Stored'\n-18F476 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F47A CRC                   1CCCA507 (483173639)\n-18F47E Compressed Size       000009AB (2475)\n-18F482 Uncompressed Size     000009AB (2475)\n-18F486 Filename Length       0026 (38)\n-18F488 Extra Length          0009 (9)\n-18F48A Comment Length        0000 (0)\n-18F48C Disk Start            0000 (0)\n-18F48E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F490 Ext File Attributes   00000000 (0)\n-18F494 Local Header Offset   00008F7E (36734)\n-18F498 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F498: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F4BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F4C0   Length              0005 (5)\n-18F4C2   Flags               01 (1) 'Modification'\n-18F4C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F4C7 CENTRAL HEADER #46    02014B50 (33639248)\n-18F4CB Created Zip Spec      14 (20) '2.0'\n-18F4CC Created OS            00 (0) 'MS-DOS'\n-18F4CD Extract Zip Spec      14 (20) '2.0'\n-18F4CE Extract OS            00 (0) 'MS-DOS'\n-18F4CF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F4D1 Compression Method    0000 (0) 'Stored'\n-18F4D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F4D7 CRC                   0622E0A0 (102949024)\n-18F4DB Compressed Size       0000049F (1183)\n-18F4DF Uncompressed Size     0000049F (1183)\n-18F4E3 Filename Length       0021 (33)\n-18F4E5 Extra Length          0009 (9)\n-18F4E7 Comment Length        0000 (0)\n-18F4E9 Disk Start            0000 (0)\n-18F4EB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F4ED Ext File Attributes   00000000 (0)\n-18F4F1 Local Header Offset   00009986 (39302)\n-18F4F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F4F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F516 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F518   Length              0005 (5)\n-18F51A   Flags               01 (1) 'Modification'\n-18F51B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F51F CENTRAL HEADER #47    02014B50 (33639248)\n-18F523 Created Zip Spec      14 (20) '2.0'\n-18F524 Created OS            00 (0) 'MS-DOS'\n-18F525 Extract Zip Spec      14 (20) '2.0'\n-18F526 Extract OS            00 (0) 'MS-DOS'\n-18F527 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F529 Compression Method    0000 (0) 'Stored'\n-18F52B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F52F CRC                   3DF15F74 (1039228788)\n-18F533 Compressed Size       0000229A (8858)\n-18F537 Uncompressed Size     0000229A (8858)\n-18F53B Filename Length       0027 (39)\n-18F53D Extra Length          0009 (9)\n-18F53F Comment Length        0000 (0)\n-18F541 Disk Start            0000 (0)\n-18F543 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F545 Ext File Attributes   00000000 (0)\n-18F549 Local Header Offset   00009E7D (40573)\n-18F54D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F54D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F574 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F576   Length              0005 (5)\n-18F578   Flags               01 (1) 'Modification'\n-18F579   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F57D CENTRAL HEADER #48    02014B50 (33639248)\n-18F581 Created Zip Spec      14 (20) '2.0'\n-18F582 Created OS            00 (0) 'MS-DOS'\n-18F583 Extract Zip Spec      14 (20) '2.0'\n-18F584 Extract OS            00 (0) 'MS-DOS'\n-18F585 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F587 Compression Method    0000 (0) 'Stored'\n-18F589 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F58D CRC                   52712A03 (1383148035)\n-18F591 Compressed Size       000003E8 (1000)\n-18F595 Uncompressed Size     000003E8 (1000)\n-18F599 Filename Length       0026 (38)\n-18F59B Extra Length          0009 (9)\n-18F59D Comment Length        0000 (0)\n-18F59F Disk Start            0000 (0)\n-18F5A1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F5A3 Ext File Attributes   00000000 (0)\n-18F5A7 Local Header Offset   0000C175 (49525)\n-18F5AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F5AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F5D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F5D3   Length              0005 (5)\n-18F5D5   Flags               01 (1) 'Modification'\n-18F5D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F5DA CENTRAL HEADER #49    02014B50 (33639248)\n-18F5DE Created Zip Spec      14 (20) '2.0'\n-18F5DF Created OS            00 (0) 'MS-DOS'\n-18F5E0 Extract Zip Spec      14 (20) '2.0'\n-18F5E1 Extract OS            00 (0) 'MS-DOS'\n-18F5E2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F5E4 Compression Method    0000 (0) 'Stored'\n-18F5E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F5EA CRC                   4B96BF4D (1268170573)\n-18F5EE Compressed Size       00011389 (70537)\n-18F5F2 Uncompressed Size     00011389 (70537)\n-18F5F6 Filename Length       0020 (32)\n-18F5F8 Extra Length          0009 (9)\n-18F5FA Comment Length        0000 (0)\n-18F5FC Disk Start            0000 (0)\n-18F5FE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F600 Ext File Attributes   00000000 (0)\n-18F604 Local Header Offset   0000C5BA (50618)\n-18F608 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F608: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F628 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F62A   Length              0005 (5)\n-18F62C   Flags               01 (1) 'Modification'\n-18F62D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F631 CENTRAL HEADER #50    02014B50 (33639248)\n-18F635 Created Zip Spec      14 (20) '2.0'\n-18F636 Created OS            00 (0) 'MS-DOS'\n-18F637 Extract Zip Spec      14 (20) '2.0'\n-18F638 Extract OS            00 (0) 'MS-DOS'\n-18F639 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F63B Compression Method    0000 (0) 'Stored'\n-18F63D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F641 CRC                   E6F6EE92 (3874942610)\n-18F645 Compressed Size       00003564 (13668)\n-18F649 Uncompressed Size     00003564 (13668)\n-18F64D Filename Length       0027 (39)\n-18F64F Extra Length          0009 (9)\n-18F651 Comment Length        0000 (0)\n-18F653 Disk Start            0000 (0)\n-18F655 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F657 Ext File Attributes   00000000 (0)\n-18F65B Local Header Offset   0001D99A (121242)\n-18F65F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F65F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F686 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F688   Length              0005 (5)\n-18F68A   Flags               01 (1) 'Modification'\n-18F68B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F68F CENTRAL HEADER #51    02014B50 (33639248)\n-18F693 Created Zip Spec      14 (20) '2.0'\n-18F694 Created OS            00 (0) 'MS-DOS'\n-18F695 Extract Zip Spec      14 (20) '2.0'\n-18F696 Extract OS            00 (0) 'MS-DOS'\n-18F697 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F699 Compression Method    0000 (0) 'Stored'\n-18F69B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F69F CRC                   8B1361FF (2333303295)\n-18F6A3 Compressed Size       000034A1 (13473)\n-18F6A7 Uncompressed Size     000034A1 (13473)\n-18F6AB Filename Length       0029 (41)\n-18F6AD Extra Length          0009 (9)\n-18F6AF Comment Length        0000 (0)\n-18F6B1 Disk Start            0000 (0)\n-18F6B3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F6B5 Ext File Attributes   00000000 (0)\n-18F6B9 Local Header Offset   00020F5C (135004)\n-18F6BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F6BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F6E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F6E8   Length              0005 (5)\n-18F6EA   Flags               01 (1) 'Modification'\n-18F6EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F6EF CENTRAL HEADER #52    02014B50 (33639248)\n-18F6F3 Created Zip Spec      14 (20) '2.0'\n-18F6F4 Created OS            00 (0) 'MS-DOS'\n-18F6F5 Extract Zip Spec      14 (20) '2.0'\n-18F6F6 Extract OS            00 (0) 'MS-DOS'\n-18F6F7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F6F9 Compression Method    0000 (0) 'Stored'\n-18F6FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F6FF CRC                   F43D3BE1 (4097653729)\n-18F703 Compressed Size       00002625 (9765)\n-18F707 Uncompressed Size     00002625 (9765)\n-18F70B Filename Length       0024 (36)\n-18F70D Extra Length          0009 (9)\n-18F70F Comment Length        0000 (0)\n-18F711 Disk Start            0000 (0)\n-18F713 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F715 Ext File Attributes   00000000 (0)\n-18F719 Local Header Offset   0002445D (148573)\n-18F71D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F71D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F741 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F743   Length              0005 (5)\n-18F745   Flags               01 (1) 'Modification'\n-18F746   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F74A CENTRAL HEADER #53    02014B50 (33639248)\n-18F74E Created Zip Spec      14 (20) '2.0'\n-18F74F Created OS            00 (0) 'MS-DOS'\n-18F750 Extract Zip Spec      14 (20) '2.0'\n-18F751 Extract OS            00 (0) 'MS-DOS'\n-18F752 General Purpose Flag  0000 (0)\n-18F754 Compression Method    0000 (0) 'Stored'\n-18F756 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F75A CRC                   00000000 (0)\n-18F75E Compressed Size       00000000 (0)\n-18F762 Uncompressed Size     00000000 (0)\n-18F766 Filename Length       0021 (33)\n-18F768 Extra Length          0009 (9)\n-18F76A Comment Length        0000 (0)\n-18F76C Disk Start            0000 (0)\n-18F76E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F770 Ext File Attributes   00000000 (0)\n-18F774 Local Header Offset   00026ADD (158429)\n-18F778 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F778: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F799 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F79B   Length              0005 (5)\n-18F79D   Flags               01 (1) 'Modification'\n-18F79E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F7A2 CENTRAL HEADER #54    02014B50 (33639248)\n-18F7A6 Created Zip Spec      14 (20) '2.0'\n-18F7A7 Created OS            00 (0) 'MS-DOS'\n-18F7A8 Extract Zip Spec      14 (20) '2.0'\n-18F7A9 Extract OS            00 (0) 'MS-DOS'\n-18F7AA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F7AC Compression Method    0000 (0) 'Stored'\n-18F7AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F7B2 CRC                   62810B39 (1652624185)\n-18F7B6 Compressed Size       00000554 (1364)\n-18F7BA Uncompressed Size     00000554 (1364)\n-18F7BE Filename Length       0036 (54)\n-18F7C0 Extra Length          0009 (9)\n-18F7C2 Comment Length        0000 (0)\n-18F7C4 Disk Start            0000 (0)\n-18F7C6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F7C8 Ext File Attributes   00000000 (0)\n-18F7CC Local Header Offset   00026B25 (158501)\n-18F7D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F7D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F806 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F808   Length              0005 (5)\n-18F80A   Flags               01 (1) 'Modification'\n-18F80B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F80F CENTRAL HEADER #55    02014B50 (33639248)\n-18F813 Created Zip Spec      14 (20) '2.0'\n-18F814 Created OS            00 (0) 'MS-DOS'\n-18F815 Extract Zip Spec      14 (20) '2.0'\n-18F816 Extract OS            00 (0) 'MS-DOS'\n-18F817 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F819 Compression Method    0000 (0) 'Stored'\n-18F81B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F81F CRC                   F49AF035 (4103794741)\n-18F823 Compressed Size       000018A5 (6309)\n-18F827 Uncompressed Size     000018A5 (6309)\n-18F82B Filename Length       0038 (56)\n-18F82D Extra Length          0009 (9)\n-18F82F Comment Length        0000 (0)\n-18F831 Disk Start            0000 (0)\n-18F833 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F835 Ext File Attributes   00000000 (0)\n-18F839 Local Header Offset   000270E6 (159974)\n-18F83D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F83D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F875 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F877   Length              0005 (5)\n-18F879   Flags               01 (1) 'Modification'\n-18F87A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F87E CENTRAL HEADER #56    02014B50 (33639248)\n-18F882 Created Zip Spec      14 (20) '2.0'\n-18F883 Created OS            00 (0) 'MS-DOS'\n-18F884 Extract Zip Spec      14 (20) '2.0'\n-18F885 Extract OS            00 (0) 'MS-DOS'\n-18F886 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F888 Compression Method    0000 (0) 'Stored'\n-18F88A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F88E CRC                   11EE6DF6 (300838390)\n-18F892 Compressed Size       00004ECE (20174)\n-18F896 Uncompressed Size     00004ECE (20174)\n-18F89A Filename Length       003B (59)\n-18F89C Extra Length          0009 (9)\n-18F89E Comment Length        0000 (0)\n-18F8A0 Disk Start            0000 (0)\n-18F8A2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F8A4 Ext File Attributes   00000000 (0)\n-18F8A8 Local Header Offset   000289FA (166394)\n-18F8AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F8AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F8E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F8E9   Length              0005 (5)\n-18F8EB   Flags               01 (1) 'Modification'\n-18F8EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F8F0 CENTRAL HEADER #57    02014B50 (33639248)\n-18F8F4 Created Zip Spec      14 (20) '2.0'\n-18F8F5 Created OS            00 (0) 'MS-DOS'\n-18F8F6 Extract Zip Spec      14 (20) '2.0'\n-18F8F7 Extract OS            00 (0) 'MS-DOS'\n-18F8F8 General Purpose Flag  0000 (0)\n-18F8FA Compression Method    0000 (0) 'Stored'\n-18F8FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F900 CRC                   00000000 (0)\n-18F904 Compressed Size       00000000 (0)\n-18F908 Uncompressed Size     00000000 (0)\n-18F90C Filename Length       0021 (33)\n-18F90E Extra Length          0009 (9)\n-18F910 Comment Length        0000 (0)\n-18F912 Disk Start            0000 (0)\n-18F914 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F916 Ext File Attributes   00000000 (0)\n-18F91A Local Header Offset   0002D93A (186682)\n-18F91E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F91E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F93F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F941   Length              0005 (5)\n-18F943   Flags               01 (1) 'Modification'\n-18F944   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F948 CENTRAL HEADER #58    02014B50 (33639248)\n-18F94C Created Zip Spec      14 (20) '2.0'\n-18F94D Created OS            00 (0) 'MS-DOS'\n-18F94E Extract Zip Spec      14 (20) '2.0'\n-18F94F Extract OS            00 (0) 'MS-DOS'\n-18F950 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F952 Compression Method    0000 (0) 'Stored'\n-18F954 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F958 CRC                   87F19404 (2280756228)\n-18F95C Compressed Size       000032DF (13023)\n-18F960 Uncompressed Size     000032DF (13023)\n-18F964 Filename Length       0034 (52)\n-18F966 Extra Length          0009 (9)\n-18F968 Comment Length        0000 (0)\n-18F96A Disk Start            0000 (0)\n-18F96C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F96E Ext File Attributes   00000000 (0)\n-18F972 Local Header Offset   0002D982 (186754)\n-18F976 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F976: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18F9AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18F9AC   Length              0005 (5)\n-18F9AE   Flags               01 (1) 'Modification'\n-18F9AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18F9B3 CENTRAL HEADER #59    02014B50 (33639248)\n-18F9B7 Created Zip Spec      14 (20) '2.0'\n-18F9B8 Created OS            00 (0) 'MS-DOS'\n-18F9B9 Extract Zip Spec      14 (20) '2.0'\n-18F9BA Extract OS            00 (0) 'MS-DOS'\n-18F9BB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18F9BD Compression Method    0000 (0) 'Stored'\n-18F9BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18F9C3 CRC                   AA2CE6AF (2855069359)\n-18F9C7 Compressed Size       00000DB2 (3506)\n-18F9CB Uncompressed Size     00000DB2 (3506)\n-18F9CF Filename Length       003F (63)\n-18F9D1 Extra Length          0009 (9)\n-18F9D3 Comment Length        0000 (0)\n-18F9D5 Disk Start            0000 (0)\n-18F9D7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18F9D9 Ext File Attributes   00000000 (0)\n-18F9DD Local Header Offset   00030CCC (199884)\n-18F9E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18F9E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FA20 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FA22   Length              0005 (5)\n-18FA24   Flags               01 (1) 'Modification'\n-18FA25   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FA29 CENTRAL HEADER #60    02014B50 (33639248)\n-18FA2D Created Zip Spec      14 (20) '2.0'\n-18FA2E Created OS            00 (0) 'MS-DOS'\n-18FA2F Extract Zip Spec      14 (20) '2.0'\n-18FA30 Extract OS            00 (0) 'MS-DOS'\n-18FA31 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18FA33 Compression Method    0000 (0) 'Stored'\n-18FA35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FA39 CRC                   4F0E9D5D (1326357853)\n-18FA3D Compressed Size       00002017 (8215)\n-18FA41 Uncompressed Size     00002017 (8215)\n-18FA45 Filename Length       002B (43)\n-18FA47 Extra Length          0009 (9)\n-18FA49 Comment Length        0000 (0)\n-18FA4B Disk Start            0000 (0)\n-18FA4D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FA4F Ext File Attributes   00000000 (0)\n-18FA53 Local Header Offset   00031AF4 (203508)\n-18FA57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FA57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FA82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FA84   Length              0005 (5)\n-18FA86   Flags               01 (1) 'Modification'\n-18FA87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FA8B CENTRAL HEADER #61    02014B50 (33639248)\n-18FA8F Created Zip Spec      14 (20) '2.0'\n-18FA90 Created OS            00 (0) 'MS-DOS'\n-18FA91 Extract Zip Spec      14 (20) '2.0'\n-18FA92 Extract OS            00 (0) 'MS-DOS'\n-18FA93 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18FA95 Compression Method    0000 (0) 'Stored'\n-18FA97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FA9B CRC                   35B34ECC (900943564)\n-18FA9F Compressed Size       0000049E (1182)\n-18FAA3 Uncompressed Size     0000049E (1182)\n-18FAA7 Filename Length       003B (59)\n-18FAA9 Extra Length          0009 (9)\n-18FAAB Comment Length        0000 (0)\n-18FAAD Disk Start            0000 (0)\n-18FAAF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FAB1 Ext File Attributes   00000000 (0)\n-18FAB5 Local Header Offset   00033B6D (211821)\n-18FAB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FAB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FAF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FAF6   Length              0005 (5)\n-18FAF8   Flags               01 (1) 'Modification'\n-18FAF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FAFD CENTRAL HEADER #62    02014B50 (33639248)\n-18FB01 Created Zip Spec      14 (20) '2.0'\n-18FB02 Created OS            00 (0) 'MS-DOS'\n-18FB03 Extract Zip Spec      14 (20) '2.0'\n-18FB04 Extract OS            00 (0) 'MS-DOS'\n-18FB05 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18FB07 Compression Method    0000 (0) 'Stored'\n-18FB09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FB0D CRC                   AE36D6DB (2922829531)\n-18FB11 Compressed Size       000004A6 (1190)\n-18FB15 Uncompressed Size     000004A6 (1190)\n-18FB19 Filename Length       003D (61)\n-18FB1B Extra Length          0009 (9)\n-18FB1D Comment Length        0000 (0)\n-18FB1F Disk Start            0000 (0)\n-18FB21 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FB23 Ext File Attributes   00000000 (0)\n-18FB27 Local Header Offset   0003407D (213117)\n-18FB2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FB2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FB68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FB6A   Length              0005 (5)\n-18FB6C   Flags               01 (1) 'Modification'\n-18FB6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FB71 CENTRAL HEADER #63    02014B50 (33639248)\n-18FB75 Created Zip Spec      14 (20) '2.0'\n-18FB76 Created OS            00 (0) 'MS-DOS'\n-18FB77 Extract Zip Spec      14 (20) '2.0'\n-18FB78 Extract OS            00 (0) 'MS-DOS'\n-18FB79 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18FB7B Compression Method    0000 (0) 'Stored'\n-18FB7D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FB81 CRC                   693DBCBA (1765653690)\n-18FB85 Compressed Size       00002F4D (12109)\n-18FB89 Uncompressed Size     00002F4D (12109)\n-18FB8D Filename Length       002B (43)\n-18FB8F Extra Length          0009 (9)\n-18FB91 Comment Length        0000 (0)\n-18FB93 Disk Start            0000 (0)\n-18FB95 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FB97 Ext File Attributes   00000000 (0)\n-18FB9B Local Header Offset   00034597 (214423)\n-18FB9F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FB9F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FBCA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FBCC   Length              0005 (5)\n-18FBCE   Flags               01 (1) 'Modification'\n-18FBCF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FBD3 CENTRAL HEADER #64    02014B50 (33639248)\n-18FBD7 Created Zip Spec      14 (20) '2.0'\n-18FBD8 Created OS            00 (0) 'MS-DOS'\n-18FBD9 Extract Zip Spec      14 (20) '2.0'\n-18FBDA Extract OS            00 (0) 'MS-DOS'\n-18FBDB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18FBDD Compression Method    0000 (0) 'Stored'\n-18FBDF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FBE3 CRC                   44BCC62B (1153222187)\n-18FBE7 Compressed Size       00004608 (17928)\n-18FBEB Uncompressed Size     00004608 (17928)\n-18FBEF Filename Length       002D (45)\n-18FBF1 Extra Length          0009 (9)\n-18FBF3 Comment Length        0000 (0)\n-18FBF5 Disk Start            0000 (0)\n-18FBF7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FBF9 Ext File Attributes   00000000 (0)\n-18FBFD Local Header Offset   00037546 (226630)\n-18FC01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FC01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FC2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FC30   Length              0005 (5)\n-18FC32   Flags               01 (1) 'Modification'\n-18FC33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FC37 CENTRAL HEADER #65    02014B50 (33639248)\n-18FC3B Created Zip Spec      14 (20) '2.0'\n-18FC3C Created OS            00 (0) 'MS-DOS'\n-18FC3D Extract Zip Spec      14 (20) '2.0'\n-18FC3E Extract OS            00 (0) 'MS-DOS'\n-18FC3F General Purpose Flag  0000 (0)\n-18FC41 Compression Method    0000 (0) 'Stored'\n-18FC43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FC47 CRC                   00000000 (0)\n-18FC4B Compressed Size       00000000 (0)\n-18FC4F Uncompressed Size     00000000 (0)\n-18FC53 Filename Length       0021 (33)\n-18FC55 Extra Length          0009 (9)\n-18FC57 Comment Length        0000 (0)\n-18FC59 Disk Start            0000 (0)\n-18FC5B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FC5D Ext File Attributes   00000000 (0)\n-18FC61 Local Header Offset   0003BBB2 (244658)\n-18FC65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FC65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FC86 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FC88   Length              0005 (5)\n-18FC8A   Flags               01 (1) 'Modification'\n-18FC8B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FC8F CENTRAL HEADER #66    02014B50 (33639248)\n-18FC93 Created Zip Spec      14 (20) '2.0'\n-18FC94 Created OS            00 (0) 'MS-DOS'\n-18FC95 Extract Zip Spec      14 (20) '2.0'\n-18FC96 Extract OS            00 (0) 'MS-DOS'\n-18FC97 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18FC99 Compression Method    0000 (0) 'Stored'\n-18FC9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FC9F CRC                   01EEDE5E (32431710)\n-18FCA3 Compressed Size       000004E7 (1255)\n-18FCA7 Uncompressed Size     000004E7 (1255)\n-18FCAB Filename Length       002E (46)\n-18FCAD Extra Length          0009 (9)\n-18FCAF Comment Length        0000 (0)\n-18FCB1 Disk Start            0000 (0)\n-18FCB3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FCB5 Ext File Attributes   00000000 (0)\n-18FCB9 Local Header Offset   0003BBFA (244730)\n-18FCBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FCBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FCEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FCED   Length              0005 (5)\n-18FCEF   Flags               01 (1) 'Modification'\n-18FCF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FCF4 CENTRAL HEADER #67    02014B50 (33639248)\n-18FCF8 Created Zip Spec      14 (20) '2.0'\n-18FCF9 Created OS            00 (0) 'MS-DOS'\n-18FCFA Extract Zip Spec      14 (20) '2.0'\n-18FCFB Extract OS            00 (0) 'MS-DOS'\n-18FCFC General Purpose Flag  0000 (0)\n-18FCFE Compression Method    0000 (0) 'Stored'\n-18FD00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FD04 CRC                   00000000 (0)\n-18FD08 Compressed Size       00000000 (0)\n-18FD0C Uncompressed Size     00000000 (0)\n-18FD10 Filename Length       0029 (41)\n-18FD12 Extra Length          0009 (9)\n-18FD14 Comment Length        0000 (0)\n-18FD16 Disk Start            0000 (0)\n-18FD18 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FD1A Ext File Attributes   00000000 (0)\n-18FD1E Local Header Offset   0003C146 (246086)\n-18FD22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FD22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FD4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FD4D   Length              0005 (5)\n-18FD4F   Flags               01 (1) 'Modification'\n-18FD50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FD54 CENTRAL HEADER #68    02014B50 (33639248)\n-18FD58 Created Zip Spec      14 (20) '2.0'\n-18FD59 Created OS            00 (0) 'MS-DOS'\n-18FD5A Extract Zip Spec      14 (20) '2.0'\n-18FD5B Extract OS            00 (0) 'MS-DOS'\n-18FD5C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18FD5E Compression Method    0000 (0) 'Stored'\n-18FD60 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FD64 CRC                   20854F04 (545607428)\n-18FD68 Compressed Size       00000B1B (2843)\n-18FD6C Uncompressed Size     00000B1B (2843)\n-18FD70 Filename Length       003E (62)\n-18FD72 Extra Length          0009 (9)\n-18FD74 Comment Length        0000 (0)\n-18FD76 Disk Start            0000 (0)\n-18FD78 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FD7A Ext File Attributes   00000000 (0)\n-18FD7E Local Header Offset   0003C196 (246166)\n-18FD82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FD82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FDC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FDC2   Length              0005 (5)\n-18FDC4   Flags               01 (1) 'Modification'\n-18FDC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FDC9 CENTRAL HEADER #69    02014B50 (33639248)\n-18FDCD Created Zip Spec      14 (20) '2.0'\n-18FDCE Created OS            00 (0) 'MS-DOS'\n-18FDCF Extract Zip Spec      14 (20) '2.0'\n-18FDD0 Extract OS            00 (0) 'MS-DOS'\n-18FDD1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18FDD3 Compression Method    0000 (0) 'Stored'\n-18FDD5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FDD9 CRC                   D19D012A (3516727594)\n-18FDDD Compressed Size       00000733 (1843)\n-18FDE1 Uncompressed Size     00000733 (1843)\n-18FDE5 Filename Length       003E (62)\n-18FDE7 Extra Length          0009 (9)\n-18FDE9 Comment Length        0000 (0)\n-18FDEB Disk Start            0000 (0)\n-18FDED Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FDEF Ext File Attributes   00000000 (0)\n-18FDF3 Local Header Offset   0003CD26 (249126)\n-18FDF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FDF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FE35 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FE37   Length              0005 (5)\n-18FE39   Flags               01 (1) 'Modification'\n-18FE3A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FE3E CENTRAL HEADER #70    02014B50 (33639248)\n-18FE42 Created Zip Spec      14 (20) '2.0'\n-18FE43 Created OS            00 (0) 'MS-DOS'\n-18FE44 Extract Zip Spec      14 (20) '2.0'\n-18FE45 Extract OS            00 (0) 'MS-DOS'\n-18FE46 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18FE48 Compression Method    0000 (0) 'Stored'\n-18FE4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FE4E CRC                   489CA2B6 (1218224822)\n-18FE52 Compressed Size       00003CC4 (15556)\n-18FE56 Uncompressed Size     00003CC4 (15556)\n-18FE5A Filename Length       0038 (56)\n-18FE5C Extra Length          0009 (9)\n-18FE5E Comment Length        0000 (0)\n-18FE60 Disk Start            0000 (0)\n-18FE62 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FE64 Ext File Attributes   00000000 (0)\n-18FE68 Local Header Offset   0003D4CE (251086)\n-18FE6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FE6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FEA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FEA6   Length              0005 (5)\n-18FEA8   Flags               01 (1) 'Modification'\n-18FEA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FEAD CENTRAL HEADER #71    02014B50 (33639248)\n-18FEB1 Created Zip Spec      14 (20) '2.0'\n-18FEB2 Created OS            00 (0) 'MS-DOS'\n-18FEB3 Extract Zip Spec      14 (20) '2.0'\n-18FEB4 Extract OS            00 (0) 'MS-DOS'\n-18FEB5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18FEB7 Compression Method    0000 (0) 'Stored'\n-18FEB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FEBD CRC                   BD63F8B8 (3177445560)\n-18FEC1 Compressed Size       000013BA (5050)\n-18FEC5 Uncompressed Size     000013BA (5050)\n-18FEC9 Filename Length       003C (60)\n-18FECB Extra Length          0009 (9)\n-18FECD Comment Length        0000 (0)\n-18FECF Disk Start            0000 (0)\n-18FED1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FED3 Ext File Attributes   00000000 (0)\n-18FED7 Local Header Offset   00041201 (266753)\n-18FEDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FEDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FF17 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FF19   Length              0005 (5)\n-18FF1B   Flags               01 (1) 'Modification'\n-18FF1C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FF20 CENTRAL HEADER #72    02014B50 (33639248)\n-18FF24 Created Zip Spec      14 (20) '2.0'\n-18FF25 Created OS            00 (0) 'MS-DOS'\n-18FF26 Extract Zip Spec      14 (20) '2.0'\n-18FF27 Extract OS            00 (0) 'MS-DOS'\n-18FF28 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18FF2A Compression Method    0000 (0) 'Stored'\n-18FF2C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FF30 CRC                   C96B89A9 (3379268009)\n-18FF34 Compressed Size       00000DB0 (3504)\n-18FF38 Uncompressed Size     00000DB0 (3504)\n-18FF3C Filename Length       003F (63)\n-18FF3E Extra Length          0009 (9)\n-18FF40 Comment Length        0000 (0)\n-18FF42 Disk Start            0000 (0)\n-18FF44 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FF46 Ext File Attributes   00000000 (0)\n-18FF4A Local Header Offset   0004262E (271918)\n-18FF4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FF4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FF8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FF8F   Length              0005 (5)\n-18FF91   Flags               01 (1) 'Modification'\n-18FF92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-18FF96 CENTRAL HEADER #73    02014B50 (33639248)\n-18FF9A Created Zip Spec      14 (20) '2.0'\n-18FF9B Created OS            00 (0) 'MS-DOS'\n-18FF9C Extract Zip Spec      14 (20) '2.0'\n-18FF9D Extract OS            00 (0) 'MS-DOS'\n-18FF9E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-18FFA0 Compression Method    0000 (0) 'Stored'\n-18FFA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18FFA6 CRC                   3FE3ACCB (1071885515)\n-18FFAA Compressed Size       00002CC5 (11461)\n-18FFAE Uncompressed Size     00002CC5 (11461)\n-18FFB2 Filename Length       0039 (57)\n-18FFB4 Extra Length          0009 (9)\n-18FFB6 Comment Length        0000 (0)\n-18FFB8 Disk Start            0000 (0)\n-18FFBA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-18FFBC Ext File Attributes   00000000 (0)\n-18FFC0 Local Header Offset   00043454 (275540)\n-18FFC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18FFC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18FFFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18FFFF   Length              0005 (5)\n-190001   Flags               01 (1) 'Modification'\n-190002   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190006 CENTRAL HEADER #74    02014B50 (33639248)\n-19000A Created Zip Spec      14 (20) '2.0'\n-19000B Created OS            00 (0) 'MS-DOS'\n-19000C Extract Zip Spec      14 (20) '2.0'\n-19000D Extract OS            00 (0) 'MS-DOS'\n-19000E General Purpose Flag  0000 (0)\n-190010 Compression Method    0000 (0) 'Stored'\n-190012 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190016 CRC                   00000000 (0)\n-19001A Compressed Size       00000000 (0)\n-19001E Uncompressed Size     00000000 (0)\n-190022 Filename Length       001F (31)\n-190024 Extra Length          0009 (9)\n-190026 Comment Length        0000 (0)\n-190028 Disk Start            0000 (0)\n-19002A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19002C Ext File Attributes   00000000 (0)\n-190030 Local Header Offset   00046189 (287113)\n-190034 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190034: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190053 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190055   Length              0005 (5)\n-190057   Flags               01 (1) 'Modification'\n-190058   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19005C CENTRAL HEADER #75    02014B50 (33639248)\n-190060 Created Zip Spec      14 (20) '2.0'\n-190061 Created OS            00 (0) 'MS-DOS'\n-190062 Extract Zip Spec      14 (20) '2.0'\n-190063 Extract OS            00 (0) 'MS-DOS'\n-190064 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190066 Compression Method    0000 (0) 'Stored'\n-190068 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19006C CRC                   F325AC46 (4079332422)\n-190070 Compressed Size       000010FE (4350)\n-190074 Uncompressed Size     000010FE (4350)\n-190078 Filename Length       003A (58)\n-19007A Extra Length          0009 (9)\n-19007C Comment Length        0000 (0)\n-19007E Disk Start            0000 (0)\n-190080 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190082 Ext File Attributes   00000000 (0)\n-190086 Local Header Offset   000461CF (287183)\n-19008A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19008A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1900C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1900C6   Length              0005 (5)\n-1900C8   Flags               01 (1) 'Modification'\n-1900C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1900CD CENTRAL HEADER #76    02014B50 (33639248)\n-1900D1 Created Zip Spec      14 (20) '2.0'\n-1900D2 Created OS            00 (0) 'MS-DOS'\n-1900D3 Extract Zip Spec      14 (20) '2.0'\n-1900D4 Extract OS            00 (0) 'MS-DOS'\n-1900D5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1900D7 Compression Method    0000 (0) 'Stored'\n-1900D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1900DD CRC                   9BAFC26A (2611987050)\n-1900E1 Compressed Size       00001AC5 (6853)\n-1900E5 Uncompressed Size     00001AC5 (6853)\n-1900E9 Filename Length       0031 (49)\n-1900EB Extra Length          0009 (9)\n-1900ED Comment Length        0000 (0)\n-1900EF Disk Start            0000 (0)\n-1900F1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1900F3 Ext File Attributes   00000000 (0)\n-1900F7 Local Header Offset   0004733E (291646)\n-1900FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1900FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19012C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19012E   Length              0005 (5)\n-190130   Flags               01 (1) 'Modification'\n-190131   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190135 CENTRAL HEADER #77    02014B50 (33639248)\n-190139 Created Zip Spec      14 (20) '2.0'\n-19013A Created OS            00 (0) 'MS-DOS'\n-19013B Extract Zip Spec      14 (20) '2.0'\n-19013C Extract OS            00 (0) 'MS-DOS'\n-19013D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19013F Compression Method    0000 (0) 'Stored'\n-190141 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190145 CRC                   68B50306 (1756693254)\n-190149 Compressed Size       000012AB (4779)\n-19014D Uncompressed Size     000012AB (4779)\n-190151 Filename Length       0036 (54)\n-190153 Extra Length          0009 (9)\n-190155 Comment Length        0000 (0)\n-190157 Disk Start            0000 (0)\n-190159 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19015B Ext File Attributes   00000000 (0)\n-19015F Local Header Offset   00048E6B (298603)\n-190163 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190163: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190199 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19019B   Length              0005 (5)\n-19019D   Flags               01 (1) 'Modification'\n-19019E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1901A2 CENTRAL HEADER #78    02014B50 (33639248)\n-1901A6 Created Zip Spec      14 (20) '2.0'\n-1901A7 Created OS            00 (0) 'MS-DOS'\n-1901A8 Extract Zip Spec      14 (20) '2.0'\n-1901A9 Extract OS            00 (0) 'MS-DOS'\n-1901AA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1901AC Compression Method    0000 (0) 'Stored'\n-1901AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1901B2 CRC                   0BFFCD1E (201313566)\n-1901B6 Compressed Size       00002715 (10005)\n-1901BA Uncompressed Size     00002715 (10005)\n-1901BE Filename Length       002F (47)\n-1901C0 Extra Length          0009 (9)\n-1901C2 Comment Length        0000 (0)\n-1901C4 Disk Start            0000 (0)\n-1901C6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1901C8 Ext File Attributes   00000000 (0)\n-1901CC Local Header Offset   0004A183 (303491)\n-1901D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1901D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1901FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190201   Length              0005 (5)\n-190203   Flags               01 (1) 'Modification'\n-190204   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190208 CENTRAL HEADER #79    02014B50 (33639248)\n-19020C Created Zip Spec      14 (20) '2.0'\n-19020D Created OS            00 (0) 'MS-DOS'\n-19020E Extract Zip Spec      14 (20) '2.0'\n-19020F Extract OS            00 (0) 'MS-DOS'\n-190210 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190212 Compression Method    0000 (0) 'Stored'\n-190214 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190218 CRC                   94D758DF (2497140959)\n-19021C Compressed Size       000004F3 (1267)\n-190220 Uncompressed Size     000004F3 (1267)\n-190224 Filename Length       003C (60)\n-190226 Extra Length          0009 (9)\n-190228 Comment Length        0000 (0)\n-19022A Disk Start            0000 (0)\n-19022C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19022E Ext File Attributes   00000000 (0)\n-190232 Local Header Offset   0004C8FE (313598)\n-190236 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190236: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190272 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190274   Length              0005 (5)\n-190276   Flags               01 (1) 'Modification'\n-190277   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19027B CENTRAL HEADER #80    02014B50 (33639248)\n-19027F Created Zip Spec      14 (20) '2.0'\n-190280 Created OS            00 (0) 'MS-DOS'\n-190281 Extract Zip Spec      14 (20) '2.0'\n-190282 Extract OS            00 (0) 'MS-DOS'\n-190283 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190285 Compression Method    0000 (0) 'Stored'\n-190287 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19028B CRC                   778123FC (2004952060)\n-19028F Compressed Size       00000770 (1904)\n-190293 Uncompressed Size     00000770 (1904)\n-190297 Filename Length       0039 (57)\n-190299 Extra Length          0009 (9)\n-19029B Comment Length        0000 (0)\n-19029D Disk Start            0000 (0)\n-19029F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1902A1 Ext File Attributes   00000000 (0)\n-1902A5 Local Header Offset   0004CE64 (314980)\n-1902A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1902A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1902E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1902E4   Length              0005 (5)\n-1902E6   Flags               01 (1) 'Modification'\n-1902E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1902EB CENTRAL HEADER #81    02014B50 (33639248)\n-1902EF Created Zip Spec      14 (20) '2.0'\n-1902F0 Created OS            00 (0) 'MS-DOS'\n-1902F1 Extract Zip Spec      14 (20) '2.0'\n-1902F2 Extract OS            00 (0) 'MS-DOS'\n-1902F3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1902F5 Compression Method    0000 (0) 'Stored'\n-1902F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1902FB CRC                   041CAAC9 (68987593)\n-1902FF Compressed Size       000004B1 (1201)\n-190303 Uncompressed Size     000004B1 (1201)\n-190307 Filename Length       003D (61)\n-190309 Extra Length          0009 (9)\n-19030B Comment Length        0000 (0)\n-19030D Disk Start            0000 (0)\n-19030F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190311 Ext File Attributes   00000000 (0)\n-190315 Local Header Offset   0004D644 (316996)\n-190319 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190319: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190356 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190358   Length              0005 (5)\n-19035A   Flags               01 (1) 'Modification'\n-19035B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19035F CENTRAL HEADER #82    02014B50 (33639248)\n-190363 Created Zip Spec      14 (20) '2.0'\n-190364 Created OS            00 (0) 'MS-DOS'\n-190365 Extract Zip Spec      14 (20) '2.0'\n-190366 Extract OS            00 (0) 'MS-DOS'\n-190367 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190369 Compression Method    0000 (0) 'Stored'\n-19036B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19036F CRC                   01D0CBB6 (30460854)\n-190373 Compressed Size       00000A4C (2636)\n-190377 Uncompressed Size     00000A4C (2636)\n-19037B Filename Length       003B (59)\n-19037D Extra Length          0009 (9)\n-19037F Comment Length        0000 (0)\n-190381 Disk Start            0000 (0)\n-190383 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190385 Ext File Attributes   00000000 (0)\n-190389 Local Header Offset   0004DB69 (318313)\n-19038D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19038D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1903C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1903CA   Length              0005 (5)\n-1903CC   Flags               01 (1) 'Modification'\n-1903CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1903D1 CENTRAL HEADER #83    02014B50 (33639248)\n-1903D5 Created Zip Spec      14 (20) '2.0'\n-1903D6 Created OS            00 (0) 'MS-DOS'\n-1903D7 Extract Zip Spec      14 (20) '2.0'\n-1903D8 Extract OS            00 (0) 'MS-DOS'\n-1903D9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1903DB Compression Method    0000 (0) 'Stored'\n-1903DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1903E1 CRC                   790D5CAF (2030918831)\n-1903E5 Compressed Size       000004AD (1197)\n-1903E9 Uncompressed Size     000004AD (1197)\n-1903ED Filename Length       0037 (55)\n-1903EF Extra Length          0009 (9)\n-1903F1 Comment Length        0000 (0)\n-1903F3 Disk Start            0000 (0)\n-1903F5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1903F7 Ext File Attributes   00000000 (0)\n-1903FB Local Header Offset   0004E627 (321063)\n-1903FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1903FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190436 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190438   Length              0005 (5)\n-19043A   Flags               01 (1) 'Modification'\n-19043B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19043F CENTRAL HEADER #84    02014B50 (33639248)\n-190443 Created Zip Spec      14 (20) '2.0'\n-190444 Created OS            00 (0) 'MS-DOS'\n-190445 Extract Zip Spec      14 (20) '2.0'\n-190446 Extract OS            00 (0) 'MS-DOS'\n-190447 General Purpose Flag  0000 (0)\n-190449 Compression Method    0000 (0) 'Stored'\n-19044B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19044F CRC                   00000000 (0)\n-190453 Compressed Size       00000000 (0)\n-190457 Uncompressed Size     00000000 (0)\n-19045B Filename Length       002C (44)\n-19045D Extra Length          0009 (9)\n-19045F Comment Length        0000 (0)\n-190461 Disk Start            0000 (0)\n-190463 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190465 Ext File Attributes   00000000 (0)\n-190469 Local Header Offset   0004EB42 (322370)\n-19046D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19046D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190499 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19049B   Length              0005 (5)\n-19049D   Flags               01 (1) 'Modification'\n-19049E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1904A2 CENTRAL HEADER #85    02014B50 (33639248)\n-1904A6 Created Zip Spec      14 (20) '2.0'\n-1904A7 Created OS            00 (0) 'MS-DOS'\n-1904A8 Extract Zip Spec      14 (20) '2.0'\n-1904A9 Extract OS            00 (0) 'MS-DOS'\n-1904AA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1904AC Compression Method    0000 (0) 'Stored'\n-1904AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1904B2 CRC                   A679BD52 (2792996178)\n-1904B6 Compressed Size       0000264E (9806)\n-1904BA Uncompressed Size     0000264E (9806)\n-1904BE Filename Length       004D (77)\n-1904C0 Extra Length          0009 (9)\n-1904C2 Comment Length        0000 (0)\n-1904C4 Disk Start            0000 (0)\n-1904C6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1904C8 Ext File Attributes   00000000 (0)\n-1904CC Local Header Offset   0004EB95 (322453)\n-1904D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1904D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19051D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19051F   Length              0005 (5)\n-190521   Flags               01 (1) 'Modification'\n-190522   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190526 CENTRAL HEADER #86    02014B50 (33639248)\n-19052A Created Zip Spec      14 (20) '2.0'\n-19052B Created OS            00 (0) 'MS-DOS'\n-19052C Extract Zip Spec      14 (20) '2.0'\n-19052D Extract OS            00 (0) 'MS-DOS'\n-19052E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190530 Compression Method    0000 (0) 'Stored'\n-190532 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190536 CRC                   5C1CB033 (1545383987)\n-19053A Compressed Size       000006CB (1739)\n-19053E Uncompressed Size     000006CB (1739)\n-190542 Filename Length       0054 (84)\n-190544 Extra Length          0009 (9)\n-190546 Comment Length        0000 (0)\n-190548 Disk Start            0000 (0)\n-19054A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19054C Ext File Attributes   00000000 (0)\n-190550 Local Header Offset   00051267 (332391)\n-190554 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190554: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1905A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1905AA   Length              0005 (5)\n-1905AC   Flags               01 (1) 'Modification'\n-1905AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1905B1 CENTRAL HEADER #87    02014B50 (33639248)\n-1905B5 Created Zip Spec      14 (20) '2.0'\n-1905B6 Created OS            00 (0) 'MS-DOS'\n-1905B7 Extract Zip Spec      14 (20) '2.0'\n-1905B8 Extract OS            00 (0) 'MS-DOS'\n-1905B9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1905BB Compression Method    0000 (0) 'Stored'\n-1905BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1905C1 CRC                   E6853BBE (3867491262)\n-1905C5 Compressed Size       00000448 (1096)\n-1905C9 Uncompressed Size     00000448 (1096)\n-1905CD Filename Length       0041 (65)\n-1905CF Extra Length          0009 (9)\n-1905D1 Comment Length        0000 (0)\n-1905D3 Disk Start            0000 (0)\n-1905D5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1905D7 Ext File Attributes   00000000 (0)\n-1905DB Local Header Offset   000519BD (334269)\n-1905DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1905DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190620 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190622   Length              0005 (5)\n-190624   Flags               01 (1) 'Modification'\n-190625   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190629 CENTRAL HEADER #88    02014B50 (33639248)\n-19062D Created Zip Spec      14 (20) '2.0'\n-19062E Created OS            00 (0) 'MS-DOS'\n-19062F Extract Zip Spec      14 (20) '2.0'\n-190630 Extract OS            00 (0) 'MS-DOS'\n-190631 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190633 Compression Method    0000 (0) 'Stored'\n-190635 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190639 CRC                   B9E6C475 (3118908533)\n-19063D Compressed Size       00000B0B (2827)\n-190641 Uncompressed Size     00000B0B (2827)\n-190645 Filename Length       0043 (67)\n-190647 Extra Length          0009 (9)\n-190649 Comment Length        0000 (0)\n-19064B Disk Start            0000 (0)\n-19064D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19064F Ext File Attributes   00000000 (0)\n-190653 Local Header Offset   00051E7D (335485)\n-190657 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190657: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19069A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19069C   Length              0005 (5)\n-19069E   Flags               01 (1) 'Modification'\n-19069F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1906A3 CENTRAL HEADER #89    02014B50 (33639248)\n-1906A7 Created Zip Spec      14 (20) '2.0'\n-1906A8 Created OS            00 (0) 'MS-DOS'\n-1906A9 Extract Zip Spec      14 (20) '2.0'\n-1906AA Extract OS            00 (0) 'MS-DOS'\n-1906AB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1906AD Compression Method    0000 (0) 'Stored'\n-1906AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1906B3 CRC                   74E6231A (1961239322)\n-1906B7 Compressed Size       00000511 (1297)\n-1906BB Uncompressed Size     00000511 (1297)\n-1906BF Filename Length       0046 (70)\n-1906C1 Extra Length          0009 (9)\n-1906C3 Comment Length        0000 (0)\n-1906C5 Disk Start            0000 (0)\n-1906C7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1906C9 Ext File Attributes   00000000 (0)\n-1906CD Local Header Offset   00052A02 (338434)\n-1906D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1906D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190717 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190719   Length              0005 (5)\n-19071B   Flags               01 (1) 'Modification'\n-19071C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190720 CENTRAL HEADER #90    02014B50 (33639248)\n-190724 Created Zip Spec      14 (20) '2.0'\n-190725 Created OS            00 (0) 'MS-DOS'\n-190726 Extract Zip Spec      14 (20) '2.0'\n-190727 Extract OS            00 (0) 'MS-DOS'\n-190728 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19072A Compression Method    0000 (0) 'Stored'\n-19072C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190730 CRC                   695FC9AE (1767885230)\n-190734 Compressed Size       00000447 (1095)\n-190738 Uncompressed Size     00000447 (1095)\n-19073C Filename Length       003A (58)\n-19073E Extra Length          0009 (9)\n-190740 Comment Length        0000 (0)\n-190742 Disk Start            0000 (0)\n-190744 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190746 Ext File Attributes   00000000 (0)\n-19074A Local Header Offset   00052F90 (339856)\n-19074E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19074E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190788 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19078A   Length              0005 (5)\n-19078C   Flags               01 (1) 'Modification'\n-19078D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190791 CENTRAL HEADER #91    02014B50 (33639248)\n-190795 Created Zip Spec      14 (20) '2.0'\n-190796 Created OS            00 (0) 'MS-DOS'\n-190797 Extract Zip Spec      14 (20) '2.0'\n-190798 Extract OS            00 (0) 'MS-DOS'\n-190799 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19079B Compression Method    0000 (0) 'Stored'\n-19079D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1907A1 CRC                   1744C936 (390383926)\n-1907A5 Compressed Size       000023F1 (9201)\n-1907A9 Uncompressed Size     000023F1 (9201)\n-1907AD Filename Length       0045 (69)\n-1907AF Extra Length          0009 (9)\n-1907B1 Comment Length        0000 (0)\n-1907B3 Disk Start            0000 (0)\n-1907B5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1907B7 Ext File Attributes   00000000 (0)\n-1907BB Local Header Offset   00053448 (341064)\n-1907BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1907BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190804 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190806   Length              0005 (5)\n-190808   Flags               01 (1) 'Modification'\n-190809   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19080D CENTRAL HEADER #92    02014B50 (33639248)\n-190811 Created Zip Spec      14 (20) '2.0'\n-190812 Created OS            00 (0) 'MS-DOS'\n-190813 Extract Zip Spec      14 (20) '2.0'\n-190814 Extract OS            00 (0) 'MS-DOS'\n-190815 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190817 Compression Method    0000 (0) 'Stored'\n-190819 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19081D CRC                   287FAB99 (679455641)\n-190821 Compressed Size       000007C3 (1987)\n-190825 Uncompressed Size     000007C3 (1987)\n-190829 Filename Length       004C (76)\n-19082B Extra Length          0009 (9)\n-19082D Comment Length        0000 (0)\n-19082F Disk Start            0000 (0)\n-190831 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190833 Ext File Attributes   00000000 (0)\n-190837 Local Header Offset   000558B5 (350389)\n-19083B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19083B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190887 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190889   Length              0005 (5)\n-19088B   Flags               01 (1) 'Modification'\n-19088C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190890 CENTRAL HEADER #93    02014B50 (33639248)\n-190894 Created Zip Spec      14 (20) '2.0'\n-190895 Created OS            00 (0) 'MS-DOS'\n-190896 Extract Zip Spec      14 (20) '2.0'\n-190897 Extract OS            00 (0) 'MS-DOS'\n-190898 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19089A Compression Method    0000 (0) 'Stored'\n-19089C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1908A0 CRC                   9083C03B (2424553531)\n-1908A4 Compressed Size       00001B7B (7035)\n-1908A8 Uncompressed Size     00001B7B (7035)\n-1908AC Filename Length       004D (77)\n-1908AE Extra Length          0009 (9)\n-1908B0 Comment Length        0000 (0)\n-1908B2 Disk Start            0000 (0)\n-1908B4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1908B6 Ext File Attributes   00000000 (0)\n-1908BA Local Header Offset   000560FB (352507)\n-1908BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1908BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19090B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19090D   Length              0005 (5)\n-19090F   Flags               01 (1) 'Modification'\n-190910   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190914 CENTRAL HEADER #94    02014B50 (33639248)\n-190918 Created Zip Spec      14 (20) '2.0'\n-190919 Created OS            00 (0) 'MS-DOS'\n-19091A Extract Zip Spec      14 (20) '2.0'\n-19091B Extract OS            00 (0) 'MS-DOS'\n-19091C General Purpose Flag  0000 (0)\n-19091E Compression Method    0000 (0) 'Stored'\n-190920 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190924 CRC                   00000000 (0)\n-190928 Compressed Size       00000000 (0)\n-19092C Uncompressed Size     00000000 (0)\n-190930 Filename Length       0031 (49)\n-190932 Extra Length          0009 (9)\n-190934 Comment Length        0000 (0)\n-190936 Disk Start            0000 (0)\n-190938 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19093A Ext File Attributes   00000000 (0)\n-19093E Local Header Offset   00057CFA (359674)\n-190942 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190942: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190973 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190975   Length              0005 (5)\n-190977   Flags               01 (1) 'Modification'\n-190978   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19097C CENTRAL HEADER #95    02014B50 (33639248)\n-190980 Created Zip Spec      14 (20) '2.0'\n-190981 Created OS            00 (0) 'MS-DOS'\n-190982 Extract Zip Spec      14 (20) '2.0'\n-190983 Extract OS            00 (0) 'MS-DOS'\n-190984 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190986 Compression Method    0000 (0) 'Stored'\n-190988 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19098C CRC                   F23B4D60 (4063972704)\n-190990 Compressed Size       0000582A (22570)\n-190994 Uncompressed Size     0000582A (22570)\n-190998 Filename Length       0054 (84)\n-19099A Extra Length          0009 (9)\n-19099C Comment Length        0000 (0)\n-19099E Disk Start            0000 (0)\n-1909A0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1909A2 Ext File Attributes   00000000 (0)\n-1909A6 Local Header Offset   00057D52 (359762)\n-1909AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1909AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1909FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190A00   Length              0005 (5)\n-190A02   Flags               01 (1) 'Modification'\n-190A03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190A07 CENTRAL HEADER #96    02014B50 (33639248)\n-190A0B Created Zip Spec      14 (20) '2.0'\n-190A0C Created OS            00 (0) 'MS-DOS'\n-190A0D Extract Zip Spec      14 (20) '2.0'\n-190A0E Extract OS            00 (0) 'MS-DOS'\n-190A0F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190A11 Compression Method    0000 (0) 'Stored'\n-190A13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190A17 CRC                   E57CCA12 (3850160658)\n-190A1B Compressed Size       000005CF (1487)\n-190A1F Uncompressed Size     000005CF (1487)\n-190A23 Filename Length       005B (91)\n-190A25 Extra Length          0009 (9)\n-190A27 Comment Length        0000 (0)\n-190A29 Disk Start            0000 (0)\n-190A2B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190A2D Ext File Attributes   00000000 (0)\n-190A31 Local Header Offset   0005D607 (382471)\n-190A35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190A35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190A90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190A92   Length              0005 (5)\n-190A94   Flags               01 (1) 'Modification'\n-190A95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190A99 CENTRAL HEADER #97    02014B50 (33639248)\n-190A9D Created Zip Spec      14 (20) '2.0'\n-190A9E Created OS            00 (0) 'MS-DOS'\n-190A9F Extract Zip Spec      14 (20) '2.0'\n-190AA0 Extract OS            00 (0) 'MS-DOS'\n-190AA1 General Purpose Flag  0000 (0)\n-190AA3 Compression Method    0000 (0) 'Stored'\n-190AA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190AA9 CRC                   00000000 (0)\n-190AAD Compressed Size       00000000 (0)\n-190AB1 Uncompressed Size     00000000 (0)\n-190AB5 Filename Length       0030 (48)\n-190AB7 Extra Length          0009 (9)\n-190AB9 Comment Length        0000 (0)\n-190ABB Disk Start            0000 (0)\n-190ABD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190ABF Ext File Attributes   00000000 (0)\n-190AC3 Local Header Offset   0005DC68 (384104)\n-190AC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190AC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190AF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190AF9   Length              0005 (5)\n-190AFB   Flags               01 (1) 'Modification'\n-190AFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190B00 CENTRAL HEADER #98    02014B50 (33639248)\n-190B04 Created Zip Spec      14 (20) '2.0'\n-190B05 Created OS            00 (0) 'MS-DOS'\n-190B06 Extract Zip Spec      14 (20) '2.0'\n-190B07 Extract OS            00 (0) 'MS-DOS'\n-190B08 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190B0A Compression Method    0000 (0) 'Stored'\n-190B0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190B10 CRC                   B946295F (3108383071)\n-190B14 Compressed Size       000008A7 (2215)\n-190B18 Uncompressed Size     000008A7 (2215)\n-190B1C Filename Length       004C (76)\n-190B1E Extra Length          0009 (9)\n-190B20 Comment Length        0000 (0)\n-190B22 Disk Start            0000 (0)\n-190B24 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190B26 Ext File Attributes   00000000 (0)\n-190B2A Local Header Offset   0005DCBF (384191)\n-190B2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190B2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190B7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190B7C   Length              0005 (5)\n-190B7E   Flags               01 (1) 'Modification'\n-190B7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190B83 CENTRAL HEADER #99    02014B50 (33639248)\n-190B87 Created Zip Spec      14 (20) '2.0'\n-190B88 Created OS            00 (0) 'MS-DOS'\n-190B89 Extract Zip Spec      14 (20) '2.0'\n-190B8A Extract OS            00 (0) 'MS-DOS'\n-190B8B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190B8D Compression Method    0000 (0) 'Stored'\n-190B8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190B93 CRC                   208B91F5 (546017781)\n-190B97 Compressed Size       00000524 (1316)\n-190B9B Uncompressed Size     00000524 (1316)\n-190B9F Filename Length       0053 (83)\n-190BA1 Extra Length          0009 (9)\n-190BA3 Comment Length        0000 (0)\n-190BA5 Disk Start            0000 (0)\n-190BA7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190BA9 Ext File Attributes   00000000 (0)\n-190BAD Local Header Offset   0005E5E9 (386537)\n-190BB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190BB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190C04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190C06   Length              0005 (5)\n-190C08   Flags               01 (1) 'Modification'\n-190C09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190C0D CENTRAL HEADER #100   02014B50 (33639248)\n-190C11 Created Zip Spec      14 (20) '2.0'\n-190C12 Created OS            00 (0) 'MS-DOS'\n-190C13 Extract Zip Spec      14 (20) '2.0'\n-190C14 Extract OS            00 (0) 'MS-DOS'\n-190C15 General Purpose Flag  0000 (0)\n-190C17 Compression Method    0000 (0) 'Stored'\n-190C19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190C1D CRC                   00000000 (0)\n-190C21 Compressed Size       00000000 (0)\n-190C25 Uncompressed Size     00000000 (0)\n-190C29 Filename Length       0034 (52)\n-190C2B Extra Length          0009 (9)\n-190C2D Comment Length        0000 (0)\n-190C2F Disk Start            0000 (0)\n-190C31 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190C33 Ext File Attributes   00000000 (0)\n-190C37 Local Header Offset   0005EB97 (387991)\n-190C3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190C3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190C6F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190C71   Length              0005 (5)\n-190C73   Flags               01 (1) 'Modification'\n-190C74   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190C78 CENTRAL HEADER #101   02014B50 (33639248)\n-190C7C Created Zip Spec      14 (20) '2.0'\n-190C7D Created OS            00 (0) 'MS-DOS'\n-190C7E Extract Zip Spec      14 (20) '2.0'\n-190C7F Extract OS            00 (0) 'MS-DOS'\n-190C80 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190C82 Compression Method    0000 (0) 'Stored'\n-190C84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190C88 CRC                   C03FB50A (3225400586)\n-190C8C Compressed Size       00000F4A (3914)\n-190C90 Uncompressed Size     00000F4A (3914)\n-190C94 Filename Length       0056 (86)\n-190C96 Extra Length          0009 (9)\n-190C98 Comment Length        0000 (0)\n-190C9A Disk Start            0000 (0)\n-190C9C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190C9E Ext File Attributes   00000000 (0)\n-190CA2 Local Header Offset   0005EBF2 (388082)\n-190CA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190CA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190CFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190CFE   Length              0005 (5)\n-190D00   Flags               01 (1) 'Modification'\n-190D01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190D05 CENTRAL HEADER #102   02014B50 (33639248)\n-190D09 Created Zip Spec      14 (20) '2.0'\n-190D0A Created OS            00 (0) 'MS-DOS'\n-190D0B Extract Zip Spec      14 (20) '2.0'\n-190D0C Extract OS            00 (0) 'MS-DOS'\n-190D0D General Purpose Flag  0000 (0)\n-190D0F Compression Method    0000 (0) 'Stored'\n-190D11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190D15 CRC                   00000000 (0)\n-190D19 Compressed Size       00000000 (0)\n-190D1D Uncompressed Size     00000000 (0)\n-190D21 Filename Length       0022 (34)\n-190D23 Extra Length          0009 (9)\n-190D25 Comment Length        0000 (0)\n-190D27 Disk Start            0000 (0)\n-190D29 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190D2B Ext File Attributes   00000000 (0)\n-190D2F Local Header Offset   0005FBC9 (392137)\n-190D33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190D33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190D55 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190D57   Length              0005 (5)\n-190D59   Flags               01 (1) 'Modification'\n-190D5A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190D5E CENTRAL HEADER #103   02014B50 (33639248)\n-190D62 Created Zip Spec      14 (20) '2.0'\n-190D63 Created OS            00 (0) 'MS-DOS'\n-190D64 Extract Zip Spec      14 (20) '2.0'\n-190D65 Extract OS            00 (0) 'MS-DOS'\n-190D66 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190D68 Compression Method    0000 (0) 'Stored'\n-190D6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190D6E CRC                   2CFFA2CA (754950858)\n-190D72 Compressed Size       00002810 (10256)\n-190D76 Uncompressed Size     00002810 (10256)\n-190D7A Filename Length       0036 (54)\n-190D7C Extra Length          0009 (9)\n-190D7E Comment Length        0000 (0)\n-190D80 Disk Start            0000 (0)\n-190D82 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190D84 Ext File Attributes   00000000 (0)\n-190D88 Local Header Offset   0005FC12 (392210)\n-190D8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190D8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190DC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190DC4   Length              0005 (5)\n-190DC6   Flags               01 (1) 'Modification'\n-190DC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190DCB CENTRAL HEADER #104   02014B50 (33639248)\n-190DCF Created Zip Spec      14 (20) '2.0'\n-190DD0 Created OS            00 (0) 'MS-DOS'\n-190DD1 Extract Zip Spec      14 (20) '2.0'\n-190DD2 Extract OS            00 (0) 'MS-DOS'\n-190DD3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190DD5 Compression Method    0000 (0) 'Stored'\n-190DD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190DDB CRC                   A6E18129 (2799796521)\n-190DDF Compressed Size       000003BF (959)\n-190DE3 Uncompressed Size     000003BF (959)\n-190DE7 Filename Length       0036 (54)\n-190DE9 Extra Length          0009 (9)\n-190DEB Comment Length        0000 (0)\n-190DED Disk Start            0000 (0)\n-190DEF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190DF1 Ext File Attributes   00000000 (0)\n-190DF5 Local Header Offset   0006248F (402575)\n-190DF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190DF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190E2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190E31   Length              0005 (5)\n-190E33   Flags               01 (1) 'Modification'\n-190E34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190E38 CENTRAL HEADER #105   02014B50 (33639248)\n-190E3C Created Zip Spec      14 (20) '2.0'\n-190E3D Created OS            00 (0) 'MS-DOS'\n-190E3E Extract Zip Spec      14 (20) '2.0'\n-190E3F Extract OS            00 (0) 'MS-DOS'\n-190E40 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190E42 Compression Method    0000 (0) 'Stored'\n-190E44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190E48 CRC                   0D4F07B4 (223283124)\n-190E4C Compressed Size       0000042F (1071)\n-190E50 Uncompressed Size     0000042F (1071)\n-190E54 Filename Length       0033 (51)\n-190E56 Extra Length          0009 (9)\n-190E58 Comment Length        0000 (0)\n-190E5A Disk Start            0000 (0)\n-190E5C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190E5E Ext File Attributes   00000000 (0)\n-190E62 Local Header Offset   000628BB (403643)\n-190E66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190E66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190E99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190E9B   Length              0005 (5)\n-190E9D   Flags               01 (1) 'Modification'\n-190E9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190EA2 CENTRAL HEADER #106   02014B50 (33639248)\n-190EA6 Created Zip Spec      14 (20) '2.0'\n-190EA7 Created OS            00 (0) 'MS-DOS'\n-190EA8 Extract Zip Spec      14 (20) '2.0'\n-190EA9 Extract OS            00 (0) 'MS-DOS'\n-190EAA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190EAC Compression Method    0000 (0) 'Stored'\n-190EAE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190EB2 CRC                   E90F01CB (3910074827)\n-190EB6 Compressed Size       00000D8D (3469)\n-190EBA Uncompressed Size     00000D8D (3469)\n-190EBE Filename Length       0038 (56)\n-190EC0 Extra Length          0009 (9)\n-190EC2 Comment Length        0000 (0)\n-190EC4 Disk Start            0000 (0)\n-190EC6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190EC8 Ext File Attributes   00000000 (0)\n-190ECC Local Header Offset   00062D54 (404820)\n-190ED0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190ED0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190F08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190F0A   Length              0005 (5)\n-190F0C   Flags               01 (1) 'Modification'\n-190F0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190F11 CENTRAL HEADER #107   02014B50 (33639248)\n-190F15 Created Zip Spec      14 (20) '2.0'\n-190F16 Created OS            00 (0) 'MS-DOS'\n-190F17 Extract Zip Spec      14 (20) '2.0'\n-190F18 Extract OS            00 (0) 'MS-DOS'\n-190F19 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190F1B Compression Method    0000 (0) 'Stored'\n-190F1D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190F21 CRC                   1B8CE743 (462219075)\n-190F25 Compressed Size       000003B6 (950)\n-190F29 Uncompressed Size     000003B6 (950)\n-190F2D Filename Length       0038 (56)\n-190F2F Extra Length          0009 (9)\n-190F31 Comment Length        0000 (0)\n-190F33 Disk Start            0000 (0)\n-190F35 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190F37 Ext File Attributes   00000000 (0)\n-190F3B Local Header Offset   00063B50 (408400)\n-190F3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190F3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190F77 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190F79   Length              0005 (5)\n-190F7B   Flags               01 (1) 'Modification'\n-190F7C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190F80 CENTRAL HEADER #108   02014B50 (33639248)\n-190F84 Created Zip Spec      14 (20) '2.0'\n-190F85 Created OS            00 (0) 'MS-DOS'\n-190F86 Extract Zip Spec      14 (20) '2.0'\n-190F87 Extract OS            00 (0) 'MS-DOS'\n-190F88 General Purpose Flag  0000 (0)\n-190F8A Compression Method    0000 (0) 'Stored'\n-190F8C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190F90 CRC                   00000000 (0)\n-190F94 Compressed Size       00000000 (0)\n-190F98 Uncompressed Size     00000000 (0)\n-190F9C Filename Length       0020 (32)\n-190F9E Extra Length          0009 (9)\n-190FA0 Comment Length        0000 (0)\n-190FA2 Disk Start            0000 (0)\n-190FA4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190FA6 Ext File Attributes   00000000 (0)\n-190FAA Local Header Offset   00063F75 (409461)\n-190FAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x190FAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-190FCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-190FD0   Length              0005 (5)\n-190FD2   Flags               01 (1) 'Modification'\n-190FD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-190FD7 CENTRAL HEADER #109   02014B50 (33639248)\n-190FDB Created Zip Spec      14 (20) '2.0'\n-190FDC Created OS            00 (0) 'MS-DOS'\n-190FDD Extract Zip Spec      14 (20) '2.0'\n-190FDE Extract OS            00 (0) 'MS-DOS'\n-190FDF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-190FE1 Compression Method    0000 (0) 'Stored'\n-190FE3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-190FE7 CRC                   94BF4E7B (2495565435)\n-190FEB Compressed Size       000003B5 (949)\n-190FEF Uncompressed Size     000003B5 (949)\n-190FF3 Filename Length       0031 (49)\n-190FF5 Extra Length          0009 (9)\n-190FF7 Comment Length        0000 (0)\n-190FF9 Disk Start            0000 (0)\n-190FFB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-190FFD Ext File Attributes   00000000 (0)\n-191001 Local Header Offset   00063FBC (409532)\n-191005 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191005: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191036 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191038   Length              0005 (5)\n-19103A   Flags               01 (1) 'Modification'\n-19103B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19103F CENTRAL HEADER #110   02014B50 (33639248)\n-191043 Created Zip Spec      14 (20) '2.0'\n-191044 Created OS            00 (0) 'MS-DOS'\n-191045 Extract Zip Spec      14 (20) '2.0'\n-191046 Extract OS            00 (0) 'MS-DOS'\n-191047 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191049 Compression Method    0000 (0) 'Stored'\n-19104B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19104F CRC                   01244711 (19154705)\n-191053 Compressed Size       000005BD (1469)\n-191057 Uncompressed Size     000005BD (1469)\n-19105B Filename Length       002E (46)\n-19105D Extra Length          0009 (9)\n-19105F Comment Length        0000 (0)\n-191061 Disk Start            0000 (0)\n-191063 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191065 Ext File Attributes   00000000 (0)\n-191069 Local Header Offset   000643D9 (410585)\n-19106D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19106D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19109B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19109D   Length              0005 (5)\n-19109F   Flags               01 (1) 'Modification'\n-1910A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1910A4 CENTRAL HEADER #111   02014B50 (33639248)\n-1910A8 Created Zip Spec      14 (20) '2.0'\n-1910A9 Created OS            00 (0) 'MS-DOS'\n-1910AA Extract Zip Spec      14 (20) '2.0'\n-1910AB Extract OS            00 (0) 'MS-DOS'\n-1910AC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1910AE Compression Method    0000 (0) 'Stored'\n-1910B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1910B4 CRC                   8B9FA779 (2342496121)\n-1910B8 Compressed Size       0000047A (1146)\n-1910BC Uncompressed Size     0000047A (1146)\n-1910C0 Filename Length       0035 (53)\n-1910C2 Extra Length          0009 (9)\n-1910C4 Comment Length        0000 (0)\n-1910C6 Disk Start            0000 (0)\n-1910C8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1910CA Ext File Attributes   00000000 (0)\n-1910CE Local Header Offset   000649FB (412155)\n-1910D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1910D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191107 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191109   Length              0005 (5)\n-19110B   Flags               01 (1) 'Modification'\n-19110C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191110 CENTRAL HEADER #112   02014B50 (33639248)\n-191114 Created Zip Spec      14 (20) '2.0'\n-191115 Created OS            00 (0) 'MS-DOS'\n-191116 Extract Zip Spec      14 (20) '2.0'\n-191117 Extract OS            00 (0) 'MS-DOS'\n-191118 General Purpose Flag  0000 (0)\n-19111A Compression Method    0000 (0) 'Stored'\n-19111C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191120 CRC                   00000000 (0)\n-191124 Compressed Size       00000000 (0)\n-191128 Uncompressed Size     00000000 (0)\n-19112C Filename Length       0020 (32)\n-19112E Extra Length          0009 (9)\n-191130 Comment Length        0000 (0)\n-191132 Disk Start            0000 (0)\n-191134 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191136 Ext File Attributes   00000000 (0)\n-19113A Local Header Offset   00064EE1 (413409)\n-19113E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19113E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19115E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191160   Length              0005 (5)\n-191162   Flags               01 (1) 'Modification'\n-191163   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191167 CENTRAL HEADER #113   02014B50 (33639248)\n-19116B Created Zip Spec      14 (20) '2.0'\n-19116C Created OS            00 (0) 'MS-DOS'\n-19116D Extract Zip Spec      14 (20) '2.0'\n-19116E Extract OS            00 (0) 'MS-DOS'\n-19116F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191171 Compression Method    0000 (0) 'Stored'\n-191173 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191177 CRC                   6A25F272 (1780871794)\n-19117B Compressed Size       00000E60 (3680)\n-19117F Uncompressed Size     00000E60 (3680)\n-191183 Filename Length       002E (46)\n-191185 Extra Length          0009 (9)\n-191187 Comment Length        0000 (0)\n-191189 Disk Start            0000 (0)\n-19118B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19118D Ext File Attributes   00000000 (0)\n-191191 Local Header Offset   00064F28 (413480)\n-191195 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191195: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1911C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1911C5   Length              0005 (5)\n-1911C7   Flags               01 (1) 'Modification'\n-1911C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1911CC CENTRAL HEADER #114   02014B50 (33639248)\n-1911D0 Created Zip Spec      14 (20) '2.0'\n-1911D1 Created OS            00 (0) 'MS-DOS'\n-1911D2 Extract Zip Spec      14 (20) '2.0'\n-1911D3 Extract OS            00 (0) 'MS-DOS'\n-1911D4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1911D6 Compression Method    0000 (0) 'Stored'\n-1911D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1911DC CRC                   94774B8E (2490846094)\n-1911E0 Compressed Size       00000411 (1041)\n-1911E4 Uncompressed Size     00000411 (1041)\n-1911E8 Filename Length       0034 (52)\n-1911EA Extra Length          0009 (9)\n-1911EC Comment Length        0000 (0)\n-1911EE Disk Start            0000 (0)\n-1911F0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1911F2 Ext File Attributes   00000000 (0)\n-1911F6 Local Header Offset   00065DED (417261)\n-1911FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1911FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19122E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191230   Length              0005 (5)\n-191232   Flags               01 (1) 'Modification'\n-191233   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191237 CENTRAL HEADER #115   02014B50 (33639248)\n-19123B Created Zip Spec      14 (20) '2.0'\n-19123C Created OS            00 (0) 'MS-DOS'\n-19123D Extract Zip Spec      14 (20) '2.0'\n-19123E Extract OS            00 (0) 'MS-DOS'\n-19123F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191241 Compression Method    0000 (0) 'Stored'\n-191243 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191247 CRC                   A95D9412 (2841482258)\n-19124B Compressed Size       00000532 (1330)\n-19124F Uncompressed Size     00000532 (1330)\n-191253 Filename Length       003D (61)\n-191255 Extra Length          0009 (9)\n-191257 Comment Length        0000 (0)\n-191259 Disk Start            0000 (0)\n-19125B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19125D Ext File Attributes   00000000 (0)\n-191261 Local Header Offset   00066269 (418409)\n-191265 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191265: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1912A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1912A4   Length              0005 (5)\n-1912A6   Flags               01 (1) 'Modification'\n-1912A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1912AB CENTRAL HEADER #116   02014B50 (33639248)\n-1912AF Created Zip Spec      14 (20) '2.0'\n-1912B0 Created OS            00 (0) 'MS-DOS'\n-1912B1 Extract Zip Spec      14 (20) '2.0'\n-1912B2 Extract OS            00 (0) 'MS-DOS'\n-1912B3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1912B5 Compression Method    0000 (0) 'Stored'\n-1912B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1912BB CRC                   578BE304 (1468785412)\n-1912BF Compressed Size       00000514 (1300)\n-1912C3 Uncompressed Size     00000514 (1300)\n-1912C7 Filename Length       003F (63)\n-1912C9 Extra Length          0009 (9)\n-1912CB Comment Length        0000 (0)\n-1912CD Disk Start            0000 (0)\n-1912CF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1912D1 Ext File Attributes   00000000 (0)\n-1912D5 Local Header Offset   0006680F (419855)\n-1912D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1912D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191318 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19131A   Length              0005 (5)\n-19131C   Flags               01 (1) 'Modification'\n-19131D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191321 CENTRAL HEADER #117   02014B50 (33639248)\n-191325 Created Zip Spec      14 (20) '2.0'\n-191326 Created OS            00 (0) 'MS-DOS'\n-191327 Extract Zip Spec      14 (20) '2.0'\n-191328 Extract OS            00 (0) 'MS-DOS'\n-191329 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19132B Compression Method    0000 (0) 'Stored'\n-19132D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191331 CRC                   8AE0BB27 (2329983783)\n-191335 Compressed Size       000005DA (1498)\n-191339 Uncompressed Size     000005DA (1498)\n-19133D Filename Length       003F (63)\n-19133F Extra Length          0009 (9)\n-191341 Comment Length        0000 (0)\n-191343 Disk Start            0000 (0)\n-191345 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191347 Ext File Attributes   00000000 (0)\n-19134B Local Header Offset   00066D99 (421273)\n-19134F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19134F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19138E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191390   Length              0005 (5)\n-191392   Flags               01 (1) 'Modification'\n-191393   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191397 CENTRAL HEADER #118   02014B50 (33639248)\n-19139B Created Zip Spec      14 (20) '2.0'\n-19139C Created OS            00 (0) 'MS-DOS'\n-19139D Extract Zip Spec      14 (20) '2.0'\n-19139E Extract OS            00 (0) 'MS-DOS'\n-19139F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1913A1 Compression Method    0000 (0) 'Stored'\n-1913A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1913A7 CRC                   D8EB7635 (3639309877)\n-1913AB Compressed Size       0000052E (1326)\n-1913AF Uncompressed Size     0000052E (1326)\n-1913B3 Filename Length       003C (60)\n-1913B5 Extra Length          0009 (9)\n-1913B7 Comment Length        0000 (0)\n-1913B9 Disk Start            0000 (0)\n-1913BB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1913BD Ext File Attributes   00000000 (0)\n-1913C1 Local Header Offset   000673E9 (422889)\n-1913C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1913C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191401 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191403   Length              0005 (5)\n-191405   Flags               01 (1) 'Modification'\n-191406   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19140A CENTRAL HEADER #119   02014B50 (33639248)\n-19140E Created Zip Spec      14 (20) '2.0'\n-19140F Created OS            00 (0) 'MS-DOS'\n-191410 Extract Zip Spec      14 (20) '2.0'\n-191411 Extract OS            00 (0) 'MS-DOS'\n-191412 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191414 Compression Method    0000 (0) 'Stored'\n-191416 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19141A CRC                   7C7DD03D (2088620093)\n-19141E Compressed Size       00000528 (1320)\n-191422 Uncompressed Size     00000528 (1320)\n-191426 Filename Length       003B (59)\n-191428 Extra Length          0009 (9)\n-19142A Comment Length        0000 (0)\n-19142C Disk Start            0000 (0)\n-19142E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191430 Ext File Attributes   00000000 (0)\n-191434 Local Header Offset   0006798A (424330)\n-191438 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191438: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191473 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191475   Length              0005 (5)\n-191477   Flags               01 (1) 'Modification'\n-191478   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19147C CENTRAL HEADER #120   02014B50 (33639248)\n-191480 Created Zip Spec      14 (20) '2.0'\n-191481 Created OS            00 (0) 'MS-DOS'\n-191482 Extract Zip Spec      14 (20) '2.0'\n-191483 Extract OS            00 (0) 'MS-DOS'\n-191484 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191486 Compression Method    0000 (0) 'Stored'\n-191488 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19148C CRC                   39AACB0F (967494415)\n-191490 Compressed Size       0000052E (1326)\n-191494 Uncompressed Size     0000052E (1326)\n-191498 Filename Length       003D (61)\n-19149A Extra Length          0009 (9)\n-19149C Comment Length        0000 (0)\n-19149E Disk Start            0000 (0)\n-1914A0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1914A2 Ext File Attributes   00000000 (0)\n-1914A6 Local Header Offset   00067F24 (425764)\n-1914AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1914AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1914E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1914E9   Length              0005 (5)\n-1914EB   Flags               01 (1) 'Modification'\n-1914EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1914F0 CENTRAL HEADER #121   02014B50 (33639248)\n-1914F4 Created Zip Spec      14 (20) '2.0'\n-1914F5 Created OS            00 (0) 'MS-DOS'\n-1914F6 Extract Zip Spec      14 (20) '2.0'\n-1914F7 Extract OS            00 (0) 'MS-DOS'\n-1914F8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1914FA Compression Method    0000 (0) 'Stored'\n-1914FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191500 CRC                   5BF59138 (1542820152)\n-191504 Compressed Size       00000524 (1316)\n-191508 Uncompressed Size     00000524 (1316)\n-19150C Filename Length       003A (58)\n-19150E Extra Length          0009 (9)\n-191510 Comment Length        0000 (0)\n-191512 Disk Start            0000 (0)\n-191514 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191516 Ext File Attributes   00000000 (0)\n-19151A Local Header Offset   000684C6 (427206)\n-19151E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19151E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191558 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19155A   Length              0005 (5)\n-19155C   Flags               01 (1) 'Modification'\n-19155D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191561 CENTRAL HEADER #122   02014B50 (33639248)\n-191565 Created Zip Spec      14 (20) '2.0'\n-191566 Created OS            00 (0) 'MS-DOS'\n-191567 Extract Zip Spec      14 (20) '2.0'\n-191568 Extract OS            00 (0) 'MS-DOS'\n-191569 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19156B Compression Method    0000 (0) 'Stored'\n-19156D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191571 CRC                   9AA4AEC4 (2594483908)\n-191575 Compressed Size       000004F3 (1267)\n-191579 Uncompressed Size     000004F3 (1267)\n-19157D Filename Length       003E (62)\n-19157F Extra Length          0009 (9)\n-191581 Comment Length        0000 (0)\n-191583 Disk Start            0000 (0)\n-191585 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191587 Ext File Attributes   00000000 (0)\n-19158B Local Header Offset   00068A5B (428635)\n-19158F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19158F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1915CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1915CF   Length              0005 (5)\n-1915D1   Flags               01 (1) 'Modification'\n-1915D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1915D6 CENTRAL HEADER #123   02014B50 (33639248)\n-1915DA Created Zip Spec      14 (20) '2.0'\n-1915DB Created OS            00 (0) 'MS-DOS'\n-1915DC Extract Zip Spec      14 (20) '2.0'\n-1915DD Extract OS            00 (0) 'MS-DOS'\n-1915DE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1915E0 Compression Method    0000 (0) 'Stored'\n-1915E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1915E6 CRC                   FD88956D (4253586797)\n-1915EA Compressed Size       00000529 (1321)\n-1915EE Uncompressed Size     00000529 (1321)\n-1915F2 Filename Length       003B (59)\n-1915F4 Extra Length          0009 (9)\n-1915F6 Comment Length        0000 (0)\n-1915F8 Disk Start            0000 (0)\n-1915FA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1915FC Ext File Attributes   00000000 (0)\n-191600 Local Header Offset   00068FC3 (430019)\n-191604 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191604: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19163F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191641   Length              0005 (5)\n-191643   Flags               01 (1) 'Modification'\n-191644   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191648 CENTRAL HEADER #124   02014B50 (33639248)\n-19164C Created Zip Spec      14 (20) '2.0'\n-19164D Created OS            00 (0) 'MS-DOS'\n-19164E Extract Zip Spec      14 (20) '2.0'\n-19164F Extract OS            00 (0) 'MS-DOS'\n-191650 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191652 Compression Method    0000 (0) 'Stored'\n-191654 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191658 CRC                   88F80863 (2297956451)\n-19165C Compressed Size       00000452 (1106)\n-191660 Uncompressed Size     00000452 (1106)\n-191664 Filename Length       003C (60)\n-191666 Extra Length          0009 (9)\n-191668 Comment Length        0000 (0)\n-19166A Disk Start            0000 (0)\n-19166C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19166E Ext File Attributes   00000000 (0)\n-191672 Local Header Offset   0006955E (431454)\n-191676 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191676: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1916B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1916B4   Length              0005 (5)\n-1916B6   Flags               01 (1) 'Modification'\n-1916B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1916BB CENTRAL HEADER #125   02014B50 (33639248)\n-1916BF Created Zip Spec      14 (20) '2.0'\n-1916C0 Created OS            00 (0) 'MS-DOS'\n-1916C1 Extract Zip Spec      14 (20) '2.0'\n-1916C2 Extract OS            00 (0) 'MS-DOS'\n-1916C3 General Purpose Flag  0000 (0)\n-1916C5 Compression Method    0000 (0) 'Stored'\n-1916C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1916CB CRC                   00000000 (0)\n-1916CF Compressed Size       00000000 (0)\n-1916D3 Uncompressed Size     00000000 (0)\n-1916D7 Filename Length       0029 (41)\n-1916D9 Extra Length          0009 (9)\n-1916DB Comment Length        0000 (0)\n-1916DD Disk Start            0000 (0)\n-1916DF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1916E1 Ext File Attributes   00000000 (0)\n-1916E5 Local Header Offset   00069A23 (432675)\n-1916E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1916E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191712 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191714   Length              0005 (5)\n-191716   Flags               01 (1) 'Modification'\n-191717   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19171B CENTRAL HEADER #126   02014B50 (33639248)\n-19171F Created Zip Spec      14 (20) '2.0'\n-191720 Created OS            00 (0) 'MS-DOS'\n-191721 Extract Zip Spec      14 (20) '2.0'\n-191722 Extract OS            00 (0) 'MS-DOS'\n-191723 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191725 Compression Method    0000 (0) 'Stored'\n-191727 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19172B CRC                   56E92431 (1458119729)\n-19172F Compressed Size       00000D31 (3377)\n-191733 Uncompressed Size     00000D31 (3377)\n-191737 Filename Length       0041 (65)\n-191739 Extra Length          0009 (9)\n-19173B Comment Length        0000 (0)\n-19173D Disk Start            0000 (0)\n-19173F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191741 Ext File Attributes   00000000 (0)\n-191745 Local Header Offset   00069A73 (432755)\n-191749 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191749: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19178A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19178C   Length              0005 (5)\n-19178E   Flags               01 (1) 'Modification'\n-19178F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191793 CENTRAL HEADER #127   02014B50 (33639248)\n-191797 Created Zip Spec      14 (20) '2.0'\n-191798 Created OS            00 (0) 'MS-DOS'\n-191799 Extract Zip Spec      14 (20) '2.0'\n-19179A Extract OS            00 (0) 'MS-DOS'\n-19179B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19179D Compression Method    0000 (0) 'Stored'\n-19179F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1917A3 CRC                   54A7512C (1420251436)\n-1917A7 Compressed Size       00000774 (1908)\n-1917AB Uncompressed Size     00000774 (1908)\n-1917AF Filename Length       0044 (68)\n-1917B1 Extra Length          0009 (9)\n-1917B3 Comment Length        0000 (0)\n-1917B5 Disk Start            0000 (0)\n-1917B7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1917B9 Ext File Attributes   00000000 (0)\n-1917BD Local Header Offset   0006A81C (436252)\n-1917C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1917C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191805 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191807   Length              0005 (5)\n-191809   Flags               01 (1) 'Modification'\n-19180A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19180E CENTRAL HEADER #128   02014B50 (33639248)\n-191812 Created Zip Spec      14 (20) '2.0'\n-191813 Created OS            00 (0) 'MS-DOS'\n-191814 Extract Zip Spec      14 (20) '2.0'\n-191815 Extract OS            00 (0) 'MS-DOS'\n-191816 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191818 Compression Method    0000 (0) 'Stored'\n-19181A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19181E CRC                   44B63BF0 (1152793584)\n-191822 Compressed Size       0000050F (1295)\n-191826 Uncompressed Size     0000050F (1295)\n-19182A Filename Length       004C (76)\n-19182C Extra Length          0009 (9)\n-19182E Comment Length        0000 (0)\n-191830 Disk Start            0000 (0)\n-191832 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191834 Ext File Attributes   00000000 (0)\n-191838 Local Header Offset   0006B00B (438283)\n-19183C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19183C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191888 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19188A   Length              0005 (5)\n-19188C   Flags               01 (1) 'Modification'\n-19188D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191891 CENTRAL HEADER #129   02014B50 (33639248)\n-191895 Created Zip Spec      14 (20) '2.0'\n-191896 Created OS            00 (0) 'MS-DOS'\n-191897 Extract Zip Spec      14 (20) '2.0'\n-191898 Extract OS            00 (0) 'MS-DOS'\n-191899 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19189B Compression Method    0000 (0) 'Stored'\n-19189D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1918A1 CRC                   6FDF7D92 (1876917650)\n-1918A5 Compressed Size       00000538 (1336)\n-1918A9 Uncompressed Size     00000538 (1336)\n-1918AD Filename Length       004C (76)\n-1918AF Extra Length          0009 (9)\n-1918B1 Comment Length        0000 (0)\n-1918B3 Disk Start            0000 (0)\n-1918B5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1918B7 Ext File Attributes   00000000 (0)\n-1918BB Local Header Offset   0006B59D (439709)\n-1918BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1918BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19190B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19190D   Length              0005 (5)\n-19190F   Flags               01 (1) 'Modification'\n-191910   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191914 CENTRAL HEADER #130   02014B50 (33639248)\n-191918 Created Zip Spec      14 (20) '2.0'\n-191919 Created OS            00 (0) 'MS-DOS'\n-19191A Extract Zip Spec      14 (20) '2.0'\n-19191B Extract OS            00 (0) 'MS-DOS'\n-19191C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19191E Compression Method    0000 (0) 'Stored'\n-191920 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191924 CRC                   E28B1205 (3800764933)\n-191928 Compressed Size       000004D6 (1238)\n-19192C Uncompressed Size     000004D6 (1238)\n-191930 Filename Length       0049 (73)\n-191932 Extra Length          0009 (9)\n-191934 Comment Length        0000 (0)\n-191936 Disk Start            0000 (0)\n-191938 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19193A Ext File Attributes   00000000 (0)\n-19193E Local Header Offset   0006BB58 (441176)\n-191942 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191942: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19198B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19198D   Length              0005 (5)\n-19198F   Flags               01 (1) 'Modification'\n-191990   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191994 CENTRAL HEADER #131   02014B50 (33639248)\n-191998 Created Zip Spec      14 (20) '2.0'\n-191999 Created OS            00 (0) 'MS-DOS'\n-19199A Extract Zip Spec      14 (20) '2.0'\n-19199B Extract OS            00 (0) 'MS-DOS'\n-19199C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19199E Compression Method    0000 (0) 'Stored'\n-1919A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1919A4 CRC                   8C9A6BCF (2358930383)\n-1919A8 Compressed Size       000004BF (1215)\n-1919AC Uncompressed Size     000004BF (1215)\n-1919B0 Filename Length       0044 (68)\n-1919B2 Extra Length          0009 (9)\n-1919B4 Comment Length        0000 (0)\n-1919B6 Disk Start            0000 (0)\n-1919B8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1919BA Ext File Attributes   00000000 (0)\n-1919BE Local Header Offset   0006C0AE (442542)\n-1919C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1919C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191A06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191A08   Length              0005 (5)\n-191A0A   Flags               01 (1) 'Modification'\n-191A0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191A0F CENTRAL HEADER #132   02014B50 (33639248)\n-191A13 Created Zip Spec      14 (20) '2.0'\n-191A14 Created OS            00 (0) 'MS-DOS'\n-191A15 Extract Zip Spec      14 (20) '2.0'\n-191A16 Extract OS            00 (0) 'MS-DOS'\n-191A17 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191A19 Compression Method    0000 (0) 'Stored'\n-191A1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191A1F CRC                   17228680 (388138624)\n-191A23 Compressed Size       00000C22 (3106)\n-191A27 Uncompressed Size     00000C22 (3106)\n-191A2B Filename Length       0047 (71)\n-191A2D Extra Length          0009 (9)\n-191A2F Comment Length        0000 (0)\n-191A31 Disk Start            0000 (0)\n-191A33 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191A35 Ext File Attributes   00000000 (0)\n-191A39 Local Header Offset   0006C5E8 (443880)\n-191A3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191A3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191A84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191A86   Length              0005 (5)\n-191A88   Flags               01 (1) 'Modification'\n-191A89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191A8D CENTRAL HEADER #133   02014B50 (33639248)\n-191A91 Created Zip Spec      14 (20) '2.0'\n-191A92 Created OS            00 (0) 'MS-DOS'\n-191A93 Extract Zip Spec      14 (20) '2.0'\n-191A94 Extract OS            00 (0) 'MS-DOS'\n-191A95 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191A97 Compression Method    0000 (0) 'Stored'\n-191A99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191A9D CRC                   90DCE257 (2430394967)\n-191AA1 Compressed Size       000004B8 (1208)\n-191AA5 Uncompressed Size     000004B8 (1208)\n-191AA9 Filename Length       0043 (67)\n-191AAB Extra Length          0009 (9)\n-191AAD Comment Length        0000 (0)\n-191AAF Disk Start            0000 (0)\n-191AB1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191AB3 Ext File Attributes   00000000 (0)\n-191AB7 Local Header Offset   0006D288 (447112)\n-191ABB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191ABB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191AFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191B00   Length              0005 (5)\n-191B02   Flags               01 (1) 'Modification'\n-191B03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191B07 CENTRAL HEADER #134   02014B50 (33639248)\n-191B0B Created Zip Spec      14 (20) '2.0'\n-191B0C Created OS            00 (0) 'MS-DOS'\n-191B0D Extract Zip Spec      14 (20) '2.0'\n-191B0E Extract OS            00 (0) 'MS-DOS'\n-191B0F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191B11 Compression Method    0000 (0) 'Stored'\n-191B13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191B17 CRC                   092E21B3 (154018227)\n-191B1B Compressed Size       00000873 (2163)\n-191B1F Uncompressed Size     00000873 (2163)\n-191B23 Filename Length       0049 (73)\n-191B25 Extra Length          0009 (9)\n-191B27 Comment Length        0000 (0)\n-191B29 Disk Start            0000 (0)\n-191B2B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191B2D Ext File Attributes   00000000 (0)\n-191B31 Local Header Offset   0006D7BA (448442)\n-191B35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191B35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191B7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191B80   Length              0005 (5)\n-191B82   Flags               01 (1) 'Modification'\n-191B83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191B87 CENTRAL HEADER #135   02014B50 (33639248)\n-191B8B Created Zip Spec      14 (20) '2.0'\n-191B8C Created OS            00 (0) 'MS-DOS'\n-191B8D Extract Zip Spec      14 (20) '2.0'\n-191B8E Extract OS            00 (0) 'MS-DOS'\n-191B8F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191B91 Compression Method    0000 (0) 'Stored'\n-191B93 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191B97 CRC                   D50997CD (3574175693)\n-191B9B Compressed Size       000004F1 (1265)\n-191B9F Uncompressed Size     000004F1 (1265)\n-191BA3 Filename Length       004B (75)\n-191BA5 Extra Length          0009 (9)\n-191BA7 Comment Length        0000 (0)\n-191BA9 Disk Start            0000 (0)\n-191BAB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191BAD Ext File Attributes   00000000 (0)\n-191BB1 Local Header Offset   0006E0AD (450733)\n-191BB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191BB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191C00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191C02   Length              0005 (5)\n-191C04   Flags               01 (1) 'Modification'\n-191C05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191C09 CENTRAL HEADER #136   02014B50 (33639248)\n-191C0D Created Zip Spec      14 (20) '2.0'\n-191C0E Created OS            00 (0) 'MS-DOS'\n-191C0F Extract Zip Spec      14 (20) '2.0'\n-191C10 Extract OS            00 (0) 'MS-DOS'\n-191C11 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191C13 Compression Method    0000 (0) 'Stored'\n-191C15 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191C19 CRC                   1389D7CB (327800779)\n-191C1D Compressed Size       000004D7 (1239)\n-191C21 Uncompressed Size     000004D7 (1239)\n-191C25 Filename Length       0044 (68)\n-191C27 Extra Length          0009 (9)\n-191C29 Comment Length        0000 (0)\n-191C2B Disk Start            0000 (0)\n-191C2D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191C2F Ext File Attributes   00000000 (0)\n-191C33 Local Header Offset   0006E620 (452128)\n-191C37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191C37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191C7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191C7D   Length              0005 (5)\n-191C7F   Flags               01 (1) 'Modification'\n-191C80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191C84 CENTRAL HEADER #137   02014B50 (33639248)\n-191C88 Created Zip Spec      14 (20) '2.0'\n-191C89 Created OS            00 (0) 'MS-DOS'\n-191C8A Extract Zip Spec      14 (20) '2.0'\n-191C8B Extract OS            00 (0) 'MS-DOS'\n-191C8C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191C8E Compression Method    0000 (0) 'Stored'\n-191C90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191C94 CRC                   0204ADF7 (33861111)\n-191C98 Compressed Size       000004AF (1199)\n-191C9C Uncompressed Size     000004AF (1199)\n-191CA0 Filename Length       0042 (66)\n-191CA2 Extra Length          0009 (9)\n-191CA4 Comment Length        0000 (0)\n-191CA6 Disk Start            0000 (0)\n-191CA8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191CAA Ext File Attributes   00000000 (0)\n-191CAE Local Header Offset   0006EB72 (453490)\n-191CB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191CB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191CF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191CF6   Length              0005 (5)\n-191CF8   Flags               01 (1) 'Modification'\n-191CF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191CFD CENTRAL HEADER #138   02014B50 (33639248)\n-191D01 Created Zip Spec      14 (20) '2.0'\n-191D02 Created OS            00 (0) 'MS-DOS'\n-191D03 Extract Zip Spec      14 (20) '2.0'\n-191D04 Extract OS            00 (0) 'MS-DOS'\n-191D05 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191D07 Compression Method    0000 (0) 'Stored'\n-191D09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191D0D CRC                   DE2764C3 (3727123651)\n-191D11 Compressed Size       000004C9 (1225)\n-191D15 Uncompressed Size     000004C9 (1225)\n-191D19 Filename Length       0048 (72)\n-191D1B Extra Length          0009 (9)\n-191D1D Comment Length        0000 (0)\n-191D1F Disk Start            0000 (0)\n-191D21 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191D23 Ext File Attributes   00000000 (0)\n-191D27 Local Header Offset   0006F09A (454810)\n-191D2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191D2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191D73 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191D75   Length              0005 (5)\n-191D77   Flags               01 (1) 'Modification'\n-191D78   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191D7C CENTRAL HEADER #139   02014B50 (33639248)\n-191D80 Created Zip Spec      14 (20) '2.0'\n-191D81 Created OS            00 (0) 'MS-DOS'\n-191D82 Extract Zip Spec      14 (20) '2.0'\n-191D83 Extract OS            00 (0) 'MS-DOS'\n-191D84 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191D86 Compression Method    0000 (0) 'Stored'\n-191D88 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191D8C CRC                   A00FADB6 (2685382070)\n-191D90 Compressed Size       0000050B (1291)\n-191D94 Uncompressed Size     0000050B (1291)\n-191D98 Filename Length       004C (76)\n-191D9A Extra Length          0009 (9)\n-191D9C Comment Length        0000 (0)\n-191D9E Disk Start            0000 (0)\n-191DA0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191DA2 Ext File Attributes   00000000 (0)\n-191DA6 Local Header Offset   0006F5E2 (456162)\n-191DAA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191DAA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191DF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191DF8   Length              0005 (5)\n-191DFA   Flags               01 (1) 'Modification'\n-191DFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191DFF CENTRAL HEADER #140   02014B50 (33639248)\n-191E03 Created Zip Spec      14 (20) '2.0'\n-191E04 Created OS            00 (0) 'MS-DOS'\n-191E05 Extract Zip Spec      14 (20) '2.0'\n-191E06 Extract OS            00 (0) 'MS-DOS'\n-191E07 General Purpose Flag  0000 (0)\n-191E09 Compression Method    0000 (0) 'Stored'\n-191E0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191E0F CRC                   00000000 (0)\n-191E13 Compressed Size       00000000 (0)\n-191E17 Uncompressed Size     00000000 (0)\n-191E1B Filename Length       0022 (34)\n-191E1D Extra Length          0009 (9)\n-191E1F Comment Length        0000 (0)\n-191E21 Disk Start            0000 (0)\n-191E23 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191E25 Ext File Attributes   00000000 (0)\n-191E29 Local Header Offset   0006FB70 (457584)\n-191E2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191E2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191E4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191E51   Length              0005 (5)\n-191E53   Flags               01 (1) 'Modification'\n-191E54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191E58 CENTRAL HEADER #141   02014B50 (33639248)\n-191E5C Created Zip Spec      14 (20) '2.0'\n-191E5D Created OS            00 (0) 'MS-DOS'\n-191E5E Extract Zip Spec      14 (20) '2.0'\n-191E5F Extract OS            00 (0) 'MS-DOS'\n-191E60 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191E62 Compression Method    0000 (0) 'Stored'\n-191E64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191E68 CRC                   9A2D2058 (2586648664)\n-191E6C Compressed Size       00000D7A (3450)\n-191E70 Uncompressed Size     00000D7A (3450)\n-191E74 Filename Length       002F (47)\n-191E76 Extra Length          0009 (9)\n-191E78 Comment Length        0000 (0)\n-191E7A Disk Start            0000 (0)\n-191E7C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191E7E Ext File Attributes   00000000 (0)\n-191E82 Local Header Offset   0006FBB9 (457657)\n-191E86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191E86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191EB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191EB7   Length              0005 (5)\n-191EB9   Flags               01 (1) 'Modification'\n-191EBA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191EBE CENTRAL HEADER #142   02014B50 (33639248)\n-191EC2 Created Zip Spec      14 (20) '2.0'\n-191EC3 Created OS            00 (0) 'MS-DOS'\n-191EC4 Extract Zip Spec      14 (20) '2.0'\n-191EC5 Extract OS            00 (0) 'MS-DOS'\n-191EC6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191EC8 Compression Method    0000 (0) 'Stored'\n-191ECA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191ECE CRC                   5D8BAE4F (1569435215)\n-191ED2 Compressed Size       00000A47 (2631)\n-191ED6 Uncompressed Size     00000A47 (2631)\n-191EDA Filename Length       002F (47)\n-191EDC Extra Length          0009 (9)\n-191EDE Comment Length        0000 (0)\n-191EE0 Disk Start            0000 (0)\n-191EE2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191EE4 Ext File Attributes   00000000 (0)\n-191EE8 Local Header Offset   00070999 (461209)\n-191EEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191EEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191F1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191F1D   Length              0005 (5)\n-191F1F   Flags               01 (1) 'Modification'\n-191F20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191F24 CENTRAL HEADER #143   02014B50 (33639248)\n-191F28 Created Zip Spec      14 (20) '2.0'\n-191F29 Created OS            00 (0) 'MS-DOS'\n-191F2A Extract Zip Spec      14 (20) '2.0'\n-191F2B Extract OS            00 (0) 'MS-DOS'\n-191F2C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191F2E Compression Method    0000 (0) 'Stored'\n-191F30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191F34 CRC                   B148CBF0 (2974338032)\n-191F38 Compressed Size       00003C07 (15367)\n-191F3C Uncompressed Size     00003C07 (15367)\n-191F40 Filename Length       0041 (65)\n-191F42 Extra Length          0009 (9)\n-191F44 Comment Length        0000 (0)\n-191F46 Disk Start            0000 (0)\n-191F48 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191F4A Ext File Attributes   00000000 (0)\n-191F4E Local Header Offset   00071446 (463942)\n-191F52 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191F52: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191F93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-191F95   Length              0005 (5)\n-191F97   Flags               01 (1) 'Modification'\n-191F98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-191F9C CENTRAL HEADER #144   02014B50 (33639248)\n-191FA0 Created Zip Spec      14 (20) '2.0'\n-191FA1 Created OS            00 (0) 'MS-DOS'\n-191FA2 Extract Zip Spec      14 (20) '2.0'\n-191FA3 Extract OS            00 (0) 'MS-DOS'\n-191FA4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-191FA6 Compression Method    0000 (0) 'Stored'\n-191FA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-191FAC CRC                   D1BB774A (3518723914)\n-191FB0 Compressed Size       000004B9 (1209)\n-191FB4 Uncompressed Size     000004B9 (1209)\n-191FB8 Filename Length       0034 (52)\n-191FBA Extra Length          0009 (9)\n-191FBC Comment Length        0000 (0)\n-191FBE Disk Start            0000 (0)\n-191FC0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-191FC2 Ext File Attributes   00000000 (0)\n-191FC6 Local Header Offset   000750C5 (479429)\n-191FCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x191FCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-191FFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192000   Length              0005 (5)\n-192002   Flags               01 (1) 'Modification'\n-192003   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192007 CENTRAL HEADER #145   02014B50 (33639248)\n-19200B Created Zip Spec      14 (20) '2.0'\n-19200C Created OS            00 (0) 'MS-DOS'\n-19200D Extract Zip Spec      14 (20) '2.0'\n-19200E Extract OS            00 (0) 'MS-DOS'\n-19200F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192011 Compression Method    0000 (0) 'Stored'\n-192013 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192017 CRC                   F2DE48ED (4074653933)\n-19201B Compressed Size       0000048D (1165)\n-19201F Uncompressed Size     0000048D (1165)\n-192023 Filename Length       0043 (67)\n-192025 Extra Length          0009 (9)\n-192027 Comment Length        0000 (0)\n-192029 Disk Start            0000 (0)\n-19202B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19202D Ext File Attributes   00000000 (0)\n-192031 Local Header Offset   000755E9 (480745)\n-192035 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192035: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192078 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19207A   Length              0005 (5)\n-19207C   Flags               01 (1) 'Modification'\n-19207D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192081 CENTRAL HEADER #146   02014B50 (33639248)\n-192085 Created Zip Spec      14 (20) '2.0'\n-192086 Created OS            00 (0) 'MS-DOS'\n-192087 Extract Zip Spec      14 (20) '2.0'\n-192088 Extract OS            00 (0) 'MS-DOS'\n-192089 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19208B Compression Method    0000 (0) 'Stored'\n-19208D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192091 CRC                   0662480F (107104271)\n-192095 Compressed Size       000004C4 (1220)\n-192099 Uncompressed Size     000004C4 (1220)\n-19209D Filename Length       003B (59)\n-19209F Extra Length          0009 (9)\n-1920A1 Comment Length        0000 (0)\n-1920A3 Disk Start            0000 (0)\n-1920A5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1920A7 Ext File Attributes   00000000 (0)\n-1920AB Local Header Offset   00075AF0 (482032)\n-1920AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1920AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1920EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1920EC   Length              0005 (5)\n-1920EE   Flags               01 (1) 'Modification'\n-1920EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1920F3 CENTRAL HEADER #147   02014B50 (33639248)\n-1920F7 Created Zip Spec      14 (20) '2.0'\n-1920F8 Created OS            00 (0) 'MS-DOS'\n-1920F9 Extract Zip Spec      14 (20) '2.0'\n-1920FA Extract OS            00 (0) 'MS-DOS'\n-1920FB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1920FD Compression Method    0000 (0) 'Stored'\n-1920FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192103 CRC                   4C849D6C (1283759468)\n-192107 Compressed Size       0000047A (1146)\n-19210B Uncompressed Size     0000047A (1146)\n-19210F Filename Length       0037 (55)\n-192111 Extra Length          0009 (9)\n-192113 Comment Length        0000 (0)\n-192115 Disk Start            0000 (0)\n-192117 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192119 Ext File Attributes   00000000 (0)\n-19211D Local Header Offset   00076026 (483366)\n-192121 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192121: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192158 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19215A   Length              0005 (5)\n-19215C   Flags               01 (1) 'Modification'\n-19215D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192161 CENTRAL HEADER #148   02014B50 (33639248)\n-192165 Created Zip Spec      14 (20) '2.0'\n-192166 Created OS            00 (0) 'MS-DOS'\n-192167 Extract Zip Spec      14 (20) '2.0'\n-192168 Extract OS            00 (0) 'MS-DOS'\n-192169 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19216B Compression Method    0000 (0) 'Stored'\n-19216D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192171 CRC                   A96FE6E5 (2842683109)\n-192175 Compressed Size       00009CEF (40175)\n-192179 Uncompressed Size     00009CEF (40175)\n-19217D Filename Length       0036 (54)\n-19217F Extra Length          0009 (9)\n-192181 Comment Length        0000 (0)\n-192183 Disk Start            0000 (0)\n-192185 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192187 Ext File Attributes   00000000 (0)\n-19218B Local Header Offset   0007650E (484622)\n-19218F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19218F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1921C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1921C7   Length              0005 (5)\n-1921C9   Flags               01 (1) 'Modification'\n-1921CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1921CE CENTRAL HEADER #149   02014B50 (33639248)\n-1921D2 Created Zip Spec      14 (20) '2.0'\n-1921D3 Created OS            00 (0) 'MS-DOS'\n-1921D4 Extract Zip Spec      14 (20) '2.0'\n-1921D5 Extract OS            00 (0) 'MS-DOS'\n-1921D6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1921D8 Compression Method    0000 (0) 'Stored'\n-1921DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1921DE CRC                   CA31D6AC (3392263852)\n-1921E2 Compressed Size       0000058E (1422)\n-1921E6 Uncompressed Size     0000058E (1422)\n-1921EA Filename Length       0036 (54)\n-1921EC Extra Length          0009 (9)\n-1921EE Comment Length        0000 (0)\n-1921F0 Disk Start            0000 (0)\n-1921F2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1921F4 Ext File Attributes   00000000 (0)\n-1921F8 Local Header Offset   0008026A (524906)\n-1921FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1921FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192232 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192234   Length              0005 (5)\n-192236   Flags               01 (1) 'Modification'\n-192237   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19223B CENTRAL HEADER #150   02014B50 (33639248)\n-19223F Created Zip Spec      14 (20) '2.0'\n-192240 Created OS            00 (0) 'MS-DOS'\n-192241 Extract Zip Spec      14 (20) '2.0'\n-192242 Extract OS            00 (0) 'MS-DOS'\n-192243 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192245 Compression Method    0000 (0) 'Stored'\n-192247 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19224B CRC                   48D76DDD (1222077917)\n-19224F Compressed Size       00000932 (2354)\n-192253 Uncompressed Size     00000932 (2354)\n-192257 Filename Length       002A (42)\n-192259 Extra Length          0009 (9)\n-19225B Comment Length        0000 (0)\n-19225D Disk Start            0000 (0)\n-19225F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192261 Ext File Attributes   00000000 (0)\n-192265 Local Header Offset   00080865 (526437)\n-192269 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192269: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192293 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192295   Length              0005 (5)\n-192297   Flags               01 (1) 'Modification'\n-192298   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19229C CENTRAL HEADER #151   02014B50 (33639248)\n-1922A0 Created Zip Spec      14 (20) '2.0'\n-1922A1 Created OS            00 (0) 'MS-DOS'\n-1922A2 Extract Zip Spec      14 (20) '2.0'\n-1922A3 Extract OS            00 (0) 'MS-DOS'\n-1922A4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1922A6 Compression Method    0000 (0) 'Stored'\n-1922A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1922AC CRC                   C525F495 (3307598997)\n-1922B0 Compressed Size       000004C9 (1225)\n-1922B4 Uncompressed Size     000004C9 (1225)\n-1922B8 Filename Length       003E (62)\n-1922BA Extra Length          0009 (9)\n-1922BC Comment Length        0000 (0)\n-1922BE Disk Start            0000 (0)\n-1922C0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1922C2 Ext File Attributes   00000000 (0)\n-1922C6 Local Header Offset   000811F8 (528888)\n-1922CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1922CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192308 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19230A   Length              0005 (5)\n-19230C   Flags               01 (1) 'Modification'\n-19230D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192311 CENTRAL HEADER #152   02014B50 (33639248)\n-192315 Created Zip Spec      14 (20) '2.0'\n-192316 Created OS            00 (0) 'MS-DOS'\n-192317 Extract Zip Spec      14 (20) '2.0'\n-192318 Extract OS            00 (0) 'MS-DOS'\n-192319 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19231B Compression Method    0000 (0) 'Stored'\n-19231D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192321 CRC                   25A296EC (631412460)\n-192325 Compressed Size       00000510 (1296)\n-192329 Uncompressed Size     00000510 (1296)\n-19232D Filename Length       002E (46)\n-19232F Extra Length          0009 (9)\n-192331 Comment Length        0000 (0)\n-192333 Disk Start            0000 (0)\n-192335 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192337 Ext File Attributes   00000000 (0)\n-19233B Local Header Offset   00081736 (530230)\n-19233F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19233F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19236D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19236F   Length              0005 (5)\n-192371   Flags               01 (1) 'Modification'\n-192372   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192376 CENTRAL HEADER #153   02014B50 (33639248)\n-19237A Created Zip Spec      14 (20) '2.0'\n-19237B Created OS            00 (0) 'MS-DOS'\n-19237C Extract Zip Spec      14 (20) '2.0'\n-19237D Extract OS            00 (0) 'MS-DOS'\n-19237E General Purpose Flag  0000 (0)\n-192380 Compression Method    0000 (0) 'Stored'\n-192382 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192386 CRC                   00000000 (0)\n-19238A Compressed Size       00000000 (0)\n-19238E Uncompressed Size     00000000 (0)\n-192392 Filename Length       002A (42)\n-192394 Extra Length          0009 (9)\n-192396 Comment Length        0000 (0)\n-192398 Disk Start            0000 (0)\n-19239A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19239C Ext File Attributes   00000000 (0)\n-1923A0 Local Header Offset   00081CAB (531627)\n-1923A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1923A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1923CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1923D0   Length              0005 (5)\n-1923D2   Flags               01 (1) 'Modification'\n-1923D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1923D7 CENTRAL HEADER #154   02014B50 (33639248)\n-1923DB Created Zip Spec      14 (20) '2.0'\n-1923DC Created OS            00 (0) 'MS-DOS'\n-1923DD Extract Zip Spec      14 (20) '2.0'\n-1923DE Extract OS            00 (0) 'MS-DOS'\n-1923DF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1923E1 Compression Method    0000 (0) 'Stored'\n-1923E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1923E7 CRC                   EA8B59C6 (3935001030)\n-1923EB Compressed Size       00000800 (2048)\n-1923EF Uncompressed Size     00000800 (2048)\n-1923F3 Filename Length       0047 (71)\n-1923F5 Extra Length          0009 (9)\n-1923F7 Comment Length        0000 (0)\n-1923F9 Disk Start            0000 (0)\n-1923FB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1923FD Ext File Attributes   00000000 (0)\n-192401 Local Header Offset   00081CFC (531708)\n-192405 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192405: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19244C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19244E   Length              0005 (5)\n-192450   Flags               01 (1) 'Modification'\n-192451   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192455 CENTRAL HEADER #155   02014B50 (33639248)\n-192459 Created Zip Spec      14 (20) '2.0'\n-19245A Created OS            00 (0) 'MS-DOS'\n-19245B Extract Zip Spec      14 (20) '2.0'\n-19245C Extract OS            00 (0) 'MS-DOS'\n-19245D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19245F Compression Method    0000 (0) 'Stored'\n-192461 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192465 CRC                   3280412A (847266090)\n-192469 Compressed Size       0000060F (1551)\n-19246D Uncompressed Size     0000060F (1551)\n-192471 Filename Length       0042 (66)\n-192473 Extra Length          0009 (9)\n-192475 Comment Length        0000 (0)\n-192477 Disk Start            0000 (0)\n-192479 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19247B Ext File Attributes   00000000 (0)\n-19247F Local Header Offset   0008257A (533882)\n-192483 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192483: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1924C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1924C7   Length              0005 (5)\n-1924C9   Flags               01 (1) 'Modification'\n-1924CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1924CE CENTRAL HEADER #156   02014B50 (33639248)\n-1924D2 Created Zip Spec      14 (20) '2.0'\n-1924D3 Created OS            00 (0) 'MS-DOS'\n-1924D4 Extract Zip Spec      14 (20) '2.0'\n-1924D5 Extract OS            00 (0) 'MS-DOS'\n-1924D6 General Purpose Flag  0000 (0)\n-1924D8 Compression Method    0000 (0) 'Stored'\n-1924DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1924DE CRC                   00000000 (0)\n-1924E2 Compressed Size       00000000 (0)\n-1924E6 Uncompressed Size     00000000 (0)\n-1924EA Filename Length       002A (42)\n-1924EC Extra Length          0009 (9)\n-1924EE Comment Length        0000 (0)\n-1924F0 Disk Start            0000 (0)\n-1924F2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1924F4 Ext File Attributes   00000000 (0)\n-1924F8 Local Header Offset   00082C02 (535554)\n-1924FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1924FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192526 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192528   Length              0005 (5)\n-19252A   Flags               01 (1) 'Modification'\n-19252B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19252F CENTRAL HEADER #157   02014B50 (33639248)\n-192533 Created Zip Spec      14 (20) '2.0'\n-192534 Created OS            00 (0) 'MS-DOS'\n-192535 Extract Zip Spec      14 (20) '2.0'\n-192536 Extract OS            00 (0) 'MS-DOS'\n-192537 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192539 Compression Method    0000 (0) 'Stored'\n-19253B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19253F CRC                   B81BB8E1 (3088824545)\n-192543 Compressed Size       000011D4 (4564)\n-192547 Uncompressed Size     000011D4 (4564)\n-19254B Filename Length       0041 (65)\n-19254D Extra Length          0009 (9)\n-19254F Comment Length        0000 (0)\n-192551 Disk Start            0000 (0)\n-192553 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192555 Ext File Attributes   00000000 (0)\n-192559 Local Header Offset   00082C53 (535635)\n-19255D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19255D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19259E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1925A0   Length              0005 (5)\n-1925A2   Flags               01 (1) 'Modification'\n-1925A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1925A7 CENTRAL HEADER #158   02014B50 (33639248)\n-1925AB Created Zip Spec      14 (20) '2.0'\n-1925AC Created OS            00 (0) 'MS-DOS'\n-1925AD Extract Zip Spec      14 (20) '2.0'\n-1925AE Extract OS            00 (0) 'MS-DOS'\n-1925AF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1925B1 Compression Method    0000 (0) 'Stored'\n-1925B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1925B7 CRC                   C0FD96E7 (3237844711)\n-1925BB Compressed Size       00000BFA (3066)\n-1925BF Uncompressed Size     00000BFA (3066)\n-1925C3 Filename Length       0040 (64)\n-1925C5 Extra Length          0009 (9)\n-1925C7 Comment Length        0000 (0)\n-1925C9 Disk Start            0000 (0)\n-1925CB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1925CD Ext File Attributes   00000000 (0)\n-1925D1 Local Header Offset   00083E9F (540319)\n-1925D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1925D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192615 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192617   Length              0005 (5)\n-192619   Flags               01 (1) 'Modification'\n-19261A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19261E CENTRAL HEADER #159   02014B50 (33639248)\n-192622 Created Zip Spec      14 (20) '2.0'\n-192623 Created OS            00 (0) 'MS-DOS'\n-192624 Extract Zip Spec      14 (20) '2.0'\n-192625 Extract OS            00 (0) 'MS-DOS'\n-192626 General Purpose Flag  0000 (0)\n-192628 Compression Method    0000 (0) 'Stored'\n-19262A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19262E CRC                   00000000 (0)\n-192632 Compressed Size       00000000 (0)\n-192636 Uncompressed Size     00000000 (0)\n-19263A Filename Length       0021 (33)\n-19263C Extra Length          0009 (9)\n-19263E Comment Length        0000 (0)\n-192640 Disk Start            0000 (0)\n-192642 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192644 Ext File Attributes   00000000 (0)\n-192648 Local Header Offset   00084B10 (543504)\n-19264C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19264C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19266D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19266F   Length              0005 (5)\n-192671   Flags               01 (1) 'Modification'\n-192672   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192676 CENTRAL HEADER #160   02014B50 (33639248)\n-19267A Created Zip Spec      14 (20) '2.0'\n-19267B Created OS            00 (0) 'MS-DOS'\n-19267C Extract Zip Spec      14 (20) '2.0'\n-19267D Extract OS            00 (0) 'MS-DOS'\n-19267E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192680 Compression Method    0000 (0) 'Stored'\n-192682 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192686 CRC                   3980931B (964727579)\n-19268A Compressed Size       00000925 (2341)\n-19268E Uncompressed Size     00000925 (2341)\n-192692 Filename Length       0030 (48)\n-192694 Extra Length          0009 (9)\n-192696 Comment Length        0000 (0)\n-192698 Disk Start            0000 (0)\n-19269A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19269C Ext File Attributes   00000000 (0)\n-1926A0 Local Header Offset   00084B58 (543576)\n-1926A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1926A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1926D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1926D6   Length              0005 (5)\n-1926D8   Flags               01 (1) 'Modification'\n-1926D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1926DD CENTRAL HEADER #161   02014B50 (33639248)\n-1926E1 Created Zip Spec      14 (20) '2.0'\n-1926E2 Created OS            00 (0) 'MS-DOS'\n-1926E3 Extract Zip Spec      14 (20) '2.0'\n-1926E4 Extract OS            00 (0) 'MS-DOS'\n-1926E5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1926E7 Compression Method    0000 (0) 'Stored'\n-1926E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1926ED CRC                   4F8202FE (1333920510)\n-1926F1 Compressed Size       00000A7B (2683)\n-1926F5 Uncompressed Size     00000A7B (2683)\n-1926F9 Filename Length       002D (45)\n-1926FB Extra Length          0009 (9)\n-1926FD Comment Length        0000 (0)\n-1926FF Disk Start            0000 (0)\n-192701 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192703 Ext File Attributes   00000000 (0)\n-192707 Local Header Offset   000854E4 (546020)\n-19270B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19270B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192738 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19273A   Length              0005 (5)\n-19273C   Flags               01 (1) 'Modification'\n-19273D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192741 CENTRAL HEADER #162   02014B50 (33639248)\n-192745 Created Zip Spec      14 (20) '2.0'\n-192746 Created OS            00 (0) 'MS-DOS'\n-192747 Extract Zip Spec      14 (20) '2.0'\n-192748 Extract OS            00 (0) 'MS-DOS'\n-192749 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19274B Compression Method    0000 (0) 'Stored'\n-19274D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192751 CRC                   3F1DB4B7 (1058911415)\n-192755 Compressed Size       00000638 (1592)\n-192759 Uncompressed Size     00000638 (1592)\n-19275D Filename Length       0035 (53)\n-19275F Extra Length          0009 (9)\n-192761 Comment Length        0000 (0)\n-192763 Disk Start            0000 (0)\n-192765 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192767 Ext File Attributes   00000000 (0)\n-19276B Local Header Offset   00085FC3 (548803)\n-19276F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19276F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1927A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1927A6   Length              0005 (5)\n-1927A8   Flags               01 (1) 'Modification'\n-1927A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1927AD CENTRAL HEADER #163   02014B50 (33639248)\n-1927B1 Created Zip Spec      14 (20) '2.0'\n-1927B2 Created OS            00 (0) 'MS-DOS'\n-1927B3 Extract Zip Spec      14 (20) '2.0'\n-1927B4 Extract OS            00 (0) 'MS-DOS'\n-1927B5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1927B7 Compression Method    0000 (0) 'Stored'\n-1927B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1927BD CRC                   86537D4A (2253618506)\n-1927C1 Compressed Size       000007F0 (2032)\n-1927C5 Uncompressed Size     000007F0 (2032)\n-1927C9 Filename Length       0037 (55)\n-1927CB Extra Length          0009 (9)\n-1927CD Comment Length        0000 (0)\n-1927CF Disk Start            0000 (0)\n-1927D1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1927D3 Ext File Attributes   00000000 (0)\n-1927D7 Local Header Offset   00086667 (550503)\n-1927DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1927DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192812 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192814   Length              0005 (5)\n-192816   Flags               01 (1) 'Modification'\n-192817   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19281B CENTRAL HEADER #164   02014B50 (33639248)\n-19281F Created Zip Spec      14 (20) '2.0'\n-192820 Created OS            00 (0) 'MS-DOS'\n-192821 Extract Zip Spec      14 (20) '2.0'\n-192822 Extract OS            00 (0) 'MS-DOS'\n-192823 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192825 Compression Method    0000 (0) 'Stored'\n-192827 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19282B CRC                   76835014 (1988317204)\n-19282F Compressed Size       00000885 (2181)\n-192833 Uncompressed Size     00000885 (2181)\n-192837 Filename Length       0037 (55)\n-192839 Extra Length          0009 (9)\n-19283B Comment Length        0000 (0)\n-19283D Disk Start            0000 (0)\n-19283F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192841 Ext File Attributes   00000000 (0)\n-192845 Local Header Offset   00086EC5 (552645)\n-192849 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192849: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192880 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192882   Length              0005 (5)\n-192884   Flags               01 (1) 'Modification'\n-192885   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192889 CENTRAL HEADER #165   02014B50 (33639248)\n-19288D Created Zip Spec      14 (20) '2.0'\n-19288E Created OS            00 (0) 'MS-DOS'\n-19288F Extract Zip Spec      14 (20) '2.0'\n-192890 Extract OS            00 (0) 'MS-DOS'\n-192891 General Purpose Flag  0000 (0)\n-192893 Compression Method    0000 (0) 'Stored'\n-192895 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192899 CRC                   00000000 (0)\n-19289D Compressed Size       00000000 (0)\n-1928A1 Uncompressed Size     00000000 (0)\n-1928A5 Filename Length       001E (30)\n-1928A7 Extra Length          0009 (9)\n-1928A9 Comment Length        0000 (0)\n-1928AB Disk Start            0000 (0)\n-1928AD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1928AF Ext File Attributes   00000000 (0)\n-1928B3 Local Header Offset   000877B8 (554936)\n-1928B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1928B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1928D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1928D7   Length              0005 (5)\n-1928D9   Flags               01 (1) 'Modification'\n-1928DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1928DE CENTRAL HEADER #166   02014B50 (33639248)\n-1928E2 Created Zip Spec      14 (20) '2.0'\n-1928E3 Created OS            00 (0) 'MS-DOS'\n-1928E4 Extract Zip Spec      14 (20) '2.0'\n-1928E5 Extract OS            00 (0) 'MS-DOS'\n-1928E6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1928E8 Compression Method    0000 (0) 'Stored'\n-1928EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1928EE CRC                   7A06D81E (2047268894)\n-1928F2 Compressed Size       00000619 (1561)\n-1928F6 Uncompressed Size     00000619 (1561)\n-1928FA Filename Length       002F (47)\n-1928FC Extra Length          0009 (9)\n-1928FE Comment Length        0000 (0)\n-192900 Disk Start            0000 (0)\n-192902 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192904 Ext File Attributes   00000000 (0)\n-192908 Local Header Offset   000877FD (555005)\n-19290C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19290C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19293B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19293D   Length              0005 (5)\n-19293F   Flags               01 (1) 'Modification'\n-192940   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192944 CENTRAL HEADER #167   02014B50 (33639248)\n-192948 Created Zip Spec      14 (20) '2.0'\n-192949 Created OS            00 (0) 'MS-DOS'\n-19294A Extract Zip Spec      14 (20) '2.0'\n-19294B Extract OS            00 (0) 'MS-DOS'\n-19294C General Purpose Flag  0000 (0)\n-19294E Compression Method    0000 (0) 'Stored'\n-192950 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192954 CRC                   00000000 (0)\n-192958 Compressed Size       00000000 (0)\n-19295C Uncompressed Size     00000000 (0)\n-192960 Filename Length       0026 (38)\n-192962 Extra Length          0009 (9)\n-192964 Comment Length        0000 (0)\n-192966 Disk Start            0000 (0)\n-192968 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19296A Ext File Attributes   00000000 (0)\n-19296E Local Header Offset   00087E7C (556668)\n-192972 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192972: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192998 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19299A   Length              0005 (5)\n-19299C   Flags               01 (1) 'Modification'\n-19299D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1929A1 CENTRAL HEADER #168   02014B50 (33639248)\n-1929A5 Created Zip Spec      14 (20) '2.0'\n-1929A6 Created OS            00 (0) 'MS-DOS'\n-1929A7 Extract Zip Spec      14 (20) '2.0'\n-1929A8 Extract OS            00 (0) 'MS-DOS'\n-1929A9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1929AB Compression Method    0000 (0) 'Stored'\n-1929AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1929B1 CRC                   596F5AFB (1500470011)\n-1929B5 Compressed Size       00000504 (1284)\n-1929B9 Uncompressed Size     00000504 (1284)\n-1929BD Filename Length       0036 (54)\n-1929BF Extra Length          0009 (9)\n-1929C1 Comment Length        0000 (0)\n-1929C3 Disk Start            0000 (0)\n-1929C5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1929C7 Ext File Attributes   00000000 (0)\n-1929CB Local Header Offset   00087EC9 (556745)\n-1929CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1929CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192A05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192A07   Length              0005 (5)\n-192A09   Flags               01 (1) 'Modification'\n-192A0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192A0E CENTRAL HEADER #169   02014B50 (33639248)\n-192A12 Created Zip Spec      14 (20) '2.0'\n-192A13 Created OS            00 (0) 'MS-DOS'\n-192A14 Extract Zip Spec      14 (20) '2.0'\n-192A15 Extract OS            00 (0) 'MS-DOS'\n-192A16 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192A18 Compression Method    0000 (0) 'Stored'\n-192A1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192A1E CRC                   DAE5D322 (3672494882)\n-192A22 Compressed Size       00000B55 (2901)\n-192A26 Uncompressed Size     00000B55 (2901)\n-192A2A Filename Length       003D (61)\n-192A2C Extra Length          0009 (9)\n-192A2E Comment Length        0000 (0)\n-192A30 Disk Start            0000 (0)\n-192A32 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192A34 Ext File Attributes   00000000 (0)\n-192A38 Local Header Offset   0008843A (558138)\n-192A3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192A3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192A79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192A7B   Length              0005 (5)\n-192A7D   Flags               01 (1) 'Modification'\n-192A7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192A82 CENTRAL HEADER #170   02014B50 (33639248)\n-192A86 Created Zip Spec      14 (20) '2.0'\n-192A87 Created OS            00 (0) 'MS-DOS'\n-192A88 Extract Zip Spec      14 (20) '2.0'\n-192A89 Extract OS            00 (0) 'MS-DOS'\n-192A8A General Purpose Flag  0000 (0)\n-192A8C Compression Method    0000 (0) 'Stored'\n-192A8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192A92 CRC                   00000000 (0)\n-192A96 Compressed Size       00000000 (0)\n-192A9A Uncompressed Size     00000000 (0)\n-192A9E Filename Length       001B (27)\n-192AA0 Extra Length          0009 (9)\n-192AA2 Comment Length        0000 (0)\n-192AA4 Disk Start            0000 (0)\n-192AA6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192AA8 Ext File Attributes   00000000 (0)\n-192AAC Local Header Offset   00089003 (561155)\n-192AB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192AB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192ACB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192ACD   Length              0005 (5)\n-192ACF   Flags               01 (1) 'Modification'\n-192AD0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192AD4 CENTRAL HEADER #171   02014B50 (33639248)\n-192AD8 Created Zip Spec      14 (20) '2.0'\n-192AD9 Created OS            00 (0) 'MS-DOS'\n-192ADA Extract Zip Spec      14 (20) '2.0'\n-192ADB Extract OS            00 (0) 'MS-DOS'\n-192ADC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192ADE Compression Method    0000 (0) 'Stored'\n-192AE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192AE4 CRC                   0BDE6714 (199124756)\n-192AE8 Compressed Size       00006518 (25880)\n-192AEC Uncompressed Size     00006518 (25880)\n-192AF0 Filename Length       0025 (37)\n-192AF2 Extra Length          0009 (9)\n-192AF4 Comment Length        0000 (0)\n-192AF6 Disk Start            0000 (0)\n-192AF8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192AFA Ext File Attributes   00000000 (0)\n-192AFE Local Header Offset   00089045 (561221)\n-192B02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192B02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192B27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192B29   Length              0005 (5)\n-192B2B   Flags               01 (1) 'Modification'\n-192B2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192B30 CENTRAL HEADER #172   02014B50 (33639248)\n-192B34 Created Zip Spec      14 (20) '2.0'\n-192B35 Created OS            00 (0) 'MS-DOS'\n-192B36 Extract Zip Spec      14 (20) '2.0'\n-192B37 Extract OS            00 (0) 'MS-DOS'\n-192B38 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192B3A Compression Method    0000 (0) 'Stored'\n-192B3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192B40 CRC                   16F10E62 (384896610)\n-192B44 Compressed Size       00001B02 (6914)\n-192B48 Uncompressed Size     00001B02 (6914)\n-192B4C Filename Length       002B (43)\n-192B4E Extra Length          0009 (9)\n-192B50 Comment Length        0000 (0)\n-192B52 Disk Start            0000 (0)\n-192B54 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192B56 Ext File Attributes   00000000 (0)\n-192B5A Local Header Offset   0008F5B9 (587193)\n-192B5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192B5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192B89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192B8B   Length              0005 (5)\n-192B8D   Flags               01 (1) 'Modification'\n-192B8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192B92 CENTRAL HEADER #173   02014B50 (33639248)\n-192B96 Created Zip Spec      14 (20) '2.0'\n-192B97 Created OS            00 (0) 'MS-DOS'\n-192B98 Extract Zip Spec      14 (20) '2.0'\n-192B99 Extract OS            00 (0) 'MS-DOS'\n-192B9A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192B9C Compression Method    0000 (0) 'Stored'\n-192B9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192BA2 CRC                   A6F50F6E (2801078126)\n-192BA6 Compressed Size       00000BEB (3051)\n-192BAA Uncompressed Size     00000BEB (3051)\n-192BAE Filename Length       003A (58)\n-192BB0 Extra Length          0009 (9)\n-192BB2 Comment Length        0000 (0)\n-192BB4 Disk Start            0000 (0)\n-192BB6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192BB8 Ext File Attributes   00000000 (0)\n-192BBC Local Header Offset   0009111D (594205)\n-192BC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192BC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192BFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192BFC   Length              0005 (5)\n-192BFE   Flags               01 (1) 'Modification'\n-192BFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192C03 CENTRAL HEADER #174   02014B50 (33639248)\n-192C07 Created Zip Spec      14 (20) '2.0'\n-192C08 Created OS            00 (0) 'MS-DOS'\n-192C09 Extract Zip Spec      14 (20) '2.0'\n-192C0A Extract OS            00 (0) 'MS-DOS'\n-192C0B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192C0D Compression Method    0000 (0) 'Stored'\n-192C0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192C13 CRC                   5110A2B9 (1360044729)\n-192C17 Compressed Size       00000B8E (2958)\n-192C1B Uncompressed Size     00000B8E (2958)\n-192C1F Filename Length       003B (59)\n-192C21 Extra Length          0009 (9)\n-192C23 Comment Length        0000 (0)\n-192C25 Disk Start            0000 (0)\n-192C27 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192C29 Ext File Attributes   00000000 (0)\n-192C2D Local Header Offset   00091D79 (597369)\n-192C31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192C31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192C6C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192C6E   Length              0005 (5)\n-192C70   Flags               01 (1) 'Modification'\n-192C71   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192C75 CENTRAL HEADER #175   02014B50 (33639248)\n-192C79 Created Zip Spec      14 (20) '2.0'\n-192C7A Created OS            00 (0) 'MS-DOS'\n-192C7B Extract Zip Spec      14 (20) '2.0'\n-192C7C Extract OS            00 (0) 'MS-DOS'\n-192C7D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192C7F Compression Method    0000 (0) 'Stored'\n-192C81 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192C85 CRC                   490F11E6 (1225724390)\n-192C89 Compressed Size       00000C65 (3173)\n-192C8D Uncompressed Size     00000C65 (3173)\n-192C91 Filename Length       0032 (50)\n-192C93 Extra Length          0009 (9)\n-192C95 Comment Length        0000 (0)\n-192C97 Disk Start            0000 (0)\n-192C99 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192C9B Ext File Attributes   00000000 (0)\n-192C9F Local Header Offset   00092979 (600441)\n-192CA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192CA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192CD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192CD7   Length              0005 (5)\n-192CD9   Flags               01 (1) 'Modification'\n-192CDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192CDE CENTRAL HEADER #176   02014B50 (33639248)\n-192CE2 Created Zip Spec      14 (20) '2.0'\n-192CE3 Created OS            00 (0) 'MS-DOS'\n-192CE4 Extract Zip Spec      14 (20) '2.0'\n-192CE5 Extract OS            00 (0) 'MS-DOS'\n-192CE6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192CE8 Compression Method    0000 (0) 'Stored'\n-192CEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192CEE CRC                   2D3D8039 (759005241)\n-192CF2 Compressed Size       00000AD5 (2773)\n-192CF6 Uncompressed Size     00000AD5 (2773)\n-192CFA Filename Length       0032 (50)\n-192CFC Extra Length          0009 (9)\n-192CFE Comment Length        0000 (0)\n-192D00 Disk Start            0000 (0)\n-192D02 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192D04 Ext File Attributes   00000000 (0)\n-192D08 Local Header Offset   00093647 (603719)\n-192D0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192D0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192D3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192D40   Length              0005 (5)\n-192D42   Flags               01 (1) 'Modification'\n-192D43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192D47 CENTRAL HEADER #177   02014B50 (33639248)\n-192D4B Created Zip Spec      14 (20) '2.0'\n-192D4C Created OS            00 (0) 'MS-DOS'\n-192D4D Extract Zip Spec      14 (20) '2.0'\n-192D4E Extract OS            00 (0) 'MS-DOS'\n-192D4F General Purpose Flag  0000 (0)\n-192D51 Compression Method    0000 (0) 'Stored'\n-192D53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192D57 CRC                   00000000 (0)\n-192D5B Compressed Size       00000000 (0)\n-192D5F Uncompressed Size     00000000 (0)\n-192D63 Filename Length       001D (29)\n-192D65 Extra Length          0009 (9)\n-192D67 Comment Length        0000 (0)\n-192D69 Disk Start            0000 (0)\n-192D6B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192D6D Ext File Attributes   00000000 (0)\n-192D71 Local Header Offset   00094185 (606597)\n-192D75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192D75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192D92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192D94   Length              0005 (5)\n-192D96   Flags               01 (1) 'Modification'\n-192D97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192D9B CENTRAL HEADER #178   02014B50 (33639248)\n-192D9F Created Zip Spec      14 (20) '2.0'\n-192DA0 Created OS            00 (0) 'MS-DOS'\n-192DA1 Extract Zip Spec      14 (20) '2.0'\n-192DA2 Extract OS            00 (0) 'MS-DOS'\n-192DA3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192DA5 Compression Method    0000 (0) 'Stored'\n-192DA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192DAB CRC                   BACA53B9 (3133821881)\n-192DAF Compressed Size       000044D5 (17621)\n-192DB3 Uncompressed Size     000044D5 (17621)\n-192DB7 Filename Length       0036 (54)\n-192DB9 Extra Length          0009 (9)\n-192DBB Comment Length        0000 (0)\n-192DBD Disk Start            0000 (0)\n-192DBF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192DC1 Ext File Attributes   00000000 (0)\n-192DC5 Local Header Offset   000941C9 (606665)\n-192DC9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192DC9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192DFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192E01   Length              0005 (5)\n-192E03   Flags               01 (1) 'Modification'\n-192E04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192E08 CENTRAL HEADER #179   02014B50 (33639248)\n-192E0C Created Zip Spec      14 (20) '2.0'\n-192E0D Created OS            00 (0) 'MS-DOS'\n-192E0E Extract Zip Spec      14 (20) '2.0'\n-192E0F Extract OS            00 (0) 'MS-DOS'\n-192E10 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192E12 Compression Method    0000 (0) 'Stored'\n-192E14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192E18 CRC                   FA032BB6 (4194511798)\n-192E1C Compressed Size       00003385 (13189)\n-192E20 Uncompressed Size     00003385 (13189)\n-192E24 Filename Length       002C (44)\n-192E26 Extra Length          0009 (9)\n-192E28 Comment Length        0000 (0)\n-192E2A Disk Start            0000 (0)\n-192E2C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192E2E Ext File Attributes   00000000 (0)\n-192E32 Local Header Offset   0009870B (624395)\n-192E36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192E36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192E62 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192E64   Length              0005 (5)\n-192E66   Flags               01 (1) 'Modification'\n-192E67   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192E6B CENTRAL HEADER #180   02014B50 (33639248)\n-192E6F Created Zip Spec      14 (20) '2.0'\n-192E70 Created OS            00 (0) 'MS-DOS'\n-192E71 Extract Zip Spec      14 (20) '2.0'\n-192E72 Extract OS            00 (0) 'MS-DOS'\n-192E73 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192E75 Compression Method    0000 (0) 'Stored'\n-192E77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192E7B CRC                   39C07894 (968915092)\n-192E7F Compressed Size       00006AA4 (27300)\n-192E83 Uncompressed Size     00006AA4 (27300)\n-192E87 Filename Length       0026 (38)\n-192E89 Extra Length          0009 (9)\n-192E8B Comment Length        0000 (0)\n-192E8D Disk Start            0000 (0)\n-192E8F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192E91 Ext File Attributes   00000000 (0)\n-192E95 Local Header Offset   0009BAF3 (637683)\n-192E99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192E99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192EBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192EC1   Length              0005 (5)\n-192EC3   Flags               01 (1) 'Modification'\n-192EC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192EC8 CENTRAL HEADER #181   02014B50 (33639248)\n-192ECC Created Zip Spec      14 (20) '2.0'\n-192ECD Created OS            00 (0) 'MS-DOS'\n-192ECE Extract Zip Spec      14 (20) '2.0'\n-192ECF Extract OS            00 (0) 'MS-DOS'\n-192ED0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192ED2 Compression Method    0000 (0) 'Stored'\n-192ED4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192ED8 CRC                   2313A478 (588489848)\n-192EDC Compressed Size       00001330 (4912)\n-192EE0 Uncompressed Size     00001330 (4912)\n-192EE4 Filename Length       002B (43)\n-192EE6 Extra Length          0009 (9)\n-192EE8 Comment Length        0000 (0)\n-192EEA Disk Start            0000 (0)\n-192EEC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192EEE Ext File Attributes   00000000 (0)\n-192EF2 Local Header Offset   000A25F4 (665076)\n-192EF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192EF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192F21 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192F23   Length              0005 (5)\n-192F25   Flags               01 (1) 'Modification'\n-192F26   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192F2A CENTRAL HEADER #182   02014B50 (33639248)\n-192F2E Created Zip Spec      14 (20) '2.0'\n-192F2F Created OS            00 (0) 'MS-DOS'\n-192F30 Extract Zip Spec      14 (20) '2.0'\n-192F31 Extract OS            00 (0) 'MS-DOS'\n-192F32 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192F34 Compression Method    0000 (0) 'Stored'\n-192F36 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192F3A CRC                   10BC97FD (280795133)\n-192F3E Compressed Size       000005B5 (1461)\n-192F42 Uncompressed Size     000005B5 (1461)\n-192F46 Filename Length       002F (47)\n-192F48 Extra Length          0009 (9)\n-192F4A Comment Length        0000 (0)\n-192F4C Disk Start            0000 (0)\n-192F4E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192F50 Ext File Attributes   00000000 (0)\n-192F54 Local Header Offset   000A3986 (670086)\n-192F58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192F58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192F87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192F89   Length              0005 (5)\n-192F8B   Flags               01 (1) 'Modification'\n-192F8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192F90 CENTRAL HEADER #183   02014B50 (33639248)\n-192F94 Created Zip Spec      14 (20) '2.0'\n-192F95 Created OS            00 (0) 'MS-DOS'\n-192F96 Extract Zip Spec      14 (20) '2.0'\n-192F97 Extract OS            00 (0) 'MS-DOS'\n-192F98 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192F9A Compression Method    0000 (0) 'Stored'\n-192F9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-192FA0 CRC                   982A34CC (2552902860)\n-192FA4 Compressed Size       000004AE (1198)\n-192FA8 Uncompressed Size     000004AE (1198)\n-192FAC Filename Length       002A (42)\n-192FAE Extra Length          0009 (9)\n-192FB0 Comment Length        0000 (0)\n-192FB2 Disk Start            0000 (0)\n-192FB4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-192FB6 Ext File Attributes   00000000 (0)\n-192FBA Local Header Offset   000A3FA1 (671649)\n-192FBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x192FBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-192FE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-192FEA   Length              0005 (5)\n-192FEC   Flags               01 (1) 'Modification'\n-192FED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-192FF1 CENTRAL HEADER #184   02014B50 (33639248)\n-192FF5 Created Zip Spec      14 (20) '2.0'\n-192FF6 Created OS            00 (0) 'MS-DOS'\n-192FF7 Extract Zip Spec      14 (20) '2.0'\n-192FF8 Extract OS            00 (0) 'MS-DOS'\n-192FF9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-192FFB Compression Method    0000 (0) 'Stored'\n-192FFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193001 CRC                   7653CF57 (1985204055)\n-193005 Compressed Size       000015FB (5627)\n-193009 Uncompressed Size     000015FB (5627)\n-19300D Filename Length       002C (44)\n-19300F Extra Length          0009 (9)\n-193011 Comment Length        0000 (0)\n-193013 Disk Start            0000 (0)\n-193015 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193017 Ext File Attributes   00000000 (0)\n-19301B Local Header Offset   000A44B0 (672944)\n-19301F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19301F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19304B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19304D   Length              0005 (5)\n-19304F   Flags               01 (1) 'Modification'\n-193050   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193054 CENTRAL HEADER #185   02014B50 (33639248)\n-193058 Created Zip Spec      14 (20) '2.0'\n-193059 Created OS            00 (0) 'MS-DOS'\n-19305A Extract Zip Spec      14 (20) '2.0'\n-19305B Extract OS            00 (0) 'MS-DOS'\n-19305C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19305E Compression Method    0000 (0) 'Stored'\n-193060 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193064 CRC                   4D87180A (1300699146)\n-193068 Compressed Size       000008A6 (2214)\n-19306C Uncompressed Size     000008A6 (2214)\n-193070 Filename Length       002C (44)\n-193072 Extra Length          0009 (9)\n-193074 Comment Length        0000 (0)\n-193076 Disk Start            0000 (0)\n-193078 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19307A Ext File Attributes   00000000 (0)\n-19307E Local Header Offset   000A5B0E (678670)\n-193082 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193082: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1930AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1930B0   Length              0005 (5)\n-1930B2   Flags               01 (1) 'Modification'\n-1930B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1930B7 CENTRAL HEADER #186   02014B50 (33639248)\n-1930BB Created Zip Spec      14 (20) '2.0'\n-1930BC Created OS            00 (0) 'MS-DOS'\n-1930BD Extract Zip Spec      14 (20) '2.0'\n-1930BE Extract OS            00 (0) 'MS-DOS'\n-1930BF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1930C1 Compression Method    0000 (0) 'Stored'\n-1930C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1930C7 CRC                   8F2D4992 (2402109842)\n-1930CB Compressed Size       000008C7 (2247)\n-1930CF Uncompressed Size     000008C7 (2247)\n-1930D3 Filename Length       002B (43)\n-1930D5 Extra Length          0009 (9)\n-1930D7 Comment Length        0000 (0)\n-1930D9 Disk Start            0000 (0)\n-1930DB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1930DD Ext File Attributes   00000000 (0)\n-1930E1 Local Header Offset   000A6417 (680983)\n-1930E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1930E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193110 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193112   Length              0005 (5)\n-193114   Flags               01 (1) 'Modification'\n-193115   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193119 CENTRAL HEADER #187   02014B50 (33639248)\n-19311D Created Zip Spec      14 (20) '2.0'\n-19311E Created OS            00 (0) 'MS-DOS'\n-19311F Extract Zip Spec      14 (20) '2.0'\n-193120 Extract OS            00 (0) 'MS-DOS'\n-193121 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193123 Compression Method    0000 (0) 'Stored'\n-193125 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193129 CRC                   33828390 (864191376)\n-19312D Compressed Size       00000AEC (2796)\n-193131 Uncompressed Size     00000AEC (2796)\n-193135 Filename Length       002D (45)\n-193137 Extra Length          0009 (9)\n-193139 Comment Length        0000 (0)\n-19313B Disk Start            0000 (0)\n-19313D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19313F Ext File Attributes   00000000 (0)\n-193143 Local Header Offset   000A6D40 (683328)\n-193147 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193147: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193174 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193176   Length              0005 (5)\n-193178   Flags               01 (1) 'Modification'\n-193179   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19317D CENTRAL HEADER #188   02014B50 (33639248)\n-193181 Created Zip Spec      14 (20) '2.0'\n-193182 Created OS            00 (0) 'MS-DOS'\n-193183 Extract Zip Spec      14 (20) '2.0'\n-193184 Extract OS            00 (0) 'MS-DOS'\n-193185 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193187 Compression Method    0000 (0) 'Stored'\n-193189 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19318D CRC                   ECCF2EAF (3973000879)\n-193191 Compressed Size       00001FDF (8159)\n-193195 Uncompressed Size     00001FDF (8159)\n-193199 Filename Length       002C (44)\n-19319B Extra Length          0009 (9)\n-19319D Comment Length        0000 (0)\n-19319F Disk Start            0000 (0)\n-1931A1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1931A3 Ext File Attributes   00000000 (0)\n-1931A7 Local Header Offset   000A7890 (686224)\n-1931AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1931AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1931D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1931D9   Length              0005 (5)\n-1931DB   Flags               01 (1) 'Modification'\n-1931DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1931E0 CENTRAL HEADER #189   02014B50 (33639248)\n-1931E4 Created Zip Spec      14 (20) '2.0'\n-1931E5 Created OS            00 (0) 'MS-DOS'\n-1931E6 Extract Zip Spec      14 (20) '2.0'\n-1931E7 Extract OS            00 (0) 'MS-DOS'\n-1931E8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1931EA Compression Method    0000 (0) 'Stored'\n-1931EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1931F0 CRC                   4EF6CDD0 (1324797392)\n-1931F4 Compressed Size       00000489 (1161)\n-1931F8 Uncompressed Size     00000489 (1161)\n-1931FC Filename Length       0030 (48)\n-1931FE Extra Length          0009 (9)\n-193200 Comment Length        0000 (0)\n-193202 Disk Start            0000 (0)\n-193204 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193206 Ext File Attributes   00000000 (0)\n-19320A Local Header Offset   000A98D2 (694482)\n-19320E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19320E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19323E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193240   Length              0005 (5)\n-193242   Flags               01 (1) 'Modification'\n-193243   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193247 CENTRAL HEADER #190   02014B50 (33639248)\n-19324B Created Zip Spec      14 (20) '2.0'\n-19324C Created OS            00 (0) 'MS-DOS'\n-19324D Extract Zip Spec      14 (20) '2.0'\n-19324E Extract OS            00 (0) 'MS-DOS'\n-19324F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193251 Compression Method    0000 (0) 'Stored'\n-193253 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193257 CRC                   D5F1D071 (3589394545)\n-19325B Compressed Size       000072B9 (29369)\n-19325F Uncompressed Size     000072B9 (29369)\n-193263 Filename Length       0027 (39)\n-193265 Extra Length          0009 (9)\n-193267 Comment Length        0000 (0)\n-193269 Disk Start            0000 (0)\n-19326B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19326D Ext File Attributes   00000000 (0)\n-193271 Local Header Offset   000A9DC2 (695746)\n-193275 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193275: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19329C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19329E   Length              0005 (5)\n-1932A0   Flags               01 (1) 'Modification'\n-1932A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1932A5 CENTRAL HEADER #191   02014B50 (33639248)\n-1932A9 Created Zip Spec      14 (20) '2.0'\n-1932AA Created OS            00 (0) 'MS-DOS'\n-1932AB Extract Zip Spec      14 (20) '2.0'\n-1932AC Extract OS            00 (0) 'MS-DOS'\n-1932AD General Purpose Flag  0000 (0)\n-1932AF Compression Method    0000 (0) 'Stored'\n-1932B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1932B5 CRC                   00000000 (0)\n-1932B9 Compressed Size       00000000 (0)\n-1932BD Uncompressed Size     00000000 (0)\n-1932C1 Filename Length       001D (29)\n-1932C3 Extra Length          0009 (9)\n-1932C5 Comment Length        0000 (0)\n-1932C7 Disk Start            0000 (0)\n-1932C9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1932CB Ext File Attributes   00000000 (0)\n-1932CF Local Header Offset   000B10D9 (725209)\n-1932D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1932D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1932F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1932F2   Length              0005 (5)\n-1932F4   Flags               01 (1) 'Modification'\n-1932F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1932F9 CENTRAL HEADER #192   02014B50 (33639248)\n-1932FD Created Zip Spec      14 (20) '2.0'\n-1932FE Created OS            00 (0) 'MS-DOS'\n-1932FF Extract Zip Spec      14 (20) '2.0'\n-193300 Extract OS            00 (0) 'MS-DOS'\n-193301 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193303 Compression Method    0000 (0) 'Stored'\n-193305 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193309 CRC                   99C9FFC3 (2580152259)\n-19330D Compressed Size       00000902 (2306)\n-193311 Uncompressed Size     00000902 (2306)\n-193315 Filename Length       002D (45)\n-193317 Extra Length          0009 (9)\n-193319 Comment Length        0000 (0)\n-19331B Disk Start            0000 (0)\n-19331D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19331F Ext File Attributes   00000000 (0)\n-193323 Local Header Offset   000B111D (725277)\n-193327 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193327: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193354 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193356   Length              0005 (5)\n-193358   Flags               01 (1) 'Modification'\n-193359   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19335D CENTRAL HEADER #193   02014B50 (33639248)\n-193361 Created Zip Spec      14 (20) '2.0'\n-193362 Created OS            00 (0) 'MS-DOS'\n-193363 Extract Zip Spec      14 (20) '2.0'\n-193364 Extract OS            00 (0) 'MS-DOS'\n-193365 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193367 Compression Method    0000 (0) 'Stored'\n-193369 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19336D CRC                   C53EC878 (3309226104)\n-193371 Compressed Size       00000488 (1160)\n-193375 Uncompressed Size     00000488 (1160)\n-193379 Filename Length       0036 (54)\n-19337B Extra Length          0009 (9)\n-19337D Comment Length        0000 (0)\n-19337F Disk Start            0000 (0)\n-193381 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193383 Ext File Attributes   00000000 (0)\n-193387 Local Header Offset   000B1A83 (727683)\n-19338B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19338B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1933C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1933C3   Length              0005 (5)\n-1933C5   Flags               01 (1) 'Modification'\n-1933C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1933CA CENTRAL HEADER #194   02014B50 (33639248)\n-1933CE Created Zip Spec      14 (20) '2.0'\n-1933CF Created OS            00 (0) 'MS-DOS'\n-1933D0 Extract Zip Spec      14 (20) '2.0'\n-1933D1 Extract OS            00 (0) 'MS-DOS'\n-1933D2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1933D4 Compression Method    0000 (0) 'Stored'\n-1933D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1933DA CRC                   8EF8ABEC (2398661612)\n-1933DE Compressed Size       00000920 (2336)\n-1933E2 Uncompressed Size     00000920 (2336)\n-1933E6 Filename Length       0037 (55)\n-1933E8 Extra Length          0009 (9)\n-1933EA Comment Length        0000 (0)\n-1933EC Disk Start            0000 (0)\n-1933EE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1933F0 Ext File Attributes   00000000 (0)\n-1933F4 Local Header Offset   000B1F78 (728952)\n-1933F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1933F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19342F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193431   Length              0005 (5)\n-193433   Flags               01 (1) 'Modification'\n-193434   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193438 CENTRAL HEADER #195   02014B50 (33639248)\n-19343C Created Zip Spec      14 (20) '2.0'\n-19343D Created OS            00 (0) 'MS-DOS'\n-19343E Extract Zip Spec      14 (20) '2.0'\n-19343F Extract OS            00 (0) 'MS-DOS'\n-193440 General Purpose Flag  0000 (0)\n-193442 Compression Method    0000 (0) 'Stored'\n-193444 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193448 CRC                   00000000 (0)\n-19344C Compressed Size       00000000 (0)\n-193450 Uncompressed Size     00000000 (0)\n-193454 Filename Length       001F (31)\n-193456 Extra Length          0009 (9)\n-193458 Comment Length        0000 (0)\n-19345A Disk Start            0000 (0)\n-19345C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19345E Ext File Attributes   00000000 (0)\n-193462 Local Header Offset   000B2906 (731398)\n-193466 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193466: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193485 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193487   Length              0005 (5)\n-193489   Flags               01 (1) 'Modification'\n-19348A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19348E CENTRAL HEADER #196   02014B50 (33639248)\n-193492 Created Zip Spec      14 (20) '2.0'\n-193493 Created OS            00 (0) 'MS-DOS'\n-193494 Extract Zip Spec      14 (20) '2.0'\n-193495 Extract OS            00 (0) 'MS-DOS'\n-193496 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193498 Compression Method    0000 (0) 'Stored'\n-19349A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19349E CRC                   9D821087 (2642546823)\n-1934A2 Compressed Size       000004BE (1214)\n-1934A6 Uncompressed Size     000004BE (1214)\n-1934AA Filename Length       0029 (41)\n-1934AC Extra Length          0009 (9)\n-1934AE Comment Length        0000 (0)\n-1934B0 Disk Start            0000 (0)\n-1934B2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1934B4 Ext File Attributes   00000000 (0)\n-1934B8 Local Header Offset   000B294C (731468)\n-1934BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1934BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1934E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1934E7   Length              0005 (5)\n-1934E9   Flags               01 (1) 'Modification'\n-1934EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1934EE CENTRAL HEADER #197   02014B50 (33639248)\n-1934F2 Created Zip Spec      14 (20) '2.0'\n-1934F3 Created OS            00 (0) 'MS-DOS'\n-1934F4 Extract Zip Spec      14 (20) '2.0'\n-1934F5 Extract OS            00 (0) 'MS-DOS'\n-1934F6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1934F8 Compression Method    0000 (0) 'Stored'\n-1934FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1934FE CRC                   7A6DF346 (2054026054)\n-193502 Compressed Size       00000ED8 (3800)\n-193506 Uncompressed Size     00000ED8 (3800)\n-19350A Filename Length       002A (42)\n-19350C Extra Length          0009 (9)\n-19350E Comment Length        0000 (0)\n-193510 Disk Start            0000 (0)\n-193512 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193514 Ext File Attributes   00000000 (0)\n-193518 Local Header Offset   000B2E6A (732778)\n-19351C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19351C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193546 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193548   Length              0005 (5)\n-19354A   Flags               01 (1) 'Modification'\n-19354B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19354F CENTRAL HEADER #198   02014B50 (33639248)\n-193553 Created Zip Spec      14 (20) '2.0'\n-193554 Created OS            00 (0) 'MS-DOS'\n-193555 Extract Zip Spec      14 (20) '2.0'\n-193556 Extract OS            00 (0) 'MS-DOS'\n-193557 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193559 Compression Method    0000 (0) 'Stored'\n-19355B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19355F CRC                   A6EF1A57 (2800687703)\n-193563 Compressed Size       00000745 (1861)\n-193567 Uncompressed Size     00000745 (1861)\n-19356B Filename Length       0031 (49)\n-19356D Extra Length          0009 (9)\n-19356F Comment Length        0000 (0)\n-193571 Disk Start            0000 (0)\n-193573 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193575 Ext File Attributes   00000000 (0)\n-193579 Local Header Offset   000B3DA3 (736675)\n-19357D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19357D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1935AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1935B0   Length              0005 (5)\n-1935B2   Flags               01 (1) 'Modification'\n-1935B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1935B7 CENTRAL HEADER #199   02014B50 (33639248)\n-1935BB Created Zip Spec      14 (20) '2.0'\n-1935BC Created OS            00 (0) 'MS-DOS'\n-1935BD Extract Zip Spec      14 (20) '2.0'\n-1935BE Extract OS            00 (0) 'MS-DOS'\n-1935BF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1935C1 Compression Method    0000 (0) 'Stored'\n-1935C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1935C7 CRC                   626EDC3E (1651432510)\n-1935CB Compressed Size       00001485 (5253)\n-1935CF Uncompressed Size     00001485 (5253)\n-1935D3 Filename Length       0031 (49)\n-1935D5 Extra Length          0009 (9)\n-1935D7 Comment Length        0000 (0)\n-1935D9 Disk Start            0000 (0)\n-1935DB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1935DD Ext File Attributes   00000000 (0)\n-1935E1 Local Header Offset   000B4550 (738640)\n-1935E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1935E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193616 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193618   Length              0005 (5)\n-19361A   Flags               01 (1) 'Modification'\n-19361B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19361F CENTRAL HEADER #200   02014B50 (33639248)\n-193623 Created Zip Spec      14 (20) '2.0'\n-193624 Created OS            00 (0) 'MS-DOS'\n-193625 Extract Zip Spec      14 (20) '2.0'\n-193626 Extract OS            00 (0) 'MS-DOS'\n-193627 General Purpose Flag  0000 (0)\n-193629 Compression Method    0000 (0) 'Stored'\n-19362B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19362F CRC                   00000000 (0)\n-193633 Compressed Size       00000000 (0)\n-193637 Uncompressed Size     00000000 (0)\n-19363B Filename Length       0023 (35)\n-19363D Extra Length          0009 (9)\n-19363F Comment Length        0000 (0)\n-193641 Disk Start            0000 (0)\n-193643 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193645 Ext File Attributes   00000000 (0)\n-193649 Local Header Offset   000B5A3D (743997)\n-19364D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19364D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193670 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193672   Length              0005 (5)\n-193674   Flags               01 (1) 'Modification'\n-193675   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193679 CENTRAL HEADER #201   02014B50 (33639248)\n-19367D Created Zip Spec      14 (20) '2.0'\n-19367E Created OS            00 (0) 'MS-DOS'\n-19367F Extract Zip Spec      14 (20) '2.0'\n-193680 Extract OS            00 (0) 'MS-DOS'\n-193681 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193683 Compression Method    0000 (0) 'Stored'\n-193685 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193689 CRC                   65EBC1EB (1709949419)\n-19368D Compressed Size       00000D0E (3342)\n-193691 Uncompressed Size     00000D0E (3342)\n-193695 Filename Length       0031 (49)\n-193697 Extra Length          0009 (9)\n-193699 Comment Length        0000 (0)\n-19369B Disk Start            0000 (0)\n-19369D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19369F Ext File Attributes   00000000 (0)\n-1936A3 Local Header Offset   000B5A87 (744071)\n-1936A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1936A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1936D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1936DA   Length              0005 (5)\n-1936DC   Flags               01 (1) 'Modification'\n-1936DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1936E1 CENTRAL HEADER #202   02014B50 (33639248)\n-1936E5 Created Zip Spec      14 (20) '2.0'\n-1936E6 Created OS            00 (0) 'MS-DOS'\n-1936E7 Extract Zip Spec      14 (20) '2.0'\n-1936E8 Extract OS            00 (0) 'MS-DOS'\n-1936E9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1936EB Compression Method    0000 (0) 'Stored'\n-1936ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1936F1 CRC                   006A5B46 (6970182)\n-1936F5 Compressed Size       000006F8 (1784)\n-1936F9 Uncompressed Size     000006F8 (1784)\n-1936FD Filename Length       0038 (56)\n-1936FF Extra Length          0009 (9)\n-193701 Comment Length        0000 (0)\n-193703 Disk Start            0000 (0)\n-193705 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193707 Ext File Attributes   00000000 (0)\n-19370B Local Header Offset   000B67FD (747517)\n-19370F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19370F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193747 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193749   Length              0005 (5)\n-19374B   Flags               01 (1) 'Modification'\n-19374C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193750 CENTRAL HEADER #203   02014B50 (33639248)\n-193754 Created Zip Spec      14 (20) '2.0'\n-193755 Created OS            00 (0) 'MS-DOS'\n-193756 Extract Zip Spec      14 (20) '2.0'\n-193757 Extract OS            00 (0) 'MS-DOS'\n-193758 General Purpose Flag  0000 (0)\n-19375A Compression Method    0000 (0) 'Stored'\n-19375C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193760 CRC                   00000000 (0)\n-193764 Compressed Size       00000000 (0)\n-193768 Uncompressed Size     00000000 (0)\n-19376C Filename Length       0023 (35)\n-19376E Extra Length          0009 (9)\n-193770 Comment Length        0000 (0)\n-193772 Disk Start            0000 (0)\n-193774 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193776 Ext File Attributes   00000000 (0)\n-19377A Local Header Offset   000B6F64 (749412)\n-19377E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19377E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1937A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1937A3   Length              0005 (5)\n-1937A5   Flags               01 (1) 'Modification'\n-1937A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1937AA CENTRAL HEADER #204   02014B50 (33639248)\n-1937AE Created Zip Spec      14 (20) '2.0'\n-1937AF Created OS            00 (0) 'MS-DOS'\n-1937B0 Extract Zip Spec      14 (20) '2.0'\n-1937B1 Extract OS            00 (0) 'MS-DOS'\n-1937B2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1937B4 Compression Method    0000 (0) 'Stored'\n-1937B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1937BA CRC                   8FD172CF (2412868303)\n-1937BE Compressed Size       00000D1B (3355)\n-1937C2 Uncompressed Size     00000D1B (3355)\n-1937C6 Filename Length       0031 (49)\n-1937C8 Extra Length          0009 (9)\n-1937CA Comment Length        0000 (0)\n-1937CC Disk Start            0000 (0)\n-1937CE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1937D0 Ext File Attributes   00000000 (0)\n-1937D4 Local Header Offset   000B6FAE (749486)\n-1937D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1937D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193809 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19380B   Length              0005 (5)\n-19380D   Flags               01 (1) 'Modification'\n-19380E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193812 CENTRAL HEADER #205   02014B50 (33639248)\n-193816 Created Zip Spec      14 (20) '2.0'\n-193817 Created OS            00 (0) 'MS-DOS'\n-193818 Extract Zip Spec      14 (20) '2.0'\n-193819 Extract OS            00 (0) 'MS-DOS'\n-19381A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19381C Compression Method    0000 (0) 'Stored'\n-19381E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193822 CRC                   7ADBDBE0 (2061229024)\n-193826 Compressed Size       000012FC (4860)\n-19382A Uncompressed Size     000012FC (4860)\n-19382E Filename Length       0038 (56)\n-193830 Extra Length          0009 (9)\n-193832 Comment Length        0000 (0)\n-193834 Disk Start            0000 (0)\n-193836 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193838 Ext File Attributes   00000000 (0)\n-19383C Local Header Offset   000B7D31 (752945)\n-193840 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193840: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193878 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19387A   Length              0005 (5)\n-19387C   Flags               01 (1) 'Modification'\n-19387D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193881 CENTRAL HEADER #206   02014B50 (33639248)\n-193885 Created Zip Spec      14 (20) '2.0'\n-193886 Created OS            00 (0) 'MS-DOS'\n-193887 Extract Zip Spec      14 (20) '2.0'\n-193888 Extract OS            00 (0) 'MS-DOS'\n-193889 General Purpose Flag  0000 (0)\n-19388B Compression Method    0000 (0) 'Stored'\n-19388D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193891 CRC                   00000000 (0)\n-193895 Compressed Size       00000000 (0)\n-193899 Uncompressed Size     00000000 (0)\n-19389D Filename Length       0025 (37)\n-19389F Extra Length          0009 (9)\n-1938A1 Comment Length        0000 (0)\n-1938A3 Disk Start            0000 (0)\n-1938A5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1938A7 Ext File Attributes   00000000 (0)\n-1938AB Local Header Offset   000B909C (757916)\n-1938AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1938AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1938D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1938D6   Length              0005 (5)\n-1938D8   Flags               01 (1) 'Modification'\n-1938D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1938DD CENTRAL HEADER #207   02014B50 (33639248)\n-1938E1 Created Zip Spec      14 (20) '2.0'\n-1938E2 Created OS            00 (0) 'MS-DOS'\n-1938E3 Extract Zip Spec      14 (20) '2.0'\n-1938E4 Extract OS            00 (0) 'MS-DOS'\n-1938E5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1938E7 Compression Method    0000 (0) 'Stored'\n-1938E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1938ED CRC                   0237005F (37159007)\n-1938F1 Compressed Size       00000E61 (3681)\n-1938F5 Uncompressed Size     00000E61 (3681)\n-1938F9 Filename Length       0035 (53)\n-1938FB Extra Length          0009 (9)\n-1938FD Comment Length        0000 (0)\n-1938FF Disk Start            0000 (0)\n-193901 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193903 Ext File Attributes   00000000 (0)\n-193907 Local Header Offset   000B90E8 (757992)\n-19390B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19390B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193940 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193942   Length              0005 (5)\n-193944   Flags               01 (1) 'Modification'\n-193945   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193949 CENTRAL HEADER #208   02014B50 (33639248)\n-19394D Created Zip Spec      14 (20) '2.0'\n-19394E Created OS            00 (0) 'MS-DOS'\n-19394F Extract Zip Spec      14 (20) '2.0'\n-193950 Extract OS            00 (0) 'MS-DOS'\n-193951 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193953 Compression Method    0000 (0) 'Stored'\n-193955 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193959 CRC                   CE737695 (3463673493)\n-19395D Compressed Size       000010CC (4300)\n-193961 Uncompressed Size     000010CC (4300)\n-193965 Filename Length       003C (60)\n-193967 Extra Length          0009 (9)\n-193969 Comment Length        0000 (0)\n-19396B Disk Start            0000 (0)\n-19396D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19396F Ext File Attributes   00000000 (0)\n-193973 Local Header Offset   000B9FB5 (761781)\n-193977 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193977: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1939B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1939B5   Length              0005 (5)\n-1939B7   Flags               01 (1) 'Modification'\n-1939B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1939BC CENTRAL HEADER #209   02014B50 (33639248)\n-1939C0 Created Zip Spec      14 (20) '2.0'\n-1939C1 Created OS            00 (0) 'MS-DOS'\n-1939C2 Extract Zip Spec      14 (20) '2.0'\n-1939C3 Extract OS            00 (0) 'MS-DOS'\n-1939C4 General Purpose Flag  0000 (0)\n-1939C6 Compression Method    0000 (0) 'Stored'\n-1939C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1939CC CRC                   00000000 (0)\n-1939D0 Compressed Size       00000000 (0)\n-1939D4 Uncompressed Size     00000000 (0)\n-1939D8 Filename Length       0026 (38)\n-1939DA Extra Length          0009 (9)\n-1939DC Comment Length        0000 (0)\n-1939DE Disk Start            0000 (0)\n-1939E0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1939E2 Ext File Attributes   00000000 (0)\n-1939E6 Local Header Offset   000BB0F4 (766196)\n-1939EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1939EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193A10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193A12   Length              0005 (5)\n-193A14   Flags               01 (1) 'Modification'\n-193A15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193A19 CENTRAL HEADER #210   02014B50 (33639248)\n-193A1D Created Zip Spec      14 (20) '2.0'\n-193A1E Created OS            00 (0) 'MS-DOS'\n-193A1F Extract Zip Spec      14 (20) '2.0'\n-193A20 Extract OS            00 (0) 'MS-DOS'\n-193A21 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193A23 Compression Method    0000 (0) 'Stored'\n-193A25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193A29 CRC                   719AAFB0 (1905962928)\n-193A2D Compressed Size       00000C98 (3224)\n-193A31 Uncompressed Size     00000C98 (3224)\n-193A35 Filename Length       0037 (55)\n-193A37 Extra Length          0009 (9)\n-193A39 Comment Length        0000 (0)\n-193A3B Disk Start            0000 (0)\n-193A3D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193A3F Ext File Attributes   00000000 (0)\n-193A43 Local Header Offset   000BB141 (766273)\n-193A47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193A47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193A7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193A80   Length              0005 (5)\n-193A82   Flags               01 (1) 'Modification'\n-193A83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193A87 CENTRAL HEADER #211   02014B50 (33639248)\n-193A8B Created Zip Spec      14 (20) '2.0'\n-193A8C Created OS            00 (0) 'MS-DOS'\n-193A8D Extract Zip Spec      14 (20) '2.0'\n-193A8E Extract OS            00 (0) 'MS-DOS'\n-193A8F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193A91 Compression Method    0000 (0) 'Stored'\n-193A93 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193A97 CRC                   B7D93D08 (3084467464)\n-193A9B Compressed Size       00000CED (3309)\n-193A9F Uncompressed Size     00000CED (3309)\n-193AA3 Filename Length       003E (62)\n-193AA5 Extra Length          0009 (9)\n-193AA7 Comment Length        0000 (0)\n-193AA9 Disk Start            0000 (0)\n-193AAB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193AAD Ext File Attributes   00000000 (0)\n-193AB1 Local Header Offset   000BBE47 (769607)\n-193AB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193AB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193AF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193AF5   Length              0005 (5)\n-193AF7   Flags               01 (1) 'Modification'\n-193AF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193AFC CENTRAL HEADER #212   02014B50 (33639248)\n-193B00 Created Zip Spec      14 (20) '2.0'\n-193B01 Created OS            00 (0) 'MS-DOS'\n-193B02 Extract Zip Spec      14 (20) '2.0'\n-193B03 Extract OS            00 (0) 'MS-DOS'\n-193B04 General Purpose Flag  0000 (0)\n-193B06 Compression Method    0000 (0) 'Stored'\n-193B08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193B0C CRC                   00000000 (0)\n-193B10 Compressed Size       00000000 (0)\n-193B14 Uncompressed Size     00000000 (0)\n-193B18 Filename Length       0025 (37)\n-193B1A Extra Length          0009 (9)\n-193B1C Comment Length        0000 (0)\n-193B1E Disk Start            0000 (0)\n-193B20 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193B22 Ext File Attributes   00000000 (0)\n-193B26 Local Header Offset   000BCBA9 (773033)\n-193B2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193B2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193B4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193B51   Length              0005 (5)\n-193B53   Flags               01 (1) 'Modification'\n-193B54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193B58 CENTRAL HEADER #213   02014B50 (33639248)\n-193B5C Created Zip Spec      14 (20) '2.0'\n-193B5D Created OS            00 (0) 'MS-DOS'\n-193B5E Extract Zip Spec      14 (20) '2.0'\n-193B5F Extract OS            00 (0) 'MS-DOS'\n-193B60 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193B62 Compression Method    0000 (0) 'Stored'\n-193B64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193B68 CRC                   FD6565BB (4251280827)\n-193B6C Compressed Size       00001876 (6262)\n-193B70 Uncompressed Size     00001876 (6262)\n-193B74 Filename Length       0035 (53)\n-193B76 Extra Length          0009 (9)\n-193B78 Comment Length        0000 (0)\n-193B7A Disk Start            0000 (0)\n-193B7C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193B7E Ext File Attributes   00000000 (0)\n-193B82 Local Header Offset   000BCBF5 (773109)\n-193B86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193B86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193BBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193BBD   Length              0005 (5)\n-193BBF   Flags               01 (1) 'Modification'\n-193BC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193BC4 CENTRAL HEADER #214   02014B50 (33639248)\n-193BC8 Created Zip Spec      14 (20) '2.0'\n-193BC9 Created OS            00 (0) 'MS-DOS'\n-193BCA Extract Zip Spec      14 (20) '2.0'\n-193BCB Extract OS            00 (0) 'MS-DOS'\n-193BCC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193BCE Compression Method    0000 (0) 'Stored'\n-193BD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193BD4 CRC                   2D853131 (763703601)\n-193BD8 Compressed Size       000006EF (1775)\n-193BDC Uncompressed Size     000006EF (1775)\n-193BE0 Filename Length       003C (60)\n-193BE2 Extra Length          0009 (9)\n-193BE4 Comment Length        0000 (0)\n-193BE6 Disk Start            0000 (0)\n-193BE8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193BEA Ext File Attributes   00000000 (0)\n-193BEE Local Header Offset   000BE4D7 (779479)\n-193BF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193BF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193C2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193C30   Length              0005 (5)\n-193C32   Flags               01 (1) 'Modification'\n-193C33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193C37 CENTRAL HEADER #215   02014B50 (33639248)\n-193C3B Created Zip Spec      14 (20) '2.0'\n-193C3C Created OS            00 (0) 'MS-DOS'\n-193C3D Extract Zip Spec      14 (20) '2.0'\n-193C3E Extract OS            00 (0) 'MS-DOS'\n-193C3F General Purpose Flag  0000 (0)\n-193C41 Compression Method    0000 (0) 'Stored'\n-193C43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193C47 CRC                   00000000 (0)\n-193C4B Compressed Size       00000000 (0)\n-193C4F Uncompressed Size     00000000 (0)\n-193C53 Filename Length       0027 (39)\n-193C55 Extra Length          0009 (9)\n-193C57 Comment Length        0000 (0)\n-193C59 Disk Start            0000 (0)\n-193C5B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193C5D Ext File Attributes   00000000 (0)\n-193C61 Local Header Offset   000BEC39 (781369)\n-193C65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193C65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193C8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193C8E   Length              0005 (5)\n-193C90   Flags               01 (1) 'Modification'\n-193C91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193C95 CENTRAL HEADER #216   02014B50 (33639248)\n-193C99 Created Zip Spec      14 (20) '2.0'\n-193C9A Created OS            00 (0) 'MS-DOS'\n-193C9B Extract Zip Spec      14 (20) '2.0'\n-193C9C Extract OS            00 (0) 'MS-DOS'\n-193C9D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193C9F Compression Method    0000 (0) 'Stored'\n-193CA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193CA5 CRC                   01B8CE5D (28888669)\n-193CA9 Compressed Size       000013B5 (5045)\n-193CAD Uncompressed Size     000013B5 (5045)\n-193CB1 Filename Length       003A (58)\n-193CB3 Extra Length          0009 (9)\n-193CB5 Comment Length        0000 (0)\n-193CB7 Disk Start            0000 (0)\n-193CB9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193CBB Ext File Attributes   00000000 (0)\n-193CBF Local Header Offset   000BEC87 (781447)\n-193CC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193CC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193CFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193CFF   Length              0005 (5)\n-193D01   Flags               01 (1) 'Modification'\n-193D02   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193D06 CENTRAL HEADER #217   02014B50 (33639248)\n-193D0A Created Zip Spec      14 (20) '2.0'\n-193D0B Created OS            00 (0) 'MS-DOS'\n-193D0C Extract Zip Spec      14 (20) '2.0'\n-193D0D Extract OS            00 (0) 'MS-DOS'\n-193D0E General Purpose Flag  0000 (0)\n-193D10 Compression Method    0000 (0) 'Stored'\n-193D12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193D16 CRC                   00000000 (0)\n-193D1A Compressed Size       00000000 (0)\n-193D1E Uncompressed Size     00000000 (0)\n-193D22 Filename Length       001F (31)\n-193D24 Extra Length          0009 (9)\n-193D26 Comment Length        0000 (0)\n-193D28 Disk Start            0000 (0)\n-193D2A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193D2C Ext File Attributes   00000000 (0)\n-193D30 Local Header Offset   000C00AD (786605)\n-193D34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193D34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193D53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193D55   Length              0005 (5)\n-193D57   Flags               01 (1) 'Modification'\n-193D58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193D5C CENTRAL HEADER #218   02014B50 (33639248)\n-193D60 Created Zip Spec      14 (20) '2.0'\n-193D61 Created OS            00 (0) 'MS-DOS'\n-193D62 Extract Zip Spec      14 (20) '2.0'\n-193D63 Extract OS            00 (0) 'MS-DOS'\n-193D64 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193D66 Compression Method    0000 (0) 'Stored'\n-193D68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193D6C CRC                   EE49CD50 (3997814096)\n-193D70 Compressed Size       0000075D (1885)\n-193D74 Uncompressed Size     0000075D (1885)\n-193D78 Filename Length       002A (42)\n-193D7A Extra Length          0009 (9)\n-193D7C Comment Length        0000 (0)\n-193D7E Disk Start            0000 (0)\n-193D80 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193D82 Ext File Attributes   00000000 (0)\n-193D86 Local Header Offset   000C00F3 (786675)\n-193D8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193D8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193DB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193DB6   Length              0005 (5)\n-193DB8   Flags               01 (1) 'Modification'\n-193DB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193DBD CENTRAL HEADER #219   02014B50 (33639248)\n-193DC1 Created Zip Spec      14 (20) '2.0'\n-193DC2 Created OS            00 (0) 'MS-DOS'\n-193DC3 Extract Zip Spec      14 (20) '2.0'\n-193DC4 Extract OS            00 (0) 'MS-DOS'\n-193DC5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193DC7 Compression Method    0000 (0) 'Stored'\n-193DC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193DCD CRC                   4C723E93 (1282555539)\n-193DD1 Compressed Size       00000432 (1074)\n-193DD5 Uncompressed Size     00000432 (1074)\n-193DD9 Filename Length       0031 (49)\n-193DDB Extra Length          0009 (9)\n-193DDD Comment Length        0000 (0)\n-193DDF Disk Start            0000 (0)\n-193DE1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193DE3 Ext File Attributes   00000000 (0)\n-193DE7 Local Header Offset   000C08B1 (788657)\n-193DEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193DEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193E1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193E1E   Length              0005 (5)\n-193E20   Flags               01 (1) 'Modification'\n-193E21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193E25 CENTRAL HEADER #220   02014B50 (33639248)\n-193E29 Created Zip Spec      14 (20) '2.0'\n-193E2A Created OS            00 (0) 'MS-DOS'\n-193E2B Extract Zip Spec      14 (20) '2.0'\n-193E2C Extract OS            00 (0) 'MS-DOS'\n-193E2D General Purpose Flag  0000 (0)\n-193E2F Compression Method    0000 (0) 'Stored'\n-193E31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193E35 CRC                   00000000 (0)\n-193E39 Compressed Size       00000000 (0)\n-193E3D Uncompressed Size     00000000 (0)\n-193E41 Filename Length       0027 (39)\n-193E43 Extra Length          0009 (9)\n-193E45 Comment Length        0000 (0)\n-193E47 Disk Start            0000 (0)\n-193E49 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193E4B Ext File Attributes   00000000 (0)\n-193E4F Local Header Offset   000C0D4B (789835)\n-193E53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193E53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193E7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193E7C   Length              0005 (5)\n-193E7E   Flags               01 (1) 'Modification'\n-193E7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193E83 CENTRAL HEADER #221   02014B50 (33639248)\n-193E87 Created Zip Spec      14 (20) '2.0'\n-193E88 Created OS            00 (0) 'MS-DOS'\n-193E89 Extract Zip Spec      14 (20) '2.0'\n-193E8A Extract OS            00 (0) 'MS-DOS'\n-193E8B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193E8D Compression Method    0000 (0) 'Stored'\n-193E8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193E93 CRC                   CD3068DB (3442501851)\n-193E97 Compressed Size       000008A7 (2215)\n-193E9B Uncompressed Size     000008A7 (2215)\n-193E9F Filename Length       003D (61)\n-193EA1 Extra Length          0009 (9)\n-193EA3 Comment Length        0000 (0)\n-193EA5 Disk Start            0000 (0)\n-193EA7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193EA9 Ext File Attributes   00000000 (0)\n-193EAD Local Header Offset   000C0D99 (789913)\n-193EB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193EB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193EEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193EF0   Length              0005 (5)\n-193EF2   Flags               01 (1) 'Modification'\n-193EF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193EF7 CENTRAL HEADER #222   02014B50 (33639248)\n-193EFB Created Zip Spec      14 (20) '2.0'\n-193EFC Created OS            00 (0) 'MS-DOS'\n-193EFD Extract Zip Spec      14 (20) '2.0'\n-193EFE Extract OS            00 (0) 'MS-DOS'\n-193EFF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193F01 Compression Method    0000 (0) 'Stored'\n-193F03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193F07 CRC                   E601D6EE (3858880238)\n-193F0B Compressed Size       00000701 (1793)\n-193F0F Uncompressed Size     00000701 (1793)\n-193F13 Filename Length       003F (63)\n-193F15 Extra Length          0009 (9)\n-193F17 Comment Length        0000 (0)\n-193F19 Disk Start            0000 (0)\n-193F1B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193F1D Ext File Attributes   00000000 (0)\n-193F21 Local Header Offset   000C16B4 (792244)\n-193F25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193F25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193F64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193F66   Length              0005 (5)\n-193F68   Flags               01 (1) 'Modification'\n-193F69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193F6D CENTRAL HEADER #223   02014B50 (33639248)\n-193F71 Created Zip Spec      14 (20) '2.0'\n-193F72 Created OS            00 (0) 'MS-DOS'\n-193F73 Extract Zip Spec      14 (20) '2.0'\n-193F74 Extract OS            00 (0) 'MS-DOS'\n-193F75 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-193F77 Compression Method    0000 (0) 'Stored'\n-193F79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193F7D CRC                   577B6C79 (1467706489)\n-193F81 Compressed Size       000007D4 (2004)\n-193F85 Uncompressed Size     000007D4 (2004)\n-193F89 Filename Length       0037 (55)\n-193F8B Extra Length          0009 (9)\n-193F8D Comment Length        0000 (0)\n-193F8F Disk Start            0000 (0)\n-193F91 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-193F93 Ext File Attributes   00000000 (0)\n-193F97 Local Header Offset   000C1E2B (794155)\n-193F9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x193F9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-193FD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-193FD4   Length              0005 (5)\n-193FD6   Flags               01 (1) 'Modification'\n-193FD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-193FDB CENTRAL HEADER #224   02014B50 (33639248)\n-193FDF Created Zip Spec      14 (20) '2.0'\n-193FE0 Created OS            00 (0) 'MS-DOS'\n-193FE1 Extract Zip Spec      14 (20) '2.0'\n-193FE2 Extract OS            00 (0) 'MS-DOS'\n-193FE3 General Purpose Flag  0000 (0)\n-193FE5 Compression Method    0000 (0) 'Stored'\n-193FE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-193FEB CRC                   00000000 (0)\n-193FEF Compressed Size       00000000 (0)\n-193FF3 Uncompressed Size     00000000 (0)\n-193FF7 Filename Length       001E (30)\n-193FF9 Extra Length          0009 (9)\n-193FFB Comment Length        0000 (0)\n-193FFD Disk Start            0000 (0)\n-193FFF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194001 Ext File Attributes   00000000 (0)\n-194005 Local Header Offset   000C266D (796269)\n-194009 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194009: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194027 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194029   Length              0005 (5)\n-19402B   Flags               01 (1) 'Modification'\n-19402C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194030 CENTRAL HEADER #225   02014B50 (33639248)\n-194034 Created Zip Spec      14 (20) '2.0'\n-194035 Created OS            00 (0) 'MS-DOS'\n-194036 Extract Zip Spec      14 (20) '2.0'\n-194037 Extract OS            00 (0) 'MS-DOS'\n-194038 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19403A Compression Method    0000 (0) 'Stored'\n-19403C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194040 CRC                   BF5F9C1E (3210714142)\n-194044 Compressed Size       00000500 (1280)\n-194048 Uncompressed Size     00000500 (1280)\n-19404C Filename Length       002C (44)\n-19404E Extra Length          0009 (9)\n-194050 Comment Length        0000 (0)\n-194052 Disk Start            0000 (0)\n-194054 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194056 Ext File Attributes   00000000 (0)\n-19405A Local Header Offset   000C26B2 (796338)\n-19405E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19405E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19408A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19408C   Length              0005 (5)\n-19408E   Flags               01 (1) 'Modification'\n-19408F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194093 CENTRAL HEADER #226   02014B50 (33639248)\n-194097 Created Zip Spec      14 (20) '2.0'\n-194098 Created OS            00 (0) 'MS-DOS'\n-194099 Extract Zip Spec      14 (20) '2.0'\n-19409A Extract OS            00 (0) 'MS-DOS'\n-19409B General Purpose Flag  0000 (0)\n-19409D Compression Method    0000 (0) 'Stored'\n-19409F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1940A3 CRC                   00000000 (0)\n-1940A7 Compressed Size       00000000 (0)\n-1940AB Uncompressed Size     00000000 (0)\n-1940AF Filename Length       0026 (38)\n-1940B1 Extra Length          0009 (9)\n-1940B3 Comment Length        0000 (0)\n-1940B5 Disk Start            0000 (0)\n-1940B7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1940B9 Ext File Attributes   00000000 (0)\n-1940BD Local Header Offset   000C2C15 (797717)\n-1940C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1940C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1940E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1940E9   Length              0005 (5)\n-1940EB   Flags               01 (1) 'Modification'\n-1940EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1940F0 CENTRAL HEADER #227   02014B50 (33639248)\n-1940F4 Created Zip Spec      14 (20) '2.0'\n-1940F5 Created OS            00 (0) 'MS-DOS'\n-1940F6 Extract Zip Spec      14 (20) '2.0'\n-1940F7 Extract OS            00 (0) 'MS-DOS'\n-1940F8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1940FA Compression Method    0000 (0) 'Stored'\n-1940FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194100 CRC                   5E930431 (1586693169)\n-194104 Compressed Size       000008C7 (2247)\n-194108 Uncompressed Size     000008C7 (2247)\n-19410C Filename Length       003A (58)\n-19410E Extra Length          0009 (9)\n-194110 Comment Length        0000 (0)\n-194112 Disk Start            0000 (0)\n-194114 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194116 Ext File Attributes   00000000 (0)\n-19411A Local Header Offset   000C2C62 (797794)\n-19411E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19411E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194158 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19415A   Length              0005 (5)\n-19415C   Flags               01 (1) 'Modification'\n-19415D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194161 CENTRAL HEADER #228   02014B50 (33639248)\n-194165 Created Zip Spec      14 (20) '2.0'\n-194166 Created OS            00 (0) 'MS-DOS'\n-194167 Extract Zip Spec      14 (20) '2.0'\n-194168 Extract OS            00 (0) 'MS-DOS'\n-194169 General Purpose Flag  0000 (0)\n-19416B Compression Method    0000 (0) 'Stored'\n-19416D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194171 CRC                   00000000 (0)\n-194175 Compressed Size       00000000 (0)\n-194179 Uncompressed Size     00000000 (0)\n-19417D Filename Length       0024 (36)\n-19417F Extra Length          0009 (9)\n-194181 Comment Length        0000 (0)\n-194183 Disk Start            0000 (0)\n-194185 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194187 Ext File Attributes   00000000 (0)\n-19418B Local Header Offset   000C359A (800154)\n-19418F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19418F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1941B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1941B5   Length              0005 (5)\n-1941B7   Flags               01 (1) 'Modification'\n-1941B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1941BC CENTRAL HEADER #229   02014B50 (33639248)\n-1941C0 Created Zip Spec      14 (20) '2.0'\n-1941C1 Created OS            00 (0) 'MS-DOS'\n-1941C2 Extract Zip Spec      14 (20) '2.0'\n-1941C3 Extract OS            00 (0) 'MS-DOS'\n-1941C4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1941C6 Compression Method    0000 (0) 'Stored'\n-1941C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1941CC CRC                   54C421FF (1422139903)\n-1941D0 Compressed Size       00000739 (1849)\n-1941D4 Uncompressed Size     00000739 (1849)\n-1941D8 Filename Length       0039 (57)\n-1941DA Extra Length          0009 (9)\n-1941DC Comment Length        0000 (0)\n-1941DE Disk Start            0000 (0)\n-1941E0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1941E2 Ext File Attributes   00000000 (0)\n-1941E6 Local Header Offset   000C35E5 (800229)\n-1941EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1941EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194223 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194225   Length              0005 (5)\n-194227   Flags               01 (1) 'Modification'\n-194228   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19422C CENTRAL HEADER #230   02014B50 (33639248)\n-194230 Created Zip Spec      14 (20) '2.0'\n-194231 Created OS            00 (0) 'MS-DOS'\n-194232 Extract Zip Spec      14 (20) '2.0'\n-194233 Extract OS            00 (0) 'MS-DOS'\n-194234 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194236 Compression Method    0000 (0) 'Stored'\n-194238 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19423C CRC                   DFEE0135 (3756917045)\n-194240 Compressed Size       0000098D (2445)\n-194244 Uncompressed Size     0000098D (2445)\n-194248 Filename Length       0037 (55)\n-19424A Extra Length          0009 (9)\n-19424C Comment Length        0000 (0)\n-19424E Disk Start            0000 (0)\n-194250 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194252 Ext File Attributes   00000000 (0)\n-194256 Local Header Offset   000C3D8E (802190)\n-19425A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19425A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194291 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194293   Length              0005 (5)\n-194295   Flags               01 (1) 'Modification'\n-194296   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19429A CENTRAL HEADER #231   02014B50 (33639248)\n-19429E Created Zip Spec      14 (20) '2.0'\n-19429F Created OS            00 (0) 'MS-DOS'\n-1942A0 Extract Zip Spec      14 (20) '2.0'\n-1942A1 Extract OS            00 (0) 'MS-DOS'\n-1942A2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1942A4 Compression Method    0000 (0) 'Stored'\n-1942A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1942AA CRC                   F7472DA9 (4148637097)\n-1942AE Compressed Size       00001AF8 (6904)\n-1942B2 Uncompressed Size     00001AF8 (6904)\n-1942B6 Filename Length       003C (60)\n-1942B8 Extra Length          0009 (9)\n-1942BA Comment Length        0000 (0)\n-1942BC Disk Start            0000 (0)\n-1942BE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1942C0 Ext File Attributes   00000000 (0)\n-1942C4 Local Header Offset   000C4789 (804745)\n-1942C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1942C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194304 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194306   Length              0005 (5)\n-194308   Flags               01 (1) 'Modification'\n-194309   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19430D CENTRAL HEADER #232   02014B50 (33639248)\n-194311 Created Zip Spec      14 (20) '2.0'\n-194312 Created OS            00 (0) 'MS-DOS'\n-194313 Extract Zip Spec      14 (20) '2.0'\n-194314 Extract OS            00 (0) 'MS-DOS'\n-194315 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194317 Compression Method    0000 (0) 'Stored'\n-194319 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19431D CRC                   17B25B54 (397564756)\n-194321 Compressed Size       00001558 (5464)\n-194325 Uncompressed Size     00001558 (5464)\n-194329 Filename Length       003F (63)\n-19432B Extra Length          0009 (9)\n-19432D Comment Length        0000 (0)\n-19432F Disk Start            0000 (0)\n-194331 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194333 Ext File Attributes   00000000 (0)\n-194337 Local Header Offset   000C62F4 (811764)\n-19433B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19433B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19437A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19437C   Length              0005 (5)\n-19437E   Flags               01 (1) 'Modification'\n-19437F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194383 CENTRAL HEADER #233   02014B50 (33639248)\n-194387 Created Zip Spec      14 (20) '2.0'\n-194388 Created OS            00 (0) 'MS-DOS'\n-194389 Extract Zip Spec      14 (20) '2.0'\n-19438A Extract OS            00 (0) 'MS-DOS'\n-19438B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19438D Compression Method    0000 (0) 'Stored'\n-19438F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194393 CRC                   9C1B711A (2619044122)\n-194397 Compressed Size       0000065E (1630)\n-19439B Uncompressed Size     0000065E (1630)\n-19439F Filename Length       0043 (67)\n-1943A1 Extra Length          0009 (9)\n-1943A3 Comment Length        0000 (0)\n-1943A5 Disk Start            0000 (0)\n-1943A7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1943A9 Ext File Attributes   00000000 (0)\n-1943AD Local Header Offset   000C78C2 (817346)\n-1943B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1943B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1943F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1943F6   Length              0005 (5)\n-1943F8   Flags               01 (1) 'Modification'\n-1943F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1943FD CENTRAL HEADER #234   02014B50 (33639248)\n-194401 Created Zip Spec      14 (20) '2.0'\n-194402 Created OS            00 (0) 'MS-DOS'\n-194403 Extract Zip Spec      14 (20) '2.0'\n-194404 Extract OS            00 (0) 'MS-DOS'\n-194405 General Purpose Flag  0000 (0)\n-194407 Compression Method    0000 (0) 'Stored'\n-194409 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19440D CRC                   00000000 (0)\n-194411 Compressed Size       00000000 (0)\n-194415 Uncompressed Size     00000000 (0)\n-194419 Filename Length       0023 (35)\n-19441B Extra Length          0009 (9)\n-19441D Comment Length        0000 (0)\n-19441F Disk Start            0000 (0)\n-194421 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194423 Ext File Attributes   00000000 (0)\n-194427 Local Header Offset   000C7F9A (819098)\n-19442B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19442B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19444E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194450   Length              0005 (5)\n-194452   Flags               01 (1) 'Modification'\n-194453   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194457 CENTRAL HEADER #235   02014B50 (33639248)\n-19445B Created Zip Spec      14 (20) '2.0'\n-19445C Created OS            00 (0) 'MS-DOS'\n-19445D Extract Zip Spec      14 (20) '2.0'\n-19445E Extract OS            00 (0) 'MS-DOS'\n-19445F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194461 Compression Method    0000 (0) 'Stored'\n-194463 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194467 CRC                   8247BF31 (2185740081)\n-19446B Compressed Size       0000054B (1355)\n-19446F Uncompressed Size     0000054B (1355)\n-194473 Filename Length       0032 (50)\n-194475 Extra Length          0009 (9)\n-194477 Comment Length        0000 (0)\n-194479 Disk Start            0000 (0)\n-19447B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19447D Ext File Attributes   00000000 (0)\n-194481 Local Header Offset   000C7FE4 (819172)\n-194485 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194485: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1944B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1944B9   Length              0005 (5)\n-1944BB   Flags               01 (1) 'Modification'\n-1944BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1944C0 CENTRAL HEADER #236   02014B50 (33639248)\n-1944C4 Created Zip Spec      14 (20) '2.0'\n-1944C5 Created OS            00 (0) 'MS-DOS'\n-1944C6 Extract Zip Spec      14 (20) '2.0'\n-1944C7 Extract OS            00 (0) 'MS-DOS'\n-1944C8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1944CA Compression Method    0000 (0) 'Stored'\n-1944CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1944D0 CRC                   8DDA963E (2379912766)\n-1944D4 Compressed Size       00001A95 (6805)\n-1944D8 Uncompressed Size     00001A95 (6805)\n-1944DC Filename Length       003A (58)\n-1944DE Extra Length          0009 (9)\n-1944E0 Comment Length        0000 (0)\n-1944E2 Disk Start            0000 (0)\n-1944E4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1944E6 Ext File Attributes   00000000 (0)\n-1944EA Local Header Offset   000C8598 (820632)\n-1944EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1944EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194528 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19452A   Length              0005 (5)\n-19452C   Flags               01 (1) 'Modification'\n-19452D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194531 CENTRAL HEADER #237   02014B50 (33639248)\n-194535 Created Zip Spec      14 (20) '2.0'\n-194536 Created OS            00 (0) 'MS-DOS'\n-194537 Extract Zip Spec      14 (20) '2.0'\n-194538 Extract OS            00 (0) 'MS-DOS'\n-194539 General Purpose Flag  0000 (0)\n-19453B Compression Method    0000 (0) 'Stored'\n-19453D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194541 CRC                   00000000 (0)\n-194545 Compressed Size       00000000 (0)\n-194549 Uncompressed Size     00000000 (0)\n-19454D Filename Length       002E (46)\n-19454F Extra Length          0009 (9)\n-194551 Comment Length        0000 (0)\n-194553 Disk Start            0000 (0)\n-194555 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194557 Ext File Attributes   00000000 (0)\n-19455B Local Header Offset   000CA09E (827550)\n-19455F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19455F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19458D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19458F   Length              0005 (5)\n-194591   Flags               01 (1) 'Modification'\n-194592   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194596 CENTRAL HEADER #238   02014B50 (33639248)\n-19459A Created Zip Spec      14 (20) '2.0'\n-19459B Created OS            00 (0) 'MS-DOS'\n-19459C Extract Zip Spec      14 (20) '2.0'\n-19459D Extract OS            00 (0) 'MS-DOS'\n-19459E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1945A0 Compression Method    0000 (0) 'Stored'\n-1945A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1945A6 CRC                   A445CFD0 (2756038608)\n-1945AA Compressed Size       0000090C (2316)\n-1945AE Uncompressed Size     0000090C (2316)\n-1945B2 Filename Length       004D (77)\n-1945B4 Extra Length          0009 (9)\n-1945B6 Comment Length        0000 (0)\n-1945B8 Disk Start            0000 (0)\n-1945BA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1945BC Ext File Attributes   00000000 (0)\n-1945C0 Local Header Offset   000CA0F3 (827635)\n-1945C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1945C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194611 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194613   Length              0005 (5)\n-194615   Flags               01 (1) 'Modification'\n-194616   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19461A CENTRAL HEADER #239   02014B50 (33639248)\n-19461E Created Zip Spec      14 (20) '2.0'\n-19461F Created OS            00 (0) 'MS-DOS'\n-194620 Extract Zip Spec      14 (20) '2.0'\n-194621 Extract OS            00 (0) 'MS-DOS'\n-194622 General Purpose Flag  0000 (0)\n-194624 Compression Method    0000 (0) 'Stored'\n-194626 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19462A CRC                   00000000 (0)\n-19462E Compressed Size       00000000 (0)\n-194632 Uncompressed Size     00000000 (0)\n-194636 Filename Length       0029 (41)\n-194638 Extra Length          0009 (9)\n-19463A Comment Length        0000 (0)\n-19463C Disk Start            0000 (0)\n-19463E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194640 Ext File Attributes   00000000 (0)\n-194644 Local Header Offset   000CAA83 (830083)\n-194648 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194648: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194671 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194673   Length              0005 (5)\n-194675   Flags               01 (1) 'Modification'\n-194676   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19467A CENTRAL HEADER #240   02014B50 (33639248)\n-19467E Created Zip Spec      14 (20) '2.0'\n-19467F Created OS            00 (0) 'MS-DOS'\n-194680 Extract Zip Spec      14 (20) '2.0'\n-194681 Extract OS            00 (0) 'MS-DOS'\n-194682 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194684 Compression Method    0000 (0) 'Stored'\n-194686 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19468A CRC                   0A4E202C (172892204)\n-19468E Compressed Size       000004DB (1243)\n-194692 Uncompressed Size     000004DB (1243)\n-194696 Filename Length       0046 (70)\n-194698 Extra Length          0009 (9)\n-19469A Comment Length        0000 (0)\n-19469C Disk Start            0000 (0)\n-19469E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1946A0 Ext File Attributes   00000000 (0)\n-1946A4 Local Header Offset   000CAAD3 (830163)\n-1946A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1946A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1946EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1946F0   Length              0005 (5)\n-1946F2   Flags               01 (1) 'Modification'\n-1946F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1946F7 CENTRAL HEADER #241   02014B50 (33639248)\n-1946FB Created Zip Spec      14 (20) '2.0'\n-1946FC Created OS            00 (0) 'MS-DOS'\n-1946FD Extract Zip Spec      14 (20) '2.0'\n-1946FE Extract OS            00 (0) 'MS-DOS'\n-1946FF General Purpose Flag  0000 (0)\n-194701 Compression Method    0000 (0) 'Stored'\n-194703 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194707 CRC                   00000000 (0)\n-19470B Compressed Size       00000000 (0)\n-19470F Uncompressed Size     00000000 (0)\n-194713 Filename Length       002B (43)\n-194715 Extra Length          0009 (9)\n-194717 Comment Length        0000 (0)\n-194719 Disk Start            0000 (0)\n-19471B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19471D Ext File Attributes   00000000 (0)\n-194721 Local Header Offset   000CB02B (831531)\n-194725 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194725: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194750 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194752   Length              0005 (5)\n-194754   Flags               01 (1) 'Modification'\n-194755   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194759 CENTRAL HEADER #242   02014B50 (33639248)\n-19475D Created Zip Spec      14 (20) '2.0'\n-19475E Created OS            00 (0) 'MS-DOS'\n-19475F Extract Zip Spec      14 (20) '2.0'\n-194760 Extract OS            00 (0) 'MS-DOS'\n-194761 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194763 Compression Method    0000 (0) 'Stored'\n-194765 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194769 CRC                   6D3F9D1E (1832885534)\n-19476D Compressed Size       00001E30 (7728)\n-194771 Uncompressed Size     00001E30 (7728)\n-194775 Filename Length       0049 (73)\n-194777 Extra Length          0009 (9)\n-194779 Comment Length        0000 (0)\n-19477B Disk Start            0000 (0)\n-19477D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19477F Ext File Attributes   00000000 (0)\n-194783 Local Header Offset   000CB07D (831613)\n-194787 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194787: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1947D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1947D2   Length              0005 (5)\n-1947D4   Flags               01 (1) 'Modification'\n-1947D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1947D9 CENTRAL HEADER #243   02014B50 (33639248)\n-1947DD Created Zip Spec      14 (20) '2.0'\n-1947DE Created OS            00 (0) 'MS-DOS'\n-1947DF Extract Zip Spec      14 (20) '2.0'\n-1947E0 Extract OS            00 (0) 'MS-DOS'\n-1947E1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1947E3 Compression Method    0000 (0) 'Stored'\n-1947E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1947E9 CRC                   355480AB (894730411)\n-1947ED Compressed Size       00000919 (2329)\n-1947F1 Uncompressed Size     00000919 (2329)\n-1947F5 Filename Length       0042 (66)\n-1947F7 Extra Length          0009 (9)\n-1947F9 Comment Length        0000 (0)\n-1947FB Disk Start            0000 (0)\n-1947FD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1947FF Ext File Attributes   00000000 (0)\n-194803 Local Header Offset   000CCF2D (839469)\n-194807 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194807: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194849 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19484B   Length              0005 (5)\n-19484D   Flags               01 (1) 'Modification'\n-19484E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194852 CENTRAL HEADER #244   02014B50 (33639248)\n-194856 Created Zip Spec      14 (20) '2.0'\n-194857 Created OS            00 (0) 'MS-DOS'\n-194858 Extract Zip Spec      14 (20) '2.0'\n-194859 Extract OS            00 (0) 'MS-DOS'\n-19485A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19485C Compression Method    0000 (0) 'Stored'\n-19485E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194862 CRC                   47FCDE13 (1207754259)\n-194866 Compressed Size       000007FA (2042)\n-19486A Uncompressed Size     000007FA (2042)\n-19486E Filename Length       0034 (52)\n-194870 Extra Length          0009 (9)\n-194872 Comment Length        0000 (0)\n-194874 Disk Start            0000 (0)\n-194876 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194878 Ext File Attributes   00000000 (0)\n-19487C Local Header Offset   000CD8BF (841919)\n-194880 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194880: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1948B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1948B6   Length              0005 (5)\n-1948B8   Flags               01 (1) 'Modification'\n-1948B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1948BD CENTRAL HEADER #245   02014B50 (33639248)\n-1948C1 Created Zip Spec      14 (20) '2.0'\n-1948C2 Created OS            00 (0) 'MS-DOS'\n-1948C3 Extract Zip Spec      14 (20) '2.0'\n-1948C4 Extract OS            00 (0) 'MS-DOS'\n-1948C5 General Purpose Flag  0000 (0)\n-1948C7 Compression Method    0000 (0) 'Stored'\n-1948C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1948CD CRC                   00000000 (0)\n-1948D1 Compressed Size       00000000 (0)\n-1948D5 Uncompressed Size     00000000 (0)\n-1948D9 Filename Length       002B (43)\n-1948DB Extra Length          0009 (9)\n-1948DD Comment Length        0000 (0)\n-1948DF Disk Start            0000 (0)\n-1948E1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1948E3 Ext File Attributes   00000000 (0)\n-1948E7 Local Header Offset   000CE124 (844068)\n-1948EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1948EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194916 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194918   Length              0005 (5)\n-19491A   Flags               01 (1) 'Modification'\n-19491B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19491F CENTRAL HEADER #246   02014B50 (33639248)\n-194923 Created Zip Spec      14 (20) '2.0'\n-194924 Created OS            00 (0) 'MS-DOS'\n-194925 Extract Zip Spec      14 (20) '2.0'\n-194926 Extract OS            00 (0) 'MS-DOS'\n-194927 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194929 Compression Method    0000 (0) 'Stored'\n-19492B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19492F CRC                   A9E4FF87 (2850357127)\n-194933 Compressed Size       00001767 (5991)\n-194937 Uncompressed Size     00001767 (5991)\n-19493B Filename Length       0045 (69)\n-19493D Extra Length          0009 (9)\n-19493F Comment Length        0000 (0)\n-194941 Disk Start            0000 (0)\n-194943 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194945 Ext File Attributes   00000000 (0)\n-194949 Local Header Offset   000CE176 (844150)\n-19494D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19494D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194992 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194994   Length              0005 (5)\n-194996   Flags               01 (1) 'Modification'\n-194997   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19499B CENTRAL HEADER #247   02014B50 (33639248)\n-19499F Created Zip Spec      14 (20) '2.0'\n-1949A0 Created OS            00 (0) 'MS-DOS'\n-1949A1 Extract Zip Spec      14 (20) '2.0'\n-1949A2 Extract OS            00 (0) 'MS-DOS'\n-1949A3 General Purpose Flag  0000 (0)\n-1949A5 Compression Method    0000 (0) 'Stored'\n-1949A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1949AB CRC                   00000000 (0)\n-1949AF Compressed Size       00000000 (0)\n-1949B3 Uncompressed Size     00000000 (0)\n-1949B7 Filename Length       0032 (50)\n-1949B9 Extra Length          0009 (9)\n-1949BB Comment Length        0000 (0)\n-1949BD Disk Start            0000 (0)\n-1949BF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1949C1 Ext File Attributes   00000000 (0)\n-1949C5 Local Header Offset   000CF959 (850265)\n-1949C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1949C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1949FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1949FD   Length              0005 (5)\n-1949FF   Flags               01 (1) 'Modification'\n-194A00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194A04 CENTRAL HEADER #248   02014B50 (33639248)\n-194A08 Created Zip Spec      14 (20) '2.0'\n-194A09 Created OS            00 (0) 'MS-DOS'\n-194A0A Extract Zip Spec      14 (20) '2.0'\n-194A0B Extract OS            00 (0) 'MS-DOS'\n-194A0C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194A0E Compression Method    0000 (0) 'Stored'\n-194A10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194A14 CRC                   7C2CDC15 (2083314709)\n-194A18 Compressed Size       00000C7D (3197)\n-194A1C Uncompressed Size     00000C7D (3197)\n-194A20 Filename Length       0047 (71)\n-194A22 Extra Length          0009 (9)\n-194A24 Comment Length        0000 (0)\n-194A26 Disk Start            0000 (0)\n-194A28 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194A2A Ext File Attributes   00000000 (0)\n-194A2E Local Header Offset   000CF9B2 (850354)\n-194A32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194A32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194A79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194A7B   Length              0005 (5)\n-194A7D   Flags               01 (1) 'Modification'\n-194A7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194A82 CENTRAL HEADER #249   02014B50 (33639248)\n-194A86 Created Zip Spec      14 (20) '2.0'\n-194A87 Created OS            00 (0) 'MS-DOS'\n-194A88 Extract Zip Spec      14 (20) '2.0'\n-194A89 Extract OS            00 (0) 'MS-DOS'\n-194A8A General Purpose Flag  0000 (0)\n-194A8C Compression Method    0000 (0) 'Stored'\n-194A8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194A92 CRC                   00000000 (0)\n-194A96 Compressed Size       00000000 (0)\n-194A9A Uncompressed Size     00000000 (0)\n-194A9E Filename Length       0031 (49)\n-194AA0 Extra Length          0009 (9)\n-194AA2 Comment Length        0000 (0)\n-194AA4 Disk Start            0000 (0)\n-194AA6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194AA8 Ext File Attributes   00000000 (0)\n-194AAC Local Header Offset   000D06AD (853677)\n-194AB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194AB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194AE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194AE3   Length              0005 (5)\n-194AE5   Flags               01 (1) 'Modification'\n-194AE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194AEA CENTRAL HEADER #250   02014B50 (33639248)\n-194AEE Created Zip Spec      14 (20) '2.0'\n-194AEF Created OS            00 (0) 'MS-DOS'\n-194AF0 Extract Zip Spec      14 (20) '2.0'\n-194AF1 Extract OS            00 (0) 'MS-DOS'\n-194AF2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194AF4 Compression Method    0000 (0) 'Stored'\n-194AF6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194AFA CRC                   DF3FC6E9 (3745498857)\n-194AFE Compressed Size       00000BC1 (3009)\n-194B02 Uncompressed Size     00000BC1 (3009)\n-194B06 Filename Length       0045 (69)\n-194B08 Extra Length          0009 (9)\n-194B0A Comment Length        0000 (0)\n-194B0C Disk Start            0000 (0)\n-194B0E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194B10 Ext File Attributes   00000000 (0)\n-194B14 Local Header Offset   000D0705 (853765)\n-194B18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194B18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194B5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194B5F   Length              0005 (5)\n-194B61   Flags               01 (1) 'Modification'\n-194B62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194B66 CENTRAL HEADER #251   02014B50 (33639248)\n-194B6A Created Zip Spec      14 (20) '2.0'\n-194B6B Created OS            00 (0) 'MS-DOS'\n-194B6C Extract Zip Spec      14 (20) '2.0'\n-194B6D Extract OS            00 (0) 'MS-DOS'\n-194B6E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194B70 Compression Method    0000 (0) 'Stored'\n-194B72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194B76 CRC                   B7E8049A (3085436058)\n-194B7A Compressed Size       00000CBE (3262)\n-194B7E Uncompressed Size     00000CBE (3262)\n-194B82 Filename Length       004D (77)\n-194B84 Extra Length          0009 (9)\n-194B86 Comment Length        0000 (0)\n-194B88 Disk Start            0000 (0)\n-194B8A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194B8C Ext File Attributes   00000000 (0)\n-194B90 Local Header Offset   000D1342 (856898)\n-194B94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194B94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194BE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194BE3   Length              0005 (5)\n-194BE5   Flags               01 (1) 'Modification'\n-194BE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194BEA CENTRAL HEADER #252   02014B50 (33639248)\n-194BEE Created Zip Spec      14 (20) '2.0'\n-194BEF Created OS            00 (0) 'MS-DOS'\n-194BF0 Extract Zip Spec      14 (20) '2.0'\n-194BF1 Extract OS            00 (0) 'MS-DOS'\n-194BF2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194BF4 Compression Method    0000 (0) 'Stored'\n-194BF6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194BFA CRC                   365FEBC7 (912255943)\n-194BFE Compressed Size       00000B87 (2951)\n-194C02 Uncompressed Size     00000B87 (2951)\n-194C06 Filename Length       003F (63)\n-194C08 Extra Length          0009 (9)\n-194C0A Comment Length        0000 (0)\n-194C0C Disk Start            0000 (0)\n-194C0E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194C10 Ext File Attributes   00000000 (0)\n-194C14 Local Header Offset   000D2084 (860292)\n-194C18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194C18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194C57 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194C59   Length              0005 (5)\n-194C5B   Flags               01 (1) 'Modification'\n-194C5C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194C60 CENTRAL HEADER #253   02014B50 (33639248)\n-194C64 Created Zip Spec      14 (20) '2.0'\n-194C65 Created OS            00 (0) 'MS-DOS'\n-194C66 Extract Zip Spec      14 (20) '2.0'\n-194C67 Extract OS            00 (0) 'MS-DOS'\n-194C68 General Purpose Flag  0000 (0)\n-194C6A Compression Method    0000 (0) 'Stored'\n-194C6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194C70 CRC                   00000000 (0)\n-194C74 Compressed Size       00000000 (0)\n-194C78 Uncompressed Size     00000000 (0)\n-194C7C Filename Length       0031 (49)\n-194C7E Extra Length          0009 (9)\n-194C80 Comment Length        0000 (0)\n-194C82 Disk Start            0000 (0)\n-194C84 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194C86 Ext File Attributes   00000000 (0)\n-194C8A Local Header Offset   000D2C81 (863361)\n-194C8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194C8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194CBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194CC1   Length              0005 (5)\n-194CC3   Flags               01 (1) 'Modification'\n-194CC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194CC8 CENTRAL HEADER #254   02014B50 (33639248)\n-194CCC Created Zip Spec      14 (20) '2.0'\n-194CCD Created OS            00 (0) 'MS-DOS'\n-194CCE Extract Zip Spec      14 (20) '2.0'\n-194CCF Extract OS            00 (0) 'MS-DOS'\n-194CD0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194CD2 Compression Method    0000 (0) 'Stored'\n-194CD4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194CD8 CRC                   3EDDC0EF (1054720239)\n-194CDC Compressed Size       00000AA3 (2723)\n-194CE0 Uncompressed Size     00000AA3 (2723)\n-194CE4 Filename Length       0045 (69)\n-194CE6 Extra Length          0009 (9)\n-194CE8 Comment Length        0000 (0)\n-194CEA Disk Start            0000 (0)\n-194CEC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194CEE Ext File Attributes   00000000 (0)\n-194CF2 Local Header Offset   000D2CD9 (863449)\n-194CF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194CF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194D3B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194D3D   Length              0005 (5)\n-194D3F   Flags               01 (1) 'Modification'\n-194D40   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194D44 CENTRAL HEADER #255   02014B50 (33639248)\n-194D48 Created Zip Spec      14 (20) '2.0'\n-194D49 Created OS            00 (0) 'MS-DOS'\n-194D4A Extract Zip Spec      14 (20) '2.0'\n-194D4B Extract OS            00 (0) 'MS-DOS'\n-194D4C General Purpose Flag  0000 (0)\n-194D4E Compression Method    0000 (0) 'Stored'\n-194D50 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194D54 CRC                   00000000 (0)\n-194D58 Compressed Size       00000000 (0)\n-194D5C Uncompressed Size     00000000 (0)\n-194D60 Filename Length       0033 (51)\n-194D62 Extra Length          0009 (9)\n-194D64 Comment Length        0000 (0)\n-194D66 Disk Start            0000 (0)\n-194D68 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194D6A Ext File Attributes   00000000 (0)\n-194D6E Local Header Offset   000D37F8 (866296)\n-194D72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194D72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194DA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194DA7   Length              0005 (5)\n-194DA9   Flags               01 (1) 'Modification'\n-194DAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194DAE CENTRAL HEADER #256   02014B50 (33639248)\n-194DB2 Created Zip Spec      14 (20) '2.0'\n-194DB3 Created OS            00 (0) 'MS-DOS'\n-194DB4 Extract Zip Spec      14 (20) '2.0'\n-194DB5 Extract OS            00 (0) 'MS-DOS'\n-194DB6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194DB8 Compression Method    0000 (0) 'Stored'\n-194DBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194DBE CRC                   25691E02 (627645954)\n-194DC2 Compressed Size       00000B75 (2933)\n-194DC6 Uncompressed Size     00000B75 (2933)\n-194DCA Filename Length       0049 (73)\n-194DCC Extra Length          0009 (9)\n-194DCE Comment Length        0000 (0)\n-194DD0 Disk Start            0000 (0)\n-194DD2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194DD4 Ext File Attributes   00000000 (0)\n-194DD8 Local Header Offset   000D3852 (866386)\n-194DDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194DDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194E25 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194E27   Length              0005 (5)\n-194E29   Flags               01 (1) 'Modification'\n-194E2A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194E2E CENTRAL HEADER #257   02014B50 (33639248)\n-194E32 Created Zip Spec      14 (20) '2.0'\n-194E33 Created OS            00 (0) 'MS-DOS'\n-194E34 Extract Zip Spec      14 (20) '2.0'\n-194E35 Extract OS            00 (0) 'MS-DOS'\n-194E36 General Purpose Flag  0000 (0)\n-194E38 Compression Method    0000 (0) 'Stored'\n-194E3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194E3E CRC                   00000000 (0)\n-194E42 Compressed Size       00000000 (0)\n-194E46 Uncompressed Size     00000000 (0)\n-194E4A Filename Length       001E (30)\n-194E4C Extra Length          0009 (9)\n-194E4E Comment Length        0000 (0)\n-194E50 Disk Start            0000 (0)\n-194E52 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194E54 Ext File Attributes   00000000 (0)\n-194E58 Local Header Offset   000D4447 (869447)\n-194E5C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194E5C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194E7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194E7C   Length              0005 (5)\n-194E7E   Flags               01 (1) 'Modification'\n-194E7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194E83 CENTRAL HEADER #258   02014B50 (33639248)\n-194E87 Created Zip Spec      14 (20) '2.0'\n-194E88 Created OS            00 (0) 'MS-DOS'\n-194E89 Extract Zip Spec      14 (20) '2.0'\n-194E8A Extract OS            00 (0) 'MS-DOS'\n-194E8B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194E8D Compression Method    0000 (0) 'Stored'\n-194E8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194E93 CRC                   15C91CF2 (365501682)\n-194E97 Compressed Size       000079B9 (31161)\n-194E9B Uncompressed Size     000079B9 (31161)\n-194E9F Filename Length       0033 (51)\n-194EA1 Extra Length          0009 (9)\n-194EA3 Comment Length        0000 (0)\n-194EA5 Disk Start            0000 (0)\n-194EA7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194EA9 Ext File Attributes   00000000 (0)\n-194EAD Local Header Offset   000D448C (869516)\n-194EB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194EB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194EE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194EE6   Length              0005 (5)\n-194EE8   Flags               01 (1) 'Modification'\n-194EE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194EED CENTRAL HEADER #259   02014B50 (33639248)\n-194EF1 Created Zip Spec      14 (20) '2.0'\n-194EF2 Created OS            00 (0) 'MS-DOS'\n-194EF3 Extract Zip Spec      14 (20) '2.0'\n-194EF4 Extract OS            00 (0) 'MS-DOS'\n-194EF5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194EF7 Compression Method    0000 (0) 'Stored'\n-194EF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194EFD CRC                   896B8386 (2305524614)\n-194F01 Compressed Size       0000069C (1692)\n-194F05 Uncompressed Size     0000069C (1692)\n-194F09 Filename Length       002A (42)\n-194F0B Extra Length          0009 (9)\n-194F0D Comment Length        0000 (0)\n-194F0F Disk Start            0000 (0)\n-194F11 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194F13 Ext File Attributes   00000000 (0)\n-194F17 Local Header Offset   000DBEAF (900783)\n-194F1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194F1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194F45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194F47   Length              0005 (5)\n-194F49   Flags               01 (1) 'Modification'\n-194F4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194F4E CENTRAL HEADER #260   02014B50 (33639248)\n-194F52 Created Zip Spec      14 (20) '2.0'\n-194F53 Created OS            00 (0) 'MS-DOS'\n-194F54 Extract Zip Spec      14 (20) '2.0'\n-194F55 Extract OS            00 (0) 'MS-DOS'\n-194F56 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194F58 Compression Method    0000 (0) 'Stored'\n-194F5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194F5E CRC                   2D8D7FE9 (764248041)\n-194F62 Compressed Size       00000769 (1897)\n-194F66 Uncompressed Size     00000769 (1897)\n-194F6A Filename Length       0028 (40)\n-194F6C Extra Length          0009 (9)\n-194F6E Comment Length        0000 (0)\n-194F70 Disk Start            0000 (0)\n-194F72 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194F74 Ext File Attributes   00000000 (0)\n-194F78 Local Header Offset   000DC5AC (902572)\n-194F7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194F7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-194FA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-194FA6   Length              0005 (5)\n-194FA8   Flags               01 (1) 'Modification'\n-194FA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-194FAD CENTRAL HEADER #261   02014B50 (33639248)\n-194FB1 Created Zip Spec      14 (20) '2.0'\n-194FB2 Created OS            00 (0) 'MS-DOS'\n-194FB3 Extract Zip Spec      14 (20) '2.0'\n-194FB4 Extract OS            00 (0) 'MS-DOS'\n-194FB5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-194FB7 Compression Method    0000 (0) 'Stored'\n-194FB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-194FBD CRC                   E9761FB8 (3916832696)\n-194FC1 Compressed Size       00000497 (1175)\n-194FC5 Uncompressed Size     00000497 (1175)\n-194FC9 Filename Length       002C (44)\n-194FCB Extra Length          0009 (9)\n-194FCD Comment Length        0000 (0)\n-194FCF Disk Start            0000 (0)\n-194FD1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-194FD3 Ext File Attributes   00000000 (0)\n-194FD7 Local Header Offset   000DCD74 (904564)\n-194FDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x194FDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195007 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195009   Length              0005 (5)\n-19500B   Flags               01 (1) 'Modification'\n-19500C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195010 CENTRAL HEADER #262   02014B50 (33639248)\n-195014 Created Zip Spec      14 (20) '2.0'\n-195015 Created OS            00 (0) 'MS-DOS'\n-195016 Extract Zip Spec      14 (20) '2.0'\n-195017 Extract OS            00 (0) 'MS-DOS'\n-195018 General Purpose Flag  0000 (0)\n-19501A Compression Method    0000 (0) 'Stored'\n-19501C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195020 CRC                   00000000 (0)\n-195024 Compressed Size       00000000 (0)\n-195028 Uncompressed Size     00000000 (0)\n-19502C Filename Length       001E (30)\n-19502E Extra Length          0009 (9)\n-195030 Comment Length        0000 (0)\n-195032 Disk Start            0000 (0)\n-195034 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195036 Ext File Attributes   00000000 (0)\n-19503A Local Header Offset   000DD26E (905838)\n-19503E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19503E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19505C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19505E   Length              0005 (5)\n-195060   Flags               01 (1) 'Modification'\n-195061   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195065 CENTRAL HEADER #263   02014B50 (33639248)\n-195069 Created Zip Spec      14 (20) '2.0'\n-19506A Created OS            00 (0) 'MS-DOS'\n-19506B Extract Zip Spec      14 (20) '2.0'\n-19506C Extract OS            00 (0) 'MS-DOS'\n-19506D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19506F Compression Method    0000 (0) 'Stored'\n-195071 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195075 CRC                   24647E40 (610565696)\n-195079 Compressed Size       00005305 (21253)\n-19507D Uncompressed Size     00005305 (21253)\n-195081 Filename Length       0032 (50)\n-195083 Extra Length          0009 (9)\n-195085 Comment Length        0000 (0)\n-195087 Disk Start            0000 (0)\n-195089 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19508B Ext File Attributes   00000000 (0)\n-19508F Local Header Offset   000DD2B3 (905907)\n-195093 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195093: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1950C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1950C7   Length              0005 (5)\n-1950C9   Flags               01 (1) 'Modification'\n-1950CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1950CE CENTRAL HEADER #264   02014B50 (33639248)\n-1950D2 Created Zip Spec      14 (20) '2.0'\n-1950D3 Created OS            00 (0) 'MS-DOS'\n-1950D4 Extract Zip Spec      14 (20) '2.0'\n-1950D5 Extract OS            00 (0) 'MS-DOS'\n-1950D6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1950D8 Compression Method    0000 (0) 'Stored'\n-1950DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1950DE CRC                   9612E24D (2517819981)\n-1950E2 Compressed Size       00000936 (2358)\n-1950E6 Uncompressed Size     00000936 (2358)\n-1950EA Filename Length       002D (45)\n-1950EC Extra Length          0009 (9)\n-1950EE Comment Length        0000 (0)\n-1950F0 Disk Start            0000 (0)\n-1950F2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1950F4 Ext File Attributes   00000000 (0)\n-1950F8 Local Header Offset   000E2621 (927265)\n-1950FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1950FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195129 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19512B   Length              0005 (5)\n-19512D   Flags               01 (1) 'Modification'\n-19512E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195132 CENTRAL HEADER #265   02014B50 (33639248)\n-195136 Created Zip Spec      14 (20) '2.0'\n-195137 Created OS            00 (0) 'MS-DOS'\n-195138 Extract Zip Spec      14 (20) '2.0'\n-195139 Extract OS            00 (0) 'MS-DOS'\n-19513A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19513C Compression Method    0000 (0) 'Stored'\n-19513E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195142 CRC                   40170699 (1075250841)\n-195146 Compressed Size       0000059E (1438)\n-19514A Uncompressed Size     0000059E (1438)\n-19514E Filename Length       0029 (41)\n-195150 Extra Length          0009 (9)\n-195152 Comment Length        0000 (0)\n-195154 Disk Start            0000 (0)\n-195156 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195158 Ext File Attributes   00000000 (0)\n-19515C Local Header Offset   000E2FBB (929723)\n-195160 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195160: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195189 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19518B   Length              0005 (5)\n-19518D   Flags               01 (1) 'Modification'\n-19518E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195192 CENTRAL HEADER #266   02014B50 (33639248)\n-195196 Created Zip Spec      14 (20) '2.0'\n-195197 Created OS            00 (0) 'MS-DOS'\n-195198 Extract Zip Spec      14 (20) '2.0'\n-195199 Extract OS            00 (0) 'MS-DOS'\n-19519A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19519C Compression Method    0000 (0) 'Stored'\n-19519E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1951A2 CRC                   A604EAF8 (2785340152)\n-1951A6 Compressed Size       00001249 (4681)\n-1951AA Uncompressed Size     00001249 (4681)\n-1951AE Filename Length       0038 (56)\n-1951B0 Extra Length          0009 (9)\n-1951B2 Comment Length        0000 (0)\n-1951B4 Disk Start            0000 (0)\n-1951B6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1951B8 Ext File Attributes   00000000 (0)\n-1951BC Local Header Offset   000E35B9 (931257)\n-1951C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1951C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1951F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1951FA   Length              0005 (5)\n-1951FC   Flags               01 (1) 'Modification'\n-1951FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195201 CENTRAL HEADER #267   02014B50 (33639248)\n-195205 Created Zip Spec      14 (20) '2.0'\n-195206 Created OS            00 (0) 'MS-DOS'\n-195207 Extract Zip Spec      14 (20) '2.0'\n-195208 Extract OS            00 (0) 'MS-DOS'\n-195209 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19520B Compression Method    0000 (0) 'Stored'\n-19520D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195211 CRC                   D7EB77B9 (3622533049)\n-195215 Compressed Size       0000137A (4986)\n-195219 Uncompressed Size     0000137A (4986)\n-19521D Filename Length       002C (44)\n-19521F Extra Length          0009 (9)\n-195221 Comment Length        0000 (0)\n-195223 Disk Start            0000 (0)\n-195225 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195227 Ext File Attributes   00000000 (0)\n-19522B Local Header Offset   000E4871 (936049)\n-19522F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19522F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19525B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19525D   Length              0005 (5)\n-19525F   Flags               01 (1) 'Modification'\n-195260   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195264 CENTRAL HEADER #268   02014B50 (33639248)\n-195268 Created Zip Spec      14 (20) '2.0'\n-195269 Created OS            00 (0) 'MS-DOS'\n-19526A Extract Zip Spec      14 (20) '2.0'\n-19526B Extract OS            00 (0) 'MS-DOS'\n-19526C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19526E Compression Method    0000 (0) 'Stored'\n-195270 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195274 CRC                   95FCA49F (2516362399)\n-195278 Compressed Size       00000510 (1296)\n-19527C Uncompressed Size     00000510 (1296)\n-195280 Filename Length       0039 (57)\n-195282 Extra Length          0009 (9)\n-195284 Comment Length        0000 (0)\n-195286 Disk Start            0000 (0)\n-195288 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19528A Ext File Attributes   00000000 (0)\n-19528E Local Header Offset   000E5C4E (941134)\n-195292 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195292: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1952CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1952CD   Length              0005 (5)\n-1952CF   Flags               01 (1) 'Modification'\n-1952D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1952D4 CENTRAL HEADER #269   02014B50 (33639248)\n-1952D8 Created Zip Spec      14 (20) '2.0'\n-1952D9 Created OS            00 (0) 'MS-DOS'\n-1952DA Extract Zip Spec      14 (20) '2.0'\n-1952DB Extract OS            00 (0) 'MS-DOS'\n-1952DC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1952DE Compression Method    0000 (0) 'Stored'\n-1952E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1952E4 CRC                   EEA257C4 (4003616708)\n-1952E8 Compressed Size       000015B8 (5560)\n-1952EC Uncompressed Size     000015B8 (5560)\n-1952F0 Filename Length       002E (46)\n-1952F2 Extra Length          0009 (9)\n-1952F4 Comment Length        0000 (0)\n-1952F6 Disk Start            0000 (0)\n-1952F8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1952FA Ext File Attributes   00000000 (0)\n-1952FE Local Header Offset   000E61CE (942542)\n-195302 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195302: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195330 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195332   Length              0005 (5)\n-195334   Flags               01 (1) 'Modification'\n-195335   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195339 CENTRAL HEADER #270   02014B50 (33639248)\n-19533D Created Zip Spec      14 (20) '2.0'\n-19533E Created OS            00 (0) 'MS-DOS'\n-19533F Extract Zip Spec      14 (20) '2.0'\n-195340 Extract OS            00 (0) 'MS-DOS'\n-195341 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195343 Compression Method    0000 (0) 'Stored'\n-195345 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195349 CRC                   54F0EEAE (1425075886)\n-19534D Compressed Size       00004623 (17955)\n-195351 Uncompressed Size     00004623 (17955)\n-195355 Filename Length       002D (45)\n-195357 Extra Length          0009 (9)\n-195359 Comment Length        0000 (0)\n-19535B Disk Start            0000 (0)\n-19535D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19535F Ext File Attributes   00000000 (0)\n-195363 Local Header Offset   000E77EB (948203)\n-195367 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195367: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195394 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195396   Length              0005 (5)\n-195398   Flags               01 (1) 'Modification'\n-195399   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19539D CENTRAL HEADER #271   02014B50 (33639248)\n-1953A1 Created Zip Spec      14 (20) '2.0'\n-1953A2 Created OS            00 (0) 'MS-DOS'\n-1953A3 Extract Zip Spec      14 (20) '2.0'\n-1953A4 Extract OS            00 (0) 'MS-DOS'\n-1953A5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1953A7 Compression Method    0000 (0) 'Stored'\n-1953A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1953AD CRC                   49173B6A (1226259306)\n-1953B1 Compressed Size       00002D62 (11618)\n-1953B5 Uncompressed Size     00002D62 (11618)\n-1953B9 Filename Length       0032 (50)\n-1953BB Extra Length          0009 (9)\n-1953BD Comment Length        0000 (0)\n-1953BF Disk Start            0000 (0)\n-1953C1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1953C3 Ext File Attributes   00000000 (0)\n-1953C7 Local Header Offset   000EBE72 (966258)\n-1953CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1953CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1953FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1953FF   Length              0005 (5)\n-195401   Flags               01 (1) 'Modification'\n-195402   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195406 CENTRAL HEADER #272   02014B50 (33639248)\n-19540A Created Zip Spec      14 (20) '2.0'\n-19540B Created OS            00 (0) 'MS-DOS'\n-19540C Extract Zip Spec      14 (20) '2.0'\n-19540D Extract OS            00 (0) 'MS-DOS'\n-19540E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195410 Compression Method    0000 (0) 'Stored'\n-195412 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195416 CRC                   094FFA20 (156236320)\n-19541A Compressed Size       0000235E (9054)\n-19541E Uncompressed Size     0000235E (9054)\n-195422 Filename Length       0036 (54)\n-195424 Extra Length          0009 (9)\n-195426 Comment Length        0000 (0)\n-195428 Disk Start            0000 (0)\n-19542A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19542C Ext File Attributes   00000000 (0)\n-195430 Local Header Offset   000EEC3D (977981)\n-195434 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195434: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19546A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19546C   Length              0005 (5)\n-19546E   Flags               01 (1) 'Modification'\n-19546F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195473 CENTRAL HEADER #273   02014B50 (33639248)\n-195477 Created Zip Spec      14 (20) '2.0'\n-195478 Created OS            00 (0) 'MS-DOS'\n-195479 Extract Zip Spec      14 (20) '2.0'\n-19547A Extract OS            00 (0) 'MS-DOS'\n-19547B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19547D Compression Method    0000 (0) 'Stored'\n-19547F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195483 CRC                   0EFD7C48 (251493448)\n-195487 Compressed Size       000011C9 (4553)\n-19548B Uncompressed Size     000011C9 (4553)\n-19548F Filename Length       0034 (52)\n-195491 Extra Length          0009 (9)\n-195493 Comment Length        0000 (0)\n-195495 Disk Start            0000 (0)\n-195497 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195499 Ext File Attributes   00000000 (0)\n-19549D Local Header Offset   000F1008 (987144)\n-1954A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1954A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1954D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1954D7   Length              0005 (5)\n-1954D9   Flags               01 (1) 'Modification'\n-1954DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1954DE CENTRAL HEADER #274   02014B50 (33639248)\n-1954E2 Created Zip Spec      14 (20) '2.0'\n-1954E3 Created OS            00 (0) 'MS-DOS'\n-1954E4 Extract Zip Spec      14 (20) '2.0'\n-1954E5 Extract OS            00 (0) 'MS-DOS'\n-1954E6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1954E8 Compression Method    0000 (0) 'Stored'\n-1954EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1954EE CRC                   8CFD4A70 (2365409904)\n-1954F2 Compressed Size       00002FB5 (12213)\n-1954F6 Uncompressed Size     00002FB5 (12213)\n-1954FA Filename Length       002E (46)\n-1954FC Extra Length          0009 (9)\n-1954FE Comment Length        0000 (0)\n-195500 Disk Start            0000 (0)\n-195502 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195504 Ext File Attributes   00000000 (0)\n-195508 Local Header Offset   000F223C (991804)\n-19550C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19550C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19553A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19553C   Length              0005 (5)\n-19553E   Flags               01 (1) 'Modification'\n-19553F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195543 CENTRAL HEADER #275   02014B50 (33639248)\n-195547 Created Zip Spec      14 (20) '2.0'\n-195548 Created OS            00 (0) 'MS-DOS'\n-195549 Extract Zip Spec      14 (20) '2.0'\n-19554A Extract OS            00 (0) 'MS-DOS'\n-19554B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19554D Compression Method    0000 (0) 'Stored'\n-19554F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195553 CRC                   81A24999 (2174896537)\n-195557 Compressed Size       000008A4 (2212)\n-19555B Uncompressed Size     000008A4 (2212)\n-19555F Filename Length       002E (46)\n-195561 Extra Length          0009 (9)\n-195563 Comment Length        0000 (0)\n-195565 Disk Start            0000 (0)\n-195567 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195569 Ext File Attributes   00000000 (0)\n-19556D Local Header Offset   000F5256 (1004118)\n-195571 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195571: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19559F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1955A1   Length              0005 (5)\n-1955A3   Flags               01 (1) 'Modification'\n-1955A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1955A8 CENTRAL HEADER #276   02014B50 (33639248)\n-1955AC Created Zip Spec      14 (20) '2.0'\n-1955AD Created OS            00 (0) 'MS-DOS'\n-1955AE Extract Zip Spec      14 (20) '2.0'\n-1955AF Extract OS            00 (0) 'MS-DOS'\n-1955B0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1955B2 Compression Method    0000 (0) 'Stored'\n-1955B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1955B8 CRC                   831A7179 (2199548281)\n-1955BC Compressed Size       0000080F (2063)\n-1955C0 Uncompressed Size     0000080F (2063)\n-1955C4 Filename Length       0030 (48)\n-1955C6 Extra Length          0009 (9)\n-1955C8 Comment Length        0000 (0)\n-1955CA Disk Start            0000 (0)\n-1955CC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1955CE Ext File Attributes   00000000 (0)\n-1955D2 Local Header Offset   000F5B5F (1006431)\n-1955D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1955D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195606 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195608   Length              0005 (5)\n-19560A   Flags               01 (1) 'Modification'\n-19560B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19560F CENTRAL HEADER #277   02014B50 (33639248)\n-195613 Created Zip Spec      14 (20) '2.0'\n-195614 Created OS            00 (0) 'MS-DOS'\n-195615 Extract Zip Spec      14 (20) '2.0'\n-195616 Extract OS            00 (0) 'MS-DOS'\n-195617 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195619 Compression Method    0000 (0) 'Stored'\n-19561B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19561F CRC                   7319AF3E (1931063102)\n-195623 Compressed Size       0000143D (5181)\n-195627 Uncompressed Size     0000143D (5181)\n-19562B Filename Length       002F (47)\n-19562D Extra Length          0009 (9)\n-19562F Comment Length        0000 (0)\n-195631 Disk Start            0000 (0)\n-195633 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195635 Ext File Attributes   00000000 (0)\n-195639 Local Header Offset   000F63D5 (1008597)\n-19563D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19563D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19566C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19566E   Length              0005 (5)\n-195670   Flags               01 (1) 'Modification'\n-195671   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195675 CENTRAL HEADER #278   02014B50 (33639248)\n-195679 Created Zip Spec      14 (20) '2.0'\n-19567A Created OS            00 (0) 'MS-DOS'\n-19567B Extract Zip Spec      14 (20) '2.0'\n-19567C Extract OS            00 (0) 'MS-DOS'\n-19567D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19567F Compression Method    0000 (0) 'Stored'\n-195681 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195685 CRC                   D07CEF7E (3497848702)\n-195689 Compressed Size       00001341 (4929)\n-19568D Uncompressed Size     00001341 (4929)\n-195691 Filename Length       002D (45)\n-195693 Extra Length          0009 (9)\n-195695 Comment Length        0000 (0)\n-195697 Disk Start            0000 (0)\n-195699 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19569B Ext File Attributes   00000000 (0)\n-19569F Local Header Offset   000F7878 (1013880)\n-1956A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1956A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1956D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1956D2   Length              0005 (5)\n-1956D4   Flags               01 (1) 'Modification'\n-1956D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1956D9 CENTRAL HEADER #279   02014B50 (33639248)\n-1956DD Created Zip Spec      14 (20) '2.0'\n-1956DE Created OS            00 (0) 'MS-DOS'\n-1956DF Extract Zip Spec      14 (20) '2.0'\n-1956E0 Extract OS            00 (0) 'MS-DOS'\n-1956E1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1956E3 Compression Method    0000 (0) 'Stored'\n-1956E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1956E9 CRC                   4E3FC833 (1312802867)\n-1956ED Compressed Size       00000443 (1091)\n-1956F1 Uncompressed Size     00000443 (1091)\n-1956F5 Filename Length       0029 (41)\n-1956F7 Extra Length          0009 (9)\n-1956F9 Comment Length        0000 (0)\n-1956FB Disk Start            0000 (0)\n-1956FD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1956FF Ext File Attributes   00000000 (0)\n-195703 Local Header Offset   000F8C1D (1018909)\n-195707 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195707: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195730 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195732   Length              0005 (5)\n-195734   Flags               01 (1) 'Modification'\n-195735   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195739 CENTRAL HEADER #280   02014B50 (33639248)\n-19573D Created Zip Spec      14 (20) '2.0'\n-19573E Created OS            00 (0) 'MS-DOS'\n-19573F Extract Zip Spec      14 (20) '2.0'\n-195740 Extract OS            00 (0) 'MS-DOS'\n-195741 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195743 Compression Method    0000 (0) 'Stored'\n-195745 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195749 CRC                   7A9C058A (2057045386)\n-19574D Compressed Size       00002117 (8471)\n-195751 Uncompressed Size     00002117 (8471)\n-195755 Filename Length       002A (42)\n-195757 Extra Length          0009 (9)\n-195759 Comment Length        0000 (0)\n-19575B Disk Start            0000 (0)\n-19575D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19575F Ext File Attributes   00000000 (0)\n-195763 Local Header Offset   000F90C0 (1020096)\n-195767 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195767: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195791 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195793   Length              0005 (5)\n-195795   Flags               01 (1) 'Modification'\n-195796   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19579A CENTRAL HEADER #281   02014B50 (33639248)\n-19579E Created Zip Spec      14 (20) '2.0'\n-19579F Created OS            00 (0) 'MS-DOS'\n-1957A0 Extract Zip Spec      14 (20) '2.0'\n-1957A1 Extract OS            00 (0) 'MS-DOS'\n-1957A2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1957A4 Compression Method    0000 (0) 'Stored'\n-1957A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1957AA CRC                   A4F19F22 (2767298338)\n-1957AE Compressed Size       0000104C (4172)\n-1957B2 Uncompressed Size     0000104C (4172)\n-1957B6 Filename Length       002A (42)\n-1957B8 Extra Length          0009 (9)\n-1957BA Comment Length        0000 (0)\n-1957BC Disk Start            0000 (0)\n-1957BE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1957C0 Ext File Attributes   00000000 (0)\n-1957C4 Local Header Offset   000FB238 (1028664)\n-1957C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1957C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1957F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1957F4   Length              0005 (5)\n-1957F6   Flags               01 (1) 'Modification'\n-1957F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1957FB CENTRAL HEADER #282   02014B50 (33639248)\n-1957FF Created Zip Spec      14 (20) '2.0'\n-195800 Created OS            00 (0) 'MS-DOS'\n-195801 Extract Zip Spec      14 (20) '2.0'\n-195802 Extract OS            00 (0) 'MS-DOS'\n-195803 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195805 Compression Method    0000 (0) 'Stored'\n-195807 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19580B CRC                   E7A31A4E (3886225998)\n-19580F Compressed Size       00002166 (8550)\n-195813 Uncompressed Size     00002166 (8550)\n-195817 Filename Length       002B (43)\n-195819 Extra Length          0009 (9)\n-19581B Comment Length        0000 (0)\n-19581D Disk Start            0000 (0)\n-19581F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195821 Ext File Attributes   00000000 (0)\n-195825 Local Header Offset   000FC2E5 (1032933)\n-195829 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195829: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195854 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195856   Length              0005 (5)\n-195858   Flags               01 (1) 'Modification'\n-195859   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19585D CENTRAL HEADER #283   02014B50 (33639248)\n-195861 Created Zip Spec      14 (20) '2.0'\n-195862 Created OS            00 (0) 'MS-DOS'\n-195863 Extract Zip Spec      14 (20) '2.0'\n-195864 Extract OS            00 (0) 'MS-DOS'\n-195865 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195867 Compression Method    0000 (0) 'Stored'\n-195869 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19586D CRC                   139F375C (329201500)\n-195871 Compressed Size       00000BC2 (3010)\n-195875 Uncompressed Size     00000BC2 (3010)\n-195879 Filename Length       002B (43)\n-19587B Extra Length          0009 (9)\n-19587D Comment Length        0000 (0)\n-19587F Disk Start            0000 (0)\n-195881 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195883 Ext File Attributes   00000000 (0)\n-195887 Local Header Offset   000FE4AD (1041581)\n-19588B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19588B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1958B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1958B8   Length              0005 (5)\n-1958BA   Flags               01 (1) 'Modification'\n-1958BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1958BF CENTRAL HEADER #284   02014B50 (33639248)\n-1958C3 Created Zip Spec      14 (20) '2.0'\n-1958C4 Created OS            00 (0) 'MS-DOS'\n-1958C5 Extract Zip Spec      14 (20) '2.0'\n-1958C6 Extract OS            00 (0) 'MS-DOS'\n-1958C7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1958C9 Compression Method    0000 (0) 'Stored'\n-1958CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1958CF CRC                   C39767CB (3281479627)\n-1958D3 Compressed Size       00000DAA (3498)\n-1958D7 Uncompressed Size     00000DAA (3498)\n-1958DB Filename Length       0026 (38)\n-1958DD Extra Length          0009 (9)\n-1958DF Comment Length        0000 (0)\n-1958E1 Disk Start            0000 (0)\n-1958E3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1958E5 Ext File Attributes   00000000 (0)\n-1958E9 Local Header Offset   000FF0D1 (1044689)\n-1958ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1958ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195913 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195915   Length              0005 (5)\n-195917   Flags               01 (1) 'Modification'\n-195918   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19591C CENTRAL HEADER #285   02014B50 (33639248)\n-195920 Created Zip Spec      14 (20) '2.0'\n-195921 Created OS            00 (0) 'MS-DOS'\n-195922 Extract Zip Spec      14 (20) '2.0'\n-195923 Extract OS            00 (0) 'MS-DOS'\n-195924 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195926 Compression Method    0000 (0) 'Stored'\n-195928 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19592C CRC                   0C719C80 (208772224)\n-195930 Compressed Size       000010C1 (4289)\n-195934 Uncompressed Size     000010C1 (4289)\n-195938 Filename Length       002C (44)\n-19593A Extra Length          0009 (9)\n-19593C Comment Length        0000 (0)\n-19593E Disk Start            0000 (0)\n-195940 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195942 Ext File Attributes   00000000 (0)\n-195946 Local Header Offset   000FFED8 (1048280)\n-19594A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19594A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195976 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195978   Length              0005 (5)\n-19597A   Flags               01 (1) 'Modification'\n-19597B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19597F CENTRAL HEADER #286   02014B50 (33639248)\n-195983 Created Zip Spec      14 (20) '2.0'\n-195984 Created OS            00 (0) 'MS-DOS'\n-195985 Extract Zip Spec      14 (20) '2.0'\n-195986 Extract OS            00 (0) 'MS-DOS'\n-195987 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195989 Compression Method    0000 (0) 'Stored'\n-19598B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19598F CRC                   4A73FA6D (1249114733)\n-195993 Compressed Size       000010A2 (4258)\n-195997 Uncompressed Size     000010A2 (4258)\n-19599B Filename Length       002A (42)\n-19599D Extra Length          0009 (9)\n-19599F Comment Length        0000 (0)\n-1959A1 Disk Start            0000 (0)\n-1959A3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1959A5 Ext File Attributes   00000000 (0)\n-1959A9 Local Header Offset   00100FFC (1052668)\n-1959AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1959AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1959D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1959D9   Length              0005 (5)\n-1959DB   Flags               01 (1) 'Modification'\n-1959DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1959E0 CENTRAL HEADER #287   02014B50 (33639248)\n-1959E4 Created Zip Spec      14 (20) '2.0'\n-1959E5 Created OS            00 (0) 'MS-DOS'\n-1959E6 Extract Zip Spec      14 (20) '2.0'\n-1959E7 Extract OS            00 (0) 'MS-DOS'\n-1959E8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1959EA Compression Method    0000 (0) 'Stored'\n-1959EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1959F0 CRC                   7D5526CA (2102732490)\n-1959F4 Compressed Size       00000960 (2400)\n-1959F8 Uncompressed Size     00000960 (2400)\n-1959FC Filename Length       002E (46)\n-1959FE Extra Length          0009 (9)\n-195A00 Comment Length        0000 (0)\n-195A02 Disk Start            0000 (0)\n-195A04 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195A06 Ext File Attributes   00000000 (0)\n-195A0A Local Header Offset   001020FF (1057023)\n-195A0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195A0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195A3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195A3E   Length              0005 (5)\n-195A40   Flags               01 (1) 'Modification'\n-195A41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195A45 CENTRAL HEADER #288   02014B50 (33639248)\n-195A49 Created Zip Spec      14 (20) '2.0'\n-195A4A Created OS            00 (0) 'MS-DOS'\n-195A4B Extract Zip Spec      14 (20) '2.0'\n-195A4C Extract OS            00 (0) 'MS-DOS'\n-195A4D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195A4F Compression Method    0000 (0) 'Stored'\n-195A51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195A55 CRC                   3C2ED9BE (1009703358)\n-195A59 Compressed Size       00000939 (2361)\n-195A5D Uncompressed Size     00000939 (2361)\n-195A61 Filename Length       0033 (51)\n-195A63 Extra Length          0009 (9)\n-195A65 Comment Length        0000 (0)\n-195A67 Disk Start            0000 (0)\n-195A69 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195A6B Ext File Attributes   00000000 (0)\n-195A6F Local Header Offset   00102AC4 (1059524)\n-195A73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195A73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195AA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195AA8   Length              0005 (5)\n-195AAA   Flags               01 (1) 'Modification'\n-195AAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195AAF CENTRAL HEADER #289   02014B50 (33639248)\n-195AB3 Created Zip Spec      14 (20) '2.0'\n-195AB4 Created OS            00 (0) 'MS-DOS'\n-195AB5 Extract Zip Spec      14 (20) '2.0'\n-195AB6 Extract OS            00 (0) 'MS-DOS'\n-195AB7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195AB9 Compression Method    0000 (0) 'Stored'\n-195ABB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195ABF CRC                   BA95C40E (3130377230)\n-195AC3 Compressed Size       000039CB (14795)\n-195AC7 Uncompressed Size     000039CB (14795)\n-195ACB Filename Length       002E (46)\n-195ACD Extra Length          0009 (9)\n-195ACF Comment Length        0000 (0)\n-195AD1 Disk Start            0000 (0)\n-195AD3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195AD5 Ext File Attributes   00000000 (0)\n-195AD9 Local Header Offset   00103467 (1061991)\n-195ADD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195ADD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195B0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195B0D   Length              0005 (5)\n-195B0F   Flags               01 (1) 'Modification'\n-195B10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195B14 CENTRAL HEADER #290   02014B50 (33639248)\n-195B18 Created Zip Spec      14 (20) '2.0'\n-195B19 Created OS            00 (0) 'MS-DOS'\n-195B1A Extract Zip Spec      14 (20) '2.0'\n-195B1B Extract OS            00 (0) 'MS-DOS'\n-195B1C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195B1E Compression Method    0000 (0) 'Stored'\n-195B20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195B24 CRC                   A4EA9AD2 (2766838482)\n-195B28 Compressed Size       0000085B (2139)\n-195B2C Uncompressed Size     0000085B (2139)\n-195B30 Filename Length       0035 (53)\n-195B32 Extra Length          0009 (9)\n-195B34 Comment Length        0000 (0)\n-195B36 Disk Start            0000 (0)\n-195B38 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195B3A Ext File Attributes   00000000 (0)\n-195B3E Local Header Offset   00106E97 (1076887)\n-195B42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195B42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195B77 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195B79   Length              0005 (5)\n-195B7B   Flags               01 (1) 'Modification'\n-195B7C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195B80 CENTRAL HEADER #291   02014B50 (33639248)\n-195B84 Created Zip Spec      14 (20) '2.0'\n-195B85 Created OS            00 (0) 'MS-DOS'\n-195B86 Extract Zip Spec      14 (20) '2.0'\n-195B87 Extract OS            00 (0) 'MS-DOS'\n-195B88 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195B8A Compression Method    0000 (0) 'Stored'\n-195B8C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195B90 CRC                   90514D51 (2421247313)\n-195B94 Compressed Size       00005DC7 (24007)\n-195B98 Uncompressed Size     00005DC7 (24007)\n-195B9C Filename Length       002B (43)\n-195B9E Extra Length          0009 (9)\n-195BA0 Comment Length        0000 (0)\n-195BA2 Disk Start            0000 (0)\n-195BA4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195BA6 Ext File Attributes   00000000 (0)\n-195BAA Local Header Offset   0010775E (1079134)\n-195BAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195BAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195BD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195BDB   Length              0005 (5)\n-195BDD   Flags               01 (1) 'Modification'\n-195BDE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195BE2 CENTRAL HEADER #292   02014B50 (33639248)\n-195BE6 Created Zip Spec      14 (20) '2.0'\n-195BE7 Created OS            00 (0) 'MS-DOS'\n-195BE8 Extract Zip Spec      14 (20) '2.0'\n-195BE9 Extract OS            00 (0) 'MS-DOS'\n-195BEA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195BEC Compression Method    0000 (0) 'Stored'\n-195BEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195BF2 CRC                   6148ED28 (1632169256)\n-195BF6 Compressed Size       00000813 (2067)\n-195BFA Uncompressed Size     00000813 (2067)\n-195BFE Filename Length       0027 (39)\n-195C00 Extra Length          0009 (9)\n-195C02 Comment Length        0000 (0)\n-195C04 Disk Start            0000 (0)\n-195C06 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195C08 Ext File Attributes   00000000 (0)\n-195C0C Local Header Offset   0010D587 (1103239)\n-195C10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195C10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195C37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195C39   Length              0005 (5)\n-195C3B   Flags               01 (1) 'Modification'\n-195C3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195C40 CENTRAL HEADER #293   02014B50 (33639248)\n-195C44 Created Zip Spec      14 (20) '2.0'\n-195C45 Created OS            00 (0) 'MS-DOS'\n-195C46 Extract Zip Spec      14 (20) '2.0'\n-195C47 Extract OS            00 (0) 'MS-DOS'\n-195C48 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195C4A Compression Method    0000 (0) 'Stored'\n-195C4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195C50 CRC                   32B357AB (850614187)\n-195C54 Compressed Size       0000095A (2394)\n-195C58 Uncompressed Size     0000095A (2394)\n-195C5C Filename Length       002C (44)\n-195C5E Extra Length          0009 (9)\n-195C60 Comment Length        0000 (0)\n-195C62 Disk Start            0000 (0)\n-195C64 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195C66 Ext File Attributes   00000000 (0)\n-195C6A Local Header Offset   0010DDF8 (1105400)\n-195C6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195C6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195C9A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195C9C   Length              0005 (5)\n-195C9E   Flags               01 (1) 'Modification'\n-195C9F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195CA3 CENTRAL HEADER #294   02014B50 (33639248)\n-195CA7 Created Zip Spec      14 (20) '2.0'\n-195CA8 Created OS            00 (0) 'MS-DOS'\n-195CA9 Extract Zip Spec      14 (20) '2.0'\n-195CAA Extract OS            00 (0) 'MS-DOS'\n-195CAB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195CAD Compression Method    0000 (0) 'Stored'\n-195CAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195CB3 CRC                   34D97477 (886666359)\n-195CB7 Compressed Size       00008320 (33568)\n-195CBB Uncompressed Size     00008320 (33568)\n-195CBF Filename Length       002C (44)\n-195CC1 Extra Length          0009 (9)\n-195CC3 Comment Length        0000 (0)\n-195CC5 Disk Start            0000 (0)\n-195CC7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195CC9 Ext File Attributes   00000000 (0)\n-195CCD Local Header Offset   0010E7B5 (1107893)\n-195CD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195CD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195CFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195CFF   Length              0005 (5)\n-195D01   Flags               01 (1) 'Modification'\n-195D02   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195D06 CENTRAL HEADER #295   02014B50 (33639248)\n-195D0A Created Zip Spec      14 (20) '2.0'\n-195D0B Created OS            00 (0) 'MS-DOS'\n-195D0C Extract Zip Spec      14 (20) '2.0'\n-195D0D Extract OS            00 (0) 'MS-DOS'\n-195D0E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195D10 Compression Method    0000 (0) 'Stored'\n-195D12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195D16 CRC                   6788144F (1736971343)\n-195D1A Compressed Size       0000B91D (47389)\n-195D1E Uncompressed Size     0000B91D (47389)\n-195D22 Filename Length       002F (47)\n-195D24 Extra Length          0009 (9)\n-195D26 Comment Length        0000 (0)\n-195D28 Disk Start            0000 (0)\n-195D2A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195D2C Ext File Attributes   00000000 (0)\n-195D30 Local Header Offset   00116B38 (1141560)\n-195D34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195D34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195D63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195D65   Length              0005 (5)\n-195D67   Flags               01 (1) 'Modification'\n-195D68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195D6C CENTRAL HEADER #296   02014B50 (33639248)\n-195D70 Created Zip Spec      14 (20) '2.0'\n-195D71 Created OS            00 (0) 'MS-DOS'\n-195D72 Extract Zip Spec      14 (20) '2.0'\n-195D73 Extract OS            00 (0) 'MS-DOS'\n-195D74 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195D76 Compression Method    0000 (0) 'Stored'\n-195D78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195D7C CRC                   9D4E3C73 (2639150195)\n-195D80 Compressed Size       00001707 (5895)\n-195D84 Uncompressed Size     00001707 (5895)\n-195D88 Filename Length       0038 (56)\n-195D8A Extra Length          0009 (9)\n-195D8C Comment Length        0000 (0)\n-195D8E Disk Start            0000 (0)\n-195D90 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195D92 Ext File Attributes   00000000 (0)\n-195D96 Local Header Offset   001224BB (1189051)\n-195D9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195D9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195DD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195DD4   Length              0005 (5)\n-195DD6   Flags               01 (1) 'Modification'\n-195DD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195DDB CENTRAL HEADER #297   02014B50 (33639248)\n-195DDF Created Zip Spec      14 (20) '2.0'\n-195DE0 Created OS            00 (0) 'MS-DOS'\n-195DE1 Extract Zip Spec      14 (20) '2.0'\n-195DE2 Extract OS            00 (0) 'MS-DOS'\n-195DE3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195DE5 Compression Method    0000 (0) 'Stored'\n-195DE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195DEB CRC                   359BAAF7 (899394295)\n-195DEF Compressed Size       000011CA (4554)\n-195DF3 Uncompressed Size     000011CA (4554)\n-195DF7 Filename Length       003C (60)\n-195DF9 Extra Length          0009 (9)\n-195DFB Comment Length        0000 (0)\n-195DFD Disk Start            0000 (0)\n-195DFF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195E01 Ext File Attributes   00000000 (0)\n-195E05 Local Header Offset   00123C31 (1195057)\n-195E09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195E09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195E45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195E47   Length              0005 (5)\n-195E49   Flags               01 (1) 'Modification'\n-195E4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195E4E CENTRAL HEADER #298   02014B50 (33639248)\n-195E52 Created Zip Spec      14 (20) '2.0'\n-195E53 Created OS            00 (0) 'MS-DOS'\n-195E54 Extract Zip Spec      14 (20) '2.0'\n-195E55 Extract OS            00 (0) 'MS-DOS'\n-195E56 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195E58 Compression Method    0000 (0) 'Stored'\n-195E5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195E5E CRC                   4DF6AB6E (1308011374)\n-195E62 Compressed Size       00000CBD (3261)\n-195E66 Uncompressed Size     00000CBD (3261)\n-195E6A Filename Length       0028 (40)\n-195E6C Extra Length          0009 (9)\n-195E6E Comment Length        0000 (0)\n-195E70 Disk Start            0000 (0)\n-195E72 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195E74 Ext File Attributes   00000000 (0)\n-195E78 Local Header Offset   00124E6E (1199726)\n-195E7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195E7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195EA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195EA6   Length              0005 (5)\n-195EA8   Flags               01 (1) 'Modification'\n-195EA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195EAD CENTRAL HEADER #299   02014B50 (33639248)\n-195EB1 Created Zip Spec      14 (20) '2.0'\n-195EB2 Created OS            00 (0) 'MS-DOS'\n-195EB3 Extract Zip Spec      14 (20) '2.0'\n-195EB4 Extract OS            00 (0) 'MS-DOS'\n-195EB5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195EB7 Compression Method    0000 (0) 'Stored'\n-195EB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195EBD CRC                   E15897D6 (3780679638)\n-195EC1 Compressed Size       00000A1C (2588)\n-195EC5 Uncompressed Size     00000A1C (2588)\n-195EC9 Filename Length       0044 (68)\n-195ECB Extra Length          0009 (9)\n-195ECD Comment Length        0000 (0)\n-195ECF Disk Start            0000 (0)\n-195ED1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195ED3 Ext File Attributes   00000000 (0)\n-195ED7 Local Header Offset   00125B8A (1203082)\n-195EDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195EDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195F1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195F21   Length              0005 (5)\n-195F23   Flags               01 (1) 'Modification'\n-195F24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195F28 CENTRAL HEADER #300   02014B50 (33639248)\n-195F2C Created Zip Spec      14 (20) '2.0'\n-195F2D Created OS            00 (0) 'MS-DOS'\n-195F2E Extract Zip Spec      14 (20) '2.0'\n-195F2F Extract OS            00 (0) 'MS-DOS'\n-195F30 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195F32 Compression Method    0000 (0) 'Stored'\n-195F34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195F38 CRC                   080CFD86 (135069062)\n-195F3C Compressed Size       00009370 (37744)\n-195F40 Uncompressed Size     00009370 (37744)\n-195F44 Filename Length       002E (46)\n-195F46 Extra Length          0009 (9)\n-195F48 Comment Length        0000 (0)\n-195F4A Disk Start            0000 (0)\n-195F4C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195F4E Ext File Attributes   00000000 (0)\n-195F52 Local Header Offset   00126621 (1205793)\n-195F56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195F56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195F84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195F86   Length              0005 (5)\n-195F88   Flags               01 (1) 'Modification'\n-195F89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195F8D CENTRAL HEADER #301   02014B50 (33639248)\n-195F91 Created Zip Spec      14 (20) '2.0'\n-195F92 Created OS            00 (0) 'MS-DOS'\n-195F93 Extract Zip Spec      14 (20) '2.0'\n-195F94 Extract OS            00 (0) 'MS-DOS'\n-195F95 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195F97 Compression Method    0000 (0) 'Stored'\n-195F99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-195F9D CRC                   45127F53 (1158840147)\n-195FA1 Compressed Size       000021F8 (8696)\n-195FA5 Uncompressed Size     000021F8 (8696)\n-195FA9 Filename Length       002C (44)\n-195FAB Extra Length          0009 (9)\n-195FAD Comment Length        0000 (0)\n-195FAF Disk Start            0000 (0)\n-195FB1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-195FB3 Ext File Attributes   00000000 (0)\n-195FB7 Local Header Offset   0012F9F6 (1243638)\n-195FBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x195FBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-195FE7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-195FE9   Length              0005 (5)\n-195FEB   Flags               01 (1) 'Modification'\n-195FEC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-195FF0 CENTRAL HEADER #302   02014B50 (33639248)\n-195FF4 Created Zip Spec      14 (20) '2.0'\n-195FF5 Created OS            00 (0) 'MS-DOS'\n-195FF6 Extract Zip Spec      14 (20) '2.0'\n-195FF7 Extract OS            00 (0) 'MS-DOS'\n-195FF8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-195FFA Compression Method    0000 (0) 'Stored'\n-195FFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196000 CRC                   BCEF5B37 (3169803063)\n-196004 Compressed Size       0000634F (25423)\n-196008 Uncompressed Size     0000634F (25423)\n-19600C Filename Length       002B (43)\n-19600E Extra Length          0009 (9)\n-196010 Comment Length        0000 (0)\n-196012 Disk Start            0000 (0)\n-196014 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196016 Ext File Attributes   00000000 (0)\n-19601A Local Header Offset   00131C51 (1252433)\n-19601E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19601E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196049 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19604B   Length              0005 (5)\n-19604D   Flags               01 (1) 'Modification'\n-19604E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196052 CENTRAL HEADER #303   02014B50 (33639248)\n-196056 Created Zip Spec      14 (20) '2.0'\n-196057 Created OS            00 (0) 'MS-DOS'\n-196058 Extract Zip Spec      14 (20) '2.0'\n-196059 Extract OS            00 (0) 'MS-DOS'\n-19605A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19605C Compression Method    0000 (0) 'Stored'\n-19605E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196062 CRC                   E7AAF9A0 (3886741920)\n-196066 Compressed Size       000026C6 (9926)\n-19606A Uncompressed Size     000026C6 (9926)\n-19606E Filename Length       002C (44)\n-196070 Extra Length          0009 (9)\n-196072 Comment Length        0000 (0)\n-196074 Disk Start            0000 (0)\n-196076 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196078 Ext File Attributes   00000000 (0)\n-19607C Local Header Offset   00138002 (1277954)\n-196080 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196080: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1960AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1960AE   Length              0005 (5)\n-1960B0   Flags               01 (1) 'Modification'\n-1960B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1960B5 CENTRAL HEADER #304   02014B50 (33639248)\n-1960B9 Created Zip Spec      14 (20) '2.0'\n-1960BA Created OS            00 (0) 'MS-DOS'\n-1960BB Extract Zip Spec      14 (20) '2.0'\n-1960BC Extract OS            00 (0) 'MS-DOS'\n-1960BD General Purpose Flag  0000 (0)\n-1960BF Compression Method    0000 (0) 'Stored'\n-1960C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1960C5 CRC                   00000000 (0)\n-1960C9 Compressed Size       00000000 (0)\n-1960CD Uncompressed Size     00000000 (0)\n-1960D1 Filename Length       0018 (24)\n-1960D3 Extra Length          0009 (9)\n-1960D5 Comment Length        0000 (0)\n-1960D7 Disk Start            0000 (0)\n-1960D9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1960DB Ext File Attributes   00000000 (0)\n-1960DF Local Header Offset   0013A72B (1287979)\n-1960E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1960E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1960FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1960FD   Length              0005 (5)\n-1960FF   Flags               01 (1) 'Modification'\n-196100   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196104 CENTRAL HEADER #305   02014B50 (33639248)\n-196108 Created Zip Spec      14 (20) '2.0'\n-196109 Created OS            00 (0) 'MS-DOS'\n-19610A Extract Zip Spec      14 (20) '2.0'\n-19610B Extract OS            00 (0) 'MS-DOS'\n-19610C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19610E Compression Method    0000 (0) 'Stored'\n-196110 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196114 CRC                   4A1B9248 (1243320904)\n-196118 Compressed Size       0000642A (25642)\n-19611C Uncompressed Size     0000642A (25642)\n-196120 Filename Length       002B (43)\n-196122 Extra Length          0009 (9)\n-196124 Comment Length        0000 (0)\n-196126 Disk Start            0000 (0)\n-196128 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19612A Ext File Attributes   00000000 (0)\n-19612E Local Header Offset   0013A76A (1288042)\n-196132 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196132: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19615D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19615F   Length              0005 (5)\n-196161   Flags               01 (1) 'Modification'\n-196162   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196166 CENTRAL HEADER #306   02014B50 (33639248)\n-19616A Created Zip Spec      14 (20) '2.0'\n-19616B Created OS            00 (0) 'MS-DOS'\n-19616C Extract Zip Spec      14 (20) '2.0'\n-19616D Extract OS            00 (0) 'MS-DOS'\n-19616E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196170 Compression Method    0000 (0) 'Stored'\n-196172 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196176 CRC                   4BCB8E78 (1271631480)\n-19617A Compressed Size       00005EF7 (24311)\n-19617E Uncompressed Size     00005EF7 (24311)\n-196182 Filename Length       0034 (52)\n-196184 Extra Length          0009 (9)\n-196186 Comment Length        0000 (0)\n-196188 Disk Start            0000 (0)\n-19618A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19618C Ext File Attributes   00000000 (0)\n-196190 Local Header Offset   00140BF6 (1313782)\n-196194 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196194: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1961C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1961CA   Length              0005 (5)\n-1961CC   Flags               01 (1) 'Modification'\n-1961CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1961D1 CENTRAL HEADER #307   02014B50 (33639248)\n-1961D5 Created Zip Spec      14 (20) '2.0'\n-1961D6 Created OS            00 (0) 'MS-DOS'\n-1961D7 Extract Zip Spec      14 (20) '2.0'\n-1961D8 Extract OS            00 (0) 'MS-DOS'\n-1961D9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1961DB Compression Method    0000 (0) 'Stored'\n-1961DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1961E1 CRC                   EBCB75D3 (3955979731)\n-1961E5 Compressed Size       00001235 (4661)\n-1961E9 Uncompressed Size     00001235 (4661)\n-1961ED Filename Length       0031 (49)\n-1961EF Extra Length          0009 (9)\n-1961F1 Comment Length        0000 (0)\n-1961F3 Disk Start            0000 (0)\n-1961F5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1961F7 Ext File Attributes   00000000 (0)\n-1961FB Local Header Offset   00146B58 (1338200)\n-1961FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1961FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196230 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196232   Length              0005 (5)\n-196234   Flags               01 (1) 'Modification'\n-196235   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196239 CENTRAL HEADER #308   02014B50 (33639248)\n-19623D Created Zip Spec      14 (20) '2.0'\n-19623E Created OS            00 (0) 'MS-DOS'\n-19623F Extract Zip Spec      14 (20) '2.0'\n-196240 Extract OS            00 (0) 'MS-DOS'\n-196241 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196243 Compression Method    0000 (0) 'Stored'\n-196245 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196249 CRC                   0D6CD567 (225236327)\n-19624D Compressed Size       000015F5 (5621)\n-196251 Uncompressed Size     000015F5 (5621)\n-196255 Filename Length       0034 (52)\n-196257 Extra Length          0009 (9)\n-196259 Comment Length        0000 (0)\n-19625B Disk Start            0000 (0)\n-19625D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19625F Ext File Attributes   00000000 (0)\n-196263 Local Header Offset   00147DF5 (1342965)\n-196267 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196267: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19629B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19629D   Length              0005 (5)\n-19629F   Flags               01 (1) 'Modification'\n-1962A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1962A4 CENTRAL HEADER #309   02014B50 (33639248)\n-1962A8 Created Zip Spec      14 (20) '2.0'\n-1962A9 Created OS            00 (0) 'MS-DOS'\n-1962AA Extract Zip Spec      14 (20) '2.0'\n-1962AB Extract OS            00 (0) 'MS-DOS'\n-1962AC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1962AE Compression Method    0000 (0) 'Stored'\n-1962B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1962B4 CRC                   6E97D75C (1855444828)\n-1962B8 Compressed Size       00001A42 (6722)\n-1962BC Uncompressed Size     00001A42 (6722)\n-1962C0 Filename Length       0032 (50)\n-1962C2 Extra Length          0009 (9)\n-1962C4 Comment Length        0000 (0)\n-1962C6 Disk Start            0000 (0)\n-1962C8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1962CA Ext File Attributes   00000000 (0)\n-1962CE Local Header Offset   00149455 (1348693)\n-1962D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1962D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196304 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196306   Length              0005 (5)\n-196308   Flags               01 (1) 'Modification'\n-196309   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19630D CENTRAL HEADER #310   02014B50 (33639248)\n-196311 Created Zip Spec      14 (20) '2.0'\n-196312 Created OS            00 (0) 'MS-DOS'\n-196313 Extract Zip Spec      14 (20) '2.0'\n-196314 Extract OS            00 (0) 'MS-DOS'\n-196315 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196317 Compression Method    0000 (0) 'Stored'\n-196319 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19631D CRC                   327F969A (847222426)\n-196321 Compressed Size       0000350F (13583)\n-196325 Uncompressed Size     0000350F (13583)\n-196329 Filename Length       002E (46)\n-19632B Extra Length          0009 (9)\n-19632D Comment Length        0000 (0)\n-19632F Disk Start            0000 (0)\n-196331 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196333 Ext File Attributes   00000000 (0)\n-196337 Local Header Offset   0014AF00 (1355520)\n-19633B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19633B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196369 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19636B   Length              0005 (5)\n-19636D   Flags               01 (1) 'Modification'\n-19636E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196372 CENTRAL HEADER #311   02014B50 (33639248)\n-196376 Created Zip Spec      14 (20) '2.0'\n-196377 Created OS            00 (0) 'MS-DOS'\n-196378 Extract Zip Spec      14 (20) '2.0'\n-196379 Extract OS            00 (0) 'MS-DOS'\n-19637A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19637C Compression Method    0000 (0) 'Stored'\n-19637E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196382 CRC                   C17F60B4 (3246350516)\n-196386 Compressed Size       0000084E (2126)\n-19638A Uncompressed Size     0000084E (2126)\n-19638E Filename Length       002B (43)\n-196390 Extra Length          0009 (9)\n-196392 Comment Length        0000 (0)\n-196394 Disk Start            0000 (0)\n-196396 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196398 Ext File Attributes   00000000 (0)\n-19639C Local Header Offset   0014E474 (1369204)\n-1963A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1963A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1963CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1963CD   Length              0005 (5)\n-1963CF   Flags               01 (1) 'Modification'\n-1963D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1963D4 CENTRAL HEADER #312   02014B50 (33639248)\n-1963D8 Created Zip Spec      14 (20) '2.0'\n-1963D9 Created OS            00 (0) 'MS-DOS'\n-1963DA Extract Zip Spec      14 (20) '2.0'\n-1963DB Extract OS            00 (0) 'MS-DOS'\n-1963DC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1963DE Compression Method    0000 (0) 'Stored'\n-1963E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1963E4 CRC                   60259860 (1613076576)\n-1963E8 Compressed Size       0000229B (8859)\n-1963EC Uncompressed Size     0000229B (8859)\n-1963F0 Filename Length       002F (47)\n-1963F2 Extra Length          0009 (9)\n-1963F4 Comment Length        0000 (0)\n-1963F6 Disk Start            0000 (0)\n-1963F8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1963FA Ext File Attributes   00000000 (0)\n-1963FE Local Header Offset   0014ED24 (1371428)\n-196402 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196402: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196431 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196433   Length              0005 (5)\n-196435   Flags               01 (1) 'Modification'\n-196436   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19643A CENTRAL HEADER #313   02014B50 (33639248)\n-19643E Created Zip Spec      14 (20) '2.0'\n-19643F Created OS            00 (0) 'MS-DOS'\n-196440 Extract Zip Spec      14 (20) '2.0'\n-196441 Extract OS            00 (0) 'MS-DOS'\n-196442 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196444 Compression Method    0000 (0) 'Stored'\n-196446 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19644A CRC                   CBED4405 (3421324293)\n-19644E Compressed Size       00000B21 (2849)\n-196452 Uncompressed Size     00000B21 (2849)\n-196456 Filename Length       0026 (38)\n-196458 Extra Length          0009 (9)\n-19645A Comment Length        0000 (0)\n-19645C Disk Start            0000 (0)\n-19645E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196460 Ext File Attributes   00000000 (0)\n-196464 Local Header Offset   00151025 (1380389)\n-196468 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196468: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19648E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196490   Length              0005 (5)\n-196492   Flags               01 (1) 'Modification'\n-196493   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196497 CENTRAL HEADER #314   02014B50 (33639248)\n-19649B Created Zip Spec      14 (20) '2.0'\n-19649C Created OS            00 (0) 'MS-DOS'\n-19649D Extract Zip Spec      14 (20) '2.0'\n-19649E Extract OS            00 (0) 'MS-DOS'\n-19649F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1964A1 Compression Method    0000 (0) 'Stored'\n-1964A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1964A7 CRC                   4EECAFD1 (1324134353)\n-1964AB Compressed Size       00000DF0 (3568)\n-1964AF Uncompressed Size     00000DF0 (3568)\n-1964B3 Filename Length       002B (43)\n-1964B5 Extra Length          0009 (9)\n-1964B7 Comment Length        0000 (0)\n-1964B9 Disk Start            0000 (0)\n-1964BB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1964BD Ext File Attributes   00000000 (0)\n-1964C1 Local Header Offset   00151BA3 (1383331)\n-1964C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1964C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1964F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1964F2   Length              0005 (5)\n-1964F4   Flags               01 (1) 'Modification'\n-1964F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1964F9 CENTRAL HEADER #315   02014B50 (33639248)\n-1964FD Created Zip Spec      14 (20) '2.0'\n-1964FE Created OS            00 (0) 'MS-DOS'\n-1964FF Extract Zip Spec      14 (20) '2.0'\n-196500 Extract OS            00 (0) 'MS-DOS'\n-196501 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196503 Compression Method    0000 (0) 'Stored'\n-196505 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196509 CRC                   44E5E8ED (1155918061)\n-19650D Compressed Size       00001786 (6022)\n-196511 Uncompressed Size     00001786 (6022)\n-196515 Filename Length       0031 (49)\n-196517 Extra Length          0009 (9)\n-196519 Comment Length        0000 (0)\n-19651B Disk Start            0000 (0)\n-19651D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19651F Ext File Attributes   00000000 (0)\n-196523 Local Header Offset   001529F5 (1386997)\n-196527 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196527: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196558 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19655A   Length              0005 (5)\n-19655C   Flags               01 (1) 'Modification'\n-19655D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196561 CENTRAL HEADER #316   02014B50 (33639248)\n-196565 Created Zip Spec      14 (20) '2.0'\n-196566 Created OS            00 (0) 'MS-DOS'\n-196567 Extract Zip Spec      14 (20) '2.0'\n-196568 Extract OS            00 (0) 'MS-DOS'\n-196569 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19656B Compression Method    0000 (0) 'Stored'\n-19656D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196571 CRC                   AEF897E4 (2935527396)\n-196575 Compressed Size       00002174 (8564)\n-196579 Uncompressed Size     00002174 (8564)\n-19657D Filename Length       0029 (41)\n-19657F Extra Length          0009 (9)\n-196581 Comment Length        0000 (0)\n-196583 Disk Start            0000 (0)\n-196585 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196587 Ext File Attributes   00000000 (0)\n-19658B Local Header Offset   001541E3 (1393123)\n-19658F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19658F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1965B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1965BA   Length              0005 (5)\n-1965BC   Flags               01 (1) 'Modification'\n-1965BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1965C1 CENTRAL HEADER #317   02014B50 (33639248)\n-1965C5 Created Zip Spec      14 (20) '2.0'\n-1965C6 Created OS            00 (0) 'MS-DOS'\n-1965C7 Extract Zip Spec      14 (20) '2.0'\n-1965C8 Extract OS            00 (0) 'MS-DOS'\n-1965C9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1965CB Compression Method    0000 (0) 'Stored'\n-1965CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1965D1 CRC                   1F3B896F (523995503)\n-1965D5 Compressed Size       0000065A (1626)\n-1965D9 Uncompressed Size     0000065A (1626)\n-1965DD Filename Length       002A (42)\n-1965DF Extra Length          0009 (9)\n-1965E1 Comment Length        0000 (0)\n-1965E3 Disk Start            0000 (0)\n-1965E5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1965E7 Ext File Attributes   00000000 (0)\n-1965EB Local Header Offset   001563B7 (1401783)\n-1965EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1965EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196619 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19661B   Length              0005 (5)\n-19661D   Flags               01 (1) 'Modification'\n-19661E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196622 CENTRAL HEADER #318   02014B50 (33639248)\n-196626 Created Zip Spec      14 (20) '2.0'\n-196627 Created OS            00 (0) 'MS-DOS'\n-196628 Extract Zip Spec      14 (20) '2.0'\n-196629 Extract OS            00 (0) 'MS-DOS'\n-19662A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19662C Compression Method    0000 (0) 'Stored'\n-19662E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196632 CRC                   FE661D4B (4268105035)\n-196636 Compressed Size       00000DF5 (3573)\n-19663A Uncompressed Size     00000DF5 (3573)\n-19663E Filename Length       0029 (41)\n-196640 Extra Length          0009 (9)\n-196642 Comment Length        0000 (0)\n-196644 Disk Start            0000 (0)\n-196646 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196648 Ext File Attributes   00000000 (0)\n-19664C Local Header Offset   00156A72 (1403506)\n-196650 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196650: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196679 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19667B   Length              0005 (5)\n-19667D   Flags               01 (1) 'Modification'\n-19667E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196682 CENTRAL HEADER #319   02014B50 (33639248)\n-196686 Created Zip Spec      14 (20) '2.0'\n-196687 Created OS            00 (0) 'MS-DOS'\n-196688 Extract Zip Spec      14 (20) '2.0'\n-196689 Extract OS            00 (0) 'MS-DOS'\n-19668A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19668C Compression Method    0000 (0) 'Stored'\n-19668E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196692 CRC                   32F83356 (855126870)\n-196696 Compressed Size       00000E80 (3712)\n-19669A Uncompressed Size     00000E80 (3712)\n-19669E Filename Length       002A (42)\n-1966A0 Extra Length          0009 (9)\n-1966A2 Comment Length        0000 (0)\n-1966A4 Disk Start            0000 (0)\n-1966A6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1966A8 Ext File Attributes   00000000 (0)\n-1966AC Local Header Offset   001578C7 (1407175)\n-1966B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1966B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1966DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1966DC   Length              0005 (5)\n-1966DE   Flags               01 (1) 'Modification'\n-1966DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1966E3 CENTRAL HEADER #320   02014B50 (33639248)\n-1966E7 Created Zip Spec      14 (20) '2.0'\n-1966E8 Created OS            00 (0) 'MS-DOS'\n-1966E9 Extract Zip Spec      14 (20) '2.0'\n-1966EA Extract OS            00 (0) 'MS-DOS'\n-1966EB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1966ED Compression Method    0000 (0) 'Stored'\n-1966EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1966F3 CRC                   5B6E7792 (1533966226)\n-1966F7 Compressed Size       000033BD (13245)\n-1966FB Uncompressed Size     000033BD (13245)\n-1966FF Filename Length       002B (43)\n-196701 Extra Length          0009 (9)\n-196703 Comment Length        0000 (0)\n-196705 Disk Start            0000 (0)\n-196707 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196709 Ext File Attributes   00000000 (0)\n-19670D Local Header Offset   001587A8 (1410984)\n-196711 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196711: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19673C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19673E   Length              0005 (5)\n-196740   Flags               01 (1) 'Modification'\n-196741   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196745 CENTRAL HEADER #321   02014B50 (33639248)\n-196749 Created Zip Spec      14 (20) '2.0'\n-19674A Created OS            00 (0) 'MS-DOS'\n-19674B Extract Zip Spec      14 (20) '2.0'\n-19674C Extract OS            00 (0) 'MS-DOS'\n-19674D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19674F Compression Method    0000 (0) 'Stored'\n-196751 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196755 CRC                   321C1C15 (840702997)\n-196759 Compressed Size       00002894 (10388)\n-19675D Uncompressed Size     00002894 (10388)\n-196761 Filename Length       002B (43)\n-196763 Extra Length          0009 (9)\n-196765 Comment Length        0000 (0)\n-196767 Disk Start            0000 (0)\n-196769 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19676B Ext File Attributes   00000000 (0)\n-19676F Local Header Offset   0015BBC7 (1424327)\n-196773 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196773: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19679E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1967A0   Length              0005 (5)\n-1967A2   Flags               01 (1) 'Modification'\n-1967A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1967A7 CENTRAL HEADER #322   02014B50 (33639248)\n-1967AB Created Zip Spec      14 (20) '2.0'\n-1967AC Created OS            00 (0) 'MS-DOS'\n-1967AD Extract Zip Spec      14 (20) '2.0'\n-1967AE Extract OS            00 (0) 'MS-DOS'\n-1967AF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1967B1 Compression Method    0000 (0) 'Stored'\n-1967B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1967B7 CRC                   52C8839A (1388872602)\n-1967BB Compressed Size       000020A7 (8359)\n-1967BF Uncompressed Size     000020A7 (8359)\n-1967C3 Filename Length       0030 (48)\n-1967C5 Extra Length          0009 (9)\n-1967C7 Comment Length        0000 (0)\n-1967C9 Disk Start            0000 (0)\n-1967CB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1967CD Ext File Attributes   00000000 (0)\n-1967D1 Local Header Offset   0015E4BD (1434813)\n-1967D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1967D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196805 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196807   Length              0005 (5)\n-196809   Flags               01 (1) 'Modification'\n-19680A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19680E CENTRAL HEADER #323   02014B50 (33639248)\n-196812 Created Zip Spec      14 (20) '2.0'\n-196813 Created OS            00 (0) 'MS-DOS'\n-196814 Extract Zip Spec      14 (20) '2.0'\n-196815 Extract OS            00 (0) 'MS-DOS'\n-196816 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196818 Compression Method    0000 (0) 'Stored'\n-19681A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19681E CRC                   838E36DD (2207135453)\n-196822 Compressed Size       00003312 (13074)\n-196826 Uncompressed Size     00003312 (13074)\n-19682A Filename Length       002B (43)\n-19682C Extra Length          0009 (9)\n-19682E Comment Length        0000 (0)\n-196830 Disk Start            0000 (0)\n-196832 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196834 Ext File Attributes   00000000 (0)\n-196838 Local Header Offset   001605CB (1443275)\n-19683C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19683C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196867 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196869   Length              0005 (5)\n-19686B   Flags               01 (1) 'Modification'\n-19686C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196870 CENTRAL HEADER #324   02014B50 (33639248)\n-196874 Created Zip Spec      14 (20) '2.0'\n-196875 Created OS            00 (0) 'MS-DOS'\n-196876 Extract Zip Spec      14 (20) '2.0'\n-196877 Extract OS            00 (0) 'MS-DOS'\n-196878 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19687A Compression Method    0000 (0) 'Stored'\n-19687C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196880 CRC                   CB5B9E0C (3411779084)\n-196884 Compressed Size       00003489 (13449)\n-196888 Uncompressed Size     00003489 (13449)\n-19688C Filename Length       002E (46)\n-19688E Extra Length          0009 (9)\n-196890 Comment Length        0000 (0)\n-196892 Disk Start            0000 (0)\n-196894 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196896 Ext File Attributes   00000000 (0)\n-19689A Local Header Offset   0016393F (1456447)\n-19689E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19689E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1968CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1968CE   Length              0005 (5)\n-1968D0   Flags               01 (1) 'Modification'\n-1968D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1968D5 CENTRAL HEADER #325   02014B50 (33639248)\n-1968D9 Created Zip Spec      14 (20) '2.0'\n-1968DA Created OS            00 (0) 'MS-DOS'\n-1968DB Extract Zip Spec      14 (20) '2.0'\n-1968DC Extract OS            00 (0) 'MS-DOS'\n-1968DD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1968DF Compression Method    0000 (0) 'Stored'\n-1968E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1968E5 CRC                   5FCFA231 (1607442993)\n-1968E9 Compressed Size       00001BE6 (7142)\n-1968ED Uncompressed Size     00001BE6 (7142)\n-1968F1 Filename Length       0026 (38)\n-1968F3 Extra Length          0009 (9)\n-1968F5 Comment Length        0000 (0)\n-1968F7 Disk Start            0000 (0)\n-1968F9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1968FB Ext File Attributes   00000000 (0)\n-1968FF Local Header Offset   00166E2D (1469997)\n-196903 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196903: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196929 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19692B   Length              0005 (5)\n-19692D   Flags               01 (1) 'Modification'\n-19692E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196932 CENTRAL HEADER #326   02014B50 (33639248)\n-196936 Created Zip Spec      14 (20) '2.0'\n-196937 Created OS            00 (0) 'MS-DOS'\n-196938 Extract Zip Spec      14 (20) '2.0'\n-196939 Extract OS            00 (0) 'MS-DOS'\n-19693A General Purpose Flag  0000 (0)\n-19693C Compression Method    0000 (0) 'Stored'\n-19693E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196942 CRC                   00000000 (0)\n-196946 Compressed Size       00000000 (0)\n-19694A Uncompressed Size     00000000 (0)\n-19694E Filename Length       0023 (35)\n-196950 Extra Length          0009 (9)\n-196952 Comment Length        0000 (0)\n-196954 Disk Start            0000 (0)\n-196956 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196958 Ext File Attributes   00000000 (0)\n-19695C Local Header Offset   00168A70 (1477232)\n-196960 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196960: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196983 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196985   Length              0005 (5)\n-196987   Flags               01 (1) 'Modification'\n-196988   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19698C CENTRAL HEADER #327   02014B50 (33639248)\n-196990 Created Zip Spec      14 (20) '2.0'\n-196991 Created OS            00 (0) 'MS-DOS'\n-196992 Extract Zip Spec      14 (20) '2.0'\n-196993 Extract OS            00 (0) 'MS-DOS'\n-196994 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196996 Compression Method    0000 (0) 'Stored'\n-196998 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19699C CRC                   53B2D875 (1404229749)\n-1969A0 Compressed Size       000005A4 (1444)\n-1969A4 Uncompressed Size     000005A4 (1444)\n-1969A8 Filename Length       0030 (48)\n-1969AA Extra Length          0009 (9)\n-1969AC Comment Length        0000 (0)\n-1969AE Disk Start            0000 (0)\n-1969B0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1969B2 Ext File Attributes   00000000 (0)\n-1969B6 Local Header Offset   00168ABA (1477306)\n-1969BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1969BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1969EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1969EC   Length              0005 (5)\n-1969EE   Flags               01 (1) 'Modification'\n-1969EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1969F3 CENTRAL HEADER #328   02014B50 (33639248)\n-1969F7 Created Zip Spec      14 (20) '2.0'\n-1969F8 Created OS            00 (0) 'MS-DOS'\n-1969F9 Extract Zip Spec      14 (20) '2.0'\n-1969FA Extract OS            00 (0) 'MS-DOS'\n-1969FB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1969FD Compression Method    0000 (0) 'Stored'\n-1969FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196A03 CRC                   07CF28F9 (131016953)\n-196A07 Compressed Size       00001D72 (7538)\n-196A0B Uncompressed Size     00001D72 (7538)\n-196A0F Filename Length       0036 (54)\n-196A11 Extra Length          0009 (9)\n-196A13 Comment Length        0000 (0)\n-196A15 Disk Start            0000 (0)\n-196A17 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196A19 Ext File Attributes   00000000 (0)\n-196A1D Local Header Offset   001690C5 (1478853)\n-196A21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196A21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196A57 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196A59   Length              0005 (5)\n-196A5B   Flags               01 (1) 'Modification'\n-196A5C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196A60 CENTRAL HEADER #329   02014B50 (33639248)\n-196A64 Created Zip Spec      14 (20) '2.0'\n-196A65 Created OS            00 (0) 'MS-DOS'\n-196A66 Extract Zip Spec      14 (20) '2.0'\n-196A67 Extract OS            00 (0) 'MS-DOS'\n-196A68 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196A6A Compression Method    0000 (0) 'Stored'\n-196A6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196A70 CRC                   FF8666DF (4286998239)\n-196A74 Compressed Size       00001A8A (6794)\n-196A78 Uncompressed Size     00001A8A (6794)\n-196A7C Filename Length       0034 (52)\n-196A7E Extra Length          0009 (9)\n-196A80 Comment Length        0000 (0)\n-196A82 Disk Start            0000 (0)\n-196A84 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196A86 Ext File Attributes   00000000 (0)\n-196A8A Local Header Offset   0016AEA4 (1486500)\n-196A8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196A8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196AC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196AC4   Length              0005 (5)\n-196AC6   Flags               01 (1) 'Modification'\n-196AC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196ACB CENTRAL HEADER #330   02014B50 (33639248)\n-196ACF Created Zip Spec      14 (20) '2.0'\n-196AD0 Created OS            00 (0) 'MS-DOS'\n-196AD1 Extract Zip Spec      14 (20) '2.0'\n-196AD2 Extract OS            00 (0) 'MS-DOS'\n-196AD3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196AD5 Compression Method    0000 (0) 'Stored'\n-196AD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196ADB CRC                   C4C508F0 (3301247216)\n-196ADF Compressed Size       00000751 (1873)\n-196AE3 Uncompressed Size     00000751 (1873)\n-196AE7 Filename Length       002E (46)\n-196AE9 Extra Length          0009 (9)\n-196AEB Comment Length        0000 (0)\n-196AED Disk Start            0000 (0)\n-196AEF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196AF1 Ext File Attributes   00000000 (0)\n-196AF5 Local Header Offset   0016C999 (1493401)\n-196AF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196AF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196B27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196B29   Length              0005 (5)\n-196B2B   Flags               01 (1) 'Modification'\n-196B2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196B30 CENTRAL HEADER #331   02014B50 (33639248)\n-196B34 Created Zip Spec      14 (20) '2.0'\n-196B35 Created OS            00 (0) 'MS-DOS'\n-196B36 Extract Zip Spec      14 (20) '2.0'\n-196B37 Extract OS            00 (0) 'MS-DOS'\n-196B38 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196B3A Compression Method    0000 (0) 'Stored'\n-196B3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196B40 CRC                   55945694 (1435784852)\n-196B44 Compressed Size       00001B9B (7067)\n-196B48 Uncompressed Size     00001B9B (7067)\n-196B4C Filename Length       0031 (49)\n-196B4E Extra Length          0009 (9)\n-196B50 Comment Length        0000 (0)\n-196B52 Disk Start            0000 (0)\n-196B54 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196B56 Ext File Attributes   00000000 (0)\n-196B5A Local Header Offset   0016D14F (1495375)\n-196B5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196B5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196B8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196B91   Length              0005 (5)\n-196B93   Flags               01 (1) 'Modification'\n-196B94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196B98 CENTRAL HEADER #332   02014B50 (33639248)\n-196B9C Created Zip Spec      14 (20) '2.0'\n-196B9D Created OS            00 (0) 'MS-DOS'\n-196B9E Extract Zip Spec      14 (20) '2.0'\n-196B9F Extract OS            00 (0) 'MS-DOS'\n-196BA0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196BA2 Compression Method    0000 (0) 'Stored'\n-196BA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196BA8 CRC                   CEB8A43B (3468207163)\n-196BAC Compressed Size       00001ABC (6844)\n-196BB0 Uncompressed Size     00001ABC (6844)\n-196BB4 Filename Length       002F (47)\n-196BB6 Extra Length          0009 (9)\n-196BB8 Comment Length        0000 (0)\n-196BBA Disk Start            0000 (0)\n-196BBC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196BBE Ext File Attributes   00000000 (0)\n-196BC2 Local Header Offset   0016ED52 (1502546)\n-196BC6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196BC6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196BF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196BF7   Length              0005 (5)\n-196BF9   Flags               01 (1) 'Modification'\n-196BFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196BFE CENTRAL HEADER #333   02014B50 (33639248)\n-196C02 Created Zip Spec      14 (20) '2.0'\n-196C03 Created OS            00 (0) 'MS-DOS'\n-196C04 Extract Zip Spec      14 (20) '2.0'\n-196C05 Extract OS            00 (0) 'MS-DOS'\n-196C06 General Purpose Flag  0000 (0)\n-196C08 Compression Method    0000 (0) 'Stored'\n-196C0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196C0E CRC                   00000000 (0)\n-196C12 Compressed Size       00000000 (0)\n-196C16 Uncompressed Size     00000000 (0)\n-196C1A Filename Length       0020 (32)\n-196C1C Extra Length          0009 (9)\n-196C1E Comment Length        0000 (0)\n-196C20 Disk Start            0000 (0)\n-196C22 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196C24 Ext File Attributes   00000000 (0)\n-196C28 Local Header Offset   00170874 (1509492)\n-196C2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196C2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196C4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196C4E   Length              0005 (5)\n-196C50   Flags               01 (1) 'Modification'\n-196C51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196C55 CENTRAL HEADER #334   02014B50 (33639248)\n-196C59 Created Zip Spec      14 (20) '2.0'\n-196C5A Created OS            00 (0) 'MS-DOS'\n-196C5B Extract Zip Spec      14 (20) '2.0'\n-196C5C Extract OS            00 (0) 'MS-DOS'\n-196C5D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196C5F Compression Method    0000 (0) 'Stored'\n-196C61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196C65 CRC                   339D235A (865936218)\n-196C69 Compressed Size       00000791 (1937)\n-196C6D Uncompressed Size     00000791 (1937)\n-196C71 Filename Length       003F (63)\n-196C73 Extra Length          0009 (9)\n-196C75 Comment Length        0000 (0)\n-196C77 Disk Start            0000 (0)\n-196C79 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196C7B Ext File Attributes   00000000 (0)\n-196C7F Local Header Offset   001708BB (1509563)\n-196C83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196C83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196CC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196CC4   Length              0005 (5)\n-196CC6   Flags               01 (1) 'Modification'\n-196CC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196CCB CENTRAL HEADER #335   02014B50 (33639248)\n-196CCF Created Zip Spec      14 (20) '2.0'\n-196CD0 Created OS            00 (0) 'MS-DOS'\n-196CD1 Extract Zip Spec      14 (20) '2.0'\n-196CD2 Extract OS            00 (0) 'MS-DOS'\n-196CD3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196CD5 Compression Method    0000 (0) 'Stored'\n-196CD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196CDB CRC                   F30DAB50 (4077759312)\n-196CDF Compressed Size       000047F4 (18420)\n-196CE3 Uncompressed Size     000047F4 (18420)\n-196CE7 Filename Length       0032 (50)\n-196CE9 Extra Length          0009 (9)\n-196CEB Comment Length        0000 (0)\n-196CED Disk Start            0000 (0)\n-196CEF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196CF1 Ext File Attributes   00000000 (0)\n-196CF5 Local Header Offset   001710C2 (1511618)\n-196CF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196CF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196D2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196D2D   Length              0005 (5)\n-196D2F   Flags               01 (1) 'Modification'\n-196D30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196D34 CENTRAL HEADER #336   02014B50 (33639248)\n-196D38 Created Zip Spec      14 (20) '2.0'\n-196D39 Created OS            00 (0) 'MS-DOS'\n-196D3A Extract Zip Spec      14 (20) '2.0'\n-196D3B Extract OS            00 (0) 'MS-DOS'\n-196D3C General Purpose Flag  0000 (0)\n-196D3E Compression Method    0000 (0) 'Stored'\n-196D40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196D44 CRC                   00000000 (0)\n-196D48 Compressed Size       00000000 (0)\n-196D4C Uncompressed Size     00000000 (0)\n-196D50 Filename Length       0020 (32)\n-196D52 Extra Length          0009 (9)\n-196D54 Comment Length        0000 (0)\n-196D56 Disk Start            0000 (0)\n-196D58 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196D5A Ext File Attributes   00000000 (0)\n-196D5E Local Header Offset   0017591F (1530143)\n-196D62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196D62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196D82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196D84   Length              0005 (5)\n-196D86   Flags               01 (1) 'Modification'\n-196D87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196D8B CENTRAL HEADER #337   02014B50 (33639248)\n-196D8F Created Zip Spec      14 (20) '2.0'\n-196D90 Created OS            00 (0) 'MS-DOS'\n-196D91 Extract Zip Spec      14 (20) '2.0'\n-196D92 Extract OS            00 (0) 'MS-DOS'\n-196D93 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196D95 Compression Method    0000 (0) 'Stored'\n-196D97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196D9B CRC                   9409E400 (2483676160)\n-196D9F Compressed Size       000007F6 (2038)\n-196DA3 Uncompressed Size     000007F6 (2038)\n-196DA7 Filename Length       002E (46)\n-196DA9 Extra Length          0009 (9)\n-196DAB Comment Length        0000 (0)\n-196DAD Disk Start            0000 (0)\n-196DAF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196DB1 Ext File Attributes   00000000 (0)\n-196DB5 Local Header Offset   00175966 (1530214)\n-196DB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196DB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196DE7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196DE9   Length              0005 (5)\n-196DEB   Flags               01 (1) 'Modification'\n-196DEC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196DF0 CENTRAL HEADER #338   02014B50 (33639248)\n-196DF4 Created Zip Spec      14 (20) '2.0'\n-196DF5 Created OS            00 (0) 'MS-DOS'\n-196DF6 Extract Zip Spec      14 (20) '2.0'\n-196DF7 Extract OS            00 (0) 'MS-DOS'\n-196DF8 General Purpose Flag  0000 (0)\n-196DFA Compression Method    0000 (0) 'Stored'\n-196DFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196E00 CRC                   00000000 (0)\n-196E04 Compressed Size       00000000 (0)\n-196E08 Uncompressed Size     00000000 (0)\n-196E0C Filename Length       0017 (23)\n-196E0E Extra Length          0009 (9)\n-196E10 Comment Length        0000 (0)\n-196E12 Disk Start            0000 (0)\n-196E14 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196E16 Ext File Attributes   00000000 (0)\n-196E1A Local Header Offset   001761C1 (1532353)\n-196E1E Filename              'XXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196E1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196E35 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196E37   Length              0005 (5)\n-196E39   Flags               01 (1) 'Modification'\n-196E3A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196E3E CENTRAL HEADER #339   02014B50 (33639248)\n-196E42 Created Zip Spec      14 (20) '2.0'\n-196E43 Created OS            00 (0) 'MS-DOS'\n-196E44 Extract Zip Spec      14 (20) '2.0'\n-196E45 Extract OS            00 (0) 'MS-DOS'\n-196E46 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196E48 Compression Method    0000 (0) 'Stored'\n-196E4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196E4E CRC                   0896EC5C (144108636)\n-196E52 Compressed Size       000016D6 (5846)\n-196E56 Uncompressed Size     000016D6 (5846)\n-196E5A Filename Length       0033 (51)\n-196E5C Extra Length          0009 (9)\n-196E5E Comment Length        0000 (0)\n-196E60 Disk Start            0000 (0)\n-196E62 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196E64 Ext File Attributes   00000000 (0)\n-196E68 Local Header Offset   001761FF (1532415)\n-196E6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196E6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196E9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196EA1   Length              0005 (5)\n-196EA3   Flags               01 (1) 'Modification'\n-196EA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196EA8 CENTRAL HEADER #340   02014B50 (33639248)\n-196EAC Created Zip Spec      14 (20) '2.0'\n-196EAD Created OS            00 (0) 'MS-DOS'\n-196EAE Extract Zip Spec      14 (20) '2.0'\n-196EAF Extract OS            00 (0) 'MS-DOS'\n-196EB0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196EB2 Compression Method    0000 (0) 'Stored'\n-196EB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196EB8 CRC                   7DBCFDD1 (2109537745)\n-196EBC Compressed Size       0000055B (1371)\n-196EC0 Uncompressed Size     0000055B (1371)\n-196EC4 Filename Length       0034 (52)\n-196EC6 Extra Length          0009 (9)\n-196EC8 Comment Length        0000 (0)\n-196ECA Disk Start            0000 (0)\n-196ECC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196ECE Ext File Attributes   00000000 (0)\n-196ED2 Local Header Offset   0017793F (1538367)\n-196ED6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196ED6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196F0A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196F0C   Length              0005 (5)\n-196F0E   Flags               01 (1) 'Modification'\n-196F0F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196F13 CENTRAL HEADER #341   02014B50 (33639248)\n-196F17 Created Zip Spec      14 (20) '2.0'\n-196F18 Created OS            00 (0) 'MS-DOS'\n-196F19 Extract Zip Spec      14 (20) '2.0'\n-196F1A Extract OS            00 (0) 'MS-DOS'\n-196F1B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196F1D Compression Method    0000 (0) 'Stored'\n-196F1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196F23 CRC                   3AC92564 (986260836)\n-196F27 Compressed Size       00000464 (1124)\n-196F2B Uncompressed Size     00000464 (1124)\n-196F2F Filename Length       0031 (49)\n-196F31 Extra Length          0009 (9)\n-196F33 Comment Length        0000 (0)\n-196F35 Disk Start            0000 (0)\n-196F37 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196F39 Ext File Attributes   00000000 (0)\n-196F3D Local Header Offset   00177F05 (1539845)\n-196F41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196F41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196F72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196F74   Length              0005 (5)\n-196F76   Flags               01 (1) 'Modification'\n-196F77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196F7B CENTRAL HEADER #342   02014B50 (33639248)\n-196F7F Created Zip Spec      14 (20) '2.0'\n-196F80 Created OS            00 (0) 'MS-DOS'\n-196F81 Extract Zip Spec      14 (20) '2.0'\n-196F82 Extract OS            00 (0) 'MS-DOS'\n-196F83 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196F85 Compression Method    0000 (0) 'Stored'\n-196F87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196F8B CRC                   0EB290DE (246583518)\n-196F8F Compressed Size       0000061E (1566)\n-196F93 Uncompressed Size     0000061E (1566)\n-196F97 Filename Length       0021 (33)\n-196F99 Extra Length          0009 (9)\n-196F9B Comment Length        0000 (0)\n-196F9D Disk Start            0000 (0)\n-196F9F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196FA1 Ext File Attributes   00000000 (0)\n-196FA5 Local Header Offset   001783D1 (1541073)\n-196FA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196FA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-196FCA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-196FCC   Length              0005 (5)\n-196FCE   Flags               01 (1) 'Modification'\n-196FCF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-196FD3 CENTRAL HEADER #343   02014B50 (33639248)\n-196FD7 Created Zip Spec      14 (20) '2.0'\n-196FD8 Created OS            00 (0) 'MS-DOS'\n-196FD9 Extract Zip Spec      14 (20) '2.0'\n-196FDA Extract OS            00 (0) 'MS-DOS'\n-196FDB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-196FDD Compression Method    0000 (0) 'Stored'\n-196FDF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-196FE3 CRC                   2A1C7A3B (706509371)\n-196FE7 Compressed Size       000008DC (2268)\n-196FEB Uncompressed Size     000008DC (2268)\n-196FEF Filename Length       002B (43)\n-196FF1 Extra Length          0009 (9)\n-196FF3 Comment Length        0000 (0)\n-196FF5 Disk Start            0000 (0)\n-196FF7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-196FF9 Ext File Attributes   00000000 (0)\n-196FFD Local Header Offset   00178A47 (1542727)\n-197001 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197001: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19702C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19702E   Length              0005 (5)\n-197030   Flags               01 (1) 'Modification'\n-197031   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197035 CENTRAL HEADER #344   02014B50 (33639248)\n-197039 Created Zip Spec      14 (20) '2.0'\n-19703A Created OS            00 (0) 'MS-DOS'\n-19703B Extract Zip Spec      14 (20) '2.0'\n-19703C Extract OS            00 (0) 'MS-DOS'\n-19703D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19703F Compression Method    0000 (0) 'Stored'\n-197041 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197045 CRC                   3A57EAC8 (978840264)\n-197049 Compressed Size       0000126A (4714)\n-19704D Uncompressed Size     0000126A (4714)\n-197051 Filename Length       0029 (41)\n-197053 Extra Length          0009 (9)\n-197055 Comment Length        0000 (0)\n-197057 Disk Start            0000 (0)\n-197059 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19705B Ext File Attributes   00000000 (0)\n-19705F Local Header Offset   00179385 (1545093)\n-197063 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197063: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19708C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19708E   Length              0005 (5)\n-197090   Flags               01 (1) 'Modification'\n-197091   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197095 CENTRAL HEADER #345   02014B50 (33639248)\n-197099 Created Zip Spec      14 (20) '2.0'\n-19709A Created OS            00 (0) 'MS-DOS'\n-19709B Extract Zip Spec      14 (20) '2.0'\n-19709C Extract OS            00 (0) 'MS-DOS'\n-19709D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19709F Compression Method    0000 (0) 'Stored'\n-1970A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1970A5 CRC                   B1AAD78E (2980763534)\n-1970A9 Compressed Size       00000463 (1123)\n-1970AD Uncompressed Size     00000463 (1123)\n-1970B1 Filename Length       0028 (40)\n-1970B3 Extra Length          0009 (9)\n-1970B5 Comment Length        0000 (0)\n-1970B7 Disk Start            0000 (0)\n-1970B9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1970BB Ext File Attributes   00000000 (0)\n-1970BF Local Header Offset   0017A64F (1549903)\n-1970C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1970C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1970EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1970ED   Length              0005 (5)\n-1970EF   Flags               01 (1) 'Modification'\n-1970F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1970F4 CENTRAL HEADER #346   02014B50 (33639248)\n-1970F8 Created Zip Spec      14 (20) '2.0'\n-1970F9 Created OS            00 (0) 'MS-DOS'\n-1970FA Extract Zip Spec      14 (20) '2.0'\n-1970FB Extract OS            00 (0) 'MS-DOS'\n-1970FC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1970FE Compression Method    0000 (0) 'Stored'\n-197100 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197104 CRC                   903888C3 (2419624131)\n-197108 Compressed Size       0000120D (4621)\n-19710C Uncompressed Size     0000120D (4621)\n-197110 Filename Length       0030 (48)\n-197112 Extra Length          0009 (9)\n-197114 Comment Length        0000 (0)\n-197116 Disk Start            0000 (0)\n-197118 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19711A Ext File Attributes   00000000 (0)\n-19711E Local Header Offset   0017AB11 (1551121)\n-197122 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197122: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197152 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197154   Length              0005 (5)\n-197156   Flags               01 (1) 'Modification'\n-197157   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19715B CENTRAL HEADER #347   02014B50 (33639248)\n-19715F Created Zip Spec      14 (20) '2.0'\n-197160 Created OS            00 (0) 'MS-DOS'\n-197161 Extract Zip Spec      14 (20) '2.0'\n-197162 Extract OS            00 (0) 'MS-DOS'\n-197163 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197165 Compression Method    0000 (0) 'Stored'\n-197167 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19716B CRC                   98A61B9D (2561022877)\n-19716F Compressed Size       000014BA (5306)\n-197173 Uncompressed Size     000014BA (5306)\n-197177 Filename Length       0026 (38)\n-197179 Extra Length          0009 (9)\n-19717B Comment Length        0000 (0)\n-19717D Disk Start            0000 (0)\n-19717F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-197181 Ext File Attributes   00000000 (0)\n-197185 Local Header Offset   0017BD85 (1555845)\n-197189 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197189: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1971AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1971B1   Length              0005 (5)\n-1971B3   Flags               01 (1) 'Modification'\n-1971B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1971B8 CENTRAL HEADER #348   02014B50 (33639248)\n-1971BC Created Zip Spec      14 (20) '2.0'\n-1971BD Created OS            00 (0) 'MS-DOS'\n-1971BE Extract Zip Spec      14 (20) '2.0'\n-1971BF Extract OS            00 (0) 'MS-DOS'\n-1971C0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1971C2 Compression Method    0000 (0) 'Stored'\n-1971C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1971C8 CRC                   1AE780F7 (451379447)\n-1971CC Compressed Size       000004BD (1213)\n-1971D0 Uncompressed Size     000004BD (1213)\n-1971D4 Filename Length       0033 (51)\n-1971D6 Extra Length          0009 (9)\n-1971D8 Comment Length        0000 (0)\n-1971DA Disk Start            0000 (0)\n-1971DC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1971DE Ext File Attributes   00000000 (0)\n-1971E2 Local Header Offset   0017D29C (1561244)\n-1971E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1971E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197219 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19721B   Length              0005 (5)\n-19721D   Flags               01 (1) 'Modification'\n-19721E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197222 CENTRAL HEADER #349   02014B50 (33639248)\n-197226 Created Zip Spec      14 (20) '2.0'\n-197227 Created OS            00 (0) 'MS-DOS'\n-197228 Extract Zip Spec      14 (20) '2.0'\n-197229 Extract OS            00 (0) 'MS-DOS'\n-19722A General Purpose Flag  0000 (0)\n-19722C Compression Method    0000 (0) 'Stored'\n-19722E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197232 CRC                   00000000 (0)\n-197236 Compressed Size       00000000 (0)\n-19723A Uncompressed Size     00000000 (0)\n-19723E Filename Length       0015 (21)\n-197240 Extra Length          0009 (9)\n-197242 Comment Length        0000 (0)\n-197244 Disk Start            0000 (0)\n-197246 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-197248 Ext File Attributes   00000000 (0)\n-19724C Local Header Offset   0017D7C3 (1562563)\n-197250 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197250: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197265 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197267   Length              0005 (5)\n-197269   Flags               01 (1) 'Modification'\n-19726A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19726E CENTRAL HEADER #350   02014B50 (33639248)\n-197272 Created Zip Spec      14 (20) '2.0'\n-197273 Created OS            00 (0) 'MS-DOS'\n-197274 Extract Zip Spec      14 (20) '2.0'\n-197275 Extract OS            00 (0) 'MS-DOS'\n-197276 General Purpose Flag  0000 (0)\n-197278 Compression Method    0000 (0) 'Stored'\n-19727A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19727E CRC                   00000000 (0)\n-197282 Compressed Size       00000000 (0)\n-197286 Uncompressed Size     00000000 (0)\n-19728A Filename Length       001B (27)\n-19728C Extra Length          0009 (9)\n-19728E Comment Length        0000 (0)\n-197290 Disk Start            0000 (0)\n-197292 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-197294 Ext File Attributes   00000000 (0)\n-197298 Local Header Offset   0017D7FF (1562623)\n-19729C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19729C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1972B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1972B9   Length              0005 (5)\n-1972BB   Flags               01 (1) 'Modification'\n-1972BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1972C0 CENTRAL HEADER #351   02014B50 (33639248)\n-1972C4 Created Zip Spec      14 (20) '2.0'\n-1972C5 Created OS            00 (0) 'MS-DOS'\n-1972C6 Extract Zip Spec      14 (20) '2.0'\n-1972C7 Extract OS            00 (0) 'MS-DOS'\n-1972C8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1972CA Compression Method    0000 (0) 'Stored'\n-1972CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1972D0 CRC                   86E81518 (2263356696)\n-1972D4 Compressed Size       000003E4 (996)\n-1972D8 Uncompressed Size     000003E4 (996)\n-1972DC Filename Length       0037 (55)\n-1972DE Extra Length          0009 (9)\n-1972E0 Comment Length        0000 (0)\n-1972E2 Disk Start            0000 (0)\n-1972E4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1972E6 Ext File Attributes   00000000 (0)\n-1972EA Local Header Offset   0017D841 (1562689)\n-1972EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1972EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197325 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197327   Length              0005 (5)\n-197329   Flags               01 (1) 'Modification'\n-19732A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19732E CENTRAL HEADER #352   02014B50 (33639248)\n-197332 Created Zip Spec      14 (20) '2.0'\n-197333 Created OS            00 (0) 'MS-DOS'\n-197334 Extract Zip Spec      14 (20) '2.0'\n-197335 Extract OS            00 (0) 'MS-DOS'\n-197336 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197338 Compression Method    0000 (0) 'Stored'\n-19733A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19733E CRC                   201D5BFC (538795004)\n-197342 Compressed Size       000012A8 (4776)\n-197346 Uncompressed Size     000012A8 (4776)\n-19734A Filename Length       0030 (48)\n-19734C Extra Length          0009 (9)\n-19734E Comment Length        0000 (0)\n-197350 Disk Start            0000 (0)\n-197352 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-197354 Ext File Attributes   00000000 (0)\n-197358 Local Header Offset   0017DC93 (1563795)\n-19735C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19735C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19738C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19738E   Length              0005 (5)\n-197390   Flags               01 (1) 'Modification'\n-197391   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197395 CENTRAL HEADER #353   02014B50 (33639248)\n-197399 Created Zip Spec      14 (20) '2.0'\n-19739A Created OS            00 (0) 'MS-DOS'\n-19739B Extract Zip Spec      14 (20) '2.0'\n-19739C Extract OS            00 (0) 'MS-DOS'\n-19739D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19739F Compression Method    0000 (0) 'Stored'\n-1973A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1973A5 CRC                   E946A330 (3913720624)\n-1973A9 Compressed Size       00000A39 (2617)\n-1973AD Uncompressed Size     00000A39 (2617)\n-1973B1 Filename Length       002F (47)\n-1973B3 Extra Length          0009 (9)\n-1973B5 Comment Length        0000 (0)\n-1973B7 Disk Start            0000 (0)\n-1973B9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1973BB Ext File Attributes   00000000 (0)\n-1973BF Local Header Offset   0017EFA2 (1568674)\n-1973C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1973C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1973F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1973F4   Length              0005 (5)\n-1973F6   Flags               01 (1) 'Modification'\n-1973F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1973FB CENTRAL HEADER #354   02014B50 (33639248)\n-1973FF Created Zip Spec      14 (20) '2.0'\n-197400 Created OS            00 (0) 'MS-DOS'\n-197401 Extract Zip Spec      14 (20) '2.0'\n-197402 Extract OS            00 (0) 'MS-DOS'\n-197403 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197405 Compression Method    0000 (0) 'Stored'\n-197407 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19740B CRC                   FBAECD89 (4222537097)\n-19740F Compressed Size       000003C4 (964)\n-197413 Uncompressed Size     000003C4 (964)\n-197417 Filename Length       0036 (54)\n-197419 Extra Length          0009 (9)\n-19741B Comment Length        0000 (0)\n-19741D Disk Start            0000 (0)\n-19741F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-197421 Ext File Attributes   00000000 (0)\n-197425 Local Header Offset   0017FA41 (1571393)\n-197429 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197429: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19745F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197461   Length              0005 (5)\n-197463   Flags               01 (1) 'Modification'\n-197464   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197468 CENTRAL HEADER #355   02014B50 (33639248)\n-19746C Created Zip Spec      14 (20) '2.0'\n-19746D Created OS            00 (0) 'MS-DOS'\n-19746E Extract Zip Spec      14 (20) '2.0'\n-19746F Extract OS            00 (0) 'MS-DOS'\n-197470 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197472 Compression Method    0000 (0) 'Stored'\n-197474 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197478 CRC                   E22DB581 (3794646401)\n-19747C Compressed Size       00000BEE (3054)\n-197480 Uncompressed Size     00000BEE (3054)\n-197484 Filename Length       0033 (51)\n-197486 Extra Length          0009 (9)\n-197488 Comment Length        0000 (0)\n-19748A Disk Start            0000 (0)\n-19748C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19748E Ext File Attributes   00000000 (0)\n-197492 Local Header Offset   0017FE72 (1572466)\n-197496 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197496: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1974C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1974CB   Length              0005 (5)\n-1974CD   Flags               01 (1) 'Modification'\n-1974CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1974D2 CENTRAL HEADER #356   02014B50 (33639248)\n-1974D6 Created Zip Spec      14 (20) '2.0'\n-1974D7 Created OS            00 (0) 'MS-DOS'\n-1974D8 Extract Zip Spec      14 (20) '2.0'\n-1974D9 Extract OS            00 (0) 'MS-DOS'\n-1974DA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1974DC Compression Method    0000 (0) 'Stored'\n-1974DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1974E2 CRC                   02426CD5 (37907669)\n-1974E6 Compressed Size       00001B9D (7069)\n-1974EA Uncompressed Size     00001B9D (7069)\n-1974EE Filename Length       002D (45)\n-1974F0 Extra Length          0009 (9)\n-1974F2 Comment Length        0000 (0)\n-1974F4 Disk Start            0000 (0)\n-1974F6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1974F8 Ext File Attributes   00000000 (0)\n-1974FC Local Header Offset   00180ACA (1575626)\n-197500 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197500: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19752D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19752F   Length              0005 (5)\n-197531   Flags               01 (1) 'Modification'\n-197532   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197536 CENTRAL HEADER #357   02014B50 (33639248)\n-19753A Created Zip Spec      14 (20) '2.0'\n-19753B Created OS            00 (0) 'MS-DOS'\n-19753C Extract Zip Spec      14 (20) '2.0'\n-19753D Extract OS            00 (0) 'MS-DOS'\n-19753E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197540 Compression Method    0000 (0) 'Stored'\n-197542 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197546 CRC                   641CBA7B (1679604347)\n-19754A Compressed Size       00000BB0 (2992)\n-19754E Uncompressed Size     00000BB0 (2992)\n-197552 Filename Length       0030 (48)\n-197554 Extra Length          0009 (9)\n-197556 Comment Length        0000 (0)\n-197558 Disk Start            0000 (0)\n-19755A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19755C Ext File Attributes   00000000 (0)\n-197560 Local Header Offset   001826CB (1582795)\n-197564 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197564: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197594 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197596   Length              0005 (5)\n-197598   Flags               01 (1) 'Modification'\n-197599   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19759D CENTRAL HEADER #358   02014B50 (33639248)\n-1975A1 Created Zip Spec      14 (20) '2.0'\n-1975A2 Created OS            00 (0) 'MS-DOS'\n-1975A3 Extract Zip Spec      14 (20) '2.0'\n-1975A4 Extract OS            00 (0) 'MS-DOS'\n-1975A5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1975A7 Compression Method    0000 (0) 'Stored'\n-1975A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1975AD CRC                   C652D326 (3327316774)\n-1975B1 Compressed Size       00000A71 (2673)\n-1975B5 Uncompressed Size     00000A71 (2673)\n-1975B9 Filename Length       0033 (51)\n-1975BB Extra Length          0009 (9)\n-1975BD Comment Length        0000 (0)\n-1975BF Disk Start            0000 (0)\n-1975C1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1975C3 Ext File Attributes   00000000 (0)\n-1975C7 Local Header Offset   001832E2 (1585890)\n-1975CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1975CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1975FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197600   Length              0005 (5)\n-197602   Flags               01 (1) 'Modification'\n-197603   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197607 CENTRAL HEADER #359   02014B50 (33639248)\n-19760B Created Zip Spec      14 (20) '2.0'\n-19760C Created OS            00 (0) 'MS-DOS'\n-19760D Extract Zip Spec      14 (20) '2.0'\n-19760E Extract OS            00 (0) 'MS-DOS'\n-19760F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197611 Compression Method    0000 (0) 'Stored'\n-197613 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197617 CRC                   DE4FB79A (3729766298)\n-19761B Compressed Size       00001A0D (6669)\n-19761F Uncompressed Size     00001A0D (6669)\n-197623 Filename Length       002D (45)\n-197625 Extra Length          0009 (9)\n-197627 Comment Length        0000 (0)\n-197629 Disk Start            0000 (0)\n-19762B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19762D Ext File Attributes   00000000 (0)\n-197631 Local Header Offset   00183DBD (1588669)\n-197635 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197635: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197662 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197664   Length              0005 (5)\n-197666   Flags               01 (1) 'Modification'\n-197667   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-19766B CENTRAL HEADER #360   02014B50 (33639248)\n-19766F Created Zip Spec      14 (20) '2.0'\n-197670 Created OS            00 (0) 'MS-DOS'\n-197671 Extract Zip Spec      14 (20) '2.0'\n-197672 Extract OS            00 (0) 'MS-DOS'\n-197673 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197675 Compression Method    0000 (0) 'Stored'\n-197677 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19767B CRC                   C6C2FD7D (3334667645)\n-19767F Compressed Size       0000110A (4362)\n-197683 Uncompressed Size     0000110A (4362)\n-197687 Filename Length       0031 (49)\n-197689 Extra Length          0009 (9)\n-19768B Comment Length        0000 (0)\n-19768D Disk Start            0000 (0)\n-19768F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-197691 Ext File Attributes   00000000 (0)\n-197695 Local Header Offset   0018582E (1595438)\n-197699 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197699: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1976CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1976CC   Length              0005 (5)\n-1976CE   Flags               01 (1) 'Modification'\n-1976CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1976D3 CENTRAL HEADER #361   02014B50 (33639248)\n-1976D7 Created Zip Spec      14 (20) '2.0'\n-1976D8 Created OS            00 (0) 'MS-DOS'\n-1976D9 Extract Zip Spec      14 (20) '2.0'\n-1976DA Extract OS            00 (0) 'MS-DOS'\n-1976DB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1976DD Compression Method    0000 (0) 'Stored'\n-1976DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1976E3 CRC                   92839F02 (2458099458)\n-1976E7 Compressed Size       00000C1C (3100)\n-1976EB Uncompressed Size     00000C1C (3100)\n-1976EF Filename Length       002F (47)\n-1976F1 Extra Length          0009 (9)\n-1976F3 Comment Length        0000 (0)\n-1976F5 Disk Start            0000 (0)\n-1976F7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1976F9 Ext File Attributes   00000000 (0)\n-1976FD Local Header Offset   001869A0 (1599904)\n-197701 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197701: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197730 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197732   Length              0005 (5)\n-197734   Flags               01 (1) 'Modification'\n-197735   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197739 CENTRAL HEADER #362   02014B50 (33639248)\n-19773D Created Zip Spec      14 (20) '2.0'\n-19773E Created OS            00 (0) 'MS-DOS'\n-19773F Extract Zip Spec      14 (20) '2.0'\n-197740 Extract OS            00 (0) 'MS-DOS'\n-197741 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197743 Compression Method    0000 (0) 'Stored'\n-197745 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197749 CRC                   ED067114 (3976622356)\n-19774D Compressed Size       00001C7D (7293)\n-197751 Uncompressed Size     00001C7D (7293)\n-197755 Filename Length       0031 (49)\n-197757 Extra Length          0009 (9)\n-197759 Comment Length        0000 (0)\n-19775B Disk Start            0000 (0)\n-19775D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19775F Ext File Attributes   00000000 (0)\n-197763 Local Header Offset   00187622 (1603106)\n-197767 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197767: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197798 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19779A   Length              0005 (5)\n-19779C   Flags               01 (1) 'Modification'\n-19779D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1977A1 CENTRAL HEADER #363   02014B50 (33639248)\n-1977A5 Created Zip Spec      14 (20) '2.0'\n-1977A6 Created OS            00 (0) 'MS-DOS'\n-1977A7 Extract Zip Spec      14 (20) '2.0'\n-1977A8 Extract OS            00 (0) 'MS-DOS'\n-1977A9 General Purpose Flag  0000 (0)\n-1977AB Compression Method    0000 (0) 'Stored'\n-1977AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1977B1 CRC                   00000000 (0)\n-1977B5 Compressed Size       00000000 (0)\n-1977B9 Uncompressed Size     00000000 (0)\n-1977BD Filename Length       001D (29)\n-1977BF Extra Length          0009 (9)\n-1977C1 Comment Length        0000 (0)\n-1977C3 Disk Start            0000 (0)\n-1977C5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1977C7 Ext File Attributes   00000000 (0)\n-1977CB Local Header Offset   00189307 (1610503)\n-1977CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1977CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1977EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1977EE   Length              0005 (5)\n-1977F0   Flags               01 (1) 'Modification'\n-1977F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1977F5 CENTRAL HEADER #364   02014B50 (33639248)\n-1977F9 Created Zip Spec      14 (20) '2.0'\n-1977FA Created OS            00 (0) 'MS-DOS'\n-1977FB Extract Zip Spec      14 (20) '2.0'\n-1977FC Extract OS            00 (0) 'MS-DOS'\n-1977FD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1977FF Compression Method    0000 (0) 'Stored'\n-197801 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197805 CRC                   D7F884E9 (3623388393)\n-197809 Compressed Size       00000381 (897)\n-19780D Uncompressed Size     00000381 (897)\n-197811 Filename Length       002D (45)\n-197813 Extra Length          0009 (9)\n-197815 Comment Length        0000 (0)\n-197817 Disk Start            0000 (0)\n-197819 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19781B Ext File Attributes   00000000 (0)\n-19781F Local Header Offset   0018934B (1610571)\n-197823 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197823: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197850 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197852   Length              0005 (5)\n-197854   Flags               01 (1) 'Modification'\n-197855   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197859 CENTRAL HEADER #365   02014B50 (33639248)\n-19785D Created Zip Spec      14 (20) '2.0'\n-19785E Created OS            00 (0) 'MS-DOS'\n-19785F Extract Zip Spec      14 (20) '2.0'\n-197860 Extract OS            00 (0) 'MS-DOS'\n-197861 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197863 Compression Method    0000 (0) 'Stored'\n-197865 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197869 CRC                   28AB9AE3 (682334947)\n-19786D Compressed Size       00000411 (1041)\n-197871 Uncompressed Size     00000411 (1041)\n-197875 Filename Length       002D (45)\n-197877 Extra Length          0009 (9)\n-197879 Comment Length        0000 (0)\n-19787B Disk Start            0000 (0)\n-19787D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-19787F Ext File Attributes   00000000 (0)\n-197883 Local Header Offset   00189730 (1611568)\n-197887 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197887: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1978B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1978B6   Length              0005 (5)\n-1978B8   Flags               01 (1) 'Modification'\n-1978B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1978BD CENTRAL HEADER #366   02014B50 (33639248)\n-1978C1 Created Zip Spec      14 (20) '2.0'\n-1978C2 Created OS            00 (0) 'MS-DOS'\n-1978C3 Extract Zip Spec      14 (20) '2.0'\n-1978C4 Extract OS            00 (0) 'MS-DOS'\n-1978C5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-1978C7 Compression Method    0000 (0) 'Stored'\n-1978C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1978CD CRC                   9CAA7033 (2628415539)\n-1978D1 Compressed Size       00000426 (1062)\n-1978D5 Uncompressed Size     00000426 (1062)\n-1978D9 Filename Length       0035 (53)\n-1978DB Extra Length          0009 (9)\n-1978DD Comment Length        0000 (0)\n-1978DF Disk Start            0000 (0)\n-1978E1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1978E3 Ext File Attributes   00000000 (0)\n-1978E7 Local Header Offset   00189BA5 (1612709)\n-1978EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+004303 DATA DESCRIPTOR       08074B50 (134695760)\n+004307 CRC                   0FF999F7 (268016119)\n+00430B Compressed Size       0000008E (142)\n+00430F Uncompressed Size     0000008E (142)\n+\n+004313 LOCAL HEADER #14      04034B50 (67324752)\n+004317 Extract Zip Spec      14 (20) '2.0'\n+004318 Extract OS            00 (0) 'MS-DOS'\n+004319 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+00431B Compression Method    0000 (0) 'Stored'\n+00431D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+004321 CRC                   00000000 (0)\n+004325 Compressed Size       00000000 (0)\n+004329 Uncompressed Size     00000000 (0)\n+00432D Filename Length       0042 (66)\n+00432F Extra Length          0009 (9)\n+004331 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4331: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+004373 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+004375   Length              0005 (5)\n+004377   Flags               01 (1) 'Modification'\n+004378   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+00437C PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+\n+0043C0 DATA DESCRIPTOR       08074B50 (134695760)\n+0043C4 CRC                   9C0450EC (2617528556)\n+0043C8 Compressed Size       00000044 (68)\n+0043CC Uncompressed Size     00000044 (68)\n+\n+0043D0 LOCAL HEADER #15      04034B50 (67324752)\n+0043D4 Extract Zip Spec      14 (20) '2.0'\n+0043D5 Extract OS            00 (0) 'MS-DOS'\n+0043D6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0043D8 Compression Method    0000 (0) 'Stored'\n+0043DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0043DE CRC                   00000000 (0)\n+0043E2 Compressed Size       00000000 (0)\n+0043E6 Uncompressed Size     00000000 (0)\n+0043EA Filename Length       0044 (68)\n+0043EC Extra Length          0009 (9)\n+0043EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x43EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+004432 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+004434   Length              0005 (5)\n+004436   Flags               01 (1) 'Modification'\n+004437   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+00443B PAYLOAD\n+\n+00456D DATA DESCRIPTOR       08074B50 (134695760)\n+004571 CRC                   56E1501D (1457606685)\n+004575 Compressed Size       00000132 (306)\n+004579 Uncompressed Size     00000132 (306)\n+\n+00457D LOCAL HEADER #16      04034B50 (67324752)\n+004581 Extract Zip Spec      14 (20) '2.0'\n+004582 Extract OS            00 (0) 'MS-DOS'\n+004583 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+004585 Compression Method    0000 (0) 'Stored'\n+004587 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+00458B CRC                   00000000 (0)\n+00458F Compressed Size       00000000 (0)\n+004593 Uncompressed Size     00000000 (0)\n+004597 Filename Length       0044 (68)\n+004599 Extra Length          0009 (9)\n+00459B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x459B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0045DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0045E1   Length              0005 (5)\n+0045E3   Flags               01 (1) 'Modification'\n+0045E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0045E8 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+\n+004668 DATA DESCRIPTOR       08074B50 (134695760)\n+00466C CRC                   F0F60C18 (4042656792)\n+004670 Compressed Size       00000080 (128)\n+004674 Uncompressed Size     00000080 (128)\n+\n+004678 LOCAL HEADER #17      04034B50 (67324752)\n+00467C Extract Zip Spec      14 (20) '2.0'\n+00467D Extract OS            00 (0) 'MS-DOS'\n+00467E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+004680 Compression Method    0000 (0) 'Stored'\n+004682 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+004686 CRC                   00000000 (0)\n+00468A Compressed Size       00000000 (0)\n+00468E Uncompressed Size     00000000 (0)\n+004692 Filename Length       003F (63)\n+004694 Extra Length          0009 (9)\n+004696 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4696: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0046D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0046D7   Length              0005 (5)\n+0046D9   Flags               01 (1) 'Modification'\n+0046DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0046DE PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+\n+00471A DATA DESCRIPTOR       08074B50 (134695760)\n+00471E CRC                   5CED5836 (1559058486)\n+004722 Compressed Size       0000003C (60)\n+004726 Uncompressed Size     0000003C (60)\n+\n+00472A LOCAL HEADER #18      04034B50 (67324752)\n+00472E Extract Zip Spec      14 (20) '2.0'\n+00472F Extract OS            00 (0) 'MS-DOS'\n+004730 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+004732 Compression Method    0000 (0) 'Stored'\n+004734 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+004738 CRC                   00000000 (0)\n+00473C Compressed Size       00000000 (0)\n+004740 Uncompressed Size     00000000 (0)\n+004744 Filename Length       0045 (69)\n+004746 Extra Length          0009 (9)\n+004748 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4748: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+00478D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+00478F   Length              0005 (5)\n+004791   Flags               01 (1) 'Modification'\n+004792   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+004796 PAYLOAD\n+\n+0048BF DATA DESCRIPTOR       08074B50 (134695760)\n+0048C3 CRC                   9C4BEDD5 (2622221781)\n+0048C7 Compressed Size       00000129 (297)\n+0048CB Uncompressed Size     00000129 (297)\n+\n+0048CF LOCAL HEADER #19      04034B50 (67324752)\n+0048D3 Extract Zip Spec      14 (20) '2.0'\n+0048D4 Extract OS            00 (0) 'MS-DOS'\n+0048D5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0048D7 Compression Method    0000 (0) 'Stored'\n+0048D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0048DD CRC                   00000000 (0)\n+0048E1 Compressed Size       00000000 (0)\n+0048E5 Uncompressed Size     00000000 (0)\n+0048E9 Filename Length       0055 (85)\n+0048EB Extra Length          0009 (9)\n+0048ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x48ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+004942 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+004944   Length              0005 (5)\n+004946   Flags               01 (1) 'Modification'\n+004947   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+00494B PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+\n+004997 DATA DESCRIPTOR       08074B50 (134695760)\n+00499B CRC                   BF790872 (3212380274)\n+00499F Compressed Size       0000004C (76)\n+0049A3 Uncompressed Size     0000004C (76)\n+\n+0049A7 LOCAL HEADER #20      04034B50 (67324752)\n+0049AB Extract Zip Spec      14 (20) '2.0'\n+0049AC Extract OS            00 (0) 'MS-DOS'\n+0049AD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0049AF Compression Method    0000 (0) 'Stored'\n+0049B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0049B5 CRC                   00000000 (0)\n+0049B9 Compressed Size       00000000 (0)\n+0049BD Uncompressed Size     00000000 (0)\n+0049C1 Filename Length       003E (62)\n+0049C3 Extra Length          0009 (9)\n+0049C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x49C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+004A03 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+004A05   Length              0005 (5)\n+004A07   Flags               01 (1) 'Modification'\n+004A08   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+004A0C PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+\n+004A7A DATA DESCRIPTOR       08074B50 (134695760)\n+004A7E CRC                   CEEAECDB (3471502555)\n+004A82 Compressed Size       0000006E (110)\n+004A86 Uncompressed Size     0000006E (110)\n+\n+004A8A LOCAL HEADER #21      04034B50 (67324752)\n+004A8E Extract Zip Spec      14 (20) '2.0'\n+004A8F Extract OS            00 (0) 'MS-DOS'\n+004A90 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+004A92 Compression Method    0000 (0) 'Stored'\n+004A94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+004A98 CRC                   00000000 (0)\n+004A9C Compressed Size       00000000 (0)\n+004AA0 Uncompressed Size     00000000 (0)\n+004AA4 Filename Length       0049 (73)\n+004AA6 Extra Length          0009 (9)\n+004AA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4AA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+004AF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+004AF3   Length              0005 (5)\n+004AF5   Flags               01 (1) 'Modification'\n+004AF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+004AFA PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+\n+004B6C DATA DESCRIPTOR       08074B50 (134695760)\n+004B70 CRC                   F822DEA4 (4163034788)\n+004B74 Compressed Size       00000072 (114)\n+004B78 Uncompressed Size     00000072 (114)\n+\n+004B7C LOCAL HEADER #22      04034B50 (67324752)\n+004B80 Extract Zip Spec      14 (20) '2.0'\n+004B81 Extract OS            00 (0) 'MS-DOS'\n+004B82 General Purpose Flag  0000 (0)\n+004B84 Compression Method    0000 (0) 'Stored'\n+004B86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+004B8A CRC                   00000000 (0)\n+004B8E Compressed Size       00000000 (0)\n+004B92 Uncompressed Size     00000000 (0)\n+004B96 Filename Length       000F (15)\n+004B98 Extra Length          0009 (9)\n+004B9A Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4B9A: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+004BA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+004BAB   Length              0005 (5)\n+004BAD   Flags               01 (1) 'Modification'\n+004BAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+004BB2 LOCAL HEADER #23      04034B50 (67324752)\n+004BB6 Extract Zip Spec      14 (20) '2.0'\n+004BB7 Extract OS            00 (0) 'MS-DOS'\n+004BB8 General Purpose Flag  0000 (0)\n+004BBA Compression Method    0000 (0) 'Stored'\n+004BBC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+004BC0 CRC                   00000000 (0)\n+004BC4 Compressed Size       00000000 (0)\n+004BC8 Uncompressed Size     00000000 (0)\n+004BCC Filename Length       0020 (32)\n+004BCE Extra Length          0009 (9)\n+004BD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4BD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+004BF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+004BF2   Length              0005 (5)\n+004BF4   Flags               01 (1) 'Modification'\n+004BF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+004BF9 LOCAL HEADER #24      04034B50 (67324752)\n+004BFD Extract Zip Spec      14 (20) '2.0'\n+004BFE Extract OS            00 (0) 'MS-DOS'\n+004BFF General Purpose Flag  0000 (0)\n+004C01 Compression Method    0000 (0) 'Stored'\n+004C03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+004C07 CRC                   00000000 (0)\n+004C0B Compressed Size       00000000 (0)\n+004C0F Uncompressed Size     00000000 (0)\n+004C13 Filename Length       002D (45)\n+004C15 Extra Length          0009 (9)\n+004C17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4C17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+004C44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+004C46   Length              0005 (5)\n+004C48   Flags               01 (1) 'Modification'\n+004C49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+004C4D LOCAL HEADER #25      04034B50 (67324752)\n+004C51 Extract Zip Spec      14 (20) '2.0'\n+004C52 Extract OS            00 (0) 'MS-DOS'\n+004C53 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+004C55 Compression Method    0000 (0) 'Stored'\n+004C57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+004C5B CRC                   00000000 (0)\n+004C5F Compressed Size       00000000 (0)\n+004C63 Uncompressed Size     00000000 (0)\n+004C67 Filename Length       003B (59)\n+004C69 Extra Length          0009 (9)\n+004C6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4C6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+004CA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+004CA8   Length              0005 (5)\n+004CAA   Flags               01 (1) 'Modification'\n+004CAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+004CAF DATA DESCRIPTOR       08074B50 (134695760)\n+004CB3 CRC                   00000000 (0)\n+004CB7 Compressed Size       00000000 (0)\n+004CBB Uncompressed Size     00000000 (0)\n+\n+004CBF LOCAL HEADER #26      04034B50 (67324752)\n+004CC3 Extract Zip Spec      14 (20) '2.0'\n+004CC4 Extract OS            00 (0) 'MS-DOS'\n+004CC5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+004CC7 Compression Method    0000 (0) 'Stored'\n+004CC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+004CCD CRC                   00000000 (0)\n+004CD1 Compressed Size       00000000 (0)\n+004CD5 Uncompressed Size     00000000 (0)\n+004CD9 Filename Length       0034 (52)\n+004CDB Extra Length          0009 (9)\n+004CDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4CDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+004D11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+004D13   Length              0005 (5)\n+004D15   Flags               01 (1) 'Modification'\n+004D16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+004D1A PAYLOAD\n+\n+00586A DATA DESCRIPTOR       08074B50 (134695760)\n+00586E CRC                   CDE8C563 (3454584163)\n+005872 Compressed Size       00000B50 (2896)\n+005876 Uncompressed Size     00000B50 (2896)\n+\n+00587A LOCAL HEADER #27      04034B50 (67324752)\n+00587E Extract Zip Spec      14 (20) '2.0'\n+00587F Extract OS            00 (0) 'MS-DOS'\n+005880 General Purpose Flag  0000 (0)\n+005882 Compression Method    0000 (0) 'Stored'\n+005884 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+005888 CRC                   00000000 (0)\n+00588C Compressed Size       00000000 (0)\n+005890 Uncompressed Size     00000000 (0)\n+005894 Filename Length       0012 (18)\n+005896 Extra Length          0009 (9)\n+005898 Filename              'XXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5898: Filename 'XXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0058AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0058AC   Length              0005 (5)\n+0058AE   Flags               01 (1) 'Modification'\n+0058AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0058B3 LOCAL HEADER #28      04034B50 (67324752)\n+0058B7 Extract Zip Spec      14 (20) '2.0'\n+0058B8 Extract OS            00 (0) 'MS-DOS'\n+0058B9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0058BB Compression Method    0000 (0) 'Stored'\n+0058BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0058C1 CRC                   00000000 (0)\n+0058C5 Compressed Size       00000000 (0)\n+0058C9 Uncompressed Size     00000000 (0)\n+0058CD Filename Length       0043 (67)\n+0058CF Extra Length          0009 (9)\n+0058D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x58D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+005914 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+005916   Length              0005 (5)\n+005918   Flags               01 (1) 'Modification'\n+005919   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+00591D PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+\n+0059CE DATA DESCRIPTOR       08074B50 (134695760)\n+0059D2 CRC                   40B03A55 (1085291093)\n+0059D6 Compressed Size       000000B1 (177)\n+0059DA Uncompressed Size     000000B1 (177)\n+\n+0059DE LOCAL HEADER #29      04034B50 (67324752)\n+0059E2 Extract Zip Spec      14 (20) '2.0'\n+0059E3 Extract OS            00 (0) 'MS-DOS'\n+0059E4 General Purpose Flag  0000 (0)\n+0059E6 Compression Method    0000 (0) 'Stored'\n+0059E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0059EC CRC                   00000000 (0)\n+0059F0 Compressed Size       00000000 (0)\n+0059F4 Uncompressed Size     00000000 (0)\n+0059F8 Filename Length       0004 (4)\n+0059FA Extra Length          0009 (9)\n+0059FC Filename              'XXXX'\n+#\n+# WARNING: Offset 0x59FC: Filename 'XXXX'\n+#          Zero length filename\n+#\n+005A00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+005A02   Length              0005 (5)\n+005A04   Flags               01 (1) 'Modification'\n+005A05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+005A09 LOCAL HEADER #30      04034B50 (67324752)\n+005A0D Extract Zip Spec      14 (20) '2.0'\n+005A0E Extract OS            00 (0) 'MS-DOS'\n+005A0F General Purpose Flag  0000 (0)\n+005A11 Compression Method    0000 (0) 'Stored'\n+005A13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+005A17 CRC                   00000000 (0)\n+005A1B Compressed Size       00000000 (0)\n+005A1F Uncompressed Size     00000000 (0)\n+005A23 Filename Length       000C (12)\n+005A25 Extra Length          0009 (9)\n+005A27 Filename              'XXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5A27: Filename 'XXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+005A33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+005A35   Length              0005 (5)\n+005A37   Flags               01 (1) 'Modification'\n+005A38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+005A3C LOCAL HEADER #31      04034B50 (67324752)\n+005A40 Extract Zip Spec      14 (20) '2.0'\n+005A41 Extract OS            00 (0) 'MS-DOS'\n+005A42 General Purpose Flag  0000 (0)\n+005A44 Compression Method    0000 (0) 'Stored'\n+005A46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+005A4A CRC                   00000000 (0)\n+005A4E Compressed Size       00000000 (0)\n+005A52 Uncompressed Size     00000000 (0)\n+005A56 Filename Length       0012 (18)\n+005A58 Extra Length          0009 (9)\n+005A5A Filename              'XXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5A5A: Filename 'XXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+005A6C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+005A6E   Length              0005 (5)\n+005A70   Flags               01 (1) 'Modification'\n+005A71   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+005A75 LOCAL HEADER #32      04034B50 (67324752)\n+005A79 Extract Zip Spec      14 (20) '2.0'\n+005A7A Extract OS            00 (0) 'MS-DOS'\n+005A7B General Purpose Flag  0000 (0)\n+005A7D Compression Method    0000 (0) 'Stored'\n+005A7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+005A83 CRC                   00000000 (0)\n+005A87 Compressed Size       00000000 (0)\n+005A8B Uncompressed Size     00000000 (0)\n+005A8F Filename Length       0019 (25)\n+005A91 Extra Length          0009 (9)\n+005A93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5A93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+005AAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+005AAE   Length              0005 (5)\n+005AB0   Flags               01 (1) 'Modification'\n+005AB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+005AB5 LOCAL HEADER #33      04034B50 (67324752)\n+005AB9 Extract Zip Spec      14 (20) '2.0'\n+005ABA Extract OS            00 (0) 'MS-DOS'\n+005ABB General Purpose Flag  0000 (0)\n+005ABD Compression Method    0000 (0) 'Stored'\n+005ABF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+005AC3 CRC                   00000000 (0)\n+005AC7 Compressed Size       00000000 (0)\n+005ACB Uncompressed Size     00000000 (0)\n+005ACF Filename Length       0023 (35)\n+005AD1 Extra Length          0009 (9)\n+005AD3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5AD3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+005AF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+005AF8   Length              0005 (5)\n+005AFA   Flags               01 (1) 'Modification'\n+005AFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+005AFF LOCAL HEADER #34      04034B50 (67324752)\n+005B03 Extract Zip Spec      14 (20) '2.0'\n+005B04 Extract OS            00 (0) 'MS-DOS'\n+005B05 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+005B07 Compression Method    0000 (0) 'Stored'\n+005B09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+005B0D CRC                   00000000 (0)\n+005B11 Compressed Size       00000000 (0)\n+005B15 Uncompressed Size     00000000 (0)\n+005B19 Filename Length       0030 (48)\n+005B1B Extra Length          0009 (9)\n+005B1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5B1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+005B4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+005B4F   Length              0005 (5)\n+005B51   Flags               01 (1) 'Modification'\n+005B52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+005B56 PAYLOAD\n+\n+006125 DATA DESCRIPTOR       08074B50 (134695760)\n+006129 CRC                   87D33073 (2278764659)\n+00612D Compressed Size       000005CF (1487)\n+006131 Uncompressed Size     000005CF (1487)\n+\n+006135 LOCAL HEADER #35      04034B50 (67324752)\n+006139 Extract Zip Spec      14 (20) '2.0'\n+00613A Extract OS            00 (0) 'MS-DOS'\n+00613B General Purpose Flag  0000 (0)\n+00613D Compression Method    0000 (0) 'Stored'\n+00613F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+006143 CRC                   00000000 (0)\n+006147 Compressed Size       00000000 (0)\n+00614B Uncompressed Size     00000000 (0)\n+00614F Filename Length       0019 (25)\n+006151 Extra Length          0009 (9)\n+006153 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6153: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+00616C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+00616E   Length              0005 (5)\n+006170   Flags               01 (1) 'Modification'\n+006171   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+006175 LOCAL HEADER #36      04034B50 (67324752)\n+006179 Extract Zip Spec      14 (20) '2.0'\n+00617A Extract OS            00 (0) 'MS-DOS'\n+00617B General Purpose Flag  0000 (0)\n+00617D Compression Method    0000 (0) 'Stored'\n+00617F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+006183 CRC                   00000000 (0)\n+006187 Compressed Size       00000000 (0)\n+00618B Uncompressed Size     00000000 (0)\n+00618F Filename Length       0024 (36)\n+006191 Extra Length          0009 (9)\n+006193 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6193: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0061B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0061B9   Length              0005 (5)\n+0061BB   Flags               01 (1) 'Modification'\n+0061BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0061C0 LOCAL HEADER #37      04034B50 (67324752)\n+0061C4 Extract Zip Spec      14 (20) '2.0'\n+0061C5 Extract OS            00 (0) 'MS-DOS'\n+0061C6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0061C8 Compression Method    0000 (0) 'Stored'\n+0061CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0061CE CRC                   00000000 (0)\n+0061D2 Compressed Size       00000000 (0)\n+0061D6 Uncompressed Size     00000000 (0)\n+0061DA Filename Length       0032 (50)\n+0061DC Extra Length          0009 (9)\n+0061DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x61DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+006210 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+006212   Length              0005 (5)\n+006214   Flags               01 (1) 'Modification'\n+006215   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+006219 PAYLOAD\n+\n+006CC9 DATA DESCRIPTOR       08074B50 (134695760)\n+006CCD CRC                   79620788 (2036467592)\n+006CD1 Compressed Size       00000AB0 (2736)\n+006CD5 Uncompressed Size     00000AB0 (2736)\n+\n+006CD9 LOCAL HEADER #38      04034B50 (67324752)\n+006CDD Extract Zip Spec      14 (20) '2.0'\n+006CDE Extract OS            00 (0) 'MS-DOS'\n+006CDF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+006CE1 Compression Method    0000 (0) 'Stored'\n+006CE3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+006CE7 CRC                   00000000 (0)\n+006CEB Compressed Size       00000000 (0)\n+006CEF Uncompressed Size     00000000 (0)\n+006CF3 Filename Length       0030 (48)\n+006CF5 Extra Length          0009 (9)\n+006CF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6CF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+006D27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+006D29   Length              0005 (5)\n+006D2B   Flags               01 (1) 'Modification'\n+006D2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+006D30 PAYLOAD\n+\n+00783F DATA DESCRIPTOR       08074B50 (134695760)\n+007843 CRC                   C8043322 (3355718434)\n+007847 Compressed Size       00000B0F (2831)\n+00784B Uncompressed Size     00000B0F (2831)\n+\n+00784F LOCAL HEADER #39      04034B50 (67324752)\n+007853 Extract Zip Spec      14 (20) '2.0'\n+007854 Extract OS            00 (0) 'MS-DOS'\n+007855 General Purpose Flag  0000 (0)\n+007857 Compression Method    0000 (0) 'Stored'\n+007859 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+00785D CRC                   00000000 (0)\n+007861 Compressed Size       00000000 (0)\n+007865 Uncompressed Size     00000000 (0)\n+007869 Filename Length       0004 (4)\n+00786B Extra Length          0009 (9)\n+00786D Filename              'XXXX'\n+#\n+# WARNING: Offset 0x786D: Filename 'XXXX'\n+#          Zero length filename\n+#\n+007871 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+007873   Length              0005 (5)\n+007875   Flags               01 (1) 'Modification'\n+007876   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+00787A LOCAL HEADER #40      04034B50 (67324752)\n+00787E Extract Zip Spec      14 (20) '2.0'\n+00787F Extract OS            00 (0) 'MS-DOS'\n+007880 General Purpose Flag  0000 (0)\n+007882 Compression Method    0000 (0) 'Stored'\n+007884 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+007888 CRC                   00000000 (0)\n+00788C Compressed Size       00000000 (0)\n+007890 Uncompressed Size     00000000 (0)\n+007894 Filename Length       000B (11)\n+007896 Extra Length          0009 (9)\n+007898 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7898: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0078A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0078A5   Length              0005 (5)\n+0078A7   Flags               01 (1) 'Modification'\n+0078A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0078AC LOCAL HEADER #41      04034B50 (67324752)\n+0078B0 Extract Zip Spec      14 (20) '2.0'\n+0078B1 Extract OS            00 (0) 'MS-DOS'\n+0078B2 General Purpose Flag  0000 (0)\n+0078B4 Compression Method    0000 (0) 'Stored'\n+0078B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0078BA CRC                   00000000 (0)\n+0078BE Compressed Size       00000000 (0)\n+0078C2 Uncompressed Size     00000000 (0)\n+0078C6 Filename Length       0011 (17)\n+0078C8 Extra Length          0009 (9)\n+0078CA Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x78CA: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0078DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0078DD   Length              0005 (5)\n+0078DF   Flags               01 (1) 'Modification'\n+0078E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0078E4 LOCAL HEADER #42      04034B50 (67324752)\n+0078E8 Extract Zip Spec      14 (20) '2.0'\n+0078E9 Extract OS            00 (0) 'MS-DOS'\n+0078EA General Purpose Flag  0000 (0)\n+0078EC Compression Method    0000 (0) 'Stored'\n+0078EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0078F2 CRC                   00000000 (0)\n+0078F6 Compressed Size       00000000 (0)\n+0078FA Uncompressed Size     00000000 (0)\n+0078FE Filename Length       0018 (24)\n+007900 Extra Length          0009 (9)\n+007902 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7902: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+00791A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+00791C   Length              0005 (5)\n+00791E   Flags               01 (1) 'Modification'\n+00791F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+007923 LOCAL HEADER #43      04034B50 (67324752)\n+007927 Extract Zip Spec      14 (20) '2.0'\n+007928 Extract OS            00 (0) 'MS-DOS'\n+007929 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+00792B Compression Method    0000 (0) 'Stored'\n+00792D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+007931 CRC                   00000000 (0)\n+007935 Compressed Size       00000000 (0)\n+007939 Uncompressed Size     00000000 (0)\n+00793D Filename Length       0030 (48)\n+00793F Extra Length          0009 (9)\n+007941 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7941: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+007971 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+007973   Length              0005 (5)\n+007975   Flags               01 (1) 'Modification'\n+007976   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+00797A PAYLOAD\n+\n+008AFA DATA DESCRIPTOR       08074B50 (134695760)\n+008AFE CRC                   7A6AA41E (2053809182)\n+008B02 Compressed Size       00001180 (4480)\n+008B06 Uncompressed Size     00001180 (4480)\n+\n+008B0A LOCAL HEADER #44      04034B50 (67324752)\n+008B0E Extract Zip Spec      14 (20) '2.0'\n+008B0F Extract OS            00 (0) 'MS-DOS'\n+008B10 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+008B12 Compression Method    0000 (0) 'Stored'\n+008B14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+008B18 CRC                   00000000 (0)\n+008B1C Compressed Size       00000000 (0)\n+008B20 Uncompressed Size     00000000 (0)\n+008B24 Filename Length       0029 (41)\n+008B26 Extra Length          0009 (9)\n+008B28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8B28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+008B51 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+008B53   Length              0005 (5)\n+008B55   Flags               01 (1) 'Modification'\n+008B56   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+008B5A PAYLOAD\n+\n+0090D1 DATA DESCRIPTOR       08074B50 (134695760)\n+0090D5 CRC                   00F537FE (16070654)\n+0090D9 Compressed Size       00000577 (1399)\n+0090DD Uncompressed Size     00000577 (1399)\n+\n+0090E1 LOCAL HEADER #45      04034B50 (67324752)\n+0090E5 Extract Zip Spec      14 (20) '2.0'\n+0090E6 Extract OS            00 (0) 'MS-DOS'\n+0090E7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0090E9 Compression Method    0000 (0) 'Stored'\n+0090EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0090EF CRC                   00000000 (0)\n+0090F3 Compressed Size       00000000 (0)\n+0090F7 Uncompressed Size     00000000 (0)\n+0090FB Filename Length       0026 (38)\n+0090FD Extra Length          0009 (9)\n+0090FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x90FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+009125 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+009127   Length              0005 (5)\n+009129   Flags               01 (1) 'Modification'\n+00912A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+00912E PAYLOAD\n+\n+009AD9 DATA DESCRIPTOR       08074B50 (134695760)\n+009ADD CRC                   1CCCA507 (483173639)\n+009AE1 Compressed Size       000009AB (2475)\n+009AE5 Uncompressed Size     000009AB (2475)\n+\n+009AE9 LOCAL HEADER #46      04034B50 (67324752)\n+009AED Extract Zip Spec      14 (20) '2.0'\n+009AEE Extract OS            00 (0) 'MS-DOS'\n+009AEF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+009AF1 Compression Method    0000 (0) 'Stored'\n+009AF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+009AF7 CRC                   00000000 (0)\n+009AFB Compressed Size       00000000 (0)\n+009AFF Uncompressed Size     00000000 (0)\n+009B03 Filename Length       0021 (33)\n+009B05 Extra Length          0009 (9)\n+009B07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9B07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+009B28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+009B2A   Length              0005 (5)\n+009B2C   Flags               01 (1) 'Modification'\n+009B2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+009B31 PAYLOAD\n+\n+009FD0 DATA DESCRIPTOR       08074B50 (134695760)\n+009FD4 CRC                   0622E0A0 (102949024)\n+009FD8 Compressed Size       0000049F (1183)\n+009FDC Uncompressed Size     0000049F (1183)\n+\n+009FE0 LOCAL HEADER #47      04034B50 (67324752)\n+009FE4 Extract Zip Spec      14 (20) '2.0'\n+009FE5 Extract OS            00 (0) 'MS-DOS'\n+009FE6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+009FE8 Compression Method    0000 (0) 'Stored'\n+009FEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+009FEE CRC                   00000000 (0)\n+009FF2 Compressed Size       00000000 (0)\n+009FF6 Uncompressed Size     00000000 (0)\n+009FFA Filename Length       0027 (39)\n+009FFC Extra Length          0009 (9)\n+009FFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9FFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+00A025 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+00A027   Length              0005 (5)\n+00A029   Flags               01 (1) 'Modification'\n+00A02A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+00A02E PAYLOAD\n+\n+00C2C8 DATA DESCRIPTOR       08074B50 (134695760)\n+00C2CC CRC                   3DF15F74 (1039228788)\n+00C2D0 Compressed Size       0000229A (8858)\n+00C2D4 Uncompressed Size     0000229A (8858)\n+\n+00C2D8 LOCAL HEADER #48      04034B50 (67324752)\n+00C2DC Extract Zip Spec      14 (20) '2.0'\n+00C2DD Extract OS            00 (0) 'MS-DOS'\n+00C2DE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+00C2E0 Compression Method    0000 (0) 'Stored'\n+00C2E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+00C2E6 CRC                   00000000 (0)\n+00C2EA Compressed Size       00000000 (0)\n+00C2EE Uncompressed Size     00000000 (0)\n+00C2F2 Filename Length       0026 (38)\n+00C2F4 Extra Length          0009 (9)\n+00C2F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC2F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+00C31C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+00C31E   Length              0005 (5)\n+00C320   Flags               01 (1) 'Modification'\n+00C321   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+00C325 PAYLOAD\n+\n+00C70D DATA DESCRIPTOR       08074B50 (134695760)\n+00C711 CRC                   52712A03 (1383148035)\n+00C715 Compressed Size       000003E8 (1000)\n+00C719 Uncompressed Size     000003E8 (1000)\n+\n+00C71D LOCAL HEADER #49      04034B50 (67324752)\n+00C721 Extract Zip Spec      14 (20) '2.0'\n+00C722 Extract OS            00 (0) 'MS-DOS'\n+00C723 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+00C725 Compression Method    0000 (0) 'Stored'\n+00C727 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+00C72B CRC                   00000000 (0)\n+00C72F Compressed Size       00000000 (0)\n+00C733 Uncompressed Size     00000000 (0)\n+00C737 Filename Length       0020 (32)\n+00C739 Extra Length          0009 (9)\n+00C73B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC73B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+00C75B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+00C75D   Length              0005 (5)\n+00C75F   Flags               01 (1) 'Modification'\n+00C760   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+00C764 PAYLOAD\n+\n+01DAED DATA DESCRIPTOR       08074B50 (134695760)\n+01DAF1 CRC                   4B96BF4D (1268170573)\n+01DAF5 Compressed Size       00011389 (70537)\n+01DAF9 Uncompressed Size     00011389 (70537)\n+\n+01DAFD LOCAL HEADER #50      04034B50 (67324752)\n+01DB01 Extract Zip Spec      14 (20) '2.0'\n+01DB02 Extract OS            00 (0) 'MS-DOS'\n+01DB03 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01DB05 Compression Method    0000 (0) 'Stored'\n+01DB07 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01DB0B CRC                   00000000 (0)\n+01DB0F Compressed Size       00000000 (0)\n+01DB13 Uncompressed Size     00000000 (0)\n+01DB17 Filename Length       0027 (39)\n+01DB19 Extra Length          0009 (9)\n+01DB1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1DB1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01DB42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01DB44   Length              0005 (5)\n+01DB46   Flags               01 (1) 'Modification'\n+01DB47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01DB4B PAYLOAD\n+\n+0210AF DATA DESCRIPTOR       08074B50 (134695760)\n+0210B3 CRC                   E6F6EE92 (3874942610)\n+0210B7 Compressed Size       00003564 (13668)\n+0210BB Uncompressed Size     00003564 (13668)\n+\n+0210BF LOCAL HEADER #51      04034B50 (67324752)\n+0210C3 Extract Zip Spec      14 (20) '2.0'\n+0210C4 Extract OS            00 (0) 'MS-DOS'\n+0210C5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0210C7 Compression Method    0000 (0) 'Stored'\n+0210C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0210CD CRC                   00000000 (0)\n+0210D1 Compressed Size       00000000 (0)\n+0210D5 Uncompressed Size     00000000 (0)\n+0210D9 Filename Length       0029 (41)\n+0210DB Extra Length          0009 (9)\n+0210DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x210DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+021106 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+021108   Length              0005 (5)\n+02110A   Flags               01 (1) 'Modification'\n+02110B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02110F PAYLOAD\n+\n+02471F DATA DESCRIPTOR       08074B50 (134695760)\n+024723 CRC                   D525E52E (3576030510)\n+024727 Compressed Size       00003610 (13840)\n+02472B Uncompressed Size     00003610 (13840)\n+\n+02472F LOCAL HEADER #52      04034B50 (67324752)\n+024733 Extract Zip Spec      14 (20) '2.0'\n+024734 Extract OS            00 (0) 'MS-DOS'\n+024735 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+024737 Compression Method    0000 (0) 'Stored'\n+024739 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02473D CRC                   00000000 (0)\n+024741 Compressed Size       00000000 (0)\n+024745 Uncompressed Size     00000000 (0)\n+024749 Filename Length       0024 (36)\n+02474B Extra Length          0009 (9)\n+02474D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2474D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+024771 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+024773   Length              0005 (5)\n+024775   Flags               01 (1) 'Modification'\n+024776   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02477A PAYLOAD\n+\n+026EB5 DATA DESCRIPTOR       08074B50 (134695760)\n+026EB9 CRC                   82E9AE97 (2196352663)\n+026EBD Compressed Size       0000273B (10043)\n+026EC1 Uncompressed Size     0000273B (10043)\n+\n+026EC5 LOCAL HEADER #53      04034B50 (67324752)\n+026EC9 Extract Zip Spec      14 (20) '2.0'\n+026ECA Extract OS            00 (0) 'MS-DOS'\n+026ECB General Purpose Flag  0000 (0)\n+026ECD Compression Method    0000 (0) 'Stored'\n+026ECF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026ED3 CRC                   00000000 (0)\n+026ED7 Compressed Size       00000000 (0)\n+026EDB Uncompressed Size     00000000 (0)\n+026EDF Filename Length       0021 (33)\n+026EE1 Extra Length          0009 (9)\n+026EE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26EE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+026F04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+026F06   Length              0005 (5)\n+026F08   Flags               01 (1) 'Modification'\n+026F09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+026F0D LOCAL HEADER #54      04034B50 (67324752)\n+026F11 Extract Zip Spec      14 (20) '2.0'\n+026F12 Extract OS            00 (0) 'MS-DOS'\n+026F13 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+026F15 Compression Method    0000 (0) 'Stored'\n+026F17 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026F1B CRC                   00000000 (0)\n+026F1F Compressed Size       00000000 (0)\n+026F23 Uncompressed Size     00000000 (0)\n+026F27 Filename Length       0036 (54)\n+026F29 Extra Length          0009 (9)\n+026F2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26F2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+026F61 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+026F63   Length              0005 (5)\n+026F65   Flags               01 (1) 'Modification'\n+026F66   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+026F6A PAYLOAD\n+\n+0274BE DATA DESCRIPTOR       08074B50 (134695760)\n+0274C2 CRC                   62810B39 (1652624185)\n+0274C6 Compressed Size       00000554 (1364)\n+0274CA Uncompressed Size     00000554 (1364)\n+\n+0274CE LOCAL HEADER #55      04034B50 (67324752)\n+0274D2 Extract Zip Spec      14 (20) '2.0'\n+0274D3 Extract OS            00 (0) 'MS-DOS'\n+0274D4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0274D6 Compression Method    0000 (0) 'Stored'\n+0274D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0274DC CRC                   00000000 (0)\n+0274E0 Compressed Size       00000000 (0)\n+0274E4 Uncompressed Size     00000000 (0)\n+0274E8 Filename Length       0038 (56)\n+0274EA Extra Length          0009 (9)\n+0274EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x274EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+027524 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027526   Length              0005 (5)\n+027528   Flags               01 (1) 'Modification'\n+027529   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02752D PAYLOAD\n+\n+028EA1 DATA DESCRIPTOR       08074B50 (134695760)\n+028EA5 CRC                   7918064D (2031617613)\n+028EA9 Compressed Size       00001974 (6516)\n+028EAD Uncompressed Size     00001974 (6516)\n+\n+028EB1 LOCAL HEADER #56      04034B50 (67324752)\n+028EB5 Extract Zip Spec      14 (20) '2.0'\n+028EB6 Extract OS            00 (0) 'MS-DOS'\n+028EB7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+028EB9 Compression Method    0000 (0) 'Stored'\n+028EBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+028EBF CRC                   00000000 (0)\n+028EC3 Compressed Size       00000000 (0)\n+028EC7 Uncompressed Size     00000000 (0)\n+028ECB Filename Length       003B (59)\n+028ECD Extra Length          0009 (9)\n+028ECF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x28ECF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+028F0A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+028F0C   Length              0005 (5)\n+028F0E   Flags               01 (1) 'Modification'\n+028F0F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+028F13 PAYLOAD\n+\n+02DFC7 DATA DESCRIPTOR       08074B50 (134695760)\n+02DFCB CRC                   9C935B9B (2626902939)\n+02DFCF Compressed Size       000050B4 (20660)\n+02DFD3 Uncompressed Size     000050B4 (20660)\n+\n+02DFD7 LOCAL HEADER #57      04034B50 (67324752)\n+02DFDB Extract Zip Spec      14 (20) '2.0'\n+02DFDC Extract OS            00 (0) 'MS-DOS'\n+02DFDD General Purpose Flag  0000 (0)\n+02DFDF Compression Method    0000 (0) 'Stored'\n+02DFE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02DFE5 CRC                   00000000 (0)\n+02DFE9 Compressed Size       00000000 (0)\n+02DFED Uncompressed Size     00000000 (0)\n+02DFF1 Filename Length       0021 (33)\n+02DFF3 Extra Length          0009 (9)\n+02DFF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DFF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02E016 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02E018   Length              0005 (5)\n+02E01A   Flags               01 (1) 'Modification'\n+02E01B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02E01F LOCAL HEADER #58      04034B50 (67324752)\n+02E023 Extract Zip Spec      14 (20) '2.0'\n+02E024 Extract OS            00 (0) 'MS-DOS'\n+02E025 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02E027 Compression Method    0000 (0) 'Stored'\n+02E029 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02E02D CRC                   00000000 (0)\n+02E031 Compressed Size       00000000 (0)\n+02E035 Uncompressed Size     00000000 (0)\n+02E039 Filename Length       0034 (52)\n+02E03B Extra Length          0009 (9)\n+02E03D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E03D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02E071 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02E073   Length              0005 (5)\n+02E075   Flags               01 (1) 'Modification'\n+02E076   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02E07A PAYLOAD\n+\n+0314DC DATA DESCRIPTOR       08074B50 (134695760)\n+0314E0 CRC                   2B1352F9 (722686713)\n+0314E4 Compressed Size       00003462 (13410)\n+0314E8 Uncompressed Size     00003462 (13410)\n+\n+0314EC LOCAL HEADER #59      04034B50 (67324752)\n+0314F0 Extract Zip Spec      14 (20) '2.0'\n+0314F1 Extract OS            00 (0) 'MS-DOS'\n+0314F2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0314F4 Compression Method    0000 (0) 'Stored'\n+0314F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0314FA CRC                   00000000 (0)\n+0314FE Compressed Size       00000000 (0)\n+031502 Uncompressed Size     00000000 (0)\n+031506 Filename Length       003F (63)\n+031508 Extra Length          0009 (9)\n+03150A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3150A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+031549 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03154B   Length              0005 (5)\n+03154D   Flags               01 (1) 'Modification'\n+03154E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+031552 PAYLOAD\n+\n+03236D DATA DESCRIPTOR       08074B50 (134695760)\n+032371 CRC                   50C2BDD7 (1354939863)\n+032375 Compressed Size       00000E1B (3611)\n+032379 Uncompressed Size     00000E1B (3611)\n+\n+03237D LOCAL HEADER #60      04034B50 (67324752)\n+032381 Extract Zip Spec      14 (20) '2.0'\n+032382 Extract OS            00 (0) 'MS-DOS'\n+032383 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+032385 Compression Method    0000 (0) 'Stored'\n+032387 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03238B CRC                   00000000 (0)\n+03238F Compressed Size       00000000 (0)\n+032393 Uncompressed Size     00000000 (0)\n+032397 Filename Length       002B (43)\n+032399 Extra Length          0009 (9)\n+03239B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3239B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0323C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0323C8   Length              0005 (5)\n+0323CA   Flags               01 (1) 'Modification'\n+0323CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0323CF PAYLOAD\n+\n+0343E6 DATA DESCRIPTOR       08074B50 (134695760)\n+0343EA CRC                   4F0E9D5D (1326357853)\n+0343EE Compressed Size       00002017 (8215)\n+0343F2 Uncompressed Size     00002017 (8215)\n+\n+0343F6 LOCAL HEADER #61      04034B50 (67324752)\n+0343FA Extract Zip Spec      14 (20) '2.0'\n+0343FB Extract OS            00 (0) 'MS-DOS'\n+0343FC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0343FE Compression Method    0000 (0) 'Stored'\n+034400 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034404 CRC                   00000000 (0)\n+034408 Compressed Size       00000000 (0)\n+03440C Uncompressed Size     00000000 (0)\n+034410 Filename Length       003B (59)\n+034412 Extra Length          0009 (9)\n+034414 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x34414: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03444F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034451   Length              0005 (5)\n+034453   Flags               01 (1) 'Modification'\n+034454   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+034458 PAYLOAD\n+\n+0348F6 DATA DESCRIPTOR       08074B50 (134695760)\n+0348FA CRC                   35B34ECC (900943564)\n+0348FE Compressed Size       0000049E (1182)\n+034902 Uncompressed Size     0000049E (1182)\n+\n+034906 LOCAL HEADER #62      04034B50 (67324752)\n+03490A Extract Zip Spec      14 (20) '2.0'\n+03490B Extract OS            00 (0) 'MS-DOS'\n+03490C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03490E Compression Method    0000 (0) 'Stored'\n+034910 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034914 CRC                   00000000 (0)\n+034918 Compressed Size       00000000 (0)\n+03491C Uncompressed Size     00000000 (0)\n+034920 Filename Length       003D (61)\n+034922 Extra Length          0009 (9)\n+034924 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x34924: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+034961 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034963   Length              0005 (5)\n+034965   Flags               01 (1) 'Modification'\n+034966   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03496A PAYLOAD\n+\n+034E10 DATA DESCRIPTOR       08074B50 (134695760)\n+034E14 CRC                   AE36D6DB (2922829531)\n+034E18 Compressed Size       000004A6 (1190)\n+034E1C Uncompressed Size     000004A6 (1190)\n+\n+034E20 LOCAL HEADER #63      04034B50 (67324752)\n+034E24 Extract Zip Spec      14 (20) '2.0'\n+034E25 Extract OS            00 (0) 'MS-DOS'\n+034E26 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+034E28 Compression Method    0000 (0) 'Stored'\n+034E2A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034E2E CRC                   00000000 (0)\n+034E32 Compressed Size       00000000 (0)\n+034E36 Uncompressed Size     00000000 (0)\n+034E3A Filename Length       002B (43)\n+034E3C Extra Length          0009 (9)\n+034E3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x34E3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+034E69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034E6B   Length              0005 (5)\n+034E6D   Flags               01 (1) 'Modification'\n+034E6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+034E72 PAYLOAD\n+\n+037DBF DATA DESCRIPTOR       08074B50 (134695760)\n+037DC3 CRC                   693DBCBA (1765653690)\n+037DC7 Compressed Size       00002F4D (12109)\n+037DCB Uncompressed Size     00002F4D (12109)\n+\n+037DCF LOCAL HEADER #64      04034B50 (67324752)\n+037DD3 Extract Zip Spec      14 (20) '2.0'\n+037DD4 Extract OS            00 (0) 'MS-DOS'\n+037DD5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+037DD7 Compression Method    0000 (0) 'Stored'\n+037DD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+037DDD CRC                   00000000 (0)\n+037DE1 Compressed Size       00000000 (0)\n+037DE5 Uncompressed Size     00000000 (0)\n+037DE9 Filename Length       002D (45)\n+037DEB Extra Length          0009 (9)\n+037DED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x37DED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+037E1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+037E1C   Length              0005 (5)\n+037E1E   Flags               01 (1) 'Modification'\n+037E1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+037E23 PAYLOAD\n+\n+03C42B DATA DESCRIPTOR       08074B50 (134695760)\n+03C42F CRC                   44BCC62B (1153222187)\n+03C433 Compressed Size       00004608 (17928)\n+03C437 Uncompressed Size     00004608 (17928)\n+\n+03C43B LOCAL HEADER #65      04034B50 (67324752)\n+03C43F Extract Zip Spec      14 (20) '2.0'\n+03C440 Extract OS            00 (0) 'MS-DOS'\n+03C441 General Purpose Flag  0000 (0)\n+03C443 Compression Method    0000 (0) 'Stored'\n+03C445 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03C449 CRC                   00000000 (0)\n+03C44D Compressed Size       00000000 (0)\n+03C451 Uncompressed Size     00000000 (0)\n+03C455 Filename Length       0021 (33)\n+03C457 Extra Length          0009 (9)\n+03C459 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C459: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03C47A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03C47C   Length              0005 (5)\n+03C47E   Flags               01 (1) 'Modification'\n+03C47F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03C483 LOCAL HEADER #66      04034B50 (67324752)\n+03C487 Extract Zip Spec      14 (20) '2.0'\n+03C488 Extract OS            00 (0) 'MS-DOS'\n+03C489 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03C48B Compression Method    0000 (0) 'Stored'\n+03C48D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03C491 CRC                   00000000 (0)\n+03C495 Compressed Size       00000000 (0)\n+03C499 Uncompressed Size     00000000 (0)\n+03C49D Filename Length       002E (46)\n+03C49F Extra Length          0009 (9)\n+03C4A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C4A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03C4CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03C4D1   Length              0005 (5)\n+03C4D3   Flags               01 (1) 'Modification'\n+03C4D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03C4D8 PAYLOAD\n+\n+03C9BF DATA DESCRIPTOR       08074B50 (134695760)\n+03C9C3 CRC                   01EEDE5E (32431710)\n+03C9C7 Compressed Size       000004E7 (1255)\n+03C9CB Uncompressed Size     000004E7 (1255)\n+\n+03C9CF LOCAL HEADER #67      04034B50 (67324752)\n+03C9D3 Extract Zip Spec      14 (20) '2.0'\n+03C9D4 Extract OS            00 (0) 'MS-DOS'\n+03C9D5 General Purpose Flag  0000 (0)\n+03C9D7 Compression Method    0000 (0) 'Stored'\n+03C9D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03C9DD CRC                   00000000 (0)\n+03C9E1 Compressed Size       00000000 (0)\n+03C9E5 Uncompressed Size     00000000 (0)\n+03C9E9 Filename Length       0029 (41)\n+03C9EB Extra Length          0009 (9)\n+03C9ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C9ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03CA16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03CA18   Length              0005 (5)\n+03CA1A   Flags               01 (1) 'Modification'\n+03CA1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03CA1F LOCAL HEADER #68      04034B50 (67324752)\n+03CA23 Extract Zip Spec      14 (20) '2.0'\n+03CA24 Extract OS            00 (0) 'MS-DOS'\n+03CA25 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03CA27 Compression Method    0000 (0) 'Stored'\n+03CA29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03CA2D CRC                   00000000 (0)\n+03CA31 Compressed Size       00000000 (0)\n+03CA35 Uncompressed Size     00000000 (0)\n+03CA39 Filename Length       003E (62)\n+03CA3B Extra Length          0009 (9)\n+03CA3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3CA3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03CA7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03CA7D   Length              0005 (5)\n+03CA7F   Flags               01 (1) 'Modification'\n+03CA80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03CA84 PAYLOAD\n+\n+03D59F DATA DESCRIPTOR       08074B50 (134695760)\n+03D5A3 CRC                   20854F04 (545607428)\n+03D5A7 Compressed Size       00000B1B (2843)\n+03D5AB Uncompressed Size     00000B1B (2843)\n+\n+03D5AF LOCAL HEADER #69      04034B50 (67324752)\n+03D5B3 Extract Zip Spec      14 (20) '2.0'\n+03D5B4 Extract OS            00 (0) 'MS-DOS'\n+03D5B5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03D5B7 Compression Method    0000 (0) 'Stored'\n+03D5B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03D5BD CRC                   00000000 (0)\n+03D5C1 Compressed Size       00000000 (0)\n+03D5C5 Uncompressed Size     00000000 (0)\n+03D5C9 Filename Length       003E (62)\n+03D5CB Extra Length          0009 (9)\n+03D5CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D5CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03D60B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03D60D   Length              0005 (5)\n+03D60F   Flags               01 (1) 'Modification'\n+03D610   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03D614 PAYLOAD\n+\n+03DD47 DATA DESCRIPTOR       08074B50 (134695760)\n+03DD4B CRC                   D19D012A (3516727594)\n+03DD4F Compressed Size       00000733 (1843)\n+03DD53 Uncompressed Size     00000733 (1843)\n+\n+03DD57 LOCAL HEADER #70      04034B50 (67324752)\n+03DD5B Extract Zip Spec      14 (20) '2.0'\n+03DD5C Extract OS            00 (0) 'MS-DOS'\n+03DD5D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03DD5F Compression Method    0000 (0) 'Stored'\n+03DD61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03DD65 CRC                   00000000 (0)\n+03DD69 Compressed Size       00000000 (0)\n+03DD6D Uncompressed Size     00000000 (0)\n+03DD71 Filename Length       0038 (56)\n+03DD73 Extra Length          0009 (9)\n+03DD75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3DD75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03DDAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03DDAF   Length              0005 (5)\n+03DDB1   Flags               01 (1) 'Modification'\n+03DDB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03DDB6 PAYLOAD\n+\n+041A7A DATA DESCRIPTOR       08074B50 (134695760)\n+041A7E CRC                   489CA2B6 (1218224822)\n+041A82 Compressed Size       00003CC4 (15556)\n+041A86 Uncompressed Size     00003CC4 (15556)\n+\n+041A8A LOCAL HEADER #71      04034B50 (67324752)\n+041A8E Extract Zip Spec      14 (20) '2.0'\n+041A8F Extract OS            00 (0) 'MS-DOS'\n+041A90 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+041A92 Compression Method    0000 (0) 'Stored'\n+041A94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+041A98 CRC                   00000000 (0)\n+041A9C Compressed Size       00000000 (0)\n+041AA0 Uncompressed Size     00000000 (0)\n+041AA4 Filename Length       003C (60)\n+041AA6 Extra Length          0009 (9)\n+041AA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41AA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+041AE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+041AE6   Length              0005 (5)\n+041AE8   Flags               01 (1) 'Modification'\n+041AE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+041AED PAYLOAD\n+\n+042EA7 DATA DESCRIPTOR       08074B50 (134695760)\n+042EAB CRC                   BD63F8B8 (3177445560)\n+042EAF Compressed Size       000013BA (5050)\n+042EB3 Uncompressed Size     000013BA (5050)\n+\n+042EB7 LOCAL HEADER #72      04034B50 (67324752)\n+042EBB Extract Zip Spec      14 (20) '2.0'\n+042EBC Extract OS            00 (0) 'MS-DOS'\n+042EBD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+042EBF Compression Method    0000 (0) 'Stored'\n+042EC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+042EC5 CRC                   00000000 (0)\n+042EC9 Compressed Size       00000000 (0)\n+042ECD Uncompressed Size     00000000 (0)\n+042ED1 Filename Length       003F (63)\n+042ED3 Extra Length          0009 (9)\n+042ED5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x42ED5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+042F14 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+042F16   Length              0005 (5)\n+042F18   Flags               01 (1) 'Modification'\n+042F19   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+042F1D PAYLOAD\n+\n+043CCD DATA DESCRIPTOR       08074B50 (134695760)\n+043CD1 CRC                   C96B89A9 (3379268009)\n+043CD5 Compressed Size       00000DB0 (3504)\n+043CD9 Uncompressed Size     00000DB0 (3504)\n+\n+043CDD LOCAL HEADER #73      04034B50 (67324752)\n+043CE1 Extract Zip Spec      14 (20) '2.0'\n+043CE2 Extract OS            00 (0) 'MS-DOS'\n+043CE3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+043CE5 Compression Method    0000 (0) 'Stored'\n+043CE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+043CEB CRC                   00000000 (0)\n+043CEF Compressed Size       00000000 (0)\n+043CF3 Uncompressed Size     00000000 (0)\n+043CF7 Filename Length       0039 (57)\n+043CF9 Extra Length          0009 (9)\n+043CFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x43CFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+043D34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+043D36   Length              0005 (5)\n+043D38   Flags               01 (1) 'Modification'\n+043D39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+043D3D PAYLOAD\n+\n+046A02 DATA DESCRIPTOR       08074B50 (134695760)\n+046A06 CRC                   3FE3ACCB (1071885515)\n+046A0A Compressed Size       00002CC5 (11461)\n+046A0E Uncompressed Size     00002CC5 (11461)\n+\n+046A12 LOCAL HEADER #74      04034B50 (67324752)\n+046A16 Extract Zip Spec      14 (20) '2.0'\n+046A17 Extract OS            00 (0) 'MS-DOS'\n+046A18 General Purpose Flag  0000 (0)\n+046A1A Compression Method    0000 (0) 'Stored'\n+046A1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+046A20 CRC                   00000000 (0)\n+046A24 Compressed Size       00000000 (0)\n+046A28 Uncompressed Size     00000000 (0)\n+046A2C Filename Length       001F (31)\n+046A2E Extra Length          0009 (9)\n+046A30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x46A30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+046A4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+046A51   Length              0005 (5)\n+046A53   Flags               01 (1) 'Modification'\n+046A54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+046A58 LOCAL HEADER #75      04034B50 (67324752)\n+046A5C Extract Zip Spec      14 (20) '2.0'\n+046A5D Extract OS            00 (0) 'MS-DOS'\n+046A5E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+046A60 Compression Method    0000 (0) 'Stored'\n+046A62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+046A66 CRC                   00000000 (0)\n+046A6A Compressed Size       00000000 (0)\n+046A6E Uncompressed Size     00000000 (0)\n+046A72 Filename Length       003A (58)\n+046A74 Extra Length          0009 (9)\n+046A76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x46A76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+046AB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+046AB2   Length              0005 (5)\n+046AB4   Flags               01 (1) 'Modification'\n+046AB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+046AB9 PAYLOAD\n+\n+047C36 DATA DESCRIPTOR       08074B50 (134695760)\n+047C3A CRC                   A81790A7 (2820116647)\n+047C3E Compressed Size       0000117D (4477)\n+047C42 Uncompressed Size     0000117D (4477)\n+\n+047C46 LOCAL HEADER #76      04034B50 (67324752)\n+047C4A Extract Zip Spec      14 (20) '2.0'\n+047C4B Extract OS            00 (0) 'MS-DOS'\n+047C4C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+047C4E Compression Method    0000 (0) 'Stored'\n+047C50 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+047C54 CRC                   00000000 (0)\n+047C58 Compressed Size       00000000 (0)\n+047C5C Uncompressed Size     00000000 (0)\n+047C60 Filename Length       0031 (49)\n+047C62 Extra Length          0009 (9)\n+047C64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x47C64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+047C95 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+047C97   Length              0005 (5)\n+047C99   Flags               01 (1) 'Modification'\n+047C9A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+047C9E PAYLOAD\n+\n+049816 DATA DESCRIPTOR       08074B50 (134695760)\n+04981A CRC                   AB15E1E2 (2870338018)\n+04981E Compressed Size       00001B78 (7032)\n+049822 Uncompressed Size     00001B78 (7032)\n+\n+049826 LOCAL HEADER #77      04034B50 (67324752)\n+04982A Extract Zip Spec      14 (20) '2.0'\n+04982B Extract OS            00 (0) 'MS-DOS'\n+04982C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04982E Compression Method    0000 (0) 'Stored'\n+049830 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+049834 CRC                   00000000 (0)\n+049838 Compressed Size       00000000 (0)\n+04983C Uncompressed Size     00000000 (0)\n+049840 Filename Length       0036 (54)\n+049842 Extra Length          0009 (9)\n+049844 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x49844: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04987A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04987C   Length              0005 (5)\n+04987E   Flags               01 (1) 'Modification'\n+04987F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+049883 PAYLOAD\n+\n+04ABB3 DATA DESCRIPTOR       08074B50 (134695760)\n+04ABB7 CRC                   7B55AE57 (2069212759)\n+04ABBB Compressed Size       00001330 (4912)\n+04ABBF Uncompressed Size     00001330 (4912)\n+\n+04ABC3 LOCAL HEADER #78      04034B50 (67324752)\n+04ABC7 Extract Zip Spec      14 (20) '2.0'\n+04ABC8 Extract OS            00 (0) 'MS-DOS'\n+04ABC9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04ABCB Compression Method    0000 (0) 'Stored'\n+04ABCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04ABD1 CRC                   00000000 (0)\n+04ABD5 Compressed Size       00000000 (0)\n+04ABD9 Uncompressed Size     00000000 (0)\n+04ABDD Filename Length       002F (47)\n+04ABDF Extra Length          0009 (9)\n+04ABE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4ABE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04AC10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04AC12   Length              0005 (5)\n+04AC14   Flags               01 (1) 'Modification'\n+04AC15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04AC19 PAYLOAD\n+\n+04D417 DATA DESCRIPTOR       08074B50 (134695760)\n+04D41B CRC                   8F24621B (2401526299)\n+04D41F Compressed Size       000027FE (10238)\n+04D423 Uncompressed Size     000027FE (10238)\n+\n+04D427 LOCAL HEADER #79      04034B50 (67324752)\n+04D42B Extract Zip Spec      14 (20) '2.0'\n+04D42C Extract OS            00 (0) 'MS-DOS'\n+04D42D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04D42F Compression Method    0000 (0) 'Stored'\n+04D431 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04D435 CRC                   00000000 (0)\n+04D439 Compressed Size       00000000 (0)\n+04D43D Uncompressed Size     00000000 (0)\n+04D441 Filename Length       003C (60)\n+04D443 Extra Length          0009 (9)\n+04D445 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4D445: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04D481 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04D483   Length              0005 (5)\n+04D485   Flags               01 (1) 'Modification'\n+04D486   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04D48A PAYLOAD\n+\n+04D9A0 DATA DESCRIPTOR       08074B50 (134695760)\n+04D9A4 CRC                   2A9E8F07 (715034375)\n+04D9A8 Compressed Size       00000516 (1302)\n+04D9AC Uncompressed Size     00000516 (1302)\n+\n+04D9B0 LOCAL HEADER #80      04034B50 (67324752)\n+04D9B4 Extract Zip Spec      14 (20) '2.0'\n+04D9B5 Extract OS            00 (0) 'MS-DOS'\n+04D9B6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04D9B8 Compression Method    0000 (0) 'Stored'\n+04D9BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04D9BE CRC                   00000000 (0)\n+04D9C2 Compressed Size       00000000 (0)\n+04D9C6 Uncompressed Size     00000000 (0)\n+04D9CA Filename Length       0039 (57)\n+04D9CC Extra Length          0009 (9)\n+04D9CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4D9CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04DA07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04DA09   Length              0005 (5)\n+04DA0B   Flags               01 (1) 'Modification'\n+04DA0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04DA10 PAYLOAD\n+\n+04E1C0 DATA DESCRIPTOR       08074B50 (134695760)\n+04E1C4 CRC                   C6D0F0BC (3335581884)\n+04E1C8 Compressed Size       000007B0 (1968)\n+04E1CC Uncompressed Size     000007B0 (1968)\n+\n+04E1D0 LOCAL HEADER #81      04034B50 (67324752)\n+04E1D4 Extract Zip Spec      14 (20) '2.0'\n+04E1D5 Extract OS            00 (0) 'MS-DOS'\n+04E1D6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04E1D8 Compression Method    0000 (0) 'Stored'\n+04E1DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04E1DE CRC                   00000000 (0)\n+04E1E2 Compressed Size       00000000 (0)\n+04E1E6 Uncompressed Size     00000000 (0)\n+04E1EA Filename Length       003D (61)\n+04E1EC Extra Length          0009 (9)\n+04E1EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4E1EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04E22B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04E22D   Length              0005 (5)\n+04E22F   Flags               01 (1) 'Modification'\n+04E230   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04E234 PAYLOAD\n+\n+04E711 DATA DESCRIPTOR       08074B50 (134695760)\n+04E715 CRC                   A545EC4C (2772823116)\n+04E719 Compressed Size       000004DD (1245)\n+04E71D Uncompressed Size     000004DD (1245)\n+\n+04E721 LOCAL HEADER #82      04034B50 (67324752)\n+04E725 Extract Zip Spec      14 (20) '2.0'\n+04E726 Extract OS            00 (0) 'MS-DOS'\n+04E727 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04E729 Compression Method    0000 (0) 'Stored'\n+04E72B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04E72F CRC                   00000000 (0)\n+04E733 Compressed Size       00000000 (0)\n+04E737 Uncompressed Size     00000000 (0)\n+04E73B Filename Length       003B (59)\n+04E73D Extra Length          0009 (9)\n+04E73F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4E73F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04E77A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04E77C   Length              0005 (5)\n+04E77E   Flags               01 (1) 'Modification'\n+04E77F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04E783 PAYLOAD\n+\n+04F20F DATA DESCRIPTOR       08074B50 (134695760)\n+04F213 CRC                   8BA4EDED (2342841837)\n+04F217 Compressed Size       00000A8C (2700)\n+04F21B Uncompressed Size     00000A8C (2700)\n+\n+04F21F LOCAL HEADER #83      04034B50 (67324752)\n+04F223 Extract Zip Spec      14 (20) '2.0'\n+04F224 Extract OS            00 (0) 'MS-DOS'\n+04F225 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04F227 Compression Method    0000 (0) 'Stored'\n+04F229 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04F22D CRC                   00000000 (0)\n+04F231 Compressed Size       00000000 (0)\n+04F235 Uncompressed Size     00000000 (0)\n+04F239 Filename Length       0037 (55)\n+04F23B Extra Length          0009 (9)\n+04F23D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4F23D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04F274 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04F276   Length              0005 (5)\n+04F278   Flags               01 (1) 'Modification'\n+04F279   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04F27D PAYLOAD\n+\n+04F74B DATA DESCRIPTOR       08074B50 (134695760)\n+04F74F CRC                   C8BED78D (3367950221)\n+04F753 Compressed Size       000004CE (1230)\n+04F757 Uncompressed Size     000004CE (1230)\n+\n+04F75B LOCAL HEADER #84      04034B50 (67324752)\n+04F75F Extract Zip Spec      14 (20) '2.0'\n+04F760 Extract OS            00 (0) 'MS-DOS'\n+04F761 General Purpose Flag  0000 (0)\n+04F763 Compression Method    0000 (0) 'Stored'\n+04F765 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04F769 CRC                   00000000 (0)\n+04F76D Compressed Size       00000000 (0)\n+04F771 Uncompressed Size     00000000 (0)\n+04F775 Filename Length       002C (44)\n+04F777 Extra Length          0009 (9)\n+04F779 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4F779: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04F7A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04F7A7   Length              0005 (5)\n+04F7A9   Flags               01 (1) 'Modification'\n+04F7AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04F7AE LOCAL HEADER #85      04034B50 (67324752)\n+04F7B2 Extract Zip Spec      14 (20) '2.0'\n+04F7B3 Extract OS            00 (0) 'MS-DOS'\n+04F7B4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04F7B6 Compression Method    0000 (0) 'Stored'\n+04F7B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04F7BC CRC                   00000000 (0)\n+04F7C0 Compressed Size       00000000 (0)\n+04F7C4 Uncompressed Size     00000000 (0)\n+04F7C8 Filename Length       004D (77)\n+04F7CA Extra Length          0009 (9)\n+04F7CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4F7CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04F819 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04F81B   Length              0005 (5)\n+04F81D   Flags               01 (1) 'Modification'\n+04F81E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04F822 PAYLOAD\n+\n+051FA2 DATA DESCRIPTOR       08074B50 (134695760)\n+051FA6 CRC                   8153B7AF (2169747375)\n+051FAA Compressed Size       00002780 (10112)\n+051FAE Uncompressed Size     00002780 (10112)\n+\n+051FB2 LOCAL HEADER #86      04034B50 (67324752)\n+051FB6 Extract Zip Spec      14 (20) '2.0'\n+051FB7 Extract OS            00 (0) 'MS-DOS'\n+051FB8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+051FBA Compression Method    0000 (0) 'Stored'\n+051FBC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+051FC0 CRC                   00000000 (0)\n+051FC4 Compressed Size       00000000 (0)\n+051FC8 Uncompressed Size     00000000 (0)\n+051FCC Filename Length       0054 (84)\n+051FCE Extra Length          0009 (9)\n+051FD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51FD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+052024 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052026   Length              0005 (5)\n+052028   Flags               01 (1) 'Modification'\n+052029   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05202D PAYLOAD\n+\n+052723 DATA DESCRIPTOR       08074B50 (134695760)\n+052727 CRC                   B055C4D7 (2958410967)\n+05272B Compressed Size       000006F6 (1782)\n+05272F Uncompressed Size     000006F6 (1782)\n+\n+052733 LOCAL HEADER #87      04034B50 (67324752)\n+052737 Extract Zip Spec      14 (20) '2.0'\n+052738 Extract OS            00 (0) 'MS-DOS'\n+052739 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05273B Compression Method    0000 (0) 'Stored'\n+05273D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052741 CRC                   00000000 (0)\n+052745 Compressed Size       00000000 (0)\n+052749 Uncompressed Size     00000000 (0)\n+05274D Filename Length       0041 (65)\n+05274F Extra Length          0009 (9)\n+052751 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52751: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+052792 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052794   Length              0005 (5)\n+052796   Flags               01 (1) 'Modification'\n+052797   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05279B PAYLOAD\n+\n+052C08 DATA DESCRIPTOR       08074B50 (134695760)\n+052C0C CRC                   46172F4A (1175924554)\n+052C10 Compressed Size       0000046D (1133)\n+052C14 Uncompressed Size     0000046D (1133)\n+\n+052C18 LOCAL HEADER #88      04034B50 (67324752)\n+052C1C Extract Zip Spec      14 (20) '2.0'\n+052C1D Extract OS            00 (0) 'MS-DOS'\n+052C1E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+052C20 Compression Method    0000 (0) 'Stored'\n+052C22 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052C26 CRC                   00000000 (0)\n+052C2A Compressed Size       00000000 (0)\n+052C2E Uncompressed Size     00000000 (0)\n+052C32 Filename Length       0043 (67)\n+052C34 Extra Length          0009 (9)\n+052C36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52C36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+052C79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052C7B   Length              0005 (5)\n+052C7D   Flags               01 (1) 'Modification'\n+052C7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+052C82 PAYLOAD\n+\n+0537EB DATA DESCRIPTOR       08074B50 (134695760)\n+0537EF CRC                   D56D83FB (3580724219)\n+0537F3 Compressed Size       00000B69 (2921)\n+0537F7 Uncompressed Size     00000B69 (2921)\n+\n+0537FB LOCAL HEADER #89      04034B50 (67324752)\n+0537FF Extract Zip Spec      14 (20) '2.0'\n+053800 Extract OS            00 (0) 'MS-DOS'\n+053801 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+053803 Compression Method    0000 (0) 'Stored'\n+053805 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+053809 CRC                   00000000 (0)\n+05380D Compressed Size       00000000 (0)\n+053811 Uncompressed Size     00000000 (0)\n+053815 Filename Length       0046 (70)\n+053817 Extra Length          0009 (9)\n+053819 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53819: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05385F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+053861   Length              0005 (5)\n+053863   Flags               01 (1) 'Modification'\n+053864   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+053868 PAYLOAD\n+\n+053D9A DATA DESCRIPTOR       08074B50 (134695760)\n+053D9E CRC                   69A63658 (1772500568)\n+053DA2 Compressed Size       00000532 (1330)\n+053DA6 Uncompressed Size     00000532 (1330)\n+\n+053DAA LOCAL HEADER #90      04034B50 (67324752)\n+053DAE Extract Zip Spec      14 (20) '2.0'\n+053DAF Extract OS            00 (0) 'MS-DOS'\n+053DB0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+053DB2 Compression Method    0000 (0) 'Stored'\n+053DB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+053DB8 CRC                   00000000 (0)\n+053DBC Compressed Size       00000000 (0)\n+053DC0 Uncompressed Size     00000000 (0)\n+053DC4 Filename Length       003A (58)\n+053DC6 Extra Length          0009 (9)\n+053DC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53DC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+053E02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+053E04   Length              0005 (5)\n+053E06   Flags               01 (1) 'Modification'\n+053E07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+053E0B PAYLOAD\n+\n+05426B DATA DESCRIPTOR       08074B50 (134695760)\n+05426F CRC                   01D091A7 (30445991)\n+054273 Compressed Size       00000460 (1120)\n+054277 Uncompressed Size     00000460 (1120)\n+\n+05427B LOCAL HEADER #91      04034B50 (67324752)\n+05427F Extract Zip Spec      14 (20) '2.0'\n+054280 Extract OS            00 (0) 'MS-DOS'\n+054281 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+054283 Compression Method    0000 (0) 'Stored'\n+054285 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+054289 CRC                   00000000 (0)\n+05428D Compressed Size       00000000 (0)\n+054291 Uncompressed Size     00000000 (0)\n+054295 Filename Length       0045 (69)\n+054297 Extra Length          0009 (9)\n+054299 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54299: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0542DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0542E0   Length              0005 (5)\n+0542E2   Flags               01 (1) 'Modification'\n+0542E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0542E7 PAYLOAD\n+\n+0567CD DATA DESCRIPTOR       08074B50 (134695760)\n+0567D1 CRC                   FCBE727C (4240339580)\n+0567D5 Compressed Size       000024E6 (9446)\n+0567D9 Uncompressed Size     000024E6 (9446)\n+\n+0567DD LOCAL HEADER #92      04034B50 (67324752)\n+0567E1 Extract Zip Spec      14 (20) '2.0'\n+0567E2 Extract OS            00 (0) 'MS-DOS'\n+0567E3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0567E5 Compression Method    0000 (0) 'Stored'\n+0567E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0567EB CRC                   00000000 (0)\n+0567EF Compressed Size       00000000 (0)\n+0567F3 Uncompressed Size     00000000 (0)\n+0567F7 Filename Length       004C (76)\n+0567F9 Extra Length          0009 (9)\n+0567FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x567FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+056847 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+056849   Length              0005 (5)\n+05684B   Flags               01 (1) 'Modification'\n+05684C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+056850 PAYLOAD\n+\n+057041 DATA DESCRIPTOR       08074B50 (134695760)\n+057045 CRC                   E7C23E33 (3888266803)\n+057049 Compressed Size       000007F1 (2033)\n+05704D Uncompressed Size     000007F1 (2033)\n+\n+057051 LOCAL HEADER #93      04034B50 (67324752)\n+057055 Extract Zip Spec      14 (20) '2.0'\n+057056 Extract OS            00 (0) 'MS-DOS'\n+057057 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+057059 Compression Method    0000 (0) 'Stored'\n+05705B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05705F CRC                   00000000 (0)\n+057063 Compressed Size       00000000 (0)\n+057067 Uncompressed Size     00000000 (0)\n+05706B Filename Length       004D (77)\n+05706D Extra Length          0009 (9)\n+05706F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5706F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0570BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0570BE   Length              0005 (5)\n+0570C0   Flags               01 (1) 'Modification'\n+0570C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0570C5 PAYLOAD\n+\n+058CFA DATA DESCRIPTOR       08074B50 (134695760)\n+058CFE CRC                   A4ED9691 (2767034001)\n+058D02 Compressed Size       00001C35 (7221)\n+058D06 Uncompressed Size     00001C35 (7221)\n+\n+058D0A LOCAL HEADER #94      04034B50 (67324752)\n+058D0E Extract Zip Spec      14 (20) '2.0'\n+058D0F Extract OS            00 (0) 'MS-DOS'\n+058D10 General Purpose Flag  0000 (0)\n+058D12 Compression Method    0000 (0) 'Stored'\n+058D14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+058D18 CRC                   00000000 (0)\n+058D1C Compressed Size       00000000 (0)\n+058D20 Uncompressed Size     00000000 (0)\n+058D24 Filename Length       0031 (49)\n+058D26 Extra Length          0009 (9)\n+058D28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x58D28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+058D59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+058D5B   Length              0005 (5)\n+058D5D   Flags               01 (1) 'Modification'\n+058D5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+058D62 LOCAL HEADER #95      04034B50 (67324752)\n+058D66 Extract Zip Spec      14 (20) '2.0'\n+058D67 Extract OS            00 (0) 'MS-DOS'\n+058D68 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+058D6A Compression Method    0000 (0) 'Stored'\n+058D6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+058D70 CRC                   00000000 (0)\n+058D74 Compressed Size       00000000 (0)\n+058D78 Uncompressed Size     00000000 (0)\n+058D7C Filename Length       0054 (84)\n+058D7E Extra Length          0009 (9)\n+058D80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x58D80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+058DD4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+058DD6   Length              0005 (5)\n+058DD8   Flags               01 (1) 'Modification'\n+058DD9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+058DDD PAYLOAD\n+\n+05E865 DATA DESCRIPTOR       08074B50 (134695760)\n+05E869 CRC                   BAE14165 (3135324517)\n+05E86D Compressed Size       00005A88 (23176)\n+05E871 Uncompressed Size     00005A88 (23176)\n+\n+05E875 LOCAL HEADER #96      04034B50 (67324752)\n+05E879 Extract Zip Spec      14 (20) '2.0'\n+05E87A Extract OS            00 (0) 'MS-DOS'\n+05E87B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05E87D Compression Method    0000 (0) 'Stored'\n+05E87F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05E883 CRC                   00000000 (0)\n+05E887 Compressed Size       00000000 (0)\n+05E88B Uncompressed Size     00000000 (0)\n+05E88F Filename Length       005B (91)\n+05E891 Extra Length          0009 (9)\n+05E893 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5E893: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05E8EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05E8F0   Length              0005 (5)\n+05E8F2   Flags               01 (1) 'Modification'\n+05E8F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05E8F7 PAYLOAD\n+\n+05EEE9 DATA DESCRIPTOR       08074B50 (134695760)\n+05EEED CRC                   BA62C70E (3127035662)\n+05EEF1 Compressed Size       000005F2 (1522)\n+05EEF5 Uncompressed Size     000005F2 (1522)\n+\n+05EEF9 LOCAL HEADER #97      04034B50 (67324752)\n+05EEFD Extract Zip Spec      14 (20) '2.0'\n+05EEFE Extract OS            00 (0) 'MS-DOS'\n+05EEFF General Purpose Flag  0000 (0)\n+05EF01 Compression Method    0000 (0) 'Stored'\n+05EF03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05EF07 CRC                   00000000 (0)\n+05EF0B Compressed Size       00000000 (0)\n+05EF0F Uncompressed Size     00000000 (0)\n+05EF13 Filename Length       0030 (48)\n+05EF15 Extra Length          0009 (9)\n+05EF17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05EF47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05EF49   Length              0005 (5)\n+05EF4B   Flags               01 (1) 'Modification'\n+05EF4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05EF50 LOCAL HEADER #98      04034B50 (67324752)\n+05EF54 Extract Zip Spec      14 (20) '2.0'\n+05EF55 Extract OS            00 (0) 'MS-DOS'\n+05EF56 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05EF58 Compression Method    0000 (0) 'Stored'\n+05EF5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05EF5E CRC                   00000000 (0)\n+05EF62 Compressed Size       00000000 (0)\n+05EF66 Uncompressed Size     00000000 (0)\n+05EF6A Filename Length       004C (76)\n+05EF6C Extra Length          0009 (9)\n+05EF6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5EF6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05EFBA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05EFBC   Length              0005 (5)\n+05EFBE   Flags               01 (1) 'Modification'\n+05EFBF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05EFC3 PAYLOAD\n+\n+05F8B2 DATA DESCRIPTOR       08074B50 (134695760)\n+05F8B6 CRC                   B653D686 (3058947718)\n+05F8BA Compressed Size       000008EF (2287)\n+05F8BE Uncompressed Size     000008EF (2287)\n+\n+05F8C2 LOCAL HEADER #99      04034B50 (67324752)\n+05F8C6 Extract Zip Spec      14 (20) '2.0'\n+05F8C7 Extract OS            00 (0) 'MS-DOS'\n+05F8C8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05F8CA Compression Method    0000 (0) 'Stored'\n+05F8CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05F8D0 CRC                   00000000 (0)\n+05F8D4 Compressed Size       00000000 (0)\n+05F8D8 Uncompressed Size     00000000 (0)\n+05F8DC Filename Length       0053 (83)\n+05F8DE Extra Length          0009 (9)\n+05F8E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F8E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05F933 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05F935   Length              0005 (5)\n+05F937   Flags               01 (1) 'Modification'\n+05F938   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05F93C PAYLOAD\n+\n+05FE81 DATA DESCRIPTOR       08074B50 (134695760)\n+05FE85 CRC                   0495D293 (76927635)\n+05FE89 Compressed Size       00000545 (1349)\n+05FE8D Uncompressed Size     00000545 (1349)\n+\n+05FE91 LOCAL HEADER #100     04034B50 (67324752)\n+05FE95 Extract Zip Spec      14 (20) '2.0'\n+05FE96 Extract OS            00 (0) 'MS-DOS'\n+05FE97 General Purpose Flag  0000 (0)\n+05FE99 Compression Method    0000 (0) 'Stored'\n+05FE9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05FE9F CRC                   00000000 (0)\n+05FEA3 Compressed Size       00000000 (0)\n+05FEA7 Uncompressed Size     00000000 (0)\n+05FEAB Filename Length       0034 (52)\n+05FEAD Extra Length          0009 (9)\n+05FEAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FEAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05FEE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05FEE5   Length              0005 (5)\n+05FEE7   Flags               01 (1) 'Modification'\n+05FEE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05FEEC LOCAL HEADER #101     04034B50 (67324752)\n+05FEF0 Extract Zip Spec      14 (20) '2.0'\n+05FEF1 Extract OS            00 (0) 'MS-DOS'\n+05FEF2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05FEF4 Compression Method    0000 (0) 'Stored'\n+05FEF6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05FEFA CRC                   00000000 (0)\n+05FEFE Compressed Size       00000000 (0)\n+05FF02 Uncompressed Size     00000000 (0)\n+05FF06 Filename Length       0056 (86)\n+05FF08 Extra Length          0009 (9)\n+05FF0A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FF0A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05FF60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05FF62   Length              0005 (5)\n+05FF64   Flags               01 (1) 'Modification'\n+05FF65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05FF69 PAYLOAD\n+\n+060F18 DATA DESCRIPTOR       08074B50 (134695760)\n+060F1C CRC                   2171436F (561070959)\n+060F20 Compressed Size       00000FAF (4015)\n+060F24 Uncompressed Size     00000FAF (4015)\n+\n+060F28 LOCAL HEADER #102     04034B50 (67324752)\n+060F2C Extract Zip Spec      14 (20) '2.0'\n+060F2D Extract OS            00 (0) 'MS-DOS'\n+060F2E General Purpose Flag  0000 (0)\n+060F30 Compression Method    0000 (0) 'Stored'\n+060F32 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+060F36 CRC                   00000000 (0)\n+060F3A Compressed Size       00000000 (0)\n+060F3E Uncompressed Size     00000000 (0)\n+060F42 Filename Length       0022 (34)\n+060F44 Extra Length          0009 (9)\n+060F46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x60F46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+060F68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+060F6A   Length              0005 (5)\n+060F6C   Flags               01 (1) 'Modification'\n+060F6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+060F71 LOCAL HEADER #103     04034B50 (67324752)\n+060F75 Extract Zip Spec      14 (20) '2.0'\n+060F76 Extract OS            00 (0) 'MS-DOS'\n+060F77 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+060F79 Compression Method    0000 (0) 'Stored'\n+060F7B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+060F7F CRC                   00000000 (0)\n+060F83 Compressed Size       00000000 (0)\n+060F87 Uncompressed Size     00000000 (0)\n+060F8B Filename Length       0036 (54)\n+060F8D Extra Length          0009 (9)\n+060F8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x60F8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+060FC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+060FC7   Length              0005 (5)\n+060FC9   Flags               01 (1) 'Modification'\n+060FCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+060FCE PAYLOAD\n+\n+063967 DATA DESCRIPTOR       08074B50 (134695760)\n+06396B CRC                   2E0F2713 (772744979)\n+06396F Compressed Size       00002999 (10649)\n+063973 Uncompressed Size     00002999 (10649)\n+\n+063977 LOCAL HEADER #104     04034B50 (67324752)\n+06397B Extract Zip Spec      14 (20) '2.0'\n+06397C Extract OS            00 (0) 'MS-DOS'\n+06397D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06397F Compression Method    0000 (0) 'Stored'\n+063981 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+063985 CRC                   00000000 (0)\n+063989 Compressed Size       00000000 (0)\n+06398D Uncompressed Size     00000000 (0)\n+063991 Filename Length       0036 (54)\n+063993 Extra Length          0009 (9)\n+063995 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x63995: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0639CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0639CD   Length              0005 (5)\n+0639CF   Flags               01 (1) 'Modification'\n+0639D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0639D4 PAYLOAD\n+\n+063DAB DATA DESCRIPTOR       08074B50 (134695760)\n+063DAF CRC                   B7E4B654 (3085219412)\n+063DB3 Compressed Size       000003D7 (983)\n+063DB7 Uncompressed Size     000003D7 (983)\n+\n+063DBB LOCAL HEADER #105     04034B50 (67324752)\n+063DBF Extract Zip Spec      14 (20) '2.0'\n+063DC0 Extract OS            00 (0) 'MS-DOS'\n+063DC1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+063DC3 Compression Method    0000 (0) 'Stored'\n+063DC5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+063DC9 CRC                   00000000 (0)\n+063DCD Compressed Size       00000000 (0)\n+063DD1 Uncompressed Size     00000000 (0)\n+063DD5 Filename Length       0033 (51)\n+063DD7 Extra Length          0009 (9)\n+063DD9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x63DD9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+063E0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+063E0E   Length              0005 (5)\n+063E10   Flags               01 (1) 'Modification'\n+063E11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+063E15 PAYLOAD\n+\n+064264 DATA DESCRIPTOR       08074B50 (134695760)\n+064268 CRC                   67723A29 (1735539241)\n+06426C Compressed Size       0000044F (1103)\n+064270 Uncompressed Size     0000044F (1103)\n+\n+064274 LOCAL HEADER #106     04034B50 (67324752)\n+064278 Extract Zip Spec      14 (20) '2.0'\n+064279 Extract OS            00 (0) 'MS-DOS'\n+06427A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06427C Compression Method    0000 (0) 'Stored'\n+06427E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+064282 CRC                   00000000 (0)\n+064286 Compressed Size       00000000 (0)\n+06428A Uncompressed Size     00000000 (0)\n+06428E Filename Length       0038 (56)\n+064290 Extra Length          0009 (9)\n+064292 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x64292: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0642CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0642CC   Length              0005 (5)\n+0642CE   Flags               01 (1) 'Modification'\n+0642CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0642D3 PAYLOAD\n+\n+0650DA DATA DESCRIPTOR       08074B50 (134695760)\n+0650DE CRC                   EBE34920 (3957541152)\n+0650E2 Compressed Size       00000E07 (3591)\n+0650E6 Uncompressed Size     00000E07 (3591)\n+\n+0650EA LOCAL HEADER #107     04034B50 (67324752)\n+0650EE Extract Zip Spec      14 (20) '2.0'\n+0650EF Extract OS            00 (0) 'MS-DOS'\n+0650F0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0650F2 Compression Method    0000 (0) 'Stored'\n+0650F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0650F8 CRC                   00000000 (0)\n+0650FC Compressed Size       00000000 (0)\n+065100 Uncompressed Size     00000000 (0)\n+065104 Filename Length       0038 (56)\n+065106 Extra Length          0009 (9)\n+065108 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65108: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+065140 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+065142   Length              0005 (5)\n+065144   Flags               01 (1) 'Modification'\n+065145   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+065149 PAYLOAD\n+\n+065519 DATA DESCRIPTOR       08074B50 (134695760)\n+06551D CRC                   F01E112A (4028502314)\n+065521 Compressed Size       000003D0 (976)\n+065525 Uncompressed Size     000003D0 (976)\n+\n+065529 LOCAL HEADER #108     04034B50 (67324752)\n+06552D Extract Zip Spec      14 (20) '2.0'\n+06552E Extract OS            00 (0) 'MS-DOS'\n+06552F General Purpose Flag  0000 (0)\n+065531 Compression Method    0000 (0) 'Stored'\n+065533 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+065537 CRC                   00000000 (0)\n+06553B Compressed Size       00000000 (0)\n+06553F Uncompressed Size     00000000 (0)\n+065543 Filename Length       0020 (32)\n+065545 Extra Length          0009 (9)\n+065547 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x65547: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+065567 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+065569   Length              0005 (5)\n+06556B   Flags               01 (1) 'Modification'\n+06556C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+065570 LOCAL HEADER #109     04034B50 (67324752)\n+065574 Extract Zip Spec      14 (20) '2.0'\n+065575 Extract OS            00 (0) 'MS-DOS'\n+065576 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+065578 Compression Method    0000 (0) 'Stored'\n+06557A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06557E CRC                   00000000 (0)\n+065582 Compressed Size       00000000 (0)\n+065586 Uncompressed Size     00000000 (0)\n+06558A Filename Length       0031 (49)\n+06558C Extra Length          0009 (9)\n+06558E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6558E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0655BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0655C1   Length              0005 (5)\n+0655C3   Flags               01 (1) 'Modification'\n+0655C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0655C8 PAYLOAD\n+\n+065995 DATA DESCRIPTOR       08074B50 (134695760)\n+065999 CRC                   16DF264E (383723086)\n+06599D Compressed Size       000003CD (973)\n+0659A1 Uncompressed Size     000003CD (973)\n+\n+0659A5 LOCAL HEADER #110     04034B50 (67324752)\n+0659A9 Extract Zip Spec      14 (20) '2.0'\n+0659AA Extract OS            00 (0) 'MS-DOS'\n+0659AB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0659AD Compression Method    0000 (0) 'Stored'\n+0659AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0659B3 CRC                   00000000 (0)\n+0659B7 Compressed Size       00000000 (0)\n+0659BB Uncompressed Size     00000000 (0)\n+0659BF Filename Length       002E (46)\n+0659C1 Extra Length          0009 (9)\n+0659C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x659C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0659F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0659F3   Length              0005 (5)\n+0659F5   Flags               01 (1) 'Modification'\n+0659F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0659FA PAYLOAD\n+\n+065FE7 DATA DESCRIPTOR       08074B50 (134695760)\n+065FEB CRC                   66454DE7 (1715817959)\n+065FEF Compressed Size       000005ED (1517)\n+065FF3 Uncompressed Size     000005ED (1517)\n+\n+065FF7 LOCAL HEADER #111     04034B50 (67324752)\n+065FFB Extract Zip Spec      14 (20) '2.0'\n+065FFC Extract OS            00 (0) 'MS-DOS'\n+065FFD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+065FFF Compression Method    0000 (0) 'Stored'\n+066001 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+066005 CRC                   00000000 (0)\n+066009 Compressed Size       00000000 (0)\n+06600D Uncompressed Size     00000000 (0)\n+066011 Filename Length       0035 (53)\n+066013 Extra Length          0009 (9)\n+066015 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x66015: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06604A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06604C   Length              0005 (5)\n+06604E   Flags               01 (1) 'Modification'\n+06604F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+066053 PAYLOAD\n+\n+0664F0 DATA DESCRIPTOR       08074B50 (134695760)\n+0664F4 CRC                   F8009358 (4160787288)\n+0664F8 Compressed Size       0000049D (1181)\n+0664FC Uncompressed Size     0000049D (1181)\n+\n+066500 LOCAL HEADER #112     04034B50 (67324752)\n+066504 Extract Zip Spec      14 (20) '2.0'\n+066505 Extract OS            00 (0) 'MS-DOS'\n+066506 General Purpose Flag  0000 (0)\n+066508 Compression Method    0000 (0) 'Stored'\n+06650A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06650E CRC                   00000000 (0)\n+066512 Compressed Size       00000000 (0)\n+066516 Uncompressed Size     00000000 (0)\n+06651A Filename Length       0020 (32)\n+06651C Extra Length          0009 (9)\n+06651E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6651E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06653E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+066540   Length              0005 (5)\n+066542   Flags               01 (1) 'Modification'\n+066543   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+066547 LOCAL HEADER #113     04034B50 (67324752)\n+06654B Extract Zip Spec      14 (20) '2.0'\n+06654C Extract OS            00 (0) 'MS-DOS'\n+06654D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06654F Compression Method    0000 (0) 'Stored'\n+066551 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+066555 CRC                   00000000 (0)\n+066559 Compressed Size       00000000 (0)\n+06655D Uncompressed Size     00000000 (0)\n+066561 Filename Length       002E (46)\n+066563 Extra Length          0009 (9)\n+066565 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x66565: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+066593 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+066595   Length              0005 (5)\n+066597   Flags               01 (1) 'Modification'\n+066598   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06659C PAYLOAD\n+\n+067468 DATA DESCRIPTOR       08074B50 (134695760)\n+06746C CRC                   C8C419A3 (3368294819)\n+067470 Compressed Size       00000ECC (3788)\n+067474 Uncompressed Size     00000ECC (3788)\n+\n+067478 LOCAL HEADER #114     04034B50 (67324752)\n+06747C Extract Zip Spec      14 (20) '2.0'\n+06747D Extract OS            00 (0) 'MS-DOS'\n+06747E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+067480 Compression Method    0000 (0) 'Stored'\n+067482 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+067486 CRC                   00000000 (0)\n+06748A Compressed Size       00000000 (0)\n+06748E Uncompressed Size     00000000 (0)\n+067492 Filename Length       0034 (52)\n+067494 Extra Length          0009 (9)\n+067496 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x67496: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0674CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0674CC   Length              0005 (5)\n+0674CE   Flags               01 (1) 'Modification'\n+0674CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0674D3 PAYLOAD\n+\n+0678FF DATA DESCRIPTOR       08074B50 (134695760)\n+067903 CRC                   C31C00DA (3273392346)\n+067907 Compressed Size       0000042C (1068)\n+06790B Uncompressed Size     0000042C (1068)\n+\n+06790F LOCAL HEADER #115     04034B50 (67324752)\n+067913 Extract Zip Spec      14 (20) '2.0'\n+067914 Extract OS            00 (0) 'MS-DOS'\n+067915 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+067917 Compression Method    0000 (0) 'Stored'\n+067919 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06791D CRC                   00000000 (0)\n+067921 Compressed Size       00000000 (0)\n+067925 Uncompressed Size     00000000 (0)\n+067929 Filename Length       003D (61)\n+06792B Extra Length          0009 (9)\n+06792D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6792D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06796A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06796C   Length              0005 (5)\n+06796E   Flags               01 (1) 'Modification'\n+06796F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+067973 PAYLOAD\n+\n+067ECB DATA DESCRIPTOR       08074B50 (134695760)\n+067ECF CRC                   C4FF04D7 (3305047255)\n+067ED3 Compressed Size       00000558 (1368)\n+067ED7 Uncompressed Size     00000558 (1368)\n+\n+067EDB LOCAL HEADER #116     04034B50 (67324752)\n+067EDF Extract Zip Spec      14 (20) '2.0'\n+067EE0 Extract OS            00 (0) 'MS-DOS'\n+067EE1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+067EE3 Compression Method    0000 (0) 'Stored'\n+067EE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+067EE9 CRC                   00000000 (0)\n+067EED Compressed Size       00000000 (0)\n+067EF1 Uncompressed Size     00000000 (0)\n+067EF5 Filename Length       003F (63)\n+067EF7 Extra Length          0009 (9)\n+067EF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x67EF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+067F38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+067F3A   Length              0005 (5)\n+067F3C   Flags               01 (1) 'Modification'\n+067F3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+067F41 PAYLOAD\n+\n+06847C DATA DESCRIPTOR       08074B50 (134695760)\n+068480 CRC                   B8E6EA58 (3102141016)\n+068484 Compressed Size       0000053B (1339)\n+068488 Uncompressed Size     0000053B (1339)\n+\n+06848C LOCAL HEADER #117     04034B50 (67324752)\n+068490 Extract Zip Spec      14 (20) '2.0'\n+068491 Extract OS            00 (0) 'MS-DOS'\n+068492 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+068494 Compression Method    0000 (0) 'Stored'\n+068496 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06849A CRC                   00000000 (0)\n+06849E Compressed Size       00000000 (0)\n+0684A2 Uncompressed Size     00000000 (0)\n+0684A6 Filename Length       003F (63)\n+0684A8 Extra Length          0009 (9)\n+0684AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x684AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0684E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0684EB   Length              0005 (5)\n+0684ED   Flags               01 (1) 'Modification'\n+0684EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0684F2 PAYLOAD\n+\n+068AF8 DATA DESCRIPTOR       08074B50 (134695760)\n+068AFC CRC                   27EF74B8 (670004408)\n+068B00 Compressed Size       00000606 (1542)\n+068B04 Uncompressed Size     00000606 (1542)\n+\n+068B08 LOCAL HEADER #118     04034B50 (67324752)\n+068B0C Extract Zip Spec      14 (20) '2.0'\n+068B0D Extract OS            00 (0) 'MS-DOS'\n+068B0E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+068B10 Compression Method    0000 (0) 'Stored'\n+068B12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+068B16 CRC                   00000000 (0)\n+068B1A Compressed Size       00000000 (0)\n+068B1E Uncompressed Size     00000000 (0)\n+068B22 Filename Length       003C (60)\n+068B24 Extra Length          0009 (9)\n+068B26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x68B26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+068B62 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+068B64   Length              0005 (5)\n+068B66   Flags               01 (1) 'Modification'\n+068B67   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+068B6B PAYLOAD\n+\n+0690C0 DATA DESCRIPTOR       08074B50 (134695760)\n+0690C4 CRC                   3F610BCB (1063324619)\n+0690C8 Compressed Size       00000555 (1365)\n+0690CC Uncompressed Size     00000555 (1365)\n+\n+0690D0 LOCAL HEADER #119     04034B50 (67324752)\n+0690D4 Extract Zip Spec      14 (20) '2.0'\n+0690D5 Extract OS            00 (0) 'MS-DOS'\n+0690D6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0690D8 Compression Method    0000 (0) 'Stored'\n+0690DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0690DE CRC                   00000000 (0)\n+0690E2 Compressed Size       00000000 (0)\n+0690E6 Uncompressed Size     00000000 (0)\n+0690EA Filename Length       003B (59)\n+0690EC Extra Length          0009 (9)\n+0690EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x690EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+069129 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06912B   Length              0005 (5)\n+06912D   Flags               01 (1) 'Modification'\n+06912E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+069132 PAYLOAD\n+\n+069680 DATA DESCRIPTOR       08074B50 (134695760)\n+069684 CRC                   15F2A538 (368223544)\n+069688 Compressed Size       0000054E (1358)\n+06968C Uncompressed Size     0000054E (1358)\n+\n+069690 LOCAL HEADER #120     04034B50 (67324752)\n+069694 Extract Zip Spec      14 (20) '2.0'\n+069695 Extract OS            00 (0) 'MS-DOS'\n+069696 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+069698 Compression Method    0000 (0) 'Stored'\n+06969A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06969E CRC                   00000000 (0)\n+0696A2 Compressed Size       00000000 (0)\n+0696A6 Uncompressed Size     00000000 (0)\n+0696AA Filename Length       003D (61)\n+0696AC Extra Length          0009 (9)\n+0696AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x696AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0696EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0696ED   Length              0005 (5)\n+0696EF   Flags               01 (1) 'Modification'\n+0696F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0696F4 PAYLOAD\n+\n+069C48 DATA DESCRIPTOR       08074B50 (134695760)\n+069C4C CRC                   DB3985F1 (3677980145)\n+069C50 Compressed Size       00000554 (1364)\n+069C54 Uncompressed Size     00000554 (1364)\n+\n+069C58 LOCAL HEADER #121     04034B50 (67324752)\n+069C5C Extract Zip Spec      14 (20) '2.0'\n+069C5D Extract OS            00 (0) 'MS-DOS'\n+069C5E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+069C60 Compression Method    0000 (0) 'Stored'\n+069C62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+069C66 CRC                   00000000 (0)\n+069C6A Compressed Size       00000000 (0)\n+069C6E Uncompressed Size     00000000 (0)\n+069C72 Filename Length       003A (58)\n+069C74 Extra Length          0009 (9)\n+069C76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x69C76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+069CB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+069CB2   Length              0005 (5)\n+069CB4   Flags               01 (1) 'Modification'\n+069CB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+069CB9 PAYLOAD\n+\n+06A204 DATA DESCRIPTOR       08074B50 (134695760)\n+06A208 CRC                   7AC3DE73 (2059656819)\n+06A20C Compressed Size       0000054B (1355)\n+06A210 Uncompressed Size     0000054B (1355)\n+\n+06A214 LOCAL HEADER #122     04034B50 (67324752)\n+06A218 Extract Zip Spec      14 (20) '2.0'\n+06A219 Extract OS            00 (0) 'MS-DOS'\n+06A21A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06A21C Compression Method    0000 (0) 'Stored'\n+06A21E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06A222 CRC                   00000000 (0)\n+06A226 Compressed Size       00000000 (0)\n+06A22A Uncompressed Size     00000000 (0)\n+06A22E Filename Length       003E (62)\n+06A230 Extra Length          0009 (9)\n+06A232 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6A232: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06A270 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06A272   Length              0005 (5)\n+06A274   Flags               01 (1) 'Modification'\n+06A275   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06A279 PAYLOAD\n+\n+06A794 DATA DESCRIPTOR       08074B50 (134695760)\n+06A798 CRC                   190CB88A (420264074)\n+06A79C Compressed Size       0000051B (1307)\n+06A7A0 Uncompressed Size     0000051B (1307)\n+\n+06A7A4 LOCAL HEADER #123     04034B50 (67324752)\n+06A7A8 Extract Zip Spec      14 (20) '2.0'\n+06A7A9 Extract OS            00 (0) 'MS-DOS'\n+06A7AA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06A7AC Compression Method    0000 (0) 'Stored'\n+06A7AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06A7B2 CRC                   00000000 (0)\n+06A7B6 Compressed Size       00000000 (0)\n+06A7BA Uncompressed Size     00000000 (0)\n+06A7BE Filename Length       003B (59)\n+06A7C0 Extra Length          0009 (9)\n+06A7C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6A7C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06A7FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06A7FF   Length              0005 (5)\n+06A801   Flags               01 (1) 'Modification'\n+06A802   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06A806 PAYLOAD\n+\n+06AD56 DATA DESCRIPTOR       08074B50 (134695760)\n+06AD5A CRC                   94D0E691 (2496718481)\n+06AD5E Compressed Size       00000550 (1360)\n+06AD62 Uncompressed Size     00000550 (1360)\n+\n+06AD66 LOCAL HEADER #124     04034B50 (67324752)\n+06AD6A Extract Zip Spec      14 (20) '2.0'\n+06AD6B Extract OS            00 (0) 'MS-DOS'\n+06AD6C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06AD6E Compression Method    0000 (0) 'Stored'\n+06AD70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06AD74 CRC                   00000000 (0)\n+06AD78 Compressed Size       00000000 (0)\n+06AD7C Uncompressed Size     00000000 (0)\n+06AD80 Filename Length       003C (60)\n+06AD82 Extra Length          0009 (9)\n+06AD84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6AD84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06ADC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06ADC2   Length              0005 (5)\n+06ADC4   Flags               01 (1) 'Modification'\n+06ADC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06ADC9 PAYLOAD\n+\n+06B239 DATA DESCRIPTOR       08074B50 (134695760)\n+06B23D CRC                   E4FF1EF0 (3841924848)\n+06B241 Compressed Size       00000470 (1136)\n+06B245 Uncompressed Size     00000470 (1136)\n+\n+06B249 LOCAL HEADER #125     04034B50 (67324752)\n+06B24D Extract Zip Spec      14 (20) '2.0'\n+06B24E Extract OS            00 (0) 'MS-DOS'\n+06B24F General Purpose Flag  0000 (0)\n+06B251 Compression Method    0000 (0) 'Stored'\n+06B253 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06B257 CRC                   00000000 (0)\n+06B25B Compressed Size       00000000 (0)\n+06B25F Uncompressed Size     00000000 (0)\n+06B263 Filename Length       0029 (41)\n+06B265 Extra Length          0009 (9)\n+06B267 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6B267: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06B290 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06B292   Length              0005 (5)\n+06B294   Flags               01 (1) 'Modification'\n+06B295   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06B299 LOCAL HEADER #126     04034B50 (67324752)\n+06B29D Extract Zip Spec      14 (20) '2.0'\n+06B29E Extract OS            00 (0) 'MS-DOS'\n+06B29F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06B2A1 Compression Method    0000 (0) 'Stored'\n+06B2A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06B2A7 CRC                   00000000 (0)\n+06B2AB Compressed Size       00000000 (0)\n+06B2AF Uncompressed Size     00000000 (0)\n+06B2B3 Filename Length       0041 (65)\n+06B2B5 Extra Length          0009 (9)\n+06B2B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6B2B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06B2F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06B2FA   Length              0005 (5)\n+06B2FC   Flags               01 (1) 'Modification'\n+06B2FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06B301 PAYLOAD\n+\n+06C08E DATA DESCRIPTOR       08074B50 (134695760)\n+06C092 CRC                   54CD8A2A (1422756394)\n+06C096 Compressed Size       00000D8D (3469)\n+06C09A Uncompressed Size     00000D8D (3469)\n+\n+06C09E LOCAL HEADER #127     04034B50 (67324752)\n+06C0A2 Extract Zip Spec      14 (20) '2.0'\n+06C0A3 Extract OS            00 (0) 'MS-DOS'\n+06C0A4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06C0A6 Compression Method    0000 (0) 'Stored'\n+06C0A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06C0AC CRC                   00000000 (0)\n+06C0B0 Compressed Size       00000000 (0)\n+06C0B4 Uncompressed Size     00000000 (0)\n+06C0B8 Filename Length       0044 (68)\n+06C0BA Extra Length          0009 (9)\n+06C0BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6C0BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06C100 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06C102   Length              0005 (5)\n+06C104   Flags               01 (1) 'Modification'\n+06C105   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06C109 PAYLOAD\n+\n+06C8B9 DATA DESCRIPTOR       08074B50 (134695760)\n+06C8BD CRC                   6FAB873E (1873512254)\n+06C8C1 Compressed Size       000007B0 (1968)\n+06C8C5 Uncompressed Size     000007B0 (1968)\n+\n+06C8C9 LOCAL HEADER #128     04034B50 (67324752)\n+06C8CD Extract Zip Spec      14 (20) '2.0'\n+06C8CE Extract OS            00 (0) 'MS-DOS'\n+06C8CF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06C8D1 Compression Method    0000 (0) 'Stored'\n+06C8D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06C8D7 CRC                   00000000 (0)\n+06C8DB Compressed Size       00000000 (0)\n+06C8DF Uncompressed Size     00000000 (0)\n+06C8E3 Filename Length       004C (76)\n+06C8E5 Extra Length          0009 (9)\n+06C8E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6C8E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06C933 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06C935   Length              0005 (5)\n+06C937   Flags               01 (1) 'Modification'\n+06C938   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06C93C PAYLOAD\n+\n+06CE6C DATA DESCRIPTOR       08074B50 (134695760)\n+06CE70 CRC                   0C78A9F4 (209234420)\n+06CE74 Compressed Size       00000530 (1328)\n+06CE78 Uncompressed Size     00000530 (1328)\n+\n+06CE7C LOCAL HEADER #129     04034B50 (67324752)\n+06CE80 Extract Zip Spec      14 (20) '2.0'\n+06CE81 Extract OS            00 (0) 'MS-DOS'\n+06CE82 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06CE84 Compression Method    0000 (0) 'Stored'\n+06CE86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06CE8A CRC                   00000000 (0)\n+06CE8E Compressed Size       00000000 (0)\n+06CE92 Uncompressed Size     00000000 (0)\n+06CE96 Filename Length       004C (76)\n+06CE98 Extra Length          0009 (9)\n+06CE9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6CE9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06CEE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06CEE8   Length              0005 (5)\n+06CEEA   Flags               01 (1) 'Modification'\n+06CEEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06CEEF PAYLOAD\n+\n+06D449 DATA DESCRIPTOR       08074B50 (134695760)\n+06D44D CRC                   5D42735B (1564635995)\n+06D451 Compressed Size       0000055A (1370)\n+06D455 Uncompressed Size     0000055A (1370)\n+\n+06D459 LOCAL HEADER #130     04034B50 (67324752)\n+06D45D Extract Zip Spec      14 (20) '2.0'\n+06D45E Extract OS            00 (0) 'MS-DOS'\n+06D45F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06D461 Compression Method    0000 (0) 'Stored'\n+06D463 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06D467 CRC                   00000000 (0)\n+06D46B Compressed Size       00000000 (0)\n+06D46F Uncompressed Size     00000000 (0)\n+06D473 Filename Length       0049 (73)\n+06D475 Extra Length          0009 (9)\n+06D477 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6D477: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06D4C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06D4C2   Length              0005 (5)\n+06D4C4   Flags               01 (1) 'Modification'\n+06D4C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06D4C9 PAYLOAD\n+\n+06D9C0 DATA DESCRIPTOR       08074B50 (134695760)\n+06D9C4 CRC                   FE374BB9 (4265036729)\n+06D9C8 Compressed Size       000004F7 (1271)\n+06D9CC Uncompressed Size     000004F7 (1271)\n+\n+06D9D0 LOCAL HEADER #131     04034B50 (67324752)\n+06D9D4 Extract Zip Spec      14 (20) '2.0'\n+06D9D5 Extract OS            00 (0) 'MS-DOS'\n+06D9D6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06D9D8 Compression Method    0000 (0) 'Stored'\n+06D9DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06D9DE CRC                   00000000 (0)\n+06D9E2 Compressed Size       00000000 (0)\n+06D9E6 Uncompressed Size     00000000 (0)\n+06D9EA Filename Length       0044 (68)\n+06D9EC Extra Length          0009 (9)\n+06D9EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6D9EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06DA32 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06DA34   Length              0005 (5)\n+06DA36   Flags               01 (1) 'Modification'\n+06DA37   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06DA3B PAYLOAD\n+\n+06DF1B DATA DESCRIPTOR       08074B50 (134695760)\n+06DF1F CRC                   EF9E0DDB (4020112859)\n+06DF23 Compressed Size       000004E0 (1248)\n+06DF27 Uncompressed Size     000004E0 (1248)\n+\n+06DF2B LOCAL HEADER #132     04034B50 (67324752)\n+06DF2F Extract Zip Spec      14 (20) '2.0'\n+06DF30 Extract OS            00 (0) 'MS-DOS'\n+06DF31 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06DF33 Compression Method    0000 (0) 'Stored'\n+06DF35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06DF39 CRC                   00000000 (0)\n+06DF3D Compressed Size       00000000 (0)\n+06DF41 Uncompressed Size     00000000 (0)\n+06DF45 Filename Length       0047 (71)\n+06DF47 Extra Length          0009 (9)\n+06DF49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6DF49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06DF90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06DF92   Length              0005 (5)\n+06DF94   Flags               01 (1) 'Modification'\n+06DF95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06DF99 PAYLOAD\n+\n+06EC0B DATA DESCRIPTOR       08074B50 (134695760)\n+06EC0F CRC                   65FB8949 (1710983497)\n+06EC13 Compressed Size       00000C72 (3186)\n+06EC17 Uncompressed Size     00000C72 (3186)\n+\n+06EC1B LOCAL HEADER #133     04034B50 (67324752)\n+06EC1F Extract Zip Spec      14 (20) '2.0'\n+06EC20 Extract OS            00 (0) 'MS-DOS'\n+06EC21 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06EC23 Compression Method    0000 (0) 'Stored'\n+06EC25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06EC29 CRC                   00000000 (0)\n+06EC2D Compressed Size       00000000 (0)\n+06EC31 Uncompressed Size     00000000 (0)\n+06EC35 Filename Length       0043 (67)\n+06EC37 Extra Length          0009 (9)\n+06EC39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6EC39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06EC7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06EC7E   Length              0005 (5)\n+06EC80   Flags               01 (1) 'Modification'\n+06EC81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06EC85 PAYLOAD\n+\n+06F15E DATA DESCRIPTOR       08074B50 (134695760)\n+06F162 CRC                   CC224977 (3424799095)\n+06F166 Compressed Size       000004D9 (1241)\n+06F16A Uncompressed Size     000004D9 (1241)\n+\n+06F16E LOCAL HEADER #134     04034B50 (67324752)\n+06F172 Extract Zip Spec      14 (20) '2.0'\n+06F173 Extract OS            00 (0) 'MS-DOS'\n+06F174 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06F176 Compression Method    0000 (0) 'Stored'\n+06F178 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06F17C CRC                   00000000 (0)\n+06F180 Compressed Size       00000000 (0)\n+06F184 Uncompressed Size     00000000 (0)\n+06F188 Filename Length       0049 (73)\n+06F18A Extra Length          0009 (9)\n+06F18C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6F18C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06F1D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06F1D7   Length              0005 (5)\n+06F1D9   Flags               01 (1) 'Modification'\n+06F1DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06F1DE PAYLOAD\n+\n+06FA8E DATA DESCRIPTOR       08074B50 (134695760)\n+06FA92 CRC                   38CBB90F (952875279)\n+06FA96 Compressed Size       000008B0 (2224)\n+06FA9A Uncompressed Size     000008B0 (2224)\n+\n+06FA9E LOCAL HEADER #135     04034B50 (67324752)\n+06FAA2 Extract Zip Spec      14 (20) '2.0'\n+06FAA3 Extract OS            00 (0) 'MS-DOS'\n+06FAA4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06FAA6 Compression Method    0000 (0) 'Stored'\n+06FAA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06FAAC CRC                   00000000 (0)\n+06FAB0 Compressed Size       00000000 (0)\n+06FAB4 Uncompressed Size     00000000 (0)\n+06FAB8 Filename Length       004B (75)\n+06FABA Extra Length          0009 (9)\n+06FABC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6FABC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06FB07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06FB09   Length              0005 (5)\n+06FB0B   Flags               01 (1) 'Modification'\n+06FB0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06FB10 PAYLOAD\n+\n+070023 DATA DESCRIPTOR       08074B50 (134695760)\n+070027 CRC                   F0075F17 (4027014935)\n+07002B Compressed Size       00000513 (1299)\n+07002F Uncompressed Size     00000513 (1299)\n+\n+070033 LOCAL HEADER #136     04034B50 (67324752)\n+070037 Extract Zip Spec      14 (20) '2.0'\n+070038 Extract OS            00 (0) 'MS-DOS'\n+070039 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+07003B Compression Method    0000 (0) 'Stored'\n+07003D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070041 CRC                   00000000 (0)\n+070045 Compressed Size       00000000 (0)\n+070049 Uncompressed Size     00000000 (0)\n+07004D Filename Length       0044 (68)\n+07004F Extra Length          0009 (9)\n+070051 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x70051: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070095 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070097   Length              0005 (5)\n+070099   Flags               01 (1) 'Modification'\n+07009A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+07009E PAYLOAD\n+\n+070597 DATA DESCRIPTOR       08074B50 (134695760)\n+07059B CRC                   42E91C9D (1122573469)\n+07059F Compressed Size       000004F9 (1273)\n+0705A3 Uncompressed Size     000004F9 (1273)\n+\n+0705A7 LOCAL HEADER #137     04034B50 (67324752)\n+0705AB Extract Zip Spec      14 (20) '2.0'\n+0705AC Extract OS            00 (0) 'MS-DOS'\n+0705AD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0705AF Compression Method    0000 (0) 'Stored'\n+0705B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0705B5 CRC                   00000000 (0)\n+0705B9 Compressed Size       00000000 (0)\n+0705BD Uncompressed Size     00000000 (0)\n+0705C1 Filename Length       0042 (66)\n+0705C3 Extra Length          0009 (9)\n+0705C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x705C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070607 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070609   Length              0005 (5)\n+07060B   Flags               01 (1) 'Modification'\n+07060C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+070610 PAYLOAD\n+\n+070AE0 DATA DESCRIPTOR       08074B50 (134695760)\n+070AE4 CRC                   85A11C0C (2241928204)\n+070AE8 Compressed Size       000004D0 (1232)\n+070AEC Uncompressed Size     000004D0 (1232)\n+\n+070AF0 LOCAL HEADER #138     04034B50 (67324752)\n+070AF4 Extract Zip Spec      14 (20) '2.0'\n+070AF5 Extract OS            00 (0) 'MS-DOS'\n+070AF6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+070AF8 Compression Method    0000 (0) 'Stored'\n+070AFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070AFE CRC                   00000000 (0)\n+070B02 Compressed Size       00000000 (0)\n+070B06 Uncompressed Size     00000000 (0)\n+070B0A Filename Length       0048 (72)\n+070B0C Extra Length          0009 (9)\n+070B0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x70B0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070B56 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070B58   Length              0005 (5)\n+070B5A   Flags               01 (1) 'Modification'\n+070B5B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+070B5F PAYLOAD\n+\n+071049 DATA DESCRIPTOR       08074B50 (134695760)\n+07104D CRC                   667CA259 (1719444057)\n+071051 Compressed Size       000004EA (1258)\n+071055 Uncompressed Size     000004EA (1258)\n+\n+071059 LOCAL HEADER #139     04034B50 (67324752)\n+07105D Extract Zip Spec      14 (20) '2.0'\n+07105E Extract OS            00 (0) 'MS-DOS'\n+07105F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+071061 Compression Method    0000 (0) 'Stored'\n+071063 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+071067 CRC                   00000000 (0)\n+07106B Compressed Size       00000000 (0)\n+07106F Uncompressed Size     00000000 (0)\n+071073 Filename Length       004C (76)\n+071075 Extra Length          0009 (9)\n+071077 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x71077: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0710C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0710C5   Length              0005 (5)\n+0710C7   Flags               01 (1) 'Modification'\n+0710C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0710CC PAYLOAD\n+\n+0715F8 DATA DESCRIPTOR       08074B50 (134695760)\n+0715FC CRC                   4E4FEF3B (1313861435)\n+071600 Compressed Size       0000052C (1324)\n+071604 Uncompressed Size     0000052C (1324)\n+\n+071608 LOCAL HEADER #140     04034B50 (67324752)\n+07160C Extract Zip Spec      14 (20) '2.0'\n+07160D Extract OS            00 (0) 'MS-DOS'\n+07160E General Purpose Flag  0000 (0)\n+071610 Compression Method    0000 (0) 'Stored'\n+071612 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+071616 CRC                   00000000 (0)\n+07161A Compressed Size       00000000 (0)\n+07161E Uncompressed Size     00000000 (0)\n+071622 Filename Length       0022 (34)\n+071624 Extra Length          0009 (9)\n+071626 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x71626: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+071648 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07164A   Length              0005 (5)\n+07164C   Flags               01 (1) 'Modification'\n+07164D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+071651 LOCAL HEADER #141     04034B50 (67324752)\n+071655 Extract Zip Spec      14 (20) '2.0'\n+071656 Extract OS            00 (0) 'MS-DOS'\n+071657 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+071659 Compression Method    0000 (0) 'Stored'\n+07165B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07165F CRC                   00000000 (0)\n+071663 Compressed Size       00000000 (0)\n+071667 Uncompressed Size     00000000 (0)\n+07166B Filename Length       002F (47)\n+07166D Extra Length          0009 (9)\n+07166F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7166F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07169E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0716A0   Length              0005 (5)\n+0716A2   Flags               01 (1) 'Modification'\n+0716A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0716A7 PAYLOAD\n+\n+072421 DATA DESCRIPTOR       08074B50 (134695760)\n+072425 CRC                   9A2D2058 (2586648664)\n+072429 Compressed Size       00000D7A (3450)\n+07242D Uncompressed Size     00000D7A (3450)\n+\n+072431 LOCAL HEADER #142     04034B50 (67324752)\n+072435 Extract Zip Spec      14 (20) '2.0'\n+072436 Extract OS            00 (0) 'MS-DOS'\n+072437 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+072439 Compression Method    0000 (0) 'Stored'\n+07243B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07243F CRC                   00000000 (0)\n+072443 Compressed Size       00000000 (0)\n+072447 Uncompressed Size     00000000 (0)\n+07244B Filename Length       002F (47)\n+07244D Extra Length          0009 (9)\n+07244F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7244F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07247E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+072480   Length              0005 (5)\n+072482   Flags               01 (1) 'Modification'\n+072483   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+072487 PAYLOAD\n+\n+072F09 DATA DESCRIPTOR       08074B50 (134695760)\n+072F0D CRC                   8FD49BC2 (2413075394)\n+072F11 Compressed Size       00000A82 (2690)\n+072F15 Uncompressed Size     00000A82 (2690)\n+\n+072F19 LOCAL HEADER #143     04034B50 (67324752)\n+072F1D Extract Zip Spec      14 (20) '2.0'\n+072F1E Extract OS            00 (0) 'MS-DOS'\n+072F1F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+072F21 Compression Method    0000 (0) 'Stored'\n+072F23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+072F27 CRC                   00000000 (0)\n+072F2B Compressed Size       00000000 (0)\n+072F2F Uncompressed Size     00000000 (0)\n+072F33 Filename Length       0041 (65)\n+072F35 Extra Length          0009 (9)\n+072F37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x72F37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+072F78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+072F7A   Length              0005 (5)\n+072F7C   Flags               01 (1) 'Modification'\n+072F7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+072F81 PAYLOAD\n+\n+076D14 DATA DESCRIPTOR       08074B50 (134695760)\n+076D18 CRC                   DFC97490 (3754521744)\n+076D1C Compressed Size       00003D93 (15763)\n+076D20 Uncompressed Size     00003D93 (15763)\n+\n+076D24 LOCAL HEADER #144     04034B50 (67324752)\n+076D28 Extract Zip Spec      14 (20) '2.0'\n+076D29 Extract OS            00 (0) 'MS-DOS'\n+076D2A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+076D2C Compression Method    0000 (0) 'Stored'\n+076D2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+076D32 CRC                   00000000 (0)\n+076D36 Compressed Size       00000000 (0)\n+076D3A Uncompressed Size     00000000 (0)\n+076D3E Filename Length       0034 (52)\n+076D40 Extra Length          0009 (9)\n+076D42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x76D42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+076D76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+076D78   Length              0005 (5)\n+076D7A   Flags               01 (1) 'Modification'\n+076D7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+076D7F PAYLOAD\n+\n+077238 DATA DESCRIPTOR       08074B50 (134695760)\n+07723C CRC                   D1BB774A (3518723914)\n+077240 Compressed Size       000004B9 (1209)\n+077244 Uncompressed Size     000004B9 (1209)\n+\n+077248 LOCAL HEADER #145     04034B50 (67324752)\n+07724C Extract Zip Spec      14 (20) '2.0'\n+07724D Extract OS            00 (0) 'MS-DOS'\n+07724E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+077250 Compression Method    0000 (0) 'Stored'\n+077252 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+077256 CRC                   00000000 (0)\n+07725A Compressed Size       00000000 (0)\n+07725E Uncompressed Size     00000000 (0)\n+077262 Filename Length       0043 (67)\n+077264 Extra Length          0009 (9)\n+077266 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x77266: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0772A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0772AB   Length              0005 (5)\n+0772AD   Flags               01 (1) 'Modification'\n+0772AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0772B2 PAYLOAD\n+\n+077762 DATA DESCRIPTOR       08074B50 (134695760)\n+077766 CRC                   B3A8C3FA (3014181882)\n+07776A Compressed Size       000004B0 (1200)\n+07776E Uncompressed Size     000004B0 (1200)\n+\n+077772 LOCAL HEADER #146     04034B50 (67324752)\n+077776 Extract Zip Spec      14 (20) '2.0'\n+077777 Extract OS            00 (0) 'MS-DOS'\n+077778 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+07777A Compression Method    0000 (0) 'Stored'\n+07777C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+077780 CRC                   00000000 (0)\n+077784 Compressed Size       00000000 (0)\n+077788 Uncompressed Size     00000000 (0)\n+07778C Filename Length       003B (59)\n+07778E Extra Length          0009 (9)\n+077790 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x77790: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0777CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0777CD   Length              0005 (5)\n+0777CF   Flags               01 (1) 'Modification'\n+0777D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0777D4 PAYLOAD\n+\n+077CC2 DATA DESCRIPTOR       08074B50 (134695760)\n+077CC6 CRC                   663E77E4 (1715369956)\n+077CCA Compressed Size       000004EE (1262)\n+077CCE Uncompressed Size     000004EE (1262)\n+\n+077CD2 LOCAL HEADER #147     04034B50 (67324752)\n+077CD6 Extract Zip Spec      14 (20) '2.0'\n+077CD7 Extract OS            00 (0) 'MS-DOS'\n+077CD8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+077CDA Compression Method    0000 (0) 'Stored'\n+077CDC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+077CE0 CRC                   00000000 (0)\n+077CE4 Compressed Size       00000000 (0)\n+077CE8 Uncompressed Size     00000000 (0)\n+077CEC Filename Length       0037 (55)\n+077CEE Extra Length          0009 (9)\n+077CF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x77CF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+077D27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+077D29   Length              0005 (5)\n+077D2B   Flags               01 (1) 'Modification'\n+077D2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+077D30 PAYLOAD\n+\n+0781AA DATA DESCRIPTOR       08074B50 (134695760)\n+0781AE CRC                   4C849D6C (1283759468)\n+0781B2 Compressed Size       0000047A (1146)\n+0781B6 Uncompressed Size     0000047A (1146)\n+\n+0781BA LOCAL HEADER #148     04034B50 (67324752)\n+0781BE Extract Zip Spec      14 (20) '2.0'\n+0781BF Extract OS            00 (0) 'MS-DOS'\n+0781C0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0781C2 Compression Method    0000 (0) 'Stored'\n+0781C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0781C8 CRC                   00000000 (0)\n+0781CC Compressed Size       00000000 (0)\n+0781D0 Uncompressed Size     00000000 (0)\n+0781D4 Filename Length       0036 (54)\n+0781D6 Extra Length          0009 (9)\n+0781D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x781D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07820E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+078210   Length              0005 (5)\n+078212   Flags               01 (1) 'Modification'\n+078213   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+078217 PAYLOAD\n+\n+08231D DATA DESCRIPTOR       08074B50 (134695760)\n+082321 CRC                   1F091D5A (520691034)\n+082325 Compressed Size       0000A106 (41222)\n+082329 Uncompressed Size     0000A106 (41222)\n+\n+08232D LOCAL HEADER #149     04034B50 (67324752)\n+082331 Extract Zip Spec      14 (20) '2.0'\n+082332 Extract OS            00 (0) 'MS-DOS'\n+082333 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+082335 Compression Method    0000 (0) 'Stored'\n+082337 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08233B CRC                   00000000 (0)\n+08233F Compressed Size       00000000 (0)\n+082343 Uncompressed Size     00000000 (0)\n+082347 Filename Length       0036 (54)\n+082349 Extra Length          0009 (9)\n+08234B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8234B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+082381 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+082383   Length              0005 (5)\n+082385   Flags               01 (1) 'Modification'\n+082386   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08238A PAYLOAD\n+\n+082942 DATA DESCRIPTOR       08074B50 (134695760)\n+082946 CRC                   BC70E4F4 (3161515252)\n+08294A Compressed Size       000005B8 (1464)\n+08294E Uncompressed Size     000005B8 (1464)\n+\n+082952 LOCAL HEADER #150     04034B50 (67324752)\n+082956 Extract Zip Spec      14 (20) '2.0'\n+082957 Extract OS            00 (0) 'MS-DOS'\n+082958 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08295A Compression Method    0000 (0) 'Stored'\n+08295C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+082960 CRC                   00000000 (0)\n+082964 Compressed Size       00000000 (0)\n+082968 Uncompressed Size     00000000 (0)\n+08296C Filename Length       002A (42)\n+08296E Extra Length          0009 (9)\n+082970 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x82970: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08299A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08299C   Length              0005 (5)\n+08299E   Flags               01 (1) 'Modification'\n+08299F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0829A3 PAYLOAD\n+\n+0832D5 DATA DESCRIPTOR       08074B50 (134695760)\n+0832D9 CRC                   48D76DDD (1222077917)\n+0832DD Compressed Size       00000932 (2354)\n+0832E1 Uncompressed Size     00000932 (2354)\n+\n+0832E5 LOCAL HEADER #151     04034B50 (67324752)\n+0832E9 Extract Zip Spec      14 (20) '2.0'\n+0832EA Extract OS            00 (0) 'MS-DOS'\n+0832EB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0832ED Compression Method    0000 (0) 'Stored'\n+0832EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0832F3 CRC                   00000000 (0)\n+0832F7 Compressed Size       00000000 (0)\n+0832FB Uncompressed Size     00000000 (0)\n+0832FF Filename Length       003E (62)\n+083301 Extra Length          0009 (9)\n+083303 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x83303: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+083341 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+083343   Length              0005 (5)\n+083345   Flags               01 (1) 'Modification'\n+083346   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08334A PAYLOAD\n+\n+08383C DATA DESCRIPTOR       08074B50 (134695760)\n+083840 CRC                   8DAF0532 (2377057586)\n+083844 Compressed Size       000004F2 (1266)\n+083848 Uncompressed Size     000004F2 (1266)\n+\n+08384C LOCAL HEADER #152     04034B50 (67324752)\n+083850 Extract Zip Spec      14 (20) '2.0'\n+083851 Extract OS            00 (0) 'MS-DOS'\n+083852 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+083854 Compression Method    0000 (0) 'Stored'\n+083856 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08385A CRC                   00000000 (0)\n+08385E Compressed Size       00000000 (0)\n+083862 Uncompressed Size     00000000 (0)\n+083866 Filename Length       002E (46)\n+083868 Extra Length          0009 (9)\n+08386A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8386A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+083898 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08389A   Length              0005 (5)\n+08389C   Flags               01 (1) 'Modification'\n+08389D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0838A1 PAYLOAD\n+\n+083DD6 DATA DESCRIPTOR       08074B50 (134695760)\n+083DDA CRC                   5CF3A6C0 (1559471808)\n+083DDE Compressed Size       00000535 (1333)\n+083DE2 Uncompressed Size     00000535 (1333)\n+\n+083DE6 LOCAL HEADER #153     04034B50 (67324752)\n+083DEA Extract Zip Spec      14 (20) '2.0'\n+083DEB Extract OS            00 (0) 'MS-DOS'\n+083DEC General Purpose Flag  0000 (0)\n+083DEE Compression Method    0000 (0) 'Stored'\n+083DF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+083DF4 CRC                   00000000 (0)\n+083DF8 Compressed Size       00000000 (0)\n+083DFC Uncompressed Size     00000000 (0)\n+083E00 Filename Length       002A (42)\n+083E02 Extra Length          0009 (9)\n+083E04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x83E04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+083E2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+083E30   Length              0005 (5)\n+083E32   Flags               01 (1) 'Modification'\n+083E33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+083E37 LOCAL HEADER #154     04034B50 (67324752)\n+083E3B Extract Zip Spec      14 (20) '2.0'\n+083E3C Extract OS            00 (0) 'MS-DOS'\n+083E3D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+083E3F Compression Method    0000 (0) 'Stored'\n+083E41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+083E45 CRC                   00000000 (0)\n+083E49 Compressed Size       00000000 (0)\n+083E4D Uncompressed Size     00000000 (0)\n+083E51 Filename Length       0047 (71)\n+083E53 Extra Length          0009 (9)\n+083E55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x83E55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+083E9C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+083E9E   Length              0005 (5)\n+083EA0   Flags               01 (1) 'Modification'\n+083EA1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+083EA5 PAYLOAD\n+\n+0846A5 DATA DESCRIPTOR       08074B50 (134695760)\n+0846A9 CRC                   EA8B59C6 (3935001030)\n+0846AD Compressed Size       00000800 (2048)\n+0846B1 Uncompressed Size     00000800 (2048)\n+\n+0846B5 LOCAL HEADER #155     04034B50 (67324752)\n+0846B9 Extract Zip Spec      14 (20) '2.0'\n+0846BA Extract OS            00 (0) 'MS-DOS'\n+0846BB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0846BD Compression Method    0000 (0) 'Stored'\n+0846BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0846C3 CRC                   00000000 (0)\n+0846C7 Compressed Size       00000000 (0)\n+0846CB Uncompressed Size     00000000 (0)\n+0846CF Filename Length       0042 (66)\n+0846D1 Extra Length          0009 (9)\n+0846D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x846D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+084715 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+084717   Length              0005 (5)\n+084719   Flags               01 (1) 'Modification'\n+08471A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08471E PAYLOAD\n+\n+084D2D DATA DESCRIPTOR       08074B50 (134695760)\n+084D31 CRC                   3280412A (847266090)\n+084D35 Compressed Size       0000060F (1551)\n+084D39 Uncompressed Size     0000060F (1551)\n+\n+084D3D LOCAL HEADER #156     04034B50 (67324752)\n+084D41 Extract Zip Spec      14 (20) '2.0'\n+084D42 Extract OS            00 (0) 'MS-DOS'\n+084D43 General Purpose Flag  0000 (0)\n+084D45 Compression Method    0000 (0) 'Stored'\n+084D47 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+084D4B CRC                   00000000 (0)\n+084D4F Compressed Size       00000000 (0)\n+084D53 Uncompressed Size     00000000 (0)\n+084D57 Filename Length       002A (42)\n+084D59 Extra Length          0009 (9)\n+084D5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x84D5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+084D85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+084D87   Length              0005 (5)\n+084D89   Flags               01 (1) 'Modification'\n+084D8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+084D8E LOCAL HEADER #157     04034B50 (67324752)\n+084D92 Extract Zip Spec      14 (20) '2.0'\n+084D93 Extract OS            00 (0) 'MS-DOS'\n+084D94 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+084D96 Compression Method    0000 (0) 'Stored'\n+084D98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+084D9C CRC                   00000000 (0)\n+084DA0 Compressed Size       00000000 (0)\n+084DA4 Uncompressed Size     00000000 (0)\n+084DA8 Filename Length       0041 (65)\n+084DAA Extra Length          0009 (9)\n+084DAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x84DAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+084DED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+084DEF   Length              0005 (5)\n+084DF1   Flags               01 (1) 'Modification'\n+084DF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+084DF6 PAYLOAD\n+\n+085FCA DATA DESCRIPTOR       08074B50 (134695760)\n+085FCE CRC                   B81BB8E1 (3088824545)\n+085FD2 Compressed Size       000011D4 (4564)\n+085FD6 Uncompressed Size     000011D4 (4564)\n+\n+085FDA LOCAL HEADER #158     04034B50 (67324752)\n+085FDE Extract Zip Spec      14 (20) '2.0'\n+085FDF Extract OS            00 (0) 'MS-DOS'\n+085FE0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+085FE2 Compression Method    0000 (0) 'Stored'\n+085FE4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+085FE8 CRC                   00000000 (0)\n+085FEC Compressed Size       00000000 (0)\n+085FF0 Uncompressed Size     00000000 (0)\n+085FF4 Filename Length       0040 (64)\n+085FF6 Extra Length          0009 (9)\n+085FF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x85FF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+086038 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08603A   Length              0005 (5)\n+08603C   Flags               01 (1) 'Modification'\n+08603D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+086041 PAYLOAD\n+\n+086C99 DATA DESCRIPTOR       08074B50 (134695760)\n+086C9D CRC                   1FF4288F (536094863)\n+086CA1 Compressed Size       00000C58 (3160)\n+086CA5 Uncompressed Size     00000C58 (3160)\n+\n+086CA9 LOCAL HEADER #159     04034B50 (67324752)\n+086CAD Extract Zip Spec      14 (20) '2.0'\n+086CAE Extract OS            00 (0) 'MS-DOS'\n+086CAF General Purpose Flag  0000 (0)\n+086CB1 Compression Method    0000 (0) 'Stored'\n+086CB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+086CB7 CRC                   00000000 (0)\n+086CBB Compressed Size       00000000 (0)\n+086CBF Uncompressed Size     00000000 (0)\n+086CC3 Filename Length       0021 (33)\n+086CC5 Extra Length          0009 (9)\n+086CC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x86CC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+086CE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+086CEA   Length              0005 (5)\n+086CEC   Flags               01 (1) 'Modification'\n+086CED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+086CF1 LOCAL HEADER #160     04034B50 (67324752)\n+086CF5 Extract Zip Spec      14 (20) '2.0'\n+086CF6 Extract OS            00 (0) 'MS-DOS'\n+086CF7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+086CF9 Compression Method    0000 (0) 'Stored'\n+086CFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+086CFF CRC                   00000000 (0)\n+086D03 Compressed Size       00000000 (0)\n+086D07 Uncompressed Size     00000000 (0)\n+086D0B Filename Length       0030 (48)\n+086D0D Extra Length          0009 (9)\n+086D0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x86D0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+086D3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+086D41   Length              0005 (5)\n+086D43   Flags               01 (1) 'Modification'\n+086D44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+086D48 PAYLOAD\n+\n+0876B7 DATA DESCRIPTOR       08074B50 (134695760)\n+0876BB CRC                   C191912C (3247542572)\n+0876BF Compressed Size       0000096F (2415)\n+0876C3 Uncompressed Size     0000096F (2415)\n+\n+0876C7 LOCAL HEADER #161     04034B50 (67324752)\n+0876CB Extract Zip Spec      14 (20) '2.0'\n+0876CC Extract OS            00 (0) 'MS-DOS'\n+0876CD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0876CF Compression Method    0000 (0) 'Stored'\n+0876D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0876D5 CRC                   00000000 (0)\n+0876D9 Compressed Size       00000000 (0)\n+0876DD Uncompressed Size     00000000 (0)\n+0876E1 Filename Length       002D (45)\n+0876E3 Extra Length          0009 (9)\n+0876E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x876E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+087712 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+087714   Length              0005 (5)\n+087716   Flags               01 (1) 'Modification'\n+087717   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08771B PAYLOAD\n+\n+0881DD DATA DESCRIPTOR       08074B50 (134695760)\n+0881E1 CRC                   B9F68231 (3119940145)\n+0881E5 Compressed Size       00000AC2 (2754)\n+0881E9 Uncompressed Size     00000AC2 (2754)\n+\n+0881ED LOCAL HEADER #162     04034B50 (67324752)\n+0881F1 Extract Zip Spec      14 (20) '2.0'\n+0881F2 Extract OS            00 (0) 'MS-DOS'\n+0881F3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0881F5 Compression Method    0000 (0) 'Stored'\n+0881F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0881FB CRC                   00000000 (0)\n+0881FF Compressed Size       00000000 (0)\n+088203 Uncompressed Size     00000000 (0)\n+088207 Filename Length       0035 (53)\n+088209 Extra Length          0009 (9)\n+08820B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8820B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+088240 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+088242   Length              0005 (5)\n+088244   Flags               01 (1) 'Modification'\n+088245   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+088249 PAYLOAD\n+\n+0888B4 DATA DESCRIPTOR       08074B50 (134695760)\n+0888B8 CRC                   9A0865B9 (2584241593)\n+0888BC Compressed Size       0000066B (1643)\n+0888C0 Uncompressed Size     0000066B (1643)\n+\n+0888C4 LOCAL HEADER #163     04034B50 (67324752)\n+0888C8 Extract Zip Spec      14 (20) '2.0'\n+0888C9 Extract OS            00 (0) 'MS-DOS'\n+0888CA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0888CC Compression Method    0000 (0) 'Stored'\n+0888CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0888D2 CRC                   00000000 (0)\n+0888D6 Compressed Size       00000000 (0)\n+0888DA Uncompressed Size     00000000 (0)\n+0888DE Filename Length       0037 (55)\n+0888E0 Extra Length          0009 (9)\n+0888E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x888E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+088919 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08891B   Length              0005 (5)\n+08891D   Flags               01 (1) 'Modification'\n+08891E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+088922 PAYLOAD\n+\n+089154 DATA DESCRIPTOR       08074B50 (134695760)\n+089158 CRC                   5F2ADB9F (1596644255)\n+08915C Compressed Size       00000832 (2098)\n+089160 Uncompressed Size     00000832 (2098)\n+\n+089164 LOCAL HEADER #164     04034B50 (67324752)\n+089168 Extract Zip Spec      14 (20) '2.0'\n+089169 Extract OS            00 (0) 'MS-DOS'\n+08916A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08916C Compression Method    0000 (0) 'Stored'\n+08916E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+089172 CRC                   00000000 (0)\n+089176 Compressed Size       00000000 (0)\n+08917A Uncompressed Size     00000000 (0)\n+08917E Filename Length       0037 (55)\n+089180 Extra Length          0009 (9)\n+089182 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x89182: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0891B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0891BB   Length              0005 (5)\n+0891BD   Flags               01 (1) 'Modification'\n+0891BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0891C2 PAYLOAD\n+\n+089A8E DATA DESCRIPTOR       08074B50 (134695760)\n+089A92 CRC                   4D1AEB96 (1293609878)\n+089A96 Compressed Size       000008CC (2252)\n+089A9A Uncompressed Size     000008CC (2252)\n+\n+089A9E LOCAL HEADER #165     04034B50 (67324752)\n+089AA2 Extract Zip Spec      14 (20) '2.0'\n+089AA3 Extract OS            00 (0) 'MS-DOS'\n+089AA4 General Purpose Flag  0000 (0)\n+089AA6 Compression Method    0000 (0) 'Stored'\n+089AA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+089AAC CRC                   00000000 (0)\n+089AB0 Compressed Size       00000000 (0)\n+089AB4 Uncompressed Size     00000000 (0)\n+089AB8 Filename Length       001E (30)\n+089ABA Extra Length          0009 (9)\n+089ABC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x89ABC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+089ADA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+089ADC   Length              0005 (5)\n+089ADE   Flags               01 (1) 'Modification'\n+089ADF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+089AE3 LOCAL HEADER #166     04034B50 (67324752)\n+089AE7 Extract Zip Spec      14 (20) '2.0'\n+089AE8 Extract OS            00 (0) 'MS-DOS'\n+089AE9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+089AEB Compression Method    0000 (0) 'Stored'\n+089AED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+089AF1 CRC                   00000000 (0)\n+089AF5 Compressed Size       00000000 (0)\n+089AF9 Uncompressed Size     00000000 (0)\n+089AFD Filename Length       002F (47)\n+089AFF Extra Length          0009 (9)\n+089B01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x89B01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+089B30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+089B32   Length              0005 (5)\n+089B34   Flags               01 (1) 'Modification'\n+089B35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+089B39 PAYLOAD\n+\n+08A180 DATA DESCRIPTOR       08074B50 (134695760)\n+08A184 CRC                   D1400D79 (3510635897)\n+08A188 Compressed Size       00000647 (1607)\n+08A18C Uncompressed Size     00000647 (1607)\n+\n+08A190 LOCAL HEADER #167     04034B50 (67324752)\n+08A194 Extract Zip Spec      14 (20) '2.0'\n+08A195 Extract OS            00 (0) 'MS-DOS'\n+08A196 General Purpose Flag  0000 (0)\n+08A198 Compression Method    0000 (0) 'Stored'\n+08A19A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08A19E CRC                   00000000 (0)\n+08A1A2 Compressed Size       00000000 (0)\n+08A1A6 Uncompressed Size     00000000 (0)\n+08A1AA Filename Length       0026 (38)\n+08A1AC Extra Length          0009 (9)\n+08A1AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8A1AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08A1D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08A1D6   Length              0005 (5)\n+08A1D8   Flags               01 (1) 'Modification'\n+08A1D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08A1DD LOCAL HEADER #168     04034B50 (67324752)\n+08A1E1 Extract Zip Spec      14 (20) '2.0'\n+08A1E2 Extract OS            00 (0) 'MS-DOS'\n+08A1E3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08A1E5 Compression Method    0000 (0) 'Stored'\n+08A1E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08A1EB CRC                   00000000 (0)\n+08A1EF Compressed Size       00000000 (0)\n+08A1F3 Uncompressed Size     00000000 (0)\n+08A1F7 Filename Length       0036 (54)\n+08A1F9 Extra Length          0009 (9)\n+08A1FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8A1FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08A231 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08A233   Length              0005 (5)\n+08A235   Flags               01 (1) 'Modification'\n+08A236   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08A23A PAYLOAD\n+\n+08A765 DATA DESCRIPTOR       08074B50 (134695760)\n+08A769 CRC                   4A87D325 (1250415397)\n+08A76D Compressed Size       0000052B (1323)\n+08A771 Uncompressed Size     0000052B (1323)\n+\n+08A775 LOCAL HEADER #169     04034B50 (67324752)\n+08A779 Extract Zip Spec      14 (20) '2.0'\n+08A77A Extract OS            00 (0) 'MS-DOS'\n+08A77B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08A77D Compression Method    0000 (0) 'Stored'\n+08A77F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08A783 CRC                   00000000 (0)\n+08A787 Compressed Size       00000000 (0)\n+08A78B Uncompressed Size     00000000 (0)\n+08A78F Filename Length       003D (61)\n+08A791 Extra Length          0009 (9)\n+08A793 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8A793: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08A7D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08A7D2   Length              0005 (5)\n+08A7D4   Flags               01 (1) 'Modification'\n+08A7D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08A7D9 PAYLOAD\n+\n+08B376 DATA DESCRIPTOR       08074B50 (134695760)\n+08B37A CRC                   382251E3 (941773283)\n+08B37E Compressed Size       00000B9D (2973)\n+08B382 Uncompressed Size     00000B9D (2973)\n+\n+08B386 LOCAL HEADER #170     04034B50 (67324752)\n+08B38A Extract Zip Spec      14 (20) '2.0'\n+08B38B Extract OS            00 (0) 'MS-DOS'\n+08B38C General Purpose Flag  0000 (0)\n+08B38E Compression Method    0000 (0) 'Stored'\n+08B390 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08B394 CRC                   00000000 (0)\n+08B398 Compressed Size       00000000 (0)\n+08B39C Uncompressed Size     00000000 (0)\n+08B3A0 Filename Length       001B (27)\n+08B3A2 Extra Length          0009 (9)\n+08B3A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8B3A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08B3BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08B3C1   Length              0005 (5)\n+08B3C3   Flags               01 (1) 'Modification'\n+08B3C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08B3C8 LOCAL HEADER #171     04034B50 (67324752)\n+08B3CC Extract Zip Spec      14 (20) '2.0'\n+08B3CD Extract OS            00 (0) 'MS-DOS'\n+08B3CE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08B3D0 Compression Method    0000 (0) 'Stored'\n+08B3D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08B3D6 CRC                   00000000 (0)\n+08B3DA Compressed Size       00000000 (0)\n+08B3DE Uncompressed Size     00000000 (0)\n+08B3E2 Filename Length       0025 (37)\n+08B3E4 Extra Length          0009 (9)\n+08B3E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8B3E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08B40B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08B40D   Length              0005 (5)\n+08B40F   Flags               01 (1) 'Modification'\n+08B410   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08B414 PAYLOAD\n+\n+091CD3 DATA DESCRIPTOR       08074B50 (134695760)\n+091CD7 CRC                   7D41B4B3 (2101458099)\n+091CDB Compressed Size       000068BF (26815)\n+091CDF Uncompressed Size     000068BF (26815)\n+\n+091CE3 LOCAL HEADER #172     04034B50 (67324752)\n+091CE7 Extract Zip Spec      14 (20) '2.0'\n+091CE8 Extract OS            00 (0) 'MS-DOS'\n+091CE9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+091CEB Compression Method    0000 (0) 'Stored'\n+091CED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+091CF1 CRC                   00000000 (0)\n+091CF5 Compressed Size       00000000 (0)\n+091CF9 Uncompressed Size     00000000 (0)\n+091CFD Filename Length       002B (43)\n+091CFF Extra Length          0009 (9)\n+091D01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x91D01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+091D2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+091D2E   Length              0005 (5)\n+091D30   Flags               01 (1) 'Modification'\n+091D31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+091D35 PAYLOAD\n+\n+09391E DATA DESCRIPTOR       08074B50 (134695760)\n+093922 CRC                   D2FF4595 (3539944853)\n+093926 Compressed Size       00001BE9 (7145)\n+09392A Uncompressed Size     00001BE9 (7145)\n+\n+09392E LOCAL HEADER #173     04034B50 (67324752)\n+093932 Extract Zip Spec      14 (20) '2.0'\n+093933 Extract OS            00 (0) 'MS-DOS'\n+093934 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+093936 Compression Method    0000 (0) 'Stored'\n+093938 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09393C CRC                   00000000 (0)\n+093940 Compressed Size       00000000 (0)\n+093944 Uncompressed Size     00000000 (0)\n+093948 Filename Length       003A (58)\n+09394A Extra Length          0009 (9)\n+09394C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9394C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+093986 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+093988   Length              0005 (5)\n+09398A   Flags               01 (1) 'Modification'\n+09398B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09398F PAYLOAD\n+\n+0945F0 DATA DESCRIPTOR       08074B50 (134695760)\n+0945F4 CRC                   D8BBACF0 (3636178160)\n+0945F8 Compressed Size       00000C61 (3169)\n+0945FC Uncompressed Size     00000C61 (3169)\n+\n+094600 LOCAL HEADER #174     04034B50 (67324752)\n+094604 Extract Zip Spec      14 (20) '2.0'\n+094605 Extract OS            00 (0) 'MS-DOS'\n+094606 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+094608 Compression Method    0000 (0) 'Stored'\n+09460A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09460E CRC                   00000000 (0)\n+094612 Compressed Size       00000000 (0)\n+094616 Uncompressed Size     00000000 (0)\n+09461A Filename Length       003B (59)\n+09461C Extra Length          0009 (9)\n+09461E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9461E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+094659 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09465B   Length              0005 (5)\n+09465D   Flags               01 (1) 'Modification'\n+09465E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+094662 PAYLOAD\n+\n+095255 DATA DESCRIPTOR       08074B50 (134695760)\n+095259 CRC                   DCFCECF5 (3707563253)\n+09525D Compressed Size       00000BF3 (3059)\n+095261 Uncompressed Size     00000BF3 (3059)\n+\n+095265 LOCAL HEADER #175     04034B50 (67324752)\n+095269 Extract Zip Spec      14 (20) '2.0'\n+09526A Extract OS            00 (0) 'MS-DOS'\n+09526B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09526D Compression Method    0000 (0) 'Stored'\n+09526F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+095273 CRC                   00000000 (0)\n+095277 Compressed Size       00000000 (0)\n+09527B Uncompressed Size     00000000 (0)\n+09527F Filename Length       0032 (50)\n+095281 Extra Length          0009 (9)\n+095283 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95283: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0952B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0952B7   Length              0005 (5)\n+0952B9   Flags               01 (1) 'Modification'\n+0952BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0952BE PAYLOAD\n+\n+095F23 DATA DESCRIPTOR       08074B50 (134695760)\n+095F27 CRC                   490F11E6 (1225724390)\n+095F2B Compressed Size       00000C65 (3173)\n+095F2F Uncompressed Size     00000C65 (3173)\n+\n+095F33 LOCAL HEADER #176     04034B50 (67324752)\n+095F37 Extract Zip Spec      14 (20) '2.0'\n+095F38 Extract OS            00 (0) 'MS-DOS'\n+095F39 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+095F3B Compression Method    0000 (0) 'Stored'\n+095F3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+095F41 CRC                   00000000 (0)\n+095F45 Compressed Size       00000000 (0)\n+095F49 Uncompressed Size     00000000 (0)\n+095F4D Filename Length       0032 (50)\n+095F4F Extra Length          0009 (9)\n+095F51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95F51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+095F83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+095F85   Length              0005 (5)\n+095F87   Flags               01 (1) 'Modification'\n+095F88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+095F8C PAYLOAD\n+\n+096ACB DATA DESCRIPTOR       08074B50 (134695760)\n+096ACF CRC                   3A9B5BED (983260141)\n+096AD3 Compressed Size       00000B3F (2879)\n+096AD7 Uncompressed Size     00000B3F (2879)\n+\n+096ADB LOCAL HEADER #177     04034B50 (67324752)\n+096ADF Extract Zip Spec      14 (20) '2.0'\n+096AE0 Extract OS            00 (0) 'MS-DOS'\n+096AE1 General Purpose Flag  0000 (0)\n+096AE3 Compression Method    0000 (0) 'Stored'\n+096AE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+096AE9 CRC                   00000000 (0)\n+096AED Compressed Size       00000000 (0)\n+096AF1 Uncompressed Size     00000000 (0)\n+096AF5 Filename Length       001D (29)\n+096AF7 Extra Length          0009 (9)\n+096AF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96AF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+096B16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+096B18   Length              0005 (5)\n+096B1A   Flags               01 (1) 'Modification'\n+096B1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+096B1F LOCAL HEADER #178     04034B50 (67324752)\n+096B23 Extract Zip Spec      14 (20) '2.0'\n+096B24 Extract OS            00 (0) 'MS-DOS'\n+096B25 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+096B27 Compression Method    0000 (0) 'Stored'\n+096B29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+096B2D CRC                   00000000 (0)\n+096B31 Compressed Size       00000000 (0)\n+096B35 Uncompressed Size     00000000 (0)\n+096B39 Filename Length       0036 (54)\n+096B3B Extra Length          0009 (9)\n+096B3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96B3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+096B73 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+096B75   Length              0005 (5)\n+096B77   Flags               01 (1) 'Modification'\n+096B78   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+096B7C PAYLOAD\n+\n+09B261 DATA DESCRIPTOR       08074B50 (134695760)\n+09B265 CRC                   30256F45 (807759685)\n+09B269 Compressed Size       000046E5 (18149)\n+09B26D Uncompressed Size     000046E5 (18149)\n+\n+09B271 LOCAL HEADER #179     04034B50 (67324752)\n+09B275 Extract Zip Spec      14 (20) '2.0'\n+09B276 Extract OS            00 (0) 'MS-DOS'\n+09B277 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09B279 Compression Method    0000 (0) 'Stored'\n+09B27B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09B27F CRC                   00000000 (0)\n+09B283 Compressed Size       00000000 (0)\n+09B287 Uncompressed Size     00000000 (0)\n+09B28B Filename Length       002C (44)\n+09B28D Extra Length          0009 (9)\n+09B28F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9B28F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09B2BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09B2BD   Length              0005 (5)\n+09B2BF   Flags               01 (1) 'Modification'\n+09B2C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09B2C4 PAYLOAD\n+\n+09E649 DATA DESCRIPTOR       08074B50 (134695760)\n+09E64D CRC                   FA032BB6 (4194511798)\n+09E651 Compressed Size       00003385 (13189)\n+09E655 Uncompressed Size     00003385 (13189)\n+\n+09E659 LOCAL HEADER #180     04034B50 (67324752)\n+09E65D Extract Zip Spec      14 (20) '2.0'\n+09E65E Extract OS            00 (0) 'MS-DOS'\n+09E65F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09E661 Compression Method    0000 (0) 'Stored'\n+09E663 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09E667 CRC                   00000000 (0)\n+09E66B Compressed Size       00000000 (0)\n+09E66F Uncompressed Size     00000000 (0)\n+09E673 Filename Length       0026 (38)\n+09E675 Extra Length          0009 (9)\n+09E677 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9E677: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09E69D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09E69F   Length              0005 (5)\n+09E6A1   Flags               01 (1) 'Modification'\n+09E6A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09E6A6 PAYLOAD\n+\n+0A514A DATA DESCRIPTOR       08074B50 (134695760)\n+0A514E CRC                   39C07894 (968915092)\n+0A5152 Compressed Size       00006AA4 (27300)\n+0A5156 Uncompressed Size     00006AA4 (27300)\n+\n+0A515A LOCAL HEADER #181     04034B50 (67324752)\n+0A515E Extract Zip Spec      14 (20) '2.0'\n+0A515F Extract OS            00 (0) 'MS-DOS'\n+0A5160 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A5162 Compression Method    0000 (0) 'Stored'\n+0A5164 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A5168 CRC                   00000000 (0)\n+0A516C Compressed Size       00000000 (0)\n+0A5170 Uncompressed Size     00000000 (0)\n+0A5174 Filename Length       002B (43)\n+0A5176 Extra Length          0009 (9)\n+0A5178 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA5178: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A51A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A51A5   Length              0005 (5)\n+0A51A7   Flags               01 (1) 'Modification'\n+0A51A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A51AC PAYLOAD\n+\n+0A64DC DATA DESCRIPTOR       08074B50 (134695760)\n+0A64E0 CRC                   2313A478 (588489848)\n+0A64E4 Compressed Size       00001330 (4912)\n+0A64E8 Uncompressed Size     00001330 (4912)\n+\n+0A64EC LOCAL HEADER #182     04034B50 (67324752)\n+0A64F0 Extract Zip Spec      14 (20) '2.0'\n+0A64F1 Extract OS            00 (0) 'MS-DOS'\n+0A64F2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A64F4 Compression Method    0000 (0) 'Stored'\n+0A64F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A64FA CRC                   00000000 (0)\n+0A64FE Compressed Size       00000000 (0)\n+0A6502 Uncompressed Size     00000000 (0)\n+0A6506 Filename Length       002F (47)\n+0A6508 Extra Length          0009 (9)\n+0A650A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA650A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A6539 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A653B   Length              0005 (5)\n+0A653D   Flags               01 (1) 'Modification'\n+0A653E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A6542 PAYLOAD\n+\n+0A6AF7 DATA DESCRIPTOR       08074B50 (134695760)\n+0A6AFB CRC                   10BC97FD (280795133)\n+0A6AFF Compressed Size       000005B5 (1461)\n+0A6B03 Uncompressed Size     000005B5 (1461)\n+\n+0A6B07 LOCAL HEADER #183     04034B50 (67324752)\n+0A6B0B Extract Zip Spec      14 (20) '2.0'\n+0A6B0C Extract OS            00 (0) 'MS-DOS'\n+0A6B0D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A6B0F Compression Method    0000 (0) 'Stored'\n+0A6B11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A6B15 CRC                   00000000 (0)\n+0A6B19 Compressed Size       00000000 (0)\n+0A6B1D Uncompressed Size     00000000 (0)\n+0A6B21 Filename Length       002A (42)\n+0A6B23 Extra Length          0009 (9)\n+0A6B25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA6B25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A6B4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A6B51   Length              0005 (5)\n+0A6B53   Flags               01 (1) 'Modification'\n+0A6B54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A6B58 PAYLOAD\n+\n+0A7006 DATA DESCRIPTOR       08074B50 (134695760)\n+0A700A CRC                   982A34CC (2552902860)\n+0A700E Compressed Size       000004AE (1198)\n+0A7012 Uncompressed Size     000004AE (1198)\n+\n+0A7016 LOCAL HEADER #184     04034B50 (67324752)\n+0A701A Extract Zip Spec      14 (20) '2.0'\n+0A701B Extract OS            00 (0) 'MS-DOS'\n+0A701C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A701E Compression Method    0000 (0) 'Stored'\n+0A7020 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A7024 CRC                   00000000 (0)\n+0A7028 Compressed Size       00000000 (0)\n+0A702C Uncompressed Size     00000000 (0)\n+0A7030 Filename Length       002C (44)\n+0A7032 Extra Length          0009 (9)\n+0A7034 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA7034: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A7060 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A7062   Length              0005 (5)\n+0A7064   Flags               01 (1) 'Modification'\n+0A7065   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A7069 PAYLOAD\n+\n+0A8664 DATA DESCRIPTOR       08074B50 (134695760)\n+0A8668 CRC                   7653CF57 (1985204055)\n+0A866C Compressed Size       000015FB (5627)\n+0A8670 Uncompressed Size     000015FB (5627)\n+\n+0A8674 LOCAL HEADER #185     04034B50 (67324752)\n+0A8678 Extract Zip Spec      14 (20) '2.0'\n+0A8679 Extract OS            00 (0) 'MS-DOS'\n+0A867A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A867C Compression Method    0000 (0) 'Stored'\n+0A867E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A8682 CRC                   00000000 (0)\n+0A8686 Compressed Size       00000000 (0)\n+0A868A Uncompressed Size     00000000 (0)\n+0A868E Filename Length       002C (44)\n+0A8690 Extra Length          0009 (9)\n+0A8692 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA8692: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A86BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A86C0   Length              0005 (5)\n+0A86C2   Flags               01 (1) 'Modification'\n+0A86C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A86C7 PAYLOAD\n+\n+0A8F6D DATA DESCRIPTOR       08074B50 (134695760)\n+0A8F71 CRC                   4D87180A (1300699146)\n+0A8F75 Compressed Size       000008A6 (2214)\n+0A8F79 Uncompressed Size     000008A6 (2214)\n+\n+0A8F7D LOCAL HEADER #186     04034B50 (67324752)\n+0A8F81 Extract Zip Spec      14 (20) '2.0'\n+0A8F82 Extract OS            00 (0) 'MS-DOS'\n+0A8F83 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A8F85 Compression Method    0000 (0) 'Stored'\n+0A8F87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A8F8B CRC                   00000000 (0)\n+0A8F8F Compressed Size       00000000 (0)\n+0A8F93 Uncompressed Size     00000000 (0)\n+0A8F97 Filename Length       002B (43)\n+0A8F99 Extra Length          0009 (9)\n+0A8F9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA8F9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A8FC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A8FC8   Length              0005 (5)\n+0A8FCA   Flags               01 (1) 'Modification'\n+0A8FCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A8FCF PAYLOAD\n+\n+0A9896 DATA DESCRIPTOR       08074B50 (134695760)\n+0A989A CRC                   8F2D4992 (2402109842)\n+0A989E Compressed Size       000008C7 (2247)\n+0A98A2 Uncompressed Size     000008C7 (2247)\n+\n+0A98A6 LOCAL HEADER #187     04034B50 (67324752)\n+0A98AA Extract Zip Spec      14 (20) '2.0'\n+0A98AB Extract OS            00 (0) 'MS-DOS'\n+0A98AC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A98AE Compression Method    0000 (0) 'Stored'\n+0A98B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A98B4 CRC                   00000000 (0)\n+0A98B8 Compressed Size       00000000 (0)\n+0A98BC Uncompressed Size     00000000 (0)\n+0A98C0 Filename Length       002D (45)\n+0A98C2 Extra Length          0009 (9)\n+0A98C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA98C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A98F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A98F3   Length              0005 (5)\n+0A98F5   Flags               01 (1) 'Modification'\n+0A98F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A98FA PAYLOAD\n+\n+0AA3E6 DATA DESCRIPTOR       08074B50 (134695760)\n+0AA3EA CRC                   33828390 (864191376)\n+0AA3EE Compressed Size       00000AEC (2796)\n+0AA3F2 Uncompressed Size     00000AEC (2796)\n+\n+0AA3F6 LOCAL HEADER #188     04034B50 (67324752)\n+0AA3FA Extract Zip Spec      14 (20) '2.0'\n+0AA3FB Extract OS            00 (0) 'MS-DOS'\n+0AA3FC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0AA3FE Compression Method    0000 (0) 'Stored'\n+0AA400 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AA404 CRC                   00000000 (0)\n+0AA408 Compressed Size       00000000 (0)\n+0AA40C Uncompressed Size     00000000 (0)\n+0AA410 Filename Length       002C (44)\n+0AA412 Extra Length          0009 (9)\n+0AA414 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAA414: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AA440 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AA442   Length              0005 (5)\n+0AA444   Flags               01 (1) 'Modification'\n+0AA445   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0AA449 PAYLOAD\n+\n+0AC428 DATA DESCRIPTOR       08074B50 (134695760)\n+0AC42C CRC                   ECCF2EAF (3973000879)\n+0AC430 Compressed Size       00001FDF (8159)\n+0AC434 Uncompressed Size     00001FDF (8159)\n+\n+0AC438 LOCAL HEADER #189     04034B50 (67324752)\n+0AC43C Extract Zip Spec      14 (20) '2.0'\n+0AC43D Extract OS            00 (0) 'MS-DOS'\n+0AC43E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0AC440 Compression Method    0000 (0) 'Stored'\n+0AC442 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AC446 CRC                   00000000 (0)\n+0AC44A Compressed Size       00000000 (0)\n+0AC44E Uncompressed Size     00000000 (0)\n+0AC452 Filename Length       0030 (48)\n+0AC454 Extra Length          0009 (9)\n+0AC456 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAC456: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AC486 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AC488   Length              0005 (5)\n+0AC48A   Flags               01 (1) 'Modification'\n+0AC48B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0AC48F PAYLOAD\n+\n+0AC918 DATA DESCRIPTOR       08074B50 (134695760)\n+0AC91C CRC                   4EF6CDD0 (1324797392)\n+0AC920 Compressed Size       00000489 (1161)\n+0AC924 Uncompressed Size     00000489 (1161)\n+\n+0AC928 LOCAL HEADER #190     04034B50 (67324752)\n+0AC92C Extract Zip Spec      14 (20) '2.0'\n+0AC92D Extract OS            00 (0) 'MS-DOS'\n+0AC92E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0AC930 Compression Method    0000 (0) 'Stored'\n+0AC932 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AC936 CRC                   00000000 (0)\n+0AC93A Compressed Size       00000000 (0)\n+0AC93E Uncompressed Size     00000000 (0)\n+0AC942 Filename Length       0027 (39)\n+0AC944 Extra Length          0009 (9)\n+0AC946 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAC946: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AC96D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AC96F   Length              0005 (5)\n+0AC971   Flags               01 (1) 'Modification'\n+0AC972   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0AC976 PAYLOAD\n+\n+0B3F7D DATA DESCRIPTOR       08074B50 (134695760)\n+0B3F81 CRC                   8192FABF (2173893311)\n+0B3F85 Compressed Size       00007607 (30215)\n+0B3F89 Uncompressed Size     00007607 (30215)\n+\n+0B3F8D LOCAL HEADER #191     04034B50 (67324752)\n+0B3F91 Extract Zip Spec      14 (20) '2.0'\n+0B3F92 Extract OS            00 (0) 'MS-DOS'\n+0B3F93 General Purpose Flag  0000 (0)\n+0B3F95 Compression Method    0000 (0) 'Stored'\n+0B3F97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B3F9B CRC                   00000000 (0)\n+0B3F9F Compressed Size       00000000 (0)\n+0B3FA3 Uncompressed Size     00000000 (0)\n+0B3FA7 Filename Length       001D (29)\n+0B3FA9 Extra Length          0009 (9)\n+0B3FAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB3FAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B3FC8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B3FCA   Length              0005 (5)\n+0B3FCC   Flags               01 (1) 'Modification'\n+0B3FCD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B3FD1 LOCAL HEADER #192     04034B50 (67324752)\n+0B3FD5 Extract Zip Spec      14 (20) '2.0'\n+0B3FD6 Extract OS            00 (0) 'MS-DOS'\n+0B3FD7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B3FD9 Compression Method    0000 (0) 'Stored'\n+0B3FDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B3FDF CRC                   00000000 (0)\n+0B3FE3 Compressed Size       00000000 (0)\n+0B3FE7 Uncompressed Size     00000000 (0)\n+0B3FEB Filename Length       002D (45)\n+0B3FED Extra Length          0009 (9)\n+0B3FEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB3FEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B401C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B401E   Length              0005 (5)\n+0B4020   Flags               01 (1) 'Modification'\n+0B4021   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B4025 PAYLOAD\n+\n+0B4973 DATA DESCRIPTOR       08074B50 (134695760)\n+0B4977 CRC                   36088937 (906529079)\n+0B497B Compressed Size       0000094E (2382)\n+0B497F Uncompressed Size     0000094E (2382)\n+\n+0B4983 LOCAL HEADER #193     04034B50 (67324752)\n+0B4987 Extract Zip Spec      14 (20) '2.0'\n+0B4988 Extract OS            00 (0) 'MS-DOS'\n+0B4989 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B498B Compression Method    0000 (0) 'Stored'\n+0B498D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B4991 CRC                   00000000 (0)\n+0B4995 Compressed Size       00000000 (0)\n+0B4999 Uncompressed Size     00000000 (0)\n+0B499D Filename Length       0036 (54)\n+0B499F Extra Length          0009 (9)\n+0B49A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB49A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B49D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B49D9   Length              0005 (5)\n+0B49DB   Flags               01 (1) 'Modification'\n+0B49DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B49E0 PAYLOAD\n+\n+0B4E8B DATA DESCRIPTOR       08074B50 (134695760)\n+0B4E8F CRC                   C67E8FBE (3330183102)\n+0B4E93 Compressed Size       000004AB (1195)\n+0B4E97 Uncompressed Size     000004AB (1195)\n+\n+0B4E9B LOCAL HEADER #194     04034B50 (67324752)\n+0B4E9F Extract Zip Spec      14 (20) '2.0'\n+0B4EA0 Extract OS            00 (0) 'MS-DOS'\n+0B4EA1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B4EA3 Compression Method    0000 (0) 'Stored'\n+0B4EA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B4EA9 CRC                   00000000 (0)\n+0B4EAD Compressed Size       00000000 (0)\n+0B4EB1 Uncompressed Size     00000000 (0)\n+0B4EB5 Filename Length       0037 (55)\n+0B4EB7 Extra Length          0009 (9)\n+0B4EB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB4EB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B4EF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B4EF2   Length              0005 (5)\n+0B4EF4   Flags               01 (1) 'Modification'\n+0B4EF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B4EF9 PAYLOAD\n+\n+0B5860 DATA DESCRIPTOR       08074B50 (134695760)\n+0B5864 CRC                   8F418EA5 (2403438245)\n+0B5868 Compressed Size       00000967 (2407)\n+0B586C Uncompressed Size     00000967 (2407)\n+\n+0B5870 LOCAL HEADER #195     04034B50 (67324752)\n+0B5874 Extract Zip Spec      14 (20) '2.0'\n+0B5875 Extract OS            00 (0) 'MS-DOS'\n+0B5876 General Purpose Flag  0000 (0)\n+0B5878 Compression Method    0000 (0) 'Stored'\n+0B587A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B587E CRC                   00000000 (0)\n+0B5882 Compressed Size       00000000 (0)\n+0B5886 Uncompressed Size     00000000 (0)\n+0B588A Filename Length       001F (31)\n+0B588C Extra Length          0009 (9)\n+0B588E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB588E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B58AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B58AF   Length              0005 (5)\n+0B58B1   Flags               01 (1) 'Modification'\n+0B58B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B58B6 LOCAL HEADER #196     04034B50 (67324752)\n+0B58BA Extract Zip Spec      14 (20) '2.0'\n+0B58BB Extract OS            00 (0) 'MS-DOS'\n+0B58BC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B58BE Compression Method    0000 (0) 'Stored'\n+0B58C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B58C4 CRC                   00000000 (0)\n+0B58C8 Compressed Size       00000000 (0)\n+0B58CC Uncompressed Size     00000000 (0)\n+0B58D0 Filename Length       0029 (41)\n+0B58D2 Extra Length          0009 (9)\n+0B58D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB58D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B58FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B58FF   Length              0005 (5)\n+0B5901   Flags               01 (1) 'Modification'\n+0B5902   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B5906 PAYLOAD\n+\n+0B5DC4 DATA DESCRIPTOR       08074B50 (134695760)\n+0B5DC8 CRC                   9D821087 (2642546823)\n+0B5DCC Compressed Size       000004BE (1214)\n+0B5DD0 Uncompressed Size     000004BE (1214)\n+\n+0B5DD4 LOCAL HEADER #197     04034B50 (67324752)\n+0B5DD8 Extract Zip Spec      14 (20) '2.0'\n+0B5DD9 Extract OS            00 (0) 'MS-DOS'\n+0B5DDA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B5DDC Compression Method    0000 (0) 'Stored'\n+0B5DDE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B5DE2 CRC                   00000000 (0)\n+0B5DE6 Compressed Size       00000000 (0)\n+0B5DEA Uncompressed Size     00000000 (0)\n+0B5DEE Filename Length       002A (42)\n+0B5DF0 Extra Length          0009 (9)\n+0B5DF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB5DF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B5E1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B5E1E   Length              0005 (5)\n+0B5E20   Flags               01 (1) 'Modification'\n+0B5E21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B5E25 PAYLOAD\n+\n+0B6DA7 DATA DESCRIPTOR       08074B50 (134695760)\n+0B6DAB CRC                   0D8DFECE (227409614)\n+0B6DAF Compressed Size       00000F82 (3970)\n+0B6DB3 Uncompressed Size     00000F82 (3970)\n+\n+0B6DB7 LOCAL HEADER #198     04034B50 (67324752)\n+0B6DBB Extract Zip Spec      14 (20) '2.0'\n+0B6DBC Extract OS            00 (0) 'MS-DOS'\n+0B6DBD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B6DBF Compression Method    0000 (0) 'Stored'\n+0B6DC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B6DC5 CRC                   00000000 (0)\n+0B6DC9 Compressed Size       00000000 (0)\n+0B6DCD Uncompressed Size     00000000 (0)\n+0B6DD1 Filename Length       0031 (49)\n+0B6DD3 Extra Length          0009 (9)\n+0B6DD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB6DD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B6E06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B6E08   Length              0005 (5)\n+0B6E0A   Flags               01 (1) 'Modification'\n+0B6E0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B6E0F PAYLOAD\n+\n+0B7554 DATA DESCRIPTOR       08074B50 (134695760)\n+0B7558 CRC                   A6EF1A57 (2800687703)\n+0B755C Compressed Size       00000745 (1861)\n+0B7560 Uncompressed Size     00000745 (1861)\n+\n+0B7564 LOCAL HEADER #199     04034B50 (67324752)\n+0B7568 Extract Zip Spec      14 (20) '2.0'\n+0B7569 Extract OS            00 (0) 'MS-DOS'\n+0B756A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B756C Compression Method    0000 (0) 'Stored'\n+0B756E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B7572 CRC                   00000000 (0)\n+0B7576 Compressed Size       00000000 (0)\n+0B757A Uncompressed Size     00000000 (0)\n+0B757E Filename Length       0031 (49)\n+0B7580 Extra Length          0009 (9)\n+0B7582 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB7582: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B75B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B75B5   Length              0005 (5)\n+0B75B7   Flags               01 (1) 'Modification'\n+0B75B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B75BC PAYLOAD\n+\n+0B8A41 DATA DESCRIPTOR       08074B50 (134695760)\n+0B8A45 CRC                   626EDC3E (1651432510)\n+0B8A49 Compressed Size       00001485 (5253)\n+0B8A4D Uncompressed Size     00001485 (5253)\n+\n+0B8A51 LOCAL HEADER #200     04034B50 (67324752)\n+0B8A55 Extract Zip Spec      14 (20) '2.0'\n+0B8A56 Extract OS            00 (0) 'MS-DOS'\n+0B8A57 General Purpose Flag  0000 (0)\n+0B8A59 Compression Method    0000 (0) 'Stored'\n+0B8A5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B8A5F CRC                   00000000 (0)\n+0B8A63 Compressed Size       00000000 (0)\n+0B8A67 Uncompressed Size     00000000 (0)\n+0B8A6B Filename Length       0023 (35)\n+0B8A6D Extra Length          0009 (9)\n+0B8A6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB8A6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B8A92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B8A94   Length              0005 (5)\n+0B8A96   Flags               01 (1) 'Modification'\n+0B8A97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B8A9B LOCAL HEADER #201     04034B50 (67324752)\n+0B8A9F Extract Zip Spec      14 (20) '2.0'\n+0B8AA0 Extract OS            00 (0) 'MS-DOS'\n+0B8AA1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B8AA3 Compression Method    0000 (0) 'Stored'\n+0B8AA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B8AA9 CRC                   00000000 (0)\n+0B8AAD Compressed Size       00000000 (0)\n+0B8AB1 Uncompressed Size     00000000 (0)\n+0B8AB5 Filename Length       0031 (49)\n+0B8AB7 Extra Length          0009 (9)\n+0B8AB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB8AB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B8AEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B8AEC   Length              0005 (5)\n+0B8AEE   Flags               01 (1) 'Modification'\n+0B8AEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B8AF3 PAYLOAD\n+\n+0B9801 DATA DESCRIPTOR       08074B50 (134695760)\n+0B9805 CRC                   65EBC1EB (1709949419)\n+0B9809 Compressed Size       00000D0E (3342)\n+0B980D Uncompressed Size     00000D0E (3342)\n+\n+0B9811 LOCAL HEADER #202     04034B50 (67324752)\n+0B9815 Extract Zip Spec      14 (20) '2.0'\n+0B9816 Extract OS            00 (0) 'MS-DOS'\n+0B9817 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B9819 Compression Method    0000 (0) 'Stored'\n+0B981B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B981F CRC                   00000000 (0)\n+0B9823 Compressed Size       00000000 (0)\n+0B9827 Uncompressed Size     00000000 (0)\n+0B982B Filename Length       0038 (56)\n+0B982D Extra Length          0009 (9)\n+0B982F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB982F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B9867 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B9869   Length              0005 (5)\n+0B986B   Flags               01 (1) 'Modification'\n+0B986C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B9870 PAYLOAD\n+\n+0B9F68 DATA DESCRIPTOR       08074B50 (134695760)\n+0B9F6C CRC                   006A5B46 (6970182)\n+0B9F70 Compressed Size       000006F8 (1784)\n+0B9F74 Uncompressed Size     000006F8 (1784)\n+\n+0B9F78 LOCAL HEADER #203     04034B50 (67324752)\n+0B9F7C Extract Zip Spec      14 (20) '2.0'\n+0B9F7D Extract OS            00 (0) 'MS-DOS'\n+0B9F7E General Purpose Flag  0000 (0)\n+0B9F80 Compression Method    0000 (0) 'Stored'\n+0B9F82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B9F86 CRC                   00000000 (0)\n+0B9F8A Compressed Size       00000000 (0)\n+0B9F8E Uncompressed Size     00000000 (0)\n+0B9F92 Filename Length       0023 (35)\n+0B9F94 Extra Length          0009 (9)\n+0B9F96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB9F96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B9FB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B9FBB   Length              0005 (5)\n+0B9FBD   Flags               01 (1) 'Modification'\n+0B9FBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B9FC2 LOCAL HEADER #204     04034B50 (67324752)\n+0B9FC6 Extract Zip Spec      14 (20) '2.0'\n+0B9FC7 Extract OS            00 (0) 'MS-DOS'\n+0B9FC8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B9FCA Compression Method    0000 (0) 'Stored'\n+0B9FCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B9FD0 CRC                   00000000 (0)\n+0B9FD4 Compressed Size       00000000 (0)\n+0B9FD8 Uncompressed Size     00000000 (0)\n+0B9FDC Filename Length       0031 (49)\n+0B9FDE Extra Length          0009 (9)\n+0B9FE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB9FE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BA011 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BA013   Length              0005 (5)\n+0BA015   Flags               01 (1) 'Modification'\n+0BA016   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BA01A PAYLOAD\n+\n+0BAD35 DATA DESCRIPTOR       08074B50 (134695760)\n+0BAD39 CRC                   8FD172CF (2412868303)\n+0BAD3D Compressed Size       00000D1B (3355)\n+0BAD41 Uncompressed Size     00000D1B (3355)\n+\n+0BAD45 LOCAL HEADER #205     04034B50 (67324752)\n+0BAD49 Extract Zip Spec      14 (20) '2.0'\n+0BAD4A Extract OS            00 (0) 'MS-DOS'\n+0BAD4B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BAD4D Compression Method    0000 (0) 'Stored'\n+0BAD4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BAD53 CRC                   00000000 (0)\n+0BAD57 Compressed Size       00000000 (0)\n+0BAD5B Uncompressed Size     00000000 (0)\n+0BAD5F Filename Length       0038 (56)\n+0BAD61 Extra Length          0009 (9)\n+0BAD63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBAD63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BAD9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BAD9D   Length              0005 (5)\n+0BAD9F   Flags               01 (1) 'Modification'\n+0BADA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BADA4 PAYLOAD\n+\n+0BC0A0 DATA DESCRIPTOR       08074B50 (134695760)\n+0BC0A4 CRC                   7ADBDBE0 (2061229024)\n+0BC0A8 Compressed Size       000012FC (4860)\n+0BC0AC Uncompressed Size     000012FC (4860)\n+\n+0BC0B0 LOCAL HEADER #206     04034B50 (67324752)\n+0BC0B4 Extract Zip Spec      14 (20) '2.0'\n+0BC0B5 Extract OS            00 (0) 'MS-DOS'\n+0BC0B6 General Purpose Flag  0000 (0)\n+0BC0B8 Compression Method    0000 (0) 'Stored'\n+0BC0BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BC0BE CRC                   00000000 (0)\n+0BC0C2 Compressed Size       00000000 (0)\n+0BC0C6 Uncompressed Size     00000000 (0)\n+0BC0CA Filename Length       0025 (37)\n+0BC0CC Extra Length          0009 (9)\n+0BC0CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBC0CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BC0F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BC0F5   Length              0005 (5)\n+0BC0F7   Flags               01 (1) 'Modification'\n+0BC0F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BC0FC LOCAL HEADER #207     04034B50 (67324752)\n+0BC100 Extract Zip Spec      14 (20) '2.0'\n+0BC101 Extract OS            00 (0) 'MS-DOS'\n+0BC102 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BC104 Compression Method    0000 (0) 'Stored'\n+0BC106 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BC10A CRC                   00000000 (0)\n+0BC10E Compressed Size       00000000 (0)\n+0BC112 Uncompressed Size     00000000 (0)\n+0BC116 Filename Length       0035 (53)\n+0BC118 Extra Length          0009 (9)\n+0BC11A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBC11A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BC14F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BC151   Length              0005 (5)\n+0BC153   Flags               01 (1) 'Modification'\n+0BC154   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BC158 PAYLOAD\n+\n+0BCFB9 DATA DESCRIPTOR       08074B50 (134695760)\n+0BCFBD CRC                   0237005F (37159007)\n+0BCFC1 Compressed Size       00000E61 (3681)\n+0BCFC5 Uncompressed Size     00000E61 (3681)\n+\n+0BCFC9 LOCAL HEADER #208     04034B50 (67324752)\n+0BCFCD Extract Zip Spec      14 (20) '2.0'\n+0BCFCE Extract OS            00 (0) 'MS-DOS'\n+0BCFCF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BCFD1 Compression Method    0000 (0) 'Stored'\n+0BCFD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BCFD7 CRC                   00000000 (0)\n+0BCFDB Compressed Size       00000000 (0)\n+0BCFDF Uncompressed Size     00000000 (0)\n+0BCFE3 Filename Length       003C (60)\n+0BCFE5 Extra Length          0009 (9)\n+0BCFE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBCFE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BD023 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BD025   Length              0005 (5)\n+0BD027   Flags               01 (1) 'Modification'\n+0BD028   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BD02C PAYLOAD\n+\n+0BE0F8 DATA DESCRIPTOR       08074B50 (134695760)\n+0BE0FC CRC                   CE737695 (3463673493)\n+0BE100 Compressed Size       000010CC (4300)\n+0BE104 Uncompressed Size     000010CC (4300)\n+\n+0BE108 LOCAL HEADER #209     04034B50 (67324752)\n+0BE10C Extract Zip Spec      14 (20) '2.0'\n+0BE10D Extract OS            00 (0) 'MS-DOS'\n+0BE10E General Purpose Flag  0000 (0)\n+0BE110 Compression Method    0000 (0) 'Stored'\n+0BE112 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BE116 CRC                   00000000 (0)\n+0BE11A Compressed Size       00000000 (0)\n+0BE11E Uncompressed Size     00000000 (0)\n+0BE122 Filename Length       0026 (38)\n+0BE124 Extra Length          0009 (9)\n+0BE126 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBE126: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BE14C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BE14E   Length              0005 (5)\n+0BE150   Flags               01 (1) 'Modification'\n+0BE151   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BE155 LOCAL HEADER #210     04034B50 (67324752)\n+0BE159 Extract Zip Spec      14 (20) '2.0'\n+0BE15A Extract OS            00 (0) 'MS-DOS'\n+0BE15B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BE15D Compression Method    0000 (0) 'Stored'\n+0BE15F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BE163 CRC                   00000000 (0)\n+0BE167 Compressed Size       00000000 (0)\n+0BE16B Uncompressed Size     00000000 (0)\n+0BE16F Filename Length       0037 (55)\n+0BE171 Extra Length          0009 (9)\n+0BE173 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBE173: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BE1AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BE1AC   Length              0005 (5)\n+0BE1AE   Flags               01 (1) 'Modification'\n+0BE1AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BE1B3 PAYLOAD\n+\n+0BEE4B DATA DESCRIPTOR       08074B50 (134695760)\n+0BEE4F CRC                   719AAFB0 (1905962928)\n+0BEE53 Compressed Size       00000C98 (3224)\n+0BEE57 Uncompressed Size     00000C98 (3224)\n+\n+0BEE5B LOCAL HEADER #211     04034B50 (67324752)\n+0BEE5F Extract Zip Spec      14 (20) '2.0'\n+0BEE60 Extract OS            00 (0) 'MS-DOS'\n+0BEE61 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BEE63 Compression Method    0000 (0) 'Stored'\n+0BEE65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BEE69 CRC                   00000000 (0)\n+0BEE6D Compressed Size       00000000 (0)\n+0BEE71 Uncompressed Size     00000000 (0)\n+0BEE75 Filename Length       003E (62)\n+0BEE77 Extra Length          0009 (9)\n+0BEE79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBEE79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BEEB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BEEB9   Length              0005 (5)\n+0BEEBB   Flags               01 (1) 'Modification'\n+0BEEBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BEEC0 PAYLOAD\n+\n+0BFBAD DATA DESCRIPTOR       08074B50 (134695760)\n+0BFBB1 CRC                   B7D93D08 (3084467464)\n+0BFBB5 Compressed Size       00000CED (3309)\n+0BFBB9 Uncompressed Size     00000CED (3309)\n+\n+0BFBBD LOCAL HEADER #212     04034B50 (67324752)\n+0BFBC1 Extract Zip Spec      14 (20) '2.0'\n+0BFBC2 Extract OS            00 (0) 'MS-DOS'\n+0BFBC3 General Purpose Flag  0000 (0)\n+0BFBC5 Compression Method    0000 (0) 'Stored'\n+0BFBC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BFBCB CRC                   00000000 (0)\n+0BFBCF Compressed Size       00000000 (0)\n+0BFBD3 Uncompressed Size     00000000 (0)\n+0BFBD7 Filename Length       0025 (37)\n+0BFBD9 Extra Length          0009 (9)\n+0BFBDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBFBDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BFC00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BFC02   Length              0005 (5)\n+0BFC04   Flags               01 (1) 'Modification'\n+0BFC05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BFC09 LOCAL HEADER #213     04034B50 (67324752)\n+0BFC0D Extract Zip Spec      14 (20) '2.0'\n+0BFC0E Extract OS            00 (0) 'MS-DOS'\n+0BFC0F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BFC11 Compression Method    0000 (0) 'Stored'\n+0BFC13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BFC17 CRC                   00000000 (0)\n+0BFC1B Compressed Size       00000000 (0)\n+0BFC1F Uncompressed Size     00000000 (0)\n+0BFC23 Filename Length       0035 (53)\n+0BFC25 Extra Length          0009 (9)\n+0BFC27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBFC27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BFC5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BFC5E   Length              0005 (5)\n+0BFC60   Flags               01 (1) 'Modification'\n+0BFC61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BFC65 PAYLOAD\n+\n+0C14DB DATA DESCRIPTOR       08074B50 (134695760)\n+0C14DF CRC                   FD6565BB (4251280827)\n+0C14E3 Compressed Size       00001876 (6262)\n+0C14E7 Uncompressed Size     00001876 (6262)\n+\n+0C14EB LOCAL HEADER #214     04034B50 (67324752)\n+0C14EF Extract Zip Spec      14 (20) '2.0'\n+0C14F0 Extract OS            00 (0) 'MS-DOS'\n+0C14F1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C14F3 Compression Method    0000 (0) 'Stored'\n+0C14F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C14F9 CRC                   00000000 (0)\n+0C14FD Compressed Size       00000000 (0)\n+0C1501 Uncompressed Size     00000000 (0)\n+0C1505 Filename Length       003C (60)\n+0C1507 Extra Length          0009 (9)\n+0C1509 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC1509: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C1545 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C1547   Length              0005 (5)\n+0C1549   Flags               01 (1) 'Modification'\n+0C154A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C154E PAYLOAD\n+\n+0C1C3D DATA DESCRIPTOR       08074B50 (134695760)\n+0C1C41 CRC                   2D853131 (763703601)\n+0C1C45 Compressed Size       000006EF (1775)\n+0C1C49 Uncompressed Size     000006EF (1775)\n+\n+0C1C4D LOCAL HEADER #215     04034B50 (67324752)\n+0C1C51 Extract Zip Spec      14 (20) '2.0'\n+0C1C52 Extract OS            00 (0) 'MS-DOS'\n+0C1C53 General Purpose Flag  0000 (0)\n+0C1C55 Compression Method    0000 (0) 'Stored'\n+0C1C57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C1C5B CRC                   00000000 (0)\n+0C1C5F Compressed Size       00000000 (0)\n+0C1C63 Uncompressed Size     00000000 (0)\n+0C1C67 Filename Length       0027 (39)\n+0C1C69 Extra Length          0009 (9)\n+0C1C6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC1C6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C1C92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C1C94   Length              0005 (5)\n+0C1C96   Flags               01 (1) 'Modification'\n+0C1C97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C1C9B LOCAL HEADER #216     04034B50 (67324752)\n+0C1C9F Extract Zip Spec      14 (20) '2.0'\n+0C1CA0 Extract OS            00 (0) 'MS-DOS'\n+0C1CA1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C1CA3 Compression Method    0000 (0) 'Stored'\n+0C1CA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C1CA9 CRC                   00000000 (0)\n+0C1CAD Compressed Size       00000000 (0)\n+0C1CB1 Uncompressed Size     00000000 (0)\n+0C1CB5 Filename Length       003A (58)\n+0C1CB7 Extra Length          0009 (9)\n+0C1CB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC1CB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C1CF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C1CF5   Length              0005 (5)\n+0C1CF7   Flags               01 (1) 'Modification'\n+0C1CF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C1CFC PAYLOAD\n+\n+0C30B1 DATA DESCRIPTOR       08074B50 (134695760)\n+0C30B5 CRC                   01B8CE5D (28888669)\n+0C30B9 Compressed Size       000013B5 (5045)\n+0C30BD Uncompressed Size     000013B5 (5045)\n+\n+0C30C1 LOCAL HEADER #217     04034B50 (67324752)\n+0C30C5 Extract Zip Spec      14 (20) '2.0'\n+0C30C6 Extract OS            00 (0) 'MS-DOS'\n+0C30C7 General Purpose Flag  0000 (0)\n+0C30C9 Compression Method    0000 (0) 'Stored'\n+0C30CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C30CF CRC                   00000000 (0)\n+0C30D3 Compressed Size       00000000 (0)\n+0C30D7 Uncompressed Size     00000000 (0)\n+0C30DB Filename Length       001F (31)\n+0C30DD Extra Length          0009 (9)\n+0C30DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC30DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C30FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C3100   Length              0005 (5)\n+0C3102   Flags               01 (1) 'Modification'\n+0C3103   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C3107 LOCAL HEADER #218     04034B50 (67324752)\n+0C310B Extract Zip Spec      14 (20) '2.0'\n+0C310C Extract OS            00 (0) 'MS-DOS'\n+0C310D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C310F Compression Method    0000 (0) 'Stored'\n+0C3111 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C3115 CRC                   00000000 (0)\n+0C3119 Compressed Size       00000000 (0)\n+0C311D Uncompressed Size     00000000 (0)\n+0C3121 Filename Length       002A (42)\n+0C3123 Extra Length          0009 (9)\n+0C3125 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC3125: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C314F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C3151   Length              0005 (5)\n+0C3153   Flags               01 (1) 'Modification'\n+0C3154   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C3158 PAYLOAD\n+\n+0C38B5 DATA DESCRIPTOR       08074B50 (134695760)\n+0C38B9 CRC                   EE49CD50 (3997814096)\n+0C38BD Compressed Size       0000075D (1885)\n+0C38C1 Uncompressed Size     0000075D (1885)\n+\n+0C38C5 LOCAL HEADER #219     04034B50 (67324752)\n+0C38C9 Extract Zip Spec      14 (20) '2.0'\n+0C38CA Extract OS            00 (0) 'MS-DOS'\n+0C38CB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C38CD Compression Method    0000 (0) 'Stored'\n+0C38CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C38D3 CRC                   00000000 (0)\n+0C38D7 Compressed Size       00000000 (0)\n+0C38DB Uncompressed Size     00000000 (0)\n+0C38DF Filename Length       0031 (49)\n+0C38E1 Extra Length          0009 (9)\n+0C38E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC38E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C3914 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C3916   Length              0005 (5)\n+0C3918   Flags               01 (1) 'Modification'\n+0C3919   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C391D PAYLOAD\n+\n+0C3D4F DATA DESCRIPTOR       08074B50 (134695760)\n+0C3D53 CRC                   4C723E93 (1282555539)\n+0C3D57 Compressed Size       00000432 (1074)\n+0C3D5B Uncompressed Size     00000432 (1074)\n+\n+0C3D5F LOCAL HEADER #220     04034B50 (67324752)\n+0C3D63 Extract Zip Spec      14 (20) '2.0'\n+0C3D64 Extract OS            00 (0) 'MS-DOS'\n+0C3D65 General Purpose Flag  0000 (0)\n+0C3D67 Compression Method    0000 (0) 'Stored'\n+0C3D69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C3D6D CRC                   00000000 (0)\n+0C3D71 Compressed Size       00000000 (0)\n+0C3D75 Uncompressed Size     00000000 (0)\n+0C3D79 Filename Length       0027 (39)\n+0C3D7B Extra Length          0009 (9)\n+0C3D7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC3D7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C3DA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C3DA6   Length              0005 (5)\n+0C3DA8   Flags               01 (1) 'Modification'\n+0C3DA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C3DAD LOCAL HEADER #221     04034B50 (67324752)\n+0C3DB1 Extract Zip Spec      14 (20) '2.0'\n+0C3DB2 Extract OS            00 (0) 'MS-DOS'\n+0C3DB3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C3DB5 Compression Method    0000 (0) 'Stored'\n+0C3DB7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C3DBB CRC                   00000000 (0)\n+0C3DBF Compressed Size       00000000 (0)\n+0C3DC3 Uncompressed Size     00000000 (0)\n+0C3DC7 Filename Length       003D (61)\n+0C3DC9 Extra Length          0009 (9)\n+0C3DCB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC3DCB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C3E08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C3E0A   Length              0005 (5)\n+0C3E0C   Flags               01 (1) 'Modification'\n+0C3E0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C3E11 PAYLOAD\n+\n+0C46B8 DATA DESCRIPTOR       08074B50 (134695760)\n+0C46BC CRC                   CD3068DB (3442501851)\n+0C46C0 Compressed Size       000008A7 (2215)\n+0C46C4 Uncompressed Size     000008A7 (2215)\n+\n+0C46C8 LOCAL HEADER #222     04034B50 (67324752)\n+0C46CC Extract Zip Spec      14 (20) '2.0'\n+0C46CD Extract OS            00 (0) 'MS-DOS'\n+0C46CE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C46D0 Compression Method    0000 (0) 'Stored'\n+0C46D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C46D6 CRC                   00000000 (0)\n+0C46DA Compressed Size       00000000 (0)\n+0C46DE Uncompressed Size     00000000 (0)\n+0C46E2 Filename Length       003F (63)\n+0C46E4 Extra Length          0009 (9)\n+0C46E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC46E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C4725 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C4727   Length              0005 (5)\n+0C4729   Flags               01 (1) 'Modification'\n+0C472A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C472E PAYLOAD\n+\n+0C4E2F DATA DESCRIPTOR       08074B50 (134695760)\n+0C4E33 CRC                   E601D6EE (3858880238)\n+0C4E37 Compressed Size       00000701 (1793)\n+0C4E3B Uncompressed Size     00000701 (1793)\n+\n+0C4E3F LOCAL HEADER #223     04034B50 (67324752)\n+0C4E43 Extract Zip Spec      14 (20) '2.0'\n+0C4E44 Extract OS            00 (0) 'MS-DOS'\n+0C4E45 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C4E47 Compression Method    0000 (0) 'Stored'\n+0C4E49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C4E4D CRC                   00000000 (0)\n+0C4E51 Compressed Size       00000000 (0)\n+0C4E55 Uncompressed Size     00000000 (0)\n+0C4E59 Filename Length       0037 (55)\n+0C4E5B Extra Length          0009 (9)\n+0C4E5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC4E5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C4E94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C4E96   Length              0005 (5)\n+0C4E98   Flags               01 (1) 'Modification'\n+0C4E99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C4E9D PAYLOAD\n+\n+0C5671 DATA DESCRIPTOR       08074B50 (134695760)\n+0C5675 CRC                   577B6C79 (1467706489)\n+0C5679 Compressed Size       000007D4 (2004)\n+0C567D Uncompressed Size     000007D4 (2004)\n+\n+0C5681 LOCAL HEADER #224     04034B50 (67324752)\n+0C5685 Extract Zip Spec      14 (20) '2.0'\n+0C5686 Extract OS            00 (0) 'MS-DOS'\n+0C5687 General Purpose Flag  0000 (0)\n+0C5689 Compression Method    0000 (0) 'Stored'\n+0C568B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C568F CRC                   00000000 (0)\n+0C5693 Compressed Size       00000000 (0)\n+0C5697 Uncompressed Size     00000000 (0)\n+0C569B Filename Length       001E (30)\n+0C569D Extra Length          0009 (9)\n+0C569F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC569F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C56BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C56BF   Length              0005 (5)\n+0C56C1   Flags               01 (1) 'Modification'\n+0C56C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C56C6 LOCAL HEADER #225     04034B50 (67324752)\n+0C56CA Extract Zip Spec      14 (20) '2.0'\n+0C56CB Extract OS            00 (0) 'MS-DOS'\n+0C56CC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C56CE Compression Method    0000 (0) 'Stored'\n+0C56D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C56D4 CRC                   00000000 (0)\n+0C56D8 Compressed Size       00000000 (0)\n+0C56DC Uncompressed Size     00000000 (0)\n+0C56E0 Filename Length       002C (44)\n+0C56E2 Extra Length          0009 (9)\n+0C56E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC56E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C5710 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C5712   Length              0005 (5)\n+0C5714   Flags               01 (1) 'Modification'\n+0C5715   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C5719 PAYLOAD\n+\n+0C5C19 DATA DESCRIPTOR       08074B50 (134695760)\n+0C5C1D CRC                   BF5F9C1E (3210714142)\n+0C5C21 Compressed Size       00000500 (1280)\n+0C5C25 Uncompressed Size     00000500 (1280)\n+\n+0C5C29 LOCAL HEADER #226     04034B50 (67324752)\n+0C5C2D Extract Zip Spec      14 (20) '2.0'\n+0C5C2E Extract OS            00 (0) 'MS-DOS'\n+0C5C2F General Purpose Flag  0000 (0)\n+0C5C31 Compression Method    0000 (0) 'Stored'\n+0C5C33 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C5C37 CRC                   00000000 (0)\n+0C5C3B Compressed Size       00000000 (0)\n+0C5C3F Uncompressed Size     00000000 (0)\n+0C5C43 Filename Length       0026 (38)\n+0C5C45 Extra Length          0009 (9)\n+0C5C47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC5C47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C5C6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C5C6F   Length              0005 (5)\n+0C5C71   Flags               01 (1) 'Modification'\n+0C5C72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C5C76 LOCAL HEADER #227     04034B50 (67324752)\n+0C5C7A Extract Zip Spec      14 (20) '2.0'\n+0C5C7B Extract OS            00 (0) 'MS-DOS'\n+0C5C7C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C5C7E Compression Method    0000 (0) 'Stored'\n+0C5C80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C5C84 CRC                   00000000 (0)\n+0C5C88 Compressed Size       00000000 (0)\n+0C5C8C Uncompressed Size     00000000 (0)\n+0C5C90 Filename Length       003A (58)\n+0C5C92 Extra Length          0009 (9)\n+0C5C94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC5C94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C5CCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C5CD0   Length              0005 (5)\n+0C5CD2   Flags               01 (1) 'Modification'\n+0C5CD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C5CD7 PAYLOAD\n+\n+0C65DF DATA DESCRIPTOR       08074B50 (134695760)\n+0C65E3 CRC                   6A2AB119 (1781182745)\n+0C65E7 Compressed Size       00000908 (2312)\n+0C65EB Uncompressed Size     00000908 (2312)\n+\n+0C65EF LOCAL HEADER #228     04034B50 (67324752)\n+0C65F3 Extract Zip Spec      14 (20) '2.0'\n+0C65F4 Extract OS            00 (0) 'MS-DOS'\n+0C65F5 General Purpose Flag  0000 (0)\n+0C65F7 Compression Method    0000 (0) 'Stored'\n+0C65F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C65FD CRC                   00000000 (0)\n+0C6601 Compressed Size       00000000 (0)\n+0C6605 Uncompressed Size     00000000 (0)\n+0C6609 Filename Length       0024 (36)\n+0C660B Extra Length          0009 (9)\n+0C660D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC660D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C6631 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C6633   Length              0005 (5)\n+0C6635   Flags               01 (1) 'Modification'\n+0C6636   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C663A LOCAL HEADER #229     04034B50 (67324752)\n+0C663E Extract Zip Spec      14 (20) '2.0'\n+0C663F Extract OS            00 (0) 'MS-DOS'\n+0C6640 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C6642 Compression Method    0000 (0) 'Stored'\n+0C6644 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C6648 CRC                   00000000 (0)\n+0C664C Compressed Size       00000000 (0)\n+0C6650 Uncompressed Size     00000000 (0)\n+0C6654 Filename Length       0039 (57)\n+0C6656 Extra Length          0009 (9)\n+0C6658 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC6658: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C6691 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C6693   Length              0005 (5)\n+0C6695   Flags               01 (1) 'Modification'\n+0C6696   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C669A PAYLOAD\n+\n+0C6E08 DATA DESCRIPTOR       08074B50 (134695760)\n+0C6E0C CRC                   19AC3747 (430716743)\n+0C6E10 Compressed Size       0000076E (1902)\n+0C6E14 Uncompressed Size     0000076E (1902)\n+\n+0C6E18 LOCAL HEADER #230     04034B50 (67324752)\n+0C6E1C Extract Zip Spec      14 (20) '2.0'\n+0C6E1D Extract OS            00 (0) 'MS-DOS'\n+0C6E1E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C6E20 Compression Method    0000 (0) 'Stored'\n+0C6E22 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C6E26 CRC                   00000000 (0)\n+0C6E2A Compressed Size       00000000 (0)\n+0C6E2E Uncompressed Size     00000000 (0)\n+0C6E32 Filename Length       0037 (55)\n+0C6E34 Extra Length          0009 (9)\n+0C6E36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC6E36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C6E6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C6E6F   Length              0005 (5)\n+0C6E71   Flags               01 (1) 'Modification'\n+0C6E72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C6E76 PAYLOAD\n+\n+0C7803 DATA DESCRIPTOR       08074B50 (134695760)\n+0C7807 CRC                   DFEE0135 (3756917045)\n+0C780B Compressed Size       0000098D (2445)\n+0C780F Uncompressed Size     0000098D (2445)\n+\n+0C7813 LOCAL HEADER #231     04034B50 (67324752)\n+0C7817 Extract Zip Spec      14 (20) '2.0'\n+0C7818 Extract OS            00 (0) 'MS-DOS'\n+0C7819 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C781B Compression Method    0000 (0) 'Stored'\n+0C781D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C7821 CRC                   00000000 (0)\n+0C7825 Compressed Size       00000000 (0)\n+0C7829 Uncompressed Size     00000000 (0)\n+0C782D Filename Length       003C (60)\n+0C782F Extra Length          0009 (9)\n+0C7831 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC7831: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C786D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C786F   Length              0005 (5)\n+0C7871   Flags               01 (1) 'Modification'\n+0C7872   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C7876 PAYLOAD\n+\n+0C9434 DATA DESCRIPTOR       08074B50 (134695760)\n+0C9438 CRC                   E4E72DDD (3840355805)\n+0C943C Compressed Size       00001BBE (7102)\n+0C9440 Uncompressed Size     00001BBE (7102)\n+\n+0C9444 LOCAL HEADER #232     04034B50 (67324752)\n+0C9448 Extract Zip Spec      14 (20) '2.0'\n+0C9449 Extract OS            00 (0) 'MS-DOS'\n+0C944A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C944C Compression Method    0000 (0) 'Stored'\n+0C944E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C9452 CRC                   00000000 (0)\n+0C9456 Compressed Size       00000000 (0)\n+0C945A Uncompressed Size     00000000 (0)\n+0C945E Filename Length       003F (63)\n+0C9460 Extra Length          0009 (9)\n+0C9462 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC9462: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C94A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C94A3   Length              0005 (5)\n+0C94A5   Flags               01 (1) 'Modification'\n+0C94A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C94AA PAYLOAD\n+\n+0CAAA9 DATA DESCRIPTOR       08074B50 (134695760)\n+0CAAAD CRC                   5E80C56B (1585497451)\n+0CAAB1 Compressed Size       000015FF (5631)\n+0CAAB5 Uncompressed Size     000015FF (5631)\n+\n+0CAAB9 LOCAL HEADER #233     04034B50 (67324752)\n+0CAABD Extract Zip Spec      14 (20) '2.0'\n+0CAABE Extract OS            00 (0) 'MS-DOS'\n+0CAABF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CAAC1 Compression Method    0000 (0) 'Stored'\n+0CAAC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CAAC7 CRC                   00000000 (0)\n+0CAACB Compressed Size       00000000 (0)\n+0CAACF Uncompressed Size     00000000 (0)\n+0CAAD3 Filename Length       0043 (67)\n+0CAAD5 Extra Length          0009 (9)\n+0CAAD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCAAD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CAB1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CAB1C   Length              0005 (5)\n+0CAB1E   Flags               01 (1) 'Modification'\n+0CAB1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CAB23 PAYLOAD\n+\n+0CB1B0 DATA DESCRIPTOR       08074B50 (134695760)\n+0CB1B4 CRC                   D1666DFC (3513150972)\n+0CB1B8 Compressed Size       0000068D (1677)\n+0CB1BC Uncompressed Size     0000068D (1677)\n+\n+0CB1C0 LOCAL HEADER #234     04034B50 (67324752)\n+0CB1C4 Extract Zip Spec      14 (20) '2.0'\n+0CB1C5 Extract OS            00 (0) 'MS-DOS'\n+0CB1C6 General Purpose Flag  0000 (0)\n+0CB1C8 Compression Method    0000 (0) 'Stored'\n+0CB1CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CB1CE CRC                   00000000 (0)\n+0CB1D2 Compressed Size       00000000 (0)\n+0CB1D6 Uncompressed Size     00000000 (0)\n+0CB1DA Filename Length       0023 (35)\n+0CB1DC Extra Length          0009 (9)\n+0CB1DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCB1DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CB201 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CB203   Length              0005 (5)\n+0CB205   Flags               01 (1) 'Modification'\n+0CB206   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CB20A LOCAL HEADER #235     04034B50 (67324752)\n+0CB20E Extract Zip Spec      14 (20) '2.0'\n+0CB20F Extract OS            00 (0) 'MS-DOS'\n+0CB210 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CB212 Compression Method    0000 (0) 'Stored'\n+0CB214 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CB218 CRC                   00000000 (0)\n+0CB21C Compressed Size       00000000 (0)\n+0CB220 Uncompressed Size     00000000 (0)\n+0CB224 Filename Length       0032 (50)\n+0CB226 Extra Length          0009 (9)\n+0CB228 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCB228: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CB25A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CB25C   Length              0005 (5)\n+0CB25E   Flags               01 (1) 'Modification'\n+0CB25F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CB263 PAYLOAD\n+\n+0CB7D8 DATA DESCRIPTOR       08074B50 (134695760)\n+0CB7DC CRC                   25E239BD (635582909)\n+0CB7E0 Compressed Size       00000575 (1397)\n+0CB7E4 Uncompressed Size     00000575 (1397)\n+\n+0CB7E8 LOCAL HEADER #236     04034B50 (67324752)\n+0CB7EC Extract Zip Spec      14 (20) '2.0'\n+0CB7ED Extract OS            00 (0) 'MS-DOS'\n+0CB7EE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CB7F0 Compression Method    0000 (0) 'Stored'\n+0CB7F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CB7F6 CRC                   00000000 (0)\n+0CB7FA Compressed Size       00000000 (0)\n+0CB7FE Uncompressed Size     00000000 (0)\n+0CB802 Filename Length       003A (58)\n+0CB804 Extra Length          0009 (9)\n+0CB806 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCB806: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CB840 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CB842   Length              0005 (5)\n+0CB844   Flags               01 (1) 'Modification'\n+0CB845   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CB849 PAYLOAD\n+\n+0CD3A8 DATA DESCRIPTOR       08074B50 (134695760)\n+0CD3AC CRC                   6E8E196C (1854806380)\n+0CD3B0 Compressed Size       00001B5F (7007)\n+0CD3B4 Uncompressed Size     00001B5F (7007)\n+\n+0CD3B8 LOCAL HEADER #237     04034B50 (67324752)\n+0CD3BC Extract Zip Spec      14 (20) '2.0'\n+0CD3BD Extract OS            00 (0) 'MS-DOS'\n+0CD3BE General Purpose Flag  0000 (0)\n+0CD3C0 Compression Method    0000 (0) 'Stored'\n+0CD3C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CD3C6 CRC                   00000000 (0)\n+0CD3CA Compressed Size       00000000 (0)\n+0CD3CE Uncompressed Size     00000000 (0)\n+0CD3D2 Filename Length       002E (46)\n+0CD3D4 Extra Length          0009 (9)\n+0CD3D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCD3D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CD404 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CD406   Length              0005 (5)\n+0CD408   Flags               01 (1) 'Modification'\n+0CD409   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CD40D LOCAL HEADER #238     04034B50 (67324752)\n+0CD411 Extract Zip Spec      14 (20) '2.0'\n+0CD412 Extract OS            00 (0) 'MS-DOS'\n+0CD413 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CD415 Compression Method    0000 (0) 'Stored'\n+0CD417 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CD41B CRC                   00000000 (0)\n+0CD41F Compressed Size       00000000 (0)\n+0CD423 Uncompressed Size     00000000 (0)\n+0CD427 Filename Length       004D (77)\n+0CD429 Extra Length          0009 (9)\n+0CD42B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCD42B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CD478 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CD47A   Length              0005 (5)\n+0CD47C   Flags               01 (1) 'Modification'\n+0CD47D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CD481 PAYLOAD\n+\n+0CDDCE DATA DESCRIPTOR       08074B50 (134695760)\n+0CDDD2 CRC                   4F941D99 (1335106969)\n+0CDDD6 Compressed Size       0000094D (2381)\n+0CDDDA Uncompressed Size     0000094D (2381)\n+\n+0CDDDE LOCAL HEADER #239     04034B50 (67324752)\n+0CDDE2 Extract Zip Spec      14 (20) '2.0'\n+0CDDE3 Extract OS            00 (0) 'MS-DOS'\n+0CDDE4 General Purpose Flag  0000 (0)\n+0CDDE6 Compression Method    0000 (0) 'Stored'\n+0CDDE8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CDDEC CRC                   00000000 (0)\n+0CDDF0 Compressed Size       00000000 (0)\n+0CDDF4 Uncompressed Size     00000000 (0)\n+0CDDF8 Filename Length       0029 (41)\n+0CDDFA Extra Length          0009 (9)\n+0CDDFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCDDFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CDE25 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CDE27   Length              0005 (5)\n+0CDE29   Flags               01 (1) 'Modification'\n+0CDE2A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CDE2E LOCAL HEADER #240     04034B50 (67324752)\n+0CDE32 Extract Zip Spec      14 (20) '2.0'\n+0CDE33 Extract OS            00 (0) 'MS-DOS'\n+0CDE34 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CDE36 Compression Method    0000 (0) 'Stored'\n+0CDE38 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CDE3C CRC                   00000000 (0)\n+0CDE40 Compressed Size       00000000 (0)\n+0CDE44 Uncompressed Size     00000000 (0)\n+0CDE48 Filename Length       0046 (70)\n+0CDE4A Extra Length          0009 (9)\n+0CDE4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCDE4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CDE92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CDE94   Length              0005 (5)\n+0CDE96   Flags               01 (1) 'Modification'\n+0CDE97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CDE9B PAYLOAD\n+\n+0CE39C DATA DESCRIPTOR       08074B50 (134695760)\n+0CE3A0 CRC                   9F5D6B51 (2673699665)\n+0CE3A4 Compressed Size       00000501 (1281)\n+0CE3A8 Uncompressed Size     00000501 (1281)\n+\n+0CE3AC LOCAL HEADER #241     04034B50 (67324752)\n+0CE3B0 Extract Zip Spec      14 (20) '2.0'\n+0CE3B1 Extract OS            00 (0) 'MS-DOS'\n+0CE3B2 General Purpose Flag  0000 (0)\n+0CE3B4 Compression Method    0000 (0) 'Stored'\n+0CE3B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CE3BA CRC                   00000000 (0)\n+0CE3BE Compressed Size       00000000 (0)\n+0CE3C2 Uncompressed Size     00000000 (0)\n+0CE3C6 Filename Length       002B (43)\n+0CE3C8 Extra Length          0009 (9)\n+0CE3CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCE3CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CE3F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CE3F7   Length              0005 (5)\n+0CE3F9   Flags               01 (1) 'Modification'\n+0CE3FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CE3FE LOCAL HEADER #242     04034B50 (67324752)\n+0CE402 Extract Zip Spec      14 (20) '2.0'\n+0CE403 Extract OS            00 (0) 'MS-DOS'\n+0CE404 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CE406 Compression Method    0000 (0) 'Stored'\n+0CE408 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CE40C CRC                   00000000 (0)\n+0CE410 Compressed Size       00000000 (0)\n+0CE414 Uncompressed Size     00000000 (0)\n+0CE418 Filename Length       0049 (73)\n+0CE41A Extra Length          0009 (9)\n+0CE41C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCE41C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CE465 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CE467   Length              0005 (5)\n+0CE469   Flags               01 (1) 'Modification'\n+0CE46A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CE46E PAYLOAD\n+\n+0D034D DATA DESCRIPTOR       08074B50 (134695760)\n+0D0351 CRC                   C15BEF93 (3244027795)\n+0D0355 Compressed Size       00001EDF (7903)\n+0D0359 Uncompressed Size     00001EDF (7903)\n+\n+0D035D LOCAL HEADER #243     04034B50 (67324752)\n+0D0361 Extract Zip Spec      14 (20) '2.0'\n+0D0362 Extract OS            00 (0) 'MS-DOS'\n+0D0363 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D0365 Compression Method    0000 (0) 'Stored'\n+0D0367 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D036B CRC                   00000000 (0)\n+0D036F Compressed Size       00000000 (0)\n+0D0373 Uncompressed Size     00000000 (0)\n+0D0377 Filename Length       0042 (66)\n+0D0379 Extra Length          0009 (9)\n+0D037B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD037B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D03BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D03BF   Length              0005 (5)\n+0D03C1   Flags               01 (1) 'Modification'\n+0D03C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D03C6 PAYLOAD\n+\n+0D0D26 DATA DESCRIPTOR       08074B50 (134695760)\n+0D0D2A CRC                   EF70124F (4017099343)\n+0D0D2E Compressed Size       00000960 (2400)\n+0D0D32 Uncompressed Size     00000960 (2400)\n+\n+0D0D36 LOCAL HEADER #244     04034B50 (67324752)\n+0D0D3A Extract Zip Spec      14 (20) '2.0'\n+0D0D3B Extract OS            00 (0) 'MS-DOS'\n+0D0D3C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D0D3E Compression Method    0000 (0) 'Stored'\n+0D0D40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D0D44 CRC                   00000000 (0)\n+0D0D48 Compressed Size       00000000 (0)\n+0D0D4C Uncompressed Size     00000000 (0)\n+0D0D50 Filename Length       0034 (52)\n+0D0D52 Extra Length          0009 (9)\n+0D0D54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD0D54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D0D88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D0D8A   Length              0005 (5)\n+0D0D8C   Flags               01 (1) 'Modification'\n+0D0D8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D0D91 PAYLOAD\n+\n+0D15CD DATA DESCRIPTOR       08074B50 (134695760)\n+0D15D1 CRC                   B2FA49D8 (3002747352)\n+0D15D5 Compressed Size       0000083C (2108)\n+0D15D9 Uncompressed Size     0000083C (2108)\n+\n+0D15DD LOCAL HEADER #245     04034B50 (67324752)\n+0D15E1 Extract Zip Spec      14 (20) '2.0'\n+0D15E2 Extract OS            00 (0) 'MS-DOS'\n+0D15E3 General Purpose Flag  0000 (0)\n+0D15E5 Compression Method    0000 (0) 'Stored'\n+0D15E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D15EB CRC                   00000000 (0)\n+0D15EF Compressed Size       00000000 (0)\n+0D15F3 Uncompressed Size     00000000 (0)\n+0D15F7 Filename Length       002B (43)\n+0D15F9 Extra Length          0009 (9)\n+0D15FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD15FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D1626 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D1628   Length              0005 (5)\n+0D162A   Flags               01 (1) 'Modification'\n+0D162B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D162F LOCAL HEADER #246     04034B50 (67324752)\n+0D1633 Extract Zip Spec      14 (20) '2.0'\n+0D1634 Extract OS            00 (0) 'MS-DOS'\n+0D1635 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D1637 Compression Method    0000 (0) 'Stored'\n+0D1639 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D163D CRC                   00000000 (0)\n+0D1641 Compressed Size       00000000 (0)\n+0D1645 Uncompressed Size     00000000 (0)\n+0D1649 Filename Length       0045 (69)\n+0D164B Extra Length          0009 (9)\n+0D164D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD164D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D1692 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D1694   Length              0005 (5)\n+0D1696   Flags               01 (1) 'Modification'\n+0D1697   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D169B PAYLOAD\n+\n+0D2E02 DATA DESCRIPTOR       08074B50 (134695760)\n+0D2E06 CRC                   A9E4FF87 (2850357127)\n+0D2E0A Compressed Size       00001767 (5991)\n+0D2E0E Uncompressed Size     00001767 (5991)\n+\n+0D2E12 LOCAL HEADER #247     04034B50 (67324752)\n+0D2E16 Extract Zip Spec      14 (20) '2.0'\n+0D2E17 Extract OS            00 (0) 'MS-DOS'\n+0D2E18 General Purpose Flag  0000 (0)\n+0D2E1A Compression Method    0000 (0) 'Stored'\n+0D2E1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D2E20 CRC                   00000000 (0)\n+0D2E24 Compressed Size       00000000 (0)\n+0D2E28 Uncompressed Size     00000000 (0)\n+0D2E2C Filename Length       0032 (50)\n+0D2E2E Extra Length          0009 (9)\n+0D2E30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD2E30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D2E62 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D2E64   Length              0005 (5)\n+0D2E66   Flags               01 (1) 'Modification'\n+0D2E67   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D2E6B LOCAL HEADER #248     04034B50 (67324752)\n+0D2E6F Extract Zip Spec      14 (20) '2.0'\n+0D2E70 Extract OS            00 (0) 'MS-DOS'\n+0D2E71 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D2E73 Compression Method    0000 (0) 'Stored'\n+0D2E75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D2E79 CRC                   00000000 (0)\n+0D2E7D Compressed Size       00000000 (0)\n+0D2E81 Uncompressed Size     00000000 (0)\n+0D2E85 Filename Length       0047 (71)\n+0D2E87 Extra Length          0009 (9)\n+0D2E89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD2E89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D2ED0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D2ED2   Length              0005 (5)\n+0D2ED4   Flags               01 (1) 'Modification'\n+0D2ED5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D2ED9 PAYLOAD\n+\n+0D3B56 DATA DESCRIPTOR       08074B50 (134695760)\n+0D3B5A CRC                   7C2CDC15 (2083314709)\n+0D3B5E Compressed Size       00000C7D (3197)\n+0D3B62 Uncompressed Size     00000C7D (3197)\n+\n+0D3B66 LOCAL HEADER #249     04034B50 (67324752)\n+0D3B6A Extract Zip Spec      14 (20) '2.0'\n+0D3B6B Extract OS            00 (0) 'MS-DOS'\n+0D3B6C General Purpose Flag  0000 (0)\n+0D3B6E Compression Method    0000 (0) 'Stored'\n+0D3B70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D3B74 CRC                   00000000 (0)\n+0D3B78 Compressed Size       00000000 (0)\n+0D3B7C Uncompressed Size     00000000 (0)\n+0D3B80 Filename Length       0031 (49)\n+0D3B82 Extra Length          0009 (9)\n+0D3B84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD3B84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D3BB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D3BB7   Length              0005 (5)\n+0D3BB9   Flags               01 (1) 'Modification'\n+0D3BBA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D3BBE LOCAL HEADER #250     04034B50 (67324752)\n+0D3BC2 Extract Zip Spec      14 (20) '2.0'\n+0D3BC3 Extract OS            00 (0) 'MS-DOS'\n+0D3BC4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D3BC6 Compression Method    0000 (0) 'Stored'\n+0D3BC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D3BCC CRC                   00000000 (0)\n+0D3BD0 Compressed Size       00000000 (0)\n+0D3BD4 Uncompressed Size     00000000 (0)\n+0D3BD8 Filename Length       0045 (69)\n+0D3BDA Extra Length          0009 (9)\n+0D3BDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD3BDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D3C21 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D3C23   Length              0005 (5)\n+0D3C25   Flags               01 (1) 'Modification'\n+0D3C26   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D3C2A PAYLOAD\n+\n+0D482C DATA DESCRIPTOR       08074B50 (134695760)\n+0D4830 CRC                   C7D99F04 (3352928004)\n+0D4834 Compressed Size       00000C02 (3074)\n+0D4838 Uncompressed Size     00000C02 (3074)\n+\n+0D483C LOCAL HEADER #251     04034B50 (67324752)\n+0D4840 Extract Zip Spec      14 (20) '2.0'\n+0D4841 Extract OS            00 (0) 'MS-DOS'\n+0D4842 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D4844 Compression Method    0000 (0) 'Stored'\n+0D4846 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D484A CRC                   00000000 (0)\n+0D484E Compressed Size       00000000 (0)\n+0D4852 Uncompressed Size     00000000 (0)\n+0D4856 Filename Length       004D (77)\n+0D4858 Extra Length          0009 (9)\n+0D485A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD485A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D48A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D48A9   Length              0005 (5)\n+0D48AB   Flags               01 (1) 'Modification'\n+0D48AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D48B0 PAYLOAD\n+\n+0D556E DATA DESCRIPTOR       08074B50 (134695760)\n+0D5572 CRC                   B7E8049A (3085436058)\n+0D5576 Compressed Size       00000CBE (3262)\n+0D557A Uncompressed Size     00000CBE (3262)\n+\n+0D557E LOCAL HEADER #252     04034B50 (67324752)\n+0D5582 Extract Zip Spec      14 (20) '2.0'\n+0D5583 Extract OS            00 (0) 'MS-DOS'\n+0D5584 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D5586 Compression Method    0000 (0) 'Stored'\n+0D5588 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D558C CRC                   00000000 (0)\n+0D5590 Compressed Size       00000000 (0)\n+0D5594 Uncompressed Size     00000000 (0)\n+0D5598 Filename Length       003F (63)\n+0D559A Extra Length          0009 (9)\n+0D559C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD559C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D55DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D55DD   Length              0005 (5)\n+0D55DF   Flags               01 (1) 'Modification'\n+0D55E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D55E4 PAYLOAD\n+\n+0D616B DATA DESCRIPTOR       08074B50 (134695760)\n+0D616F CRC                   365FEBC7 (912255943)\n+0D6173 Compressed Size       00000B87 (2951)\n+0D6177 Uncompressed Size     00000B87 (2951)\n+\n+0D617B LOCAL HEADER #253     04034B50 (67324752)\n+0D617F Extract Zip Spec      14 (20) '2.0'\n+0D6180 Extract OS            00 (0) 'MS-DOS'\n+0D6181 General Purpose Flag  0000 (0)\n+0D6183 Compression Method    0000 (0) 'Stored'\n+0D6185 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D6189 CRC                   00000000 (0)\n+0D618D Compressed Size       00000000 (0)\n+0D6191 Uncompressed Size     00000000 (0)\n+0D6195 Filename Length       0031 (49)\n+0D6197 Extra Length          0009 (9)\n+0D6199 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD6199: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D61CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D61CC   Length              0005 (5)\n+0D61CE   Flags               01 (1) 'Modification'\n+0D61CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D61D3 LOCAL HEADER #254     04034B50 (67324752)\n+0D61D7 Extract Zip Spec      14 (20) '2.0'\n+0D61D8 Extract OS            00 (0) 'MS-DOS'\n+0D61D9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D61DB Compression Method    0000 (0) 'Stored'\n+0D61DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D61E1 CRC                   00000000 (0)\n+0D61E5 Compressed Size       00000000 (0)\n+0D61E9 Uncompressed Size     00000000 (0)\n+0D61ED Filename Length       0045 (69)\n+0D61EF Extra Length          0009 (9)\n+0D61F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD61F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D6236 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D6238   Length              0005 (5)\n+0D623A   Flags               01 (1) 'Modification'\n+0D623B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D623F PAYLOAD\n+\n+0D6CE2 DATA DESCRIPTOR       08074B50 (134695760)\n+0D6CE6 CRC                   3EDDC0EF (1054720239)\n+0D6CEA Compressed Size       00000AA3 (2723)\n+0D6CEE Uncompressed Size     00000AA3 (2723)\n+\n+0D6CF2 LOCAL HEADER #255     04034B50 (67324752)\n+0D6CF6 Extract Zip Spec      14 (20) '2.0'\n+0D6CF7 Extract OS            00 (0) 'MS-DOS'\n+0D6CF8 General Purpose Flag  0000 (0)\n+0D6CFA Compression Method    0000 (0) 'Stored'\n+0D6CFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D6D00 CRC                   00000000 (0)\n+0D6D04 Compressed Size       00000000 (0)\n+0D6D08 Uncompressed Size     00000000 (0)\n+0D6D0C Filename Length       0033 (51)\n+0D6D0E Extra Length          0009 (9)\n+0D6D10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD6D10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D6D43 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D6D45   Length              0005 (5)\n+0D6D47   Flags               01 (1) 'Modification'\n+0D6D48   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D6D4C LOCAL HEADER #256     04034B50 (67324752)\n+0D6D50 Extract Zip Spec      14 (20) '2.0'\n+0D6D51 Extract OS            00 (0) 'MS-DOS'\n+0D6D52 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D6D54 Compression Method    0000 (0) 'Stored'\n+0D6D56 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D6D5A CRC                   00000000 (0)\n+0D6D5E Compressed Size       00000000 (0)\n+0D6D62 Uncompressed Size     00000000 (0)\n+0D6D66 Filename Length       0049 (73)\n+0D6D68 Extra Length          0009 (9)\n+0D6D6A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD6D6A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D6DB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D6DB5   Length              0005 (5)\n+0D6DB7   Flags               01 (1) 'Modification'\n+0D6DB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D6DBC PAYLOAD\n+\n+0D796C DATA DESCRIPTOR       08074B50 (134695760)\n+0D7970 CRC                   9B40567E (2604684926)\n+0D7974 Compressed Size       00000BB0 (2992)\n+0D7978 Uncompressed Size     00000BB0 (2992)\n+\n+0D797C LOCAL HEADER #257     04034B50 (67324752)\n+0D7980 Extract Zip Spec      14 (20) '2.0'\n+0D7981 Extract OS            00 (0) 'MS-DOS'\n+0D7982 General Purpose Flag  0000 (0)\n+0D7984 Compression Method    0000 (0) 'Stored'\n+0D7986 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D798A CRC                   00000000 (0)\n+0D798E Compressed Size       00000000 (0)\n+0D7992 Uncompressed Size     00000000 (0)\n+0D7996 Filename Length       001E (30)\n+0D7998 Extra Length          0009 (9)\n+0D799A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD799A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D79B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D79BA   Length              0005 (5)\n+0D79BC   Flags               01 (1) 'Modification'\n+0D79BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D79C1 LOCAL HEADER #258     04034B50 (67324752)\n+0D79C5 Extract Zip Spec      14 (20) '2.0'\n+0D79C6 Extract OS            00 (0) 'MS-DOS'\n+0D79C7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D79C9 Compression Method    0000 (0) 'Stored'\n+0D79CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D79CF CRC                   00000000 (0)\n+0D79D3 Compressed Size       00000000 (0)\n+0D79D7 Uncompressed Size     00000000 (0)\n+0D79DB Filename Length       0033 (51)\n+0D79DD Extra Length          0009 (9)\n+0D79DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD79DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D7A12 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D7A14   Length              0005 (5)\n+0D7A16   Flags               01 (1) 'Modification'\n+0D7A17   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D7A1B PAYLOAD\n+\n+0DF702 DATA DESCRIPTOR       08074B50 (134695760)\n+0DF706 CRC                   6BA20F13 (1805782803)\n+0DF70A Compressed Size       00007CE7 (31975)\n+0DF70E Uncompressed Size     00007CE7 (31975)\n+\n+0DF712 LOCAL HEADER #259     04034B50 (67324752)\n+0DF716 Extract Zip Spec      14 (20) '2.0'\n+0DF717 Extract OS            00 (0) 'MS-DOS'\n+0DF718 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DF71A Compression Method    0000 (0) 'Stored'\n+0DF71C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DF720 CRC                   00000000 (0)\n+0DF724 Compressed Size       00000000 (0)\n+0DF728 Uncompressed Size     00000000 (0)\n+0DF72C Filename Length       002A (42)\n+0DF72E Extra Length          0009 (9)\n+0DF730 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDF730: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DF75A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DF75C   Length              0005 (5)\n+0DF75E   Flags               01 (1) 'Modification'\n+0DF75F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DF763 PAYLOAD\n+\n+0DFDFF DATA DESCRIPTOR       08074B50 (134695760)\n+0DFE03 CRC                   896B8386 (2305524614)\n+0DFE07 Compressed Size       0000069C (1692)\n+0DFE0B Uncompressed Size     0000069C (1692)\n+\n+0DFE0F LOCAL HEADER #260     04034B50 (67324752)\n+0DFE13 Extract Zip Spec      14 (20) '2.0'\n+0DFE14 Extract OS            00 (0) 'MS-DOS'\n+0DFE15 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DFE17 Compression Method    0000 (0) 'Stored'\n+0DFE19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DFE1D CRC                   00000000 (0)\n+0DFE21 Compressed Size       00000000 (0)\n+0DFE25 Uncompressed Size     00000000 (0)\n+0DFE29 Filename Length       0028 (40)\n+0DFE2B Extra Length          0009 (9)\n+0DFE2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDFE2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DFE55 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DFE57   Length              0005 (5)\n+0DFE59   Flags               01 (1) 'Modification'\n+0DFE5A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DFE5E PAYLOAD\n+\n+0E05C7 DATA DESCRIPTOR       08074B50 (134695760)\n+0E05CB CRC                   2D8D7FE9 (764248041)\n+0E05CF Compressed Size       00000769 (1897)\n+0E05D3 Uncompressed Size     00000769 (1897)\n+\n+0E05D7 LOCAL HEADER #261     04034B50 (67324752)\n+0E05DB Extract Zip Spec      14 (20) '2.0'\n+0E05DC Extract OS            00 (0) 'MS-DOS'\n+0E05DD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E05DF Compression Method    0000 (0) 'Stored'\n+0E05E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E05E5 CRC                   00000000 (0)\n+0E05E9 Compressed Size       00000000 (0)\n+0E05ED Uncompressed Size     00000000 (0)\n+0E05F1 Filename Length       002C (44)\n+0E05F3 Extra Length          0009 (9)\n+0E05F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE05F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E0621 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E0623   Length              0005 (5)\n+0E0625   Flags               01 (1) 'Modification'\n+0E0626   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E062A PAYLOAD\n+\n+0E0AC1 DATA DESCRIPTOR       08074B50 (134695760)\n+0E0AC5 CRC                   E9761FB8 (3916832696)\n+0E0AC9 Compressed Size       00000497 (1175)\n+0E0ACD Uncompressed Size     00000497 (1175)\n+\n+0E0AD1 LOCAL HEADER #262     04034B50 (67324752)\n+0E0AD5 Extract Zip Spec      14 (20) '2.0'\n+0E0AD6 Extract OS            00 (0) 'MS-DOS'\n+0E0AD7 General Purpose Flag  0000 (0)\n+0E0AD9 Compression Method    0000 (0) 'Stored'\n+0E0ADB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E0ADF CRC                   00000000 (0)\n+0E0AE3 Compressed Size       00000000 (0)\n+0E0AE7 Uncompressed Size     00000000 (0)\n+0E0AEB Filename Length       001E (30)\n+0E0AED Extra Length          0009 (9)\n+0E0AEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE0AEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E0B0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E0B0F   Length              0005 (5)\n+0E0B11   Flags               01 (1) 'Modification'\n+0E0B12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E0B16 LOCAL HEADER #263     04034B50 (67324752)\n+0E0B1A Extract Zip Spec      14 (20) '2.0'\n+0E0B1B Extract OS            00 (0) 'MS-DOS'\n+0E0B1C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E0B1E Compression Method    0000 (0) 'Stored'\n+0E0B20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E0B24 CRC                   00000000 (0)\n+0E0B28 Compressed Size       00000000 (0)\n+0E0B2C Uncompressed Size     00000000 (0)\n+0E0B30 Filename Length       0032 (50)\n+0E0B32 Extra Length          0009 (9)\n+0E0B34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE0B34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E0B66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E0B68   Length              0005 (5)\n+0E0B6A   Flags               01 (1) 'Modification'\n+0E0B6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E0B6F PAYLOAD\n+\n+0E6056 DATA DESCRIPTOR       08074B50 (134695760)\n+0E605A CRC                   7F03CBF8 (2130955256)\n+0E605E Compressed Size       000054E7 (21735)\n+0E6062 Uncompressed Size     000054E7 (21735)\n+\n+0E6066 LOCAL HEADER #264     04034B50 (67324752)\n+0E606A Extract Zip Spec      14 (20) '2.0'\n+0E606B Extract OS            00 (0) 'MS-DOS'\n+0E606C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E606E Compression Method    0000 (0) 'Stored'\n+0E6070 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E6074 CRC                   00000000 (0)\n+0E6078 Compressed Size       00000000 (0)\n+0E607C Uncompressed Size     00000000 (0)\n+0E6080 Filename Length       002D (45)\n+0E6082 Extra Length          0009 (9)\n+0E6084 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE6084: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E60B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E60B3   Length              0005 (5)\n+0E60B5   Flags               01 (1) 'Modification'\n+0E60B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E60BA PAYLOAD\n+\n+0E6A3F DATA DESCRIPTOR       08074B50 (134695760)\n+0E6A43 CRC                   255BC4C2 (626771138)\n+0E6A47 Compressed Size       00000985 (2437)\n+0E6A4B Uncompressed Size     00000985 (2437)\n+\n+0E6A4F LOCAL HEADER #265     04034B50 (67324752)\n+0E6A53 Extract Zip Spec      14 (20) '2.0'\n+0E6A54 Extract OS            00 (0) 'MS-DOS'\n+0E6A55 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E6A57 Compression Method    0000 (0) 'Stored'\n+0E6A59 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E6A5D CRC                   00000000 (0)\n+0E6A61 Compressed Size       00000000 (0)\n+0E6A65 Uncompressed Size     00000000 (0)\n+0E6A69 Filename Length       0029 (41)\n+0E6A6B Extra Length          0009 (9)\n+0E6A6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE6A6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E6A96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E6A98   Length              0005 (5)\n+0E6A9A   Flags               01 (1) 'Modification'\n+0E6A9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E6A9F PAYLOAD\n+\n+0E703D DATA DESCRIPTOR       08074B50 (134695760)\n+0E7041 CRC                   40170699 (1075250841)\n+0E7045 Compressed Size       0000059E (1438)\n+0E7049 Uncompressed Size     0000059E (1438)\n+\n+0E704D LOCAL HEADER #266     04034B50 (67324752)\n+0E7051 Extract Zip Spec      14 (20) '2.0'\n+0E7052 Extract OS            00 (0) 'MS-DOS'\n+0E7053 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E7055 Compression Method    0000 (0) 'Stored'\n+0E7057 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E705B CRC                   00000000 (0)\n+0E705F Compressed Size       00000000 (0)\n+0E7063 Uncompressed Size     00000000 (0)\n+0E7067 Filename Length       0038 (56)\n+0E7069 Extra Length          0009 (9)\n+0E706B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE706B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E70A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E70A5   Length              0005 (5)\n+0E70A7   Flags               01 (1) 'Modification'\n+0E70A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E70AC PAYLOAD\n+\n+0E82F5 DATA DESCRIPTOR       08074B50 (134695760)\n+0E82F9 CRC                   A604EAF8 (2785340152)\n+0E82FD Compressed Size       00001249 (4681)\n+0E8301 Uncompressed Size     00001249 (4681)\n+\n+0E8305 LOCAL HEADER #267     04034B50 (67324752)\n+0E8309 Extract Zip Spec      14 (20) '2.0'\n+0E830A Extract OS            00 (0) 'MS-DOS'\n+0E830B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E830D Compression Method    0000 (0) 'Stored'\n+0E830F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E8313 CRC                   00000000 (0)\n+0E8317 Compressed Size       00000000 (0)\n+0E831B Uncompressed Size     00000000 (0)\n+0E831F Filename Length       002C (44)\n+0E8321 Extra Length          0009 (9)\n+0E8323 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE8323: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E834F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E8351   Length              0005 (5)\n+0E8353   Flags               01 (1) 'Modification'\n+0E8354   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E8358 PAYLOAD\n+\n+0E96D2 DATA DESCRIPTOR       08074B50 (134695760)\n+0E96D6 CRC                   D7EB77B9 (3622533049)\n+0E96DA Compressed Size       0000137A (4986)\n+0E96DE Uncompressed Size     0000137A (4986)\n+\n+0E96E2 LOCAL HEADER #268     04034B50 (67324752)\n+0E96E6 Extract Zip Spec      14 (20) '2.0'\n+0E96E7 Extract OS            00 (0) 'MS-DOS'\n+0E96E8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E96EA Compression Method    0000 (0) 'Stored'\n+0E96EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E96F0 CRC                   00000000 (0)\n+0E96F4 Compressed Size       00000000 (0)\n+0E96F8 Uncompressed Size     00000000 (0)\n+0E96FC Filename Length       0039 (57)\n+0E96FE Extra Length          0009 (9)\n+0E9700 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE9700: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E9739 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E973B   Length              0005 (5)\n+0E973D   Flags               01 (1) 'Modification'\n+0E973E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E9742 PAYLOAD\n+\n+0E9C77 DATA DESCRIPTOR       08074B50 (134695760)\n+0E9C7B CRC                   7518C2B8 (1964556984)\n+0E9C7F Compressed Size       00000535 (1333)\n+0E9C83 Uncompressed Size     00000535 (1333)\n+\n+0E9C87 LOCAL HEADER #269     04034B50 (67324752)\n+0E9C8B Extract Zip Spec      14 (20) '2.0'\n+0E9C8C Extract OS            00 (0) 'MS-DOS'\n+0E9C8D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E9C8F Compression Method    0000 (0) 'Stored'\n+0E9C91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E9C95 CRC                   00000000 (0)\n+0E9C99 Compressed Size       00000000 (0)\n+0E9C9D Uncompressed Size     00000000 (0)\n+0E9CA1 Filename Length       002E (46)\n+0E9CA3 Extra Length          0009 (9)\n+0E9CA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE9CA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E9CD3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E9CD5   Length              0005 (5)\n+0E9CD7   Flags               01 (1) 'Modification'\n+0E9CD8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E9CDC PAYLOAD\n+\n+0EB32D DATA DESCRIPTOR       08074B50 (134695760)\n+0EB331 CRC                   FC613C2C (4234230828)\n+0EB335 Compressed Size       00001651 (5713)\n+0EB339 Uncompressed Size     00001651 (5713)\n+\n+0EB33D LOCAL HEADER #270     04034B50 (67324752)\n+0EB341 Extract Zip Spec      14 (20) '2.0'\n+0EB342 Extract OS            00 (0) 'MS-DOS'\n+0EB343 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0EB345 Compression Method    0000 (0) 'Stored'\n+0EB347 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EB34B CRC                   00000000 (0)\n+0EB34F Compressed Size       00000000 (0)\n+0EB353 Uncompressed Size     00000000 (0)\n+0EB357 Filename Length       002D (45)\n+0EB359 Extra Length          0009 (9)\n+0EB35B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEB35B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EB388 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EB38A   Length              0005 (5)\n+0EB38C   Flags               01 (1) 'Modification'\n+0EB38D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EB391 PAYLOAD\n+\n+0EFBA4 DATA DESCRIPTOR       08074B50 (134695760)\n+0EFBA8 CRC                   75C25786 (1975670662)\n+0EFBAC Compressed Size       00004813 (18451)\n+0EFBB0 Uncompressed Size     00004813 (18451)\n+\n+0EFBB4 LOCAL HEADER #271     04034B50 (67324752)\n+0EFBB8 Extract Zip Spec      14 (20) '2.0'\n+0EFBB9 Extract OS            00 (0) 'MS-DOS'\n+0EFBBA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0EFBBC Compression Method    0000 (0) 'Stored'\n+0EFBBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EFBC2 CRC                   00000000 (0)\n+0EFBC6 Compressed Size       00000000 (0)\n+0EFBCA Uncompressed Size     00000000 (0)\n+0EFBCE Filename Length       0032 (50)\n+0EFBD0 Extra Length          0009 (9)\n+0EFBD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEFBD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EFC04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EFC06   Length              0005 (5)\n+0EFC08   Flags               01 (1) 'Modification'\n+0EFC09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EFC0D PAYLOAD\n+\n+0F296F DATA DESCRIPTOR       08074B50 (134695760)\n+0F2973 CRC                   49173B6A (1226259306)\n+0F2977 Compressed Size       00002D62 (11618)\n+0F297B Uncompressed Size     00002D62 (11618)\n+\n+0F297F LOCAL HEADER #272     04034B50 (67324752)\n+0F2983 Extract Zip Spec      14 (20) '2.0'\n+0F2984 Extract OS            00 (0) 'MS-DOS'\n+0F2985 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F2987 Compression Method    0000 (0) 'Stored'\n+0F2989 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F298D CRC                   00000000 (0)\n+0F2991 Compressed Size       00000000 (0)\n+0F2995 Uncompressed Size     00000000 (0)\n+0F2999 Filename Length       0036 (54)\n+0F299B Extra Length          0009 (9)\n+0F299D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF299D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F29D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F29D5   Length              0005 (5)\n+0F29D7   Flags               01 (1) 'Modification'\n+0F29D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F29DC PAYLOAD\n+\n+0F4E1F DATA DESCRIPTOR       08074B50 (134695760)\n+0F4E23 CRC                   8D8AC97C (2374683004)\n+0F4E27 Compressed Size       00002443 (9283)\n+0F4E2B Uncompressed Size     00002443 (9283)\n+\n+0F4E2F LOCAL HEADER #273     04034B50 (67324752)\n+0F4E33 Extract Zip Spec      14 (20) '2.0'\n+0F4E34 Extract OS            00 (0) 'MS-DOS'\n+0F4E35 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F4E37 Compression Method    0000 (0) 'Stored'\n+0F4E39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F4E3D CRC                   00000000 (0)\n+0F4E41 Compressed Size       00000000 (0)\n+0F4E45 Uncompressed Size     00000000 (0)\n+0F4E49 Filename Length       0034 (52)\n+0F4E4B Extra Length          0009 (9)\n+0F4E4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF4E4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F4E81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F4E83   Length              0005 (5)\n+0F4E85   Flags               01 (1) 'Modification'\n+0F4E86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F4E8A PAYLOAD\n+\n+0F6053 DATA DESCRIPTOR       08074B50 (134695760)\n+0F6057 CRC                   0EFD7C48 (251493448)\n+0F605B Compressed Size       000011C9 (4553)\n+0F605F Uncompressed Size     000011C9 (4553)\n+\n+0F6063 LOCAL HEADER #274     04034B50 (67324752)\n+0F6067 Extract Zip Spec      14 (20) '2.0'\n+0F6068 Extract OS            00 (0) 'MS-DOS'\n+0F6069 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F606B Compression Method    0000 (0) 'Stored'\n+0F606D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F6071 CRC                   00000000 (0)\n+0F6075 Compressed Size       00000000 (0)\n+0F6079 Uncompressed Size     00000000 (0)\n+0F607D Filename Length       002E (46)\n+0F607F Extra Length          0009 (9)\n+0F6081 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF6081: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F60AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F60B1   Length              0005 (5)\n+0F60B3   Flags               01 (1) 'Modification'\n+0F60B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F60B8 PAYLOAD\n+\n+0F906D DATA DESCRIPTOR       08074B50 (134695760)\n+0F9071 CRC                   8CFD4A70 (2365409904)\n+0F9075 Compressed Size       00002FB5 (12213)\n+0F9079 Uncompressed Size     00002FB5 (12213)\n+\n+0F907D LOCAL HEADER #275     04034B50 (67324752)\n+0F9081 Extract Zip Spec      14 (20) '2.0'\n+0F9082 Extract OS            00 (0) 'MS-DOS'\n+0F9083 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F9085 Compression Method    0000 (0) 'Stored'\n+0F9087 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F908B CRC                   00000000 (0)\n+0F908F Compressed Size       00000000 (0)\n+0F9093 Uncompressed Size     00000000 (0)\n+0F9097 Filename Length       002E (46)\n+0F9099 Extra Length          0009 (9)\n+0F909B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF909B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F90C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F90CB   Length              0005 (5)\n+0F90CD   Flags               01 (1) 'Modification'\n+0F90CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F90D2 PAYLOAD\n+\n+0F99C8 DATA DESCRIPTOR       08074B50 (134695760)\n+0F99CC CRC                   F982D49E (4186100894)\n+0F99D0 Compressed Size       000008F6 (2294)\n+0F99D4 Uncompressed Size     000008F6 (2294)\n+\n+0F99D8 LOCAL HEADER #276     04034B50 (67324752)\n+0F99DC Extract Zip Spec      14 (20) '2.0'\n+0F99DD Extract OS            00 (0) 'MS-DOS'\n+0F99DE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F99E0 Compression Method    0000 (0) 'Stored'\n+0F99E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F99E6 CRC                   00000000 (0)\n+0F99EA Compressed Size       00000000 (0)\n+0F99EE Uncompressed Size     00000000 (0)\n+0F99F2 Filename Length       0030 (48)\n+0F99F4 Extra Length          0009 (9)\n+0F99F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF99F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F9A26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F9A28   Length              0005 (5)\n+0F9A2A   Flags               01 (1) 'Modification'\n+0F9A2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F9A2F PAYLOAD\n+\n+0FA23E DATA DESCRIPTOR       08074B50 (134695760)\n+0FA242 CRC                   831A7179 (2199548281)\n+0FA246 Compressed Size       0000080F (2063)\n+0FA24A Uncompressed Size     0000080F (2063)\n+\n+0FA24E LOCAL HEADER #277     04034B50 (67324752)\n+0FA252 Extract Zip Spec      14 (20) '2.0'\n+0FA253 Extract OS            00 (0) 'MS-DOS'\n+0FA254 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FA256 Compression Method    0000 (0) 'Stored'\n+0FA258 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FA25C CRC                   00000000 (0)\n+0FA260 Compressed Size       00000000 (0)\n+0FA264 Uncompressed Size     00000000 (0)\n+0FA268 Filename Length       002F (47)\n+0FA26A Extra Length          0009 (9)\n+0FA26C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFA26C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FA29B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FA29D   Length              0005 (5)\n+0FA29F   Flags               01 (1) 'Modification'\n+0FA2A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FA2A4 PAYLOAD\n+\n+0FB76D DATA DESCRIPTOR       08074B50 (134695760)\n+0FB771 CRC                   239B6511 (597386513)\n+0FB775 Compressed Size       000014C9 (5321)\n+0FB779 Uncompressed Size     000014C9 (5321)\n+\n+0FB77D LOCAL HEADER #278     04034B50 (67324752)\n+0FB781 Extract Zip Spec      14 (20) '2.0'\n+0FB782 Extract OS            00 (0) 'MS-DOS'\n+0FB783 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FB785 Compression Method    0000 (0) 'Stored'\n+0FB787 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FB78B CRC                   00000000 (0)\n+0FB78F Compressed Size       00000000 (0)\n+0FB793 Uncompressed Size     00000000 (0)\n+0FB797 Filename Length       002D (45)\n+0FB799 Extra Length          0009 (9)\n+0FB79B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFB79B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FB7C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FB7CA   Length              0005 (5)\n+0FB7CC   Flags               01 (1) 'Modification'\n+0FB7CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FB7D1 PAYLOAD\n+\n+0FCBA0 DATA DESCRIPTOR       08074B50 (134695760)\n+0FCBA4 CRC                   CB16D394 (3407270804)\n+0FCBA8 Compressed Size       000013CF (5071)\n+0FCBAC Uncompressed Size     000013CF (5071)\n+\n+0FCBB0 LOCAL HEADER #279     04034B50 (67324752)\n+0FCBB4 Extract Zip Spec      14 (20) '2.0'\n+0FCBB5 Extract OS            00 (0) 'MS-DOS'\n+0FCBB6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FCBB8 Compression Method    0000 (0) 'Stored'\n+0FCBBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FCBBE CRC                   00000000 (0)\n+0FCBC2 Compressed Size       00000000 (0)\n+0FCBC6 Uncompressed Size     00000000 (0)\n+0FCBCA Filename Length       0029 (41)\n+0FCBCC Extra Length          0009 (9)\n+0FCBCE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFCBCE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FCBF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FCBF9   Length              0005 (5)\n+0FCBFB   Flags               01 (1) 'Modification'\n+0FCBFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FCC00 PAYLOAD\n+\n+0FD043 DATA DESCRIPTOR       08074B50 (134695760)\n+0FD047 CRC                   4E3FC833 (1312802867)\n+0FD04B Compressed Size       00000443 (1091)\n+0FD04F Uncompressed Size     00000443 (1091)\n+\n+0FD053 LOCAL HEADER #280     04034B50 (67324752)\n+0FD057 Extract Zip Spec      14 (20) '2.0'\n+0FD058 Extract OS            00 (0) 'MS-DOS'\n+0FD059 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FD05B Compression Method    0000 (0) 'Stored'\n+0FD05D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FD061 CRC                   00000000 (0)\n+0FD065 Compressed Size       00000000 (0)\n+0FD069 Uncompressed Size     00000000 (0)\n+0FD06D Filename Length       002A (42)\n+0FD06F Extra Length          0009 (9)\n+0FD071 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFD071: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FD09B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FD09D   Length              0005 (5)\n+0FD09F   Flags               01 (1) 'Modification'\n+0FD0A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FD0A4 PAYLOAD\n+\n+0FF1BB DATA DESCRIPTOR       08074B50 (134695760)\n+0FF1BF CRC                   7A9C058A (2057045386)\n+0FF1C3 Compressed Size       00002117 (8471)\n+0FF1C7 Uncompressed Size     00002117 (8471)\n+\n+0FF1CB LOCAL HEADER #281     04034B50 (67324752)\n+0FF1CF Extract Zip Spec      14 (20) '2.0'\n+0FF1D0 Extract OS            00 (0) 'MS-DOS'\n+0FF1D1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FF1D3 Compression Method    0000 (0) 'Stored'\n+0FF1D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FF1D9 CRC                   00000000 (0)\n+0FF1DD Compressed Size       00000000 (0)\n+0FF1E1 Uncompressed Size     00000000 (0)\n+0FF1E5 Filename Length       002A (42)\n+0FF1E7 Extra Length          0009 (9)\n+0FF1E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFF1E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FF213 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FF215   Length              0005 (5)\n+0FF217   Flags               01 (1) 'Modification'\n+0FF218   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FF21C PAYLOAD\n+\n+100268 DATA DESCRIPTOR       08074B50 (134695760)\n+10026C CRC                   A4F19F22 (2767298338)\n+100270 Compressed Size       0000104C (4172)\n+100274 Uncompressed Size     0000104C (4172)\n+\n+100278 LOCAL HEADER #282     04034B50 (67324752)\n+10027C Extract Zip Spec      14 (20) '2.0'\n+10027D Extract OS            00 (0) 'MS-DOS'\n+10027E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+100280 Compression Method    0000 (0) 'Stored'\n+100282 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+100286 CRC                   00000000 (0)\n+10028A Compressed Size       00000000 (0)\n+10028E Uncompressed Size     00000000 (0)\n+100292 Filename Length       002B (43)\n+100294 Extra Length          0009 (9)\n+100296 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x100296: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1002C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1002C3   Length              0005 (5)\n+1002C5   Flags               01 (1) 'Modification'\n+1002C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1002CA PAYLOAD\n+\n+10254D DATA DESCRIPTOR       08074B50 (134695760)\n+102551 CRC                   CBBE6E80 (3418254976)\n+102555 Compressed Size       00002283 (8835)\n+102559 Uncompressed Size     00002283 (8835)\n+\n+10255D LOCAL HEADER #283     04034B50 (67324752)\n+102561 Extract Zip Spec      14 (20) '2.0'\n+102562 Extract OS            00 (0) 'MS-DOS'\n+102563 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+102565 Compression Method    0000 (0) 'Stored'\n+102567 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10256B CRC                   00000000 (0)\n+10256F Compressed Size       00000000 (0)\n+102573 Uncompressed Size     00000000 (0)\n+102577 Filename Length       002B (43)\n+102579 Extra Length          0009 (9)\n+10257B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10257B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1025A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1025A8   Length              0005 (5)\n+1025AA   Flags               01 (1) 'Modification'\n+1025AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1025AF PAYLOAD\n+\n+103171 DATA DESCRIPTOR       08074B50 (134695760)\n+103175 CRC                   139F375C (329201500)\n+103179 Compressed Size       00000BC2 (3010)\n+10317D Uncompressed Size     00000BC2 (3010)\n+\n+103181 LOCAL HEADER #284     04034B50 (67324752)\n+103185 Extract Zip Spec      14 (20) '2.0'\n+103186 Extract OS            00 (0) 'MS-DOS'\n+103187 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+103189 Compression Method    0000 (0) 'Stored'\n+10318B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10318F CRC                   00000000 (0)\n+103193 Compressed Size       00000000 (0)\n+103197 Uncompressed Size     00000000 (0)\n+10319B Filename Length       0026 (38)\n+10319D Extra Length          0009 (9)\n+10319F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10319F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1031C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1031C7   Length              0005 (5)\n+1031C9   Flags               01 (1) 'Modification'\n+1031CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1031CE PAYLOAD\n+\n+103F78 DATA DESCRIPTOR       08074B50 (134695760)\n+103F7C CRC                   C39767CB (3281479627)\n+103F80 Compressed Size       00000DAA (3498)\n+103F84 Uncompressed Size     00000DAA (3498)\n+\n+103F88 LOCAL HEADER #285     04034B50 (67324752)\n+103F8C Extract Zip Spec      14 (20) '2.0'\n+103F8D Extract OS            00 (0) 'MS-DOS'\n+103F8E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+103F90 Compression Method    0000 (0) 'Stored'\n+103F92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+103F96 CRC                   00000000 (0)\n+103F9A Compressed Size       00000000 (0)\n+103F9E Uncompressed Size     00000000 (0)\n+103FA2 Filename Length       002C (44)\n+103FA4 Extra Length          0009 (9)\n+103FA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x103FA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+103FD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+103FD4   Length              0005 (5)\n+103FD6   Flags               01 (1) 'Modification'\n+103FD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+103FDB PAYLOAD\n+\n+10509C DATA DESCRIPTOR       08074B50 (134695760)\n+1050A0 CRC                   0C719C80 (208772224)\n+1050A4 Compressed Size       000010C1 (4289)\n+1050A8 Uncompressed Size     000010C1 (4289)\n+\n+1050AC LOCAL HEADER #286     04034B50 (67324752)\n+1050B0 Extract Zip Spec      14 (20) '2.0'\n+1050B1 Extract OS            00 (0) 'MS-DOS'\n+1050B2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1050B4 Compression Method    0000 (0) 'Stored'\n+1050B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1050BA CRC                   00000000 (0)\n+1050BE Compressed Size       00000000 (0)\n+1050C2 Uncompressed Size     00000000 (0)\n+1050C6 Filename Length       002A (42)\n+1050C8 Extra Length          0009 (9)\n+1050CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1050CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1050F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1050F6   Length              0005 (5)\n+1050F8   Flags               01 (1) 'Modification'\n+1050F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1050FD PAYLOAD\n+\n+10619F DATA DESCRIPTOR       08074B50 (134695760)\n+1061A3 CRC                   4A73FA6D (1249114733)\n+1061A7 Compressed Size       000010A2 (4258)\n+1061AB Uncompressed Size     000010A2 (4258)\n+\n+1061AF LOCAL HEADER #287     04034B50 (67324752)\n+1061B3 Extract Zip Spec      14 (20) '2.0'\n+1061B4 Extract OS            00 (0) 'MS-DOS'\n+1061B5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1061B7 Compression Method    0000 (0) 'Stored'\n+1061B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1061BD CRC                   00000000 (0)\n+1061C1 Compressed Size       00000000 (0)\n+1061C5 Uncompressed Size     00000000 (0)\n+1061C9 Filename Length       002E (46)\n+1061CB Extra Length          0009 (9)\n+1061CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1061CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1061FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1061FD   Length              0005 (5)\n+1061FF   Flags               01 (1) 'Modification'\n+106200   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+106204 PAYLOAD\n+\n+106BA1 DATA DESCRIPTOR       08074B50 (134695760)\n+106BA5 CRC                   FE0FBB73 (4262443891)\n+106BA9 Compressed Size       0000099D (2461)\n+106BAD Uncompressed Size     0000099D (2461)\n+\n+106BB1 LOCAL HEADER #288     04034B50 (67324752)\n+106BB5 Extract Zip Spec      14 (20) '2.0'\n+106BB6 Extract OS            00 (0) 'MS-DOS'\n+106BB7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+106BB9 Compression Method    0000 (0) 'Stored'\n+106BBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+106BBF CRC                   00000000 (0)\n+106BC3 Compressed Size       00000000 (0)\n+106BC7 Uncompressed Size     00000000 (0)\n+106BCB Filename Length       0033 (51)\n+106BCD Extra Length          0009 (9)\n+106BCF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x106BCF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+106C02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+106C04   Length              0005 (5)\n+106C06   Flags               01 (1) 'Modification'\n+106C07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+106C0B PAYLOAD\n+\n+10758B DATA DESCRIPTOR       08074B50 (134695760)\n+10758F CRC                   F18EE811 (4052674577)\n+107593 Compressed Size       00000980 (2432)\n+107597 Uncompressed Size     00000980 (2432)\n+\n+10759B LOCAL HEADER #289     04034B50 (67324752)\n+10759F Extract Zip Spec      14 (20) '2.0'\n+1075A0 Extract OS            00 (0) 'MS-DOS'\n+1075A1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1075A3 Compression Method    0000 (0) 'Stored'\n+1075A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1075A9 CRC                   00000000 (0)\n+1075AD Compressed Size       00000000 (0)\n+1075B1 Uncompressed Size     00000000 (0)\n+1075B5 Filename Length       002E (46)\n+1075B7 Extra Length          0009 (9)\n+1075B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1075B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1075E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1075E9   Length              0005 (5)\n+1075EB   Flags               01 (1) 'Modification'\n+1075EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1075F0 PAYLOAD\n+\n+10B140 DATA DESCRIPTOR       08074B50 (134695760)\n+10B144 CRC                   3744AF68 (927248232)\n+10B148 Compressed Size       00003B50 (15184)\n+10B14C Uncompressed Size     00003B50 (15184)\n+\n+10B150 LOCAL HEADER #290     04034B50 (67324752)\n+10B154 Extract Zip Spec      14 (20) '2.0'\n+10B155 Extract OS            00 (0) 'MS-DOS'\n+10B156 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10B158 Compression Method    0000 (0) 'Stored'\n+10B15A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10B15E CRC                   00000000 (0)\n+10B162 Compressed Size       00000000 (0)\n+10B166 Uncompressed Size     00000000 (0)\n+10B16A Filename Length       0035 (53)\n+10B16C Extra Length          0009 (9)\n+10B16E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10B16E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10B1A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10B1A5   Length              0005 (5)\n+10B1A7   Flags               01 (1) 'Modification'\n+10B1A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10B1AC PAYLOAD\n+\n+10BA07 DATA DESCRIPTOR       08074B50 (134695760)\n+10BA0B CRC                   A4EA9AD2 (2766838482)\n+10BA0F Compressed Size       0000085B (2139)\n+10BA13 Uncompressed Size     0000085B (2139)\n+\n+10BA17 LOCAL HEADER #291     04034B50 (67324752)\n+10BA1B Extract Zip Spec      14 (20) '2.0'\n+10BA1C Extract OS            00 (0) 'MS-DOS'\n+10BA1D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10BA1F Compression Method    0000 (0) 'Stored'\n+10BA21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10BA25 CRC                   00000000 (0)\n+10BA29 Compressed Size       00000000 (0)\n+10BA2D Uncompressed Size     00000000 (0)\n+10BA31 Filename Length       002B (43)\n+10BA33 Extra Length          0009 (9)\n+10BA35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10BA35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10BA60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10BA62   Length              0005 (5)\n+10BA64   Flags               01 (1) 'Modification'\n+10BA65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10BA69 PAYLOAD\n+\n+111830 DATA DESCRIPTOR       08074B50 (134695760)\n+111834 CRC                   90514D51 (2421247313)\n+111838 Compressed Size       00005DC7 (24007)\n+11183C Uncompressed Size     00005DC7 (24007)\n+\n+111840 LOCAL HEADER #292     04034B50 (67324752)\n+111844 Extract Zip Spec      14 (20) '2.0'\n+111845 Extract OS            00 (0) 'MS-DOS'\n+111846 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+111848 Compression Method    0000 (0) 'Stored'\n+11184A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11184E CRC                   00000000 (0)\n+111852 Compressed Size       00000000 (0)\n+111856 Uncompressed Size     00000000 (0)\n+11185A Filename Length       0027 (39)\n+11185C Extra Length          0009 (9)\n+11185E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11185E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+111885 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+111887   Length              0005 (5)\n+111889   Flags               01 (1) 'Modification'\n+11188A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11188E PAYLOAD\n+\n+1120F8 DATA DESCRIPTOR       08074B50 (134695760)\n+1120FC CRC                   3422DF4F (874700623)\n+112100 Compressed Size       0000086A (2154)\n+112104 Uncompressed Size     0000086A (2154)\n+\n+112108 LOCAL HEADER #293     04034B50 (67324752)\n+11210C Extract Zip Spec      14 (20) '2.0'\n+11210D Extract OS            00 (0) 'MS-DOS'\n+11210E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+112110 Compression Method    0000 (0) 'Stored'\n+112112 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+112116 CRC                   00000000 (0)\n+11211A Compressed Size       00000000 (0)\n+11211E Uncompressed Size     00000000 (0)\n+112122 Filename Length       002C (44)\n+112124 Extra Length          0009 (9)\n+112126 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x112126: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+112152 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+112154   Length              0005 (5)\n+112156   Flags               01 (1) 'Modification'\n+112157   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11215B PAYLOAD\n+\n+112AFF DATA DESCRIPTOR       08074B50 (134695760)\n+112B03 CRC                   5087E57A (1351083386)\n+112B07 Compressed Size       000009A4 (2468)\n+112B0B Uncompressed Size     000009A4 (2468)\n+\n+112B0F LOCAL HEADER #294     04034B50 (67324752)\n+112B13 Extract Zip Spec      14 (20) '2.0'\n+112B14 Extract OS            00 (0) 'MS-DOS'\n+112B15 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+112B17 Compression Method    0000 (0) 'Stored'\n+112B19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+112B1D CRC                   00000000 (0)\n+112B21 Compressed Size       00000000 (0)\n+112B25 Uncompressed Size     00000000 (0)\n+112B29 Filename Length       002C (44)\n+112B2B Extra Length          0009 (9)\n+112B2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x112B2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+112B59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+112B5B   Length              0005 (5)\n+112B5D   Flags               01 (1) 'Modification'\n+112B5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+112B62 PAYLOAD\n+\n+11AE82 DATA DESCRIPTOR       08074B50 (134695760)\n+11AE86 CRC                   34D97477 (886666359)\n+11AE8A Compressed Size       00008320 (33568)\n+11AE8E Uncompressed Size     00008320 (33568)\n+\n+11AE92 LOCAL HEADER #295     04034B50 (67324752)\n+11AE96 Extract Zip Spec      14 (20) '2.0'\n+11AE97 Extract OS            00 (0) 'MS-DOS'\n+11AE98 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+11AE9A Compression Method    0000 (0) 'Stored'\n+11AE9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11AEA0 CRC                   00000000 (0)\n+11AEA4 Compressed Size       00000000 (0)\n+11AEA8 Uncompressed Size     00000000 (0)\n+11AEAC Filename Length       002F (47)\n+11AEAE Extra Length          0009 (9)\n+11AEB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11AEB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11AEDF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11AEE1   Length              0005 (5)\n+11AEE3   Flags               01 (1) 'Modification'\n+11AEE4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11AEE8 PAYLOAD\n+\n+126D78 DATA DESCRIPTOR       08074B50 (134695760)\n+126D7C CRC                   4414A4AD (1142203565)\n+126D80 Compressed Size       0000BE90 (48784)\n+126D84 Uncompressed Size     0000BE90 (48784)\n+\n+126D88 LOCAL HEADER #296     04034B50 (67324752)\n+126D8C Extract Zip Spec      14 (20) '2.0'\n+126D8D Extract OS            00 (0) 'MS-DOS'\n+126D8E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+126D90 Compression Method    0000 (0) 'Stored'\n+126D92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+126D96 CRC                   00000000 (0)\n+126D9A Compressed Size       00000000 (0)\n+126D9E Uncompressed Size     00000000 (0)\n+126DA2 Filename Length       0038 (56)\n+126DA4 Extra Length          0009 (9)\n+126DA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x126DA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+126DDE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+126DE0   Length              0005 (5)\n+126DE2   Flags               01 (1) 'Modification'\n+126DE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+126DE7 PAYLOAD\n+\n+128584 DATA DESCRIPTOR       08074B50 (134695760)\n+128588 CRC                   20B97A60 (549026400)\n+12858C Compressed Size       0000179D (6045)\n+128590 Uncompressed Size     0000179D (6045)\n+\n+128594 LOCAL HEADER #297     04034B50 (67324752)\n+128598 Extract Zip Spec      14 (20) '2.0'\n+128599 Extract OS            00 (0) 'MS-DOS'\n+12859A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+12859C Compression Method    0000 (0) 'Stored'\n+12859E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1285A2 CRC                   00000000 (0)\n+1285A6 Compressed Size       00000000 (0)\n+1285AA Uncompressed Size     00000000 (0)\n+1285AE Filename Length       003C (60)\n+1285B0 Extra Length          0009 (9)\n+1285B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1285B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1285EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1285F0   Length              0005 (5)\n+1285F2   Flags               01 (1) 'Modification'\n+1285F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1285F7 PAYLOAD\n+\n+129845 DATA DESCRIPTOR       08074B50 (134695760)\n+129849 CRC                   0B75FDAE (192282030)\n+12984D Compressed Size       0000124E (4686)\n+129851 Uncompressed Size     0000124E (4686)\n+\n+129855 LOCAL HEADER #298     04034B50 (67324752)\n+129859 Extract Zip Spec      14 (20) '2.0'\n+12985A Extract OS            00 (0) 'MS-DOS'\n+12985B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+12985D Compression Method    0000 (0) 'Stored'\n+12985F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+129863 CRC                   00000000 (0)\n+129867 Compressed Size       00000000 (0)\n+12986B Uncompressed Size     00000000 (0)\n+12986F Filename Length       0028 (40)\n+129871 Extra Length          0009 (9)\n+129873 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x129873: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12989B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12989D   Length              0005 (5)\n+12989F   Flags               01 (1) 'Modification'\n+1298A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1298A4 PAYLOAD\n+\n+12A5EF DATA DESCRIPTOR       08074B50 (134695760)\n+12A5F3 CRC                   D09B55F9 (3499841017)\n+12A5F7 Compressed Size       00000D4B (3403)\n+12A5FB Uncompressed Size     00000D4B (3403)\n+\n+12A5FF LOCAL HEADER #299     04034B50 (67324752)\n+12A603 Extract Zip Spec      14 (20) '2.0'\n+12A604 Extract OS            00 (0) 'MS-DOS'\n+12A605 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+12A607 Compression Method    0000 (0) 'Stored'\n+12A609 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12A60D CRC                   00000000 (0)\n+12A611 Compressed Size       00000000 (0)\n+12A615 Uncompressed Size     00000000 (0)\n+12A619 Filename Length       0044 (68)\n+12A61B Extra Length          0009 (9)\n+12A61D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12A61D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12A661 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12A663   Length              0005 (5)\n+12A665   Flags               01 (1) 'Modification'\n+12A666   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+12A66A PAYLOAD\n+\n+12B0C9 DATA DESCRIPTOR       08074B50 (134695760)\n+12B0CD CRC                   F3B0BA28 (4088445480)\n+12B0D1 Compressed Size       00000A5F (2655)\n+12B0D5 Uncompressed Size     00000A5F (2655)\n+\n+12B0D9 LOCAL HEADER #300     04034B50 (67324752)\n+12B0DD Extract Zip Spec      14 (20) '2.0'\n+12B0DE Extract OS            00 (0) 'MS-DOS'\n+12B0DF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+12B0E1 Compression Method    0000 (0) 'Stored'\n+12B0E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12B0E7 CRC                   00000000 (0)\n+12B0EB Compressed Size       00000000 (0)\n+12B0EF Uncompressed Size     00000000 (0)\n+12B0F3 Filename Length       002E (46)\n+12B0F5 Extra Length          0009 (9)\n+12B0F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12B0F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12B125 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12B127   Length              0005 (5)\n+12B129   Flags               01 (1) 'Modification'\n+12B12A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+12B12E PAYLOAD\n+\n+13449E DATA DESCRIPTOR       08074B50 (134695760)\n+1344A2 CRC                   080CFD86 (135069062)\n+1344A6 Compressed Size       00009370 (37744)\n+1344AA Uncompressed Size     00009370 (37744)\n+\n+1344AE LOCAL HEADER #301     04034B50 (67324752)\n+1344B2 Extract Zip Spec      14 (20) '2.0'\n+1344B3 Extract OS            00 (0) 'MS-DOS'\n+1344B4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1344B6 Compression Method    0000 (0) 'Stored'\n+1344B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1344BC CRC                   00000000 (0)\n+1344C0 Compressed Size       00000000 (0)\n+1344C4 Uncompressed Size     00000000 (0)\n+1344C8 Filename Length       002C (44)\n+1344CA Extra Length          0009 (9)\n+1344CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1344CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1344F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1344FA   Length              0005 (5)\n+1344FC   Flags               01 (1) 'Modification'\n+1344FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+134501 PAYLOAD\n+\n+1367D9 DATA DESCRIPTOR       08074B50 (134695760)\n+1367DD CRC                   70A970FE (1890152702)\n+1367E1 Compressed Size       000022D8 (8920)\n+1367E5 Uncompressed Size     000022D8 (8920)\n+\n+1367E9 LOCAL HEADER #302     04034B50 (67324752)\n+1367ED Extract Zip Spec      14 (20) '2.0'\n+1367EE Extract OS            00 (0) 'MS-DOS'\n+1367EF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1367F1 Compression Method    0000 (0) 'Stored'\n+1367F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1367F7 CRC                   00000000 (0)\n+1367FB Compressed Size       00000000 (0)\n+1367FF Uncompressed Size     00000000 (0)\n+136803 Filename Length       002B (43)\n+136805 Extra Length          0009 (9)\n+136807 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x136807: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+136832 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+136834   Length              0005 (5)\n+136836   Flags               01 (1) 'Modification'\n+136837   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+13683B PAYLOAD\n+\n+13CB8A DATA DESCRIPTOR       08074B50 (134695760)\n+13CB8E CRC                   BCEF5B37 (3169803063)\n+13CB92 Compressed Size       0000634F (25423)\n+13CB96 Uncompressed Size     0000634F (25423)\n+\n+13CB9A LOCAL HEADER #303     04034B50 (67324752)\n+13CB9E Extract Zip Spec      14 (20) '2.0'\n+13CB9F Extract OS            00 (0) 'MS-DOS'\n+13CBA0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+13CBA2 Compression Method    0000 (0) 'Stored'\n+13CBA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13CBA8 CRC                   00000000 (0)\n+13CBAC Compressed Size       00000000 (0)\n+13CBB0 Uncompressed Size     00000000 (0)\n+13CBB4 Filename Length       002C (44)\n+13CBB6 Extra Length          0009 (9)\n+13CBB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13CBB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13CBE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13CBE6   Length              0005 (5)\n+13CBE8   Flags               01 (1) 'Modification'\n+13CBE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+13CBED PAYLOAD\n+\n+13F398 DATA DESCRIPTOR       08074B50 (134695760)\n+13F39C CRC                   DB02321D (3674354205)\n+13F3A0 Compressed Size       000027AB (10155)\n+13F3A4 Uncompressed Size     000027AB (10155)\n+\n+13F3A8 LOCAL HEADER #304     04034B50 (67324752)\n+13F3AC Extract Zip Spec      14 (20) '2.0'\n+13F3AD Extract OS            00 (0) 'MS-DOS'\n+13F3AE General Purpose Flag  0000 (0)\n+13F3B0 Compression Method    0000 (0) 'Stored'\n+13F3B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13F3B6 CRC                   00000000 (0)\n+13F3BA Compressed Size       00000000 (0)\n+13F3BE Uncompressed Size     00000000 (0)\n+13F3C2 Filename Length       0018 (24)\n+13F3C4 Extra Length          0009 (9)\n+13F3C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13F3C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13F3DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13F3E0   Length              0005 (5)\n+13F3E2   Flags               01 (1) 'Modification'\n+13F3E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13F3E7 LOCAL HEADER #305     04034B50 (67324752)\n+13F3EB Extract Zip Spec      14 (20) '2.0'\n+13F3EC Extract OS            00 (0) 'MS-DOS'\n+13F3ED General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+13F3EF Compression Method    0000 (0) 'Stored'\n+13F3F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13F3F5 CRC                   00000000 (0)\n+13F3F9 Compressed Size       00000000 (0)\n+13F3FD Uncompressed Size     00000000 (0)\n+13F401 Filename Length       002B (43)\n+13F403 Extra Length          0009 (9)\n+13F405 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13F405: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13F430 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13F432   Length              0005 (5)\n+13F434   Flags               01 (1) 'Modification'\n+13F435   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+13F439 PAYLOAD\n+\n+145AC9 DATA DESCRIPTOR       08074B50 (134695760)\n+145ACD CRC                   DCD69CAC (3705052332)\n+145AD1 Compressed Size       00006690 (26256)\n+145AD5 Uncompressed Size     00006690 (26256)\n+\n+145AD9 LOCAL HEADER #306     04034B50 (67324752)\n+145ADD Extract Zip Spec      14 (20) '2.0'\n+145ADE Extract OS            00 (0) 'MS-DOS'\n+145ADF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+145AE1 Compression Method    0000 (0) 'Stored'\n+145AE3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+145AE7 CRC                   00000000 (0)\n+145AEB Compressed Size       00000000 (0)\n+145AEF Uncompressed Size     00000000 (0)\n+145AF3 Filename Length       0034 (52)\n+145AF5 Extra Length          0009 (9)\n+145AF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x145AF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+145B2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+145B2D   Length              0005 (5)\n+145B2F   Flags               01 (1) 'Modification'\n+145B30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+145B34 PAYLOAD\n+\n+14BD21 DATA DESCRIPTOR       08074B50 (134695760)\n+14BD25 CRC                   E3FDA003 (3825049603)\n+14BD29 Compressed Size       000061ED (25069)\n+14BD2D Uncompressed Size     000061ED (25069)\n+\n+14BD31 LOCAL HEADER #307     04034B50 (67324752)\n+14BD35 Extract Zip Spec      14 (20) '2.0'\n+14BD36 Extract OS            00 (0) 'MS-DOS'\n+14BD37 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+14BD39 Compression Method    0000 (0) 'Stored'\n+14BD3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14BD3F CRC                   00000000 (0)\n+14BD43 Compressed Size       00000000 (0)\n+14BD47 Uncompressed Size     00000000 (0)\n+14BD4B Filename Length       0031 (49)\n+14BD4D Extra Length          0009 (9)\n+14BD4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14BD4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+14BD80 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+14BD82   Length              0005 (5)\n+14BD84   Flags               01 (1) 'Modification'\n+14BD85   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+14BD89 PAYLOAD\n+\n+14D08E DATA DESCRIPTOR       08074B50 (134695760)\n+14D092 CRC                   9A747BAC (2591325100)\n+14D096 Compressed Size       00001305 (4869)\n+14D09A Uncompressed Size     00001305 (4869)\n+\n+14D09E LOCAL HEADER #308     04034B50 (67324752)\n+14D0A2 Extract Zip Spec      14 (20) '2.0'\n+14D0A3 Extract OS            00 (0) 'MS-DOS'\n+14D0A4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+14D0A6 Compression Method    0000 (0) 'Stored'\n+14D0A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14D0AC CRC                   00000000 (0)\n+14D0B0 Compressed Size       00000000 (0)\n+14D0B4 Uncompressed Size     00000000 (0)\n+14D0B8 Filename Length       0034 (52)\n+14D0BA Extra Length          0009 (9)\n+14D0BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14D0BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+14D0F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+14D0F2   Length              0005 (5)\n+14D0F4   Flags               01 (1) 'Modification'\n+14D0F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+14D0F9 PAYLOAD\n+\n+14E7D0 DATA DESCRIPTOR       08074B50 (134695760)\n+14E7D4 CRC                   F1EB3E77 (4058726007)\n+14E7D8 Compressed Size       000016D7 (5847)\n+14E7DC Uncompressed Size     000016D7 (5847)\n+\n+14E7E0 LOCAL HEADER #309     04034B50 (67324752)\n+14E7E4 Extract Zip Spec      14 (20) '2.0'\n+14E7E5 Extract OS            00 (0) 'MS-DOS'\n+14E7E6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+14E7E8 Compression Method    0000 (0) 'Stored'\n+14E7EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14E7EE CRC                   00000000 (0)\n+14E7F2 Compressed Size       00000000 (0)\n+14E7F6 Uncompressed Size     00000000 (0)\n+14E7FA Filename Length       0032 (50)\n+14E7FC Extra Length          0009 (9)\n+14E7FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14E7FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+14E830 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+14E832   Length              0005 (5)\n+14E834   Flags               01 (1) 'Modification'\n+14E835   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+14E839 PAYLOAD\n+\n+15039E DATA DESCRIPTOR       08074B50 (134695760)\n+1503A2 CRC                   7F641F8A (2137268106)\n+1503A6 Compressed Size       00001B65 (7013)\n+1503AA Uncompressed Size     00001B65 (7013)\n+\n+1503AE LOCAL HEADER #310     04034B50 (67324752)\n+1503B2 Extract Zip Spec      14 (20) '2.0'\n+1503B3 Extract OS            00 (0) 'MS-DOS'\n+1503B4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1503B6 Compression Method    0000 (0) 'Stored'\n+1503B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1503BC CRC                   00000000 (0)\n+1503C0 Compressed Size       00000000 (0)\n+1503C4 Uncompressed Size     00000000 (0)\n+1503C8 Filename Length       002E (46)\n+1503CA Extra Length          0009 (9)\n+1503CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1503CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1503FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1503FC   Length              0005 (5)\n+1503FE   Flags               01 (1) 'Modification'\n+1503FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+150403 PAYLOAD\n+\n+153B0A DATA DESCRIPTOR       08074B50 (134695760)\n+153B0E CRC                   6C21C4E0 (1814152416)\n+153B12 Compressed Size       00003707 (14087)\n+153B16 Uncompressed Size     00003707 (14087)\n+\n+153B1A LOCAL HEADER #311     04034B50 (67324752)\n+153B1E Extract Zip Spec      14 (20) '2.0'\n+153B1F Extract OS            00 (0) 'MS-DOS'\n+153B20 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+153B22 Compression Method    0000 (0) 'Stored'\n+153B24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+153B28 CRC                   00000000 (0)\n+153B2C Compressed Size       00000000 (0)\n+153B30 Uncompressed Size     00000000 (0)\n+153B34 Filename Length       002B (43)\n+153B36 Extra Length          0009 (9)\n+153B38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x153B38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+153B63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+153B65   Length              0005 (5)\n+153B67   Flags               01 (1) 'Modification'\n+153B68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+153B6C PAYLOAD\n+\n+15440D DATA DESCRIPTOR       08074B50 (134695760)\n+154411 CRC                   F3BD8170 (4089282928)\n+154415 Compressed Size       000008A1 (2209)\n+154419 Uncompressed Size     000008A1 (2209)\n+\n+15441D LOCAL HEADER #312     04034B50 (67324752)\n+154421 Extract Zip Spec      14 (20) '2.0'\n+154422 Extract OS            00 (0) 'MS-DOS'\n+154423 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+154425 Compression Method    0000 (0) 'Stored'\n+154427 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+15442B CRC                   00000000 (0)\n+15442F Compressed Size       00000000 (0)\n+154433 Uncompressed Size     00000000 (0)\n+154437 Filename Length       002F (47)\n+154439 Extra Length          0009 (9)\n+15443B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15443B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+15446A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+15446C   Length              0005 (5)\n+15446E   Flags               01 (1) 'Modification'\n+15446F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+154473 PAYLOAD\n+\n+15682F DATA DESCRIPTOR       08074B50 (134695760)\n+156833 CRC                   56A68FB6 (1453756342)\n+156837 Compressed Size       000023BC (9148)\n+15683B Uncompressed Size     000023BC (9148)\n+\n+15683F LOCAL HEADER #313     04034B50 (67324752)\n+156843 Extract Zip Spec      14 (20) '2.0'\n+156844 Extract OS            00 (0) 'MS-DOS'\n+156845 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+156847 Compression Method    0000 (0) 'Stored'\n+156849 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+15684D CRC                   00000000 (0)\n+156851 Compressed Size       00000000 (0)\n+156855 Uncompressed Size     00000000 (0)\n+156859 Filename Length       0026 (38)\n+15685B Extra Length          0009 (9)\n+15685D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15685D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+156883 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+156885   Length              0005 (5)\n+156887   Flags               01 (1) 'Modification'\n+156888   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+15688C PAYLOAD\n+\n+157425 DATA DESCRIPTOR       08074B50 (134695760)\n+157429 CRC                   111FF296 (287306390)\n+15742D Compressed Size       00000B99 (2969)\n+157431 Uncompressed Size     00000B99 (2969)\n+\n+157435 LOCAL HEADER #314     04034B50 (67324752)\n+157439 Extract Zip Spec      14 (20) '2.0'\n+15743A Extract OS            00 (0) 'MS-DOS'\n+15743B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+15743D Compression Method    0000 (0) 'Stored'\n+15743F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+157443 CRC                   00000000 (0)\n+157447 Compressed Size       00000000 (0)\n+15744B Uncompressed Size     00000000 (0)\n+15744F Filename Length       002B (43)\n+157451 Extra Length          0009 (9)\n+157453 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x157453: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+15747E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+157480   Length              0005 (5)\n+157482   Flags               01 (1) 'Modification'\n+157483   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+157487 PAYLOAD\n+\n+1582FE DATA DESCRIPTOR       08074B50 (134695760)\n+158302 CRC                   44CDA5D9 (1154328025)\n+158306 Compressed Size       00000E77 (3703)\n+15830A Uncompressed Size     00000E77 (3703)\n+\n+15830E LOCAL HEADER #315     04034B50 (67324752)\n+158312 Extract Zip Spec      14 (20) '2.0'\n+158313 Extract OS            00 (0) 'MS-DOS'\n+158314 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+158316 Compression Method    0000 (0) 'Stored'\n+158318 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+15831C CRC                   00000000 (0)\n+158320 Compressed Size       00000000 (0)\n+158324 Uncompressed Size     00000000 (0)\n+158328 Filename Length       0031 (49)\n+15832A Extra Length          0009 (9)\n+15832C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15832C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+15835D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+15835F   Length              0005 (5)\n+158361   Flags               01 (1) 'Modification'\n+158362   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+158366 PAYLOAD\n+\n+159BCF DATA DESCRIPTOR       08074B50 (134695760)\n+159BD3 CRC                   D584FEC4 (3582262980)\n+159BD7 Compressed Size       00001869 (6249)\n+159BDB Uncompressed Size     00001869 (6249)\n+\n+159BDF LOCAL HEADER #316     04034B50 (67324752)\n+159BE3 Extract Zip Spec      14 (20) '2.0'\n+159BE4 Extract OS            00 (0) 'MS-DOS'\n+159BE5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+159BE7 Compression Method    0000 (0) 'Stored'\n+159BE9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+159BED CRC                   00000000 (0)\n+159BF1 Compressed Size       00000000 (0)\n+159BF5 Uncompressed Size     00000000 (0)\n+159BF9 Filename Length       0029 (41)\n+159BFB Extra Length          0009 (9)\n+159BFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x159BFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+159C26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+159C28   Length              0005 (5)\n+159C2A   Flags               01 (1) 'Modification'\n+159C2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+159C2F PAYLOAD\n+\n+15BEEF DATA DESCRIPTOR       08074B50 (134695760)\n+15BEF3 CRC                   6E2E32B0 (1848521392)\n+15BEF7 Compressed Size       000022C0 (8896)\n+15BEFB Uncompressed Size     000022C0 (8896)\n+\n+15BEFF LOCAL HEADER #317     04034B50 (67324752)\n+15BF03 Extract Zip Spec      14 (20) '2.0'\n+15BF04 Extract OS            00 (0) 'MS-DOS'\n+15BF05 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+15BF07 Compression Method    0000 (0) 'Stored'\n+15BF09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+15BF0D CRC                   00000000 (0)\n+15BF11 Compressed Size       00000000 (0)\n+15BF15 Uncompressed Size     00000000 (0)\n+15BF19 Filename Length       002A (42)\n+15BF1B Extra Length          0009 (9)\n+15BF1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15BF1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+15BF47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+15BF49   Length              0005 (5)\n+15BF4B   Flags               01 (1) 'Modification'\n+15BF4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+15BF50 PAYLOAD\n+\n+15C5DF DATA DESCRIPTOR       08074B50 (134695760)\n+15C5E3 CRC                   C17F4D7C (3246345596)\n+15C5E7 Compressed Size       0000068F (1679)\n+15C5EB Uncompressed Size     0000068F (1679)\n+\n+15C5EF LOCAL HEADER #318     04034B50 (67324752)\n+15C5F3 Extract Zip Spec      14 (20) '2.0'\n+15C5F4 Extract OS            00 (0) 'MS-DOS'\n+15C5F5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+15C5F7 Compression Method    0000 (0) 'Stored'\n+15C5F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+15C5FD CRC                   00000000 (0)\n+15C601 Compressed Size       00000000 (0)\n+15C605 Uncompressed Size     00000000 (0)\n+15C609 Filename Length       0029 (41)\n+15C60B Extra Length          0009 (9)\n+15C60D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15C60D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+15C636 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+15C638   Length              0005 (5)\n+15C63A   Flags               01 (1) 'Modification'\n+15C63B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+15C63F PAYLOAD\n+\n+15D4CD DATA DESCRIPTOR       08074B50 (134695760)\n+15D4D1 CRC                   0D00D936 (218159414)\n+15D4D5 Compressed Size       00000E8E (3726)\n+15D4D9 Uncompressed Size     00000E8E (3726)\n+\n+15D4DD LOCAL HEADER #319     04034B50 (67324752)\n+15D4E1 Extract Zip Spec      14 (20) '2.0'\n+15D4E2 Extract OS            00 (0) 'MS-DOS'\n+15D4E3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+15D4E5 Compression Method    0000 (0) 'Stored'\n+15D4E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+15D4EB CRC                   00000000 (0)\n+15D4EF Compressed Size       00000000 (0)\n+15D4F3 Uncompressed Size     00000000 (0)\n+15D4F7 Filename Length       002A (42)\n+15D4F9 Extra Length          0009 (9)\n+15D4FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15D4FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+15D525 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+15D527   Length              0005 (5)\n+15D529   Flags               01 (1) 'Modification'\n+15D52A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+15D52E PAYLOAD\n+\n+15E44E DATA DESCRIPTOR       08074B50 (134695760)\n+15E452 CRC                   F4388FF8 (4097347576)\n+15E456 Compressed Size       00000F20 (3872)\n+15E45A Uncompressed Size     00000F20 (3872)\n+\n+15E45E LOCAL HEADER #320     04034B50 (67324752)\n+15E462 Extract Zip Spec      14 (20) '2.0'\n+15E463 Extract OS            00 (0) 'MS-DOS'\n+15E464 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+15E466 Compression Method    0000 (0) 'Stored'\n+15E468 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+15E46C CRC                   00000000 (0)\n+15E470 Compressed Size       00000000 (0)\n+15E474 Uncompressed Size     00000000 (0)\n+15E478 Filename Length       002B (43)\n+15E47A Extra Length          0009 (9)\n+15E47C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15E47C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+15E4A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+15E4A9   Length              0005 (5)\n+15E4AB   Flags               01 (1) 'Modification'\n+15E4AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+15E4B0 PAYLOAD\n+\n+161AC3 DATA DESCRIPTOR       08074B50 (134695760)\n+161AC7 CRC                   39FACF71 (972738417)\n+161ACB Compressed Size       00003613 (13843)\n+161ACF Uncompressed Size     00003613 (13843)\n+\n+161AD3 LOCAL HEADER #321     04034B50 (67324752)\n+161AD7 Extract Zip Spec      14 (20) '2.0'\n+161AD8 Extract OS            00 (0) 'MS-DOS'\n+161AD9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+161ADB Compression Method    0000 (0) 'Stored'\n+161ADD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+161AE1 CRC                   00000000 (0)\n+161AE5 Compressed Size       00000000 (0)\n+161AE9 Uncompressed Size     00000000 (0)\n+161AED Filename Length       002B (43)\n+161AEF Extra Length          0009 (9)\n+161AF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x161AF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+161B1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+161B1E   Length              0005 (5)\n+161B20   Flags               01 (1) 'Modification'\n+161B21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+161B25 PAYLOAD\n+\n+164591 DATA DESCRIPTOR       08074B50 (134695760)\n+164595 CRC                   2FD52EF2 (802500338)\n+164599 Compressed Size       00002A6C (10860)\n+16459D Uncompressed Size     00002A6C (10860)\n+\n+1645A1 LOCAL HEADER #322     04034B50 (67324752)\n+1645A5 Extract Zip Spec      14 (20) '2.0'\n+1645A6 Extract OS            00 (0) 'MS-DOS'\n+1645A7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1645A9 Compression Method    0000 (0) 'Stored'\n+1645AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1645AF CRC                   00000000 (0)\n+1645B3 Compressed Size       00000000 (0)\n+1645B7 Uncompressed Size     00000000 (0)\n+1645BB Filename Length       0030 (48)\n+1645BD Extra Length          0009 (9)\n+1645BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1645BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1645EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1645F1   Length              0005 (5)\n+1645F3   Flags               01 (1) 'Modification'\n+1645F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1645F8 PAYLOAD\n+\n+1667A7 DATA DESCRIPTOR       08074B50 (134695760)\n+1667AB CRC                   42C7E3CE (1120396238)\n+1667AF Compressed Size       000021AF (8623)\n+1667B3 Uncompressed Size     000021AF (8623)\n+\n+1667B7 LOCAL HEADER #323     04034B50 (67324752)\n+1667BB Extract Zip Spec      14 (20) '2.0'\n+1667BC Extract OS            00 (0) 'MS-DOS'\n+1667BD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1667BF Compression Method    0000 (0) 'Stored'\n+1667C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1667C5 CRC                   00000000 (0)\n+1667C9 Compressed Size       00000000 (0)\n+1667CD Uncompressed Size     00000000 (0)\n+1667D1 Filename Length       002B (43)\n+1667D3 Extra Length          0009 (9)\n+1667D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1667D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+166800 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+166802   Length              0005 (5)\n+166804   Flags               01 (1) 'Modification'\n+166805   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+166809 PAYLOAD\n+\n+169D30 DATA DESCRIPTOR       08074B50 (134695760)\n+169D34 CRC                   9B8BDB69 (2609634153)\n+169D38 Compressed Size       00003527 (13607)\n+169D3C Uncompressed Size     00003527 (13607)\n+\n+169D40 LOCAL HEADER #324     04034B50 (67324752)\n+169D44 Extract Zip Spec      14 (20) '2.0'\n+169D45 Extract OS            00 (0) 'MS-DOS'\n+169D46 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+169D48 Compression Method    0000 (0) 'Stored'\n+169D4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+169D4E CRC                   00000000 (0)\n+169D52 Compressed Size       00000000 (0)\n+169D56 Uncompressed Size     00000000 (0)\n+169D5A Filename Length       002E (46)\n+169D5C Extra Length          0009 (9)\n+169D5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x169D5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+169D8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+169D8E   Length              0005 (5)\n+169D90   Flags               01 (1) 'Modification'\n+169D91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+169D95 PAYLOAD\n+\n+16D3BD DATA DESCRIPTOR       08074B50 (134695760)\n+16D3C1 CRC                   2A6335AE (711144878)\n+16D3C5 Compressed Size       00003628 (13864)\n+16D3C9 Uncompressed Size     00003628 (13864)\n+\n+16D3CD LOCAL HEADER #325     04034B50 (67324752)\n+16D3D1 Extract Zip Spec      14 (20) '2.0'\n+16D3D2 Extract OS            00 (0) 'MS-DOS'\n+16D3D3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+16D3D5 Compression Method    0000 (0) 'Stored'\n+16D3D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16D3DB CRC                   00000000 (0)\n+16D3DF Compressed Size       00000000 (0)\n+16D3E3 Uncompressed Size     00000000 (0)\n+16D3E7 Filename Length       0026 (38)\n+16D3E9 Extra Length          0009 (9)\n+16D3EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16D3EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16D411 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16D413   Length              0005 (5)\n+16D415   Flags               01 (1) 'Modification'\n+16D416   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+16D41A PAYLOAD\n+\n+16F0BC DATA DESCRIPTOR       08074B50 (134695760)\n+16F0C0 CRC                   4DECBF7A (1307361146)\n+16F0C4 Compressed Size       00001CA2 (7330)\n+16F0C8 Uncompressed Size     00001CA2 (7330)\n+\n+16F0CC LOCAL HEADER #326     04034B50 (67324752)\n+16F0D0 Extract Zip Spec      14 (20) '2.0'\n+16F0D1 Extract OS            00 (0) 'MS-DOS'\n+16F0D2 General Purpose Flag  0000 (0)\n+16F0D4 Compression Method    0000 (0) 'Stored'\n+16F0D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16F0DA CRC                   00000000 (0)\n+16F0DE Compressed Size       00000000 (0)\n+16F0E2 Uncompressed Size     00000000 (0)\n+16F0E6 Filename Length       0023 (35)\n+16F0E8 Extra Length          0009 (9)\n+16F0EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16F0EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16F10D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16F10F   Length              0005 (5)\n+16F111   Flags               01 (1) 'Modification'\n+16F112   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16F116 LOCAL HEADER #327     04034B50 (67324752)\n+16F11A Extract Zip Spec      14 (20) '2.0'\n+16F11B Extract OS            00 (0) 'MS-DOS'\n+16F11C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+16F11E Compression Method    0000 (0) 'Stored'\n+16F120 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16F124 CRC                   00000000 (0)\n+16F128 Compressed Size       00000000 (0)\n+16F12C Uncompressed Size     00000000 (0)\n+16F130 Filename Length       0030 (48)\n+16F132 Extra Length          0009 (9)\n+16F134 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16F134: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16F164 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16F166   Length              0005 (5)\n+16F168   Flags               01 (1) 'Modification'\n+16F169   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+16F16D PAYLOAD\n+\n+16F73D DATA DESCRIPTOR       08074B50 (134695760)\n+16F741 CRC                   DF16DFCA (3742818250)\n+16F745 Compressed Size       000005D0 (1488)\n+16F749 Uncompressed Size     000005D0 (1488)\n+\n+16F74D LOCAL HEADER #328     04034B50 (67324752)\n+16F751 Extract Zip Spec      14 (20) '2.0'\n+16F752 Extract OS            00 (0) 'MS-DOS'\n+16F753 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+16F755 Compression Method    0000 (0) 'Stored'\n+16F757 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16F75B CRC                   00000000 (0)\n+16F75F Compressed Size       00000000 (0)\n+16F763 Uncompressed Size     00000000 (0)\n+16F767 Filename Length       0036 (54)\n+16F769 Extra Length          0009 (9)\n+16F76B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16F76B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16F7A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16F7A3   Length              0005 (5)\n+16F7A5   Flags               01 (1) 'Modification'\n+16F7A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+16F7AA PAYLOAD\n+\n+171646 DATA DESCRIPTOR       08074B50 (134695760)\n+17164A CRC                   14F52AE5 (351611621)\n+17164E Compressed Size       00001E9C (7836)\n+171652 Uncompressed Size     00001E9C (7836)\n+\n+171656 LOCAL HEADER #329     04034B50 (67324752)\n+17165A Extract Zip Spec      14 (20) '2.0'\n+17165B Extract OS            00 (0) 'MS-DOS'\n+17165C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+17165E Compression Method    0000 (0) 'Stored'\n+171660 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+171664 CRC                   00000000 (0)\n+171668 Compressed Size       00000000 (0)\n+17166C Uncompressed Size     00000000 (0)\n+171670 Filename Length       0034 (52)\n+171672 Extra Length          0009 (9)\n+171674 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x171674: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1716A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1716AA   Length              0005 (5)\n+1716AC   Flags               01 (1) 'Modification'\n+1716AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1716B1 PAYLOAD\n+\n+173251 DATA DESCRIPTOR       08074B50 (134695760)\n+173255 CRC                   455A049E (1163527326)\n+173259 Compressed Size       00001BA0 (7072)\n+17325D Uncompressed Size     00001BA0 (7072)\n+\n+173261 LOCAL HEADER #330     04034B50 (67324752)\n+173265 Extract Zip Spec      14 (20) '2.0'\n+173266 Extract OS            00 (0) 'MS-DOS'\n+173267 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+173269 Compression Method    0000 (0) 'Stored'\n+17326B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+17326F CRC                   00000000 (0)\n+173273 Compressed Size       00000000 (0)\n+173277 Uncompressed Size     00000000 (0)\n+17327B Filename Length       002E (46)\n+17327D Extra Length          0009 (9)\n+17327F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x17327F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1732AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1732AF   Length              0005 (5)\n+1732B1   Flags               01 (1) 'Modification'\n+1732B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1732B6 PAYLOAD\n+\n+173A4E DATA DESCRIPTOR       08074B50 (134695760)\n+173A52 CRC                   C852179E (3360823198)\n+173A56 Compressed Size       00000798 (1944)\n+173A5A Uncompressed Size     00000798 (1944)\n+\n+173A5E LOCAL HEADER #331     04034B50 (67324752)\n+173A62 Extract Zip Spec      14 (20) '2.0'\n+173A63 Extract OS            00 (0) 'MS-DOS'\n+173A64 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+173A66 Compression Method    0000 (0) 'Stored'\n+173A68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+173A6C CRC                   00000000 (0)\n+173A70 Compressed Size       00000000 (0)\n+173A74 Uncompressed Size     00000000 (0)\n+173A78 Filename Length       0031 (49)\n+173A7A Extra Length          0009 (9)\n+173A7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x173A7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+173AAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+173AAF   Length              0005 (5)\n+173AB1   Flags               01 (1) 'Modification'\n+173AB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+173AB6 PAYLOAD\n+\n+17576B DATA DESCRIPTOR       08074B50 (134695760)\n+17576F CRC                   BD46272F (3175491375)\n+175773 Compressed Size       00001CB5 (7349)\n+175777 Uncompressed Size     00001CB5 (7349)\n+\n+17577B LOCAL HEADER #332     04034B50 (67324752)\n+17577F Extract Zip Spec      14 (20) '2.0'\n+175780 Extract OS            00 (0) 'MS-DOS'\n+175781 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+175783 Compression Method    0000 (0) 'Stored'\n+175785 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+175789 CRC                   00000000 (0)\n+17578D Compressed Size       00000000 (0)\n+175791 Uncompressed Size     00000000 (0)\n+175795 Filename Length       002F (47)\n+175797 Extra Length          0009 (9)\n+175799 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x175799: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1757C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1757CA   Length              0005 (5)\n+1757CC   Flags               01 (1) 'Modification'\n+1757CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1757D1 PAYLOAD\n+\n+1773A6 DATA DESCRIPTOR       08074B50 (134695760)\n+1773AA CRC                   F51CAE43 (4112297539)\n+1773AE Compressed Size       00001BD5 (7125)\n+1773B2 Uncompressed Size     00001BD5 (7125)\n+\n+1773B6 LOCAL HEADER #333     04034B50 (67324752)\n+1773BA Extract Zip Spec      14 (20) '2.0'\n+1773BB Extract OS            00 (0) 'MS-DOS'\n+1773BC General Purpose Flag  0000 (0)\n+1773BE Compression Method    0000 (0) 'Stored'\n+1773C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1773C4 CRC                   00000000 (0)\n+1773C8 Compressed Size       00000000 (0)\n+1773CC Uncompressed Size     00000000 (0)\n+1773D0 Filename Length       0020 (32)\n+1773D2 Extra Length          0009 (9)\n+1773D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1773D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1773F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1773F6   Length              0005 (5)\n+1773F8   Flags               01 (1) 'Modification'\n+1773F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1773FD LOCAL HEADER #334     04034B50 (67324752)\n+177401 Extract Zip Spec      14 (20) '2.0'\n+177402 Extract OS            00 (0) 'MS-DOS'\n+177403 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+177405 Compression Method    0000 (0) 'Stored'\n+177407 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+17740B CRC                   00000000 (0)\n+17740F Compressed Size       00000000 (0)\n+177413 Uncompressed Size     00000000 (0)\n+177417 Filename Length       003F (63)\n+177419 Extra Length          0009 (9)\n+17741B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x17741B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+17745A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17745C   Length              0005 (5)\n+17745E   Flags               01 (1) 'Modification'\n+17745F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+177463 PAYLOAD\n+\n+177C24 DATA DESCRIPTOR       08074B50 (134695760)\n+177C28 CRC                   DB5A6031 (3680133169)\n+177C2C Compressed Size       000007C1 (1985)\n+177C30 Uncompressed Size     000007C1 (1985)\n+\n+177C34 LOCAL HEADER #335     04034B50 (67324752)\n+177C38 Extract Zip Spec      14 (20) '2.0'\n+177C39 Extract OS            00 (0) 'MS-DOS'\n+177C3A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+177C3C Compression Method    0000 (0) 'Stored'\n+177C3E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+177C42 CRC                   00000000 (0)\n+177C46 Compressed Size       00000000 (0)\n+177C4A Uncompressed Size     00000000 (0)\n+177C4E Filename Length       0032 (50)\n+177C50 Extra Length          0009 (9)\n+177C52 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x177C52: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+177C84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+177C86   Length              0005 (5)\n+177C88   Flags               01 (1) 'Modification'\n+177C89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+177C8D PAYLOAD\n+\n+17C694 DATA DESCRIPTOR       08074B50 (134695760)\n+17C698 CRC                   695EFF74 (1767833460)\n+17C69C Compressed Size       00004A07 (18951)\n+17C6A0 Uncompressed Size     00004A07 (18951)\n+\n+17C6A4 LOCAL HEADER #336     04034B50 (67324752)\n+17C6A8 Extract Zip Spec      14 (20) '2.0'\n+17C6A9 Extract OS            00 (0) 'MS-DOS'\n+17C6AA General Purpose Flag  0000 (0)\n+17C6AC Compression Method    0000 (0) 'Stored'\n+17C6AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+17C6B2 CRC                   00000000 (0)\n+17C6B6 Compressed Size       00000000 (0)\n+17C6BA Uncompressed Size     00000000 (0)\n+17C6BE Filename Length       0020 (32)\n+17C6C0 Extra Length          0009 (9)\n+17C6C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x17C6C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+17C6E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17C6E4   Length              0005 (5)\n+17C6E6   Flags               01 (1) 'Modification'\n+17C6E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+17C6EB LOCAL HEADER #337     04034B50 (67324752)\n+17C6EF Extract Zip Spec      14 (20) '2.0'\n+17C6F0 Extract OS            00 (0) 'MS-DOS'\n+17C6F1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+17C6F3 Compression Method    0000 (0) 'Stored'\n+17C6F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+17C6F9 CRC                   00000000 (0)\n+17C6FD Compressed Size       00000000 (0)\n+17C701 Uncompressed Size     00000000 (0)\n+17C705 Filename Length       002E (46)\n+17C707 Extra Length          0009 (9)\n+17C709 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x17C709: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+17C737 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17C739   Length              0005 (5)\n+17C73B   Flags               01 (1) 'Modification'\n+17C73C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+17C740 PAYLOAD\n+\n+17CF73 DATA DESCRIPTOR       08074B50 (134695760)\n+17CF77 CRC                   FB06EFC4 (4211535812)\n+17CF7B Compressed Size       00000833 (2099)\n+17CF7F Uncompressed Size     00000833 (2099)\n+\n+17CF83 LOCAL HEADER #338     04034B50 (67324752)\n+17CF87 Extract Zip Spec      14 (20) '2.0'\n+17CF88 Extract OS            00 (0) 'MS-DOS'\n+17CF89 General Purpose Flag  0000 (0)\n+17CF8B Compression Method    0000 (0) 'Stored'\n+17CF8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+17CF91 CRC                   00000000 (0)\n+17CF95 Compressed Size       00000000 (0)\n+17CF99 Uncompressed Size     00000000 (0)\n+17CF9D Filename Length       0017 (23)\n+17CF9F Extra Length          0009 (9)\n+17CFA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x17CFA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+17CFB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17CFBA   Length              0005 (5)\n+17CFBC   Flags               01 (1) 'Modification'\n+17CFBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+17CFC1 LOCAL HEADER #339     04034B50 (67324752)\n+17CFC5 Extract Zip Spec      14 (20) '2.0'\n+17CFC6 Extract OS            00 (0) 'MS-DOS'\n+17CFC7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+17CFC9 Compression Method    0000 (0) 'Stored'\n+17CFCB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+17CFCF CRC                   00000000 (0)\n+17CFD3 Compressed Size       00000000 (0)\n+17CFD7 Uncompressed Size     00000000 (0)\n+17CFDB Filename Length       0033 (51)\n+17CFDD Extra Length          0009 (9)\n+17CFDF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x17CFDF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+17D012 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17D014   Length              0005 (5)\n+17D016   Flags               01 (1) 'Modification'\n+17D017   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+17D01B PAYLOAD\n+\n+17E799 DATA DESCRIPTOR       08074B50 (134695760)\n+17E79D CRC                   18AD9BF8 (414030840)\n+17E7A1 Compressed Size       0000177E (6014)\n+17E7A5 Uncompressed Size     0000177E (6014)\n+\n+17E7A9 LOCAL HEADER #340     04034B50 (67324752)\n+17E7AD Extract Zip Spec      14 (20) '2.0'\n+17E7AE Extract OS            00 (0) 'MS-DOS'\n+17E7AF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+17E7B1 Compression Method    0000 (0) 'Stored'\n+17E7B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+17E7B7 CRC                   00000000 (0)\n+17E7BB Compressed Size       00000000 (0)\n+17E7BF Uncompressed Size     00000000 (0)\n+17E7C3 Filename Length       0034 (52)\n+17E7C5 Extra Length          0009 (9)\n+17E7C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x17E7C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+17E7FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17E7FD   Length              0005 (5)\n+17E7FF   Flags               01 (1) 'Modification'\n+17E800   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+17E804 PAYLOAD\n+\n+17ED82 DATA DESCRIPTOR       08074B50 (134695760)\n+17ED86 CRC                   1BB78BFC (465013756)\n+17ED8A Compressed Size       0000057E (1406)\n+17ED8E Uncompressed Size     0000057E (1406)\n+\n+17ED92 LOCAL HEADER #341     04034B50 (67324752)\n+17ED96 Extract Zip Spec      14 (20) '2.0'\n+17ED97 Extract OS            00 (0) 'MS-DOS'\n+17ED98 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+17ED9A Compression Method    0000 (0) 'Stored'\n+17ED9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+17EDA0 CRC                   00000000 (0)\n+17EDA4 Compressed Size       00000000 (0)\n+17EDA8 Uncompressed Size     00000000 (0)\n+17EDAC Filename Length       0031 (49)\n+17EDAE Extra Length          0009 (9)\n+17EDB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x17EDB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+17EDE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17EDE3   Length              0005 (5)\n+17EDE5   Flags               01 (1) 'Modification'\n+17EDE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+17EDEA PAYLOAD\n+\n+17F26C DATA DESCRIPTOR       08074B50 (134695760)\n+17F270 CRC                   163DDCF2 (373153010)\n+17F274 Compressed Size       00000482 (1154)\n+17F278 Uncompressed Size     00000482 (1154)\n+\n+17F27C LOCAL HEADER #342     04034B50 (67324752)\n+17F280 Extract Zip Spec      14 (20) '2.0'\n+17F281 Extract OS            00 (0) 'MS-DOS'\n+17F282 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+17F284 Compression Method    0000 (0) 'Stored'\n+17F286 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+17F28A CRC                   00000000 (0)\n+17F28E Compressed Size       00000000 (0)\n+17F292 Uncompressed Size     00000000 (0)\n+17F296 Filename Length       0021 (33)\n+17F298 Extra Length          0009 (9)\n+17F29A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x17F29A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+17F2BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17F2BD   Length              0005 (5)\n+17F2BF   Flags               01 (1) 'Modification'\n+17F2C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+17F2C4 PAYLOAD\n+\n+17F913 DATA DESCRIPTOR       08074B50 (134695760)\n+17F917 CRC                   6F7884D3 (1870169299)\n+17F91B Compressed Size       0000064F (1615)\n+17F91F Uncompressed Size     0000064F (1615)\n+\n+17F923 LOCAL HEADER #343     04034B50 (67324752)\n+17F927 Extract Zip Spec      14 (20) '2.0'\n+17F928 Extract OS            00 (0) 'MS-DOS'\n+17F929 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+17F92B Compression Method    0000 (0) 'Stored'\n+17F92D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+17F931 CRC                   00000000 (0)\n+17F935 Compressed Size       00000000 (0)\n+17F939 Uncompressed Size     00000000 (0)\n+17F93D Filename Length       002B (43)\n+17F93F Extra Length          0009 (9)\n+17F941 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x17F941: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+17F96C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17F96E   Length              0005 (5)\n+17F970   Flags               01 (1) 'Modification'\n+17F971   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+17F975 PAYLOAD\n+\n+180293 DATA DESCRIPTOR       08074B50 (134695760)\n+180297 CRC                   7837B4D1 (2016916689)\n+18029B Compressed Size       0000091E (2334)\n+18029F Uncompressed Size     0000091E (2334)\n+\n+1802A3 LOCAL HEADER #344     04034B50 (67324752)\n+1802A7 Extract Zip Spec      14 (20) '2.0'\n+1802A8 Extract OS            00 (0) 'MS-DOS'\n+1802A9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1802AB Compression Method    0000 (0) 'Stored'\n+1802AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1802B1 CRC                   00000000 (0)\n+1802B5 Compressed Size       00000000 (0)\n+1802B9 Uncompressed Size     00000000 (0)\n+1802BD Filename Length       0029 (41)\n+1802BF Extra Length          0009 (9)\n+1802C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1802C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1802EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1802EC   Length              0005 (5)\n+1802EE   Flags               01 (1) 'Modification'\n+1802EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1802F3 PAYLOAD\n+\n+1815D3 DATA DESCRIPTOR       08074B50 (134695760)\n+1815D7 CRC                   1FC70E2E (533138990)\n+1815DB Compressed Size       000012E0 (4832)\n+1815DF Uncompressed Size     000012E0 (4832)\n+\n+1815E3 LOCAL HEADER #345     04034B50 (67324752)\n+1815E7 Extract Zip Spec      14 (20) '2.0'\n+1815E8 Extract OS            00 (0) 'MS-DOS'\n+1815E9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1815EB Compression Method    0000 (0) 'Stored'\n+1815ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1815F1 CRC                   00000000 (0)\n+1815F5 Compressed Size       00000000 (0)\n+1815F9 Uncompressed Size     00000000 (0)\n+1815FD Filename Length       0028 (40)\n+1815FF Extra Length          0009 (9)\n+181601 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x181601: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+181629 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+18162B   Length              0005 (5)\n+18162D   Flags               01 (1) 'Modification'\n+18162E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+181632 PAYLOAD\n+\n+181AB7 DATA DESCRIPTOR       08074B50 (134695760)\n+181ABB CRC                   34F679E6 (888568294)\n+181ABF Compressed Size       00000485 (1157)\n+181AC3 Uncompressed Size     00000485 (1157)\n+\n+181AC7 LOCAL HEADER #346     04034B50 (67324752)\n+181ACB Extract Zip Spec      14 (20) '2.0'\n+181ACC Extract OS            00 (0) 'MS-DOS'\n+181ACD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+181ACF Compression Method    0000 (0) 'Stored'\n+181AD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+181AD5 CRC                   00000000 (0)\n+181AD9 Compressed Size       00000000 (0)\n+181ADD Uncompressed Size     00000000 (0)\n+181AE1 Filename Length       0030 (48)\n+181AE3 Extra Length          0009 (9)\n+181AE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x181AE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+181B15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+181B17   Length              0005 (5)\n+181B19   Flags               01 (1) 'Modification'\n+181B1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+181B1E PAYLOAD\n+\n+182DAD DATA DESCRIPTOR       08074B50 (134695760)\n+182DB1 CRC                   A2725211 (2725401105)\n+182DB5 Compressed Size       0000128F (4751)\n+182DB9 Uncompressed Size     0000128F (4751)\n+\n+182DBD LOCAL HEADER #347     04034B50 (67324752)\n+182DC1 Extract Zip Spec      14 (20) '2.0'\n+182DC2 Extract OS            00 (0) 'MS-DOS'\n+182DC3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+182DC5 Compression Method    0000 (0) 'Stored'\n+182DC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+182DCB CRC                   00000000 (0)\n+182DCF Compressed Size       00000000 (0)\n+182DD3 Uncompressed Size     00000000 (0)\n+182DD7 Filename Length       0026 (38)\n+182DD9 Extra Length          0009 (9)\n+182DDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x182DDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+182E01 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+182E03   Length              0005 (5)\n+182E05   Flags               01 (1) 'Modification'\n+182E06   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+182E0A PAYLOAD\n+\n+184347 DATA DESCRIPTOR       08074B50 (134695760)\n+18434B CRC                   646CD426 (1684853798)\n+18434F Compressed Size       0000153D (5437)\n+184353 Uncompressed Size     0000153D (5437)\n+\n+184357 LOCAL HEADER #348     04034B50 (67324752)\n+18435B Extract Zip Spec      14 (20) '2.0'\n+18435C Extract OS            00 (0) 'MS-DOS'\n+18435D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+18435F Compression Method    0000 (0) 'Stored'\n+184361 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+184365 CRC                   00000000 (0)\n+184369 Compressed Size       00000000 (0)\n+18436D Uncompressed Size     00000000 (0)\n+184371 Filename Length       0033 (51)\n+184373 Extra Length          0009 (9)\n+184375 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x184375: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1843A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1843AA   Length              0005 (5)\n+1843AC   Flags               01 (1) 'Modification'\n+1843AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1843B1 PAYLOAD\n+\n+18488E DATA DESCRIPTOR       08074B50 (134695760)\n+184892 CRC                   D4D0313F (3570413887)\n+184896 Compressed Size       000004DD (1245)\n+18489A Uncompressed Size     000004DD (1245)\n+\n+18489E LOCAL HEADER #349     04034B50 (67324752)\n+1848A2 Extract Zip Spec      14 (20) '2.0'\n+1848A3 Extract OS            00 (0) 'MS-DOS'\n+1848A4 General Purpose Flag  0000 (0)\n+1848A6 Compression Method    0000 (0) 'Stored'\n+1848A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1848AC CRC                   00000000 (0)\n+1848B0 Compressed Size       00000000 (0)\n+1848B4 Uncompressed Size     00000000 (0)\n+1848B8 Filename Length       0015 (21)\n+1848BA Extra Length          0009 (9)\n+1848BC Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1848BC: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1848D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1848D3   Length              0005 (5)\n+1848D5   Flags               01 (1) 'Modification'\n+1848D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1848DA LOCAL HEADER #350     04034B50 (67324752)\n+1848DE Extract Zip Spec      14 (20) '2.0'\n+1848DF Extract OS            00 (0) 'MS-DOS'\n+1848E0 General Purpose Flag  0000 (0)\n+1848E2 Compression Method    0000 (0) 'Stored'\n+1848E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1848E8 CRC                   00000000 (0)\n+1848EC Compressed Size       00000000 (0)\n+1848F0 Uncompressed Size     00000000 (0)\n+1848F4 Filename Length       001B (27)\n+1848F6 Extra Length          0009 (9)\n+1848F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1848F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+184913 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+184915   Length              0005 (5)\n+184917   Flags               01 (1) 'Modification'\n+184918   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+18491C LOCAL HEADER #351     04034B50 (67324752)\n+184920 Extract Zip Spec      14 (20) '2.0'\n+184921 Extract OS            00 (0) 'MS-DOS'\n+184922 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+184924 Compression Method    0000 (0) 'Stored'\n+184926 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+18492A CRC                   00000000 (0)\n+18492E Compressed Size       00000000 (0)\n+184932 Uncompressed Size     00000000 (0)\n+184936 Filename Length       0037 (55)\n+184938 Extra Length          0009 (9)\n+18493A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18493A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+184971 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+184973   Length              0005 (5)\n+184975   Flags               01 (1) 'Modification'\n+184976   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+18497A PAYLOAD\n+\n+184D78 DATA DESCRIPTOR       08074B50 (134695760)\n+184D7C CRC                   63368ED1 (1664519889)\n+184D80 Compressed Size       000003FE (1022)\n+184D84 Uncompressed Size     000003FE (1022)\n+\n+184D88 LOCAL HEADER #352     04034B50 (67324752)\n+184D8C Extract Zip Spec      14 (20) '2.0'\n+184D8D Extract OS            00 (0) 'MS-DOS'\n+184D8E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+184D90 Compression Method    0000 (0) 'Stored'\n+184D92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+184D96 CRC                   00000000 (0)\n+184D9A Compressed Size       00000000 (0)\n+184D9E Uncompressed Size     00000000 (0)\n+184DA2 Filename Length       0030 (48)\n+184DA4 Extra Length          0009 (9)\n+184DA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x184DA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+184DD6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+184DD8   Length              0005 (5)\n+184DDA   Flags               01 (1) 'Modification'\n+184DDB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+184DDF PAYLOAD\n+\n+186107 DATA DESCRIPTOR       08074B50 (134695760)\n+18610B CRC                   876E0335 (2272133941)\n+18610F Compressed Size       00001328 (4904)\n+186113 Uncompressed Size     00001328 (4904)\n+\n+186117 LOCAL HEADER #353     04034B50 (67324752)\n+18611B Extract Zip Spec      14 (20) '2.0'\n+18611C Extract OS            00 (0) 'MS-DOS'\n+18611D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+18611F Compression Method    0000 (0) 'Stored'\n+186121 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+186125 CRC                   00000000 (0)\n+186129 Compressed Size       00000000 (0)\n+18612D Uncompressed Size     00000000 (0)\n+186131 Filename Length       002F (47)\n+186133 Extra Length          0009 (9)\n+186135 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x186135: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+186164 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+186166   Length              0005 (5)\n+186168   Flags               01 (1) 'Modification'\n+186169   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+18616D PAYLOAD\n+\n+186BFD DATA DESCRIPTOR       08074B50 (134695760)\n+186C01 CRC                   1E67CB82 (510118786)\n+186C05 Compressed Size       00000A90 (2704)\n+186C09 Uncompressed Size     00000A90 (2704)\n+\n+186C0D LOCAL HEADER #354     04034B50 (67324752)\n+186C11 Extract Zip Spec      14 (20) '2.0'\n+186C12 Extract OS            00 (0) 'MS-DOS'\n+186C13 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+186C15 Compression Method    0000 (0) 'Stored'\n+186C17 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+186C1B CRC                   00000000 (0)\n+186C1F Compressed Size       00000000 (0)\n+186C23 Uncompressed Size     00000000 (0)\n+186C27 Filename Length       0036 (54)\n+186C29 Extra Length          0009 (9)\n+186C2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x186C2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+186C61 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+186C63   Length              0005 (5)\n+186C65   Flags               01 (1) 'Modification'\n+186C66   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+186C6A PAYLOAD\n+\n+187048 DATA DESCRIPTOR       08074B50 (134695760)\n+18704C CRC                   61CAA47B (1640670331)\n+187050 Compressed Size       000003DE (990)\n+187054 Uncompressed Size     000003DE (990)\n+\n+187058 LOCAL HEADER #355     04034B50 (67324752)\n+18705C Extract Zip Spec      14 (20) '2.0'\n+18705D Extract OS            00 (0) 'MS-DOS'\n+18705E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+187060 Compression Method    0000 (0) 'Stored'\n+187062 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+187066 CRC                   00000000 (0)\n+18706A Compressed Size       00000000 (0)\n+18706E Uncompressed Size     00000000 (0)\n+187072 Filename Length       0033 (51)\n+187074 Extra Length          0009 (9)\n+187076 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x187076: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1870A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1870AB   Length              0005 (5)\n+1870AD   Flags               01 (1) 'Modification'\n+1870AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1870B2 PAYLOAD\n+\n+187D05 DATA DESCRIPTOR       08074B50 (134695760)\n+187D09 CRC                   607FF27E (1618997886)\n+187D0D Compressed Size       00000C53 (3155)\n+187D11 Uncompressed Size     00000C53 (3155)\n+\n+187D15 LOCAL HEADER #356     04034B50 (67324752)\n+187D19 Extract Zip Spec      14 (20) '2.0'\n+187D1A Extract OS            00 (0) 'MS-DOS'\n+187D1B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+187D1D Compression Method    0000 (0) 'Stored'\n+187D1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+187D23 CRC                   00000000 (0)\n+187D27 Compressed Size       00000000 (0)\n+187D2B Uncompressed Size     00000000 (0)\n+187D2F Filename Length       002D (45)\n+187D31 Extra Length          0009 (9)\n+187D33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x187D33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+187D60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+187D62   Length              0005 (5)\n+187D64   Flags               01 (1) 'Modification'\n+187D65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+187D69 PAYLOAD\n+\n+1899E1 DATA DESCRIPTOR       08074B50 (134695760)\n+1899E5 CRC                   7B7924E9 (2071536873)\n+1899E9 Compressed Size       00001C78 (7288)\n+1899ED Uncompressed Size     00001C78 (7288)\n+\n+1899F1 LOCAL HEADER #357     04034B50 (67324752)\n+1899F5 Extract Zip Spec      14 (20) '2.0'\n+1899F6 Extract OS            00 (0) 'MS-DOS'\n+1899F7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1899F9 Compression Method    0000 (0) 'Stored'\n+1899FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1899FF CRC                   00000000 (0)\n+189A03 Compressed Size       00000000 (0)\n+189A07 Uncompressed Size     00000000 (0)\n+189A0B Filename Length       0030 (48)\n+189A0D Extra Length          0009 (9)\n+189A0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x189A0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+189A3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+189A41   Length              0005 (5)\n+189A43   Flags               01 (1) 'Modification'\n+189A44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+189A48 PAYLOAD\n+\n+18A655 DATA DESCRIPTOR       08074B50 (134695760)\n+18A659 CRC                   707F9167 (1887408487)\n+18A65D Compressed Size       00000C0D (3085)\n+18A661 Uncompressed Size     00000C0D (3085)\n+\n+18A665 LOCAL HEADER #358     04034B50 (67324752)\n+18A669 Extract Zip Spec      14 (20) '2.0'\n+18A66A Extract OS            00 (0) 'MS-DOS'\n+18A66B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+18A66D Compression Method    0000 (0) 'Stored'\n+18A66F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+18A673 CRC                   00000000 (0)\n+18A677 Compressed Size       00000000 (0)\n+18A67B Uncompressed Size     00000000 (0)\n+18A67F Filename Length       0033 (51)\n+18A681 Extra Length          0009 (9)\n+18A683 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18A683: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+18A6B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+18A6B8   Length              0005 (5)\n+18A6BA   Flags               01 (1) 'Modification'\n+18A6BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+18A6BF PAYLOAD\n+\n+18B180 DATA DESCRIPTOR       08074B50 (134695760)\n+18B184 CRC                   FDA638C9 (4255529161)\n+18B188 Compressed Size       00000AC1 (2753)\n+18B18C Uncompressed Size     00000AC1 (2753)\n+\n+18B190 LOCAL HEADER #359     04034B50 (67324752)\n+18B194 Extract Zip Spec      14 (20) '2.0'\n+18B195 Extract OS            00 (0) 'MS-DOS'\n+18B196 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+18B198 Compression Method    0000 (0) 'Stored'\n+18B19A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+18B19E CRC                   00000000 (0)\n+18B1A2 Compressed Size       00000000 (0)\n+18B1A6 Uncompressed Size     00000000 (0)\n+18B1AA Filename Length       002D (45)\n+18B1AC Extra Length          0009 (9)\n+18B1AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18B1AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+18B1DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+18B1DD   Length              0005 (5)\n+18B1DF   Flags               01 (1) 'Modification'\n+18B1E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+18B1E4 PAYLOAD\n+\n+18CCBE DATA DESCRIPTOR       08074B50 (134695760)\n+18CCC2 CRC                   5FA42AEE (1604594414)\n+18CCC6 Compressed Size       00001ADA (6874)\n+18CCCA Uncompressed Size     00001ADA (6874)\n+\n+18CCCE LOCAL HEADER #360     04034B50 (67324752)\n+18CCD2 Extract Zip Spec      14 (20) '2.0'\n+18CCD3 Extract OS            00 (0) 'MS-DOS'\n+18CCD4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+18CCD6 Compression Method    0000 (0) 'Stored'\n+18CCD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+18CCDC CRC                   00000000 (0)\n+18CCE0 Compressed Size       00000000 (0)\n+18CCE4 Uncompressed Size     00000000 (0)\n+18CCE8 Filename Length       0031 (49)\n+18CCEA Extra Length          0009 (9)\n+18CCEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18CCEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+18CD1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+18CD1F   Length              0005 (5)\n+18CD21   Flags               01 (1) 'Modification'\n+18CD22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+18CD26 PAYLOAD\n+\n+18DEA7 DATA DESCRIPTOR       08074B50 (134695760)\n+18DEAB CRC                   619FED81 (1637870977)\n+18DEAF Compressed Size       00001181 (4481)\n+18DEB3 Uncompressed Size     00001181 (4481)\n+\n+18DEB7 LOCAL HEADER #361     04034B50 (67324752)\n+18DEBB Extract Zip Spec      14 (20) '2.0'\n+18DEBC Extract OS            00 (0) 'MS-DOS'\n+18DEBD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+18DEBF Compression Method    0000 (0) 'Stored'\n+18DEC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+18DEC5 CRC                   00000000 (0)\n+18DEC9 Compressed Size       00000000 (0)\n+18DECD Uncompressed Size     00000000 (0)\n+18DED1 Filename Length       002F (47)\n+18DED3 Extra Length          0009 (9)\n+18DED5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18DED5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+18DF04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+18DF06   Length              0005 (5)\n+18DF08   Flags               01 (1) 'Modification'\n+18DF09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+18DF0D PAYLOAD\n+\n+18EB8F DATA DESCRIPTOR       08074B50 (134695760)\n+18EB93 CRC                   E8166721 (3893782305)\n+18EB97 Compressed Size       00000C82 (3202)\n+18EB9B Uncompressed Size     00000C82 (3202)\n+\n+18EB9F LOCAL HEADER #362     04034B50 (67324752)\n+18EBA3 Extract Zip Spec      14 (20) '2.0'\n+18EBA4 Extract OS            00 (0) 'MS-DOS'\n+18EBA5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+18EBA7 Compression Method    0000 (0) 'Stored'\n+18EBA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+18EBAD CRC                   00000000 (0)\n+18EBB1 Compressed Size       00000000 (0)\n+18EBB5 Uncompressed Size     00000000 (0)\n+18EBB9 Filename Length       0031 (49)\n+18EBBB Extra Length          0009 (9)\n+18EBBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18EBBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+18EBEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+18EBF0   Length              0005 (5)\n+18EBF2   Flags               01 (1) 'Modification'\n+18EBF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+18EBF7 PAYLOAD\n+\n+19092D DATA DESCRIPTOR       08074B50 (134695760)\n+190931 CRC                   363316B0 (909317808)\n+190935 Compressed Size       00001D36 (7478)\n+190939 Uncompressed Size     00001D36 (7478)\n+\n+19093D LOCAL HEADER #363     04034B50 (67324752)\n+190941 Extract Zip Spec      14 (20) '2.0'\n+190942 Extract OS            00 (0) 'MS-DOS'\n+190943 General Purpose Flag  0000 (0)\n+190945 Compression Method    0000 (0) 'Stored'\n+190947 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19094B CRC                   00000000 (0)\n+19094F Compressed Size       00000000 (0)\n+190953 Uncompressed Size     00000000 (0)\n+190957 Filename Length       001D (29)\n+190959 Extra Length          0009 (9)\n+19095B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19095B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+190978 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19097A   Length              0005 (5)\n+19097C   Flags               01 (1) 'Modification'\n+19097D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+190981 LOCAL HEADER #364     04034B50 (67324752)\n+190985 Extract Zip Spec      14 (20) '2.0'\n+190986 Extract OS            00 (0) 'MS-DOS'\n+190987 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+190989 Compression Method    0000 (0) 'Stored'\n+19098B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19098F CRC                   00000000 (0)\n+190993 Compressed Size       00000000 (0)\n+190997 Uncompressed Size     00000000 (0)\n+19099B Filename Length       002D (45)\n+19099D Extra Length          0009 (9)\n+19099F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19099F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1909CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1909CE   Length              0005 (5)\n+1909D0   Flags               01 (1) 'Modification'\n+1909D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1909D5 PAYLOAD\n+\n+190D6D DATA DESCRIPTOR       08074B50 (134695760)\n+190D71 CRC                   8C6F354A (2356098378)\n+190D75 Compressed Size       00000398 (920)\n+190D79 Uncompressed Size     00000398 (920)\n+\n+190D7D LOCAL HEADER #365     04034B50 (67324752)\n+190D81 Extract Zip Spec      14 (20) '2.0'\n+190D82 Extract OS            00 (0) 'MS-DOS'\n+190D83 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+190D85 Compression Method    0000 (0) 'Stored'\n+190D87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+190D8B CRC                   00000000 (0)\n+190D8F Compressed Size       00000000 (0)\n+190D93 Uncompressed Size     00000000 (0)\n+190D97 Filename Length       002D (45)\n+190D99 Extra Length          0009 (9)\n+190D9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x190D9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+190DC8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+190DCA   Length              0005 (5)\n+190DCC   Flags               01 (1) 'Modification'\n+190DCD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+190DD1 PAYLOAD\n+\n+191202 DATA DESCRIPTOR       08074B50 (134695760)\n+191206 CRC                   4B31CC84 (1261554820)\n+19120A Compressed Size       00000431 (1073)\n+19120E Uncompressed Size     00000431 (1073)\n+\n+191212 LOCAL HEADER #366     04034B50 (67324752)\n+191216 Extract Zip Spec      14 (20) '2.0'\n+191217 Extract OS            00 (0) 'MS-DOS'\n+191218 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19121A Compression Method    0000 (0) 'Stored'\n+19121C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+191220 CRC                   00000000 (0)\n+191224 Compressed Size       00000000 (0)\n+191228 Uncompressed Size     00000000 (0)\n+19122C Filename Length       0035 (53)\n+19122E Extra Length          0009 (9)\n+191230 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x191230: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+191265 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+191267   Length              0005 (5)\n+191269   Flags               01 (1) 'Modification'\n+19126A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+19126E PAYLOAD\n+\n+1916B0 DATA DESCRIPTOR       08074B50 (134695760)\n+1916B4 CRC                   66AD4132 (1722630450)\n+1916B8 Compressed Size       00000442 (1090)\n+1916BC Uncompressed Size     00000442 (1090)\n+\n+1916C0 LOCAL HEADER #367     04034B50 (67324752)\n+1916C4 Extract Zip Spec      14 (20) '2.0'\n+1916C5 Extract OS            00 (0) 'MS-DOS'\n+1916C6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1916C8 Compression Method    0000 (0) 'Stored'\n+1916CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1916CE CRC                   00000000 (0)\n+1916D2 Compressed Size       00000000 (0)\n+1916D6 Uncompressed Size     00000000 (0)\n+1916DA Filename Length       0032 (50)\n+1916DC Extra Length          0009 (9)\n+1916DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1916DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+191710 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+191712   Length              0005 (5)\n+191714   Flags               01 (1) 'Modification'\n+191715   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+191719 PAYLOAD\n+\n+191F22 DATA DESCRIPTOR       08074B50 (134695760)\n+191F26 CRC                   49B9FF79 (1236926329)\n+191F2A Compressed Size       00000809 (2057)\n+191F2E Uncompressed Size     00000809 (2057)\n+\n+191F32 LOCAL HEADER #368     04034B50 (67324752)\n+191F36 Extract Zip Spec      14 (20) '2.0'\n+191F37 Extract OS            00 (0) 'MS-DOS'\n+191F38 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+191F3A Compression Method    0000 (0) 'Stored'\n+191F3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+191F40 CRC                   00000000 (0)\n+191F44 Compressed Size       00000000 (0)\n+191F48 Uncompressed Size     00000000 (0)\n+191F4C Filename Length       0030 (48)\n+191F4E Extra Length          0009 (9)\n+191F50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x191F50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+191F80 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+191F82   Length              0005 (5)\n+191F84   Flags               01 (1) 'Modification'\n+191F85   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+191F89 PAYLOAD\n+\n+192716 DATA DESCRIPTOR       08074B50 (134695760)\n+19271A CRC                   D07DEF14 (3497914132)\n+19271E Compressed Size       0000078D (1933)\n+192722 Uncompressed Size     0000078D (1933)\n+\n+192726 LOCAL HEADER #369     04034B50 (67324752)\n+19272A Extract Zip Spec      14 (20) '2.0'\n+19272B Extract OS            00 (0) 'MS-DOS'\n+19272C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19272E Compression Method    0000 (0) 'Stored'\n+192730 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+192734 CRC                   00000000 (0)\n+192738 Compressed Size       00000000 (0)\n+19273C Uncompressed Size     00000000 (0)\n+192740 Filename Length       0038 (56)\n+192742 Extra Length          0009 (9)\n+192744 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x192744: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19277C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19277E   Length              0005 (5)\n+192780   Flags               01 (1) 'Modification'\n+192781   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+192785 PAYLOAD\n+\n+192BCD DATA DESCRIPTOR       08074B50 (134695760)\n+192BD1 CRC                   4AFAB67E (1257944702)\n+192BD5 Compressed Size       00000448 (1096)\n+192BD9 Uncompressed Size     00000448 (1096)\n+\n+192BDD LOCAL HEADER #370     04034B50 (67324752)\n+192BE1 Extract Zip Spec      14 (20) '2.0'\n+192BE2 Extract OS            00 (0) 'MS-DOS'\n+192BE3 General Purpose Flag  0000 (0)\n+192BE5 Compression Method    0000 (0) 'Stored'\n+192BE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+192BEB CRC                   00000000 (0)\n+192BEF Compressed Size       00000000 (0)\n+192BF3 Uncompressed Size     00000000 (0)\n+192BF7 Filename Length       001D (29)\n+192BF9 Extra Length          0009 (9)\n+192BFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x192BFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+192C18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+192C1A   Length              0005 (5)\n+192C1C   Flags               01 (1) 'Modification'\n+192C1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+192C21 LOCAL HEADER #371     04034B50 (67324752)\n+192C25 Extract Zip Spec      14 (20) '2.0'\n+192C26 Extract OS            00 (0) 'MS-DOS'\n+192C27 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+192C29 Compression Method    0000 (0) 'Stored'\n+192C2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+192C2F CRC                   00000000 (0)\n+192C33 Compressed Size       00000000 (0)\n+192C37 Uncompressed Size     00000000 (0)\n+192C3B Filename Length       0036 (54)\n+192C3D Extra Length          0009 (9)\n+192C3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x192C3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+192C75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+192C77   Length              0005 (5)\n+192C79   Flags               01 (1) 'Modification'\n+192C7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+192C7E PAYLOAD\n+\n+19380E DATA DESCRIPTOR       08074B50 (134695760)\n+193812 CRC                   C563319A (3311612314)\n+193816 Compressed Size       00000B90 (2960)\n+19381A Uncompressed Size     00000B90 (2960)\n+\n+19381E LOCAL HEADER #372     04034B50 (67324752)\n+193822 Extract Zip Spec      14 (20) '2.0'\n+193823 Extract OS            00 (0) 'MS-DOS'\n+193824 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+193826 Compression Method    0000 (0) 'Stored'\n+193828 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19382C CRC                   00000000 (0)\n+193830 Compressed Size       00000000 (0)\n+193834 Uncompressed Size     00000000 (0)\n+193838 Filename Length       002F (47)\n+19383A Extra Length          0009 (9)\n+19383C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19383C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19386B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19386D   Length              0005 (5)\n+19386F   Flags               01 (1) 'Modification'\n+193870   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+193874 PAYLOAD\n+\n+19492C DATA DESCRIPTOR       08074B50 (134695760)\n+194930 CRC                   1187A07F (294101119)\n+194934 Compressed Size       000010B8 (4280)\n+194938 Uncompressed Size     000010B8 (4280)\n+\n+19493C LOCAL HEADER #373     04034B50 (67324752)\n+194940 Extract Zip Spec      14 (20) '2.0'\n+194941 Extract OS            00 (0) 'MS-DOS'\n+194942 General Purpose Flag  0000 (0)\n+194944 Compression Method    0000 (0) 'Stored'\n+194946 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19494A CRC                   00000000 (0)\n+19494E Compressed Size       00000000 (0)\n+194952 Uncompressed Size     00000000 (0)\n+194956 Filename Length       0009 (9)\n+194958 Extra Length          0009 (9)\n+19495A Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x19495A: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+194963 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+194965   Length              0005 (5)\n+194967   Flags               01 (1) 'Modification'\n+194968   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19496C LOCAL HEADER #374     04034B50 (67324752)\n+194970 Extract Zip Spec      14 (20) '2.0'\n+194971 Extract OS            00 (0) 'MS-DOS'\n+194972 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+194974 Compression Method    0000 (0) 'Stored'\n+194976 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19497A CRC                   00000000 (0)\n+19497E Compressed Size       00000000 (0)\n+194982 Uncompressed Size     00000000 (0)\n+194986 Filename Length       001E (30)\n+194988 Extra Length          0009 (9)\n+19498A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19498A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1949A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1949AA   Length              0005 (5)\n+1949AC   Flags               01 (1) 'Modification'\n+1949AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1949B1 PAYLOAD\n+\n+195BFF DATA DESCRIPTOR       08074B50 (134695760)\n+195C03 CRC                   1096B4BF (278312127)\n+195C07 Compressed Size       0000124E (4686)\n+195C0B Uncompressed Size     0000124E (4686)\n+\n+195C0F CENTRAL HEADER #1     02014B50 (33639248)\n+195C13 Created Zip Spec      14 (20) '2.0'\n+195C14 Created OS            00 (0) 'MS-DOS'\n+195C15 Extract Zip Spec      14 (20) '2.0'\n+195C16 Extract OS            00 (0) 'MS-DOS'\n+195C17 General Purpose Flag  0000 (0)\n+195C19 Compression Method    0000 (0) 'Stored'\n+195C1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+195C1F CRC                   00000000 (0)\n+195C23 Compressed Size       00000000 (0)\n+195C27 Uncompressed Size     00000000 (0)\n+195C2B Filename Length       0009 (9)\n+195C2D Extra Length          0009 (9)\n+195C2F Comment Length        0000 (0)\n+195C31 Disk Start            0000 (0)\n+195C33 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+195C35 Ext File Attributes   00000000 (0)\n+195C39 Local Header Offset   00000000 (0)\n+195C3D Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x195C3D: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+195C46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+195C48   Length              0005 (5)\n+195C4A   Flags               01 (1) 'Modification'\n+195C4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+195C4F CENTRAL HEADER #2     02014B50 (33639248)\n+195C53 Created Zip Spec      14 (20) '2.0'\n+195C54 Created OS            00 (0) 'MS-DOS'\n+195C55 Extract Zip Spec      14 (20) '2.0'\n+195C56 Extract OS            00 (0) 'MS-DOS'\n+195C57 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+195C59 Compression Method    0000 (0) 'Stored'\n+195C5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+195C5F CRC                   84843D83 (2223259011)\n+195C63 Compressed Size       00000753 (1875)\n+195C67 Uncompressed Size     00000753 (1875)\n+195C6B Filename Length       0015 (21)\n+195C6D Extra Length          0009 (9)\n+195C6F Comment Length        0000 (0)\n+195C71 Disk Start            0000 (0)\n+195C73 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+195C75 Ext File Attributes   00000000 (0)\n+195C79 Local Header Offset   00000030 (48)\n+195C7D Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x195C7D: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+195C92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+195C94   Length              0005 (5)\n+195C96   Flags               01 (1) 'Modification'\n+195C97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+195C9B CENTRAL HEADER #3     02014B50 (33639248)\n+195C9F Created Zip Spec      14 (20) '2.0'\n+195CA0 Created OS            00 (0) 'MS-DOS'\n+195CA1 Extract Zip Spec      14 (20) '2.0'\n+195CA2 Extract OS            00 (0) 'MS-DOS'\n+195CA3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+195CA5 Compression Method    0000 (0) 'Stored'\n+195CA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+195CAB CRC                   86E2B4B4 (2263004340)\n+195CAF Compressed Size       00002C5E (11358)\n+195CB3 Uncompressed Size     00002C5E (11358)\n+195CB7 Filename Length       0010 (16)\n+195CB9 Extra Length          0009 (9)\n+195CBB Comment Length        0000 (0)\n+195CBD Disk Start            0000 (0)\n+195CBF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+195CC1 Ext File Attributes   00000000 (0)\n+195CC5 Local Header Offset   000007CF (1999)\n+195CC9 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x195CC9: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+195CD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+195CDB   Length              0005 (5)\n+195CDD   Flags               01 (1) 'Modification'\n+195CDE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+195CE2 CENTRAL HEADER #4     02014B50 (33639248)\n+195CE6 Created Zip Spec      14 (20) '2.0'\n+195CE7 Created OS            00 (0) 'MS-DOS'\n+195CE8 Extract Zip Spec      14 (20) '2.0'\n+195CE9 Extract OS            00 (0) 'MS-DOS'\n+195CEA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+195CEC Compression Method    0000 (0) 'Stored'\n+195CEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+195CF2 CRC                   EE027FB2 (3993141170)\n+195CF6 Compressed Size       00000019 (25)\n+195CFA Uncompressed Size     00000019 (25)\n+195CFE Filename Length       0014 (20)\n+195D00 Extra Length          0009 (9)\n+195D02 Comment Length        0000 (0)\n+195D04 Disk Start            0000 (0)\n+195D06 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+195D08 Ext File Attributes   00000000 (0)\n+195D0C Local Header Offset   00003474 (13428)\n+195D10 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x195D10: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+195D24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+195D26   Length              0005 (5)\n+195D28   Flags               01 (1) 'Modification'\n+195D29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+195D2D CENTRAL HEADER #5     02014B50 (33639248)\n+195D31 Created Zip Spec      14 (20) '2.0'\n+195D32 Created OS            00 (0) 'MS-DOS'\n+195D33 Extract Zip Spec      14 (20) '2.0'\n+195D34 Extract OS            00 (0) 'MS-DOS'\n+195D35 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+195D37 Compression Method    0000 (0) 'Stored'\n+195D39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+195D3D CRC                   59F12043 (1508974659)\n+195D41 Compressed Size       000000A9 (169)\n+195D45 Uncompressed Size     000000A9 (169)\n+195D49 Filename Length       000F (15)\n+195D4B Extra Length          0009 (9)\n+195D4D Comment Length        0000 (0)\n+195D4F Disk Start            0000 (0)\n+195D51 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+195D53 Ext File Attributes   00000000 (0)\n+195D57 Local Header Offset   000034D8 (13528)\n+195D5B Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x195D5B: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+195D6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+195D6C   Length              0005 (5)\n+195D6E   Flags               01 (1) 'Modification'\n+195D6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+195D73 CENTRAL HEADER #6     02014B50 (33639248)\n+195D77 Created Zip Spec      14 (20) '2.0'\n+195D78 Created OS            00 (0) 'MS-DOS'\n+195D79 Extract Zip Spec      14 (20) '2.0'\n+195D7A Extract OS            00 (0) 'MS-DOS'\n+195D7B General Purpose Flag  0000 (0)\n+195D7D Compression Method    0000 (0) 'Stored'\n+195D7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+195D83 CRC                   00000000 (0)\n+195D87 Compressed Size       00000000 (0)\n+195D8B Uncompressed Size     00000000 (0)\n+195D8F Filename Length       000F (15)\n+195D91 Extra Length          0009 (9)\n+195D93 Comment Length        0000 (0)\n+195D95 Disk Start            0000 (0)\n+195D97 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+195D99 Ext File Attributes   00000000 (0)\n+195D9D Local Header Offset   000035C7 (13767)\n+195DA1 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x195DA1: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+195DB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+195DB2   Length              0005 (5)\n+195DB4   Flags               01 (1) 'Modification'\n+195DB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+195DB9 CENTRAL HEADER #7     02014B50 (33639248)\n+195DBD Created Zip Spec      14 (20) '2.0'\n+195DBE Created OS            00 (0) 'MS-DOS'\n+195DBF Extract Zip Spec      14 (20) '2.0'\n+195DC0 Extract OS            00 (0) 'MS-DOS'\n+195DC1 General Purpose Flag  0000 (0)\n+195DC3 Compression Method    0000 (0) 'Stored'\n+195DC5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+195DC9 CRC                   00000000 (0)\n+195DCD Compressed Size       00000000 (0)\n+195DD1 Uncompressed Size     00000000 (0)\n+195DD5 Filename Length       0018 (24)\n+195DD7 Extra Length          0009 (9)\n+195DD9 Comment Length        0000 (0)\n+195DDB Disk Start            0000 (0)\n+195DDD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+195DDF Ext File Attributes   00000000 (0)\n+195DE3 Local Header Offset   000035FD (13821)\n+195DE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x195DE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+195DFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+195E01   Length              0005 (5)\n+195E03   Flags               01 (1) 'Modification'\n+195E04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+195E08 CENTRAL HEADER #8     02014B50 (33639248)\n+195E0C Created Zip Spec      14 (20) '2.0'\n+195E0D Created OS            00 (0) 'MS-DOS'\n+195E0E Extract Zip Spec      14 (20) '2.0'\n+195E0F Extract OS            00 (0) 'MS-DOS'\n+195E10 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+195E12 Compression Method    0000 (0) 'Stored'\n+195E14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+195E18 CRC                   BC0369E6 (3154340326)\n+195E1C Compressed Size       000000C2 (194)\n+195E20 Uncompressed Size     000000C2 (194)\n+195E24 Filename Length       0041 (65)\n+195E26 Extra Length          0009 (9)\n+195E28 Comment Length        0000 (0)\n+195E2A Disk Start            0000 (0)\n+195E2C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+195E2E Ext File Attributes   00000000 (0)\n+195E32 Local Header Offset   0000363C (13884)\n+195E36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x195E36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+195E77 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+195E79   Length              0005 (5)\n+195E7B   Flags               01 (1) 'Modification'\n+195E7C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+195E80 CENTRAL HEADER #9     02014B50 (33639248)\n+195E84 Created Zip Spec      14 (20) '2.0'\n+195E85 Created OS            00 (0) 'MS-DOS'\n+195E86 Extract Zip Spec      14 (20) '2.0'\n+195E87 Extract OS            00 (0) 'MS-DOS'\n+195E88 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+195E8A Compression Method    0000 (0) 'Stored'\n+195E8C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+195E90 CRC                   C7151CD7 (3340049623)\n+195E94 Compressed Size       000000AF (175)\n+195E98 Uncompressed Size     000000AF (175)\n+195E9C Filename Length       005F (95)\n+195E9E Extra Length          0009 (9)\n+195EA0 Comment Length        0000 (0)\n+195EA2 Disk Start            0000 (0)\n+195EA4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+195EA6 Ext File Attributes   00000000 (0)\n+195EAA Local Header Offset   00003776 (14198)\n+195EAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x195EAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+195F0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+195F0F   Length              0005 (5)\n+195F11   Flags               01 (1) 'Modification'\n+195F12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+195F16 CENTRAL HEADER #10    02014B50 (33639248)\n+195F1A Created Zip Spec      14 (20) '2.0'\n+195F1B Created OS            00 (0) 'MS-DOS'\n+195F1C Extract Zip Spec      14 (20) '2.0'\n+195F1D Extract OS            00 (0) 'MS-DOS'\n+195F1E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+195F20 Compression Method    0000 (0) 'Stored'\n+195F22 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+195F26 CRC                   FD9DED40 (4254985536)\n+195F2A Compressed Size       000000A5 (165)\n+195F2E Uncompressed Size     000000A5 (165)\n+195F32 Filename Length       0044 (68)\n+195F34 Extra Length          0009 (9)\n+195F36 Comment Length        0000 (0)\n+195F38 Disk Start            0000 (0)\n+195F3A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+195F3C Ext File Attributes   00000000 (0)\n+195F40 Local Header Offset   000038BB (14523)\n+195F44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x195F44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+195F88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+195F8A   Length              0005 (5)\n+195F8C   Flags               01 (1) 'Modification'\n+195F8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+195F91 CENTRAL HEADER #11    02014B50 (33639248)\n+195F95 Created Zip Spec      14 (20) '2.0'\n+195F96 Created OS            00 (0) 'MS-DOS'\n+195F97 Extract Zip Spec      14 (20) '2.0'\n+195F98 Extract OS            00 (0) 'MS-DOS'\n+195F99 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+195F9B Compression Method    0000 (0) 'Stored'\n+195F9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+195FA1 CRC                   6F27839F (1864860575)\n+195FA5 Compressed Size       0000031C (796)\n+195FA9 Uncompressed Size     0000031C (796)\n+195FAD Filename Length       0041 (65)\n+195FAF Extra Length          0009 (9)\n+195FB1 Comment Length        0000 (0)\n+195FB3 Disk Start            0000 (0)\n+195FB5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+195FB7 Ext File Attributes   00000000 (0)\n+195FBB Local Header Offset   000039DB (14811)\n+195FBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x195FBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196000 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196002   Length              0005 (5)\n+196004   Flags               01 (1) 'Modification'\n+196005   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196009 CENTRAL HEADER #12    02014B50 (33639248)\n+19600D Created Zip Spec      14 (20) '2.0'\n+19600E Created OS            00 (0) 'MS-DOS'\n+19600F Extract Zip Spec      14 (20) '2.0'\n+196010 Extract OS            00 (0) 'MS-DOS'\n+196011 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196013 Compression Method    0000 (0) 'Stored'\n+196015 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196019 CRC                   0A4E0AA7 (172886695)\n+19601D Compressed Size       0000040A (1034)\n+196021 Uncompressed Size     0000040A (1034)\n+196025 Filename Length       0054 (84)\n+196027 Extra Length          0009 (9)\n+196029 Comment Length        0000 (0)\n+19602B Disk Start            0000 (0)\n+19602D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19602F Ext File Attributes   00000000 (0)\n+196033 Local Header Offset   00003D6F (15727)\n+196037 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196037: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19608B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19608D   Length              0005 (5)\n+19608F   Flags               01 (1) 'Modification'\n+196090   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196094 CENTRAL HEADER #13    02014B50 (33639248)\n+196098 Created Zip Spec      14 (20) '2.0'\n+196099 Created OS            00 (0) 'MS-DOS'\n+19609A Extract Zip Spec      14 (20) '2.0'\n+19609B Extract OS            00 (0) 'MS-DOS'\n+19609C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19609E Compression Method    0000 (0) 'Stored'\n+1960A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1960A4 CRC                   0FF999F7 (268016119)\n+1960A8 Compressed Size       0000008E (142)\n+1960AC Uncompressed Size     0000008E (142)\n+1960B0 Filename Length       004A (74)\n+1960B2 Extra Length          0009 (9)\n+1960B4 Comment Length        0000 (0)\n+1960B6 Disk Start            0000 (0)\n+1960B8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1960BA Ext File Attributes   00000000 (0)\n+1960BE Local Header Offset   00004204 (16900)\n+1960C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1960C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19610C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19610E   Length              0005 (5)\n+196110   Flags               01 (1) 'Modification'\n+196111   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196115 CENTRAL HEADER #14    02014B50 (33639248)\n+196119 Created Zip Spec      14 (20) '2.0'\n+19611A Created OS            00 (0) 'MS-DOS'\n+19611B Extract Zip Spec      14 (20) '2.0'\n+19611C Extract OS            00 (0) 'MS-DOS'\n+19611D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19611F Compression Method    0000 (0) 'Stored'\n+196121 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196125 CRC                   9C0450EC (2617528556)\n+196129 Compressed Size       00000044 (68)\n+19612D Uncompressed Size     00000044 (68)\n+196131 Filename Length       0042 (66)\n+196133 Extra Length          0009 (9)\n+196135 Comment Length        0000 (0)\n+196137 Disk Start            0000 (0)\n+196139 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19613B Ext File Attributes   00000000 (0)\n+19613F Local Header Offset   00004313 (17171)\n+196143 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196143: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196185 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196187   Length              0005 (5)\n+196189   Flags               01 (1) 'Modification'\n+19618A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19618E CENTRAL HEADER #15    02014B50 (33639248)\n+196192 Created Zip Spec      14 (20) '2.0'\n+196193 Created OS            00 (0) 'MS-DOS'\n+196194 Extract Zip Spec      14 (20) '2.0'\n+196195 Extract OS            00 (0) 'MS-DOS'\n+196196 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196198 Compression Method    0000 (0) 'Stored'\n+19619A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19619E CRC                   56E1501D (1457606685)\n+1961A2 Compressed Size       00000132 (306)\n+1961A6 Uncompressed Size     00000132 (306)\n+1961AA Filename Length       0044 (68)\n+1961AC Extra Length          0009 (9)\n+1961AE Comment Length        0000 (0)\n+1961B0 Disk Start            0000 (0)\n+1961B2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1961B4 Ext File Attributes   00000000 (0)\n+1961B8 Local Header Offset   000043D0 (17360)\n+1961BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1961BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196200 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196202   Length              0005 (5)\n+196204   Flags               01 (1) 'Modification'\n+196205   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196209 CENTRAL HEADER #16    02014B50 (33639248)\n+19620D Created Zip Spec      14 (20) '2.0'\n+19620E Created OS            00 (0) 'MS-DOS'\n+19620F Extract Zip Spec      14 (20) '2.0'\n+196210 Extract OS            00 (0) 'MS-DOS'\n+196211 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196213 Compression Method    0000 (0) 'Stored'\n+196215 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196219 CRC                   F0F60C18 (4042656792)\n+19621D Compressed Size       00000080 (128)\n+196221 Uncompressed Size     00000080 (128)\n+196225 Filename Length       0044 (68)\n+196227 Extra Length          0009 (9)\n+196229 Comment Length        0000 (0)\n+19622B Disk Start            0000 (0)\n+19622D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19622F Ext File Attributes   00000000 (0)\n+196233 Local Header Offset   0000457D (17789)\n+196237 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196237: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19627B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19627D   Length              0005 (5)\n+19627F   Flags               01 (1) 'Modification'\n+196280   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196284 CENTRAL HEADER #17    02014B50 (33639248)\n+196288 Created Zip Spec      14 (20) '2.0'\n+196289 Created OS            00 (0) 'MS-DOS'\n+19628A Extract Zip Spec      14 (20) '2.0'\n+19628B Extract OS            00 (0) 'MS-DOS'\n+19628C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19628E Compression Method    0000 (0) 'Stored'\n+196290 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196294 CRC                   5CED5836 (1559058486)\n+196298 Compressed Size       0000003C (60)\n+19629C Uncompressed Size     0000003C (60)\n+1962A0 Filename Length       003F (63)\n+1962A2 Extra Length          0009 (9)\n+1962A4 Comment Length        0000 (0)\n+1962A6 Disk Start            0000 (0)\n+1962A8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1962AA Ext File Attributes   00000000 (0)\n+1962AE Local Header Offset   00004678 (18040)\n+1962B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1962B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1962F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1962F3   Length              0005 (5)\n+1962F5   Flags               01 (1) 'Modification'\n+1962F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1962FA CENTRAL HEADER #18    02014B50 (33639248)\n+1962FE Created Zip Spec      14 (20) '2.0'\n+1962FF Created OS            00 (0) 'MS-DOS'\n+196300 Extract Zip Spec      14 (20) '2.0'\n+196301 Extract OS            00 (0) 'MS-DOS'\n+196302 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196304 Compression Method    0000 (0) 'Stored'\n+196306 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19630A CRC                   9C4BEDD5 (2622221781)\n+19630E Compressed Size       00000129 (297)\n+196312 Uncompressed Size     00000129 (297)\n+196316 Filename Length       0045 (69)\n+196318 Extra Length          0009 (9)\n+19631A Comment Length        0000 (0)\n+19631C Disk Start            0000 (0)\n+19631E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196320 Ext File Attributes   00000000 (0)\n+196324 Local Header Offset   0000472A (18218)\n+196328 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196328: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19636D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19636F   Length              0005 (5)\n+196371   Flags               01 (1) 'Modification'\n+196372   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196376 CENTRAL HEADER #19    02014B50 (33639248)\n+19637A Created Zip Spec      14 (20) '2.0'\n+19637B Created OS            00 (0) 'MS-DOS'\n+19637C Extract Zip Spec      14 (20) '2.0'\n+19637D Extract OS            00 (0) 'MS-DOS'\n+19637E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196380 Compression Method    0000 (0) 'Stored'\n+196382 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196386 CRC                   BF790872 (3212380274)\n+19638A Compressed Size       0000004C (76)\n+19638E Uncompressed Size     0000004C (76)\n+196392 Filename Length       0055 (85)\n+196394 Extra Length          0009 (9)\n+196396 Comment Length        0000 (0)\n+196398 Disk Start            0000 (0)\n+19639A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19639C Ext File Attributes   00000000 (0)\n+1963A0 Local Header Offset   000048CF (18639)\n+1963A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1963A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1963F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1963FB   Length              0005 (5)\n+1963FD   Flags               01 (1) 'Modification'\n+1963FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196402 CENTRAL HEADER #20    02014B50 (33639248)\n+196406 Created Zip Spec      14 (20) '2.0'\n+196407 Created OS            00 (0) 'MS-DOS'\n+196408 Extract Zip Spec      14 (20) '2.0'\n+196409 Extract OS            00 (0) 'MS-DOS'\n+19640A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19640C Compression Method    0000 (0) 'Stored'\n+19640E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196412 CRC                   CEEAECDB (3471502555)\n+196416 Compressed Size       0000006E (110)\n+19641A Uncompressed Size     0000006E (110)\n+19641E Filename Length       003E (62)\n+196420 Extra Length          0009 (9)\n+196422 Comment Length        0000 (0)\n+196424 Disk Start            0000 (0)\n+196426 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196428 Ext File Attributes   00000000 (0)\n+19642C Local Header Offset   000049A7 (18855)\n+196430 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196430: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19646E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196470   Length              0005 (5)\n+196472   Flags               01 (1) 'Modification'\n+196473   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196477 CENTRAL HEADER #21    02014B50 (33639248)\n+19647B Created Zip Spec      14 (20) '2.0'\n+19647C Created OS            00 (0) 'MS-DOS'\n+19647D Extract Zip Spec      14 (20) '2.0'\n+19647E Extract OS            00 (0) 'MS-DOS'\n+19647F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196481 Compression Method    0000 (0) 'Stored'\n+196483 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196487 CRC                   F822DEA4 (4163034788)\n+19648B Compressed Size       00000072 (114)\n+19648F Uncompressed Size     00000072 (114)\n+196493 Filename Length       0049 (73)\n+196495 Extra Length          0009 (9)\n+196497 Comment Length        0000 (0)\n+196499 Disk Start            0000 (0)\n+19649B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19649D Ext File Attributes   00000000 (0)\n+1964A1 Local Header Offset   00004A8A (19082)\n+1964A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1964A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1964EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1964F0   Length              0005 (5)\n+1964F2   Flags               01 (1) 'Modification'\n+1964F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1964F7 CENTRAL HEADER #22    02014B50 (33639248)\n+1964FB Created Zip Spec      14 (20) '2.0'\n+1964FC Created OS            00 (0) 'MS-DOS'\n+1964FD Extract Zip Spec      14 (20) '2.0'\n+1964FE Extract OS            00 (0) 'MS-DOS'\n+1964FF General Purpose Flag  0000 (0)\n+196501 Compression Method    0000 (0) 'Stored'\n+196503 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196507 CRC                   00000000 (0)\n+19650B Compressed Size       00000000 (0)\n+19650F Uncompressed Size     00000000 (0)\n+196513 Filename Length       000F (15)\n+196515 Extra Length          0009 (9)\n+196517 Comment Length        0000 (0)\n+196519 Disk Start            0000 (0)\n+19651B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19651D Ext File Attributes   00000000 (0)\n+196521 Local Header Offset   00004B7C (19324)\n+196525 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196525: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196534 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196536   Length              0005 (5)\n+196538   Flags               01 (1) 'Modification'\n+196539   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19653D CENTRAL HEADER #23    02014B50 (33639248)\n+196541 Created Zip Spec      14 (20) '2.0'\n+196542 Created OS            00 (0) 'MS-DOS'\n+196543 Extract Zip Spec      14 (20) '2.0'\n+196544 Extract OS            00 (0) 'MS-DOS'\n+196545 General Purpose Flag  0000 (0)\n+196547 Compression Method    0000 (0) 'Stored'\n+196549 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19654D CRC                   00000000 (0)\n+196551 Compressed Size       00000000 (0)\n+196555 Uncompressed Size     00000000 (0)\n+196559 Filename Length       0020 (32)\n+19655B Extra Length          0009 (9)\n+19655D Comment Length        0000 (0)\n+19655F Disk Start            0000 (0)\n+196561 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196563 Ext File Attributes   00000000 (0)\n+196567 Local Header Offset   00004BB2 (19378)\n+19656B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19656B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19658B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19658D   Length              0005 (5)\n+19658F   Flags               01 (1) 'Modification'\n+196590   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196594 CENTRAL HEADER #24    02014B50 (33639248)\n+196598 Created Zip Spec      14 (20) '2.0'\n+196599 Created OS            00 (0) 'MS-DOS'\n+19659A Extract Zip Spec      14 (20) '2.0'\n+19659B Extract OS            00 (0) 'MS-DOS'\n+19659C General Purpose Flag  0000 (0)\n+19659E Compression Method    0000 (0) 'Stored'\n+1965A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1965A4 CRC                   00000000 (0)\n+1965A8 Compressed Size       00000000 (0)\n+1965AC Uncompressed Size     00000000 (0)\n+1965B0 Filename Length       002D (45)\n+1965B2 Extra Length          0009 (9)\n+1965B4 Comment Length        0000 (0)\n+1965B6 Disk Start            0000 (0)\n+1965B8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1965BA Ext File Attributes   00000000 (0)\n+1965BE Local Header Offset   00004BF9 (19449)\n+1965C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1965C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1965EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1965F1   Length              0005 (5)\n+1965F3   Flags               01 (1) 'Modification'\n+1965F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1965F8 CENTRAL HEADER #25    02014B50 (33639248)\n+1965FC Created Zip Spec      14 (20) '2.0'\n+1965FD Created OS            00 (0) 'MS-DOS'\n+1965FE Extract Zip Spec      14 (20) '2.0'\n+1965FF Extract OS            00 (0) 'MS-DOS'\n+196600 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196602 Compression Method    0000 (0) 'Stored'\n+196604 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196608 CRC                   00000000 (0)\n+19660C Compressed Size       00000000 (0)\n+196610 Uncompressed Size     00000000 (0)\n+196614 Filename Length       003B (59)\n+196616 Extra Length          0009 (9)\n+196618 Comment Length        0000 (0)\n+19661A Disk Start            0000 (0)\n+19661C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19661E Ext File Attributes   00000000 (0)\n+196622 Local Header Offset   00004C4D (19533)\n+196626 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196626: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196661 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196663   Length              0005 (5)\n+196665   Flags               01 (1) 'Modification'\n+196666   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19666A CENTRAL HEADER #26    02014B50 (33639248)\n+19666E Created Zip Spec      14 (20) '2.0'\n+19666F Created OS            00 (0) 'MS-DOS'\n+196670 Extract Zip Spec      14 (20) '2.0'\n+196671 Extract OS            00 (0) 'MS-DOS'\n+196672 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196674 Compression Method    0000 (0) 'Stored'\n+196676 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19667A CRC                   CDE8C563 (3454584163)\n+19667E Compressed Size       00000B50 (2896)\n+196682 Uncompressed Size     00000B50 (2896)\n+196686 Filename Length       0034 (52)\n+196688 Extra Length          0009 (9)\n+19668A Comment Length        0000 (0)\n+19668C Disk Start            0000 (0)\n+19668E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196690 Ext File Attributes   00000000 (0)\n+196694 Local Header Offset   00004CBF (19647)\n+196698 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196698: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1966CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1966CE   Length              0005 (5)\n+1966D0   Flags               01 (1) 'Modification'\n+1966D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1966D5 CENTRAL HEADER #27    02014B50 (33639248)\n+1966D9 Created Zip Spec      14 (20) '2.0'\n+1966DA Created OS            00 (0) 'MS-DOS'\n+1966DB Extract Zip Spec      14 (20) '2.0'\n+1966DC Extract OS            00 (0) 'MS-DOS'\n+1966DD General Purpose Flag  0000 (0)\n+1966DF Compression Method    0000 (0) 'Stored'\n+1966E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1966E5 CRC                   00000000 (0)\n+1966E9 Compressed Size       00000000 (0)\n+1966ED Uncompressed Size     00000000 (0)\n+1966F1 Filename Length       0012 (18)\n+1966F3 Extra Length          0009 (9)\n+1966F5 Comment Length        0000 (0)\n+1966F7 Disk Start            0000 (0)\n+1966F9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1966FB Ext File Attributes   00000000 (0)\n+1966FF Local Header Offset   0000587A (22650)\n+196703 Filename              'XXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196703: Filename 'XXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196715 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196717   Length              0005 (5)\n+196719   Flags               01 (1) 'Modification'\n+19671A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19671E CENTRAL HEADER #28    02014B50 (33639248)\n+196722 Created Zip Spec      14 (20) '2.0'\n+196723 Created OS            00 (0) 'MS-DOS'\n+196724 Extract Zip Spec      14 (20) '2.0'\n+196725 Extract OS            00 (0) 'MS-DOS'\n+196726 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196728 Compression Method    0000 (0) 'Stored'\n+19672A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19672E CRC                   40B03A55 (1085291093)\n+196732 Compressed Size       000000B1 (177)\n+196736 Uncompressed Size     000000B1 (177)\n+19673A Filename Length       0043 (67)\n+19673C Extra Length          0009 (9)\n+19673E Comment Length        0000 (0)\n+196740 Disk Start            0000 (0)\n+196742 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196744 Ext File Attributes   00000000 (0)\n+196748 Local Header Offset   000058B3 (22707)\n+19674C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19674C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19678F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196791   Length              0005 (5)\n+196793   Flags               01 (1) 'Modification'\n+196794   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196798 CENTRAL HEADER #29    02014B50 (33639248)\n+19679C Created Zip Spec      14 (20) '2.0'\n+19679D Created OS            00 (0) 'MS-DOS'\n+19679E Extract Zip Spec      14 (20) '2.0'\n+19679F Extract OS            00 (0) 'MS-DOS'\n+1967A0 General Purpose Flag  0000 (0)\n+1967A2 Compression Method    0000 (0) 'Stored'\n+1967A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1967A8 CRC                   00000000 (0)\n+1967AC Compressed Size       00000000 (0)\n+1967B0 Uncompressed Size     00000000 (0)\n+1967B4 Filename Length       0004 (4)\n+1967B6 Extra Length          0009 (9)\n+1967B8 Comment Length        0000 (0)\n+1967BA Disk Start            0000 (0)\n+1967BC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1967BE Ext File Attributes   00000000 (0)\n+1967C2 Local Header Offset   000059DE (23006)\n+1967C6 Filename              'XXXX'\n+#\n+# WARNING: Offset 0x1967C6: Filename 'XXXX'\n+#          Zero length filename\n+#\n+1967CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1967CC   Length              0005 (5)\n+1967CE   Flags               01 (1) 'Modification'\n+1967CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1967D3 CENTRAL HEADER #30    02014B50 (33639248)\n+1967D7 Created Zip Spec      14 (20) '2.0'\n+1967D8 Created OS            00 (0) 'MS-DOS'\n+1967D9 Extract Zip Spec      14 (20) '2.0'\n+1967DA Extract OS            00 (0) 'MS-DOS'\n+1967DB General Purpose Flag  0000 (0)\n+1967DD Compression Method    0000 (0) 'Stored'\n+1967DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1967E3 CRC                   00000000 (0)\n+1967E7 Compressed Size       00000000 (0)\n+1967EB Uncompressed Size     00000000 (0)\n+1967EF Filename Length       000C (12)\n+1967F1 Extra Length          0009 (9)\n+1967F3 Comment Length        0000 (0)\n+1967F5 Disk Start            0000 (0)\n+1967F7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1967F9 Ext File Attributes   00000000 (0)\n+1967FD Local Header Offset   00005A09 (23049)\n+196801 Filename              'XXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196801: Filename 'XXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19680D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19680F   Length              0005 (5)\n+196811   Flags               01 (1) 'Modification'\n+196812   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196816 CENTRAL HEADER #31    02014B50 (33639248)\n+19681A Created Zip Spec      14 (20) '2.0'\n+19681B Created OS            00 (0) 'MS-DOS'\n+19681C Extract Zip Spec      14 (20) '2.0'\n+19681D Extract OS            00 (0) 'MS-DOS'\n+19681E General Purpose Flag  0000 (0)\n+196820 Compression Method    0000 (0) 'Stored'\n+196822 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196826 CRC                   00000000 (0)\n+19682A Compressed Size       00000000 (0)\n+19682E Uncompressed Size     00000000 (0)\n+196832 Filename Length       0012 (18)\n+196834 Extra Length          0009 (9)\n+196836 Comment Length        0000 (0)\n+196838 Disk Start            0000 (0)\n+19683A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19683C Ext File Attributes   00000000 (0)\n+196840 Local Header Offset   00005A3C (23100)\n+196844 Filename              'XXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196844: Filename 'XXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196856 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196858   Length              0005 (5)\n+19685A   Flags               01 (1) 'Modification'\n+19685B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19685F CENTRAL HEADER #32    02014B50 (33639248)\n+196863 Created Zip Spec      14 (20) '2.0'\n+196864 Created OS            00 (0) 'MS-DOS'\n+196865 Extract Zip Spec      14 (20) '2.0'\n+196866 Extract OS            00 (0) 'MS-DOS'\n+196867 General Purpose Flag  0000 (0)\n+196869 Compression Method    0000 (0) 'Stored'\n+19686B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19686F CRC                   00000000 (0)\n+196873 Compressed Size       00000000 (0)\n+196877 Uncompressed Size     00000000 (0)\n+19687B Filename Length       0019 (25)\n+19687D Extra Length          0009 (9)\n+19687F Comment Length        0000 (0)\n+196881 Disk Start            0000 (0)\n+196883 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196885 Ext File Attributes   00000000 (0)\n+196889 Local Header Offset   00005A75 (23157)\n+19688D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19688D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1968A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1968A8   Length              0005 (5)\n+1968AA   Flags               01 (1) 'Modification'\n+1968AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1968AF CENTRAL HEADER #33    02014B50 (33639248)\n+1968B3 Created Zip Spec      14 (20) '2.0'\n+1968B4 Created OS            00 (0) 'MS-DOS'\n+1968B5 Extract Zip Spec      14 (20) '2.0'\n+1968B6 Extract OS            00 (0) 'MS-DOS'\n+1968B7 General Purpose Flag  0000 (0)\n+1968B9 Compression Method    0000 (0) 'Stored'\n+1968BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1968BF CRC                   00000000 (0)\n+1968C3 Compressed Size       00000000 (0)\n+1968C7 Uncompressed Size     00000000 (0)\n+1968CB Filename Length       0023 (35)\n+1968CD Extra Length          0009 (9)\n+1968CF Comment Length        0000 (0)\n+1968D1 Disk Start            0000 (0)\n+1968D3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1968D5 Ext File Attributes   00000000 (0)\n+1968D9 Local Header Offset   00005AB5 (23221)\n+1968DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1968DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196900 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196902   Length              0005 (5)\n+196904   Flags               01 (1) 'Modification'\n+196905   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196909 CENTRAL HEADER #34    02014B50 (33639248)\n+19690D Created Zip Spec      14 (20) '2.0'\n+19690E Created OS            00 (0) 'MS-DOS'\n+19690F Extract Zip Spec      14 (20) '2.0'\n+196910 Extract OS            00 (0) 'MS-DOS'\n+196911 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196913 Compression Method    0000 (0) 'Stored'\n+196915 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196919 CRC                   87D33073 (2278764659)\n+19691D Compressed Size       000005CF (1487)\n+196921 Uncompressed Size     000005CF (1487)\n+196925 Filename Length       0030 (48)\n+196927 Extra Length          0009 (9)\n+196929 Comment Length        0000 (0)\n+19692B Disk Start            0000 (0)\n+19692D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19692F Ext File Attributes   00000000 (0)\n+196933 Local Header Offset   00005AFF (23295)\n+196937 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196937: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196967 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196969   Length              0005 (5)\n+19696B   Flags               01 (1) 'Modification'\n+19696C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196970 CENTRAL HEADER #35    02014B50 (33639248)\n+196974 Created Zip Spec      14 (20) '2.0'\n+196975 Created OS            00 (0) 'MS-DOS'\n+196976 Extract Zip Spec      14 (20) '2.0'\n+196977 Extract OS            00 (0) 'MS-DOS'\n+196978 General Purpose Flag  0000 (0)\n+19697A Compression Method    0000 (0) 'Stored'\n+19697C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196980 CRC                   00000000 (0)\n+196984 Compressed Size       00000000 (0)\n+196988 Uncompressed Size     00000000 (0)\n+19698C Filename Length       0019 (25)\n+19698E Extra Length          0009 (9)\n+196990 Comment Length        0000 (0)\n+196992 Disk Start            0000 (0)\n+196994 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196996 Ext File Attributes   00000000 (0)\n+19699A Local Header Offset   00006135 (24885)\n+19699E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19699E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1969B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1969B9   Length              0005 (5)\n+1969BB   Flags               01 (1) 'Modification'\n+1969BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1969C0 CENTRAL HEADER #36    02014B50 (33639248)\n+1969C4 Created Zip Spec      14 (20) '2.0'\n+1969C5 Created OS            00 (0) 'MS-DOS'\n+1969C6 Extract Zip Spec      14 (20) '2.0'\n+1969C7 Extract OS            00 (0) 'MS-DOS'\n+1969C8 General Purpose Flag  0000 (0)\n+1969CA Compression Method    0000 (0) 'Stored'\n+1969CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1969D0 CRC                   00000000 (0)\n+1969D4 Compressed Size       00000000 (0)\n+1969D8 Uncompressed Size     00000000 (0)\n+1969DC Filename Length       0024 (36)\n+1969DE Extra Length          0009 (9)\n+1969E0 Comment Length        0000 (0)\n+1969E2 Disk Start            0000 (0)\n+1969E4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1969E6 Ext File Attributes   00000000 (0)\n+1969EA Local Header Offset   00006175 (24949)\n+1969EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1969EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196A12 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196A14   Length              0005 (5)\n+196A16   Flags               01 (1) 'Modification'\n+196A17   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196A1B CENTRAL HEADER #37    02014B50 (33639248)\n+196A1F Created Zip Spec      14 (20) '2.0'\n+196A20 Created OS            00 (0) 'MS-DOS'\n+196A21 Extract Zip Spec      14 (20) '2.0'\n+196A22 Extract OS            00 (0) 'MS-DOS'\n+196A23 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196A25 Compression Method    0000 (0) 'Stored'\n+196A27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196A2B CRC                   79620788 (2036467592)\n+196A2F Compressed Size       00000AB0 (2736)\n+196A33 Uncompressed Size     00000AB0 (2736)\n+196A37 Filename Length       0032 (50)\n+196A39 Extra Length          0009 (9)\n+196A3B Comment Length        0000 (0)\n+196A3D Disk Start            0000 (0)\n+196A3F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196A41 Ext File Attributes   00000000 (0)\n+196A45 Local Header Offset   000061C0 (25024)\n+196A49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196A49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196A7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196A7D   Length              0005 (5)\n+196A7F   Flags               01 (1) 'Modification'\n+196A80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196A84 CENTRAL HEADER #38    02014B50 (33639248)\n+196A88 Created Zip Spec      14 (20) '2.0'\n+196A89 Created OS            00 (0) 'MS-DOS'\n+196A8A Extract Zip Spec      14 (20) '2.0'\n+196A8B Extract OS            00 (0) 'MS-DOS'\n+196A8C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196A8E Compression Method    0000 (0) 'Stored'\n+196A90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196A94 CRC                   C8043322 (3355718434)\n+196A98 Compressed Size       00000B0F (2831)\n+196A9C Uncompressed Size     00000B0F (2831)\n+196AA0 Filename Length       0030 (48)\n+196AA2 Extra Length          0009 (9)\n+196AA4 Comment Length        0000 (0)\n+196AA6 Disk Start            0000 (0)\n+196AA8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196AAA Ext File Attributes   00000000 (0)\n+196AAE Local Header Offset   00006CD9 (27865)\n+196AB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196AB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196AE2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196AE4   Length              0005 (5)\n+196AE6   Flags               01 (1) 'Modification'\n+196AE7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196AEB CENTRAL HEADER #39    02014B50 (33639248)\n+196AEF Created Zip Spec      14 (20) '2.0'\n+196AF0 Created OS            00 (0) 'MS-DOS'\n+196AF1 Extract Zip Spec      14 (20) '2.0'\n+196AF2 Extract OS            00 (0) 'MS-DOS'\n+196AF3 General Purpose Flag  0000 (0)\n+196AF5 Compression Method    0000 (0) 'Stored'\n+196AF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196AFB CRC                   00000000 (0)\n+196AFF Compressed Size       00000000 (0)\n+196B03 Uncompressed Size     00000000 (0)\n+196B07 Filename Length       0004 (4)\n+196B09 Extra Length          0009 (9)\n+196B0B Comment Length        0000 (0)\n+196B0D Disk Start            0000 (0)\n+196B0F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196B11 Ext File Attributes   00000000 (0)\n+196B15 Local Header Offset   0000784F (30799)\n+196B19 Filename              'XXXX'\n+#\n+# WARNING: Offset 0x196B19: Filename 'XXXX'\n+#          Zero length filename\n+#\n+196B1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196B1F   Length              0005 (5)\n+196B21   Flags               01 (1) 'Modification'\n+196B22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196B26 CENTRAL HEADER #40    02014B50 (33639248)\n+196B2A Created Zip Spec      14 (20) '2.0'\n+196B2B Created OS            00 (0) 'MS-DOS'\n+196B2C Extract Zip Spec      14 (20) '2.0'\n+196B2D Extract OS            00 (0) 'MS-DOS'\n+196B2E General Purpose Flag  0000 (0)\n+196B30 Compression Method    0000 (0) 'Stored'\n+196B32 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196B36 CRC                   00000000 (0)\n+196B3A Compressed Size       00000000 (0)\n+196B3E Uncompressed Size     00000000 (0)\n+196B42 Filename Length       000B (11)\n+196B44 Extra Length          0009 (9)\n+196B46 Comment Length        0000 (0)\n+196B48 Disk Start            0000 (0)\n+196B4A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196B4C Ext File Attributes   00000000 (0)\n+196B50 Local Header Offset   0000787A (30842)\n+196B54 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196B54: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196B5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196B61   Length              0005 (5)\n+196B63   Flags               01 (1) 'Modification'\n+196B64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196B68 CENTRAL HEADER #41    02014B50 (33639248)\n+196B6C Created Zip Spec      14 (20) '2.0'\n+196B6D Created OS            00 (0) 'MS-DOS'\n+196B6E Extract Zip Spec      14 (20) '2.0'\n+196B6F Extract OS            00 (0) 'MS-DOS'\n+196B70 General Purpose Flag  0000 (0)\n+196B72 Compression Method    0000 (0) 'Stored'\n+196B74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196B78 CRC                   00000000 (0)\n+196B7C Compressed Size       00000000 (0)\n+196B80 Uncompressed Size     00000000 (0)\n+196B84 Filename Length       0011 (17)\n+196B86 Extra Length          0009 (9)\n+196B88 Comment Length        0000 (0)\n+196B8A Disk Start            0000 (0)\n+196B8C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196B8E Ext File Attributes   00000000 (0)\n+196B92 Local Header Offset   000078AC (30892)\n+196B96 Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196B96: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196BA7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196BA9   Length              0005 (5)\n+196BAB   Flags               01 (1) 'Modification'\n+196BAC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196BB0 CENTRAL HEADER #42    02014B50 (33639248)\n+196BB4 Created Zip Spec      14 (20) '2.0'\n+196BB5 Created OS            00 (0) 'MS-DOS'\n+196BB6 Extract Zip Spec      14 (20) '2.0'\n+196BB7 Extract OS            00 (0) 'MS-DOS'\n+196BB8 General Purpose Flag  0000 (0)\n+196BBA Compression Method    0000 (0) 'Stored'\n+196BBC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196BC0 CRC                   00000000 (0)\n+196BC4 Compressed Size       00000000 (0)\n+196BC8 Uncompressed Size     00000000 (0)\n+196BCC Filename Length       0018 (24)\n+196BCE Extra Length          0009 (9)\n+196BD0 Comment Length        0000 (0)\n+196BD2 Disk Start            0000 (0)\n+196BD4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196BD6 Ext File Attributes   00000000 (0)\n+196BDA Local Header Offset   000078E4 (30948)\n+196BDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196BDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196BF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196BF8   Length              0005 (5)\n+196BFA   Flags               01 (1) 'Modification'\n+196BFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196BFF CENTRAL HEADER #43    02014B50 (33639248)\n+196C03 Created Zip Spec      14 (20) '2.0'\n+196C04 Created OS            00 (0) 'MS-DOS'\n+196C05 Extract Zip Spec      14 (20) '2.0'\n+196C06 Extract OS            00 (0) 'MS-DOS'\n+196C07 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196C09 Compression Method    0000 (0) 'Stored'\n+196C0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196C0F CRC                   7A6AA41E (2053809182)\n+196C13 Compressed Size       00001180 (4480)\n+196C17 Uncompressed Size     00001180 (4480)\n+196C1B Filename Length       0030 (48)\n+196C1D Extra Length          0009 (9)\n+196C1F Comment Length        0000 (0)\n+196C21 Disk Start            0000 (0)\n+196C23 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196C25 Ext File Attributes   00000000 (0)\n+196C29 Local Header Offset   00007923 (31011)\n+196C2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196C2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196C5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196C5F   Length              0005 (5)\n+196C61   Flags               01 (1) 'Modification'\n+196C62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196C66 CENTRAL HEADER #44    02014B50 (33639248)\n+196C6A Created Zip Spec      14 (20) '2.0'\n+196C6B Created OS            00 (0) 'MS-DOS'\n+196C6C Extract Zip Spec      14 (20) '2.0'\n+196C6D Extract OS            00 (0) 'MS-DOS'\n+196C6E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196C70 Compression Method    0000 (0) 'Stored'\n+196C72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196C76 CRC                   00F537FE (16070654)\n+196C7A Compressed Size       00000577 (1399)\n+196C7E Uncompressed Size     00000577 (1399)\n+196C82 Filename Length       0029 (41)\n+196C84 Extra Length          0009 (9)\n+196C86 Comment Length        0000 (0)\n+196C88 Disk Start            0000 (0)\n+196C8A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196C8C Ext File Attributes   00000000 (0)\n+196C90 Local Header Offset   00008B0A (35594)\n+196C94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196C94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196CBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196CBF   Length              0005 (5)\n+196CC1   Flags               01 (1) 'Modification'\n+196CC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196CC6 CENTRAL HEADER #45    02014B50 (33639248)\n+196CCA Created Zip Spec      14 (20) '2.0'\n+196CCB Created OS            00 (0) 'MS-DOS'\n+196CCC Extract Zip Spec      14 (20) '2.0'\n+196CCD Extract OS            00 (0) 'MS-DOS'\n+196CCE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196CD0 Compression Method    0000 (0) 'Stored'\n+196CD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196CD6 CRC                   1CCCA507 (483173639)\n+196CDA Compressed Size       000009AB (2475)\n+196CDE Uncompressed Size     000009AB (2475)\n+196CE2 Filename Length       0026 (38)\n+196CE4 Extra Length          0009 (9)\n+196CE6 Comment Length        0000 (0)\n+196CE8 Disk Start            0000 (0)\n+196CEA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196CEC Ext File Attributes   00000000 (0)\n+196CF0 Local Header Offset   000090E1 (37089)\n+196CF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196CF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196D1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196D1C   Length              0005 (5)\n+196D1E   Flags               01 (1) 'Modification'\n+196D1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196D23 CENTRAL HEADER #46    02014B50 (33639248)\n+196D27 Created Zip Spec      14 (20) '2.0'\n+196D28 Created OS            00 (0) 'MS-DOS'\n+196D29 Extract Zip Spec      14 (20) '2.0'\n+196D2A Extract OS            00 (0) 'MS-DOS'\n+196D2B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196D2D Compression Method    0000 (0) 'Stored'\n+196D2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196D33 CRC                   0622E0A0 (102949024)\n+196D37 Compressed Size       0000049F (1183)\n+196D3B Uncompressed Size     0000049F (1183)\n+196D3F Filename Length       0021 (33)\n+196D41 Extra Length          0009 (9)\n+196D43 Comment Length        0000 (0)\n+196D45 Disk Start            0000 (0)\n+196D47 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196D49 Ext File Attributes   00000000 (0)\n+196D4D Local Header Offset   00009AE9 (39657)\n+196D51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196D51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196D72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196D74   Length              0005 (5)\n+196D76   Flags               01 (1) 'Modification'\n+196D77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196D7B CENTRAL HEADER #47    02014B50 (33639248)\n+196D7F Created Zip Spec      14 (20) '2.0'\n+196D80 Created OS            00 (0) 'MS-DOS'\n+196D81 Extract Zip Spec      14 (20) '2.0'\n+196D82 Extract OS            00 (0) 'MS-DOS'\n+196D83 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196D85 Compression Method    0000 (0) 'Stored'\n+196D87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196D8B CRC                   3DF15F74 (1039228788)\n+196D8F Compressed Size       0000229A (8858)\n+196D93 Uncompressed Size     0000229A (8858)\n+196D97 Filename Length       0027 (39)\n+196D99 Extra Length          0009 (9)\n+196D9B Comment Length        0000 (0)\n+196D9D Disk Start            0000 (0)\n+196D9F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196DA1 Ext File Attributes   00000000 (0)\n+196DA5 Local Header Offset   00009FE0 (40928)\n+196DA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196DA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196DD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196DD2   Length              0005 (5)\n+196DD4   Flags               01 (1) 'Modification'\n+196DD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196DD9 CENTRAL HEADER #48    02014B50 (33639248)\n+196DDD Created Zip Spec      14 (20) '2.0'\n+196DDE Created OS            00 (0) 'MS-DOS'\n+196DDF Extract Zip Spec      14 (20) '2.0'\n+196DE0 Extract OS            00 (0) 'MS-DOS'\n+196DE1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196DE3 Compression Method    0000 (0) 'Stored'\n+196DE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196DE9 CRC                   52712A03 (1383148035)\n+196DED Compressed Size       000003E8 (1000)\n+196DF1 Uncompressed Size     000003E8 (1000)\n+196DF5 Filename Length       0026 (38)\n+196DF7 Extra Length          0009 (9)\n+196DF9 Comment Length        0000 (0)\n+196DFB Disk Start            0000 (0)\n+196DFD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196DFF Ext File Attributes   00000000 (0)\n+196E03 Local Header Offset   0000C2D8 (49880)\n+196E07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196E07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196E2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196E2F   Length              0005 (5)\n+196E31   Flags               01 (1) 'Modification'\n+196E32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196E36 CENTRAL HEADER #49    02014B50 (33639248)\n+196E3A Created Zip Spec      14 (20) '2.0'\n+196E3B Created OS            00 (0) 'MS-DOS'\n+196E3C Extract Zip Spec      14 (20) '2.0'\n+196E3D Extract OS            00 (0) 'MS-DOS'\n+196E3E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196E40 Compression Method    0000 (0) 'Stored'\n+196E42 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196E46 CRC                   4B96BF4D (1268170573)\n+196E4A Compressed Size       00011389 (70537)\n+196E4E Uncompressed Size     00011389 (70537)\n+196E52 Filename Length       0020 (32)\n+196E54 Extra Length          0009 (9)\n+196E56 Comment Length        0000 (0)\n+196E58 Disk Start            0000 (0)\n+196E5A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196E5C Ext File Attributes   00000000 (0)\n+196E60 Local Header Offset   0000C71D (50973)\n+196E64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196E64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196E84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196E86   Length              0005 (5)\n+196E88   Flags               01 (1) 'Modification'\n+196E89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196E8D CENTRAL HEADER #50    02014B50 (33639248)\n+196E91 Created Zip Spec      14 (20) '2.0'\n+196E92 Created OS            00 (0) 'MS-DOS'\n+196E93 Extract Zip Spec      14 (20) '2.0'\n+196E94 Extract OS            00 (0) 'MS-DOS'\n+196E95 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196E97 Compression Method    0000 (0) 'Stored'\n+196E99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196E9D CRC                   E6F6EE92 (3874942610)\n+196EA1 Compressed Size       00003564 (13668)\n+196EA5 Uncompressed Size     00003564 (13668)\n+196EA9 Filename Length       0027 (39)\n+196EAB Extra Length          0009 (9)\n+196EAD Comment Length        0000 (0)\n+196EAF Disk Start            0000 (0)\n+196EB1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196EB3 Ext File Attributes   00000000 (0)\n+196EB7 Local Header Offset   0001DAFD (121597)\n+196EBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196EBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196EE2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196EE4   Length              0005 (5)\n+196EE6   Flags               01 (1) 'Modification'\n+196EE7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196EEB CENTRAL HEADER #51    02014B50 (33639248)\n+196EEF Created Zip Spec      14 (20) '2.0'\n+196EF0 Created OS            00 (0) 'MS-DOS'\n+196EF1 Extract Zip Spec      14 (20) '2.0'\n+196EF2 Extract OS            00 (0) 'MS-DOS'\n+196EF3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196EF5 Compression Method    0000 (0) 'Stored'\n+196EF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196EFB CRC                   D525E52E (3576030510)\n+196EFF Compressed Size       00003610 (13840)\n+196F03 Uncompressed Size     00003610 (13840)\n+196F07 Filename Length       0029 (41)\n+196F09 Extra Length          0009 (9)\n+196F0B Comment Length        0000 (0)\n+196F0D Disk Start            0000 (0)\n+196F0F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196F11 Ext File Attributes   00000000 (0)\n+196F15 Local Header Offset   000210BF (135359)\n+196F19 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196F19: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196F42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196F44   Length              0005 (5)\n+196F46   Flags               01 (1) 'Modification'\n+196F47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196F4B CENTRAL HEADER #52    02014B50 (33639248)\n+196F4F Created Zip Spec      14 (20) '2.0'\n+196F50 Created OS            00 (0) 'MS-DOS'\n+196F51 Extract Zip Spec      14 (20) '2.0'\n+196F52 Extract OS            00 (0) 'MS-DOS'\n+196F53 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+196F55 Compression Method    0000 (0) 'Stored'\n+196F57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196F5B CRC                   82E9AE97 (2196352663)\n+196F5F Compressed Size       0000273B (10043)\n+196F63 Uncompressed Size     0000273B (10043)\n+196F67 Filename Length       0024 (36)\n+196F69 Extra Length          0009 (9)\n+196F6B Comment Length        0000 (0)\n+196F6D Disk Start            0000 (0)\n+196F6F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196F71 Ext File Attributes   00000000 (0)\n+196F75 Local Header Offset   0002472F (149295)\n+196F79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196F79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196F9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196F9F   Length              0005 (5)\n+196FA1   Flags               01 (1) 'Modification'\n+196FA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196FA6 CENTRAL HEADER #53    02014B50 (33639248)\n+196FAA Created Zip Spec      14 (20) '2.0'\n+196FAB Created OS            00 (0) 'MS-DOS'\n+196FAC Extract Zip Spec      14 (20) '2.0'\n+196FAD Extract OS            00 (0) 'MS-DOS'\n+196FAE General Purpose Flag  0000 (0)\n+196FB0 Compression Method    0000 (0) 'Stored'\n+196FB2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+196FB6 CRC                   00000000 (0)\n+196FBA Compressed Size       00000000 (0)\n+196FBE Uncompressed Size     00000000 (0)\n+196FC2 Filename Length       0021 (33)\n+196FC4 Extra Length          0009 (9)\n+196FC6 Comment Length        0000 (0)\n+196FC8 Disk Start            0000 (0)\n+196FCA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+196FCC Ext File Attributes   00000000 (0)\n+196FD0 Local Header Offset   00026EC5 (159429)\n+196FD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x196FD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+196FF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+196FF7   Length              0005 (5)\n+196FF9   Flags               01 (1) 'Modification'\n+196FFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+196FFE CENTRAL HEADER #54    02014B50 (33639248)\n+197002 Created Zip Spec      14 (20) '2.0'\n+197003 Created OS            00 (0) 'MS-DOS'\n+197004 Extract Zip Spec      14 (20) '2.0'\n+197005 Extract OS            00 (0) 'MS-DOS'\n+197006 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197008 Compression Method    0000 (0) 'Stored'\n+19700A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19700E CRC                   62810B39 (1652624185)\n+197012 Compressed Size       00000554 (1364)\n+197016 Uncompressed Size     00000554 (1364)\n+19701A Filename Length       0036 (54)\n+19701C Extra Length          0009 (9)\n+19701E Comment Length        0000 (0)\n+197020 Disk Start            0000 (0)\n+197022 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197024 Ext File Attributes   00000000 (0)\n+197028 Local Header Offset   00026F0D (159501)\n+19702C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19702C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197062 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197064   Length              0005 (5)\n+197066   Flags               01 (1) 'Modification'\n+197067   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19706B CENTRAL HEADER #55    02014B50 (33639248)\n+19706F Created Zip Spec      14 (20) '2.0'\n+197070 Created OS            00 (0) 'MS-DOS'\n+197071 Extract Zip Spec      14 (20) '2.0'\n+197072 Extract OS            00 (0) 'MS-DOS'\n+197073 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197075 Compression Method    0000 (0) 'Stored'\n+197077 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19707B CRC                   7918064D (2031617613)\n+19707F Compressed Size       00001974 (6516)\n+197083 Uncompressed Size     00001974 (6516)\n+197087 Filename Length       0038 (56)\n+197089 Extra Length          0009 (9)\n+19708B Comment Length        0000 (0)\n+19708D Disk Start            0000 (0)\n+19708F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197091 Ext File Attributes   00000000 (0)\n+197095 Local Header Offset   000274CE (160974)\n+197099 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197099: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1970D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1970D3   Length              0005 (5)\n+1970D5   Flags               01 (1) 'Modification'\n+1970D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1970DA CENTRAL HEADER #56    02014B50 (33639248)\n+1970DE Created Zip Spec      14 (20) '2.0'\n+1970DF Created OS            00 (0) 'MS-DOS'\n+1970E0 Extract Zip Spec      14 (20) '2.0'\n+1970E1 Extract OS            00 (0) 'MS-DOS'\n+1970E2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1970E4 Compression Method    0000 (0) 'Stored'\n+1970E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1970EA CRC                   9C935B9B (2626902939)\n+1970EE Compressed Size       000050B4 (20660)\n+1970F2 Uncompressed Size     000050B4 (20660)\n+1970F6 Filename Length       003B (59)\n+1970F8 Extra Length          0009 (9)\n+1970FA Comment Length        0000 (0)\n+1970FC Disk Start            0000 (0)\n+1970FE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197100 Ext File Attributes   00000000 (0)\n+197104 Local Header Offset   00028EB1 (167601)\n+197108 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197108: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197143 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197145   Length              0005 (5)\n+197147   Flags               01 (1) 'Modification'\n+197148   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19714C CENTRAL HEADER #57    02014B50 (33639248)\n+197150 Created Zip Spec      14 (20) '2.0'\n+197151 Created OS            00 (0) 'MS-DOS'\n+197152 Extract Zip Spec      14 (20) '2.0'\n+197153 Extract OS            00 (0) 'MS-DOS'\n+197154 General Purpose Flag  0000 (0)\n+197156 Compression Method    0000 (0) 'Stored'\n+197158 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19715C CRC                   00000000 (0)\n+197160 Compressed Size       00000000 (0)\n+197164 Uncompressed Size     00000000 (0)\n+197168 Filename Length       0021 (33)\n+19716A Extra Length          0009 (9)\n+19716C Comment Length        0000 (0)\n+19716E Disk Start            0000 (0)\n+197170 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197172 Ext File Attributes   00000000 (0)\n+197176 Local Header Offset   0002DFD7 (188375)\n+19717A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19717A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19719B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19719D   Length              0005 (5)\n+19719F   Flags               01 (1) 'Modification'\n+1971A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1971A4 CENTRAL HEADER #58    02014B50 (33639248)\n+1971A8 Created Zip Spec      14 (20) '2.0'\n+1971A9 Created OS            00 (0) 'MS-DOS'\n+1971AA Extract Zip Spec      14 (20) '2.0'\n+1971AB Extract OS            00 (0) 'MS-DOS'\n+1971AC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1971AE Compression Method    0000 (0) 'Stored'\n+1971B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1971B4 CRC                   2B1352F9 (722686713)\n+1971B8 Compressed Size       00003462 (13410)\n+1971BC Uncompressed Size     00003462 (13410)\n+1971C0 Filename Length       0034 (52)\n+1971C2 Extra Length          0009 (9)\n+1971C4 Comment Length        0000 (0)\n+1971C6 Disk Start            0000 (0)\n+1971C8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1971CA Ext File Attributes   00000000 (0)\n+1971CE Local Header Offset   0002E01F (188447)\n+1971D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1971D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197206 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197208   Length              0005 (5)\n+19720A   Flags               01 (1) 'Modification'\n+19720B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19720F CENTRAL HEADER #59    02014B50 (33639248)\n+197213 Created Zip Spec      14 (20) '2.0'\n+197214 Created OS            00 (0) 'MS-DOS'\n+197215 Extract Zip Spec      14 (20) '2.0'\n+197216 Extract OS            00 (0) 'MS-DOS'\n+197217 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197219 Compression Method    0000 (0) 'Stored'\n+19721B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19721F CRC                   50C2BDD7 (1354939863)\n+197223 Compressed Size       00000E1B (3611)\n+197227 Uncompressed Size     00000E1B (3611)\n+19722B Filename Length       003F (63)\n+19722D Extra Length          0009 (9)\n+19722F Comment Length        0000 (0)\n+197231 Disk Start            0000 (0)\n+197233 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197235 Ext File Attributes   00000000 (0)\n+197239 Local Header Offset   000314EC (201964)\n+19723D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19723D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19727C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19727E   Length              0005 (5)\n+197280   Flags               01 (1) 'Modification'\n+197281   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197285 CENTRAL HEADER #60    02014B50 (33639248)\n+197289 Created Zip Spec      14 (20) '2.0'\n+19728A Created OS            00 (0) 'MS-DOS'\n+19728B Extract Zip Spec      14 (20) '2.0'\n+19728C Extract OS            00 (0) 'MS-DOS'\n+19728D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19728F Compression Method    0000 (0) 'Stored'\n+197291 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197295 CRC                   4F0E9D5D (1326357853)\n+197299 Compressed Size       00002017 (8215)\n+19729D Uncompressed Size     00002017 (8215)\n+1972A1 Filename Length       002B (43)\n+1972A3 Extra Length          0009 (9)\n+1972A5 Comment Length        0000 (0)\n+1972A7 Disk Start            0000 (0)\n+1972A9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1972AB Ext File Attributes   00000000 (0)\n+1972AF Local Header Offset   0003237D (205693)\n+1972B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1972B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1972DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1972E0   Length              0005 (5)\n+1972E2   Flags               01 (1) 'Modification'\n+1972E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1972E7 CENTRAL HEADER #61    02014B50 (33639248)\n+1972EB Created Zip Spec      14 (20) '2.0'\n+1972EC Created OS            00 (0) 'MS-DOS'\n+1972ED Extract Zip Spec      14 (20) '2.0'\n+1972EE Extract OS            00 (0) 'MS-DOS'\n+1972EF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1972F1 Compression Method    0000 (0) 'Stored'\n+1972F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1972F7 CRC                   35B34ECC (900943564)\n+1972FB Compressed Size       0000049E (1182)\n+1972FF Uncompressed Size     0000049E (1182)\n+197303 Filename Length       003B (59)\n+197305 Extra Length          0009 (9)\n+197307 Comment Length        0000 (0)\n+197309 Disk Start            0000 (0)\n+19730B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19730D Ext File Attributes   00000000 (0)\n+197311 Local Header Offset   000343F6 (214006)\n+197315 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197315: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197350 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197352   Length              0005 (5)\n+197354   Flags               01 (1) 'Modification'\n+197355   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197359 CENTRAL HEADER #62    02014B50 (33639248)\n+19735D Created Zip Spec      14 (20) '2.0'\n+19735E Created OS            00 (0) 'MS-DOS'\n+19735F Extract Zip Spec      14 (20) '2.0'\n+197360 Extract OS            00 (0) 'MS-DOS'\n+197361 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197363 Compression Method    0000 (0) 'Stored'\n+197365 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197369 CRC                   AE36D6DB (2922829531)\n+19736D Compressed Size       000004A6 (1190)\n+197371 Uncompressed Size     000004A6 (1190)\n+197375 Filename Length       003D (61)\n+197377 Extra Length          0009 (9)\n+197379 Comment Length        0000 (0)\n+19737B Disk Start            0000 (0)\n+19737D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19737F Ext File Attributes   00000000 (0)\n+197383 Local Header Offset   00034906 (215302)\n+197387 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197387: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1973C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1973C6   Length              0005 (5)\n+1973C8   Flags               01 (1) 'Modification'\n+1973C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1973CD CENTRAL HEADER #63    02014B50 (33639248)\n+1973D1 Created Zip Spec      14 (20) '2.0'\n+1973D2 Created OS            00 (0) 'MS-DOS'\n+1973D3 Extract Zip Spec      14 (20) '2.0'\n+1973D4 Extract OS            00 (0) 'MS-DOS'\n+1973D5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1973D7 Compression Method    0000 (0) 'Stored'\n+1973D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1973DD CRC                   693DBCBA (1765653690)\n+1973E1 Compressed Size       00002F4D (12109)\n+1973E5 Uncompressed Size     00002F4D (12109)\n+1973E9 Filename Length       002B (43)\n+1973EB Extra Length          0009 (9)\n+1973ED Comment Length        0000 (0)\n+1973EF Disk Start            0000 (0)\n+1973F1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1973F3 Ext File Attributes   00000000 (0)\n+1973F7 Local Header Offset   00034E20 (216608)\n+1973FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1973FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197426 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197428   Length              0005 (5)\n+19742A   Flags               01 (1) 'Modification'\n+19742B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19742F CENTRAL HEADER #64    02014B50 (33639248)\n+197433 Created Zip Spec      14 (20) '2.0'\n+197434 Created OS            00 (0) 'MS-DOS'\n+197435 Extract Zip Spec      14 (20) '2.0'\n+197436 Extract OS            00 (0) 'MS-DOS'\n+197437 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197439 Compression Method    0000 (0) 'Stored'\n+19743B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19743F CRC                   44BCC62B (1153222187)\n+197443 Compressed Size       00004608 (17928)\n+197447 Uncompressed Size     00004608 (17928)\n+19744B Filename Length       002D (45)\n+19744D Extra Length          0009 (9)\n+19744F Comment Length        0000 (0)\n+197451 Disk Start            0000 (0)\n+197453 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197455 Ext File Attributes   00000000 (0)\n+197459 Local Header Offset   00037DCF (228815)\n+19745D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19745D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19748A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19748C   Length              0005 (5)\n+19748E   Flags               01 (1) 'Modification'\n+19748F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197493 CENTRAL HEADER #65    02014B50 (33639248)\n+197497 Created Zip Spec      14 (20) '2.0'\n+197498 Created OS            00 (0) 'MS-DOS'\n+197499 Extract Zip Spec      14 (20) '2.0'\n+19749A Extract OS            00 (0) 'MS-DOS'\n+19749B General Purpose Flag  0000 (0)\n+19749D Compression Method    0000 (0) 'Stored'\n+19749F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1974A3 CRC                   00000000 (0)\n+1974A7 Compressed Size       00000000 (0)\n+1974AB Uncompressed Size     00000000 (0)\n+1974AF Filename Length       0021 (33)\n+1974B1 Extra Length          0009 (9)\n+1974B3 Comment Length        0000 (0)\n+1974B5 Disk Start            0000 (0)\n+1974B7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1974B9 Ext File Attributes   00000000 (0)\n+1974BD Local Header Offset   0003C43B (246843)\n+1974C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1974C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1974E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1974E4   Length              0005 (5)\n+1974E6   Flags               01 (1) 'Modification'\n+1974E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1974EB CENTRAL HEADER #66    02014B50 (33639248)\n+1974EF Created Zip Spec      14 (20) '2.0'\n+1974F0 Created OS            00 (0) 'MS-DOS'\n+1974F1 Extract Zip Spec      14 (20) '2.0'\n+1974F2 Extract OS            00 (0) 'MS-DOS'\n+1974F3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1974F5 Compression Method    0000 (0) 'Stored'\n+1974F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1974FB CRC                   01EEDE5E (32431710)\n+1974FF Compressed Size       000004E7 (1255)\n+197503 Uncompressed Size     000004E7 (1255)\n+197507 Filename Length       002E (46)\n+197509 Extra Length          0009 (9)\n+19750B Comment Length        0000 (0)\n+19750D Disk Start            0000 (0)\n+19750F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197511 Ext File Attributes   00000000 (0)\n+197515 Local Header Offset   0003C483 (246915)\n+197519 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197519: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197547 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197549   Length              0005 (5)\n+19754B   Flags               01 (1) 'Modification'\n+19754C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197550 CENTRAL HEADER #67    02014B50 (33639248)\n+197554 Created Zip Spec      14 (20) '2.0'\n+197555 Created OS            00 (0) 'MS-DOS'\n+197556 Extract Zip Spec      14 (20) '2.0'\n+197557 Extract OS            00 (0) 'MS-DOS'\n+197558 General Purpose Flag  0000 (0)\n+19755A Compression Method    0000 (0) 'Stored'\n+19755C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197560 CRC                   00000000 (0)\n+197564 Compressed Size       00000000 (0)\n+197568 Uncompressed Size     00000000 (0)\n+19756C Filename Length       0029 (41)\n+19756E Extra Length          0009 (9)\n+197570 Comment Length        0000 (0)\n+197572 Disk Start            0000 (0)\n+197574 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197576 Ext File Attributes   00000000 (0)\n+19757A Local Header Offset   0003C9CF (248271)\n+19757E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19757E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1975A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1975A9   Length              0005 (5)\n+1975AB   Flags               01 (1) 'Modification'\n+1975AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1975B0 CENTRAL HEADER #68    02014B50 (33639248)\n+1975B4 Created Zip Spec      14 (20) '2.0'\n+1975B5 Created OS            00 (0) 'MS-DOS'\n+1975B6 Extract Zip Spec      14 (20) '2.0'\n+1975B7 Extract OS            00 (0) 'MS-DOS'\n+1975B8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1975BA Compression Method    0000 (0) 'Stored'\n+1975BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1975C0 CRC                   20854F04 (545607428)\n+1975C4 Compressed Size       00000B1B (2843)\n+1975C8 Uncompressed Size     00000B1B (2843)\n+1975CC Filename Length       003E (62)\n+1975CE Extra Length          0009 (9)\n+1975D0 Comment Length        0000 (0)\n+1975D2 Disk Start            0000 (0)\n+1975D4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1975D6 Ext File Attributes   00000000 (0)\n+1975DA Local Header Offset   0003CA1F (248351)\n+1975DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1975DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19761C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19761E   Length              0005 (5)\n+197620   Flags               01 (1) 'Modification'\n+197621   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197625 CENTRAL HEADER #69    02014B50 (33639248)\n+197629 Created Zip Spec      14 (20) '2.0'\n+19762A Created OS            00 (0) 'MS-DOS'\n+19762B Extract Zip Spec      14 (20) '2.0'\n+19762C Extract OS            00 (0) 'MS-DOS'\n+19762D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19762F Compression Method    0000 (0) 'Stored'\n+197631 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197635 CRC                   D19D012A (3516727594)\n+197639 Compressed Size       00000733 (1843)\n+19763D Uncompressed Size     00000733 (1843)\n+197641 Filename Length       003E (62)\n+197643 Extra Length          0009 (9)\n+197645 Comment Length        0000 (0)\n+197647 Disk Start            0000 (0)\n+197649 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19764B Ext File Attributes   00000000 (0)\n+19764F Local Header Offset   0003D5AF (251311)\n+197653 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197653: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197691 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197693   Length              0005 (5)\n+197695   Flags               01 (1) 'Modification'\n+197696   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19769A CENTRAL HEADER #70    02014B50 (33639248)\n+19769E Created Zip Spec      14 (20) '2.0'\n+19769F Created OS            00 (0) 'MS-DOS'\n+1976A0 Extract Zip Spec      14 (20) '2.0'\n+1976A1 Extract OS            00 (0) 'MS-DOS'\n+1976A2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1976A4 Compression Method    0000 (0) 'Stored'\n+1976A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1976AA CRC                   489CA2B6 (1218224822)\n+1976AE Compressed Size       00003CC4 (15556)\n+1976B2 Uncompressed Size     00003CC4 (15556)\n+1976B6 Filename Length       0038 (56)\n+1976B8 Extra Length          0009 (9)\n+1976BA Comment Length        0000 (0)\n+1976BC Disk Start            0000 (0)\n+1976BE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1976C0 Ext File Attributes   00000000 (0)\n+1976C4 Local Header Offset   0003DD57 (253271)\n+1976C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1976C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197700 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197702   Length              0005 (5)\n+197704   Flags               01 (1) 'Modification'\n+197705   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197709 CENTRAL HEADER #71    02014B50 (33639248)\n+19770D Created Zip Spec      14 (20) '2.0'\n+19770E Created OS            00 (0) 'MS-DOS'\n+19770F Extract Zip Spec      14 (20) '2.0'\n+197710 Extract OS            00 (0) 'MS-DOS'\n+197711 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197713 Compression Method    0000 (0) 'Stored'\n+197715 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197719 CRC                   BD63F8B8 (3177445560)\n+19771D Compressed Size       000013BA (5050)\n+197721 Uncompressed Size     000013BA (5050)\n+197725 Filename Length       003C (60)\n+197727 Extra Length          0009 (9)\n+197729 Comment Length        0000 (0)\n+19772B Disk Start            0000 (0)\n+19772D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19772F Ext File Attributes   00000000 (0)\n+197733 Local Header Offset   00041A8A (268938)\n+197737 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197737: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197773 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197775   Length              0005 (5)\n+197777   Flags               01 (1) 'Modification'\n+197778   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19777C CENTRAL HEADER #72    02014B50 (33639248)\n+197780 Created Zip Spec      14 (20) '2.0'\n+197781 Created OS            00 (0) 'MS-DOS'\n+197782 Extract Zip Spec      14 (20) '2.0'\n+197783 Extract OS            00 (0) 'MS-DOS'\n+197784 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197786 Compression Method    0000 (0) 'Stored'\n+197788 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19778C CRC                   C96B89A9 (3379268009)\n+197790 Compressed Size       00000DB0 (3504)\n+197794 Uncompressed Size     00000DB0 (3504)\n+197798 Filename Length       003F (63)\n+19779A Extra Length          0009 (9)\n+19779C Comment Length        0000 (0)\n+19779E Disk Start            0000 (0)\n+1977A0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1977A2 Ext File Attributes   00000000 (0)\n+1977A6 Local Header Offset   00042EB7 (274103)\n+1977AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1977AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1977E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1977EB   Length              0005 (5)\n+1977ED   Flags               01 (1) 'Modification'\n+1977EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1977F2 CENTRAL HEADER #73    02014B50 (33639248)\n+1977F6 Created Zip Spec      14 (20) '2.0'\n+1977F7 Created OS            00 (0) 'MS-DOS'\n+1977F8 Extract Zip Spec      14 (20) '2.0'\n+1977F9 Extract OS            00 (0) 'MS-DOS'\n+1977FA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1977FC Compression Method    0000 (0) 'Stored'\n+1977FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197802 CRC                   3FE3ACCB (1071885515)\n+197806 Compressed Size       00002CC5 (11461)\n+19780A Uncompressed Size     00002CC5 (11461)\n+19780E Filename Length       0039 (57)\n+197810 Extra Length          0009 (9)\n+197812 Comment Length        0000 (0)\n+197814 Disk Start            0000 (0)\n+197816 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197818 Ext File Attributes   00000000 (0)\n+19781C Local Header Offset   00043CDD (277725)\n+197820 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197820: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197859 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19785B   Length              0005 (5)\n+19785D   Flags               01 (1) 'Modification'\n+19785E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197862 CENTRAL HEADER #74    02014B50 (33639248)\n+197866 Created Zip Spec      14 (20) '2.0'\n+197867 Created OS            00 (0) 'MS-DOS'\n+197868 Extract Zip Spec      14 (20) '2.0'\n+197869 Extract OS            00 (0) 'MS-DOS'\n+19786A General Purpose Flag  0000 (0)\n+19786C Compression Method    0000 (0) 'Stored'\n+19786E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197872 CRC                   00000000 (0)\n+197876 Compressed Size       00000000 (0)\n+19787A Uncompressed Size     00000000 (0)\n+19787E Filename Length       001F (31)\n+197880 Extra Length          0009 (9)\n+197882 Comment Length        0000 (0)\n+197884 Disk Start            0000 (0)\n+197886 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197888 Ext File Attributes   00000000 (0)\n+19788C Local Header Offset   00046A12 (289298)\n+197890 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197890: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1978AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1978B1   Length              0005 (5)\n+1978B3   Flags               01 (1) 'Modification'\n+1978B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1978B8 CENTRAL HEADER #75    02014B50 (33639248)\n+1978BC Created Zip Spec      14 (20) '2.0'\n+1978BD Created OS            00 (0) 'MS-DOS'\n+1978BE Extract Zip Spec      14 (20) '2.0'\n+1978BF Extract OS            00 (0) 'MS-DOS'\n+1978C0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1978C2 Compression Method    0000 (0) 'Stored'\n+1978C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1978C8 CRC                   A81790A7 (2820116647)\n+1978CC Compressed Size       0000117D (4477)\n+1978D0 Uncompressed Size     0000117D (4477)\n+1978D4 Filename Length       003A (58)\n+1978D6 Extra Length          0009 (9)\n+1978D8 Comment Length        0000 (0)\n+1978DA Disk Start            0000 (0)\n+1978DC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1978DE Ext File Attributes   00000000 (0)\n+1978E2 Local Header Offset   00046A58 (289368)\n+1978E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1978EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1978E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 197920 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 197922   Length              0005 (5)\n 197924   Flags               01 (1) 'Modification'\n 197925   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-197929 CENTRAL HEADER #367   02014B50 (33639248)\n+197929 CENTRAL HEADER #76    02014B50 (33639248)\n 19792D Created Zip Spec      14 (20) '2.0'\n 19792E Created OS            00 (0) 'MS-DOS'\n 19792F Extract Zip Spec      14 (20) '2.0'\n 197930 Extract OS            00 (0) 'MS-DOS'\n 197931 General Purpose Flag  0008 (8)\n        [Bit  3]              1 'Streamed'\n 197933 Compression Method    0000 (0) 'Stored'\n 197935 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197939 CRC                   C2B7ABEC (3266817004)\n-19793D Compressed Size       000007C9 (1993)\n-197941 Uncompressed Size     000007C9 (1993)\n-197945 Filename Length       0032 (50)\n+197939 CRC                   AB15E1E2 (2870338018)\n+19793D Compressed Size       00001B78 (7032)\n+197941 Uncompressed Size     00001B78 (7032)\n+197945 Filename Length       0031 (49)\n 197947 Extra Length          0009 (9)\n 197949 Comment Length        0000 (0)\n 19794B Disk Start            0000 (0)\n 19794D Int File Attributes   0000 (0)\n        [Bit 0]               0 'Binary Data'\n 19794F Ext File Attributes   00000000 (0)\n-197953 Local Header Offset   0018A037 (1613879)\n-197957 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+197953 Local Header Offset   00047C46 (293958)\n+197957 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x197957: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x197957: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-197989 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19798B   Length              0005 (5)\n-19798D   Flags               01 (1) 'Modification'\n-19798E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197992 CENTRAL HEADER #368   02014B50 (33639248)\n-197996 Created Zip Spec      14 (20) '2.0'\n-197997 Created OS            00 (0) 'MS-DOS'\n-197998 Extract Zip Spec      14 (20) '2.0'\n-197999 Extract OS            00 (0) 'MS-DOS'\n-19799A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-19799C Compression Method    0000 (0) 'Stored'\n-19799E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1979A2 CRC                   2C4FF5E6 (743437798)\n-1979A6 Compressed Size       0000075E (1886)\n-1979AA Uncompressed Size     0000075E (1886)\n-1979AE Filename Length       0030 (48)\n-1979B0 Extra Length          0009 (9)\n-1979B2 Comment Length        0000 (0)\n-1979B4 Disk Start            0000 (0)\n-1979B6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-1979B8 Ext File Attributes   00000000 (0)\n-1979BC Local Header Offset   0018A869 (1615977)\n-1979C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1979C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1979F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1979F2   Length              0005 (5)\n-1979F4   Flags               01 (1) 'Modification'\n-1979F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1979F9 CENTRAL HEADER #369   02014B50 (33639248)\n-1979FD Created Zip Spec      14 (20) '2.0'\n-1979FE Created OS            00 (0) 'MS-DOS'\n-1979FF Extract Zip Spec      14 (20) '2.0'\n-197A00 Extract OS            00 (0) 'MS-DOS'\n-197A01 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197A03 Compression Method    0000 (0) 'Stored'\n-197A05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197A09 CRC                   420D2C18 (1108159512)\n-197A0D Compressed Size       0000042C (1068)\n-197A11 Uncompressed Size     0000042C (1068)\n-197A15 Filename Length       0038 (56)\n-197A17 Extra Length          0009 (9)\n-197A19 Comment Length        0000 (0)\n-197A1B Disk Start            0000 (0)\n-197A1D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-197A1F Ext File Attributes   00000000 (0)\n-197A23 Local Header Offset   0018B02E (1617966)\n-197A27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197A27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197A5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197A61   Length              0005 (5)\n-197A63   Flags               01 (1) 'Modification'\n-197A64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197A68 CENTRAL HEADER #370   02014B50 (33639248)\n-197A6C Created Zip Spec      14 (20) '2.0'\n-197A6D Created OS            00 (0) 'MS-DOS'\n-197A6E Extract Zip Spec      14 (20) '2.0'\n-197A6F Extract OS            00 (0) 'MS-DOS'\n-197A70 General Purpose Flag  0000 (0)\n-197A72 Compression Method    0000 (0) 'Stored'\n-197A74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197A78 CRC                   00000000 (0)\n-197A7C Compressed Size       00000000 (0)\n-197A80 Uncompressed Size     00000000 (0)\n-197A84 Filename Length       001D (29)\n-197A86 Extra Length          0009 (9)\n-197A88 Comment Length        0000 (0)\n-197A8A Disk Start            0000 (0)\n-197A8C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-197A8E Ext File Attributes   00000000 (0)\n-197A92 Local Header Offset   0018B4C9 (1619145)\n-197A96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197A96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197AB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197AB5   Length              0005 (5)\n-197AB7   Flags               01 (1) 'Modification'\n-197AB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197ABC CENTRAL HEADER #371   02014B50 (33639248)\n-197AC0 Created Zip Spec      14 (20) '2.0'\n-197AC1 Created OS            00 (0) 'MS-DOS'\n-197AC2 Extract Zip Spec      14 (20) '2.0'\n-197AC3 Extract OS            00 (0) 'MS-DOS'\n-197AC4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197AC6 Compression Method    0000 (0) 'Stored'\n-197AC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197ACC CRC                   40BAC24E (1085981262)\n-197AD0 Compressed Size       00000B49 (2889)\n-197AD4 Uncompressed Size     00000B49 (2889)\n-197AD8 Filename Length       0036 (54)\n-197ADA Extra Length          0009 (9)\n-197ADC Comment Length        0000 (0)\n-197ADE Disk Start            0000 (0)\n-197AE0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-197AE2 Ext File Attributes   00000000 (0)\n-197AE6 Local Header Offset   0018B50D (1619213)\n-197AEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197AEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197B20 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197B22   Length              0005 (5)\n-197B24   Flags               01 (1) 'Modification'\n-197B25   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197B29 CENTRAL HEADER #372   02014B50 (33639248)\n-197B2D Created Zip Spec      14 (20) '2.0'\n-197B2E Created OS            00 (0) 'MS-DOS'\n-197B2F Extract Zip Spec      14 (20) '2.0'\n-197B30 Extract OS            00 (0) 'MS-DOS'\n-197B31 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197B33 Compression Method    0000 (0) 'Stored'\n-197B35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197B39 CRC                   CC5CA724 (3428624164)\n-197B3D Compressed Size       0000105D (4189)\n-197B41 Uncompressed Size     0000105D (4189)\n-197B45 Filename Length       002F (47)\n-197B47 Extra Length          0009 (9)\n-197B49 Comment Length        0000 (0)\n-197B4B Disk Start            0000 (0)\n-197B4D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-197B4F Ext File Attributes   00000000 (0)\n-197B53 Local Header Offset   0018C0C3 (1622211)\n-197B57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197B57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197B86 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197B88   Length              0005 (5)\n-197B8A   Flags               01 (1) 'Modification'\n-197B8B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197B8F CENTRAL HEADER #373   02014B50 (33639248)\n-197B93 Created Zip Spec      14 (20) '2.0'\n-197B94 Created OS            00 (0) 'MS-DOS'\n-197B95 Extract Zip Spec      14 (20) '2.0'\n-197B96 Extract OS            00 (0) 'MS-DOS'\n-197B97 General Purpose Flag  0000 (0)\n-197B99 Compression Method    0000 (0) 'Stored'\n-197B9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197B9F CRC                   00000000 (0)\n-197BA3 Compressed Size       00000000 (0)\n-197BA7 Uncompressed Size     00000000 (0)\n-197BAB Filename Length       0009 (9)\n-197BAD Extra Length          0009 (9)\n-197BAF Comment Length        0000 (0)\n-197BB1 Disk Start            0000 (0)\n-197BB3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-197BB5 Ext File Attributes   00000000 (0)\n-197BB9 Local Header Offset   0018D186 (1626502)\n-197BBD Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x197BBD: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-197BC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197BC8   Length              0005 (5)\n-197BCA   Flags               01 (1) 'Modification'\n-197BCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197BCF CENTRAL HEADER #374   02014B50 (33639248)\n-197BD3 Created Zip Spec      14 (20) '2.0'\n-197BD4 Created OS            00 (0) 'MS-DOS'\n-197BD5 Extract Zip Spec      14 (20) '2.0'\n-197BD6 Extract OS            00 (0) 'MS-DOS'\n-197BD7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-197BD9 Compression Method    0000 (0) 'Stored'\n-197BDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-197BDF CRC                   94CE4031 (2496544817)\n-197BE3 Compressed Size       000011A8 (4520)\n-197BE7 Uncompressed Size     000011A8 (4520)\n-197BEB Filename Length       001E (30)\n-197BED Extra Length          0009 (9)\n-197BEF Comment Length        0000 (0)\n-197BF1 Disk Start            0000 (0)\n-197BF3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-197BF5 Ext File Attributes   00000000 (0)\n-197BF9 Local Header Offset   0018D1B6 (1626550)\n-197BFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x197BFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-197C1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-197C1D   Length              0005 (5)\n-197C1F   Flags               01 (1) 'Modification'\n-197C20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-197C24 END CENTRAL HEADER    06054B50 (101010256)\n-197C28 Number of this disk   0000 (0)\n-197C2A Central Dir Disk no   0000 (0)\n-197C2C Entries in this disk  0176 (374)\n-197C2E Total Entries         0176 (374)\n-197C30 Size of Central Dir   00009871 (39025)\n-197C34 Offset to Central Dir 0018E3B3 (1631155)\n-197C38 Comment Length        0000 (0)\n+197988 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19798A   Length              0005 (5)\n+19798C   Flags               01 (1) 'Modification'\n+19798D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197991 CENTRAL HEADER #77    02014B50 (33639248)\n+197995 Created Zip Spec      14 (20) '2.0'\n+197996 Created OS            00 (0) 'MS-DOS'\n+197997 Extract Zip Spec      14 (20) '2.0'\n+197998 Extract OS            00 (0) 'MS-DOS'\n+197999 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19799B Compression Method    0000 (0) 'Stored'\n+19799D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1979A1 CRC                   7B55AE57 (2069212759)\n+1979A5 Compressed Size       00001330 (4912)\n+1979A9 Uncompressed Size     00001330 (4912)\n+1979AD Filename Length       0036 (54)\n+1979AF Extra Length          0009 (9)\n+1979B1 Comment Length        0000 (0)\n+1979B3 Disk Start            0000 (0)\n+1979B5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1979B7 Ext File Attributes   00000000 (0)\n+1979BB Local Header Offset   00049826 (301094)\n+1979BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1979BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1979F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1979F7   Length              0005 (5)\n+1979F9   Flags               01 (1) 'Modification'\n+1979FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1979FE CENTRAL HEADER #78    02014B50 (33639248)\n+197A02 Created Zip Spec      14 (20) '2.0'\n+197A03 Created OS            00 (0) 'MS-DOS'\n+197A04 Extract Zip Spec      14 (20) '2.0'\n+197A05 Extract OS            00 (0) 'MS-DOS'\n+197A06 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197A08 Compression Method    0000 (0) 'Stored'\n+197A0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197A0E CRC                   8F24621B (2401526299)\n+197A12 Compressed Size       000027FE (10238)\n+197A16 Uncompressed Size     000027FE (10238)\n+197A1A Filename Length       002F (47)\n+197A1C Extra Length          0009 (9)\n+197A1E Comment Length        0000 (0)\n+197A20 Disk Start            0000 (0)\n+197A22 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197A24 Ext File Attributes   00000000 (0)\n+197A28 Local Header Offset   0004ABC3 (306115)\n+197A2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197A2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197A5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197A5D   Length              0005 (5)\n+197A5F   Flags               01 (1) 'Modification'\n+197A60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197A64 CENTRAL HEADER #79    02014B50 (33639248)\n+197A68 Created Zip Spec      14 (20) '2.0'\n+197A69 Created OS            00 (0) 'MS-DOS'\n+197A6A Extract Zip Spec      14 (20) '2.0'\n+197A6B Extract OS            00 (0) 'MS-DOS'\n+197A6C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197A6E Compression Method    0000 (0) 'Stored'\n+197A70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197A74 CRC                   2A9E8F07 (715034375)\n+197A78 Compressed Size       00000516 (1302)\n+197A7C Uncompressed Size     00000516 (1302)\n+197A80 Filename Length       003C (60)\n+197A82 Extra Length          0009 (9)\n+197A84 Comment Length        0000 (0)\n+197A86 Disk Start            0000 (0)\n+197A88 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197A8A Ext File Attributes   00000000 (0)\n+197A8E Local Header Offset   0004D427 (316455)\n+197A92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197A92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197ACE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197AD0   Length              0005 (5)\n+197AD2   Flags               01 (1) 'Modification'\n+197AD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197AD7 CENTRAL HEADER #80    02014B50 (33639248)\n+197ADB Created Zip Spec      14 (20) '2.0'\n+197ADC Created OS            00 (0) 'MS-DOS'\n+197ADD Extract Zip Spec      14 (20) '2.0'\n+197ADE Extract OS            00 (0) 'MS-DOS'\n+197ADF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197AE1 Compression Method    0000 (0) 'Stored'\n+197AE3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197AE7 CRC                   C6D0F0BC (3335581884)\n+197AEB Compressed Size       000007B0 (1968)\n+197AEF Uncompressed Size     000007B0 (1968)\n+197AF3 Filename Length       0039 (57)\n+197AF5 Extra Length          0009 (9)\n+197AF7 Comment Length        0000 (0)\n+197AF9 Disk Start            0000 (0)\n+197AFB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197AFD Ext File Attributes   00000000 (0)\n+197B01 Local Header Offset   0004D9B0 (317872)\n+197B05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197B05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197B3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197B40   Length              0005 (5)\n+197B42   Flags               01 (1) 'Modification'\n+197B43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197B47 CENTRAL HEADER #81    02014B50 (33639248)\n+197B4B Created Zip Spec      14 (20) '2.0'\n+197B4C Created OS            00 (0) 'MS-DOS'\n+197B4D Extract Zip Spec      14 (20) '2.0'\n+197B4E Extract OS            00 (0) 'MS-DOS'\n+197B4F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197B51 Compression Method    0000 (0) 'Stored'\n+197B53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197B57 CRC                   A545EC4C (2772823116)\n+197B5B Compressed Size       000004DD (1245)\n+197B5F Uncompressed Size     000004DD (1245)\n+197B63 Filename Length       003D (61)\n+197B65 Extra Length          0009 (9)\n+197B67 Comment Length        0000 (0)\n+197B69 Disk Start            0000 (0)\n+197B6B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197B6D Ext File Attributes   00000000 (0)\n+197B71 Local Header Offset   0004E1D0 (319952)\n+197B75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197B75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197BB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197BB4   Length              0005 (5)\n+197BB6   Flags               01 (1) 'Modification'\n+197BB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197BBB CENTRAL HEADER #82    02014B50 (33639248)\n+197BBF Created Zip Spec      14 (20) '2.0'\n+197BC0 Created OS            00 (0) 'MS-DOS'\n+197BC1 Extract Zip Spec      14 (20) '2.0'\n+197BC2 Extract OS            00 (0) 'MS-DOS'\n+197BC3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197BC5 Compression Method    0000 (0) 'Stored'\n+197BC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197BCB CRC                   8BA4EDED (2342841837)\n+197BCF Compressed Size       00000A8C (2700)\n+197BD3 Uncompressed Size     00000A8C (2700)\n+197BD7 Filename Length       003B (59)\n+197BD9 Extra Length          0009 (9)\n+197BDB Comment Length        0000 (0)\n+197BDD Disk Start            0000 (0)\n+197BDF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197BE1 Ext File Attributes   00000000 (0)\n+197BE5 Local Header Offset   0004E721 (321313)\n+197BE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197BE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197C24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197C26   Length              0005 (5)\n+197C28   Flags               01 (1) 'Modification'\n+197C29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197C2D CENTRAL HEADER #83    02014B50 (33639248)\n+197C31 Created Zip Spec      14 (20) '2.0'\n+197C32 Created OS            00 (0) 'MS-DOS'\n+197C33 Extract Zip Spec      14 (20) '2.0'\n+197C34 Extract OS            00 (0) 'MS-DOS'\n+197C35 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197C37 Compression Method    0000 (0) 'Stored'\n+197C39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197C3D CRC                   C8BED78D (3367950221)\n+197C41 Compressed Size       000004CE (1230)\n+197C45 Uncompressed Size     000004CE (1230)\n+197C49 Filename Length       0037 (55)\n+197C4B Extra Length          0009 (9)\n+197C4D Comment Length        0000 (0)\n+197C4F Disk Start            0000 (0)\n+197C51 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197C53 Ext File Attributes   00000000 (0)\n+197C57 Local Header Offset   0004F21F (324127)\n+197C5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197C5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197C92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197C94   Length              0005 (5)\n+197C96   Flags               01 (1) 'Modification'\n+197C97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197C9B CENTRAL HEADER #84    02014B50 (33639248)\n+197C9F Created Zip Spec      14 (20) '2.0'\n+197CA0 Created OS            00 (0) 'MS-DOS'\n+197CA1 Extract Zip Spec      14 (20) '2.0'\n+197CA2 Extract OS            00 (0) 'MS-DOS'\n+197CA3 General Purpose Flag  0000 (0)\n+197CA5 Compression Method    0000 (0) 'Stored'\n+197CA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197CAB CRC                   00000000 (0)\n+197CAF Compressed Size       00000000 (0)\n+197CB3 Uncompressed Size     00000000 (0)\n+197CB7 Filename Length       002C (44)\n+197CB9 Extra Length          0009 (9)\n+197CBB Comment Length        0000 (0)\n+197CBD Disk Start            0000 (0)\n+197CBF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197CC1 Ext File Attributes   00000000 (0)\n+197CC5 Local Header Offset   0004F75B (325467)\n+197CC9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197CC9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197CF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197CF7   Length              0005 (5)\n+197CF9   Flags               01 (1) 'Modification'\n+197CFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197CFE CENTRAL HEADER #85    02014B50 (33639248)\n+197D02 Created Zip Spec      14 (20) '2.0'\n+197D03 Created OS            00 (0) 'MS-DOS'\n+197D04 Extract Zip Spec      14 (20) '2.0'\n+197D05 Extract OS            00 (0) 'MS-DOS'\n+197D06 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197D08 Compression Method    0000 (0) 'Stored'\n+197D0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197D0E CRC                   8153B7AF (2169747375)\n+197D12 Compressed Size       00002780 (10112)\n+197D16 Uncompressed Size     00002780 (10112)\n+197D1A Filename Length       004D (77)\n+197D1C Extra Length          0009 (9)\n+197D1E Comment Length        0000 (0)\n+197D20 Disk Start            0000 (0)\n+197D22 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197D24 Ext File Attributes   00000000 (0)\n+197D28 Local Header Offset   0004F7AE (325550)\n+197D2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197D2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197D79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197D7B   Length              0005 (5)\n+197D7D   Flags               01 (1) 'Modification'\n+197D7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197D82 CENTRAL HEADER #86    02014B50 (33639248)\n+197D86 Created Zip Spec      14 (20) '2.0'\n+197D87 Created OS            00 (0) 'MS-DOS'\n+197D88 Extract Zip Spec      14 (20) '2.0'\n+197D89 Extract OS            00 (0) 'MS-DOS'\n+197D8A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197D8C Compression Method    0000 (0) 'Stored'\n+197D8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197D92 CRC                   B055C4D7 (2958410967)\n+197D96 Compressed Size       000006F6 (1782)\n+197D9A Uncompressed Size     000006F6 (1782)\n+197D9E Filename Length       0054 (84)\n+197DA0 Extra Length          0009 (9)\n+197DA2 Comment Length        0000 (0)\n+197DA4 Disk Start            0000 (0)\n+197DA6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197DA8 Ext File Attributes   00000000 (0)\n+197DAC Local Header Offset   00051FB2 (335794)\n+197DB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197DB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197E04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197E06   Length              0005 (5)\n+197E08   Flags               01 (1) 'Modification'\n+197E09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197E0D CENTRAL HEADER #87    02014B50 (33639248)\n+197E11 Created Zip Spec      14 (20) '2.0'\n+197E12 Created OS            00 (0) 'MS-DOS'\n+197E13 Extract Zip Spec      14 (20) '2.0'\n+197E14 Extract OS            00 (0) 'MS-DOS'\n+197E15 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197E17 Compression Method    0000 (0) 'Stored'\n+197E19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197E1D CRC                   46172F4A (1175924554)\n+197E21 Compressed Size       0000046D (1133)\n+197E25 Uncompressed Size     0000046D (1133)\n+197E29 Filename Length       0041 (65)\n+197E2B Extra Length          0009 (9)\n+197E2D Comment Length        0000 (0)\n+197E2F Disk Start            0000 (0)\n+197E31 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197E33 Ext File Attributes   00000000 (0)\n+197E37 Local Header Offset   00052733 (337715)\n+197E3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197E3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197E7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197E7E   Length              0005 (5)\n+197E80   Flags               01 (1) 'Modification'\n+197E81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197E85 CENTRAL HEADER #88    02014B50 (33639248)\n+197E89 Created Zip Spec      14 (20) '2.0'\n+197E8A Created OS            00 (0) 'MS-DOS'\n+197E8B Extract Zip Spec      14 (20) '2.0'\n+197E8C Extract OS            00 (0) 'MS-DOS'\n+197E8D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197E8F Compression Method    0000 (0) 'Stored'\n+197E91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197E95 CRC                   D56D83FB (3580724219)\n+197E99 Compressed Size       00000B69 (2921)\n+197E9D Uncompressed Size     00000B69 (2921)\n+197EA1 Filename Length       0043 (67)\n+197EA3 Extra Length          0009 (9)\n+197EA5 Comment Length        0000 (0)\n+197EA7 Disk Start            0000 (0)\n+197EA9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197EAB Ext File Attributes   00000000 (0)\n+197EAF Local Header Offset   00052C18 (338968)\n+197EB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197EB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197EF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197EF8   Length              0005 (5)\n+197EFA   Flags               01 (1) 'Modification'\n+197EFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197EFF CENTRAL HEADER #89    02014B50 (33639248)\n+197F03 Created Zip Spec      14 (20) '2.0'\n+197F04 Created OS            00 (0) 'MS-DOS'\n+197F05 Extract Zip Spec      14 (20) '2.0'\n+197F06 Extract OS            00 (0) 'MS-DOS'\n+197F07 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197F09 Compression Method    0000 (0) 'Stored'\n+197F0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197F0F CRC                   69A63658 (1772500568)\n+197F13 Compressed Size       00000532 (1330)\n+197F17 Uncompressed Size     00000532 (1330)\n+197F1B Filename Length       0046 (70)\n+197F1D Extra Length          0009 (9)\n+197F1F Comment Length        0000 (0)\n+197F21 Disk Start            0000 (0)\n+197F23 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197F25 Ext File Attributes   00000000 (0)\n+197F29 Local Header Offset   000537FB (342011)\n+197F2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197F2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197F73 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197F75   Length              0005 (5)\n+197F77   Flags               01 (1) 'Modification'\n+197F78   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197F7C CENTRAL HEADER #90    02014B50 (33639248)\n+197F80 Created Zip Spec      14 (20) '2.0'\n+197F81 Created OS            00 (0) 'MS-DOS'\n+197F82 Extract Zip Spec      14 (20) '2.0'\n+197F83 Extract OS            00 (0) 'MS-DOS'\n+197F84 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197F86 Compression Method    0000 (0) 'Stored'\n+197F88 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197F8C CRC                   01D091A7 (30445991)\n+197F90 Compressed Size       00000460 (1120)\n+197F94 Uncompressed Size     00000460 (1120)\n+197F98 Filename Length       003A (58)\n+197F9A Extra Length          0009 (9)\n+197F9C Comment Length        0000 (0)\n+197F9E Disk Start            0000 (0)\n+197FA0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+197FA2 Ext File Attributes   00000000 (0)\n+197FA6 Local Header Offset   00053DAA (343466)\n+197FAA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x197FAA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+197FE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+197FE6   Length              0005 (5)\n+197FE8   Flags               01 (1) 'Modification'\n+197FE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+197FED CENTRAL HEADER #91    02014B50 (33639248)\n+197FF1 Created Zip Spec      14 (20) '2.0'\n+197FF2 Created OS            00 (0) 'MS-DOS'\n+197FF3 Extract Zip Spec      14 (20) '2.0'\n+197FF4 Extract OS            00 (0) 'MS-DOS'\n+197FF5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+197FF7 Compression Method    0000 (0) 'Stored'\n+197FF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+197FFD CRC                   FCBE727C (4240339580)\n+198001 Compressed Size       000024E6 (9446)\n+198005 Uncompressed Size     000024E6 (9446)\n+198009 Filename Length       0045 (69)\n+19800B Extra Length          0009 (9)\n+19800D Comment Length        0000 (0)\n+19800F Disk Start            0000 (0)\n+198011 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198013 Ext File Attributes   00000000 (0)\n+198017 Local Header Offset   0005427B (344699)\n+19801B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19801B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198060 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198062   Length              0005 (5)\n+198064   Flags               01 (1) 'Modification'\n+198065   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198069 CENTRAL HEADER #92    02014B50 (33639248)\n+19806D Created Zip Spec      14 (20) '2.0'\n+19806E Created OS            00 (0) 'MS-DOS'\n+19806F Extract Zip Spec      14 (20) '2.0'\n+198070 Extract OS            00 (0) 'MS-DOS'\n+198071 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198073 Compression Method    0000 (0) 'Stored'\n+198075 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198079 CRC                   E7C23E33 (3888266803)\n+19807D Compressed Size       000007F1 (2033)\n+198081 Uncompressed Size     000007F1 (2033)\n+198085 Filename Length       004C (76)\n+198087 Extra Length          0009 (9)\n+198089 Comment Length        0000 (0)\n+19808B Disk Start            0000 (0)\n+19808D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19808F Ext File Attributes   00000000 (0)\n+198093 Local Header Offset   000567DD (354269)\n+198097 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198097: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1980E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1980E5   Length              0005 (5)\n+1980E7   Flags               01 (1) 'Modification'\n+1980E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1980EC CENTRAL HEADER #93    02014B50 (33639248)\n+1980F0 Created Zip Spec      14 (20) '2.0'\n+1980F1 Created OS            00 (0) 'MS-DOS'\n+1980F2 Extract Zip Spec      14 (20) '2.0'\n+1980F3 Extract OS            00 (0) 'MS-DOS'\n+1980F4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1980F6 Compression Method    0000 (0) 'Stored'\n+1980F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1980FC CRC                   A4ED9691 (2767034001)\n+198100 Compressed Size       00001C35 (7221)\n+198104 Uncompressed Size     00001C35 (7221)\n+198108 Filename Length       004D (77)\n+19810A Extra Length          0009 (9)\n+19810C Comment Length        0000 (0)\n+19810E Disk Start            0000 (0)\n+198110 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198112 Ext File Attributes   00000000 (0)\n+198116 Local Header Offset   00057051 (356433)\n+19811A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19811A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198167 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198169   Length              0005 (5)\n+19816B   Flags               01 (1) 'Modification'\n+19816C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198170 CENTRAL HEADER #94    02014B50 (33639248)\n+198174 Created Zip Spec      14 (20) '2.0'\n+198175 Created OS            00 (0) 'MS-DOS'\n+198176 Extract Zip Spec      14 (20) '2.0'\n+198177 Extract OS            00 (0) 'MS-DOS'\n+198178 General Purpose Flag  0000 (0)\n+19817A Compression Method    0000 (0) 'Stored'\n+19817C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198180 CRC                   00000000 (0)\n+198184 Compressed Size       00000000 (0)\n+198188 Uncompressed Size     00000000 (0)\n+19818C Filename Length       0031 (49)\n+19818E Extra Length          0009 (9)\n+198190 Comment Length        0000 (0)\n+198192 Disk Start            0000 (0)\n+198194 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198196 Ext File Attributes   00000000 (0)\n+19819A Local Header Offset   00058D0A (363786)\n+19819E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19819E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1981CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1981D1   Length              0005 (5)\n+1981D3   Flags               01 (1) 'Modification'\n+1981D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1981D8 CENTRAL HEADER #95    02014B50 (33639248)\n+1981DC Created Zip Spec      14 (20) '2.0'\n+1981DD Created OS            00 (0) 'MS-DOS'\n+1981DE Extract Zip Spec      14 (20) '2.0'\n+1981DF Extract OS            00 (0) 'MS-DOS'\n+1981E0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1981E2 Compression Method    0000 (0) 'Stored'\n+1981E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1981E8 CRC                   BAE14165 (3135324517)\n+1981EC Compressed Size       00005A88 (23176)\n+1981F0 Uncompressed Size     00005A88 (23176)\n+1981F4 Filename Length       0054 (84)\n+1981F6 Extra Length          0009 (9)\n+1981F8 Comment Length        0000 (0)\n+1981FA Disk Start            0000 (0)\n+1981FC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1981FE Ext File Attributes   00000000 (0)\n+198202 Local Header Offset   00058D62 (363874)\n+198206 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198206: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19825A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19825C   Length              0005 (5)\n+19825E   Flags               01 (1) 'Modification'\n+19825F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198263 CENTRAL HEADER #96    02014B50 (33639248)\n+198267 Created Zip Spec      14 (20) '2.0'\n+198268 Created OS            00 (0) 'MS-DOS'\n+198269 Extract Zip Spec      14 (20) '2.0'\n+19826A Extract OS            00 (0) 'MS-DOS'\n+19826B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19826D Compression Method    0000 (0) 'Stored'\n+19826F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198273 CRC                   BA62C70E (3127035662)\n+198277 Compressed Size       000005F2 (1522)\n+19827B Uncompressed Size     000005F2 (1522)\n+19827F Filename Length       005B (91)\n+198281 Extra Length          0009 (9)\n+198283 Comment Length        0000 (0)\n+198285 Disk Start            0000 (0)\n+198287 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198289 Ext File Attributes   00000000 (0)\n+19828D Local Header Offset   0005E875 (387189)\n+198291 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198291: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1982EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1982EE   Length              0005 (5)\n+1982F0   Flags               01 (1) 'Modification'\n+1982F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1982F5 CENTRAL HEADER #97    02014B50 (33639248)\n+1982F9 Created Zip Spec      14 (20) '2.0'\n+1982FA Created OS            00 (0) 'MS-DOS'\n+1982FB Extract Zip Spec      14 (20) '2.0'\n+1982FC Extract OS            00 (0) 'MS-DOS'\n+1982FD General Purpose Flag  0000 (0)\n+1982FF Compression Method    0000 (0) 'Stored'\n+198301 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198305 CRC                   00000000 (0)\n+198309 Compressed Size       00000000 (0)\n+19830D Uncompressed Size     00000000 (0)\n+198311 Filename Length       0030 (48)\n+198313 Extra Length          0009 (9)\n+198315 Comment Length        0000 (0)\n+198317 Disk Start            0000 (0)\n+198319 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19831B Ext File Attributes   00000000 (0)\n+19831F Local Header Offset   0005EEF9 (388857)\n+198323 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198323: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198353 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198355   Length              0005 (5)\n+198357   Flags               01 (1) 'Modification'\n+198358   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19835C CENTRAL HEADER #98    02014B50 (33639248)\n+198360 Created Zip Spec      14 (20) '2.0'\n+198361 Created OS            00 (0) 'MS-DOS'\n+198362 Extract Zip Spec      14 (20) '2.0'\n+198363 Extract OS            00 (0) 'MS-DOS'\n+198364 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198366 Compression Method    0000 (0) 'Stored'\n+198368 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19836C CRC                   B653D686 (3058947718)\n+198370 Compressed Size       000008EF (2287)\n+198374 Uncompressed Size     000008EF (2287)\n+198378 Filename Length       004C (76)\n+19837A Extra Length          0009 (9)\n+19837C Comment Length        0000 (0)\n+19837E Disk Start            0000 (0)\n+198380 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198382 Ext File Attributes   00000000 (0)\n+198386 Local Header Offset   0005EF50 (388944)\n+19838A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19838A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1983D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1983D8   Length              0005 (5)\n+1983DA   Flags               01 (1) 'Modification'\n+1983DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1983DF CENTRAL HEADER #99    02014B50 (33639248)\n+1983E3 Created Zip Spec      14 (20) '2.0'\n+1983E4 Created OS            00 (0) 'MS-DOS'\n+1983E5 Extract Zip Spec      14 (20) '2.0'\n+1983E6 Extract OS            00 (0) 'MS-DOS'\n+1983E7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1983E9 Compression Method    0000 (0) 'Stored'\n+1983EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1983EF CRC                   0495D293 (76927635)\n+1983F3 Compressed Size       00000545 (1349)\n+1983F7 Uncompressed Size     00000545 (1349)\n+1983FB Filename Length       0053 (83)\n+1983FD Extra Length          0009 (9)\n+1983FF Comment Length        0000 (0)\n+198401 Disk Start            0000 (0)\n+198403 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198405 Ext File Attributes   00000000 (0)\n+198409 Local Header Offset   0005F8C2 (391362)\n+19840D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19840D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198460 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198462   Length              0005 (5)\n+198464   Flags               01 (1) 'Modification'\n+198465   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198469 CENTRAL HEADER #100   02014B50 (33639248)\n+19846D Created Zip Spec      14 (20) '2.0'\n+19846E Created OS            00 (0) 'MS-DOS'\n+19846F Extract Zip Spec      14 (20) '2.0'\n+198470 Extract OS            00 (0) 'MS-DOS'\n+198471 General Purpose Flag  0000 (0)\n+198473 Compression Method    0000 (0) 'Stored'\n+198475 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198479 CRC                   00000000 (0)\n+19847D Compressed Size       00000000 (0)\n+198481 Uncompressed Size     00000000 (0)\n+198485 Filename Length       0034 (52)\n+198487 Extra Length          0009 (9)\n+198489 Comment Length        0000 (0)\n+19848B Disk Start            0000 (0)\n+19848D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19848F Ext File Attributes   00000000 (0)\n+198493 Local Header Offset   0005FE91 (392849)\n+198497 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198497: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1984CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1984CD   Length              0005 (5)\n+1984CF   Flags               01 (1) 'Modification'\n+1984D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1984D4 CENTRAL HEADER #101   02014B50 (33639248)\n+1984D8 Created Zip Spec      14 (20) '2.0'\n+1984D9 Created OS            00 (0) 'MS-DOS'\n+1984DA Extract Zip Spec      14 (20) '2.0'\n+1984DB Extract OS            00 (0) 'MS-DOS'\n+1984DC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1984DE Compression Method    0000 (0) 'Stored'\n+1984E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1984E4 CRC                   2171436F (561070959)\n+1984E8 Compressed Size       00000FAF (4015)\n+1984EC Uncompressed Size     00000FAF (4015)\n+1984F0 Filename Length       0056 (86)\n+1984F2 Extra Length          0009 (9)\n+1984F4 Comment Length        0000 (0)\n+1984F6 Disk Start            0000 (0)\n+1984F8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1984FA Ext File Attributes   00000000 (0)\n+1984FE Local Header Offset   0005FEEC (392940)\n+198502 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198502: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198558 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19855A   Length              0005 (5)\n+19855C   Flags               01 (1) 'Modification'\n+19855D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198561 CENTRAL HEADER #102   02014B50 (33639248)\n+198565 Created Zip Spec      14 (20) '2.0'\n+198566 Created OS            00 (0) 'MS-DOS'\n+198567 Extract Zip Spec      14 (20) '2.0'\n+198568 Extract OS            00 (0) 'MS-DOS'\n+198569 General Purpose Flag  0000 (0)\n+19856B Compression Method    0000 (0) 'Stored'\n+19856D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198571 CRC                   00000000 (0)\n+198575 Compressed Size       00000000 (0)\n+198579 Uncompressed Size     00000000 (0)\n+19857D Filename Length       0022 (34)\n+19857F Extra Length          0009 (9)\n+198581 Comment Length        0000 (0)\n+198583 Disk Start            0000 (0)\n+198585 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198587 Ext File Attributes   00000000 (0)\n+19858B Local Header Offset   00060F28 (397096)\n+19858F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19858F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1985B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1985B3   Length              0005 (5)\n+1985B5   Flags               01 (1) 'Modification'\n+1985B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1985BA CENTRAL HEADER #103   02014B50 (33639248)\n+1985BE Created Zip Spec      14 (20) '2.0'\n+1985BF Created OS            00 (0) 'MS-DOS'\n+1985C0 Extract Zip Spec      14 (20) '2.0'\n+1985C1 Extract OS            00 (0) 'MS-DOS'\n+1985C2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1985C4 Compression Method    0000 (0) 'Stored'\n+1985C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1985CA CRC                   2E0F2713 (772744979)\n+1985CE Compressed Size       00002999 (10649)\n+1985D2 Uncompressed Size     00002999 (10649)\n+1985D6 Filename Length       0036 (54)\n+1985D8 Extra Length          0009 (9)\n+1985DA Comment Length        0000 (0)\n+1985DC Disk Start            0000 (0)\n+1985DE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1985E0 Ext File Attributes   00000000 (0)\n+1985E4 Local Header Offset   00060F71 (397169)\n+1985E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1985E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19861E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198620   Length              0005 (5)\n+198622   Flags               01 (1) 'Modification'\n+198623   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198627 CENTRAL HEADER #104   02014B50 (33639248)\n+19862B Created Zip Spec      14 (20) '2.0'\n+19862C Created OS            00 (0) 'MS-DOS'\n+19862D Extract Zip Spec      14 (20) '2.0'\n+19862E Extract OS            00 (0) 'MS-DOS'\n+19862F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198631 Compression Method    0000 (0) 'Stored'\n+198633 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198637 CRC                   B7E4B654 (3085219412)\n+19863B Compressed Size       000003D7 (983)\n+19863F Uncompressed Size     000003D7 (983)\n+198643 Filename Length       0036 (54)\n+198645 Extra Length          0009 (9)\n+198647 Comment Length        0000 (0)\n+198649 Disk Start            0000 (0)\n+19864B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19864D Ext File Attributes   00000000 (0)\n+198651 Local Header Offset   00063977 (407927)\n+198655 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198655: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19868B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19868D   Length              0005 (5)\n+19868F   Flags               01 (1) 'Modification'\n+198690   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198694 CENTRAL HEADER #105   02014B50 (33639248)\n+198698 Created Zip Spec      14 (20) '2.0'\n+198699 Created OS            00 (0) 'MS-DOS'\n+19869A Extract Zip Spec      14 (20) '2.0'\n+19869B Extract OS            00 (0) 'MS-DOS'\n+19869C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19869E Compression Method    0000 (0) 'Stored'\n+1986A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1986A4 CRC                   67723A29 (1735539241)\n+1986A8 Compressed Size       0000044F (1103)\n+1986AC Uncompressed Size     0000044F (1103)\n+1986B0 Filename Length       0033 (51)\n+1986B2 Extra Length          0009 (9)\n+1986B4 Comment Length        0000 (0)\n+1986B6 Disk Start            0000 (0)\n+1986B8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1986BA Ext File Attributes   00000000 (0)\n+1986BE Local Header Offset   00063DBB (409019)\n+1986C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1986C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1986F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1986F7   Length              0005 (5)\n+1986F9   Flags               01 (1) 'Modification'\n+1986FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1986FE CENTRAL HEADER #106   02014B50 (33639248)\n+198702 Created Zip Spec      14 (20) '2.0'\n+198703 Created OS            00 (0) 'MS-DOS'\n+198704 Extract Zip Spec      14 (20) '2.0'\n+198705 Extract OS            00 (0) 'MS-DOS'\n+198706 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198708 Compression Method    0000 (0) 'Stored'\n+19870A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19870E CRC                   EBE34920 (3957541152)\n+198712 Compressed Size       00000E07 (3591)\n+198716 Uncompressed Size     00000E07 (3591)\n+19871A Filename Length       0038 (56)\n+19871C Extra Length          0009 (9)\n+19871E Comment Length        0000 (0)\n+198720 Disk Start            0000 (0)\n+198722 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198724 Ext File Attributes   00000000 (0)\n+198728 Local Header Offset   00064274 (410228)\n+19872C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19872C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198764 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198766   Length              0005 (5)\n+198768   Flags               01 (1) 'Modification'\n+198769   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19876D CENTRAL HEADER #107   02014B50 (33639248)\n+198771 Created Zip Spec      14 (20) '2.0'\n+198772 Created OS            00 (0) 'MS-DOS'\n+198773 Extract Zip Spec      14 (20) '2.0'\n+198774 Extract OS            00 (0) 'MS-DOS'\n+198775 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198777 Compression Method    0000 (0) 'Stored'\n+198779 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19877D CRC                   F01E112A (4028502314)\n+198781 Compressed Size       000003D0 (976)\n+198785 Uncompressed Size     000003D0 (976)\n+198789 Filename Length       0038 (56)\n+19878B Extra Length          0009 (9)\n+19878D Comment Length        0000 (0)\n+19878F Disk Start            0000 (0)\n+198791 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198793 Ext File Attributes   00000000 (0)\n+198797 Local Header Offset   000650EA (413930)\n+19879B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19879B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1987D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1987D5   Length              0005 (5)\n+1987D7   Flags               01 (1) 'Modification'\n+1987D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1987DC CENTRAL HEADER #108   02014B50 (33639248)\n+1987E0 Created Zip Spec      14 (20) '2.0'\n+1987E1 Created OS            00 (0) 'MS-DOS'\n+1987E2 Extract Zip Spec      14 (20) '2.0'\n+1987E3 Extract OS            00 (0) 'MS-DOS'\n+1987E4 General Purpose Flag  0000 (0)\n+1987E6 Compression Method    0000 (0) 'Stored'\n+1987E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1987EC CRC                   00000000 (0)\n+1987F0 Compressed Size       00000000 (0)\n+1987F4 Uncompressed Size     00000000 (0)\n+1987F8 Filename Length       0020 (32)\n+1987FA Extra Length          0009 (9)\n+1987FC Comment Length        0000 (0)\n+1987FE Disk Start            0000 (0)\n+198800 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198802 Ext File Attributes   00000000 (0)\n+198806 Local Header Offset   00065529 (415017)\n+19880A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19880A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19882A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19882C   Length              0005 (5)\n+19882E   Flags               01 (1) 'Modification'\n+19882F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198833 CENTRAL HEADER #109   02014B50 (33639248)\n+198837 Created Zip Spec      14 (20) '2.0'\n+198838 Created OS            00 (0) 'MS-DOS'\n+198839 Extract Zip Spec      14 (20) '2.0'\n+19883A Extract OS            00 (0) 'MS-DOS'\n+19883B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19883D Compression Method    0000 (0) 'Stored'\n+19883F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198843 CRC                   16DF264E (383723086)\n+198847 Compressed Size       000003CD (973)\n+19884B Uncompressed Size     000003CD (973)\n+19884F Filename Length       0031 (49)\n+198851 Extra Length          0009 (9)\n+198853 Comment Length        0000 (0)\n+198855 Disk Start            0000 (0)\n+198857 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198859 Ext File Attributes   00000000 (0)\n+19885D Local Header Offset   00065570 (415088)\n+198861 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198861: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198892 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198894   Length              0005 (5)\n+198896   Flags               01 (1) 'Modification'\n+198897   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19889B CENTRAL HEADER #110   02014B50 (33639248)\n+19889F Created Zip Spec      14 (20) '2.0'\n+1988A0 Created OS            00 (0) 'MS-DOS'\n+1988A1 Extract Zip Spec      14 (20) '2.0'\n+1988A2 Extract OS            00 (0) 'MS-DOS'\n+1988A3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1988A5 Compression Method    0000 (0) 'Stored'\n+1988A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1988AB CRC                   66454DE7 (1715817959)\n+1988AF Compressed Size       000005ED (1517)\n+1988B3 Uncompressed Size     000005ED (1517)\n+1988B7 Filename Length       002E (46)\n+1988B9 Extra Length          0009 (9)\n+1988BB Comment Length        0000 (0)\n+1988BD Disk Start            0000 (0)\n+1988BF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1988C1 Ext File Attributes   00000000 (0)\n+1988C5 Local Header Offset   000659A5 (416165)\n+1988C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1988C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1988F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1988F9   Length              0005 (5)\n+1988FB   Flags               01 (1) 'Modification'\n+1988FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198900 CENTRAL HEADER #111   02014B50 (33639248)\n+198904 Created Zip Spec      14 (20) '2.0'\n+198905 Created OS            00 (0) 'MS-DOS'\n+198906 Extract Zip Spec      14 (20) '2.0'\n+198907 Extract OS            00 (0) 'MS-DOS'\n+198908 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19890A Compression Method    0000 (0) 'Stored'\n+19890C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198910 CRC                   F8009358 (4160787288)\n+198914 Compressed Size       0000049D (1181)\n+198918 Uncompressed Size     0000049D (1181)\n+19891C Filename Length       0035 (53)\n+19891E Extra Length          0009 (9)\n+198920 Comment Length        0000 (0)\n+198922 Disk Start            0000 (0)\n+198924 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198926 Ext File Attributes   00000000 (0)\n+19892A Local Header Offset   00065FF7 (417783)\n+19892E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19892E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198963 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198965   Length              0005 (5)\n+198967   Flags               01 (1) 'Modification'\n+198968   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19896C CENTRAL HEADER #112   02014B50 (33639248)\n+198970 Created Zip Spec      14 (20) '2.0'\n+198971 Created OS            00 (0) 'MS-DOS'\n+198972 Extract Zip Spec      14 (20) '2.0'\n+198973 Extract OS            00 (0) 'MS-DOS'\n+198974 General Purpose Flag  0000 (0)\n+198976 Compression Method    0000 (0) 'Stored'\n+198978 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19897C CRC                   00000000 (0)\n+198980 Compressed Size       00000000 (0)\n+198984 Uncompressed Size     00000000 (0)\n+198988 Filename Length       0020 (32)\n+19898A Extra Length          0009 (9)\n+19898C Comment Length        0000 (0)\n+19898E Disk Start            0000 (0)\n+198990 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198992 Ext File Attributes   00000000 (0)\n+198996 Local Header Offset   00066500 (419072)\n+19899A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19899A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1989BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1989BC   Length              0005 (5)\n+1989BE   Flags               01 (1) 'Modification'\n+1989BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1989C3 CENTRAL HEADER #113   02014B50 (33639248)\n+1989C7 Created Zip Spec      14 (20) '2.0'\n+1989C8 Created OS            00 (0) 'MS-DOS'\n+1989C9 Extract Zip Spec      14 (20) '2.0'\n+1989CA Extract OS            00 (0) 'MS-DOS'\n+1989CB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1989CD Compression Method    0000 (0) 'Stored'\n+1989CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1989D3 CRC                   C8C419A3 (3368294819)\n+1989D7 Compressed Size       00000ECC (3788)\n+1989DB Uncompressed Size     00000ECC (3788)\n+1989DF Filename Length       002E (46)\n+1989E1 Extra Length          0009 (9)\n+1989E3 Comment Length        0000 (0)\n+1989E5 Disk Start            0000 (0)\n+1989E7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1989E9 Ext File Attributes   00000000 (0)\n+1989ED Local Header Offset   00066547 (419143)\n+1989F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1989F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198A1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198A21   Length              0005 (5)\n+198A23   Flags               01 (1) 'Modification'\n+198A24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198A28 CENTRAL HEADER #114   02014B50 (33639248)\n+198A2C Created Zip Spec      14 (20) '2.0'\n+198A2D Created OS            00 (0) 'MS-DOS'\n+198A2E Extract Zip Spec      14 (20) '2.0'\n+198A2F Extract OS            00 (0) 'MS-DOS'\n+198A30 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198A32 Compression Method    0000 (0) 'Stored'\n+198A34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198A38 CRC                   C31C00DA (3273392346)\n+198A3C Compressed Size       0000042C (1068)\n+198A40 Uncompressed Size     0000042C (1068)\n+198A44 Filename Length       0034 (52)\n+198A46 Extra Length          0009 (9)\n+198A48 Comment Length        0000 (0)\n+198A4A Disk Start            0000 (0)\n+198A4C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198A4E Ext File Attributes   00000000 (0)\n+198A52 Local Header Offset   00067478 (423032)\n+198A56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198A56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198A8A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198A8C   Length              0005 (5)\n+198A8E   Flags               01 (1) 'Modification'\n+198A8F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198A93 CENTRAL HEADER #115   02014B50 (33639248)\n+198A97 Created Zip Spec      14 (20) '2.0'\n+198A98 Created OS            00 (0) 'MS-DOS'\n+198A99 Extract Zip Spec      14 (20) '2.0'\n+198A9A Extract OS            00 (0) 'MS-DOS'\n+198A9B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198A9D Compression Method    0000 (0) 'Stored'\n+198A9F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198AA3 CRC                   C4FF04D7 (3305047255)\n+198AA7 Compressed Size       00000558 (1368)\n+198AAB Uncompressed Size     00000558 (1368)\n+198AAF Filename Length       003D (61)\n+198AB1 Extra Length          0009 (9)\n+198AB3 Comment Length        0000 (0)\n+198AB5 Disk Start            0000 (0)\n+198AB7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198AB9 Ext File Attributes   00000000 (0)\n+198ABD Local Header Offset   0006790F (424207)\n+198AC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198AC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198AFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198B00   Length              0005 (5)\n+198B02   Flags               01 (1) 'Modification'\n+198B03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198B07 CENTRAL HEADER #116   02014B50 (33639248)\n+198B0B Created Zip Spec      14 (20) '2.0'\n+198B0C Created OS            00 (0) 'MS-DOS'\n+198B0D Extract Zip Spec      14 (20) '2.0'\n+198B0E Extract OS            00 (0) 'MS-DOS'\n+198B0F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198B11 Compression Method    0000 (0) 'Stored'\n+198B13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198B17 CRC                   B8E6EA58 (3102141016)\n+198B1B Compressed Size       0000053B (1339)\n+198B1F Uncompressed Size     0000053B (1339)\n+198B23 Filename Length       003F (63)\n+198B25 Extra Length          0009 (9)\n+198B27 Comment Length        0000 (0)\n+198B29 Disk Start            0000 (0)\n+198B2B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198B2D Ext File Attributes   00000000 (0)\n+198B31 Local Header Offset   00067EDB (425691)\n+198B35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198B35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198B74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198B76   Length              0005 (5)\n+198B78   Flags               01 (1) 'Modification'\n+198B79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198B7D CENTRAL HEADER #117   02014B50 (33639248)\n+198B81 Created Zip Spec      14 (20) '2.0'\n+198B82 Created OS            00 (0) 'MS-DOS'\n+198B83 Extract Zip Spec      14 (20) '2.0'\n+198B84 Extract OS            00 (0) 'MS-DOS'\n+198B85 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198B87 Compression Method    0000 (0) 'Stored'\n+198B89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198B8D CRC                   27EF74B8 (670004408)\n+198B91 Compressed Size       00000606 (1542)\n+198B95 Uncompressed Size     00000606 (1542)\n+198B99 Filename Length       003F (63)\n+198B9B Extra Length          0009 (9)\n+198B9D Comment Length        0000 (0)\n+198B9F Disk Start            0000 (0)\n+198BA1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198BA3 Ext File Attributes   00000000 (0)\n+198BA7 Local Header Offset   0006848C (427148)\n+198BAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198BAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198BEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198BEC   Length              0005 (5)\n+198BEE   Flags               01 (1) 'Modification'\n+198BEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198BF3 CENTRAL HEADER #118   02014B50 (33639248)\n+198BF7 Created Zip Spec      14 (20) '2.0'\n+198BF8 Created OS            00 (0) 'MS-DOS'\n+198BF9 Extract Zip Spec      14 (20) '2.0'\n+198BFA Extract OS            00 (0) 'MS-DOS'\n+198BFB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198BFD Compression Method    0000 (0) 'Stored'\n+198BFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198C03 CRC                   3F610BCB (1063324619)\n+198C07 Compressed Size       00000555 (1365)\n+198C0B Uncompressed Size     00000555 (1365)\n+198C0F Filename Length       003C (60)\n+198C11 Extra Length          0009 (9)\n+198C13 Comment Length        0000 (0)\n+198C15 Disk Start            0000 (0)\n+198C17 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198C19 Ext File Attributes   00000000 (0)\n+198C1D Local Header Offset   00068B08 (428808)\n+198C21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198C21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198C5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198C5F   Length              0005 (5)\n+198C61   Flags               01 (1) 'Modification'\n+198C62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198C66 CENTRAL HEADER #119   02014B50 (33639248)\n+198C6A Created Zip Spec      14 (20) '2.0'\n+198C6B Created OS            00 (0) 'MS-DOS'\n+198C6C Extract Zip Spec      14 (20) '2.0'\n+198C6D Extract OS            00 (0) 'MS-DOS'\n+198C6E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198C70 Compression Method    0000 (0) 'Stored'\n+198C72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198C76 CRC                   15F2A538 (368223544)\n+198C7A Compressed Size       0000054E (1358)\n+198C7E Uncompressed Size     0000054E (1358)\n+198C82 Filename Length       003B (59)\n+198C84 Extra Length          0009 (9)\n+198C86 Comment Length        0000 (0)\n+198C88 Disk Start            0000 (0)\n+198C8A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198C8C Ext File Attributes   00000000 (0)\n+198C90 Local Header Offset   000690D0 (430288)\n+198C94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198C94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198CCF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198CD1   Length              0005 (5)\n+198CD3   Flags               01 (1) 'Modification'\n+198CD4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198CD8 CENTRAL HEADER #120   02014B50 (33639248)\n+198CDC Created Zip Spec      14 (20) '2.0'\n+198CDD Created OS            00 (0) 'MS-DOS'\n+198CDE Extract Zip Spec      14 (20) '2.0'\n+198CDF Extract OS            00 (0) 'MS-DOS'\n+198CE0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198CE2 Compression Method    0000 (0) 'Stored'\n+198CE4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198CE8 CRC                   DB3985F1 (3677980145)\n+198CEC Compressed Size       00000554 (1364)\n+198CF0 Uncompressed Size     00000554 (1364)\n+198CF4 Filename Length       003D (61)\n+198CF6 Extra Length          0009 (9)\n+198CF8 Comment Length        0000 (0)\n+198CFA Disk Start            0000 (0)\n+198CFC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198CFE Ext File Attributes   00000000 (0)\n+198D02 Local Header Offset   00069690 (431760)\n+198D06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198D06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198D43 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198D45   Length              0005 (5)\n+198D47   Flags               01 (1) 'Modification'\n+198D48   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198D4C CENTRAL HEADER #121   02014B50 (33639248)\n+198D50 Created Zip Spec      14 (20) '2.0'\n+198D51 Created OS            00 (0) 'MS-DOS'\n+198D52 Extract Zip Spec      14 (20) '2.0'\n+198D53 Extract OS            00 (0) 'MS-DOS'\n+198D54 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198D56 Compression Method    0000 (0) 'Stored'\n+198D58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198D5C CRC                   7AC3DE73 (2059656819)\n+198D60 Compressed Size       0000054B (1355)\n+198D64 Uncompressed Size     0000054B (1355)\n+198D68 Filename Length       003A (58)\n+198D6A Extra Length          0009 (9)\n+198D6C Comment Length        0000 (0)\n+198D6E Disk Start            0000 (0)\n+198D70 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198D72 Ext File Attributes   00000000 (0)\n+198D76 Local Header Offset   00069C58 (433240)\n+198D7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198D7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198DB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198DB6   Length              0005 (5)\n+198DB8   Flags               01 (1) 'Modification'\n+198DB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198DBD CENTRAL HEADER #122   02014B50 (33639248)\n+198DC1 Created Zip Spec      14 (20) '2.0'\n+198DC2 Created OS            00 (0) 'MS-DOS'\n+198DC3 Extract Zip Spec      14 (20) '2.0'\n+198DC4 Extract OS            00 (0) 'MS-DOS'\n+198DC5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198DC7 Compression Method    0000 (0) 'Stored'\n+198DC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198DCD CRC                   190CB88A (420264074)\n+198DD1 Compressed Size       0000051B (1307)\n+198DD5 Uncompressed Size     0000051B (1307)\n+198DD9 Filename Length       003E (62)\n+198DDB Extra Length          0009 (9)\n+198DDD Comment Length        0000 (0)\n+198DDF Disk Start            0000 (0)\n+198DE1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198DE3 Ext File Attributes   00000000 (0)\n+198DE7 Local Header Offset   0006A214 (434708)\n+198DEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198DEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198E29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198E2B   Length              0005 (5)\n+198E2D   Flags               01 (1) 'Modification'\n+198E2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198E32 CENTRAL HEADER #123   02014B50 (33639248)\n+198E36 Created Zip Spec      14 (20) '2.0'\n+198E37 Created OS            00 (0) 'MS-DOS'\n+198E38 Extract Zip Spec      14 (20) '2.0'\n+198E39 Extract OS            00 (0) 'MS-DOS'\n+198E3A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198E3C Compression Method    0000 (0) 'Stored'\n+198E3E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198E42 CRC                   94D0E691 (2496718481)\n+198E46 Compressed Size       00000550 (1360)\n+198E4A Uncompressed Size     00000550 (1360)\n+198E4E Filename Length       003B (59)\n+198E50 Extra Length          0009 (9)\n+198E52 Comment Length        0000 (0)\n+198E54 Disk Start            0000 (0)\n+198E56 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198E58 Ext File Attributes   00000000 (0)\n+198E5C Local Header Offset   0006A7A4 (436132)\n+198E60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198E60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198E9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198E9D   Length              0005 (5)\n+198E9F   Flags               01 (1) 'Modification'\n+198EA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198EA4 CENTRAL HEADER #124   02014B50 (33639248)\n+198EA8 Created Zip Spec      14 (20) '2.0'\n+198EA9 Created OS            00 (0) 'MS-DOS'\n+198EAA Extract Zip Spec      14 (20) '2.0'\n+198EAB Extract OS            00 (0) 'MS-DOS'\n+198EAC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198EAE Compression Method    0000 (0) 'Stored'\n+198EB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198EB4 CRC                   E4FF1EF0 (3841924848)\n+198EB8 Compressed Size       00000470 (1136)\n+198EBC Uncompressed Size     00000470 (1136)\n+198EC0 Filename Length       003C (60)\n+198EC2 Extra Length          0009 (9)\n+198EC4 Comment Length        0000 (0)\n+198EC6 Disk Start            0000 (0)\n+198EC8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198ECA Ext File Attributes   00000000 (0)\n+198ECE Local Header Offset   0006AD66 (437606)\n+198ED2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198ED2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198F0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198F10   Length              0005 (5)\n+198F12   Flags               01 (1) 'Modification'\n+198F13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198F17 CENTRAL HEADER #125   02014B50 (33639248)\n+198F1B Created Zip Spec      14 (20) '2.0'\n+198F1C Created OS            00 (0) 'MS-DOS'\n+198F1D Extract Zip Spec      14 (20) '2.0'\n+198F1E Extract OS            00 (0) 'MS-DOS'\n+198F1F General Purpose Flag  0000 (0)\n+198F21 Compression Method    0000 (0) 'Stored'\n+198F23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198F27 CRC                   00000000 (0)\n+198F2B Compressed Size       00000000 (0)\n+198F2F Uncompressed Size     00000000 (0)\n+198F33 Filename Length       0029 (41)\n+198F35 Extra Length          0009 (9)\n+198F37 Comment Length        0000 (0)\n+198F39 Disk Start            0000 (0)\n+198F3B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198F3D Ext File Attributes   00000000 (0)\n+198F41 Local Header Offset   0006B249 (438857)\n+198F45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198F45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198F6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198F70   Length              0005 (5)\n+198F72   Flags               01 (1) 'Modification'\n+198F73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198F77 CENTRAL HEADER #126   02014B50 (33639248)\n+198F7B Created Zip Spec      14 (20) '2.0'\n+198F7C Created OS            00 (0) 'MS-DOS'\n+198F7D Extract Zip Spec      14 (20) '2.0'\n+198F7E Extract OS            00 (0) 'MS-DOS'\n+198F7F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198F81 Compression Method    0000 (0) 'Stored'\n+198F83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198F87 CRC                   54CD8A2A (1422756394)\n+198F8B Compressed Size       00000D8D (3469)\n+198F8F Uncompressed Size     00000D8D (3469)\n+198F93 Filename Length       0041 (65)\n+198F95 Extra Length          0009 (9)\n+198F97 Comment Length        0000 (0)\n+198F99 Disk Start            0000 (0)\n+198F9B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+198F9D Ext File Attributes   00000000 (0)\n+198FA1 Local Header Offset   0006B299 (438937)\n+198FA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x198FA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+198FE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+198FE8   Length              0005 (5)\n+198FEA   Flags               01 (1) 'Modification'\n+198FEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+198FEF CENTRAL HEADER #127   02014B50 (33639248)\n+198FF3 Created Zip Spec      14 (20) '2.0'\n+198FF4 Created OS            00 (0) 'MS-DOS'\n+198FF5 Extract Zip Spec      14 (20) '2.0'\n+198FF6 Extract OS            00 (0) 'MS-DOS'\n+198FF7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+198FF9 Compression Method    0000 (0) 'Stored'\n+198FFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+198FFF CRC                   6FAB873E (1873512254)\n+199003 Compressed Size       000007B0 (1968)\n+199007 Uncompressed Size     000007B0 (1968)\n+19900B Filename Length       0044 (68)\n+19900D Extra Length          0009 (9)\n+19900F Comment Length        0000 (0)\n+199011 Disk Start            0000 (0)\n+199013 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199015 Ext File Attributes   00000000 (0)\n+199019 Local Header Offset   0006C09E (442526)\n+19901D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19901D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199061 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199063   Length              0005 (5)\n+199065   Flags               01 (1) 'Modification'\n+199066   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19906A CENTRAL HEADER #128   02014B50 (33639248)\n+19906E Created Zip Spec      14 (20) '2.0'\n+19906F Created OS            00 (0) 'MS-DOS'\n+199070 Extract Zip Spec      14 (20) '2.0'\n+199071 Extract OS            00 (0) 'MS-DOS'\n+199072 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199074 Compression Method    0000 (0) 'Stored'\n+199076 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19907A CRC                   0C78A9F4 (209234420)\n+19907E Compressed Size       00000530 (1328)\n+199082 Uncompressed Size     00000530 (1328)\n+199086 Filename Length       004C (76)\n+199088 Extra Length          0009 (9)\n+19908A Comment Length        0000 (0)\n+19908C Disk Start            0000 (0)\n+19908E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199090 Ext File Attributes   00000000 (0)\n+199094 Local Header Offset   0006C8C9 (444617)\n+199098 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199098: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1990E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1990E6   Length              0005 (5)\n+1990E8   Flags               01 (1) 'Modification'\n+1990E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1990ED CENTRAL HEADER #129   02014B50 (33639248)\n+1990F1 Created Zip Spec      14 (20) '2.0'\n+1990F2 Created OS            00 (0) 'MS-DOS'\n+1990F3 Extract Zip Spec      14 (20) '2.0'\n+1990F4 Extract OS            00 (0) 'MS-DOS'\n+1990F5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1990F7 Compression Method    0000 (0) 'Stored'\n+1990F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1990FD CRC                   5D42735B (1564635995)\n+199101 Compressed Size       0000055A (1370)\n+199105 Uncompressed Size     0000055A (1370)\n+199109 Filename Length       004C (76)\n+19910B Extra Length          0009 (9)\n+19910D Comment Length        0000 (0)\n+19910F Disk Start            0000 (0)\n+199111 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199113 Ext File Attributes   00000000 (0)\n+199117 Local Header Offset   0006CE7C (446076)\n+19911B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19911B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199167 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199169   Length              0005 (5)\n+19916B   Flags               01 (1) 'Modification'\n+19916C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199170 CENTRAL HEADER #130   02014B50 (33639248)\n+199174 Created Zip Spec      14 (20) '2.0'\n+199175 Created OS            00 (0) 'MS-DOS'\n+199176 Extract Zip Spec      14 (20) '2.0'\n+199177 Extract OS            00 (0) 'MS-DOS'\n+199178 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19917A Compression Method    0000 (0) 'Stored'\n+19917C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199180 CRC                   FE374BB9 (4265036729)\n+199184 Compressed Size       000004F7 (1271)\n+199188 Uncompressed Size     000004F7 (1271)\n+19918C Filename Length       0049 (73)\n+19918E Extra Length          0009 (9)\n+199190 Comment Length        0000 (0)\n+199192 Disk Start            0000 (0)\n+199194 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199196 Ext File Attributes   00000000 (0)\n+19919A Local Header Offset   0006D459 (447577)\n+19919E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19919E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1991E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1991E9   Length              0005 (5)\n+1991EB   Flags               01 (1) 'Modification'\n+1991EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1991F0 CENTRAL HEADER #131   02014B50 (33639248)\n+1991F4 Created Zip Spec      14 (20) '2.0'\n+1991F5 Created OS            00 (0) 'MS-DOS'\n+1991F6 Extract Zip Spec      14 (20) '2.0'\n+1991F7 Extract OS            00 (0) 'MS-DOS'\n+1991F8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1991FA Compression Method    0000 (0) 'Stored'\n+1991FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199200 CRC                   EF9E0DDB (4020112859)\n+199204 Compressed Size       000004E0 (1248)\n+199208 Uncompressed Size     000004E0 (1248)\n+19920C Filename Length       0044 (68)\n+19920E Extra Length          0009 (9)\n+199210 Comment Length        0000 (0)\n+199212 Disk Start            0000 (0)\n+199214 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199216 Ext File Attributes   00000000 (0)\n+19921A Local Header Offset   0006D9D0 (448976)\n+19921E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19921E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199262 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199264   Length              0005 (5)\n+199266   Flags               01 (1) 'Modification'\n+199267   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19926B CENTRAL HEADER #132   02014B50 (33639248)\n+19926F Created Zip Spec      14 (20) '2.0'\n+199270 Created OS            00 (0) 'MS-DOS'\n+199271 Extract Zip Spec      14 (20) '2.0'\n+199272 Extract OS            00 (0) 'MS-DOS'\n+199273 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199275 Compression Method    0000 (0) 'Stored'\n+199277 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19927B CRC                   65FB8949 (1710983497)\n+19927F Compressed Size       00000C72 (3186)\n+199283 Uncompressed Size     00000C72 (3186)\n+199287 Filename Length       0047 (71)\n+199289 Extra Length          0009 (9)\n+19928B Comment Length        0000 (0)\n+19928D Disk Start            0000 (0)\n+19928F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199291 Ext File Attributes   00000000 (0)\n+199295 Local Header Offset   0006DF2B (450347)\n+199299 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199299: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1992E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1992E2   Length              0005 (5)\n+1992E4   Flags               01 (1) 'Modification'\n+1992E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1992E9 CENTRAL HEADER #133   02014B50 (33639248)\n+1992ED Created Zip Spec      14 (20) '2.0'\n+1992EE Created OS            00 (0) 'MS-DOS'\n+1992EF Extract Zip Spec      14 (20) '2.0'\n+1992F0 Extract OS            00 (0) 'MS-DOS'\n+1992F1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1992F3 Compression Method    0000 (0) 'Stored'\n+1992F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1992F9 CRC                   CC224977 (3424799095)\n+1992FD Compressed Size       000004D9 (1241)\n+199301 Uncompressed Size     000004D9 (1241)\n+199305 Filename Length       0043 (67)\n+199307 Extra Length          0009 (9)\n+199309 Comment Length        0000 (0)\n+19930B Disk Start            0000 (0)\n+19930D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19930F Ext File Attributes   00000000 (0)\n+199313 Local Header Offset   0006EC1B (453659)\n+199317 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199317: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19935A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19935C   Length              0005 (5)\n+19935E   Flags               01 (1) 'Modification'\n+19935F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199363 CENTRAL HEADER #134   02014B50 (33639248)\n+199367 Created Zip Spec      14 (20) '2.0'\n+199368 Created OS            00 (0) 'MS-DOS'\n+199369 Extract Zip Spec      14 (20) '2.0'\n+19936A Extract OS            00 (0) 'MS-DOS'\n+19936B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19936D Compression Method    0000 (0) 'Stored'\n+19936F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199373 CRC                   38CBB90F (952875279)\n+199377 Compressed Size       000008B0 (2224)\n+19937B Uncompressed Size     000008B0 (2224)\n+19937F Filename Length       0049 (73)\n+199381 Extra Length          0009 (9)\n+199383 Comment Length        0000 (0)\n+199385 Disk Start            0000 (0)\n+199387 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199389 Ext File Attributes   00000000 (0)\n+19938D Local Header Offset   0006F16E (455022)\n+199391 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199391: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1993DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1993DC   Length              0005 (5)\n+1993DE   Flags               01 (1) 'Modification'\n+1993DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1993E3 CENTRAL HEADER #135   02014B50 (33639248)\n+1993E7 Created Zip Spec      14 (20) '2.0'\n+1993E8 Created OS            00 (0) 'MS-DOS'\n+1993E9 Extract Zip Spec      14 (20) '2.0'\n+1993EA Extract OS            00 (0) 'MS-DOS'\n+1993EB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1993ED Compression Method    0000 (0) 'Stored'\n+1993EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1993F3 CRC                   F0075F17 (4027014935)\n+1993F7 Compressed Size       00000513 (1299)\n+1993FB Uncompressed Size     00000513 (1299)\n+1993FF Filename Length       004B (75)\n+199401 Extra Length          0009 (9)\n+199403 Comment Length        0000 (0)\n+199405 Disk Start            0000 (0)\n+199407 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199409 Ext File Attributes   00000000 (0)\n+19940D Local Header Offset   0006FA9E (457374)\n+199411 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199411: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19945C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19945E   Length              0005 (5)\n+199460   Flags               01 (1) 'Modification'\n+199461   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199465 CENTRAL HEADER #136   02014B50 (33639248)\n+199469 Created Zip Spec      14 (20) '2.0'\n+19946A Created OS            00 (0) 'MS-DOS'\n+19946B Extract Zip Spec      14 (20) '2.0'\n+19946C Extract OS            00 (0) 'MS-DOS'\n+19946D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19946F Compression Method    0000 (0) 'Stored'\n+199471 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199475 CRC                   42E91C9D (1122573469)\n+199479 Compressed Size       000004F9 (1273)\n+19947D Uncompressed Size     000004F9 (1273)\n+199481 Filename Length       0044 (68)\n+199483 Extra Length          0009 (9)\n+199485 Comment Length        0000 (0)\n+199487 Disk Start            0000 (0)\n+199489 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19948B Ext File Attributes   00000000 (0)\n+19948F Local Header Offset   00070033 (458803)\n+199493 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199493: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1994D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1994D9   Length              0005 (5)\n+1994DB   Flags               01 (1) 'Modification'\n+1994DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1994E0 CENTRAL HEADER #137   02014B50 (33639248)\n+1994E4 Created Zip Spec      14 (20) '2.0'\n+1994E5 Created OS            00 (0) 'MS-DOS'\n+1994E6 Extract Zip Spec      14 (20) '2.0'\n+1994E7 Extract OS            00 (0) 'MS-DOS'\n+1994E8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1994EA Compression Method    0000 (0) 'Stored'\n+1994EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1994F0 CRC                   85A11C0C (2241928204)\n+1994F4 Compressed Size       000004D0 (1232)\n+1994F8 Uncompressed Size     000004D0 (1232)\n+1994FC Filename Length       0042 (66)\n+1994FE Extra Length          0009 (9)\n+199500 Comment Length        0000 (0)\n+199502 Disk Start            0000 (0)\n+199504 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199506 Ext File Attributes   00000000 (0)\n+19950A Local Header Offset   000705A7 (460199)\n+19950E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19950E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199550 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199552   Length              0005 (5)\n+199554   Flags               01 (1) 'Modification'\n+199555   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199559 CENTRAL HEADER #138   02014B50 (33639248)\n+19955D Created Zip Spec      14 (20) '2.0'\n+19955E Created OS            00 (0) 'MS-DOS'\n+19955F Extract Zip Spec      14 (20) '2.0'\n+199560 Extract OS            00 (0) 'MS-DOS'\n+199561 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199563 Compression Method    0000 (0) 'Stored'\n+199565 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199569 CRC                   667CA259 (1719444057)\n+19956D Compressed Size       000004EA (1258)\n+199571 Uncompressed Size     000004EA (1258)\n+199575 Filename Length       0048 (72)\n+199577 Extra Length          0009 (9)\n+199579 Comment Length        0000 (0)\n+19957B Disk Start            0000 (0)\n+19957D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19957F Ext File Attributes   00000000 (0)\n+199583 Local Header Offset   00070AF0 (461552)\n+199587 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199587: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1995CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1995D1   Length              0005 (5)\n+1995D3   Flags               01 (1) 'Modification'\n+1995D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1995D8 CENTRAL HEADER #139   02014B50 (33639248)\n+1995DC Created Zip Spec      14 (20) '2.0'\n+1995DD Created OS            00 (0) 'MS-DOS'\n+1995DE Extract Zip Spec      14 (20) '2.0'\n+1995DF Extract OS            00 (0) 'MS-DOS'\n+1995E0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1995E2 Compression Method    0000 (0) 'Stored'\n+1995E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1995E8 CRC                   4E4FEF3B (1313861435)\n+1995EC Compressed Size       0000052C (1324)\n+1995F0 Uncompressed Size     0000052C (1324)\n+1995F4 Filename Length       004C (76)\n+1995F6 Extra Length          0009 (9)\n+1995F8 Comment Length        0000 (0)\n+1995FA Disk Start            0000 (0)\n+1995FC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1995FE Ext File Attributes   00000000 (0)\n+199602 Local Header Offset   00071059 (462937)\n+199606 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199606: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199652 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199654   Length              0005 (5)\n+199656   Flags               01 (1) 'Modification'\n+199657   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19965B CENTRAL HEADER #140   02014B50 (33639248)\n+19965F Created Zip Spec      14 (20) '2.0'\n+199660 Created OS            00 (0) 'MS-DOS'\n+199661 Extract Zip Spec      14 (20) '2.0'\n+199662 Extract OS            00 (0) 'MS-DOS'\n+199663 General Purpose Flag  0000 (0)\n+199665 Compression Method    0000 (0) 'Stored'\n+199667 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19966B CRC                   00000000 (0)\n+19966F Compressed Size       00000000 (0)\n+199673 Uncompressed Size     00000000 (0)\n+199677 Filename Length       0022 (34)\n+199679 Extra Length          0009 (9)\n+19967B Comment Length        0000 (0)\n+19967D Disk Start            0000 (0)\n+19967F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199681 Ext File Attributes   00000000 (0)\n+199685 Local Header Offset   00071608 (464392)\n+199689 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199689: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1996AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1996AD   Length              0005 (5)\n+1996AF   Flags               01 (1) 'Modification'\n+1996B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1996B4 CENTRAL HEADER #141   02014B50 (33639248)\n+1996B8 Created Zip Spec      14 (20) '2.0'\n+1996B9 Created OS            00 (0) 'MS-DOS'\n+1996BA Extract Zip Spec      14 (20) '2.0'\n+1996BB Extract OS            00 (0) 'MS-DOS'\n+1996BC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1996BE Compression Method    0000 (0) 'Stored'\n+1996C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1996C4 CRC                   9A2D2058 (2586648664)\n+1996C8 Compressed Size       00000D7A (3450)\n+1996CC Uncompressed Size     00000D7A (3450)\n+1996D0 Filename Length       002F (47)\n+1996D2 Extra Length          0009 (9)\n+1996D4 Comment Length        0000 (0)\n+1996D6 Disk Start            0000 (0)\n+1996D8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1996DA Ext File Attributes   00000000 (0)\n+1996DE Local Header Offset   00071651 (464465)\n+1996E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1996E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199711 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199713   Length              0005 (5)\n+199715   Flags               01 (1) 'Modification'\n+199716   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19971A CENTRAL HEADER #142   02014B50 (33639248)\n+19971E Created Zip Spec      14 (20) '2.0'\n+19971F Created OS            00 (0) 'MS-DOS'\n+199720 Extract Zip Spec      14 (20) '2.0'\n+199721 Extract OS            00 (0) 'MS-DOS'\n+199722 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199724 Compression Method    0000 (0) 'Stored'\n+199726 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19972A CRC                   8FD49BC2 (2413075394)\n+19972E Compressed Size       00000A82 (2690)\n+199732 Uncompressed Size     00000A82 (2690)\n+199736 Filename Length       002F (47)\n+199738 Extra Length          0009 (9)\n+19973A Comment Length        0000 (0)\n+19973C Disk Start            0000 (0)\n+19973E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199740 Ext File Attributes   00000000 (0)\n+199744 Local Header Offset   00072431 (468017)\n+199748 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199748: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199777 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199779   Length              0005 (5)\n+19977B   Flags               01 (1) 'Modification'\n+19977C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199780 CENTRAL HEADER #143   02014B50 (33639248)\n+199784 Created Zip Spec      14 (20) '2.0'\n+199785 Created OS            00 (0) 'MS-DOS'\n+199786 Extract Zip Spec      14 (20) '2.0'\n+199787 Extract OS            00 (0) 'MS-DOS'\n+199788 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19978A Compression Method    0000 (0) 'Stored'\n+19978C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199790 CRC                   DFC97490 (3754521744)\n+199794 Compressed Size       00003D93 (15763)\n+199798 Uncompressed Size     00003D93 (15763)\n+19979C Filename Length       0041 (65)\n+19979E Extra Length          0009 (9)\n+1997A0 Comment Length        0000 (0)\n+1997A2 Disk Start            0000 (0)\n+1997A4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1997A6 Ext File Attributes   00000000 (0)\n+1997AA Local Header Offset   00072F19 (470809)\n+1997AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1997AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1997EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1997F1   Length              0005 (5)\n+1997F3   Flags               01 (1) 'Modification'\n+1997F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1997F8 CENTRAL HEADER #144   02014B50 (33639248)\n+1997FC Created Zip Spec      14 (20) '2.0'\n+1997FD Created OS            00 (0) 'MS-DOS'\n+1997FE Extract Zip Spec      14 (20) '2.0'\n+1997FF Extract OS            00 (0) 'MS-DOS'\n+199800 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199802 Compression Method    0000 (0) 'Stored'\n+199804 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199808 CRC                   D1BB774A (3518723914)\n+19980C Compressed Size       000004B9 (1209)\n+199810 Uncompressed Size     000004B9 (1209)\n+199814 Filename Length       0034 (52)\n+199816 Extra Length          0009 (9)\n+199818 Comment Length        0000 (0)\n+19981A Disk Start            0000 (0)\n+19981C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19981E Ext File Attributes   00000000 (0)\n+199822 Local Header Offset   00076D24 (486692)\n+199826 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199826: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19985A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19985C   Length              0005 (5)\n+19985E   Flags               01 (1) 'Modification'\n+19985F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199863 CENTRAL HEADER #145   02014B50 (33639248)\n+199867 Created Zip Spec      14 (20) '2.0'\n+199868 Created OS            00 (0) 'MS-DOS'\n+199869 Extract Zip Spec      14 (20) '2.0'\n+19986A Extract OS            00 (0) 'MS-DOS'\n+19986B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19986D Compression Method    0000 (0) 'Stored'\n+19986F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199873 CRC                   B3A8C3FA (3014181882)\n+199877 Compressed Size       000004B0 (1200)\n+19987B Uncompressed Size     000004B0 (1200)\n+19987F Filename Length       0043 (67)\n+199881 Extra Length          0009 (9)\n+199883 Comment Length        0000 (0)\n+199885 Disk Start            0000 (0)\n+199887 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199889 Ext File Attributes   00000000 (0)\n+19988D Local Header Offset   00077248 (488008)\n+199891 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199891: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1998D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1998D6   Length              0005 (5)\n+1998D8   Flags               01 (1) 'Modification'\n+1998D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1998DD CENTRAL HEADER #146   02014B50 (33639248)\n+1998E1 Created Zip Spec      14 (20) '2.0'\n+1998E2 Created OS            00 (0) 'MS-DOS'\n+1998E3 Extract Zip Spec      14 (20) '2.0'\n+1998E4 Extract OS            00 (0) 'MS-DOS'\n+1998E5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1998E7 Compression Method    0000 (0) 'Stored'\n+1998E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1998ED CRC                   663E77E4 (1715369956)\n+1998F1 Compressed Size       000004EE (1262)\n+1998F5 Uncompressed Size     000004EE (1262)\n+1998F9 Filename Length       003B (59)\n+1998FB Extra Length          0009 (9)\n+1998FD Comment Length        0000 (0)\n+1998FF Disk Start            0000 (0)\n+199901 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199903 Ext File Attributes   00000000 (0)\n+199907 Local Header Offset   00077772 (489330)\n+19990B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19990B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199946 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199948   Length              0005 (5)\n+19994A   Flags               01 (1) 'Modification'\n+19994B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19994F CENTRAL HEADER #147   02014B50 (33639248)\n+199953 Created Zip Spec      14 (20) '2.0'\n+199954 Created OS            00 (0) 'MS-DOS'\n+199955 Extract Zip Spec      14 (20) '2.0'\n+199956 Extract OS            00 (0) 'MS-DOS'\n+199957 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199959 Compression Method    0000 (0) 'Stored'\n+19995B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19995F CRC                   4C849D6C (1283759468)\n+199963 Compressed Size       0000047A (1146)\n+199967 Uncompressed Size     0000047A (1146)\n+19996B Filename Length       0037 (55)\n+19996D Extra Length          0009 (9)\n+19996F Comment Length        0000 (0)\n+199971 Disk Start            0000 (0)\n+199973 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199975 Ext File Attributes   00000000 (0)\n+199979 Local Header Offset   00077CD2 (490706)\n+19997D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19997D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1999B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1999B6   Length              0005 (5)\n+1999B8   Flags               01 (1) 'Modification'\n+1999B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1999BD CENTRAL HEADER #148   02014B50 (33639248)\n+1999C1 Created Zip Spec      14 (20) '2.0'\n+1999C2 Created OS            00 (0) 'MS-DOS'\n+1999C3 Extract Zip Spec      14 (20) '2.0'\n+1999C4 Extract OS            00 (0) 'MS-DOS'\n+1999C5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1999C7 Compression Method    0000 (0) 'Stored'\n+1999C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1999CD CRC                   1F091D5A (520691034)\n+1999D1 Compressed Size       0000A106 (41222)\n+1999D5 Uncompressed Size     0000A106 (41222)\n+1999D9 Filename Length       0036 (54)\n+1999DB Extra Length          0009 (9)\n+1999DD Comment Length        0000 (0)\n+1999DF Disk Start            0000 (0)\n+1999E1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+1999E3 Ext File Attributes   00000000 (0)\n+1999E7 Local Header Offset   000781BA (491962)\n+1999EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1999EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199A21 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199A23   Length              0005 (5)\n+199A25   Flags               01 (1) 'Modification'\n+199A26   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199A2A CENTRAL HEADER #149   02014B50 (33639248)\n+199A2E Created Zip Spec      14 (20) '2.0'\n+199A2F Created OS            00 (0) 'MS-DOS'\n+199A30 Extract Zip Spec      14 (20) '2.0'\n+199A31 Extract OS            00 (0) 'MS-DOS'\n+199A32 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199A34 Compression Method    0000 (0) 'Stored'\n+199A36 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199A3A CRC                   BC70E4F4 (3161515252)\n+199A3E Compressed Size       000005B8 (1464)\n+199A42 Uncompressed Size     000005B8 (1464)\n+199A46 Filename Length       0036 (54)\n+199A48 Extra Length          0009 (9)\n+199A4A Comment Length        0000 (0)\n+199A4C Disk Start            0000 (0)\n+199A4E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199A50 Ext File Attributes   00000000 (0)\n+199A54 Local Header Offset   0008232D (533293)\n+199A58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199A58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199A8E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199A90   Length              0005 (5)\n+199A92   Flags               01 (1) 'Modification'\n+199A93   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199A97 CENTRAL HEADER #150   02014B50 (33639248)\n+199A9B Created Zip Spec      14 (20) '2.0'\n+199A9C Created OS            00 (0) 'MS-DOS'\n+199A9D Extract Zip Spec      14 (20) '2.0'\n+199A9E Extract OS            00 (0) 'MS-DOS'\n+199A9F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199AA1 Compression Method    0000 (0) 'Stored'\n+199AA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199AA7 CRC                   48D76DDD (1222077917)\n+199AAB Compressed Size       00000932 (2354)\n+199AAF Uncompressed Size     00000932 (2354)\n+199AB3 Filename Length       002A (42)\n+199AB5 Extra Length          0009 (9)\n+199AB7 Comment Length        0000 (0)\n+199AB9 Disk Start            0000 (0)\n+199ABB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199ABD Ext File Attributes   00000000 (0)\n+199AC1 Local Header Offset   00082952 (534866)\n+199AC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199AC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199AEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199AF1   Length              0005 (5)\n+199AF3   Flags               01 (1) 'Modification'\n+199AF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199AF8 CENTRAL HEADER #151   02014B50 (33639248)\n+199AFC Created Zip Spec      14 (20) '2.0'\n+199AFD Created OS            00 (0) 'MS-DOS'\n+199AFE Extract Zip Spec      14 (20) '2.0'\n+199AFF Extract OS            00 (0) 'MS-DOS'\n+199B00 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199B02 Compression Method    0000 (0) 'Stored'\n+199B04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199B08 CRC                   8DAF0532 (2377057586)\n+199B0C Compressed Size       000004F2 (1266)\n+199B10 Uncompressed Size     000004F2 (1266)\n+199B14 Filename Length       003E (62)\n+199B16 Extra Length          0009 (9)\n+199B18 Comment Length        0000 (0)\n+199B1A Disk Start            0000 (0)\n+199B1C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199B1E Ext File Attributes   00000000 (0)\n+199B22 Local Header Offset   000832E5 (537317)\n+199B26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199B26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199B64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199B66   Length              0005 (5)\n+199B68   Flags               01 (1) 'Modification'\n+199B69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199B6D CENTRAL HEADER #152   02014B50 (33639248)\n+199B71 Created Zip Spec      14 (20) '2.0'\n+199B72 Created OS            00 (0) 'MS-DOS'\n+199B73 Extract Zip Spec      14 (20) '2.0'\n+199B74 Extract OS            00 (0) 'MS-DOS'\n+199B75 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199B77 Compression Method    0000 (0) 'Stored'\n+199B79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199B7D CRC                   5CF3A6C0 (1559471808)\n+199B81 Compressed Size       00000535 (1333)\n+199B85 Uncompressed Size     00000535 (1333)\n+199B89 Filename Length       002E (46)\n+199B8B Extra Length          0009 (9)\n+199B8D Comment Length        0000 (0)\n+199B8F Disk Start            0000 (0)\n+199B91 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199B93 Ext File Attributes   00000000 (0)\n+199B97 Local Header Offset   0008384C (538700)\n+199B9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199B9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199BC9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199BCB   Length              0005 (5)\n+199BCD   Flags               01 (1) 'Modification'\n+199BCE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199BD2 CENTRAL HEADER #153   02014B50 (33639248)\n+199BD6 Created Zip Spec      14 (20) '2.0'\n+199BD7 Created OS            00 (0) 'MS-DOS'\n+199BD8 Extract Zip Spec      14 (20) '2.0'\n+199BD9 Extract OS            00 (0) 'MS-DOS'\n+199BDA General Purpose Flag  0000 (0)\n+199BDC Compression Method    0000 (0) 'Stored'\n+199BDE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199BE2 CRC                   00000000 (0)\n+199BE6 Compressed Size       00000000 (0)\n+199BEA Uncompressed Size     00000000 (0)\n+199BEE Filename Length       002A (42)\n+199BF0 Extra Length          0009 (9)\n+199BF2 Comment Length        0000 (0)\n+199BF4 Disk Start            0000 (0)\n+199BF6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199BF8 Ext File Attributes   00000000 (0)\n+199BFC Local Header Offset   00083DE6 (540134)\n+199C00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199C00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199C2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199C2C   Length              0005 (5)\n+199C2E   Flags               01 (1) 'Modification'\n+199C2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199C33 CENTRAL HEADER #154   02014B50 (33639248)\n+199C37 Created Zip Spec      14 (20) '2.0'\n+199C38 Created OS            00 (0) 'MS-DOS'\n+199C39 Extract Zip Spec      14 (20) '2.0'\n+199C3A Extract OS            00 (0) 'MS-DOS'\n+199C3B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199C3D Compression Method    0000 (0) 'Stored'\n+199C3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199C43 CRC                   EA8B59C6 (3935001030)\n+199C47 Compressed Size       00000800 (2048)\n+199C4B Uncompressed Size     00000800 (2048)\n+199C4F Filename Length       0047 (71)\n+199C51 Extra Length          0009 (9)\n+199C53 Comment Length        0000 (0)\n+199C55 Disk Start            0000 (0)\n+199C57 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199C59 Ext File Attributes   00000000 (0)\n+199C5D Local Header Offset   00083E37 (540215)\n+199C61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199C61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199CA8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199CAA   Length              0005 (5)\n+199CAC   Flags               01 (1) 'Modification'\n+199CAD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199CB1 CENTRAL HEADER #155   02014B50 (33639248)\n+199CB5 Created Zip Spec      14 (20) '2.0'\n+199CB6 Created OS            00 (0) 'MS-DOS'\n+199CB7 Extract Zip Spec      14 (20) '2.0'\n+199CB8 Extract OS            00 (0) 'MS-DOS'\n+199CB9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199CBB Compression Method    0000 (0) 'Stored'\n+199CBD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199CC1 CRC                   3280412A (847266090)\n+199CC5 Compressed Size       0000060F (1551)\n+199CC9 Uncompressed Size     0000060F (1551)\n+199CCD Filename Length       0042 (66)\n+199CCF Extra Length          0009 (9)\n+199CD1 Comment Length        0000 (0)\n+199CD3 Disk Start            0000 (0)\n+199CD5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199CD7 Ext File Attributes   00000000 (0)\n+199CDB Local Header Offset   000846B5 (542389)\n+199CDF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199CDF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199D21 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199D23   Length              0005 (5)\n+199D25   Flags               01 (1) 'Modification'\n+199D26   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199D2A CENTRAL HEADER #156   02014B50 (33639248)\n+199D2E Created Zip Spec      14 (20) '2.0'\n+199D2F Created OS            00 (0) 'MS-DOS'\n+199D30 Extract Zip Spec      14 (20) '2.0'\n+199D31 Extract OS            00 (0) 'MS-DOS'\n+199D32 General Purpose Flag  0000 (0)\n+199D34 Compression Method    0000 (0) 'Stored'\n+199D36 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199D3A CRC                   00000000 (0)\n+199D3E Compressed Size       00000000 (0)\n+199D42 Uncompressed Size     00000000 (0)\n+199D46 Filename Length       002A (42)\n+199D48 Extra Length          0009 (9)\n+199D4A Comment Length        0000 (0)\n+199D4C Disk Start            0000 (0)\n+199D4E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199D50 Ext File Attributes   00000000 (0)\n+199D54 Local Header Offset   00084D3D (544061)\n+199D58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199D58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199D82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199D84   Length              0005 (5)\n+199D86   Flags               01 (1) 'Modification'\n+199D87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199D8B CENTRAL HEADER #157   02014B50 (33639248)\n+199D8F Created Zip Spec      14 (20) '2.0'\n+199D90 Created OS            00 (0) 'MS-DOS'\n+199D91 Extract Zip Spec      14 (20) '2.0'\n+199D92 Extract OS            00 (0) 'MS-DOS'\n+199D93 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199D95 Compression Method    0000 (0) 'Stored'\n+199D97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199D9B CRC                   B81BB8E1 (3088824545)\n+199D9F Compressed Size       000011D4 (4564)\n+199DA3 Uncompressed Size     000011D4 (4564)\n+199DA7 Filename Length       0041 (65)\n+199DA9 Extra Length          0009 (9)\n+199DAB Comment Length        0000 (0)\n+199DAD Disk Start            0000 (0)\n+199DAF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199DB1 Ext File Attributes   00000000 (0)\n+199DB5 Local Header Offset   00084D8E (544142)\n+199DB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199DB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199DFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199DFC   Length              0005 (5)\n+199DFE   Flags               01 (1) 'Modification'\n+199DFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199E03 CENTRAL HEADER #158   02014B50 (33639248)\n+199E07 Created Zip Spec      14 (20) '2.0'\n+199E08 Created OS            00 (0) 'MS-DOS'\n+199E09 Extract Zip Spec      14 (20) '2.0'\n+199E0A Extract OS            00 (0) 'MS-DOS'\n+199E0B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199E0D Compression Method    0000 (0) 'Stored'\n+199E0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199E13 CRC                   1FF4288F (536094863)\n+199E17 Compressed Size       00000C58 (3160)\n+199E1B Uncompressed Size     00000C58 (3160)\n+199E1F Filename Length       0040 (64)\n+199E21 Extra Length          0009 (9)\n+199E23 Comment Length        0000 (0)\n+199E25 Disk Start            0000 (0)\n+199E27 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199E29 Ext File Attributes   00000000 (0)\n+199E2D Local Header Offset   00085FDA (548826)\n+199E31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199E31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199E71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199E73   Length              0005 (5)\n+199E75   Flags               01 (1) 'Modification'\n+199E76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199E7A CENTRAL HEADER #159   02014B50 (33639248)\n+199E7E Created Zip Spec      14 (20) '2.0'\n+199E7F Created OS            00 (0) 'MS-DOS'\n+199E80 Extract Zip Spec      14 (20) '2.0'\n+199E81 Extract OS            00 (0) 'MS-DOS'\n+199E82 General Purpose Flag  0000 (0)\n+199E84 Compression Method    0000 (0) 'Stored'\n+199E86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199E8A CRC                   00000000 (0)\n+199E8E Compressed Size       00000000 (0)\n+199E92 Uncompressed Size     00000000 (0)\n+199E96 Filename Length       0021 (33)\n+199E98 Extra Length          0009 (9)\n+199E9A Comment Length        0000 (0)\n+199E9C Disk Start            0000 (0)\n+199E9E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199EA0 Ext File Attributes   00000000 (0)\n+199EA4 Local Header Offset   00086CA9 (552105)\n+199EA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199EA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199EC9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199ECB   Length              0005 (5)\n+199ECD   Flags               01 (1) 'Modification'\n+199ECE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199ED2 CENTRAL HEADER #160   02014B50 (33639248)\n+199ED6 Created Zip Spec      14 (20) '2.0'\n+199ED7 Created OS            00 (0) 'MS-DOS'\n+199ED8 Extract Zip Spec      14 (20) '2.0'\n+199ED9 Extract OS            00 (0) 'MS-DOS'\n+199EDA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199EDC Compression Method    0000 (0) 'Stored'\n+199EDE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199EE2 CRC                   C191912C (3247542572)\n+199EE6 Compressed Size       0000096F (2415)\n+199EEA Uncompressed Size     0000096F (2415)\n+199EEE Filename Length       0030 (48)\n+199EF0 Extra Length          0009 (9)\n+199EF2 Comment Length        0000 (0)\n+199EF4 Disk Start            0000 (0)\n+199EF6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199EF8 Ext File Attributes   00000000 (0)\n+199EFC Local Header Offset   00086CF1 (552177)\n+199F00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199F00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199F30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199F32   Length              0005 (5)\n+199F34   Flags               01 (1) 'Modification'\n+199F35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199F39 CENTRAL HEADER #161   02014B50 (33639248)\n+199F3D Created Zip Spec      14 (20) '2.0'\n+199F3E Created OS            00 (0) 'MS-DOS'\n+199F3F Extract Zip Spec      14 (20) '2.0'\n+199F40 Extract OS            00 (0) 'MS-DOS'\n+199F41 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199F43 Compression Method    0000 (0) 'Stored'\n+199F45 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199F49 CRC                   B9F68231 (3119940145)\n+199F4D Compressed Size       00000AC2 (2754)\n+199F51 Uncompressed Size     00000AC2 (2754)\n+199F55 Filename Length       002D (45)\n+199F57 Extra Length          0009 (9)\n+199F59 Comment Length        0000 (0)\n+199F5B Disk Start            0000 (0)\n+199F5D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199F5F Ext File Attributes   00000000 (0)\n+199F63 Local Header Offset   000876C7 (554695)\n+199F67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199F67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+199F94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+199F96   Length              0005 (5)\n+199F98   Flags               01 (1) 'Modification'\n+199F99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+199F9D CENTRAL HEADER #162   02014B50 (33639248)\n+199FA1 Created Zip Spec      14 (20) '2.0'\n+199FA2 Created OS            00 (0) 'MS-DOS'\n+199FA3 Extract Zip Spec      14 (20) '2.0'\n+199FA4 Extract OS            00 (0) 'MS-DOS'\n+199FA5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+199FA7 Compression Method    0000 (0) 'Stored'\n+199FA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+199FAD CRC                   9A0865B9 (2584241593)\n+199FB1 Compressed Size       0000066B (1643)\n+199FB5 Uncompressed Size     0000066B (1643)\n+199FB9 Filename Length       0035 (53)\n+199FBB Extra Length          0009 (9)\n+199FBD Comment Length        0000 (0)\n+199FBF Disk Start            0000 (0)\n+199FC1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+199FC3 Ext File Attributes   00000000 (0)\n+199FC7 Local Header Offset   000881ED (557549)\n+199FCB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x199FCB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A000 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A002   Length              0005 (5)\n+19A004   Flags               01 (1) 'Modification'\n+19A005   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A009 CENTRAL HEADER #163   02014B50 (33639248)\n+19A00D Created Zip Spec      14 (20) '2.0'\n+19A00E Created OS            00 (0) 'MS-DOS'\n+19A00F Extract Zip Spec      14 (20) '2.0'\n+19A010 Extract OS            00 (0) 'MS-DOS'\n+19A011 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A013 Compression Method    0000 (0) 'Stored'\n+19A015 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A019 CRC                   5F2ADB9F (1596644255)\n+19A01D Compressed Size       00000832 (2098)\n+19A021 Uncompressed Size     00000832 (2098)\n+19A025 Filename Length       0037 (55)\n+19A027 Extra Length          0009 (9)\n+19A029 Comment Length        0000 (0)\n+19A02B Disk Start            0000 (0)\n+19A02D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A02F Ext File Attributes   00000000 (0)\n+19A033 Local Header Offset   000888C4 (559300)\n+19A037 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A037: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A06E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A070   Length              0005 (5)\n+19A072   Flags               01 (1) 'Modification'\n+19A073   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A077 CENTRAL HEADER #164   02014B50 (33639248)\n+19A07B Created Zip Spec      14 (20) '2.0'\n+19A07C Created OS            00 (0) 'MS-DOS'\n+19A07D Extract Zip Spec      14 (20) '2.0'\n+19A07E Extract OS            00 (0) 'MS-DOS'\n+19A07F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A081 Compression Method    0000 (0) 'Stored'\n+19A083 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A087 CRC                   4D1AEB96 (1293609878)\n+19A08B Compressed Size       000008CC (2252)\n+19A08F Uncompressed Size     000008CC (2252)\n+19A093 Filename Length       0037 (55)\n+19A095 Extra Length          0009 (9)\n+19A097 Comment Length        0000 (0)\n+19A099 Disk Start            0000 (0)\n+19A09B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A09D Ext File Attributes   00000000 (0)\n+19A0A1 Local Header Offset   00089164 (561508)\n+19A0A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A0A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A0DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A0DE   Length              0005 (5)\n+19A0E0   Flags               01 (1) 'Modification'\n+19A0E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A0E5 CENTRAL HEADER #165   02014B50 (33639248)\n+19A0E9 Created Zip Spec      14 (20) '2.0'\n+19A0EA Created OS            00 (0) 'MS-DOS'\n+19A0EB Extract Zip Spec      14 (20) '2.0'\n+19A0EC Extract OS            00 (0) 'MS-DOS'\n+19A0ED General Purpose Flag  0000 (0)\n+19A0EF Compression Method    0000 (0) 'Stored'\n+19A0F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A0F5 CRC                   00000000 (0)\n+19A0F9 Compressed Size       00000000 (0)\n+19A0FD Uncompressed Size     00000000 (0)\n+19A101 Filename Length       001E (30)\n+19A103 Extra Length          0009 (9)\n+19A105 Comment Length        0000 (0)\n+19A107 Disk Start            0000 (0)\n+19A109 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A10B Ext File Attributes   00000000 (0)\n+19A10F Local Header Offset   00089A9E (563870)\n+19A113 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A113: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A131 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A133   Length              0005 (5)\n+19A135   Flags               01 (1) 'Modification'\n+19A136   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A13A CENTRAL HEADER #166   02014B50 (33639248)\n+19A13E Created Zip Spec      14 (20) '2.0'\n+19A13F Created OS            00 (0) 'MS-DOS'\n+19A140 Extract Zip Spec      14 (20) '2.0'\n+19A141 Extract OS            00 (0) 'MS-DOS'\n+19A142 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A144 Compression Method    0000 (0) 'Stored'\n+19A146 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A14A CRC                   D1400D79 (3510635897)\n+19A14E Compressed Size       00000647 (1607)\n+19A152 Uncompressed Size     00000647 (1607)\n+19A156 Filename Length       002F (47)\n+19A158 Extra Length          0009 (9)\n+19A15A Comment Length        0000 (0)\n+19A15C Disk Start            0000 (0)\n+19A15E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A160 Ext File Attributes   00000000 (0)\n+19A164 Local Header Offset   00089AE3 (563939)\n+19A168 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A168: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A197 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A199   Length              0005 (5)\n+19A19B   Flags               01 (1) 'Modification'\n+19A19C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A1A0 CENTRAL HEADER #167   02014B50 (33639248)\n+19A1A4 Created Zip Spec      14 (20) '2.0'\n+19A1A5 Created OS            00 (0) 'MS-DOS'\n+19A1A6 Extract Zip Spec      14 (20) '2.0'\n+19A1A7 Extract OS            00 (0) 'MS-DOS'\n+19A1A8 General Purpose Flag  0000 (0)\n+19A1AA Compression Method    0000 (0) 'Stored'\n+19A1AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A1B0 CRC                   00000000 (0)\n+19A1B4 Compressed Size       00000000 (0)\n+19A1B8 Uncompressed Size     00000000 (0)\n+19A1BC Filename Length       0026 (38)\n+19A1BE Extra Length          0009 (9)\n+19A1C0 Comment Length        0000 (0)\n+19A1C2 Disk Start            0000 (0)\n+19A1C4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A1C6 Ext File Attributes   00000000 (0)\n+19A1CA Local Header Offset   0008A190 (565648)\n+19A1CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A1CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A1F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A1F6   Length              0005 (5)\n+19A1F8   Flags               01 (1) 'Modification'\n+19A1F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A1FD CENTRAL HEADER #168   02014B50 (33639248)\n+19A201 Created Zip Spec      14 (20) '2.0'\n+19A202 Created OS            00 (0) 'MS-DOS'\n+19A203 Extract Zip Spec      14 (20) '2.0'\n+19A204 Extract OS            00 (0) 'MS-DOS'\n+19A205 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A207 Compression Method    0000 (0) 'Stored'\n+19A209 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A20D CRC                   4A87D325 (1250415397)\n+19A211 Compressed Size       0000052B (1323)\n+19A215 Uncompressed Size     0000052B (1323)\n+19A219 Filename Length       0036 (54)\n+19A21B Extra Length          0009 (9)\n+19A21D Comment Length        0000 (0)\n+19A21F Disk Start            0000 (0)\n+19A221 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A223 Ext File Attributes   00000000 (0)\n+19A227 Local Header Offset   0008A1DD (565725)\n+19A22B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A22B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A261 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A263   Length              0005 (5)\n+19A265   Flags               01 (1) 'Modification'\n+19A266   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A26A CENTRAL HEADER #169   02014B50 (33639248)\n+19A26E Created Zip Spec      14 (20) '2.0'\n+19A26F Created OS            00 (0) 'MS-DOS'\n+19A270 Extract Zip Spec      14 (20) '2.0'\n+19A271 Extract OS            00 (0) 'MS-DOS'\n+19A272 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A274 Compression Method    0000 (0) 'Stored'\n+19A276 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A27A CRC                   382251E3 (941773283)\n+19A27E Compressed Size       00000B9D (2973)\n+19A282 Uncompressed Size     00000B9D (2973)\n+19A286 Filename Length       003D (61)\n+19A288 Extra Length          0009 (9)\n+19A28A Comment Length        0000 (0)\n+19A28C Disk Start            0000 (0)\n+19A28E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A290 Ext File Attributes   00000000 (0)\n+19A294 Local Header Offset   0008A775 (567157)\n+19A298 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A298: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A2D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A2D7   Length              0005 (5)\n+19A2D9   Flags               01 (1) 'Modification'\n+19A2DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A2DE CENTRAL HEADER #170   02014B50 (33639248)\n+19A2E2 Created Zip Spec      14 (20) '2.0'\n+19A2E3 Created OS            00 (0) 'MS-DOS'\n+19A2E4 Extract Zip Spec      14 (20) '2.0'\n+19A2E5 Extract OS            00 (0) 'MS-DOS'\n+19A2E6 General Purpose Flag  0000 (0)\n+19A2E8 Compression Method    0000 (0) 'Stored'\n+19A2EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A2EE CRC                   00000000 (0)\n+19A2F2 Compressed Size       00000000 (0)\n+19A2F6 Uncompressed Size     00000000 (0)\n+19A2FA Filename Length       001B (27)\n+19A2FC Extra Length          0009 (9)\n+19A2FE Comment Length        0000 (0)\n+19A300 Disk Start            0000 (0)\n+19A302 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A304 Ext File Attributes   00000000 (0)\n+19A308 Local Header Offset   0008B386 (570246)\n+19A30C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A30C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A327 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A329   Length              0005 (5)\n+19A32B   Flags               01 (1) 'Modification'\n+19A32C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A330 CENTRAL HEADER #171   02014B50 (33639248)\n+19A334 Created Zip Spec      14 (20) '2.0'\n+19A335 Created OS            00 (0) 'MS-DOS'\n+19A336 Extract Zip Spec      14 (20) '2.0'\n+19A337 Extract OS            00 (0) 'MS-DOS'\n+19A338 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A33A Compression Method    0000 (0) 'Stored'\n+19A33C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A340 CRC                   7D41B4B3 (2101458099)\n+19A344 Compressed Size       000068BF (26815)\n+19A348 Uncompressed Size     000068BF (26815)\n+19A34C Filename Length       0025 (37)\n+19A34E Extra Length          0009 (9)\n+19A350 Comment Length        0000 (0)\n+19A352 Disk Start            0000 (0)\n+19A354 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A356 Ext File Attributes   00000000 (0)\n+19A35A Local Header Offset   0008B3C8 (570312)\n+19A35E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A35E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A383 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A385   Length              0005 (5)\n+19A387   Flags               01 (1) 'Modification'\n+19A388   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A38C CENTRAL HEADER #172   02014B50 (33639248)\n+19A390 Created Zip Spec      14 (20) '2.0'\n+19A391 Created OS            00 (0) 'MS-DOS'\n+19A392 Extract Zip Spec      14 (20) '2.0'\n+19A393 Extract OS            00 (0) 'MS-DOS'\n+19A394 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A396 Compression Method    0000 (0) 'Stored'\n+19A398 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A39C CRC                   D2FF4595 (3539944853)\n+19A3A0 Compressed Size       00001BE9 (7145)\n+19A3A4 Uncompressed Size     00001BE9 (7145)\n+19A3A8 Filename Length       002B (43)\n+19A3AA Extra Length          0009 (9)\n+19A3AC Comment Length        0000 (0)\n+19A3AE Disk Start            0000 (0)\n+19A3B0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A3B2 Ext File Attributes   00000000 (0)\n+19A3B6 Local Header Offset   00091CE3 (597219)\n+19A3BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A3BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A3E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A3E7   Length              0005 (5)\n+19A3E9   Flags               01 (1) 'Modification'\n+19A3EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A3EE CENTRAL HEADER #173   02014B50 (33639248)\n+19A3F2 Created Zip Spec      14 (20) '2.0'\n+19A3F3 Created OS            00 (0) 'MS-DOS'\n+19A3F4 Extract Zip Spec      14 (20) '2.0'\n+19A3F5 Extract OS            00 (0) 'MS-DOS'\n+19A3F6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A3F8 Compression Method    0000 (0) 'Stored'\n+19A3FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A3FE CRC                   D8BBACF0 (3636178160)\n+19A402 Compressed Size       00000C61 (3169)\n+19A406 Uncompressed Size     00000C61 (3169)\n+19A40A Filename Length       003A (58)\n+19A40C Extra Length          0009 (9)\n+19A40E Comment Length        0000 (0)\n+19A410 Disk Start            0000 (0)\n+19A412 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A414 Ext File Attributes   00000000 (0)\n+19A418 Local Header Offset   0009392E (604462)\n+19A41C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A41C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A456 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A458   Length              0005 (5)\n+19A45A   Flags               01 (1) 'Modification'\n+19A45B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A45F CENTRAL HEADER #174   02014B50 (33639248)\n+19A463 Created Zip Spec      14 (20) '2.0'\n+19A464 Created OS            00 (0) 'MS-DOS'\n+19A465 Extract Zip Spec      14 (20) '2.0'\n+19A466 Extract OS            00 (0) 'MS-DOS'\n+19A467 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A469 Compression Method    0000 (0) 'Stored'\n+19A46B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A46F CRC                   DCFCECF5 (3707563253)\n+19A473 Compressed Size       00000BF3 (3059)\n+19A477 Uncompressed Size     00000BF3 (3059)\n+19A47B Filename Length       003B (59)\n+19A47D Extra Length          0009 (9)\n+19A47F Comment Length        0000 (0)\n+19A481 Disk Start            0000 (0)\n+19A483 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A485 Ext File Attributes   00000000 (0)\n+19A489 Local Header Offset   00094600 (607744)\n+19A48D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A48D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A4C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A4CA   Length              0005 (5)\n+19A4CC   Flags               01 (1) 'Modification'\n+19A4CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A4D1 CENTRAL HEADER #175   02014B50 (33639248)\n+19A4D5 Created Zip Spec      14 (20) '2.0'\n+19A4D6 Created OS            00 (0) 'MS-DOS'\n+19A4D7 Extract Zip Spec      14 (20) '2.0'\n+19A4D8 Extract OS            00 (0) 'MS-DOS'\n+19A4D9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A4DB Compression Method    0000 (0) 'Stored'\n+19A4DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A4E1 CRC                   490F11E6 (1225724390)\n+19A4E5 Compressed Size       00000C65 (3173)\n+19A4E9 Uncompressed Size     00000C65 (3173)\n+19A4ED Filename Length       0032 (50)\n+19A4EF Extra Length          0009 (9)\n+19A4F1 Comment Length        0000 (0)\n+19A4F3 Disk Start            0000 (0)\n+19A4F5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A4F7 Ext File Attributes   00000000 (0)\n+19A4FB Local Header Offset   00095265 (610917)\n+19A4FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A4FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A531 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A533   Length              0005 (5)\n+19A535   Flags               01 (1) 'Modification'\n+19A536   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A53A CENTRAL HEADER #176   02014B50 (33639248)\n+19A53E Created Zip Spec      14 (20) '2.0'\n+19A53F Created OS            00 (0) 'MS-DOS'\n+19A540 Extract Zip Spec      14 (20) '2.0'\n+19A541 Extract OS            00 (0) 'MS-DOS'\n+19A542 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A544 Compression Method    0000 (0) 'Stored'\n+19A546 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A54A CRC                   3A9B5BED (983260141)\n+19A54E Compressed Size       00000B3F (2879)\n+19A552 Uncompressed Size     00000B3F (2879)\n+19A556 Filename Length       0032 (50)\n+19A558 Extra Length          0009 (9)\n+19A55A Comment Length        0000 (0)\n+19A55C Disk Start            0000 (0)\n+19A55E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A560 Ext File Attributes   00000000 (0)\n+19A564 Local Header Offset   00095F33 (614195)\n+19A568 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A568: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A59A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A59C   Length              0005 (5)\n+19A59E   Flags               01 (1) 'Modification'\n+19A59F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A5A3 CENTRAL HEADER #177   02014B50 (33639248)\n+19A5A7 Created Zip Spec      14 (20) '2.0'\n+19A5A8 Created OS            00 (0) 'MS-DOS'\n+19A5A9 Extract Zip Spec      14 (20) '2.0'\n+19A5AA Extract OS            00 (0) 'MS-DOS'\n+19A5AB General Purpose Flag  0000 (0)\n+19A5AD Compression Method    0000 (0) 'Stored'\n+19A5AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A5B3 CRC                   00000000 (0)\n+19A5B7 Compressed Size       00000000 (0)\n+19A5BB Uncompressed Size     00000000 (0)\n+19A5BF Filename Length       001D (29)\n+19A5C1 Extra Length          0009 (9)\n+19A5C3 Comment Length        0000 (0)\n+19A5C5 Disk Start            0000 (0)\n+19A5C7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A5C9 Ext File Attributes   00000000 (0)\n+19A5CD Local Header Offset   00096ADB (617179)\n+19A5D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A5D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A5EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A5F0   Length              0005 (5)\n+19A5F2   Flags               01 (1) 'Modification'\n+19A5F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A5F7 CENTRAL HEADER #178   02014B50 (33639248)\n+19A5FB Created Zip Spec      14 (20) '2.0'\n+19A5FC Created OS            00 (0) 'MS-DOS'\n+19A5FD Extract Zip Spec      14 (20) '2.0'\n+19A5FE Extract OS            00 (0) 'MS-DOS'\n+19A5FF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A601 Compression Method    0000 (0) 'Stored'\n+19A603 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A607 CRC                   30256F45 (807759685)\n+19A60B Compressed Size       000046E5 (18149)\n+19A60F Uncompressed Size     000046E5 (18149)\n+19A613 Filename Length       0036 (54)\n+19A615 Extra Length          0009 (9)\n+19A617 Comment Length        0000 (0)\n+19A619 Disk Start            0000 (0)\n+19A61B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A61D Ext File Attributes   00000000 (0)\n+19A621 Local Header Offset   00096B1F (617247)\n+19A625 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A625: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A65B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A65D   Length              0005 (5)\n+19A65F   Flags               01 (1) 'Modification'\n+19A660   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A664 CENTRAL HEADER #179   02014B50 (33639248)\n+19A668 Created Zip Spec      14 (20) '2.0'\n+19A669 Created OS            00 (0) 'MS-DOS'\n+19A66A Extract Zip Spec      14 (20) '2.0'\n+19A66B Extract OS            00 (0) 'MS-DOS'\n+19A66C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A66E Compression Method    0000 (0) 'Stored'\n+19A670 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A674 CRC                   FA032BB6 (4194511798)\n+19A678 Compressed Size       00003385 (13189)\n+19A67C Uncompressed Size     00003385 (13189)\n+19A680 Filename Length       002C (44)\n+19A682 Extra Length          0009 (9)\n+19A684 Comment Length        0000 (0)\n+19A686 Disk Start            0000 (0)\n+19A688 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A68A Ext File Attributes   00000000 (0)\n+19A68E Local Header Offset   0009B271 (635505)\n+19A692 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A692: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A6BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A6C0   Length              0005 (5)\n+19A6C2   Flags               01 (1) 'Modification'\n+19A6C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A6C7 CENTRAL HEADER #180   02014B50 (33639248)\n+19A6CB Created Zip Spec      14 (20) '2.0'\n+19A6CC Created OS            00 (0) 'MS-DOS'\n+19A6CD Extract Zip Spec      14 (20) '2.0'\n+19A6CE Extract OS            00 (0) 'MS-DOS'\n+19A6CF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A6D1 Compression Method    0000 (0) 'Stored'\n+19A6D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A6D7 CRC                   39C07894 (968915092)\n+19A6DB Compressed Size       00006AA4 (27300)\n+19A6DF Uncompressed Size     00006AA4 (27300)\n+19A6E3 Filename Length       0026 (38)\n+19A6E5 Extra Length          0009 (9)\n+19A6E7 Comment Length        0000 (0)\n+19A6E9 Disk Start            0000 (0)\n+19A6EB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A6ED Ext File Attributes   00000000 (0)\n+19A6F1 Local Header Offset   0009E659 (648793)\n+19A6F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A6F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A71B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A71D   Length              0005 (5)\n+19A71F   Flags               01 (1) 'Modification'\n+19A720   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A724 CENTRAL HEADER #181   02014B50 (33639248)\n+19A728 Created Zip Spec      14 (20) '2.0'\n+19A729 Created OS            00 (0) 'MS-DOS'\n+19A72A Extract Zip Spec      14 (20) '2.0'\n+19A72B Extract OS            00 (0) 'MS-DOS'\n+19A72C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A72E Compression Method    0000 (0) 'Stored'\n+19A730 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A734 CRC                   2313A478 (588489848)\n+19A738 Compressed Size       00001330 (4912)\n+19A73C Uncompressed Size     00001330 (4912)\n+19A740 Filename Length       002B (43)\n+19A742 Extra Length          0009 (9)\n+19A744 Comment Length        0000 (0)\n+19A746 Disk Start            0000 (0)\n+19A748 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A74A Ext File Attributes   00000000 (0)\n+19A74E Local Header Offset   000A515A (676186)\n+19A752 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A752: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A77D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A77F   Length              0005 (5)\n+19A781   Flags               01 (1) 'Modification'\n+19A782   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A786 CENTRAL HEADER #182   02014B50 (33639248)\n+19A78A Created Zip Spec      14 (20) '2.0'\n+19A78B Created OS            00 (0) 'MS-DOS'\n+19A78C Extract Zip Spec      14 (20) '2.0'\n+19A78D Extract OS            00 (0) 'MS-DOS'\n+19A78E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A790 Compression Method    0000 (0) 'Stored'\n+19A792 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A796 CRC                   10BC97FD (280795133)\n+19A79A Compressed Size       000005B5 (1461)\n+19A79E Uncompressed Size     000005B5 (1461)\n+19A7A2 Filename Length       002F (47)\n+19A7A4 Extra Length          0009 (9)\n+19A7A6 Comment Length        0000 (0)\n+19A7A8 Disk Start            0000 (0)\n+19A7AA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A7AC Ext File Attributes   00000000 (0)\n+19A7B0 Local Header Offset   000A64EC (681196)\n+19A7B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A7B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A7E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A7E5   Length              0005 (5)\n+19A7E7   Flags               01 (1) 'Modification'\n+19A7E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A7EC CENTRAL HEADER #183   02014B50 (33639248)\n+19A7F0 Created Zip Spec      14 (20) '2.0'\n+19A7F1 Created OS            00 (0) 'MS-DOS'\n+19A7F2 Extract Zip Spec      14 (20) '2.0'\n+19A7F3 Extract OS            00 (0) 'MS-DOS'\n+19A7F4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A7F6 Compression Method    0000 (0) 'Stored'\n+19A7F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A7FC CRC                   982A34CC (2552902860)\n+19A800 Compressed Size       000004AE (1198)\n+19A804 Uncompressed Size     000004AE (1198)\n+19A808 Filename Length       002A (42)\n+19A80A Extra Length          0009 (9)\n+19A80C Comment Length        0000 (0)\n+19A80E Disk Start            0000 (0)\n+19A810 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A812 Ext File Attributes   00000000 (0)\n+19A816 Local Header Offset   000A6B07 (682759)\n+19A81A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A81A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A844 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A846   Length              0005 (5)\n+19A848   Flags               01 (1) 'Modification'\n+19A849   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A84D CENTRAL HEADER #184   02014B50 (33639248)\n+19A851 Created Zip Spec      14 (20) '2.0'\n+19A852 Created OS            00 (0) 'MS-DOS'\n+19A853 Extract Zip Spec      14 (20) '2.0'\n+19A854 Extract OS            00 (0) 'MS-DOS'\n+19A855 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A857 Compression Method    0000 (0) 'Stored'\n+19A859 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A85D CRC                   7653CF57 (1985204055)\n+19A861 Compressed Size       000015FB (5627)\n+19A865 Uncompressed Size     000015FB (5627)\n+19A869 Filename Length       002C (44)\n+19A86B Extra Length          0009 (9)\n+19A86D Comment Length        0000 (0)\n+19A86F Disk Start            0000 (0)\n+19A871 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A873 Ext File Attributes   00000000 (0)\n+19A877 Local Header Offset   000A7016 (684054)\n+19A87B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A87B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A8A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A8A9   Length              0005 (5)\n+19A8AB   Flags               01 (1) 'Modification'\n+19A8AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A8B0 CENTRAL HEADER #185   02014B50 (33639248)\n+19A8B4 Created Zip Spec      14 (20) '2.0'\n+19A8B5 Created OS            00 (0) 'MS-DOS'\n+19A8B6 Extract Zip Spec      14 (20) '2.0'\n+19A8B7 Extract OS            00 (0) 'MS-DOS'\n+19A8B8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A8BA Compression Method    0000 (0) 'Stored'\n+19A8BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A8C0 CRC                   4D87180A (1300699146)\n+19A8C4 Compressed Size       000008A6 (2214)\n+19A8C8 Uncompressed Size     000008A6 (2214)\n+19A8CC Filename Length       002C (44)\n+19A8CE Extra Length          0009 (9)\n+19A8D0 Comment Length        0000 (0)\n+19A8D2 Disk Start            0000 (0)\n+19A8D4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A8D6 Ext File Attributes   00000000 (0)\n+19A8DA Local Header Offset   000A8674 (689780)\n+19A8DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A8DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A90A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A90C   Length              0005 (5)\n+19A90E   Flags               01 (1) 'Modification'\n+19A90F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A913 CENTRAL HEADER #186   02014B50 (33639248)\n+19A917 Created Zip Spec      14 (20) '2.0'\n+19A918 Created OS            00 (0) 'MS-DOS'\n+19A919 Extract Zip Spec      14 (20) '2.0'\n+19A91A Extract OS            00 (0) 'MS-DOS'\n+19A91B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A91D Compression Method    0000 (0) 'Stored'\n+19A91F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A923 CRC                   8F2D4992 (2402109842)\n+19A927 Compressed Size       000008C7 (2247)\n+19A92B Uncompressed Size     000008C7 (2247)\n+19A92F Filename Length       002B (43)\n+19A931 Extra Length          0009 (9)\n+19A933 Comment Length        0000 (0)\n+19A935 Disk Start            0000 (0)\n+19A937 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A939 Ext File Attributes   00000000 (0)\n+19A93D Local Header Offset   000A8F7D (692093)\n+19A941 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A941: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A96C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A96E   Length              0005 (5)\n+19A970   Flags               01 (1) 'Modification'\n+19A971   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A975 CENTRAL HEADER #187   02014B50 (33639248)\n+19A979 Created Zip Spec      14 (20) '2.0'\n+19A97A Created OS            00 (0) 'MS-DOS'\n+19A97B Extract Zip Spec      14 (20) '2.0'\n+19A97C Extract OS            00 (0) 'MS-DOS'\n+19A97D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A97F Compression Method    0000 (0) 'Stored'\n+19A981 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A985 CRC                   33828390 (864191376)\n+19A989 Compressed Size       00000AEC (2796)\n+19A98D Uncompressed Size     00000AEC (2796)\n+19A991 Filename Length       002D (45)\n+19A993 Extra Length          0009 (9)\n+19A995 Comment Length        0000 (0)\n+19A997 Disk Start            0000 (0)\n+19A999 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A99B Ext File Attributes   00000000 (0)\n+19A99F Local Header Offset   000A98A6 (694438)\n+19A9A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19A9A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19A9D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19A9D2   Length              0005 (5)\n+19A9D4   Flags               01 (1) 'Modification'\n+19A9D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19A9D9 CENTRAL HEADER #188   02014B50 (33639248)\n+19A9DD Created Zip Spec      14 (20) '2.0'\n+19A9DE Created OS            00 (0) 'MS-DOS'\n+19A9DF Extract Zip Spec      14 (20) '2.0'\n+19A9E0 Extract OS            00 (0) 'MS-DOS'\n+19A9E1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19A9E3 Compression Method    0000 (0) 'Stored'\n+19A9E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19A9E9 CRC                   ECCF2EAF (3973000879)\n+19A9ED Compressed Size       00001FDF (8159)\n+19A9F1 Uncompressed Size     00001FDF (8159)\n+19A9F5 Filename Length       002C (44)\n+19A9F7 Extra Length          0009 (9)\n+19A9F9 Comment Length        0000 (0)\n+19A9FB Disk Start            0000 (0)\n+19A9FD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19A9FF Ext File Attributes   00000000 (0)\n+19AA03 Local Header Offset   000AA3F6 (697334)\n+19AA07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AA07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AA33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AA35   Length              0005 (5)\n+19AA37   Flags               01 (1) 'Modification'\n+19AA38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19AA3C CENTRAL HEADER #189   02014B50 (33639248)\n+19AA40 Created Zip Spec      14 (20) '2.0'\n+19AA41 Created OS            00 (0) 'MS-DOS'\n+19AA42 Extract Zip Spec      14 (20) '2.0'\n+19AA43 Extract OS            00 (0) 'MS-DOS'\n+19AA44 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19AA46 Compression Method    0000 (0) 'Stored'\n+19AA48 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19AA4C CRC                   4EF6CDD0 (1324797392)\n+19AA50 Compressed Size       00000489 (1161)\n+19AA54 Uncompressed Size     00000489 (1161)\n+19AA58 Filename Length       0030 (48)\n+19AA5A Extra Length          0009 (9)\n+19AA5C Comment Length        0000 (0)\n+19AA5E Disk Start            0000 (0)\n+19AA60 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19AA62 Ext File Attributes   00000000 (0)\n+19AA66 Local Header Offset   000AC438 (705592)\n+19AA6A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AA6A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AA9A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AA9C   Length              0005 (5)\n+19AA9E   Flags               01 (1) 'Modification'\n+19AA9F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19AAA3 CENTRAL HEADER #190   02014B50 (33639248)\n+19AAA7 Created Zip Spec      14 (20) '2.0'\n+19AAA8 Created OS            00 (0) 'MS-DOS'\n+19AAA9 Extract Zip Spec      14 (20) '2.0'\n+19AAAA Extract OS            00 (0) 'MS-DOS'\n+19AAAB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19AAAD Compression Method    0000 (0) 'Stored'\n+19AAAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19AAB3 CRC                   8192FABF (2173893311)\n+19AAB7 Compressed Size       00007607 (30215)\n+19AABB Uncompressed Size     00007607 (30215)\n+19AABF Filename Length       0027 (39)\n+19AAC1 Extra Length          0009 (9)\n+19AAC3 Comment Length        0000 (0)\n+19AAC5 Disk Start            0000 (0)\n+19AAC7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19AAC9 Ext File Attributes   00000000 (0)\n+19AACD Local Header Offset   000AC928 (706856)\n+19AAD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AAD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AAF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AAFA   Length              0005 (5)\n+19AAFC   Flags               01 (1) 'Modification'\n+19AAFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19AB01 CENTRAL HEADER #191   02014B50 (33639248)\n+19AB05 Created Zip Spec      14 (20) '2.0'\n+19AB06 Created OS            00 (0) 'MS-DOS'\n+19AB07 Extract Zip Spec      14 (20) '2.0'\n+19AB08 Extract OS            00 (0) 'MS-DOS'\n+19AB09 General Purpose Flag  0000 (0)\n+19AB0B Compression Method    0000 (0) 'Stored'\n+19AB0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19AB11 CRC                   00000000 (0)\n+19AB15 Compressed Size       00000000 (0)\n+19AB19 Uncompressed Size     00000000 (0)\n+19AB1D Filename Length       001D (29)\n+19AB1F Extra Length          0009 (9)\n+19AB21 Comment Length        0000 (0)\n+19AB23 Disk Start            0000 (0)\n+19AB25 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19AB27 Ext File Attributes   00000000 (0)\n+19AB2B Local Header Offset   000B3F8D (737165)\n+19AB2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AB2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AB4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AB4E   Length              0005 (5)\n+19AB50   Flags               01 (1) 'Modification'\n+19AB51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19AB55 CENTRAL HEADER #192   02014B50 (33639248)\n+19AB59 Created Zip Spec      14 (20) '2.0'\n+19AB5A Created OS            00 (0) 'MS-DOS'\n+19AB5B Extract Zip Spec      14 (20) '2.0'\n+19AB5C Extract OS            00 (0) 'MS-DOS'\n+19AB5D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19AB5F Compression Method    0000 (0) 'Stored'\n+19AB61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19AB65 CRC                   36088937 (906529079)\n+19AB69 Compressed Size       0000094E (2382)\n+19AB6D Uncompressed Size     0000094E (2382)\n+19AB71 Filename Length       002D (45)\n+19AB73 Extra Length          0009 (9)\n+19AB75 Comment Length        0000 (0)\n+19AB77 Disk Start            0000 (0)\n+19AB79 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19AB7B Ext File Attributes   00000000 (0)\n+19AB7F Local Header Offset   000B3FD1 (737233)\n+19AB83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AB83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19ABB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19ABB2   Length              0005 (5)\n+19ABB4   Flags               01 (1) 'Modification'\n+19ABB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19ABB9 CENTRAL HEADER #193   02014B50 (33639248)\n+19ABBD Created Zip Spec      14 (20) '2.0'\n+19ABBE Created OS            00 (0) 'MS-DOS'\n+19ABBF Extract Zip Spec      14 (20) '2.0'\n+19ABC0 Extract OS            00 (0) 'MS-DOS'\n+19ABC1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19ABC3 Compression Method    0000 (0) 'Stored'\n+19ABC5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19ABC9 CRC                   C67E8FBE (3330183102)\n+19ABCD Compressed Size       000004AB (1195)\n+19ABD1 Uncompressed Size     000004AB (1195)\n+19ABD5 Filename Length       0036 (54)\n+19ABD7 Extra Length          0009 (9)\n+19ABD9 Comment Length        0000 (0)\n+19ABDB Disk Start            0000 (0)\n+19ABDD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19ABDF Ext File Attributes   00000000 (0)\n+19ABE3 Local Header Offset   000B4983 (739715)\n+19ABE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19ABE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AC1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AC1F   Length              0005 (5)\n+19AC21   Flags               01 (1) 'Modification'\n+19AC22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19AC26 CENTRAL HEADER #194   02014B50 (33639248)\n+19AC2A Created Zip Spec      14 (20) '2.0'\n+19AC2B Created OS            00 (0) 'MS-DOS'\n+19AC2C Extract Zip Spec      14 (20) '2.0'\n+19AC2D Extract OS            00 (0) 'MS-DOS'\n+19AC2E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19AC30 Compression Method    0000 (0) 'Stored'\n+19AC32 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19AC36 CRC                   8F418EA5 (2403438245)\n+19AC3A Compressed Size       00000967 (2407)\n+19AC3E Uncompressed Size     00000967 (2407)\n+19AC42 Filename Length       0037 (55)\n+19AC44 Extra Length          0009 (9)\n+19AC46 Comment Length        0000 (0)\n+19AC48 Disk Start            0000 (0)\n+19AC4A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19AC4C Ext File Attributes   00000000 (0)\n+19AC50 Local Header Offset   000B4E9B (741019)\n+19AC54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AC54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AC8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AC8D   Length              0005 (5)\n+19AC8F   Flags               01 (1) 'Modification'\n+19AC90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19AC94 CENTRAL HEADER #195   02014B50 (33639248)\n+19AC98 Created Zip Spec      14 (20) '2.0'\n+19AC99 Created OS            00 (0) 'MS-DOS'\n+19AC9A Extract Zip Spec      14 (20) '2.0'\n+19AC9B Extract OS            00 (0) 'MS-DOS'\n+19AC9C General Purpose Flag  0000 (0)\n+19AC9E Compression Method    0000 (0) 'Stored'\n+19ACA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19ACA4 CRC                   00000000 (0)\n+19ACA8 Compressed Size       00000000 (0)\n+19ACAC Uncompressed Size     00000000 (0)\n+19ACB0 Filename Length       001F (31)\n+19ACB2 Extra Length          0009 (9)\n+19ACB4 Comment Length        0000 (0)\n+19ACB6 Disk Start            0000 (0)\n+19ACB8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19ACBA Ext File Attributes   00000000 (0)\n+19ACBE Local Header Offset   000B5870 (743536)\n+19ACC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19ACC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19ACE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19ACE3   Length              0005 (5)\n+19ACE5   Flags               01 (1) 'Modification'\n+19ACE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19ACEA CENTRAL HEADER #196   02014B50 (33639248)\n+19ACEE Created Zip Spec      14 (20) '2.0'\n+19ACEF Created OS            00 (0) 'MS-DOS'\n+19ACF0 Extract Zip Spec      14 (20) '2.0'\n+19ACF1 Extract OS            00 (0) 'MS-DOS'\n+19ACF2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19ACF4 Compression Method    0000 (0) 'Stored'\n+19ACF6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19ACFA CRC                   9D821087 (2642546823)\n+19ACFE Compressed Size       000004BE (1214)\n+19AD02 Uncompressed Size     000004BE (1214)\n+19AD06 Filename Length       0029 (41)\n+19AD08 Extra Length          0009 (9)\n+19AD0A Comment Length        0000 (0)\n+19AD0C Disk Start            0000 (0)\n+19AD0E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19AD10 Ext File Attributes   00000000 (0)\n+19AD14 Local Header Offset   000B58B6 (743606)\n+19AD18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AD18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AD41 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AD43   Length              0005 (5)\n+19AD45   Flags               01 (1) 'Modification'\n+19AD46   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19AD4A CENTRAL HEADER #197   02014B50 (33639248)\n+19AD4E Created Zip Spec      14 (20) '2.0'\n+19AD4F Created OS            00 (0) 'MS-DOS'\n+19AD50 Extract Zip Spec      14 (20) '2.0'\n+19AD51 Extract OS            00 (0) 'MS-DOS'\n+19AD52 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19AD54 Compression Method    0000 (0) 'Stored'\n+19AD56 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19AD5A CRC                   0D8DFECE (227409614)\n+19AD5E Compressed Size       00000F82 (3970)\n+19AD62 Uncompressed Size     00000F82 (3970)\n+19AD66 Filename Length       002A (42)\n+19AD68 Extra Length          0009 (9)\n+19AD6A Comment Length        0000 (0)\n+19AD6C Disk Start            0000 (0)\n+19AD6E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19AD70 Ext File Attributes   00000000 (0)\n+19AD74 Local Header Offset   000B5DD4 (744916)\n+19AD78 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AD78: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19ADA2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19ADA4   Length              0005 (5)\n+19ADA6   Flags               01 (1) 'Modification'\n+19ADA7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19ADAB CENTRAL HEADER #198   02014B50 (33639248)\n+19ADAF Created Zip Spec      14 (20) '2.0'\n+19ADB0 Created OS            00 (0) 'MS-DOS'\n+19ADB1 Extract Zip Spec      14 (20) '2.0'\n+19ADB2 Extract OS            00 (0) 'MS-DOS'\n+19ADB3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19ADB5 Compression Method    0000 (0) 'Stored'\n+19ADB7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19ADBB CRC                   A6EF1A57 (2800687703)\n+19ADBF Compressed Size       00000745 (1861)\n+19ADC3 Uncompressed Size     00000745 (1861)\n+19ADC7 Filename Length       0031 (49)\n+19ADC9 Extra Length          0009 (9)\n+19ADCB Comment Length        0000 (0)\n+19ADCD Disk Start            0000 (0)\n+19ADCF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19ADD1 Ext File Attributes   00000000 (0)\n+19ADD5 Local Header Offset   000B6DB7 (748983)\n+19ADD9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19ADD9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AE0A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AE0C   Length              0005 (5)\n+19AE0E   Flags               01 (1) 'Modification'\n+19AE0F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19AE13 CENTRAL HEADER #199   02014B50 (33639248)\n+19AE17 Created Zip Spec      14 (20) '2.0'\n+19AE18 Created OS            00 (0) 'MS-DOS'\n+19AE19 Extract Zip Spec      14 (20) '2.0'\n+19AE1A Extract OS            00 (0) 'MS-DOS'\n+19AE1B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19AE1D Compression Method    0000 (0) 'Stored'\n+19AE1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19AE23 CRC                   626EDC3E (1651432510)\n+19AE27 Compressed Size       00001485 (5253)\n+19AE2B Uncompressed Size     00001485 (5253)\n+19AE2F Filename Length       0031 (49)\n+19AE31 Extra Length          0009 (9)\n+19AE33 Comment Length        0000 (0)\n+19AE35 Disk Start            0000 (0)\n+19AE37 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19AE39 Ext File Attributes   00000000 (0)\n+19AE3D Local Header Offset   000B7564 (750948)\n+19AE41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AE41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AE72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AE74   Length              0005 (5)\n+19AE76   Flags               01 (1) 'Modification'\n+19AE77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19AE7B CENTRAL HEADER #200   02014B50 (33639248)\n+19AE7F Created Zip Spec      14 (20) '2.0'\n+19AE80 Created OS            00 (0) 'MS-DOS'\n+19AE81 Extract Zip Spec      14 (20) '2.0'\n+19AE82 Extract OS            00 (0) 'MS-DOS'\n+19AE83 General Purpose Flag  0000 (0)\n+19AE85 Compression Method    0000 (0) 'Stored'\n+19AE87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19AE8B CRC                   00000000 (0)\n+19AE8F Compressed Size       00000000 (0)\n+19AE93 Uncompressed Size     00000000 (0)\n+19AE97 Filename Length       0023 (35)\n+19AE99 Extra Length          0009 (9)\n+19AE9B Comment Length        0000 (0)\n+19AE9D Disk Start            0000 (0)\n+19AE9F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19AEA1 Ext File Attributes   00000000 (0)\n+19AEA5 Local Header Offset   000B8A51 (756305)\n+19AEA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AEA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AECC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AECE   Length              0005 (5)\n+19AED0   Flags               01 (1) 'Modification'\n+19AED1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19AED5 CENTRAL HEADER #201   02014B50 (33639248)\n+19AED9 Created Zip Spec      14 (20) '2.0'\n+19AEDA Created OS            00 (0) 'MS-DOS'\n+19AEDB Extract Zip Spec      14 (20) '2.0'\n+19AEDC Extract OS            00 (0) 'MS-DOS'\n+19AEDD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19AEDF Compression Method    0000 (0) 'Stored'\n+19AEE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19AEE5 CRC                   65EBC1EB (1709949419)\n+19AEE9 Compressed Size       00000D0E (3342)\n+19AEED Uncompressed Size     00000D0E (3342)\n+19AEF1 Filename Length       0031 (49)\n+19AEF3 Extra Length          0009 (9)\n+19AEF5 Comment Length        0000 (0)\n+19AEF7 Disk Start            0000 (0)\n+19AEF9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19AEFB Ext File Attributes   00000000 (0)\n+19AEFF Local Header Offset   000B8A9B (756379)\n+19AF03 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AF03: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AF34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AF36   Length              0005 (5)\n+19AF38   Flags               01 (1) 'Modification'\n+19AF39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19AF3D CENTRAL HEADER #202   02014B50 (33639248)\n+19AF41 Created Zip Spec      14 (20) '2.0'\n+19AF42 Created OS            00 (0) 'MS-DOS'\n+19AF43 Extract Zip Spec      14 (20) '2.0'\n+19AF44 Extract OS            00 (0) 'MS-DOS'\n+19AF45 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19AF47 Compression Method    0000 (0) 'Stored'\n+19AF49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19AF4D CRC                   006A5B46 (6970182)\n+19AF51 Compressed Size       000006F8 (1784)\n+19AF55 Uncompressed Size     000006F8 (1784)\n+19AF59 Filename Length       0038 (56)\n+19AF5B Extra Length          0009 (9)\n+19AF5D Comment Length        0000 (0)\n+19AF5F Disk Start            0000 (0)\n+19AF61 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19AF63 Ext File Attributes   00000000 (0)\n+19AF67 Local Header Offset   000B9811 (759825)\n+19AF6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AF6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AFA3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AFA5   Length              0005 (5)\n+19AFA7   Flags               01 (1) 'Modification'\n+19AFA8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19AFAC CENTRAL HEADER #203   02014B50 (33639248)\n+19AFB0 Created Zip Spec      14 (20) '2.0'\n+19AFB1 Created OS            00 (0) 'MS-DOS'\n+19AFB2 Extract Zip Spec      14 (20) '2.0'\n+19AFB3 Extract OS            00 (0) 'MS-DOS'\n+19AFB4 General Purpose Flag  0000 (0)\n+19AFB6 Compression Method    0000 (0) 'Stored'\n+19AFB8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19AFBC CRC                   00000000 (0)\n+19AFC0 Compressed Size       00000000 (0)\n+19AFC4 Uncompressed Size     00000000 (0)\n+19AFC8 Filename Length       0023 (35)\n+19AFCA Extra Length          0009 (9)\n+19AFCC Comment Length        0000 (0)\n+19AFCE Disk Start            0000 (0)\n+19AFD0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19AFD2 Ext File Attributes   00000000 (0)\n+19AFD6 Local Header Offset   000B9F78 (761720)\n+19AFDA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19AFDA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19AFFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19AFFF   Length              0005 (5)\n+19B001   Flags               01 (1) 'Modification'\n+19B002   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B006 CENTRAL HEADER #204   02014B50 (33639248)\n+19B00A Created Zip Spec      14 (20) '2.0'\n+19B00B Created OS            00 (0) 'MS-DOS'\n+19B00C Extract Zip Spec      14 (20) '2.0'\n+19B00D Extract OS            00 (0) 'MS-DOS'\n+19B00E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B010 Compression Method    0000 (0) 'Stored'\n+19B012 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B016 CRC                   8FD172CF (2412868303)\n+19B01A Compressed Size       00000D1B (3355)\n+19B01E Uncompressed Size     00000D1B (3355)\n+19B022 Filename Length       0031 (49)\n+19B024 Extra Length          0009 (9)\n+19B026 Comment Length        0000 (0)\n+19B028 Disk Start            0000 (0)\n+19B02A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B02C Ext File Attributes   00000000 (0)\n+19B030 Local Header Offset   000B9FC2 (761794)\n+19B034 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B034: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B065 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B067   Length              0005 (5)\n+19B069   Flags               01 (1) 'Modification'\n+19B06A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B06E CENTRAL HEADER #205   02014B50 (33639248)\n+19B072 Created Zip Spec      14 (20) '2.0'\n+19B073 Created OS            00 (0) 'MS-DOS'\n+19B074 Extract Zip Spec      14 (20) '2.0'\n+19B075 Extract OS            00 (0) 'MS-DOS'\n+19B076 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B078 Compression Method    0000 (0) 'Stored'\n+19B07A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B07E CRC                   7ADBDBE0 (2061229024)\n+19B082 Compressed Size       000012FC (4860)\n+19B086 Uncompressed Size     000012FC (4860)\n+19B08A Filename Length       0038 (56)\n+19B08C Extra Length          0009 (9)\n+19B08E Comment Length        0000 (0)\n+19B090 Disk Start            0000 (0)\n+19B092 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B094 Ext File Attributes   00000000 (0)\n+19B098 Local Header Offset   000BAD45 (765253)\n+19B09C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B09C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B0D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B0D6   Length              0005 (5)\n+19B0D8   Flags               01 (1) 'Modification'\n+19B0D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B0DD CENTRAL HEADER #206   02014B50 (33639248)\n+19B0E1 Created Zip Spec      14 (20) '2.0'\n+19B0E2 Created OS            00 (0) 'MS-DOS'\n+19B0E3 Extract Zip Spec      14 (20) '2.0'\n+19B0E4 Extract OS            00 (0) 'MS-DOS'\n+19B0E5 General Purpose Flag  0000 (0)\n+19B0E7 Compression Method    0000 (0) 'Stored'\n+19B0E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B0ED CRC                   00000000 (0)\n+19B0F1 Compressed Size       00000000 (0)\n+19B0F5 Uncompressed Size     00000000 (0)\n+19B0F9 Filename Length       0025 (37)\n+19B0FB Extra Length          0009 (9)\n+19B0FD Comment Length        0000 (0)\n+19B0FF Disk Start            0000 (0)\n+19B101 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B103 Ext File Attributes   00000000 (0)\n+19B107 Local Header Offset   000BC0B0 (770224)\n+19B10B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B10B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B130 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B132   Length              0005 (5)\n+19B134   Flags               01 (1) 'Modification'\n+19B135   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B139 CENTRAL HEADER #207   02014B50 (33639248)\n+19B13D Created Zip Spec      14 (20) '2.0'\n+19B13E Created OS            00 (0) 'MS-DOS'\n+19B13F Extract Zip Spec      14 (20) '2.0'\n+19B140 Extract OS            00 (0) 'MS-DOS'\n+19B141 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B143 Compression Method    0000 (0) 'Stored'\n+19B145 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B149 CRC                   0237005F (37159007)\n+19B14D Compressed Size       00000E61 (3681)\n+19B151 Uncompressed Size     00000E61 (3681)\n+19B155 Filename Length       0035 (53)\n+19B157 Extra Length          0009 (9)\n+19B159 Comment Length        0000 (0)\n+19B15B Disk Start            0000 (0)\n+19B15D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B15F Ext File Attributes   00000000 (0)\n+19B163 Local Header Offset   000BC0FC (770300)\n+19B167 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B167: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B19C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B19E   Length              0005 (5)\n+19B1A0   Flags               01 (1) 'Modification'\n+19B1A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B1A5 CENTRAL HEADER #208   02014B50 (33639248)\n+19B1A9 Created Zip Spec      14 (20) '2.0'\n+19B1AA Created OS            00 (0) 'MS-DOS'\n+19B1AB Extract Zip Spec      14 (20) '2.0'\n+19B1AC Extract OS            00 (0) 'MS-DOS'\n+19B1AD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B1AF Compression Method    0000 (0) 'Stored'\n+19B1B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B1B5 CRC                   CE737695 (3463673493)\n+19B1B9 Compressed Size       000010CC (4300)\n+19B1BD Uncompressed Size     000010CC (4300)\n+19B1C1 Filename Length       003C (60)\n+19B1C3 Extra Length          0009 (9)\n+19B1C5 Comment Length        0000 (0)\n+19B1C7 Disk Start            0000 (0)\n+19B1C9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B1CB Ext File Attributes   00000000 (0)\n+19B1CF Local Header Offset   000BCFC9 (774089)\n+19B1D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B1D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B20F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B211   Length              0005 (5)\n+19B213   Flags               01 (1) 'Modification'\n+19B214   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B218 CENTRAL HEADER #209   02014B50 (33639248)\n+19B21C Created Zip Spec      14 (20) '2.0'\n+19B21D Created OS            00 (0) 'MS-DOS'\n+19B21E Extract Zip Spec      14 (20) '2.0'\n+19B21F Extract OS            00 (0) 'MS-DOS'\n+19B220 General Purpose Flag  0000 (0)\n+19B222 Compression Method    0000 (0) 'Stored'\n+19B224 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B228 CRC                   00000000 (0)\n+19B22C Compressed Size       00000000 (0)\n+19B230 Uncompressed Size     00000000 (0)\n+19B234 Filename Length       0026 (38)\n+19B236 Extra Length          0009 (9)\n+19B238 Comment Length        0000 (0)\n+19B23A Disk Start            0000 (0)\n+19B23C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B23E Ext File Attributes   00000000 (0)\n+19B242 Local Header Offset   000BE108 (778504)\n+19B246 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B246: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B26C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B26E   Length              0005 (5)\n+19B270   Flags               01 (1) 'Modification'\n+19B271   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B275 CENTRAL HEADER #210   02014B50 (33639248)\n+19B279 Created Zip Spec      14 (20) '2.0'\n+19B27A Created OS            00 (0) 'MS-DOS'\n+19B27B Extract Zip Spec      14 (20) '2.0'\n+19B27C Extract OS            00 (0) 'MS-DOS'\n+19B27D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B27F Compression Method    0000 (0) 'Stored'\n+19B281 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B285 CRC                   719AAFB0 (1905962928)\n+19B289 Compressed Size       00000C98 (3224)\n+19B28D Uncompressed Size     00000C98 (3224)\n+19B291 Filename Length       0037 (55)\n+19B293 Extra Length          0009 (9)\n+19B295 Comment Length        0000 (0)\n+19B297 Disk Start            0000 (0)\n+19B299 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B29B Ext File Attributes   00000000 (0)\n+19B29F Local Header Offset   000BE155 (778581)\n+19B2A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B2A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B2DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B2DC   Length              0005 (5)\n+19B2DE   Flags               01 (1) 'Modification'\n+19B2DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B2E3 CENTRAL HEADER #211   02014B50 (33639248)\n+19B2E7 Created Zip Spec      14 (20) '2.0'\n+19B2E8 Created OS            00 (0) 'MS-DOS'\n+19B2E9 Extract Zip Spec      14 (20) '2.0'\n+19B2EA Extract OS            00 (0) 'MS-DOS'\n+19B2EB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B2ED Compression Method    0000 (0) 'Stored'\n+19B2EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B2F3 CRC                   B7D93D08 (3084467464)\n+19B2F7 Compressed Size       00000CED (3309)\n+19B2FB Uncompressed Size     00000CED (3309)\n+19B2FF Filename Length       003E (62)\n+19B301 Extra Length          0009 (9)\n+19B303 Comment Length        0000 (0)\n+19B305 Disk Start            0000 (0)\n+19B307 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B309 Ext File Attributes   00000000 (0)\n+19B30D Local Header Offset   000BEE5B (781915)\n+19B311 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B311: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B34F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B351   Length              0005 (5)\n+19B353   Flags               01 (1) 'Modification'\n+19B354   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B358 CENTRAL HEADER #212   02014B50 (33639248)\n+19B35C Created Zip Spec      14 (20) '2.0'\n+19B35D Created OS            00 (0) 'MS-DOS'\n+19B35E Extract Zip Spec      14 (20) '2.0'\n+19B35F Extract OS            00 (0) 'MS-DOS'\n+19B360 General Purpose Flag  0000 (0)\n+19B362 Compression Method    0000 (0) 'Stored'\n+19B364 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B368 CRC                   00000000 (0)\n+19B36C Compressed Size       00000000 (0)\n+19B370 Uncompressed Size     00000000 (0)\n+19B374 Filename Length       0025 (37)\n+19B376 Extra Length          0009 (9)\n+19B378 Comment Length        0000 (0)\n+19B37A Disk Start            0000 (0)\n+19B37C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B37E Ext File Attributes   00000000 (0)\n+19B382 Local Header Offset   000BFBBD (785341)\n+19B386 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B386: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B3AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B3AD   Length              0005 (5)\n+19B3AF   Flags               01 (1) 'Modification'\n+19B3B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B3B4 CENTRAL HEADER #213   02014B50 (33639248)\n+19B3B8 Created Zip Spec      14 (20) '2.0'\n+19B3B9 Created OS            00 (0) 'MS-DOS'\n+19B3BA Extract Zip Spec      14 (20) '2.0'\n+19B3BB Extract OS            00 (0) 'MS-DOS'\n+19B3BC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B3BE Compression Method    0000 (0) 'Stored'\n+19B3C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B3C4 CRC                   FD6565BB (4251280827)\n+19B3C8 Compressed Size       00001876 (6262)\n+19B3CC Uncompressed Size     00001876 (6262)\n+19B3D0 Filename Length       0035 (53)\n+19B3D2 Extra Length          0009 (9)\n+19B3D4 Comment Length        0000 (0)\n+19B3D6 Disk Start            0000 (0)\n+19B3D8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B3DA Ext File Attributes   00000000 (0)\n+19B3DE Local Header Offset   000BFC09 (785417)\n+19B3E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B3E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B417 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B419   Length              0005 (5)\n+19B41B   Flags               01 (1) 'Modification'\n+19B41C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B420 CENTRAL HEADER #214   02014B50 (33639248)\n+19B424 Created Zip Spec      14 (20) '2.0'\n+19B425 Created OS            00 (0) 'MS-DOS'\n+19B426 Extract Zip Spec      14 (20) '2.0'\n+19B427 Extract OS            00 (0) 'MS-DOS'\n+19B428 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B42A Compression Method    0000 (0) 'Stored'\n+19B42C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B430 CRC                   2D853131 (763703601)\n+19B434 Compressed Size       000006EF (1775)\n+19B438 Uncompressed Size     000006EF (1775)\n+19B43C Filename Length       003C (60)\n+19B43E Extra Length          0009 (9)\n+19B440 Comment Length        0000 (0)\n+19B442 Disk Start            0000 (0)\n+19B444 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B446 Ext File Attributes   00000000 (0)\n+19B44A Local Header Offset   000C14EB (791787)\n+19B44E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B44E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B48A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B48C   Length              0005 (5)\n+19B48E   Flags               01 (1) 'Modification'\n+19B48F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B493 CENTRAL HEADER #215   02014B50 (33639248)\n+19B497 Created Zip Spec      14 (20) '2.0'\n+19B498 Created OS            00 (0) 'MS-DOS'\n+19B499 Extract Zip Spec      14 (20) '2.0'\n+19B49A Extract OS            00 (0) 'MS-DOS'\n+19B49B General Purpose Flag  0000 (0)\n+19B49D Compression Method    0000 (0) 'Stored'\n+19B49F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B4A3 CRC                   00000000 (0)\n+19B4A7 Compressed Size       00000000 (0)\n+19B4AB Uncompressed Size     00000000 (0)\n+19B4AF Filename Length       0027 (39)\n+19B4B1 Extra Length          0009 (9)\n+19B4B3 Comment Length        0000 (0)\n+19B4B5 Disk Start            0000 (0)\n+19B4B7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B4B9 Ext File Attributes   00000000 (0)\n+19B4BD Local Header Offset   000C1C4D (793677)\n+19B4C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B4C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B4E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B4EA   Length              0005 (5)\n+19B4EC   Flags               01 (1) 'Modification'\n+19B4ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B4F1 CENTRAL HEADER #216   02014B50 (33639248)\n+19B4F5 Created Zip Spec      14 (20) '2.0'\n+19B4F6 Created OS            00 (0) 'MS-DOS'\n+19B4F7 Extract Zip Spec      14 (20) '2.0'\n+19B4F8 Extract OS            00 (0) 'MS-DOS'\n+19B4F9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B4FB Compression Method    0000 (0) 'Stored'\n+19B4FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B501 CRC                   01B8CE5D (28888669)\n+19B505 Compressed Size       000013B5 (5045)\n+19B509 Uncompressed Size     000013B5 (5045)\n+19B50D Filename Length       003A (58)\n+19B50F Extra Length          0009 (9)\n+19B511 Comment Length        0000 (0)\n+19B513 Disk Start            0000 (0)\n+19B515 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B517 Ext File Attributes   00000000 (0)\n+19B51B Local Header Offset   000C1C9B (793755)\n+19B51F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B51F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B559 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B55B   Length              0005 (5)\n+19B55D   Flags               01 (1) 'Modification'\n+19B55E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B562 CENTRAL HEADER #217   02014B50 (33639248)\n+19B566 Created Zip Spec      14 (20) '2.0'\n+19B567 Created OS            00 (0) 'MS-DOS'\n+19B568 Extract Zip Spec      14 (20) '2.0'\n+19B569 Extract OS            00 (0) 'MS-DOS'\n+19B56A General Purpose Flag  0000 (0)\n+19B56C Compression Method    0000 (0) 'Stored'\n+19B56E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B572 CRC                   00000000 (0)\n+19B576 Compressed Size       00000000 (0)\n+19B57A Uncompressed Size     00000000 (0)\n+19B57E Filename Length       001F (31)\n+19B580 Extra Length          0009 (9)\n+19B582 Comment Length        0000 (0)\n+19B584 Disk Start            0000 (0)\n+19B586 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B588 Ext File Attributes   00000000 (0)\n+19B58C Local Header Offset   000C30C1 (798913)\n+19B590 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B590: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B5AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B5B1   Length              0005 (5)\n+19B5B3   Flags               01 (1) 'Modification'\n+19B5B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B5B8 CENTRAL HEADER #218   02014B50 (33639248)\n+19B5BC Created Zip Spec      14 (20) '2.0'\n+19B5BD Created OS            00 (0) 'MS-DOS'\n+19B5BE Extract Zip Spec      14 (20) '2.0'\n+19B5BF Extract OS            00 (0) 'MS-DOS'\n+19B5C0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B5C2 Compression Method    0000 (0) 'Stored'\n+19B5C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B5C8 CRC                   EE49CD50 (3997814096)\n+19B5CC Compressed Size       0000075D (1885)\n+19B5D0 Uncompressed Size     0000075D (1885)\n+19B5D4 Filename Length       002A (42)\n+19B5D6 Extra Length          0009 (9)\n+19B5D8 Comment Length        0000 (0)\n+19B5DA Disk Start            0000 (0)\n+19B5DC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B5DE Ext File Attributes   00000000 (0)\n+19B5E2 Local Header Offset   000C3107 (798983)\n+19B5E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B5E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B610 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B612   Length              0005 (5)\n+19B614   Flags               01 (1) 'Modification'\n+19B615   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B619 CENTRAL HEADER #219   02014B50 (33639248)\n+19B61D Created Zip Spec      14 (20) '2.0'\n+19B61E Created OS            00 (0) 'MS-DOS'\n+19B61F Extract Zip Spec      14 (20) '2.0'\n+19B620 Extract OS            00 (0) 'MS-DOS'\n+19B621 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B623 Compression Method    0000 (0) 'Stored'\n+19B625 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B629 CRC                   4C723E93 (1282555539)\n+19B62D Compressed Size       00000432 (1074)\n+19B631 Uncompressed Size     00000432 (1074)\n+19B635 Filename Length       0031 (49)\n+19B637 Extra Length          0009 (9)\n+19B639 Comment Length        0000 (0)\n+19B63B Disk Start            0000 (0)\n+19B63D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B63F Ext File Attributes   00000000 (0)\n+19B643 Local Header Offset   000C38C5 (800965)\n+19B647 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B647: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B678 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B67A   Length              0005 (5)\n+19B67C   Flags               01 (1) 'Modification'\n+19B67D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B681 CENTRAL HEADER #220   02014B50 (33639248)\n+19B685 Created Zip Spec      14 (20) '2.0'\n+19B686 Created OS            00 (0) 'MS-DOS'\n+19B687 Extract Zip Spec      14 (20) '2.0'\n+19B688 Extract OS            00 (0) 'MS-DOS'\n+19B689 General Purpose Flag  0000 (0)\n+19B68B Compression Method    0000 (0) 'Stored'\n+19B68D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B691 CRC                   00000000 (0)\n+19B695 Compressed Size       00000000 (0)\n+19B699 Uncompressed Size     00000000 (0)\n+19B69D Filename Length       0027 (39)\n+19B69F Extra Length          0009 (9)\n+19B6A1 Comment Length        0000 (0)\n+19B6A3 Disk Start            0000 (0)\n+19B6A5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B6A7 Ext File Attributes   00000000 (0)\n+19B6AB Local Header Offset   000C3D5F (802143)\n+19B6AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B6AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B6D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B6D8   Length              0005 (5)\n+19B6DA   Flags               01 (1) 'Modification'\n+19B6DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B6DF CENTRAL HEADER #221   02014B50 (33639248)\n+19B6E3 Created Zip Spec      14 (20) '2.0'\n+19B6E4 Created OS            00 (0) 'MS-DOS'\n+19B6E5 Extract Zip Spec      14 (20) '2.0'\n+19B6E6 Extract OS            00 (0) 'MS-DOS'\n+19B6E7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B6E9 Compression Method    0000 (0) 'Stored'\n+19B6EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B6EF CRC                   CD3068DB (3442501851)\n+19B6F3 Compressed Size       000008A7 (2215)\n+19B6F7 Uncompressed Size     000008A7 (2215)\n+19B6FB Filename Length       003D (61)\n+19B6FD Extra Length          0009 (9)\n+19B6FF Comment Length        0000 (0)\n+19B701 Disk Start            0000 (0)\n+19B703 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B705 Ext File Attributes   00000000 (0)\n+19B709 Local Header Offset   000C3DAD (802221)\n+19B70D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B70D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B74A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B74C   Length              0005 (5)\n+19B74E   Flags               01 (1) 'Modification'\n+19B74F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B753 CENTRAL HEADER #222   02014B50 (33639248)\n+19B757 Created Zip Spec      14 (20) '2.0'\n+19B758 Created OS            00 (0) 'MS-DOS'\n+19B759 Extract Zip Spec      14 (20) '2.0'\n+19B75A Extract OS            00 (0) 'MS-DOS'\n+19B75B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B75D Compression Method    0000 (0) 'Stored'\n+19B75F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B763 CRC                   E601D6EE (3858880238)\n+19B767 Compressed Size       00000701 (1793)\n+19B76B Uncompressed Size     00000701 (1793)\n+19B76F Filename Length       003F (63)\n+19B771 Extra Length          0009 (9)\n+19B773 Comment Length        0000 (0)\n+19B775 Disk Start            0000 (0)\n+19B777 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B779 Ext File Attributes   00000000 (0)\n+19B77D Local Header Offset   000C46C8 (804552)\n+19B781 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B781: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B7C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B7C2   Length              0005 (5)\n+19B7C4   Flags               01 (1) 'Modification'\n+19B7C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B7C9 CENTRAL HEADER #223   02014B50 (33639248)\n+19B7CD Created Zip Spec      14 (20) '2.0'\n+19B7CE Created OS            00 (0) 'MS-DOS'\n+19B7CF Extract Zip Spec      14 (20) '2.0'\n+19B7D0 Extract OS            00 (0) 'MS-DOS'\n+19B7D1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B7D3 Compression Method    0000 (0) 'Stored'\n+19B7D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B7D9 CRC                   577B6C79 (1467706489)\n+19B7DD Compressed Size       000007D4 (2004)\n+19B7E1 Uncompressed Size     000007D4 (2004)\n+19B7E5 Filename Length       0037 (55)\n+19B7E7 Extra Length          0009 (9)\n+19B7E9 Comment Length        0000 (0)\n+19B7EB Disk Start            0000 (0)\n+19B7ED Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B7EF Ext File Attributes   00000000 (0)\n+19B7F3 Local Header Offset   000C4E3F (806463)\n+19B7F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B7F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B82E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B830   Length              0005 (5)\n+19B832   Flags               01 (1) 'Modification'\n+19B833   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B837 CENTRAL HEADER #224   02014B50 (33639248)\n+19B83B Created Zip Spec      14 (20) '2.0'\n+19B83C Created OS            00 (0) 'MS-DOS'\n+19B83D Extract Zip Spec      14 (20) '2.0'\n+19B83E Extract OS            00 (0) 'MS-DOS'\n+19B83F General Purpose Flag  0000 (0)\n+19B841 Compression Method    0000 (0) 'Stored'\n+19B843 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B847 CRC                   00000000 (0)\n+19B84B Compressed Size       00000000 (0)\n+19B84F Uncompressed Size     00000000 (0)\n+19B853 Filename Length       001E (30)\n+19B855 Extra Length          0009 (9)\n+19B857 Comment Length        0000 (0)\n+19B859 Disk Start            0000 (0)\n+19B85B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B85D Ext File Attributes   00000000 (0)\n+19B861 Local Header Offset   000C5681 (808577)\n+19B865 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B865: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B883 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B885   Length              0005 (5)\n+19B887   Flags               01 (1) 'Modification'\n+19B888   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B88C CENTRAL HEADER #225   02014B50 (33639248)\n+19B890 Created Zip Spec      14 (20) '2.0'\n+19B891 Created OS            00 (0) 'MS-DOS'\n+19B892 Extract Zip Spec      14 (20) '2.0'\n+19B893 Extract OS            00 (0) 'MS-DOS'\n+19B894 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B896 Compression Method    0000 (0) 'Stored'\n+19B898 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B89C CRC                   BF5F9C1E (3210714142)\n+19B8A0 Compressed Size       00000500 (1280)\n+19B8A4 Uncompressed Size     00000500 (1280)\n+19B8A8 Filename Length       002C (44)\n+19B8AA Extra Length          0009 (9)\n+19B8AC Comment Length        0000 (0)\n+19B8AE Disk Start            0000 (0)\n+19B8B0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B8B2 Ext File Attributes   00000000 (0)\n+19B8B6 Local Header Offset   000C56C6 (808646)\n+19B8BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B8BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B8E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B8E8   Length              0005 (5)\n+19B8EA   Flags               01 (1) 'Modification'\n+19B8EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B8EF CENTRAL HEADER #226   02014B50 (33639248)\n+19B8F3 Created Zip Spec      14 (20) '2.0'\n+19B8F4 Created OS            00 (0) 'MS-DOS'\n+19B8F5 Extract Zip Spec      14 (20) '2.0'\n+19B8F6 Extract OS            00 (0) 'MS-DOS'\n+19B8F7 General Purpose Flag  0000 (0)\n+19B8F9 Compression Method    0000 (0) 'Stored'\n+19B8FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B8FF CRC                   00000000 (0)\n+19B903 Compressed Size       00000000 (0)\n+19B907 Uncompressed Size     00000000 (0)\n+19B90B Filename Length       0026 (38)\n+19B90D Extra Length          0009 (9)\n+19B90F Comment Length        0000 (0)\n+19B911 Disk Start            0000 (0)\n+19B913 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B915 Ext File Attributes   00000000 (0)\n+19B919 Local Header Offset   000C5C29 (810025)\n+19B91D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B91D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B943 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B945   Length              0005 (5)\n+19B947   Flags               01 (1) 'Modification'\n+19B948   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B94C CENTRAL HEADER #227   02014B50 (33639248)\n+19B950 Created Zip Spec      14 (20) '2.0'\n+19B951 Created OS            00 (0) 'MS-DOS'\n+19B952 Extract Zip Spec      14 (20) '2.0'\n+19B953 Extract OS            00 (0) 'MS-DOS'\n+19B954 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19B956 Compression Method    0000 (0) 'Stored'\n+19B958 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B95C CRC                   6A2AB119 (1781182745)\n+19B960 Compressed Size       00000908 (2312)\n+19B964 Uncompressed Size     00000908 (2312)\n+19B968 Filename Length       003A (58)\n+19B96A Extra Length          0009 (9)\n+19B96C Comment Length        0000 (0)\n+19B96E Disk Start            0000 (0)\n+19B970 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B972 Ext File Attributes   00000000 (0)\n+19B976 Local Header Offset   000C5C76 (810102)\n+19B97A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B97A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19B9B4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19B9B6   Length              0005 (5)\n+19B9B8   Flags               01 (1) 'Modification'\n+19B9B9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19B9BD CENTRAL HEADER #228   02014B50 (33639248)\n+19B9C1 Created Zip Spec      14 (20) '2.0'\n+19B9C2 Created OS            00 (0) 'MS-DOS'\n+19B9C3 Extract Zip Spec      14 (20) '2.0'\n+19B9C4 Extract OS            00 (0) 'MS-DOS'\n+19B9C5 General Purpose Flag  0000 (0)\n+19B9C7 Compression Method    0000 (0) 'Stored'\n+19B9C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19B9CD CRC                   00000000 (0)\n+19B9D1 Compressed Size       00000000 (0)\n+19B9D5 Uncompressed Size     00000000 (0)\n+19B9D9 Filename Length       0024 (36)\n+19B9DB Extra Length          0009 (9)\n+19B9DD Comment Length        0000 (0)\n+19B9DF Disk Start            0000 (0)\n+19B9E1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19B9E3 Ext File Attributes   00000000 (0)\n+19B9E7 Local Header Offset   000C65EF (812527)\n+19B9EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19B9EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BA0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BA11   Length              0005 (5)\n+19BA13   Flags               01 (1) 'Modification'\n+19BA14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BA18 CENTRAL HEADER #229   02014B50 (33639248)\n+19BA1C Created Zip Spec      14 (20) '2.0'\n+19BA1D Created OS            00 (0) 'MS-DOS'\n+19BA1E Extract Zip Spec      14 (20) '2.0'\n+19BA1F Extract OS            00 (0) 'MS-DOS'\n+19BA20 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19BA22 Compression Method    0000 (0) 'Stored'\n+19BA24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BA28 CRC                   19AC3747 (430716743)\n+19BA2C Compressed Size       0000076E (1902)\n+19BA30 Uncompressed Size     0000076E (1902)\n+19BA34 Filename Length       0039 (57)\n+19BA36 Extra Length          0009 (9)\n+19BA38 Comment Length        0000 (0)\n+19BA3A Disk Start            0000 (0)\n+19BA3C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BA3E Ext File Attributes   00000000 (0)\n+19BA42 Local Header Offset   000C663A (812602)\n+19BA46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BA46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BA7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BA81   Length              0005 (5)\n+19BA83   Flags               01 (1) 'Modification'\n+19BA84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BA88 CENTRAL HEADER #230   02014B50 (33639248)\n+19BA8C Created Zip Spec      14 (20) '2.0'\n+19BA8D Created OS            00 (0) 'MS-DOS'\n+19BA8E Extract Zip Spec      14 (20) '2.0'\n+19BA8F Extract OS            00 (0) 'MS-DOS'\n+19BA90 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19BA92 Compression Method    0000 (0) 'Stored'\n+19BA94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BA98 CRC                   DFEE0135 (3756917045)\n+19BA9C Compressed Size       0000098D (2445)\n+19BAA0 Uncompressed Size     0000098D (2445)\n+19BAA4 Filename Length       0037 (55)\n+19BAA6 Extra Length          0009 (9)\n+19BAA8 Comment Length        0000 (0)\n+19BAAA Disk Start            0000 (0)\n+19BAAC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BAAE Ext File Attributes   00000000 (0)\n+19BAB2 Local Header Offset   000C6E18 (814616)\n+19BAB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BAB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BAED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BAEF   Length              0005 (5)\n+19BAF1   Flags               01 (1) 'Modification'\n+19BAF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BAF6 CENTRAL HEADER #231   02014B50 (33639248)\n+19BAFA Created Zip Spec      14 (20) '2.0'\n+19BAFB Created OS            00 (0) 'MS-DOS'\n+19BAFC Extract Zip Spec      14 (20) '2.0'\n+19BAFD Extract OS            00 (0) 'MS-DOS'\n+19BAFE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19BB00 Compression Method    0000 (0) 'Stored'\n+19BB02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BB06 CRC                   E4E72DDD (3840355805)\n+19BB0A Compressed Size       00001BBE (7102)\n+19BB0E Uncompressed Size     00001BBE (7102)\n+19BB12 Filename Length       003C (60)\n+19BB14 Extra Length          0009 (9)\n+19BB16 Comment Length        0000 (0)\n+19BB18 Disk Start            0000 (0)\n+19BB1A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BB1C Ext File Attributes   00000000 (0)\n+19BB20 Local Header Offset   000C7813 (817171)\n+19BB24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BB24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BB60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BB62   Length              0005 (5)\n+19BB64   Flags               01 (1) 'Modification'\n+19BB65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BB69 CENTRAL HEADER #232   02014B50 (33639248)\n+19BB6D Created Zip Spec      14 (20) '2.0'\n+19BB6E Created OS            00 (0) 'MS-DOS'\n+19BB6F Extract Zip Spec      14 (20) '2.0'\n+19BB70 Extract OS            00 (0) 'MS-DOS'\n+19BB71 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19BB73 Compression Method    0000 (0) 'Stored'\n+19BB75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BB79 CRC                   5E80C56B (1585497451)\n+19BB7D Compressed Size       000015FF (5631)\n+19BB81 Uncompressed Size     000015FF (5631)\n+19BB85 Filename Length       003F (63)\n+19BB87 Extra Length          0009 (9)\n+19BB89 Comment Length        0000 (0)\n+19BB8B Disk Start            0000 (0)\n+19BB8D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BB8F Ext File Attributes   00000000 (0)\n+19BB93 Local Header Offset   000C9444 (824388)\n+19BB97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BB97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BBD6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BBD8   Length              0005 (5)\n+19BBDA   Flags               01 (1) 'Modification'\n+19BBDB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BBDF CENTRAL HEADER #233   02014B50 (33639248)\n+19BBE3 Created Zip Spec      14 (20) '2.0'\n+19BBE4 Created OS            00 (0) 'MS-DOS'\n+19BBE5 Extract Zip Spec      14 (20) '2.0'\n+19BBE6 Extract OS            00 (0) 'MS-DOS'\n+19BBE7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19BBE9 Compression Method    0000 (0) 'Stored'\n+19BBEB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BBEF CRC                   D1666DFC (3513150972)\n+19BBF3 Compressed Size       0000068D (1677)\n+19BBF7 Uncompressed Size     0000068D (1677)\n+19BBFB Filename Length       0043 (67)\n+19BBFD Extra Length          0009 (9)\n+19BBFF Comment Length        0000 (0)\n+19BC01 Disk Start            0000 (0)\n+19BC03 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BC05 Ext File Attributes   00000000 (0)\n+19BC09 Local Header Offset   000CAAB9 (830137)\n+19BC0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BC0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BC50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BC52   Length              0005 (5)\n+19BC54   Flags               01 (1) 'Modification'\n+19BC55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BC59 CENTRAL HEADER #234   02014B50 (33639248)\n+19BC5D Created Zip Spec      14 (20) '2.0'\n+19BC5E Created OS            00 (0) 'MS-DOS'\n+19BC5F Extract Zip Spec      14 (20) '2.0'\n+19BC60 Extract OS            00 (0) 'MS-DOS'\n+19BC61 General Purpose Flag  0000 (0)\n+19BC63 Compression Method    0000 (0) 'Stored'\n+19BC65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BC69 CRC                   00000000 (0)\n+19BC6D Compressed Size       00000000 (0)\n+19BC71 Uncompressed Size     00000000 (0)\n+19BC75 Filename Length       0023 (35)\n+19BC77 Extra Length          0009 (9)\n+19BC79 Comment Length        0000 (0)\n+19BC7B Disk Start            0000 (0)\n+19BC7D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BC7F Ext File Attributes   00000000 (0)\n+19BC83 Local Header Offset   000CB1C0 (831936)\n+19BC87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BC87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BCAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BCAC   Length              0005 (5)\n+19BCAE   Flags               01 (1) 'Modification'\n+19BCAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BCB3 CENTRAL HEADER #235   02014B50 (33639248)\n+19BCB7 Created Zip Spec      14 (20) '2.0'\n+19BCB8 Created OS            00 (0) 'MS-DOS'\n+19BCB9 Extract Zip Spec      14 (20) '2.0'\n+19BCBA Extract OS            00 (0) 'MS-DOS'\n+19BCBB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19BCBD Compression Method    0000 (0) 'Stored'\n+19BCBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BCC3 CRC                   25E239BD (635582909)\n+19BCC7 Compressed Size       00000575 (1397)\n+19BCCB Uncompressed Size     00000575 (1397)\n+19BCCF Filename Length       0032 (50)\n+19BCD1 Extra Length          0009 (9)\n+19BCD3 Comment Length        0000 (0)\n+19BCD5 Disk Start            0000 (0)\n+19BCD7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BCD9 Ext File Attributes   00000000 (0)\n+19BCDD Local Header Offset   000CB20A (832010)\n+19BCE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BCE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BD13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BD15   Length              0005 (5)\n+19BD17   Flags               01 (1) 'Modification'\n+19BD18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BD1C CENTRAL HEADER #236   02014B50 (33639248)\n+19BD20 Created Zip Spec      14 (20) '2.0'\n+19BD21 Created OS            00 (0) 'MS-DOS'\n+19BD22 Extract Zip Spec      14 (20) '2.0'\n+19BD23 Extract OS            00 (0) 'MS-DOS'\n+19BD24 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19BD26 Compression Method    0000 (0) 'Stored'\n+19BD28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BD2C CRC                   6E8E196C (1854806380)\n+19BD30 Compressed Size       00001B5F (7007)\n+19BD34 Uncompressed Size     00001B5F (7007)\n+19BD38 Filename Length       003A (58)\n+19BD3A Extra Length          0009 (9)\n+19BD3C Comment Length        0000 (0)\n+19BD3E Disk Start            0000 (0)\n+19BD40 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BD42 Ext File Attributes   00000000 (0)\n+19BD46 Local Header Offset   000CB7E8 (833512)\n+19BD4A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BD4A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BD84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BD86   Length              0005 (5)\n+19BD88   Flags               01 (1) 'Modification'\n+19BD89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BD8D CENTRAL HEADER #237   02014B50 (33639248)\n+19BD91 Created Zip Spec      14 (20) '2.0'\n+19BD92 Created OS            00 (0) 'MS-DOS'\n+19BD93 Extract Zip Spec      14 (20) '2.0'\n+19BD94 Extract OS            00 (0) 'MS-DOS'\n+19BD95 General Purpose Flag  0000 (0)\n+19BD97 Compression Method    0000 (0) 'Stored'\n+19BD99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BD9D CRC                   00000000 (0)\n+19BDA1 Compressed Size       00000000 (0)\n+19BDA5 Uncompressed Size     00000000 (0)\n+19BDA9 Filename Length       002E (46)\n+19BDAB Extra Length          0009 (9)\n+19BDAD Comment Length        0000 (0)\n+19BDAF Disk Start            0000 (0)\n+19BDB1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BDB3 Ext File Attributes   00000000 (0)\n+19BDB7 Local Header Offset   000CD3B8 (840632)\n+19BDBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BDBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BDE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BDEB   Length              0005 (5)\n+19BDED   Flags               01 (1) 'Modification'\n+19BDEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BDF2 CENTRAL HEADER #238   02014B50 (33639248)\n+19BDF6 Created Zip Spec      14 (20) '2.0'\n+19BDF7 Created OS            00 (0) 'MS-DOS'\n+19BDF8 Extract Zip Spec      14 (20) '2.0'\n+19BDF9 Extract OS            00 (0) 'MS-DOS'\n+19BDFA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19BDFC Compression Method    0000 (0) 'Stored'\n+19BDFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BE02 CRC                   4F941D99 (1335106969)\n+19BE06 Compressed Size       0000094D (2381)\n+19BE0A Uncompressed Size     0000094D (2381)\n+19BE0E Filename Length       004D (77)\n+19BE10 Extra Length          0009 (9)\n+19BE12 Comment Length        0000 (0)\n+19BE14 Disk Start            0000 (0)\n+19BE16 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BE18 Ext File Attributes   00000000 (0)\n+19BE1C Local Header Offset   000CD40D (840717)\n+19BE20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BE20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BE6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BE6F   Length              0005 (5)\n+19BE71   Flags               01 (1) 'Modification'\n+19BE72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BE76 CENTRAL HEADER #239   02014B50 (33639248)\n+19BE7A Created Zip Spec      14 (20) '2.0'\n+19BE7B Created OS            00 (0) 'MS-DOS'\n+19BE7C Extract Zip Spec      14 (20) '2.0'\n+19BE7D Extract OS            00 (0) 'MS-DOS'\n+19BE7E General Purpose Flag  0000 (0)\n+19BE80 Compression Method    0000 (0) 'Stored'\n+19BE82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BE86 CRC                   00000000 (0)\n+19BE8A Compressed Size       00000000 (0)\n+19BE8E Uncompressed Size     00000000 (0)\n+19BE92 Filename Length       0029 (41)\n+19BE94 Extra Length          0009 (9)\n+19BE96 Comment Length        0000 (0)\n+19BE98 Disk Start            0000 (0)\n+19BE9A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BE9C Ext File Attributes   00000000 (0)\n+19BEA0 Local Header Offset   000CDDDE (843230)\n+19BEA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BEA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BECD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BECF   Length              0005 (5)\n+19BED1   Flags               01 (1) 'Modification'\n+19BED2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BED6 CENTRAL HEADER #240   02014B50 (33639248)\n+19BEDA Created Zip Spec      14 (20) '2.0'\n+19BEDB Created OS            00 (0) 'MS-DOS'\n+19BEDC Extract Zip Spec      14 (20) '2.0'\n+19BEDD Extract OS            00 (0) 'MS-DOS'\n+19BEDE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19BEE0 Compression Method    0000 (0) 'Stored'\n+19BEE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BEE6 CRC                   9F5D6B51 (2673699665)\n+19BEEA Compressed Size       00000501 (1281)\n+19BEEE Uncompressed Size     00000501 (1281)\n+19BEF2 Filename Length       0046 (70)\n+19BEF4 Extra Length          0009 (9)\n+19BEF6 Comment Length        0000 (0)\n+19BEF8 Disk Start            0000 (0)\n+19BEFA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BEFC Ext File Attributes   00000000 (0)\n+19BF00 Local Header Offset   000CDE2E (843310)\n+19BF04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BF04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BF4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BF4C   Length              0005 (5)\n+19BF4E   Flags               01 (1) 'Modification'\n+19BF4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BF53 CENTRAL HEADER #241   02014B50 (33639248)\n+19BF57 Created Zip Spec      14 (20) '2.0'\n+19BF58 Created OS            00 (0) 'MS-DOS'\n+19BF59 Extract Zip Spec      14 (20) '2.0'\n+19BF5A Extract OS            00 (0) 'MS-DOS'\n+19BF5B General Purpose Flag  0000 (0)\n+19BF5D Compression Method    0000 (0) 'Stored'\n+19BF5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BF63 CRC                   00000000 (0)\n+19BF67 Compressed Size       00000000 (0)\n+19BF6B Uncompressed Size     00000000 (0)\n+19BF6F Filename Length       002B (43)\n+19BF71 Extra Length          0009 (9)\n+19BF73 Comment Length        0000 (0)\n+19BF75 Disk Start            0000 (0)\n+19BF77 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BF79 Ext File Attributes   00000000 (0)\n+19BF7D Local Header Offset   000CE3AC (844716)\n+19BF81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BF81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19BFAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19BFAE   Length              0005 (5)\n+19BFB0   Flags               01 (1) 'Modification'\n+19BFB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19BFB5 CENTRAL HEADER #242   02014B50 (33639248)\n+19BFB9 Created Zip Spec      14 (20) '2.0'\n+19BFBA Created OS            00 (0) 'MS-DOS'\n+19BFBB Extract Zip Spec      14 (20) '2.0'\n+19BFBC Extract OS            00 (0) 'MS-DOS'\n+19BFBD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19BFBF Compression Method    0000 (0) 'Stored'\n+19BFC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19BFC5 CRC                   C15BEF93 (3244027795)\n+19BFC9 Compressed Size       00001EDF (7903)\n+19BFCD Uncompressed Size     00001EDF (7903)\n+19BFD1 Filename Length       0049 (73)\n+19BFD3 Extra Length          0009 (9)\n+19BFD5 Comment Length        0000 (0)\n+19BFD7 Disk Start            0000 (0)\n+19BFD9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19BFDB Ext File Attributes   00000000 (0)\n+19BFDF Local Header Offset   000CE3FE (844798)\n+19BFE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19BFE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C02C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C02E   Length              0005 (5)\n+19C030   Flags               01 (1) 'Modification'\n+19C031   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C035 CENTRAL HEADER #243   02014B50 (33639248)\n+19C039 Created Zip Spec      14 (20) '2.0'\n+19C03A Created OS            00 (0) 'MS-DOS'\n+19C03B Extract Zip Spec      14 (20) '2.0'\n+19C03C Extract OS            00 (0) 'MS-DOS'\n+19C03D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C03F Compression Method    0000 (0) 'Stored'\n+19C041 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C045 CRC                   EF70124F (4017099343)\n+19C049 Compressed Size       00000960 (2400)\n+19C04D Uncompressed Size     00000960 (2400)\n+19C051 Filename Length       0042 (66)\n+19C053 Extra Length          0009 (9)\n+19C055 Comment Length        0000 (0)\n+19C057 Disk Start            0000 (0)\n+19C059 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C05B Ext File Attributes   00000000 (0)\n+19C05F Local Header Offset   000D035D (852829)\n+19C063 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C063: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C0A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C0A7   Length              0005 (5)\n+19C0A9   Flags               01 (1) 'Modification'\n+19C0AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C0AE CENTRAL HEADER #244   02014B50 (33639248)\n+19C0B2 Created Zip Spec      14 (20) '2.0'\n+19C0B3 Created OS            00 (0) 'MS-DOS'\n+19C0B4 Extract Zip Spec      14 (20) '2.0'\n+19C0B5 Extract OS            00 (0) 'MS-DOS'\n+19C0B6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C0B8 Compression Method    0000 (0) 'Stored'\n+19C0BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C0BE CRC                   B2FA49D8 (3002747352)\n+19C0C2 Compressed Size       0000083C (2108)\n+19C0C6 Uncompressed Size     0000083C (2108)\n+19C0CA Filename Length       0034 (52)\n+19C0CC Extra Length          0009 (9)\n+19C0CE Comment Length        0000 (0)\n+19C0D0 Disk Start            0000 (0)\n+19C0D2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C0D4 Ext File Attributes   00000000 (0)\n+19C0D8 Local Header Offset   000D0D36 (855350)\n+19C0DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C0DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C110 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C112   Length              0005 (5)\n+19C114   Flags               01 (1) 'Modification'\n+19C115   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C119 CENTRAL HEADER #245   02014B50 (33639248)\n+19C11D Created Zip Spec      14 (20) '2.0'\n+19C11E Created OS            00 (0) 'MS-DOS'\n+19C11F Extract Zip Spec      14 (20) '2.0'\n+19C120 Extract OS            00 (0) 'MS-DOS'\n+19C121 General Purpose Flag  0000 (0)\n+19C123 Compression Method    0000 (0) 'Stored'\n+19C125 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C129 CRC                   00000000 (0)\n+19C12D Compressed Size       00000000 (0)\n+19C131 Uncompressed Size     00000000 (0)\n+19C135 Filename Length       002B (43)\n+19C137 Extra Length          0009 (9)\n+19C139 Comment Length        0000 (0)\n+19C13B Disk Start            0000 (0)\n+19C13D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C13F Ext File Attributes   00000000 (0)\n+19C143 Local Header Offset   000D15DD (857565)\n+19C147 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C147: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C172 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C174   Length              0005 (5)\n+19C176   Flags               01 (1) 'Modification'\n+19C177   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C17B CENTRAL HEADER #246   02014B50 (33639248)\n+19C17F Created Zip Spec      14 (20) '2.0'\n+19C180 Created OS            00 (0) 'MS-DOS'\n+19C181 Extract Zip Spec      14 (20) '2.0'\n+19C182 Extract OS            00 (0) 'MS-DOS'\n+19C183 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C185 Compression Method    0000 (0) 'Stored'\n+19C187 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C18B CRC                   A9E4FF87 (2850357127)\n+19C18F Compressed Size       00001767 (5991)\n+19C193 Uncompressed Size     00001767 (5991)\n+19C197 Filename Length       0045 (69)\n+19C199 Extra Length          0009 (9)\n+19C19B Comment Length        0000 (0)\n+19C19D Disk Start            0000 (0)\n+19C19F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C1A1 Ext File Attributes   00000000 (0)\n+19C1A5 Local Header Offset   000D162F (857647)\n+19C1A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C1A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C1EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C1F0   Length              0005 (5)\n+19C1F2   Flags               01 (1) 'Modification'\n+19C1F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C1F7 CENTRAL HEADER #247   02014B50 (33639248)\n+19C1FB Created Zip Spec      14 (20) '2.0'\n+19C1FC Created OS            00 (0) 'MS-DOS'\n+19C1FD Extract Zip Spec      14 (20) '2.0'\n+19C1FE Extract OS            00 (0) 'MS-DOS'\n+19C1FF General Purpose Flag  0000 (0)\n+19C201 Compression Method    0000 (0) 'Stored'\n+19C203 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C207 CRC                   00000000 (0)\n+19C20B Compressed Size       00000000 (0)\n+19C20F Uncompressed Size     00000000 (0)\n+19C213 Filename Length       0032 (50)\n+19C215 Extra Length          0009 (9)\n+19C217 Comment Length        0000 (0)\n+19C219 Disk Start            0000 (0)\n+19C21B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C21D Ext File Attributes   00000000 (0)\n+19C221 Local Header Offset   000D2E12 (863762)\n+19C225 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C225: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C257 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C259   Length              0005 (5)\n+19C25B   Flags               01 (1) 'Modification'\n+19C25C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C260 CENTRAL HEADER #248   02014B50 (33639248)\n+19C264 Created Zip Spec      14 (20) '2.0'\n+19C265 Created OS            00 (0) 'MS-DOS'\n+19C266 Extract Zip Spec      14 (20) '2.0'\n+19C267 Extract OS            00 (0) 'MS-DOS'\n+19C268 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C26A Compression Method    0000 (0) 'Stored'\n+19C26C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C270 CRC                   7C2CDC15 (2083314709)\n+19C274 Compressed Size       00000C7D (3197)\n+19C278 Uncompressed Size     00000C7D (3197)\n+19C27C Filename Length       0047 (71)\n+19C27E Extra Length          0009 (9)\n+19C280 Comment Length        0000 (0)\n+19C282 Disk Start            0000 (0)\n+19C284 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C286 Ext File Attributes   00000000 (0)\n+19C28A Local Header Offset   000D2E6B (863851)\n+19C28E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C28E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C2D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C2D7   Length              0005 (5)\n+19C2D9   Flags               01 (1) 'Modification'\n+19C2DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C2DE CENTRAL HEADER #249   02014B50 (33639248)\n+19C2E2 Created Zip Spec      14 (20) '2.0'\n+19C2E3 Created OS            00 (0) 'MS-DOS'\n+19C2E4 Extract Zip Spec      14 (20) '2.0'\n+19C2E5 Extract OS            00 (0) 'MS-DOS'\n+19C2E6 General Purpose Flag  0000 (0)\n+19C2E8 Compression Method    0000 (0) 'Stored'\n+19C2EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C2EE CRC                   00000000 (0)\n+19C2F2 Compressed Size       00000000 (0)\n+19C2F6 Uncompressed Size     00000000 (0)\n+19C2FA Filename Length       0031 (49)\n+19C2FC Extra Length          0009 (9)\n+19C2FE Comment Length        0000 (0)\n+19C300 Disk Start            0000 (0)\n+19C302 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C304 Ext File Attributes   00000000 (0)\n+19C308 Local Header Offset   000D3B66 (867174)\n+19C30C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C30C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C33D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C33F   Length              0005 (5)\n+19C341   Flags               01 (1) 'Modification'\n+19C342   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C346 CENTRAL HEADER #250   02014B50 (33639248)\n+19C34A Created Zip Spec      14 (20) '2.0'\n+19C34B Created OS            00 (0) 'MS-DOS'\n+19C34C Extract Zip Spec      14 (20) '2.0'\n+19C34D Extract OS            00 (0) 'MS-DOS'\n+19C34E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C350 Compression Method    0000 (0) 'Stored'\n+19C352 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C356 CRC                   C7D99F04 (3352928004)\n+19C35A Compressed Size       00000C02 (3074)\n+19C35E Uncompressed Size     00000C02 (3074)\n+19C362 Filename Length       0045 (69)\n+19C364 Extra Length          0009 (9)\n+19C366 Comment Length        0000 (0)\n+19C368 Disk Start            0000 (0)\n+19C36A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C36C Ext File Attributes   00000000 (0)\n+19C370 Local Header Offset   000D3BBE (867262)\n+19C374 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C374: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C3B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C3BB   Length              0005 (5)\n+19C3BD   Flags               01 (1) 'Modification'\n+19C3BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C3C2 CENTRAL HEADER #251   02014B50 (33639248)\n+19C3C6 Created Zip Spec      14 (20) '2.0'\n+19C3C7 Created OS            00 (0) 'MS-DOS'\n+19C3C8 Extract Zip Spec      14 (20) '2.0'\n+19C3C9 Extract OS            00 (0) 'MS-DOS'\n+19C3CA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C3CC Compression Method    0000 (0) 'Stored'\n+19C3CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C3D2 CRC                   B7E8049A (3085436058)\n+19C3D6 Compressed Size       00000CBE (3262)\n+19C3DA Uncompressed Size     00000CBE (3262)\n+19C3DE Filename Length       004D (77)\n+19C3E0 Extra Length          0009 (9)\n+19C3E2 Comment Length        0000 (0)\n+19C3E4 Disk Start            0000 (0)\n+19C3E6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C3E8 Ext File Attributes   00000000 (0)\n+19C3EC Local Header Offset   000D483C (870460)\n+19C3F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C3F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C43D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C43F   Length              0005 (5)\n+19C441   Flags               01 (1) 'Modification'\n+19C442   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C446 CENTRAL HEADER #252   02014B50 (33639248)\n+19C44A Created Zip Spec      14 (20) '2.0'\n+19C44B Created OS            00 (0) 'MS-DOS'\n+19C44C Extract Zip Spec      14 (20) '2.0'\n+19C44D Extract OS            00 (0) 'MS-DOS'\n+19C44E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C450 Compression Method    0000 (0) 'Stored'\n+19C452 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C456 CRC                   365FEBC7 (912255943)\n+19C45A Compressed Size       00000B87 (2951)\n+19C45E Uncompressed Size     00000B87 (2951)\n+19C462 Filename Length       003F (63)\n+19C464 Extra Length          0009 (9)\n+19C466 Comment Length        0000 (0)\n+19C468 Disk Start            0000 (0)\n+19C46A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C46C Ext File Attributes   00000000 (0)\n+19C470 Local Header Offset   000D557E (873854)\n+19C474 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C474: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C4B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C4B5   Length              0005 (5)\n+19C4B7   Flags               01 (1) 'Modification'\n+19C4B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C4BC CENTRAL HEADER #253   02014B50 (33639248)\n+19C4C0 Created Zip Spec      14 (20) '2.0'\n+19C4C1 Created OS            00 (0) 'MS-DOS'\n+19C4C2 Extract Zip Spec      14 (20) '2.0'\n+19C4C3 Extract OS            00 (0) 'MS-DOS'\n+19C4C4 General Purpose Flag  0000 (0)\n+19C4C6 Compression Method    0000 (0) 'Stored'\n+19C4C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C4CC CRC                   00000000 (0)\n+19C4D0 Compressed Size       00000000 (0)\n+19C4D4 Uncompressed Size     00000000 (0)\n+19C4D8 Filename Length       0031 (49)\n+19C4DA Extra Length          0009 (9)\n+19C4DC Comment Length        0000 (0)\n+19C4DE Disk Start            0000 (0)\n+19C4E0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C4E2 Ext File Attributes   00000000 (0)\n+19C4E6 Local Header Offset   000D617B (876923)\n+19C4EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C4EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C51B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C51D   Length              0005 (5)\n+19C51F   Flags               01 (1) 'Modification'\n+19C520   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C524 CENTRAL HEADER #254   02014B50 (33639248)\n+19C528 Created Zip Spec      14 (20) '2.0'\n+19C529 Created OS            00 (0) 'MS-DOS'\n+19C52A Extract Zip Spec      14 (20) '2.0'\n+19C52B Extract OS            00 (0) 'MS-DOS'\n+19C52C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C52E Compression Method    0000 (0) 'Stored'\n+19C530 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C534 CRC                   3EDDC0EF (1054720239)\n+19C538 Compressed Size       00000AA3 (2723)\n+19C53C Uncompressed Size     00000AA3 (2723)\n+19C540 Filename Length       0045 (69)\n+19C542 Extra Length          0009 (9)\n+19C544 Comment Length        0000 (0)\n+19C546 Disk Start            0000 (0)\n+19C548 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C54A Ext File Attributes   00000000 (0)\n+19C54E Local Header Offset   000D61D3 (877011)\n+19C552 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C552: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C597 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C599   Length              0005 (5)\n+19C59B   Flags               01 (1) 'Modification'\n+19C59C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C5A0 CENTRAL HEADER #255   02014B50 (33639248)\n+19C5A4 Created Zip Spec      14 (20) '2.0'\n+19C5A5 Created OS            00 (0) 'MS-DOS'\n+19C5A6 Extract Zip Spec      14 (20) '2.0'\n+19C5A7 Extract OS            00 (0) 'MS-DOS'\n+19C5A8 General Purpose Flag  0000 (0)\n+19C5AA Compression Method    0000 (0) 'Stored'\n+19C5AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C5B0 CRC                   00000000 (0)\n+19C5B4 Compressed Size       00000000 (0)\n+19C5B8 Uncompressed Size     00000000 (0)\n+19C5BC Filename Length       0033 (51)\n+19C5BE Extra Length          0009 (9)\n+19C5C0 Comment Length        0000 (0)\n+19C5C2 Disk Start            0000 (0)\n+19C5C4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C5C6 Ext File Attributes   00000000 (0)\n+19C5CA Local Header Offset   000D6CF2 (879858)\n+19C5CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C5CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C601 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C603   Length              0005 (5)\n+19C605   Flags               01 (1) 'Modification'\n+19C606   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C60A CENTRAL HEADER #256   02014B50 (33639248)\n+19C60E Created Zip Spec      14 (20) '2.0'\n+19C60F Created OS            00 (0) 'MS-DOS'\n+19C610 Extract Zip Spec      14 (20) '2.0'\n+19C611 Extract OS            00 (0) 'MS-DOS'\n+19C612 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C614 Compression Method    0000 (0) 'Stored'\n+19C616 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C61A CRC                   9B40567E (2604684926)\n+19C61E Compressed Size       00000BB0 (2992)\n+19C622 Uncompressed Size     00000BB0 (2992)\n+19C626 Filename Length       0049 (73)\n+19C628 Extra Length          0009 (9)\n+19C62A Comment Length        0000 (0)\n+19C62C Disk Start            0000 (0)\n+19C62E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C630 Ext File Attributes   00000000 (0)\n+19C634 Local Header Offset   000D6D4C (879948)\n+19C638 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C638: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C681 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C683   Length              0005 (5)\n+19C685   Flags               01 (1) 'Modification'\n+19C686   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C68A CENTRAL HEADER #257   02014B50 (33639248)\n+19C68E Created Zip Spec      14 (20) '2.0'\n+19C68F Created OS            00 (0) 'MS-DOS'\n+19C690 Extract Zip Spec      14 (20) '2.0'\n+19C691 Extract OS            00 (0) 'MS-DOS'\n+19C692 General Purpose Flag  0000 (0)\n+19C694 Compression Method    0000 (0) 'Stored'\n+19C696 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C69A CRC                   00000000 (0)\n+19C69E Compressed Size       00000000 (0)\n+19C6A2 Uncompressed Size     00000000 (0)\n+19C6A6 Filename Length       001E (30)\n+19C6A8 Extra Length          0009 (9)\n+19C6AA Comment Length        0000 (0)\n+19C6AC Disk Start            0000 (0)\n+19C6AE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C6B0 Ext File Attributes   00000000 (0)\n+19C6B4 Local Header Offset   000D797C (883068)\n+19C6B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C6B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C6D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C6D8   Length              0005 (5)\n+19C6DA   Flags               01 (1) 'Modification'\n+19C6DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C6DF CENTRAL HEADER #258   02014B50 (33639248)\n+19C6E3 Created Zip Spec      14 (20) '2.0'\n+19C6E4 Created OS            00 (0) 'MS-DOS'\n+19C6E5 Extract Zip Spec      14 (20) '2.0'\n+19C6E6 Extract OS            00 (0) 'MS-DOS'\n+19C6E7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C6E9 Compression Method    0000 (0) 'Stored'\n+19C6EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C6EF CRC                   6BA20F13 (1805782803)\n+19C6F3 Compressed Size       00007CE7 (31975)\n+19C6F7 Uncompressed Size     00007CE7 (31975)\n+19C6FB Filename Length       0033 (51)\n+19C6FD Extra Length          0009 (9)\n+19C6FF Comment Length        0000 (0)\n+19C701 Disk Start            0000 (0)\n+19C703 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C705 Ext File Attributes   00000000 (0)\n+19C709 Local Header Offset   000D79C1 (883137)\n+19C70D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C70D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C740 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C742   Length              0005 (5)\n+19C744   Flags               01 (1) 'Modification'\n+19C745   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C749 CENTRAL HEADER #259   02014B50 (33639248)\n+19C74D Created Zip Spec      14 (20) '2.0'\n+19C74E Created OS            00 (0) 'MS-DOS'\n+19C74F Extract Zip Spec      14 (20) '2.0'\n+19C750 Extract OS            00 (0) 'MS-DOS'\n+19C751 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C753 Compression Method    0000 (0) 'Stored'\n+19C755 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C759 CRC                   896B8386 (2305524614)\n+19C75D Compressed Size       0000069C (1692)\n+19C761 Uncompressed Size     0000069C (1692)\n+19C765 Filename Length       002A (42)\n+19C767 Extra Length          0009 (9)\n+19C769 Comment Length        0000 (0)\n+19C76B Disk Start            0000 (0)\n+19C76D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C76F Ext File Attributes   00000000 (0)\n+19C773 Local Header Offset   000DF712 (915218)\n+19C777 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C777: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C7A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C7A3   Length              0005 (5)\n+19C7A5   Flags               01 (1) 'Modification'\n+19C7A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C7AA CENTRAL HEADER #260   02014B50 (33639248)\n+19C7AE Created Zip Spec      14 (20) '2.0'\n+19C7AF Created OS            00 (0) 'MS-DOS'\n+19C7B0 Extract Zip Spec      14 (20) '2.0'\n+19C7B1 Extract OS            00 (0) 'MS-DOS'\n+19C7B2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C7B4 Compression Method    0000 (0) 'Stored'\n+19C7B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C7BA CRC                   2D8D7FE9 (764248041)\n+19C7BE Compressed Size       00000769 (1897)\n+19C7C2 Uncompressed Size     00000769 (1897)\n+19C7C6 Filename Length       0028 (40)\n+19C7C8 Extra Length          0009 (9)\n+19C7CA Comment Length        0000 (0)\n+19C7CC Disk Start            0000 (0)\n+19C7CE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C7D0 Ext File Attributes   00000000 (0)\n+19C7D4 Local Header Offset   000DFE0F (917007)\n+19C7D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C7D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C800 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C802   Length              0005 (5)\n+19C804   Flags               01 (1) 'Modification'\n+19C805   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C809 CENTRAL HEADER #261   02014B50 (33639248)\n+19C80D Created Zip Spec      14 (20) '2.0'\n+19C80E Created OS            00 (0) 'MS-DOS'\n+19C80F Extract Zip Spec      14 (20) '2.0'\n+19C810 Extract OS            00 (0) 'MS-DOS'\n+19C811 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C813 Compression Method    0000 (0) 'Stored'\n+19C815 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C819 CRC                   E9761FB8 (3916832696)\n+19C81D Compressed Size       00000497 (1175)\n+19C821 Uncompressed Size     00000497 (1175)\n+19C825 Filename Length       002C (44)\n+19C827 Extra Length          0009 (9)\n+19C829 Comment Length        0000 (0)\n+19C82B Disk Start            0000 (0)\n+19C82D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C82F Ext File Attributes   00000000 (0)\n+19C833 Local Header Offset   000E05D7 (918999)\n+19C837 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C837: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C863 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C865   Length              0005 (5)\n+19C867   Flags               01 (1) 'Modification'\n+19C868   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C86C CENTRAL HEADER #262   02014B50 (33639248)\n+19C870 Created Zip Spec      14 (20) '2.0'\n+19C871 Created OS            00 (0) 'MS-DOS'\n+19C872 Extract Zip Spec      14 (20) '2.0'\n+19C873 Extract OS            00 (0) 'MS-DOS'\n+19C874 General Purpose Flag  0000 (0)\n+19C876 Compression Method    0000 (0) 'Stored'\n+19C878 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C87C CRC                   00000000 (0)\n+19C880 Compressed Size       00000000 (0)\n+19C884 Uncompressed Size     00000000 (0)\n+19C888 Filename Length       001E (30)\n+19C88A Extra Length          0009 (9)\n+19C88C Comment Length        0000 (0)\n+19C88E Disk Start            0000 (0)\n+19C890 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C892 Ext File Attributes   00000000 (0)\n+19C896 Local Header Offset   000E0AD1 (920273)\n+19C89A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C89A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C8B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C8BA   Length              0005 (5)\n+19C8BC   Flags               01 (1) 'Modification'\n+19C8BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C8C1 CENTRAL HEADER #263   02014B50 (33639248)\n+19C8C5 Created Zip Spec      14 (20) '2.0'\n+19C8C6 Created OS            00 (0) 'MS-DOS'\n+19C8C7 Extract Zip Spec      14 (20) '2.0'\n+19C8C8 Extract OS            00 (0) 'MS-DOS'\n+19C8C9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C8CB Compression Method    0000 (0) 'Stored'\n+19C8CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C8D1 CRC                   7F03CBF8 (2130955256)\n+19C8D5 Compressed Size       000054E7 (21735)\n+19C8D9 Uncompressed Size     000054E7 (21735)\n+19C8DD Filename Length       0032 (50)\n+19C8DF Extra Length          0009 (9)\n+19C8E1 Comment Length        0000 (0)\n+19C8E3 Disk Start            0000 (0)\n+19C8E5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C8E7 Ext File Attributes   00000000 (0)\n+19C8EB Local Header Offset   000E0B16 (920342)\n+19C8EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C8EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C921 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C923   Length              0005 (5)\n+19C925   Flags               01 (1) 'Modification'\n+19C926   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C92A CENTRAL HEADER #264   02014B50 (33639248)\n+19C92E Created Zip Spec      14 (20) '2.0'\n+19C92F Created OS            00 (0) 'MS-DOS'\n+19C930 Extract Zip Spec      14 (20) '2.0'\n+19C931 Extract OS            00 (0) 'MS-DOS'\n+19C932 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C934 Compression Method    0000 (0) 'Stored'\n+19C936 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C93A CRC                   255BC4C2 (626771138)\n+19C93E Compressed Size       00000985 (2437)\n+19C942 Uncompressed Size     00000985 (2437)\n+19C946 Filename Length       002D (45)\n+19C948 Extra Length          0009 (9)\n+19C94A Comment Length        0000 (0)\n+19C94C Disk Start            0000 (0)\n+19C94E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C950 Ext File Attributes   00000000 (0)\n+19C954 Local Header Offset   000E6066 (942182)\n+19C958 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C958: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C985 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C987   Length              0005 (5)\n+19C989   Flags               01 (1) 'Modification'\n+19C98A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C98E CENTRAL HEADER #265   02014B50 (33639248)\n+19C992 Created Zip Spec      14 (20) '2.0'\n+19C993 Created OS            00 (0) 'MS-DOS'\n+19C994 Extract Zip Spec      14 (20) '2.0'\n+19C995 Extract OS            00 (0) 'MS-DOS'\n+19C996 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C998 Compression Method    0000 (0) 'Stored'\n+19C99A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C99E CRC                   40170699 (1075250841)\n+19C9A2 Compressed Size       0000059E (1438)\n+19C9A6 Uncompressed Size     0000059E (1438)\n+19C9AA Filename Length       0029 (41)\n+19C9AC Extra Length          0009 (9)\n+19C9AE Comment Length        0000 (0)\n+19C9B0 Disk Start            0000 (0)\n+19C9B2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19C9B4 Ext File Attributes   00000000 (0)\n+19C9B8 Local Header Offset   000E6A4F (944719)\n+19C9BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19C9BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19C9E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19C9E7   Length              0005 (5)\n+19C9E9   Flags               01 (1) 'Modification'\n+19C9EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19C9EE CENTRAL HEADER #266   02014B50 (33639248)\n+19C9F2 Created Zip Spec      14 (20) '2.0'\n+19C9F3 Created OS            00 (0) 'MS-DOS'\n+19C9F4 Extract Zip Spec      14 (20) '2.0'\n+19C9F5 Extract OS            00 (0) 'MS-DOS'\n+19C9F6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19C9F8 Compression Method    0000 (0) 'Stored'\n+19C9FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19C9FE CRC                   A604EAF8 (2785340152)\n+19CA02 Compressed Size       00001249 (4681)\n+19CA06 Uncompressed Size     00001249 (4681)\n+19CA0A Filename Length       0038 (56)\n+19CA0C Extra Length          0009 (9)\n+19CA0E Comment Length        0000 (0)\n+19CA10 Disk Start            0000 (0)\n+19CA12 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CA14 Ext File Attributes   00000000 (0)\n+19CA18 Local Header Offset   000E704D (946253)\n+19CA1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CA1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CA54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CA56   Length              0005 (5)\n+19CA58   Flags               01 (1) 'Modification'\n+19CA59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CA5D CENTRAL HEADER #267   02014B50 (33639248)\n+19CA61 Created Zip Spec      14 (20) '2.0'\n+19CA62 Created OS            00 (0) 'MS-DOS'\n+19CA63 Extract Zip Spec      14 (20) '2.0'\n+19CA64 Extract OS            00 (0) 'MS-DOS'\n+19CA65 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CA67 Compression Method    0000 (0) 'Stored'\n+19CA69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CA6D CRC                   D7EB77B9 (3622533049)\n+19CA71 Compressed Size       0000137A (4986)\n+19CA75 Uncompressed Size     0000137A (4986)\n+19CA79 Filename Length       002C (44)\n+19CA7B Extra Length          0009 (9)\n+19CA7D Comment Length        0000 (0)\n+19CA7F Disk Start            0000 (0)\n+19CA81 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CA83 Ext File Attributes   00000000 (0)\n+19CA87 Local Header Offset   000E8305 (951045)\n+19CA8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CA8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CAB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CAB9   Length              0005 (5)\n+19CABB   Flags               01 (1) 'Modification'\n+19CABC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CAC0 CENTRAL HEADER #268   02014B50 (33639248)\n+19CAC4 Created Zip Spec      14 (20) '2.0'\n+19CAC5 Created OS            00 (0) 'MS-DOS'\n+19CAC6 Extract Zip Spec      14 (20) '2.0'\n+19CAC7 Extract OS            00 (0) 'MS-DOS'\n+19CAC8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CACA Compression Method    0000 (0) 'Stored'\n+19CACC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CAD0 CRC                   7518C2B8 (1964556984)\n+19CAD4 Compressed Size       00000535 (1333)\n+19CAD8 Uncompressed Size     00000535 (1333)\n+19CADC Filename Length       0039 (57)\n+19CADE Extra Length          0009 (9)\n+19CAE0 Comment Length        0000 (0)\n+19CAE2 Disk Start            0000 (0)\n+19CAE4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CAE6 Ext File Attributes   00000000 (0)\n+19CAEA Local Header Offset   000E96E2 (956130)\n+19CAEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CAEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CB27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CB29   Length              0005 (5)\n+19CB2B   Flags               01 (1) 'Modification'\n+19CB2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CB30 CENTRAL HEADER #269   02014B50 (33639248)\n+19CB34 Created Zip Spec      14 (20) '2.0'\n+19CB35 Created OS            00 (0) 'MS-DOS'\n+19CB36 Extract Zip Spec      14 (20) '2.0'\n+19CB37 Extract OS            00 (0) 'MS-DOS'\n+19CB38 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CB3A Compression Method    0000 (0) 'Stored'\n+19CB3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CB40 CRC                   FC613C2C (4234230828)\n+19CB44 Compressed Size       00001651 (5713)\n+19CB48 Uncompressed Size     00001651 (5713)\n+19CB4C Filename Length       002E (46)\n+19CB4E Extra Length          0009 (9)\n+19CB50 Comment Length        0000 (0)\n+19CB52 Disk Start            0000 (0)\n+19CB54 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CB56 Ext File Attributes   00000000 (0)\n+19CB5A Local Header Offset   000E9C87 (957575)\n+19CB5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CB5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CB8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CB8E   Length              0005 (5)\n+19CB90   Flags               01 (1) 'Modification'\n+19CB91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CB95 CENTRAL HEADER #270   02014B50 (33639248)\n+19CB99 Created Zip Spec      14 (20) '2.0'\n+19CB9A Created OS            00 (0) 'MS-DOS'\n+19CB9B Extract Zip Spec      14 (20) '2.0'\n+19CB9C Extract OS            00 (0) 'MS-DOS'\n+19CB9D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CB9F Compression Method    0000 (0) 'Stored'\n+19CBA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CBA5 CRC                   75C25786 (1975670662)\n+19CBA9 Compressed Size       00004813 (18451)\n+19CBAD Uncompressed Size     00004813 (18451)\n+19CBB1 Filename Length       002D (45)\n+19CBB3 Extra Length          0009 (9)\n+19CBB5 Comment Length        0000 (0)\n+19CBB7 Disk Start            0000 (0)\n+19CBB9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CBBB Ext File Attributes   00000000 (0)\n+19CBBF Local Header Offset   000EB33D (963389)\n+19CBC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CBC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CBF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CBF2   Length              0005 (5)\n+19CBF4   Flags               01 (1) 'Modification'\n+19CBF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CBF9 CENTRAL HEADER #271   02014B50 (33639248)\n+19CBFD Created Zip Spec      14 (20) '2.0'\n+19CBFE Created OS            00 (0) 'MS-DOS'\n+19CBFF Extract Zip Spec      14 (20) '2.0'\n+19CC00 Extract OS            00 (0) 'MS-DOS'\n+19CC01 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CC03 Compression Method    0000 (0) 'Stored'\n+19CC05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CC09 CRC                   49173B6A (1226259306)\n+19CC0D Compressed Size       00002D62 (11618)\n+19CC11 Uncompressed Size     00002D62 (11618)\n+19CC15 Filename Length       0032 (50)\n+19CC17 Extra Length          0009 (9)\n+19CC19 Comment Length        0000 (0)\n+19CC1B Disk Start            0000 (0)\n+19CC1D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CC1F Ext File Attributes   00000000 (0)\n+19CC23 Local Header Offset   000EFBB4 (981940)\n+19CC27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CC27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CC59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CC5B   Length              0005 (5)\n+19CC5D   Flags               01 (1) 'Modification'\n+19CC5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CC62 CENTRAL HEADER #272   02014B50 (33639248)\n+19CC66 Created Zip Spec      14 (20) '2.0'\n+19CC67 Created OS            00 (0) 'MS-DOS'\n+19CC68 Extract Zip Spec      14 (20) '2.0'\n+19CC69 Extract OS            00 (0) 'MS-DOS'\n+19CC6A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CC6C Compression Method    0000 (0) 'Stored'\n+19CC6E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CC72 CRC                   8D8AC97C (2374683004)\n+19CC76 Compressed Size       00002443 (9283)\n+19CC7A Uncompressed Size     00002443 (9283)\n+19CC7E Filename Length       0036 (54)\n+19CC80 Extra Length          0009 (9)\n+19CC82 Comment Length        0000 (0)\n+19CC84 Disk Start            0000 (0)\n+19CC86 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CC88 Ext File Attributes   00000000 (0)\n+19CC8C Local Header Offset   000F297F (993663)\n+19CC90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CC90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CCC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CCC8   Length              0005 (5)\n+19CCCA   Flags               01 (1) 'Modification'\n+19CCCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CCCF CENTRAL HEADER #273   02014B50 (33639248)\n+19CCD3 Created Zip Spec      14 (20) '2.0'\n+19CCD4 Created OS            00 (0) 'MS-DOS'\n+19CCD5 Extract Zip Spec      14 (20) '2.0'\n+19CCD6 Extract OS            00 (0) 'MS-DOS'\n+19CCD7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CCD9 Compression Method    0000 (0) 'Stored'\n+19CCDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CCDF CRC                   0EFD7C48 (251493448)\n+19CCE3 Compressed Size       000011C9 (4553)\n+19CCE7 Uncompressed Size     000011C9 (4553)\n+19CCEB Filename Length       0034 (52)\n+19CCED Extra Length          0009 (9)\n+19CCEF Comment Length        0000 (0)\n+19CCF1 Disk Start            0000 (0)\n+19CCF3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CCF5 Ext File Attributes   00000000 (0)\n+19CCF9 Local Header Offset   000F4E2F (1003055)\n+19CCFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CCFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CD31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CD33   Length              0005 (5)\n+19CD35   Flags               01 (1) 'Modification'\n+19CD36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CD3A CENTRAL HEADER #274   02014B50 (33639248)\n+19CD3E Created Zip Spec      14 (20) '2.0'\n+19CD3F Created OS            00 (0) 'MS-DOS'\n+19CD40 Extract Zip Spec      14 (20) '2.0'\n+19CD41 Extract OS            00 (0) 'MS-DOS'\n+19CD42 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CD44 Compression Method    0000 (0) 'Stored'\n+19CD46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CD4A CRC                   8CFD4A70 (2365409904)\n+19CD4E Compressed Size       00002FB5 (12213)\n+19CD52 Uncompressed Size     00002FB5 (12213)\n+19CD56 Filename Length       002E (46)\n+19CD58 Extra Length          0009 (9)\n+19CD5A Comment Length        0000 (0)\n+19CD5C Disk Start            0000 (0)\n+19CD5E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CD60 Ext File Attributes   00000000 (0)\n+19CD64 Local Header Offset   000F6063 (1007715)\n+19CD68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CD68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CD96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CD98   Length              0005 (5)\n+19CD9A   Flags               01 (1) 'Modification'\n+19CD9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CD9F CENTRAL HEADER #275   02014B50 (33639248)\n+19CDA3 Created Zip Spec      14 (20) '2.0'\n+19CDA4 Created OS            00 (0) 'MS-DOS'\n+19CDA5 Extract Zip Spec      14 (20) '2.0'\n+19CDA6 Extract OS            00 (0) 'MS-DOS'\n+19CDA7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CDA9 Compression Method    0000 (0) 'Stored'\n+19CDAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CDAF CRC                   F982D49E (4186100894)\n+19CDB3 Compressed Size       000008F6 (2294)\n+19CDB7 Uncompressed Size     000008F6 (2294)\n+19CDBB Filename Length       002E (46)\n+19CDBD Extra Length          0009 (9)\n+19CDBF Comment Length        0000 (0)\n+19CDC1 Disk Start            0000 (0)\n+19CDC3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CDC5 Ext File Attributes   00000000 (0)\n+19CDC9 Local Header Offset   000F907D (1020029)\n+19CDCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CDCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CDFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CDFD   Length              0005 (5)\n+19CDFF   Flags               01 (1) 'Modification'\n+19CE00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CE04 CENTRAL HEADER #276   02014B50 (33639248)\n+19CE08 Created Zip Spec      14 (20) '2.0'\n+19CE09 Created OS            00 (0) 'MS-DOS'\n+19CE0A Extract Zip Spec      14 (20) '2.0'\n+19CE0B Extract OS            00 (0) 'MS-DOS'\n+19CE0C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CE0E Compression Method    0000 (0) 'Stored'\n+19CE10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CE14 CRC                   831A7179 (2199548281)\n+19CE18 Compressed Size       0000080F (2063)\n+19CE1C Uncompressed Size     0000080F (2063)\n+19CE20 Filename Length       0030 (48)\n+19CE22 Extra Length          0009 (9)\n+19CE24 Comment Length        0000 (0)\n+19CE26 Disk Start            0000 (0)\n+19CE28 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CE2A Ext File Attributes   00000000 (0)\n+19CE2E Local Header Offset   000F99D8 (1022424)\n+19CE32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CE32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CE62 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CE64   Length              0005 (5)\n+19CE66   Flags               01 (1) 'Modification'\n+19CE67   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CE6B CENTRAL HEADER #277   02014B50 (33639248)\n+19CE6F Created Zip Spec      14 (20) '2.0'\n+19CE70 Created OS            00 (0) 'MS-DOS'\n+19CE71 Extract Zip Spec      14 (20) '2.0'\n+19CE72 Extract OS            00 (0) 'MS-DOS'\n+19CE73 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CE75 Compression Method    0000 (0) 'Stored'\n+19CE77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CE7B CRC                   239B6511 (597386513)\n+19CE7F Compressed Size       000014C9 (5321)\n+19CE83 Uncompressed Size     000014C9 (5321)\n+19CE87 Filename Length       002F (47)\n+19CE89 Extra Length          0009 (9)\n+19CE8B Comment Length        0000 (0)\n+19CE8D Disk Start            0000 (0)\n+19CE8F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CE91 Ext File Attributes   00000000 (0)\n+19CE95 Local Header Offset   000FA24E (1024590)\n+19CE99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CE99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CEC8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CECA   Length              0005 (5)\n+19CECC   Flags               01 (1) 'Modification'\n+19CECD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CED1 CENTRAL HEADER #278   02014B50 (33639248)\n+19CED5 Created Zip Spec      14 (20) '2.0'\n+19CED6 Created OS            00 (0) 'MS-DOS'\n+19CED7 Extract Zip Spec      14 (20) '2.0'\n+19CED8 Extract OS            00 (0) 'MS-DOS'\n+19CED9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CEDB Compression Method    0000 (0) 'Stored'\n+19CEDD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CEE1 CRC                   CB16D394 (3407270804)\n+19CEE5 Compressed Size       000013CF (5071)\n+19CEE9 Uncompressed Size     000013CF (5071)\n+19CEED Filename Length       002D (45)\n+19CEEF Extra Length          0009 (9)\n+19CEF1 Comment Length        0000 (0)\n+19CEF3 Disk Start            0000 (0)\n+19CEF5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CEF7 Ext File Attributes   00000000 (0)\n+19CEFB Local Header Offset   000FB77D (1030013)\n+19CEFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CEFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CF2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CF2E   Length              0005 (5)\n+19CF30   Flags               01 (1) 'Modification'\n+19CF31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CF35 CENTRAL HEADER #279   02014B50 (33639248)\n+19CF39 Created Zip Spec      14 (20) '2.0'\n+19CF3A Created OS            00 (0) 'MS-DOS'\n+19CF3B Extract Zip Spec      14 (20) '2.0'\n+19CF3C Extract OS            00 (0) 'MS-DOS'\n+19CF3D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CF3F Compression Method    0000 (0) 'Stored'\n+19CF41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CF45 CRC                   4E3FC833 (1312802867)\n+19CF49 Compressed Size       00000443 (1091)\n+19CF4D Uncompressed Size     00000443 (1091)\n+19CF51 Filename Length       0029 (41)\n+19CF53 Extra Length          0009 (9)\n+19CF55 Comment Length        0000 (0)\n+19CF57 Disk Start            0000 (0)\n+19CF59 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CF5B Ext File Attributes   00000000 (0)\n+19CF5F Local Header Offset   000FCBB0 (1035184)\n+19CF63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CF63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CF8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CF8E   Length              0005 (5)\n+19CF90   Flags               01 (1) 'Modification'\n+19CF91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CF95 CENTRAL HEADER #280   02014B50 (33639248)\n+19CF99 Created Zip Spec      14 (20) '2.0'\n+19CF9A Created OS            00 (0) 'MS-DOS'\n+19CF9B Extract Zip Spec      14 (20) '2.0'\n+19CF9C Extract OS            00 (0) 'MS-DOS'\n+19CF9D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19CF9F Compression Method    0000 (0) 'Stored'\n+19CFA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19CFA5 CRC                   7A9C058A (2057045386)\n+19CFA9 Compressed Size       00002117 (8471)\n+19CFAD Uncompressed Size     00002117 (8471)\n+19CFB1 Filename Length       002A (42)\n+19CFB3 Extra Length          0009 (9)\n+19CFB5 Comment Length        0000 (0)\n+19CFB7 Disk Start            0000 (0)\n+19CFB9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19CFBB Ext File Attributes   00000000 (0)\n+19CFBF Local Header Offset   000FD053 (1036371)\n+19CFC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19CFC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19CFED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19CFEF   Length              0005 (5)\n+19CFF1   Flags               01 (1) 'Modification'\n+19CFF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19CFF6 CENTRAL HEADER #281   02014B50 (33639248)\n+19CFFA Created Zip Spec      14 (20) '2.0'\n+19CFFB Created OS            00 (0) 'MS-DOS'\n+19CFFC Extract Zip Spec      14 (20) '2.0'\n+19CFFD Extract OS            00 (0) 'MS-DOS'\n+19CFFE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D000 Compression Method    0000 (0) 'Stored'\n+19D002 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D006 CRC                   A4F19F22 (2767298338)\n+19D00A Compressed Size       0000104C (4172)\n+19D00E Uncompressed Size     0000104C (4172)\n+19D012 Filename Length       002A (42)\n+19D014 Extra Length          0009 (9)\n+19D016 Comment Length        0000 (0)\n+19D018 Disk Start            0000 (0)\n+19D01A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D01C Ext File Attributes   00000000 (0)\n+19D020 Local Header Offset   000FF1CB (1044939)\n+19D024 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D024: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D04E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D050   Length              0005 (5)\n+19D052   Flags               01 (1) 'Modification'\n+19D053   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D057 CENTRAL HEADER #282   02014B50 (33639248)\n+19D05B Created Zip Spec      14 (20) '2.0'\n+19D05C Created OS            00 (0) 'MS-DOS'\n+19D05D Extract Zip Spec      14 (20) '2.0'\n+19D05E Extract OS            00 (0) 'MS-DOS'\n+19D05F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D061 Compression Method    0000 (0) 'Stored'\n+19D063 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D067 CRC                   CBBE6E80 (3418254976)\n+19D06B Compressed Size       00002283 (8835)\n+19D06F Uncompressed Size     00002283 (8835)\n+19D073 Filename Length       002B (43)\n+19D075 Extra Length          0009 (9)\n+19D077 Comment Length        0000 (0)\n+19D079 Disk Start            0000 (0)\n+19D07B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D07D Ext File Attributes   00000000 (0)\n+19D081 Local Header Offset   00100278 (1049208)\n+19D085 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D085: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D0B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D0B2   Length              0005 (5)\n+19D0B4   Flags               01 (1) 'Modification'\n+19D0B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D0B9 CENTRAL HEADER #283   02014B50 (33639248)\n+19D0BD Created Zip Spec      14 (20) '2.0'\n+19D0BE Created OS            00 (0) 'MS-DOS'\n+19D0BF Extract Zip Spec      14 (20) '2.0'\n+19D0C0 Extract OS            00 (0) 'MS-DOS'\n+19D0C1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D0C3 Compression Method    0000 (0) 'Stored'\n+19D0C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D0C9 CRC                   139F375C (329201500)\n+19D0CD Compressed Size       00000BC2 (3010)\n+19D0D1 Uncompressed Size     00000BC2 (3010)\n+19D0D5 Filename Length       002B (43)\n+19D0D7 Extra Length          0009 (9)\n+19D0D9 Comment Length        0000 (0)\n+19D0DB Disk Start            0000 (0)\n+19D0DD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D0DF Ext File Attributes   00000000 (0)\n+19D0E3 Local Header Offset   0010255D (1058141)\n+19D0E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D0E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D112 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D114   Length              0005 (5)\n+19D116   Flags               01 (1) 'Modification'\n+19D117   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D11B CENTRAL HEADER #284   02014B50 (33639248)\n+19D11F Created Zip Spec      14 (20) '2.0'\n+19D120 Created OS            00 (0) 'MS-DOS'\n+19D121 Extract Zip Spec      14 (20) '2.0'\n+19D122 Extract OS            00 (0) 'MS-DOS'\n+19D123 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D125 Compression Method    0000 (0) 'Stored'\n+19D127 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D12B CRC                   C39767CB (3281479627)\n+19D12F Compressed Size       00000DAA (3498)\n+19D133 Uncompressed Size     00000DAA (3498)\n+19D137 Filename Length       0026 (38)\n+19D139 Extra Length          0009 (9)\n+19D13B Comment Length        0000 (0)\n+19D13D Disk Start            0000 (0)\n+19D13F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D141 Ext File Attributes   00000000 (0)\n+19D145 Local Header Offset   00103181 (1061249)\n+19D149 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D149: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D16F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D171   Length              0005 (5)\n+19D173   Flags               01 (1) 'Modification'\n+19D174   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D178 CENTRAL HEADER #285   02014B50 (33639248)\n+19D17C Created Zip Spec      14 (20) '2.0'\n+19D17D Created OS            00 (0) 'MS-DOS'\n+19D17E Extract Zip Spec      14 (20) '2.0'\n+19D17F Extract OS            00 (0) 'MS-DOS'\n+19D180 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D182 Compression Method    0000 (0) 'Stored'\n+19D184 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D188 CRC                   0C719C80 (208772224)\n+19D18C Compressed Size       000010C1 (4289)\n+19D190 Uncompressed Size     000010C1 (4289)\n+19D194 Filename Length       002C (44)\n+19D196 Extra Length          0009 (9)\n+19D198 Comment Length        0000 (0)\n+19D19A Disk Start            0000 (0)\n+19D19C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D19E Ext File Attributes   00000000 (0)\n+19D1A2 Local Header Offset   00103F88 (1064840)\n+19D1A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D1A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D1D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D1D4   Length              0005 (5)\n+19D1D6   Flags               01 (1) 'Modification'\n+19D1D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D1DB CENTRAL HEADER #286   02014B50 (33639248)\n+19D1DF Created Zip Spec      14 (20) '2.0'\n+19D1E0 Created OS            00 (0) 'MS-DOS'\n+19D1E1 Extract Zip Spec      14 (20) '2.0'\n+19D1E2 Extract OS            00 (0) 'MS-DOS'\n+19D1E3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D1E5 Compression Method    0000 (0) 'Stored'\n+19D1E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D1EB CRC                   4A73FA6D (1249114733)\n+19D1EF Compressed Size       000010A2 (4258)\n+19D1F3 Uncompressed Size     000010A2 (4258)\n+19D1F7 Filename Length       002A (42)\n+19D1F9 Extra Length          0009 (9)\n+19D1FB Comment Length        0000 (0)\n+19D1FD Disk Start            0000 (0)\n+19D1FF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D201 Ext File Attributes   00000000 (0)\n+19D205 Local Header Offset   001050AC (1069228)\n+19D209 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D209: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D233 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D235   Length              0005 (5)\n+19D237   Flags               01 (1) 'Modification'\n+19D238   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D23C CENTRAL HEADER #287   02014B50 (33639248)\n+19D240 Created Zip Spec      14 (20) '2.0'\n+19D241 Created OS            00 (0) 'MS-DOS'\n+19D242 Extract Zip Spec      14 (20) '2.0'\n+19D243 Extract OS            00 (0) 'MS-DOS'\n+19D244 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D246 Compression Method    0000 (0) 'Stored'\n+19D248 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D24C CRC                   FE0FBB73 (4262443891)\n+19D250 Compressed Size       0000099D (2461)\n+19D254 Uncompressed Size     0000099D (2461)\n+19D258 Filename Length       002E (46)\n+19D25A Extra Length          0009 (9)\n+19D25C Comment Length        0000 (0)\n+19D25E Disk Start            0000 (0)\n+19D260 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D262 Ext File Attributes   00000000 (0)\n+19D266 Local Header Offset   001061AF (1073583)\n+19D26A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D26A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D298 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D29A   Length              0005 (5)\n+19D29C   Flags               01 (1) 'Modification'\n+19D29D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D2A1 CENTRAL HEADER #288   02014B50 (33639248)\n+19D2A5 Created Zip Spec      14 (20) '2.0'\n+19D2A6 Created OS            00 (0) 'MS-DOS'\n+19D2A7 Extract Zip Spec      14 (20) '2.0'\n+19D2A8 Extract OS            00 (0) 'MS-DOS'\n+19D2A9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D2AB Compression Method    0000 (0) 'Stored'\n+19D2AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D2B1 CRC                   F18EE811 (4052674577)\n+19D2B5 Compressed Size       00000980 (2432)\n+19D2B9 Uncompressed Size     00000980 (2432)\n+19D2BD Filename Length       0033 (51)\n+19D2BF Extra Length          0009 (9)\n+19D2C1 Comment Length        0000 (0)\n+19D2C3 Disk Start            0000 (0)\n+19D2C5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D2C7 Ext File Attributes   00000000 (0)\n+19D2CB Local Header Offset   00106BB1 (1076145)\n+19D2CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D2CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D302 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D304   Length              0005 (5)\n+19D306   Flags               01 (1) 'Modification'\n+19D307   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D30B CENTRAL HEADER #289   02014B50 (33639248)\n+19D30F Created Zip Spec      14 (20) '2.0'\n+19D310 Created OS            00 (0) 'MS-DOS'\n+19D311 Extract Zip Spec      14 (20) '2.0'\n+19D312 Extract OS            00 (0) 'MS-DOS'\n+19D313 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D315 Compression Method    0000 (0) 'Stored'\n+19D317 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D31B CRC                   3744AF68 (927248232)\n+19D31F Compressed Size       00003B50 (15184)\n+19D323 Uncompressed Size     00003B50 (15184)\n+19D327 Filename Length       002E (46)\n+19D329 Extra Length          0009 (9)\n+19D32B Comment Length        0000 (0)\n+19D32D Disk Start            0000 (0)\n+19D32F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D331 Ext File Attributes   00000000 (0)\n+19D335 Local Header Offset   0010759B (1078683)\n+19D339 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D339: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D367 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D369   Length              0005 (5)\n+19D36B   Flags               01 (1) 'Modification'\n+19D36C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D370 CENTRAL HEADER #290   02014B50 (33639248)\n+19D374 Created Zip Spec      14 (20) '2.0'\n+19D375 Created OS            00 (0) 'MS-DOS'\n+19D376 Extract Zip Spec      14 (20) '2.0'\n+19D377 Extract OS            00 (0) 'MS-DOS'\n+19D378 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D37A Compression Method    0000 (0) 'Stored'\n+19D37C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D380 CRC                   A4EA9AD2 (2766838482)\n+19D384 Compressed Size       0000085B (2139)\n+19D388 Uncompressed Size     0000085B (2139)\n+19D38C Filename Length       0035 (53)\n+19D38E Extra Length          0009 (9)\n+19D390 Comment Length        0000 (0)\n+19D392 Disk Start            0000 (0)\n+19D394 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D396 Ext File Attributes   00000000 (0)\n+19D39A Local Header Offset   0010B150 (1093968)\n+19D39E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D39E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D3D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D3D5   Length              0005 (5)\n+19D3D7   Flags               01 (1) 'Modification'\n+19D3D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D3DC CENTRAL HEADER #291   02014B50 (33639248)\n+19D3E0 Created Zip Spec      14 (20) '2.0'\n+19D3E1 Created OS            00 (0) 'MS-DOS'\n+19D3E2 Extract Zip Spec      14 (20) '2.0'\n+19D3E3 Extract OS            00 (0) 'MS-DOS'\n+19D3E4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D3E6 Compression Method    0000 (0) 'Stored'\n+19D3E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D3EC CRC                   90514D51 (2421247313)\n+19D3F0 Compressed Size       00005DC7 (24007)\n+19D3F4 Uncompressed Size     00005DC7 (24007)\n+19D3F8 Filename Length       002B (43)\n+19D3FA Extra Length          0009 (9)\n+19D3FC Comment Length        0000 (0)\n+19D3FE Disk Start            0000 (0)\n+19D400 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D402 Ext File Attributes   00000000 (0)\n+19D406 Local Header Offset   0010BA17 (1096215)\n+19D40A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D40A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D435 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D437   Length              0005 (5)\n+19D439   Flags               01 (1) 'Modification'\n+19D43A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D43E CENTRAL HEADER #292   02014B50 (33639248)\n+19D442 Created Zip Spec      14 (20) '2.0'\n+19D443 Created OS            00 (0) 'MS-DOS'\n+19D444 Extract Zip Spec      14 (20) '2.0'\n+19D445 Extract OS            00 (0) 'MS-DOS'\n+19D446 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D448 Compression Method    0000 (0) 'Stored'\n+19D44A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D44E CRC                   3422DF4F (874700623)\n+19D452 Compressed Size       0000086A (2154)\n+19D456 Uncompressed Size     0000086A (2154)\n+19D45A Filename Length       0027 (39)\n+19D45C Extra Length          0009 (9)\n+19D45E Comment Length        0000 (0)\n+19D460 Disk Start            0000 (0)\n+19D462 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D464 Ext File Attributes   00000000 (0)\n+19D468 Local Header Offset   00111840 (1120320)\n+19D46C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D46C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D493 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D495   Length              0005 (5)\n+19D497   Flags               01 (1) 'Modification'\n+19D498   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D49C CENTRAL HEADER #293   02014B50 (33639248)\n+19D4A0 Created Zip Spec      14 (20) '2.0'\n+19D4A1 Created OS            00 (0) 'MS-DOS'\n+19D4A2 Extract Zip Spec      14 (20) '2.0'\n+19D4A3 Extract OS            00 (0) 'MS-DOS'\n+19D4A4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D4A6 Compression Method    0000 (0) 'Stored'\n+19D4A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D4AC CRC                   5087E57A (1351083386)\n+19D4B0 Compressed Size       000009A4 (2468)\n+19D4B4 Uncompressed Size     000009A4 (2468)\n+19D4B8 Filename Length       002C (44)\n+19D4BA Extra Length          0009 (9)\n+19D4BC Comment Length        0000 (0)\n+19D4BE Disk Start            0000 (0)\n+19D4C0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D4C2 Ext File Attributes   00000000 (0)\n+19D4C6 Local Header Offset   00112108 (1122568)\n+19D4CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D4CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D4F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D4F8   Length              0005 (5)\n+19D4FA   Flags               01 (1) 'Modification'\n+19D4FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D4FF CENTRAL HEADER #294   02014B50 (33639248)\n+19D503 Created Zip Spec      14 (20) '2.0'\n+19D504 Created OS            00 (0) 'MS-DOS'\n+19D505 Extract Zip Spec      14 (20) '2.0'\n+19D506 Extract OS            00 (0) 'MS-DOS'\n+19D507 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D509 Compression Method    0000 (0) 'Stored'\n+19D50B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D50F CRC                   34D97477 (886666359)\n+19D513 Compressed Size       00008320 (33568)\n+19D517 Uncompressed Size     00008320 (33568)\n+19D51B Filename Length       002C (44)\n+19D51D Extra Length          0009 (9)\n+19D51F Comment Length        0000 (0)\n+19D521 Disk Start            0000 (0)\n+19D523 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D525 Ext File Attributes   00000000 (0)\n+19D529 Local Header Offset   00112B0F (1125135)\n+19D52D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D52D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D559 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D55B   Length              0005 (5)\n+19D55D   Flags               01 (1) 'Modification'\n+19D55E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D562 CENTRAL HEADER #295   02014B50 (33639248)\n+19D566 Created Zip Spec      14 (20) '2.0'\n+19D567 Created OS            00 (0) 'MS-DOS'\n+19D568 Extract Zip Spec      14 (20) '2.0'\n+19D569 Extract OS            00 (0) 'MS-DOS'\n+19D56A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D56C Compression Method    0000 (0) 'Stored'\n+19D56E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D572 CRC                   4414A4AD (1142203565)\n+19D576 Compressed Size       0000BE90 (48784)\n+19D57A Uncompressed Size     0000BE90 (48784)\n+19D57E Filename Length       002F (47)\n+19D580 Extra Length          0009 (9)\n+19D582 Comment Length        0000 (0)\n+19D584 Disk Start            0000 (0)\n+19D586 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D588 Ext File Attributes   00000000 (0)\n+19D58C Local Header Offset   0011AE92 (1158802)\n+19D590 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D590: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D5BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D5C1   Length              0005 (5)\n+19D5C3   Flags               01 (1) 'Modification'\n+19D5C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D5C8 CENTRAL HEADER #296   02014B50 (33639248)\n+19D5CC Created Zip Spec      14 (20) '2.0'\n+19D5CD Created OS            00 (0) 'MS-DOS'\n+19D5CE Extract Zip Spec      14 (20) '2.0'\n+19D5CF Extract OS            00 (0) 'MS-DOS'\n+19D5D0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D5D2 Compression Method    0000 (0) 'Stored'\n+19D5D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D5D8 CRC                   20B97A60 (549026400)\n+19D5DC Compressed Size       0000179D (6045)\n+19D5E0 Uncompressed Size     0000179D (6045)\n+19D5E4 Filename Length       0038 (56)\n+19D5E6 Extra Length          0009 (9)\n+19D5E8 Comment Length        0000 (0)\n+19D5EA Disk Start            0000 (0)\n+19D5EC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D5EE Ext File Attributes   00000000 (0)\n+19D5F2 Local Header Offset   00126D88 (1207688)\n+19D5F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D5F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D62E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D630   Length              0005 (5)\n+19D632   Flags               01 (1) 'Modification'\n+19D633   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D637 CENTRAL HEADER #297   02014B50 (33639248)\n+19D63B Created Zip Spec      14 (20) '2.0'\n+19D63C Created OS            00 (0) 'MS-DOS'\n+19D63D Extract Zip Spec      14 (20) '2.0'\n+19D63E Extract OS            00 (0) 'MS-DOS'\n+19D63F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D641 Compression Method    0000 (0) 'Stored'\n+19D643 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D647 CRC                   0B75FDAE (192282030)\n+19D64B Compressed Size       0000124E (4686)\n+19D64F Uncompressed Size     0000124E (4686)\n+19D653 Filename Length       003C (60)\n+19D655 Extra Length          0009 (9)\n+19D657 Comment Length        0000 (0)\n+19D659 Disk Start            0000 (0)\n+19D65B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D65D Ext File Attributes   00000000 (0)\n+19D661 Local Header Offset   00128594 (1213844)\n+19D665 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D665: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D6A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D6A3   Length              0005 (5)\n+19D6A5   Flags               01 (1) 'Modification'\n+19D6A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D6AA CENTRAL HEADER #298   02014B50 (33639248)\n+19D6AE Created Zip Spec      14 (20) '2.0'\n+19D6AF Created OS            00 (0) 'MS-DOS'\n+19D6B0 Extract Zip Spec      14 (20) '2.0'\n+19D6B1 Extract OS            00 (0) 'MS-DOS'\n+19D6B2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D6B4 Compression Method    0000 (0) 'Stored'\n+19D6B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D6BA CRC                   D09B55F9 (3499841017)\n+19D6BE Compressed Size       00000D4B (3403)\n+19D6C2 Uncompressed Size     00000D4B (3403)\n+19D6C6 Filename Length       0028 (40)\n+19D6C8 Extra Length          0009 (9)\n+19D6CA Comment Length        0000 (0)\n+19D6CC Disk Start            0000 (0)\n+19D6CE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D6D0 Ext File Attributes   00000000 (0)\n+19D6D4 Local Header Offset   00129855 (1218645)\n+19D6D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D6D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D700 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D702   Length              0005 (5)\n+19D704   Flags               01 (1) 'Modification'\n+19D705   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D709 CENTRAL HEADER #299   02014B50 (33639248)\n+19D70D Created Zip Spec      14 (20) '2.0'\n+19D70E Created OS            00 (0) 'MS-DOS'\n+19D70F Extract Zip Spec      14 (20) '2.0'\n+19D710 Extract OS            00 (0) 'MS-DOS'\n+19D711 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D713 Compression Method    0000 (0) 'Stored'\n+19D715 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D719 CRC                   F3B0BA28 (4088445480)\n+19D71D Compressed Size       00000A5F (2655)\n+19D721 Uncompressed Size     00000A5F (2655)\n+19D725 Filename Length       0044 (68)\n+19D727 Extra Length          0009 (9)\n+19D729 Comment Length        0000 (0)\n+19D72B Disk Start            0000 (0)\n+19D72D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D72F Ext File Attributes   00000000 (0)\n+19D733 Local Header Offset   0012A5FF (1222143)\n+19D737 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D737: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D77B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D77D   Length              0005 (5)\n+19D77F   Flags               01 (1) 'Modification'\n+19D780   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D784 CENTRAL HEADER #300   02014B50 (33639248)\n+19D788 Created Zip Spec      14 (20) '2.0'\n+19D789 Created OS            00 (0) 'MS-DOS'\n+19D78A Extract Zip Spec      14 (20) '2.0'\n+19D78B Extract OS            00 (0) 'MS-DOS'\n+19D78C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D78E Compression Method    0000 (0) 'Stored'\n+19D790 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D794 CRC                   080CFD86 (135069062)\n+19D798 Compressed Size       00009370 (37744)\n+19D79C Uncompressed Size     00009370 (37744)\n+19D7A0 Filename Length       002E (46)\n+19D7A2 Extra Length          0009 (9)\n+19D7A4 Comment Length        0000 (0)\n+19D7A6 Disk Start            0000 (0)\n+19D7A8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D7AA Ext File Attributes   00000000 (0)\n+19D7AE Local Header Offset   0012B0D9 (1224921)\n+19D7B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D7B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D7E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D7E2   Length              0005 (5)\n+19D7E4   Flags               01 (1) 'Modification'\n+19D7E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D7E9 CENTRAL HEADER #301   02014B50 (33639248)\n+19D7ED Created Zip Spec      14 (20) '2.0'\n+19D7EE Created OS            00 (0) 'MS-DOS'\n+19D7EF Extract Zip Spec      14 (20) '2.0'\n+19D7F0 Extract OS            00 (0) 'MS-DOS'\n+19D7F1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D7F3 Compression Method    0000 (0) 'Stored'\n+19D7F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D7F9 CRC                   70A970FE (1890152702)\n+19D7FD Compressed Size       000022D8 (8920)\n+19D801 Uncompressed Size     000022D8 (8920)\n+19D805 Filename Length       002C (44)\n+19D807 Extra Length          0009 (9)\n+19D809 Comment Length        0000 (0)\n+19D80B Disk Start            0000 (0)\n+19D80D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D80F Ext File Attributes   00000000 (0)\n+19D813 Local Header Offset   001344AE (1262766)\n+19D817 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D817: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D843 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D845   Length              0005 (5)\n+19D847   Flags               01 (1) 'Modification'\n+19D848   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D84C CENTRAL HEADER #302   02014B50 (33639248)\n+19D850 Created Zip Spec      14 (20) '2.0'\n+19D851 Created OS            00 (0) 'MS-DOS'\n+19D852 Extract Zip Spec      14 (20) '2.0'\n+19D853 Extract OS            00 (0) 'MS-DOS'\n+19D854 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D856 Compression Method    0000 (0) 'Stored'\n+19D858 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D85C CRC                   BCEF5B37 (3169803063)\n+19D860 Compressed Size       0000634F (25423)\n+19D864 Uncompressed Size     0000634F (25423)\n+19D868 Filename Length       002B (43)\n+19D86A Extra Length          0009 (9)\n+19D86C Comment Length        0000 (0)\n+19D86E Disk Start            0000 (0)\n+19D870 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D872 Ext File Attributes   00000000 (0)\n+19D876 Local Header Offset   001367E9 (1271785)\n+19D87A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D87A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D8A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D8A7   Length              0005 (5)\n+19D8A9   Flags               01 (1) 'Modification'\n+19D8AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D8AE CENTRAL HEADER #303   02014B50 (33639248)\n+19D8B2 Created Zip Spec      14 (20) '2.0'\n+19D8B3 Created OS            00 (0) 'MS-DOS'\n+19D8B4 Extract Zip Spec      14 (20) '2.0'\n+19D8B5 Extract OS            00 (0) 'MS-DOS'\n+19D8B6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D8B8 Compression Method    0000 (0) 'Stored'\n+19D8BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D8BE CRC                   DB02321D (3674354205)\n+19D8C2 Compressed Size       000027AB (10155)\n+19D8C6 Uncompressed Size     000027AB (10155)\n+19D8CA Filename Length       002C (44)\n+19D8CC Extra Length          0009 (9)\n+19D8CE Comment Length        0000 (0)\n+19D8D0 Disk Start            0000 (0)\n+19D8D2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D8D4 Ext File Attributes   00000000 (0)\n+19D8D8 Local Header Offset   0013CB9A (1297306)\n+19D8DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D8DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D908 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D90A   Length              0005 (5)\n+19D90C   Flags               01 (1) 'Modification'\n+19D90D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D911 CENTRAL HEADER #304   02014B50 (33639248)\n+19D915 Created Zip Spec      14 (20) '2.0'\n+19D916 Created OS            00 (0) 'MS-DOS'\n+19D917 Extract Zip Spec      14 (20) '2.0'\n+19D918 Extract OS            00 (0) 'MS-DOS'\n+19D919 General Purpose Flag  0000 (0)\n+19D91B Compression Method    0000 (0) 'Stored'\n+19D91D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D921 CRC                   00000000 (0)\n+19D925 Compressed Size       00000000 (0)\n+19D929 Uncompressed Size     00000000 (0)\n+19D92D Filename Length       0018 (24)\n+19D92F Extra Length          0009 (9)\n+19D931 Comment Length        0000 (0)\n+19D933 Disk Start            0000 (0)\n+19D935 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D937 Ext File Attributes   00000000 (0)\n+19D93B Local Header Offset   0013F3A8 (1307560)\n+19D93F Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D93F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D957 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D959   Length              0005 (5)\n+19D95B   Flags               01 (1) 'Modification'\n+19D95C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D960 CENTRAL HEADER #305   02014B50 (33639248)\n+19D964 Created Zip Spec      14 (20) '2.0'\n+19D965 Created OS            00 (0) 'MS-DOS'\n+19D966 Extract Zip Spec      14 (20) '2.0'\n+19D967 Extract OS            00 (0) 'MS-DOS'\n+19D968 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D96A Compression Method    0000 (0) 'Stored'\n+19D96C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D970 CRC                   DCD69CAC (3705052332)\n+19D974 Compressed Size       00006690 (26256)\n+19D978 Uncompressed Size     00006690 (26256)\n+19D97C Filename Length       002B (43)\n+19D97E Extra Length          0009 (9)\n+19D980 Comment Length        0000 (0)\n+19D982 Disk Start            0000 (0)\n+19D984 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D986 Ext File Attributes   00000000 (0)\n+19D98A Local Header Offset   0013F3E7 (1307623)\n+19D98E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D98E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19D9B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19D9BB   Length              0005 (5)\n+19D9BD   Flags               01 (1) 'Modification'\n+19D9BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19D9C2 CENTRAL HEADER #306   02014B50 (33639248)\n+19D9C6 Created Zip Spec      14 (20) '2.0'\n+19D9C7 Created OS            00 (0) 'MS-DOS'\n+19D9C8 Extract Zip Spec      14 (20) '2.0'\n+19D9C9 Extract OS            00 (0) 'MS-DOS'\n+19D9CA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19D9CC Compression Method    0000 (0) 'Stored'\n+19D9CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D9D2 CRC                   E3FDA003 (3825049603)\n+19D9D6 Compressed Size       000061ED (25069)\n+19D9DA Uncompressed Size     000061ED (25069)\n+19D9DE Filename Length       0034 (52)\n+19D9E0 Extra Length          0009 (9)\n+19D9E2 Comment Length        0000 (0)\n+19D9E4 Disk Start            0000 (0)\n+19D9E6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19D9E8 Ext File Attributes   00000000 (0)\n+19D9EC Local Header Offset   00145AD9 (1333977)\n+19D9F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D9F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DA24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DA26   Length              0005 (5)\n+19DA28   Flags               01 (1) 'Modification'\n+19DA29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DA2D CENTRAL HEADER #307   02014B50 (33639248)\n+19DA31 Created Zip Spec      14 (20) '2.0'\n+19DA32 Created OS            00 (0) 'MS-DOS'\n+19DA33 Extract Zip Spec      14 (20) '2.0'\n+19DA34 Extract OS            00 (0) 'MS-DOS'\n+19DA35 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DA37 Compression Method    0000 (0) 'Stored'\n+19DA39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DA3D CRC                   9A747BAC (2591325100)\n+19DA41 Compressed Size       00001305 (4869)\n+19DA45 Uncompressed Size     00001305 (4869)\n+19DA49 Filename Length       0031 (49)\n+19DA4B Extra Length          0009 (9)\n+19DA4D Comment Length        0000 (0)\n+19DA4F Disk Start            0000 (0)\n+19DA51 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DA53 Ext File Attributes   00000000 (0)\n+19DA57 Local Header Offset   0014BD31 (1359153)\n+19DA5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DA5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DA8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DA8E   Length              0005 (5)\n+19DA90   Flags               01 (1) 'Modification'\n+19DA91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DA95 CENTRAL HEADER #308   02014B50 (33639248)\n+19DA99 Created Zip Spec      14 (20) '2.0'\n+19DA9A Created OS            00 (0) 'MS-DOS'\n+19DA9B Extract Zip Spec      14 (20) '2.0'\n+19DA9C Extract OS            00 (0) 'MS-DOS'\n+19DA9D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DA9F Compression Method    0000 (0) 'Stored'\n+19DAA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DAA5 CRC                   F1EB3E77 (4058726007)\n+19DAA9 Compressed Size       000016D7 (5847)\n+19DAAD Uncompressed Size     000016D7 (5847)\n+19DAB1 Filename Length       0034 (52)\n+19DAB3 Extra Length          0009 (9)\n+19DAB5 Comment Length        0000 (0)\n+19DAB7 Disk Start            0000 (0)\n+19DAB9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DABB Ext File Attributes   00000000 (0)\n+19DABF Local Header Offset   0014D09E (1364126)\n+19DAC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DAC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DAF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DAF9   Length              0005 (5)\n+19DAFB   Flags               01 (1) 'Modification'\n+19DAFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DB00 CENTRAL HEADER #309   02014B50 (33639248)\n+19DB04 Created Zip Spec      14 (20) '2.0'\n+19DB05 Created OS            00 (0) 'MS-DOS'\n+19DB06 Extract Zip Spec      14 (20) '2.0'\n+19DB07 Extract OS            00 (0) 'MS-DOS'\n+19DB08 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DB0A Compression Method    0000 (0) 'Stored'\n+19DB0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DB10 CRC                   7F641F8A (2137268106)\n+19DB14 Compressed Size       00001B65 (7013)\n+19DB18 Uncompressed Size     00001B65 (7013)\n+19DB1C Filename Length       0032 (50)\n+19DB1E Extra Length          0009 (9)\n+19DB20 Comment Length        0000 (0)\n+19DB22 Disk Start            0000 (0)\n+19DB24 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DB26 Ext File Attributes   00000000 (0)\n+19DB2A Local Header Offset   0014E7E0 (1370080)\n+19DB2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DB2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DB60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DB62   Length              0005 (5)\n+19DB64   Flags               01 (1) 'Modification'\n+19DB65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DB69 CENTRAL HEADER #310   02014B50 (33639248)\n+19DB6D Created Zip Spec      14 (20) '2.0'\n+19DB6E Created OS            00 (0) 'MS-DOS'\n+19DB6F Extract Zip Spec      14 (20) '2.0'\n+19DB70 Extract OS            00 (0) 'MS-DOS'\n+19DB71 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DB73 Compression Method    0000 (0) 'Stored'\n+19DB75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DB79 CRC                   6C21C4E0 (1814152416)\n+19DB7D Compressed Size       00003707 (14087)\n+19DB81 Uncompressed Size     00003707 (14087)\n+19DB85 Filename Length       002E (46)\n+19DB87 Extra Length          0009 (9)\n+19DB89 Comment Length        0000 (0)\n+19DB8B Disk Start            0000 (0)\n+19DB8D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DB8F Ext File Attributes   00000000 (0)\n+19DB93 Local Header Offset   001503AE (1377198)\n+19DB97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DB97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DBC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DBC7   Length              0005 (5)\n+19DBC9   Flags               01 (1) 'Modification'\n+19DBCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DBCE CENTRAL HEADER #311   02014B50 (33639248)\n+19DBD2 Created Zip Spec      14 (20) '2.0'\n+19DBD3 Created OS            00 (0) 'MS-DOS'\n+19DBD4 Extract Zip Spec      14 (20) '2.0'\n+19DBD5 Extract OS            00 (0) 'MS-DOS'\n+19DBD6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DBD8 Compression Method    0000 (0) 'Stored'\n+19DBDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DBDE CRC                   F3BD8170 (4089282928)\n+19DBE2 Compressed Size       000008A1 (2209)\n+19DBE6 Uncompressed Size     000008A1 (2209)\n+19DBEA Filename Length       002B (43)\n+19DBEC Extra Length          0009 (9)\n+19DBEE Comment Length        0000 (0)\n+19DBF0 Disk Start            0000 (0)\n+19DBF2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DBF4 Ext File Attributes   00000000 (0)\n+19DBF8 Local Header Offset   00153B1A (1391386)\n+19DBFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DBFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DC27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DC29   Length              0005 (5)\n+19DC2B   Flags               01 (1) 'Modification'\n+19DC2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DC30 CENTRAL HEADER #312   02014B50 (33639248)\n+19DC34 Created Zip Spec      14 (20) '2.0'\n+19DC35 Created OS            00 (0) 'MS-DOS'\n+19DC36 Extract Zip Spec      14 (20) '2.0'\n+19DC37 Extract OS            00 (0) 'MS-DOS'\n+19DC38 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DC3A Compression Method    0000 (0) 'Stored'\n+19DC3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DC40 CRC                   56A68FB6 (1453756342)\n+19DC44 Compressed Size       000023BC (9148)\n+19DC48 Uncompressed Size     000023BC (9148)\n+19DC4C Filename Length       002F (47)\n+19DC4E Extra Length          0009 (9)\n+19DC50 Comment Length        0000 (0)\n+19DC52 Disk Start            0000 (0)\n+19DC54 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DC56 Ext File Attributes   00000000 (0)\n+19DC5A Local Header Offset   0015441D (1393693)\n+19DC5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DC5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DC8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DC8F   Length              0005 (5)\n+19DC91   Flags               01 (1) 'Modification'\n+19DC92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DC96 CENTRAL HEADER #313   02014B50 (33639248)\n+19DC9A Created Zip Spec      14 (20) '2.0'\n+19DC9B Created OS            00 (0) 'MS-DOS'\n+19DC9C Extract Zip Spec      14 (20) '2.0'\n+19DC9D Extract OS            00 (0) 'MS-DOS'\n+19DC9E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DCA0 Compression Method    0000 (0) 'Stored'\n+19DCA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DCA6 CRC                   111FF296 (287306390)\n+19DCAA Compressed Size       00000B99 (2969)\n+19DCAE Uncompressed Size     00000B99 (2969)\n+19DCB2 Filename Length       0026 (38)\n+19DCB4 Extra Length          0009 (9)\n+19DCB6 Comment Length        0000 (0)\n+19DCB8 Disk Start            0000 (0)\n+19DCBA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DCBC Ext File Attributes   00000000 (0)\n+19DCC0 Local Header Offset   0015683F (1402943)\n+19DCC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DCC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DCEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DCEC   Length              0005 (5)\n+19DCEE   Flags               01 (1) 'Modification'\n+19DCEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DCF3 CENTRAL HEADER #314   02014B50 (33639248)\n+19DCF7 Created Zip Spec      14 (20) '2.0'\n+19DCF8 Created OS            00 (0) 'MS-DOS'\n+19DCF9 Extract Zip Spec      14 (20) '2.0'\n+19DCFA Extract OS            00 (0) 'MS-DOS'\n+19DCFB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DCFD Compression Method    0000 (0) 'Stored'\n+19DCFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DD03 CRC                   44CDA5D9 (1154328025)\n+19DD07 Compressed Size       00000E77 (3703)\n+19DD0B Uncompressed Size     00000E77 (3703)\n+19DD0F Filename Length       002B (43)\n+19DD11 Extra Length          0009 (9)\n+19DD13 Comment Length        0000 (0)\n+19DD15 Disk Start            0000 (0)\n+19DD17 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DD19 Ext File Attributes   00000000 (0)\n+19DD1D Local Header Offset   00157435 (1406005)\n+19DD21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DD21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DD4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DD4E   Length              0005 (5)\n+19DD50   Flags               01 (1) 'Modification'\n+19DD51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DD55 CENTRAL HEADER #315   02014B50 (33639248)\n+19DD59 Created Zip Spec      14 (20) '2.0'\n+19DD5A Created OS            00 (0) 'MS-DOS'\n+19DD5B Extract Zip Spec      14 (20) '2.0'\n+19DD5C Extract OS            00 (0) 'MS-DOS'\n+19DD5D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DD5F Compression Method    0000 (0) 'Stored'\n+19DD61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DD65 CRC                   D584FEC4 (3582262980)\n+19DD69 Compressed Size       00001869 (6249)\n+19DD6D Uncompressed Size     00001869 (6249)\n+19DD71 Filename Length       0031 (49)\n+19DD73 Extra Length          0009 (9)\n+19DD75 Comment Length        0000 (0)\n+19DD77 Disk Start            0000 (0)\n+19DD79 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DD7B Ext File Attributes   00000000 (0)\n+19DD7F Local Header Offset   0015830E (1409806)\n+19DD83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DD83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DDB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DDB6   Length              0005 (5)\n+19DDB8   Flags               01 (1) 'Modification'\n+19DDB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DDBD CENTRAL HEADER #316   02014B50 (33639248)\n+19DDC1 Created Zip Spec      14 (20) '2.0'\n+19DDC2 Created OS            00 (0) 'MS-DOS'\n+19DDC3 Extract Zip Spec      14 (20) '2.0'\n+19DDC4 Extract OS            00 (0) 'MS-DOS'\n+19DDC5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DDC7 Compression Method    0000 (0) 'Stored'\n+19DDC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DDCD CRC                   6E2E32B0 (1848521392)\n+19DDD1 Compressed Size       000022C0 (8896)\n+19DDD5 Uncompressed Size     000022C0 (8896)\n+19DDD9 Filename Length       0029 (41)\n+19DDDB Extra Length          0009 (9)\n+19DDDD Comment Length        0000 (0)\n+19DDDF Disk Start            0000 (0)\n+19DDE1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DDE3 Ext File Attributes   00000000 (0)\n+19DDE7 Local Header Offset   00159BDF (1416159)\n+19DDEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DDEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DE14 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DE16   Length              0005 (5)\n+19DE18   Flags               01 (1) 'Modification'\n+19DE19   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DE1D CENTRAL HEADER #317   02014B50 (33639248)\n+19DE21 Created Zip Spec      14 (20) '2.0'\n+19DE22 Created OS            00 (0) 'MS-DOS'\n+19DE23 Extract Zip Spec      14 (20) '2.0'\n+19DE24 Extract OS            00 (0) 'MS-DOS'\n+19DE25 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DE27 Compression Method    0000 (0) 'Stored'\n+19DE29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DE2D CRC                   C17F4D7C (3246345596)\n+19DE31 Compressed Size       0000068F (1679)\n+19DE35 Uncompressed Size     0000068F (1679)\n+19DE39 Filename Length       002A (42)\n+19DE3B Extra Length          0009 (9)\n+19DE3D Comment Length        0000 (0)\n+19DE3F Disk Start            0000 (0)\n+19DE41 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DE43 Ext File Attributes   00000000 (0)\n+19DE47 Local Header Offset   0015BEFF (1425151)\n+19DE4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DE4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DE75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DE77   Length              0005 (5)\n+19DE79   Flags               01 (1) 'Modification'\n+19DE7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DE7E CENTRAL HEADER #318   02014B50 (33639248)\n+19DE82 Created Zip Spec      14 (20) '2.0'\n+19DE83 Created OS            00 (0) 'MS-DOS'\n+19DE84 Extract Zip Spec      14 (20) '2.0'\n+19DE85 Extract OS            00 (0) 'MS-DOS'\n+19DE86 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DE88 Compression Method    0000 (0) 'Stored'\n+19DE8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DE8E CRC                   0D00D936 (218159414)\n+19DE92 Compressed Size       00000E8E (3726)\n+19DE96 Uncompressed Size     00000E8E (3726)\n+19DE9A Filename Length       0029 (41)\n+19DE9C Extra Length          0009 (9)\n+19DE9E Comment Length        0000 (0)\n+19DEA0 Disk Start            0000 (0)\n+19DEA2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DEA4 Ext File Attributes   00000000 (0)\n+19DEA8 Local Header Offset   0015C5EF (1426927)\n+19DEAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DEAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DED5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DED7   Length              0005 (5)\n+19DED9   Flags               01 (1) 'Modification'\n+19DEDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DEDE CENTRAL HEADER #319   02014B50 (33639248)\n+19DEE2 Created Zip Spec      14 (20) '2.0'\n+19DEE3 Created OS            00 (0) 'MS-DOS'\n+19DEE4 Extract Zip Spec      14 (20) '2.0'\n+19DEE5 Extract OS            00 (0) 'MS-DOS'\n+19DEE6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DEE8 Compression Method    0000 (0) 'Stored'\n+19DEEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DEEE CRC                   F4388FF8 (4097347576)\n+19DEF2 Compressed Size       00000F20 (3872)\n+19DEF6 Uncompressed Size     00000F20 (3872)\n+19DEFA Filename Length       002A (42)\n+19DEFC Extra Length          0009 (9)\n+19DEFE Comment Length        0000 (0)\n+19DF00 Disk Start            0000 (0)\n+19DF02 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DF04 Ext File Attributes   00000000 (0)\n+19DF08 Local Header Offset   0015D4DD (1430749)\n+19DF0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DF0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DF36 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DF38   Length              0005 (5)\n+19DF3A   Flags               01 (1) 'Modification'\n+19DF3B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DF3F CENTRAL HEADER #320   02014B50 (33639248)\n+19DF43 Created Zip Spec      14 (20) '2.0'\n+19DF44 Created OS            00 (0) 'MS-DOS'\n+19DF45 Extract Zip Spec      14 (20) '2.0'\n+19DF46 Extract OS            00 (0) 'MS-DOS'\n+19DF47 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DF49 Compression Method    0000 (0) 'Stored'\n+19DF4B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DF4F CRC                   39FACF71 (972738417)\n+19DF53 Compressed Size       00003613 (13843)\n+19DF57 Uncompressed Size     00003613 (13843)\n+19DF5B Filename Length       002B (43)\n+19DF5D Extra Length          0009 (9)\n+19DF5F Comment Length        0000 (0)\n+19DF61 Disk Start            0000 (0)\n+19DF63 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DF65 Ext File Attributes   00000000 (0)\n+19DF69 Local Header Offset   0015E45E (1434718)\n+19DF6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DF6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DF98 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DF9A   Length              0005 (5)\n+19DF9C   Flags               01 (1) 'Modification'\n+19DF9D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19DFA1 CENTRAL HEADER #321   02014B50 (33639248)\n+19DFA5 Created Zip Spec      14 (20) '2.0'\n+19DFA6 Created OS            00 (0) 'MS-DOS'\n+19DFA7 Extract Zip Spec      14 (20) '2.0'\n+19DFA8 Extract OS            00 (0) 'MS-DOS'\n+19DFA9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19DFAB Compression Method    0000 (0) 'Stored'\n+19DFAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19DFB1 CRC                   2FD52EF2 (802500338)\n+19DFB5 Compressed Size       00002A6C (10860)\n+19DFB9 Uncompressed Size     00002A6C (10860)\n+19DFBD Filename Length       002B (43)\n+19DFBF Extra Length          0009 (9)\n+19DFC1 Comment Length        0000 (0)\n+19DFC3 Disk Start            0000 (0)\n+19DFC5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19DFC7 Ext File Attributes   00000000 (0)\n+19DFCB Local Header Offset   00161AD3 (1448659)\n+19DFCF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19DFCF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DFFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DFFC   Length              0005 (5)\n+19DFFE   Flags               01 (1) 'Modification'\n+19DFFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E003 CENTRAL HEADER #322   02014B50 (33639248)\n+19E007 Created Zip Spec      14 (20) '2.0'\n+19E008 Created OS            00 (0) 'MS-DOS'\n+19E009 Extract Zip Spec      14 (20) '2.0'\n+19E00A Extract OS            00 (0) 'MS-DOS'\n+19E00B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E00D Compression Method    0000 (0) 'Stored'\n+19E00F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E013 CRC                   42C7E3CE (1120396238)\n+19E017 Compressed Size       000021AF (8623)\n+19E01B Uncompressed Size     000021AF (8623)\n+19E01F Filename Length       0030 (48)\n+19E021 Extra Length          0009 (9)\n+19E023 Comment Length        0000 (0)\n+19E025 Disk Start            0000 (0)\n+19E027 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E029 Ext File Attributes   00000000 (0)\n+19E02D Local Header Offset   001645A1 (1459617)\n+19E031 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E031: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E061 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E063   Length              0005 (5)\n+19E065   Flags               01 (1) 'Modification'\n+19E066   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E06A CENTRAL HEADER #323   02014B50 (33639248)\n+19E06E Created Zip Spec      14 (20) '2.0'\n+19E06F Created OS            00 (0) 'MS-DOS'\n+19E070 Extract Zip Spec      14 (20) '2.0'\n+19E071 Extract OS            00 (0) 'MS-DOS'\n+19E072 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E074 Compression Method    0000 (0) 'Stored'\n+19E076 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E07A CRC                   9B8BDB69 (2609634153)\n+19E07E Compressed Size       00003527 (13607)\n+19E082 Uncompressed Size     00003527 (13607)\n+19E086 Filename Length       002B (43)\n+19E088 Extra Length          0009 (9)\n+19E08A Comment Length        0000 (0)\n+19E08C Disk Start            0000 (0)\n+19E08E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E090 Ext File Attributes   00000000 (0)\n+19E094 Local Header Offset   001667B7 (1468343)\n+19E098 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E098: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E0C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E0C5   Length              0005 (5)\n+19E0C7   Flags               01 (1) 'Modification'\n+19E0C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E0CC CENTRAL HEADER #324   02014B50 (33639248)\n+19E0D0 Created Zip Spec      14 (20) '2.0'\n+19E0D1 Created OS            00 (0) 'MS-DOS'\n+19E0D2 Extract Zip Spec      14 (20) '2.0'\n+19E0D3 Extract OS            00 (0) 'MS-DOS'\n+19E0D4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E0D6 Compression Method    0000 (0) 'Stored'\n+19E0D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E0DC CRC                   2A6335AE (711144878)\n+19E0E0 Compressed Size       00003628 (13864)\n+19E0E4 Uncompressed Size     00003628 (13864)\n+19E0E8 Filename Length       002E (46)\n+19E0EA Extra Length          0009 (9)\n+19E0EC Comment Length        0000 (0)\n+19E0EE Disk Start            0000 (0)\n+19E0F0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E0F2 Ext File Attributes   00000000 (0)\n+19E0F6 Local Header Offset   00169D40 (1482048)\n+19E0FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E0FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E128 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E12A   Length              0005 (5)\n+19E12C   Flags               01 (1) 'Modification'\n+19E12D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E131 CENTRAL HEADER #325   02014B50 (33639248)\n+19E135 Created Zip Spec      14 (20) '2.0'\n+19E136 Created OS            00 (0) 'MS-DOS'\n+19E137 Extract Zip Spec      14 (20) '2.0'\n+19E138 Extract OS            00 (0) 'MS-DOS'\n+19E139 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E13B Compression Method    0000 (0) 'Stored'\n+19E13D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E141 CRC                   4DECBF7A (1307361146)\n+19E145 Compressed Size       00001CA2 (7330)\n+19E149 Uncompressed Size     00001CA2 (7330)\n+19E14D Filename Length       0026 (38)\n+19E14F Extra Length          0009 (9)\n+19E151 Comment Length        0000 (0)\n+19E153 Disk Start            0000 (0)\n+19E155 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E157 Ext File Attributes   00000000 (0)\n+19E15B Local Header Offset   0016D3CD (1496013)\n+19E15F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E15F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E185 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E187   Length              0005 (5)\n+19E189   Flags               01 (1) 'Modification'\n+19E18A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E18E CENTRAL HEADER #326   02014B50 (33639248)\n+19E192 Created Zip Spec      14 (20) '2.0'\n+19E193 Created OS            00 (0) 'MS-DOS'\n+19E194 Extract Zip Spec      14 (20) '2.0'\n+19E195 Extract OS            00 (0) 'MS-DOS'\n+19E196 General Purpose Flag  0000 (0)\n+19E198 Compression Method    0000 (0) 'Stored'\n+19E19A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E19E CRC                   00000000 (0)\n+19E1A2 Compressed Size       00000000 (0)\n+19E1A6 Uncompressed Size     00000000 (0)\n+19E1AA Filename Length       0023 (35)\n+19E1AC Extra Length          0009 (9)\n+19E1AE Comment Length        0000 (0)\n+19E1B0 Disk Start            0000 (0)\n+19E1B2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E1B4 Ext File Attributes   00000000 (0)\n+19E1B8 Local Header Offset   0016F0CC (1503436)\n+19E1BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E1BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E1DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E1E1   Length              0005 (5)\n+19E1E3   Flags               01 (1) 'Modification'\n+19E1E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E1E8 CENTRAL HEADER #327   02014B50 (33639248)\n+19E1EC Created Zip Spec      14 (20) '2.0'\n+19E1ED Created OS            00 (0) 'MS-DOS'\n+19E1EE Extract Zip Spec      14 (20) '2.0'\n+19E1EF Extract OS            00 (0) 'MS-DOS'\n+19E1F0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E1F2 Compression Method    0000 (0) 'Stored'\n+19E1F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E1F8 CRC                   DF16DFCA (3742818250)\n+19E1FC Compressed Size       000005D0 (1488)\n+19E200 Uncompressed Size     000005D0 (1488)\n+19E204 Filename Length       0030 (48)\n+19E206 Extra Length          0009 (9)\n+19E208 Comment Length        0000 (0)\n+19E20A Disk Start            0000 (0)\n+19E20C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E20E Ext File Attributes   00000000 (0)\n+19E212 Local Header Offset   0016F116 (1503510)\n+19E216 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E216: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E246 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E248   Length              0005 (5)\n+19E24A   Flags               01 (1) 'Modification'\n+19E24B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E24F CENTRAL HEADER #328   02014B50 (33639248)\n+19E253 Created Zip Spec      14 (20) '2.0'\n+19E254 Created OS            00 (0) 'MS-DOS'\n+19E255 Extract Zip Spec      14 (20) '2.0'\n+19E256 Extract OS            00 (0) 'MS-DOS'\n+19E257 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E259 Compression Method    0000 (0) 'Stored'\n+19E25B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E25F CRC                   14F52AE5 (351611621)\n+19E263 Compressed Size       00001E9C (7836)\n+19E267 Uncompressed Size     00001E9C (7836)\n+19E26B Filename Length       0036 (54)\n+19E26D Extra Length          0009 (9)\n+19E26F Comment Length        0000 (0)\n+19E271 Disk Start            0000 (0)\n+19E273 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E275 Ext File Attributes   00000000 (0)\n+19E279 Local Header Offset   0016F74D (1505101)\n+19E27D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E27D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E2B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E2B5   Length              0005 (5)\n+19E2B7   Flags               01 (1) 'Modification'\n+19E2B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E2BC CENTRAL HEADER #329   02014B50 (33639248)\n+19E2C0 Created Zip Spec      14 (20) '2.0'\n+19E2C1 Created OS            00 (0) 'MS-DOS'\n+19E2C2 Extract Zip Spec      14 (20) '2.0'\n+19E2C3 Extract OS            00 (0) 'MS-DOS'\n+19E2C4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E2C6 Compression Method    0000 (0) 'Stored'\n+19E2C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E2CC CRC                   455A049E (1163527326)\n+19E2D0 Compressed Size       00001BA0 (7072)\n+19E2D4 Uncompressed Size     00001BA0 (7072)\n+19E2D8 Filename Length       0034 (52)\n+19E2DA Extra Length          0009 (9)\n+19E2DC Comment Length        0000 (0)\n+19E2DE Disk Start            0000 (0)\n+19E2E0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E2E2 Ext File Attributes   00000000 (0)\n+19E2E6 Local Header Offset   00171656 (1513046)\n+19E2EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E2EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E31E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E320   Length              0005 (5)\n+19E322   Flags               01 (1) 'Modification'\n+19E323   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E327 CENTRAL HEADER #330   02014B50 (33639248)\n+19E32B Created Zip Spec      14 (20) '2.0'\n+19E32C Created OS            00 (0) 'MS-DOS'\n+19E32D Extract Zip Spec      14 (20) '2.0'\n+19E32E Extract OS            00 (0) 'MS-DOS'\n+19E32F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E331 Compression Method    0000 (0) 'Stored'\n+19E333 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E337 CRC                   C852179E (3360823198)\n+19E33B Compressed Size       00000798 (1944)\n+19E33F Uncompressed Size     00000798 (1944)\n+19E343 Filename Length       002E (46)\n+19E345 Extra Length          0009 (9)\n+19E347 Comment Length        0000 (0)\n+19E349 Disk Start            0000 (0)\n+19E34B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E34D Ext File Attributes   00000000 (0)\n+19E351 Local Header Offset   00173261 (1520225)\n+19E355 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E355: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E383 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E385   Length              0005 (5)\n+19E387   Flags               01 (1) 'Modification'\n+19E388   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E38C CENTRAL HEADER #331   02014B50 (33639248)\n+19E390 Created Zip Spec      14 (20) '2.0'\n+19E391 Created OS            00 (0) 'MS-DOS'\n+19E392 Extract Zip Spec      14 (20) '2.0'\n+19E393 Extract OS            00 (0) 'MS-DOS'\n+19E394 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E396 Compression Method    0000 (0) 'Stored'\n+19E398 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E39C CRC                   BD46272F (3175491375)\n+19E3A0 Compressed Size       00001CB5 (7349)\n+19E3A4 Uncompressed Size     00001CB5 (7349)\n+19E3A8 Filename Length       0031 (49)\n+19E3AA Extra Length          0009 (9)\n+19E3AC Comment Length        0000 (0)\n+19E3AE Disk Start            0000 (0)\n+19E3B0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E3B2 Ext File Attributes   00000000 (0)\n+19E3B6 Local Header Offset   00173A5E (1522270)\n+19E3BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E3BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E3EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E3ED   Length              0005 (5)\n+19E3EF   Flags               01 (1) 'Modification'\n+19E3F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E3F4 CENTRAL HEADER #332   02014B50 (33639248)\n+19E3F8 Created Zip Spec      14 (20) '2.0'\n+19E3F9 Created OS            00 (0) 'MS-DOS'\n+19E3FA Extract Zip Spec      14 (20) '2.0'\n+19E3FB Extract OS            00 (0) 'MS-DOS'\n+19E3FC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E3FE Compression Method    0000 (0) 'Stored'\n+19E400 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E404 CRC                   F51CAE43 (4112297539)\n+19E408 Compressed Size       00001BD5 (7125)\n+19E40C Uncompressed Size     00001BD5 (7125)\n+19E410 Filename Length       002F (47)\n+19E412 Extra Length          0009 (9)\n+19E414 Comment Length        0000 (0)\n+19E416 Disk Start            0000 (0)\n+19E418 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E41A Ext File Attributes   00000000 (0)\n+19E41E Local Header Offset   0017577B (1529723)\n+19E422 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E422: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E451 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E453   Length              0005 (5)\n+19E455   Flags               01 (1) 'Modification'\n+19E456   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E45A CENTRAL HEADER #333   02014B50 (33639248)\n+19E45E Created Zip Spec      14 (20) '2.0'\n+19E45F Created OS            00 (0) 'MS-DOS'\n+19E460 Extract Zip Spec      14 (20) '2.0'\n+19E461 Extract OS            00 (0) 'MS-DOS'\n+19E462 General Purpose Flag  0000 (0)\n+19E464 Compression Method    0000 (0) 'Stored'\n+19E466 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E46A CRC                   00000000 (0)\n+19E46E Compressed Size       00000000 (0)\n+19E472 Uncompressed Size     00000000 (0)\n+19E476 Filename Length       0020 (32)\n+19E478 Extra Length          0009 (9)\n+19E47A Comment Length        0000 (0)\n+19E47C Disk Start            0000 (0)\n+19E47E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E480 Ext File Attributes   00000000 (0)\n+19E484 Local Header Offset   001773B6 (1536950)\n+19E488 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E488: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E4A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E4AA   Length              0005 (5)\n+19E4AC   Flags               01 (1) 'Modification'\n+19E4AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E4B1 CENTRAL HEADER #334   02014B50 (33639248)\n+19E4B5 Created Zip Spec      14 (20) '2.0'\n+19E4B6 Created OS            00 (0) 'MS-DOS'\n+19E4B7 Extract Zip Spec      14 (20) '2.0'\n+19E4B8 Extract OS            00 (0) 'MS-DOS'\n+19E4B9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E4BB Compression Method    0000 (0) 'Stored'\n+19E4BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E4C1 CRC                   DB5A6031 (3680133169)\n+19E4C5 Compressed Size       000007C1 (1985)\n+19E4C9 Uncompressed Size     000007C1 (1985)\n+19E4CD Filename Length       003F (63)\n+19E4CF Extra Length          0009 (9)\n+19E4D1 Comment Length        0000 (0)\n+19E4D3 Disk Start            0000 (0)\n+19E4D5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E4D7 Ext File Attributes   00000000 (0)\n+19E4DB Local Header Offset   001773FD (1537021)\n+19E4DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E4DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E51E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E520   Length              0005 (5)\n+19E522   Flags               01 (1) 'Modification'\n+19E523   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E527 CENTRAL HEADER #335   02014B50 (33639248)\n+19E52B Created Zip Spec      14 (20) '2.0'\n+19E52C Created OS            00 (0) 'MS-DOS'\n+19E52D Extract Zip Spec      14 (20) '2.0'\n+19E52E Extract OS            00 (0) 'MS-DOS'\n+19E52F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E531 Compression Method    0000 (0) 'Stored'\n+19E533 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E537 CRC                   695EFF74 (1767833460)\n+19E53B Compressed Size       00004A07 (18951)\n+19E53F Uncompressed Size     00004A07 (18951)\n+19E543 Filename Length       0032 (50)\n+19E545 Extra Length          0009 (9)\n+19E547 Comment Length        0000 (0)\n+19E549 Disk Start            0000 (0)\n+19E54B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E54D Ext File Attributes   00000000 (0)\n+19E551 Local Header Offset   00177C34 (1539124)\n+19E555 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E555: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E587 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E589   Length              0005 (5)\n+19E58B   Flags               01 (1) 'Modification'\n+19E58C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E590 CENTRAL HEADER #336   02014B50 (33639248)\n+19E594 Created Zip Spec      14 (20) '2.0'\n+19E595 Created OS            00 (0) 'MS-DOS'\n+19E596 Extract Zip Spec      14 (20) '2.0'\n+19E597 Extract OS            00 (0) 'MS-DOS'\n+19E598 General Purpose Flag  0000 (0)\n+19E59A Compression Method    0000 (0) 'Stored'\n+19E59C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E5A0 CRC                   00000000 (0)\n+19E5A4 Compressed Size       00000000 (0)\n+19E5A8 Uncompressed Size     00000000 (0)\n+19E5AC Filename Length       0020 (32)\n+19E5AE Extra Length          0009 (9)\n+19E5B0 Comment Length        0000 (0)\n+19E5B2 Disk Start            0000 (0)\n+19E5B4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E5B6 Ext File Attributes   00000000 (0)\n+19E5BA Local Header Offset   0017C6A4 (1558180)\n+19E5BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E5BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E5DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E5E0   Length              0005 (5)\n+19E5E2   Flags               01 (1) 'Modification'\n+19E5E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E5E7 CENTRAL HEADER #337   02014B50 (33639248)\n+19E5EB Created Zip Spec      14 (20) '2.0'\n+19E5EC Created OS            00 (0) 'MS-DOS'\n+19E5ED Extract Zip Spec      14 (20) '2.0'\n+19E5EE Extract OS            00 (0) 'MS-DOS'\n+19E5EF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E5F1 Compression Method    0000 (0) 'Stored'\n+19E5F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E5F7 CRC                   FB06EFC4 (4211535812)\n+19E5FB Compressed Size       00000833 (2099)\n+19E5FF Uncompressed Size     00000833 (2099)\n+19E603 Filename Length       002E (46)\n+19E605 Extra Length          0009 (9)\n+19E607 Comment Length        0000 (0)\n+19E609 Disk Start            0000 (0)\n+19E60B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E60D Ext File Attributes   00000000 (0)\n+19E611 Local Header Offset   0017C6EB (1558251)\n+19E615 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E615: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E643 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E645   Length              0005 (5)\n+19E647   Flags               01 (1) 'Modification'\n+19E648   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E64C CENTRAL HEADER #338   02014B50 (33639248)\n+19E650 Created Zip Spec      14 (20) '2.0'\n+19E651 Created OS            00 (0) 'MS-DOS'\n+19E652 Extract Zip Spec      14 (20) '2.0'\n+19E653 Extract OS            00 (0) 'MS-DOS'\n+19E654 General Purpose Flag  0000 (0)\n+19E656 Compression Method    0000 (0) 'Stored'\n+19E658 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E65C CRC                   00000000 (0)\n+19E660 Compressed Size       00000000 (0)\n+19E664 Uncompressed Size     00000000 (0)\n+19E668 Filename Length       0017 (23)\n+19E66A Extra Length          0009 (9)\n+19E66C Comment Length        0000 (0)\n+19E66E Disk Start            0000 (0)\n+19E670 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E672 Ext File Attributes   00000000 (0)\n+19E676 Local Header Offset   0017CF83 (1560451)\n+19E67A Filename              'XXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E67A: Filename 'XXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E691 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E693   Length              0005 (5)\n+19E695   Flags               01 (1) 'Modification'\n+19E696   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E69A CENTRAL HEADER #339   02014B50 (33639248)\n+19E69E Created Zip Spec      14 (20) '2.0'\n+19E69F Created OS            00 (0) 'MS-DOS'\n+19E6A0 Extract Zip Spec      14 (20) '2.0'\n+19E6A1 Extract OS            00 (0) 'MS-DOS'\n+19E6A2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E6A4 Compression Method    0000 (0) 'Stored'\n+19E6A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E6AA CRC                   18AD9BF8 (414030840)\n+19E6AE Compressed Size       0000177E (6014)\n+19E6B2 Uncompressed Size     0000177E (6014)\n+19E6B6 Filename Length       0033 (51)\n+19E6B8 Extra Length          0009 (9)\n+19E6BA Comment Length        0000 (0)\n+19E6BC Disk Start            0000 (0)\n+19E6BE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E6C0 Ext File Attributes   00000000 (0)\n+19E6C4 Local Header Offset   0017CFC1 (1560513)\n+19E6C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E6C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E6FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E6FD   Length              0005 (5)\n+19E6FF   Flags               01 (1) 'Modification'\n+19E700   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E704 CENTRAL HEADER #340   02014B50 (33639248)\n+19E708 Created Zip Spec      14 (20) '2.0'\n+19E709 Created OS            00 (0) 'MS-DOS'\n+19E70A Extract Zip Spec      14 (20) '2.0'\n+19E70B Extract OS            00 (0) 'MS-DOS'\n+19E70C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E70E Compression Method    0000 (0) 'Stored'\n+19E710 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E714 CRC                   1BB78BFC (465013756)\n+19E718 Compressed Size       0000057E (1406)\n+19E71C Uncompressed Size     0000057E (1406)\n+19E720 Filename Length       0034 (52)\n+19E722 Extra Length          0009 (9)\n+19E724 Comment Length        0000 (0)\n+19E726 Disk Start            0000 (0)\n+19E728 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E72A Ext File Attributes   00000000 (0)\n+19E72E Local Header Offset   0017E7A9 (1566633)\n+19E732 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E732: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E766 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E768   Length              0005 (5)\n+19E76A   Flags               01 (1) 'Modification'\n+19E76B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E76F CENTRAL HEADER #341   02014B50 (33639248)\n+19E773 Created Zip Spec      14 (20) '2.0'\n+19E774 Created OS            00 (0) 'MS-DOS'\n+19E775 Extract Zip Spec      14 (20) '2.0'\n+19E776 Extract OS            00 (0) 'MS-DOS'\n+19E777 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E779 Compression Method    0000 (0) 'Stored'\n+19E77B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E77F CRC                   163DDCF2 (373153010)\n+19E783 Compressed Size       00000482 (1154)\n+19E787 Uncompressed Size     00000482 (1154)\n+19E78B Filename Length       0031 (49)\n+19E78D Extra Length          0009 (9)\n+19E78F Comment Length        0000 (0)\n+19E791 Disk Start            0000 (0)\n+19E793 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E795 Ext File Attributes   00000000 (0)\n+19E799 Local Header Offset   0017ED92 (1568146)\n+19E79D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E79D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E7CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E7D0   Length              0005 (5)\n+19E7D2   Flags               01 (1) 'Modification'\n+19E7D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E7D7 CENTRAL HEADER #342   02014B50 (33639248)\n+19E7DB Created Zip Spec      14 (20) '2.0'\n+19E7DC Created OS            00 (0) 'MS-DOS'\n+19E7DD Extract Zip Spec      14 (20) '2.0'\n+19E7DE Extract OS            00 (0) 'MS-DOS'\n+19E7DF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E7E1 Compression Method    0000 (0) 'Stored'\n+19E7E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E7E7 CRC                   6F7884D3 (1870169299)\n+19E7EB Compressed Size       0000064F (1615)\n+19E7EF Uncompressed Size     0000064F (1615)\n+19E7F3 Filename Length       0021 (33)\n+19E7F5 Extra Length          0009 (9)\n+19E7F7 Comment Length        0000 (0)\n+19E7F9 Disk Start            0000 (0)\n+19E7FB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E7FD Ext File Attributes   00000000 (0)\n+19E801 Local Header Offset   0017F27C (1569404)\n+19E805 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E805: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E826 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E828   Length              0005 (5)\n+19E82A   Flags               01 (1) 'Modification'\n+19E82B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E82F CENTRAL HEADER #343   02014B50 (33639248)\n+19E833 Created Zip Spec      14 (20) '2.0'\n+19E834 Created OS            00 (0) 'MS-DOS'\n+19E835 Extract Zip Spec      14 (20) '2.0'\n+19E836 Extract OS            00 (0) 'MS-DOS'\n+19E837 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E839 Compression Method    0000 (0) 'Stored'\n+19E83B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E83F CRC                   7837B4D1 (2016916689)\n+19E843 Compressed Size       0000091E (2334)\n+19E847 Uncompressed Size     0000091E (2334)\n+19E84B Filename Length       002B (43)\n+19E84D Extra Length          0009 (9)\n+19E84F Comment Length        0000 (0)\n+19E851 Disk Start            0000 (0)\n+19E853 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E855 Ext File Attributes   00000000 (0)\n+19E859 Local Header Offset   0017F923 (1571107)\n+19E85D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E85D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E888 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E88A   Length              0005 (5)\n+19E88C   Flags               01 (1) 'Modification'\n+19E88D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E891 CENTRAL HEADER #344   02014B50 (33639248)\n+19E895 Created Zip Spec      14 (20) '2.0'\n+19E896 Created OS            00 (0) 'MS-DOS'\n+19E897 Extract Zip Spec      14 (20) '2.0'\n+19E898 Extract OS            00 (0) 'MS-DOS'\n+19E899 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E89B Compression Method    0000 (0) 'Stored'\n+19E89D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E8A1 CRC                   1FC70E2E (533138990)\n+19E8A5 Compressed Size       000012E0 (4832)\n+19E8A9 Uncompressed Size     000012E0 (4832)\n+19E8AD Filename Length       0029 (41)\n+19E8AF Extra Length          0009 (9)\n+19E8B1 Comment Length        0000 (0)\n+19E8B3 Disk Start            0000 (0)\n+19E8B5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E8B7 Ext File Attributes   00000000 (0)\n+19E8BB Local Header Offset   001802A3 (1573539)\n+19E8BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E8BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E8E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E8EA   Length              0005 (5)\n+19E8EC   Flags               01 (1) 'Modification'\n+19E8ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E8F1 CENTRAL HEADER #345   02014B50 (33639248)\n+19E8F5 Created Zip Spec      14 (20) '2.0'\n+19E8F6 Created OS            00 (0) 'MS-DOS'\n+19E8F7 Extract Zip Spec      14 (20) '2.0'\n+19E8F8 Extract OS            00 (0) 'MS-DOS'\n+19E8F9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E8FB Compression Method    0000 (0) 'Stored'\n+19E8FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E901 CRC                   34F679E6 (888568294)\n+19E905 Compressed Size       00000485 (1157)\n+19E909 Uncompressed Size     00000485 (1157)\n+19E90D Filename Length       0028 (40)\n+19E90F Extra Length          0009 (9)\n+19E911 Comment Length        0000 (0)\n+19E913 Disk Start            0000 (0)\n+19E915 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E917 Ext File Attributes   00000000 (0)\n+19E91B Local Header Offset   001815E3 (1578467)\n+19E91F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E91F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E947 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E949   Length              0005 (5)\n+19E94B   Flags               01 (1) 'Modification'\n+19E94C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E950 CENTRAL HEADER #346   02014B50 (33639248)\n+19E954 Created Zip Spec      14 (20) '2.0'\n+19E955 Created OS            00 (0) 'MS-DOS'\n+19E956 Extract Zip Spec      14 (20) '2.0'\n+19E957 Extract OS            00 (0) 'MS-DOS'\n+19E958 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E95A Compression Method    0000 (0) 'Stored'\n+19E95C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E960 CRC                   A2725211 (2725401105)\n+19E964 Compressed Size       0000128F (4751)\n+19E968 Uncompressed Size     0000128F (4751)\n+19E96C Filename Length       0030 (48)\n+19E96E Extra Length          0009 (9)\n+19E970 Comment Length        0000 (0)\n+19E972 Disk Start            0000 (0)\n+19E974 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E976 Ext File Attributes   00000000 (0)\n+19E97A Local Header Offset   00181AC7 (1579719)\n+19E97E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E97E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19E9AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19E9B0   Length              0005 (5)\n+19E9B2   Flags               01 (1) 'Modification'\n+19E9B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19E9B7 CENTRAL HEADER #347   02014B50 (33639248)\n+19E9BB Created Zip Spec      14 (20) '2.0'\n+19E9BC Created OS            00 (0) 'MS-DOS'\n+19E9BD Extract Zip Spec      14 (20) '2.0'\n+19E9BE Extract OS            00 (0) 'MS-DOS'\n+19E9BF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19E9C1 Compression Method    0000 (0) 'Stored'\n+19E9C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19E9C7 CRC                   646CD426 (1684853798)\n+19E9CB Compressed Size       0000153D (5437)\n+19E9CF Uncompressed Size     0000153D (5437)\n+19E9D3 Filename Length       0026 (38)\n+19E9D5 Extra Length          0009 (9)\n+19E9D7 Comment Length        0000 (0)\n+19E9D9 Disk Start            0000 (0)\n+19E9DB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19E9DD Ext File Attributes   00000000 (0)\n+19E9E1 Local Header Offset   00182DBD (1584573)\n+19E9E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E9E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EA0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EA0D   Length              0005 (5)\n+19EA0F   Flags               01 (1) 'Modification'\n+19EA10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EA14 CENTRAL HEADER #348   02014B50 (33639248)\n+19EA18 Created Zip Spec      14 (20) '2.0'\n+19EA19 Created OS            00 (0) 'MS-DOS'\n+19EA1A Extract Zip Spec      14 (20) '2.0'\n+19EA1B Extract OS            00 (0) 'MS-DOS'\n+19EA1C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19EA1E Compression Method    0000 (0) 'Stored'\n+19EA20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EA24 CRC                   D4D0313F (3570413887)\n+19EA28 Compressed Size       000004DD (1245)\n+19EA2C Uncompressed Size     000004DD (1245)\n+19EA30 Filename Length       0033 (51)\n+19EA32 Extra Length          0009 (9)\n+19EA34 Comment Length        0000 (0)\n+19EA36 Disk Start            0000 (0)\n+19EA38 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EA3A Ext File Attributes   00000000 (0)\n+19EA3E Local Header Offset   00184357 (1590103)\n+19EA42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EA42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EA75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EA77   Length              0005 (5)\n+19EA79   Flags               01 (1) 'Modification'\n+19EA7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EA7E CENTRAL HEADER #349   02014B50 (33639248)\n+19EA82 Created Zip Spec      14 (20) '2.0'\n+19EA83 Created OS            00 (0) 'MS-DOS'\n+19EA84 Extract Zip Spec      14 (20) '2.0'\n+19EA85 Extract OS            00 (0) 'MS-DOS'\n+19EA86 General Purpose Flag  0000 (0)\n+19EA88 Compression Method    0000 (0) 'Stored'\n+19EA8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EA8E CRC                   00000000 (0)\n+19EA92 Compressed Size       00000000 (0)\n+19EA96 Uncompressed Size     00000000 (0)\n+19EA9A Filename Length       0015 (21)\n+19EA9C Extra Length          0009 (9)\n+19EA9E Comment Length        0000 (0)\n+19EAA0 Disk Start            0000 (0)\n+19EAA2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EAA4 Ext File Attributes   00000000 (0)\n+19EAA8 Local Header Offset   0018489E (1591454)\n+19EAAC Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EAAC: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EAC1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EAC3   Length              0005 (5)\n+19EAC5   Flags               01 (1) 'Modification'\n+19EAC6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EACA CENTRAL HEADER #350   02014B50 (33639248)\n+19EACE Created Zip Spec      14 (20) '2.0'\n+19EACF Created OS            00 (0) 'MS-DOS'\n+19EAD0 Extract Zip Spec      14 (20) '2.0'\n+19EAD1 Extract OS            00 (0) 'MS-DOS'\n+19EAD2 General Purpose Flag  0000 (0)\n+19EAD4 Compression Method    0000 (0) 'Stored'\n+19EAD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EADA CRC                   00000000 (0)\n+19EADE Compressed Size       00000000 (0)\n+19EAE2 Uncompressed Size     00000000 (0)\n+19EAE6 Filename Length       001B (27)\n+19EAE8 Extra Length          0009 (9)\n+19EAEA Comment Length        0000 (0)\n+19EAEC Disk Start            0000 (0)\n+19EAEE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EAF0 Ext File Attributes   00000000 (0)\n+19EAF4 Local Header Offset   001848DA (1591514)\n+19EAF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EAF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EB13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EB15   Length              0005 (5)\n+19EB17   Flags               01 (1) 'Modification'\n+19EB18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EB1C CENTRAL HEADER #351   02014B50 (33639248)\n+19EB20 Created Zip Spec      14 (20) '2.0'\n+19EB21 Created OS            00 (0) 'MS-DOS'\n+19EB22 Extract Zip Spec      14 (20) '2.0'\n+19EB23 Extract OS            00 (0) 'MS-DOS'\n+19EB24 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19EB26 Compression Method    0000 (0) 'Stored'\n+19EB28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EB2C CRC                   63368ED1 (1664519889)\n+19EB30 Compressed Size       000003FE (1022)\n+19EB34 Uncompressed Size     000003FE (1022)\n+19EB38 Filename Length       0037 (55)\n+19EB3A Extra Length          0009 (9)\n+19EB3C Comment Length        0000 (0)\n+19EB3E Disk Start            0000 (0)\n+19EB40 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EB42 Ext File Attributes   00000000 (0)\n+19EB46 Local Header Offset   0018491C (1591580)\n+19EB4A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EB4A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EB81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EB83   Length              0005 (5)\n+19EB85   Flags               01 (1) 'Modification'\n+19EB86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EB8A CENTRAL HEADER #352   02014B50 (33639248)\n+19EB8E Created Zip Spec      14 (20) '2.0'\n+19EB8F Created OS            00 (0) 'MS-DOS'\n+19EB90 Extract Zip Spec      14 (20) '2.0'\n+19EB91 Extract OS            00 (0) 'MS-DOS'\n+19EB92 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19EB94 Compression Method    0000 (0) 'Stored'\n+19EB96 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EB9A CRC                   876E0335 (2272133941)\n+19EB9E Compressed Size       00001328 (4904)\n+19EBA2 Uncompressed Size     00001328 (4904)\n+19EBA6 Filename Length       0030 (48)\n+19EBA8 Extra Length          0009 (9)\n+19EBAA Comment Length        0000 (0)\n+19EBAC Disk Start            0000 (0)\n+19EBAE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EBB0 Ext File Attributes   00000000 (0)\n+19EBB4 Local Header Offset   00184D88 (1592712)\n+19EBB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EBB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EBE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EBEA   Length              0005 (5)\n+19EBEC   Flags               01 (1) 'Modification'\n+19EBED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EBF1 CENTRAL HEADER #353   02014B50 (33639248)\n+19EBF5 Created Zip Spec      14 (20) '2.0'\n+19EBF6 Created OS            00 (0) 'MS-DOS'\n+19EBF7 Extract Zip Spec      14 (20) '2.0'\n+19EBF8 Extract OS            00 (0) 'MS-DOS'\n+19EBF9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19EBFB Compression Method    0000 (0) 'Stored'\n+19EBFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EC01 CRC                   1E67CB82 (510118786)\n+19EC05 Compressed Size       00000A90 (2704)\n+19EC09 Uncompressed Size     00000A90 (2704)\n+19EC0D Filename Length       002F (47)\n+19EC0F Extra Length          0009 (9)\n+19EC11 Comment Length        0000 (0)\n+19EC13 Disk Start            0000 (0)\n+19EC15 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EC17 Ext File Attributes   00000000 (0)\n+19EC1B Local Header Offset   00186117 (1597719)\n+19EC1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EC1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EC4E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EC50   Length              0005 (5)\n+19EC52   Flags               01 (1) 'Modification'\n+19EC53   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EC57 CENTRAL HEADER #354   02014B50 (33639248)\n+19EC5B Created Zip Spec      14 (20) '2.0'\n+19EC5C Created OS            00 (0) 'MS-DOS'\n+19EC5D Extract Zip Spec      14 (20) '2.0'\n+19EC5E Extract OS            00 (0) 'MS-DOS'\n+19EC5F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19EC61 Compression Method    0000 (0) 'Stored'\n+19EC63 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EC67 CRC                   61CAA47B (1640670331)\n+19EC6B Compressed Size       000003DE (990)\n+19EC6F Uncompressed Size     000003DE (990)\n+19EC73 Filename Length       0036 (54)\n+19EC75 Extra Length          0009 (9)\n+19EC77 Comment Length        0000 (0)\n+19EC79 Disk Start            0000 (0)\n+19EC7B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EC7D Ext File Attributes   00000000 (0)\n+19EC81 Local Header Offset   00186C0D (1600525)\n+19EC85 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EC85: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19ECBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19ECBD   Length              0005 (5)\n+19ECBF   Flags               01 (1) 'Modification'\n+19ECC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19ECC4 CENTRAL HEADER #355   02014B50 (33639248)\n+19ECC8 Created Zip Spec      14 (20) '2.0'\n+19ECC9 Created OS            00 (0) 'MS-DOS'\n+19ECCA Extract Zip Spec      14 (20) '2.0'\n+19ECCB Extract OS            00 (0) 'MS-DOS'\n+19ECCC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19ECCE Compression Method    0000 (0) 'Stored'\n+19ECD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19ECD4 CRC                   607FF27E (1618997886)\n+19ECD8 Compressed Size       00000C53 (3155)\n+19ECDC Uncompressed Size     00000C53 (3155)\n+19ECE0 Filename Length       0033 (51)\n+19ECE2 Extra Length          0009 (9)\n+19ECE4 Comment Length        0000 (0)\n+19ECE6 Disk Start            0000 (0)\n+19ECE8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19ECEA Ext File Attributes   00000000 (0)\n+19ECEE Local Header Offset   00187058 (1601624)\n+19ECF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19ECF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19ED25 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19ED27   Length              0005 (5)\n+19ED29   Flags               01 (1) 'Modification'\n+19ED2A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19ED2E CENTRAL HEADER #356   02014B50 (33639248)\n+19ED32 Created Zip Spec      14 (20) '2.0'\n+19ED33 Created OS            00 (0) 'MS-DOS'\n+19ED34 Extract Zip Spec      14 (20) '2.0'\n+19ED35 Extract OS            00 (0) 'MS-DOS'\n+19ED36 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19ED38 Compression Method    0000 (0) 'Stored'\n+19ED3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19ED3E CRC                   7B7924E9 (2071536873)\n+19ED42 Compressed Size       00001C78 (7288)\n+19ED46 Uncompressed Size     00001C78 (7288)\n+19ED4A Filename Length       002D (45)\n+19ED4C Extra Length          0009 (9)\n+19ED4E Comment Length        0000 (0)\n+19ED50 Disk Start            0000 (0)\n+19ED52 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19ED54 Ext File Attributes   00000000 (0)\n+19ED58 Local Header Offset   00187D15 (1604885)\n+19ED5C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19ED5C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19ED89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19ED8B   Length              0005 (5)\n+19ED8D   Flags               01 (1) 'Modification'\n+19ED8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19ED92 CENTRAL HEADER #357   02014B50 (33639248)\n+19ED96 Created Zip Spec      14 (20) '2.0'\n+19ED97 Created OS            00 (0) 'MS-DOS'\n+19ED98 Extract Zip Spec      14 (20) '2.0'\n+19ED99 Extract OS            00 (0) 'MS-DOS'\n+19ED9A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19ED9C Compression Method    0000 (0) 'Stored'\n+19ED9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EDA2 CRC                   707F9167 (1887408487)\n+19EDA6 Compressed Size       00000C0D (3085)\n+19EDAA Uncompressed Size     00000C0D (3085)\n+19EDAE Filename Length       0030 (48)\n+19EDB0 Extra Length          0009 (9)\n+19EDB2 Comment Length        0000 (0)\n+19EDB4 Disk Start            0000 (0)\n+19EDB6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EDB8 Ext File Attributes   00000000 (0)\n+19EDBC Local Header Offset   001899F1 (1612273)\n+19EDC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EDC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EDF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EDF2   Length              0005 (5)\n+19EDF4   Flags               01 (1) 'Modification'\n+19EDF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EDF9 CENTRAL HEADER #358   02014B50 (33639248)\n+19EDFD Created Zip Spec      14 (20) '2.0'\n+19EDFE Created OS            00 (0) 'MS-DOS'\n+19EDFF Extract Zip Spec      14 (20) '2.0'\n+19EE00 Extract OS            00 (0) 'MS-DOS'\n+19EE01 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19EE03 Compression Method    0000 (0) 'Stored'\n+19EE05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EE09 CRC                   FDA638C9 (4255529161)\n+19EE0D Compressed Size       00000AC1 (2753)\n+19EE11 Uncompressed Size     00000AC1 (2753)\n+19EE15 Filename Length       0033 (51)\n+19EE17 Extra Length          0009 (9)\n+19EE19 Comment Length        0000 (0)\n+19EE1B Disk Start            0000 (0)\n+19EE1D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EE1F Ext File Attributes   00000000 (0)\n+19EE23 Local Header Offset   0018A665 (1615461)\n+19EE27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EE27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EE5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EE5C   Length              0005 (5)\n+19EE5E   Flags               01 (1) 'Modification'\n+19EE5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EE63 CENTRAL HEADER #359   02014B50 (33639248)\n+19EE67 Created Zip Spec      14 (20) '2.0'\n+19EE68 Created OS            00 (0) 'MS-DOS'\n+19EE69 Extract Zip Spec      14 (20) '2.0'\n+19EE6A Extract OS            00 (0) 'MS-DOS'\n+19EE6B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19EE6D Compression Method    0000 (0) 'Stored'\n+19EE6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EE73 CRC                   5FA42AEE (1604594414)\n+19EE77 Compressed Size       00001ADA (6874)\n+19EE7B Uncompressed Size     00001ADA (6874)\n+19EE7F Filename Length       002D (45)\n+19EE81 Extra Length          0009 (9)\n+19EE83 Comment Length        0000 (0)\n+19EE85 Disk Start            0000 (0)\n+19EE87 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EE89 Ext File Attributes   00000000 (0)\n+19EE8D Local Header Offset   0018B190 (1618320)\n+19EE91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EE91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EEBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EEC0   Length              0005 (5)\n+19EEC2   Flags               01 (1) 'Modification'\n+19EEC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EEC7 CENTRAL HEADER #360   02014B50 (33639248)\n+19EECB Created Zip Spec      14 (20) '2.0'\n+19EECC Created OS            00 (0) 'MS-DOS'\n+19EECD Extract Zip Spec      14 (20) '2.0'\n+19EECE Extract OS            00 (0) 'MS-DOS'\n+19EECF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19EED1 Compression Method    0000 (0) 'Stored'\n+19EED3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EED7 CRC                   619FED81 (1637870977)\n+19EEDB Compressed Size       00001181 (4481)\n+19EEDF Uncompressed Size     00001181 (4481)\n+19EEE3 Filename Length       0031 (49)\n+19EEE5 Extra Length          0009 (9)\n+19EEE7 Comment Length        0000 (0)\n+19EEE9 Disk Start            0000 (0)\n+19EEEB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EEED Ext File Attributes   00000000 (0)\n+19EEF1 Local Header Offset   0018CCCE (1625294)\n+19EEF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EEF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EF26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EF28   Length              0005 (5)\n+19EF2A   Flags               01 (1) 'Modification'\n+19EF2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EF2F CENTRAL HEADER #361   02014B50 (33639248)\n+19EF33 Created Zip Spec      14 (20) '2.0'\n+19EF34 Created OS            00 (0) 'MS-DOS'\n+19EF35 Extract Zip Spec      14 (20) '2.0'\n+19EF36 Extract OS            00 (0) 'MS-DOS'\n+19EF37 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19EF39 Compression Method    0000 (0) 'Stored'\n+19EF3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EF3F CRC                   E8166721 (3893782305)\n+19EF43 Compressed Size       00000C82 (3202)\n+19EF47 Uncompressed Size     00000C82 (3202)\n+19EF4B Filename Length       002F (47)\n+19EF4D Extra Length          0009 (9)\n+19EF4F Comment Length        0000 (0)\n+19EF51 Disk Start            0000 (0)\n+19EF53 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EF55 Ext File Attributes   00000000 (0)\n+19EF59 Local Header Offset   0018DEB7 (1629879)\n+19EF5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EF5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EF8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EF8E   Length              0005 (5)\n+19EF90   Flags               01 (1) 'Modification'\n+19EF91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EF95 CENTRAL HEADER #362   02014B50 (33639248)\n+19EF99 Created Zip Spec      14 (20) '2.0'\n+19EF9A Created OS            00 (0) 'MS-DOS'\n+19EF9B Extract Zip Spec      14 (20) '2.0'\n+19EF9C Extract OS            00 (0) 'MS-DOS'\n+19EF9D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19EF9F Compression Method    0000 (0) 'Stored'\n+19EFA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19EFA5 CRC                   363316B0 (909317808)\n+19EFA9 Compressed Size       00001D36 (7478)\n+19EFAD Uncompressed Size     00001D36 (7478)\n+19EFB1 Filename Length       0031 (49)\n+19EFB3 Extra Length          0009 (9)\n+19EFB5 Comment Length        0000 (0)\n+19EFB7 Disk Start            0000 (0)\n+19EFB9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19EFBB Ext File Attributes   00000000 (0)\n+19EFBF Local Header Offset   0018EB9F (1633183)\n+19EFC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19EFC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19EFF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19EFF6   Length              0005 (5)\n+19EFF8   Flags               01 (1) 'Modification'\n+19EFF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19EFFD CENTRAL HEADER #363   02014B50 (33639248)\n+19F001 Created Zip Spec      14 (20) '2.0'\n+19F002 Created OS            00 (0) 'MS-DOS'\n+19F003 Extract Zip Spec      14 (20) '2.0'\n+19F004 Extract OS            00 (0) 'MS-DOS'\n+19F005 General Purpose Flag  0000 (0)\n+19F007 Compression Method    0000 (0) 'Stored'\n+19F009 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19F00D CRC                   00000000 (0)\n+19F011 Compressed Size       00000000 (0)\n+19F015 Uncompressed Size     00000000 (0)\n+19F019 Filename Length       001D (29)\n+19F01B Extra Length          0009 (9)\n+19F01D Comment Length        0000 (0)\n+19F01F Disk Start            0000 (0)\n+19F021 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19F023 Ext File Attributes   00000000 (0)\n+19F027 Local Header Offset   0019093D (1640765)\n+19F02B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F02B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19F048 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19F04A   Length              0005 (5)\n+19F04C   Flags               01 (1) 'Modification'\n+19F04D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19F051 CENTRAL HEADER #364   02014B50 (33639248)\n+19F055 Created Zip Spec      14 (20) '2.0'\n+19F056 Created OS            00 (0) 'MS-DOS'\n+19F057 Extract Zip Spec      14 (20) '2.0'\n+19F058 Extract OS            00 (0) 'MS-DOS'\n+19F059 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19F05B Compression Method    0000 (0) 'Stored'\n+19F05D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19F061 CRC                   8C6F354A (2356098378)\n+19F065 Compressed Size       00000398 (920)\n+19F069 Uncompressed Size     00000398 (920)\n+19F06D Filename Length       002D (45)\n+19F06F Extra Length          0009 (9)\n+19F071 Comment Length        0000 (0)\n+19F073 Disk Start            0000 (0)\n+19F075 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19F077 Ext File Attributes   00000000 (0)\n+19F07B Local Header Offset   00190981 (1640833)\n+19F07F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F07F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19F0AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19F0AE   Length              0005 (5)\n+19F0B0   Flags               01 (1) 'Modification'\n+19F0B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19F0B5 CENTRAL HEADER #365   02014B50 (33639248)\n+19F0B9 Created Zip Spec      14 (20) '2.0'\n+19F0BA Created OS            00 (0) 'MS-DOS'\n+19F0BB Extract Zip Spec      14 (20) '2.0'\n+19F0BC Extract OS            00 (0) 'MS-DOS'\n+19F0BD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19F0BF Compression Method    0000 (0) 'Stored'\n+19F0C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19F0C5 CRC                   4B31CC84 (1261554820)\n+19F0C9 Compressed Size       00000431 (1073)\n+19F0CD Uncompressed Size     00000431 (1073)\n+19F0D1 Filename Length       002D (45)\n+19F0D3 Extra Length          0009 (9)\n+19F0D5 Comment Length        0000 (0)\n+19F0D7 Disk Start            0000 (0)\n+19F0D9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19F0DB Ext File Attributes   00000000 (0)\n+19F0DF Local Header Offset   00190D7D (1641853)\n+19F0E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F0E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19F110 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19F112   Length              0005 (5)\n+19F114   Flags               01 (1) 'Modification'\n+19F115   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19F119 CENTRAL HEADER #366   02014B50 (33639248)\n+19F11D Created Zip Spec      14 (20) '2.0'\n+19F11E Created OS            00 (0) 'MS-DOS'\n+19F11F Extract Zip Spec      14 (20) '2.0'\n+19F120 Extract OS            00 (0) 'MS-DOS'\n+19F121 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19F123 Compression Method    0000 (0) 'Stored'\n+19F125 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19F129 CRC                   66AD4132 (1722630450)\n+19F12D Compressed Size       00000442 (1090)\n+19F131 Uncompressed Size     00000442 (1090)\n+19F135 Filename Length       0035 (53)\n+19F137 Extra Length          0009 (9)\n+19F139 Comment Length        0000 (0)\n+19F13B Disk Start            0000 (0)\n+19F13D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19F13F Ext File Attributes   00000000 (0)\n+19F143 Local Header Offset   00191212 (1643026)\n+19F147 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F147: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19F17C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19F17E   Length              0005 (5)\n+19F180   Flags               01 (1) 'Modification'\n+19F181   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19F185 CENTRAL HEADER #367   02014B50 (33639248)\n+19F189 Created Zip Spec      14 (20) '2.0'\n+19F18A Created OS            00 (0) 'MS-DOS'\n+19F18B Extract Zip Spec      14 (20) '2.0'\n+19F18C Extract OS            00 (0) 'MS-DOS'\n+19F18D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19F18F Compression Method    0000 (0) 'Stored'\n+19F191 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19F195 CRC                   49B9FF79 (1236926329)\n+19F199 Compressed Size       00000809 (2057)\n+19F19D Uncompressed Size     00000809 (2057)\n+19F1A1 Filename Length       0032 (50)\n+19F1A3 Extra Length          0009 (9)\n+19F1A5 Comment Length        0000 (0)\n+19F1A7 Disk Start            0000 (0)\n+19F1A9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19F1AB Ext File Attributes   00000000 (0)\n+19F1AF Local Header Offset   001916C0 (1644224)\n+19F1B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F1B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19F1E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19F1E7   Length              0005 (5)\n+19F1E9   Flags               01 (1) 'Modification'\n+19F1EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19F1EE CENTRAL HEADER #368   02014B50 (33639248)\n+19F1F2 Created Zip Spec      14 (20) '2.0'\n+19F1F3 Created OS            00 (0) 'MS-DOS'\n+19F1F4 Extract Zip Spec      14 (20) '2.0'\n+19F1F5 Extract OS            00 (0) 'MS-DOS'\n+19F1F6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19F1F8 Compression Method    0000 (0) 'Stored'\n+19F1FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19F1FE CRC                   D07DEF14 (3497914132)\n+19F202 Compressed Size       0000078D (1933)\n+19F206 Uncompressed Size     0000078D (1933)\n+19F20A Filename Length       0030 (48)\n+19F20C Extra Length          0009 (9)\n+19F20E Comment Length        0000 (0)\n+19F210 Disk Start            0000 (0)\n+19F212 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19F214 Ext File Attributes   00000000 (0)\n+19F218 Local Header Offset   00191F32 (1646386)\n+19F21C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F21C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19F24C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19F24E   Length              0005 (5)\n+19F250   Flags               01 (1) 'Modification'\n+19F251   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19F255 CENTRAL HEADER #369   02014B50 (33639248)\n+19F259 Created Zip Spec      14 (20) '2.0'\n+19F25A Created OS            00 (0) 'MS-DOS'\n+19F25B Extract Zip Spec      14 (20) '2.0'\n+19F25C Extract OS            00 (0) 'MS-DOS'\n+19F25D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19F25F Compression Method    0000 (0) 'Stored'\n+19F261 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19F265 CRC                   4AFAB67E (1257944702)\n+19F269 Compressed Size       00000448 (1096)\n+19F26D Uncompressed Size     00000448 (1096)\n+19F271 Filename Length       0038 (56)\n+19F273 Extra Length          0009 (9)\n+19F275 Comment Length        0000 (0)\n+19F277 Disk Start            0000 (0)\n+19F279 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19F27B Ext File Attributes   00000000 (0)\n+19F27F Local Header Offset   00192726 (1648422)\n+19F283 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F283: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19F2BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19F2BD   Length              0005 (5)\n+19F2BF   Flags               01 (1) 'Modification'\n+19F2C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19F2C4 CENTRAL HEADER #370   02014B50 (33639248)\n+19F2C8 Created Zip Spec      14 (20) '2.0'\n+19F2C9 Created OS            00 (0) 'MS-DOS'\n+19F2CA Extract Zip Spec      14 (20) '2.0'\n+19F2CB Extract OS            00 (0) 'MS-DOS'\n+19F2CC General Purpose Flag  0000 (0)\n+19F2CE Compression Method    0000 (0) 'Stored'\n+19F2D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19F2D4 CRC                   00000000 (0)\n+19F2D8 Compressed Size       00000000 (0)\n+19F2DC Uncompressed Size     00000000 (0)\n+19F2E0 Filename Length       001D (29)\n+19F2E2 Extra Length          0009 (9)\n+19F2E4 Comment Length        0000 (0)\n+19F2E6 Disk Start            0000 (0)\n+19F2E8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19F2EA Ext File Attributes   00000000 (0)\n+19F2EE Local Header Offset   00192BDD (1649629)\n+19F2F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F2F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19F30F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19F311   Length              0005 (5)\n+19F313   Flags               01 (1) 'Modification'\n+19F314   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19F318 CENTRAL HEADER #371   02014B50 (33639248)\n+19F31C Created Zip Spec      14 (20) '2.0'\n+19F31D Created OS            00 (0) 'MS-DOS'\n+19F31E Extract Zip Spec      14 (20) '2.0'\n+19F31F Extract OS            00 (0) 'MS-DOS'\n+19F320 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19F322 Compression Method    0000 (0) 'Stored'\n+19F324 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19F328 CRC                   C563319A (3311612314)\n+19F32C Compressed Size       00000B90 (2960)\n+19F330 Uncompressed Size     00000B90 (2960)\n+19F334 Filename Length       0036 (54)\n+19F336 Extra Length          0009 (9)\n+19F338 Comment Length        0000 (0)\n+19F33A Disk Start            0000 (0)\n+19F33C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19F33E Ext File Attributes   00000000 (0)\n+19F342 Local Header Offset   00192C21 (1649697)\n+19F346 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F346: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19F37C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19F37E   Length              0005 (5)\n+19F380   Flags               01 (1) 'Modification'\n+19F381   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19F385 CENTRAL HEADER #372   02014B50 (33639248)\n+19F389 Created Zip Spec      14 (20) '2.0'\n+19F38A Created OS            00 (0) 'MS-DOS'\n+19F38B Extract Zip Spec      14 (20) '2.0'\n+19F38C Extract OS            00 (0) 'MS-DOS'\n+19F38D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19F38F Compression Method    0000 (0) 'Stored'\n+19F391 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19F395 CRC                   1187A07F (294101119)\n+19F399 Compressed Size       000010B8 (4280)\n+19F39D Uncompressed Size     000010B8 (4280)\n+19F3A1 Filename Length       002F (47)\n+19F3A3 Extra Length          0009 (9)\n+19F3A5 Comment Length        0000 (0)\n+19F3A7 Disk Start            0000 (0)\n+19F3A9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19F3AB Ext File Attributes   00000000 (0)\n+19F3AF Local Header Offset   0019381E (1652766)\n+19F3B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F3B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19F3E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19F3E4   Length              0005 (5)\n+19F3E6   Flags               01 (1) 'Modification'\n+19F3E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19F3EB CENTRAL HEADER #373   02014B50 (33639248)\n+19F3EF Created Zip Spec      14 (20) '2.0'\n+19F3F0 Created OS            00 (0) 'MS-DOS'\n+19F3F1 Extract Zip Spec      14 (20) '2.0'\n+19F3F2 Extract OS            00 (0) 'MS-DOS'\n+19F3F3 General Purpose Flag  0000 (0)\n+19F3F5 Compression Method    0000 (0) 'Stored'\n+19F3F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19F3FB CRC                   00000000 (0)\n+19F3FF Compressed Size       00000000 (0)\n+19F403 Uncompressed Size     00000000 (0)\n+19F407 Filename Length       0009 (9)\n+19F409 Extra Length          0009 (9)\n+19F40B Comment Length        0000 (0)\n+19F40D Disk Start            0000 (0)\n+19F40F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19F411 Ext File Attributes   00000000 (0)\n+19F415 Local Header Offset   0019493C (1657148)\n+19F419 Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F419: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+19F422 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19F424   Length              0005 (5)\n+19F426   Flags               01 (1) 'Modification'\n+19F427   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19F42B CENTRAL HEADER #374   02014B50 (33639248)\n+19F42F Created Zip Spec      14 (20) '2.0'\n+19F430 Created OS            00 (0) 'MS-DOS'\n+19F431 Extract Zip Spec      14 (20) '2.0'\n+19F432 Extract OS            00 (0) 'MS-DOS'\n+19F433 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+19F435 Compression Method    0000 (0) 'Stored'\n+19F437 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19F43B CRC                   1096B4BF (278312127)\n+19F43F Compressed Size       0000124E (4686)\n+19F443 Uncompressed Size     0000124E (4686)\n+19F447 Filename Length       001E (30)\n+19F449 Extra Length          0009 (9)\n+19F44B Comment Length        0000 (0)\n+19F44D Disk Start            0000 (0)\n+19F44F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+19F451 Ext File Attributes   00000000 (0)\n+19F455 Local Header Offset   0019496C (1657196)\n+19F459 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F459: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19F477 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19F479   Length              0005 (5)\n+19F47B   Flags               01 (1) 'Modification'\n+19F47C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+19F480 END CENTRAL HEADER    06054B50 (101010256)\n+19F484 Number of this disk   0000 (0)\n+19F486 Central Dir Disk no   0000 (0)\n+19F488 Entries in this disk  0176 (374)\n+19F48A Total Entries         0176 (374)\n+19F48C Size of Central Dir   00009871 (39025)\n+19F490 Offset to Central Dir 00195C0F (1661967)\n+19F494 Comment Length        0000 (0)\n #\n # Warning Count: 748\n #\n # Done\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory", "source2": "META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,2 +1,2 @@\n-nop=org.apache.dubbo.common.config.configcenter.nop.NopDynamicConfigurationFactory\n+nop=org.apache.dubbo.common.config.configcenter.nop.NopDynamicConfigurationFactory\r\n file=org.apache.dubbo.common.config.configcenter.file.FileSystemDynamicConfigurationFactory\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.common.context.FrameworkExt", "source2": "META-INF/dubbo/internal/org.apache.dubbo.common.context.FrameworkExt", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,3 +1,3 @@\n-config=org.apache.dubbo.config.context.ConfigManager\n-environment=org.apache.dubbo.common.config.Environment\n+config=org.apache.dubbo.config.context.ConfigManager\r\n+environment=org.apache.dubbo.common.config.Environment\r\n repository=org.apache.dubbo.rpc.model.ServiceRepository\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.common.convert.Converter", "source2": "META-INF/dubbo/internal/org.apache.dubbo.common.convert.Converter", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,11 +1,11 @@\n-# org.apache.dubbo.common.convert.Converter\n-string-to-boolean=org.apache.dubbo.common.convert.StringToBooleanConverter\n-string-to-character=org.apache.dubbo.common.convert.StringToCharacterConverter\n-string-to-char-array=org.apache.dubbo.common.convert.StringToCharArrayConverter\n-string-to-double=org.apache.dubbo.common.convert.StringToDoubleConverter\n-string-to-float=org.apache.dubbo.common.convert.StringToFloatConverter\n-string-to-integer=org.apache.dubbo.common.convert.StringToIntegerConverter\n-string-to-long=org.apache.dubbo.common.convert.StringToLongConverter\n-string-to-optional=org.apache.dubbo.common.convert.StringToOptionalConverter\n-string-to-short=org.apache.dubbo.common.convert.StringToShortConverter\n+# org.apache.dubbo.common.convert.Converter\r\n+string-to-boolean=org.apache.dubbo.common.convert.StringToBooleanConverter\r\n+string-to-character=org.apache.dubbo.common.convert.StringToCharacterConverter\r\n+string-to-char-array=org.apache.dubbo.common.convert.StringToCharArrayConverter\r\n+string-to-double=org.apache.dubbo.common.convert.StringToDoubleConverter\r\n+string-to-float=org.apache.dubbo.common.convert.StringToFloatConverter\r\n+string-to-integer=org.apache.dubbo.common.convert.StringToIntegerConverter\r\n+string-to-long=org.apache.dubbo.common.convert.StringToLongConverter\r\n+string-to-optional=org.apache.dubbo.common.convert.StringToOptionalConverter\r\n+string-to-short=org.apache.dubbo.common.convert.StringToShortConverter\r\n string-to-string=org.apache.dubbo.common.convert.StringToStringConverter\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.common.convert.multiple.MultiValueConverter", "source2": "META-INF/dubbo/internal/org.apache.dubbo.common.convert.multiple.MultiValueConverter", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,12 +1,12 @@\n-# org.apache.dubbo.common.convert.multiple.MultiValueConverter\n-string-to-array=org.apache.dubbo.common.convert.multiple.StringToArrayConverter\n-string-to-blocking-deque=org.apache.dubbo.common.convert.multiple.StringToBlockingDequeConverter\n-string-to-blocking-queue=org.apache.dubbo.common.convert.multiple.StringToBlockingQueueConverter\n-string-to-collection=org.apache.dubbo.common.convert.multiple.StringToCollectionConverter\n-string-to-deque=org.apache.dubbo.common.convert.multiple.StringToDequeConverter\n-string-to-list=org.apache.dubbo.common.convert.multiple.StringToListConverter\n-string-to-navigable-set=org.apache.dubbo.common.convert.multiple.StringToNavigableSetConverter\n-string-to-queue=org.apache.dubbo.common.convert.multiple.StringToQueueConverter\n-string-to-set=org.apache.dubbo.common.convert.multiple.StringToSetConverter\n-string-to-sorted-set=org.apache.dubbo.common.convert.multiple.StringToSortedSetConverter\n-string-to-transfer-queue=org.apache.dubbo.common.convert.multiple.StringToTransferQueueConverter\n+# org.apache.dubbo.common.convert.multiple.MultiValueConverter\r\n+string-to-array=org.apache.dubbo.common.convert.multiple.StringToArrayConverter\r\n+string-to-blocking-deque=org.apache.dubbo.common.convert.multiple.StringToBlockingDequeConverter\r\n+string-to-blocking-queue=org.apache.dubbo.common.convert.multiple.StringToBlockingQueueConverter\r\n+string-to-collection=org.apache.dubbo.common.convert.multiple.StringToCollectionConverter\r\n+string-to-deque=org.apache.dubbo.common.convert.multiple.StringToDequeConverter\r\n+string-to-list=org.apache.dubbo.common.convert.multiple.StringToListConverter\r\n+string-to-navigable-set=org.apache.dubbo.common.convert.multiple.StringToNavigableSetConverter\r\n+string-to-queue=org.apache.dubbo.common.convert.multiple.StringToQueueConverter\r\n+string-to-set=org.apache.dubbo.common.convert.multiple.StringToSetConverter\r\n+string-to-sorted-set=org.apache.dubbo.common.convert.multiple.StringToSortedSetConverter\r\n+string-to-transfer-queue=org.apache.dubbo.common.convert.multiple.StringToTransferQueueConverter\r\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.event.EventDispatcher", "source2": "META-INF/dubbo/internal/org.apache.dubbo.event.EventDispatcher", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,2 +1,2 @@\n-direct=org.apache.dubbo.event.DirectEventDispatcher\n-parallel=org.apache.dubbo.event.ParallelEventDispatcher\n+direct=org.apache.dubbo.event.DirectEventDispatcher\r\n+parallel=org.apache.dubbo.event.ParallelEventDispatcher\r\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.rpc.model.BuiltinServiceDetector", "source2": "META-INF/dubbo/internal/org.apache.dubbo.rpc.model.BuiltinServiceDetector", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,2 +1,2 @@\n-echo=org.apache.dubbo.rpc.service.EchoServiceDetector\n+echo=org.apache.dubbo.rpc.service.EchoServiceDetector\r\n generic=org.apache.dubbo.rpc.service.GenericServiceDetector\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-common/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-common/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,187 +1,181 @@\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 2d70 6172 656e 743c 2f61 7274 6966  bo-parent</artif\n-000004a0: 6163 7449 643e 0d0a 2020 2020 3c76 6572  actId>..    <ver\n-000004b0: 7369 6f6e 3e32 2e37 2e31 303c 2f76 6572  sion>2.7.10</ver\n-000004c0: 7369 6f6e 3e0d 0a20 203c 2f70 6172 656e  sion>..  </paren\n-000004d0: 743e 0d0a 2020 3c67 726f 7570 4964 3e6f  t>..  <groupId>o\n-000004e0: 7267 2e61 7061 6368 652e 6475 6262 6f3c  rg.apache.dubbo<\n-000004f0: 2f67 726f 7570 4964 3e0d 0a20 203c 6172  /groupId>..  <ar\n-00000500: 7469 6661 6374 4964 3e64 7562 626f 2d63  tifactId>dubbo-c\n-00000510: 6f6d 6d6f 6e3c 2f61 7274 6966 6163 7449  ommon</artifactI\n-00000520: 643e 0d0a 2020 3c76 6572 7369 6f6e 3e32  d>..  <version>2\n-00000530: 2e37 2e31 303c 2f76 6572 7369 6f6e 3e0d  .7.10</version>.\n-00000540: 0a20 203c 6e61 6d65 3e24 7b70 726f 6a65  .  <name>${proje\n-00000550: 6374 2e61 7274 6966 6163 7449 647d 3c2f  ct.artifactId}</\n-00000560: 6e61 6d65 3e0d 0a20 203c 6465 7363 7269  name>..  <descri\n-00000570: 7074 696f 6e3e 5468 6520 636f 6d6d 6f6e  ption>The common\n-00000580: 206d 6f64 756c 6520 6f66 2064 7562 626f   module of dubbo\n-00000590: 2070 726f 6a65 6374 3c2f 6465 7363 7269   project</descri\n-000005a0: 7074 696f 6e3e 0d0a 2020 3c6c 6963 656e  ption>..  <licen\n-000005b0: 7365 733e 0d0a 2020 2020 3c6c 6963 656e  ses>..    <licen\n-000005c0: 7365 3e0d 0a20 2020 2020 203c 6e61 6d65  se>..      <name\n-000005d0: 3e41 7061 6368 6520 4c69 6365 6e73 652c  >Apache License,\n-000005e0: 2056 6572 7369 6f6e 2032 2e30 3c2f 6e61   Version 2.0</na\n-000005f0: 6d65 3e0d 0a20 2020 2020 203c 7572 6c3e  me>..      <url>\n-00000600: 6874 7470 3a2f 2f77 7777 2e61 7061 6368  http://www.apach\n-00000610: 652e 6f72 672f 6c69 6365 6e73 6573 2f4c  e.org/licenses/L\n-00000620: 4943 454e 5345 2d32 2e30 3c2f 7572 6c3e  ICENSE-2.0</url>\n-00000630: 0d0a 2020 2020 2020 3c64 6973 7472 6962  ..      <distrib\n-00000640: 7574 696f 6e3e 7265 706f 3c2f 6469 7374  ution>repo</dist\n-00000650: 7269 6275 7469 6f6e 3e0d 0a20 2020 203c  ribution>..    <\n-00000660: 2f6c 6963 656e 7365 3e0d 0a20 203c 2f6c  /license>..  </l\n-00000670: 6963 656e 7365 733e 0d0a 2020 3c70 726f  icenses>..  <pro\n-00000680: 7065 7274 6965 733e 0d0a 2020 2020 3c73  perties>..    <s\n-00000690: 6b69 705f 6d61 7665 6e5f 6465 706c 6f79  kip_maven_deploy\n-000006a0: 3e66 616c 7365 3c2f 736b 6970 5f6d 6176  >false</skip_mav\n-000006b0: 656e 5f64 6570 6c6f 793e 0d0a 2020 3c2f  en_deploy>..  </\n-000006c0: 7072 6f70 6572 7469 6573 3e0d 0a20 203c  properties>..  <\n-000006d0: 6465 7065 6e64 656e 6369 6573 3e0d 0a20  dependencies>.. \n-000006e0: 2020 203c 6465 7065 6e64 656e 6379 3e0d     <dependency>.\n-000006f0: 0a20 2020 2020 203c 6772 6f75 7049 643e  .      <groupId>\n-00000700: 6f72 672e 736c 6634 6a3c 2f67 726f 7570  org.slf4j</group\n-00000710: 4964 3e0d 0a20 2020 2020 203c 6172 7469  Id>..      <arti\n-00000720: 6661 6374 4964 3e73 6c66 346a 2d61 7069  factId>slf4j-api\n-00000730: 3c2f 6172 7469 6661 6374 4964 3e0d 0a20  </artifactId>.. \n-00000740: 2020 2020 203c 7363 6f70 653e 7072 6f76       <scope>prov\n-00000750: 6964 6564 3c2f 7363 6f70 653e 0d0a 2020  ided</scope>..  \n-00000760: 2020 3c2f 6465 7065 6e64 656e 6379 3e0d    </dependency>.\n-00000770: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n-00000780: 3e0d 0a20 2020 2020 203c 6772 6f75 7049  >..      <groupI\n-00000790: 643e 636f 6d6d 6f6e 732d 6c6f 6767 696e  d>commons-loggin\n-000007a0: 673c 2f67 726f 7570 4964 3e0d 0a20 2020  g</groupId>..   \n-000007b0: 2020 203c 6172 7469 6661 6374 4964 3e63     <artifactId>c\n-000007c0: 6f6d 6d6f 6e73 2d6c 6f67 6769 6e67 3c2f  ommons-logging</\n-000007d0: 6172 7469 6661 6374 4964 3e0d 0a20 2020  artifactId>..   \n-000007e0: 203c 2f64 6570 656e 6465 6e63 793e 0d0a   </dependency>..\n-000007f0: 2020 2020 3c64 6570 656e 6465 6e63 793e      <dependency>\n-00000800: 0d0a 2020 2020 2020 3c67 726f 7570 4964  ..      <groupId\n-00000810: 3e6c 6f67 346a 3c2f 6772 6f75 7049 643e  >log4j</groupId>\n-00000820: 0d0a 2020 2020 2020 3c61 7274 6966 6163  ..      <artifac\n-00000830: 7449 643e 6c6f 6734 6a3c 2f61 7274 6966  tId>log4j</artif\n-00000840: 6163 7449 643e 0d0a 2020 2020 3c2f 6465  actId>..    </de\n-00000850: 7065 6e64 656e 6379 3e0d 0a20 2020 203c  pendency>..    <\n-00000860: 6465 7065 6e64 656e 6379 3e0d 0a20 2020  dependency>..   \n-00000870: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n-00000880: 6170 6163 6865 2e6c 6f67 6769 6e67 2e6c  apache.logging.l\n-00000890: 6f67 346a 3c2f 6772 6f75 7049 643e 0d0a  og4j</groupId>..\n-000008a0: 2020 2020 2020 3c61 7274 6966 6163 7449        <artifactI\n-000008b0: 643e 6c6f 6734 6a2d 6170 693c 2f61 7274  d>log4j-api</art\n-000008c0: 6966 6163 7449 643e 0d0a 2020 2020 2020  ifactId>..      \n-000008d0: 3c73 636f 7065 3e70 726f 7669 6465 643c  <scope>provided<\n-000008e0: 2f73 636f 7065 3e0d 0a20 2020 203c 2f64  /scope>..    </d\n-000008f0: 6570 656e 6465 6e63 793e 0d0a 2020 2020  ependency>..    \n-00000900: 3c64 6570 656e 6465 6e63 793e 0d0a 2020  <dependency>..  \n-00000910: 2020 2020 3c67 726f 7570 4964 3e6f 7267      <groupId>org\n-00000920: 2e61 7061 6368 652e 6c6f 6767 696e 672e  .apache.logging.\n-00000930: 6c6f 6734 6a3c 2f67 726f 7570 4964 3e0d  log4j</groupId>.\n-00000940: 0a20 2020 2020 203c 6172 7469 6661 6374  .      <artifact\n-00000950: 4964 3e6c 6f67 346a 2d63 6f72 653c 2f61  Id>log4j-core</a\n-00000960: 7274 6966 6163 7449 643e 0d0a 2020 2020  rtifactId>..    \n-00000970: 2020 3c73 636f 7065 3e70 726f 7669 6465    <scope>provide\n-00000980: 643c 2f73 636f 7065 3e0d 0a20 2020 203c  d</scope>..    <\n-00000990: 2f64 6570 656e 6465 6e63 793e 0d0a 2020  /dependency>..  \n-000009a0: 2020 3c64 6570 656e 6465 6e63 793e 0d0a    <dependency>..\n-000009b0: 2020 2020 2020 3c67 726f 7570 4964 3e6f        <groupId>o\n-000009c0: 7267 2e6a 6176 6173 7369 7374 3c2f 6772  rg.javassist</gr\n-000009d0: 6f75 7049 643e 0d0a 2020 2020 2020 3c61  oupId>..      <a\n-000009e0: 7274 6966 6163 7449 643e 6a61 7661 7373  rtifactId>javass\n-000009f0: 6973 743c 2f61 7274 6966 6163 7449 643e  ist</artifactId>\n-00000a00: 0d0a 2020 2020 3c2f 6465 7065 6e64 656e  ..    </dependen\n-00000a10: 6379 3e0d 0a20 2020 203c 6465 7065 6e64  cy>..    <depend\n-00000a20: 656e 6379 3e0d 0a20 2020 2020 203c 6772  ency>..      <gr\n-00000a30: 6f75 7049 643e 636f 6d2e 616c 6962 6162  oupId>com.alibab\n-00000a40: 613c 2f67 726f 7570 4964 3e0d 0a20 2020  a</groupId>..   \n-00000a50: 2020 203c 6172 7469 6661 6374 4964 3e66     <artifactId>f\n-00000a60: 6173 746a 736f 6e3c 2f61 7274 6966 6163  astjson</artifac\n-00000a70: 7449 643e 0d0a 2020 2020 3c2f 6465 7065  tId>..    </depe\n-00000a80: 6e64 656e 6379 3e0d 0a20 2020 203c 6465  ndency>..    <de\n-00000a90: 7065 6e64 656e 6379 3e0d 0a20 2020 2020  pendency>..     \n-00000aa0: 203c 6772 6f75 7049 643e 636f 6d6d 6f6e   <groupId>common\n-00000ab0: 732d 696f 3c2f 6772 6f75 7049 643e 0d0a  s-io</groupId>..\n-00000ac0: 2020 2020 2020 3c61 7274 6966 6163 7449        <artifactI\n-00000ad0: 643e 636f 6d6d 6f6e 732d 696f 3c2f 6172  d>commons-io</ar\n-00000ae0: 7469 6661 6374 4964 3e0d 0a20 2020 203c  tifactId>..    <\n-00000af0: 2f64 6570 656e 6465 6e63 793e 0d0a 2020  /dependency>..  \n-00000b00: 2020 3c64 6570 656e 6465 6e63 793e 0d0a    <dependency>..\n-00000b10: 2020 2020 2020 3c67 726f 7570 4964 3e6a        <groupId>j\n-00000b20: 6176 6178 2e61 6e6e 6f74 6174 696f 6e3c  avax.annotation<\n-00000b30: 2f67 726f 7570 4964 3e0d 0a20 2020 2020  /groupId>..     \n-00000b40: 203c 6172 7469 6661 6374 4964 3e6a 6176   <artifactId>jav\n-00000b50: 6178 2e61 6e6e 6f74 6174 696f 6e2d 6170  ax.annotation-ap\n-00000b60: 693c 2f61 7274 6966 6163 7449 643e 0d0a  i</artifactId>..\n-00000b70: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n-00000b80: 3e0d 0a20 203c 2f64 6570 656e 6465 6e63  >..  </dependenc\n-00000b90: 6965 733e 0d0a 3c2f 7072 6f6a 6563 743e  ies>..</project>\n-00000ba0: 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 2d70 6172  factId>dubbo-par\n+00000480: 656e 743c 2f61 7274 6966 6163 7449 643e  ent</artifactId>\n+00000490: 0a20 2020 203c 7665 7273 696f 6e3e 322e  .    <version>2.\n+000004a0: 372e 3130 3c2f 7665 7273 696f 6e3e 0a20  7.10</version>. \n+000004b0: 203c 2f70 6172 656e 743e 0a20 203c 6772   </parent>.  <gr\n+000004c0: 6f75 7049 643e 6f72 672e 6170 6163 6865  oupId>org.apache\n+000004d0: 2e64 7562 626f 3c2f 6772 6f75 7049 643e  .dubbo</groupId>\n+000004e0: 0a20 203c 6172 7469 6661 6374 4964 3e64  .  <artifactId>d\n+000004f0: 7562 626f 2d63 6f6d 6d6f 6e3c 2f61 7274  ubbo-common</art\n+00000500: 6966 6163 7449 643e 0a20 203c 7665 7273  ifactId>.  <vers\n+00000510: 696f 6e3e 322e 372e 3130 3c2f 7665 7273  ion>2.7.10</vers\n+00000520: 696f 6e3e 0a20 203c 6e61 6d65 3e24 7b70  ion>.  <name>${p\n+00000530: 726f 6a65 6374 2e61 7274 6966 6163 7449  roject.artifactI\n+00000540: 647d 3c2f 6e61 6d65 3e0a 2020 3c64 6573  d}</name>.  <des\n+00000550: 6372 6970 7469 6f6e 3e54 6865 2063 6f6d  cription>The com\n+00000560: 6d6f 6e20 6d6f 6475 6c65 206f 6620 6475  mon module of du\n+00000570: 6262 6f20 7072 6f6a 6563 743c 2f64 6573  bbo project</des\n+00000580: 6372 6970 7469 6f6e 3e0a 2020 3c6c 6963  cription>.  <lic\n+00000590: 656e 7365 733e 0a20 2020 203c 6c69 6365  enses>.    <lice\n+000005a0: 6e73 653e 0a20 2020 2020 203c 6e61 6d65  nse>.      <name\n+000005b0: 3e41 7061 6368 6520 4c69 6365 6e73 652c  >Apache License,\n+000005c0: 2056 6572 7369 6f6e 2032 2e30 3c2f 6e61   Version 2.0</na\n+000005d0: 6d65 3e0a 2020 2020 2020 3c75 726c 3e68  me>.      <url>h\n+000005e0: 7474 703a 2f2f 7777 772e 6170 6163 6865  ttp://www.apache\n+000005f0: 2e6f 7267 2f6c 6963 656e 7365 732f 4c49  .org/licenses/LI\n+00000600: 4345 4e53 452d 322e 303c 2f75 726c 3e0a  CENSE-2.0</url>.\n+00000610: 2020 2020 2020 3c64 6973 7472 6962 7574        <distribut\n+00000620: 696f 6e3e 7265 706f 3c2f 6469 7374 7269  ion>repo</distri\n+00000630: 6275 7469 6f6e 3e0a 2020 2020 3c2f 6c69  bution>.    </li\n+00000640: 6365 6e73 653e 0a20 203c 2f6c 6963 656e  cense>.  </licen\n+00000650: 7365 733e 0a20 203c 7072 6f70 6572 7469  ses>.  <properti\n+00000660: 6573 3e0a 2020 2020 3c73 6b69 705f 6d61  es>.    <skip_ma\n+00000670: 7665 6e5f 6465 706c 6f79 3e66 616c 7365  ven_deploy>false\n+00000680: 3c2f 736b 6970 5f6d 6176 656e 5f64 6570  </skip_maven_dep\n+00000690: 6c6f 793e 0a20 203c 2f70 726f 7065 7274  loy>.  </propert\n+000006a0: 6965 733e 0a20 203c 6465 7065 6e64 656e  ies>.  <dependen\n+000006b0: 6369 6573 3e0a 2020 2020 3c64 6570 656e  cies>.    <depen\n+000006c0: 6465 6e63 793e 0a20 2020 2020 203c 6772  dency>.      <gr\n+000006d0: 6f75 7049 643e 6f72 672e 736c 6634 6a3c  oupId>org.slf4j<\n+000006e0: 2f67 726f 7570 4964 3e0a 2020 2020 2020  /groupId>.      \n+000006f0: 3c61 7274 6966 6163 7449 643e 736c 6634  <artifactId>slf4\n+00000700: 6a2d 6170 693c 2f61 7274 6966 6163 7449  j-api</artifactI\n+00000710: 643e 0a20 2020 2020 203c 7363 6f70 653e  d>.      <scope>\n+00000720: 7072 6f76 6964 6564 3c2f 7363 6f70 653e  provided</scope>\n+00000730: 0a20 2020 203c 2f64 6570 656e 6465 6e63  .    </dependenc\n+00000740: 793e 0a20 2020 203c 6465 7065 6e64 656e  y>.    <dependen\n+00000750: 6379 3e0a 2020 2020 2020 3c67 726f 7570  cy>.      <group\n+00000760: 4964 3e63 6f6d 6d6f 6e73 2d6c 6f67 6769  Id>commons-loggi\n+00000770: 6e67 3c2f 6772 6f75 7049 643e 0a20 2020  ng</groupId>.   \n+00000780: 2020 203c 6172 7469 6661 6374 4964 3e63     <artifactId>c\n+00000790: 6f6d 6d6f 6e73 2d6c 6f67 6769 6e67 3c2f  ommons-logging</\n+000007a0: 6172 7469 6661 6374 4964 3e0a 2020 2020  artifactId>.    \n+000007b0: 3c2f 6465 7065 6e64 656e 6379 3e0a 2020  </dependency>.  \n+000007c0: 2020 3c64 6570 656e 6465 6e63 793e 0a20    <dependency>. \n+000007d0: 2020 2020 203c 6772 6f75 7049 643e 6c6f       <groupId>lo\n+000007e0: 6734 6a3c 2f67 726f 7570 4964 3e0a 2020  g4j</groupId>.  \n+000007f0: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n+00000800: 6c6f 6734 6a3c 2f61 7274 6966 6163 7449  log4j</artifactI\n+00000810: 643e 0a20 2020 203c 2f64 6570 656e 6465  d>.    </depende\n+00000820: 6e63 793e 0a20 2020 203c 6465 7065 6e64  ncy>.    <depend\n+00000830: 656e 6379 3e0a 2020 2020 2020 3c67 726f  ency>.      <gro\n+00000840: 7570 4964 3e6f 7267 2e61 7061 6368 652e  upId>org.apache.\n+00000850: 6c6f 6767 696e 672e 6c6f 6734 6a3c 2f67  logging.log4j</g\n+00000860: 726f 7570 4964 3e0a 2020 2020 2020 3c61  roupId>.      <a\n+00000870: 7274 6966 6163 7449 643e 6c6f 6734 6a2d  rtifactId>log4j-\n+00000880: 6170 693c 2f61 7274 6966 6163 7449 643e  api</artifactId>\n+00000890: 0a20 2020 2020 203c 7363 6f70 653e 7072  .      <scope>pr\n+000008a0: 6f76 6964 6564 3c2f 7363 6f70 653e 0a20  ovided</scope>. \n+000008b0: 2020 203c 2f64 6570 656e 6465 6e63 793e     </dependency>\n+000008c0: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n+000008d0: 3e0a 2020 2020 2020 3c67 726f 7570 4964  >.      <groupId\n+000008e0: 3e6f 7267 2e61 7061 6368 652e 6c6f 6767  >org.apache.logg\n+000008f0: 696e 672e 6c6f 6734 6a3c 2f67 726f 7570  ing.log4j</group\n+00000900: 4964 3e0a 2020 2020 2020 3c61 7274 6966  Id>.      <artif\n+00000910: 6163 7449 643e 6c6f 6734 6a2d 636f 7265  actId>log4j-core\n+00000920: 3c2f 6172 7469 6661 6374 4964 3e0a 2020  </artifactId>.  \n+00000930: 2020 2020 3c73 636f 7065 3e70 726f 7669      <scope>provi\n+00000940: 6465 643c 2f73 636f 7065 3e0a 2020 2020  ded</scope>.    \n+00000950: 3c2f 6465 7065 6e64 656e 6379 3e0a 2020  </dependency>.  \n+00000960: 2020 3c64 6570 656e 6465 6e63 793e 0a20    <dependency>. \n+00000970: 2020 2020 203c 6772 6f75 7049 643e 6f72       <groupId>or\n+00000980: 672e 6a61 7661 7373 6973 743c 2f67 726f  g.javassist</gro\n+00000990: 7570 4964 3e0a 2020 2020 2020 3c61 7274  upId>.      <art\n+000009a0: 6966 6163 7449 643e 6a61 7661 7373 6973  ifactId>javassis\n+000009b0: 743c 2f61 7274 6966 6163 7449 643e 0a20  t</artifactId>. \n+000009c0: 2020 203c 2f64 6570 656e 6465 6e63 793e     </dependency>\n+000009d0: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n+000009e0: 3e0a 2020 2020 2020 3c67 726f 7570 4964  >.      <groupId\n+000009f0: 3e63 6f6d 2e61 6c69 6261 6261 3c2f 6772  >com.alibaba</gr\n+00000a00: 6f75 7049 643e 0a20 2020 2020 203c 6172  oupId>.      <ar\n+00000a10: 7469 6661 6374 4964 3e66 6173 746a 736f  tifactId>fastjso\n+00000a20: 6e3c 2f61 7274 6966 6163 7449 643e 0a20  n</artifactId>. \n+00000a30: 2020 203c 2f64 6570 656e 6465 6e63 793e     </dependency>\n+00000a40: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n+00000a50: 3e0a 2020 2020 2020 3c67 726f 7570 4964  >.      <groupId\n+00000a60: 3e63 6f6d 6d6f 6e73 2d69 6f3c 2f67 726f  >commons-io</gro\n+00000a70: 7570 4964 3e0a 2020 2020 2020 3c61 7274  upId>.      <art\n+00000a80: 6966 6163 7449 643e 636f 6d6d 6f6e 732d  ifactId>commons-\n+00000a90: 696f 3c2f 6172 7469 6661 6374 4964 3e0a  io</artifactId>.\n+00000aa0: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n+00000ab0: 3e0a 2020 2020 3c64 6570 656e 6465 6e63  >.    <dependenc\n+00000ac0: 793e 0a20 2020 2020 203c 6772 6f75 7049  y>.      <groupI\n+00000ad0: 643e 6a61 7661 782e 616e 6e6f 7461 7469  d>javax.annotati\n+00000ae0: 6f6e 3c2f 6772 6f75 7049 643e 0a20 2020  on</groupId>.   \n+00000af0: 2020 203c 6172 7469 6661 6374 4964 3e6a     <artifactId>j\n+00000b00: 6176 6178 2e61 6e6e 6f74 6174 696f 6e2d  avax.annotation-\n+00000b10: 6170 693c 2f61 7274 6966 6163 7449 643e  api</artifactId>\n+00000b20: 0a20 2020 203c 2f64 6570 656e 6465 6e63  .    </dependenc\n+00000b30: 793e 0a20 203c 2f64 6570 656e 6465 6e63  y>.  </dependenc\n+00000b40: 6965 733e 0a3c 2f70 726f 6a65 6374 3e0a  ies>.</project>.\n"}, {"source1": "META-INF/services/org.apache.dubbo.common.extension.LoadingStrategy", "source2": "META-INF/services/org.apache.dubbo.common.extension.LoadingStrategy", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,3 +1,3 @@\n-org.apache.dubbo.common.extension.DubboInternalLoadingStrategy\n-org.apache.dubbo.common.extension.DubboLoadingStrategy\n+org.apache.dubbo.common.extension.DubboInternalLoadingStrategy\r\n+org.apache.dubbo.common.extension.DubboLoadingStrategy\r\n org.apache.dubbo.common.extension.ServicesLoadingStrategy\n"}, {"source1": "com/alibaba/dubbo/config/annotation/Reference.java", "source2": "com/alibaba/dubbo/config/annotation/Reference.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,113 +1,113 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-\n-package com.alibaba.dubbo.config.annotation;\n-\n-import java.lang.annotation.Documented;\n-import java.lang.annotation.ElementType;\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.RetentionPolicy;\n-import java.lang.annotation.Target;\n-\n-@Deprecated\n-@Documented\n-@Retention(RetentionPolicy.RUNTIME)\n-@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})\n-public @interface Reference {\n-\n-    Class<?> interfaceClass() default void.class;\n-\n-    String interfaceName() default \"\";\n-\n-    String version() default \"\";\n-\n-    String group() default \"\";\n-\n-    String url() default \"\";\n-\n-    String client() default \"\";\n-\n-    boolean generic() default false;\n-\n-    boolean injvm() default true;\n-\n-    boolean check() default true;\n-\n-    boolean init() default false;\n-\n-    boolean lazy() default false;\n-\n-    boolean stubevent() default false;\n-\n-    String reconnect() default \"\";\n-\n-    boolean sticky() default false;\n-\n-    String proxy() default \"\";\n-\n-    String stub() default \"\";\n-\n-    String cluster() default \"\";\n-\n-    int connections() default 0;\n-\n-    int callbacks() default 0;\n-\n-    String onconnect() default \"\";\n-\n-    String ondisconnect() default \"\";\n-\n-    String owner() default \"\";\n-\n-    String layer() default \"\";\n-\n-    int retries() default 2;\n-\n-    String loadbalance() default \"\";\n-\n-    boolean async() default false;\n-\n-    int actives() default 0;\n-\n-    boolean sent() default false;\n-\n-    String mock() default \"\";\n-\n-    String validation() default \"\";\n-\n-    int timeout() default 0;\n-\n-    String cache() default \"\";\n-\n-    String[] filter() default {};\n-\n-    String[] listener() default {};\n-\n-    String[] parameters() default {};\n-\n-    String application() default \"\";\n-\n-    String module() default \"\";\n-\n-    String consumer() default \"\";\n-\n-    String monitor() default \"\";\n-\n-    String[] registry() default {};\n-\n-}\n-\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+\r\n+package com.alibaba.dubbo.config.annotation;\r\n+\r\n+import java.lang.annotation.Documented;\r\n+import java.lang.annotation.ElementType;\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.RetentionPolicy;\r\n+import java.lang.annotation.Target;\r\n+\r\n+@Deprecated\r\n+@Documented\r\n+@Retention(RetentionPolicy.RUNTIME)\r\n+@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})\r\n+public @interface Reference {\r\n+\r\n+    Class<?> interfaceClass() default void.class;\r\n+\r\n+    String interfaceName() default \"\";\r\n+\r\n+    String version() default \"\";\r\n+\r\n+    String group() default \"\";\r\n+\r\n+    String url() default \"\";\r\n+\r\n+    String client() default \"\";\r\n+\r\n+    boolean generic() default false;\r\n+\r\n+    boolean injvm() default true;\r\n+\r\n+    boolean check() default true;\r\n+\r\n+    boolean init() default false;\r\n+\r\n+    boolean lazy() default false;\r\n+\r\n+    boolean stubevent() default false;\r\n+\r\n+    String reconnect() default \"\";\r\n+\r\n+    boolean sticky() default false;\r\n+\r\n+    String proxy() default \"\";\r\n+\r\n+    String stub() default \"\";\r\n+\r\n+    String cluster() default \"\";\r\n+\r\n+    int connections() default 0;\r\n+\r\n+    int callbacks() default 0;\r\n+\r\n+    String onconnect() default \"\";\r\n+\r\n+    String ondisconnect() default \"\";\r\n+\r\n+    String owner() default \"\";\r\n+\r\n+    String layer() default \"\";\r\n+\r\n+    int retries() default 2;\r\n+\r\n+    String loadbalance() default \"\";\r\n+\r\n+    boolean async() default false;\r\n+\r\n+    int actives() default 0;\r\n+\r\n+    boolean sent() default false;\r\n+\r\n+    String mock() default \"\";\r\n+\r\n+    String validation() default \"\";\r\n+\r\n+    int timeout() default 0;\r\n+\r\n+    String cache() default \"\";\r\n+\r\n+    String[] filter() default {};\r\n+\r\n+    String[] listener() default {};\r\n+\r\n+    String[] parameters() default {};\r\n+\r\n+    String application() default \"\";\r\n+\r\n+    String module() default \"\";\r\n+\r\n+    String consumer() default \"\";\r\n+\r\n+    String monitor() default \"\";\r\n+\r\n+    String[] registry() default {};\r\n+\r\n+}\r\n+\r\n"}, {"source1": "com/alibaba/dubbo/config/annotation/Service.java", "source2": "com/alibaba/dubbo/config/annotation/Service.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,120 +1,120 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-\n-package com.alibaba.dubbo.config.annotation;\n-\n-import java.lang.annotation.Documented;\n-import java.lang.annotation.ElementType;\n-import java.lang.annotation.Inherited;\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.RetentionPolicy;\n-import java.lang.annotation.Target;\n-\n-@Deprecated\n-@Documented\n-@Retention(RetentionPolicy.RUNTIME)\n-@Target({ElementType.TYPE})\n-@Inherited\n-public @interface Service {\n-\n-    Class<?> interfaceClass() default void.class;\n-\n-    String interfaceName() default \"\";\n-\n-    String version() default \"\";\n-\n-    String group() default \"\";\n-\n-    String path() default \"\";\n-\n-    boolean export() default false;\n-\n-    String token() default \"\";\n-\n-    boolean deprecated() default false;\n-\n-    boolean dynamic() default true;\n-\n-    String accesslog() default \"\";\n-\n-    int executes() default 0;\n-\n-    boolean register() default false;\n-\n-    int weight() default 0;\n-\n-    String document() default \"\";\n-\n-    int delay() default 0;\n-\n-    String local() default \"\";\n-\n-    String stub() default \"\";\n-\n-    String cluster() default \"\";\n-\n-    String proxy() default \"\";\n-\n-    int connections() default 0;\n-\n-    int callbacks() default 0;\n-\n-    String onconnect() default \"\";\n-\n-    String ondisconnect() default \"\";\n-\n-    String owner() default \"\";\n-\n-    String layer() default \"\";\n-\n-    int retries() default 0;\n-\n-    String loadbalance() default \"\";\n-\n-    boolean async() default false;\n-\n-    int actives() default 0;\n-\n-    boolean sent() default false;\n-\n-    String mock() default \"\";\n-\n-    String validation() default \"\";\n-\n-    int timeout() default 0;\n-\n-    String cache() default \"\";\n-\n-    String[] filter() default {};\n-\n-    String[] listener() default {};\n-\n-    String[] parameters() default {};\n-\n-    String application() default \"\";\n-\n-    String module() default \"\";\n-\n-    String provider() default \"\";\n-\n-    String[] protocol() default {};\n-\n-    String monitor() default \"\";\n-\n-    String[] registry() default {};\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+\r\n+package com.alibaba.dubbo.config.annotation;\r\n+\r\n+import java.lang.annotation.Documented;\r\n+import java.lang.annotation.ElementType;\r\n+import java.lang.annotation.Inherited;\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.RetentionPolicy;\r\n+import java.lang.annotation.Target;\r\n+\r\n+@Deprecated\r\n+@Documented\r\n+@Retention(RetentionPolicy.RUNTIME)\r\n+@Target({ElementType.TYPE})\r\n+@Inherited\r\n+public @interface Service {\r\n+\r\n+    Class<?> interfaceClass() default void.class;\r\n+\r\n+    String interfaceName() default \"\";\r\n+\r\n+    String version() default \"\";\r\n+\r\n+    String group() default \"\";\r\n+\r\n+    String path() default \"\";\r\n+\r\n+    boolean export() default false;\r\n+\r\n+    String token() default \"\";\r\n+\r\n+    boolean deprecated() default false;\r\n+\r\n+    boolean dynamic() default true;\r\n+\r\n+    String accesslog() default \"\";\r\n+\r\n+    int executes() default 0;\r\n+\r\n+    boolean register() default false;\r\n+\r\n+    int weight() default 0;\r\n+\r\n+    String document() default \"\";\r\n+\r\n+    int delay() default 0;\r\n+\r\n+    String local() default \"\";\r\n+\r\n+    String stub() default \"\";\r\n+\r\n+    String cluster() default \"\";\r\n+\r\n+    String proxy() default \"\";\r\n+\r\n+    int connections() default 0;\r\n+\r\n+    int callbacks() default 0;\r\n+\r\n+    String onconnect() default \"\";\r\n+\r\n+    String ondisconnect() default \"\";\r\n+\r\n+    String owner() default \"\";\r\n+\r\n+    String layer() default \"\";\r\n+\r\n+    int retries() default 0;\r\n+\r\n+    String loadbalance() default \"\";\r\n+\r\n+    boolean async() default false;\r\n+\r\n+    int actives() default 0;\r\n+\r\n+    boolean sent() default false;\r\n+\r\n+    String mock() default \"\";\r\n+\r\n+    String validation() default \"\";\r\n+\r\n+    int timeout() default 0;\r\n+\r\n+    String cache() default \"\";\r\n+\r\n+    String[] filter() default {};\r\n+\r\n+    String[] listener() default {};\r\n+\r\n+    String[] parameters() default {};\r\n+\r\n+    String application() default \"\";\r\n+\r\n+    String module() default \"\";\r\n+\r\n+    String provider() default \"\";\r\n+\r\n+    String[] protocol() default {};\r\n+\r\n+    String monitor() default \"\";\r\n+\r\n+    String[] registry() default {};\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/BaseServiceMetadata.java", "source2": "org/apache/dubbo/common/BaseServiceMetadata.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,137 +1,137 @@\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.common;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_VERSION;\n-\n-/**\n- * 2019-10-10\n- */\n-public class BaseServiceMetadata {\n-    public static final char COLON_SEPARATOR = ':';\n-\n-    protected String serviceKey;\n-    protected String serviceInterfaceName;\n-    protected String version;\n-    protected volatile String group;\n-\n-    public static String buildServiceKey(String path, String group, String version) {\n-        StringBuilder buf = new StringBuilder();\n-        if (group != null && group.length() > 0) {\n-            buf.append(group).append(\"/\");\n-        }\n-        buf.append(path);\n-        if (version != null && version.length() > 0) {\n-            buf.append(\":\").append(version);\n-        }\n-        return buf.toString();\n-    }\n-\n-    public static String versionFromServiceKey(String serviceKey) {\n-        int index = serviceKey.indexOf(\":\");\n-        if (index == -1) {\n-            return DEFAULT_VERSION;\n-        }\n-        return serviceKey.substring(index + 1);\n-    }\n-\n-    public static String groupFromServiceKey(String serviceKey) {\n-        int index = serviceKey.indexOf(\"/\");\n-        if (index == -1) {\n-            return null;\n-        }\n-        return serviceKey.substring(0, index);\n-    }\n-\n-    public static String interfaceFromServiceKey(String serviceKey) {\n-        int groupIndex = serviceKey.indexOf(\"/\");\n-        int versionIndex = serviceKey.indexOf(\":\");\n-        groupIndex = (groupIndex == -1) ? 0 : groupIndex + 1;\n-        versionIndex = (versionIndex == -1) ? serviceKey.length() : versionIndex;\n-        return serviceKey.substring(groupIndex, versionIndex);\n-    }\n-\n-    /**\n-     * Format : interface:version\n-     *\n-     * @return\n-     */\n-    public String getDisplayServiceKey() {\n-        StringBuilder serviceNameBuilder = new StringBuilder();\n-        serviceNameBuilder.append(serviceInterfaceName);\n-        serviceNameBuilder.append(COLON_SEPARATOR).append(version);\n-        return serviceNameBuilder.toString();\n-    }\n-\n-    /**\n-     * revert of org.apache.dubbo.common.ServiceDescriptor#getDisplayServiceKey()\n-     *\n-     * @param displayKey\n-     * @return\n-     */\n-    public static BaseServiceMetadata revertDisplayServiceKey(String displayKey) {\n-        String[] eles = StringUtils.split(displayKey, COLON_SEPARATOR);\n-        if (eles == null || eles.length < 1 || eles.length > 2) {\n-            return new BaseServiceMetadata();\n-        }\n-        BaseServiceMetadata serviceDescriptor = new BaseServiceMetadata();\n-        serviceDescriptor.setServiceInterfaceName(eles[0]);\n-        if (eles.length == 2) {\n-            serviceDescriptor.setVersion(eles[1]);\n-        }\n-        return serviceDescriptor;\n-    }\n-\n-    public String getServiceKey() {\n-        return serviceKey;\n-    }\n-\n-    public void generateServiceKey() {\n-        this.serviceKey = buildServiceKey(serviceInterfaceName, group, version);\n-    }\n-\n-    public void setServiceKey(String serviceKey) {\n-        this.serviceKey = serviceKey;\n-    }\n-\n-    public String getServiceInterfaceName() {\n-        return serviceInterfaceName;\n-    }\n-\n-    public void setServiceInterfaceName(String serviceInterfaceName) {\n-        this.serviceInterfaceName = serviceInterfaceName;\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-}\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.common;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_VERSION;\r\n+\r\n+/**\r\n+ * 2019-10-10\r\n+ */\r\n+public class BaseServiceMetadata {\r\n+    public static final char COLON_SEPARATOR = ':';\r\n+\r\n+    protected String serviceKey;\r\n+    protected String serviceInterfaceName;\r\n+    protected String version;\r\n+    protected volatile String group;\r\n+\r\n+    public static String buildServiceKey(String path, String group, String version) {\r\n+        StringBuilder buf = new StringBuilder();\r\n+        if (group != null && group.length() > 0) {\r\n+            buf.append(group).append(\"/\");\r\n+        }\r\n+        buf.append(path);\r\n+        if (version != null && version.length() > 0) {\r\n+            buf.append(\":\").append(version);\r\n+        }\r\n+        return buf.toString();\r\n+    }\r\n+\r\n+    public static String versionFromServiceKey(String serviceKey) {\r\n+        int index = serviceKey.indexOf(\":\");\r\n+        if (index == -1) {\r\n+            return DEFAULT_VERSION;\r\n+        }\r\n+        return serviceKey.substring(index + 1);\r\n+    }\r\n+\r\n+    public static String groupFromServiceKey(String serviceKey) {\r\n+        int index = serviceKey.indexOf(\"/\");\r\n+        if (index == -1) {\r\n+            return null;\r\n+        }\r\n+        return serviceKey.substring(0, index);\r\n+    }\r\n+\r\n+    public static String interfaceFromServiceKey(String serviceKey) {\r\n+        int groupIndex = serviceKey.indexOf(\"/\");\r\n+        int versionIndex = serviceKey.indexOf(\":\");\r\n+        groupIndex = (groupIndex == -1) ? 0 : groupIndex + 1;\r\n+        versionIndex = (versionIndex == -1) ? serviceKey.length() : versionIndex;\r\n+        return serviceKey.substring(groupIndex, versionIndex);\r\n+    }\r\n+\r\n+    /**\r\n+     * Format : interface:version\r\n+     *\r\n+     * @return\r\n+     */\r\n+    public String getDisplayServiceKey() {\r\n+        StringBuilder serviceNameBuilder = new StringBuilder();\r\n+        serviceNameBuilder.append(serviceInterfaceName);\r\n+        serviceNameBuilder.append(COLON_SEPARATOR).append(version);\r\n+        return serviceNameBuilder.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * revert of org.apache.dubbo.common.ServiceDescriptor#getDisplayServiceKey()\r\n+     *\r\n+     * @param displayKey\r\n+     * @return\r\n+     */\r\n+    public static BaseServiceMetadata revertDisplayServiceKey(String displayKey) {\r\n+        String[] eles = StringUtils.split(displayKey, COLON_SEPARATOR);\r\n+        if (eles == null || eles.length < 1 || eles.length > 2) {\r\n+            return new BaseServiceMetadata();\r\n+        }\r\n+        BaseServiceMetadata serviceDescriptor = new BaseServiceMetadata();\r\n+        serviceDescriptor.setServiceInterfaceName(eles[0]);\r\n+        if (eles.length == 2) {\r\n+            serviceDescriptor.setVersion(eles[1]);\r\n+        }\r\n+        return serviceDescriptor;\r\n+    }\r\n+\r\n+    public String getServiceKey() {\r\n+        return serviceKey;\r\n+    }\r\n+\r\n+    public void generateServiceKey() {\r\n+        this.serviceKey = buildServiceKey(serviceInterfaceName, group, version);\r\n+    }\r\n+\r\n+    public void setServiceKey(String serviceKey) {\r\n+        this.serviceKey = serviceKey;\r\n+    }\r\n+\r\n+    public String getServiceInterfaceName() {\r\n+        return serviceInterfaceName;\r\n+    }\r\n+\r\n+    public void setServiceInterfaceName(String serviceInterfaceName) {\r\n+        this.serviceInterfaceName = serviceInterfaceName;\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+}\r\n"}, {"source1": "org/apache/dubbo/common/Experimental.java", "source2": "org/apache/dubbo/common/Experimental.java", "comments": ["Line-ending 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.common;\n-\n-import java.lang.annotation.ElementType;\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.RetentionPolicy;\n-import java.lang.annotation.Target;\n-\n-/**\n- * Indicating unstable API, may get removed or changed in the next release.\n- */\n-@Retention(RetentionPolicy.CLASS)\n-@Target({\n-        ElementType.ANNOTATION_TYPE,\n-        ElementType.CONSTRUCTOR,\n-        ElementType.FIELD,\n-        ElementType.METHOD,\n-        ElementType.PACKAGE,\n-        ElementType.TYPE})\n-public @interface Experimental {\n-    String value();\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.common;\r\n+\r\n+import java.lang.annotation.ElementType;\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.RetentionPolicy;\r\n+import java.lang.annotation.Target;\r\n+\r\n+/**\r\n+ * Indicating unstable API, may get removed or changed in the next release.\r\n+ */\r\n+@Retention(RetentionPolicy.CLASS)\r\n+@Target({\r\n+        ElementType.ANNOTATION_TYPE,\r\n+        ElementType.CONSTRUCTOR,\r\n+        ElementType.FIELD,\r\n+        ElementType.METHOD,\r\n+        ElementType.PACKAGE,\r\n+        ElementType.TYPE})\r\n+public @interface Experimental {\r\n+    String value();\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/URLStrParser.java", "source2": "org/apache/dubbo/common/URLStrParser.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,367 +1,367 @@\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.common;\n-\n-import java.util.Collections;\n-import java.util.HashMap;\n-import java.util.Map;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY_PREFIX;\n-import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING;\n-import static org.apache.dubbo.common.utils.StringUtils.decodeHexByte;\n-import static org.apache.dubbo.common.utils.Utf8Utils.decodeUtf8;\n-\n-public final class URLStrParser {\n-\n-    private static final char SPACE = 0x20;\n-\n-    private static final ThreadLocal<TempBuf> DECODE_TEMP_BUF = ThreadLocal.withInitial(() -> new TempBuf(1024));\n-\n-    private URLStrParser() {\n-        //empty\n-    }\n-\n-    /**\n-     * @param decodedURLStr : after {@link URL#decode} string\n-     *                      decodedURLStr format: protocol://username:password@host:port/path?k1=v1&k2=v2\n-     *                      [protocol://][username:password@][host:port]/[path][?k1=v1&k2=v2]\n-     */\n-    public static URL parseDecodedStr(String decodedURLStr) {\n-        Map<String, String> parameters = null;\n-        int pathEndIdx = decodedURLStr.indexOf('?');\n-        if (pathEndIdx >= 0) {\n-            parameters = parseDecodedParams(decodedURLStr, pathEndIdx + 1);\n-        } else {\n-            pathEndIdx = decodedURLStr.length();\n-        }\n-\n-        String decodedBody = decodedURLStr.substring(0, pathEndIdx);\n-        return parseURLBody(decodedURLStr, decodedBody, parameters);\n-    }\n-\n-    private static Map<String, String> parseDecodedParams(String str, int from) {\n-        int len = str.length();\n-        if (from >= len) {\n-            return Collections.emptyMap();\n-        }\n-\n-        TempBuf tempBuf = DECODE_TEMP_BUF.get();\n-        Map<String, String> params = new HashMap<>();\n-        int nameStart = from;\n-        int valueStart = -1;\n-        int i;\n-        for (i = from; i < len; i++) {\n-            char ch = str.charAt(i);\n-            switch (ch) {\n-                case '=':\n-                    if (nameStart == i) {\n-                        nameStart = i + 1;\n-                    } else if (valueStart < nameStart) {\n-                        valueStart = i + 1;\n-                    }\n-                    break;\n-                case ';':\n-                case '&':\n-                    addParam(str, false, nameStart, valueStart, i, params, tempBuf);\n-                    nameStart = i + 1;\n-                    break;\n-                default:\n-                    // continue\n-            }\n-        }\n-        addParam(str, false, nameStart, valueStart, i, params, tempBuf);\n-        return params;\n-    }\n-\n-    /**\n-     * @param fullURLStr  : fullURLString\n-     * @param decodedBody : format: [protocol://][username:password@][host:port]/[path]\n-     * @param parameters  :\n-     * @return URL\n-     */\n-    private static URL parseURLBody(String fullURLStr, String decodedBody, Map<String, String> parameters) {\n-        int starIdx = 0, endIdx = decodedBody.length();\n-        String protocol = null;\n-        int protoEndIdx = decodedBody.indexOf(\"://\");\n-        if (protoEndIdx >= 0) {\n-            if (protoEndIdx == 0) {\n-                throw new IllegalStateException(\"url missing protocol: \\\"\" + fullURLStr + \"\\\"\");\n-            }\n-            protocol = decodedBody.substring(0, protoEndIdx);\n-            starIdx = protoEndIdx + 3;\n-        } else {\n-            // case: file:/path/to/file.txt\n-            protoEndIdx = decodedBody.indexOf(\":/\");\n-            if (protoEndIdx >= 0) {\n-                if (protoEndIdx == 0) {\n-                    throw new IllegalStateException(\"url missing protocol: \\\"\" + fullURLStr + \"\\\"\");\n-                }\n-                protocol = decodedBody.substring(0, protoEndIdx);\n-                starIdx = protoEndIdx + 1;\n-            }\n-        }\n-\n-        String path = null;\n-        int pathStartIdx = indexOf(decodedBody, '/', starIdx, endIdx);\n-        if (pathStartIdx >= 0) {\n-            path = decodedBody.substring(pathStartIdx + 1);\n-            endIdx = pathStartIdx;\n-        }\n-\n-        String username = null;\n-        String password = null;\n-        int pwdEndIdx = lastIndexOf(decodedBody, '@', starIdx, endIdx);\n-        if (pwdEndIdx > 0) {\n-            int userNameEndIdx = indexOf(decodedBody, ':', starIdx, pwdEndIdx);\n-            username = decodedBody.substring(starIdx, userNameEndIdx);\n-            password = decodedBody.substring(userNameEndIdx + 1, pwdEndIdx);\n-            starIdx = pwdEndIdx + 1;\n-        }\n-\n-        String host = null;\n-        int port = 0;\n-        int hostEndIdx = lastIndexOf(decodedBody, ':', starIdx, endIdx);\n-        if (hostEndIdx > 0 && hostEndIdx < decodedBody.length() - 1) {\n-            if (lastIndexOf(decodedBody, '%', starIdx, endIdx) > hostEndIdx) {\n-                // ipv6 address with scope id\n-                // e.g. fe80:0:0:0:894:aeec:f37d:23e1%en0\n-                // see https://howdoesinternetwork.com/2013/ipv6-zone-id\n-                // ignore\n-            } else {\n-                port = Integer.parseInt(decodedBody.substring(hostEndIdx + 1, endIdx));\n-                endIdx = hostEndIdx;\n-            }\n-        }\n-\n-        if (endIdx > starIdx) {\n-            host = decodedBody.substring(starIdx, endIdx);\n-        }\n-        return new URL(protocol, username, password, host, port, path, parameters);\n-    }\n-\n-    /**\n-     * @param encodedURLStr : after {@link URL#encode(String)} string\n-     *                      encodedURLStr after decode format: protocol://username:password@host:port/path?k1=v1&k2=v2\n-     *                      [protocol://][username:password@][host:port]/[path][?k1=v1&k2=v2]\n-     */\n-    public static URL parseEncodedStr(String encodedURLStr) {\n-        Map<String, String> parameters = null;\n-        int pathEndIdx = encodedURLStr.toUpperCase().indexOf(\"%3F\");// '?'\n-        if (pathEndIdx >= 0) {\n-            parameters = parseEncodedParams(encodedURLStr, pathEndIdx + 3);\n-        } else {\n-            pathEndIdx = encodedURLStr.length();\n-        }\n-\n-        //decodedBody format: [protocol://][username:password@][host:port]/[path]\n-        String decodedBody = decodeComponent(encodedURLStr, 0, pathEndIdx, false, DECODE_TEMP_BUF.get());\n-        return parseURLBody(encodedURLStr, decodedBody, parameters);\n-    }\n-\n-    private static Map<String, String> parseEncodedParams(String str, int from) {\n-        int len = str.length();\n-        if (from >= len) {\n-            return Collections.emptyMap();\n-        }\n-\n-        TempBuf tempBuf = DECODE_TEMP_BUF.get();\n-        Map<String, String> params = new HashMap<>();\n-        int nameStart = from;\n-        int valueStart = -1;\n-        int i;\n-        for (i = from; i < len; i++) {\n-            char ch = str.charAt(i);\n-            if (ch == '%') {\n-                if (i + 3 > len) {\n-                    throw new IllegalArgumentException(\"unterminated escape sequence at index \" + i + \" of: \" + str);\n-                }\n-                ch = (char) decodeHexByte(str, i + 1);\n-                i += 2;\n-            }\n-\n-            switch (ch) {\n-                case '=':\n-                    if (nameStart == i) {\n-                        nameStart = i + 1;\n-                    } else if (valueStart < nameStart) {\n-                        valueStart = i + 1;\n-                    }\n-                    break;\n-                case ';':\n-                case '&':\n-                    addParam(str, true, nameStart, valueStart, i - 2, params, tempBuf);\n-                    nameStart = i + 1;\n-                    break;\n-                default:\n-                    // continue\n-            }\n-        }\n-        addParam(str, true, nameStart, valueStart, i, params, tempBuf);\n-        return params;\n-    }\n-\n-    private static boolean addParam(String str, boolean isEncoded, int nameStart, int valueStart, int valueEnd, Map<String, String> params,\n-                                    TempBuf tempBuf) {\n-        if (nameStart >= valueEnd) {\n-            return false;\n-        }\n-\n-        if (valueStart <= nameStart) {\n-            valueStart = valueEnd + 1;\n-        }\n-\n-        if (isEncoded) {\n-            String name = decodeComponent(str, nameStart, valueStart - 3, false, tempBuf);\n-            String value = decodeComponent(str, valueStart, valueEnd, false, tempBuf);\n-            if (valueStart == valueEnd) {\n-                value = name;\n-            } else {\n-                value = decodeComponent(str, valueStart, valueEnd, false, tempBuf);\n-            }\n-            params.put(name, value);\n-            // compatible with lower versions registering \"default.\" keys\n-            if (name.startsWith(DEFAULT_KEY_PREFIX)) {\n-                params.putIfAbsent(name.substring(DEFAULT_KEY_PREFIX.length()), value);\n-            }\n-        } else {\n-            String name = str.substring(nameStart, valueStart - 1);\n-            String value = str.substring(valueStart, valueEnd);\n-            if (valueStart == valueEnd) {\n-                value = name;\n-            } else {\n-                value = str.substring(valueStart, valueEnd);\n-            }\n-            params.put(name, value);\n-            // compatible with lower versions registering \"default.\" keys\n-            if (name.startsWith(DEFAULT_KEY_PREFIX)) {\n-                params.putIfAbsent(name.substring(DEFAULT_KEY_PREFIX.length()), value);\n-            }\n-        }\n-        return true;\n-    }\n-\n-    private static String decodeComponent(String s, int from, int toExcluded, boolean isPath, TempBuf tempBuf) {\n-        int len = toExcluded - from;\n-        if (len <= 0) {\n-            return EMPTY_STRING;\n-        }\n-\n-        int firstEscaped = -1;\n-        for (int i = from; i < toExcluded; i++) {\n-            char c = s.charAt(i);\n-            if (c == '%' || c == '+' && !isPath) {\n-                firstEscaped = i;\n-                break;\n-            }\n-        }\n-        if (firstEscaped == -1) {\n-            return s.substring(from, toExcluded);\n-        }\n-\n-        // Each encoded byte takes 3 characters (e.g. \"%20\")\n-        int decodedCapacity = (toExcluded - firstEscaped) / 3;\n-        byte[] buf = tempBuf.byteBuf(decodedCapacity);\n-        char[] charBuf = tempBuf.charBuf(len);\n-        s.getChars(from, firstEscaped, charBuf, 0);\n-\n-        int charBufIdx = firstEscaped - from;\n-        return decodeUtf8Component(s, firstEscaped, toExcluded, isPath, buf, charBuf, charBufIdx);\n-    }\n-\n-    private static String decodeUtf8Component(String str, int firstEscaped, int toExcluded, boolean isPath, byte[] buf,\n-                                              char[] charBuf, int charBufIdx) {\n-        int bufIdx;\n-        for (int i = firstEscaped; i < toExcluded; i++) {\n-            char c = str.charAt(i);\n-            if (c != '%') {\n-                charBuf[charBufIdx++] = c != '+' || isPath ? c : SPACE;\n-                continue;\n-            }\n-\n-            bufIdx = 0;\n-            do {\n-                if (i + 3 > toExcluded) {\n-                    throw new IllegalArgumentException(\"unterminated escape sequence at index \" + i + \" of: \" + str);\n-                }\n-                buf[bufIdx++] = decodeHexByte(str, i + 1);\n-                i += 3;\n-            } while (i < toExcluded && str.charAt(i) == '%');\n-            i--;\n-\n-            charBufIdx += decodeUtf8(buf, 0, bufIdx, charBuf, charBufIdx);\n-        }\n-        return new String(charBuf, 0, charBufIdx);\n-    }\n-\n-    private static int indexOf(String str, char ch, int from, int toExclude) {\n-        from = Math.max(from, 0);\n-        toExclude = Math.min(toExclude, str.length());\n-        if (from > toExclude) {\n-            return -1;\n-        }\n-\n-        for (int i = from; i < toExclude; i++) {\n-            if (str.charAt(i) == ch) {\n-                return i;\n-            }\n-        }\n-        return -1;\n-    }\n-\n-    private static int lastIndexOf(String str, char ch, int from, int toExclude) {\n-        from = Math.max(from, 0);\n-        toExclude = Math.min(toExclude, str.length() - 1);\n-        if (from > toExclude) {\n-            return -1;\n-        }\n-\n-        for (int i = toExclude; i >= from; i--) {\n-            if (str.charAt(i) == ch) {\n-                return i;\n-            }\n-        }\n-        return -1;\n-    }\n-\n-    private static final class TempBuf {\n-\n-        private final char[] chars;\n-\n-        private final byte[] bytes;\n-\n-        TempBuf(int bufSize) {\n-            this.chars = new char[bufSize];\n-            this.bytes = new byte[bufSize];\n-        }\n-\n-        public char[] charBuf(int size) {\n-            char[] chars = this.chars;\n-            if (size <= chars.length) {\n-                return chars;\n-            }\n-            return new char[size];\n-        }\n-\n-        public byte[] byteBuf(int size) {\n-            byte[] bytes = this.bytes;\n-            if (size <= bytes.length) {\n-                return bytes;\n-            }\n-            return new byte[size];\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.common;\r\n+\r\n+import java.util.Collections;\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY_PREFIX;\r\n+import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING;\r\n+import static org.apache.dubbo.common.utils.StringUtils.decodeHexByte;\r\n+import static org.apache.dubbo.common.utils.Utf8Utils.decodeUtf8;\r\n+\r\n+public final class URLStrParser {\r\n+\r\n+    private static final char SPACE = 0x20;\r\n+\r\n+    private static final ThreadLocal<TempBuf> DECODE_TEMP_BUF = ThreadLocal.withInitial(() -> new TempBuf(1024));\r\n+\r\n+    private URLStrParser() {\r\n+        //empty\r\n+    }\r\n+\r\n+    /**\r\n+     * @param decodedURLStr : after {@link URL#decode} string\r\n+     *                      decodedURLStr format: protocol://username:password@host:port/path?k1=v1&k2=v2\r\n+     *                      [protocol://][username:password@][host:port]/[path][?k1=v1&k2=v2]\r\n+     */\r\n+    public static URL parseDecodedStr(String decodedURLStr) {\r\n+        Map<String, String> parameters = null;\r\n+        int pathEndIdx = decodedURLStr.indexOf('?');\r\n+        if (pathEndIdx >= 0) {\r\n+            parameters = parseDecodedParams(decodedURLStr, pathEndIdx + 1);\r\n+        } else {\r\n+            pathEndIdx = decodedURLStr.length();\r\n+        }\r\n+\r\n+        String decodedBody = decodedURLStr.substring(0, pathEndIdx);\r\n+        return parseURLBody(decodedURLStr, decodedBody, parameters);\r\n+    }\r\n+\r\n+    private static Map<String, String> parseDecodedParams(String str, int from) {\r\n+        int len = str.length();\r\n+        if (from >= len) {\r\n+            return Collections.emptyMap();\r\n+        }\r\n+\r\n+        TempBuf tempBuf = DECODE_TEMP_BUF.get();\r\n+        Map<String, String> params = new HashMap<>();\r\n+        int nameStart = from;\r\n+        int valueStart = -1;\r\n+        int i;\r\n+        for (i = from; i < len; i++) {\r\n+            char ch = str.charAt(i);\r\n+            switch (ch) {\r\n+                case '=':\r\n+                    if (nameStart == i) {\r\n+                        nameStart = i + 1;\r\n+                    } else if (valueStart < nameStart) {\r\n+                        valueStart = i + 1;\r\n+                    }\r\n+                    break;\r\n+                case ';':\r\n+                case '&':\r\n+                    addParam(str, false, nameStart, valueStart, i, params, tempBuf);\r\n+                    nameStart = i + 1;\r\n+                    break;\r\n+                default:\r\n+                    // continue\r\n+            }\r\n+        }\r\n+        addParam(str, false, nameStart, valueStart, i, params, tempBuf);\r\n+        return params;\r\n+    }\r\n+\r\n+    /**\r\n+     * @param fullURLStr  : fullURLString\r\n+     * @param decodedBody : format: [protocol://][username:password@][host:port]/[path]\r\n+     * @param parameters  :\r\n+     * @return URL\r\n+     */\r\n+    private static URL parseURLBody(String fullURLStr, String decodedBody, Map<String, String> parameters) {\r\n+        int starIdx = 0, endIdx = decodedBody.length();\r\n+        String protocol = null;\r\n+        int protoEndIdx = decodedBody.indexOf(\"://\");\r\n+        if (protoEndIdx >= 0) {\r\n+            if (protoEndIdx == 0) {\r\n+                throw new IllegalStateException(\"url missing protocol: \\\"\" + fullURLStr + \"\\\"\");\r\n+            }\r\n+            protocol = decodedBody.substring(0, protoEndIdx);\r\n+            starIdx = protoEndIdx + 3;\r\n+        } else {\r\n+            // case: file:/path/to/file.txt\r\n+            protoEndIdx = decodedBody.indexOf(\":/\");\r\n+            if (protoEndIdx >= 0) {\r\n+                if (protoEndIdx == 0) {\r\n+                    throw new IllegalStateException(\"url missing protocol: \\\"\" + fullURLStr + \"\\\"\");\r\n+                }\r\n+                protocol = decodedBody.substring(0, protoEndIdx);\r\n+                starIdx = protoEndIdx + 1;\r\n+            }\r\n+        }\r\n+\r\n+        String path = null;\r\n+        int pathStartIdx = indexOf(decodedBody, '/', starIdx, endIdx);\r\n+        if (pathStartIdx >= 0) {\r\n+            path = decodedBody.substring(pathStartIdx + 1);\r\n+            endIdx = pathStartIdx;\r\n+        }\r\n+\r\n+        String username = null;\r\n+        String password = null;\r\n+        int pwdEndIdx = lastIndexOf(decodedBody, '@', starIdx, endIdx);\r\n+        if (pwdEndIdx > 0) {\r\n+            int userNameEndIdx = indexOf(decodedBody, ':', starIdx, pwdEndIdx);\r\n+            username = decodedBody.substring(starIdx, userNameEndIdx);\r\n+            password = decodedBody.substring(userNameEndIdx + 1, pwdEndIdx);\r\n+            starIdx = pwdEndIdx + 1;\r\n+        }\r\n+\r\n+        String host = null;\r\n+        int port = 0;\r\n+        int hostEndIdx = lastIndexOf(decodedBody, ':', starIdx, endIdx);\r\n+        if (hostEndIdx > 0 && hostEndIdx < decodedBody.length() - 1) {\r\n+            if (lastIndexOf(decodedBody, '%', starIdx, endIdx) > hostEndIdx) {\r\n+                // ipv6 address with scope id\r\n+                // e.g. fe80:0:0:0:894:aeec:f37d:23e1%en0\r\n+                // see https://howdoesinternetwork.com/2013/ipv6-zone-id\r\n+                // ignore\r\n+            } else {\r\n+                port = Integer.parseInt(decodedBody.substring(hostEndIdx + 1, endIdx));\r\n+                endIdx = hostEndIdx;\r\n+            }\r\n+        }\r\n+\r\n+        if (endIdx > starIdx) {\r\n+            host = decodedBody.substring(starIdx, endIdx);\r\n+        }\r\n+        return new URL(protocol, username, password, host, port, path, parameters);\r\n+    }\r\n+\r\n+    /**\r\n+     * @param encodedURLStr : after {@link URL#encode(String)} string\r\n+     *                      encodedURLStr after decode format: protocol://username:password@host:port/path?k1=v1&k2=v2\r\n+     *                      [protocol://][username:password@][host:port]/[path][?k1=v1&k2=v2]\r\n+     */\r\n+    public static URL parseEncodedStr(String encodedURLStr) {\r\n+        Map<String, String> parameters = null;\r\n+        int pathEndIdx = encodedURLStr.toUpperCase().indexOf(\"%3F\");// '?'\r\n+        if (pathEndIdx >= 0) {\r\n+            parameters = parseEncodedParams(encodedURLStr, pathEndIdx + 3);\r\n+        } else {\r\n+            pathEndIdx = encodedURLStr.length();\r\n+        }\r\n+\r\n+        //decodedBody format: [protocol://][username:password@][host:port]/[path]\r\n+        String decodedBody = decodeComponent(encodedURLStr, 0, pathEndIdx, false, DECODE_TEMP_BUF.get());\r\n+        return parseURLBody(encodedURLStr, decodedBody, parameters);\r\n+    }\r\n+\r\n+    private static Map<String, String> parseEncodedParams(String str, int from) {\r\n+        int len = str.length();\r\n+        if (from >= len) {\r\n+            return Collections.emptyMap();\r\n+        }\r\n+\r\n+        TempBuf tempBuf = DECODE_TEMP_BUF.get();\r\n+        Map<String, String> params = new HashMap<>();\r\n+        int nameStart = from;\r\n+        int valueStart = -1;\r\n+        int i;\r\n+        for (i = from; i < len; i++) {\r\n+            char ch = str.charAt(i);\r\n+            if (ch == '%') {\r\n+                if (i + 3 > len) {\r\n+                    throw new IllegalArgumentException(\"unterminated escape sequence at index \" + i + \" of: \" + str);\r\n+                }\r\n+                ch = (char) decodeHexByte(str, i + 1);\r\n+                i += 2;\r\n+            }\r\n+\r\n+            switch (ch) {\r\n+                case '=':\r\n+                    if (nameStart == i) {\r\n+                        nameStart = i + 1;\r\n+                    } else if (valueStart < nameStart) {\r\n+                        valueStart = i + 1;\r\n+                    }\r\n+                    break;\r\n+                case ';':\r\n+                case '&':\r\n+                    addParam(str, true, nameStart, valueStart, i - 2, params, tempBuf);\r\n+                    nameStart = i + 1;\r\n+                    break;\r\n+                default:\r\n+                    // continue\r\n+            }\r\n+        }\r\n+        addParam(str, true, nameStart, valueStart, i, params, tempBuf);\r\n+        return params;\r\n+    }\r\n+\r\n+    private static boolean addParam(String str, boolean isEncoded, int nameStart, int valueStart, int valueEnd, Map<String, String> params,\r\n+                                    TempBuf tempBuf) {\r\n+        if (nameStart >= valueEnd) {\r\n+            return false;\r\n+        }\r\n+\r\n+        if (valueStart <= nameStart) {\r\n+            valueStart = valueEnd + 1;\r\n+        }\r\n+\r\n+        if (isEncoded) {\r\n+            String name = decodeComponent(str, nameStart, valueStart - 3, false, tempBuf);\r\n+            String value = decodeComponent(str, valueStart, valueEnd, false, tempBuf);\r\n+            if (valueStart == valueEnd) {\r\n+                value = name;\r\n+            } else {\r\n+                value = decodeComponent(str, valueStart, valueEnd, false, tempBuf);\r\n+            }\r\n+            params.put(name, value);\r\n+            // compatible with lower versions registering \"default.\" keys\r\n+            if (name.startsWith(DEFAULT_KEY_PREFIX)) {\r\n+                params.putIfAbsent(name.substring(DEFAULT_KEY_PREFIX.length()), value);\r\n+            }\r\n+        } else {\r\n+            String name = str.substring(nameStart, valueStart - 1);\r\n+            String value = str.substring(valueStart, valueEnd);\r\n+            if (valueStart == valueEnd) {\r\n+                value = name;\r\n+            } else {\r\n+                value = str.substring(valueStart, valueEnd);\r\n+            }\r\n+            params.put(name, value);\r\n+            // compatible with lower versions registering \"default.\" keys\r\n+            if (name.startsWith(DEFAULT_KEY_PREFIX)) {\r\n+                params.putIfAbsent(name.substring(DEFAULT_KEY_PREFIX.length()), value);\r\n+            }\r\n+        }\r\n+        return true;\r\n+    }\r\n+\r\n+    private static String decodeComponent(String s, int from, int toExcluded, boolean isPath, TempBuf tempBuf) {\r\n+        int len = toExcluded - from;\r\n+        if (len <= 0) {\r\n+            return EMPTY_STRING;\r\n+        }\r\n+\r\n+        int firstEscaped = -1;\r\n+        for (int i = from; i < toExcluded; i++) {\r\n+            char c = s.charAt(i);\r\n+            if (c == '%' || c == '+' && !isPath) {\r\n+                firstEscaped = i;\r\n+                break;\r\n+            }\r\n+        }\r\n+        if (firstEscaped == -1) {\r\n+            return s.substring(from, toExcluded);\r\n+        }\r\n+\r\n+        // Each encoded byte takes 3 characters (e.g. \"%20\")\r\n+        int decodedCapacity = (toExcluded - firstEscaped) / 3;\r\n+        byte[] buf = tempBuf.byteBuf(decodedCapacity);\r\n+        char[] charBuf = tempBuf.charBuf(len);\r\n+        s.getChars(from, firstEscaped, charBuf, 0);\r\n+\r\n+        int charBufIdx = firstEscaped - from;\r\n+        return decodeUtf8Component(s, firstEscaped, toExcluded, isPath, buf, charBuf, charBufIdx);\r\n+    }\r\n+\r\n+    private static String decodeUtf8Component(String str, int firstEscaped, int toExcluded, boolean isPath, byte[] buf,\r\n+                                              char[] charBuf, int charBufIdx) {\r\n+        int bufIdx;\r\n+        for (int i = firstEscaped; i < toExcluded; i++) {\r\n+            char c = str.charAt(i);\r\n+            if (c != '%') {\r\n+                charBuf[charBufIdx++] = c != '+' || isPath ? c : SPACE;\r\n+                continue;\r\n+            }\r\n+\r\n+            bufIdx = 0;\r\n+            do {\r\n+                if (i + 3 > toExcluded) {\r\n+                    throw new IllegalArgumentException(\"unterminated escape sequence at index \" + i + \" of: \" + str);\r\n+                }\r\n+                buf[bufIdx++] = decodeHexByte(str, i + 1);\r\n+                i += 3;\r\n+            } while (i < toExcluded && str.charAt(i) == '%');\r\n+            i--;\r\n+\r\n+            charBufIdx += decodeUtf8(buf, 0, bufIdx, charBuf, charBufIdx);\r\n+        }\r\n+        return new String(charBuf, 0, charBufIdx);\r\n+    }\r\n+\r\n+    private static int indexOf(String str, char ch, int from, int toExclude) {\r\n+        from = Math.max(from, 0);\r\n+        toExclude = Math.min(toExclude, str.length());\r\n+        if (from > toExclude) {\r\n+            return -1;\r\n+        }\r\n+\r\n+        for (int i = from; i < toExclude; i++) {\r\n+            if (str.charAt(i) == ch) {\r\n+                return i;\r\n+            }\r\n+        }\r\n+        return -1;\r\n+    }\r\n+\r\n+    private static int lastIndexOf(String str, char ch, int from, int toExclude) {\r\n+        from = Math.max(from, 0);\r\n+        toExclude = Math.min(toExclude, str.length() - 1);\r\n+        if (from > toExclude) {\r\n+            return -1;\r\n+        }\r\n+\r\n+        for (int i = toExclude; i >= from; i--) {\r\n+            if (str.charAt(i) == ch) {\r\n+                return i;\r\n+            }\r\n+        }\r\n+        return -1;\r\n+    }\r\n+\r\n+    private static final class TempBuf {\r\n+\r\n+        private final char[] chars;\r\n+\r\n+        private final byte[] bytes;\r\n+\r\n+        TempBuf(int bufSize) {\r\n+            this.chars = new char[bufSize];\r\n+            this.bytes = new byte[bufSize];\r\n+        }\r\n+\r\n+        public char[] charBuf(int size) {\r\n+            char[] chars = this.chars;\r\n+            if (size <= chars.length) {\r\n+                return chars;\r\n+            }\r\n+            return new char[size];\r\n+        }\r\n+\r\n+        public byte[] byteBuf(int size) {\r\n+            byte[] bytes = this.bytes;\r\n+            if (size <= bytes.length) {\r\n+                return bytes;\r\n+            }\r\n+            return new byte[size];\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/Version.java", "source2": "org/apache/dubbo/common/Version.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,278 +1,278 @@\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.common;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ClassUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.io.IOException;\n-import java.net.URL;\n-import java.security.CodeSource;\n-import java.util.Enumeration;\n-import java.util.HashMap;\n-import java.util.HashSet;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.regex.Matcher;\n-import java.util.regex.Pattern;\n-\n-/**\n- * Version\n- */\n-public final class Version {\n-    private static final Logger logger = LoggerFactory.getLogger(Version.class);\n-\n-    private static final Pattern PREFIX_DIGITS_PATTERN = Pattern.compile(\"^([0-9]*).*\");\n-\n-    // Dubbo RPC protocol version, for compatibility, it must not be between 2.0.10 ~ 2.6.2\n-    public static final String DEFAULT_DUBBO_PROTOCOL_VERSION = \"2.0.2\";\n-    // version 1.0.0 represents Dubbo rpc protocol before v2.6.2\n-    public static final int LEGACY_DUBBO_PROTOCOL_VERSION = 10000; // 1.0.0\n-    // Dubbo implementation version, usually is jar version.\n-    private static final String VERSION = getVersion(Version.class, \"\");\n-\n-    /**\n-     * For protocol compatibility purpose.\n-     * Because {@link #isSupportResponseAttachment} is checked for every call, int compare expect to has higher\n-     * performance than string.\n-     */\n-    public static final int LOWEST_VERSION_FOR_RESPONSE_ATTACHMENT = 2000200; // 2.0.2\n-    public static final int HIGHEST_PROTOCOL_VERSION = 2009900; // 2.0.99\n-    private static final Map<String, Integer> VERSION2INT = new HashMap<String, Integer>();\n-\n-    static {\n-        // check if there's duplicated jar\n-        Version.checkDuplicate(Version.class);\n-    }\n-\n-    private Version() {\n-    }\n-\n-    public static String getProtocolVersion() {\n-        return DEFAULT_DUBBO_PROTOCOL_VERSION;\n-    }\n-\n-    public static String getVersion() {\n-        return VERSION;\n-    }\n-\n-    /**\n-     * Check the framework release version number to decide if it's 2.7.0 or higher\n-     */\n-    public static boolean isRelease270OrHigher(String version) {\n-        if (StringUtils.isEmpty(version)) {\n-            return false;\n-        }\n-        if (getIntVersion(version) >= 2070000) {\n-            return true;\n-        }\n-        return false;\n-    }\n-\n-    /**\n-     * Check the framework release version number to decide if it's 2.6.3 or higher\n-     *\n-     * @param version, the sdk version\n-     */\n-    public static boolean isRelease263OrHigher(String version) {\n-        return getIntVersion(version) >= 2060300;\n-    }\n-\n-    /**\n-     * Dubbo 2.x protocol version numbers are limited to 2.0.2/2000200 ~ 2.0.99/2009900, other versions are consider as\n-     * invalid or not from official release.\n-     *\n-     * @param version, the protocol version.\n-     * @return\n-     */\n-    public static boolean isSupportResponseAttachment(String version) {\n-        if (StringUtils.isEmpty(version)) {\n-            return false;\n-        }\n-        int iVersion = getIntVersion(version);\n-        if (iVersion >= LOWEST_VERSION_FOR_RESPONSE_ATTACHMENT && iVersion <= HIGHEST_PROTOCOL_VERSION) {\n-            return true;\n-        }\n-\n-        return false;\n-    }\n-\n-    public static int getIntVersion(String version) {\n-        Integer v = VERSION2INT.get(version);\n-        if (v == null) {\n-            try {\n-                v = parseInt(version);\n-                // e.g., version number 2.6.3 will convert to 2060300\n-                if (version.split(\"\\\\.\").length == 3) {\n-                    v = v * 100;\n-                }\n-            } catch (Exception e) {\n-                logger.warn(\"Please make sure your version value has the right format: \" +\n-                        \"\\n 1. only contains digital number: 2.0.0; \\n 2. with string suffix: 2.6.7-stable. \" +\n-                        \"\\nIf you are using Dubbo before v2.6.2, the version value is the same with the jar version.\");\n-                v = LEGACY_DUBBO_PROTOCOL_VERSION;\n-            }\n-            VERSION2INT.put(version, v);\n-        }\n-        return v;\n-    }\n-\n-    private static int parseInt(String version) {\n-        int v = 0;\n-        String[] vArr = version.split(\"\\\\.\");\n-        int len = vArr.length;\n-        for (int i = 0; i < len; i++) {\n-            String subV = getPrefixDigits(vArr[i]);\n-            if (StringUtils.isNotEmpty(subV)) {\n-                v += Integer.parseInt(subV) * Math.pow(10, (len - i - 1) * 2);\n-            }\n-        }\n-        return v;\n-    }\n-\n-    /**\n-     * get prefix digits from given version string\n-     */\n-    private static String getPrefixDigits(String v) {\n-        Matcher matcher = PREFIX_DIGITS_PATTERN.matcher(v);\n-        if (matcher.find()) {\n-            return matcher.group(1);\n-        }\n-        return \"\";\n-    }\n-\n-    public static String getVersion(Class<?> cls, String defaultVersion) {\n-        try {\n-            // find version info from MANIFEST.MF first\n-            Package pkg = cls.getPackage();\n-            String version = null;\n-            if (pkg != null) {\n-                version = pkg.getImplementationVersion();\n-                if (StringUtils.isNotEmpty(version)) {\n-                    return version;\n-                }\n-\n-                version = pkg.getSpecificationVersion();\n-                if (StringUtils.isNotEmpty(version)) {\n-                    return version;\n-                }\n-            }\n-\n-            // guess version from jar file name if nothing's found from MANIFEST.MF\n-            CodeSource codeSource = cls.getProtectionDomain().getCodeSource();\n-            if (codeSource == null) {\n-                logger.info(\"No codeSource for class \" + cls.getName() + \" when getVersion, use default version \" + defaultVersion);\n-                return defaultVersion;\n-            }\n-\n-            URL location = codeSource.getLocation();\n-            if (location == null){\n-                logger.info(\"No location for class \" + cls.getName() + \" when getVersion, use default version \" + defaultVersion);\n-                return defaultVersion;\n-            }\n-            String file =  location.getFile();\n-            if (!StringUtils.isEmpty(file) && file.endsWith(\".jar\")) {\n-                version = getFromFile(file);\n-            }\n-\n-            // return default version if no version info is found\n-            return StringUtils.isEmpty(version) ? defaultVersion : version;\n-        } catch (Throwable e) {\n-            // return default version when any exception is thrown\n-            logger.error(\"return default version, ignore exception \" + e.getMessage(), e);\n-            return defaultVersion;\n-        }\n-    }\n-\n-    /**\n-     * get version from file: path/to/group-module-x.y.z.jar, returns x.y.z\n-     */\n-    private static String getFromFile(String file) {\n-        // remove suffix \".jar\": \"path/to/group-module-x.y.z\"\n-        file = file.substring(0, file.length() - 4);\n-\n-        // remove path: \"group-module-x.y.z\"\n-        int i = file.lastIndexOf('/');\n-        if (i >= 0) {\n-            file = file.substring(i + 1);\n-        }\n-\n-        // remove group: \"module-x.y.z\"\n-        i = file.indexOf(\"-\");\n-        if (i >= 0) {\n-            file = file.substring(i + 1);\n-        }\n-\n-        // remove module: \"x.y.z\"\n-        while (file.length() > 0 && !Character.isDigit(file.charAt(0))) {\n-            i = file.indexOf(\"-\");\n-            if (i >= 0) {\n-                file = file.substring(i + 1);\n-            } else {\n-                break;\n-            }\n-        }\n-        return file;\n-    }\n-\n-    public static void checkDuplicate(Class<?> cls, boolean failOnError) {\n-        checkDuplicate(cls.getName().replace('.', '/') + \".class\", failOnError);\n-    }\n-\n-    public static void checkDuplicate(Class<?> cls) {\n-        checkDuplicate(cls, false);\n-    }\n-\n-    public static void checkDuplicate(String path, boolean failOnError) {\n-        try {\n-            // search in caller's classloader\n-            Set<String> files = getResources(path);\n-            // duplicated jar is found\n-            if (files.size() > 1) {\n-                String error = \"Duplicate class \" + path + \" in \" + files.size() + \" jar \" + files;\n-                if (failOnError) {\n-                    throw new IllegalStateException(error);\n-                } else {\n-                    logger.error(error);\n-                }\n-            }\n-        } catch (Throwable e) {\n-            logger.error(e.getMessage(), e);\n-        }\n-    }\n-\n-    /**\n-     * search resources in caller's classloader\n-     */\n-    private static Set<String> getResources(String path) throws IOException {\n-        Enumeration<URL> urls = ClassUtils.getCallerClassLoader(Version.class).getResources(path);\n-        Set<String> files = new HashSet<String>();\n-        while (urls.hasMoreElements()) {\n-            URL url = urls.nextElement();\n-            if (url != null) {\n-                String file = url.getFile();\n-                if (StringUtils.isNotEmpty(file)) {\n-                    files.add(file);\n-                }\n-            }\n-        }\n-        return files;\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.common;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.ClassUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.io.IOException;\r\n+import java.net.URL;\r\n+import java.security.CodeSource;\r\n+import java.util.Enumeration;\r\n+import java.util.HashMap;\r\n+import java.util.HashSet;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.regex.Matcher;\r\n+import java.util.regex.Pattern;\r\n+\r\n+/**\r\n+ * Version\r\n+ */\r\n+public final class Version {\r\n+    private static final Logger logger = LoggerFactory.getLogger(Version.class);\r\n+\r\n+    private static final Pattern PREFIX_DIGITS_PATTERN = Pattern.compile(\"^([0-9]*).*\");\r\n+\r\n+    // Dubbo RPC protocol version, for compatibility, it must not be between 2.0.10 ~ 2.6.2\r\n+    public static final String DEFAULT_DUBBO_PROTOCOL_VERSION = \"2.0.2\";\r\n+    // version 1.0.0 represents Dubbo rpc protocol before v2.6.2\r\n+    public static final int LEGACY_DUBBO_PROTOCOL_VERSION = 10000; // 1.0.0\r\n+    // Dubbo implementation version, usually is jar version.\r\n+    private static final String VERSION = getVersion(Version.class, \"\");\r\n+\r\n+    /**\r\n+     * For protocol compatibility purpose.\r\n+     * Because {@link #isSupportResponseAttachment} is checked for every call, int compare expect to has higher\r\n+     * performance than string.\r\n+     */\r\n+    public static final int LOWEST_VERSION_FOR_RESPONSE_ATTACHMENT = 2000200; // 2.0.2\r\n+    public static final int HIGHEST_PROTOCOL_VERSION = 2009900; // 2.0.99\r\n+    private static final Map<String, Integer> VERSION2INT = new HashMap<String, Integer>();\r\n+\r\n+    static {\r\n+        // check if there's duplicated jar\r\n+        Version.checkDuplicate(Version.class);\r\n+    }\r\n+\r\n+    private Version() {\r\n+    }\r\n+\r\n+    public static String getProtocolVersion() {\r\n+        return DEFAULT_DUBBO_PROTOCOL_VERSION;\r\n+    }\r\n+\r\n+    public static String getVersion() {\r\n+        return VERSION;\r\n+    }\r\n+\r\n+    /**\r\n+     * Check the framework release version number to decide if it's 2.7.0 or higher\r\n+     */\r\n+    public static boolean isRelease270OrHigher(String version) {\r\n+        if (StringUtils.isEmpty(version)) {\r\n+            return false;\r\n+        }\r\n+        if (getIntVersion(version) >= 2070000) {\r\n+            return true;\r\n+        }\r\n+        return false;\r\n+    }\r\n+\r\n+    /**\r\n+     * Check the framework release version number to decide if it's 2.6.3 or higher\r\n+     *\r\n+     * @param version, the sdk version\r\n+     */\r\n+    public static boolean isRelease263OrHigher(String version) {\r\n+        return getIntVersion(version) >= 2060300;\r\n+    }\r\n+\r\n+    /**\r\n+     * Dubbo 2.x protocol version numbers are limited to 2.0.2/2000200 ~ 2.0.99/2009900, other versions are consider as\r\n+     * invalid or not from official release.\r\n+     *\r\n+     * @param version, the protocol version.\r\n+     * @return\r\n+     */\r\n+    public static boolean isSupportResponseAttachment(String version) {\r\n+        if (StringUtils.isEmpty(version)) {\r\n+            return false;\r\n+        }\r\n+        int iVersion = getIntVersion(version);\r\n+        if (iVersion >= LOWEST_VERSION_FOR_RESPONSE_ATTACHMENT && iVersion <= HIGHEST_PROTOCOL_VERSION) {\r\n+            return true;\r\n+        }\r\n+\r\n+        return false;\r\n+    }\r\n+\r\n+    public static int getIntVersion(String version) {\r\n+        Integer v = VERSION2INT.get(version);\r\n+        if (v == null) {\r\n+            try {\r\n+                v = parseInt(version);\r\n+                // e.g., version number 2.6.3 will convert to 2060300\r\n+                if (version.split(\"\\\\.\").length == 3) {\r\n+                    v = v * 100;\r\n+                }\r\n+            } catch (Exception e) {\r\n+                logger.warn(\"Please make sure your version value has the right format: \" +\r\n+                        \"\\n 1. only contains digital number: 2.0.0; \\n 2. with string suffix: 2.6.7-stable. \" +\r\n+                        \"\\nIf you are using Dubbo before v2.6.2, the version value is the same with the jar version.\");\r\n+                v = LEGACY_DUBBO_PROTOCOL_VERSION;\r\n+            }\r\n+            VERSION2INT.put(version, v);\r\n+        }\r\n+        return v;\r\n+    }\r\n+\r\n+    private static int parseInt(String version) {\r\n+        int v = 0;\r\n+        String[] vArr = version.split(\"\\\\.\");\r\n+        int len = vArr.length;\r\n+        for (int i = 0; i < len; i++) {\r\n+            String subV = getPrefixDigits(vArr[i]);\r\n+            if (StringUtils.isNotEmpty(subV)) {\r\n+                v += Integer.parseInt(subV) * Math.pow(10, (len - i - 1) * 2);\r\n+            }\r\n+        }\r\n+        return v;\r\n+    }\r\n+\r\n+    /**\r\n+     * get prefix digits from given version string\r\n+     */\r\n+    private static String getPrefixDigits(String v) {\r\n+        Matcher matcher = PREFIX_DIGITS_PATTERN.matcher(v);\r\n+        if (matcher.find()) {\r\n+            return matcher.group(1);\r\n+        }\r\n+        return \"\";\r\n+    }\r\n+\r\n+    public static String getVersion(Class<?> cls, String defaultVersion) {\r\n+        try {\r\n+            // find version info from MANIFEST.MF first\r\n+            Package pkg = cls.getPackage();\r\n+            String version = null;\r\n+            if (pkg != null) {\r\n+                version = pkg.getImplementationVersion();\r\n+                if (StringUtils.isNotEmpty(version)) {\r\n+                    return version;\r\n+                }\r\n+\r\n+                version = pkg.getSpecificationVersion();\r\n+                if (StringUtils.isNotEmpty(version)) {\r\n+                    return version;\r\n+                }\r\n+            }\r\n+\r\n+            // guess version from jar file name if nothing's found from MANIFEST.MF\r\n+            CodeSource codeSource = cls.getProtectionDomain().getCodeSource();\r\n+            if (codeSource == null) {\r\n+                logger.info(\"No codeSource for class \" + cls.getName() + \" when getVersion, use default version \" + defaultVersion);\r\n+                return defaultVersion;\r\n+            }\r\n+\r\n+            URL location = codeSource.getLocation();\r\n+            if (location == null){\r\n+                logger.info(\"No location for class \" + cls.getName() + \" when getVersion, use default version \" + defaultVersion);\r\n+                return defaultVersion;\r\n+            }\r\n+            String file =  location.getFile();\r\n+            if (!StringUtils.isEmpty(file) && file.endsWith(\".jar\")) {\r\n+                version = getFromFile(file);\r\n+            }\r\n+\r\n+            // return default version if no version info is found\r\n+            return StringUtils.isEmpty(version) ? defaultVersion : version;\r\n+        } catch (Throwable e) {\r\n+            // return default version when any exception is thrown\r\n+            logger.error(\"return default version, ignore exception \" + e.getMessage(), e);\r\n+            return defaultVersion;\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * get version from file: path/to/group-module-x.y.z.jar, returns x.y.z\r\n+     */\r\n+    private static String getFromFile(String file) {\r\n+        // remove suffix \".jar\": \"path/to/group-module-x.y.z\"\r\n+        file = file.substring(0, file.length() - 4);\r\n+\r\n+        // remove path: \"group-module-x.y.z\"\r\n+        int i = file.lastIndexOf('/');\r\n+        if (i >= 0) {\r\n+            file = file.substring(i + 1);\r\n+        }\r\n+\r\n+        // remove group: \"module-x.y.z\"\r\n+        i = file.indexOf(\"-\");\r\n+        if (i >= 0) {\r\n+            file = file.substring(i + 1);\r\n+        }\r\n+\r\n+        // remove module: \"x.y.z\"\r\n+        while (file.length() > 0 && !Character.isDigit(file.charAt(0))) {\r\n+            i = file.indexOf(\"-\");\r\n+            if (i >= 0) {\r\n+                file = file.substring(i + 1);\r\n+            } else {\r\n+                break;\r\n+            }\r\n+        }\r\n+        return file;\r\n+    }\r\n+\r\n+    public static void checkDuplicate(Class<?> cls, boolean failOnError) {\r\n+        checkDuplicate(cls.getName().replace('.', '/') + \".class\", failOnError);\r\n+    }\r\n+\r\n+    public static void checkDuplicate(Class<?> cls) {\r\n+        checkDuplicate(cls, false);\r\n+    }\r\n+\r\n+    public static void checkDuplicate(String path, boolean failOnError) {\r\n+        try {\r\n+            // search in caller's classloader\r\n+            Set<String> files = getResources(path);\r\n+            // duplicated jar is found\r\n+            if (files.size() > 1) {\r\n+                String error = \"Duplicate class \" + path + \" in \" + files.size() + \" jar \" + files;\r\n+                if (failOnError) {\r\n+                    throw new IllegalStateException(error);\r\n+                } else {\r\n+                    logger.error(error);\r\n+                }\r\n+            }\r\n+        } catch (Throwable e) {\r\n+            logger.error(e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * search resources in caller's classloader\r\n+     */\r\n+    private static Set<String> getResources(String path) throws IOException {\r\n+        Enumeration<URL> urls = ClassUtils.getCallerClassLoader(Version.class).getResources(path);\r\n+        Set<String> files = new HashSet<String>();\r\n+        while (urls.hasMoreElements()) {\r\n+            URL url = urls.nextElement();\r\n+            if (url != null) {\r\n+                String file = url.getFile();\r\n+                if (StringUtils.isNotEmpty(file)) {\r\n+                    files.add(file);\r\n+                }\r\n+            }\r\n+        }\r\n+        return files;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/beanutil/JavaBeanDescriptor.java", "source2": "org/apache/dubbo/common/beanutil/JavaBeanDescriptor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,207 +1,207 @@\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.common.beanutil;\n-\n-import java.io.Serializable;\n-import java.util.Iterator;\n-import java.util.LinkedHashMap;\n-import java.util.Map;\n-\n-public final class JavaBeanDescriptor implements Serializable, Iterable<Map.Entry<Object, Object>> {\n-\n-    private static final long serialVersionUID = -8505586483570518029L;\n-\n-    public static final int TYPE_CLASS = 1;\n-    public static final int TYPE_ENUM = 2;\n-    public static final int TYPE_COLLECTION = 3;\n-    public static final int TYPE_MAP = 4;\n-    public static final int TYPE_ARRAY = 5;\n-    /**\n-     * @see org.apache.dubbo.common.utils.ReflectUtils#isPrimitive(Class)\n-     */\n-    public static final int TYPE_PRIMITIVE = 6;\n-    public static final int TYPE_BEAN = 7;\n-\n-    private static final String ENUM_PROPERTY_NAME = \"name\";\n-    private static final String CLASS_PROPERTY_NAME = \"name\";\n-    private static final String PRIMITIVE_PROPERTY_VALUE = \"value\";\n-\n-    /**\n-     * Used to define a type is valid.\n-     *\n-     * @see #isValidType(int)\n-     */\n-    private static final int TYPE_MAX = TYPE_BEAN;\n-    /**\n-     * Used to define a type is valid.\n-     *\n-     * @see #isValidType(int)\n-     */\n-    private static final int TYPE_MIN = TYPE_CLASS;\n-\n-    private String className;\n-    private int type;\n-\n-    private Map<Object, Object> properties = new LinkedHashMap<>();\n-\n-    public JavaBeanDescriptor() {}\n-\n-    public JavaBeanDescriptor(String className, int type) {\n-        notEmpty(className, \"class name is empty\");\n-        if (!isValidType(type)) {\n-            throw new IllegalArgumentException(\"type [ \" + type + \" ] is unsupported\");\n-        }\n-\n-        this.className = className;\n-        this.type = type;\n-    }\n-\n-    public boolean isClassType() {\n-        return TYPE_CLASS == type;\n-    }\n-\n-    public boolean isEnumType() {\n-        return TYPE_ENUM == type;\n-    }\n-\n-    public boolean isCollectionType() {\n-        return TYPE_COLLECTION == type;\n-    }\n-\n-    public boolean isMapType() {\n-        return TYPE_MAP == type;\n-    }\n-\n-    public boolean isArrayType() {\n-        return TYPE_ARRAY == type;\n-    }\n-\n-    public boolean isPrimitiveType() {\n-        return TYPE_PRIMITIVE == type;\n-    }\n-\n-    public boolean isBeanType() {\n-        return TYPE_BEAN == type;\n-    }\n-\n-    public int getType() {\n-        return type;\n-    }\n-\n-    public void setType(int type) {\n-        this.type = type;\n-    }\n-\n-    public String getClassName() {\n-        return className;\n-    }\n-\n-    public void setClassName(String className) {\n-        this.className = className;\n-    }\n-\n-    public Object setProperty(Object propertyName, Object propertyValue) {\n-        notNull(propertyName, \"Property name is null\");\n-        return properties.put(propertyName, propertyValue);\n-    }\n-\n-    public String setEnumNameProperty(String name) {\n-        if (isEnumType()) {\n-            Object result = setProperty(ENUM_PROPERTY_NAME, name);\n-            return result == null ? null : result.toString();\n-        }\n-        throw new IllegalStateException(\"The instance is not a enum wrapper\");\n-    }\n-\n-    public String getEnumPropertyName() {\n-        if (isEnumType()) {\n-            Object result = getProperty(ENUM_PROPERTY_NAME);\n-            return result == null ? null : result.toString();\n-        }\n-        throw new IllegalStateException(\"The instance is not a enum wrapper\");\n-    }\n-\n-    public String setClassNameProperty(String name) {\n-        if (isClassType()) {\n-            Object result = setProperty(CLASS_PROPERTY_NAME, name);\n-            return result == null ? null : result.toString();\n-        }\n-        throw new IllegalStateException(\"The instance is not a class wrapper\");\n-    }\n-\n-    public String getClassNameProperty() {\n-        if (isClassType()) {\n-            Object result = getProperty(CLASS_PROPERTY_NAME);\n-            return result == null ? null : result.toString();\n-        }\n-        throw new IllegalStateException(\"The instance is not a class wrapper\");\n-    }\n-\n-    public Object setPrimitiveProperty(Object primitiveValue) {\n-        if (isPrimitiveType()) {\n-            return setProperty(PRIMITIVE_PROPERTY_VALUE, primitiveValue);\n-        }\n-        throw new IllegalStateException(\"The instance is not a primitive type wrapper\");\n-    }\n-\n-    public Object getPrimitiveProperty() {\n-        if (isPrimitiveType()) {\n-            return getProperty(PRIMITIVE_PROPERTY_VALUE);\n-        }\n-        throw new IllegalStateException(\"The instance is not a primitive type wrapper\");\n-    }\n-\n-    public Object getProperty(Object propertyName) {\n-        notNull(propertyName, \"Property name is null\");\n-        return properties.get(propertyName);\n-    }\n-\n-    public boolean containsProperty(Object propertyName) {\n-        notNull(propertyName, \"Property name is null\");\n-        return properties.containsKey(propertyName);\n-    }\n-\n-    @Override\n-    public Iterator<Map.Entry<Object, Object>> iterator() {\n-        return properties.entrySet().iterator();\n-    }\n-\n-    public int propertySize() {\n-        return properties.size();\n-    }\n-\n-    private boolean isValidType(int type) {\n-        return TYPE_MIN <= type && type <= TYPE_MAX;\n-    }\n-\n-    private void notNull(Object obj, String message) {\n-        if (obj == null) {\n-            throw new IllegalArgumentException(message);\n-        }\n-    }\n-\n-    private void notEmpty(String string, String message) {\n-        if (isEmpty(string)) {\n-            throw new IllegalArgumentException(message);\n-        }\n-    }\n-\n-    private boolean isEmpty(String string) {\n-        return string == null || \"\".equals(string.trim());\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+\r\n+package org.apache.dubbo.common.beanutil;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.Iterator;\r\n+import java.util.LinkedHashMap;\r\n+import java.util.Map;\r\n+\r\n+public final class JavaBeanDescriptor implements Serializable, Iterable<Map.Entry<Object, Object>> {\r\n+\r\n+    private static final long serialVersionUID = -8505586483570518029L;\r\n+\r\n+    public static final int TYPE_CLASS = 1;\r\n+    public static final int TYPE_ENUM = 2;\r\n+    public static final int TYPE_COLLECTION = 3;\r\n+    public static final int TYPE_MAP = 4;\r\n+    public static final int TYPE_ARRAY = 5;\r\n+    /**\r\n+     * @see org.apache.dubbo.common.utils.ReflectUtils#isPrimitive(Class)\r\n+     */\r\n+    public static final int TYPE_PRIMITIVE = 6;\r\n+    public static final int TYPE_BEAN = 7;\r\n+\r\n+    private static final String ENUM_PROPERTY_NAME = \"name\";\r\n+    private static final String CLASS_PROPERTY_NAME = \"name\";\r\n+    private static final String PRIMITIVE_PROPERTY_VALUE = \"value\";\r\n+\r\n+    /**\r\n+     * Used to define a type is valid.\r\n+     *\r\n+     * @see #isValidType(int)\r\n+     */\r\n+    private static final int TYPE_MAX = TYPE_BEAN;\r\n+    /**\r\n+     * Used to define a type is valid.\r\n+     *\r\n+     * @see #isValidType(int)\r\n+     */\r\n+    private static final int TYPE_MIN = TYPE_CLASS;\r\n+\r\n+    private String className;\r\n+    private int type;\r\n+\r\n+    private Map<Object, Object> properties = new LinkedHashMap<>();\r\n+\r\n+    public JavaBeanDescriptor() {}\r\n+\r\n+    public JavaBeanDescriptor(String className, int type) {\r\n+        notEmpty(className, \"class name is empty\");\r\n+        if (!isValidType(type)) {\r\n+            throw new IllegalArgumentException(\"type [ \" + type + \" ] is unsupported\");\r\n+        }\r\n+\r\n+        this.className = className;\r\n+        this.type = type;\r\n+    }\r\n+\r\n+    public boolean isClassType() {\r\n+        return TYPE_CLASS == type;\r\n+    }\r\n+\r\n+    public boolean isEnumType() {\r\n+        return TYPE_ENUM == type;\r\n+    }\r\n+\r\n+    public boolean isCollectionType() {\r\n+        return TYPE_COLLECTION == type;\r\n+    }\r\n+\r\n+    public boolean isMapType() {\r\n+        return TYPE_MAP == type;\r\n+    }\r\n+\r\n+    public boolean isArrayType() {\r\n+        return TYPE_ARRAY == type;\r\n+    }\r\n+\r\n+    public boolean isPrimitiveType() {\r\n+        return TYPE_PRIMITIVE == type;\r\n+    }\r\n+\r\n+    public boolean isBeanType() {\r\n+        return TYPE_BEAN == type;\r\n+    }\r\n+\r\n+    public int getType() {\r\n+        return type;\r\n+    }\r\n+\r\n+    public void setType(int type) {\r\n+        this.type = type;\r\n+    }\r\n+\r\n+    public String getClassName() {\r\n+        return className;\r\n+    }\r\n+\r\n+    public void setClassName(String className) {\r\n+        this.className = className;\r\n+    }\r\n+\r\n+    public Object setProperty(Object propertyName, Object propertyValue) {\r\n+        notNull(propertyName, \"Property name is null\");\r\n+        return properties.put(propertyName, propertyValue);\r\n+    }\r\n+\r\n+    public String setEnumNameProperty(String name) {\r\n+        if (isEnumType()) {\r\n+            Object result = setProperty(ENUM_PROPERTY_NAME, name);\r\n+            return result == null ? null : result.toString();\r\n+        }\r\n+        throw new IllegalStateException(\"The instance is not a enum wrapper\");\r\n+    }\r\n+\r\n+    public String getEnumPropertyName() {\r\n+        if (isEnumType()) {\r\n+            Object result = getProperty(ENUM_PROPERTY_NAME);\r\n+            return result == null ? null : result.toString();\r\n+        }\r\n+        throw new IllegalStateException(\"The instance is not a enum wrapper\");\r\n+    }\r\n+\r\n+    public String setClassNameProperty(String name) {\r\n+        if (isClassType()) {\r\n+            Object result = setProperty(CLASS_PROPERTY_NAME, name);\r\n+            return result == null ? null : result.toString();\r\n+        }\r\n+        throw new IllegalStateException(\"The instance is not a class wrapper\");\r\n+    }\r\n+\r\n+    public String getClassNameProperty() {\r\n+        if (isClassType()) {\r\n+            Object result = getProperty(CLASS_PROPERTY_NAME);\r\n+            return result == null ? null : result.toString();\r\n+        }\r\n+        throw new IllegalStateException(\"The instance is not a class wrapper\");\r\n+    }\r\n+\r\n+    public Object setPrimitiveProperty(Object primitiveValue) {\r\n+        if (isPrimitiveType()) {\r\n+            return setProperty(PRIMITIVE_PROPERTY_VALUE, primitiveValue);\r\n+        }\r\n+        throw new IllegalStateException(\"The instance is not a primitive type wrapper\");\r\n+    }\r\n+\r\n+    public Object getPrimitiveProperty() {\r\n+        if (isPrimitiveType()) {\r\n+            return getProperty(PRIMITIVE_PROPERTY_VALUE);\r\n+        }\r\n+        throw new IllegalStateException(\"The instance is not a primitive type wrapper\");\r\n+    }\r\n+\r\n+    public Object getProperty(Object propertyName) {\r\n+        notNull(propertyName, \"Property name is null\");\r\n+        return properties.get(propertyName);\r\n+    }\r\n+\r\n+    public boolean containsProperty(Object propertyName) {\r\n+        notNull(propertyName, \"Property name is null\");\r\n+        return properties.containsKey(propertyName);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Iterator<Map.Entry<Object, Object>> iterator() {\r\n+        return properties.entrySet().iterator();\r\n+    }\r\n+\r\n+    public int propertySize() {\r\n+        return properties.size();\r\n+    }\r\n+\r\n+    private boolean isValidType(int type) {\r\n+        return TYPE_MIN <= type && type <= TYPE_MAX;\r\n+    }\r\n+\r\n+    private void notNull(Object obj, String message) {\r\n+        if (obj == null) {\r\n+            throw new IllegalArgumentException(message);\r\n+        }\r\n+    }\r\n+\r\n+    private void notEmpty(String string, String message) {\r\n+        if (isEmpty(string)) {\r\n+            throw new IllegalArgumentException(message);\r\n+        }\r\n+    }\r\n+\r\n+    private boolean isEmpty(String string) {\r\n+        return string == null || \"\".equals(string.trim());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/beanutil/JavaBeanSerializeUtil.java", "source2": "org/apache/dubbo/common/beanutil/JavaBeanSerializeUtil.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,486 +1,486 @@\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.common.beanutil;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.LogHelper;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.SerializeClassChecker;\n-\n-import java.lang.reflect.Array;\n-import java.lang.reflect.Constructor;\n-import java.lang.reflect.Field;\n-import java.lang.reflect.InvocationTargetException;\n-import java.lang.reflect.Method;\n-import java.util.Collection;\n-import java.util.HashMap;\n-import java.util.IdentityHashMap;\n-import java.util.Map;\n-\n-public final class JavaBeanSerializeUtil {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(JavaBeanSerializeUtil.class);\n-    private static final Map<String, Class<?>> TYPES = new HashMap<String, Class<?>>();\n-    private static final String ARRAY_PREFIX = \"[\";\n-    private static final String REFERENCE_TYPE_PREFIX = \"L\";\n-    private static final String REFERENCE_TYPE_SUFFIX = \";\";\n-\n-    static {\n-        TYPES.put(boolean.class.getName(), boolean.class);\n-        TYPES.put(byte.class.getName(), byte.class);\n-        TYPES.put(short.class.getName(), short.class);\n-        TYPES.put(int.class.getName(), int.class);\n-        TYPES.put(long.class.getName(), long.class);\n-        TYPES.put(float.class.getName(), float.class);\n-        TYPES.put(double.class.getName(), double.class);\n-        TYPES.put(void.class.getName(), void.class);\n-        TYPES.put(\"Z\", boolean.class);\n-        TYPES.put(\"B\", byte.class);\n-        TYPES.put(\"C\", char.class);\n-        TYPES.put(\"D\", double.class);\n-        TYPES.put(\"F\", float.class);\n-        TYPES.put(\"I\", int.class);\n-        TYPES.put(\"J\", long.class);\n-        TYPES.put(\"S\", short.class);\n-    }\n-\n-    private JavaBeanSerializeUtil() {\n-    }\n-\n-    public static JavaBeanDescriptor serialize(Object obj) {\n-        return serialize(obj, JavaBeanAccessor.FIELD);\n-    }\n-\n-    public static JavaBeanDescriptor serialize(Object obj, JavaBeanAccessor accessor) {\n-        if (obj == null) {\n-            return null;\n-        }\n-        if (obj instanceof JavaBeanDescriptor) {\n-            return (JavaBeanDescriptor) obj;\n-        }\n-        IdentityHashMap<Object, JavaBeanDescriptor> cache = new IdentityHashMap<Object, JavaBeanDescriptor>();\n-        return createDescriptorIfAbsent(obj, accessor, cache);\n-    }\n-\n-    private static JavaBeanDescriptor createDescriptorForSerialize(Class<?> cl) {\n-        if (cl.isEnum()) {\n-            return new JavaBeanDescriptor(cl.getName(), JavaBeanDescriptor.TYPE_ENUM);\n-        }\n-\n-        if (cl.isArray()) {\n-            return new JavaBeanDescriptor(cl.getComponentType().getName(), JavaBeanDescriptor.TYPE_ARRAY);\n-        }\n-\n-        if (ReflectUtils.isPrimitive(cl)) {\n-            return new JavaBeanDescriptor(cl.getName(), JavaBeanDescriptor.TYPE_PRIMITIVE);\n-        }\n-\n-        if (Class.class.equals(cl)) {\n-            return new JavaBeanDescriptor(Class.class.getName(), JavaBeanDescriptor.TYPE_CLASS);\n-        }\n-\n-        if (Collection.class.isAssignableFrom(cl)) {\n-            return new JavaBeanDescriptor(cl.getName(), JavaBeanDescriptor.TYPE_COLLECTION);\n-        }\n-\n-        if (Map.class.isAssignableFrom(cl)) {\n-            return new JavaBeanDescriptor(cl.getName(), JavaBeanDescriptor.TYPE_MAP);\n-        }\n-\n-        return new JavaBeanDescriptor(cl.getName(), JavaBeanDescriptor.TYPE_BEAN);\n-    }\n-\n-    private static JavaBeanDescriptor createDescriptorIfAbsent(Object obj, JavaBeanAccessor accessor,\n-                                                               IdentityHashMap<Object, JavaBeanDescriptor> cache) {\n-        if (cache.containsKey(obj)) {\n-            return cache.get(obj);\n-        }\n-\n-        if (obj instanceof JavaBeanDescriptor) {\n-            return (JavaBeanDescriptor) obj;\n-        }\n-\n-        JavaBeanDescriptor result = createDescriptorForSerialize(obj.getClass());\n-        cache.put(obj, result);\n-        serializeInternal(result, obj, accessor, cache);\n-        return result;\n-    }\n-\n-    private static void serializeInternal(JavaBeanDescriptor descriptor, Object obj, JavaBeanAccessor accessor,\n-                                          IdentityHashMap<Object, JavaBeanDescriptor> cache) {\n-        if (obj == null || descriptor == null) {\n-            return;\n-        }\n-\n-        if (obj.getClass().isEnum()) {\n-            descriptor.setEnumNameProperty(((Enum<?>) obj).name());\n-        } else if (ReflectUtils.isPrimitive(obj.getClass())) {\n-            descriptor.setPrimitiveProperty(obj);\n-        } else if (Class.class.equals(obj.getClass())) {\n-            descriptor.setClassNameProperty(((Class<?>) obj).getName());\n-        } else if (obj.getClass().isArray()) {\n-            int len = Array.getLength(obj);\n-            for (int i = 0; i < len; i++) {\n-                Object item = Array.get(obj, i);\n-                if (item == null) {\n-                    descriptor.setProperty(i, null);\n-                } else {\n-                    JavaBeanDescriptor itemDescriptor = createDescriptorIfAbsent(item, accessor, cache);\n-                    descriptor.setProperty(i, itemDescriptor);\n-                }\n-            }\n-        } else if (obj instanceof Collection) {\n-            Collection collection = (Collection) obj;\n-            int index = 0;\n-            for (Object item : collection) {\n-                if (item == null) {\n-                    descriptor.setProperty(index++, null);\n-                } else {\n-                    JavaBeanDescriptor itemDescriptor = createDescriptorIfAbsent(item, accessor, cache);\n-                    descriptor.setProperty(index++, itemDescriptor);\n-                }\n-            }\n-        } else if (obj instanceof Map) {\n-            Map map = (Map) obj;\n-            map.forEach((key, value) -> {\n-                Object keyDescriptor = key == null ? null : createDescriptorIfAbsent(key, accessor, cache);\n-                Object valueDescriptor = value == null ? null : createDescriptorIfAbsent(value, accessor, cache);\n-                descriptor.setProperty(keyDescriptor, valueDescriptor);\n-            });// ~ end of loop map\n-        } else {\n-            if (JavaBeanAccessor.isAccessByMethod(accessor)) {\n-                Map<String, Method> methods = ReflectUtils.getBeanPropertyReadMethods(obj.getClass());\n-                for (Map.Entry<String, Method> entry : methods.entrySet()) {\n-                    try {\n-                        Object value = entry.getValue().invoke(obj);\n-                        if (value == null) {\n-                            continue;\n-                        }\n-                        JavaBeanDescriptor valueDescriptor = createDescriptorIfAbsent(value, accessor, cache);\n-                        descriptor.setProperty(entry.getKey(), valueDescriptor);\n-                    } catch (Exception e) {\n-                        throw new RuntimeException(e.getMessage(), e);\n-                    }\n-                } // ~ end of loop method map\n-            } // ~ end of if (JavaBeanAccessor.isAccessByMethod(accessor))\n-\n-            if (JavaBeanAccessor.isAccessByField(accessor)) {\n-                Map<String, Field> fields = ReflectUtils.getBeanPropertyFields(obj.getClass());\n-                for (Map.Entry<String, Field> entry : fields.entrySet()) {\n-                    if (!descriptor.containsProperty(entry.getKey())) {\n-                        try {\n-                            Object value = entry.getValue().get(obj);\n-                            if (value == null) {\n-                                continue;\n-                            }\n-                            JavaBeanDescriptor valueDescriptor = createDescriptorIfAbsent(value, accessor, cache);\n-                            descriptor.setProperty(entry.getKey(), valueDescriptor);\n-                        } catch (Exception e) {\n-                            throw new RuntimeException(e.getMessage(), e);\n-                        }\n-                    }\n-                } // ~ end of loop field map\n-            } // ~ end of if (JavaBeanAccessor.isAccessByField(accessor))\n-\n-        } // ~ end of else\n-\n-    } // ~ end of method serializeInternal\n-\n-    public static Object deserialize(JavaBeanDescriptor beanDescriptor) {\n-        return deserialize(\n-                beanDescriptor,\n-                Thread.currentThread().getContextClassLoader());\n-    }\n-\n-    public static Object deserialize(JavaBeanDescriptor beanDescriptor, ClassLoader loader) {\n-        if (beanDescriptor == null) {\n-            return null;\n-        }\n-        IdentityHashMap<JavaBeanDescriptor, Object> cache = new IdentityHashMap<JavaBeanDescriptor, Object>();\n-        Object result = instantiateForDeserialize(beanDescriptor, loader, cache);\n-        deserializeInternal(result, beanDescriptor, loader, cache);\n-        return result;\n-    }\n-\n-    private static void deserializeInternal(Object result, JavaBeanDescriptor beanDescriptor, ClassLoader loader,\n-                                            IdentityHashMap<JavaBeanDescriptor, Object> cache) {\n-        if (beanDescriptor.isEnumType() || beanDescriptor.isClassType() || beanDescriptor.isPrimitiveType()) {\n-            return;\n-        }\n-\n-        if (beanDescriptor.isArrayType()) {\n-            int index = 0;\n-            for (Map.Entry<Object, Object> entry : beanDescriptor) {\n-                Object item = entry.getValue();\n-                if (item instanceof JavaBeanDescriptor) {\n-                    JavaBeanDescriptor itemDescriptor = (JavaBeanDescriptor) entry.getValue();\n-                    item = instantiateForDeserialize(itemDescriptor, loader, cache);\n-                    deserializeInternal(item, itemDescriptor, loader, cache);\n-                }\n-                Array.set(result, index++, item);\n-            }\n-        } else if (beanDescriptor.isCollectionType()) {\n-            Collection collection = (Collection) result;\n-            for (Map.Entry<Object, Object> entry : beanDescriptor) {\n-                Object item = entry.getValue();\n-                if (item instanceof JavaBeanDescriptor) {\n-                    JavaBeanDescriptor itemDescriptor = (JavaBeanDescriptor) entry.getValue();\n-                    item = instantiateForDeserialize(itemDescriptor, loader, cache);\n-                    deserializeInternal(item, itemDescriptor, loader, cache);\n-                }\n-                collection.add(item);\n-            }\n-        } else if (beanDescriptor.isMapType()) {\n-            Map map = (Map) result;\n-            for (Map.Entry<Object, Object> entry : beanDescriptor) {\n-                Object key = entry.getKey();\n-                Object value = entry.getValue();\n-                if (key instanceof JavaBeanDescriptor) {\n-                    JavaBeanDescriptor keyDescriptor = (JavaBeanDescriptor) entry.getKey();\n-                    key = instantiateForDeserialize(keyDescriptor, loader, cache);\n-                    deserializeInternal(key, keyDescriptor, loader, cache);\n-                }\n-                if (value instanceof JavaBeanDescriptor) {\n-                    JavaBeanDescriptor valueDescriptor = (JavaBeanDescriptor) entry.getValue();\n-                    value = instantiateForDeserialize(valueDescriptor, loader, cache);\n-                    deserializeInternal(value, valueDescriptor, loader, cache);\n-                }\n-                map.put(key, value);\n-            }\n-        } else if (beanDescriptor.isBeanType()) {\n-            for (Map.Entry<Object, Object> entry : beanDescriptor) {\n-                String property = entry.getKey().toString();\n-                Object value = entry.getValue();\n-                if (value == null) {\n-                    continue;\n-                }\n-\n-                if (value instanceof JavaBeanDescriptor) {\n-                    JavaBeanDescriptor valueDescriptor = (JavaBeanDescriptor) entry.getValue();\n-                    value = instantiateForDeserialize(valueDescriptor, loader, cache);\n-                    deserializeInternal(value, valueDescriptor, loader, cache);\n-                }\n-\n-                Method method = getSetterMethod(result.getClass(), property, value.getClass());\n-                boolean setByMethod = false;\n-                try {\n-                    if (method != null) {\n-                        method.invoke(result, value);\n-                        setByMethod = true;\n-                    }\n-                } catch (Exception e) {\n-                    LogHelper.warn(logger, \"Failed to set property through method \" + method, e);\n-                }\n-\n-                if (!setByMethod) {\n-                    try {\n-                        Field field = result.getClass().getField(property);\n-                        if (field != null) {\n-                            field.set(result, value);\n-                        }\n-                    } catch (NoSuchFieldException | IllegalAccessException e1) {\n-                        LogHelper.warn(logger, \"Failed to set field value\", e1);\n-                    }\n-                }\n-            }\n-        } else {\n-            throw new IllegalArgumentException(\"Unsupported type \" +\n-                    beanDescriptor.getClassName() +\n-                    \":\" + beanDescriptor.getType());\n-        }\n-    }\n-\n-    private static Method getSetterMethod(Class<?> cls, String property, Class<?> valueCls) {\n-        String name = \"set\" + property.substring(0, 1).toUpperCase() + property.substring(1);\n-        Method method = null;\n-        try {\n-            method = cls.getMethod(name, valueCls);\n-        } catch (NoSuchMethodException e) {\n-            for (Method m : cls.getMethods()) {\n-                if (ReflectUtils.isBeanPropertyWriteMethod(m)\n-                        && m.getName().equals(name)) {\n-                    method = m;\n-                }\n-            }\n-        }\n-        if (method != null) {\n-            ReflectUtils.makeAccessible(method);\n-        }\n-        return method;\n-    }\n-\n-    private static Object instantiate(Class<?> cl) throws Exception {\n-        Constructor<?>[] constructors = cl.getDeclaredConstructors();\n-        Constructor<?> constructor = null;\n-        int argc = Integer.MAX_VALUE;\n-        for (Constructor<?> c : constructors) {\n-            if (c.getParameterTypes().length < argc) {\n-                argc = c.getParameterTypes().length;\n-                constructor = c;\n-            }\n-        }\n-\n-        if (constructor != null) {\n-            Class<?>[] paramTypes = constructor.getParameterTypes();\n-            Object[] constructorArgs = new Object[paramTypes.length];\n-            for (int i = 0; i < constructorArgs.length; i++) {\n-                constructorArgs[i] = getConstructorArg(paramTypes[i]);\n-            }\n-            try {\n-                ReflectUtils.makeAccessible(constructor);\n-                return constructor.newInstance(constructorArgs);\n-            } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {\n-                LogHelper.warn(logger, e.getMessage(), e);\n-            }\n-        }\n-\n-        return cl.getDeclaredConstructor().newInstance();\n-    }\n-\n-    public static Object getConstructorArg(Class<?> cl) {\n-        if (boolean.class.equals(cl) || Boolean.class.equals(cl)) {\n-            return Boolean.FALSE;\n-        }\n-\n-        if (byte.class.equals(cl) || Byte.class.equals(cl)) {\n-            return (byte) 0;\n-        }\n-\n-        if (short.class.equals(cl) || Short.class.equals(cl)) {\n-            return (short) 0;\n-        }\n-\n-        if (int.class.equals(cl) || Integer.class.equals(cl)) {\n-            return 0;\n-        }\n-\n-        if (long.class.equals(cl) || Long.class.equals(cl)) {\n-            return 0L;\n-        }\n-\n-        if (float.class.equals(cl) || Float.class.equals(cl)) {\n-            return (float) 0;\n-        }\n-\n-        if (double.class.equals(cl) || Double.class.equals(cl)) {\n-            return (double) 0;\n-        }\n-\n-        if (char.class.equals(cl) || Character.class.equals(cl)) {\n-            return (char) 0;\n-        }\n-        return null;\n-    }\n-\n-    private static Object instantiateForDeserialize(JavaBeanDescriptor beanDescriptor, ClassLoader loader,\n-                                                    IdentityHashMap<JavaBeanDescriptor, Object> cache) {\n-        if (cache.containsKey(beanDescriptor)) {\n-            return cache.get(beanDescriptor);\n-        }\n-\n-        if (beanDescriptor.isClassType()) {\n-            try {\n-                return name2Class(loader, beanDescriptor.getClassNameProperty());\n-            } catch (ClassNotFoundException e) {\n-                throw new RuntimeException(e.getMessage(), e);\n-            }\n-        }\n-\n-        if (beanDescriptor.isEnumType()) {\n-            try {\n-                Class<?> enumType = name2Class(loader, beanDescriptor.getClassName());\n-                Method method = getEnumValueOfMethod(enumType);\n-                return method.invoke(null, enumType, beanDescriptor.getEnumPropertyName());\n-            } catch (Exception e) {\n-                throw new RuntimeException(e.getMessage(), e);\n-            }\n-        }\n-\n-        if (beanDescriptor.isPrimitiveType()) {\n-            return beanDescriptor.getPrimitiveProperty();\n-        }\n-\n-        Object result;\n-        if (beanDescriptor.isArrayType()) {\n-            Class<?> componentType;\n-            try {\n-                componentType = name2Class(loader, beanDescriptor.getClassName());\n-            } catch (ClassNotFoundException e) {\n-                throw new RuntimeException(e.getMessage(), e);\n-            }\n-            result = Array.newInstance(componentType, beanDescriptor.propertySize());\n-            cache.put(beanDescriptor, result);\n-        } else {\n-            try {\n-                Class<?> cl = name2Class(loader, beanDescriptor.getClassName());\n-                result = instantiate(cl);\n-                cache.put(beanDescriptor, result);\n-            } catch (Exception e) {\n-                throw new RuntimeException(e.getMessage(), e);\n-            }\n-        }\n-\n-        return result;\n-    }\n-\n-    /**\n-     * Transform the Class.forName String to Class Object.\n-     *\n-     * @param name Class.getName()\n-     * @return Class\n-     * @throws ClassNotFoundException Class.forName\n-     */\n-    public static Class<?> name2Class(ClassLoader loader, String name) throws ClassNotFoundException {\n-        if (TYPES.containsKey(name)) {\n-            return TYPES.get(name);\n-        }\n-        if (isArray(name)) {\n-            int dimension = 0;\n-            while (isArray(name)) {\n-                ++dimension;\n-                name = name.substring(1);\n-            }\n-            Class type = name2Class(loader, name);\n-            int[] dimensions = new int[dimension];\n-            for (int i = 0; i < dimension; i++) {\n-                dimensions[i] = 0;\n-            }\n-            return Array.newInstance(type, dimensions).getClass();\n-        }\n-        if (isReferenceType(name)) {\n-            name = name.substring(1, name.length() - 1);\n-        }\n-        SerializeClassChecker.getInstance().validateClass(name);\n-        return Class.forName(name, false, loader);\n-    }\n-\n-    private static boolean isArray(String type) {\n-        return type != null && type.startsWith(ARRAY_PREFIX);\n-    }\n-\n-    private static boolean isReferenceType(String type) {\n-        return type != null\n-                && type.startsWith(REFERENCE_TYPE_PREFIX)\n-                && type.endsWith(REFERENCE_TYPE_SUFFIX);\n-    }\n-\n-    private static Method getEnumValueOfMethod(Class cl) throws NoSuchMethodException {\n-        return cl.getMethod(\"valueOf\", Class.class, String.class);\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.common.beanutil;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.LogHelper;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.SerializeClassChecker;\r\n+\r\n+import java.lang.reflect.Array;\r\n+import java.lang.reflect.Constructor;\r\n+import java.lang.reflect.Field;\r\n+import java.lang.reflect.InvocationTargetException;\r\n+import java.lang.reflect.Method;\r\n+import java.util.Collection;\r\n+import java.util.HashMap;\r\n+import java.util.IdentityHashMap;\r\n+import java.util.Map;\r\n+\r\n+public final class JavaBeanSerializeUtil {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(JavaBeanSerializeUtil.class);\r\n+    private static final Map<String, Class<?>> TYPES = new HashMap<String, Class<?>>();\r\n+    private static final String ARRAY_PREFIX = \"[\";\r\n+    private static final String REFERENCE_TYPE_PREFIX = \"L\";\r\n+    private static final String REFERENCE_TYPE_SUFFIX = \";\";\r\n+\r\n+    static {\r\n+        TYPES.put(boolean.class.getName(), boolean.class);\r\n+        TYPES.put(byte.class.getName(), byte.class);\r\n+        TYPES.put(short.class.getName(), short.class);\r\n+        TYPES.put(int.class.getName(), int.class);\r\n+        TYPES.put(long.class.getName(), long.class);\r\n+        TYPES.put(float.class.getName(), float.class);\r\n+        TYPES.put(double.class.getName(), double.class);\r\n+        TYPES.put(void.class.getName(), void.class);\r\n+        TYPES.put(\"Z\", boolean.class);\r\n+        TYPES.put(\"B\", byte.class);\r\n+        TYPES.put(\"C\", char.class);\r\n+        TYPES.put(\"D\", double.class);\r\n+        TYPES.put(\"F\", float.class);\r\n+        TYPES.put(\"I\", int.class);\r\n+        TYPES.put(\"J\", long.class);\r\n+        TYPES.put(\"S\", short.class);\r\n+    }\r\n+\r\n+    private JavaBeanSerializeUtil() {\r\n+    }\r\n+\r\n+    public static JavaBeanDescriptor serialize(Object obj) {\r\n+        return serialize(obj, JavaBeanAccessor.FIELD);\r\n+    }\r\n+\r\n+    public static JavaBeanDescriptor serialize(Object obj, JavaBeanAccessor accessor) {\r\n+        if (obj == null) {\r\n+            return null;\r\n+        }\r\n+        if (obj instanceof JavaBeanDescriptor) {\r\n+            return (JavaBeanDescriptor) obj;\r\n+        }\r\n+        IdentityHashMap<Object, JavaBeanDescriptor> cache = new IdentityHashMap<Object, JavaBeanDescriptor>();\r\n+        return createDescriptorIfAbsent(obj, accessor, cache);\r\n+    }\r\n+\r\n+    private static JavaBeanDescriptor createDescriptorForSerialize(Class<?> cl) {\r\n+        if (cl.isEnum()) {\r\n+            return new JavaBeanDescriptor(cl.getName(), JavaBeanDescriptor.TYPE_ENUM);\r\n+        }\r\n+\r\n+        if (cl.isArray()) {\r\n+            return new JavaBeanDescriptor(cl.getComponentType().getName(), JavaBeanDescriptor.TYPE_ARRAY);\r\n+        }\r\n+\r\n+        if (ReflectUtils.isPrimitive(cl)) {\r\n+            return new JavaBeanDescriptor(cl.getName(), JavaBeanDescriptor.TYPE_PRIMITIVE);\r\n+        }\r\n+\r\n+        if (Class.class.equals(cl)) {\r\n+            return new JavaBeanDescriptor(Class.class.getName(), JavaBeanDescriptor.TYPE_CLASS);\r\n+        }\r\n+\r\n+        if (Collection.class.isAssignableFrom(cl)) {\r\n+            return new JavaBeanDescriptor(cl.getName(), JavaBeanDescriptor.TYPE_COLLECTION);\r\n+        }\r\n+\r\n+        if (Map.class.isAssignableFrom(cl)) {\r\n+            return new JavaBeanDescriptor(cl.getName(), JavaBeanDescriptor.TYPE_MAP);\r\n+        }\r\n+\r\n+        return new JavaBeanDescriptor(cl.getName(), JavaBeanDescriptor.TYPE_BEAN);\r\n+    }\r\n+\r\n+    private static JavaBeanDescriptor createDescriptorIfAbsent(Object obj, JavaBeanAccessor accessor,\r\n+                                                               IdentityHashMap<Object, JavaBeanDescriptor> cache) {\r\n+        if (cache.containsKey(obj)) {\r\n+            return cache.get(obj);\r\n+        }\r\n+\r\n+        if (obj instanceof JavaBeanDescriptor) {\r\n+            return (JavaBeanDescriptor) obj;\r\n+        }\r\n+\r\n+        JavaBeanDescriptor result = createDescriptorForSerialize(obj.getClass());\r\n+        cache.put(obj, result);\r\n+        serializeInternal(result, obj, accessor, cache);\r\n+        return result;\r\n+    }\r\n+\r\n+    private static void serializeInternal(JavaBeanDescriptor descriptor, Object obj, JavaBeanAccessor accessor,\r\n+                                          IdentityHashMap<Object, JavaBeanDescriptor> cache) {\r\n+        if (obj == null || descriptor == null) {\r\n+            return;\r\n+        }\r\n+\r\n+        if (obj.getClass().isEnum()) {\r\n+            descriptor.setEnumNameProperty(((Enum<?>) obj).name());\r\n+        } else if (ReflectUtils.isPrimitive(obj.getClass())) {\r\n+            descriptor.setPrimitiveProperty(obj);\r\n+        } else if (Class.class.equals(obj.getClass())) {\r\n+            descriptor.setClassNameProperty(((Class<?>) obj).getName());\r\n+        } else if (obj.getClass().isArray()) {\r\n+            int len = Array.getLength(obj);\r\n+            for (int i = 0; i < len; i++) {\r\n+                Object item = Array.get(obj, i);\r\n+                if (item == null) {\r\n+                    descriptor.setProperty(i, null);\r\n+                } else {\r\n+                    JavaBeanDescriptor itemDescriptor = createDescriptorIfAbsent(item, accessor, cache);\r\n+                    descriptor.setProperty(i, itemDescriptor);\r\n+                }\r\n+            }\r\n+        } else if (obj instanceof Collection) {\r\n+            Collection collection = (Collection) obj;\r\n+            int index = 0;\r\n+            for (Object item : collection) {\r\n+                if (item == null) {\r\n+                    descriptor.setProperty(index++, null);\r\n+                } else {\r\n+                    JavaBeanDescriptor itemDescriptor = createDescriptorIfAbsent(item, accessor, cache);\r\n+                    descriptor.setProperty(index++, itemDescriptor);\r\n+                }\r\n+            }\r\n+        } else if (obj instanceof Map) {\r\n+            Map map = (Map) obj;\r\n+            map.forEach((key, value) -> {\r\n+                Object keyDescriptor = key == null ? null : createDescriptorIfAbsent(key, accessor, cache);\r\n+                Object valueDescriptor = value == null ? null : createDescriptorIfAbsent(value, accessor, cache);\r\n+                descriptor.setProperty(keyDescriptor, valueDescriptor);\r\n+            });// ~ end of loop map\r\n+        } else {\r\n+            if (JavaBeanAccessor.isAccessByMethod(accessor)) {\r\n+                Map<String, Method> methods = ReflectUtils.getBeanPropertyReadMethods(obj.getClass());\r\n+                for (Map.Entry<String, Method> entry : methods.entrySet()) {\r\n+                    try {\r\n+                        Object value = entry.getValue().invoke(obj);\r\n+                        if (value == null) {\r\n+                            continue;\r\n+                        }\r\n+                        JavaBeanDescriptor valueDescriptor = createDescriptorIfAbsent(value, accessor, cache);\r\n+                        descriptor.setProperty(entry.getKey(), valueDescriptor);\r\n+                    } catch (Exception e) {\r\n+                        throw new RuntimeException(e.getMessage(), e);\r\n+                    }\r\n+                } // ~ end of loop method map\r\n+            } // ~ end of if (JavaBeanAccessor.isAccessByMethod(accessor))\r\n+\r\n+            if (JavaBeanAccessor.isAccessByField(accessor)) {\r\n+                Map<String, Field> fields = ReflectUtils.getBeanPropertyFields(obj.getClass());\r\n+                for (Map.Entry<String, Field> entry : fields.entrySet()) {\r\n+                    if (!descriptor.containsProperty(entry.getKey())) {\r\n+                        try {\r\n+                            Object value = entry.getValue().get(obj);\r\n+                            if (value == null) {\r\n+                                continue;\r\n+                            }\r\n+                            JavaBeanDescriptor valueDescriptor = createDescriptorIfAbsent(value, accessor, cache);\r\n+                            descriptor.setProperty(entry.getKey(), valueDescriptor);\r\n+                        } catch (Exception e) {\r\n+                            throw new RuntimeException(e.getMessage(), e);\r\n+                        }\r\n+                    }\r\n+                } // ~ end of loop field map\r\n+            } // ~ end of if (JavaBeanAccessor.isAccessByField(accessor))\r\n+\r\n+        } // ~ end of else\r\n+\r\n+    } // ~ end of method serializeInternal\r\n+\r\n+    public static Object deserialize(JavaBeanDescriptor beanDescriptor) {\r\n+        return deserialize(\r\n+                beanDescriptor,\r\n+                Thread.currentThread().getContextClassLoader());\r\n+    }\r\n+\r\n+    public static Object deserialize(JavaBeanDescriptor beanDescriptor, ClassLoader loader) {\r\n+        if (beanDescriptor == null) {\r\n+            return null;\r\n+        }\r\n+        IdentityHashMap<JavaBeanDescriptor, Object> cache = new IdentityHashMap<JavaBeanDescriptor, Object>();\r\n+        Object result = instantiateForDeserialize(beanDescriptor, loader, cache);\r\n+        deserializeInternal(result, beanDescriptor, loader, cache);\r\n+        return result;\r\n+    }\r\n+\r\n+    private static void deserializeInternal(Object result, JavaBeanDescriptor beanDescriptor, ClassLoader loader,\r\n+                                            IdentityHashMap<JavaBeanDescriptor, Object> cache) {\r\n+        if (beanDescriptor.isEnumType() || beanDescriptor.isClassType() || beanDescriptor.isPrimitiveType()) {\r\n+            return;\r\n+        }\r\n+\r\n+        if (beanDescriptor.isArrayType()) {\r\n+            int index = 0;\r\n+            for (Map.Entry<Object, Object> entry : beanDescriptor) {\r\n+                Object item = entry.getValue();\r\n+                if (item instanceof JavaBeanDescriptor) {\r\n+                    JavaBeanDescriptor itemDescriptor = (JavaBeanDescriptor) entry.getValue();\r\n+                    item = instantiateForDeserialize(itemDescriptor, loader, cache);\r\n+                    deserializeInternal(item, itemDescriptor, loader, cache);\r\n+                }\r\n+                Array.set(result, index++, item);\r\n+            }\r\n+        } else if (beanDescriptor.isCollectionType()) {\r\n+            Collection collection = (Collection) result;\r\n+            for (Map.Entry<Object, Object> entry : beanDescriptor) {\r\n+                Object item = entry.getValue();\r\n+                if (item instanceof JavaBeanDescriptor) {\r\n+                    JavaBeanDescriptor itemDescriptor = (JavaBeanDescriptor) entry.getValue();\r\n+                    item = instantiateForDeserialize(itemDescriptor, loader, cache);\r\n+                    deserializeInternal(item, itemDescriptor, loader, cache);\r\n+                }\r\n+                collection.add(item);\r\n+            }\r\n+        } else if (beanDescriptor.isMapType()) {\r\n+            Map map = (Map) result;\r\n+            for (Map.Entry<Object, Object> entry : beanDescriptor) {\r\n+                Object key = entry.getKey();\r\n+                Object value = entry.getValue();\r\n+                if (key instanceof JavaBeanDescriptor) {\r\n+                    JavaBeanDescriptor keyDescriptor = (JavaBeanDescriptor) entry.getKey();\r\n+                    key = instantiateForDeserialize(keyDescriptor, loader, cache);\r\n+                    deserializeInternal(key, keyDescriptor, loader, cache);\r\n+                }\r\n+                if (value instanceof JavaBeanDescriptor) {\r\n+                    JavaBeanDescriptor valueDescriptor = (JavaBeanDescriptor) entry.getValue();\r\n+                    value = instantiateForDeserialize(valueDescriptor, loader, cache);\r\n+                    deserializeInternal(value, valueDescriptor, loader, cache);\r\n+                }\r\n+                map.put(key, value);\r\n+            }\r\n+        } else if (beanDescriptor.isBeanType()) {\r\n+            for (Map.Entry<Object, Object> entry : beanDescriptor) {\r\n+                String property = entry.getKey().toString();\r\n+                Object value = entry.getValue();\r\n+                if (value == null) {\r\n+                    continue;\r\n+                }\r\n+\r\n+                if (value instanceof JavaBeanDescriptor) {\r\n+                    JavaBeanDescriptor valueDescriptor = (JavaBeanDescriptor) entry.getValue();\r\n+                    value = instantiateForDeserialize(valueDescriptor, loader, cache);\r\n+                    deserializeInternal(value, valueDescriptor, loader, cache);\r\n+                }\r\n+\r\n+                Method method = getSetterMethod(result.getClass(), property, value.getClass());\r\n+                boolean setByMethod = false;\r\n+                try {\r\n+                    if (method != null) {\r\n+                        method.invoke(result, value);\r\n+                        setByMethod = true;\r\n+                    }\r\n+                } catch (Exception e) {\r\n+                    LogHelper.warn(logger, \"Failed to set property through method \" + method, e);\r\n+                }\r\n+\r\n+                if (!setByMethod) {\r\n+                    try {\r\n+                        Field field = result.getClass().getField(property);\r\n+                        if (field != null) {\r\n+                            field.set(result, value);\r\n+                        }\r\n+                    } catch (NoSuchFieldException | IllegalAccessException e1) {\r\n+                        LogHelper.warn(logger, \"Failed to set field value\", e1);\r\n+                    }\r\n+                }\r\n+            }\r\n+        } else {\r\n+            throw new IllegalArgumentException(\"Unsupported type \" +\r\n+                    beanDescriptor.getClassName() +\r\n+                    \":\" + beanDescriptor.getType());\r\n+        }\r\n+    }\r\n+\r\n+    private static Method getSetterMethod(Class<?> cls, String property, Class<?> valueCls) {\r\n+        String name = \"set\" + property.substring(0, 1).toUpperCase() + property.substring(1);\r\n+        Method method = null;\r\n+        try {\r\n+            method = cls.getMethod(name, valueCls);\r\n+        } catch (NoSuchMethodException e) {\r\n+            for (Method m : cls.getMethods()) {\r\n+                if (ReflectUtils.isBeanPropertyWriteMethod(m)\r\n+                        && m.getName().equals(name)) {\r\n+                    method = m;\r\n+                }\r\n+            }\r\n+        }\r\n+        if (method != null) {\r\n+            ReflectUtils.makeAccessible(method);\r\n+        }\r\n+        return method;\r\n+    }\r\n+\r\n+    private static Object instantiate(Class<?> cl) throws Exception {\r\n+        Constructor<?>[] constructors = cl.getDeclaredConstructors();\r\n+        Constructor<?> constructor = null;\r\n+        int argc = Integer.MAX_VALUE;\r\n+        for (Constructor<?> c : constructors) {\r\n+            if (c.getParameterTypes().length < argc) {\r\n+                argc = c.getParameterTypes().length;\r\n+                constructor = c;\r\n+            }\r\n+        }\r\n+\r\n+        if (constructor != null) {\r\n+            Class<?>[] paramTypes = constructor.getParameterTypes();\r\n+            Object[] constructorArgs = new Object[paramTypes.length];\r\n+            for (int i = 0; i < constructorArgs.length; i++) {\r\n+                constructorArgs[i] = getConstructorArg(paramTypes[i]);\r\n+            }\r\n+            try {\r\n+                ReflectUtils.makeAccessible(constructor);\r\n+                return constructor.newInstance(constructorArgs);\r\n+            } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {\r\n+                LogHelper.warn(logger, e.getMessage(), e);\r\n+            }\r\n+        }\r\n+\r\n+        return cl.getDeclaredConstructor().newInstance();\r\n+    }\r\n+\r\n+    public static Object getConstructorArg(Class<?> cl) {\r\n+        if (boolean.class.equals(cl) || Boolean.class.equals(cl)) {\r\n+            return Boolean.FALSE;\r\n+        }\r\n+\r\n+        if (byte.class.equals(cl) || Byte.class.equals(cl)) {\r\n+            return (byte) 0;\r\n+        }\r\n+\r\n+        if (short.class.equals(cl) || Short.class.equals(cl)) {\r\n+            return (short) 0;\r\n+        }\r\n+\r\n+        if (int.class.equals(cl) || Integer.class.equals(cl)) {\r\n+            return 0;\r\n+        }\r\n+\r\n+        if (long.class.equals(cl) || Long.class.equals(cl)) {\r\n+            return 0L;\r\n+        }\r\n+\r\n+        if (float.class.equals(cl) || Float.class.equals(cl)) {\r\n+            return (float) 0;\r\n+        }\r\n+\r\n+        if (double.class.equals(cl) || Double.class.equals(cl)) {\r\n+            return (double) 0;\r\n+        }\r\n+\r\n+        if (char.class.equals(cl) || Character.class.equals(cl)) {\r\n+            return (char) 0;\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    private static Object instantiateForDeserialize(JavaBeanDescriptor beanDescriptor, ClassLoader loader,\r\n+                                                    IdentityHashMap<JavaBeanDescriptor, Object> cache) {\r\n+        if (cache.containsKey(beanDescriptor)) {\r\n+            return cache.get(beanDescriptor);\r\n+        }\r\n+\r\n+        if (beanDescriptor.isClassType()) {\r\n+            try {\r\n+                return name2Class(loader, beanDescriptor.getClassNameProperty());\r\n+            } catch (ClassNotFoundException e) {\r\n+                throw new RuntimeException(e.getMessage(), e);\r\n+            }\r\n+        }\r\n+\r\n+        if (beanDescriptor.isEnumType()) {\r\n+            try {\r\n+                Class<?> enumType = name2Class(loader, beanDescriptor.getClassName());\r\n+                Method method = getEnumValueOfMethod(enumType);\r\n+                return method.invoke(null, enumType, beanDescriptor.getEnumPropertyName());\r\n+            } catch (Exception e) {\r\n+                throw new RuntimeException(e.getMessage(), e);\r\n+            }\r\n+        }\r\n+\r\n+        if (beanDescriptor.isPrimitiveType()) {\r\n+            return beanDescriptor.getPrimitiveProperty();\r\n+        }\r\n+\r\n+        Object result;\r\n+        if (beanDescriptor.isArrayType()) {\r\n+            Class<?> componentType;\r\n+            try {\r\n+                componentType = name2Class(loader, beanDescriptor.getClassName());\r\n+            } catch (ClassNotFoundException e) {\r\n+                throw new RuntimeException(e.getMessage(), e);\r\n+            }\r\n+            result = Array.newInstance(componentType, beanDescriptor.propertySize());\r\n+            cache.put(beanDescriptor, result);\r\n+        } else {\r\n+            try {\r\n+                Class<?> cl = name2Class(loader, beanDescriptor.getClassName());\r\n+                result = instantiate(cl);\r\n+                cache.put(beanDescriptor, result);\r\n+            } catch (Exception e) {\r\n+                throw new RuntimeException(e.getMessage(), e);\r\n+            }\r\n+        }\r\n+\r\n+        return result;\r\n+    }\r\n+\r\n+    /**\r\n+     * Transform the Class.forName String to Class Object.\r\n+     *\r\n+     * @param name Class.getName()\r\n+     * @return Class\r\n+     * @throws ClassNotFoundException Class.forName\r\n+     */\r\n+    public static Class<?> name2Class(ClassLoader loader, String name) throws ClassNotFoundException {\r\n+        if (TYPES.containsKey(name)) {\r\n+            return TYPES.get(name);\r\n+        }\r\n+        if (isArray(name)) {\r\n+            int dimension = 0;\r\n+            while (isArray(name)) {\r\n+                ++dimension;\r\n+                name = name.substring(1);\r\n+            }\r\n+            Class type = name2Class(loader, name);\r\n+            int[] dimensions = new int[dimension];\r\n+            for (int i = 0; i < dimension; i++) {\r\n+                dimensions[i] = 0;\r\n+            }\r\n+            return Array.newInstance(type, dimensions).getClass();\r\n+        }\r\n+        if (isReferenceType(name)) {\r\n+            name = name.substring(1, name.length() - 1);\r\n+        }\r\n+        SerializeClassChecker.getInstance().validateClass(name);\r\n+        return Class.forName(name, false, loader);\r\n+    }\r\n+\r\n+    private static boolean isArray(String type) {\r\n+        return type != null && type.startsWith(ARRAY_PREFIX);\r\n+    }\r\n+\r\n+    private static boolean isReferenceType(String type) {\r\n+        return type != null\r\n+                && type.startsWith(REFERENCE_TYPE_PREFIX)\r\n+                && type.endsWith(REFERENCE_TYPE_SUFFIX);\r\n+    }\r\n+\r\n+    private static Method getEnumValueOfMethod(Class cl) throws NoSuchMethodException {\r\n+        return cl.getMethod(\"valueOf\", Class.class, String.class);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/bytecode/ClassGenerator.java", "source2": "org/apache/dubbo/common/bytecode/ClassGenerator.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,388 +1,388 @@\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.common.bytecode;\n-\n-import org.apache.dubbo.common.utils.ArrayUtils;\n-import org.apache.dubbo.common.utils.ClassUtils;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import javassist.CannotCompileException;\n-import javassist.ClassPool;\n-import javassist.CtClass;\n-import javassist.CtConstructor;\n-import javassist.CtField;\n-import javassist.CtMethod;\n-import javassist.CtNewConstructor;\n-import javassist.CtNewMethod;\n-import javassist.NotFoundException;\n-\n-import java.lang.reflect.Constructor;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Modifier;\n-import java.security.ProtectionDomain;\n-import java.util.ArrayList;\n-import java.util.HashSet;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.atomic.AtomicLong;\n-\n-/**\n- * ClassGenerator\n- */\n-public final class ClassGenerator {\n-\n-    private static final AtomicLong CLASS_NAME_COUNTER = new AtomicLong(0);\n-    private static final String SIMPLE_NAME_TAG = \"<init>\";\n-    private static final Map<ClassLoader, ClassPool> POOL_MAP = new ConcurrentHashMap<ClassLoader, ClassPool>(); //ClassLoader - ClassPool\n-    private ClassPool mPool;\n-    private CtClass mCtc;\n-    private String mClassName;\n-    private String mSuperClass;\n-    private Set<String> mInterfaces;\n-    private List<String> mFields;\n-    private List<String> mConstructors;\n-    private List<String> mMethods;\n-    private Map<String, Method> mCopyMethods; // <method desc,method instance>\n-    private Map<String, Constructor<?>> mCopyConstructors; // <constructor desc,constructor instance>\n-    private boolean mDefaultConstructor = false;\n-\n-    private ClassGenerator() {\n-    }\n-\n-    private ClassGenerator(ClassPool pool) {\n-        mPool = pool;\n-    }\n-\n-    public static ClassGenerator newInstance() {\n-        return new ClassGenerator(getClassPool(Thread.currentThread().getContextClassLoader()));\n-    }\n-\n-    public static ClassGenerator newInstance(ClassLoader loader) {\n-        return new ClassGenerator(getClassPool(loader));\n-    }\n-\n-    public static boolean isDynamicClass(Class<?> cl) {\n-        return ClassGenerator.DC.class.isAssignableFrom(cl);\n-    }\n-\n-    public static ClassPool getClassPool(ClassLoader loader) {\n-        if (loader == null) {\n-            return ClassPool.getDefault();\n-        }\n-\n-        ClassPool pool = POOL_MAP.get(loader);\n-        if (pool == null) {\n-            pool = new ClassPool(true);\n-            pool.appendClassPath(new CustomizedLoaderClassPath(loader));\n-            POOL_MAP.put(loader, pool);\n-        }\n-        return pool;\n-    }\n-\n-    private static String modifier(int mod) {\n-        StringBuilder modifier = new StringBuilder();\n-        if (Modifier.isPublic(mod)) {\n-            modifier.append(\"public\");\n-        } else if (Modifier.isProtected(mod)) {\n-            modifier.append(\"protected\");\n-        } else if (Modifier.isPrivate(mod)) {\n-            modifier.append(\"private\");\n-        }\n-\n-        if (Modifier.isStatic(mod)) {\n-            modifier.append(\" static\");\n-        }\n-        if (Modifier.isVolatile(mod)) {\n-            modifier.append(\" volatile\");\n-        }\n-\n-        return modifier.toString();\n-    }\n-\n-    public String getClassName() {\n-        return mClassName;\n-    }\n-\n-    public ClassGenerator setClassName(String name) {\n-        mClassName = name;\n-        return this;\n-    }\n-\n-    public ClassGenerator addInterface(String cn) {\n-        if (mInterfaces == null) {\n-            mInterfaces = new HashSet<String>();\n-        }\n-        mInterfaces.add(cn);\n-        return this;\n-    }\n-\n-    public ClassGenerator addInterface(Class<?> cl) {\n-        return addInterface(cl.getName());\n-    }\n-\n-    public ClassGenerator setSuperClass(String cn) {\n-        mSuperClass = cn;\n-        return this;\n-    }\n-\n-    public ClassGenerator setSuperClass(Class<?> cl) {\n-        mSuperClass = cl.getName();\n-        return this;\n-    }\n-\n-    public ClassGenerator addField(String code) {\n-        if (mFields == null) {\n-            mFields = new ArrayList<String>();\n-        }\n-        mFields.add(code);\n-        return this;\n-    }\n-\n-    public ClassGenerator addField(String name, int mod, Class<?> type) {\n-        return addField(name, mod, type, null);\n-    }\n-\n-    public ClassGenerator addField(String name, int mod, Class<?> type, String def) {\n-        StringBuilder sb = new StringBuilder();\n-        sb.append(modifier(mod)).append(' ').append(ReflectUtils.getName(type)).append(' ');\n-        sb.append(name);\n-        if (StringUtils.isNotEmpty(def)) {\n-            sb.append('=');\n-            sb.append(def);\n-        }\n-        sb.append(';');\n-        return addField(sb.toString());\n-    }\n-\n-    public ClassGenerator addMethod(String code) {\n-        if (mMethods == null) {\n-            mMethods = new ArrayList<String>();\n-        }\n-        mMethods.add(code);\n-        return this;\n-    }\n-\n-    public ClassGenerator addMethod(String name, int mod, Class<?> rt, Class<?>[] pts, String body) {\n-        return addMethod(name, mod, rt, pts, null, body);\n-    }\n-\n-    public ClassGenerator addMethod(String name, int mod, Class<?> rt, Class<?>[] pts, Class<?>[] ets,\n-                                    String body) {\n-        StringBuilder sb = new StringBuilder();\n-        sb.append(modifier(mod)).append(' ').append(ReflectUtils.getName(rt)).append(' ').append(name);\n-        sb.append('(');\n-        for (int i = 0; i < pts.length; i++) {\n-            if (i > 0) {\n-                sb.append(',');\n-            }\n-            sb.append(ReflectUtils.getName(pts[i]));\n-            sb.append(\" arg\").append(i);\n-        }\n-        sb.append(')');\n-        if (ArrayUtils.isNotEmpty(ets)) {\n-            sb.append(\" throws \");\n-            for (int i = 0; i < ets.length; i++) {\n-                if (i > 0) {\n-                    sb.append(',');\n-                }\n-                sb.append(ReflectUtils.getName(ets[i]));\n-            }\n-        }\n-        sb.append('{').append(body).append('}');\n-        return addMethod(sb.toString());\n-    }\n-\n-    public ClassGenerator addMethod(Method m) {\n-        addMethod(m.getName(), m);\n-        return this;\n-    }\n-\n-    public ClassGenerator addMethod(String name, Method m) {\n-        String desc = name + ReflectUtils.getDescWithoutMethodName(m);\n-        addMethod(':' + desc);\n-        if (mCopyMethods == null) {\n-            mCopyMethods = new ConcurrentHashMap<String, Method>(8);\n-        }\n-        mCopyMethods.put(desc, m);\n-        return this;\n-    }\n-\n-    public ClassGenerator addConstructor(String code) {\n-        if (mConstructors == null) {\n-            mConstructors = new LinkedList<String>();\n-        }\n-        mConstructors.add(code);\n-        return this;\n-    }\n-\n-    public ClassGenerator addConstructor(int mod, Class<?>[] pts, String body) {\n-        return addConstructor(mod, pts, null, body);\n-    }\n-\n-    public ClassGenerator addConstructor(int mod, Class<?>[] pts, Class<?>[] ets, String body) {\n-        StringBuilder sb = new StringBuilder();\n-        sb.append(modifier(mod)).append(' ').append(SIMPLE_NAME_TAG);\n-        sb.append('(');\n-        for (int i = 0; i < pts.length; i++) {\n-            if (i > 0) {\n-                sb.append(',');\n-            }\n-            sb.append(ReflectUtils.getName(pts[i]));\n-            sb.append(\" arg\").append(i);\n-        }\n-        sb.append(')');\n-        if (ArrayUtils.isNotEmpty(ets)) {\n-            sb.append(\" throws \");\n-            for (int i = 0; i < ets.length; i++) {\n-                if (i > 0) {\n-                    sb.append(',');\n-                }\n-                sb.append(ReflectUtils.getName(ets[i]));\n-            }\n-        }\n-        sb.append('{').append(body).append('}');\n-        return addConstructor(sb.toString());\n-    }\n-\n-    public ClassGenerator addConstructor(Constructor<?> c) {\n-        String desc = ReflectUtils.getDesc(c);\n-        addConstructor(\":\" + desc);\n-        if (mCopyConstructors == null) {\n-            mCopyConstructors = new ConcurrentHashMap<String, Constructor<?>>(4);\n-        }\n-        mCopyConstructors.put(desc, c);\n-        return this;\n-    }\n-\n-    public ClassGenerator addDefaultConstructor() {\n-        mDefaultConstructor = true;\n-        return this;\n-    }\n-\n-    public ClassPool getClassPool() {\n-        return mPool;\n-    }\n-\n-    public Class<?> toClass() {\n-        return toClass(ClassUtils.getClassLoader(ClassGenerator.class),\n-                getClass().getProtectionDomain());\n-    }\n-\n-    public Class<?> toClass(ClassLoader loader, ProtectionDomain pd) {\n-        if (mCtc != null) {\n-            mCtc.detach();\n-        }\n-        long id = CLASS_NAME_COUNTER.getAndIncrement();\n-        try {\n-            CtClass ctcs = mSuperClass == null ? null : mPool.get(mSuperClass);\n-            if (mClassName == null) {\n-                mClassName = (mSuperClass == null || javassist.Modifier.isPublic(ctcs.getModifiers())\n-                        ? ClassGenerator.class.getName() : mSuperClass + \"$sc\") + id;\n-            }\n-            mCtc = mPool.makeClass(mClassName);\n-            if (mSuperClass != null) {\n-                mCtc.setSuperclass(ctcs);\n-            }\n-            mCtc.addInterface(mPool.get(DC.class.getName())); // add dynamic class tag.\n-            if (mInterfaces != null) {\n-                for (String cl : mInterfaces) {\n-                    mCtc.addInterface(mPool.get(cl));\n-                }\n-            }\n-            if (mFields != null) {\n-                for (String code : mFields) {\n-                    mCtc.addField(CtField.make(code, mCtc));\n-                }\n-            }\n-            if (mMethods != null) {\n-                for (String code : mMethods) {\n-                    if (code.charAt(0) == ':') {\n-                        mCtc.addMethod(CtNewMethod.copy(getCtMethod(mCopyMethods.get(code.substring(1))),\n-                                code.substring(1, code.indexOf('(')), mCtc, null));\n-                    } else {\n-                        mCtc.addMethod(CtNewMethod.make(code, mCtc));\n-                    }\n-                }\n-            }\n-            if (mDefaultConstructor) {\n-                mCtc.addConstructor(CtNewConstructor.defaultConstructor(mCtc));\n-            }\n-            if (mConstructors != null) {\n-                for (String code : mConstructors) {\n-                    if (code.charAt(0) == ':') {\n-                        mCtc.addConstructor(CtNewConstructor\n-                                .copy(getCtConstructor(mCopyConstructors.get(code.substring(1))), mCtc, null));\n-                    } else {\n-                        String[] sn = mCtc.getSimpleName().split(\"\\\\$+\"); // inner class name include $.\n-                        mCtc.addConstructor(\n-                                CtNewConstructor.make(code.replaceFirst(SIMPLE_NAME_TAG, sn[sn.length - 1]), mCtc));\n-                    }\n-                }\n-            }\n-            return mCtc.toClass(loader, pd);\n-        } catch (RuntimeException e) {\n-            throw e;\n-        } catch (NotFoundException | CannotCompileException e) {\n-            throw new RuntimeException(e.getMessage(), e);\n-        }\n-    }\n-\n-    public void release() {\n-        if (mCtc != null) {\n-            mCtc.detach();\n-        }\n-        if (mInterfaces != null) {\n-            mInterfaces.clear();\n-        }\n-        if (mFields != null) {\n-            mFields.clear();\n-        }\n-        if (mMethods != null) {\n-            mMethods.clear();\n-        }\n-        if (mConstructors != null) {\n-            mConstructors.clear();\n-        }\n-        if (mCopyMethods != null) {\n-            mCopyMethods.clear();\n-        }\n-        if (mCopyConstructors != null) {\n-            mCopyConstructors.clear();\n-        }\n-    }\n-\n-    private CtClass getCtClass(Class<?> c) throws NotFoundException {\n-        return mPool.get(c.getName());\n-    }\n-\n-    private CtMethod getCtMethod(Method m) throws NotFoundException {\n-        return getCtClass(m.getDeclaringClass())\n-                .getMethod(m.getName(), ReflectUtils.getDescWithoutMethodName(m));\n-    }\n-\n-    private CtConstructor getCtConstructor(Constructor<?> c) throws NotFoundException {\n-        return getCtClass(c.getDeclaringClass()).getConstructor(ReflectUtils.getDesc(c));\n-    }\n-\n-    public static interface DC {\n-\n-    } // dynamic class tag interface.\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.common.bytecode;\r\n+\r\n+import org.apache.dubbo.common.utils.ArrayUtils;\r\n+import org.apache.dubbo.common.utils.ClassUtils;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import javassist.CannotCompileException;\r\n+import javassist.ClassPool;\r\n+import javassist.CtClass;\r\n+import javassist.CtConstructor;\r\n+import javassist.CtField;\r\n+import javassist.CtMethod;\r\n+import javassist.CtNewConstructor;\r\n+import javassist.CtNewMethod;\r\n+import javassist.NotFoundException;\r\n+\r\n+import java.lang.reflect.Constructor;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Modifier;\r\n+import java.security.ProtectionDomain;\r\n+import java.util.ArrayList;\r\n+import java.util.HashSet;\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.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.atomic.AtomicLong;\r\n+\r\n+/**\r\n+ * ClassGenerator\r\n+ */\r\n+public final class ClassGenerator {\r\n+\r\n+    private static final AtomicLong CLASS_NAME_COUNTER = new AtomicLong(0);\r\n+    private static final String SIMPLE_NAME_TAG = \"<init>\";\r\n+    private static final Map<ClassLoader, ClassPool> POOL_MAP = new ConcurrentHashMap<ClassLoader, ClassPool>(); //ClassLoader - ClassPool\r\n+    private ClassPool mPool;\r\n+    private CtClass mCtc;\r\n+    private String mClassName;\r\n+    private String mSuperClass;\r\n+    private Set<String> mInterfaces;\r\n+    private List<String> mFields;\r\n+    private List<String> mConstructors;\r\n+    private List<String> mMethods;\r\n+    private Map<String, Method> mCopyMethods; // <method desc,method instance>\r\n+    private Map<String, Constructor<?>> mCopyConstructors; // <constructor desc,constructor instance>\r\n+    private boolean mDefaultConstructor = false;\r\n+\r\n+    private ClassGenerator() {\r\n+    }\r\n+\r\n+    private ClassGenerator(ClassPool pool) {\r\n+        mPool = pool;\r\n+    }\r\n+\r\n+    public static ClassGenerator newInstance() {\r\n+        return new ClassGenerator(getClassPool(Thread.currentThread().getContextClassLoader()));\r\n+    }\r\n+\r\n+    public static ClassGenerator newInstance(ClassLoader loader) {\r\n+        return new ClassGenerator(getClassPool(loader));\r\n+    }\r\n+\r\n+    public static boolean isDynamicClass(Class<?> cl) {\r\n+        return ClassGenerator.DC.class.isAssignableFrom(cl);\r\n+    }\r\n+\r\n+    public static ClassPool getClassPool(ClassLoader loader) {\r\n+        if (loader == null) {\r\n+            return ClassPool.getDefault();\r\n+        }\r\n+\r\n+        ClassPool pool = POOL_MAP.get(loader);\r\n+        if (pool == null) {\r\n+            pool = new ClassPool(true);\r\n+            pool.appendClassPath(new CustomizedLoaderClassPath(loader));\r\n+            POOL_MAP.put(loader, pool);\r\n+        }\r\n+        return pool;\r\n+    }\r\n+\r\n+    private static String modifier(int mod) {\r\n+        StringBuilder modifier = new StringBuilder();\r\n+        if (Modifier.isPublic(mod)) {\r\n+            modifier.append(\"public\");\r\n+        } else if (Modifier.isProtected(mod)) {\r\n+            modifier.append(\"protected\");\r\n+        } else if (Modifier.isPrivate(mod)) {\r\n+            modifier.append(\"private\");\r\n+        }\r\n+\r\n+        if (Modifier.isStatic(mod)) {\r\n+            modifier.append(\" static\");\r\n+        }\r\n+        if (Modifier.isVolatile(mod)) {\r\n+            modifier.append(\" volatile\");\r\n+        }\r\n+\r\n+        return modifier.toString();\r\n+    }\r\n+\r\n+    public String getClassName() {\r\n+        return mClassName;\r\n+    }\r\n+\r\n+    public ClassGenerator setClassName(String name) {\r\n+        mClassName = name;\r\n+        return this;\r\n+    }\r\n+\r\n+    public ClassGenerator addInterface(String cn) {\r\n+        if (mInterfaces == null) {\r\n+            mInterfaces = new HashSet<String>();\r\n+        }\r\n+        mInterfaces.add(cn);\r\n+        return this;\r\n+    }\r\n+\r\n+    public ClassGenerator addInterface(Class<?> cl) {\r\n+        return addInterface(cl.getName());\r\n+    }\r\n+\r\n+    public ClassGenerator setSuperClass(String cn) {\r\n+        mSuperClass = cn;\r\n+        return this;\r\n+    }\r\n+\r\n+    public ClassGenerator setSuperClass(Class<?> cl) {\r\n+        mSuperClass = cl.getName();\r\n+        return this;\r\n+    }\r\n+\r\n+    public ClassGenerator addField(String code) {\r\n+        if (mFields == null) {\r\n+            mFields = new ArrayList<String>();\r\n+        }\r\n+        mFields.add(code);\r\n+        return this;\r\n+    }\r\n+\r\n+    public ClassGenerator addField(String name, int mod, Class<?> type) {\r\n+        return addField(name, mod, type, null);\r\n+    }\r\n+\r\n+    public ClassGenerator addField(String name, int mod, Class<?> type, String def) {\r\n+        StringBuilder sb = new StringBuilder();\r\n+        sb.append(modifier(mod)).append(' ').append(ReflectUtils.getName(type)).append(' ');\r\n+        sb.append(name);\r\n+        if (StringUtils.isNotEmpty(def)) {\r\n+            sb.append('=');\r\n+            sb.append(def);\r\n+        }\r\n+        sb.append(';');\r\n+        return addField(sb.toString());\r\n+    }\r\n+\r\n+    public ClassGenerator addMethod(String code) {\r\n+        if (mMethods == null) {\r\n+            mMethods = new ArrayList<String>();\r\n+        }\r\n+        mMethods.add(code);\r\n+        return this;\r\n+    }\r\n+\r\n+    public ClassGenerator addMethod(String name, int mod, Class<?> rt, Class<?>[] pts, String body) {\r\n+        return addMethod(name, mod, rt, pts, null, body);\r\n+    }\r\n+\r\n+    public ClassGenerator addMethod(String name, int mod, Class<?> rt, Class<?>[] pts, Class<?>[] ets,\r\n+                                    String body) {\r\n+        StringBuilder sb = new StringBuilder();\r\n+        sb.append(modifier(mod)).append(' ').append(ReflectUtils.getName(rt)).append(' ').append(name);\r\n+        sb.append('(');\r\n+        for (int i = 0; i < pts.length; i++) {\r\n+            if (i > 0) {\r\n+                sb.append(',');\r\n+            }\r\n+            sb.append(ReflectUtils.getName(pts[i]));\r\n+            sb.append(\" arg\").append(i);\r\n+        }\r\n+        sb.append(')');\r\n+        if (ArrayUtils.isNotEmpty(ets)) {\r\n+            sb.append(\" throws \");\r\n+            for (int i = 0; i < ets.length; i++) {\r\n+                if (i > 0) {\r\n+                    sb.append(',');\r\n+                }\r\n+                sb.append(ReflectUtils.getName(ets[i]));\r\n+            }\r\n+        }\r\n+        sb.append('{').append(body).append('}');\r\n+        return addMethod(sb.toString());\r\n+    }\r\n+\r\n+    public ClassGenerator addMethod(Method m) {\r\n+        addMethod(m.getName(), m);\r\n+        return this;\r\n+    }\r\n+\r\n+    public ClassGenerator addMethod(String name, Method m) {\r\n+        String desc = name + ReflectUtils.getDescWithoutMethodName(m);\r\n+        addMethod(':' + desc);\r\n+        if (mCopyMethods == null) {\r\n+            mCopyMethods = new ConcurrentHashMap<String, Method>(8);\r\n+        }\r\n+        mCopyMethods.put(desc, m);\r\n+        return this;\r\n+    }\r\n+\r\n+    public ClassGenerator addConstructor(String code) {\r\n+        if (mConstructors == null) {\r\n+            mConstructors = new LinkedList<String>();\r\n+        }\r\n+        mConstructors.add(code);\r\n+        return this;\r\n+    }\r\n+\r\n+    public ClassGenerator addConstructor(int mod, Class<?>[] pts, String body) {\r\n+        return addConstructor(mod, pts, null, body);\r\n+    }\r\n+\r\n+    public ClassGenerator addConstructor(int mod, Class<?>[] pts, Class<?>[] ets, String body) {\r\n+        StringBuilder sb = new StringBuilder();\r\n+        sb.append(modifier(mod)).append(' ').append(SIMPLE_NAME_TAG);\r\n+        sb.append('(');\r\n+        for (int i = 0; i < pts.length; i++) {\r\n+            if (i > 0) {\r\n+                sb.append(',');\r\n+            }\r\n+            sb.append(ReflectUtils.getName(pts[i]));\r\n+            sb.append(\" arg\").append(i);\r\n+        }\r\n+        sb.append(')');\r\n+        if (ArrayUtils.isNotEmpty(ets)) {\r\n+            sb.append(\" throws \");\r\n+            for (int i = 0; i < ets.length; i++) {\r\n+                if (i > 0) {\r\n+                    sb.append(',');\r\n+                }\r\n+                sb.append(ReflectUtils.getName(ets[i]));\r\n+            }\r\n+        }\r\n+        sb.append('{').append(body).append('}');\r\n+        return addConstructor(sb.toString());\r\n+    }\r\n+\r\n+    public ClassGenerator addConstructor(Constructor<?> c) {\r\n+        String desc = ReflectUtils.getDesc(c);\r\n+        addConstructor(\":\" + desc);\r\n+        if (mCopyConstructors == null) {\r\n+            mCopyConstructors = new ConcurrentHashMap<String, Constructor<?>>(4);\r\n+        }\r\n+        mCopyConstructors.put(desc, c);\r\n+        return this;\r\n+    }\r\n+\r\n+    public ClassGenerator addDefaultConstructor() {\r\n+        mDefaultConstructor = true;\r\n+        return this;\r\n+    }\r\n+\r\n+    public ClassPool getClassPool() {\r\n+        return mPool;\r\n+    }\r\n+\r\n+    public Class<?> toClass() {\r\n+        return toClass(ClassUtils.getClassLoader(ClassGenerator.class),\r\n+                getClass().getProtectionDomain());\r\n+    }\r\n+\r\n+    public Class<?> toClass(ClassLoader loader, ProtectionDomain pd) {\r\n+        if (mCtc != null) {\r\n+            mCtc.detach();\r\n+        }\r\n+        long id = CLASS_NAME_COUNTER.getAndIncrement();\r\n+        try {\r\n+            CtClass ctcs = mSuperClass == null ? null : mPool.get(mSuperClass);\r\n+            if (mClassName == null) {\r\n+                mClassName = (mSuperClass == null || javassist.Modifier.isPublic(ctcs.getModifiers())\r\n+                        ? ClassGenerator.class.getName() : mSuperClass + \"$sc\") + id;\r\n+            }\r\n+            mCtc = mPool.makeClass(mClassName);\r\n+            if (mSuperClass != null) {\r\n+                mCtc.setSuperclass(ctcs);\r\n+            }\r\n+            mCtc.addInterface(mPool.get(DC.class.getName())); // add dynamic class tag.\r\n+            if (mInterfaces != null) {\r\n+                for (String cl : mInterfaces) {\r\n+                    mCtc.addInterface(mPool.get(cl));\r\n+                }\r\n+            }\r\n+            if (mFields != null) {\r\n+                for (String code : mFields) {\r\n+                    mCtc.addField(CtField.make(code, mCtc));\r\n+                }\r\n+            }\r\n+            if (mMethods != null) {\r\n+                for (String code : mMethods) {\r\n+                    if (code.charAt(0) == ':') {\r\n+                        mCtc.addMethod(CtNewMethod.copy(getCtMethod(mCopyMethods.get(code.substring(1))),\r\n+                                code.substring(1, code.indexOf('(')), mCtc, null));\r\n+                    } else {\r\n+                        mCtc.addMethod(CtNewMethod.make(code, mCtc));\r\n+                    }\r\n+                }\r\n+            }\r\n+            if (mDefaultConstructor) {\r\n+                mCtc.addConstructor(CtNewConstructor.defaultConstructor(mCtc));\r\n+            }\r\n+            if (mConstructors != null) {\r\n+                for (String code : mConstructors) {\r\n+                    if (code.charAt(0) == ':') {\r\n+                        mCtc.addConstructor(CtNewConstructor\r\n+                                .copy(getCtConstructor(mCopyConstructors.get(code.substring(1))), mCtc, null));\r\n+                    } else {\r\n+                        String[] sn = mCtc.getSimpleName().split(\"\\\\$+\"); // inner class name include $.\r\n+                        mCtc.addConstructor(\r\n+                                CtNewConstructor.make(code.replaceFirst(SIMPLE_NAME_TAG, sn[sn.length - 1]), mCtc));\r\n+                    }\r\n+                }\r\n+            }\r\n+            return mCtc.toClass(loader, pd);\r\n+        } catch (RuntimeException e) {\r\n+            throw e;\r\n+        } catch (NotFoundException | CannotCompileException e) {\r\n+            throw new RuntimeException(e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    public void release() {\r\n+        if (mCtc != null) {\r\n+            mCtc.detach();\r\n+        }\r\n+        if (mInterfaces != null) {\r\n+            mInterfaces.clear();\r\n+        }\r\n+        if (mFields != null) {\r\n+            mFields.clear();\r\n+        }\r\n+        if (mMethods != null) {\r\n+            mMethods.clear();\r\n+        }\r\n+        if (mConstructors != null) {\r\n+            mConstructors.clear();\r\n+        }\r\n+        if (mCopyMethods != null) {\r\n+            mCopyMethods.clear();\r\n+        }\r\n+        if (mCopyConstructors != null) {\r\n+            mCopyConstructors.clear();\r\n+        }\r\n+    }\r\n+\r\n+    private CtClass getCtClass(Class<?> c) throws NotFoundException {\r\n+        return mPool.get(c.getName());\r\n+    }\r\n+\r\n+    private CtMethod getCtMethod(Method m) throws NotFoundException {\r\n+        return getCtClass(m.getDeclaringClass())\r\n+                .getMethod(m.getName(), ReflectUtils.getDescWithoutMethodName(m));\r\n+    }\r\n+\r\n+    private CtConstructor getCtConstructor(Constructor<?> c) throws NotFoundException {\r\n+        return getCtClass(c.getDeclaringClass()).getConstructor(ReflectUtils.getDesc(c));\r\n+    }\r\n+\r\n+    public static interface DC {\r\n+\r\n+    } // dynamic class tag interface.\r\n }\n"}, {"source1": "org/apache/dubbo/common/bytecode/CustomizedLoaderClassPath.java", "source2": "org/apache/dubbo/common/bytecode/CustomizedLoaderClassPath.java", "comments": ["Line-ending 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.common.bytecode;\n-\n-import javassist.ClassPath;\n-\n-import java.io.InputStream;\n-import java.lang.ref.WeakReference;\n-import java.net.URL;\n-\n-/**\n- * A class search-path representing a class loader.\n- *\n- * <p>It is used for obtaining a class file from the given\n- * class loader by <code>getResourceAsStream()</code>.\n- * The <code>LoaderClassPath</code> refers to the class loader through\n- * <code>WeakReference</code>.  If the class loader is garbage collected,\n- * the other search pathes are examined.\n- *\n- * <p>The given class loader must have both <code>getResourceAsStream()</code>\n- * and <code>getResource()</code>.\n- *\n- * @author <a href=\"mailto:bill@jboss.org\">Bill Burke</a>\n- * @author Shigeru Chiba\n- */\n-public class CustomizedLoaderClassPath implements ClassPath {\n-    private WeakReference clref;\n-\n-    /**\n-     * Creates a search path representing a class loader.\n-     */\n-    public CustomizedLoaderClassPath(ClassLoader cl) {\n-        clref = new WeakReference(cl);\n-    }\n-\n-    public String toString() {\n-        Object cl = null;\n-        if (clref != null) {\n-            cl = clref.get();\n-        }\n-\n-        return cl == null ? \"<null>\" : cl.toString();\n-    }\n-\n-    /**\n-     * Obtains a class file from the class loader.\n-     * This method calls <code>getResourceAsStream(String)</code>\n-     * on the class loader.\n-     */\n-    public InputStream openClassfile(String classname) {\n-        String cname = classname.replace('.', '/') + \".class\";\n-        ClassLoader cl = (ClassLoader) clref.get();\n-        if (cl == null) {\n-            return null;        // not found\n-        } else {\n-            InputStream result = cl.getResourceAsStream(cname);\n-            if (result == null && (cl != this.getClass().getClassLoader())) {\n-                return this.getClass().getClassLoader().getResourceAsStream(cname);\n-            }\n-            return result;\n-        }\n-    }\n-\n-    /**\n-     * Obtains the URL of the specified class file.\n-     * This method calls <code>getResource(String)</code>\n-     * on the class loader.\n-     *\n-     * @return null if the class file could not be found.\n-     */\n-    public URL find(String classname) {\n-        String cname = classname.replace('.', '/') + \".class\";\n-        ClassLoader cl = (ClassLoader) clref.get();\n-        if (cl == null) {\n-            return null;        // not found\n-        } else {\n-            URL url = cl.getResource(cname);\n-            if (url == null && (cl != this.getClass().getClassLoader())) {\n-                return this.getClass().getClassLoader().getResource(cname);\n-            }\n-            return url;\n-        }\n-    }\n-\n-    /**\n-     * Closes this class path.\n-     */\n-    public void close() {\n-        clref = null;\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.common.bytecode;\r\n+\r\n+import javassist.ClassPath;\r\n+\r\n+import java.io.InputStream;\r\n+import java.lang.ref.WeakReference;\r\n+import java.net.URL;\r\n+\r\n+/**\r\n+ * A class search-path representing a class loader.\r\n+ *\r\n+ * <p>It is used for obtaining a class file from the given\r\n+ * class loader by <code>getResourceAsStream()</code>.\r\n+ * The <code>LoaderClassPath</code> refers to the class loader through\r\n+ * <code>WeakReference</code>.  If the class loader is garbage collected,\r\n+ * the other search pathes are examined.\r\n+ *\r\n+ * <p>The given class loader must have both <code>getResourceAsStream()</code>\r\n+ * and <code>getResource()</code>.\r\n+ *\r\n+ * @author <a href=\"mailto:bill@jboss.org\">Bill Burke</a>\r\n+ * @author Shigeru Chiba\r\n+ */\r\n+public class CustomizedLoaderClassPath implements ClassPath {\r\n+    private WeakReference clref;\r\n+\r\n+    /**\r\n+     * Creates a search path representing a class loader.\r\n+     */\r\n+    public CustomizedLoaderClassPath(ClassLoader cl) {\r\n+        clref = new WeakReference(cl);\r\n+    }\r\n+\r\n+    public String toString() {\r\n+        Object cl = null;\r\n+        if (clref != null) {\r\n+            cl = clref.get();\r\n+        }\r\n+\r\n+        return cl == null ? \"<null>\" : cl.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * Obtains a class file from the class loader.\r\n+     * This method calls <code>getResourceAsStream(String)</code>\r\n+     * on the class loader.\r\n+     */\r\n+    public InputStream openClassfile(String classname) {\r\n+        String cname = classname.replace('.', '/') + \".class\";\r\n+        ClassLoader cl = (ClassLoader) clref.get();\r\n+        if (cl == null) {\r\n+            return null;        // not found\r\n+        } else {\r\n+            InputStream result = cl.getResourceAsStream(cname);\r\n+            if (result == null && (cl != this.getClass().getClassLoader())) {\r\n+                return this.getClass().getClassLoader().getResourceAsStream(cname);\r\n+            }\r\n+            return result;\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Obtains the URL of the specified class file.\r\n+     * This method calls <code>getResource(String)</code>\r\n+     * on the class loader.\r\n+     *\r\n+     * @return null if the class file could not be found.\r\n+     */\r\n+    public URL find(String classname) {\r\n+        String cname = classname.replace('.', '/') + \".class\";\r\n+        ClassLoader cl = (ClassLoader) clref.get();\r\n+        if (cl == null) {\r\n+            return null;        // not found\r\n+        } else {\r\n+            URL url = cl.getResource(cname);\r\n+            if (url == null && (cl != this.getClass().getClassLoader())) {\r\n+                return this.getClass().getClassLoader().getResource(cname);\r\n+            }\r\n+            return url;\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Closes this class path.\r\n+     */\r\n+    public void close() {\r\n+        clref = null;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/CompositeConfiguration.java", "source2": "org/apache/dubbo/common/config/CompositeConfiguration.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,128 +1,128 @@\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.common.config;\n-\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-\n-import java.util.Arrays;\n-import java.util.LinkedList;\n-import java.util.List;\n-\n-/**\n- * This is an abstraction specially customized for the sequence Dubbo retrieves properties.\n- */\n-public class CompositeConfiguration implements Configuration {\n-    private Logger logger = LoggerFactory.getLogger(CompositeConfiguration.class);\n-\n-    private String id;\n-    private String prefix;\n-\n-    /**\n-     * List holding all the configuration\n-     */\n-    private List<Configuration> configList = new LinkedList<Configuration>();\n-\n-    //FIXME, consider change configList to SortedMap to replace this boolean status.\n-    private boolean dynamicIncluded;\n-\n-    public CompositeConfiguration() {\n-        this(null, null);\n-    }\n-\n-    public CompositeConfiguration(String prefix, String id) {\n-        if (StringUtils.isNotEmpty(prefix) && !prefix.endsWith(\".\")) {\n-            this.prefix = prefix + \".\";\n-        } else {\n-            this.prefix = prefix;\n-        }\n-        this.id = id;\n-    }\n-\n-    public CompositeConfiguration(Configuration... configurations) {\n-        this();\n-        if (configurations != null && configurations.length > 0) {\n-            Arrays.stream(configurations).filter(config -> !configList.contains(config)).forEach(configList::add);\n-        }\n-    }\n-\n-    public void setDynamicIncluded(boolean dynamicIncluded) {\n-        this.dynamicIncluded = dynamicIncluded;\n-    }\n-\n-    //FIXME, consider change configList to SortedMap to replace this boolean status.\n-    public boolean isDynamicIncluded() {\n-        return dynamicIncluded;\n-    }\n-\n-    public void addConfiguration(Configuration configuration) {\n-        if (configList.contains(configuration)) {\n-            return;\n-        }\n-        this.configList.add(configuration);\n-    }\n-\n-    public void addConfigurationFirst(Configuration configuration) {\n-        this.addConfiguration(0, configuration);\n-    }\n-\n-    public void addConfiguration(int pos, Configuration configuration) {\n-        this.configList.add(pos, configuration);\n-    }\n-\n-    @Override\n-    public Object getInternalProperty(String key) {\n-        Configuration firstMatchingConfiguration = null;\n-        for (Configuration config : configList) {\n-            try {\n-                if (config.containsKey(key)) {\n-                    firstMatchingConfiguration = config;\n-                    break;\n-                }\n-            } catch (Exception e) {\n-                logger.error(\"Error when trying to get value for key \" + key + \" from \" + config + \", will continue to try the next one.\");\n-            }\n-        }\n-        if (firstMatchingConfiguration != null) {\n-            return firstMatchingConfiguration.getProperty(key);\n-        } else {\n-            return null;\n-        }\n-    }\n-\n-    @Override\n-    public boolean containsKey(String key) {\n-        return configList.stream().anyMatch(c -> c.containsKey(key));\n-    }\n-\n-    @Override\n-    public Object getProperty(String key, Object defaultValue) {\n-        Object value = null;\n-        if (StringUtils.isNotEmpty(prefix)) {\n-            if (StringUtils.isNotEmpty(id)) {\n-                value = getInternalProperty(prefix + id + \".\" + key);\n-            }\n-            if (value == null) {\n-                value = getInternalProperty(prefix + key);\n-            }\n-        } else {\n-            value = getInternalProperty(key);\n-        }\n-        return value != null ? value : defaultValue;\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.common.config;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.util.Arrays;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * This is an abstraction specially customized for the sequence Dubbo retrieves properties.\r\n+ */\r\n+public class CompositeConfiguration implements Configuration {\r\n+    private Logger logger = LoggerFactory.getLogger(CompositeConfiguration.class);\r\n+\r\n+    private String id;\r\n+    private String prefix;\r\n+\r\n+    /**\r\n+     * List holding all the configuration\r\n+     */\r\n+    private List<Configuration> configList = new LinkedList<Configuration>();\r\n+\r\n+    //FIXME, consider change configList to SortedMap to replace this boolean status.\r\n+    private boolean dynamicIncluded;\r\n+\r\n+    public CompositeConfiguration() {\r\n+        this(null, null);\r\n+    }\r\n+\r\n+    public CompositeConfiguration(String prefix, String id) {\r\n+        if (StringUtils.isNotEmpty(prefix) && !prefix.endsWith(\".\")) {\r\n+            this.prefix = prefix + \".\";\r\n+        } else {\r\n+            this.prefix = prefix;\r\n+        }\r\n+        this.id = id;\r\n+    }\r\n+\r\n+    public CompositeConfiguration(Configuration... configurations) {\r\n+        this();\r\n+        if (configurations != null && configurations.length > 0) {\r\n+            Arrays.stream(configurations).filter(config -> !configList.contains(config)).forEach(configList::add);\r\n+        }\r\n+    }\r\n+\r\n+    public void setDynamicIncluded(boolean dynamicIncluded) {\r\n+        this.dynamicIncluded = dynamicIncluded;\r\n+    }\r\n+\r\n+    //FIXME, consider change configList to SortedMap to replace this boolean status.\r\n+    public boolean isDynamicIncluded() {\r\n+        return dynamicIncluded;\r\n+    }\r\n+\r\n+    public void addConfiguration(Configuration configuration) {\r\n+        if (configList.contains(configuration)) {\r\n+            return;\r\n+        }\r\n+        this.configList.add(configuration);\r\n+    }\r\n+\r\n+    public void addConfigurationFirst(Configuration configuration) {\r\n+        this.addConfiguration(0, configuration);\r\n+    }\r\n+\r\n+    public void addConfiguration(int pos, Configuration configuration) {\r\n+        this.configList.add(pos, configuration);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getInternalProperty(String key) {\r\n+        Configuration firstMatchingConfiguration = null;\r\n+        for (Configuration config : configList) {\r\n+            try {\r\n+                if (config.containsKey(key)) {\r\n+                    firstMatchingConfiguration = config;\r\n+                    break;\r\n+                }\r\n+            } catch (Exception e) {\r\n+                logger.error(\"Error when trying to get value for key \" + key + \" from \" + config + \", will continue to try the next one.\");\r\n+            }\r\n+        }\r\n+        if (firstMatchingConfiguration != null) {\r\n+            return firstMatchingConfiguration.getProperty(key);\r\n+        } else {\r\n+            return null;\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean containsKey(String key) {\r\n+        return configList.stream().anyMatch(c -> c.containsKey(key));\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getProperty(String key, Object defaultValue) {\r\n+        Object value = null;\r\n+        if (StringUtils.isNotEmpty(prefix)) {\r\n+            if (StringUtils.isNotEmpty(id)) {\r\n+                value = getInternalProperty(prefix + id + \".\" + key);\r\n+            }\r\n+            if (value == null) {\r\n+                value = getInternalProperty(prefix + key);\r\n+            }\r\n+        } else {\r\n+            value = getInternalProperty(key);\r\n+        }\r\n+        return value != null ? value : defaultValue;\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/common/config/Configuration.java", "source2": "org/apache/dubbo/common/config/Configuration.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,179 +1,179 @@\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.common.config;\n-\n-import java.util.NoSuchElementException;\n-\n-/**\n- * Configuration interface, to fetch the value for the specified key.\n- */\n-public interface Configuration {\n-    /**\n-     * Get a string associated with the given configuration key.\n-     *\n-     * @param key The configuration key.\n-     * @return The associated string.\n-     */\n-    default String getString(String key) {\n-        return convert(String.class, key, null);\n-    }\n-\n-    /**\n-     * Get a string associated with the given configuration key.\n-     * If the key doesn't map to an existing object, the default value\n-     * is returned.\n-     *\n-     * @param key          The configuration key.\n-     * @param defaultValue The default value.\n-     * @return The associated string if key is found and has valid\n-     * format, default value otherwise.\n-     */\n-    default String getString(String key, String defaultValue) {\n-        return convert(String.class, key, defaultValue);\n-    }\n-\n-    default int getInt(String key) {\n-        Integer i = this.getInteger(key, (Integer) null);\n-        if (i != null) {\n-            return i;\n-        } else {\n-            throw new NoSuchElementException('\\'' + key + \"' doesn't map to an existing object\");\n-        }\n-    }\n-\n-    default int getInt(String key, int defaultValue) {\n-        Integer i = this.getInteger(key, (Integer) null);\n-        return i == null ? defaultValue : i;\n-    }\n-\n-    default Integer getInteger(String key, Integer defaultValue) {\n-        try {\n-            return convert(Integer.class, key, defaultValue);\n-        } catch (NumberFormatException e) {\n-            throw new IllegalStateException('\\'' + key + \"' doesn't map to a Integer object\", e);\n-        }\n-    }\n-\n-    default boolean getBoolean(String key) {\n-        Boolean b = this.getBoolean(key, null);\n-        if (b != null) {\n-            return b;\n-        } else {\n-            throw new NoSuchElementException('\\'' + key + \"' doesn't map to an existing object\");\n-        }\n-    }\n-\n-    default boolean getBoolean(String key, boolean defaultValue) {\n-        return this.getBoolean(key, toBooleanObject(defaultValue));\n-    }\n-\n-    default Boolean getBoolean(String key, Boolean defaultValue) {\n-        try {\n-            return convert(Boolean.class, key, defaultValue);\n-        } catch (Exception e) {\n-            throw new IllegalStateException(\"Try to get \" + '\\'' + key + \"' failed, maybe because this key doesn't map to a Boolean object\", e);\n-        }\n-    }\n-\n-    /**\n-     * Gets a property from the configuration. This is the most basic get\n-     * method for retrieving values of properties. In a typical implementation\n-     * of the {@code Configuration} interface the other get methods (that\n-     * return specific data types) will internally make use of this method. On\n-     * this level variable substitution is not yet performed. The returned\n-     * object is an internal representation of the property value for the passed\n-     * in key. It is owned by the {@code Configuration} object. So a caller\n-     * should not modify this object. It cannot be guaranteed that this object\n-     * will stay constant over time (i.e. further update operations on the\n-     * configuration may change its internal state).\n-     *\n-     * @param key property to retrieve\n-     * @return the value to which this configuration maps the specified key, or\n-     * null if the configuration contains no mapping for this key.\n-     */\n-    default Object getProperty(String key) {\n-        return getProperty(key, null);\n-    }\n-\n-    /**\n-     * Gets a property from the configuration. The default value will return if the configuration doesn't contain\n-     * the mapping for the specified key.\n-     *\n-     * @param key property to retrieve\n-     * @param defaultValue default value\n-     * @return the value to which this configuration maps the specified key, or default value if the configuration\n-     * contains no mapping for this key.\n-     */\n-    default Object getProperty(String key, Object defaultValue) {\n-        Object value = getInternalProperty(key);\n-        return value != null ? value : defaultValue;\n-    }\n-\n-    Object getInternalProperty(String key);\n-\n-    /**\n-     * Check if the configuration contains the specified key.\n-     *\n-     * @param key the key whose presence in this configuration is to be tested\n-     * @return {@code true} if the configuration contains a value for this\n-     * key, {@code false} otherwise\n-     */\n-    default boolean containsKey(String key) {\n-        return getProperty(key) != null;\n-    }\n-\n-\n-    default <T> T convert(Class<T> cls, String key, T defaultValue) {\n-        // we only process String properties for now\n-        String value = (String) getProperty(key);\n-\n-        if (value == null) {\n-            return defaultValue;\n-        }\n-\n-        Object obj = value;\n-        if (cls.isInstance(value)) {\n-            return cls.cast(value);\n-        }\n-\n-        if (Boolean.class.equals(cls) || Boolean.TYPE.equals(cls)) {\n-            obj = Boolean.valueOf(value);\n-        } else if (Number.class.isAssignableFrom(cls) || cls.isPrimitive()) {\n-            if (Integer.class.equals(cls) || Integer.TYPE.equals(cls)) {\n-                obj = Integer.valueOf(value);\n-            } else if (Long.class.equals(cls) || Long.TYPE.equals(cls)) {\n-                obj = Long.valueOf(value);\n-            } else if (Byte.class.equals(cls) || Byte.TYPE.equals(cls)) {\n-                obj = Byte.valueOf(value);\n-            } else if (Short.class.equals(cls) || Short.TYPE.equals(cls)) {\n-                obj = Short.valueOf(value);\n-            } else if (Float.class.equals(cls) || Float.TYPE.equals(cls)) {\n-                obj = Float.valueOf(value);\n-            } else if (Double.class.equals(cls) || Double.TYPE.equals(cls)) {\n-                obj = Double.valueOf(value);\n-            }\n-        } else if (cls.isEnum()) {\n-            obj = Enum.valueOf(cls.asSubclass(Enum.class), value);\n-        }\n-\n-        return cls.cast(obj);\n-    }\n-\n-    static Boolean toBooleanObject(boolean bool) {\n-        return bool ? Boolean.TRUE : Boolean.FALSE;\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.common.config;\r\n+\r\n+import java.util.NoSuchElementException;\r\n+\r\n+/**\r\n+ * Configuration interface, to fetch the value for the specified key.\r\n+ */\r\n+public interface Configuration {\r\n+    /**\r\n+     * Get a string associated with the given configuration key.\r\n+     *\r\n+     * @param key The configuration key.\r\n+     * @return The associated string.\r\n+     */\r\n+    default String getString(String key) {\r\n+        return convert(String.class, key, null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get a string associated with the given configuration key.\r\n+     * If the key doesn't map to an existing object, the default value\r\n+     * is returned.\r\n+     *\r\n+     * @param key          The configuration key.\r\n+     * @param defaultValue The default value.\r\n+     * @return The associated string if key is found and has valid\r\n+     * format, default value otherwise.\r\n+     */\r\n+    default String getString(String key, String defaultValue) {\r\n+        return convert(String.class, key, defaultValue);\r\n+    }\r\n+\r\n+    default int getInt(String key) {\r\n+        Integer i = this.getInteger(key, (Integer) null);\r\n+        if (i != null) {\r\n+            return i;\r\n+        } else {\r\n+            throw new NoSuchElementException('\\'' + key + \"' doesn't map to an existing object\");\r\n+        }\r\n+    }\r\n+\r\n+    default int getInt(String key, int defaultValue) {\r\n+        Integer i = this.getInteger(key, (Integer) null);\r\n+        return i == null ? defaultValue : i;\r\n+    }\r\n+\r\n+    default Integer getInteger(String key, Integer defaultValue) {\r\n+        try {\r\n+            return convert(Integer.class, key, defaultValue);\r\n+        } catch (NumberFormatException e) {\r\n+            throw new IllegalStateException('\\'' + key + \"' doesn't map to a Integer object\", e);\r\n+        }\r\n+    }\r\n+\r\n+    default boolean getBoolean(String key) {\r\n+        Boolean b = this.getBoolean(key, null);\r\n+        if (b != null) {\r\n+            return b;\r\n+        } else {\r\n+            throw new NoSuchElementException('\\'' + key + \"' doesn't map to an existing object\");\r\n+        }\r\n+    }\r\n+\r\n+    default boolean getBoolean(String key, boolean defaultValue) {\r\n+        return this.getBoolean(key, toBooleanObject(defaultValue));\r\n+    }\r\n+\r\n+    default Boolean getBoolean(String key, Boolean defaultValue) {\r\n+        try {\r\n+            return convert(Boolean.class, key, defaultValue);\r\n+        } catch (Exception e) {\r\n+            throw new IllegalStateException(\"Try to get \" + '\\'' + key + \"' failed, maybe because this key doesn't map to a Boolean object\", e);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Gets a property from the configuration. This is the most basic get\r\n+     * method for retrieving values of properties. In a typical implementation\r\n+     * of the {@code Configuration} interface the other get methods (that\r\n+     * return specific data types) will internally make use of this method. On\r\n+     * this level variable substitution is not yet performed. The returned\r\n+     * object is an internal representation of the property value for the passed\r\n+     * in key. It is owned by the {@code Configuration} object. So a caller\r\n+     * should not modify this object. It cannot be guaranteed that this object\r\n+     * will stay constant over time (i.e. further update operations on the\r\n+     * configuration may change its internal state).\r\n+     *\r\n+     * @param key property to retrieve\r\n+     * @return the value to which this configuration maps the specified key, or\r\n+     * null if the configuration contains no mapping for this key.\r\n+     */\r\n+    default Object getProperty(String key) {\r\n+        return getProperty(key, null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Gets a property from the configuration. The default value will return if the configuration doesn't contain\r\n+     * the mapping for the specified key.\r\n+     *\r\n+     * @param key property to retrieve\r\n+     * @param defaultValue default value\r\n+     * @return the value to which this configuration maps the specified key, or default value if the configuration\r\n+     * contains no mapping for this key.\r\n+     */\r\n+    default Object getProperty(String key, Object defaultValue) {\r\n+        Object value = getInternalProperty(key);\r\n+        return value != null ? value : defaultValue;\r\n+    }\r\n+\r\n+    Object getInternalProperty(String key);\r\n+\r\n+    /**\r\n+     * Check if the configuration contains the specified key.\r\n+     *\r\n+     * @param key the key whose presence in this configuration is to be tested\r\n+     * @return {@code true} if the configuration contains a value for this\r\n+     * key, {@code false} otherwise\r\n+     */\r\n+    default boolean containsKey(String key) {\r\n+        return getProperty(key) != null;\r\n+    }\r\n+\r\n+\r\n+    default <T> T convert(Class<T> cls, String key, T defaultValue) {\r\n+        // we only process String properties for now\r\n+        String value = (String) getProperty(key);\r\n+\r\n+        if (value == null) {\r\n+            return defaultValue;\r\n+        }\r\n+\r\n+        Object obj = value;\r\n+        if (cls.isInstance(value)) {\r\n+            return cls.cast(value);\r\n+        }\r\n+\r\n+        if (Boolean.class.equals(cls) || Boolean.TYPE.equals(cls)) {\r\n+            obj = Boolean.valueOf(value);\r\n+        } else if (Number.class.isAssignableFrom(cls) || cls.isPrimitive()) {\r\n+            if (Integer.class.equals(cls) || Integer.TYPE.equals(cls)) {\r\n+                obj = Integer.valueOf(value);\r\n+            } else if (Long.class.equals(cls) || Long.TYPE.equals(cls)) {\r\n+                obj = Long.valueOf(value);\r\n+            } else if (Byte.class.equals(cls) || Byte.TYPE.equals(cls)) {\r\n+                obj = Byte.valueOf(value);\r\n+            } else if (Short.class.equals(cls) || Short.TYPE.equals(cls)) {\r\n+                obj = Short.valueOf(value);\r\n+            } else if (Float.class.equals(cls) || Float.TYPE.equals(cls)) {\r\n+                obj = Float.valueOf(value);\r\n+            } else if (Double.class.equals(cls) || Double.TYPE.equals(cls)) {\r\n+                obj = Double.valueOf(value);\r\n+            }\r\n+        } else if (cls.isEnum()) {\r\n+            obj = Enum.valueOf(cls.asSubclass(Enum.class), value);\r\n+        }\r\n+\r\n+        return cls.cast(obj);\r\n+    }\r\n+\r\n+    static Boolean toBooleanObject(boolean bool) {\r\n+        return bool ? Boolean.TRUE : Boolean.FALSE;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/ConfigurationUtils.java", "source2": "org/apache/dubbo/common/config/ConfigurationUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,133 +1,133 @@\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.common.config;\n-\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.rpc.model.ApplicationModel;\n-\n-import java.io.IOException;\n-import java.io.StringReader;\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.Properties;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_SERVER_SHUTDOWN_TIMEOUT;\n-import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_SECONDS_KEY;\n-\n-/**\n- * Utilities for manipulating configurations from different sources\n- */\n-public class ConfigurationUtils {\n-    private static final Logger logger = LoggerFactory.getLogger(ConfigurationUtils.class);\n-\n-    /**\n-     * Used to get properties from the jvm\n-     *\n-     * @return\n-     */\n-    public static Configuration getSystemConfiguration() {\n-        return ApplicationModel.getEnvironment().getSystemConfiguration();\n-    }\n-\n-    /**\n-     * Used to get properties from the os environment\n-     *\n-     * @return\n-     */\n-    public static Configuration getEnvConfiguration() {\n-        return ApplicationModel.getEnvironment().getEnvironmentConfiguration();\n-    }\n-\n-    /**\n-     * Used to get an composite property value.\n-     * <p>\n-     * Also see {@link Environment#getConfiguration()}\n-     *\n-     * @return\n-     */\n-    public static Configuration getGlobalConfiguration() {\n-        return ApplicationModel.getEnvironment().getConfiguration();\n-    }\n-\n-    public static Configuration getDynamicGlobalConfiguration() {\n-        return ApplicationModel.getEnvironment().getDynamicGlobalConfiguration();\n-    }\n-\n-    // FIXME\n-    @SuppressWarnings(\"deprecation\")\n-    public static int getServerShutdownTimeout() {\n-        int timeout = DEFAULT_SERVER_SHUTDOWN_TIMEOUT;\n-        Configuration configuration = getGlobalConfiguration();\n-        String value = StringUtils.trim(configuration.getString(SHUTDOWN_WAIT_KEY));\n-\n-        if (value != null && value.length() > 0) {\n-            try {\n-                timeout = Integer.parseInt(value);\n-            } catch (Exception e) {\n-                // ignore\n-            }\n-        } else {\n-            value = StringUtils.trim(configuration.getString(SHUTDOWN_WAIT_SECONDS_KEY));\n-            if (value != null && value.length() > 0) {\n-                try {\n-                    timeout = Integer.parseInt(value) * 1000;\n-                } catch (Exception e) {\n-                    // ignore\n-                }\n-            }\n-        }\n-        return timeout;\n-    }\n-\n-    public static String getDynamicProperty(String property) {\n-        return getDynamicProperty(property, null);\n-    }\n-\n-    public static String getDynamicProperty(String property, String defaultValue) {\n-        return StringUtils.trim(getDynamicGlobalConfiguration().getString(property, defaultValue));\n-    }\n-\n-    public static String getProperty(String property) {\n-        return getProperty(property, null);\n-    }\n-\n-    public static String getProperty(String property, String defaultValue) {\n-        return StringUtils.trim(getGlobalConfiguration().getString(property, defaultValue));\n-    }\n-\n-    public static int get(String property, int defaultValue) {\n-        return getGlobalConfiguration().getInt(property, defaultValue);\n-    }\n-\n-    public static Map<String, String> parseProperties(String content) throws IOException {\n-        Map<String, String> map = new HashMap<>();\n-        if (StringUtils.isEmpty(content)) {\n-            logger.warn(\"You specified the config center, but there's not even one single config item in it.\");\n-        } else {\n-            Properties properties = new Properties();\n-            properties.load(new StringReader(content));\n-            properties.stringPropertyNames().forEach(\n-                    k -> map.put(k, properties.getProperty(k))\n-            );\n-        }\n-        return map;\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.common.config;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+\r\n+import java.io.IOException;\r\n+import java.io.StringReader;\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.Properties;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_SERVER_SHUTDOWN_TIMEOUT;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_SECONDS_KEY;\r\n+\r\n+/**\r\n+ * Utilities for manipulating configurations from different sources\r\n+ */\r\n+public class ConfigurationUtils {\r\n+    private static final Logger logger = LoggerFactory.getLogger(ConfigurationUtils.class);\r\n+\r\n+    /**\r\n+     * Used to get properties from the jvm\r\n+     *\r\n+     * @return\r\n+     */\r\n+    public static Configuration getSystemConfiguration() {\r\n+        return ApplicationModel.getEnvironment().getSystemConfiguration();\r\n+    }\r\n+\r\n+    /**\r\n+     * Used to get properties from the os environment\r\n+     *\r\n+     * @return\r\n+     */\r\n+    public static Configuration getEnvConfiguration() {\r\n+        return ApplicationModel.getEnvironment().getEnvironmentConfiguration();\r\n+    }\r\n+\r\n+    /**\r\n+     * Used to get an composite property value.\r\n+     * <p>\r\n+     * Also see {@link Environment#getConfiguration()}\r\n+     *\r\n+     * @return\r\n+     */\r\n+    public static Configuration getGlobalConfiguration() {\r\n+        return ApplicationModel.getEnvironment().getConfiguration();\r\n+    }\r\n+\r\n+    public static Configuration getDynamicGlobalConfiguration() {\r\n+        return ApplicationModel.getEnvironment().getDynamicGlobalConfiguration();\r\n+    }\r\n+\r\n+    // FIXME\r\n+    @SuppressWarnings(\"deprecation\")\r\n+    public static int getServerShutdownTimeout() {\r\n+        int timeout = DEFAULT_SERVER_SHUTDOWN_TIMEOUT;\r\n+        Configuration configuration = getGlobalConfiguration();\r\n+        String value = StringUtils.trim(configuration.getString(SHUTDOWN_WAIT_KEY));\r\n+\r\n+        if (value != null && value.length() > 0) {\r\n+            try {\r\n+                timeout = Integer.parseInt(value);\r\n+            } catch (Exception e) {\r\n+                // ignore\r\n+            }\r\n+        } else {\r\n+            value = StringUtils.trim(configuration.getString(SHUTDOWN_WAIT_SECONDS_KEY));\r\n+            if (value != null && value.length() > 0) {\r\n+                try {\r\n+                    timeout = Integer.parseInt(value) * 1000;\r\n+                } catch (Exception e) {\r\n+                    // ignore\r\n+                }\r\n+            }\r\n+        }\r\n+        return timeout;\r\n+    }\r\n+\r\n+    public static String getDynamicProperty(String property) {\r\n+        return getDynamicProperty(property, null);\r\n+    }\r\n+\r\n+    public static String getDynamicProperty(String property, String defaultValue) {\r\n+        return StringUtils.trim(getDynamicGlobalConfiguration().getString(property, defaultValue));\r\n+    }\r\n+\r\n+    public static String getProperty(String property) {\r\n+        return getProperty(property, null);\r\n+    }\r\n+\r\n+    public static String getProperty(String property, String defaultValue) {\r\n+        return StringUtils.trim(getGlobalConfiguration().getString(property, defaultValue));\r\n+    }\r\n+\r\n+    public static int get(String property, int defaultValue) {\r\n+        return getGlobalConfiguration().getInt(property, defaultValue);\r\n+    }\r\n+\r\n+    public static Map<String, String> parseProperties(String content) throws IOException {\r\n+        Map<String, String> map = new HashMap<>();\r\n+        if (StringUtils.isEmpty(content)) {\r\n+            logger.warn(\"You specified the config center, but there's not even one single config item in it.\");\r\n+        } else {\r\n+            Properties properties = new Properties();\r\n+            properties.load(new StringReader(content));\r\n+            properties.stringPropertyNames().forEach(\r\n+                    k -> map.put(k, properties.getProperty(k))\r\n+            );\r\n+        }\r\n+        return map;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/Environment.java", "source2": "org/apache/dubbo/common/config/Environment.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,233 +1,233 @@\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.common.config;\n-\n-import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\n-import org.apache.dubbo.common.context.FrameworkExt;\n-import org.apache.dubbo.common.context.LifecycleAdapter;\n-import org.apache.dubbo.common.extension.DisableInject;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.config.AbstractConfig;\n-import org.apache.dubbo.config.ConfigCenterConfig;\n-import org.apache.dubbo.config.context.ConfigConfigurationAdapter;\n-import org.apache.dubbo.config.context.ConfigManager;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-\n-import java.util.Collection;\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.Optional;\n-\n-public class Environment extends LifecycleAdapter implements FrameworkExt {\n-    private static final Logger logger = LoggerFactory.getLogger(Environment.class);\n-    public static final String NAME = \"environment\";\n-\n-    private final PropertiesConfiguration propertiesConfiguration;\n-    private final SystemConfiguration systemConfiguration;\n-    private final EnvironmentConfiguration environmentConfiguration;\n-    private final InmemoryConfiguration externalConfiguration;\n-    private final InmemoryConfiguration appExternalConfiguration;\n-\n-    private CompositeConfiguration globalConfiguration;\n-    private CompositeConfiguration dynamicGlobalConfiguration;\n-\n-\n-    private Map<String, String> externalConfigurationMap = new HashMap<>();\n-    private Map<String, String> appExternalConfigurationMap = new HashMap<>();\n-\n-    private boolean configCenterFirst = true;\n-\n-    private DynamicConfiguration dynamicConfiguration;\n-\n-    public Environment() {\n-        this.propertiesConfiguration = new PropertiesConfiguration();\n-        this.systemConfiguration = new SystemConfiguration();\n-        this.environmentConfiguration = new EnvironmentConfiguration();\n-        this.externalConfiguration = new InmemoryConfiguration();\n-        this.appExternalConfiguration = new InmemoryConfiguration();\n-    }\n-\n-    @Override\n-    public void initialize() throws IllegalStateException {\n-        ConfigManager configManager = ApplicationModel.getConfigManager();\n-        Optional<Collection<ConfigCenterConfig>> defaultConfigs = configManager.getDefaultConfigCenter();\n-        defaultConfigs.ifPresent(configs -> {\n-            for (ConfigCenterConfig config : configs) {\n-                this.setExternalConfigMap(config.getExternalConfiguration());\n-                this.setAppExternalConfigMap(config.getAppExternalConfiguration());\n-            }\n-        });\n-\n-        this.externalConfiguration.setProperties(externalConfigurationMap);\n-        this.appExternalConfiguration.setProperties(appExternalConfigurationMap);\n-    }\n-\n-    @DisableInject\n-    public void setExternalConfigMap(Map<String, String> externalConfiguration) {\n-        if (externalConfiguration != null) {\n-            this.externalConfigurationMap = externalConfiguration;\n-        }\n-    }\n-\n-    @DisableInject\n-    public void setAppExternalConfigMap(Map<String, String> appExternalConfiguration) {\n-        if (appExternalConfiguration != null) {\n-            this.appExternalConfigurationMap = appExternalConfiguration;\n-        }\n-    }\n-\n-    public Map<String, String> getExternalConfigurationMap() {\n-        return externalConfigurationMap;\n-    }\n-\n-    public Map<String, String> getAppExternalConfigurationMap() {\n-        return appExternalConfigurationMap;\n-    }\n-\n-    public void updateExternalConfigurationMap(Map<String, String> externalMap) {\n-        this.externalConfigurationMap.putAll(externalMap);\n-    }\n-\n-    public void updateAppExternalConfigurationMap(Map<String, String> externalMap) {\n-        this.appExternalConfigurationMap.putAll(externalMap);\n-    }\n-\n-    /**\n-     * At start-up, Dubbo is driven by various configuration, such as Application, Registry, Protocol, etc.\n-     * All configurations will be converged into a data bus - URL, and then drive the subsequent process.\n-     * <p>\n-     * At present, there are many configuration sources, including AbstractConfig (API, XML, annotation), - D, config center, etc.\n-     * This method helps us to filter out the most priority values from various configuration sources.\n-     *\n-     * @param config\n-     * @return\n-     */\n-    public synchronized CompositeConfiguration getPrefixedConfiguration(AbstractConfig config) {\n-        CompositeConfiguration prefixedConfiguration = new CompositeConfiguration(config.getPrefix(), config.getId());\n-        Configuration configuration = new ConfigConfigurationAdapter(config);\n-        if (this.isConfigCenterFirst()) {\n-            // The sequence would be: SystemConfiguration -> AppExternalConfiguration -> ExternalConfiguration -> AbstractConfig -> PropertiesConfiguration\n-            // Config center has the highest priority\n-            prefixedConfiguration.addConfiguration(systemConfiguration);\n-            prefixedConfiguration.addConfiguration(environmentConfiguration);\n-            prefixedConfiguration.addConfiguration(appExternalConfiguration);\n-            prefixedConfiguration.addConfiguration(externalConfiguration);\n-            prefixedConfiguration.addConfiguration(configuration);\n-            prefixedConfiguration.addConfiguration(propertiesConfiguration);\n-        } else {\n-            // The sequence would be: SystemConfiguration -> AbstractConfig -> AppExternalConfiguration -> ExternalConfiguration -> PropertiesConfiguration\n-            // Config center has the highest priority\n-            prefixedConfiguration.addConfiguration(systemConfiguration);\n-            prefixedConfiguration.addConfiguration(environmentConfiguration);\n-            prefixedConfiguration.addConfiguration(configuration);\n-            prefixedConfiguration.addConfiguration(appExternalConfiguration);\n-            prefixedConfiguration.addConfiguration(externalConfiguration);\n-            prefixedConfiguration.addConfiguration(propertiesConfiguration);\n-        }\n-        return prefixedConfiguration;\n-    }\n-\n-    /**\n-     * There are two ways to get configuration during exposure / reference or at runtime:\n-     * 1. URL, The value in the URL is relatively fixed. we can get value directly.\n-     * 2. The configuration exposed in this method is convenient for us to query the latest values from multiple\n-     * prioritized sources, it also guarantees that configs changed dynamically can take effect on the fly.\n-     */\n-    public Configuration getConfiguration() {\n-        if (globalConfiguration == null) {\n-            globalConfiguration = new CompositeConfiguration();\n-            globalConfiguration.addConfiguration(systemConfiguration);\n-            globalConfiguration.addConfiguration(environmentConfiguration);\n-            globalConfiguration.addConfiguration(appExternalConfiguration);\n-            globalConfiguration.addConfiguration(externalConfiguration);\n-            globalConfiguration.addConfiguration(propertiesConfiguration);\n-        }\n-        return globalConfiguration;\n-    }\n-\n-    public Configuration getDynamicGlobalConfiguration() {\n-        if (dynamicGlobalConfiguration == null) {\n-            if (dynamicConfiguration == null) {\n-                if (logger.isWarnEnabled()) {\n-                    logger.warn(\"dynamicConfiguration is null , return globalConfiguration.\");\n-                }\n-                return globalConfiguration;\n-            }\n-            dynamicGlobalConfiguration = new CompositeConfiguration();\n-            dynamicGlobalConfiguration.addConfiguration(dynamicConfiguration);\n-            dynamicGlobalConfiguration.addConfiguration(getConfiguration());\n-        }\n-        return dynamicGlobalConfiguration;\n-    }\n-\n-    public boolean isConfigCenterFirst() {\n-        return configCenterFirst;\n-    }\n-\n-    @DisableInject\n-    public void setConfigCenterFirst(boolean configCenterFirst) {\n-        this.configCenterFirst = configCenterFirst;\n-    }\n-\n-    public Optional<DynamicConfiguration> getDynamicConfiguration() {\n-        return Optional.ofNullable(dynamicConfiguration);\n-    }\n-\n-    @DisableInject\n-    public void setDynamicConfiguration(DynamicConfiguration dynamicConfiguration) {\n-        this.dynamicConfiguration = dynamicConfiguration;\n-    }\n-\n-    @Override\n-    public void destroy() throws IllegalStateException {\n-        clearExternalConfigs();\n-        clearAppExternalConfigs();\n-    }\n-\n-    public PropertiesConfiguration getPropertiesConfiguration() {\n-        return propertiesConfiguration;\n-    }\n-\n-    public SystemConfiguration getSystemConfiguration() {\n-        return systemConfiguration;\n-    }\n-\n-    public EnvironmentConfiguration getEnvironmentConfiguration() {\n-        return environmentConfiguration;\n-    }\n-\n-    public InmemoryConfiguration getExternalConfiguration() {\n-        return externalConfiguration;\n-    }\n-\n-    public InmemoryConfiguration getAppExternalConfiguration() {\n-        return appExternalConfiguration;\n-    }\n-\n-    // For test\n-    public void clearExternalConfigs() {\n-        this.externalConfiguration.clear();\n-        this.externalConfigurationMap.clear();\n-    }\n-\n-    // For test\n-    public void clearAppExternalConfigs() {\n-        this.appExternalConfiguration.clear();\n-        this.appExternalConfigurationMap.clear();\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.common.config;\r\n+\r\n+import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\r\n+import org.apache.dubbo.common.context.FrameworkExt;\r\n+import org.apache.dubbo.common.context.LifecycleAdapter;\r\n+import org.apache.dubbo.common.extension.DisableInject;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.config.AbstractConfig;\r\n+import org.apache.dubbo.config.ConfigCenterConfig;\r\n+import org.apache.dubbo.config.context.ConfigConfigurationAdapter;\r\n+import org.apache.dubbo.config.context.ConfigManager;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+\r\n+import java.util.Collection;\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.Optional;\r\n+\r\n+public class Environment extends LifecycleAdapter implements FrameworkExt {\r\n+    private static final Logger logger = LoggerFactory.getLogger(Environment.class);\r\n+    public static final String NAME = \"environment\";\r\n+\r\n+    private final PropertiesConfiguration propertiesConfiguration;\r\n+    private final SystemConfiguration systemConfiguration;\r\n+    private final EnvironmentConfiguration environmentConfiguration;\r\n+    private final InmemoryConfiguration externalConfiguration;\r\n+    private final InmemoryConfiguration appExternalConfiguration;\r\n+\r\n+    private CompositeConfiguration globalConfiguration;\r\n+    private CompositeConfiguration dynamicGlobalConfiguration;\r\n+\r\n+\r\n+    private Map<String, String> externalConfigurationMap = new HashMap<>();\r\n+    private Map<String, String> appExternalConfigurationMap = new HashMap<>();\r\n+\r\n+    private boolean configCenterFirst = true;\r\n+\r\n+    private DynamicConfiguration dynamicConfiguration;\r\n+\r\n+    public Environment() {\r\n+        this.propertiesConfiguration = new PropertiesConfiguration();\r\n+        this.systemConfiguration = new SystemConfiguration();\r\n+        this.environmentConfiguration = new EnvironmentConfiguration();\r\n+        this.externalConfiguration = new InmemoryConfiguration();\r\n+        this.appExternalConfiguration = new InmemoryConfiguration();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void initialize() throws IllegalStateException {\r\n+        ConfigManager configManager = ApplicationModel.getConfigManager();\r\n+        Optional<Collection<ConfigCenterConfig>> defaultConfigs = configManager.getDefaultConfigCenter();\r\n+        defaultConfigs.ifPresent(configs -> {\r\n+            for (ConfigCenterConfig config : configs) {\r\n+                this.setExternalConfigMap(config.getExternalConfiguration());\r\n+                this.setAppExternalConfigMap(config.getAppExternalConfiguration());\r\n+            }\r\n+        });\r\n+\r\n+        this.externalConfiguration.setProperties(externalConfigurationMap);\r\n+        this.appExternalConfiguration.setProperties(appExternalConfigurationMap);\r\n+    }\r\n+\r\n+    @DisableInject\r\n+    public void setExternalConfigMap(Map<String, String> externalConfiguration) {\r\n+        if (externalConfiguration != null) {\r\n+            this.externalConfigurationMap = externalConfiguration;\r\n+        }\r\n+    }\r\n+\r\n+    @DisableInject\r\n+    public void setAppExternalConfigMap(Map<String, String> appExternalConfiguration) {\r\n+        if (appExternalConfiguration != null) {\r\n+            this.appExternalConfigurationMap = appExternalConfiguration;\r\n+        }\r\n+    }\r\n+\r\n+    public Map<String, String> getExternalConfigurationMap() {\r\n+        return externalConfigurationMap;\r\n+    }\r\n+\r\n+    public Map<String, String> getAppExternalConfigurationMap() {\r\n+        return appExternalConfigurationMap;\r\n+    }\r\n+\r\n+    public void updateExternalConfigurationMap(Map<String, String> externalMap) {\r\n+        this.externalConfigurationMap.putAll(externalMap);\r\n+    }\r\n+\r\n+    public void updateAppExternalConfigurationMap(Map<String, String> externalMap) {\r\n+        this.appExternalConfigurationMap.putAll(externalMap);\r\n+    }\r\n+\r\n+    /**\r\n+     * At start-up, Dubbo is driven by various configuration, such as Application, Registry, Protocol, etc.\r\n+     * All configurations will be converged into a data bus - URL, and then drive the subsequent process.\r\n+     * <p>\r\n+     * At present, there are many configuration sources, including AbstractConfig (API, XML, annotation), - D, config center, etc.\r\n+     * This method helps us to filter out the most priority values from various configuration sources.\r\n+     *\r\n+     * @param config\r\n+     * @return\r\n+     */\r\n+    public synchronized CompositeConfiguration getPrefixedConfiguration(AbstractConfig config) {\r\n+        CompositeConfiguration prefixedConfiguration = new CompositeConfiguration(config.getPrefix(), config.getId());\r\n+        Configuration configuration = new ConfigConfigurationAdapter(config);\r\n+        if (this.isConfigCenterFirst()) {\r\n+            // The sequence would be: SystemConfiguration -> AppExternalConfiguration -> ExternalConfiguration -> AbstractConfig -> PropertiesConfiguration\r\n+            // Config center has the highest priority\r\n+            prefixedConfiguration.addConfiguration(systemConfiguration);\r\n+            prefixedConfiguration.addConfiguration(environmentConfiguration);\r\n+            prefixedConfiguration.addConfiguration(appExternalConfiguration);\r\n+            prefixedConfiguration.addConfiguration(externalConfiguration);\r\n+            prefixedConfiguration.addConfiguration(configuration);\r\n+            prefixedConfiguration.addConfiguration(propertiesConfiguration);\r\n+        } else {\r\n+            // The sequence would be: SystemConfiguration -> AbstractConfig -> AppExternalConfiguration -> ExternalConfiguration -> PropertiesConfiguration\r\n+            // Config center has the highest priority\r\n+            prefixedConfiguration.addConfiguration(systemConfiguration);\r\n+            prefixedConfiguration.addConfiguration(environmentConfiguration);\r\n+            prefixedConfiguration.addConfiguration(configuration);\r\n+            prefixedConfiguration.addConfiguration(appExternalConfiguration);\r\n+            prefixedConfiguration.addConfiguration(externalConfiguration);\r\n+            prefixedConfiguration.addConfiguration(propertiesConfiguration);\r\n+        }\r\n+        return prefixedConfiguration;\r\n+    }\r\n+\r\n+    /**\r\n+     * There are two ways to get configuration during exposure / reference or at runtime:\r\n+     * 1. URL, The value in the URL is relatively fixed. we can get value directly.\r\n+     * 2. The configuration exposed in this method is convenient for us to query the latest values from multiple\r\n+     * prioritized sources, it also guarantees that configs changed dynamically can take effect on the fly.\r\n+     */\r\n+    public Configuration getConfiguration() {\r\n+        if (globalConfiguration == null) {\r\n+            globalConfiguration = new CompositeConfiguration();\r\n+            globalConfiguration.addConfiguration(systemConfiguration);\r\n+            globalConfiguration.addConfiguration(environmentConfiguration);\r\n+            globalConfiguration.addConfiguration(appExternalConfiguration);\r\n+            globalConfiguration.addConfiguration(externalConfiguration);\r\n+            globalConfiguration.addConfiguration(propertiesConfiguration);\r\n+        }\r\n+        return globalConfiguration;\r\n+    }\r\n+\r\n+    public Configuration getDynamicGlobalConfiguration() {\r\n+        if (dynamicGlobalConfiguration == null) {\r\n+            if (dynamicConfiguration == null) {\r\n+                if (logger.isWarnEnabled()) {\r\n+                    logger.warn(\"dynamicConfiguration is null , return globalConfiguration.\");\r\n+                }\r\n+                return globalConfiguration;\r\n+            }\r\n+            dynamicGlobalConfiguration = new CompositeConfiguration();\r\n+            dynamicGlobalConfiguration.addConfiguration(dynamicConfiguration);\r\n+            dynamicGlobalConfiguration.addConfiguration(getConfiguration());\r\n+        }\r\n+        return dynamicGlobalConfiguration;\r\n+    }\r\n+\r\n+    public boolean isConfigCenterFirst() {\r\n+        return configCenterFirst;\r\n+    }\r\n+\r\n+    @DisableInject\r\n+    public void setConfigCenterFirst(boolean configCenterFirst) {\r\n+        this.configCenterFirst = configCenterFirst;\r\n+    }\r\n+\r\n+    public Optional<DynamicConfiguration> getDynamicConfiguration() {\r\n+        return Optional.ofNullable(dynamicConfiguration);\r\n+    }\r\n+\r\n+    @DisableInject\r\n+    public void setDynamicConfiguration(DynamicConfiguration dynamicConfiguration) {\r\n+        this.dynamicConfiguration = dynamicConfiguration;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() throws IllegalStateException {\r\n+        clearExternalConfigs();\r\n+        clearAppExternalConfigs();\r\n+    }\r\n+\r\n+    public PropertiesConfiguration getPropertiesConfiguration() {\r\n+        return propertiesConfiguration;\r\n+    }\r\n+\r\n+    public SystemConfiguration getSystemConfiguration() {\r\n+        return systemConfiguration;\r\n+    }\r\n+\r\n+    public EnvironmentConfiguration getEnvironmentConfiguration() {\r\n+        return environmentConfiguration;\r\n+    }\r\n+\r\n+    public InmemoryConfiguration getExternalConfiguration() {\r\n+        return externalConfiguration;\r\n+    }\r\n+\r\n+    public InmemoryConfiguration getAppExternalConfiguration() {\r\n+        return appExternalConfiguration;\r\n+    }\r\n+\r\n+    // For test\r\n+    public void clearExternalConfigs() {\r\n+        this.externalConfiguration.clear();\r\n+        this.externalConfigurationMap.clear();\r\n+    }\r\n+\r\n+    // For test\r\n+    public void clearAppExternalConfigs() {\r\n+        this.appExternalConfiguration.clear();\r\n+        this.appExternalConfigurationMap.clear();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/EnvironmentConfiguration.java", "source2": "org/apache/dubbo/common/config/EnvironmentConfiguration.java", "comments": ["Line-ending 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.common.config;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-/**\n- * Configuration from system environment\n- */\n-public class EnvironmentConfiguration implements Configuration {\n-\n-    @Override\n-    public Object getInternalProperty(String key) {\n-        String value = System.getenv(key);\n-        if (StringUtils.isEmpty(value)) {\n-            value = System.getenv(StringUtils.toOSStyleKey(key));\n-        }\n-        return value;\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.common.config;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+/**\r\n+ * Configuration from system environment\r\n+ */\r\n+public class EnvironmentConfiguration implements Configuration {\r\n+\r\n+    @Override\r\n+    public Object getInternalProperty(String key) {\r\n+        String value = System.getenv(key);\r\n+        if (StringUtils.isEmpty(value)) {\r\n+            value = System.getenv(StringUtils.toOSStyleKey(key));\r\n+        }\r\n+        return value;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/InmemoryConfiguration.java", "source2": "org/apache/dubbo/common/config/InmemoryConfiguration.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,64 +1,64 @@\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.common.config;\n-\n-import java.util.LinkedHashMap;\n-import java.util.Map;\n-\n-/**\n- * In-memory configuration\n- */\n-public class InmemoryConfiguration implements Configuration {\n-\n-    // stores the configuration key-value pairs\n-    private Map<String, String> store = new LinkedHashMap<>();\n-\n-    @Override\n-    public Object getInternalProperty(String key) {\n-        return store.get(key);\n-    }\n-\n-    /**\n-     * Add one property into the store, the previous value will be replaced if the key exists\n-     */\n-    public void addProperty(String key, String value) {\n-        store.put(key, value);\n-    }\n-\n-    /**\n-     * Add a set of properties into the store\n-     */\n-    public void addProperties(Map<String, String> properties) {\n-        if (properties != null) {\n-            this.store.putAll(properties);\n-        }\n-    }\n-\n-    /**\n-     * set store\n-     */\n-    public void setProperties(Map<String, String> properties) {\n-        if (properties != null) {\n-            this.store = properties;\n-        }\n-    }\n-\n-    // for unit test\n-    public void clear() {\n-        this.store.clear();\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.common.config;\r\n+\r\n+import java.util.LinkedHashMap;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * In-memory configuration\r\n+ */\r\n+public class InmemoryConfiguration implements Configuration {\r\n+\r\n+    // stores the configuration key-value pairs\r\n+    private Map<String, String> store = new LinkedHashMap<>();\r\n+\r\n+    @Override\r\n+    public Object getInternalProperty(String key) {\r\n+        return store.get(key);\r\n+    }\r\n+\r\n+    /**\r\n+     * Add one property into the store, the previous value will be replaced if the key exists\r\n+     */\r\n+    public void addProperty(String key, String value) {\r\n+        store.put(key, value);\r\n+    }\r\n+\r\n+    /**\r\n+     * Add a set of properties into the store\r\n+     */\r\n+    public void addProperties(Map<String, String> properties) {\r\n+        if (properties != null) {\r\n+            this.store.putAll(properties);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * set store\r\n+     */\r\n+    public void setProperties(Map<String, String> properties) {\r\n+        if (properties != null) {\r\n+            this.store = properties;\r\n+        }\r\n+    }\r\n+\r\n+    // for unit test\r\n+    public void clear() {\r\n+        this.store.clear();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/OrderedPropertiesProvider.java", "source2": "org/apache/dubbo/common/config/OrderedPropertiesProvider.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,44 +1,44 @@\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.common.config;\n-\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import java.util.Properties;\n-\n-/**\n- * \n- * The smaller value, the higher priority\n- * \n- */\n-@SPI\n-public interface OrderedPropertiesProvider {\n-    /**\n-     * order\n-     *\n-     * @return\n-     */\n-    int priority();\n-\n-    /**\n-     * load the properties\n-     *\n-     * @return\n-     */\n-    Properties initProperties();\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.common.config;\r\n+\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+import java.util.Properties;\r\n+\r\n+/**\r\n+ * \r\n+ * The smaller value, the higher priority\r\n+ * \r\n+ */\r\n+@SPI\r\n+public interface OrderedPropertiesProvider {\r\n+    /**\r\n+     * order\r\n+     *\r\n+     * @return\r\n+     */\r\n+    int priority();\r\n+\r\n+    /**\r\n+     * load the properties\r\n+     *\r\n+     * @return\r\n+     */\r\n+    Properties initProperties();\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/PropertiesConfiguration.java", "source2": "org/apache/dubbo/common/config/PropertiesConfiguration.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,64 +1,64 @@\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.common.config;\n-\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.utils.ConfigUtils;\n-\n-import java.util.ArrayList;\n-import java.util.List;\n-import java.util.Properties;\n-import java.util.Set;\n-\n-/**\n- * Configuration from system properties and dubbo.properties\n- */\n-public class PropertiesConfiguration implements Configuration {\n-\n-    public PropertiesConfiguration() {\n-        ExtensionLoader<OrderedPropertiesProvider> propertiesProviderExtensionLoader = ExtensionLoader.getExtensionLoader(OrderedPropertiesProvider.class);\n-        Set<String> propertiesProviderNames = propertiesProviderExtensionLoader.getSupportedExtensions();\n-        if (propertiesProviderNames == null || propertiesProviderNames.isEmpty()) {\n-            return;\n-        }\n-        List<OrderedPropertiesProvider> orderedPropertiesProviders = new ArrayList<>();\n-        for (String propertiesProviderName : propertiesProviderNames) {\n-            orderedPropertiesProviders.add(propertiesProviderExtensionLoader.getExtension(propertiesProviderName));\n-        }\n-\n-        //order the propertiesProvider according the priority descending\n-        orderedPropertiesProviders.sort((OrderedPropertiesProvider a, OrderedPropertiesProvider b) -> {\n-            return b.priority() - a.priority();\n-        });\n-\n-        //load the default properties\n-        Properties properties = ConfigUtils.getProperties();\n-\n-        //override the properties.\n-        for (OrderedPropertiesProvider orderedPropertiesProvider :\n-                orderedPropertiesProviders) {\n-            properties.putAll(orderedPropertiesProvider.initProperties());\n-        }\n-\n-        ConfigUtils.setProperties(properties);\n-    }\n-\n-    @Override\n-    public Object getInternalProperty(String key) {\n-        return ConfigUtils.getProperty(key);\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.common.config;\r\n+\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.utils.ConfigUtils;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+import java.util.Properties;\r\n+import java.util.Set;\r\n+\r\n+/**\r\n+ * Configuration from system properties and dubbo.properties\r\n+ */\r\n+public class PropertiesConfiguration implements Configuration {\r\n+\r\n+    public PropertiesConfiguration() {\r\n+        ExtensionLoader<OrderedPropertiesProvider> propertiesProviderExtensionLoader = ExtensionLoader.getExtensionLoader(OrderedPropertiesProvider.class);\r\n+        Set<String> propertiesProviderNames = propertiesProviderExtensionLoader.getSupportedExtensions();\r\n+        if (propertiesProviderNames == null || propertiesProviderNames.isEmpty()) {\r\n+            return;\r\n+        }\r\n+        List<OrderedPropertiesProvider> orderedPropertiesProviders = new ArrayList<>();\r\n+        for (String propertiesProviderName : propertiesProviderNames) {\r\n+            orderedPropertiesProviders.add(propertiesProviderExtensionLoader.getExtension(propertiesProviderName));\r\n+        }\r\n+\r\n+        //order the propertiesProvider according the priority descending\r\n+        orderedPropertiesProviders.sort((OrderedPropertiesProvider a, OrderedPropertiesProvider b) -> {\r\n+            return b.priority() - a.priority();\r\n+        });\r\n+\r\n+        //load the default properties\r\n+        Properties properties = ConfigUtils.getProperties();\r\n+\r\n+        //override the properties.\r\n+        for (OrderedPropertiesProvider orderedPropertiesProvider :\r\n+                orderedPropertiesProviders) {\r\n+            properties.putAll(orderedPropertiesProvider.initProperties());\r\n+        }\r\n+\r\n+        ConfigUtils.setProperties(properties);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getInternalProperty(String key) {\r\n+        return ConfigUtils.getProperty(key);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/SystemConfiguration.java", "source2": "org/apache/dubbo/common/config/SystemConfiguration.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,33 +1,33 @@\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.common.config;\n-\n-\n-/**\n- * FIXME: is this really necessary? PropertiesConfiguration should have already covered this:\n- *\n- * @See ConfigUtils#getProperty(String)\n- * @see PropertiesConfiguration\n- */\n-public class SystemConfiguration implements Configuration {\n-\n-    @Override\n-    public Object getInternalProperty(String key) {\n-        return System.getProperty(key);\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.common.config;\r\n+\r\n+\r\n+/**\r\n+ * FIXME: is this really necessary? PropertiesConfiguration should have already covered this:\r\n+ *\r\n+ * @See ConfigUtils#getProperty(String)\r\n+ * @see PropertiesConfiguration\r\n+ */\r\n+public class SystemConfiguration implements Configuration {\r\n+\r\n+    @Override\r\n+    public Object getInternalProperty(String key) {\r\n+        return System.getProperty(key);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/AbstractDynamicConfiguration.java", "source2": "org/apache/dubbo/common/config/configcenter/AbstractDynamicConfiguration.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,306 +1,306 @@\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.common.config.configcenter;\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.NamedThreadFactory;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.util.concurrent.Callable;\n-import java.util.concurrent.Future;\n-import java.util.concurrent.LinkedBlockingQueue;\n-import java.util.concurrent.ThreadPoolExecutor;\n-import java.util.concurrent.TimeUnit;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\n-\n-/**\n- * The abstract implementation of {@link DynamicConfiguration}\n- *\n- * @since 2.7.5\n- */\n-public abstract class AbstractDynamicConfiguration implements DynamicConfiguration {\n-\n-    public static final String PARAM_NAME_PREFIX = \"dubbo.config-center.\";\n-\n-    public static final String THREAD_POOL_PREFIX_PARAM_NAME = PARAM_NAME_PREFIX + \"thread-pool.prefix\";\n-\n-    public static final String DEFAULT_THREAD_POOL_PREFIX = PARAM_NAME_PREFIX + \"workers\";\n-\n-    public static final String THREAD_POOL_SIZE_PARAM_NAME = PARAM_NAME_PREFIX + \"thread-pool.size\";\n-\n-    /**\n-     * The keep alive time in milliseconds for threads in {@link ThreadPoolExecutor}\n-     */\n-    public static final String THREAD_POOL_KEEP_ALIVE_TIME_PARAM_NAME = PARAM_NAME_PREFIX + \"thread-pool.keep-alive-time\";\n-\n-    /**\n-     * The parameter name of group for config-center\n-     *\n-     * @since 2.7.8\n-     */\n-    public static final String GROUP_PARAM_NAME = PARAM_NAME_PREFIX + GROUP_KEY;\n-\n-    /**\n-     * The parameter name of timeout for config-center\n-     *\n-     * @since 2.7.8\n-     */\n-    public static final String TIMEOUT_PARAM_NAME = PARAM_NAME_PREFIX + TIMEOUT_KEY;\n-\n-    public static final int DEFAULT_THREAD_POOL_SIZE = 1;\n-\n-    /**\n-     * Default keep alive time in milliseconds for threads in {@link ThreadPoolExecutor} is 1 minute( 60 * 1000 ms)\n-     */\n-    public static final long DEFAULT_THREAD_POOL_KEEP_ALIVE_TIME = TimeUnit.MINUTES.toMillis(1);\n-\n-    /**\n-     * Logger\n-     */\n-    protected final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-    /**\n-     * The thread pool for workers who executes the tasks\n-     */\n-    private final ThreadPoolExecutor workersThreadPool;\n-\n-    private final String group;\n-\n-    private final long timeout;\n-\n-    public AbstractDynamicConfiguration(URL url) {\n-        this(getThreadPoolPrefixName(url), getThreadPoolSize(url), getThreadPoolKeepAliveTime(url), getGroup(url),\n-                getTimeout(url));\n-    }\n-\n-    public AbstractDynamicConfiguration(String threadPoolPrefixName,\n-                                        int threadPoolSize,\n-                                        long keepAliveTime,\n-                                        String group,\n-                                        long timeout) {\n-        this.workersThreadPool = initWorkersThreadPool(threadPoolPrefixName, threadPoolSize, keepAliveTime);\n-        this.group = group;\n-        this.timeout = timeout;\n-    }\n-\n-    @Override\n-    public void addListener(String key, String group, ConfigurationListener listener) {\n-    }\n-\n-    @Override\n-    public void removeListener(String key, String group, ConfigurationListener listener) {\n-    }\n-\n-    @Override\n-    public final String getConfig(String key, String group, long timeout) throws IllegalStateException {\n-        return execute(() -> doGetConfig(key, group), timeout);\n-    }\n-\n-    @Override\n-    public Object getInternalProperty(String key) {\n-        return null;\n-    }\n-\n-    @Override\n-    public final void close() throws Exception {\n-        try {\n-            doClose();\n-        } finally {\n-            doFinally();\n-        }\n-    }\n-\n-    @Override\n-    public boolean removeConfig(String key, String group) {\n-        return Boolean.TRUE.equals(execute(() -> doRemoveConfig(key, group), -1L));\n-    }\n-\n-    /**\n-     * @return the default group\n-     * @since 2.7.8\n-     */\n-    @Override\n-    public String getDefaultGroup() {\n-        return getGroup();\n-    }\n-\n-    /**\n-     * @return the default timeout\n-     * @since 2.7.8\n-     */\n-    @Override\n-    public long getDefaultTimeout() {\n-        return getTimeout();\n-    }\n-\n-    /**\n-     * Get the content of configuration in the specified key and group\n-     *\n-     * @param key   the key\n-     * @param group the group\n-     * @return if found, return the content of configuration\n-     * @throws Exception If met with some problems\n-     */\n-    protected abstract String doGetConfig(String key, String group) throws Exception;\n-\n-    /**\n-     * Close the resources if necessary\n-     *\n-     * @throws Exception If met with some problems\n-     */\n-    protected abstract void doClose() throws Exception;\n-\n-    /**\n-     * Remove the config in the specified key and group\n-     *\n-     * @param key   the key\n-     * @param group the group\n-     * @return If successful, return <code>true</code>, or <code>false</code>\n-     * @throws Exception\n-     * @since 2.7.8\n-     */\n-    protected abstract boolean doRemoveConfig(String key, String group) throws Exception;\n-\n-    /**\n-     * Executes the {@link Runnable} with the specified timeout\n-     *\n-     * @param task    the {@link Runnable task}\n-     * @param timeout timeout in milliseconds\n-     */\n-    protected final void execute(Runnable task, long timeout) {\n-        execute(() -> {\n-            task.run();\n-            return null;\n-        }, timeout);\n-    }\n-\n-    /**\n-     * Executes the {@link Callable} with the specified timeout\n-     *\n-     * @param task    the {@link Callable task}\n-     * @param timeout timeout in milliseconds\n-     * @param <V>     the type of computing result\n-     * @return the computing result\n-     */\n-    protected final <V> V execute(Callable<V> task, long timeout) {\n-        V value = null;\n-        try {\n-\n-            if (timeout < 1) { // less or equal 0\n-                value = task.call();\n-            } else {\n-                Future<V> future = workersThreadPool.submit(task);\n-                value = future.get(timeout, TimeUnit.MILLISECONDS);\n-            }\n-        } catch (Exception e) {\n-            if (logger.isErrorEnabled()) {\n-                logger.error(e.getMessage(), e);\n-            }\n-        }\n-        return value;\n-    }\n-\n-    protected ThreadPoolExecutor getWorkersThreadPool() {\n-        return workersThreadPool;\n-    }\n-\n-    private void doFinally() {\n-        shutdownWorkersThreadPool();\n-    }\n-\n-    private void shutdownWorkersThreadPool() {\n-        if (!workersThreadPool.isShutdown()) {\n-            workersThreadPool.shutdown();\n-        }\n-    }\n-\n-    protected ThreadPoolExecutor initWorkersThreadPool(String threadPoolPrefixName,\n-                                                       int threadPoolSize,\n-                                                       long keepAliveTime) {\n-        return new ThreadPoolExecutor(threadPoolSize, threadPoolSize, keepAliveTime,\n-                TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), new NamedThreadFactory(threadPoolPrefixName, true));\n-    }\n-\n-    protected static String getThreadPoolPrefixName(URL url) {\n-        return getParameter(url, THREAD_POOL_PREFIX_PARAM_NAME, DEFAULT_THREAD_POOL_PREFIX);\n-    }\n-\n-    protected static int getThreadPoolSize(URL url) {\n-        return getParameter(url, THREAD_POOL_SIZE_PARAM_NAME, DEFAULT_THREAD_POOL_SIZE);\n-    }\n-\n-    protected static long getThreadPoolKeepAliveTime(URL url) {\n-        return getParameter(url, THREAD_POOL_KEEP_ALIVE_TIME_PARAM_NAME, DEFAULT_THREAD_POOL_KEEP_ALIVE_TIME);\n-    }\n-\n-    protected static String getParameter(URL url, String name, String defaultValue) {\n-        if (url != null) {\n-            return url.getParameter(name, defaultValue);\n-        }\n-        return defaultValue;\n-    }\n-\n-    protected static int getParameter(URL url, String name, int defaultValue) {\n-        if (url != null) {\n-            return url.getParameter(name, defaultValue);\n-        }\n-        return defaultValue;\n-    }\n-\n-    protected static long getParameter(URL url, String name, long defaultValue) {\n-        if (url != null) {\n-            return url.getParameter(name, defaultValue);\n-        }\n-        return defaultValue;\n-    }\n-\n-\n-    protected String getGroup() {\n-        return group;\n-    }\n-\n-    protected long getTimeout() {\n-        return timeout;\n-    }\n-\n-    /**\n-     * Get the group from {@link URL the specified connection URL}\n-     *\n-     * @param url {@link URL the specified connection URL}\n-     * @return non-null\n-     * @since 2.7.8\n-     */\n-    protected static String getGroup(URL url) {\n-        String group = getParameter(url, GROUP_PARAM_NAME, null);\n-        return StringUtils.isBlank(group) ? getParameter(url, GROUP_KEY, DEFAULT_GROUP) : group;\n-    }\n-\n-    /**\n-     * Get the timeout from {@link URL the specified connection URL}\n-     *\n-     * @param url {@link URL the specified connection URL}\n-     * @return non-null\n-     * @since 2.7.8\n-     */\n-    protected static long getTimeout(URL url) {\n-        return getParameter(url, TIMEOUT_PARAM_NAME, -1L);\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.common.config.configcenter;\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.NamedThreadFactory;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.util.concurrent.Callable;\r\n+import java.util.concurrent.Future;\r\n+import java.util.concurrent.LinkedBlockingQueue;\r\n+import java.util.concurrent.ThreadPoolExecutor;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\r\n+\r\n+/**\r\n+ * The abstract implementation of {@link DynamicConfiguration}\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+public abstract class AbstractDynamicConfiguration implements DynamicConfiguration {\r\n+\r\n+    public static final String PARAM_NAME_PREFIX = \"dubbo.config-center.\";\r\n+\r\n+    public static final String THREAD_POOL_PREFIX_PARAM_NAME = PARAM_NAME_PREFIX + \"thread-pool.prefix\";\r\n+\r\n+    public static final String DEFAULT_THREAD_POOL_PREFIX = PARAM_NAME_PREFIX + \"workers\";\r\n+\r\n+    public static final String THREAD_POOL_SIZE_PARAM_NAME = PARAM_NAME_PREFIX + \"thread-pool.size\";\r\n+\r\n+    /**\r\n+     * The keep alive time in milliseconds for threads in {@link ThreadPoolExecutor}\r\n+     */\r\n+    public static final String THREAD_POOL_KEEP_ALIVE_TIME_PARAM_NAME = PARAM_NAME_PREFIX + \"thread-pool.keep-alive-time\";\r\n+\r\n+    /**\r\n+     * The parameter name of group for config-center\r\n+     *\r\n+     * @since 2.7.8\r\n+     */\r\n+    public static final String GROUP_PARAM_NAME = PARAM_NAME_PREFIX + GROUP_KEY;\r\n+\r\n+    /**\r\n+     * The parameter name of timeout for config-center\r\n+     *\r\n+     * @since 2.7.8\r\n+     */\r\n+    public static final String TIMEOUT_PARAM_NAME = PARAM_NAME_PREFIX + TIMEOUT_KEY;\r\n+\r\n+    public static final int DEFAULT_THREAD_POOL_SIZE = 1;\r\n+\r\n+    /**\r\n+     * Default keep alive time in milliseconds for threads in {@link ThreadPoolExecutor} is 1 minute( 60 * 1000 ms)\r\n+     */\r\n+    public static final long DEFAULT_THREAD_POOL_KEEP_ALIVE_TIME = TimeUnit.MINUTES.toMillis(1);\r\n+\r\n+    /**\r\n+     * Logger\r\n+     */\r\n+    protected final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+    /**\r\n+     * The thread pool for workers who executes the tasks\r\n+     */\r\n+    private final ThreadPoolExecutor workersThreadPool;\r\n+\r\n+    private final String group;\r\n+\r\n+    private final long timeout;\r\n+\r\n+    public AbstractDynamicConfiguration(URL url) {\r\n+        this(getThreadPoolPrefixName(url), getThreadPoolSize(url), getThreadPoolKeepAliveTime(url), getGroup(url),\r\n+                getTimeout(url));\r\n+    }\r\n+\r\n+    public AbstractDynamicConfiguration(String threadPoolPrefixName,\r\n+                                        int threadPoolSize,\r\n+                                        long keepAliveTime,\r\n+                                        String group,\r\n+                                        long timeout) {\r\n+        this.workersThreadPool = initWorkersThreadPool(threadPoolPrefixName, threadPoolSize, keepAliveTime);\r\n+        this.group = group;\r\n+        this.timeout = timeout;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void addListener(String key, String group, ConfigurationListener listener) {\r\n+    }\r\n+\r\n+    @Override\r\n+    public void removeListener(String key, String group, ConfigurationListener listener) {\r\n+    }\r\n+\r\n+    @Override\r\n+    public final String getConfig(String key, String group, long timeout) throws IllegalStateException {\r\n+        return execute(() -> doGetConfig(key, group), timeout);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getInternalProperty(String key) {\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    public final void close() throws Exception {\r\n+        try {\r\n+            doClose();\r\n+        } finally {\r\n+            doFinally();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean removeConfig(String key, String group) {\r\n+        return Boolean.TRUE.equals(execute(() -> doRemoveConfig(key, group), -1L));\r\n+    }\r\n+\r\n+    /**\r\n+     * @return the default group\r\n+     * @since 2.7.8\r\n+     */\r\n+    @Override\r\n+    public String getDefaultGroup() {\r\n+        return getGroup();\r\n+    }\r\n+\r\n+    /**\r\n+     * @return the default timeout\r\n+     * @since 2.7.8\r\n+     */\r\n+    @Override\r\n+    public long getDefaultTimeout() {\r\n+        return getTimeout();\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the content of configuration in the specified key and group\r\n+     *\r\n+     * @param key   the key\r\n+     * @param group the group\r\n+     * @return if found, return the content of configuration\r\n+     * @throws Exception If met with some problems\r\n+     */\r\n+    protected abstract String doGetConfig(String key, String group) throws Exception;\r\n+\r\n+    /**\r\n+     * Close the resources if necessary\r\n+     *\r\n+     * @throws Exception If met with some problems\r\n+     */\r\n+    protected abstract void doClose() throws Exception;\r\n+\r\n+    /**\r\n+     * Remove the config in the specified key and group\r\n+     *\r\n+     * @param key   the key\r\n+     * @param group the group\r\n+     * @return If successful, return <code>true</code>, or <code>false</code>\r\n+     * @throws Exception\r\n+     * @since 2.7.8\r\n+     */\r\n+    protected abstract boolean doRemoveConfig(String key, String group) throws Exception;\r\n+\r\n+    /**\r\n+     * Executes the {@link Runnable} with the specified timeout\r\n+     *\r\n+     * @param task    the {@link Runnable task}\r\n+     * @param timeout timeout in milliseconds\r\n+     */\r\n+    protected final void execute(Runnable task, long timeout) {\r\n+        execute(() -> {\r\n+            task.run();\r\n+            return null;\r\n+        }, timeout);\r\n+    }\r\n+\r\n+    /**\r\n+     * Executes the {@link Callable} with the specified timeout\r\n+     *\r\n+     * @param task    the {@link Callable task}\r\n+     * @param timeout timeout in milliseconds\r\n+     * @param <V>     the type of computing result\r\n+     * @return the computing result\r\n+     */\r\n+    protected final <V> V execute(Callable<V> task, long timeout) {\r\n+        V value = null;\r\n+        try {\r\n+\r\n+            if (timeout < 1) { // less or equal 0\r\n+                value = task.call();\r\n+            } else {\r\n+                Future<V> future = workersThreadPool.submit(task);\r\n+                value = future.get(timeout, TimeUnit.MILLISECONDS);\r\n+            }\r\n+        } catch (Exception e) {\r\n+            if (logger.isErrorEnabled()) {\r\n+                logger.error(e.getMessage(), e);\r\n+            }\r\n+        }\r\n+        return value;\r\n+    }\r\n+\r\n+    protected ThreadPoolExecutor getWorkersThreadPool() {\r\n+        return workersThreadPool;\r\n+    }\r\n+\r\n+    private void doFinally() {\r\n+        shutdownWorkersThreadPool();\r\n+    }\r\n+\r\n+    private void shutdownWorkersThreadPool() {\r\n+        if (!workersThreadPool.isShutdown()) {\r\n+            workersThreadPool.shutdown();\r\n+        }\r\n+    }\r\n+\r\n+    protected ThreadPoolExecutor initWorkersThreadPool(String threadPoolPrefixName,\r\n+                                                       int threadPoolSize,\r\n+                                                       long keepAliveTime) {\r\n+        return new ThreadPoolExecutor(threadPoolSize, threadPoolSize, keepAliveTime,\r\n+                TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), new NamedThreadFactory(threadPoolPrefixName, true));\r\n+    }\r\n+\r\n+    protected static String getThreadPoolPrefixName(URL url) {\r\n+        return getParameter(url, THREAD_POOL_PREFIX_PARAM_NAME, DEFAULT_THREAD_POOL_PREFIX);\r\n+    }\r\n+\r\n+    protected static int getThreadPoolSize(URL url) {\r\n+        return getParameter(url, THREAD_POOL_SIZE_PARAM_NAME, DEFAULT_THREAD_POOL_SIZE);\r\n+    }\r\n+\r\n+    protected static long getThreadPoolKeepAliveTime(URL url) {\r\n+        return getParameter(url, THREAD_POOL_KEEP_ALIVE_TIME_PARAM_NAME, DEFAULT_THREAD_POOL_KEEP_ALIVE_TIME);\r\n+    }\r\n+\r\n+    protected static String getParameter(URL url, String name, String defaultValue) {\r\n+        if (url != null) {\r\n+            return url.getParameter(name, defaultValue);\r\n+        }\r\n+        return defaultValue;\r\n+    }\r\n+\r\n+    protected static int getParameter(URL url, String name, int defaultValue) {\r\n+        if (url != null) {\r\n+            return url.getParameter(name, defaultValue);\r\n+        }\r\n+        return defaultValue;\r\n+    }\r\n+\r\n+    protected static long getParameter(URL url, String name, long defaultValue) {\r\n+        if (url != null) {\r\n+            return url.getParameter(name, defaultValue);\r\n+        }\r\n+        return defaultValue;\r\n+    }\r\n+\r\n+\r\n+    protected String getGroup() {\r\n+        return group;\r\n+    }\r\n+\r\n+    protected long getTimeout() {\r\n+        return timeout;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the group from {@link URL the specified connection URL}\r\n+     *\r\n+     * @param url {@link URL the specified connection URL}\r\n+     * @return non-null\r\n+     * @since 2.7.8\r\n+     */\r\n+    protected static String getGroup(URL url) {\r\n+        String group = getParameter(url, GROUP_PARAM_NAME, null);\r\n+        return StringUtils.isBlank(group) ? getParameter(url, GROUP_KEY, DEFAULT_GROUP) : group;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the timeout from {@link URL the specified connection URL}\r\n+     *\r\n+     * @param url {@link URL the specified connection URL}\r\n+     * @return non-null\r\n+     * @since 2.7.8\r\n+     */\r\n+    protected static long getTimeout(URL url) {\r\n+        return getParameter(url, TIMEOUT_PARAM_NAME, -1L);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/AbstractDynamicConfigurationFactory.java", "source2": "org/apache/dubbo/common/config/configcenter/AbstractDynamicConfigurationFactory.java", "comments": ["Line-ending 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.common.config.configcenter;\n-\n-import org.apache.dubbo.common.URL;\n-\n-import java.util.Map;\n-import java.util.concurrent.ConcurrentHashMap;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;\n-\n-/**\n- * Abstract {@link DynamicConfigurationFactory} implementation with cache ability\n- *\n- * @see DynamicConfigurationFactory\n- * @since 2.7.5\n- */\n-public abstract class AbstractDynamicConfigurationFactory implements DynamicConfigurationFactory {\n-\n-    private volatile Map<String, DynamicConfiguration> dynamicConfigurations = new ConcurrentHashMap<>();\n-\n-    @Override\n-    public final DynamicConfiguration getDynamicConfiguration(URL url) {\n-        String key = url == null ? DEFAULT_KEY : url.toServiceString();\n-        return dynamicConfigurations.computeIfAbsent(key, k -> createDynamicConfiguration(url));\n-    }\n-\n-    protected abstract DynamicConfiguration createDynamicConfiguration(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.common.config.configcenter;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+\r\n+import java.util.Map;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;\r\n+\r\n+/**\r\n+ * Abstract {@link DynamicConfigurationFactory} implementation with cache ability\r\n+ *\r\n+ * @see DynamicConfigurationFactory\r\n+ * @since 2.7.5\r\n+ */\r\n+public abstract class AbstractDynamicConfigurationFactory implements DynamicConfigurationFactory {\r\n+\r\n+    private volatile Map<String, DynamicConfiguration> dynamicConfigurations = new ConcurrentHashMap<>();\r\n+\r\n+    @Override\r\n+    public final DynamicConfiguration getDynamicConfiguration(URL url) {\r\n+        String key = url == null ? DEFAULT_KEY : url.toServiceString();\r\n+        return dynamicConfigurations.computeIfAbsent(key, k -> createDynamicConfiguration(url));\r\n+    }\r\n+\r\n+    protected abstract DynamicConfiguration createDynamicConfiguration(URL url);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/ConfigChangeType.java", "source2": "org/apache/dubbo/common/config/configcenter/ConfigChangeType.java", "comments": ["Line-ending 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.common.config.configcenter;\n-\n-/**\n- * Config change event type\n- */\n-public enum ConfigChangeType {\n-    /**\n-     * A config is created.\n-     */\n-    ADDED,\n-\n-    /**\n-     * A config is updated.\n-     */\n-    MODIFIED,\n-\n-    /**\n-     * A config is deleted.\n-     */\n-    DELETED\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.common.config.configcenter;\r\n+\r\n+/**\r\n+ * Config change event type\r\n+ */\r\n+public enum ConfigChangeType {\r\n+    /**\r\n+     * A config is created.\r\n+     */\r\n+    ADDED,\r\n+\r\n+    /**\r\n+     * A config is updated.\r\n+     */\r\n+    MODIFIED,\r\n+\r\n+    /**\r\n+     * A config is deleted.\r\n+     */\r\n+    DELETED\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/ConfigChangedEvent.java", "source2": "org/apache/dubbo/common/config/configcenter/ConfigChangedEvent.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,94 +1,94 @@\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.common.config.configcenter;\n-\n-import java.util.EventObject;\n-import java.util.Objects;\n-\n-/**\n- * An event raised when the config changed, immutable.\n- *\n- * @see ConfigChangeType\n- */\n-public class ConfigChangedEvent extends EventObject {\n-\n-    private final String key;\n-\n-    private final String group;\n-\n-    private final String content;\n-\n-    private final ConfigChangeType changeType;\n-\n-    public ConfigChangedEvent(String key, String group, String content) {\n-        this(key, group, content, ConfigChangeType.MODIFIED);\n-    }\n-\n-    public ConfigChangedEvent(String key, String group, String content, ConfigChangeType changeType) {\n-        super(key + \",\" + group);\n-        this.key = key;\n-        this.group = group;\n-        this.content = content;\n-        this.changeType = changeType;\n-    }\n-\n-    public String getKey() {\n-        return key;\n-    }\n-\n-    public String getGroup() {\n-        return group;\n-    }\n-\n-    public String getContent() {\n-        return content;\n-    }\n-\n-    public ConfigChangeType getChangeType() {\n-        return changeType;\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"ConfigChangedEvent{\" +\n-                \"key='\" + key + '\\'' +\n-                \", group='\" + group + '\\'' +\n-                \", content='\" + content + '\\'' +\n-                \", changeType=\" + changeType +\n-                \"} \" + super.toString();\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof ConfigChangedEvent)) {\n-            return false;\n-        }\n-        ConfigChangedEvent that = (ConfigChangedEvent) o;\n-        return Objects.equals(getKey(), that.getKey()) &&\n-                Objects.equals(getGroup(), that.getGroup()) &&\n-                Objects.equals(getContent(), that.getContent()) &&\n-                getChangeType() == that.getChangeType();\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        return Objects.hash(getKey(), getGroup(), getContent(), getChangeType());\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.common.config.configcenter;\r\n+\r\n+import java.util.EventObject;\r\n+import java.util.Objects;\r\n+\r\n+/**\r\n+ * An event raised when the config changed, immutable.\r\n+ *\r\n+ * @see ConfigChangeType\r\n+ */\r\n+public class ConfigChangedEvent extends EventObject {\r\n+\r\n+    private final String key;\r\n+\r\n+    private final String group;\r\n+\r\n+    private final String content;\r\n+\r\n+    private final ConfigChangeType changeType;\r\n+\r\n+    public ConfigChangedEvent(String key, String group, String content) {\r\n+        this(key, group, content, ConfigChangeType.MODIFIED);\r\n+    }\r\n+\r\n+    public ConfigChangedEvent(String key, String group, String content, ConfigChangeType changeType) {\r\n+        super(key + \",\" + group);\r\n+        this.key = key;\r\n+        this.group = group;\r\n+        this.content = content;\r\n+        this.changeType = changeType;\r\n+    }\r\n+\r\n+    public String getKey() {\r\n+        return key;\r\n+    }\r\n+\r\n+    public String getGroup() {\r\n+        return group;\r\n+    }\r\n+\r\n+    public String getContent() {\r\n+        return content;\r\n+    }\r\n+\r\n+    public ConfigChangeType getChangeType() {\r\n+        return changeType;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"ConfigChangedEvent{\" +\r\n+                \"key='\" + key + '\\'' +\r\n+                \", group='\" + group + '\\'' +\r\n+                \", content='\" + content + '\\'' +\r\n+                \", changeType=\" + changeType +\r\n+                \"} \" + super.toString();\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 ConfigChangedEvent)) {\r\n+            return false;\r\n+        }\r\n+        ConfigChangedEvent that = (ConfigChangedEvent) o;\r\n+        return Objects.equals(getKey(), that.getKey()) &&\r\n+                Objects.equals(getGroup(), that.getGroup()) &&\r\n+                Objects.equals(getContent(), that.getContent()) &&\r\n+                getChangeType() == that.getChangeType();\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        return Objects.hash(getKey(), getGroup(), getContent(), getChangeType());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/ConfigurationListener.java", "source2": "org/apache/dubbo/common/config/configcenter/ConfigurationListener.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,33 +1,33 @@\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.common.config.configcenter;\n-\n-import java.util.EventListener;\n-\n-/**\n- * Config listener, will get notified when the config it listens on changes.\n- */\n-public interface ConfigurationListener extends EventListener {\n-\n-    /**\n-     * Listener call back method. Listener gets notified by this method once there's any change happens on the config\n-     * the listener listens on.\n-     *\n-     * @param event config change event\n-     */\n-    void process(ConfigChangedEvent 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.common.config.configcenter;\r\n+\r\n+import java.util.EventListener;\r\n+\r\n+/**\r\n+ * Config listener, will get notified when the config it listens on changes.\r\n+ */\r\n+public interface ConfigurationListener extends EventListener {\r\n+\r\n+    /**\r\n+     * Listener call back method. Listener gets notified by this method once there's any change happens on the config\r\n+     * the listener listens on.\r\n+     *\r\n+     * @param event config change event\r\n+     */\r\n+    void process(ConfigChangedEvent event);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/Constants.java", "source2": "org/apache/dubbo/common/config/configcenter/Constants.java", "comments": ["Line-ending 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.common.config.configcenter;\n-\n-@Deprecated\n-public interface Constants {\n-    String CONFIG_CLUSTER_KEY = \"config.cluster\";\n-    String CONFIG_NAMESPACE_KEY = \"config.namespace\";\n-    String CONFIG_GROUP_KEY = \"config.group\";\n-    String CONFIG_CHECK_KEY = \"config.check\";\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.common.config.configcenter;\r\n+\r\n+@Deprecated\r\n+public interface Constants {\r\n+    String CONFIG_CLUSTER_KEY = \"config.cluster\";\r\n+    String CONFIG_NAMESPACE_KEY = \"config.namespace\";\r\n+    String CONFIG_GROUP_KEY = \"config.group\";\r\n+    String CONFIG_CHECK_KEY = \"config.check\";\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/DynamicConfiguration.java", "source2": "org/apache/dubbo/common/config/configcenter/DynamicConfiguration.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,245 +1,245 @@\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.common.config.configcenter;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.config.Configuration;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-\n-import java.util.Collections;\n-import java.util.Optional;\n-import java.util.Set;\n-import java.util.SortedSet;\n-\n-import static org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory.getDynamicConfigurationFactory;\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-\n-/**\n- * Dynamic Configuration\n- * <br/>\n- * From the use scenario internally inside framework, there're mainly three kinds of methods:\n- * <ol>\n- * <li>{@link #getProperties(String, String, long)}, get configuration file from Config Center at start up.</li>\n- * <li>{@link #addListener(String, String, ConfigurationListener)}/ {@link #removeListener(String, String, ConfigurationListener)}\n- * , add or remove listeners for governance rules or config items that need to watch.</li>\n- * <li>{@link #getProperty(String, Object)}, get a single config item.</li>\n- * <li>{@link #getConfig(String, String, long)}, get the specified config</li>\n- * </ol>\n- *\n- * @see AbstractDynamicConfiguration\n- */\n-public interface DynamicConfiguration extends Configuration, AutoCloseable {\n-\n-    String DEFAULT_GROUP = \"dubbo\";\n-\n-    /**\n-     * {@link #addListener(String, String, ConfigurationListener)}\n-     *\n-     * @param key      the key to represent a configuration\n-     * @param listener configuration listener\n-     */\n-    default void addListener(String key, ConfigurationListener listener) {\n-        addListener(key, getDefaultGroup(), listener);\n-    }\n-\n-\n-    /**\n-     * {@link #removeListener(String, String, ConfigurationListener)}\n-     *\n-     * @param key      the key to represent a configuration\n-     * @param listener configuration listener\n-     */\n-    default void removeListener(String key, ConfigurationListener listener) {\n-        removeListener(key, getDefaultGroup(), listener);\n-    }\n-\n-    /**\n-     * Register a configuration listener for a specified key\n-     * The listener only works for service governance purpose, so the target group would always be the value user\n-     * specifies at startup or 'dubbo' by default. This method will only register listener, which means it will not\n-     * trigger a notification that contains the current value.\n-     *\n-     * @param key      the key to represent a configuration\n-     * @param group    the group where the key belongs to\n-     * @param listener configuration listener\n-     */\n-    void addListener(String key, String group, ConfigurationListener listener);\n-\n-    /**\n-     * Stops one listener from listening to value changes in the specified key.\n-     *\n-     * @param key      the key to represent a configuration\n-     * @param group    the group where the key belongs to\n-     * @param listener configuration listener\n-     */\n-    void removeListener(String key, String group, ConfigurationListener listener);\n-\n-    /**\n-     * Get the configuration mapped to the given key and the given group with {@link #getDefaultTimeout() the default\n-     * timeout}\n-     *\n-     * @param key   the key to represent a configuration\n-     * @param group the group where the key belongs to\n-     * @return target configuration mapped to the given key and the given group\n-     */\n-    default String getConfig(String key, String group) {\n-        return getConfig(key, group, getDefaultTimeout());\n-    }\n-\n-    /**\n-     * Get the configuration mapped to the given key and the given group. If the\n-     * configuration fails to fetch after timeout exceeds, IllegalStateException will be thrown.\n-     *\n-     * @param key     the key to represent a configuration\n-     * @param group   the group where the key belongs to\n-     * @param timeout timeout value for fetching the target config\n-     * @return target configuration mapped to the given key and the given group, IllegalStateException will be thrown\n-     * if timeout exceeds.\n-     */\n-    String getConfig(String key, String group, long timeout) throws IllegalStateException;\n-\n-    /**\n-     * This method are mostly used to get a compound config file with {@link #getDefaultTimeout() the default timeout},\n-     * such as a complete dubbo.properties file.\n-     */\n-    default String getProperties(String key, String group) throws IllegalStateException {\n-        return getProperties(key, group, getDefaultTimeout());\n-    }\n-\n-    /**\n-     * This method are mostly used to get a compound config file, such as a complete dubbo.properties file.\n-     *\n-     * @revision 2.7.4\n-     */\n-    default String getProperties(String key, String group, long timeout) throws IllegalStateException {\n-        return getConfig(key, group, timeout);\n-    }\n-\n-    /**\n-     * Publish Config mapped to the given key under the {@link #getDefaultGroup() default group}\n-     *\n-     * @param key     the key to represent a configuration\n-     * @param content the content of configuration\n-     * @return <code>true</code> if success, or <code>false</code>\n-     * @throws UnsupportedOperationException If the under layer does not support\n-     * @since 2.7.5\n-     */\n-    default boolean publishConfig(String key, String content) throws UnsupportedOperationException {\n-        return publishConfig(key, getDefaultGroup(), content);\n-    }\n-\n-    /**\n-     * Publish Config mapped to the given key and the given group.\n-     *\n-     * @param key     the key to represent a configuration\n-     * @param group   the group where the key belongs to\n-     * @param content the content of configuration\n-     * @return <code>true</code> if success, or <code>false</code>\n-     * @throws UnsupportedOperationException If the under layer does not support\n-     * @since 2.7.5\n-     */\n-    default boolean publishConfig(String key, String group, String content) throws UnsupportedOperationException {\n-        return false;\n-    }\n-\n-    /**\n-     * Get the config keys by the specified group\n-     *\n-     * @param group the specified group\n-     * @return the read-only non-null sorted {@link Set set} of config keys\n-     * @throws UnsupportedOperationException If the under layer does not support\n-     * @since 2.7.5\n-     */\n-    default SortedSet<String> getConfigKeys(String group) throws UnsupportedOperationException {\n-        return Collections.emptySortedSet();\n-    }\n-\n-    /**\n-     * Get the default group for the operations\n-     *\n-     * @return The default value is {@link #DEFAULT_GROUP \"dubbo\"}\n-     * @since 2.7.5\n-     */\n-    default String getDefaultGroup() {\n-        return DEFAULT_GROUP;\n-    }\n-\n-    /**\n-     * Get the default timeout for the operations in milliseconds\n-     *\n-     * @return The default value is <code>-1L</code>\n-     * @since 2.7.5\n-     */\n-    default long getDefaultTimeout() {\n-        return -1L;\n-    }\n-\n-    /**\n-     * Close the configuration\n-     *\n-     * @throws Exception\n-     * @since 2.7.5\n-     */\n-    @Override\n-    default void close() throws Exception {\n-        throw new UnsupportedOperationException();\n-    }\n-\n-    /**\n-     * Find DynamicConfiguration instance\n-     *\n-     * @return DynamicConfiguration instance\n-     */\n-    static DynamicConfiguration getDynamicConfiguration() {\n-        Optional<DynamicConfiguration> optional = ApplicationModel.getEnvironment().getDynamicConfiguration();\n-        return optional.orElseGet(() -> getExtensionLoader(DynamicConfigurationFactory.class)\n-                .getDefaultExtension()\n-                .getDynamicConfiguration(null));\n-    }\n-\n-    /**\n-     * Get the instance of {@link DynamicConfiguration} by the specified connection {@link URL}\n-     *\n-     * @param connectionURL\n-     * @return non-null\n-     * @since 2.7.5\n-     */\n-    static DynamicConfiguration getDynamicConfiguration(URL connectionURL) {\n-        String protocol = connectionURL.getProtocol();\n-        DynamicConfigurationFactory factory = getDynamicConfigurationFactory(protocol);\n-        return factory.getDynamicConfiguration(connectionURL);\n-    }\n-\n-    /**\n-     * The format is '{interfaceName}:[version]:[group]'\n-     *\n-     * @return\n-     */\n-    static String getRuleKey(URL url) {\n-        return url.getColonSeparatedKey();\n-    }\n-\n-    /**\n-     * @param key   the key to represent a configuration\n-     * @param group the group where the key belongs to\n-     * @return <code>true</code> if success, or <code>false</code>\n-     * @since 2.7.8\n-     */\n-    default boolean removeConfig(String key, String group) {\n-        return true;\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.common.config.configcenter;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.config.Configuration;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+\r\n+import java.util.Collections;\r\n+import java.util.Optional;\r\n+import java.util.Set;\r\n+import java.util.SortedSet;\r\n+\r\n+import static org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory.getDynamicConfigurationFactory;\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+\r\n+/**\r\n+ * Dynamic Configuration\r\n+ * <br/>\r\n+ * From the use scenario internally inside framework, there're mainly three kinds of methods:\r\n+ * <ol>\r\n+ * <li>{@link #getProperties(String, String, long)}, get configuration file from Config Center at start up.</li>\r\n+ * <li>{@link #addListener(String, String, ConfigurationListener)}/ {@link #removeListener(String, String, ConfigurationListener)}\r\n+ * , add or remove listeners for governance rules or config items that need to watch.</li>\r\n+ * <li>{@link #getProperty(String, Object)}, get a single config item.</li>\r\n+ * <li>{@link #getConfig(String, String, long)}, get the specified config</li>\r\n+ * </ol>\r\n+ *\r\n+ * @see AbstractDynamicConfiguration\r\n+ */\r\n+public interface DynamicConfiguration extends Configuration, AutoCloseable {\r\n+\r\n+    String DEFAULT_GROUP = \"dubbo\";\r\n+\r\n+    /**\r\n+     * {@link #addListener(String, String, ConfigurationListener)}\r\n+     *\r\n+     * @param key      the key to represent a configuration\r\n+     * @param listener configuration listener\r\n+     */\r\n+    default void addListener(String key, ConfigurationListener listener) {\r\n+        addListener(key, getDefaultGroup(), listener);\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * {@link #removeListener(String, String, ConfigurationListener)}\r\n+     *\r\n+     * @param key      the key to represent a configuration\r\n+     * @param listener configuration listener\r\n+     */\r\n+    default void removeListener(String key, ConfigurationListener listener) {\r\n+        removeListener(key, getDefaultGroup(), listener);\r\n+    }\r\n+\r\n+    /**\r\n+     * Register a configuration listener for a specified key\r\n+     * The listener only works for service governance purpose, so the target group would always be the value user\r\n+     * specifies at startup or 'dubbo' by default. This method will only register listener, which means it will not\r\n+     * trigger a notification that contains the current value.\r\n+     *\r\n+     * @param key      the key to represent a configuration\r\n+     * @param group    the group where the key belongs to\r\n+     * @param listener configuration listener\r\n+     */\r\n+    void addListener(String key, String group, ConfigurationListener listener);\r\n+\r\n+    /**\r\n+     * Stops one listener from listening to value changes in the specified key.\r\n+     *\r\n+     * @param key      the key to represent a configuration\r\n+     * @param group    the group where the key belongs to\r\n+     * @param listener configuration listener\r\n+     */\r\n+    void removeListener(String key, String group, ConfigurationListener listener);\r\n+\r\n+    /**\r\n+     * Get the configuration mapped to the given key and the given group with {@link #getDefaultTimeout() the default\r\n+     * timeout}\r\n+     *\r\n+     * @param key   the key to represent a configuration\r\n+     * @param group the group where the key belongs to\r\n+     * @return target configuration mapped to the given key and the given group\r\n+     */\r\n+    default String getConfig(String key, String group) {\r\n+        return getConfig(key, group, getDefaultTimeout());\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the configuration mapped to the given key and the given group. If the\r\n+     * configuration fails to fetch after timeout exceeds, IllegalStateException will be thrown.\r\n+     *\r\n+     * @param key     the key to represent a configuration\r\n+     * @param group   the group where the key belongs to\r\n+     * @param timeout timeout value for fetching the target config\r\n+     * @return target configuration mapped to the given key and the given group, IllegalStateException will be thrown\r\n+     * if timeout exceeds.\r\n+     */\r\n+    String getConfig(String key, String group, long timeout) throws IllegalStateException;\r\n+\r\n+    /**\r\n+     * This method are mostly used to get a compound config file with {@link #getDefaultTimeout() the default timeout},\r\n+     * such as a complete dubbo.properties file.\r\n+     */\r\n+    default String getProperties(String key, String group) throws IllegalStateException {\r\n+        return getProperties(key, group, getDefaultTimeout());\r\n+    }\r\n+\r\n+    /**\r\n+     * This method are mostly used to get a compound config file, such as a complete dubbo.properties file.\r\n+     *\r\n+     * @revision 2.7.4\r\n+     */\r\n+    default String getProperties(String key, String group, long timeout) throws IllegalStateException {\r\n+        return getConfig(key, group, timeout);\r\n+    }\r\n+\r\n+    /**\r\n+     * Publish Config mapped to the given key under the {@link #getDefaultGroup() default group}\r\n+     *\r\n+     * @param key     the key to represent a configuration\r\n+     * @param content the content of configuration\r\n+     * @return <code>true</code> if success, or <code>false</code>\r\n+     * @throws UnsupportedOperationException If the under layer does not support\r\n+     * @since 2.7.5\r\n+     */\r\n+    default boolean publishConfig(String key, String content) throws UnsupportedOperationException {\r\n+        return publishConfig(key, getDefaultGroup(), content);\r\n+    }\r\n+\r\n+    /**\r\n+     * Publish Config mapped to the given key and the given group.\r\n+     *\r\n+     * @param key     the key to represent a configuration\r\n+     * @param group   the group where the key belongs to\r\n+     * @param content the content of configuration\r\n+     * @return <code>true</code> if success, or <code>false</code>\r\n+     * @throws UnsupportedOperationException If the under layer does not support\r\n+     * @since 2.7.5\r\n+     */\r\n+    default boolean publishConfig(String key, String group, String content) throws UnsupportedOperationException {\r\n+        return false;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the config keys by the specified group\r\n+     *\r\n+     * @param group the specified group\r\n+     * @return the read-only non-null sorted {@link Set set} of config keys\r\n+     * @throws UnsupportedOperationException If the under layer does not support\r\n+     * @since 2.7.5\r\n+     */\r\n+    default SortedSet<String> getConfigKeys(String group) throws UnsupportedOperationException {\r\n+        return Collections.emptySortedSet();\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the default group for the operations\r\n+     *\r\n+     * @return The default value is {@link #DEFAULT_GROUP \"dubbo\"}\r\n+     * @since 2.7.5\r\n+     */\r\n+    default String getDefaultGroup() {\r\n+        return DEFAULT_GROUP;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the default timeout for the operations in milliseconds\r\n+     *\r\n+     * @return The default value is <code>-1L</code>\r\n+     * @since 2.7.5\r\n+     */\r\n+    default long getDefaultTimeout() {\r\n+        return -1L;\r\n+    }\r\n+\r\n+    /**\r\n+     * Close the configuration\r\n+     *\r\n+     * @throws Exception\r\n+     * @since 2.7.5\r\n+     */\r\n+    @Override\r\n+    default void close() throws Exception {\r\n+        throw new UnsupportedOperationException();\r\n+    }\r\n+\r\n+    /**\r\n+     * Find DynamicConfiguration instance\r\n+     *\r\n+     * @return DynamicConfiguration instance\r\n+     */\r\n+    static DynamicConfiguration getDynamicConfiguration() {\r\n+        Optional<DynamicConfiguration> optional = ApplicationModel.getEnvironment().getDynamicConfiguration();\r\n+        return optional.orElseGet(() -> getExtensionLoader(DynamicConfigurationFactory.class)\r\n+                .getDefaultExtension()\r\n+                .getDynamicConfiguration(null));\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the instance of {@link DynamicConfiguration} by the specified connection {@link URL}\r\n+     *\r\n+     * @param connectionURL\r\n+     * @return non-null\r\n+     * @since 2.7.5\r\n+     */\r\n+    static DynamicConfiguration getDynamicConfiguration(URL connectionURL) {\r\n+        String protocol = connectionURL.getProtocol();\r\n+        DynamicConfigurationFactory factory = getDynamicConfigurationFactory(protocol);\r\n+        return factory.getDynamicConfiguration(connectionURL);\r\n+    }\r\n+\r\n+    /**\r\n+     * The format is '{interfaceName}:[version]:[group]'\r\n+     *\r\n+     * @return\r\n+     */\r\n+    static String getRuleKey(URL url) {\r\n+        return url.getColonSeparatedKey();\r\n+    }\r\n+\r\n+    /**\r\n+     * @param key   the key to represent a configuration\r\n+     * @param group the group where the key belongs to\r\n+     * @return <code>true</code> if success, or <code>false</code>\r\n+     * @since 2.7.8\r\n+     */\r\n+    default boolean removeConfig(String key, String group) {\r\n+        return true;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/DynamicConfigurationFactory.java", "source2": "org/apache/dubbo/common/config/configcenter/DynamicConfigurationFactory.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,46 +1,46 @@\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.common.config.configcenter;\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-\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-\n-/**\n- * The factory interface to create the instance of {@link DynamicConfiguration}\n- */\n-@SPI(\"nop\") // 2.7.5 change the default SPI implementation\n-public interface DynamicConfigurationFactory {\n-\n-    DynamicConfiguration getDynamicConfiguration(URL url);\n-\n-    /**\n-     * Get an instance of {@link DynamicConfigurationFactory} by the specified name. If not found, take the default\n-     * extension of {@link DynamicConfigurationFactory}\n-     *\n-     * @param name the name of extension of {@link DynamicConfigurationFactory}\n-     * @return non-null\n-     * @see 2.7.4\n-     */\n-    static DynamicConfigurationFactory getDynamicConfigurationFactory(String name) {\n-        Class<DynamicConfigurationFactory> factoryClass = DynamicConfigurationFactory.class;\n-        ExtensionLoader<DynamicConfigurationFactory> loader = getExtensionLoader(factoryClass);\n-        return loader.getOrDefaultExtension(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.common.config.configcenter;\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+\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+\r\n+/**\r\n+ * The factory interface to create the instance of {@link DynamicConfiguration}\r\n+ */\r\n+@SPI(\"nop\") // 2.7.5 change the default SPI implementation\r\n+public interface DynamicConfigurationFactory {\r\n+\r\n+    DynamicConfiguration getDynamicConfiguration(URL url);\r\n+\r\n+    /**\r\n+     * Get an instance of {@link DynamicConfigurationFactory} by the specified name. If not found, take the default\r\n+     * extension of {@link DynamicConfigurationFactory}\r\n+     *\r\n+     * @param name the name of extension of {@link DynamicConfigurationFactory}\r\n+     * @return non-null\r\n+     * @see 2.7.4\r\n+     */\r\n+    static DynamicConfigurationFactory getDynamicConfigurationFactory(String name) {\r\n+        Class<DynamicConfigurationFactory> factoryClass = DynamicConfigurationFactory.class;\r\n+        ExtensionLoader<DynamicConfigurationFactory> loader = getExtensionLoader(factoryClass);\r\n+        return loader.getOrDefaultExtension(name);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/TreePathDynamicConfiguration.java", "source2": "org/apache/dubbo/common/config/configcenter/TreePathDynamicConfiguration.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,186 +1,186 @@\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.common.config.configcenter;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.config.configcenter.file.FileSystemDynamicConfiguration;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.util.Collection;\n-import java.util.SortedSet;\n-import java.util.TreeSet;\n-\n-import static java.util.Collections.emptySortedSet;\n-import static java.util.Collections.unmodifiableSortedSet;\n-import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_NAMESPACE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\n-import static org.apache.dubbo.common.utils.CollectionUtils.isEmpty;\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.common.utils.PathUtils.normalize;\n-\n-/**\n- * An abstract implementation of {@link DynamicConfiguration} is like \"tree-structure\" path :\n- * <ul>\n- *     <li>{@link FileSystemDynamicConfiguration \"file\"}</li>\n- *     <li>{@link org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfiguration \"zookeeper\"}</li>\n- *     <li>{@link org.apache.dubbo.configcenter.consul.ConsulDynamicConfiguration \"consul\"}</li>\n- * </ul>\n- *\n- * @see DynamicConfiguration\n- * @see AbstractDynamicConfiguration\n- * @since 2.7.8\n- */\n-public abstract class TreePathDynamicConfiguration extends AbstractDynamicConfiguration {\n-\n-    /**\n-     * The parameter name of URL for the config root path\n-     */\n-    public static final String CONFIG_ROOT_PATH_PARAM_NAME = PARAM_NAME_PREFIX + \"root-path\";\n-\n-    /**\n-     * The parameter name of URL for the config base path\n-     */\n-    public static final String CONFIG_BASE_PATH_PARAM_NAME = PARAM_NAME_PREFIX + \"base-path\";\n-\n-    /**\n-     * The default value of parameter of URL for the config base path\n-     */\n-    public static final String DEFAULT_CONFIG_BASE_PATH = \"/config\";\n-\n-    private final String rootPath;\n-\n-    public TreePathDynamicConfiguration(URL url) {\n-        super(url);\n-        this.rootPath = getRootPath(url);\n-    }\n-\n-    public TreePathDynamicConfiguration(String rootPath,\n-                                        String threadPoolPrefixName,\n-                                        int threadPoolSize,\n-                                        long keepAliveTime,\n-                                        String group,\n-                                        long timeout) {\n-        super(threadPoolPrefixName, threadPoolSize, keepAliveTime, group, timeout);\n-        this.rootPath = rootPath;\n-    }\n-\n-    @Override\n-    protected final String doGetConfig(String key, String group) throws Exception {\n-        String pathKey = buildPathKey(group, key);\n-        return doGetConfig(pathKey);\n-    }\n-\n-    @Override\n-    public final boolean publishConfig(String key, String group, String content) {\n-        String pathKey = buildPathKey(group, key);\n-        return Boolean.TRUE.equals(execute(() -> doPublishConfig(pathKey, content), getDefaultTimeout()));\n-    }\n-\n-    @Override\n-    protected final boolean doRemoveConfig(String key, String group) throws Exception {\n-        String pathKey = buildPathKey(group, key);\n-        return doRemoveConfig(pathKey);\n-    }\n-\n-    @Override\n-    public final void addListener(String key, String group, ConfigurationListener listener) {\n-        String pathKey = buildPathKey(group, key);\n-        doAddListener(pathKey, listener);\n-    }\n-\n-    @Override\n-    public final void removeListener(String key, String group, ConfigurationListener listener) {\n-        String pathKey = buildPathKey(group, key);\n-        doRemoveListener(pathKey, listener);\n-    }\n-\n-    @Override\n-    public final SortedSet<String> getConfigKeys(String group) throws UnsupportedOperationException {\n-        String groupPath = buildGroupPath(group);\n-        Collection<String> configKeys = doGetConfigKeys(groupPath);\n-        return isEmpty(configKeys) ? emptySortedSet() : unmodifiableSortedSet(new TreeSet<>(configKeys));\n-    }\n-\n-    protected abstract boolean doPublishConfig(String pathKey, String content) throws Exception;\n-\n-    protected abstract String doGetConfig(String pathKey) throws Exception;\n-\n-    protected abstract boolean doRemoveConfig(String pathKey) throws Exception;\n-\n-    protected abstract Collection<String> doGetConfigKeys(String groupPath);\n-\n-    protected abstract void doAddListener(String pathKey, ConfigurationListener listener);\n-\n-    protected abstract void doRemoveListener(String pathKey, ConfigurationListener listener);\n-\n-    protected String buildGroupPath(String group) {\n-        return buildPath(rootPath, group);\n-    }\n-\n-    protected String buildPathKey(String group, String key) {\n-        return buildPath(buildGroupPath(group), key);\n-    }\n-\n-    /**\n-     * Get the root path from the specified {@link URL connection URl}\n-     *\n-     * @param url the specified {@link URL connection URl}\n-     * @return non-null\n-     */\n-    protected String getRootPath(URL url) {\n-\n-        String rootPath = url.getParameter(CONFIG_ROOT_PATH_PARAM_NAME, buildRootPath(url));\n-\n-        rootPath = normalize(rootPath);\n-\n-        int rootPathLength = rootPath.length();\n-\n-        if (rootPathLength > 1 && rootPath.endsWith(PATH_SEPARATOR)) {\n-            rootPath = rootPath.substring(0, rootPathLength - 1);\n-        }\n-\n-        return rootPath;\n-    }\n-\n-    private String buildRootPath(URL url) {\n-        return PATH_SEPARATOR + getConfigNamespace(url) + getConfigBasePath(url);\n-    }\n-\n-    /**\n-     * Get the namespace from the specified {@link URL connection URl}\n-     *\n-     * @param url the specified {@link URL connection URl}\n-     * @return non-null\n-     */\n-    protected String getConfigNamespace(URL url) {\n-        return url.getParameter(CONFIG_NAMESPACE_KEY, DEFAULT_GROUP);\n-    }\n-\n-    /**\n-     * Get the config base path from the specified {@link URL connection URl}\n-     *\n-     * @param url the specified {@link URL connection URl}\n-     * @return non-null\n-     */\n-    protected String getConfigBasePath(URL url) {\n-        String configBasePath = url.getParameter(CONFIG_BASE_PATH_PARAM_NAME, DEFAULT_CONFIG_BASE_PATH);\n-        if (StringUtils.isNotEmpty(configBasePath) && !configBasePath.startsWith(PATH_SEPARATOR)) {\n-            configBasePath = PATH_SEPARATOR + configBasePath;\n-        }\n-        return configBasePath;\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.common.config.configcenter;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.config.configcenter.file.FileSystemDynamicConfiguration;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.util.Collection;\r\n+import java.util.SortedSet;\r\n+import java.util.TreeSet;\r\n+\r\n+import static java.util.Collections.emptySortedSet;\r\n+import static java.util.Collections.unmodifiableSortedSet;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_NAMESPACE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;\r\n+import static org.apache.dubbo.common.utils.CollectionUtils.isEmpty;\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.common.utils.PathUtils.normalize;\r\n+\r\n+/**\r\n+ * An abstract implementation of {@link DynamicConfiguration} is like \"tree-structure\" path :\r\n+ * <ul>\r\n+ *     <li>{@link FileSystemDynamicConfiguration \"file\"}</li>\r\n+ *     <li>{@link org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfiguration \"zookeeper\"}</li>\r\n+ *     <li>{@link org.apache.dubbo.configcenter.consul.ConsulDynamicConfiguration \"consul\"}</li>\r\n+ * </ul>\r\n+ *\r\n+ * @see DynamicConfiguration\r\n+ * @see AbstractDynamicConfiguration\r\n+ * @since 2.7.8\r\n+ */\r\n+public abstract class TreePathDynamicConfiguration extends AbstractDynamicConfiguration {\r\n+\r\n+    /**\r\n+     * The parameter name of URL for the config root path\r\n+     */\r\n+    public static final String CONFIG_ROOT_PATH_PARAM_NAME = PARAM_NAME_PREFIX + \"root-path\";\r\n+\r\n+    /**\r\n+     * The parameter name of URL for the config base path\r\n+     */\r\n+    public static final String CONFIG_BASE_PATH_PARAM_NAME = PARAM_NAME_PREFIX + \"base-path\";\r\n+\r\n+    /**\r\n+     * The default value of parameter of URL for the config base path\r\n+     */\r\n+    public static final String DEFAULT_CONFIG_BASE_PATH = \"/config\";\r\n+\r\n+    private final String rootPath;\r\n+\r\n+    public TreePathDynamicConfiguration(URL url) {\r\n+        super(url);\r\n+        this.rootPath = getRootPath(url);\r\n+    }\r\n+\r\n+    public TreePathDynamicConfiguration(String rootPath,\r\n+                                        String threadPoolPrefixName,\r\n+                                        int threadPoolSize,\r\n+                                        long keepAliveTime,\r\n+                                        String group,\r\n+                                        long timeout) {\r\n+        super(threadPoolPrefixName, threadPoolSize, keepAliveTime, group, timeout);\r\n+        this.rootPath = rootPath;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected final String doGetConfig(String key, String group) throws Exception {\r\n+        String pathKey = buildPathKey(group, key);\r\n+        return doGetConfig(pathKey);\r\n+    }\r\n+\r\n+    @Override\r\n+    public final boolean publishConfig(String key, String group, String content) {\r\n+        String pathKey = buildPathKey(group, key);\r\n+        return Boolean.TRUE.equals(execute(() -> doPublishConfig(pathKey, content), getDefaultTimeout()));\r\n+    }\r\n+\r\n+    @Override\r\n+    protected final boolean doRemoveConfig(String key, String group) throws Exception {\r\n+        String pathKey = buildPathKey(group, key);\r\n+        return doRemoveConfig(pathKey);\r\n+    }\r\n+\r\n+    @Override\r\n+    public final void addListener(String key, String group, ConfigurationListener listener) {\r\n+        String pathKey = buildPathKey(group, key);\r\n+        doAddListener(pathKey, listener);\r\n+    }\r\n+\r\n+    @Override\r\n+    public final void removeListener(String key, String group, ConfigurationListener listener) {\r\n+        String pathKey = buildPathKey(group, key);\r\n+        doRemoveListener(pathKey, listener);\r\n+    }\r\n+\r\n+    @Override\r\n+    public final SortedSet<String> getConfigKeys(String group) throws UnsupportedOperationException {\r\n+        String groupPath = buildGroupPath(group);\r\n+        Collection<String> configKeys = doGetConfigKeys(groupPath);\r\n+        return isEmpty(configKeys) ? emptySortedSet() : unmodifiableSortedSet(new TreeSet<>(configKeys));\r\n+    }\r\n+\r\n+    protected abstract boolean doPublishConfig(String pathKey, String content) throws Exception;\r\n+\r\n+    protected abstract String doGetConfig(String pathKey) throws Exception;\r\n+\r\n+    protected abstract boolean doRemoveConfig(String pathKey) throws Exception;\r\n+\r\n+    protected abstract Collection<String> doGetConfigKeys(String groupPath);\r\n+\r\n+    protected abstract void doAddListener(String pathKey, ConfigurationListener listener);\r\n+\r\n+    protected abstract void doRemoveListener(String pathKey, ConfigurationListener listener);\r\n+\r\n+    protected String buildGroupPath(String group) {\r\n+        return buildPath(rootPath, group);\r\n+    }\r\n+\r\n+    protected String buildPathKey(String group, String key) {\r\n+        return buildPath(buildGroupPath(group), key);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the root path from the specified {@link URL connection URl}\r\n+     *\r\n+     * @param url the specified {@link URL connection URl}\r\n+     * @return non-null\r\n+     */\r\n+    protected String getRootPath(URL url) {\r\n+\r\n+        String rootPath = url.getParameter(CONFIG_ROOT_PATH_PARAM_NAME, buildRootPath(url));\r\n+\r\n+        rootPath = normalize(rootPath);\r\n+\r\n+        int rootPathLength = rootPath.length();\r\n+\r\n+        if (rootPathLength > 1 && rootPath.endsWith(PATH_SEPARATOR)) {\r\n+            rootPath = rootPath.substring(0, rootPathLength - 1);\r\n+        }\r\n+\r\n+        return rootPath;\r\n+    }\r\n+\r\n+    private String buildRootPath(URL url) {\r\n+        return PATH_SEPARATOR + getConfigNamespace(url) + getConfigBasePath(url);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the namespace from the specified {@link URL connection URl}\r\n+     *\r\n+     * @param url the specified {@link URL connection URl}\r\n+     * @return non-null\r\n+     */\r\n+    protected String getConfigNamespace(URL url) {\r\n+        return url.getParameter(CONFIG_NAMESPACE_KEY, DEFAULT_GROUP);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the config base path from the specified {@link URL connection URl}\r\n+     *\r\n+     * @param url the specified {@link URL connection URl}\r\n+     * @return non-null\r\n+     */\r\n+    protected String getConfigBasePath(URL url) {\r\n+        String configBasePath = url.getParameter(CONFIG_BASE_PATH_PARAM_NAME, DEFAULT_CONFIG_BASE_PATH);\r\n+        if (StringUtils.isNotEmpty(configBasePath) && !configBasePath.startsWith(PATH_SEPARATOR)) {\r\n+            configBasePath = PATH_SEPARATOR + configBasePath;\r\n+        }\r\n+        return configBasePath;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfiguration.java", "source2": "org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfiguration.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,607 +1,607 @@\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.common.config.configcenter.file;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.config.configcenter.ConfigChangeType;\n-import org.apache.dubbo.common.config.configcenter.ConfigChangedEvent;\n-import org.apache.dubbo.common.config.configcenter.ConfigurationListener;\n-import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\n-import org.apache.dubbo.common.config.configcenter.TreePathDynamicConfiguration;\n-import org.apache.dubbo.common.function.ThrowableConsumer;\n-import org.apache.dubbo.common.function.ThrowableFunction;\n-import org.apache.dubbo.common.lang.ShutdownHookCallbacks;\n-import org.apache.dubbo.common.utils.NamedThreadFactory;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import org.apache.commons.io.FileUtils;\n-import org.apache.commons.logging.Log;\n-import org.apache.commons.logging.LogFactory;\n-\n-import java.io.File;\n-import java.io.IOException;\n-import java.nio.file.FileSystem;\n-import java.nio.file.FileSystems;\n-import java.nio.file.Path;\n-import java.nio.file.WatchEvent;\n-import java.nio.file.WatchKey;\n-import java.nio.file.WatchService;\n-import java.util.Collection;\n-import java.util.Collections;\n-import java.util.HashMap;\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.Optional;\n-import java.util.Set;\n-import java.util.TreeSet;\n-import java.util.concurrent.Callable;\n-import java.util.concurrent.SynchronousQueue;\n-import java.util.concurrent.ThreadPoolExecutor;\n-import java.util.function.BiConsumer;\n-import java.util.function.Function;\n-import java.util.stream.Collectors;\n-import java.util.stream.Stream;\n-\n-import static java.lang.String.format;\n-import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;\n-import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;\n-import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;\n-import static java.util.Collections.emptySet;\n-import static java.util.Collections.unmodifiableMap;\n-import static java.util.concurrent.TimeUnit.MILLISECONDS;\n-import static java.util.concurrent.TimeUnit.SECONDS;\n-import static org.apache.commons.io.FileUtils.readFileToString;\n-\n-/**\n- * File-System based {@link DynamicConfiguration} implementation\n- *\n- * @since 2.7.5\n- */\n-public class FileSystemDynamicConfiguration extends TreePathDynamicConfiguration {\n-\n-    public static final String CONFIG_CENTER_DIR_PARAM_NAME = PARAM_NAME_PREFIX + \"dir\";\n-\n-    public static final String CONFIG_CENTER_ENCODING_PARAM_NAME = PARAM_NAME_PREFIX + \"encoding\";\n-\n-    public static final String DEFAULT_CONFIG_CENTER_DIR_PATH = System.getProperty(\"user.home\") + File.separator\n-            + \".dubbo\" + File.separator + \"config-center\";\n-\n-    public static final int DEFAULT_THREAD_POOL_SIZE = 1;\n-\n-    public static final String DEFAULT_CONFIG_CENTER_ENCODING = \"UTF-8\";\n-\n-    private static final WatchEvent.Kind[] INTEREST_PATH_KINDS = of(ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);\n-\n-    /**\n-     * The class name of {@linkplain sun.nio.fs.PollingWatchService}\n-     */\n-    private static final String POLLING_WATCH_SERVICE_CLASS_NAME = \"sun.nio.fs.PollingWatchService\";\n-\n-    private static final int THREAD_POOL_SIZE = 1;\n-\n-    /**\n-     * Logger\n-     */\n-    private static final Log logger = LogFactory.getLog(FileSystemDynamicConfiguration.class);\n-\n-\n-    /**\n-     * The unmodifiable map for {@link ConfigChangeType} whose key is the {@link WatchEvent.Kind#name() name} of\n-     * {@link WatchEvent.Kind WatchEvent's Kind}\n-     */\n-    private static final Map<String, ConfigChangeType> CONFIG_CHANGE_TYPES_MAP =\n-            unmodifiableMap(new HashMap<String, ConfigChangeType>() {\n-                // Initializes the elements that is mapping ConfigChangeType\n-                {\n-                    put(ENTRY_CREATE.name(), ConfigChangeType.ADDED);\n-                    put(ENTRY_DELETE.name(), ConfigChangeType.DELETED);\n-                    put(ENTRY_MODIFY.name(), ConfigChangeType.MODIFIED);\n-                }\n-            });\n-\n-    private static final Optional<WatchService> watchService;\n-\n-    /**\n-     * Is Pooling Based Watch Service\n-     *\n-     * @see #detectPoolingBasedWatchService(Optional)\n-     */\n-    private static final boolean BASED_POOLING_WATCH_SERVICE;\n-\n-    private static final WatchEvent.Modifier[] MODIFIERS;\n-\n-    /**\n-     * the delay to action in seconds. If null, execute indirectly\n-     */\n-    private static final Integer DELAY;\n-\n-    /**\n-     * The thread pool for {@link WatchEvent WatchEvents} loop\n-     * It's optional if there is not any {@link ConfigurationListener} registration\n-     *\n-     * @see ThreadPoolExecutor\n-     */\n-    private static final ThreadPoolExecutor WATCH_EVENTS_LOOP_THREAD_POOL;\n-\n-    // static initialization\n-    static {\n-        watchService = newWatchService();\n-        BASED_POOLING_WATCH_SERVICE = detectPoolingBasedWatchService(watchService);\n-        MODIFIERS = initWatchEventModifiers();\n-        DELAY = initDelay(MODIFIERS);\n-        WATCH_EVENTS_LOOP_THREAD_POOL = newWatchEventsLoopThreadPool();\n-        registerDubboShutdownHook();\n-    }\n-\n-    /**\n-     * The Root Directory for config center\n-     */\n-    private final File rootDirectory;\n-\n-    private final String encoding;\n-\n-    /**\n-     * The {@link Set} of {@link #groupDirectory(String) directories} that may be processing,\n-     * <p>\n-     * if {@link #isBasedPoolingWatchService()} is <code>false</code>, this properties will be\n-     * {@link Collections#emptySet() empty}\n-     *\n-     * @see #initProcessingDirectories()\n-     */\n-    private final Set<File> processingDirectories;\n-\n-    private final Map<File, List<ConfigurationListener>> listenersRepository;\n-\n-    public FileSystemDynamicConfiguration() {\n-        this(new File(DEFAULT_CONFIG_CENTER_DIR_PATH));\n-    }\n-\n-    public FileSystemDynamicConfiguration(File rootDirectory) {\n-        this(rootDirectory, DEFAULT_CONFIG_CENTER_ENCODING);\n-    }\n-\n-    public FileSystemDynamicConfiguration(File rootDirectory, String encoding) {\n-        this(rootDirectory, encoding, DEFAULT_THREAD_POOL_PREFIX);\n-    }\n-\n-    public FileSystemDynamicConfiguration(File rootDirectory, String encoding, String threadPoolPrefixName) {\n-        this(rootDirectory, encoding, threadPoolPrefixName, DEFAULT_THREAD_POOL_SIZE);\n-    }\n-\n-    public FileSystemDynamicConfiguration(File rootDirectory, String encoding, String threadPoolPrefixName,\n-                                          int threadPoolSize) {\n-        this(rootDirectory, encoding, threadPoolPrefixName, threadPoolSize, DEFAULT_THREAD_POOL_KEEP_ALIVE_TIME);\n-    }\n-\n-    public FileSystemDynamicConfiguration(File rootDirectory, String encoding,\n-                                          String threadPoolPrefixName,\n-                                          int threadPoolSize,\n-                                          long keepAliveTime) {\n-        super(rootDirectory.getAbsolutePath(), threadPoolPrefixName, threadPoolSize, keepAliveTime, DEFAULT_GROUP, -1L);\n-        this.rootDirectory = rootDirectory;\n-        this.encoding = encoding;\n-        this.processingDirectories = initProcessingDirectories();\n-        this.listenersRepository = new LinkedHashMap<>();\n-    }\n-\n-    public FileSystemDynamicConfiguration(URL url) {\n-        this(initDirectory(url), getEncoding(url), getThreadPoolPrefixName(url), getThreadPoolSize(url),\n-                getThreadPoolKeepAliveTime(url));\n-    }\n-\n-    private Set<File> initProcessingDirectories() {\n-        return isBasedPoolingWatchService() ? new LinkedHashSet<>() : emptySet();\n-    }\n-\n-    public File configFile(String key, String group) {\n-        return new File(buildPathKey(group, key));\n-    }\n-\n-    private void doInListener(String configFilePath, BiConsumer<File, List<ConfigurationListener>> consumer) {\n-        watchService.ifPresent(watchService -> {\n-            File configFile = new File(configFilePath);\n-            executeMutually(configFile.getParentFile(), () -> {\n-                // process the WatchEvents if not start\n-                if (!isProcessingWatchEvents()) {\n-                    processWatchEvents(watchService);\n-                }\n-\n-                List<ConfigurationListener> listeners = getListeners(configFile);\n-                consumer.accept(configFile, listeners);\n-\n-                // Nothing to return\n-                return null;\n-            });\n-        });\n-    }\n-\n-    /**\n-     * Register the Dubbo ShutdownHook\n-     *\n-     * @since 2.7.8\n-     */\n-    private static void registerDubboShutdownHook() {\n-        ShutdownHookCallbacks.INSTANCE.addCallback(() -> {\n-            watchService.ifPresent(w -> {\n-                try {\n-                    w.close();\n-                } catch (IOException e) {\n-                    throw new RuntimeException(e);\n-                }\n-            });\n-            getWatchEventsLoopThreadPool().shutdown();\n-        });\n-    }\n-\n-    private static boolean isProcessingWatchEvents() {\n-        return getWatchEventsLoopThreadPool().getActiveCount() > 0;\n-    }\n-\n-    /**\n-     * Process the {@link WatchEvent WatchEvents} loop in async execution\n-     *\n-     * @param watchService {@link WatchService}\n-     */\n-    private void processWatchEvents(WatchService watchService) {\n-        getWatchEventsLoopThreadPool().execute(() -> { // WatchEvents Loop\n-            while (true) {\n-                WatchKey watchKey = null;\n-                try {\n-                    watchKey = watchService.take();\n-                    if (watchKey.isValid()) {\n-                        for (WatchEvent event : watchKey.pollEvents()) {\n-                            WatchEvent.Kind kind = event.kind();\n-                            // configChangeType's key to match WatchEvent's Kind\n-                            ConfigChangeType configChangeType = CONFIG_CHANGE_TYPES_MAP.get(kind.name());\n-                            if (configChangeType != null) {\n-                                Path configDirectoryPath = (Path) watchKey.watchable();\n-                                Path currentPath = (Path) event.context();\n-                                Path configFilePath = configDirectoryPath.resolve(currentPath);\n-                                File configDirectory = configDirectoryPath.toFile();\n-                                executeMutually(configDirectory, () -> {\n-                                    fireConfigChangeEvent(configDirectory, configFilePath.toFile(), configChangeType);\n-                                    signalConfigDirectory(configDirectory);\n-                                    return null;\n-                                });\n-                            }\n-                        }\n-                    }\n-                } catch (Exception e) {\n-                    return;\n-                } finally {\n-                    if (watchKey != null) {\n-                        // reset\n-                        watchKey.reset();\n-                    }\n-                }\n-            }\n-        });\n-    }\n-\n-    private void signalConfigDirectory(File configDirectory) {\n-        if (isBasedPoolingWatchService()) {\n-            // remove configDirectory from processing set because it's done\n-            removeProcessingDirectory(configDirectory);\n-            // notify configDirectory\n-            notifyProcessingDirectory(configDirectory);\n-            if (logger.isDebugEnabled()) {\n-                logger.debug(format(\"The config rootDirectory[%s] is signalled...\", configDirectory.getName()));\n-            }\n-        }\n-    }\n-\n-    private void removeProcessingDirectory(File configDirectory) {\n-        processingDirectories.remove(configDirectory);\n-    }\n-\n-    private void notifyProcessingDirectory(File configDirectory) {\n-        configDirectory.notifyAll();\n-    }\n-\n-    private List<ConfigurationListener> getListeners(File configFile) {\n-        return listenersRepository.computeIfAbsent(configFile, p -> new LinkedList<>());\n-    }\n-\n-    private void fireConfigChangeEvent(File configDirectory, File configFile, ConfigChangeType configChangeType) {\n-        String key = configFile.getName();\n-        String value = getConfig(configFile);\n-        // fire ConfigChangeEvent one by one\n-        getListeners(configFile).forEach(listener -> {\n-            try {\n-                listener.process(new ConfigChangedEvent(key, configDirectory.getName(), value, configChangeType));\n-            } catch (Throwable e) {\n-                if (logger.isErrorEnabled()) {\n-                    logger.error(e.getMessage(), e);\n-                }\n-            }\n-        });\n-    }\n-\n-    private boolean canRead(File file) {\n-        return file.exists() && file.canRead();\n-    }\n-\n-    @Override\n-    public Object getInternalProperty(String key) {\n-        return null;\n-    }\n-\n-    @Override\n-    protected boolean doPublishConfig(String pathKey, String content) throws Exception {\n-        return delay(pathKey, configFile -> {\n-            FileUtils.write(configFile, content, getEncoding());\n-            return true;\n-        });\n-    }\n-\n-    @Override\n-    protected String doGetConfig(String pathKey) throws Exception {\n-        File configFile = new File(pathKey);\n-        return getConfig(configFile);\n-    }\n-\n-    @Override\n-    protected boolean doRemoveConfig(String pathKey) throws Exception {\n-        delay(pathKey, configFile -> {\n-            String content = getConfig(configFile);\n-            FileUtils.deleteQuietly(configFile);\n-            return content;\n-        });\n-        return true;\n-    }\n-\n-    @Override\n-    protected Collection<String> doGetConfigKeys(String groupPath) {\n-        File[] files = new File(groupPath).listFiles(File::isFile);\n-        if (files == null) {\n-            return new TreeSet<>();\n-        } else {\n-            return Stream.of(files)\n-                    .map(File::getName)\n-                    .collect(Collectors.toList());\n-        }\n-    }\n-\n-    @Override\n-    protected void doAddListener(String pathKey, ConfigurationListener listener) {\n-        doInListener(pathKey, (configFilePath, listeners) -> {\n-            if (listeners.isEmpty()) { // If no element, it indicates watchService was registered before\n-                ThrowableConsumer.execute(configFilePath, configFile -> {\n-                    FileUtils.forceMkdirParent(configFile);\n-                    // A rootDirectory to be watched\n-                    File configDirectory = configFile.getParentFile();\n-                    if (configDirectory != null) {\n-                        // Register the configDirectory\n-                        configDirectory.toPath().register(watchService.get(), INTEREST_PATH_KINDS, MODIFIERS);\n-                    }\n-                });\n-            }\n-            // Add into cache\n-            listeners.add(listener);\n-        });\n-    }\n-\n-    @Override\n-    protected void doRemoveListener(String pathKey, ConfigurationListener listener) {\n-        doInListener(pathKey, (file, listeners) -> {\n-            // Remove into cache\n-            listeners.remove(listener);\n-        });\n-    }\n-\n-    /**\n-     * Delay action for {@link #configFile(String, String) config file}\n-     *\n-     * @param configFilePath the key to represent a configuration\n-     * @param function       the customized {@link Function function} with {@link File}\n-     * @param <V>            the computed value\n-     * @return\n-     */\n-    protected <V> V delay(String configFilePath, ThrowableFunction<File, V> function) {\n-        File configFile = new File(configFilePath);\n-        // Must be based on PoolingWatchService and has listeners under config file\n-        if (isBasedPoolingWatchService()) {\n-            File configDirectory = configFile.getParentFile();\n-            executeMutually(configDirectory, () -> {\n-                if (hasListeners(configFile) && isProcessing(configDirectory)) {\n-                    Integer delay = getDelay();\n-                    if (delay != null) {\n-                        // wait for delay in seconds\n-                        long timeout = SECONDS.toMillis(delay);\n-                        if (logger.isDebugEnabled()) {\n-                            logger.debug(format(\"The config[path : %s] is about to delay in %d ms.\",\n-                                    configFilePath, timeout));\n-                        }\n-                        configDirectory.wait(timeout);\n-                    }\n-                }\n-                addProcessing(configDirectory);\n-                return null;\n-            });\n-        }\n-\n-        V value = null;\n-\n-        try {\n-            value = function.apply(configFile);\n-        } catch (Throwable e) {\n-            if (logger.isErrorEnabled()) {\n-                logger.error(e.getMessage(), e);\n-            }\n-        }\n-\n-        return value;\n-    }\n-\n-    private boolean hasListeners(File configFile) {\n-        return getListeners(configFile).size() > 0;\n-    }\n-\n-    /**\n-     * Is processing on {@link #buildGroupPath(String) config rootDirectory}\n-     *\n-     * @param configDirectory {@link #buildGroupPath(String) config rootDirectory}\n-     * @return if processing , return <code>true</code>, or <code>false</code>\n-     */\n-    private boolean isProcessing(File configDirectory) {\n-        return processingDirectories.contains(configDirectory);\n-    }\n-\n-    private void addProcessing(File configDirectory) {\n-        processingDirectories.add(configDirectory);\n-    }\n-\n-    public Set<String> getConfigGroups() {\n-        return Stream.of(getRootDirectory().listFiles())\n-                .filter(File::isDirectory)\n-                .map(File::getName)\n-                .collect(Collectors.toSet());\n-    }\n-\n-    protected String getConfig(File configFile) {\n-        return ThrowableFunction.execute(configFile,\n-                file -> canRead(configFile) ? readFileToString(configFile, getEncoding()) : null);\n-    }\n-\n-    @Override\n-    protected void doClose() throws Exception {\n-\n-    }\n-\n-    public File getRootDirectory() {\n-        return rootDirectory;\n-    }\n-\n-    public String getEncoding() {\n-        return encoding;\n-    }\n-\n-    protected Integer getDelay() {\n-        return DELAY;\n-    }\n-\n-    /**\n-     * It's whether the implementation of {@link WatchService} is based on {@linkplain sun.nio.fs.PollingWatchService}\n-     * or not.\n-     * <p>\n-     *\n-     * @return if based, return <code>true</code>, or <code>false</code>\n-     * @see #detectPoolingBasedWatchService(Optional)\n-     */\n-    protected static boolean isBasedPoolingWatchService() {\n-        return BASED_POOLING_WATCH_SERVICE;\n-    }\n-\n-    protected static ThreadPoolExecutor getWatchEventsLoopThreadPool() {\n-        return WATCH_EVENTS_LOOP_THREAD_POOL;\n-    }\n-\n-    protected ThreadPoolExecutor getWorkersThreadPool() {\n-        return super.getWorkersThreadPool();\n-    }\n-\n-    private <V> V executeMutually(final Object mutex, Callable<V> callable) {\n-        V value = null;\n-        synchronized (mutex) {\n-            try {\n-                value = callable.call();\n-            } catch (Exception e) {\n-                if (logger.isErrorEnabled()) {\n-                    logger.error(e.getMessage(), e);\n-                }\n-            }\n-        }\n-        return value;\n-    }\n-\n-    private static <T> T[] of(T... values) {\n-        return values;\n-    }\n-\n-    private static Integer initDelay(WatchEvent.Modifier[] modifiers) {\n-        if (isBasedPoolingWatchService()) {\n-            return 2;\n-        } else {\n-            return null;\n-        }\n-    }\n-\n-    private static WatchEvent.Modifier[] initWatchEventModifiers() {\n-        return of();\n-    }\n-\n-    /**\n-     * Detect the argument of {@link WatchService} is based on {@linkplain sun.nio.fs.PollingWatchService}\n-     * or not.\n-     * <p>\n-     * Some platforms do not provide the native implementation of {@link WatchService}, just use\n-     * {@linkplain sun.nio.fs.PollingWatchService} in periodic poll file modifications.\n-     *\n-     * @param watchService the instance of {@link WatchService}\n-     * @return if based, return <code>true</code>, or <code>false</code>\n-     */\n-    private static boolean detectPoolingBasedWatchService(Optional<WatchService> watchService) {\n-        String className = watchService.map(Object::getClass).map(Class::getName).orElse(null);\n-        return POLLING_WATCH_SERVICE_CLASS_NAME.equals(className);\n-    }\n-\n-    private static Optional<WatchService> newWatchService() {\n-        Optional<WatchService> watchService = null;\n-        FileSystem fileSystem = FileSystems.getDefault();\n-        try {\n-            watchService = Optional.of(fileSystem.newWatchService());\n-        } catch (IOException e) {\n-            if (logger.isErrorEnabled()) {\n-                logger.error(e.getMessage(), e);\n-            }\n-            watchService = Optional.empty();\n-        }\n-        return watchService;\n-    }\n-\n-    protected static File initDirectory(URL url) {\n-        String directoryPath = getParameter(url, CONFIG_CENTER_DIR_PARAM_NAME, url == null ? null : url.getPath());\n-        File rootDirectory = null;\n-        if (!StringUtils.isBlank(directoryPath)) {\n-            rootDirectory = new File(\"/\" + directoryPath);\n-        }\n-\n-        if (directoryPath == null || !rootDirectory.exists()) { // If the directory does not exist\n-            rootDirectory = new File(DEFAULT_CONFIG_CENTER_DIR_PATH);\n-        }\n-\n-        if (!rootDirectory.exists() && !rootDirectory.mkdirs()) {\n-            throw new IllegalStateException(format(\"Dubbo config center rootDirectory[%s] can't be created!\",\n-                    rootDirectory.getAbsolutePath()));\n-        }\n-        return rootDirectory;\n-    }\n-\n-    protected static String getEncoding(URL url) {\n-        return getParameter(url, CONFIG_CENTER_ENCODING_PARAM_NAME, DEFAULT_CONFIG_CENTER_ENCODING);\n-    }\n-\n-    private static ThreadPoolExecutor newWatchEventsLoopThreadPool() {\n-        return new ThreadPoolExecutor(THREAD_POOL_SIZE, THREAD_POOL_SIZE,\n-                0L, MILLISECONDS,\n-                new SynchronousQueue(),\n-                new NamedThreadFactory(\"dubbo-config-center-watch-events-loop\", 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+package org.apache.dubbo.common.config.configcenter.file;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.config.configcenter.ConfigChangeType;\r\n+import org.apache.dubbo.common.config.configcenter.ConfigChangedEvent;\r\n+import org.apache.dubbo.common.config.configcenter.ConfigurationListener;\r\n+import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\r\n+import org.apache.dubbo.common.config.configcenter.TreePathDynamicConfiguration;\r\n+import org.apache.dubbo.common.function.ThrowableConsumer;\r\n+import org.apache.dubbo.common.function.ThrowableFunction;\r\n+import org.apache.dubbo.common.lang.ShutdownHookCallbacks;\r\n+import org.apache.dubbo.common.utils.NamedThreadFactory;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import org.apache.commons.io.FileUtils;\r\n+import org.apache.commons.logging.Log;\r\n+import org.apache.commons.logging.LogFactory;\r\n+\r\n+import java.io.File;\r\n+import java.io.IOException;\r\n+import java.nio.file.FileSystem;\r\n+import java.nio.file.FileSystems;\r\n+import java.nio.file.Path;\r\n+import java.nio.file.WatchEvent;\r\n+import java.nio.file.WatchKey;\r\n+import java.nio.file.WatchService;\r\n+import java.util.Collection;\r\n+import java.util.Collections;\r\n+import java.util.HashMap;\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.Optional;\r\n+import java.util.Set;\r\n+import java.util.TreeSet;\r\n+import java.util.concurrent.Callable;\r\n+import java.util.concurrent.SynchronousQueue;\r\n+import java.util.concurrent.ThreadPoolExecutor;\r\n+import java.util.function.BiConsumer;\r\n+import java.util.function.Function;\r\n+import java.util.stream.Collectors;\r\n+import java.util.stream.Stream;\r\n+\r\n+import static java.lang.String.format;\r\n+import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;\r\n+import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;\r\n+import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;\r\n+import static java.util.Collections.emptySet;\r\n+import static java.util.Collections.unmodifiableMap;\r\n+import static java.util.concurrent.TimeUnit.MILLISECONDS;\r\n+import static java.util.concurrent.TimeUnit.SECONDS;\r\n+import static org.apache.commons.io.FileUtils.readFileToString;\r\n+\r\n+/**\r\n+ * File-System based {@link DynamicConfiguration} implementation\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+public class FileSystemDynamicConfiguration extends TreePathDynamicConfiguration {\r\n+\r\n+    public static final String CONFIG_CENTER_DIR_PARAM_NAME = PARAM_NAME_PREFIX + \"dir\";\r\n+\r\n+    public static final String CONFIG_CENTER_ENCODING_PARAM_NAME = PARAM_NAME_PREFIX + \"encoding\";\r\n+\r\n+    public static final String DEFAULT_CONFIG_CENTER_DIR_PATH = System.getProperty(\"user.home\") + File.separator\r\n+            + \".dubbo\" + File.separator + \"config-center\";\r\n+\r\n+    public static final int DEFAULT_THREAD_POOL_SIZE = 1;\r\n+\r\n+    public static final String DEFAULT_CONFIG_CENTER_ENCODING = \"UTF-8\";\r\n+\r\n+    private static final WatchEvent.Kind[] INTEREST_PATH_KINDS = of(ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);\r\n+\r\n+    /**\r\n+     * The class name of {@linkplain sun.nio.fs.PollingWatchService}\r\n+     */\r\n+    private static final String POLLING_WATCH_SERVICE_CLASS_NAME = \"sun.nio.fs.PollingWatchService\";\r\n+\r\n+    private static final int THREAD_POOL_SIZE = 1;\r\n+\r\n+    /**\r\n+     * Logger\r\n+     */\r\n+    private static final Log logger = LogFactory.getLog(FileSystemDynamicConfiguration.class);\r\n+\r\n+\r\n+    /**\r\n+     * The unmodifiable map for {@link ConfigChangeType} whose key is the {@link WatchEvent.Kind#name() name} of\r\n+     * {@link WatchEvent.Kind WatchEvent's Kind}\r\n+     */\r\n+    private static final Map<String, ConfigChangeType> CONFIG_CHANGE_TYPES_MAP =\r\n+            unmodifiableMap(new HashMap<String, ConfigChangeType>() {\r\n+                // Initializes the elements that is mapping ConfigChangeType\r\n+                {\r\n+                    put(ENTRY_CREATE.name(), ConfigChangeType.ADDED);\r\n+                    put(ENTRY_DELETE.name(), ConfigChangeType.DELETED);\r\n+                    put(ENTRY_MODIFY.name(), ConfigChangeType.MODIFIED);\r\n+                }\r\n+            });\r\n+\r\n+    private static final Optional<WatchService> watchService;\r\n+\r\n+    /**\r\n+     * Is Pooling Based Watch Service\r\n+     *\r\n+     * @see #detectPoolingBasedWatchService(Optional)\r\n+     */\r\n+    private static final boolean BASED_POOLING_WATCH_SERVICE;\r\n+\r\n+    private static final WatchEvent.Modifier[] MODIFIERS;\r\n+\r\n+    /**\r\n+     * the delay to action in seconds. If null, execute indirectly\r\n+     */\r\n+    private static final Integer DELAY;\r\n+\r\n+    /**\r\n+     * The thread pool for {@link WatchEvent WatchEvents} loop\r\n+     * It's optional if there is not any {@link ConfigurationListener} registration\r\n+     *\r\n+     * @see ThreadPoolExecutor\r\n+     */\r\n+    private static final ThreadPoolExecutor WATCH_EVENTS_LOOP_THREAD_POOL;\r\n+\r\n+    // static initialization\r\n+    static {\r\n+        watchService = newWatchService();\r\n+        BASED_POOLING_WATCH_SERVICE = detectPoolingBasedWatchService(watchService);\r\n+        MODIFIERS = initWatchEventModifiers();\r\n+        DELAY = initDelay(MODIFIERS);\r\n+        WATCH_EVENTS_LOOP_THREAD_POOL = newWatchEventsLoopThreadPool();\r\n+        registerDubboShutdownHook();\r\n+    }\r\n+\r\n+    /**\r\n+     * The Root Directory for config center\r\n+     */\r\n+    private final File rootDirectory;\r\n+\r\n+    private final String encoding;\r\n+\r\n+    /**\r\n+     * The {@link Set} of {@link #groupDirectory(String) directories} that may be processing,\r\n+     * <p>\r\n+     * if {@link #isBasedPoolingWatchService()} is <code>false</code>, this properties will be\r\n+     * {@link Collections#emptySet() empty}\r\n+     *\r\n+     * @see #initProcessingDirectories()\r\n+     */\r\n+    private final Set<File> processingDirectories;\r\n+\r\n+    private final Map<File, List<ConfigurationListener>> listenersRepository;\r\n+\r\n+    public FileSystemDynamicConfiguration() {\r\n+        this(new File(DEFAULT_CONFIG_CENTER_DIR_PATH));\r\n+    }\r\n+\r\n+    public FileSystemDynamicConfiguration(File rootDirectory) {\r\n+        this(rootDirectory, DEFAULT_CONFIG_CENTER_ENCODING);\r\n+    }\r\n+\r\n+    public FileSystemDynamicConfiguration(File rootDirectory, String encoding) {\r\n+        this(rootDirectory, encoding, DEFAULT_THREAD_POOL_PREFIX);\r\n+    }\r\n+\r\n+    public FileSystemDynamicConfiguration(File rootDirectory, String encoding, String threadPoolPrefixName) {\r\n+        this(rootDirectory, encoding, threadPoolPrefixName, DEFAULT_THREAD_POOL_SIZE);\r\n+    }\r\n+\r\n+    public FileSystemDynamicConfiguration(File rootDirectory, String encoding, String threadPoolPrefixName,\r\n+                                          int threadPoolSize) {\r\n+        this(rootDirectory, encoding, threadPoolPrefixName, threadPoolSize, DEFAULT_THREAD_POOL_KEEP_ALIVE_TIME);\r\n+    }\r\n+\r\n+    public FileSystemDynamicConfiguration(File rootDirectory, String encoding,\r\n+                                          String threadPoolPrefixName,\r\n+                                          int threadPoolSize,\r\n+                                          long keepAliveTime) {\r\n+        super(rootDirectory.getAbsolutePath(), threadPoolPrefixName, threadPoolSize, keepAliveTime, DEFAULT_GROUP, -1L);\r\n+        this.rootDirectory = rootDirectory;\r\n+        this.encoding = encoding;\r\n+        this.processingDirectories = initProcessingDirectories();\r\n+        this.listenersRepository = new LinkedHashMap<>();\r\n+    }\r\n+\r\n+    public FileSystemDynamicConfiguration(URL url) {\r\n+        this(initDirectory(url), getEncoding(url), getThreadPoolPrefixName(url), getThreadPoolSize(url),\r\n+                getThreadPoolKeepAliveTime(url));\r\n+    }\r\n+\r\n+    private Set<File> initProcessingDirectories() {\r\n+        return isBasedPoolingWatchService() ? new LinkedHashSet<>() : emptySet();\r\n+    }\r\n+\r\n+    public File configFile(String key, String group) {\r\n+        return new File(buildPathKey(group, key));\r\n+    }\r\n+\r\n+    private void doInListener(String configFilePath, BiConsumer<File, List<ConfigurationListener>> consumer) {\r\n+        watchService.ifPresent(watchService -> {\r\n+            File configFile = new File(configFilePath);\r\n+            executeMutually(configFile.getParentFile(), () -> {\r\n+                // process the WatchEvents if not start\r\n+                if (!isProcessingWatchEvents()) {\r\n+                    processWatchEvents(watchService);\r\n+                }\r\n+\r\n+                List<ConfigurationListener> listeners = getListeners(configFile);\r\n+                consumer.accept(configFile, listeners);\r\n+\r\n+                // Nothing to return\r\n+                return null;\r\n+            });\r\n+        });\r\n+    }\r\n+\r\n+    /**\r\n+     * Register the Dubbo ShutdownHook\r\n+     *\r\n+     * @since 2.7.8\r\n+     */\r\n+    private static void registerDubboShutdownHook() {\r\n+        ShutdownHookCallbacks.INSTANCE.addCallback(() -> {\r\n+            watchService.ifPresent(w -> {\r\n+                try {\r\n+                    w.close();\r\n+                } catch (IOException e) {\r\n+                    throw new RuntimeException(e);\r\n+                }\r\n+            });\r\n+            getWatchEventsLoopThreadPool().shutdown();\r\n+        });\r\n+    }\r\n+\r\n+    private static boolean isProcessingWatchEvents() {\r\n+        return getWatchEventsLoopThreadPool().getActiveCount() > 0;\r\n+    }\r\n+\r\n+    /**\r\n+     * Process the {@link WatchEvent WatchEvents} loop in async execution\r\n+     *\r\n+     * @param watchService {@link WatchService}\r\n+     */\r\n+    private void processWatchEvents(WatchService watchService) {\r\n+        getWatchEventsLoopThreadPool().execute(() -> { // WatchEvents Loop\r\n+            while (true) {\r\n+                WatchKey watchKey = null;\r\n+                try {\r\n+                    watchKey = watchService.take();\r\n+                    if (watchKey.isValid()) {\r\n+                        for (WatchEvent event : watchKey.pollEvents()) {\r\n+                            WatchEvent.Kind kind = event.kind();\r\n+                            // configChangeType's key to match WatchEvent's Kind\r\n+                            ConfigChangeType configChangeType = CONFIG_CHANGE_TYPES_MAP.get(kind.name());\r\n+                            if (configChangeType != null) {\r\n+                                Path configDirectoryPath = (Path) watchKey.watchable();\r\n+                                Path currentPath = (Path) event.context();\r\n+                                Path configFilePath = configDirectoryPath.resolve(currentPath);\r\n+                                File configDirectory = configDirectoryPath.toFile();\r\n+                                executeMutually(configDirectory, () -> {\r\n+                                    fireConfigChangeEvent(configDirectory, configFilePath.toFile(), configChangeType);\r\n+                                    signalConfigDirectory(configDirectory);\r\n+                                    return null;\r\n+                                });\r\n+                            }\r\n+                        }\r\n+                    }\r\n+                } catch (Exception e) {\r\n+                    return;\r\n+                } finally {\r\n+                    if (watchKey != null) {\r\n+                        // reset\r\n+                        watchKey.reset();\r\n+                    }\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    private void signalConfigDirectory(File configDirectory) {\r\n+        if (isBasedPoolingWatchService()) {\r\n+            // remove configDirectory from processing set because it's done\r\n+            removeProcessingDirectory(configDirectory);\r\n+            // notify configDirectory\r\n+            notifyProcessingDirectory(configDirectory);\r\n+            if (logger.isDebugEnabled()) {\r\n+                logger.debug(format(\"The config rootDirectory[%s] is signalled...\", configDirectory.getName()));\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private void removeProcessingDirectory(File configDirectory) {\r\n+        processingDirectories.remove(configDirectory);\r\n+    }\r\n+\r\n+    private void notifyProcessingDirectory(File configDirectory) {\r\n+        configDirectory.notifyAll();\r\n+    }\r\n+\r\n+    private List<ConfigurationListener> getListeners(File configFile) {\r\n+        return listenersRepository.computeIfAbsent(configFile, p -> new LinkedList<>());\r\n+    }\r\n+\r\n+    private void fireConfigChangeEvent(File configDirectory, File configFile, ConfigChangeType configChangeType) {\r\n+        String key = configFile.getName();\r\n+        String value = getConfig(configFile);\r\n+        // fire ConfigChangeEvent one by one\r\n+        getListeners(configFile).forEach(listener -> {\r\n+            try {\r\n+                listener.process(new ConfigChangedEvent(key, configDirectory.getName(), value, configChangeType));\r\n+            } catch (Throwable e) {\r\n+                if (logger.isErrorEnabled()) {\r\n+                    logger.error(e.getMessage(), e);\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    private boolean canRead(File file) {\r\n+        return file.exists() && file.canRead();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getInternalProperty(String key) {\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean doPublishConfig(String pathKey, String content) throws Exception {\r\n+        return delay(pathKey, configFile -> {\r\n+            FileUtils.write(configFile, content, getEncoding());\r\n+            return true;\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String doGetConfig(String pathKey) throws Exception {\r\n+        File configFile = new File(pathKey);\r\n+        return getConfig(configFile);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean doRemoveConfig(String pathKey) throws Exception {\r\n+        delay(pathKey, configFile -> {\r\n+            String content = getConfig(configFile);\r\n+            FileUtils.deleteQuietly(configFile);\r\n+            return content;\r\n+        });\r\n+        return true;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected Collection<String> doGetConfigKeys(String groupPath) {\r\n+        File[] files = new File(groupPath).listFiles(File::isFile);\r\n+        if (files == null) {\r\n+            return new TreeSet<>();\r\n+        } else {\r\n+            return Stream.of(files)\r\n+                    .map(File::getName)\r\n+                    .collect(Collectors.toList());\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void doAddListener(String pathKey, ConfigurationListener listener) {\r\n+        doInListener(pathKey, (configFilePath, listeners) -> {\r\n+            if (listeners.isEmpty()) { // If no element, it indicates watchService was registered before\r\n+                ThrowableConsumer.execute(configFilePath, configFile -> {\r\n+                    FileUtils.forceMkdirParent(configFile);\r\n+                    // A rootDirectory to be watched\r\n+                    File configDirectory = configFile.getParentFile();\r\n+                    if (configDirectory != null) {\r\n+                        // Register the configDirectory\r\n+                        configDirectory.toPath().register(watchService.get(), INTEREST_PATH_KINDS, MODIFIERS);\r\n+                    }\r\n+                });\r\n+            }\r\n+            // Add into cache\r\n+            listeners.add(listener);\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void doRemoveListener(String pathKey, ConfigurationListener listener) {\r\n+        doInListener(pathKey, (file, listeners) -> {\r\n+            // Remove into cache\r\n+            listeners.remove(listener);\r\n+        });\r\n+    }\r\n+\r\n+    /**\r\n+     * Delay action for {@link #configFile(String, String) config file}\r\n+     *\r\n+     * @param configFilePath the key to represent a configuration\r\n+     * @param function       the customized {@link Function function} with {@link File}\r\n+     * @param <V>            the computed value\r\n+     * @return\r\n+     */\r\n+    protected <V> V delay(String configFilePath, ThrowableFunction<File, V> function) {\r\n+        File configFile = new File(configFilePath);\r\n+        // Must be based on PoolingWatchService and has listeners under config file\r\n+        if (isBasedPoolingWatchService()) {\r\n+            File configDirectory = configFile.getParentFile();\r\n+            executeMutually(configDirectory, () -> {\r\n+                if (hasListeners(configFile) && isProcessing(configDirectory)) {\r\n+                    Integer delay = getDelay();\r\n+                    if (delay != null) {\r\n+                        // wait for delay in seconds\r\n+                        long timeout = SECONDS.toMillis(delay);\r\n+                        if (logger.isDebugEnabled()) {\r\n+                            logger.debug(format(\"The config[path : %s] is about to delay in %d ms.\",\r\n+                                    configFilePath, timeout));\r\n+                        }\r\n+                        configDirectory.wait(timeout);\r\n+                    }\r\n+                }\r\n+                addProcessing(configDirectory);\r\n+                return null;\r\n+            });\r\n+        }\r\n+\r\n+        V value = null;\r\n+\r\n+        try {\r\n+            value = function.apply(configFile);\r\n+        } catch (Throwable e) {\r\n+            if (logger.isErrorEnabled()) {\r\n+                logger.error(e.getMessage(), e);\r\n+            }\r\n+        }\r\n+\r\n+        return value;\r\n+    }\r\n+\r\n+    private boolean hasListeners(File configFile) {\r\n+        return getListeners(configFile).size() > 0;\r\n+    }\r\n+\r\n+    /**\r\n+     * Is processing on {@link #buildGroupPath(String) config rootDirectory}\r\n+     *\r\n+     * @param configDirectory {@link #buildGroupPath(String) config rootDirectory}\r\n+     * @return if processing , return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    private boolean isProcessing(File configDirectory) {\r\n+        return processingDirectories.contains(configDirectory);\r\n+    }\r\n+\r\n+    private void addProcessing(File configDirectory) {\r\n+        processingDirectories.add(configDirectory);\r\n+    }\r\n+\r\n+    public Set<String> getConfigGroups() {\r\n+        return Stream.of(getRootDirectory().listFiles())\r\n+                .filter(File::isDirectory)\r\n+                .map(File::getName)\r\n+                .collect(Collectors.toSet());\r\n+    }\r\n+\r\n+    protected String getConfig(File configFile) {\r\n+        return ThrowableFunction.execute(configFile,\r\n+                file -> canRead(configFile) ? readFileToString(configFile, getEncoding()) : null);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void doClose() throws Exception {\r\n+\r\n+    }\r\n+\r\n+    public File getRootDirectory() {\r\n+        return rootDirectory;\r\n+    }\r\n+\r\n+    public String getEncoding() {\r\n+        return encoding;\r\n+    }\r\n+\r\n+    protected Integer getDelay() {\r\n+        return DELAY;\r\n+    }\r\n+\r\n+    /**\r\n+     * It's whether the implementation of {@link WatchService} is based on {@linkplain sun.nio.fs.PollingWatchService}\r\n+     * or not.\r\n+     * <p>\r\n+     *\r\n+     * @return if based, return <code>true</code>, or <code>false</code>\r\n+     * @see #detectPoolingBasedWatchService(Optional)\r\n+     */\r\n+    protected static boolean isBasedPoolingWatchService() {\r\n+        return BASED_POOLING_WATCH_SERVICE;\r\n+    }\r\n+\r\n+    protected static ThreadPoolExecutor getWatchEventsLoopThreadPool() {\r\n+        return WATCH_EVENTS_LOOP_THREAD_POOL;\r\n+    }\r\n+\r\n+    protected ThreadPoolExecutor getWorkersThreadPool() {\r\n+        return super.getWorkersThreadPool();\r\n+    }\r\n+\r\n+    private <V> V executeMutually(final Object mutex, Callable<V> callable) {\r\n+        V value = null;\r\n+        synchronized (mutex) {\r\n+            try {\r\n+                value = callable.call();\r\n+            } catch (Exception e) {\r\n+                if (logger.isErrorEnabled()) {\r\n+                    logger.error(e.getMessage(), e);\r\n+                }\r\n+            }\r\n+        }\r\n+        return value;\r\n+    }\r\n+\r\n+    private static <T> T[] of(T... values) {\r\n+        return values;\r\n+    }\r\n+\r\n+    private static Integer initDelay(WatchEvent.Modifier[] modifiers) {\r\n+        if (isBasedPoolingWatchService()) {\r\n+            return 2;\r\n+        } else {\r\n+            return null;\r\n+        }\r\n+    }\r\n+\r\n+    private static WatchEvent.Modifier[] initWatchEventModifiers() {\r\n+        return of();\r\n+    }\r\n+\r\n+    /**\r\n+     * Detect the argument of {@link WatchService} is based on {@linkplain sun.nio.fs.PollingWatchService}\r\n+     * or not.\r\n+     * <p>\r\n+     * Some platforms do not provide the native implementation of {@link WatchService}, just use\r\n+     * {@linkplain sun.nio.fs.PollingWatchService} in periodic poll file modifications.\r\n+     *\r\n+     * @param watchService the instance of {@link WatchService}\r\n+     * @return if based, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    private static boolean detectPoolingBasedWatchService(Optional<WatchService> watchService) {\r\n+        String className = watchService.map(Object::getClass).map(Class::getName).orElse(null);\r\n+        return POLLING_WATCH_SERVICE_CLASS_NAME.equals(className);\r\n+    }\r\n+\r\n+    private static Optional<WatchService> newWatchService() {\r\n+        Optional<WatchService> watchService = null;\r\n+        FileSystem fileSystem = FileSystems.getDefault();\r\n+        try {\r\n+            watchService = Optional.of(fileSystem.newWatchService());\r\n+        } catch (IOException e) {\r\n+            if (logger.isErrorEnabled()) {\r\n+                logger.error(e.getMessage(), e);\r\n+            }\r\n+            watchService = Optional.empty();\r\n+        }\r\n+        return watchService;\r\n+    }\r\n+\r\n+    protected static File initDirectory(URL url) {\r\n+        String directoryPath = getParameter(url, CONFIG_CENTER_DIR_PARAM_NAME, url == null ? null : url.getPath());\r\n+        File rootDirectory = null;\r\n+        if (!StringUtils.isBlank(directoryPath)) {\r\n+            rootDirectory = new File(\"/\" + directoryPath);\r\n+        }\r\n+\r\n+        if (directoryPath == null || !rootDirectory.exists()) { // If the directory does not exist\r\n+            rootDirectory = new File(DEFAULT_CONFIG_CENTER_DIR_PATH);\r\n+        }\r\n+\r\n+        if (!rootDirectory.exists() && !rootDirectory.mkdirs()) {\r\n+            throw new IllegalStateException(format(\"Dubbo config center rootDirectory[%s] can't be created!\",\r\n+                    rootDirectory.getAbsolutePath()));\r\n+        }\r\n+        return rootDirectory;\r\n+    }\r\n+\r\n+    protected static String getEncoding(URL url) {\r\n+        return getParameter(url, CONFIG_CENTER_ENCODING_PARAM_NAME, DEFAULT_CONFIG_CENTER_ENCODING);\r\n+    }\r\n+\r\n+    private static ThreadPoolExecutor newWatchEventsLoopThreadPool() {\r\n+        return new ThreadPoolExecutor(THREAD_POOL_SIZE, THREAD_POOL_SIZE,\r\n+                0L, MILLISECONDS,\r\n+                new SynchronousQueue(),\r\n+                new NamedThreadFactory(\"dubbo-config-center-watch-events-loop\", true));\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfigurationFactory.java", "source2": "org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfigurationFactory.java", "comments": ["Line-ending 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.common.config.configcenter.file;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory;\n-import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\n-import org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory;\n-\n-/**\n- * File-System based {@link DynamicConfigurationFactory} implementation\n- *\n- * @since 2.7.5\n- */\n-public class FileSystemDynamicConfigurationFactory extends AbstractDynamicConfigurationFactory {\n-\n-    @Override\n-    protected DynamicConfiguration createDynamicConfiguration(URL url) {\n-        return new FileSystemDynamicConfiguration(url);\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.common.config.configcenter.file;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory;\r\n+import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\r\n+import org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory;\r\n+\r\n+/**\r\n+ * File-System based {@link DynamicConfigurationFactory} implementation\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+public class FileSystemDynamicConfigurationFactory extends AbstractDynamicConfigurationFactory {\r\n+\r\n+    @Override\r\n+    protected DynamicConfiguration createDynamicConfiguration(URL url) {\r\n+        return new FileSystemDynamicConfiguration(url);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java", "source2": "org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java", "comments": ["Line-ending 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.common.config.configcenter.nop;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.config.configcenter.ConfigurationListener;\n-import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\n-\n-import java.util.SortedSet;\n-\n-/**\n- * The default extension of {@link DynamicConfiguration}. If user does not specify a config center, or specifies one\n- * that is not a valid extension, it will default to this one.\n- */\n-@Deprecated\n-public class NopDynamicConfiguration implements DynamicConfiguration {\n-\n-    public NopDynamicConfiguration(URL url) {\n-        // no-op\n-    }\n-\n-    @Override\n-    public Object getInternalProperty(String key) {\n-        return null;\n-    }\n-\n-    @Override\n-    public void addListener(String key, String group, ConfigurationListener listener) {\n-        // no-op\n-    }\n-\n-    @Override\n-    public void removeListener(String key, String group, ConfigurationListener listener) {\n-        // no-op\n-    }\n-\n-    @Override\n-    public String getConfig(String key, String group, long timeout) throws IllegalStateException {\n-        // no-op\n-        return null;\n-    }\n-\n-    /**\n-     * @since 2.7.5\n-     */\n-    @Override\n-    public boolean publishConfig(String key, String group, String content) {\n-        return true;\n-    }\n-\n-    /**\n-     * @since 2.7.5\n-     */\n-    @Override\n-    public SortedSet<String> getConfigKeys(String group) {\n-        return null;\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.common.config.configcenter.nop;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.config.configcenter.ConfigurationListener;\r\n+import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\r\n+\r\n+import java.util.SortedSet;\r\n+\r\n+/**\r\n+ * The default extension of {@link DynamicConfiguration}. If user does not specify a config center, or specifies one\r\n+ * that is not a valid extension, it will default to this one.\r\n+ */\r\n+@Deprecated\r\n+public class NopDynamicConfiguration implements DynamicConfiguration {\r\n+\r\n+    public NopDynamicConfiguration(URL url) {\r\n+        // no-op\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getInternalProperty(String key) {\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void addListener(String key, String group, ConfigurationListener listener) {\r\n+        // no-op\r\n+    }\r\n+\r\n+    @Override\r\n+    public void removeListener(String key, String group, ConfigurationListener listener) {\r\n+        // no-op\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getConfig(String key, String group, long timeout) throws IllegalStateException {\r\n+        // no-op\r\n+        return null;\r\n+    }\r\n+\r\n+    /**\r\n+     * @since 2.7.5\r\n+     */\r\n+    @Override\r\n+    public boolean publishConfig(String key, String group, String content) {\r\n+        return true;\r\n+    }\r\n+\r\n+    /**\r\n+     * @since 2.7.5\r\n+     */\r\n+    @Override\r\n+    public SortedSet<String> getConfigKeys(String group) {\r\n+        return null;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfigurationFactory.java", "source2": "org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfigurationFactory.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,33 +1,33 @@\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.common.config.configcenter.nop;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory;\n-import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\n-\n-/**\n- *\n- */\n-@Deprecated\n-public class NopDynamicConfigurationFactory extends AbstractDynamicConfigurationFactory {\n-\n-    @Override\n-    protected DynamicConfiguration createDynamicConfiguration(URL url) {\n-        return new NopDynamicConfiguration(url);\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.common.config.configcenter.nop;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory;\r\n+import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\r\n+\r\n+/**\r\n+ *\r\n+ */\r\n+@Deprecated\r\n+public class NopDynamicConfigurationFactory extends AbstractDynamicConfigurationFactory {\r\n+\r\n+    @Override\r\n+    protected DynamicConfiguration createDynamicConfiguration(URL url) {\r\n+        return new NopDynamicConfiguration(url);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java", "source2": "org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java", "comments": ["Line-ending 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.common.config.configcenter.wrapper;\n-\n-import org.apache.dubbo.common.config.configcenter.ConfigurationListener;\n-import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\n-\n-import java.util.HashSet;\n-import java.util.Set;\n-import java.util.SortedSet;\n-import java.util.function.Consumer;\n-import java.util.function.Function;\n-\n-/**\n- * support multiple config center, simply iterating each concrete config center.\n- */\n-public class CompositeDynamicConfiguration implements DynamicConfiguration {\n-\n-    public static final String NAME = \"COMPOSITE\";\n-\n-    private Set<DynamicConfiguration> configurations = new HashSet<>();\n-\n-    public void addConfiguration(DynamicConfiguration configuration) {\n-        if (configuration != null) {\n-            this.configurations.add(configuration);\n-        }\n-    }\n-\n-    @Override\n-    public void addListener(String key, String group, ConfigurationListener listener) {\n-        iterateListenerOperation(configuration -> configuration.addListener(key, group, listener));\n-    }\n-\n-    @Override\n-    public void removeListener(String key, String group, ConfigurationListener listener) {\n-        iterateListenerOperation(configuration -> configuration.removeListener(key, group, listener));\n-    }\n-\n-    @Override\n-    public String getConfig(String key, String group, long timeout) throws IllegalStateException {\n-        return (String) iterateConfigOperation(configuration -> configuration.getConfig(key, group, timeout));\n-    }\n-\n-    @Override\n-    public String getProperties(String key, String group, long timeout) throws IllegalStateException {\n-        return (String) iterateConfigOperation(configuration -> configuration.getProperties(key, group, timeout));\n-    }\n-\n-    @Override\n-    public Object getInternalProperty(String key) {\n-        return iterateConfigOperation(configuration -> configuration.getInternalProperty(key));\n-    }\n-\n-    @Override\n-    public boolean publishConfig(String key, String group, String content) throws UnsupportedOperationException {\n-        boolean publishedAll = true;\n-        for (DynamicConfiguration configuration : configurations) {\n-            if (!configuration.publishConfig(key, group, content)) {\n-                publishedAll = false;\n-            }\n-        }\n-        return publishedAll;\n-    }\n-\n-    @Override\n-    @SuppressWarnings(\"unchecked\")\n-    public SortedSet<String> getConfigKeys(String group) throws UnsupportedOperationException {\n-        return (SortedSet<String>) iterateConfigOperation(configuration -> configuration.getConfigKeys(group));\n-    }\n-\n-    private void iterateListenerOperation(Consumer<DynamicConfiguration> consumer) {\n-        for (DynamicConfiguration configuration : configurations) {\n-            consumer.accept(configuration);\n-        }\n-    }\n-\n-    private Object iterateConfigOperation(Function<DynamicConfiguration, Object> func) {\n-        Object value = null;\n-        for (DynamicConfiguration configuration : configurations) {\n-            value = func.apply(configuration);\n-            if (value != null) {\n-                break;\n-            }\n-        }\n-        return value;\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.common.config.configcenter.wrapper;\r\n+\r\n+import org.apache.dubbo.common.config.configcenter.ConfigurationListener;\r\n+import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;\r\n+\r\n+import java.util.HashSet;\r\n+import java.util.Set;\r\n+import java.util.SortedSet;\r\n+import java.util.function.Consumer;\r\n+import java.util.function.Function;\r\n+\r\n+/**\r\n+ * support multiple config center, simply iterating each concrete config center.\r\n+ */\r\n+public class CompositeDynamicConfiguration implements DynamicConfiguration {\r\n+\r\n+    public static final String NAME = \"COMPOSITE\";\r\n+\r\n+    private Set<DynamicConfiguration> configurations = new HashSet<>();\r\n+\r\n+    public void addConfiguration(DynamicConfiguration configuration) {\r\n+        if (configuration != null) {\r\n+            this.configurations.add(configuration);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void addListener(String key, String group, ConfigurationListener listener) {\r\n+        iterateListenerOperation(configuration -> configuration.addListener(key, group, listener));\r\n+    }\r\n+\r\n+    @Override\r\n+    public void removeListener(String key, String group, ConfigurationListener listener) {\r\n+        iterateListenerOperation(configuration -> configuration.removeListener(key, group, listener));\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getConfig(String key, String group, long timeout) throws IllegalStateException {\r\n+        return (String) iterateConfigOperation(configuration -> configuration.getConfig(key, group, timeout));\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getProperties(String key, String group, long timeout) throws IllegalStateException {\r\n+        return (String) iterateConfigOperation(configuration -> configuration.getProperties(key, group, timeout));\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getInternalProperty(String key) {\r\n+        return iterateConfigOperation(configuration -> configuration.getInternalProperty(key));\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean publishConfig(String key, String group, String content) throws UnsupportedOperationException {\r\n+        boolean publishedAll = true;\r\n+        for (DynamicConfiguration configuration : configurations) {\r\n+            if (!configuration.publishConfig(key, group, content)) {\r\n+                publishedAll = false;\r\n+            }\r\n+        }\r\n+        return publishedAll;\r\n+    }\r\n+\r\n+    @Override\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public SortedSet<String> getConfigKeys(String group) throws UnsupportedOperationException {\r\n+        return (SortedSet<String>) iterateConfigOperation(configuration -> configuration.getConfigKeys(group));\r\n+    }\r\n+\r\n+    private void iterateListenerOperation(Consumer<DynamicConfiguration> consumer) {\r\n+        for (DynamicConfiguration configuration : configurations) {\r\n+            consumer.accept(configuration);\r\n+        }\r\n+    }\r\n+\r\n+    private Object iterateConfigOperation(Function<DynamicConfiguration, Object> func) {\r\n+        Object value = null;\r\n+        for (DynamicConfiguration configuration : configurations) {\r\n+            value = func.apply(configuration);\r\n+            if (value != null) {\r\n+                break;\r\n+            }\r\n+        }\r\n+        return value;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/constants/CommonConstants.java", "source2": "org/apache/dubbo/common/constants/CommonConstants.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,393 +1,393 @@\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.common.constants;\n-\n-import org.apache.dubbo.common.URL;\n-\n-import java.net.NetworkInterface;\n-import java.util.Properties;\n-import java.util.concurrent.ExecutorService;\n-import java.util.regex.Pattern;\n-\n-public interface CommonConstants {\n-    String DUBBO = \"dubbo\";\n-\n-    String PROVIDER = \"provider\";\n-\n-    String CONSUMER = \"consumer\";\n-\n-    String APPLICATION_KEY = \"application\";\n-\n-    String REMOTE_APPLICATION_KEY = \"remote.application\";\n-\n-    String ENABLED_KEY = \"enabled\";\n-\n-    String DISABLED_KEY = \"disabled\";\n-\n-    String DUBBO_PROPERTIES_KEY = \"dubbo.properties.file\";\n-\n-    String DEFAULT_DUBBO_PROPERTIES = \"dubbo.properties\";\n-\n-    String ANY_VALUE = \"*\";\n-\n-    /**\n-     * @since 2.7.8\n-     */\n-    char COMMA_SEPARATOR_CHAR = ',';\n-\n-    String COMMA_SEPARATOR = \",\";\n-\n-    String DOT_SEPARATOR = \".\";\n-\n-    Pattern COMMA_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[,]+\\\\s*\");\n-\n-    String PATH_SEPARATOR = \"/\";\n-\n-    String PROTOCOL_SEPARATOR = \"://\";\n-\n-    String PROTOCOL_SEPARATOR_ENCODED = URL.encode(PROTOCOL_SEPARATOR);\n-\n-    String REGISTRY_SEPARATOR = \"|\";\n-\n-    Pattern REGISTRY_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[|;]+\\\\s*\");\n-\n-    Pattern D_REGISTRY_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[|]+\\\\s*\");\n-\n-    String SEMICOLON_SEPARATOR = \";\";\n-\n-    Pattern SEMICOLON_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[;]+\\\\s*\");\n-\n-    Pattern EQUAL_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[=]+\\\\s*\");\n-\n-    Pattern COLON_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[:]+\\\\s*\");\n-\n-    String DEFAULT_PROXY = \"javassist\";\n-\n-    String DEFAULT_DIRECTORY = \"dubbo\";\n-\n-    String PROTOCOL_KEY = \"protocol\";\n-\n-    String DEFAULT_PROTOCOL = \"dubbo\";\n-\n-    String DEFAULT_THREAD_NAME = \"Dubbo\";\n-\n-    int DEFAULT_CORE_THREADS = 0;\n-\n-    int DEFAULT_THREADS = 200;\n-\n-    String EXECUTOR_SERVICE_COMPONENT_KEY = ExecutorService.class.getName();\n-\n-    String THREADPOOL_KEY = \"threadpool\";\n-\n-    String THREAD_NAME_KEY = \"threadname\";\n-\n-    String CORE_THREADS_KEY = \"corethreads\";\n-\n-    String THREADS_KEY = \"threads\";\n-\n-    String QUEUES_KEY = \"queues\";\n-\n-    String ALIVE_KEY = \"alive\";\n-\n-    String DEFAULT_THREADPOOL = \"limited\";\n-\n-    String DEFAULT_CLIENT_THREADPOOL = \"cached\";\n-\n-    String IO_THREADS_KEY = \"iothreads\";\n-\n-    String KEEP_ALIVE_KEY = \"keep.alive\";\n-\n-    int DEFAULT_QUEUES = 0;\n-\n-    int DEFAULT_ALIVE = 60 * 1000;\n-\n-    String TIMEOUT_KEY = \"timeout\";\n-\n-    int DEFAULT_TIMEOUT = 1000;\n-\n-    // used by invocation attachments to transfer timeout from Consumer to Provider.\n-    // works as a replacement of TIMEOUT_KEY on wire, which seems to be totally useless in previous releases).\n-    String TIMEOUT_ATTACHMENT_KEY = \"_TO\";\n-\n-    String TIME_COUNTDOWN_KEY = \"timeout-countdown\";\n-\n-    String ENABLE_TIMEOUT_COUNTDOWN_KEY = \"enable-timeout-countdown\";\n-\n-    String REMOVE_VALUE_PREFIX = \"-\";\n-\n-    String PROPERTIES_CHAR_SEPARATOR = \"-\";\n-\n-    String UNDERLINE_SEPARATOR = \"_\";\n-\n-    String SEPARATOR_REGEX = \"_|-\";\n-\n-    String GROUP_CHAR_SEPARATOR = \":\";\n-\n-    String HIDDEN_KEY_PREFIX = \".\";\n-\n-    String DOT_REGEX = \"\\\\.\";\n-\n-    String DEFAULT_KEY_PREFIX = \"default.\";\n-\n-    String DEFAULT_KEY = \"default\";\n-\n-    String PREFERRED_KEY = \"preferred\";\n-\n-    /**\n-     * Default timeout value in milliseconds for server shutdown\n-     */\n-    int DEFAULT_SERVER_SHUTDOWN_TIMEOUT = 10000;\n-\n-    String SIDE_KEY = \"side\";\n-\n-    String PROVIDER_SIDE = \"provider\";\n-\n-    String CONSUMER_SIDE = \"consumer\";\n-\n-    String ANYHOST_KEY = \"anyhost\";\n-\n-    String ANYHOST_VALUE = \"0.0.0.0\";\n-\n-    String LOCALHOST_KEY = \"localhost\";\n-\n-    String LOCALHOST_VALUE = \"127.0.0.1\";\n-\n-    String METHODS_KEY = \"methods\";\n-\n-    String METHOD_KEY = \"method\";\n-\n-    String PID_KEY = \"pid\";\n-\n-    String TIMESTAMP_KEY = \"timestamp\";\n-\n-    String GROUP_KEY = \"group\";\n-\n-    String PATH_KEY = \"path\";\n-\n-    String INTERFACE_KEY = \"interface\";\n-\n-    String FILE_KEY = \"file\";\n-\n-    String DUMP_DIRECTORY = \"dump.directory\";\n-\n-    String CLASSIFIER_KEY = \"classifier\";\n-\n-    String VERSION_KEY = \"version\";\n-\n-    String REVISION_KEY = \"revision\";\n-\n-    String METADATA_KEY = \"metadata-type\";\n-\n-    String MAPPING_KEY = \"mapping-type\";\n-\n-    String CONFIG_MAPPING_TYPE = \"config\";\n-\n-    String METADATA_MAPPING_TYPE = \"metadata\";\n-\n-    String DEFAULT_METADATA_STORAGE_TYPE = \"local\";\n-\n-    String REMOTE_METADATA_STORAGE_TYPE = \"remote\";\n-\n-    /**\n-     * The composite metadata storage type includes {@link #DEFAULT_METADATA_STORAGE_TYPE \"local\"} and\n-     * {@link #REMOTE_METADATA_STORAGE_TYPE \"remote\"}.\n-     *\n-     * @since 2.7.8\n-     */\n-    String COMPOSITE_METADATA_STORAGE_TYPE = \"composite\";\n-\n-    /**\n-     * Consumer side 's proxy class\n-     */\n-    String PROXY_CLASS_REF = \"refClass\";\n-\n-    /**\n-     * generic call\n-     */\n-    String $INVOKE = \"$invoke\";\n-    String $INVOKE_ASYNC = \"$invokeAsync\";\n-    String GENERIC_PARAMETER_DESC = \"Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/Object;\";\n-\n-    /**\n-     * package version in the manifest\n-     */\n-    String RELEASE_KEY = \"release\";\n-\n-    int MAX_PROXY_COUNT = 65535;\n-\n-    String MONITOR_KEY = \"monitor\";\n-    String CLUSTER_KEY = \"cluster\";\n-    String USERNAME_KEY = \"username\";\n-    String PASSWORD_KEY = \"password\";\n-    String HOST_KEY = \"host\";\n-    String PORT_KEY = \"port\";\n-    String DUBBO_IP_TO_BIND = \"DUBBO_IP_TO_BIND\";\n-\n-    /**\n-     * The property name for {@link NetworkInterface#getDisplayName() the name of network interface} that\n-     * the Dubbo application prefers\n-     *\n-     * @since 2.7.6\n-     */\n-    String DUBBO_PREFERRED_NETWORK_INTERFACE = \"dubbo.network.interface.preferred\";\n-\n-    @Deprecated\n-    String SHUTDOWN_WAIT_SECONDS_KEY = \"dubbo.service.shutdown.wait.seconds\";\n-    String SHUTDOWN_WAIT_KEY = \"dubbo.service.shutdown.wait\";\n-    String DUBBO_PROTOCOL = \"dubbo\";\n-\n-    String DUBBO_LABELS = \"dubbo.labels\";\n-    String DUBBO_ENV_KEYS = \"dubbo.env.keys\";\n-\n-    String CONFIG_CONFIGFILE_KEY = \"config-file\";\n-    String CONFIG_ENABLE_KEY = \"highest-priority\";\n-    String CONFIG_NAMESPACE_KEY = \"namespace\";\n-    String CHECK_KEY = \"check\";\n-\n-    String BACKLOG_KEY = \"backlog\";\n-\n-    String HEARTBEAT_EVENT = null;\n-    String MOCK_HEARTBEAT_EVENT = \"H\";\n-    String READONLY_EVENT = \"R\";\n-\n-    String REFERENCE_FILTER_KEY = \"reference.filter\";\n-\n-    String INVOKER_LISTENER_KEY = \"invoker.listener\";\n-\n-    String DUBBO_VERSION_KEY = \"dubbo\";\n-\n-    String TAG_KEY = \"dubbo.tag\";\n-\n-    /**\n-     * To decide whether to make connection when the client is created\n-     */\n-    String LAZY_CONNECT_KEY = \"lazy\";\n-\n-    String STUB_EVENT_KEY = \"dubbo.stub.event\";\n-\n-    String REFERENCE_INTERCEPTOR_KEY = \"reference.interceptor\";\n-\n-    String SERVICE_FILTER_KEY = \"service.filter\";\n-\n-    String EXPORTER_LISTENER_KEY = \"exporter.listener\";\n-\n-    String METRICS_PORT = \"metrics.port\";\n-\n-    String METRICS_PROTOCOL = \"metrics.protocol\";\n-\n-    /**\n-     * After simplify the registry, should add some parameter individually for provider.\n-     *\n-     * @since 2.7.0\n-     */\n-    String EXTRA_KEYS_KEY = \"extra-keys\";\n-\n-    String GENERIC_SERIALIZATION_NATIVE_JAVA = \"nativejava\";\n-\n-    String GENERIC_SERIALIZATION_DEFAULT = \"true\";\n-\n-    String GENERIC_SERIALIZATION_BEAN = \"bean\";\n-\n-    String GENERIC_RAW_RETURN = \"raw.return\";\n-\n-    String GENERIC_SERIALIZATION_PROTOBUF = \"protobuf-json\";\n-\n-    String GENERIC_WITH_CLZ_KEY = \"generic.include.class\";\n-\n-    /**\n-     * The limit of callback service instances for one interface on every client\n-     */\n-    String CALLBACK_INSTANCES_LIMIT_KEY = \"callbacks\";\n-\n-    /**\n-     * The default limit number for callback service instances\n-     *\n-     * @see #CALLBACK_INSTANCES_LIMIT_KEY\n-     */\n-    int DEFAULT_CALLBACK_INSTANCES = 1;\n-\n-    String LOADBALANCE_KEY = \"loadbalance\";\n-\n-    String DEFAULT_LOADBALANCE = \"random\";\n-\n-    String RETRIES_KEY = \"retries\";\n-\n-    String FORKS_KEY = \"forks\";\n-\n-    int DEFAULT_RETRIES = 2;\n-\n-    int DEFAULT_FAILBACK_TIMES = 3;\n-\n-    String REGISTER_KEY = \"register\";\n-\n-    String INTERFACES = \"interfaces\";\n-\n-    String SSL_ENABLED_KEY = \"ssl-enabled\";\n-\n-    String SERVICE_PATH_PREFIX = \"service.path.prefix\";\n-\n-    String PROTOCOL_SERVER_SERVLET = \"servlet\";\n-\n-    String PROTOCOL_SERVER = \"server\";\n-\n-    /**\n-     * The parameter key for the class path of the ServiceNameMapping {@link Properties} file\n-     *\n-     * @since 2.7.8\n-     */\n-    String SERVICE_NAME_MAPPING_PROPERTIES_FILE_KEY = \"service-name-mapping.properties-path\";\n-\n-    /**\n-     * The default class path of the ServiceNameMapping {@link Properties} file\n-     *\n-     * @since 2.7.8\n-     */\n-    String DEFAULT_SERVICE_NAME_MAPPING_PROPERTIES_PATH = \"META-INF/dubbo/service-name-mapping.properties\";\n-\n-    String REDIS_CLIENT_KEY = \"redis-client\";\n-\n-    String MONO_REDIS = \"mono\";\n-\n-    String SENTINEL_REDIS = \"sentinel\";\n-\n-    String CLUSTER_REDIS = \"cluster\";\n-\n-    /** Pseudo URL prefix for loading from the class path: \"classpath:\". */\n-    String CLASSPATH_URL_PREFIX = \"classpath:\";\n-\n-    String DEFAULT_VERSION = \"0.0.0\";\n-\n-    String CLASS_DESERIALIZE_BLOCK_ALL = \"dubbo.security.serialize.blockAllClassExceptAllow\";\n-\n-    String CLASS_DESERIALIZE_ALLOWED_LIST = \"dubbo.security.serialize.allowedClassList\";\n-\n-    String CLASS_DESERIALIZE_BLOCKED_LIST = \"dubbo.security.serialize.blockedClassList\";\n-\n-    String ENABLE_NATIVE_JAVA_GENERIC_SERIALIZE = \"dubbo.security.serialize.generic.native-java-enable\";\n-\n-    String SERIALIZE_BLOCKED_LIST_FILE_PATH = \"security/serialize.blockedlist\";\n-\n-\n-    /**\n-     *  Interface configuration item\n-     * @since 2.7.10\n-     */\n-    String ON_CONNECT_KEY = \"onconnect\";\n-\n-    String ON_DISCONNECT_KEY = \"ondisconnect\";\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.common.constants;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+\r\n+import java.net.NetworkInterface;\r\n+import java.util.Properties;\r\n+import java.util.concurrent.ExecutorService;\r\n+import java.util.regex.Pattern;\r\n+\r\n+public interface CommonConstants {\r\n+    String DUBBO = \"dubbo\";\r\n+\r\n+    String PROVIDER = \"provider\";\r\n+\r\n+    String CONSUMER = \"consumer\";\r\n+\r\n+    String APPLICATION_KEY = \"application\";\r\n+\r\n+    String REMOTE_APPLICATION_KEY = \"remote.application\";\r\n+\r\n+    String ENABLED_KEY = \"enabled\";\r\n+\r\n+    String DISABLED_KEY = \"disabled\";\r\n+\r\n+    String DUBBO_PROPERTIES_KEY = \"dubbo.properties.file\";\r\n+\r\n+    String DEFAULT_DUBBO_PROPERTIES = \"dubbo.properties\";\r\n+\r\n+    String ANY_VALUE = \"*\";\r\n+\r\n+    /**\r\n+     * @since 2.7.8\r\n+     */\r\n+    char COMMA_SEPARATOR_CHAR = ',';\r\n+\r\n+    String COMMA_SEPARATOR = \",\";\r\n+\r\n+    String DOT_SEPARATOR = \".\";\r\n+\r\n+    Pattern COMMA_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[,]+\\\\s*\");\r\n+\r\n+    String PATH_SEPARATOR = \"/\";\r\n+\r\n+    String PROTOCOL_SEPARATOR = \"://\";\r\n+\r\n+    String PROTOCOL_SEPARATOR_ENCODED = URL.encode(PROTOCOL_SEPARATOR);\r\n+\r\n+    String REGISTRY_SEPARATOR = \"|\";\r\n+\r\n+    Pattern REGISTRY_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[|;]+\\\\s*\");\r\n+\r\n+    Pattern D_REGISTRY_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[|]+\\\\s*\");\r\n+\r\n+    String SEMICOLON_SEPARATOR = \";\";\r\n+\r\n+    Pattern SEMICOLON_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[;]+\\\\s*\");\r\n+\r\n+    Pattern EQUAL_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[=]+\\\\s*\");\r\n+\r\n+    Pattern COLON_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[:]+\\\\s*\");\r\n+\r\n+    String DEFAULT_PROXY = \"javassist\";\r\n+\r\n+    String DEFAULT_DIRECTORY = \"dubbo\";\r\n+\r\n+    String PROTOCOL_KEY = \"protocol\";\r\n+\r\n+    String DEFAULT_PROTOCOL = \"dubbo\";\r\n+\r\n+    String DEFAULT_THREAD_NAME = \"Dubbo\";\r\n+\r\n+    int DEFAULT_CORE_THREADS = 0;\r\n+\r\n+    int DEFAULT_THREADS = 200;\r\n+\r\n+    String EXECUTOR_SERVICE_COMPONENT_KEY = ExecutorService.class.getName();\r\n+\r\n+    String THREADPOOL_KEY = \"threadpool\";\r\n+\r\n+    String THREAD_NAME_KEY = \"threadname\";\r\n+\r\n+    String CORE_THREADS_KEY = \"corethreads\";\r\n+\r\n+    String THREADS_KEY = \"threads\";\r\n+\r\n+    String QUEUES_KEY = \"queues\";\r\n+\r\n+    String ALIVE_KEY = \"alive\";\r\n+\r\n+    String DEFAULT_THREADPOOL = \"limited\";\r\n+\r\n+    String DEFAULT_CLIENT_THREADPOOL = \"cached\";\r\n+\r\n+    String IO_THREADS_KEY = \"iothreads\";\r\n+\r\n+    String KEEP_ALIVE_KEY = \"keep.alive\";\r\n+\r\n+    int DEFAULT_QUEUES = 0;\r\n+\r\n+    int DEFAULT_ALIVE = 60 * 1000;\r\n+\r\n+    String TIMEOUT_KEY = \"timeout\";\r\n+\r\n+    int DEFAULT_TIMEOUT = 1000;\r\n+\r\n+    // used by invocation attachments to transfer timeout from Consumer to Provider.\r\n+    // works as a replacement of TIMEOUT_KEY on wire, which seems to be totally useless in previous releases).\r\n+    String TIMEOUT_ATTACHMENT_KEY = \"_TO\";\r\n+\r\n+    String TIME_COUNTDOWN_KEY = \"timeout-countdown\";\r\n+\r\n+    String ENABLE_TIMEOUT_COUNTDOWN_KEY = \"enable-timeout-countdown\";\r\n+\r\n+    String REMOVE_VALUE_PREFIX = \"-\";\r\n+\r\n+    String PROPERTIES_CHAR_SEPARATOR = \"-\";\r\n+\r\n+    String UNDERLINE_SEPARATOR = \"_\";\r\n+\r\n+    String SEPARATOR_REGEX = \"_|-\";\r\n+\r\n+    String GROUP_CHAR_SEPARATOR = \":\";\r\n+\r\n+    String HIDDEN_KEY_PREFIX = \".\";\r\n+\r\n+    String DOT_REGEX = \"\\\\.\";\r\n+\r\n+    String DEFAULT_KEY_PREFIX = \"default.\";\r\n+\r\n+    String DEFAULT_KEY = \"default\";\r\n+\r\n+    String PREFERRED_KEY = \"preferred\";\r\n+\r\n+    /**\r\n+     * Default timeout value in milliseconds for server shutdown\r\n+     */\r\n+    int DEFAULT_SERVER_SHUTDOWN_TIMEOUT = 10000;\r\n+\r\n+    String SIDE_KEY = \"side\";\r\n+\r\n+    String PROVIDER_SIDE = \"provider\";\r\n+\r\n+    String CONSUMER_SIDE = \"consumer\";\r\n+\r\n+    String ANYHOST_KEY = \"anyhost\";\r\n+\r\n+    String ANYHOST_VALUE = \"0.0.0.0\";\r\n+\r\n+    String LOCALHOST_KEY = \"localhost\";\r\n+\r\n+    String LOCALHOST_VALUE = \"127.0.0.1\";\r\n+\r\n+    String METHODS_KEY = \"methods\";\r\n+\r\n+    String METHOD_KEY = \"method\";\r\n+\r\n+    String PID_KEY = \"pid\";\r\n+\r\n+    String TIMESTAMP_KEY = \"timestamp\";\r\n+\r\n+    String GROUP_KEY = \"group\";\r\n+\r\n+    String PATH_KEY = \"path\";\r\n+\r\n+    String INTERFACE_KEY = \"interface\";\r\n+\r\n+    String FILE_KEY = \"file\";\r\n+\r\n+    String DUMP_DIRECTORY = \"dump.directory\";\r\n+\r\n+    String CLASSIFIER_KEY = \"classifier\";\r\n+\r\n+    String VERSION_KEY = \"version\";\r\n+\r\n+    String REVISION_KEY = \"revision\";\r\n+\r\n+    String METADATA_KEY = \"metadata-type\";\r\n+\r\n+    String MAPPING_KEY = \"mapping-type\";\r\n+\r\n+    String CONFIG_MAPPING_TYPE = \"config\";\r\n+\r\n+    String METADATA_MAPPING_TYPE = \"metadata\";\r\n+\r\n+    String DEFAULT_METADATA_STORAGE_TYPE = \"local\";\r\n+\r\n+    String REMOTE_METADATA_STORAGE_TYPE = \"remote\";\r\n+\r\n+    /**\r\n+     * The composite metadata storage type includes {@link #DEFAULT_METADATA_STORAGE_TYPE \"local\"} and\r\n+     * {@link #REMOTE_METADATA_STORAGE_TYPE \"remote\"}.\r\n+     *\r\n+     * @since 2.7.8\r\n+     */\r\n+    String COMPOSITE_METADATA_STORAGE_TYPE = \"composite\";\r\n+\r\n+    /**\r\n+     * Consumer side 's proxy class\r\n+     */\r\n+    String PROXY_CLASS_REF = \"refClass\";\r\n+\r\n+    /**\r\n+     * generic call\r\n+     */\r\n+    String $INVOKE = \"$invoke\";\r\n+    String $INVOKE_ASYNC = \"$invokeAsync\";\r\n+    String GENERIC_PARAMETER_DESC = \"Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/Object;\";\r\n+\r\n+    /**\r\n+     * package version in the manifest\r\n+     */\r\n+    String RELEASE_KEY = \"release\";\r\n+\r\n+    int MAX_PROXY_COUNT = 65535;\r\n+\r\n+    String MONITOR_KEY = \"monitor\";\r\n+    String CLUSTER_KEY = \"cluster\";\r\n+    String USERNAME_KEY = \"username\";\r\n+    String PASSWORD_KEY = \"password\";\r\n+    String HOST_KEY = \"host\";\r\n+    String PORT_KEY = \"port\";\r\n+    String DUBBO_IP_TO_BIND = \"DUBBO_IP_TO_BIND\";\r\n+\r\n+    /**\r\n+     * The property name for {@link NetworkInterface#getDisplayName() the name of network interface} that\r\n+     * the Dubbo application prefers\r\n+     *\r\n+     * @since 2.7.6\r\n+     */\r\n+    String DUBBO_PREFERRED_NETWORK_INTERFACE = \"dubbo.network.interface.preferred\";\r\n+\r\n+    @Deprecated\r\n+    String SHUTDOWN_WAIT_SECONDS_KEY = \"dubbo.service.shutdown.wait.seconds\";\r\n+    String SHUTDOWN_WAIT_KEY = \"dubbo.service.shutdown.wait\";\r\n+    String DUBBO_PROTOCOL = \"dubbo\";\r\n+\r\n+    String DUBBO_LABELS = \"dubbo.labels\";\r\n+    String DUBBO_ENV_KEYS = \"dubbo.env.keys\";\r\n+\r\n+    String CONFIG_CONFIGFILE_KEY = \"config-file\";\r\n+    String CONFIG_ENABLE_KEY = \"highest-priority\";\r\n+    String CONFIG_NAMESPACE_KEY = \"namespace\";\r\n+    String CHECK_KEY = \"check\";\r\n+\r\n+    String BACKLOG_KEY = \"backlog\";\r\n+\r\n+    String HEARTBEAT_EVENT = null;\r\n+    String MOCK_HEARTBEAT_EVENT = \"H\";\r\n+    String READONLY_EVENT = \"R\";\r\n+\r\n+    String REFERENCE_FILTER_KEY = \"reference.filter\";\r\n+\r\n+    String INVOKER_LISTENER_KEY = \"invoker.listener\";\r\n+\r\n+    String DUBBO_VERSION_KEY = \"dubbo\";\r\n+\r\n+    String TAG_KEY = \"dubbo.tag\";\r\n+\r\n+    /**\r\n+     * To decide whether to make connection when the client is created\r\n+     */\r\n+    String LAZY_CONNECT_KEY = \"lazy\";\r\n+\r\n+    String STUB_EVENT_KEY = \"dubbo.stub.event\";\r\n+\r\n+    String REFERENCE_INTERCEPTOR_KEY = \"reference.interceptor\";\r\n+\r\n+    String SERVICE_FILTER_KEY = \"service.filter\";\r\n+\r\n+    String EXPORTER_LISTENER_KEY = \"exporter.listener\";\r\n+\r\n+    String METRICS_PORT = \"metrics.port\";\r\n+\r\n+    String METRICS_PROTOCOL = \"metrics.protocol\";\r\n+\r\n+    /**\r\n+     * After simplify the registry, should add some parameter individually for provider.\r\n+     *\r\n+     * @since 2.7.0\r\n+     */\r\n+    String EXTRA_KEYS_KEY = \"extra-keys\";\r\n+\r\n+    String GENERIC_SERIALIZATION_NATIVE_JAVA = \"nativejava\";\r\n+\r\n+    String GENERIC_SERIALIZATION_DEFAULT = \"true\";\r\n+\r\n+    String GENERIC_SERIALIZATION_BEAN = \"bean\";\r\n+\r\n+    String GENERIC_RAW_RETURN = \"raw.return\";\r\n+\r\n+    String GENERIC_SERIALIZATION_PROTOBUF = \"protobuf-json\";\r\n+\r\n+    String GENERIC_WITH_CLZ_KEY = \"generic.include.class\";\r\n+\r\n+    /**\r\n+     * The limit of callback service instances for one interface on every client\r\n+     */\r\n+    String CALLBACK_INSTANCES_LIMIT_KEY = \"callbacks\";\r\n+\r\n+    /**\r\n+     * The default limit number for callback service instances\r\n+     *\r\n+     * @see #CALLBACK_INSTANCES_LIMIT_KEY\r\n+     */\r\n+    int DEFAULT_CALLBACK_INSTANCES = 1;\r\n+\r\n+    String LOADBALANCE_KEY = \"loadbalance\";\r\n+\r\n+    String DEFAULT_LOADBALANCE = \"random\";\r\n+\r\n+    String RETRIES_KEY = \"retries\";\r\n+\r\n+    String FORKS_KEY = \"forks\";\r\n+\r\n+    int DEFAULT_RETRIES = 2;\r\n+\r\n+    int DEFAULT_FAILBACK_TIMES = 3;\r\n+\r\n+    String REGISTER_KEY = \"register\";\r\n+\r\n+    String INTERFACES = \"interfaces\";\r\n+\r\n+    String SSL_ENABLED_KEY = \"ssl-enabled\";\r\n+\r\n+    String SERVICE_PATH_PREFIX = \"service.path.prefix\";\r\n+\r\n+    String PROTOCOL_SERVER_SERVLET = \"servlet\";\r\n+\r\n+    String PROTOCOL_SERVER = \"server\";\r\n+\r\n+    /**\r\n+     * The parameter key for the class path of the ServiceNameMapping {@link Properties} file\r\n+     *\r\n+     * @since 2.7.8\r\n+     */\r\n+    String SERVICE_NAME_MAPPING_PROPERTIES_FILE_KEY = \"service-name-mapping.properties-path\";\r\n+\r\n+    /**\r\n+     * The default class path of the ServiceNameMapping {@link Properties} file\r\n+     *\r\n+     * @since 2.7.8\r\n+     */\r\n+    String DEFAULT_SERVICE_NAME_MAPPING_PROPERTIES_PATH = \"META-INF/dubbo/service-name-mapping.properties\";\r\n+\r\n+    String REDIS_CLIENT_KEY = \"redis-client\";\r\n+\r\n+    String MONO_REDIS = \"mono\";\r\n+\r\n+    String SENTINEL_REDIS = \"sentinel\";\r\n+\r\n+    String CLUSTER_REDIS = \"cluster\";\r\n+\r\n+    /** Pseudo URL prefix for loading from the class path: \"classpath:\". */\r\n+    String CLASSPATH_URL_PREFIX = \"classpath:\";\r\n+\r\n+    String DEFAULT_VERSION = \"0.0.0\";\r\n+\r\n+    String CLASS_DESERIALIZE_BLOCK_ALL = \"dubbo.security.serialize.blockAllClassExceptAllow\";\r\n+\r\n+    String CLASS_DESERIALIZE_ALLOWED_LIST = \"dubbo.security.serialize.allowedClassList\";\r\n+\r\n+    String CLASS_DESERIALIZE_BLOCKED_LIST = \"dubbo.security.serialize.blockedClassList\";\r\n+\r\n+    String ENABLE_NATIVE_JAVA_GENERIC_SERIALIZE = \"dubbo.security.serialize.generic.native-java-enable\";\r\n+\r\n+    String SERIALIZE_BLOCKED_LIST_FILE_PATH = \"security/serialize.blockedlist\";\r\n+\r\n+\r\n+    /**\r\n+     *  Interface configuration item\r\n+     * @since 2.7.10\r\n+     */\r\n+    String ON_CONNECT_KEY = \"onconnect\";\r\n+\r\n+    String ON_DISCONNECT_KEY = \"ondisconnect\";\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/constants/FilterConstants.java", "source2": "org/apache/dubbo/common/constants/FilterConstants.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,24 +1,24 @@\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.common.constants;\n-\n-public interface FilterConstants {\n-    String CACHE_KEY = \"cache\";\n-\n-    String VALIDATION_KEY = \"validation\";\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.common.constants;\r\n+\r\n+public interface FilterConstants {\r\n+    String CACHE_KEY = \"cache\";\r\n+\r\n+    String VALIDATION_KEY = \"validation\";\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/constants/QosConstants.java", "source2": "org/apache/dubbo/common/constants/QosConstants.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,32 +1,32 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-\n-package org.apache.dubbo.common.constants;\n-\n-/**\n- * QosConstants\n- */\n-public interface QosConstants {\n-\n-    String QOS_ENABLE = \"qos.enable\";\n-\n-    String QOS_HOST = \"qos.host\";\n-\n-    String QOS_PORT = \"qos.port\";\n-\n-    String ACCEPT_FOREIGN_IP = \"qos.accept.foreign.ip\";\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.common.constants;\r\n+\r\n+/**\r\n+ * QosConstants\r\n+ */\r\n+public interface QosConstants {\r\n+\r\n+    String QOS_ENABLE = \"qos.enable\";\r\n+\r\n+    String QOS_HOST = \"qos.host\";\r\n+\r\n+    String QOS_PORT = \"qos.port\";\r\n+\r\n+    String ACCEPT_FOREIGN_IP = \"qos.accept.foreign.ip\";\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/constants/RegistryConstants.java", "source2": "org/apache/dubbo/common/constants/RegistryConstants.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,122 +1,122 @@\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.common.constants;\n-\n-public interface RegistryConstants {\n-\n-    String REGISTRY_KEY = \"registry\";\n-\n-    String REGISTRY_CLUSTER_KEY = \"REGISTRY_CLUSTER\";\n-\n-    String REGISTRY_CLUSTER = \"REGISTRY_CLUSTER\";\n-\n-    String REGISTRY_CLUSTER_TYPE_KEY = \"registry-cluster-type\";\n-\n-    String REGISTRY_PROTOCOL = \"registry\";\n-\n-    String DYNAMIC_KEY = \"dynamic\";\n-\n-    String CATEGORY_KEY = \"category\";\n-\n-    String PROVIDERS_CATEGORY = \"providers\";\n-\n-    String CONSUMERS_CATEGORY = \"consumers\";\n-\n-    String ROUTERS_CATEGORY = \"routers\";\n-\n-    String DYNAMIC_ROUTERS_CATEGORY = \"dynamicrouters\";\n-\n-    String DEFAULT_CATEGORY = PROVIDERS_CATEGORY;\n-\n-    String CONFIGURATORS_CATEGORY = \"configurators\";\n-\n-    String DYNAMIC_CONFIGURATORS_CATEGORY = \"dynamicconfigurators\";\n-\n-    String APP_DYNAMIC_CONFIGURATORS_CATEGORY = \"appdynamicconfigurators\";\n-\n-    String ROUTERS_SUFFIX = \".routers\";\n-\n-    String EMPTY_PROTOCOL = \"empty\";\n-\n-    String ROUTE_PROTOCOL = \"route\";\n-\n-    String OVERRIDE_PROTOCOL = \"override\";\n-\n-    String COMPATIBLE_CONFIG_KEY = \"compatible_config\";\n-\n-    String REGISTRY_PUBLISH_INTERFACE_KEY = \"publish-interface\";\n-\n-    String DUBBO_PUBLISH_INTERFACE_DEFAULT_KEY = \"dubbo.application.publish-interface\";\n-    /**\n-     * The parameter key of Dubbo Registry type\n-     *\n-     * @since 2.7.5\n-     */\n-    String REGISTRY_TYPE_KEY = \"registry-type\";\n-\n-    /**\n-     * The parameter value of Service-Oriented Registry type\n-     *\n-     * @since 2.7.5\n-     */\n-    String SERVICE_REGISTRY_TYPE = \"service\";\n-\n-    /**\n-     * The protocol for Service Discovery\n-     *\n-     * @since 2.7.5\n-     */\n-    String SERVICE_REGISTRY_PROTOCOL = \"service-discovery-registry\";\n-\n-    /**\n-     * The parameter key of the subscribed service names for Service-Oriented Registry\n-     * <p>\n-     * If there is a multiple-values, the  \"comma\" is the separator.\n-     *\n-     * @since 2.7.5\n-     */\n-    String SUBSCRIBED_SERVICE_NAMES_KEY = \"subscribed-services\";\n-\n-    String PROVIDED_BY = \"provided-by\";\n-\n-    /**\n-     * The request size of service instances\n-     *\n-     * @since 2.7.5\n-     */\n-    String INSTANCES_REQUEST_SIZE_KEY = \"instances-request-size\";\n-\n-    /**\n-     * The default request size of service instances\n-     */\n-    int DEFAULT_INSTANCES_REQUEST_SIZE = 100;\n-\n-    String ACCEPTS_KEY = \"accepts\";\n-\n-    String REGISTRY_ZONE = \"registry_zone\";\n-    String REGISTRY_ZONE_FORCE = \"registry_zone_force\";\n-    String ZONE_KEY = \"zone\";\n-\n-    String REGISTRY_SERVICE_REFERENCE_PATH = \"org.apache.dubbo.registry.RegistryService\";\n-\n-    String INIT = \"INIT\";\n-\n-    String MIGRATION_MULTI_REGISTRY = \"MIGRATION_MULTI_REGISTRY\";\n-\n-    String LOADBALANCE_AMONG_REGISTRIES = \"random\";\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.common.constants;\r\n+\r\n+public interface RegistryConstants {\r\n+\r\n+    String REGISTRY_KEY = \"registry\";\r\n+\r\n+    String REGISTRY_CLUSTER_KEY = \"REGISTRY_CLUSTER\";\r\n+\r\n+    String REGISTRY_CLUSTER = \"REGISTRY_CLUSTER\";\r\n+\r\n+    String REGISTRY_CLUSTER_TYPE_KEY = \"registry-cluster-type\";\r\n+\r\n+    String REGISTRY_PROTOCOL = \"registry\";\r\n+\r\n+    String DYNAMIC_KEY = \"dynamic\";\r\n+\r\n+    String CATEGORY_KEY = \"category\";\r\n+\r\n+    String PROVIDERS_CATEGORY = \"providers\";\r\n+\r\n+    String CONSUMERS_CATEGORY = \"consumers\";\r\n+\r\n+    String ROUTERS_CATEGORY = \"routers\";\r\n+\r\n+    String DYNAMIC_ROUTERS_CATEGORY = \"dynamicrouters\";\r\n+\r\n+    String DEFAULT_CATEGORY = PROVIDERS_CATEGORY;\r\n+\r\n+    String CONFIGURATORS_CATEGORY = \"configurators\";\r\n+\r\n+    String DYNAMIC_CONFIGURATORS_CATEGORY = \"dynamicconfigurators\";\r\n+\r\n+    String APP_DYNAMIC_CONFIGURATORS_CATEGORY = \"appdynamicconfigurators\";\r\n+\r\n+    String ROUTERS_SUFFIX = \".routers\";\r\n+\r\n+    String EMPTY_PROTOCOL = \"empty\";\r\n+\r\n+    String ROUTE_PROTOCOL = \"route\";\r\n+\r\n+    String OVERRIDE_PROTOCOL = \"override\";\r\n+\r\n+    String COMPATIBLE_CONFIG_KEY = \"compatible_config\";\r\n+\r\n+    String REGISTRY_PUBLISH_INTERFACE_KEY = \"publish-interface\";\r\n+\r\n+    String DUBBO_PUBLISH_INTERFACE_DEFAULT_KEY = \"dubbo.application.publish-interface\";\r\n+    /**\r\n+     * The parameter key of Dubbo Registry type\r\n+     *\r\n+     * @since 2.7.5\r\n+     */\r\n+    String REGISTRY_TYPE_KEY = \"registry-type\";\r\n+\r\n+    /**\r\n+     * The parameter value of Service-Oriented Registry type\r\n+     *\r\n+     * @since 2.7.5\r\n+     */\r\n+    String SERVICE_REGISTRY_TYPE = \"service\";\r\n+\r\n+    /**\r\n+     * The protocol for Service Discovery\r\n+     *\r\n+     * @since 2.7.5\r\n+     */\r\n+    String SERVICE_REGISTRY_PROTOCOL = \"service-discovery-registry\";\r\n+\r\n+    /**\r\n+     * The parameter key of the subscribed service names for Service-Oriented Registry\r\n+     * <p>\r\n+     * If there is a multiple-values, the  \"comma\" is the separator.\r\n+     *\r\n+     * @since 2.7.5\r\n+     */\r\n+    String SUBSCRIBED_SERVICE_NAMES_KEY = \"subscribed-services\";\r\n+\r\n+    String PROVIDED_BY = \"provided-by\";\r\n+\r\n+    /**\r\n+     * The request size of service instances\r\n+     *\r\n+     * @since 2.7.5\r\n+     */\r\n+    String INSTANCES_REQUEST_SIZE_KEY = \"instances-request-size\";\r\n+\r\n+    /**\r\n+     * The default request size of service instances\r\n+     */\r\n+    int DEFAULT_INSTANCES_REQUEST_SIZE = 100;\r\n+\r\n+    String ACCEPTS_KEY = \"accepts\";\r\n+\r\n+    String REGISTRY_ZONE = \"registry_zone\";\r\n+    String REGISTRY_ZONE_FORCE = \"registry_zone_force\";\r\n+    String ZONE_KEY = \"zone\";\r\n+\r\n+    String REGISTRY_SERVICE_REFERENCE_PATH = \"org.apache.dubbo.registry.RegistryService\";\r\n+\r\n+    String INIT = \"INIT\";\r\n+\r\n+    String MIGRATION_MULTI_REGISTRY = \"MIGRATION_MULTI_REGISTRY\";\r\n+\r\n+    String LOADBALANCE_AMONG_REGISTRIES = \"random\";\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/constants/RemotingConstants.java", "source2": "org/apache/dubbo/common/constants/RemotingConstants.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,26 +1,26 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-\n-package org.apache.dubbo.common.constants;\n-\n-/**\n- * RemotingConstants\n- */\n-public interface RemotingConstants {\n-\n-    String BACKUP_KEY = \"backup\";\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.common.constants;\r\n+\r\n+/**\r\n+ * RemotingConstants\r\n+ */\r\n+public interface RemotingConstants {\r\n+\r\n+    String BACKUP_KEY = \"backup\";\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/context/FrameworkExt.java", "source2": "org/apache/dubbo/common/context/FrameworkExt.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,24 +1,24 @@\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.common.context;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-@SPI\n-public interface FrameworkExt extends Lifecycle {\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.common.context;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+@SPI\r\n+public interface FrameworkExt extends Lifecycle {\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/context/Lifecycle.java", "source2": "org/apache/dubbo/common/context/Lifecycle.java", "comments": ["Line-ending 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.common.context;\n-\n-/**\n- * The Lifecycle of Dubbo component\n- *\n- * @since 2.7.5\n- */\n-public interface Lifecycle {\n-\n-    /**\n-     * Initialize the component before {@link #start() start}\n-     *\n-     * @return current {@link Lifecycle}\n-     * @throws IllegalStateException\n-     */\n-    void initialize() throws IllegalStateException;\n-\n-    /**\n-     * Start the component\n-     *\n-     * @return current {@link Lifecycle}\n-     * @throws IllegalStateException\n-     */\n-    void start() throws IllegalStateException;\n-\n-    /**\n-     * Destroy the component\n-     *\n-     * @throws IllegalStateException\n-     */\n-    void destroy() throws IllegalStateException;\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.common.context;\r\n+\r\n+/**\r\n+ * The Lifecycle of Dubbo component\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+public interface Lifecycle {\r\n+\r\n+    /**\r\n+     * Initialize the component before {@link #start() start}\r\n+     *\r\n+     * @return current {@link Lifecycle}\r\n+     * @throws IllegalStateException\r\n+     */\r\n+    void initialize() throws IllegalStateException;\r\n+\r\n+    /**\r\n+     * Start the component\r\n+     *\r\n+     * @return current {@link Lifecycle}\r\n+     * @throws IllegalStateException\r\n+     */\r\n+    void start() throws IllegalStateException;\r\n+\r\n+    /**\r\n+     * Destroy the component\r\n+     *\r\n+     * @throws IllegalStateException\r\n+     */\r\n+    void destroy() throws IllegalStateException;\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/context/LifecycleAdapter.java", "source2": "org/apache/dubbo/common/context/LifecycleAdapter.java", "comments": ["Line-ending 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.common.context;\n-\n-public abstract class LifecycleAdapter implements Lifecycle {\n-\n-    @Override\n-    public void initialize() throws IllegalStateException {\n-\n-    }\n-\n-    @Override\n-    public void start() throws IllegalStateException {\n-\n-    }\n-\n-    @Override\n-    public void destroy() throws IllegalStateException {\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.common.context;\r\n+\r\n+public abstract class LifecycleAdapter implements Lifecycle {\r\n+\r\n+    @Override\r\n+    public void initialize() throws IllegalStateException {\r\n+\r\n+    }\r\n+\r\n+    @Override\r\n+    public void start() throws IllegalStateException {\r\n+\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() throws IllegalStateException {\r\n+\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/Converter.java", "source2": "org/apache/dubbo/common/convert/Converter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,108 +1,108 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.common.convert;\n-\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-import static org.apache.dubbo.common.utils.ClassUtils.isAssignableFrom;\n-import static org.apache.dubbo.common.utils.TypeUtils.findActualTypeArgument;\n-\n-/**\n- * A class to convert the source-typed value to the target-typed value\n- *\n- * @param <S> The source type\n- * @param <T> The target type\n- * @since 2.7.6\n- */\n-@SPI\n-@FunctionalInterface\n-public interface Converter<S, T> extends Prioritized {\n-\n-    /**\n-     * Accept the source type and target type or not\n-     *\n-     * @param sourceType the source type\n-     * @param targetType the target type\n-     * @return if accepted, return <code>true</code>, or <code>false</code>\n-     */\n-    default boolean accept(Class<?> sourceType, Class<?> targetType) {\n-        return isAssignableFrom(sourceType, getSourceType()) && isAssignableFrom(targetType, getTargetType());\n-    }\n-\n-    /**\n-     * Convert the source-typed value to the target-typed value\n-     *\n-     * @param source the source-typed value\n-     * @return the target-typed value\n-     */\n-    T convert(S source);\n-\n-    /**\n-     * Get the source type\n-     *\n-     * @return non-null\n-     */\n-    default Class<S> getSourceType() {\n-        return findActualTypeArgument(getClass(), Converter.class, 0);\n-    }\n-\n-    /**\n-     * Get the target type\n-     *\n-     * @return non-null\n-     */\n-    default Class<T> getTargetType() {\n-        return findActualTypeArgument(getClass(), Converter.class, 1);\n-    }\n-\n-    /**\n-     * Get the Converter instance from {@link ExtensionLoader} with the specified source and target type\n-     *\n-     * @param sourceType the source type\n-     * @param targetType the target type\n-     * @return\n-     * @see ExtensionLoader#getSupportedExtensionInstances()\n-     */\n-    static Converter<?, ?> getConverter(Class<?> sourceType, Class<?> targetType) {\n-        return getExtensionLoader(Converter.class)\n-                .getSupportedExtensionInstances()\n-                .stream()\n-                .filter(converter -> converter.accept(sourceType, targetType))\n-                .findFirst()\n-                .orElse(null);\n-    }\n-\n-    /**\n-     * Convert the value of source to target-type value if possible\n-     *\n-     * @param source     the value of source\n-     * @param targetType the target type\n-     * @param <T>        the target type\n-     * @return <code>null</code> if can't be converted\n-     * @since 2.7.8\n-     */\n-    static <T> T convertIfPossible(Object source, Class<T> targetType) {\n-        Converter converter = getConverter(source.getClass(), targetType);\n-        if (converter != null) {\n-            return (T) converter.convert(source);\n-        }\n-        return null;\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.common.convert;\r\n+\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.isAssignableFrom;\r\n+import static org.apache.dubbo.common.utils.TypeUtils.findActualTypeArgument;\r\n+\r\n+/**\r\n+ * A class to convert the source-typed value to the target-typed value\r\n+ *\r\n+ * @param <S> The source type\r\n+ * @param <T> The target type\r\n+ * @since 2.7.6\r\n+ */\r\n+@SPI\r\n+@FunctionalInterface\r\n+public interface Converter<S, T> extends Prioritized {\r\n+\r\n+    /**\r\n+     * Accept the source type and target type or not\r\n+     *\r\n+     * @param sourceType the source type\r\n+     * @param targetType the target type\r\n+     * @return if accepted, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    default boolean accept(Class<?> sourceType, Class<?> targetType) {\r\n+        return isAssignableFrom(sourceType, getSourceType()) && isAssignableFrom(targetType, getTargetType());\r\n+    }\r\n+\r\n+    /**\r\n+     * Convert the source-typed value to the target-typed value\r\n+     *\r\n+     * @param source the source-typed value\r\n+     * @return the target-typed value\r\n+     */\r\n+    T convert(S source);\r\n+\r\n+    /**\r\n+     * Get the source type\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    default Class<S> getSourceType() {\r\n+        return findActualTypeArgument(getClass(), Converter.class, 0);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the target type\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    default Class<T> getTargetType() {\r\n+        return findActualTypeArgument(getClass(), Converter.class, 1);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the Converter instance from {@link ExtensionLoader} with the specified source and target type\r\n+     *\r\n+     * @param sourceType the source type\r\n+     * @param targetType the target type\r\n+     * @return\r\n+     * @see ExtensionLoader#getSupportedExtensionInstances()\r\n+     */\r\n+    static Converter<?, ?> getConverter(Class<?> sourceType, Class<?> targetType) {\r\n+        return getExtensionLoader(Converter.class)\r\n+                .getSupportedExtensionInstances()\r\n+                .stream()\r\n+                .filter(converter -> converter.accept(sourceType, targetType))\r\n+                .findFirst()\r\n+                .orElse(null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Convert the value of source to target-type value if possible\r\n+     *\r\n+     * @param source     the value of source\r\n+     * @param targetType the target type\r\n+     * @param <T>        the target type\r\n+     * @return <code>null</code> if can't be converted\r\n+     * @since 2.7.8\r\n+     */\r\n+    static <T> T convertIfPossible(Object source, Class<T> targetType) {\r\n+        Converter converter = getConverter(source.getClass(), targetType);\r\n+        if (converter != null) {\r\n+            return (T) converter.convert(source);\r\n+        }\r\n+        return null;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/StringConverter.java", "source2": "org/apache/dubbo/common/convert/StringConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,27 +1,27 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.common.convert;\n-\n-/**\n- * A class to covert {@link String} to the target-typed value\n- *\n- * @see Converter\n- * @since 2.7.6\n- */\n-@FunctionalInterface\n-public interface StringConverter<T> extends Converter<String, T> {\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.common.convert;\r\n+\r\n+/**\r\n+ * A class to covert {@link String} to the target-typed value\r\n+ *\r\n+ * @see Converter\r\n+ * @since 2.7.6\r\n+ */\r\n+@FunctionalInterface\r\n+public interface StringConverter<T> extends Converter<String, T> {\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/StringToBooleanConverter.java", "source2": "org/apache/dubbo/common/convert/StringToBooleanConverter.java", "comments": ["Line-ending 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.common.convert;\n-\n-import static java.lang.Boolean.valueOf;\n-import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\n-\n-/**\n- * The class to convert {@link String} to {@link Boolean}\n- *\n- * @since 2.7.6\n- */\n-public class StringToBooleanConverter implements StringConverter<Boolean> {\n-\n-    @Override\n-    public Boolean convert(String source) {\n-        return isNotEmpty(source) ? valueOf(source) : null;\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return NORMAL_PRIORITY + 5;\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.common.convert;\r\n+\r\n+import static java.lang.Boolean.valueOf;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Boolean}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToBooleanConverter implements StringConverter<Boolean> {\r\n+\r\n+    @Override\r\n+    public Boolean convert(String source) {\r\n+        return isNotEmpty(source) ? valueOf(source) : null;\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return NORMAL_PRIORITY + 5;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/StringToCharArrayConverter.java", "source2": "org/apache/dubbo/common/convert/StringToCharArrayConverter.java", "comments": ["Line-ending 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.common.convert;\n-\n-\n-import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\n-\n-/**\n- * The class to convert {@link String} to <code>char[]</code>\n- *\n- * @since 2.7.6\n- */\n-public class StringToCharArrayConverter implements StringConverter<char[]> {\n-\n-    @Override\n-    public char[] convert(String source) {\n-        return isNotEmpty(source) ? source.toCharArray() : null;\n-    }\n-\n-\n-    @Override\n-    public int getPriority() {\n-        return NORMAL_PRIORITY + 7;\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.common.convert;\r\n+\r\n+\r\n+import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to <code>char[]</code>\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToCharArrayConverter implements StringConverter<char[]> {\r\n+\r\n+    @Override\r\n+    public char[] convert(String source) {\r\n+        return isNotEmpty(source) ? source.toCharArray() : null;\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return NORMAL_PRIORITY + 7;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/StringToCharacterConverter.java", "source2": "org/apache/dubbo/common/convert/StringToCharacterConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,44 +1,44 @@\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.common.convert;\n-\n-import static org.apache.dubbo.common.utils.StringUtils.length;\n-\n-/**\n- * The class to convert {@link String} to {@link Character}\n- *\n- * @since 2.7.6\n- */\n-public class StringToCharacterConverter implements StringConverter<Character> {\n-\n-    @Override\n-    public Character convert(String source) {\n-        int length = length(source);\n-        if (length == 0) {\n-            return null;\n-        }\n-        if (length > 1) {\n-            throw new IllegalArgumentException(\"The source String is more than one character!\");\n-        }\n-        return source.charAt(0);\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return NORMAL_PRIORITY + 8;\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.common.convert;\r\n+\r\n+import static org.apache.dubbo.common.utils.StringUtils.length;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Character}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToCharacterConverter implements StringConverter<Character> {\r\n+\r\n+    @Override\r\n+    public Character convert(String source) {\r\n+        int length = length(source);\r\n+        if (length == 0) {\r\n+            return null;\r\n+        }\r\n+        if (length > 1) {\r\n+            throw new IllegalArgumentException(\"The source String is more than one character!\");\r\n+        }\r\n+        return source.charAt(0);\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return NORMAL_PRIORITY + 8;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/StringToDoubleConverter.java", "source2": "org/apache/dubbo/common/convert/StringToDoubleConverter.java", "comments": ["Line-ending 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.common.convert;\n-\n-import static java.lang.Double.valueOf;\n-import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\n-\n-/**\n- * The class to convert {@link String} to {@link Double}\n- *\n- * @since 2.7.6\n- */\n-public class StringToDoubleConverter implements StringConverter<Double> {\n-\n-    @Override\n-    public Double convert(String source) {\n-        return isNotEmpty(source) ? valueOf(source) : null;\n-    }\n-\n-\n-    @Override\n-    public int getPriority() {\n-        return NORMAL_PRIORITY + 3;\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.common.convert;\r\n+\r\n+import static java.lang.Double.valueOf;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Double}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToDoubleConverter implements StringConverter<Double> {\r\n+\r\n+    @Override\r\n+    public Double convert(String source) {\r\n+        return isNotEmpty(source) ? valueOf(source) : null;\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return NORMAL_PRIORITY + 3;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/StringToFloatConverter.java", "source2": "org/apache/dubbo/common/convert/StringToFloatConverter.java", "comments": ["Line-ending 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.common.convert;\n-\n-import static java.lang.Float.valueOf;\n-import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\n-\n-/**\n- * The class to convert {@link String} to {@link Float}\n- *\n- * @since 2.7.6\n- */\n-public class StringToFloatConverter implements StringConverter<Float> {\n-\n-    @Override\n-    public Float convert(String source) {\n-        return isNotEmpty(source) ? valueOf(source) : null;\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return NORMAL_PRIORITY + 4;\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.common.convert;\r\n+\r\n+import static java.lang.Float.valueOf;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Float}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToFloatConverter implements StringConverter<Float> {\r\n+\r\n+    @Override\r\n+    public Float convert(String source) {\r\n+        return isNotEmpty(source) ? valueOf(source) : null;\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return NORMAL_PRIORITY + 4;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/StringToIntegerConverter.java", "source2": "org/apache/dubbo/common/convert/StringToIntegerConverter.java", "comments": ["Line-ending 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.common.convert;\n-\n-import static java.lang.Integer.valueOf;\n-import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\n-\n-/**\n- * The class to convert {@link String} to {@link Integer}\n- *\n- * @since 2.7.6\n- */\n-public class StringToIntegerConverter implements StringConverter<Integer> {\n-\n-    @Override\n-    public Integer convert(String source) {\n-        return isNotEmpty(source) ? valueOf(source) : null;\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return NORMAL_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.common.convert;\r\n+\r\n+import static java.lang.Integer.valueOf;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Integer}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToIntegerConverter implements StringConverter<Integer> {\r\n+\r\n+    @Override\r\n+    public Integer convert(String source) {\r\n+        return isNotEmpty(source) ? valueOf(source) : null;\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return NORMAL_PRIORITY;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/StringToLongConverter.java", "source2": "org/apache/dubbo/common/convert/StringToLongConverter.java", "comments": ["Line-ending 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.common.convert;\n-\n-import static java.lang.Long.valueOf;\n-import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\n-\n-/**\n- * The class to convert {@link String} to {@link Long}\n- *\n- * @since 2.7.6\n- */\n-public class StringToLongConverter implements StringConverter<Long> {\n-\n-    @Override\n-    public Long convert(String source) {\n-        return isNotEmpty(source) ? valueOf(source) : null;\n-    }\n-\n-\n-    @Override\n-    public int getPriority() {\n-        return NORMAL_PRIORITY + 1;\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.common.convert;\r\n+\r\n+import static java.lang.Long.valueOf;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Long}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToLongConverter implements StringConverter<Long> {\r\n+\r\n+    @Override\r\n+    public Long convert(String source) {\r\n+        return isNotEmpty(source) ? valueOf(source) : null;\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return NORMAL_PRIORITY + 1;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/StringToOptionalConverter.java", "source2": "org/apache/dubbo/common/convert/StringToOptionalConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,40 +1,40 @@\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.common.convert;\n-\n-import java.util.Optional;\n-\n-import static java.util.Optional.ofNullable;\n-\n-/**\n- * The class to convert {@link String} to {@link Optional}\n- *\n- * @since 2.7.6\n- */\n-public class StringToOptionalConverter implements StringConverter<Optional> {\n-\n-    @Override\n-    public Optional convert(String source) {\n-        return ofNullable(source);\n-    }\n-\n-\n-    @Override\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.common.convert;\r\n+\r\n+import java.util.Optional;\r\n+\r\n+import static java.util.Optional.ofNullable;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Optional}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToOptionalConverter implements StringConverter<Optional> {\r\n+\r\n+    @Override\r\n+    public Optional convert(String source) {\r\n+        return ofNullable(source);\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/StringToShortConverter.java", "source2": "org/apache/dubbo/common/convert/StringToShortConverter.java", "comments": ["Line-ending 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.common.convert;\n-\n-import static java.lang.Short.valueOf;\n-import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\n-\n-/**\n- * The class to convert {@link String} to {@link Short}\n- *\n- * @since 2.7.6\n- */\n-public class StringToShortConverter implements StringConverter<Short> {\n-\n-    @Override\n-    public Short convert(String source) {\n-        return isNotEmpty(source) ? valueOf(source) : null;\n-    }\n-\n-\n-    @Override\n-    public int getPriority() {\n-        return NORMAL_PRIORITY + 2;\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.common.convert;\r\n+\r\n+import static java.lang.Short.valueOf;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Short}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToShortConverter implements StringConverter<Short> {\r\n+\r\n+    @Override\r\n+    public Short convert(String source) {\r\n+        return isNotEmpty(source) ? valueOf(source) : null;\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return NORMAL_PRIORITY + 2;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/StringToStringConverter.java", "source2": "org/apache/dubbo/common/convert/StringToStringConverter.java", "comments": ["Line-ending 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.common.convert;\n-\n-/**\n- * A class to covert {@link String} to {@link String} value, just no-op\n- *\n- * @since 2.7.6\n- */\n-public class StringToStringConverter implements StringConverter<String> {\n-\n-    @Override\n-    public String convert(String source) {\n-        return source;\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.common.convert;\r\n+\r\n+/**\r\n+ * A class to covert {@link String} to {@link String} value, just no-op\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToStringConverter implements StringConverter<String> {\r\n+\r\n+    @Override\r\n+    public String convert(String source) {\r\n+        return source;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/MultiValueConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/MultiValueConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,92 +1,92 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.common.convert.multiple;\n-\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-\n-import java.util.Collection;\n-\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-import static org.apache.dubbo.common.utils.TypeUtils.findActualTypeArgument;\n-\n-/**\n- * An interface to convert the source-typed value to multiple value, e.g , Java array, {@link Collection} or\n- * sub-interfaces\n- *\n- * @param <S> The source type\n- * @since 2.7.6\n- */\n-@SPI\n-public interface MultiValueConverter<S> extends Prioritized {\n-\n-    /**\n-     * Accept the source type and target type or not\n-     *\n-     * @param sourceType     the source type\n-     * @param multiValueType the multi-value type\n-     * @return if accepted, return <code>true</code>, or <code>false</code>\n-     */\n-    boolean accept(Class<S> sourceType, Class<?> multiValueType);\n-\n-    /**\n-     * Convert the source to be the multiple value\n-     *\n-     * @param source         the source-typed value\n-     * @param multiValueType the multi-value type\n-     * @param elementType    the element type\n-     * @return\n-     */\n-    Object convert(S source, Class<?> multiValueType, Class<?> elementType);\n-\n-    /**\n-     * Get the source type\n-     *\n-     * @return non-null\n-     */\n-    default Class<S> getSourceType() {\n-        return findActualTypeArgument(getClass(), MultiValueConverter.class, 0);\n-    }\n-\n-    /**\n-     * Find the {@link MultiValueConverter} instance from {@link ExtensionLoader} with the specified source and target type\n-     *\n-     * @param sourceType the source type\n-     * @param targetType the target type\n-     * @return <code>null</code> if not found\n-     * @see ExtensionLoader#getSupportedExtensionInstances()\n-     * @since 2.7.8\n-     */\n-    static MultiValueConverter<?> find(Class<?> sourceType, Class<?> targetType) {\n-        return getExtensionLoader(MultiValueConverter.class)\n-                .getSupportedExtensionInstances()\n-                .stream()\n-                .filter(converter -> converter.accept(sourceType, targetType))\n-                .findFirst()\n-                .orElse(null);\n-    }\n-\n-    static <T> T convertIfPossible(Object source, Class<?> multiValueType, Class<?> elementType) {\n-        Class<?> sourceType = source.getClass();\n-        MultiValueConverter converter = find(sourceType, multiValueType);\n-        if (converter != null) {\n-            return (T) converter.convert(source, multiValueType, elementType);\n-        }\n-        return null;\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.common.convert.multiple;\r\n+\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\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.Collection;\r\n+\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+import static org.apache.dubbo.common.utils.TypeUtils.findActualTypeArgument;\r\n+\r\n+/**\r\n+ * An interface to convert the source-typed value to multiple value, e.g , Java array, {@link Collection} or\r\n+ * sub-interfaces\r\n+ *\r\n+ * @param <S> The source type\r\n+ * @since 2.7.6\r\n+ */\r\n+@SPI\r\n+public interface MultiValueConverter<S> extends Prioritized {\r\n+\r\n+    /**\r\n+     * Accept the source type and target type or not\r\n+     *\r\n+     * @param sourceType     the source type\r\n+     * @param multiValueType the multi-value type\r\n+     * @return if accepted, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    boolean accept(Class<S> sourceType, Class<?> multiValueType);\r\n+\r\n+    /**\r\n+     * Convert the source to be the multiple value\r\n+     *\r\n+     * @param source         the source-typed value\r\n+     * @param multiValueType the multi-value type\r\n+     * @param elementType    the element type\r\n+     * @return\r\n+     */\r\n+    Object convert(S source, Class<?> multiValueType, Class<?> elementType);\r\n+\r\n+    /**\r\n+     * Get the source type\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    default Class<S> getSourceType() {\r\n+        return findActualTypeArgument(getClass(), MultiValueConverter.class, 0);\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the {@link MultiValueConverter} instance from {@link ExtensionLoader} with the specified source and target type\r\n+     *\r\n+     * @param sourceType the source type\r\n+     * @param targetType the target type\r\n+     * @return <code>null</code> if not found\r\n+     * @see ExtensionLoader#getSupportedExtensionInstances()\r\n+     * @since 2.7.8\r\n+     */\r\n+    static MultiValueConverter<?> find(Class<?> sourceType, Class<?> targetType) {\r\n+        return getExtensionLoader(MultiValueConverter.class)\r\n+                .getSupportedExtensionInstances()\r\n+                .stream()\r\n+                .filter(converter -> converter.accept(sourceType, targetType))\r\n+                .findFirst()\r\n+                .orElse(null);\r\n+    }\r\n+\r\n+    static <T> T convertIfPossible(Object source, Class<?> multiValueType, Class<?> elementType) {\r\n+        Class<?> sourceType = source.getClass();\r\n+        MultiValueConverter converter = find(sourceType, multiValueType);\r\n+        if (converter != null) {\r\n+            return (T) converter.convert(source, multiValueType, elementType);\r\n+        }\r\n+        return null;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToArrayConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToArrayConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,60 +1,60 @@\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.common.convert.multiple;\n-\n-import org.apache.dubbo.common.convert.Converter;\n-\n-import java.lang.reflect.Array;\n-\n-import static java.lang.reflect.Array.newInstance;\n-\n-/**\n- * The class to convert {@link String} to array-type object\n- *\n- * @since 2.7.6\n- */\n-public class StringToArrayConverter implements StringToMultiValueConverter {\n-\n-    public boolean accept(Class<String> type, Class<?> multiValueType) {\n-        if (multiValueType != null && multiValueType.isArray()) {\n-            return true;\n-        }\n-        return false;\n-    }\n-\n-    @Override\n-    public Object convert(String[] segments, int size, Class<?> targetType, Class<?> elementType) {\n-\n-        Class<?> componentType = targetType.getComponentType();\n-\n-        Converter converter = Converter.getConverter(String.class, componentType);\n-\n-        Object array = newInstance(componentType, size);\n-\n-        for (int i = 0; i < size; i++) {\n-            Array.set(array, i, converter.convert(segments[i]));\n-        }\n-\n-        return array;\n-    }\n-\n-\n-    @Override\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.common.convert.multiple;\r\n+\r\n+import org.apache.dubbo.common.convert.Converter;\r\n+\r\n+import java.lang.reflect.Array;\r\n+\r\n+import static java.lang.reflect.Array.newInstance;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to array-type object\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToArrayConverter implements StringToMultiValueConverter {\r\n+\r\n+    public boolean accept(Class<String> type, Class<?> multiValueType) {\r\n+        if (multiValueType != null && multiValueType.isArray()) {\r\n+            return true;\r\n+        }\r\n+        return false;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object convert(String[] segments, int size, Class<?> targetType, Class<?> elementType) {\r\n+\r\n+        Class<?> componentType = targetType.getComponentType();\r\n+\r\n+        Converter converter = Converter.getConverter(String.class, componentType);\r\n+\r\n+        Object array = newInstance(componentType, size);\r\n+\r\n+        for (int i = 0; i < size; i++) {\r\n+            Array.set(array, i, converter.convert(segments[i]));\r\n+        }\r\n+\r\n+        return array;\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToBlockingDequeConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToBlockingDequeConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,33 +1,33 @@\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.common.convert.multiple;\n-\n-import java.util.concurrent.BlockingDeque;\n-import java.util.concurrent.LinkedBlockingDeque;\n-\n-/**\n- * The class to convert {@link String} to {@link BlockingDeque}-based value\n- *\n- * @since 2.7.6\n- */\n-public class StringToBlockingDequeConverter extends StringToIterableConverter<BlockingDeque> {\n-\n-    @Override\n-    protected BlockingDeque createMultiValue(int size, Class<?> multiValueType) {\n-        return new LinkedBlockingDeque(size);\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.common.convert.multiple;\r\n+\r\n+import java.util.concurrent.BlockingDeque;\r\n+import java.util.concurrent.LinkedBlockingDeque;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link BlockingDeque}-based value\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToBlockingDequeConverter extends StringToIterableConverter<BlockingDeque> {\r\n+\r\n+    @Override\r\n+    protected BlockingDeque createMultiValue(int size, Class<?> multiValueType) {\r\n+        return new LinkedBlockingDeque(size);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToBlockingQueueConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToBlockingQueueConverter.java", "comments": ["Line-ending 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.common.convert.multiple;\n-\n-import java.util.concurrent.ArrayBlockingQueue;\n-import java.util.concurrent.BlockingDeque;\n-import java.util.concurrent.BlockingQueue;\n-\n-/**\n- * The class to convert {@link String} to {@link BlockingDeque}-based value\n- *\n- * @since 2.7.6\n- */\n-public class StringToBlockingQueueConverter extends StringToIterableConverter<BlockingQueue> {\n-\n-    @Override\n-    protected BlockingQueue createMultiValue(int size, Class<?> multiValueType) {\n-        return new ArrayBlockingQueue(size);\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.common.convert.multiple;\r\n+\r\n+import java.util.concurrent.ArrayBlockingQueue;\r\n+import java.util.concurrent.BlockingDeque;\r\n+import java.util.concurrent.BlockingQueue;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link BlockingDeque}-based value\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToBlockingQueueConverter extends StringToIterableConverter<BlockingQueue> {\r\n+\r\n+    @Override\r\n+    protected BlockingQueue createMultiValue(int size, Class<?> multiValueType) {\r\n+        return new ArrayBlockingQueue(size);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToCollectionConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToCollectionConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,33 +1,33 @@\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.common.convert.multiple;\n-\n-import java.util.ArrayList;\n-import java.util.Collection;\n-\n-/**\n- * The class to convert {@link String} to {@link Collection}-based value\n- *\n- * @since 2.7.6\n- */\n-public class StringToCollectionConverter extends StringToIterableConverter<Collection> {\n-\n-    @Override\n-    protected Collection createMultiValue(int size, Class<?> multiValueType) {\n-        return new ArrayList(size);\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.common.convert.multiple;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Collection;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Collection}-based value\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToCollectionConverter extends StringToIterableConverter<Collection> {\r\n+\r\n+    @Override\r\n+    protected Collection createMultiValue(int size, Class<?> multiValueType) {\r\n+        return new ArrayList(size);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToDequeConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToDequeConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,33 +1,33 @@\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.common.convert.multiple;\n-\n-import java.util.ArrayDeque;\n-import java.util.Deque;\n-\n-/**\n- * The class to convert {@link String} to {@link Deque}-based value\n- *\n- * @since 2.7.6\n- */\n-public class StringToDequeConverter extends StringToIterableConverter<Deque> {\n-\n-    @Override\n-    protected Deque createMultiValue(int size, Class<?> multiValueType) {\n-        return new ArrayDeque(size);\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.common.convert.multiple;\r\n+\r\n+import java.util.ArrayDeque;\r\n+import java.util.Deque;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Deque}-based value\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToDequeConverter extends StringToIterableConverter<Deque> {\r\n+\r\n+    @Override\r\n+    protected Deque createMultiValue(int size, Class<?> multiValueType) {\r\n+        return new ArrayDeque(size);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToIterableConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToIterableConverter.java", "comments": ["Line-ending 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.common.convert.multiple;\n-\n-import org.apache.dubbo.common.convert.StringConverter;\n-\n-import java.util.Collection;\n-import java.util.Optional;\n-\n-import static org.apache.dubbo.common.convert.Converter.getConverter;\n-import static org.apache.dubbo.common.utils.ClassUtils.getAllInterfaces;\n-import static org.apache.dubbo.common.utils.ClassUtils.isAssignableFrom;\n-import static org.apache.dubbo.common.utils.TypeUtils.findActualTypeArgument;\n-\n-/**\n- * The class to convert {@link String} to {@link Iterable}-based value\n- *\n- * @since 2.7.6\n- */\n-public abstract class StringToIterableConverter<T extends Iterable> implements StringToMultiValueConverter {\n-\n-    public boolean accept(Class<String> type, Class<?> multiValueType) {\n-        return isAssignableFrom(getSupportedType(), multiValueType);\n-    }\n-\n-    @Override\n-    public final Object convert(String[] segments, int size, Class<?> multiValueType, Class<?> elementType) {\n-\n-        Optional<StringConverter> stringConverter = getStringConverter(elementType);\n-\n-        return stringConverter.map(converter -> {\n-\n-            T convertedObject = createMultiValue(size, multiValueType);\n-\n-            if (convertedObject instanceof Collection) {\n-                Collection collection = (Collection) convertedObject;\n-                for (int i = 0; i < size; i++) {\n-                    String segment = segments[i];\n-                    Object element = converter.convert(segment);\n-                    collection.add(element);\n-                }\n-                return collection;\n-            }\n-\n-            return convertedObject;\n-        }).orElse(null);\n-    }\n-\n-    protected abstract T createMultiValue(int size, Class<?> multiValueType);\n-\n-    protected Optional<StringConverter> getStringConverter(Class<?> elementType) {\n-        StringConverter converter = (StringConverter) getConverter(String.class, elementType);\n-        return Optional.ofNullable(converter);\n-    }\n-\n-    protected final Class<T> getSupportedType() {\n-        return findActualTypeArgument(getClass(), StringToIterableConverter.class, 0);\n-    }\n-\n-    @Override\n-    public final int getPriority() {\n-        int level = getAllInterfaces(getSupportedType(), type ->\n-                isAssignableFrom(Iterable.class, type)).size();\n-        return MIN_PRIORITY - level;\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.common.convert.multiple;\r\n+\r\n+import org.apache.dubbo.common.convert.StringConverter;\r\n+\r\n+import java.util.Collection;\r\n+import java.util.Optional;\r\n+\r\n+import static org.apache.dubbo.common.convert.Converter.getConverter;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.getAllInterfaces;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.isAssignableFrom;\r\n+import static org.apache.dubbo.common.utils.TypeUtils.findActualTypeArgument;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Iterable}-based value\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public abstract class StringToIterableConverter<T extends Iterable> implements StringToMultiValueConverter {\r\n+\r\n+    public boolean accept(Class<String> type, Class<?> multiValueType) {\r\n+        return isAssignableFrom(getSupportedType(), multiValueType);\r\n+    }\r\n+\r\n+    @Override\r\n+    public final Object convert(String[] segments, int size, Class<?> multiValueType, Class<?> elementType) {\r\n+\r\n+        Optional<StringConverter> stringConverter = getStringConverter(elementType);\r\n+\r\n+        return stringConverter.map(converter -> {\r\n+\r\n+            T convertedObject = createMultiValue(size, multiValueType);\r\n+\r\n+            if (convertedObject instanceof Collection) {\r\n+                Collection collection = (Collection) convertedObject;\r\n+                for (int i = 0; i < size; i++) {\r\n+                    String segment = segments[i];\r\n+                    Object element = converter.convert(segment);\r\n+                    collection.add(element);\r\n+                }\r\n+                return collection;\r\n+            }\r\n+\r\n+            return convertedObject;\r\n+        }).orElse(null);\r\n+    }\r\n+\r\n+    protected abstract T createMultiValue(int size, Class<?> multiValueType);\r\n+\r\n+    protected Optional<StringConverter> getStringConverter(Class<?> elementType) {\r\n+        StringConverter converter = (StringConverter) getConverter(String.class, elementType);\r\n+        return Optional.ofNullable(converter);\r\n+    }\r\n+\r\n+    protected final Class<T> getSupportedType() {\r\n+        return findActualTypeArgument(getClass(), StringToIterableConverter.class, 0);\r\n+    }\r\n+\r\n+    @Override\r\n+    public final int getPriority() {\r\n+        int level = getAllInterfaces(getSupportedType(), type ->\r\n+                isAssignableFrom(Iterable.class, type)).size();\r\n+        return MIN_PRIORITY - level;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToListConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToListConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,33 +1,33 @@\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.common.convert.multiple;\n-\n-import java.util.ArrayList;\n-import java.util.List;\n-\n-/**\n- * The class to convert {@link String} to {@link List}-based value\n- *\n- * @since 2.7.6\n- */\n-public class StringToListConverter extends StringToIterableConverter<List> {\n-\n-    @Override\n-    protected List createMultiValue(int size, Class<?> multiValueType) {\n-        return new ArrayList(size);\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.common.convert.multiple;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link List}-based value\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToListConverter extends StringToIterableConverter<List> {\r\n+\r\n+    @Override\r\n+    protected List createMultiValue(int size, Class<?> multiValueType) {\r\n+        return new ArrayList(size);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToMultiValueConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToMultiValueConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,61 +1,61 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.common.convert.multiple;\n-\n-import org.apache.dubbo.common.utils.ArrayUtils;\n-\n-import static org.apache.dubbo.common.utils.StringUtils.isEmpty;\n-import static org.apache.dubbo.common.utils.StringUtils.split;\n-\n-/**\n- * The class to convert {@link String} to multiple value object\n- *\n- * @see MultiValueConverter\n- * @since 2.7.6\n- */\n-public interface StringToMultiValueConverter extends MultiValueConverter<String> {\n-\n-    @Override\n-    default Object convert(String source, Class<?> multiValueType, Class<?> elementType) {\n-\n-        if (isEmpty(source)) {\n-            return null;\n-        }\n-\n-        // split by the comma\n-        String[] segments = split(source, ',');\n-\n-        if (ArrayUtils.isEmpty(segments)) { // If empty array, create an array with only one element\n-            segments = new String[]{source};\n-        }\n-\n-        int size = segments.length;\n-\n-        return convert(segments, size, multiValueType, elementType);\n-    }\n-\n-    /**\n-     * Convert the segments to multiple value object\n-     *\n-     * @param segments    the String array of content\n-     * @param size        the size of multiple value object\n-     * @param targetType  the target type\n-     * @param elementType the element type\n-     * @return multiple value object\n-     */\n-    Object convert(String[] segments, int size, Class<?> targetType, Class<?> elementType);\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.common.convert.multiple;\r\n+\r\n+import org.apache.dubbo.common.utils.ArrayUtils;\r\n+\r\n+import static org.apache.dubbo.common.utils.StringUtils.isEmpty;\r\n+import static org.apache.dubbo.common.utils.StringUtils.split;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to multiple value object\r\n+ *\r\n+ * @see MultiValueConverter\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface StringToMultiValueConverter extends MultiValueConverter<String> {\r\n+\r\n+    @Override\r\n+    default Object convert(String source, Class<?> multiValueType, Class<?> elementType) {\r\n+\r\n+        if (isEmpty(source)) {\r\n+            return null;\r\n+        }\r\n+\r\n+        // split by the comma\r\n+        String[] segments = split(source, ',');\r\n+\r\n+        if (ArrayUtils.isEmpty(segments)) { // If empty array, create an array with only one element\r\n+            segments = new String[]{source};\r\n+        }\r\n+\r\n+        int size = segments.length;\r\n+\r\n+        return convert(segments, size, multiValueType, elementType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Convert the segments to multiple value object\r\n+     *\r\n+     * @param segments    the String array of content\r\n+     * @param size        the size of multiple value object\r\n+     * @param targetType  the target type\r\n+     * @param elementType the element type\r\n+     * @return multiple value object\r\n+     */\r\n+    Object convert(String[] segments, int size, Class<?> targetType, Class<?> elementType);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToNavigableSetConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToNavigableSetConverter.java", "comments": ["Line-ending 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.common.convert.multiple;\n-\n-import java.util.NavigableSet;\n-import java.util.SortedSet;\n-import java.util.TreeSet;\n-\n-/**\n- * The class to convert {@link String} to {@link SortedSet}-based value\n- *\n- * @since 2.7.6\n- */\n-public class StringToNavigableSetConverter extends StringToIterableConverter<NavigableSet> {\n-\n-    @Override\n-    protected NavigableSet createMultiValue(int size, Class<?> multiValueType) {\n-        return new TreeSet();\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.common.convert.multiple;\r\n+\r\n+import java.util.NavigableSet;\r\n+import java.util.SortedSet;\r\n+import java.util.TreeSet;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link SortedSet}-based value\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToNavigableSetConverter extends StringToIterableConverter<NavigableSet> {\r\n+\r\n+    @Override\r\n+    protected NavigableSet createMultiValue(int size, Class<?> multiValueType) {\r\n+        return new TreeSet();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToQueueConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToQueueConverter.java", "comments": ["Line-ending 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.common.convert.multiple;\n-\n-import java.util.ArrayDeque;\n-import java.util.Deque;\n-import java.util.Queue;\n-\n-/**\n- * The class to convert {@link String} to {@link Deque}-based value\n- *\n- * @since 2.7.6\n- */\n-public class StringToQueueConverter extends StringToIterableConverter<Queue> {\n-\n-    @Override\n-    protected Queue createMultiValue(int size, Class<?> multiValueType) {\n-        return new ArrayDeque(size);\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.common.convert.multiple;\r\n+\r\n+import java.util.ArrayDeque;\r\n+import java.util.Deque;\r\n+import java.util.Queue;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Deque}-based value\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToQueueConverter extends StringToIterableConverter<Queue> {\r\n+\r\n+    @Override\r\n+    protected Queue createMultiValue(int size, Class<?> multiValueType) {\r\n+        return new ArrayDeque(size);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToSetConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToSetConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,33 +1,33 @@\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.common.convert.multiple;\n-\n-import java.util.HashSet;\n-import java.util.Set;\n-\n-/**\n- * The class to convert {@link String} to {@link Set}-based value\n- *\n- * @since 2.7.6\n- */\n-public class StringToSetConverter extends StringToIterableConverter<Set> {\n-\n-    @Override\n-    protected Set createMultiValue(int size, Class<?> multiValueType) {\n-        return new HashSet(size);\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.common.convert.multiple;\r\n+\r\n+import java.util.HashSet;\r\n+import java.util.Set;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link Set}-based value\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToSetConverter extends StringToIterableConverter<Set> {\r\n+\r\n+    @Override\r\n+    protected Set createMultiValue(int size, Class<?> multiValueType) {\r\n+        return new HashSet(size);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToSortedSetConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToSortedSetConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,33 +1,33 @@\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.common.convert.multiple;\n-\n-import java.util.SortedSet;\n-import java.util.TreeSet;\n-\n-/**\n- * The class to convert {@link String} to {@link SortedSet}-based value\n- *\n- * @since 2.7.6\n- */\n-public class StringToSortedSetConverter extends StringToIterableConverter<SortedSet> {\n-\n-    @Override\n-    protected SortedSet createMultiValue(int size, Class<?> multiValueType) {\n-        return new TreeSet();\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.common.convert.multiple;\r\n+\r\n+import java.util.SortedSet;\r\n+import java.util.TreeSet;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link SortedSet}-based value\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToSortedSetConverter extends StringToIterableConverter<SortedSet> {\r\n+\r\n+    @Override\r\n+    protected SortedSet createMultiValue(int size, Class<?> multiValueType) {\r\n+        return new TreeSet();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/convert/multiple/StringToTransferQueueConverter.java", "source2": "org/apache/dubbo/common/convert/multiple/StringToTransferQueueConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,33 +1,33 @@\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.common.convert.multiple;\n-\n-import java.util.concurrent.LinkedTransferQueue;\n-import java.util.concurrent.TransferQueue;\n-\n-/**\n- * The class to convert {@link String} to {@link TransferQueue}-based value\n- *\n- * @since 2.7.6\n- */\n-public class StringToTransferQueueConverter extends StringToIterableConverter<TransferQueue> {\n-\n-    @Override\n-    protected TransferQueue createMultiValue(int size, Class<?> multiValueType) {\n-        return new LinkedTransferQueue();\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.common.convert.multiple;\r\n+\r\n+import java.util.concurrent.LinkedTransferQueue;\r\n+import java.util.concurrent.TransferQueue;\r\n+\r\n+/**\r\n+ * The class to convert {@link String} to {@link TransferQueue}-based value\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class StringToTransferQueueConverter extends StringToIterableConverter<TransferQueue> {\r\n+\r\n+    @Override\r\n+    protected TransferQueue createMultiValue(int size, Class<?> multiValueType) {\r\n+        return new LinkedTransferQueue();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/extension/Adaptive.java", "source2": "org/apache/dubbo/common/extension/Adaptive.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,60 +1,60 @@\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.common.extension;\n-\n-import org.apache.dubbo.common.URL;\n-\n-import java.lang.annotation.Documented;\n-import java.lang.annotation.ElementType;\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.RetentionPolicy;\n-import java.lang.annotation.Target;\n-\n-/**\n- * Provide helpful information for {@link ExtensionLoader} to inject dependency extension instance.\n- *\n- * @see ExtensionLoader\n- * @see URL\n- */\n-@Documented\n-@Retention(RetentionPolicy.RUNTIME)\n-@Target({ElementType.TYPE, ElementType.METHOD})\n-public @interface Adaptive {\n-    /**\n-     * Decide which target extension to be injected. The name of the target extension is decided by the parameter passed\n-     * in the URL, and the parameter names are given by this method.\n-     * <p>\n-     * If the specified parameters are not found from {@link URL}, then the default extension will be used for\n-     * dependency injection (specified in its interface's {@link SPI}).\n-     * <p>\n-     * For example, given <code>String[] {\"key1\", \"key2\"}</code>:\n-     * <ol>\n-     * <li>find parameter 'key1' in URL, use its value as the extension's name</li>\n-     * <li>try 'key2' for extension's name if 'key1' is not found (or its value is empty) in URL</li>\n-     * <li>use default extension if 'key2' doesn't exist either</li>\n-     * <li>otherwise, throw {@link IllegalStateException}</li>\n-     * </ol>\n-     * If the parameter names are empty, then a default parameter name is generated from interface's\n-     * class name with the rule: divide classname from capital char into several parts, and separate the parts with\n-     * dot '.', for example, for {@code org.apache.dubbo.xxx.YyyInvokerWrapper}, the generated name is\n-     * <code>String[] {\"yyy.invoker.wrapper\"}</code>.\n-     *\n-     * @return parameter names in URL\n-     */\n-    String[] value() default {};\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.common.extension;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+\r\n+import java.lang.annotation.Documented;\r\n+import java.lang.annotation.ElementType;\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.RetentionPolicy;\r\n+import java.lang.annotation.Target;\r\n+\r\n+/**\r\n+ * Provide helpful information for {@link ExtensionLoader} to inject dependency extension instance.\r\n+ *\r\n+ * @see ExtensionLoader\r\n+ * @see URL\r\n+ */\r\n+@Documented\r\n+@Retention(RetentionPolicy.RUNTIME)\r\n+@Target({ElementType.TYPE, ElementType.METHOD})\r\n+public @interface Adaptive {\r\n+    /**\r\n+     * Decide which target extension to be injected. The name of the target extension is decided by the parameter passed\r\n+     * in the URL, and the parameter names are given by this method.\r\n+     * <p>\r\n+     * If the specified parameters are not found from {@link URL}, then the default extension will be used for\r\n+     * dependency injection (specified in its interface's {@link SPI}).\r\n+     * <p>\r\n+     * For example, given <code>String[] {\"key1\", \"key2\"}</code>:\r\n+     * <ol>\r\n+     * <li>find parameter 'key1' in URL, use its value as the extension's name</li>\r\n+     * <li>try 'key2' for extension's name if 'key1' is not found (or its value is empty) in URL</li>\r\n+     * <li>use default extension if 'key2' doesn't exist either</li>\r\n+     * <li>otherwise, throw {@link IllegalStateException}</li>\r\n+     * </ol>\r\n+     * If the parameter names are empty, then a default parameter name is generated from interface's\r\n+     * class name with the rule: divide classname from capital char into several parts, and separate the parts with\r\n+     * dot '.', for example, for {@code org.apache.dubbo.xxx.YyyInvokerWrapper}, the generated name is\r\n+     * <code>String[] {\"yyy.invoker.wrapper\"}</code>.\r\n+     *\r\n+     * @return parameter names in URL\r\n+     */\r\n+    String[] value() default {};\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/common/extension/AdaptiveClassCodeGenerator.java", "source2": "org/apache/dubbo/common/extension/AdaptiveClassCodeGenerator.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,396 +1,396 @@\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.common.extension;\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-\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Modifier;\n-import java.util.Arrays;\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.stream.Collectors;\n-import java.util.stream.IntStream;\n-\n-/**\n- * Code generator for Adaptive class\n- */\n-public class AdaptiveClassCodeGenerator {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(AdaptiveClassCodeGenerator.class);\n-\n-    private static final String CLASSNAME_INVOCATION = \"org.apache.dubbo.rpc.Invocation\";\n-\n-    private static final String CODE_PACKAGE = \"package %s;\\n\";\n-\n-    private static final String CODE_IMPORTS = \"import %s;\\n\";\n-\n-    private static final String CODE_CLASS_DECLARATION = \"public class %s$Adaptive implements %s {\\n\";\n-\n-    private static final String CODE_METHOD_DECLARATION = \"public %s %s(%s) %s {\\n%s}\\n\";\n-\n-    private static final String CODE_METHOD_ARGUMENT = \"%s arg%d\";\n-\n-    private static final String CODE_METHOD_THROWS = \"throws %s\";\n-\n-    private static final String CODE_UNSUPPORTED = \"throw new UnsupportedOperationException(\\\"The method %s of interface %s is not adaptive method!\\\");\\n\";\n-\n-    private static final String CODE_URL_NULL_CHECK = \"if (arg%d == null) throw new IllegalArgumentException(\\\"url == null\\\");\\n%s url = arg%d;\\n\";\n-\n-    private static final String CODE_EXT_NAME_ASSIGNMENT = \"String extName = %s;\\n\";\n-\n-    private static final String CODE_EXT_NAME_NULL_CHECK = \"if(extName == null) \"\n-                    + \"throw new IllegalStateException(\\\"Failed to get extension (%s) name from url (\\\" + url.toString() + \\\") use keys(%s)\\\");\\n\";\n-\n-    private static final String CODE_INVOCATION_ARGUMENT_NULL_CHECK = \"if (arg%d == null) throw new IllegalArgumentException(\\\"invocation == null\\\"); \"\n-                    + \"String methodName = arg%d.getMethodName();\\n\";\n-\n-\n-    private static final String CODE_EXTENSION_ASSIGNMENT = \"%s extension = (%<s)%s.getExtensionLoader(%s.class).getExtension(extName);\\n\";\n-\n-    private static final String CODE_EXTENSION_METHOD_INVOKE_ARGUMENT = \"arg%d\";\n-\n-    private final Class<?> type;\n-\n-    private String defaultExtName;\n-\n-    public AdaptiveClassCodeGenerator(Class<?> type, String defaultExtName) {\n-        this.type = type;\n-        this.defaultExtName = defaultExtName;\n-    }\n-\n-    /**\n-     * test if given type has at least one method annotated with <code>Adaptive</code>\n-     */\n-    private boolean hasAdaptiveMethod() {\n-        return Arrays.stream(type.getMethods()).anyMatch(m -> m.isAnnotationPresent(Adaptive.class));\n-    }\n-\n-    /**\n-     * generate and return class code\n-     */\n-    public String generate() {\n-        // no need to generate adaptive class since there's no adaptive method found.\n-        if (!hasAdaptiveMethod()) {\n-            throw new IllegalStateException(\"No adaptive method exist on extension \" + type.getName() + \", refuse to create the adaptive class!\");\n-        }\n-\n-        StringBuilder code = new StringBuilder();\n-        code.append(generatePackageInfo());\n-        code.append(generateImports());\n-        code.append(generateClassDeclaration());\n-\n-        Method[] methods = type.getMethods();\n-        for (Method method : methods) {\n-            code.append(generateMethod(method));\n-        }\n-        code.append(\"}\");\n-\n-        if (logger.isDebugEnabled()) {\n-            logger.debug(code.toString());\n-        }\n-        return code.toString();\n-    }\n-\n-    /**\n-     * generate package info\n-     */\n-    private String generatePackageInfo() {\n-        return String.format(CODE_PACKAGE, type.getPackage().getName());\n-    }\n-\n-    /**\n-     * generate imports\n-     */\n-    private String generateImports() {\n-        return String.format(CODE_IMPORTS, ExtensionLoader.class.getName());\n-    }\n-\n-    /**\n-     * generate class declaration\n-     */\n-    private String generateClassDeclaration() {\n-        return String.format(CODE_CLASS_DECLARATION, type.getSimpleName(), type.getCanonicalName());\n-    }\n-\n-    /**\n-     * generate method not annotated with Adaptive with throwing unsupported exception\n-     */\n-    private String generateUnsupported(Method method) {\n-        return String.format(CODE_UNSUPPORTED, method, type.getName());\n-    }\n-\n-    /**\n-     * get index of parameter with type URL\n-     */\n-    private int getUrlTypeIndex(Method method) {\n-        int urlTypeIndex = -1;\n-        Class<?>[] pts = method.getParameterTypes();\n-        for (int i = 0; i < pts.length; ++i) {\n-            if (pts[i].equals(URL.class)) {\n-                urlTypeIndex = i;\n-                break;\n-            }\n-        }\n-        return urlTypeIndex;\n-    }\n-\n-    /**\n-     * generate method declaration\n-     */\n-    private String generateMethod(Method method) {\n-        String methodReturnType = method.getReturnType().getCanonicalName();\n-        String methodName = method.getName();\n-        String methodContent = generateMethodContent(method);\n-        String methodArgs = generateMethodArguments(method);\n-        String methodThrows = generateMethodThrows(method);\n-        return String.format(CODE_METHOD_DECLARATION, methodReturnType, methodName, methodArgs, methodThrows, methodContent);\n-    }\n-\n-    /**\n-     * generate method arguments\n-     */\n-    private String generateMethodArguments(Method method) {\n-        Class<?>[] pts = method.getParameterTypes();\n-        return IntStream.range(0, pts.length)\n-                        .mapToObj(i -> String.format(CODE_METHOD_ARGUMENT, pts[i].getCanonicalName(), i))\n-                        .collect(Collectors.joining(\", \"));\n-    }\n-\n-    /**\n-     * generate method throws\n-     */\n-    private String generateMethodThrows(Method method) {\n-        Class<?>[] ets = method.getExceptionTypes();\n-        if (ets.length > 0) {\n-            String list = Arrays.stream(ets).map(Class::getCanonicalName).collect(Collectors.joining(\", \"));\n-            return String.format(CODE_METHOD_THROWS, list);\n-        } else {\n-            return \"\";\n-        }\n-    }\n-\n-    /**\n-     * generate method URL argument null check\n-     */\n-    private String generateUrlNullCheck(int index) {\n-        return String.format(CODE_URL_NULL_CHECK, index, URL.class.getName(), index);\n-    }\n-\n-    /**\n-     * generate method content\n-     */\n-    private String generateMethodContent(Method method) {\n-        Adaptive adaptiveAnnotation = method.getAnnotation(Adaptive.class);\n-        StringBuilder code = new StringBuilder(512);\n-        if (adaptiveAnnotation == null) {\n-            return generateUnsupported(method);\n-        } else {\n-            int urlTypeIndex = getUrlTypeIndex(method);\n-\n-            // found parameter in URL type\n-            if (urlTypeIndex != -1) {\n-                // Null Point check\n-                code.append(generateUrlNullCheck(urlTypeIndex));\n-            } else {\n-                // did not find parameter in URL type\n-                code.append(generateUrlAssignmentIndirectly(method));\n-            }\n-\n-            String[] value = getMethodAdaptiveValue(adaptiveAnnotation);\n-\n-            boolean hasInvocation = hasInvocationArgument(method);\n-\n-            code.append(generateInvocationArgumentNullCheck(method));\n-\n-            code.append(generateExtNameAssignment(value, hasInvocation));\n-            // check extName == null?\n-            code.append(generateExtNameNullCheck(value));\n-\n-            code.append(generateExtensionAssignment());\n-\n-            // return statement\n-            code.append(generateReturnAndInvocation(method));\n-        }\n-\n-        return code.toString();\n-    }\n-\n-    /**\n-     * generate code for variable extName null check\n-     */\n-    private String generateExtNameNullCheck(String[] value) {\n-        return String.format(CODE_EXT_NAME_NULL_CHECK, type.getName(), Arrays.toString(value));\n-    }\n-\n-    /**\n-     * generate extName assignment code\n-     */\n-    private String generateExtNameAssignment(String[] value, boolean hasInvocation) {\n-        // TODO: refactor it\n-        String getNameCode = null;\n-        for (int i = value.length - 1; i >= 0; --i) {\n-            if (i == value.length - 1) {\n-                if (null != defaultExtName) {\n-                    if (!\"protocol\".equals(value[i])) {\n-                        if (hasInvocation) {\n-                            getNameCode = String.format(\"url.getMethodParameter(methodName, \\\"%s\\\", \\\"%s\\\")\", value[i], defaultExtName);\n-                        } else {\n-                            getNameCode = String.format(\"url.getParameter(\\\"%s\\\", \\\"%s\\\")\", value[i], defaultExtName);\n-                        }\n-                    } else {\n-                        getNameCode = String.format(\"( url.getProtocol() == null ? \\\"%s\\\" : url.getProtocol() )\", defaultExtName);\n-                    }\n-                } else {\n-                    if (!\"protocol\".equals(value[i])) {\n-                        if (hasInvocation) {\n-                            getNameCode = String.format(\"url.getMethodParameter(methodName, \\\"%s\\\", \\\"%s\\\")\", value[i], defaultExtName);\n-                        } else {\n-                            getNameCode = String.format(\"url.getParameter(\\\"%s\\\")\", value[i]);\n-                        }\n-                    } else {\n-                        getNameCode = \"url.getProtocol()\";\n-                    }\n-                }\n-            } else {\n-                if (!\"protocol\".equals(value[i])) {\n-                    if (hasInvocation) {\n-                        getNameCode = String.format(\"url.getMethodParameter(methodName, \\\"%s\\\", \\\"%s\\\")\", value[i], defaultExtName);\n-                    } else {\n-                        getNameCode = String.format(\"url.getParameter(\\\"%s\\\", %s)\", value[i], getNameCode);\n-                    }\n-                } else {\n-                    getNameCode = String.format(\"url.getProtocol() == null ? (%s) : url.getProtocol()\", getNameCode);\n-                }\n-            }\n-        }\n-\n-        return String.format(CODE_EXT_NAME_ASSIGNMENT, getNameCode);\n-    }\n-\n-    /**\n-     * @return\n-     */\n-    private String generateExtensionAssignment() {\n-        return String.format(CODE_EXTENSION_ASSIGNMENT, type.getName(), ExtensionLoader.class.getSimpleName(), type.getName());\n-    }\n-\n-    /**\n-     * generate method invocation statement and return it if necessary\n-     */\n-    private String generateReturnAndInvocation(Method method) {\n-        String returnStatement = method.getReturnType().equals(void.class) ? \"\" : \"return \";\n-\n-        String args = IntStream.range(0, method.getParameters().length)\n-                .mapToObj(i -> String.format(CODE_EXTENSION_METHOD_INVOKE_ARGUMENT, i))\n-                .collect(Collectors.joining(\", \"));\n-\n-        return returnStatement + String.format(\"extension.%s(%s);\\n\", method.getName(), args);\n-    }\n-\n-    /**\n-     * test if method has argument of type <code>Invocation</code>\n-     */\n-    private boolean hasInvocationArgument(Method method) {\n-        Class<?>[] pts = method.getParameterTypes();\n-        return Arrays.stream(pts).anyMatch(p -> CLASSNAME_INVOCATION.equals(p.getName()));\n-    }\n-\n-    /**\n-     * generate code to test argument of type <code>Invocation</code> is null\n-     */\n-    private String generateInvocationArgumentNullCheck(Method method) {\n-        Class<?>[] pts = method.getParameterTypes();\n-        return IntStream.range(0, pts.length).filter(i -> CLASSNAME_INVOCATION.equals(pts[i].getName()))\n-                        .mapToObj(i -> String.format(CODE_INVOCATION_ARGUMENT_NULL_CHECK, i, i))\n-                        .findFirst().orElse(\"\");\n-    }\n-\n-    /**\n-     * get value of adaptive annotation or if empty return splitted simple name\n-     */\n-    private String[] getMethodAdaptiveValue(Adaptive adaptiveAnnotation) {\n-        String[] value = adaptiveAnnotation.value();\n-        // value is not set, use the value generated from class name as the key\n-        if (value.length == 0) {\n-            String splitName = StringUtils.camelToSplitName(type.getSimpleName(), \".\");\n-            value = new String[]{splitName};\n-        }\n-        return value;\n-    }\n-\n-    /**\n-     * get parameter with type <code>URL</code> from method parameter:\n-     * <p>\n-     * test if parameter has method which returns type <code>URL</code>\n-     * <p>\n-     * if not found, throws IllegalStateException\n-     */\n-    private String generateUrlAssignmentIndirectly(Method method) {\n-        Class<?>[] pts = method.getParameterTypes();\n-\n-        Map<String, Integer> getterReturnUrl = new HashMap<>();\n-        // find URL getter method\n-        for (int i = 0; i < pts.length; ++i) {\n-            for (Method m : pts[i].getMethods()) {\n-                String name = m.getName();\n-                if ((name.startsWith(\"get\") || name.length() > 3)\n-                        && Modifier.isPublic(m.getModifiers())\n-                        && !Modifier.isStatic(m.getModifiers())\n-                        && m.getParameterTypes().length == 0\n-                        && m.getReturnType() == URL.class) {\n-                    getterReturnUrl.put(name, i);\n-                }\n-            }\n-        }\n-\n-        if (getterReturnUrl.size() <= 0) {\n-            // getter method not found, throw\n-            throw new IllegalStateException(\"Failed to create adaptive class for interface \" + type.getName()\n-                    + \": not found url parameter or url attribute in parameters of method \" + method.getName());\n-        }\n-\n-        Integer index = getterReturnUrl.get(\"getUrl\");\n-        if (index != null) {\n-            return generateGetUrlNullCheck(index, pts[index], \"getUrl\");\n-        } else {\n-            Map.Entry<String, Integer> entry = getterReturnUrl.entrySet().iterator().next();\n-            return generateGetUrlNullCheck(entry.getValue(), pts[entry.getValue()], entry.getKey());\n-        }\n-    }\n-\n-    /**\n-     * 1, test if argi is null\n-     * 2, test if argi.getXX() returns null\n-     * 3, assign url with argi.getXX()\n-     */\n-    private String generateGetUrlNullCheck(int index, Class<?> type, String method) {\n-        // Null point check\n-        StringBuilder code = new StringBuilder();\n-        code.append(String.format(\"if (arg%d == null) throw new IllegalArgumentException(\\\"%s argument == null\\\");\\n\",\n-                index, type.getName()));\n-        code.append(String.format(\"if (arg%d.%s() == null) throw new IllegalArgumentException(\\\"%s argument %s() == null\\\");\\n\",\n-                index, method, type.getName(), method));\n-\n-        code.append(String.format(\"%s url = arg%d.%s();\\n\", URL.class.getName(), index, method));\n-        return code.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.common.extension;\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+\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Modifier;\r\n+import java.util.Arrays;\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.stream.Collectors;\r\n+import java.util.stream.IntStream;\r\n+\r\n+/**\r\n+ * Code generator for Adaptive class\r\n+ */\r\n+public class AdaptiveClassCodeGenerator {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(AdaptiveClassCodeGenerator.class);\r\n+\r\n+    private static final String CLASSNAME_INVOCATION = \"org.apache.dubbo.rpc.Invocation\";\r\n+\r\n+    private static final String CODE_PACKAGE = \"package %s;\\n\";\r\n+\r\n+    private static final String CODE_IMPORTS = \"import %s;\\n\";\r\n+\r\n+    private static final String CODE_CLASS_DECLARATION = \"public class %s$Adaptive implements %s {\\n\";\r\n+\r\n+    private static final String CODE_METHOD_DECLARATION = \"public %s %s(%s) %s {\\n%s}\\n\";\r\n+\r\n+    private static final String CODE_METHOD_ARGUMENT = \"%s arg%d\";\r\n+\r\n+    private static final String CODE_METHOD_THROWS = \"throws %s\";\r\n+\r\n+    private static final String CODE_UNSUPPORTED = \"throw new UnsupportedOperationException(\\\"The method %s of interface %s is not adaptive method!\\\");\\n\";\r\n+\r\n+    private static final String CODE_URL_NULL_CHECK = \"if (arg%d == null) throw new IllegalArgumentException(\\\"url == null\\\");\\n%s url = arg%d;\\n\";\r\n+\r\n+    private static final String CODE_EXT_NAME_ASSIGNMENT = \"String extName = %s;\\n\";\r\n+\r\n+    private static final String CODE_EXT_NAME_NULL_CHECK = \"if(extName == null) \"\r\n+                    + \"throw new IllegalStateException(\\\"Failed to get extension (%s) name from url (\\\" + url.toString() + \\\") use keys(%s)\\\");\\n\";\r\n+\r\n+    private static final String CODE_INVOCATION_ARGUMENT_NULL_CHECK = \"if (arg%d == null) throw new IllegalArgumentException(\\\"invocation == null\\\"); \"\r\n+                    + \"String methodName = arg%d.getMethodName();\\n\";\r\n+\r\n+\r\n+    private static final String CODE_EXTENSION_ASSIGNMENT = \"%s extension = (%<s)%s.getExtensionLoader(%s.class).getExtension(extName);\\n\";\r\n+\r\n+    private static final String CODE_EXTENSION_METHOD_INVOKE_ARGUMENT = \"arg%d\";\r\n+\r\n+    private final Class<?> type;\r\n+\r\n+    private String defaultExtName;\r\n+\r\n+    public AdaptiveClassCodeGenerator(Class<?> type, String defaultExtName) {\r\n+        this.type = type;\r\n+        this.defaultExtName = defaultExtName;\r\n+    }\r\n+\r\n+    /**\r\n+     * test if given type has at least one method annotated with <code>Adaptive</code>\r\n+     */\r\n+    private boolean hasAdaptiveMethod() {\r\n+        return Arrays.stream(type.getMethods()).anyMatch(m -> m.isAnnotationPresent(Adaptive.class));\r\n+    }\r\n+\r\n+    /**\r\n+     * generate and return class code\r\n+     */\r\n+    public String generate() {\r\n+        // no need to generate adaptive class since there's no adaptive method found.\r\n+        if (!hasAdaptiveMethod()) {\r\n+            throw new IllegalStateException(\"No adaptive method exist on extension \" + type.getName() + \", refuse to create the adaptive class!\");\r\n+        }\r\n+\r\n+        StringBuilder code = new StringBuilder();\r\n+        code.append(generatePackageInfo());\r\n+        code.append(generateImports());\r\n+        code.append(generateClassDeclaration());\r\n+\r\n+        Method[] methods = type.getMethods();\r\n+        for (Method method : methods) {\r\n+            code.append(generateMethod(method));\r\n+        }\r\n+        code.append(\"}\");\r\n+\r\n+        if (logger.isDebugEnabled()) {\r\n+            logger.debug(code.toString());\r\n+        }\r\n+        return code.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * generate package info\r\n+     */\r\n+    private String generatePackageInfo() {\r\n+        return String.format(CODE_PACKAGE, type.getPackage().getName());\r\n+    }\r\n+\r\n+    /**\r\n+     * generate imports\r\n+     */\r\n+    private String generateImports() {\r\n+        return String.format(CODE_IMPORTS, ExtensionLoader.class.getName());\r\n+    }\r\n+\r\n+    /**\r\n+     * generate class declaration\r\n+     */\r\n+    private String generateClassDeclaration() {\r\n+        return String.format(CODE_CLASS_DECLARATION, type.getSimpleName(), type.getCanonicalName());\r\n+    }\r\n+\r\n+    /**\r\n+     * generate method not annotated with Adaptive with throwing unsupported exception\r\n+     */\r\n+    private String generateUnsupported(Method method) {\r\n+        return String.format(CODE_UNSUPPORTED, method, type.getName());\r\n+    }\r\n+\r\n+    /**\r\n+     * get index of parameter with type URL\r\n+     */\r\n+    private int getUrlTypeIndex(Method method) {\r\n+        int urlTypeIndex = -1;\r\n+        Class<?>[] pts = method.getParameterTypes();\r\n+        for (int i = 0; i < pts.length; ++i) {\r\n+            if (pts[i].equals(URL.class)) {\r\n+                urlTypeIndex = i;\r\n+                break;\r\n+            }\r\n+        }\r\n+        return urlTypeIndex;\r\n+    }\r\n+\r\n+    /**\r\n+     * generate method declaration\r\n+     */\r\n+    private String generateMethod(Method method) {\r\n+        String methodReturnType = method.getReturnType().getCanonicalName();\r\n+        String methodName = method.getName();\r\n+        String methodContent = generateMethodContent(method);\r\n+        String methodArgs = generateMethodArguments(method);\r\n+        String methodThrows = generateMethodThrows(method);\r\n+        return String.format(CODE_METHOD_DECLARATION, methodReturnType, methodName, methodArgs, methodThrows, methodContent);\r\n+    }\r\n+\r\n+    /**\r\n+     * generate method arguments\r\n+     */\r\n+    private String generateMethodArguments(Method method) {\r\n+        Class<?>[] pts = method.getParameterTypes();\r\n+        return IntStream.range(0, pts.length)\r\n+                        .mapToObj(i -> String.format(CODE_METHOD_ARGUMENT, pts[i].getCanonicalName(), i))\r\n+                        .collect(Collectors.joining(\", \"));\r\n+    }\r\n+\r\n+    /**\r\n+     * generate method throws\r\n+     */\r\n+    private String generateMethodThrows(Method method) {\r\n+        Class<?>[] ets = method.getExceptionTypes();\r\n+        if (ets.length > 0) {\r\n+            String list = Arrays.stream(ets).map(Class::getCanonicalName).collect(Collectors.joining(\", \"));\r\n+            return String.format(CODE_METHOD_THROWS, list);\r\n+        } else {\r\n+            return \"\";\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * generate method URL argument null check\r\n+     */\r\n+    private String generateUrlNullCheck(int index) {\r\n+        return String.format(CODE_URL_NULL_CHECK, index, URL.class.getName(), index);\r\n+    }\r\n+\r\n+    /**\r\n+     * generate method content\r\n+     */\r\n+    private String generateMethodContent(Method method) {\r\n+        Adaptive adaptiveAnnotation = method.getAnnotation(Adaptive.class);\r\n+        StringBuilder code = new StringBuilder(512);\r\n+        if (adaptiveAnnotation == null) {\r\n+            return generateUnsupported(method);\r\n+        } else {\r\n+            int urlTypeIndex = getUrlTypeIndex(method);\r\n+\r\n+            // found parameter in URL type\r\n+            if (urlTypeIndex != -1) {\r\n+                // Null Point check\r\n+                code.append(generateUrlNullCheck(urlTypeIndex));\r\n+            } else {\r\n+                // did not find parameter in URL type\r\n+                code.append(generateUrlAssignmentIndirectly(method));\r\n+            }\r\n+\r\n+            String[] value = getMethodAdaptiveValue(adaptiveAnnotation);\r\n+\r\n+            boolean hasInvocation = hasInvocationArgument(method);\r\n+\r\n+            code.append(generateInvocationArgumentNullCheck(method));\r\n+\r\n+            code.append(generateExtNameAssignment(value, hasInvocation));\r\n+            // check extName == null?\r\n+            code.append(generateExtNameNullCheck(value));\r\n+\r\n+            code.append(generateExtensionAssignment());\r\n+\r\n+            // return statement\r\n+            code.append(generateReturnAndInvocation(method));\r\n+        }\r\n+\r\n+        return code.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * generate code for variable extName null check\r\n+     */\r\n+    private String generateExtNameNullCheck(String[] value) {\r\n+        return String.format(CODE_EXT_NAME_NULL_CHECK, type.getName(), Arrays.toString(value));\r\n+    }\r\n+\r\n+    /**\r\n+     * generate extName assignment code\r\n+     */\r\n+    private String generateExtNameAssignment(String[] value, boolean hasInvocation) {\r\n+        // TODO: refactor it\r\n+        String getNameCode = null;\r\n+        for (int i = value.length - 1; i >= 0; --i) {\r\n+            if (i == value.length - 1) {\r\n+                if (null != defaultExtName) {\r\n+                    if (!\"protocol\".equals(value[i])) {\r\n+                        if (hasInvocation) {\r\n+                            getNameCode = String.format(\"url.getMethodParameter(methodName, \\\"%s\\\", \\\"%s\\\")\", value[i], defaultExtName);\r\n+                        } else {\r\n+                            getNameCode = String.format(\"url.getParameter(\\\"%s\\\", \\\"%s\\\")\", value[i], defaultExtName);\r\n+                        }\r\n+                    } else {\r\n+                        getNameCode = String.format(\"( url.getProtocol() == null ? \\\"%s\\\" : url.getProtocol() )\", defaultExtName);\r\n+                    }\r\n+                } else {\r\n+                    if (!\"protocol\".equals(value[i])) {\r\n+                        if (hasInvocation) {\r\n+                            getNameCode = String.format(\"url.getMethodParameter(methodName, \\\"%s\\\", \\\"%s\\\")\", value[i], defaultExtName);\r\n+                        } else {\r\n+                            getNameCode = String.format(\"url.getParameter(\\\"%s\\\")\", value[i]);\r\n+                        }\r\n+                    } else {\r\n+                        getNameCode = \"url.getProtocol()\";\r\n+                    }\r\n+                }\r\n+            } else {\r\n+                if (!\"protocol\".equals(value[i])) {\r\n+                    if (hasInvocation) {\r\n+                        getNameCode = String.format(\"url.getMethodParameter(methodName, \\\"%s\\\", \\\"%s\\\")\", value[i], defaultExtName);\r\n+                    } else {\r\n+                        getNameCode = String.format(\"url.getParameter(\\\"%s\\\", %s)\", value[i], getNameCode);\r\n+                    }\r\n+                } else {\r\n+                    getNameCode = String.format(\"url.getProtocol() == null ? (%s) : url.getProtocol()\", getNameCode);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        return String.format(CODE_EXT_NAME_ASSIGNMENT, getNameCode);\r\n+    }\r\n+\r\n+    /**\r\n+     * @return\r\n+     */\r\n+    private String generateExtensionAssignment() {\r\n+        return String.format(CODE_EXTENSION_ASSIGNMENT, type.getName(), ExtensionLoader.class.getSimpleName(), type.getName());\r\n+    }\r\n+\r\n+    /**\r\n+     * generate method invocation statement and return it if necessary\r\n+     */\r\n+    private String generateReturnAndInvocation(Method method) {\r\n+        String returnStatement = method.getReturnType().equals(void.class) ? \"\" : \"return \";\r\n+\r\n+        String args = IntStream.range(0, method.getParameters().length)\r\n+                .mapToObj(i -> String.format(CODE_EXTENSION_METHOD_INVOKE_ARGUMENT, i))\r\n+                .collect(Collectors.joining(\", \"));\r\n+\r\n+        return returnStatement + String.format(\"extension.%s(%s);\\n\", method.getName(), args);\r\n+    }\r\n+\r\n+    /**\r\n+     * test if method has argument of type <code>Invocation</code>\r\n+     */\r\n+    private boolean hasInvocationArgument(Method method) {\r\n+        Class<?>[] pts = method.getParameterTypes();\r\n+        return Arrays.stream(pts).anyMatch(p -> CLASSNAME_INVOCATION.equals(p.getName()));\r\n+    }\r\n+\r\n+    /**\r\n+     * generate code to test argument of type <code>Invocation</code> is null\r\n+     */\r\n+    private String generateInvocationArgumentNullCheck(Method method) {\r\n+        Class<?>[] pts = method.getParameterTypes();\r\n+        return IntStream.range(0, pts.length).filter(i -> CLASSNAME_INVOCATION.equals(pts[i].getName()))\r\n+                        .mapToObj(i -> String.format(CODE_INVOCATION_ARGUMENT_NULL_CHECK, i, i))\r\n+                        .findFirst().orElse(\"\");\r\n+    }\r\n+\r\n+    /**\r\n+     * get value of adaptive annotation or if empty return splitted simple name\r\n+     */\r\n+    private String[] getMethodAdaptiveValue(Adaptive adaptiveAnnotation) {\r\n+        String[] value = adaptiveAnnotation.value();\r\n+        // value is not set, use the value generated from class name as the key\r\n+        if (value.length == 0) {\r\n+            String splitName = StringUtils.camelToSplitName(type.getSimpleName(), \".\");\r\n+            value = new String[]{splitName};\r\n+        }\r\n+        return value;\r\n+    }\r\n+\r\n+    /**\r\n+     * get parameter with type <code>URL</code> from method parameter:\r\n+     * <p>\r\n+     * test if parameter has method which returns type <code>URL</code>\r\n+     * <p>\r\n+     * if not found, throws IllegalStateException\r\n+     */\r\n+    private String generateUrlAssignmentIndirectly(Method method) {\r\n+        Class<?>[] pts = method.getParameterTypes();\r\n+\r\n+        Map<String, Integer> getterReturnUrl = new HashMap<>();\r\n+        // find URL getter method\r\n+        for (int i = 0; i < pts.length; ++i) {\r\n+            for (Method m : pts[i].getMethods()) {\r\n+                String name = m.getName();\r\n+                if ((name.startsWith(\"get\") || name.length() > 3)\r\n+                        && Modifier.isPublic(m.getModifiers())\r\n+                        && !Modifier.isStatic(m.getModifiers())\r\n+                        && m.getParameterTypes().length == 0\r\n+                        && m.getReturnType() == URL.class) {\r\n+                    getterReturnUrl.put(name, i);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        if (getterReturnUrl.size() <= 0) {\r\n+            // getter method not found, throw\r\n+            throw new IllegalStateException(\"Failed to create adaptive class for interface \" + type.getName()\r\n+                    + \": not found url parameter or url attribute in parameters of method \" + method.getName());\r\n+        }\r\n+\r\n+        Integer index = getterReturnUrl.get(\"getUrl\");\r\n+        if (index != null) {\r\n+            return generateGetUrlNullCheck(index, pts[index], \"getUrl\");\r\n+        } else {\r\n+            Map.Entry<String, Integer> entry = getterReturnUrl.entrySet().iterator().next();\r\n+            return generateGetUrlNullCheck(entry.getValue(), pts[entry.getValue()], entry.getKey());\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * 1, test if argi is null\r\n+     * 2, test if argi.getXX() returns null\r\n+     * 3, assign url with argi.getXX()\r\n+     */\r\n+    private String generateGetUrlNullCheck(int index, Class<?> type, String method) {\r\n+        // Null point check\r\n+        StringBuilder code = new StringBuilder();\r\n+        code.append(String.format(\"if (arg%d == null) throw new IllegalArgumentException(\\\"%s argument == null\\\");\\n\",\r\n+                index, type.getName()));\r\n+        code.append(String.format(\"if (arg%d.%s() == null) throw new IllegalArgumentException(\\\"%s argument %s() == null\\\");\\n\",\r\n+                index, method, type.getName(), method));\r\n+\r\n+        code.append(String.format(\"%s url = arg%d.%s();\\n\", URL.class.getName(), index, method));\r\n+        return code.toString();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/extension/DubboInternalLoadingStrategy.java", "source2": "org/apache/dubbo/common/extension/DubboInternalLoadingStrategy.java", "comments": ["Line-ending 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.common.extension;\n-\n-/**\n- * Dubbo internal {@link LoadingStrategy}\n- *\n- * @since 2.7.7\n- */\n-public class DubboInternalLoadingStrategy implements LoadingStrategy {\n-\n-    @Override\n-    public String directory() {\n-        return \"META-INF/dubbo/internal/\";\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MAX_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.common.extension;\r\n+\r\n+/**\r\n+ * Dubbo internal {@link LoadingStrategy}\r\n+ *\r\n+ * @since 2.7.7\r\n+ */\r\n+public class DubboInternalLoadingStrategy implements LoadingStrategy {\r\n+\r\n+    @Override\r\n+    public String directory() {\r\n+        return \"META-INF/dubbo/internal/\";\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MAX_PRIORITY;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/extension/DubboLoadingStrategy.java", "source2": "org/apache/dubbo/common/extension/DubboLoadingStrategy.java", "comments": ["Line-ending 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.common.extension;\n-\n-/**\n- * Dubbo {@link LoadingStrategy}\n- *\n- * @since 2.7.7\n- */\n-public class DubboLoadingStrategy implements LoadingStrategy {\n-\n-    @Override\n-    public String directory() {\n-        return \"META-INF/dubbo/\";\n-    }\n-\n-    @Override\n-    public boolean overridden() {\n-        return true;\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return NORMAL_PRIORITY;\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.common.extension;\r\n+\r\n+/**\r\n+ * Dubbo {@link LoadingStrategy}\r\n+ *\r\n+ * @since 2.7.7\r\n+ */\r\n+public class DubboLoadingStrategy implements LoadingStrategy {\r\n+\r\n+    @Override\r\n+    public String directory() {\r\n+        return \"META-INF/dubbo/\";\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean overridden() {\r\n+        return true;\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return NORMAL_PRIORITY;\r\n+    }\r\n+\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/extension/ExtensionLoader.java", "source2": "org/apache/dubbo/common/extension/ExtensionLoader.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,1047 +1,1047 @@\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.common.extension;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.context.Lifecycle;\n-import org.apache.dubbo.common.extension.support.ActivateComparator;\n-import org.apache.dubbo.common.extension.support.WrapperComparator;\n-import org.apache.dubbo.common.lang.Prioritized;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ArrayUtils;\n-import org.apache.dubbo.common.utils.ClassUtils;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.ConcurrentHashSet;\n-import org.apache.dubbo.common.utils.ConfigUtils;\n-import org.apache.dubbo.common.utils.Holder;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.io.BufferedReader;\n-import java.io.InputStreamReader;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Modifier;\n-import java.nio.charset.StandardCharsets;\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.Collections;\n-import java.util.Enumeration;\n-import java.util.HashMap;\n-import java.util.LinkedHashSet;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.ServiceLoader;\n-import java.util.Set;\n-import java.util.TreeSet;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-import java.util.regex.Pattern;\n-\n-import static java.util.Arrays.asList;\n-import static java.util.Collections.sort;\n-import static java.util.ServiceLoader.load;\n-import static java.util.stream.StreamSupport.stream;\n-import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.REMOVE_VALUE_PREFIX;\n-\n-/**\n- * {@link org.apache.dubbo.rpc.model.ApplicationModel}, {@code DubboBootstrap} and this class are\n- * at present designed to be singleton or static (by itself totally static or uses some static fields).\n- * So the instances returned from them are of process or classloader scope. If you want to support\n- * multiple dubbo servers in a single process, you may need to refactor these three classes.\n- * <p>\n- * Load dubbo extensions\n- * <ul>\n- * <li>auto inject dependency extension </li>\n- * <li>auto wrap extension in wrapper </li>\n- * <li>default extension is an adaptive instance</li>\n- * </ul>\n- *\n- * @see <a href=\"http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#Service%20Provider\">Service Provider in Java 5</a>\n- * @see org.apache.dubbo.common.extension.SPI\n- * @see org.apache.dubbo.common.extension.Adaptive\n- * @see org.apache.dubbo.common.extension.Activate\n- */\n-public class ExtensionLoader<T> {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(ExtensionLoader.class);\n-\n-    private static final Pattern NAME_SEPARATOR = Pattern.compile(\"\\\\s*[,]+\\\\s*\");\n-\n-    private static final ConcurrentMap<Class<?>, ExtensionLoader<?>> EXTENSION_LOADERS = new ConcurrentHashMap<>(64);\n-\n-    private static final ConcurrentMap<Class<?>, Object> EXTENSION_INSTANCES = new ConcurrentHashMap<>(64);\n-\n-    private final Class<?> type;\n-\n-    private final ExtensionFactory objectFactory;\n-\n-    private final ConcurrentMap<Class<?>, String> cachedNames = new ConcurrentHashMap<>();\n-\n-    private final Holder<Map<String, Class<?>>> cachedClasses = new Holder<>();\n-\n-    private final Map<String, Object> cachedActivates = new ConcurrentHashMap<>();\n-    private final ConcurrentMap<String, Holder<Object>> cachedInstances = new ConcurrentHashMap<>();\n-    private final Holder<Object> cachedAdaptiveInstance = new Holder<>();\n-    private volatile Class<?> cachedAdaptiveClass = null;\n-    private String cachedDefaultName;\n-    private volatile Throwable createAdaptiveInstanceError;\n-\n-    private Set<Class<?>> cachedWrapperClasses;\n-\n-    private Map<String, IllegalStateException> exceptions = new ConcurrentHashMap<>();\n-\n-    private static volatile LoadingStrategy[] strategies = loadLoadingStrategies();\n-\n-    public static void setLoadingStrategies(LoadingStrategy... strategies) {\n-        if (ArrayUtils.isNotEmpty(strategies)) {\n-            ExtensionLoader.strategies = strategies;\n-        }\n-    }\n-\n-    /**\n-     * Load all {@link Prioritized prioritized} {@link LoadingStrategy Loading Strategies} via {@link ServiceLoader}\n-     *\n-     * @return non-null\n-     * @since 2.7.7\n-     */\n-    private static LoadingStrategy[] loadLoadingStrategies() {\n-        return stream(load(LoadingStrategy.class).spliterator(), false)\n-                .sorted()\n-                .toArray(LoadingStrategy[]::new);\n-    }\n-\n-    /**\n-     * Get all {@link LoadingStrategy Loading Strategies}\n-     *\n-     * @return non-null\n-     * @see LoadingStrategy\n-     * @see Prioritized\n-     * @since 2.7.7\n-     */\n-    public static List<LoadingStrategy> getLoadingStrategies() {\n-        return asList(strategies);\n-    }\n-\n-    private ExtensionLoader(Class<?> type) {\n-        this.type = type;\n-        objectFactory = (type == ExtensionFactory.class ? null : ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension());\n-    }\n-\n-    private static <T> boolean withExtensionAnnotation(Class<T> type) {\n-        return type.isAnnotationPresent(SPI.class);\n-    }\n-\n-    @SuppressWarnings(\"unchecked\")\n-    public static <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) {\n-        if (type == null) {\n-            throw new IllegalArgumentException(\"Extension type == null\");\n-        }\n-        if (!type.isInterface()) {\n-            throw new IllegalArgumentException(\"Extension type (\" + type + \") is not an interface!\");\n-        }\n-        if (!withExtensionAnnotation(type)) {\n-            throw new IllegalArgumentException(\"Extension type (\" + type +\n-                    \") is not an extension, because it is NOT annotated with @\" + SPI.class.getSimpleName() + \"!\");\n-        }\n-\n-        ExtensionLoader<T> loader = (ExtensionLoader<T>) EXTENSION_LOADERS.get(type);\n-        if (loader == null) {\n-            EXTENSION_LOADERS.putIfAbsent(type, new ExtensionLoader<T>(type));\n-            loader = (ExtensionLoader<T>) EXTENSION_LOADERS.get(type);\n-        }\n-        return loader;\n-    }\n-\n-    // For testing purposes only\n-    public static void resetExtensionLoader(Class type) {\n-        ExtensionLoader loader = EXTENSION_LOADERS.get(type);\n-        if (loader != null) {\n-            // Remove all instances associated with this loader as well\n-            Map<String, Class<?>> classes = loader.getExtensionClasses();\n-            for (Map.Entry<String, Class<?>> entry : classes.entrySet()) {\n-                EXTENSION_INSTANCES.remove(entry.getValue());\n-            }\n-            classes.clear();\n-            EXTENSION_LOADERS.remove(type);\n-        }\n-    }\n-\n-    public static void destroyAll() {\n-        EXTENSION_INSTANCES.forEach((_type, instance) -> {\n-            if (instance instanceof Lifecycle) {\n-                Lifecycle lifecycle = (Lifecycle) instance;\n-                try {\n-                    lifecycle.destroy();\n-                } catch (Exception e) {\n-                    logger.error(\"Error destroying extension \" + lifecycle, e);\n-                }\n-            }\n-        });\n-    }\n-\n-    private static ClassLoader findClassLoader() {\n-        return ClassUtils.getClassLoader(ExtensionLoader.class);\n-    }\n-\n-    public String getExtensionName(T extensionInstance) {\n-        return getExtensionName(extensionInstance.getClass());\n-    }\n-\n-    public String getExtensionName(Class<?> extensionClass) {\n-        getExtensionClasses();// load class\n-        return cachedNames.get(extensionClass);\n-    }\n-\n-    /**\n-     * This is equivalent to {@code getActivateExtension(url, key, null)}\n-     *\n-     * @param url url\n-     * @param key url parameter key which used to get extension point names\n-     * @return extension list which are activated.\n-     * @see #getActivateExtension(org.apache.dubbo.common.URL, String, String)\n-     */\n-    public List<T> getActivateExtension(URL url, String key) {\n-        return getActivateExtension(url, key, null);\n-    }\n-\n-    /**\n-     * This is equivalent to {@code getActivateExtension(url, values, null)}\n-     *\n-     * @param url    url\n-     * @param values extension point names\n-     * @return extension list which are activated\n-     * @see #getActivateExtension(org.apache.dubbo.common.URL, String[], String)\n-     */\n-    public List<T> getActivateExtension(URL url, String[] values) {\n-        return getActivateExtension(url, values, null);\n-    }\n-\n-    /**\n-     * This is equivalent to {@code getActivateExtension(url, url.getParameter(key).split(\",\"), null)}\n-     *\n-     * @param url   url\n-     * @param key   url parameter key which used to get extension point names\n-     * @param group group\n-     * @return extension list which are activated.\n-     * @see #getActivateExtension(org.apache.dubbo.common.URL, String[], String)\n-     */\n-    public List<T> getActivateExtension(URL url, String key, String group) {\n-        String value = url.getParameter(key);\n-        return getActivateExtension(url, StringUtils.isEmpty(value) ? null : COMMA_SPLIT_PATTERN.split(value), group);\n-    }\n-\n-    /**\n-     * Get activate extensions.\n-     *\n-     * @param url    url\n-     * @param values extension point names\n-     * @param group  group\n-     * @return extension list which are activated\n-     * @see org.apache.dubbo.common.extension.Activate\n-     */\n-    public List<T> getActivateExtension(URL url, String[] values, String group) {\n-        List<T> activateExtensions = new ArrayList<>();\n-        List<String> names = values == null ? new ArrayList<>(0) : asList(values);\n-        if (!names.contains(REMOVE_VALUE_PREFIX + DEFAULT_KEY)) {\n-            getExtensionClasses();\n-            for (Map.Entry<String, Object> entry : cachedActivates.entrySet()) {\n-                String name = entry.getKey();\n-                Object activate = entry.getValue();\n-\n-                String[] activateGroup, activateValue;\n-\n-                if (activate instanceof Activate) {\n-                    activateGroup = ((Activate) activate).group();\n-                    activateValue = ((Activate) activate).value();\n-                } else if (activate instanceof com.alibaba.dubbo.common.extension.Activate) {\n-                    activateGroup = ((com.alibaba.dubbo.common.extension.Activate) activate).group();\n-                    activateValue = ((com.alibaba.dubbo.common.extension.Activate) activate).value();\n-                } else {\n-                    continue;\n-                }\n-                if (isMatchGroup(group, activateGroup)\n-                        && !names.contains(name)\n-                        && !names.contains(REMOVE_VALUE_PREFIX + name)\n-                        && isActive(activateValue, url)) {\n-                    activateExtensions.add(getExtension(name));\n-                }\n-            }\n-            activateExtensions.sort(ActivateComparator.COMPARATOR);\n-        }\n-        List<T> loadedExtensions = new ArrayList<>();\n-        for (int i = 0; i < names.size(); i++) {\n-            String name = names.get(i);\n-            if (!name.startsWith(REMOVE_VALUE_PREFIX)\n-                    && !names.contains(REMOVE_VALUE_PREFIX + name)) {\n-                if (DEFAULT_KEY.equals(name)) {\n-                    if (!loadedExtensions.isEmpty()) {\n-                        activateExtensions.addAll(0, loadedExtensions);\n-                        loadedExtensions.clear();\n-                    }\n-                } else {\n-                    loadedExtensions.add(getExtension(name));\n-                }\n-            }\n-        }\n-        if (!loadedExtensions.isEmpty()) {\n-            activateExtensions.addAll(loadedExtensions);\n-        }\n-        return activateExtensions;\n-    }\n-\n-    private boolean isMatchGroup(String group, String[] groups) {\n-        if (StringUtils.isEmpty(group)) {\n-            return true;\n-        }\n-        if (groups != null && groups.length > 0) {\n-            for (String g : groups) {\n-                if (group.equals(g)) {\n-                    return true;\n-                }\n-            }\n-        }\n-        return false;\n-    }\n-\n-    private boolean isActive(String[] keys, URL url) {\n-        if (keys.length == 0) {\n-            return true;\n-        }\n-        for (String key : keys) {\n-            // @Active(value=\"key1:value1, key2:value2\")\n-            String keyValue = null;\n-            if (key.contains(\":\")) {\n-                String[] arr = key.split(\":\");\n-                key = arr[0];\n-                keyValue = arr[1];\n-            }\n-\n-            for (Map.Entry<String, String> entry : url.getParameters().entrySet()) {\n-                String k = entry.getKey();\n-                String v = entry.getValue();\n-                if ((k.equals(key) || k.endsWith(\".\" + key))\n-                        && ((keyValue != null && keyValue.equals(v)) || (keyValue == null && ConfigUtils.isNotEmpty(v)))) {\n-                    return true;\n-                }\n-            }\n-        }\n-        return false;\n-    }\n-\n-    /**\n-     * Get extension's instance. Return <code>null</code> if extension is not found or is not initialized. Pls. note\n-     * that this method will not trigger extension load.\n-     * <p>\n-     * In order to trigger extension load, call {@link #getExtension(String)} instead.\n-     *\n-     * @see #getExtension(String)\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public T getLoadedExtension(String name) {\n-        if (StringUtils.isEmpty(name)) {\n-            throw new IllegalArgumentException(\"Extension name == null\");\n-        }\n-        Holder<Object> holder = getOrCreateHolder(name);\n-        return (T) holder.get();\n-    }\n-\n-    private Holder<Object> getOrCreateHolder(String name) {\n-        Holder<Object> holder = cachedInstances.get(name);\n-        if (holder == null) {\n-            cachedInstances.putIfAbsent(name, new Holder<>());\n-            holder = cachedInstances.get(name);\n-        }\n-        return holder;\n-    }\n-\n-    /**\n-     * Return the list of extensions which are already loaded.\n-     * <p>\n-     * Usually {@link #getSupportedExtensions()} should be called in order to get all extensions.\n-     *\n-     * @see #getSupportedExtensions()\n-     */\n-    public Set<String> getLoadedExtensions() {\n-        return Collections.unmodifiableSet(new TreeSet<>(cachedInstances.keySet()));\n-    }\n-\n-    public List<T> getLoadedExtensionInstances() {\n-        List<T> instances = new ArrayList<>();\n-        cachedInstances.values().forEach(holder -> instances.add((T) holder.get()));\n-        return instances;\n-    }\n-\n-    public Object getLoadedAdaptiveExtensionInstances() {\n-        return cachedAdaptiveInstance.get();\n-    }\n-\n-//    public T getPrioritizedExtensionInstance() {\n-//        Set<String> supported = getSupportedExtensions();\n-//\n-//        Set<T> instances = new HashSet<>();\n-//        Set<T> prioritized = new HashSet<>();\n-//        for (String s : supported) {\n-//\n-//        }\n-//\n-//    }\n-\n-    /**\n-     * Find the extension with the given name. If the specified name is not found, then {@link IllegalStateException}\n-     * will be thrown.\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public T getExtension(String name) {\n-        return getExtension(name, true);\n-    }\n-\n-    public T getExtension(String name, boolean wrap) {\n-        if (StringUtils.isEmpty(name)) {\n-            throw new IllegalArgumentException(\"Extension name == null\");\n-        }\n-        if (\"true\".equals(name)) {\n-            return getDefaultExtension();\n-        }\n-        final Holder<Object> holder = getOrCreateHolder(name);\n-        Object instance = holder.get();\n-        if (instance == null) {\n-            synchronized (holder) {\n-                instance = holder.get();\n-                if (instance == null) {\n-                    instance = createExtension(name, wrap);\n-                    holder.set(instance);\n-                }\n-            }\n-        }\n-        return (T) instance;\n-    }\n-\n-    /**\n-     * Get the extension by specified name if found, or {@link #getDefaultExtension() returns the default one}\n-     *\n-     * @param name the name of extension\n-     * @return non-null\n-     */\n-    public T getOrDefaultExtension(String name) {\n-        return containsExtension(name) ? getExtension(name) : getDefaultExtension();\n-    }\n-\n-    /**\n-     * Return default extension, return <code>null</code> if it's not configured.\n-     */\n-    public T getDefaultExtension() {\n-        getExtensionClasses();\n-        if (StringUtils.isBlank(cachedDefaultName) || \"true\".equals(cachedDefaultName)) {\n-            return null;\n-        }\n-        return getExtension(cachedDefaultName);\n-    }\n-\n-    public boolean hasExtension(String name) {\n-        if (StringUtils.isEmpty(name)) {\n-            throw new IllegalArgumentException(\"Extension name == null\");\n-        }\n-        Class<?> c = this.getExtensionClass(name);\n-        return c != null;\n-    }\n-\n-    public Set<String> getSupportedExtensions() {\n-        Map<String, Class<?>> clazzes = getExtensionClasses();\n-        return Collections.unmodifiableSet(new TreeSet<>(clazzes.keySet()));\n-    }\n-\n-    public Set<T> getSupportedExtensionInstances() {\n-        List<T> instances = new LinkedList<>();\n-        Set<String> supportedExtensions = getSupportedExtensions();\n-        if (CollectionUtils.isNotEmpty(supportedExtensions)) {\n-            for (String name : supportedExtensions) {\n-                instances.add(getExtension(name));\n-            }\n-        }\n-        // sort the Prioritized instances\n-        sort(instances, Prioritized.COMPARATOR);\n-        return new LinkedHashSet<>(instances);\n-    }\n-\n-    /**\n-     * Return default extension name, return <code>null</code> if not configured.\n-     */\n-    public String getDefaultExtensionName() {\n-        getExtensionClasses();\n-        return cachedDefaultName;\n-    }\n-\n-    /**\n-     * Register new extension via API\n-     *\n-     * @param name  extension name\n-     * @param clazz extension class\n-     * @throws IllegalStateException when extension with the same name has already been registered.\n-     */\n-    public void addExtension(String name, Class<?> clazz) {\n-        getExtensionClasses(); // load classes\n-\n-        if (!type.isAssignableFrom(clazz)) {\n-            throw new IllegalStateException(\"Input type \" +\n-                    clazz + \" doesn't implement the Extension \" + type);\n-        }\n-        if (clazz.isInterface()) {\n-            throw new IllegalStateException(\"Input type \" +\n-                    clazz + \" can't be interface!\");\n-        }\n-\n-        if (!clazz.isAnnotationPresent(Adaptive.class)) {\n-            if (StringUtils.isBlank(name)) {\n-                throw new IllegalStateException(\"Extension name is blank (Extension \" + type + \")!\");\n-            }\n-            if (cachedClasses.get().containsKey(name)) {\n-                throw new IllegalStateException(\"Extension name \" +\n-                        name + \" already exists (Extension \" + type + \")!\");\n-            }\n-\n-            cachedNames.put(clazz, name);\n-            cachedClasses.get().put(name, clazz);\n-        } else {\n-            if (cachedAdaptiveClass != null) {\n-                throw new IllegalStateException(\"Adaptive Extension already exists (Extension \" + type + \")!\");\n-            }\n-\n-            cachedAdaptiveClass = clazz;\n-        }\n-    }\n-\n-    /**\n-     * Replace the existing extension via API\n-     *\n-     * @param name  extension name\n-     * @param clazz extension class\n-     * @throws IllegalStateException when extension to be placed doesn't exist\n-     * @deprecated not recommended any longer, and use only when test\n-     */\n-    @Deprecated\n-    public void replaceExtension(String name, Class<?> clazz) {\n-        getExtensionClasses(); // load classes\n-\n-        if (!type.isAssignableFrom(clazz)) {\n-            throw new IllegalStateException(\"Input type \" +\n-                    clazz + \" doesn't implement Extension \" + type);\n-        }\n-        if (clazz.isInterface()) {\n-            throw new IllegalStateException(\"Input type \" +\n-                    clazz + \" can't be interface!\");\n-        }\n-\n-        if (!clazz.isAnnotationPresent(Adaptive.class)) {\n-            if (StringUtils.isBlank(name)) {\n-                throw new IllegalStateException(\"Extension name is blank (Extension \" + type + \")!\");\n-            }\n-            if (!cachedClasses.get().containsKey(name)) {\n-                throw new IllegalStateException(\"Extension name \" +\n-                        name + \" doesn't exist (Extension \" + type + \")!\");\n-            }\n-\n-            cachedNames.put(clazz, name);\n-            cachedClasses.get().put(name, clazz);\n-            cachedInstances.remove(name);\n-        } else {\n-            if (cachedAdaptiveClass == null) {\n-                throw new IllegalStateException(\"Adaptive Extension doesn't exist (Extension \" + type + \")!\");\n-            }\n-\n-            cachedAdaptiveClass = clazz;\n-            cachedAdaptiveInstance.set(null);\n-        }\n-    }\n-\n-    @SuppressWarnings(\"unchecked\")\n-    public T getAdaptiveExtension() {\n-        Object instance = cachedAdaptiveInstance.get();\n-        if (instance == null) {\n-            if (createAdaptiveInstanceError != null) {\n-                throw new IllegalStateException(\"Failed to create adaptive instance: \" +\n-                        createAdaptiveInstanceError.toString(),\n-                        createAdaptiveInstanceError);\n-            }\n-\n-            synchronized (cachedAdaptiveInstance) {\n-                instance = cachedAdaptiveInstance.get();\n-                if (instance == null) {\n-                    try {\n-                        instance = createAdaptiveExtension();\n-                        cachedAdaptiveInstance.set(instance);\n-                    } catch (Throwable t) {\n-                        createAdaptiveInstanceError = t;\n-                        throw new IllegalStateException(\"Failed to create adaptive instance: \" + t.toString(), t);\n-                    }\n-                }\n-            }\n-        }\n-\n-        return (T) instance;\n-    }\n-\n-    private IllegalStateException findException(String name) {\n-        StringBuilder buf = new StringBuilder(\"No such extension \" + type.getName() + \" by name \" + name);\n-\n-        int i = 1;\n-        for (Map.Entry<String, IllegalStateException> entry : exceptions.entrySet()) {\n-            if (entry.getKey().toLowerCase().startsWith(name.toLowerCase())) {\n-                if (i == 1) {\n-                    buf.append(\", possible causes: \");\n-                }\n-                buf.append(\"\\r\\n(\");\n-                buf.append(i++);\n-                buf.append(\") \");\n-                buf.append(entry.getKey());\n-                buf.append(\":\\r\\n\");\n-                buf.append(StringUtils.toString(entry.getValue()));\n-            }\n-        }\n-\n-        if (i == 1) {\n-            buf.append(\", no related exception was found, please check whether related SPI module is missing.\");\n-        }\n-        return new IllegalStateException(buf.toString());\n-    }\n-\n-    @SuppressWarnings(\"unchecked\")\n-    private T createExtension(String name, boolean wrap) {\n-        Class<?> clazz = getExtensionClasses().get(name);\n-        if (clazz == null) {\n-            throw findException(name);\n-        }\n-        try {\n-            T instance = (T) EXTENSION_INSTANCES.get(clazz);\n-            if (instance == null) {\n-                EXTENSION_INSTANCES.putIfAbsent(clazz, clazz.getDeclaredConstructor().newInstance());\n-                instance = (T) EXTENSION_INSTANCES.get(clazz);\n-            }\n-            injectExtension(instance);\n-\n-\n-            if (wrap) {\n-\n-                List<Class<?>> wrapperClassesList = new ArrayList<>();\n-                if (cachedWrapperClasses != null) {\n-                    wrapperClassesList.addAll(cachedWrapperClasses);\n-                    wrapperClassesList.sort(WrapperComparator.COMPARATOR);\n-                    Collections.reverse(wrapperClassesList);\n-                }\n-\n-                if (CollectionUtils.isNotEmpty(wrapperClassesList)) {\n-                    for (Class<?> wrapperClass : wrapperClassesList) {\n-                        Wrapper wrapper = wrapperClass.getAnnotation(Wrapper.class);\n-                        if (wrapper == null\n-                                || (ArrayUtils.contains(wrapper.matches(), name) && !ArrayUtils.contains(wrapper.mismatches(), name))) {\n-                            instance = injectExtension((T) wrapperClass.getConstructor(type).newInstance(instance));\n-                        }\n-                    }\n-                }\n-            }\n-\n-            initExtension(instance);\n-            return instance;\n-        } catch (Throwable t) {\n-            throw new IllegalStateException(\"Extension instance (name: \" + name + \", class: \" +\n-                    type + \") couldn't be instantiated: \" + t.getMessage(), t);\n-        }\n-    }\n-\n-    private boolean containsExtension(String name) {\n-        return getExtensionClasses().containsKey(name);\n-    }\n-\n-    private T injectExtension(T instance) {\n-\n-        if (objectFactory == null) {\n-            return instance;\n-        }\n-\n-        try {\n-            for (Method method : instance.getClass().getMethods()) {\n-                if (!isSetter(method)) {\n-                    continue;\n-                }\n-                /**\n-                 * Check {@link DisableInject} to see if we need auto injection for this property\n-                 */\n-                if (method.getAnnotation(DisableInject.class) != null) {\n-                    continue;\n-                }\n-                Class<?> pt = method.getParameterTypes()[0];\n-                if (ReflectUtils.isPrimitives(pt)) {\n-                    continue;\n-                }\n-\n-                try {\n-                    String property = getSetterProperty(method);\n-                    Object object = objectFactory.getExtension(pt, property);\n-                    if (object != null) {\n-                        method.invoke(instance, object);\n-                    }\n-                } catch (Exception e) {\n-                    logger.error(\"Failed to inject via method \" + method.getName()\n-                            + \" of interface \" + type.getName() + \": \" + e.getMessage(), e);\n-                }\n-\n-            }\n-        } catch (Exception e) {\n-            logger.error(e.getMessage(), e);\n-        }\n-        return instance;\n-    }\n-\n-    private void initExtension(T instance) {\n-        if (instance instanceof Lifecycle) {\n-            Lifecycle lifecycle = (Lifecycle) instance;\n-            lifecycle.initialize();\n-        }\n-    }\n-\n-    /**\n-     * get properties name for setter, for instance: setVersion, return \"version\"\n-     * <p>\n-     * return \"\", if setter name with length less than 3\n-     */\n-    private String getSetterProperty(Method method) {\n-        return method.getName().length() > 3 ? method.getName().substring(3, 4).toLowerCase() + method.getName().substring(4) : \"\";\n-    }\n-\n-    /**\n-     * return true if and only if:\n-     * <p>\n-     * 1, public\n-     * <p>\n-     * 2, name starts with \"set\"\n-     * <p>\n-     * 3, only has one parameter\n-     */\n-    private boolean isSetter(Method method) {\n-        return method.getName().startsWith(\"set\")\n-                && method.getParameterTypes().length == 1\n-                && Modifier.isPublic(method.getModifiers());\n-    }\n-\n-    private Class<?> getExtensionClass(String name) {\n-        if (type == null) {\n-            throw new IllegalArgumentException(\"Extension type == null\");\n-        }\n-        if (name == null) {\n-            throw new IllegalArgumentException(\"Extension name == null\");\n-        }\n-        return getExtensionClasses().get(name);\n-    }\n-\n-    private Map<String, Class<?>> getExtensionClasses() {\n-        Map<String, Class<?>> classes = cachedClasses.get();\n-        if (classes == null) {\n-            synchronized (cachedClasses) {\n-                classes = cachedClasses.get();\n-                if (classes == null) {\n-                    classes = loadExtensionClasses();\n-                    cachedClasses.set(classes);\n-                }\n-            }\n-        }\n-        return classes;\n-    }\n-\n-    /**\n-     * synchronized in getExtensionClasses\n-     */\n-    private Map<String, Class<?>> loadExtensionClasses() {\n-        cacheDefaultExtensionName();\n-\n-        Map<String, Class<?>> extensionClasses = new HashMap<>();\n-\n-        for (LoadingStrategy strategy : strategies) {\n-            loadDirectory(extensionClasses, strategy.directory(), type.getName(), strategy.preferExtensionClassLoader(), strategy.overridden(), strategy.excludedPackages());\n-            loadDirectory(extensionClasses, strategy.directory(), type.getName().replace(\"org.apache\", \"com.alibaba\"), strategy.preferExtensionClassLoader(), strategy.overridden(), strategy.excludedPackages());\n-        }\n-\n-        return extensionClasses;\n-    }\n-\n-    /**\n-     * extract and cache default extension name if exists\n-     */\n-    private void cacheDefaultExtensionName() {\n-        final SPI defaultAnnotation = type.getAnnotation(SPI.class);\n-        if (defaultAnnotation == null) {\n-            return;\n-        }\n-\n-        String value = defaultAnnotation.value();\n-        if ((value = value.trim()).length() > 0) {\n-            String[] names = NAME_SEPARATOR.split(value);\n-            if (names.length > 1) {\n-                throw new IllegalStateException(\"More than 1 default extension name on extension \" + type.getName()\n-                        + \": \" + Arrays.toString(names));\n-            }\n-            if (names.length == 1) {\n-                cachedDefaultName = names[0];\n-            }\n-        }\n-    }\n-\n-    private void loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type) {\n-        loadDirectory(extensionClasses, dir, type, false, false);\n-    }\n-\n-    private void loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type,\n-                               boolean extensionLoaderClassLoaderFirst, boolean overridden, String... excludedPackages) {\n-        String fileName = dir + type;\n-        try {\n-            Enumeration<java.net.URL> urls = null;\n-            ClassLoader classLoader = findClassLoader();\n-\n-            // try to load from ExtensionLoader's ClassLoader first\n-            if (extensionLoaderClassLoaderFirst) {\n-                ClassLoader extensionLoaderClassLoader = ExtensionLoader.class.getClassLoader();\n-                if (ClassLoader.getSystemClassLoader() != extensionLoaderClassLoader) {\n-                    urls = extensionLoaderClassLoader.getResources(fileName);\n-                }\n-            }\n-\n-            if (urls == null || !urls.hasMoreElements()) {\n-                if (classLoader != null) {\n-                    urls = classLoader.getResources(fileName);\n-                } else {\n-                    urls = ClassLoader.getSystemResources(fileName);\n-                }\n-            }\n-\n-            if (urls != null) {\n-                while (urls.hasMoreElements()) {\n-                    java.net.URL resourceURL = urls.nextElement();\n-                    loadResource(extensionClasses, classLoader, resourceURL, overridden, excludedPackages);\n-                }\n-            }\n-        } catch (Throwable t) {\n-            logger.error(\"Exception occurred when loading extension class (interface: \" +\n-                    type + \", description file: \" + fileName + \").\", t);\n-        }\n-    }\n-\n-    private void loadResource(Map<String, Class<?>> extensionClasses, ClassLoader classLoader,\n-                              java.net.URL resourceURL, boolean overridden, String... excludedPackages) {\n-        try {\n-            try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceURL.openStream(), StandardCharsets.UTF_8))) {\n-                String line;\n-                String clazz = null;\n-                while ((line = reader.readLine()) != null) {\n-                    final int ci = line.indexOf('#');\n-                    if (ci >= 0) {\n-                        line = line.substring(0, ci);\n-                    }\n-                    line = line.trim();\n-                    if (line.length() > 0) {\n-                        try {\n-                            String name = null;\n-                            int i = line.indexOf('=');\n-                            if (i > 0) {\n-                                name = line.substring(0, i).trim();\n-                                clazz = line.substring(i + 1).trim();\n-                            } else {\n-                                clazz = line;\n-                            }\n-                            if (StringUtils.isNotEmpty(clazz) && !isExcluded(clazz, excludedPackages)) {\n-                                loadClass(extensionClasses, resourceURL, Class.forName(clazz, true, classLoader), name, overridden);\n-                            }\n-                        } catch (Throwable t) {\n-                            IllegalStateException e = new IllegalStateException(\"Failed to load extension class (interface: \" + type + \", class line: \" + line + \") in \" + resourceURL + \", cause: \" + t.getMessage(), t);\n-                            exceptions.put(line, e);\n-                        }\n-                    }\n-                }\n-            }\n-        } catch (Throwable t) {\n-            logger.error(\"Exception occurred when loading extension class (interface: \" +\n-                    type + \", class file: \" + resourceURL + \") in \" + resourceURL, t);\n-        }\n-    }\n-\n-    private boolean isExcluded(String className, String... excludedPackages) {\n-        if (excludedPackages != null) {\n-            for (String excludePackage : excludedPackages) {\n-                if (className.startsWith(excludePackage + \".\")) {\n-                    return true;\n-                }\n-            }\n-        }\n-        return false;\n-    }\n-\n-    private void loadClass(Map<String, Class<?>> extensionClasses, java.net.URL resourceURL, Class<?> clazz, String name,\n-                           boolean overridden) throws NoSuchMethodException {\n-        if (!type.isAssignableFrom(clazz)) {\n-            throw new IllegalStateException(\"Error occurred when loading extension class (interface: \" +\n-                    type + \", class line: \" + clazz.getName() + \"), class \"\n-                    + clazz.getName() + \" is not subtype of interface.\");\n-        }\n-        if (clazz.isAnnotationPresent(Adaptive.class)) {\n-            cacheAdaptiveClass(clazz, overridden);\n-        } else if (isWrapperClass(clazz)) {\n-            cacheWrapperClass(clazz);\n-        } else {\n-            clazz.getConstructor();\n-            if (StringUtils.isEmpty(name)) {\n-                name = findAnnotationName(clazz);\n-                if (name.length() == 0) {\n-                    throw new IllegalStateException(\"No such extension name for the class \" + clazz.getName() + \" in the config \" + resourceURL);\n-                }\n-            }\n-\n-            String[] names = NAME_SEPARATOR.split(name);\n-            if (ArrayUtils.isNotEmpty(names)) {\n-                cacheActivateClass(clazz, names[0]);\n-                for (String n : names) {\n-                    cacheName(clazz, n);\n-                    saveInExtensionClass(extensionClasses, clazz, n, overridden);\n-                }\n-            }\n-        }\n-    }\n-\n-    /**\n-     * cache name\n-     */\n-    private void cacheName(Class<?> clazz, String name) {\n-        if (!cachedNames.containsKey(clazz)) {\n-            cachedNames.put(clazz, name);\n-        }\n-    }\n-\n-    /**\n-     * put clazz in extensionClasses\n-     */\n-    private void saveInExtensionClass(Map<String, Class<?>> extensionClasses, Class<?> clazz, String name, boolean overridden) {\n-        Class<?> c = extensionClasses.get(name);\n-        if (c == null || overridden) {\n-            extensionClasses.put(name, clazz);\n-        } else if (c != clazz) {\n-            String duplicateMsg = \"Duplicate extension \" + type.getName() + \" name \" + name + \" on \" + c.getName() + \" and \" + clazz.getName();\n-            logger.error(duplicateMsg);\n-            throw new IllegalStateException(duplicateMsg);\n-        }\n-    }\n-\n-    /**\n-     * cache Activate class which is annotated with <code>Activate</code>\n-     * <p>\n-     * for compatibility, also cache class with old alibaba Activate annotation\n-     */\n-    private void cacheActivateClass(Class<?> clazz, String name) {\n-        Activate activate = clazz.getAnnotation(Activate.class);\n-        if (activate != null) {\n-            cachedActivates.put(name, activate);\n-        } else {\n-            // support com.alibaba.dubbo.common.extension.Activate\n-            com.alibaba.dubbo.common.extension.Activate oldActivate = clazz.getAnnotation(com.alibaba.dubbo.common.extension.Activate.class);\n-            if (oldActivate != null) {\n-                cachedActivates.put(name, oldActivate);\n-            }\n-        }\n-    }\n-\n-    /**\n-     * cache Adaptive class which is annotated with <code>Adaptive</code>\n-     */\n-    private void cacheAdaptiveClass(Class<?> clazz, boolean overridden) {\n-        if (cachedAdaptiveClass == null || overridden) {\n-            cachedAdaptiveClass = clazz;\n-        } else if (!cachedAdaptiveClass.equals(clazz)) {\n-            throw new IllegalStateException(\"More than 1 adaptive class found: \"\n-                    + cachedAdaptiveClass.getName()\n-                    + \", \" + clazz.getName());\n-        }\n-    }\n-\n-    /**\n-     * cache wrapper class\n-     * <p>\n-     * like: ProtocolFilterWrapper, ProtocolListenerWrapper\n-     */\n-    private void cacheWrapperClass(Class<?> clazz) {\n-        if (cachedWrapperClasses == null) {\n-            cachedWrapperClasses = new ConcurrentHashSet<>();\n-        }\n-        cachedWrapperClasses.add(clazz);\n-    }\n-\n-    /**\n-     * test if clazz is a wrapper class\n-     * <p>\n-     * which has Constructor with given class type as its only argument\n-     */\n-    private boolean isWrapperClass(Class<?> clazz) {\n-        try {\n-            clazz.getConstructor(type);\n-            return true;\n-        } catch (NoSuchMethodException e) {\n-            return false;\n-        }\n-    }\n-\n-    @SuppressWarnings(\"deprecation\")\n-    private String findAnnotationName(Class<?> clazz) {\n-        org.apache.dubbo.common.Extension extension = clazz.getAnnotation(org.apache.dubbo.common.Extension.class);\n-        if (extension != null) {\n-            return extension.value();\n-        }\n-\n-        String name = clazz.getSimpleName();\n-        if (name.endsWith(type.getSimpleName())) {\n-            name = name.substring(0, name.length() - type.getSimpleName().length());\n-        }\n-        return name.toLowerCase();\n-    }\n-\n-    @SuppressWarnings(\"unchecked\")\n-    private T createAdaptiveExtension() {\n-        try {\n-            return injectExtension((T) getAdaptiveExtensionClass().newInstance());\n-        } catch (Exception e) {\n-            throw new IllegalStateException(\"Can't create adaptive extension \" + type + \", cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-    private Class<?> getAdaptiveExtensionClass() {\n-        getExtensionClasses();\n-        if (cachedAdaptiveClass != null) {\n-            return cachedAdaptiveClass;\n-        }\n-        return cachedAdaptiveClass = createAdaptiveExtensionClass();\n-    }\n-\n-    private Class<?> createAdaptiveExtensionClass() {\n-        String code = new AdaptiveClassCodeGenerator(type, cachedDefaultName).generate();\n-        ClassLoader classLoader = findClassLoader();\n-        org.apache.dubbo.common.compiler.Compiler compiler = ExtensionLoader.getExtensionLoader(org.apache.dubbo.common.compiler.Compiler.class).getAdaptiveExtension();\n-        return compiler.compile(code, classLoader);\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return this.getClass().getName() + \"[\" + type.getName() + \"]\";\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.common.extension;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.context.Lifecycle;\r\n+import org.apache.dubbo.common.extension.support.ActivateComparator;\r\n+import org.apache.dubbo.common.extension.support.WrapperComparator;\r\n+import org.apache.dubbo.common.lang.Prioritized;\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.ArrayUtils;\r\n+import org.apache.dubbo.common.utils.ClassUtils;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.ConcurrentHashSet;\r\n+import org.apache.dubbo.common.utils.ConfigUtils;\r\n+import org.apache.dubbo.common.utils.Holder;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.io.BufferedReader;\r\n+import java.io.InputStreamReader;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Modifier;\r\n+import java.nio.charset.StandardCharsets;\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+import java.util.Collections;\r\n+import java.util.Enumeration;\r\n+import java.util.HashMap;\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.ServiceLoader;\r\n+import java.util.Set;\r\n+import java.util.TreeSet;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+import java.util.regex.Pattern;\r\n+\r\n+import static java.util.Arrays.asList;\r\n+import static java.util.Collections.sort;\r\n+import static java.util.ServiceLoader.load;\r\n+import static java.util.stream.StreamSupport.stream;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.REMOVE_VALUE_PREFIX;\r\n+\r\n+/**\r\n+ * {@link org.apache.dubbo.rpc.model.ApplicationModel}, {@code DubboBootstrap} and this class are\r\n+ * at present designed to be singleton or static (by itself totally static or uses some static fields).\r\n+ * So the instances returned from them are of process or classloader scope. If you want to support\r\n+ * multiple dubbo servers in a single process, you may need to refactor these three classes.\r\n+ * <p>\r\n+ * Load dubbo extensions\r\n+ * <ul>\r\n+ * <li>auto inject dependency extension </li>\r\n+ * <li>auto wrap extension in wrapper </li>\r\n+ * <li>default extension is an adaptive instance</li>\r\n+ * </ul>\r\n+ *\r\n+ * @see <a href=\"http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#Service%20Provider\">Service Provider in Java 5</a>\r\n+ * @see org.apache.dubbo.common.extension.SPI\r\n+ * @see org.apache.dubbo.common.extension.Adaptive\r\n+ * @see org.apache.dubbo.common.extension.Activate\r\n+ */\r\n+public class ExtensionLoader<T> {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(ExtensionLoader.class);\r\n+\r\n+    private static final Pattern NAME_SEPARATOR = Pattern.compile(\"\\\\s*[,]+\\\\s*\");\r\n+\r\n+    private static final ConcurrentMap<Class<?>, ExtensionLoader<?>> EXTENSION_LOADERS = new ConcurrentHashMap<>(64);\r\n+\r\n+    private static final ConcurrentMap<Class<?>, Object> EXTENSION_INSTANCES = new ConcurrentHashMap<>(64);\r\n+\r\n+    private final Class<?> type;\r\n+\r\n+    private final ExtensionFactory objectFactory;\r\n+\r\n+    private final ConcurrentMap<Class<?>, String> cachedNames = new ConcurrentHashMap<>();\r\n+\r\n+    private final Holder<Map<String, Class<?>>> cachedClasses = new Holder<>();\r\n+\r\n+    private final Map<String, Object> cachedActivates = new ConcurrentHashMap<>();\r\n+    private final ConcurrentMap<String, Holder<Object>> cachedInstances = new ConcurrentHashMap<>();\r\n+    private final Holder<Object> cachedAdaptiveInstance = new Holder<>();\r\n+    private volatile Class<?> cachedAdaptiveClass = null;\r\n+    private String cachedDefaultName;\r\n+    private volatile Throwable createAdaptiveInstanceError;\r\n+\r\n+    private Set<Class<?>> cachedWrapperClasses;\r\n+\r\n+    private Map<String, IllegalStateException> exceptions = new ConcurrentHashMap<>();\r\n+\r\n+    private static volatile LoadingStrategy[] strategies = loadLoadingStrategies();\r\n+\r\n+    public static void setLoadingStrategies(LoadingStrategy... strategies) {\r\n+        if (ArrayUtils.isNotEmpty(strategies)) {\r\n+            ExtensionLoader.strategies = strategies;\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Load all {@link Prioritized prioritized} {@link LoadingStrategy Loading Strategies} via {@link ServiceLoader}\r\n+     *\r\n+     * @return non-null\r\n+     * @since 2.7.7\r\n+     */\r\n+    private static LoadingStrategy[] loadLoadingStrategies() {\r\n+        return stream(load(LoadingStrategy.class).spliterator(), false)\r\n+                .sorted()\r\n+                .toArray(LoadingStrategy[]::new);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all {@link LoadingStrategy Loading Strategies}\r\n+     *\r\n+     * @return non-null\r\n+     * @see LoadingStrategy\r\n+     * @see Prioritized\r\n+     * @since 2.7.7\r\n+     */\r\n+    public static List<LoadingStrategy> getLoadingStrategies() {\r\n+        return asList(strategies);\r\n+    }\r\n+\r\n+    private ExtensionLoader(Class<?> type) {\r\n+        this.type = type;\r\n+        objectFactory = (type == ExtensionFactory.class ? null : ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension());\r\n+    }\r\n+\r\n+    private static <T> boolean withExtensionAnnotation(Class<T> type) {\r\n+        return type.isAnnotationPresent(SPI.class);\r\n+    }\r\n+\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public static <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) {\r\n+        if (type == null) {\r\n+            throw new IllegalArgumentException(\"Extension type == null\");\r\n+        }\r\n+        if (!type.isInterface()) {\r\n+            throw new IllegalArgumentException(\"Extension type (\" + type + \") is not an interface!\");\r\n+        }\r\n+        if (!withExtensionAnnotation(type)) {\r\n+            throw new IllegalArgumentException(\"Extension type (\" + type +\r\n+                    \") is not an extension, because it is NOT annotated with @\" + SPI.class.getSimpleName() + \"!\");\r\n+        }\r\n+\r\n+        ExtensionLoader<T> loader = (ExtensionLoader<T>) EXTENSION_LOADERS.get(type);\r\n+        if (loader == null) {\r\n+            EXTENSION_LOADERS.putIfAbsent(type, new ExtensionLoader<T>(type));\r\n+            loader = (ExtensionLoader<T>) EXTENSION_LOADERS.get(type);\r\n+        }\r\n+        return loader;\r\n+    }\r\n+\r\n+    // For testing purposes only\r\n+    public static void resetExtensionLoader(Class type) {\r\n+        ExtensionLoader loader = EXTENSION_LOADERS.get(type);\r\n+        if (loader != null) {\r\n+            // Remove all instances associated with this loader as well\r\n+            Map<String, Class<?>> classes = loader.getExtensionClasses();\r\n+            for (Map.Entry<String, Class<?>> entry : classes.entrySet()) {\r\n+                EXTENSION_INSTANCES.remove(entry.getValue());\r\n+            }\r\n+            classes.clear();\r\n+            EXTENSION_LOADERS.remove(type);\r\n+        }\r\n+    }\r\n+\r\n+    public static void destroyAll() {\r\n+        EXTENSION_INSTANCES.forEach((_type, instance) -> {\r\n+            if (instance instanceof Lifecycle) {\r\n+                Lifecycle lifecycle = (Lifecycle) instance;\r\n+                try {\r\n+                    lifecycle.destroy();\r\n+                } catch (Exception e) {\r\n+                    logger.error(\"Error destroying extension \" + lifecycle, e);\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    private static ClassLoader findClassLoader() {\r\n+        return ClassUtils.getClassLoader(ExtensionLoader.class);\r\n+    }\r\n+\r\n+    public String getExtensionName(T extensionInstance) {\r\n+        return getExtensionName(extensionInstance.getClass());\r\n+    }\r\n+\r\n+    public String getExtensionName(Class<?> extensionClass) {\r\n+        getExtensionClasses();// load class\r\n+        return cachedNames.get(extensionClass);\r\n+    }\r\n+\r\n+    /**\r\n+     * This is equivalent to {@code getActivateExtension(url, key, null)}\r\n+     *\r\n+     * @param url url\r\n+     * @param key url parameter key which used to get extension point names\r\n+     * @return extension list which are activated.\r\n+     * @see #getActivateExtension(org.apache.dubbo.common.URL, String, String)\r\n+     */\r\n+    public List<T> getActivateExtension(URL url, String key) {\r\n+        return getActivateExtension(url, key, null);\r\n+    }\r\n+\r\n+    /**\r\n+     * This is equivalent to {@code getActivateExtension(url, values, null)}\r\n+     *\r\n+     * @param url    url\r\n+     * @param values extension point names\r\n+     * @return extension list which are activated\r\n+     * @see #getActivateExtension(org.apache.dubbo.common.URL, String[], String)\r\n+     */\r\n+    public List<T> getActivateExtension(URL url, String[] values) {\r\n+        return getActivateExtension(url, values, null);\r\n+    }\r\n+\r\n+    /**\r\n+     * This is equivalent to {@code getActivateExtension(url, url.getParameter(key).split(\",\"), null)}\r\n+     *\r\n+     * @param url   url\r\n+     * @param key   url parameter key which used to get extension point names\r\n+     * @param group group\r\n+     * @return extension list which are activated.\r\n+     * @see #getActivateExtension(org.apache.dubbo.common.URL, String[], String)\r\n+     */\r\n+    public List<T> getActivateExtension(URL url, String key, String group) {\r\n+        String value = url.getParameter(key);\r\n+        return getActivateExtension(url, StringUtils.isEmpty(value) ? null : COMMA_SPLIT_PATTERN.split(value), group);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get activate extensions.\r\n+     *\r\n+     * @param url    url\r\n+     * @param values extension point names\r\n+     * @param group  group\r\n+     * @return extension list which are activated\r\n+     * @see org.apache.dubbo.common.extension.Activate\r\n+     */\r\n+    public List<T> getActivateExtension(URL url, String[] values, String group) {\r\n+        List<T> activateExtensions = new ArrayList<>();\r\n+        List<String> names = values == null ? new ArrayList<>(0) : asList(values);\r\n+        if (!names.contains(REMOVE_VALUE_PREFIX + DEFAULT_KEY)) {\r\n+            getExtensionClasses();\r\n+            for (Map.Entry<String, Object> entry : cachedActivates.entrySet()) {\r\n+                String name = entry.getKey();\r\n+                Object activate = entry.getValue();\r\n+\r\n+                String[] activateGroup, activateValue;\r\n+\r\n+                if (activate instanceof Activate) {\r\n+                    activateGroup = ((Activate) activate).group();\r\n+                    activateValue = ((Activate) activate).value();\r\n+                } else if (activate instanceof com.alibaba.dubbo.common.extension.Activate) {\r\n+                    activateGroup = ((com.alibaba.dubbo.common.extension.Activate) activate).group();\r\n+                    activateValue = ((com.alibaba.dubbo.common.extension.Activate) activate).value();\r\n+                } else {\r\n+                    continue;\r\n+                }\r\n+                if (isMatchGroup(group, activateGroup)\r\n+                        && !names.contains(name)\r\n+                        && !names.contains(REMOVE_VALUE_PREFIX + name)\r\n+                        && isActive(activateValue, url)) {\r\n+                    activateExtensions.add(getExtension(name));\r\n+                }\r\n+            }\r\n+            activateExtensions.sort(ActivateComparator.COMPARATOR);\r\n+        }\r\n+        List<T> loadedExtensions = new ArrayList<>();\r\n+        for (int i = 0; i < names.size(); i++) {\r\n+            String name = names.get(i);\r\n+            if (!name.startsWith(REMOVE_VALUE_PREFIX)\r\n+                    && !names.contains(REMOVE_VALUE_PREFIX + name)) {\r\n+                if (DEFAULT_KEY.equals(name)) {\r\n+                    if (!loadedExtensions.isEmpty()) {\r\n+                        activateExtensions.addAll(0, loadedExtensions);\r\n+                        loadedExtensions.clear();\r\n+                    }\r\n+                } else {\r\n+                    loadedExtensions.add(getExtension(name));\r\n+                }\r\n+            }\r\n+        }\r\n+        if (!loadedExtensions.isEmpty()) {\r\n+            activateExtensions.addAll(loadedExtensions);\r\n+        }\r\n+        return activateExtensions;\r\n+    }\r\n+\r\n+    private boolean isMatchGroup(String group, String[] groups) {\r\n+        if (StringUtils.isEmpty(group)) {\r\n+            return true;\r\n+        }\r\n+        if (groups != null && groups.length > 0) {\r\n+            for (String g : groups) {\r\n+                if (group.equals(g)) {\r\n+                    return true;\r\n+                }\r\n+            }\r\n+        }\r\n+        return false;\r\n+    }\r\n+\r\n+    private boolean isActive(String[] keys, URL url) {\r\n+        if (keys.length == 0) {\r\n+            return true;\r\n+        }\r\n+        for (String key : keys) {\r\n+            // @Active(value=\"key1:value1, key2:value2\")\r\n+            String keyValue = null;\r\n+            if (key.contains(\":\")) {\r\n+                String[] arr = key.split(\":\");\r\n+                key = arr[0];\r\n+                keyValue = arr[1];\r\n+            }\r\n+\r\n+            for (Map.Entry<String, String> entry : url.getParameters().entrySet()) {\r\n+                String k = entry.getKey();\r\n+                String v = entry.getValue();\r\n+                if ((k.equals(key) || k.endsWith(\".\" + key))\r\n+                        && ((keyValue != null && keyValue.equals(v)) || (keyValue == null && ConfigUtils.isNotEmpty(v)))) {\r\n+                    return true;\r\n+                }\r\n+            }\r\n+        }\r\n+        return false;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get extension's instance. Return <code>null</code> if extension is not found or is not initialized. Pls. note\r\n+     * that this method will not trigger extension load.\r\n+     * <p>\r\n+     * In order to trigger extension load, call {@link #getExtension(String)} instead.\r\n+     *\r\n+     * @see #getExtension(String)\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public T getLoadedExtension(String name) {\r\n+        if (StringUtils.isEmpty(name)) {\r\n+            throw new IllegalArgumentException(\"Extension name == null\");\r\n+        }\r\n+        Holder<Object> holder = getOrCreateHolder(name);\r\n+        return (T) holder.get();\r\n+    }\r\n+\r\n+    private Holder<Object> getOrCreateHolder(String name) {\r\n+        Holder<Object> holder = cachedInstances.get(name);\r\n+        if (holder == null) {\r\n+            cachedInstances.putIfAbsent(name, new Holder<>());\r\n+            holder = cachedInstances.get(name);\r\n+        }\r\n+        return holder;\r\n+    }\r\n+\r\n+    /**\r\n+     * Return the list of extensions which are already loaded.\r\n+     * <p>\r\n+     * Usually {@link #getSupportedExtensions()} should be called in order to get all extensions.\r\n+     *\r\n+     * @see #getSupportedExtensions()\r\n+     */\r\n+    public Set<String> getLoadedExtensions() {\r\n+        return Collections.unmodifiableSet(new TreeSet<>(cachedInstances.keySet()));\r\n+    }\r\n+\r\n+    public List<T> getLoadedExtensionInstances() {\r\n+        List<T> instances = new ArrayList<>();\r\n+        cachedInstances.values().forEach(holder -> instances.add((T) holder.get()));\r\n+        return instances;\r\n+    }\r\n+\r\n+    public Object getLoadedAdaptiveExtensionInstances() {\r\n+        return cachedAdaptiveInstance.get();\r\n+    }\r\n+\r\n+//    public T getPrioritizedExtensionInstance() {\r\n+//        Set<String> supported = getSupportedExtensions();\r\n+//\r\n+//        Set<T> instances = new HashSet<>();\r\n+//        Set<T> prioritized = new HashSet<>();\r\n+//        for (String s : supported) {\r\n+//\r\n+//        }\r\n+//\r\n+//    }\r\n+\r\n+    /**\r\n+     * Find the extension with the given name. If the specified name is not found, then {@link IllegalStateException}\r\n+     * will be thrown.\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public T getExtension(String name) {\r\n+        return getExtension(name, true);\r\n+    }\r\n+\r\n+    public T getExtension(String name, boolean wrap) {\r\n+        if (StringUtils.isEmpty(name)) {\r\n+            throw new IllegalArgumentException(\"Extension name == null\");\r\n+        }\r\n+        if (\"true\".equals(name)) {\r\n+            return getDefaultExtension();\r\n+        }\r\n+        final Holder<Object> holder = getOrCreateHolder(name);\r\n+        Object instance = holder.get();\r\n+        if (instance == null) {\r\n+            synchronized (holder) {\r\n+                instance = holder.get();\r\n+                if (instance == null) {\r\n+                    instance = createExtension(name, wrap);\r\n+                    holder.set(instance);\r\n+                }\r\n+            }\r\n+        }\r\n+        return (T) instance;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the extension by specified name if found, or {@link #getDefaultExtension() returns the default one}\r\n+     *\r\n+     * @param name the name of extension\r\n+     * @return non-null\r\n+     */\r\n+    public T getOrDefaultExtension(String name) {\r\n+        return containsExtension(name) ? getExtension(name) : getDefaultExtension();\r\n+    }\r\n+\r\n+    /**\r\n+     * Return default extension, return <code>null</code> if it's not configured.\r\n+     */\r\n+    public T getDefaultExtension() {\r\n+        getExtensionClasses();\r\n+        if (StringUtils.isBlank(cachedDefaultName) || \"true\".equals(cachedDefaultName)) {\r\n+            return null;\r\n+        }\r\n+        return getExtension(cachedDefaultName);\r\n+    }\r\n+\r\n+    public boolean hasExtension(String name) {\r\n+        if (StringUtils.isEmpty(name)) {\r\n+            throw new IllegalArgumentException(\"Extension name == null\");\r\n+        }\r\n+        Class<?> c = this.getExtensionClass(name);\r\n+        return c != null;\r\n+    }\r\n+\r\n+    public Set<String> getSupportedExtensions() {\r\n+        Map<String, Class<?>> clazzes = getExtensionClasses();\r\n+        return Collections.unmodifiableSet(new TreeSet<>(clazzes.keySet()));\r\n+    }\r\n+\r\n+    public Set<T> getSupportedExtensionInstances() {\r\n+        List<T> instances = new LinkedList<>();\r\n+        Set<String> supportedExtensions = getSupportedExtensions();\r\n+        if (CollectionUtils.isNotEmpty(supportedExtensions)) {\r\n+            for (String name : supportedExtensions) {\r\n+                instances.add(getExtension(name));\r\n+            }\r\n+        }\r\n+        // sort the Prioritized instances\r\n+        sort(instances, Prioritized.COMPARATOR);\r\n+        return new LinkedHashSet<>(instances);\r\n+    }\r\n+\r\n+    /**\r\n+     * Return default extension name, return <code>null</code> if not configured.\r\n+     */\r\n+    public String getDefaultExtensionName() {\r\n+        getExtensionClasses();\r\n+        return cachedDefaultName;\r\n+    }\r\n+\r\n+    /**\r\n+     * Register new extension via API\r\n+     *\r\n+     * @param name  extension name\r\n+     * @param clazz extension class\r\n+     * @throws IllegalStateException when extension with the same name has already been registered.\r\n+     */\r\n+    public void addExtension(String name, Class<?> clazz) {\r\n+        getExtensionClasses(); // load classes\r\n+\r\n+        if (!type.isAssignableFrom(clazz)) {\r\n+            throw new IllegalStateException(\"Input type \" +\r\n+                    clazz + \" doesn't implement the Extension \" + type);\r\n+        }\r\n+        if (clazz.isInterface()) {\r\n+            throw new IllegalStateException(\"Input type \" +\r\n+                    clazz + \" can't be interface!\");\r\n+        }\r\n+\r\n+        if (!clazz.isAnnotationPresent(Adaptive.class)) {\r\n+            if (StringUtils.isBlank(name)) {\r\n+                throw new IllegalStateException(\"Extension name is blank (Extension \" + type + \")!\");\r\n+            }\r\n+            if (cachedClasses.get().containsKey(name)) {\r\n+                throw new IllegalStateException(\"Extension name \" +\r\n+                        name + \" already exists (Extension \" + type + \")!\");\r\n+            }\r\n+\r\n+            cachedNames.put(clazz, name);\r\n+            cachedClasses.get().put(name, clazz);\r\n+        } else {\r\n+            if (cachedAdaptiveClass != null) {\r\n+                throw new IllegalStateException(\"Adaptive Extension already exists (Extension \" + type + \")!\");\r\n+            }\r\n+\r\n+            cachedAdaptiveClass = clazz;\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Replace the existing extension via API\r\n+     *\r\n+     * @param name  extension name\r\n+     * @param clazz extension class\r\n+     * @throws IllegalStateException when extension to be placed doesn't exist\r\n+     * @deprecated not recommended any longer, and use only when test\r\n+     */\r\n+    @Deprecated\r\n+    public void replaceExtension(String name, Class<?> clazz) {\r\n+        getExtensionClasses(); // load classes\r\n+\r\n+        if (!type.isAssignableFrom(clazz)) {\r\n+            throw new IllegalStateException(\"Input type \" +\r\n+                    clazz + \" doesn't implement Extension \" + type);\r\n+        }\r\n+        if (clazz.isInterface()) {\r\n+            throw new IllegalStateException(\"Input type \" +\r\n+                    clazz + \" can't be interface!\");\r\n+        }\r\n+\r\n+        if (!clazz.isAnnotationPresent(Adaptive.class)) {\r\n+            if (StringUtils.isBlank(name)) {\r\n+                throw new IllegalStateException(\"Extension name is blank (Extension \" + type + \")!\");\r\n+            }\r\n+            if (!cachedClasses.get().containsKey(name)) {\r\n+                throw new IllegalStateException(\"Extension name \" +\r\n+                        name + \" doesn't exist (Extension \" + type + \")!\");\r\n+            }\r\n+\r\n+            cachedNames.put(clazz, name);\r\n+            cachedClasses.get().put(name, clazz);\r\n+            cachedInstances.remove(name);\r\n+        } else {\r\n+            if (cachedAdaptiveClass == null) {\r\n+                throw new IllegalStateException(\"Adaptive Extension doesn't exist (Extension \" + type + \")!\");\r\n+            }\r\n+\r\n+            cachedAdaptiveClass = clazz;\r\n+            cachedAdaptiveInstance.set(null);\r\n+        }\r\n+    }\r\n+\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public T getAdaptiveExtension() {\r\n+        Object instance = cachedAdaptiveInstance.get();\r\n+        if (instance == null) {\r\n+            if (createAdaptiveInstanceError != null) {\r\n+                throw new IllegalStateException(\"Failed to create adaptive instance: \" +\r\n+                        createAdaptiveInstanceError.toString(),\r\n+                        createAdaptiveInstanceError);\r\n+            }\r\n+\r\n+            synchronized (cachedAdaptiveInstance) {\r\n+                instance = cachedAdaptiveInstance.get();\r\n+                if (instance == null) {\r\n+                    try {\r\n+                        instance = createAdaptiveExtension();\r\n+                        cachedAdaptiveInstance.set(instance);\r\n+                    } catch (Throwable t) {\r\n+                        createAdaptiveInstanceError = t;\r\n+                        throw new IllegalStateException(\"Failed to create adaptive instance: \" + t.toString(), t);\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        return (T) instance;\r\n+    }\r\n+\r\n+    private IllegalStateException findException(String name) {\r\n+        StringBuilder buf = new StringBuilder(\"No such extension \" + type.getName() + \" by name \" + name);\r\n+\r\n+        int i = 1;\r\n+        for (Map.Entry<String, IllegalStateException> entry : exceptions.entrySet()) {\r\n+            if (entry.getKey().toLowerCase().startsWith(name.toLowerCase())) {\r\n+                if (i == 1) {\r\n+                    buf.append(\", possible causes: \");\r\n+                }\r\n+                buf.append(\"\\r\\n(\");\r\n+                buf.append(i++);\r\n+                buf.append(\") \");\r\n+                buf.append(entry.getKey());\r\n+                buf.append(\":\\r\\n\");\r\n+                buf.append(StringUtils.toString(entry.getValue()));\r\n+            }\r\n+        }\r\n+\r\n+        if (i == 1) {\r\n+            buf.append(\", no related exception was found, please check whether related SPI module is missing.\");\r\n+        }\r\n+        return new IllegalStateException(buf.toString());\r\n+    }\r\n+\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    private T createExtension(String name, boolean wrap) {\r\n+        Class<?> clazz = getExtensionClasses().get(name);\r\n+        if (clazz == null) {\r\n+            throw findException(name);\r\n+        }\r\n+        try {\r\n+            T instance = (T) EXTENSION_INSTANCES.get(clazz);\r\n+            if (instance == null) {\r\n+                EXTENSION_INSTANCES.putIfAbsent(clazz, clazz.getDeclaredConstructor().newInstance());\r\n+                instance = (T) EXTENSION_INSTANCES.get(clazz);\r\n+            }\r\n+            injectExtension(instance);\r\n+\r\n+\r\n+            if (wrap) {\r\n+\r\n+                List<Class<?>> wrapperClassesList = new ArrayList<>();\r\n+                if (cachedWrapperClasses != null) {\r\n+                    wrapperClassesList.addAll(cachedWrapperClasses);\r\n+                    wrapperClassesList.sort(WrapperComparator.COMPARATOR);\r\n+                    Collections.reverse(wrapperClassesList);\r\n+                }\r\n+\r\n+                if (CollectionUtils.isNotEmpty(wrapperClassesList)) {\r\n+                    for (Class<?> wrapperClass : wrapperClassesList) {\r\n+                        Wrapper wrapper = wrapperClass.getAnnotation(Wrapper.class);\r\n+                        if (wrapper == null\r\n+                                || (ArrayUtils.contains(wrapper.matches(), name) && !ArrayUtils.contains(wrapper.mismatches(), name))) {\r\n+                            instance = injectExtension((T) wrapperClass.getConstructor(type).newInstance(instance));\r\n+                        }\r\n+                    }\r\n+                }\r\n+            }\r\n+\r\n+            initExtension(instance);\r\n+            return instance;\r\n+        } catch (Throwable t) {\r\n+            throw new IllegalStateException(\"Extension instance (name: \" + name + \", class: \" +\r\n+                    type + \") couldn't be instantiated: \" + t.getMessage(), t);\r\n+        }\r\n+    }\r\n+\r\n+    private boolean containsExtension(String name) {\r\n+        return getExtensionClasses().containsKey(name);\r\n+    }\r\n+\r\n+    private T injectExtension(T instance) {\r\n+\r\n+        if (objectFactory == null) {\r\n+            return instance;\r\n+        }\r\n+\r\n+        try {\r\n+            for (Method method : instance.getClass().getMethods()) {\r\n+                if (!isSetter(method)) {\r\n+                    continue;\r\n+                }\r\n+                /**\r\n+                 * Check {@link DisableInject} to see if we need auto injection for this property\r\n+                 */\r\n+                if (method.getAnnotation(DisableInject.class) != null) {\r\n+                    continue;\r\n+                }\r\n+                Class<?> pt = method.getParameterTypes()[0];\r\n+                if (ReflectUtils.isPrimitives(pt)) {\r\n+                    continue;\r\n+                }\r\n+\r\n+                try {\r\n+                    String property = getSetterProperty(method);\r\n+                    Object object = objectFactory.getExtension(pt, property);\r\n+                    if (object != null) {\r\n+                        method.invoke(instance, object);\r\n+                    }\r\n+                } catch (Exception e) {\r\n+                    logger.error(\"Failed to inject via method \" + method.getName()\r\n+                            + \" of interface \" + type.getName() + \": \" + e.getMessage(), e);\r\n+                }\r\n+\r\n+            }\r\n+        } catch (Exception e) {\r\n+            logger.error(e.getMessage(), e);\r\n+        }\r\n+        return instance;\r\n+    }\r\n+\r\n+    private void initExtension(T instance) {\r\n+        if (instance instanceof Lifecycle) {\r\n+            Lifecycle lifecycle = (Lifecycle) instance;\r\n+            lifecycle.initialize();\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * get properties name for setter, for instance: setVersion, return \"version\"\r\n+     * <p>\r\n+     * return \"\", if setter name with length less than 3\r\n+     */\r\n+    private String getSetterProperty(Method method) {\r\n+        return method.getName().length() > 3 ? method.getName().substring(3, 4).toLowerCase() + method.getName().substring(4) : \"\";\r\n+    }\r\n+\r\n+    /**\r\n+     * return true if and only if:\r\n+     * <p>\r\n+     * 1, public\r\n+     * <p>\r\n+     * 2, name starts with \"set\"\r\n+     * <p>\r\n+     * 3, only has one parameter\r\n+     */\r\n+    private boolean isSetter(Method method) {\r\n+        return method.getName().startsWith(\"set\")\r\n+                && method.getParameterTypes().length == 1\r\n+                && Modifier.isPublic(method.getModifiers());\r\n+    }\r\n+\r\n+    private Class<?> getExtensionClass(String name) {\r\n+        if (type == null) {\r\n+            throw new IllegalArgumentException(\"Extension type == null\");\r\n+        }\r\n+        if (name == null) {\r\n+            throw new IllegalArgumentException(\"Extension name == null\");\r\n+        }\r\n+        return getExtensionClasses().get(name);\r\n+    }\r\n+\r\n+    private Map<String, Class<?>> getExtensionClasses() {\r\n+        Map<String, Class<?>> classes = cachedClasses.get();\r\n+        if (classes == null) {\r\n+            synchronized (cachedClasses) {\r\n+                classes = cachedClasses.get();\r\n+                if (classes == null) {\r\n+                    classes = loadExtensionClasses();\r\n+                    cachedClasses.set(classes);\r\n+                }\r\n+            }\r\n+        }\r\n+        return classes;\r\n+    }\r\n+\r\n+    /**\r\n+     * synchronized in getExtensionClasses\r\n+     */\r\n+    private Map<String, Class<?>> loadExtensionClasses() {\r\n+        cacheDefaultExtensionName();\r\n+\r\n+        Map<String, Class<?>> extensionClasses = new HashMap<>();\r\n+\r\n+        for (LoadingStrategy strategy : strategies) {\r\n+            loadDirectory(extensionClasses, strategy.directory(), type.getName(), strategy.preferExtensionClassLoader(), strategy.overridden(), strategy.excludedPackages());\r\n+            loadDirectory(extensionClasses, strategy.directory(), type.getName().replace(\"org.apache\", \"com.alibaba\"), strategy.preferExtensionClassLoader(), strategy.overridden(), strategy.excludedPackages());\r\n+        }\r\n+\r\n+        return extensionClasses;\r\n+    }\r\n+\r\n+    /**\r\n+     * extract and cache default extension name if exists\r\n+     */\r\n+    private void cacheDefaultExtensionName() {\r\n+        final SPI defaultAnnotation = type.getAnnotation(SPI.class);\r\n+        if (defaultAnnotation == null) {\r\n+            return;\r\n+        }\r\n+\r\n+        String value = defaultAnnotation.value();\r\n+        if ((value = value.trim()).length() > 0) {\r\n+            String[] names = NAME_SEPARATOR.split(value);\r\n+            if (names.length > 1) {\r\n+                throw new IllegalStateException(\"More than 1 default extension name on extension \" + type.getName()\r\n+                        + \": \" + Arrays.toString(names));\r\n+            }\r\n+            if (names.length == 1) {\r\n+                cachedDefaultName = names[0];\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private void loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type) {\r\n+        loadDirectory(extensionClasses, dir, type, false, false);\r\n+    }\r\n+\r\n+    private void loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type,\r\n+                               boolean extensionLoaderClassLoaderFirst, boolean overridden, String... excludedPackages) {\r\n+        String fileName = dir + type;\r\n+        try {\r\n+            Enumeration<java.net.URL> urls = null;\r\n+            ClassLoader classLoader = findClassLoader();\r\n+\r\n+            // try to load from ExtensionLoader's ClassLoader first\r\n+            if (extensionLoaderClassLoaderFirst) {\r\n+                ClassLoader extensionLoaderClassLoader = ExtensionLoader.class.getClassLoader();\r\n+                if (ClassLoader.getSystemClassLoader() != extensionLoaderClassLoader) {\r\n+                    urls = extensionLoaderClassLoader.getResources(fileName);\r\n+                }\r\n+            }\r\n+\r\n+            if (urls == null || !urls.hasMoreElements()) {\r\n+                if (classLoader != null) {\r\n+                    urls = classLoader.getResources(fileName);\r\n+                } else {\r\n+                    urls = ClassLoader.getSystemResources(fileName);\r\n+                }\r\n+            }\r\n+\r\n+            if (urls != null) {\r\n+                while (urls.hasMoreElements()) {\r\n+                    java.net.URL resourceURL = urls.nextElement();\r\n+                    loadResource(extensionClasses, classLoader, resourceURL, overridden, excludedPackages);\r\n+                }\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            logger.error(\"Exception occurred when loading extension class (interface: \" +\r\n+                    type + \", description file: \" + fileName + \").\", t);\r\n+        }\r\n+    }\r\n+\r\n+    private void loadResource(Map<String, Class<?>> extensionClasses, ClassLoader classLoader,\r\n+                              java.net.URL resourceURL, boolean overridden, String... excludedPackages) {\r\n+        try {\r\n+            try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceURL.openStream(), StandardCharsets.UTF_8))) {\r\n+                String line;\r\n+                String clazz = null;\r\n+                while ((line = reader.readLine()) != null) {\r\n+                    final int ci = line.indexOf('#');\r\n+                    if (ci >= 0) {\r\n+                        line = line.substring(0, ci);\r\n+                    }\r\n+                    line = line.trim();\r\n+                    if (line.length() > 0) {\r\n+                        try {\r\n+                            String name = null;\r\n+                            int i = line.indexOf('=');\r\n+                            if (i > 0) {\r\n+                                name = line.substring(0, i).trim();\r\n+                                clazz = line.substring(i + 1).trim();\r\n+                            } else {\r\n+                                clazz = line;\r\n+                            }\r\n+                            if (StringUtils.isNotEmpty(clazz) && !isExcluded(clazz, excludedPackages)) {\r\n+                                loadClass(extensionClasses, resourceURL, Class.forName(clazz, true, classLoader), name, overridden);\r\n+                            }\r\n+                        } catch (Throwable t) {\r\n+                            IllegalStateException e = new IllegalStateException(\"Failed to load extension class (interface: \" + type + \", class line: \" + line + \") in \" + resourceURL + \", cause: \" + t.getMessage(), t);\r\n+                            exceptions.put(line, e);\r\n+                        }\r\n+                    }\r\n+                }\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            logger.error(\"Exception occurred when loading extension class (interface: \" +\r\n+                    type + \", class file: \" + resourceURL + \") in \" + resourceURL, t);\r\n+        }\r\n+    }\r\n+\r\n+    private boolean isExcluded(String className, String... excludedPackages) {\r\n+        if (excludedPackages != null) {\r\n+            for (String excludePackage : excludedPackages) {\r\n+                if (className.startsWith(excludePackage + \".\")) {\r\n+                    return true;\r\n+                }\r\n+            }\r\n+        }\r\n+        return false;\r\n+    }\r\n+\r\n+    private void loadClass(Map<String, Class<?>> extensionClasses, java.net.URL resourceURL, Class<?> clazz, String name,\r\n+                           boolean overridden) throws NoSuchMethodException {\r\n+        if (!type.isAssignableFrom(clazz)) {\r\n+            throw new IllegalStateException(\"Error occurred when loading extension class (interface: \" +\r\n+                    type + \", class line: \" + clazz.getName() + \"), class \"\r\n+                    + clazz.getName() + \" is not subtype of interface.\");\r\n+        }\r\n+        if (clazz.isAnnotationPresent(Adaptive.class)) {\r\n+            cacheAdaptiveClass(clazz, overridden);\r\n+        } else if (isWrapperClass(clazz)) {\r\n+            cacheWrapperClass(clazz);\r\n+        } else {\r\n+            clazz.getConstructor();\r\n+            if (StringUtils.isEmpty(name)) {\r\n+                name = findAnnotationName(clazz);\r\n+                if (name.length() == 0) {\r\n+                    throw new IllegalStateException(\"No such extension name for the class \" + clazz.getName() + \" in the config \" + resourceURL);\r\n+                }\r\n+            }\r\n+\r\n+            String[] names = NAME_SEPARATOR.split(name);\r\n+            if (ArrayUtils.isNotEmpty(names)) {\r\n+                cacheActivateClass(clazz, names[0]);\r\n+                for (String n : names) {\r\n+                    cacheName(clazz, n);\r\n+                    saveInExtensionClass(extensionClasses, clazz, n, overridden);\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * cache name\r\n+     */\r\n+    private void cacheName(Class<?> clazz, String name) {\r\n+        if (!cachedNames.containsKey(clazz)) {\r\n+            cachedNames.put(clazz, name);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * put clazz in extensionClasses\r\n+     */\r\n+    private void saveInExtensionClass(Map<String, Class<?>> extensionClasses, Class<?> clazz, String name, boolean overridden) {\r\n+        Class<?> c = extensionClasses.get(name);\r\n+        if (c == null || overridden) {\r\n+            extensionClasses.put(name, clazz);\r\n+        } else if (c != clazz) {\r\n+            String duplicateMsg = \"Duplicate extension \" + type.getName() + \" name \" + name + \" on \" + c.getName() + \" and \" + clazz.getName();\r\n+            logger.error(duplicateMsg);\r\n+            throw new IllegalStateException(duplicateMsg);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * cache Activate class which is annotated with <code>Activate</code>\r\n+     * <p>\r\n+     * for compatibility, also cache class with old alibaba Activate annotation\r\n+     */\r\n+    private void cacheActivateClass(Class<?> clazz, String name) {\r\n+        Activate activate = clazz.getAnnotation(Activate.class);\r\n+        if (activate != null) {\r\n+            cachedActivates.put(name, activate);\r\n+        } else {\r\n+            // support com.alibaba.dubbo.common.extension.Activate\r\n+            com.alibaba.dubbo.common.extension.Activate oldActivate = clazz.getAnnotation(com.alibaba.dubbo.common.extension.Activate.class);\r\n+            if (oldActivate != null) {\r\n+                cachedActivates.put(name, oldActivate);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * cache Adaptive class which is annotated with <code>Adaptive</code>\r\n+     */\r\n+    private void cacheAdaptiveClass(Class<?> clazz, boolean overridden) {\r\n+        if (cachedAdaptiveClass == null || overridden) {\r\n+            cachedAdaptiveClass = clazz;\r\n+        } else if (!cachedAdaptiveClass.equals(clazz)) {\r\n+            throw new IllegalStateException(\"More than 1 adaptive class found: \"\r\n+                    + cachedAdaptiveClass.getName()\r\n+                    + \", \" + clazz.getName());\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * cache wrapper class\r\n+     * <p>\r\n+     * like: ProtocolFilterWrapper, ProtocolListenerWrapper\r\n+     */\r\n+    private void cacheWrapperClass(Class<?> clazz) {\r\n+        if (cachedWrapperClasses == null) {\r\n+            cachedWrapperClasses = new ConcurrentHashSet<>();\r\n+        }\r\n+        cachedWrapperClasses.add(clazz);\r\n+    }\r\n+\r\n+    /**\r\n+     * test if clazz is a wrapper class\r\n+     * <p>\r\n+     * which has Constructor with given class type as its only argument\r\n+     */\r\n+    private boolean isWrapperClass(Class<?> clazz) {\r\n+        try {\r\n+            clazz.getConstructor(type);\r\n+            return true;\r\n+        } catch (NoSuchMethodException e) {\r\n+            return false;\r\n+        }\r\n+    }\r\n+\r\n+    @SuppressWarnings(\"deprecation\")\r\n+    private String findAnnotationName(Class<?> clazz) {\r\n+        org.apache.dubbo.common.Extension extension = clazz.getAnnotation(org.apache.dubbo.common.Extension.class);\r\n+        if (extension != null) {\r\n+            return extension.value();\r\n+        }\r\n+\r\n+        String name = clazz.getSimpleName();\r\n+        if (name.endsWith(type.getSimpleName())) {\r\n+            name = name.substring(0, name.length() - type.getSimpleName().length());\r\n+        }\r\n+        return name.toLowerCase();\r\n+    }\r\n+\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    private T createAdaptiveExtension() {\r\n+        try {\r\n+            return injectExtension((T) getAdaptiveExtensionClass().newInstance());\r\n+        } catch (Exception e) {\r\n+            throw new IllegalStateException(\"Can't create adaptive extension \" + type + \", cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    private Class<?> getAdaptiveExtensionClass() {\r\n+        getExtensionClasses();\r\n+        if (cachedAdaptiveClass != null) {\r\n+            return cachedAdaptiveClass;\r\n+        }\r\n+        return cachedAdaptiveClass = createAdaptiveExtensionClass();\r\n+    }\r\n+\r\n+    private Class<?> createAdaptiveExtensionClass() {\r\n+        String code = new AdaptiveClassCodeGenerator(type, cachedDefaultName).generate();\r\n+        ClassLoader classLoader = findClassLoader();\r\n+        org.apache.dubbo.common.compiler.Compiler compiler = ExtensionLoader.getExtensionLoader(org.apache.dubbo.common.compiler.Compiler.class).getAdaptiveExtension();\r\n+        return compiler.compile(code, classLoader);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return this.getClass().getName() + \"[\" + type.getName() + \"]\";\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/extension/LoadingStrategy.java", "source2": "org/apache/dubbo/common/extension/LoadingStrategy.java", "comments": ["Line-ending 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.common.extension;\n-\n-import org.apache.dubbo.common.lang.Prioritized;\n-\n-public interface LoadingStrategy extends Prioritized {\n-\n-    String directory();\n-\n-    default boolean preferExtensionClassLoader() {\n-        return false;\n-    }\n-\n-    default String[] excludedPackages() {\n-        return null;\n-    }\n-\n-    /**\n-     * Indicates current {@link LoadingStrategy} supports overriding other lower prioritized instances or not.\n-     *\n-     * @return if supports, return <code>true</code>, or <code>false</code>\n-     * @since 2.7.7\n-     */\n-    default boolean overridden() {\n-        return false;\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.common.extension;\r\n+\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+\r\n+public interface LoadingStrategy extends Prioritized {\r\n+\r\n+    String directory();\r\n+\r\n+    default boolean preferExtensionClassLoader() {\r\n+        return false;\r\n+    }\r\n+\r\n+    default String[] excludedPackages() {\r\n+        return null;\r\n+    }\r\n+\r\n+    /**\r\n+     * Indicates current {@link LoadingStrategy} supports overriding other lower prioritized instances or not.\r\n+     *\r\n+     * @return if supports, return <code>true</code>, or <code>false</code>\r\n+     * @since 2.7.7\r\n+     */\r\n+    default boolean overridden() {\r\n+        return false;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/extension/ServicesLoadingStrategy.java", "source2": "org/apache/dubbo/common/extension/ServicesLoadingStrategy.java", "comments": ["Line-ending 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.common.extension;\n-\n-/**\n- * Services {@link LoadingStrategy}\n- *\n- * @since 2.7.7\n- */\n-public class ServicesLoadingStrategy implements LoadingStrategy {\n-\n-    @Override\n-    public String directory() {\n-        return \"META-INF/services/\";\n-    }\n-\n-    @Override\n-    public boolean overridden() {\n-        return true;\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY;\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.common.extension;\r\n+\r\n+/**\r\n+ * Services {@link LoadingStrategy}\r\n+ *\r\n+ * @since 2.7.7\r\n+ */\r\n+public class ServicesLoadingStrategy implements LoadingStrategy {\r\n+\r\n+    @Override\r\n+    public String directory() {\r\n+        return \"META-INF/services/\";\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean overridden() {\r\n+        return true;\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/extension/Wrapper.java", "source2": "org/apache/dubbo/common/extension/Wrapper.java", "comments": ["Line-ending 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.common.extension;\n-\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.RetentionPolicy;\n-\n-/**\n- * The annotated class will only work as a wrapper when the condition matches.\n- */\n-@Retention(RetentionPolicy.RUNTIME)\n-public @interface Wrapper {\n-\n-    /**\n-     * the extension names that need to be wrapped.\n-     */\n-    String[] matches() default {};\n-\n-    /**\n-     * the extension names that need to be excluded.\n-     */\n-    String[] mismatches() default {};\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.common.extension;\r\n+\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.RetentionPolicy;\r\n+\r\n+/**\r\n+ * The annotated class will only work as a wrapper when the condition matches.\r\n+ */\r\n+@Retention(RetentionPolicy.RUNTIME)\r\n+public @interface Wrapper {\r\n+\r\n+    /**\r\n+     * the extension names that need to be wrapped.\r\n+     */\r\n+    String[] matches() default {};\r\n+\r\n+    /**\r\n+     * the extension names that need to be excluded.\r\n+     */\r\n+    String[] mismatches() default {};\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/extension/support/WrapperComparator.java", "source2": "org/apache/dubbo/common/extension/support/WrapperComparator.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,95 +1,95 @@\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.common.extension.support;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import java.util.Comparator;\n-\n-/**\n- * OrderComparator\n- */\n-public class WrapperComparator implements Comparator<Object> {\n-\n-    public static final Comparator<Object> COMPARATOR = new WrapperComparator();\n-\n-    @Override\n-    public int compare(Object o1, Object o2) {\n-        if (o1 == null && o2 == null) {\n-            return 0;\n-        }\n-        if (o1 == null) {\n-            return -1;\n-        }\n-        if (o2 == null) {\n-            return 1;\n-        }\n-        if (o1.equals(o2)) {\n-            return 0;\n-        }\n-\n-        Class clazz1 = (Class) o1;\n-        Class clazz2 = (Class) o2;\n-\n-        Class<?> inf = findSpi(clazz1);\n-\n-        OrderInfo a1 = parseOrder(clazz1);\n-        OrderInfo a2 = parseOrder(clazz2);\n-\n-        int n1 = a1 == null ? 0 : a1.order;\n-        int n2 = a2 == null ? 0 : a2.order;\n-        // never return 0 even if n1 equals n2, otherwise, o1 and o2 will override each other in collection like HashSet\n-        return n1 > n2 ? 1 : -1;\n-    }\n-\n-    private Class<?> findSpi(Class clazz) {\n-        if (clazz.getInterfaces().length == 0) {\n-            return null;\n-        }\n-\n-        for (Class<?> intf : clazz.getInterfaces()) {\n-            if (intf.isAnnotationPresent(SPI.class)) {\n-                return intf;\n-            } else {\n-                Class result = findSpi(intf);\n-                if (result != null) {\n-                    return result;\n-                }\n-            }\n-        }\n-\n-        return null;\n-    }\n-\n-    private OrderInfo parseOrder(Class<?> clazz) {\n-        OrderInfo info = new OrderInfo();\n-        if (clazz.isAnnotationPresent(Activate.class)) {\n-            Activate activate = clazz.getAnnotation(Activate.class);\n-            info.order = activate.order();\n-        } else if (clazz.isAnnotationPresent(com.alibaba.dubbo.common.extension.Activate.class)) {\n-            com.alibaba.dubbo.common.extension.Activate activate = clazz.getAnnotation(\n-                    com.alibaba.dubbo.common.extension.Activate.class);\n-            info.order = activate.order();\n-        }\n-        return info;\n-    }\n-\n-    private static class OrderInfo {\n-        private int order;\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.common.extension.support;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+import java.util.Comparator;\r\n+\r\n+/**\r\n+ * OrderComparator\r\n+ */\r\n+public class WrapperComparator implements Comparator<Object> {\r\n+\r\n+    public static final Comparator<Object> COMPARATOR = new WrapperComparator();\r\n+\r\n+    @Override\r\n+    public int compare(Object o1, Object o2) {\r\n+        if (o1 == null && o2 == null) {\r\n+            return 0;\r\n+        }\r\n+        if (o1 == null) {\r\n+            return -1;\r\n+        }\r\n+        if (o2 == null) {\r\n+            return 1;\r\n+        }\r\n+        if (o1.equals(o2)) {\r\n+            return 0;\r\n+        }\r\n+\r\n+        Class clazz1 = (Class) o1;\r\n+        Class clazz2 = (Class) o2;\r\n+\r\n+        Class<?> inf = findSpi(clazz1);\r\n+\r\n+        OrderInfo a1 = parseOrder(clazz1);\r\n+        OrderInfo a2 = parseOrder(clazz2);\r\n+\r\n+        int n1 = a1 == null ? 0 : a1.order;\r\n+        int n2 = a2 == null ? 0 : a2.order;\r\n+        // never return 0 even if n1 equals n2, otherwise, o1 and o2 will override each other in collection like HashSet\r\n+        return n1 > n2 ? 1 : -1;\r\n+    }\r\n+\r\n+    private Class<?> findSpi(Class clazz) {\r\n+        if (clazz.getInterfaces().length == 0) {\r\n+            return null;\r\n+        }\r\n+\r\n+        for (Class<?> intf : clazz.getInterfaces()) {\r\n+            if (intf.isAnnotationPresent(SPI.class)) {\r\n+                return intf;\r\n+            } else {\r\n+                Class result = findSpi(intf);\r\n+                if (result != null) {\r\n+                    return result;\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        return null;\r\n+    }\r\n+\r\n+    private OrderInfo parseOrder(Class<?> clazz) {\r\n+        OrderInfo info = new OrderInfo();\r\n+        if (clazz.isAnnotationPresent(Activate.class)) {\r\n+            Activate activate = clazz.getAnnotation(Activate.class);\r\n+            info.order = activate.order();\r\n+        } else if (clazz.isAnnotationPresent(com.alibaba.dubbo.common.extension.Activate.class)) {\r\n+            com.alibaba.dubbo.common.extension.Activate activate = clazz.getAnnotation(\r\n+                    com.alibaba.dubbo.common.extension.Activate.class);\r\n+            info.order = activate.order();\r\n+        }\r\n+        return info;\r\n+    }\r\n+\r\n+    private static class OrderInfo {\r\n+        private int order;\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/common/function/Predicates.java", "source2": "org/apache/dubbo/common/function/Predicates.java", "comments": ["Line-ending 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.common.function;\n-\n-import java.util.function.Predicate;\n-\n-import static java.util.stream.Stream.of;\n-\n-/**\n- * The utilities class for Java {@link Predicate}\n- *\n- * @since 2.7.5\n- */\n-public interface Predicates {\n-\n-    Predicate[] EMPTY_ARRAY = new Predicate[0];\n-\n-    /**\n-     * {@link Predicate} always return <code>true</code>\n-     *\n-     * @param <T> the type to test\n-     * @return <code>true</code>\n-     */\n-    static <T> Predicate<T> alwaysTrue() {\n-        return e -> true;\n-    }\n-\n-    /**\n-     * {@link Predicate} always return <code>false</code>\n-     *\n-     * @param <T> the type to test\n-     * @return <code>false</code>\n-     */\n-    static <T> Predicate<T> alwaysFalse() {\n-        return e -> false;\n-    }\n-\n-    /**\n-     * a composed predicate that represents a short-circuiting logical AND of {@link Predicate predicates}\n-     *\n-     * @param predicates {@link Predicate predicates}\n-     * @param <T>        the type to test\n-     * @return non-null\n-     */\n-    static <T> Predicate<T> and(Predicate<T>... predicates) {\n-        return of(predicates).reduce((a, b) -> a.and(b)).orElseGet(Predicates::alwaysTrue);\n-    }\n-\n-    /**\n-     * a composed predicate that represents a short-circuiting logical OR of {@link Predicate predicates}\n-     *\n-     * @param predicates {@link Predicate predicates}\n-     * @param <T>        the detected type\n-     * @return non-null\n-     */\n-    static <T> Predicate<T> or(Predicate<T>... predicates) {\n-        return of(predicates).reduce((a, b) -> a.or(b)).orElse(e -> true);\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.common.function;\r\n+\r\n+import java.util.function.Predicate;\r\n+\r\n+import static java.util.stream.Stream.of;\r\n+\r\n+/**\r\n+ * The utilities class for Java {@link Predicate}\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+public interface Predicates {\r\n+\r\n+    Predicate[] EMPTY_ARRAY = new Predicate[0];\r\n+\r\n+    /**\r\n+     * {@link Predicate} always return <code>true</code>\r\n+     *\r\n+     * @param <T> the type to test\r\n+     * @return <code>true</code>\r\n+     */\r\n+    static <T> Predicate<T> alwaysTrue() {\r\n+        return e -> true;\r\n+    }\r\n+\r\n+    /**\r\n+     * {@link Predicate} always return <code>false</code>\r\n+     *\r\n+     * @param <T> the type to test\r\n+     * @return <code>false</code>\r\n+     */\r\n+    static <T> Predicate<T> alwaysFalse() {\r\n+        return e -> false;\r\n+    }\r\n+\r\n+    /**\r\n+     * a composed predicate that represents a short-circuiting logical AND of {@link Predicate predicates}\r\n+     *\r\n+     * @param predicates {@link Predicate predicates}\r\n+     * @param <T>        the type to test\r\n+     * @return non-null\r\n+     */\r\n+    static <T> Predicate<T> and(Predicate<T>... predicates) {\r\n+        return of(predicates).reduce((a, b) -> a.and(b)).orElseGet(Predicates::alwaysTrue);\r\n+    }\r\n+\r\n+    /**\r\n+     * a composed predicate that represents a short-circuiting logical OR of {@link Predicate predicates}\r\n+     *\r\n+     * @param predicates {@link Predicate predicates}\r\n+     * @param <T>        the detected type\r\n+     * @return non-null\r\n+     */\r\n+    static <T> Predicate<T> or(Predicate<T>... predicates) {\r\n+        return of(predicates).reduce((a, b) -> a.or(b)).orElse(e -> true);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/function/Streams.java", "source2": "org/apache/dubbo/common/function/Streams.java", "comments": ["Line-ending 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.common.function;\n-\n-import java.util.LinkedHashSet;\n-import java.util.List;\n-import java.util.Set;\n-import java.util.function.Predicate;\n-import java.util.stream.Stream;\n-\n-import static java.util.stream.Collectors.toList;\n-import static java.util.stream.StreamSupport.stream;\n-import static org.apache.dubbo.common.function.Predicates.and;\n-import static org.apache.dubbo.common.function.Predicates.or;\n-\n-/**\n- * The utilities class for {@link Stream}\n- *\n- * @since 2.7.5\n- */\n-public interface Streams {\n-\n-    static <T, S extends Iterable<T>> Stream<T> filterStream(S values, Predicate<T> predicate) {\n-        return stream(values.spliterator(), false).filter(predicate);\n-    }\n-\n-    static <T, S extends Iterable<T>> List<T> filterList(S values, Predicate<T> predicate) {\n-        return filterStream(values, predicate).collect(toList());\n-    }\n-\n-    static <T, S extends Iterable<T>> Set<T> filterSet(S values, Predicate<T> predicate) {\n-        // new Set with insertion order\n-        return filterStream(values, predicate).collect(LinkedHashSet::new, Set::add, Set::addAll);\n-    }\n-\n-    static <T, S extends Iterable<T>> S filter(S values, Predicate<T> predicate) {\n-        final boolean isSet = Set.class.isAssignableFrom(values.getClass());\n-        return (S) (isSet ? filterSet(values, predicate) : filterList(values, predicate));\n-    }\n-\n-    static <T, S extends Iterable<T>> S filterAll(S values, Predicate<T>... predicates) {\n-        return filter(values, and(predicates));\n-    }\n-\n-    static <T, S extends Iterable<T>> S filterAny(S values, Predicate<T>... predicates) {\n-        return filter(values, or(predicates));\n-    }\n-\n-    static <T> T filterFirst(Iterable<T> values, Predicate<T>... predicates) {\n-        return stream(values.spliterator(), false)\n-                .filter(and(predicates))\n-                .findFirst()\n-                .orElse(null);\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.common.function;\r\n+\r\n+import java.util.LinkedHashSet;\r\n+import java.util.List;\r\n+import java.util.Set;\r\n+import java.util.function.Predicate;\r\n+import java.util.stream.Stream;\r\n+\r\n+import static java.util.stream.Collectors.toList;\r\n+import static java.util.stream.StreamSupport.stream;\r\n+import static org.apache.dubbo.common.function.Predicates.and;\r\n+import static org.apache.dubbo.common.function.Predicates.or;\r\n+\r\n+/**\r\n+ * The utilities class for {@link Stream}\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+public interface Streams {\r\n+\r\n+    static <T, S extends Iterable<T>> Stream<T> filterStream(S values, Predicate<T> predicate) {\r\n+        return stream(values.spliterator(), false).filter(predicate);\r\n+    }\r\n+\r\n+    static <T, S extends Iterable<T>> List<T> filterList(S values, Predicate<T> predicate) {\r\n+        return filterStream(values, predicate).collect(toList());\r\n+    }\r\n+\r\n+    static <T, S extends Iterable<T>> Set<T> filterSet(S values, Predicate<T> predicate) {\r\n+        // new Set with insertion order\r\n+        return filterStream(values, predicate).collect(LinkedHashSet::new, Set::add, Set::addAll);\r\n+    }\r\n+\r\n+    static <T, S extends Iterable<T>> S filter(S values, Predicate<T> predicate) {\r\n+        final boolean isSet = Set.class.isAssignableFrom(values.getClass());\r\n+        return (S) (isSet ? filterSet(values, predicate) : filterList(values, predicate));\r\n+    }\r\n+\r\n+    static <T, S extends Iterable<T>> S filterAll(S values, Predicate<T>... predicates) {\r\n+        return filter(values, and(predicates));\r\n+    }\r\n+\r\n+    static <T, S extends Iterable<T>> S filterAny(S values, Predicate<T>... predicates) {\r\n+        return filter(values, or(predicates));\r\n+    }\r\n+\r\n+    static <T> T filterFirst(Iterable<T> values, Predicate<T>... predicates) {\r\n+        return stream(values.spliterator(), false)\r\n+                .filter(and(predicates))\r\n+                .findFirst()\r\n+                .orElse(null);\r\n+    }\r\n+}\r\n+\r\n+\r\n"}, {"source1": "org/apache/dubbo/common/function/ThrowableAction.java", "source2": "org/apache/dubbo/common/function/ThrowableAction.java", "comments": ["Line-ending 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.common.function;\n-\n-import java.util.function.Function;\n-\n-/**\n- * A function interface for action with {@link Throwable}\n- *\n- * @see Function\n- * @see Throwable\n- * @since 2.7.5\n- */\n-@FunctionalInterface\n-public interface ThrowableAction {\n-\n-    /**\n-     * Executes the action\n-     *\n-     * @throws Throwable if met with error\n-     */\n-    void execute() throws Throwable;\n-\n-    /**\n-     * Executes {@link ThrowableAction}\n-     *\n-     * @param action {@link ThrowableAction}\n-     * @throws RuntimeException wrap {@link Exception} to {@link RuntimeException}\n-     */\n-    static void execute(ThrowableAction action) throws RuntimeException {\n-        try {\n-            action.execute();\n-        } catch (Throwable e) {\n-            throw new RuntimeException(e);\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.common.function;\r\n+\r\n+import java.util.function.Function;\r\n+\r\n+/**\r\n+ * A function interface for action with {@link Throwable}\r\n+ *\r\n+ * @see Function\r\n+ * @see Throwable\r\n+ * @since 2.7.5\r\n+ */\r\n+@FunctionalInterface\r\n+public interface ThrowableAction {\r\n+\r\n+    /**\r\n+     * Executes the action\r\n+     *\r\n+     * @throws Throwable if met with error\r\n+     */\r\n+    void execute() throws Throwable;\r\n+\r\n+    /**\r\n+     * Executes {@link ThrowableAction}\r\n+     *\r\n+     * @param action {@link ThrowableAction}\r\n+     * @throws RuntimeException wrap {@link Exception} to {@link RuntimeException}\r\n+     */\r\n+    static void execute(ThrowableAction action) throws RuntimeException {\r\n+        try {\r\n+            action.execute();\r\n+        } catch (Throwable e) {\r\n+            throw new RuntimeException(e);\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/function/ThrowableConsumer.java", "source2": "org/apache/dubbo/common/function/ThrowableConsumer.java", "comments": ["Line-ending 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.common.function;\n-\n-import java.util.function.Consumer;\n-import java.util.function.Function;\n-\n-/**\n- * {@link Consumer} with {@link Throwable}\n- *\n- * @param <T> the source type\n- * @see Function\n- * @see Throwable\n- * @since 2.7.5\n- */\n-@FunctionalInterface\n-public interface ThrowableConsumer<T> {\n-\n-    /**\n-     * Applies this function to the given argument.\n-     *\n-     * @param t the function argument\n-     * @throws Throwable if met with any error\n-     */\n-    void accept(T t) throws Throwable;\n-\n-    /**\n-     * Executes {@link ThrowableConsumer}\n-     *\n-     * @param t the function argument\n-     * @throws RuntimeException wrappers {@link Throwable}\n-     */\n-    default void execute(T t) throws RuntimeException {\n-        try {\n-            accept(t);\n-        } catch (Throwable e) {\n-            throw new RuntimeException(e.getMessage(), e.getCause());\n-        }\n-    }\n-\n-    /**\n-     * Executes {@link ThrowableConsumer}\n-     *\n-     * @param t        the function argument\n-     * @param consumer {@link ThrowableConsumer}\n-     * @param <T>      the source type\n-     * @return the result after execution\n-     */\n-    static <T> void execute(T t, ThrowableConsumer<T> consumer) {\n-        consumer.execute(t);\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.common.function;\r\n+\r\n+import java.util.function.Consumer;\r\n+import java.util.function.Function;\r\n+\r\n+/**\r\n+ * {@link Consumer} with {@link Throwable}\r\n+ *\r\n+ * @param <T> the source type\r\n+ * @see Function\r\n+ * @see Throwable\r\n+ * @since 2.7.5\r\n+ */\r\n+@FunctionalInterface\r\n+public interface ThrowableConsumer<T> {\r\n+\r\n+    /**\r\n+     * Applies this function to the given argument.\r\n+     *\r\n+     * @param t the function argument\r\n+     * @throws Throwable if met with any error\r\n+     */\r\n+    void accept(T t) throws Throwable;\r\n+\r\n+    /**\r\n+     * Executes {@link ThrowableConsumer}\r\n+     *\r\n+     * @param t the function argument\r\n+     * @throws RuntimeException wrappers {@link Throwable}\r\n+     */\r\n+    default void execute(T t) throws RuntimeException {\r\n+        try {\r\n+            accept(t);\r\n+        } catch (Throwable e) {\r\n+            throw new RuntimeException(e.getMessage(), e.getCause());\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Executes {@link ThrowableConsumer}\r\n+     *\r\n+     * @param t        the function argument\r\n+     * @param consumer {@link ThrowableConsumer}\r\n+     * @param <T>      the source type\r\n+     * @return the result after execution\r\n+     */\r\n+    static <T> void execute(T t, ThrowableConsumer<T> consumer) {\r\n+        consumer.execute(t);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/function/ThrowableFunction.java", "source2": "org/apache/dubbo/common/function/ThrowableFunction.java", "comments": ["Line-ending 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.common.function;\n-\n-import java.util.function.Function;\n-\n-/**\n- * {@link Function} with {@link Throwable}\n- *\n- * @param <T> the source type\n- * @param <R> the return type\n- * @see Function\n- * @see Throwable\n- * @since 2.7.5\n- */\n-@FunctionalInterface\n-public interface ThrowableFunction<T, R> {\n-\n-    /**\n-     * Applies this function to the given argument.\n-     *\n-     * @param t the function argument\n-     * @return the function result\n-     * @throws Throwable if met with any error\n-     */\n-    R apply(T t) throws Throwable;\n-\n-    /**\n-     * Executes {@link ThrowableFunction}\n-     *\n-     * @param t the function argument\n-     * @return the function result\n-     * @throws RuntimeException wrappers {@link Throwable}\n-     */\n-    default R execute(T t) throws RuntimeException {\n-        R result = null;\n-        try {\n-            result = apply(t);\n-        } catch (Throwable e) {\n-            throw new RuntimeException(e.getCause());\n-        }\n-        return result;\n-    }\n-\n-    /**\n-     * Executes {@link ThrowableFunction}\n-     *\n-     * @param t        the function argument\n-     * @param function {@link ThrowableFunction}\n-     * @param <T>      the source type\n-     * @param <R>      the return type\n-     * @return the result after execution\n-     */\n-    static <T, R> R execute(T t, ThrowableFunction<T, R> function) {\n-        return function.execute(t);\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.common.function;\r\n+\r\n+import java.util.function.Function;\r\n+\r\n+/**\r\n+ * {@link Function} with {@link Throwable}\r\n+ *\r\n+ * @param <T> the source type\r\n+ * @param <R> the return type\r\n+ * @see Function\r\n+ * @see Throwable\r\n+ * @since 2.7.5\r\n+ */\r\n+@FunctionalInterface\r\n+public interface ThrowableFunction<T, R> {\r\n+\r\n+    /**\r\n+     * Applies this function to the given argument.\r\n+     *\r\n+     * @param t the function argument\r\n+     * @return the function result\r\n+     * @throws Throwable if met with any error\r\n+     */\r\n+    R apply(T t) throws Throwable;\r\n+\r\n+    /**\r\n+     * Executes {@link ThrowableFunction}\r\n+     *\r\n+     * @param t the function argument\r\n+     * @return the function result\r\n+     * @throws RuntimeException wrappers {@link Throwable}\r\n+     */\r\n+    default R execute(T t) throws RuntimeException {\r\n+        R result = null;\r\n+        try {\r\n+            result = apply(t);\r\n+        } catch (Throwable e) {\r\n+            throw new RuntimeException(e.getCause());\r\n+        }\r\n+        return result;\r\n+    }\r\n+\r\n+    /**\r\n+     * Executes {@link ThrowableFunction}\r\n+     *\r\n+     * @param t        the function argument\r\n+     * @param function {@link ThrowableFunction}\r\n+     * @param <T>      the source type\r\n+     * @param <R>      the return type\r\n+     * @return the result after execution\r\n+     */\r\n+    static <T, R> R execute(T t, ThrowableFunction<T, R> function) {\r\n+        return function.execute(t);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/infra/InfraAdapter.java", "source2": "org/apache/dubbo/common/infra/InfraAdapter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,46 +1,46 @@\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.common.infra;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import java.util.Map;\n-\n-/**\n- * Used to interact with other systems. Typical use cases are:\n- * 1. get extra attributes from underlying infrastructures related to the instance on which Dubbo is currently deploying.\n- * 2. get configurations from third-party systems which maybe useful for a specific component.\n- */\n-\n-@SPI\n-public interface InfraAdapter {\n-\n-    /**\n-     * get extra attributes\n-     *\n-     * @param params application name or hostname are most likely to be used as input params.\n-     * @return\n-     */\n-    Map<String, String> getExtraAttributes(Map<String, String> params);\n-\n-    /**\n-     * @param key\n-     * @return\n-     */\n-    String getAttribute(String key);\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.common.infra;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * Used to interact with other systems. Typical use cases are:\r\n+ * 1. get extra attributes from underlying infrastructures related to the instance on which Dubbo is currently deploying.\r\n+ * 2. get configurations from third-party systems which maybe useful for a specific component.\r\n+ */\r\n+\r\n+@SPI\r\n+public interface InfraAdapter {\r\n+\r\n+    /**\r\n+     * get extra attributes\r\n+     *\r\n+     * @param params application name or hostname are most likely to be used as input params.\r\n+     * @return\r\n+     */\r\n+    Map<String, String> getExtraAttributes(Map<String, String> params);\r\n+\r\n+    /**\r\n+     * @param key\r\n+     * @return\r\n+     */\r\n+    String getAttribute(String key);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/infra/support/CmdbAdapter.java", "source2": "org/apache/dubbo/common/infra/support/CmdbAdapter.java", "comments": ["Line-ending 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.common.infra.support;\n-\n-import org.apache.dubbo.common.infra.InfraAdapter;\n-\n-import java.util.Collections;\n-import java.util.Map;\n-\n-public class CmdbAdapter implements InfraAdapter {\n-\n-    public CmdbAdapter() {\n-        // init;\n-    }\n-\n-    @Override\n-    public Map<String, String> getExtraAttributes(Map<String, String> params) {\n-        return Collections.emptyMap();\n-    }\n-\n-    @Override\n-    public String getAttribute(String key) {\n-        return \"\";\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.common.infra.support;\r\n+\r\n+import org.apache.dubbo.common.infra.InfraAdapter;\r\n+\r\n+import java.util.Collections;\r\n+import java.util.Map;\r\n+\r\n+public class CmdbAdapter implements InfraAdapter {\r\n+\r\n+    public CmdbAdapter() {\r\n+        // init;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Map<String, String> getExtraAttributes(Map<String, String> params) {\r\n+        return Collections.emptyMap();\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getAttribute(String key) {\r\n+        return \"\";\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/infra/support/EnvironmentAdapter.java", "source2": "org/apache/dubbo/common/infra/support/EnvironmentAdapter.java", "comments": ["Line-ending 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.common.infra.support;\n-\n-import org.apache.dubbo.common.config.ConfigurationUtils;\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.infra.InfraAdapter;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\n-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_ENV_KEYS;\n-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_LABELS;\n-import static org.apache.dubbo.common.constants.CommonConstants.EQUAL_SPLIT_PATTERN;\n-import static org.apache.dubbo.common.constants.CommonConstants.SEMICOLON_SPLIT_PATTERN;\n-\n-@Activate\n-public class EnvironmentAdapter implements InfraAdapter {\n-\n-    /**\n-     * 1. OS Environment: DUBBO_LABELS=tag=pre;key=value\n-     * 2. JVM Options: -Denv_keys = DUBBO_KEY1, DUBBO_KEY2\n-     */\n-    @Override\n-    public Map<String, String> getExtraAttributes(Map<String, String> params) {\n-        Map<String, String> parameters = new HashMap<>();\n-\n-        String rawLabels = ConfigurationUtils.getProperty(DUBBO_LABELS);\n-        if (StringUtils.isNotEmpty(rawLabels)) {\n-            String[] labelPairs = SEMICOLON_SPLIT_PATTERN.split(rawLabels);\n-            for (String pair : labelPairs) {\n-                String[] label = EQUAL_SPLIT_PATTERN.split(pair);\n-                if (label.length == 2) {\n-                    parameters.put(label[0], label[1]);\n-                }\n-            }\n-        }\n-\n-        String rawKeys = ConfigurationUtils.getProperty(DUBBO_ENV_KEYS);\n-        if (StringUtils.isNotEmpty(rawKeys)) {\n-            String[] keys = COMMA_SPLIT_PATTERN.split(rawKeys);\n-            for (String key : keys) {\n-                String value = ConfigurationUtils.getProperty(key);\n-                if (value != null) {\n-                    parameters.put(key, value);\n-                }\n-            }\n-        }\n-        return parameters;\n-    }\n-\n-    @Override\n-    public String getAttribute(String key) {\n-        return ConfigurationUtils.getProperty(key);\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.common.infra.support;\r\n+\r\n+import org.apache.dubbo.common.config.ConfigurationUtils;\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.infra.InfraAdapter;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_ENV_KEYS;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_LABELS;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.EQUAL_SPLIT_PATTERN;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SEMICOLON_SPLIT_PATTERN;\r\n+\r\n+@Activate\r\n+public class EnvironmentAdapter implements InfraAdapter {\r\n+\r\n+    /**\r\n+     * 1. OS Environment: DUBBO_LABELS=tag=pre;key=value\r\n+     * 2. JVM Options: -Denv_keys = DUBBO_KEY1, DUBBO_KEY2\r\n+     */\r\n+    @Override\r\n+    public Map<String, String> getExtraAttributes(Map<String, String> params) {\r\n+        Map<String, String> parameters = new HashMap<>();\r\n+\r\n+        String rawLabels = ConfigurationUtils.getProperty(DUBBO_LABELS);\r\n+        if (StringUtils.isNotEmpty(rawLabels)) {\r\n+            String[] labelPairs = SEMICOLON_SPLIT_PATTERN.split(rawLabels);\r\n+            for (String pair : labelPairs) {\r\n+                String[] label = EQUAL_SPLIT_PATTERN.split(pair);\r\n+                if (label.length == 2) {\r\n+                    parameters.put(label[0], label[1]);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        String rawKeys = ConfigurationUtils.getProperty(DUBBO_ENV_KEYS);\r\n+        if (StringUtils.isNotEmpty(rawKeys)) {\r\n+            String[] keys = COMMA_SPLIT_PATTERN.split(rawKeys);\r\n+            for (String key : keys) {\r\n+                String value = ConfigurationUtils.getProperty(key);\r\n+                if (value != null) {\r\n+                    parameters.put(key, value);\r\n+                }\r\n+            }\r\n+        }\r\n+        return parameters;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getAttribute(String key) {\r\n+        return ConfigurationUtils.getProperty(key);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/io/Bytes.java", "source2": "org/apache/dubbo/common/io/Bytes.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,936 +1,936 @@\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.common.io;\n-\n-import org.apache.dubbo.common.utils.IOUtils;\n-\n-import java.io.File;\n-import java.io.FileInputStream;\n-import java.io.IOException;\n-import java.io.InputStream;\n-import java.io.OutputStream;\n-import java.security.MessageDigest;\n-import java.security.NoSuchAlgorithmException;\n-import java.util.Map;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.zip.DeflaterOutputStream;\n-import java.util.zip.InflaterInputStream;\n-\n-/**\n- * CodecUtils.\n- */\n-\n-public class Bytes {\n-    private static final String C64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"; //default base64.\n-\n-    private static final char[] BASE16 = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}, BASE64 = C64.toCharArray();\n-\n-    private static final int MASK4 = 0x0f, MASK6 = 0x3f, MASK8 = 0xff;\n-\n-    private static final Map<Integer, byte[]> DECODE_TABLE_MAP = new ConcurrentHashMap<Integer, byte[]>();\n-\n-    private static ThreadLocal<MessageDigest> MD = new ThreadLocal<MessageDigest>();\n-\n-    private Bytes() {\n-    }\n-\n-    /**\n-     * byte array copy.\n-     *\n-     * @param src    src.\n-     * @param length new length.\n-     * @return new byte array.\n-     */\n-    public static byte[] copyOf(byte[] src, int length) {\n-        byte[] dest = new byte[length];\n-        System.arraycopy(src, 0, dest, 0, Math.min(src.length, length));\n-        return dest;\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v value.\n-     * @return byte[].\n-     */\n-    public static byte[] short2bytes(short v) {\n-        byte[] ret = {0, 0};\n-        short2bytes(v, ret);\n-        return ret;\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v value.\n-     * @param b byte array.\n-     */\n-    public static void short2bytes(short v, byte[] b) {\n-        short2bytes(v, b, 0);\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v value.\n-     * @param b byte array.\n-     */\n-    public static void short2bytes(short v, byte[] b, int off) {\n-        b[off + 1] = (byte) v;\n-        b[off + 0] = (byte) (v >>> 8);\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v value.\n-     * @return byte[].\n-     */\n-    public static byte[] int2bytes(int v) {\n-        byte[] ret = {0, 0, 0, 0};\n-        int2bytes(v, ret);\n-        return ret;\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v value.\n-     * @param b byte array.\n-     */\n-    public static void int2bytes(int v, byte[] b) {\n-        int2bytes(v, b, 0);\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v   value.\n-     * @param b   byte array.\n-     * @param off array offset.\n-     */\n-    public static void int2bytes(int v, byte[] b, int off) {\n-        b[off + 3] = (byte) v;\n-        b[off + 2] = (byte) (v >>> 8);\n-        b[off + 1] = (byte) (v >>> 16);\n-        b[off + 0] = (byte) (v >>> 24);\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v value.\n-     * @return byte[].\n-     */\n-    public static byte[] float2bytes(float v) {\n-        byte[] ret = {0, 0, 0, 0};\n-        float2bytes(v, ret);\n-        return ret;\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v value.\n-     * @param b byte array.\n-     */\n-    public static void float2bytes(float v, byte[] b) {\n-        float2bytes(v, b, 0);\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v   value.\n-     * @param b   byte array.\n-     * @param off array offset.\n-     */\n-    public static void float2bytes(float v, byte[] b, int off) {\n-        int i = Float.floatToIntBits(v);\n-        b[off + 3] = (byte) i;\n-        b[off + 2] = (byte) (i >>> 8);\n-        b[off + 1] = (byte) (i >>> 16);\n-        b[off + 0] = (byte) (i >>> 24);\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v value.\n-     * @return byte[].\n-     */\n-    public static byte[] long2bytes(long v) {\n-        byte[] ret = {0, 0, 0, 0, 0, 0, 0, 0};\n-        long2bytes(v, ret);\n-        return ret;\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v value.\n-     * @param b byte array.\n-     */\n-    public static void long2bytes(long v, byte[] b) {\n-        long2bytes(v, b, 0);\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v   value.\n-     * @param b   byte array.\n-     * @param off array offset.\n-     */\n-    public static void long2bytes(long v, byte[] b, int off) {\n-        b[off + 7] = (byte) v;\n-        b[off + 6] = (byte) (v >>> 8);\n-        b[off + 5] = (byte) (v >>> 16);\n-        b[off + 4] = (byte) (v >>> 24);\n-        b[off + 3] = (byte) (v >>> 32);\n-        b[off + 2] = (byte) (v >>> 40);\n-        b[off + 1] = (byte) (v >>> 48);\n-        b[off + 0] = (byte) (v >>> 56);\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v value.\n-     * @return byte[].\n-     */\n-    public static byte[] double2bytes(double v) {\n-        byte[] ret = {0, 0, 0, 0, 0, 0, 0, 0};\n-        double2bytes(v, ret);\n-        return ret;\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v value.\n-     * @param b byte array.\n-     */\n-    public static void double2bytes(double v, byte[] b) {\n-        double2bytes(v, b, 0);\n-    }\n-\n-    /**\n-     * to byte array.\n-     *\n-     * @param v   value.\n-     * @param b   byte array.\n-     * @param off array offset.\n-     */\n-    public static void double2bytes(double v, byte[] b, int off) {\n-        long j = Double.doubleToLongBits(v);\n-        b[off + 7] = (byte) j;\n-        b[off + 6] = (byte) (j >>> 8);\n-        b[off + 5] = (byte) (j >>> 16);\n-        b[off + 4] = (byte) (j >>> 24);\n-        b[off + 3] = (byte) (j >>> 32);\n-        b[off + 2] = (byte) (j >>> 40);\n-        b[off + 1] = (byte) (j >>> 48);\n-        b[off + 0] = (byte) (j >>> 56);\n-    }\n-\n-    /**\n-     * to short.\n-     *\n-     * @param b byte array.\n-     * @return short.\n-     */\n-    public static short bytes2short(byte[] b) {\n-        return bytes2short(b, 0);\n-    }\n-\n-    /**\n-     * to short.\n-     *\n-     * @param b   byte array.\n-     * @param off offset.\n-     * @return short.\n-     */\n-    public static short bytes2short(byte[] b, int off) {\n-        return (short) (((b[off + 1] & 0xFF) << 0) +\n-                ((b[off + 0]) << 8));\n-    }\n-\n-    /**\n-     * to int.\n-     *\n-     * @param b byte array.\n-     * @return int.\n-     */\n-    public static int bytes2int(byte[] b) {\n-        return bytes2int(b, 0);\n-    }\n-\n-    /**\n-     * to int.\n-     *\n-     * @param b   byte array.\n-     * @param off offset.\n-     * @return int.\n-     */\n-    public static int bytes2int(byte[] b, int off) {\n-        return ((b[off + 3] & 0xFF) << 0) +\n-                ((b[off + 2] & 0xFF) << 8) +\n-                ((b[off + 1] & 0xFF) << 16) +\n-                ((b[off + 0]) << 24);\n-    }\n-\n-    /**\n-     * to int.\n-     *\n-     * @param b byte array.\n-     * @return int.\n-     */\n-    public static float bytes2float(byte[] b) {\n-        return bytes2float(b, 0);\n-    }\n-\n-    /**\n-     * to int.\n-     *\n-     * @param b   byte array.\n-     * @param off offset.\n-     * @return int.\n-     */\n-    public static float bytes2float(byte[] b, int off) {\n-        int i = ((b[off + 3] & 0xFF) << 0) +\n-                ((b[off + 2] & 0xFF) << 8) +\n-                ((b[off + 1] & 0xFF) << 16) +\n-                ((b[off + 0]) << 24);\n-        return Float.intBitsToFloat(i);\n-    }\n-\n-    /**\n-     * to long.\n-     *\n-     * @param b byte array.\n-     * @return long.\n-     */\n-    public static long bytes2long(byte[] b) {\n-        return bytes2long(b, 0);\n-    }\n-\n-    /**\n-     * to long.\n-     *\n-     * @param b   byte array.\n-     * @param off offset.\n-     * @return long.\n-     */\n-    public static long bytes2long(byte[] b, int off) {\n-        return ((b[off + 7] & 0xFFL) << 0) +\n-                ((b[off + 6] & 0xFFL) << 8) +\n-                ((b[off + 5] & 0xFFL) << 16) +\n-                ((b[off + 4] & 0xFFL) << 24) +\n-                ((b[off + 3] & 0xFFL) << 32) +\n-                ((b[off + 2] & 0xFFL) << 40) +\n-                ((b[off + 1] & 0xFFL) << 48) +\n-                (((long) b[off + 0]) << 56);\n-    }\n-\n-    /**\n-     * to long.\n-     *\n-     * @param b byte array.\n-     * @return double.\n-     */\n-    public static double bytes2double(byte[] b) {\n-        return bytes2double(b, 0);\n-    }\n-\n-    /**\n-     * to long.\n-     *\n-     * @param b   byte array.\n-     * @param off offset.\n-     * @return double.\n-     */\n-    public static double bytes2double(byte[] b, int off) {\n-        long j = ((b[off + 7] & 0xFFL) << 0) +\n-                ((b[off + 6] & 0xFFL) << 8) +\n-                ((b[off + 5] & 0xFFL) << 16) +\n-                ((b[off + 4] & 0xFFL) << 24) +\n-                ((b[off + 3] & 0xFFL) << 32) +\n-                ((b[off + 2] & 0xFFL) << 40) +\n-                ((b[off + 1] & 0xFFL) << 48) +\n-                (((long) b[off + 0]) << 56);\n-        return Double.longBitsToDouble(j);\n-    }\n-\n-    /**\n-     * to hex string.\n-     *\n-     * @param bs byte array.\n-     * @return hex string.\n-     */\n-    public static String bytes2hex(byte[] bs) {\n-        return bytes2hex(bs, 0, bs.length);\n-    }\n-\n-    /**\n-     * to hex string.\n-     *\n-     * @param bs  byte array.\n-     * @param off offset.\n-     * @param len length.\n-     * @return hex string.\n-     */\n-    public static String bytes2hex(byte[] bs, int off, int len) {\n-        if (off < 0) {\n-            throw new IndexOutOfBoundsException(\"bytes2hex: offset < 0, offset is \" + off);\n-        }\n-        if (len < 0) {\n-            throw new IndexOutOfBoundsException(\"bytes2hex: length < 0, length is \" + len);\n-        }\n-        if (off + len > bs.length) {\n-            throw new IndexOutOfBoundsException(\"bytes2hex: offset + length > array length.\");\n-        }\n-\n-        byte b;\n-        int r = off, w = 0;\n-        char[] cs = new char[len * 2];\n-        for (int i = 0; i < len; i++) {\n-            b = bs[r++];\n-            cs[w++] = BASE16[b >> 4 & MASK4];\n-            cs[w++] = BASE16[b & MASK4];\n-        }\n-        return new String(cs);\n-    }\n-\n-    /**\n-     * from hex string.\n-     *\n-     * @param str hex string.\n-     * @return byte array.\n-     */\n-    public static byte[] hex2bytes(String str) {\n-        return hex2bytes(str, 0, str.length());\n-    }\n-\n-    /**\n-     * from hex string.\n-     *\n-     * @param str hex string.\n-     * @param off offset.\n-     * @param len length.\n-     * @return byte array.\n-     */\n-    public static byte[] hex2bytes(final String str, final int off, int len) {\n-        if ((len & 1) == 1) {\n-            throw new IllegalArgumentException(\"hex2bytes: ( len & 1 ) == 1.\");\n-        }\n-\n-        if (off < 0) {\n-            throw new IndexOutOfBoundsException(\"hex2bytes: offset < 0, offset is \" + off);\n-        }\n-        if (len < 0) {\n-            throw new IndexOutOfBoundsException(\"hex2bytes: length < 0, length is \" + len);\n-        }\n-        if (off + len > str.length()) {\n-            throw new IndexOutOfBoundsException(\"hex2bytes: offset + length > array length.\");\n-        }\n-\n-        int num = len / 2, r = off, w = 0;\n-        byte[] b = new byte[num];\n-        for (int i = 0; i < num; i++) {\n-            b[w++] = (byte) (hex(str.charAt(r++)) << 4 | hex(str.charAt(r++)));\n-        }\n-        return b;\n-    }\n-\n-    /**\n-     * to base64 string.\n-     *\n-     * @param b byte array.\n-     * @return base64 string.\n-     */\n-    public static String bytes2base64(byte[] b) {\n-        return bytes2base64(b, 0, b.length, BASE64);\n-    }\n-\n-    /**\n-     * to base64 string.\n-     *\n-     * @param b byte array.\n-     * @return base64 string.\n-     */\n-    public static String bytes2base64(byte[] b, int offset, int length) {\n-        return bytes2base64(b, offset, length, BASE64);\n-    }\n-\n-    /**\n-     * to base64 string.\n-     *\n-     * @param b    byte array.\n-     * @param code base64 code string(0-63 is base64 char,64 is pad char).\n-     * @return base64 string.\n-     */\n-    public static String bytes2base64(byte[] b, String code) {\n-        return bytes2base64(b, 0, b.length, code);\n-    }\n-\n-    /**\n-     * to base64 string.\n-     *\n-     * @param b    byte array.\n-     * @param code base64 code string(0-63 is base64 char,64 is pad char).\n-     * @return base64 string.\n-     */\n-    public static String bytes2base64(byte[] b, int offset, int length, String code) {\n-        if (code.length() < 64) {\n-            throw new IllegalArgumentException(\"Base64 code length < 64.\");\n-        }\n-\n-        return bytes2base64(b, offset, length, code.toCharArray());\n-    }\n-\n-    /**\n-     * to base64 string.\n-     *\n-     * @param b    byte array.\n-     * @param code base64 code(0-63 is base64 char,64 is pad char).\n-     * @return base64 string.\n-     */\n-    public static String bytes2base64(byte[] b, char[] code) {\n-        return bytes2base64(b, 0, b.length, code);\n-    }\n-\n-    /**\n-     * to base64 string.\n-     *\n-     * @param bs   byte array.\n-     * @param off  offset.\n-     * @param len  length.\n-     * @param code base64 code(0-63 is base64 char,64 is pad char).\n-     * @return base64 string.\n-     */\n-    public static String bytes2base64(final byte[] bs, final int off, final int len, final char[] code) {\n-        if (off < 0) {\n-            throw new IndexOutOfBoundsException(\"bytes2base64: offset < 0, offset is \" + off);\n-        }\n-        if (len < 0) {\n-            throw new IndexOutOfBoundsException(\"bytes2base64: length < 0, length is \" + len);\n-        }\n-        if (off + len > bs.length) {\n-            throw new IndexOutOfBoundsException(\"bytes2base64: offset + length > array length.\");\n-        }\n-\n-        if (code.length < 64) {\n-            throw new IllegalArgumentException(\"Base64 code length < 64.\");\n-        }\n-\n-        boolean pad = code.length > 64; // has pad char.\n-        int num = len / 3, rem = len % 3, r = off, w = 0;\n-        char[] cs = new char[num * 4 + (rem == 0 ? 0 : pad ? 4 : rem + 1)];\n-\n-        for (int i = 0; i < num; i++) {\n-            int b1 = bs[r++] & MASK8, b2 = bs[r++] & MASK8, b3 = bs[r++] & MASK8;\n-\n-            cs[w++] = code[b1 >> 2];\n-            cs[w++] = code[(b1 << 4) & MASK6 | (b2 >> 4)];\n-            cs[w++] = code[(b2 << 2) & MASK6 | (b3 >> 6)];\n-            cs[w++] = code[b3 & MASK6];\n-        }\n-\n-        if (rem == 1) {\n-            int b1 = bs[r++] & MASK8;\n-            cs[w++] = code[b1 >> 2];\n-            cs[w++] = code[(b1 << 4) & MASK6];\n-            if (pad) {\n-                cs[w++] = code[64];\n-                cs[w++] = code[64];\n-            }\n-        } else if (rem == 2) {\n-            int b1 = bs[r++] & MASK8, b2 = bs[r++] & MASK8;\n-            cs[w++] = code[b1 >> 2];\n-            cs[w++] = code[(b1 << 4) & MASK6 | (b2 >> 4)];\n-            cs[w++] = code[(b2 << 2) & MASK6];\n-            if (pad) {\n-                cs[w++] = code[64];\n-            }\n-        }\n-        return new String(cs);\n-    }\n-\n-    /**\n-     * from base64 string.\n-     *\n-     * @param str base64 string.\n-     * @return byte array.\n-     */\n-    public static byte[] base642bytes(String str) {\n-        return base642bytes(str, 0, str.length());\n-    }\n-\n-    /**\n-     * from base64 string.\n-     *\n-     * @param str    base64 string.\n-     * @param offset offset.\n-     * @param length length.\n-     * @return byte array.\n-     */\n-    public static byte[] base642bytes(String str, int offset, int length) {\n-        return base642bytes(str, offset, length, C64);\n-    }\n-\n-    /**\n-     * from base64 string.\n-     *\n-     * @param str  base64 string.\n-     * @param code base64 code(0-63 is base64 char,64 is pad char).\n-     * @return byte array.\n-     */\n-    public static byte[] base642bytes(String str, String code) {\n-        return base642bytes(str, 0, str.length(), code);\n-    }\n-\n-    /**\n-     * from base64 string.\n-     *\n-     * @param str  base64 string.\n-     * @param off  offset.\n-     * @param len  length.\n-     * @param code base64 code(0-63 is base64 char,64 is pad char).\n-     * @return byte array.\n-     */\n-    public static byte[] base642bytes(final String str, final int off, final int len, final String code) {\n-        if (off < 0) {\n-            throw new IndexOutOfBoundsException(\"base642bytes: offset < 0, offset is \" + off);\n-        }\n-        if (len < 0) {\n-            throw new IndexOutOfBoundsException(\"base642bytes: length < 0, length is \" + len);\n-        }\n-        if (len == 0) {\n-            return new byte[0];\n-        }\n-        if (off + len > str.length()) {\n-            throw new IndexOutOfBoundsException(\"base642bytes: offset + length > string length.\");\n-        }\n-\n-        if (code.length() < 64) {\n-            throw new IllegalArgumentException(\"Base64 code length < 64.\");\n-        }\n-\n-        int rem = len % 4;\n-        if (rem == 1) {\n-            throw new IllegalArgumentException(\"base642bytes: base64 string length % 4 == 1.\");\n-        }\n-\n-        int num = len / 4, size = num * 3;\n-        if (code.length() > 64) {\n-            if (rem != 0) {\n-                throw new IllegalArgumentException(\"base642bytes: base64 string length error.\");\n-            }\n-\n-            char pc = code.charAt(64);\n-            if (str.charAt(off + len - 2) == pc) {\n-                size -= 2;\n-                --num;\n-                rem = 2;\n-            } else if (str.charAt(off + len - 1) == pc) {\n-                size--;\n-                --num;\n-                rem = 3;\n-            }\n-        } else {\n-            if (rem == 2) {\n-                size++;\n-            } else if (rem == 3) {\n-                size += 2;\n-            }\n-        }\n-\n-        int r = off, w = 0;\n-        byte[] b = new byte[size], t = decodeTable(code);\n-        for (int i = 0; i < num; i++) {\n-            int c1 = t[str.charAt(r++)], c2 = t[str.charAt(r++)];\n-            int c3 = t[str.charAt(r++)], c4 = t[str.charAt(r++)];\n-\n-            b[w++] = (byte) ((c1 << 2) | (c2 >> 4));\n-            b[w++] = (byte) ((c2 << 4) | (c3 >> 2));\n-            b[w++] = (byte) ((c3 << 6) | c4);\n-        }\n-\n-        if (rem == 2) {\n-            int c1 = t[str.charAt(r++)], c2 = t[str.charAt(r++)];\n-\n-            b[w++] = (byte) ((c1 << 2) | (c2 >> 4));\n-        } else if (rem == 3) {\n-            int c1 = t[str.charAt(r++)], c2 = t[str.charAt(r++)], c3 = t[str.charAt(r++)];\n-\n-            b[w++] = (byte) ((c1 << 2) | (c2 >> 4));\n-            b[w++] = (byte) ((c2 << 4) | (c3 >> 2));\n-        }\n-        return b;\n-    }\n-\n-    /**\n-     * from base64 string.\n-     *\n-     * @param str  base64 string.\n-     * @param code base64 code(0-63 is base64 char,64 is pad char).\n-     * @return byte array.\n-     */\n-    public static byte[] base642bytes(String str, char[] code) {\n-        return base642bytes(str, 0, str.length(), code);\n-    }\n-\n-    /**\n-     * from base64 string.\n-     *\n-     * @param str  base64 string.\n-     * @param off  offset.\n-     * @param len  length.\n-     * @param code base64 code(0-63 is base64 char,64 is pad char).\n-     * @return byte array.\n-     */\n-    public static byte[] base642bytes(final String str, final int off, final int len, final char[] code) {\n-        if (off < 0) {\n-            throw new IndexOutOfBoundsException(\"base642bytes: offset < 0, offset is \" + off);\n-        }\n-        if (len < 0) {\n-            throw new IndexOutOfBoundsException(\"base642bytes: length < 0, length is \" + len);\n-        }\n-        if (len == 0) {\n-            return new byte[0];\n-        }\n-        if (off + len > str.length()) {\n-            throw new IndexOutOfBoundsException(\"base642bytes: offset + length > string length.\");\n-        }\n-\n-        if (code.length < 64) {\n-            throw new IllegalArgumentException(\"Base64 code length < 64.\");\n-        }\n-\n-        int rem = len % 4;\n-        if (rem == 1) {\n-            throw new IllegalArgumentException(\"base642bytes: base64 string length % 4 == 1.\");\n-        }\n-\n-        int num = len / 4, size = num * 3;\n-        if (code.length > 64) {\n-            if (rem != 0) {\n-                throw new IllegalArgumentException(\"base642bytes: base64 string length error.\");\n-            }\n-\n-            char pc = code[64];\n-            if (str.charAt(off + len - 2) == pc) {\n-                size -= 2;\n-                --num;\n-                rem = 2;\n-            } else if (str.charAt(off + len - 1) == pc) {\n-                size--;\n-                --num;\n-                rem = 3;\n-            }\n-        } else {\n-            if (rem == 2) {\n-                size++;\n-            } else if (rem == 3) {\n-                size += 2;\n-            }\n-        }\n-\n-        int r = off, w = 0;\n-        byte[] b = new byte[size];\n-        for (int i = 0; i < num; i++) {\n-            int c1 = indexOf(code, str.charAt(r++)), c2 = indexOf(code, str.charAt(r++));\n-            int c3 = indexOf(code, str.charAt(r++)), c4 = indexOf(code, str.charAt(r++));\n-\n-            b[w++] = (byte) ((c1 << 2) | (c2 >> 4));\n-            b[w++] = (byte) ((c2 << 4) | (c3 >> 2));\n-            b[w++] = (byte) ((c3 << 6) | c4);\n-        }\n-\n-        if (rem == 2) {\n-            int c1 = indexOf(code, str.charAt(r++)), c2 = indexOf(code, str.charAt(r++));\n-\n-            b[w++] = (byte) ((c1 << 2) | (c2 >> 4));\n-        } else if (rem == 3) {\n-            int c1 = indexOf(code, str.charAt(r++)), c2 = indexOf(code, str.charAt(r++)), c3 = indexOf(code, str.charAt(r++));\n-\n-            b[w++] = (byte) ((c1 << 2) | (c2 >> 4));\n-            b[w++] = (byte) ((c2 << 4) | (c3 >> 2));\n-        }\n-        return b;\n-    }\n-\n-    /**\n-     * zip.\n-     *\n-     * @param bytes source.\n-     * @return compressed byte array.\n-     * @throws IOException\n-     */\n-    public static byte[] zip(byte[] bytes) throws IOException {\n-        UnsafeByteArrayOutputStream bos = new UnsafeByteArrayOutputStream();\n-        OutputStream os = new DeflaterOutputStream(bos);\n-        try {\n-            os.write(bytes);\n-        } finally {\n-            os.close();\n-            bos.close();\n-        }\n-        return bos.toByteArray();\n-    }\n-\n-    /**\n-     * unzip.\n-     *\n-     * @param bytes compressed byte array.\n-     * @return byte uncompressed array.\n-     * @throws IOException\n-     */\n-    public static byte[] unzip(byte[] bytes) throws IOException {\n-        UnsafeByteArrayInputStream bis = new UnsafeByteArrayInputStream(bytes);\n-        UnsafeByteArrayOutputStream bos = new UnsafeByteArrayOutputStream();\n-        InputStream is = new InflaterInputStream(bis);\n-        try {\n-            IOUtils.write(is, bos);\n-            return bos.toByteArray();\n-        } finally {\n-            is.close();\n-            bis.close();\n-            bos.close();\n-        }\n-    }\n-\n-    /**\n-     * get md5.\n-     *\n-     * @param str input string.\n-     * @return MD5 byte array.\n-     */\n-    public static byte[] getMD5(String str) {\n-        return getMD5(str.getBytes());\n-    }\n-\n-    /**\n-     * get md5.\n-     *\n-     * @param source byte array source.\n-     * @return MD5 byte array.\n-     */\n-    public static byte[] getMD5(byte[] source) {\n-        MessageDigest md = getMessageDigest();\n-        return md.digest(source);\n-    }\n-\n-    /**\n-     * get md5.\n-     *\n-     * @param file file source.\n-     * @return MD5 byte array.\n-     */\n-    public static byte[] getMD5(File file) throws IOException {\n-        InputStream is = new FileInputStream(file);\n-        try {\n-            return getMD5(is);\n-        } finally {\n-            is.close();\n-        }\n-    }\n-\n-    /**\n-     * get md5.\n-     *\n-     * @param is input stream.\n-     * @return MD5 byte array.\n-     */\n-    public static byte[] getMD5(InputStream is) throws IOException {\n-        return getMD5(is, 1024 * 8);\n-    }\n-\n-    private static byte hex(char c) {\n-        if (c <= '9') {\n-            return (byte) (c - '0');\n-        }\n-        if (c >= 'a' && c <= 'f') {\n-            return (byte) (c - 'a' + 10);\n-        }\n-        if (c >= 'A' && c <= 'F') {\n-            return (byte) (c - 'A' + 10);\n-        }\n-        throw new IllegalArgumentException(\"hex string format error [\" + c + \"].\");\n-    }\n-\n-    private static int indexOf(char[] cs, char c) {\n-        for (int i = 0, len = cs.length; i < len; i++) {\n-            if (cs[i] == c) {\n-                return i;\n-            }\n-        }\n-        return -1;\n-    }\n-\n-    private static byte[] decodeTable(String code) {\n-        int hash = code.hashCode();\n-        byte[] ret = DECODE_TABLE_MAP.get(hash);\n-        if (ret == null) {\n-            if (code.length() < 64) {\n-                throw new IllegalArgumentException(\"Base64 code length < 64.\");\n-            }\n-            // create new decode table.\n-            ret = new byte[128];\n-            for (int i = 0; i < 128; i++) // init table.\n-            {\n-                ret[i] = -1;\n-            }\n-            for (int i = 0; i < 64; i++) {\n-                ret[code.charAt(i)] = (byte) i;\n-            }\n-            DECODE_TABLE_MAP.put(hash, ret);\n-        }\n-        return ret;\n-    }\n-\n-    private static byte[] getMD5(InputStream is, int bs) throws IOException {\n-        MessageDigest md = getMessageDigest();\n-        byte[] buf = new byte[bs];\n-        while (is.available() > 0) {\n-            int read, total = 0;\n-            do {\n-                if ((read = is.read(buf, total, bs - total)) <= 0) {\n-                    break;\n-                }\n-                total += read;\n-            }\n-            while (total < bs);\n-            md.update(buf);\n-        }\n-        return md.digest();\n-    }\n-\n-    private static MessageDigest getMessageDigest() {\n-        MessageDigest ret = MD.get();\n-        if (ret == null) {\n-            try {\n-                ret = MessageDigest.getInstance(\"MD5\");\n-                MD.set(ret);\n-            } catch (NoSuchAlgorithmException e) {\n-                throw new RuntimeException(e);\n-            }\n-        }\n-        return ret;\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.common.io;\r\n+\r\n+import org.apache.dubbo.common.utils.IOUtils;\r\n+\r\n+import java.io.File;\r\n+import java.io.FileInputStream;\r\n+import java.io.IOException;\r\n+import java.io.InputStream;\r\n+import java.io.OutputStream;\r\n+import java.security.MessageDigest;\r\n+import java.security.NoSuchAlgorithmException;\r\n+import java.util.Map;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.zip.DeflaterOutputStream;\r\n+import java.util.zip.InflaterInputStream;\r\n+\r\n+/**\r\n+ * CodecUtils.\r\n+ */\r\n+\r\n+public class Bytes {\r\n+    private static final String C64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"; //default base64.\r\n+\r\n+    private static final char[] BASE16 = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}, BASE64 = C64.toCharArray();\r\n+\r\n+    private static final int MASK4 = 0x0f, MASK6 = 0x3f, MASK8 = 0xff;\r\n+\r\n+    private static final Map<Integer, byte[]> DECODE_TABLE_MAP = new ConcurrentHashMap<Integer, byte[]>();\r\n+\r\n+    private static ThreadLocal<MessageDigest> MD = new ThreadLocal<MessageDigest>();\r\n+\r\n+    private Bytes() {\r\n+    }\r\n+\r\n+    /**\r\n+     * byte array copy.\r\n+     *\r\n+     * @param src    src.\r\n+     * @param length new length.\r\n+     * @return new byte array.\r\n+     */\r\n+    public static byte[] copyOf(byte[] src, int length) {\r\n+        byte[] dest = new byte[length];\r\n+        System.arraycopy(src, 0, dest, 0, Math.min(src.length, length));\r\n+        return dest;\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v value.\r\n+     * @return byte[].\r\n+     */\r\n+    public static byte[] short2bytes(short v) {\r\n+        byte[] ret = {0, 0};\r\n+        short2bytes(v, ret);\r\n+        return ret;\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v value.\r\n+     * @param b byte array.\r\n+     */\r\n+    public static void short2bytes(short v, byte[] b) {\r\n+        short2bytes(v, b, 0);\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v value.\r\n+     * @param b byte array.\r\n+     */\r\n+    public static void short2bytes(short v, byte[] b, int off) {\r\n+        b[off + 1] = (byte) v;\r\n+        b[off + 0] = (byte) (v >>> 8);\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v value.\r\n+     * @return byte[].\r\n+     */\r\n+    public static byte[] int2bytes(int v) {\r\n+        byte[] ret = {0, 0, 0, 0};\r\n+        int2bytes(v, ret);\r\n+        return ret;\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v value.\r\n+     * @param b byte array.\r\n+     */\r\n+    public static void int2bytes(int v, byte[] b) {\r\n+        int2bytes(v, b, 0);\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v   value.\r\n+     * @param b   byte array.\r\n+     * @param off array offset.\r\n+     */\r\n+    public static void int2bytes(int v, byte[] b, int off) {\r\n+        b[off + 3] = (byte) v;\r\n+        b[off + 2] = (byte) (v >>> 8);\r\n+        b[off + 1] = (byte) (v >>> 16);\r\n+        b[off + 0] = (byte) (v >>> 24);\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v value.\r\n+     * @return byte[].\r\n+     */\r\n+    public static byte[] float2bytes(float v) {\r\n+        byte[] ret = {0, 0, 0, 0};\r\n+        float2bytes(v, ret);\r\n+        return ret;\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v value.\r\n+     * @param b byte array.\r\n+     */\r\n+    public static void float2bytes(float v, byte[] b) {\r\n+        float2bytes(v, b, 0);\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v   value.\r\n+     * @param b   byte array.\r\n+     * @param off array offset.\r\n+     */\r\n+    public static void float2bytes(float v, byte[] b, int off) {\r\n+        int i = Float.floatToIntBits(v);\r\n+        b[off + 3] = (byte) i;\r\n+        b[off + 2] = (byte) (i >>> 8);\r\n+        b[off + 1] = (byte) (i >>> 16);\r\n+        b[off + 0] = (byte) (i >>> 24);\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v value.\r\n+     * @return byte[].\r\n+     */\r\n+    public static byte[] long2bytes(long v) {\r\n+        byte[] ret = {0, 0, 0, 0, 0, 0, 0, 0};\r\n+        long2bytes(v, ret);\r\n+        return ret;\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v value.\r\n+     * @param b byte array.\r\n+     */\r\n+    public static void long2bytes(long v, byte[] b) {\r\n+        long2bytes(v, b, 0);\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v   value.\r\n+     * @param b   byte array.\r\n+     * @param off array offset.\r\n+     */\r\n+    public static void long2bytes(long v, byte[] b, int off) {\r\n+        b[off + 7] = (byte) v;\r\n+        b[off + 6] = (byte) (v >>> 8);\r\n+        b[off + 5] = (byte) (v >>> 16);\r\n+        b[off + 4] = (byte) (v >>> 24);\r\n+        b[off + 3] = (byte) (v >>> 32);\r\n+        b[off + 2] = (byte) (v >>> 40);\r\n+        b[off + 1] = (byte) (v >>> 48);\r\n+        b[off + 0] = (byte) (v >>> 56);\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v value.\r\n+     * @return byte[].\r\n+     */\r\n+    public static byte[] double2bytes(double v) {\r\n+        byte[] ret = {0, 0, 0, 0, 0, 0, 0, 0};\r\n+        double2bytes(v, ret);\r\n+        return ret;\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v value.\r\n+     * @param b byte array.\r\n+     */\r\n+    public static void double2bytes(double v, byte[] b) {\r\n+        double2bytes(v, b, 0);\r\n+    }\r\n+\r\n+    /**\r\n+     * to byte array.\r\n+     *\r\n+     * @param v   value.\r\n+     * @param b   byte array.\r\n+     * @param off array offset.\r\n+     */\r\n+    public static void double2bytes(double v, byte[] b, int off) {\r\n+        long j = Double.doubleToLongBits(v);\r\n+        b[off + 7] = (byte) j;\r\n+        b[off + 6] = (byte) (j >>> 8);\r\n+        b[off + 5] = (byte) (j >>> 16);\r\n+        b[off + 4] = (byte) (j >>> 24);\r\n+        b[off + 3] = (byte) (j >>> 32);\r\n+        b[off + 2] = (byte) (j >>> 40);\r\n+        b[off + 1] = (byte) (j >>> 48);\r\n+        b[off + 0] = (byte) (j >>> 56);\r\n+    }\r\n+\r\n+    /**\r\n+     * to short.\r\n+     *\r\n+     * @param b byte array.\r\n+     * @return short.\r\n+     */\r\n+    public static short bytes2short(byte[] b) {\r\n+        return bytes2short(b, 0);\r\n+    }\r\n+\r\n+    /**\r\n+     * to short.\r\n+     *\r\n+     * @param b   byte array.\r\n+     * @param off offset.\r\n+     * @return short.\r\n+     */\r\n+    public static short bytes2short(byte[] b, int off) {\r\n+        return (short) (((b[off + 1] & 0xFF) << 0) +\r\n+                ((b[off + 0]) << 8));\r\n+    }\r\n+\r\n+    /**\r\n+     * to int.\r\n+     *\r\n+     * @param b byte array.\r\n+     * @return int.\r\n+     */\r\n+    public static int bytes2int(byte[] b) {\r\n+        return bytes2int(b, 0);\r\n+    }\r\n+\r\n+    /**\r\n+     * to int.\r\n+     *\r\n+     * @param b   byte array.\r\n+     * @param off offset.\r\n+     * @return int.\r\n+     */\r\n+    public static int bytes2int(byte[] b, int off) {\r\n+        return ((b[off + 3] & 0xFF) << 0) +\r\n+                ((b[off + 2] & 0xFF) << 8) +\r\n+                ((b[off + 1] & 0xFF) << 16) +\r\n+                ((b[off + 0]) << 24);\r\n+    }\r\n+\r\n+    /**\r\n+     * to int.\r\n+     *\r\n+     * @param b byte array.\r\n+     * @return int.\r\n+     */\r\n+    public static float bytes2float(byte[] b) {\r\n+        return bytes2float(b, 0);\r\n+    }\r\n+\r\n+    /**\r\n+     * to int.\r\n+     *\r\n+     * @param b   byte array.\r\n+     * @param off offset.\r\n+     * @return int.\r\n+     */\r\n+    public static float bytes2float(byte[] b, int off) {\r\n+        int i = ((b[off + 3] & 0xFF) << 0) +\r\n+                ((b[off + 2] & 0xFF) << 8) +\r\n+                ((b[off + 1] & 0xFF) << 16) +\r\n+                ((b[off + 0]) << 24);\r\n+        return Float.intBitsToFloat(i);\r\n+    }\r\n+\r\n+    /**\r\n+     * to long.\r\n+     *\r\n+     * @param b byte array.\r\n+     * @return long.\r\n+     */\r\n+    public static long bytes2long(byte[] b) {\r\n+        return bytes2long(b, 0);\r\n+    }\r\n+\r\n+    /**\r\n+     * to long.\r\n+     *\r\n+     * @param b   byte array.\r\n+     * @param off offset.\r\n+     * @return long.\r\n+     */\r\n+    public static long bytes2long(byte[] b, int off) {\r\n+        return ((b[off + 7] & 0xFFL) << 0) +\r\n+                ((b[off + 6] & 0xFFL) << 8) +\r\n+                ((b[off + 5] & 0xFFL) << 16) +\r\n+                ((b[off + 4] & 0xFFL) << 24) +\r\n+                ((b[off + 3] & 0xFFL) << 32) +\r\n+                ((b[off + 2] & 0xFFL) << 40) +\r\n+                ((b[off + 1] & 0xFFL) << 48) +\r\n+                (((long) b[off + 0]) << 56);\r\n+    }\r\n+\r\n+    /**\r\n+     * to long.\r\n+     *\r\n+     * @param b byte array.\r\n+     * @return double.\r\n+     */\r\n+    public static double bytes2double(byte[] b) {\r\n+        return bytes2double(b, 0);\r\n+    }\r\n+\r\n+    /**\r\n+     * to long.\r\n+     *\r\n+     * @param b   byte array.\r\n+     * @param off offset.\r\n+     * @return double.\r\n+     */\r\n+    public static double bytes2double(byte[] b, int off) {\r\n+        long j = ((b[off + 7] & 0xFFL) << 0) +\r\n+                ((b[off + 6] & 0xFFL) << 8) +\r\n+                ((b[off + 5] & 0xFFL) << 16) +\r\n+                ((b[off + 4] & 0xFFL) << 24) +\r\n+                ((b[off + 3] & 0xFFL) << 32) +\r\n+                ((b[off + 2] & 0xFFL) << 40) +\r\n+                ((b[off + 1] & 0xFFL) << 48) +\r\n+                (((long) b[off + 0]) << 56);\r\n+        return Double.longBitsToDouble(j);\r\n+    }\r\n+\r\n+    /**\r\n+     * to hex string.\r\n+     *\r\n+     * @param bs byte array.\r\n+     * @return hex string.\r\n+     */\r\n+    public static String bytes2hex(byte[] bs) {\r\n+        return bytes2hex(bs, 0, bs.length);\r\n+    }\r\n+\r\n+    /**\r\n+     * to hex string.\r\n+     *\r\n+     * @param bs  byte array.\r\n+     * @param off offset.\r\n+     * @param len length.\r\n+     * @return hex string.\r\n+     */\r\n+    public static String bytes2hex(byte[] bs, int off, int len) {\r\n+        if (off < 0) {\r\n+            throw new IndexOutOfBoundsException(\"bytes2hex: offset < 0, offset is \" + off);\r\n+        }\r\n+        if (len < 0) {\r\n+            throw new IndexOutOfBoundsException(\"bytes2hex: length < 0, length is \" + len);\r\n+        }\r\n+        if (off + len > bs.length) {\r\n+            throw new IndexOutOfBoundsException(\"bytes2hex: offset + length > array length.\");\r\n+        }\r\n+\r\n+        byte b;\r\n+        int r = off, w = 0;\r\n+        char[] cs = new char[len * 2];\r\n+        for (int i = 0; i < len; i++) {\r\n+            b = bs[r++];\r\n+            cs[w++] = BASE16[b >> 4 & MASK4];\r\n+            cs[w++] = BASE16[b & MASK4];\r\n+        }\r\n+        return new String(cs);\r\n+    }\r\n+\r\n+    /**\r\n+     * from hex string.\r\n+     *\r\n+     * @param str hex string.\r\n+     * @return byte array.\r\n+     */\r\n+    public static byte[] hex2bytes(String str) {\r\n+        return hex2bytes(str, 0, str.length());\r\n+    }\r\n+\r\n+    /**\r\n+     * from hex string.\r\n+     *\r\n+     * @param str hex string.\r\n+     * @param off offset.\r\n+     * @param len length.\r\n+     * @return byte array.\r\n+     */\r\n+    public static byte[] hex2bytes(final String str, final int off, int len) {\r\n+        if ((len & 1) == 1) {\r\n+            throw new IllegalArgumentException(\"hex2bytes: ( len & 1 ) == 1.\");\r\n+        }\r\n+\r\n+        if (off < 0) {\r\n+            throw new IndexOutOfBoundsException(\"hex2bytes: offset < 0, offset is \" + off);\r\n+        }\r\n+        if (len < 0) {\r\n+            throw new IndexOutOfBoundsException(\"hex2bytes: length < 0, length is \" + len);\r\n+        }\r\n+        if (off + len > str.length()) {\r\n+            throw new IndexOutOfBoundsException(\"hex2bytes: offset + length > array length.\");\r\n+        }\r\n+\r\n+        int num = len / 2, r = off, w = 0;\r\n+        byte[] b = new byte[num];\r\n+        for (int i = 0; i < num; i++) {\r\n+            b[w++] = (byte) (hex(str.charAt(r++)) << 4 | hex(str.charAt(r++)));\r\n+        }\r\n+        return b;\r\n+    }\r\n+\r\n+    /**\r\n+     * to base64 string.\r\n+     *\r\n+     * @param b byte array.\r\n+     * @return base64 string.\r\n+     */\r\n+    public static String bytes2base64(byte[] b) {\r\n+        return bytes2base64(b, 0, b.length, BASE64);\r\n+    }\r\n+\r\n+    /**\r\n+     * to base64 string.\r\n+     *\r\n+     * @param b byte array.\r\n+     * @return base64 string.\r\n+     */\r\n+    public static String bytes2base64(byte[] b, int offset, int length) {\r\n+        return bytes2base64(b, offset, length, BASE64);\r\n+    }\r\n+\r\n+    /**\r\n+     * to base64 string.\r\n+     *\r\n+     * @param b    byte array.\r\n+     * @param code base64 code string(0-63 is base64 char,64 is pad char).\r\n+     * @return base64 string.\r\n+     */\r\n+    public static String bytes2base64(byte[] b, String code) {\r\n+        return bytes2base64(b, 0, b.length, code);\r\n+    }\r\n+\r\n+    /**\r\n+     * to base64 string.\r\n+     *\r\n+     * @param b    byte array.\r\n+     * @param code base64 code string(0-63 is base64 char,64 is pad char).\r\n+     * @return base64 string.\r\n+     */\r\n+    public static String bytes2base64(byte[] b, int offset, int length, String code) {\r\n+        if (code.length() < 64) {\r\n+            throw new IllegalArgumentException(\"Base64 code length < 64.\");\r\n+        }\r\n+\r\n+        return bytes2base64(b, offset, length, code.toCharArray());\r\n+    }\r\n+\r\n+    /**\r\n+     * to base64 string.\r\n+     *\r\n+     * @param b    byte array.\r\n+     * @param code base64 code(0-63 is base64 char,64 is pad char).\r\n+     * @return base64 string.\r\n+     */\r\n+    public static String bytes2base64(byte[] b, char[] code) {\r\n+        return bytes2base64(b, 0, b.length, code);\r\n+    }\r\n+\r\n+    /**\r\n+     * to base64 string.\r\n+     *\r\n+     * @param bs   byte array.\r\n+     * @param off  offset.\r\n+     * @param len  length.\r\n+     * @param code base64 code(0-63 is base64 char,64 is pad char).\r\n+     * @return base64 string.\r\n+     */\r\n+    public static String bytes2base64(final byte[] bs, final int off, final int len, final char[] code) {\r\n+        if (off < 0) {\r\n+            throw new IndexOutOfBoundsException(\"bytes2base64: offset < 0, offset is \" + off);\r\n+        }\r\n+        if (len < 0) {\r\n+            throw new IndexOutOfBoundsException(\"bytes2base64: length < 0, length is \" + len);\r\n+        }\r\n+        if (off + len > bs.length) {\r\n+            throw new IndexOutOfBoundsException(\"bytes2base64: offset + length > array length.\");\r\n+        }\r\n+\r\n+        if (code.length < 64) {\r\n+            throw new IllegalArgumentException(\"Base64 code length < 64.\");\r\n+        }\r\n+\r\n+        boolean pad = code.length > 64; // has pad char.\r\n+        int num = len / 3, rem = len % 3, r = off, w = 0;\r\n+        char[] cs = new char[num * 4 + (rem == 0 ? 0 : pad ? 4 : rem + 1)];\r\n+\r\n+        for (int i = 0; i < num; i++) {\r\n+            int b1 = bs[r++] & MASK8, b2 = bs[r++] & MASK8, b3 = bs[r++] & MASK8;\r\n+\r\n+            cs[w++] = code[b1 >> 2];\r\n+            cs[w++] = code[(b1 << 4) & MASK6 | (b2 >> 4)];\r\n+            cs[w++] = code[(b2 << 2) & MASK6 | (b3 >> 6)];\r\n+            cs[w++] = code[b3 & MASK6];\r\n+        }\r\n+\r\n+        if (rem == 1) {\r\n+            int b1 = bs[r++] & MASK8;\r\n+            cs[w++] = code[b1 >> 2];\r\n+            cs[w++] = code[(b1 << 4) & MASK6];\r\n+            if (pad) {\r\n+                cs[w++] = code[64];\r\n+                cs[w++] = code[64];\r\n+            }\r\n+        } else if (rem == 2) {\r\n+            int b1 = bs[r++] & MASK8, b2 = bs[r++] & MASK8;\r\n+            cs[w++] = code[b1 >> 2];\r\n+            cs[w++] = code[(b1 << 4) & MASK6 | (b2 >> 4)];\r\n+            cs[w++] = code[(b2 << 2) & MASK6];\r\n+            if (pad) {\r\n+                cs[w++] = code[64];\r\n+            }\r\n+        }\r\n+        return new String(cs);\r\n+    }\r\n+\r\n+    /**\r\n+     * from base64 string.\r\n+     *\r\n+     * @param str base64 string.\r\n+     * @return byte array.\r\n+     */\r\n+    public static byte[] base642bytes(String str) {\r\n+        return base642bytes(str, 0, str.length());\r\n+    }\r\n+\r\n+    /**\r\n+     * from base64 string.\r\n+     *\r\n+     * @param str    base64 string.\r\n+     * @param offset offset.\r\n+     * @param length length.\r\n+     * @return byte array.\r\n+     */\r\n+    public static byte[] base642bytes(String str, int offset, int length) {\r\n+        return base642bytes(str, offset, length, C64);\r\n+    }\r\n+\r\n+    /**\r\n+     * from base64 string.\r\n+     *\r\n+     * @param str  base64 string.\r\n+     * @param code base64 code(0-63 is base64 char,64 is pad char).\r\n+     * @return byte array.\r\n+     */\r\n+    public static byte[] base642bytes(String str, String code) {\r\n+        return base642bytes(str, 0, str.length(), code);\r\n+    }\r\n+\r\n+    /**\r\n+     * from base64 string.\r\n+     *\r\n+     * @param str  base64 string.\r\n+     * @param off  offset.\r\n+     * @param len  length.\r\n+     * @param code base64 code(0-63 is base64 char,64 is pad char).\r\n+     * @return byte array.\r\n+     */\r\n+    public static byte[] base642bytes(final String str, final int off, final int len, final String code) {\r\n+        if (off < 0) {\r\n+            throw new IndexOutOfBoundsException(\"base642bytes: offset < 0, offset is \" + off);\r\n+        }\r\n+        if (len < 0) {\r\n+            throw new IndexOutOfBoundsException(\"base642bytes: length < 0, length is \" + len);\r\n+        }\r\n+        if (len == 0) {\r\n+            return new byte[0];\r\n+        }\r\n+        if (off + len > str.length()) {\r\n+            throw new IndexOutOfBoundsException(\"base642bytes: offset + length > string length.\");\r\n+        }\r\n+\r\n+        if (code.length() < 64) {\r\n+            throw new IllegalArgumentException(\"Base64 code length < 64.\");\r\n+        }\r\n+\r\n+        int rem = len % 4;\r\n+        if (rem == 1) {\r\n+            throw new IllegalArgumentException(\"base642bytes: base64 string length % 4 == 1.\");\r\n+        }\r\n+\r\n+        int num = len / 4, size = num * 3;\r\n+        if (code.length() > 64) {\r\n+            if (rem != 0) {\r\n+                throw new IllegalArgumentException(\"base642bytes: base64 string length error.\");\r\n+            }\r\n+\r\n+            char pc = code.charAt(64);\r\n+            if (str.charAt(off + len - 2) == pc) {\r\n+                size -= 2;\r\n+                --num;\r\n+                rem = 2;\r\n+            } else if (str.charAt(off + len - 1) == pc) {\r\n+                size--;\r\n+                --num;\r\n+                rem = 3;\r\n+            }\r\n+        } else {\r\n+            if (rem == 2) {\r\n+                size++;\r\n+            } else if (rem == 3) {\r\n+                size += 2;\r\n+            }\r\n+        }\r\n+\r\n+        int r = off, w = 0;\r\n+        byte[] b = new byte[size], t = decodeTable(code);\r\n+        for (int i = 0; i < num; i++) {\r\n+            int c1 = t[str.charAt(r++)], c2 = t[str.charAt(r++)];\r\n+            int c3 = t[str.charAt(r++)], c4 = t[str.charAt(r++)];\r\n+\r\n+            b[w++] = (byte) ((c1 << 2) | (c2 >> 4));\r\n+            b[w++] = (byte) ((c2 << 4) | (c3 >> 2));\r\n+            b[w++] = (byte) ((c3 << 6) | c4);\r\n+        }\r\n+\r\n+        if (rem == 2) {\r\n+            int c1 = t[str.charAt(r++)], c2 = t[str.charAt(r++)];\r\n+\r\n+            b[w++] = (byte) ((c1 << 2) | (c2 >> 4));\r\n+        } else if (rem == 3) {\r\n+            int c1 = t[str.charAt(r++)], c2 = t[str.charAt(r++)], c3 = t[str.charAt(r++)];\r\n+\r\n+            b[w++] = (byte) ((c1 << 2) | (c2 >> 4));\r\n+            b[w++] = (byte) ((c2 << 4) | (c3 >> 2));\r\n+        }\r\n+        return b;\r\n+    }\r\n+\r\n+    /**\r\n+     * from base64 string.\r\n+     *\r\n+     * @param str  base64 string.\r\n+     * @param code base64 code(0-63 is base64 char,64 is pad char).\r\n+     * @return byte array.\r\n+     */\r\n+    public static byte[] base642bytes(String str, char[] code) {\r\n+        return base642bytes(str, 0, str.length(), code);\r\n+    }\r\n+\r\n+    /**\r\n+     * from base64 string.\r\n+     *\r\n+     * @param str  base64 string.\r\n+     * @param off  offset.\r\n+     * @param len  length.\r\n+     * @param code base64 code(0-63 is base64 char,64 is pad char).\r\n+     * @return byte array.\r\n+     */\r\n+    public static byte[] base642bytes(final String str, final int off, final int len, final char[] code) {\r\n+        if (off < 0) {\r\n+            throw new IndexOutOfBoundsException(\"base642bytes: offset < 0, offset is \" + off);\r\n+        }\r\n+        if (len < 0) {\r\n+            throw new IndexOutOfBoundsException(\"base642bytes: length < 0, length is \" + len);\r\n+        }\r\n+        if (len == 0) {\r\n+            return new byte[0];\r\n+        }\r\n+        if (off + len > str.length()) {\r\n+            throw new IndexOutOfBoundsException(\"base642bytes: offset + length > string length.\");\r\n+        }\r\n+\r\n+        if (code.length < 64) {\r\n+            throw new IllegalArgumentException(\"Base64 code length < 64.\");\r\n+        }\r\n+\r\n+        int rem = len % 4;\r\n+        if (rem == 1) {\r\n+            throw new IllegalArgumentException(\"base642bytes: base64 string length % 4 == 1.\");\r\n+        }\r\n+\r\n+        int num = len / 4, size = num * 3;\r\n+        if (code.length > 64) {\r\n+            if (rem != 0) {\r\n+                throw new IllegalArgumentException(\"base642bytes: base64 string length error.\");\r\n+            }\r\n+\r\n+            char pc = code[64];\r\n+            if (str.charAt(off + len - 2) == pc) {\r\n+                size -= 2;\r\n+                --num;\r\n+                rem = 2;\r\n+            } else if (str.charAt(off + len - 1) == pc) {\r\n+                size--;\r\n+                --num;\r\n+                rem = 3;\r\n+            }\r\n+        } else {\r\n+            if (rem == 2) {\r\n+                size++;\r\n+            } else if (rem == 3) {\r\n+                size += 2;\r\n+            }\r\n+        }\r\n+\r\n+        int r = off, w = 0;\r\n+        byte[] b = new byte[size];\r\n+        for (int i = 0; i < num; i++) {\r\n+            int c1 = indexOf(code, str.charAt(r++)), c2 = indexOf(code, str.charAt(r++));\r\n+            int c3 = indexOf(code, str.charAt(r++)), c4 = indexOf(code, str.charAt(r++));\r\n+\r\n+            b[w++] = (byte) ((c1 << 2) | (c2 >> 4));\r\n+            b[w++] = (byte) ((c2 << 4) | (c3 >> 2));\r\n+            b[w++] = (byte) ((c3 << 6) | c4);\r\n+        }\r\n+\r\n+        if (rem == 2) {\r\n+            int c1 = indexOf(code, str.charAt(r++)), c2 = indexOf(code, str.charAt(r++));\r\n+\r\n+            b[w++] = (byte) ((c1 << 2) | (c2 >> 4));\r\n+        } else if (rem == 3) {\r\n+            int c1 = indexOf(code, str.charAt(r++)), c2 = indexOf(code, str.charAt(r++)), c3 = indexOf(code, str.charAt(r++));\r\n+\r\n+            b[w++] = (byte) ((c1 << 2) | (c2 >> 4));\r\n+            b[w++] = (byte) ((c2 << 4) | (c3 >> 2));\r\n+        }\r\n+        return b;\r\n+    }\r\n+\r\n+    /**\r\n+     * zip.\r\n+     *\r\n+     * @param bytes source.\r\n+     * @return compressed byte array.\r\n+     * @throws IOException\r\n+     */\r\n+    public static byte[] zip(byte[] bytes) throws IOException {\r\n+        UnsafeByteArrayOutputStream bos = new UnsafeByteArrayOutputStream();\r\n+        OutputStream os = new DeflaterOutputStream(bos);\r\n+        try {\r\n+            os.write(bytes);\r\n+        } finally {\r\n+            os.close();\r\n+            bos.close();\r\n+        }\r\n+        return bos.toByteArray();\r\n+    }\r\n+\r\n+    /**\r\n+     * unzip.\r\n+     *\r\n+     * @param bytes compressed byte array.\r\n+     * @return byte uncompressed array.\r\n+     * @throws IOException\r\n+     */\r\n+    public static byte[] unzip(byte[] bytes) throws IOException {\r\n+        UnsafeByteArrayInputStream bis = new UnsafeByteArrayInputStream(bytes);\r\n+        UnsafeByteArrayOutputStream bos = new UnsafeByteArrayOutputStream();\r\n+        InputStream is = new InflaterInputStream(bis);\r\n+        try {\r\n+            IOUtils.write(is, bos);\r\n+            return bos.toByteArray();\r\n+        } finally {\r\n+            is.close();\r\n+            bis.close();\r\n+            bos.close();\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * get md5.\r\n+     *\r\n+     * @param str input string.\r\n+     * @return MD5 byte array.\r\n+     */\r\n+    public static byte[] getMD5(String str) {\r\n+        return getMD5(str.getBytes());\r\n+    }\r\n+\r\n+    /**\r\n+     * get md5.\r\n+     *\r\n+     * @param source byte array source.\r\n+     * @return MD5 byte array.\r\n+     */\r\n+    public static byte[] getMD5(byte[] source) {\r\n+        MessageDigest md = getMessageDigest();\r\n+        return md.digest(source);\r\n+    }\r\n+\r\n+    /**\r\n+     * get md5.\r\n+     *\r\n+     * @param file file source.\r\n+     * @return MD5 byte array.\r\n+     */\r\n+    public static byte[] getMD5(File file) throws IOException {\r\n+        InputStream is = new FileInputStream(file);\r\n+        try {\r\n+            return getMD5(is);\r\n+        } finally {\r\n+            is.close();\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * get md5.\r\n+     *\r\n+     * @param is input stream.\r\n+     * @return MD5 byte array.\r\n+     */\r\n+    public static byte[] getMD5(InputStream is) throws IOException {\r\n+        return getMD5(is, 1024 * 8);\r\n+    }\r\n+\r\n+    private static byte hex(char c) {\r\n+        if (c <= '9') {\r\n+            return (byte) (c - '0');\r\n+        }\r\n+        if (c >= 'a' && c <= 'f') {\r\n+            return (byte) (c - 'a' + 10);\r\n+        }\r\n+        if (c >= 'A' && c <= 'F') {\r\n+            return (byte) (c - 'A' + 10);\r\n+        }\r\n+        throw new IllegalArgumentException(\"hex string format error [\" + c + \"].\");\r\n+    }\r\n+\r\n+    private static int indexOf(char[] cs, char c) {\r\n+        for (int i = 0, len = cs.length; i < len; i++) {\r\n+            if (cs[i] == c) {\r\n+                return i;\r\n+            }\r\n+        }\r\n+        return -1;\r\n+    }\r\n+\r\n+    private static byte[] decodeTable(String code) {\r\n+        int hash = code.hashCode();\r\n+        byte[] ret = DECODE_TABLE_MAP.get(hash);\r\n+        if (ret == null) {\r\n+            if (code.length() < 64) {\r\n+                throw new IllegalArgumentException(\"Base64 code length < 64.\");\r\n+            }\r\n+            // create new decode table.\r\n+            ret = new byte[128];\r\n+            for (int i = 0; i < 128; i++) // init table.\r\n+            {\r\n+                ret[i] = -1;\r\n+            }\r\n+            for (int i = 0; i < 64; i++) {\r\n+                ret[code.charAt(i)] = (byte) i;\r\n+            }\r\n+            DECODE_TABLE_MAP.put(hash, ret);\r\n+        }\r\n+        return ret;\r\n+    }\r\n+\r\n+    private static byte[] getMD5(InputStream is, int bs) throws IOException {\r\n+        MessageDigest md = getMessageDigest();\r\n+        byte[] buf = new byte[bs];\r\n+        while (is.available() > 0) {\r\n+            int read, total = 0;\r\n+            do {\r\n+                if ((read = is.read(buf, total, bs - total)) <= 0) {\r\n+                    break;\r\n+                }\r\n+                total += read;\r\n+            }\r\n+            while (total < bs);\r\n+            md.update(buf);\r\n+        }\r\n+        return md.digest();\r\n+    }\r\n+\r\n+    private static MessageDigest getMessageDigest() {\r\n+        MessageDigest ret = MD.get();\r\n+        if (ret == null) {\r\n+            try {\r\n+                ret = MessageDigest.getInstance(\"MD5\");\r\n+                MD.set(ret);\r\n+            } catch (NoSuchAlgorithmException e) {\r\n+                throw new RuntimeException(e);\r\n+            }\r\n+        }\r\n+        return ret;\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/common/io/StreamUtils.java", "source2": "org/apache/dubbo/common/io/StreamUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,231 +1,231 @@\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.common.io;\n-\n-import java.io.IOException;\n-import java.io.InputStream;\n-\n-/**\n- * Stream utils.\n- */\n-public class StreamUtils {\n-    private StreamUtils() {\n-    }\n-\n-    public static InputStream limitedInputStream(final InputStream is, final int limit) throws IOException {\n-        return new InputStream() {\n-            private int mPosition = 0, mMark = 0, mLimit = Math.min(limit, is.available());\n-\n-            @Override\n-            public int read() throws IOException {\n-                if (mPosition < mLimit) {\n-                    mPosition++;\n-                    return is.read();\n-                }\n-                return -1;\n-            }\n-\n-            @Override\n-            public int read(byte[] b, int off, int len) throws IOException {\n-                if (b == null) {\n-                    throw new NullPointerException();\n-                }\n-\n-                if (off < 0 || len < 0 || len > b.length - off) {\n-                    throw new IndexOutOfBoundsException();\n-                }\n-\n-                if (mPosition >= mLimit) {\n-                    return -1;\n-                }\n-\n-                if (mPosition + len > mLimit) {\n-                    len = mLimit - mPosition;\n-                }\n-\n-                if (len <= 0) {\n-                    return 0;\n-                }\n-\n-                is.read(b, off, len);\n-                mPosition += len;\n-                return len;\n-            }\n-\n-            @Override\n-            public long skip(long len) throws IOException {\n-                if (mPosition + len > mLimit) {\n-                    len = mLimit - mPosition;\n-                }\n-\n-                if (len <= 0) {\n-                    return 0;\n-                }\n-\n-                is.skip(len);\n-                mPosition += len;\n-                return len;\n-            }\n-\n-            @Override\n-            public int available() {\n-                return mLimit - mPosition;\n-            }\n-\n-            @Override\n-            public boolean markSupported() {\n-                return is.markSupported();\n-            }\n-\n-            @Override\n-            public void mark(int readlimit) {\n-                is.mark(readlimit);\n-                mMark = mPosition;\n-            }\n-\n-            @Override\n-            public void reset() throws IOException {\n-                is.reset();\n-                mPosition = mMark;\n-            }\n-\n-            @Override\n-            public void close() throws IOException {\n-                is.close();\n-            }\n-        };\n-    }\n-\n-    public static InputStream markSupportedInputStream(final InputStream is, final int markBufferSize) {\n-        if (is.markSupported()) {\n-            return is;\n-        }\n-\n-        return new InputStream() {\n-            byte[] mMarkBuffer;\n-\n-            boolean mInMarked = false;\n-            boolean mInReset = false;\n-            boolean mDry = false;\n-            private int mPosition = 0;\n-            private int mCount = 0;\n-\n-            @Override\n-            public int read() throws IOException {\n-                if (!mInMarked) {\n-                    return is.read();\n-                } else {\n-                    if (mPosition < mCount) {\n-                        byte b = mMarkBuffer[mPosition++];\n-                        return b & 0xFF;\n-                    }\n-\n-                    if (!mInReset) {\n-                        if (mDry) {\n-                            return -1;\n-                        }\n-\n-                        if (null == mMarkBuffer) {\n-                            mMarkBuffer = new byte[markBufferSize];\n-                        }\n-                        if (mPosition >= markBufferSize) {\n-                            throw new IOException(\"Mark buffer is full!\");\n-                        }\n-\n-                        int read = is.read();\n-                        if (-1 == read) {\n-                            mDry = true;\n-                            return -1;\n-                        }\n-\n-                        mMarkBuffer[mPosition++] = (byte) read;\n-                        mCount++;\n-\n-                        return read;\n-                    } else {\n-                        // mark buffer is used, exit mark status!\n-                        mInMarked = false;\n-                        mInReset = false;\n-                        mPosition = 0;\n-                        mCount = 0;\n-\n-                        return is.read();\n-                    }\n-                }\n-            }\n-\n-            /**\n-             * NOTE: the <code>readlimit</code> argument for this class\n-             *  has no meaning.\n-             */\n-            @Override\n-            public synchronized void mark(int readlimit) {\n-                mInMarked = true;\n-                mInReset = false;\n-\n-                // mark buffer is not empty\n-                int count = mCount - mPosition;\n-                if (count > 0) {\n-                    System.arraycopy(mMarkBuffer, mPosition, mMarkBuffer, 0, count);\n-                    mCount = count;\n-                    mPosition = 0;\n-                }\n-            }\n-\n-            @Override\n-            public synchronized void reset() throws IOException {\n-                if (!mInMarked) {\n-                    throw new IOException(\"should mark before reset!\");\n-                }\n-\n-                mInReset = true;\n-                mPosition = 0;\n-            }\n-\n-            @Override\n-            public boolean markSupported() {\n-                return true;\n-            }\n-\n-            @Override\n-            public int available() throws IOException {\n-                int available = is.available();\n-\n-                if (mInMarked && mInReset) {\n-                    available += mCount - mPosition;\n-                }\n-\n-                return available;\n-            }\n-\n-            @Override\n-            public void close() throws IOException {\n-                is.close();\n-            }\n-        };\n-    }\n-\n-    public static InputStream markSupportedInputStream(final InputStream is) {\n-        return markSupportedInputStream(is, 1024);\n-    }\n-\n-    public static void skipUnusedStream(InputStream is) throws IOException {\n-        if (is.available() > 0) {\n-            is.skip(is.available());\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.common.io;\r\n+\r\n+import java.io.IOException;\r\n+import java.io.InputStream;\r\n+\r\n+/**\r\n+ * Stream utils.\r\n+ */\r\n+public class StreamUtils {\r\n+    private StreamUtils() {\r\n+    }\r\n+\r\n+    public static InputStream limitedInputStream(final InputStream is, final int limit) throws IOException {\r\n+        return new InputStream() {\r\n+            private int mPosition = 0, mMark = 0, mLimit = Math.min(limit, is.available());\r\n+\r\n+            @Override\r\n+            public int read() throws IOException {\r\n+                if (mPosition < mLimit) {\r\n+                    mPosition++;\r\n+                    return is.read();\r\n+                }\r\n+                return -1;\r\n+            }\r\n+\r\n+            @Override\r\n+            public int read(byte[] b, int off, int len) throws IOException {\r\n+                if (b == null) {\r\n+                    throw new NullPointerException();\r\n+                }\r\n+\r\n+                if (off < 0 || len < 0 || len > b.length - off) {\r\n+                    throw new IndexOutOfBoundsException();\r\n+                }\r\n+\r\n+                if (mPosition >= mLimit) {\r\n+                    return -1;\r\n+                }\r\n+\r\n+                if (mPosition + len > mLimit) {\r\n+                    len = mLimit - mPosition;\r\n+                }\r\n+\r\n+                if (len <= 0) {\r\n+                    return 0;\r\n+                }\r\n+\r\n+                is.read(b, off, len);\r\n+                mPosition += len;\r\n+                return len;\r\n+            }\r\n+\r\n+            @Override\r\n+            public long skip(long len) throws IOException {\r\n+                if (mPosition + len > mLimit) {\r\n+                    len = mLimit - mPosition;\r\n+                }\r\n+\r\n+                if (len <= 0) {\r\n+                    return 0;\r\n+                }\r\n+\r\n+                is.skip(len);\r\n+                mPosition += len;\r\n+                return len;\r\n+            }\r\n+\r\n+            @Override\r\n+            public int available() {\r\n+                return mLimit - mPosition;\r\n+            }\r\n+\r\n+            @Override\r\n+            public boolean markSupported() {\r\n+                return is.markSupported();\r\n+            }\r\n+\r\n+            @Override\r\n+            public void mark(int readlimit) {\r\n+                is.mark(readlimit);\r\n+                mMark = mPosition;\r\n+            }\r\n+\r\n+            @Override\r\n+            public void reset() throws IOException {\r\n+                is.reset();\r\n+                mPosition = mMark;\r\n+            }\r\n+\r\n+            @Override\r\n+            public void close() throws IOException {\r\n+                is.close();\r\n+            }\r\n+        };\r\n+    }\r\n+\r\n+    public static InputStream markSupportedInputStream(final InputStream is, final int markBufferSize) {\r\n+        if (is.markSupported()) {\r\n+            return is;\r\n+        }\r\n+\r\n+        return new InputStream() {\r\n+            byte[] mMarkBuffer;\r\n+\r\n+            boolean mInMarked = false;\r\n+            boolean mInReset = false;\r\n+            boolean mDry = false;\r\n+            private int mPosition = 0;\r\n+            private int mCount = 0;\r\n+\r\n+            @Override\r\n+            public int read() throws IOException {\r\n+                if (!mInMarked) {\r\n+                    return is.read();\r\n+                } else {\r\n+                    if (mPosition < mCount) {\r\n+                        byte b = mMarkBuffer[mPosition++];\r\n+                        return b & 0xFF;\r\n+                    }\r\n+\r\n+                    if (!mInReset) {\r\n+                        if (mDry) {\r\n+                            return -1;\r\n+                        }\r\n+\r\n+                        if (null == mMarkBuffer) {\r\n+                            mMarkBuffer = new byte[markBufferSize];\r\n+                        }\r\n+                        if (mPosition >= markBufferSize) {\r\n+                            throw new IOException(\"Mark buffer is full!\");\r\n+                        }\r\n+\r\n+                        int read = is.read();\r\n+                        if (-1 == read) {\r\n+                            mDry = true;\r\n+                            return -1;\r\n+                        }\r\n+\r\n+                        mMarkBuffer[mPosition++] = (byte) read;\r\n+                        mCount++;\r\n+\r\n+                        return read;\r\n+                    } else {\r\n+                        // mark buffer is used, exit mark status!\r\n+                        mInMarked = false;\r\n+                        mInReset = false;\r\n+                        mPosition = 0;\r\n+                        mCount = 0;\r\n+\r\n+                        return is.read();\r\n+                    }\r\n+                }\r\n+            }\r\n+\r\n+            /**\r\n+             * NOTE: the <code>readlimit</code> argument for this class\r\n+             *  has no meaning.\r\n+             */\r\n+            @Override\r\n+            public synchronized void mark(int readlimit) {\r\n+                mInMarked = true;\r\n+                mInReset = false;\r\n+\r\n+                // mark buffer is not empty\r\n+                int count = mCount - mPosition;\r\n+                if (count > 0) {\r\n+                    System.arraycopy(mMarkBuffer, mPosition, mMarkBuffer, 0, count);\r\n+                    mCount = count;\r\n+                    mPosition = 0;\r\n+                }\r\n+            }\r\n+\r\n+            @Override\r\n+            public synchronized void reset() throws IOException {\r\n+                if (!mInMarked) {\r\n+                    throw new IOException(\"should mark before reset!\");\r\n+                }\r\n+\r\n+                mInReset = true;\r\n+                mPosition = 0;\r\n+            }\r\n+\r\n+            @Override\r\n+            public boolean markSupported() {\r\n+                return true;\r\n+            }\r\n+\r\n+            @Override\r\n+            public int available() throws IOException {\r\n+                int available = is.available();\r\n+\r\n+                if (mInMarked && mInReset) {\r\n+                    available += mCount - mPosition;\r\n+                }\r\n+\r\n+                return available;\r\n+            }\r\n+\r\n+            @Override\r\n+            public void close() throws IOException {\r\n+                is.close();\r\n+            }\r\n+        };\r\n+    }\r\n+\r\n+    public static InputStream markSupportedInputStream(final InputStream is) {\r\n+        return markSupportedInputStream(is, 1024);\r\n+    }\r\n+\r\n+    public static void skipUnusedStream(InputStream is) throws IOException {\r\n+        if (is.available() > 0) {\r\n+            is.skip(is.available());\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/io/UnsafeByteArrayInputStream.java", "source2": "org/apache/dubbo/common/io/UnsafeByteArrayInputStream.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,118 +1,118 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.common.io;\n-\n-import java.io.IOException;\n-import java.io.InputStream;\n-\n-/**\n- * UnsafeByteArrayInputStream.\n- */\n-public class UnsafeByteArrayInputStream extends InputStream {\n-    protected byte[] mData;\n-\n-    protected int mPosition, mLimit, mMark = 0;\n-\n-    public UnsafeByteArrayInputStream(byte[] buf) {\n-        this(buf, 0, buf.length);\n-    }\n-\n-    public UnsafeByteArrayInputStream(byte[] buf, int offset) {\n-        this(buf, offset, buf.length - offset);\n-    }\n-\n-    public UnsafeByteArrayInputStream(byte[] buf, int offset, int length) {\n-        mData = buf;\n-        mPosition = mMark = offset;\n-        mLimit = Math.min(offset + length, buf.length);\n-    }\n-\n-    @Override\n-    public int read() {\n-        return (mPosition < mLimit) ? (mData[mPosition++] & 0xff) : -1;\n-    }\n-\n-    @Override\n-    public int read(byte[] b, int off, int len) {\n-        if (b == null) {\n-            throw new NullPointerException();\n-        }\n-        if (off < 0 || len < 0 || len > b.length - off) {\n-            throw new IndexOutOfBoundsException();\n-        }\n-        if (mPosition >= mLimit) {\n-            return -1;\n-        }\n-        if (mPosition + len > mLimit) {\n-            len = mLimit - mPosition;\n-        }\n-        if (len <= 0) {\n-            return 0;\n-        }\n-        System.arraycopy(mData, mPosition, b, off, len);\n-        mPosition += len;\n-        return len;\n-    }\n-\n-    @Override\n-    public long skip(long len) {\n-        if (mPosition + len > mLimit) {\n-            len = mLimit - mPosition;\n-        }\n-        if (len <= 0) {\n-            return 0;\n-        }\n-        mPosition += len;\n-        return len;\n-    }\n-\n-    @Override\n-    public int available() {\n-        return mLimit - mPosition;\n-    }\n-\n-    @Override\n-    public boolean markSupported() {\n-        return true;\n-    }\n-\n-    @Override\n-    public void mark(int readAheadLimit) {\n-        mMark = mPosition;\n-    }\n-\n-    @Override\n-    public void reset() {\n-        mPosition = mMark;\n-    }\n-\n-    @Override\n-    public void close() throws IOException {\n-    }\n-\n-    public int position() {\n-        return mPosition;\n-    }\n-\n-    public void position(int newPosition) {\n-        mPosition = newPosition;\n-    }\n-\n-    public int size() {\n-        return mData == null ? 0 : mData.length;\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.common.io;\r\n+\r\n+import java.io.IOException;\r\n+import java.io.InputStream;\r\n+\r\n+/**\r\n+ * UnsafeByteArrayInputStream.\r\n+ */\r\n+public class UnsafeByteArrayInputStream extends InputStream {\r\n+    protected byte[] mData;\r\n+\r\n+    protected int mPosition, mLimit, mMark = 0;\r\n+\r\n+    public UnsafeByteArrayInputStream(byte[] buf) {\r\n+        this(buf, 0, buf.length);\r\n+    }\r\n+\r\n+    public UnsafeByteArrayInputStream(byte[] buf, int offset) {\r\n+        this(buf, offset, buf.length - offset);\r\n+    }\r\n+\r\n+    public UnsafeByteArrayInputStream(byte[] buf, int offset, int length) {\r\n+        mData = buf;\r\n+        mPosition = mMark = offset;\r\n+        mLimit = Math.min(offset + length, buf.length);\r\n+    }\r\n+\r\n+    @Override\r\n+    public int read() {\r\n+        return (mPosition < mLimit) ? (mData[mPosition++] & 0xff) : -1;\r\n+    }\r\n+\r\n+    @Override\r\n+    public int read(byte[] b, int off, int len) {\r\n+        if (b == null) {\r\n+            throw new NullPointerException();\r\n+        }\r\n+        if (off < 0 || len < 0 || len > b.length - off) {\r\n+            throw new IndexOutOfBoundsException();\r\n+        }\r\n+        if (mPosition >= mLimit) {\r\n+            return -1;\r\n+        }\r\n+        if (mPosition + len > mLimit) {\r\n+            len = mLimit - mPosition;\r\n+        }\r\n+        if (len <= 0) {\r\n+            return 0;\r\n+        }\r\n+        System.arraycopy(mData, mPosition, b, off, len);\r\n+        mPosition += len;\r\n+        return len;\r\n+    }\r\n+\r\n+    @Override\r\n+    public long skip(long len) {\r\n+        if (mPosition + len > mLimit) {\r\n+            len = mLimit - mPosition;\r\n+        }\r\n+        if (len <= 0) {\r\n+            return 0;\r\n+        }\r\n+        mPosition += len;\r\n+        return len;\r\n+    }\r\n+\r\n+    @Override\r\n+    public int available() {\r\n+        return mLimit - mPosition;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean markSupported() {\r\n+        return true;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void mark(int readAheadLimit) {\r\n+        mMark = mPosition;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void reset() {\r\n+        mPosition = mMark;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void close() throws IOException {\r\n+    }\r\n+\r\n+    public int position() {\r\n+        return mPosition;\r\n+    }\r\n+\r\n+    public void position(int newPosition) {\r\n+        mPosition = newPosition;\r\n+    }\r\n+\r\n+    public int size() {\r\n+        return mData == null ? 0 : mData.length;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/io/UnsafeByteArrayOutputStream.java", "source2": "org/apache/dubbo/common/io/UnsafeByteArrayOutputStream.java", "comments": ["Line-ending 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.common.io;\n-\n-import java.io.IOException;\n-import java.io.OutputStream;\n-import java.io.UnsupportedEncodingException;\n-import java.nio.ByteBuffer;\n-\n-/**\n- * UnsafeByteArrayOutputStream.\n- */\n-public class UnsafeByteArrayOutputStream extends OutputStream {\n-    protected byte[] mBuffer;\n-\n-    protected int mCount;\n-\n-    public UnsafeByteArrayOutputStream() {\n-        this(32);\n-    }\n-\n-    public UnsafeByteArrayOutputStream(int size) {\n-        if (size < 0) {\n-            throw new IllegalArgumentException(\"Negative initial size: \" + size);\n-        }\n-        mBuffer = new byte[size];\n-    }\n-\n-    @Override\n-    public void write(int b) {\n-        int newcount = mCount + 1;\n-        if (newcount > mBuffer.length) {\n-            mBuffer = Bytes.copyOf(mBuffer, Math.max(mBuffer.length << 1, newcount));\n-        }\n-        mBuffer[mCount] = (byte) b;\n-        mCount = newcount;\n-    }\n-\n-    @Override\n-    public void write(byte[] b, int off, int len) {\n-        if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) {\n-            throw new IndexOutOfBoundsException();\n-        }\n-        if (len == 0) {\n-            return;\n-        }\n-        int newcount = mCount + len;\n-        if (newcount > mBuffer.length) {\n-            mBuffer = Bytes.copyOf(mBuffer, Math.max(mBuffer.length << 1, newcount));\n-        }\n-        System.arraycopy(b, off, mBuffer, mCount, len);\n-        mCount = newcount;\n-    }\n-\n-    public int size() {\n-        return mCount;\n-    }\n-\n-    public void reset() {\n-        mCount = 0;\n-    }\n-\n-    public byte[] toByteArray() {\n-        return Bytes.copyOf(mBuffer, mCount);\n-    }\n-\n-    public ByteBuffer toByteBuffer() {\n-        return ByteBuffer.wrap(mBuffer, 0, mCount);\n-    }\n-\n-    public void writeTo(OutputStream out) throws IOException {\n-        out.write(mBuffer, 0, mCount);\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return new String(mBuffer, 0, mCount);\n-    }\n-\n-    public String toString(String charset) throws UnsupportedEncodingException {\n-        return new String(mBuffer, 0, mCount, charset);\n-    }\n-\n-    @Override\n-    public void close() throws IOException {\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.common.io;\r\n+\r\n+import java.io.IOException;\r\n+import java.io.OutputStream;\r\n+import java.io.UnsupportedEncodingException;\r\n+import java.nio.ByteBuffer;\r\n+\r\n+/**\r\n+ * UnsafeByteArrayOutputStream.\r\n+ */\r\n+public class UnsafeByteArrayOutputStream extends OutputStream {\r\n+    protected byte[] mBuffer;\r\n+\r\n+    protected int mCount;\r\n+\r\n+    public UnsafeByteArrayOutputStream() {\r\n+        this(32);\r\n+    }\r\n+\r\n+    public UnsafeByteArrayOutputStream(int size) {\r\n+        if (size < 0) {\r\n+            throw new IllegalArgumentException(\"Negative initial size: \" + size);\r\n+        }\r\n+        mBuffer = new byte[size];\r\n+    }\r\n+\r\n+    @Override\r\n+    public void write(int b) {\r\n+        int newcount = mCount + 1;\r\n+        if (newcount > mBuffer.length) {\r\n+            mBuffer = Bytes.copyOf(mBuffer, Math.max(mBuffer.length << 1, newcount));\r\n+        }\r\n+        mBuffer[mCount] = (byte) b;\r\n+        mCount = newcount;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void write(byte[] b, int off, int len) {\r\n+        if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) {\r\n+            throw new IndexOutOfBoundsException();\r\n+        }\r\n+        if (len == 0) {\r\n+            return;\r\n+        }\r\n+        int newcount = mCount + len;\r\n+        if (newcount > mBuffer.length) {\r\n+            mBuffer = Bytes.copyOf(mBuffer, Math.max(mBuffer.length << 1, newcount));\r\n+        }\r\n+        System.arraycopy(b, off, mBuffer, mCount, len);\r\n+        mCount = newcount;\r\n+    }\r\n+\r\n+    public int size() {\r\n+        return mCount;\r\n+    }\r\n+\r\n+    public void reset() {\r\n+        mCount = 0;\r\n+    }\r\n+\r\n+    public byte[] toByteArray() {\r\n+        return Bytes.copyOf(mBuffer, mCount);\r\n+    }\r\n+\r\n+    public ByteBuffer toByteBuffer() {\r\n+        return ByteBuffer.wrap(mBuffer, 0, mCount);\r\n+    }\r\n+\r\n+    public void writeTo(OutputStream out) throws IOException {\r\n+        out.write(mBuffer, 0, mCount);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return new String(mBuffer, 0, mCount);\r\n+    }\r\n+\r\n+    public String toString(String charset) throws UnsupportedEncodingException {\r\n+        return new String(mBuffer, 0, mCount, charset);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void close() throws IOException {\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/io/UnsafeStringWriter.java", "source2": "org/apache/dubbo/common/io/UnsafeStringWriter.java", "comments": ["Line-ending 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.common.io;\n-\n-import java.io.IOException;\n-import java.io.Writer;\n-\n-/**\n- * Thread-unsafe StringWriter.\n- */\n-public class UnsafeStringWriter extends Writer {\n-    private StringBuilder mBuffer;\n-\n-    public UnsafeStringWriter() {\n-        lock = mBuffer = new StringBuilder();\n-    }\n-\n-    public UnsafeStringWriter(int size) {\n-        if (size < 0) {\n-            throw new IllegalArgumentException(\"Negative buffer size\");\n-        }\n-\n-        lock = mBuffer = new StringBuilder();\n-    }\n-\n-    @Override\n-    public void write(int c) {\n-        mBuffer.append((char) c);\n-    }\n-\n-    @Override\n-    public void write(char[] cs) throws IOException {\n-        mBuffer.append(cs, 0, cs.length);\n-    }\n-\n-    @Override\n-    public void write(char[] cs, int off, int len) throws IOException {\n-        if ((off < 0) || (off > cs.length) || (len < 0) ||\n-                ((off + len) > cs.length) || ((off + len) < 0)) {\n-            throw new IndexOutOfBoundsException();\n-        }\n-\n-        if (len > 0) {\n-            mBuffer.append(cs, off, len);\n-        }\n-    }\n-\n-    @Override\n-    public void write(String str) {\n-        mBuffer.append(str);\n-    }\n-\n-    @Override\n-    public void write(String str, int off, int len) {\n-        mBuffer.append(str, off, off + len);\n-    }\n-\n-    @Override\n-    public Writer append(CharSequence csq) {\n-        if (csq == null) {\n-            write(\"null\");\n-        } else {\n-            write(csq.toString());\n-        }\n-        return this;\n-    }\n-\n-    @Override\n-    public Writer append(CharSequence csq, int start, int end) {\n-        CharSequence cs = (csq == null ? \"null\" : csq);\n-        write(cs.subSequence(start, end).toString());\n-        return this;\n-    }\n-\n-    @Override\n-    public Writer append(char c) {\n-        mBuffer.append(c);\n-        return this;\n-    }\n-\n-    @Override\n-    public void close() {\n-    }\n-\n-    @Override\n-    public void flush() {\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return mBuffer.toString();\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.common.io;\r\n+\r\n+import java.io.IOException;\r\n+import java.io.Writer;\r\n+\r\n+/**\r\n+ * Thread-unsafe StringWriter.\r\n+ */\r\n+public class UnsafeStringWriter extends Writer {\r\n+    private StringBuilder mBuffer;\r\n+\r\n+    public UnsafeStringWriter() {\r\n+        lock = mBuffer = new StringBuilder();\r\n+    }\r\n+\r\n+    public UnsafeStringWriter(int size) {\r\n+        if (size < 0) {\r\n+            throw new IllegalArgumentException(\"Negative buffer size\");\r\n+        }\r\n+\r\n+        lock = mBuffer = new StringBuilder();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void write(int c) {\r\n+        mBuffer.append((char) c);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void write(char[] cs) throws IOException {\r\n+        mBuffer.append(cs, 0, cs.length);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void write(char[] cs, int off, int len) throws IOException {\r\n+        if ((off < 0) || (off > cs.length) || (len < 0) ||\r\n+                ((off + len) > cs.length) || ((off + len) < 0)) {\r\n+            throw new IndexOutOfBoundsException();\r\n+        }\r\n+\r\n+        if (len > 0) {\r\n+            mBuffer.append(cs, off, len);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void write(String str) {\r\n+        mBuffer.append(str);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void write(String str, int off, int len) {\r\n+        mBuffer.append(str, off, off + len);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Writer append(CharSequence csq) {\r\n+        if (csq == null) {\r\n+            write(\"null\");\r\n+        } else {\r\n+            write(csq.toString());\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Writer append(CharSequence csq, int start, int end) {\r\n+        CharSequence cs = (csq == null ? \"null\" : csq);\r\n+        write(cs.subSequence(start, end).toString());\r\n+        return this;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Writer append(char c) {\r\n+        mBuffer.append(c);\r\n+        return this;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void close() {\r\n+    }\r\n+\r\n+    @Override\r\n+    public void flush() {\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return mBuffer.toString();\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/common/json/GenericJSONConverter.java", "source2": "org/apache/dubbo/common/json/GenericJSONConverter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,528 +1,528 @@\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.common.json;\n-\n-import org.apache.dubbo.common.bytecode.Wrapper;\n-import org.apache.dubbo.common.io.Bytes;\n-\n-import java.io.IOException;\n-import java.lang.reflect.Array;\n-import java.math.BigDecimal;\n-import java.math.BigInteger;\n-import java.text.ParseException;\n-import java.text.SimpleDateFormat;\n-import java.util.Collection;\n-import java.util.Date;\n-import java.util.HashMap;\n-import java.util.Locale;\n-import java.util.Map;\n-import java.util.concurrent.atomic.AtomicInteger;\n-import java.util.concurrent.atomic.AtomicLong;\n-\n-@Deprecated\n-public class GenericJSONConverter implements JSONConverter {\n-    private static final String DATE_FORMAT = \"yyyy-MM-dd HH:mm:ss\";\n-    private static final Map<Class<?>, Encoder> GLOBAL_ENCODER_MAP = new HashMap<Class<?>, Encoder>();\n-    private static final Map<Class<?>, Decoder> GLOBAL_DECODER_MAP = new HashMap<Class<?>, Decoder>();\n-\n-    static {\n-        // init encoder map.\n-        Encoder e = new Encoder() {\n-            @Override\n-            public void encode(Object obj, JSONWriter jb) throws IOException {\n-                jb.valueBoolean((Boolean) obj);\n-            }\n-        };\n-        GLOBAL_ENCODER_MAP.put(boolean.class, e);\n-        GLOBAL_ENCODER_MAP.put(Boolean.class, e);\n-\n-        e = new Encoder() {\n-            @Override\n-            public void encode(Object obj, JSONWriter jb) throws IOException {\n-                jb.valueInt(((Number) obj).intValue());\n-            }\n-        };\n-        GLOBAL_ENCODER_MAP.put(int.class, e);\n-        GLOBAL_ENCODER_MAP.put(Integer.class, e);\n-        GLOBAL_ENCODER_MAP.put(short.class, e);\n-        GLOBAL_ENCODER_MAP.put(Short.class, e);\n-        GLOBAL_ENCODER_MAP.put(byte.class, e);\n-        GLOBAL_ENCODER_MAP.put(Byte.class, e);\n-        GLOBAL_ENCODER_MAP.put(AtomicInteger.class, e);\n-\n-        e = new Encoder() {\n-            @Override\n-            public void encode(Object obj, JSONWriter jb) throws IOException {\n-                jb.valueString(Character.toString((Character) obj));\n-            }\n-        };\n-        GLOBAL_ENCODER_MAP.put(char.class, e);\n-        GLOBAL_ENCODER_MAP.put(Character.class, e);\n-\n-        e = new Encoder() {\n-            @Override\n-            public void encode(Object obj, JSONWriter jb) throws IOException {\n-                jb.valueLong(((Number) obj).longValue());\n-            }\n-        };\n-        GLOBAL_ENCODER_MAP.put(long.class, e);\n-        GLOBAL_ENCODER_MAP.put(Long.class, e);\n-        GLOBAL_ENCODER_MAP.put(AtomicLong.class, e);\n-        GLOBAL_ENCODER_MAP.put(BigInteger.class, e);\n-\n-        e = new Encoder() {\n-            @Override\n-            public void encode(Object obj, JSONWriter jb) throws IOException {\n-                jb.valueFloat(((Number) obj).floatValue());\n-            }\n-        };\n-        GLOBAL_ENCODER_MAP.put(float.class, e);\n-        GLOBAL_ENCODER_MAP.put(Float.class, e);\n-\n-        e = new Encoder() {\n-            @Override\n-            public void encode(Object obj, JSONWriter jb) throws IOException {\n-                jb.valueDouble(((Number) obj).doubleValue());\n-            }\n-        };\n-        GLOBAL_ENCODER_MAP.put(double.class, e);\n-        GLOBAL_ENCODER_MAP.put(Double.class, e);\n-        GLOBAL_ENCODER_MAP.put(BigDecimal.class, e);\n-\n-        e = new Encoder() {\n-            @Override\n-            public void encode(Object obj, JSONWriter jb) throws IOException {\n-                jb.valueString(obj.toString());\n-            }\n-        };\n-        GLOBAL_ENCODER_MAP.put(String.class, e);\n-        GLOBAL_ENCODER_MAP.put(StringBuilder.class, e);\n-        GLOBAL_ENCODER_MAP.put(StringBuffer.class, e);\n-\n-        e = new Encoder() {\n-            @Override\n-            public void encode(Object obj, JSONWriter jb) throws IOException {\n-                jb.valueString(Bytes.bytes2base64((byte[]) obj));\n-            }\n-        };\n-        GLOBAL_ENCODER_MAP.put(byte[].class, e);\n-\n-        e = new Encoder() {\n-            @Override\n-            public void encode(Object obj, JSONWriter jb) throws IOException {\n-                jb.valueString(new SimpleDateFormat(DATE_FORMAT).format((Date) obj));\n-            }\n-        };\n-        GLOBAL_ENCODER_MAP.put(Date.class, e);\n-\n-        // init decoder map.\n-        Decoder d = Object::toString;\n-        GLOBAL_DECODER_MAP.put(String.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Boolean) {\n-                    return ((Boolean) jv).booleanValue();\n-                }\n-                return false;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(boolean.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Boolean) {\n-                    return (Boolean) jv;\n-                }\n-                return (Boolean) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(Boolean.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof String && ((String) jv).length() > 0) {\n-                    return ((String) jv).charAt(0);\n-                }\n-                return (char) 0;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(char.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof String && ((String) jv).length() > 0) {\n-                    return ((String) jv).charAt(0);\n-                }\n-                return (Character) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(Character.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Number) {\n-                    return ((Number) jv).intValue();\n-                }\n-                return 0;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(int.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Number) {\n-                    return Integer.valueOf(((Number) jv).intValue());\n-                }\n-                return (Integer) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(Integer.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Number) {\n-                    return ((Number) jv).shortValue();\n-                }\n-                return (short) 0;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(short.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Number) {\n-                    return Short.valueOf(((Number) jv).shortValue());\n-                }\n-                return (Short) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(Short.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Number) {\n-                    return ((Number) jv).longValue();\n-                }\n-                return (long) 0;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(long.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Number) {\n-                    return Long.valueOf(((Number) jv).longValue());\n-                }\n-                return (Long) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(Long.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Number) {\n-                    return ((Number) jv).floatValue();\n-                }\n-                return (float) 0;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(float.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Number) {\n-                    return new Float(((Number) jv).floatValue());\n-                }\n-                return (Float) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(Float.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Number) {\n-                    return ((Number) jv).doubleValue();\n-                }\n-                return (double) 0;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(double.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Number) {\n-                    return new Double(((Number) jv).doubleValue());\n-                }\n-                return (Double) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(Double.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Number) {\n-                    return ((Number) jv).byteValue();\n-                }\n-                return (byte) 0;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(byte.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) {\n-                if (jv instanceof Number) {\n-                    return Byte.valueOf(((Number) jv).byteValue());\n-                }\n-                return (Byte) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(Byte.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) throws IOException {\n-                if (jv instanceof String) {\n-                    return Bytes.base642bytes((String) jv);\n-                }\n-                return (byte[]) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(byte[].class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) throws IOException {\n-                return new StringBuilder(jv.toString());\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(StringBuilder.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) throws IOException {\n-                return new StringBuffer(jv.toString());\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(StringBuffer.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) throws IOException {\n-                if (jv instanceof Number) {\n-                    return BigInteger.valueOf(((Number) jv).longValue());\n-                }\n-                return (BigInteger) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(BigInteger.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) throws IOException {\n-                if (jv instanceof Number) {\n-                    return BigDecimal.valueOf(((Number) jv).doubleValue());\n-                }\n-                return (BigDecimal) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(BigDecimal.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) throws IOException {\n-                if (jv instanceof Number) {\n-                    return new AtomicInteger(((Number) jv).intValue());\n-                }\n-                return (AtomicInteger) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(AtomicInteger.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) throws IOException {\n-                if (jv instanceof Number) {\n-                    return new AtomicLong(((Number) jv).longValue());\n-                }\n-                return (AtomicLong) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(AtomicLong.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) throws IOException {\n-                if (jv instanceof String) {\n-                    try {\n-                        return new SimpleDateFormat(DATE_FORMAT).parse((String) jv);\n-                    } catch (ParseException e) {\n-                        throw new IllegalArgumentException(e.getMessage(), e);\n-                    }\n-                }\n-                if (jv instanceof Number) {\n-                    return new Date(((Number) jv).longValue());\n-                }\n-                return (Date) null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(Date.class, d);\n-\n-        d = new Decoder() {\n-            @Override\n-            public Object decode(Object jv) throws IOException {\n-                if (jv instanceof String) {\n-                    String[] items = ((String)jv).split(\"_\");\n-                    if(items.length == 1){\n-                        return new Locale(items[0]);\n-                    }\n-                    if(items.length == 2){\n-                        return new Locale(items[0], items[1]);\n-                    }\n-                    return new Locale(items[0], items[1], items[2]);\n-                }\n-                return (Locale)null;\n-            }\n-        };\n-        GLOBAL_DECODER_MAP.put(Locale.class, d);\n-    }\n-\n-    @Override\n-    @SuppressWarnings(\"unchecked\")\n-    public void writeValue(Object obj, JSONWriter jb, boolean writeClass) throws IOException {\n-        if (obj == null) {\n-            jb.valueNull();\n-            return;\n-        }\n-        Class<?> c = obj.getClass();\n-        Encoder encoder = GLOBAL_ENCODER_MAP.get(c);\n-\n-        if (encoder != null) {\n-            encoder.encode(obj, jb);\n-        } else if (obj instanceof JSONNode) {\n-            ((JSONNode) obj).writeJSON(this, jb, writeClass);\n-        } else if (c.isEnum()) {\n-            jb.valueString(((Enum<?>) obj).name());\n-        } else if (c.isArray()) {\n-            int len = Array.getLength(obj);\n-            jb.arrayBegin();\n-            for (int i = 0; i < len; i++) {\n-                writeValue(Array.get(obj, i), jb, writeClass);\n-            }\n-            jb.arrayEnd();\n-        } else if (Map.class.isAssignableFrom(c)) {\n-            Object key, value;\n-            jb.objectBegin();\n-            for (Map.Entry<Object, Object> entry : ((Map<Object, Object>) obj).entrySet()) {\n-                key = entry.getKey();\n-                if (key == null) {\n-                    continue;\n-                }\n-                jb.objectItem(key.toString());\n-\n-                value = entry.getValue();\n-                if (value == null) {\n-                    jb.valueNull();\n-                } else {\n-                    writeValue(value, jb, writeClass);\n-                }\n-            }\n-            jb.objectEnd();\n-        } else if (Collection.class.isAssignableFrom(c)) {\n-            jb.arrayBegin();\n-            for (Object item : (Collection<Object>) obj) {\n-                if (item == null) {\n-                    jb.valueNull();\n-                } else {\n-                    writeValue(item, jb, writeClass);\n-                }\n-            }\n-            jb.arrayEnd();\n-        } else if(obj instanceof Locale) {\n-            jb.valueString(obj.toString());\n-        } else {\n-            jb.objectBegin();\n-\n-            Wrapper w = Wrapper.getWrapper(c);\n-            String[] pns = w.getPropertyNames();\n-\n-            for (String pn : pns) {\n-                if ((obj instanceof Throwable) && (\n-                        \"localizedMessage\".equals(pn)\n-                                || \"cause\".equals(pn)\n-                                || \"suppressed\".equals(pn)\n-                                || \"stackTrace\".equals(pn))) {\n-                    continue;\n-                }\n-\n-                jb.objectItem(pn);\n-\n-                Object value = w.getPropertyValue(obj, pn);\n-                if (value == null || value == obj) {\n-                    jb.valueNull();\n-                } else {\n-                    writeValue(value, jb, writeClass);\n-                }\n-            }\n-            if (writeClass) {\n-                jb.objectItem(JSONVisitor.CLASS_PROPERTY);\n-                writeValue(obj.getClass().getName(), jb, writeClass);\n-            }\n-            jb.objectEnd();\n-        }\n-    }\n-\n-    @Override\n-    @SuppressWarnings({\"unchecked\", \"rawtypes\"})\n-    public Object readValue(Class<?> c, Object jv) throws IOException {\n-        if (jv == null) {\n-            return null;\n-        }\n-        Decoder decoder = GLOBAL_DECODER_MAP.get(c);\n-        if (decoder != null) {\n-            return decoder.decode(jv);\n-        }\n-        if (c.isEnum()) {\n-            return Enum.valueOf((Class<Enum>) c, String.valueOf(jv));\n-        }\n-        return jv;\n-    }\n-\n-    protected interface Encoder {\n-        void encode(Object obj, JSONWriter jb) throws IOException;\n-    }\n-\n-    protected interface Decoder {\n-        Object decode(Object jv) throws IOException;\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.common.json;\r\n+\r\n+import org.apache.dubbo.common.bytecode.Wrapper;\r\n+import org.apache.dubbo.common.io.Bytes;\r\n+\r\n+import java.io.IOException;\r\n+import java.lang.reflect.Array;\r\n+import java.math.BigDecimal;\r\n+import java.math.BigInteger;\r\n+import java.text.ParseException;\r\n+import java.text.SimpleDateFormat;\r\n+import java.util.Collection;\r\n+import java.util.Date;\r\n+import java.util.HashMap;\r\n+import java.util.Locale;\r\n+import java.util.Map;\r\n+import java.util.concurrent.atomic.AtomicInteger;\r\n+import java.util.concurrent.atomic.AtomicLong;\r\n+\r\n+@Deprecated\r\n+public class GenericJSONConverter implements JSONConverter {\r\n+    private static final String DATE_FORMAT = \"yyyy-MM-dd HH:mm:ss\";\r\n+    private static final Map<Class<?>, Encoder> GLOBAL_ENCODER_MAP = new HashMap<Class<?>, Encoder>();\r\n+    private static final Map<Class<?>, Decoder> GLOBAL_DECODER_MAP = new HashMap<Class<?>, Decoder>();\r\n+\r\n+    static {\r\n+        // init encoder map.\r\n+        Encoder e = new Encoder() {\r\n+            @Override\r\n+            public void encode(Object obj, JSONWriter jb) throws IOException {\r\n+                jb.valueBoolean((Boolean) obj);\r\n+            }\r\n+        };\r\n+        GLOBAL_ENCODER_MAP.put(boolean.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(Boolean.class, e);\r\n+\r\n+        e = new Encoder() {\r\n+            @Override\r\n+            public void encode(Object obj, JSONWriter jb) throws IOException {\r\n+                jb.valueInt(((Number) obj).intValue());\r\n+            }\r\n+        };\r\n+        GLOBAL_ENCODER_MAP.put(int.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(Integer.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(short.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(Short.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(byte.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(Byte.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(AtomicInteger.class, e);\r\n+\r\n+        e = new Encoder() {\r\n+            @Override\r\n+            public void encode(Object obj, JSONWriter jb) throws IOException {\r\n+                jb.valueString(Character.toString((Character) obj));\r\n+            }\r\n+        };\r\n+        GLOBAL_ENCODER_MAP.put(char.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(Character.class, e);\r\n+\r\n+        e = new Encoder() {\r\n+            @Override\r\n+            public void encode(Object obj, JSONWriter jb) throws IOException {\r\n+                jb.valueLong(((Number) obj).longValue());\r\n+            }\r\n+        };\r\n+        GLOBAL_ENCODER_MAP.put(long.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(Long.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(AtomicLong.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(BigInteger.class, e);\r\n+\r\n+        e = new Encoder() {\r\n+            @Override\r\n+            public void encode(Object obj, JSONWriter jb) throws IOException {\r\n+                jb.valueFloat(((Number) obj).floatValue());\r\n+            }\r\n+        };\r\n+        GLOBAL_ENCODER_MAP.put(float.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(Float.class, e);\r\n+\r\n+        e = new Encoder() {\r\n+            @Override\r\n+            public void encode(Object obj, JSONWriter jb) throws IOException {\r\n+                jb.valueDouble(((Number) obj).doubleValue());\r\n+            }\r\n+        };\r\n+        GLOBAL_ENCODER_MAP.put(double.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(Double.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(BigDecimal.class, e);\r\n+\r\n+        e = new Encoder() {\r\n+            @Override\r\n+            public void encode(Object obj, JSONWriter jb) throws IOException {\r\n+                jb.valueString(obj.toString());\r\n+            }\r\n+        };\r\n+        GLOBAL_ENCODER_MAP.put(String.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(StringBuilder.class, e);\r\n+        GLOBAL_ENCODER_MAP.put(StringBuffer.class, e);\r\n+\r\n+        e = new Encoder() {\r\n+            @Override\r\n+            public void encode(Object obj, JSONWriter jb) throws IOException {\r\n+                jb.valueString(Bytes.bytes2base64((byte[]) obj));\r\n+            }\r\n+        };\r\n+        GLOBAL_ENCODER_MAP.put(byte[].class, e);\r\n+\r\n+        e = new Encoder() {\r\n+            @Override\r\n+            public void encode(Object obj, JSONWriter jb) throws IOException {\r\n+                jb.valueString(new SimpleDateFormat(DATE_FORMAT).format((Date) obj));\r\n+            }\r\n+        };\r\n+        GLOBAL_ENCODER_MAP.put(Date.class, e);\r\n+\r\n+        // init decoder map.\r\n+        Decoder d = Object::toString;\r\n+        GLOBAL_DECODER_MAP.put(String.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Boolean) {\r\n+                    return ((Boolean) jv).booleanValue();\r\n+                }\r\n+                return false;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(boolean.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Boolean) {\r\n+                    return (Boolean) jv;\r\n+                }\r\n+                return (Boolean) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(Boolean.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof String && ((String) jv).length() > 0) {\r\n+                    return ((String) jv).charAt(0);\r\n+                }\r\n+                return (char) 0;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(char.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof String && ((String) jv).length() > 0) {\r\n+                    return ((String) jv).charAt(0);\r\n+                }\r\n+                return (Character) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(Character.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Number) {\r\n+                    return ((Number) jv).intValue();\r\n+                }\r\n+                return 0;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(int.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Number) {\r\n+                    return Integer.valueOf(((Number) jv).intValue());\r\n+                }\r\n+                return (Integer) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(Integer.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Number) {\r\n+                    return ((Number) jv).shortValue();\r\n+                }\r\n+                return (short) 0;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(short.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Number) {\r\n+                    return Short.valueOf(((Number) jv).shortValue());\r\n+                }\r\n+                return (Short) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(Short.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Number) {\r\n+                    return ((Number) jv).longValue();\r\n+                }\r\n+                return (long) 0;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(long.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Number) {\r\n+                    return Long.valueOf(((Number) jv).longValue());\r\n+                }\r\n+                return (Long) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(Long.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Number) {\r\n+                    return ((Number) jv).floatValue();\r\n+                }\r\n+                return (float) 0;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(float.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Number) {\r\n+                    return new Float(((Number) jv).floatValue());\r\n+                }\r\n+                return (Float) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(Float.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Number) {\r\n+                    return ((Number) jv).doubleValue();\r\n+                }\r\n+                return (double) 0;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(double.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Number) {\r\n+                    return new Double(((Number) jv).doubleValue());\r\n+                }\r\n+                return (Double) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(Double.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Number) {\r\n+                    return ((Number) jv).byteValue();\r\n+                }\r\n+                return (byte) 0;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(byte.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) {\r\n+                if (jv instanceof Number) {\r\n+                    return Byte.valueOf(((Number) jv).byteValue());\r\n+                }\r\n+                return (Byte) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(Byte.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) throws IOException {\r\n+                if (jv instanceof String) {\r\n+                    return Bytes.base642bytes((String) jv);\r\n+                }\r\n+                return (byte[]) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(byte[].class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) throws IOException {\r\n+                return new StringBuilder(jv.toString());\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(StringBuilder.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) throws IOException {\r\n+                return new StringBuffer(jv.toString());\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(StringBuffer.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) throws IOException {\r\n+                if (jv instanceof Number) {\r\n+                    return BigInteger.valueOf(((Number) jv).longValue());\r\n+                }\r\n+                return (BigInteger) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(BigInteger.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) throws IOException {\r\n+                if (jv instanceof Number) {\r\n+                    return BigDecimal.valueOf(((Number) jv).doubleValue());\r\n+                }\r\n+                return (BigDecimal) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(BigDecimal.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) throws IOException {\r\n+                if (jv instanceof Number) {\r\n+                    return new AtomicInteger(((Number) jv).intValue());\r\n+                }\r\n+                return (AtomicInteger) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(AtomicInteger.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) throws IOException {\r\n+                if (jv instanceof Number) {\r\n+                    return new AtomicLong(((Number) jv).longValue());\r\n+                }\r\n+                return (AtomicLong) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(AtomicLong.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) throws IOException {\r\n+                if (jv instanceof String) {\r\n+                    try {\r\n+                        return new SimpleDateFormat(DATE_FORMAT).parse((String) jv);\r\n+                    } catch (ParseException e) {\r\n+                        throw new IllegalArgumentException(e.getMessage(), e);\r\n+                    }\r\n+                }\r\n+                if (jv instanceof Number) {\r\n+                    return new Date(((Number) jv).longValue());\r\n+                }\r\n+                return (Date) null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(Date.class, d);\r\n+\r\n+        d = new Decoder() {\r\n+            @Override\r\n+            public Object decode(Object jv) throws IOException {\r\n+                if (jv instanceof String) {\r\n+                    String[] items = ((String)jv).split(\"_\");\r\n+                    if(items.length == 1){\r\n+                        return new Locale(items[0]);\r\n+                    }\r\n+                    if(items.length == 2){\r\n+                        return new Locale(items[0], items[1]);\r\n+                    }\r\n+                    return new Locale(items[0], items[1], items[2]);\r\n+                }\r\n+                return (Locale)null;\r\n+            }\r\n+        };\r\n+        GLOBAL_DECODER_MAP.put(Locale.class, d);\r\n+    }\r\n+\r\n+    @Override\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public void writeValue(Object obj, JSONWriter jb, boolean writeClass) throws IOException {\r\n+        if (obj == null) {\r\n+            jb.valueNull();\r\n+            return;\r\n+        }\r\n+        Class<?> c = obj.getClass();\r\n+        Encoder encoder = GLOBAL_ENCODER_MAP.get(c);\r\n+\r\n+        if (encoder != null) {\r\n+            encoder.encode(obj, jb);\r\n+        } else if (obj instanceof JSONNode) {\r\n+            ((JSONNode) obj).writeJSON(this, jb, writeClass);\r\n+        } else if (c.isEnum()) {\r\n+            jb.valueString(((Enum<?>) obj).name());\r\n+        } else if (c.isArray()) {\r\n+            int len = Array.getLength(obj);\r\n+            jb.arrayBegin();\r\n+            for (int i = 0; i < len; i++) {\r\n+                writeValue(Array.get(obj, i), jb, writeClass);\r\n+            }\r\n+            jb.arrayEnd();\r\n+        } else if (Map.class.isAssignableFrom(c)) {\r\n+            Object key, value;\r\n+            jb.objectBegin();\r\n+            for (Map.Entry<Object, Object> entry : ((Map<Object, Object>) obj).entrySet()) {\r\n+                key = entry.getKey();\r\n+                if (key == null) {\r\n+                    continue;\r\n+                }\r\n+                jb.objectItem(key.toString());\r\n+\r\n+                value = entry.getValue();\r\n+                if (value == null) {\r\n+                    jb.valueNull();\r\n+                } else {\r\n+                    writeValue(value, jb, writeClass);\r\n+                }\r\n+            }\r\n+            jb.objectEnd();\r\n+        } else if (Collection.class.isAssignableFrom(c)) {\r\n+            jb.arrayBegin();\r\n+            for (Object item : (Collection<Object>) obj) {\r\n+                if (item == null) {\r\n+                    jb.valueNull();\r\n+                } else {\r\n+                    writeValue(item, jb, writeClass);\r\n+                }\r\n+            }\r\n+            jb.arrayEnd();\r\n+        } else if(obj instanceof Locale) {\r\n+            jb.valueString(obj.toString());\r\n+        } else {\r\n+            jb.objectBegin();\r\n+\r\n+            Wrapper w = Wrapper.getWrapper(c);\r\n+            String[] pns = w.getPropertyNames();\r\n+\r\n+            for (String pn : pns) {\r\n+                if ((obj instanceof Throwable) && (\r\n+                        \"localizedMessage\".equals(pn)\r\n+                                || \"cause\".equals(pn)\r\n+                                || \"suppressed\".equals(pn)\r\n+                                || \"stackTrace\".equals(pn))) {\r\n+                    continue;\r\n+                }\r\n+\r\n+                jb.objectItem(pn);\r\n+\r\n+                Object value = w.getPropertyValue(obj, pn);\r\n+                if (value == null || value == obj) {\r\n+                    jb.valueNull();\r\n+                } else {\r\n+                    writeValue(value, jb, writeClass);\r\n+                }\r\n+            }\r\n+            if (writeClass) {\r\n+                jb.objectItem(JSONVisitor.CLASS_PROPERTY);\r\n+                writeValue(obj.getClass().getName(), jb, writeClass);\r\n+            }\r\n+            jb.objectEnd();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    @SuppressWarnings({\"unchecked\", \"rawtypes\"})\r\n+    public Object readValue(Class<?> c, Object jv) throws IOException {\r\n+        if (jv == null) {\r\n+            return null;\r\n+        }\r\n+        Decoder decoder = GLOBAL_DECODER_MAP.get(c);\r\n+        if (decoder != null) {\r\n+            return decoder.decode(jv);\r\n+        }\r\n+        if (c.isEnum()) {\r\n+            return Enum.valueOf((Class<Enum>) c, String.valueOf(jv));\r\n+        }\r\n+        return jv;\r\n+    }\r\n+\r\n+    protected interface Encoder {\r\n+        void encode(Object obj, JSONWriter jb) throws IOException;\r\n+    }\r\n+\r\n+    protected interface Decoder {\r\n+        Object decode(Object jv) throws IOException;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/json/Yylex.java", "source2": "org/apache/dubbo/common/json/Yylex.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,847 +1,847 @@\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.common.json;\n-\n-/**\n- * This class is a scanner generated by\n- * <a href=\"http://www.jflex.de/\">JFlex</a> 1.4.3\n- * on 7/3/10 3:12 AM from the specification file\n- * <tt>/Users/qianlei/dev/proj/dubbo-1.1/dubbo.common/src/main/java/org.apache.dubbo/common/json/json.flex</tt>\n- */\n-@Deprecated\n-public class Yylex {\n-\n-    /**\n-     * This character denotes the end of file\n-     */\n-    public static final int YYEOF = -1;\n-    /**\n-     * lexical states\n-     */\n-    public static final int STR2 = 4;\n-    public static final int STR1 = 2;\n-    public static final int YYINITIAL = 0;\n-    /**\n-     * initial size of the lookahead buffer\n-     */\n-    private static final int ZZ_BUFFERSIZE = 16384;\n-    /**\n-     * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l\n-     * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l\n-     * at the beginning of a line\n-     * l is of the form l = 2*k, k a non negative integer\n-     */\n-    private static final int[] ZZ_LEXSTATE = {\n-            0, 0, 1, 1, 2, 2\n-    };\n-\n-    /**\n-     * Translates characters to character classes\n-     */\n-    private static final String ZZ_CMAP_PACKED =\n-            \"\\11\\0\\1\\13\\1\\13\\2\\0\\1\\13\\22\\0\\1\\13\\1\\0\\1\\10\\1\\0\" +\n-                    \"\\1\\2\\2\\0\\1\\11\\3\\0\\1\\7\\1\\43\\1\\4\\1\\5\\1\\14\\12\\1\" +\n-                    \"\\1\\44\\6\\0\\1\\33\\3\\3\\1\\6\\1\\32\\5\\2\\1\\34\\1\\2\\1\\36\" +\n-                    \"\\3\\2\\1\\25\\1\\35\\1\\24\\1\\26\\5\\2\\1\\41\\1\\12\\1\\42\\1\\0\" +\n-                    \"\\1\\2\\1\\0\\1\\27\\1\\15\\2\\3\\1\\23\\1\\16\\5\\2\\1\\30\\1\\2\" +\n-                    \"\\1\\17\\3\\2\\1\\20\\1\\31\\1\\21\\1\\22\\5\\2\\1\\37\\1\\0\\1\\40\" +\n-                    \"\\uff82\\0\";\n-\n-    /**\n-     * Translates characters to character classes\n-     */\n-    private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);\n-    private static final String ZZ_ACTION_PACKED_0 =\n-            \"\\3\\0\\1\\1\\1\\2\\1\\3\\1\\1\\1\\4\\1\\5\\1\\6\" +\n-                    \"\\6\\3\\1\\7\\1\\10\\1\\11\\1\\12\\1\\13\\1\\14\\1\\15\" +\n-                    \"\\1\\16\\1\\0\\1\\15\\3\\0\\6\\3\\1\\17\\1\\20\\1\\21\" +\n-                    \"\\1\\22\\1\\23\\1\\24\\1\\25\\1\\26\\1\\0\\1\\27\\2\\30\" +\n-                    \"\\1\\0\\6\\3\\1\\0\\1\\3\\1\\31\\1\\32\\1\\3\\1\\0\" +\n-                    \"\\1\\33\\1\\0\\1\\34\";\n-    /**\n-     * Translates DFA states to action switch labels.\n-     */\n-    private static final int[] ZZ_ACTION = zzUnpackAction();\n-    private static final String ZZ_ROWMAP_PACKED_0 =\n-            \"\\0\\0\\0\\45\\0\\112\\0\\157\\0\\224\\0\\271\\0\\336\\0\\157\" +\n-                    \"\\0\\157\\0\\u0103\\0\\u0128\\0\\u014d\\0\\u0172\\0\\u0197\\0\\u01bc\\0\\u01e1\" +\n-                    \"\\0\\157\\0\\157\\0\\157\\0\\157\\0\\157\\0\\157\\0\\u0206\\0\\157\" +\n-                    \"\\0\\u022b\\0\\u0250\\0\\u0275\\0\\u029a\\0\\u02bf\\0\\u02e4\\0\\u0309\\0\\u032e\" +\n-                    \"\\0\\u0353\\0\\u0378\\0\\u039d\\0\\157\\0\\157\\0\\157\\0\\157\\0\\157\" +\n-                    \"\\0\\157\\0\\157\\0\\157\\0\\u03c2\\0\\157\\0\\u03e7\\0\\u040c\\0\\u040c\" +\n-                    \"\\0\\u0431\\0\\u0456\\0\\u047b\\0\\u04a0\\0\\u04c5\\0\\u04ea\\0\\u050f\\0\\u0534\" +\n-                    \"\\0\\271\\0\\271\\0\\u0559\\0\\u057e\\0\\271\\0\\u05a3\\0\\157\";\n-    /**\n-     * Translates a state to a row index in the transition table\n-     */\n-    private static final int[] ZZ_ROWMAP = zzUnpackRowMap();\n-    /**\n-     * The transition table of the DFA\n-     */\n-    private static final int[] ZZ_TRANS = {\n-            3, 4, 5, 5, 6, 3, 5, 3, 7, 8,\n-            3, 9, 3, 5, 10, 11, 5, 12, 5, 5,\n-            13, 5, 5, 5, 5, 5, 14, 5, 5, 5,\n-            15, 16, 17, 18, 19, 20, 21, 22, 22, 22,\n-            22, 22, 22, 22, 22, 23, 22, 24, 22, 22,\n-            22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n-            22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n-            22, 22, 22, 22, 25, 25, 25, 25, 25, 25,\n-            25, 25, 25, 23, 26, 25, 25, 25, 25, 25,\n-            25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n-            25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n-            25, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,\n-            -1, -1, -1, 27, 28, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, 28, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, 5, 5, 5, -1,\n-            -1, 5, -1, -1, -1, -1, -1, -1, 5, 5,\n-            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 5, 5, 5, -1, -1, -1, -1,\n-            -1, -1, -1, 4, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            9, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, 5, 5, 5,\n-            -1, -1, 5, -1, -1, -1, -1, -1, -1, 5,\n-            5, 5, 5, 5, 5, 5, 5, 5, 5, 29,\n-            5, 5, 5, 5, 5, 5, 5, -1, -1, -1,\n-            -1, -1, -1, -1, 5, 5, 5, -1, -1, 5,\n-            -1, -1, -1, -1, -1, -1, 5, 5, 5, 5,\n-            5, 30, 5, 5, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 5, -1, -1, -1, -1, -1, -1,\n-            -1, 5, 5, 5, -1, -1, 5, -1, -1, -1,\n-            -1, -1, -1, 5, 5, 5, 31, 5, 5, 5,\n-            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n-            5, -1, -1, -1, -1, -1, -1, -1, 5, 5,\n-            5, -1, -1, 5, -1, -1, -1, -1, -1, -1,\n-            5, 5, 5, 5, 5, 5, 5, 5, 32, 5,\n-            5, 5, 5, 5, 5, 5, 5, 5, -1, -1,\n-            -1, -1, -1, -1, -1, 5, 5, 5, -1, -1,\n-            5, -1, -1, -1, -1, -1, -1, 5, 5, 5,\n-            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n-            5, 33, 5, 5, 5, -1, -1, -1, -1, -1,\n-            -1, -1, 5, 5, 5, -1, -1, 5, -1, -1,\n-            -1, -1, -1, -1, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 34, 5, 5, 5, 5, 5, 5,\n-            5, 5, -1, -1, -1, -1, -1, -1, 22, 22,\n-            22, 22, 22, 22, 22, 22, -1, 22, -1, 22,\n-            22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n-            22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n-            22, 22, 22, 22, 22, -1, -1, -1, -1, -1,\n-            -1, -1, -1, 35, -1, 36, -1, 37, 38, 39,\n-            40, 41, 42, 43, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, 25, 25, 25, 25, 25, 25, 25, 25,\n-            25, -1, -1, 25, 25, 25, 25, 25, 25, 25,\n-            25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n-            25, 25, 25, 25, 25, 25, 25, 25, 25, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, 44, 36,\n-            -1, 37, 38, 39, 40, 41, 42, 43, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, 45, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, 46, -1, -1, 47, -1, -1,\n-            47, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, 5, 5, 5, -1, -1, 5, -1, -1, -1,\n-            -1, -1, -1, 5, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 5, 48, 5, 5, 5, 5, 5,\n-            5, -1, -1, -1, -1, -1, -1, -1, 5, 5,\n-            5, -1, -1, 5, -1, -1, -1, -1, -1, -1,\n-            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n-            5, 49, 5, 5, 5, 5, 5, 5, -1, -1,\n-            -1, -1, -1, -1, -1, 5, 5, 5, -1, -1,\n-            5, -1, -1, -1, -1, -1, -1, 5, 5, 5,\n-            5, 5, 50, 5, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 5, 5, -1, -1, -1, -1, -1,\n-            -1, -1, 5, 5, 5, -1, -1, 5, -1, -1,\n-            -1, -1, -1, -1, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 51, 5, 5, 5, 5, 5, 5,\n-            5, 5, -1, -1, -1, -1, -1, -1, -1, 5,\n-            5, 5, -1, -1, 5, -1, -1, -1, -1, -1,\n-            -1, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 5, 5, 5, 52, 5, 5, -1,\n-            -1, -1, -1, -1, -1, -1, 5, 5, 5, -1,\n-            -1, 5, -1, -1, -1, -1, -1, -1, 5, 5,\n-            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 53, 5, 5, -1, -1, -1, -1,\n-            -1, -1, -1, 54, -1, 54, -1, -1, 54, -1,\n-            -1, -1, -1, -1, -1, 54, 54, -1, -1, -1,\n-            -1, 54, -1, -1, -1, 54, -1, -1, 54, 54,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            45, -1, -1, -1, -1, 28, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, 28, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, 46, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, 5, 5, 5, -1, -1, 5,\n-            -1, -1, -1, -1, -1, -1, 5, 5, 5, 5,\n-            5, 5, 5, 5, 5, 5, 5, 5, 55, 5,\n-            5, 5, 5, 5, -1, -1, -1, -1, -1, -1,\n-            -1, 5, 5, 5, -1, -1, 5, -1, -1, -1,\n-            -1, -1, -1, 5, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 5, 56, 5, 5, 5, 5, 5,\n-            5, -1, -1, -1, -1, -1, -1, -1, 5, 5,\n-            5, -1, -1, 5, -1, -1, -1, -1, -1, -1,\n-            5, 5, 5, 5, 5, 5, 57, 5, 5, 5,\n-            5, 5, 5, 5, 5, 5, 5, 5, -1, -1,\n-            -1, -1, -1, -1, -1, 5, 5, 5, -1, -1,\n-            57, -1, -1, -1, -1, -1, -1, 5, 5, 5,\n-            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 5, 5, -1, -1, -1, -1, -1,\n-            -1, -1, 5, 5, 5, -1, -1, 5, -1, -1,\n-            -1, -1, -1, -1, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n-            58, 5, -1, -1, -1, -1, -1, -1, -1, 5,\n-            5, 5, -1, -1, 5, -1, -1, -1, -1, -1,\n-            -1, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 5, 5, 5, 56, 5, 5, -1,\n-            -1, -1, -1, -1, -1, -1, 59, -1, 59, -1,\n-            -1, 59, -1, -1, -1, -1, -1, -1, 59, 59,\n-            -1, -1, -1, -1, 59, -1, -1, -1, 59, -1,\n-            -1, 59, 59, -1, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, 5, 5, 5, -1, -1, 5, -1,\n-            -1, -1, -1, -1, -1, 5, 5, 5, 5, 5,\n-            5, 60, 5, 5, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, -1, -1, -1, -1, -1, -1, -1,\n-            5, 5, 5, -1, -1, 60, -1, -1, -1, -1,\n-            -1, -1, 5, 5, 5, 5, 5, 5, 5, 5,\n-            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n-            -1, -1, -1, -1, -1, -1, -1, 61, -1, 61,\n-            -1, -1, 61, -1, -1, -1, -1, -1, -1, 61,\n-            61, -1, -1, -1, -1, 61, -1, -1, -1, 61,\n-            -1, -1, 61, 61, -1, -1, -1, -1, -1, -1,\n-            -1, -1, -1, -1, 62, -1, 62, -1, -1, 62,\n-            -1, -1, -1, -1, -1, -1, 62, 62, -1, -1,\n-            -1, -1, 62, -1, -1, -1, 62, -1, -1, 62,\n-            62, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n-    };\n-    /* error codes */\n-    private static final int ZZ_UNKNOWN_ERROR = 0;\n-    private static final int ZZ_NO_MATCH = 1;\n-    private static final int ZZ_PUSHBACK_2BIG = 2;\n-    /* error messages for the codes above */\n-    private static final String[] ZZ_ERROR_MSG = {\n-            \"Unkown internal scanner error\",\n-            \"Error: could not match input\",\n-            \"Error: pushback value was too large\"\n-    };\n-    private static final String ZZ_ATTRIBUTE_PACKED_0 =\n-            \"\\3\\0\\1\\11\\3\\1\\2\\11\\7\\1\\6\\11\\1\\1\\1\\11\" +\n-                    \"\\1\\0\\1\\1\\3\\0\\6\\1\\10\\11\\1\\0\\1\\11\\2\\1\" +\n-                    \"\\1\\0\\6\\1\\1\\0\\4\\1\\1\\0\\1\\1\\1\\0\\1\\11\";\n-    /**\n-     * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>\n-     */\n-    private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute();\n-    /**\n-     * the input device\n-     */\n-    private java.io.Reader zzReader;\n-    /**\n-     * the current state of the DFA\n-     */\n-    private int zzState;\n-    /**\n-     * the current lexical state\n-     */\n-    private int zzLexicalState = YYINITIAL;\n-    /**\n-     * this buffer contains the current text to be matched and is\n-     * the source of the yytext() string\n-     */\n-    private char[] zzBuffer = new char[ZZ_BUFFERSIZE];\n-    /**\n-     * the textposition at the last accepting state\n-     */\n-    private int zzMarkedPos;\n-    /**\n-     * the current text position in the buffer\n-     */\n-    private int zzCurrentPos;\n-    /**\n-     * startRead marks the beginning of the yytext() string in the buffer\n-     */\n-    private int zzStartRead;\n-    /**\n-     * endRead marks the last character in the buffer, that has been read\n-     * from input\n-     */\n-    private int zzEndRead;\n-    /**\n-     * zzAtEOF == true <=> the scanner is at the EOF\n-     */\n-    private boolean zzAtEOF;\n-    /**\n-     * denotes if the user-EOF-code has already been executed\n-     */\n-    //private boolean zzEOFDone;\n-\n-  /* user code: */\n-    private StringBuffer sb;\n-\n-    /**\n-     * Creates a new scanner\n-     * There is also a java.io.InputStream version of this constructor.\n-     *\n-     * @param in the java.io.Reader to read input from.\n-     */\n-    Yylex(java.io.Reader in) {\n-        this.zzReader = in;\n-    }\n-\n-    /**\n-     * Creates a new scanner.\n-     * There is also java.io.Reader version of this constructor.\n-     *\n-     * @param in the java.io.Inputstream to read input from.\n-     */\n-    Yylex(java.io.InputStream in) {\n-        this(new java.io.InputStreamReader(in));\n-    }\n-\n-    private static int[] zzUnpackAction() {\n-        int[] result = new int[63];\n-        int offset = 0;\n-        offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);\n-        return result;\n-    }\n-\n-    private static int zzUnpackAction(String packed, int offset, int[] result) {\n-        int i = 0;       /* index in packed string  */\n-        int j = offset;  /* index in unpacked array */\n-        int l = packed.length();\n-        while (i < l) {\n-            int count = packed.charAt(i++);\n-            int value = packed.charAt(i++);\n-            do {\n-                result[j++] = value;\n-            } while (--count > 0);\n-        }\n-        return j;\n-    }\n-\n-    /** number of newlines encountered up to the start of the matched text */\n-    //private int yyline;\n-\n-    /** the number of characters up to the start of the matched text */\n-    //private int yychar;\n-\n-    /**\n-     * the number of characters from the last newline up to the start of the\n-     * matched text\n-     */\n-    //private int yycolumn;\n-\n-    /**\n-     * zzAtBOL == true <=> the scanner is currently at the beginning of a line\n-     */\n-    //private boolean zzAtBOL = true;\n-    private static int[] zzUnpackRowMap() {\n-        int[] result = new int[63];\n-        int offset = 0;\n-        offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);\n-        return result;\n-    }\n-\n-    private static int zzUnpackRowMap(String packed, int offset, int[] result) {\n-        int i = 0;  /* index in packed string  */\n-        int j = offset;  /* index in unpacked array */\n-        int l = packed.length();\n-        while (i < l) {\n-            int high = packed.charAt(i++) << 16;\n-            result[j++] = high | packed.charAt(i++);\n-        }\n-        return j;\n-    }\n-\n-    private static int[] zzUnpackAttribute() {\n-        int[] result = new int[63];\n-        int offset = 0;\n-        offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);\n-        return result;\n-    }\n-\n-    private static int zzUnpackAttribute(String packed, int offset, int[] result) {\n-        int i = 0;       /* index in packed string  */\n-        int j = offset;  /* index in unpacked array */\n-        int l = packed.length();\n-        while (i < l) {\n-            int count = packed.charAt(i++);\n-            int value = packed.charAt(i++);\n-            do {\n-                result[j++] = value;\n-            } while (--count > 0);\n-        }\n-        return j;\n-    }\n-\n-    /**\n-     * Unpacks the compressed character translation table.\n-     *\n-     * @param packed the packed character translation table\n-     * @return the unpacked character translation table\n-     */\n-    private static char[] zzUnpackCMap(String packed) {\n-        char[] map = new char[0x10000];\n-        int i = 0;  /* index in packed string  */\n-        int j = 0;  /* index in unpacked array */\n-        while (i < 122) {\n-            int count = packed.charAt(i++);\n-            char value = packed.charAt(i++);\n-            do {\n-                map[j++] = value;\n-            } while (--count > 0);\n-        }\n-        return map;\n-    }\n-\n-\n-    /**\n-     * Refills the input buffer.\n-     *\n-     * @return <code>false</code>, iff there was new input.\n-     * @throws java.io.IOException if any I/O-Error occurs\n-     */\n-    private boolean zzRefill() throws java.io.IOException {\n-\n-    /* first: make room (if you can) */\n-        if (zzStartRead > 0) {\n-            System.arraycopy(zzBuffer, zzStartRead,\n-                    zzBuffer, 0,\n-                    zzEndRead - zzStartRead);\n-\n-      /* translate stored positions */\n-            zzEndRead -= zzStartRead;\n-            zzCurrentPos -= zzStartRead;\n-            zzMarkedPos -= zzStartRead;\n-            zzStartRead = 0;\n-        }\n-\n-    /* is the buffer big enough? */\n-        if (zzCurrentPos >= zzBuffer.length) {\n-      /* if not: blow it up */\n-            char[] newBuffer = new char[zzCurrentPos * 2];\n-            System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);\n-            zzBuffer = newBuffer;\n-        }\n-\n-    /* finally: fill the buffer with new input */\n-        int numRead = zzReader.read(zzBuffer, zzEndRead,\n-                zzBuffer.length - zzEndRead);\n-\n-        if (numRead > 0) {\n-            zzEndRead += numRead;\n-            return false;\n-        }\n-        // unlikely but not impossible: read 0 characters, but not at end of stream\n-        if (numRead == 0) {\n-            int c = zzReader.read();\n-            if (c == -1) {\n-                return true;\n-            } else {\n-                zzBuffer[zzEndRead++] = (char) c;\n-                return false;\n-            }\n-        }\n-\n-        // numRead < 0\n-        return true;\n-    }\n-\n-\n-    /**\n-     * Closes the input stream.\n-     */\n-    public final void yyclose() throws java.io.IOException {\n-        zzAtEOF = true;            /* indicate end of file */\n-        zzEndRead = zzStartRead;  /* invalidate buffer    */\n-\n-        if (zzReader != null) {\n-            zzReader.close();\n-        }\n-    }\n-\n-\n-    /**\n-     * Resets the scanner to read from a new input stream.\n-     * Does not close the old reader.\n-     * <p>\n-     * All internal variables are reset, the old input stream\n-     * <b>cannot</b> be reused (internal buffer is discarded and lost).\n-     * Lexical state is set to <tt>ZZ_INITIAL</tt>.\n-     *\n-     * @param reader the new input stream\n-     */\n-    public final void yyreset(java.io.Reader reader) {\n-        zzReader = reader;\n-        //zzAtBOL  = true;\n-        zzAtEOF = false;\n-        //zzEOFDone = false;\n-        zzEndRead = zzStartRead = 0;\n-        zzCurrentPos = zzMarkedPos = 0;\n-        //yyline = yychar = yycolumn = 0;\n-        zzLexicalState = YYINITIAL;\n-    }\n-\n-\n-    /**\n-     * Returns the current lexical state.\n-     */\n-    public final int yystate() {\n-        return zzLexicalState;\n-    }\n-\n-\n-    /**\n-     * Enters a new lexical state\n-     *\n-     * @param newState the new lexical state\n-     */\n-    public final void yybegin(int newState) {\n-        zzLexicalState = newState;\n-    }\n-\n-\n-    /**\n-     * Returns the text matched by the current regular expression.\n-     */\n-    public final String yytext() {\n-        return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead);\n-    }\n-\n-\n-    /**\n-     * Returns the character at position <tt>pos</tt> from the\n-     * matched text.\n-     * <p>\n-     * It is equivalent to yytext().charAt(pos), but faster\n-     *\n-     * @param pos the position of the character to fetch.\n-     *            A value from 0 to yylength()-1.\n-     * @return the character at position pos\n-     */\n-    public final char yycharat(int pos) {\n-        return zzBuffer[zzStartRead + pos];\n-    }\n-\n-\n-    /**\n-     * Returns the length of the matched text region.\n-     */\n-    public final int yylength() {\n-        return zzMarkedPos - zzStartRead;\n-    }\n-\n-\n-    /**\n-     * Reports an error that occured while scanning.\n-     * <p>\n-     * In a wellformed scanner (no or only correct usage of\n-     * yypushback(int) and a match-all fallback rule) this method\n-     * will only be called with things that \"Can't Possibly Happen\".\n-     * If this method is called, something is seriously wrong\n-     * (e.g. a JFlex bug producing a faulty scanner etc.).\n-     * <p>\n-     * Usual syntax/scanner level error handling should be done\n-     * in error fallback rules.\n-     *\n-     * @param errorCode the code of the errormessage to display\n-     */\n-    private void zzScanError(int errorCode) {\n-        String message;\n-        try {\n-            message = ZZ_ERROR_MSG[errorCode];\n-        } catch (ArrayIndexOutOfBoundsException e) {\n-            message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];\n-        }\n-\n-        throw new Error(message);\n-    }\n-\n-\n-    /**\n-     * Pushes the specified amount of characters back into the input stream.\n-     * <p>\n-     * They will be read again by then next call of the scanning method\n-     *\n-     * @param number the number of characters to be read again.\n-     *               This number must not be greater than yylength()!\n-     */\n-    public void yypushback(int number) {\n-        if (number > yylength()) {\n-            zzScanError(ZZ_PUSHBACK_2BIG);\n-        }\n-\n-        zzMarkedPos -= number;\n-    }\n-\n-\n-    /**\n-     * Resumes scanning until the next regular expression is matched,\n-     * the end of input is encountered or an I/O-Error occurs.\n-     *\n-     * @return the next token\n-     * @throws java.io.IOException if any I/O-Error occurs\n-     */\n-    public JSONToken yylex() throws java.io.IOException, ParseException {\n-        int zzInput;\n-        int zzAction;\n-\n-        // cached fields:\n-        int zzCurrentPosL;\n-        int zzMarkedPosL;\n-        int zzEndReadL = zzEndRead;\n-        char[] zzBufferL = zzBuffer;\n-        char[] zzCMapL = ZZ_CMAP;\n-\n-        int[] zzTransL = ZZ_TRANS;\n-        int[] zzRowMapL = ZZ_ROWMAP;\n-        int[] zzAttrL = ZZ_ATTRIBUTE;\n-\n-        while (true) {\n-            zzMarkedPosL = zzMarkedPos;\n-\n-            zzAction = -1;\n-\n-            zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;\n-\n-            zzState = ZZ_LEXSTATE[zzLexicalState];\n-\n-\n-            zzForAction:\n-            {\n-                while (true) {\n-\n-                    if (zzCurrentPosL < zzEndReadL) {\n-                        zzInput = zzBufferL[zzCurrentPosL++];\n-                    } else if (zzAtEOF) {\n-                        zzInput = YYEOF;\n-                        break zzForAction;\n-                    } else {\n-                        // store back cached positions\n-                        zzCurrentPos = zzCurrentPosL;\n-                        zzMarkedPos = zzMarkedPosL;\n-                        boolean eof = zzRefill();\n-                        // get translated positions and possibly new buffer\n-                        zzCurrentPosL = zzCurrentPos;\n-                        zzMarkedPosL = zzMarkedPos;\n-                        zzBufferL = zzBuffer;\n-                        zzEndReadL = zzEndRead;\n-                        if (eof) {\n-                            zzInput = YYEOF;\n-                            break zzForAction;\n-                        } else {\n-                            zzInput = zzBufferL[zzCurrentPosL++];\n-                        }\n-                    }\n-                    int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]];\n-                    if (zzNext == -1) {\n-                        break zzForAction;\n-                    }\n-                    zzState = zzNext;\n-\n-                    int zzAttributes = zzAttrL[zzState];\n-                    if ((zzAttributes & 1) == 1) {\n-                        zzAction = zzState;\n-                        zzMarkedPosL = zzCurrentPosL;\n-                        if ((zzAttributes & 8) == 8) {\n-                            break zzForAction;\n-                        }\n-                    }\n-\n-                }\n-            }\n-\n-            // store back cached position\n-            zzMarkedPos = zzMarkedPosL;\n-\n-            switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {\n-                case 25: {\n-                    return new JSONToken(JSONToken.NULL, null);\n-                }\n-                case 29:\n-                    break;\n-                case 13: {\n-                    sb.append(yytext());\n-                }\n-                case 30:\n-                    break;\n-                case 18: {\n-                    sb.append('\\b');\n-                }\n-                case 31:\n-                    break;\n-                case 9: {\n-                    return new JSONToken(JSONToken.LSQUARE);\n-                }\n-                case 32:\n-                    break;\n-                case 2: {\n-                    Long val = Long.valueOf(yytext());\n-                    return new JSONToken(JSONToken.INT, val);\n-                }\n-                case 33:\n-                    break;\n-                case 16: {\n-                    sb.append('\\\\');\n-                }\n-                case 34:\n-                    break;\n-                case 8: {\n-                    return new JSONToken(JSONToken.RBRACE);\n-                }\n-                case 35:\n-                    break;\n-                case 26: {\n-                    return new JSONToken(JSONToken.BOOL, Boolean.TRUE);\n-                }\n-                case 36:\n-                    break;\n-                case 23: {\n-                    sb.append('\\'');\n-                }\n-                case 37:\n-                    break;\n-                case 5: {\n-                    sb = new StringBuffer();\n-                    yybegin(STR2);\n-                }\n-                case 38:\n-                    break;\n-                case 27: {\n-                    return new JSONToken(JSONToken.BOOL, Boolean.FALSE);\n-                }\n-                case 39:\n-                    break;\n-                case 12: {\n-                    return new JSONToken(JSONToken.COLON);\n-                }\n-                case 40:\n-                    break;\n-                case 21: {\n-                    sb.append('\\r');\n-                }\n-                case 41:\n-                    break;\n-                case 3: {\n-                    return new JSONToken(JSONToken.IDENT, yytext());\n-                }\n-                case 42:\n-                    break;\n-                case 28: {\n-                    try {\n-                        sb.append((char) Integer.parseInt(yytext().substring(2), 16));\n-                    } catch (Exception e) {\n-                        throw new ParseException(e.getMessage());\n-                    }\n-                }\n-                case 43:\n-                    break;\n-                case 10: {\n-                    return new JSONToken(JSONToken.RSQUARE);\n-                }\n-                case 44:\n-                    break;\n-                case 17: {\n-                    sb.append('/');\n-                }\n-                case 45:\n-                    break;\n-                case 11: {\n-                    return new JSONToken(JSONToken.COMMA);\n-                }\n-                case 46:\n-                    break;\n-                case 15: {\n-                    sb.append('\"');\n-                }\n-                case 47:\n-                    break;\n-                case 24: {\n-                    Double val = Double.valueOf(yytext());\n-                    return new JSONToken(JSONToken.FLOAT, val);\n-                }\n-                case 48:\n-                    break;\n-                case 1: {\n-                    throw new ParseException(\"Unexpected char [\" + yytext() + \"]\");\n-                }\n-                case 49:\n-                    break;\n-                case 19: {\n-                    sb.append('\\f');\n-                }\n-                case 50:\n-                    break;\n-                case 7: {\n-                    return new JSONToken(JSONToken.LBRACE);\n-                }\n-                case 51:\n-                    break;\n-                case 14: {\n-                    yybegin(YYINITIAL);\n-                    return new JSONToken(JSONToken.STRING, sb.toString());\n-                }\n-                case 52:\n-                    break;\n-                case 22: {\n-                    sb.append('\\t');\n-                }\n-                case 53:\n-                    break;\n-                case 4: {\n-                    sb = new StringBuffer();\n-                    yybegin(STR1);\n-                }\n-                case 54:\n-                    break;\n-                case 20: {\n-                    sb.append('\\n');\n-                }\n-                case 55:\n-                    break;\n-                case 6: {\n-                }\n-                case 56:\n-                    break;\n-                default:\n-                    if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {\n-                        zzAtEOF = true;\n-                        return null;\n-                    } else {\n-                        zzScanError(ZZ_NO_MATCH);\n-                        break;\n-                    }\n-            }\n-        }\n-    }\n-\n-\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.common.json;\r\n+\r\n+/**\r\n+ * This class is a scanner generated by\r\n+ * <a href=\"http://www.jflex.de/\">JFlex</a> 1.4.3\r\n+ * on 7/3/10 3:12 AM from the specification file\r\n+ * <tt>/Users/qianlei/dev/proj/dubbo-1.1/dubbo.common/src/main/java/org.apache.dubbo/common/json/json.flex</tt>\r\n+ */\r\n+@Deprecated\r\n+public class Yylex {\r\n+\r\n+    /**\r\n+     * This character denotes the end of file\r\n+     */\r\n+    public static final int YYEOF = -1;\r\n+    /**\r\n+     * lexical states\r\n+     */\r\n+    public static final int STR2 = 4;\r\n+    public static final int STR1 = 2;\r\n+    public static final int YYINITIAL = 0;\r\n+    /**\r\n+     * initial size of the lookahead buffer\r\n+     */\r\n+    private static final int ZZ_BUFFERSIZE = 16384;\r\n+    /**\r\n+     * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l\r\n+     * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l\r\n+     * at the beginning of a line\r\n+     * l is of the form l = 2*k, k a non negative integer\r\n+     */\r\n+    private static final int[] ZZ_LEXSTATE = {\r\n+            0, 0, 1, 1, 2, 2\r\n+    };\r\n+\r\n+    /**\r\n+     * Translates characters to character classes\r\n+     */\r\n+    private static final String ZZ_CMAP_PACKED =\r\n+            \"\\11\\0\\1\\13\\1\\13\\2\\0\\1\\13\\22\\0\\1\\13\\1\\0\\1\\10\\1\\0\" +\r\n+                    \"\\1\\2\\2\\0\\1\\11\\3\\0\\1\\7\\1\\43\\1\\4\\1\\5\\1\\14\\12\\1\" +\r\n+                    \"\\1\\44\\6\\0\\1\\33\\3\\3\\1\\6\\1\\32\\5\\2\\1\\34\\1\\2\\1\\36\" +\r\n+                    \"\\3\\2\\1\\25\\1\\35\\1\\24\\1\\26\\5\\2\\1\\41\\1\\12\\1\\42\\1\\0\" +\r\n+                    \"\\1\\2\\1\\0\\1\\27\\1\\15\\2\\3\\1\\23\\1\\16\\5\\2\\1\\30\\1\\2\" +\r\n+                    \"\\1\\17\\3\\2\\1\\20\\1\\31\\1\\21\\1\\22\\5\\2\\1\\37\\1\\0\\1\\40\" +\r\n+                    \"\\uff82\\0\";\r\n+\r\n+    /**\r\n+     * Translates characters to character classes\r\n+     */\r\n+    private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);\r\n+    private static final String ZZ_ACTION_PACKED_0 =\r\n+            \"\\3\\0\\1\\1\\1\\2\\1\\3\\1\\1\\1\\4\\1\\5\\1\\6\" +\r\n+                    \"\\6\\3\\1\\7\\1\\10\\1\\11\\1\\12\\1\\13\\1\\14\\1\\15\" +\r\n+                    \"\\1\\16\\1\\0\\1\\15\\3\\0\\6\\3\\1\\17\\1\\20\\1\\21\" +\r\n+                    \"\\1\\22\\1\\23\\1\\24\\1\\25\\1\\26\\1\\0\\1\\27\\2\\30\" +\r\n+                    \"\\1\\0\\6\\3\\1\\0\\1\\3\\1\\31\\1\\32\\1\\3\\1\\0\" +\r\n+                    \"\\1\\33\\1\\0\\1\\34\";\r\n+    /**\r\n+     * Translates DFA states to action switch labels.\r\n+     */\r\n+    private static final int[] ZZ_ACTION = zzUnpackAction();\r\n+    private static final String ZZ_ROWMAP_PACKED_0 =\r\n+            \"\\0\\0\\0\\45\\0\\112\\0\\157\\0\\224\\0\\271\\0\\336\\0\\157\" +\r\n+                    \"\\0\\157\\0\\u0103\\0\\u0128\\0\\u014d\\0\\u0172\\0\\u0197\\0\\u01bc\\0\\u01e1\" +\r\n+                    \"\\0\\157\\0\\157\\0\\157\\0\\157\\0\\157\\0\\157\\0\\u0206\\0\\157\" +\r\n+                    \"\\0\\u022b\\0\\u0250\\0\\u0275\\0\\u029a\\0\\u02bf\\0\\u02e4\\0\\u0309\\0\\u032e\" +\r\n+                    \"\\0\\u0353\\0\\u0378\\0\\u039d\\0\\157\\0\\157\\0\\157\\0\\157\\0\\157\" +\r\n+                    \"\\0\\157\\0\\157\\0\\157\\0\\u03c2\\0\\157\\0\\u03e7\\0\\u040c\\0\\u040c\" +\r\n+                    \"\\0\\u0431\\0\\u0456\\0\\u047b\\0\\u04a0\\0\\u04c5\\0\\u04ea\\0\\u050f\\0\\u0534\" +\r\n+                    \"\\0\\271\\0\\271\\0\\u0559\\0\\u057e\\0\\271\\0\\u05a3\\0\\157\";\r\n+    /**\r\n+     * Translates a state to a row index in the transition table\r\n+     */\r\n+    private static final int[] ZZ_ROWMAP = zzUnpackRowMap();\r\n+    /**\r\n+     * The transition table of the DFA\r\n+     */\r\n+    private static final int[] ZZ_TRANS = {\r\n+            3, 4, 5, 5, 6, 3, 5, 3, 7, 8,\r\n+            3, 9, 3, 5, 10, 11, 5, 12, 5, 5,\r\n+            13, 5, 5, 5, 5, 5, 14, 5, 5, 5,\r\n+            15, 16, 17, 18, 19, 20, 21, 22, 22, 22,\r\n+            22, 22, 22, 22, 22, 23, 22, 24, 22, 22,\r\n+            22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\r\n+            22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\r\n+            22, 22, 22, 22, 25, 25, 25, 25, 25, 25,\r\n+            25, 25, 25, 23, 26, 25, 25, 25, 25, 25,\r\n+            25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\r\n+            25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\r\n+            25, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,\r\n+            -1, -1, -1, 27, 28, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, 28, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, 5, 5, 5, -1,\r\n+            -1, 5, -1, -1, -1, -1, -1, -1, 5, 5,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 5, 5, 5, -1, -1, -1, -1,\r\n+            -1, -1, -1, 4, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            9, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, 5, 5, 5,\r\n+            -1, -1, 5, -1, -1, -1, -1, -1, -1, 5,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, 5, 29,\r\n+            5, 5, 5, 5, 5, 5, 5, -1, -1, -1,\r\n+            -1, -1, -1, -1, 5, 5, 5, -1, -1, 5,\r\n+            -1, -1, -1, -1, -1, -1, 5, 5, 5, 5,\r\n+            5, 30, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 5, -1, -1, -1, -1, -1, -1,\r\n+            -1, 5, 5, 5, -1, -1, 5, -1, -1, -1,\r\n+            -1, -1, -1, 5, 5, 5, 31, 5, 5, 5,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, -1, -1, -1, -1, -1, -1, -1, 5, 5,\r\n+            5, -1, -1, 5, -1, -1, -1, -1, -1, -1,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, 32, 5,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, -1, -1,\r\n+            -1, -1, -1, -1, -1, 5, 5, 5, -1, -1,\r\n+            5, -1, -1, -1, -1, -1, -1, 5, 5, 5,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 33, 5, 5, 5, -1, -1, -1, -1, -1,\r\n+            -1, -1, 5, 5, 5, -1, -1, 5, -1, -1,\r\n+            -1, -1, -1, -1, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 34, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, -1, -1, -1, -1, -1, -1, 22, 22,\r\n+            22, 22, 22, 22, 22, 22, -1, 22, -1, 22,\r\n+            22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\r\n+            22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\r\n+            22, 22, 22, 22, 22, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, 35, -1, 36, -1, 37, 38, 39,\r\n+            40, 41, 42, 43, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, 25, 25, 25, 25, 25, 25, 25, 25,\r\n+            25, -1, -1, 25, 25, 25, 25, 25, 25, 25,\r\n+            25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\r\n+            25, 25, 25, 25, 25, 25, 25, 25, 25, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, 44, 36,\r\n+            -1, 37, 38, 39, 40, 41, 42, 43, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, 45, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, 46, -1, -1, 47, -1, -1,\r\n+            47, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, 5, 5, 5, -1, -1, 5, -1, -1, -1,\r\n+            -1, -1, -1, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 5, 48, 5, 5, 5, 5, 5,\r\n+            5, -1, -1, -1, -1, -1, -1, -1, 5, 5,\r\n+            5, -1, -1, 5, -1, -1, -1, -1, -1, -1,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 49, 5, 5, 5, 5, 5, 5, -1, -1,\r\n+            -1, -1, -1, -1, -1, 5, 5, 5, -1, -1,\r\n+            5, -1, -1, -1, -1, -1, -1, 5, 5, 5,\r\n+            5, 5, 50, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 5, 5, -1, -1, -1, -1, -1,\r\n+            -1, -1, 5, 5, 5, -1, -1, 5, -1, -1,\r\n+            -1, -1, -1, -1, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 51, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, -1, -1, -1, -1, -1, -1, -1, 5,\r\n+            5, 5, -1, -1, 5, -1, -1, -1, -1, -1,\r\n+            -1, 5, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 5, 5, 5, 52, 5, 5, -1,\r\n+            -1, -1, -1, -1, -1, -1, 5, 5, 5, -1,\r\n+            -1, 5, -1, -1, -1, -1, -1, -1, 5, 5,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 53, 5, 5, -1, -1, -1, -1,\r\n+            -1, -1, -1, 54, -1, 54, -1, -1, 54, -1,\r\n+            -1, -1, -1, -1, -1, 54, 54, -1, -1, -1,\r\n+            -1, 54, -1, -1, -1, 54, -1, -1, 54, 54,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            45, -1, -1, -1, -1, 28, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, 28, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, 46, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, 5, 5, 5, -1, -1, 5,\r\n+            -1, -1, -1, -1, -1, -1, 5, 5, 5, 5,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, 55, 5,\r\n+            5, 5, 5, 5, -1, -1, -1, -1, -1, -1,\r\n+            -1, 5, 5, 5, -1, -1, 5, -1, -1, -1,\r\n+            -1, -1, -1, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 5, 56, 5, 5, 5, 5, 5,\r\n+            5, -1, -1, -1, -1, -1, -1, -1, 5, 5,\r\n+            5, -1, -1, 5, -1, -1, -1, -1, -1, -1,\r\n+            5, 5, 5, 5, 5, 5, 57, 5, 5, 5,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, -1, -1,\r\n+            -1, -1, -1, -1, -1, 5, 5, 5, -1, -1,\r\n+            57, -1, -1, -1, -1, -1, -1, 5, 5, 5,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 5, 5, -1, -1, -1, -1, -1,\r\n+            -1, -1, 5, 5, 5, -1, -1, 5, -1, -1,\r\n+            -1, -1, -1, -1, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            58, 5, -1, -1, -1, -1, -1, -1, -1, 5,\r\n+            5, 5, -1, -1, 5, -1, -1, -1, -1, -1,\r\n+            -1, 5, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 5, 5, 5, 56, 5, 5, -1,\r\n+            -1, -1, -1, -1, -1, -1, 59, -1, 59, -1,\r\n+            -1, 59, -1, -1, -1, -1, -1, -1, 59, 59,\r\n+            -1, -1, -1, -1, 59, -1, -1, -1, 59, -1,\r\n+            -1, 59, 59, -1, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, 5, 5, 5, -1, -1, 5, -1,\r\n+            -1, -1, -1, -1, -1, 5, 5, 5, 5, 5,\r\n+            5, 60, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, -1, -1, -1, -1, -1, -1, -1,\r\n+            5, 5, 5, -1, -1, 60, -1, -1, -1, -1,\r\n+            -1, -1, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\r\n+            -1, -1, -1, -1, -1, -1, -1, 61, -1, 61,\r\n+            -1, -1, 61, -1, -1, -1, -1, -1, -1, 61,\r\n+            61, -1, -1, -1, -1, 61, -1, -1, -1, 61,\r\n+            -1, -1, 61, 61, -1, -1, -1, -1, -1, -1,\r\n+            -1, -1, -1, -1, 62, -1, 62, -1, -1, 62,\r\n+            -1, -1, -1, -1, -1, -1, 62, 62, -1, -1,\r\n+            -1, -1, 62, -1, -1, -1, 62, -1, -1, 62,\r\n+            62, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n+    };\r\n+    /* error codes */\r\n+    private static final int ZZ_UNKNOWN_ERROR = 0;\r\n+    private static final int ZZ_NO_MATCH = 1;\r\n+    private static final int ZZ_PUSHBACK_2BIG = 2;\r\n+    /* error messages for the codes above */\r\n+    private static final String[] ZZ_ERROR_MSG = {\r\n+            \"Unkown internal scanner error\",\r\n+            \"Error: could not match input\",\r\n+            \"Error: pushback value was too large\"\r\n+    };\r\n+    private static final String ZZ_ATTRIBUTE_PACKED_0 =\r\n+            \"\\3\\0\\1\\11\\3\\1\\2\\11\\7\\1\\6\\11\\1\\1\\1\\11\" +\r\n+                    \"\\1\\0\\1\\1\\3\\0\\6\\1\\10\\11\\1\\0\\1\\11\\2\\1\" +\r\n+                    \"\\1\\0\\6\\1\\1\\0\\4\\1\\1\\0\\1\\1\\1\\0\\1\\11\";\r\n+    /**\r\n+     * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>\r\n+     */\r\n+    private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute();\r\n+    /**\r\n+     * the input device\r\n+     */\r\n+    private java.io.Reader zzReader;\r\n+    /**\r\n+     * the current state of the DFA\r\n+     */\r\n+    private int zzState;\r\n+    /**\r\n+     * the current lexical state\r\n+     */\r\n+    private int zzLexicalState = YYINITIAL;\r\n+    /**\r\n+     * this buffer contains the current text to be matched and is\r\n+     * the source of the yytext() string\r\n+     */\r\n+    private char[] zzBuffer = new char[ZZ_BUFFERSIZE];\r\n+    /**\r\n+     * the textposition at the last accepting state\r\n+     */\r\n+    private int zzMarkedPos;\r\n+    /**\r\n+     * the current text position in the buffer\r\n+     */\r\n+    private int zzCurrentPos;\r\n+    /**\r\n+     * startRead marks the beginning of the yytext() string in the buffer\r\n+     */\r\n+    private int zzStartRead;\r\n+    /**\r\n+     * endRead marks the last character in the buffer, that has been read\r\n+     * from input\r\n+     */\r\n+    private int zzEndRead;\r\n+    /**\r\n+     * zzAtEOF == true <=> the scanner is at the EOF\r\n+     */\r\n+    private boolean zzAtEOF;\r\n+    /**\r\n+     * denotes if the user-EOF-code has already been executed\r\n+     */\r\n+    //private boolean zzEOFDone;\r\n+\r\n+  /* user code: */\r\n+    private StringBuffer sb;\r\n+\r\n+    /**\r\n+     * Creates a new scanner\r\n+     * There is also a java.io.InputStream version of this constructor.\r\n+     *\r\n+     * @param in the java.io.Reader to read input from.\r\n+     */\r\n+    Yylex(java.io.Reader in) {\r\n+        this.zzReader = in;\r\n+    }\r\n+\r\n+    /**\r\n+     * Creates a new scanner.\r\n+     * There is also java.io.Reader version of this constructor.\r\n+     *\r\n+     * @param in the java.io.Inputstream to read input from.\r\n+     */\r\n+    Yylex(java.io.InputStream in) {\r\n+        this(new java.io.InputStreamReader(in));\r\n+    }\r\n+\r\n+    private static int[] zzUnpackAction() {\r\n+        int[] result = new int[63];\r\n+        int offset = 0;\r\n+        offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);\r\n+        return result;\r\n+    }\r\n+\r\n+    private static int zzUnpackAction(String packed, int offset, int[] result) {\r\n+        int i = 0;       /* index in packed string  */\r\n+        int j = offset;  /* index in unpacked array */\r\n+        int l = packed.length();\r\n+        while (i < l) {\r\n+            int count = packed.charAt(i++);\r\n+            int value = packed.charAt(i++);\r\n+            do {\r\n+                result[j++] = value;\r\n+            } while (--count > 0);\r\n+        }\r\n+        return j;\r\n+    }\r\n+\r\n+    /** number of newlines encountered up to the start of the matched text */\r\n+    //private int yyline;\r\n+\r\n+    /** the number of characters up to the start of the matched text */\r\n+    //private int yychar;\r\n+\r\n+    /**\r\n+     * the number of characters from the last newline up to the start of the\r\n+     * matched text\r\n+     */\r\n+    //private int yycolumn;\r\n+\r\n+    /**\r\n+     * zzAtBOL == true <=> the scanner is currently at the beginning of a line\r\n+     */\r\n+    //private boolean zzAtBOL = true;\r\n+    private static int[] zzUnpackRowMap() {\r\n+        int[] result = new int[63];\r\n+        int offset = 0;\r\n+        offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);\r\n+        return result;\r\n+    }\r\n+\r\n+    private static int zzUnpackRowMap(String packed, int offset, int[] result) {\r\n+        int i = 0;  /* index in packed string  */\r\n+        int j = offset;  /* index in unpacked array */\r\n+        int l = packed.length();\r\n+        while (i < l) {\r\n+            int high = packed.charAt(i++) << 16;\r\n+            result[j++] = high | packed.charAt(i++);\r\n+        }\r\n+        return j;\r\n+    }\r\n+\r\n+    private static int[] zzUnpackAttribute() {\r\n+        int[] result = new int[63];\r\n+        int offset = 0;\r\n+        offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);\r\n+        return result;\r\n+    }\r\n+\r\n+    private static int zzUnpackAttribute(String packed, int offset, int[] result) {\r\n+        int i = 0;       /* index in packed string  */\r\n+        int j = offset;  /* index in unpacked array */\r\n+        int l = packed.length();\r\n+        while (i < l) {\r\n+            int count = packed.charAt(i++);\r\n+            int value = packed.charAt(i++);\r\n+            do {\r\n+                result[j++] = value;\r\n+            } while (--count > 0);\r\n+        }\r\n+        return j;\r\n+    }\r\n+\r\n+    /**\r\n+     * Unpacks the compressed character translation table.\r\n+     *\r\n+     * @param packed the packed character translation table\r\n+     * @return the unpacked character translation table\r\n+     */\r\n+    private static char[] zzUnpackCMap(String packed) {\r\n+        char[] map = new char[0x10000];\r\n+        int i = 0;  /* index in packed string  */\r\n+        int j = 0;  /* index in unpacked array */\r\n+        while (i < 122) {\r\n+            int count = packed.charAt(i++);\r\n+            char value = packed.charAt(i++);\r\n+            do {\r\n+                map[j++] = value;\r\n+            } while (--count > 0);\r\n+        }\r\n+        return map;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Refills the input buffer.\r\n+     *\r\n+     * @return <code>false</code>, iff there was new input.\r\n+     * @throws java.io.IOException if any I/O-Error occurs\r\n+     */\r\n+    private boolean zzRefill() throws java.io.IOException {\r\n+\r\n+    /* first: make room (if you can) */\r\n+        if (zzStartRead > 0) {\r\n+            System.arraycopy(zzBuffer, zzStartRead,\r\n+                    zzBuffer, 0,\r\n+                    zzEndRead - zzStartRead);\r\n+\r\n+      /* translate stored positions */\r\n+            zzEndRead -= zzStartRead;\r\n+            zzCurrentPos -= zzStartRead;\r\n+            zzMarkedPos -= zzStartRead;\r\n+            zzStartRead = 0;\r\n+        }\r\n+\r\n+    /* is the buffer big enough? */\r\n+        if (zzCurrentPos >= zzBuffer.length) {\r\n+      /* if not: blow it up */\r\n+            char[] newBuffer = new char[zzCurrentPos * 2];\r\n+            System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);\r\n+            zzBuffer = newBuffer;\r\n+        }\r\n+\r\n+    /* finally: fill the buffer with new input */\r\n+        int numRead = zzReader.read(zzBuffer, zzEndRead,\r\n+                zzBuffer.length - zzEndRead);\r\n+\r\n+        if (numRead > 0) {\r\n+            zzEndRead += numRead;\r\n+            return false;\r\n+        }\r\n+        // unlikely but not impossible: read 0 characters, but not at end of stream\r\n+        if (numRead == 0) {\r\n+            int c = zzReader.read();\r\n+            if (c == -1) {\r\n+                return true;\r\n+            } else {\r\n+                zzBuffer[zzEndRead++] = (char) c;\r\n+                return false;\r\n+            }\r\n+        }\r\n+\r\n+        // numRead < 0\r\n+        return true;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Closes the input stream.\r\n+     */\r\n+    public final void yyclose() throws java.io.IOException {\r\n+        zzAtEOF = true;            /* indicate end of file */\r\n+        zzEndRead = zzStartRead;  /* invalidate buffer    */\r\n+\r\n+        if (zzReader != null) {\r\n+            zzReader.close();\r\n+        }\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Resets the scanner to read from a new input stream.\r\n+     * Does not close the old reader.\r\n+     * <p>\r\n+     * All internal variables are reset, the old input stream\r\n+     * <b>cannot</b> be reused (internal buffer is discarded and lost).\r\n+     * Lexical state is set to <tt>ZZ_INITIAL</tt>.\r\n+     *\r\n+     * @param reader the new input stream\r\n+     */\r\n+    public final void yyreset(java.io.Reader reader) {\r\n+        zzReader = reader;\r\n+        //zzAtBOL  = true;\r\n+        zzAtEOF = false;\r\n+        //zzEOFDone = false;\r\n+        zzEndRead = zzStartRead = 0;\r\n+        zzCurrentPos = zzMarkedPos = 0;\r\n+        //yyline = yychar = yycolumn = 0;\r\n+        zzLexicalState = YYINITIAL;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Returns the current lexical state.\r\n+     */\r\n+    public final int yystate() {\r\n+        return zzLexicalState;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Enters a new lexical state\r\n+     *\r\n+     * @param newState the new lexical state\r\n+     */\r\n+    public final void yybegin(int newState) {\r\n+        zzLexicalState = newState;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Returns the text matched by the current regular expression.\r\n+     */\r\n+    public final String yytext() {\r\n+        return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead);\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Returns the character at position <tt>pos</tt> from the\r\n+     * matched text.\r\n+     * <p>\r\n+     * It is equivalent to yytext().charAt(pos), but faster\r\n+     *\r\n+     * @param pos the position of the character to fetch.\r\n+     *            A value from 0 to yylength()-1.\r\n+     * @return the character at position pos\r\n+     */\r\n+    public final char yycharat(int pos) {\r\n+        return zzBuffer[zzStartRead + pos];\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Returns the length of the matched text region.\r\n+     */\r\n+    public final int yylength() {\r\n+        return zzMarkedPos - zzStartRead;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Reports an error that occured while scanning.\r\n+     * <p>\r\n+     * In a wellformed scanner (no or only correct usage of\r\n+     * yypushback(int) and a match-all fallback rule) this method\r\n+     * will only be called with things that \"Can't Possibly Happen\".\r\n+     * If this method is called, something is seriously wrong\r\n+     * (e.g. a JFlex bug producing a faulty scanner etc.).\r\n+     * <p>\r\n+     * Usual syntax/scanner level error handling should be done\r\n+     * in error fallback rules.\r\n+     *\r\n+     * @param errorCode the code of the errormessage to display\r\n+     */\r\n+    private void zzScanError(int errorCode) {\r\n+        String message;\r\n+        try {\r\n+            message = ZZ_ERROR_MSG[errorCode];\r\n+        } catch (ArrayIndexOutOfBoundsException e) {\r\n+            message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];\r\n+        }\r\n+\r\n+        throw new Error(message);\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Pushes the specified amount of characters back into the input stream.\r\n+     * <p>\r\n+     * They will be read again by then next call of the scanning method\r\n+     *\r\n+     * @param number the number of characters to be read again.\r\n+     *               This number must not be greater than yylength()!\r\n+     */\r\n+    public void yypushback(int number) {\r\n+        if (number > yylength()) {\r\n+            zzScanError(ZZ_PUSHBACK_2BIG);\r\n+        }\r\n+\r\n+        zzMarkedPos -= number;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Resumes scanning until the next regular expression is matched,\r\n+     * the end of input is encountered or an I/O-Error occurs.\r\n+     *\r\n+     * @return the next token\r\n+     * @throws java.io.IOException if any I/O-Error occurs\r\n+     */\r\n+    public JSONToken yylex() throws java.io.IOException, ParseException {\r\n+        int zzInput;\r\n+        int zzAction;\r\n+\r\n+        // cached fields:\r\n+        int zzCurrentPosL;\r\n+        int zzMarkedPosL;\r\n+        int zzEndReadL = zzEndRead;\r\n+        char[] zzBufferL = zzBuffer;\r\n+        char[] zzCMapL = ZZ_CMAP;\r\n+\r\n+        int[] zzTransL = ZZ_TRANS;\r\n+        int[] zzRowMapL = ZZ_ROWMAP;\r\n+        int[] zzAttrL = ZZ_ATTRIBUTE;\r\n+\r\n+        while (true) {\r\n+            zzMarkedPosL = zzMarkedPos;\r\n+\r\n+            zzAction = -1;\r\n+\r\n+            zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;\r\n+\r\n+            zzState = ZZ_LEXSTATE[zzLexicalState];\r\n+\r\n+\r\n+            zzForAction:\r\n+            {\r\n+                while (true) {\r\n+\r\n+                    if (zzCurrentPosL < zzEndReadL) {\r\n+                        zzInput = zzBufferL[zzCurrentPosL++];\r\n+                    } else if (zzAtEOF) {\r\n+                        zzInput = YYEOF;\r\n+                        break zzForAction;\r\n+                    } else {\r\n+                        // store back cached positions\r\n+                        zzCurrentPos = zzCurrentPosL;\r\n+                        zzMarkedPos = zzMarkedPosL;\r\n+                        boolean eof = zzRefill();\r\n+                        // get translated positions and possibly new buffer\r\n+                        zzCurrentPosL = zzCurrentPos;\r\n+                        zzMarkedPosL = zzMarkedPos;\r\n+                        zzBufferL = zzBuffer;\r\n+                        zzEndReadL = zzEndRead;\r\n+                        if (eof) {\r\n+                            zzInput = YYEOF;\r\n+                            break zzForAction;\r\n+                        } else {\r\n+                            zzInput = zzBufferL[zzCurrentPosL++];\r\n+                        }\r\n+                    }\r\n+                    int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]];\r\n+                    if (zzNext == -1) {\r\n+                        break zzForAction;\r\n+                    }\r\n+                    zzState = zzNext;\r\n+\r\n+                    int zzAttributes = zzAttrL[zzState];\r\n+                    if ((zzAttributes & 1) == 1) {\r\n+                        zzAction = zzState;\r\n+                        zzMarkedPosL = zzCurrentPosL;\r\n+                        if ((zzAttributes & 8) == 8) {\r\n+                            break zzForAction;\r\n+                        }\r\n+                    }\r\n+\r\n+                }\r\n+            }\r\n+\r\n+            // store back cached position\r\n+            zzMarkedPos = zzMarkedPosL;\r\n+\r\n+            switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {\r\n+                case 25: {\r\n+                    return new JSONToken(JSONToken.NULL, null);\r\n+                }\r\n+                case 29:\r\n+                    break;\r\n+                case 13: {\r\n+                    sb.append(yytext());\r\n+                }\r\n+                case 30:\r\n+                    break;\r\n+                case 18: {\r\n+                    sb.append('\\b');\r\n+                }\r\n+                case 31:\r\n+                    break;\r\n+                case 9: {\r\n+                    return new JSONToken(JSONToken.LSQUARE);\r\n+                }\r\n+                case 32:\r\n+                    break;\r\n+                case 2: {\r\n+                    Long val = Long.valueOf(yytext());\r\n+                    return new JSONToken(JSONToken.INT, val);\r\n+                }\r\n+                case 33:\r\n+                    break;\r\n+                case 16: {\r\n+                    sb.append('\\\\');\r\n+                }\r\n+                case 34:\r\n+                    break;\r\n+                case 8: {\r\n+                    return new JSONToken(JSONToken.RBRACE);\r\n+                }\r\n+                case 35:\r\n+                    break;\r\n+                case 26: {\r\n+                    return new JSONToken(JSONToken.BOOL, Boolean.TRUE);\r\n+                }\r\n+                case 36:\r\n+                    break;\r\n+                case 23: {\r\n+                    sb.append('\\'');\r\n+                }\r\n+                case 37:\r\n+                    break;\r\n+                case 5: {\r\n+                    sb = new StringBuffer();\r\n+                    yybegin(STR2);\r\n+                }\r\n+                case 38:\r\n+                    break;\r\n+                case 27: {\r\n+                    return new JSONToken(JSONToken.BOOL, Boolean.FALSE);\r\n+                }\r\n+                case 39:\r\n+                    break;\r\n+                case 12: {\r\n+                    return new JSONToken(JSONToken.COLON);\r\n+                }\r\n+                case 40:\r\n+                    break;\r\n+                case 21: {\r\n+                    sb.append('\\r');\r\n+                }\r\n+                case 41:\r\n+                    break;\r\n+                case 3: {\r\n+                    return new JSONToken(JSONToken.IDENT, yytext());\r\n+                }\r\n+                case 42:\r\n+                    break;\r\n+                case 28: {\r\n+                    try {\r\n+                        sb.append((char) Integer.parseInt(yytext().substring(2), 16));\r\n+                    } catch (Exception e) {\r\n+                        throw new ParseException(e.getMessage());\r\n+                    }\r\n+                }\r\n+                case 43:\r\n+                    break;\r\n+                case 10: {\r\n+                    return new JSONToken(JSONToken.RSQUARE);\r\n+                }\r\n+                case 44:\r\n+                    break;\r\n+                case 17: {\r\n+                    sb.append('/');\r\n+                }\r\n+                case 45:\r\n+                    break;\r\n+                case 11: {\r\n+                    return new JSONToken(JSONToken.COMMA);\r\n+                }\r\n+                case 46:\r\n+                    break;\r\n+                case 15: {\r\n+                    sb.append('\"');\r\n+                }\r\n+                case 47:\r\n+                    break;\r\n+                case 24: {\r\n+                    Double val = Double.valueOf(yytext());\r\n+                    return new JSONToken(JSONToken.FLOAT, val);\r\n+                }\r\n+                case 48:\r\n+                    break;\r\n+                case 1: {\r\n+                    throw new ParseException(\"Unexpected char [\" + yytext() + \"]\");\r\n+                }\r\n+                case 49:\r\n+                    break;\r\n+                case 19: {\r\n+                    sb.append('\\f');\r\n+                }\r\n+                case 50:\r\n+                    break;\r\n+                case 7: {\r\n+                    return new JSONToken(JSONToken.LBRACE);\r\n+                }\r\n+                case 51:\r\n+                    break;\r\n+                case 14: {\r\n+                    yybegin(YYINITIAL);\r\n+                    return new JSONToken(JSONToken.STRING, sb.toString());\r\n+                }\r\n+                case 52:\r\n+                    break;\r\n+                case 22: {\r\n+                    sb.append('\\t');\r\n+                }\r\n+                case 53:\r\n+                    break;\r\n+                case 4: {\r\n+                    sb = new StringBuffer();\r\n+                    yybegin(STR1);\r\n+                }\r\n+                case 54:\r\n+                    break;\r\n+                case 20: {\r\n+                    sb.append('\\n');\r\n+                }\r\n+                case 55:\r\n+                    break;\r\n+                case 6: {\r\n+                }\r\n+                case 56:\r\n+                    break;\r\n+                default:\r\n+                    if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {\r\n+                        zzAtEOF = true;\r\n+                        return null;\r\n+                    } else {\r\n+                        zzScanError(ZZ_NO_MATCH);\r\n+                        break;\r\n+                    }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/common/lang/Prioritized.java", "source2": "org/apache/dubbo/common/lang/Prioritized.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,76 +1,76 @@\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.common.lang;\n-\n-import java.util.Comparator;\n-\n-import static java.lang.Integer.compare;\n-\n-/**\n- * {@code Prioritized} interface can be implemented by objects that\n- * should be sorted, for example the tasks in executable queue.\n- *\n- * @since 2.7.5\n- */\n-public interface Prioritized extends Comparable<Prioritized> {\n-\n-    /**\n-     * The {@link Comparator} of {@link Prioritized}\n-     */\n-    Comparator<Object> COMPARATOR = (one, two) -> {\n-        boolean b1 = one instanceof Prioritized;\n-        boolean b2 = two instanceof Prioritized;\n-        if (b1 && !b2) {        // one is Prioritized, two is not\n-            return -1;\n-        } else if (b2 && !b1) { // two is Prioritized, one is not\n-            return 1;\n-        } else if (b1 && b2) {  //  one and two both are Prioritized\n-            return ((Prioritized) one).compareTo((Prioritized) two);\n-        } else {                // no different\n-            return 0;\n-        }\n-    };\n-\n-    /**\n-     * The maximum priority\n-     */\n-    int MAX_PRIORITY = Integer.MIN_VALUE;\n-\n-    /**\n-     * The minimum priority\n-     */\n-    int MIN_PRIORITY = Integer.MAX_VALUE;\n-\n-    /**\n-     * Normal Priority\n-     */\n-    int NORMAL_PRIORITY = 0;\n-\n-    /**\n-     * Get the priority\n-     *\n-     * @return the default is {@link #NORMAL_PRIORITY}\n-     */\n-    default int getPriority() {\n-        return NORMAL_PRIORITY;\n-    }\n-\n-    @Override\n-    default int compareTo(Prioritized that) {\n-        return compare(this.getPriority(), that.getPriority());\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.common.lang;\r\n+\r\n+import java.util.Comparator;\r\n+\r\n+import static java.lang.Integer.compare;\r\n+\r\n+/**\r\n+ * {@code Prioritized} interface can be implemented by objects that\r\n+ * should be sorted, for example the tasks in executable queue.\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+public interface Prioritized extends Comparable<Prioritized> {\r\n+\r\n+    /**\r\n+     * The {@link Comparator} of {@link Prioritized}\r\n+     */\r\n+    Comparator<Object> COMPARATOR = (one, two) -> {\r\n+        boolean b1 = one instanceof Prioritized;\r\n+        boolean b2 = two instanceof Prioritized;\r\n+        if (b1 && !b2) {        // one is Prioritized, two is not\r\n+            return -1;\r\n+        } else if (b2 && !b1) { // two is Prioritized, one is not\r\n+            return 1;\r\n+        } else if (b1 && b2) {  //  one and two both are Prioritized\r\n+            return ((Prioritized) one).compareTo((Prioritized) two);\r\n+        } else {                // no different\r\n+            return 0;\r\n+        }\r\n+    };\r\n+\r\n+    /**\r\n+     * The maximum priority\r\n+     */\r\n+    int MAX_PRIORITY = Integer.MIN_VALUE;\r\n+\r\n+    /**\r\n+     * The minimum priority\r\n+     */\r\n+    int MIN_PRIORITY = Integer.MAX_VALUE;\r\n+\r\n+    /**\r\n+     * Normal Priority\r\n+     */\r\n+    int NORMAL_PRIORITY = 0;\r\n+\r\n+    /**\r\n+     * Get the priority\r\n+     *\r\n+     * @return the default is {@link #NORMAL_PRIORITY}\r\n+     */\r\n+    default int getPriority() {\r\n+        return NORMAL_PRIORITY;\r\n+    }\r\n+\r\n+    @Override\r\n+    default int compareTo(Prioritized that) {\r\n+        return compare(this.getPriority(), that.getPriority());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/lang/ShutdownHookCallback.java", "source2": "org/apache/dubbo/common/lang/ShutdownHookCallback.java", "comments": ["Line-ending 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.common.lang;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-/**\n- * Dubbo ShutdownHook callback interface\n- *\n- * @since 2.7.5\n- */\n-@SPI\n-public interface ShutdownHookCallback extends Prioritized {\n-\n-    /**\n-     * Callback execution\n-     *\n-     * @throws Throwable if met with some errors\n-     */\n-    void callback() throws Throwable;\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.common.lang;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+/**\r\n+ * Dubbo ShutdownHook callback interface\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+@SPI\r\n+public interface ShutdownHookCallback extends Prioritized {\r\n+\r\n+    /**\r\n+     * Callback execution\r\n+     *\r\n+     * @throws Throwable if met with some errors\r\n+     */\r\n+    void callback() throws Throwable;\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/lang/ShutdownHookCallbacks.java", "source2": "org/apache/dubbo/common/lang/ShutdownHookCallbacks.java", "comments": ["Line-ending 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.common.lang;\n-\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-\n-import java.util.Collection;\n-import java.util.LinkedList;\n-import java.util.List;\n-\n-import static java.util.Collections.sort;\n-import static org.apache.dubbo.common.function.ThrowableAction.execute;\n-\n-/**\n- * The compose {@link ShutdownHookCallback} class to manipulate one and more {@link ShutdownHookCallback} instances\n- *\n- * @since 2.7.5\n- */\n-public class ShutdownHookCallbacks {\n-\n-    public static final ShutdownHookCallbacks INSTANCE = new ShutdownHookCallbacks();\n-\n-    private final List<ShutdownHookCallback> callbacks = new LinkedList<>();\n-\n-    ShutdownHookCallbacks() {\n-        loadCallbacks();\n-    }\n-\n-    public ShutdownHookCallbacks addCallback(ShutdownHookCallback callback) {\n-        synchronized (this) {\n-            this.callbacks.add(callback);\n-        }\n-        return this;\n-    }\n-\n-    public Collection<ShutdownHookCallback> getCallbacks() {\n-        synchronized (this) {\n-            sort(this.callbacks);\n-            return this.callbacks;\n-        }\n-    }\n-\n-    public void clear() {\n-        synchronized (this) {\n-            callbacks.clear();\n-        }\n-    }\n-\n-    private void loadCallbacks() {\n-        ExtensionLoader<ShutdownHookCallback> loader =\n-                ExtensionLoader.getExtensionLoader(ShutdownHookCallback.class);\n-        loader.getSupportedExtensionInstances().forEach(this::addCallback);\n-    }\n-\n-    public void callback() {\n-        getCallbacks().forEach(callback -> execute(callback::callback));\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.common.lang;\r\n+\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+\r\n+import java.util.Collection;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+\r\n+import static java.util.Collections.sort;\r\n+import static org.apache.dubbo.common.function.ThrowableAction.execute;\r\n+\r\n+/**\r\n+ * The compose {@link ShutdownHookCallback} class to manipulate one and more {@link ShutdownHookCallback} instances\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+public class ShutdownHookCallbacks {\r\n+\r\n+    public static final ShutdownHookCallbacks INSTANCE = new ShutdownHookCallbacks();\r\n+\r\n+    private final List<ShutdownHookCallback> callbacks = new LinkedList<>();\r\n+\r\n+    ShutdownHookCallbacks() {\r\n+        loadCallbacks();\r\n+    }\r\n+\r\n+    public ShutdownHookCallbacks addCallback(ShutdownHookCallback callback) {\r\n+        synchronized (this) {\r\n+            this.callbacks.add(callback);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    public Collection<ShutdownHookCallback> getCallbacks() {\r\n+        synchronized (this) {\r\n+            sort(this.callbacks);\r\n+            return this.callbacks;\r\n+        }\r\n+    }\r\n+\r\n+    public void clear() {\r\n+        synchronized (this) {\r\n+            callbacks.clear();\r\n+        }\r\n+    }\r\n+\r\n+    private void loadCallbacks() {\r\n+        ExtensionLoader<ShutdownHookCallback> loader =\r\n+                ExtensionLoader.getExtensionLoader(ShutdownHookCallback.class);\r\n+        loader.getSupportedExtensionInstances().forEach(this::addCallback);\r\n+    }\r\n+\r\n+    public void callback() {\r\n+        getCallbacks().forEach(callback -> execute(callback::callback));\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/common/logger/Logger.java", "source2": "org/apache/dubbo/common/logger/Logger.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,171 +1,171 @@\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.common.logger;\n-\n-/**\n- * Logger interface\n- * <p>\n- * This interface is referred from commons-logging\n- */\n-public interface Logger {\n-\n-    /**\n-     * Logs a message with trace log level.\n-     *\n-     * @param msg log this message\n-     */\n-    void trace(String msg);\n-\n-    /**\n-     * Logs an error with trace log level.\n-     *\n-     * @param e log this cause\n-     */\n-    void trace(Throwable e);\n-\n-    /**\n-     * Logs an error with trace log level.\n-     *\n-     * @param msg log this message\n-     * @param e   log this cause\n-     */\n-    void trace(String msg, Throwable e);\n-\n-    /**\n-     * Logs a message with debug log level.\n-     *\n-     * @param msg log this message\n-     */\n-    void debug(String msg);\n-\n-    /**\n-     * Logs an error with debug log level.\n-     *\n-     * @param e log this cause\n-     */\n-    void debug(Throwable e);\n-\n-    /**\n-     * Logs an error with debug log level.\n-     *\n-     * @param msg log this message\n-     * @param e   log this cause\n-     */\n-    void debug(String msg, Throwable e);\n-\n-    /**\n-     * Logs a message with info log level.\n-     *\n-     * @param msg log this message\n-     */\n-    void info(String msg);\n-\n-    /**\n-     * Logs an error with info log level.\n-     *\n-     * @param e log this cause\n-     */\n-    void info(Throwable e);\n-\n-    /**\n-     * Logs an error with info log level.\n-     *\n-     * @param msg log this message\n-     * @param e   log this cause\n-     */\n-    void info(String msg, Throwable e);\n-\n-    /**\n-     * Logs a message with warn log level.\n-     *\n-     * @param msg log this message\n-     */\n-    void warn(String msg);\n-\n-    /**\n-     * Logs a message with warn log level.\n-     *\n-     * @param e log this message\n-     */\n-    void warn(Throwable e);\n-\n-    /**\n-     * Logs a message with warn log level.\n-     *\n-     * @param msg log this message\n-     * @param e   log this cause\n-     */\n-    void warn(String msg, Throwable e);\n-\n-    /**\n-     * Logs a message with error log level.\n-     *\n-     * @param msg log this message\n-     */\n-    void error(String msg);\n-\n-    /**\n-     * Logs an error with error log level.\n-     *\n-     * @param e log this cause\n-     */\n-    void error(Throwable e);\n-\n-    /**\n-     * Logs an error with error log level.\n-     *\n-     * @param msg log this message\n-     * @param e   log this cause\n-     */\n-    void error(String msg, Throwable e);\n-\n-    /**\n-     * Is trace logging currently enabled?\n-     *\n-     * @return true if trace is enabled\n-     */\n-    boolean isTraceEnabled();\n-\n-    /**\n-     * Is debug logging currently enabled?\n-     *\u00a0\n-     * @return true if debug is enabled\n-     */\n-    boolean isDebugEnabled();\n-\n-    /**\n-     * Is info logging currently enabled?\n-     *\n-     * @return true if info is enabled\n-     */\n-    boolean isInfoEnabled();\n-\n-    /**\n-     * Is warn logging currently enabled?\n-     *\n-     * @return true if warn is enabled\n-     */\n-    boolean isWarnEnabled();\n-\n-    /**\n-     * Is error logging currently enabled?\n-     *\n-     * @return true if error is enabled\n-     */\n-    boolean isErrorEnabled();\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.common.logger;\r\n+\r\n+/**\r\n+ * Logger interface\r\n+ * <p>\r\n+ * This interface is referred from commons-logging\r\n+ */\r\n+public interface Logger {\r\n+\r\n+    /**\r\n+     * Logs a message with trace log level.\r\n+     *\r\n+     * @param msg log this message\r\n+     */\r\n+    void trace(String msg);\r\n+\r\n+    /**\r\n+     * Logs an error with trace log level.\r\n+     *\r\n+     * @param e log this cause\r\n+     */\r\n+    void trace(Throwable e);\r\n+\r\n+    /**\r\n+     * Logs an error with trace log level.\r\n+     *\r\n+     * @param msg log this message\r\n+     * @param e   log this cause\r\n+     */\r\n+    void trace(String msg, Throwable e);\r\n+\r\n+    /**\r\n+     * Logs a message with debug log level.\r\n+     *\r\n+     * @param msg log this message\r\n+     */\r\n+    void debug(String msg);\r\n+\r\n+    /**\r\n+     * Logs an error with debug log level.\r\n+     *\r\n+     * @param e log this cause\r\n+     */\r\n+    void debug(Throwable e);\r\n+\r\n+    /**\r\n+     * Logs an error with debug log level.\r\n+     *\r\n+     * @param msg log this message\r\n+     * @param e   log this cause\r\n+     */\r\n+    void debug(String msg, Throwable e);\r\n+\r\n+    /**\r\n+     * Logs a message with info log level.\r\n+     *\r\n+     * @param msg log this message\r\n+     */\r\n+    void info(String msg);\r\n+\r\n+    /**\r\n+     * Logs an error with info log level.\r\n+     *\r\n+     * @param e log this cause\r\n+     */\r\n+    void info(Throwable e);\r\n+\r\n+    /**\r\n+     * Logs an error with info log level.\r\n+     *\r\n+     * @param msg log this message\r\n+     * @param e   log this cause\r\n+     */\r\n+    void info(String msg, Throwable e);\r\n+\r\n+    /**\r\n+     * Logs a message with warn log level.\r\n+     *\r\n+     * @param msg log this message\r\n+     */\r\n+    void warn(String msg);\r\n+\r\n+    /**\r\n+     * Logs a message with warn log level.\r\n+     *\r\n+     * @param e log this message\r\n+     */\r\n+    void warn(Throwable e);\r\n+\r\n+    /**\r\n+     * Logs a message with warn log level.\r\n+     *\r\n+     * @param msg log this message\r\n+     * @param e   log this cause\r\n+     */\r\n+    void warn(String msg, Throwable e);\r\n+\r\n+    /**\r\n+     * Logs a message with error log level.\r\n+     *\r\n+     * @param msg log this message\r\n+     */\r\n+    void error(String msg);\r\n+\r\n+    /**\r\n+     * Logs an error with error log level.\r\n+     *\r\n+     * @param e log this cause\r\n+     */\r\n+    void error(Throwable e);\r\n+\r\n+    /**\r\n+     * Logs an error with error log level.\r\n+     *\r\n+     * @param msg log this message\r\n+     * @param e   log this cause\r\n+     */\r\n+    void error(String msg, Throwable e);\r\n+\r\n+    /**\r\n+     * Is trace logging currently enabled?\r\n+     *\r\n+     * @return true if trace is enabled\r\n+     */\r\n+    boolean isTraceEnabled();\r\n+\r\n+    /**\r\n+     * Is debug logging currently enabled?\r\n+     *\u00a0\r\n+     * @return true if debug is enabled\r\n+     */\r\n+    boolean isDebugEnabled();\r\n+\r\n+    /**\r\n+     * Is info logging currently enabled?\r\n+     *\r\n+     * @return true if info is enabled\r\n+     */\r\n+    boolean isInfoEnabled();\r\n+\r\n+    /**\r\n+     * Is warn logging currently enabled?\r\n+     *\r\n+     * @return true if warn is enabled\r\n+     */\r\n+    boolean isWarnEnabled();\r\n+\r\n+    /**\r\n+     * Is error logging currently enabled?\r\n+     *\r\n+     * @return true if error is enabled\r\n+     */\r\n+    boolean isErrorEnabled();\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/common/store/support/SimpleDataStore.java", "source2": "org/apache/dubbo/common/store/support/SimpleDataStore.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,65 +1,65 @@\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.common.store.support;\n-\n-import org.apache.dubbo.common.store.DataStore;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-\n-public class SimpleDataStore implements DataStore {\n-\n-    // <component name or id, <data-name, data-value>>\n-    private ConcurrentMap<String, ConcurrentMap<String, Object>> data =\n-            new ConcurrentHashMap<String, ConcurrentMap<String, Object>>();\n-\n-    @Override\n-    public Map<String, Object> get(String componentName) {\n-        ConcurrentMap<String, Object> value = data.get(componentName);\n-        if (value == null) {\n-            return new HashMap<String, Object>();\n-        }\n-\n-        return new HashMap<String, Object>(value);\n-    }\n-\n-    @Override\n-    public Object get(String componentName, String key) {\n-        if (!data.containsKey(componentName)) {\n-            return null;\n-        }\n-        return data.get(componentName).get(key);\n-    }\n-\n-    @Override\n-    public void put(String componentName, String key, Object value) {\n-        Map<String, Object> componentData = data.computeIfAbsent(componentName, k -> new ConcurrentHashMap<>());\n-        componentData.put(key, value);\n-    }\n-\n-    @Override\n-    public void remove(String componentName, String key) {\n-        if (!data.containsKey(componentName)) {\n-            return;\n-        }\n-        data.get(componentName).remove(key);\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+\r\n+package org.apache.dubbo.common.store.support;\r\n+\r\n+import org.apache.dubbo.common.store.DataStore;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+\r\n+public class SimpleDataStore implements DataStore {\r\n+\r\n+    // <component name or id, <data-name, data-value>>\r\n+    private ConcurrentMap<String, ConcurrentMap<String, Object>> data =\r\n+            new ConcurrentHashMap<String, ConcurrentMap<String, Object>>();\r\n+\r\n+    @Override\r\n+    public Map<String, Object> get(String componentName) {\r\n+        ConcurrentMap<String, Object> value = data.get(componentName);\r\n+        if (value == null) {\r\n+            return new HashMap<String, Object>();\r\n+        }\r\n+\r\n+        return new HashMap<String, Object>(value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object get(String componentName, String key) {\r\n+        if (!data.containsKey(componentName)) {\r\n+            return null;\r\n+        }\r\n+        return data.get(componentName).get(key);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void put(String componentName, String key, Object value) {\r\n+        Map<String, Object> componentData = data.computeIfAbsent(componentName, k -> new ConcurrentHashMap<>());\r\n+        componentData.put(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void remove(String componentName, String key) {\r\n+        if (!data.containsKey(componentName)) {\r\n+            return;\r\n+        }\r\n+        data.get(componentName).remove(key);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadlocal/InternalRunnable.java", "source2": "org/apache/dubbo/common/threadlocal/InternalRunnable.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,53 +1,53 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-\n-package org.apache.dubbo.common.threadlocal;\n-\n-\n-/**\n- * InternalRunnable\n- * There is a risk of memory leak when using {@link InternalThreadLocal} without calling\n- * {@link InternalThreadLocal#removeAll()}.\n- * This design is learning from {@see io.netty.util.concurrent.FastThreadLocalRunnable} which is in Netty.\n- */\n-public class InternalRunnable implements Runnable{\n-    private final Runnable runnable;\n-\n-    public InternalRunnable(Runnable runnable){\n-        this.runnable=runnable;\n-    }\n-\n-    /**\n-     * After the task execution is completed, it will call {@link InternalThreadLocal#removeAll()} to clear\n-     * unnecessary variables in the thread.\n-     */\n-    @Override\n-    public void run() {\n-        try{\n-            runnable.run();\n-        }finally {\n-            InternalThreadLocal.removeAll();\n-        }\n-    }\n-\n-    /**\n-     * Wrap ordinary Runnable into {@link InternalThreadLocal}.\n-     */\n-     static Runnable Wrap(Runnable runnable){\n-        return runnable instanceof InternalRunnable?runnable:new InternalRunnable(runnable);\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+\r\n+package org.apache.dubbo.common.threadlocal;\r\n+\r\n+\r\n+/**\r\n+ * InternalRunnable\r\n+ * There is a risk of memory leak when using {@link InternalThreadLocal} without calling\r\n+ * {@link InternalThreadLocal#removeAll()}.\r\n+ * This design is learning from {@see io.netty.util.concurrent.FastThreadLocalRunnable} which is in Netty.\r\n+ */\r\n+public class InternalRunnable implements Runnable{\r\n+    private final Runnable runnable;\r\n+\r\n+    public InternalRunnable(Runnable runnable){\r\n+        this.runnable=runnable;\r\n+    }\r\n+\r\n+    /**\r\n+     * After the task execution is completed, it will call {@link InternalThreadLocal#removeAll()} to clear\r\n+     * unnecessary variables in the thread.\r\n+     */\r\n+    @Override\r\n+    public void run() {\r\n+        try{\r\n+            runnable.run();\r\n+        }finally {\r\n+            InternalThreadLocal.removeAll();\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Wrap ordinary Runnable into {@link InternalThreadLocal}.\r\n+     */\r\n+     static Runnable Wrap(Runnable runnable){\r\n+        return runnable instanceof InternalRunnable?runnable:new InternalRunnable(runnable);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadlocal/InternalThreadLocal.java", "source2": "org/apache/dubbo/common/threadlocal/InternalThreadLocal.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,198 +1,198 @@\n-/*\n- * Copyright 2014 The Netty Project\n- *\n- * The Netty Project licenses this file to you under the Apache License,\n- * version 2.0 (the \"License\"); you may not use this file except in compliance\n- * with 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, WITHOUT\n- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n- * License for the specific language governing permissions and limitations\n- * under the License.\n- */\n-\n-package org.apache.dubbo.common.threadlocal;\n-\n-import java.util.Collections;\n-import java.util.IdentityHashMap;\n-import java.util.Set;\n-\n-/**\n- * InternalThreadLocal\n- * A special variant of {@link ThreadLocal} that yields higher access performance when accessed from a\n- * {@link InternalThread}.\n- * <p></p>\n- * Internally, a {@link InternalThread} uses a constant index in an array, instead of using hash code and hash table,\n- * to look for a variable.  Although seemingly very subtle, it yields slight performance advantage over using a hash\n- * table, and it is useful when accessed frequently.\n- * <p></p>\n- * This design is learning from {@see io.netty.util.concurrent.FastThreadLocal} which is in Netty.\n- */\n-public class InternalThreadLocal<V> {\n-\n-    private static final int VARIABLES_TO_REMOVE_INDEX = InternalThreadLocalMap.nextVariableIndex();\n-\n-    private final int index;\n-\n-    public InternalThreadLocal() {\n-        index = InternalThreadLocalMap.nextVariableIndex();\n-    }\n-\n-    /**\n-     * Removes all {@link InternalThreadLocal} variables bound to the current thread.  This operation is useful when you\n-     * are in a container environment, and you don't want to leave the thread local variables in the threads you do not\n-     * manage.\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public static void removeAll() {\n-        InternalThreadLocalMap threadLocalMap = InternalThreadLocalMap.getIfSet();\n-        if (threadLocalMap == null) {\n-            return;\n-        }\n-\n-        try {\n-            Object v = threadLocalMap.indexedVariable(VARIABLES_TO_REMOVE_INDEX);\n-            if (v != null && v != InternalThreadLocalMap.UNSET) {\n-                Set<InternalThreadLocal<?>> variablesToRemove = (Set<InternalThreadLocal<?>>) v;\n-                InternalThreadLocal<?>[] variablesToRemoveArray =\n-                        variablesToRemove.toArray(new InternalThreadLocal[0]);\n-                for (InternalThreadLocal<?> tlv : variablesToRemoveArray) {\n-                    tlv.remove(threadLocalMap);\n-                }\n-            }\n-        } finally {\n-            InternalThreadLocalMap.remove();\n-        }\n-    }\n-\n-    /**\n-     * Returns the number of thread local variables bound to the current thread.\n-     */\n-    public static int size() {\n-        InternalThreadLocalMap threadLocalMap = InternalThreadLocalMap.getIfSet();\n-        if (threadLocalMap == null) {\n-            return 0;\n-        } else {\n-            return threadLocalMap.size();\n-        }\n-    }\n-\n-    public static void destroy() {\n-        InternalThreadLocalMap.destroy();\n-    }\n-\n-    @SuppressWarnings(\"unchecked\")\n-    private static void addToVariablesToRemove(InternalThreadLocalMap threadLocalMap, InternalThreadLocal<?> variable) {\n-        Object v = threadLocalMap.indexedVariable(VARIABLES_TO_REMOVE_INDEX);\n-        Set<InternalThreadLocal<?>> variablesToRemove;\n-        if (v == InternalThreadLocalMap.UNSET || v == null) {\n-            variablesToRemove = Collections.newSetFromMap(new IdentityHashMap<InternalThreadLocal<?>, Boolean>());\n-            threadLocalMap.setIndexedVariable(VARIABLES_TO_REMOVE_INDEX, variablesToRemove);\n-        } else {\n-            variablesToRemove = (Set<InternalThreadLocal<?>>) v;\n-        }\n-\n-        variablesToRemove.add(variable);\n-    }\n-\n-    @SuppressWarnings(\"unchecked\")\n-    private static void removeFromVariablesToRemove(InternalThreadLocalMap threadLocalMap, InternalThreadLocal<?> variable) {\n-\n-        Object v = threadLocalMap.indexedVariable(VARIABLES_TO_REMOVE_INDEX);\n-\n-        if (v == InternalThreadLocalMap.UNSET || v == null) {\n-            return;\n-        }\n-\n-        Set<InternalThreadLocal<?>> variablesToRemove = (Set<InternalThreadLocal<?>>) v;\n-        variablesToRemove.remove(variable);\n-    }\n-\n-    /**\n-     * Returns the current value for the current thread\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public final V get() {\n-        InternalThreadLocalMap threadLocalMap = InternalThreadLocalMap.get();\n-        Object v = threadLocalMap.indexedVariable(index);\n-        if (v != InternalThreadLocalMap.UNSET) {\n-            return (V) v;\n-        }\n-\n-        return initialize(threadLocalMap);\n-    }\n-\n-    private V initialize(InternalThreadLocalMap threadLocalMap) {\n-        V v = null;\n-        try {\n-            v = initialValue();\n-        } catch (Exception e) {\n-            throw new RuntimeException(e);\n-        }\n-\n-        threadLocalMap.setIndexedVariable(index, v);\n-        addToVariablesToRemove(threadLocalMap, this);\n-        return v;\n-    }\n-\n-    /**\n-     * Sets the value for the current thread.\n-     */\n-    public final void set(V value) {\n-        if (value == null || value == InternalThreadLocalMap.UNSET) {\n-            remove();\n-        } else {\n-            InternalThreadLocalMap threadLocalMap = InternalThreadLocalMap.get();\n-            if (threadLocalMap.setIndexedVariable(index, value)) {\n-                addToVariablesToRemove(threadLocalMap, this);\n-            }\n-        }\n-    }\n-\n-    /**\n-     * Sets the value to uninitialized; a proceeding call to get() will trigger a call to initialValue().\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public final void remove() {\n-        remove(InternalThreadLocalMap.getIfSet());\n-    }\n-\n-    /**\n-     * Sets the value to uninitialized for the specified thread local map;\n-     * a proceeding call to get() will trigger a call to initialValue().\n-     * The specified thread local map must be for the current thread.\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public final void remove(InternalThreadLocalMap threadLocalMap) {\n-        if (threadLocalMap == null) {\n-            return;\n-        }\n-\n-        Object v = threadLocalMap.removeIndexedVariable(index);\n-        removeFromVariablesToRemove(threadLocalMap, this);\n-\n-        if (v != InternalThreadLocalMap.UNSET) {\n-            try {\n-                onRemoval((V) v);\n-            } catch (Exception e) {\n-                throw new RuntimeException(e);\n-            }\n-        }\n-    }\n-\n-    /**\n-     * Returns the initial value for this thread-local variable.\n-     */\n-    protected V initialValue() throws Exception {\n-        return null;\n-    }\n-\n-    /**\n-     * Invoked when this thread local variable is removed by {@link #remove()}.\n-     */\n-    protected void onRemoval(@SuppressWarnings(\"unused\") V value) throws Exception {\n-    }\n-}\n+/*\r\n+ * Copyright 2014 The Netty Project\r\n+ *\r\n+ * The Netty Project licenses this file to you under the Apache License,\r\n+ * version 2.0 (the \"License\"); you may not use this file except in compliance\r\n+ * with 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, WITHOUT\r\n+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r\n+ * License for the specific language governing permissions and limitations\r\n+ * under the License.\r\n+ */\r\n+\r\n+package org.apache.dubbo.common.threadlocal;\r\n+\r\n+import java.util.Collections;\r\n+import java.util.IdentityHashMap;\r\n+import java.util.Set;\r\n+\r\n+/**\r\n+ * InternalThreadLocal\r\n+ * A special variant of {@link ThreadLocal} that yields higher access performance when accessed from a\r\n+ * {@link InternalThread}.\r\n+ * <p></p>\r\n+ * Internally, a {@link InternalThread} uses a constant index in an array, instead of using hash code and hash table,\r\n+ * to look for a variable.  Although seemingly very subtle, it yields slight performance advantage over using a hash\r\n+ * table, and it is useful when accessed frequently.\r\n+ * <p></p>\r\n+ * This design is learning from {@see io.netty.util.concurrent.FastThreadLocal} which is in Netty.\r\n+ */\r\n+public class InternalThreadLocal<V> {\r\n+\r\n+    private static final int VARIABLES_TO_REMOVE_INDEX = InternalThreadLocalMap.nextVariableIndex();\r\n+\r\n+    private final int index;\r\n+\r\n+    public InternalThreadLocal() {\r\n+        index = InternalThreadLocalMap.nextVariableIndex();\r\n+    }\r\n+\r\n+    /**\r\n+     * Removes all {@link InternalThreadLocal} variables bound to the current thread.  This operation is useful when you\r\n+     * are in a container environment, and you don't want to leave the thread local variables in the threads you do not\r\n+     * manage.\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public static void removeAll() {\r\n+        InternalThreadLocalMap threadLocalMap = InternalThreadLocalMap.getIfSet();\r\n+        if (threadLocalMap == null) {\r\n+            return;\r\n+        }\r\n+\r\n+        try {\r\n+            Object v = threadLocalMap.indexedVariable(VARIABLES_TO_REMOVE_INDEX);\r\n+            if (v != null && v != InternalThreadLocalMap.UNSET) {\r\n+                Set<InternalThreadLocal<?>> variablesToRemove = (Set<InternalThreadLocal<?>>) v;\r\n+                InternalThreadLocal<?>[] variablesToRemoveArray =\r\n+                        variablesToRemove.toArray(new InternalThreadLocal[0]);\r\n+                for (InternalThreadLocal<?> tlv : variablesToRemoveArray) {\r\n+                    tlv.remove(threadLocalMap);\r\n+                }\r\n+            }\r\n+        } finally {\r\n+            InternalThreadLocalMap.remove();\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Returns the number of thread local variables bound to the current thread.\r\n+     */\r\n+    public static int size() {\r\n+        InternalThreadLocalMap threadLocalMap = InternalThreadLocalMap.getIfSet();\r\n+        if (threadLocalMap == null) {\r\n+            return 0;\r\n+        } else {\r\n+            return threadLocalMap.size();\r\n+        }\r\n+    }\r\n+\r\n+    public static void destroy() {\r\n+        InternalThreadLocalMap.destroy();\r\n+    }\r\n+\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    private static void addToVariablesToRemove(InternalThreadLocalMap threadLocalMap, InternalThreadLocal<?> variable) {\r\n+        Object v = threadLocalMap.indexedVariable(VARIABLES_TO_REMOVE_INDEX);\r\n+        Set<InternalThreadLocal<?>> variablesToRemove;\r\n+        if (v == InternalThreadLocalMap.UNSET || v == null) {\r\n+            variablesToRemove = Collections.newSetFromMap(new IdentityHashMap<InternalThreadLocal<?>, Boolean>());\r\n+            threadLocalMap.setIndexedVariable(VARIABLES_TO_REMOVE_INDEX, variablesToRemove);\r\n+        } else {\r\n+            variablesToRemove = (Set<InternalThreadLocal<?>>) v;\r\n+        }\r\n+\r\n+        variablesToRemove.add(variable);\r\n+    }\r\n+\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    private static void removeFromVariablesToRemove(InternalThreadLocalMap threadLocalMap, InternalThreadLocal<?> variable) {\r\n+\r\n+        Object v = threadLocalMap.indexedVariable(VARIABLES_TO_REMOVE_INDEX);\r\n+\r\n+        if (v == InternalThreadLocalMap.UNSET || v == null) {\r\n+            return;\r\n+        }\r\n+\r\n+        Set<InternalThreadLocal<?>> variablesToRemove = (Set<InternalThreadLocal<?>>) v;\r\n+        variablesToRemove.remove(variable);\r\n+    }\r\n+\r\n+    /**\r\n+     * Returns the current value for the current thread\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public final V get() {\r\n+        InternalThreadLocalMap threadLocalMap = InternalThreadLocalMap.get();\r\n+        Object v = threadLocalMap.indexedVariable(index);\r\n+        if (v != InternalThreadLocalMap.UNSET) {\r\n+            return (V) v;\r\n+        }\r\n+\r\n+        return initialize(threadLocalMap);\r\n+    }\r\n+\r\n+    private V initialize(InternalThreadLocalMap threadLocalMap) {\r\n+        V v = null;\r\n+        try {\r\n+            v = initialValue();\r\n+        } catch (Exception e) {\r\n+            throw new RuntimeException(e);\r\n+        }\r\n+\r\n+        threadLocalMap.setIndexedVariable(index, v);\r\n+        addToVariablesToRemove(threadLocalMap, this);\r\n+        return v;\r\n+    }\r\n+\r\n+    /**\r\n+     * Sets the value for the current thread.\r\n+     */\r\n+    public final void set(V value) {\r\n+        if (value == null || value == InternalThreadLocalMap.UNSET) {\r\n+            remove();\r\n+        } else {\r\n+            InternalThreadLocalMap threadLocalMap = InternalThreadLocalMap.get();\r\n+            if (threadLocalMap.setIndexedVariable(index, value)) {\r\n+                addToVariablesToRemove(threadLocalMap, this);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Sets the value to uninitialized; a proceeding call to get() will trigger a call to initialValue().\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public final void remove() {\r\n+        remove(InternalThreadLocalMap.getIfSet());\r\n+    }\r\n+\r\n+    /**\r\n+     * Sets the value to uninitialized for the specified thread local map;\r\n+     * a proceeding call to get() will trigger a call to initialValue().\r\n+     * The specified thread local map must be for the current thread.\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public final void remove(InternalThreadLocalMap threadLocalMap) {\r\n+        if (threadLocalMap == null) {\r\n+            return;\r\n+        }\r\n+\r\n+        Object v = threadLocalMap.removeIndexedVariable(index);\r\n+        removeFromVariablesToRemove(threadLocalMap, this);\r\n+\r\n+        if (v != InternalThreadLocalMap.UNSET) {\r\n+            try {\r\n+                onRemoval((V) v);\r\n+            } catch (Exception e) {\r\n+                throw new RuntimeException(e);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Returns the initial value for this thread-local variable.\r\n+     */\r\n+    protected V initialValue() throws Exception {\r\n+        return null;\r\n+    }\r\n+\r\n+    /**\r\n+     * Invoked when this thread local variable is removed by {@link #remove()}.\r\n+     */\r\n+    protected void onRemoval(@SuppressWarnings(\"unused\") V value) throws Exception {\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadlocal/InternalThreadLocalMap.java", "source2": "org/apache/dubbo/common/threadlocal/InternalThreadLocalMap.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,167 +1,167 @@\n-/*\n- * Copyright 2014 The Netty Project\n- *\n- * The Netty Project licenses this file to you under the Apache License,\n- * version 2.0 (the \"License\"); you may not use this file except in compliance\n- * with 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, WITHOUT\n- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n- * License for the specific language governing permissions and limitations\n- * under the License.\n- */\n-\n-package org.apache.dubbo.common.threadlocal;\n-\n-import java.util.Arrays;\n-import java.util.concurrent.atomic.AtomicInteger;\n-\n-/**\n- * The internal data structure that stores the threadLocal variables for Netty and all {@link InternalThread}s.\n- * Note that this class is for internal use only. Use {@link InternalThread}\n- * unless you know what you are doing.\n- */\n-public final class InternalThreadLocalMap {\n-\n-    private Object[] indexedVariables;\n-\n-    private static ThreadLocal<InternalThreadLocalMap> slowThreadLocalMap = new ThreadLocal<InternalThreadLocalMap>();\n-\n-    private static final AtomicInteger NEXT_INDEX = new AtomicInteger();\n-\n-    public static final Object UNSET = new Object();\n-\n-    public static InternalThreadLocalMap getIfSet() {\n-        Thread thread = Thread.currentThread();\n-        if (thread instanceof InternalThread) {\n-            return ((InternalThread) thread).threadLocalMap();\n-        }\n-        return slowThreadLocalMap.get();\n-    }\n-\n-    public static InternalThreadLocalMap get() {\n-        Thread thread = Thread.currentThread();\n-        if (thread instanceof InternalThread) {\n-            return fastGet((InternalThread) thread);\n-        }\n-        return slowGet();\n-    }\n-\n-    public static void remove() {\n-        Thread thread = Thread.currentThread();\n-        if (thread instanceof InternalThread) {\n-            ((InternalThread) thread).setThreadLocalMap(null);\n-        } else {\n-            slowThreadLocalMap.remove();\n-        }\n-    }\n-\n-    public static void destroy() {\n-        slowThreadLocalMap = null;\n-    }\n-\n-    public static int nextVariableIndex() {\n-        int index = NEXT_INDEX.getAndIncrement();\n-        if (index < 0) {\n-            NEXT_INDEX.decrementAndGet();\n-            throw new IllegalStateException(\"Too many thread-local indexed variables\");\n-        }\n-        return index;\n-    }\n-\n-    public static int lastVariableIndex() {\n-        return NEXT_INDEX.get() - 1;\n-    }\n-\n-    private InternalThreadLocalMap() {\n-        indexedVariables = newIndexedVariableTable();\n-    }\n-\n-    public Object indexedVariable(int index) {\n-        Object[] lookup = indexedVariables;\n-        return index < lookup.length ? lookup[index] : UNSET;\n-    }\n-\n-    /**\n-     * @return {@code true} if and only if a new thread-local variable has been created\n-     */\n-    public boolean setIndexedVariable(int index, Object value) {\n-        Object[] lookup = indexedVariables;\n-        if (index < lookup.length) {\n-            Object oldValue = lookup[index];\n-            lookup[index] = value;\n-            return oldValue == UNSET;\n-        } else {\n-            expandIndexedVariableTableAndSet(index, value);\n-            return true;\n-        }\n-    }\n-\n-    public Object removeIndexedVariable(int index) {\n-        Object[] lookup = indexedVariables;\n-        if (index < lookup.length) {\n-            Object v = lookup[index];\n-            lookup[index] = UNSET;\n-            return v;\n-        } else {\n-            return UNSET;\n-        }\n-    }\n-\n-    public int size() {\n-        int count = 0;\n-        for (Object o : indexedVariables) {\n-            if (o != UNSET) {\n-                ++count;\n-            }\n-        }\n-\n-        //the fist element in `indexedVariables` is a set to keep all the InternalThreadLocal to remove\n-        //look at method `addToVariablesToRemove`\n-        return count - 1;\n-    }\n-\n-    private static Object[] newIndexedVariableTable() {\n-        Object[] array = new Object[32];\n-        Arrays.fill(array, UNSET);\n-        return array;\n-    }\n-\n-    private static InternalThreadLocalMap fastGet(InternalThread thread) {\n-        InternalThreadLocalMap threadLocalMap = thread.threadLocalMap();\n-        if (threadLocalMap == null) {\n-            thread.setThreadLocalMap(threadLocalMap = new InternalThreadLocalMap());\n-        }\n-        return threadLocalMap;\n-    }\n-\n-    private static InternalThreadLocalMap slowGet() {\n-        ThreadLocal<InternalThreadLocalMap> slowThreadLocalMap = InternalThreadLocalMap.slowThreadLocalMap;\n-        InternalThreadLocalMap ret = slowThreadLocalMap.get();\n-        if (ret == null) {\n-            ret = new InternalThreadLocalMap();\n-            slowThreadLocalMap.set(ret);\n-        }\n-        return ret;\n-    }\n-\n-    private void expandIndexedVariableTableAndSet(int index, Object value) {\n-        Object[] oldArray = indexedVariables;\n-        final int oldCapacity = oldArray.length;\n-        int newCapacity = index;\n-        newCapacity |= newCapacity >>> 1;\n-        newCapacity |= newCapacity >>> 2;\n-        newCapacity |= newCapacity >>> 4;\n-        newCapacity |= newCapacity >>> 8;\n-        newCapacity |= newCapacity >>> 16;\n-        newCapacity++;\n-\n-        Object[] newArray = Arrays.copyOf(oldArray, newCapacity);\n-        Arrays.fill(newArray, oldCapacity, newArray.length, UNSET);\n-        newArray[index] = value;\n-        indexedVariables = newArray;\n-    }\n-}\n+/*\r\n+ * Copyright 2014 The Netty Project\r\n+ *\r\n+ * The Netty Project licenses this file to you under the Apache License,\r\n+ * version 2.0 (the \"License\"); you may not use this file except in compliance\r\n+ * with 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, WITHOUT\r\n+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r\n+ * License for the specific language governing permissions and limitations\r\n+ * under the License.\r\n+ */\r\n+\r\n+package org.apache.dubbo.common.threadlocal;\r\n+\r\n+import java.util.Arrays;\r\n+import java.util.concurrent.atomic.AtomicInteger;\r\n+\r\n+/**\r\n+ * The internal data structure that stores the threadLocal variables for Netty and all {@link InternalThread}s.\r\n+ * Note that this class is for internal use only. Use {@link InternalThread}\r\n+ * unless you know what you are doing.\r\n+ */\r\n+public final class InternalThreadLocalMap {\r\n+\r\n+    private Object[] indexedVariables;\r\n+\r\n+    private static ThreadLocal<InternalThreadLocalMap> slowThreadLocalMap = new ThreadLocal<InternalThreadLocalMap>();\r\n+\r\n+    private static final AtomicInteger NEXT_INDEX = new AtomicInteger();\r\n+\r\n+    public static final Object UNSET = new Object();\r\n+\r\n+    public static InternalThreadLocalMap getIfSet() {\r\n+        Thread thread = Thread.currentThread();\r\n+        if (thread instanceof InternalThread) {\r\n+            return ((InternalThread) thread).threadLocalMap();\r\n+        }\r\n+        return slowThreadLocalMap.get();\r\n+    }\r\n+\r\n+    public static InternalThreadLocalMap get() {\r\n+        Thread thread = Thread.currentThread();\r\n+        if (thread instanceof InternalThread) {\r\n+            return fastGet((InternalThread) thread);\r\n+        }\r\n+        return slowGet();\r\n+    }\r\n+\r\n+    public static void remove() {\r\n+        Thread thread = Thread.currentThread();\r\n+        if (thread instanceof InternalThread) {\r\n+            ((InternalThread) thread).setThreadLocalMap(null);\r\n+        } else {\r\n+            slowThreadLocalMap.remove();\r\n+        }\r\n+    }\r\n+\r\n+    public static void destroy() {\r\n+        slowThreadLocalMap = null;\r\n+    }\r\n+\r\n+    public static int nextVariableIndex() {\r\n+        int index = NEXT_INDEX.getAndIncrement();\r\n+        if (index < 0) {\r\n+            NEXT_INDEX.decrementAndGet();\r\n+            throw new IllegalStateException(\"Too many thread-local indexed variables\");\r\n+        }\r\n+        return index;\r\n+    }\r\n+\r\n+    public static int lastVariableIndex() {\r\n+        return NEXT_INDEX.get() - 1;\r\n+    }\r\n+\r\n+    private InternalThreadLocalMap() {\r\n+        indexedVariables = newIndexedVariableTable();\r\n+    }\r\n+\r\n+    public Object indexedVariable(int index) {\r\n+        Object[] lookup = indexedVariables;\r\n+        return index < lookup.length ? lookup[index] : UNSET;\r\n+    }\r\n+\r\n+    /**\r\n+     * @return {@code true} if and only if a new thread-local variable has been created\r\n+     */\r\n+    public boolean setIndexedVariable(int index, Object value) {\r\n+        Object[] lookup = indexedVariables;\r\n+        if (index < lookup.length) {\r\n+            Object oldValue = lookup[index];\r\n+            lookup[index] = value;\r\n+            return oldValue == UNSET;\r\n+        } else {\r\n+            expandIndexedVariableTableAndSet(index, value);\r\n+            return true;\r\n+        }\r\n+    }\r\n+\r\n+    public Object removeIndexedVariable(int index) {\r\n+        Object[] lookup = indexedVariables;\r\n+        if (index < lookup.length) {\r\n+            Object v = lookup[index];\r\n+            lookup[index] = UNSET;\r\n+            return v;\r\n+        } else {\r\n+            return UNSET;\r\n+        }\r\n+    }\r\n+\r\n+    public int size() {\r\n+        int count = 0;\r\n+        for (Object o : indexedVariables) {\r\n+            if (o != UNSET) {\r\n+                ++count;\r\n+            }\r\n+        }\r\n+\r\n+        //the fist element in `indexedVariables` is a set to keep all the InternalThreadLocal to remove\r\n+        //look at method `addToVariablesToRemove`\r\n+        return count - 1;\r\n+    }\r\n+\r\n+    private static Object[] newIndexedVariableTable() {\r\n+        Object[] array = new Object[32];\r\n+        Arrays.fill(array, UNSET);\r\n+        return array;\r\n+    }\r\n+\r\n+    private static InternalThreadLocalMap fastGet(InternalThread thread) {\r\n+        InternalThreadLocalMap threadLocalMap = thread.threadLocalMap();\r\n+        if (threadLocalMap == null) {\r\n+            thread.setThreadLocalMap(threadLocalMap = new InternalThreadLocalMap());\r\n+        }\r\n+        return threadLocalMap;\r\n+    }\r\n+\r\n+    private static InternalThreadLocalMap slowGet() {\r\n+        ThreadLocal<InternalThreadLocalMap> slowThreadLocalMap = InternalThreadLocalMap.slowThreadLocalMap;\r\n+        InternalThreadLocalMap ret = slowThreadLocalMap.get();\r\n+        if (ret == null) {\r\n+            ret = new InternalThreadLocalMap();\r\n+            slowThreadLocalMap.set(ret);\r\n+        }\r\n+        return ret;\r\n+    }\r\n+\r\n+    private void expandIndexedVariableTableAndSet(int index, Object value) {\r\n+        Object[] oldArray = indexedVariables;\r\n+        final int oldCapacity = oldArray.length;\r\n+        int newCapacity = index;\r\n+        newCapacity |= newCapacity >>> 1;\r\n+        newCapacity |= newCapacity >>> 2;\r\n+        newCapacity |= newCapacity >>> 4;\r\n+        newCapacity |= newCapacity >>> 8;\r\n+        newCapacity |= newCapacity >>> 16;\r\n+        newCapacity++;\r\n+\r\n+        Object[] newArray = Arrays.copyOf(oldArray, newCapacity);\r\n+        Arrays.fill(newArray, oldCapacity, newArray.length, UNSET);\r\n+        newArray[index] = value;\r\n+        indexedVariables = newArray;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadlocal/NamedInternalThreadFactory.java", "source2": "org/apache/dubbo/common/threadlocal/NamedInternalThreadFactory.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,47 +1,47 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-\n-package org.apache.dubbo.common.threadlocal;\n-\n-import org.apache.dubbo.common.utils.NamedThreadFactory;\n-\n-/**\n- * NamedInternalThreadFactory\n- * This is a threadFactory which produce {@link InternalThread}\n- */\n-public class NamedInternalThreadFactory extends NamedThreadFactory {\n-\n-    public NamedInternalThreadFactory() {\n-        super();\n-    }\n-\n-    public NamedInternalThreadFactory(String prefix) {\n-        super(prefix, false);\n-    }\n-\n-    public NamedInternalThreadFactory(String prefix, boolean daemon) {\n-        super(prefix, daemon);\n-    }\n-\n-    @Override\n-    public Thread newThread(Runnable runnable) {\n-        String name = mPrefix + mThreadNum.getAndIncrement();\n-        InternalThread ret = new InternalThread(mGroup, InternalRunnable.Wrap(runnable), name, 0);\n-        ret.setDaemon(mDaemon);\n-        return ret;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+\r\n+package org.apache.dubbo.common.threadlocal;\r\n+\r\n+import org.apache.dubbo.common.utils.NamedThreadFactory;\r\n+\r\n+/**\r\n+ * NamedInternalThreadFactory\r\n+ * This is a threadFactory which produce {@link InternalThread}\r\n+ */\r\n+public class NamedInternalThreadFactory extends NamedThreadFactory {\r\n+\r\n+    public NamedInternalThreadFactory() {\r\n+        super();\r\n+    }\r\n+\r\n+    public NamedInternalThreadFactory(String prefix) {\r\n+        super(prefix, false);\r\n+    }\r\n+\r\n+    public NamedInternalThreadFactory(String prefix, boolean daemon) {\r\n+        super(prefix, daemon);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Thread newThread(Runnable runnable) {\r\n+        String name = mPrefix + mThreadNum.getAndIncrement();\r\n+        InternalThread ret = new InternalThread(mGroup, InternalRunnable.Wrap(runnable), name, 0);\r\n+        ret.setDaemon(mDaemon);\r\n+        return ret;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadpool/ThreadPool.java", "source2": "org/apache/dubbo/common/threadpool/ThreadPool.java", "comments": ["Line-ending 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.common.threadpool;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.Adaptive;\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import java.util.concurrent.Executor;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.THREADPOOL_KEY;\n-\n-/**\n- * ThreadPool\n- */\n-@SPI(\"fixed\")\n-public interface ThreadPool {\n-\n-    /**\n-     * Thread pool\n-     *\n-     * @param url URL contains thread parameter\n-     * @return thread pool\n-     */\n-    @Adaptive({THREADPOOL_KEY})\n-    Executor getExecutor(URL url);\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.common.threadpool;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.Adaptive;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+import java.util.concurrent.Executor;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.THREADPOOL_KEY;\r\n+\r\n+/**\r\n+ * ThreadPool\r\n+ */\r\n+@SPI(\"fixed\")\r\n+public interface ThreadPool {\r\n+\r\n+    /**\r\n+     * Thread pool\r\n+     *\r\n+     * @param url URL contains thread parameter\r\n+     * @return thread pool\r\n+     */\r\n+    @Adaptive({THREADPOOL_KEY})\r\n+    Executor getExecutor(URL url);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadpool/ThreadlessExecutor.java", "source2": "org/apache/dubbo/common/threadpool/ThreadlessExecutor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,202 +1,202 @@\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.common.threadpool;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-\n-import java.util.Collections;\n-import java.util.List;\n-import java.util.concurrent.AbstractExecutorService;\n-import java.util.concurrent.BlockingQueue;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.ExecutorService;\n-import java.util.concurrent.LinkedBlockingQueue;\n-import java.util.concurrent.TimeUnit;\n-import java.util.concurrent.TimeoutException;\n-\n-/**\n- * The most important difference between this Executor and other normal Executor is that this one doesn't manage\n- * any thread.\n- * <p>\n- * Tasks submitted to this executor through {@link #execute(Runnable)} will not get scheduled to a specific thread, though normal executors always do the schedule.\n- * Those tasks are stored in a blocking queue and will only be executed when a thread calls {@link #waitAndDrain()}, the thread executing the task\n- * is exactly the same as the one calling waitAndDrain.\n- */\n-public class ThreadlessExecutor extends AbstractExecutorService {\n-    private static final Logger logger = LoggerFactory.getLogger(ThreadlessExecutor.class.getName());\n-\n-    private final BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();\n-\n-    private ExecutorService sharedExecutor;\n-\n-    private CompletableFuture<?> waitingFuture;\n-\n-    private boolean finished = false;\n-\n-    private volatile boolean waiting = true;\n-\n-    private final Object lock = new Object();\n-\n-    public ThreadlessExecutor(ExecutorService sharedExecutor) {\n-        this.sharedExecutor = sharedExecutor;\n-    }\n-\n-    public CompletableFuture<?> getWaitingFuture() {\n-        return waitingFuture;\n-    }\n-\n-    public void setWaitingFuture(CompletableFuture<?> waitingFuture) {\n-        this.waitingFuture = waitingFuture;\n-    }\n-\n-    public boolean isWaiting() {\n-        return waiting;\n-    }\n-\n-    /**\n-     * Waits until there is a task, executes the task and all queued tasks (if there're any). The task is either a normal\n-     * response or a timeout response.\n-     */\n-    public void waitAndDrain() throws InterruptedException {\n-        /**\n-         * Usually, {@link #waitAndDrain()} will only get called once. It blocks for the response for the first time,\n-         * once the response (the task) reached and being executed waitAndDrain will return, the whole request process\n-         * then finishes. Subsequent calls on {@link #waitAndDrain()} (if there're any) should return immediately.\n-         *\n-         * There's no need to worry that {@link #finished} is not thread-safe. Checking and updating of\n-         * 'finished' only appear in waitAndDrain, since waitAndDrain is binding to one RPC call (one thread), the call\n-         * of it is totally sequential.\n-         */\n-        if (finished) {\n-            return;\n-        }\n-\n-        Runnable runnable;\n-        try {\n-            runnable = queue.take();\n-        }catch (InterruptedException e){\n-            waiting = false;\n-            throw e;\n-        }\n-\n-        synchronized (lock) {\n-            waiting = false;\n-            runnable.run();\n-        }\n-\n-        runnable = queue.poll();\n-        while (runnable != null) {\n-            runnable.run();\n-            runnable = queue.poll();\n-        }\n-        // mark the status of ThreadlessExecutor as finished.\n-        finished = true;\n-    }\n-\n-    public long waitAndDrain(long timeout, TimeUnit unit) throws InterruptedException, TimeoutException {\n-        /*long startInMs = System.currentTimeMillis();\n-        Runnable runnable = queue.poll(timeout, unit);\n-        if (runnable == null) {\n-            throw new TimeoutException();\n-        }\n-        runnable.run();\n-        long elapsedInMs = System.currentTimeMillis() - startInMs;\n-        long timeLeft = timeout - elapsedInMs;\n-        if (timeLeft < 0) {\n-            throw new TimeoutException();\n-        }\n-        return timeLeft;*/\n-        throw new UnsupportedOperationException();\n-    }\n-\n-    /**\n-     * If the calling thread is still waiting for a callback task, add the task into the blocking queue to wait for schedule.\n-     * Otherwise, submit to shared callback executor directly.\n-     *\n-     * @param runnable\n-     */\n-    @Override\n-    public void execute(Runnable runnable) {\n-        runnable = new RunnableWrapper(runnable);\n-        synchronized (lock) {\n-            if (!waiting) {\n-                sharedExecutor.execute(runnable);\n-            } else {\n-                queue.add(runnable);\n-            }\n-        }\n-    }\n-\n-    /**\n-     * tells the thread blocking on {@link #waitAndDrain()} to return, despite of the current status, to avoid endless waiting.\n-     */\n-    public void notifyReturn(Throwable t) {\n-        // an empty runnable task.\n-        execute(() -> {\n-            waitingFuture.completeExceptionally(t);\n-        });\n-    }\n-\n-    /**\n-     * The following methods are still not supported\n-     */\n-\n-    @Override\n-    public void shutdown() {\n-        shutdownNow();\n-    }\n-\n-    @Override\n-    public List<Runnable> shutdownNow() {\n-        notifyReturn(new IllegalStateException(\"Consumer is shutting down and this call is going to be stopped without \" +\n-                \"receiving any result, usually this is called by a slow provider instance or bad service implementation.\"));\n-        return Collections.emptyList();\n-    }\n-\n-    @Override\n-    public boolean isShutdown() {\n-        return false;\n-    }\n-\n-    @Override\n-    public boolean isTerminated() {\n-        return false;\n-    }\n-\n-    @Override\n-    public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {\n-        return false;\n-    }\n-\n-    private static class RunnableWrapper implements Runnable {\n-        private Runnable runnable;\n-\n-        public RunnableWrapper(Runnable runnable) {\n-            this.runnable = runnable;\n-        }\n-\n-        @Override\n-        public void run() {\n-            try {\n-                runnable.run();\n-            } catch (Throwable t) {\n-                logger.info(t);\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.common.threadpool;\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.util.Collections;\r\n+import java.util.List;\r\n+import java.util.concurrent.AbstractExecutorService;\r\n+import java.util.concurrent.BlockingQueue;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.ExecutorService;\r\n+import java.util.concurrent.LinkedBlockingQueue;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.concurrent.TimeoutException;\r\n+\r\n+/**\r\n+ * The most important difference between this Executor and other normal Executor is that this one doesn't manage\r\n+ * any thread.\r\n+ * <p>\r\n+ * Tasks submitted to this executor through {@link #execute(Runnable)} will not get scheduled to a specific thread, though normal executors always do the schedule.\r\n+ * Those tasks are stored in a blocking queue and will only be executed when a thread calls {@link #waitAndDrain()}, the thread executing the task\r\n+ * is exactly the same as the one calling waitAndDrain.\r\n+ */\r\n+public class ThreadlessExecutor extends AbstractExecutorService {\r\n+    private static final Logger logger = LoggerFactory.getLogger(ThreadlessExecutor.class.getName());\r\n+\r\n+    private final BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();\r\n+\r\n+    private ExecutorService sharedExecutor;\r\n+\r\n+    private CompletableFuture<?> waitingFuture;\r\n+\r\n+    private boolean finished = false;\r\n+\r\n+    private volatile boolean waiting = true;\r\n+\r\n+    private final Object lock = new Object();\r\n+\r\n+    public ThreadlessExecutor(ExecutorService sharedExecutor) {\r\n+        this.sharedExecutor = sharedExecutor;\r\n+    }\r\n+\r\n+    public CompletableFuture<?> getWaitingFuture() {\r\n+        return waitingFuture;\r\n+    }\r\n+\r\n+    public void setWaitingFuture(CompletableFuture<?> waitingFuture) {\r\n+        this.waitingFuture = waitingFuture;\r\n+    }\r\n+\r\n+    public boolean isWaiting() {\r\n+        return waiting;\r\n+    }\r\n+\r\n+    /**\r\n+     * Waits until there is a task, executes the task and all queued tasks (if there're any). The task is either a normal\r\n+     * response or a timeout response.\r\n+     */\r\n+    public void waitAndDrain() throws InterruptedException {\r\n+        /**\r\n+         * Usually, {@link #waitAndDrain()} will only get called once. It blocks for the response for the first time,\r\n+         * once the response (the task) reached and being executed waitAndDrain will return, the whole request process\r\n+         * then finishes. Subsequent calls on {@link #waitAndDrain()} (if there're any) should return immediately.\r\n+         *\r\n+         * There's no need to worry that {@link #finished} is not thread-safe. Checking and updating of\r\n+         * 'finished' only appear in waitAndDrain, since waitAndDrain is binding to one RPC call (one thread), the call\r\n+         * of it is totally sequential.\r\n+         */\r\n+        if (finished) {\r\n+            return;\r\n+        }\r\n+\r\n+        Runnable runnable;\r\n+        try {\r\n+            runnable = queue.take();\r\n+        }catch (InterruptedException e){\r\n+            waiting = false;\r\n+            throw e;\r\n+        }\r\n+\r\n+        synchronized (lock) {\r\n+            waiting = false;\r\n+            runnable.run();\r\n+        }\r\n+\r\n+        runnable = queue.poll();\r\n+        while (runnable != null) {\r\n+            runnable.run();\r\n+            runnable = queue.poll();\r\n+        }\r\n+        // mark the status of ThreadlessExecutor as finished.\r\n+        finished = true;\r\n+    }\r\n+\r\n+    public long waitAndDrain(long timeout, TimeUnit unit) throws InterruptedException, TimeoutException {\r\n+        /*long startInMs = System.currentTimeMillis();\r\n+        Runnable runnable = queue.poll(timeout, unit);\r\n+        if (runnable == null) {\r\n+            throw new TimeoutException();\r\n+        }\r\n+        runnable.run();\r\n+        long elapsedInMs = System.currentTimeMillis() - startInMs;\r\n+        long timeLeft = timeout - elapsedInMs;\r\n+        if (timeLeft < 0) {\r\n+            throw new TimeoutException();\r\n+        }\r\n+        return timeLeft;*/\r\n+        throw new UnsupportedOperationException();\r\n+    }\r\n+\r\n+    /**\r\n+     * If the calling thread is still waiting for a callback task, add the task into the blocking queue to wait for schedule.\r\n+     * Otherwise, submit to shared callback executor directly.\r\n+     *\r\n+     * @param runnable\r\n+     */\r\n+    @Override\r\n+    public void execute(Runnable runnable) {\r\n+        runnable = new RunnableWrapper(runnable);\r\n+        synchronized (lock) {\r\n+            if (!waiting) {\r\n+                sharedExecutor.execute(runnable);\r\n+            } else {\r\n+                queue.add(runnable);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * tells the thread blocking on {@link #waitAndDrain()} to return, despite of the current status, to avoid endless waiting.\r\n+     */\r\n+    public void notifyReturn(Throwable t) {\r\n+        // an empty runnable task.\r\n+        execute(() -> {\r\n+            waitingFuture.completeExceptionally(t);\r\n+        });\r\n+    }\r\n+\r\n+    /**\r\n+     * The following methods are still not supported\r\n+     */\r\n+\r\n+    @Override\r\n+    public void shutdown() {\r\n+        shutdownNow();\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<Runnable> shutdownNow() {\r\n+        notifyReturn(new IllegalStateException(\"Consumer is shutting down and this call is going to be stopped without \" +\r\n+                \"receiving any result, usually this is called by a slow provider instance or bad service implementation.\"));\r\n+        return Collections.emptyList();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isShutdown() {\r\n+        return false;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isTerminated() {\r\n+        return false;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {\r\n+        return false;\r\n+    }\r\n+\r\n+    private static class RunnableWrapper implements Runnable {\r\n+        private Runnable runnable;\r\n+\r\n+        public RunnableWrapper(Runnable runnable) {\r\n+            this.runnable = runnable;\r\n+        }\r\n+\r\n+        @Override\r\n+        public void run() {\r\n+            try {\r\n+                runnable.run();\r\n+            } catch (Throwable t) {\r\n+                logger.info(t);\r\n+            }\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadpool/concurrent/ScheduledCompletableFuture.java", "source2": "org/apache/dubbo/common/threadpool/concurrent/ScheduledCompletableFuture.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,65 +1,65 @@\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.common.threadpool.concurrent;\n-\n-\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.ScheduledExecutorService;\n-import java.util.concurrent.TimeUnit;\n-import java.util.function.Supplier;\n-\n-public class ScheduledCompletableFuture {\n-\n-    public static <T> CompletableFuture<T> schedule(\n-            ScheduledExecutorService executor,\n-            Supplier<T> task,\n-            long delay,\n-            TimeUnit unit\n-    ) {\n-        CompletableFuture<T> completableFuture = new CompletableFuture<>();\n-        executor.schedule(\n-                () -> {\n-                    try {\n-                        return completableFuture.complete(task.get());\n-                    } catch (Throwable t) {\n-                        return completableFuture.completeExceptionally(t);\n-                    }\n-                },\n-                delay,\n-                unit\n-        );\n-        return completableFuture;\n-    }\n-\n-    public static <T> CompletableFuture<T> submit(\n-            ScheduledExecutorService executor,\n-            Supplier<T> task\n-    ) {\n-        CompletableFuture<T> completableFuture = new CompletableFuture<>();\n-        executor.submit(\n-                () -> {\n-                    try {\n-                        return completableFuture.complete(task.get());\n-                    } catch (Throwable t) {\n-                        return completableFuture.completeExceptionally(t);\n-                    }\n-                }\n-        );\n-        return completableFuture;\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.common.threadpool.concurrent;\r\n+\r\n+\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.ScheduledExecutorService;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.function.Supplier;\r\n+\r\n+public class ScheduledCompletableFuture {\r\n+\r\n+    public static <T> CompletableFuture<T> schedule(\r\n+            ScheduledExecutorService executor,\r\n+            Supplier<T> task,\r\n+            long delay,\r\n+            TimeUnit unit\r\n+    ) {\r\n+        CompletableFuture<T> completableFuture = new CompletableFuture<>();\r\n+        executor.schedule(\r\n+                () -> {\r\n+                    try {\r\n+                        return completableFuture.complete(task.get());\r\n+                    } catch (Throwable t) {\r\n+                        return completableFuture.completeExceptionally(t);\r\n+                    }\r\n+                },\r\n+                delay,\r\n+                unit\r\n+        );\r\n+        return completableFuture;\r\n+    }\r\n+\r\n+    public static <T> CompletableFuture<T> submit(\r\n+            ScheduledExecutorService executor,\r\n+            Supplier<T> task\r\n+    ) {\r\n+        CompletableFuture<T> completableFuture = new CompletableFuture<>();\r\n+        executor.submit(\r\n+                () -> {\r\n+                    try {\r\n+                        return completableFuture.complete(task.get());\r\n+                    } catch (Throwable t) {\r\n+                        return completableFuture.completeExceptionally(t);\r\n+                    }\r\n+                }\r\n+        );\r\n+        return completableFuture;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEvent.java", "source2": "org/apache/dubbo/common/threadpool/event/ThreadPoolExhaustedEvent.java", "comments": ["Line-ending 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.common.threadpool.event;\n-\n-import org.apache.dubbo.event.Event;\n-\n-/**\n- * An {@link Event Dubbo event} when the Dubbo thread pool is exhausted.\n- *\n- * @see Event\n- */\n-public class ThreadPoolExhaustedEvent extends Event {\n-\n-    final String msg;\n-\n-    public ThreadPoolExhaustedEvent(Object source, String msg) {\n-        super(source);\n-        this.msg = msg;\n-    }\n-\n-    public String getMsg() {\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.common.threadpool.event;\r\n+\r\n+import org.apache.dubbo.event.Event;\r\n+\r\n+/**\r\n+ * An {@link Event Dubbo event} when the Dubbo thread pool is exhausted.\r\n+ *\r\n+ * @see Event\r\n+ */\r\n+public class ThreadPoolExhaustedEvent extends Event {\r\n+\r\n+    final String msg;\r\n+\r\n+    public ThreadPoolExhaustedEvent(Object source, String msg) {\r\n+        super(source);\r\n+        this.msg = msg;\r\n+    }\r\n+\r\n+    public String getMsg() {\r\n+        return msg;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadpool/manager/DefaultExecutorRepository.java", "source2": "org/apache/dubbo/common/threadpool/manager/DefaultExecutorRepository.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,175 +1,175 @@\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.common.threadpool.manager;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.threadpool.ThreadPool;\n-import org.apache.dubbo.common.utils.ExecutorUtil;\n-import org.apache.dubbo.common.utils.NamedThreadFactory;\n-\n-import java.util.Map;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-import java.util.concurrent.ExecutorService;\n-import java.util.concurrent.Executors;\n-import java.util.concurrent.ScheduledExecutorService;\n-import java.util.concurrent.ThreadPoolExecutor;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;\n-import static org.apache.dubbo.common.constants.CommonConstants.EXECUTOR_SERVICE_COMPONENT_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.THREADS_KEY;\n-\n-/**\n- * Consider implementing {@code Licycle} to enable executors shutdown when the process stops.\n- */\n-public class DefaultExecutorRepository implements ExecutorRepository {\n-    private static final Logger logger = LoggerFactory.getLogger(DefaultExecutorRepository.class);\n-\n-    private int DEFAULT_SCHEDULER_SIZE = Runtime.getRuntime().availableProcessors();\n-\n-    private final ExecutorService SHARED_EXECUTOR = Executors.newCachedThreadPool(new NamedThreadFactory(\"DubboSharedHandler\", true));\n-\n-    private Ring<ScheduledExecutorService> scheduledExecutors = new Ring<>();\n-\n-    private ScheduledExecutorService serviceExporterExecutor;\n-\n-    private ScheduledExecutorService reconnectScheduledExecutor;\n-\n-    private ConcurrentMap<String, ConcurrentMap<Integer, ExecutorService>> data = new ConcurrentHashMap<>();\n-\n-    public DefaultExecutorRepository() {\n-        for (int i = 0; i < DEFAULT_SCHEDULER_SIZE; i++) {\n-            ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory(\"Dubbo-framework-scheduler\"));\n-            scheduledExecutors.addItem(scheduler);\n-        }\n-//\n-//        reconnectScheduledExecutor = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory(\"Dubbo-reconnect-scheduler\"));\n-        serviceExporterExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory(\"Dubbo-exporter-scheduler\"));\n-    }\n-\n-    /**\n-     * Get called when the server or client instance initiating.\n-     *\n-     * @param url\n-     * @return\n-     */\n-    public synchronized ExecutorService createExecutorIfAbsent(URL url) {\n-        Map<Integer, ExecutorService> executors = data.computeIfAbsent(EXECUTOR_SERVICE_COMPONENT_KEY, k -> new ConcurrentHashMap<>());\n-        //issue-7054:Consumer's executor is sharing globally, key=Integer.MAX_VALUE. Provider's executor is sharing by protocol.\n-        Integer portKey = CONSUMER_SIDE.equalsIgnoreCase(url.getParameter(SIDE_KEY)) ? Integer.MAX_VALUE : url.getPort();\n-        ExecutorService executor = executors.computeIfAbsent(portKey, k -> createExecutor(url));\n-        // If executor has been shut down, create a new one\n-        if (executor.isShutdown() || executor.isTerminated()) {\n-            executors.remove(portKey);\n-            executor = createExecutor(url);\n-            executors.put(portKey, executor);\n-        }\n-        return executor;\n-    }\n-\n-    public ExecutorService getExecutor(URL url) {\n-        Map<Integer, ExecutorService> executors = data.get(EXECUTOR_SERVICE_COMPONENT_KEY);\n-        /**\n-         * It's guaranteed that this method is called after {@link #createExecutorIfAbsent(URL)}, so data should already\n-         * have Executor instances generated and stored.\n-         */\n-        if (executors == null) {\n-            logger.warn(\"No available executors, this is not expected, framework should call createExecutorIfAbsent first \" +\n-                    \"before coming to here.\");\n-            return null;\n-        }\n-        //issue-7054:Consumer's executor is sharing globally, key=Integer.MAX_VALUE. Provider's executor is sharing by protocol.\n-        Integer portKey = CONSUMER_SIDE.equalsIgnoreCase(url.getParameter(SIDE_KEY)) ? Integer.MAX_VALUE : url.getPort();\n-        ExecutorService executor = executors.get(portKey);\n-        if (executor != null && (executor.isShutdown() || executor.isTerminated())) {\n-            executors.remove(portKey);\n-            // Does not re-create a shutdown executor, use SHARED_EXECUTOR for downgrade.\n-            executor = null;\n-            logger.info(\"Executor for \" + url + \" is shutdown.\");\n-        }\n-        if (executor == null) {\n-            return SHARED_EXECUTOR;\n-        } else {\n-            return executor;\n-        }\n-    }\n-\n-    @Override\n-    public void updateThreadpool(URL url, ExecutorService executor) {\n-        try {\n-            if (url.hasParameter(THREADS_KEY)\n-                    && executor instanceof ThreadPoolExecutor && !executor.isShutdown()) {\n-                ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;\n-                int threads = url.getParameter(THREADS_KEY, 0);\n-                int max = threadPoolExecutor.getMaximumPoolSize();\n-                int core = threadPoolExecutor.getCorePoolSize();\n-                if (threads > 0 && (threads != max || threads != core)) {\n-                    if (threads < core) {\n-                        threadPoolExecutor.setCorePoolSize(threads);\n-                        if (core == max) {\n-                            threadPoolExecutor.setMaximumPoolSize(threads);\n-                        }\n-                    } else {\n-                        threadPoolExecutor.setMaximumPoolSize(threads);\n-                        if (core == max) {\n-                            threadPoolExecutor.setCorePoolSize(threads);\n-                        }\n-                    }\n-                }\n-            }\n-        } catch (Throwable t) {\n-            logger.error(t.getMessage(), t);\n-        }\n-    }\n-\n-    @Override\n-    public ScheduledExecutorService nextScheduledExecutor() {\n-        return scheduledExecutors.pollItem();\n-    }\n-\n-    @Override\n-    public ScheduledExecutorService getServiceExporterExecutor() {\n-        return serviceExporterExecutor;\n-    }\n-\n-    @Override\n-    public ExecutorService getSharedExecutor() {\n-        return SHARED_EXECUTOR;\n-    }\n-\n-    @Override\n-    public void destroyAll() {\n-        data.values().forEach(executors -> {\n-            if (executors != null) {\n-                executors.values().forEach(executor -> {\n-                    if (executor != null && !executor.isShutdown()) {\n-                        ExecutorUtil.shutdownNow(executor, 100);\n-                    }\n-                });\n-            }\n-        });\n-    }\n-\n-    private ExecutorService createExecutor(URL url) {\n-        return (ExecutorService) ExtensionLoader.getExtensionLoader(ThreadPool.class).getAdaptiveExtension().getExecutor(url);\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.common.threadpool.manager;\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.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.threadpool.ThreadPool;\r\n+import org.apache.dubbo.common.utils.ExecutorUtil;\r\n+import org.apache.dubbo.common.utils.NamedThreadFactory;\r\n+\r\n+import java.util.Map;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\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.ThreadPoolExecutor;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.EXECUTOR_SERVICE_COMPONENT_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.THREADS_KEY;\r\n+\r\n+/**\r\n+ * Consider implementing {@code Licycle} to enable executors shutdown when the process stops.\r\n+ */\r\n+public class DefaultExecutorRepository implements ExecutorRepository {\r\n+    private static final Logger logger = LoggerFactory.getLogger(DefaultExecutorRepository.class);\r\n+\r\n+    private int DEFAULT_SCHEDULER_SIZE = Runtime.getRuntime().availableProcessors();\r\n+\r\n+    private final ExecutorService SHARED_EXECUTOR = Executors.newCachedThreadPool(new NamedThreadFactory(\"DubboSharedHandler\", true));\r\n+\r\n+    private Ring<ScheduledExecutorService> scheduledExecutors = new Ring<>();\r\n+\r\n+    private ScheduledExecutorService serviceExporterExecutor;\r\n+\r\n+    private ScheduledExecutorService reconnectScheduledExecutor;\r\n+\r\n+    private ConcurrentMap<String, ConcurrentMap<Integer, ExecutorService>> data = new ConcurrentHashMap<>();\r\n+\r\n+    public DefaultExecutorRepository() {\r\n+        for (int i = 0; i < DEFAULT_SCHEDULER_SIZE; i++) {\r\n+            ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory(\"Dubbo-framework-scheduler\"));\r\n+            scheduledExecutors.addItem(scheduler);\r\n+        }\r\n+//\r\n+//        reconnectScheduledExecutor = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory(\"Dubbo-reconnect-scheduler\"));\r\n+        serviceExporterExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory(\"Dubbo-exporter-scheduler\"));\r\n+    }\r\n+\r\n+    /**\r\n+     * Get called when the server or client instance initiating.\r\n+     *\r\n+     * @param url\r\n+     * @return\r\n+     */\r\n+    public synchronized ExecutorService createExecutorIfAbsent(URL url) {\r\n+        Map<Integer, ExecutorService> executors = data.computeIfAbsent(EXECUTOR_SERVICE_COMPONENT_KEY, k -> new ConcurrentHashMap<>());\r\n+        //issue-7054:Consumer's executor is sharing globally, key=Integer.MAX_VALUE. Provider's executor is sharing by protocol.\r\n+        Integer portKey = CONSUMER_SIDE.equalsIgnoreCase(url.getParameter(SIDE_KEY)) ? Integer.MAX_VALUE : url.getPort();\r\n+        ExecutorService executor = executors.computeIfAbsent(portKey, k -> createExecutor(url));\r\n+        // If executor has been shut down, create a new one\r\n+        if (executor.isShutdown() || executor.isTerminated()) {\r\n+            executors.remove(portKey);\r\n+            executor = createExecutor(url);\r\n+            executors.put(portKey, executor);\r\n+        }\r\n+        return executor;\r\n+    }\r\n+\r\n+    public ExecutorService getExecutor(URL url) {\r\n+        Map<Integer, ExecutorService> executors = data.get(EXECUTOR_SERVICE_COMPONENT_KEY);\r\n+        /**\r\n+         * It's guaranteed that this method is called after {@link #createExecutorIfAbsent(URL)}, so data should already\r\n+         * have Executor instances generated and stored.\r\n+         */\r\n+        if (executors == null) {\r\n+            logger.warn(\"No available executors, this is not expected, framework should call createExecutorIfAbsent first \" +\r\n+                    \"before coming to here.\");\r\n+            return null;\r\n+        }\r\n+        //issue-7054:Consumer's executor is sharing globally, key=Integer.MAX_VALUE. Provider's executor is sharing by protocol.\r\n+        Integer portKey = CONSUMER_SIDE.equalsIgnoreCase(url.getParameter(SIDE_KEY)) ? Integer.MAX_VALUE : url.getPort();\r\n+        ExecutorService executor = executors.get(portKey);\r\n+        if (executor != null && (executor.isShutdown() || executor.isTerminated())) {\r\n+            executors.remove(portKey);\r\n+            // Does not re-create a shutdown executor, use SHARED_EXECUTOR for downgrade.\r\n+            executor = null;\r\n+            logger.info(\"Executor for \" + url + \" is shutdown.\");\r\n+        }\r\n+        if (executor == null) {\r\n+            return SHARED_EXECUTOR;\r\n+        } else {\r\n+            return executor;\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void updateThreadpool(URL url, ExecutorService executor) {\r\n+        try {\r\n+            if (url.hasParameter(THREADS_KEY)\r\n+                    && executor instanceof ThreadPoolExecutor && !executor.isShutdown()) {\r\n+                ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;\r\n+                int threads = url.getParameter(THREADS_KEY, 0);\r\n+                int max = threadPoolExecutor.getMaximumPoolSize();\r\n+                int core = threadPoolExecutor.getCorePoolSize();\r\n+                if (threads > 0 && (threads != max || threads != core)) {\r\n+                    if (threads < core) {\r\n+                        threadPoolExecutor.setCorePoolSize(threads);\r\n+                        if (core == max) {\r\n+                            threadPoolExecutor.setMaximumPoolSize(threads);\r\n+                        }\r\n+                    } else {\r\n+                        threadPoolExecutor.setMaximumPoolSize(threads);\r\n+                        if (core == max) {\r\n+                            threadPoolExecutor.setCorePoolSize(threads);\r\n+                        }\r\n+                    }\r\n+                }\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            logger.error(t.getMessage(), t);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public ScheduledExecutorService nextScheduledExecutor() {\r\n+        return scheduledExecutors.pollItem();\r\n+    }\r\n+\r\n+    @Override\r\n+    public ScheduledExecutorService getServiceExporterExecutor() {\r\n+        return serviceExporterExecutor;\r\n+    }\r\n+\r\n+    @Override\r\n+    public ExecutorService getSharedExecutor() {\r\n+        return SHARED_EXECUTOR;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroyAll() {\r\n+        data.values().forEach(executors -> {\r\n+            if (executors != null) {\r\n+                executors.values().forEach(executor -> {\r\n+                    if (executor != null && !executor.isShutdown()) {\r\n+                        ExecutorUtil.shutdownNow(executor, 100);\r\n+                    }\r\n+                });\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    private ExecutorService createExecutor(URL url) {\r\n+        return (ExecutorService) ExtensionLoader.getExtensionLoader(ThreadPool.class).getAdaptiveExtension().getExecutor(url);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadpool/manager/ExecutorRepository.java", "source2": "org/apache/dubbo/common/threadpool/manager/ExecutorRepository.java", "comments": ["Line-ending 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.common.threadpool.manager;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import java.util.concurrent.ExecutorService;\n-import java.util.concurrent.ScheduledExecutorService;\n-\n-/**\n- *\n- */\n-@SPI(\"default\")\n-public interface ExecutorRepository {\n-\n-    /**\n-     * Called by both Client and Server. TODO, consider separate these two parts.\n-     * When the Client or Server starts for the first time, generate a new threadpool according to the parameters specified.\n-     *\n-     * @param url\n-     * @return\n-     */\n-    ExecutorService createExecutorIfAbsent(URL url);\n-\n-    ExecutorService getExecutor(URL url);\n-\n-    /**\n-     * Modify some of the threadpool's properties according to the url, for example, coreSize, maxSize, ...\n-     *\n-     * @param url\n-     * @param executor\n-     */\n-    void updateThreadpool(URL url, ExecutorService executor);\n-\n-    /**\n-     * Returns a scheduler from the scheduler list, call this method whenever you need a scheduler for a cron job.\n-     * If your cron cannot burden the possible schedule delay caused by sharing the same scheduler, please consider define a dedicate one.\n-     *\n-     * @return\n-     */\n-    ScheduledExecutorService nextScheduledExecutor();\n-\n-    ScheduledExecutorService getServiceExporterExecutor();\n-\n-    /**\n-     * Get the default shared threadpool.\n-     *\n-     * @return\n-     */\n-    ExecutorService getSharedExecutor();\n-\n-    /**\n-     * Destroy all executors that are not in shutdown state\n-     */\n-    void destroyAll();\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.common.threadpool.manager;\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.concurrent.ExecutorService;\r\n+import java.util.concurrent.ScheduledExecutorService;\r\n+\r\n+/**\r\n+ *\r\n+ */\r\n+@SPI(\"default\")\r\n+public interface ExecutorRepository {\r\n+\r\n+    /**\r\n+     * Called by both Client and Server. TODO, consider separate these two parts.\r\n+     * When the Client or Server starts for the first time, generate a new threadpool according to the parameters specified.\r\n+     *\r\n+     * @param url\r\n+     * @return\r\n+     */\r\n+    ExecutorService createExecutorIfAbsent(URL url);\r\n+\r\n+    ExecutorService getExecutor(URL url);\r\n+\r\n+    /**\r\n+     * Modify some of the threadpool's properties according to the url, for example, coreSize, maxSize, ...\r\n+     *\r\n+     * @param url\r\n+     * @param executor\r\n+     */\r\n+    void updateThreadpool(URL url, ExecutorService executor);\r\n+\r\n+    /**\r\n+     * Returns a scheduler from the scheduler list, call this method whenever you need a scheduler for a cron job.\r\n+     * If your cron cannot burden the possible schedule delay caused by sharing the same scheduler, please consider define a dedicate one.\r\n+     *\r\n+     * @return\r\n+     */\r\n+    ScheduledExecutorService nextScheduledExecutor();\r\n+\r\n+    ScheduledExecutorService getServiceExporterExecutor();\r\n+\r\n+    /**\r\n+     * Get the default shared threadpool.\r\n+     *\r\n+     * @return\r\n+     */\r\n+    ExecutorService getSharedExecutor();\r\n+\r\n+    /**\r\n+     * Destroy all executors that are not in shutdown state\r\n+     */\r\n+    void destroyAll();\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadpool/manager/Ring.java", "source2": "org/apache/dubbo/common/threadpool/manager/Ring.java", "comments": ["Line-ending 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.common.threadpool.manager;\n-\n-import java.util.Collections;\n-import java.util.List;\n-import java.util.concurrent.CopyOnWriteArrayList;\n-import java.util.concurrent.atomic.AtomicInteger;\n-\n-public class Ring<T> {\n-\n-    AtomicInteger count = new AtomicInteger();\n-\n-    private List<T> itemList = new CopyOnWriteArrayList<T>();\n-\n-    public void addItem(T t) {\n-        if (t != null) {\n-            itemList.add(t);\n-        }\n-    }\n-\n-    public T pollItem() {\n-        if (itemList.isEmpty()) {\n-            return null;\n-        }\n-        if (itemList.size() == 1) {\n-            return itemList.get(0);\n-        }\n-\n-        if (count.intValue() > Integer.MAX_VALUE - 10000) {\n-            count.set(count.get() % itemList.size());\n-        }\n-\n-        int index = Math.abs(count.getAndIncrement()) % itemList.size();\n-        return itemList.get(index);\n-    }\n-\n-    public T peekItem() {\n-        if (itemList.isEmpty()) {\n-            return null;\n-        }\n-        if (itemList.size() == 1) {\n-            return itemList.get(0);\n-        }\n-        int index = Math.abs(count.get()) % itemList.size();\n-        return itemList.get(index);\n-    }\n-\n-    public List<T> listItems() {\n-        return Collections.unmodifiableList(itemList);\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.common.threadpool.manager;\r\n+\r\n+import java.util.Collections;\r\n+import java.util.List;\r\n+import java.util.concurrent.CopyOnWriteArrayList;\r\n+import java.util.concurrent.atomic.AtomicInteger;\r\n+\r\n+public class Ring<T> {\r\n+\r\n+    AtomicInteger count = new AtomicInteger();\r\n+\r\n+    private List<T> itemList = new CopyOnWriteArrayList<T>();\r\n+\r\n+    public void addItem(T t) {\r\n+        if (t != null) {\r\n+            itemList.add(t);\r\n+        }\r\n+    }\r\n+\r\n+    public T pollItem() {\r\n+        if (itemList.isEmpty()) {\r\n+            return null;\r\n+        }\r\n+        if (itemList.size() == 1) {\r\n+            return itemList.get(0);\r\n+        }\r\n+\r\n+        if (count.intValue() > Integer.MAX_VALUE - 10000) {\r\n+            count.set(count.get() % itemList.size());\r\n+        }\r\n+\r\n+        int index = Math.abs(count.getAndIncrement()) % itemList.size();\r\n+        return itemList.get(index);\r\n+    }\r\n+\r\n+    public T peekItem() {\r\n+        if (itemList.isEmpty()) {\r\n+            return null;\r\n+        }\r\n+        if (itemList.size() == 1) {\r\n+            return itemList.get(0);\r\n+        }\r\n+        int index = Math.abs(count.get()) % itemList.size();\r\n+        return itemList.get(index);\r\n+    }\r\n+\r\n+    public List<T> listItems() {\r\n+        return Collections.unmodifiableList(itemList);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadpool/support/eager/EagerThreadPool.java", "source2": "org/apache/dubbo/common/threadpool/support/eager/EagerThreadPool.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,65 +1,65 @@\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.common.threadpool.support.eager;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.threadlocal.NamedInternalThreadFactory;\n-import org.apache.dubbo.common.threadpool.ThreadPool;\n-import org.apache.dubbo.common.threadpool.support.AbortPolicyWithReport;\n-\n-import java.util.concurrent.Executor;\n-import java.util.concurrent.TimeUnit;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.ALIVE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.CORE_THREADS_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_ALIVE;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_CORE_THREADS;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_QUEUES;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_THREAD_NAME;\n-import static org.apache.dubbo.common.constants.CommonConstants.QUEUES_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.THREADS_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.THREAD_NAME_KEY;\n-\n-/**\n- * EagerThreadPool\n- * When the core threads are all in busy,\n- * create new thread instead of putting task into blocking queue.\n- */\n-public class EagerThreadPool implements ThreadPool {\n-\n-    @Override\n-    public Executor getExecutor(URL url) {\n-        String name = url.getParameter(THREAD_NAME_KEY, DEFAULT_THREAD_NAME);\n-        int cores = url.getParameter(CORE_THREADS_KEY, DEFAULT_CORE_THREADS);\n-        int threads = url.getParameter(THREADS_KEY, Integer.MAX_VALUE);\n-        int queues = url.getParameter(QUEUES_KEY, DEFAULT_QUEUES);\n-        int alive = url.getParameter(ALIVE_KEY, DEFAULT_ALIVE);\n-\n-        // init queue and executor\n-        TaskQueue<Runnable> taskQueue = new TaskQueue<Runnable>(queues <= 0 ? 1 : queues);\n-        EagerThreadPoolExecutor executor = new EagerThreadPoolExecutor(cores,\n-                threads,\n-                alive,\n-                TimeUnit.MILLISECONDS,\n-                taskQueue,\n-                new NamedInternalThreadFactory(name, true),\n-                new AbortPolicyWithReport(name, url));\n-        taskQueue.setExecutor(executor);\n-        return executor;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+\r\n+package org.apache.dubbo.common.threadpool.support.eager;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.threadlocal.NamedInternalThreadFactory;\r\n+import org.apache.dubbo.common.threadpool.ThreadPool;\r\n+import org.apache.dubbo.common.threadpool.support.AbortPolicyWithReport;\r\n+\r\n+import java.util.concurrent.Executor;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.ALIVE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CORE_THREADS_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_ALIVE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_CORE_THREADS;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_QUEUES;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_THREAD_NAME;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.QUEUES_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.THREADS_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.THREAD_NAME_KEY;\r\n+\r\n+/**\r\n+ * EagerThreadPool\r\n+ * When the core threads are all in busy,\r\n+ * create new thread instead of putting task into blocking queue.\r\n+ */\r\n+public class EagerThreadPool implements ThreadPool {\r\n+\r\n+    @Override\r\n+    public Executor getExecutor(URL url) {\r\n+        String name = url.getParameter(THREAD_NAME_KEY, DEFAULT_THREAD_NAME);\r\n+        int cores = url.getParameter(CORE_THREADS_KEY, DEFAULT_CORE_THREADS);\r\n+        int threads = url.getParameter(THREADS_KEY, Integer.MAX_VALUE);\r\n+        int queues = url.getParameter(QUEUES_KEY, DEFAULT_QUEUES);\r\n+        int alive = url.getParameter(ALIVE_KEY, DEFAULT_ALIVE);\r\n+\r\n+        // init queue and executor\r\n+        TaskQueue<Runnable> taskQueue = new TaskQueue<Runnable>(queues <= 0 ? 1 : queues);\r\n+        EagerThreadPoolExecutor executor = new EagerThreadPoolExecutor(cores,\r\n+                threads,\r\n+                alive,\r\n+                TimeUnit.MILLISECONDS,\r\n+                taskQueue,\r\n+                new NamedInternalThreadFactory(name, true),\r\n+                new AbortPolicyWithReport(name, url));\r\n+        taskQueue.setExecutor(executor);\r\n+        return executor;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/threadpool/support/limited/LimitedThreadPool.java", "source2": "org/apache/dubbo/common/threadpool/support/limited/LimitedThreadPool.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,59 +1,59 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-\n-package org.apache.dubbo.common.threadpool.support.limited;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.threadlocal.NamedInternalThreadFactory;\n-import org.apache.dubbo.common.threadpool.ThreadPool;\n-import org.apache.dubbo.common.threadpool.support.AbortPolicyWithReport;\n-\n-import java.util.concurrent.Executor;\n-import java.util.concurrent.LinkedBlockingQueue;\n-import java.util.concurrent.SynchronousQueue;\n-import java.util.concurrent.ThreadPoolExecutor;\n-import java.util.concurrent.TimeUnit;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.CORE_THREADS_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_CORE_THREADS;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_QUEUES;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_THREADS;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_THREAD_NAME;\n-import static org.apache.dubbo.common.constants.CommonConstants.QUEUES_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.THREADS_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.THREAD_NAME_KEY;\n-\n-/**\n- * Creates a thread pool that creates new threads as needed until limits reaches. This thread pool will not shrink\n- * automatically.\n- */\n-public class LimitedThreadPool implements ThreadPool {\n-\n-    @Override\n-    public Executor getExecutor(URL url) {\n-        String name = url.getParameter(THREAD_NAME_KEY, DEFAULT_THREAD_NAME);\n-        int cores = url.getParameter(CORE_THREADS_KEY, DEFAULT_CORE_THREADS);\n-        int threads = url.getParameter(THREADS_KEY, DEFAULT_THREADS);\n-        int queues = url.getParameter(QUEUES_KEY, DEFAULT_QUEUES);\n-        return new ThreadPoolExecutor(cores, threads, Long.MAX_VALUE, TimeUnit.MILLISECONDS,\n-                queues == 0 ? new SynchronousQueue<Runnable>() :\n-                        (queues < 0 ? new LinkedBlockingQueue<Runnable>()\n-                                : new LinkedBlockingQueue<Runnable>(queues)),\n-                new NamedInternalThreadFactory(name, true), new AbortPolicyWithReport(name, url));\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+\r\n+package org.apache.dubbo.common.threadpool.support.limited;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.threadlocal.NamedInternalThreadFactory;\r\n+import org.apache.dubbo.common.threadpool.ThreadPool;\r\n+import org.apache.dubbo.common.threadpool.support.AbortPolicyWithReport;\r\n+\r\n+import java.util.concurrent.Executor;\r\n+import java.util.concurrent.LinkedBlockingQueue;\r\n+import java.util.concurrent.SynchronousQueue;\r\n+import java.util.concurrent.ThreadPoolExecutor;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CORE_THREADS_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_CORE_THREADS;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_QUEUES;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_THREADS;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_THREAD_NAME;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.QUEUES_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.THREADS_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.THREAD_NAME_KEY;\r\n+\r\n+/**\r\n+ * Creates a thread pool that creates new threads as needed until limits reaches. This thread pool will not shrink\r\n+ * automatically.\r\n+ */\r\n+public class LimitedThreadPool implements ThreadPool {\r\n+\r\n+    @Override\r\n+    public Executor getExecutor(URL url) {\r\n+        String name = url.getParameter(THREAD_NAME_KEY, DEFAULT_THREAD_NAME);\r\n+        int cores = url.getParameter(CORE_THREADS_KEY, DEFAULT_CORE_THREADS);\r\n+        int threads = url.getParameter(THREADS_KEY, DEFAULT_THREADS);\r\n+        int queues = url.getParameter(QUEUES_KEY, DEFAULT_QUEUES);\r\n+        return new ThreadPoolExecutor(cores, threads, Long.MAX_VALUE, TimeUnit.MILLISECONDS,\r\n+                queues == 0 ? new SynchronousQueue<Runnable>() :\r\n+                        (queues < 0 ? new LinkedBlockingQueue<Runnable>()\r\n+                                : new LinkedBlockingQueue<Runnable>(queues)),\r\n+                new NamedInternalThreadFactory(name, true), new AbortPolicyWithReport(name, url));\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/timer/HashedWheelTimer.java", "source2": "org/apache/dubbo/common/timer/HashedWheelTimer.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,814 +1,814 @@\n-/*\n- * Copyright 2012 The Netty Project\n- *\n- * The Netty Project licenses this file to you under the Apache License,\n- * version 2.0 (the \"License\"); you may not use this file except in compliance\n- * with 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, WITHOUT\n- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n- * License for the specific language governing permissions and limitations\n- * under the License.\n- */\n-\n-package org.apache.dubbo.common.timer;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ClassUtils;\n-\n-import java.util.Collections;\n-import java.util.HashSet;\n-import java.util.Locale;\n-import java.util.Queue;\n-import java.util.Set;\n-import java.util.concurrent.CountDownLatch;\n-import java.util.concurrent.Executors;\n-import java.util.concurrent.LinkedBlockingQueue;\n-import java.util.concurrent.RejectedExecutionException;\n-import java.util.concurrent.ThreadFactory;\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.AtomicIntegerFieldUpdater;\n-import java.util.concurrent.atomic.AtomicLong;\n-\n-/**\n- * A {@link Timer} optimized for approximated I/O timeout scheduling.\n- *\n- * <h3>Tick Duration</h3>\n- * <p>\n- * As described with 'approximated', this timer does not execute the scheduled\n- * {@link TimerTask} on time.  {@link HashedWheelTimer}, on every tick, will\n- * check if there are any {@link TimerTask}s behind the schedule and execute\n- * them.\n- * <p>\n- * You can increase or decrease the accuracy of the execution timing by\n- * specifying smaller or larger tick duration in the constructor.  In most\n- * network applications, I/O timeout does not need to be accurate.  Therefore,\n- * the default tick duration is 100 milliseconds and you will not need to try\n- * different configurations in most cases.\n- *\n- * <h3>Ticks per Wheel (Wheel Size)</h3>\n- * <p>\n- * {@link HashedWheelTimer} maintains a data structure called 'wheel'.\n- * To put simply, a wheel is a hash table of {@link TimerTask}s whose hash\n- * function is 'dead line of the task'.  The default number of ticks per wheel\n- * (i.e. the size of the wheel) is 512.  You could specify a larger value\n- * if you are going to schedule a lot of timeouts.\n- *\n- * <h3>Do not create many instances.</h3>\n- * <p>\n- * {@link HashedWheelTimer} creates a new thread whenever it is instantiated and\n- * started.  Therefore, you should make sure to create only one instance and\n- * share it across your application.  One of the common mistakes, that makes\n- * your application unresponsive, is to create a new instance for every connection.\n- *\n- * <h3>Implementation Details</h3>\n- * <p>\n- * {@link HashedWheelTimer} is based on\n- * <a href=\"http://cseweb.ucsd.edu/users/varghese/\">George Varghese</a> and\n- * Tony Lauck's paper,\n- * <a href=\"http://cseweb.ucsd.edu/users/varghese/PAPERS/twheel.ps.Z\">'Hashed\n- * and Hierarchical Timing Wheels: data structures to efficiently implement a\n- * timer facility'</a>.  More comprehensive slides are located\n- * <a href=\"http://www.cse.wustl.edu/~cdgill/courses/cs6874/TimingWheels.ppt\">here</a>.\n- */\n-public class HashedWheelTimer implements Timer {\n-\n-    /**\n-     * may be in spi?\n-     */\n-    public static final String NAME = \"hased\";\n-\n-    private static final Logger logger = LoggerFactory.getLogger(HashedWheelTimer.class);\n-\n-    private static final AtomicInteger INSTANCE_COUNTER = new AtomicInteger();\n-    private static final AtomicBoolean WARNED_TOO_MANY_INSTANCES = new AtomicBoolean();\n-    private static final int INSTANCE_COUNT_LIMIT = 64;\n-    private static final AtomicIntegerFieldUpdater<HashedWheelTimer> WORKER_STATE_UPDATER =\n-            AtomicIntegerFieldUpdater.newUpdater(HashedWheelTimer.class, \"workerState\");\n-\n-    private final Worker worker = new Worker();\n-    private final Thread workerThread;\n-\n-    private static final int WORKER_STATE_INIT = 0;\n-    private static final int WORKER_STATE_STARTED = 1;\n-    private static final int WORKER_STATE_SHUTDOWN = 2;\n-\n-    /**\n-     * 0 - init, 1 - started, 2 - shut down\n-     */\n-    @SuppressWarnings({\"unused\", \"FieldMayBeFinal\"})\n-    private volatile int workerState;\n-\n-    private final long tickDuration;\n-    private final HashedWheelBucket[] wheel;\n-    private final int mask;\n-    private final CountDownLatch startTimeInitialized = new CountDownLatch(1);\n-    private final Queue<HashedWheelTimeout> timeouts = new LinkedBlockingQueue<>();\n-    private final Queue<HashedWheelTimeout> cancelledTimeouts = new LinkedBlockingQueue<>();\n-    private final AtomicLong pendingTimeouts = new AtomicLong(0);\n-    private final long maxPendingTimeouts;\n-\n-    private volatile long startTime;\n-\n-    /**\n-     * Creates a new timer with the default thread factory\n-     * ({@link Executors#defaultThreadFactory()}), default tick duration, and\n-     * default number of ticks per wheel.\n-     */\n-    public HashedWheelTimer() {\n-        this(Executors.defaultThreadFactory());\n-    }\n-\n-    /**\n-     * Creates a new timer with the default thread factory\n-     * ({@link Executors#defaultThreadFactory()}) and default number of ticks\n-     * per wheel.\n-     *\n-     * @param tickDuration the duration between tick\n-     * @param unit         the time unit of the {@code tickDuration}\n-     * @throws NullPointerException     if {@code unit} is {@code null}\n-     * @throws IllegalArgumentException if {@code tickDuration} is &lt;= 0\n-     */\n-    public HashedWheelTimer(long tickDuration, TimeUnit unit) {\n-        this(Executors.defaultThreadFactory(), tickDuration, unit);\n-    }\n-\n-    /**\n-     * Creates a new timer with the default thread factory\n-     * ({@link Executors#defaultThreadFactory()}).\n-     *\n-     * @param tickDuration  the duration between tick\n-     * @param unit          the time unit of the {@code tickDuration}\n-     * @param ticksPerWheel the size of the wheel\n-     * @throws NullPointerException     if {@code unit} is {@code null}\n-     * @throws IllegalArgumentException if either of {@code tickDuration} and {@code ticksPerWheel} is &lt;= 0\n-     */\n-    public HashedWheelTimer(long tickDuration, TimeUnit unit, int ticksPerWheel) {\n-        this(Executors.defaultThreadFactory(), tickDuration, unit, ticksPerWheel);\n-    }\n-\n-    /**\n-     * Creates a new timer with the default tick duration and default number of\n-     * ticks per wheel.\n-     *\n-     * @param threadFactory a {@link ThreadFactory} that creates a\n-     *                      background {@link Thread} which is dedicated to\n-     *                      {@link TimerTask} execution.\n-     * @throws NullPointerException if {@code threadFactory} is {@code null}\n-     */\n-    public HashedWheelTimer(ThreadFactory threadFactory) {\n-        this(threadFactory, 100, TimeUnit.MILLISECONDS);\n-    }\n-\n-    /**\n-     * Creates a new timer with the default number of ticks per wheel.\n-     *\n-     * @param threadFactory a {@link ThreadFactory} that creates a\n-     *                      background {@link Thread} which is dedicated to\n-     *                      {@link TimerTask} execution.\n-     * @param tickDuration  the duration between tick\n-     * @param unit          the time unit of the {@code tickDuration}\n-     * @throws NullPointerException     if either of {@code threadFactory} and {@code unit} is {@code null}\n-     * @throws IllegalArgumentException if {@code tickDuration} is &lt;= 0\n-     */\n-    public HashedWheelTimer(\n-            ThreadFactory threadFactory, long tickDuration, TimeUnit unit) {\n-        this(threadFactory, tickDuration, unit, 512);\n-    }\n-\n-    /**\n-     * Creates a new timer.\n-     *\n-     * @param threadFactory a {@link ThreadFactory} that creates a\n-     *                      background {@link Thread} which is dedicated to\n-     *                      {@link TimerTask} execution.\n-     * @param tickDuration  the duration between tick\n-     * @param unit          the time unit of the {@code tickDuration}\n-     * @param ticksPerWheel the size of the wheel\n-     * @throws NullPointerException     if either of {@code threadFactory} and {@code unit} is {@code null}\n-     * @throws IllegalArgumentException if either of {@code tickDuration} and {@code ticksPerWheel} is &lt;= 0\n-     */\n-    public HashedWheelTimer(\n-            ThreadFactory threadFactory,\n-            long tickDuration, TimeUnit unit, int ticksPerWheel) {\n-        this(threadFactory, tickDuration, unit, ticksPerWheel, -1);\n-    }\n-\n-    /**\n-     * Creates a new timer.\n-     *\n-     * @param threadFactory      a {@link ThreadFactory} that creates a\n-     *                           background {@link Thread} which is dedicated to\n-     *                           {@link TimerTask} execution.\n-     * @param tickDuration       the duration between tick\n-     * @param unit               the time unit of the {@code tickDuration}\n-     * @param ticksPerWheel      the size of the wheel\n-     * @param maxPendingTimeouts The maximum number of pending timeouts after which call to\n-     *                           {@code newTimeout} will result in\n-     *                           {@link java.util.concurrent.RejectedExecutionException}\n-     *                           being thrown. No maximum pending timeouts limit is assumed if\n-     *                           this value is 0 or negative.\n-     * @throws NullPointerException     if either of {@code threadFactory} and {@code unit} is {@code null}\n-     * @throws IllegalArgumentException if either of {@code tickDuration} and {@code ticksPerWheel} is &lt;= 0\n-     */\n-    public HashedWheelTimer(\n-            ThreadFactory threadFactory,\n-            long tickDuration, TimeUnit unit, int ticksPerWheel,\n-            long maxPendingTimeouts) {\n-\n-        if (threadFactory == null) {\n-            throw new NullPointerException(\"threadFactory\");\n-        }\n-        if (unit == null) {\n-            throw new NullPointerException(\"unit\");\n-        }\n-        if (tickDuration <= 0) {\n-            throw new IllegalArgumentException(\"tickDuration must be greater than 0: \" + tickDuration);\n-        }\n-        if (ticksPerWheel <= 0) {\n-            throw new IllegalArgumentException(\"ticksPerWheel must be greater than 0: \" + ticksPerWheel);\n-        }\n-\n-        // Normalize ticksPerWheel to power of two and initialize the wheel.\n-        wheel = createWheel(ticksPerWheel);\n-        mask = wheel.length - 1;\n-\n-        // Convert tickDuration to nanos.\n-        this.tickDuration = unit.toNanos(tickDuration);\n-\n-        // Prevent overflow.\n-        if (this.tickDuration >= Long.MAX_VALUE / wheel.length) {\n-            throw new IllegalArgumentException(String.format(\n-                    \"tickDuration: %d (expected: 0 < tickDuration in nanos < %d\",\n-                    tickDuration, Long.MAX_VALUE / wheel.length));\n-        }\n-        workerThread = threadFactory.newThread(worker);\n-\n-        this.maxPendingTimeouts = maxPendingTimeouts;\n-\n-        if (INSTANCE_COUNTER.incrementAndGet() > INSTANCE_COUNT_LIMIT &&\n-                WARNED_TOO_MANY_INSTANCES.compareAndSet(false, true)) {\n-            reportTooManyInstances();\n-        }\n-    }\n-\n-    @Override\n-    protected void finalize() throws Throwable {\n-        try {\n-            super.finalize();\n-        } finally {\n-            // This object is going to be GCed and it is assumed the ship has sailed to do a proper shutdown. If\n-            // we have not yet shutdown then we want to make sure we decrement the active instance count.\n-            if (WORKER_STATE_UPDATER.getAndSet(this, WORKER_STATE_SHUTDOWN) != WORKER_STATE_SHUTDOWN) {\n-                INSTANCE_COUNTER.decrementAndGet();\n-            }\n-        }\n-    }\n-\n-    private static HashedWheelBucket[] createWheel(int ticksPerWheel) {\n-        if (ticksPerWheel <= 0) {\n-            throw new IllegalArgumentException(\n-                    \"ticksPerWheel must be greater than 0: \" + ticksPerWheel);\n-        }\n-        if (ticksPerWheel > 1073741824) {\n-            throw new IllegalArgumentException(\n-                    \"ticksPerWheel may not be greater than 2^30: \" + ticksPerWheel);\n-        }\n-\n-        ticksPerWheel = normalizeTicksPerWheel(ticksPerWheel);\n-        HashedWheelBucket[] wheel = new HashedWheelBucket[ticksPerWheel];\n-        for (int i = 0; i < wheel.length; i++) {\n-            wheel[i] = new HashedWheelBucket();\n-        }\n-        return wheel;\n-    }\n-\n-    private static int normalizeTicksPerWheel(int ticksPerWheel) {\n-        int normalizedTicksPerWheel = ticksPerWheel - 1;\n-        normalizedTicksPerWheel |= normalizedTicksPerWheel >>> 1;\n-        normalizedTicksPerWheel |= normalizedTicksPerWheel >>> 2;\n-        normalizedTicksPerWheel |= normalizedTicksPerWheel >>> 4;\n-        normalizedTicksPerWheel |= normalizedTicksPerWheel >>> 8;\n-        normalizedTicksPerWheel |= normalizedTicksPerWheel >>> 16;\n-        return normalizedTicksPerWheel + 1;\n-    }\n-\n-    /**\n-     * Starts the background thread explicitly.  The background thread will\n-     * start automatically on demand even if you did not call this method.\n-     *\n-     * @throws IllegalStateException if this timer has been\n-     *                               {@linkplain #stop() stopped} already\n-     */\n-    public void start() {\n-        switch (WORKER_STATE_UPDATER.get(this)) {\n-            case WORKER_STATE_INIT:\n-                if (WORKER_STATE_UPDATER.compareAndSet(this, WORKER_STATE_INIT, WORKER_STATE_STARTED)) {\n-                    workerThread.start();\n-                }\n-                break;\n-            case WORKER_STATE_STARTED:\n-                break;\n-            case WORKER_STATE_SHUTDOWN:\n-                throw new IllegalStateException(\"cannot be started once stopped\");\n-            default:\n-                throw new Error(\"Invalid WorkerState\");\n-        }\n-\n-        // Wait until the startTime is initialized by the worker.\n-        while (startTime == 0) {\n-            try {\n-                startTimeInitialized.await();\n-            } catch (InterruptedException ignore) {\n-                // Ignore - it will be ready very soon.\n-            }\n-        }\n-    }\n-\n-    @Override\n-    public Set<Timeout> stop() {\n-        if (Thread.currentThread() == workerThread) {\n-            throw new IllegalStateException(\n-                    HashedWheelTimer.class.getSimpleName() +\n-                            \".stop() cannot be called from \" +\n-                            TimerTask.class.getSimpleName());\n-        }\n-\n-        if (!WORKER_STATE_UPDATER.compareAndSet(this, WORKER_STATE_STARTED, WORKER_STATE_SHUTDOWN)) {\n-            // workerState can be 0 or 2 at this moment - let it always be 2.\n-            if (WORKER_STATE_UPDATER.getAndSet(this, WORKER_STATE_SHUTDOWN) != WORKER_STATE_SHUTDOWN) {\n-                INSTANCE_COUNTER.decrementAndGet();\n-            }\n-\n-            return Collections.emptySet();\n-        }\n-\n-        try {\n-            boolean interrupted = false;\n-            while (workerThread.isAlive()) {\n-                workerThread.interrupt();\n-                try {\n-                    workerThread.join(100);\n-                } catch (InterruptedException ignored) {\n-                    interrupted = true;\n-                }\n-            }\n-\n-            if (interrupted) {\n-                Thread.currentThread().interrupt();\n-            }\n-        } finally {\n-            INSTANCE_COUNTER.decrementAndGet();\n-        }\n-        return worker.unprocessedTimeouts();\n-    }\n-\n-    @Override\n-    public boolean isStop() {\n-        return WORKER_STATE_SHUTDOWN == WORKER_STATE_UPDATER.get(this);\n-    }\n-\n-    @Override\n-    public Timeout newTimeout(TimerTask task, long delay, TimeUnit unit) {\n-        if (task == null) {\n-            throw new NullPointerException(\"task\");\n-        }\n-        if (unit == null) {\n-            throw new NullPointerException(\"unit\");\n-        }\n-\n-        long pendingTimeoutsCount = pendingTimeouts.incrementAndGet();\n-\n-        if (maxPendingTimeouts > 0 && pendingTimeoutsCount > maxPendingTimeouts) {\n-            pendingTimeouts.decrementAndGet();\n-            throw new RejectedExecutionException(\"Number of pending timeouts (\"\n-                    + pendingTimeoutsCount + \") is greater than or equal to maximum allowed pending \"\n-                    + \"timeouts (\" + maxPendingTimeouts + \")\");\n-        }\n-\n-        start();\n-\n-        // Add the timeout to the timeout queue which will be processed on the next tick.\n-        // During processing all the queued HashedWheelTimeouts will be added to the correct HashedWheelBucket.\n-        long deadline = System.nanoTime() + unit.toNanos(delay) - startTime;\n-\n-        // Guard against overflow.\n-        if (delay > 0 && deadline < 0) {\n-            deadline = Long.MAX_VALUE;\n-        }\n-        HashedWheelTimeout timeout = new HashedWheelTimeout(this, task, deadline);\n-        timeouts.add(timeout);\n-        return timeout;\n-    }\n-\n-    /**\n-     * Returns the number of pending timeouts of this {@link Timer}.\n-     */\n-    public long pendingTimeouts() {\n-        return pendingTimeouts.get();\n-    }\n-\n-    private static void reportTooManyInstances() {\n-        String resourceType = ClassUtils.simpleClassName(HashedWheelTimer.class);\n-        logger.error(\"You are creating too many \" + resourceType + \" instances. \" +\n-                resourceType + \" is a shared resource that must be reused across the JVM,\" +\n-                \"so that only a few instances are created.\");\n-    }\n-\n-    private final class Worker implements Runnable {\n-        private final Set<Timeout> unprocessedTimeouts = new HashSet<Timeout>();\n-\n-        private long tick;\n-\n-        @Override\n-        public void run() {\n-            // Initialize the startTime.\n-            startTime = System.nanoTime();\n-            if (startTime == 0) {\n-                // We use 0 as an indicator for the uninitialized value here, so make sure it's not 0 when initialized.\n-                startTime = 1;\n-            }\n-\n-            // Notify the other threads waiting for the initialization at start().\n-            startTimeInitialized.countDown();\n-\n-            do {\n-                final long deadline = waitForNextTick();\n-                if (deadline > 0) {\n-                    int idx = (int) (tick & mask);\n-                    processCancelledTasks();\n-                    HashedWheelBucket bucket =\n-                            wheel[idx];\n-                    transferTimeoutsToBuckets();\n-                    bucket.expireTimeouts(deadline);\n-                    tick++;\n-                }\n-            } while (WORKER_STATE_UPDATER.get(HashedWheelTimer.this) == WORKER_STATE_STARTED);\n-\n-            // Fill the unprocessedTimeouts so we can return them from stop() method.\n-            for (HashedWheelBucket bucket : wheel) {\n-                bucket.clearTimeouts(unprocessedTimeouts);\n-            }\n-            for (; ; ) {\n-                HashedWheelTimeout timeout = timeouts.poll();\n-                if (timeout == null) {\n-                    break;\n-                }\n-                if (!timeout.isCancelled()) {\n-                    unprocessedTimeouts.add(timeout);\n-                }\n-            }\n-            processCancelledTasks();\n-        }\n-\n-        private void transferTimeoutsToBuckets() {\n-            // transfer only max. 100000 timeouts per tick to prevent a thread to stale the workerThread when it just\n-            // adds new timeouts in a loop.\n-            for (int i = 0; i < 100000; i++) {\n-                HashedWheelTimeout timeout = timeouts.poll();\n-                if (timeout == null) {\n-                    // all processed\n-                    break;\n-                }\n-                if (timeout.state() == HashedWheelTimeout.ST_CANCELLED) {\n-                    // Was cancelled in the meantime.\n-                    continue;\n-                }\n-\n-                long calculated = timeout.deadline / tickDuration;\n-                timeout.remainingRounds = (calculated - tick) / wheel.length;\n-\n-                // Ensure we don't schedule for past.\n-                final long ticks = Math.max(calculated, tick);\n-                int stopIndex = (int) (ticks & mask);\n-\n-                HashedWheelBucket bucket = wheel[stopIndex];\n-                bucket.addTimeout(timeout);\n-            }\n-        }\n-\n-        private void processCancelledTasks() {\n-            for (; ; ) {\n-                HashedWheelTimeout timeout = cancelledTimeouts.poll();\n-                if (timeout == null) {\n-                    // all processed\n-                    break;\n-                }\n-                try {\n-                    timeout.remove();\n-                } catch (Throwable t) {\n-                    if (logger.isWarnEnabled()) {\n-                        logger.warn(\"An exception was thrown while process a cancellation task\", t);\n-                    }\n-                }\n-            }\n-        }\n-\n-        /**\n-         * calculate goal nanoTime from startTime and current tick number,\n-         * then wait until that goal has been reached.\n-         *\n-         * @return Long.MIN_VALUE if received a shutdown request,\n-         * current time otherwise (with Long.MIN_VALUE changed by +1)\n-         */\n-        private long waitForNextTick() {\n-            long deadline = tickDuration * (tick + 1);\n-\n-            for (; ; ) {\n-                final long currentTime = System.nanoTime() - startTime;\n-                long sleepTimeMs = (deadline - currentTime + 999999) / 1000000;\n-\n-                if (sleepTimeMs <= 0) {\n-                    if (currentTime == Long.MIN_VALUE) {\n-                        return -Long.MAX_VALUE;\n-                    } else {\n-                        return currentTime;\n-                    }\n-                }\n-                if (isWindows()) {\n-                    sleepTimeMs = sleepTimeMs / 10 * 10;\n-                }\n-\n-                try {\n-                    Thread.sleep(sleepTimeMs);\n-                } catch (InterruptedException ignored) {\n-                    if (WORKER_STATE_UPDATER.get(HashedWheelTimer.this) == WORKER_STATE_SHUTDOWN) {\n-                        return Long.MIN_VALUE;\n-                    }\n-                }\n-            }\n-        }\n-\n-        Set<Timeout> unprocessedTimeouts() {\n-            return Collections.unmodifiableSet(unprocessedTimeouts);\n-        }\n-    }\n-\n-    private static final class HashedWheelTimeout implements Timeout {\n-\n-        private static final int ST_INIT = 0;\n-        private static final int ST_CANCELLED = 1;\n-        private static final int ST_EXPIRED = 2;\n-        private static final AtomicIntegerFieldUpdater<HashedWheelTimeout> STATE_UPDATER =\n-                AtomicIntegerFieldUpdater.newUpdater(HashedWheelTimeout.class, \"state\");\n-\n-        private final HashedWheelTimer timer;\n-        private final TimerTask task;\n-        private final long deadline;\n-\n-        @SuppressWarnings({\"unused\", \"FieldMayBeFinal\", \"RedundantFieldInitialization\"})\n-        private volatile int state = ST_INIT;\n-\n-        /**\n-         * RemainingRounds will be calculated and set by Worker.transferTimeoutsToBuckets() before the\n-         * HashedWheelTimeout will be added to the correct HashedWheelBucket.\n-         */\n-        long remainingRounds;\n-\n-        /**\n-         * This will be used to chain timeouts in HashedWheelTimerBucket via a double-linked-list.\n-         * As only the workerThread will act on it there is no need for synchronization / volatile.\n-         */\n-        HashedWheelTimeout next;\n-        HashedWheelTimeout prev;\n-\n-        /**\n-         * The bucket to which the timeout was added\n-         */\n-        HashedWheelBucket bucket;\n-\n-        HashedWheelTimeout(HashedWheelTimer timer, TimerTask task, long deadline) {\n-            this.timer = timer;\n-            this.task = task;\n-            this.deadline = deadline;\n-        }\n-\n-        @Override\n-        public Timer timer() {\n-            return timer;\n-        }\n-\n-        @Override\n-        public TimerTask task() {\n-            return task;\n-        }\n-\n-        @Override\n-        public boolean cancel() {\n-            // only update the state it will be removed from HashedWheelBucket on next tick.\n-            if (!compareAndSetState(ST_INIT, ST_CANCELLED)) {\n-                return false;\n-            }\n-            // If a task should be canceled we put this to another queue which will be processed on each tick.\n-            // So this means that we will have a GC latency of max. 1 tick duration which is good enough. This way\n-            // we can make again use of our MpscLinkedQueue and so minimize the locking / overhead as much as possible.\n-            timer.cancelledTimeouts.add(this);\n-            return true;\n-        }\n-\n-        void remove() {\n-            HashedWheelBucket bucket = this.bucket;\n-            if (bucket != null) {\n-                bucket.remove(this);\n-            } else {\n-                timer.pendingTimeouts.decrementAndGet();\n-            }\n-        }\n-\n-        public boolean compareAndSetState(int expected, int state) {\n-            return STATE_UPDATER.compareAndSet(this, expected, state);\n-        }\n-\n-        public int state() {\n-            return state;\n-        }\n-\n-        @Override\n-        public boolean isCancelled() {\n-            return state() == ST_CANCELLED;\n-        }\n-\n-        @Override\n-        public boolean isExpired() {\n-            return state() == ST_EXPIRED;\n-        }\n-\n-        public void expire() {\n-            if (!compareAndSetState(ST_INIT, ST_EXPIRED)) {\n-                return;\n-            }\n-\n-            try {\n-                task.run(this);\n-            } catch (Throwable t) {\n-                if (logger.isWarnEnabled()) {\n-                    logger.warn(\"An exception was thrown by \" + TimerTask.class.getSimpleName() + '.', t);\n-                }\n-            }\n-        }\n-\n-        @Override\n-        public String toString() {\n-            final long currentTime = System.nanoTime();\n-            long remaining = deadline - currentTime + timer.startTime;\n-            String simpleClassName = ClassUtils.simpleClassName(this.getClass());\n-\n-            StringBuilder buf = new StringBuilder(192)\n-                    .append(simpleClassName)\n-                    .append('(')\n-                    .append(\"deadline: \");\n-            if (remaining > 0) {\n-                buf.append(remaining)\n-                        .append(\" ns later\");\n-            } else if (remaining < 0) {\n-                buf.append(-remaining)\n-                        .append(\" ns ago\");\n-            } else {\n-                buf.append(\"now\");\n-            }\n-\n-            if (isCancelled()) {\n-                buf.append(\", cancelled\");\n-            }\n-\n-            return buf.append(\", task: \")\n-                    .append(task())\n-                    .append(')')\n-                    .toString();\n-        }\n-    }\n-\n-    /**\n-     * Bucket that stores HashedWheelTimeouts. These are stored in a linked-list like datastructure to allow easy\n-     * removal of HashedWheelTimeouts in the middle. Also the HashedWheelTimeout act as nodes themself and so no\n-     * extra object creation is needed.\n-     */\n-    private static final class HashedWheelBucket {\n-\n-        /**\n-         * Used for the linked-list datastructure\n-         */\n-        private HashedWheelTimeout head;\n-        private HashedWheelTimeout tail;\n-\n-        /**\n-         * Add {@link HashedWheelTimeout} to this bucket.\n-         */\n-        void addTimeout(HashedWheelTimeout timeout) {\n-            assert timeout.bucket == null;\n-            timeout.bucket = this;\n-            if (head == null) {\n-                head = tail = timeout;\n-            } else {\n-                tail.next = timeout;\n-                timeout.prev = tail;\n-                tail = timeout;\n-            }\n-        }\n-\n-        /**\n-         * Expire all {@link HashedWheelTimeout}s for the given {@code deadline}.\n-         */\n-        void expireTimeouts(long deadline) {\n-            HashedWheelTimeout timeout = head;\n-\n-            // process all timeouts\n-            while (timeout != null) {\n-                HashedWheelTimeout next = timeout.next;\n-                if (timeout.remainingRounds <= 0) {\n-                    next = remove(timeout);\n-                    if (timeout.deadline <= deadline) {\n-                        timeout.expire();\n-                    } else {\n-                        // The timeout was placed into a wrong slot. This should never happen.\n-                        throw new IllegalStateException(String.format(\n-                                \"timeout.deadline (%d) > deadline (%d)\", timeout.deadline, deadline));\n-                    }\n-                } else if (timeout.isCancelled()) {\n-                    next = remove(timeout);\n-                } else {\n-                    timeout.remainingRounds--;\n-                }\n-                timeout = next;\n-            }\n-        }\n-\n-        public HashedWheelTimeout remove(HashedWheelTimeout timeout) {\n-            HashedWheelTimeout next = timeout.next;\n-            // remove timeout that was either processed or cancelled by updating the linked-list\n-            if (timeout.prev != null) {\n-                timeout.prev.next = next;\n-            }\n-            if (timeout.next != null) {\n-                timeout.next.prev = timeout.prev;\n-            }\n-\n-            if (timeout == head) {\n-                // if timeout is also the tail we need to adjust the entry too\n-                if (timeout == tail) {\n-                    tail = null;\n-                    head = null;\n-                } else {\n-                    head = next;\n-                }\n-            } else if (timeout == tail) {\n-                // if the timeout is the tail modify the tail to be the prev node.\n-                tail = timeout.prev;\n-            }\n-            // null out prev, next and bucket to allow for GC.\n-            timeout.prev = null;\n-            timeout.next = null;\n-            timeout.bucket = null;\n-            timeout.timer.pendingTimeouts.decrementAndGet();\n-            return next;\n-        }\n-\n-        /**\n-         * Clear this bucket and return all not expired / cancelled {@link Timeout}s.\n-         */\n-        void clearTimeouts(Set<Timeout> set) {\n-            for (; ; ) {\n-                HashedWheelTimeout timeout = pollTimeout();\n-                if (timeout == null) {\n-                    return;\n-                }\n-                if (timeout.isExpired() || timeout.isCancelled()) {\n-                    continue;\n-                }\n-                set.add(timeout);\n-            }\n-        }\n-\n-        private HashedWheelTimeout pollTimeout() {\n-            HashedWheelTimeout head = this.head;\n-            if (head == null) {\n-                return null;\n-            }\n-            HashedWheelTimeout next = head.next;\n-            if (next == null) {\n-                tail = this.head = null;\n-            } else {\n-                this.head = next;\n-                next.prev = null;\n-            }\n-\n-            // null out prev and next to allow for GC.\n-            head.next = null;\n-            head.prev = null;\n-            head.bucket = null;\n-            return head;\n-        }\n-    }\n-    \n-    private static final boolean IS_OS_WINDOWS = System.getProperty(\"os.name\", \"\").toLowerCase(Locale.US).contains(\"win\");\n-    \n-    private boolean isWindows() {\n-    \treturn IS_OS_WINDOWS;\n-    }\n-}\n+/*\r\n+ * Copyright 2012 The Netty Project\r\n+ *\r\n+ * The Netty Project licenses this file to you under the Apache License,\r\n+ * version 2.0 (the \"License\"); you may not use this file except in compliance\r\n+ * with 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, WITHOUT\r\n+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r\n+ * License for the specific language governing permissions and limitations\r\n+ * under the License.\r\n+ */\r\n+\r\n+package org.apache.dubbo.common.timer;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.ClassUtils;\r\n+\r\n+import java.util.Collections;\r\n+import java.util.HashSet;\r\n+import java.util.Locale;\r\n+import java.util.Queue;\r\n+import java.util.Set;\r\n+import java.util.concurrent.CountDownLatch;\r\n+import java.util.concurrent.Executors;\r\n+import java.util.concurrent.LinkedBlockingQueue;\r\n+import java.util.concurrent.RejectedExecutionException;\r\n+import java.util.concurrent.ThreadFactory;\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.AtomicIntegerFieldUpdater;\r\n+import java.util.concurrent.atomic.AtomicLong;\r\n+\r\n+/**\r\n+ * A {@link Timer} optimized for approximated I/O timeout scheduling.\r\n+ *\r\n+ * <h3>Tick Duration</h3>\r\n+ * <p>\r\n+ * As described with 'approximated', this timer does not execute the scheduled\r\n+ * {@link TimerTask} on time.  {@link HashedWheelTimer}, on every tick, will\r\n+ * check if there are any {@link TimerTask}s behind the schedule and execute\r\n+ * them.\r\n+ * <p>\r\n+ * You can increase or decrease the accuracy of the execution timing by\r\n+ * specifying smaller or larger tick duration in the constructor.  In most\r\n+ * network applications, I/O timeout does not need to be accurate.  Therefore,\r\n+ * the default tick duration is 100 milliseconds and you will not need to try\r\n+ * different configurations in most cases.\r\n+ *\r\n+ * <h3>Ticks per Wheel (Wheel Size)</h3>\r\n+ * <p>\r\n+ * {@link HashedWheelTimer} maintains a data structure called 'wheel'.\r\n+ * To put simply, a wheel is a hash table of {@link TimerTask}s whose hash\r\n+ * function is 'dead line of the task'.  The default number of ticks per wheel\r\n+ * (i.e. the size of the wheel) is 512.  You could specify a larger value\r\n+ * if you are going to schedule a lot of timeouts.\r\n+ *\r\n+ * <h3>Do not create many instances.</h3>\r\n+ * <p>\r\n+ * {@link HashedWheelTimer} creates a new thread whenever it is instantiated and\r\n+ * started.  Therefore, you should make sure to create only one instance and\r\n+ * share it across your application.  One of the common mistakes, that makes\r\n+ * your application unresponsive, is to create a new instance for every connection.\r\n+ *\r\n+ * <h3>Implementation Details</h3>\r\n+ * <p>\r\n+ * {@link HashedWheelTimer} is based on\r\n+ * <a href=\"http://cseweb.ucsd.edu/users/varghese/\">George Varghese</a> and\r\n+ * Tony Lauck's paper,\r\n+ * <a href=\"http://cseweb.ucsd.edu/users/varghese/PAPERS/twheel.ps.Z\">'Hashed\r\n+ * and Hierarchical Timing Wheels: data structures to efficiently implement a\r\n+ * timer facility'</a>.  More comprehensive slides are located\r\n+ * <a href=\"http://www.cse.wustl.edu/~cdgill/courses/cs6874/TimingWheels.ppt\">here</a>.\r\n+ */\r\n+public class HashedWheelTimer implements Timer {\r\n+\r\n+    /**\r\n+     * may be in spi?\r\n+     */\r\n+    public static final String NAME = \"hased\";\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(HashedWheelTimer.class);\r\n+\r\n+    private static final AtomicInteger INSTANCE_COUNTER = new AtomicInteger();\r\n+    private static final AtomicBoolean WARNED_TOO_MANY_INSTANCES = new AtomicBoolean();\r\n+    private static final int INSTANCE_COUNT_LIMIT = 64;\r\n+    private static final AtomicIntegerFieldUpdater<HashedWheelTimer> WORKER_STATE_UPDATER =\r\n+            AtomicIntegerFieldUpdater.newUpdater(HashedWheelTimer.class, \"workerState\");\r\n+\r\n+    private final Worker worker = new Worker();\r\n+    private final Thread workerThread;\r\n+\r\n+    private static final int WORKER_STATE_INIT = 0;\r\n+    private static final int WORKER_STATE_STARTED = 1;\r\n+    private static final int WORKER_STATE_SHUTDOWN = 2;\r\n+\r\n+    /**\r\n+     * 0 - init, 1 - started, 2 - shut down\r\n+     */\r\n+    @SuppressWarnings({\"unused\", \"FieldMayBeFinal\"})\r\n+    private volatile int workerState;\r\n+\r\n+    private final long tickDuration;\r\n+    private final HashedWheelBucket[] wheel;\r\n+    private final int mask;\r\n+    private final CountDownLatch startTimeInitialized = new CountDownLatch(1);\r\n+    private final Queue<HashedWheelTimeout> timeouts = new LinkedBlockingQueue<>();\r\n+    private final Queue<HashedWheelTimeout> cancelledTimeouts = new LinkedBlockingQueue<>();\r\n+    private final AtomicLong pendingTimeouts = new AtomicLong(0);\r\n+    private final long maxPendingTimeouts;\r\n+\r\n+    private volatile long startTime;\r\n+\r\n+    /**\r\n+     * Creates a new timer with the default thread factory\r\n+     * ({@link Executors#defaultThreadFactory()}), default tick duration, and\r\n+     * default number of ticks per wheel.\r\n+     */\r\n+    public HashedWheelTimer() {\r\n+        this(Executors.defaultThreadFactory());\r\n+    }\r\n+\r\n+    /**\r\n+     * Creates a new timer with the default thread factory\r\n+     * ({@link Executors#defaultThreadFactory()}) and default number of ticks\r\n+     * per wheel.\r\n+     *\r\n+     * @param tickDuration the duration between tick\r\n+     * @param unit         the time unit of the {@code tickDuration}\r\n+     * @throws NullPointerException     if {@code unit} is {@code null}\r\n+     * @throws IllegalArgumentException if {@code tickDuration} is &lt;= 0\r\n+     */\r\n+    public HashedWheelTimer(long tickDuration, TimeUnit unit) {\r\n+        this(Executors.defaultThreadFactory(), tickDuration, unit);\r\n+    }\r\n+\r\n+    /**\r\n+     * Creates a new timer with the default thread factory\r\n+     * ({@link Executors#defaultThreadFactory()}).\r\n+     *\r\n+     * @param tickDuration  the duration between tick\r\n+     * @param unit          the time unit of the {@code tickDuration}\r\n+     * @param ticksPerWheel the size of the wheel\r\n+     * @throws NullPointerException     if {@code unit} is {@code null}\r\n+     * @throws IllegalArgumentException if either of {@code tickDuration} and {@code ticksPerWheel} is &lt;= 0\r\n+     */\r\n+    public HashedWheelTimer(long tickDuration, TimeUnit unit, int ticksPerWheel) {\r\n+        this(Executors.defaultThreadFactory(), tickDuration, unit, ticksPerWheel);\r\n+    }\r\n+\r\n+    /**\r\n+     * Creates a new timer with the default tick duration and default number of\r\n+     * ticks per wheel.\r\n+     *\r\n+     * @param threadFactory a {@link ThreadFactory} that creates a\r\n+     *                      background {@link Thread} which is dedicated to\r\n+     *                      {@link TimerTask} execution.\r\n+     * @throws NullPointerException if {@code threadFactory} is {@code null}\r\n+     */\r\n+    public HashedWheelTimer(ThreadFactory threadFactory) {\r\n+        this(threadFactory, 100, TimeUnit.MILLISECONDS);\r\n+    }\r\n+\r\n+    /**\r\n+     * Creates a new timer with the default number of ticks per wheel.\r\n+     *\r\n+     * @param threadFactory a {@link ThreadFactory} that creates a\r\n+     *                      background {@link Thread} which is dedicated to\r\n+     *                      {@link TimerTask} execution.\r\n+     * @param tickDuration  the duration between tick\r\n+     * @param unit          the time unit of the {@code tickDuration}\r\n+     * @throws NullPointerException     if either of {@code threadFactory} and {@code unit} is {@code null}\r\n+     * @throws IllegalArgumentException if {@code tickDuration} is &lt;= 0\r\n+     */\r\n+    public HashedWheelTimer(\r\n+            ThreadFactory threadFactory, long tickDuration, TimeUnit unit) {\r\n+        this(threadFactory, tickDuration, unit, 512);\r\n+    }\r\n+\r\n+    /**\r\n+     * Creates a new timer.\r\n+     *\r\n+     * @param threadFactory a {@link ThreadFactory} that creates a\r\n+     *                      background {@link Thread} which is dedicated to\r\n+     *                      {@link TimerTask} execution.\r\n+     * @param tickDuration  the duration between tick\r\n+     * @param unit          the time unit of the {@code tickDuration}\r\n+     * @param ticksPerWheel the size of the wheel\r\n+     * @throws NullPointerException     if either of {@code threadFactory} and {@code unit} is {@code null}\r\n+     * @throws IllegalArgumentException if either of {@code tickDuration} and {@code ticksPerWheel} is &lt;= 0\r\n+     */\r\n+    public HashedWheelTimer(\r\n+            ThreadFactory threadFactory,\r\n+            long tickDuration, TimeUnit unit, int ticksPerWheel) {\r\n+        this(threadFactory, tickDuration, unit, ticksPerWheel, -1);\r\n+    }\r\n+\r\n+    /**\r\n+     * Creates a new timer.\r\n+     *\r\n+     * @param threadFactory      a {@link ThreadFactory} that creates a\r\n+     *                           background {@link Thread} which is dedicated to\r\n+     *                           {@link TimerTask} execution.\r\n+     * @param tickDuration       the duration between tick\r\n+     * @param unit               the time unit of the {@code tickDuration}\r\n+     * @param ticksPerWheel      the size of the wheel\r\n+     * @param maxPendingTimeouts The maximum number of pending timeouts after which call to\r\n+     *                           {@code newTimeout} will result in\r\n+     *                           {@link java.util.concurrent.RejectedExecutionException}\r\n+     *                           being thrown. No maximum pending timeouts limit is assumed if\r\n+     *                           this value is 0 or negative.\r\n+     * @throws NullPointerException     if either of {@code threadFactory} and {@code unit} is {@code null}\r\n+     * @throws IllegalArgumentException if either of {@code tickDuration} and {@code ticksPerWheel} is &lt;= 0\r\n+     */\r\n+    public HashedWheelTimer(\r\n+            ThreadFactory threadFactory,\r\n+            long tickDuration, TimeUnit unit, int ticksPerWheel,\r\n+            long maxPendingTimeouts) {\r\n+\r\n+        if (threadFactory == null) {\r\n+            throw new NullPointerException(\"threadFactory\");\r\n+        }\r\n+        if (unit == null) {\r\n+            throw new NullPointerException(\"unit\");\r\n+        }\r\n+        if (tickDuration <= 0) {\r\n+            throw new IllegalArgumentException(\"tickDuration must be greater than 0: \" + tickDuration);\r\n+        }\r\n+        if (ticksPerWheel <= 0) {\r\n+            throw new IllegalArgumentException(\"ticksPerWheel must be greater than 0: \" + ticksPerWheel);\r\n+        }\r\n+\r\n+        // Normalize ticksPerWheel to power of two and initialize the wheel.\r\n+        wheel = createWheel(ticksPerWheel);\r\n+        mask = wheel.length - 1;\r\n+\r\n+        // Convert tickDuration to nanos.\r\n+        this.tickDuration = unit.toNanos(tickDuration);\r\n+\r\n+        // Prevent overflow.\r\n+        if (this.tickDuration >= Long.MAX_VALUE / wheel.length) {\r\n+            throw new IllegalArgumentException(String.format(\r\n+                    \"tickDuration: %d (expected: 0 < tickDuration in nanos < %d\",\r\n+                    tickDuration, Long.MAX_VALUE / wheel.length));\r\n+        }\r\n+        workerThread = threadFactory.newThread(worker);\r\n+\r\n+        this.maxPendingTimeouts = maxPendingTimeouts;\r\n+\r\n+        if (INSTANCE_COUNTER.incrementAndGet() > INSTANCE_COUNT_LIMIT &&\r\n+                WARNED_TOO_MANY_INSTANCES.compareAndSet(false, true)) {\r\n+            reportTooManyInstances();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void finalize() throws Throwable {\r\n+        try {\r\n+            super.finalize();\r\n+        } finally {\r\n+            // This object is going to be GCed and it is assumed the ship has sailed to do a proper shutdown. If\r\n+            // we have not yet shutdown then we want to make sure we decrement the active instance count.\r\n+            if (WORKER_STATE_UPDATER.getAndSet(this, WORKER_STATE_SHUTDOWN) != WORKER_STATE_SHUTDOWN) {\r\n+                INSTANCE_COUNTER.decrementAndGet();\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private static HashedWheelBucket[] createWheel(int ticksPerWheel) {\r\n+        if (ticksPerWheel <= 0) {\r\n+            throw new IllegalArgumentException(\r\n+                    \"ticksPerWheel must be greater than 0: \" + ticksPerWheel);\r\n+        }\r\n+        if (ticksPerWheel > 1073741824) {\r\n+            throw new IllegalArgumentException(\r\n+                    \"ticksPerWheel may not be greater than 2^30: \" + ticksPerWheel);\r\n+        }\r\n+\r\n+        ticksPerWheel = normalizeTicksPerWheel(ticksPerWheel);\r\n+        HashedWheelBucket[] wheel = new HashedWheelBucket[ticksPerWheel];\r\n+        for (int i = 0; i < wheel.length; i++) {\r\n+            wheel[i] = new HashedWheelBucket();\r\n+        }\r\n+        return wheel;\r\n+    }\r\n+\r\n+    private static int normalizeTicksPerWheel(int ticksPerWheel) {\r\n+        int normalizedTicksPerWheel = ticksPerWheel - 1;\r\n+        normalizedTicksPerWheel |= normalizedTicksPerWheel >>> 1;\r\n+        normalizedTicksPerWheel |= normalizedTicksPerWheel >>> 2;\r\n+        normalizedTicksPerWheel |= normalizedTicksPerWheel >>> 4;\r\n+        normalizedTicksPerWheel |= normalizedTicksPerWheel >>> 8;\r\n+        normalizedTicksPerWheel |= normalizedTicksPerWheel >>> 16;\r\n+        return normalizedTicksPerWheel + 1;\r\n+    }\r\n+\r\n+    /**\r\n+     * Starts the background thread explicitly.  The background thread will\r\n+     * start automatically on demand even if you did not call this method.\r\n+     *\r\n+     * @throws IllegalStateException if this timer has been\r\n+     *                               {@linkplain #stop() stopped} already\r\n+     */\r\n+    public void start() {\r\n+        switch (WORKER_STATE_UPDATER.get(this)) {\r\n+            case WORKER_STATE_INIT:\r\n+                if (WORKER_STATE_UPDATER.compareAndSet(this, WORKER_STATE_INIT, WORKER_STATE_STARTED)) {\r\n+                    workerThread.start();\r\n+                }\r\n+                break;\r\n+            case WORKER_STATE_STARTED:\r\n+                break;\r\n+            case WORKER_STATE_SHUTDOWN:\r\n+                throw new IllegalStateException(\"cannot be started once stopped\");\r\n+            default:\r\n+                throw new Error(\"Invalid WorkerState\");\r\n+        }\r\n+\r\n+        // Wait until the startTime is initialized by the worker.\r\n+        while (startTime == 0) {\r\n+            try {\r\n+                startTimeInitialized.await();\r\n+            } catch (InterruptedException ignore) {\r\n+                // Ignore - it will be ready very soon.\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public Set<Timeout> stop() {\r\n+        if (Thread.currentThread() == workerThread) {\r\n+            throw new IllegalStateException(\r\n+                    HashedWheelTimer.class.getSimpleName() +\r\n+                            \".stop() cannot be called from \" +\r\n+                            TimerTask.class.getSimpleName());\r\n+        }\r\n+\r\n+        if (!WORKER_STATE_UPDATER.compareAndSet(this, WORKER_STATE_STARTED, WORKER_STATE_SHUTDOWN)) {\r\n+            // workerState can be 0 or 2 at this moment - let it always be 2.\r\n+            if (WORKER_STATE_UPDATER.getAndSet(this, WORKER_STATE_SHUTDOWN) != WORKER_STATE_SHUTDOWN) {\r\n+                INSTANCE_COUNTER.decrementAndGet();\r\n+            }\r\n+\r\n+            return Collections.emptySet();\r\n+        }\r\n+\r\n+        try {\r\n+            boolean interrupted = false;\r\n+            while (workerThread.isAlive()) {\r\n+                workerThread.interrupt();\r\n+                try {\r\n+                    workerThread.join(100);\r\n+                } catch (InterruptedException ignored) {\r\n+                    interrupted = true;\r\n+                }\r\n+            }\r\n+\r\n+            if (interrupted) {\r\n+                Thread.currentThread().interrupt();\r\n+            }\r\n+        } finally {\r\n+            INSTANCE_COUNTER.decrementAndGet();\r\n+        }\r\n+        return worker.unprocessedTimeouts();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isStop() {\r\n+        return WORKER_STATE_SHUTDOWN == WORKER_STATE_UPDATER.get(this);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Timeout newTimeout(TimerTask task, long delay, TimeUnit unit) {\r\n+        if (task == null) {\r\n+            throw new NullPointerException(\"task\");\r\n+        }\r\n+        if (unit == null) {\r\n+            throw new NullPointerException(\"unit\");\r\n+        }\r\n+\r\n+        long pendingTimeoutsCount = pendingTimeouts.incrementAndGet();\r\n+\r\n+        if (maxPendingTimeouts > 0 && pendingTimeoutsCount > maxPendingTimeouts) {\r\n+            pendingTimeouts.decrementAndGet();\r\n+            throw new RejectedExecutionException(\"Number of pending timeouts (\"\r\n+                    + pendingTimeoutsCount + \") is greater than or equal to maximum allowed pending \"\r\n+                    + \"timeouts (\" + maxPendingTimeouts + \")\");\r\n+        }\r\n+\r\n+        start();\r\n+\r\n+        // Add the timeout to the timeout queue which will be processed on the next tick.\r\n+        // During processing all the queued HashedWheelTimeouts will be added to the correct HashedWheelBucket.\r\n+        long deadline = System.nanoTime() + unit.toNanos(delay) - startTime;\r\n+\r\n+        // Guard against overflow.\r\n+        if (delay > 0 && deadline < 0) {\r\n+            deadline = Long.MAX_VALUE;\r\n+        }\r\n+        HashedWheelTimeout timeout = new HashedWheelTimeout(this, task, deadline);\r\n+        timeouts.add(timeout);\r\n+        return timeout;\r\n+    }\r\n+\r\n+    /**\r\n+     * Returns the number of pending timeouts of this {@link Timer}.\r\n+     */\r\n+    public long pendingTimeouts() {\r\n+        return pendingTimeouts.get();\r\n+    }\r\n+\r\n+    private static void reportTooManyInstances() {\r\n+        String resourceType = ClassUtils.simpleClassName(HashedWheelTimer.class);\r\n+        logger.error(\"You are creating too many \" + resourceType + \" instances. \" +\r\n+                resourceType + \" is a shared resource that must be reused across the JVM,\" +\r\n+                \"so that only a few instances are created.\");\r\n+    }\r\n+\r\n+    private final class Worker implements Runnable {\r\n+        private final Set<Timeout> unprocessedTimeouts = new HashSet<Timeout>();\r\n+\r\n+        private long tick;\r\n+\r\n+        @Override\r\n+        public void run() {\r\n+            // Initialize the startTime.\r\n+            startTime = System.nanoTime();\r\n+            if (startTime == 0) {\r\n+                // We use 0 as an indicator for the uninitialized value here, so make sure it's not 0 when initialized.\r\n+                startTime = 1;\r\n+            }\r\n+\r\n+            // Notify the other threads waiting for the initialization at start().\r\n+            startTimeInitialized.countDown();\r\n+\r\n+            do {\r\n+                final long deadline = waitForNextTick();\r\n+                if (deadline > 0) {\r\n+                    int idx = (int) (tick & mask);\r\n+                    processCancelledTasks();\r\n+                    HashedWheelBucket bucket =\r\n+                            wheel[idx];\r\n+                    transferTimeoutsToBuckets();\r\n+                    bucket.expireTimeouts(deadline);\r\n+                    tick++;\r\n+                }\r\n+            } while (WORKER_STATE_UPDATER.get(HashedWheelTimer.this) == WORKER_STATE_STARTED);\r\n+\r\n+            // Fill the unprocessedTimeouts so we can return them from stop() method.\r\n+            for (HashedWheelBucket bucket : wheel) {\r\n+                bucket.clearTimeouts(unprocessedTimeouts);\r\n+            }\r\n+            for (; ; ) {\r\n+                HashedWheelTimeout timeout = timeouts.poll();\r\n+                if (timeout == null) {\r\n+                    break;\r\n+                }\r\n+                if (!timeout.isCancelled()) {\r\n+                    unprocessedTimeouts.add(timeout);\r\n+                }\r\n+            }\r\n+            processCancelledTasks();\r\n+        }\r\n+\r\n+        private void transferTimeoutsToBuckets() {\r\n+            // transfer only max. 100000 timeouts per tick to prevent a thread to stale the workerThread when it just\r\n+            // adds new timeouts in a loop.\r\n+            for (int i = 0; i < 100000; i++) {\r\n+                HashedWheelTimeout timeout = timeouts.poll();\r\n+                if (timeout == null) {\r\n+                    // all processed\r\n+                    break;\r\n+                }\r\n+                if (timeout.state() == HashedWheelTimeout.ST_CANCELLED) {\r\n+                    // Was cancelled in the meantime.\r\n+                    continue;\r\n+                }\r\n+\r\n+                long calculated = timeout.deadline / tickDuration;\r\n+                timeout.remainingRounds = (calculated - tick) / wheel.length;\r\n+\r\n+                // Ensure we don't schedule for past.\r\n+                final long ticks = Math.max(calculated, tick);\r\n+                int stopIndex = (int) (ticks & mask);\r\n+\r\n+                HashedWheelBucket bucket = wheel[stopIndex];\r\n+                bucket.addTimeout(timeout);\r\n+            }\r\n+        }\r\n+\r\n+        private void processCancelledTasks() {\r\n+            for (; ; ) {\r\n+                HashedWheelTimeout timeout = cancelledTimeouts.poll();\r\n+                if (timeout == null) {\r\n+                    // all processed\r\n+                    break;\r\n+                }\r\n+                try {\r\n+                    timeout.remove();\r\n+                } catch (Throwable t) {\r\n+                    if (logger.isWarnEnabled()) {\r\n+                        logger.warn(\"An exception was thrown while process a cancellation task\", t);\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        /**\r\n+         * calculate goal nanoTime from startTime and current tick number,\r\n+         * then wait until that goal has been reached.\r\n+         *\r\n+         * @return Long.MIN_VALUE if received a shutdown request,\r\n+         * current time otherwise (with Long.MIN_VALUE changed by +1)\r\n+         */\r\n+        private long waitForNextTick() {\r\n+            long deadline = tickDuration * (tick + 1);\r\n+\r\n+            for (; ; ) {\r\n+                final long currentTime = System.nanoTime() - startTime;\r\n+                long sleepTimeMs = (deadline - currentTime + 999999) / 1000000;\r\n+\r\n+                if (sleepTimeMs <= 0) {\r\n+                    if (currentTime == Long.MIN_VALUE) {\r\n+                        return -Long.MAX_VALUE;\r\n+                    } else {\r\n+                        return currentTime;\r\n+                    }\r\n+                }\r\n+                if (isWindows()) {\r\n+                    sleepTimeMs = sleepTimeMs / 10 * 10;\r\n+                }\r\n+\r\n+                try {\r\n+                    Thread.sleep(sleepTimeMs);\r\n+                } catch (InterruptedException ignored) {\r\n+                    if (WORKER_STATE_UPDATER.get(HashedWheelTimer.this) == WORKER_STATE_SHUTDOWN) {\r\n+                        return Long.MIN_VALUE;\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        Set<Timeout> unprocessedTimeouts() {\r\n+            return Collections.unmodifiableSet(unprocessedTimeouts);\r\n+        }\r\n+    }\r\n+\r\n+    private static final class HashedWheelTimeout implements Timeout {\r\n+\r\n+        private static final int ST_INIT = 0;\r\n+        private static final int ST_CANCELLED = 1;\r\n+        private static final int ST_EXPIRED = 2;\r\n+        private static final AtomicIntegerFieldUpdater<HashedWheelTimeout> STATE_UPDATER =\r\n+                AtomicIntegerFieldUpdater.newUpdater(HashedWheelTimeout.class, \"state\");\r\n+\r\n+        private final HashedWheelTimer timer;\r\n+        private final TimerTask task;\r\n+        private final long deadline;\r\n+\r\n+        @SuppressWarnings({\"unused\", \"FieldMayBeFinal\", \"RedundantFieldInitialization\"})\r\n+        private volatile int state = ST_INIT;\r\n+\r\n+        /**\r\n+         * RemainingRounds will be calculated and set by Worker.transferTimeoutsToBuckets() before the\r\n+         * HashedWheelTimeout will be added to the correct HashedWheelBucket.\r\n+         */\r\n+        long remainingRounds;\r\n+\r\n+        /**\r\n+         * This will be used to chain timeouts in HashedWheelTimerBucket via a double-linked-list.\r\n+         * As only the workerThread will act on it there is no need for synchronization / volatile.\r\n+         */\r\n+        HashedWheelTimeout next;\r\n+        HashedWheelTimeout prev;\r\n+\r\n+        /**\r\n+         * The bucket to which the timeout was added\r\n+         */\r\n+        HashedWheelBucket bucket;\r\n+\r\n+        HashedWheelTimeout(HashedWheelTimer timer, TimerTask task, long deadline) {\r\n+            this.timer = timer;\r\n+            this.task = task;\r\n+            this.deadline = deadline;\r\n+        }\r\n+\r\n+        @Override\r\n+        public Timer timer() {\r\n+            return timer;\r\n+        }\r\n+\r\n+        @Override\r\n+        public TimerTask task() {\r\n+            return task;\r\n+        }\r\n+\r\n+        @Override\r\n+        public boolean cancel() {\r\n+            // only update the state it will be removed from HashedWheelBucket on next tick.\r\n+            if (!compareAndSetState(ST_INIT, ST_CANCELLED)) {\r\n+                return false;\r\n+            }\r\n+            // If a task should be canceled we put this to another queue which will be processed on each tick.\r\n+            // So this means that we will have a GC latency of max. 1 tick duration which is good enough. This way\r\n+            // we can make again use of our MpscLinkedQueue and so minimize the locking / overhead as much as possible.\r\n+            timer.cancelledTimeouts.add(this);\r\n+            return true;\r\n+        }\r\n+\r\n+        void remove() {\r\n+            HashedWheelBucket bucket = this.bucket;\r\n+            if (bucket != null) {\r\n+                bucket.remove(this);\r\n+            } else {\r\n+                timer.pendingTimeouts.decrementAndGet();\r\n+            }\r\n+        }\r\n+\r\n+        public boolean compareAndSetState(int expected, int state) {\r\n+            return STATE_UPDATER.compareAndSet(this, expected, state);\r\n+        }\r\n+\r\n+        public int state() {\r\n+            return state;\r\n+        }\r\n+\r\n+        @Override\r\n+        public boolean isCancelled() {\r\n+            return state() == ST_CANCELLED;\r\n+        }\r\n+\r\n+        @Override\r\n+        public boolean isExpired() {\r\n+            return state() == ST_EXPIRED;\r\n+        }\r\n+\r\n+        public void expire() {\r\n+            if (!compareAndSetState(ST_INIT, ST_EXPIRED)) {\r\n+                return;\r\n+            }\r\n+\r\n+            try {\r\n+                task.run(this);\r\n+            } catch (Throwable t) {\r\n+                if (logger.isWarnEnabled()) {\r\n+                    logger.warn(\"An exception was thrown by \" + TimerTask.class.getSimpleName() + '.', t);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        @Override\r\n+        public String toString() {\r\n+            final long currentTime = System.nanoTime();\r\n+            long remaining = deadline - currentTime + timer.startTime;\r\n+            String simpleClassName = ClassUtils.simpleClassName(this.getClass());\r\n+\r\n+            StringBuilder buf = new StringBuilder(192)\r\n+                    .append(simpleClassName)\r\n+                    .append('(')\r\n+                    .append(\"deadline: \");\r\n+            if (remaining > 0) {\r\n+                buf.append(remaining)\r\n+                        .append(\" ns later\");\r\n+            } else if (remaining < 0) {\r\n+                buf.append(-remaining)\r\n+                        .append(\" ns ago\");\r\n+            } else {\r\n+                buf.append(\"now\");\r\n+            }\r\n+\r\n+            if (isCancelled()) {\r\n+                buf.append(\", cancelled\");\r\n+            }\r\n+\r\n+            return buf.append(\", task: \")\r\n+                    .append(task())\r\n+                    .append(')')\r\n+                    .toString();\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Bucket that stores HashedWheelTimeouts. These are stored in a linked-list like datastructure to allow easy\r\n+     * removal of HashedWheelTimeouts in the middle. Also the HashedWheelTimeout act as nodes themself and so no\r\n+     * extra object creation is needed.\r\n+     */\r\n+    private static final class HashedWheelBucket {\r\n+\r\n+        /**\r\n+         * Used for the linked-list datastructure\r\n+         */\r\n+        private HashedWheelTimeout head;\r\n+        private HashedWheelTimeout tail;\r\n+\r\n+        /**\r\n+         * Add {@link HashedWheelTimeout} to this bucket.\r\n+         */\r\n+        void addTimeout(HashedWheelTimeout timeout) {\r\n+            assert timeout.bucket == null;\r\n+            timeout.bucket = this;\r\n+            if (head == null) {\r\n+                head = tail = timeout;\r\n+            } else {\r\n+                tail.next = timeout;\r\n+                timeout.prev = tail;\r\n+                tail = timeout;\r\n+            }\r\n+        }\r\n+\r\n+        /**\r\n+         * Expire all {@link HashedWheelTimeout}s for the given {@code deadline}.\r\n+         */\r\n+        void expireTimeouts(long deadline) {\r\n+            HashedWheelTimeout timeout = head;\r\n+\r\n+            // process all timeouts\r\n+            while (timeout != null) {\r\n+                HashedWheelTimeout next = timeout.next;\r\n+                if (timeout.remainingRounds <= 0) {\r\n+                    next = remove(timeout);\r\n+                    if (timeout.deadline <= deadline) {\r\n+                        timeout.expire();\r\n+                    } else {\r\n+                        // The timeout was placed into a wrong slot. This should never happen.\r\n+                        throw new IllegalStateException(String.format(\r\n+                                \"timeout.deadline (%d) > deadline (%d)\", timeout.deadline, deadline));\r\n+                    }\r\n+                } else if (timeout.isCancelled()) {\r\n+                    next = remove(timeout);\r\n+                } else {\r\n+                    timeout.remainingRounds--;\r\n+                }\r\n+                timeout = next;\r\n+            }\r\n+        }\r\n+\r\n+        public HashedWheelTimeout remove(HashedWheelTimeout timeout) {\r\n+            HashedWheelTimeout next = timeout.next;\r\n+            // remove timeout that was either processed or cancelled by updating the linked-list\r\n+            if (timeout.prev != null) {\r\n+                timeout.prev.next = next;\r\n+            }\r\n+            if (timeout.next != null) {\r\n+                timeout.next.prev = timeout.prev;\r\n+            }\r\n+\r\n+            if (timeout == head) {\r\n+                // if timeout is also the tail we need to adjust the entry too\r\n+                if (timeout == tail) {\r\n+                    tail = null;\r\n+                    head = null;\r\n+                } else {\r\n+                    head = next;\r\n+                }\r\n+            } else if (timeout == tail) {\r\n+                // if the timeout is the tail modify the tail to be the prev node.\r\n+                tail = timeout.prev;\r\n+            }\r\n+            // null out prev, next and bucket to allow for GC.\r\n+            timeout.prev = null;\r\n+            timeout.next = null;\r\n+            timeout.bucket = null;\r\n+            timeout.timer.pendingTimeouts.decrementAndGet();\r\n+            return next;\r\n+        }\r\n+\r\n+        /**\r\n+         * Clear this bucket and return all not expired / cancelled {@link Timeout}s.\r\n+         */\r\n+        void clearTimeouts(Set<Timeout> set) {\r\n+            for (; ; ) {\r\n+                HashedWheelTimeout timeout = pollTimeout();\r\n+                if (timeout == null) {\r\n+                    return;\r\n+                }\r\n+                if (timeout.isExpired() || timeout.isCancelled()) {\r\n+                    continue;\r\n+                }\r\n+                set.add(timeout);\r\n+            }\r\n+        }\r\n+\r\n+        private HashedWheelTimeout pollTimeout() {\r\n+            HashedWheelTimeout head = this.head;\r\n+            if (head == null) {\r\n+                return null;\r\n+            }\r\n+            HashedWheelTimeout next = head.next;\r\n+            if (next == null) {\r\n+                tail = this.head = null;\r\n+            } else {\r\n+                this.head = next;\r\n+                next.prev = null;\r\n+            }\r\n+\r\n+            // null out prev and next to allow for GC.\r\n+            head.next = null;\r\n+            head.prev = null;\r\n+            head.bucket = null;\r\n+            return head;\r\n+        }\r\n+    }\r\n+    \r\n+    private static final boolean IS_OS_WINDOWS = System.getProperty(\"os.name\", \"\").toLowerCase(Locale.US).contains(\"win\");\r\n+    \r\n+    private boolean isWindows() {\r\n+    \treturn IS_OS_WINDOWS;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/AnnotationUtils.java", "source2": "org/apache/dubbo/common/utils/AnnotationUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,482 +1,482 @@\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.common.utils;\n-\n-import java.lang.annotation.Annotation;\n-import java.lang.annotation.Documented;\n-import java.lang.annotation.ElementType;\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.Target;\n-import java.lang.reflect.AnnotatedElement;\n-import java.lang.reflect.Method;\n-import java.util.Collection;\n-import java.util.Collections;\n-import java.util.LinkedHashSet;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Objects;\n-import java.util.Set;\n-import java.util.function.Predicate;\n-\n-import static java.util.Arrays.asList;\n-import static java.util.Collections.emptyList;\n-import static java.util.Collections.unmodifiableList;\n-import static org.apache.dubbo.common.function.Predicates.and;\n-import static org.apache.dubbo.common.function.Streams.filterAll;\n-import static org.apache.dubbo.common.function.Streams.filterFirst;\n-import static org.apache.dubbo.common.utils.ClassUtils.getAllInheritedTypes;\n-import static org.apache.dubbo.common.utils.ClassUtils.resolveClass;\n-import static org.apache.dubbo.common.utils.CollectionUtils.first;\n-import static org.apache.dubbo.common.utils.MethodUtils.findMethod;\n-import static org.apache.dubbo.common.utils.MethodUtils.invokeMethod;\n-\n-/**\n- * Commons Annotation Utilities class\n- *\n- * @since 2.7.6\n- */\n-public interface AnnotationUtils {\n-\n-    /**\n-     * Resolve the annotation type by the annotated element and resolved class name\n-     *\n-     * @param annotatedElement    the annotated element\n-     * @param annotationClassName the class name of annotation\n-     * @param <A>                 the type of annotation\n-     * @return If resolved, return the type of annotation, or <code>null</code>\n-     */\n-    static <A extends Annotation> Class<A> resolveAnnotationType(AnnotatedElement annotatedElement,\n-                                                                 String annotationClassName) {\n-        ClassLoader classLoader = annotatedElement.getClass().getClassLoader();\n-        Class<?> annotationType = resolveClass(annotationClassName, classLoader);\n-        if (annotationType == null || !Annotation.class.isAssignableFrom(annotationType)) {\n-            return null;\n-        }\n-        return (Class<A>) annotationType;\n-    }\n-\n-    /**\n-     * Is the specified type a generic {@link Class type}\n-     *\n-     * @param annotatedElement the annotated element\n-     * @return if <code>annotatedElement</code> is the {@link Class}, return <code>true</code>, or <code>false</code>\n-     * @see ElementType#TYPE\n-     */\n-    static boolean isType(AnnotatedElement annotatedElement) {\n-        return annotatedElement instanceof Class;\n-    }\n-\n-    /**\n-     * Is the type of specified annotation same to the expected type?\n-     *\n-     * @param annotation     the specified {@link Annotation}\n-     * @param annotationType the expected annotation type\n-     * @return if same, return <code>true</code>, or <code>false</code>\n-     */\n-    static boolean isSameType(Annotation annotation, Class<? extends Annotation> annotationType) {\n-        if (annotation == null || annotationType == null) {\n-            return false;\n-        }\n-        return Objects.equals(annotation.annotationType(), annotationType);\n-    }\n-\n-    /**\n-     * Build an instance of {@link Predicate} to excluded annotation type\n-     *\n-     * @param excludedAnnotationType excluded annotation type\n-     * @return non-null\n-     */\n-    static Predicate<Annotation> excludedType(Class<? extends Annotation> excludedAnnotationType) {\n-        return annotation -> !isSameType(annotation, excludedAnnotationType);\n-    }\n-\n-    /**\n-     * Get the attribute from the specified {@link Annotation annotation}\n-     *\n-     * @param annotation    the specified {@link Annotation annotation}\n-     * @param attributeName the attribute name\n-     * @param <T>           the type of attribute\n-     * @return the attribute value\n-     * @throws IllegalArgumentException If the attribute name can't be found\n-     */\n-    static <T> T getAttribute(Annotation annotation, String attributeName) throws IllegalArgumentException {\n-        return annotation == null ? null : invokeMethod(annotation, attributeName);\n-    }\n-\n-    /**\n-     * Get the \"value\" attribute from the specified {@link Annotation annotation}\n-     *\n-     * @param annotation the specified {@link Annotation annotation}\n-     * @param <T>        the type of attribute\n-     * @return the value of \"value\" attribute\n-     * @throws IllegalArgumentException If the attribute name can't be found\n-     */\n-    static <T> T getValue(Annotation annotation) throws IllegalArgumentException {\n-        return getAttribute(annotation, \"value\");\n-    }\n-\n-    /**\n-     * Get the {@link Annotation} from the specified {@link AnnotatedElement the annotated element} and\n-     * {@link Annotation annotation} class name\n-     *\n-     * @param annotatedElement    {@link AnnotatedElement}\n-     * @param annotationClassName the class name of annotation\n-     * @param <A>                 The type of {@link Annotation}\n-     * @return the {@link Annotation} if found\n-     * @throws ClassCastException If the {@link Annotation annotation} type that client requires can't match actual type\n-     */\n-    static <A extends Annotation> A getAnnotation(AnnotatedElement annotatedElement, String annotationClassName)\n-            throws ClassCastException {\n-        Class<? extends Annotation> annotationType = resolveAnnotationType(annotatedElement, annotationClassName);\n-        if (annotationType == null) {\n-            return null;\n-        }\n-        return (A) annotatedElement.getAnnotation(annotationType);\n-    }\n-\n-    /**\n-     * Get annotations that are <em>directly present</em> on this element.\n-     * This method ignores inherited annotations.\n-     *\n-     * @param annotatedElement    the annotated element\n-     * @param annotationsToFilter the annotations to filter\n-     * @return non-null read-only {@link List}\n-     */\n-    static List<Annotation> getDeclaredAnnotations(AnnotatedElement annotatedElement,\n-                                                   Predicate<Annotation>... annotationsToFilter) {\n-        if (annotatedElement == null) {\n-            return emptyList();\n-        }\n-\n-        return unmodifiableList(filterAll(asList(annotatedElement.getDeclaredAnnotations()), annotationsToFilter));\n-    }\n-\n-    /**\n-     * Get all directly declared annotations of the the annotated element, not including\n-     * meta annotations.\n-     *\n-     * @param annotatedElement    the annotated element\n-     * @param annotationsToFilter the annotations to filter\n-     * @return non-null read-only {@link List}\n-     */\n-    static List<Annotation> getAllDeclaredAnnotations(AnnotatedElement annotatedElement,\n-                                                      Predicate<Annotation>... annotationsToFilter) {\n-        if (isType(annotatedElement)) {\n-            return getAllDeclaredAnnotations((Class) annotatedElement, annotationsToFilter);\n-        } else {\n-            return getDeclaredAnnotations(annotatedElement, annotationsToFilter);\n-        }\n-    }\n-\n-    /**\n-     * Get all directly declared annotations of the specified type and its' all hierarchical types, not including\n-     * meta annotations.\n-     *\n-     * @param type                the specified type\n-     * @param annotationsToFilter the annotations to filter\n-     * @return non-null read-only {@link List}\n-     */\n-    static List<Annotation> getAllDeclaredAnnotations(Class<?> type, Predicate<Annotation>... annotationsToFilter) {\n-\n-        if (type == null) {\n-            return emptyList();\n-        }\n-\n-        List<Annotation> allAnnotations = new LinkedList<>();\n-\n-        // All types\n-        Set<Class<?>> allTypes = new LinkedHashSet<>();\n-        // Add current type\n-        allTypes.add(type);\n-        // Add all inherited types\n-        allTypes.addAll(getAllInheritedTypes(type, t -> !Object.class.equals(t)));\n-\n-        for (Class<?> t : allTypes) {\n-            allAnnotations.addAll(getDeclaredAnnotations(t, annotationsToFilter));\n-        }\n-\n-        return unmodifiableList(allAnnotations);\n-    }\n-\n-\n-    /**\n-     * Get the meta-annotated {@link Annotation annotations} directly, excluding {@link Target}, {@link Retention}\n-     * and {@link Documented}\n-     *\n-     * @param annotationType          the {@link Annotation annotation} type\n-     * @param metaAnnotationsToFilter the meta annotations to filter\n-     * @return non-null read-only {@link List}\n-     */\n-    static List<Annotation> getMetaAnnotations(Class<? extends Annotation> annotationType,\n-                                               Predicate<Annotation>... metaAnnotationsToFilter) {\n-        return getDeclaredAnnotations(annotationType,\n-                // Excludes the Java native annotation types or it causes the stack overflow, e.g,\n-                // @Target annotates itself\n-                excludedType(Target.class),\n-                excludedType(Retention.class),\n-                excludedType(Documented.class),\n-                // Add other predicates\n-                and(metaAnnotationsToFilter)\n-        );\n-    }\n-\n-    /**\n-     * Get all meta annotations from the specified {@link Annotation annotation} type\n-     *\n-     * @param annotationType      the {@link Annotation annotation} type\n-     * @param annotationsToFilter the annotations to filter\n-     * @return non-null read-only {@link List}\n-     */\n-    static List<Annotation> getAllMetaAnnotations(Class<? extends Annotation> annotationType,\n-                                                  Predicate<Annotation>... annotationsToFilter) {\n-\n-        List<Annotation> allMetaAnnotations = new LinkedList<>();\n-\n-        List<Annotation> metaAnnotations = getMetaAnnotations(annotationType);\n-\n-        allMetaAnnotations.addAll(metaAnnotations);\n-\n-        for (Annotation metaAnnotation : metaAnnotations) {\n-            // Get the nested meta annotations recursively\n-            allMetaAnnotations.addAll(getAllMetaAnnotations(metaAnnotation.annotationType()));\n-        }\n-\n-        return unmodifiableList(filterAll(allMetaAnnotations, annotationsToFilter));\n-    }\n-\n-    /**\n-     * Find the annotation that is annotated on the specified element may be a meta-annotation\n-     *\n-     * @param annotatedElement    the annotated element\n-     * @param annotationClassName the class name of annotation\n-     * @param <A>                 the required type of annotation\n-     * @return If found, return first matched-type {@link Annotation annotation}, or <code>null</code>\n-     */\n-    static <A extends Annotation> A findAnnotation(AnnotatedElement annotatedElement, String annotationClassName) {\n-        return findAnnotation(annotatedElement, resolveAnnotationType(annotatedElement, annotationClassName));\n-    }\n-\n-    /**\n-     * Find the annotation that is annotated on the specified element may be a meta-annotation\n-     *\n-     * @param annotatedElement the annotated element\n-     * @param annotationType   the type of annotation\n-     * @param <A>              the required type of annotation\n-     * @return If found, return first matched-type {@link Annotation annotation}, or <code>null</code>\n-     */\n-    static <A extends Annotation> A findAnnotation(AnnotatedElement annotatedElement, Class<A> annotationType) {\n-        return (A) filterFirst(getAllDeclaredAnnotations(annotatedElement), a -> isSameType(a, annotationType));\n-    }\n-\n-    /**\n-     * Find the meta annotations from the the {@link Annotation annotation} type by meta annotation type\n-     *\n-     * @param annotationType     the {@link Annotation annotation} type\n-     * @param metaAnnotationType the meta annotation type\n-     * @param <A>                the type of required annotation\n-     * @return if found, return all matched results, or get an {@link Collections#emptyList() empty list}\n-     */\n-    static <A extends Annotation> List<A> findMetaAnnotations(Class<? extends Annotation> annotationType,\n-                                                              Class<A> metaAnnotationType) {\n-        return (List<A>) getAllMetaAnnotations(annotationType, a -> isSameType(a, metaAnnotationType));\n-    }\n-\n-    /**\n-     * Find the meta annotations from the the the annotated element by meta annotation type\n-     *\n-     * @param annotatedElement   the annotated element\n-     * @param metaAnnotationType the meta annotation type\n-     * @param <A>                the type of required annotation\n-     * @return if found, return all matched results, or get an {@link Collections#emptyList() empty list}\n-     */\n-    static <A extends Annotation> List<A> findMetaAnnotations(AnnotatedElement annotatedElement,\n-                                                              Class<A> metaAnnotationType) {\n-        List<A> metaAnnotations = new LinkedList<>();\n-\n-        for (Annotation annotation : getAllDeclaredAnnotations(annotatedElement)) {\n-            metaAnnotations.addAll(findMetaAnnotations(annotation.annotationType(), metaAnnotationType));\n-        }\n-\n-        return unmodifiableList(metaAnnotations);\n-    }\n-\n-    /**\n-     * Find the meta annotation from the annotated element by meta annotation type\n-     *\n-     * @param annotatedElement        the annotated element\n-     * @param metaAnnotationClassName the class name of meta annotation\n-     * @param <A>                     the type of required annotation\n-     * @return {@link #findMetaAnnotation(Class, Class)}\n-     */\n-    static <A extends Annotation> A findMetaAnnotation(AnnotatedElement annotatedElement,\n-                                                       String metaAnnotationClassName) {\n-        return findMetaAnnotation(annotatedElement, resolveAnnotationType(annotatedElement, metaAnnotationClassName));\n-    }\n-\n-    /**\n-     * Find the meta annotation from the annotation type by meta annotation type\n-     *\n-     * @param annotationType     the {@link Annotation annotation} type\n-     * @param metaAnnotationType the meta annotation type\n-     * @param <A>                the type of required annotation\n-     * @return If found, return the {@link CollectionUtils#first(Collection)} matched result, return <code>null</code>.\n-     * If it requires more result, please consider to use {@link #findMetaAnnotations(Class, Class)}\n-     * @see #findMetaAnnotations(Class, Class)\n-     */\n-    static <A extends Annotation> A findMetaAnnotation(Class<? extends Annotation> annotationType,\n-                                                       Class<A> metaAnnotationType) {\n-        return first(findMetaAnnotations(annotationType, metaAnnotationType));\n-    }\n-\n-    /**\n-     * Find the meta annotation from the annotated element by meta annotation type\n-     *\n-     * @param annotatedElement   the annotated element\n-     * @param metaAnnotationType the meta annotation type\n-     * @param <A>                the type of required annotation\n-     * @return If found, return the {@link CollectionUtils#first(Collection)} matched result, return <code>null</code>.\n-     * If it requires more result, please consider to use {@link #findMetaAnnotations(AnnotatedElement, Class)}\n-     * @see #findMetaAnnotations(AnnotatedElement, Class)\n-     */\n-    static <A extends Annotation> A findMetaAnnotation(AnnotatedElement annotatedElement, Class<A> metaAnnotationType) {\n-        return first(findMetaAnnotations(annotatedElement, metaAnnotationType));\n-    }\n-\n-    /**\n-     * Tests the annotated element is annotated the specified annotations or not\n-     *\n-     * @param type            the annotated type\n-     * @param matchAll        If <code>true</code>, checking all annotation types are present or not, or match any\n-     * @param annotationTypes the specified annotation types\n-     * @return If the specified annotation types are present, return <code>true</code>, or <code>false</code>\n-     */\n-    static boolean isAnnotationPresent(Class<?> type,\n-                                       boolean matchAll,\n-                                       Class<? extends Annotation>... annotationTypes) {\n-\n-        int size = annotationTypes == null ? 0 : annotationTypes.length;\n-\n-        if (size < 1) {\n-            return false;\n-        }\n-\n-        int presentCount = 0;\n-\n-        for (int i = 0; i < size; i++) {\n-            Class<? extends Annotation> annotationType = annotationTypes[i];\n-            if (findAnnotation(type, annotationType) != null || findMetaAnnotation(type, annotationType) != null) {\n-                presentCount++;\n-            }\n-        }\n-\n-        return matchAll ? presentCount == size : presentCount > 0;\n-    }\n-\n-    /**\n-     * Tests the annotated element is annotated the specified annotation or not\n-     *\n-     * @param type           the annotated type\n-     * @param annotationType the class of annotation\n-     * @return If the specified annotation type is present, return <code>true</code>, or <code>false</code>\n-     */\n-    static boolean isAnnotationPresent(Class<?> type, Class<? extends Annotation> annotationType) {\n-        return isAnnotationPresent(type, true, annotationType);\n-    }\n-\n-    /**\n-     * Tests the annotated element is present any specified annotation types\n-     *\n-     * @param annotatedElement    the annotated element\n-     * @param annotationClassName the class name of annotation\n-     * @return If any specified annotation types are present, return <code>true</code>\n-     */\n-    static boolean isAnnotationPresent(AnnotatedElement annotatedElement, String annotationClassName) {\n-        ClassLoader classLoader = annotatedElement.getClass().getClassLoader();\n-        Class<?> resolvedType = resolveClass(annotationClassName, classLoader);\n-        if (!Annotation.class.isAssignableFrom(resolvedType)) {\n-            return false;\n-        }\n-        return isAnnotationPresent(annotatedElement, (Class<? extends Annotation>) resolvedType);\n-    }\n-\n-    /**\n-     * Tests the annotated element is present any specified annotation types\n-     *\n-     * @param annotatedElement the annotated element\n-     * @param annotationType   the class of annotation\n-     * @return If any specified annotation types are present, return <code>true</code>\n-     */\n-    static boolean isAnnotationPresent(AnnotatedElement annotatedElement, Class<? extends Annotation> annotationType) {\n-        if (isType(annotatedElement)) {\n-            return isAnnotationPresent((Class) annotatedElement, annotationType);\n-        } else {\n-            return annotatedElement.isAnnotationPresent(annotationType) ||\n-                    findMetaAnnotation(annotatedElement, annotationType) != null; // to find meta-annotation\n-        }\n-    }\n-\n-    /**\n-     * Tests the annotated element is annotated all specified annotations or not\n-     *\n-     * @param type            the annotated type\n-     * @param annotationTypes the specified annotation types\n-     * @return If the specified annotation types are present, return <code>true</code>, or <code>false</code>\n-     */\n-    static boolean isAllAnnotationPresent(Class<?> type, Class<? extends Annotation>... annotationTypes) {\n-        return isAnnotationPresent(type, true, annotationTypes);\n-    }\n-\n-    /**\n-     * Tests the annotated element is present any specified annotation types\n-     *\n-     * @param type            the annotated type\n-     * @param annotationTypes the specified annotation types\n-     * @return If any specified annotation types are present, return <code>true</code>\n-     */\n-    static boolean isAnyAnnotationPresent(Class<?> type,\n-                                          Class<? extends Annotation>... annotationTypes) {\n-        return isAnnotationPresent(type, false, annotationTypes);\n-    }\n-\n-\n-    /**\n-     * Get the default value of attribute on the specified annotation\n-     *\n-     * @param annotation    {@link Annotation} object\n-     * @param attributeName the name of attribute\n-     * @param <T>           the type of value\n-     * @return <code>null</code> if not found\n-     * @since 2.7.9\n-     */\n-    static <T> T getDefaultValue(Annotation annotation, String attributeName) {\n-        return getDefaultValue(annotation.annotationType(), attributeName);\n-    }\n-\n-    /**\n-     * Get the default value of attribute on the specified annotation\n-     *\n-     * @param annotationType the type of {@link Annotation}\n-     * @param attributeName  the name of attribute\n-     * @param <T>            the type of value\n-     * @return <code>null</code> if not found\n-     * @since 2.7.9\n-     */\n-    static <T> T getDefaultValue(Class<? extends Annotation> annotationType, String attributeName) {\n-        Method method = findMethod(annotationType, attributeName);\n-        return (T) (method == null ? null : method.getDefaultValue());\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.common.utils;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.annotation.Documented;\r\n+import java.lang.annotation.ElementType;\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.Target;\r\n+import java.lang.reflect.AnnotatedElement;\r\n+import java.lang.reflect.Method;\r\n+import java.util.Collection;\r\n+import java.util.Collections;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+import java.util.function.Predicate;\r\n+\r\n+import static java.util.Arrays.asList;\r\n+import static java.util.Collections.emptyList;\r\n+import static java.util.Collections.unmodifiableList;\r\n+import static org.apache.dubbo.common.function.Predicates.and;\r\n+import static org.apache.dubbo.common.function.Streams.filterAll;\r\n+import static org.apache.dubbo.common.function.Streams.filterFirst;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.getAllInheritedTypes;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.resolveClass;\r\n+import static org.apache.dubbo.common.utils.CollectionUtils.first;\r\n+import static org.apache.dubbo.common.utils.MethodUtils.findMethod;\r\n+import static org.apache.dubbo.common.utils.MethodUtils.invokeMethod;\r\n+\r\n+/**\r\n+ * Commons Annotation Utilities class\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface AnnotationUtils {\r\n+\r\n+    /**\r\n+     * Resolve the annotation type by the annotated element and resolved class name\r\n+     *\r\n+     * @param annotatedElement    the annotated element\r\n+     * @param annotationClassName the class name of annotation\r\n+     * @param <A>                 the type of annotation\r\n+     * @return If resolved, return the type of annotation, or <code>null</code>\r\n+     */\r\n+    static <A extends Annotation> Class<A> resolveAnnotationType(AnnotatedElement annotatedElement,\r\n+                                                                 String annotationClassName) {\r\n+        ClassLoader classLoader = annotatedElement.getClass().getClassLoader();\r\n+        Class<?> annotationType = resolveClass(annotationClassName, classLoader);\r\n+        if (annotationType == null || !Annotation.class.isAssignableFrom(annotationType)) {\r\n+            return null;\r\n+        }\r\n+        return (Class<A>) annotationType;\r\n+    }\r\n+\r\n+    /**\r\n+     * Is the specified type a generic {@link Class type}\r\n+     *\r\n+     * @param annotatedElement the annotated element\r\n+     * @return if <code>annotatedElement</code> is the {@link Class}, return <code>true</code>, or <code>false</code>\r\n+     * @see ElementType#TYPE\r\n+     */\r\n+    static boolean isType(AnnotatedElement annotatedElement) {\r\n+        return annotatedElement instanceof Class;\r\n+    }\r\n+\r\n+    /**\r\n+     * Is the type of specified annotation same to the expected type?\r\n+     *\r\n+     * @param annotation     the specified {@link Annotation}\r\n+     * @param annotationType the expected annotation type\r\n+     * @return if same, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    static boolean isSameType(Annotation annotation, Class<? extends Annotation> annotationType) {\r\n+        if (annotation == null || annotationType == null) {\r\n+            return false;\r\n+        }\r\n+        return Objects.equals(annotation.annotationType(), annotationType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Build an instance of {@link Predicate} to excluded annotation type\r\n+     *\r\n+     * @param excludedAnnotationType excluded annotation type\r\n+     * @return non-null\r\n+     */\r\n+    static Predicate<Annotation> excludedType(Class<? extends Annotation> excludedAnnotationType) {\r\n+        return annotation -> !isSameType(annotation, excludedAnnotationType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the attribute from the specified {@link Annotation annotation}\r\n+     *\r\n+     * @param annotation    the specified {@link Annotation annotation}\r\n+     * @param attributeName the attribute name\r\n+     * @param <T>           the type of attribute\r\n+     * @return the attribute value\r\n+     * @throws IllegalArgumentException If the attribute name can't be found\r\n+     */\r\n+    static <T> T getAttribute(Annotation annotation, String attributeName) throws IllegalArgumentException {\r\n+        return annotation == null ? null : invokeMethod(annotation, attributeName);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the \"value\" attribute from the specified {@link Annotation annotation}\r\n+     *\r\n+     * @param annotation the specified {@link Annotation annotation}\r\n+     * @param <T>        the type of attribute\r\n+     * @return the value of \"value\" attribute\r\n+     * @throws IllegalArgumentException If the attribute name can't be found\r\n+     */\r\n+    static <T> T getValue(Annotation annotation) throws IllegalArgumentException {\r\n+        return getAttribute(annotation, \"value\");\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the {@link Annotation} from the specified {@link AnnotatedElement the annotated element} and\r\n+     * {@link Annotation annotation} class name\r\n+     *\r\n+     * @param annotatedElement    {@link AnnotatedElement}\r\n+     * @param annotationClassName the class name of annotation\r\n+     * @param <A>                 The type of {@link Annotation}\r\n+     * @return the {@link Annotation} if found\r\n+     * @throws ClassCastException If the {@link Annotation annotation} type that client requires can't match actual type\r\n+     */\r\n+    static <A extends Annotation> A getAnnotation(AnnotatedElement annotatedElement, String annotationClassName)\r\n+            throws ClassCastException {\r\n+        Class<? extends Annotation> annotationType = resolveAnnotationType(annotatedElement, annotationClassName);\r\n+        if (annotationType == null) {\r\n+            return null;\r\n+        }\r\n+        return (A) annotatedElement.getAnnotation(annotationType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get annotations that are <em>directly present</em> on this element.\r\n+     * This method ignores inherited annotations.\r\n+     *\r\n+     * @param annotatedElement    the annotated element\r\n+     * @param annotationsToFilter the annotations to filter\r\n+     * @return non-null read-only {@link List}\r\n+     */\r\n+    static List<Annotation> getDeclaredAnnotations(AnnotatedElement annotatedElement,\r\n+                                                   Predicate<Annotation>... annotationsToFilter) {\r\n+        if (annotatedElement == null) {\r\n+            return emptyList();\r\n+        }\r\n+\r\n+        return unmodifiableList(filterAll(asList(annotatedElement.getDeclaredAnnotations()), annotationsToFilter));\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all directly declared annotations of the the annotated element, not including\r\n+     * meta annotations.\r\n+     *\r\n+     * @param annotatedElement    the annotated element\r\n+     * @param annotationsToFilter the annotations to filter\r\n+     * @return non-null read-only {@link List}\r\n+     */\r\n+    static List<Annotation> getAllDeclaredAnnotations(AnnotatedElement annotatedElement,\r\n+                                                      Predicate<Annotation>... annotationsToFilter) {\r\n+        if (isType(annotatedElement)) {\r\n+            return getAllDeclaredAnnotations((Class) annotatedElement, annotationsToFilter);\r\n+        } else {\r\n+            return getDeclaredAnnotations(annotatedElement, annotationsToFilter);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all directly declared annotations of the specified type and its' all hierarchical types, not including\r\n+     * meta annotations.\r\n+     *\r\n+     * @param type                the specified type\r\n+     * @param annotationsToFilter the annotations to filter\r\n+     * @return non-null read-only {@link List}\r\n+     */\r\n+    static List<Annotation> getAllDeclaredAnnotations(Class<?> type, Predicate<Annotation>... annotationsToFilter) {\r\n+\r\n+        if (type == null) {\r\n+            return emptyList();\r\n+        }\r\n+\r\n+        List<Annotation> allAnnotations = new LinkedList<>();\r\n+\r\n+        // All types\r\n+        Set<Class<?>> allTypes = new LinkedHashSet<>();\r\n+        // Add current type\r\n+        allTypes.add(type);\r\n+        // Add all inherited types\r\n+        allTypes.addAll(getAllInheritedTypes(type, t -> !Object.class.equals(t)));\r\n+\r\n+        for (Class<?> t : allTypes) {\r\n+            allAnnotations.addAll(getDeclaredAnnotations(t, annotationsToFilter));\r\n+        }\r\n+\r\n+        return unmodifiableList(allAnnotations);\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Get the meta-annotated {@link Annotation annotations} directly, excluding {@link Target}, {@link Retention}\r\n+     * and {@link Documented}\r\n+     *\r\n+     * @param annotationType          the {@link Annotation annotation} type\r\n+     * @param metaAnnotationsToFilter the meta annotations to filter\r\n+     * @return non-null read-only {@link List}\r\n+     */\r\n+    static List<Annotation> getMetaAnnotations(Class<? extends Annotation> annotationType,\r\n+                                               Predicate<Annotation>... metaAnnotationsToFilter) {\r\n+        return getDeclaredAnnotations(annotationType,\r\n+                // Excludes the Java native annotation types or it causes the stack overflow, e.g,\r\n+                // @Target annotates itself\r\n+                excludedType(Target.class),\r\n+                excludedType(Retention.class),\r\n+                excludedType(Documented.class),\r\n+                // Add other predicates\r\n+                and(metaAnnotationsToFilter)\r\n+        );\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all meta annotations from the specified {@link Annotation annotation} type\r\n+     *\r\n+     * @param annotationType      the {@link Annotation annotation} type\r\n+     * @param annotationsToFilter the annotations to filter\r\n+     * @return non-null read-only {@link List}\r\n+     */\r\n+    static List<Annotation> getAllMetaAnnotations(Class<? extends Annotation> annotationType,\r\n+                                                  Predicate<Annotation>... annotationsToFilter) {\r\n+\r\n+        List<Annotation> allMetaAnnotations = new LinkedList<>();\r\n+\r\n+        List<Annotation> metaAnnotations = getMetaAnnotations(annotationType);\r\n+\r\n+        allMetaAnnotations.addAll(metaAnnotations);\r\n+\r\n+        for (Annotation metaAnnotation : metaAnnotations) {\r\n+            // Get the nested meta annotations recursively\r\n+            allMetaAnnotations.addAll(getAllMetaAnnotations(metaAnnotation.annotationType()));\r\n+        }\r\n+\r\n+        return unmodifiableList(filterAll(allMetaAnnotations, annotationsToFilter));\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the annotation that is annotated on the specified element may be a meta-annotation\r\n+     *\r\n+     * @param annotatedElement    the annotated element\r\n+     * @param annotationClassName the class name of annotation\r\n+     * @param <A>                 the required type of annotation\r\n+     * @return If found, return first matched-type {@link Annotation annotation}, or <code>null</code>\r\n+     */\r\n+    static <A extends Annotation> A findAnnotation(AnnotatedElement annotatedElement, String annotationClassName) {\r\n+        return findAnnotation(annotatedElement, resolveAnnotationType(annotatedElement, annotationClassName));\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the annotation that is annotated on the specified element may be a meta-annotation\r\n+     *\r\n+     * @param annotatedElement the annotated element\r\n+     * @param annotationType   the type of annotation\r\n+     * @param <A>              the required type of annotation\r\n+     * @return If found, return first matched-type {@link Annotation annotation}, or <code>null</code>\r\n+     */\r\n+    static <A extends Annotation> A findAnnotation(AnnotatedElement annotatedElement, Class<A> annotationType) {\r\n+        return (A) filterFirst(getAllDeclaredAnnotations(annotatedElement), a -> isSameType(a, annotationType));\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the meta annotations from the the {@link Annotation annotation} type by meta annotation type\r\n+     *\r\n+     * @param annotationType     the {@link Annotation annotation} type\r\n+     * @param metaAnnotationType the meta annotation type\r\n+     * @param <A>                the type of required annotation\r\n+     * @return if found, return all matched results, or get an {@link Collections#emptyList() empty list}\r\n+     */\r\n+    static <A extends Annotation> List<A> findMetaAnnotations(Class<? extends Annotation> annotationType,\r\n+                                                              Class<A> metaAnnotationType) {\r\n+        return (List<A>) getAllMetaAnnotations(annotationType, a -> isSameType(a, metaAnnotationType));\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the meta annotations from the the the annotated element by meta annotation type\r\n+     *\r\n+     * @param annotatedElement   the annotated element\r\n+     * @param metaAnnotationType the meta annotation type\r\n+     * @param <A>                the type of required annotation\r\n+     * @return if found, return all matched results, or get an {@link Collections#emptyList() empty list}\r\n+     */\r\n+    static <A extends Annotation> List<A> findMetaAnnotations(AnnotatedElement annotatedElement,\r\n+                                                              Class<A> metaAnnotationType) {\r\n+        List<A> metaAnnotations = new LinkedList<>();\r\n+\r\n+        for (Annotation annotation : getAllDeclaredAnnotations(annotatedElement)) {\r\n+            metaAnnotations.addAll(findMetaAnnotations(annotation.annotationType(), metaAnnotationType));\r\n+        }\r\n+\r\n+        return unmodifiableList(metaAnnotations);\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the meta annotation from the annotated element by meta annotation type\r\n+     *\r\n+     * @param annotatedElement        the annotated element\r\n+     * @param metaAnnotationClassName the class name of meta annotation\r\n+     * @param <A>                     the type of required annotation\r\n+     * @return {@link #findMetaAnnotation(Class, Class)}\r\n+     */\r\n+    static <A extends Annotation> A findMetaAnnotation(AnnotatedElement annotatedElement,\r\n+                                                       String metaAnnotationClassName) {\r\n+        return findMetaAnnotation(annotatedElement, resolveAnnotationType(annotatedElement, metaAnnotationClassName));\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the meta annotation from the annotation type by meta annotation type\r\n+     *\r\n+     * @param annotationType     the {@link Annotation annotation} type\r\n+     * @param metaAnnotationType the meta annotation type\r\n+     * @param <A>                the type of required annotation\r\n+     * @return If found, return the {@link CollectionUtils#first(Collection)} matched result, return <code>null</code>.\r\n+     * If it requires more result, please consider to use {@link #findMetaAnnotations(Class, Class)}\r\n+     * @see #findMetaAnnotations(Class, Class)\r\n+     */\r\n+    static <A extends Annotation> A findMetaAnnotation(Class<? extends Annotation> annotationType,\r\n+                                                       Class<A> metaAnnotationType) {\r\n+        return first(findMetaAnnotations(annotationType, metaAnnotationType));\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the meta annotation from the annotated element by meta annotation type\r\n+     *\r\n+     * @param annotatedElement   the annotated element\r\n+     * @param metaAnnotationType the meta annotation type\r\n+     * @param <A>                the type of required annotation\r\n+     * @return If found, return the {@link CollectionUtils#first(Collection)} matched result, return <code>null</code>.\r\n+     * If it requires more result, please consider to use {@link #findMetaAnnotations(AnnotatedElement, Class)}\r\n+     * @see #findMetaAnnotations(AnnotatedElement, Class)\r\n+     */\r\n+    static <A extends Annotation> A findMetaAnnotation(AnnotatedElement annotatedElement, Class<A> metaAnnotationType) {\r\n+        return first(findMetaAnnotations(annotatedElement, metaAnnotationType));\r\n+    }\r\n+\r\n+    /**\r\n+     * Tests the annotated element is annotated the specified annotations or not\r\n+     *\r\n+     * @param type            the annotated type\r\n+     * @param matchAll        If <code>true</code>, checking all annotation types are present or not, or match any\r\n+     * @param annotationTypes the specified annotation types\r\n+     * @return If the specified annotation types are present, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    static boolean isAnnotationPresent(Class<?> type,\r\n+                                       boolean matchAll,\r\n+                                       Class<? extends Annotation>... annotationTypes) {\r\n+\r\n+        int size = annotationTypes == null ? 0 : annotationTypes.length;\r\n+\r\n+        if (size < 1) {\r\n+            return false;\r\n+        }\r\n+\r\n+        int presentCount = 0;\r\n+\r\n+        for (int i = 0; i < size; i++) {\r\n+            Class<? extends Annotation> annotationType = annotationTypes[i];\r\n+            if (findAnnotation(type, annotationType) != null || findMetaAnnotation(type, annotationType) != null) {\r\n+                presentCount++;\r\n+            }\r\n+        }\r\n+\r\n+        return matchAll ? presentCount == size : presentCount > 0;\r\n+    }\r\n+\r\n+    /**\r\n+     * Tests the annotated element is annotated the specified annotation or not\r\n+     *\r\n+     * @param type           the annotated type\r\n+     * @param annotationType the class of annotation\r\n+     * @return If the specified annotation type is present, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    static boolean isAnnotationPresent(Class<?> type, Class<? extends Annotation> annotationType) {\r\n+        return isAnnotationPresent(type, true, annotationType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Tests the annotated element is present any specified annotation types\r\n+     *\r\n+     * @param annotatedElement    the annotated element\r\n+     * @param annotationClassName the class name of annotation\r\n+     * @return If any specified annotation types are present, return <code>true</code>\r\n+     */\r\n+    static boolean isAnnotationPresent(AnnotatedElement annotatedElement, String annotationClassName) {\r\n+        ClassLoader classLoader = annotatedElement.getClass().getClassLoader();\r\n+        Class<?> resolvedType = resolveClass(annotationClassName, classLoader);\r\n+        if (!Annotation.class.isAssignableFrom(resolvedType)) {\r\n+            return false;\r\n+        }\r\n+        return isAnnotationPresent(annotatedElement, (Class<? extends Annotation>) resolvedType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Tests the annotated element is present any specified annotation types\r\n+     *\r\n+     * @param annotatedElement the annotated element\r\n+     * @param annotationType   the class of annotation\r\n+     * @return If any specified annotation types are present, return <code>true</code>\r\n+     */\r\n+    static boolean isAnnotationPresent(AnnotatedElement annotatedElement, Class<? extends Annotation> annotationType) {\r\n+        if (isType(annotatedElement)) {\r\n+            return isAnnotationPresent((Class) annotatedElement, annotationType);\r\n+        } else {\r\n+            return annotatedElement.isAnnotationPresent(annotationType) ||\r\n+                    findMetaAnnotation(annotatedElement, annotationType) != null; // to find meta-annotation\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Tests the annotated element is annotated all specified annotations or not\r\n+     *\r\n+     * @param type            the annotated type\r\n+     * @param annotationTypes the specified annotation types\r\n+     * @return If the specified annotation types are present, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    static boolean isAllAnnotationPresent(Class<?> type, Class<? extends Annotation>... annotationTypes) {\r\n+        return isAnnotationPresent(type, true, annotationTypes);\r\n+    }\r\n+\r\n+    /**\r\n+     * Tests the annotated element is present any specified annotation types\r\n+     *\r\n+     * @param type            the annotated type\r\n+     * @param annotationTypes the specified annotation types\r\n+     * @return If any specified annotation types are present, return <code>true</code>\r\n+     */\r\n+    static boolean isAnyAnnotationPresent(Class<?> type,\r\n+                                          Class<? extends Annotation>... annotationTypes) {\r\n+        return isAnnotationPresent(type, false, annotationTypes);\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Get the default value of attribute on the specified annotation\r\n+     *\r\n+     * @param annotation    {@link Annotation} object\r\n+     * @param attributeName the name of attribute\r\n+     * @param <T>           the type of value\r\n+     * @return <code>null</code> if not found\r\n+     * @since 2.7.9\r\n+     */\r\n+    static <T> T getDefaultValue(Annotation annotation, String attributeName) {\r\n+        return getDefaultValue(annotation.annotationType(), attributeName);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the default value of attribute on the specified annotation\r\n+     *\r\n+     * @param annotationType the type of {@link Annotation}\r\n+     * @param attributeName  the name of attribute\r\n+     * @param <T>            the type of value\r\n+     * @return <code>null</code> if not found\r\n+     * @since 2.7.9\r\n+     */\r\n+    static <T> T getDefaultValue(Class<? extends Annotation> annotationType, String attributeName) {\r\n+        Method method = findMethod(annotationType, attributeName);\r\n+        return (T) (method == null ? null : method.getDefaultValue());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/ArrayUtils.java", "source2": "org/apache/dubbo/common/utils/ArrayUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,79 +1,79 @@\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.common.utils;\n-\n-/**\n- * Contains some methods to check array.\n- */\n-public final class ArrayUtils {\n-\n-    private ArrayUtils() {\n-    }\n-\n-    /**\n-     * <p>Checks if the array is null or empty. <p/>\n-     *\n-     * @param array th array to check\n-     * @return {@code true} if the array is null or empty.\n-     */\n-    public static boolean isEmpty(final Object[] array) {\n-        return array == null || array.length == 0;\n-    }\n-\n-    /**\n-     * <p>Checks if the array is not null or empty. <p/>\n-     *\n-     * @param array th array to check\n-     * @return {@code true} if the array is not null or empty.\n-     */\n-    public static boolean isNotEmpty(final Object[] array) {\n-        return !isEmpty(array);\n-    }\n-\n-    public static boolean contains(final String[] array, String valueToFind) {\n-        return indexOf(array, valueToFind, 0) != -1;\n-    }\n-\n-    public static int indexOf(String[] array, String valueToFind, int startIndex) {\n-        if (!isEmpty(array) && valueToFind != null) {\n-            if (startIndex < 0) {\n-                startIndex = 0;\n-            }\n-\n-            for (int i = startIndex; i < array.length; ++i) {\n-                if (valueToFind.equals(array[i])) {\n-                    return i;\n-                }\n-            }\n-\n-        }\n-        return -1;\n-    }\n-\n-    /**\n-     * Convert from variable arguments to array\n-     *\n-     * @param values variable arguments\n-     * @param <T>    The class\n-     * @return array\n-     * @since 2.7.9\n-     */\n-    public static <T> T[] of(T... values) {\n-        return values;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+\r\n+package org.apache.dubbo.common.utils;\r\n+\r\n+/**\r\n+ * Contains some methods to check array.\r\n+ */\r\n+public final class ArrayUtils {\r\n+\r\n+    private ArrayUtils() {\r\n+    }\r\n+\r\n+    /**\r\n+     * <p>Checks if the array is null or empty. <p/>\r\n+     *\r\n+     * @param array th array to check\r\n+     * @return {@code true} if the array is null or empty.\r\n+     */\r\n+    public static boolean isEmpty(final Object[] array) {\r\n+        return array == null || array.length == 0;\r\n+    }\r\n+\r\n+    /**\r\n+     * <p>Checks if the array is not null or empty. <p/>\r\n+     *\r\n+     * @param array th array to check\r\n+     * @return {@code true} if the array is not null or empty.\r\n+     */\r\n+    public static boolean isNotEmpty(final Object[] array) {\r\n+        return !isEmpty(array);\r\n+    }\r\n+\r\n+    public static boolean contains(final String[] array, String valueToFind) {\r\n+        return indexOf(array, valueToFind, 0) != -1;\r\n+    }\r\n+\r\n+    public static int indexOf(String[] array, String valueToFind, int startIndex) {\r\n+        if (!isEmpty(array) && valueToFind != null) {\r\n+            if (startIndex < 0) {\r\n+                startIndex = 0;\r\n+            }\r\n+\r\n+            for (int i = startIndex; i < array.length; ++i) {\r\n+                if (valueToFind.equals(array[i])) {\r\n+                    return i;\r\n+                }\r\n+            }\r\n+\r\n+        }\r\n+        return -1;\r\n+    }\r\n+\r\n+    /**\r\n+     * Convert from variable arguments to array\r\n+     *\r\n+     * @param values variable arguments\r\n+     * @param <T>    The class\r\n+     * @return array\r\n+     * @since 2.7.9\r\n+     */\r\n+    public static <T> T[] of(T... values) {\r\n+        return values;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/CharSequenceComparator.java", "source2": "org/apache/dubbo/common/utils/CharSequenceComparator.java", "comments": ["Line-ending 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.common.utils;\n-\n-import java.util.Comparator;\n-\n-/**\n- * The {@link Comparator} for {@link CharSequence}\n- *\n- * @since 2.7.6\n- */\n-public class CharSequenceComparator implements Comparator<CharSequence> {\n-\n-    public final static CharSequenceComparator INSTANCE = new CharSequenceComparator();\n-\n-    private CharSequenceComparator() {\n-    }\n-\n-    @Override\n-    public int compare(CharSequence c1, CharSequence c2) {\n-        return c1.toString().compareTo(c2.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.common.utils;\r\n+\r\n+import java.util.Comparator;\r\n+\r\n+/**\r\n+ * The {@link Comparator} for {@link CharSequence}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class CharSequenceComparator implements Comparator<CharSequence> {\r\n+\r\n+    public final static CharSequenceComparator INSTANCE = new CharSequenceComparator();\r\n+\r\n+    private CharSequenceComparator() {\r\n+    }\r\n+\r\n+    @Override\r\n+    public int compare(CharSequence c1, CharSequence c2) {\r\n+        return c1.toString().compareTo(c2.toString());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/ClassHelper.java", "source2": "org/apache/dubbo/common/utils/ClassHelper.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,153 +1,153 @@\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.common.utils;\n-\n-\n-import java.lang.reflect.Method;\n-\n-/**\n- * @see org.apache.dubbo.common.utils.ClassUtils\n- * @deprecated Replace to <code>ClassUtils</code>\n- */\n-public class ClassHelper {\n-    public static Class<?> forNameWithThreadContextClassLoader(String name) throws ClassNotFoundException {\n-        return ClassUtils.forName(name, Thread.currentThread().getContextClassLoader());\n-    }\n-\n-    public static Class<?> forNameWithCallerClassLoader(String name, Class<?> caller) throws ClassNotFoundException {\n-        return ClassUtils.forName(name, caller.getClassLoader());\n-    }\n-\n-    public static ClassLoader getCallerClassLoader(Class<?> caller) {\n-        return caller.getClassLoader();\n-    }\n-\n-    /**\n-     * get class loader\n-     *\n-     * @param clazz\n-     * @return class loader\n-     */\n-    public static ClassLoader getClassLoader(Class<?> clazz) {\n-        return ClassUtils.getClassLoader(clazz);\n-    }\n-\n-    /**\n-     * Return the default ClassLoader to use: typically the thread context\n-     * ClassLoader, if available; the ClassLoader that loaded the ClassUtils\n-     * class will be used as fallback.\n-     * <p>\n-     * Call this method if you intend to use the thread context ClassLoader in a\n-     * scenario where you absolutely need a non-null ClassLoader reference: for\n-     * example, for class path resource loading (but not necessarily for\n-     * <code>Class.forName</code>, which accepts a <code>null</code> ClassLoader\n-     * reference as well).\n-     *\n-     * @return the default ClassLoader (never <code>null</code>)\n-     * @see java.lang.Thread#getContextClassLoader()\n-     */\n-    public static ClassLoader getClassLoader() {\n-        return getClassLoader(ClassHelper.class);\n-    }\n-\n-    /**\n-     * Same as <code>Class.forName()</code>, except that it works for primitive\n-     * types.\n-     */\n-    public static Class<?> forName(String name) throws ClassNotFoundException {\n-        return forName(name, getClassLoader());\n-    }\n-\n-    /**\n-     * Replacement for <code>Class.forName()</code> that also returns Class\n-     * instances for primitives (like \"int\") and array class names (like\n-     * \"String[]\").\n-     *\n-     * @param name        the name of the Class\n-     * @param classLoader the class loader to use (may be <code>null</code>,\n-     *                    which indicates the default class loader)\n-     * @return Class instance for the supplied name\n-     * @throws ClassNotFoundException if the class was not found\n-     * @throws LinkageError           if the class file could not be loaded\n-     * @see Class#forName(String, boolean, ClassLoader)\n-     */\n-    public static Class<?> forName(String name, ClassLoader classLoader)\n-            throws ClassNotFoundException, LinkageError {\n-        return ClassUtils.forName(name, classLoader);\n-    }\n-\n-    /**\n-     * Resolve the given class name as primitive class, if appropriate,\n-     * according to the JVM's naming rules for primitive classes.\n-     * <p>\n-     * Also supports the JVM's internal class names for primitive arrays. Does\n-     * <i>not</i> support the \"[]\" suffix notation for primitive arrays; this is\n-     * only supported by {@link #forName}.\n-     *\n-     * @param name the name of the potentially primitive class\n-     * @return the primitive class, or <code>null</code> if the name does not\n-     * denote a primitive class or primitive array class\n-     */\n-    public static Class<?> resolvePrimitiveClassName(String name) {\n-        return ClassUtils.resolvePrimitiveClassName(name);\n-    }\n-\n-    public static String toShortString(Object obj) {\n-        return ClassUtils.toShortString(obj);\n-\n-    }\n-\n-    public static String simpleClassName(Class<?> clazz) {\n-        return ClassUtils.simpleClassName(clazz);\n-    }\n-\n-    /**\n-     * @see org.apache.dubbo.common.utils.MethodUtils#isSetter(Method)\n-     * @deprecated Replace to <code>MethodUtils#isSetter(Method)</code>\n-     */\n-    public static boolean isSetter(Method method) {\n-        return MethodUtils.isSetter(method);\n-    }\n-\n-    /**\n-     * @see org.apache.dubbo.common.utils.MethodUtils#isGetter(Method) (Method)\n-     * @deprecated Replace to <code>MethodUtils#isGetter(Method)</code>\n-     */\n-    public static boolean isGetter(Method method) {\n-        return MethodUtils.isGetter(method);\n-    }\n-\n-    public static boolean isPrimitive(Class<?> type) {\n-        return ClassUtils.isPrimitive(type);\n-    }\n-\n-    public static Object convertPrimitive(Class<?> type, String value) {\n-        return ClassUtils.convertPrimitive(type,value);\n-    }\n-\n-\n-    /**\n-     * We only check boolean value at this moment.\n-     *\n-     * @param type\n-     * @param value\n-     * @return\n-     */\n-    public static boolean isTypeMatch(Class<?> type, String value) {\n-    return ClassUtils.isTypeMatch(type,value);\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.common.utils;\r\n+\r\n+\r\n+import java.lang.reflect.Method;\r\n+\r\n+/**\r\n+ * @see org.apache.dubbo.common.utils.ClassUtils\r\n+ * @deprecated Replace to <code>ClassUtils</code>\r\n+ */\r\n+public class ClassHelper {\r\n+    public static Class<?> forNameWithThreadContextClassLoader(String name) throws ClassNotFoundException {\r\n+        return ClassUtils.forName(name, Thread.currentThread().getContextClassLoader());\r\n+    }\r\n+\r\n+    public static Class<?> forNameWithCallerClassLoader(String name, Class<?> caller) throws ClassNotFoundException {\r\n+        return ClassUtils.forName(name, caller.getClassLoader());\r\n+    }\r\n+\r\n+    public static ClassLoader getCallerClassLoader(Class<?> caller) {\r\n+        return caller.getClassLoader();\r\n+    }\r\n+\r\n+    /**\r\n+     * get class loader\r\n+     *\r\n+     * @param clazz\r\n+     * @return class loader\r\n+     */\r\n+    public static ClassLoader getClassLoader(Class<?> clazz) {\r\n+        return ClassUtils.getClassLoader(clazz);\r\n+    }\r\n+\r\n+    /**\r\n+     * Return the default ClassLoader to use: typically the thread context\r\n+     * ClassLoader, if available; the ClassLoader that loaded the ClassUtils\r\n+     * class will be used as fallback.\r\n+     * <p>\r\n+     * Call this method if you intend to use the thread context ClassLoader in a\r\n+     * scenario where you absolutely need a non-null ClassLoader reference: for\r\n+     * example, for class path resource loading (but not necessarily for\r\n+     * <code>Class.forName</code>, which accepts a <code>null</code> ClassLoader\r\n+     * reference as well).\r\n+     *\r\n+     * @return the default ClassLoader (never <code>null</code>)\r\n+     * @see java.lang.Thread#getContextClassLoader()\r\n+     */\r\n+    public static ClassLoader getClassLoader() {\r\n+        return getClassLoader(ClassHelper.class);\r\n+    }\r\n+\r\n+    /**\r\n+     * Same as <code>Class.forName()</code>, except that it works for primitive\r\n+     * types.\r\n+     */\r\n+    public static Class<?> forName(String name) throws ClassNotFoundException {\r\n+        return forName(name, getClassLoader());\r\n+    }\r\n+\r\n+    /**\r\n+     * Replacement for <code>Class.forName()</code> that also returns Class\r\n+     * instances for primitives (like \"int\") and array class names (like\r\n+     * \"String[]\").\r\n+     *\r\n+     * @param name        the name of the Class\r\n+     * @param classLoader the class loader to use (may be <code>null</code>,\r\n+     *                    which indicates the default class loader)\r\n+     * @return Class instance for the supplied name\r\n+     * @throws ClassNotFoundException if the class was not found\r\n+     * @throws LinkageError           if the class file could not be loaded\r\n+     * @see Class#forName(String, boolean, ClassLoader)\r\n+     */\r\n+    public static Class<?> forName(String name, ClassLoader classLoader)\r\n+            throws ClassNotFoundException, LinkageError {\r\n+        return ClassUtils.forName(name, classLoader);\r\n+    }\r\n+\r\n+    /**\r\n+     * Resolve the given class name as primitive class, if appropriate,\r\n+     * according to the JVM's naming rules for primitive classes.\r\n+     * <p>\r\n+     * Also supports the JVM's internal class names for primitive arrays. Does\r\n+     * <i>not</i> support the \"[]\" suffix notation for primitive arrays; this is\r\n+     * only supported by {@link #forName}.\r\n+     *\r\n+     * @param name the name of the potentially primitive class\r\n+     * @return the primitive class, or <code>null</code> if the name does not\r\n+     * denote a primitive class or primitive array class\r\n+     */\r\n+    public static Class<?> resolvePrimitiveClassName(String name) {\r\n+        return ClassUtils.resolvePrimitiveClassName(name);\r\n+    }\r\n+\r\n+    public static String toShortString(Object obj) {\r\n+        return ClassUtils.toShortString(obj);\r\n+\r\n+    }\r\n+\r\n+    public static String simpleClassName(Class<?> clazz) {\r\n+        return ClassUtils.simpleClassName(clazz);\r\n+    }\r\n+\r\n+    /**\r\n+     * @see org.apache.dubbo.common.utils.MethodUtils#isSetter(Method)\r\n+     * @deprecated Replace to <code>MethodUtils#isSetter(Method)</code>\r\n+     */\r\n+    public static boolean isSetter(Method method) {\r\n+        return MethodUtils.isSetter(method);\r\n+    }\r\n+\r\n+    /**\r\n+     * @see org.apache.dubbo.common.utils.MethodUtils#isGetter(Method) (Method)\r\n+     * @deprecated Replace to <code>MethodUtils#isGetter(Method)</code>\r\n+     */\r\n+    public static boolean isGetter(Method method) {\r\n+        return MethodUtils.isGetter(method);\r\n+    }\r\n+\r\n+    public static boolean isPrimitive(Class<?> type) {\r\n+        return ClassUtils.isPrimitive(type);\r\n+    }\r\n+\r\n+    public static Object convertPrimitive(Class<?> type, String value) {\r\n+        return ClassUtils.convertPrimitive(type,value);\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * We only check boolean value at this moment.\r\n+     *\r\n+     * @param type\r\n+     * @param value\r\n+     * @return\r\n+     */\r\n+    public static boolean isTypeMatch(Class<?> type, String value) {\r\n+    return ClassUtils.isTypeMatch(type,value);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/ClassUtils.java", "source2": "org/apache/dubbo/common/utils/ClassUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,496 +1,496 @@\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.common.utils;\n-\n-\n-import java.lang.reflect.Array;\n-import java.math.BigDecimal;\n-import java.math.BigInteger;\n-import java.util.Arrays;\n-import java.util.Date;\n-import java.util.HashMap;\n-import java.util.HashSet;\n-import java.util.LinkedHashSet;\n-import java.util.LinkedList;\n-import java.util.Map;\n-import java.util.Objects;\n-import java.util.Queue;\n-import java.util.Set;\n-import java.util.function.Predicate;\n-\n-import static java.util.Collections.emptySet;\n-import static java.util.Collections.unmodifiableSet;\n-import static org.apache.dubbo.common.function.Streams.filterAll;\n-import static org.apache.dubbo.common.utils.ArrayUtils.isNotEmpty;\n-import static org.apache.dubbo.common.utils.CollectionUtils.ofSet;\n-\n-public class ClassUtils {\n-    /**\n-     * Suffix for array class names: \"[]\"\n-     */\n-    public static final String ARRAY_SUFFIX = \"[]\";\n-    /**\n-     * Simple Types including:\n-     * <ul>\n-     *     <li>{@link Void}</li>\n-     *     <li>{@link Boolean}</li>\n-     *     <li>{@link Character}</li>\n-     *     <li>{@link Byte}</li>\n-     *     <li>{@link Integer}</li>\n-     *     <li>{@link Float}</li>\n-     *     <li>{@link Double}</li>\n-     *     <li>{@link String}</li>\n-     *     <li>{@link BigDecimal}</li>\n-     *     <li>{@link BigInteger}</li>\n-     *     <li>{@link Date}</li>\n-     *     <li>{@link Object}</li>\n-     * </ul>\n-     *\n-     * @see javax.management.openmbean.SimpleType\n-     * @since 2.7.6\n-     */\n-    public static final Set<Class<?>> SIMPLE_TYPES = ofSet(\n-            Void.class,\n-            Boolean.class,\n-            Character.class,\n-            Byte.class,\n-            Short.class,\n-            Integer.class,\n-            Long.class,\n-            Float.class,\n-            Double.class,\n-            String.class,\n-            BigDecimal.class,\n-            BigInteger.class,\n-            Date.class,\n-            Object.class\n-    );\n-    /**\n-     * Prefix for internal array class names: \"[L\"\n-     */\n-    private static final String INTERNAL_ARRAY_PREFIX = \"[L\";\n-    /**\n-     * Map with primitive type name as key and corresponding primitive type as\n-     * value, for example: \"int\" -> \"int.class\".\n-     */\n-    private static final Map<String, Class<?>> PRIMITIVE_TYPE_NAME_MAP = new HashMap<String, Class<?>>(32);\n-    /**\n-     * Map with primitive wrapper type as key and corresponding primitive type\n-     * as value, for example: Integer.class -> int.class.\n-     */\n-    private static final Map<Class<?>, Class<?>> PRIMITIVE_WRAPPER_TYPE_MAP = new HashMap<Class<?>, Class<?>>(16);\n-    private static final char PACKAGE_SEPARATOR_CHAR = '.';\n-\n-    static {\n-        PRIMITIVE_WRAPPER_TYPE_MAP.put(Boolean.class, boolean.class);\n-        PRIMITIVE_WRAPPER_TYPE_MAP.put(Byte.class, byte.class);\n-        PRIMITIVE_WRAPPER_TYPE_MAP.put(Character.class, char.class);\n-        PRIMITIVE_WRAPPER_TYPE_MAP.put(Double.class, double.class);\n-        PRIMITIVE_WRAPPER_TYPE_MAP.put(Float.class, float.class);\n-        PRIMITIVE_WRAPPER_TYPE_MAP.put(Integer.class, int.class);\n-        PRIMITIVE_WRAPPER_TYPE_MAP.put(Long.class, long.class);\n-        PRIMITIVE_WRAPPER_TYPE_MAP.put(Short.class, short.class);\n-\n-        Set<Class<?>> primitiveTypeNames = new HashSet<>(32);\n-        primitiveTypeNames.addAll(PRIMITIVE_WRAPPER_TYPE_MAP.values());\n-        primitiveTypeNames.addAll(Arrays\n-                .asList(boolean[].class, byte[].class, char[].class, double[].class,\n-                        float[].class, int[].class, long[].class, short[].class));\n-        for (Class<?> primitiveTypeName : primitiveTypeNames) {\n-            PRIMITIVE_TYPE_NAME_MAP.put(primitiveTypeName.getName(), primitiveTypeName);\n-        }\n-    }\n-\n-    public static Class<?> forNameWithThreadContextClassLoader(String name)\n-            throws ClassNotFoundException {\n-        return forName(name, Thread.currentThread().getContextClassLoader());\n-    }\n-\n-    public static Class<?> forNameWithCallerClassLoader(String name, Class<?> caller)\n-            throws ClassNotFoundException {\n-        return forName(name, caller.getClassLoader());\n-    }\n-\n-    public static ClassLoader getCallerClassLoader(Class<?> caller) {\n-        return caller.getClassLoader();\n-    }\n-\n-    /**\n-     * get class loader\n-     *\n-     * @param clazz\n-     * @return class loader\n-     */\n-    public static ClassLoader getClassLoader(Class<?> clazz) {\n-        ClassLoader cl = null;\n-        try {\n-            cl = Thread.currentThread().getContextClassLoader();\n-        } catch (Throwable ex) {\n-            // Cannot access thread context ClassLoader - falling back to system class loader...\n-        }\n-        if (cl == null) {\n-            // No thread context class loader -> use class loader of this class.\n-            cl = clazz.getClassLoader();\n-            if (cl == null) {\n-                // getClassLoader() returning null indicates the bootstrap ClassLoader\n-                try {\n-                    cl = ClassLoader.getSystemClassLoader();\n-                } catch (Throwable ex) {\n-                    // Cannot access system ClassLoader - oh well, maybe the caller can live with null...\n-                }\n-            }\n-        }\n-\n-        return cl;\n-    }\n-\n-    /**\n-     * Return the default ClassLoader to use: typically the thread context\n-     * ClassLoader, if available; the ClassLoader that loaded the ClassUtils\n-     * class will be used as fallback.\n-     * <p>\n-     * Call this method if you intend to use the thread context ClassLoader in a\n-     * scenario where you absolutely need a non-null ClassLoader reference: for\n-     * example, for class path resource loading (but not necessarily for\n-     * <code>Class.forName</code>, which accepts a <code>null</code> ClassLoader\n-     * reference as well).\n-     *\n-     * @return the default ClassLoader (never <code>null</code>)\n-     * @see java.lang.Thread#getContextClassLoader()\n-     */\n-    public static ClassLoader getClassLoader() {\n-        return getClassLoader(ClassUtils.class);\n-    }\n-\n-    /**\n-     * Same as <code>Class.forName()</code>, except that it works for primitive\n-     * types.\n-     */\n-    public static Class<?> forName(String name) throws ClassNotFoundException {\n-        return forName(name, getClassLoader());\n-    }\n-\n-    /**\n-     * Replacement for <code>Class.forName()</code> that also returns Class\n-     * instances for primitives (like \"int\") and array class names (like\n-     * \"String[]\").\n-     *\n-     * @param name        the name of the Class\n-     * @param classLoader the class loader to use (may be <code>null</code>,\n-     *                    which indicates the default class loader)\n-     * @return Class instance for the supplied name\n-     * @throws ClassNotFoundException if the class was not found\n-     * @throws LinkageError           if the class file could not be loaded\n-     * @see Class#forName(String, boolean, ClassLoader)\n-     */\n-    public static Class<?> forName(String name, ClassLoader classLoader)\n-            throws ClassNotFoundException, LinkageError {\n-\n-        Class<?> clazz = resolvePrimitiveClassName(name);\n-        if (clazz != null) {\n-            return clazz;\n-        }\n-\n-        // \"java.lang.String[]\" style arrays\n-        if (name.endsWith(ARRAY_SUFFIX)) {\n-            String elementClassName = name.substring(0, name.length() - ARRAY_SUFFIX.length());\n-            Class<?> elementClass = forName(elementClassName, classLoader);\n-            return Array.newInstance(elementClass, 0).getClass();\n-        }\n-\n-        // \"[Ljava.lang.String;\" style arrays\n-        int internalArrayMarker = name.indexOf(INTERNAL_ARRAY_PREFIX);\n-        if (internalArrayMarker != -1 && name.endsWith(\";\")) {\n-            String elementClassName = null;\n-            if (internalArrayMarker == 0) {\n-                elementClassName = name\n-                        .substring(INTERNAL_ARRAY_PREFIX.length(), name.length() - 1);\n-            } else if (name.startsWith(\"[\")) {\n-                elementClassName = name.substring(1);\n-            }\n-            Class<?> elementClass = forName(elementClassName, classLoader);\n-            return Array.newInstance(elementClass, 0).getClass();\n-        }\n-\n-        ClassLoader classLoaderToUse = classLoader;\n-        if (classLoaderToUse == null) {\n-            classLoaderToUse = getClassLoader();\n-        }\n-        return classLoaderToUse.loadClass(name);\n-    }\n-\n-    /**\n-     * Resolve the given class name as primitive class, if appropriate,\n-     * according to the JVM's naming rules for primitive classes.\n-     * <p>\n-     * Also supports the JVM's internal class names for primitive arrays. Does\n-     * <i>not</i> support the \"[]\" suffix notation for primitive arrays; this is\n-     * only supported by {@link #forName}.\n-     *\n-     * @param name the name of the potentially primitive class\n-     * @return the primitive class, or <code>null</code> if the name does not\n-     * denote a primitive class or primitive array class\n-     */\n-    public static Class<?> resolvePrimitiveClassName(String name) {\n-        Class<?> result = null;\n-        // Most class names will be quite long, considering that they\n-        // SHOULD sit in a package, so a length check is worthwhile.\n-        if (name != null && name.length() <= 8) {\n-            // Could be a primitive - likely.\n-            result = (Class<?>) PRIMITIVE_TYPE_NAME_MAP.get(name);\n-        }\n-        return result;\n-    }\n-\n-    public static String toShortString(Object obj) {\n-        if (obj == null) {\n-            return \"null\";\n-        }\n-        return obj.getClass().getSimpleName() + \"@\" + System.identityHashCode(obj);\n-\n-    }\n-\n-    public static String simpleClassName(Class<?> clazz) {\n-        if (clazz == null) {\n-            throw new NullPointerException(\"clazz\");\n-        }\n-        String className = clazz.getName();\n-        final int lastDotIdx = className.lastIndexOf(PACKAGE_SEPARATOR_CHAR);\n-        if (lastDotIdx > -1) {\n-            return className.substring(lastDotIdx + 1);\n-        }\n-        return className;\n-    }\n-\n-\n-    /**\n-     * The specified type is primitive type or simple type\n-     *\n-     * @param type the type to test\n-     * @return\n-     * @deprecated as 2.7.6, use {@link Class#isPrimitive()} plus {@link #isSimpleType(Class)} instead\n-     */\n-    public static boolean isPrimitive(Class<?> type) {\n-        return type != null && (type.isPrimitive() || isSimpleType(type));\n-    }\n-\n-    /**\n-     * The specified type is simple type or not\n-     *\n-     * @param type the type to test\n-     * @return if <code>type</code> is one element of {@link #SIMPLE_TYPES}, return <code>true</code>, or <code>false</code>\n-     * @see #SIMPLE_TYPES\n-     * @since 2.7.6\n-     */\n-    public static boolean isSimpleType(Class<?> type) {\n-        return SIMPLE_TYPES.contains(type);\n-    }\n-\n-    public static Object convertPrimitive(Class<?> type, String value) {\n-        if (value == null) {\n-            return null;\n-        } else if (type == char.class || type == Character.class) {\n-            return value.length() > 0 ? value.charAt(0) : '\\0';\n-        } else if (type == boolean.class || type == Boolean.class) {\n-            return Boolean.valueOf(value);\n-        }\n-        try {\n-            if (type == byte.class || type == Byte.class) {\n-                return Byte.valueOf(value);\n-            } else if (type == short.class || type == Short.class) {\n-                return Short.valueOf(value);\n-            } else if (type == int.class || type == Integer.class) {\n-                return Integer.valueOf(value);\n-            } else if (type == long.class || type == Long.class) {\n-                return Long.valueOf(value);\n-            } else if (type == float.class || type == Float.class) {\n-                return Float.valueOf(value);\n-            } else if (type == double.class || type == Double.class) {\n-                return Double.valueOf(value);\n-            }\n-        } catch (NumberFormatException e) {\n-            return null;\n-        }\n-        return value;\n-    }\n-\n-\n-    /**\n-     * We only check boolean value at this moment.\n-     *\n-     * @param type\n-     * @param value\n-     * @return\n-     */\n-    public static boolean isTypeMatch(Class<?> type, String value) {\n-        if ((type == boolean.class || type == Boolean.class)\n-                && !(\"true\".equals(value) || \"false\".equals(value))) {\n-            return false;\n-        }\n-        return true;\n-    }\n-\n-    /**\n-     * Get all super classes from the specified type\n-     *\n-     * @param type         the specified type\n-     * @param classFilters the filters for classes\n-     * @return non-null read-only {@link Set}\n-     * @since 2.7.6\n-     */\n-    public static Set<Class<?>> getAllSuperClasses(Class<?> type, Predicate<Class<?>>... classFilters) {\n-\n-        Set<Class<?>> allSuperClasses = new LinkedHashSet<>();\n-\n-        Class<?> superClass = type.getSuperclass();\n-        while (superClass != null) {\n-            // add current super class\n-            allSuperClasses.add(superClass);\n-            superClass = superClass.getSuperclass();\n-        }\n-\n-        return unmodifiableSet(filterAll(allSuperClasses, classFilters));\n-    }\n-\n-    /**\n-     * Get all interfaces from the specified type\n-     *\n-     * @param type             the specified type\n-     * @param interfaceFilters the filters for interfaces\n-     * @return non-null read-only {@link Set}\n-     * @since 2.7.6\n-     */\n-    public static Set<Class<?>> getAllInterfaces(Class<?> type, Predicate<Class<?>>... interfaceFilters) {\n-        if (type == null || type.isPrimitive()) {\n-            return emptySet();\n-        }\n-\n-        Set<Class<?>> allInterfaces = new LinkedHashSet<>();\n-        Set<Class<?>> resolved = new LinkedHashSet<>();\n-        Queue<Class<?>> waitResolve = new LinkedList<>();\n-\n-        resolved.add(type);\n-        Class<?> clazz = type;\n-        while (clazz != null) {\n-\n-            Class<?>[] interfaces = clazz.getInterfaces();\n-\n-            if (isNotEmpty(interfaces)) {\n-                // add current interfaces\n-                Arrays.stream(interfaces)\n-                        .filter(resolved::add)\n-                        .forEach(cls -> {\n-                            allInterfaces.add(cls);\n-                            waitResolve.add(cls);\n-                        });\n-            }\n-\n-            // add all super classes to waitResolve\n-            getAllSuperClasses(clazz)\n-                    .stream()\n-                    .filter(resolved::add)\n-                    .forEach(waitResolve::add);\n-\n-            clazz = waitResolve.poll();\n-        }\n-\n-        return filterAll(allInterfaces, interfaceFilters);\n-    }\n-\n-    /**\n-     * Get all inherited types from the specified type\n-     *\n-     * @param type        the specified type\n-     * @param typeFilters the filters for types\n-     * @return non-null read-only {@link Set}\n-     * @since 2.7.6\n-     */\n-    public static Set<Class<?>> getAllInheritedTypes(Class<?> type, Predicate<Class<?>>... typeFilters) {\n-        // Add all super classes\n-        Set<Class<?>> types = new LinkedHashSet<>(getAllSuperClasses(type, typeFilters));\n-        // Add all interface classes\n-        types.addAll(getAllInterfaces(type, typeFilters));\n-        return unmodifiableSet(types);\n-    }\n-\n-\n-    /**\n-     * the semantics is same as {@link Class#isAssignableFrom(Class)}\n-     *\n-     * @param superType  the super type\n-     * @param targetType the target type\n-     * @return see {@link Class#isAssignableFrom(Class)}\n-     * @since 2.7.6\n-     */\n-    public static boolean isAssignableFrom(Class<?> superType, Class<?> targetType) {\n-        // any argument is null\n-        if (superType == null || targetType == null) {\n-            return false;\n-        }\n-        // equals\n-        if (Objects.equals(superType, targetType)) {\n-            return true;\n-        }\n-        // isAssignableFrom\n-        return superType.isAssignableFrom(targetType);\n-    }\n-\n-    /**\n-     * Test the specified class name is present in the {@link ClassLoader}\n-     *\n-     * @param className   the name of {@link Class}\n-     * @param classLoader {@link ClassLoader}\n-     * @return If found, return <code>true</code>\n-     * @since 2.7.6\n-     */\n-    public static boolean isPresent(String className, ClassLoader classLoader) {\n-        try {\n-            forName(className, classLoader);\n-        } catch (Throwable ignored) { // Ignored\n-            return false;\n-        }\n-        return true;\n-    }\n-\n-    /**\n-     * Resolve the {@link Class} by the specified name and {@link ClassLoader}\n-     *\n-     * @param className   the name of {@link Class}\n-     * @param classLoader {@link ClassLoader}\n-     * @return If can't be resolved , return <code>null</code>\n-     * @since 2.7.6\n-     */\n-    public static Class<?> resolveClass(String className, ClassLoader classLoader) {\n-        Class<?> targetClass = null;\n-        try {\n-            targetClass = forName(className, classLoader);\n-        } catch (Throwable ignored) { // Ignored\n-        }\n-        return targetClass;\n-    }\n-\n-    /**\n-     * Is generic class or not?\n-     *\n-     * @param type the target type\n-     * @return if the target type is not null or <code>void</code> or Void.class, return <code>true</code>, or false\n-     * @since 2.7.6\n-     */\n-    public static boolean isGenericClass(Class<?> type) {\n-        return type != null && !void.class.equals(type) && !Void.class.equals(type);\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.common.utils;\r\n+\r\n+\r\n+import java.lang.reflect.Array;\r\n+import java.math.BigDecimal;\r\n+import java.math.BigInteger;\r\n+import java.util.Arrays;\r\n+import java.util.Date;\r\n+import java.util.HashMap;\r\n+import java.util.HashSet;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.LinkedList;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+import java.util.Queue;\r\n+import java.util.Set;\r\n+import java.util.function.Predicate;\r\n+\r\n+import static java.util.Collections.emptySet;\r\n+import static java.util.Collections.unmodifiableSet;\r\n+import static org.apache.dubbo.common.function.Streams.filterAll;\r\n+import static org.apache.dubbo.common.utils.ArrayUtils.isNotEmpty;\r\n+import static org.apache.dubbo.common.utils.CollectionUtils.ofSet;\r\n+\r\n+public class ClassUtils {\r\n+    /**\r\n+     * Suffix for array class names: \"[]\"\r\n+     */\r\n+    public static final String ARRAY_SUFFIX = \"[]\";\r\n+    /**\r\n+     * Simple Types including:\r\n+     * <ul>\r\n+     *     <li>{@link Void}</li>\r\n+     *     <li>{@link Boolean}</li>\r\n+     *     <li>{@link Character}</li>\r\n+     *     <li>{@link Byte}</li>\r\n+     *     <li>{@link Integer}</li>\r\n+     *     <li>{@link Float}</li>\r\n+     *     <li>{@link Double}</li>\r\n+     *     <li>{@link String}</li>\r\n+     *     <li>{@link BigDecimal}</li>\r\n+     *     <li>{@link BigInteger}</li>\r\n+     *     <li>{@link Date}</li>\r\n+     *     <li>{@link Object}</li>\r\n+     * </ul>\r\n+     *\r\n+     * @see javax.management.openmbean.SimpleType\r\n+     * @since 2.7.6\r\n+     */\r\n+    public static final Set<Class<?>> SIMPLE_TYPES = ofSet(\r\n+            Void.class,\r\n+            Boolean.class,\r\n+            Character.class,\r\n+            Byte.class,\r\n+            Short.class,\r\n+            Integer.class,\r\n+            Long.class,\r\n+            Float.class,\r\n+            Double.class,\r\n+            String.class,\r\n+            BigDecimal.class,\r\n+            BigInteger.class,\r\n+            Date.class,\r\n+            Object.class\r\n+    );\r\n+    /**\r\n+     * Prefix for internal array class names: \"[L\"\r\n+     */\r\n+    private static final String INTERNAL_ARRAY_PREFIX = \"[L\";\r\n+    /**\r\n+     * Map with primitive type name as key and corresponding primitive type as\r\n+     * value, for example: \"int\" -> \"int.class\".\r\n+     */\r\n+    private static final Map<String, Class<?>> PRIMITIVE_TYPE_NAME_MAP = new HashMap<String, Class<?>>(32);\r\n+    /**\r\n+     * Map with primitive wrapper type as key and corresponding primitive type\r\n+     * as value, for example: Integer.class -> int.class.\r\n+     */\r\n+    private static final Map<Class<?>, Class<?>> PRIMITIVE_WRAPPER_TYPE_MAP = new HashMap<Class<?>, Class<?>>(16);\r\n+    private static final char PACKAGE_SEPARATOR_CHAR = '.';\r\n+\r\n+    static {\r\n+        PRIMITIVE_WRAPPER_TYPE_MAP.put(Boolean.class, boolean.class);\r\n+        PRIMITIVE_WRAPPER_TYPE_MAP.put(Byte.class, byte.class);\r\n+        PRIMITIVE_WRAPPER_TYPE_MAP.put(Character.class, char.class);\r\n+        PRIMITIVE_WRAPPER_TYPE_MAP.put(Double.class, double.class);\r\n+        PRIMITIVE_WRAPPER_TYPE_MAP.put(Float.class, float.class);\r\n+        PRIMITIVE_WRAPPER_TYPE_MAP.put(Integer.class, int.class);\r\n+        PRIMITIVE_WRAPPER_TYPE_MAP.put(Long.class, long.class);\r\n+        PRIMITIVE_WRAPPER_TYPE_MAP.put(Short.class, short.class);\r\n+\r\n+        Set<Class<?>> primitiveTypeNames = new HashSet<>(32);\r\n+        primitiveTypeNames.addAll(PRIMITIVE_WRAPPER_TYPE_MAP.values());\r\n+        primitiveTypeNames.addAll(Arrays\r\n+                .asList(boolean[].class, byte[].class, char[].class, double[].class,\r\n+                        float[].class, int[].class, long[].class, short[].class));\r\n+        for (Class<?> primitiveTypeName : primitiveTypeNames) {\r\n+            PRIMITIVE_TYPE_NAME_MAP.put(primitiveTypeName.getName(), primitiveTypeName);\r\n+        }\r\n+    }\r\n+\r\n+    public static Class<?> forNameWithThreadContextClassLoader(String name)\r\n+            throws ClassNotFoundException {\r\n+        return forName(name, Thread.currentThread().getContextClassLoader());\r\n+    }\r\n+\r\n+    public static Class<?> forNameWithCallerClassLoader(String name, Class<?> caller)\r\n+            throws ClassNotFoundException {\r\n+        return forName(name, caller.getClassLoader());\r\n+    }\r\n+\r\n+    public static ClassLoader getCallerClassLoader(Class<?> caller) {\r\n+        return caller.getClassLoader();\r\n+    }\r\n+\r\n+    /**\r\n+     * get class loader\r\n+     *\r\n+     * @param clazz\r\n+     * @return class loader\r\n+     */\r\n+    public static ClassLoader getClassLoader(Class<?> clazz) {\r\n+        ClassLoader cl = null;\r\n+        try {\r\n+            cl = Thread.currentThread().getContextClassLoader();\r\n+        } catch (Throwable ex) {\r\n+            // Cannot access thread context ClassLoader - falling back to system class loader...\r\n+        }\r\n+        if (cl == null) {\r\n+            // No thread context class loader -> use class loader of this class.\r\n+            cl = clazz.getClassLoader();\r\n+            if (cl == null) {\r\n+                // getClassLoader() returning null indicates the bootstrap ClassLoader\r\n+                try {\r\n+                    cl = ClassLoader.getSystemClassLoader();\r\n+                } catch (Throwable ex) {\r\n+                    // Cannot access system ClassLoader - oh well, maybe the caller can live with null...\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        return cl;\r\n+    }\r\n+\r\n+    /**\r\n+     * Return the default ClassLoader to use: typically the thread context\r\n+     * ClassLoader, if available; the ClassLoader that loaded the ClassUtils\r\n+     * class will be used as fallback.\r\n+     * <p>\r\n+     * Call this method if you intend to use the thread context ClassLoader in a\r\n+     * scenario where you absolutely need a non-null ClassLoader reference: for\r\n+     * example, for class path resource loading (but not necessarily for\r\n+     * <code>Class.forName</code>, which accepts a <code>null</code> ClassLoader\r\n+     * reference as well).\r\n+     *\r\n+     * @return the default ClassLoader (never <code>null</code>)\r\n+     * @see java.lang.Thread#getContextClassLoader()\r\n+     */\r\n+    public static ClassLoader getClassLoader() {\r\n+        return getClassLoader(ClassUtils.class);\r\n+    }\r\n+\r\n+    /**\r\n+     * Same as <code>Class.forName()</code>, except that it works for primitive\r\n+     * types.\r\n+     */\r\n+    public static Class<?> forName(String name) throws ClassNotFoundException {\r\n+        return forName(name, getClassLoader());\r\n+    }\r\n+\r\n+    /**\r\n+     * Replacement for <code>Class.forName()</code> that also returns Class\r\n+     * instances for primitives (like \"int\") and array class names (like\r\n+     * \"String[]\").\r\n+     *\r\n+     * @param name        the name of the Class\r\n+     * @param classLoader the class loader to use (may be <code>null</code>,\r\n+     *                    which indicates the default class loader)\r\n+     * @return Class instance for the supplied name\r\n+     * @throws ClassNotFoundException if the class was not found\r\n+     * @throws LinkageError           if the class file could not be loaded\r\n+     * @see Class#forName(String, boolean, ClassLoader)\r\n+     */\r\n+    public static Class<?> forName(String name, ClassLoader classLoader)\r\n+            throws ClassNotFoundException, LinkageError {\r\n+\r\n+        Class<?> clazz = resolvePrimitiveClassName(name);\r\n+        if (clazz != null) {\r\n+            return clazz;\r\n+        }\r\n+\r\n+        // \"java.lang.String[]\" style arrays\r\n+        if (name.endsWith(ARRAY_SUFFIX)) {\r\n+            String elementClassName = name.substring(0, name.length() - ARRAY_SUFFIX.length());\r\n+            Class<?> elementClass = forName(elementClassName, classLoader);\r\n+            return Array.newInstance(elementClass, 0).getClass();\r\n+        }\r\n+\r\n+        // \"[Ljava.lang.String;\" style arrays\r\n+        int internalArrayMarker = name.indexOf(INTERNAL_ARRAY_PREFIX);\r\n+        if (internalArrayMarker != -1 && name.endsWith(\";\")) {\r\n+            String elementClassName = null;\r\n+            if (internalArrayMarker == 0) {\r\n+                elementClassName = name\r\n+                        .substring(INTERNAL_ARRAY_PREFIX.length(), name.length() - 1);\r\n+            } else if (name.startsWith(\"[\")) {\r\n+                elementClassName = name.substring(1);\r\n+            }\r\n+            Class<?> elementClass = forName(elementClassName, classLoader);\r\n+            return Array.newInstance(elementClass, 0).getClass();\r\n+        }\r\n+\r\n+        ClassLoader classLoaderToUse = classLoader;\r\n+        if (classLoaderToUse == null) {\r\n+            classLoaderToUse = getClassLoader();\r\n+        }\r\n+        return classLoaderToUse.loadClass(name);\r\n+    }\r\n+\r\n+    /**\r\n+     * Resolve the given class name as primitive class, if appropriate,\r\n+     * according to the JVM's naming rules for primitive classes.\r\n+     * <p>\r\n+     * Also supports the JVM's internal class names for primitive arrays. Does\r\n+     * <i>not</i> support the \"[]\" suffix notation for primitive arrays; this is\r\n+     * only supported by {@link #forName}.\r\n+     *\r\n+     * @param name the name of the potentially primitive class\r\n+     * @return the primitive class, or <code>null</code> if the name does not\r\n+     * denote a primitive class or primitive array class\r\n+     */\r\n+    public static Class<?> resolvePrimitiveClassName(String name) {\r\n+        Class<?> result = null;\r\n+        // Most class names will be quite long, considering that they\r\n+        // SHOULD sit in a package, so a length check is worthwhile.\r\n+        if (name != null && name.length() <= 8) {\r\n+            // Could be a primitive - likely.\r\n+            result = (Class<?>) PRIMITIVE_TYPE_NAME_MAP.get(name);\r\n+        }\r\n+        return result;\r\n+    }\r\n+\r\n+    public static String toShortString(Object obj) {\r\n+        if (obj == null) {\r\n+            return \"null\";\r\n+        }\r\n+        return obj.getClass().getSimpleName() + \"@\" + System.identityHashCode(obj);\r\n+\r\n+    }\r\n+\r\n+    public static String simpleClassName(Class<?> clazz) {\r\n+        if (clazz == null) {\r\n+            throw new NullPointerException(\"clazz\");\r\n+        }\r\n+        String className = clazz.getName();\r\n+        final int lastDotIdx = className.lastIndexOf(PACKAGE_SEPARATOR_CHAR);\r\n+        if (lastDotIdx > -1) {\r\n+            return className.substring(lastDotIdx + 1);\r\n+        }\r\n+        return className;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * The specified type is primitive type or simple type\r\n+     *\r\n+     * @param type the type to test\r\n+     * @return\r\n+     * @deprecated as 2.7.6, use {@link Class#isPrimitive()} plus {@link #isSimpleType(Class)} instead\r\n+     */\r\n+    public static boolean isPrimitive(Class<?> type) {\r\n+        return type != null && (type.isPrimitive() || isSimpleType(type));\r\n+    }\r\n+\r\n+    /**\r\n+     * The specified type is simple type or not\r\n+     *\r\n+     * @param type the type to test\r\n+     * @return if <code>type</code> is one element of {@link #SIMPLE_TYPES}, return <code>true</code>, or <code>false</code>\r\n+     * @see #SIMPLE_TYPES\r\n+     * @since 2.7.6\r\n+     */\r\n+    public static boolean isSimpleType(Class<?> type) {\r\n+        return SIMPLE_TYPES.contains(type);\r\n+    }\r\n+\r\n+    public static Object convertPrimitive(Class<?> type, String value) {\r\n+        if (value == null) {\r\n+            return null;\r\n+        } else if (type == char.class || type == Character.class) {\r\n+            return value.length() > 0 ? value.charAt(0) : '\\0';\r\n+        } else if (type == boolean.class || type == Boolean.class) {\r\n+            return Boolean.valueOf(value);\r\n+        }\r\n+        try {\r\n+            if (type == byte.class || type == Byte.class) {\r\n+                return Byte.valueOf(value);\r\n+            } else if (type == short.class || type == Short.class) {\r\n+                return Short.valueOf(value);\r\n+            } else if (type == int.class || type == Integer.class) {\r\n+                return Integer.valueOf(value);\r\n+            } else if (type == long.class || type == Long.class) {\r\n+                return Long.valueOf(value);\r\n+            } else if (type == float.class || type == Float.class) {\r\n+                return Float.valueOf(value);\r\n+            } else if (type == double.class || type == Double.class) {\r\n+                return Double.valueOf(value);\r\n+            }\r\n+        } catch (NumberFormatException e) {\r\n+            return null;\r\n+        }\r\n+        return value;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * We only check boolean value at this moment.\r\n+     *\r\n+     * @param type\r\n+     * @param value\r\n+     * @return\r\n+     */\r\n+    public static boolean isTypeMatch(Class<?> type, String value) {\r\n+        if ((type == boolean.class || type == Boolean.class)\r\n+                && !(\"true\".equals(value) || \"false\".equals(value))) {\r\n+            return false;\r\n+        }\r\n+        return true;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all super classes from the specified type\r\n+     *\r\n+     * @param type         the specified type\r\n+     * @param classFilters the filters for classes\r\n+     * @return non-null read-only {@link Set}\r\n+     * @since 2.7.6\r\n+     */\r\n+    public static Set<Class<?>> getAllSuperClasses(Class<?> type, Predicate<Class<?>>... classFilters) {\r\n+\r\n+        Set<Class<?>> allSuperClasses = new LinkedHashSet<>();\r\n+\r\n+        Class<?> superClass = type.getSuperclass();\r\n+        while (superClass != null) {\r\n+            // add current super class\r\n+            allSuperClasses.add(superClass);\r\n+            superClass = superClass.getSuperclass();\r\n+        }\r\n+\r\n+        return unmodifiableSet(filterAll(allSuperClasses, classFilters));\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all interfaces from the specified type\r\n+     *\r\n+     * @param type             the specified type\r\n+     * @param interfaceFilters the filters for interfaces\r\n+     * @return non-null read-only {@link Set}\r\n+     * @since 2.7.6\r\n+     */\r\n+    public static Set<Class<?>> getAllInterfaces(Class<?> type, Predicate<Class<?>>... interfaceFilters) {\r\n+        if (type == null || type.isPrimitive()) {\r\n+            return emptySet();\r\n+        }\r\n+\r\n+        Set<Class<?>> allInterfaces = new LinkedHashSet<>();\r\n+        Set<Class<?>> resolved = new LinkedHashSet<>();\r\n+        Queue<Class<?>> waitResolve = new LinkedList<>();\r\n+\r\n+        resolved.add(type);\r\n+        Class<?> clazz = type;\r\n+        while (clazz != null) {\r\n+\r\n+            Class<?>[] interfaces = clazz.getInterfaces();\r\n+\r\n+            if (isNotEmpty(interfaces)) {\r\n+                // add current interfaces\r\n+                Arrays.stream(interfaces)\r\n+                        .filter(resolved::add)\r\n+                        .forEach(cls -> {\r\n+                            allInterfaces.add(cls);\r\n+                            waitResolve.add(cls);\r\n+                        });\r\n+            }\r\n+\r\n+            // add all super classes to waitResolve\r\n+            getAllSuperClasses(clazz)\r\n+                    .stream()\r\n+                    .filter(resolved::add)\r\n+                    .forEach(waitResolve::add);\r\n+\r\n+            clazz = waitResolve.poll();\r\n+        }\r\n+\r\n+        return filterAll(allInterfaces, interfaceFilters);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all inherited types from the specified type\r\n+     *\r\n+     * @param type        the specified type\r\n+     * @param typeFilters the filters for types\r\n+     * @return non-null read-only {@link Set}\r\n+     * @since 2.7.6\r\n+     */\r\n+    public static Set<Class<?>> getAllInheritedTypes(Class<?> type, Predicate<Class<?>>... typeFilters) {\r\n+        // Add all super classes\r\n+        Set<Class<?>> types = new LinkedHashSet<>(getAllSuperClasses(type, typeFilters));\r\n+        // Add all interface classes\r\n+        types.addAll(getAllInterfaces(type, typeFilters));\r\n+        return unmodifiableSet(types);\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * the semantics is same as {@link Class#isAssignableFrom(Class)}\r\n+     *\r\n+     * @param superType  the super type\r\n+     * @param targetType the target type\r\n+     * @return see {@link Class#isAssignableFrom(Class)}\r\n+     * @since 2.7.6\r\n+     */\r\n+    public static boolean isAssignableFrom(Class<?> superType, Class<?> targetType) {\r\n+        // any argument is null\r\n+        if (superType == null || targetType == null) {\r\n+            return false;\r\n+        }\r\n+        // equals\r\n+        if (Objects.equals(superType, targetType)) {\r\n+            return true;\r\n+        }\r\n+        // isAssignableFrom\r\n+        return superType.isAssignableFrom(targetType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Test the specified class name is present in the {@link ClassLoader}\r\n+     *\r\n+     * @param className   the name of {@link Class}\r\n+     * @param classLoader {@link ClassLoader}\r\n+     * @return If found, return <code>true</code>\r\n+     * @since 2.7.6\r\n+     */\r\n+    public static boolean isPresent(String className, ClassLoader classLoader) {\r\n+        try {\r\n+            forName(className, classLoader);\r\n+        } catch (Throwable ignored) { // Ignored\r\n+            return false;\r\n+        }\r\n+        return true;\r\n+    }\r\n+\r\n+    /**\r\n+     * Resolve the {@link Class} by the specified name and {@link ClassLoader}\r\n+     *\r\n+     * @param className   the name of {@link Class}\r\n+     * @param classLoader {@link ClassLoader}\r\n+     * @return If can't be resolved , return <code>null</code>\r\n+     * @since 2.7.6\r\n+     */\r\n+    public static Class<?> resolveClass(String className, ClassLoader classLoader) {\r\n+        Class<?> targetClass = null;\r\n+        try {\r\n+            targetClass = forName(className, classLoader);\r\n+        } catch (Throwable ignored) { // Ignored\r\n+        }\r\n+        return targetClass;\r\n+    }\r\n+\r\n+    /**\r\n+     * Is generic class or not?\r\n+     *\r\n+     * @param type the target type\r\n+     * @return if the target type is not null or <code>void</code> or Void.class, return <code>true</code>, or false\r\n+     * @since 2.7.6\r\n+     */\r\n+    public static boolean isGenericClass(Class<?> type) {\r\n+        return type != null && !void.class.equals(type) && !Void.class.equals(type);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/CompatibleTypeUtils.java", "source2": "org/apache/dubbo/common/utils/CompatibleTypeUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,229 +1,229 @@\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.common.utils;\n-\n-import java.lang.reflect.Array;\n-import java.math.BigDecimal;\n-import java.math.BigInteger;\n-import java.text.ParseException;\n-import java.text.SimpleDateFormat;\n-import java.time.LocalDateTime;\n-import java.util.ArrayList;\n-import java.util.Collection;\n-import java.util.Date;\n-import java.util.HashSet;\n-import java.util.List;\n-import java.util.Set;\n-\n-public class CompatibleTypeUtils {\n-\n-    private static final String DATE_FORMAT = \"yyyy-MM-dd HH:mm:ss\";\n-\n-    private CompatibleTypeUtils() {\n-    }\n-\n-    /**\n-     * Compatible type convert. Null value is allowed to pass in. If no conversion is needed, then the original value\n-     * will be returned.\n-     * <p>\n-     * Supported compatible type conversions include (primary types and corresponding wrappers are not listed):\n-     * <ul>\n-     * <li> String -> char, enum, Date\n-     * <li> byte, short, int, long -> byte, short, int, long\n-     * <li> float, double -> float, double\n-     * </ul>\n-     */\n-    @SuppressWarnings({\"unchecked\", \"rawtypes\"})\n-    public static Object compatibleTypeConvert(Object value, Class<?> type) {\n-        if (value == null || type == null || type.isAssignableFrom(value.getClass())) {\n-            return value;\n-        }\n-\n-        if (value instanceof String) {\n-            String string = (String) value;\n-            if (char.class.equals(type) || Character.class.equals(type)) {\n-                if (string.length() != 1) {\n-                    throw new IllegalArgumentException(String.format(\"CAN NOT convert String(%s) to char!\" +\n-                            \" when convert String to char, the String MUST only 1 char.\", string));\n-                }\n-                return string.charAt(0);\n-            }\n-            if (type.isEnum()) {\n-                return Enum.valueOf((Class<Enum>) type, string);\n-            }\n-            if (type == BigInteger.class) {\n-                return new BigInteger(string);\n-            }\n-            if (type == BigDecimal.class) {\n-                return new BigDecimal(string);\n-            }\n-            if (type == Short.class || type == short.class) {\n-                return new Short(string);\n-            }\n-            if (type == Integer.class || type == int.class) {\n-                return new Integer(string);\n-            }\n-            if (type == Long.class || type == long.class) {\n-                return new Long(string);\n-            }\n-            if (type == Double.class || type == double.class) {\n-                return new Double(string);\n-            }\n-            if (type == Float.class || type == float.class) {\n-                return new Float(string);\n-            }\n-            if (type == Byte.class || type == byte.class) {\n-                return new Byte(string);\n-            }\n-            if (type == Boolean.class || type == boolean.class) {\n-                return Boolean.valueOf(string);\n-            }\n-            if (type == Date.class || type == java.sql.Date.class || type == java.sql.Timestamp.class\n-                    || type == java.sql.Time.class) {\n-                try {\n-                    Date date = new SimpleDateFormat(DATE_FORMAT).parse(string);\n-                    if (type == java.sql.Date.class) {\n-                        return new java.sql.Date(date.getTime());\n-                    }\n-                    if (type == java.sql.Timestamp.class) {\n-                        return new java.sql.Timestamp(date.getTime());\n-                    }\n-                    if (type == java.sql.Time.class) {\n-                        return new java.sql.Time(date.getTime());\n-                    }\n-                    return date;\n-                } catch (ParseException e) {\n-                    throw new IllegalStateException(\"Failed to parse date \" + value + \" by format \"\n-                            + DATE_FORMAT + \", cause: \" + e.getMessage(), e);\n-                }\n-            }\n-            if (type == java.time.LocalDateTime.class) {\n-                if (StringUtils.isEmpty(string)) {\n-                    return null;\n-                }\n-                return LocalDateTime.parse(string);\n-            }\n-            if (type == java.time.LocalDate.class) {\n-                if (StringUtils.isEmpty(string)) {\n-                    return null;\n-                }\n-                return java.time.LocalDate.parse(string);\n-            }\n-            if (type == java.time.LocalTime.class) {\n-                if (StringUtils.isEmpty(string)) {\n-                    return null;\n-                }\n-                return LocalDateTime.parse(string).toLocalTime();\n-            }\n-            if (type == Class.class) {\n-                try {\n-                    return ReflectUtils.name2class(string);\n-                } catch (ClassNotFoundException e) {\n-                    throw new RuntimeException(e.getMessage(), e);\n-                }\n-            }\n-            if (char[].class.equals(type)) {\n-                // Process string to char array for generic invoke\n-                // See\n-                // - https://github.com/apache/dubbo/issues/2003\n-                int len = string.length();\n-                char[] chars = new char[len];\n-                string.getChars(0, len, chars, 0);\n-                return chars;\n-            }\n-        }\n-        if (value instanceof Number) {\n-            Number number = (Number) value;\n-            if (type == byte.class || type == Byte.class) {\n-                return number.byteValue();\n-            }\n-            if (type == short.class || type == Short.class) {\n-                return number.shortValue();\n-            }\n-            if (type == int.class || type == Integer.class) {\n-                return number.intValue();\n-            }\n-            if (type == long.class || type == Long.class) {\n-                return number.longValue();\n-            }\n-            if (type == float.class || type == Float.class) {\n-                return number.floatValue();\n-            }\n-            if (type == double.class || type == Double.class) {\n-                return number.doubleValue();\n-            }\n-            if (type == BigInteger.class) {\n-                return BigInteger.valueOf(number.longValue());\n-            }\n-            if (type == BigDecimal.class) {\n-                return BigDecimal.valueOf(number.doubleValue());\n-            }\n-            if (type == Date.class) {\n-                return new Date(number.longValue());\n-            }\n-            if (type == boolean.class || type == Boolean.class) {\n-                return 0 != number.intValue();\n-            }\n-        }\n-        if (value instanceof Collection) {\n-            Collection collection = (Collection) value;\n-            if (type.isArray()) {\n-                int length = collection.size();\n-                Object array = Array.newInstance(type.getComponentType(), length);\n-                int i = 0;\n-                for (Object item : collection) {\n-                    Array.set(array, i++, item);\n-                }\n-                return array;\n-            }\n-            if (!type.isInterface()) {\n-                try {\n-                    Collection result = (Collection) type.newInstance();\n-                    result.addAll(collection);\n-                    return result;\n-                } catch (Throwable ignored) {\n-                }\n-            }\n-            if (type == List.class) {\n-                return new ArrayList<Object>(collection);\n-            }\n-            if (type == Set.class) {\n-                return new HashSet<Object>(collection);\n-            }\n-        }\n-        if (value.getClass().isArray() && Collection.class.isAssignableFrom(type)) {\n-            Collection collection;\n-            if (!type.isInterface()) {\n-                try {\n-                    collection = (Collection) type.newInstance();\n-                } catch (Throwable e) {\n-                    collection = new ArrayList<Object>();\n-                }\n-            } else if (type == Set.class) {\n-                collection = new HashSet<Object>();\n-            } else {\n-                collection = new ArrayList<Object>();\n-            }\n-            int length = Array.getLength(value);\n-            for (int i = 0; i < length; i++) {\n-                collection.add(Array.get(value, i));\n-            }\n-            return collection;\n-        }\n-        return value;\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.common.utils;\r\n+\r\n+import java.lang.reflect.Array;\r\n+import java.math.BigDecimal;\r\n+import java.math.BigInteger;\r\n+import java.text.ParseException;\r\n+import java.text.SimpleDateFormat;\r\n+import java.time.LocalDateTime;\r\n+import java.util.ArrayList;\r\n+import java.util.Collection;\r\n+import java.util.Date;\r\n+import java.util.HashSet;\r\n+import java.util.List;\r\n+import java.util.Set;\r\n+\r\n+public class CompatibleTypeUtils {\r\n+\r\n+    private static final String DATE_FORMAT = \"yyyy-MM-dd HH:mm:ss\";\r\n+\r\n+    private CompatibleTypeUtils() {\r\n+    }\r\n+\r\n+    /**\r\n+     * Compatible type convert. Null value is allowed to pass in. If no conversion is needed, then the original value\r\n+     * will be returned.\r\n+     * <p>\r\n+     * Supported compatible type conversions include (primary types and corresponding wrappers are not listed):\r\n+     * <ul>\r\n+     * <li> String -> char, enum, Date\r\n+     * <li> byte, short, int, long -> byte, short, int, long\r\n+     * <li> float, double -> float, double\r\n+     * </ul>\r\n+     */\r\n+    @SuppressWarnings({\"unchecked\", \"rawtypes\"})\r\n+    public static Object compatibleTypeConvert(Object value, Class<?> type) {\r\n+        if (value == null || type == null || type.isAssignableFrom(value.getClass())) {\r\n+            return value;\r\n+        }\r\n+\r\n+        if (value instanceof String) {\r\n+            String string = (String) value;\r\n+            if (char.class.equals(type) || Character.class.equals(type)) {\r\n+                if (string.length() != 1) {\r\n+                    throw new IllegalArgumentException(String.format(\"CAN NOT convert String(%s) to char!\" +\r\n+                            \" when convert String to char, the String MUST only 1 char.\", string));\r\n+                }\r\n+                return string.charAt(0);\r\n+            }\r\n+            if (type.isEnum()) {\r\n+                return Enum.valueOf((Class<Enum>) type, string);\r\n+            }\r\n+            if (type == BigInteger.class) {\r\n+                return new BigInteger(string);\r\n+            }\r\n+            if (type == BigDecimal.class) {\r\n+                return new BigDecimal(string);\r\n+            }\r\n+            if (type == Short.class || type == short.class) {\r\n+                return new Short(string);\r\n+            }\r\n+            if (type == Integer.class || type == int.class) {\r\n+                return new Integer(string);\r\n+            }\r\n+            if (type == Long.class || type == long.class) {\r\n+                return new Long(string);\r\n+            }\r\n+            if (type == Double.class || type == double.class) {\r\n+                return new Double(string);\r\n+            }\r\n+            if (type == Float.class || type == float.class) {\r\n+                return new Float(string);\r\n+            }\r\n+            if (type == Byte.class || type == byte.class) {\r\n+                return new Byte(string);\r\n+            }\r\n+            if (type == Boolean.class || type == boolean.class) {\r\n+                return Boolean.valueOf(string);\r\n+            }\r\n+            if (type == Date.class || type == java.sql.Date.class || type == java.sql.Timestamp.class\r\n+                    || type == java.sql.Time.class) {\r\n+                try {\r\n+                    Date date = new SimpleDateFormat(DATE_FORMAT).parse(string);\r\n+                    if (type == java.sql.Date.class) {\r\n+                        return new java.sql.Date(date.getTime());\r\n+                    }\r\n+                    if (type == java.sql.Timestamp.class) {\r\n+                        return new java.sql.Timestamp(date.getTime());\r\n+                    }\r\n+                    if (type == java.sql.Time.class) {\r\n+                        return new java.sql.Time(date.getTime());\r\n+                    }\r\n+                    return date;\r\n+                } catch (ParseException e) {\r\n+                    throw new IllegalStateException(\"Failed to parse date \" + value + \" by format \"\r\n+                            + DATE_FORMAT + \", cause: \" + e.getMessage(), e);\r\n+                }\r\n+            }\r\n+            if (type == java.time.LocalDateTime.class) {\r\n+                if (StringUtils.isEmpty(string)) {\r\n+                    return null;\r\n+                }\r\n+                return LocalDateTime.parse(string);\r\n+            }\r\n+            if (type == java.time.LocalDate.class) {\r\n+                if (StringUtils.isEmpty(string)) {\r\n+                    return null;\r\n+                }\r\n+                return java.time.LocalDate.parse(string);\r\n+            }\r\n+            if (type == java.time.LocalTime.class) {\r\n+                if (StringUtils.isEmpty(string)) {\r\n+                    return null;\r\n+                }\r\n+                return LocalDateTime.parse(string).toLocalTime();\r\n+            }\r\n+            if (type == Class.class) {\r\n+                try {\r\n+                    return ReflectUtils.name2class(string);\r\n+                } catch (ClassNotFoundException e) {\r\n+                    throw new RuntimeException(e.getMessage(), e);\r\n+                }\r\n+            }\r\n+            if (char[].class.equals(type)) {\r\n+                // Process string to char array for generic invoke\r\n+                // See\r\n+                // - https://github.com/apache/dubbo/issues/2003\r\n+                int len = string.length();\r\n+                char[] chars = new char[len];\r\n+                string.getChars(0, len, chars, 0);\r\n+                return chars;\r\n+            }\r\n+        }\r\n+        if (value instanceof Number) {\r\n+            Number number = (Number) value;\r\n+            if (type == byte.class || type == Byte.class) {\r\n+                return number.byteValue();\r\n+            }\r\n+            if (type == short.class || type == Short.class) {\r\n+                return number.shortValue();\r\n+            }\r\n+            if (type == int.class || type == Integer.class) {\r\n+                return number.intValue();\r\n+            }\r\n+            if (type == long.class || type == Long.class) {\r\n+                return number.longValue();\r\n+            }\r\n+            if (type == float.class || type == Float.class) {\r\n+                return number.floatValue();\r\n+            }\r\n+            if (type == double.class || type == Double.class) {\r\n+                return number.doubleValue();\r\n+            }\r\n+            if (type == BigInteger.class) {\r\n+                return BigInteger.valueOf(number.longValue());\r\n+            }\r\n+            if (type == BigDecimal.class) {\r\n+                return BigDecimal.valueOf(number.doubleValue());\r\n+            }\r\n+            if (type == Date.class) {\r\n+                return new Date(number.longValue());\r\n+            }\r\n+            if (type == boolean.class || type == Boolean.class) {\r\n+                return 0 != number.intValue();\r\n+            }\r\n+        }\r\n+        if (value instanceof Collection) {\r\n+            Collection collection = (Collection) value;\r\n+            if (type.isArray()) {\r\n+                int length = collection.size();\r\n+                Object array = Array.newInstance(type.getComponentType(), length);\r\n+                int i = 0;\r\n+                for (Object item : collection) {\r\n+                    Array.set(array, i++, item);\r\n+                }\r\n+                return array;\r\n+            }\r\n+            if (!type.isInterface()) {\r\n+                try {\r\n+                    Collection result = (Collection) type.newInstance();\r\n+                    result.addAll(collection);\r\n+                    return result;\r\n+                } catch (Throwable ignored) {\r\n+                }\r\n+            }\r\n+            if (type == List.class) {\r\n+                return new ArrayList<Object>(collection);\r\n+            }\r\n+            if (type == Set.class) {\r\n+                return new HashSet<Object>(collection);\r\n+            }\r\n+        }\r\n+        if (value.getClass().isArray() && Collection.class.isAssignableFrom(type)) {\r\n+            Collection collection;\r\n+            if (!type.isInterface()) {\r\n+                try {\r\n+                    collection = (Collection) type.newInstance();\r\n+                } catch (Throwable e) {\r\n+                    collection = new ArrayList<Object>();\r\n+                }\r\n+            } else if (type == Set.class) {\r\n+                collection = new HashSet<Object>();\r\n+            } else {\r\n+                collection = new ArrayList<Object>();\r\n+            }\r\n+            int length = Array.getLength(value);\r\n+            for (int i = 0; i < length; i++) {\r\n+                collection.add(Array.get(value, i));\r\n+            }\r\n+            return collection;\r\n+        }\r\n+        return value;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/DefaultPage.java", "source2": "org/apache/dubbo/common/utils/DefaultPage.java", "comments": ["Line-ending 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.common.utils;\n-\n-import java.io.Serializable;\n-import java.util.List;\n-\n-/**\n- * The default implementation of {@link Page}\n- *\n- * @since 2.7.5\n- */\n-public class DefaultPage<T> implements Page<T>, Serializable {\n-\n-    private static final long serialVersionUID = 1099331838954070419L;\n-\n-    private final int requestOffset;\n-\n-    private final int pageSize;\n-\n-    private final int totalSize;\n-\n-    private final List<T> data;\n-\n-    private final int totalPages;\n-\n-    private final boolean hasNext;\n-\n-    public DefaultPage(int requestOffset, int pageSize, List<T> data, int totalSize) {\n-        this.requestOffset = requestOffset;\n-        this.pageSize = pageSize;\n-        this.data = data;\n-        this.totalSize = totalSize;\n-        int remain = totalSize % pageSize;\n-        this.totalPages = remain > 0 ? (totalSize / pageSize) + 1 : totalSize / pageSize;\n-        this.hasNext = totalSize - requestOffset - pageSize > 0;\n-    }\n-\n-    @Override\n-    public int getOffset() {\n-        return requestOffset;\n-    }\n-\n-    @Override\n-    public int getPageSize() {\n-        return pageSize;\n-    }\n-\n-    @Override\n-    public int getTotalSize() {\n-        return totalSize;\n-    }\n-\n-    @Override\n-    public int getTotalPages() {\n-        return totalPages;\n-    }\n-\n-    @Override\n-    public List<T> getData() {\n-        return data;\n-    }\n-\n-    @Override\n-    public boolean hasNext() {\n-        return hasNext;\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.common.utils;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * The default implementation of {@link Page}\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+public class DefaultPage<T> implements Page<T>, Serializable {\r\n+\r\n+    private static final long serialVersionUID = 1099331838954070419L;\r\n+\r\n+    private final int requestOffset;\r\n+\r\n+    private final int pageSize;\r\n+\r\n+    private final int totalSize;\r\n+\r\n+    private final List<T> data;\r\n+\r\n+    private final int totalPages;\r\n+\r\n+    private final boolean hasNext;\r\n+\r\n+    public DefaultPage(int requestOffset, int pageSize, List<T> data, int totalSize) {\r\n+        this.requestOffset = requestOffset;\r\n+        this.pageSize = pageSize;\r\n+        this.data = data;\r\n+        this.totalSize = totalSize;\r\n+        int remain = totalSize % pageSize;\r\n+        this.totalPages = remain > 0 ? (totalSize / pageSize) + 1 : totalSize / pageSize;\r\n+        this.hasNext = totalSize - requestOffset - pageSize > 0;\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getOffset() {\r\n+        return requestOffset;\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPageSize() {\r\n+        return pageSize;\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getTotalSize() {\r\n+        return totalSize;\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getTotalPages() {\r\n+        return totalPages;\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<T> getData() {\r\n+        return data;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean hasNext() {\r\n+        return hasNext;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/ExecutorUtil.java", "source2": "org/apache/dubbo/common/utils/ExecutorUtil.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,140 +1,140 @@\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.common.utils;\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-\n-import java.util.concurrent.Executor;\n-import java.util.concurrent.ExecutorService;\n-import java.util.concurrent.LinkedBlockingQueue;\n-import java.util.concurrent.ScheduledFuture;\n-import java.util.concurrent.ThreadPoolExecutor;\n-import java.util.concurrent.TimeUnit;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.THREAD_NAME_KEY;\n-\n-public class ExecutorUtil {\n-    private static final Logger logger = LoggerFactory.getLogger(ExecutorUtil.class);\n-    private static final ThreadPoolExecutor SHUTDOWN_EXECUTOR = new ThreadPoolExecutor(0, 1,\n-            0L, TimeUnit.MILLISECONDS,\n-            new LinkedBlockingQueue<Runnable>(100),\n-            new NamedThreadFactory(\"Close-ExecutorService-Timer\", true));\n-\n-    public static boolean isTerminated(Executor executor) {\n-        if (executor instanceof ExecutorService) {\n-            if (((ExecutorService) executor).isTerminated()) {\n-                return true;\n-            }\n-        }\n-        return false;\n-    }\n-\n-    /**\n-     * Use the shutdown pattern from:\n-     * https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html\n-     *\n-     * @param executor the Executor to shutdown\n-     * @param timeout  the timeout in milliseconds before termination\n-     */\n-    public static void gracefulShutdown(Executor executor, int timeout) {\n-        if (!(executor instanceof ExecutorService) || isTerminated(executor)) {\n-            return;\n-        }\n-        final ExecutorService es = (ExecutorService) executor;\n-        try {\n-            // Disable new tasks from being submitted\n-            es.shutdown();\n-        } catch (SecurityException | NullPointerException ex2) {\n-            return;\n-        }\n-        try {\n-            // Wait a while for existing tasks to terminate\n-            if (!es.awaitTermination(timeout, TimeUnit.MILLISECONDS)) {\n-                es.shutdownNow();\n-            }\n-        } catch (InterruptedException ex) {\n-            es.shutdownNow();\n-            Thread.currentThread().interrupt();\n-        }\n-        if (!isTerminated(es)) {\n-            newThreadToCloseExecutor(es);\n-        }\n-    }\n-\n-    public static void shutdownNow(Executor executor, final int timeout) {\n-        if (!(executor instanceof ExecutorService) || isTerminated(executor)) {\n-            return;\n-        }\n-        final ExecutorService es = (ExecutorService) executor;\n-        try {\n-            es.shutdownNow();\n-        } catch (SecurityException | NullPointerException ex2) {\n-            return;\n-        }\n-        try {\n-            es.awaitTermination(timeout, TimeUnit.MILLISECONDS);\n-        } catch (InterruptedException ex) {\n-            Thread.currentThread().interrupt();\n-        }\n-        if (!isTerminated(es)) {\n-            newThreadToCloseExecutor(es);\n-        }\n-    }\n-\n-    private static void newThreadToCloseExecutor(final ExecutorService es) {\n-        if (!isTerminated(es)) {\n-            SHUTDOWN_EXECUTOR.execute(new Runnable() {\n-                @Override\n-                public void run() {\n-                    try {\n-                        for (int i = 0; i < 1000; i++) {\n-                            es.shutdownNow();\n-                            if (es.awaitTermination(10, TimeUnit.MILLISECONDS)) {\n-                                break;\n-                            }\n-                        }\n-                    } catch (InterruptedException ex) {\n-                        Thread.currentThread().interrupt();\n-                    } catch (Throwable e) {\n-                        logger.warn(e.getMessage(), e);\n-                    }\n-                }\n-            });\n-        }\n-    }\n-\n-    /**\n-     * append thread name with url address\n-     *\n-     * @return new url with updated thread name\n-     */\n-    public static URL setThreadName(URL url, String defaultName) {\n-        String name = url.getParameter(THREAD_NAME_KEY, defaultName);\n-        name = name + \"-\" + url.getAddress();\n-        url = url.addParameter(THREAD_NAME_KEY, name);\n-        return url;\n-    }\n-\n-    public static void cancelScheduledFuture(ScheduledFuture<?> scheduledFuture) {\n-        ScheduledFuture<?> future = scheduledFuture;\n-        if (future != null && !future.isCancelled()) {\n-            future.cancel(true);\n-        }\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.common.utils;\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+\r\n+import java.util.concurrent.Executor;\r\n+import java.util.concurrent.ExecutorService;\r\n+import java.util.concurrent.LinkedBlockingQueue;\r\n+import java.util.concurrent.ScheduledFuture;\r\n+import java.util.concurrent.ThreadPoolExecutor;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.THREAD_NAME_KEY;\r\n+\r\n+public class ExecutorUtil {\r\n+    private static final Logger logger = LoggerFactory.getLogger(ExecutorUtil.class);\r\n+    private static final ThreadPoolExecutor SHUTDOWN_EXECUTOR = new ThreadPoolExecutor(0, 1,\r\n+            0L, TimeUnit.MILLISECONDS,\r\n+            new LinkedBlockingQueue<Runnable>(100),\r\n+            new NamedThreadFactory(\"Close-ExecutorService-Timer\", true));\r\n+\r\n+    public static boolean isTerminated(Executor executor) {\r\n+        if (executor instanceof ExecutorService) {\r\n+            if (((ExecutorService) executor).isTerminated()) {\r\n+                return true;\r\n+            }\r\n+        }\r\n+        return false;\r\n+    }\r\n+\r\n+    /**\r\n+     * Use the shutdown pattern from:\r\n+     * https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html\r\n+     *\r\n+     * @param executor the Executor to shutdown\r\n+     * @param timeout  the timeout in milliseconds before termination\r\n+     */\r\n+    public static void gracefulShutdown(Executor executor, int timeout) {\r\n+        if (!(executor instanceof ExecutorService) || isTerminated(executor)) {\r\n+            return;\r\n+        }\r\n+        final ExecutorService es = (ExecutorService) executor;\r\n+        try {\r\n+            // Disable new tasks from being submitted\r\n+            es.shutdown();\r\n+        } catch (SecurityException | NullPointerException ex2) {\r\n+            return;\r\n+        }\r\n+        try {\r\n+            // Wait a while for existing tasks to terminate\r\n+            if (!es.awaitTermination(timeout, TimeUnit.MILLISECONDS)) {\r\n+                es.shutdownNow();\r\n+            }\r\n+        } catch (InterruptedException ex) {\r\n+            es.shutdownNow();\r\n+            Thread.currentThread().interrupt();\r\n+        }\r\n+        if (!isTerminated(es)) {\r\n+            newThreadToCloseExecutor(es);\r\n+        }\r\n+    }\r\n+\r\n+    public static void shutdownNow(Executor executor, final int timeout) {\r\n+        if (!(executor instanceof ExecutorService) || isTerminated(executor)) {\r\n+            return;\r\n+        }\r\n+        final ExecutorService es = (ExecutorService) executor;\r\n+        try {\r\n+            es.shutdownNow();\r\n+        } catch (SecurityException | NullPointerException ex2) {\r\n+            return;\r\n+        }\r\n+        try {\r\n+            es.awaitTermination(timeout, TimeUnit.MILLISECONDS);\r\n+        } catch (InterruptedException ex) {\r\n+            Thread.currentThread().interrupt();\r\n+        }\r\n+        if (!isTerminated(es)) {\r\n+            newThreadToCloseExecutor(es);\r\n+        }\r\n+    }\r\n+\r\n+    private static void newThreadToCloseExecutor(final ExecutorService es) {\r\n+        if (!isTerminated(es)) {\r\n+            SHUTDOWN_EXECUTOR.execute(new Runnable() {\r\n+                @Override\r\n+                public void run() {\r\n+                    try {\r\n+                        for (int i = 0; i < 1000; i++) {\r\n+                            es.shutdownNow();\r\n+                            if (es.awaitTermination(10, TimeUnit.MILLISECONDS)) {\r\n+                                break;\r\n+                            }\r\n+                        }\r\n+                    } catch (InterruptedException ex) {\r\n+                        Thread.currentThread().interrupt();\r\n+                    } catch (Throwable e) {\r\n+                        logger.warn(e.getMessage(), e);\r\n+                    }\r\n+                }\r\n+            });\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * append thread name with url address\r\n+     *\r\n+     * @return new url with updated thread name\r\n+     */\r\n+    public static URL setThreadName(URL url, String defaultName) {\r\n+        String name = url.getParameter(THREAD_NAME_KEY, defaultName);\r\n+        name = name + \"-\" + url.getAddress();\r\n+        url = url.addParameter(THREAD_NAME_KEY, name);\r\n+        return url;\r\n+    }\r\n+\r\n+    public static void cancelScheduledFuture(ScheduledFuture<?> scheduledFuture) {\r\n+        ScheduledFuture<?> future = scheduledFuture;\r\n+        if (future != null && !future.isCancelled()) {\r\n+            future.cancel(true);\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/FieldUtils.java", "source2": "org/apache/dubbo/common/utils/FieldUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,142 +1,142 @@\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.common.utils;\n-\n-import java.lang.reflect.Field;\n-\n-import static org.apache.dubbo.common.utils.ClassUtils.getAllInheritedTypes;\n-\n-/**\n- * The utilities class for Java Reflection {@link Field}\n- *\n- * @since 2.7.6\n- */\n-public interface FieldUtils {\n-\n-    /**\n-     * Like the {@link Class#getDeclaredField(String)} method without throwing any {@link Exception}\n-     *\n-     * @param declaredClass the declared class\n-     * @param fieldName     the name of {@link Field}\n-     * @return if can't be found, return <code>null</code>\n-     */\n-    static Field getDeclaredField(Class<?> declaredClass, String fieldName) {\n-        Field field = null;\n-        try {\n-            field = declaredClass.getDeclaredField(fieldName);\n-        } catch (NoSuchFieldException ignored) {\n-            field = null;\n-        }\n-        return field;\n-    }\n-\n-    /**\n-     * Find the {@link Field} by the name in the specified class and its inherited types\n-     *\n-     * @param declaredClass the declared class\n-     * @param fieldName     the name of {@link Field}\n-     * @return if can't be found, return <code>null</code>\n-     */\n-    static Field findField(Class<?> declaredClass, String fieldName) {\n-        Field field = getDeclaredField(declaredClass, fieldName);\n-        if (field != null) {\n-            return field;\n-        }\n-        for (Class superType : getAllInheritedTypes(declaredClass)) {\n-            field = getDeclaredField(superType, fieldName);\n-            if (field != null) {\n-                break;\n-            }\n-        }\n-        return field;\n-    }\n-\n-    /**\n-     * Find the {@link Field} by the name in the specified class and its inherited types\n-     *\n-     * @param object    the object whose field should be modified\n-     * @param fieldName the name of {@link Field}\n-     * @return if can't be found, return <code>null</code>\n-     */\n-    static Field findField(Object object, String fieldName) {\n-        return findField(object.getClass(), fieldName);\n-    }\n-\n-    /**\n-     * Get the value of the specified {@link Field}\n-     *\n-     * @param object    the object whose field should be modified\n-     * @param fieldName the name of {@link Field}\n-     * @return the value of  the specified {@link Field}\n-     */\n-    static Object getFieldValue(Object object, String fieldName) {\n-        return getFieldValue(object, findField(object, fieldName));\n-    }\n-\n-    /**\n-     * Get the value of the specified {@link Field}\n-     *\n-     * @param object the object whose field should be modified\n-     * @param field  {@link Field}\n-     * @return the value of  the specified {@link Field}\n-     */\n-    static <T> T getFieldValue(Object object, Field field) {\n-        Object value = null;\n-        try {\n-            ReflectUtils.makeAccessible(field);\n-            value = field.get(object);\n-        } catch (IllegalAccessException ignored) {\n-        } finally {\n-            ReflectUtils.makeAccessible(field);\n-        }\n-        return (T) value;\n-    }\n-\n-    /**\n-     * Set the value for the specified {@link Field}\n-     *\n-     * @param object    the object whose field should be modified\n-     * @param fieldName the name of {@link Field}\n-     * @param value     the value of field to be set\n-     * @return the previous value of the specified {@link Field}\n-     */\n-    static <T> T setFieldValue(Object object, String fieldName, T value) {\n-        return setFieldValue(object, findField(object, fieldName), value);\n-    }\n-\n-    /**\n-     * Set the value for the specified {@link Field}\n-     *\n-     * @param object the object whose field should be modified\n-     * @param field  {@link Field}\n-     * @param value  the value of field to be set\n-     * @return the previous value of the specified {@link Field}\n-     */\n-    static <T> T setFieldValue(Object object, Field field, T value) {\n-        Object previousValue = null;\n-        try {\n-            ReflectUtils.makeAccessible(field);\n-            previousValue = field.get(object);\n-            field.set(object, value);\n-        } catch (IllegalAccessException ignored) {\n-        } finally {\n-            ReflectUtils.makeAccessible(field);\n-        }\n-        return (T) previousValue;\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.common.utils;\r\n+\r\n+import java.lang.reflect.Field;\r\n+\r\n+import static org.apache.dubbo.common.utils.ClassUtils.getAllInheritedTypes;\r\n+\r\n+/**\r\n+ * The utilities class for Java Reflection {@link Field}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface FieldUtils {\r\n+\r\n+    /**\r\n+     * Like the {@link Class#getDeclaredField(String)} method without throwing any {@link Exception}\r\n+     *\r\n+     * @param declaredClass the declared class\r\n+     * @param fieldName     the name of {@link Field}\r\n+     * @return if can't be found, return <code>null</code>\r\n+     */\r\n+    static Field getDeclaredField(Class<?> declaredClass, String fieldName) {\r\n+        Field field = null;\r\n+        try {\r\n+            field = declaredClass.getDeclaredField(fieldName);\r\n+        } catch (NoSuchFieldException ignored) {\r\n+            field = null;\r\n+        }\r\n+        return field;\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the {@link Field} by the name in the specified class and its inherited types\r\n+     *\r\n+     * @param declaredClass the declared class\r\n+     * @param fieldName     the name of {@link Field}\r\n+     * @return if can't be found, return <code>null</code>\r\n+     */\r\n+    static Field findField(Class<?> declaredClass, String fieldName) {\r\n+        Field field = getDeclaredField(declaredClass, fieldName);\r\n+        if (field != null) {\r\n+            return field;\r\n+        }\r\n+        for (Class superType : getAllInheritedTypes(declaredClass)) {\r\n+            field = getDeclaredField(superType, fieldName);\r\n+            if (field != null) {\r\n+                break;\r\n+            }\r\n+        }\r\n+        return field;\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the {@link Field} by the name in the specified class and its inherited types\r\n+     *\r\n+     * @param object    the object whose field should be modified\r\n+     * @param fieldName the name of {@link Field}\r\n+     * @return if can't be found, return <code>null</code>\r\n+     */\r\n+    static Field findField(Object object, String fieldName) {\r\n+        return findField(object.getClass(), fieldName);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the value of the specified {@link Field}\r\n+     *\r\n+     * @param object    the object whose field should be modified\r\n+     * @param fieldName the name of {@link Field}\r\n+     * @return the value of  the specified {@link Field}\r\n+     */\r\n+    static Object getFieldValue(Object object, String fieldName) {\r\n+        return getFieldValue(object, findField(object, fieldName));\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the value of the specified {@link Field}\r\n+     *\r\n+     * @param object the object whose field should be modified\r\n+     * @param field  {@link Field}\r\n+     * @return the value of  the specified {@link Field}\r\n+     */\r\n+    static <T> T getFieldValue(Object object, Field field) {\r\n+        Object value = null;\r\n+        try {\r\n+            ReflectUtils.makeAccessible(field);\r\n+            value = field.get(object);\r\n+        } catch (IllegalAccessException ignored) {\r\n+        } finally {\r\n+            ReflectUtils.makeAccessible(field);\r\n+        }\r\n+        return (T) value;\r\n+    }\r\n+\r\n+    /**\r\n+     * Set the value for the specified {@link Field}\r\n+     *\r\n+     * @param object    the object whose field should be modified\r\n+     * @param fieldName the name of {@link Field}\r\n+     * @param value     the value of field to be set\r\n+     * @return the previous value of the specified {@link Field}\r\n+     */\r\n+    static <T> T setFieldValue(Object object, String fieldName, T value) {\r\n+        return setFieldValue(object, findField(object, fieldName), value);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set the value for the specified {@link Field}\r\n+     *\r\n+     * @param object the object whose field should be modified\r\n+     * @param field  {@link Field}\r\n+     * @param value  the value of field to be set\r\n+     * @return the previous value of the specified {@link Field}\r\n+     */\r\n+    static <T> T setFieldValue(Object object, Field field, T value) {\r\n+        Object previousValue = null;\r\n+        try {\r\n+            ReflectUtils.makeAccessible(field);\r\n+            previousValue = field.get(object);\r\n+            field.set(object, value);\r\n+        } catch (IllegalAccessException ignored) {\r\n+        } finally {\r\n+            ReflectUtils.makeAccessible(field);\r\n+        }\r\n+        return (T) previousValue;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/LFUCache.java", "source2": "org/apache/dubbo/common/utils/LFUCache.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,286 +1,286 @@\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.common.utils;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.concurrent.locks.ReentrantLock;\n-\n-public class LFUCache<K, V> {\n-\n-    private Map<K, CacheNode<K, V>> map;\n-    private CacheDeque<K, V>[] freqTable;\n-\n-    private final int capacity;\n-    private int evictionCount;\n-    private int curSize = 0;\n-\n-    private final ReentrantLock lock = new ReentrantLock();\n-    private static final int DEFAULT_INITIAL_CAPACITY = 1000;\n-\n-    private static final float DEFAULT_EVICTION_FACTOR = 0.75f;\n-\n-    public LFUCache() {\n-        this(DEFAULT_INITIAL_CAPACITY, DEFAULT_EVICTION_FACTOR);\n-    }\n-\n-    /**\n-     * Constructs and initializes cache with specified capacity and eviction\n-     * factor. Unacceptable parameter values followed with\n-     * {@link IllegalArgumentException}.\n-     *\n-     * @param maxCapacity    cache max capacity\n-     * @param evictionFactor cache proceedEviction factor\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public LFUCache(final int maxCapacity, final float evictionFactor) {\n-        if (maxCapacity <= 0) {\n-            throw new IllegalArgumentException(\"Illegal initial capacity: \" +\n-                    maxCapacity);\n-        }\n-        boolean factorInRange = evictionFactor <= 1 && evictionFactor > 0;\n-        if (!factorInRange || Float.isNaN(evictionFactor)) {\n-            throw new IllegalArgumentException(\"Illegal eviction factor value:\"\n-                    + evictionFactor);\n-        }\n-        this.capacity = maxCapacity;\n-        this.evictionCount = (int) (capacity * evictionFactor);\n-        this.map = new HashMap<>();\n-        this.freqTable = new CacheDeque[capacity + 1];\n-        for (int i = 0; i <= capacity; i++) {\n-            freqTable[i] = new CacheDeque<>();\n-        }\n-        for (int i = 0; i < capacity; i++) {\n-            freqTable[i].nextDeque = freqTable[i + 1];\n-        }\n-        freqTable[capacity].nextDeque = freqTable[capacity];\n-    }\n-\n-    public int getCapacity() {\n-        return capacity;\n-    }\n-\n-    public V put(final K key, final V value) {\n-        CacheNode<K, V> node;\n-        lock.lock();\n-        try {\n-            node = map.get(key);\n-            if (node != null) {\n-                CacheNode.withdrawNode(node);\n-                node.value = value;\n-                freqTable[0].addLastNode(node);\n-                map.put(key, node);\n-            } else {\n-                node = freqTable[0].addLast(key, value);\n-                map.put(key, node);\n-                curSize++;\n-                if (curSize > capacity) {\n-                    proceedEviction();\n-                }\n-            }\n-        } finally {\n-            lock.unlock();\n-        }\n-        return node.value;\n-    }\n-\n-    public V remove(final K key) {\n-        CacheNode<K, V> node = null;\n-        lock.lock();\n-        try {\n-            if (map.containsKey(key)) {\n-                node = map.remove(key);\n-                if (node != null) {\n-                    CacheNode.withdrawNode(node);\n-                }\n-                curSize--;\n-            }\n-        } finally {\n-            lock.unlock();\n-        }\n-        return (node != null) ? node.value : null;\n-    }\n-\n-    public V get(final K key) {\n-        CacheNode<K, V> node = null;\n-        lock.lock();\n-        try {\n-            if (map.containsKey(key)) {\n-                node = map.get(key);\n-                CacheNode.withdrawNode(node);\n-                node.owner.nextDeque.addLastNode(node);\n-            }\n-        } finally {\n-            lock.unlock();\n-        }\n-        return (node != null) ? node.value : null;\n-    }\n-\n-    /**\n-     * Evicts less frequently used elements corresponding to eviction factor,\n-     * specified at instantiation step.\n-     *\n-     * @return number of evicted elements\n-     */\n-    private int proceedEviction() {\n-        int targetSize = capacity - evictionCount;\n-        int evictedElements = 0;\n-\n-        FREQ_TABLE_ITER_LOOP:\n-        for (int i = 0; i <= capacity; i++) {\n-            CacheNode<K, V> node;\n-            while (!freqTable[i].isEmpty()) {\n-                node = freqTable[i].pollFirst();\n-                remove(node.key);\n-                if (targetSize >= curSize) {\n-                    break FREQ_TABLE_ITER_LOOP;\n-                }\n-                evictedElements++;\n-            }\n-        }\n-        return evictedElements;\n-    }\n-\n-    /**\n-     * Returns cache current size.\n-     *\n-     * @return cache size\n-     */\n-    public int getSize() {\n-        return curSize;\n-    }\n-\n-    static class CacheNode<K, V> {\n-\n-        CacheNode<K, V> prev;\n-        CacheNode<K, V> next;\n-        K key;\n-        V value;\n-        CacheDeque<K, V> owner;\n-\n-        CacheNode() {\n-        }\n-\n-        CacheNode(final K key, final V value) {\n-            this.key = key;\n-            this.value = value;\n-        }\n-\n-        /**\n-         * This method takes specified node and reattaches it neighbors nodes\n-         * links to each other, so specified node will no longer tied with them.\n-         * Returns united node, returns null if argument is null.\n-         *\n-         * @param node note to retrieve\n-         * @param <K>  key\n-         * @param <V>  value\n-         * @return retrieved node\n-         */\n-        static <K, V> CacheNode<K, V> withdrawNode(\n-                final CacheNode<K, V> node) {\n-            if (node != null && node.prev != null) {\n-                node.prev.next = node.next;\n-                if (node.next != null) {\n-                    node.next.prev = node.prev;\n-                }\n-            }\n-            return node;\n-        }\n-\n-    }\n-\n-    /**\n-     * Custom deque implementation of LIFO type. Allows to place element at top\n-     * of deque and poll very last added elements. An arbitrary node from the\n-     * deque can be removed with {@link CacheNode#withdrawNode(CacheNode)}\n-     * method.\n-     *\n-     * @param <K> key\n-     * @param <V> value\n-     */\n-    static class CacheDeque<K, V> {\n-\n-        CacheNode<K, V> last;\n-        CacheNode<K, V> first;\n-        CacheDeque<K, V> nextDeque;\n-\n-        /**\n-         * Constructs list and initializes last and first pointers.\n-         */\n-        CacheDeque() {\n-            last = new CacheNode<>();\n-            first = new CacheNode<>();\n-            last.next = first;\n-            first.prev = last;\n-        }\n-\n-        /**\n-         * Puts the node with specified key and value at the end of the deque\n-         * and returns node.\n-         *\n-         * @param key   key\n-         * @param value value\n-         * @return added node\n-         */\n-        CacheNode<K, V> addLast(final K key, final V value) {\n-            CacheNode<K, V> node = new CacheNode<>(key, value);\n-            node.owner = this;\n-            node.next = last.next;\n-            node.prev = last;\n-            node.next.prev = node;\n-            last.next = node;\n-            return node;\n-        }\n-\n-        CacheNode<K, V> addLastNode(final CacheNode<K, V> node) {\n-            node.owner = this;\n-            node.next = last.next;\n-            node.prev = last;\n-            node.next.prev = node;\n-            last.next = node;\n-            return node;\n-        }\n-\n-        /**\n-         * Retrieves and removes the first node of this deque.\n-         *\n-         * @return removed node\n-         */\n-        CacheNode<K, V> pollFirst() {\n-            CacheNode<K, V> node = null;\n-            if (first.prev != last) {\n-                node = first.prev;\n-                first.prev = node.prev;\n-                first.prev.next = first;\n-                node.prev = null;\n-                node.next = null;\n-            }\n-            return node;\n-        }\n-\n-        /**\n-         * Checks if link to the last node points to link to the first node.\n-         *\n-         * @return is deque empty\n-         */\n-        boolean isEmpty() {\n-            return last.next == first;\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.common.utils;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.concurrent.locks.ReentrantLock;\r\n+\r\n+public class LFUCache<K, V> {\r\n+\r\n+    private Map<K, CacheNode<K, V>> map;\r\n+    private CacheDeque<K, V>[] freqTable;\r\n+\r\n+    private final int capacity;\r\n+    private int evictionCount;\r\n+    private int curSize = 0;\r\n+\r\n+    private final ReentrantLock lock = new ReentrantLock();\r\n+    private static final int DEFAULT_INITIAL_CAPACITY = 1000;\r\n+\r\n+    private static final float DEFAULT_EVICTION_FACTOR = 0.75f;\r\n+\r\n+    public LFUCache() {\r\n+        this(DEFAULT_INITIAL_CAPACITY, DEFAULT_EVICTION_FACTOR);\r\n+    }\r\n+\r\n+    /**\r\n+     * Constructs and initializes cache with specified capacity and eviction\r\n+     * factor. Unacceptable parameter values followed with\r\n+     * {@link IllegalArgumentException}.\r\n+     *\r\n+     * @param maxCapacity    cache max capacity\r\n+     * @param evictionFactor cache proceedEviction factor\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public LFUCache(final int maxCapacity, final float evictionFactor) {\r\n+        if (maxCapacity <= 0) {\r\n+            throw new IllegalArgumentException(\"Illegal initial capacity: \" +\r\n+                    maxCapacity);\r\n+        }\r\n+        boolean factorInRange = evictionFactor <= 1 && evictionFactor > 0;\r\n+        if (!factorInRange || Float.isNaN(evictionFactor)) {\r\n+            throw new IllegalArgumentException(\"Illegal eviction factor value:\"\r\n+                    + evictionFactor);\r\n+        }\r\n+        this.capacity = maxCapacity;\r\n+        this.evictionCount = (int) (capacity * evictionFactor);\r\n+        this.map = new HashMap<>();\r\n+        this.freqTable = new CacheDeque[capacity + 1];\r\n+        for (int i = 0; i <= capacity; i++) {\r\n+            freqTable[i] = new CacheDeque<>();\r\n+        }\r\n+        for (int i = 0; i < capacity; i++) {\r\n+            freqTable[i].nextDeque = freqTable[i + 1];\r\n+        }\r\n+        freqTable[capacity].nextDeque = freqTable[capacity];\r\n+    }\r\n+\r\n+    public int getCapacity() {\r\n+        return capacity;\r\n+    }\r\n+\r\n+    public V put(final K key, final V value) {\r\n+        CacheNode<K, V> node;\r\n+        lock.lock();\r\n+        try {\r\n+            node = map.get(key);\r\n+            if (node != null) {\r\n+                CacheNode.withdrawNode(node);\r\n+                node.value = value;\r\n+                freqTable[0].addLastNode(node);\r\n+                map.put(key, node);\r\n+            } else {\r\n+                node = freqTable[0].addLast(key, value);\r\n+                map.put(key, node);\r\n+                curSize++;\r\n+                if (curSize > capacity) {\r\n+                    proceedEviction();\r\n+                }\r\n+            }\r\n+        } finally {\r\n+            lock.unlock();\r\n+        }\r\n+        return node.value;\r\n+    }\r\n+\r\n+    public V remove(final K key) {\r\n+        CacheNode<K, V> node = null;\r\n+        lock.lock();\r\n+        try {\r\n+            if (map.containsKey(key)) {\r\n+                node = map.remove(key);\r\n+                if (node != null) {\r\n+                    CacheNode.withdrawNode(node);\r\n+                }\r\n+                curSize--;\r\n+            }\r\n+        } finally {\r\n+            lock.unlock();\r\n+        }\r\n+        return (node != null) ? node.value : null;\r\n+    }\r\n+\r\n+    public V get(final K key) {\r\n+        CacheNode<K, V> node = null;\r\n+        lock.lock();\r\n+        try {\r\n+            if (map.containsKey(key)) {\r\n+                node = map.get(key);\r\n+                CacheNode.withdrawNode(node);\r\n+                node.owner.nextDeque.addLastNode(node);\r\n+            }\r\n+        } finally {\r\n+            lock.unlock();\r\n+        }\r\n+        return (node != null) ? node.value : null;\r\n+    }\r\n+\r\n+    /**\r\n+     * Evicts less frequently used elements corresponding to eviction factor,\r\n+     * specified at instantiation step.\r\n+     *\r\n+     * @return number of evicted elements\r\n+     */\r\n+    private int proceedEviction() {\r\n+        int targetSize = capacity - evictionCount;\r\n+        int evictedElements = 0;\r\n+\r\n+        FREQ_TABLE_ITER_LOOP:\r\n+        for (int i = 0; i <= capacity; i++) {\r\n+            CacheNode<K, V> node;\r\n+            while (!freqTable[i].isEmpty()) {\r\n+                node = freqTable[i].pollFirst();\r\n+                remove(node.key);\r\n+                if (targetSize >= curSize) {\r\n+                    break FREQ_TABLE_ITER_LOOP;\r\n+                }\r\n+                evictedElements++;\r\n+            }\r\n+        }\r\n+        return evictedElements;\r\n+    }\r\n+\r\n+    /**\r\n+     * Returns cache current size.\r\n+     *\r\n+     * @return cache size\r\n+     */\r\n+    public int getSize() {\r\n+        return curSize;\r\n+    }\r\n+\r\n+    static class CacheNode<K, V> {\r\n+\r\n+        CacheNode<K, V> prev;\r\n+        CacheNode<K, V> next;\r\n+        K key;\r\n+        V value;\r\n+        CacheDeque<K, V> owner;\r\n+\r\n+        CacheNode() {\r\n+        }\r\n+\r\n+        CacheNode(final K key, final V value) {\r\n+            this.key = key;\r\n+            this.value = value;\r\n+        }\r\n+\r\n+        /**\r\n+         * This method takes specified node and reattaches it neighbors nodes\r\n+         * links to each other, so specified node will no longer tied with them.\r\n+         * Returns united node, returns null if argument is null.\r\n+         *\r\n+         * @param node note to retrieve\r\n+         * @param <K>  key\r\n+         * @param <V>  value\r\n+         * @return retrieved node\r\n+         */\r\n+        static <K, V> CacheNode<K, V> withdrawNode(\r\n+                final CacheNode<K, V> node) {\r\n+            if (node != null && node.prev != null) {\r\n+                node.prev.next = node.next;\r\n+                if (node.next != null) {\r\n+                    node.next.prev = node.prev;\r\n+                }\r\n+            }\r\n+            return node;\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    /**\r\n+     * Custom deque implementation of LIFO type. Allows to place element at top\r\n+     * of deque and poll very last added elements. An arbitrary node from the\r\n+     * deque can be removed with {@link CacheNode#withdrawNode(CacheNode)}\r\n+     * method.\r\n+     *\r\n+     * @param <K> key\r\n+     * @param <V> value\r\n+     */\r\n+    static class CacheDeque<K, V> {\r\n+\r\n+        CacheNode<K, V> last;\r\n+        CacheNode<K, V> first;\r\n+        CacheDeque<K, V> nextDeque;\r\n+\r\n+        /**\r\n+         * Constructs list and initializes last and first pointers.\r\n+         */\r\n+        CacheDeque() {\r\n+            last = new CacheNode<>();\r\n+            first = new CacheNode<>();\r\n+            last.next = first;\r\n+            first.prev = last;\r\n+        }\r\n+\r\n+        /**\r\n+         * Puts the node with specified key and value at the end of the deque\r\n+         * and returns node.\r\n+         *\r\n+         * @param key   key\r\n+         * @param value value\r\n+         * @return added node\r\n+         */\r\n+        CacheNode<K, V> addLast(final K key, final V value) {\r\n+            CacheNode<K, V> node = new CacheNode<>(key, value);\r\n+            node.owner = this;\r\n+            node.next = last.next;\r\n+            node.prev = last;\r\n+            node.next.prev = node;\r\n+            last.next = node;\r\n+            return node;\r\n+        }\r\n+\r\n+        CacheNode<K, V> addLastNode(final CacheNode<K, V> node) {\r\n+            node.owner = this;\r\n+            node.next = last.next;\r\n+            node.prev = last;\r\n+            node.next.prev = node;\r\n+            last.next = node;\r\n+            return node;\r\n+        }\r\n+\r\n+        /**\r\n+         * Retrieves and removes the first node of this deque.\r\n+         *\r\n+         * @return removed node\r\n+         */\r\n+        CacheNode<K, V> pollFirst() {\r\n+            CacheNode<K, V> node = null;\r\n+            if (first.prev != last) {\r\n+                node = first.prev;\r\n+                first.prev = node.prev;\r\n+                first.prev.next = first;\r\n+                node.prev = null;\r\n+                node.next = null;\r\n+            }\r\n+            return node;\r\n+        }\r\n+\r\n+        /**\r\n+         * Checks if link to the last node points to link to the first node.\r\n+         *\r\n+         * @return is deque empty\r\n+         */\r\n+        boolean isEmpty() {\r\n+            return last.next == first;\r\n+        }\r\n+\r\n+    }\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/common/utils/MemberUtils.java", "source2": "org/apache/dubbo/common/utils/MemberUtils.java", "comments": ["Line-ending 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.common.utils;\n-\n-import java.lang.reflect.Constructor;\n-import java.lang.reflect.Field;\n-import java.lang.reflect.Member;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Modifier;\n-\n-/**\n- * Java Reflection {@link Member} Utilities class\n- *\n- * @since 2.7.6\n- */\n-public interface MemberUtils {\n-\n-    /**\n-     * check the specified {@link Member member} is static or not ?\n-     *\n-     * @param member {@link Member} instance, e.g, {@link Constructor}, {@link Method} or {@link Field}\n-     * @return Iff <code>member</code> is static one, return <code>true</code>, or <code>false</code>\n-     */\n-    static boolean isStatic(Member member) {\n-        return member != null && Modifier.isStatic(member.getModifiers());\n-    }\n-\n-    /**\n-     * check the specified {@link Member member} is private or not ?\n-     *\n-     * @param member {@link Member} instance, e.g, {@link Constructor}, {@link Method} or {@link Field}\n-     * @return Iff <code>member</code> is private one, return <code>true</code>, or <code>false</code>\n-     */\n-    static boolean isPrivate(Member member) {\n-        return member != null && Modifier.isPrivate(member.getModifiers());\n-    }\n-\n-    /**\n-     * check the specified {@link Member member} is public or not ?\n-     *\n-     * @param member {@link Member} instance, e.g, {@link Constructor}, {@link Method} or {@link Field}\n-     * @return Iff <code>member</code> is public one, return <code>true</code>, or <code>false</code>\n-     */\n-    static boolean isPublic(Member member) {\n-        return member != null && Modifier.isPublic(member.getModifiers());\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.common.utils;\r\n+\r\n+import java.lang.reflect.Constructor;\r\n+import java.lang.reflect.Field;\r\n+import java.lang.reflect.Member;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Modifier;\r\n+\r\n+/**\r\n+ * Java Reflection {@link Member} Utilities class\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface MemberUtils {\r\n+\r\n+    /**\r\n+     * check the specified {@link Member member} is static or not ?\r\n+     *\r\n+     * @param member {@link Member} instance, e.g, {@link Constructor}, {@link Method} or {@link Field}\r\n+     * @return Iff <code>member</code> is static one, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    static boolean isStatic(Member member) {\r\n+        return member != null && Modifier.isStatic(member.getModifiers());\r\n+    }\r\n+\r\n+    /**\r\n+     * check the specified {@link Member member} is private or not ?\r\n+     *\r\n+     * @param member {@link Member} instance, e.g, {@link Constructor}, {@link Method} or {@link Field}\r\n+     * @return Iff <code>member</code> is private one, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    static boolean isPrivate(Member member) {\r\n+        return member != null && Modifier.isPrivate(member.getModifiers());\r\n+    }\r\n+\r\n+    /**\r\n+     * check the specified {@link Member member} is public or not ?\r\n+     *\r\n+     * @param member {@link Member} instance, e.g, {@link Constructor}, {@link Method} or {@link Field}\r\n+     * @return Iff <code>member</code> is public one, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    static boolean isPublic(Member member) {\r\n+        return member != null && Modifier.isPublic(member.getModifiers());\r\n+    }\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/common/utils/MethodComparator.java", "source2": "org/apache/dubbo/common/utils/MethodComparator.java", "comments": ["Line-ending 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.common.utils;\n-\n-import java.lang.reflect.Method;\n-import java.util.Comparator;\n-\n-/**\n- * The Comparator class for {@link Method}, the comparison rule :\n- * <ol>\n- *     <li>Comparing to two {@link Method#getName() method names} {@link String#compareTo(String) lexicographically}.\n- *     If equals, go to step 2</li>\n- *     <li>Comparing to the count of two method parameters. If equals, go to step 3</li>\n- *     <li>Comparing to the type names of methods parameter {@link String#compareTo(String) lexicographically}</li>\n- * </ol>\n- *\n- * @since 2.7.6\n- */\n-public class MethodComparator implements Comparator<Method> {\n-\n-    public final static MethodComparator INSTANCE = new MethodComparator();\n-\n-    private MethodComparator() {\n-    }\n-\n-    @Override\n-    public int compare(Method m1, Method m2) {\n-\n-        if (m1.equals(m2)) {\n-            return 0;\n-        }\n-\n-        // Step 1\n-        String n1 = m1.getName();\n-        String n2 = m2.getName();\n-        int value = n1.compareTo(n2);\n-\n-        if (value == 0) { // Step 2\n-\n-            Class[] types1 = m1.getParameterTypes();\n-            Class[] types2 = m2.getParameterTypes();\n-\n-            value = types1.length - types2.length;\n-\n-            if (value == 0) { // Step 3\n-                for (int i = 0; i < types1.length; i++) {\n-                    value = types1[i].getName().compareTo(types2[i].getName());\n-                    if (value != 0) {\n-                        break;\n-                    }\n-                }\n-            }\n-        }\n-\n-        return Integer.compare(value, 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.common.utils;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.util.Comparator;\r\n+\r\n+/**\r\n+ * The Comparator class for {@link Method}, the comparison rule :\r\n+ * <ol>\r\n+ *     <li>Comparing to two {@link Method#getName() method names} {@link String#compareTo(String) lexicographically}.\r\n+ *     If equals, go to step 2</li>\r\n+ *     <li>Comparing to the count of two method parameters. If equals, go to step 3</li>\r\n+ *     <li>Comparing to the type names of methods parameter {@link String#compareTo(String) lexicographically}</li>\r\n+ * </ol>\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class MethodComparator implements Comparator<Method> {\r\n+\r\n+    public final static MethodComparator INSTANCE = new MethodComparator();\r\n+\r\n+    private MethodComparator() {\r\n+    }\r\n+\r\n+    @Override\r\n+    public int compare(Method m1, Method m2) {\r\n+\r\n+        if (m1.equals(m2)) {\r\n+            return 0;\r\n+        }\r\n+\r\n+        // Step 1\r\n+        String n1 = m1.getName();\r\n+        String n2 = m2.getName();\r\n+        int value = n1.compareTo(n2);\r\n+\r\n+        if (value == 0) { // Step 2\r\n+\r\n+            Class[] types1 = m1.getParameterTypes();\r\n+            Class[] types2 = m2.getParameterTypes();\r\n+\r\n+            value = types1.length - types2.length;\r\n+\r\n+            if (value == 0) { // Step 3\r\n+                for (int i = 0; i < types1.length; i++) {\r\n+                    value = types1[i].getName().compareTo(types2[i].getName());\r\n+                    if (value != 0) {\r\n+                        break;\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        return Integer.compare(value, 0);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/MethodUtils.java", "source2": "org/apache/dubbo/common/utils/MethodUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,389 +1,389 @@\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.common.utils;\n-\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.util.Elements;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Modifier;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Objects;\n-import java.util.function.Predicate;\n-\n-import static java.util.Collections.emptyList;\n-import static java.util.Collections.unmodifiableList;\n-import static org.apache.dubbo.common.function.Streams.filterAll;\n-import static org.apache.dubbo.common.utils.ClassUtils.getAllInheritedTypes;\n-import static org.apache.dubbo.common.utils.MemberUtils.isPrivate;\n-import static org.apache.dubbo.common.utils.MemberUtils.isStatic;\n-import static org.apache.dubbo.common.utils.ReflectUtils.EMPTY_CLASS_ARRAY;\n-import static org.apache.dubbo.common.utils.ReflectUtils.resolveTypes;\n-import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\n-\n-/**\n- * Miscellaneous method utility methods.\n- * Mainly for internal use within the framework.\n- *\n- * @since 2.7.2\n- */\n-public interface MethodUtils {\n-\n-    /**\n-     * Return {@code true} if the provided method is a set method.\n-     * Otherwise, return {@code false}.\n-     *\n-     * @param method the method to check\n-     * @return whether the given method is setter method\n-     */\n-    public static boolean isSetter(Method method) {\n-        return method.getName().startsWith(\"set\")\n-                && !\"set\".equals(method.getName())\n-                && Modifier.isPublic(method.getModifiers())\n-                && method.getParameterCount() == 1\n-                && ClassUtils.isPrimitive(method.getParameterTypes()[0]);\n-    }\n-\n-    /**\n-     * Return {@code true} if the provided method is a get method.\n-     * Otherwise, return {@code false}.\n-     *\n-     * @param method the method to check\n-     * @return whether the given method is getter method\n-     */\n-    public static boolean isGetter(Method method) {\n-        String name = method.getName();\n-        return (name.startsWith(\"get\") || name.startsWith(\"is\"))\n-                && !\"get\".equals(name) && !\"is\".equals(name)\n-                && !\"getClass\".equals(name) && !\"getObject\".equals(name)\n-                && Modifier.isPublic(method.getModifiers())\n-                && method.getParameterTypes().length == 0\n-                && ClassUtils.isPrimitive(method.getReturnType());\n-    }\n-\n-    /**\n-     * Return {@code true} If this method is a meta method.\n-     * Otherwise, return {@code false}.\n-     *\n-     * @param method the method to check\n-     * @return whether the given method is meta method\n-     */\n-    public static boolean isMetaMethod(Method method) {\n-        String name = method.getName();\n-        if (!(name.startsWith(\"get\") || name.startsWith(\"is\"))) {\n-            return false;\n-        }\n-        if (\"get\".equals(name)) {\n-            return false;\n-        }\n-        if (\"getClass\".equals(name)) {\n-            return false;\n-        }\n-        if (!Modifier.isPublic(method.getModifiers())) {\n-            return false;\n-        }\n-        if (method.getParameterTypes().length != 0) {\n-            return false;\n-        }\n-        if (!ClassUtils.isPrimitive(method.getReturnType())) {\n-            return false;\n-        }\n-        return true;\n-    }\n-\n-    /**\n-     * Check if the method is a deprecated method. The standard is whether the {@link java.lang.Deprecated} annotation is declared on the class.\n-     * Return {@code true} if this annotation is present.\n-     * Otherwise, return {@code false}.\n-     *\n-     * @param method the method to check\n-     * @return whether the given method is deprecated method\n-     */\n-    public static boolean isDeprecated(Method method) {\n-        return method.getAnnotation(Deprecated.class) != null;\n-    }\n-\n-\n-    /**\n-     * Create an instance of {@link Predicate} for {@link Method} to exclude the specified declared class\n-     *\n-     * @param declaredClass the declared class to exclude\n-     * @return non-null\n-     * @since 2.7.6\n-     */\n-    static Predicate<Method> excludedDeclaredClass(Class<?> declaredClass) {\n-        return method -> !Objects.equals(declaredClass, method.getDeclaringClass());\n-    }\n-\n-    /**\n-     * Get all {@link Method methods} of the declared class\n-     *\n-     * @param declaringClass        the declared class\n-     * @param includeInheritedTypes include the inherited types, e,g. super classes or interfaces\n-     * @param publicOnly            only public method\n-     * @param methodsToFilter       (optional) the methods to be filtered\n-     * @return non-null read-only {@link List}\n-     * @since 2.7.6\n-     */\n-    static List<Method> getMethods(Class<?> declaringClass, boolean includeInheritedTypes, boolean publicOnly,\n-                                   Predicate<Method>... methodsToFilter) {\n-\n-        if (declaringClass == null || declaringClass.isPrimitive()) {\n-            return emptyList();\n-        }\n-\n-        // All declared classes\n-        List<Class<?>> declaredClasses = new LinkedList<>();\n-        // Add the top declaring class\n-        declaredClasses.add(declaringClass);\n-        // If the super classes are resolved, all them into declaredClasses\n-        if (includeInheritedTypes) {\n-            declaredClasses.addAll(getAllInheritedTypes(declaringClass));\n-        }\n-\n-        // All methods\n-        List<Method> allMethods = new LinkedList<>();\n-\n-        for (Class<?> classToSearch : declaredClasses) {\n-            Method[] methods = publicOnly ? classToSearch.getMethods() : classToSearch.getDeclaredMethods();\n-            // Add the declared methods or public methods\n-            for (Method method : methods) {\n-                allMethods.add(method);\n-            }\n-        }\n-\n-        return unmodifiableList(filterAll(allMethods, methodsToFilter));\n-    }\n-\n-    /**\n-     * Get all declared {@link Method methods} of the declared class, excluding the inherited methods\n-     *\n-     * @param declaringClass  the declared class\n-     * @param methodsToFilter (optional) the methods to be filtered\n-     * @return non-null read-only {@link List}\n-     * @see #getMethods(Class, boolean, boolean, Predicate[])\n-     * @since 2.7.6\n-     */\n-    static List<Method> getDeclaredMethods(Class<?> declaringClass, Predicate<Method>... methodsToFilter) {\n-        return getMethods(declaringClass, false, false, methodsToFilter);\n-    }\n-\n-    /**\n-     * Get all public {@link Method methods} of the declared class, including the inherited methods.\n-     *\n-     * @param declaringClass  the declared class\n-     * @param methodsToFilter (optional) the methods to be filtered\n-     * @return non-null read-only {@link List}\n-     * @see #getMethods(Class, boolean, boolean, Predicate[])\n-     * @since 2.7.6\n-     */\n-    static List<Method> getMethods(Class<?> declaringClass, Predicate<Method>... methodsToFilter) {\n-        return getMethods(declaringClass, false, true, methodsToFilter);\n-    }\n-\n-    /**\n-     * Get all declared {@link Method methods} of the declared class, including the inherited methods.\n-     *\n-     * @param declaringClass  the declared class\n-     * @param methodsToFilter (optional) the methods to be filtered\n-     * @return non-null read-only {@link List}\n-     * @see #getMethods(Class, boolean, boolean, Predicate[])\n-     * @since 2.7.6\n-     */\n-    static List<Method> getAllDeclaredMethods(Class<?> declaringClass, Predicate<Method>... methodsToFilter) {\n-        return getMethods(declaringClass, true, false, methodsToFilter);\n-    }\n-\n-    /**\n-     * Get all public {@link Method methods} of the declared class, including the inherited methods.\n-     *\n-     * @param declaringClass  the declared class\n-     * @param methodsToFilter (optional) the methods to be filtered\n-     * @return non-null read-only {@link List}\n-     * @see #getMethods(Class, boolean, boolean, Predicate[])\n-     * @since 2.7.6\n-     */\n-    static List<Method> getAllMethods(Class<?> declaringClass, Predicate<Method>... methodsToFilter) {\n-        return getMethods(declaringClass, true, true, methodsToFilter);\n-    }\n-\n-//    static List<Method> getOverriderMethods(Class<?> implementationClass, Class<?>... superTypes) {\n-\n-//\n-\n-//    }\n-\n-    /**\n-     * Find the {@link Method} by the the specified type and method name without the parameter types\n-     *\n-     * @param type       the target type\n-     * @param methodName the specified method name\n-     * @return if not found, return <code>null</code>\n-     * @since 2.7.6\n-     */\n-    static Method findMethod(Class type, String methodName) {\n-        return findMethod(type, methodName, EMPTY_CLASS_ARRAY);\n-    }\n-\n-    /**\n-     * Find the {@link Method} by the the specified type, method name and parameter types\n-     *\n-     * @param type           the target type\n-     * @param methodName     the method name\n-     * @param parameterTypes the parameter types\n-     * @return if not found, return <code>null</code>\n-     * @since 2.7.6\n-     */\n-    static Method findMethod(Class type, String methodName, Class<?>... parameterTypes) {\n-        Method method = null;\n-        try {\n-            if (type != null && isNotEmpty(methodName)) {\n-                method = type.getDeclaredMethod(methodName, parameterTypes);\n-            }\n-        } catch (NoSuchMethodException e) {\n-        }\n-        return method;\n-    }\n-\n-    /**\n-     * Invoke the target object and method\n-     *\n-     * @param object           the target object\n-     * @param methodName       the method name\n-     * @param methodParameters the method parameters\n-     * @param <T>              the return type\n-     * @return the target method's execution result\n-     * @since 2.7.6\n-     */\n-    static <T> T invokeMethod(Object object, String methodName, Object... methodParameters) {\n-        Class type = object.getClass();\n-        Class[] parameterTypes = resolveTypes(methodParameters);\n-        Method method = findMethod(type, methodName, parameterTypes);\n-        T value = null;\n-\n-        try {\n-            ReflectUtils.makeAccessible(method);\n-            value = (T) method.invoke(object, methodParameters);\n-        } catch (Exception e) {\n-            throw new IllegalArgumentException(e);\n-        }\n-\n-        return value;\n-    }\n-\n-\n-    /**\n-     * Tests whether one method, as a member of a given type,\n-     * overrides another method.\n-     *\n-     * @param overrider  the first method, possible overrider\n-     * @param overridden the second method, possibly being overridden\n-     * @return {@code true} if and only if the first method overrides\n-     * the second\n-     * @jls 8.4.8 Inheritance, Overriding, and Hiding\n-     * @jls 9.4.1 Inheritance and Overriding\n-     * @see Elements#overrides(ExecutableElement, ExecutableElement, TypeElement)\n-     */\n-    static boolean overrides(Method overrider, Method overridden) {\n-\n-        if (overrider == null || overridden == null) {\n-            return false;\n-        }\n-\n-        // equality comparison: If two methods are same\n-        if (Objects.equals(overrider, overridden)) {\n-            return false;\n-        }\n-\n-        // Modifiers comparison: Any method must be non-static method\n-        if (isStatic(overrider) || isStatic(overridden)) { //\n-            return false;\n-        }\n-\n-        // Modifiers comparison: the accessibility of any method must not be private\n-        if (isPrivate(overrider) || isPrivate(overridden)) {\n-            return false;\n-        }\n-\n-        // Inheritance comparison: The declaring class of overrider must be inherit from the overridden's\n-        if (!overridden.getDeclaringClass().isAssignableFrom(overrider.getDeclaringClass())) {\n-            return false;\n-        }\n-\n-        // Method comparison: must not be \"default\" method\n-        if (overrider.isDefault()) {\n-            return false;\n-        }\n-\n-        // Method comparison: The method name must be equal\n-        if (!Objects.equals(overrider.getName(), overridden.getName())) {\n-            return false;\n-        }\n-\n-        // Method comparison: The count of method parameters must be equal\n-        if (!Objects.equals(overrider.getParameterCount(), overridden.getParameterCount())) {\n-            return false;\n-        }\n-\n-        // Method comparison: Any parameter type of overrider must equal the overridden's\n-        for (int i = 0; i < overrider.getParameterCount(); i++) {\n-            if (!Objects.equals(overridden.getParameterTypes()[i], overrider.getParameterTypes()[i])) {\n-                return false;\n-            }\n-        }\n-\n-        // Method comparison: The return type of overrider must be inherit from the overridden's\n-        if (!overridden.getReturnType().isAssignableFrom(overrider.getReturnType())) {\n-            return false;\n-        }\n-\n-        // Throwable comparison: \"throws\" Throwable list will be ignored, trust the compiler verify\n-\n-        return true;\n-    }\n-\n-    /**\n-     * Find the nearest overridden {@link Method method} from the inherited class\n-     *\n-     * @param overrider the overrider {@link Method method}\n-     * @return if found, the overrider <code>method</code>, or <code>null</code>\n-     */\n-    static Method findNearestOverriddenMethod(Method overrider) {\n-        Class<?> declaringClass = overrider.getDeclaringClass();\n-        Method overriddenMethod = null;\n-        for (Class<?> inheritedType : getAllInheritedTypes(declaringClass)) {\n-            overriddenMethod = findOverriddenMethod(overrider, inheritedType);\n-            if (overriddenMethod != null) {\n-                break;\n-            }\n-        }\n-        return overriddenMethod;\n-    }\n-\n-    /**\n-     * Find the overridden {@link Method method} from the declaring class\n-     *\n-     * @param overrider      the overrider {@link Method method}\n-     * @param declaringClass the class that is declaring the overridden {@link Method method}\n-     * @return if found, the overrider <code>method</code>, or <code>null</code>\n-     */\n-    static Method findOverriddenMethod(Method overrider, Class<?> declaringClass) {\n-        List<Method> matchedMethods = getAllMethods(declaringClass, method -> overrides(overrider, method));\n-        return matchedMethods.isEmpty() ? null : matchedMethods.get(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.common.utils;\r\n+\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.util.Elements;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Modifier;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Objects;\r\n+import java.util.function.Predicate;\r\n+\r\n+import static java.util.Collections.emptyList;\r\n+import static java.util.Collections.unmodifiableList;\r\n+import static org.apache.dubbo.common.function.Streams.filterAll;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.getAllInheritedTypes;\r\n+import static org.apache.dubbo.common.utils.MemberUtils.isPrivate;\r\n+import static org.apache.dubbo.common.utils.MemberUtils.isStatic;\r\n+import static org.apache.dubbo.common.utils.ReflectUtils.EMPTY_CLASS_ARRAY;\r\n+import static org.apache.dubbo.common.utils.ReflectUtils.resolveTypes;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\r\n+\r\n+/**\r\n+ * Miscellaneous method utility methods.\r\n+ * Mainly for internal use within the framework.\r\n+ *\r\n+ * @since 2.7.2\r\n+ */\r\n+public interface MethodUtils {\r\n+\r\n+    /**\r\n+     * Return {@code true} if the provided method is a set method.\r\n+     * Otherwise, return {@code false}.\r\n+     *\r\n+     * @param method the method to check\r\n+     * @return whether the given method is setter method\r\n+     */\r\n+    public static boolean isSetter(Method method) {\r\n+        return method.getName().startsWith(\"set\")\r\n+                && !\"set\".equals(method.getName())\r\n+                && Modifier.isPublic(method.getModifiers())\r\n+                && method.getParameterCount() == 1\r\n+                && ClassUtils.isPrimitive(method.getParameterTypes()[0]);\r\n+    }\r\n+\r\n+    /**\r\n+     * Return {@code true} if the provided method is a get method.\r\n+     * Otherwise, return {@code false}.\r\n+     *\r\n+     * @param method the method to check\r\n+     * @return whether the given method is getter method\r\n+     */\r\n+    public static boolean isGetter(Method method) {\r\n+        String name = method.getName();\r\n+        return (name.startsWith(\"get\") || name.startsWith(\"is\"))\r\n+                && !\"get\".equals(name) && !\"is\".equals(name)\r\n+                && !\"getClass\".equals(name) && !\"getObject\".equals(name)\r\n+                && Modifier.isPublic(method.getModifiers())\r\n+                && method.getParameterTypes().length == 0\r\n+                && ClassUtils.isPrimitive(method.getReturnType());\r\n+    }\r\n+\r\n+    /**\r\n+     * Return {@code true} If this method is a meta method.\r\n+     * Otherwise, return {@code false}.\r\n+     *\r\n+     * @param method the method to check\r\n+     * @return whether the given method is meta method\r\n+     */\r\n+    public static boolean isMetaMethod(Method method) {\r\n+        String name = method.getName();\r\n+        if (!(name.startsWith(\"get\") || name.startsWith(\"is\"))) {\r\n+            return false;\r\n+        }\r\n+        if (\"get\".equals(name)) {\r\n+            return false;\r\n+        }\r\n+        if (\"getClass\".equals(name)) {\r\n+            return false;\r\n+        }\r\n+        if (!Modifier.isPublic(method.getModifiers())) {\r\n+            return false;\r\n+        }\r\n+        if (method.getParameterTypes().length != 0) {\r\n+            return false;\r\n+        }\r\n+        if (!ClassUtils.isPrimitive(method.getReturnType())) {\r\n+            return false;\r\n+        }\r\n+        return true;\r\n+    }\r\n+\r\n+    /**\r\n+     * Check if the method is a deprecated method. The standard is whether the {@link java.lang.Deprecated} annotation is declared on the class.\r\n+     * Return {@code true} if this annotation is present.\r\n+     * Otherwise, return {@code false}.\r\n+     *\r\n+     * @param method the method to check\r\n+     * @return whether the given method is deprecated method\r\n+     */\r\n+    public static boolean isDeprecated(Method method) {\r\n+        return method.getAnnotation(Deprecated.class) != null;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Create an instance of {@link Predicate} for {@link Method} to exclude the specified declared class\r\n+     *\r\n+     * @param declaredClass the declared class to exclude\r\n+     * @return non-null\r\n+     * @since 2.7.6\r\n+     */\r\n+    static Predicate<Method> excludedDeclaredClass(Class<?> declaredClass) {\r\n+        return method -> !Objects.equals(declaredClass, method.getDeclaringClass());\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all {@link Method methods} of the declared class\r\n+     *\r\n+     * @param declaringClass        the declared class\r\n+     * @param includeInheritedTypes include the inherited types, e,g. super classes or interfaces\r\n+     * @param publicOnly            only public method\r\n+     * @param methodsToFilter       (optional) the methods to be filtered\r\n+     * @return non-null read-only {@link List}\r\n+     * @since 2.7.6\r\n+     */\r\n+    static List<Method> getMethods(Class<?> declaringClass, boolean includeInheritedTypes, boolean publicOnly,\r\n+                                   Predicate<Method>... methodsToFilter) {\r\n+\r\n+        if (declaringClass == null || declaringClass.isPrimitive()) {\r\n+            return emptyList();\r\n+        }\r\n+\r\n+        // All declared classes\r\n+        List<Class<?>> declaredClasses = new LinkedList<>();\r\n+        // Add the top declaring class\r\n+        declaredClasses.add(declaringClass);\r\n+        // If the super classes are resolved, all them into declaredClasses\r\n+        if (includeInheritedTypes) {\r\n+            declaredClasses.addAll(getAllInheritedTypes(declaringClass));\r\n+        }\r\n+\r\n+        // All methods\r\n+        List<Method> allMethods = new LinkedList<>();\r\n+\r\n+        for (Class<?> classToSearch : declaredClasses) {\r\n+            Method[] methods = publicOnly ? classToSearch.getMethods() : classToSearch.getDeclaredMethods();\r\n+            // Add the declared methods or public methods\r\n+            for (Method method : methods) {\r\n+                allMethods.add(method);\r\n+            }\r\n+        }\r\n+\r\n+        return unmodifiableList(filterAll(allMethods, methodsToFilter));\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all declared {@link Method methods} of the declared class, excluding the inherited methods\r\n+     *\r\n+     * @param declaringClass  the declared class\r\n+     * @param methodsToFilter (optional) the methods to be filtered\r\n+     * @return non-null read-only {@link List}\r\n+     * @see #getMethods(Class, boolean, boolean, Predicate[])\r\n+     * @since 2.7.6\r\n+     */\r\n+    static List<Method> getDeclaredMethods(Class<?> declaringClass, Predicate<Method>... methodsToFilter) {\r\n+        return getMethods(declaringClass, false, false, methodsToFilter);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all public {@link Method methods} of the declared class, including the inherited methods.\r\n+     *\r\n+     * @param declaringClass  the declared class\r\n+     * @param methodsToFilter (optional) the methods to be filtered\r\n+     * @return non-null read-only {@link List}\r\n+     * @see #getMethods(Class, boolean, boolean, Predicate[])\r\n+     * @since 2.7.6\r\n+     */\r\n+    static List<Method> getMethods(Class<?> declaringClass, Predicate<Method>... methodsToFilter) {\r\n+        return getMethods(declaringClass, false, true, methodsToFilter);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all declared {@link Method methods} of the declared class, including the inherited methods.\r\n+     *\r\n+     * @param declaringClass  the declared class\r\n+     * @param methodsToFilter (optional) the methods to be filtered\r\n+     * @return non-null read-only {@link List}\r\n+     * @see #getMethods(Class, boolean, boolean, Predicate[])\r\n+     * @since 2.7.6\r\n+     */\r\n+    static List<Method> getAllDeclaredMethods(Class<?> declaringClass, Predicate<Method>... methodsToFilter) {\r\n+        return getMethods(declaringClass, true, false, methodsToFilter);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all public {@link Method methods} of the declared class, including the inherited methods.\r\n+     *\r\n+     * @param declaringClass  the declared class\r\n+     * @param methodsToFilter (optional) the methods to be filtered\r\n+     * @return non-null read-only {@link List}\r\n+     * @see #getMethods(Class, boolean, boolean, Predicate[])\r\n+     * @since 2.7.6\r\n+     */\r\n+    static List<Method> getAllMethods(Class<?> declaringClass, Predicate<Method>... methodsToFilter) {\r\n+        return getMethods(declaringClass, true, true, methodsToFilter);\r\n+    }\r\n+\r\n+//    static List<Method> getOverriderMethods(Class<?> implementationClass, Class<?>... superTypes) {\r\n+\r\n+//\r\n+\r\n+//    }\r\n+\r\n+    /**\r\n+     * Find the {@link Method} by the the specified type and method name without the parameter types\r\n+     *\r\n+     * @param type       the target type\r\n+     * @param methodName the specified method name\r\n+     * @return if not found, return <code>null</code>\r\n+     * @since 2.7.6\r\n+     */\r\n+    static Method findMethod(Class type, String methodName) {\r\n+        return findMethod(type, methodName, EMPTY_CLASS_ARRAY);\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the {@link Method} by the the specified type, method name and parameter types\r\n+     *\r\n+     * @param type           the target type\r\n+     * @param methodName     the method name\r\n+     * @param parameterTypes the parameter types\r\n+     * @return if not found, return <code>null</code>\r\n+     * @since 2.7.6\r\n+     */\r\n+    static Method findMethod(Class type, String methodName, Class<?>... parameterTypes) {\r\n+        Method method = null;\r\n+        try {\r\n+            if (type != null && isNotEmpty(methodName)) {\r\n+                method = type.getDeclaredMethod(methodName, parameterTypes);\r\n+            }\r\n+        } catch (NoSuchMethodException e) {\r\n+        }\r\n+        return method;\r\n+    }\r\n+\r\n+    /**\r\n+     * Invoke the target object and method\r\n+     *\r\n+     * @param object           the target object\r\n+     * @param methodName       the method name\r\n+     * @param methodParameters the method parameters\r\n+     * @param <T>              the return type\r\n+     * @return the target method's execution result\r\n+     * @since 2.7.6\r\n+     */\r\n+    static <T> T invokeMethod(Object object, String methodName, Object... methodParameters) {\r\n+        Class type = object.getClass();\r\n+        Class[] parameterTypes = resolveTypes(methodParameters);\r\n+        Method method = findMethod(type, methodName, parameterTypes);\r\n+        T value = null;\r\n+\r\n+        try {\r\n+            ReflectUtils.makeAccessible(method);\r\n+            value = (T) method.invoke(object, methodParameters);\r\n+        } catch (Exception e) {\r\n+            throw new IllegalArgumentException(e);\r\n+        }\r\n+\r\n+        return value;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Tests whether one method, as a member of a given type,\r\n+     * overrides another method.\r\n+     *\r\n+     * @param overrider  the first method, possible overrider\r\n+     * @param overridden the second method, possibly being overridden\r\n+     * @return {@code true} if and only if the first method overrides\r\n+     * the second\r\n+     * @jls 8.4.8 Inheritance, Overriding, and Hiding\r\n+     * @jls 9.4.1 Inheritance and Overriding\r\n+     * @see Elements#overrides(ExecutableElement, ExecutableElement, TypeElement)\r\n+     */\r\n+    static boolean overrides(Method overrider, Method overridden) {\r\n+\r\n+        if (overrider == null || overridden == null) {\r\n+            return false;\r\n+        }\r\n+\r\n+        // equality comparison: If two methods are same\r\n+        if (Objects.equals(overrider, overridden)) {\r\n+            return false;\r\n+        }\r\n+\r\n+        // Modifiers comparison: Any method must be non-static method\r\n+        if (isStatic(overrider) || isStatic(overridden)) { //\r\n+            return false;\r\n+        }\r\n+\r\n+        // Modifiers comparison: the accessibility of any method must not be private\r\n+        if (isPrivate(overrider) || isPrivate(overridden)) {\r\n+            return false;\r\n+        }\r\n+\r\n+        // Inheritance comparison: The declaring class of overrider must be inherit from the overridden's\r\n+        if (!overridden.getDeclaringClass().isAssignableFrom(overrider.getDeclaringClass())) {\r\n+            return false;\r\n+        }\r\n+\r\n+        // Method comparison: must not be \"default\" method\r\n+        if (overrider.isDefault()) {\r\n+            return false;\r\n+        }\r\n+\r\n+        // Method comparison: The method name must be equal\r\n+        if (!Objects.equals(overrider.getName(), overridden.getName())) {\r\n+            return false;\r\n+        }\r\n+\r\n+        // Method comparison: The count of method parameters must be equal\r\n+        if (!Objects.equals(overrider.getParameterCount(), overridden.getParameterCount())) {\r\n+            return false;\r\n+        }\r\n+\r\n+        // Method comparison: Any parameter type of overrider must equal the overridden's\r\n+        for (int i = 0; i < overrider.getParameterCount(); i++) {\r\n+            if (!Objects.equals(overridden.getParameterTypes()[i], overrider.getParameterTypes()[i])) {\r\n+                return false;\r\n+            }\r\n+        }\r\n+\r\n+        // Method comparison: The return type of overrider must be inherit from the overridden's\r\n+        if (!overridden.getReturnType().isAssignableFrom(overrider.getReturnType())) {\r\n+            return false;\r\n+        }\r\n+\r\n+        // Throwable comparison: \"throws\" Throwable list will be ignored, trust the compiler verify\r\n+\r\n+        return true;\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the nearest overridden {@link Method method} from the inherited class\r\n+     *\r\n+     * @param overrider the overrider {@link Method method}\r\n+     * @return if found, the overrider <code>method</code>, or <code>null</code>\r\n+     */\r\n+    static Method findNearestOverriddenMethod(Method overrider) {\r\n+        Class<?> declaringClass = overrider.getDeclaringClass();\r\n+        Method overriddenMethod = null;\r\n+        for (Class<?> inheritedType : getAllInheritedTypes(declaringClass)) {\r\n+            overriddenMethod = findOverriddenMethod(overrider, inheritedType);\r\n+            if (overriddenMethod != null) {\r\n+                break;\r\n+            }\r\n+        }\r\n+        return overriddenMethod;\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the overridden {@link Method method} from the declaring class\r\n+     *\r\n+     * @param overrider      the overrider {@link Method method}\r\n+     * @param declaringClass the class that is declaring the overridden {@link Method method}\r\n+     * @return if found, the overrider <code>method</code>, or <code>null</code>\r\n+     */\r\n+    static Method findOverriddenMethod(Method overrider, Class<?> declaringClass) {\r\n+        List<Method> matchedMethods = getAllMethods(declaringClass, method -> overrides(overrider, method));\r\n+        return matchedMethods.isEmpty() ? null : matchedMethods.get(0);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/Page.java", "source2": "org/apache/dubbo/common/utils/Page.java", "comments": ["Line-ending 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.common.utils;\n-\n-import java.util.List;\n-\n-/**\n- * The model class of pagination\n- *\n- * @since 2.7.5\n- */\n-public interface Page<T> {\n-\n-    /**\n-     * Gets the offset of request\n-     *\n-     * @return positive integer\n-     */\n-    int getOffset();\n-\n-    /**\n-     * Gets the size of request for pagination query\n-     *\n-     * @return positive integer\n-     */\n-    int getPageSize();\n-\n-    /**\n-     * Gets the total amount of elements.\n-     *\n-     * @return the total amount of elements\n-     */\n-    int getTotalSize();\n-\n-    /**\n-     * Get the number of total pages.\n-     *\n-     * @return the number of total pages.\n-     */\n-    int getTotalPages();\n-\n-    /**\n-     * The data of current page\n-     *\n-     * @return non-null {@link List}\n-     */\n-    List<T> getData();\n-\n-    /**\n-     * The size of {@link #getData() data}\n-     *\n-     * @return positive integer\n-     */\n-    default int getDataSize() {\n-        return getData().size();\n-    }\n-\n-    /**\n-     * It indicates has next page or not\n-     *\n-     * @return if has , return <code>true</code>, or <code>false</code>\n-     */\n-    boolean hasNext();\n-\n-    /**\n-     * Returns whether the page has data at all.\n-     *\n-     * @return\n-     */\n-    default boolean hasData() {\n-        return getDataSize() > 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.common.utils;\r\n+\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * The model class of pagination\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+public interface Page<T> {\r\n+\r\n+    /**\r\n+     * Gets the offset of request\r\n+     *\r\n+     * @return positive integer\r\n+     */\r\n+    int getOffset();\r\n+\r\n+    /**\r\n+     * Gets the size of request for pagination query\r\n+     *\r\n+     * @return positive integer\r\n+     */\r\n+    int getPageSize();\r\n+\r\n+    /**\r\n+     * Gets the total amount of elements.\r\n+     *\r\n+     * @return the total amount of elements\r\n+     */\r\n+    int getTotalSize();\r\n+\r\n+    /**\r\n+     * Get the number of total pages.\r\n+     *\r\n+     * @return the number of total pages.\r\n+     */\r\n+    int getTotalPages();\r\n+\r\n+    /**\r\n+     * The data of current page\r\n+     *\r\n+     * @return non-null {@link List}\r\n+     */\r\n+    List<T> getData();\r\n+\r\n+    /**\r\n+     * The size of {@link #getData() data}\r\n+     *\r\n+     * @return positive integer\r\n+     */\r\n+    default int getDataSize() {\r\n+        return getData().size();\r\n+    }\r\n+\r\n+    /**\r\n+     * It indicates has next page or not\r\n+     *\r\n+     * @return if has , return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    boolean hasNext();\r\n+\r\n+    /**\r\n+     * Returns whether the page has data at all.\r\n+     *\r\n+     * @return\r\n+     */\r\n+    default boolean hasData() {\r\n+        return getDataSize() > 0;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/PathUtils.java", "source2": "org/apache/dubbo/common/utils/PathUtils.java", "comments": ["Line-ending 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.common.utils;\n-\n-import java.util.LinkedHashSet;\n-import java.util.Set;\n-import java.util.stream.Collectors;\n-\n-import static java.util.Arrays.asList;\n-import static org.apache.dubbo.common.utils.StringUtils.QUESTION_MASK;\n-import static org.apache.dubbo.common.utils.StringUtils.SLASH;\n-import static org.apache.dubbo.common.utils.StringUtils.isEmpty;\n-import static org.apache.dubbo.common.utils.StringUtils.replace;\n-\n-/**\n- * Path Utilities class\n- *\n- * @since 2.7.6\n- */\n-public interface PathUtils {\n-\n-    static String buildPath(String rootPath, String... subPaths) {\n-\n-        Set<String> paths = new LinkedHashSet<>();\n-        paths.add(rootPath);\n-        paths.addAll(asList(subPaths));\n-\n-        return normalize(paths.stream()\n-                .filter(StringUtils::isNotEmpty)\n-                .collect(Collectors.joining(SLASH)));\n-    }\n-\n-    /**\n-     * Normalize path:\n-     * <ol>\n-     * <li>To remove query string if presents</li>\n-     * <li>To remove duplicated slash(\"/\") if exists</li>\n-     * </ol>\n-     *\n-     * @param path path to be normalized\n-     * @return a normalized path if required\n-     */\n-    static String normalize(String path) {\n-        if (isEmpty(path)) {\n-            return SLASH;\n-        }\n-        String normalizedPath = path;\n-        int index = normalizedPath.indexOf(QUESTION_MASK);\n-        if (index > -1) {\n-            normalizedPath = normalizedPath.substring(0, index);\n-        }\n-\n-        while (normalizedPath.contains(\"//\")) {\n-            normalizedPath = replace(normalizedPath, \"//\", \"/\");\n-        }\n-\n-        return normalizedPath;\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.common.utils;\r\n+\r\n+import java.util.LinkedHashSet;\r\n+import java.util.Set;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.util.Arrays.asList;\r\n+import static org.apache.dubbo.common.utils.StringUtils.QUESTION_MASK;\r\n+import static org.apache.dubbo.common.utils.StringUtils.SLASH;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isEmpty;\r\n+import static org.apache.dubbo.common.utils.StringUtils.replace;\r\n+\r\n+/**\r\n+ * Path Utilities class\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface PathUtils {\r\n+\r\n+    static String buildPath(String rootPath, String... subPaths) {\r\n+\r\n+        Set<String> paths = new LinkedHashSet<>();\r\n+        paths.add(rootPath);\r\n+        paths.addAll(asList(subPaths));\r\n+\r\n+        return normalize(paths.stream()\r\n+                .filter(StringUtils::isNotEmpty)\r\n+                .collect(Collectors.joining(SLASH)));\r\n+    }\r\n+\r\n+    /**\r\n+     * Normalize path:\r\n+     * <ol>\r\n+     * <li>To remove query string if presents</li>\r\n+     * <li>To remove duplicated slash(\"/\") if exists</li>\r\n+     * </ol>\r\n+     *\r\n+     * @param path path to be normalized\r\n+     * @return a normalized path if required\r\n+     */\r\n+    static String normalize(String path) {\r\n+        if (isEmpty(path)) {\r\n+            return SLASH;\r\n+        }\r\n+        String normalizedPath = path;\r\n+        int index = normalizedPath.indexOf(QUESTION_MASK);\r\n+        if (index > -1) {\r\n+            normalizedPath = normalizedPath.substring(0, index);\r\n+        }\r\n+\r\n+        while (normalizedPath.contains(\"//\")) {\r\n+            normalizedPath = replace(normalizedPath, \"//\", \"/\");\r\n+        }\r\n+\r\n+        return normalizedPath;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/ReflectUtils.java", "source2": "org/apache/dubbo/common/utils/ReflectUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,1395 +1,1395 @@\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.common.utils;\n-\n-import javassist.CtClass;\n-import javassist.CtConstructor;\n-import javassist.CtMethod;\n-import javassist.NotFoundException;\n-\n-import java.beans.BeanInfo;\n-import java.beans.Introspector;\n-import java.lang.reflect.Array;\n-import java.lang.reflect.Constructor;\n-import java.lang.reflect.Field;\n-import java.lang.reflect.GenericArrayType;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Modifier;\n-import java.lang.reflect.ParameterizedType;\n-import java.lang.reflect.Type;\n-import java.lang.reflect.TypeVariable;\n-import java.net.URL;\n-import java.security.CodeSource;\n-import java.security.ProtectionDomain;\n-import java.util.ArrayList;\n-import java.util.Collections;\n-import java.util.Date;\n-import java.util.HashMap;\n-import java.util.HashSet;\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.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-import java.util.concurrent.Future;\n-import java.util.regex.Matcher;\n-import java.util.regex.Pattern;\n-import java.util.stream.Collectors;\n-import java.util.stream.Stream;\n-\n-import static java.util.Arrays.asList;\n-import static java.util.Collections.unmodifiableSet;\n-import static org.apache.dubbo.common.utils.ArrayUtils.isEmpty;\n-\n-/**\n- * ReflectUtils\n- */\n-public final class ReflectUtils {\n-\n-    /**\n-     * void(V).\n-     */\n-    public static final char JVM_VOID = 'V';\n-\n-    /**\n-     * boolean(Z).\n-     */\n-    public static final char JVM_BOOLEAN = 'Z';\n-\n-    /**\n-     * byte(B).\n-     */\n-    public static final char JVM_BYTE = 'B';\n-\n-    /**\n-     * char(C).\n-     */\n-    public static final char JVM_CHAR = 'C';\n-\n-    /**\n-     * double(D).\n-     */\n-    public static final char JVM_DOUBLE = 'D';\n-\n-    /**\n-     * float(F).\n-     */\n-    public static final char JVM_FLOAT = 'F';\n-\n-    /**\n-     * int(I).\n-     */\n-    public static final char JVM_INT = 'I';\n-\n-    /**\n-     * long(J).\n-     */\n-    public static final char JVM_LONG = 'J';\n-\n-    /**\n-     * short(S).\n-     */\n-    public static final char JVM_SHORT = 'S';\n-\n-    public static final Class<?>[] EMPTY_CLASS_ARRAY = new Class<?>[0];\n-\n-    public static final String JAVA_IDENT_REGEX = \"(?:[_$a-zA-Z][_$a-zA-Z0-9]*)\";\n-\n-    public static final String JAVA_NAME_REGEX = \"(?:\" + JAVA_IDENT_REGEX + \"(?:\\\\.\" + JAVA_IDENT_REGEX + \")*)\";\n-\n-    public static final String CLASS_DESC = \"(?:L\" + JAVA_IDENT_REGEX + \"(?:\\\\/\" + JAVA_IDENT_REGEX + \")*;)\";\n-\n-    public static final String ARRAY_DESC = \"(?:\\\\[+(?:(?:[VZBCDFIJS])|\" + CLASS_DESC + \"))\";\n-\n-    public static final String DESC_REGEX = \"(?:(?:[VZBCDFIJS])|\" + CLASS_DESC + \"|\" + ARRAY_DESC + \")\";\n-\n-    public static final Pattern DESC_PATTERN = Pattern.compile(DESC_REGEX);\n-\n-    public static final String METHOD_DESC_REGEX = \"(?:(\" + JAVA_IDENT_REGEX + \")?\\\\((\" + DESC_REGEX + \"*)\\\\)(\" + DESC_REGEX + \")?)\";\n-\n-    public static final Pattern METHOD_DESC_PATTERN = Pattern.compile(METHOD_DESC_REGEX);\n-\n-    public static final Pattern GETTER_METHOD_DESC_PATTERN = Pattern.compile(\"get([A-Z][_a-zA-Z0-9]*)\\\\(\\\\)(\" + DESC_REGEX + \")\");\n-\n-    public static final Pattern SETTER_METHOD_DESC_PATTERN = Pattern.compile(\"set([A-Z][_a-zA-Z0-9]*)\\\\((\" + DESC_REGEX + \")\\\\)V\");\n-\n-    public static final Pattern IS_HAS_CAN_METHOD_DESC_PATTERN = Pattern.compile(\"(?:is|has|can)([A-Z][_a-zA-Z0-9]*)\\\\(\\\\)Z\");\n-\n-    private static final ConcurrentMap<String, Class<?>> DESC_CLASS_CACHE = new ConcurrentHashMap<String, Class<?>>();\n-\n-    private static final ConcurrentMap<String, Class<?>> NAME_CLASS_CACHE = new ConcurrentHashMap<String, Class<?>>();\n-\n-    private static final ConcurrentMap<String, Method> SIGNATURE_METHODS_CACHE = new ConcurrentHashMap<String, Method>();\n-\n-    private static Map<Class<?>, Object> primitiveDefaults = new HashMap<>();\n-\n-    static {\n-        primitiveDefaults.put(int.class, 0);\n-        primitiveDefaults.put(long.class, 0L);\n-        primitiveDefaults.put(byte.class, (byte) 0);\n-        primitiveDefaults.put(char.class, (char) 0);\n-        primitiveDefaults.put(short.class, (short) 0);\n-        primitiveDefaults.put(float.class, (float) 0);\n-        primitiveDefaults.put(double.class, (double) 0);\n-        primitiveDefaults.put(boolean.class, false);\n-        primitiveDefaults.put(void.class, null);\n-    }\n-\n-    private ReflectUtils() {\n-    }\n-\n-    public static boolean isPrimitives(Class<?> cls) {\n-        while (cls.isArray()) {\n-            cls = cls.getComponentType();\n-        }\n-        return isPrimitive(cls);\n-    }\n-\n-    public static boolean isPrimitive(Class<?> cls) {\n-        return cls.isPrimitive() || cls == String.class || cls == Boolean.class || cls == Character.class\n-                || Number.class.isAssignableFrom(cls) || Date.class.isAssignableFrom(cls);\n-    }\n-\n-    public static Class<?> getBoxedClass(Class<?> c) {\n-        if (c == int.class) {\n-            c = Integer.class;\n-        } else if (c == boolean.class) {\n-            c = Boolean.class;\n-        } else if (c == long.class) {\n-            c = Long.class;\n-        } else if (c == float.class) {\n-            c = Float.class;\n-        } else if (c == double.class) {\n-            c = Double.class;\n-        } else if (c == char.class) {\n-            c = Character.class;\n-        } else if (c == byte.class) {\n-            c = Byte.class;\n-        } else if (c == short.class) {\n-            c = Short.class;\n-        }\n-        return c;\n-    }\n-\n-    /**\n-     * is compatible.\n-     *\n-     * @param c class.\n-     * @param o instance.\n-     * @return compatible or not.\n-     */\n-    public static boolean isCompatible(Class<?> c, Object o) {\n-        boolean pt = c.isPrimitive();\n-        if (o == null) {\n-            return !pt;\n-        }\n-\n-        if (pt) {\n-            c = getBoxedClass(c);\n-        }\n-\n-        return c == o.getClass() || c.isInstance(o);\n-    }\n-\n-    /**\n-     * is compatible.\n-     *\n-     * @param cs class array.\n-     * @param os object array.\n-     * @return compatible or not.\n-     */\n-    public static boolean isCompatible(Class<?>[] cs, Object[] os) {\n-        int len = cs.length;\n-        if (len != os.length) {\n-            return false;\n-        }\n-        if (len == 0) {\n-            return true;\n-        }\n-        for (int i = 0; i < len; i++) {\n-            if (!isCompatible(cs[i], os[i])) {\n-                return false;\n-            }\n-        }\n-        return true;\n-    }\n-\n-    public static String getCodeBase(Class<?> cls) {\n-        if (cls == null) {\n-            return null;\n-        }\n-        ProtectionDomain domain = cls.getProtectionDomain();\n-        if (domain == null) {\n-            return null;\n-        }\n-        CodeSource source = domain.getCodeSource();\n-        if (source == null) {\n-            return null;\n-        }\n-        URL location = source.getLocation();\n-        if (location == null) {\n-            return null;\n-        }\n-        return location.getFile();\n-    }\n-\n-    /**\n-     * get name.\n-     * java.lang.Object[][].class => \"java.lang.Object[][]\"\n-     *\n-     * @param c class.\n-     * @return name.\n-     */\n-    public static String getName(Class<?> c) {\n-        if (c.isArray()) {\n-            StringBuilder sb = new StringBuilder();\n-            do {\n-                sb.append(\"[]\");\n-                c = c.getComponentType();\n-            }\n-            while (c.isArray());\n-\n-            return c.getName() + sb.toString();\n-        }\n-        return c.getName();\n-    }\n-\n-    public static Class<?> getGenericClass(Class<?> cls) {\n-        return getGenericClass(cls, 0);\n-    }\n-\n-    public static Class<?> getGenericClass(Class<?> cls, int i) {\n-        try {\n-            ParameterizedType parameterizedType = ((ParameterizedType) cls.getGenericInterfaces()[0]);\n-            Object genericClass = parameterizedType.getActualTypeArguments()[i];\n-\n-            // handle nested generic type\n-            if (genericClass instanceof ParameterizedType) {\n-                return (Class<?>) ((ParameterizedType) genericClass).getRawType();\n-            }\n-\n-            // handle array generic type\n-            if (genericClass instanceof GenericArrayType) {\n-                return (Class<?>) ((GenericArrayType) genericClass).getGenericComponentType();\n-            }\n-\n-            // Requires JDK 7 or higher, Foo<int[]> is no longer GenericArrayType\n-            if (((Class) genericClass).isArray()) {\n-                return ((Class) genericClass).getComponentType();\n-            }\n-            return (Class<?>) genericClass;\n-        } catch (Throwable e) {\n-            throw new IllegalArgumentException(cls.getName() + \" generic type undefined!\", e);\n-        }\n-    }\n-\n-    /**\n-     * get method name.\n-     * \"void do(int)\", \"void do()\", \"int do(java.lang.String,boolean)\"\n-     *\n-     * @param m method.\n-     * @return name.\n-     */\n-    public static String getName(final Method m) {\n-        StringBuilder ret = new StringBuilder();\n-        ret.append(getName(m.getReturnType())).append(' ');\n-        ret.append(m.getName()).append('(');\n-        Class<?>[] parameterTypes = m.getParameterTypes();\n-        for (int i = 0; i < parameterTypes.length; i++) {\n-            if (i > 0) {\n-                ret.append(',');\n-            }\n-            ret.append(getName(parameterTypes[i]));\n-        }\n-        ret.append(')');\n-        return ret.toString();\n-    }\n-\n-    public static String getSignature(String methodName, Class<?>[] parameterTypes) {\n-        StringBuilder sb = new StringBuilder(methodName);\n-        sb.append(\"(\");\n-        if (parameterTypes != null && parameterTypes.length > 0) {\n-            boolean first = true;\n-            for (Class<?> type : parameterTypes) {\n-                if (first) {\n-                    first = false;\n-                } else {\n-                    sb.append(\",\");\n-                }\n-                sb.append(type.getName());\n-            }\n-        }\n-        sb.append(\")\");\n-        return sb.toString();\n-    }\n-\n-    /**\n-     * get constructor name.\n-     * \"()\", \"(java.lang.String,int)\"\n-     *\n-     * @param c constructor.\n-     * @return name.\n-     */\n-    public static String getName(final Constructor<?> c) {\n-        StringBuilder ret = new StringBuilder(\"(\");\n-        Class<?>[] parameterTypes = c.getParameterTypes();\n-        for (int i = 0; i < parameterTypes.length; i++) {\n-            if (i > 0) {\n-                ret.append(',');\n-            }\n-            ret.append(getName(parameterTypes[i]));\n-        }\n-        ret.append(')');\n-        return ret.toString();\n-    }\n-\n-    /**\n-     * get class desc.\n-     * boolean[].class => \"[Z\"\n-     * Object.class => \"Ljava/lang/Object;\"\n-     *\n-     * @param c class.\n-     * @return desc.\n-     * @throws NotFoundException\n-     */\n-    public static String getDesc(Class<?> c) {\n-        StringBuilder ret = new StringBuilder();\n-\n-        while (c.isArray()) {\n-            ret.append('[');\n-            c = c.getComponentType();\n-        }\n-\n-        if (c.isPrimitive()) {\n-            String t = c.getName();\n-            if (\"void\".equals(t)) {\n-                ret.append(JVM_VOID);\n-            } else if (\"boolean\".equals(t)) {\n-                ret.append(JVM_BOOLEAN);\n-            } else if (\"byte\".equals(t)) {\n-                ret.append(JVM_BYTE);\n-            } else if (\"char\".equals(t)) {\n-                ret.append(JVM_CHAR);\n-            } else if (\"double\".equals(t)) {\n-                ret.append(JVM_DOUBLE);\n-            } else if (\"float\".equals(t)) {\n-                ret.append(JVM_FLOAT);\n-            } else if (\"int\".equals(t)) {\n-                ret.append(JVM_INT);\n-            } else if (\"long\".equals(t)) {\n-                ret.append(JVM_LONG);\n-            } else if (\"short\".equals(t)) {\n-                ret.append(JVM_SHORT);\n-            }\n-        } else {\n-            ret.append('L');\n-            ret.append(c.getName().replace('.', '/'));\n-            ret.append(';');\n-        }\n-        return ret.toString();\n-    }\n-\n-    /**\n-     * get class array desc.\n-     * [int.class, boolean[].class, Object.class] => \"I[ZLjava/lang/Object;\"\n-     *\n-     * @param cs class array.\n-     * @return desc.\n-     * @throws NotFoundException\n-     */\n-    public static String getDesc(final Class<?>[] cs) {\n-        if (cs.length == 0) {\n-            return \"\";\n-        }\n-\n-        StringBuilder sb = new StringBuilder(64);\n-        for (Class<?> c : cs) {\n-            sb.append(getDesc(c));\n-        }\n-        return sb.toString();\n-    }\n-\n-    /**\n-     * get method desc.\n-     * int do(int arg1) => \"do(I)I\"\n-     * void do(String arg1,boolean arg2) => \"do(Ljava/lang/String;Z)V\"\n-     *\n-     * @param m method.\n-     * @return desc.\n-     */\n-    public static String getDesc(final Method m) {\n-        StringBuilder ret = new StringBuilder(m.getName()).append('(');\n-        Class<?>[] parameterTypes = m.getParameterTypes();\n-        for (int i = 0; i < parameterTypes.length; i++) {\n-            ret.append(getDesc(parameterTypes[i]));\n-        }\n-        ret.append(')').append(getDesc(m.getReturnType()));\n-        return ret.toString();\n-    }\n-\n-    public static String[] getDescArray(final Method m) {\n-        Class<?>[] parameterTypes = m.getParameterTypes();\n-        String[] arr = new String[parameterTypes.length];\n-\n-        for (int i = 0; i < parameterTypes.length; i++) {\n-            arr[i] = getDesc(parameterTypes[i]);\n-        }\n-        return arr;\n-    }\n-\n-    /**\n-     * get constructor desc.\n-     * \"()V\", \"(Ljava/lang/String;I)V\"\n-     *\n-     * @param c constructor.\n-     * @return desc\n-     */\n-    public static String getDesc(final Constructor<?> c) {\n-        StringBuilder ret = new StringBuilder(\"(\");\n-        Class<?>[] parameterTypes = c.getParameterTypes();\n-        for (int i = 0; i < parameterTypes.length; i++) {\n-            ret.append(getDesc(parameterTypes[i]));\n-        }\n-        ret.append(')').append('V');\n-        return ret.toString();\n-    }\n-\n-    /**\n-     * get method desc.\n-     * \"(I)I\", \"()V\", \"(Ljava/lang/String;Z)V\"\n-     *\n-     * @param m method.\n-     * @return desc.\n-     */\n-    public static String getDescWithoutMethodName(Method m) {\n-        StringBuilder ret = new StringBuilder();\n-        ret.append('(');\n-        Class<?>[] parameterTypes = m.getParameterTypes();\n-        for (int i = 0; i < parameterTypes.length; i++) {\n-            ret.append(getDesc(parameterTypes[i]));\n-        }\n-        ret.append(')').append(getDesc(m.getReturnType()));\n-        return ret.toString();\n-    }\n-\n-    /**\n-     * get class desc.\n-     * Object.class => \"Ljava/lang/Object;\"\n-     * boolean[].class => \"[Z\"\n-     *\n-     * @param c class.\n-     * @return desc.\n-     * @throws NotFoundException\n-     */\n-    public static String getDesc(final CtClass c) throws NotFoundException {\n-        StringBuilder ret = new StringBuilder();\n-        if (c.isArray()) {\n-            ret.append('[');\n-            ret.append(getDesc(c.getComponentType()));\n-        } else if (c.isPrimitive()) {\n-            String t = c.getName();\n-            if (\"void\".equals(t)) {\n-                ret.append(JVM_VOID);\n-            } else if (\"boolean\".equals(t)) {\n-                ret.append(JVM_BOOLEAN);\n-            } else if (\"byte\".equals(t)) {\n-                ret.append(JVM_BYTE);\n-            } else if (\"char\".equals(t)) {\n-                ret.append(JVM_CHAR);\n-            } else if (\"double\".equals(t)) {\n-                ret.append(JVM_DOUBLE);\n-            } else if (\"float\".equals(t)) {\n-                ret.append(JVM_FLOAT);\n-            } else if (\"int\".equals(t)) {\n-                ret.append(JVM_INT);\n-            } else if (\"long\".equals(t)) {\n-                ret.append(JVM_LONG);\n-            } else if (\"short\".equals(t)) {\n-                ret.append(JVM_SHORT);\n-            }\n-        } else {\n-            ret.append('L');\n-            ret.append(c.getName().replace('.', '/'));\n-            ret.append(';');\n-        }\n-        return ret.toString();\n-    }\n-\n-    /**\n-     * get method desc.\n-     * \"do(I)I\", \"do()V\", \"do(Ljava/lang/String;Z)V\"\n-     *\n-     * @param m method.\n-     * @return desc.\n-     */\n-    public static String getDesc(final CtMethod m) throws NotFoundException {\n-        StringBuilder ret = new StringBuilder(m.getName()).append('(');\n-        CtClass[] parameterTypes = m.getParameterTypes();\n-        for (CtClass parameterType : parameterTypes) {\n-            ret.append(getDesc(parameterType));\n-        }\n-        ret.append(')').append(getDesc(m.getReturnType()));\n-        return ret.toString();\n-    }\n-\n-    /**\n-     * get constructor desc.\n-     * \"()V\", \"(Ljava/lang/String;I)V\"\n-     *\n-     * @param c constructor.\n-     * @return desc\n-     */\n-    public static String getDesc(final CtConstructor c) throws NotFoundException {\n-        StringBuilder ret = new StringBuilder(\"(\");\n-        CtClass[] parameterTypes = c.getParameterTypes();\n-        for (int i = 0; i < parameterTypes.length; i++) {\n-            ret.append(getDesc(parameterTypes[i]));\n-        }\n-        ret.append(')').append('V');\n-        return ret.toString();\n-    }\n-\n-    /**\n-     * get method desc.\n-     * \"(I)I\", \"()V\", \"(Ljava/lang/String;Z)V\".\n-     *\n-     * @param m method.\n-     * @return desc.\n-     */\n-    public static String getDescWithoutMethodName(final CtMethod m) throws NotFoundException {\n-        StringBuilder ret = new StringBuilder();\n-        ret.append('(');\n-        CtClass[] parameterTypes = m.getParameterTypes();\n-        for (int i = 0; i < parameterTypes.length; i++) {\n-            ret.append(getDesc(parameterTypes[i]));\n-        }\n-        ret.append(')').append(getDesc(m.getReturnType()));\n-        return ret.toString();\n-    }\n-\n-    /**\n-     * name to desc.\n-     * java.util.Map[][] => \"[[Ljava/util/Map;\"\n-     *\n-     * @param name name.\n-     * @return desc.\n-     */\n-    public static String name2desc(String name) {\n-        StringBuilder sb = new StringBuilder();\n-        int c = 0, index = name.indexOf('[');\n-        if (index > 0) {\n-            c = (name.length() - index) / 2;\n-            name = name.substring(0, index);\n-        }\n-        while (c-- > 0) {\n-            sb.append(\"[\");\n-        }\n-        if (\"void\".equals(name)) {\n-            sb.append(JVM_VOID);\n-        } else if (\"boolean\".equals(name)) {\n-            sb.append(JVM_BOOLEAN);\n-        } else if (\"byte\".equals(name)) {\n-            sb.append(JVM_BYTE);\n-        } else if (\"char\".equals(name)) {\n-            sb.append(JVM_CHAR);\n-        } else if (\"double\".equals(name)) {\n-            sb.append(JVM_DOUBLE);\n-        } else if (\"float\".equals(name)) {\n-            sb.append(JVM_FLOAT);\n-        } else if (\"int\".equals(name)) {\n-            sb.append(JVM_INT);\n-        } else if (\"long\".equals(name)) {\n-            sb.append(JVM_LONG);\n-        } else if (\"short\".equals(name)) {\n-            sb.append(JVM_SHORT);\n-        } else {\n-            sb.append('L').append(name.replace('.', '/')).append(';');\n-        }\n-        return sb.toString();\n-    }\n-\n-    /**\n-     * desc to name.\n-     * \"[[I\" => \"int[][]\"\n-     *\n-     * @param desc desc.\n-     * @return name.\n-     */\n-    public static String desc2name(String desc) {\n-        StringBuilder sb = new StringBuilder();\n-        int c = desc.lastIndexOf('[') + 1;\n-        if (desc.length() == c + 1) {\n-            switch (desc.charAt(c)) {\n-                case JVM_VOID: {\n-                    sb.append(\"void\");\n-                    break;\n-                }\n-                case JVM_BOOLEAN: {\n-                    sb.append(\"boolean\");\n-                    break;\n-                }\n-                case JVM_BYTE: {\n-                    sb.append(\"byte\");\n-                    break;\n-                }\n-                case JVM_CHAR: {\n-                    sb.append(\"char\");\n-                    break;\n-                }\n-                case JVM_DOUBLE: {\n-                    sb.append(\"double\");\n-                    break;\n-                }\n-                case JVM_FLOAT: {\n-                    sb.append(\"float\");\n-                    break;\n-                }\n-                case JVM_INT: {\n-                    sb.append(\"int\");\n-                    break;\n-                }\n-                case JVM_LONG: {\n-                    sb.append(\"long\");\n-                    break;\n-                }\n-                case JVM_SHORT: {\n-                    sb.append(\"short\");\n-                    break;\n-                }\n-                default:\n-                    throw new RuntimeException();\n-            }\n-        } else {\n-            sb.append(desc.substring(c + 1, desc.length() - 1).replace('/', '.'));\n-        }\n-        while (c-- > 0) {\n-            sb.append(\"[]\");\n-        }\n-        return sb.toString();\n-    }\n-\n-    public static Class<?> forName(String name) {\n-        try {\n-            return name2class(name);\n-        } catch (ClassNotFoundException e) {\n-            throw new IllegalStateException(\"Not found class \" + name + \", cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-    public static Class<?> forName(ClassLoader cl, String name) {\n-        try {\n-            return name2class(cl, name);\n-        } catch (ClassNotFoundException e) {\n-            throw new IllegalStateException(\"Not found class \" + name + \", cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-    /**\n-     * name to class.\n-     * \"boolean\" => boolean.class\n-     * \"java.util.Map[][]\" => java.util.Map[][].class\n-     *\n-     * @param name name.\n-     * @return Class instance.\n-     */\n-    public static Class<?> name2class(String name) throws ClassNotFoundException {\n-        return name2class(ClassUtils.getClassLoader(), name);\n-    }\n-\n-    /**\n-     * name to class.\n-     * \"boolean\" => boolean.class\n-     * \"java.util.Map[][]\" => java.util.Map[][].class\n-     *\n-     * @param cl   ClassLoader instance.\n-     * @param name name.\n-     * @return Class instance.\n-     */\n-    private static Class<?> name2class(ClassLoader cl, String name) throws ClassNotFoundException {\n-        int c = 0, index = name.indexOf('[');\n-        if (index > 0) {\n-            c = (name.length() - index) / 2;\n-            name = name.substring(0, index);\n-        }\n-        if (c > 0) {\n-            StringBuilder sb = new StringBuilder();\n-            while (c-- > 0) {\n-                sb.append(\"[\");\n-            }\n-\n-            if (\"void\".equals(name)) {\n-                sb.append(JVM_VOID);\n-            } else if (\"boolean\".equals(name)) {\n-                sb.append(JVM_BOOLEAN);\n-            } else if (\"byte\".equals(name)) {\n-                sb.append(JVM_BYTE);\n-            } else if (\"char\".equals(name)) {\n-                sb.append(JVM_CHAR);\n-            } else if (\"double\".equals(name)) {\n-                sb.append(JVM_DOUBLE);\n-            } else if (\"float\".equals(name)) {\n-                sb.append(JVM_FLOAT);\n-            } else if (\"int\".equals(name)) {\n-                sb.append(JVM_INT);\n-            } else if (\"long\".equals(name)) {\n-                sb.append(JVM_LONG);\n-            } else if (\"short\".equals(name)) {\n-                sb.append(JVM_SHORT);\n-            } else {\n-                // \"java.lang.Object\" ==> \"Ljava.lang.Object;\"\n-                sb.append('L').append(name).append(';');\n-            }\n-            name = sb.toString();\n-        } else {\n-            if (\"void\".equals(name)) {\n-                return void.class;\n-            }\n-            if (\"boolean\".equals(name)) {\n-                return boolean.class;\n-            }\n-            if (\"byte\".equals(name)) {\n-                return byte.class;\n-            }\n-            if (\"char\".equals(name)) {\n-                return char.class;\n-            }\n-            if (\"double\".equals(name)) {\n-                return double.class;\n-            }\n-            if (\"float\".equals(name)) {\n-                return float.class;\n-            }\n-            if (\"int\".equals(name)) {\n-                return int.class;\n-            }\n-            if (\"long\".equals(name)) {\n-                return long.class;\n-            }\n-            if (\"short\".equals(name)) {\n-                return short.class;\n-            }\n-        }\n-\n-        if (cl == null) {\n-            cl = ClassUtils.getClassLoader();\n-        }\n-        Class<?> clazz = NAME_CLASS_CACHE.get(name);\n-        if (clazz == null) {\n-            clazz = Class.forName(name, true, cl);\n-            NAME_CLASS_CACHE.put(name, clazz);\n-        }\n-        return clazz;\n-    }\n-\n-    /**\n-     * desc to class.\n-     * \"[Z\" => boolean[].class\n-     * \"[[Ljava/util/Map;\" => java.util.Map[][].class\n-     *\n-     * @param desc desc.\n-     * @return Class instance.\n-     * @throws ClassNotFoundException\n-     */\n-    public static Class<?> desc2class(String desc) throws ClassNotFoundException {\n-        return desc2class(ClassUtils.getClassLoader(), desc);\n-    }\n-\n-    /**\n-     * desc to class.\n-     * \"[Z\" => boolean[].class\n-     * \"[[Ljava/util/Map;\" => java.util.Map[][].class\n-     *\n-     * @param cl   ClassLoader instance.\n-     * @param desc desc.\n-     * @return Class instance.\n-     * @throws ClassNotFoundException\n-     */\n-    private static Class<?> desc2class(ClassLoader cl, String desc) throws ClassNotFoundException {\n-        switch (desc.charAt(0)) {\n-            case JVM_VOID:\n-                return void.class;\n-            case JVM_BOOLEAN:\n-                return boolean.class;\n-            case JVM_BYTE:\n-                return byte.class;\n-            case JVM_CHAR:\n-                return char.class;\n-            case JVM_DOUBLE:\n-                return double.class;\n-            case JVM_FLOAT:\n-                return float.class;\n-            case JVM_INT:\n-                return int.class;\n-            case JVM_LONG:\n-                return long.class;\n-            case JVM_SHORT:\n-                return short.class;\n-            case 'L':\n-                // \"Ljava/lang/Object;\" ==> \"java.lang.Object\"\n-                desc = desc.substring(1, desc.length() - 1).replace('/', '.');\n-                break;\n-            case '[':\n-                // \"[[Ljava/lang/Object;\" ==> \"[[Ljava.lang.Object;\"\n-                desc = desc.replace('/', '.');\n-                break;\n-            default:\n-                throw new ClassNotFoundException(\"Class not found: \" + desc);\n-        }\n-\n-        if (cl == null) {\n-            cl = ClassUtils.getClassLoader();\n-        }\n-        Class<?> clazz = DESC_CLASS_CACHE.get(desc);\n-        if (clazz == null) {\n-            clazz = Class.forName(desc, true, cl);\n-            DESC_CLASS_CACHE.put(desc, clazz);\n-        }\n-        return clazz;\n-    }\n-\n-    /**\n-     * get class array instance.\n-     *\n-     * @param desc desc.\n-     * @return Class class array.\n-     * @throws ClassNotFoundException\n-     */\n-    public static Class<?>[] desc2classArray(String desc) throws ClassNotFoundException {\n-        Class<?>[] ret = desc2classArray(ClassUtils.getClassLoader(), desc);\n-        return ret;\n-    }\n-\n-    /**\n-     * get class array instance.\n-     *\n-     * @param cl   ClassLoader instance.\n-     * @param desc desc.\n-     * @return Class[] class array.\n-     * @throws ClassNotFoundException\n-     */\n-    private static Class<?>[] desc2classArray(ClassLoader cl, String desc) throws ClassNotFoundException {\n-        if (desc.length() == 0) {\n-            return EMPTY_CLASS_ARRAY;\n-        }\n-\n-        List<Class<?>> cs = new ArrayList<Class<?>>();\n-        Matcher m = DESC_PATTERN.matcher(desc);\n-        while (m.find()) {\n-            cs.add(desc2class(cl, m.group()));\n-        }\n-        return cs.toArray(EMPTY_CLASS_ARRAY);\n-    }\n-\n-    /**\n-     * Find method from method signature\n-     *\n-     * @param clazz      Target class to find method\n-     * @param methodName Method signature, e.g.: method1(int, String). It is allowed to provide method name only, e.g.: method2\n-     * @return target method\n-     * @throws NoSuchMethodException\n-     * @throws ClassNotFoundException\n-     * @throws IllegalStateException  when multiple methods are found (overridden method when parameter info is not provided)\n-     * @deprecated Recommend {@link MethodUtils#findMethod(Class, String, Class[])}\n-     */\n-    @Deprecated\n-    public static Method findMethodByMethodSignature(Class<?> clazz, String methodName, String[] parameterTypes)\n-            throws NoSuchMethodException, ClassNotFoundException {\n-        String signature = clazz.getName() + \".\" + methodName;\n-        if (parameterTypes != null && parameterTypes.length > 0) {\n-            signature += StringUtils.join(parameterTypes);\n-        }\n-        Method method = SIGNATURE_METHODS_CACHE.get(signature);\n-        if (method != null) {\n-            return method;\n-        }\n-        if (parameterTypes == null) {\n-            List<Method> finded = new ArrayList<Method>();\n-            for (Method m : clazz.getMethods()) {\n-                if (m.getName().equals(methodName)) {\n-                    finded.add(m);\n-                }\n-            }\n-            if (finded.isEmpty()) {\n-                throw new NoSuchMethodException(\"No such method \" + methodName + \" in class \" + clazz);\n-            }\n-            if (finded.size() > 1) {\n-                String msg = String.format(\"Not unique method for method name(%s) in class(%s), find %d methods.\",\n-                        methodName, clazz.getName(), finded.size());\n-                throw new IllegalStateException(msg);\n-            }\n-            method = finded.get(0);\n-        } else {\n-            Class<?>[] types = new Class<?>[parameterTypes.length];\n-            for (int i = 0; i < parameterTypes.length; i++) {\n-                types[i] = ReflectUtils.name2class(parameterTypes[i]);\n-            }\n-            method = clazz.getMethod(methodName, types);\n-\n-        }\n-        SIGNATURE_METHODS_CACHE.put(signature, method);\n-        return method;\n-    }\n-\n-    /**\n-     * @param clazz      Target class to find method\n-     * @param methodName Method signature, e.g.: method1(int, String). It is allowed to provide method name only, e.g.: method2\n-     * @return target method\n-     * @throws NoSuchMethodException\n-     * @throws ClassNotFoundException\n-     * @throws IllegalStateException  when multiple methods are found (overridden method when parameter info is not provided)\n-     * @deprecated Recommend {@link MethodUtils#findMethod(Class, String, Class[])}\n-     */\n-    @Deprecated\n-    public static Method findMethodByMethodName(Class<?> clazz, String methodName)\n-            throws NoSuchMethodException, ClassNotFoundException {\n-        return findMethodByMethodSignature(clazz, methodName, null);\n-    }\n-\n-    public static Constructor<?> findConstructor(Class<?> clazz, Class<?> paramType) throws NoSuchMethodException {\n-        Constructor<?> targetConstructor;\n-        try {\n-            targetConstructor = clazz.getConstructor(new Class<?>[]{paramType});\n-        } catch (NoSuchMethodException e) {\n-            targetConstructor = null;\n-            Constructor<?>[] constructors = clazz.getConstructors();\n-            for (Constructor<?> constructor : constructors) {\n-                if (Modifier.isPublic(constructor.getModifiers())\n-                        && constructor.getParameterTypes().length == 1\n-                        && constructor.getParameterTypes()[0].isAssignableFrom(paramType)) {\n-                    targetConstructor = constructor;\n-                    break;\n-                }\n-            }\n-            if (targetConstructor == null) {\n-                throw e;\n-            }\n-        }\n-        return targetConstructor;\n-    }\n-\n-    /**\n-     * Check if one object is the implementation for a given interface.\n-     * <p>\n-     * This method will not trigger classloading for the given interface, therefore it will not lead to error when\n-     * the given interface is not visible by the classloader\n-     *\n-     * @param obj                Object to examine\n-     * @param interfaceClazzName The given interface\n-     * @return true if the object implements the given interface, otherwise return false\n-     */\n-    public static boolean isInstance(Object obj, String interfaceClazzName) {\n-        for (Class<?> clazz = obj.getClass();\n-             clazz != null && !clazz.equals(Object.class);\n-             clazz = clazz.getSuperclass()) {\n-            Class<?>[] interfaces = clazz.getInterfaces();\n-            for (Class<?> itf : interfaces) {\n-                if (itf.getName().equals(interfaceClazzName)) {\n-                    return true;\n-                }\n-            }\n-        }\n-        return false;\n-    }\n-\n-    public static Object getEmptyObject(Class<?> returnType) {\n-        return getEmptyObject(returnType, new HashMap<>(), 0);\n-    }\n-\n-    private static Object getEmptyObject(Class<?> returnType, Map<Class<?>, Object> emptyInstances, int level) {\n-        if (level > 2) {\n-            return null;\n-        }\n-        if (returnType == null) {\n-            return null;\n-        }\n-        if (returnType == boolean.class || returnType == Boolean.class) {\n-            return false;\n-        }\n-        if (returnType == char.class || returnType == Character.class) {\n-            return '\\0';\n-        }\n-        if (returnType == byte.class || returnType == Byte.class) {\n-            return (byte) 0;\n-        }\n-        if (returnType == short.class || returnType == Short.class) {\n-            return (short) 0;\n-        }\n-        if (returnType == int.class || returnType == Integer.class) {\n-            return 0;\n-        }\n-        if (returnType == long.class || returnType == Long.class) {\n-            return 0L;\n-        }\n-        if (returnType == float.class || returnType == Float.class) {\n-            return 0F;\n-        }\n-        if (returnType == double.class || returnType == Double.class) {\n-            return 0D;\n-        }\n-        if (returnType.isArray()) {\n-            return Array.newInstance(returnType.getComponentType(), 0);\n-        }\n-        if (returnType.isAssignableFrom(ArrayList.class)) {\n-            return new ArrayList<>(0);\n-        }\n-        if (returnType.isAssignableFrom(HashSet.class)) {\n-            return new HashSet<>(0);\n-        }\n-        if (returnType.isAssignableFrom(HashMap.class)) {\n-            return new HashMap<>(0);\n-        }\n-        if (String.class.equals(returnType)) {\n-            return \"\";\n-        }\n-        if (returnType.isInterface()) {\n-            return null;\n-        }\n-\n-        try {\n-            Object value = emptyInstances.get(returnType);\n-            if (value == null) {\n-                value = returnType.getDeclaredConstructor().newInstance();\n-                emptyInstances.put(returnType, value);\n-            }\n-            Class<?> cls = value.getClass();\n-            while (cls != null && cls != Object.class) {\n-                Field[] fields = cls.getDeclaredFields();\n-                for (Field field : fields) {\n-                    if (field.isSynthetic()) {\n-                        continue;\n-                    }\n-                    Object property = getEmptyObject(field.getType(), emptyInstances, level + 1);\n-                    if (property != null) {\n-                        try {\n-                            ReflectUtils.makeAccessible(field);\n-                            field.set(value, property);\n-                        } catch (Throwable ignored) {\n-                        }\n-                    }\n-                }\n-                cls = cls.getSuperclass();\n-            }\n-            return value;\n-        } catch (Throwable e) {\n-            return null;\n-        }\n-    }\n-\n-    public static Object defaultReturn(Method m) {\n-        if (m.getReturnType().isPrimitive()) {\n-            return primitiveDefaults.get(m.getReturnType());\n-        } else {\n-            return null;\n-        }\n-    }\n-\n-    public static Object defaultReturn(Class<?> classType) {\n-        if (classType != null && classType.isPrimitive()) {\n-            return primitiveDefaults.get(classType);\n-        } else {\n-            return null;\n-        }\n-    }\n-\n-    public static boolean isBeanPropertyReadMethod(Method method) {\n-        return method != null\n-                && Modifier.isPublic(method.getModifiers())\n-                && !Modifier.isStatic(method.getModifiers())\n-                && method.getReturnType() != void.class\n-                && method.getDeclaringClass() != Object.class\n-                && method.getParameterTypes().length == 0\n-                && ((method.getName().startsWith(\"get\") && method.getName().length() > 3)\n-                || (method.getName().startsWith(\"is\") && method.getName().length() > 2));\n-    }\n-\n-    public static String getPropertyNameFromBeanReadMethod(Method method) {\n-        if (isBeanPropertyReadMethod(method)) {\n-            if (method.getName().startsWith(\"get\")) {\n-                return method.getName().substring(3, 4).toLowerCase()\n-                        + method.getName().substring(4);\n-            }\n-            if (method.getName().startsWith(\"is\")) {\n-                return method.getName().substring(2, 3).toLowerCase()\n-                        + method.getName().substring(3);\n-            }\n-        }\n-        return null;\n-    }\n-\n-    public static boolean isBeanPropertyWriteMethod(Method method) {\n-        return method != null\n-                && Modifier.isPublic(method.getModifiers())\n-                && !Modifier.isStatic(method.getModifiers())\n-                && method.getDeclaringClass() != Object.class\n-                && method.getParameterTypes().length == 1\n-                && method.getName().startsWith(\"set\")\n-                && method.getName().length() > 3;\n-    }\n-\n-    public static String getPropertyNameFromBeanWriteMethod(Method method) {\n-        if (isBeanPropertyWriteMethod(method)) {\n-            return method.getName().substring(3, 4).toLowerCase()\n-                    + method.getName().substring(4);\n-        }\n-        return null;\n-    }\n-\n-    public static boolean isPublicInstanceField(Field field) {\n-        return Modifier.isPublic(field.getModifiers())\n-                && !Modifier.isStatic(field.getModifiers())\n-                && !Modifier.isFinal(field.getModifiers())\n-                && !field.isSynthetic();\n-    }\n-\n-    public static Map<String, Field> getBeanPropertyFields(Class cl) {\n-        Map<String, Field> properties = new HashMap<String, Field>();\n-        for (; cl != null; cl = cl.getSuperclass()) {\n-            Field[] fields = cl.getDeclaredFields();\n-            for (Field field : fields) {\n-                if (Modifier.isTransient(field.getModifiers())\n-                        || Modifier.isStatic(field.getModifiers())) {\n-                    continue;\n-                }\n-                ReflectUtils.makeAccessible(field);\n-\n-                properties.put(field.getName(), field);\n-            }\n-        }\n-\n-        return properties;\n-    }\n-\n-    public static Map<String, Method> getBeanPropertyReadMethods(Class cl) {\n-        Map<String, Method> properties = new HashMap<String, Method>();\n-        for (; cl != null; cl = cl.getSuperclass()) {\n-            Method[] methods = cl.getDeclaredMethods();\n-            for (Method method : methods) {\n-                if (isBeanPropertyReadMethod(method)) {\n-                    ReflectUtils.makeAccessible(method);\n-                    String property = getPropertyNameFromBeanReadMethod(method);\n-                    properties.put(property, method);\n-                }\n-            }\n-        }\n-\n-        return properties;\n-    }\n-\n-    public static Type[] getReturnTypes(Method method) {\n-        Class<?> returnType = method.getReturnType();\n-        Type genericReturnType = method.getGenericReturnType();\n-        if (Future.class.isAssignableFrom(returnType)) {\n-            if (genericReturnType instanceof ParameterizedType) {\n-                Type actualArgType = ((ParameterizedType) genericReturnType).getActualTypeArguments()[0];\n-                if (actualArgType instanceof ParameterizedType) {\n-                    returnType = (Class<?>) ((ParameterizedType) actualArgType).getRawType();\n-                    genericReturnType = actualArgType;\n-                } else if (actualArgType instanceof TypeVariable) {\n-                    returnType = (Class<?>) ((TypeVariable<?>) actualArgType).getBounds()[0];\n-                    genericReturnType = actualArgType;\n-                } else {\n-                    returnType = (Class<?>) actualArgType;\n-                    genericReturnType = returnType;\n-                }\n-            } else {\n-                returnType = null;\n-                genericReturnType = null;\n-            }\n-        }\n-        return new Type[]{returnType, genericReturnType};\n-    }\n-\n-    /**\n-     * Find the {@link Set} of {@link ParameterizedType}\n-     *\n-     * @param sourceClass the source {@link Class class}\n-     * @return non-null read-only {@link Set}\n-     * @since 2.7.5\n-     */\n-    public static Set<ParameterizedType> findParameterizedTypes(Class<?> sourceClass) {\n-        // Add Generic Interfaces\n-        List<Type> genericTypes = new LinkedList<>(asList(sourceClass.getGenericInterfaces()));\n-        // Add Generic Super Class\n-        genericTypes.add(sourceClass.getGenericSuperclass());\n-\n-        Set<ParameterizedType> parameterizedTypes = genericTypes.stream()\n-                .filter(type -> type instanceof ParameterizedType)// filter ParameterizedType\n-                .map(ParameterizedType.class::cast)  // cast to ParameterizedType\n-                .collect(Collectors.toSet());\n-\n-        if (parameterizedTypes.isEmpty()) { // If not found, try to search super types recursively\n-            genericTypes.stream()\n-                    .filter(type -> type instanceof Class)\n-                    .map(Class.class::cast)\n-                    .forEach(superClass -> parameterizedTypes.addAll(findParameterizedTypes(superClass)));\n-        }\n-\n-        return unmodifiableSet(parameterizedTypes);                     // build as a Set\n-\n-    }\n-\n-    /**\n-     * Find the hierarchical types from the source {@link Class class} by specified {@link Class type}.\n-     *\n-     * @param sourceClass the source {@link Class class}\n-     * @param matchType   the type to match\n-     * @param <T>         the type to match\n-     * @return non-null read-only {@link Set}\n-     * @since 2.7.5\n-     */\n-    public static <T> Set<Class<T>> findHierarchicalTypes(Class<?> sourceClass, Class<T> matchType) {\n-        if (sourceClass == null) {\n-            return Collections.emptySet();\n-        }\n-\n-        Set<Class<T>> hierarchicalTypes = new LinkedHashSet<>();\n-\n-        if (matchType.isAssignableFrom(sourceClass)) {\n-            hierarchicalTypes.add((Class<T>) sourceClass);\n-        }\n-\n-        // Find all super classes\n-        hierarchicalTypes.addAll(findHierarchicalTypes(sourceClass.getSuperclass(), matchType));\n-\n-        return unmodifiableSet(hierarchicalTypes);\n-    }\n-\n-    /**\n-     * Get the value from the specified bean and its getter method.\n-     *\n-     * @param bean       the bean instance\n-     * @param methodName the name of getter\n-     * @param <T>        the type of property value\n-     * @return\n-     * @since 2.7.5\n-     */\n-    public static <T> T getProperty(Object bean, String methodName) {\n-        Class<?> beanClass = bean.getClass();\n-        BeanInfo beanInfo = null;\n-        T propertyValue = null;\n-\n-        try {\n-            beanInfo = Introspector.getBeanInfo(beanClass);\n-            propertyValue = (T) Stream.of(beanInfo.getMethodDescriptors())\n-                    .filter(methodDescriptor -> methodName.equals(methodDescriptor.getName()))\n-                    .findFirst()\n-                    .map(method -> {\n-                        try {\n-                            return method.getMethod().invoke(bean);\n-                        } catch (Exception e) {\n-                            //ignore\n-                        }\n-                        return null;\n-                    }).get();\n-        } catch (Exception e) {\n-\n-        }\n-        return propertyValue;\n-    }\n-\n-    /**\n-     * Resolve the types of the specified values\n-     *\n-     * @param values the values\n-     * @return If can't be resolved, return {@link ReflectUtils#EMPTY_CLASS_ARRAY empty class array}\n-     * @since 2.7.6\n-     */\n-    public static Class[] resolveTypes(Object... values) {\n-\n-        if (isEmpty(values)) {\n-            return EMPTY_CLASS_ARRAY;\n-        }\n-\n-        int size = values.length;\n-\n-        Class[] types = new Class[size];\n-\n-        for (int i = 0; i < size; i++) {\n-            Object value = values[i];\n-            types[i] = value == null ? null : value.getClass();\n-        }\n-\n-        return types;\n-    }\n-\n-    /**\n-     * Copy from org.springframework.util.ReflectionUtils.\n-     * Make the given method accessible, explicitly setting it accessible if\n-     * necessary. The {@code setAccessible(true)} method is only called\n-     * when actually necessary, to avoid unnecessary conflicts with a JVM\n-     * SecurityManager (if active).\n-     * @param method the method to make accessible\n-     * @see java.lang.reflect.Method#setAccessible\n-     */\n-    @SuppressWarnings(\"deprecation\")  // on JDK 9\n-    public static void makeAccessible(Method method) {\n-        if ((!Modifier.isPublic(method.getModifiers()) ||\n-                !Modifier.isPublic(method.getDeclaringClass().getModifiers())) && !method.isAccessible()) {\n-            method.setAccessible(true);\n-        }\n-    }\n-\n-    /**\n-     * Copy from org.springframework.util.ReflectionUtils.\n-     * Make the given field accessible, explicitly setting it accessible if\n-     * necessary. The {@code setAccessible(true)} method is only called\n-     * when actually necessary, to avoid unnecessary conflicts with a JVM\n-     * SecurityManager (if active).\n-     * @param field the field to make accessible\n-     * @see java.lang.reflect.Field#setAccessible\n-     */\n-    @SuppressWarnings(\"deprecation\")  // on JDK 9\n-    public static void makeAccessible(Field field) {\n-        if ((!Modifier.isPublic(field.getModifiers()) ||\n-                !Modifier.isPublic(field.getDeclaringClass().getModifiers()) ||\n-                Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) {\n-            field.setAccessible(true);\n-        }\n-    }\n-\n-    /**\n-     * Copy from org.springframework.util.ReflectionUtils.\n-     * Make the given constructor accessible, explicitly setting it accessible\n-     * if necessary. The {@code setAccessible(true)} method is only called\n-     * when actually necessary, to avoid unnecessary conflicts with a JVM\n-     * SecurityManager (if active).\n-     * @param ctor the constructor to make accessible\n-     * @see java.lang.reflect.Constructor#setAccessible\n-     */\n-    @SuppressWarnings(\"deprecation\")  // on JDK 9\n-    public static void makeAccessible(Constructor<?> ctor) {\n-        if ((!Modifier.isPublic(ctor.getModifiers()) ||\n-                !Modifier.isPublic(ctor.getDeclaringClass().getModifiers())) && !ctor.isAccessible()) {\n-            ctor.setAccessible(true);\n-        }\n-    }\n-\n-    public static boolean checkZeroArgConstructor(Class clazz) {\n-        try {\n-            clazz.getDeclaredConstructor();\n-            return true;\n-        } catch (NoSuchMethodException e) {\n-            return false;\n-        }\n-    }\n-\n-    public static boolean isJdk(Class clazz) {\n-        return clazz.getName().startsWith(\"java.\") || clazz.getName().startsWith(\"javax.\");\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.common.utils;\r\n+\r\n+import javassist.CtClass;\r\n+import javassist.CtConstructor;\r\n+import javassist.CtMethod;\r\n+import javassist.NotFoundException;\r\n+\r\n+import java.beans.BeanInfo;\r\n+import java.beans.Introspector;\r\n+import java.lang.reflect.Array;\r\n+import java.lang.reflect.Constructor;\r\n+import java.lang.reflect.Field;\r\n+import java.lang.reflect.GenericArrayType;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Modifier;\r\n+import java.lang.reflect.ParameterizedType;\r\n+import java.lang.reflect.Type;\r\n+import java.lang.reflect.TypeVariable;\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.Collections;\r\n+import java.util.Date;\r\n+import java.util.HashMap;\r\n+import java.util.HashSet;\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.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+import java.util.concurrent.Future;\r\n+import java.util.regex.Matcher;\r\n+import java.util.regex.Pattern;\r\n+import java.util.stream.Collectors;\r\n+import java.util.stream.Stream;\r\n+\r\n+import static java.util.Arrays.asList;\r\n+import static java.util.Collections.unmodifiableSet;\r\n+import static org.apache.dubbo.common.utils.ArrayUtils.isEmpty;\r\n+\r\n+/**\r\n+ * ReflectUtils\r\n+ */\r\n+public final class ReflectUtils {\r\n+\r\n+    /**\r\n+     * void(V).\r\n+     */\r\n+    public static final char JVM_VOID = 'V';\r\n+\r\n+    /**\r\n+     * boolean(Z).\r\n+     */\r\n+    public static final char JVM_BOOLEAN = 'Z';\r\n+\r\n+    /**\r\n+     * byte(B).\r\n+     */\r\n+    public static final char JVM_BYTE = 'B';\r\n+\r\n+    /**\r\n+     * char(C).\r\n+     */\r\n+    public static final char JVM_CHAR = 'C';\r\n+\r\n+    /**\r\n+     * double(D).\r\n+     */\r\n+    public static final char JVM_DOUBLE = 'D';\r\n+\r\n+    /**\r\n+     * float(F).\r\n+     */\r\n+    public static final char JVM_FLOAT = 'F';\r\n+\r\n+    /**\r\n+     * int(I).\r\n+     */\r\n+    public static final char JVM_INT = 'I';\r\n+\r\n+    /**\r\n+     * long(J).\r\n+     */\r\n+    public static final char JVM_LONG = 'J';\r\n+\r\n+    /**\r\n+     * short(S).\r\n+     */\r\n+    public static final char JVM_SHORT = 'S';\r\n+\r\n+    public static final Class<?>[] EMPTY_CLASS_ARRAY = new Class<?>[0];\r\n+\r\n+    public static final String JAVA_IDENT_REGEX = \"(?:[_$a-zA-Z][_$a-zA-Z0-9]*)\";\r\n+\r\n+    public static final String JAVA_NAME_REGEX = \"(?:\" + JAVA_IDENT_REGEX + \"(?:\\\\.\" + JAVA_IDENT_REGEX + \")*)\";\r\n+\r\n+    public static final String CLASS_DESC = \"(?:L\" + JAVA_IDENT_REGEX + \"(?:\\\\/\" + JAVA_IDENT_REGEX + \")*;)\";\r\n+\r\n+    public static final String ARRAY_DESC = \"(?:\\\\[+(?:(?:[VZBCDFIJS])|\" + CLASS_DESC + \"))\";\r\n+\r\n+    public static final String DESC_REGEX = \"(?:(?:[VZBCDFIJS])|\" + CLASS_DESC + \"|\" + ARRAY_DESC + \")\";\r\n+\r\n+    public static final Pattern DESC_PATTERN = Pattern.compile(DESC_REGEX);\r\n+\r\n+    public static final String METHOD_DESC_REGEX = \"(?:(\" + JAVA_IDENT_REGEX + \")?\\\\((\" + DESC_REGEX + \"*)\\\\)(\" + DESC_REGEX + \")?)\";\r\n+\r\n+    public static final Pattern METHOD_DESC_PATTERN = Pattern.compile(METHOD_DESC_REGEX);\r\n+\r\n+    public static final Pattern GETTER_METHOD_DESC_PATTERN = Pattern.compile(\"get([A-Z][_a-zA-Z0-9]*)\\\\(\\\\)(\" + DESC_REGEX + \")\");\r\n+\r\n+    public static final Pattern SETTER_METHOD_DESC_PATTERN = Pattern.compile(\"set([A-Z][_a-zA-Z0-9]*)\\\\((\" + DESC_REGEX + \")\\\\)V\");\r\n+\r\n+    public static final Pattern IS_HAS_CAN_METHOD_DESC_PATTERN = Pattern.compile(\"(?:is|has|can)([A-Z][_a-zA-Z0-9]*)\\\\(\\\\)Z\");\r\n+\r\n+    private static final ConcurrentMap<String, Class<?>> DESC_CLASS_CACHE = new ConcurrentHashMap<String, Class<?>>();\r\n+\r\n+    private static final ConcurrentMap<String, Class<?>> NAME_CLASS_CACHE = new ConcurrentHashMap<String, Class<?>>();\r\n+\r\n+    private static final ConcurrentMap<String, Method> SIGNATURE_METHODS_CACHE = new ConcurrentHashMap<String, Method>();\r\n+\r\n+    private static Map<Class<?>, Object> primitiveDefaults = new HashMap<>();\r\n+\r\n+    static {\r\n+        primitiveDefaults.put(int.class, 0);\r\n+        primitiveDefaults.put(long.class, 0L);\r\n+        primitiveDefaults.put(byte.class, (byte) 0);\r\n+        primitiveDefaults.put(char.class, (char) 0);\r\n+        primitiveDefaults.put(short.class, (short) 0);\r\n+        primitiveDefaults.put(float.class, (float) 0);\r\n+        primitiveDefaults.put(double.class, (double) 0);\r\n+        primitiveDefaults.put(boolean.class, false);\r\n+        primitiveDefaults.put(void.class, null);\r\n+    }\r\n+\r\n+    private ReflectUtils() {\r\n+    }\r\n+\r\n+    public static boolean isPrimitives(Class<?> cls) {\r\n+        while (cls.isArray()) {\r\n+            cls = cls.getComponentType();\r\n+        }\r\n+        return isPrimitive(cls);\r\n+    }\r\n+\r\n+    public static boolean isPrimitive(Class<?> cls) {\r\n+        return cls.isPrimitive() || cls == String.class || cls == Boolean.class || cls == Character.class\r\n+                || Number.class.isAssignableFrom(cls) || Date.class.isAssignableFrom(cls);\r\n+    }\r\n+\r\n+    public static Class<?> getBoxedClass(Class<?> c) {\r\n+        if (c == int.class) {\r\n+            c = Integer.class;\r\n+        } else if (c == boolean.class) {\r\n+            c = Boolean.class;\r\n+        } else if (c == long.class) {\r\n+            c = Long.class;\r\n+        } else if (c == float.class) {\r\n+            c = Float.class;\r\n+        } else if (c == double.class) {\r\n+            c = Double.class;\r\n+        } else if (c == char.class) {\r\n+            c = Character.class;\r\n+        } else if (c == byte.class) {\r\n+            c = Byte.class;\r\n+        } else if (c == short.class) {\r\n+            c = Short.class;\r\n+        }\r\n+        return c;\r\n+    }\r\n+\r\n+    /**\r\n+     * is compatible.\r\n+     *\r\n+     * @param c class.\r\n+     * @param o instance.\r\n+     * @return compatible or not.\r\n+     */\r\n+    public static boolean isCompatible(Class<?> c, Object o) {\r\n+        boolean pt = c.isPrimitive();\r\n+        if (o == null) {\r\n+            return !pt;\r\n+        }\r\n+\r\n+        if (pt) {\r\n+            c = getBoxedClass(c);\r\n+        }\r\n+\r\n+        return c == o.getClass() || c.isInstance(o);\r\n+    }\r\n+\r\n+    /**\r\n+     * is compatible.\r\n+     *\r\n+     * @param cs class array.\r\n+     * @param os object array.\r\n+     * @return compatible or not.\r\n+     */\r\n+    public static boolean isCompatible(Class<?>[] cs, Object[] os) {\r\n+        int len = cs.length;\r\n+        if (len != os.length) {\r\n+            return false;\r\n+        }\r\n+        if (len == 0) {\r\n+            return true;\r\n+        }\r\n+        for (int i = 0; i < len; i++) {\r\n+            if (!isCompatible(cs[i], os[i])) {\r\n+                return false;\r\n+            }\r\n+        }\r\n+        return true;\r\n+    }\r\n+\r\n+    public static String getCodeBase(Class<?> cls) {\r\n+        if (cls == null) {\r\n+            return null;\r\n+        }\r\n+        ProtectionDomain domain = cls.getProtectionDomain();\r\n+        if (domain == null) {\r\n+            return null;\r\n+        }\r\n+        CodeSource source = domain.getCodeSource();\r\n+        if (source == null) {\r\n+            return null;\r\n+        }\r\n+        URL location = source.getLocation();\r\n+        if (location == null) {\r\n+            return null;\r\n+        }\r\n+        return location.getFile();\r\n+    }\r\n+\r\n+    /**\r\n+     * get name.\r\n+     * java.lang.Object[][].class => \"java.lang.Object[][]\"\r\n+     *\r\n+     * @param c class.\r\n+     * @return name.\r\n+     */\r\n+    public static String getName(Class<?> c) {\r\n+        if (c.isArray()) {\r\n+            StringBuilder sb = new StringBuilder();\r\n+            do {\r\n+                sb.append(\"[]\");\r\n+                c = c.getComponentType();\r\n+            }\r\n+            while (c.isArray());\r\n+\r\n+            return c.getName() + sb.toString();\r\n+        }\r\n+        return c.getName();\r\n+    }\r\n+\r\n+    public static Class<?> getGenericClass(Class<?> cls) {\r\n+        return getGenericClass(cls, 0);\r\n+    }\r\n+\r\n+    public static Class<?> getGenericClass(Class<?> cls, int i) {\r\n+        try {\r\n+            ParameterizedType parameterizedType = ((ParameterizedType) cls.getGenericInterfaces()[0]);\r\n+            Object genericClass = parameterizedType.getActualTypeArguments()[i];\r\n+\r\n+            // handle nested generic type\r\n+            if (genericClass instanceof ParameterizedType) {\r\n+                return (Class<?>) ((ParameterizedType) genericClass).getRawType();\r\n+            }\r\n+\r\n+            // handle array generic type\r\n+            if (genericClass instanceof GenericArrayType) {\r\n+                return (Class<?>) ((GenericArrayType) genericClass).getGenericComponentType();\r\n+            }\r\n+\r\n+            // Requires JDK 7 or higher, Foo<int[]> is no longer GenericArrayType\r\n+            if (((Class) genericClass).isArray()) {\r\n+                return ((Class) genericClass).getComponentType();\r\n+            }\r\n+            return (Class<?>) genericClass;\r\n+        } catch (Throwable e) {\r\n+            throw new IllegalArgumentException(cls.getName() + \" generic type undefined!\", e);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * get method name.\r\n+     * \"void do(int)\", \"void do()\", \"int do(java.lang.String,boolean)\"\r\n+     *\r\n+     * @param m method.\r\n+     * @return name.\r\n+     */\r\n+    public static String getName(final Method m) {\r\n+        StringBuilder ret = new StringBuilder();\r\n+        ret.append(getName(m.getReturnType())).append(' ');\r\n+        ret.append(m.getName()).append('(');\r\n+        Class<?>[] parameterTypes = m.getParameterTypes();\r\n+        for (int i = 0; i < parameterTypes.length; i++) {\r\n+            if (i > 0) {\r\n+                ret.append(',');\r\n+            }\r\n+            ret.append(getName(parameterTypes[i]));\r\n+        }\r\n+        ret.append(')');\r\n+        return ret.toString();\r\n+    }\r\n+\r\n+    public static String getSignature(String methodName, Class<?>[] parameterTypes) {\r\n+        StringBuilder sb = new StringBuilder(methodName);\r\n+        sb.append(\"(\");\r\n+        if (parameterTypes != null && parameterTypes.length > 0) {\r\n+            boolean first = true;\r\n+            for (Class<?> type : parameterTypes) {\r\n+                if (first) {\r\n+                    first = false;\r\n+                } else {\r\n+                    sb.append(\",\");\r\n+                }\r\n+                sb.append(type.getName());\r\n+            }\r\n+        }\r\n+        sb.append(\")\");\r\n+        return sb.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * get constructor name.\r\n+     * \"()\", \"(java.lang.String,int)\"\r\n+     *\r\n+     * @param c constructor.\r\n+     * @return name.\r\n+     */\r\n+    public static String getName(final Constructor<?> c) {\r\n+        StringBuilder ret = new StringBuilder(\"(\");\r\n+        Class<?>[] parameterTypes = c.getParameterTypes();\r\n+        for (int i = 0; i < parameterTypes.length; i++) {\r\n+            if (i > 0) {\r\n+                ret.append(',');\r\n+            }\r\n+            ret.append(getName(parameterTypes[i]));\r\n+        }\r\n+        ret.append(')');\r\n+        return ret.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * get class desc.\r\n+     * boolean[].class => \"[Z\"\r\n+     * Object.class => \"Ljava/lang/Object;\"\r\n+     *\r\n+     * @param c class.\r\n+     * @return desc.\r\n+     * @throws NotFoundException\r\n+     */\r\n+    public static String getDesc(Class<?> c) {\r\n+        StringBuilder ret = new StringBuilder();\r\n+\r\n+        while (c.isArray()) {\r\n+            ret.append('[');\r\n+            c = c.getComponentType();\r\n+        }\r\n+\r\n+        if (c.isPrimitive()) {\r\n+            String t = c.getName();\r\n+            if (\"void\".equals(t)) {\r\n+                ret.append(JVM_VOID);\r\n+            } else if (\"boolean\".equals(t)) {\r\n+                ret.append(JVM_BOOLEAN);\r\n+            } else if (\"byte\".equals(t)) {\r\n+                ret.append(JVM_BYTE);\r\n+            } else if (\"char\".equals(t)) {\r\n+                ret.append(JVM_CHAR);\r\n+            } else if (\"double\".equals(t)) {\r\n+                ret.append(JVM_DOUBLE);\r\n+            } else if (\"float\".equals(t)) {\r\n+                ret.append(JVM_FLOAT);\r\n+            } else if (\"int\".equals(t)) {\r\n+                ret.append(JVM_INT);\r\n+            } else if (\"long\".equals(t)) {\r\n+                ret.append(JVM_LONG);\r\n+            } else if (\"short\".equals(t)) {\r\n+                ret.append(JVM_SHORT);\r\n+            }\r\n+        } else {\r\n+            ret.append('L');\r\n+            ret.append(c.getName().replace('.', '/'));\r\n+            ret.append(';');\r\n+        }\r\n+        return ret.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * get class array desc.\r\n+     * [int.class, boolean[].class, Object.class] => \"I[ZLjava/lang/Object;\"\r\n+     *\r\n+     * @param cs class array.\r\n+     * @return desc.\r\n+     * @throws NotFoundException\r\n+     */\r\n+    public static String getDesc(final Class<?>[] cs) {\r\n+        if (cs.length == 0) {\r\n+            return \"\";\r\n+        }\r\n+\r\n+        StringBuilder sb = new StringBuilder(64);\r\n+        for (Class<?> c : cs) {\r\n+            sb.append(getDesc(c));\r\n+        }\r\n+        return sb.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * get method desc.\r\n+     * int do(int arg1) => \"do(I)I\"\r\n+     * void do(String arg1,boolean arg2) => \"do(Ljava/lang/String;Z)V\"\r\n+     *\r\n+     * @param m method.\r\n+     * @return desc.\r\n+     */\r\n+    public static String getDesc(final Method m) {\r\n+        StringBuilder ret = new StringBuilder(m.getName()).append('(');\r\n+        Class<?>[] parameterTypes = m.getParameterTypes();\r\n+        for (int i = 0; i < parameterTypes.length; i++) {\r\n+            ret.append(getDesc(parameterTypes[i]));\r\n+        }\r\n+        ret.append(')').append(getDesc(m.getReturnType()));\r\n+        return ret.toString();\r\n+    }\r\n+\r\n+    public static String[] getDescArray(final Method m) {\r\n+        Class<?>[] parameterTypes = m.getParameterTypes();\r\n+        String[] arr = new String[parameterTypes.length];\r\n+\r\n+        for (int i = 0; i < parameterTypes.length; i++) {\r\n+            arr[i] = getDesc(parameterTypes[i]);\r\n+        }\r\n+        return arr;\r\n+    }\r\n+\r\n+    /**\r\n+     * get constructor desc.\r\n+     * \"()V\", \"(Ljava/lang/String;I)V\"\r\n+     *\r\n+     * @param c constructor.\r\n+     * @return desc\r\n+     */\r\n+    public static String getDesc(final Constructor<?> c) {\r\n+        StringBuilder ret = new StringBuilder(\"(\");\r\n+        Class<?>[] parameterTypes = c.getParameterTypes();\r\n+        for (int i = 0; i < parameterTypes.length; i++) {\r\n+            ret.append(getDesc(parameterTypes[i]));\r\n+        }\r\n+        ret.append(')').append('V');\r\n+        return ret.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * get method desc.\r\n+     * \"(I)I\", \"()V\", \"(Ljava/lang/String;Z)V\"\r\n+     *\r\n+     * @param m method.\r\n+     * @return desc.\r\n+     */\r\n+    public static String getDescWithoutMethodName(Method m) {\r\n+        StringBuilder ret = new StringBuilder();\r\n+        ret.append('(');\r\n+        Class<?>[] parameterTypes = m.getParameterTypes();\r\n+        for (int i = 0; i < parameterTypes.length; i++) {\r\n+            ret.append(getDesc(parameterTypes[i]));\r\n+        }\r\n+        ret.append(')').append(getDesc(m.getReturnType()));\r\n+        return ret.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * get class desc.\r\n+     * Object.class => \"Ljava/lang/Object;\"\r\n+     * boolean[].class => \"[Z\"\r\n+     *\r\n+     * @param c class.\r\n+     * @return desc.\r\n+     * @throws NotFoundException\r\n+     */\r\n+    public static String getDesc(final CtClass c) throws NotFoundException {\r\n+        StringBuilder ret = new StringBuilder();\r\n+        if (c.isArray()) {\r\n+            ret.append('[');\r\n+            ret.append(getDesc(c.getComponentType()));\r\n+        } else if (c.isPrimitive()) {\r\n+            String t = c.getName();\r\n+            if (\"void\".equals(t)) {\r\n+                ret.append(JVM_VOID);\r\n+            } else if (\"boolean\".equals(t)) {\r\n+                ret.append(JVM_BOOLEAN);\r\n+            } else if (\"byte\".equals(t)) {\r\n+                ret.append(JVM_BYTE);\r\n+            } else if (\"char\".equals(t)) {\r\n+                ret.append(JVM_CHAR);\r\n+            } else if (\"double\".equals(t)) {\r\n+                ret.append(JVM_DOUBLE);\r\n+            } else if (\"float\".equals(t)) {\r\n+                ret.append(JVM_FLOAT);\r\n+            } else if (\"int\".equals(t)) {\r\n+                ret.append(JVM_INT);\r\n+            } else if (\"long\".equals(t)) {\r\n+                ret.append(JVM_LONG);\r\n+            } else if (\"short\".equals(t)) {\r\n+                ret.append(JVM_SHORT);\r\n+            }\r\n+        } else {\r\n+            ret.append('L');\r\n+            ret.append(c.getName().replace('.', '/'));\r\n+            ret.append(';');\r\n+        }\r\n+        return ret.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * get method desc.\r\n+     * \"do(I)I\", \"do()V\", \"do(Ljava/lang/String;Z)V\"\r\n+     *\r\n+     * @param m method.\r\n+     * @return desc.\r\n+     */\r\n+    public static String getDesc(final CtMethod m) throws NotFoundException {\r\n+        StringBuilder ret = new StringBuilder(m.getName()).append('(');\r\n+        CtClass[] parameterTypes = m.getParameterTypes();\r\n+        for (CtClass parameterType : parameterTypes) {\r\n+            ret.append(getDesc(parameterType));\r\n+        }\r\n+        ret.append(')').append(getDesc(m.getReturnType()));\r\n+        return ret.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * get constructor desc.\r\n+     * \"()V\", \"(Ljava/lang/String;I)V\"\r\n+     *\r\n+     * @param c constructor.\r\n+     * @return desc\r\n+     */\r\n+    public static String getDesc(final CtConstructor c) throws NotFoundException {\r\n+        StringBuilder ret = new StringBuilder(\"(\");\r\n+        CtClass[] parameterTypes = c.getParameterTypes();\r\n+        for (int i = 0; i < parameterTypes.length; i++) {\r\n+            ret.append(getDesc(parameterTypes[i]));\r\n+        }\r\n+        ret.append(')').append('V');\r\n+        return ret.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * get method desc.\r\n+     * \"(I)I\", \"()V\", \"(Ljava/lang/String;Z)V\".\r\n+     *\r\n+     * @param m method.\r\n+     * @return desc.\r\n+     */\r\n+    public static String getDescWithoutMethodName(final CtMethod m) throws NotFoundException {\r\n+        StringBuilder ret = new StringBuilder();\r\n+        ret.append('(');\r\n+        CtClass[] parameterTypes = m.getParameterTypes();\r\n+        for (int i = 0; i < parameterTypes.length; i++) {\r\n+            ret.append(getDesc(parameterTypes[i]));\r\n+        }\r\n+        ret.append(')').append(getDesc(m.getReturnType()));\r\n+        return ret.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * name to desc.\r\n+     * java.util.Map[][] => \"[[Ljava/util/Map;\"\r\n+     *\r\n+     * @param name name.\r\n+     * @return desc.\r\n+     */\r\n+    public static String name2desc(String name) {\r\n+        StringBuilder sb = new StringBuilder();\r\n+        int c = 0, index = name.indexOf('[');\r\n+        if (index > 0) {\r\n+            c = (name.length() - index) / 2;\r\n+            name = name.substring(0, index);\r\n+        }\r\n+        while (c-- > 0) {\r\n+            sb.append(\"[\");\r\n+        }\r\n+        if (\"void\".equals(name)) {\r\n+            sb.append(JVM_VOID);\r\n+        } else if (\"boolean\".equals(name)) {\r\n+            sb.append(JVM_BOOLEAN);\r\n+        } else if (\"byte\".equals(name)) {\r\n+            sb.append(JVM_BYTE);\r\n+        } else if (\"char\".equals(name)) {\r\n+            sb.append(JVM_CHAR);\r\n+        } else if (\"double\".equals(name)) {\r\n+            sb.append(JVM_DOUBLE);\r\n+        } else if (\"float\".equals(name)) {\r\n+            sb.append(JVM_FLOAT);\r\n+        } else if (\"int\".equals(name)) {\r\n+            sb.append(JVM_INT);\r\n+        } else if (\"long\".equals(name)) {\r\n+            sb.append(JVM_LONG);\r\n+        } else if (\"short\".equals(name)) {\r\n+            sb.append(JVM_SHORT);\r\n+        } else {\r\n+            sb.append('L').append(name.replace('.', '/')).append(';');\r\n+        }\r\n+        return sb.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * desc to name.\r\n+     * \"[[I\" => \"int[][]\"\r\n+     *\r\n+     * @param desc desc.\r\n+     * @return name.\r\n+     */\r\n+    public static String desc2name(String desc) {\r\n+        StringBuilder sb = new StringBuilder();\r\n+        int c = desc.lastIndexOf('[') + 1;\r\n+        if (desc.length() == c + 1) {\r\n+            switch (desc.charAt(c)) {\r\n+                case JVM_VOID: {\r\n+                    sb.append(\"void\");\r\n+                    break;\r\n+                }\r\n+                case JVM_BOOLEAN: {\r\n+                    sb.append(\"boolean\");\r\n+                    break;\r\n+                }\r\n+                case JVM_BYTE: {\r\n+                    sb.append(\"byte\");\r\n+                    break;\r\n+                }\r\n+                case JVM_CHAR: {\r\n+                    sb.append(\"char\");\r\n+                    break;\r\n+                }\r\n+                case JVM_DOUBLE: {\r\n+                    sb.append(\"double\");\r\n+                    break;\r\n+                }\r\n+                case JVM_FLOAT: {\r\n+                    sb.append(\"float\");\r\n+                    break;\r\n+                }\r\n+                case JVM_INT: {\r\n+                    sb.append(\"int\");\r\n+                    break;\r\n+                }\r\n+                case JVM_LONG: {\r\n+                    sb.append(\"long\");\r\n+                    break;\r\n+                }\r\n+                case JVM_SHORT: {\r\n+                    sb.append(\"short\");\r\n+                    break;\r\n+                }\r\n+                default:\r\n+                    throw new RuntimeException();\r\n+            }\r\n+        } else {\r\n+            sb.append(desc.substring(c + 1, desc.length() - 1).replace('/', '.'));\r\n+        }\r\n+        while (c-- > 0) {\r\n+            sb.append(\"[]\");\r\n+        }\r\n+        return sb.toString();\r\n+    }\r\n+\r\n+    public static Class<?> forName(String name) {\r\n+        try {\r\n+            return name2class(name);\r\n+        } catch (ClassNotFoundException e) {\r\n+            throw new IllegalStateException(\"Not found class \" + name + \", cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    public static Class<?> forName(ClassLoader cl, String name) {\r\n+        try {\r\n+            return name2class(cl, name);\r\n+        } catch (ClassNotFoundException e) {\r\n+            throw new IllegalStateException(\"Not found class \" + name + \", cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * name to class.\r\n+     * \"boolean\" => boolean.class\r\n+     * \"java.util.Map[][]\" => java.util.Map[][].class\r\n+     *\r\n+     * @param name name.\r\n+     * @return Class instance.\r\n+     */\r\n+    public static Class<?> name2class(String name) throws ClassNotFoundException {\r\n+        return name2class(ClassUtils.getClassLoader(), name);\r\n+    }\r\n+\r\n+    /**\r\n+     * name to class.\r\n+     * \"boolean\" => boolean.class\r\n+     * \"java.util.Map[][]\" => java.util.Map[][].class\r\n+     *\r\n+     * @param cl   ClassLoader instance.\r\n+     * @param name name.\r\n+     * @return Class instance.\r\n+     */\r\n+    private static Class<?> name2class(ClassLoader cl, String name) throws ClassNotFoundException {\r\n+        int c = 0, index = name.indexOf('[');\r\n+        if (index > 0) {\r\n+            c = (name.length() - index) / 2;\r\n+            name = name.substring(0, index);\r\n+        }\r\n+        if (c > 0) {\r\n+            StringBuilder sb = new StringBuilder();\r\n+            while (c-- > 0) {\r\n+                sb.append(\"[\");\r\n+            }\r\n+\r\n+            if (\"void\".equals(name)) {\r\n+                sb.append(JVM_VOID);\r\n+            } else if (\"boolean\".equals(name)) {\r\n+                sb.append(JVM_BOOLEAN);\r\n+            } else if (\"byte\".equals(name)) {\r\n+                sb.append(JVM_BYTE);\r\n+            } else if (\"char\".equals(name)) {\r\n+                sb.append(JVM_CHAR);\r\n+            } else if (\"double\".equals(name)) {\r\n+                sb.append(JVM_DOUBLE);\r\n+            } else if (\"float\".equals(name)) {\r\n+                sb.append(JVM_FLOAT);\r\n+            } else if (\"int\".equals(name)) {\r\n+                sb.append(JVM_INT);\r\n+            } else if (\"long\".equals(name)) {\r\n+                sb.append(JVM_LONG);\r\n+            } else if (\"short\".equals(name)) {\r\n+                sb.append(JVM_SHORT);\r\n+            } else {\r\n+                // \"java.lang.Object\" ==> \"Ljava.lang.Object;\"\r\n+                sb.append('L').append(name).append(';');\r\n+            }\r\n+            name = sb.toString();\r\n+        } else {\r\n+            if (\"void\".equals(name)) {\r\n+                return void.class;\r\n+            }\r\n+            if (\"boolean\".equals(name)) {\r\n+                return boolean.class;\r\n+            }\r\n+            if (\"byte\".equals(name)) {\r\n+                return byte.class;\r\n+            }\r\n+            if (\"char\".equals(name)) {\r\n+                return char.class;\r\n+            }\r\n+            if (\"double\".equals(name)) {\r\n+                return double.class;\r\n+            }\r\n+            if (\"float\".equals(name)) {\r\n+                return float.class;\r\n+            }\r\n+            if (\"int\".equals(name)) {\r\n+                return int.class;\r\n+            }\r\n+            if (\"long\".equals(name)) {\r\n+                return long.class;\r\n+            }\r\n+            if (\"short\".equals(name)) {\r\n+                return short.class;\r\n+            }\r\n+        }\r\n+\r\n+        if (cl == null) {\r\n+            cl = ClassUtils.getClassLoader();\r\n+        }\r\n+        Class<?> clazz = NAME_CLASS_CACHE.get(name);\r\n+        if (clazz == null) {\r\n+            clazz = Class.forName(name, true, cl);\r\n+            NAME_CLASS_CACHE.put(name, clazz);\r\n+        }\r\n+        return clazz;\r\n+    }\r\n+\r\n+    /**\r\n+     * desc to class.\r\n+     * \"[Z\" => boolean[].class\r\n+     * \"[[Ljava/util/Map;\" => java.util.Map[][].class\r\n+     *\r\n+     * @param desc desc.\r\n+     * @return Class instance.\r\n+     * @throws ClassNotFoundException\r\n+     */\r\n+    public static Class<?> desc2class(String desc) throws ClassNotFoundException {\r\n+        return desc2class(ClassUtils.getClassLoader(), desc);\r\n+    }\r\n+\r\n+    /**\r\n+     * desc to class.\r\n+     * \"[Z\" => boolean[].class\r\n+     * \"[[Ljava/util/Map;\" => java.util.Map[][].class\r\n+     *\r\n+     * @param cl   ClassLoader instance.\r\n+     * @param desc desc.\r\n+     * @return Class instance.\r\n+     * @throws ClassNotFoundException\r\n+     */\r\n+    private static Class<?> desc2class(ClassLoader cl, String desc) throws ClassNotFoundException {\r\n+        switch (desc.charAt(0)) {\r\n+            case JVM_VOID:\r\n+                return void.class;\r\n+            case JVM_BOOLEAN:\r\n+                return boolean.class;\r\n+            case JVM_BYTE:\r\n+                return byte.class;\r\n+            case JVM_CHAR:\r\n+                return char.class;\r\n+            case JVM_DOUBLE:\r\n+                return double.class;\r\n+            case JVM_FLOAT:\r\n+                return float.class;\r\n+            case JVM_INT:\r\n+                return int.class;\r\n+            case JVM_LONG:\r\n+                return long.class;\r\n+            case JVM_SHORT:\r\n+                return short.class;\r\n+            case 'L':\r\n+                // \"Ljava/lang/Object;\" ==> \"java.lang.Object\"\r\n+                desc = desc.substring(1, desc.length() - 1).replace('/', '.');\r\n+                break;\r\n+            case '[':\r\n+                // \"[[Ljava/lang/Object;\" ==> \"[[Ljava.lang.Object;\"\r\n+                desc = desc.replace('/', '.');\r\n+                break;\r\n+            default:\r\n+                throw new ClassNotFoundException(\"Class not found: \" + desc);\r\n+        }\r\n+\r\n+        if (cl == null) {\r\n+            cl = ClassUtils.getClassLoader();\r\n+        }\r\n+        Class<?> clazz = DESC_CLASS_CACHE.get(desc);\r\n+        if (clazz == null) {\r\n+            clazz = Class.forName(desc, true, cl);\r\n+            DESC_CLASS_CACHE.put(desc, clazz);\r\n+        }\r\n+        return clazz;\r\n+    }\r\n+\r\n+    /**\r\n+     * get class array instance.\r\n+     *\r\n+     * @param desc desc.\r\n+     * @return Class class array.\r\n+     * @throws ClassNotFoundException\r\n+     */\r\n+    public static Class<?>[] desc2classArray(String desc) throws ClassNotFoundException {\r\n+        Class<?>[] ret = desc2classArray(ClassUtils.getClassLoader(), desc);\r\n+        return ret;\r\n+    }\r\n+\r\n+    /**\r\n+     * get class array instance.\r\n+     *\r\n+     * @param cl   ClassLoader instance.\r\n+     * @param desc desc.\r\n+     * @return Class[] class array.\r\n+     * @throws ClassNotFoundException\r\n+     */\r\n+    private static Class<?>[] desc2classArray(ClassLoader cl, String desc) throws ClassNotFoundException {\r\n+        if (desc.length() == 0) {\r\n+            return EMPTY_CLASS_ARRAY;\r\n+        }\r\n+\r\n+        List<Class<?>> cs = new ArrayList<Class<?>>();\r\n+        Matcher m = DESC_PATTERN.matcher(desc);\r\n+        while (m.find()) {\r\n+            cs.add(desc2class(cl, m.group()));\r\n+        }\r\n+        return cs.toArray(EMPTY_CLASS_ARRAY);\r\n+    }\r\n+\r\n+    /**\r\n+     * Find method from method signature\r\n+     *\r\n+     * @param clazz      Target class to find method\r\n+     * @param methodName Method signature, e.g.: method1(int, String). It is allowed to provide method name only, e.g.: method2\r\n+     * @return target method\r\n+     * @throws NoSuchMethodException\r\n+     * @throws ClassNotFoundException\r\n+     * @throws IllegalStateException  when multiple methods are found (overridden method when parameter info is not provided)\r\n+     * @deprecated Recommend {@link MethodUtils#findMethod(Class, String, Class[])}\r\n+     */\r\n+    @Deprecated\r\n+    public static Method findMethodByMethodSignature(Class<?> clazz, String methodName, String[] parameterTypes)\r\n+            throws NoSuchMethodException, ClassNotFoundException {\r\n+        String signature = clazz.getName() + \".\" + methodName;\r\n+        if (parameterTypes != null && parameterTypes.length > 0) {\r\n+            signature += StringUtils.join(parameterTypes);\r\n+        }\r\n+        Method method = SIGNATURE_METHODS_CACHE.get(signature);\r\n+        if (method != null) {\r\n+            return method;\r\n+        }\r\n+        if (parameterTypes == null) {\r\n+            List<Method> finded = new ArrayList<Method>();\r\n+            for (Method m : clazz.getMethods()) {\r\n+                if (m.getName().equals(methodName)) {\r\n+                    finded.add(m);\r\n+                }\r\n+            }\r\n+            if (finded.isEmpty()) {\r\n+                throw new NoSuchMethodException(\"No such method \" + methodName + \" in class \" + clazz);\r\n+            }\r\n+            if (finded.size() > 1) {\r\n+                String msg = String.format(\"Not unique method for method name(%s) in class(%s), find %d methods.\",\r\n+                        methodName, clazz.getName(), finded.size());\r\n+                throw new IllegalStateException(msg);\r\n+            }\r\n+            method = finded.get(0);\r\n+        } else {\r\n+            Class<?>[] types = new Class<?>[parameterTypes.length];\r\n+            for (int i = 0; i < parameterTypes.length; i++) {\r\n+                types[i] = ReflectUtils.name2class(parameterTypes[i]);\r\n+            }\r\n+            method = clazz.getMethod(methodName, types);\r\n+\r\n+        }\r\n+        SIGNATURE_METHODS_CACHE.put(signature, method);\r\n+        return method;\r\n+    }\r\n+\r\n+    /**\r\n+     * @param clazz      Target class to find method\r\n+     * @param methodName Method signature, e.g.: method1(int, String). It is allowed to provide method name only, e.g.: method2\r\n+     * @return target method\r\n+     * @throws NoSuchMethodException\r\n+     * @throws ClassNotFoundException\r\n+     * @throws IllegalStateException  when multiple methods are found (overridden method when parameter info is not provided)\r\n+     * @deprecated Recommend {@link MethodUtils#findMethod(Class, String, Class[])}\r\n+     */\r\n+    @Deprecated\r\n+    public static Method findMethodByMethodName(Class<?> clazz, String methodName)\r\n+            throws NoSuchMethodException, ClassNotFoundException {\r\n+        return findMethodByMethodSignature(clazz, methodName, null);\r\n+    }\r\n+\r\n+    public static Constructor<?> findConstructor(Class<?> clazz, Class<?> paramType) throws NoSuchMethodException {\r\n+        Constructor<?> targetConstructor;\r\n+        try {\r\n+            targetConstructor = clazz.getConstructor(new Class<?>[]{paramType});\r\n+        } catch (NoSuchMethodException e) {\r\n+            targetConstructor = null;\r\n+            Constructor<?>[] constructors = clazz.getConstructors();\r\n+            for (Constructor<?> constructor : constructors) {\r\n+                if (Modifier.isPublic(constructor.getModifiers())\r\n+                        && constructor.getParameterTypes().length == 1\r\n+                        && constructor.getParameterTypes()[0].isAssignableFrom(paramType)) {\r\n+                    targetConstructor = constructor;\r\n+                    break;\r\n+                }\r\n+            }\r\n+            if (targetConstructor == null) {\r\n+                throw e;\r\n+            }\r\n+        }\r\n+        return targetConstructor;\r\n+    }\r\n+\r\n+    /**\r\n+     * Check if one object is the implementation for a given interface.\r\n+     * <p>\r\n+     * This method will not trigger classloading for the given interface, therefore it will not lead to error when\r\n+     * the given interface is not visible by the classloader\r\n+     *\r\n+     * @param obj                Object to examine\r\n+     * @param interfaceClazzName The given interface\r\n+     * @return true if the object implements the given interface, otherwise return false\r\n+     */\r\n+    public static boolean isInstance(Object obj, String interfaceClazzName) {\r\n+        for (Class<?> clazz = obj.getClass();\r\n+             clazz != null && !clazz.equals(Object.class);\r\n+             clazz = clazz.getSuperclass()) {\r\n+            Class<?>[] interfaces = clazz.getInterfaces();\r\n+            for (Class<?> itf : interfaces) {\r\n+                if (itf.getName().equals(interfaceClazzName)) {\r\n+                    return true;\r\n+                }\r\n+            }\r\n+        }\r\n+        return false;\r\n+    }\r\n+\r\n+    public static Object getEmptyObject(Class<?> returnType) {\r\n+        return getEmptyObject(returnType, new HashMap<>(), 0);\r\n+    }\r\n+\r\n+    private static Object getEmptyObject(Class<?> returnType, Map<Class<?>, Object> emptyInstances, int level) {\r\n+        if (level > 2) {\r\n+            return null;\r\n+        }\r\n+        if (returnType == null) {\r\n+            return null;\r\n+        }\r\n+        if (returnType == boolean.class || returnType == Boolean.class) {\r\n+            return false;\r\n+        }\r\n+        if (returnType == char.class || returnType == Character.class) {\r\n+            return '\\0';\r\n+        }\r\n+        if (returnType == byte.class || returnType == Byte.class) {\r\n+            return (byte) 0;\r\n+        }\r\n+        if (returnType == short.class || returnType == Short.class) {\r\n+            return (short) 0;\r\n+        }\r\n+        if (returnType == int.class || returnType == Integer.class) {\r\n+            return 0;\r\n+        }\r\n+        if (returnType == long.class || returnType == Long.class) {\r\n+            return 0L;\r\n+        }\r\n+        if (returnType == float.class || returnType == Float.class) {\r\n+            return 0F;\r\n+        }\r\n+        if (returnType == double.class || returnType == Double.class) {\r\n+            return 0D;\r\n+        }\r\n+        if (returnType.isArray()) {\r\n+            return Array.newInstance(returnType.getComponentType(), 0);\r\n+        }\r\n+        if (returnType.isAssignableFrom(ArrayList.class)) {\r\n+            return new ArrayList<>(0);\r\n+        }\r\n+        if (returnType.isAssignableFrom(HashSet.class)) {\r\n+            return new HashSet<>(0);\r\n+        }\r\n+        if (returnType.isAssignableFrom(HashMap.class)) {\r\n+            return new HashMap<>(0);\r\n+        }\r\n+        if (String.class.equals(returnType)) {\r\n+            return \"\";\r\n+        }\r\n+        if (returnType.isInterface()) {\r\n+            return null;\r\n+        }\r\n+\r\n+        try {\r\n+            Object value = emptyInstances.get(returnType);\r\n+            if (value == null) {\r\n+                value = returnType.getDeclaredConstructor().newInstance();\r\n+                emptyInstances.put(returnType, value);\r\n+            }\r\n+            Class<?> cls = value.getClass();\r\n+            while (cls != null && cls != Object.class) {\r\n+                Field[] fields = cls.getDeclaredFields();\r\n+                for (Field field : fields) {\r\n+                    if (field.isSynthetic()) {\r\n+                        continue;\r\n+                    }\r\n+                    Object property = getEmptyObject(field.getType(), emptyInstances, level + 1);\r\n+                    if (property != null) {\r\n+                        try {\r\n+                            ReflectUtils.makeAccessible(field);\r\n+                            field.set(value, property);\r\n+                        } catch (Throwable ignored) {\r\n+                        }\r\n+                    }\r\n+                }\r\n+                cls = cls.getSuperclass();\r\n+            }\r\n+            return value;\r\n+        } catch (Throwable e) {\r\n+            return null;\r\n+        }\r\n+    }\r\n+\r\n+    public static Object defaultReturn(Method m) {\r\n+        if (m.getReturnType().isPrimitive()) {\r\n+            return primitiveDefaults.get(m.getReturnType());\r\n+        } else {\r\n+            return null;\r\n+        }\r\n+    }\r\n+\r\n+    public static Object defaultReturn(Class<?> classType) {\r\n+        if (classType != null && classType.isPrimitive()) {\r\n+            return primitiveDefaults.get(classType);\r\n+        } else {\r\n+            return null;\r\n+        }\r\n+    }\r\n+\r\n+    public static boolean isBeanPropertyReadMethod(Method method) {\r\n+        return method != null\r\n+                && Modifier.isPublic(method.getModifiers())\r\n+                && !Modifier.isStatic(method.getModifiers())\r\n+                && method.getReturnType() != void.class\r\n+                && method.getDeclaringClass() != Object.class\r\n+                && method.getParameterTypes().length == 0\r\n+                && ((method.getName().startsWith(\"get\") && method.getName().length() > 3)\r\n+                || (method.getName().startsWith(\"is\") && method.getName().length() > 2));\r\n+    }\r\n+\r\n+    public static String getPropertyNameFromBeanReadMethod(Method method) {\r\n+        if (isBeanPropertyReadMethod(method)) {\r\n+            if (method.getName().startsWith(\"get\")) {\r\n+                return method.getName().substring(3, 4).toLowerCase()\r\n+                        + method.getName().substring(4);\r\n+            }\r\n+            if (method.getName().startsWith(\"is\")) {\r\n+                return method.getName().substring(2, 3).toLowerCase()\r\n+                        + method.getName().substring(3);\r\n+            }\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    public static boolean isBeanPropertyWriteMethod(Method method) {\r\n+        return method != null\r\n+                && Modifier.isPublic(method.getModifiers())\r\n+                && !Modifier.isStatic(method.getModifiers())\r\n+                && method.getDeclaringClass() != Object.class\r\n+                && method.getParameterTypes().length == 1\r\n+                && method.getName().startsWith(\"set\")\r\n+                && method.getName().length() > 3;\r\n+    }\r\n+\r\n+    public static String getPropertyNameFromBeanWriteMethod(Method method) {\r\n+        if (isBeanPropertyWriteMethod(method)) {\r\n+            return method.getName().substring(3, 4).toLowerCase()\r\n+                    + method.getName().substring(4);\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    public static boolean isPublicInstanceField(Field field) {\r\n+        return Modifier.isPublic(field.getModifiers())\r\n+                && !Modifier.isStatic(field.getModifiers())\r\n+                && !Modifier.isFinal(field.getModifiers())\r\n+                && !field.isSynthetic();\r\n+    }\r\n+\r\n+    public static Map<String, Field> getBeanPropertyFields(Class cl) {\r\n+        Map<String, Field> properties = new HashMap<String, Field>();\r\n+        for (; cl != null; cl = cl.getSuperclass()) {\r\n+            Field[] fields = cl.getDeclaredFields();\r\n+            for (Field field : fields) {\r\n+                if (Modifier.isTransient(field.getModifiers())\r\n+                        || Modifier.isStatic(field.getModifiers())) {\r\n+                    continue;\r\n+                }\r\n+                ReflectUtils.makeAccessible(field);\r\n+\r\n+                properties.put(field.getName(), field);\r\n+            }\r\n+        }\r\n+\r\n+        return properties;\r\n+    }\r\n+\r\n+    public static Map<String, Method> getBeanPropertyReadMethods(Class cl) {\r\n+        Map<String, Method> properties = new HashMap<String, Method>();\r\n+        for (; cl != null; cl = cl.getSuperclass()) {\r\n+            Method[] methods = cl.getDeclaredMethods();\r\n+            for (Method method : methods) {\r\n+                if (isBeanPropertyReadMethod(method)) {\r\n+                    ReflectUtils.makeAccessible(method);\r\n+                    String property = getPropertyNameFromBeanReadMethod(method);\r\n+                    properties.put(property, method);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        return properties;\r\n+    }\r\n+\r\n+    public static Type[] getReturnTypes(Method method) {\r\n+        Class<?> returnType = method.getReturnType();\r\n+        Type genericReturnType = method.getGenericReturnType();\r\n+        if (Future.class.isAssignableFrom(returnType)) {\r\n+            if (genericReturnType instanceof ParameterizedType) {\r\n+                Type actualArgType = ((ParameterizedType) genericReturnType).getActualTypeArguments()[0];\r\n+                if (actualArgType instanceof ParameterizedType) {\r\n+                    returnType = (Class<?>) ((ParameterizedType) actualArgType).getRawType();\r\n+                    genericReturnType = actualArgType;\r\n+                } else if (actualArgType instanceof TypeVariable) {\r\n+                    returnType = (Class<?>) ((TypeVariable<?>) actualArgType).getBounds()[0];\r\n+                    genericReturnType = actualArgType;\r\n+                } else {\r\n+                    returnType = (Class<?>) actualArgType;\r\n+                    genericReturnType = returnType;\r\n+                }\r\n+            } else {\r\n+                returnType = null;\r\n+                genericReturnType = null;\r\n+            }\r\n+        }\r\n+        return new Type[]{returnType, genericReturnType};\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the {@link Set} of {@link ParameterizedType}\r\n+     *\r\n+     * @param sourceClass the source {@link Class class}\r\n+     * @return non-null read-only {@link Set}\r\n+     * @since 2.7.5\r\n+     */\r\n+    public static Set<ParameterizedType> findParameterizedTypes(Class<?> sourceClass) {\r\n+        // Add Generic Interfaces\r\n+        List<Type> genericTypes = new LinkedList<>(asList(sourceClass.getGenericInterfaces()));\r\n+        // Add Generic Super Class\r\n+        genericTypes.add(sourceClass.getGenericSuperclass());\r\n+\r\n+        Set<ParameterizedType> parameterizedTypes = genericTypes.stream()\r\n+                .filter(type -> type instanceof ParameterizedType)// filter ParameterizedType\r\n+                .map(ParameterizedType.class::cast)  // cast to ParameterizedType\r\n+                .collect(Collectors.toSet());\r\n+\r\n+        if (parameterizedTypes.isEmpty()) { // If not found, try to search super types recursively\r\n+            genericTypes.stream()\r\n+                    .filter(type -> type instanceof Class)\r\n+                    .map(Class.class::cast)\r\n+                    .forEach(superClass -> parameterizedTypes.addAll(findParameterizedTypes(superClass)));\r\n+        }\r\n+\r\n+        return unmodifiableSet(parameterizedTypes);                     // build as a Set\r\n+\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the hierarchical types from the source {@link Class class} by specified {@link Class type}.\r\n+     *\r\n+     * @param sourceClass the source {@link Class class}\r\n+     * @param matchType   the type to match\r\n+     * @param <T>         the type to match\r\n+     * @return non-null read-only {@link Set}\r\n+     * @since 2.7.5\r\n+     */\r\n+    public static <T> Set<Class<T>> findHierarchicalTypes(Class<?> sourceClass, Class<T> matchType) {\r\n+        if (sourceClass == null) {\r\n+            return Collections.emptySet();\r\n+        }\r\n+\r\n+        Set<Class<T>> hierarchicalTypes = new LinkedHashSet<>();\r\n+\r\n+        if (matchType.isAssignableFrom(sourceClass)) {\r\n+            hierarchicalTypes.add((Class<T>) sourceClass);\r\n+        }\r\n+\r\n+        // Find all super classes\r\n+        hierarchicalTypes.addAll(findHierarchicalTypes(sourceClass.getSuperclass(), matchType));\r\n+\r\n+        return unmodifiableSet(hierarchicalTypes);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the value from the specified bean and its getter method.\r\n+     *\r\n+     * @param bean       the bean instance\r\n+     * @param methodName the name of getter\r\n+     * @param <T>        the type of property value\r\n+     * @return\r\n+     * @since 2.7.5\r\n+     */\r\n+    public static <T> T getProperty(Object bean, String methodName) {\r\n+        Class<?> beanClass = bean.getClass();\r\n+        BeanInfo beanInfo = null;\r\n+        T propertyValue = null;\r\n+\r\n+        try {\r\n+            beanInfo = Introspector.getBeanInfo(beanClass);\r\n+            propertyValue = (T) Stream.of(beanInfo.getMethodDescriptors())\r\n+                    .filter(methodDescriptor -> methodName.equals(methodDescriptor.getName()))\r\n+                    .findFirst()\r\n+                    .map(method -> {\r\n+                        try {\r\n+                            return method.getMethod().invoke(bean);\r\n+                        } catch (Exception e) {\r\n+                            //ignore\r\n+                        }\r\n+                        return null;\r\n+                    }).get();\r\n+        } catch (Exception e) {\r\n+\r\n+        }\r\n+        return propertyValue;\r\n+    }\r\n+\r\n+    /**\r\n+     * Resolve the types of the specified values\r\n+     *\r\n+     * @param values the values\r\n+     * @return If can't be resolved, return {@link ReflectUtils#EMPTY_CLASS_ARRAY empty class array}\r\n+     * @since 2.7.6\r\n+     */\r\n+    public static Class[] resolveTypes(Object... values) {\r\n+\r\n+        if (isEmpty(values)) {\r\n+            return EMPTY_CLASS_ARRAY;\r\n+        }\r\n+\r\n+        int size = values.length;\r\n+\r\n+        Class[] types = new Class[size];\r\n+\r\n+        for (int i = 0; i < size; i++) {\r\n+            Object value = values[i];\r\n+            types[i] = value == null ? null : value.getClass();\r\n+        }\r\n+\r\n+        return types;\r\n+    }\r\n+\r\n+    /**\r\n+     * Copy from org.springframework.util.ReflectionUtils.\r\n+     * Make the given method accessible, explicitly setting it accessible if\r\n+     * necessary. The {@code setAccessible(true)} method is only called\r\n+     * when actually necessary, to avoid unnecessary conflicts with a JVM\r\n+     * SecurityManager (if active).\r\n+     * @param method the method to make accessible\r\n+     * @see java.lang.reflect.Method#setAccessible\r\n+     */\r\n+    @SuppressWarnings(\"deprecation\")  // on JDK 9\r\n+    public static void makeAccessible(Method method) {\r\n+        if ((!Modifier.isPublic(method.getModifiers()) ||\r\n+                !Modifier.isPublic(method.getDeclaringClass().getModifiers())) && !method.isAccessible()) {\r\n+            method.setAccessible(true);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Copy from org.springframework.util.ReflectionUtils.\r\n+     * Make the given field accessible, explicitly setting it accessible if\r\n+     * necessary. The {@code setAccessible(true)} method is only called\r\n+     * when actually necessary, to avoid unnecessary conflicts with a JVM\r\n+     * SecurityManager (if active).\r\n+     * @param field the field to make accessible\r\n+     * @see java.lang.reflect.Field#setAccessible\r\n+     */\r\n+    @SuppressWarnings(\"deprecation\")  // on JDK 9\r\n+    public static void makeAccessible(Field field) {\r\n+        if ((!Modifier.isPublic(field.getModifiers()) ||\r\n+                !Modifier.isPublic(field.getDeclaringClass().getModifiers()) ||\r\n+                Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) {\r\n+            field.setAccessible(true);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Copy from org.springframework.util.ReflectionUtils.\r\n+     * Make the given constructor accessible, explicitly setting it accessible\r\n+     * if necessary. The {@code setAccessible(true)} method is only called\r\n+     * when actually necessary, to avoid unnecessary conflicts with a JVM\r\n+     * SecurityManager (if active).\r\n+     * @param ctor the constructor to make accessible\r\n+     * @see java.lang.reflect.Constructor#setAccessible\r\n+     */\r\n+    @SuppressWarnings(\"deprecation\")  // on JDK 9\r\n+    public static void makeAccessible(Constructor<?> ctor) {\r\n+        if ((!Modifier.isPublic(ctor.getModifiers()) ||\r\n+                !Modifier.isPublic(ctor.getDeclaringClass().getModifiers())) && !ctor.isAccessible()) {\r\n+            ctor.setAccessible(true);\r\n+        }\r\n+    }\r\n+\r\n+    public static boolean checkZeroArgConstructor(Class clazz) {\r\n+        try {\r\n+            clazz.getDeclaredConstructor();\r\n+            return true;\r\n+        } catch (NoSuchMethodException e) {\r\n+            return false;\r\n+        }\r\n+    }\r\n+\r\n+    public static boolean isJdk(Class clazz) {\r\n+        return clazz.getName().startsWith(\"java.\") || clazz.getName().startsWith(\"javax.\");\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/SerializeClassChecker.java", "source2": "org/apache/dubbo/common/utils/SerializeClassChecker.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,150 +1,150 @@\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.common.utils;\n-\n-import org.apache.dubbo.common.beanutil.JavaBeanSerializeUtil;\n-import org.apache.dubbo.common.constants.CommonConstants;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-\n-import java.io.IOException;\n-import java.util.Arrays;\n-import java.util.Locale;\n-import java.util.Set;\n-import java.util.concurrent.atomic.AtomicLong;\n-\n-public class SerializeClassChecker {\n-    private static final Logger logger = LoggerFactory.getLogger(SerializeClassChecker.class);\n-\n-    private static volatile SerializeClassChecker INSTANCE = null;\n-\n-    private final boolean BLOCK_ALL_CLASS_EXCEPT_ALLOW;\n-    private final Set<String> CLASS_DESERIALIZE_ALLOWED_SET = new ConcurrentHashSet<>();\n-    private final Set<String> CLASS_DESERIALIZE_BLOCKED_SET = new ConcurrentHashSet<>();\n-\n-    private final Object CACHE = new Object();\n-    private final LFUCache<String, Object> CLASS_ALLOW_LFU_CACHE = new LFUCache<>();\n-    private final LFUCache<String, Object> CLASS_BLOCK_LFU_CACHE = new LFUCache<>();\n-\n-    private final AtomicLong counter = new AtomicLong(0);\n-\n-    private SerializeClassChecker() {\n-        String blockAllClassExceptAllow = System.getProperty(CommonConstants.CLASS_DESERIALIZE_BLOCK_ALL, \"false\");\n-        BLOCK_ALL_CLASS_EXCEPT_ALLOW = Boolean.parseBoolean(blockAllClassExceptAllow);\n-\n-        String[] lines;\n-        try {\n-            ClassLoader classLoader = ClassUtils.getClassLoader(JavaBeanSerializeUtil.class);\n-            if (classLoader != null) {\n-                lines = IOUtils.readLines(classLoader.getResourceAsStream(CommonConstants.SERIALIZE_BLOCKED_LIST_FILE_PATH));\n-            } else {\n-                lines = IOUtils.readLines(ClassLoader.getSystemResourceAsStream(CommonConstants.SERIALIZE_BLOCKED_LIST_FILE_PATH));\n-            }\n-            for (String line : lines) {\n-                line = line.trim();\n-                if (StringUtils.isEmpty(line) || line.startsWith(\"#\")) {\n-                    continue;\n-                }\n-                CLASS_DESERIALIZE_BLOCKED_SET.add(line);\n-            }\n-\n-        } catch (IOException e) {\n-            logger.error(\"Failed to load blocked class list! Will ignore default blocked list.\", e);\n-        }\n-\n-        String allowedClassList = System.getProperty(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST, \"\").trim().toLowerCase(Locale.ROOT);\n-        String blockedClassList = System.getProperty(CommonConstants.CLASS_DESERIALIZE_BLOCKED_LIST, \"\").trim().toLowerCase(Locale.ROOT);\n-\n-        if (StringUtils.isNotEmpty(allowedClassList)) {\n-            String[] classStrings = allowedClassList.trim().split(\",\");\n-            CLASS_DESERIALIZE_ALLOWED_SET.addAll(Arrays.asList(classStrings));\n-        }\n-\n-        if (StringUtils.isNotEmpty(blockedClassList)) {\n-            String[] classStrings = blockedClassList.trim().split(\",\");\n-            CLASS_DESERIALIZE_BLOCKED_SET.addAll(Arrays.asList(classStrings));\n-        }\n-\n-    }\n-\n-    public static SerializeClassChecker getInstance() {\n-        if (INSTANCE == null) {\n-            synchronized (SerializeClassChecker.class) {\n-                if (INSTANCE == null) {\n-                    INSTANCE = new SerializeClassChecker();\n-                }\n-            }\n-        }\n-        return INSTANCE;\n-    }\n-\n-    /**\n-     * For ut only\n-     */\n-    @Deprecated\n-    protected static void clearInstance() {\n-        INSTANCE = null;\n-    }\n-\n-    /**\n-     * Check if a class is in block list, using prefix match\n-     *\n-     * @throws IllegalArgumentException if class is blocked\n-     * @param name class name ( all are convert to lower case )\n-     */\n-    public void validateClass(String name) {\n-        name = name.toLowerCase(Locale.ROOT);\n-        if (CACHE == CLASS_ALLOW_LFU_CACHE.get(name)) {\n-            return;\n-        }\n-\n-        if (CACHE == CLASS_BLOCK_LFU_CACHE.get(name)) {\n-            error(name);\n-        }\n-\n-        for (String allowedPrefix : CLASS_DESERIALIZE_ALLOWED_SET) {\n-            if (name.startsWith(allowedPrefix)) {\n-                CLASS_ALLOW_LFU_CACHE.put(name, CACHE);\n-                return;\n-            }\n-        }\n-\n-        for (String blockedPrefix : CLASS_DESERIALIZE_BLOCKED_SET) {\n-            if (BLOCK_ALL_CLASS_EXCEPT_ALLOW || name.startsWith(blockedPrefix)) {\n-                CLASS_BLOCK_LFU_CACHE.put(name, CACHE);\n-                error(name);\n-            }\n-        }\n-\n-        CLASS_ALLOW_LFU_CACHE.put(name, CACHE);\n-    }\n-\n-    private void error(String name) {\n-        String notice = \"Trigger the safety barrier! \" +\n-                \"Catch not allowed serialize class. \" +\n-                \"Class name: \" + name + \" . \" +\n-                \"This means currently maybe being attacking by others.\" +\n-                \"If you are sure this is a mistake, \" +\n-                \"please add this class name to `\" + CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST +\n-                \"` as a system environment property.\";\n-        if (counter.incrementAndGet() % 1000 == 0 || counter.get() < 100) {\n-            logger.error(notice);\n-        }\n-        throw new IllegalArgumentException(notice);\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.common.utils;\r\n+\r\n+import org.apache.dubbo.common.beanutil.JavaBeanSerializeUtil;\r\n+import org.apache.dubbo.common.constants.CommonConstants;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+\r\n+import java.io.IOException;\r\n+import java.util.Arrays;\r\n+import java.util.Locale;\r\n+import java.util.Set;\r\n+import java.util.concurrent.atomic.AtomicLong;\r\n+\r\n+public class SerializeClassChecker {\r\n+    private static final Logger logger = LoggerFactory.getLogger(SerializeClassChecker.class);\r\n+\r\n+    private static volatile SerializeClassChecker INSTANCE = null;\r\n+\r\n+    private final boolean BLOCK_ALL_CLASS_EXCEPT_ALLOW;\r\n+    private final Set<String> CLASS_DESERIALIZE_ALLOWED_SET = new ConcurrentHashSet<>();\r\n+    private final Set<String> CLASS_DESERIALIZE_BLOCKED_SET = new ConcurrentHashSet<>();\r\n+\r\n+    private final Object CACHE = new Object();\r\n+    private final LFUCache<String, Object> CLASS_ALLOW_LFU_CACHE = new LFUCache<>();\r\n+    private final LFUCache<String, Object> CLASS_BLOCK_LFU_CACHE = new LFUCache<>();\r\n+\r\n+    private final AtomicLong counter = new AtomicLong(0);\r\n+\r\n+    private SerializeClassChecker() {\r\n+        String blockAllClassExceptAllow = System.getProperty(CommonConstants.CLASS_DESERIALIZE_BLOCK_ALL, \"false\");\r\n+        BLOCK_ALL_CLASS_EXCEPT_ALLOW = Boolean.parseBoolean(blockAllClassExceptAllow);\r\n+\r\n+        String[] lines;\r\n+        try {\r\n+            ClassLoader classLoader = ClassUtils.getClassLoader(JavaBeanSerializeUtil.class);\r\n+            if (classLoader != null) {\r\n+                lines = IOUtils.readLines(classLoader.getResourceAsStream(CommonConstants.SERIALIZE_BLOCKED_LIST_FILE_PATH));\r\n+            } else {\r\n+                lines = IOUtils.readLines(ClassLoader.getSystemResourceAsStream(CommonConstants.SERIALIZE_BLOCKED_LIST_FILE_PATH));\r\n+            }\r\n+            for (String line : lines) {\r\n+                line = line.trim();\r\n+                if (StringUtils.isEmpty(line) || line.startsWith(\"#\")) {\r\n+                    continue;\r\n+                }\r\n+                CLASS_DESERIALIZE_BLOCKED_SET.add(line);\r\n+            }\r\n+\r\n+        } catch (IOException e) {\r\n+            logger.error(\"Failed to load blocked class list! Will ignore default blocked list.\", e);\r\n+        }\r\n+\r\n+        String allowedClassList = System.getProperty(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST, \"\").trim().toLowerCase(Locale.ROOT);\r\n+        String blockedClassList = System.getProperty(CommonConstants.CLASS_DESERIALIZE_BLOCKED_LIST, \"\").trim().toLowerCase(Locale.ROOT);\r\n+\r\n+        if (StringUtils.isNotEmpty(allowedClassList)) {\r\n+            String[] classStrings = allowedClassList.trim().split(\",\");\r\n+            CLASS_DESERIALIZE_ALLOWED_SET.addAll(Arrays.asList(classStrings));\r\n+        }\r\n+\r\n+        if (StringUtils.isNotEmpty(blockedClassList)) {\r\n+            String[] classStrings = blockedClassList.trim().split(\",\");\r\n+            CLASS_DESERIALIZE_BLOCKED_SET.addAll(Arrays.asList(classStrings));\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    public static SerializeClassChecker getInstance() {\r\n+        if (INSTANCE == null) {\r\n+            synchronized (SerializeClassChecker.class) {\r\n+                if (INSTANCE == null) {\r\n+                    INSTANCE = new SerializeClassChecker();\r\n+                }\r\n+            }\r\n+        }\r\n+        return INSTANCE;\r\n+    }\r\n+\r\n+    /**\r\n+     * For ut only\r\n+     */\r\n+    @Deprecated\r\n+    protected static void clearInstance() {\r\n+        INSTANCE = null;\r\n+    }\r\n+\r\n+    /**\r\n+     * Check if a class is in block list, using prefix match\r\n+     *\r\n+     * @throws IllegalArgumentException if class is blocked\r\n+     * @param name class name ( all are convert to lower case )\r\n+     */\r\n+    public void validateClass(String name) {\r\n+        name = name.toLowerCase(Locale.ROOT);\r\n+        if (CACHE == CLASS_ALLOW_LFU_CACHE.get(name)) {\r\n+            return;\r\n+        }\r\n+\r\n+        if (CACHE == CLASS_BLOCK_LFU_CACHE.get(name)) {\r\n+            error(name);\r\n+        }\r\n+\r\n+        for (String allowedPrefix : CLASS_DESERIALIZE_ALLOWED_SET) {\r\n+            if (name.startsWith(allowedPrefix)) {\r\n+                CLASS_ALLOW_LFU_CACHE.put(name, CACHE);\r\n+                return;\r\n+            }\r\n+        }\r\n+\r\n+        for (String blockedPrefix : CLASS_DESERIALIZE_BLOCKED_SET) {\r\n+            if (BLOCK_ALL_CLASS_EXCEPT_ALLOW || name.startsWith(blockedPrefix)) {\r\n+                CLASS_BLOCK_LFU_CACHE.put(name, CACHE);\r\n+                error(name);\r\n+            }\r\n+        }\r\n+\r\n+        CLASS_ALLOW_LFU_CACHE.put(name, CACHE);\r\n+    }\r\n+\r\n+    private void error(String name) {\r\n+        String notice = \"Trigger the safety barrier! \" +\r\n+                \"Catch not allowed serialize class. \" +\r\n+                \"Class name: \" + name + \" . \" +\r\n+                \"This means currently maybe being attacking by others.\" +\r\n+                \"If you are sure this is a mistake, \" +\r\n+                \"please add this class name to `\" + CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST +\r\n+                \"` as a system environment property.\";\r\n+        if (counter.incrementAndGet() % 1000 == 0 || counter.get() < 100) {\r\n+            logger.error(notice);\r\n+        }\r\n+        throw new IllegalArgumentException(notice);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/ServiceAnnotationResolver.java", "source2": "org/apache/dubbo/common/utils/ServiceAnnotationResolver.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,132 +1,132 @@\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.common.utils;\n-\n-import org.apache.dubbo.config.annotation.DubboService;\n-import org.apache.dubbo.config.annotation.Service;\n-\n-import java.lang.annotation.Annotation;\n-import java.util.List;\n-\n-import static java.lang.String.format;\n-import static java.util.Arrays.asList;\n-import static java.util.Collections.unmodifiableList;\n-import static org.apache.dubbo.common.utils.AnnotationUtils.getAttribute;\n-import static org.apache.dubbo.common.utils.ArrayUtils.isNotEmpty;\n-import static org.apache.dubbo.common.utils.ClassUtils.isGenericClass;\n-import static org.apache.dubbo.common.utils.ClassUtils.resolveClass;\n-import static org.apache.dubbo.common.utils.StringUtils.isEmpty;\n-\n-/**\n- * The resolver class for {@link Service @Service}\n- *\n- * @see Service\n- * @see com.alibaba.dubbo.config.annotation.Service\n- * @since 2.7.6\n- */\n-public class ServiceAnnotationResolver {\n-\n-    /**\n-     * The annotation {@link Class classes} of Dubbo Service (read-only)\n-     *\n-     * @since 2.7.9\n-     */\n-    public static List<Class<? extends Annotation>> SERVICE_ANNOTATION_CLASSES = unmodifiableList(asList(DubboService.class, Service.class, com.alibaba.dubbo.config.annotation.Service.class));\n-\n-    private final Annotation serviceAnnotation;\n-\n-    private final Class<?> serviceType;\n-\n-    public ServiceAnnotationResolver(Class<?> serviceType) throws IllegalArgumentException {\n-        this.serviceType = serviceType;\n-        this.serviceAnnotation = getServiceAnnotation(serviceType);\n-    }\n-\n-    private Annotation getServiceAnnotation(Class<?> serviceType) {\n-\n-        Annotation serviceAnnotation = null;\n-\n-        for (Class<? extends Annotation> serviceAnnotationClass : SERVICE_ANNOTATION_CLASSES) {\n-            serviceAnnotation = serviceType.getAnnotation(serviceAnnotationClass);\n-            if (serviceAnnotation != null) {\n-                break;\n-            }\n-        }\n-\n-        if (serviceAnnotation == null) {\n-            throw new IllegalArgumentException(format(\"Any annotation of [%s] can't be annotated in the service type[%s].\",\n-                    SERVICE_ANNOTATION_CLASSES,\n-                    serviceType.getName()\n-            ));\n-        }\n-\n-        return serviceAnnotation;\n-    }\n-\n-    /**\n-     * Resolve the class name of interface\n-     *\n-     * @return if not found, return <code>null</code>\n-     */\n-    public String resolveInterfaceClassName() {\n-\n-        Class interfaceClass = null;\n-        // first, try to get the value from \"interfaceName\" attribute\n-        String interfaceName = resolveAttribute(\"interfaceName\");\n-\n-        if (isEmpty(interfaceName)) { // If not found, try \"interfaceClass\"\n-            interfaceClass = resolveAttribute(\"interfaceClass\");\n-        } else {\n-            interfaceClass = resolveClass(interfaceName, getClass().getClassLoader());\n-        }\n-\n-        if (isGenericClass(interfaceClass)) {\n-            interfaceName = interfaceClass.getName();\n-        } else {\n-            interfaceName = null;\n-        }\n-\n-        if (isEmpty(interfaceName)) { // If not fund, try to get the first interface from the service type\n-            Class[] interfaces = serviceType.getInterfaces();\n-            if (isNotEmpty(interfaces)) {\n-                interfaceName = interfaces[0].getName();\n-            }\n-        }\n-\n-        return interfaceName;\n-    }\n-\n-    public String resolveVersion() {\n-        return resolveAttribute(\"version\");\n-    }\n-\n-    public String resolveGroup() {\n-        return resolveAttribute(\"group\");\n-    }\n-\n-    private <T> T resolveAttribute(String attributeName) {\n-        return getAttribute(serviceAnnotation, attributeName);\n-    }\n-\n-    public Annotation getServiceAnnotation() {\n-        return serviceAnnotation;\n-    }\n-\n-    public Class<?> getServiceType() {\n-        return serviceType;\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.common.utils;\r\n+\r\n+import org.apache.dubbo.config.annotation.DubboService;\r\n+import org.apache.dubbo.config.annotation.Service;\r\n+\r\n+import java.lang.annotation.Annotation;\r\n+import java.util.List;\r\n+\r\n+import static java.lang.String.format;\r\n+import static java.util.Arrays.asList;\r\n+import static java.util.Collections.unmodifiableList;\r\n+import static org.apache.dubbo.common.utils.AnnotationUtils.getAttribute;\r\n+import static org.apache.dubbo.common.utils.ArrayUtils.isNotEmpty;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.isGenericClass;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.resolveClass;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isEmpty;\r\n+\r\n+/**\r\n+ * The resolver class for {@link Service @Service}\r\n+ *\r\n+ * @see Service\r\n+ * @see com.alibaba.dubbo.config.annotation.Service\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ServiceAnnotationResolver {\r\n+\r\n+    /**\r\n+     * The annotation {@link Class classes} of Dubbo Service (read-only)\r\n+     *\r\n+     * @since 2.7.9\r\n+     */\r\n+    public static List<Class<? extends Annotation>> SERVICE_ANNOTATION_CLASSES = unmodifiableList(asList(DubboService.class, Service.class, com.alibaba.dubbo.config.annotation.Service.class));\r\n+\r\n+    private final Annotation serviceAnnotation;\r\n+\r\n+    private final Class<?> serviceType;\r\n+\r\n+    public ServiceAnnotationResolver(Class<?> serviceType) throws IllegalArgumentException {\r\n+        this.serviceType = serviceType;\r\n+        this.serviceAnnotation = getServiceAnnotation(serviceType);\r\n+    }\r\n+\r\n+    private Annotation getServiceAnnotation(Class<?> serviceType) {\r\n+\r\n+        Annotation serviceAnnotation = null;\r\n+\r\n+        for (Class<? extends Annotation> serviceAnnotationClass : SERVICE_ANNOTATION_CLASSES) {\r\n+            serviceAnnotation = serviceType.getAnnotation(serviceAnnotationClass);\r\n+            if (serviceAnnotation != null) {\r\n+                break;\r\n+            }\r\n+        }\r\n+\r\n+        if (serviceAnnotation == null) {\r\n+            throw new IllegalArgumentException(format(\"Any annotation of [%s] can't be annotated in the service type[%s].\",\r\n+                    SERVICE_ANNOTATION_CLASSES,\r\n+                    serviceType.getName()\r\n+            ));\r\n+        }\r\n+\r\n+        return serviceAnnotation;\r\n+    }\r\n+\r\n+    /**\r\n+     * Resolve the class name of interface\r\n+     *\r\n+     * @return if not found, return <code>null</code>\r\n+     */\r\n+    public String resolveInterfaceClassName() {\r\n+\r\n+        Class interfaceClass = null;\r\n+        // first, try to get the value from \"interfaceName\" attribute\r\n+        String interfaceName = resolveAttribute(\"interfaceName\");\r\n+\r\n+        if (isEmpty(interfaceName)) { // If not found, try \"interfaceClass\"\r\n+            interfaceClass = resolveAttribute(\"interfaceClass\");\r\n+        } else {\r\n+            interfaceClass = resolveClass(interfaceName, getClass().getClassLoader());\r\n+        }\r\n+\r\n+        if (isGenericClass(interfaceClass)) {\r\n+            interfaceName = interfaceClass.getName();\r\n+        } else {\r\n+            interfaceName = null;\r\n+        }\r\n+\r\n+        if (isEmpty(interfaceName)) { // If not fund, try to get the first interface from the service type\r\n+            Class[] interfaces = serviceType.getInterfaces();\r\n+            if (isNotEmpty(interfaces)) {\r\n+                interfaceName = interfaces[0].getName();\r\n+            }\r\n+        }\r\n+\r\n+        return interfaceName;\r\n+    }\r\n+\r\n+    public String resolveVersion() {\r\n+        return resolveAttribute(\"version\");\r\n+    }\r\n+\r\n+    public String resolveGroup() {\r\n+        return resolveAttribute(\"group\");\r\n+    }\r\n+\r\n+    private <T> T resolveAttribute(String attributeName) {\r\n+        return getAttribute(serviceAnnotation, attributeName);\r\n+    }\r\n+\r\n+    public Annotation getServiceAnnotation() {\r\n+        return serviceAnnotation;\r\n+    }\r\n+\r\n+    public Class<?> getServiceType() {\r\n+        return serviceType;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/Stack.java", "source2": "org/apache/dubbo/common/utils/Stack.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,143 +1,143 @@\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.common.utils;\n-\n-import java.util.ArrayList;\n-import java.util.EmptyStackException;\n-import java.util.List;\n-\n-/**\n- * Stack.\n- */\n-\n-public class Stack<E> {\n-    private int mSize = 0;\n-\n-    private List<E> mElements = new ArrayList<E>();\n-\n-    public Stack() {\n-    }\n-\n-    /**\n-     * push.\n-     *\n-     * @param ele\n-     */\n-    public void push(E ele) {\n-        if (mElements.size() > mSize) {\n-            mElements.set(mSize, ele);\n-        } else {\n-            mElements.add(ele);\n-        }\n-        mSize++;\n-    }\n-\n-    /**\n-     * pop.\n-     *\n-     * @return the last element.\n-     */\n-    public E pop() {\n-        if (mSize == 0) {\n-            throw new EmptyStackException();\n-        }\n-        return mElements.set(--mSize, null);\n-    }\n-\n-    /**\n-     * peek.\n-     *\n-     * @return the last element.\n-     */\n-    public E peek() {\n-        if (mSize == 0) {\n-            throw new EmptyStackException();\n-        }\n-        return mElements.get(mSize - 1);\n-    }\n-\n-    /**\n-     * get.\n-     *\n-     * @param index index.\n-     * @return element.\n-     */\n-    public E get(int index) {\n-        if (index >= mSize || index + mSize < 0) {\n-            throw new IndexOutOfBoundsException(\"Index: \" + index + \", Size: \" + mSize);\n-        }\n-\n-        return index < 0 ? mElements.get(index + mSize) : mElements.get(index);\n-    }\n-\n-    /**\n-     * set.\n-     *\n-     * @param index index.\n-     * @param value element.\n-     * @return old element.\n-     */\n-    public E set(int index, E value) {\n-        if (index >= mSize || index + mSize < 0) {\n-            throw new IndexOutOfBoundsException(\"Index: \" + index + \", Size: \" + mSize);\n-        }\n-\n-        return mElements.set(index < 0 ? index + mSize : index, value);\n-    }\n-\n-    /**\n-     * remove.\n-     *\n-     * @param index\n-     * @return element\n-     */\n-    public E remove(int index) {\n-        if (index >= mSize || index + mSize < 0) {\n-            throw new IndexOutOfBoundsException(\"Index: \" + index + \", Size: \" + mSize);\n-        }\n-\n-        E ret = mElements.remove(index < 0 ? index + mSize : index);\n-        mSize--;\n-        return ret;\n-    }\n-\n-    /**\n-     * get stack size.\n-     *\n-     * @return size.\n-     */\n-    public int size() {\n-        return mSize;\n-    }\n-\n-    /**\n-     * is empty.\n-     *\n-     * @return empty or not.\n-     */\n-    public boolean isEmpty() {\n-        return mSize == 0;\n-    }\n-\n-    /**\n-     * clear stack.\n-     */\n-    public void clear() {\n-        mSize = 0;\n-        mElements.clear();\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.common.utils;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.EmptyStackException;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * Stack.\r\n+ */\r\n+\r\n+public class Stack<E> {\r\n+    private int mSize = 0;\r\n+\r\n+    private List<E> mElements = new ArrayList<E>();\r\n+\r\n+    public Stack() {\r\n+    }\r\n+\r\n+    /**\r\n+     * push.\r\n+     *\r\n+     * @param ele\r\n+     */\r\n+    public void push(E ele) {\r\n+        if (mElements.size() > mSize) {\r\n+            mElements.set(mSize, ele);\r\n+        } else {\r\n+            mElements.add(ele);\r\n+        }\r\n+        mSize++;\r\n+    }\r\n+\r\n+    /**\r\n+     * pop.\r\n+     *\r\n+     * @return the last element.\r\n+     */\r\n+    public E pop() {\r\n+        if (mSize == 0) {\r\n+            throw new EmptyStackException();\r\n+        }\r\n+        return mElements.set(--mSize, null);\r\n+    }\r\n+\r\n+    /**\r\n+     * peek.\r\n+     *\r\n+     * @return the last element.\r\n+     */\r\n+    public E peek() {\r\n+        if (mSize == 0) {\r\n+            throw new EmptyStackException();\r\n+        }\r\n+        return mElements.get(mSize - 1);\r\n+    }\r\n+\r\n+    /**\r\n+     * get.\r\n+     *\r\n+     * @param index index.\r\n+     * @return element.\r\n+     */\r\n+    public E get(int index) {\r\n+        if (index >= mSize || index + mSize < 0) {\r\n+            throw new IndexOutOfBoundsException(\"Index: \" + index + \", Size: \" + mSize);\r\n+        }\r\n+\r\n+        return index < 0 ? mElements.get(index + mSize) : mElements.get(index);\r\n+    }\r\n+\r\n+    /**\r\n+     * set.\r\n+     *\r\n+     * @param index index.\r\n+     * @param value element.\r\n+     * @return old element.\r\n+     */\r\n+    public E set(int index, E value) {\r\n+        if (index >= mSize || index + mSize < 0) {\r\n+            throw new IndexOutOfBoundsException(\"Index: \" + index + \", Size: \" + mSize);\r\n+        }\r\n+\r\n+        return mElements.set(index < 0 ? index + mSize : index, value);\r\n+    }\r\n+\r\n+    /**\r\n+     * remove.\r\n+     *\r\n+     * @param index\r\n+     * @return element\r\n+     */\r\n+    public E remove(int index) {\r\n+        if (index >= mSize || index + mSize < 0) {\r\n+            throw new IndexOutOfBoundsException(\"Index: \" + index + \", Size: \" + mSize);\r\n+        }\r\n+\r\n+        E ret = mElements.remove(index < 0 ? index + mSize : index);\r\n+        mSize--;\r\n+        return ret;\r\n+    }\r\n+\r\n+    /**\r\n+     * get stack size.\r\n+     *\r\n+     * @return size.\r\n+     */\r\n+    public int size() {\r\n+        return mSize;\r\n+    }\r\n+\r\n+    /**\r\n+     * is empty.\r\n+     *\r\n+     * @return empty or not.\r\n+     */\r\n+    public boolean isEmpty() {\r\n+        return mSize == 0;\r\n+    }\r\n+\r\n+    /**\r\n+     * clear stack.\r\n+     */\r\n+    public void clear() {\r\n+        mSize = 0;\r\n+        mElements.clear();\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/common/utils/StringConstantFieldValuePredicate.java", "source2": "org/apache/dubbo/common/utils/StringConstantFieldValuePredicate.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,67 +1,67 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.common.utils;\n-\n-import java.lang.reflect.Field;\n-import java.util.Set;\n-import java.util.function.Predicate;\n-import java.util.stream.Collectors;\n-import java.util.stream.Stream;\n-\n-import static java.lang.reflect.Modifier.isFinal;\n-import static java.lang.reflect.Modifier.isPublic;\n-import static java.lang.reflect.Modifier.isStatic;\n-import static org.apache.dubbo.common.utils.FieldUtils.getFieldValue;\n-\n-/**\n- * The constant field value {@link Predicate} for the specified {@link Class}\n- *\n- * @see Predicate\n- * @since 2.7.8\n- */\n-public class StringConstantFieldValuePredicate implements Predicate<String> {\n-\n-    private final Set<String> constantFieldValues;\n-\n-    public StringConstantFieldValuePredicate(Class<?> targetClass) {\n-        this.constantFieldValues = getConstantFieldValues(targetClass);\n-    }\n-\n-    public static Predicate<String> of(Class<?> targetClass) {\n-        return new StringConstantFieldValuePredicate(targetClass);\n-    }\n-\n-    private Set<String> getConstantFieldValues(Class<?> targetClass) {\n-        return Stream.of(targetClass.getFields())\n-                .filter(f -> isStatic(f.getModifiers()))         // static\n-                .filter(f -> isPublic(f.getModifiers()))         // public\n-                .filter(f -> isFinal(f.getModifiers()))          // final\n-                .map(this::getConstantValue)\n-                .filter(v -> v instanceof String)                // filters String type\n-                .map(String.class::cast)                         // Casts String type\n-                .collect(Collectors.toSet());\n-    }\n-\n-    @Override\n-    public boolean test(String s) {\n-        return constantFieldValues.contains(s);\n-    }\n-\n-    private Object getConstantValue(Field field) {\n-        return getFieldValue(null, field);\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.common.utils;\r\n+\r\n+import java.lang.reflect.Field;\r\n+import java.util.Set;\r\n+import java.util.function.Predicate;\r\n+import java.util.stream.Collectors;\r\n+import java.util.stream.Stream;\r\n+\r\n+import static java.lang.reflect.Modifier.isFinal;\r\n+import static java.lang.reflect.Modifier.isPublic;\r\n+import static java.lang.reflect.Modifier.isStatic;\r\n+import static org.apache.dubbo.common.utils.FieldUtils.getFieldValue;\r\n+\r\n+/**\r\n+ * The constant field value {@link Predicate} for the specified {@link Class}\r\n+ *\r\n+ * @see Predicate\r\n+ * @since 2.7.8\r\n+ */\r\n+public class StringConstantFieldValuePredicate implements Predicate<String> {\r\n+\r\n+    private final Set<String> constantFieldValues;\r\n+\r\n+    public StringConstantFieldValuePredicate(Class<?> targetClass) {\r\n+        this.constantFieldValues = getConstantFieldValues(targetClass);\r\n+    }\r\n+\r\n+    public static Predicate<String> of(Class<?> targetClass) {\r\n+        return new StringConstantFieldValuePredicate(targetClass);\r\n+    }\r\n+\r\n+    private Set<String> getConstantFieldValues(Class<?> targetClass) {\r\n+        return Stream.of(targetClass.getFields())\r\n+                .filter(f -> isStatic(f.getModifiers()))         // static\r\n+                .filter(f -> isPublic(f.getModifiers()))         // public\r\n+                .filter(f -> isFinal(f.getModifiers()))          // final\r\n+                .map(this::getConstantValue)\r\n+                .filter(v -> v instanceof String)                // filters String type\r\n+                .map(String.class::cast)                         // Casts String type\r\n+                .collect(Collectors.toSet());\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean test(String s) {\r\n+        return constantFieldValues.contains(s);\r\n+    }\r\n+\r\n+    private Object getConstantValue(Field field) {\r\n+        return getFieldValue(null, field);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/TypeUtils.java", "source2": "org/apache/dubbo/common/utils/TypeUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,224 +1,224 @@\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.common.utils;\n-\n-import java.lang.reflect.ParameterizedType;\n-import java.lang.reflect.Type;\n-import java.util.Arrays;\n-import java.util.Collection;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Objects;\n-import java.util.Set;\n-import java.util.function.Predicate;\n-import java.util.stream.Collectors;\n-\n-import static java.util.Arrays.asList;\n-import static java.util.Collections.emptyList;\n-import static java.util.Collections.unmodifiableList;\n-import static java.util.stream.Collectors.toList;\n-import static java.util.stream.Collectors.toSet;\n-import static java.util.stream.StreamSupport.stream;\n-import static org.apache.dubbo.common.function.Predicates.and;\n-import static org.apache.dubbo.common.function.Streams.filterAll;\n-import static org.apache.dubbo.common.function.Streams.filterList;\n-import static org.apache.dubbo.common.utils.ClassUtils.getAllInterfaces;\n-import static org.apache.dubbo.common.utils.ClassUtils.getAllSuperClasses;\n-import static org.apache.dubbo.common.utils.ClassUtils.isAssignableFrom;\n-\n-/**\n- * The utilities class for {@link Type}\n- *\n- * @since 2.7.6\n- */\n-public interface TypeUtils {\n-\n-    Predicate<Class<?>> NON_OBJECT_TYPE_FILTER = t -> !Objects.equals(Object.class, t);\n-\n-    static boolean isParameterizedType(Type type) {\n-        return type instanceof ParameterizedType;\n-    }\n-\n-    static Type getRawType(Type type) {\n-        if (isParameterizedType(type)) {\n-            return ((ParameterizedType) type).getRawType();\n-        } else {\n-            return type;\n-        }\n-    }\n-\n-    static Class<?> getRawClass(Type type) {\n-        Type rawType = getRawType(type);\n-        if (isClass(rawType)) {\n-            return (Class) rawType;\n-        }\n-        return null;\n-    }\n-\n-    static boolean isClass(Type type) {\n-        return type instanceof Class;\n-    }\n-\n-    static <T> Class<T> findActualTypeArgument(Type type, Class<?> interfaceClass, int index) {\n-        return (Class<T>) findActualTypeArguments(type, interfaceClass).get(index);\n-    }\n-\n-    static List<Class<?>> findActualTypeArguments(Type type, Class<?> interfaceClass) {\n-\n-        List<Class<?>> actualTypeArguments = new LinkedList<>();\n-\n-        getAllGenericTypes(type, t -> isAssignableFrom(interfaceClass, getRawClass(t)))\n-                .forEach(parameterizedType -> {\n-                    Class<?> rawClass = getRawClass(parameterizedType);\n-                    Type[] typeArguments = parameterizedType.getActualTypeArguments();\n-                    for (int i = 0; i < typeArguments.length; i++) {\n-                        Type typeArgument = typeArguments[i];\n-                        if (typeArgument instanceof Class) {\n-                            actualTypeArguments.add(i, (Class) typeArgument);\n-                        }\n-                    }\n-                    Class<?> superClass = rawClass.getSuperclass();\n-                    if (superClass != null) {\n-                        actualTypeArguments.addAll(findActualTypeArguments(superClass, interfaceClass));\n-                    }\n-                });\n-\n-        return unmodifiableList(actualTypeArguments);\n-    }\n-\n-    /**\n-     * Get the specified types' generic types(including super classes and interfaces) that are assignable from {@link ParameterizedType} interface\n-     *\n-     * @param type        the specified type\n-     * @param typeFilters one or more {@link Predicate}s to filter the {@link ParameterizedType} instance\n-     * @return non-null read-only {@link List}\n-     */\n-    static List<ParameterizedType> getGenericTypes(Type type, Predicate<ParameterizedType>... typeFilters) {\n-\n-        Class<?> rawClass = getRawClass(type);\n-\n-        if (rawClass == null) {\n-            return emptyList();\n-        }\n-\n-        List<Type> genericTypes = new LinkedList<>();\n-\n-        genericTypes.add(rawClass.getGenericSuperclass());\n-        genericTypes.addAll(asList(rawClass.getGenericInterfaces()));\n-\n-        return unmodifiableList(\n-                filterList(genericTypes, TypeUtils::isParameterizedType)\n-                        .stream()\n-                        .map(ParameterizedType.class::cast)\n-                        .filter(and(typeFilters))\n-                        .collect(toList())\n-        );\n-    }\n-\n-    /**\n-     * Get all generic types(including super classes and interfaces) that are assignable from {@link ParameterizedType} interface\n-     *\n-     * @param type        the specified type\n-     * @param typeFilters one or more {@link Predicate}s to filter the {@link ParameterizedType} instance\n-     * @return non-null read-only {@link List}\n-     */\n-    static List<ParameterizedType> getAllGenericTypes(Type type, Predicate<ParameterizedType>... typeFilters) {\n-        List<ParameterizedType> allGenericTypes = new LinkedList<>();\n-        // Add generic super classes\n-        allGenericTypes.addAll(getAllGenericSuperClasses(type, typeFilters));\n-        // Add generic super interfaces\n-        allGenericTypes.addAll(getAllGenericInterfaces(type, typeFilters));\n-        // wrap unmodifiable object\n-        return unmodifiableList(allGenericTypes);\n-    }\n-\n-    /**\n-     * Get all generic super classes that are assignable from {@link ParameterizedType} interface\n-     *\n-     * @param type        the specified type\n-     * @param typeFilters one or more {@link Predicate}s to filter the {@link ParameterizedType} instance\n-     * @return non-null read-only {@link List}\n-     */\n-    static List<ParameterizedType> getAllGenericSuperClasses(Type type, Predicate<ParameterizedType>... typeFilters) {\n-\n-        Class<?> rawClass = getRawClass(type);\n-\n-        if (rawClass == null || rawClass.isInterface()) {\n-            return emptyList();\n-        }\n-\n-        List<Class<?>> allTypes = new LinkedList<>();\n-        // Add current class\n-        allTypes.add(rawClass);\n-        // Add all super classes\n-        allTypes.addAll(getAllSuperClasses(rawClass, NON_OBJECT_TYPE_FILTER));\n-\n-        List<ParameterizedType> allGenericSuperClasses = allTypes\n-                .stream()\n-                .map(Class::getGenericSuperclass)\n-                .filter(TypeUtils::isParameterizedType)\n-                .map(ParameterizedType.class::cast)\n-                .collect(Collectors.toList());\n-\n-        return unmodifiableList(filterAll(allGenericSuperClasses, typeFilters));\n-    }\n-\n-    /**\n-     * Get all generic interfaces that are assignable from {@link ParameterizedType} interface\n-     *\n-     * @param type        the specified type\n-     * @param typeFilters one or more {@link Predicate}s to filter the {@link ParameterizedType} instance\n-     * @return non-null read-only {@link List}\n-     */\n-    static List<ParameterizedType> getAllGenericInterfaces(Type type, Predicate<ParameterizedType>... typeFilters) {\n-\n-        Class<?> rawClass = getRawClass(type);\n-\n-        if (rawClass == null) {\n-            return emptyList();\n-        }\n-\n-        List<Class<?>> allTypes = new LinkedList<>();\n-        // Add current class\n-        allTypes.add(rawClass);\n-        // Add all super classes\n-        allTypes.addAll(getAllSuperClasses(rawClass, NON_OBJECT_TYPE_FILTER));\n-        // Add all super interfaces\n-        allTypes.addAll(getAllInterfaces(rawClass));\n-\n-        List<ParameterizedType> allGenericInterfaces = allTypes\n-                .stream()\n-                .map(Class::getGenericInterfaces)\n-                .map(Arrays::asList)\n-                .flatMap(Collection::stream)\n-                .filter(TypeUtils::isParameterizedType)\n-                .map(ParameterizedType.class::cast)\n-                .collect(toList());\n-\n-        return unmodifiableList(filterAll(allGenericInterfaces, typeFilters));\n-    }\n-\n-    static String getClassName(Type type) {\n-        return getRawType(type).getTypeName();\n-    }\n-\n-    static Set<String> getClassNames(Iterable<? extends Type> types) {\n-        return stream(types.spliterator(), false)\n-                .map(TypeUtils::getClassName)\n-                .collect(toSet());\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.common.utils;\r\n+\r\n+import java.lang.reflect.ParameterizedType;\r\n+import java.lang.reflect.Type;\r\n+import java.util.Arrays;\r\n+import java.util.Collection;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+import java.util.function.Predicate;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.util.Arrays.asList;\r\n+import static java.util.Collections.emptyList;\r\n+import static java.util.Collections.unmodifiableList;\r\n+import static java.util.stream.Collectors.toList;\r\n+import static java.util.stream.Collectors.toSet;\r\n+import static java.util.stream.StreamSupport.stream;\r\n+import static org.apache.dubbo.common.function.Predicates.and;\r\n+import static org.apache.dubbo.common.function.Streams.filterAll;\r\n+import static org.apache.dubbo.common.function.Streams.filterList;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.getAllInterfaces;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.getAllSuperClasses;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.isAssignableFrom;\r\n+\r\n+/**\r\n+ * The utilities class for {@link Type}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface TypeUtils {\r\n+\r\n+    Predicate<Class<?>> NON_OBJECT_TYPE_FILTER = t -> !Objects.equals(Object.class, t);\r\n+\r\n+    static boolean isParameterizedType(Type type) {\r\n+        return type instanceof ParameterizedType;\r\n+    }\r\n+\r\n+    static Type getRawType(Type type) {\r\n+        if (isParameterizedType(type)) {\r\n+            return ((ParameterizedType) type).getRawType();\r\n+        } else {\r\n+            return type;\r\n+        }\r\n+    }\r\n+\r\n+    static Class<?> getRawClass(Type type) {\r\n+        Type rawType = getRawType(type);\r\n+        if (isClass(rawType)) {\r\n+            return (Class) rawType;\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    static boolean isClass(Type type) {\r\n+        return type instanceof Class;\r\n+    }\r\n+\r\n+    static <T> Class<T> findActualTypeArgument(Type type, Class<?> interfaceClass, int index) {\r\n+        return (Class<T>) findActualTypeArguments(type, interfaceClass).get(index);\r\n+    }\r\n+\r\n+    static List<Class<?>> findActualTypeArguments(Type type, Class<?> interfaceClass) {\r\n+\r\n+        List<Class<?>> actualTypeArguments = new LinkedList<>();\r\n+\r\n+        getAllGenericTypes(type, t -> isAssignableFrom(interfaceClass, getRawClass(t)))\r\n+                .forEach(parameterizedType -> {\r\n+                    Class<?> rawClass = getRawClass(parameterizedType);\r\n+                    Type[] typeArguments = parameterizedType.getActualTypeArguments();\r\n+                    for (int i = 0; i < typeArguments.length; i++) {\r\n+                        Type typeArgument = typeArguments[i];\r\n+                        if (typeArgument instanceof Class) {\r\n+                            actualTypeArguments.add(i, (Class) typeArgument);\r\n+                        }\r\n+                    }\r\n+                    Class<?> superClass = rawClass.getSuperclass();\r\n+                    if (superClass != null) {\r\n+                        actualTypeArguments.addAll(findActualTypeArguments(superClass, interfaceClass));\r\n+                    }\r\n+                });\r\n+\r\n+        return unmodifiableList(actualTypeArguments);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the specified types' generic types(including super classes and interfaces) that are assignable from {@link ParameterizedType} interface\r\n+     *\r\n+     * @param type        the specified type\r\n+     * @param typeFilters one or more {@link Predicate}s to filter the {@link ParameterizedType} instance\r\n+     * @return non-null read-only {@link List}\r\n+     */\r\n+    static List<ParameterizedType> getGenericTypes(Type type, Predicate<ParameterizedType>... typeFilters) {\r\n+\r\n+        Class<?> rawClass = getRawClass(type);\r\n+\r\n+        if (rawClass == null) {\r\n+            return emptyList();\r\n+        }\r\n+\r\n+        List<Type> genericTypes = new LinkedList<>();\r\n+\r\n+        genericTypes.add(rawClass.getGenericSuperclass());\r\n+        genericTypes.addAll(asList(rawClass.getGenericInterfaces()));\r\n+\r\n+        return unmodifiableList(\r\n+                filterList(genericTypes, TypeUtils::isParameterizedType)\r\n+                        .stream()\r\n+                        .map(ParameterizedType.class::cast)\r\n+                        .filter(and(typeFilters))\r\n+                        .collect(toList())\r\n+        );\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all generic types(including super classes and interfaces) that are assignable from {@link ParameterizedType} interface\r\n+     *\r\n+     * @param type        the specified type\r\n+     * @param typeFilters one or more {@link Predicate}s to filter the {@link ParameterizedType} instance\r\n+     * @return non-null read-only {@link List}\r\n+     */\r\n+    static List<ParameterizedType> getAllGenericTypes(Type type, Predicate<ParameterizedType>... typeFilters) {\r\n+        List<ParameterizedType> allGenericTypes = new LinkedList<>();\r\n+        // Add generic super classes\r\n+        allGenericTypes.addAll(getAllGenericSuperClasses(type, typeFilters));\r\n+        // Add generic super interfaces\r\n+        allGenericTypes.addAll(getAllGenericInterfaces(type, typeFilters));\r\n+        // wrap unmodifiable object\r\n+        return unmodifiableList(allGenericTypes);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all generic super classes that are assignable from {@link ParameterizedType} interface\r\n+     *\r\n+     * @param type        the specified type\r\n+     * @param typeFilters one or more {@link Predicate}s to filter the {@link ParameterizedType} instance\r\n+     * @return non-null read-only {@link List}\r\n+     */\r\n+    static List<ParameterizedType> getAllGenericSuperClasses(Type type, Predicate<ParameterizedType>... typeFilters) {\r\n+\r\n+        Class<?> rawClass = getRawClass(type);\r\n+\r\n+        if (rawClass == null || rawClass.isInterface()) {\r\n+            return emptyList();\r\n+        }\r\n+\r\n+        List<Class<?>> allTypes = new LinkedList<>();\r\n+        // Add current class\r\n+        allTypes.add(rawClass);\r\n+        // Add all super classes\r\n+        allTypes.addAll(getAllSuperClasses(rawClass, NON_OBJECT_TYPE_FILTER));\r\n+\r\n+        List<ParameterizedType> allGenericSuperClasses = allTypes\r\n+                .stream()\r\n+                .map(Class::getGenericSuperclass)\r\n+                .filter(TypeUtils::isParameterizedType)\r\n+                .map(ParameterizedType.class::cast)\r\n+                .collect(Collectors.toList());\r\n+\r\n+        return unmodifiableList(filterAll(allGenericSuperClasses, typeFilters));\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all generic interfaces that are assignable from {@link ParameterizedType} interface\r\n+     *\r\n+     * @param type        the specified type\r\n+     * @param typeFilters one or more {@link Predicate}s to filter the {@link ParameterizedType} instance\r\n+     * @return non-null read-only {@link List}\r\n+     */\r\n+    static List<ParameterizedType> getAllGenericInterfaces(Type type, Predicate<ParameterizedType>... typeFilters) {\r\n+\r\n+        Class<?> rawClass = getRawClass(type);\r\n+\r\n+        if (rawClass == null) {\r\n+            return emptyList();\r\n+        }\r\n+\r\n+        List<Class<?>> allTypes = new LinkedList<>();\r\n+        // Add current class\r\n+        allTypes.add(rawClass);\r\n+        // Add all super classes\r\n+        allTypes.addAll(getAllSuperClasses(rawClass, NON_OBJECT_TYPE_FILTER));\r\n+        // Add all super interfaces\r\n+        allTypes.addAll(getAllInterfaces(rawClass));\r\n+\r\n+        List<ParameterizedType> allGenericInterfaces = allTypes\r\n+                .stream()\r\n+                .map(Class::getGenericInterfaces)\r\n+                .map(Arrays::asList)\r\n+                .flatMap(Collection::stream)\r\n+                .filter(TypeUtils::isParameterizedType)\r\n+                .map(ParameterizedType.class::cast)\r\n+                .collect(toList());\r\n+\r\n+        return unmodifiableList(filterAll(allGenericInterfaces, typeFilters));\r\n+    }\r\n+\r\n+    static String getClassName(Type type) {\r\n+        return getRawType(type).getTypeName();\r\n+    }\r\n+\r\n+    static Set<String> getClassNames(Iterable<? extends Type> types) {\r\n+        return stream(types.spliterator(), false)\r\n+                .map(TypeUtils::getClassName)\r\n+                .collect(toSet());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/common/utils/Utf8Utils.java", "source2": "org/apache/dubbo/common/utils/Utf8Utils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,229 +1,229 @@\n-// Protocol Buffers - Google's data interchange format\n-// Copyright 2008 Google Inc.  All rights reserved.\n-// https://developers.google.com/protocol-buffers/\n-//\n-// Redistribution and use in source and binary forms, with or without\n-// modification, are permitted provided that the following conditions are\n-// met:\n-//\n-//     * Redistributions of source code must retain the above copyright\n-// notice, this list of conditions and the following disclaimer.\n-//     * Redistributions in binary form must reproduce the above\n-// copyright notice, this list of conditions and the following disclaimer\n-// in the documentation and/or other materials provided with the\n-// distribution.\n-//     * Neither the name of Google Inc. nor the names of its\n-// contributors may be used to endorse or promote products derived from\n-// this software without specific prior written permission.\n-//\n-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n-// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n-package org.apache.dubbo.common.utils;\n-\n-import static java.lang.Character.MIN_HIGH_SURROGATE;\n-import static java.lang.Character.MIN_LOW_SURROGATE;\n-import static java.lang.Character.MIN_SUPPLEMENTARY_CODE_POINT;\n-\n-/**\n- * See original <a href=\n- * \"https://github.com/protocolbuffers/protobuf/blob/master/java/core/src/main/java/com/google/protobuf/Utf8.java\"\n- * >Utf8.java</a>\n- */\n-public final class Utf8Utils {\n-\n-    private Utf8Utils() {\n-        //empty\n-    }\n-\n-    public static int decodeUtf8(byte[] srcBytes, int srcIdx, int srcSize, char[] destChars, int destIdx) {\n-        // Bitwise OR combines the sign bits so any negative value fails the check.\n-        if ((srcIdx | srcSize | srcBytes.length - srcIdx - srcSize) < 0\n-                || (destIdx | destChars.length - destIdx - srcSize) < 0) {\n-            String exMsg = String.format(\"buffer srcBytes.length=%d, srcIdx=%d, srcSize=%d, destChars.length=%d, \" +\n-                    \"destIdx=%d\", srcBytes.length, srcIdx, srcSize, destChars.length, destIdx);\n-            throw new ArrayIndexOutOfBoundsException(\n-                    exMsg);\n-        }\n-\n-        int offset = srcIdx;\n-        final int limit = offset + srcSize;\n-        final int destIdx0 = destIdx;\n-\n-        // Optimize for 100% ASCII (Hotspot loves small simple top-level loops like this).\n-        // This simple loop stops when we encounter a byte >= 0x80 (i.e. non-ASCII).\n-        while (offset < limit) {\n-            byte b = srcBytes[offset];\n-            if (!DecodeUtil.isOneByte(b)) {\n-                break;\n-            }\n-            offset++;\n-            DecodeUtil.handleOneByteSafe(b, destChars, destIdx++);\n-        }\n-\n-        while (offset < limit) {\n-            byte byte1 = srcBytes[offset++];\n-            if (DecodeUtil.isOneByte(byte1)) {\n-                DecodeUtil.handleOneByteSafe(byte1, destChars, destIdx++);\n-                // It's common for there to be multiple ASCII characters in a run mixed in, so add an\n-                // extra optimized loop to take care of these runs.\n-                while (offset < limit) {\n-                    byte b = srcBytes[offset];\n-                    if (!DecodeUtil.isOneByte(b)) {\n-                        break;\n-                    }\n-                    offset++;\n-                    DecodeUtil.handleOneByteSafe(b, destChars, destIdx++);\n-                }\n-            } else if (DecodeUtil.isTwoBytes(byte1)) {\n-                if (offset >= limit) {\n-                    throw new IllegalArgumentException(\"invalid UTF-8.\");\n-                }\n-                DecodeUtil.handleTwoBytesSafe(byte1, /* byte2 */ srcBytes[offset++], destChars, destIdx++);\n-            } else if (DecodeUtil.isThreeBytes(byte1)) {\n-                if (offset >= limit - 1) {\n-                    throw new IllegalArgumentException(\"invalid UTF-8.\");\n-                }\n-                DecodeUtil.handleThreeBytesSafe(\n-                        byte1,\n-                        /* byte2 */ srcBytes[offset++],\n-                        /* byte3 */ srcBytes[offset++],\n-                        destChars,\n-                        destIdx++);\n-            } else {\n-                if (offset >= limit - 2) {\n-                    throw new IllegalArgumentException(\"invalid UTF-8.\");\n-                }\n-                DecodeUtil.handleFourBytesSafe(\n-                        byte1,\n-                        /* byte2 */ srcBytes[offset++],\n-                        /* byte3 */ srcBytes[offset++],\n-                        /* byte4 */ srcBytes[offset++],\n-                        destChars,\n-                        destIdx);\n-                destIdx += 2;\n-            }\n-        }\n-        return destIdx - destIdx0;\n-    }\n-\n-\n-    private static class DecodeUtil {\n-\n-        /**\n-         * Returns whether this is a single-byte codepoint (i.e., ASCII) with the form '0XXXXXXX'.\n-         */\n-        private static boolean isOneByte(byte b) {\n-            return b >= 0;\n-        }\n-\n-        /**\n-         * Returns whether this is a two-byte codepoint with the form '10XXXXXX'.\n-         */\n-        private static boolean isTwoBytes(byte b) {\n-            return b < (byte) 0xE0;\n-        }\n-\n-        /**\n-         * Returns whether this is a three-byte codepoint with the form '110XXXXX'.\n-         */\n-        private static boolean isThreeBytes(byte b) {\n-            return b < (byte) 0xF0;\n-        }\n-\n-        private static void handleOneByteSafe(byte byte1, char[] resultArr, int resultPos) {\n-            resultArr[resultPos] = (char) byte1;\n-        }\n-\n-        private static void handleTwoBytesSafe(byte byte1, byte byte2, char[] resultArr, int resultPos) {\n-            checkUtf8(byte1, byte2);\n-            resultArr[resultPos] = (char) (((byte1 & 0x1F) << 6) | trailingByteValue(byte2));\n-        }\n-\n-        private static void checkUtf8(byte byte1, byte byte2) {\n-            // Simultaneously checks for illegal trailing-byte in leading position (<= '11000000') and\n-            // overlong 2-byte, '11000001'.\n-            if (byte1 < (byte) 0xC2 || isNotTrailingByte(byte2)) {\n-                throw new IllegalArgumentException(\"invalid UTF-8.\");\n-            }\n-        }\n-\n-        private static void handleThreeBytesSafe(byte byte1, byte byte2, byte byte3, char[] resultArr, int resultPos) {\n-            checkUtf8(byte1, byte2, byte3);\n-            resultArr[resultPos] =\n-                    (char) (((byte1 & 0x0F) << 12) | (trailingByteValue(byte2) << 6) | trailingByteValue(byte3));\n-        }\n-\n-        private static void checkUtf8(byte byte1, byte byte2, byte byte3) {\n-            if (isNotTrailingByte(byte2)\n-                    // overlong? 5 most significant bits must not all be zero\n-                    || (byte1 == (byte) 0xE0 && byte2 < (byte) 0xA0)\n-                    // check for illegal surrogate codepoints\n-                    || (byte1 == (byte) 0xED && byte2 >= (byte) 0xA0)\n-                    || isNotTrailingByte(byte3)) {\n-                throw new IllegalArgumentException(\"invalid UTF-8.\");\n-            }\n-        }\n-\n-        private static void handleFourBytesSafe(byte byte1, byte byte2, byte byte3, byte byte4, char[] resultArr,\n-                                                int resultPos) {\n-            checkUtf8(byte1, byte2, byte3, byte4);\n-            int codepoint =\n-                    ((byte1 & 0x07) << 18)\n-                            | (trailingByteValue(byte2) << 12)\n-                            | (trailingByteValue(byte3) << 6)\n-                            | trailingByteValue(byte4);\n-\n-            resultArr[resultPos] = DecodeUtil.highSurrogate(codepoint);\n-            resultArr[resultPos + 1] = DecodeUtil.lowSurrogate(codepoint);\n-        }\n-\n-        private static void checkUtf8(byte byte1, byte byte2, byte byte3, byte byte4) {\n-            if (isNotTrailingByte(byte2)\n-                    // Check that 1 <= plane <= 16.  Tricky optimized form of:\n-                    //   valid 4-byte leading byte?\n-                    // if (byte1 > (byte) 0xF4 ||\n-                    //   overlong? 4 most significant bits must not all be zero\n-                    //     byte1 == (byte) 0xF0 && byte2 < (byte) 0x90 ||\n-                    //   codepoint larger than the highest code point (U+10FFFF)?\n-                    //     byte1 == (byte) 0xF4 && byte2 > (byte) 0x8F)\n-                    || (((byte1 << 28) + (byte2 - (byte) 0x90)) >> 30) != 0\n-                    || isNotTrailingByte(byte3)\n-                    || isNotTrailingByte(byte4)) {\n-                throw new IllegalArgumentException(\"invalid UTF-8.\");\n-            }\n-        }\n-\n-        /**\n-         * Returns whether the byte is not a valid continuation of the form '10XXXXXX'.\n-         */\n-        private static boolean isNotTrailingByte(byte b) {\n-            return b > (byte) 0xBF;\n-        }\n-\n-        /**\n-         * Returns the actual value of the trailing byte (removes the prefix '10') for composition.\n-         */\n-        private static int trailingByteValue(byte b) {\n-            return b & 0x3F;\n-        }\n-\n-        private static char highSurrogate(int codePoint) {\n-            return (char)\n-                    ((MIN_HIGH_SURROGATE - (MIN_SUPPLEMENTARY_CODE_POINT >>> 10)) + (codePoint >>> 10));\n-        }\n-\n-        private static char lowSurrogate(int codePoint) {\n-            return (char) (MIN_LOW_SURROGATE + (codePoint & 0x3ff));\n-        }\n-    }\n-\n-}\n+// Protocol Buffers - Google's data interchange format\r\n+// Copyright 2008 Google Inc.  All rights reserved.\r\n+// https://developers.google.com/protocol-buffers/\r\n+//\r\n+// Redistribution and use in source and binary forms, with or without\r\n+// modification, are permitted provided that the following conditions are\r\n+// met:\r\n+//\r\n+//     * Redistributions of source code must retain the above copyright\r\n+// notice, this list of conditions and the following disclaimer.\r\n+//     * Redistributions in binary form must reproduce the above\r\n+// copyright notice, this list of conditions and the following disclaimer\r\n+// in the documentation and/or other materials provided with the\r\n+// distribution.\r\n+//     * Neither the name of Google Inc. nor the names of its\r\n+// contributors may be used to endorse or promote products derived from\r\n+// this software without specific prior written permission.\r\n+//\r\n+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n+// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\n+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\n+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\n+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\n+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\n+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n+package org.apache.dubbo.common.utils;\r\n+\r\n+import static java.lang.Character.MIN_HIGH_SURROGATE;\r\n+import static java.lang.Character.MIN_LOW_SURROGATE;\r\n+import static java.lang.Character.MIN_SUPPLEMENTARY_CODE_POINT;\r\n+\r\n+/**\r\n+ * See original <a href=\r\n+ * \"https://github.com/protocolbuffers/protobuf/blob/master/java/core/src/main/java/com/google/protobuf/Utf8.java\"\r\n+ * >Utf8.java</a>\r\n+ */\r\n+public final class Utf8Utils {\r\n+\r\n+    private Utf8Utils() {\r\n+        //empty\r\n+    }\r\n+\r\n+    public static int decodeUtf8(byte[] srcBytes, int srcIdx, int srcSize, char[] destChars, int destIdx) {\r\n+        // Bitwise OR combines the sign bits so any negative value fails the check.\r\n+        if ((srcIdx | srcSize | srcBytes.length - srcIdx - srcSize) < 0\r\n+                || (destIdx | destChars.length - destIdx - srcSize) < 0) {\r\n+            String exMsg = String.format(\"buffer srcBytes.length=%d, srcIdx=%d, srcSize=%d, destChars.length=%d, \" +\r\n+                    \"destIdx=%d\", srcBytes.length, srcIdx, srcSize, destChars.length, destIdx);\r\n+            throw new ArrayIndexOutOfBoundsException(\r\n+                    exMsg);\r\n+        }\r\n+\r\n+        int offset = srcIdx;\r\n+        final int limit = offset + srcSize;\r\n+        final int destIdx0 = destIdx;\r\n+\r\n+        // Optimize for 100% ASCII (Hotspot loves small simple top-level loops like this).\r\n+        // This simple loop stops when we encounter a byte >= 0x80 (i.e. non-ASCII).\r\n+        while (offset < limit) {\r\n+            byte b = srcBytes[offset];\r\n+            if (!DecodeUtil.isOneByte(b)) {\r\n+                break;\r\n+            }\r\n+            offset++;\r\n+            DecodeUtil.handleOneByteSafe(b, destChars, destIdx++);\r\n+        }\r\n+\r\n+        while (offset < limit) {\r\n+            byte byte1 = srcBytes[offset++];\r\n+            if (DecodeUtil.isOneByte(byte1)) {\r\n+                DecodeUtil.handleOneByteSafe(byte1, destChars, destIdx++);\r\n+                // It's common for there to be multiple ASCII characters in a run mixed in, so add an\r\n+                // extra optimized loop to take care of these runs.\r\n+                while (offset < limit) {\r\n+                    byte b = srcBytes[offset];\r\n+                    if (!DecodeUtil.isOneByte(b)) {\r\n+                        break;\r\n+                    }\r\n+                    offset++;\r\n+                    DecodeUtil.handleOneByteSafe(b, destChars, destIdx++);\r\n+                }\r\n+            } else if (DecodeUtil.isTwoBytes(byte1)) {\r\n+                if (offset >= limit) {\r\n+                    throw new IllegalArgumentException(\"invalid UTF-8.\");\r\n+                }\r\n+                DecodeUtil.handleTwoBytesSafe(byte1, /* byte2 */ srcBytes[offset++], destChars, destIdx++);\r\n+            } else if (DecodeUtil.isThreeBytes(byte1)) {\r\n+                if (offset >= limit - 1) {\r\n+                    throw new IllegalArgumentException(\"invalid UTF-8.\");\r\n+                }\r\n+                DecodeUtil.handleThreeBytesSafe(\r\n+                        byte1,\r\n+                        /* byte2 */ srcBytes[offset++],\r\n+                        /* byte3 */ srcBytes[offset++],\r\n+                        destChars,\r\n+                        destIdx++);\r\n+            } else {\r\n+                if (offset >= limit - 2) {\r\n+                    throw new IllegalArgumentException(\"invalid UTF-8.\");\r\n+                }\r\n+                DecodeUtil.handleFourBytesSafe(\r\n+                        byte1,\r\n+                        /* byte2 */ srcBytes[offset++],\r\n+                        /* byte3 */ srcBytes[offset++],\r\n+                        /* byte4 */ srcBytes[offset++],\r\n+                        destChars,\r\n+                        destIdx);\r\n+                destIdx += 2;\r\n+            }\r\n+        }\r\n+        return destIdx - destIdx0;\r\n+    }\r\n+\r\n+\r\n+    private static class DecodeUtil {\r\n+\r\n+        /**\r\n+         * Returns whether this is a single-byte codepoint (i.e., ASCII) with the form '0XXXXXXX'.\r\n+         */\r\n+        private static boolean isOneByte(byte b) {\r\n+            return b >= 0;\r\n+        }\r\n+\r\n+        /**\r\n+         * Returns whether this is a two-byte codepoint with the form '10XXXXXX'.\r\n+         */\r\n+        private static boolean isTwoBytes(byte b) {\r\n+            return b < (byte) 0xE0;\r\n+        }\r\n+\r\n+        /**\r\n+         * Returns whether this is a three-byte codepoint with the form '110XXXXX'.\r\n+         */\r\n+        private static boolean isThreeBytes(byte b) {\r\n+            return b < (byte) 0xF0;\r\n+        }\r\n+\r\n+        private static void handleOneByteSafe(byte byte1, char[] resultArr, int resultPos) {\r\n+            resultArr[resultPos] = (char) byte1;\r\n+        }\r\n+\r\n+        private static void handleTwoBytesSafe(byte byte1, byte byte2, char[] resultArr, int resultPos) {\r\n+            checkUtf8(byte1, byte2);\r\n+            resultArr[resultPos] = (char) (((byte1 & 0x1F) << 6) | trailingByteValue(byte2));\r\n+        }\r\n+\r\n+        private static void checkUtf8(byte byte1, byte byte2) {\r\n+            // Simultaneously checks for illegal trailing-byte in leading position (<= '11000000') and\r\n+            // overlong 2-byte, '11000001'.\r\n+            if (byte1 < (byte) 0xC2 || isNotTrailingByte(byte2)) {\r\n+                throw new IllegalArgumentException(\"invalid UTF-8.\");\r\n+            }\r\n+        }\r\n+\r\n+        private static void handleThreeBytesSafe(byte byte1, byte byte2, byte byte3, char[] resultArr, int resultPos) {\r\n+            checkUtf8(byte1, byte2, byte3);\r\n+            resultArr[resultPos] =\r\n+                    (char) (((byte1 & 0x0F) << 12) | (trailingByteValue(byte2) << 6) | trailingByteValue(byte3));\r\n+        }\r\n+\r\n+        private static void checkUtf8(byte byte1, byte byte2, byte byte3) {\r\n+            if (isNotTrailingByte(byte2)\r\n+                    // overlong? 5 most significant bits must not all be zero\r\n+                    || (byte1 == (byte) 0xE0 && byte2 < (byte) 0xA0)\r\n+                    // check for illegal surrogate codepoints\r\n+                    || (byte1 == (byte) 0xED && byte2 >= (byte) 0xA0)\r\n+                    || isNotTrailingByte(byte3)) {\r\n+                throw new IllegalArgumentException(\"invalid UTF-8.\");\r\n+            }\r\n+        }\r\n+\r\n+        private static void handleFourBytesSafe(byte byte1, byte byte2, byte byte3, byte byte4, char[] resultArr,\r\n+                                                int resultPos) {\r\n+            checkUtf8(byte1, byte2, byte3, byte4);\r\n+            int codepoint =\r\n+                    ((byte1 & 0x07) << 18)\r\n+                            | (trailingByteValue(byte2) << 12)\r\n+                            | (trailingByteValue(byte3) << 6)\r\n+                            | trailingByteValue(byte4);\r\n+\r\n+            resultArr[resultPos] = DecodeUtil.highSurrogate(codepoint);\r\n+            resultArr[resultPos + 1] = DecodeUtil.lowSurrogate(codepoint);\r\n+        }\r\n+\r\n+        private static void checkUtf8(byte byte1, byte byte2, byte byte3, byte byte4) {\r\n+            if (isNotTrailingByte(byte2)\r\n+                    // Check that 1 <= plane <= 16.  Tricky optimized form of:\r\n+                    //   valid 4-byte leading byte?\r\n+                    // if (byte1 > (byte) 0xF4 ||\r\n+                    //   overlong? 4 most significant bits must not all be zero\r\n+                    //     byte1 == (byte) 0xF0 && byte2 < (byte) 0x90 ||\r\n+                    //   codepoint larger than the highest code point (U+10FFFF)?\r\n+                    //     byte1 == (byte) 0xF4 && byte2 > (byte) 0x8F)\r\n+                    || (((byte1 << 28) + (byte2 - (byte) 0x90)) >> 30) != 0\r\n+                    || isNotTrailingByte(byte3)\r\n+                    || isNotTrailingByte(byte4)) {\r\n+                throw new IllegalArgumentException(\"invalid UTF-8.\");\r\n+            }\r\n+        }\r\n+\r\n+        /**\r\n+         * Returns whether the byte is not a valid continuation of the form '10XXXXXX'.\r\n+         */\r\n+        private static boolean isNotTrailingByte(byte b) {\r\n+            return b > (byte) 0xBF;\r\n+        }\r\n+\r\n+        /**\r\n+         * Returns the actual value of the trailing byte (removes the prefix '10') for composition.\r\n+         */\r\n+        private static int trailingByteValue(byte b) {\r\n+            return b & 0x3F;\r\n+        }\r\n+\r\n+        private static char highSurrogate(int codePoint) {\r\n+            return (char)\r\n+                    ((MIN_HIGH_SURROGATE - (MIN_SUPPLEMENTARY_CODE_POINT >>> 10)) + (codePoint >>> 10));\r\n+        }\r\n+\r\n+        private static char lowSurrogate(int codePoint) {\r\n+            return (char) (MIN_LOW_SURROGATE + (codePoint & 0x3ff));\r\n+        }\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/AbstractConfig.java", "source2": "org/apache/dubbo/config/AbstractConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,614 +1,614 @@\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.config;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.config.CompositeConfiguration;\n-import org.apache.dubbo.common.config.Environment;\n-import org.apache.dubbo.common.constants.CommonConstants;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ClassUtils;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.MethodUtils;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.context.ConfigManager;\n-import org.apache.dubbo.config.support.Parameter;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.AsyncMethodInfo;\n-\n-import javax.annotation.PostConstruct;\n-import java.io.Serializable;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Modifier;\n-import java.util.Collections;\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.Objects;\n-import java.util.Set;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-import java.util.stream.Collectors;\n-\n-import static org.apache.dubbo.common.utils.ReflectUtils.findMethodByMethodSignature;\n-\n-/**\n- * Utility methods and public methods for parsing configuration\n- *\n- * @export\n- */\n-public abstract class AbstractConfig implements Serializable {\n-\n-    protected static final Logger logger = LoggerFactory.getLogger(AbstractConfig.class);\n-    private static final long serialVersionUID = 4267533505537413570L;\n-\n-    /**\n-     * The legacy properties container\n-     */\n-    private static final Map<String, String> LEGACY_PROPERTIES = new HashMap<String, String>();\n-\n-    /**\n-     * The suffix container\n-     */\n-    private static final String[] SUFFIXES = new String[]{\"Config\", \"Bean\", \"ConfigBase\"};\n-\n-    static {\n-        LEGACY_PROPERTIES.put(\"dubbo.protocol.name\", \"dubbo.service.protocol\");\n-        LEGACY_PROPERTIES.put(\"dubbo.protocol.host\", \"dubbo.service.server.host\");\n-        LEGACY_PROPERTIES.put(\"dubbo.protocol.port\", \"dubbo.service.server.port\");\n-        LEGACY_PROPERTIES.put(\"dubbo.protocol.threads\", \"dubbo.service.max.thread.pool.size\");\n-        LEGACY_PROPERTIES.put(\"dubbo.consumer.timeout\", \"dubbo.service.invoke.timeout\");\n-        LEGACY_PROPERTIES.put(\"dubbo.consumer.retries\", \"dubbo.service.max.retry.providers\");\n-        LEGACY_PROPERTIES.put(\"dubbo.consumer.check\", \"dubbo.service.allow.no.provider\");\n-        LEGACY_PROPERTIES.put(\"dubbo.service.url\", \"dubbo.service.address\");\n-    }\n-\n-    /**\n-     * The config id\n-     */\n-    protected String id;\n-    protected String prefix;\n-\n-    protected final AtomicBoolean refreshed = new AtomicBoolean(false);\n-\n-    private static String convertLegacyValue(String key, String value) {\n-        if (value != null && value.length() > 0) {\n-            if (\"dubbo.service.max.retry.providers\".equals(key)) {\n-                return String.valueOf(Integer.parseInt(value) - 1);\n-            } else if (\"dubbo.service.allow.no.provider\".equals(key)) {\n-                return String.valueOf(!Boolean.parseBoolean(value));\n-            }\n-        }\n-        return value;\n-    }\n-\n-    public static String getTagName(Class<?> cls) {\n-        String tag = cls.getSimpleName();\n-        for (String suffix : SUFFIXES) {\n-            if (tag.endsWith(suffix)) {\n-                tag = tag.substring(0, tag.length() - suffix.length());\n-                break;\n-            }\n-        }\n-        return StringUtils.camelToSplitName(tag, \"-\");\n-    }\n-\n-    public static void appendParameters(Map<String, String> parameters, Object config) {\n-        appendParameters(parameters, config, null);\n-    }\n-\n-    @SuppressWarnings(\"unchecked\")\n-    public static void appendParameters(Map<String, String> parameters, Object config, String prefix) {\n-        if (config == null) {\n-            return;\n-        }\n-        Method[] methods = config.getClass().getMethods();\n-        for (Method method : methods) {\n-            try {\n-                String name = method.getName();\n-                if (MethodUtils.isGetter(method)) {\n-                    Parameter parameter = method.getAnnotation(Parameter.class);\n-                    if (method.getReturnType() == Object.class || parameter != null && parameter.excluded()) {\n-                        continue;\n-                    }\n-                    String key;\n-                    if (parameter != null && parameter.key().length() > 0) {\n-                        key = parameter.key();\n-                    } else {\n-                        key = calculatePropertyFromGetter(name);\n-                    }\n-                    Object value = method.invoke(config);\n-                    String str = String.valueOf(value).trim();\n-                    if (value != null && str.length() > 0) {\n-                        if (parameter != null && parameter.escaped()) {\n-                            str = URL.encode(str);\n-                        }\n-                        if (parameter != null && parameter.append()) {\n-                            String pre = parameters.get(key);\n-                            if (pre != null && pre.length() > 0) {\n-                                str = pre + \",\" + str;\n-                            }\n-                        }\n-                        if (prefix != null && prefix.length() > 0) {\n-                            key = prefix + \".\" + key;\n-                        }\n-                        parameters.put(key, str);\n-                    } else if (parameter != null && parameter.required()) {\n-                        throw new IllegalStateException(config.getClass().getSimpleName() + \".\" + key + \" == null\");\n-                    }\n-                } else if (isParametersGetter(method)) {\n-                    Map<String, String> map = (Map<String, String>) method.invoke(config, new Object[0]);\n-                    parameters.putAll(convert(map, prefix));\n-                }\n-            } catch (Exception e) {\n-                throw new IllegalStateException(e.getMessage(), e);\n-            }\n-        }\n-    }\n-\n-    @Deprecated\n-    protected static void appendAttributes(Map<String, Object> parameters, Object config) {\n-        appendAttributes(parameters, config, null);\n-    }\n-\n-    @Deprecated\n-    protected static void appendAttributes(Map<String, Object> parameters, Object config, String prefix) {\n-        if (config == null) {\n-            return;\n-        }\n-        Method[] methods = config.getClass().getMethods();\n-        for (Method method : methods) {\n-            try {\n-                Parameter parameter = method.getAnnotation(Parameter.class);\n-                if (parameter == null || !parameter.attribute()) {\n-                    continue;\n-                }\n-                String name = method.getName();\n-                if (MethodUtils.isGetter(method)) {\n-                    String key;\n-                    if (parameter.key().length() > 0) {\n-                        key = parameter.key();\n-                    } else {\n-                        key = calculateAttributeFromGetter(name);\n-                    }\n-                    Object value = method.invoke(config);\n-                    if (value != null) {\n-                        if (prefix != null && prefix.length() > 0) {\n-                            key = prefix + \".\" + key;\n-                        }\n-                        parameters.put(key, value);\n-                    }\n-                }\n-            } catch (Exception e) {\n-                throw new IllegalStateException(e.getMessage(), e);\n-            }\n-        }\n-    }\n-\n-    protected static AsyncMethodInfo convertMethodConfig2AsyncInfo(MethodConfig methodConfig) {\n-        if (methodConfig == null || (methodConfig.getOninvoke() == null && methodConfig.getOnreturn() == null && methodConfig.getOnthrow() == null)) {\n-            return null;\n-        }\n-\n-        //check config conflict\n-        if (Boolean.FALSE.equals(methodConfig.isReturn()) && (methodConfig.getOnreturn() != null || methodConfig.getOnthrow() != null)) {\n-            throw new IllegalStateException(\"method config error : return attribute must be set true when onreturn or onthrow has been set.\");\n-        }\n-\n-        AsyncMethodInfo asyncMethodInfo = new AsyncMethodInfo();\n-\n-        asyncMethodInfo.setOninvokeInstance(methodConfig.getOninvoke());\n-        asyncMethodInfo.setOnreturnInstance(methodConfig.getOnreturn());\n-        asyncMethodInfo.setOnthrowInstance(methodConfig.getOnthrow());\n-\n-        try {\n-            String oninvokeMethod = methodConfig.getOninvokeMethod();\n-            if (StringUtils.isNotEmpty(oninvokeMethod)) {\n-                asyncMethodInfo.setOninvokeMethod(getMethodByName(methodConfig.getOninvoke().getClass(), oninvokeMethod));\n-            }\n-\n-            String onreturnMethod = methodConfig.getOnreturnMethod();\n-            if (StringUtils.isNotEmpty(onreturnMethod)) {\n-                asyncMethodInfo.setOnreturnMethod(getMethodByName(methodConfig.getOnreturn().getClass(), onreturnMethod));\n-            }\n-\n-            String onthrowMethod = methodConfig.getOnthrowMethod();\n-            if (StringUtils.isNotEmpty(onthrowMethod)) {\n-                asyncMethodInfo.setOnthrowMethod(getMethodByName(methodConfig.getOnthrow().getClass(), onthrowMethod));\n-            }\n-        } catch (Exception e) {\n-            throw new IllegalStateException(e.getMessage(), e);\n-        }\n-\n-        return asyncMethodInfo;\n-    }\n-\n-    private static Method getMethodByName(Class<?> clazz, String methodName) {\n-        try {\n-            return ReflectUtils.findMethodByMethodName(clazz, methodName);\n-        } catch (Exception e) {\n-            throw new IllegalStateException(e);\n-        }\n-    }\n-\n-    protected static Set<String> getSubProperties(Map<String, String> properties, String prefix) {\n-        return properties.keySet().stream().filter(k -> k.contains(prefix)).map(k -> {\n-            k = k.substring(prefix.length());\n-            return k.substring(0, k.indexOf(\".\"));\n-        }).collect(Collectors.toSet());\n-    }\n-\n-    private static String extractPropertyName(Class<?> clazz, Method setter) throws Exception {\n-        String propertyName = setter.getName().substring(\"set\".length());\n-        Method getter = null;\n-        try {\n-            getter = clazz.getMethod(\"get\" + propertyName);\n-        } catch (NoSuchMethodException e) {\n-            getter = clazz.getMethod(\"is\" + propertyName);\n-        }\n-        Parameter parameter = getter.getAnnotation(Parameter.class);\n-        if (parameter != null && StringUtils.isNotEmpty(parameter.key()) && parameter.useKeyAsProperty()) {\n-            propertyName = parameter.key();\n-        } else {\n-            propertyName = propertyName.substring(0, 1).toLowerCase() + propertyName.substring(1);\n-        }\n-        return propertyName;\n-    }\n-\n-    private static String calculatePropertyFromGetter(String name) {\n-        int i = name.startsWith(\"get\") ? 3 : 2;\n-        return StringUtils.camelToSplitName(name.substring(i, i + 1).toLowerCase() + name.substring(i + 1), \".\");\n-    }\n-\n-    private static String calculateAttributeFromGetter(String getter) {\n-        int i = getter.startsWith(\"get\") ? 3 : 2;\n-        return getter.substring(i, i + 1).toLowerCase() + getter.substring(i + 1);\n-    }\n-\n-    private static void invokeSetParameters(Class c, Object o, Map map) {\n-        try {\n-            Method method = findMethodByMethodSignature(c, \"setParameters\", new String[]{Map.class.getName()});\n-            if (method != null && isParametersSetter(method)) {\n-                method.invoke(o, map);\n-            }\n-        } catch (Throwable t) {\n-            // ignore\n-        }\n-    }\n-\n-    private static Map<String, String> invokeGetParameters(Class c, Object o) {\n-        try {\n-            Method method = findMethodByMethodSignature(c, \"getParameters\", null);\n-            if (method != null && isParametersGetter(method)) {\n-                return (Map<String, String>) method.invoke(o);\n-            }\n-        } catch (Throwable t) {\n-            // ignore\n-        }\n-        return null;\n-    }\n-\n-    private static boolean isParametersGetter(Method method) {\n-        String name = method.getName();\n-        return (\"getParameters\".equals(name)\n-                && Modifier.isPublic(method.getModifiers())\n-                && method.getParameterTypes().length == 0\n-                && method.getReturnType() == Map.class);\n-    }\n-\n-    private static boolean isParametersSetter(Method method) {\n-        return (\"setParameters\".equals(method.getName())\n-                && Modifier.isPublic(method.getModifiers())\n-                && method.getParameterCount() == 1\n-                && Map.class == method.getParameterTypes()[0]\n-                && method.getReturnType() == void.class);\n-    }\n-\n-    /**\n-     * @param parameters the raw parameters\n-     * @param prefix     the prefix\n-     * @return the parameters whose raw key will replace \"-\" to \".\"\n-     * @revised 2.7.8 \"private\" to be \"protected\"\n-     */\n-    protected static Map<String, String> convert(Map<String, String> parameters, String prefix) {\n-        if (parameters == null || parameters.isEmpty()) {\n-            return Collections.emptyMap();\n-        }\n-\n-        Map<String, String> result = new HashMap<>();\n-        String pre = (prefix != null && prefix.length() > 0 ? prefix + \".\" : \"\");\n-        for (Map.Entry<String, String> entry : parameters.entrySet()) {\n-            String key = entry.getKey();\n-            String value = entry.getValue();\n-            result.put(pre + key, value);\n-            // For compatibility, key like \"registry-type\" will has a duplicate key \"registry.type\"\n-            if (key.contains(\"-\")) {\n-                result.put(pre + key.replace('-', '.'), value);\n-            }\n-        }\n-        return result;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getId() {\n-        return id;\n-    }\n-\n-    public void setId(String id) {\n-        this.id = id;\n-    }\n-\n-    public void updateIdIfAbsent(String value) {\n-        if (StringUtils.isNotEmpty(value) && StringUtils.isEmpty(id)) {\n-            this.id = value;\n-        }\n-    }\n-\n-    protected void appendAnnotation(Class<?> annotationClass, Object annotation) {\n-        Method[] methods = annotationClass.getMethods();\n-        for (Method method : methods) {\n-            if (method.getDeclaringClass() != Object.class\n-                    && method.getReturnType() != void.class\n-                    && method.getParameterTypes().length == 0\n-                    && Modifier.isPublic(method.getModifiers())\n-                    && !Modifier.isStatic(method.getModifiers())) {\n-                try {\n-                    String property = method.getName();\n-                    if (\"interfaceClass\".equals(property) || \"interfaceName\".equals(property)) {\n-                        property = \"interface\";\n-                    }\n-                    String setter = \"set\" + property.substring(0, 1).toUpperCase() + property.substring(1);\n-                    Object value = method.invoke(annotation);\n-                    if (value != null && !value.equals(method.getDefaultValue())) {\n-                        Class<?> parameterType = ReflectUtils.getBoxedClass(method.getReturnType());\n-                        if (\"filter\".equals(property) || \"listener\".equals(property)) {\n-                            parameterType = String.class;\n-                            value = StringUtils.join((String[]) value, \",\");\n-                        } else if (\"parameters\".equals(property)) {\n-                            parameterType = Map.class;\n-                            value = CollectionUtils.toStringMap((String[]) value);\n-                        }\n-                        try {\n-                            Method setterMethod = getClass().getMethod(setter, parameterType);\n-                            setterMethod.invoke(this, value);\n-                        } catch (NoSuchMethodException e) {\n-                            // ignore\n-                        }\n-                    }\n-                } catch (Throwable e) {\n-                    logger.error(e.getMessage(), e);\n-                }\n-            }\n-        }\n-    }\n-\n-    /**\n-     * Should be called after Config was fully initialized.\n-     * // FIXME: this method should be completely replaced by appendParameters\n-     *\n-     * @return\n-     * @see AbstractConfig#appendParameters(Map, Object, String)\n-     * <p>\n-     * Notice! This method should include all properties in the returning map, treat @Parameter differently compared to appendParameters.\n-     */\n-    public Map<String, String> getMetaData() {\n-        Map<String, String> metaData = new HashMap<>();\n-        Method[] methods = this.getClass().getMethods();\n-        for (Method method : methods) {\n-            try {\n-                String name = method.getName();\n-                if (MethodUtils.isMetaMethod(method)) {\n-                    String key;\n-                    Parameter parameter = method.getAnnotation(Parameter.class);\n-                    if (parameter != null && parameter.key().length() > 0 && parameter.useKeyAsProperty()) {\n-                        key = parameter.key();\n-                    } else {\n-                        key = calculateAttributeFromGetter(name);\n-                    }\n-                    // treat url and configuration differently, the value should always present in configuration though it may not need to present in url.\n-                    //if (method.getReturnType() == Object.class || parameter != null && parameter.excluded()) {\n-                    if (method.getReturnType() == Object.class) {\n-                        metaData.put(key, null);\n-                        continue;\n-                    }\n-\n-                    /**\n-                     * Attributes annotated as deprecated should not override newly added replacement.\n-                     */\n-                    if (MethodUtils.isDeprecated(method) && metaData.get(key) != null) {\n-                        continue;\n-                    }\n-\n-                    Object value = method.invoke(this);\n-                    String str = String.valueOf(value).trim();\n-                    if (value != null && str.length() > 0) {\n-                        metaData.put(key, str);\n-                    } else {\n-                        metaData.put(key, null);\n-                    }\n-                } else if (isParametersGetter(method)) {\n-                    Map<String, String> map = (Map<String, String>) method.invoke(this, new Object[0]);\n-                    metaData.putAll(convert(map, \"\"));\n-                }\n-            } catch (Exception e) {\n-                throw new IllegalStateException(e.getMessage(), e);\n-            }\n-        }\n-        return metaData;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getPrefix() {\n-        return StringUtils.isNotEmpty(prefix) ? prefix : (CommonConstants.DUBBO + \".\" + getTagName(this.getClass()));\n-    }\n-\n-    public void setPrefix(String prefix) {\n-        this.prefix = prefix;\n-    }\n-\n-    public void refresh() {\n-        Environment env = ApplicationModel.getEnvironment();\n-        try {\n-            CompositeConfiguration compositeConfiguration = env.getPrefixedConfiguration(this);\n-            // loop methods, get override value and set the new value back to method\n-            Method[] methods = getClass().getMethods();\n-            for (Method method : methods) {\n-                if (MethodUtils.isSetter(method)) {\n-                    try {\n-                        String value = StringUtils.trim(compositeConfiguration.getString(extractPropertyName(getClass(), method)));\n-                        // isTypeMatch() is called to avoid duplicate and incorrect update, for example, we have two 'setGeneric' methods in ReferenceConfig.\n-                        if (StringUtils.isNotEmpty(value) && ClassUtils.isTypeMatch(method.getParameterTypes()[0], value)) {\n-                            method.invoke(this, ClassUtils.convertPrimitive(method.getParameterTypes()[0], value));\n-                        }\n-                    } catch (NoSuchMethodException e) {\n-                        logger.info(\"Failed to override the property \" + method.getName() + \" in \" +\n-                                this.getClass().getSimpleName() +\n-                                \", please make sure every property has getter/setter method provided.\");\n-                    }\n-                } else if (isParametersSetter(method)) {\n-                    String value = StringUtils.trim(compositeConfiguration.getString(extractPropertyName(getClass(), method)));\n-                    if (StringUtils.isNotEmpty(value)) {\n-                        Map<String, String> map = invokeGetParameters(getClass(), this);\n-                        map = map == null ? new HashMap<>() : map;\n-                        map.putAll(convert(StringUtils.parseParameters(value), \"\"));\n-                        invokeSetParameters(getClass(), this, map);\n-                    }\n-                }\n-            }\n-        } catch (Exception e) {\n-            logger.error(\"Failed to override \", e);\n-        }\n-    }\n-\n-    @Override\n-    public String toString() {\n-        try {\n-            StringBuilder buf = new StringBuilder();\n-            buf.append(\"<dubbo:\");\n-            buf.append(getTagName(getClass()));\n-            Method[] methods = getClass().getMethods();\n-            for (Method method : methods) {\n-                try {\n-                    if (MethodUtils.isGetter(method)) {\n-                        String name = method.getName();\n-                        String key = calculateAttributeFromGetter(name);\n-\n-                        try {\n-                            getClass().getDeclaredField(key);\n-                        } catch (NoSuchFieldException e) {\n-                            // ignore\n-                            continue;\n-                        }\n-\n-                        Object value = method.invoke(this);\n-                        if (value != null) {\n-                            buf.append(\" \");\n-                            buf.append(key);\n-                            buf.append(\"=\\\"\");\n-                            buf.append(value);\n-                            buf.append(\"\\\"\");\n-                        }\n-                    }\n-                } catch (Exception e) {\n-                    logger.warn(e.getMessage(), e);\n-                }\n-            }\n-            buf.append(\" />\");\n-            return buf.toString();\n-        } catch (Throwable t) {\n-            logger.warn(t.getMessage(), t);\n-            return super.toString();\n-        }\n-    }\n-\n-    /**\n-     * FIXME check @Parameter(required=true) and any conditions that need to match.\n-     */\n-    @Parameter(excluded = true)\n-    public boolean isValid() {\n-        return true;\n-    }\n-\n-\n-    @Override\n-    public boolean equals(Object obj) {\n-        if (obj == null || !(obj.getClass().getName().equals(this.getClass().getName()))) {\n-            return false;\n-        }\n-\n-        Method[] methods = this.getClass().getMethods();\n-        for (Method method1 : methods) {\n-            if (MethodUtils.isGetter(method1)) {\n-                Parameter parameter = method1.getAnnotation(Parameter.class);\n-                if (parameter != null && parameter.excluded()) {\n-                    continue;\n-                }\n-                try {\n-                    Method method2 = obj.getClass().getMethod(method1.getName(), method1.getParameterTypes());\n-                    Object value1 = method1.invoke(this, new Object[]{});\n-                    Object value2 = method2.invoke(obj, new Object[]{});\n-                    if (!Objects.equals(value1, value2)) {\n-                        return false;\n-                    }\n-                } catch (Exception e) {\n-                    return true;\n-                }\n-            }\n-        }\n-        return true;\n-    }\n-\n-    /**\n-     * Add {@link AbstractConfig instance} into {@link ConfigManager}\n-     * <p>\n-     * Current method will invoked by Spring or Java EE container automatically, or should be triggered manually.\n-     *\n-     * @see ConfigManager#addConfig(AbstractConfig)\n-     * @since 2.7.5\n-     */\n-    @PostConstruct\n-    public void addIntoConfigManager() {\n-        ApplicationModel.getConfigManager().addConfig(this);\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        int hashCode = 1;\n-\n-        Method[] methods = this.getClass().getMethods();\n-        for (Method method : methods) {\n-            if (MethodUtils.isGetter(method)) {\n-                Parameter parameter = method.getAnnotation(Parameter.class);\n-                if (parameter != null && parameter.excluded()) {\n-                    continue;\n-                }\n-                try {\n-                    Object value = method.invoke(this, new Object[]{});\n-                    hashCode = 31 * hashCode + value.hashCode();\n-                } catch (Exception ignored) {\n-                    //ignored\n-                }\n-            }\n-        }\n-\n-        if (hashCode == 0) {\n-            hashCode = 1;\n-        }\n-\n-        return hashCode;\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.config;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.config.CompositeConfiguration;\r\n+import org.apache.dubbo.common.config.Environment;\r\n+import org.apache.dubbo.common.constants.CommonConstants;\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.ClassUtils;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.MethodUtils;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.context.ConfigManager;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.AsyncMethodInfo;\r\n+\r\n+import javax.annotation.PostConstruct;\r\n+import java.io.Serializable;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Modifier;\r\n+import java.util.Collections;\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static org.apache.dubbo.common.utils.ReflectUtils.findMethodByMethodSignature;\r\n+\r\n+/**\r\n+ * Utility methods and public methods for parsing configuration\r\n+ *\r\n+ * @export\r\n+ */\r\n+public abstract class AbstractConfig implements Serializable {\r\n+\r\n+    protected static final Logger logger = LoggerFactory.getLogger(AbstractConfig.class);\r\n+    private static final long serialVersionUID = 4267533505537413570L;\r\n+\r\n+    /**\r\n+     * The legacy properties container\r\n+     */\r\n+    private static final Map<String, String> LEGACY_PROPERTIES = new HashMap<String, String>();\r\n+\r\n+    /**\r\n+     * The suffix container\r\n+     */\r\n+    private static final String[] SUFFIXES = new String[]{\"Config\", \"Bean\", \"ConfigBase\"};\r\n+\r\n+    static {\r\n+        LEGACY_PROPERTIES.put(\"dubbo.protocol.name\", \"dubbo.service.protocol\");\r\n+        LEGACY_PROPERTIES.put(\"dubbo.protocol.host\", \"dubbo.service.server.host\");\r\n+        LEGACY_PROPERTIES.put(\"dubbo.protocol.port\", \"dubbo.service.server.port\");\r\n+        LEGACY_PROPERTIES.put(\"dubbo.protocol.threads\", \"dubbo.service.max.thread.pool.size\");\r\n+        LEGACY_PROPERTIES.put(\"dubbo.consumer.timeout\", \"dubbo.service.invoke.timeout\");\r\n+        LEGACY_PROPERTIES.put(\"dubbo.consumer.retries\", \"dubbo.service.max.retry.providers\");\r\n+        LEGACY_PROPERTIES.put(\"dubbo.consumer.check\", \"dubbo.service.allow.no.provider\");\r\n+        LEGACY_PROPERTIES.put(\"dubbo.service.url\", \"dubbo.service.address\");\r\n+    }\r\n+\r\n+    /**\r\n+     * The config id\r\n+     */\r\n+    protected String id;\r\n+    protected String prefix;\r\n+\r\n+    protected final AtomicBoolean refreshed = new AtomicBoolean(false);\r\n+\r\n+    private static String convertLegacyValue(String key, String value) {\r\n+        if (value != null && value.length() > 0) {\r\n+            if (\"dubbo.service.max.retry.providers\".equals(key)) {\r\n+                return String.valueOf(Integer.parseInt(value) - 1);\r\n+            } else if (\"dubbo.service.allow.no.provider\".equals(key)) {\r\n+                return String.valueOf(!Boolean.parseBoolean(value));\r\n+            }\r\n+        }\r\n+        return value;\r\n+    }\r\n+\r\n+    public static String getTagName(Class<?> cls) {\r\n+        String tag = cls.getSimpleName();\r\n+        for (String suffix : SUFFIXES) {\r\n+            if (tag.endsWith(suffix)) {\r\n+                tag = tag.substring(0, tag.length() - suffix.length());\r\n+                break;\r\n+            }\r\n+        }\r\n+        return StringUtils.camelToSplitName(tag, \"-\");\r\n+    }\r\n+\r\n+    public static void appendParameters(Map<String, String> parameters, Object config) {\r\n+        appendParameters(parameters, config, null);\r\n+    }\r\n+\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public static void appendParameters(Map<String, String> parameters, Object config, String prefix) {\r\n+        if (config == null) {\r\n+            return;\r\n+        }\r\n+        Method[] methods = config.getClass().getMethods();\r\n+        for (Method method : methods) {\r\n+            try {\r\n+                String name = method.getName();\r\n+                if (MethodUtils.isGetter(method)) {\r\n+                    Parameter parameter = method.getAnnotation(Parameter.class);\r\n+                    if (method.getReturnType() == Object.class || parameter != null && parameter.excluded()) {\r\n+                        continue;\r\n+                    }\r\n+                    String key;\r\n+                    if (parameter != null && parameter.key().length() > 0) {\r\n+                        key = parameter.key();\r\n+                    } else {\r\n+                        key = calculatePropertyFromGetter(name);\r\n+                    }\r\n+                    Object value = method.invoke(config);\r\n+                    String str = String.valueOf(value).trim();\r\n+                    if (value != null && str.length() > 0) {\r\n+                        if (parameter != null && parameter.escaped()) {\r\n+                            str = URL.encode(str);\r\n+                        }\r\n+                        if (parameter != null && parameter.append()) {\r\n+                            String pre = parameters.get(key);\r\n+                            if (pre != null && pre.length() > 0) {\r\n+                                str = pre + \",\" + str;\r\n+                            }\r\n+                        }\r\n+                        if (prefix != null && prefix.length() > 0) {\r\n+                            key = prefix + \".\" + key;\r\n+                        }\r\n+                        parameters.put(key, str);\r\n+                    } else if (parameter != null && parameter.required()) {\r\n+                        throw new IllegalStateException(config.getClass().getSimpleName() + \".\" + key + \" == null\");\r\n+                    }\r\n+                } else if (isParametersGetter(method)) {\r\n+                    Map<String, String> map = (Map<String, String>) method.invoke(config, new Object[0]);\r\n+                    parameters.putAll(convert(map, prefix));\r\n+                }\r\n+            } catch (Exception e) {\r\n+                throw new IllegalStateException(e.getMessage(), e);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    protected static void appendAttributes(Map<String, Object> parameters, Object config) {\r\n+        appendAttributes(parameters, config, null);\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    protected static void appendAttributes(Map<String, Object> parameters, Object config, String prefix) {\r\n+        if (config == null) {\r\n+            return;\r\n+        }\r\n+        Method[] methods = config.getClass().getMethods();\r\n+        for (Method method : methods) {\r\n+            try {\r\n+                Parameter parameter = method.getAnnotation(Parameter.class);\r\n+                if (parameter == null || !parameter.attribute()) {\r\n+                    continue;\r\n+                }\r\n+                String name = method.getName();\r\n+                if (MethodUtils.isGetter(method)) {\r\n+                    String key;\r\n+                    if (parameter.key().length() > 0) {\r\n+                        key = parameter.key();\r\n+                    } else {\r\n+                        key = calculateAttributeFromGetter(name);\r\n+                    }\r\n+                    Object value = method.invoke(config);\r\n+                    if (value != null) {\r\n+                        if (prefix != null && prefix.length() > 0) {\r\n+                            key = prefix + \".\" + key;\r\n+                        }\r\n+                        parameters.put(key, value);\r\n+                    }\r\n+                }\r\n+            } catch (Exception e) {\r\n+                throw new IllegalStateException(e.getMessage(), e);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    protected static AsyncMethodInfo convertMethodConfig2AsyncInfo(MethodConfig methodConfig) {\r\n+        if (methodConfig == null || (methodConfig.getOninvoke() == null && methodConfig.getOnreturn() == null && methodConfig.getOnthrow() == null)) {\r\n+            return null;\r\n+        }\r\n+\r\n+        //check config conflict\r\n+        if (Boolean.FALSE.equals(methodConfig.isReturn()) && (methodConfig.getOnreturn() != null || methodConfig.getOnthrow() != null)) {\r\n+            throw new IllegalStateException(\"method config error : return attribute must be set true when onreturn or onthrow has been set.\");\r\n+        }\r\n+\r\n+        AsyncMethodInfo asyncMethodInfo = new AsyncMethodInfo();\r\n+\r\n+        asyncMethodInfo.setOninvokeInstance(methodConfig.getOninvoke());\r\n+        asyncMethodInfo.setOnreturnInstance(methodConfig.getOnreturn());\r\n+        asyncMethodInfo.setOnthrowInstance(methodConfig.getOnthrow());\r\n+\r\n+        try {\r\n+            String oninvokeMethod = methodConfig.getOninvokeMethod();\r\n+            if (StringUtils.isNotEmpty(oninvokeMethod)) {\r\n+                asyncMethodInfo.setOninvokeMethod(getMethodByName(methodConfig.getOninvoke().getClass(), oninvokeMethod));\r\n+            }\r\n+\r\n+            String onreturnMethod = methodConfig.getOnreturnMethod();\r\n+            if (StringUtils.isNotEmpty(onreturnMethod)) {\r\n+                asyncMethodInfo.setOnreturnMethod(getMethodByName(methodConfig.getOnreturn().getClass(), onreturnMethod));\r\n+            }\r\n+\r\n+            String onthrowMethod = methodConfig.getOnthrowMethod();\r\n+            if (StringUtils.isNotEmpty(onthrowMethod)) {\r\n+                asyncMethodInfo.setOnthrowMethod(getMethodByName(methodConfig.getOnthrow().getClass(), onthrowMethod));\r\n+            }\r\n+        } catch (Exception e) {\r\n+            throw new IllegalStateException(e.getMessage(), e);\r\n+        }\r\n+\r\n+        return asyncMethodInfo;\r\n+    }\r\n+\r\n+    private static Method getMethodByName(Class<?> clazz, String methodName) {\r\n+        try {\r\n+            return ReflectUtils.findMethodByMethodName(clazz, methodName);\r\n+        } catch (Exception e) {\r\n+            throw new IllegalStateException(e);\r\n+        }\r\n+    }\r\n+\r\n+    protected static Set<String> getSubProperties(Map<String, String> properties, String prefix) {\r\n+        return properties.keySet().stream().filter(k -> k.contains(prefix)).map(k -> {\r\n+            k = k.substring(prefix.length());\r\n+            return k.substring(0, k.indexOf(\".\"));\r\n+        }).collect(Collectors.toSet());\r\n+    }\r\n+\r\n+    private static String extractPropertyName(Class<?> clazz, Method setter) throws Exception {\r\n+        String propertyName = setter.getName().substring(\"set\".length());\r\n+        Method getter = null;\r\n+        try {\r\n+            getter = clazz.getMethod(\"get\" + propertyName);\r\n+        } catch (NoSuchMethodException e) {\r\n+            getter = clazz.getMethod(\"is\" + propertyName);\r\n+        }\r\n+        Parameter parameter = getter.getAnnotation(Parameter.class);\r\n+        if (parameter != null && StringUtils.isNotEmpty(parameter.key()) && parameter.useKeyAsProperty()) {\r\n+            propertyName = parameter.key();\r\n+        } else {\r\n+            propertyName = propertyName.substring(0, 1).toLowerCase() + propertyName.substring(1);\r\n+        }\r\n+        return propertyName;\r\n+    }\r\n+\r\n+    private static String calculatePropertyFromGetter(String name) {\r\n+        int i = name.startsWith(\"get\") ? 3 : 2;\r\n+        return StringUtils.camelToSplitName(name.substring(i, i + 1).toLowerCase() + name.substring(i + 1), \".\");\r\n+    }\r\n+\r\n+    private static String calculateAttributeFromGetter(String getter) {\r\n+        int i = getter.startsWith(\"get\") ? 3 : 2;\r\n+        return getter.substring(i, i + 1).toLowerCase() + getter.substring(i + 1);\r\n+    }\r\n+\r\n+    private static void invokeSetParameters(Class c, Object o, Map map) {\r\n+        try {\r\n+            Method method = findMethodByMethodSignature(c, \"setParameters\", new String[]{Map.class.getName()});\r\n+            if (method != null && isParametersSetter(method)) {\r\n+                method.invoke(o, map);\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            // ignore\r\n+        }\r\n+    }\r\n+\r\n+    private static Map<String, String> invokeGetParameters(Class c, Object o) {\r\n+        try {\r\n+            Method method = findMethodByMethodSignature(c, \"getParameters\", null);\r\n+            if (method != null && isParametersGetter(method)) {\r\n+                return (Map<String, String>) method.invoke(o);\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            // ignore\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    private static boolean isParametersGetter(Method method) {\r\n+        String name = method.getName();\r\n+        return (\"getParameters\".equals(name)\r\n+                && Modifier.isPublic(method.getModifiers())\r\n+                && method.getParameterTypes().length == 0\r\n+                && method.getReturnType() == Map.class);\r\n+    }\r\n+\r\n+    private static boolean isParametersSetter(Method method) {\r\n+        return (\"setParameters\".equals(method.getName())\r\n+                && Modifier.isPublic(method.getModifiers())\r\n+                && method.getParameterCount() == 1\r\n+                && Map.class == method.getParameterTypes()[0]\r\n+                && method.getReturnType() == void.class);\r\n+    }\r\n+\r\n+    /**\r\n+     * @param parameters the raw parameters\r\n+     * @param prefix     the prefix\r\n+     * @return the parameters whose raw key will replace \"-\" to \".\"\r\n+     * @revised 2.7.8 \"private\" to be \"protected\"\r\n+     */\r\n+    protected static Map<String, String> convert(Map<String, String> parameters, String prefix) {\r\n+        if (parameters == null || parameters.isEmpty()) {\r\n+            return Collections.emptyMap();\r\n+        }\r\n+\r\n+        Map<String, String> result = new HashMap<>();\r\n+        String pre = (prefix != null && prefix.length() > 0 ? prefix + \".\" : \"\");\r\n+        for (Map.Entry<String, String> entry : parameters.entrySet()) {\r\n+            String key = entry.getKey();\r\n+            String value = entry.getValue();\r\n+            result.put(pre + key, value);\r\n+            // For compatibility, key like \"registry-type\" will has a duplicate key \"registry.type\"\r\n+            if (key.contains(\"-\")) {\r\n+                result.put(pre + key.replace('-', '.'), value);\r\n+            }\r\n+        }\r\n+        return result;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getId() {\r\n+        return id;\r\n+    }\r\n+\r\n+    public void setId(String id) {\r\n+        this.id = id;\r\n+    }\r\n+\r\n+    public void updateIdIfAbsent(String value) {\r\n+        if (StringUtils.isNotEmpty(value) && StringUtils.isEmpty(id)) {\r\n+            this.id = value;\r\n+        }\r\n+    }\r\n+\r\n+    protected void appendAnnotation(Class<?> annotationClass, Object annotation) {\r\n+        Method[] methods = annotationClass.getMethods();\r\n+        for (Method method : methods) {\r\n+            if (method.getDeclaringClass() != Object.class\r\n+                    && method.getReturnType() != void.class\r\n+                    && method.getParameterTypes().length == 0\r\n+                    && Modifier.isPublic(method.getModifiers())\r\n+                    && !Modifier.isStatic(method.getModifiers())) {\r\n+                try {\r\n+                    String property = method.getName();\r\n+                    if (\"interfaceClass\".equals(property) || \"interfaceName\".equals(property)) {\r\n+                        property = \"interface\";\r\n+                    }\r\n+                    String setter = \"set\" + property.substring(0, 1).toUpperCase() + property.substring(1);\r\n+                    Object value = method.invoke(annotation);\r\n+                    if (value != null && !value.equals(method.getDefaultValue())) {\r\n+                        Class<?> parameterType = ReflectUtils.getBoxedClass(method.getReturnType());\r\n+                        if (\"filter\".equals(property) || \"listener\".equals(property)) {\r\n+                            parameterType = String.class;\r\n+                            value = StringUtils.join((String[]) value, \",\");\r\n+                        } else if (\"parameters\".equals(property)) {\r\n+                            parameterType = Map.class;\r\n+                            value = CollectionUtils.toStringMap((String[]) value);\r\n+                        }\r\n+                        try {\r\n+                            Method setterMethod = getClass().getMethod(setter, parameterType);\r\n+                            setterMethod.invoke(this, value);\r\n+                        } catch (NoSuchMethodException e) {\r\n+                            // ignore\r\n+                        }\r\n+                    }\r\n+                } catch (Throwable e) {\r\n+                    logger.error(e.getMessage(), e);\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Should be called after Config was fully initialized.\r\n+     * // FIXME: this method should be completely replaced by appendParameters\r\n+     *\r\n+     * @return\r\n+     * @see AbstractConfig#appendParameters(Map, Object, String)\r\n+     * <p>\r\n+     * Notice! This method should include all properties in the returning map, treat @Parameter differently compared to appendParameters.\r\n+     */\r\n+    public Map<String, String> getMetaData() {\r\n+        Map<String, String> metaData = new HashMap<>();\r\n+        Method[] methods = this.getClass().getMethods();\r\n+        for (Method method : methods) {\r\n+            try {\r\n+                String name = method.getName();\r\n+                if (MethodUtils.isMetaMethod(method)) {\r\n+                    String key;\r\n+                    Parameter parameter = method.getAnnotation(Parameter.class);\r\n+                    if (parameter != null && parameter.key().length() > 0 && parameter.useKeyAsProperty()) {\r\n+                        key = parameter.key();\r\n+                    } else {\r\n+                        key = calculateAttributeFromGetter(name);\r\n+                    }\r\n+                    // treat url and configuration differently, the value should always present in configuration though it may not need to present in url.\r\n+                    //if (method.getReturnType() == Object.class || parameter != null && parameter.excluded()) {\r\n+                    if (method.getReturnType() == Object.class) {\r\n+                        metaData.put(key, null);\r\n+                        continue;\r\n+                    }\r\n+\r\n+                    /**\r\n+                     * Attributes annotated as deprecated should not override newly added replacement.\r\n+                     */\r\n+                    if (MethodUtils.isDeprecated(method) && metaData.get(key) != null) {\r\n+                        continue;\r\n+                    }\r\n+\r\n+                    Object value = method.invoke(this);\r\n+                    String str = String.valueOf(value).trim();\r\n+                    if (value != null && str.length() > 0) {\r\n+                        metaData.put(key, str);\r\n+                    } else {\r\n+                        metaData.put(key, null);\r\n+                    }\r\n+                } else if (isParametersGetter(method)) {\r\n+                    Map<String, String> map = (Map<String, String>) method.invoke(this, new Object[0]);\r\n+                    metaData.putAll(convert(map, \"\"));\r\n+                }\r\n+            } catch (Exception e) {\r\n+                throw new IllegalStateException(e.getMessage(), e);\r\n+            }\r\n+        }\r\n+        return metaData;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getPrefix() {\r\n+        return StringUtils.isNotEmpty(prefix) ? prefix : (CommonConstants.DUBBO + \".\" + getTagName(this.getClass()));\r\n+    }\r\n+\r\n+    public void setPrefix(String prefix) {\r\n+        this.prefix = prefix;\r\n+    }\r\n+\r\n+    public void refresh() {\r\n+        Environment env = ApplicationModel.getEnvironment();\r\n+        try {\r\n+            CompositeConfiguration compositeConfiguration = env.getPrefixedConfiguration(this);\r\n+            // loop methods, get override value and set the new value back to method\r\n+            Method[] methods = getClass().getMethods();\r\n+            for (Method method : methods) {\r\n+                if (MethodUtils.isSetter(method)) {\r\n+                    try {\r\n+                        String value = StringUtils.trim(compositeConfiguration.getString(extractPropertyName(getClass(), method)));\r\n+                        // isTypeMatch() is called to avoid duplicate and incorrect update, for example, we have two 'setGeneric' methods in ReferenceConfig.\r\n+                        if (StringUtils.isNotEmpty(value) && ClassUtils.isTypeMatch(method.getParameterTypes()[0], value)) {\r\n+                            method.invoke(this, ClassUtils.convertPrimitive(method.getParameterTypes()[0], value));\r\n+                        }\r\n+                    } catch (NoSuchMethodException e) {\r\n+                        logger.info(\"Failed to override the property \" + method.getName() + \" in \" +\r\n+                                this.getClass().getSimpleName() +\r\n+                                \", please make sure every property has getter/setter method provided.\");\r\n+                    }\r\n+                } else if (isParametersSetter(method)) {\r\n+                    String value = StringUtils.trim(compositeConfiguration.getString(extractPropertyName(getClass(), method)));\r\n+                    if (StringUtils.isNotEmpty(value)) {\r\n+                        Map<String, String> map = invokeGetParameters(getClass(), this);\r\n+                        map = map == null ? new HashMap<>() : map;\r\n+                        map.putAll(convert(StringUtils.parseParameters(value), \"\"));\r\n+                        invokeSetParameters(getClass(), this, map);\r\n+                    }\r\n+                }\r\n+            }\r\n+        } catch (Exception e) {\r\n+            logger.error(\"Failed to override \", e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        try {\r\n+            StringBuilder buf = new StringBuilder();\r\n+            buf.append(\"<dubbo:\");\r\n+            buf.append(getTagName(getClass()));\r\n+            Method[] methods = getClass().getMethods();\r\n+            for (Method method : methods) {\r\n+                try {\r\n+                    if (MethodUtils.isGetter(method)) {\r\n+                        String name = method.getName();\r\n+                        String key = calculateAttributeFromGetter(name);\r\n+\r\n+                        try {\r\n+                            getClass().getDeclaredField(key);\r\n+                        } catch (NoSuchFieldException e) {\r\n+                            // ignore\r\n+                            continue;\r\n+                        }\r\n+\r\n+                        Object value = method.invoke(this);\r\n+                        if (value != null) {\r\n+                            buf.append(\" \");\r\n+                            buf.append(key);\r\n+                            buf.append(\"=\\\"\");\r\n+                            buf.append(value);\r\n+                            buf.append(\"\\\"\");\r\n+                        }\r\n+                    }\r\n+                } catch (Exception e) {\r\n+                    logger.warn(e.getMessage(), e);\r\n+                }\r\n+            }\r\n+            buf.append(\" />\");\r\n+            return buf.toString();\r\n+        } catch (Throwable t) {\r\n+            logger.warn(t.getMessage(), t);\r\n+            return super.toString();\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * FIXME check @Parameter(required=true) and any conditions that need to match.\r\n+     */\r\n+    @Parameter(excluded = true)\r\n+    public boolean isValid() {\r\n+        return true;\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public boolean equals(Object obj) {\r\n+        if (obj == null || !(obj.getClass().getName().equals(this.getClass().getName()))) {\r\n+            return false;\r\n+        }\r\n+\r\n+        Method[] methods = this.getClass().getMethods();\r\n+        for (Method method1 : methods) {\r\n+            if (MethodUtils.isGetter(method1)) {\r\n+                Parameter parameter = method1.getAnnotation(Parameter.class);\r\n+                if (parameter != null && parameter.excluded()) {\r\n+                    continue;\r\n+                }\r\n+                try {\r\n+                    Method method2 = obj.getClass().getMethod(method1.getName(), method1.getParameterTypes());\r\n+                    Object value1 = method1.invoke(this, new Object[]{});\r\n+                    Object value2 = method2.invoke(obj, new Object[]{});\r\n+                    if (!Objects.equals(value1, value2)) {\r\n+                        return false;\r\n+                    }\r\n+                } catch (Exception e) {\r\n+                    return true;\r\n+                }\r\n+            }\r\n+        }\r\n+        return true;\r\n+    }\r\n+\r\n+    /**\r\n+     * Add {@link AbstractConfig instance} into {@link ConfigManager}\r\n+     * <p>\r\n+     * Current method will invoked by Spring or Java EE container automatically, or should be triggered manually.\r\n+     *\r\n+     * @see ConfigManager#addConfig(AbstractConfig)\r\n+     * @since 2.7.5\r\n+     */\r\n+    @PostConstruct\r\n+    public void addIntoConfigManager() {\r\n+        ApplicationModel.getConfigManager().addConfig(this);\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        int hashCode = 1;\r\n+\r\n+        Method[] methods = this.getClass().getMethods();\r\n+        for (Method method : methods) {\r\n+            if (MethodUtils.isGetter(method)) {\r\n+                Parameter parameter = method.getAnnotation(Parameter.class);\r\n+                if (parameter != null && parameter.excluded()) {\r\n+                    continue;\r\n+                }\r\n+                try {\r\n+                    Object value = method.invoke(this, new Object[]{});\r\n+                    hashCode = 31 * hashCode + value.hashCode();\r\n+                } catch (Exception ignored) {\r\n+                    //ignored\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        if (hashCode == 0) {\r\n+            hashCode = 1;\r\n+        }\r\n+\r\n+        return hashCode;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/AbstractInterfaceConfig.java", "source2": "org/apache/dubbo/config/AbstractInterfaceConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,758 +1,758 @@\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.config;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.Version;\n-import org.apache.dubbo.common.utils.Assert;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.ConfigUtils;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.context.ConfigManager;\n-import org.apache.dubbo.config.support.Parameter;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.ServiceMetadata;\n-\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.Collection;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Optional;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\n-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.INVOKER_LISTENER_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PID_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.REFERENCE_FILTER_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.RELEASE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TAG_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMESTAMP_KEY;\n-\n-/**\n- * AbstractDefaultConfig\n- *\n- * @export\n- */\n-public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {\n-\n-    private static final long serialVersionUID = -1559314110797223229L;\n-\n-    /**\n-     * The interface name of the exported service\n-     */\n-    protected String interfaceName;\n-    /**\n-     * The remote service version the customer/provider side will reference\n-     */\n-    protected String version;\n-\n-    /**\n-     * The remote service group the customer/provider side will reference\n-     */\n-    protected String group;\n-    \n-    protected ServiceMetadata serviceMetadata;\n-    /**\n-     * Local impl class name for the service interface\n-     */\n-    protected String local;\n-\n-    /**\n-     * Local stub class name for the service interface\n-     */\n-    protected String stub;\n-\n-    /**\n-     * Service monitor\n-     */\n-    protected MonitorConfig monitor;\n-\n-    /**\n-     * Strategies for generating dynamic agents\uff0cthere are two strategies can be choosed: jdk and javassist\n-     */\n-    protected String proxy;\n-\n-    /**\n-     * Cluster type\n-     */\n-    protected String cluster;\n-\n-    /**\n-     * The {@code Filter} when the provider side exposed a service or the customer side references a remote service used,\n-     * if there are more than one, you can use commas to separate them\n-     */\n-    protected String filter;\n-\n-    /**\n-     * The Listener when the provider side exposes a service or the customer side references a remote service used\n-     * if there are more than one, you can use commas to separate them\n-     */\n-    protected String listener;\n-\n-    /**\n-     * The owner of the service providers\n-     */\n-    protected String owner;\n-\n-    /**\n-     * Connection limits, 0 means shared connection, otherwise it defines the connections delegated to the current service\n-     */\n-    protected Integer connections;\n-\n-    /**\n-     * The layer of service providers\n-     */\n-    protected String layer;\n-\n-    /**\n-     * The application info\n-     */\n-    protected ApplicationConfig application;\n-\n-    /**\n-     * The module info\n-     */\n-    protected ModuleConfig module;\n-\n-    /**\n-     * The registry list the service will register to\n-     * Also see {@link #registryIds}, only one of them will work.\n-     */\n-    protected List<RegistryConfig> registries;\n-\n-    /**\n-     * The method configuration\n-     */\n-    private List<MethodConfig> methods;\n-\n-    /**\n-     * The id list of registries the service will register to\n-     * Also see {@link #registries}, only one of them will work.\n-     */\n-    protected String registryIds;\n-\n-    // connection events\n-    protected String onconnect;\n-\n-    /**\n-     * Disconnection events\n-     */\n-    protected String ondisconnect;\n-\n-    /**\n-     * The metrics configuration\n-     */\n-    protected MetricsConfig metrics;\n-    protected MetadataReportConfig metadataReportConfig;\n-\n-    protected ConfigCenterConfig configCenter;\n-\n-    // callback limits\n-    private Integer callbacks;\n-    // the scope for referring/exporting a service, if it's local, it means searching in current JVM only.\n-    private String scope;\n-\n-    protected String tag;\n-\n-    private  Boolean auth;\n-\n-\n-    /**\n-     * The url of the reference service\n-     */\n-    protected final List<URL> urls = new ArrayList<URL>();\n-\n-    public List<URL> getExportedUrls() {\n-        return urls;\n-    }\n-\n-    public URL toUrl() {\n-        return urls.isEmpty() ? null : urls.iterator().next();\n-    }\n-\n-    public List<URL> toUrls() {\n-        return urls;\n-    }\n-\n-    /**\n-     * Check whether the registry config is exists, and then conversion it to {@link RegistryConfig}\n-     */\n-    public void checkRegistry() {\n-        convertRegistryIdsToRegistries();\n-\n-        for (RegistryConfig registryConfig : registries) {\n-            if (!registryConfig.isValid()) {\n-                throw new IllegalStateException(\"No registry config found or it's not a valid config! \" +\n-                        \"The registry config is: \" + registryConfig);\n-            }\n-        }\n-    }\n-\n-    public static void appendRuntimeParameters(Map<String, String> map) {\n-        map.put(DUBBO_VERSION_KEY, Version.getProtocolVersion());\n-        map.put(RELEASE_KEY, Version.getVersion());\n-        map.put(TIMESTAMP_KEY, String.valueOf(System.currentTimeMillis()));\n-        if (ConfigUtils.getPid() > 0) {\n-            map.put(PID_KEY, String.valueOf(ConfigUtils.getPid()));\n-        }\n-    }\n-\n-    /**\n-     * Check whether the remote service interface and the methods meet with Dubbo's requirements.it mainly check, if the\n-     * methods configured in the configuration file are included in the interface of remote service\n-     *\n-     * @param interfaceClass the interface of remote service\n-     * @param methods        the methods configured\n-     */\n-    public void checkInterfaceAndMethods(Class<?> interfaceClass, List<MethodConfig> methods) {\n-        // interface cannot be null\n-        Assert.notNull(interfaceClass, new IllegalStateException(\"interface not allow null!\"));\n-\n-        // to verify interfaceClass is an interface\n-        if (!interfaceClass.isInterface()) {\n-            throw new IllegalStateException(\"The interface class \" + interfaceClass + \" is not a interface!\");\n-        }\n-        // check if methods exist in the remote service interface\n-        if (CollectionUtils.isNotEmpty(methods)) {\n-            for (MethodConfig methodBean : methods) {\n-                methodBean.setService(interfaceClass.getName());\n-                methodBean.setServiceId(this.getId());\n-                methodBean.refresh();\n-                String methodName = methodBean.getName();\n-                if (StringUtils.isEmpty(methodName)) {\n-                    throw new IllegalStateException(\"<dubbo:method> name attribute is required! Please check: \" +\n-                            \"<dubbo:service interface=\\\"\" + interfaceClass.getName() + \"\\\" ... >\" +\n-                            \"<dubbo:method name=\\\"\\\" ... /></<dubbo:reference>\");\n-                }\n-\n-                boolean hasMethod = Arrays.stream(interfaceClass.getMethods()).anyMatch(method -> method.getName().equals(methodName));\n-                if (!hasMethod) {\n-                    throw new IllegalStateException(\"The interface \" + interfaceClass.getName()\n-                            + \" not found method \" + methodName);\n-                }\n-            }\n-        }\n-    }\n-\n-\n-\n-    /**\n-     * Legitimacy check of stub, note that: the local will deprecated, and replace with <code>stub</code>\n-     *\n-     * @param interfaceClass for provider side, it is the {@link Class} of the service that will be exported; for consumer\n-     *                       side, it is the {@link Class} of the remote service interface\n-     */\n-    public void checkStubAndLocal(Class<?> interfaceClass) {\n-        verifyStubAndLocal(local, \"Local\", interfaceClass);\n-        verifyStubAndLocal(stub, \"Stub\", interfaceClass);\n-    }\n-    \n-    public void verifyStubAndLocal(String className, String label, Class<?> interfaceClass){\n-    \tif (ConfigUtils.isNotEmpty(className)) {\n-            Class<?> localClass = ConfigUtils.isDefault(className) ?\n-                    ReflectUtils.forName(interfaceClass.getName() + label) : ReflectUtils.forName(className);\n-                        verify(interfaceClass, localClass);\n-            }\n-    }\n-\n-    private void verify(Class<?> interfaceClass, Class<?> localClass) {\n-        if (!interfaceClass.isAssignableFrom(localClass)) {\n-            throw new IllegalStateException(\"The local implementation class \" + localClass.getName() +\n-                    \" not implement interface \" + interfaceClass.getName());\n-        }\n-\n-        try {\n-            //Check if the localClass a constructor with parameter who's type is interfaceClass\n-            ReflectUtils.findConstructor(localClass, interfaceClass);\n-        } catch (NoSuchMethodException e) {\n-            throw new IllegalStateException(\"No such constructor \\\"public \" + localClass.getSimpleName() +\n-                    \"(\" + interfaceClass.getName() + \")\\\" in local implementation class \" + localClass.getName());\n-        }\n-    }\n-\n-    private void convertRegistryIdsToRegistries() {\n-        computeValidRegistryIds();\n-        if (StringUtils.isEmpty(registryIds)) {\n-            if (CollectionUtils.isEmpty(registries)) {\n-                List<RegistryConfig> registryConfigs = ApplicationModel.getConfigManager().getDefaultRegistries();\n-                if (registryConfigs.isEmpty()) {\n-                    registryConfigs = new ArrayList<>();\n-                    RegistryConfig registryConfig = new RegistryConfig();\n-                    registryConfig.refresh();\n-                    registryConfigs.add(registryConfig);\n-                } else {\n-                    registryConfigs = new ArrayList<>(registryConfigs);\n-                }\n-                setRegistries(registryConfigs);\n-            }\n-        } else {\n-            String[] ids = COMMA_SPLIT_PATTERN.split(registryIds);\n-            List<RegistryConfig> tmpRegistries = new ArrayList<>();\n-            Arrays.stream(ids).forEach(id -> {\n-                if (tmpRegistries.stream().noneMatch(reg -> reg.getId().equals(id))) {\n-                    Optional<RegistryConfig> globalRegistry = ApplicationModel.getConfigManager().getRegistry(id);\n-                    if (globalRegistry.isPresent()) {\n-                        tmpRegistries.add(globalRegistry.get());\n-                    } else {\n-                        RegistryConfig registryConfig = new RegistryConfig();\n-                        registryConfig.setId(id);\n-                        registryConfig.refresh();\n-                        tmpRegistries.add(registryConfig);\n-                    }\n-                }\n-            });\n-\n-            if (tmpRegistries.size() > ids.length) {\n-                throw new IllegalStateException(\"Too much registries found, the registries assigned to this service \" +\n-                        \"are :\" + registryIds + \", but got \" + tmpRegistries.size() + \" registries!\");\n-            }\n-\n-            setRegistries(tmpRegistries);\n-        }\n-\n-    }\n-\n-    protected boolean notHasSelfRegistryProperty() {\n-        return CollectionUtils.isEmpty(registries) && StringUtils.isEmpty(registryIds);\n-    }\n-\n-    public void completeCompoundConfigs(AbstractInterfaceConfig interfaceConfig) {\n-        if (interfaceConfig != null) {\n-            if (application == null) {\n-                setApplication(interfaceConfig.getApplication());\n-            }\n-            if (module == null) {\n-                setModule(interfaceConfig.getModule());\n-            }\n-            if (notHasSelfRegistryProperty()) {\n-                setRegistries(interfaceConfig.getRegistries());\n-                setRegistryIds(interfaceConfig.getRegistryIds());\n-            }\n-            if (monitor == null) {\n-                setMonitor(interfaceConfig.getMonitor());\n-            }\n-        }\n-        if (module != null) {\n-            if (notHasSelfRegistryProperty()) {\n-                setRegistries(module.getRegistries());\n-            }\n-            if (monitor == null) {\n-                setMonitor(module.getMonitor());\n-            }\n-        }\n-        if (application != null) {\n-            if (notHasSelfRegistryProperty()) {\n-                setRegistries(application.getRegistries());\n-                setRegistryIds(application.getRegistryIds());\n-            }\n-            if (monitor == null) {\n-                setMonitor(application.getMonitor());\n-            }\n-        }\n-    }\n-    \n-    protected void computeValidRegistryIds() {\n-        if (application != null && notHasSelfRegistryProperty()) {\n-            setRegistries(application.getRegistries());\n-            setRegistryIds(application.getRegistryIds());\n-        }\n-    }\n-\n-    /**\n-     * @return local\n-     * @deprecated Replace to <code>getStub()</code>\n-     */\n-    @Deprecated\n-    public String getLocal() {\n-        return local;\n-    }\n-\n-    /**\n-     * @param local\n-     * @deprecated Replace to <code>setStub(Boolean)</code>\n-     */\n-    @Deprecated\n-    public void setLocal(Boolean local) {\n-        if (local == null) {\n-            setLocal((String) null);\n-        } else {\n-            setLocal(local.toString());\n-        }\n-    }\n-\n-    /**\n-     * @param local\n-     * @deprecated Replace to <code>setStub(String)</code>\n-     */\n-    @Deprecated\n-    public void setLocal(String local) {\n-        this.local = local;\n-    }\n-\n-    public String getStub() {\n-        return stub;\n-    }\n-\n-    public void setStub(Boolean stub) {\n-        if (stub == null) {\n-            setStub((String) null);\n-        } else {\n-            setStub(stub.toString());\n-        }\n-    }\n-\n-    public void setStub(String stub) {\n-        this.stub = stub;\n-    }\n-\n-    public String getCluster() {\n-        return cluster;\n-    }\n-\n-    public void setCluster(String cluster) {\n-        this.cluster = cluster;\n-    }\n-\n-    public String getProxy() {\n-        return proxy;\n-    }\n-\n-    public void setProxy(String proxy) {\n-\n-        this.proxy = proxy;\n-    }\n-\n-    public Integer getConnections() {\n-        return connections;\n-    }\n-\n-    public void setConnections(Integer connections) {\n-        this.connections = connections;\n-    }\n-\n-    @Parameter(key = REFERENCE_FILTER_KEY, append = true)\n-    public String getFilter() {\n-        return filter;\n-    }\n-\n-    public void setFilter(String filter) {\n-        this.filter = filter;\n-    }\n-\n-    @Parameter(key = INVOKER_LISTENER_KEY, append = true)\n-    public String getListener() {\n-        return listener;\n-    }\n-\n-    public void setListener(String listener) {\n-        this.listener = listener;\n-    }\n-\n-    public String getLayer() {\n-        return layer;\n-    }\n-\n-    public void setLayer(String layer) {\n-        this.layer = layer;\n-    }\n-\n-    /**\n-     * Always use the global ApplicationConfig\n-     */\n-    public ApplicationConfig getApplication() {\n-        ApplicationConfig globalApplication = ApplicationModel.getConfigManager().getApplicationOrElseThrow();\n-        if (globalApplication == null) {\n-            return application;\n-        }\n-        if (application != null && !StringUtils.isEquals(application.getName(), globalApplication.getName())) {\n-            return application;\n-        }\n-        return globalApplication;\n-    }\n-\n-    @Deprecated\n-    public void setApplication(ApplicationConfig application) {\n-        this.application = application;\n-        if (application != null) {\n-            ConfigManager configManager = ApplicationModel.getConfigManager();\n-            configManager.getApplication().orElseGet(() -> {\n-                configManager.setApplication(application);\n-                return application;\n-            });\n-        }\n-    }\n-\n-    public ModuleConfig getModule() {\n-        if (module != null) {\n-            return module;\n-        }\n-        return ApplicationModel.getConfigManager().getModule().orElse(null);\n-    }\n-\n-    @Deprecated\n-    public void setModule(ModuleConfig module) {\n-        this.module = module;\n-        if (module != null) {\n-            ConfigManager configManager = ApplicationModel.getConfigManager();\n-            configManager.getModule().orElseGet(() -> {\n-                configManager.setModule(module);\n-                return module;\n-            });\n-        }\n-    }\n-\n-    public RegistryConfig getRegistry() {\n-        return CollectionUtils.isEmpty(registries) ? null : registries.get(0);\n-    }\n-\n-    public void setRegistry(RegistryConfig registry) {\n-        List<RegistryConfig> registries = new ArrayList<RegistryConfig>(1);\n-        registries.add(registry);\n-        setRegistries(registries);\n-    }\n-\n-    public List<RegistryConfig> getRegistries() {\n-        return registries;\n-    }\n-\n-    @SuppressWarnings({\"unchecked\"})\n-    public void setRegistries(List<? extends RegistryConfig> registries) {\n-        this.registries = (List<RegistryConfig>) registries;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getRegistryIds() {\n-        return registryIds;\n-    }\n-\n-    public void setRegistryIds(String registryIds) {\n-        this.registryIds = registryIds;\n-    }\n-\n-\n-    public List<MethodConfig> getMethods() {\n-        return methods;\n-    }\n-\n-    // ======== Deprecated ========\n-\n-    @SuppressWarnings(\"unchecked\")\n-    public void setMethods(List<? extends MethodConfig> methods) {\n-        this.methods = (List<MethodConfig>) methods;\n-    }\n-\n-\n-    public MonitorConfig getMonitor() {\n-        if (monitor != null) {\n-            return monitor;\n-        }\n-        // FIXME: instead of return null, we should set default monitor when getMonitor() return null in ConfigManager\n-        return ApplicationModel.getConfigManager().getMonitor().orElse(null);\n-    }\n-\n-    @Deprecated\n-    public void setMonitor(String monitor) {\n-        setMonitor(new MonitorConfig(monitor));\n-    }\n-\n-    @Deprecated\n-    public void setMonitor(MonitorConfig monitor) {\n-        this.monitor = monitor;\n-        if (monitor != null) {\n-            ConfigManager configManager = ApplicationModel.getConfigManager();\n-            configManager.getMonitor().orElseGet(() -> {\n-                configManager.setMonitor(monitor);\n-                return monitor;\n-            });\n-        }\n-    }\n-\n-    public String getOwner() {\n-        return owner;\n-    }\n-\n-    public void setOwner(String owner) {\n-        this.owner = owner;\n-    }\n-\n-    @Deprecated\n-    public ConfigCenterConfig getConfigCenter() {\n-        if (configCenter != null) {\n-            return configCenter;\n-        }\n-        Collection<ConfigCenterConfig> configCenterConfigs = ApplicationModel.getConfigManager().getConfigCenters();\n-        if (CollectionUtils.isNotEmpty(configCenterConfigs)) {\n-            return configCenterConfigs.iterator().next();\n-        }\n-        return null;\n-    }\n-\n-    @Deprecated\n-    public void setConfigCenter(ConfigCenterConfig configCenter) {\n-        this.configCenter = configCenter;\n-        if (configCenter != null) {\n-            ConfigManager configManager = ApplicationModel.getConfigManager();\n-            Collection<ConfigCenterConfig> configs = configManager.getConfigCenters();\n-            if (CollectionUtils.isEmpty(configs)\n-                    || configs.stream().noneMatch(existed -> existed.equals(configCenter))) {\n-                configManager.addConfigCenter(configCenter);\n-            }\n-        }\n-    }\n-\n-    public Integer getCallbacks() {\n-        return callbacks;\n-    }\n-\n-    public void setCallbacks(Integer callbacks) {\n-        this.callbacks = callbacks;\n-    }\n-\n-    public String getOnconnect() {\n-        return onconnect;\n-    }\n-\n-    public void setOnconnect(String onconnect) {\n-        this.onconnect = onconnect;\n-    }\n-\n-    public String getOndisconnect() {\n-        return ondisconnect;\n-    }\n-\n-    public void setOndisconnect(String ondisconnect) {\n-        this.ondisconnect = ondisconnect;\n-    }\n-\n-    public String getScope() {\n-        return scope;\n-    }\n-\n-    public void setScope(String scope) {\n-        this.scope = scope;\n-    }\n-\n-    @Deprecated\n-    public MetadataReportConfig getMetadataReportConfig() {\n-        if (metadataReportConfig != null) {\n-            return metadataReportConfig;\n-        }\n-        Collection<MetadataReportConfig> metadataReportConfigs = ApplicationModel.getConfigManager().getMetadataConfigs();\n-        if (CollectionUtils.isNotEmpty(metadataReportConfigs)) {\n-            return metadataReportConfigs.iterator().next();\n-        }\n-        return null;\n-    }\n-\n-    @Deprecated\n-    public void setMetadataReportConfig(MetadataReportConfig metadataReportConfig) {\n-        this.metadataReportConfig = metadataReportConfig;\n-        if (metadataReportConfig != null) {\n-            ConfigManager configManager = ApplicationModel.getConfigManager();\n-            Collection<MetadataReportConfig> configs = configManager.getMetadataConfigs();\n-            if (CollectionUtils.isEmpty(configs)\n-                    || configs.stream().noneMatch(existed -> existed.equals(metadataReportConfig))) {\n-                configManager.addMetadataReport(metadataReportConfig);\n-            }\n-        }\n-    }\n-\n-    @Deprecated\n-    public MetricsConfig getMetrics() {\n-        if (metrics != null) {\n-            return metrics;\n-        }\n-        return ApplicationModel.getConfigManager().getMetrics().orElse(null);\n-    }\n-\n-    @Deprecated\n-    public void setMetrics(MetricsConfig metrics) {\n-        this.metrics = metrics;\n-        if (metrics != null) {\n-            ConfigManager configManager = ApplicationModel.getConfigManager();\n-            configManager.getMetrics().orElseGet(() -> {\n-                configManager.setMetrics(metrics);\n-                return metrics;\n-            });\n-        }\n-    }\n-\n-    @Parameter(key = TAG_KEY, useKeyAsProperty = false)\n-    public String getTag() {\n-        return tag;\n-    }\n-\n-    public void setTag(String tag) {\n-        this.tag = tag;\n-    }\n-\n-    public Boolean getAuth() {\n-        return auth;\n-    }\n-\n-    public void setAuth(Boolean auth) {\n-        this.auth = auth;\n-    }\n-\n-    public SslConfig getSslConfig() {\n-        return ApplicationModel.getConfigManager().getSsl().orElse(null);\n-    }\n-    \n-    public void initServiceMetadata(AbstractInterfaceConfig interfaceConfig) {\n-        serviceMetadata.setVersion(getVersion(interfaceConfig));\n-        serviceMetadata.setGroup(getGroup(interfaceConfig));\n-        serviceMetadata.setDefaultGroup(getGroup(interfaceConfig));\n-        serviceMetadata.setServiceInterfaceName(getInterface());\n-    }\n-    \n-    public String getGroup(AbstractInterfaceConfig interfaceConfig) {\n-        return StringUtils.isEmpty(this.group) ? (interfaceConfig != null ? interfaceConfig.getGroup() : this.group) : this.group;\n-    }\n-\n-    public String getVersion(AbstractInterfaceConfig interfaceConfig) {\n-        return StringUtils.isEmpty(this.version) ? (interfaceConfig != null ? interfaceConfig.getVersion() : this.version) : this.version;\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 getInterface() {\n-        return interfaceName;\n-    }\n-    \n-    public void setInterface(String interfaceName) {\n-        this.interfaceName = interfaceName;\n-//         if (StringUtils.isEmpty(id)) {\n-//             id = interfaceName;\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.config;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.Version;\r\n+import org.apache.dubbo.common.utils.Assert;\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.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.context.ConfigManager;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.ServiceMetadata;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+import java.util.Collection;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Optional;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.INVOKER_LISTENER_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PID_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.REFERENCE_FILTER_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.RELEASE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TAG_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMESTAMP_KEY;\r\n+\r\n+/**\r\n+ * AbstractDefaultConfig\r\n+ *\r\n+ * @export\r\n+ */\r\n+public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {\r\n+\r\n+    private static final long serialVersionUID = -1559314110797223229L;\r\n+\r\n+    /**\r\n+     * The interface name of the exported service\r\n+     */\r\n+    protected String interfaceName;\r\n+    /**\r\n+     * The remote service version the customer/provider side will reference\r\n+     */\r\n+    protected String version;\r\n+\r\n+    /**\r\n+     * The remote service group the customer/provider side will reference\r\n+     */\r\n+    protected String group;\r\n+    \r\n+    protected ServiceMetadata serviceMetadata;\r\n+    /**\r\n+     * Local impl class name for the service interface\r\n+     */\r\n+    protected String local;\r\n+\r\n+    /**\r\n+     * Local stub class name for the service interface\r\n+     */\r\n+    protected String stub;\r\n+\r\n+    /**\r\n+     * Service monitor\r\n+     */\r\n+    protected MonitorConfig monitor;\r\n+\r\n+    /**\r\n+     * Strategies for generating dynamic agents\uff0cthere are two strategies can be choosed: jdk and javassist\r\n+     */\r\n+    protected String proxy;\r\n+\r\n+    /**\r\n+     * Cluster type\r\n+     */\r\n+    protected String cluster;\r\n+\r\n+    /**\r\n+     * The {@code Filter} when the provider side exposed a service or the customer side references a remote service used,\r\n+     * if there are more than one, you can use commas to separate them\r\n+     */\r\n+    protected String filter;\r\n+\r\n+    /**\r\n+     * The Listener when the provider side exposes a service or the customer side references a remote service used\r\n+     * if there are more than one, you can use commas to separate them\r\n+     */\r\n+    protected String listener;\r\n+\r\n+    /**\r\n+     * The owner of the service providers\r\n+     */\r\n+    protected String owner;\r\n+\r\n+    /**\r\n+     * Connection limits, 0 means shared connection, otherwise it defines the connections delegated to the current service\r\n+     */\r\n+    protected Integer connections;\r\n+\r\n+    /**\r\n+     * The layer of service providers\r\n+     */\r\n+    protected String layer;\r\n+\r\n+    /**\r\n+     * The application info\r\n+     */\r\n+    protected ApplicationConfig application;\r\n+\r\n+    /**\r\n+     * The module info\r\n+     */\r\n+    protected ModuleConfig module;\r\n+\r\n+    /**\r\n+     * The registry list the service will register to\r\n+     * Also see {@link #registryIds}, only one of them will work.\r\n+     */\r\n+    protected List<RegistryConfig> registries;\r\n+\r\n+    /**\r\n+     * The method configuration\r\n+     */\r\n+    private List<MethodConfig> methods;\r\n+\r\n+    /**\r\n+     * The id list of registries the service will register to\r\n+     * Also see {@link #registries}, only one of them will work.\r\n+     */\r\n+    protected String registryIds;\r\n+\r\n+    // connection events\r\n+    protected String onconnect;\r\n+\r\n+    /**\r\n+     * Disconnection events\r\n+     */\r\n+    protected String ondisconnect;\r\n+\r\n+    /**\r\n+     * The metrics configuration\r\n+     */\r\n+    protected MetricsConfig metrics;\r\n+    protected MetadataReportConfig metadataReportConfig;\r\n+\r\n+    protected ConfigCenterConfig configCenter;\r\n+\r\n+    // callback limits\r\n+    private Integer callbacks;\r\n+    // the scope for referring/exporting a service, if it's local, it means searching in current JVM only.\r\n+    private String scope;\r\n+\r\n+    protected String tag;\r\n+\r\n+    private  Boolean auth;\r\n+\r\n+\r\n+    /**\r\n+     * The url of the reference service\r\n+     */\r\n+    protected final List<URL> urls = new ArrayList<URL>();\r\n+\r\n+    public List<URL> getExportedUrls() {\r\n+        return urls;\r\n+    }\r\n+\r\n+    public URL toUrl() {\r\n+        return urls.isEmpty() ? null : urls.iterator().next();\r\n+    }\r\n+\r\n+    public List<URL> toUrls() {\r\n+        return urls;\r\n+    }\r\n+\r\n+    /**\r\n+     * Check whether the registry config is exists, and then conversion it to {@link RegistryConfig}\r\n+     */\r\n+    public void checkRegistry() {\r\n+        convertRegistryIdsToRegistries();\r\n+\r\n+        for (RegistryConfig registryConfig : registries) {\r\n+            if (!registryConfig.isValid()) {\r\n+                throw new IllegalStateException(\"No registry config found or it's not a valid config! \" +\r\n+                        \"The registry config is: \" + registryConfig);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public static void appendRuntimeParameters(Map<String, String> map) {\r\n+        map.put(DUBBO_VERSION_KEY, Version.getProtocolVersion());\r\n+        map.put(RELEASE_KEY, Version.getVersion());\r\n+        map.put(TIMESTAMP_KEY, String.valueOf(System.currentTimeMillis()));\r\n+        if (ConfigUtils.getPid() > 0) {\r\n+            map.put(PID_KEY, String.valueOf(ConfigUtils.getPid()));\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Check whether the remote service interface and the methods meet with Dubbo's requirements.it mainly check, if the\r\n+     * methods configured in the configuration file are included in the interface of remote service\r\n+     *\r\n+     * @param interfaceClass the interface of remote service\r\n+     * @param methods        the methods configured\r\n+     */\r\n+    public void checkInterfaceAndMethods(Class<?> interfaceClass, List<MethodConfig> methods) {\r\n+        // interface cannot be null\r\n+        Assert.notNull(interfaceClass, new IllegalStateException(\"interface not allow null!\"));\r\n+\r\n+        // to verify interfaceClass is an interface\r\n+        if (!interfaceClass.isInterface()) {\r\n+            throw new IllegalStateException(\"The interface class \" + interfaceClass + \" is not a interface!\");\r\n+        }\r\n+        // check if methods exist in the remote service interface\r\n+        if (CollectionUtils.isNotEmpty(methods)) {\r\n+            for (MethodConfig methodBean : methods) {\r\n+                methodBean.setService(interfaceClass.getName());\r\n+                methodBean.setServiceId(this.getId());\r\n+                methodBean.refresh();\r\n+                String methodName = methodBean.getName();\r\n+                if (StringUtils.isEmpty(methodName)) {\r\n+                    throw new IllegalStateException(\"<dubbo:method> name attribute is required! Please check: \" +\r\n+                            \"<dubbo:service interface=\\\"\" + interfaceClass.getName() + \"\\\" ... >\" +\r\n+                            \"<dubbo:method name=\\\"\\\" ... /></<dubbo:reference>\");\r\n+                }\r\n+\r\n+                boolean hasMethod = Arrays.stream(interfaceClass.getMethods()).anyMatch(method -> method.getName().equals(methodName));\r\n+                if (!hasMethod) {\r\n+                    throw new IllegalStateException(\"The interface \" + interfaceClass.getName()\r\n+                            + \" not found method \" + methodName);\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+\r\n+\r\n+    /**\r\n+     * Legitimacy check of stub, note that: the local will deprecated, and replace with <code>stub</code>\r\n+     *\r\n+     * @param interfaceClass for provider side, it is the {@link Class} of the service that will be exported; for consumer\r\n+     *                       side, it is the {@link Class} of the remote service interface\r\n+     */\r\n+    public void checkStubAndLocal(Class<?> interfaceClass) {\r\n+        verifyStubAndLocal(local, \"Local\", interfaceClass);\r\n+        verifyStubAndLocal(stub, \"Stub\", interfaceClass);\r\n+    }\r\n+    \r\n+    public void verifyStubAndLocal(String className, String label, Class<?> interfaceClass){\r\n+    \tif (ConfigUtils.isNotEmpty(className)) {\r\n+            Class<?> localClass = ConfigUtils.isDefault(className) ?\r\n+                    ReflectUtils.forName(interfaceClass.getName() + label) : ReflectUtils.forName(className);\r\n+                        verify(interfaceClass, localClass);\r\n+            }\r\n+    }\r\n+\r\n+    private void verify(Class<?> interfaceClass, Class<?> localClass) {\r\n+        if (!interfaceClass.isAssignableFrom(localClass)) {\r\n+            throw new IllegalStateException(\"The local implementation class \" + localClass.getName() +\r\n+                    \" not implement interface \" + interfaceClass.getName());\r\n+        }\r\n+\r\n+        try {\r\n+            //Check if the localClass a constructor with parameter who's type is interfaceClass\r\n+            ReflectUtils.findConstructor(localClass, interfaceClass);\r\n+        } catch (NoSuchMethodException e) {\r\n+            throw new IllegalStateException(\"No such constructor \\\"public \" + localClass.getSimpleName() +\r\n+                    \"(\" + interfaceClass.getName() + \")\\\" in local implementation class \" + localClass.getName());\r\n+        }\r\n+    }\r\n+\r\n+    private void convertRegistryIdsToRegistries() {\r\n+        computeValidRegistryIds();\r\n+        if (StringUtils.isEmpty(registryIds)) {\r\n+            if (CollectionUtils.isEmpty(registries)) {\r\n+                List<RegistryConfig> registryConfigs = ApplicationModel.getConfigManager().getDefaultRegistries();\r\n+                if (registryConfigs.isEmpty()) {\r\n+                    registryConfigs = new ArrayList<>();\r\n+                    RegistryConfig registryConfig = new RegistryConfig();\r\n+                    registryConfig.refresh();\r\n+                    registryConfigs.add(registryConfig);\r\n+                } else {\r\n+                    registryConfigs = new ArrayList<>(registryConfigs);\r\n+                }\r\n+                setRegistries(registryConfigs);\r\n+            }\r\n+        } else {\r\n+            String[] ids = COMMA_SPLIT_PATTERN.split(registryIds);\r\n+            List<RegistryConfig> tmpRegistries = new ArrayList<>();\r\n+            Arrays.stream(ids).forEach(id -> {\r\n+                if (tmpRegistries.stream().noneMatch(reg -> reg.getId().equals(id))) {\r\n+                    Optional<RegistryConfig> globalRegistry = ApplicationModel.getConfigManager().getRegistry(id);\r\n+                    if (globalRegistry.isPresent()) {\r\n+                        tmpRegistries.add(globalRegistry.get());\r\n+                    } else {\r\n+                        RegistryConfig registryConfig = new RegistryConfig();\r\n+                        registryConfig.setId(id);\r\n+                        registryConfig.refresh();\r\n+                        tmpRegistries.add(registryConfig);\r\n+                    }\r\n+                }\r\n+            });\r\n+\r\n+            if (tmpRegistries.size() > ids.length) {\r\n+                throw new IllegalStateException(\"Too much registries found, the registries assigned to this service \" +\r\n+                        \"are :\" + registryIds + \", but got \" + tmpRegistries.size() + \" registries!\");\r\n+            }\r\n+\r\n+            setRegistries(tmpRegistries);\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    protected boolean notHasSelfRegistryProperty() {\r\n+        return CollectionUtils.isEmpty(registries) && StringUtils.isEmpty(registryIds);\r\n+    }\r\n+\r\n+    public void completeCompoundConfigs(AbstractInterfaceConfig interfaceConfig) {\r\n+        if (interfaceConfig != null) {\r\n+            if (application == null) {\r\n+                setApplication(interfaceConfig.getApplication());\r\n+            }\r\n+            if (module == null) {\r\n+                setModule(interfaceConfig.getModule());\r\n+            }\r\n+            if (notHasSelfRegistryProperty()) {\r\n+                setRegistries(interfaceConfig.getRegistries());\r\n+                setRegistryIds(interfaceConfig.getRegistryIds());\r\n+            }\r\n+            if (monitor == null) {\r\n+                setMonitor(interfaceConfig.getMonitor());\r\n+            }\r\n+        }\r\n+        if (module != null) {\r\n+            if (notHasSelfRegistryProperty()) {\r\n+                setRegistries(module.getRegistries());\r\n+            }\r\n+            if (monitor == null) {\r\n+                setMonitor(module.getMonitor());\r\n+            }\r\n+        }\r\n+        if (application != null) {\r\n+            if (notHasSelfRegistryProperty()) {\r\n+                setRegistries(application.getRegistries());\r\n+                setRegistryIds(application.getRegistryIds());\r\n+            }\r\n+            if (monitor == null) {\r\n+                setMonitor(application.getMonitor());\r\n+            }\r\n+        }\r\n+    }\r\n+    \r\n+    protected void computeValidRegistryIds() {\r\n+        if (application != null && notHasSelfRegistryProperty()) {\r\n+            setRegistries(application.getRegistries());\r\n+            setRegistryIds(application.getRegistryIds());\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * @return local\r\n+     * @deprecated Replace to <code>getStub()</code>\r\n+     */\r\n+    @Deprecated\r\n+    public String getLocal() {\r\n+        return local;\r\n+    }\r\n+\r\n+    /**\r\n+     * @param local\r\n+     * @deprecated Replace to <code>setStub(Boolean)</code>\r\n+     */\r\n+    @Deprecated\r\n+    public void setLocal(Boolean local) {\r\n+        if (local == null) {\r\n+            setLocal((String) null);\r\n+        } else {\r\n+            setLocal(local.toString());\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * @param local\r\n+     * @deprecated Replace to <code>setStub(String)</code>\r\n+     */\r\n+    @Deprecated\r\n+    public void setLocal(String local) {\r\n+        this.local = local;\r\n+    }\r\n+\r\n+    public String getStub() {\r\n+        return stub;\r\n+    }\r\n+\r\n+    public void setStub(Boolean stub) {\r\n+        if (stub == null) {\r\n+            setStub((String) null);\r\n+        } else {\r\n+            setStub(stub.toString());\r\n+        }\r\n+    }\r\n+\r\n+    public void setStub(String stub) {\r\n+        this.stub = stub;\r\n+    }\r\n+\r\n+    public String getCluster() {\r\n+        return cluster;\r\n+    }\r\n+\r\n+    public void setCluster(String cluster) {\r\n+        this.cluster = cluster;\r\n+    }\r\n+\r\n+    public String getProxy() {\r\n+        return proxy;\r\n+    }\r\n+\r\n+    public void setProxy(String proxy) {\r\n+\r\n+        this.proxy = proxy;\r\n+    }\r\n+\r\n+    public Integer getConnections() {\r\n+        return connections;\r\n+    }\r\n+\r\n+    public void setConnections(Integer connections) {\r\n+        this.connections = connections;\r\n+    }\r\n+\r\n+    @Parameter(key = REFERENCE_FILTER_KEY, append = true)\r\n+    public String getFilter() {\r\n+        return filter;\r\n+    }\r\n+\r\n+    public void setFilter(String filter) {\r\n+        this.filter = filter;\r\n+    }\r\n+\r\n+    @Parameter(key = INVOKER_LISTENER_KEY, append = true)\r\n+    public String getListener() {\r\n+        return listener;\r\n+    }\r\n+\r\n+    public void setListener(String listener) {\r\n+        this.listener = listener;\r\n+    }\r\n+\r\n+    public String getLayer() {\r\n+        return layer;\r\n+    }\r\n+\r\n+    public void setLayer(String layer) {\r\n+        this.layer = layer;\r\n+    }\r\n+\r\n+    /**\r\n+     * Always use the global ApplicationConfig\r\n+     */\r\n+    public ApplicationConfig getApplication() {\r\n+        ApplicationConfig globalApplication = ApplicationModel.getConfigManager().getApplicationOrElseThrow();\r\n+        if (globalApplication == null) {\r\n+            return application;\r\n+        }\r\n+        if (application != null && !StringUtils.isEquals(application.getName(), globalApplication.getName())) {\r\n+            return application;\r\n+        }\r\n+        return globalApplication;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setApplication(ApplicationConfig application) {\r\n+        this.application = application;\r\n+        if (application != null) {\r\n+            ConfigManager configManager = ApplicationModel.getConfigManager();\r\n+            configManager.getApplication().orElseGet(() -> {\r\n+                configManager.setApplication(application);\r\n+                return application;\r\n+            });\r\n+        }\r\n+    }\r\n+\r\n+    public ModuleConfig getModule() {\r\n+        if (module != null) {\r\n+            return module;\r\n+        }\r\n+        return ApplicationModel.getConfigManager().getModule().orElse(null);\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setModule(ModuleConfig module) {\r\n+        this.module = module;\r\n+        if (module != null) {\r\n+            ConfigManager configManager = ApplicationModel.getConfigManager();\r\n+            configManager.getModule().orElseGet(() -> {\r\n+                configManager.setModule(module);\r\n+                return module;\r\n+            });\r\n+        }\r\n+    }\r\n+\r\n+    public RegistryConfig getRegistry() {\r\n+        return CollectionUtils.isEmpty(registries) ? null : registries.get(0);\r\n+    }\r\n+\r\n+    public void setRegistry(RegistryConfig registry) {\r\n+        List<RegistryConfig> registries = new ArrayList<RegistryConfig>(1);\r\n+        registries.add(registry);\r\n+        setRegistries(registries);\r\n+    }\r\n+\r\n+    public List<RegistryConfig> getRegistries() {\r\n+        return registries;\r\n+    }\r\n+\r\n+    @SuppressWarnings({\"unchecked\"})\r\n+    public void setRegistries(List<? extends RegistryConfig> registries) {\r\n+        this.registries = (List<RegistryConfig>) registries;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getRegistryIds() {\r\n+        return registryIds;\r\n+    }\r\n+\r\n+    public void setRegistryIds(String registryIds) {\r\n+        this.registryIds = registryIds;\r\n+    }\r\n+\r\n+\r\n+    public List<MethodConfig> getMethods() {\r\n+        return methods;\r\n+    }\r\n+\r\n+    // ======== Deprecated ========\r\n+\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public void setMethods(List<? extends MethodConfig> methods) {\r\n+        this.methods = (List<MethodConfig>) methods;\r\n+    }\r\n+\r\n+\r\n+    public MonitorConfig getMonitor() {\r\n+        if (monitor != null) {\r\n+            return monitor;\r\n+        }\r\n+        // FIXME: instead of return null, we should set default monitor when getMonitor() return null in ConfigManager\r\n+        return ApplicationModel.getConfigManager().getMonitor().orElse(null);\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setMonitor(String monitor) {\r\n+        setMonitor(new MonitorConfig(monitor));\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setMonitor(MonitorConfig monitor) {\r\n+        this.monitor = monitor;\r\n+        if (monitor != null) {\r\n+            ConfigManager configManager = ApplicationModel.getConfigManager();\r\n+            configManager.getMonitor().orElseGet(() -> {\r\n+                configManager.setMonitor(monitor);\r\n+                return monitor;\r\n+            });\r\n+        }\r\n+    }\r\n+\r\n+    public String getOwner() {\r\n+        return owner;\r\n+    }\r\n+\r\n+    public void setOwner(String owner) {\r\n+        this.owner = owner;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public ConfigCenterConfig getConfigCenter() {\r\n+        if (configCenter != null) {\r\n+            return configCenter;\r\n+        }\r\n+        Collection<ConfigCenterConfig> configCenterConfigs = ApplicationModel.getConfigManager().getConfigCenters();\r\n+        if (CollectionUtils.isNotEmpty(configCenterConfigs)) {\r\n+            return configCenterConfigs.iterator().next();\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setConfigCenter(ConfigCenterConfig configCenter) {\r\n+        this.configCenter = configCenter;\r\n+        if (configCenter != null) {\r\n+            ConfigManager configManager = ApplicationModel.getConfigManager();\r\n+            Collection<ConfigCenterConfig> configs = configManager.getConfigCenters();\r\n+            if (CollectionUtils.isEmpty(configs)\r\n+                    || configs.stream().noneMatch(existed -> existed.equals(configCenter))) {\r\n+                configManager.addConfigCenter(configCenter);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public Integer getCallbacks() {\r\n+        return callbacks;\r\n+    }\r\n+\r\n+    public void setCallbacks(Integer callbacks) {\r\n+        this.callbacks = callbacks;\r\n+    }\r\n+\r\n+    public String getOnconnect() {\r\n+        return onconnect;\r\n+    }\r\n+\r\n+    public void setOnconnect(String onconnect) {\r\n+        this.onconnect = onconnect;\r\n+    }\r\n+\r\n+    public String getOndisconnect() {\r\n+        return ondisconnect;\r\n+    }\r\n+\r\n+    public void setOndisconnect(String ondisconnect) {\r\n+        this.ondisconnect = ondisconnect;\r\n+    }\r\n+\r\n+    public String getScope() {\r\n+        return scope;\r\n+    }\r\n+\r\n+    public void setScope(String scope) {\r\n+        this.scope = scope;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public MetadataReportConfig getMetadataReportConfig() {\r\n+        if (metadataReportConfig != null) {\r\n+            return metadataReportConfig;\r\n+        }\r\n+        Collection<MetadataReportConfig> metadataReportConfigs = ApplicationModel.getConfigManager().getMetadataConfigs();\r\n+        if (CollectionUtils.isNotEmpty(metadataReportConfigs)) {\r\n+            return metadataReportConfigs.iterator().next();\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setMetadataReportConfig(MetadataReportConfig metadataReportConfig) {\r\n+        this.metadataReportConfig = metadataReportConfig;\r\n+        if (metadataReportConfig != null) {\r\n+            ConfigManager configManager = ApplicationModel.getConfigManager();\r\n+            Collection<MetadataReportConfig> configs = configManager.getMetadataConfigs();\r\n+            if (CollectionUtils.isEmpty(configs)\r\n+                    || configs.stream().noneMatch(existed -> existed.equals(metadataReportConfig))) {\r\n+                configManager.addMetadataReport(metadataReportConfig);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public MetricsConfig getMetrics() {\r\n+        if (metrics != null) {\r\n+            return metrics;\r\n+        }\r\n+        return ApplicationModel.getConfigManager().getMetrics().orElse(null);\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setMetrics(MetricsConfig metrics) {\r\n+        this.metrics = metrics;\r\n+        if (metrics != null) {\r\n+            ConfigManager configManager = ApplicationModel.getConfigManager();\r\n+            configManager.getMetrics().orElseGet(() -> {\r\n+                configManager.setMetrics(metrics);\r\n+                return metrics;\r\n+            });\r\n+        }\r\n+    }\r\n+\r\n+    @Parameter(key = TAG_KEY, useKeyAsProperty = false)\r\n+    public String getTag() {\r\n+        return tag;\r\n+    }\r\n+\r\n+    public void setTag(String tag) {\r\n+        this.tag = tag;\r\n+    }\r\n+\r\n+    public Boolean getAuth() {\r\n+        return auth;\r\n+    }\r\n+\r\n+    public void setAuth(Boolean auth) {\r\n+        this.auth = auth;\r\n+    }\r\n+\r\n+    public SslConfig getSslConfig() {\r\n+        return ApplicationModel.getConfigManager().getSsl().orElse(null);\r\n+    }\r\n+    \r\n+    public void initServiceMetadata(AbstractInterfaceConfig interfaceConfig) {\r\n+        serviceMetadata.setVersion(getVersion(interfaceConfig));\r\n+        serviceMetadata.setGroup(getGroup(interfaceConfig));\r\n+        serviceMetadata.setDefaultGroup(getGroup(interfaceConfig));\r\n+        serviceMetadata.setServiceInterfaceName(getInterface());\r\n+    }\r\n+    \r\n+    public String getGroup(AbstractInterfaceConfig interfaceConfig) {\r\n+        return StringUtils.isEmpty(this.group) ? (interfaceConfig != null ? interfaceConfig.getGroup() : this.group) : this.group;\r\n+    }\r\n+\r\n+    public String getVersion(AbstractInterfaceConfig interfaceConfig) {\r\n+        return StringUtils.isEmpty(this.version) ? (interfaceConfig != null ? interfaceConfig.getVersion() : this.version) : this.version;\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 getInterface() {\r\n+        return interfaceName;\r\n+    }\r\n+    \r\n+    public void setInterface(String interfaceName) {\r\n+        this.interfaceName = interfaceName;\r\n+//         if (StringUtils.isEmpty(id)) {\r\n+//             id = interfaceName;\r\n+//         }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/AbstractMethodConfig.java", "source2": "org/apache/dubbo/config/AbstractMethodConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,208 +1,208 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.config;\n-\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import java.util.Map;\n-\n-/**\n- * AbstractMethodConfig\n- *\n- * @export\n- */\n-public abstract class AbstractMethodConfig extends AbstractConfig {\n-\n-    private static final long serialVersionUID = 1L;\n-\n-    /**\n-     * The timeout for remote invocation in milliseconds\n-     */\n-    protected Integer timeout;\n-\n-    /**\n-     * The retry times\n-     */\n-    protected Integer retries;\n-\n-    /**\n-     * max concurrent invocations\n-     */\n-    protected Integer actives;\n-\n-    /**\n-     * The load balance\n-     */\n-    protected String loadbalance;\n-\n-    /**\n-     * Whether to async\n-     * note that: it is an unreliable asynchronism that ignores return values and does not block threads.\n-     */\n-    protected Boolean async;\n-\n-    /**\n-     * Whether to ack async-sent\n-     */\n-    protected Boolean sent;\n-\n-    /**\n-     * The name of mock class which gets called when a service fails to execute\n-     * <p>\n-     * note that: the mock doesn't support on the provider side\uff0cand the mock is executed when a non-business exception\n-     * occurs after a remote service call\n-     */\n-    protected String mock;\n-\n-    /**\n-     * Merger\n-     */\n-    protected String merger;\n-\n-    /**\n-     * Cache the return result with the call parameter as key, the following options are available: lru, threadlocal,\n-     * jcache, etc.\n-     */\n-    protected String cache;\n-\n-    /**\n-     * Whether JSR303 standard annotation validation is enabled or not, if enabled, annotations on method parameters will\n-     * be validated\n-     */\n-    protected String validation;\n-\n-    /**\n-     * The customized parameters\n-     */\n-    protected Map<String, String> parameters;\n-\n-    /**\n-     * Forks for forking cluster\n-     */\n-    protected Integer forks;\n-\n-    public Integer getForks() {\n-        return forks;\n-    }\n-\n-    public void setForks(Integer forks) {\n-        this.forks = forks;\n-    }\n-\n-    public Integer getTimeout() {\n-        return timeout;\n-    }\n-\n-    public void setTimeout(Integer timeout) {\n-        this.timeout = timeout;\n-    }\n-\n-    public Integer getRetries() {\n-        return retries;\n-    }\n-\n-    public void setRetries(Integer retries) {\n-        this.retries = retries;\n-    }\n-\n-    public String getLoadbalance() {\n-        return loadbalance;\n-    }\n-\n-    public void setLoadbalance(String loadbalance) {\n-        this.loadbalance = loadbalance;\n-    }\n-\n-    public Boolean isAsync() {\n-        return async;\n-    }\n-\n-    public void setAsync(Boolean async) {\n-        this.async = async;\n-    }\n-\n-    public Integer getActives() {\n-        return actives;\n-    }\n-\n-    public void setActives(Integer actives) {\n-        this.actives = actives;\n-    }\n-\n-    public Boolean getSent() {\n-        return sent;\n-    }\n-\n-    public void setSent(Boolean sent) {\n-        this.sent = sent;\n-    }\n-\n-    @Parameter(escaped = true)\n-    public String getMock() {\n-        return mock;\n-    }\n-\n-    public void setMock(String mock) {\n-        this.mock = mock;\n-    }\n-\n-    /**\n-     * Set the property \"mock\"\n-     *\n-     * @param mock the value of mock\n-     * @since 2.7.6\n-     */\n-    public void setMock(Object mock) {\n-        if (mock == null) {\n-            return;\n-        }\n-        this.setMock(String.valueOf(mock));\n-    }\n-\n-    public String getMerger() {\n-        return merger;\n-    }\n-\n-    public void setMerger(String merger) {\n-        this.merger = merger;\n-    }\n-\n-    public String getCache() {\n-        return cache;\n-    }\n-\n-    public void setCache(String cache) {\n-        this.cache = cache;\n-    }\n-\n-    public String getValidation() {\n-        return validation;\n-    }\n-\n-    public void setValidation(String validation) {\n-        this.validation = validation;\n-    }\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-}\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.config;\r\n+\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * AbstractMethodConfig\r\n+ *\r\n+ * @export\r\n+ */\r\n+public abstract class AbstractMethodConfig extends AbstractConfig {\r\n+\r\n+    private static final long serialVersionUID = 1L;\r\n+\r\n+    /**\r\n+     * The timeout for remote invocation in milliseconds\r\n+     */\r\n+    protected Integer timeout;\r\n+\r\n+    /**\r\n+     * The retry times\r\n+     */\r\n+    protected Integer retries;\r\n+\r\n+    /**\r\n+     * max concurrent invocations\r\n+     */\r\n+    protected Integer actives;\r\n+\r\n+    /**\r\n+     * The load balance\r\n+     */\r\n+    protected String loadbalance;\r\n+\r\n+    /**\r\n+     * Whether to async\r\n+     * note that: it is an unreliable asynchronism that ignores return values and does not block threads.\r\n+     */\r\n+    protected Boolean async;\r\n+\r\n+    /**\r\n+     * Whether to ack async-sent\r\n+     */\r\n+    protected Boolean sent;\r\n+\r\n+    /**\r\n+     * The name of mock class which gets called when a service fails to execute\r\n+     * <p>\r\n+     * note that: the mock doesn't support on the provider side\uff0cand the mock is executed when a non-business exception\r\n+     * occurs after a remote service call\r\n+     */\r\n+    protected String mock;\r\n+\r\n+    /**\r\n+     * Merger\r\n+     */\r\n+    protected String merger;\r\n+\r\n+    /**\r\n+     * Cache the return result with the call parameter as key, the following options are available: lru, threadlocal,\r\n+     * jcache, etc.\r\n+     */\r\n+    protected String cache;\r\n+\r\n+    /**\r\n+     * Whether JSR303 standard annotation validation is enabled or not, if enabled, annotations on method parameters will\r\n+     * be validated\r\n+     */\r\n+    protected String validation;\r\n+\r\n+    /**\r\n+     * The customized parameters\r\n+     */\r\n+    protected Map<String, String> parameters;\r\n+\r\n+    /**\r\n+     * Forks for forking cluster\r\n+     */\r\n+    protected Integer forks;\r\n+\r\n+    public Integer getForks() {\r\n+        return forks;\r\n+    }\r\n+\r\n+    public void setForks(Integer forks) {\r\n+        this.forks = forks;\r\n+    }\r\n+\r\n+    public Integer getTimeout() {\r\n+        return timeout;\r\n+    }\r\n+\r\n+    public void setTimeout(Integer timeout) {\r\n+        this.timeout = timeout;\r\n+    }\r\n+\r\n+    public Integer getRetries() {\r\n+        return retries;\r\n+    }\r\n+\r\n+    public void setRetries(Integer retries) {\r\n+        this.retries = retries;\r\n+    }\r\n+\r\n+    public String getLoadbalance() {\r\n+        return loadbalance;\r\n+    }\r\n+\r\n+    public void setLoadbalance(String loadbalance) {\r\n+        this.loadbalance = loadbalance;\r\n+    }\r\n+\r\n+    public Boolean isAsync() {\r\n+        return async;\r\n+    }\r\n+\r\n+    public void setAsync(Boolean async) {\r\n+        this.async = async;\r\n+    }\r\n+\r\n+    public Integer getActives() {\r\n+        return actives;\r\n+    }\r\n+\r\n+    public void setActives(Integer actives) {\r\n+        this.actives = actives;\r\n+    }\r\n+\r\n+    public Boolean getSent() {\r\n+        return sent;\r\n+    }\r\n+\r\n+    public void setSent(Boolean sent) {\r\n+        this.sent = sent;\r\n+    }\r\n+\r\n+    @Parameter(escaped = true)\r\n+    public String getMock() {\r\n+        return mock;\r\n+    }\r\n+\r\n+    public void setMock(String mock) {\r\n+        this.mock = mock;\r\n+    }\r\n+\r\n+    /**\r\n+     * Set the property \"mock\"\r\n+     *\r\n+     * @param mock the value of mock\r\n+     * @since 2.7.6\r\n+     */\r\n+    public void setMock(Object mock) {\r\n+        if (mock == null) {\r\n+            return;\r\n+        }\r\n+        this.setMock(String.valueOf(mock));\r\n+    }\r\n+\r\n+    public String getMerger() {\r\n+        return merger;\r\n+    }\r\n+\r\n+    public void setMerger(String merger) {\r\n+        this.merger = merger;\r\n+    }\r\n+\r\n+    public String getCache() {\r\n+        return cache;\r\n+    }\r\n+\r\n+    public void setCache(String cache) {\r\n+        this.cache = cache;\r\n+    }\r\n+\r\n+    public String getValidation() {\r\n+        return validation;\r\n+    }\r\n+\r\n+    public void setValidation(String validation) {\r\n+        this.validation = validation;\r\n+    }\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+}\r\n"}, {"source1": "org/apache/dubbo/config/AbstractReferenceConfig.java", "source2": "org/apache/dubbo/config/AbstractReferenceConfig.java", "comments": ["Line-ending 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.config;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.support.Parameter;\n-import org.apache.dubbo.rpc.support.ProtocolUtils;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.INVOKER_LISTENER_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.REFERENCE_FILTER_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.STUB_EVENT_KEY;\n-\n-/**\n- * AbstractConsumerConfig\n- *\n- * @export\n- * @see ReferenceConfigBase\n- */\n-public abstract class AbstractReferenceConfig extends AbstractInterfaceConfig {\n-\n-    private static final long serialVersionUID = -2786526984373031126L;\n-\n-    // ======== Reference config default values, will take effect if reference's attribute is not set  ========\n-\n-    /**\n-     * Check if service provider exists, if not exists, it will be fast fail\n-     */\n-    protected Boolean check;\n-\n-    /**\n-     * Whether to eagle-init\n-     */\n-    protected Boolean init;\n-\n-    /**\n-     * Whether to use generic interface\n-     */\n-    protected String generic;\n-\n-    /**\n-     * Whether to find reference's instance from the current JVM\n-     */\n-    protected Boolean injvm;\n-\n-    /**\n-     * Lazy create connection\n-     */\n-    protected Boolean lazy;\n-\n-    protected String reconnect;\n-\n-    protected Boolean sticky = false;\n-\n-    /**\n-     * Whether to support event in stub.\n-     */\n-    //TODO solve merge problem\n-    protected Boolean stubevent;//= Constants.DEFAULT_STUB_EVENT;\n-\n-\n-\n-    /**\n-     * declares which app or service this interface belongs to\n-     */\n-    protected String providedBy;\n-\n-    protected String router;\n-\n-    public Boolean isCheck() {\n-        return check;\n-    }\n-\n-    public void setCheck(Boolean check) {\n-        this.check = check;\n-    }\n-\n-    public Boolean isInit() {\n-        return init;\n-    }\n-\n-    public void setInit(Boolean init) {\n-        this.init = init;\n-    }\n-\n-    @Deprecated\n-    @Parameter(excluded = true)\n-    public Boolean isGeneric() {\n-        return this.generic != null ? ProtocolUtils.isGeneric(generic) : null;\n-    }\n-\n-    @Deprecated\n-    public void setGeneric(Boolean generic) {\n-        if (generic != null) {\n-            this.generic = generic.toString();\n-        }\n-    }\n-\n-    public String getGeneric() {\n-        return generic;\n-    }\n-\n-    public void setGeneric(String generic) {\n-        if (StringUtils.isEmpty(generic)) {\n-            return;\n-        }\n-        if (ProtocolUtils.isValidGenericValue(generic)) {\n-            this.generic = generic;\n-        } else {\n-            throw new IllegalArgumentException(\"Unsupported generic type \" + generic);\n-        }\n-    }\n-\n-    /**\n-     * @return\n-     * @deprecated instead, use the parameter <b>scope</> to judge if it's in jvm, scope=local\n-     */\n-    @Deprecated\n-    public Boolean isInjvm() {\n-        return injvm;\n-    }\n-\n-    /**\n-     * @param injvm\n-     * @deprecated instead, use the parameter <b>scope</b> to judge if it's in jvm, scope=local\n-     */\n-    @Deprecated\n-    public void setInjvm(Boolean injvm) {\n-        this.injvm = injvm;\n-    }\n-\n-    @Override\n-    @Parameter(key = REFERENCE_FILTER_KEY, append = true)\n-    public String getFilter() {\n-        return super.getFilter();\n-    }\n-\n-    @Override\n-    @Parameter(key = INVOKER_LISTENER_KEY, append = true)\n-    public String getListener() {\n-        return super.getListener();\n-    }\n-\n-    @Override\n-    public void setListener(String listener) {\n-        super.setListener(listener);\n-    }\n-\n-    public Boolean getLazy() {\n-        return lazy;\n-    }\n-\n-    public void setLazy(Boolean lazy) {\n-        this.lazy = lazy;\n-    }\n-\n-    @Override\n-    public void setOnconnect(String onconnect) {\n-        if (onconnect != null && onconnect.length() > 0) {\n-            this.stubevent = true;\n-        }\n-        super.setOnconnect(onconnect);\n-    }\n-\n-    @Override\n-    public void setOndisconnect(String ondisconnect) {\n-        if (ondisconnect != null && ondisconnect.length() > 0) {\n-            this.stubevent = true;\n-        }\n-        super.setOndisconnect(ondisconnect);\n-    }\n-\n-    @Parameter(key = STUB_EVENT_KEY)\n-    public Boolean getStubevent() {\n-        return stubevent;\n-    }\n-\n-    public String getReconnect() {\n-        return reconnect;\n-    }\n-\n-    public void setReconnect(String reconnect) {\n-        this.reconnect = reconnect;\n-    }\n-\n-    public Boolean getSticky() {\n-        return sticky;\n-    }\n-\n-    public void setSticky(Boolean sticky) {\n-        this.sticky = sticky;\n-    }\n-\n-\n-\n-    @Parameter(key = \"provided-by\")\n-    public String getProvidedBy() {\n-        return providedBy;\n-    }\n-\n-    public void setProvidedBy(String providedBy) {\n-        this.providedBy = providedBy;\n-    }\n-\n-    @Parameter(key = \"router\", append = true)\n-    public String getRouter() {\n-        return router;\n-    }\n-\n-    public void setRouter(String router) {\n-        this.router = router;\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.config;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+import org.apache.dubbo.rpc.support.ProtocolUtils;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.INVOKER_LISTENER_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.REFERENCE_FILTER_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.STUB_EVENT_KEY;\r\n+\r\n+/**\r\n+ * AbstractConsumerConfig\r\n+ *\r\n+ * @export\r\n+ * @see ReferenceConfigBase\r\n+ */\r\n+public abstract class AbstractReferenceConfig extends AbstractInterfaceConfig {\r\n+\r\n+    private static final long serialVersionUID = -2786526984373031126L;\r\n+\r\n+    // ======== Reference config default values, will take effect if reference's attribute is not set  ========\r\n+\r\n+    /**\r\n+     * Check if service provider exists, if not exists, it will be fast fail\r\n+     */\r\n+    protected Boolean check;\r\n+\r\n+    /**\r\n+     * Whether to eagle-init\r\n+     */\r\n+    protected Boolean init;\r\n+\r\n+    /**\r\n+     * Whether to use generic interface\r\n+     */\r\n+    protected String generic;\r\n+\r\n+    /**\r\n+     * Whether to find reference's instance from the current JVM\r\n+     */\r\n+    protected Boolean injvm;\r\n+\r\n+    /**\r\n+     * Lazy create connection\r\n+     */\r\n+    protected Boolean lazy;\r\n+\r\n+    protected String reconnect;\r\n+\r\n+    protected Boolean sticky = false;\r\n+\r\n+    /**\r\n+     * Whether to support event in stub.\r\n+     */\r\n+    //TODO solve merge problem\r\n+    protected Boolean stubevent;//= Constants.DEFAULT_STUB_EVENT;\r\n+\r\n+\r\n+\r\n+    /**\r\n+     * declares which app or service this interface belongs to\r\n+     */\r\n+    protected String providedBy;\r\n+\r\n+    protected String router;\r\n+\r\n+    public Boolean isCheck() {\r\n+        return check;\r\n+    }\r\n+\r\n+    public void setCheck(Boolean check) {\r\n+        this.check = check;\r\n+    }\r\n+\r\n+    public Boolean isInit() {\r\n+        return init;\r\n+    }\r\n+\r\n+    public void setInit(Boolean init) {\r\n+        this.init = init;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    @Parameter(excluded = true)\r\n+    public Boolean isGeneric() {\r\n+        return this.generic != null ? ProtocolUtils.isGeneric(generic) : null;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setGeneric(Boolean generic) {\r\n+        if (generic != null) {\r\n+            this.generic = generic.toString();\r\n+        }\r\n+    }\r\n+\r\n+    public String getGeneric() {\r\n+        return generic;\r\n+    }\r\n+\r\n+    public void setGeneric(String generic) {\r\n+        if (StringUtils.isEmpty(generic)) {\r\n+            return;\r\n+        }\r\n+        if (ProtocolUtils.isValidGenericValue(generic)) {\r\n+            this.generic = generic;\r\n+        } else {\r\n+            throw new IllegalArgumentException(\"Unsupported generic type \" + generic);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * @return\r\n+     * @deprecated instead, use the parameter <b>scope</> to judge if it's in jvm, scope=local\r\n+     */\r\n+    @Deprecated\r\n+    public Boolean isInjvm() {\r\n+        return injvm;\r\n+    }\r\n+\r\n+    /**\r\n+     * @param injvm\r\n+     * @deprecated instead, use the parameter <b>scope</b> to judge if it's in jvm, scope=local\r\n+     */\r\n+    @Deprecated\r\n+    public void setInjvm(Boolean injvm) {\r\n+        this.injvm = injvm;\r\n+    }\r\n+\r\n+    @Override\r\n+    @Parameter(key = REFERENCE_FILTER_KEY, append = true)\r\n+    public String getFilter() {\r\n+        return super.getFilter();\r\n+    }\r\n+\r\n+    @Override\r\n+    @Parameter(key = INVOKER_LISTENER_KEY, append = true)\r\n+    public String getListener() {\r\n+        return super.getListener();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setListener(String listener) {\r\n+        super.setListener(listener);\r\n+    }\r\n+\r\n+    public Boolean getLazy() {\r\n+        return lazy;\r\n+    }\r\n+\r\n+    public void setLazy(Boolean lazy) {\r\n+        this.lazy = lazy;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setOnconnect(String onconnect) {\r\n+        if (onconnect != null && onconnect.length() > 0) {\r\n+            this.stubevent = true;\r\n+        }\r\n+        super.setOnconnect(onconnect);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setOndisconnect(String ondisconnect) {\r\n+        if (ondisconnect != null && ondisconnect.length() > 0) {\r\n+            this.stubevent = true;\r\n+        }\r\n+        super.setOndisconnect(ondisconnect);\r\n+    }\r\n+\r\n+    @Parameter(key = STUB_EVENT_KEY)\r\n+    public Boolean getStubevent() {\r\n+        return stubevent;\r\n+    }\r\n+\r\n+    public String getReconnect() {\r\n+        return reconnect;\r\n+    }\r\n+\r\n+    public void setReconnect(String reconnect) {\r\n+        this.reconnect = reconnect;\r\n+    }\r\n+\r\n+    public Boolean getSticky() {\r\n+        return sticky;\r\n+    }\r\n+\r\n+    public void setSticky(Boolean sticky) {\r\n+        this.sticky = sticky;\r\n+    }\r\n+\r\n+\r\n+\r\n+    @Parameter(key = \"provided-by\")\r\n+    public String getProvidedBy() {\r\n+        return providedBy;\r\n+    }\r\n+\r\n+    public void setProvidedBy(String providedBy) {\r\n+        this.providedBy = providedBy;\r\n+    }\r\n+\r\n+    @Parameter(key = \"router\", append = true)\r\n+    public String getRouter() {\r\n+        return router;\r\n+    }\r\n+\r\n+    public void setRouter(String router) {\r\n+        this.router = router;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/AbstractServiceConfig.java", "source2": "org/apache/dubbo/config/AbstractServiceConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,291 +1,291 @@\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.config;\n-\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.List;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.EXPORTER_LISTENER_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.SERVICE_FILTER_KEY;\n-\n-/**\n- * AbstractServiceConfig\n- *\n- * @export\n- */\n-public abstract class AbstractServiceConfig extends AbstractInterfaceConfig {\n-\n-    private static final long serialVersionUID = 1L;\n-\n-    /**\n-     * The service version\n-     */\n-    protected String version;\n-\n-    /**\n-     * The service group\n-     */\n-    protected String group;\n-\n-    /**\n-     * whether the service is deprecated\n-     */\n-    protected Boolean deprecated = false;\n-\n-    /**\n-     * The time delay register service (milliseconds)\n-     */\n-    protected Integer delay;\n-\n-    /**\n-     * Whether to export the service\n-     */\n-    protected Boolean export;\n-\n-    /**\n-     * The service weight\n-     */\n-    protected Integer weight;\n-\n-    /**\n-     * Document center\n-     */\n-    protected String document;\n-\n-    /**\n-     * Whether to register as a dynamic service or not on register center, the value is true, the status will be enabled\n-     * after the service registered,and it needs to be disabled manually; if you want to disable the service, you also need\n-     * manual processing\n-     */\n-    protected Boolean dynamic = true;\n-\n-    /**\n-     * Whether to use token\n-     */\n-    protected String token;\n-\n-    /**\n-     * Whether to export access logs to logs\n-     */\n-    protected String accesslog;\n-\n-    /**\n-     * The protocol list the service will export with\n-     * Also see {@link #protocolIds}, only one of them will work.\n-     */\n-    protected List<ProtocolConfig> protocols;\n-\n-    /**\n-     * The id list of protocols the service will export with\n-     * Also see {@link #protocols}, only one of them will work.\n-     */\n-    protected String protocolIds;\n-\n-    // max allowed execute times\n-    private Integer executes;\n-\n-    /**\n-     * Whether to register\n-     */\n-    private Boolean register;\n-\n-    /**\n-     * Warm up period\n-     */\n-    private Integer warmup;\n-\n-    /**\n-     * The serialization type\n-     */\n-    private String serialization;\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 Integer getDelay() {\n-        return delay;\n-    }\n-\n-    public void setDelay(Integer delay) {\n-        this.delay = delay;\n-    }\n-\n-    public Boolean getExport() {\n-        return export;\n-    }\n-\n-    public void setExport(Boolean export) {\n-        this.export = export;\n-    }\n-\n-    public Integer getWeight() {\n-        return weight;\n-    }\n-\n-    public void setWeight(Integer weight) {\n-        this.weight = weight;\n-    }\n-\n-    @Parameter(escaped = true)\n-    public String getDocument() {\n-        return document;\n-    }\n-\n-    public void setDocument(String document) {\n-        this.document = document;\n-    }\n-\n-    public String getToken() {\n-        return token;\n-    }\n-\n-    public void setToken(Boolean token) {\n-        if (token == null) {\n-            setToken((String) null);\n-        } else {\n-            setToken(String.valueOf(token));\n-        }\n-    }\n-\n-    public void setToken(String token) {\n-        this.token = token;\n-    }\n-\n-    public Boolean isDeprecated() {\n-        return deprecated;\n-    }\n-\n-    public void setDeprecated(Boolean deprecated) {\n-        this.deprecated = deprecated;\n-    }\n-\n-    public Boolean isDynamic() {\n-        return dynamic;\n-    }\n-\n-    public void setDynamic(Boolean dynamic) {\n-        this.dynamic = dynamic;\n-    }\n-\n-    public List<ProtocolConfig> getProtocols() {\n-        return protocols;\n-    }\n-\n-    @SuppressWarnings({\"unchecked\"})\n-    public void setProtocols(List<? extends ProtocolConfig> protocols) {\n-        this.protocols = (List<ProtocolConfig>) protocols;\n-    }\n-\n-    public ProtocolConfig getProtocol() {\n-        return CollectionUtils.isEmpty(protocols) ? null : protocols.get(0);\n-    }\n-\n-    public void setProtocol(ProtocolConfig protocol) {\n-        setProtocols(new ArrayList<>(Arrays.asList(protocol)));\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getProtocolIds() {\n-        return protocolIds;\n-    }\n-\n-    public void setProtocolIds(String protocolIds) {\n-        this.protocolIds = protocolIds;\n-    }\n-\n-    public String getAccesslog() {\n-        return accesslog;\n-    }\n-\n-    public void setAccesslog(Boolean accesslog) {\n-        if (accesslog == null) {\n-            setAccesslog((String) null);\n-        } else {\n-            setAccesslog(String.valueOf(accesslog));\n-        }\n-    }\n-\n-    public void setAccesslog(String accesslog) {\n-        this.accesslog = accesslog;\n-    }\n-\n-    public Integer getExecutes() {\n-        return executes;\n-    }\n-\n-    public void setExecutes(Integer executes) {\n-        this.executes = executes;\n-    }\n-\n-    @Override\n-    @Parameter(key = SERVICE_FILTER_KEY, append = true)\n-    public String getFilter() {\n-        return super.getFilter();\n-    }\n-\n-    @Override\n-    @Parameter(key = EXPORTER_LISTENER_KEY, append = true)\n-    public String getListener() {\n-        return listener;\n-    }\n-\n-    @Override\n-    public void setListener(String listener) {\n-        this.listener = listener;\n-    }\n-\n-    public Boolean isRegister() {\n-        return register;\n-    }\n-\n-    public void setRegister(Boolean register) {\n-        this.register = register;\n-    }\n-\n-    public Integer getWarmup() {\n-        return warmup;\n-    }\n-\n-    public void setWarmup(Integer warmup) {\n-        this.warmup = warmup;\n-    }\n-\n-    public String getSerialization() {\n-        return serialization;\n-    }\n-\n-    public void setSerialization(String serialization) {\n-        this.serialization = serialization;\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.config;\r\n+\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+import java.util.List;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.EXPORTER_LISTENER_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SERVICE_FILTER_KEY;\r\n+\r\n+/**\r\n+ * AbstractServiceConfig\r\n+ *\r\n+ * @export\r\n+ */\r\n+public abstract class AbstractServiceConfig extends AbstractInterfaceConfig {\r\n+\r\n+    private static final long serialVersionUID = 1L;\r\n+\r\n+    /**\r\n+     * The service version\r\n+     */\r\n+    protected String version;\r\n+\r\n+    /**\r\n+     * The service group\r\n+     */\r\n+    protected String group;\r\n+\r\n+    /**\r\n+     * whether the service is deprecated\r\n+     */\r\n+    protected Boolean deprecated = false;\r\n+\r\n+    /**\r\n+     * The time delay register service (milliseconds)\r\n+     */\r\n+    protected Integer delay;\r\n+\r\n+    /**\r\n+     * Whether to export the service\r\n+     */\r\n+    protected Boolean export;\r\n+\r\n+    /**\r\n+     * The service weight\r\n+     */\r\n+    protected Integer weight;\r\n+\r\n+    /**\r\n+     * Document center\r\n+     */\r\n+    protected String document;\r\n+\r\n+    /**\r\n+     * Whether to register as a dynamic service or not on register center, the value is true, the status will be enabled\r\n+     * after the service registered,and it needs to be disabled manually; if you want to disable the service, you also need\r\n+     * manual processing\r\n+     */\r\n+    protected Boolean dynamic = true;\r\n+\r\n+    /**\r\n+     * Whether to use token\r\n+     */\r\n+    protected String token;\r\n+\r\n+    /**\r\n+     * Whether to export access logs to logs\r\n+     */\r\n+    protected String accesslog;\r\n+\r\n+    /**\r\n+     * The protocol list the service will export with\r\n+     * Also see {@link #protocolIds}, only one of them will work.\r\n+     */\r\n+    protected List<ProtocolConfig> protocols;\r\n+\r\n+    /**\r\n+     * The id list of protocols the service will export with\r\n+     * Also see {@link #protocols}, only one of them will work.\r\n+     */\r\n+    protected String protocolIds;\r\n+\r\n+    // max allowed execute times\r\n+    private Integer executes;\r\n+\r\n+    /**\r\n+     * Whether to register\r\n+     */\r\n+    private Boolean register;\r\n+\r\n+    /**\r\n+     * Warm up period\r\n+     */\r\n+    private Integer warmup;\r\n+\r\n+    /**\r\n+     * The serialization type\r\n+     */\r\n+    private String serialization;\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 Integer getDelay() {\r\n+        return delay;\r\n+    }\r\n+\r\n+    public void setDelay(Integer delay) {\r\n+        this.delay = delay;\r\n+    }\r\n+\r\n+    public Boolean getExport() {\r\n+        return export;\r\n+    }\r\n+\r\n+    public void setExport(Boolean export) {\r\n+        this.export = export;\r\n+    }\r\n+\r\n+    public Integer getWeight() {\r\n+        return weight;\r\n+    }\r\n+\r\n+    public void setWeight(Integer weight) {\r\n+        this.weight = weight;\r\n+    }\r\n+\r\n+    @Parameter(escaped = true)\r\n+    public String getDocument() {\r\n+        return document;\r\n+    }\r\n+\r\n+    public void setDocument(String document) {\r\n+        this.document = document;\r\n+    }\r\n+\r\n+    public String getToken() {\r\n+        return token;\r\n+    }\r\n+\r\n+    public void setToken(Boolean token) {\r\n+        if (token == null) {\r\n+            setToken((String) null);\r\n+        } else {\r\n+            setToken(String.valueOf(token));\r\n+        }\r\n+    }\r\n+\r\n+    public void setToken(String token) {\r\n+        this.token = token;\r\n+    }\r\n+\r\n+    public Boolean isDeprecated() {\r\n+        return deprecated;\r\n+    }\r\n+\r\n+    public void setDeprecated(Boolean deprecated) {\r\n+        this.deprecated = deprecated;\r\n+    }\r\n+\r\n+    public Boolean isDynamic() {\r\n+        return dynamic;\r\n+    }\r\n+\r\n+    public void setDynamic(Boolean dynamic) {\r\n+        this.dynamic = dynamic;\r\n+    }\r\n+\r\n+    public List<ProtocolConfig> getProtocols() {\r\n+        return protocols;\r\n+    }\r\n+\r\n+    @SuppressWarnings({\"unchecked\"})\r\n+    public void setProtocols(List<? extends ProtocolConfig> protocols) {\r\n+        this.protocols = (List<ProtocolConfig>) protocols;\r\n+    }\r\n+\r\n+    public ProtocolConfig getProtocol() {\r\n+        return CollectionUtils.isEmpty(protocols) ? null : protocols.get(0);\r\n+    }\r\n+\r\n+    public void setProtocol(ProtocolConfig protocol) {\r\n+        setProtocols(new ArrayList<>(Arrays.asList(protocol)));\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getProtocolIds() {\r\n+        return protocolIds;\r\n+    }\r\n+\r\n+    public void setProtocolIds(String protocolIds) {\r\n+        this.protocolIds = protocolIds;\r\n+    }\r\n+\r\n+    public String getAccesslog() {\r\n+        return accesslog;\r\n+    }\r\n+\r\n+    public void setAccesslog(Boolean accesslog) {\r\n+        if (accesslog == null) {\r\n+            setAccesslog((String) null);\r\n+        } else {\r\n+            setAccesslog(String.valueOf(accesslog));\r\n+        }\r\n+    }\r\n+\r\n+    public void setAccesslog(String accesslog) {\r\n+        this.accesslog = accesslog;\r\n+    }\r\n+\r\n+    public Integer getExecutes() {\r\n+        return executes;\r\n+    }\r\n+\r\n+    public void setExecutes(Integer executes) {\r\n+        this.executes = executes;\r\n+    }\r\n+\r\n+    @Override\r\n+    @Parameter(key = SERVICE_FILTER_KEY, append = true)\r\n+    public String getFilter() {\r\n+        return super.getFilter();\r\n+    }\r\n+\r\n+    @Override\r\n+    @Parameter(key = EXPORTER_LISTENER_KEY, append = true)\r\n+    public String getListener() {\r\n+        return listener;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setListener(String listener) {\r\n+        this.listener = listener;\r\n+    }\r\n+\r\n+    public Boolean isRegister() {\r\n+        return register;\r\n+    }\r\n+\r\n+    public void setRegister(Boolean register) {\r\n+        this.register = register;\r\n+    }\r\n+\r\n+    public Integer getWarmup() {\r\n+        return warmup;\r\n+    }\r\n+\r\n+    public void setWarmup(Integer warmup) {\r\n+        this.warmup = warmup;\r\n+    }\r\n+\r\n+    public String getSerialization() {\r\n+        return serialization;\r\n+    }\r\n+\r\n+    public void setSerialization(String serialization) {\r\n+        this.serialization = serialization;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/ApplicationConfig.java", "source2": "org/apache/dubbo/config/ApplicationConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,504 +1,504 @@\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.config;\n-\n-import org.apache.dubbo.common.compiler.support.AdaptiveCompiler;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.infra.InfraAdapter;\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.StringUtils;\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import java.net.InetAddress;\n-import java.net.UnknownHostException;\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.constants.CommonConstants.APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.DUMP_DIRECTORY;\n-import static org.apache.dubbo.common.constants.CommonConstants.HOST_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.METADATA_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY;\n-import static org.apache.dubbo.common.constants.QosConstants.ACCEPT_FOREIGN_IP;\n-import static org.apache.dubbo.common.constants.QosConstants.QOS_ENABLE;\n-import static org.apache.dubbo.common.constants.QosConstants.QOS_HOST;\n-import static org.apache.dubbo.common.constants.QosConstants.QOS_PORT;\n-import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_PUBLISH_INTERFACE_KEY;\n-import static org.apache.dubbo.config.Constants.DEVELOPMENT_ENVIRONMENT;\n-import static org.apache.dubbo.config.Constants.PRODUCTION_ENVIRONMENT;\n-import static org.apache.dubbo.config.Constants.TEST_ENVIRONMENT;\n-\n-\n-/**\n- * The application info\n- *\n- * @export\n- */\n-public class ApplicationConfig extends AbstractConfig {\n-    private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationConfig.class);\n-\n-    private static final long serialVersionUID = 5508512956753757169L;\n-\n-    /**\n-     * Application name\n-     */\n-    private String name;\n-\n-    /**\n-     * The application version\n-     */\n-    private String version;\n-\n-    /**\n-     * Application owner\n-     */\n-    private String owner;\n-\n-    /**\n-     * Application's organization (BU)\n-     */\n-    private String organization;\n-\n-    /**\n-     * Architecture layer\n-     */\n-    private String architecture;\n-\n-    /**\n-     * Environment, e.g. dev, test or production\n-     */\n-    private String environment;\n-\n-    /**\n-     * Java compiler\n-     */\n-    private String compiler;\n-\n-    /**\n-     * The type of the log access\n-     */\n-    private String logger;\n-\n-    /**\n-     * Registry centers\n-     */\n-    private List<RegistryConfig> registries;\n-    private String registryIds;\n-\n-    /**\n-     * Monitor center\n-     */\n-    private MonitorConfig monitor;\n-\n-    /**\n-     * Is default or not\n-     */\n-    private Boolean isDefault;\n-\n-    /**\n-     * Directory for saving thread dump\n-     */\n-    private String dumpDirectory;\n-\n-    /**\n-     * Whether to enable qos or not\n-     */\n-    private Boolean qosEnable;\n-\n-    /**\n-     * The qos host to listen\n-     */\n-    private String qosHost;\n-\n-    /**\n-     * The qos port to listen\n-     */\n-    private Integer qosPort;\n-\n-    /**\n-     * Should we accept foreign ip or not?\n-     */\n-    private Boolean qosAcceptForeignIp;\n-\n-    /**\n-     * Customized parameters\n-     */\n-    private Map<String, String> parameters;\n-\n-    /**\n-     * Config the shutdown.wait\n-     */\n-    private String shutwait;\n-\n-    private String hostname;\n-\n-    /**\n-     * Metadata type, local or remote, if choose remote, you need to further specify metadata center.\n-     */\n-    private String metadataType;\n-\n-    private Boolean registerConsumer;\n-\n-    private String repository;\n-\n-    private Boolean publishInterface;\n-\n-    /**\n-     * Metadata Service, used in Service Discovery\n-     */\n-    private Integer metadataServicePort;\n-\n-    public ApplicationConfig() {\n-    }\n-\n-    public ApplicationConfig(String name) {\n-        setName(name);\n-    }\n-\n-    @Parameter(key = APPLICATION_KEY, required = true, useKeyAsProperty = false)\n-    public String getName() {\n-        return name;\n-    }\n-\n-    public void setName(String name) {\n-        this.name = name;\n-        if (StringUtils.isEmpty(id)) {\n-            id = name;\n-        }\n-    }\n-\n-    @Parameter(key = \"application.version\")\n-    public String getVersion() {\n-        return version;\n-    }\n-\n-    public void setVersion(String version) {\n-        this.version = version;\n-    }\n-\n-    public String getOwner() {\n-        return owner;\n-    }\n-\n-    public void setOwner(String owner) {\n-        this.owner = owner;\n-    }\n-\n-    public String getOrganization() {\n-        return organization;\n-    }\n-\n-    public void setOrganization(String organization) {\n-        this.organization = organization;\n-    }\n-\n-    public String getArchitecture() {\n-        return architecture;\n-    }\n-\n-    public void setArchitecture(String architecture) {\n-        this.architecture = architecture;\n-    }\n-\n-    public String getEnvironment() {\n-        return environment;\n-    }\n-\n-    public void setEnvironment(String environment) {\n-        if (environment != null) {\n-            if (!(DEVELOPMENT_ENVIRONMENT.equals(environment)\n-                    || TEST_ENVIRONMENT.equals(environment)\n-                    || PRODUCTION_ENVIRONMENT.equals(environment))) {\n-\n-                throw new IllegalStateException(String.format(\"Unsupported environment: %s, only support %s/%s/%s, default is %s.\",\n-                        environment,\n-                        DEVELOPMENT_ENVIRONMENT,\n-                        TEST_ENVIRONMENT,\n-                        PRODUCTION_ENVIRONMENT,\n-                        PRODUCTION_ENVIRONMENT));\n-            }\n-        }\n-        this.environment = environment;\n-    }\n-\n-    public RegistryConfig getRegistry() {\n-        return CollectionUtils.isEmpty(registries) ? null : registries.get(0);\n-    }\n-\n-    public void setRegistry(RegistryConfig registry) {\n-        List<RegistryConfig> registries = new ArrayList<RegistryConfig>(1);\n-        registries.add(registry);\n-        this.registries = registries;\n-    }\n-\n-    public List<RegistryConfig> getRegistries() {\n-        return registries;\n-    }\n-\n-    @SuppressWarnings({\"unchecked\"})\n-    public void setRegistries(List<? extends RegistryConfig> registries) {\n-        this.registries = (List<RegistryConfig>) registries;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getRegistryIds() {\n-        return registryIds;\n-    }\n-\n-    public void setRegistryIds(String registryIds) {\n-        this.registryIds = registryIds;\n-    }\n-\n-    public MonitorConfig getMonitor() {\n-        return monitor;\n-    }\n-\n-    public void setMonitor(String monitor) {\n-        this.monitor = new MonitorConfig(monitor);\n-    }\n-\n-    public void setMonitor(MonitorConfig monitor) {\n-        this.monitor = monitor;\n-    }\n-\n-    public String getCompiler() {\n-        return compiler;\n-    }\n-\n-    public void setCompiler(String compiler) {\n-        this.compiler = compiler;\n-        AdaptiveCompiler.setDefaultCompiler(compiler);\n-    }\n-\n-    public String getLogger() {\n-        return logger;\n-    }\n-\n-    public void setLogger(String logger) {\n-        this.logger = logger;\n-        LoggerFactory.setLoggerAdapter(logger);\n-    }\n-\n-    public Boolean isDefault() {\n-        return isDefault;\n-    }\n-\n-    public void setDefault(Boolean isDefault) {\n-        this.isDefault = isDefault;\n-    }\n-\n-    @Parameter(key = DUMP_DIRECTORY)\n-    public String getDumpDirectory() {\n-        return dumpDirectory;\n-    }\n-\n-    public void setDumpDirectory(String dumpDirectory) {\n-        this.dumpDirectory = dumpDirectory;\n-    }\n-\n-    @Parameter(key = QOS_ENABLE)\n-    public Boolean getQosEnable() {\n-        return qosEnable;\n-    }\n-\n-    public void setQosEnable(Boolean qosEnable) {\n-        this.qosEnable = qosEnable;\n-    }\n-\n-    @Parameter(key = QOS_HOST)\n-    public String getQosHost() {\n-        return qosHost;\n-    }\n-\n-    public void setQosHost(String qosHost) {\n-        this.qosHost = qosHost;\n-    }\n-\n-    @Parameter(key = QOS_PORT)\n-    public Integer getQosPort() {\n-        return qosPort;\n-    }\n-\n-    public void setQosPort(Integer qosPort) {\n-        this.qosPort = qosPort;\n-    }\n-\n-    @Parameter(key = ACCEPT_FOREIGN_IP)\n-    public Boolean getQosAcceptForeignIp() {\n-        return qosAcceptForeignIp;\n-    }\n-\n-    public void setQosAcceptForeignIp(Boolean qosAcceptForeignIp) {\n-        this.qosAcceptForeignIp = qosAcceptForeignIp;\n-    }\n-\n-    /**\n-     * The format is the same as the springboot, including: getQosEnableCompatible(), getQosPortCompatible(), getQosAcceptForeignIpCompatible().\n-     *\n-     * @return\n-     */\n-    @Parameter(key = \"qos-enable\", excluded = true)\n-    public Boolean getQosEnableCompatible() {\n-        return getQosEnable();\n-    }\n-\n-    public void setQosEnableCompatible(Boolean qosEnable) {\n-        setQosEnable(qosEnable);\n-    }\n-\n-    @Parameter(key = \"qos-host\", excluded = true)\n-    public String getQosHostCompatible() {\n-        return getQosHost();\n-    }\n-\n-    public void setQosHostCompatible(String qosHost) {\n-        this.setQosHost(qosHost);\n-    }\n-\n-    @Parameter(key = \"qos-port\", excluded = true)\n-    public Integer getQosPortCompatible() {\n-        return getQosPort();\n-    }\n-\n-    public void setQosPortCompatible(Integer qosPort) {\n-        this.setQosPort(qosPort);\n-    }\n-\n-    @Parameter(key = \"qos-accept-foreign-ip\", excluded = true)\n-    public Boolean getQosAcceptForeignIpCompatible() {\n-        return this.getQosAcceptForeignIp();\n-    }\n-\n-    public void setQosAcceptForeignIpCompatible(Boolean qosAcceptForeignIp) {\n-        this.setQosAcceptForeignIp(qosAcceptForeignIp);\n-    }\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-    public String getShutwait() {\n-        return shutwait;\n-    }\n-\n-    public void setShutwait(String shutwait) {\n-        System.setProperty(SHUTDOWN_WAIT_KEY, shutwait);\n-        this.shutwait = shutwait;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getHostname() {\n-        if (hostname == null) {\n-            try {\n-                hostname = InetAddress.getLocalHost().getHostName();\n-            } catch (UnknownHostException e) {\n-                LOGGER.warn(\"Failed to get the hostname of current instance.\", e);\n-                hostname = \"UNKNOWN\";\n-            }\n-        }\n-        return hostname;\n-    }\n-\n-    @Override\n-    @Parameter(excluded = true)\n-    public boolean isValid() {\n-        return !StringUtils.isEmpty(name);\n-    }\n-\n-    @Parameter(key = METADATA_KEY)\n-    public String getMetadataType() {\n-        return metadataType;\n-    }\n-\n-    public void setMetadataType(String metadataType) {\n-        this.metadataType = metadataType;\n-    }\n-\n-    public Boolean getRegisterConsumer() {\n-        return registerConsumer;\n-    }\n-\n-    public void setRegisterConsumer(Boolean registerConsumer) {\n-        this.registerConsumer = registerConsumer;\n-    }\n-\n-    public String getRepository() {\n-        return repository;\n-    }\n-\n-    public void setRepository(String repository) {\n-        this.repository = repository;\n-    }\n-\n-    @Parameter(key = REGISTRY_PUBLISH_INTERFACE_KEY)\n-    public Boolean getPublishInterface() {\n-        return publishInterface;\n-    }\n-\n-    public void setPublishInterface(Boolean publishInterface) {\n-        this.publishInterface = publishInterface;\n-    }\n-\n-    @Parameter(key = \"metadata-service-port\")\n-    public Integer getMetadataServicePort() {\n-        return metadataServicePort;\n-    }\n-\n-    public void setMetadataServicePort(Integer metadataServicePort) {\n-        this.metadataServicePort = metadataServicePort;\n-    }\n-\n-    @Override\n-    public void refresh() {\n-        super.refresh();\n-        appendEnvironmentProperties();\n-    }\n-\n-    private void appendEnvironmentProperties() {\n-        if (parameters == null) {\n-            parameters = new HashMap<>();\n-        }\n-\n-        Set<InfraAdapter> adapters = ExtensionLoader.getExtensionLoader(InfraAdapter.class).getSupportedExtensionInstances();\n-        if (CollectionUtils.isNotEmpty(adapters)) {\n-            Map<String, String> inputParameters = new HashMap<>();\n-            inputParameters.put(APPLICATION_KEY, getName());\n-            inputParameters.put(HOST_KEY, getHostname());\n-            for (InfraAdapter adapter : adapters) {\n-                Map<String, String> extraParameters = adapter.getExtraAttributes(inputParameters);\n-                if (CollectionUtils.isNotEmptyMap(extraParameters)) {\n-                    extraParameters.forEach((key, value) -> {\n-                        String prefix = this.getPrefix() + \".\";\n-                        if (key.startsWith(prefix)) {\n-                            key = key.substring(prefix.length());\n-                        }\n-                        parameters.put(key, value);\n-                    });\n-                }\n-            }\n-        }\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.config;\r\n+\r\n+import org.apache.dubbo.common.compiler.support.AdaptiveCompiler;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.infra.InfraAdapter;\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.StringUtils;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import java.net.InetAddress;\r\n+import java.net.UnknownHostException;\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.constants.CommonConstants.APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUMP_DIRECTORY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.HOST_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.METADATA_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY;\r\n+import static org.apache.dubbo.common.constants.QosConstants.ACCEPT_FOREIGN_IP;\r\n+import static org.apache.dubbo.common.constants.QosConstants.QOS_ENABLE;\r\n+import static org.apache.dubbo.common.constants.QosConstants.QOS_HOST;\r\n+import static org.apache.dubbo.common.constants.QosConstants.QOS_PORT;\r\n+import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_PUBLISH_INTERFACE_KEY;\r\n+import static org.apache.dubbo.config.Constants.DEVELOPMENT_ENVIRONMENT;\r\n+import static org.apache.dubbo.config.Constants.PRODUCTION_ENVIRONMENT;\r\n+import static org.apache.dubbo.config.Constants.TEST_ENVIRONMENT;\r\n+\r\n+\r\n+/**\r\n+ * The application info\r\n+ *\r\n+ * @export\r\n+ */\r\n+public class ApplicationConfig extends AbstractConfig {\r\n+    private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationConfig.class);\r\n+\r\n+    private static final long serialVersionUID = 5508512956753757169L;\r\n+\r\n+    /**\r\n+     * Application name\r\n+     */\r\n+    private String name;\r\n+\r\n+    /**\r\n+     * The application version\r\n+     */\r\n+    private String version;\r\n+\r\n+    /**\r\n+     * Application owner\r\n+     */\r\n+    private String owner;\r\n+\r\n+    /**\r\n+     * Application's organization (BU)\r\n+     */\r\n+    private String organization;\r\n+\r\n+    /**\r\n+     * Architecture layer\r\n+     */\r\n+    private String architecture;\r\n+\r\n+    /**\r\n+     * Environment, e.g. dev, test or production\r\n+     */\r\n+    private String environment;\r\n+\r\n+    /**\r\n+     * Java compiler\r\n+     */\r\n+    private String compiler;\r\n+\r\n+    /**\r\n+     * The type of the log access\r\n+     */\r\n+    private String logger;\r\n+\r\n+    /**\r\n+     * Registry centers\r\n+     */\r\n+    private List<RegistryConfig> registries;\r\n+    private String registryIds;\r\n+\r\n+    /**\r\n+     * Monitor center\r\n+     */\r\n+    private MonitorConfig monitor;\r\n+\r\n+    /**\r\n+     * Is default or not\r\n+     */\r\n+    private Boolean isDefault;\r\n+\r\n+    /**\r\n+     * Directory for saving thread dump\r\n+     */\r\n+    private String dumpDirectory;\r\n+\r\n+    /**\r\n+     * Whether to enable qos or not\r\n+     */\r\n+    private Boolean qosEnable;\r\n+\r\n+    /**\r\n+     * The qos host to listen\r\n+     */\r\n+    private String qosHost;\r\n+\r\n+    /**\r\n+     * The qos port to listen\r\n+     */\r\n+    private Integer qosPort;\r\n+\r\n+    /**\r\n+     * Should we accept foreign ip or not?\r\n+     */\r\n+    private Boolean qosAcceptForeignIp;\r\n+\r\n+    /**\r\n+     * Customized parameters\r\n+     */\r\n+    private Map<String, String> parameters;\r\n+\r\n+    /**\r\n+     * Config the shutdown.wait\r\n+     */\r\n+    private String shutwait;\r\n+\r\n+    private String hostname;\r\n+\r\n+    /**\r\n+     * Metadata type, local or remote, if choose remote, you need to further specify metadata center.\r\n+     */\r\n+    private String metadataType;\r\n+\r\n+    private Boolean registerConsumer;\r\n+\r\n+    private String repository;\r\n+\r\n+    private Boolean publishInterface;\r\n+\r\n+    /**\r\n+     * Metadata Service, used in Service Discovery\r\n+     */\r\n+    private Integer metadataServicePort;\r\n+\r\n+    public ApplicationConfig() {\r\n+    }\r\n+\r\n+    public ApplicationConfig(String name) {\r\n+        setName(name);\r\n+    }\r\n+\r\n+    @Parameter(key = APPLICATION_KEY, required = true, useKeyAsProperty = false)\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+        if (StringUtils.isEmpty(id)) {\r\n+            id = name;\r\n+        }\r\n+    }\r\n+\r\n+    @Parameter(key = \"application.version\")\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 getOwner() {\r\n+        return owner;\r\n+    }\r\n+\r\n+    public void setOwner(String owner) {\r\n+        this.owner = owner;\r\n+    }\r\n+\r\n+    public String getOrganization() {\r\n+        return organization;\r\n+    }\r\n+\r\n+    public void setOrganization(String organization) {\r\n+        this.organization = organization;\r\n+    }\r\n+\r\n+    public String getArchitecture() {\r\n+        return architecture;\r\n+    }\r\n+\r\n+    public void setArchitecture(String architecture) {\r\n+        this.architecture = architecture;\r\n+    }\r\n+\r\n+    public String getEnvironment() {\r\n+        return environment;\r\n+    }\r\n+\r\n+    public void setEnvironment(String environment) {\r\n+        if (environment != null) {\r\n+            if (!(DEVELOPMENT_ENVIRONMENT.equals(environment)\r\n+                    || TEST_ENVIRONMENT.equals(environment)\r\n+                    || PRODUCTION_ENVIRONMENT.equals(environment))) {\r\n+\r\n+                throw new IllegalStateException(String.format(\"Unsupported environment: %s, only support %s/%s/%s, default is %s.\",\r\n+                        environment,\r\n+                        DEVELOPMENT_ENVIRONMENT,\r\n+                        TEST_ENVIRONMENT,\r\n+                        PRODUCTION_ENVIRONMENT,\r\n+                        PRODUCTION_ENVIRONMENT));\r\n+            }\r\n+        }\r\n+        this.environment = environment;\r\n+    }\r\n+\r\n+    public RegistryConfig getRegistry() {\r\n+        return CollectionUtils.isEmpty(registries) ? null : registries.get(0);\r\n+    }\r\n+\r\n+    public void setRegistry(RegistryConfig registry) {\r\n+        List<RegistryConfig> registries = new ArrayList<RegistryConfig>(1);\r\n+        registries.add(registry);\r\n+        this.registries = registries;\r\n+    }\r\n+\r\n+    public List<RegistryConfig> getRegistries() {\r\n+        return registries;\r\n+    }\r\n+\r\n+    @SuppressWarnings({\"unchecked\"})\r\n+    public void setRegistries(List<? extends RegistryConfig> registries) {\r\n+        this.registries = (List<RegistryConfig>) registries;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getRegistryIds() {\r\n+        return registryIds;\r\n+    }\r\n+\r\n+    public void setRegistryIds(String registryIds) {\r\n+        this.registryIds = registryIds;\r\n+    }\r\n+\r\n+    public MonitorConfig getMonitor() {\r\n+        return monitor;\r\n+    }\r\n+\r\n+    public void setMonitor(String monitor) {\r\n+        this.monitor = new MonitorConfig(monitor);\r\n+    }\r\n+\r\n+    public void setMonitor(MonitorConfig monitor) {\r\n+        this.monitor = monitor;\r\n+    }\r\n+\r\n+    public String getCompiler() {\r\n+        return compiler;\r\n+    }\r\n+\r\n+    public void setCompiler(String compiler) {\r\n+        this.compiler = compiler;\r\n+        AdaptiveCompiler.setDefaultCompiler(compiler);\r\n+    }\r\n+\r\n+    public String getLogger() {\r\n+        return logger;\r\n+    }\r\n+\r\n+    public void setLogger(String logger) {\r\n+        this.logger = logger;\r\n+        LoggerFactory.setLoggerAdapter(logger);\r\n+    }\r\n+\r\n+    public Boolean isDefault() {\r\n+        return isDefault;\r\n+    }\r\n+\r\n+    public void setDefault(Boolean isDefault) {\r\n+        this.isDefault = isDefault;\r\n+    }\r\n+\r\n+    @Parameter(key = DUMP_DIRECTORY)\r\n+    public String getDumpDirectory() {\r\n+        return dumpDirectory;\r\n+    }\r\n+\r\n+    public void setDumpDirectory(String dumpDirectory) {\r\n+        this.dumpDirectory = dumpDirectory;\r\n+    }\r\n+\r\n+    @Parameter(key = QOS_ENABLE)\r\n+    public Boolean getQosEnable() {\r\n+        return qosEnable;\r\n+    }\r\n+\r\n+    public void setQosEnable(Boolean qosEnable) {\r\n+        this.qosEnable = qosEnable;\r\n+    }\r\n+\r\n+    @Parameter(key = QOS_HOST)\r\n+    public String getQosHost() {\r\n+        return qosHost;\r\n+    }\r\n+\r\n+    public void setQosHost(String qosHost) {\r\n+        this.qosHost = qosHost;\r\n+    }\r\n+\r\n+    @Parameter(key = QOS_PORT)\r\n+    public Integer getQosPort() {\r\n+        return qosPort;\r\n+    }\r\n+\r\n+    public void setQosPort(Integer qosPort) {\r\n+        this.qosPort = qosPort;\r\n+    }\r\n+\r\n+    @Parameter(key = ACCEPT_FOREIGN_IP)\r\n+    public Boolean getQosAcceptForeignIp() {\r\n+        return qosAcceptForeignIp;\r\n+    }\r\n+\r\n+    public void setQosAcceptForeignIp(Boolean qosAcceptForeignIp) {\r\n+        this.qosAcceptForeignIp = qosAcceptForeignIp;\r\n+    }\r\n+\r\n+    /**\r\n+     * The format is the same as the springboot, including: getQosEnableCompatible(), getQosPortCompatible(), getQosAcceptForeignIpCompatible().\r\n+     *\r\n+     * @return\r\n+     */\r\n+    @Parameter(key = \"qos-enable\", excluded = true)\r\n+    public Boolean getQosEnableCompatible() {\r\n+        return getQosEnable();\r\n+    }\r\n+\r\n+    public void setQosEnableCompatible(Boolean qosEnable) {\r\n+        setQosEnable(qosEnable);\r\n+    }\r\n+\r\n+    @Parameter(key = \"qos-host\", excluded = true)\r\n+    public String getQosHostCompatible() {\r\n+        return getQosHost();\r\n+    }\r\n+\r\n+    public void setQosHostCompatible(String qosHost) {\r\n+        this.setQosHost(qosHost);\r\n+    }\r\n+\r\n+    @Parameter(key = \"qos-port\", excluded = true)\r\n+    public Integer getQosPortCompatible() {\r\n+        return getQosPort();\r\n+    }\r\n+\r\n+    public void setQosPortCompatible(Integer qosPort) {\r\n+        this.setQosPort(qosPort);\r\n+    }\r\n+\r\n+    @Parameter(key = \"qos-accept-foreign-ip\", excluded = true)\r\n+    public Boolean getQosAcceptForeignIpCompatible() {\r\n+        return this.getQosAcceptForeignIp();\r\n+    }\r\n+\r\n+    public void setQosAcceptForeignIpCompatible(Boolean qosAcceptForeignIp) {\r\n+        this.setQosAcceptForeignIp(qosAcceptForeignIp);\r\n+    }\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+    public String getShutwait() {\r\n+        return shutwait;\r\n+    }\r\n+\r\n+    public void setShutwait(String shutwait) {\r\n+        System.setProperty(SHUTDOWN_WAIT_KEY, shutwait);\r\n+        this.shutwait = shutwait;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getHostname() {\r\n+        if (hostname == null) {\r\n+            try {\r\n+                hostname = InetAddress.getLocalHost().getHostName();\r\n+            } catch (UnknownHostException e) {\r\n+                LOGGER.warn(\"Failed to get the hostname of current instance.\", e);\r\n+                hostname = \"UNKNOWN\";\r\n+            }\r\n+        }\r\n+        return hostname;\r\n+    }\r\n+\r\n+    @Override\r\n+    @Parameter(excluded = true)\r\n+    public boolean isValid() {\r\n+        return !StringUtils.isEmpty(name);\r\n+    }\r\n+\r\n+    @Parameter(key = METADATA_KEY)\r\n+    public String getMetadataType() {\r\n+        return metadataType;\r\n+    }\r\n+\r\n+    public void setMetadataType(String metadataType) {\r\n+        this.metadataType = metadataType;\r\n+    }\r\n+\r\n+    public Boolean getRegisterConsumer() {\r\n+        return registerConsumer;\r\n+    }\r\n+\r\n+    public void setRegisterConsumer(Boolean registerConsumer) {\r\n+        this.registerConsumer = registerConsumer;\r\n+    }\r\n+\r\n+    public String getRepository() {\r\n+        return repository;\r\n+    }\r\n+\r\n+    public void setRepository(String repository) {\r\n+        this.repository = repository;\r\n+    }\r\n+\r\n+    @Parameter(key = REGISTRY_PUBLISH_INTERFACE_KEY)\r\n+    public Boolean getPublishInterface() {\r\n+        return publishInterface;\r\n+    }\r\n+\r\n+    public void setPublishInterface(Boolean publishInterface) {\r\n+        this.publishInterface = publishInterface;\r\n+    }\r\n+\r\n+    @Parameter(key = \"metadata-service-port\")\r\n+    public Integer getMetadataServicePort() {\r\n+        return metadataServicePort;\r\n+    }\r\n+\r\n+    public void setMetadataServicePort(Integer metadataServicePort) {\r\n+        this.metadataServicePort = metadataServicePort;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void refresh() {\r\n+        super.refresh();\r\n+        appendEnvironmentProperties();\r\n+    }\r\n+\r\n+    private void appendEnvironmentProperties() {\r\n+        if (parameters == null) {\r\n+            parameters = new HashMap<>();\r\n+        }\r\n+\r\n+        Set<InfraAdapter> adapters = ExtensionLoader.getExtensionLoader(InfraAdapter.class).getSupportedExtensionInstances();\r\n+        if (CollectionUtils.isNotEmpty(adapters)) {\r\n+            Map<String, String> inputParameters = new HashMap<>();\r\n+            inputParameters.put(APPLICATION_KEY, getName());\r\n+            inputParameters.put(HOST_KEY, getHostname());\r\n+            for (InfraAdapter adapter : adapters) {\r\n+                Map<String, String> extraParameters = adapter.getExtraAttributes(inputParameters);\r\n+                if (CollectionUtils.isNotEmptyMap(extraParameters)) {\r\n+                    extraParameters.forEach((key, value) -> {\r\n+                        String prefix = this.getPrefix() + \".\";\r\n+                        if (key.startsWith(prefix)) {\r\n+                            key = key.substring(prefix.length());\r\n+                        }\r\n+                        parameters.put(key, value);\r\n+                    });\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/ArgumentConfig.java", "source2": "org/apache/dubbo/config/ArgumentConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,83 +1,83 @@\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.config;\n-\n-import org.apache.dubbo.config.annotation.Argument;\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import java.io.Serializable;\n-\n-/**\n- * The method arguments configuration\n- *\n- * @export\n- */\n-public class ArgumentConfig implements Serializable {\n-\n-    private static final long serialVersionUID = -2165482463925213595L;\n-\n-    /**\n-     * The argument index: index -1 represents not set\n-     */\n-    private Integer index = -1;\n-\n-    /**\n-     * Argument type\n-     */\n-    private String type;\n-\n-    /**\n-     * Whether the argument is the callback interface\n-     */\n-    private Boolean callback;\n-\n-    public ArgumentConfig() {\n-    }\n-\n-    public ArgumentConfig(Argument argument) {\n-        this.index = argument.index();\n-        this.type = argument.type();\n-        this.callback = argument.callback();\n-    }\n-\n-    @Parameter(excluded = true)\n-    public Integer getIndex() {\n-        return index;\n-    }\n-\n-    public void setIndex(Integer index) {\n-        this.index = index;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getType() {\n-        return type;\n-    }\n-\n-    public void setType(String type) {\n-        this.type = type;\n-    }\n-\n-    public void setCallback(Boolean callback) {\n-        this.callback = callback;\n-    }\n-\n-    public Boolean isCallback() {\n-        return callback;\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.config;\r\n+\r\n+import org.apache.dubbo.config.annotation.Argument;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import java.io.Serializable;\r\n+\r\n+/**\r\n+ * The method arguments configuration\r\n+ *\r\n+ * @export\r\n+ */\r\n+public class ArgumentConfig implements Serializable {\r\n+\r\n+    private static final long serialVersionUID = -2165482463925213595L;\r\n+\r\n+    /**\r\n+     * The argument index: index -1 represents not set\r\n+     */\r\n+    private Integer index = -1;\r\n+\r\n+    /**\r\n+     * Argument type\r\n+     */\r\n+    private String type;\r\n+\r\n+    /**\r\n+     * Whether the argument is the callback interface\r\n+     */\r\n+    private Boolean callback;\r\n+\r\n+    public ArgumentConfig() {\r\n+    }\r\n+\r\n+    public ArgumentConfig(Argument argument) {\r\n+        this.index = argument.index();\r\n+        this.type = argument.type();\r\n+        this.callback = argument.callback();\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public Integer getIndex() {\r\n+        return index;\r\n+    }\r\n+\r\n+    public void setIndex(Integer index) {\r\n+        this.index = index;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getType() {\r\n+        return type;\r\n+    }\r\n+\r\n+    public void setType(String type) {\r\n+        this.type = type;\r\n+    }\r\n+\r\n+    public void setCallback(Boolean callback) {\r\n+        this.callback = callback;\r\n+    }\r\n+\r\n+    public Boolean isCallback() {\r\n+        return callback;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/ConfigCenterConfig.java", "source2": "org/apache/dubbo/config/ConfigCenterConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,289 +1,289 @@\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.config;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.constants.CommonConstants;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.common.utils.UrlUtils;\n-import org.apache.dubbo.config.support.Parameter;\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.ANYHOST_VALUE;\n-import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_CONFIGFILE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_ENABLE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;\n-import static org.apache.dubbo.config.Constants.CONFIG_APP_CONFIGFILE_KEY;\n-import static org.apache.dubbo.config.Constants.ZOOKEEPER_PROTOCOL;\n-\n-/**\n- * ConfigCenterConfig\n- */\n-public class ConfigCenterConfig extends AbstractConfig {\n-    private AtomicBoolean inited = new AtomicBoolean(false);\n-\n-    private String protocol;\n-    private String address;\n-    private Integer port;\n-\n-    /* The config center cluster, it's real meaning may very on different Config Center products. */\n-    private String cluster;\n-\n-    /* The namespace of the config center, generally it's used for multi-tenant,\n-    but it's real meaning depends on the actual Config Center you use.\n-    */\n-\n-    private String namespace = CommonConstants.DUBBO;\n-    /* The group of the config center, generally it's used to identify an isolated space for a batch of config items,\n-    but it's real meaning depends on the actual Config Center you use.\n-    */\n-    private String group = CommonConstants.DUBBO;\n-    private String username;\n-    private String password;\n-    private Long timeout = 3000L;\n-\n-    // If the Config Center is given the highest priority, it will override all the other configurations\n-    private Boolean highestPriority = true;\n-\n-    // Decide the behaviour when initial connection try fails, 'true' means interrupt the whole process once fail.\n-    private Boolean check = true;\n-\n-    /* Used to specify the key that your properties file mapping to, most of the time you do not need to change this parameter.\n-    Notice that for Apollo, this parameter is meaningless, set the 'namespace' is enough.\n-    */\n-    private String configFile = CommonConstants.DEFAULT_DUBBO_PROPERTIES;\n-\n-    /* the .properties file under 'configFile' is global shared while .properties under this one is limited only to this application\n-     */\n-    private String appConfigFile;\n-\n-    /* If the Config Center product you use have some special parameters that is not covered by this class, you can add it to here.\n-    For example, with XML:\n-      <dubbo:config-center>\n-           <dubbo:parameter key=\"{your key}\" value=\"{your value}\" />\n-      </dubbo:config-center>\n-     */\n-    private Map<String, String> parameters;\n-\n-    private Map<String, String> externalConfiguration;\n-\n-    private Map<String, String> appExternalConfiguration;\n-\n-    public ConfigCenterConfig() {\n-    }\n-\n-    public URL toUrl() {\n-        Map<String, String> map = new HashMap<>();\n-        appendParameters(map, this);\n-        if (StringUtils.isEmpty(address)) {\n-            address = ANYHOST_VALUE;\n-        }\n-        map.put(PATH_KEY, ConfigCenterConfig.class.getSimpleName());\n-        // use 'zookeeper' as the default configcenter.\n-        if (StringUtils.isEmpty(map.get(PROTOCOL_KEY))) {\n-            map.put(PROTOCOL_KEY, ZOOKEEPER_PROTOCOL);\n-        }\n-        return UrlUtils.parseURL(address, map);\n-    }\n-\n-    public boolean checkOrUpdateInited() {\n-        return inited.compareAndSet(false, true);\n-    }\n-\n-    public Map<String, String> getExternalConfiguration() {\n-        return externalConfiguration;\n-    }\n-\n-    public Map<String, String> getAppExternalConfiguration() {\n-        return appExternalConfiguration;\n-    }\n-\n-    public void setExternalConfig(Map<String, String> externalConfiguration) {\n-        this.externalConfiguration = externalConfiguration;\n-    }\n-\n-    public void setAppExternalConfig(Map<String, String> appExternalConfiguration) {\n-        this.appExternalConfiguration = appExternalConfiguration;\n-    }\n-\n-    public String getProtocol() {\n-        return protocol;\n-    }\n-\n-    public void setProtocol(String protocol) {\n-        this.protocol = protocol;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getAddress() {\n-        return address;\n-    }\n-\n-    public void setAddress(String address) {\n-        this.address = address;\n-        if (address != null) {\n-            try {\n-                URL url = URL.valueOf(address);\n-                setUsername(url.getUsername());\n-                setPassword(url.getPassword());\n-                updateIdIfAbsent(url.getProtocol());\n-                updateProtocolIfAbsent(url.getProtocol());\n-                updatePortIfAbsent(url.getPort());\n-                updateParameters(url.getParameters());\n-            } catch (Exception ignored) {\n-            }\n-        }\n-    }\n-\n-    public Integer getPort() {\n-        return port;\n-    }\n-\n-    public void setPort(Integer port) {\n-        this.port = port;\n-    }\n-\n-    public String getCluster() {\n-        return cluster;\n-    }\n-\n-    public void setCluster(String cluster) {\n-        this.cluster = cluster;\n-    }\n-\n-    public String getNamespace() {\n-        return namespace;\n-    }\n-\n-    public void setNamespace(String namespace) {\n-        this.namespace = namespace;\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 Boolean isCheck() {\n-        return check;\n-    }\n-\n-    public void setCheck(Boolean check) {\n-        this.check = check;\n-    }\n-\n-    @Parameter(key = CONFIG_ENABLE_KEY)\n-    public Boolean isHighestPriority() {\n-        return highestPriority;\n-    }\n-\n-    public void setHighestPriority(Boolean highestPriority) {\n-        this.highestPriority = highestPriority;\n-    }\n-\n-    public String getUsername() {\n-        return username;\n-    }\n-\n-    public void setUsername(String username) {\n-        this.username = username;\n-    }\n-\n-    public String getPassword() {\n-        return password;\n-    }\n-\n-    public void setPassword(String password) {\n-        this.password = password;\n-    }\n-\n-    public Long getTimeout() {\n-        return timeout;\n-    }\n-\n-    public void setTimeout(Long timeout) {\n-        this.timeout = timeout;\n-    }\n-\n-    @Parameter(key = CONFIG_CONFIGFILE_KEY)\n-    public String getConfigFile() {\n-        return configFile;\n-    }\n-\n-    public void setConfigFile(String configFile) {\n-        this.configFile = configFile;\n-    }\n-\n-    @Parameter(excluded = true, key = CONFIG_APP_CONFIGFILE_KEY)\n-    public String getAppConfigFile() {\n-        return appConfigFile;\n-    }\n-\n-    public void setAppConfigFile(String appConfigFile) {\n-        this.appConfigFile = appConfigFile;\n-    }\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-    @Parameter(excluded = true)\n-    public boolean isValid() {\n-        if (StringUtils.isEmpty(address)) {\n-            return false;\n-        }\n-\n-        return address.contains(\"://\") || StringUtils.isNotEmpty(protocol);\n-    }\n-\n-    protected void updatePortIfAbsent(Integer value) {\n-        if (value != null && value > 0 && port == null) {\n-            this.port = value;\n-        }\n-    }\n-\n-    protected void updateProtocolIfAbsent(String value) {\n-        if (StringUtils.isNotEmpty(value) && StringUtils.isEmpty(protocol)) {\n-            this.protocol = value;\n-        }\n-    }\n-\n-    public void updateParameters(Map<String, String> parameters) {\n-        if (CollectionUtils.isEmptyMap(parameters)) {\n-            return;\n-        }\n-        if (this.parameters == null) {\n-            this.parameters = parameters;\n-        } else {\n-            this.parameters.putAll(parameters);\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.config;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.constants.CommonConstants;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.common.utils.UrlUtils;\r\n+import org.apache.dubbo.config.support.Parameter;\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.ANYHOST_VALUE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_CONFIGFILE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_ENABLE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;\r\n+import static org.apache.dubbo.config.Constants.CONFIG_APP_CONFIGFILE_KEY;\r\n+import static org.apache.dubbo.config.Constants.ZOOKEEPER_PROTOCOL;\r\n+\r\n+/**\r\n+ * ConfigCenterConfig\r\n+ */\r\n+public class ConfigCenterConfig extends AbstractConfig {\r\n+    private AtomicBoolean inited = new AtomicBoolean(false);\r\n+\r\n+    private String protocol;\r\n+    private String address;\r\n+    private Integer port;\r\n+\r\n+    /* The config center cluster, it's real meaning may very on different Config Center products. */\r\n+    private String cluster;\r\n+\r\n+    /* The namespace of the config center, generally it's used for multi-tenant,\r\n+    but it's real meaning depends on the actual Config Center you use.\r\n+    */\r\n+\r\n+    private String namespace = CommonConstants.DUBBO;\r\n+    /* The group of the config center, generally it's used to identify an isolated space for a batch of config items,\r\n+    but it's real meaning depends on the actual Config Center you use.\r\n+    */\r\n+    private String group = CommonConstants.DUBBO;\r\n+    private String username;\r\n+    private String password;\r\n+    private Long timeout = 3000L;\r\n+\r\n+    // If the Config Center is given the highest priority, it will override all the other configurations\r\n+    private Boolean highestPriority = true;\r\n+\r\n+    // Decide the behaviour when initial connection try fails, 'true' means interrupt the whole process once fail.\r\n+    private Boolean check = true;\r\n+\r\n+    /* Used to specify the key that your properties file mapping to, most of the time you do not need to change this parameter.\r\n+    Notice that for Apollo, this parameter is meaningless, set the 'namespace' is enough.\r\n+    */\r\n+    private String configFile = CommonConstants.DEFAULT_DUBBO_PROPERTIES;\r\n+\r\n+    /* the .properties file under 'configFile' is global shared while .properties under this one is limited only to this application\r\n+     */\r\n+    private String appConfigFile;\r\n+\r\n+    /* If the Config Center product you use have some special parameters that is not covered by this class, you can add it to here.\r\n+    For example, with XML:\r\n+      <dubbo:config-center>\r\n+           <dubbo:parameter key=\"{your key}\" value=\"{your value}\" />\r\n+      </dubbo:config-center>\r\n+     */\r\n+    private Map<String, String> parameters;\r\n+\r\n+    private Map<String, String> externalConfiguration;\r\n+\r\n+    private Map<String, String> appExternalConfiguration;\r\n+\r\n+    public ConfigCenterConfig() {\r\n+    }\r\n+\r\n+    public URL toUrl() {\r\n+        Map<String, String> map = new HashMap<>();\r\n+        appendParameters(map, this);\r\n+        if (StringUtils.isEmpty(address)) {\r\n+            address = ANYHOST_VALUE;\r\n+        }\r\n+        map.put(PATH_KEY, ConfigCenterConfig.class.getSimpleName());\r\n+        // use 'zookeeper' as the default configcenter.\r\n+        if (StringUtils.isEmpty(map.get(PROTOCOL_KEY))) {\r\n+            map.put(PROTOCOL_KEY, ZOOKEEPER_PROTOCOL);\r\n+        }\r\n+        return UrlUtils.parseURL(address, map);\r\n+    }\r\n+\r\n+    public boolean checkOrUpdateInited() {\r\n+        return inited.compareAndSet(false, true);\r\n+    }\r\n+\r\n+    public Map<String, String> getExternalConfiguration() {\r\n+        return externalConfiguration;\r\n+    }\r\n+\r\n+    public Map<String, String> getAppExternalConfiguration() {\r\n+        return appExternalConfiguration;\r\n+    }\r\n+\r\n+    public void setExternalConfig(Map<String, String> externalConfiguration) {\r\n+        this.externalConfiguration = externalConfiguration;\r\n+    }\r\n+\r\n+    public void setAppExternalConfig(Map<String, String> appExternalConfiguration) {\r\n+        this.appExternalConfiguration = appExternalConfiguration;\r\n+    }\r\n+\r\n+    public String getProtocol() {\r\n+        return protocol;\r\n+    }\r\n+\r\n+    public void setProtocol(String protocol) {\r\n+        this.protocol = protocol;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getAddress() {\r\n+        return address;\r\n+    }\r\n+\r\n+    public void setAddress(String address) {\r\n+        this.address = address;\r\n+        if (address != null) {\r\n+            try {\r\n+                URL url = URL.valueOf(address);\r\n+                setUsername(url.getUsername());\r\n+                setPassword(url.getPassword());\r\n+                updateIdIfAbsent(url.getProtocol());\r\n+                updateProtocolIfAbsent(url.getProtocol());\r\n+                updatePortIfAbsent(url.getPort());\r\n+                updateParameters(url.getParameters());\r\n+            } catch (Exception ignored) {\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public Integer getPort() {\r\n+        return port;\r\n+    }\r\n+\r\n+    public void setPort(Integer port) {\r\n+        this.port = port;\r\n+    }\r\n+\r\n+    public String getCluster() {\r\n+        return cluster;\r\n+    }\r\n+\r\n+    public void setCluster(String cluster) {\r\n+        this.cluster = cluster;\r\n+    }\r\n+\r\n+    public String getNamespace() {\r\n+        return namespace;\r\n+    }\r\n+\r\n+    public void setNamespace(String namespace) {\r\n+        this.namespace = namespace;\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 Boolean isCheck() {\r\n+        return check;\r\n+    }\r\n+\r\n+    public void setCheck(Boolean check) {\r\n+        this.check = check;\r\n+    }\r\n+\r\n+    @Parameter(key = CONFIG_ENABLE_KEY)\r\n+    public Boolean isHighestPriority() {\r\n+        return highestPriority;\r\n+    }\r\n+\r\n+    public void setHighestPriority(Boolean highestPriority) {\r\n+        this.highestPriority = highestPriority;\r\n+    }\r\n+\r\n+    public String getUsername() {\r\n+        return username;\r\n+    }\r\n+\r\n+    public void setUsername(String username) {\r\n+        this.username = username;\r\n+    }\r\n+\r\n+    public String getPassword() {\r\n+        return password;\r\n+    }\r\n+\r\n+    public void setPassword(String password) {\r\n+        this.password = password;\r\n+    }\r\n+\r\n+    public Long getTimeout() {\r\n+        return timeout;\r\n+    }\r\n+\r\n+    public void setTimeout(Long timeout) {\r\n+        this.timeout = timeout;\r\n+    }\r\n+\r\n+    @Parameter(key = CONFIG_CONFIGFILE_KEY)\r\n+    public String getConfigFile() {\r\n+        return configFile;\r\n+    }\r\n+\r\n+    public void setConfigFile(String configFile) {\r\n+        this.configFile = configFile;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true, key = CONFIG_APP_CONFIGFILE_KEY)\r\n+    public String getAppConfigFile() {\r\n+        return appConfigFile;\r\n+    }\r\n+\r\n+    public void setAppConfigFile(String appConfigFile) {\r\n+        this.appConfigFile = appConfigFile;\r\n+    }\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+    @Parameter(excluded = true)\r\n+    public boolean isValid() {\r\n+        if (StringUtils.isEmpty(address)) {\r\n+            return false;\r\n+        }\r\n+\r\n+        return address.contains(\"://\") || StringUtils.isNotEmpty(protocol);\r\n+    }\r\n+\r\n+    protected void updatePortIfAbsent(Integer value) {\r\n+        if (value != null && value > 0 && port == null) {\r\n+            this.port = value;\r\n+        }\r\n+    }\r\n+\r\n+    protected void updateProtocolIfAbsent(String value) {\r\n+        if (StringUtils.isNotEmpty(value) && StringUtils.isEmpty(protocol)) {\r\n+            this.protocol = value;\r\n+        }\r\n+    }\r\n+\r\n+    public void updateParameters(Map<String, String> parameters) {\r\n+        if (CollectionUtils.isEmptyMap(parameters)) {\r\n+            return;\r\n+        }\r\n+        if (this.parameters == null) {\r\n+            this.parameters = parameters;\r\n+        } else {\r\n+            this.parameters.putAll(parameters);\r\n+        }\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/Constants.java", "source2": "org/apache/dubbo/config/Constants.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,120 +1,120 @@\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.config;\n-\n-/**\n- *\n- */\n-public interface Constants {\n-\n-    String STATUS_KEY = \"status\";\n-\n-    String CONTEXTPATH_KEY = \"contextpath\";\n-\n-    String LISTENER_KEY = \"listener\";\n-\n-    String LAYER_KEY = \"layer\";\n-\n-    /**\n-     * General\n-     */\n-    /**\n-     * Application name;\n-     */\n-    String NAME = \"name\";\n-\n-    /**\n-     * Application owner name;\n-     */\n-    String OWNER = \"owner\";\n-\n-    /**\n-     * Running application organization name.\n-     */\n-    String ORGANIZATION = \"organization\";\n-\n-    /**\n-     * Application architecture name.\n-     */\n-    String ARCHITECTURE = \"architecture\";\n-\n-    /**\n-     * Environment name\n-     */\n-    String ENVIRONMENT = \"environment\";\n-\n-    /**\n-     * Test environment key.\n-     */\n-    String TEST_ENVIRONMENT = \"test\";\n-\n-    /**\n-     * Development environment key.\n-     */\n-    String DEVELOPMENT_ENVIRONMENT = \"develop\";\n-\n-    /**\n-     * Production environment key.\n-     */\n-    String PRODUCTION_ENVIRONMENT = \"product\";\n-\n-    String CONFIG_CONFIGFILE_KEY = \"config-file\";\n-    String CONFIG_ENABLE_KEY = \"highest-priority\";\n-    String CONFIG_APP_CONFIGFILE_KEY = \"app-config-file\";\n-\n-    String MULTICAST = \"multicast\";\n-\n-\n-    String DUBBO_IP_TO_REGISTRY = \"DUBBO_IP_TO_REGISTRY\";\n-\n-    String DUBBO_PORT_TO_REGISTRY = \"DUBBO_PORT_TO_REGISTRY\";\n-\n-\n-    String DUBBO_PORT_TO_BIND = \"DUBBO_PORT_TO_BIND\";\n-\n-    String SCOPE_NONE = \"none\";\n-\n-\n-    String ON_INVOKE_METHOD_KEY = \"oninvoke.method\";\n-\n-    String ON_RETURN_METHOD_KEY = \"onreturn.method\";\n-\n-    String ON_THROW_METHOD_KEY = \"onthrow.method\";\n-\n-    String ON_INVOKE_INSTANCE_KEY = \"oninvoke.instance\";\n-\n-    String ON_RETURN_INSTANCE_KEY = \"onreturn.instance\";\n-\n-    String ON_THROW_INSTANCE_KEY = \"onthrow.instance\";\n-\n-\n-    // FIXME: is this still useful?\n-    String SHUTDOWN_TIMEOUT_KEY = \"shutdown.timeout\";\n-\n-\n-    String PROTOCOLS_SUFFIX = \"dubbo.protocols.\";\n-\n-\n-    String REGISTRIES_SUFFIX = \"dubbo.registries.\";\n-\n-    String ZOOKEEPER_PROTOCOL = \"zookeeper\";\n-\n-    String REGISTER_KEY = \"register\";\n-\n-    String IGNORE_CHECK_KEYS = \"ignoreCheckKeys\";\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.config;\r\n+\r\n+/**\r\n+ *\r\n+ */\r\n+public interface Constants {\r\n+\r\n+    String STATUS_KEY = \"status\";\r\n+\r\n+    String CONTEXTPATH_KEY = \"contextpath\";\r\n+\r\n+    String LISTENER_KEY = \"listener\";\r\n+\r\n+    String LAYER_KEY = \"layer\";\r\n+\r\n+    /**\r\n+     * General\r\n+     */\r\n+    /**\r\n+     * Application name;\r\n+     */\r\n+    String NAME = \"name\";\r\n+\r\n+    /**\r\n+     * Application owner name;\r\n+     */\r\n+    String OWNER = \"owner\";\r\n+\r\n+    /**\r\n+     * Running application organization name.\r\n+     */\r\n+    String ORGANIZATION = \"organization\";\r\n+\r\n+    /**\r\n+     * Application architecture name.\r\n+     */\r\n+    String ARCHITECTURE = \"architecture\";\r\n+\r\n+    /**\r\n+     * Environment name\r\n+     */\r\n+    String ENVIRONMENT = \"environment\";\r\n+\r\n+    /**\r\n+     * Test environment key.\r\n+     */\r\n+    String TEST_ENVIRONMENT = \"test\";\r\n+\r\n+    /**\r\n+     * Development environment key.\r\n+     */\r\n+    String DEVELOPMENT_ENVIRONMENT = \"develop\";\r\n+\r\n+    /**\r\n+     * Production environment key.\r\n+     */\r\n+    String PRODUCTION_ENVIRONMENT = \"product\";\r\n+\r\n+    String CONFIG_CONFIGFILE_KEY = \"config-file\";\r\n+    String CONFIG_ENABLE_KEY = \"highest-priority\";\r\n+    String CONFIG_APP_CONFIGFILE_KEY = \"app-config-file\";\r\n+\r\n+    String MULTICAST = \"multicast\";\r\n+\r\n+\r\n+    String DUBBO_IP_TO_REGISTRY = \"DUBBO_IP_TO_REGISTRY\";\r\n+\r\n+    String DUBBO_PORT_TO_REGISTRY = \"DUBBO_PORT_TO_REGISTRY\";\r\n+\r\n+\r\n+    String DUBBO_PORT_TO_BIND = \"DUBBO_PORT_TO_BIND\";\r\n+\r\n+    String SCOPE_NONE = \"none\";\r\n+\r\n+\r\n+    String ON_INVOKE_METHOD_KEY = \"oninvoke.method\";\r\n+\r\n+    String ON_RETURN_METHOD_KEY = \"onreturn.method\";\r\n+\r\n+    String ON_THROW_METHOD_KEY = \"onthrow.method\";\r\n+\r\n+    String ON_INVOKE_INSTANCE_KEY = \"oninvoke.instance\";\r\n+\r\n+    String ON_RETURN_INSTANCE_KEY = \"onreturn.instance\";\r\n+\r\n+    String ON_THROW_INSTANCE_KEY = \"onthrow.instance\";\r\n+\r\n+\r\n+    // FIXME: is this still useful?\r\n+    String SHUTDOWN_TIMEOUT_KEY = \"shutdown.timeout\";\r\n+\r\n+\r\n+    String PROTOCOLS_SUFFIX = \"dubbo.protocols.\";\r\n+\r\n+\r\n+    String REGISTRIES_SUFFIX = \"dubbo.registries.\";\r\n+\r\n+    String ZOOKEEPER_PROTOCOL = \"zookeeper\";\r\n+\r\n+    String REGISTER_KEY = \"register\";\r\n+\r\n+    String IGNORE_CHECK_KEYS = \"ignoreCheckKeys\";\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/ConsumerConfig.java", "source2": "org/apache/dubbo/config/ConsumerConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,135 +1,135 @@\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.config;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-/**\n- * The service consumer default configuration\n- *\n- * @export\n- */\n-public class ConsumerConfig extends AbstractReferenceConfig {\n-\n-    private static final long serialVersionUID = 2827274711143680600L;\n-\n-    /**\n-     * Whether to use the default protocol\n-     */\n-    private Boolean isDefault;\n-\n-    /**\n-     * Networking framework client uses: netty, mina, etc.\n-     */\n-    private String client;\n-\n-    /**\n-     * Consumer thread pool type: cached, fixed, limit, eager\n-     */\n-    private String threadpool;\n-\n-    /**\n-     * Consumer threadpool core thread size\n-     */\n-    private Integer corethreads;\n-\n-    /**\n-     * Consumer threadpool thread size\n-     */\n-    private Integer threads;\n-\n-    /**\n-     * Consumer threadpool queue size\n-     */\n-    private Integer queues;\n-\n-    /**\n-     * By default, a TCP long-connection communication is shared between the consumer process and the provider process.\n-     * This property can be set to share multiple TCP long-connection communications. Note that only the dubbo protocol takes effect.\n-     */\n-    private Integer shareconnections;\n-\n-    @Override\n-    public void setTimeout(Integer timeout) {\n-        super.setTimeout(timeout);\n-        String rmiTimeout = System.getProperty(\"sun.rmi.transport.tcp.responseTimeout\");\n-        if (timeout != null && timeout > 0\n-                && (StringUtils.isEmpty(rmiTimeout))) {\n-            System.setProperty(\"sun.rmi.transport.tcp.responseTimeout\", String.valueOf(timeout));\n-        }\n-    }\n-\n-    public Boolean isDefault() {\n-        return isDefault;\n-    }\n-\n-    public String getClient() {\n-        return client;\n-    }\n-\n-    public void setClient(String client) {\n-        this.client = client;\n-    }\n-\n-    public String getThreadpool() {\n-        return threadpool;\n-    }\n-\n-    public void setThreadpool(String threadpool) {\n-        this.threadpool = threadpool;\n-    }\n-\n-    public Boolean getDefault() {\n-        return isDefault;\n-    }\n-\n-    public void setDefault(Boolean isDefault) {\n-        this.isDefault = isDefault;\n-    }\n-\n-    public Integer getCorethreads() {\n-        return corethreads;\n-    }\n-\n-    public void setCorethreads(Integer corethreads) {\n-        this.corethreads = corethreads;\n-    }\n-\n-    public Integer getThreads() {\n-        return threads;\n-    }\n-\n-    public void setThreads(Integer threads) {\n-        this.threads = threads;\n-    }\n-\n-    public Integer getQueues() {\n-        return queues;\n-    }\n-\n-    public void setQueues(Integer queues) {\n-        this.queues = queues;\n-    }\n-\n-    public Integer getShareconnections() {\n-        return shareconnections;\n-    }\n-\n-    public void setShareconnections(Integer shareconnections) {\n-        this.shareconnections = shareconnections;\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.config;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+/**\r\n+ * The service consumer default configuration\r\n+ *\r\n+ * @export\r\n+ */\r\n+public class ConsumerConfig extends AbstractReferenceConfig {\r\n+\r\n+    private static final long serialVersionUID = 2827274711143680600L;\r\n+\r\n+    /**\r\n+     * Whether to use the default protocol\r\n+     */\r\n+    private Boolean isDefault;\r\n+\r\n+    /**\r\n+     * Networking framework client uses: netty, mina, etc.\r\n+     */\r\n+    private String client;\r\n+\r\n+    /**\r\n+     * Consumer thread pool type: cached, fixed, limit, eager\r\n+     */\r\n+    private String threadpool;\r\n+\r\n+    /**\r\n+     * Consumer threadpool core thread size\r\n+     */\r\n+    private Integer corethreads;\r\n+\r\n+    /**\r\n+     * Consumer threadpool thread size\r\n+     */\r\n+    private Integer threads;\r\n+\r\n+    /**\r\n+     * Consumer threadpool queue size\r\n+     */\r\n+    private Integer queues;\r\n+\r\n+    /**\r\n+     * By default, a TCP long-connection communication is shared between the consumer process and the provider process.\r\n+     * This property can be set to share multiple TCP long-connection communications. Note that only the dubbo protocol takes effect.\r\n+     */\r\n+    private Integer shareconnections;\r\n+\r\n+    @Override\r\n+    public void setTimeout(Integer timeout) {\r\n+        super.setTimeout(timeout);\r\n+        String rmiTimeout = System.getProperty(\"sun.rmi.transport.tcp.responseTimeout\");\r\n+        if (timeout != null && timeout > 0\r\n+                && (StringUtils.isEmpty(rmiTimeout))) {\r\n+            System.setProperty(\"sun.rmi.transport.tcp.responseTimeout\", String.valueOf(timeout));\r\n+        }\r\n+    }\r\n+\r\n+    public Boolean isDefault() {\r\n+        return isDefault;\r\n+    }\r\n+\r\n+    public String getClient() {\r\n+        return client;\r\n+    }\r\n+\r\n+    public void setClient(String client) {\r\n+        this.client = client;\r\n+    }\r\n+\r\n+    public String getThreadpool() {\r\n+        return threadpool;\r\n+    }\r\n+\r\n+    public void setThreadpool(String threadpool) {\r\n+        this.threadpool = threadpool;\r\n+    }\r\n+\r\n+    public Boolean getDefault() {\r\n+        return isDefault;\r\n+    }\r\n+\r\n+    public void setDefault(Boolean isDefault) {\r\n+        this.isDefault = isDefault;\r\n+    }\r\n+\r\n+    public Integer getCorethreads() {\r\n+        return corethreads;\r\n+    }\r\n+\r\n+    public void setCorethreads(Integer corethreads) {\r\n+        this.corethreads = corethreads;\r\n+    }\r\n+\r\n+    public Integer getThreads() {\r\n+        return threads;\r\n+    }\r\n+\r\n+    public void setThreads(Integer threads) {\r\n+        this.threads = threads;\r\n+    }\r\n+\r\n+    public Integer getQueues() {\r\n+        return queues;\r\n+    }\r\n+\r\n+    public void setQueues(Integer queues) {\r\n+        this.queues = queues;\r\n+    }\r\n+\r\n+    public Integer getShareconnections() {\r\n+        return shareconnections;\r\n+    }\r\n+\r\n+    public void setShareconnections(Integer shareconnections) {\r\n+        this.shareconnections = shareconnections;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/MetadataReportConfig.java", "source2": "org/apache/dubbo/config/MetadataReportConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,227 +1,227 @@\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.config;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;\n-import static org.apache.dubbo.common.constants.CommonConstants.PROPERTIES_CHAR_SEPARATOR;\n-import static org.apache.dubbo.common.utils.StringUtils.isEmpty;\n-\n-/**\n- * MetadataReportConfig\n- *\n- * @export\n- */\n-public class MetadataReportConfig extends AbstractConfig {\n-\n-    private static final long serialVersionUID = 55233L;\n-    /**\n-     * the value is : metadata-report\n-     */\n-    private static final String PREFIX_TAG = StringUtils.camelToSplitName(\n-            MetadataReportConfig.class.getSimpleName().substring(0, MetadataReportConfig.class.getSimpleName().length() - 6), PROPERTIES_CHAR_SEPARATOR);\n-\n-    // Register center address\n-    private String address;\n-\n-    // Username to login register center\n-    private String username;\n-\n-    // Password to login register center\n-    private String password;\n-\n-    // Request timeout in milliseconds for register center\n-    private Integer timeout;\n-\n-    /**\n-     * The group the metadata in . It is the same as registry\n-     */\n-    private String group;\n-\n-    // Customized parameters\n-    private Map<String, String> parameters;\n-\n-    private Integer retryTimes;\n-\n-    private Integer retryPeriod;\n-    /**\n-     * By default the metadatastore will store full metadata repeatedly every day .\n-     */\n-    private Boolean cycleReport;\n-\n-    /**\n-     * Sync report, default async\n-     */\n-    private Boolean syncReport;\n-\n-    /**\n-     * cluster\n-     */\n-    private Boolean cluster;\n-\n-    /**\n-     * registry id\n-     */\n-    private String registry;\n-\n-    public MetadataReportConfig() {\n-    }\n-\n-    public MetadataReportConfig(String address) {\n-        setAddress(address);\n-    }\n-\n-    public URL toUrl() throws IllegalArgumentException {\n-        String address = this.getAddress();\n-        if (isEmpty(address)) {\n-            throw new IllegalArgumentException(\"The address of metadata report is invalid.\");\n-        }\n-        Map<String, String> map = new HashMap<String, String>();\n-        URL url = URL.valueOf(address);\n-        // Issue : https://github.com/apache/dubbo/issues/6491\n-        // Append the parameters from address\n-        map.putAll(url.getParameters());\n-        // Append or overrides the properties as parameters\n-        appendParameters(map, this);\n-        // Normalize the parameters\n-        map.putAll(convert(map, null));\n-        // put the protocol of URL as the \"metadata\"\n-        map.put(\"metadata\", url.getProtocol());\n-        return new URL(\"metadata\", url.getUsername(), url.getPassword(), url.getHost(),\n-                url.getPort(), url.getPath(), map);\n-\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getAddress() {\n-        return address;\n-    }\n-\n-    public void setAddress(String address) {\n-        this.address = address;\n-    }\n-\n-    public String getUsername() {\n-        return username;\n-    }\n-\n-    public void setUsername(String username) {\n-        this.username = username;\n-    }\n-\n-    public String getPassword() {\n-        return password;\n-    }\n-\n-    public void setPassword(String password) {\n-        this.password = password;\n-    }\n-\n-    public Integer getTimeout() {\n-        return timeout;\n-    }\n-\n-    public void setTimeout(Integer timeout) {\n-        this.timeout = timeout;\n-    }\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-    @Parameter(key = \"retry-times\")\n-    public Integer getRetryTimes() {\n-        return retryTimes;\n-    }\n-\n-    public void setRetryTimes(Integer retryTimes) {\n-        this.retryTimes = retryTimes;\n-    }\n-\n-    @Parameter(key = \"retry-period\")\n-    public Integer getRetryPeriod() {\n-        return retryPeriod;\n-    }\n-\n-    public void setRetryPeriod(Integer retryPeriod) {\n-        this.retryPeriod = retryPeriod;\n-    }\n-\n-    @Parameter(key = \"cycle-report\")\n-    public Boolean getCycleReport() {\n-        return cycleReport;\n-    }\n-\n-    public void setCycleReport(Boolean cycleReport) {\n-        this.cycleReport = cycleReport;\n-    }\n-\n-    @Parameter(key = \"sync-report\")\n-    public Boolean getSyncReport() {\n-        return syncReport;\n-    }\n-\n-    public void setSyncReport(Boolean syncReport) {\n-        this.syncReport = syncReport;\n-    }\n-\n-    @Override\n-    @Parameter(excluded = true)\n-    public String getPrefix() {\n-        return StringUtils.isNotEmpty(prefix) ? prefix : (DUBBO + \".\" + PREFIX_TAG);\n-    }\n-\n-    @Override\n-    @Parameter(excluded = true)\n-    public boolean isValid() {\n-        return StringUtils.isNotEmpty(address);\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 Boolean getCluster() {\n-        return cluster;\n-    }\n-\n-    public void setCluster(Boolean cluster) {\n-        this.cluster = cluster;\n-    }\n-\n-    public String getRegistry() {\n-        return registry;\n-    }\n-\n-    public void setRegistry(String registry) {\n-        this.registry = registry;\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.config;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROPERTIES_CHAR_SEPARATOR;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isEmpty;\r\n+\r\n+/**\r\n+ * MetadataReportConfig\r\n+ *\r\n+ * @export\r\n+ */\r\n+public class MetadataReportConfig extends AbstractConfig {\r\n+\r\n+    private static final long serialVersionUID = 55233L;\r\n+    /**\r\n+     * the value is : metadata-report\r\n+     */\r\n+    private static final String PREFIX_TAG = StringUtils.camelToSplitName(\r\n+            MetadataReportConfig.class.getSimpleName().substring(0, MetadataReportConfig.class.getSimpleName().length() - 6), PROPERTIES_CHAR_SEPARATOR);\r\n+\r\n+    // Register center address\r\n+    private String address;\r\n+\r\n+    // Username to login register center\r\n+    private String username;\r\n+\r\n+    // Password to login register center\r\n+    private String password;\r\n+\r\n+    // Request timeout in milliseconds for register center\r\n+    private Integer timeout;\r\n+\r\n+    /**\r\n+     * The group the metadata in . It is the same as registry\r\n+     */\r\n+    private String group;\r\n+\r\n+    // Customized parameters\r\n+    private Map<String, String> parameters;\r\n+\r\n+    private Integer retryTimes;\r\n+\r\n+    private Integer retryPeriod;\r\n+    /**\r\n+     * By default the metadatastore will store full metadata repeatedly every day .\r\n+     */\r\n+    private Boolean cycleReport;\r\n+\r\n+    /**\r\n+     * Sync report, default async\r\n+     */\r\n+    private Boolean syncReport;\r\n+\r\n+    /**\r\n+     * cluster\r\n+     */\r\n+    private Boolean cluster;\r\n+\r\n+    /**\r\n+     * registry id\r\n+     */\r\n+    private String registry;\r\n+\r\n+    public MetadataReportConfig() {\r\n+    }\r\n+\r\n+    public MetadataReportConfig(String address) {\r\n+        setAddress(address);\r\n+    }\r\n+\r\n+    public URL toUrl() throws IllegalArgumentException {\r\n+        String address = this.getAddress();\r\n+        if (isEmpty(address)) {\r\n+            throw new IllegalArgumentException(\"The address of metadata report is invalid.\");\r\n+        }\r\n+        Map<String, String> map = new HashMap<String, String>();\r\n+        URL url = URL.valueOf(address);\r\n+        // Issue : https://github.com/apache/dubbo/issues/6491\r\n+        // Append the parameters from address\r\n+        map.putAll(url.getParameters());\r\n+        // Append or overrides the properties as parameters\r\n+        appendParameters(map, this);\r\n+        // Normalize the parameters\r\n+        map.putAll(convert(map, null));\r\n+        // put the protocol of URL as the \"metadata\"\r\n+        map.put(\"metadata\", url.getProtocol());\r\n+        return new URL(\"metadata\", url.getUsername(), url.getPassword(), url.getHost(),\r\n+                url.getPort(), url.getPath(), map);\r\n+\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getAddress() {\r\n+        return address;\r\n+    }\r\n+\r\n+    public void setAddress(String address) {\r\n+        this.address = address;\r\n+    }\r\n+\r\n+    public String getUsername() {\r\n+        return username;\r\n+    }\r\n+\r\n+    public void setUsername(String username) {\r\n+        this.username = username;\r\n+    }\r\n+\r\n+    public String getPassword() {\r\n+        return password;\r\n+    }\r\n+\r\n+    public void setPassword(String password) {\r\n+        this.password = password;\r\n+    }\r\n+\r\n+    public Integer getTimeout() {\r\n+        return timeout;\r\n+    }\r\n+\r\n+    public void setTimeout(Integer timeout) {\r\n+        this.timeout = timeout;\r\n+    }\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+    @Parameter(key = \"retry-times\")\r\n+    public Integer getRetryTimes() {\r\n+        return retryTimes;\r\n+    }\r\n+\r\n+    public void setRetryTimes(Integer retryTimes) {\r\n+        this.retryTimes = retryTimes;\r\n+    }\r\n+\r\n+    @Parameter(key = \"retry-period\")\r\n+    public Integer getRetryPeriod() {\r\n+        return retryPeriod;\r\n+    }\r\n+\r\n+    public void setRetryPeriod(Integer retryPeriod) {\r\n+        this.retryPeriod = retryPeriod;\r\n+    }\r\n+\r\n+    @Parameter(key = \"cycle-report\")\r\n+    public Boolean getCycleReport() {\r\n+        return cycleReport;\r\n+    }\r\n+\r\n+    public void setCycleReport(Boolean cycleReport) {\r\n+        this.cycleReport = cycleReport;\r\n+    }\r\n+\r\n+    @Parameter(key = \"sync-report\")\r\n+    public Boolean getSyncReport() {\r\n+        return syncReport;\r\n+    }\r\n+\r\n+    public void setSyncReport(Boolean syncReport) {\r\n+        this.syncReport = syncReport;\r\n+    }\r\n+\r\n+    @Override\r\n+    @Parameter(excluded = true)\r\n+    public String getPrefix() {\r\n+        return StringUtils.isNotEmpty(prefix) ? prefix : (DUBBO + \".\" + PREFIX_TAG);\r\n+    }\r\n+\r\n+    @Override\r\n+    @Parameter(excluded = true)\r\n+    public boolean isValid() {\r\n+        return StringUtils.isNotEmpty(address);\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 Boolean getCluster() {\r\n+        return cluster;\r\n+    }\r\n+\r\n+    public void setCluster(Boolean cluster) {\r\n+        this.cluster = cluster;\r\n+    }\r\n+\r\n+    public String getRegistry() {\r\n+        return registry;\r\n+    }\r\n+\r\n+    public void setRegistry(String registry) {\r\n+        this.registry = registry;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/MethodConfig.java", "source2": "org/apache/dubbo/config/MethodConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,332 +1,332 @@\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.config;\n-\n-import org.apache.dubbo.common.constants.CommonConstants;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.annotation.Method;\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import java.util.ArrayList;\n-import java.util.Collections;\n-import java.util.List;\n-\n-import static org.apache.dubbo.config.Constants.ON_INVOKE_INSTANCE_KEY;\n-import static org.apache.dubbo.config.Constants.ON_INVOKE_METHOD_KEY;\n-import static org.apache.dubbo.config.Constants.ON_RETURN_INSTANCE_KEY;\n-import static org.apache.dubbo.config.Constants.ON_RETURN_METHOD_KEY;\n-import static org.apache.dubbo.config.Constants.ON_THROW_INSTANCE_KEY;\n-import static org.apache.dubbo.config.Constants.ON_THROW_METHOD_KEY;\n-\n-/**\n- * The method configuration\n- *\n- * @export\n- */\n-public class MethodConfig extends AbstractMethodConfig {\n-\n-    private static final long serialVersionUID = 884908855422675941L;\n-\n-    /**\n-     * The method name\n-     */\n-    private String name;\n-\n-    /**\n-     * Stat\n-     */\n-    private Integer stat;\n-\n-    /**\n-     * Whether to retry\n-     */\n-    private Boolean retry;\n-\n-    /**\n-     * If it's reliable\n-     */\n-    private Boolean reliable;\n-\n-    /**\n-     * Thread limits for method invocations\n-     */\n-    private Integer executes;\n-\n-    /**\n-     * If it's deprecated\n-     */\n-    private Boolean deprecated;\n-\n-    /**\n-     * Whether to enable sticky\n-     */\n-    private Boolean sticky;\n-\n-    /**\n-     * Whether need to return\n-     */\n-    private Boolean isReturn;\n-\n-    /**\n-     * Callback instance when async-call is invoked\n-     */\n-    private Object oninvoke;\n-\n-    /**\n-     * Callback method when async-call is invoked\n-     */\n-    private String oninvokeMethod;\n-\n-    /**\n-     * Callback instance when async-call is returned\n-     */\n-    private Object onreturn;\n-\n-    /**\n-     * Callback method when async-call is returned\n-     */\n-    private String onreturnMethod;\n-\n-    /**\n-     * Callback instance when async-call has exception thrown\n-     */\n-    private Object onthrow;\n-\n-    /**\n-     * Callback method when async-call has exception thrown\n-     */\n-    private String onthrowMethod;\n-\n-    /**\n-     * The method arguments\n-     */\n-    private List<ArgumentConfig> arguments;\n-\n-    /**\n-     * These properties come from MethodConfig's parent Config module, they will neither be collected directly from xml or API nor be delivered to url\n-     */\n-    private String service;\n-    private String serviceId;\n-\n-    @Parameter(excluded = true)\n-    public String getName() {\n-        return name;\n-    }\n-\n-    public MethodConfig() {\n-    }\n-\n-    public MethodConfig(Method method) {\n-        appendAnnotation(Method.class, method);\n-\n-        this.setReturn(method.isReturn());\n-\n-        if(!\"\".equals(method.oninvoke())){\n-            this.setOninvoke(method.oninvoke());\n-        }\n-        if(!\"\".equals(method.onreturn())){\n-            this.setOnreturn(method.onreturn());\n-        }\n-        if(!\"\".equals(method.onthrow())){\n-            this.setOnthrow(method.onthrow());\n-        }\n-\n-        if (method.arguments() != null && method.arguments().length != 0) {\n-            List<ArgumentConfig> argumentConfigs = new ArrayList<ArgumentConfig>(method.arguments().length);\n-            this.setArguments(argumentConfigs);\n-            for (int i = 0; i < method.arguments().length; i++) {\n-                ArgumentConfig argumentConfig = new ArgumentConfig(method.arguments()[i]);\n-                argumentConfigs.add(argumentConfig);\n-            }\n-        }\n-    }\n-\n-    public static List<MethodConfig> constructMethodConfig(Method[] methods) {\n-        if (methods != null && methods.length != 0) {\n-            List<MethodConfig> methodConfigs = new ArrayList<MethodConfig>(methods.length);\n-            for (int i = 0; i < methods.length; i++) {\n-                MethodConfig methodConfig = new MethodConfig(methods[i]);\n-                methodConfigs.add(methodConfig);\n-            }\n-            return methodConfigs;\n-        }\n-        return Collections.emptyList();\n-    }\n-\n-    public void setName(String name) {\n-        this.name = name;\n-        // FIXME, add id strategy in ConfigManager\n-//        if (StringUtils.isEmpty(id)) {\n-//            id = name;\n-//        }\n-    }\n-\n-    public Integer getStat() {\n-        return stat;\n-    }\n-\n-    @Deprecated\n-    public void setStat(Integer stat) {\n-        this.stat = stat;\n-    }\n-\n-    @Deprecated\n-    public Boolean isRetry() {\n-        return retry;\n-    }\n-\n-    @Deprecated\n-    public void setRetry(Boolean retry) {\n-        this.retry = retry;\n-    }\n-\n-    @Deprecated\n-    public Boolean isReliable() {\n-        return reliable;\n-    }\n-\n-    @Deprecated\n-    public void setReliable(Boolean reliable) {\n-        this.reliable = reliable;\n-    }\n-\n-    public Integer getExecutes() {\n-        return executes;\n-    }\n-\n-    public void setExecutes(Integer executes) {\n-        this.executes = executes;\n-    }\n-\n-    public Boolean getDeprecated() {\n-        return deprecated;\n-    }\n-\n-    public void setDeprecated(Boolean deprecated) {\n-        this.deprecated = deprecated;\n-    }\n-\n-    public List<ArgumentConfig> getArguments() {\n-        return arguments;\n-    }\n-\n-    @SuppressWarnings(\"unchecked\")\n-    public void setArguments(List<? extends ArgumentConfig> arguments) {\n-        this.arguments = (List<ArgumentConfig>) arguments;\n-    }\n-\n-    public Boolean getSticky() {\n-        return sticky;\n-    }\n-\n-    public void setSticky(Boolean sticky) {\n-        this.sticky = sticky;\n-    }\n-\n-    @Parameter(key = ON_RETURN_INSTANCE_KEY, excluded = true, attribute = true)\n-    public Object getOnreturn() {\n-        return onreturn;\n-    }\n-\n-    public void setOnreturn(Object onreturn) {\n-        this.onreturn = onreturn;\n-    }\n-\n-    @Parameter(key = ON_RETURN_METHOD_KEY, excluded = true, attribute = true)\n-    public String getOnreturnMethod() {\n-        return onreturnMethod;\n-    }\n-\n-    public void setOnreturnMethod(String onreturnMethod) {\n-        this.onreturnMethod = onreturnMethod;\n-    }\n-\n-    @Parameter(key = ON_THROW_INSTANCE_KEY, excluded = true, attribute = true)\n-    public Object getOnthrow() {\n-        return onthrow;\n-    }\n-\n-    public void setOnthrow(Object onthrow) {\n-        this.onthrow = onthrow;\n-    }\n-\n-    @Parameter(key = ON_THROW_METHOD_KEY, excluded = true, attribute = true)\n-    public String getOnthrowMethod() {\n-        return onthrowMethod;\n-    }\n-\n-    public void setOnthrowMethod(String onthrowMethod) {\n-        this.onthrowMethod = onthrowMethod;\n-    }\n-\n-    @Parameter(key = ON_INVOKE_INSTANCE_KEY, excluded = true, attribute = true)\n-    public Object getOninvoke() {\n-        return oninvoke;\n-    }\n-\n-    public void setOninvoke(Object oninvoke) {\n-        this.oninvoke = oninvoke;\n-    }\n-\n-    @Parameter(key = ON_INVOKE_METHOD_KEY, excluded = true, attribute = true)\n-    public String getOninvokeMethod() {\n-        return oninvokeMethod;\n-    }\n-\n-    public void setOninvokeMethod(String oninvokeMethod) {\n-        this.oninvokeMethod = oninvokeMethod;\n-    }\n-\n-    public Boolean isReturn() {\n-        return isReturn;\n-    }\n-\n-    public void setReturn(Boolean isReturn) {\n-        this.isReturn = isReturn;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getService() {\n-        return service;\n-    }\n-\n-    public void setService(String service) {\n-        this.service = service;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getServiceId() {\n-        return serviceId;\n-    }\n-\n-    public void setServiceId(String serviceId) {\n-        this.serviceId = serviceId;\n-    }\n-\n-    /**\n-     * service and name must not be null.\n-     *\n-     * @return\n-     */\n-    @Override\n-    @Parameter(excluded = true)\n-    public String getPrefix() {\n-        return CommonConstants.DUBBO + \".\" + service\n-                + (StringUtils.isEmpty(serviceId) ? \"\" : (\".\" + serviceId))\n-                + \".\" + getName();\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.config;\r\n+\r\n+import org.apache.dubbo.common.constants.CommonConstants;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.annotation.Method;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Collections;\r\n+import java.util.List;\r\n+\r\n+import static org.apache.dubbo.config.Constants.ON_INVOKE_INSTANCE_KEY;\r\n+import static org.apache.dubbo.config.Constants.ON_INVOKE_METHOD_KEY;\r\n+import static org.apache.dubbo.config.Constants.ON_RETURN_INSTANCE_KEY;\r\n+import static org.apache.dubbo.config.Constants.ON_RETURN_METHOD_KEY;\r\n+import static org.apache.dubbo.config.Constants.ON_THROW_INSTANCE_KEY;\r\n+import static org.apache.dubbo.config.Constants.ON_THROW_METHOD_KEY;\r\n+\r\n+/**\r\n+ * The method configuration\r\n+ *\r\n+ * @export\r\n+ */\r\n+public class MethodConfig extends AbstractMethodConfig {\r\n+\r\n+    private static final long serialVersionUID = 884908855422675941L;\r\n+\r\n+    /**\r\n+     * The method name\r\n+     */\r\n+    private String name;\r\n+\r\n+    /**\r\n+     * Stat\r\n+     */\r\n+    private Integer stat;\r\n+\r\n+    /**\r\n+     * Whether to retry\r\n+     */\r\n+    private Boolean retry;\r\n+\r\n+    /**\r\n+     * If it's reliable\r\n+     */\r\n+    private Boolean reliable;\r\n+\r\n+    /**\r\n+     * Thread limits for method invocations\r\n+     */\r\n+    private Integer executes;\r\n+\r\n+    /**\r\n+     * If it's deprecated\r\n+     */\r\n+    private Boolean deprecated;\r\n+\r\n+    /**\r\n+     * Whether to enable sticky\r\n+     */\r\n+    private Boolean sticky;\r\n+\r\n+    /**\r\n+     * Whether need to return\r\n+     */\r\n+    private Boolean isReturn;\r\n+\r\n+    /**\r\n+     * Callback instance when async-call is invoked\r\n+     */\r\n+    private Object oninvoke;\r\n+\r\n+    /**\r\n+     * Callback method when async-call is invoked\r\n+     */\r\n+    private String oninvokeMethod;\r\n+\r\n+    /**\r\n+     * Callback instance when async-call is returned\r\n+     */\r\n+    private Object onreturn;\r\n+\r\n+    /**\r\n+     * Callback method when async-call is returned\r\n+     */\r\n+    private String onreturnMethod;\r\n+\r\n+    /**\r\n+     * Callback instance when async-call has exception thrown\r\n+     */\r\n+    private Object onthrow;\r\n+\r\n+    /**\r\n+     * Callback method when async-call has exception thrown\r\n+     */\r\n+    private String onthrowMethod;\r\n+\r\n+    /**\r\n+     * The method arguments\r\n+     */\r\n+    private List<ArgumentConfig> arguments;\r\n+\r\n+    /**\r\n+     * These properties come from MethodConfig's parent Config module, they will neither be collected directly from xml or API nor be delivered to url\r\n+     */\r\n+    private String service;\r\n+    private String serviceId;\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getName() {\r\n+        return name;\r\n+    }\r\n+\r\n+    public MethodConfig() {\r\n+    }\r\n+\r\n+    public MethodConfig(Method method) {\r\n+        appendAnnotation(Method.class, method);\r\n+\r\n+        this.setReturn(method.isReturn());\r\n+\r\n+        if(!\"\".equals(method.oninvoke())){\r\n+            this.setOninvoke(method.oninvoke());\r\n+        }\r\n+        if(!\"\".equals(method.onreturn())){\r\n+            this.setOnreturn(method.onreturn());\r\n+        }\r\n+        if(!\"\".equals(method.onthrow())){\r\n+            this.setOnthrow(method.onthrow());\r\n+        }\r\n+\r\n+        if (method.arguments() != null && method.arguments().length != 0) {\r\n+            List<ArgumentConfig> argumentConfigs = new ArrayList<ArgumentConfig>(method.arguments().length);\r\n+            this.setArguments(argumentConfigs);\r\n+            for (int i = 0; i < method.arguments().length; i++) {\r\n+                ArgumentConfig argumentConfig = new ArgumentConfig(method.arguments()[i]);\r\n+                argumentConfigs.add(argumentConfig);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public static List<MethodConfig> constructMethodConfig(Method[] methods) {\r\n+        if (methods != null && methods.length != 0) {\r\n+            List<MethodConfig> methodConfigs = new ArrayList<MethodConfig>(methods.length);\r\n+            for (int i = 0; i < methods.length; i++) {\r\n+                MethodConfig methodConfig = new MethodConfig(methods[i]);\r\n+                methodConfigs.add(methodConfig);\r\n+            }\r\n+            return methodConfigs;\r\n+        }\r\n+        return Collections.emptyList();\r\n+    }\r\n+\r\n+    public void setName(String name) {\r\n+        this.name = name;\r\n+        // FIXME, add id strategy in ConfigManager\r\n+//        if (StringUtils.isEmpty(id)) {\r\n+//            id = name;\r\n+//        }\r\n+    }\r\n+\r\n+    public Integer getStat() {\r\n+        return stat;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setStat(Integer stat) {\r\n+        this.stat = stat;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public Boolean isRetry() {\r\n+        return retry;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setRetry(Boolean retry) {\r\n+        this.retry = retry;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public Boolean isReliable() {\r\n+        return reliable;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setReliable(Boolean reliable) {\r\n+        this.reliable = reliable;\r\n+    }\r\n+\r\n+    public Integer getExecutes() {\r\n+        return executes;\r\n+    }\r\n+\r\n+    public void setExecutes(Integer executes) {\r\n+        this.executes = executes;\r\n+    }\r\n+\r\n+    public Boolean getDeprecated() {\r\n+        return deprecated;\r\n+    }\r\n+\r\n+    public void setDeprecated(Boolean deprecated) {\r\n+        this.deprecated = deprecated;\r\n+    }\r\n+\r\n+    public List<ArgumentConfig> getArguments() {\r\n+        return arguments;\r\n+    }\r\n+\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public void setArguments(List<? extends ArgumentConfig> arguments) {\r\n+        this.arguments = (List<ArgumentConfig>) arguments;\r\n+    }\r\n+\r\n+    public Boolean getSticky() {\r\n+        return sticky;\r\n+    }\r\n+\r\n+    public void setSticky(Boolean sticky) {\r\n+        this.sticky = sticky;\r\n+    }\r\n+\r\n+    @Parameter(key = ON_RETURN_INSTANCE_KEY, excluded = true, attribute = true)\r\n+    public Object getOnreturn() {\r\n+        return onreturn;\r\n+    }\r\n+\r\n+    public void setOnreturn(Object onreturn) {\r\n+        this.onreturn = onreturn;\r\n+    }\r\n+\r\n+    @Parameter(key = ON_RETURN_METHOD_KEY, excluded = true, attribute = true)\r\n+    public String getOnreturnMethod() {\r\n+        return onreturnMethod;\r\n+    }\r\n+\r\n+    public void setOnreturnMethod(String onreturnMethod) {\r\n+        this.onreturnMethod = onreturnMethod;\r\n+    }\r\n+\r\n+    @Parameter(key = ON_THROW_INSTANCE_KEY, excluded = true, attribute = true)\r\n+    public Object getOnthrow() {\r\n+        return onthrow;\r\n+    }\r\n+\r\n+    public void setOnthrow(Object onthrow) {\r\n+        this.onthrow = onthrow;\r\n+    }\r\n+\r\n+    @Parameter(key = ON_THROW_METHOD_KEY, excluded = true, attribute = true)\r\n+    public String getOnthrowMethod() {\r\n+        return onthrowMethod;\r\n+    }\r\n+\r\n+    public void setOnthrowMethod(String onthrowMethod) {\r\n+        this.onthrowMethod = onthrowMethod;\r\n+    }\r\n+\r\n+    @Parameter(key = ON_INVOKE_INSTANCE_KEY, excluded = true, attribute = true)\r\n+    public Object getOninvoke() {\r\n+        return oninvoke;\r\n+    }\r\n+\r\n+    public void setOninvoke(Object oninvoke) {\r\n+        this.oninvoke = oninvoke;\r\n+    }\r\n+\r\n+    @Parameter(key = ON_INVOKE_METHOD_KEY, excluded = true, attribute = true)\r\n+    public String getOninvokeMethod() {\r\n+        return oninvokeMethod;\r\n+    }\r\n+\r\n+    public void setOninvokeMethod(String oninvokeMethod) {\r\n+        this.oninvokeMethod = oninvokeMethod;\r\n+    }\r\n+\r\n+    public Boolean isReturn() {\r\n+        return isReturn;\r\n+    }\r\n+\r\n+    public void setReturn(Boolean isReturn) {\r\n+        this.isReturn = isReturn;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getService() {\r\n+        return service;\r\n+    }\r\n+\r\n+    public void setService(String service) {\r\n+        this.service = service;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getServiceId() {\r\n+        return serviceId;\r\n+    }\r\n+\r\n+    public void setServiceId(String serviceId) {\r\n+        this.serviceId = serviceId;\r\n+    }\r\n+\r\n+    /**\r\n+     * service and name must not be null.\r\n+     *\r\n+     * @return\r\n+     */\r\n+    @Override\r\n+    @Parameter(excluded = true)\r\n+    public String getPrefix() {\r\n+        return CommonConstants.DUBBO + \".\" + service\r\n+                + (StringUtils.isEmpty(serviceId) ? \"\" : (\".\" + serviceId))\r\n+                + \".\" + getName();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/MetricsConfig.java", "source2": "org/apache/dubbo/config/MetricsConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,53 +1,53 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-\n-package org.apache.dubbo.config;\n-\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.METRICS_PORT;\n-import static org.apache.dubbo.common.constants.CommonConstants.METRICS_PROTOCOL;\n-\n-public class MetricsConfig extends AbstractConfig {\n-\n-    private static final long serialVersionUID = -9089919311611546383L;\n-\n-    private String port;\n-    private String protocol;\n-\n-    public MetricsConfig() {\n-    }\n-\n-    @Parameter(key = METRICS_PORT)\n-    public String getPort() {\n-        return port;\n-    }\n-\n-    public void setPort(String port) {\n-        this.port = port;\n-    }\n-\n-    @Parameter(key = METRICS_PROTOCOL)\n-    public String getProtocol() {\n-        return protocol;\n-    }\n-\n-    public void setProtocol(String protocol) {\n-        this.protocol = protocol;\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+\r\n+package org.apache.dubbo.config;\r\n+\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.METRICS_PORT;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.METRICS_PROTOCOL;\r\n+\r\n+public class MetricsConfig extends AbstractConfig {\r\n+\r\n+    private static final long serialVersionUID = -9089919311611546383L;\r\n+\r\n+    private String port;\r\n+    private String protocol;\r\n+\r\n+    public MetricsConfig() {\r\n+    }\r\n+\r\n+    @Parameter(key = METRICS_PORT)\r\n+    public String getPort() {\r\n+        return port;\r\n+    }\r\n+\r\n+    public void setPort(String port) {\r\n+        this.port = port;\r\n+    }\r\n+\r\n+    @Parameter(key = METRICS_PROTOCOL)\r\n+    public String getProtocol() {\r\n+        return protocol;\r\n+    }\r\n+\r\n+    public void setProtocol(String protocol) {\r\n+        this.protocol = protocol;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/ModuleConfig.java", "source2": "org/apache/dubbo/config/ModuleConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,153 +1,153 @@\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.config;\n-\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import java.util.ArrayList;\n-import java.util.List;\n-\n-/**\n- * The module info\n- *\n- * @export\n- */\n-public class ModuleConfig extends AbstractConfig {\n-\n-    private static final long serialVersionUID = 5508512956753757169L;\n-\n-    /**\n-     * Module name\n-     */\n-    private String name;\n-\n-    /**\n-     * Module version\n-     */\n-    private String version;\n-\n-    /**\n-     * Module owner\n-     */\n-    private String owner;\n-\n-    /**\n-     * Module's organization\n-     */\n-    private String organization;\n-\n-    /**\n-     * Registry centers\n-     */\n-    private List<RegistryConfig> registries;\n-\n-    /**\n-     * Monitor center\n-     */\n-    private MonitorConfig monitor;\n-\n-    /**\n-     * If it's default\n-     */\n-    private Boolean isDefault;\n-\n-    public ModuleConfig() {\n-    }\n-\n-    public ModuleConfig(String name) {\n-        setName(name);\n-    }\n-\n-    @Parameter(key = \"module\")\n-    public String getName() {\n-        return name;\n-    }\n-\n-    public void setName(String name) {\n-        this.name = name;\n-        if (StringUtils.isEmpty(id)) {\n-            id = name;\n-        }\n-    }\n-\n-    @Parameter(key = \"module.version\")\n-    public String getVersion() {\n-        return version;\n-    }\n-\n-    public void setVersion(String version) {\n-        this.version = version;\n-    }\n-\n-    public String getOwner() {\n-        return owner;\n-    }\n-\n-    public void setOwner(String owner) {\n-        this.owner = owner;\n-    }\n-\n-    public String getOrganization() {\n-        return organization;\n-    }\n-\n-    public void setOrganization(String organization) {\n-        this.organization = organization;\n-    }\n-\n-    public RegistryConfig getRegistry() {\n-        return CollectionUtils.isEmpty(registries) ? null : registries.get(0);\n-    }\n-\n-    public void setRegistry(RegistryConfig registry) {\n-        List<RegistryConfig> registries = new ArrayList<RegistryConfig>(1);\n-        registries.add(registry);\n-        this.registries = registries;\n-    }\n-\n-    public List<RegistryConfig> getRegistries() {\n-        return registries;\n-    }\n-\n-    @SuppressWarnings({\"unchecked\"})\n-    public void setRegistries(List<? extends RegistryConfig> registries) {\n-        this.registries = (List<RegistryConfig>) registries;\n-    }\n-\n-    public MonitorConfig getMonitor() {\n-        return monitor;\n-    }\n-\n-    public void setMonitor(MonitorConfig monitor) {\n-        this.monitor = monitor;\n-    }\n-\n-    public void setMonitor(String monitor) {\n-        this.monitor = new MonitorConfig(monitor);\n-    }\n-\n-    public Boolean isDefault() {\n-        return isDefault;\n-    }\n-\n-    public void setDefault(Boolean isDefault) {\n-        this.isDefault = isDefault;\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.config;\r\n+\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * The module info\r\n+ *\r\n+ * @export\r\n+ */\r\n+public class ModuleConfig extends AbstractConfig {\r\n+\r\n+    private static final long serialVersionUID = 5508512956753757169L;\r\n+\r\n+    /**\r\n+     * Module name\r\n+     */\r\n+    private String name;\r\n+\r\n+    /**\r\n+     * Module version\r\n+     */\r\n+    private String version;\r\n+\r\n+    /**\r\n+     * Module owner\r\n+     */\r\n+    private String owner;\r\n+\r\n+    /**\r\n+     * Module's organization\r\n+     */\r\n+    private String organization;\r\n+\r\n+    /**\r\n+     * Registry centers\r\n+     */\r\n+    private List<RegistryConfig> registries;\r\n+\r\n+    /**\r\n+     * Monitor center\r\n+     */\r\n+    private MonitorConfig monitor;\r\n+\r\n+    /**\r\n+     * If it's default\r\n+     */\r\n+    private Boolean isDefault;\r\n+\r\n+    public ModuleConfig() {\r\n+    }\r\n+\r\n+    public ModuleConfig(String name) {\r\n+        setName(name);\r\n+    }\r\n+\r\n+    @Parameter(key = \"module\")\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+        if (StringUtils.isEmpty(id)) {\r\n+            id = name;\r\n+        }\r\n+    }\r\n+\r\n+    @Parameter(key = \"module.version\")\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 getOwner() {\r\n+        return owner;\r\n+    }\r\n+\r\n+    public void setOwner(String owner) {\r\n+        this.owner = owner;\r\n+    }\r\n+\r\n+    public String getOrganization() {\r\n+        return organization;\r\n+    }\r\n+\r\n+    public void setOrganization(String organization) {\r\n+        this.organization = organization;\r\n+    }\r\n+\r\n+    public RegistryConfig getRegistry() {\r\n+        return CollectionUtils.isEmpty(registries) ? null : registries.get(0);\r\n+    }\r\n+\r\n+    public void setRegistry(RegistryConfig registry) {\r\n+        List<RegistryConfig> registries = new ArrayList<RegistryConfig>(1);\r\n+        registries.add(registry);\r\n+        this.registries = registries;\r\n+    }\r\n+\r\n+    public List<RegistryConfig> getRegistries() {\r\n+        return registries;\r\n+    }\r\n+\r\n+    @SuppressWarnings({\"unchecked\"})\r\n+    public void setRegistries(List<? extends RegistryConfig> registries) {\r\n+        this.registries = (List<RegistryConfig>) registries;\r\n+    }\r\n+\r\n+    public MonitorConfig getMonitor() {\r\n+        return monitor;\r\n+    }\r\n+\r\n+    public void setMonitor(MonitorConfig monitor) {\r\n+        this.monitor = monitor;\r\n+    }\r\n+\r\n+    public void setMonitor(String monitor) {\r\n+        this.monitor = new MonitorConfig(monitor);\r\n+    }\r\n+\r\n+    public Boolean isDefault() {\r\n+        return isDefault;\r\n+    }\r\n+\r\n+    public void setDefault(Boolean isDefault) {\r\n+        this.isDefault = isDefault;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/MonitorConfig.java", "source2": "org/apache/dubbo/config/MonitorConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,160 +1,160 @@\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.config;\n-\n-import org.apache.dubbo.common.constants.RegistryConstants;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import java.util.Map;\n-\n-/**\n- * MonitorConfig\n- *\n- * @export\n- */\n-public class MonitorConfig extends AbstractConfig {\n-\n-    private static final long serialVersionUID = -1184681514659198203L;\n-\n-    /**\n-     * The protocol of the monitor, if the value is registry, it will search the monitor address from the registry center,\n-     * otherwise, it will directly connect to the monitor center\n-     */\n-    private String protocol;\n-\n-    /**\n-     * The monitor address\n-     */\n-    private String address;\n-\n-    /**\n-     * The monitor user name\n-     */\n-    private String username;\n-\n-    /**\n-     * The password\n-     */\n-    private String password;\n-\n-    private String group;\n-\n-    private String version;\n-\n-    private String interval;\n-\n-    /**\n-     * customized parameters\n-     */\n-    private Map<String, String> parameters;\n-\n-    /**\n-     * If it's default\n-     */\n-    private Boolean isDefault;\n-\n-    public MonitorConfig() {\n-    }\n-\n-    public MonitorConfig(String address) {\n-        this.address = address;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getAddress() {\n-        return address;\n-    }\n-\n-    public void setAddress(String address) {\n-        this.address = address;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getProtocol() {\n-        return protocol;\n-    }\n-\n-    public void setProtocol(String protocol) {\n-        this.protocol = protocol;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getUsername() {\n-        return username;\n-    }\n-\n-    public void setUsername(String username) {\n-        this.username = username;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getPassword() {\n-        return password;\n-    }\n-\n-    public void setPassword(String password) {\n-        this.password = password;\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 Map<String, String> getParameters() {\n-        return parameters;\n-    }\n-\n-    public void setParameters(Map<String, String> parameters) {\n-        this.parameters = parameters;\n-    }\n-\n-    public Boolean isDefault() {\n-        return isDefault;\n-    }\n-\n-    public void setDefault(Boolean isDefault) {\n-        this.isDefault = isDefault;\n-    }\n-\n-    public String getInterval() {\n-        return interval;\n-    }\n-\n-    public void setInterval(String interval) {\n-        this.interval = interval;\n-    }\n-\n-    @Override\n-    @Parameter(excluded = true)\n-    public boolean isValid() {\n-        return StringUtils.isNotEmpty(address) || RegistryConstants.REGISTRY_PROTOCOL.equals(protocol);\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.config;\r\n+\r\n+import org.apache.dubbo.common.constants.RegistryConstants;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * MonitorConfig\r\n+ *\r\n+ * @export\r\n+ */\r\n+public class MonitorConfig extends AbstractConfig {\r\n+\r\n+    private static final long serialVersionUID = -1184681514659198203L;\r\n+\r\n+    /**\r\n+     * The protocol of the monitor, if the value is registry, it will search the monitor address from the registry center,\r\n+     * otherwise, it will directly connect to the monitor center\r\n+     */\r\n+    private String protocol;\r\n+\r\n+    /**\r\n+     * The monitor address\r\n+     */\r\n+    private String address;\r\n+\r\n+    /**\r\n+     * The monitor user name\r\n+     */\r\n+    private String username;\r\n+\r\n+    /**\r\n+     * The password\r\n+     */\r\n+    private String password;\r\n+\r\n+    private String group;\r\n+\r\n+    private String version;\r\n+\r\n+    private String interval;\r\n+\r\n+    /**\r\n+     * customized parameters\r\n+     */\r\n+    private Map<String, String> parameters;\r\n+\r\n+    /**\r\n+     * If it's default\r\n+     */\r\n+    private Boolean isDefault;\r\n+\r\n+    public MonitorConfig() {\r\n+    }\r\n+\r\n+    public MonitorConfig(String address) {\r\n+        this.address = address;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getAddress() {\r\n+        return address;\r\n+    }\r\n+\r\n+    public void setAddress(String address) {\r\n+        this.address = address;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getProtocol() {\r\n+        return protocol;\r\n+    }\r\n+\r\n+    public void setProtocol(String protocol) {\r\n+        this.protocol = protocol;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getUsername() {\r\n+        return username;\r\n+    }\r\n+\r\n+    public void setUsername(String username) {\r\n+        this.username = username;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getPassword() {\r\n+        return password;\r\n+    }\r\n+\r\n+    public void setPassword(String password) {\r\n+        this.password = password;\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 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+    public Boolean isDefault() {\r\n+        return isDefault;\r\n+    }\r\n+\r\n+    public void setDefault(Boolean isDefault) {\r\n+        this.isDefault = isDefault;\r\n+    }\r\n+\r\n+    public String getInterval() {\r\n+        return interval;\r\n+    }\r\n+\r\n+    public void setInterval(String interval) {\r\n+        this.interval = interval;\r\n+    }\r\n+\r\n+    @Override\r\n+    @Parameter(excluded = true)\r\n+    public boolean isValid() {\r\n+        return StringUtils.isNotEmpty(address) || RegistryConstants.REGISTRY_PROTOCOL.equals(protocol);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/ProtocolConfig.java", "source2": "org/apache/dubbo/config/ProtocolConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,598 +1,598 @@\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.config;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import java.util.Map;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.SSL_ENABLED_KEY;\n-import static org.apache.dubbo.config.Constants.PROTOCOLS_SUFFIX;\n-\n-/**\n- * ProtocolConfig\n- *\n- * @export\n- */\n-public class ProtocolConfig extends AbstractConfig {\n-\n-    private static final long serialVersionUID = 6913423882496634749L;\n-\n-    /**\n-     * Protocol name\n-     */\n-    private String name;\n-\n-    /**\n-     * Service ip address (when there are multiple network cards available)\n-     */\n-    private String host;\n-\n-    /**\n-     * Service port\n-     */\n-    private Integer port;\n-\n-    /**\n-     * Context path\n-     */\n-    private String contextpath;\n-\n-    /**\n-     * Thread pool\n-     */\n-    private String threadpool;\n-\n-    /**\n-     * Thread pool name\n-     */\n-    private String threadname;\n-\n-    /**\n-     * Thread pool core thread size\n-     */\n-    private Integer corethreads;\n-\n-    /**\n-     * Thread pool size (fixed size)\n-     */\n-    private Integer threads;\n-\n-    /**\n-     * IO thread pool size (fixed size)\n-     */\n-    private Integer iothreads;\n-\n-    /**\n-     * Thread pool keepAliveTime, default unit TimeUnit.MILLISECONDS\n-     */\n-    private Integer alive;\n-\n-    /**\n-     * Thread pool's queue length\n-     */\n-    private Integer queues;\n-\n-    /**\n-     * Max acceptable connections\n-     */\n-    private Integer accepts;\n-\n-    /**\n-     * Protocol codec\n-     */\n-    private String codec;\n-\n-    /**\n-     * Serialization\n-     */\n-    private String serialization;\n-\n-    /**\n-     * Charset\n-     */\n-    private String charset;\n-\n-    /**\n-     * Payload max length\n-     */\n-    private Integer payload;\n-\n-    /**\n-     * Buffer size\n-     */\n-    private Integer buffer;\n-\n-    /**\n-     * Heartbeat interval\n-     */\n-    private Integer heartbeat;\n-\n-    /**\n-     * Access log\n-     */\n-    private String accesslog;\n-\n-    /**\n-     * Transporter\n-     */\n-    private String transporter;\n-\n-    /**\n-     * How information is exchanged\n-     */\n-    private String exchanger;\n-\n-    /**\n-     * Thread dispatch mode\n-     */\n-    private String dispatcher;\n-\n-    /**\n-     * Networker\n-     */\n-    private String networker;\n-\n-    /**\n-     * Sever impl\n-     */\n-    private String server;\n-\n-    /**\n-     * Client impl\n-     */\n-    private String client;\n-\n-    /**\n-     * Supported telnet commands, separated with comma.\n-     */\n-    private String telnet;\n-\n-    /**\n-     * Command line prompt\n-     */\n-    private String prompt;\n-\n-    /**\n-     * Status check\n-     */\n-    private String status;\n-\n-    /**\n-     * Whether to register\n-     */\n-    private Boolean register;\n-\n-    /**\n-     * whether it is a persistent connection\n-     */\n-    //TODO add this to provider config\n-    private Boolean keepAlive;\n-\n-    // TODO add this to provider config\n-    private String optimizer;\n-\n-    /**\n-     * The extension\n-     */\n-    private String extension;\n-\n-    /**\n-     * The customized parameters\n-     */\n-    private Map<String, String> parameters;\n-\n-    /**\n-     * If it's default\n-     */\n-    private Boolean isDefault;\n-\n-    private Boolean sslEnabled;\n-\n-    public ProtocolConfig() {\n-    }\n-\n-    public ProtocolConfig(String name) {\n-        setName(name);\n-    }\n-\n-    public ProtocolConfig(String name, int port) {\n-        setName(name);\n-        setPort(port);\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getName() {\n-        return name;\n-    }\n-\n-    public final void setName(String name) {\n-        this.name = name;\n-        this.updateIdIfAbsent(name);\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getHost() {\n-        return host;\n-    }\n-\n-    public void setHost(String host) {\n-        this.host = host;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public Integer getPort() {\n-        return port;\n-    }\n-\n-    public final void setPort(Integer port) {\n-        this.port = port;\n-    }\n-\n-    @Deprecated\n-    @Parameter(excluded = true)\n-    public String getPath() {\n-        return getContextpath();\n-    }\n-\n-    @Deprecated\n-    public void setPath(String path) {\n-        setContextpath(path);\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getContextpath() {\n-        return contextpath;\n-    }\n-\n-    public void setContextpath(String contextpath) {\n-        this.contextpath = contextpath;\n-    }\n-\n-    public String getThreadpool() {\n-        return threadpool;\n-    }\n-\n-    public void setThreadpool(String threadpool) {\n-        this.threadpool = threadpool;\n-    }\n-\n-    public String getThreadname() {\n-        return threadname;\n-    }\n-\n-    public void setThreadname(String threadname) {\n-        this.threadname = threadname;\n-    }\n-\n-    public Integer getCorethreads() {\n-        return corethreads;\n-    }\n-\n-    public void setCorethreads(Integer corethreads) {\n-        this.corethreads = corethreads;\n-    }\n-\n-    public Integer getThreads() {\n-        return threads;\n-    }\n-\n-    public void setThreads(Integer threads) {\n-        this.threads = threads;\n-    }\n-\n-    public Integer getIothreads() {\n-        return iothreads;\n-    }\n-\n-    public void setIothreads(Integer iothreads) {\n-        this.iothreads = iothreads;\n-    }\n-\n-    public Integer getAlive() {\n-        return alive;\n-    }\n-\n-    public void setAlive(Integer alive) {\n-        this.alive = alive;\n-    }\n-\n-    public Integer getQueues() {\n-        return queues;\n-    }\n-\n-    public void setQueues(Integer queues) {\n-        this.queues = queues;\n-    }\n-\n-    public Integer getAccepts() {\n-        return accepts;\n-    }\n-\n-    public void setAccepts(Integer accepts) {\n-        this.accepts = accepts;\n-    }\n-\n-    public String getCodec() {\n-        return codec;\n-    }\n-\n-    public void setCodec(String codec) {\n-        this.codec = codec;\n-    }\n-\n-    public String getSerialization() {\n-        return serialization;\n-    }\n-\n-    public void setSerialization(String serialization) {\n-        this.serialization = serialization;\n-    }\n-\n-    public String getCharset() {\n-        return charset;\n-    }\n-\n-    public void setCharset(String charset) {\n-        this.charset = charset;\n-    }\n-\n-    public Integer getPayload() {\n-        return payload;\n-    }\n-\n-    public void setPayload(Integer payload) {\n-        this.payload = payload;\n-    }\n-\n-    public Integer getBuffer() {\n-        return buffer;\n-    }\n-\n-    public void setBuffer(Integer buffer) {\n-        this.buffer = buffer;\n-    }\n-\n-    public Integer getHeartbeat() {\n-        return heartbeat;\n-    }\n-\n-    public void setHeartbeat(Integer heartbeat) {\n-        this.heartbeat = heartbeat;\n-    }\n-\n-    public String getServer() {\n-        return server;\n-    }\n-\n-    public void setServer(String server) {\n-        this.server = server;\n-    }\n-\n-    public String getClient() {\n-        return client;\n-    }\n-\n-    public void setClient(String client) {\n-        this.client = client;\n-    }\n-\n-    public String getAccesslog() {\n-        return accesslog;\n-    }\n-\n-    public void setAccesslog(String accesslog) {\n-        this.accesslog = accesslog;\n-    }\n-\n-    public String getTelnet() {\n-        return telnet;\n-    }\n-\n-    public void setTelnet(String telnet) {\n-        this.telnet = telnet;\n-    }\n-\n-    @Parameter(escaped = true)\n-    public String getPrompt() {\n-        return prompt;\n-    }\n-\n-    public void setPrompt(String prompt) {\n-        this.prompt = prompt;\n-    }\n-\n-    public String getStatus() {\n-        return status;\n-    }\n-\n-    public void setStatus(String status) {\n-        this.status = status;\n-    }\n-\n-    public Boolean isRegister() {\n-        return register;\n-    }\n-\n-    public void setRegister(Boolean register) {\n-        this.register = register;\n-    }\n-\n-    public String getTransporter() {\n-        return transporter;\n-    }\n-\n-    public void setTransporter(String transporter) {\n-        this.transporter = transporter;\n-    }\n-\n-    public String getExchanger() {\n-        return exchanger;\n-    }\n-\n-    public void setExchanger(String exchanger) {\n-        this.exchanger = exchanger;\n-    }\n-\n-    /**\n-     * typo, switch to use {@link #getDispatcher()}\n-     *\n-     * @deprecated {@link #getDispatcher()}\n-     */\n-    @Deprecated\n-    @Parameter(excluded = true)\n-    public String getDispather() {\n-        return getDispatcher();\n-    }\n-\n-    /**\n-     * typo, switch to use {@link #getDispatcher()}\n-     *\n-     * @deprecated {@link #setDispatcher(String)}\n-     */\n-    @Deprecated\n-    public void setDispather(String dispather) {\n-        setDispatcher(dispather);\n-    }\n-\n-    public String getDispatcher() {\n-        return dispatcher;\n-    }\n-\n-    public void setDispatcher(String dispatcher) {\n-        this.dispatcher = dispatcher;\n-    }\n-\n-    public String getNetworker() {\n-        return networker;\n-    }\n-\n-    public void setNetworker(String networker) {\n-        this.networker = networker;\n-    }\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-    public Boolean isDefault() {\n-        return isDefault;\n-    }\n-\n-    public void setDefault(Boolean isDefault) {\n-        this.isDefault = isDefault;\n-    }\n-\n-    @Parameter(key = SSL_ENABLED_KEY)\n-    public Boolean getSslEnabled() {\n-        return sslEnabled;\n-    }\n-\n-    public void setSslEnabled(Boolean sslEnabled) {\n-        this.sslEnabled = sslEnabled;\n-    }\n-\n-    public Boolean getKeepAlive() {\n-        return keepAlive;\n-    }\n-\n-    public void setKeepAlive(Boolean keepAlive) {\n-        this.keepAlive = keepAlive;\n-    }\n-\n-    public String getOptimizer() {\n-        return optimizer;\n-    }\n-\n-    public void setOptimizer(String optimizer) {\n-        this.optimizer = optimizer;\n-    }\n-\n-    public String getExtension() {\n-        return extension;\n-    }\n-\n-    public void setExtension(String extension) {\n-        this.extension = extension;\n-    }\n-\n-    @Override\n-    public void refresh() {\n-        if (StringUtils.isEmpty(this.getName())) {\n-            this.setName(DUBBO_VERSION_KEY);\n-        }\n-        super.refresh();\n-        if (StringUtils.isNotEmpty(this.getId())) {\n-            this.setPrefix(PROTOCOLS_SUFFIX);\n-            super.refresh();\n-        }\n-    }\n-\n-    @Override\n-    @Parameter(excluded = true)\n-    public boolean isValid() {\n-        return StringUtils.isNotEmpty(name);\n-    }\n-\n-    @Override\n-    public String toString() {\n-        final StringBuilder sb = new StringBuilder(\"ProtocolConfig{\");\n-        sb.append(\"name='\").append(name).append('\\'');\n-        sb.append(\", host='\").append(host).append('\\'');\n-        sb.append(\", port=\").append(port);\n-        sb.append(\", contextpath='\").append(contextpath).append('\\'');\n-        sb.append(\", threadpool='\").append(threadpool).append('\\'');\n-        sb.append(\", threadname='\").append(threadname).append('\\'');\n-        sb.append(\", corethreads=\").append(corethreads);\n-        sb.append(\", threads=\").append(threads);\n-        sb.append(\", iothreads=\").append(iothreads);\n-        sb.append(\", alive=\").append(alive);\n-        sb.append(\", queues=\").append(queues);\n-        sb.append(\", accepts=\").append(accepts);\n-        sb.append(\", codec='\").append(codec).append('\\'');\n-        sb.append(\", serialization='\").append(serialization).append('\\'');\n-        sb.append(\", charset='\").append(charset).append('\\'');\n-        sb.append(\", payload=\").append(payload);\n-        sb.append(\", buffer=\").append(buffer);\n-        sb.append(\", heartbeat=\").append(heartbeat);\n-        sb.append(\", accesslog='\").append(accesslog).append('\\'');\n-        sb.append(\", transporter='\").append(transporter).append('\\'');\n-        sb.append(\", exchanger='\").append(exchanger).append('\\'');\n-        sb.append(\", dispatcher='\").append(dispatcher).append('\\'');\n-        sb.append(\", networker='\").append(networker).append('\\'');\n-        sb.append(\", server='\").append(server).append('\\'');\n-        sb.append(\", client='\").append(client).append('\\'');\n-        sb.append(\", telnet='\").append(telnet).append('\\'');\n-        sb.append(\", prompt='\").append(prompt).append('\\'');\n-        sb.append(\", status='\").append(status).append('\\'');\n-        sb.append(\", register=\").append(register);\n-        sb.append(\", keepAlive=\").append(keepAlive);\n-        sb.append(\", optimizer='\").append(optimizer).append('\\'');\n-        sb.append(\", extension='\").append(extension).append('\\'');\n-        sb.append(\", parameters=\").append(parameters);\n-        sb.append(\", isDefault=\").append(isDefault);\n-        sb.append(\", sslEnabled=\").append(sslEnabled);\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.config;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import java.util.Map;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SSL_ENABLED_KEY;\r\n+import static org.apache.dubbo.config.Constants.PROTOCOLS_SUFFIX;\r\n+\r\n+/**\r\n+ * ProtocolConfig\r\n+ *\r\n+ * @export\r\n+ */\r\n+public class ProtocolConfig extends AbstractConfig {\r\n+\r\n+    private static final long serialVersionUID = 6913423882496634749L;\r\n+\r\n+    /**\r\n+     * Protocol name\r\n+     */\r\n+    private String name;\r\n+\r\n+    /**\r\n+     * Service ip address (when there are multiple network cards available)\r\n+     */\r\n+    private String host;\r\n+\r\n+    /**\r\n+     * Service port\r\n+     */\r\n+    private Integer port;\r\n+\r\n+    /**\r\n+     * Context path\r\n+     */\r\n+    private String contextpath;\r\n+\r\n+    /**\r\n+     * Thread pool\r\n+     */\r\n+    private String threadpool;\r\n+\r\n+    /**\r\n+     * Thread pool name\r\n+     */\r\n+    private String threadname;\r\n+\r\n+    /**\r\n+     * Thread pool core thread size\r\n+     */\r\n+    private Integer corethreads;\r\n+\r\n+    /**\r\n+     * Thread pool size (fixed size)\r\n+     */\r\n+    private Integer threads;\r\n+\r\n+    /**\r\n+     * IO thread pool size (fixed size)\r\n+     */\r\n+    private Integer iothreads;\r\n+\r\n+    /**\r\n+     * Thread pool keepAliveTime, default unit TimeUnit.MILLISECONDS\r\n+     */\r\n+    private Integer alive;\r\n+\r\n+    /**\r\n+     * Thread pool's queue length\r\n+     */\r\n+    private Integer queues;\r\n+\r\n+    /**\r\n+     * Max acceptable connections\r\n+     */\r\n+    private Integer accepts;\r\n+\r\n+    /**\r\n+     * Protocol codec\r\n+     */\r\n+    private String codec;\r\n+\r\n+    /**\r\n+     * Serialization\r\n+     */\r\n+    private String serialization;\r\n+\r\n+    /**\r\n+     * Charset\r\n+     */\r\n+    private String charset;\r\n+\r\n+    /**\r\n+     * Payload max length\r\n+     */\r\n+    private Integer payload;\r\n+\r\n+    /**\r\n+     * Buffer size\r\n+     */\r\n+    private Integer buffer;\r\n+\r\n+    /**\r\n+     * Heartbeat interval\r\n+     */\r\n+    private Integer heartbeat;\r\n+\r\n+    /**\r\n+     * Access log\r\n+     */\r\n+    private String accesslog;\r\n+\r\n+    /**\r\n+     * Transporter\r\n+     */\r\n+    private String transporter;\r\n+\r\n+    /**\r\n+     * How information is exchanged\r\n+     */\r\n+    private String exchanger;\r\n+\r\n+    /**\r\n+     * Thread dispatch mode\r\n+     */\r\n+    private String dispatcher;\r\n+\r\n+    /**\r\n+     * Networker\r\n+     */\r\n+    private String networker;\r\n+\r\n+    /**\r\n+     * Sever impl\r\n+     */\r\n+    private String server;\r\n+\r\n+    /**\r\n+     * Client impl\r\n+     */\r\n+    private String client;\r\n+\r\n+    /**\r\n+     * Supported telnet commands, separated with comma.\r\n+     */\r\n+    private String telnet;\r\n+\r\n+    /**\r\n+     * Command line prompt\r\n+     */\r\n+    private String prompt;\r\n+\r\n+    /**\r\n+     * Status check\r\n+     */\r\n+    private String status;\r\n+\r\n+    /**\r\n+     * Whether to register\r\n+     */\r\n+    private Boolean register;\r\n+\r\n+    /**\r\n+     * whether it is a persistent connection\r\n+     */\r\n+    //TODO add this to provider config\r\n+    private Boolean keepAlive;\r\n+\r\n+    // TODO add this to provider config\r\n+    private String optimizer;\r\n+\r\n+    /**\r\n+     * The extension\r\n+     */\r\n+    private String extension;\r\n+\r\n+    /**\r\n+     * The customized parameters\r\n+     */\r\n+    private Map<String, String> parameters;\r\n+\r\n+    /**\r\n+     * If it's default\r\n+     */\r\n+    private Boolean isDefault;\r\n+\r\n+    private Boolean sslEnabled;\r\n+\r\n+    public ProtocolConfig() {\r\n+    }\r\n+\r\n+    public ProtocolConfig(String name) {\r\n+        setName(name);\r\n+    }\r\n+\r\n+    public ProtocolConfig(String name, int port) {\r\n+        setName(name);\r\n+        setPort(port);\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getName() {\r\n+        return name;\r\n+    }\r\n+\r\n+    public final void setName(String name) {\r\n+        this.name = name;\r\n+        this.updateIdIfAbsent(name);\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getHost() {\r\n+        return host;\r\n+    }\r\n+\r\n+    public void setHost(String host) {\r\n+        this.host = host;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public Integer getPort() {\r\n+        return port;\r\n+    }\r\n+\r\n+    public final void setPort(Integer port) {\r\n+        this.port = port;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    @Parameter(excluded = true)\r\n+    public String getPath() {\r\n+        return getContextpath();\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setPath(String path) {\r\n+        setContextpath(path);\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getContextpath() {\r\n+        return contextpath;\r\n+    }\r\n+\r\n+    public void setContextpath(String contextpath) {\r\n+        this.contextpath = contextpath;\r\n+    }\r\n+\r\n+    public String getThreadpool() {\r\n+        return threadpool;\r\n+    }\r\n+\r\n+    public void setThreadpool(String threadpool) {\r\n+        this.threadpool = threadpool;\r\n+    }\r\n+\r\n+    public String getThreadname() {\r\n+        return threadname;\r\n+    }\r\n+\r\n+    public void setThreadname(String threadname) {\r\n+        this.threadname = threadname;\r\n+    }\r\n+\r\n+    public Integer getCorethreads() {\r\n+        return corethreads;\r\n+    }\r\n+\r\n+    public void setCorethreads(Integer corethreads) {\r\n+        this.corethreads = corethreads;\r\n+    }\r\n+\r\n+    public Integer getThreads() {\r\n+        return threads;\r\n+    }\r\n+\r\n+    public void setThreads(Integer threads) {\r\n+        this.threads = threads;\r\n+    }\r\n+\r\n+    public Integer getIothreads() {\r\n+        return iothreads;\r\n+    }\r\n+\r\n+    public void setIothreads(Integer iothreads) {\r\n+        this.iothreads = iothreads;\r\n+    }\r\n+\r\n+    public Integer getAlive() {\r\n+        return alive;\r\n+    }\r\n+\r\n+    public void setAlive(Integer alive) {\r\n+        this.alive = alive;\r\n+    }\r\n+\r\n+    public Integer getQueues() {\r\n+        return queues;\r\n+    }\r\n+\r\n+    public void setQueues(Integer queues) {\r\n+        this.queues = queues;\r\n+    }\r\n+\r\n+    public Integer getAccepts() {\r\n+        return accepts;\r\n+    }\r\n+\r\n+    public void setAccepts(Integer accepts) {\r\n+        this.accepts = accepts;\r\n+    }\r\n+\r\n+    public String getCodec() {\r\n+        return codec;\r\n+    }\r\n+\r\n+    public void setCodec(String codec) {\r\n+        this.codec = codec;\r\n+    }\r\n+\r\n+    public String getSerialization() {\r\n+        return serialization;\r\n+    }\r\n+\r\n+    public void setSerialization(String serialization) {\r\n+        this.serialization = serialization;\r\n+    }\r\n+\r\n+    public String getCharset() {\r\n+        return charset;\r\n+    }\r\n+\r\n+    public void setCharset(String charset) {\r\n+        this.charset = charset;\r\n+    }\r\n+\r\n+    public Integer getPayload() {\r\n+        return payload;\r\n+    }\r\n+\r\n+    public void setPayload(Integer payload) {\r\n+        this.payload = payload;\r\n+    }\r\n+\r\n+    public Integer getBuffer() {\r\n+        return buffer;\r\n+    }\r\n+\r\n+    public void setBuffer(Integer buffer) {\r\n+        this.buffer = buffer;\r\n+    }\r\n+\r\n+    public Integer getHeartbeat() {\r\n+        return heartbeat;\r\n+    }\r\n+\r\n+    public void setHeartbeat(Integer heartbeat) {\r\n+        this.heartbeat = heartbeat;\r\n+    }\r\n+\r\n+    public String getServer() {\r\n+        return server;\r\n+    }\r\n+\r\n+    public void setServer(String server) {\r\n+        this.server = server;\r\n+    }\r\n+\r\n+    public String getClient() {\r\n+        return client;\r\n+    }\r\n+\r\n+    public void setClient(String client) {\r\n+        this.client = client;\r\n+    }\r\n+\r\n+    public String getAccesslog() {\r\n+        return accesslog;\r\n+    }\r\n+\r\n+    public void setAccesslog(String accesslog) {\r\n+        this.accesslog = accesslog;\r\n+    }\r\n+\r\n+    public String getTelnet() {\r\n+        return telnet;\r\n+    }\r\n+\r\n+    public void setTelnet(String telnet) {\r\n+        this.telnet = telnet;\r\n+    }\r\n+\r\n+    @Parameter(escaped = true)\r\n+    public String getPrompt() {\r\n+        return prompt;\r\n+    }\r\n+\r\n+    public void setPrompt(String prompt) {\r\n+        this.prompt = prompt;\r\n+    }\r\n+\r\n+    public String getStatus() {\r\n+        return status;\r\n+    }\r\n+\r\n+    public void setStatus(String status) {\r\n+        this.status = status;\r\n+    }\r\n+\r\n+    public Boolean isRegister() {\r\n+        return register;\r\n+    }\r\n+\r\n+    public void setRegister(Boolean register) {\r\n+        this.register = register;\r\n+    }\r\n+\r\n+    public String getTransporter() {\r\n+        return transporter;\r\n+    }\r\n+\r\n+    public void setTransporter(String transporter) {\r\n+        this.transporter = transporter;\r\n+    }\r\n+\r\n+    public String getExchanger() {\r\n+        return exchanger;\r\n+    }\r\n+\r\n+    public void setExchanger(String exchanger) {\r\n+        this.exchanger = exchanger;\r\n+    }\r\n+\r\n+    /**\r\n+     * typo, switch to use {@link #getDispatcher()}\r\n+     *\r\n+     * @deprecated {@link #getDispatcher()}\r\n+     */\r\n+    @Deprecated\r\n+    @Parameter(excluded = true)\r\n+    public String getDispather() {\r\n+        return getDispatcher();\r\n+    }\r\n+\r\n+    /**\r\n+     * typo, switch to use {@link #getDispatcher()}\r\n+     *\r\n+     * @deprecated {@link #setDispatcher(String)}\r\n+     */\r\n+    @Deprecated\r\n+    public void setDispather(String dispather) {\r\n+        setDispatcher(dispather);\r\n+    }\r\n+\r\n+    public String getDispatcher() {\r\n+        return dispatcher;\r\n+    }\r\n+\r\n+    public void setDispatcher(String dispatcher) {\r\n+        this.dispatcher = dispatcher;\r\n+    }\r\n+\r\n+    public String getNetworker() {\r\n+        return networker;\r\n+    }\r\n+\r\n+    public void setNetworker(String networker) {\r\n+        this.networker = networker;\r\n+    }\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+    public Boolean isDefault() {\r\n+        return isDefault;\r\n+    }\r\n+\r\n+    public void setDefault(Boolean isDefault) {\r\n+        this.isDefault = isDefault;\r\n+    }\r\n+\r\n+    @Parameter(key = SSL_ENABLED_KEY)\r\n+    public Boolean getSslEnabled() {\r\n+        return sslEnabled;\r\n+    }\r\n+\r\n+    public void setSslEnabled(Boolean sslEnabled) {\r\n+        this.sslEnabled = sslEnabled;\r\n+    }\r\n+\r\n+    public Boolean getKeepAlive() {\r\n+        return keepAlive;\r\n+    }\r\n+\r\n+    public void setKeepAlive(Boolean keepAlive) {\r\n+        this.keepAlive = keepAlive;\r\n+    }\r\n+\r\n+    public String getOptimizer() {\r\n+        return optimizer;\r\n+    }\r\n+\r\n+    public void setOptimizer(String optimizer) {\r\n+        this.optimizer = optimizer;\r\n+    }\r\n+\r\n+    public String getExtension() {\r\n+        return extension;\r\n+    }\r\n+\r\n+    public void setExtension(String extension) {\r\n+        this.extension = extension;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void refresh() {\r\n+        if (StringUtils.isEmpty(this.getName())) {\r\n+            this.setName(DUBBO_VERSION_KEY);\r\n+        }\r\n+        super.refresh();\r\n+        if (StringUtils.isNotEmpty(this.getId())) {\r\n+            this.setPrefix(PROTOCOLS_SUFFIX);\r\n+            super.refresh();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    @Parameter(excluded = true)\r\n+    public boolean isValid() {\r\n+        return StringUtils.isNotEmpty(name);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        final StringBuilder sb = new StringBuilder(\"ProtocolConfig{\");\r\n+        sb.append(\"name='\").append(name).append('\\'');\r\n+        sb.append(\", host='\").append(host).append('\\'');\r\n+        sb.append(\", port=\").append(port);\r\n+        sb.append(\", contextpath='\").append(contextpath).append('\\'');\r\n+        sb.append(\", threadpool='\").append(threadpool).append('\\'');\r\n+        sb.append(\", threadname='\").append(threadname).append('\\'');\r\n+        sb.append(\", corethreads=\").append(corethreads);\r\n+        sb.append(\", threads=\").append(threads);\r\n+        sb.append(\", iothreads=\").append(iothreads);\r\n+        sb.append(\", alive=\").append(alive);\r\n+        sb.append(\", queues=\").append(queues);\r\n+        sb.append(\", accepts=\").append(accepts);\r\n+        sb.append(\", codec='\").append(codec).append('\\'');\r\n+        sb.append(\", serialization='\").append(serialization).append('\\'');\r\n+        sb.append(\", charset='\").append(charset).append('\\'');\r\n+        sb.append(\", payload=\").append(payload);\r\n+        sb.append(\", buffer=\").append(buffer);\r\n+        sb.append(\", heartbeat=\").append(heartbeat);\r\n+        sb.append(\", accesslog='\").append(accesslog).append('\\'');\r\n+        sb.append(\", transporter='\").append(transporter).append('\\'');\r\n+        sb.append(\", exchanger='\").append(exchanger).append('\\'');\r\n+        sb.append(\", dispatcher='\").append(dispatcher).append('\\'');\r\n+        sb.append(\", networker='\").append(networker).append('\\'');\r\n+        sb.append(\", server='\").append(server).append('\\'');\r\n+        sb.append(\", client='\").append(client).append('\\'');\r\n+        sb.append(\", telnet='\").append(telnet).append('\\'');\r\n+        sb.append(\", prompt='\").append(prompt).append('\\'');\r\n+        sb.append(\", status='\").append(status).append('\\'');\r\n+        sb.append(\", register=\").append(register);\r\n+        sb.append(\", keepAlive=\").append(keepAlive);\r\n+        sb.append(\", optimizer='\").append(optimizer).append('\\'');\r\n+        sb.append(\", extension='\").append(extension).append('\\'');\r\n+        sb.append(\", parameters=\").append(parameters);\r\n+        sb.append(\", isDefault=\").append(isDefault);\r\n+        sb.append(\", sslEnabled=\").append(sslEnabled);\r\n+        sb.append('}');\r\n+        return sb.toString();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/ProviderConfig.java", "source2": "org/apache/dubbo/config/ProviderConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,472 +1,472 @@\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.config;\n-\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-\n-/**\n- * The service provider default configuration\n- *\n- * @export\n- * @see org.apache.dubbo.config.ProtocolConfig\n- * @see ServiceConfigBase\n- */\n-public class ProviderConfig extends AbstractServiceConfig {\n-\n-    private static final long serialVersionUID = 6913423882496634749L;\n-\n-    // ======== protocol default values, it'll take effect when protocol's attributes are not set ========\n-\n-    /**\n-     * Service ip addresses (used when there are multiple network cards available)\n-     */\n-    private String host;\n-\n-    /**\n-     * Service port\n-     */\n-    private Integer port;\n-\n-    /**\n-     * Context path\n-     */\n-    private String contextpath;\n-\n-    /**\n-     * Thread pool\n-     */\n-    private String threadpool;\n-\n-    /**\n-     * Thread pool name\n-     */\n-    private String threadname;\n-\n-    /**\n-     * Thread pool size (fixed size)\n-     */\n-    private Integer threads;\n-\n-    /**\n-     * IO thread pool size (fixed size)\n-     */\n-    private Integer iothreads;\n-\n-    /**\n-     * Thread pool keepAliveTime, default unit TimeUnit.MILLISECONDS\n-     */\n-    private Integer alive;\n-\n-    /**\n-     * Thread pool queue length\n-     */\n-    private Integer queues;\n-\n-    /**\n-     * Max acceptable connections\n-     */\n-    private Integer accepts;\n-\n-    /**\n-     * Protocol codec\n-     */\n-    private String codec;\n-\n-    /**\n-     * The serialization charset\n-     */\n-    private String charset;\n-\n-    /**\n-     * Payload max length\n-     */\n-    private Integer payload;\n-\n-    /**\n-     * The network io buffer size\n-     */\n-    private Integer buffer;\n-\n-    /**\n-     * Transporter\n-     */\n-    private String transporter;\n-\n-    /**\n-     * How information gets exchanged\n-     */\n-    private String exchanger;\n-\n-    /**\n-     * Thread dispatching mode\n-     */\n-    private String dispatcher;\n-\n-    /**\n-     * Networker\n-     */\n-    private String networker;\n-\n-    /**\n-     * The server-side implementation model of the protocol\n-     */\n-    private String server;\n-\n-    /**\n-     * The client-side implementation model of the protocol\n-     */\n-    private String client;\n-\n-    /**\n-     * Supported telnet commands, separated with comma.\n-     */\n-    private String telnet;\n-\n-    /**\n-     * Command line prompt\n-     */\n-    private String prompt;\n-\n-    /**\n-     * Status check\n-     */\n-    private String status;\n-\n-    /**\n-     * Wait time when stop\n-     */\n-    private Integer wait;\n-\n-    /**\n-     * Whether to use the default protocol\n-     */\n-    private Boolean isDefault;\n-\n-    @Deprecated\n-    public void setProtocol(String protocol) {\n-        this.protocols = new ArrayList<>(Arrays.asList(new ProtocolConfig(protocol)));\n-    }\n-\n-    @Parameter(excluded = true)\n-    public Boolean isDefault() {\n-        return isDefault;\n-    }\n-\n-    @Deprecated\n-    public void setDefault(Boolean isDefault) {\n-        this.isDefault = isDefault;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getHost() {\n-        return host;\n-    }\n-\n-    public void setHost(String host) {\n-        this.host = host;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public Integer getPort() {\n-        return port;\n-    }\n-\n-    @Deprecated\n-    public void setPort(Integer port) {\n-        this.port = port;\n-    }\n-\n-    @Deprecated\n-    @Parameter(excluded = true)\n-    public String getPath() {\n-        return getContextpath();\n-    }\n-\n-    @Deprecated\n-    public void setPath(String path) {\n-        setContextpath(path);\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getContextpath() {\n-        return contextpath;\n-    }\n-\n-    public void setContextpath(String contextpath) {\n-        this.contextpath = contextpath;\n-    }\n-\n-    public String getThreadpool() {\n-        return threadpool;\n-    }\n-\n-    public void setThreadpool(String threadpool) {\n-        this.threadpool = threadpool;\n-    }\n-\n-    public String getThreadname() {\n-        return threadname;\n-    }\n-\n-    public void setThreadname(String threadname) {\n-        this.threadname = threadname;\n-    }\n-\n-    public Integer getThreads() {\n-        return threads;\n-    }\n-\n-    public void setThreads(Integer threads) {\n-        this.threads = threads;\n-    }\n-\n-    public Integer getIothreads() {\n-        return iothreads;\n-    }\n-\n-    public void setIothreads(Integer iothreads) {\n-        this.iothreads = iothreads;\n-    }\n-\n-    public Integer getAlive() {\n-        return alive;\n-    }\n-\n-    public void setAlive(Integer alive) {\n-        this.alive = alive;\n-    }\n-\n-    public Integer getQueues() {\n-        return queues;\n-    }\n-\n-    public void setQueues(Integer queues) {\n-        this.queues = queues;\n-    }\n-\n-    public Integer getAccepts() {\n-        return accepts;\n-    }\n-\n-    public void setAccepts(Integer accepts) {\n-        this.accepts = accepts;\n-    }\n-\n-    public String getCodec() {\n-        return codec;\n-    }\n-\n-    public void setCodec(String codec) {\n-        this.codec = codec;\n-    }\n-\n-    public String getCharset() {\n-        return charset;\n-    }\n-\n-    public void setCharset(String charset) {\n-        this.charset = charset;\n-    }\n-\n-    public Integer getPayload() {\n-        return payload;\n-    }\n-\n-    public void setPayload(Integer payload) {\n-        this.payload = payload;\n-    }\n-\n-    public Integer getBuffer() {\n-        return buffer;\n-    }\n-\n-    public void setBuffer(Integer buffer) {\n-        this.buffer = buffer;\n-    }\n-\n-    public String getServer() {\n-        return server;\n-    }\n-\n-    public void setServer(String server) {\n-        this.server = server;\n-    }\n-\n-    public String getClient() {\n-        return client;\n-    }\n-\n-    public void setClient(String client) {\n-        this.client = client;\n-    }\n-\n-    public String getTelnet() {\n-        return telnet;\n-    }\n-\n-    public void setTelnet(String telnet) {\n-        this.telnet = telnet;\n-    }\n-\n-    @Parameter(escaped = true)\n-    public String getPrompt() {\n-        return prompt;\n-    }\n-\n-    public void setPrompt(String prompt) {\n-        this.prompt = prompt;\n-    }\n-\n-    public String getStatus() {\n-        return status;\n-    }\n-\n-    public void setStatus(String status) {\n-        this.status = status;\n-    }\n-\n-    @Override\n-    public String getCluster() {\n-        return super.getCluster();\n-    }\n-\n-    @Override\n-    public Integer getConnections() {\n-        return super.getConnections();\n-    }\n-\n-    @Override\n-    public Integer getTimeout() {\n-        return super.getTimeout();\n-    }\n-\n-    @Override\n-    public Integer getRetries() {\n-        return super.getRetries();\n-    }\n-\n-    @Override\n-    public String getLoadbalance() {\n-        return super.getLoadbalance();\n-    }\n-\n-    @Override\n-    public Boolean isAsync() {\n-        return super.isAsync();\n-    }\n-\n-    @Override\n-    public Integer getActives() {\n-        return super.getActives();\n-    }\n-\n-    public String getTransporter() {\n-        return transporter;\n-    }\n-\n-    public void setTransporter(String transporter) {\n-        this.transporter = transporter;\n-    }\n-\n-    public String getExchanger() {\n-        return exchanger;\n-    }\n-\n-    public void setExchanger(String exchanger) {\n-        this.exchanger = exchanger;\n-    }\n-\n-    /**\n-     * typo, switch to use {@link #getDispatcher()}\n-     *\n-     * @deprecated {@link #getDispatcher()}\n-     */\n-    @Deprecated\n-    @Parameter(excluded = true)\n-    public String getDispather() {\n-        return getDispatcher();\n-    }\n-\n-    /**\n-     * typo, switch to use {@link #getDispatcher()}\n-     *\n-     * @deprecated {@link #setDispatcher(String)}\n-     */\n-    @Deprecated\n-    public void setDispather(String dispather) {\n-        setDispatcher(dispather);\n-    }\n-\n-    public String getDispatcher() {\n-        return dispatcher;\n-    }\n-\n-    public void setDispatcher(String dispatcher) {\n-        this.dispatcher = dispatcher;\n-    }\n-\n-    public String getNetworker() {\n-        return networker;\n-    }\n-\n-    public void setNetworker(String networker) {\n-        this.networker = networker;\n-    }\n-\n-    public Integer getWait() {\n-        return wait;\n-    }\n-\n-    public void setWait(Integer wait) {\n-        this.wait = wait;\n-    }\n-\n-    @Override\n-    public String toString() {\n-        final StringBuilder sb = new StringBuilder(\"ProviderConfig{\");\n-        sb.append(\"host='\").append(host).append('\\'');\n-        sb.append(\", port=\").append(port);\n-        sb.append(\", contextpath='\").append(contextpath).append('\\'');\n-        sb.append(\", threadpool='\").append(threadpool).append('\\'');\n-        sb.append(\", threadname='\").append(threadname).append('\\'');\n-        sb.append(\", threads=\").append(threads);\n-        sb.append(\", iothreads=\").append(iothreads);\n-        sb.append(\", alive=\").append(alive);\n-        sb.append(\", queues=\").append(queues);\n-        sb.append(\", accepts=\").append(accepts);\n-        sb.append(\", codec='\").append(codec).append('\\'');\n-        sb.append(\", charset='\").append(charset).append('\\'');\n-        sb.append(\", payload=\").append(payload);\n-        sb.append(\", buffer=\").append(buffer);\n-        sb.append(\", transporter='\").append(transporter).append('\\'');\n-        sb.append(\", exchanger='\").append(exchanger).append('\\'');\n-        sb.append(\", dispatcher='\").append(dispatcher).append('\\'');\n-        sb.append(\", networker='\").append(networker).append('\\'');\n-        sb.append(\", server='\").append(server).append('\\'');\n-        sb.append(\", client='\").append(client).append('\\'');\n-        sb.append(\", telnet='\").append(telnet).append('\\'');\n-        sb.append(\", prompt='\").append(prompt).append('\\'');\n-        sb.append(\", status='\").append(status).append('\\'');\n-        sb.append(\", wait=\").append(wait);\n-        sb.append(\", isDefault=\").append(isDefault);\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.config;\r\n+\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+\r\n+/**\r\n+ * The service provider default configuration\r\n+ *\r\n+ * @export\r\n+ * @see org.apache.dubbo.config.ProtocolConfig\r\n+ * @see ServiceConfigBase\r\n+ */\r\n+public class ProviderConfig extends AbstractServiceConfig {\r\n+\r\n+    private static final long serialVersionUID = 6913423882496634749L;\r\n+\r\n+    // ======== protocol default values, it'll take effect when protocol's attributes are not set ========\r\n+\r\n+    /**\r\n+     * Service ip addresses (used when there are multiple network cards available)\r\n+     */\r\n+    private String host;\r\n+\r\n+    /**\r\n+     * Service port\r\n+     */\r\n+    private Integer port;\r\n+\r\n+    /**\r\n+     * Context path\r\n+     */\r\n+    private String contextpath;\r\n+\r\n+    /**\r\n+     * Thread pool\r\n+     */\r\n+    private String threadpool;\r\n+\r\n+    /**\r\n+     * Thread pool name\r\n+     */\r\n+    private String threadname;\r\n+\r\n+    /**\r\n+     * Thread pool size (fixed size)\r\n+     */\r\n+    private Integer threads;\r\n+\r\n+    /**\r\n+     * IO thread pool size (fixed size)\r\n+     */\r\n+    private Integer iothreads;\r\n+\r\n+    /**\r\n+     * Thread pool keepAliveTime, default unit TimeUnit.MILLISECONDS\r\n+     */\r\n+    private Integer alive;\r\n+\r\n+    /**\r\n+     * Thread pool queue length\r\n+     */\r\n+    private Integer queues;\r\n+\r\n+    /**\r\n+     * Max acceptable connections\r\n+     */\r\n+    private Integer accepts;\r\n+\r\n+    /**\r\n+     * Protocol codec\r\n+     */\r\n+    private String codec;\r\n+\r\n+    /**\r\n+     * The serialization charset\r\n+     */\r\n+    private String charset;\r\n+\r\n+    /**\r\n+     * Payload max length\r\n+     */\r\n+    private Integer payload;\r\n+\r\n+    /**\r\n+     * The network io buffer size\r\n+     */\r\n+    private Integer buffer;\r\n+\r\n+    /**\r\n+     * Transporter\r\n+     */\r\n+    private String transporter;\r\n+\r\n+    /**\r\n+     * How information gets exchanged\r\n+     */\r\n+    private String exchanger;\r\n+\r\n+    /**\r\n+     * Thread dispatching mode\r\n+     */\r\n+    private String dispatcher;\r\n+\r\n+    /**\r\n+     * Networker\r\n+     */\r\n+    private String networker;\r\n+\r\n+    /**\r\n+     * The server-side implementation model of the protocol\r\n+     */\r\n+    private String server;\r\n+\r\n+    /**\r\n+     * The client-side implementation model of the protocol\r\n+     */\r\n+    private String client;\r\n+\r\n+    /**\r\n+     * Supported telnet commands, separated with comma.\r\n+     */\r\n+    private String telnet;\r\n+\r\n+    /**\r\n+     * Command line prompt\r\n+     */\r\n+    private String prompt;\r\n+\r\n+    /**\r\n+     * Status check\r\n+     */\r\n+    private String status;\r\n+\r\n+    /**\r\n+     * Wait time when stop\r\n+     */\r\n+    private Integer wait;\r\n+\r\n+    /**\r\n+     * Whether to use the default protocol\r\n+     */\r\n+    private Boolean isDefault;\r\n+\r\n+    @Deprecated\r\n+    public void setProtocol(String protocol) {\r\n+        this.protocols = new ArrayList<>(Arrays.asList(new ProtocolConfig(protocol)));\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public Boolean isDefault() {\r\n+        return isDefault;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setDefault(Boolean isDefault) {\r\n+        this.isDefault = isDefault;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getHost() {\r\n+        return host;\r\n+    }\r\n+\r\n+    public void setHost(String host) {\r\n+        this.host = host;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public Integer getPort() {\r\n+        return port;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setPort(Integer port) {\r\n+        this.port = port;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    @Parameter(excluded = true)\r\n+    public String getPath() {\r\n+        return getContextpath();\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setPath(String path) {\r\n+        setContextpath(path);\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getContextpath() {\r\n+        return contextpath;\r\n+    }\r\n+\r\n+    public void setContextpath(String contextpath) {\r\n+        this.contextpath = contextpath;\r\n+    }\r\n+\r\n+    public String getThreadpool() {\r\n+        return threadpool;\r\n+    }\r\n+\r\n+    public void setThreadpool(String threadpool) {\r\n+        this.threadpool = threadpool;\r\n+    }\r\n+\r\n+    public String getThreadname() {\r\n+        return threadname;\r\n+    }\r\n+\r\n+    public void setThreadname(String threadname) {\r\n+        this.threadname = threadname;\r\n+    }\r\n+\r\n+    public Integer getThreads() {\r\n+        return threads;\r\n+    }\r\n+\r\n+    public void setThreads(Integer threads) {\r\n+        this.threads = threads;\r\n+    }\r\n+\r\n+    public Integer getIothreads() {\r\n+        return iothreads;\r\n+    }\r\n+\r\n+    public void setIothreads(Integer iothreads) {\r\n+        this.iothreads = iothreads;\r\n+    }\r\n+\r\n+    public Integer getAlive() {\r\n+        return alive;\r\n+    }\r\n+\r\n+    public void setAlive(Integer alive) {\r\n+        this.alive = alive;\r\n+    }\r\n+\r\n+    public Integer getQueues() {\r\n+        return queues;\r\n+    }\r\n+\r\n+    public void setQueues(Integer queues) {\r\n+        this.queues = queues;\r\n+    }\r\n+\r\n+    public Integer getAccepts() {\r\n+        return accepts;\r\n+    }\r\n+\r\n+    public void setAccepts(Integer accepts) {\r\n+        this.accepts = accepts;\r\n+    }\r\n+\r\n+    public String getCodec() {\r\n+        return codec;\r\n+    }\r\n+\r\n+    public void setCodec(String codec) {\r\n+        this.codec = codec;\r\n+    }\r\n+\r\n+    public String getCharset() {\r\n+        return charset;\r\n+    }\r\n+\r\n+    public void setCharset(String charset) {\r\n+        this.charset = charset;\r\n+    }\r\n+\r\n+    public Integer getPayload() {\r\n+        return payload;\r\n+    }\r\n+\r\n+    public void setPayload(Integer payload) {\r\n+        this.payload = payload;\r\n+    }\r\n+\r\n+    public Integer getBuffer() {\r\n+        return buffer;\r\n+    }\r\n+\r\n+    public void setBuffer(Integer buffer) {\r\n+        this.buffer = buffer;\r\n+    }\r\n+\r\n+    public String getServer() {\r\n+        return server;\r\n+    }\r\n+\r\n+    public void setServer(String server) {\r\n+        this.server = server;\r\n+    }\r\n+\r\n+    public String getClient() {\r\n+        return client;\r\n+    }\r\n+\r\n+    public void setClient(String client) {\r\n+        this.client = client;\r\n+    }\r\n+\r\n+    public String getTelnet() {\r\n+        return telnet;\r\n+    }\r\n+\r\n+    public void setTelnet(String telnet) {\r\n+        this.telnet = telnet;\r\n+    }\r\n+\r\n+    @Parameter(escaped = true)\r\n+    public String getPrompt() {\r\n+        return prompt;\r\n+    }\r\n+\r\n+    public void setPrompt(String prompt) {\r\n+        this.prompt = prompt;\r\n+    }\r\n+\r\n+    public String getStatus() {\r\n+        return status;\r\n+    }\r\n+\r\n+    public void setStatus(String status) {\r\n+        this.status = status;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getCluster() {\r\n+        return super.getCluster();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Integer getConnections() {\r\n+        return super.getConnections();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Integer getTimeout() {\r\n+        return super.getTimeout();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Integer getRetries() {\r\n+        return super.getRetries();\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getLoadbalance() {\r\n+        return super.getLoadbalance();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Boolean isAsync() {\r\n+        return super.isAsync();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Integer getActives() {\r\n+        return super.getActives();\r\n+    }\r\n+\r\n+    public String getTransporter() {\r\n+        return transporter;\r\n+    }\r\n+\r\n+    public void setTransporter(String transporter) {\r\n+        this.transporter = transporter;\r\n+    }\r\n+\r\n+    public String getExchanger() {\r\n+        return exchanger;\r\n+    }\r\n+\r\n+    public void setExchanger(String exchanger) {\r\n+        this.exchanger = exchanger;\r\n+    }\r\n+\r\n+    /**\r\n+     * typo, switch to use {@link #getDispatcher()}\r\n+     *\r\n+     * @deprecated {@link #getDispatcher()}\r\n+     */\r\n+    @Deprecated\r\n+    @Parameter(excluded = true)\r\n+    public String getDispather() {\r\n+        return getDispatcher();\r\n+    }\r\n+\r\n+    /**\r\n+     * typo, switch to use {@link #getDispatcher()}\r\n+     *\r\n+     * @deprecated {@link #setDispatcher(String)}\r\n+     */\r\n+    @Deprecated\r\n+    public void setDispather(String dispather) {\r\n+        setDispatcher(dispather);\r\n+    }\r\n+\r\n+    public String getDispatcher() {\r\n+        return dispatcher;\r\n+    }\r\n+\r\n+    public void setDispatcher(String dispatcher) {\r\n+        this.dispatcher = dispatcher;\r\n+    }\r\n+\r\n+    public String getNetworker() {\r\n+        return networker;\r\n+    }\r\n+\r\n+    public void setNetworker(String networker) {\r\n+        this.networker = networker;\r\n+    }\r\n+\r\n+    public Integer getWait() {\r\n+        return wait;\r\n+    }\r\n+\r\n+    public void setWait(Integer wait) {\r\n+        this.wait = wait;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        final StringBuilder sb = new StringBuilder(\"ProviderConfig{\");\r\n+        sb.append(\"host='\").append(host).append('\\'');\r\n+        sb.append(\", port=\").append(port);\r\n+        sb.append(\", contextpath='\").append(contextpath).append('\\'');\r\n+        sb.append(\", threadpool='\").append(threadpool).append('\\'');\r\n+        sb.append(\", threadname='\").append(threadname).append('\\'');\r\n+        sb.append(\", threads=\").append(threads);\r\n+        sb.append(\", iothreads=\").append(iothreads);\r\n+        sb.append(\", alive=\").append(alive);\r\n+        sb.append(\", queues=\").append(queues);\r\n+        sb.append(\", accepts=\").append(accepts);\r\n+        sb.append(\", codec='\").append(codec).append('\\'');\r\n+        sb.append(\", charset='\").append(charset).append('\\'');\r\n+        sb.append(\", payload=\").append(payload);\r\n+        sb.append(\", buffer=\").append(buffer);\r\n+        sb.append(\", transporter='\").append(transporter).append('\\'');\r\n+        sb.append(\", exchanger='\").append(exchanger).append('\\'');\r\n+        sb.append(\", dispatcher='\").append(dispatcher).append('\\'');\r\n+        sb.append(\", networker='\").append(networker).append('\\'');\r\n+        sb.append(\", server='\").append(server).append('\\'');\r\n+        sb.append(\", client='\").append(client).append('\\'');\r\n+        sb.append(\", telnet='\").append(telnet).append('\\'');\r\n+        sb.append(\", prompt='\").append(prompt).append('\\'');\r\n+        sb.append(\", status='\").append(status).append('\\'');\r\n+        sb.append(\", wait=\").append(wait);\r\n+        sb.append(\", isDefault=\").append(isDefault);\r\n+        sb.append('}');\r\n+        return sb.toString();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/ReferenceConfigBase.java", "source2": "org/apache/dubbo/config/ReferenceConfigBase.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,264 +1,264 @@\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.config;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.ClassUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.annotation.Reference;\n-import org.apache.dubbo.config.support.Parameter;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.ServiceMetadata;\n-import org.apache.dubbo.rpc.service.GenericService;\n-import org.apache.dubbo.rpc.support.ProtocolUtils;\n-\n-import java.io.File;\n-import java.io.FileInputStream;\n-import java.io.IOException;\n-import java.util.Properties;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;\n-\n-/**\n- * ReferenceConfig\n- *\n- * @export\n- */\n-public abstract class ReferenceConfigBase<T> extends AbstractReferenceConfig {\n-\n-    private static final long serialVersionUID = -5864351140409987595L;\n-\n-    /**\n-     * The interface class of the reference service\n-     */\n-    protected Class<?> interfaceClass;\n-\n-    /**\n-     * client type\n-     */\n-    protected String client;\n-\n-    /**\n-     * The url for peer-to-peer invocation\n-     */\n-    protected String url;\n-\n-    /**\n-     * The consumer config (default)\n-     */\n-    protected ConsumerConfig consumer;\n-\n-    /**\n-     * Only the service provider of the specified protocol is invoked, and other protocols are ignored.\n-     */\n-    protected String protocol;\n-\n-\n-    public ReferenceConfigBase() {\n-        serviceMetadata = new ServiceMetadata();\n-        serviceMetadata.addAttribute(\"ORIGIN_CONFIG\", this);\n-    }\n-\n-    public ReferenceConfigBase(Reference reference) {\n-        serviceMetadata = new ServiceMetadata();\n-        serviceMetadata.addAttribute(\"ORIGIN_CONFIG\", this);\n-        appendAnnotation(Reference.class, reference);\n-        setMethods(MethodConfig.constructMethodConfig(reference.methods()));\n-    }\n-\n-    public boolean shouldCheck() {\n-        Boolean shouldCheck = isCheck();\n-        if (shouldCheck == null && getConsumer() != null) {\n-            shouldCheck = getConsumer().isCheck();\n-        }\n-        if (shouldCheck == null) {\n-            // default true\n-            shouldCheck = true;\n-        }\n-        return shouldCheck;\n-    }\n-\n-    public boolean shouldInit() {\n-        Boolean shouldInit = isInit();\n-        if (shouldInit == null && getConsumer() != null) {\n-            shouldInit = getConsumer().isInit();\n-        }\n-        if (shouldInit == null) {\n-            // default is true, spring will still init lazily by setting init's default value to false,\n-            // the def default setting happens in {@link ReferenceBean#afterPropertiesSet}.\n-            return true;\n-        }\n-        return shouldInit;\n-    }\n-\n-    public void checkDefault() throws IllegalStateException {\n-        if (consumer == null) {\n-            consumer = ApplicationModel.getConfigManager()\n-                    .getDefaultConsumer()\n-                    .orElse(new ConsumerConfig());\n-        }\n-    }\n-\n-    public Class<?> getActualInterface() {\n-        Class actualInterface = interfaceClass;\n-        if (interfaceClass == GenericService.class) {\n-            try {\n-                actualInterface = Class.forName(interfaceName);\n-            } catch (ClassNotFoundException e) {\n-                // ignore\n-            }\n-        }\n-        return actualInterface;\n-    }\n-\n-    public Class<?> getInterfaceClass() {\n-        if (interfaceClass != null) {\n-            return interfaceClass;\n-        }\n-        if (ProtocolUtils.isGeneric(getGeneric())\n-                || (getConsumer() != null && ProtocolUtils.isGeneric(getConsumer().getGeneric()))) {\n-            return GenericService.class;\n-        }\n-        try {\n-            if (interfaceName != null && interfaceName.length() > 0) {\n-                interfaceClass = Class.forName(interfaceName, true, ClassUtils.getClassLoader());\n-            }\n-        } catch (ClassNotFoundException t) {\n-            throw new IllegalStateException(t.getMessage(), t);\n-        }\n-\n-        return interfaceClass;\n-    }\n-\n-    /**\n-     * @param interfaceClass\n-     * @see #setInterface(Class)\n-     * @deprecated\n-     */\n-    @Deprecated\n-    public void setInterfaceClass(Class<?> interfaceClass) {\n-        setInterface(interfaceClass);\n-    }\n-\n-    public void setInterface(Class<?> interfaceClass) {\n-        if (interfaceClass != null && !interfaceClass.isInterface()) {\n-            throw new IllegalStateException(\"The interface class \" + interfaceClass + \" is not a interface!\");\n-        }\n-        this.interfaceClass = interfaceClass;\n-        setInterface(interfaceClass == null ? null : interfaceClass.getName());\n-    }\n-\n-    public String getClient() {\n-        return client;\n-    }\n-\n-    public void setClient(String client) {\n-        this.client = client;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getUrl() {\n-        return url;\n-    }\n-\n-    public void setUrl(String url) {\n-        this.url = url;\n-    }\n-\n-    public ConsumerConfig getConsumer() {\n-        return consumer;\n-    }\n-\n-    public void setConsumer(ConsumerConfig consumer) {\n-        this.consumer = consumer;\n-    }\n-\n-    public String getProtocol() {\n-        return protocol;\n-    }\n-\n-    public void setProtocol(String protocol) {\n-        this.protocol = protocol;\n-    }\n-\n-    public ServiceMetadata getServiceMetadata() {\n-        return serviceMetadata;\n-    }\n-\n-    @Override\n-    @Parameter(excluded = true)\n-    public String getPrefix() {\n-        return DUBBO + \".reference.\" + interfaceName;\n-    }\n-\n-    public void resolveFile() {\n-        String resolve = System.getProperty(interfaceName);\n-        String resolveFile = null;\n-        if (StringUtils.isEmpty(resolve)) {\n-            resolveFile = System.getProperty(\"dubbo.resolve.file\");\n-            if (StringUtils.isEmpty(resolveFile)) {\n-                File userResolveFile = new File(new File(System.getProperty(\"user.home\")), \"dubbo-resolve.properties\");\n-                if (userResolveFile.exists()) {\n-                    resolveFile = userResolveFile.getAbsolutePath();\n-                }\n-            }\n-            if (resolveFile != null && resolveFile.length() > 0) {\n-                Properties properties = new Properties();\n-                try (FileInputStream fis = new FileInputStream(new File(resolveFile))) {\n-                    properties.load(fis);\n-                } catch (IOException e) {\n-                    throw new IllegalStateException(\"Failed to load \" + resolveFile + \", cause: \" + e.getMessage(), e);\n-                }\n-\n-                resolve = properties.getProperty(interfaceName);\n-            }\n-        }\n-        if (resolve != null && resolve.length() > 0) {\n-            url = resolve;\n-            if (logger.isWarnEnabled()) {\n-                if (resolveFile != null) {\n-                    logger.warn(\"Using default dubbo resolve file \" + resolveFile + \" replace \" + interfaceName + \"\" + resolve + \" to p2p invoke remote service.\");\n-                } else {\n-                    logger.warn(\"Using -D\" + interfaceName + \"=\" + resolve + \" to p2p invoke remote service.\");\n-                }\n-            }\n-        }\n-    }\n-\n-    @Override\n-    protected void computeValidRegistryIds() {\n-        if (consumer != null) {\n-            if (notHasSelfRegistryProperty()) {\n-                setRegistries(consumer.getRegistries());\n-                setRegistryIds(consumer.getRegistryIds());\n-            }\n-        }\n-\n-        super.computeValidRegistryIds();\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getUniqueServiceName() {\n-        return URL.buildKey(interfaceName, getGroup(), getVersion());\n-    }\n-\n-    public abstract T get();\n-\n-    public abstract void destroy();\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.config;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.ClassUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.annotation.Reference;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.ServiceMetadata;\r\n+import org.apache.dubbo.rpc.service.GenericService;\r\n+import org.apache.dubbo.rpc.support.ProtocolUtils;\r\n+\r\n+import java.io.File;\r\n+import java.io.FileInputStream;\r\n+import java.io.IOException;\r\n+import java.util.Properties;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;\r\n+\r\n+/**\r\n+ * ReferenceConfig\r\n+ *\r\n+ * @export\r\n+ */\r\n+public abstract class ReferenceConfigBase<T> extends AbstractReferenceConfig {\r\n+\r\n+    private static final long serialVersionUID = -5864351140409987595L;\r\n+\r\n+    /**\r\n+     * The interface class of the reference service\r\n+     */\r\n+    protected Class<?> interfaceClass;\r\n+\r\n+    /**\r\n+     * client type\r\n+     */\r\n+    protected String client;\r\n+\r\n+    /**\r\n+     * The url for peer-to-peer invocation\r\n+     */\r\n+    protected String url;\r\n+\r\n+    /**\r\n+     * The consumer config (default)\r\n+     */\r\n+    protected ConsumerConfig consumer;\r\n+\r\n+    /**\r\n+     * Only the service provider of the specified protocol is invoked, and other protocols are ignored.\r\n+     */\r\n+    protected String protocol;\r\n+\r\n+\r\n+    public ReferenceConfigBase() {\r\n+        serviceMetadata = new ServiceMetadata();\r\n+        serviceMetadata.addAttribute(\"ORIGIN_CONFIG\", this);\r\n+    }\r\n+\r\n+    public ReferenceConfigBase(Reference reference) {\r\n+        serviceMetadata = new ServiceMetadata();\r\n+        serviceMetadata.addAttribute(\"ORIGIN_CONFIG\", this);\r\n+        appendAnnotation(Reference.class, reference);\r\n+        setMethods(MethodConfig.constructMethodConfig(reference.methods()));\r\n+    }\r\n+\r\n+    public boolean shouldCheck() {\r\n+        Boolean shouldCheck = isCheck();\r\n+        if (shouldCheck == null && getConsumer() != null) {\r\n+            shouldCheck = getConsumer().isCheck();\r\n+        }\r\n+        if (shouldCheck == null) {\r\n+            // default true\r\n+            shouldCheck = true;\r\n+        }\r\n+        return shouldCheck;\r\n+    }\r\n+\r\n+    public boolean shouldInit() {\r\n+        Boolean shouldInit = isInit();\r\n+        if (shouldInit == null && getConsumer() != null) {\r\n+            shouldInit = getConsumer().isInit();\r\n+        }\r\n+        if (shouldInit == null) {\r\n+            // default is true, spring will still init lazily by setting init's default value to false,\r\n+            // the def default setting happens in {@link ReferenceBean#afterPropertiesSet}.\r\n+            return true;\r\n+        }\r\n+        return shouldInit;\r\n+    }\r\n+\r\n+    public void checkDefault() throws IllegalStateException {\r\n+        if (consumer == null) {\r\n+            consumer = ApplicationModel.getConfigManager()\r\n+                    .getDefaultConsumer()\r\n+                    .orElse(new ConsumerConfig());\r\n+        }\r\n+    }\r\n+\r\n+    public Class<?> getActualInterface() {\r\n+        Class actualInterface = interfaceClass;\r\n+        if (interfaceClass == GenericService.class) {\r\n+            try {\r\n+                actualInterface = Class.forName(interfaceName);\r\n+            } catch (ClassNotFoundException e) {\r\n+                // ignore\r\n+            }\r\n+        }\r\n+        return actualInterface;\r\n+    }\r\n+\r\n+    public Class<?> getInterfaceClass() {\r\n+        if (interfaceClass != null) {\r\n+            return interfaceClass;\r\n+        }\r\n+        if (ProtocolUtils.isGeneric(getGeneric())\r\n+                || (getConsumer() != null && ProtocolUtils.isGeneric(getConsumer().getGeneric()))) {\r\n+            return GenericService.class;\r\n+        }\r\n+        try {\r\n+            if (interfaceName != null && interfaceName.length() > 0) {\r\n+                interfaceClass = Class.forName(interfaceName, true, ClassUtils.getClassLoader());\r\n+            }\r\n+        } catch (ClassNotFoundException t) {\r\n+            throw new IllegalStateException(t.getMessage(), t);\r\n+        }\r\n+\r\n+        return interfaceClass;\r\n+    }\r\n+\r\n+    /**\r\n+     * @param interfaceClass\r\n+     * @see #setInterface(Class)\r\n+     * @deprecated\r\n+     */\r\n+    @Deprecated\r\n+    public void setInterfaceClass(Class<?> interfaceClass) {\r\n+        setInterface(interfaceClass);\r\n+    }\r\n+\r\n+    public void setInterface(Class<?> interfaceClass) {\r\n+        if (interfaceClass != null && !interfaceClass.isInterface()) {\r\n+            throw new IllegalStateException(\"The interface class \" + interfaceClass + \" is not a interface!\");\r\n+        }\r\n+        this.interfaceClass = interfaceClass;\r\n+        setInterface(interfaceClass == null ? null : interfaceClass.getName());\r\n+    }\r\n+\r\n+    public String getClient() {\r\n+        return client;\r\n+    }\r\n+\r\n+    public void setClient(String client) {\r\n+        this.client = client;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getUrl() {\r\n+        return url;\r\n+    }\r\n+\r\n+    public void setUrl(String url) {\r\n+        this.url = url;\r\n+    }\r\n+\r\n+    public ConsumerConfig getConsumer() {\r\n+        return consumer;\r\n+    }\r\n+\r\n+    public void setConsumer(ConsumerConfig consumer) {\r\n+        this.consumer = consumer;\r\n+    }\r\n+\r\n+    public String getProtocol() {\r\n+        return protocol;\r\n+    }\r\n+\r\n+    public void setProtocol(String protocol) {\r\n+        this.protocol = protocol;\r\n+    }\r\n+\r\n+    public ServiceMetadata getServiceMetadata() {\r\n+        return serviceMetadata;\r\n+    }\r\n+\r\n+    @Override\r\n+    @Parameter(excluded = true)\r\n+    public String getPrefix() {\r\n+        return DUBBO + \".reference.\" + interfaceName;\r\n+    }\r\n+\r\n+    public void resolveFile() {\r\n+        String resolve = System.getProperty(interfaceName);\r\n+        String resolveFile = null;\r\n+        if (StringUtils.isEmpty(resolve)) {\r\n+            resolveFile = System.getProperty(\"dubbo.resolve.file\");\r\n+            if (StringUtils.isEmpty(resolveFile)) {\r\n+                File userResolveFile = new File(new File(System.getProperty(\"user.home\")), \"dubbo-resolve.properties\");\r\n+                if (userResolveFile.exists()) {\r\n+                    resolveFile = userResolveFile.getAbsolutePath();\r\n+                }\r\n+            }\r\n+            if (resolveFile != null && resolveFile.length() > 0) {\r\n+                Properties properties = new Properties();\r\n+                try (FileInputStream fis = new FileInputStream(new File(resolveFile))) {\r\n+                    properties.load(fis);\r\n+                } catch (IOException e) {\r\n+                    throw new IllegalStateException(\"Failed to load \" + resolveFile + \", cause: \" + e.getMessage(), e);\r\n+                }\r\n+\r\n+                resolve = properties.getProperty(interfaceName);\r\n+            }\r\n+        }\r\n+        if (resolve != null && resolve.length() > 0) {\r\n+            url = resolve;\r\n+            if (logger.isWarnEnabled()) {\r\n+                if (resolveFile != null) {\r\n+                    logger.warn(\"Using default dubbo resolve file \" + resolveFile + \" replace \" + interfaceName + \"\" + resolve + \" to p2p invoke remote service.\");\r\n+                } else {\r\n+                    logger.warn(\"Using -D\" + interfaceName + \"=\" + resolve + \" to p2p invoke remote service.\");\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void computeValidRegistryIds() {\r\n+        if (consumer != null) {\r\n+            if (notHasSelfRegistryProperty()) {\r\n+                setRegistries(consumer.getRegistries());\r\n+                setRegistryIds(consumer.getRegistryIds());\r\n+            }\r\n+        }\r\n+\r\n+        super.computeValidRegistryIds();\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getUniqueServiceName() {\r\n+        return URL.buildKey(interfaceName, getGroup(), getVersion());\r\n+    }\r\n+\r\n+    public abstract T get();\r\n+\r\n+    public abstract void destroy();\r\n+\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/RegistryConfig.java", "source2": "org/apache/dubbo/config/RegistryConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,533 +1,533 @@\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.config;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import java.util.Map;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.EXTRA_KEYS_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY;\n-import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;\n-import static org.apache.dubbo.common.utils.PojoUtils.updatePropertyIfAbsent;\n-import static org.apache.dubbo.config.Constants.REGISTRIES_SUFFIX;\n-\n-/**\n- * RegistryConfig\n- *\n- * @export\n- */\n-public class RegistryConfig extends AbstractConfig {\n-\n-    public static final String NO_AVAILABLE = \"N/A\";\n-    private static final long serialVersionUID = 5508512956753757169L;\n-\n-    /**\n-     * Register center address\n-     */\n-    private String address;\n-\n-    /**\n-     * Username to login register center\n-     */\n-    private String username;\n-\n-    /**\n-     * Password to login register center\n-     */\n-    private String password;\n-\n-    /**\n-     * Default port for register center\n-     */\n-    private Integer port;\n-\n-    /**\n-     * Protocol for register center\n-     */\n-    private String protocol;\n-\n-    /**\n-     * Network transmission type\n-     */\n-    private String transporter;\n-\n-    private String server;\n-\n-    private String client;\n-\n-    /**\n-     * Affects how traffic distributes among registries, useful when subscribing multiple registries, available options:\n-     * 1. zone-aware, a certain type of traffic always goes to one Registry according to where the traffic is originated.\n-     */\n-    private String cluster;\n-\n-    /**\n-     * The region where the registry belongs, usually used to isolate traffics\n-     */\n-    private String zone;\n-\n-    /**\n-     * The group the services registry in\n-     */\n-    private String group;\n-\n-    private String version;\n-\n-    /**\n-     * Request timeout in milliseconds for register center\n-     */\n-    private Integer timeout;\n-\n-    /**\n-     * Session timeout in milliseconds for register center\n-     */\n-    private Integer session;\n-\n-    /**\n-     * File for saving register center dynamic list\n-     */\n-    private String file;\n-\n-    /**\n-     * Wait time before stop\n-     */\n-    private Integer wait;\n-\n-    /**\n-     * Whether to check if register center is available when boot up\n-     */\n-    private Boolean check;\n-\n-    /**\n-     * Whether to allow dynamic service to register on the register center\n-     */\n-    private Boolean dynamic;\n-\n-    /**\n-     * Whether to export service on the register center\n-     */\n-    private Boolean register;\n-\n-    /**\n-     * Whether allow to subscribe service on the register center\n-     */\n-    private Boolean subscribe;\n-\n-    /**\n-     * The customized parameters\n-     */\n-    private Map<String, String> parameters;\n-\n-    /**\n-     * Whether it's default\n-     */\n-    private Boolean isDefault;\n-\n-    /**\n-     * Simple the registry. both useful for provider and consumer\n-     *\n-     * @since 2.7.0\n-     */\n-    private Boolean simplified;\n-    /**\n-     * After simplify the registry, should add some parameter individually. just for provider.\n-     * <p>\n-     * such as: extra-keys = A,b,c,d\n-     *\n-     * @since 2.7.0\n-     */\n-    private String extraKeys;\n-\n-    /**\n-     * the address work as config center or not\n-     */\n-    private Boolean useAsConfigCenter;\n-\n-    /**\n-     * the address work as remote metadata center or not\n-     */\n-    private Boolean useAsMetadataCenter;\n-\n-    /**\n-     * list of rpc protocols accepted by this registry, for example, \"dubbo,rest\"\n-     */\n-    private String accepts;\n-\n-    /**\n-     * Always use this registry first if set to true, useful when subscribe to multiple registries\n-     */\n-    private Boolean preferred;\n-\n-    /**\n-     * Affects traffic distribution among registries, useful when subscribe to multiple registries\n-     * Take effect only when no preferred registry is specified.\n-     */\n-    private Integer weight;\n-\n-    public RegistryConfig() {\n-    }\n-\n-    public RegistryConfig(String address) {\n-        setAddress(address);\n-    }\n-\n-    public RegistryConfig(String address, String protocol) {\n-        setAddress(address);\n-        setProtocol(protocol);\n-    }\n-\n-    @Override\n-    public String getId() {\n-        return super.getId();\n-    }\n-\n-    public String getProtocol() {\n-        return protocol;\n-    }\n-\n-    public void setProtocol(String protocol) {\n-        this.protocol = protocol;\n-//        this.updateIdIfAbsent(protocol);\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getAddress() {\n-        return address;\n-    }\n-\n-    public void setAddress(String address) {\n-        this.address = address;\n-        if (address != null) {\n-            try {\n-                URL url = URL.valueOf(address);\n-\n-                // Refactor since 2.7.8\n-                updatePropertyIfAbsent(this::getUsername, this::setUsername, url.getUsername());\n-                updatePropertyIfAbsent(this::getPassword, this::setPassword, url.getPassword());\n-                updatePropertyIfAbsent(this::getProtocol, this::setProtocol, url.getProtocol());\n-                updatePropertyIfAbsent(this::getPort, this::setPort, url.getPort());\n-\n-//                setUsername(url.getUsername());\n-//                setPassword(url.getPassword());\n-//                updateIdIfAbsent(url.getProtocol());\n-//                updateProtocolIfAbsent(url.getProtocol());\n-//                updatePortIfAbsent(url.getPort());\n-                Map<String, String> params = url.getParameters();\n-                if (CollectionUtils.isNotEmptyMap(params)) {\n-                    params.remove(BACKUP_KEY);\n-                }\n-                updateParameters(params);\n-            } catch (Exception ignored) {\n-            }\n-        }\n-    }\n-\n-    public Integer getPort() {\n-        return port;\n-    }\n-\n-    public void setPort(Integer port) {\n-        this.port = port;\n-    }\n-\n-    public String getUsername() {\n-        return username;\n-    }\n-\n-    public void setUsername(String username) {\n-        this.username = username;\n-    }\n-\n-    public String getPassword() {\n-        return password;\n-    }\n-\n-    public void setPassword(String password) {\n-        this.password = password;\n-    }\n-\n-    /**\n-     * @return wait\n-     * @see org.apache.dubbo.config.ProviderConfig#getWait()\n-     * @deprecated\n-     */\n-    @Deprecated\n-    public Integer getWait() {\n-        return wait;\n-    }\n-\n-    /**\n-     * @param wait\n-     * @see org.apache.dubbo.config.ProviderConfig#setWait(Integer)\n-     * @deprecated\n-     */\n-    @Deprecated\n-    public void setWait(Integer wait) {\n-        this.wait = wait;\n-        if (wait != null && wait > 0) {\n-            System.setProperty(SHUTDOWN_WAIT_KEY, String.valueOf(wait));\n-        }\n-    }\n-\n-    public Boolean isCheck() {\n-        return check;\n-    }\n-\n-    public void setCheck(Boolean check) {\n-        this.check = check;\n-    }\n-\n-    public String getFile() {\n-        return file;\n-    }\n-\n-    public void setFile(String file) {\n-        this.file = file;\n-    }\n-\n-    /**\n-     * @return transport\n-     * @see #getTransporter()\n-     * @deprecated\n-     */\n-    @Deprecated\n-    @Parameter(excluded = true)\n-    public String getTransport() {\n-        return getTransporter();\n-    }\n-\n-    /**\n-     * @param transport\n-     * @see #setTransporter(String)\n-     * @deprecated\n-     */\n-    @Deprecated\n-    public void setTransport(String transport) {\n-        setTransporter(transport);\n-    }\n-\n-    public String getTransporter() {\n-        return transporter;\n-    }\n-\n-    public void setTransporter(String transporter) {\n-        /*if(transporter != null && transporter.length() > 0 && ! ExtensionLoader.getExtensionLoader(Transporter.class).hasExtension(transporter)){\n-            throw new IllegalStateException(\"No such transporter type : \" + transporter);\n-        }*/\n-        this.transporter = transporter;\n-    }\n-\n-    public String getServer() {\n-        return server;\n-    }\n-\n-    public void setServer(String server) {\n-        /*if(server != null && server.length() > 0 && ! ExtensionLoader.getExtensionLoader(Transporter.class).hasExtension(server)){\n-            throw new IllegalStateException(\"No such server type : \" + server);\n-        }*/\n-        this.server = server;\n-    }\n-\n-    public String getClient() {\n-        return client;\n-    }\n-\n-    public void setClient(String client) {\n-        /*if(client != null && client.length() > 0 && ! ExtensionLoader.getExtensionLoader(Transporter.class).hasExtension(client)){\n-            throw new IllegalStateException(\"No such client type : \" + client);\n-        }*/\n-        this.client = client;\n-    }\n-\n-    public Integer getTimeout() {\n-        return timeout;\n-    }\n-\n-    public void setTimeout(Integer timeout) {\n-        this.timeout = timeout;\n-    }\n-\n-    public Integer getSession() {\n-        return session;\n-    }\n-\n-    public void setSession(Integer session) {\n-        this.session = session;\n-    }\n-\n-    public Boolean isDynamic() {\n-        return dynamic;\n-    }\n-\n-    public void setDynamic(Boolean dynamic) {\n-        this.dynamic = dynamic;\n-    }\n-\n-    public Boolean isRegister() {\n-        return register;\n-    }\n-\n-    public void setRegister(Boolean register) {\n-        this.register = register;\n-    }\n-\n-    public Boolean isSubscribe() {\n-        return subscribe;\n-    }\n-\n-    public void setSubscribe(Boolean subscribe) {\n-        this.subscribe = subscribe;\n-    }\n-\n-    public String getCluster() {\n-        return cluster;\n-    }\n-\n-    public void setCluster(String cluster) {\n-        this.cluster = cluster;\n-    }\n-\n-    public String getZone() {\n-        return zone;\n-    }\n-\n-    public void setZone(String zone) {\n-        this.zone = zone;\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 Map<String, String> getParameters() {\n-        return parameters;\n-    }\n-\n-    public void setParameters(Map<String, String> parameters) {\n-        this.parameters = parameters;\n-    }\n-\n-    public void updateParameters(Map<String, String> parameters) {\n-        if (CollectionUtils.isEmptyMap(parameters)) {\n-            return;\n-        }\n-        if (this.parameters == null) {\n-            this.parameters = parameters;\n-        } else {\n-            this.parameters.putAll(parameters);\n-        }\n-    }\n-\n-    public Boolean isDefault() {\n-        return isDefault;\n-    }\n-\n-    public void setDefault(Boolean isDefault) {\n-        this.isDefault = isDefault;\n-    }\n-\n-    public Boolean getSimplified() {\n-        return simplified;\n-    }\n-\n-    public void setSimplified(Boolean simplified) {\n-        this.simplified = simplified;\n-    }\n-\n-    @Parameter(key = EXTRA_KEYS_KEY)\n-    public String getExtraKeys() {\n-        return extraKeys;\n-    }\n-\n-    public void setExtraKeys(String extraKeys) {\n-        this.extraKeys = extraKeys;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public Boolean getUseAsConfigCenter() {\n-        return useAsConfigCenter;\n-    }\n-\n-    public void setUseAsConfigCenter(Boolean useAsConfigCenter) {\n-        this.useAsConfigCenter = useAsConfigCenter;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public Boolean getUseAsMetadataCenter() {\n-        return useAsMetadataCenter;\n-    }\n-\n-    public void setUseAsMetadataCenter(Boolean useAsMetadataCenter) {\n-        this.useAsMetadataCenter = useAsMetadataCenter;\n-    }\n-\n-    public String getAccepts() {\n-        return accepts;\n-    }\n-\n-    public void setAccepts(String accepts) {\n-        this.accepts = accepts;\n-    }\n-\n-    public Boolean getPreferred() {\n-        return preferred;\n-    }\n-\n-    public void setPreferred(Boolean preferred) {\n-        this.preferred = preferred;\n-    }\n-\n-    public Integer getWeight() {\n-        return weight;\n-    }\n-\n-    public void setWeight(Integer weight) {\n-        this.weight = weight;\n-    }\n-\n-    @Override\n-    public void refresh() {\n-        super.refresh();\n-        if (StringUtils.isNotEmpty(this.getId())) {\n-            this.setPrefix(REGISTRIES_SUFFIX);\n-            super.refresh();\n-        }\n-    }\n-\n-    @Override\n-    @Parameter(excluded = true)\n-    public boolean isValid() {\n-        // empty protocol will default to 'dubbo'\n-        return !StringUtils.isEmpty(address);\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.config;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import java.util.Map;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.EXTRA_KEYS_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY;\r\n+import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;\r\n+import static org.apache.dubbo.common.utils.PojoUtils.updatePropertyIfAbsent;\r\n+import static org.apache.dubbo.config.Constants.REGISTRIES_SUFFIX;\r\n+\r\n+/**\r\n+ * RegistryConfig\r\n+ *\r\n+ * @export\r\n+ */\r\n+public class RegistryConfig extends AbstractConfig {\r\n+\r\n+    public static final String NO_AVAILABLE = \"N/A\";\r\n+    private static final long serialVersionUID = 5508512956753757169L;\r\n+\r\n+    /**\r\n+     * Register center address\r\n+     */\r\n+    private String address;\r\n+\r\n+    /**\r\n+     * Username to login register center\r\n+     */\r\n+    private String username;\r\n+\r\n+    /**\r\n+     * Password to login register center\r\n+     */\r\n+    private String password;\r\n+\r\n+    /**\r\n+     * Default port for register center\r\n+     */\r\n+    private Integer port;\r\n+\r\n+    /**\r\n+     * Protocol for register center\r\n+     */\r\n+    private String protocol;\r\n+\r\n+    /**\r\n+     * Network transmission type\r\n+     */\r\n+    private String transporter;\r\n+\r\n+    private String server;\r\n+\r\n+    private String client;\r\n+\r\n+    /**\r\n+     * Affects how traffic distributes among registries, useful when subscribing multiple registries, available options:\r\n+     * 1. zone-aware, a certain type of traffic always goes to one Registry according to where the traffic is originated.\r\n+     */\r\n+    private String cluster;\r\n+\r\n+    /**\r\n+     * The region where the registry belongs, usually used to isolate traffics\r\n+     */\r\n+    private String zone;\r\n+\r\n+    /**\r\n+     * The group the services registry in\r\n+     */\r\n+    private String group;\r\n+\r\n+    private String version;\r\n+\r\n+    /**\r\n+     * Request timeout in milliseconds for register center\r\n+     */\r\n+    private Integer timeout;\r\n+\r\n+    /**\r\n+     * Session timeout in milliseconds for register center\r\n+     */\r\n+    private Integer session;\r\n+\r\n+    /**\r\n+     * File for saving register center dynamic list\r\n+     */\r\n+    private String file;\r\n+\r\n+    /**\r\n+     * Wait time before stop\r\n+     */\r\n+    private Integer wait;\r\n+\r\n+    /**\r\n+     * Whether to check if register center is available when boot up\r\n+     */\r\n+    private Boolean check;\r\n+\r\n+    /**\r\n+     * Whether to allow dynamic service to register on the register center\r\n+     */\r\n+    private Boolean dynamic;\r\n+\r\n+    /**\r\n+     * Whether to export service on the register center\r\n+     */\r\n+    private Boolean register;\r\n+\r\n+    /**\r\n+     * Whether allow to subscribe service on the register center\r\n+     */\r\n+    private Boolean subscribe;\r\n+\r\n+    /**\r\n+     * The customized parameters\r\n+     */\r\n+    private Map<String, String> parameters;\r\n+\r\n+    /**\r\n+     * Whether it's default\r\n+     */\r\n+    private Boolean isDefault;\r\n+\r\n+    /**\r\n+     * Simple the registry. both useful for provider and consumer\r\n+     *\r\n+     * @since 2.7.0\r\n+     */\r\n+    private Boolean simplified;\r\n+    /**\r\n+     * After simplify the registry, should add some parameter individually. just for provider.\r\n+     * <p>\r\n+     * such as: extra-keys = A,b,c,d\r\n+     *\r\n+     * @since 2.7.0\r\n+     */\r\n+    private String extraKeys;\r\n+\r\n+    /**\r\n+     * the address work as config center or not\r\n+     */\r\n+    private Boolean useAsConfigCenter;\r\n+\r\n+    /**\r\n+     * the address work as remote metadata center or not\r\n+     */\r\n+    private Boolean useAsMetadataCenter;\r\n+\r\n+    /**\r\n+     * list of rpc protocols accepted by this registry, for example, \"dubbo,rest\"\r\n+     */\r\n+    private String accepts;\r\n+\r\n+    /**\r\n+     * Always use this registry first if set to true, useful when subscribe to multiple registries\r\n+     */\r\n+    private Boolean preferred;\r\n+\r\n+    /**\r\n+     * Affects traffic distribution among registries, useful when subscribe to multiple registries\r\n+     * Take effect only when no preferred registry is specified.\r\n+     */\r\n+    private Integer weight;\r\n+\r\n+    public RegistryConfig() {\r\n+    }\r\n+\r\n+    public RegistryConfig(String address) {\r\n+        setAddress(address);\r\n+    }\r\n+\r\n+    public RegistryConfig(String address, String protocol) {\r\n+        setAddress(address);\r\n+        setProtocol(protocol);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getId() {\r\n+        return super.getId();\r\n+    }\r\n+\r\n+    public String getProtocol() {\r\n+        return protocol;\r\n+    }\r\n+\r\n+    public void setProtocol(String protocol) {\r\n+        this.protocol = protocol;\r\n+//        this.updateIdIfAbsent(protocol);\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getAddress() {\r\n+        return address;\r\n+    }\r\n+\r\n+    public void setAddress(String address) {\r\n+        this.address = address;\r\n+        if (address != null) {\r\n+            try {\r\n+                URL url = URL.valueOf(address);\r\n+\r\n+                // Refactor since 2.7.8\r\n+                updatePropertyIfAbsent(this::getUsername, this::setUsername, url.getUsername());\r\n+                updatePropertyIfAbsent(this::getPassword, this::setPassword, url.getPassword());\r\n+                updatePropertyIfAbsent(this::getProtocol, this::setProtocol, url.getProtocol());\r\n+                updatePropertyIfAbsent(this::getPort, this::setPort, url.getPort());\r\n+\r\n+//                setUsername(url.getUsername());\r\n+//                setPassword(url.getPassword());\r\n+//                updateIdIfAbsent(url.getProtocol());\r\n+//                updateProtocolIfAbsent(url.getProtocol());\r\n+//                updatePortIfAbsent(url.getPort());\r\n+                Map<String, String> params = url.getParameters();\r\n+                if (CollectionUtils.isNotEmptyMap(params)) {\r\n+                    params.remove(BACKUP_KEY);\r\n+                }\r\n+                updateParameters(params);\r\n+            } catch (Exception ignored) {\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public Integer getPort() {\r\n+        return port;\r\n+    }\r\n+\r\n+    public void setPort(Integer port) {\r\n+        this.port = port;\r\n+    }\r\n+\r\n+    public String getUsername() {\r\n+        return username;\r\n+    }\r\n+\r\n+    public void setUsername(String username) {\r\n+        this.username = username;\r\n+    }\r\n+\r\n+    public String getPassword() {\r\n+        return password;\r\n+    }\r\n+\r\n+    public void setPassword(String password) {\r\n+        this.password = password;\r\n+    }\r\n+\r\n+    /**\r\n+     * @return wait\r\n+     * @see org.apache.dubbo.config.ProviderConfig#getWait()\r\n+     * @deprecated\r\n+     */\r\n+    @Deprecated\r\n+    public Integer getWait() {\r\n+        return wait;\r\n+    }\r\n+\r\n+    /**\r\n+     * @param wait\r\n+     * @see org.apache.dubbo.config.ProviderConfig#setWait(Integer)\r\n+     * @deprecated\r\n+     */\r\n+    @Deprecated\r\n+    public void setWait(Integer wait) {\r\n+        this.wait = wait;\r\n+        if (wait != null && wait > 0) {\r\n+            System.setProperty(SHUTDOWN_WAIT_KEY, String.valueOf(wait));\r\n+        }\r\n+    }\r\n+\r\n+    public Boolean isCheck() {\r\n+        return check;\r\n+    }\r\n+\r\n+    public void setCheck(Boolean check) {\r\n+        this.check = check;\r\n+    }\r\n+\r\n+    public String getFile() {\r\n+        return file;\r\n+    }\r\n+\r\n+    public void setFile(String file) {\r\n+        this.file = file;\r\n+    }\r\n+\r\n+    /**\r\n+     * @return transport\r\n+     * @see #getTransporter()\r\n+     * @deprecated\r\n+     */\r\n+    @Deprecated\r\n+    @Parameter(excluded = true)\r\n+    public String getTransport() {\r\n+        return getTransporter();\r\n+    }\r\n+\r\n+    /**\r\n+     * @param transport\r\n+     * @see #setTransporter(String)\r\n+     * @deprecated\r\n+     */\r\n+    @Deprecated\r\n+    public void setTransport(String transport) {\r\n+        setTransporter(transport);\r\n+    }\r\n+\r\n+    public String getTransporter() {\r\n+        return transporter;\r\n+    }\r\n+\r\n+    public void setTransporter(String transporter) {\r\n+        /*if(transporter != null && transporter.length() > 0 && ! ExtensionLoader.getExtensionLoader(Transporter.class).hasExtension(transporter)){\r\n+            throw new IllegalStateException(\"No such transporter type : \" + transporter);\r\n+        }*/\r\n+        this.transporter = transporter;\r\n+    }\r\n+\r\n+    public String getServer() {\r\n+        return server;\r\n+    }\r\n+\r\n+    public void setServer(String server) {\r\n+        /*if(server != null && server.length() > 0 && ! ExtensionLoader.getExtensionLoader(Transporter.class).hasExtension(server)){\r\n+            throw new IllegalStateException(\"No such server type : \" + server);\r\n+        }*/\r\n+        this.server = server;\r\n+    }\r\n+\r\n+    public String getClient() {\r\n+        return client;\r\n+    }\r\n+\r\n+    public void setClient(String client) {\r\n+        /*if(client != null && client.length() > 0 && ! ExtensionLoader.getExtensionLoader(Transporter.class).hasExtension(client)){\r\n+            throw new IllegalStateException(\"No such client type : \" + client);\r\n+        }*/\r\n+        this.client = client;\r\n+    }\r\n+\r\n+    public Integer getTimeout() {\r\n+        return timeout;\r\n+    }\r\n+\r\n+    public void setTimeout(Integer timeout) {\r\n+        this.timeout = timeout;\r\n+    }\r\n+\r\n+    public Integer getSession() {\r\n+        return session;\r\n+    }\r\n+\r\n+    public void setSession(Integer session) {\r\n+        this.session = session;\r\n+    }\r\n+\r\n+    public Boolean isDynamic() {\r\n+        return dynamic;\r\n+    }\r\n+\r\n+    public void setDynamic(Boolean dynamic) {\r\n+        this.dynamic = dynamic;\r\n+    }\r\n+\r\n+    public Boolean isRegister() {\r\n+        return register;\r\n+    }\r\n+\r\n+    public void setRegister(Boolean register) {\r\n+        this.register = register;\r\n+    }\r\n+\r\n+    public Boolean isSubscribe() {\r\n+        return subscribe;\r\n+    }\r\n+\r\n+    public void setSubscribe(Boolean subscribe) {\r\n+        this.subscribe = subscribe;\r\n+    }\r\n+\r\n+    public String getCluster() {\r\n+        return cluster;\r\n+    }\r\n+\r\n+    public void setCluster(String cluster) {\r\n+        this.cluster = cluster;\r\n+    }\r\n+\r\n+    public String getZone() {\r\n+        return zone;\r\n+    }\r\n+\r\n+    public void setZone(String zone) {\r\n+        this.zone = zone;\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 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+    public void updateParameters(Map<String, String> parameters) {\r\n+        if (CollectionUtils.isEmptyMap(parameters)) {\r\n+            return;\r\n+        }\r\n+        if (this.parameters == null) {\r\n+            this.parameters = parameters;\r\n+        } else {\r\n+            this.parameters.putAll(parameters);\r\n+        }\r\n+    }\r\n+\r\n+    public Boolean isDefault() {\r\n+        return isDefault;\r\n+    }\r\n+\r\n+    public void setDefault(Boolean isDefault) {\r\n+        this.isDefault = isDefault;\r\n+    }\r\n+\r\n+    public Boolean getSimplified() {\r\n+        return simplified;\r\n+    }\r\n+\r\n+    public void setSimplified(Boolean simplified) {\r\n+        this.simplified = simplified;\r\n+    }\r\n+\r\n+    @Parameter(key = EXTRA_KEYS_KEY)\r\n+    public String getExtraKeys() {\r\n+        return extraKeys;\r\n+    }\r\n+\r\n+    public void setExtraKeys(String extraKeys) {\r\n+        this.extraKeys = extraKeys;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public Boolean getUseAsConfigCenter() {\r\n+        return useAsConfigCenter;\r\n+    }\r\n+\r\n+    public void setUseAsConfigCenter(Boolean useAsConfigCenter) {\r\n+        this.useAsConfigCenter = useAsConfigCenter;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public Boolean getUseAsMetadataCenter() {\r\n+        return useAsMetadataCenter;\r\n+    }\r\n+\r\n+    public void setUseAsMetadataCenter(Boolean useAsMetadataCenter) {\r\n+        this.useAsMetadataCenter = useAsMetadataCenter;\r\n+    }\r\n+\r\n+    public String getAccepts() {\r\n+        return accepts;\r\n+    }\r\n+\r\n+    public void setAccepts(String accepts) {\r\n+        this.accepts = accepts;\r\n+    }\r\n+\r\n+    public Boolean getPreferred() {\r\n+        return preferred;\r\n+    }\r\n+\r\n+    public void setPreferred(Boolean preferred) {\r\n+        this.preferred = preferred;\r\n+    }\r\n+\r\n+    public Integer getWeight() {\r\n+        return weight;\r\n+    }\r\n+\r\n+    public void setWeight(Integer weight) {\r\n+        this.weight = weight;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void refresh() {\r\n+        super.refresh();\r\n+        if (StringUtils.isNotEmpty(this.getId())) {\r\n+            this.setPrefix(REGISTRIES_SUFFIX);\r\n+            super.refresh();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    @Parameter(excluded = true)\r\n+    public boolean isValid() {\r\n+        // empty protocol will default to 'dubbo'\r\n+        return !StringUtils.isEmpty(address);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/ServiceConfigBase.java", "source2": "org/apache/dubbo/config/ServiceConfigBase.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,416 +1,416 @@\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.config;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.annotation.Service;\n-import org.apache.dubbo.config.support.Parameter;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.ServiceMetadata;\n-import org.apache.dubbo.rpc.service.GenericService;\n-import org.apache.dubbo.rpc.support.ProtocolUtils;\n-\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.List;\n-import java.util.Optional;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\n-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;\n-\n-/**\n- * ServiceConfig\n- *\n- * @export\n- */\n-public abstract class ServiceConfigBase<T> extends AbstractServiceConfig {\n-\n-    private static final long serialVersionUID = 3033787999037024738L;\n-\n-\n-\n-    /**\n-     * The interface class of the exported service\n-     */\n-    protected Class<?> interfaceClass;\n-\n-    /**\n-     * The reference of the interface implementation\n-     */\n-    protected T ref;\n-\n-    /**\n-     * The service name\n-     */\n-    protected String path;\n-\n-    /**\n-     * The provider configuration\n-     */\n-    protected ProviderConfig provider;\n-\n-    /**\n-     * The providerIds\n-     */\n-    protected String providerIds;\n-\n-    /**\n-     * whether it is a GenericService\n-     */\n-    protected volatile String generic;\n-\n-\n-\n-    public ServiceConfigBase() {\n-        serviceMetadata = new ServiceMetadata();\n-        serviceMetadata.addAttribute(\"ORIGIN_CONFIG\", this);\n-    }\n-\n-    public ServiceConfigBase(Service service) {\n-        serviceMetadata = new ServiceMetadata();\n-        serviceMetadata.addAttribute(\"ORIGIN_CONFIG\", this);\n-        appendAnnotation(Service.class, service);\n-        setMethods(MethodConfig.constructMethodConfig(service.methods()));\n-    }\n-\n-    @Deprecated\n-    private static List<ProtocolConfig> convertProviderToProtocol(List<ProviderConfig> providers) {\n-        if (CollectionUtils.isEmpty(providers)) {\n-            return null;\n-        }\n-        List<ProtocolConfig> protocols = new ArrayList<ProtocolConfig>(providers.size());\n-        for (ProviderConfig provider : providers) {\n-            protocols.add(convertProviderToProtocol(provider));\n-        }\n-        return protocols;\n-    }\n-\n-    @Deprecated\n-    private static List<ProviderConfig> convertProtocolToProvider(List<ProtocolConfig> protocols) {\n-        if (CollectionUtils.isEmpty(protocols)) {\n-            return null;\n-        }\n-        List<ProviderConfig> providers = new ArrayList<ProviderConfig>(protocols.size());\n-        for (ProtocolConfig provider : protocols) {\n-            providers.add(convertProtocolToProvider(provider));\n-        }\n-        return providers;\n-    }\n-\n-    @Deprecated\n-    private static ProtocolConfig convertProviderToProtocol(ProviderConfig provider) {\n-        ProtocolConfig protocol = new ProtocolConfig();\n-        protocol.setName(provider.getProtocol().getName());\n-        protocol.setServer(provider.getServer());\n-        protocol.setClient(provider.getClient());\n-        protocol.setCodec(provider.getCodec());\n-        protocol.setHost(provider.getHost());\n-        protocol.setPort(provider.getPort());\n-        protocol.setPath(provider.getPath());\n-        protocol.setPayload(provider.getPayload());\n-        protocol.setThreads(provider.getThreads());\n-        protocol.setParameters(provider.getParameters());\n-        return protocol;\n-    }\n-\n-    @Deprecated\n-    private static ProviderConfig convertProtocolToProvider(ProtocolConfig protocol) {\n-        ProviderConfig provider = new ProviderConfig();\n-        provider.setProtocol(protocol);\n-        provider.setServer(protocol.getServer());\n-        provider.setClient(protocol.getClient());\n-        provider.setCodec(protocol.getCodec());\n-        provider.setHost(protocol.getHost());\n-        provider.setPort(protocol.getPort());\n-        provider.setPath(protocol.getPath());\n-        provider.setPayload(protocol.getPayload());\n-        provider.setThreads(protocol.getThreads());\n-        provider.setParameters(protocol.getParameters());\n-        return provider;\n-    }\n-\n-    public boolean shouldExport() {\n-        Boolean export = getExport();\n-        // default value is true\n-        return export == null ? true : export;\n-    }\n-\n-    @Override\n-    public Boolean getExport() {\n-        return (export == null && provider != null) ? provider.getExport() : export;\n-    }\n-\n-    public boolean shouldDelay() {\n-        Integer delay = getDelay();\n-        return delay != null && delay > 0;\n-    }\n-\n-    @Override\n-    public Integer getDelay() {\n-        return (delay == null && provider != null) ? provider.getDelay() : delay;\n-    }\n-\n-    public void checkRef() {\n-        // reference should not be null, and is the implementation of the given interface\n-        if (ref == null) {\n-            throw new IllegalStateException(\"ref not allow null!\");\n-        }\n-        if (!interfaceClass.isInstance(ref)) {\n-            throw new IllegalStateException(\"The class \"\n-                    + ref.getClass().getName() + \" unimplemented interface \"\n-                    + interfaceClass + \"!\");\n-        }\n-    }\n-\n-    public Optional<String> getContextPath(ProtocolConfig protocolConfig) {\n-        String contextPath = protocolConfig.getContextpath();\n-        if (StringUtils.isEmpty(contextPath) && provider != null) {\n-            contextPath = provider.getContextpath();\n-        }\n-        return Optional.ofNullable(contextPath);\n-    }\n-\n-    protected Class getServiceClass(T ref) {\n-        return ref.getClass();\n-    }\n-\n-    public void checkDefault() throws IllegalStateException {\n-        if (provider == null) {\n-            provider = ApplicationModel.getConfigManager()\n-                    .getDefaultProvider()\n-                    .orElse(new ProviderConfig());\n-        }\n-    }\n-\n-    public void checkProtocol() {\n-        if (provider != null && notHasSelfProtocolProperty()) {\n-            setProtocols(provider.getProtocols());\n-            setProtocolIds(provider.getProtocolIds());\n-        }\n-\n-        if (CollectionUtils.isEmpty(protocols) && provider != null) {\n-            setProtocols(provider.getProtocols());\n-        }\n-        convertProtocolIdsToProtocols();\n-    }\n-\n-    private boolean notHasSelfProtocolProperty() {\n-        return CollectionUtils.isEmpty(protocols) && StringUtils.isEmpty(protocolIds);\n-    }\n-\n-    public void completeCompoundConfigs() {\n-        super.completeCompoundConfigs(provider);\n-        if (provider != null) {\n-            if (notHasSelfProtocolProperty()) {\n-                setProtocols(provider.getProtocols());\n-                setProtocolIds(provider.getProtocolIds());\n-            }\n-            if (configCenter == null) {\n-                setConfigCenter(provider.getConfigCenter());\n-            }\n-        }\n-    }\n-\n-    private void convertProtocolIdsToProtocols() {\n-        if (StringUtils.isEmpty(protocolIds)) {\n-            if (CollectionUtils.isEmpty(protocols)) {\n-                List<ProtocolConfig> protocolConfigs = ApplicationModel.getConfigManager().getDefaultProtocols();\n-                if (protocolConfigs.isEmpty()) {\n-                    protocolConfigs = new ArrayList<>(1);\n-                    ProtocolConfig protocolConfig = new ProtocolConfig();\n-                    protocolConfig.setDefault(true);\n-                    protocolConfig.refresh();\n-                    protocolConfigs.add(protocolConfig);\n-                    ApplicationModel.getConfigManager().addProtocol(protocolConfig);\n-                }\n-                setProtocols(protocolConfigs);\n-            }\n-        } else {\n-            String[] arr = COMMA_SPLIT_PATTERN.split(protocolIds);\n-            List<ProtocolConfig> tmpProtocols = new ArrayList<>();\n-            Arrays.stream(arr).forEach(id -> {\n-                if (tmpProtocols.stream().noneMatch(prot -> prot.getId().equals(id))) {\n-                    Optional<ProtocolConfig> globalProtocol = ApplicationModel.getConfigManager().getProtocol(id);\n-                    if (globalProtocol.isPresent()) {\n-                        tmpProtocols.add(globalProtocol.get());\n-                    } else {\n-                        ProtocolConfig protocolConfig = new ProtocolConfig();\n-                        protocolConfig.setId(id);\n-                        protocolConfig.refresh();\n-                        tmpProtocols.add(protocolConfig);\n-                    }\n-                }\n-            });\n-            if (tmpProtocols.size() > arr.length) {\n-                throw new IllegalStateException(\"Too much protocols found, the protocols comply to this service are :\" + protocolIds + \" but got \" + protocols\n-                        .size() + \" registries!\");\n-            }\n-            setProtocols(tmpProtocols);\n-        }\n-    }\n-\n-    public Class<?> getInterfaceClass() {\n-        if (interfaceClass != null) {\n-            return interfaceClass;\n-        }\n-        if (ref instanceof GenericService) {\n-            return GenericService.class;\n-        }\n-        try {\n-            if (interfaceName != null && interfaceName.length() > 0) {\n-                this.interfaceClass = Class.forName(interfaceName, true, Thread.currentThread()\n-                        .getContextClassLoader());\n-            }\n-        } catch (ClassNotFoundException t) {\n-            throw new IllegalStateException(t.getMessage(), t);\n-        }\n-        return interfaceClass;\n-    }\n-\n-    /**\n-     * @param interfaceClass\n-     * @see #setInterface(Class)\n-     * @deprecated\n-     */\n-    public void setInterfaceClass(Class<?> interfaceClass) {\n-        setInterface(interfaceClass);\n-    }\n-\n-\n-\n-    public void setInterface(Class<?> interfaceClass) {\n-        if (interfaceClass != null && !interfaceClass.isInterface()) {\n-            throw new IllegalStateException(\"The interface class \" + interfaceClass + \" is not a interface!\");\n-        }\n-        this.interfaceClass = interfaceClass;\n-        setInterface(interfaceClass == null ? null : interfaceClass.getName());\n-    }\n-\n-    public T getRef() {\n-        return ref;\n-    }\n-\n-    public void setRef(T ref) {\n-        this.ref = ref;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getPath() {\n-        return path;\n-    }\n-\n-    public void setPath(String path) {\n-        this.path = path;\n-    }\n-\n-    public ProviderConfig getProvider() {\n-        return provider;\n-    }\n-\n-    public void setProvider(ProviderConfig provider) {\n-        ApplicationModel.getConfigManager().addProvider(provider);\n-        this.provider = provider;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getProviderIds() {\n-        return providerIds;\n-    }\n-\n-    public void setProviderIds(String providerIds) {\n-        this.providerIds = providerIds;\n-    }\n-\n-    public String getGeneric() {\n-        return generic;\n-    }\n-\n-    public void setGeneric(String generic) {\n-        if (StringUtils.isEmpty(generic)) {\n-            return;\n-        }\n-        if (ProtocolUtils.isValidGenericValue(generic)) {\n-            this.generic = generic;\n-        } else {\n-            throw new IllegalArgumentException(\"Unsupported generic type \" + generic);\n-        }\n-    }\n-\n-//    @Override\n-//    public void setMock(String mock) {\n-//        throw new IllegalArgumentException(\"mock doesn't support on provider side\");\n-//    }\n-//\n-//    @Override\n-//    public void setMock(Object mock) {\n-//        throw new IllegalArgumentException(\"mock doesn't support on provider side\");\n-//    }\n-\n-    public ServiceMetadata getServiceMetadata() {\n-        return serviceMetadata;\n-    }\n-\n-    /**\n-     * @deprecated Replace to getProtocols()\n-     */\n-    @Deprecated\n-    public List<ProviderConfig> getProviders() {\n-        return convertProtocolToProvider(protocols);\n-    }\n-\n-    /**\n-     * @deprecated Replace to setProtocols()\n-     */\n-    @Deprecated\n-    public void setProviders(List<ProviderConfig> providers) {\n-        this.protocols = convertProviderToProtocol(providers);\n-    }\n-\n-    @Override\n-    @Parameter(excluded = true)\n-    public String getPrefix() {\n-        return DUBBO + \".service.\" + interfaceName;\n-    }\n-\n-    @Parameter(excluded = true)\n-    public String getUniqueServiceName() {\n-        return URL.buildKey(interfaceName, getGroup(), getVersion());\n-    }\n-\n-\n-\n-    @Override\n-    protected void computeValidRegistryIds() {\n-        if (provider != null && notHasSelfRegistryProperty()) {\n-            setRegistries(provider.getRegistries());\n-            setRegistryIds(provider.getRegistryIds());\n-        }\n-\n-        super.computeValidRegistryIds();\n-    }\n-\n-    public abstract void export();\n-\n-    public abstract void unexport();\n-\n-    public abstract boolean isExported();\n-\n-    public abstract boolean isUnexported();\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.config;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.annotation.Service;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.ServiceMetadata;\r\n+import org.apache.dubbo.rpc.service.GenericService;\r\n+import org.apache.dubbo.rpc.support.ProtocolUtils;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+import java.util.List;\r\n+import java.util.Optional;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;\r\n+\r\n+/**\r\n+ * ServiceConfig\r\n+ *\r\n+ * @export\r\n+ */\r\n+public abstract class ServiceConfigBase<T> extends AbstractServiceConfig {\r\n+\r\n+    private static final long serialVersionUID = 3033787999037024738L;\r\n+\r\n+\r\n+\r\n+    /**\r\n+     * The interface class of the exported service\r\n+     */\r\n+    protected Class<?> interfaceClass;\r\n+\r\n+    /**\r\n+     * The reference of the interface implementation\r\n+     */\r\n+    protected T ref;\r\n+\r\n+    /**\r\n+     * The service name\r\n+     */\r\n+    protected String path;\r\n+\r\n+    /**\r\n+     * The provider configuration\r\n+     */\r\n+    protected ProviderConfig provider;\r\n+\r\n+    /**\r\n+     * The providerIds\r\n+     */\r\n+    protected String providerIds;\r\n+\r\n+    /**\r\n+     * whether it is a GenericService\r\n+     */\r\n+    protected volatile String generic;\r\n+\r\n+\r\n+\r\n+    public ServiceConfigBase() {\r\n+        serviceMetadata = new ServiceMetadata();\r\n+        serviceMetadata.addAttribute(\"ORIGIN_CONFIG\", this);\r\n+    }\r\n+\r\n+    public ServiceConfigBase(Service service) {\r\n+        serviceMetadata = new ServiceMetadata();\r\n+        serviceMetadata.addAttribute(\"ORIGIN_CONFIG\", this);\r\n+        appendAnnotation(Service.class, service);\r\n+        setMethods(MethodConfig.constructMethodConfig(service.methods()));\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    private static List<ProtocolConfig> convertProviderToProtocol(List<ProviderConfig> providers) {\r\n+        if (CollectionUtils.isEmpty(providers)) {\r\n+            return null;\r\n+        }\r\n+        List<ProtocolConfig> protocols = new ArrayList<ProtocolConfig>(providers.size());\r\n+        for (ProviderConfig provider : providers) {\r\n+            protocols.add(convertProviderToProtocol(provider));\r\n+        }\r\n+        return protocols;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    private static List<ProviderConfig> convertProtocolToProvider(List<ProtocolConfig> protocols) {\r\n+        if (CollectionUtils.isEmpty(protocols)) {\r\n+            return null;\r\n+        }\r\n+        List<ProviderConfig> providers = new ArrayList<ProviderConfig>(protocols.size());\r\n+        for (ProtocolConfig provider : protocols) {\r\n+            providers.add(convertProtocolToProvider(provider));\r\n+        }\r\n+        return providers;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    private static ProtocolConfig convertProviderToProtocol(ProviderConfig provider) {\r\n+        ProtocolConfig protocol = new ProtocolConfig();\r\n+        protocol.setName(provider.getProtocol().getName());\r\n+        protocol.setServer(provider.getServer());\r\n+        protocol.setClient(provider.getClient());\r\n+        protocol.setCodec(provider.getCodec());\r\n+        protocol.setHost(provider.getHost());\r\n+        protocol.setPort(provider.getPort());\r\n+        protocol.setPath(provider.getPath());\r\n+        protocol.setPayload(provider.getPayload());\r\n+        protocol.setThreads(provider.getThreads());\r\n+        protocol.setParameters(provider.getParameters());\r\n+        return protocol;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    private static ProviderConfig convertProtocolToProvider(ProtocolConfig protocol) {\r\n+        ProviderConfig provider = new ProviderConfig();\r\n+        provider.setProtocol(protocol);\r\n+        provider.setServer(protocol.getServer());\r\n+        provider.setClient(protocol.getClient());\r\n+        provider.setCodec(protocol.getCodec());\r\n+        provider.setHost(protocol.getHost());\r\n+        provider.setPort(protocol.getPort());\r\n+        provider.setPath(protocol.getPath());\r\n+        provider.setPayload(protocol.getPayload());\r\n+        provider.setThreads(protocol.getThreads());\r\n+        provider.setParameters(protocol.getParameters());\r\n+        return provider;\r\n+    }\r\n+\r\n+    public boolean shouldExport() {\r\n+        Boolean export = getExport();\r\n+        // default value is true\r\n+        return export == null ? true : export;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Boolean getExport() {\r\n+        return (export == null && provider != null) ? provider.getExport() : export;\r\n+    }\r\n+\r\n+    public boolean shouldDelay() {\r\n+        Integer delay = getDelay();\r\n+        return delay != null && delay > 0;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Integer getDelay() {\r\n+        return (delay == null && provider != null) ? provider.getDelay() : delay;\r\n+    }\r\n+\r\n+    public void checkRef() {\r\n+        // reference should not be null, and is the implementation of the given interface\r\n+        if (ref == null) {\r\n+            throw new IllegalStateException(\"ref not allow null!\");\r\n+        }\r\n+        if (!interfaceClass.isInstance(ref)) {\r\n+            throw new IllegalStateException(\"The class \"\r\n+                    + ref.getClass().getName() + \" unimplemented interface \"\r\n+                    + interfaceClass + \"!\");\r\n+        }\r\n+    }\r\n+\r\n+    public Optional<String> getContextPath(ProtocolConfig protocolConfig) {\r\n+        String contextPath = protocolConfig.getContextpath();\r\n+        if (StringUtils.isEmpty(contextPath) && provider != null) {\r\n+            contextPath = provider.getContextpath();\r\n+        }\r\n+        return Optional.ofNullable(contextPath);\r\n+    }\r\n+\r\n+    protected Class getServiceClass(T ref) {\r\n+        return ref.getClass();\r\n+    }\r\n+\r\n+    public void checkDefault() throws IllegalStateException {\r\n+        if (provider == null) {\r\n+            provider = ApplicationModel.getConfigManager()\r\n+                    .getDefaultProvider()\r\n+                    .orElse(new ProviderConfig());\r\n+        }\r\n+    }\r\n+\r\n+    public void checkProtocol() {\r\n+        if (provider != null && notHasSelfProtocolProperty()) {\r\n+            setProtocols(provider.getProtocols());\r\n+            setProtocolIds(provider.getProtocolIds());\r\n+        }\r\n+\r\n+        if (CollectionUtils.isEmpty(protocols) && provider != null) {\r\n+            setProtocols(provider.getProtocols());\r\n+        }\r\n+        convertProtocolIdsToProtocols();\r\n+    }\r\n+\r\n+    private boolean notHasSelfProtocolProperty() {\r\n+        return CollectionUtils.isEmpty(protocols) && StringUtils.isEmpty(protocolIds);\r\n+    }\r\n+\r\n+    public void completeCompoundConfigs() {\r\n+        super.completeCompoundConfigs(provider);\r\n+        if (provider != null) {\r\n+            if (notHasSelfProtocolProperty()) {\r\n+                setProtocols(provider.getProtocols());\r\n+                setProtocolIds(provider.getProtocolIds());\r\n+            }\r\n+            if (configCenter == null) {\r\n+                setConfigCenter(provider.getConfigCenter());\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private void convertProtocolIdsToProtocols() {\r\n+        if (StringUtils.isEmpty(protocolIds)) {\r\n+            if (CollectionUtils.isEmpty(protocols)) {\r\n+                List<ProtocolConfig> protocolConfigs = ApplicationModel.getConfigManager().getDefaultProtocols();\r\n+                if (protocolConfigs.isEmpty()) {\r\n+                    protocolConfigs = new ArrayList<>(1);\r\n+                    ProtocolConfig protocolConfig = new ProtocolConfig();\r\n+                    protocolConfig.setDefault(true);\r\n+                    protocolConfig.refresh();\r\n+                    protocolConfigs.add(protocolConfig);\r\n+                    ApplicationModel.getConfigManager().addProtocol(protocolConfig);\r\n+                }\r\n+                setProtocols(protocolConfigs);\r\n+            }\r\n+        } else {\r\n+            String[] arr = COMMA_SPLIT_PATTERN.split(protocolIds);\r\n+            List<ProtocolConfig> tmpProtocols = new ArrayList<>();\r\n+            Arrays.stream(arr).forEach(id -> {\r\n+                if (tmpProtocols.stream().noneMatch(prot -> prot.getId().equals(id))) {\r\n+                    Optional<ProtocolConfig> globalProtocol = ApplicationModel.getConfigManager().getProtocol(id);\r\n+                    if (globalProtocol.isPresent()) {\r\n+                        tmpProtocols.add(globalProtocol.get());\r\n+                    } else {\r\n+                        ProtocolConfig protocolConfig = new ProtocolConfig();\r\n+                        protocolConfig.setId(id);\r\n+                        protocolConfig.refresh();\r\n+                        tmpProtocols.add(protocolConfig);\r\n+                    }\r\n+                }\r\n+            });\r\n+            if (tmpProtocols.size() > arr.length) {\r\n+                throw new IllegalStateException(\"Too much protocols found, the protocols comply to this service are :\" + protocolIds + \" but got \" + protocols\r\n+                        .size() + \" registries!\");\r\n+            }\r\n+            setProtocols(tmpProtocols);\r\n+        }\r\n+    }\r\n+\r\n+    public Class<?> getInterfaceClass() {\r\n+        if (interfaceClass != null) {\r\n+            return interfaceClass;\r\n+        }\r\n+        if (ref instanceof GenericService) {\r\n+            return GenericService.class;\r\n+        }\r\n+        try {\r\n+            if (interfaceName != null && interfaceName.length() > 0) {\r\n+                this.interfaceClass = Class.forName(interfaceName, true, Thread.currentThread()\r\n+                        .getContextClassLoader());\r\n+            }\r\n+        } catch (ClassNotFoundException t) {\r\n+            throw new IllegalStateException(t.getMessage(), t);\r\n+        }\r\n+        return interfaceClass;\r\n+    }\r\n+\r\n+    /**\r\n+     * @param interfaceClass\r\n+     * @see #setInterface(Class)\r\n+     * @deprecated\r\n+     */\r\n+    public void setInterfaceClass(Class<?> interfaceClass) {\r\n+        setInterface(interfaceClass);\r\n+    }\r\n+\r\n+\r\n+\r\n+    public void setInterface(Class<?> interfaceClass) {\r\n+        if (interfaceClass != null && !interfaceClass.isInterface()) {\r\n+            throw new IllegalStateException(\"The interface class \" + interfaceClass + \" is not a interface!\");\r\n+        }\r\n+        this.interfaceClass = interfaceClass;\r\n+        setInterface(interfaceClass == null ? null : interfaceClass.getName());\r\n+    }\r\n+\r\n+    public T getRef() {\r\n+        return ref;\r\n+    }\r\n+\r\n+    public void setRef(T ref) {\r\n+        this.ref = ref;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\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 ProviderConfig getProvider() {\r\n+        return provider;\r\n+    }\r\n+\r\n+    public void setProvider(ProviderConfig provider) {\r\n+        ApplicationModel.getConfigManager().addProvider(provider);\r\n+        this.provider = provider;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getProviderIds() {\r\n+        return providerIds;\r\n+    }\r\n+\r\n+    public void setProviderIds(String providerIds) {\r\n+        this.providerIds = providerIds;\r\n+    }\r\n+\r\n+    public String getGeneric() {\r\n+        return generic;\r\n+    }\r\n+\r\n+    public void setGeneric(String generic) {\r\n+        if (StringUtils.isEmpty(generic)) {\r\n+            return;\r\n+        }\r\n+        if (ProtocolUtils.isValidGenericValue(generic)) {\r\n+            this.generic = generic;\r\n+        } else {\r\n+            throw new IllegalArgumentException(\"Unsupported generic type \" + generic);\r\n+        }\r\n+    }\r\n+\r\n+//    @Override\r\n+//    public void setMock(String mock) {\r\n+//        throw new IllegalArgumentException(\"mock doesn't support on provider side\");\r\n+//    }\r\n+//\r\n+//    @Override\r\n+//    public void setMock(Object mock) {\r\n+//        throw new IllegalArgumentException(\"mock doesn't support on provider side\");\r\n+//    }\r\n+\r\n+    public ServiceMetadata getServiceMetadata() {\r\n+        return serviceMetadata;\r\n+    }\r\n+\r\n+    /**\r\n+     * @deprecated Replace to getProtocols()\r\n+     */\r\n+    @Deprecated\r\n+    public List<ProviderConfig> getProviders() {\r\n+        return convertProtocolToProvider(protocols);\r\n+    }\r\n+\r\n+    /**\r\n+     * @deprecated Replace to setProtocols()\r\n+     */\r\n+    @Deprecated\r\n+    public void setProviders(List<ProviderConfig> providers) {\r\n+        this.protocols = convertProviderToProtocol(providers);\r\n+    }\r\n+\r\n+    @Override\r\n+    @Parameter(excluded = true)\r\n+    public String getPrefix() {\r\n+        return DUBBO + \".service.\" + interfaceName;\r\n+    }\r\n+\r\n+    @Parameter(excluded = true)\r\n+    public String getUniqueServiceName() {\r\n+        return URL.buildKey(interfaceName, getGroup(), getVersion());\r\n+    }\r\n+\r\n+\r\n+\r\n+    @Override\r\n+    protected void computeValidRegistryIds() {\r\n+        if (provider != null && notHasSelfRegistryProperty()) {\r\n+            setRegistries(provider.getRegistries());\r\n+            setRegistryIds(provider.getRegistryIds());\r\n+        }\r\n+\r\n+        super.computeValidRegistryIds();\r\n+    }\r\n+\r\n+    public abstract void export();\r\n+\r\n+    public abstract void unexport();\r\n+\r\n+    public abstract boolean isExported();\r\n+\r\n+    public abstract boolean isUnexported();\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/config/SslConfig.java", "source2": "org/apache/dubbo/config/SslConfig.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,188 +1,188 @@\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.config;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.IOUtils;\n-import org.apache.dubbo.config.support.Parameter;\n-\n-import java.io.IOException;\n-import java.io.InputStream;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-\n-public class SslConfig extends AbstractConfig {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(SslConfig.class);\n-    private AtomicBoolean inited = new AtomicBoolean(false);\n-\n-    private String serverKeyCertChainPath;\n-    private String serverPrivateKeyPath;\n-    private String serverKeyPassword;\n-    private String serverTrustCertCollectionPath;\n-\n-    private String clientKeyCertChainPath;\n-    private String clientPrivateKeyPath;\n-    private String clientKeyPassword;\n-    private String clientTrustCertCollectionPath;\n-\n-    private InputStream serverKeyCertChainPathStream;\n-    private InputStream serverPrivateKeyPathStream;\n-    private InputStream serverTrustCertCollectionPathStream;\n-\n-    private InputStream clientKeyCertChainPathStream;\n-    private InputStream clientPrivateKeyPathStream;\n-    private InputStream clientTrustCertCollectionPathStream;\n-\n-    @Parameter(key = \"server-key-cert-chain-path\")\n-    public String getServerKeyCertChainPath() {\n-        return serverKeyCertChainPath;\n-    }\n-\n-    public void setServerKeyCertChainPath(String serverKeyCertChainPath) {\n-        this.serverKeyCertChainPath = serverKeyCertChainPath;\n-    }\n-\n-    @Parameter(key = \"server-private-key-path\")\n-    public String getServerPrivateKeyPath() {\n-        return serverPrivateKeyPath;\n-    }\n-\n-    public void setServerPrivateKeyPath(String serverPrivateKeyPath) {\n-        this.serverPrivateKeyPath = serverPrivateKeyPath;\n-    }\n-\n-    @Parameter(key = \"server-key-password\")\n-    public String getServerKeyPassword() {\n-        return serverKeyPassword;\n-    }\n-\n-    public void setServerKeyPassword(String serverKeyPassword) {\n-        this.serverKeyPassword = serverKeyPassword;\n-    }\n-\n-    @Parameter(key = \"server-trust-cert-collection-path\")\n-    public String getServerTrustCertCollectionPath() {\n-        return serverTrustCertCollectionPath;\n-    }\n-\n-    public void setServerTrustCertCollectionPath(String serverTrustCertCollectionPath) {\n-        this.serverTrustCertCollectionPath = serverTrustCertCollectionPath;\n-    }\n-\n-    @Parameter(key = \"client-key-cert-chain-path\")\n-    public String getClientKeyCertChainPath() {\n-        return clientKeyCertChainPath;\n-    }\n-\n-    public void setClientKeyCertChainPath(String clientKeyCertChainPath) {\n-        this.clientKeyCertChainPath = clientKeyCertChainPath;\n-    }\n-\n-    @Parameter(key = \"client-private-key-path\")\n-    public String getClientPrivateKeyPath() {\n-        return clientPrivateKeyPath;\n-    }\n-\n-    public void setClientPrivateKeyPath(String clientPrivateKeyPath) {\n-        this.clientPrivateKeyPath = clientPrivateKeyPath;\n-    }\n-\n-    @Parameter(key = \"client-key-password\")\n-    public String getClientKeyPassword() {\n-        return clientKeyPassword;\n-    }\n-\n-    public void setClientKeyPassword(String clientKeyPassword) {\n-        this.clientKeyPassword = clientKeyPassword;\n-    }\n-\n-    @Parameter(key = \"client-trust-cert-collection-path\")\n-    public String getClientTrustCertCollectionPath() {\n-        return clientTrustCertCollectionPath;\n-    }\n-\n-    public void setClientTrustCertCollectionPath(String clientTrustCertCollectionPath) {\n-        this.clientTrustCertCollectionPath = clientTrustCertCollectionPath;\n-    }\n-\n-    public InputStream getServerKeyCertChainPathStream() throws IOException {\n-        if (serverKeyCertChainPath != null) {\n-            serverKeyCertChainPathStream = IOUtils.getURL(serverKeyCertChainPath).openStream();\n-        }\n-        return serverKeyCertChainPathStream;\n-    }\n-\n-    public void setServerKeyCertChainPathStream(InputStream serverKeyCertChainPathStream) {\n-        this.serverKeyCertChainPathStream = serverKeyCertChainPathStream;\n-    }\n-\n-    public InputStream getServerPrivateKeyPathStream() throws IOException {\n-        if (serverPrivateKeyPath != null) {\n-            serverPrivateKeyPathStream = IOUtils.getURL(serverPrivateKeyPath).openStream();\n-        }\n-        return serverPrivateKeyPathStream;\n-    }\n-\n-    public void setServerPrivateKeyPathStream(InputStream serverPrivateKeyPathStream) {\n-        this.serverPrivateKeyPathStream = serverPrivateKeyPathStream;\n-    }\n-\n-    public InputStream getServerTrustCertCollectionPathStream() throws IOException {\n-        if (serverTrustCertCollectionPath != null) {\n-            serverTrustCertCollectionPathStream = IOUtils.getURL(serverTrustCertCollectionPath).openStream();\n-        }\n-        return serverTrustCertCollectionPathStream;\n-    }\n-\n-    public void setServerTrustCertCollectionPathStream(InputStream serverTrustCertCollectionPathStream) {\n-        this.serverTrustCertCollectionPathStream = serverTrustCertCollectionPathStream;\n-    }\n-\n-    public InputStream getClientKeyCertChainPathStream() throws IOException {\n-        if (clientKeyCertChainPath != null) {\n-            clientKeyCertChainPathStream = IOUtils.getURL(clientKeyCertChainPath).openStream();\n-        }\n-        return clientKeyCertChainPathStream;\n-    }\n-\n-    public void setClientKeyCertChainPathStream(InputStream clientKeyCertChainPathStream) {\n-        this.clientKeyCertChainPathStream = clientKeyCertChainPathStream;\n-    }\n-\n-    public InputStream getClientPrivateKeyPathStream() throws IOException {\n-        if (clientPrivateKeyPath != null) {\n-            clientPrivateKeyPathStream = IOUtils.getURL(clientPrivateKeyPath).openStream();\n-        }\n-        return clientPrivateKeyPathStream;\n-    }\n-\n-    public void setClientPrivateKeyPathStream(InputStream clientPrivateKeyPathStream) {\n-        this.clientPrivateKeyPathStream = clientPrivateKeyPathStream;\n-    }\n-\n-    public InputStream getClientTrustCertCollectionPathStream() throws IOException {\n-        if (clientTrustCertCollectionPath != null) {\n-            clientTrustCertCollectionPathStream = IOUtils.getURL(clientTrustCertCollectionPath).openStream();\n-        }\n-        return clientTrustCertCollectionPathStream;\n-    }\n-\n-    public void setClientTrustCertCollectionPathStream(InputStream clientTrustCertCollectionPathStream) {\n-        this.clientTrustCertCollectionPathStream = clientTrustCertCollectionPathStream;\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.config;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.IOUtils;\r\n+import org.apache.dubbo.config.support.Parameter;\r\n+\r\n+import java.io.IOException;\r\n+import java.io.InputStream;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+\r\n+public class SslConfig extends AbstractConfig {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(SslConfig.class);\r\n+    private AtomicBoolean inited = new AtomicBoolean(false);\r\n+\r\n+    private String serverKeyCertChainPath;\r\n+    private String serverPrivateKeyPath;\r\n+    private String serverKeyPassword;\r\n+    private String serverTrustCertCollectionPath;\r\n+\r\n+    private String clientKeyCertChainPath;\r\n+    private String clientPrivateKeyPath;\r\n+    private String clientKeyPassword;\r\n+    private String clientTrustCertCollectionPath;\r\n+\r\n+    private InputStream serverKeyCertChainPathStream;\r\n+    private InputStream serverPrivateKeyPathStream;\r\n+    private InputStream serverTrustCertCollectionPathStream;\r\n+\r\n+    private InputStream clientKeyCertChainPathStream;\r\n+    private InputStream clientPrivateKeyPathStream;\r\n+    private InputStream clientTrustCertCollectionPathStream;\r\n+\r\n+    @Parameter(key = \"server-key-cert-chain-path\")\r\n+    public String getServerKeyCertChainPath() {\r\n+        return serverKeyCertChainPath;\r\n+    }\r\n+\r\n+    public void setServerKeyCertChainPath(String serverKeyCertChainPath) {\r\n+        this.serverKeyCertChainPath = serverKeyCertChainPath;\r\n+    }\r\n+\r\n+    @Parameter(key = \"server-private-key-path\")\r\n+    public String getServerPrivateKeyPath() {\r\n+        return serverPrivateKeyPath;\r\n+    }\r\n+\r\n+    public void setServerPrivateKeyPath(String serverPrivateKeyPath) {\r\n+        this.serverPrivateKeyPath = serverPrivateKeyPath;\r\n+    }\r\n+\r\n+    @Parameter(key = \"server-key-password\")\r\n+    public String getServerKeyPassword() {\r\n+        return serverKeyPassword;\r\n+    }\r\n+\r\n+    public void setServerKeyPassword(String serverKeyPassword) {\r\n+        this.serverKeyPassword = serverKeyPassword;\r\n+    }\r\n+\r\n+    @Parameter(key = \"server-trust-cert-collection-path\")\r\n+    public String getServerTrustCertCollectionPath() {\r\n+        return serverTrustCertCollectionPath;\r\n+    }\r\n+\r\n+    public void setServerTrustCertCollectionPath(String serverTrustCertCollectionPath) {\r\n+        this.serverTrustCertCollectionPath = serverTrustCertCollectionPath;\r\n+    }\r\n+\r\n+    @Parameter(key = \"client-key-cert-chain-path\")\r\n+    public String getClientKeyCertChainPath() {\r\n+        return clientKeyCertChainPath;\r\n+    }\r\n+\r\n+    public void setClientKeyCertChainPath(String clientKeyCertChainPath) {\r\n+        this.clientKeyCertChainPath = clientKeyCertChainPath;\r\n+    }\r\n+\r\n+    @Parameter(key = \"client-private-key-path\")\r\n+    public String getClientPrivateKeyPath() {\r\n+        return clientPrivateKeyPath;\r\n+    }\r\n+\r\n+    public void setClientPrivateKeyPath(String clientPrivateKeyPath) {\r\n+        this.clientPrivateKeyPath = clientPrivateKeyPath;\r\n+    }\r\n+\r\n+    @Parameter(key = \"client-key-password\")\r\n+    public String getClientKeyPassword() {\r\n+        return clientKeyPassword;\r\n+    }\r\n+\r\n+    public void setClientKeyPassword(String clientKeyPassword) {\r\n+        this.clientKeyPassword = clientKeyPassword;\r\n+    }\r\n+\r\n+    @Parameter(key = \"client-trust-cert-collection-path\")\r\n+    public String getClientTrustCertCollectionPath() {\r\n+        return clientTrustCertCollectionPath;\r\n+    }\r\n+\r\n+    public void setClientTrustCertCollectionPath(String clientTrustCertCollectionPath) {\r\n+        this.clientTrustCertCollectionPath = clientTrustCertCollectionPath;\r\n+    }\r\n+\r\n+    public InputStream getServerKeyCertChainPathStream() throws IOException {\r\n+        if (serverKeyCertChainPath != null) {\r\n+            serverKeyCertChainPathStream = IOUtils.getURL(serverKeyCertChainPath).openStream();\r\n+        }\r\n+        return serverKeyCertChainPathStream;\r\n+    }\r\n+\r\n+    public void setServerKeyCertChainPathStream(InputStream serverKeyCertChainPathStream) {\r\n+        this.serverKeyCertChainPathStream = serverKeyCertChainPathStream;\r\n+    }\r\n+\r\n+    public InputStream getServerPrivateKeyPathStream() throws IOException {\r\n+        if (serverPrivateKeyPath != null) {\r\n+            serverPrivateKeyPathStream = IOUtils.getURL(serverPrivateKeyPath).openStream();\r\n+        }\r\n+        return serverPrivateKeyPathStream;\r\n+    }\r\n+\r\n+    public void setServerPrivateKeyPathStream(InputStream serverPrivateKeyPathStream) {\r\n+        this.serverPrivateKeyPathStream = serverPrivateKeyPathStream;\r\n+    }\r\n+\r\n+    public InputStream getServerTrustCertCollectionPathStream() throws IOException {\r\n+        if (serverTrustCertCollectionPath != null) {\r\n+            serverTrustCertCollectionPathStream = IOUtils.getURL(serverTrustCertCollectionPath).openStream();\r\n+        }\r\n+        return serverTrustCertCollectionPathStream;\r\n+    }\r\n+\r\n+    public void setServerTrustCertCollectionPathStream(InputStream serverTrustCertCollectionPathStream) {\r\n+        this.serverTrustCertCollectionPathStream = serverTrustCertCollectionPathStream;\r\n+    }\r\n+\r\n+    public InputStream getClientKeyCertChainPathStream() throws IOException {\r\n+        if (clientKeyCertChainPath != null) {\r\n+            clientKeyCertChainPathStream = IOUtils.getURL(clientKeyCertChainPath).openStream();\r\n+        }\r\n+        return clientKeyCertChainPathStream;\r\n+    }\r\n+\r\n+    public void setClientKeyCertChainPathStream(InputStream clientKeyCertChainPathStream) {\r\n+        this.clientKeyCertChainPathStream = clientKeyCertChainPathStream;\r\n+    }\r\n+\r\n+    public InputStream getClientPrivateKeyPathStream() throws IOException {\r\n+        if (clientPrivateKeyPath != null) {\r\n+            clientPrivateKeyPathStream = IOUtils.getURL(clientPrivateKeyPath).openStream();\r\n+        }\r\n+        return clientPrivateKeyPathStream;\r\n+    }\r\n+\r\n+    public void setClientPrivateKeyPathStream(InputStream clientPrivateKeyPathStream) {\r\n+        this.clientPrivateKeyPathStream = clientPrivateKeyPathStream;\r\n+    }\r\n+\r\n+    public InputStream getClientTrustCertCollectionPathStream() throws IOException {\r\n+        if (clientTrustCertCollectionPath != null) {\r\n+            clientTrustCertCollectionPathStream = IOUtils.getURL(clientTrustCertCollectionPath).openStream();\r\n+        }\r\n+        return clientTrustCertCollectionPathStream;\r\n+    }\r\n+\r\n+    public void setClientTrustCertCollectionPathStream(InputStream clientTrustCertCollectionPathStream) {\r\n+        this.clientTrustCertCollectionPathStream = clientTrustCertCollectionPathStream;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/annotation/Argument.java", "source2": "org/apache/dubbo/config/annotation/Argument.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,44 +1,44 @@\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.config.annotation;\n-\n-import java.lang.annotation.Documented;\n-import java.lang.annotation.ElementType;\n-import java.lang.annotation.Inherited;\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.RetentionPolicy;\n-import java.lang.annotation.Target;\n-\n-/**\n- * @since 2.6.5\n- *\n- * 2018/9/29\n- */\n-@Documented\n-@Retention(RetentionPolicy.RUNTIME)\n-@Target({ElementType.ANNOTATION_TYPE})\n-@Inherited\n-public @interface Argument {\n-    //argument: index -1 represents not set\n-    int index() default -1;\n-\n-    //argument type\n-    String type() default \"\";\n-\n-    //callback interface\n-    boolean callback() default false;\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.config.annotation;\r\n+\r\n+import java.lang.annotation.Documented;\r\n+import java.lang.annotation.ElementType;\r\n+import java.lang.annotation.Inherited;\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.RetentionPolicy;\r\n+import java.lang.annotation.Target;\r\n+\r\n+/**\r\n+ * @since 2.6.5\r\n+ *\r\n+ * 2018/9/29\r\n+ */\r\n+@Documented\r\n+@Retention(RetentionPolicy.RUNTIME)\r\n+@Target({ElementType.ANNOTATION_TYPE})\r\n+@Inherited\r\n+public @interface Argument {\r\n+    //argument: index -1 represents not set\r\n+    int index() default -1;\r\n+\r\n+    //argument type\r\n+    String type() default \"\";\r\n+\r\n+    //callback interface\r\n+    boolean callback() default false;\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/annotation/DubboReference.java", "source2": "org/apache/dubbo/config/annotation/DubboReference.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,298 +1,298 @@\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.config.annotation;\n-\n-import org.apache.dubbo.common.constants.RegistryConstants;\n-\n-import java.lang.annotation.Documented;\n-import java.lang.annotation.ElementType;\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.RetentionPolicy;\n-import java.lang.annotation.Target;\n-\n-/**\n- * An annotation used for referencing a Dubbo service\n- *\n- * @since 2.7.7\n- */\n-@Documented\n-@Retention(RetentionPolicy.RUNTIME)\n-@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})\n-public @interface DubboReference {\n-\n-    /**\n-     * Interface class, default value is void.class\n-     */\n-    Class<?> interfaceClass() default void.class;\n-\n-    /**\n-     * Interface class name, default value is empty string\n-     */\n-    String interfaceName() default \"\";\n-\n-    /**\n-     * Service version, default value is empty string\n-     */\n-    String version() default \"\";\n-\n-    /**\n-     * Service group, default value is empty string\n-     */\n-    String group() default \"\";\n-\n-    /**\n-     * Service target URL for direct invocation, if this is specified, then registry center takes no effect.\n-     */\n-    String url() default \"\";\n-\n-    /**\n-     * Client transport type, default value is \"netty\"\n-     */\n-    String client() default \"\";\n-\n-    /**\n-     * Whether to enable generic invocation, default value is false\n-     */\n-    boolean generic() default false;\n-\n-    /**\n-     * When enable, prefer to call local service in the same JVM if it's present, default value is true\n-     */\n-    boolean injvm() default true;\n-\n-    /**\n-     * Check if service provider is available during boot up, default value is true\n-     */\n-    boolean check() default true;\n-\n-    /**\n-     * Whether eager initialize the reference bean when all properties are set, default value is false\n-     */\n-    boolean init() default false;\n-\n-    /**\n-     * Whether to make connection when the client is created, the default value is false\n-     */\n-    boolean lazy() default false;\n-\n-    /**\n-     * Export an stub service for event dispatch, default value is false.\n-     * <p>\n-     * see org.apache.dubbo.rpc.Constants#STUB_EVENT_METHODS_KEY\n-     */\n-    boolean stubevent() default false;\n-\n-    /**\n-     * Whether to reconnect if connection is lost, if not specify, reconnect is enabled by default, and the interval\n-     * for retry connecting is 2000 ms\n-     * <p>\n-     * see org.apache.dubbo.remoting.Constants#DEFAULT_RECONNECT_PERIOD\n-     */\n-    String reconnect() default \"\";\n-\n-    /**\n-     * Whether to stick to the same node in the cluster, the default value is false\n-     * <p>\n-     * see Constants#DEFAULT_CLUSTER_STICKY\n-     */\n-    boolean sticky() default false;\n-\n-    /**\n-     * How the proxy is generated, legal values include: jdk, javassist\n-     */\n-    String proxy() default \"\";\n-\n-    /**\n-     * Service stub name, use interface name + Local if not set\n-     */\n-    String stub() default \"\";\n-\n-    /**\n-     * Cluster strategy, legal values include: failover, failfast, failsafe, failback, forking\n-     */\n-    String cluster() default \"\";\n-\n-    /**\n-     * Maximum connections service provider can accept, default value is 0 - connection is shared\n-     */\n-    int connections() default 0;\n-\n-    /**\n-     * The callback instance limit peer connection\n-     * <p>\n-     * see org.apache.dubbo.rpc.Constants#DEFAULT_CALLBACK_INSTANCES\n-     */\n-    int callbacks() default 0;\n-\n-    /**\n-     * Callback method name when connected, default value is empty string\n-     */\n-    String onconnect() default \"\";\n-\n-    /**\n-     * Callback method name when disconnected, default value is empty string\n-     */\n-    String ondisconnect() default \"\";\n-\n-    /**\n-     * Service owner, default value is empty string\n-     */\n-    String owner() default \"\";\n-\n-    /**\n-     * Service layer, default value is empty string\n-     */\n-    String layer() default \"\";\n-\n-    /**\n-     * Service invocation retry times\n-     * <p>\n-     * see Constants#DEFAULT_RETRIES\n-     */\n-    int retries() default 2;\n-\n-    /**\n-     * Load balance strategy, legal values include: random, roundrobin, leastactive\n-     * <p>\n-     * see Constants#DEFAULT_LOADBALANCE\n-     */\n-    String loadbalance() default \"\";\n-\n-    /**\n-     * Whether to enable async invocation, default value is false\n-     */\n-    boolean async() default false;\n-\n-    /**\n-     * Maximum active requests allowed, default value is 0\n-     */\n-    int actives() default 0;\n-\n-    /**\n-     * Whether the async request has already been sent, the default value is false\n-     */\n-    boolean sent() default false;\n-\n-    /**\n-     * Service mock name, use interface name + Mock if not set\n-     */\n-    String mock() default \"\";\n-\n-    /**\n-     * Whether to use JSR303 validation, legal values are: true, false\n-     */\n-    String validation() default \"\";\n-\n-    /**\n-     * Timeout value for service invocation, default value is 0\n-     */\n-    int timeout() default 0;\n-\n-    /**\n-     * Specify cache implementation for service invocation, legal values include: lru, threadlocal, jcache\n-     */\n-    String cache() default \"\";\n-\n-    /**\n-     * Filters for service invocation\n-     * <p>\n-     * see Filter\n-     */\n-    String[] filter() default {};\n-\n-    /**\n-     * Listeners for service exporting and unexporting\n-     * <p>\n-     * see ExporterListener\n-     */\n-    String[] listener() default {};\n-\n-    /**\n-     * Customized parameter key-value pair, for example: {key1, value1, key2, value2}\n-     */\n-    String[] parameters() default {};\n-\n-    /**\n-     * Application associated name\n-     */\n-    String application() default \"\";\n-\n-    /**\n-     * Module associated name\n-     */\n-    String module() default \"\";\n-\n-    /**\n-     * Consumer associated name\n-     */\n-    String consumer() default \"\";\n-\n-    /**\n-     * Monitor associated name\n-     */\n-    String monitor() default \"\";\n-\n-    /**\n-     * Registry associated name\n-     */\n-    String[] registry() default {};\n-\n-    /**\n-     * The communication protocol of Dubbo Service\n-     *\n-     * @return the default value is \"\"\n-     * @since 2.6.6\n-     */\n-    String protocol() default \"\";\n-\n-    /**\n-     * Service tag name\n-     */\n-    String tag() default \"\";\n-\n-    /**\n-     * Service merger\n-     */\n-    String merger() default \"\";\n-\n-    /**\n-     * methods support\n-     */\n-    Method[] methods() default {};\n-\n-    /**\n-     * The id\n-     *\n-     * @return default value is empty\n-     * @since 2.7.3\n-     */\n-    String id() default \"\";\n-\n-    /**\n-     * @return The service names that the Dubbo interface subscribed\n-     * @see RegistryConstants#SUBSCRIBED_SERVICE_NAMES_KEY\n-     * @deprecated using {@link DubboReference#providedBy()}\n-     * @since 2.7.8\n-     */\n-    String[] services() default {};\n-\n-    /**\n-     * declares which app or service this interface belongs to\n-     * @see RegistryConstants#PROVIDED_BY\n-     */\n-    String[] providedBy() default {};\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.config.annotation;\r\n+\r\n+import org.apache.dubbo.common.constants.RegistryConstants;\r\n+\r\n+import java.lang.annotation.Documented;\r\n+import java.lang.annotation.ElementType;\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.RetentionPolicy;\r\n+import java.lang.annotation.Target;\r\n+\r\n+/**\r\n+ * An annotation used for referencing a Dubbo service\r\n+ *\r\n+ * @since 2.7.7\r\n+ */\r\n+@Documented\r\n+@Retention(RetentionPolicy.RUNTIME)\r\n+@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})\r\n+public @interface DubboReference {\r\n+\r\n+    /**\r\n+     * Interface class, default value is void.class\r\n+     */\r\n+    Class<?> interfaceClass() default void.class;\r\n+\r\n+    /**\r\n+     * Interface class name, default value is empty string\r\n+     */\r\n+    String interfaceName() default \"\";\r\n+\r\n+    /**\r\n+     * Service version, default value is empty string\r\n+     */\r\n+    String version() default \"\";\r\n+\r\n+    /**\r\n+     * Service group, default value is empty string\r\n+     */\r\n+    String group() default \"\";\r\n+\r\n+    /**\r\n+     * Service target URL for direct invocation, if this is specified, then registry center takes no effect.\r\n+     */\r\n+    String url() default \"\";\r\n+\r\n+    /**\r\n+     * Client transport type, default value is \"netty\"\r\n+     */\r\n+    String client() default \"\";\r\n+\r\n+    /**\r\n+     * Whether to enable generic invocation, default value is false\r\n+     */\r\n+    boolean generic() default false;\r\n+\r\n+    /**\r\n+     * When enable, prefer to call local service in the same JVM if it's present, default value is true\r\n+     */\r\n+    boolean injvm() default true;\r\n+\r\n+    /**\r\n+     * Check if service provider is available during boot up, default value is true\r\n+     */\r\n+    boolean check() default true;\r\n+\r\n+    /**\r\n+     * Whether eager initialize the reference bean when all properties are set, default value is false\r\n+     */\r\n+    boolean init() default false;\r\n+\r\n+    /**\r\n+     * Whether to make connection when the client is created, the default value is false\r\n+     */\r\n+    boolean lazy() default false;\r\n+\r\n+    /**\r\n+     * Export an stub service for event dispatch, default value is false.\r\n+     * <p>\r\n+     * see org.apache.dubbo.rpc.Constants#STUB_EVENT_METHODS_KEY\r\n+     */\r\n+    boolean stubevent() default false;\r\n+\r\n+    /**\r\n+     * Whether to reconnect if connection is lost, if not specify, reconnect is enabled by default, and the interval\r\n+     * for retry connecting is 2000 ms\r\n+     * <p>\r\n+     * see org.apache.dubbo.remoting.Constants#DEFAULT_RECONNECT_PERIOD\r\n+     */\r\n+    String reconnect() default \"\";\r\n+\r\n+    /**\r\n+     * Whether to stick to the same node in the cluster, the default value is false\r\n+     * <p>\r\n+     * see Constants#DEFAULT_CLUSTER_STICKY\r\n+     */\r\n+    boolean sticky() default false;\r\n+\r\n+    /**\r\n+     * How the proxy is generated, legal values include: jdk, javassist\r\n+     */\r\n+    String proxy() default \"\";\r\n+\r\n+    /**\r\n+     * Service stub name, use interface name + Local if not set\r\n+     */\r\n+    String stub() default \"\";\r\n+\r\n+    /**\r\n+     * Cluster strategy, legal values include: failover, failfast, failsafe, failback, forking\r\n+     */\r\n+    String cluster() default \"\";\r\n+\r\n+    /**\r\n+     * Maximum connections service provider can accept, default value is 0 - connection is shared\r\n+     */\r\n+    int connections() default 0;\r\n+\r\n+    /**\r\n+     * The callback instance limit peer connection\r\n+     * <p>\r\n+     * see org.apache.dubbo.rpc.Constants#DEFAULT_CALLBACK_INSTANCES\r\n+     */\r\n+    int callbacks() default 0;\r\n+\r\n+    /**\r\n+     * Callback method name when connected, default value is empty string\r\n+     */\r\n+    String onconnect() default \"\";\r\n+\r\n+    /**\r\n+     * Callback method name when disconnected, default value is empty string\r\n+     */\r\n+    String ondisconnect() default \"\";\r\n+\r\n+    /**\r\n+     * Service owner, default value is empty string\r\n+     */\r\n+    String owner() default \"\";\r\n+\r\n+    /**\r\n+     * Service layer, default value is empty string\r\n+     */\r\n+    String layer() default \"\";\r\n+\r\n+    /**\r\n+     * Service invocation retry times\r\n+     * <p>\r\n+     * see Constants#DEFAULT_RETRIES\r\n+     */\r\n+    int retries() default 2;\r\n+\r\n+    /**\r\n+     * Load balance strategy, legal values include: random, roundrobin, leastactive\r\n+     * <p>\r\n+     * see Constants#DEFAULT_LOADBALANCE\r\n+     */\r\n+    String loadbalance() default \"\";\r\n+\r\n+    /**\r\n+     * Whether to enable async invocation, default value is false\r\n+     */\r\n+    boolean async() default false;\r\n+\r\n+    /**\r\n+     * Maximum active requests allowed, default value is 0\r\n+     */\r\n+    int actives() default 0;\r\n+\r\n+    /**\r\n+     * Whether the async request has already been sent, the default value is false\r\n+     */\r\n+    boolean sent() default false;\r\n+\r\n+    /**\r\n+     * Service mock name, use interface name + Mock if not set\r\n+     */\r\n+    String mock() default \"\";\r\n+\r\n+    /**\r\n+     * Whether to use JSR303 validation, legal values are: true, false\r\n+     */\r\n+    String validation() default \"\";\r\n+\r\n+    /**\r\n+     * Timeout value for service invocation, default value is 0\r\n+     */\r\n+    int timeout() default 0;\r\n+\r\n+    /**\r\n+     * Specify cache implementation for service invocation, legal values include: lru, threadlocal, jcache\r\n+     */\r\n+    String cache() default \"\";\r\n+\r\n+    /**\r\n+     * Filters for service invocation\r\n+     * <p>\r\n+     * see Filter\r\n+     */\r\n+    String[] filter() default {};\r\n+\r\n+    /**\r\n+     * Listeners for service exporting and unexporting\r\n+     * <p>\r\n+     * see ExporterListener\r\n+     */\r\n+    String[] listener() default {};\r\n+\r\n+    /**\r\n+     * Customized parameter key-value pair, for example: {key1, value1, key2, value2}\r\n+     */\r\n+    String[] parameters() default {};\r\n+\r\n+    /**\r\n+     * Application associated name\r\n+     */\r\n+    String application() default \"\";\r\n+\r\n+    /**\r\n+     * Module associated name\r\n+     */\r\n+    String module() default \"\";\r\n+\r\n+    /**\r\n+     * Consumer associated name\r\n+     */\r\n+    String consumer() default \"\";\r\n+\r\n+    /**\r\n+     * Monitor associated name\r\n+     */\r\n+    String monitor() default \"\";\r\n+\r\n+    /**\r\n+     * Registry associated name\r\n+     */\r\n+    String[] registry() default {};\r\n+\r\n+    /**\r\n+     * The communication protocol of Dubbo Service\r\n+     *\r\n+     * @return the default value is \"\"\r\n+     * @since 2.6.6\r\n+     */\r\n+    String protocol() default \"\";\r\n+\r\n+    /**\r\n+     * Service tag name\r\n+     */\r\n+    String tag() default \"\";\r\n+\r\n+    /**\r\n+     * Service merger\r\n+     */\r\n+    String merger() default \"\";\r\n+\r\n+    /**\r\n+     * methods support\r\n+     */\r\n+    Method[] methods() default {};\r\n+\r\n+    /**\r\n+     * The id\r\n+     *\r\n+     * @return default value is empty\r\n+     * @since 2.7.3\r\n+     */\r\n+    String id() default \"\";\r\n+\r\n+    /**\r\n+     * @return The service names that the Dubbo interface subscribed\r\n+     * @see RegistryConstants#SUBSCRIBED_SERVICE_NAMES_KEY\r\n+     * @deprecated using {@link DubboReference#providedBy()}\r\n+     * @since 2.7.8\r\n+     */\r\n+    String[] services() default {};\r\n+\r\n+    /**\r\n+     * declares which app or service this interface belongs to\r\n+     * @see RegistryConstants#PROVIDED_BY\r\n+     */\r\n+    String[] providedBy() default {};\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/annotation/DubboService.java", "source2": "org/apache/dubbo/config/annotation/DubboService.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,278 +1,278 @@\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.config.annotation;\n-\n-\n-import java.lang.annotation.Documented;\n-import java.lang.annotation.ElementType;\n-import java.lang.annotation.Inherited;\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.RetentionPolicy;\n-import java.lang.annotation.Target;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_LOADBALANCE;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_RETRIES;\n-\n-/**\n- * Class-level annotation used for declaring Dubbo service\n- *\n- * @since 2.7.7\n- */\n-@Documented\n-@Retention(RetentionPolicy.RUNTIME)\n-@Target({ElementType.TYPE})\n-@Inherited\n-public @interface DubboService {\n-\n-    /**\n-     * Interface class, default value is void.class\n-     */\n-    Class<?> interfaceClass() default void.class;\n-\n-    /**\n-     * Interface class name, default value is empty string\n-     */\n-    String interfaceName() default \"\";\n-\n-    /**\n-     * Service version, default value is empty string\n-     */\n-    String version() default \"\";\n-\n-    /**\n-     * Service group, default value is empty string\n-     */\n-    String group() default \"\";\n-\n-    /**\n-     * Service path, default value is empty string\n-     */\n-    String path() default \"\";\n-\n-    /**\n-     * Whether to export service, default value is true\n-     */\n-    boolean export() default true;\n-\n-    /**\n-     * Service token, default value is false\n-     */\n-    String token() default \"\";\n-\n-    /**\n-     * Whether the service is deprecated, default value is false\n-     */\n-    boolean deprecated() default false;\n-\n-    /**\n-     * Whether the service is dynamic, default value is true\n-     */\n-    boolean dynamic() default true;\n-\n-    /**\n-     * Access log for the service, default value is \"\"\n-     */\n-    String accesslog() default \"\";\n-\n-    /**\n-     * Maximum concurrent executes for the service, default value is 0 - no limits\n-     */\n-    int executes() default 0;\n-\n-    /**\n-     * Whether to register the service to register center, default value is true\n-     */\n-    boolean register() default true;\n-\n-    /**\n-     * Service weight value, default value is 0\n-     */\n-    int weight() default 0;\n-\n-    /**\n-     * Service doc, default value is \"\"\n-     */\n-    String document() default \"\";\n-\n-    /**\n-     * Delay time for service registration, default value is 0\n-     */\n-    int delay() default 0;\n-\n-    /**\n-     * @see DubboService#stub()\n-     * @deprecated\n-     */\n-    String local() default \"\";\n-\n-    /**\n-     * Service stub name, use interface name + Local if not set\n-     */\n-    String stub() default \"\";\n-\n-    /**\n-     * Cluster strategy, legal values include: failover, failfast, failsafe, failback, forking\n-     */\n-    String cluster() default \"\";\n-\n-    /**\n-     * How the proxy is generated, legal values include: jdk, javassist\n-     */\n-    String proxy() default \"\";\n-\n-    /**\n-     * Maximum connections service provider can accept, default value is 0 - connection is shared\n-     */\n-    int connections() default 0;\n-\n-    /**\n-     * The callback instance limit peer connection\n-     * <p>\n-     * see org.apache.dubbo.rpc.Constants#DEFAULT_CALLBACK_INSTANCES\n-     */\n-    int callbacks() default org.apache.dubbo.common.constants.CommonConstants.DEFAULT_CALLBACK_INSTANCES;\n-\n-    /**\n-     * Callback method name when connected, default value is empty string\n-     */\n-    String onconnect() default \"\";\n-\n-    /**\n-     * Callback method name when disconnected, default value is empty string\n-     */\n-    String ondisconnect() default \"\";\n-\n-    /**\n-     * Service owner, default value is empty string\n-     */\n-    String owner() default \"\";\n-\n-    /**\n-     * Service layer, default value is empty string\n-     */\n-    String layer() default \"\";\n-\n-    /**\n-     * Service invocation retry times\n-     *\n-     * @see org.apache.dubbo.common.constants.CommonConstants#DEFAULT_RETRIES\n-     */\n-    int retries() default DEFAULT_RETRIES;\n-\n-    /**\n-     * Load balance strategy, legal values include: random, roundrobin, leastactive\n-     *\n-     * @see org.apache.dubbo.common.constants.CommonConstants#DEFAULT_LOADBALANCE\n-     */\n-    String loadbalance() default DEFAULT_LOADBALANCE;\n-\n-    /**\n-     * Whether to enable async invocation, default value is false\n-     */\n-    boolean async() default false;\n-\n-    /**\n-     * Maximum active requests allowed, default value is 0\n-     */\n-    int actives() default 0;\n-\n-    /**\n-     * Whether the async request has already been sent, the default value is false\n-     */\n-    boolean sent() default false;\n-\n-    /**\n-     * Service mock name, use interface name + Mock if not set\n-     */\n-    String mock() default \"\";\n-\n-    /**\n-     * Whether to use JSR303 validation, legal values are: true, false\n-     */\n-    String validation() default \"\";\n-\n-    /**\n-     * Timeout value for service invocation, default value is 0\n-     */\n-    int timeout() default 0;\n-\n-    /**\n-     * Specify cache implementation for service invocation, legal values include: lru, threadlocal, jcache\n-     */\n-    String cache() default \"\";\n-\n-    /**\n-     * Filters for service invocation\n-     *\n-     * @see Filter\n-     */\n-    String[] filter() default {};\n-\n-    /**\n-     * Listeners for service exporting and unexporting\n-     *\n-     * @see ExporterListener\n-     */\n-    String[] listener() default {};\n-\n-    /**\n-     * Customized parameter key-value pair, for example: {key1, value1, key2, value2}\n-     */\n-    String[] parameters() default {};\n-\n-    /**\n-     * Application spring bean name\n-     */\n-    String application() default \"\";\n-\n-    /**\n-     * Module spring bean name\n-     */\n-    String module() default \"\";\n-\n-    /**\n-     * Provider spring bean name\n-     */\n-    String provider() default \"\";\n-\n-    /**\n-     * Protocol spring bean names\n-     */\n-    String[] protocol() default {};\n-\n-    /**\n-     * Monitor spring bean name\n-     */\n-    String monitor() default \"\";\n-\n-    /**\n-     * Registry spring bean name\n-     */\n-    String[] registry() default {};\n-\n-    /**\n-     * Service tag name\n-     */\n-    String tag() default \"\";\n-\n-    /**\n-     * methods support\n-     *\n-     * @return\n-     */\n-    Method[] methods() default {};\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.config.annotation;\r\n+\r\n+\r\n+import java.lang.annotation.Documented;\r\n+import java.lang.annotation.ElementType;\r\n+import java.lang.annotation.Inherited;\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.RetentionPolicy;\r\n+import java.lang.annotation.Target;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_LOADBALANCE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_RETRIES;\r\n+\r\n+/**\r\n+ * Class-level annotation used for declaring Dubbo service\r\n+ *\r\n+ * @since 2.7.7\r\n+ */\r\n+@Documented\r\n+@Retention(RetentionPolicy.RUNTIME)\r\n+@Target({ElementType.TYPE})\r\n+@Inherited\r\n+public @interface DubboService {\r\n+\r\n+    /**\r\n+     * Interface class, default value is void.class\r\n+     */\r\n+    Class<?> interfaceClass() default void.class;\r\n+\r\n+    /**\r\n+     * Interface class name, default value is empty string\r\n+     */\r\n+    String interfaceName() default \"\";\r\n+\r\n+    /**\r\n+     * Service version, default value is empty string\r\n+     */\r\n+    String version() default \"\";\r\n+\r\n+    /**\r\n+     * Service group, default value is empty string\r\n+     */\r\n+    String group() default \"\";\r\n+\r\n+    /**\r\n+     * Service path, default value is empty string\r\n+     */\r\n+    String path() default \"\";\r\n+\r\n+    /**\r\n+     * Whether to export service, default value is true\r\n+     */\r\n+    boolean export() default true;\r\n+\r\n+    /**\r\n+     * Service token, default value is false\r\n+     */\r\n+    String token() default \"\";\r\n+\r\n+    /**\r\n+     * Whether the service is deprecated, default value is false\r\n+     */\r\n+    boolean deprecated() default false;\r\n+\r\n+    /**\r\n+     * Whether the service is dynamic, default value is true\r\n+     */\r\n+    boolean dynamic() default true;\r\n+\r\n+    /**\r\n+     * Access log for the service, default value is \"\"\r\n+     */\r\n+    String accesslog() default \"\";\r\n+\r\n+    /**\r\n+     * Maximum concurrent executes for the service, default value is 0 - no limits\r\n+     */\r\n+    int executes() default 0;\r\n+\r\n+    /**\r\n+     * Whether to register the service to register center, default value is true\r\n+     */\r\n+    boolean register() default true;\r\n+\r\n+    /**\r\n+     * Service weight value, default value is 0\r\n+     */\r\n+    int weight() default 0;\r\n+\r\n+    /**\r\n+     * Service doc, default value is \"\"\r\n+     */\r\n+    String document() default \"\";\r\n+\r\n+    /**\r\n+     * Delay time for service registration, default value is 0\r\n+     */\r\n+    int delay() default 0;\r\n+\r\n+    /**\r\n+     * @see DubboService#stub()\r\n+     * @deprecated\r\n+     */\r\n+    String local() default \"\";\r\n+\r\n+    /**\r\n+     * Service stub name, use interface name + Local if not set\r\n+     */\r\n+    String stub() default \"\";\r\n+\r\n+    /**\r\n+     * Cluster strategy, legal values include: failover, failfast, failsafe, failback, forking\r\n+     */\r\n+    String cluster() default \"\";\r\n+\r\n+    /**\r\n+     * How the proxy is generated, legal values include: jdk, javassist\r\n+     */\r\n+    String proxy() default \"\";\r\n+\r\n+    /**\r\n+     * Maximum connections service provider can accept, default value is 0 - connection is shared\r\n+     */\r\n+    int connections() default 0;\r\n+\r\n+    /**\r\n+     * The callback instance limit peer connection\r\n+     * <p>\r\n+     * see org.apache.dubbo.rpc.Constants#DEFAULT_CALLBACK_INSTANCES\r\n+     */\r\n+    int callbacks() default org.apache.dubbo.common.constants.CommonConstants.DEFAULT_CALLBACK_INSTANCES;\r\n+\r\n+    /**\r\n+     * Callback method name when connected, default value is empty string\r\n+     */\r\n+    String onconnect() default \"\";\r\n+\r\n+    /**\r\n+     * Callback method name when disconnected, default value is empty string\r\n+     */\r\n+    String ondisconnect() default \"\";\r\n+\r\n+    /**\r\n+     * Service owner, default value is empty string\r\n+     */\r\n+    String owner() default \"\";\r\n+\r\n+    /**\r\n+     * Service layer, default value is empty string\r\n+     */\r\n+    String layer() default \"\";\r\n+\r\n+    /**\r\n+     * Service invocation retry times\r\n+     *\r\n+     * @see org.apache.dubbo.common.constants.CommonConstants#DEFAULT_RETRIES\r\n+     */\r\n+    int retries() default DEFAULT_RETRIES;\r\n+\r\n+    /**\r\n+     * Load balance strategy, legal values include: random, roundrobin, leastactive\r\n+     *\r\n+     * @see org.apache.dubbo.common.constants.CommonConstants#DEFAULT_LOADBALANCE\r\n+     */\r\n+    String loadbalance() default DEFAULT_LOADBALANCE;\r\n+\r\n+    /**\r\n+     * Whether to enable async invocation, default value is false\r\n+     */\r\n+    boolean async() default false;\r\n+\r\n+    /**\r\n+     * Maximum active requests allowed, default value is 0\r\n+     */\r\n+    int actives() default 0;\r\n+\r\n+    /**\r\n+     * Whether the async request has already been sent, the default value is false\r\n+     */\r\n+    boolean sent() default false;\r\n+\r\n+    /**\r\n+     * Service mock name, use interface name + Mock if not set\r\n+     */\r\n+    String mock() default \"\";\r\n+\r\n+    /**\r\n+     * Whether to use JSR303 validation, legal values are: true, false\r\n+     */\r\n+    String validation() default \"\";\r\n+\r\n+    /**\r\n+     * Timeout value for service invocation, default value is 0\r\n+     */\r\n+    int timeout() default 0;\r\n+\r\n+    /**\r\n+     * Specify cache implementation for service invocation, legal values include: lru, threadlocal, jcache\r\n+     */\r\n+    String cache() default \"\";\r\n+\r\n+    /**\r\n+     * Filters for service invocation\r\n+     *\r\n+     * @see Filter\r\n+     */\r\n+    String[] filter() default {};\r\n+\r\n+    /**\r\n+     * Listeners for service exporting and unexporting\r\n+     *\r\n+     * @see ExporterListener\r\n+     */\r\n+    String[] listener() default {};\r\n+\r\n+    /**\r\n+     * Customized parameter key-value pair, for example: {key1, value1, key2, value2}\r\n+     */\r\n+    String[] parameters() default {};\r\n+\r\n+    /**\r\n+     * Application spring bean name\r\n+     */\r\n+    String application() default \"\";\r\n+\r\n+    /**\r\n+     * Module spring bean name\r\n+     */\r\n+    String module() default \"\";\r\n+\r\n+    /**\r\n+     * Provider spring bean name\r\n+     */\r\n+    String provider() default \"\";\r\n+\r\n+    /**\r\n+     * Protocol spring bean names\r\n+     */\r\n+    String[] protocol() default {};\r\n+\r\n+    /**\r\n+     * Monitor spring bean name\r\n+     */\r\n+    String monitor() default \"\";\r\n+\r\n+    /**\r\n+     * Registry spring bean name\r\n+     */\r\n+    String[] registry() default {};\r\n+\r\n+    /**\r\n+     * Service tag name\r\n+     */\r\n+    String tag() default \"\";\r\n+\r\n+    /**\r\n+     * methods support\r\n+     *\r\n+     * @return\r\n+     */\r\n+    Method[] methods() default {};\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/annotation/Method.java", "source2": "org/apache/dubbo/config/annotation/Method.java", "comments": ["Line-ending 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.config.annotation;\n-\n-import java.lang.annotation.Documented;\n-import java.lang.annotation.ElementType;\n-import java.lang.annotation.Inherited;\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.RetentionPolicy;\n-import java.lang.annotation.Target;\n-\n-/**\n- * @since 2.6.5\n- *  *\n- *  * 2018/9/29\n- */\n-@Documented\n-@Retention(RetentionPolicy.RUNTIME)\n-@Target({ElementType.ANNOTATION_TYPE})\n-@Inherited\n-public @interface Method {\n-    String name();\n-\n-    int timeout() default -1;\n-\n-    int retries() default -1;\n-\n-    String loadbalance() default \"\";\n-\n-    boolean async() default false;\n-\n-    boolean sent() default true;\n-\n-    int actives() default 0;\n-\n-    int executes() default 0;\n-\n-    boolean deprecated() default false;\n-\n-    boolean sticky() default false;\n-\n-    boolean isReturn() default true;\n-\n-    String oninvoke() default \"\";\n-\n-    String onreturn() default \"\";\n-\n-    String onthrow() default \"\";\n-\n-    String cache() default \"\";\n-\n-    String validation() default \"\";\n-\n-    String merger() default \"\";\n-\n-    Argument[] arguments() default {};\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.config.annotation;\r\n+\r\n+import java.lang.annotation.Documented;\r\n+import java.lang.annotation.ElementType;\r\n+import java.lang.annotation.Inherited;\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.RetentionPolicy;\r\n+import java.lang.annotation.Target;\r\n+\r\n+/**\r\n+ * @since 2.6.5\r\n+ *  *\r\n+ *  * 2018/9/29\r\n+ */\r\n+@Documented\r\n+@Retention(RetentionPolicy.RUNTIME)\r\n+@Target({ElementType.ANNOTATION_TYPE})\r\n+@Inherited\r\n+public @interface Method {\r\n+    String name();\r\n+\r\n+    int timeout() default -1;\r\n+\r\n+    int retries() default -1;\r\n+\r\n+    String loadbalance() default \"\";\r\n+\r\n+    boolean async() default false;\r\n+\r\n+    boolean sent() default true;\r\n+\r\n+    int actives() default 0;\r\n+\r\n+    int executes() default 0;\r\n+\r\n+    boolean deprecated() default false;\r\n+\r\n+    boolean sticky() default false;\r\n+\r\n+    boolean isReturn() default true;\r\n+\r\n+    String oninvoke() default \"\";\r\n+\r\n+    String onreturn() default \"\";\r\n+\r\n+    String onthrow() default \"\";\r\n+\r\n+    String cache() default \"\";\r\n+\r\n+    String validation() default \"\";\r\n+\r\n+    String merger() default \"\";\r\n+\r\n+    Argument[] arguments() default {};\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/annotation/Reference.java", "source2": "org/apache/dubbo/config/annotation/Reference.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,282 +1,282 @@\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.config.annotation;\n-\n-import java.lang.annotation.Documented;\n-import java.lang.annotation.ElementType;\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.RetentionPolicy;\n-import java.lang.annotation.Target;\n-\n-/**\n- * Reference\n- * <p>\n- *\n- * @see DubboReference\n- * @since 2.7.0\n- * @deprecated Recommend {@link DubboReference} as the substitute\n- */\n-@Documented\n-@Retention(RetentionPolicy.RUNTIME)\n-@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})\n-@Deprecated\n-public @interface Reference {\n-    /**\n-     * Interface class, default value is void.class\n-     */\n-    Class<?> interfaceClass() default void.class;\n-\n-    /**\n-     * Interface class name, default value is empty string\n-     */\n-    String interfaceName() default \"\";\n-\n-    /**\n-     * Service version, default value is empty string\n-     */\n-    String version() default \"\";\n-\n-    /**\n-     * Service group, default value is empty string\n-     */\n-    String group() default \"\";\n-\n-    /**\n-     * Service target URL for direct invocation, if this is specified, then registry center takes no effect.\n-     */\n-    String url() default \"\";\n-\n-    /**\n-     * Client transport type, default value is \"netty\"\n-     */\n-    String client() default \"\";\n-\n-    /**\n-     * Whether to enable generic invocation, default value is false\n-     */\n-    boolean generic() default false;\n-\n-    /**\n-     * When enable, prefer to call local service in the same JVM if it's present, default value is true\n-     */\n-    boolean injvm() default true;\n-\n-    /**\n-     * Check if service provider is available during boot up, default value is true\n-     */\n-    boolean check() default true;\n-\n-    /**\n-     * Whether eager initialize the reference bean when all properties are set, default value is false\n-     */\n-    boolean init() default false;\n-\n-    /**\n-     * Whether to make connection when the client is created, the default value is false\n-     */\n-    boolean lazy() default false;\n-\n-    /**\n-     * Export an stub service for event dispatch, default value is false.\n-     * <p>\n-     * see org.apache.dubbo.rpc.Constants#STUB_EVENT_METHODS_KEY\n-     */\n-    boolean stubevent() default false;\n-\n-    /**\n-     * Whether to reconnect if connection is lost, if not specify, reconnect is enabled by default, and the interval\n-     * for retry connecting is 2000 ms\n-     * <p>\n-     * see org.apache.dubbo.remoting.Constants#DEFAULT_RECONNECT_PERIOD\n-     */\n-    String reconnect() default \"\";\n-\n-    /**\n-     * Whether to stick to the same node in the cluster, the default value is false\n-     * <p>\n-     * see Constants#DEFAULT_CLUSTER_STICKY\n-     */\n-    boolean sticky() default false;\n-\n-    /**\n-     * How the proxy is generated, legal values include: jdk, javassist\n-     */\n-    String proxy() default \"\";\n-\n-    /**\n-     * Service stub name, use interface name + Local if not set\n-     */\n-    String stub() default \"\";\n-\n-    /**\n-     * Cluster strategy, legal values include: failover, failfast, failsafe, failback, forking\n-     */\n-    String cluster() default \"\";\n-\n-    /**\n-     * Maximum connections service provider can accept, default value is 0 - connection is shared\n-     */\n-    int connections() default 0;\n-\n-    /**\n-     * The callback instance limit peer connection\n-     * <p>\n-     * see org.apache.dubbo.rpc.Constants#DEFAULT_CALLBACK_INSTANCES\n-     */\n-    int callbacks() default 0;\n-\n-    /**\n-     * Callback method name when connected, default value is empty string\n-     */\n-    String onconnect() default \"\";\n-\n-    /**\n-     * Callback method name when disconnected, default value is empty string\n-     */\n-    String ondisconnect() default \"\";\n-\n-    /**\n-     * Service owner, default value is empty string\n-     */\n-    String owner() default \"\";\n-\n-    /**\n-     * Service layer, default value is empty string\n-     */\n-    String layer() default \"\";\n-\n-    /**\n-     * Service invocation retry times\n-     * <p>\n-     * see Constants#DEFAULT_RETRIES\n-     */\n-    int retries() default 2;\n-\n-    /**\n-     * Load balance strategy, legal values include: random, roundrobin, leastactive\n-     * <p>\n-     * see Constants#DEFAULT_LOADBALANCE\n-     */\n-    String loadbalance() default \"\";\n-\n-    /**\n-     * Whether to enable async invocation, default value is false\n-     */\n-    boolean async() default false;\n-\n-    /**\n-     * Maximum active requests allowed, default value is 0\n-     */\n-    int actives() default 0;\n-\n-    /**\n-     * Whether the async request has already been sent, the default value is false\n-     */\n-    boolean sent() default false;\n-\n-    /**\n-     * Service mock name, use interface name + Mock if not set\n-     */\n-    String mock() default \"\";\n-\n-    /**\n-     * Whether to use JSR303 validation, legal values are: true, false\n-     */\n-    String validation() default \"\";\n-\n-    /**\n-     * Timeout value for service invocation, default value is 0\n-     */\n-    int timeout() default 0;\n-\n-    /**\n-     * Specify cache implementation for service invocation, legal values include: lru, threadlocal, jcache\n-     */\n-    String cache() default \"\";\n-\n-    /**\n-     * Filters for service invocation\n-     * <p>\n-     * see Filter\n-     */\n-    String[] filter() default {};\n-\n-    /**\n-     * Listeners for service exporting and unexporting\n-     * <p>\n-     * see ExporterListener\n-     */\n-    String[] listener() default {};\n-\n-    /**\n-     * Customized parameter key-value pair, for example: {key1, value1, key2, value2}\n-     */\n-    String[] parameters() default {};\n-\n-    /**\n-     * Application associated name\n-     */\n-    String application() default \"\";\n-\n-    /**\n-     * Module associated name\n-     */\n-    String module() default \"\";\n-\n-    /**\n-     * Consumer associated name\n-     */\n-    String consumer() default \"\";\n-\n-    /**\n-     * Monitor associated name\n-     */\n-    String monitor() default \"\";\n-\n-    /**\n-     * Registry associated name\n-     */\n-    String[] registry() default {};\n-\n-    /**\n-     * The communication protocol of Dubbo Service\n-     *\n-     * @return the default value is \"\"\n-     * @since 2.6.6\n-     */\n-    String protocol() default \"\";\n-\n-    /**\n-     * Service tag name\n-     */\n-    String tag() default \"\";\n-\n-    /**\n-     * methods support\n-     *\n-     * @return\n-     */\n-    Method[] methods() default {};\n-\n-    /**\n-     * The id\n-     *\n-     * @return default value is empty\n-     * @since 2.7.3\n-     */\n-    String id() default \"\";\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.config.annotation;\r\n+\r\n+import java.lang.annotation.Documented;\r\n+import java.lang.annotation.ElementType;\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.RetentionPolicy;\r\n+import java.lang.annotation.Target;\r\n+\r\n+/**\r\n+ * Reference\r\n+ * <p>\r\n+ *\r\n+ * @see DubboReference\r\n+ * @since 2.7.0\r\n+ * @deprecated Recommend {@link DubboReference} as the substitute\r\n+ */\r\n+@Documented\r\n+@Retention(RetentionPolicy.RUNTIME)\r\n+@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})\r\n+@Deprecated\r\n+public @interface Reference {\r\n+    /**\r\n+     * Interface class, default value is void.class\r\n+     */\r\n+    Class<?> interfaceClass() default void.class;\r\n+\r\n+    /**\r\n+     * Interface class name, default value is empty string\r\n+     */\r\n+    String interfaceName() default \"\";\r\n+\r\n+    /**\r\n+     * Service version, default value is empty string\r\n+     */\r\n+    String version() default \"\";\r\n+\r\n+    /**\r\n+     * Service group, default value is empty string\r\n+     */\r\n+    String group() default \"\";\r\n+\r\n+    /**\r\n+     * Service target URL for direct invocation, if this is specified, then registry center takes no effect.\r\n+     */\r\n+    String url() default \"\";\r\n+\r\n+    /**\r\n+     * Client transport type, default value is \"netty\"\r\n+     */\r\n+    String client() default \"\";\r\n+\r\n+    /**\r\n+     * Whether to enable generic invocation, default value is false\r\n+     */\r\n+    boolean generic() default false;\r\n+\r\n+    /**\r\n+     * When enable, prefer to call local service in the same JVM if it's present, default value is true\r\n+     */\r\n+    boolean injvm() default true;\r\n+\r\n+    /**\r\n+     * Check if service provider is available during boot up, default value is true\r\n+     */\r\n+    boolean check() default true;\r\n+\r\n+    /**\r\n+     * Whether eager initialize the reference bean when all properties are set, default value is false\r\n+     */\r\n+    boolean init() default false;\r\n+\r\n+    /**\r\n+     * Whether to make connection when the client is created, the default value is false\r\n+     */\r\n+    boolean lazy() default false;\r\n+\r\n+    /**\r\n+     * Export an stub service for event dispatch, default value is false.\r\n+     * <p>\r\n+     * see org.apache.dubbo.rpc.Constants#STUB_EVENT_METHODS_KEY\r\n+     */\r\n+    boolean stubevent() default false;\r\n+\r\n+    /**\r\n+     * Whether to reconnect if connection is lost, if not specify, reconnect is enabled by default, and the interval\r\n+     * for retry connecting is 2000 ms\r\n+     * <p>\r\n+     * see org.apache.dubbo.remoting.Constants#DEFAULT_RECONNECT_PERIOD\r\n+     */\r\n+    String reconnect() default \"\";\r\n+\r\n+    /**\r\n+     * Whether to stick to the same node in the cluster, the default value is false\r\n+     * <p>\r\n+     * see Constants#DEFAULT_CLUSTER_STICKY\r\n+     */\r\n+    boolean sticky() default false;\r\n+\r\n+    /**\r\n+     * How the proxy is generated, legal values include: jdk, javassist\r\n+     */\r\n+    String proxy() default \"\";\r\n+\r\n+    /**\r\n+     * Service stub name, use interface name + Local if not set\r\n+     */\r\n+    String stub() default \"\";\r\n+\r\n+    /**\r\n+     * Cluster strategy, legal values include: failover, failfast, failsafe, failback, forking\r\n+     */\r\n+    String cluster() default \"\";\r\n+\r\n+    /**\r\n+     * Maximum connections service provider can accept, default value is 0 - connection is shared\r\n+     */\r\n+    int connections() default 0;\r\n+\r\n+    /**\r\n+     * The callback instance limit peer connection\r\n+     * <p>\r\n+     * see org.apache.dubbo.rpc.Constants#DEFAULT_CALLBACK_INSTANCES\r\n+     */\r\n+    int callbacks() default 0;\r\n+\r\n+    /**\r\n+     * Callback method name when connected, default value is empty string\r\n+     */\r\n+    String onconnect() default \"\";\r\n+\r\n+    /**\r\n+     * Callback method name when disconnected, default value is empty string\r\n+     */\r\n+    String ondisconnect() default \"\";\r\n+\r\n+    /**\r\n+     * Service owner, default value is empty string\r\n+     */\r\n+    String owner() default \"\";\r\n+\r\n+    /**\r\n+     * Service layer, default value is empty string\r\n+     */\r\n+    String layer() default \"\";\r\n+\r\n+    /**\r\n+     * Service invocation retry times\r\n+     * <p>\r\n+     * see Constants#DEFAULT_RETRIES\r\n+     */\r\n+    int retries() default 2;\r\n+\r\n+    /**\r\n+     * Load balance strategy, legal values include: random, roundrobin, leastactive\r\n+     * <p>\r\n+     * see Constants#DEFAULT_LOADBALANCE\r\n+     */\r\n+    String loadbalance() default \"\";\r\n+\r\n+    /**\r\n+     * Whether to enable async invocation, default value is false\r\n+     */\r\n+    boolean async() default false;\r\n+\r\n+    /**\r\n+     * Maximum active requests allowed, default value is 0\r\n+     */\r\n+    int actives() default 0;\r\n+\r\n+    /**\r\n+     * Whether the async request has already been sent, the default value is false\r\n+     */\r\n+    boolean sent() default false;\r\n+\r\n+    /**\r\n+     * Service mock name, use interface name + Mock if not set\r\n+     */\r\n+    String mock() default \"\";\r\n+\r\n+    /**\r\n+     * Whether to use JSR303 validation, legal values are: true, false\r\n+     */\r\n+    String validation() default \"\";\r\n+\r\n+    /**\r\n+     * Timeout value for service invocation, default value is 0\r\n+     */\r\n+    int timeout() default 0;\r\n+\r\n+    /**\r\n+     * Specify cache implementation for service invocation, legal values include: lru, threadlocal, jcache\r\n+     */\r\n+    String cache() default \"\";\r\n+\r\n+    /**\r\n+     * Filters for service invocation\r\n+     * <p>\r\n+     * see Filter\r\n+     */\r\n+    String[] filter() default {};\r\n+\r\n+    /**\r\n+     * Listeners for service exporting and unexporting\r\n+     * <p>\r\n+     * see ExporterListener\r\n+     */\r\n+    String[] listener() default {};\r\n+\r\n+    /**\r\n+     * Customized parameter key-value pair, for example: {key1, value1, key2, value2}\r\n+     */\r\n+    String[] parameters() default {};\r\n+\r\n+    /**\r\n+     * Application associated name\r\n+     */\r\n+    String application() default \"\";\r\n+\r\n+    /**\r\n+     * Module associated name\r\n+     */\r\n+    String module() default \"\";\r\n+\r\n+    /**\r\n+     * Consumer associated name\r\n+     */\r\n+    String consumer() default \"\";\r\n+\r\n+    /**\r\n+     * Monitor associated name\r\n+     */\r\n+    String monitor() default \"\";\r\n+\r\n+    /**\r\n+     * Registry associated name\r\n+     */\r\n+    String[] registry() default {};\r\n+\r\n+    /**\r\n+     * The communication protocol of Dubbo Service\r\n+     *\r\n+     * @return the default value is \"\"\r\n+     * @since 2.6.6\r\n+     */\r\n+    String protocol() default \"\";\r\n+\r\n+    /**\r\n+     * Service tag name\r\n+     */\r\n+    String tag() default \"\";\r\n+\r\n+    /**\r\n+     * methods support\r\n+     *\r\n+     * @return\r\n+     */\r\n+    Method[] methods() default {};\r\n+\r\n+    /**\r\n+     * The id\r\n+     *\r\n+     * @return default value is empty\r\n+     * @since 2.7.3\r\n+     */\r\n+    String id() default \"\";\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/annotation/Service.java", "source2": "org/apache/dubbo/config/annotation/Service.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,281 +1,281 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.config.annotation;\n-\n-\n-import java.lang.annotation.Documented;\n-import java.lang.annotation.ElementType;\n-import java.lang.annotation.Inherited;\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.RetentionPolicy;\n-import java.lang.annotation.Target;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_LOADBALANCE;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_RETRIES;\n-\n-/**\n- * Service annotation\n- *\n- * @see DubboService\n- * @since 2.7.0\n- * @deprecated Recommend {@link DubboService} as the substitute\n- */\n-@Documented\n-@Retention(RetentionPolicy.RUNTIME)\n-@Target({ElementType.TYPE})\n-@Inherited\n-@Deprecated\n-public @interface Service {\n-\n-    /**\n-     * Interface class, default value is void.class\n-     */\n-    Class<?> interfaceClass() default void.class;\n-\n-    /**\n-     * Interface class name, default value is empty string\n-     */\n-    String interfaceName() default \"\";\n-\n-    /**\n-     * Service version, default value is empty string\n-     */\n-    String version() default \"\";\n-\n-    /**\n-     * Service group, default value is empty string\n-     */\n-    String group() default \"\";\n-\n-    /**\n-     * Service path, default value is empty string\n-     */\n-    String path() default \"\";\n-\n-    /**\n-     * Whether to export service, default value is true\n-     */\n-    boolean export() default true;\n-\n-    /**\n-     * Service token, default value is false\n-     */\n-    String token() default \"\";\n-\n-    /**\n-     * Whether the service is deprecated, default value is false\n-     */\n-    boolean deprecated() default false;\n-\n-    /**\n-     * Whether the service is dynamic, default value is true\n-     */\n-    boolean dynamic() default true;\n-\n-    /**\n-     * Access log for the service, default value is \"\"\n-     */\n-    String accesslog() default \"\";\n-\n-    /**\n-     * Maximum concurrent executes for the service, default value is 0 - no limits\n-     */\n-    int executes() default 0;\n-\n-    /**\n-     * Whether to register the service to register center, default value is true\n-     */\n-    boolean register() default true;\n-\n-    /**\n-     * Service weight value, default value is 0\n-     */\n-    int weight() default 0;\n-\n-    /**\n-     * Service doc, default value is \"\"\n-     */\n-    String document() default \"\";\n-\n-    /**\n-     * Delay time for service registration, default value is 0\n-     */\n-    int delay() default 0;\n-\n-    /**\n-     * @see Service#stub()\n-     * @deprecated\n-     */\n-    String local() default \"\";\n-\n-    /**\n-     * Service stub name, use interface name + Local if not set\n-     */\n-    String stub() default \"\";\n-\n-    /**\n-     * Cluster strategy, legal values include: failover, failfast, failsafe, failback, forking\n-     */\n-    String cluster() default \"\";\n-\n-    /**\n-     * How the proxy is generated, legal values include: jdk, javassist\n-     */\n-    String proxy() default \"\";\n-\n-    /**\n-     * Maximum connections service provider can accept, default value is 0 - connection is shared\n-     */\n-    int connections() default 0;\n-\n-    /**\n-     * The callback instance limit peer connection\n-     * <p>\n-     * see org.apache.dubbo.rpc.Constants#DEFAULT_CALLBACK_INSTANCES\n-     */\n-    int callbacks() default org.apache.dubbo.common.constants.CommonConstants.DEFAULT_CALLBACK_INSTANCES;\n-\n-    /**\n-     * Callback method name when connected, default value is empty string\n-     */\n-    String onconnect() default \"\";\n-\n-    /**\n-     * Callback method name when disconnected, default value is empty string\n-     */\n-    String ondisconnect() default \"\";\n-\n-    /**\n-     * Service owner, default value is empty string\n-     */\n-    String owner() default \"\";\n-\n-    /**\n-     * Service layer, default value is empty string\n-     */\n-    String layer() default \"\";\n-\n-    /**\n-     * Service invocation retry times\n-     *\n-     * @see org.apache.dubbo.common.constants.CommonConstants#DEFAULT_RETRIES\n-     */\n-    int retries() default DEFAULT_RETRIES;\n-\n-    /**\n-     * Load balance strategy, legal values include: random, roundrobin, leastactive\n-     *\n-     * @see org.apache.dubbo.common.constants.CommonConstants#DEFAULT_LOADBALANCE\n-     */\n-    String loadbalance() default DEFAULT_LOADBALANCE;\n-\n-    /**\n-     * Whether to enable async invocation, default value is false\n-     */\n-    boolean async() default false;\n-\n-    /**\n-     * Maximum active requests allowed, default value is 0\n-     */\n-    int actives() default 0;\n-\n-    /**\n-     * Whether the async request has already been sent, the default value is false\n-     */\n-    boolean sent() default false;\n-\n-    /**\n-     * Service mock name, use interface name + Mock if not set\n-     */\n-    String mock() default \"\";\n-\n-    /**\n-     * Whether to use JSR303 validation, legal values are: true, false\n-     */\n-    String validation() default \"\";\n-\n-    /**\n-     * Timeout value for service invocation, default value is 0\n-     */\n-    int timeout() default 0;\n-\n-    /**\n-     * Specify cache implementation for service invocation, legal values include: lru, threadlocal, jcache\n-     */\n-    String cache() default \"\";\n-\n-    /**\n-     * Filters for service invocation\n-     *\n-     * @see Filter\n-     */\n-    String[] filter() default {};\n-\n-    /**\n-     * Listeners for service exporting and unexporting\n-     *\n-     * @see ExporterListener\n-     */\n-    String[] listener() default {};\n-\n-    /**\n-     * Customized parameter key-value pair, for example: {key1, value1, key2, value2}\n-     */\n-    String[] parameters() default {};\n-\n-    /**\n-     * Application spring bean name\n-     */\n-    String application() default \"\";\n-\n-    /**\n-     * Module spring bean name\n-     */\n-    String module() default \"\";\n-\n-    /**\n-     * Provider spring bean name\n-     */\n-    String provider() default \"\";\n-\n-    /**\n-     * Protocol spring bean names\n-     */\n-    String[] protocol() default {};\n-\n-    /**\n-     * Monitor spring bean name\n-     */\n-    String monitor() default \"\";\n-\n-    /**\n-     * Registry spring bean name\n-     */\n-    String[] registry() default {};\n-\n-    /**\n-     * Service tag name\n-     */\n-    String tag() default \"\";\n-\n-    /**\n-     * methods support\n-     *\n-     * @return\n-     */\n-    Method[] methods() default {};\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.config.annotation;\r\n+\r\n+\r\n+import java.lang.annotation.Documented;\r\n+import java.lang.annotation.ElementType;\r\n+import java.lang.annotation.Inherited;\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.RetentionPolicy;\r\n+import java.lang.annotation.Target;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_LOADBALANCE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_RETRIES;\r\n+\r\n+/**\r\n+ * Service annotation\r\n+ *\r\n+ * @see DubboService\r\n+ * @since 2.7.0\r\n+ * @deprecated Recommend {@link DubboService} as the substitute\r\n+ */\r\n+@Documented\r\n+@Retention(RetentionPolicy.RUNTIME)\r\n+@Target({ElementType.TYPE})\r\n+@Inherited\r\n+@Deprecated\r\n+public @interface Service {\r\n+\r\n+    /**\r\n+     * Interface class, default value is void.class\r\n+     */\r\n+    Class<?> interfaceClass() default void.class;\r\n+\r\n+    /**\r\n+     * Interface class name, default value is empty string\r\n+     */\r\n+    String interfaceName() default \"\";\r\n+\r\n+    /**\r\n+     * Service version, default value is empty string\r\n+     */\r\n+    String version() default \"\";\r\n+\r\n+    /**\r\n+     * Service group, default value is empty string\r\n+     */\r\n+    String group() default \"\";\r\n+\r\n+    /**\r\n+     * Service path, default value is empty string\r\n+     */\r\n+    String path() default \"\";\r\n+\r\n+    /**\r\n+     * Whether to export service, default value is true\r\n+     */\r\n+    boolean export() default true;\r\n+\r\n+    /**\r\n+     * Service token, default value is false\r\n+     */\r\n+    String token() default \"\";\r\n+\r\n+    /**\r\n+     * Whether the service is deprecated, default value is false\r\n+     */\r\n+    boolean deprecated() default false;\r\n+\r\n+    /**\r\n+     * Whether the service is dynamic, default value is true\r\n+     */\r\n+    boolean dynamic() default true;\r\n+\r\n+    /**\r\n+     * Access log for the service, default value is \"\"\r\n+     */\r\n+    String accesslog() default \"\";\r\n+\r\n+    /**\r\n+     * Maximum concurrent executes for the service, default value is 0 - no limits\r\n+     */\r\n+    int executes() default 0;\r\n+\r\n+    /**\r\n+     * Whether to register the service to register center, default value is true\r\n+     */\r\n+    boolean register() default true;\r\n+\r\n+    /**\r\n+     * Service weight value, default value is 0\r\n+     */\r\n+    int weight() default 0;\r\n+\r\n+    /**\r\n+     * Service doc, default value is \"\"\r\n+     */\r\n+    String document() default \"\";\r\n+\r\n+    /**\r\n+     * Delay time for service registration, default value is 0\r\n+     */\r\n+    int delay() default 0;\r\n+\r\n+    /**\r\n+     * @see Service#stub()\r\n+     * @deprecated\r\n+     */\r\n+    String local() default \"\";\r\n+\r\n+    /**\r\n+     * Service stub name, use interface name + Local if not set\r\n+     */\r\n+    String stub() default \"\";\r\n+\r\n+    /**\r\n+     * Cluster strategy, legal values include: failover, failfast, failsafe, failback, forking\r\n+     */\r\n+    String cluster() default \"\";\r\n+\r\n+    /**\r\n+     * How the proxy is generated, legal values include: jdk, javassist\r\n+     */\r\n+    String proxy() default \"\";\r\n+\r\n+    /**\r\n+     * Maximum connections service provider can accept, default value is 0 - connection is shared\r\n+     */\r\n+    int connections() default 0;\r\n+\r\n+    /**\r\n+     * The callback instance limit peer connection\r\n+     * <p>\r\n+     * see org.apache.dubbo.rpc.Constants#DEFAULT_CALLBACK_INSTANCES\r\n+     */\r\n+    int callbacks() default org.apache.dubbo.common.constants.CommonConstants.DEFAULT_CALLBACK_INSTANCES;\r\n+\r\n+    /**\r\n+     * Callback method name when connected, default value is empty string\r\n+     */\r\n+    String onconnect() default \"\";\r\n+\r\n+    /**\r\n+     * Callback method name when disconnected, default value is empty string\r\n+     */\r\n+    String ondisconnect() default \"\";\r\n+\r\n+    /**\r\n+     * Service owner, default value is empty string\r\n+     */\r\n+    String owner() default \"\";\r\n+\r\n+    /**\r\n+     * Service layer, default value is empty string\r\n+     */\r\n+    String layer() default \"\";\r\n+\r\n+    /**\r\n+     * Service invocation retry times\r\n+     *\r\n+     * @see org.apache.dubbo.common.constants.CommonConstants#DEFAULT_RETRIES\r\n+     */\r\n+    int retries() default DEFAULT_RETRIES;\r\n+\r\n+    /**\r\n+     * Load balance strategy, legal values include: random, roundrobin, leastactive\r\n+     *\r\n+     * @see org.apache.dubbo.common.constants.CommonConstants#DEFAULT_LOADBALANCE\r\n+     */\r\n+    String loadbalance() default DEFAULT_LOADBALANCE;\r\n+\r\n+    /**\r\n+     * Whether to enable async invocation, default value is false\r\n+     */\r\n+    boolean async() default false;\r\n+\r\n+    /**\r\n+     * Maximum active requests allowed, default value is 0\r\n+     */\r\n+    int actives() default 0;\r\n+\r\n+    /**\r\n+     * Whether the async request has already been sent, the default value is false\r\n+     */\r\n+    boolean sent() default false;\r\n+\r\n+    /**\r\n+     * Service mock name, use interface name + Mock if not set\r\n+     */\r\n+    String mock() default \"\";\r\n+\r\n+    /**\r\n+     * Whether to use JSR303 validation, legal values are: true, false\r\n+     */\r\n+    String validation() default \"\";\r\n+\r\n+    /**\r\n+     * Timeout value for service invocation, default value is 0\r\n+     */\r\n+    int timeout() default 0;\r\n+\r\n+    /**\r\n+     * Specify cache implementation for service invocation, legal values include: lru, threadlocal, jcache\r\n+     */\r\n+    String cache() default \"\";\r\n+\r\n+    /**\r\n+     * Filters for service invocation\r\n+     *\r\n+     * @see Filter\r\n+     */\r\n+    String[] filter() default {};\r\n+\r\n+    /**\r\n+     * Listeners for service exporting and unexporting\r\n+     *\r\n+     * @see ExporterListener\r\n+     */\r\n+    String[] listener() default {};\r\n+\r\n+    /**\r\n+     * Customized parameter key-value pair, for example: {key1, value1, key2, value2}\r\n+     */\r\n+    String[] parameters() default {};\r\n+\r\n+    /**\r\n+     * Application spring bean name\r\n+     */\r\n+    String application() default \"\";\r\n+\r\n+    /**\r\n+     * Module spring bean name\r\n+     */\r\n+    String module() default \"\";\r\n+\r\n+    /**\r\n+     * Provider spring bean name\r\n+     */\r\n+    String provider() default \"\";\r\n+\r\n+    /**\r\n+     * Protocol spring bean names\r\n+     */\r\n+    String[] protocol() default {};\r\n+\r\n+    /**\r\n+     * Monitor spring bean name\r\n+     */\r\n+    String monitor() default \"\";\r\n+\r\n+    /**\r\n+     * Registry spring bean name\r\n+     */\r\n+    String[] registry() default {};\r\n+\r\n+    /**\r\n+     * Service tag name\r\n+     */\r\n+    String tag() default \"\";\r\n+\r\n+    /**\r\n+     * methods support\r\n+     *\r\n+     * @return\r\n+     */\r\n+    Method[] methods() default {};\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/context/ConfigConfigurationAdapter.java", "source2": "org/apache/dubbo/config/context/ConfigConfigurationAdapter.java", "comments": ["Line-ending 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.config.context;\n-\n-import org.apache.dubbo.common.config.Configuration;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.AbstractConfig;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-\n-/**\n- * This class receives an {@link AbstractConfig} and exposes its attributes through {@link Configuration}\n- */\n-public class ConfigConfigurationAdapter implements Configuration {\n-\n-    private Map<String, String> metaData;\n-\n-    public ConfigConfigurationAdapter(AbstractConfig config) {\n-        Map<String, String> configMetadata = config.getMetaData();\n-        metaData = new HashMap<>(configMetadata.size(), 1.0f);\n-        for (Map.Entry<String, String> entry : configMetadata.entrySet()) {\n-            String prefix = config.getPrefix().endsWith(\".\") ? config.getPrefix() : config.getPrefix() + \".\";\n-            String id = StringUtils.isEmpty(config.getId()) ? \"\" : config.getId() + \".\";\n-            metaData.put(prefix + id + entry.getKey(), entry.getValue());\n-        }\n-    }\n-\n-    @Override\n-    public Object getInternalProperty(String key) {\n-        return metaData.get(key);\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.config.context;\r\n+\r\n+import org.apache.dubbo.common.config.Configuration;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.AbstractConfig;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * This class receives an {@link AbstractConfig} and exposes its attributes through {@link Configuration}\r\n+ */\r\n+public class ConfigConfigurationAdapter implements Configuration {\r\n+\r\n+    private Map<String, String> metaData;\r\n+\r\n+    public ConfigConfigurationAdapter(AbstractConfig config) {\r\n+        Map<String, String> configMetadata = config.getMetaData();\r\n+        metaData = new HashMap<>(configMetadata.size(), 1.0f);\r\n+        for (Map.Entry<String, String> entry : configMetadata.entrySet()) {\r\n+            String prefix = config.getPrefix().endsWith(\".\") ? config.getPrefix() : config.getPrefix() + \".\";\r\n+            String id = StringUtils.isEmpty(config.getId()) ? \"\" : config.getId() + \".\";\r\n+            metaData.put(prefix + id + entry.getKey(), entry.getValue());\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getInternalProperty(String key) {\r\n+        return metaData.get(key);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/context/ConfigManager.java", "source2": "org/apache/dubbo/config/context/ConfigManager.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,531 +1,531 @@\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.config.context;\n-\n-import org.apache.dubbo.common.context.FrameworkExt;\n-import org.apache.dubbo.common.context.LifecycleAdapter;\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.config.AbstractConfig;\n-import org.apache.dubbo.config.ApplicationConfig;\n-import org.apache.dubbo.config.ConfigCenterConfig;\n-import org.apache.dubbo.config.ConsumerConfig;\n-import org.apache.dubbo.config.MetadataReportConfig;\n-import org.apache.dubbo.config.MetricsConfig;\n-import org.apache.dubbo.config.ModuleConfig;\n-import org.apache.dubbo.config.MonitorConfig;\n-import org.apache.dubbo.config.ProtocolConfig;\n-import org.apache.dubbo.config.ProviderConfig;\n-import org.apache.dubbo.config.ReferenceConfigBase;\n-import org.apache.dubbo.config.RegistryConfig;\n-import org.apache.dubbo.config.ServiceConfigBase;\n-import org.apache.dubbo.config.SslConfig;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-\n-import java.util.Collection;\n-import java.util.HashMap;\n-import java.util.HashSet;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Optional;\n-import java.util.Set;\n-import java.util.concurrent.Callable;\n-import java.util.concurrent.locks.Lock;\n-import java.util.concurrent.locks.ReadWriteLock;\n-import java.util.concurrent.locks.ReentrantReadWriteLock;\n-import java.util.stream.Collectors;\n-\n-import static java.lang.Boolean.TRUE;\n-import static java.util.Collections.emptyMap;\n-import static java.util.Collections.unmodifiableSet;\n-import static java.util.Optional.ofNullable;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;\n-import static org.apache.dubbo.common.utils.ReflectUtils.getProperty;\n-import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\n-import static org.apache.dubbo.config.AbstractConfig.getTagName;\n-import static org.apache.dubbo.config.Constants.PROTOCOLS_SUFFIX;\n-import static org.apache.dubbo.config.Constants.REGISTRIES_SUFFIX;\n-\n-public class ConfigManager extends LifecycleAdapter implements FrameworkExt {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(ConfigManager.class);\n-\n-    public static final String NAME = \"config\";\n-\n-    private final ReadWriteLock lock = new ReentrantReadWriteLock();\n-\n-    final Map<String, Map<String, AbstractConfig>> configsCache = newMap();\n-\n-    public ConfigManager() {\n-    }\n-\n-    // ApplicationConfig correlative methods\n-\n-    public void setApplication(ApplicationConfig application) {\n-        addConfig(application, true);\n-    }\n-\n-    public Optional<ApplicationConfig> getApplication() {\n-        return ofNullable(getConfig(getTagName(ApplicationConfig.class)));\n-    }\n-\n-    public ApplicationConfig getApplicationOrElseThrow() {\n-        return getApplication().orElseThrow(() -> new IllegalStateException(\"There's no ApplicationConfig specified.\"));\n-    }\n-\n-    // MonitorConfig correlative methods\n-\n-    public void setMonitor(MonitorConfig monitor) {\n-        addConfig(monitor, true);\n-    }\n-\n-    public Optional<MonitorConfig> getMonitor() {\n-        return ofNullable(getConfig(getTagName(MonitorConfig.class)));\n-    }\n-\n-    // ModuleConfig correlative methods\n-\n-    public void setModule(ModuleConfig module) {\n-        addConfig(module, true);\n-    }\n-\n-    public Optional<ModuleConfig> getModule() {\n-        return ofNullable(getConfig(getTagName(ModuleConfig.class)));\n-    }\n-\n-    public void setMetrics(MetricsConfig metrics) {\n-        addConfig(metrics, true);\n-    }\n-\n-    public Optional<MetricsConfig> getMetrics() {\n-        return ofNullable(getConfig(getTagName(MetricsConfig.class)));\n-    }\n-\n-    public void setSsl(SslConfig sslConfig) {\n-        addConfig(sslConfig, true);\n-    }\n-\n-    public Optional<SslConfig> getSsl() {\n-        return ofNullable(getConfig(getTagName(SslConfig.class)));\n-    }\n-\n-    // ConfigCenterConfig correlative methods\n-\n-    public void addConfigCenter(ConfigCenterConfig configCenter) {\n-        addConfig(configCenter);\n-    }\n-\n-    public void addConfigCenters(Iterable<ConfigCenterConfig> configCenters) {\n-        configCenters.forEach(this::addConfigCenter);\n-    }\n-\n-    public Optional<Collection<ConfigCenterConfig>> getDefaultConfigCenter() {\n-        Collection<ConfigCenterConfig> defaults = getDefaultConfigs(getConfigsMap(getTagName(ConfigCenterConfig.class)));\n-        if (CollectionUtils.isEmpty(defaults)) {\n-            defaults = getConfigCenters();\n-        }\n-        return Optional.ofNullable(defaults);\n-    }\n-\n-    public ConfigCenterConfig getConfigCenter(String id) {\n-        return getConfig(getTagName(ConfigCenterConfig.class), id);\n-    }\n-\n-    public Collection<ConfigCenterConfig> getConfigCenters() {\n-        return getConfigs(getTagName(ConfigCenterConfig.class));\n-    }\n-\n-    // MetadataReportConfig correlative methods\n-\n-    public void addMetadataReport(MetadataReportConfig metadataReportConfig) {\n-        addConfig(metadataReportConfig);\n-    }\n-\n-    public void addMetadataReports(Iterable<MetadataReportConfig> metadataReportConfigs) {\n-        metadataReportConfigs.forEach(this::addMetadataReport);\n-    }\n-\n-    public Collection<MetadataReportConfig> getMetadataConfigs() {\n-        return getConfigs(getTagName(MetadataReportConfig.class));\n-    }\n-\n-    public Collection<MetadataReportConfig> getDefaultMetadataConfigs() {\n-        Collection<MetadataReportConfig> defaults = getDefaultConfigs(getConfigsMap(getTagName(MetadataReportConfig.class)));\n-        if (CollectionUtils.isEmpty(defaults)) {\n-            return getMetadataConfigs();\n-        }\n-        return defaults;\n-    }\n-\n-    // MetadataReportConfig correlative methods\n-\n-    public void addProvider(ProviderConfig providerConfig) {\n-        addConfig(providerConfig);\n-    }\n-\n-    public void addProviders(Iterable<ProviderConfig> providerConfigs) {\n-        providerConfigs.forEach(this::addProvider);\n-    }\n-\n-    public Optional<ProviderConfig> getProvider(String id) {\n-        return ofNullable(getConfig(getTagName(ProviderConfig.class), id));\n-    }\n-\n-    /**\n-     * Only allows one default ProviderConfig\n-     */\n-    public Optional<ProviderConfig> getDefaultProvider() {\n-        List<ProviderConfig> providerConfigs = getDefaultConfigs(getConfigsMap(getTagName(ProviderConfig.class)));\n-        if (CollectionUtils.isNotEmpty(providerConfigs)) {\n-            return Optional.of(providerConfigs.get(0));\n-        }\n-        return Optional.empty();\n-    }\n-\n-    public Collection<ProviderConfig> getProviders() {\n-        return getConfigs(getTagName(ProviderConfig.class));\n-    }\n-\n-    // ConsumerConfig correlative methods\n-\n-    public void addConsumer(ConsumerConfig consumerConfig) {\n-        addConfig(consumerConfig);\n-    }\n-\n-    public void addConsumers(Iterable<ConsumerConfig> consumerConfigs) {\n-        consumerConfigs.forEach(this::addConsumer);\n-    }\n-\n-    public Optional<ConsumerConfig> getConsumer(String id) {\n-        return ofNullable(getConfig(getTagName(ConsumerConfig.class), id));\n-    }\n-\n-    /**\n-     * Only allows one default ConsumerConfig\n-     */\n-    public Optional<ConsumerConfig> getDefaultConsumer() {\n-        List<ConsumerConfig> consumerConfigs = getDefaultConfigs(getConfigsMap(getTagName(ConsumerConfig.class)));\n-        if (CollectionUtils.isNotEmpty(consumerConfigs)) {\n-            return Optional.of(consumerConfigs.get(0));\n-        }\n-        return Optional.empty();\n-    }\n-\n-    public Collection<ConsumerConfig> getConsumers() {\n-        return getConfigs(getTagName(ConsumerConfig.class));\n-    }\n-\n-    // ProtocolConfig correlative methods\n-\n-    public void addProtocol(ProtocolConfig protocolConfig) {\n-        addConfig(protocolConfig);\n-    }\n-\n-    public void addProtocols(Iterable<ProtocolConfig> protocolConfigs) {\n-        if (protocolConfigs != null) {\n-            protocolConfigs.forEach(this::addProtocol);\n-        }\n-    }\n-\n-    public Optional<ProtocolConfig> getProtocol(String id) {\n-        return ofNullable(getConfig(getTagName(ProtocolConfig.class), id));\n-    }\n-\n-    public List<ProtocolConfig> getDefaultProtocols() {\n-        return getDefaultConfigs(getConfigsMap(getTagName(ProtocolConfig.class)));\n-    }\n-\n-    public Collection<ProtocolConfig> getProtocols() {\n-        return getConfigs(getTagName(ProtocolConfig.class));\n-    }\n-\n-    public Set<String> getProtocolIds() {\n-        Set<String> protocolIds = new HashSet<>();\n-        protocolIds.addAll(getSubProperties(ApplicationModel.getEnvironment()\n-                .getExternalConfigurationMap(), PROTOCOLS_SUFFIX));\n-        protocolIds.addAll(getSubProperties(ApplicationModel.getEnvironment()\n-                .getAppExternalConfigurationMap(), PROTOCOLS_SUFFIX));\n-\n-        return unmodifiableSet(protocolIds);\n-    }\n-\n-\n-    // RegistryConfig correlative methods\n-\n-    public void addRegistry(RegistryConfig registryConfig) {\n-        addConfig(registryConfig);\n-    }\n-\n-    public void addRegistries(Iterable<RegistryConfig> registryConfigs) {\n-        if (registryConfigs != null) {\n-            registryConfigs.forEach(this::addRegistry);\n-        }\n-    }\n-\n-    public Optional<RegistryConfig> getRegistry(String id) {\n-        return ofNullable(getConfig(getTagName(RegistryConfig.class), id));\n-    }\n-\n-    public List<RegistryConfig> getDefaultRegistries() {\n-        return getDefaultConfigs(getConfigsMap(getTagName(RegistryConfig.class)));\n-    }\n-\n-    public Collection<RegistryConfig> getRegistries() {\n-        return getConfigs(getTagName(RegistryConfig.class));\n-    }\n-\n-    public Set<String> getRegistryIds() {\n-        Set<String> registryIds = new HashSet<>();\n-        registryIds.addAll(getSubProperties(ApplicationModel.getEnvironment().getExternalConfigurationMap(),\n-                REGISTRIES_SUFFIX));\n-        registryIds.addAll(getSubProperties(ApplicationModel.getEnvironment().getAppExternalConfigurationMap(),\n-                REGISTRIES_SUFFIX));\n-\n-        return unmodifiableSet(registryIds);\n-    }\n-\n-    // ServiceConfig correlative methods\n-\n-    public void addService(ServiceConfigBase<?> serviceConfig) {\n-        addConfig(serviceConfig);\n-    }\n-\n-    public void addServices(Iterable<ServiceConfigBase<?>> serviceConfigs) {\n-        serviceConfigs.forEach(this::addService);\n-    }\n-\n-    public Collection<ServiceConfigBase> getServices() {\n-        return getConfigs(getTagName(ServiceConfigBase.class));\n-    }\n-\n-    public <T> ServiceConfigBase<T> getService(String id) {\n-        return getConfig(getTagName(ServiceConfigBase.class), id);\n-    }\n-\n-    // ReferenceConfig correlative methods\n-\n-    public void addReference(ReferenceConfigBase<?> referenceConfig) {\n-        addConfig(referenceConfig);\n-    }\n-\n-    public void addReferences(Iterable<ReferenceConfigBase<?>> referenceConfigs) {\n-        referenceConfigs.forEach(this::addReference);\n-    }\n-\n-    public Collection<ReferenceConfigBase<?>> getReferences() {\n-        return getConfigs(getTagName(ReferenceConfigBase.class));\n-    }\n-\n-    public <T> ReferenceConfigBase<T> getReference(String id) {\n-        return getConfig(getTagName(ReferenceConfigBase.class), id);\n-    }\n-\n-    protected static Set<String> getSubProperties(Map<String, String> properties, String prefix) {\n-        return properties.keySet().stream().filter(k -> k.contains(prefix)).map(k -> {\n-            k = k.substring(prefix.length());\n-            return k.substring(0, k.indexOf(\".\"));\n-        }).collect(Collectors.toSet());\n-    }\n-\n-    public void refreshAll() {\n-        write(() -> {\n-            // refresh all configs here,\n-            getApplication().ifPresent(ApplicationConfig::refresh);\n-            getMonitor().ifPresent(MonitorConfig::refresh);\n-            getModule().ifPresent(ModuleConfig::refresh);\n-\n-            getProtocols().forEach(ProtocolConfig::refresh);\n-            getRegistries().forEach(RegistryConfig::refresh);\n-            getProviders().forEach(ProviderConfig::refresh);\n-            getConsumers().forEach(ConsumerConfig::refresh);\n-        });\n-\n-    }\n-\n-    /**\n-     * In some scenario,  we may nee to add and remove ServiceConfig or ReferenceConfig dynamically.\n-     *\n-     * @param config the config instance to remove.\n-     */\n-    public void removeConfig(AbstractConfig config) {\n-        if (config == null) {\n-            return;\n-        }\n-\n-        Map<String, AbstractConfig> configs = configsCache.get(getTagName(config.getClass()));\n-        if (CollectionUtils.isNotEmptyMap(configs)) {\n-            configs.remove(getId(config));\n-        }\n-    }\n-\n-    public void clear() {\n-        write(this.configsCache::clear);\n-    }\n-\n-    /**\n-     * @throws IllegalStateException\n-     * @since 2.7.8\n-     */\n-    @Override\n-    public void destroy() throws IllegalStateException {\n-        clear();\n-    }\n-\n-    /**\n-     * Add the dubbo {@link AbstractConfig config}\n-     *\n-     * @param config the dubbo {@link AbstractConfig config}\n-     */\n-    public void addConfig(AbstractConfig config) {\n-        addConfig(config, false);\n-    }\n-\n-    protected void addConfig(AbstractConfig config, boolean unique) {\n-        if (config == null) {\n-            return;\n-        }\n-        write(() -> {\n-            Map<String, AbstractConfig> configsMap = configsCache.computeIfAbsent(getTagName(config.getClass()), type -> newMap());\n-            addIfAbsent(config, configsMap, unique);\n-        });\n-    }\n-\n-    protected <C extends AbstractConfig> Map<String, C> getConfigsMap(String configType) {\n-        return (Map<String, C>) read(() -> configsCache.getOrDefault(configType, emptyMap()));\n-    }\n-\n-    protected <C extends AbstractConfig> Collection<C> getConfigs(String configType) {\n-        return (Collection<C>) read(() -> getConfigsMap(configType).values());\n-    }\n-\n-    protected <C extends AbstractConfig> C getConfig(String configType, String id) {\n-        return read(() -> {\n-            Map<String, C> configsMap = (Map) configsCache.getOrDefault(configType, emptyMap());\n-            return configsMap.get(id);\n-        });\n-    }\n-\n-    protected <C extends AbstractConfig> C getConfig(String configType) throws IllegalStateException {\n-        return read(() -> {\n-            Map<String, C> configsMap = (Map) configsCache.getOrDefault(configType, emptyMap());\n-            int size = configsMap.size();\n-            if (size < 1) {\n-//                throw new IllegalStateException(\"No such \" + configType.getName() + \" is found\");\n-                return null;\n-            } else if (size > 1) {\n-                logger.warn(\"Expected single matching of \" + configType + \", but found \" + size + \" instances, will randomly pick the first one.\");\n-            }\n-\n-            return configsMap.values().iterator().next();\n-        });\n-    }\n-\n-    private <V> V write(Callable<V> callable) {\n-        V value = null;\n-        Lock writeLock = lock.writeLock();\n-        try {\n-            writeLock.lock();\n-            value = callable.call();\n-        } catch (RuntimeException e) {\n-            throw e;\n-        } catch (Throwable e) {\n-            throw new RuntimeException(e.getCause());\n-        } finally {\n-            writeLock.unlock();\n-        }\n-        return value;\n-    }\n-\n-    private void write(Runnable runnable) {\n-        write(() -> {\n-            runnable.run();\n-            return null;\n-        });\n-    }\n-\n-    private <V> V read(Callable<V> callable) {\n-        Lock readLock = lock.readLock();\n-        V value = null;\n-        try {\n-            readLock.lock();\n-            value = callable.call();\n-        } catch (Throwable e) {\n-            throw new RuntimeException(e);\n-        } finally {\n-            readLock.unlock();\n-        }\n-        return value;\n-    }\n-\n-    private static void checkDuplicate(AbstractConfig oldOne, AbstractConfig newOne) throws IllegalStateException {\n-        if (oldOne != null && !oldOne.equals(newOne)) {\n-            String configName = oldOne.getClass().getSimpleName();\n-            logger.warn(\"Duplicate Config found for \" + configName + \", you should use only one unique \" + configName + \" for one application.\");\n-        }\n-    }\n-\n-    private static Map newMap() {\n-        return new HashMap<>();\n-    }\n-\n-    static <C extends AbstractConfig> void addIfAbsent(C config, Map<String, C> configsMap, boolean unique)\n-            throws IllegalStateException {\n-\n-        if (config == null || configsMap == null) {\n-            return;\n-        }\n-\n-        if (unique) { // check duplicate\n-            configsMap.values().forEach(c -> {\n-                checkDuplicate(c, config);\n-            });\n-        }\n-\n-        String key = getId(config);\n-\n-        C existedConfig = configsMap.get(key);\n-\n-        if (existedConfig != null && !config.equals(existedConfig)) {\n-            if (logger.isWarnEnabled()) {\n-                String type = config.getClass().getSimpleName();\n-                logger.warn(String.format(\"Duplicate %s found, there already has one default %s or more than two %ss have the same id, \" +\n-                        \"you can try to give each %s a different id : %s\", type, type, type, type, config));\n-            }\n-        } else {\n-            configsMap.put(key, config);\n-        }\n-    }\n-\n-    static <C extends AbstractConfig> String getId(C config) {\n-        String id = config.getId();\n-        return isNotEmpty(id) ? id : isDefaultConfig(config) ?\n-                config.getClass().getSimpleName() + \"#\" + DEFAULT_KEY : null;\n-    }\n-\n-    static <C extends AbstractConfig> boolean isDefaultConfig(C config) {\n-        Boolean isDefault = getProperty(config, \"isDefault\");\n-        return isDefault == null || TRUE.equals(isDefault);\n-    }\n-\n-    static <C extends AbstractConfig> List<C> getDefaultConfigs(Map<String, C> configsMap) {\n-        return configsMap.values()\n-                .stream()\n-                .filter(ConfigManager::isDefaultConfig)\n-                .collect(Collectors.toList());\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.config.context;\r\n+\r\n+import org.apache.dubbo.common.context.FrameworkExt;\r\n+import org.apache.dubbo.common.context.LifecycleAdapter;\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.config.AbstractConfig;\r\n+import org.apache.dubbo.config.ApplicationConfig;\r\n+import org.apache.dubbo.config.ConfigCenterConfig;\r\n+import org.apache.dubbo.config.ConsumerConfig;\r\n+import org.apache.dubbo.config.MetadataReportConfig;\r\n+import org.apache.dubbo.config.MetricsConfig;\r\n+import org.apache.dubbo.config.ModuleConfig;\r\n+import org.apache.dubbo.config.MonitorConfig;\r\n+import org.apache.dubbo.config.ProtocolConfig;\r\n+import org.apache.dubbo.config.ProviderConfig;\r\n+import org.apache.dubbo.config.ReferenceConfigBase;\r\n+import org.apache.dubbo.config.RegistryConfig;\r\n+import org.apache.dubbo.config.ServiceConfigBase;\r\n+import org.apache.dubbo.config.SslConfig;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+\r\n+import java.util.Collection;\r\n+import java.util.HashMap;\r\n+import java.util.HashSet;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Optional;\r\n+import java.util.Set;\r\n+import java.util.concurrent.Callable;\r\n+import java.util.concurrent.locks.Lock;\r\n+import java.util.concurrent.locks.ReadWriteLock;\r\n+import java.util.concurrent.locks.ReentrantReadWriteLock;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.lang.Boolean.TRUE;\r\n+import static java.util.Collections.emptyMap;\r\n+import static java.util.Collections.unmodifiableSet;\r\n+import static java.util.Optional.ofNullable;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;\r\n+import static org.apache.dubbo.common.utils.ReflectUtils.getProperty;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;\r\n+import static org.apache.dubbo.config.AbstractConfig.getTagName;\r\n+import static org.apache.dubbo.config.Constants.PROTOCOLS_SUFFIX;\r\n+import static org.apache.dubbo.config.Constants.REGISTRIES_SUFFIX;\r\n+\r\n+public class ConfigManager extends LifecycleAdapter implements FrameworkExt {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(ConfigManager.class);\r\n+\r\n+    public static final String NAME = \"config\";\r\n+\r\n+    private final ReadWriteLock lock = new ReentrantReadWriteLock();\r\n+\r\n+    final Map<String, Map<String, AbstractConfig>> configsCache = newMap();\r\n+\r\n+    public ConfigManager() {\r\n+    }\r\n+\r\n+    // ApplicationConfig correlative methods\r\n+\r\n+    public void setApplication(ApplicationConfig application) {\r\n+        addConfig(application, true);\r\n+    }\r\n+\r\n+    public Optional<ApplicationConfig> getApplication() {\r\n+        return ofNullable(getConfig(getTagName(ApplicationConfig.class)));\r\n+    }\r\n+\r\n+    public ApplicationConfig getApplicationOrElseThrow() {\r\n+        return getApplication().orElseThrow(() -> new IllegalStateException(\"There's no ApplicationConfig specified.\"));\r\n+    }\r\n+\r\n+    // MonitorConfig correlative methods\r\n+\r\n+    public void setMonitor(MonitorConfig monitor) {\r\n+        addConfig(monitor, true);\r\n+    }\r\n+\r\n+    public Optional<MonitorConfig> getMonitor() {\r\n+        return ofNullable(getConfig(getTagName(MonitorConfig.class)));\r\n+    }\r\n+\r\n+    // ModuleConfig correlative methods\r\n+\r\n+    public void setModule(ModuleConfig module) {\r\n+        addConfig(module, true);\r\n+    }\r\n+\r\n+    public Optional<ModuleConfig> getModule() {\r\n+        return ofNullable(getConfig(getTagName(ModuleConfig.class)));\r\n+    }\r\n+\r\n+    public void setMetrics(MetricsConfig metrics) {\r\n+        addConfig(metrics, true);\r\n+    }\r\n+\r\n+    public Optional<MetricsConfig> getMetrics() {\r\n+        return ofNullable(getConfig(getTagName(MetricsConfig.class)));\r\n+    }\r\n+\r\n+    public void setSsl(SslConfig sslConfig) {\r\n+        addConfig(sslConfig, true);\r\n+    }\r\n+\r\n+    public Optional<SslConfig> getSsl() {\r\n+        return ofNullable(getConfig(getTagName(SslConfig.class)));\r\n+    }\r\n+\r\n+    // ConfigCenterConfig correlative methods\r\n+\r\n+    public void addConfigCenter(ConfigCenterConfig configCenter) {\r\n+        addConfig(configCenter);\r\n+    }\r\n+\r\n+    public void addConfigCenters(Iterable<ConfigCenterConfig> configCenters) {\r\n+        configCenters.forEach(this::addConfigCenter);\r\n+    }\r\n+\r\n+    public Optional<Collection<ConfigCenterConfig>> getDefaultConfigCenter() {\r\n+        Collection<ConfigCenterConfig> defaults = getDefaultConfigs(getConfigsMap(getTagName(ConfigCenterConfig.class)));\r\n+        if (CollectionUtils.isEmpty(defaults)) {\r\n+            defaults = getConfigCenters();\r\n+        }\r\n+        return Optional.ofNullable(defaults);\r\n+    }\r\n+\r\n+    public ConfigCenterConfig getConfigCenter(String id) {\r\n+        return getConfig(getTagName(ConfigCenterConfig.class), id);\r\n+    }\r\n+\r\n+    public Collection<ConfigCenterConfig> getConfigCenters() {\r\n+        return getConfigs(getTagName(ConfigCenterConfig.class));\r\n+    }\r\n+\r\n+    // MetadataReportConfig correlative methods\r\n+\r\n+    public void addMetadataReport(MetadataReportConfig metadataReportConfig) {\r\n+        addConfig(metadataReportConfig);\r\n+    }\r\n+\r\n+    public void addMetadataReports(Iterable<MetadataReportConfig> metadataReportConfigs) {\r\n+        metadataReportConfigs.forEach(this::addMetadataReport);\r\n+    }\r\n+\r\n+    public Collection<MetadataReportConfig> getMetadataConfigs() {\r\n+        return getConfigs(getTagName(MetadataReportConfig.class));\r\n+    }\r\n+\r\n+    public Collection<MetadataReportConfig> getDefaultMetadataConfigs() {\r\n+        Collection<MetadataReportConfig> defaults = getDefaultConfigs(getConfigsMap(getTagName(MetadataReportConfig.class)));\r\n+        if (CollectionUtils.isEmpty(defaults)) {\r\n+            return getMetadataConfigs();\r\n+        }\r\n+        return defaults;\r\n+    }\r\n+\r\n+    // MetadataReportConfig correlative methods\r\n+\r\n+    public void addProvider(ProviderConfig providerConfig) {\r\n+        addConfig(providerConfig);\r\n+    }\r\n+\r\n+    public void addProviders(Iterable<ProviderConfig> providerConfigs) {\r\n+        providerConfigs.forEach(this::addProvider);\r\n+    }\r\n+\r\n+    public Optional<ProviderConfig> getProvider(String id) {\r\n+        return ofNullable(getConfig(getTagName(ProviderConfig.class), id));\r\n+    }\r\n+\r\n+    /**\r\n+     * Only allows one default ProviderConfig\r\n+     */\r\n+    public Optional<ProviderConfig> getDefaultProvider() {\r\n+        List<ProviderConfig> providerConfigs = getDefaultConfigs(getConfigsMap(getTagName(ProviderConfig.class)));\r\n+        if (CollectionUtils.isNotEmpty(providerConfigs)) {\r\n+            return Optional.of(providerConfigs.get(0));\r\n+        }\r\n+        return Optional.empty();\r\n+    }\r\n+\r\n+    public Collection<ProviderConfig> getProviders() {\r\n+        return getConfigs(getTagName(ProviderConfig.class));\r\n+    }\r\n+\r\n+    // ConsumerConfig correlative methods\r\n+\r\n+    public void addConsumer(ConsumerConfig consumerConfig) {\r\n+        addConfig(consumerConfig);\r\n+    }\r\n+\r\n+    public void addConsumers(Iterable<ConsumerConfig> consumerConfigs) {\r\n+        consumerConfigs.forEach(this::addConsumer);\r\n+    }\r\n+\r\n+    public Optional<ConsumerConfig> getConsumer(String id) {\r\n+        return ofNullable(getConfig(getTagName(ConsumerConfig.class), id));\r\n+    }\r\n+\r\n+    /**\r\n+     * Only allows one default ConsumerConfig\r\n+     */\r\n+    public Optional<ConsumerConfig> getDefaultConsumer() {\r\n+        List<ConsumerConfig> consumerConfigs = getDefaultConfigs(getConfigsMap(getTagName(ConsumerConfig.class)));\r\n+        if (CollectionUtils.isNotEmpty(consumerConfigs)) {\r\n+            return Optional.of(consumerConfigs.get(0));\r\n+        }\r\n+        return Optional.empty();\r\n+    }\r\n+\r\n+    public Collection<ConsumerConfig> getConsumers() {\r\n+        return getConfigs(getTagName(ConsumerConfig.class));\r\n+    }\r\n+\r\n+    // ProtocolConfig correlative methods\r\n+\r\n+    public void addProtocol(ProtocolConfig protocolConfig) {\r\n+        addConfig(protocolConfig);\r\n+    }\r\n+\r\n+    public void addProtocols(Iterable<ProtocolConfig> protocolConfigs) {\r\n+        if (protocolConfigs != null) {\r\n+            protocolConfigs.forEach(this::addProtocol);\r\n+        }\r\n+    }\r\n+\r\n+    public Optional<ProtocolConfig> getProtocol(String id) {\r\n+        return ofNullable(getConfig(getTagName(ProtocolConfig.class), id));\r\n+    }\r\n+\r\n+    public List<ProtocolConfig> getDefaultProtocols() {\r\n+        return getDefaultConfigs(getConfigsMap(getTagName(ProtocolConfig.class)));\r\n+    }\r\n+\r\n+    public Collection<ProtocolConfig> getProtocols() {\r\n+        return getConfigs(getTagName(ProtocolConfig.class));\r\n+    }\r\n+\r\n+    public Set<String> getProtocolIds() {\r\n+        Set<String> protocolIds = new HashSet<>();\r\n+        protocolIds.addAll(getSubProperties(ApplicationModel.getEnvironment()\r\n+                .getExternalConfigurationMap(), PROTOCOLS_SUFFIX));\r\n+        protocolIds.addAll(getSubProperties(ApplicationModel.getEnvironment()\r\n+                .getAppExternalConfigurationMap(), PROTOCOLS_SUFFIX));\r\n+\r\n+        return unmodifiableSet(protocolIds);\r\n+    }\r\n+\r\n+\r\n+    // RegistryConfig correlative methods\r\n+\r\n+    public void addRegistry(RegistryConfig registryConfig) {\r\n+        addConfig(registryConfig);\r\n+    }\r\n+\r\n+    public void addRegistries(Iterable<RegistryConfig> registryConfigs) {\r\n+        if (registryConfigs != null) {\r\n+            registryConfigs.forEach(this::addRegistry);\r\n+        }\r\n+    }\r\n+\r\n+    public Optional<RegistryConfig> getRegistry(String id) {\r\n+        return ofNullable(getConfig(getTagName(RegistryConfig.class), id));\r\n+    }\r\n+\r\n+    public List<RegistryConfig> getDefaultRegistries() {\r\n+        return getDefaultConfigs(getConfigsMap(getTagName(RegistryConfig.class)));\r\n+    }\r\n+\r\n+    public Collection<RegistryConfig> getRegistries() {\r\n+        return getConfigs(getTagName(RegistryConfig.class));\r\n+    }\r\n+\r\n+    public Set<String> getRegistryIds() {\r\n+        Set<String> registryIds = new HashSet<>();\r\n+        registryIds.addAll(getSubProperties(ApplicationModel.getEnvironment().getExternalConfigurationMap(),\r\n+                REGISTRIES_SUFFIX));\r\n+        registryIds.addAll(getSubProperties(ApplicationModel.getEnvironment().getAppExternalConfigurationMap(),\r\n+                REGISTRIES_SUFFIX));\r\n+\r\n+        return unmodifiableSet(registryIds);\r\n+    }\r\n+\r\n+    // ServiceConfig correlative methods\r\n+\r\n+    public void addService(ServiceConfigBase<?> serviceConfig) {\r\n+        addConfig(serviceConfig);\r\n+    }\r\n+\r\n+    public void addServices(Iterable<ServiceConfigBase<?>> serviceConfigs) {\r\n+        serviceConfigs.forEach(this::addService);\r\n+    }\r\n+\r\n+    public Collection<ServiceConfigBase> getServices() {\r\n+        return getConfigs(getTagName(ServiceConfigBase.class));\r\n+    }\r\n+\r\n+    public <T> ServiceConfigBase<T> getService(String id) {\r\n+        return getConfig(getTagName(ServiceConfigBase.class), id);\r\n+    }\r\n+\r\n+    // ReferenceConfig correlative methods\r\n+\r\n+    public void addReference(ReferenceConfigBase<?> referenceConfig) {\r\n+        addConfig(referenceConfig);\r\n+    }\r\n+\r\n+    public void addReferences(Iterable<ReferenceConfigBase<?>> referenceConfigs) {\r\n+        referenceConfigs.forEach(this::addReference);\r\n+    }\r\n+\r\n+    public Collection<ReferenceConfigBase<?>> getReferences() {\r\n+        return getConfigs(getTagName(ReferenceConfigBase.class));\r\n+    }\r\n+\r\n+    public <T> ReferenceConfigBase<T> getReference(String id) {\r\n+        return getConfig(getTagName(ReferenceConfigBase.class), id);\r\n+    }\r\n+\r\n+    protected static Set<String> getSubProperties(Map<String, String> properties, String prefix) {\r\n+        return properties.keySet().stream().filter(k -> k.contains(prefix)).map(k -> {\r\n+            k = k.substring(prefix.length());\r\n+            return k.substring(0, k.indexOf(\".\"));\r\n+        }).collect(Collectors.toSet());\r\n+    }\r\n+\r\n+    public void refreshAll() {\r\n+        write(() -> {\r\n+            // refresh all configs here,\r\n+            getApplication().ifPresent(ApplicationConfig::refresh);\r\n+            getMonitor().ifPresent(MonitorConfig::refresh);\r\n+            getModule().ifPresent(ModuleConfig::refresh);\r\n+\r\n+            getProtocols().forEach(ProtocolConfig::refresh);\r\n+            getRegistries().forEach(RegistryConfig::refresh);\r\n+            getProviders().forEach(ProviderConfig::refresh);\r\n+            getConsumers().forEach(ConsumerConfig::refresh);\r\n+        });\r\n+\r\n+    }\r\n+\r\n+    /**\r\n+     * In some scenario,  we may nee to add and remove ServiceConfig or ReferenceConfig dynamically.\r\n+     *\r\n+     * @param config the config instance to remove.\r\n+     */\r\n+    public void removeConfig(AbstractConfig config) {\r\n+        if (config == null) {\r\n+            return;\r\n+        }\r\n+\r\n+        Map<String, AbstractConfig> configs = configsCache.get(getTagName(config.getClass()));\r\n+        if (CollectionUtils.isNotEmptyMap(configs)) {\r\n+            configs.remove(getId(config));\r\n+        }\r\n+    }\r\n+\r\n+    public void clear() {\r\n+        write(this.configsCache::clear);\r\n+    }\r\n+\r\n+    /**\r\n+     * @throws IllegalStateException\r\n+     * @since 2.7.8\r\n+     */\r\n+    @Override\r\n+    public void destroy() throws IllegalStateException {\r\n+        clear();\r\n+    }\r\n+\r\n+    /**\r\n+     * Add the dubbo {@link AbstractConfig config}\r\n+     *\r\n+     * @param config the dubbo {@link AbstractConfig config}\r\n+     */\r\n+    public void addConfig(AbstractConfig config) {\r\n+        addConfig(config, false);\r\n+    }\r\n+\r\n+    protected void addConfig(AbstractConfig config, boolean unique) {\r\n+        if (config == null) {\r\n+            return;\r\n+        }\r\n+        write(() -> {\r\n+            Map<String, AbstractConfig> configsMap = configsCache.computeIfAbsent(getTagName(config.getClass()), type -> newMap());\r\n+            addIfAbsent(config, configsMap, unique);\r\n+        });\r\n+    }\r\n+\r\n+    protected <C extends AbstractConfig> Map<String, C> getConfigsMap(String configType) {\r\n+        return (Map<String, C>) read(() -> configsCache.getOrDefault(configType, emptyMap()));\r\n+    }\r\n+\r\n+    protected <C extends AbstractConfig> Collection<C> getConfigs(String configType) {\r\n+        return (Collection<C>) read(() -> getConfigsMap(configType).values());\r\n+    }\r\n+\r\n+    protected <C extends AbstractConfig> C getConfig(String configType, String id) {\r\n+        return read(() -> {\r\n+            Map<String, C> configsMap = (Map) configsCache.getOrDefault(configType, emptyMap());\r\n+            return configsMap.get(id);\r\n+        });\r\n+    }\r\n+\r\n+    protected <C extends AbstractConfig> C getConfig(String configType) throws IllegalStateException {\r\n+        return read(() -> {\r\n+            Map<String, C> configsMap = (Map) configsCache.getOrDefault(configType, emptyMap());\r\n+            int size = configsMap.size();\r\n+            if (size < 1) {\r\n+//                throw new IllegalStateException(\"No such \" + configType.getName() + \" is found\");\r\n+                return null;\r\n+            } else if (size > 1) {\r\n+                logger.warn(\"Expected single matching of \" + configType + \", but found \" + size + \" instances, will randomly pick the first one.\");\r\n+            }\r\n+\r\n+            return configsMap.values().iterator().next();\r\n+        });\r\n+    }\r\n+\r\n+    private <V> V write(Callable<V> callable) {\r\n+        V value = null;\r\n+        Lock writeLock = lock.writeLock();\r\n+        try {\r\n+            writeLock.lock();\r\n+            value = callable.call();\r\n+        } catch (RuntimeException e) {\r\n+            throw e;\r\n+        } catch (Throwable e) {\r\n+            throw new RuntimeException(e.getCause());\r\n+        } finally {\r\n+            writeLock.unlock();\r\n+        }\r\n+        return value;\r\n+    }\r\n+\r\n+    private void write(Runnable runnable) {\r\n+        write(() -> {\r\n+            runnable.run();\r\n+            return null;\r\n+        });\r\n+    }\r\n+\r\n+    private <V> V read(Callable<V> callable) {\r\n+        Lock readLock = lock.readLock();\r\n+        V value = null;\r\n+        try {\r\n+            readLock.lock();\r\n+            value = callable.call();\r\n+        } catch (Throwable e) {\r\n+            throw new RuntimeException(e);\r\n+        } finally {\r\n+            readLock.unlock();\r\n+        }\r\n+        return value;\r\n+    }\r\n+\r\n+    private static void checkDuplicate(AbstractConfig oldOne, AbstractConfig newOne) throws IllegalStateException {\r\n+        if (oldOne != null && !oldOne.equals(newOne)) {\r\n+            String configName = oldOne.getClass().getSimpleName();\r\n+            logger.warn(\"Duplicate Config found for \" + configName + \", you should use only one unique \" + configName + \" for one application.\");\r\n+        }\r\n+    }\r\n+\r\n+    private static Map newMap() {\r\n+        return new HashMap<>();\r\n+    }\r\n+\r\n+    static <C extends AbstractConfig> void addIfAbsent(C config, Map<String, C> configsMap, boolean unique)\r\n+            throws IllegalStateException {\r\n+\r\n+        if (config == null || configsMap == null) {\r\n+            return;\r\n+        }\r\n+\r\n+        if (unique) { // check duplicate\r\n+            configsMap.values().forEach(c -> {\r\n+                checkDuplicate(c, config);\r\n+            });\r\n+        }\r\n+\r\n+        String key = getId(config);\r\n+\r\n+        C existedConfig = configsMap.get(key);\r\n+\r\n+        if (existedConfig != null && !config.equals(existedConfig)) {\r\n+            if (logger.isWarnEnabled()) {\r\n+                String type = config.getClass().getSimpleName();\r\n+                logger.warn(String.format(\"Duplicate %s found, there already has one default %s or more than two %ss have the same id, \" +\r\n+                        \"you can try to give each %s a different id : %s\", type, type, type, type, config));\r\n+            }\r\n+        } else {\r\n+            configsMap.put(key, config);\r\n+        }\r\n+    }\r\n+\r\n+    static <C extends AbstractConfig> String getId(C config) {\r\n+        String id = config.getId();\r\n+        return isNotEmpty(id) ? id : isDefaultConfig(config) ?\r\n+                config.getClass().getSimpleName() + \"#\" + DEFAULT_KEY : null;\r\n+    }\r\n+\r\n+    static <C extends AbstractConfig> boolean isDefaultConfig(C config) {\r\n+        Boolean isDefault = getProperty(config, \"isDefault\");\r\n+        return isDefault == null || TRUE.equals(isDefault);\r\n+    }\r\n+\r\n+    static <C extends AbstractConfig> List<C> getDefaultConfigs(Map<String, C> configsMap) {\r\n+        return configsMap.values()\r\n+                .stream()\r\n+                .filter(ConfigManager::isDefaultConfig)\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/config/support/Parameter.java", "source2": "org/apache/dubbo/config/support/Parameter.java", "comments": ["Line-ending 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.config.support;\n-\n-import java.lang.annotation.Documented;\n-import java.lang.annotation.ElementType;\n-import java.lang.annotation.Retention;\n-import java.lang.annotation.RetentionPolicy;\n-import java.lang.annotation.Target;\n-\n-/**\n- * Parameter\n- */\n-@Documented\n-@Retention(RetentionPolicy.RUNTIME)\n-@Target({ElementType.METHOD})\n-public @interface Parameter {\n-\n-    String key() default \"\";\n-\n-    boolean required() default false;\n-\n-    boolean excluded() default false;\n-\n-    boolean escaped() default false;\n-\n-    boolean attribute() default false;\n-\n-    boolean append() default false;\n-\n-    /**\n-     * if {@link #key()} is specified, it will be used as the key for the annotated property when generating url.\n-     * by default, this key will also be used to retrieve the config value:\n-     * <pre>\n-     * {@code\n-     *  class ExampleConfig {\n-     *      // Dubbo will try to get \"dubbo.example.alias_for_item=xxx\" from .properties, if you want to use the original property\n-     *      // \"dubbo.example.item=xxx\", you need to set useKeyAsProperty=false.\n-     *      @Parameter(key = \"alias_for_item\")\n-     *      public getItem();\n-     *  }\n-     * }\n-     *\n-     * </pre>\n-     */\n-    boolean useKeyAsProperty() default 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+package org.apache.dubbo.config.support;\r\n+\r\n+import java.lang.annotation.Documented;\r\n+import java.lang.annotation.ElementType;\r\n+import java.lang.annotation.Retention;\r\n+import java.lang.annotation.RetentionPolicy;\r\n+import java.lang.annotation.Target;\r\n+\r\n+/**\r\n+ * Parameter\r\n+ */\r\n+@Documented\r\n+@Retention(RetentionPolicy.RUNTIME)\r\n+@Target({ElementType.METHOD})\r\n+public @interface Parameter {\r\n+\r\n+    String key() default \"\";\r\n+\r\n+    boolean required() default false;\r\n+\r\n+    boolean excluded() default false;\r\n+\r\n+    boolean escaped() default false;\r\n+\r\n+    boolean attribute() default false;\r\n+\r\n+    boolean append() default false;\r\n+\r\n+    /**\r\n+     * if {@link #key()} is specified, it will be used as the key for the annotated property when generating url.\r\n+     * by default, this key will also be used to retrieve the config value:\r\n+     * <pre>\r\n+     * {@code\r\n+     *  class ExampleConfig {\r\n+     *      // Dubbo will try to get \"dubbo.example.alias_for_item=xxx\" from .properties, if you want to use the original property\r\n+     *      // \"dubbo.example.item=xxx\", you need to set useKeyAsProperty=false.\r\n+     *      @Parameter(key = \"alias_for_item\")\r\n+     *      public getItem();\r\n+     *  }\r\n+     * }\r\n+     *\r\n+     * </pre>\r\n+     */\r\n+    boolean useKeyAsProperty() default true;\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/event/AbstractEventDispatcher.java", "source2": "org/apache/dubbo/event/AbstractEventDispatcher.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,168 +1,168 @@\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.event;\n-\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-\n-import java.util.Collection;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.ServiceLoader;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-import java.util.concurrent.Executor;\n-import java.util.function.Consumer;\n-import java.util.function.Predicate;\n-import java.util.stream.Stream;\n-\n-import static java.util.Collections.sort;\n-import static java.util.Collections.unmodifiableList;\n-import static org.apache.dubbo.event.EventListener.findEventType;\n-\n-/**\n- * The abstract {@link EventDispatcher} providers the common implementation.\n- *\n- * @see EventDispatcher\n- * @see Listenable\n- * @see ServiceLoader\n- * @see EventListener\n- * @see Event\n- * @since 2.7.5\n- */\n-public abstract class AbstractEventDispatcher implements EventDispatcher {\n-\n-    private final Object mutex = new Object();\n-\n-    private final ConcurrentMap<Class<? extends Event>, List<EventListener>> listenersCache = new ConcurrentHashMap<>();\n-\n-    private final Executor executor;\n-\n-    /**\n-     * Constructor with an instance of {@link Executor}\n-     *\n-     * @param executor {@link Executor}\n-     * @throws NullPointerException <code>executor</code> is <code>null</code>\n-     */\n-    protected AbstractEventDispatcher(Executor executor) {\n-        if (executor == null) {\n-            throw new NullPointerException(\"executor must not be null\");\n-        }\n-        this.executor = executor;\n-        this.loadEventListenerInstances();\n-    }\n-\n-    @Override\n-    public void addEventListener(EventListener<?> listener) throws NullPointerException, IllegalArgumentException {\n-        Listenable.assertListener(listener);\n-        doInListener(listener, listeners -> {\n-            addIfAbsent(listeners, listener);\n-        });\n-    }\n-\n-    @Override\n-    public void removeEventListener(EventListener<?> listener) throws NullPointerException, IllegalArgumentException {\n-        Listenable.assertListener(listener);\n-        doInListener(listener, listeners -> listeners.remove(listener));\n-    }\n-\n-    @Override\n-    public List<EventListener<?>> getAllEventListeners() {\n-        List<EventListener<?>> listeners = new LinkedList<>();\n-\n-        sortedListeners().forEach(listener -> {\n-            addIfAbsent(listeners, listener);\n-        });\n-\n-        return unmodifiableList(listeners);\n-    }\n-\n-    protected Stream<EventListener> sortedListeners() {\n-        return sortedListeners(e -> true);\n-    }\n-\n-    protected Stream<EventListener> sortedListeners(Predicate<Map.Entry<Class<? extends Event>, List<EventListener>>> predicate) {\n-        return listenersCache\n-                .entrySet()\n-                .stream()\n-                .filter(predicate)\n-                .map(Map.Entry::getValue)\n-                .flatMap(Collection::stream)\n-                .sorted();\n-    }\n-\n-    private <E> void addIfAbsent(Collection<E> collection, E element) {\n-        if (!collection.contains(element)) {\n-            collection.add(element);\n-        }\n-    }\n-\n-    @Override\n-    public void dispatch(Event event) {\n-\n-        Executor executor = getExecutor();\n-\n-        // execute in sequential or parallel execution model\n-        executor.execute(() -> {\n-            sortedListeners(entry -> entry.getKey().isAssignableFrom(event.getClass()))\n-                    .forEach(listener -> {\n-                        if (listener instanceof ConditionalEventListener) {\n-                            ConditionalEventListener predicateEventListener = (ConditionalEventListener) listener;\n-                            if (!predicateEventListener.accept(event)) { // No accept\n-                                return;\n-                            }\n-                        }\n-                        // Handle the event\n-                        listener.onEvent(event);\n-                    });\n-        });\n-    }\n-\n-    /**\n-     * @return the non-null {@link Executor}\n-     */\n-    @Override\n-    public final Executor getExecutor() {\n-        return executor;\n-    }\n-\n-    protected void doInListener(EventListener<?> listener, Consumer<Collection<EventListener>> consumer) {\n-        Class<? extends Event> eventType = findEventType(listener);\n-        if (eventType != null) {\n-            synchronized (mutex) {\n-                List<EventListener> listeners = listenersCache.computeIfAbsent(eventType, e -> new LinkedList<>());\n-                // consume\n-                consumer.accept(listeners);\n-                // sort\n-                sort(listeners);\n-            }\n-        }\n-    }\n-\n-    /**\n-     * Default, load the instances of {@link EventListener event listeners} by {@link ServiceLoader}\n-     * <p>\n-     * It could be override by the sub-class\n-     *\n-     * @see EventListener\n-     * @see ServiceLoader#load(Class)\n-     */\n-    protected void loadEventListenerInstances() {\n-        ExtensionLoader<EventListener> loader = ExtensionLoader.getExtensionLoader(EventListener.class);\n-        loader.getSupportedExtensionInstances().forEach(this::addEventListener);\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.event;\r\n+\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+\r\n+import java.util.Collection;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.ServiceLoader;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+import java.util.concurrent.Executor;\r\n+import java.util.function.Consumer;\r\n+import java.util.function.Predicate;\r\n+import java.util.stream.Stream;\r\n+\r\n+import static java.util.Collections.sort;\r\n+import static java.util.Collections.unmodifiableList;\r\n+import static org.apache.dubbo.event.EventListener.findEventType;\r\n+\r\n+/**\r\n+ * The abstract {@link EventDispatcher} providers the common implementation.\r\n+ *\r\n+ * @see EventDispatcher\r\n+ * @see Listenable\r\n+ * @see ServiceLoader\r\n+ * @see EventListener\r\n+ * @see Event\r\n+ * @since 2.7.5\r\n+ */\r\n+public abstract class AbstractEventDispatcher implements EventDispatcher {\r\n+\r\n+    private final Object mutex = new Object();\r\n+\r\n+    private final ConcurrentMap<Class<? extends Event>, List<EventListener>> listenersCache = new ConcurrentHashMap<>();\r\n+\r\n+    private final Executor executor;\r\n+\r\n+    /**\r\n+     * Constructor with an instance of {@link Executor}\r\n+     *\r\n+     * @param executor {@link Executor}\r\n+     * @throws NullPointerException <code>executor</code> is <code>null</code>\r\n+     */\r\n+    protected AbstractEventDispatcher(Executor executor) {\r\n+        if (executor == null) {\r\n+            throw new NullPointerException(\"executor must not be null\");\r\n+        }\r\n+        this.executor = executor;\r\n+        this.loadEventListenerInstances();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void addEventListener(EventListener<?> listener) throws NullPointerException, IllegalArgumentException {\r\n+        Listenable.assertListener(listener);\r\n+        doInListener(listener, listeners -> {\r\n+            addIfAbsent(listeners, listener);\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public void removeEventListener(EventListener<?> listener) throws NullPointerException, IllegalArgumentException {\r\n+        Listenable.assertListener(listener);\r\n+        doInListener(listener, listeners -> listeners.remove(listener));\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<EventListener<?>> getAllEventListeners() {\r\n+        List<EventListener<?>> listeners = new LinkedList<>();\r\n+\r\n+        sortedListeners().forEach(listener -> {\r\n+            addIfAbsent(listeners, listener);\r\n+        });\r\n+\r\n+        return unmodifiableList(listeners);\r\n+    }\r\n+\r\n+    protected Stream<EventListener> sortedListeners() {\r\n+        return sortedListeners(e -> true);\r\n+    }\r\n+\r\n+    protected Stream<EventListener> sortedListeners(Predicate<Map.Entry<Class<? extends Event>, List<EventListener>>> predicate) {\r\n+        return listenersCache\r\n+                .entrySet()\r\n+                .stream()\r\n+                .filter(predicate)\r\n+                .map(Map.Entry::getValue)\r\n+                .flatMap(Collection::stream)\r\n+                .sorted();\r\n+    }\r\n+\r\n+    private <E> void addIfAbsent(Collection<E> collection, E element) {\r\n+        if (!collection.contains(element)) {\r\n+            collection.add(element);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void dispatch(Event event) {\r\n+\r\n+        Executor executor = getExecutor();\r\n+\r\n+        // execute in sequential or parallel execution model\r\n+        executor.execute(() -> {\r\n+            sortedListeners(entry -> entry.getKey().isAssignableFrom(event.getClass()))\r\n+                    .forEach(listener -> {\r\n+                        if (listener instanceof ConditionalEventListener) {\r\n+                            ConditionalEventListener predicateEventListener = (ConditionalEventListener) listener;\r\n+                            if (!predicateEventListener.accept(event)) { // No accept\r\n+                                return;\r\n+                            }\r\n+                        }\r\n+                        // Handle the event\r\n+                        listener.onEvent(event);\r\n+                    });\r\n+        });\r\n+    }\r\n+\r\n+    /**\r\n+     * @return the non-null {@link Executor}\r\n+     */\r\n+    @Override\r\n+    public final Executor getExecutor() {\r\n+        return executor;\r\n+    }\r\n+\r\n+    protected void doInListener(EventListener<?> listener, Consumer<Collection<EventListener>> consumer) {\r\n+        Class<? extends Event> eventType = findEventType(listener);\r\n+        if (eventType != null) {\r\n+            synchronized (mutex) {\r\n+                List<EventListener> listeners = listenersCache.computeIfAbsent(eventType, e -> new LinkedList<>());\r\n+                // consume\r\n+                consumer.accept(listeners);\r\n+                // sort\r\n+                sort(listeners);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Default, load the instances of {@link EventListener event listeners} by {@link ServiceLoader}\r\n+     * <p>\r\n+     * It could be override by the sub-class\r\n+     *\r\n+     * @see EventListener\r\n+     * @see ServiceLoader#load(Class)\r\n+     */\r\n+    protected void loadEventListenerInstances() {\r\n+        ExtensionLoader<EventListener> loader = ExtensionLoader.getExtensionLoader(EventListener.class);\r\n+        loader.getSupportedExtensionInstances().forEach(this::addEventListener);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/event/ConditionalEventListener.java", "source2": "org/apache/dubbo/event/ConditionalEventListener.java", "comments": ["Line-ending 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.event;\n-\n-/**\n- * An {@link EventListener} extending the the conditional feature that {@link #accept(Event) decides} some\n- * {@link Event event} is handled or not by current listener.\n- *\n- * @see EventListener\n- * @since 2.7.5\n- */\n-public interface ConditionalEventListener<E extends Event> extends EventListener<E> {\n-\n-    /**\n-     * Accept the event is handled or not by current listener\n-     *\n-     * @param event {@link Event event}\n-     * @return if handled, return <code>true</code>, or <code>false</code>\n-     */\n-    boolean accept(E 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.event;\r\n+\r\n+/**\r\n+ * An {@link EventListener} extending the the conditional feature that {@link #accept(Event) decides} some\r\n+ * {@link Event event} is handled or not by current listener.\r\n+ *\r\n+ * @see EventListener\r\n+ * @since 2.7.5\r\n+ */\r\n+public interface ConditionalEventListener<E extends Event> extends EventListener<E> {\r\n+\r\n+    /**\r\n+     * Accept the event is handled or not by current listener\r\n+     *\r\n+     * @param event {@link Event event}\r\n+     * @return if handled, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    boolean accept(E event);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/event/DirectEventDispatcher.java", "source2": "org/apache/dubbo/event/DirectEventDispatcher.java", "comments": ["Line-ending 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.event;\n-\n-/**\n- * Direct {@link EventDispatcher} implementation uses current thread execution model\n- *\n- * @see EventDispatcher\n- * @since 2.7.5\n- */\n-public final class DirectEventDispatcher extends AbstractEventDispatcher {\n-\n-    public DirectEventDispatcher() {\n-        super(DIRECT_EXECUTOR);\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.event;\r\n+\r\n+/**\r\n+ * Direct {@link EventDispatcher} implementation uses current thread execution model\r\n+ *\r\n+ * @see EventDispatcher\r\n+ * @since 2.7.5\r\n+ */\r\n+public final class DirectEventDispatcher extends AbstractEventDispatcher {\r\n+\r\n+    public DirectEventDispatcher() {\r\n+        super(DIRECT_EXECUTOR);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/event/Event.java", "source2": "org/apache/dubbo/event/Event.java", "comments": ["Line-ending 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.event;\n-\n-import java.util.EventObject;\n-\n-/**\n- * An event object of Dubbo is based on the Java standard {@link EventObject event}\n- *\n- * @since 2.7.5\n- */\n-public abstract class Event extends EventObject {\n-\n-    private static final long serialVersionUID = -1704315605423947137L;\n-\n-    /**\n-     * The timestamp of event occurs\n-     */\n-    private final long timestamp;\n-\n-    /**\n-     * Constructs a prototypical Event.\n-     *\n-     * @param source The object on which the Event initially occurred.\n-     * @throws IllegalArgumentException if source is null.\n-     */\n-    public Event(Object source) {\n-        super(source);\n-        this.timestamp = System.currentTimeMillis();\n-    }\n-\n-    public long getTimestamp() {\n-        return timestamp;\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.event;\r\n+\r\n+import java.util.EventObject;\r\n+\r\n+/**\r\n+ * An event object of Dubbo is based on the Java standard {@link EventObject event}\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+public abstract class Event extends EventObject {\r\n+\r\n+    private static final long serialVersionUID = -1704315605423947137L;\r\n+\r\n+    /**\r\n+     * The timestamp of event occurs\r\n+     */\r\n+    private final long timestamp;\r\n+\r\n+    /**\r\n+     * Constructs a prototypical Event.\r\n+     *\r\n+     * @param source The object on which the Event initially occurred.\r\n+     * @throws IllegalArgumentException if source is null.\r\n+     */\r\n+    public Event(Object source) {\r\n+        super(source);\r\n+        this.timestamp = System.currentTimeMillis();\r\n+    }\r\n+\r\n+    public long getTimestamp() {\r\n+        return timestamp;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/event/EventDispatcher.java", "source2": "org/apache/dubbo/event/EventDispatcher.java", "comments": ["Line-ending 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.event;\n-\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import java.util.concurrent.Executor;\n-\n-/**\n- * {@link Event Dubbo Event} Dispatcher\n- *\n- * @see Event\n- * @see EventListener\n- * @see DirectEventDispatcher\n- * @since 2.7.5\n- */\n-@SPI(\"direct\")\n-public interface EventDispatcher extends Listenable<EventListener<?>> {\n-\n-    /**\n-     * Direct {@link Executor} uses sequential execution model\n-     */\n-    Executor DIRECT_EXECUTOR = Runnable::run;\n-\n-    /**\n-     * Dispatch a Dubbo event to the registered {@link EventListener Dubbo event listeners}\n-     *\n-     * @param event a {@link Event Dubbo event}\n-     */\n-    void dispatch(Event event);\n-\n-    /**\n-     * The {@link Executor} to dispatch a {@link Event Dubbo event}\n-     *\n-     * @return default implementation directly invoke {@link Runnable#run()} method, rather than multiple-threaded\n-     * {@link Executor}. If the return value is <code>null</code>, the behavior is same as default.\n-     * @see #DIRECT_EXECUTOR\n-     */\n-    default Executor getExecutor() {\n-        return DIRECT_EXECUTOR;\n-    }\n-\n-    /**\n-     * The default extension of {@link EventDispatcher} is loaded by {@link ExtensionLoader}\n-     *\n-     * @return the default extension of {@link EventDispatcher}\n-     */\n-    static EventDispatcher getDefaultExtension() {\n-        return ExtensionLoader.getExtensionLoader(EventDispatcher.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.event;\r\n+\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+import java.util.concurrent.Executor;\r\n+\r\n+/**\r\n+ * {@link Event Dubbo Event} Dispatcher\r\n+ *\r\n+ * @see Event\r\n+ * @see EventListener\r\n+ * @see DirectEventDispatcher\r\n+ * @since 2.7.5\r\n+ */\r\n+@SPI(\"direct\")\r\n+public interface EventDispatcher extends Listenable<EventListener<?>> {\r\n+\r\n+    /**\r\n+     * Direct {@link Executor} uses sequential execution model\r\n+     */\r\n+    Executor DIRECT_EXECUTOR = Runnable::run;\r\n+\r\n+    /**\r\n+     * Dispatch a Dubbo event to the registered {@link EventListener Dubbo event listeners}\r\n+     *\r\n+     * @param event a {@link Event Dubbo event}\r\n+     */\r\n+    void dispatch(Event event);\r\n+\r\n+    /**\r\n+     * The {@link Executor} to dispatch a {@link Event Dubbo event}\r\n+     *\r\n+     * @return default implementation directly invoke {@link Runnable#run()} method, rather than multiple-threaded\r\n+     * {@link Executor}. If the return value is <code>null</code>, the behavior is same as default.\r\n+     * @see #DIRECT_EXECUTOR\r\n+     */\r\n+    default Executor getExecutor() {\r\n+        return DIRECT_EXECUTOR;\r\n+    }\r\n+\r\n+    /**\r\n+     * The default extension of {@link EventDispatcher} is loaded by {@link ExtensionLoader}\r\n+     *\r\n+     * @return the default extension of {@link EventDispatcher}\r\n+     */\r\n+    static EventDispatcher getDefaultExtension() {\r\n+        return ExtensionLoader.getExtensionLoader(EventDispatcher.class).getDefaultExtension();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/event/EventListener.java", "source2": "org/apache/dubbo/event/EventListener.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,119 +1,119 @@\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.event;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-\n-import java.lang.reflect.ParameterizedType;\n-import java.lang.reflect.Type;\n-import java.util.Objects;\n-\n-import static org.apache.dubbo.common.utils.ReflectUtils.findParameterizedTypes;\n-\n-/**\n- * The {@link Event Dubbo Event} Listener that is based on Java standard {@link java.util.EventListener} interface supports\n- * the generic {@link Event}.\n- * <p>\n- * The {@link #onEvent(Event) handle method} will be notified when the matched-type {@link Event Dubbo Event} is\n- * published, whose priority could be changed by {@link #getPriority()} method.\n- *\n- * @param <E> the concrete class of {@link Event Dubbo Event}\n- * @see Event \n- * @see java.util.EventListener\n- * @since 2.7.5\n- */\n-@SPI\n-@FunctionalInterface\n-public interface EventListener<E extends Event> extends java.util.EventListener, Prioritized {\n-\n-    /**\n-     * Handle a {@link Event Dubbo Event} when it's be published\n-     *\n-     * @param event a {@link Event Dubbo Event}\n-     */\n-    void onEvent(E event);\n-\n-    /**\n-     * The priority of {@link EventListener current listener}.\n-     *\n-     * @return the value is more greater, the priority is more lower.\n-     * {@link Integer#MIN_VALUE} indicates the highest priority. The default value is {@link Integer#MAX_VALUE}.\n-     * The comparison rule , refer to {@link #compareTo}.\n-     */\n-    default int getPriority() {\n-        return NORMAL_PRIORITY;\n-    }\n-\n-    /**\n-     * Find the {@link Class type} {@link Event Dubbo event} from the specified {@link EventListener Dubbo event listener}\n-     *\n-     * @param listener the {@link Class class} of {@link EventListener Dubbo event listener}\n-     * @return <code>null</code> if not found\n-     */\n-    static Class<? extends Event> findEventType(EventListener<?> listener) {\n-        return findEventType(listener.getClass());\n-    }\n-\n-    /**\n-     * Find the {@link Class type} {@link Event Dubbo event} from the specified {@link EventListener Dubbo event listener}\n-     *\n-     * @param listenerClass the {@link Class class} of {@link EventListener Dubbo event listener}\n-     * @return <code>null</code> if not found\n-     */\n-    static Class<? extends Event> findEventType(Class<?> listenerClass) {\n-        Class<? extends Event> eventType = null;\n-\n-        if (listenerClass != null && EventListener.class.isAssignableFrom(listenerClass)) {\n-            eventType = findParameterizedTypes(listenerClass)\n-                    .stream()\n-                    .map(EventListener::findEventType)\n-                    .filter(Objects::nonNull)\n-                    .findAny()\n-                    .orElse((Class) findEventType(listenerClass.getSuperclass()));\n-        }\n-\n-        return eventType;\n-    }\n-\n-    /**\n-     * Find the type {@link Event Dubbo event} from the specified {@link ParameterizedType} presents\n-     * a class of {@link EventListener Dubbo event listener}\n-     *\n-     * @param parameterizedType the {@link ParameterizedType} presents a class of {@link EventListener Dubbo event listener}\n-     * @return <code>null</code> if not found\n-     */\n-    static Class<? extends Event> findEventType(ParameterizedType parameterizedType) {\n-        Class<? extends Event> eventType = null;\n-\n-        Type rawType = parameterizedType.getRawType();\n-        if ((rawType instanceof Class) && EventListener.class.isAssignableFrom((Class) rawType)) {\n-            Type[] typeArguments = parameterizedType.getActualTypeArguments();\n-            for (Type typeArgument : typeArguments) {\n-                if (typeArgument instanceof Class) {\n-                    Class argumentClass = (Class) typeArgument;\n-                    if (Event.class.isAssignableFrom(argumentClass)) {\n-                        eventType = argumentClass;\n-                        break;\n-                    }\n-                }\n-            }\n-        }\n-\n-        return eventType;\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.event;\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 java.lang.reflect.ParameterizedType;\r\n+import java.lang.reflect.Type;\r\n+import java.util.Objects;\r\n+\r\n+import static org.apache.dubbo.common.utils.ReflectUtils.findParameterizedTypes;\r\n+\r\n+/**\r\n+ * The {@link Event Dubbo Event} Listener that is based on Java standard {@link java.util.EventListener} interface supports\r\n+ * the generic {@link Event}.\r\n+ * <p>\r\n+ * The {@link #onEvent(Event) handle method} will be notified when the matched-type {@link Event Dubbo Event} is\r\n+ * published, whose priority could be changed by {@link #getPriority()} method.\r\n+ *\r\n+ * @param <E> the concrete class of {@link Event Dubbo Event}\r\n+ * @see Event \r\n+ * @see java.util.EventListener\r\n+ * @since 2.7.5\r\n+ */\r\n+@SPI\r\n+@FunctionalInterface\r\n+public interface EventListener<E extends Event> extends java.util.EventListener, Prioritized {\r\n+\r\n+    /**\r\n+     * Handle a {@link Event Dubbo Event} when it's be published\r\n+     *\r\n+     * @param event a {@link Event Dubbo Event}\r\n+     */\r\n+    void onEvent(E event);\r\n+\r\n+    /**\r\n+     * The priority of {@link EventListener current listener}.\r\n+     *\r\n+     * @return the value is more greater, the priority is more lower.\r\n+     * {@link Integer#MIN_VALUE} indicates the highest priority. The default value is {@link Integer#MAX_VALUE}.\r\n+     * The comparison rule , refer to {@link #compareTo}.\r\n+     */\r\n+    default int getPriority() {\r\n+        return NORMAL_PRIORITY;\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the {@link Class type} {@link Event Dubbo event} from the specified {@link EventListener Dubbo event listener}\r\n+     *\r\n+     * @param listener the {@link Class class} of {@link EventListener Dubbo event listener}\r\n+     * @return <code>null</code> if not found\r\n+     */\r\n+    static Class<? extends Event> findEventType(EventListener<?> listener) {\r\n+        return findEventType(listener.getClass());\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the {@link Class type} {@link Event Dubbo event} from the specified {@link EventListener Dubbo event listener}\r\n+     *\r\n+     * @param listenerClass the {@link Class class} of {@link EventListener Dubbo event listener}\r\n+     * @return <code>null</code> if not found\r\n+     */\r\n+    static Class<? extends Event> findEventType(Class<?> listenerClass) {\r\n+        Class<? extends Event> eventType = null;\r\n+\r\n+        if (listenerClass != null && EventListener.class.isAssignableFrom(listenerClass)) {\r\n+            eventType = findParameterizedTypes(listenerClass)\r\n+                    .stream()\r\n+                    .map(EventListener::findEventType)\r\n+                    .filter(Objects::nonNull)\r\n+                    .findAny()\r\n+                    .orElse((Class) findEventType(listenerClass.getSuperclass()));\r\n+        }\r\n+\r\n+        return eventType;\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the type {@link Event Dubbo event} from the specified {@link ParameterizedType} presents\r\n+     * a class of {@link EventListener Dubbo event listener}\r\n+     *\r\n+     * @param parameterizedType the {@link ParameterizedType} presents a class of {@link EventListener Dubbo event listener}\r\n+     * @return <code>null</code> if not found\r\n+     */\r\n+    static Class<? extends Event> findEventType(ParameterizedType parameterizedType) {\r\n+        Class<? extends Event> eventType = null;\r\n+\r\n+        Type rawType = parameterizedType.getRawType();\r\n+        if ((rawType instanceof Class) && EventListener.class.isAssignableFrom((Class) rawType)) {\r\n+            Type[] typeArguments = parameterizedType.getActualTypeArguments();\r\n+            for (Type typeArgument : typeArguments) {\r\n+                if (typeArgument instanceof Class) {\r\n+                    Class argumentClass = (Class) typeArgument;\r\n+                    if (Event.class.isAssignableFrom(argumentClass)) {\r\n+                        eventType = argumentClass;\r\n+                        break;\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        return eventType;\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/event/GenericEvent.java", "source2": "org/apache/dubbo/event/GenericEvent.java", "comments": ["Line-ending 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.event;\n-\n-/**\n- * Generic {@link Event Dubbo event}\n- *\n- * @param <S> the type of event source\n- * @since 2.7.5\n- */\n-public class GenericEvent<S> extends Event {\n-\n-    public GenericEvent(S source) {\n-        super(source);\n-    }\n-\n-    public S getSource() {\n-        return (S) super.getSource();\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.event;\r\n+\r\n+/**\r\n+ * Generic {@link Event Dubbo event}\r\n+ *\r\n+ * @param <S> the type of event source\r\n+ * @since 2.7.5\r\n+ */\r\n+public class GenericEvent<S> extends Event {\r\n+\r\n+    public GenericEvent(S source) {\r\n+        super(source);\r\n+    }\r\n+\r\n+    public S getSource() {\r\n+        return (S) super.getSource();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/event/GenericEventListener.java", "source2": "org/apache/dubbo/event/GenericEventListener.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,130 +1,130 @@\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.event;\n-\n-import org.apache.dubbo.common.function.ThrowableConsumer;\n-\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Modifier;\n-import java.util.HashMap;\n-import java.util.LinkedHashSet;\n-import java.util.Map;\n-import java.util.Set;\n-\n-import static java.util.Collections.emptySet;\n-import static java.util.stream.Stream.of;\n-import static org.apache.dubbo.common.function.ThrowableFunction.execute;\n-\n-/**\n- * An abstract class of {@link EventListener} for Generic events, the sub class could add more {@link Event event}\n- * handle methods, rather than only binds the {@link EventListener#onEvent(Event)} method that is declared to be\n- * <code>final</code> the implementation can't override. It's notable that all {@link Event event} handle methods must\n- * meet following conditions:\n- * <ul>\n- * <li>not {@link #onEvent(Event)} method</li>\n- * <li><code>public</code> accessibility</li>\n- * <li><code>void</code> return type</li>\n- * <li>no {@link Exception exception} declaration</li>\n- * <li>only one {@link Event} type argument</li>\n- * </ul>\n- *\n- * @see Event\n- * @see EventListener\n- * @since 2.7.5\n- */\n-public abstract class GenericEventListener implements EventListener<Event> {\n-\n-    private final Method onEventMethod;\n-\n-    private final Map<Class<?>, Set<Method>> handleEventMethods;\n-\n-    protected GenericEventListener() {\n-        this.onEventMethod = findOnEventMethod();\n-        this.handleEventMethods = findHandleEventMethods();\n-    }\n-\n-    private Method findOnEventMethod() {\n-        return execute(getClass(), listenerClass -> listenerClass.getMethod(\"onEvent\", Event.class));\n-    }\n-\n-    private Map<Class<?>, Set<Method>> findHandleEventMethods() {\n-        // Event class for key, the eventMethods' Set as value\n-        Map<Class<?>, Set<Method>> eventMethods = new HashMap<>();\n-        of(getClass().getMethods())\n-                .filter(this::isHandleEventMethod)\n-                .forEach(method -> {\n-                    Class<?> paramType = method.getParameterTypes()[0];\n-                    Set<Method> methods = eventMethods.computeIfAbsent(paramType, key -> new LinkedHashSet<>());\n-                    methods.add(method);\n-                });\n-        return eventMethods;\n-    }\n-\n-    public final void onEvent(Event event) {\n-        Class<?> eventClass = event.getClass();\n-        handleEventMethods.getOrDefault(eventClass, emptySet()).forEach(method -> {\n-            ThrowableConsumer.execute(method, m -> {\n-                m.invoke(this, event);\n-            });\n-        });\n-    }\n-\n-    /**\n-     * The {@link Event event} handle methods must meet following conditions:\n-     * <ul>\n-     * <li>not {@link #onEvent(Event)} method</li>\n-     * <li><code>public</code> accessibility</li>\n-     * <li><code>void</code> return type</li>\n-     * <li>no {@link Exception exception} declaration</li>\n-     * <li>only one {@link Event} type argument</li>\n-     * </ul>\n-     *\n-     * @param method\n-     * @return\n-     */\n-    private boolean isHandleEventMethod(Method method) {\n-\n-        if (onEventMethod.equals(method)) { // not {@link #onEvent(Event)} method\n-            return false;\n-        }\n-\n-        if (!Modifier.isPublic(method.getModifiers())) { // not public\n-            return false;\n-        }\n-\n-        if (!void.class.equals(method.getReturnType())) { // void return type\n-            return false;\n-        }\n-\n-        Class[] exceptionTypes = method.getExceptionTypes();\n-\n-        if (exceptionTypes.length > 0) { // no exception declaration\n-            return false;\n-        }\n-\n-        Class[] paramTypes = method.getParameterTypes();\n-        if (paramTypes.length != 1) { // not only one argument\n-            return false;\n-        }\n-\n-        if (!Event.class.isAssignableFrom(paramTypes[0])) { // not Event type argument\n-            return false;\n-        }\n-\n-        return true;\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.event;\r\n+\r\n+import org.apache.dubbo.common.function.ThrowableConsumer;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Modifier;\r\n+import java.util.HashMap;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+\r\n+import static java.util.Collections.emptySet;\r\n+import static java.util.stream.Stream.of;\r\n+import static org.apache.dubbo.common.function.ThrowableFunction.execute;\r\n+\r\n+/**\r\n+ * An abstract class of {@link EventListener} for Generic events, the sub class could add more {@link Event event}\r\n+ * handle methods, rather than only binds the {@link EventListener#onEvent(Event)} method that is declared to be\r\n+ * <code>final</code> the implementation can't override. It's notable that all {@link Event event} handle methods must\r\n+ * meet following conditions:\r\n+ * <ul>\r\n+ * <li>not {@link #onEvent(Event)} method</li>\r\n+ * <li><code>public</code> accessibility</li>\r\n+ * <li><code>void</code> return type</li>\r\n+ * <li>no {@link Exception exception} declaration</li>\r\n+ * <li>only one {@link Event} type argument</li>\r\n+ * </ul>\r\n+ *\r\n+ * @see Event\r\n+ * @see EventListener\r\n+ * @since 2.7.5\r\n+ */\r\n+public abstract class GenericEventListener implements EventListener<Event> {\r\n+\r\n+    private final Method onEventMethod;\r\n+\r\n+    private final Map<Class<?>, Set<Method>> handleEventMethods;\r\n+\r\n+    protected GenericEventListener() {\r\n+        this.onEventMethod = findOnEventMethod();\r\n+        this.handleEventMethods = findHandleEventMethods();\r\n+    }\r\n+\r\n+    private Method findOnEventMethod() {\r\n+        return execute(getClass(), listenerClass -> listenerClass.getMethod(\"onEvent\", Event.class));\r\n+    }\r\n+\r\n+    private Map<Class<?>, Set<Method>> findHandleEventMethods() {\r\n+        // Event class for key, the eventMethods' Set as value\r\n+        Map<Class<?>, Set<Method>> eventMethods = new HashMap<>();\r\n+        of(getClass().getMethods())\r\n+                .filter(this::isHandleEventMethod)\r\n+                .forEach(method -> {\r\n+                    Class<?> paramType = method.getParameterTypes()[0];\r\n+                    Set<Method> methods = eventMethods.computeIfAbsent(paramType, key -> new LinkedHashSet<>());\r\n+                    methods.add(method);\r\n+                });\r\n+        return eventMethods;\r\n+    }\r\n+\r\n+    public final void onEvent(Event event) {\r\n+        Class<?> eventClass = event.getClass();\r\n+        handleEventMethods.getOrDefault(eventClass, emptySet()).forEach(method -> {\r\n+            ThrowableConsumer.execute(method, m -> {\r\n+                m.invoke(this, event);\r\n+            });\r\n+        });\r\n+    }\r\n+\r\n+    /**\r\n+     * The {@link Event event} handle methods must meet following conditions:\r\n+     * <ul>\r\n+     * <li>not {@link #onEvent(Event)} method</li>\r\n+     * <li><code>public</code> accessibility</li>\r\n+     * <li><code>void</code> return type</li>\r\n+     * <li>no {@link Exception exception} declaration</li>\r\n+     * <li>only one {@link Event} type argument</li>\r\n+     * </ul>\r\n+     *\r\n+     * @param method\r\n+     * @return\r\n+     */\r\n+    private boolean isHandleEventMethod(Method method) {\r\n+\r\n+        if (onEventMethod.equals(method)) { // not {@link #onEvent(Event)} method\r\n+            return false;\r\n+        }\r\n+\r\n+        if (!Modifier.isPublic(method.getModifiers())) { // not public\r\n+            return false;\r\n+        }\r\n+\r\n+        if (!void.class.equals(method.getReturnType())) { // void return type\r\n+            return false;\r\n+        }\r\n+\r\n+        Class[] exceptionTypes = method.getExceptionTypes();\r\n+\r\n+        if (exceptionTypes.length > 0) { // no exception declaration\r\n+            return false;\r\n+        }\r\n+\r\n+        Class[] paramTypes = method.getParameterTypes();\r\n+        if (paramTypes.length != 1) { // not only one argument\r\n+            return false;\r\n+        }\r\n+\r\n+        if (!Event.class.isAssignableFrom(paramTypes[0])) { // not Event type argument\r\n+            return false;\r\n+        }\r\n+\r\n+        return true;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/event/Listenable.java", "source2": "org/apache/dubbo/event/Listenable.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,131 +1,131 @@\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.event;\n-\n-import java.lang.reflect.Modifier;\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.List;\n-\n-import static java.util.stream.StreamSupport.stream;\n-\n-/**\n- * Dubbo Event Listenable\n- *\n- * @see EventDispatcher\n- * @since 2.7.5\n- */\n-public interface Listenable<E extends EventListener<?>> {\n-\n-    /**\n-     * Add a {@link EventListener Dubbo event listener}\n-     *\n-     * @param listener a {@link EventListener Dubbo event listener}\n-     *                 If current {@link EventListener} is existed, return <code>false</code>\n-     * @throws NullPointerException     if <code>listener</code> argument is <code>null</code>\n-     * @throws IllegalArgumentException if <code>listener</code> argument is not concrete instance\n-     */\n-    void addEventListener(E listener) throws NullPointerException, IllegalArgumentException;\n-\n-    /**\n-     * Add one or more {@link EventListener Dubbo event listeners}\n-     *\n-     * @param listener a {@link EventListener Dubbo event listener}\n-     * @param others   an optional {@link EventListener Dubbo event listeners}\n-     * @throws NullPointerException     if one of arguments is <code>null</code>\n-     * @throws IllegalArgumentException if one of arguments argument is not concrete instance\n-     */\n-    default void addEventListeners(E listener, E... others) throws NullPointerException,\n-            IllegalArgumentException {\n-        List<E> listeners = new ArrayList<>(1 + others.length);\n-        listeners.add(listener);\n-        listeners.addAll(Arrays.asList(others));\n-        addEventListeners(listeners);\n-    }\n-\n-    /**\n-     * Add multiple {@link EventListener Dubbo event listeners}\n-     *\n-     * @param listeners the {@link EventListener Dubbo event listeners}\n-     * @throws NullPointerException     if <code>listeners</code> argument is <code>null</code>\n-     * @throws IllegalArgumentException if any element of <code>listeners</code> is not concrete instance\n-     */\n-    default void addEventListeners(Iterable<E> listeners) throws NullPointerException, IllegalArgumentException {\n-        stream(listeners.spliterator(), false).forEach(this::addEventListener);\n-    }\n-\n-    /**\n-     * Remove a {@link EventListener Dubbo event listener}\n-     *\n-     * @param listener a {@link EventListener Dubbo event listener}\n-     * @return If remove successfully, return <code>true</code>.\n-     * If current {@link EventListener} is existed, return <code>false</code>\n-     * @throws NullPointerException if <code>listener</code> argument is <code>null</code>\n-     */\n-    void removeEventListener(E listener) throws NullPointerException, IllegalArgumentException;\n-\n-    /**\n-     * Remove a {@link EventListener Dubbo event listener}\n-     *\n-     * @param listeners the {@link EventListener Dubbo event listeners}\n-     * @return If remove successfully, return <code>true</code>.\n-     * If current {@link EventListener} is existed, return <code>false</code>\n-     * @throws NullPointerException     if <code>listener</code> argument is <code>null</code>\n-     * @throws IllegalArgumentException if any element of <code>listeners</code> is not concrete instance\n-     */\n-    default void removeEventListeners(Iterable<E> listeners) throws NullPointerException, IllegalArgumentException {\n-        stream(listeners.spliterator(), false).forEach(this::removeEventListener);\n-    }\n-\n-    /**\n-     * Remove all {@link EventListener Dubbo event listeners}\n-     *\n-     * @return a amount of removed listeners\n-     */\n-    default void removeAllEventListeners() {\n-        removeEventListeners(getAllEventListeners());\n-    }\n-\n-    /**\n-     * Get all registered {@link EventListener Dubbo event listeners}\n-     *\n-     * @return non-null read-only ordered {@link EventListener Dubbo event listeners}\n-     * @see EventListener#getPriority()\n-     */\n-    List<E> getAllEventListeners();\n-\n-\n-    /**\n-     * Assets the listener is valid or not\n-     *\n-     * @param listener the instance of {@link EventListener}\n-     * @throws NullPointerException\n-     */\n-    static void assertListener(EventListener<?> listener) throws NullPointerException {\n-        if (listener == null) {\n-            throw new NullPointerException(\"The listener must not be null.\");\n-        }\n-\n-        Class<?> listenerClass = listener.getClass();\n-\n-        int modifiers = listenerClass.getModifiers();\n-\n-        if (Modifier.isAbstract(modifiers) || Modifier.isInterface(modifiers)) {\n-            throw new IllegalArgumentException(\"The listener must be concrete class\");\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.event;\r\n+\r\n+import java.lang.reflect.Modifier;\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+import java.util.List;\r\n+\r\n+import static java.util.stream.StreamSupport.stream;\r\n+\r\n+/**\r\n+ * Dubbo Event Listenable\r\n+ *\r\n+ * @see EventDispatcher\r\n+ * @since 2.7.5\r\n+ */\r\n+public interface Listenable<E extends EventListener<?>> {\r\n+\r\n+    /**\r\n+     * Add a {@link EventListener Dubbo event listener}\r\n+     *\r\n+     * @param listener a {@link EventListener Dubbo event listener}\r\n+     *                 If current {@link EventListener} is existed, return <code>false</code>\r\n+     * @throws NullPointerException     if <code>listener</code> argument is <code>null</code>\r\n+     * @throws IllegalArgumentException if <code>listener</code> argument is not concrete instance\r\n+     */\r\n+    void addEventListener(E listener) throws NullPointerException, IllegalArgumentException;\r\n+\r\n+    /**\r\n+     * Add one or more {@link EventListener Dubbo event listeners}\r\n+     *\r\n+     * @param listener a {@link EventListener Dubbo event listener}\r\n+     * @param others   an optional {@link EventListener Dubbo event listeners}\r\n+     * @throws NullPointerException     if one of arguments is <code>null</code>\r\n+     * @throws IllegalArgumentException if one of arguments argument is not concrete instance\r\n+     */\r\n+    default void addEventListeners(E listener, E... others) throws NullPointerException,\r\n+            IllegalArgumentException {\r\n+        List<E> listeners = new ArrayList<>(1 + others.length);\r\n+        listeners.add(listener);\r\n+        listeners.addAll(Arrays.asList(others));\r\n+        addEventListeners(listeners);\r\n+    }\r\n+\r\n+    /**\r\n+     * Add multiple {@link EventListener Dubbo event listeners}\r\n+     *\r\n+     * @param listeners the {@link EventListener Dubbo event listeners}\r\n+     * @throws NullPointerException     if <code>listeners</code> argument is <code>null</code>\r\n+     * @throws IllegalArgumentException if any element of <code>listeners</code> is not concrete instance\r\n+     */\r\n+    default void addEventListeners(Iterable<E> listeners) throws NullPointerException, IllegalArgumentException {\r\n+        stream(listeners.spliterator(), false).forEach(this::addEventListener);\r\n+    }\r\n+\r\n+    /**\r\n+     * Remove a {@link EventListener Dubbo event listener}\r\n+     *\r\n+     * @param listener a {@link EventListener Dubbo event listener}\r\n+     * @return If remove successfully, return <code>true</code>.\r\n+     * If current {@link EventListener} is existed, return <code>false</code>\r\n+     * @throws NullPointerException if <code>listener</code> argument is <code>null</code>\r\n+     */\r\n+    void removeEventListener(E listener) throws NullPointerException, IllegalArgumentException;\r\n+\r\n+    /**\r\n+     * Remove a {@link EventListener Dubbo event listener}\r\n+     *\r\n+     * @param listeners the {@link EventListener Dubbo event listeners}\r\n+     * @return If remove successfully, return <code>true</code>.\r\n+     * If current {@link EventListener} is existed, return <code>false</code>\r\n+     * @throws NullPointerException     if <code>listener</code> argument is <code>null</code>\r\n+     * @throws IllegalArgumentException if any element of <code>listeners</code> is not concrete instance\r\n+     */\r\n+    default void removeEventListeners(Iterable<E> listeners) throws NullPointerException, IllegalArgumentException {\r\n+        stream(listeners.spliterator(), false).forEach(this::removeEventListener);\r\n+    }\r\n+\r\n+    /**\r\n+     * Remove all {@link EventListener Dubbo event listeners}\r\n+     *\r\n+     * @return a amount of removed listeners\r\n+     */\r\n+    default void removeAllEventListeners() {\r\n+        removeEventListeners(getAllEventListeners());\r\n+    }\r\n+\r\n+    /**\r\n+     * Get all registered {@link EventListener Dubbo event listeners}\r\n+     *\r\n+     * @return non-null read-only ordered {@link EventListener Dubbo event listeners}\r\n+     * @see EventListener#getPriority()\r\n+     */\r\n+    List<E> getAllEventListeners();\r\n+\r\n+\r\n+    /**\r\n+     * Assets the listener is valid or not\r\n+     *\r\n+     * @param listener the instance of {@link EventListener}\r\n+     * @throws NullPointerException\r\n+     */\r\n+    static void assertListener(EventListener<?> listener) throws NullPointerException {\r\n+        if (listener == null) {\r\n+            throw new NullPointerException(\"The listener must not be null.\");\r\n+        }\r\n+\r\n+        Class<?> listenerClass = listener.getClass();\r\n+\r\n+        int modifiers = listenerClass.getModifiers();\r\n+\r\n+        if (Modifier.isAbstract(modifiers) || Modifier.isInterface(modifiers)) {\r\n+            throw new IllegalArgumentException(\"The listener must be concrete class\");\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/event/ParallelEventDispatcher.java", "source2": "org/apache/dubbo/event/ParallelEventDispatcher.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,32 +1,32 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.event;\n-\n-import java.util.concurrent.ForkJoinPool;\n-\n-/**\n- * Parallel {@link EventDispatcher} implementation uses {@link ForkJoinPool#commonPool() JDK common thread pool}\n- *\n- * @see ForkJoinPool#commonPool()\n- * @since 2.7.5\n- */\n-public class ParallelEventDispatcher extends AbstractEventDispatcher {\n-\n-    public ParallelEventDispatcher() {\n-        super(ForkJoinPool.commonPool());\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.event;\r\n+\r\n+import java.util.concurrent.ForkJoinPool;\r\n+\r\n+/**\r\n+ * Parallel {@link EventDispatcher} implementation uses {@link ForkJoinPool#commonPool() JDK common thread pool}\r\n+ *\r\n+ * @see ForkJoinPool#commonPool()\r\n+ * @since 2.7.5\r\n+ */\r\n+public class ParallelEventDispatcher extends AbstractEventDispatcher {\r\n+\r\n+    public ParallelEventDispatcher() {\r\n+        super(ForkJoinPool.commonPool());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/model/ApplicationInitListener.java", "source2": "org/apache/dubbo/rpc/model/ApplicationInitListener.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,27 +1,27 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.model;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-@SPI\n-public interface ApplicationInitListener {\n-    /**\n-     * init the application\n-     */\n-    void init();\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.model;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+@SPI\r\n+public interface ApplicationInitListener {\r\n+    /**\r\n+     * init the application\r\n+     */\r\n+    void init();\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/model/ApplicationModel.java", "source2": "org/apache/dubbo/rpc/model/ApplicationModel.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,128 +1,128 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.model;\n-\n-import org.apache.dubbo.common.config.Environment;\n-import org.apache.dubbo.common.context.FrameworkExt;\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.config.ApplicationConfig;\n-import org.apache.dubbo.config.context.ConfigManager;\n-\n-import java.util.Collection;\n-import java.util.Set;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-\n-/**\n- * {@link ExtensionLoader}, {@code DubboBootstrap} and this class are at present designed to be\n- * singleton or static (by itself totally static or uses some static fields). So the instances\n- * returned from them are of process scope. If you want to support multiple dubbo servers in one\n- * single process, you may need to refactor those three classes.\n- *\n- * Represent a application which is using Dubbo and store basic metadata info for using\n- * during the processing of RPC invoking.\n- * <p>\n- * ApplicationModel includes many ProviderModel which is about published services\n- * and many Consumer Model which is about subscribed services.\n- * <p>\n- *\n- */\n-\n-public class ApplicationModel {\n-    protected static final Logger LOGGER = LoggerFactory.getLogger(ApplicationModel.class);\n-    public static final String NAME = \"application\";\n-\n-    private static AtomicBoolean INIT_FLAG = new AtomicBoolean(false);\n-\n-    public static void init() {\n-        if (INIT_FLAG.compareAndSet(false, true)) {\n-            ExtensionLoader<ApplicationInitListener> extensionLoader = ExtensionLoader.getExtensionLoader(ApplicationInitListener.class);\n-            Set<String> listenerNames = extensionLoader.getSupportedExtensions();\n-            for (String listenerName : listenerNames) {\n-                extensionLoader.getExtension(listenerName).init();\n-            }\n-        }\n-    }\n-\n-    public static Collection<ConsumerModel> allConsumerModels() {\n-        return getServiceRepository().getReferredServices();\n-    }\n-\n-    public static Collection<ProviderModel> allProviderModels() {\n-        return getServiceRepository().getExportedServices();\n-    }\n-\n-    public static ProviderModel getProviderModel(String serviceKey) {\n-        return getServiceRepository().lookupExportedService(serviceKey);\n-    }\n-\n-    public static ConsumerModel getConsumerModel(String serviceKey) {\n-        return getServiceRepository().lookupReferredService(serviceKey);\n-    }\n-\n-    private static final ExtensionLoader<FrameworkExt> LOADER = ExtensionLoader.getExtensionLoader(FrameworkExt.class);\n-\n-    public static void initFrameworkExts() {\n-        Set<FrameworkExt> exts = ExtensionLoader.getExtensionLoader(FrameworkExt.class).getSupportedExtensionInstances();\n-        for (FrameworkExt ext : exts) {\n-            ext.initialize();\n-        }\n-    }\n-\n-    public static Environment getEnvironment() {\n-        return (Environment) LOADER.getExtension(Environment.NAME);\n-    }\n-\n-    public static ConfigManager getConfigManager() {\n-        return (ConfigManager) LOADER.getExtension(ConfigManager.NAME);\n-    }\n-\n-    public static ServiceRepository getServiceRepository() {\n-        return (ServiceRepository) LOADER.getExtension(ServiceRepository.NAME);\n-    }\n-\n-    public static ApplicationConfig getApplicationConfig() {\n-        return getConfigManager().getApplicationOrElseThrow();\n-    }\n-\n-    public static String getName() {\n-        return getApplicationConfig().getName();\n-    }\n-\n-    @Deprecated\n-    private static String application;\n-\n-    @Deprecated\n-    public static String getApplication() {\n-        return application == null ? getName() : application;\n-    }\n-\n-    // Currently used by UT.\n-    @Deprecated\n-    public static void setApplication(String application) {\n-        ApplicationModel.application = application;\n-    }\n-\n-    // only for unit test\n-    public static void reset() {\n-        getServiceRepository().destroy();\n-        getConfigManager().destroy();\n-        getEnvironment().destroy();\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.model;\r\n+\r\n+import org.apache.dubbo.common.config.Environment;\r\n+import org.apache.dubbo.common.context.FrameworkExt;\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.config.ApplicationConfig;\r\n+import org.apache.dubbo.config.context.ConfigManager;\r\n+\r\n+import java.util.Collection;\r\n+import java.util.Set;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+\r\n+/**\r\n+ * {@link ExtensionLoader}, {@code DubboBootstrap} and this class are at present designed to be\r\n+ * singleton or static (by itself totally static or uses some static fields). So the instances\r\n+ * returned from them are of process scope. If you want to support multiple dubbo servers in one\r\n+ * single process, you may need to refactor those three classes.\r\n+ *\r\n+ * Represent a application which is using Dubbo and store basic metadata info for using\r\n+ * during the processing of RPC invoking.\r\n+ * <p>\r\n+ * ApplicationModel includes many ProviderModel which is about published services\r\n+ * and many Consumer Model which is about subscribed services.\r\n+ * <p>\r\n+ *\r\n+ */\r\n+\r\n+public class ApplicationModel {\r\n+    protected static final Logger LOGGER = LoggerFactory.getLogger(ApplicationModel.class);\r\n+    public static final String NAME = \"application\";\r\n+\r\n+    private static AtomicBoolean INIT_FLAG = new AtomicBoolean(false);\r\n+\r\n+    public static void init() {\r\n+        if (INIT_FLAG.compareAndSet(false, true)) {\r\n+            ExtensionLoader<ApplicationInitListener> extensionLoader = ExtensionLoader.getExtensionLoader(ApplicationInitListener.class);\r\n+            Set<String> listenerNames = extensionLoader.getSupportedExtensions();\r\n+            for (String listenerName : listenerNames) {\r\n+                extensionLoader.getExtension(listenerName).init();\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public static Collection<ConsumerModel> allConsumerModels() {\r\n+        return getServiceRepository().getReferredServices();\r\n+    }\r\n+\r\n+    public static Collection<ProviderModel> allProviderModels() {\r\n+        return getServiceRepository().getExportedServices();\r\n+    }\r\n+\r\n+    public static ProviderModel getProviderModel(String serviceKey) {\r\n+        return getServiceRepository().lookupExportedService(serviceKey);\r\n+    }\r\n+\r\n+    public static ConsumerModel getConsumerModel(String serviceKey) {\r\n+        return getServiceRepository().lookupReferredService(serviceKey);\r\n+    }\r\n+\r\n+    private static final ExtensionLoader<FrameworkExt> LOADER = ExtensionLoader.getExtensionLoader(FrameworkExt.class);\r\n+\r\n+    public static void initFrameworkExts() {\r\n+        Set<FrameworkExt> exts = ExtensionLoader.getExtensionLoader(FrameworkExt.class).getSupportedExtensionInstances();\r\n+        for (FrameworkExt ext : exts) {\r\n+            ext.initialize();\r\n+        }\r\n+    }\r\n+\r\n+    public static Environment getEnvironment() {\r\n+        return (Environment) LOADER.getExtension(Environment.NAME);\r\n+    }\r\n+\r\n+    public static ConfigManager getConfigManager() {\r\n+        return (ConfigManager) LOADER.getExtension(ConfigManager.NAME);\r\n+    }\r\n+\r\n+    public static ServiceRepository getServiceRepository() {\r\n+        return (ServiceRepository) LOADER.getExtension(ServiceRepository.NAME);\r\n+    }\r\n+\r\n+    public static ApplicationConfig getApplicationConfig() {\r\n+        return getConfigManager().getApplicationOrElseThrow();\r\n+    }\r\n+\r\n+    public static String getName() {\r\n+        return getApplicationConfig().getName();\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    private static String application;\r\n+\r\n+    @Deprecated\r\n+    public static String getApplication() {\r\n+        return application == null ? getName() : application;\r\n+    }\r\n+\r\n+    // Currently used by UT.\r\n+    @Deprecated\r\n+    public static void setApplication(String application) {\r\n+        ApplicationModel.application = application;\r\n+    }\r\n+\r\n+    // only for unit test\r\n+    public static void reset() {\r\n+        getServiceRepository().destroy();\r\n+        getConfigManager().destroy();\r\n+        getEnvironment().destroy();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/model/AsyncMethodInfo.java", "source2": "org/apache/dubbo/rpc/model/AsyncMethodInfo.java", "comments": ["Line-ending 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.rpc.model;\n-\n-import java.lang.reflect.Method;\n-\n-public class AsyncMethodInfo {\n-    // callback instance when async-call is invoked\n-    private Object oninvokeInstance;\n-\n-    // callback method when async-call is invoked\n-    private Method oninvokeMethod;\n-\n-    // callback instance when async-call is returned\n-    private Object onreturnInstance;\n-\n-    // callback method when async-call is returned\n-    private Method onreturnMethod;\n-\n-    // callback instance when async-call has exception thrown\n-    private Object onthrowInstance;\n-\n-    // callback method when async-call has exception thrown\n-    private Method onthrowMethod;\n-\n-    public Object getOninvokeInstance() {\n-        return oninvokeInstance;\n-    }\n-\n-    public void setOninvokeInstance(Object oninvokeInstance) {\n-        this.oninvokeInstance = oninvokeInstance;\n-    }\n-\n-    public Method getOninvokeMethod() {\n-        return oninvokeMethod;\n-    }\n-\n-    public void setOninvokeMethod(Method oninvokeMethod) {\n-        this.oninvokeMethod = oninvokeMethod;\n-    }\n-\n-    public Object getOnreturnInstance() {\n-        return onreturnInstance;\n-    }\n-\n-    public void setOnreturnInstance(Object onreturnInstance) {\n-        this.onreturnInstance = onreturnInstance;\n-    }\n-\n-    public Method getOnreturnMethod() {\n-        return onreturnMethod;\n-    }\n-\n-    public void setOnreturnMethod(Method onreturnMethod) {\n-        this.onreturnMethod = onreturnMethod;\n-    }\n-\n-    public Object getOnthrowInstance() {\n-        return onthrowInstance;\n-    }\n-\n-    public void setOnthrowInstance(Object onthrowInstance) {\n-        this.onthrowInstance = onthrowInstance;\n-    }\n-\n-    public Method getOnthrowMethod() {\n-        return onthrowMethod;\n-    }\n-\n-    public void setOnthrowMethod(Method onthrowMethod) {\n-        this.onthrowMethod = onthrowMethod;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.model;\r\n+\r\n+import java.lang.reflect.Method;\r\n+\r\n+public class AsyncMethodInfo {\r\n+    // callback instance when async-call is invoked\r\n+    private Object oninvokeInstance;\r\n+\r\n+    // callback method when async-call is invoked\r\n+    private Method oninvokeMethod;\r\n+\r\n+    // callback instance when async-call is returned\r\n+    private Object onreturnInstance;\r\n+\r\n+    // callback method when async-call is returned\r\n+    private Method onreturnMethod;\r\n+\r\n+    // callback instance when async-call has exception thrown\r\n+    private Object onthrowInstance;\r\n+\r\n+    // callback method when async-call has exception thrown\r\n+    private Method onthrowMethod;\r\n+\r\n+    public Object getOninvokeInstance() {\r\n+        return oninvokeInstance;\r\n+    }\r\n+\r\n+    public void setOninvokeInstance(Object oninvokeInstance) {\r\n+        this.oninvokeInstance = oninvokeInstance;\r\n+    }\r\n+\r\n+    public Method getOninvokeMethod() {\r\n+        return oninvokeMethod;\r\n+    }\r\n+\r\n+    public void setOninvokeMethod(Method oninvokeMethod) {\r\n+        this.oninvokeMethod = oninvokeMethod;\r\n+    }\r\n+\r\n+    public Object getOnreturnInstance() {\r\n+        return onreturnInstance;\r\n+    }\r\n+\r\n+    public void setOnreturnInstance(Object onreturnInstance) {\r\n+        this.onreturnInstance = onreturnInstance;\r\n+    }\r\n+\r\n+    public Method getOnreturnMethod() {\r\n+        return onreturnMethod;\r\n+    }\r\n+\r\n+    public void setOnreturnMethod(Method onreturnMethod) {\r\n+        this.onreturnMethod = onreturnMethod;\r\n+    }\r\n+\r\n+    public Object getOnthrowInstance() {\r\n+        return onthrowInstance;\r\n+    }\r\n+\r\n+    public void setOnthrowInstance(Object onthrowInstance) {\r\n+        this.onthrowInstance = onthrowInstance;\r\n+    }\r\n+\r\n+    public Method getOnthrowMethod() {\r\n+        return onthrowMethod;\r\n+    }\r\n+\r\n+    public void setOnthrowMethod(Method onthrowMethod) {\r\n+        this.onthrowMethod = onthrowMethod;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/model/BuiltinServiceDetector.java", "source2": "org/apache/dubbo/rpc/model/BuiltinServiceDetector.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,26 +1,26 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.model;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-@SPI\n-public interface BuiltinServiceDetector {\n-\n-    Class<?> getService();\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.model;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+@SPI\r\n+public interface BuiltinServiceDetector {\r\n+\r\n+    Class<?> getService();\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/model/ConsumerMethodModel.java", "source2": "org/apache/dubbo/rpc/model/ConsumerMethodModel.java", "comments": ["Line-ending 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.rpc.model;\n-\n-import java.lang.reflect.Method;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;\n-\n-/**\n- * Replaced with {@link MethodDescriptor}\n- */\n-@Deprecated\n-public class ConsumerMethodModel {\n-    private final Method method;\n-    //    private final boolean isCallBack;\n-//    private final boolean isFuture;\n-    private final String[] parameterTypes;\n-    private final Class<?>[] parameterClasses;\n-    private final Class<?> returnClass;\n-    private final String methodName;\n-    private final boolean generic;\n-\n-    private final ConcurrentMap<String, Object> attributeMap = new ConcurrentHashMap<>();\n-\n-\n-    public ConsumerMethodModel(Method method) {\n-        this.method = method;\n-        this.parameterClasses = method.getParameterTypes();\n-        this.returnClass = method.getReturnType();\n-        this.parameterTypes = this.createParamSignature(parameterClasses);\n-        this.methodName = method.getName();\n-        this.generic = methodName.equals($INVOKE) && parameterTypes != null && parameterTypes.length == 3;\n-    }\n-\n-    public Method getMethod() {\n-        return method;\n-    }\n-\n-//    public ConcurrentMap<String, Object> getAttributeMap() {\n-//        return attributeMap;\n-//    }\n-\n-    public void addAttribute(String key, Object value) {\n-        this.attributeMap.put(key, value);\n-    }\n-\n-    public Object getAttribute(String key) {\n-        return this.attributeMap.get(key);\n-    }\n-\n-\n-    public Class<?> getReturnClass() {\n-        return returnClass;\n-    }\n-\n-    public String getMethodName() {\n-        return methodName;\n-    }\n-\n-    public String[] getParameterTypes() {\n-        return parameterTypes;\n-    }\n-\n-    private String[] createParamSignature(Class<?>[] args) {\n-        if (args == null || args.length == 0) {\n-            return new String[]{};\n-        }\n-        String[] paramSig = new String[args.length];\n-        for (int x = 0; x < args.length; x++) {\n-            paramSig[x] = args[x].getName();\n-        }\n-        return paramSig;\n-    }\n-\n-\n-    public boolean isGeneric() {\n-        return generic;\n-    }\n-\n-    public Class<?>[] getParameterClasses() {\n-        return parameterClasses;\n-    }\n-\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.model;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;\r\n+\r\n+/**\r\n+ * Replaced with {@link MethodDescriptor}\r\n+ */\r\n+@Deprecated\r\n+public class ConsumerMethodModel {\r\n+    private final Method method;\r\n+    //    private final boolean isCallBack;\r\n+//    private final boolean isFuture;\r\n+    private final String[] parameterTypes;\r\n+    private final Class<?>[] parameterClasses;\r\n+    private final Class<?> returnClass;\r\n+    private final String methodName;\r\n+    private final boolean generic;\r\n+\r\n+    private final ConcurrentMap<String, Object> attributeMap = new ConcurrentHashMap<>();\r\n+\r\n+\r\n+    public ConsumerMethodModel(Method method) {\r\n+        this.method = method;\r\n+        this.parameterClasses = method.getParameterTypes();\r\n+        this.returnClass = method.getReturnType();\r\n+        this.parameterTypes = this.createParamSignature(parameterClasses);\r\n+        this.methodName = method.getName();\r\n+        this.generic = methodName.equals($INVOKE) && parameterTypes != null && parameterTypes.length == 3;\r\n+    }\r\n+\r\n+    public Method getMethod() {\r\n+        return method;\r\n+    }\r\n+\r\n+//    public ConcurrentMap<String, Object> getAttributeMap() {\r\n+//        return attributeMap;\r\n+//    }\r\n+\r\n+    public void addAttribute(String key, Object value) {\r\n+        this.attributeMap.put(key, value);\r\n+    }\r\n+\r\n+    public Object getAttribute(String key) {\r\n+        return this.attributeMap.get(key);\r\n+    }\r\n+\r\n+\r\n+    public Class<?> getReturnClass() {\r\n+        return returnClass;\r\n+    }\r\n+\r\n+    public String getMethodName() {\r\n+        return methodName;\r\n+    }\r\n+\r\n+    public String[] getParameterTypes() {\r\n+        return parameterTypes;\r\n+    }\r\n+\r\n+    private String[] createParamSignature(Class<?>[] args) {\r\n+        if (args == null || args.length == 0) {\r\n+            return new String[]{};\r\n+        }\r\n+        String[] paramSig = new String[args.length];\r\n+        for (int x = 0; x < args.length; x++) {\r\n+            paramSig[x] = args[x].getName();\r\n+        }\r\n+        return paramSig;\r\n+    }\r\n+\r\n+\r\n+    public boolean isGeneric() {\r\n+        return generic;\r\n+    }\r\n+\r\n+    public Class<?>[] getParameterClasses() {\r\n+        return parameterClasses;\r\n+    }\r\n+\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/model/ConsumerModel.java", "source2": "org/apache/dubbo/rpc/model/ConsumerModel.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,219 +1,219 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.model;\n-\n-import org.apache.dubbo.common.BaseServiceMetadata;\n-import org.apache.dubbo.common.utils.Assert;\n-import org.apache.dubbo.config.ReferenceConfigBase;\n-\n-import java.lang.reflect.Method;\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Optional;\n-import java.util.Set;\n-import java.util.TreeSet;\n-\n-/**\n- * This model is bound to your reference's configuration, for example, group, version or method level configuration.\n- */\n-public class ConsumerModel {\n-    private String serviceKey;\n-    private final ServiceDescriptor serviceModel;\n-    private final ReferenceConfigBase<?> referenceConfig;\n-    private final Set<String> apps = new TreeSet<>();\n-\n-    private Object proxyObject;\n-\n-    private Map<String, AsyncMethodInfo> methodConfigs = new HashMap<>();\n-\n-    /**\n-     *  This constructor create an instance of ConsumerModel and passed objects should not be null.\n-     *  If service name, service instance, proxy object,methods should not be null. If these are null\n-     *  then this constructor will throw {@link IllegalArgumentException}\n-     * @param serviceKey Name of the service.\n-     * @param proxyObject  Proxy object.\n-     */\n-    public ConsumerModel(String serviceKey\n-            , Object proxyObject\n-            , ServiceDescriptor serviceModel\n-            , ReferenceConfigBase<?> referenceConfig) {\n-\n-        Assert.notEmptyString(serviceKey, \"Service name can't be null or blank\");\n-\n-        this.serviceKey = serviceKey;\n-        this.proxyObject = proxyObject;\n-        this.serviceModel = serviceModel;\n-        this.referenceConfig = referenceConfig;\n-    }\n-\n-    public void init(Map<String, AsyncMethodInfo> attributes) {\n-        if (attributes != null) {\n-            this.methodConfigs = attributes;\n-        }\n-\n-        initMethodModels();\n-    }\n-\n-    /**\n-     * Return the proxy object used by called while creating instance of ConsumerModel\n-     * @return\n-     */\n-    public Object getProxyObject() {\n-        return proxyObject;\n-    }\n-\n-    public void setProxyObject(Object proxyObject) {\n-        this.proxyObject = proxyObject;\n-    }\n-\n-    /**\n-     * Return all method models for the current service\n-     *\n-     * @return method model list\n-     */\n-    public Set<MethodDescriptor> getAllMethods() {\n-        return serviceModel.getAllMethods();\n-    }\n-\n-    public Class<?> getServiceInterfaceClass() {\n-        return serviceModel.getServiceInterfaceClass();\n-    }\n-\n-    public String getServiceKey() {\n-        return serviceKey;\n-    }\n-\n-    public AsyncMethodInfo getMethodConfig(String methodName) {\n-        return methodConfigs.get(methodName);\n-    }\n-\n-    public ServiceDescriptor getServiceModel() {\n-        return serviceModel;\n-    }\n-\n-    public ReferenceConfigBase getReferenceConfig() {\n-        return referenceConfig;\n-    }\n-\n-    public Set<String> getApps() {\n-        return apps;\n-    }\n-\n-    public AsyncMethodInfo getAsyncInfo(String methodName) {\n-        return methodConfigs.get(methodName);\n-    }\n-\n-    /* *************** Start, metadata compatible **************** */\n-\n-    private ServiceMetadata serviceMetadata;\n-    private Map<Method, ConsumerMethodModel> methodModels = new HashMap<>();\n-\n-    public ConsumerModel(String serviceKey\n-            , Object proxyObject\n-            , ServiceDescriptor serviceModel\n-            , ReferenceConfigBase<?> referenceConfig\n-            , ServiceMetadata metadata) {\n-\n-        this(serviceKey, proxyObject, serviceModel, referenceConfig);\n-        this.serviceMetadata = metadata;\n-    }\n-\n-    public void setServiceKey(String serviceKey) {\n-        this.serviceKey = serviceKey;\n-        if (serviceMetadata != null) {\n-            serviceMetadata.setServiceKey(serviceKey);\n-            serviceMetadata.setGroup(BaseServiceMetadata.groupFromServiceKey(serviceKey));\n-        }\n-    }\n-\n-    public void initMethodModels() {\n-        Class[] interfaceList = null;\n-        if (proxyObject == null) {\n-            interfaceList = new Class[]{referenceConfig.getActualInterface()};\n-        } else {\n-            interfaceList = proxyObject.getClass().getInterfaces();\n-        }\n-        for (Class interfaceClass : interfaceList) {\n-            for (Method method : interfaceClass.getMethods()) {\n-                methodModels.put(method, new ConsumerMethodModel(method));\n-            }\n-        }\n-    }\n-\n-    public ClassLoader getClassLoader() {\n-        return serviceMetadata.getServiceType().getClassLoader();\n-    }\n-\n-    /**\n-     * @return serviceMetadata\n-     */\n-    public ServiceMetadata getServiceMetadata() {\n-        return serviceMetadata;\n-    }\n-\n-    /**\n-     * Return method model for the given method on consumer side\n-     *\n-     * @param method method object\n-     * @return method model\n-     */\n-    public ConsumerMethodModel getMethodModel(Method method) {\n-        return methodModels.get(method);\n-    }\n-\n-    /**\n-     * Return method model for the given method on consumer side\n-     *\n-     * @param method method object\n-     * @return method model\n-     */\n-    public ConsumerMethodModel getMethodModel(String method) {\n-        Optional<Map.Entry<Method, ConsumerMethodModel>> consumerMethodModelEntry = methodModels.entrySet().stream().filter(entry -> entry.getKey().getName().equals(method)).findFirst();\n-        return consumerMethodModelEntry.map(Map.Entry::getValue).orElse(null);\n-    }\n-\n-    /**\n-     * @param method   methodName\n-     * @param argsType method arguments type\n-     * @return\n-     */\n-    public ConsumerMethodModel getMethodModel(String method, String[] argsType) {\n-        Optional<ConsumerMethodModel> consumerMethodModel = methodModels.entrySet().stream()\n-                .filter(entry -> entry.getKey().getName().equals(method))\n-                .map(Map.Entry::getValue).filter(methodModel -> Arrays.equals(argsType, methodModel.getParameterTypes()))\n-                .findFirst();\n-        return consumerMethodModel.orElse(null);\n-    }\n-\n-    /**\n-     * Return all method models for the current service\n-     *\n-     * @return method model list\n-     */\n-    public List<ConsumerMethodModel> getAllMethodModels() {\n-        return new ArrayList<>(methodModels.values());\n-    }\n-\n-    public String getServiceName() {\n-        return this.serviceMetadata.getServiceKey();\n-    }\n-\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.model;\r\n+\r\n+import org.apache.dubbo.common.BaseServiceMetadata;\r\n+import org.apache.dubbo.common.utils.Assert;\r\n+import org.apache.dubbo.config.ReferenceConfigBase;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Optional;\r\n+import java.util.Set;\r\n+import java.util.TreeSet;\r\n+\r\n+/**\r\n+ * This model is bound to your reference's configuration, for example, group, version or method level configuration.\r\n+ */\r\n+public class ConsumerModel {\r\n+    private String serviceKey;\r\n+    private final ServiceDescriptor serviceModel;\r\n+    private final ReferenceConfigBase<?> referenceConfig;\r\n+    private final Set<String> apps = new TreeSet<>();\r\n+\r\n+    private Object proxyObject;\r\n+\r\n+    private Map<String, AsyncMethodInfo> methodConfigs = new HashMap<>();\r\n+\r\n+    /**\r\n+     *  This constructor create an instance of ConsumerModel and passed objects should not be null.\r\n+     *  If service name, service instance, proxy object,methods should not be null. If these are null\r\n+     *  then this constructor will throw {@link IllegalArgumentException}\r\n+     * @param serviceKey Name of the service.\r\n+     * @param proxyObject  Proxy object.\r\n+     */\r\n+    public ConsumerModel(String serviceKey\r\n+            , Object proxyObject\r\n+            , ServiceDescriptor serviceModel\r\n+            , ReferenceConfigBase<?> referenceConfig) {\r\n+\r\n+        Assert.notEmptyString(serviceKey, \"Service name can't be null or blank\");\r\n+\r\n+        this.serviceKey = serviceKey;\r\n+        this.proxyObject = proxyObject;\r\n+        this.serviceModel = serviceModel;\r\n+        this.referenceConfig = referenceConfig;\r\n+    }\r\n+\r\n+    public void init(Map<String, AsyncMethodInfo> attributes) {\r\n+        if (attributes != null) {\r\n+            this.methodConfigs = attributes;\r\n+        }\r\n+\r\n+        initMethodModels();\r\n+    }\r\n+\r\n+    /**\r\n+     * Return the proxy object used by called while creating instance of ConsumerModel\r\n+     * @return\r\n+     */\r\n+    public Object getProxyObject() {\r\n+        return proxyObject;\r\n+    }\r\n+\r\n+    public void setProxyObject(Object proxyObject) {\r\n+        this.proxyObject = proxyObject;\r\n+    }\r\n+\r\n+    /**\r\n+     * Return all method models for the current service\r\n+     *\r\n+     * @return method model list\r\n+     */\r\n+    public Set<MethodDescriptor> getAllMethods() {\r\n+        return serviceModel.getAllMethods();\r\n+    }\r\n+\r\n+    public Class<?> getServiceInterfaceClass() {\r\n+        return serviceModel.getServiceInterfaceClass();\r\n+    }\r\n+\r\n+    public String getServiceKey() {\r\n+        return serviceKey;\r\n+    }\r\n+\r\n+    public AsyncMethodInfo getMethodConfig(String methodName) {\r\n+        return methodConfigs.get(methodName);\r\n+    }\r\n+\r\n+    public ServiceDescriptor getServiceModel() {\r\n+        return serviceModel;\r\n+    }\r\n+\r\n+    public ReferenceConfigBase getReferenceConfig() {\r\n+        return referenceConfig;\r\n+    }\r\n+\r\n+    public Set<String> getApps() {\r\n+        return apps;\r\n+    }\r\n+\r\n+    public AsyncMethodInfo getAsyncInfo(String methodName) {\r\n+        return methodConfigs.get(methodName);\r\n+    }\r\n+\r\n+    /* *************** Start, metadata compatible **************** */\r\n+\r\n+    private ServiceMetadata serviceMetadata;\r\n+    private Map<Method, ConsumerMethodModel> methodModels = new HashMap<>();\r\n+\r\n+    public ConsumerModel(String serviceKey\r\n+            , Object proxyObject\r\n+            , ServiceDescriptor serviceModel\r\n+            , ReferenceConfigBase<?> referenceConfig\r\n+            , ServiceMetadata metadata) {\r\n+\r\n+        this(serviceKey, proxyObject, serviceModel, referenceConfig);\r\n+        this.serviceMetadata = metadata;\r\n+    }\r\n+\r\n+    public void setServiceKey(String serviceKey) {\r\n+        this.serviceKey = serviceKey;\r\n+        if (serviceMetadata != null) {\r\n+            serviceMetadata.setServiceKey(serviceKey);\r\n+            serviceMetadata.setGroup(BaseServiceMetadata.groupFromServiceKey(serviceKey));\r\n+        }\r\n+    }\r\n+\r\n+    public void initMethodModels() {\r\n+        Class[] interfaceList = null;\r\n+        if (proxyObject == null) {\r\n+            interfaceList = new Class[]{referenceConfig.getActualInterface()};\r\n+        } else {\r\n+            interfaceList = proxyObject.getClass().getInterfaces();\r\n+        }\r\n+        for (Class interfaceClass : interfaceList) {\r\n+            for (Method method : interfaceClass.getMethods()) {\r\n+                methodModels.put(method, new ConsumerMethodModel(method));\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public ClassLoader getClassLoader() {\r\n+        return serviceMetadata.getServiceType().getClassLoader();\r\n+    }\r\n+\r\n+    /**\r\n+     * @return serviceMetadata\r\n+     */\r\n+    public ServiceMetadata getServiceMetadata() {\r\n+        return serviceMetadata;\r\n+    }\r\n+\r\n+    /**\r\n+     * Return method model for the given method on consumer side\r\n+     *\r\n+     * @param method method object\r\n+     * @return method model\r\n+     */\r\n+    public ConsumerMethodModel getMethodModel(Method method) {\r\n+        return methodModels.get(method);\r\n+    }\r\n+\r\n+    /**\r\n+     * Return method model for the given method on consumer side\r\n+     *\r\n+     * @param method method object\r\n+     * @return method model\r\n+     */\r\n+    public ConsumerMethodModel getMethodModel(String method) {\r\n+        Optional<Map.Entry<Method, ConsumerMethodModel>> consumerMethodModelEntry = methodModels.entrySet().stream().filter(entry -> entry.getKey().getName().equals(method)).findFirst();\r\n+        return consumerMethodModelEntry.map(Map.Entry::getValue).orElse(null);\r\n+    }\r\n+\r\n+    /**\r\n+     * @param method   methodName\r\n+     * @param argsType method arguments type\r\n+     * @return\r\n+     */\r\n+    public ConsumerMethodModel getMethodModel(String method, String[] argsType) {\r\n+        Optional<ConsumerMethodModel> consumerMethodModel = methodModels.entrySet().stream()\r\n+                .filter(entry -> entry.getKey().getName().equals(method))\r\n+                .map(Map.Entry::getValue).filter(methodModel -> Arrays.equals(argsType, methodModel.getParameterTypes()))\r\n+                .findFirst();\r\n+        return consumerMethodModel.orElse(null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Return all method models for the current service\r\n+     *\r\n+     * @return method model list\r\n+     */\r\n+    public List<ConsumerMethodModel> getAllMethodModels() {\r\n+        return new ArrayList<>(methodModels.values());\r\n+    }\r\n+\r\n+    public String getServiceName() {\r\n+        return this.serviceMetadata.getServiceKey();\r\n+    }\r\n+\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/model/MethodDescriptor.java", "source2": "org/apache/dubbo/rpc/model/MethodDescriptor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,93 +1,93 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.model;\n-\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Type;\n-import java.util.stream.Stream;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;\n-import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE_ASYNC;\n-\n-/**\n- *\n- */\n-public class MethodDescriptor {\n-    private final Method method;\n-    //    private final boolean isCallBack;\n-//    private final boolean isFuture;\n-    private final String paramDesc;\n-    // duplicate filed as paramDesc, but with different format.\n-    private final String[] compatibleParamSignatures;\n-    private final Class<?>[] parameterClasses;\n-    private final Class<?> returnClass;\n-    private final Type[] returnTypes;\n-    private final String methodName;\n-    private final boolean generic;\n-\n-    public MethodDescriptor(Method method) {\n-        this.method = method;\n-        this.parameterClasses = method.getParameterTypes();\n-        this.returnClass = method.getReturnType();\n-        this.returnTypes = ReflectUtils.getReturnTypes(method);\n-        this.paramDesc = ReflectUtils.getDesc(parameterClasses);\n-        this.compatibleParamSignatures = Stream.of(parameterClasses)\n-                .map(Class::getName)\n-                .toArray(String[]::new);\n-        this.methodName = method.getName();\n-        this.generic = (methodName.equals($INVOKE) || methodName.equals($INVOKE_ASYNC)) && parameterClasses.length == 3;\n-    }\n-\n-    public boolean matchParams (String params) {\n-        return paramDesc.equalsIgnoreCase(params);\n-    }\n-\n-    public Method getMethod() {\n-        return method;\n-    }\n-\n-    public String getParamDesc() {\n-        return paramDesc;\n-    }\n-\n-    public String[] getCompatibleParamSignatures() {\n-        return compatibleParamSignatures;\n-    }\n-\n-    public Class<?>[] getParameterClasses() {\n-        return parameterClasses;\n-    }\n-\n-    public Class<?> getReturnClass() {\n-        return returnClass;\n-    }\n-\n-    public Type[] getReturnTypes() {\n-        return returnTypes;\n-    }\n-\n-    public String getMethodName() {\n-        return methodName;\n-    }\n-\n-    public boolean isGeneric() {\n-        return generic;\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.model;\r\n+\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Type;\r\n+import java.util.stream.Stream;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE_ASYNC;\r\n+\r\n+/**\r\n+ *\r\n+ */\r\n+public class MethodDescriptor {\r\n+    private final Method method;\r\n+    //    private final boolean isCallBack;\r\n+//    private final boolean isFuture;\r\n+    private final String paramDesc;\r\n+    // duplicate filed as paramDesc, but with different format.\r\n+    private final String[] compatibleParamSignatures;\r\n+    private final Class<?>[] parameterClasses;\r\n+    private final Class<?> returnClass;\r\n+    private final Type[] returnTypes;\r\n+    private final String methodName;\r\n+    private final boolean generic;\r\n+\r\n+    public MethodDescriptor(Method method) {\r\n+        this.method = method;\r\n+        this.parameterClasses = method.getParameterTypes();\r\n+        this.returnClass = method.getReturnType();\r\n+        this.returnTypes = ReflectUtils.getReturnTypes(method);\r\n+        this.paramDesc = ReflectUtils.getDesc(parameterClasses);\r\n+        this.compatibleParamSignatures = Stream.of(parameterClasses)\r\n+                .map(Class::getName)\r\n+                .toArray(String[]::new);\r\n+        this.methodName = method.getName();\r\n+        this.generic = (methodName.equals($INVOKE) || methodName.equals($INVOKE_ASYNC)) && parameterClasses.length == 3;\r\n+    }\r\n+\r\n+    public boolean matchParams (String params) {\r\n+        return paramDesc.equalsIgnoreCase(params);\r\n+    }\r\n+\r\n+    public Method getMethod() {\r\n+        return method;\r\n+    }\r\n+\r\n+    public String getParamDesc() {\r\n+        return paramDesc;\r\n+    }\r\n+\r\n+    public String[] getCompatibleParamSignatures() {\r\n+        return compatibleParamSignatures;\r\n+    }\r\n+\r\n+    public Class<?>[] getParameterClasses() {\r\n+        return parameterClasses;\r\n+    }\r\n+\r\n+    public Class<?> getReturnClass() {\r\n+        return returnClass;\r\n+    }\r\n+\r\n+    public Type[] getReturnTypes() {\r\n+        return returnTypes;\r\n+    }\r\n+\r\n+    public String getMethodName() {\r\n+        return methodName;\r\n+    }\r\n+\r\n+    public boolean isGeneric() {\r\n+        return generic;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/model/ProviderMethodModel.java", "source2": "org/apache/dubbo/rpc/model/ProviderMethodModel.java", "comments": ["Line-ending 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.rpc.model;\n-\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Type;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-\n-/**\n- * Replaced with {@link MethodDescriptor}\n- */\n-@Deprecated\n-public class ProviderMethodModel {\n-    private final Method method;\n-    private final String methodName;\n-    private final Class<?>[] parameterClasses;\n-    private final String[] methodArgTypes;\n-    private final Type[] genericParameterTypes;\n-    private final ConcurrentMap<String, Object> attributeMap = new ConcurrentHashMap<>();\n-\n-    public ProviderMethodModel(Method method) {\n-        this.method = method;\n-        this.methodName = method.getName();\n-        this.parameterClasses = method.getParameterTypes();\n-        this.methodArgTypes = getArgTypes(method);\n-        this.genericParameterTypes = method.getGenericParameterTypes();\n-    }\n-\n-    public Method getMethod() {\n-        return method;\n-    }\n-\n-    public String getMethodName() {\n-        return methodName;\n-    }\n-\n-    public String[] getMethodArgTypes() {\n-        return methodArgTypes;\n-    }\n-\n-    public ConcurrentMap<String, Object> getAttributeMap() {\n-        return attributeMap;\n-    }\n-\n-    private static String[] getArgTypes(Method method) {\n-        String[] methodArgTypes = new String[0];\n-        Class<?>[] parameterTypes = method.getParameterTypes();\n-        if (parameterTypes.length > 0) {\n-            methodArgTypes = new String[parameterTypes.length];\n-            int index = 0;\n-            for (Class<?> paramType : parameterTypes) {\n-                methodArgTypes[index++] = paramType.getName();\n-            }\n-        }\n-        return methodArgTypes;\n-    }\n-\n-    public Class<?>[] getParameterClasses() {\n-        return parameterClasses;\n-    }\n-\n-    public Type[] getGenericParameterTypes() {\n-        return genericParameterTypes;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.model;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Type;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+\r\n+/**\r\n+ * Replaced with {@link MethodDescriptor}\r\n+ */\r\n+@Deprecated\r\n+public class ProviderMethodModel {\r\n+    private final Method method;\r\n+    private final String methodName;\r\n+    private final Class<?>[] parameterClasses;\r\n+    private final String[] methodArgTypes;\r\n+    private final Type[] genericParameterTypes;\r\n+    private final ConcurrentMap<String, Object> attributeMap = new ConcurrentHashMap<>();\r\n+\r\n+    public ProviderMethodModel(Method method) {\r\n+        this.method = method;\r\n+        this.methodName = method.getName();\r\n+        this.parameterClasses = method.getParameterTypes();\r\n+        this.methodArgTypes = getArgTypes(method);\r\n+        this.genericParameterTypes = method.getGenericParameterTypes();\r\n+    }\r\n+\r\n+    public Method getMethod() {\r\n+        return method;\r\n+    }\r\n+\r\n+    public String getMethodName() {\r\n+        return methodName;\r\n+    }\r\n+\r\n+    public String[] getMethodArgTypes() {\r\n+        return methodArgTypes;\r\n+    }\r\n+\r\n+    public ConcurrentMap<String, Object> getAttributeMap() {\r\n+        return attributeMap;\r\n+    }\r\n+\r\n+    private static String[] getArgTypes(Method method) {\r\n+        String[] methodArgTypes = new String[0];\r\n+        Class<?>[] parameterTypes = method.getParameterTypes();\r\n+        if (parameterTypes.length > 0) {\r\n+            methodArgTypes = new String[parameterTypes.length];\r\n+            int index = 0;\r\n+            for (Class<?> paramType : parameterTypes) {\r\n+                methodArgTypes[index++] = paramType.getName();\r\n+            }\r\n+        }\r\n+        return methodArgTypes;\r\n+    }\r\n+\r\n+    public Class<?>[] getParameterClasses() {\r\n+        return parameterClasses;\r\n+    }\r\n+\r\n+    public Type[] getGenericParameterTypes() {\r\n+        return genericParameterTypes;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/model/ProviderModel.java", "source2": "org/apache/dubbo/rpc/model/ProviderModel.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,205 +1,205 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.model;\n-\n-import org.apache.dubbo.common.BaseServiceMetadata;\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.config.ServiceConfigBase;\n-\n-import java.lang.reflect.Method;\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.Collections;\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-\n-/**\n- * ProviderModel is about published services\n- */\n-public class ProviderModel {\n-    private String serviceKey;\n-    private final Object serviceInstance;\n-    private final ServiceDescriptor serviceModel;\n-    private final ServiceConfigBase<?> serviceConfig;\n-    private final List<RegisterStatedURL> urls;\n-\n-    public ProviderModel(String serviceKey,\n-                         Object serviceInstance,\n-                         ServiceDescriptor serviceModel,\n-                         ServiceConfigBase<?> serviceConfig) {\n-        if (null == serviceInstance) {\n-            throw new IllegalArgumentException(\"Service[\" + serviceKey + \"]Target is NULL.\");\n-        }\n-\n-        this.serviceKey = serviceKey;\n-        this.serviceInstance = serviceInstance;\n-        this.serviceModel = serviceModel;\n-        this.serviceConfig = serviceConfig;\n-        this.urls = new ArrayList<>(1);\n-    }\n-\n-    public String getServiceKey() {\n-        return serviceKey;\n-    }\n-\n-\n-    public Class<?> getServiceInterfaceClass() {\n-        return serviceModel.getServiceInterfaceClass();\n-    }\n-\n-    public Object getServiceInstance() {\n-        return serviceInstance;\n-    }\n-\n-    public Set<MethodDescriptor> getAllMethods() {\n-        return serviceModel.getAllMethods();\n-    }\n-\n-    public ServiceDescriptor getServiceModel() {\n-        return serviceModel;\n-    }\n-\n-    public ServiceConfigBase getServiceConfig() {\n-        return serviceConfig;\n-    }\n-\n-    public List<RegisterStatedURL> getStatedUrl() {\n-        return urls;\n-    }\n-\n-    public void addStatedUrl(RegisterStatedURL url) {\n-        this.urls.add(url);\n-    }\n-\n-    public static class RegisterStatedURL {\n-        private volatile URL registryUrl;\n-        private volatile URL providerUrl;\n-        private volatile boolean registered;\n-\n-        public RegisterStatedURL(URL providerUrl,\n-                                 URL registryUrl,\n-                                 boolean registered) {\n-            this.providerUrl = providerUrl;\n-            this.registered = registered;\n-            this.registryUrl = registryUrl;\n-        }\n-\n-        public URL getProviderUrl() {\n-            return providerUrl;\n-        }\n-\n-        public void setProviderUrl(URL providerUrl) {\n-            this.providerUrl = providerUrl;\n-        }\n-\n-        public boolean isRegistered() {\n-            return registered;\n-        }\n-\n-        public void setRegistered(boolean registered) {\n-            this.registered = registered;\n-        }\n-\n-        public URL getRegistryUrl() {\n-            return registryUrl;\n-        }\n-\n-        public void setRegistryUrl(URL registryUrl) {\n-            this.registryUrl = registryUrl;\n-        }\n-    }\n-\n-    /* *************** Start, metadata compatible **************** */\n-\n-    private ServiceMetadata serviceMetadata;\n-    private final Map<String, List<ProviderMethodModel>> methods = new HashMap<String, List<ProviderMethodModel>>();\n-\n-    public ProviderModel(String serviceKey,\n-                         Object serviceInstance,\n-                         ServiceDescriptor serviceModel,\n-                         ServiceConfigBase<?> serviceConfig,\n-                         ServiceMetadata serviceMetadata) {\n-        this(serviceKey, serviceInstance, serviceModel, serviceConfig);\n-\n-        this.serviceMetadata = serviceMetadata;\n-        initMethod(serviceModel.getServiceInterfaceClass());\n-    }\n-\n-\n-    public void setServiceKey(String serviceKey) {\n-        this.serviceKey = serviceKey;\n-        if (serviceMetadata != null) {\n-            serviceMetadata.setServiceKey(serviceKey);\n-            serviceMetadata.setGroup(BaseServiceMetadata.groupFromServiceKey(serviceKey));\n-        }\n-    }\n-\n-    public String getServiceName() {\n-        return this.serviceMetadata.getServiceKey();\n-    }\n-\n-    public List<ProviderMethodModel> getAllMethodModels() {\n-        List<ProviderMethodModel> result = new ArrayList<ProviderMethodModel>();\n-        for (List<ProviderMethodModel> models : methods.values()) {\n-            result.addAll(models);\n-        }\n-        return result;\n-    }\n-\n-    public ProviderMethodModel getMethodModel(String methodName, String[] argTypes) {\n-        List<ProviderMethodModel> methodModels = methods.get(methodName);\n-        if (methodModels != null) {\n-            for (ProviderMethodModel methodModel : methodModels) {\n-                if (Arrays.equals(argTypes, methodModel.getMethodArgTypes())) {\n-                    return methodModel;\n-                }\n-            }\n-        }\n-        return null;\n-    }\n-\n-    public List<ProviderMethodModel> getMethodModelList(String methodName) {\n-        List<ProviderMethodModel> resultList = methods.get(methodName);\n-        return resultList == null ? Collections.emptyList() : resultList;\n-    }\n-\n-    private void initMethod(Class<?> serviceInterfaceClass) {\n-        Method[] methodsToExport;\n-        methodsToExport = serviceInterfaceClass.getMethods();\n-\n-        for (Method method : methodsToExport) {\n-            ReflectUtils.makeAccessible(method);\n-\n-            List<ProviderMethodModel> methodModels = methods.get(method.getName());\n-            if (methodModels == null) {\n-                methodModels = new ArrayList<ProviderMethodModel>();\n-                methods.put(method.getName(), methodModels);\n-            }\n-            methodModels.add(new ProviderMethodModel(method));\n-        }\n-    }\n-\n-    /**\n-     * @return serviceMetadata\n-     */\n-    public ServiceMetadata getServiceMetadata() {\n-        return serviceMetadata;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.model;\r\n+\r\n+import org.apache.dubbo.common.BaseServiceMetadata;\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.config.ServiceConfigBase;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\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.Set;\r\n+\r\n+/**\r\n+ * ProviderModel is about published services\r\n+ */\r\n+public class ProviderModel {\r\n+    private String serviceKey;\r\n+    private final Object serviceInstance;\r\n+    private final ServiceDescriptor serviceModel;\r\n+    private final ServiceConfigBase<?> serviceConfig;\r\n+    private final List<RegisterStatedURL> urls;\r\n+\r\n+    public ProviderModel(String serviceKey,\r\n+                         Object serviceInstance,\r\n+                         ServiceDescriptor serviceModel,\r\n+                         ServiceConfigBase<?> serviceConfig) {\r\n+        if (null == serviceInstance) {\r\n+            throw new IllegalArgumentException(\"Service[\" + serviceKey + \"]Target is NULL.\");\r\n+        }\r\n+\r\n+        this.serviceKey = serviceKey;\r\n+        this.serviceInstance = serviceInstance;\r\n+        this.serviceModel = serviceModel;\r\n+        this.serviceConfig = serviceConfig;\r\n+        this.urls = new ArrayList<>(1);\r\n+    }\r\n+\r\n+    public String getServiceKey() {\r\n+        return serviceKey;\r\n+    }\r\n+\r\n+\r\n+    public Class<?> getServiceInterfaceClass() {\r\n+        return serviceModel.getServiceInterfaceClass();\r\n+    }\r\n+\r\n+    public Object getServiceInstance() {\r\n+        return serviceInstance;\r\n+    }\r\n+\r\n+    public Set<MethodDescriptor> getAllMethods() {\r\n+        return serviceModel.getAllMethods();\r\n+    }\r\n+\r\n+    public ServiceDescriptor getServiceModel() {\r\n+        return serviceModel;\r\n+    }\r\n+\r\n+    public ServiceConfigBase getServiceConfig() {\r\n+        return serviceConfig;\r\n+    }\r\n+\r\n+    public List<RegisterStatedURL> getStatedUrl() {\r\n+        return urls;\r\n+    }\r\n+\r\n+    public void addStatedUrl(RegisterStatedURL url) {\r\n+        this.urls.add(url);\r\n+    }\r\n+\r\n+    public static class RegisterStatedURL {\r\n+        private volatile URL registryUrl;\r\n+        private volatile URL providerUrl;\r\n+        private volatile boolean registered;\r\n+\r\n+        public RegisterStatedURL(URL providerUrl,\r\n+                                 URL registryUrl,\r\n+                                 boolean registered) {\r\n+            this.providerUrl = providerUrl;\r\n+            this.registered = registered;\r\n+            this.registryUrl = registryUrl;\r\n+        }\r\n+\r\n+        public URL getProviderUrl() {\r\n+            return providerUrl;\r\n+        }\r\n+\r\n+        public void setProviderUrl(URL providerUrl) {\r\n+            this.providerUrl = providerUrl;\r\n+        }\r\n+\r\n+        public boolean isRegistered() {\r\n+            return registered;\r\n+        }\r\n+\r\n+        public void setRegistered(boolean registered) {\r\n+            this.registered = registered;\r\n+        }\r\n+\r\n+        public URL getRegistryUrl() {\r\n+            return registryUrl;\r\n+        }\r\n+\r\n+        public void setRegistryUrl(URL registryUrl) {\r\n+            this.registryUrl = registryUrl;\r\n+        }\r\n+    }\r\n+\r\n+    /* *************** Start, metadata compatible **************** */\r\n+\r\n+    private ServiceMetadata serviceMetadata;\r\n+    private final Map<String, List<ProviderMethodModel>> methods = new HashMap<String, List<ProviderMethodModel>>();\r\n+\r\n+    public ProviderModel(String serviceKey,\r\n+                         Object serviceInstance,\r\n+                         ServiceDescriptor serviceModel,\r\n+                         ServiceConfigBase<?> serviceConfig,\r\n+                         ServiceMetadata serviceMetadata) {\r\n+        this(serviceKey, serviceInstance, serviceModel, serviceConfig);\r\n+\r\n+        this.serviceMetadata = serviceMetadata;\r\n+        initMethod(serviceModel.getServiceInterfaceClass());\r\n+    }\r\n+\r\n+\r\n+    public void setServiceKey(String serviceKey) {\r\n+        this.serviceKey = serviceKey;\r\n+        if (serviceMetadata != null) {\r\n+            serviceMetadata.setServiceKey(serviceKey);\r\n+            serviceMetadata.setGroup(BaseServiceMetadata.groupFromServiceKey(serviceKey));\r\n+        }\r\n+    }\r\n+\r\n+    public String getServiceName() {\r\n+        return this.serviceMetadata.getServiceKey();\r\n+    }\r\n+\r\n+    public List<ProviderMethodModel> getAllMethodModels() {\r\n+        List<ProviderMethodModel> result = new ArrayList<ProviderMethodModel>();\r\n+        for (List<ProviderMethodModel> models : methods.values()) {\r\n+            result.addAll(models);\r\n+        }\r\n+        return result;\r\n+    }\r\n+\r\n+    public ProviderMethodModel getMethodModel(String methodName, String[] argTypes) {\r\n+        List<ProviderMethodModel> methodModels = methods.get(methodName);\r\n+        if (methodModels != null) {\r\n+            for (ProviderMethodModel methodModel : methodModels) {\r\n+                if (Arrays.equals(argTypes, methodModel.getMethodArgTypes())) {\r\n+                    return methodModel;\r\n+                }\r\n+            }\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    public List<ProviderMethodModel> getMethodModelList(String methodName) {\r\n+        List<ProviderMethodModel> resultList = methods.get(methodName);\r\n+        return resultList == null ? Collections.emptyList() : resultList;\r\n+    }\r\n+\r\n+    private void initMethod(Class<?> serviceInterfaceClass) {\r\n+        Method[] methodsToExport;\r\n+        methodsToExport = serviceInterfaceClass.getMethods();\r\n+\r\n+        for (Method method : methodsToExport) {\r\n+            ReflectUtils.makeAccessible(method);\r\n+\r\n+            List<ProviderMethodModel> methodModels = methods.get(method.getName());\r\n+            if (methodModels == null) {\r\n+                methodModels = new ArrayList<ProviderMethodModel>();\r\n+                methods.put(method.getName(), methodModels);\r\n+            }\r\n+            methodModels.add(new ProviderMethodModel(method));\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * @return serviceMetadata\r\n+     */\r\n+    public ServiceMetadata getServiceMetadata() {\r\n+        return serviceMetadata;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/model/ServiceDescriptor.java", "source2": "org/apache/dubbo/rpc/model/ServiceDescriptor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,119 +1,119 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.model;\n-\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-\n-import java.lang.reflect.Method;\n-import java.util.Arrays;\n-import java.util.ArrayList;\n-import java.util.HashMap;\n-import java.util.HashSet;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-\n-/**\n- * ServiceModel and ServiceMetadata are to some extend duplicated with each other.\n- * We should merge them in the future.\n- */\n-public class ServiceDescriptor {\n-    private final String serviceName;\n-    private final Class<?> serviceInterfaceClass;\n-    // to accelerate search\n-    private final Map<String, List<MethodDescriptor>> methods = new HashMap<>();\n-    private final Map<String, Map<String, MethodDescriptor>> descToMethods = new HashMap<>();\n-\n-    public ServiceDescriptor(Class<?> interfaceClass) {\n-        this.serviceInterfaceClass = interfaceClass;\n-        this.serviceName = interfaceClass.getName();\n-        initMethods();\n-    }\n-\n-    private void initMethods() {\n-        Method[] methodsToExport = this.serviceInterfaceClass.getMethods();\n-        for (Method method : methodsToExport) {\n-            ReflectUtils.makeAccessible(method);\n-\n-            List<MethodDescriptor> methodModels = methods.computeIfAbsent(method.getName(), (k) -> new ArrayList<>(1));\n-            methodModels.add(new MethodDescriptor(method));\n-        }\n-\n-        methods.forEach((methodName, methodList) -> {\n-            Map<String, MethodDescriptor> descMap = descToMethods.computeIfAbsent(methodName, k -> new HashMap<>());\n-            methodList.forEach(methodModel -> descMap.put(methodModel.getParamDesc(), methodModel));\n-\n-//            Map<Class<?>[], MethodModel> typesMap = typeToMethods.computeIfAbsent(methodName, k -> new HashMap<>());\n-//            methodList.forEach(methodModel -> typesMap.put(methodModel.getParameterClasses(), methodModel));\n-        });\n-    }\n-\n-    public String getServiceName() {\n-        return serviceName;\n-    }\n-\n-    public Class<?> getServiceInterfaceClass() {\n-        return serviceInterfaceClass;\n-    }\n-\n-    public Set<MethodDescriptor> getAllMethods() {\n-        Set<MethodDescriptor> methodModels = new HashSet<>();\n-        methods.forEach((k, v) -> methodModels.addAll(v));\n-        return methodModels;\n-    }\n-\n-    /**\n-     * Does not use Optional as return type to avoid potential performance decrease.\n-     *\n-     * @param methodName\n-     * @param params\n-     * @return\n-     */\n-    public MethodDescriptor getMethod(String methodName, String params) {\n-        Map<String, MethodDescriptor> methods = descToMethods.get(methodName);\n-        if (CollectionUtils.isNotEmptyMap(methods)) {\n-            return methods.get(params);\n-        }\n-        return null;\n-    }\n-\n-    /**\n-     * Does not use Optional as return type to avoid potential performance decrease.\n-     *\n-     * @param methodName\n-     * @param paramTypes\n-     * @return\n-     */\n-    public MethodDescriptor getMethod(String methodName, Class<?>[] paramTypes) {\n-        List<MethodDescriptor> methodModels = methods.get(methodName);\n-        if (CollectionUtils.isNotEmpty(methodModels)) {\n-            for (int i = 0; i < methodModels.size(); i++) {\n-                MethodDescriptor descriptor = methodModels.get(i);\n-                if (Arrays.equals(paramTypes, descriptor.getParameterClasses())) {\n-                    return descriptor;\n-                }\n-            }\n-        }\n-        return null;\n-    }\n-\n-    public List<MethodDescriptor> getMethods(String methodName) {\n-        return methods.get(methodName);\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.model;\r\n+\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.util.Arrays;\r\n+import java.util.ArrayList;\r\n+import java.util.HashMap;\r\n+import java.util.HashSet;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+\r\n+/**\r\n+ * ServiceModel and ServiceMetadata are to some extend duplicated with each other.\r\n+ * We should merge them in the future.\r\n+ */\r\n+public class ServiceDescriptor {\r\n+    private final String serviceName;\r\n+    private final Class<?> serviceInterfaceClass;\r\n+    // to accelerate search\r\n+    private final Map<String, List<MethodDescriptor>> methods = new HashMap<>();\r\n+    private final Map<String, Map<String, MethodDescriptor>> descToMethods = new HashMap<>();\r\n+\r\n+    public ServiceDescriptor(Class<?> interfaceClass) {\r\n+        this.serviceInterfaceClass = interfaceClass;\r\n+        this.serviceName = interfaceClass.getName();\r\n+        initMethods();\r\n+    }\r\n+\r\n+    private void initMethods() {\r\n+        Method[] methodsToExport = this.serviceInterfaceClass.getMethods();\r\n+        for (Method method : methodsToExport) {\r\n+            ReflectUtils.makeAccessible(method);\r\n+\r\n+            List<MethodDescriptor> methodModels = methods.computeIfAbsent(method.getName(), (k) -> new ArrayList<>(1));\r\n+            methodModels.add(new MethodDescriptor(method));\r\n+        }\r\n+\r\n+        methods.forEach((methodName, methodList) -> {\r\n+            Map<String, MethodDescriptor> descMap = descToMethods.computeIfAbsent(methodName, k -> new HashMap<>());\r\n+            methodList.forEach(methodModel -> descMap.put(methodModel.getParamDesc(), methodModel));\r\n+\r\n+//            Map<Class<?>[], MethodModel> typesMap = typeToMethods.computeIfAbsent(methodName, k -> new HashMap<>());\r\n+//            methodList.forEach(methodModel -> typesMap.put(methodModel.getParameterClasses(), methodModel));\r\n+        });\r\n+    }\r\n+\r\n+    public String getServiceName() {\r\n+        return serviceName;\r\n+    }\r\n+\r\n+    public Class<?> getServiceInterfaceClass() {\r\n+        return serviceInterfaceClass;\r\n+    }\r\n+\r\n+    public Set<MethodDescriptor> getAllMethods() {\r\n+        Set<MethodDescriptor> methodModels = new HashSet<>();\r\n+        methods.forEach((k, v) -> methodModels.addAll(v));\r\n+        return methodModels;\r\n+    }\r\n+\r\n+    /**\r\n+     * Does not use Optional as return type to avoid potential performance decrease.\r\n+     *\r\n+     * @param methodName\r\n+     * @param params\r\n+     * @return\r\n+     */\r\n+    public MethodDescriptor getMethod(String methodName, String params) {\r\n+        Map<String, MethodDescriptor> methods = descToMethods.get(methodName);\r\n+        if (CollectionUtils.isNotEmptyMap(methods)) {\r\n+            return methods.get(params);\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    /**\r\n+     * Does not use Optional as return type to avoid potential performance decrease.\r\n+     *\r\n+     * @param methodName\r\n+     * @param paramTypes\r\n+     * @return\r\n+     */\r\n+    public MethodDescriptor getMethod(String methodName, Class<?>[] paramTypes) {\r\n+        List<MethodDescriptor> methodModels = methods.get(methodName);\r\n+        if (CollectionUtils.isNotEmpty(methodModels)) {\r\n+            for (int i = 0; i < methodModels.size(); i++) {\r\n+                MethodDescriptor descriptor = methodModels.get(i);\r\n+                if (Arrays.equals(paramTypes, descriptor.getParameterClasses())) {\r\n+                    return descriptor;\r\n+                }\r\n+            }\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    public List<MethodDescriptor> getMethods(String methodName) {\r\n+        return methods.get(methodName);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/model/ServiceMetadata.java", "source2": "org/apache/dubbo/rpc/model/ServiceMetadata.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,102 +1,102 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.model;\n-\n-import org.apache.dubbo.common.BaseServiceMetadata;\n-import org.apache.dubbo.common.URL;\n-\n-import java.util.Map;\n-import java.util.concurrent.ConcurrentHashMap;\n-\n-/**\n- * Notice, this class currently has no usage inside Dubbo.\n- *\n- * data related to service level such as name, version, classloader of business service,\n- * security info, etc. Also with a AttributeMap for extension.\n- */\n-public class ServiceMetadata extends BaseServiceMetadata {\n-\n-    private String defaultGroup;\n-    private Class<?> serviceType;\n-\n-    private Object target;\n-\n-    /* will be transferred to remote side */\n-    private final Map<String, Object> attachments = new ConcurrentHashMap<String, Object>();\n-    /* used locally*/\n-    private final Map<String, Object> attributeMap = new ConcurrentHashMap<String, Object>();\n-\n-    public ServiceMetadata(String serviceInterfaceName, String group, String version, Class<?> serviceType) {\n-        this.serviceInterfaceName = serviceInterfaceName;\n-        this.defaultGroup = group;\n-        this.group = group;\n-        this.version = version;\n-        this.serviceKey = URL.buildKey(serviceInterfaceName, group, version);\n-        this.serviceType = serviceType;\n-    }\n-\n-    public ServiceMetadata() {\n-    }\n-\n-    public String getServiceKey() {\n-        return serviceKey;\n-    }\n-\n-    public Map<String, Object> getAttachments() {\n-        return attachments;\n-    }\n-\n-    public Map<String, Object> getAttributeMap() {\n-        return attributeMap;\n-    }\n-\n-    public Object getAttribute(String key) {\n-        return attributeMap.get(key);\n-    }\n-\n-    public void addAttribute(String key, Object value) {\n-        this.attributeMap.put(key, value);\n-    }\n-\n-    public void addAttachment(String key, Object value) {\n-        this.attachments.put(key, value);\n-    }\n-\n-    public Class<?> getServiceType() {\n-        return serviceType;\n-    }\n-\n-    public String getDefaultGroup() {\n-        return defaultGroup;\n-    }\n-\n-    public void setDefaultGroup(String defaultGroup) {\n-        this.defaultGroup = defaultGroup;\n-    }\n-\n-    public void setServiceType(Class<?> serviceType) {\n-        this.serviceType = serviceType;\n-    }\n-\n-    public Object getTarget() {\n-        return target;\n-    }\n-\n-    public void setTarget(Object target) {\n-        this.target = target;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.model;\r\n+\r\n+import org.apache.dubbo.common.BaseServiceMetadata;\r\n+import org.apache.dubbo.common.URL;\r\n+\r\n+import java.util.Map;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+\r\n+/**\r\n+ * Notice, this class currently has no usage inside Dubbo.\r\n+ *\r\n+ * data related to service level such as name, version, classloader of business service,\r\n+ * security info, etc. Also with a AttributeMap for extension.\r\n+ */\r\n+public class ServiceMetadata extends BaseServiceMetadata {\r\n+\r\n+    private String defaultGroup;\r\n+    private Class<?> serviceType;\r\n+\r\n+    private Object target;\r\n+\r\n+    /* will be transferred to remote side */\r\n+    private final Map<String, Object> attachments = new ConcurrentHashMap<String, Object>();\r\n+    /* used locally*/\r\n+    private final Map<String, Object> attributeMap = new ConcurrentHashMap<String, Object>();\r\n+\r\n+    public ServiceMetadata(String serviceInterfaceName, String group, String version, Class<?> serviceType) {\r\n+        this.serviceInterfaceName = serviceInterfaceName;\r\n+        this.defaultGroup = group;\r\n+        this.group = group;\r\n+        this.version = version;\r\n+        this.serviceKey = URL.buildKey(serviceInterfaceName, group, version);\r\n+        this.serviceType = serviceType;\r\n+    }\r\n+\r\n+    public ServiceMetadata() {\r\n+    }\r\n+\r\n+    public String getServiceKey() {\r\n+        return serviceKey;\r\n+    }\r\n+\r\n+    public Map<String, Object> getAttachments() {\r\n+        return attachments;\r\n+    }\r\n+\r\n+    public Map<String, Object> getAttributeMap() {\r\n+        return attributeMap;\r\n+    }\r\n+\r\n+    public Object getAttribute(String key) {\r\n+        return attributeMap.get(key);\r\n+    }\r\n+\r\n+    public void addAttribute(String key, Object value) {\r\n+        this.attributeMap.put(key, value);\r\n+    }\r\n+\r\n+    public void addAttachment(String key, Object value) {\r\n+        this.attachments.put(key, value);\r\n+    }\r\n+\r\n+    public Class<?> getServiceType() {\r\n+        return serviceType;\r\n+    }\r\n+\r\n+    public String getDefaultGroup() {\r\n+        return defaultGroup;\r\n+    }\r\n+\r\n+    public void setDefaultGroup(String defaultGroup) {\r\n+        this.defaultGroup = defaultGroup;\r\n+    }\r\n+\r\n+    public void setServiceType(Class<?> serviceType) {\r\n+        this.serviceType = serviceType;\r\n+    }\r\n+\r\n+    public Object getTarget() {\r\n+        return target;\r\n+    }\r\n+\r\n+    public void setTarget(Object target) {\r\n+        this.target = target;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/model/ServiceRepository.java", "source2": "org/apache/dubbo/rpc/model/ServiceRepository.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,185 +1,185 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.model;\n-\n-import org.apache.dubbo.common.context.FrameworkExt;\n-import org.apache.dubbo.common.context.LifecycleAdapter;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.config.ReferenceConfigBase;\n-import org.apache.dubbo.config.ServiceConfigBase;\n-\n-import java.util.ArrayList;\n-import java.util.Collections;\n-import java.util.List;\n-import java.util.Set;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-\n-import static org.apache.dubbo.common.BaseServiceMetadata.interfaceFromServiceKey;\n-import static org.apache.dubbo.common.BaseServiceMetadata.versionFromServiceKey;\n-\n-public class ServiceRepository extends LifecycleAdapter implements FrameworkExt {\n-\n-    public static final String NAME = \"repository\";\n-\n-    // services\n-    private ConcurrentMap<String, ServiceDescriptor> services = new ConcurrentHashMap<>();\n-\n-    // consumers\n-    private ConcurrentMap<String, ConsumerModel> consumers = new ConcurrentHashMap<>();\n-\n-    // providers\n-    private ConcurrentMap<String, ProviderModel> providers = new ConcurrentHashMap<>();\n-\n-    // useful to find a provider model quickly with serviceInterfaceName:version\n-    private ConcurrentMap<String, ProviderModel> providersWithoutGroup = new ConcurrentHashMap<>();\n-\n-    public ServiceRepository() {\n-        Set<BuiltinServiceDetector> builtinServices\n-                = ExtensionLoader.getExtensionLoader(BuiltinServiceDetector.class).getSupportedExtensionInstances();\n-        if (CollectionUtils.isNotEmpty(builtinServices)) {\n-            for (BuiltinServiceDetector service : builtinServices) {\n-                registerService(service.getService());\n-            }\n-        }\n-    }\n-\n-    public ServiceDescriptor registerService(Class<?> interfaceClazz) {\n-        return services.computeIfAbsent(interfaceClazz.getName(),\n-                _k -> new ServiceDescriptor(interfaceClazz));\n-    }\n-\n-    /**\n-     * See {@link #registerService(Class)}\n-     * <p>\n-     * we assume:\n-     * 1. services with different interfaces are not allowed to have the same path.\n-     * 2. services share the same interface but has different group/version can share the same path.\n-     * 3. path's default value is the name of the interface.\n-     *\n-     * @param path\n-     * @param interfaceClass\n-     * @return\n-     */\n-    public ServiceDescriptor registerService(String path, Class<?> interfaceClass) {\n-        ServiceDescriptor serviceDescriptor = registerService(interfaceClass);\n-        // if path is different with interface name, add extra path mapping\n-        if (!interfaceClass.getName().equals(path)) {\n-            services.putIfAbsent(path, serviceDescriptor);\n-        }\n-        return serviceDescriptor;\n-    }\n-\n-    public void unregisterService(Class<?> interfaceClazz) {\n-        unregisterService(interfaceClazz.getName());\n-    }\n-\n-    public void unregisterService(String path) {\n-        services.remove(path);\n-    }\n-\n-    public void registerConsumer(String serviceKey,\n-                                 ServiceDescriptor serviceDescriptor,\n-                                 ReferenceConfigBase<?> rc,\n-                                 Object proxy,\n-                                 ServiceMetadata serviceMetadata) {\n-        ConsumerModel consumerModel = new ConsumerModel(serviceMetadata.getServiceKey(), proxy, serviceDescriptor, rc,\n-                serviceMetadata);\n-        consumers.putIfAbsent(serviceKey, consumerModel);\n-    }\n-\n-    public void reRegisterConsumer(String newServiceKey, String serviceKey) {\n-        ConsumerModel consumerModel = consumers.get(serviceKey);\n-        consumerModel.setServiceKey(newServiceKey);\n-        consumers.putIfAbsent(newServiceKey, consumerModel);\n-        consumers.remove(serviceKey);\n-\n-    }\n-\n-    public void registerProvider(String serviceKey,\n-                                 Object serviceInstance,\n-                                 ServiceDescriptor serviceModel,\n-                                 ServiceConfigBase<?> serviceConfig,\n-                                 ServiceMetadata serviceMetadata) {\n-        ProviderModel providerModel = new ProviderModel(serviceKey, serviceInstance, serviceModel, serviceConfig,\n-                serviceMetadata);\n-        providers.putIfAbsent(serviceKey, providerModel);\n-        providersWithoutGroup.putIfAbsent(keyWithoutGroup(serviceKey), providerModel);\n-    }\n-\n-    private static String keyWithoutGroup(String serviceKey) {\n-        return interfaceFromServiceKey(serviceKey) + \":\" + versionFromServiceKey(serviceKey);\n-    }\n-\n-    public void reRegisterProvider(String newServiceKey, String serviceKey) {\n-        ProviderModel providerModel = providers.get(serviceKey);\n-        providerModel.setServiceKey(newServiceKey);\n-        providers.putIfAbsent(newServiceKey, providerModel);\n-        providers.remove(serviceKey);\n-    }\n-\n-    public List<ServiceDescriptor> getAllServices() {\n-        return Collections.unmodifiableList(new ArrayList<>(services.values()));\n-    }\n-\n-    public ServiceDescriptor lookupService(String interfaceName) {\n-        return services.get(interfaceName);\n-    }\n-\n-    public MethodDescriptor lookupMethod(String interfaceName, String methodName) {\n-        ServiceDescriptor serviceDescriptor = lookupService(interfaceName);\n-        if (serviceDescriptor == null) {\n-            return null;\n-        }\n-\n-        List<MethodDescriptor> methods = serviceDescriptor.getMethods(methodName);\n-        if (CollectionUtils.isEmpty(methods)) {\n-            return null;\n-        }\n-        return methods.iterator().next();\n-    }\n-\n-    public List<ProviderModel> getExportedServices() {\n-        return Collections.unmodifiableList(new ArrayList<>(providers.values()));\n-    }\n-\n-    public ProviderModel lookupExportedService(String serviceKey) {\n-        return providers.get(serviceKey);\n-    }\n-\n-    public ProviderModel lookupExportedServiceWithoutGroup(String key) {\n-        return providersWithoutGroup.get(key);\n-    }\n-\n-    public List<ConsumerModel> getReferredServices() {\n-        return Collections.unmodifiableList(new ArrayList<>(consumers.values()));\n-    }\n-\n-    public ConsumerModel lookupReferredService(String serviceKey) {\n-        return consumers.get(serviceKey);\n-    }\n-\n-    @Override\n-    public void destroy() throws IllegalStateException {\n-        // currently works for unit test\n-        services.clear();\n-        consumers.clear();\n-        providers.clear();\n-        providersWithoutGroup.clear();\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.model;\r\n+\r\n+import org.apache.dubbo.common.context.FrameworkExt;\r\n+import org.apache.dubbo.common.context.LifecycleAdapter;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.config.ReferenceConfigBase;\r\n+import org.apache.dubbo.config.ServiceConfigBase;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Collections;\r\n+import java.util.List;\r\n+import java.util.Set;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+\r\n+import static org.apache.dubbo.common.BaseServiceMetadata.interfaceFromServiceKey;\r\n+import static org.apache.dubbo.common.BaseServiceMetadata.versionFromServiceKey;\r\n+\r\n+public class ServiceRepository extends LifecycleAdapter implements FrameworkExt {\r\n+\r\n+    public static final String NAME = \"repository\";\r\n+\r\n+    // services\r\n+    private ConcurrentMap<String, ServiceDescriptor> services = new ConcurrentHashMap<>();\r\n+\r\n+    // consumers\r\n+    private ConcurrentMap<String, ConsumerModel> consumers = new ConcurrentHashMap<>();\r\n+\r\n+    // providers\r\n+    private ConcurrentMap<String, ProviderModel> providers = new ConcurrentHashMap<>();\r\n+\r\n+    // useful to find a provider model quickly with serviceInterfaceName:version\r\n+    private ConcurrentMap<String, ProviderModel> providersWithoutGroup = new ConcurrentHashMap<>();\r\n+\r\n+    public ServiceRepository() {\r\n+        Set<BuiltinServiceDetector> builtinServices\r\n+                = ExtensionLoader.getExtensionLoader(BuiltinServiceDetector.class).getSupportedExtensionInstances();\r\n+        if (CollectionUtils.isNotEmpty(builtinServices)) {\r\n+            for (BuiltinServiceDetector service : builtinServices) {\r\n+                registerService(service.getService());\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public ServiceDescriptor registerService(Class<?> interfaceClazz) {\r\n+        return services.computeIfAbsent(interfaceClazz.getName(),\r\n+                _k -> new ServiceDescriptor(interfaceClazz));\r\n+    }\r\n+\r\n+    /**\r\n+     * See {@link #registerService(Class)}\r\n+     * <p>\r\n+     * we assume:\r\n+     * 1. services with different interfaces are not allowed to have the same path.\r\n+     * 2. services share the same interface but has different group/version can share the same path.\r\n+     * 3. path's default value is the name of the interface.\r\n+     *\r\n+     * @param path\r\n+     * @param interfaceClass\r\n+     * @return\r\n+     */\r\n+    public ServiceDescriptor registerService(String path, Class<?> interfaceClass) {\r\n+        ServiceDescriptor serviceDescriptor = registerService(interfaceClass);\r\n+        // if path is different with interface name, add extra path mapping\r\n+        if (!interfaceClass.getName().equals(path)) {\r\n+            services.putIfAbsent(path, serviceDescriptor);\r\n+        }\r\n+        return serviceDescriptor;\r\n+    }\r\n+\r\n+    public void unregisterService(Class<?> interfaceClazz) {\r\n+        unregisterService(interfaceClazz.getName());\r\n+    }\r\n+\r\n+    public void unregisterService(String path) {\r\n+        services.remove(path);\r\n+    }\r\n+\r\n+    public void registerConsumer(String serviceKey,\r\n+                                 ServiceDescriptor serviceDescriptor,\r\n+                                 ReferenceConfigBase<?> rc,\r\n+                                 Object proxy,\r\n+                                 ServiceMetadata serviceMetadata) {\r\n+        ConsumerModel consumerModel = new ConsumerModel(serviceMetadata.getServiceKey(), proxy, serviceDescriptor, rc,\r\n+                serviceMetadata);\r\n+        consumers.putIfAbsent(serviceKey, consumerModel);\r\n+    }\r\n+\r\n+    public void reRegisterConsumer(String newServiceKey, String serviceKey) {\r\n+        ConsumerModel consumerModel = consumers.get(serviceKey);\r\n+        consumerModel.setServiceKey(newServiceKey);\r\n+        consumers.putIfAbsent(newServiceKey, consumerModel);\r\n+        consumers.remove(serviceKey);\r\n+\r\n+    }\r\n+\r\n+    public void registerProvider(String serviceKey,\r\n+                                 Object serviceInstance,\r\n+                                 ServiceDescriptor serviceModel,\r\n+                                 ServiceConfigBase<?> serviceConfig,\r\n+                                 ServiceMetadata serviceMetadata) {\r\n+        ProviderModel providerModel = new ProviderModel(serviceKey, serviceInstance, serviceModel, serviceConfig,\r\n+                serviceMetadata);\r\n+        providers.putIfAbsent(serviceKey, providerModel);\r\n+        providersWithoutGroup.putIfAbsent(keyWithoutGroup(serviceKey), providerModel);\r\n+    }\r\n+\r\n+    private static String keyWithoutGroup(String serviceKey) {\r\n+        return interfaceFromServiceKey(serviceKey) + \":\" + versionFromServiceKey(serviceKey);\r\n+    }\r\n+\r\n+    public void reRegisterProvider(String newServiceKey, String serviceKey) {\r\n+        ProviderModel providerModel = providers.get(serviceKey);\r\n+        providerModel.setServiceKey(newServiceKey);\r\n+        providers.putIfAbsent(newServiceKey, providerModel);\r\n+        providers.remove(serviceKey);\r\n+    }\r\n+\r\n+    public List<ServiceDescriptor> getAllServices() {\r\n+        return Collections.unmodifiableList(new ArrayList<>(services.values()));\r\n+    }\r\n+\r\n+    public ServiceDescriptor lookupService(String interfaceName) {\r\n+        return services.get(interfaceName);\r\n+    }\r\n+\r\n+    public MethodDescriptor lookupMethod(String interfaceName, String methodName) {\r\n+        ServiceDescriptor serviceDescriptor = lookupService(interfaceName);\r\n+        if (serviceDescriptor == null) {\r\n+            return null;\r\n+        }\r\n+\r\n+        List<MethodDescriptor> methods = serviceDescriptor.getMethods(methodName);\r\n+        if (CollectionUtils.isEmpty(methods)) {\r\n+            return null;\r\n+        }\r\n+        return methods.iterator().next();\r\n+    }\r\n+\r\n+    public List<ProviderModel> getExportedServices() {\r\n+        return Collections.unmodifiableList(new ArrayList<>(providers.values()));\r\n+    }\r\n+\r\n+    public ProviderModel lookupExportedService(String serviceKey) {\r\n+        return providers.get(serviceKey);\r\n+    }\r\n+\r\n+    public ProviderModel lookupExportedServiceWithoutGroup(String key) {\r\n+        return providersWithoutGroup.get(key);\r\n+    }\r\n+\r\n+    public List<ConsumerModel> getReferredServices() {\r\n+        return Collections.unmodifiableList(new ArrayList<>(consumers.values()));\r\n+    }\r\n+\r\n+    public ConsumerModel lookupReferredService(String serviceKey) {\r\n+        return consumers.get(serviceKey);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() throws IllegalStateException {\r\n+        // currently works for unit test\r\n+        services.clear();\r\n+        consumers.clear();\r\n+        providers.clear();\r\n+        providersWithoutGroup.clear();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/service/Destroyable.java", "source2": "org/apache/dubbo/rpc/service/Destroyable.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,23 +1,23 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.service;\n-\n-public interface Destroyable {\n-\n-    void $destroy();\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.service;\r\n+\r\n+public interface Destroyable {\r\n+\r\n+    void $destroy();\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/service/EchoService.java", "source2": "org/apache/dubbo/rpc/service/EchoService.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,33 +1,33 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.service;\n-\n-/**\n- * Echo service.\n- * @export\n- */\n-public interface EchoService {\n-\n-    /**\n-     * echo test.\n-     *\n-     * @param message message.\n-     * @return message.\n-     */\n-    Object $echo(Object message);\n-\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.service;\r\n+\r\n+/**\r\n+ * Echo service.\r\n+ * @export\r\n+ */\r\n+public interface EchoService {\r\n+\r\n+    /**\r\n+     * echo test.\r\n+     *\r\n+     * @param message message.\r\n+     * @return message.\r\n+     */\r\n+    Object $echo(Object message);\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/service/EchoServiceDetector.java", "source2": "org/apache/dubbo/rpc/service/EchoServiceDetector.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,28 +1,28 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.service;\n-\n-import org.apache.dubbo.rpc.model.BuiltinServiceDetector;\n-\n-public class EchoServiceDetector implements BuiltinServiceDetector {\n-\n-    @Override\n-    public Class<?> getService() {\n-        return EchoService.class;\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.service;\r\n+\r\n+import org.apache.dubbo.rpc.model.BuiltinServiceDetector;\r\n+\r\n+public class EchoServiceDetector implements BuiltinServiceDetector {\r\n+\r\n+    @Override\r\n+    public Class<?> getService() {\r\n+        return EchoService.class;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/service/GenericException.java", "source2": "org/apache/dubbo/rpc/service/GenericException.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,65 +1,65 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.service;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-/**\n- * GenericException\n- *\n- * @export\n- */\n-public class GenericException extends RuntimeException {\n-\n-    private static final long serialVersionUID = -1182299763306599962L;\n-\n-    private String exceptionClass;\n-\n-    private String exceptionMessage;\n-\n-    public GenericException() {\n-    }\n-\n-    public GenericException(String exceptionClass, String exceptionMessage) {\n-        super(exceptionMessage);\n-        this.exceptionClass = exceptionClass;\n-        this.exceptionMessage = exceptionMessage;\n-    }\n-\n-    public GenericException(Throwable cause) {\n-        super(StringUtils.toString(cause));\n-        this.exceptionClass = cause.getClass().getName();\n-        this.exceptionMessage = cause.getMessage();\n-    }\n-\n-    public String getExceptionClass() {\n-        return exceptionClass;\n-    }\n-\n-    public void setExceptionClass(String exceptionClass) {\n-        this.exceptionClass = exceptionClass;\n-    }\n-\n-    public String getExceptionMessage() {\n-        return exceptionMessage;\n-    }\n-\n-    public void setExceptionMessage(String exceptionMessage) {\n-        this.exceptionMessage = exceptionMessage;\n-    }\n-\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.service;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+/**\r\n+ * GenericException\r\n+ *\r\n+ * @export\r\n+ */\r\n+public class GenericException extends RuntimeException {\r\n+\r\n+    private static final long serialVersionUID = -1182299763306599962L;\r\n+\r\n+    private String exceptionClass;\r\n+\r\n+    private String exceptionMessage;\r\n+\r\n+    public GenericException() {\r\n+    }\r\n+\r\n+    public GenericException(String exceptionClass, String exceptionMessage) {\r\n+        super(exceptionMessage);\r\n+        this.exceptionClass = exceptionClass;\r\n+        this.exceptionMessage = exceptionMessage;\r\n+    }\r\n+\r\n+    public GenericException(Throwable cause) {\r\n+        super(StringUtils.toString(cause));\r\n+        this.exceptionClass = cause.getClass().getName();\r\n+        this.exceptionMessage = cause.getMessage();\r\n+    }\r\n+\r\n+    public String getExceptionClass() {\r\n+        return exceptionClass;\r\n+    }\r\n+\r\n+    public void setExceptionClass(String exceptionClass) {\r\n+        this.exceptionClass = exceptionClass;\r\n+    }\r\n+\r\n+    public String getExceptionMessage() {\r\n+        return exceptionMessage;\r\n+    }\r\n+\r\n+    public void setExceptionMessage(String exceptionMessage) {\r\n+        this.exceptionMessage = exceptionMessage;\r\n+    }\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/service/GenericService.java", "source2": "org/apache/dubbo/rpc/service/GenericService.java", "comments": ["Line-ending 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.rpc.service;\n-\n-import java.util.concurrent.CompletableFuture;\n-\n-/**\n- * Generic service interface\n- *\n- * @export\n- */\n-public interface GenericService {\n-\n-    /**\n-     * Generic invocation\n-     *\n-     * @param method         Method name, e.g. findPerson. If there are overridden methods, parameter info is\n-     *                       required, e.g. findPerson(java.lang.String)\n-     * @param parameterTypes Parameter types\n-     * @param args           Arguments\n-     * @return invocation return value\n-     * @throws GenericException potential exception thrown from the invocation\n-     */\n-    Object $invoke(String method, String[] parameterTypes, Object[] args) throws GenericException;\n-\n-    default CompletableFuture<Object> $invokeAsync(String method, String[] parameterTypes, Object[] args) throws GenericException {\n-        Object object = $invoke(method, parameterTypes, args);\n-        if (object instanceof CompletableFuture) {\n-            return (CompletableFuture<Object>) object;\n-        }\n-        return CompletableFuture.completedFuture(object);\n-    }\n-\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.service;\r\n+\r\n+import java.util.concurrent.CompletableFuture;\r\n+\r\n+/**\r\n+ * Generic service interface\r\n+ *\r\n+ * @export\r\n+ */\r\n+public interface GenericService {\r\n+\r\n+    /**\r\n+     * Generic invocation\r\n+     *\r\n+     * @param method         Method name, e.g. findPerson. If there are overridden methods, parameter info is\r\n+     *                       required, e.g. findPerson(java.lang.String)\r\n+     * @param parameterTypes Parameter types\r\n+     * @param args           Arguments\r\n+     * @return invocation return value\r\n+     * @throws GenericException potential exception thrown from the invocation\r\n+     */\r\n+    Object $invoke(String method, String[] parameterTypes, Object[] args) throws GenericException;\r\n+\r\n+    default CompletableFuture<Object> $invokeAsync(String method, String[] parameterTypes, Object[] args) throws GenericException {\r\n+        Object object = $invoke(method, parameterTypes, args);\r\n+        if (object instanceof CompletableFuture) {\r\n+            return (CompletableFuture<Object>) object;\r\n+        }\r\n+        return CompletableFuture.completedFuture(object);\r\n+    }\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/service/GenericServiceDetector.java", "source2": "org/apache/dubbo/rpc/service/GenericServiceDetector.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,28 +1,28 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.service;\n-\n-import org.apache.dubbo.rpc.model.BuiltinServiceDetector;\n-\n-public class GenericServiceDetector implements BuiltinServiceDetector {\n-\n-    @Override\n-    public Class<?> getService() {\n-        return GenericService.class;\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.service;\r\n+\r\n+import org.apache.dubbo.rpc.model.BuiltinServiceDetector;\r\n+\r\n+public class GenericServiceDetector implements BuiltinServiceDetector {\r\n+\r\n+    @Override\r\n+    public Class<?> getService() {\r\n+        return GenericService.class;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/support/GroupServiceKeyCache.java", "source2": "org/apache/dubbo/rpc/support/GroupServiceKeyCache.java", "comments": ["Line-ending 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.rpc.support;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-\n-public class GroupServiceKeyCache {\n-\n-    private final String serviceGroup;\n-\n-    //ConcurrentMap<serviceName, ConcurrentMap<serviceVersion, ConcurrentMap<port, String>>>\n-    private final ConcurrentMap<String, ConcurrentMap<String, ConcurrentMap<Integer, String>>> serviceKeyMap;\n-\n-    public GroupServiceKeyCache(String serviceGroup) {\n-        this.serviceGroup = serviceGroup;\n-        this.serviceKeyMap = new ConcurrentHashMap<>(512);\n-    }\n-\n-    public String getServiceKey(String serviceName, String serviceVersion, int port) {\n-        ConcurrentMap<String, ConcurrentMap<Integer, String>> versionMap = serviceKeyMap.get(serviceName);\n-        if (versionMap == null) {\n-            serviceKeyMap.putIfAbsent(serviceName, new ConcurrentHashMap<>());\n-            versionMap = serviceKeyMap.get(serviceName);\n-        }\n-\n-        serviceVersion = serviceVersion == null ? \"\" : serviceVersion;\n-        ConcurrentMap<Integer, String> portMap = versionMap.get(serviceVersion);\n-        if (portMap == null) {\n-            versionMap.putIfAbsent(serviceVersion, new ConcurrentHashMap<>());\n-            portMap = versionMap.get(serviceVersion);\n-        }\n-\n-        String serviceKey = portMap.get(port);\n-        if (serviceKey == null) {\n-            serviceKey = createServiceKey(serviceName, serviceVersion, port);\n-            portMap.put(port, serviceKey);\n-        }\n-        return serviceKey;\n-    }\n-\n-    private String createServiceKey(String serviceName, String serviceVersion, int port) {\n-        StringBuilder buf = new StringBuilder();\n-        if (StringUtils.isNotEmpty(serviceGroup)) {\n-            buf.append(serviceGroup).append('/');\n-        }\n-\n-        buf.append(serviceName);\n-        if (StringUtils.isNotEmpty(serviceVersion) && !\"0.0.0\".equals(serviceVersion)) {\n-            buf.append(':').append(serviceVersion);\n-        }\n-        buf.append(':').append(port);\n-        return buf.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.rpc.support;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+\r\n+public class GroupServiceKeyCache {\r\n+\r\n+    private final String serviceGroup;\r\n+\r\n+    //ConcurrentMap<serviceName, ConcurrentMap<serviceVersion, ConcurrentMap<port, String>>>\r\n+    private final ConcurrentMap<String, ConcurrentMap<String, ConcurrentMap<Integer, String>>> serviceKeyMap;\r\n+\r\n+    public GroupServiceKeyCache(String serviceGroup) {\r\n+        this.serviceGroup = serviceGroup;\r\n+        this.serviceKeyMap = new ConcurrentHashMap<>(512);\r\n+    }\r\n+\r\n+    public String getServiceKey(String serviceName, String serviceVersion, int port) {\r\n+        ConcurrentMap<String, ConcurrentMap<Integer, String>> versionMap = serviceKeyMap.get(serviceName);\r\n+        if (versionMap == null) {\r\n+            serviceKeyMap.putIfAbsent(serviceName, new ConcurrentHashMap<>());\r\n+            versionMap = serviceKeyMap.get(serviceName);\r\n+        }\r\n+\r\n+        serviceVersion = serviceVersion == null ? \"\" : serviceVersion;\r\n+        ConcurrentMap<Integer, String> portMap = versionMap.get(serviceVersion);\r\n+        if (portMap == null) {\r\n+            versionMap.putIfAbsent(serviceVersion, new ConcurrentHashMap<>());\r\n+            portMap = versionMap.get(serviceVersion);\r\n+        }\r\n+\r\n+        String serviceKey = portMap.get(port);\r\n+        if (serviceKey == null) {\r\n+            serviceKey = createServiceKey(serviceName, serviceVersion, port);\r\n+            portMap.put(port, serviceKey);\r\n+        }\r\n+        return serviceKey;\r\n+    }\r\n+\r\n+    private String createServiceKey(String serviceName, String serviceVersion, int port) {\r\n+        StringBuilder buf = new StringBuilder();\r\n+        if (StringUtils.isNotEmpty(serviceGroup)) {\r\n+            buf.append(serviceGroup).append('/');\r\n+        }\r\n+\r\n+        buf.append(serviceName);\r\n+        if (StringUtils.isNotEmpty(serviceVersion) && !\"0.0.0\".equals(serviceVersion)) {\r\n+            buf.append(':').append(serviceVersion);\r\n+        }\r\n+        buf.append(':').append(port);\r\n+        return buf.toString();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/support/ProtocolUtils.java", "source2": "org/apache/dubbo/rpc/support/ProtocolUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,91 +1,91 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.support;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_RAW_RETURN;\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_BEAN;\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_DEFAULT;\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_NATIVE_JAVA;\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_PROTOBUF;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-\n-public class ProtocolUtils {\n-\n-    private static final ConcurrentMap<String, GroupServiceKeyCache> groupServiceKeyCacheMap = new ConcurrentHashMap<>();\n-\n-    private ProtocolUtils() {\n-    }\n-\n-    public static String serviceKey(URL url) {\n-        return serviceKey(url.getPort(), url.getPath(), url.getParameter(VERSION_KEY),\n-                url.getParameter(GROUP_KEY));\n-    }\n-\n-    public static String serviceKey(int port, String serviceName, String serviceVersion, String serviceGroup) {\n-        serviceGroup = serviceGroup == null ? \"\" : serviceGroup;\n-        GroupServiceKeyCache groupServiceKeyCache = groupServiceKeyCacheMap.get(serviceGroup);\n-        if (groupServiceKeyCache == null) {\n-            groupServiceKeyCacheMap.putIfAbsent(serviceGroup, new GroupServiceKeyCache(serviceGroup));\n-            groupServiceKeyCache = groupServiceKeyCacheMap.get(serviceGroup);\n-        }\n-        return groupServiceKeyCache.getServiceKey(serviceName, serviceVersion, port);\n-    }\n-\n-    public static boolean isGeneric(String generic) {\n-        return StringUtils.isNotEmpty(generic)\n-                && (GENERIC_SERIALIZATION_DEFAULT.equalsIgnoreCase(generic)  /* Normal generalization cal */\n-                || GENERIC_SERIALIZATION_NATIVE_JAVA.equalsIgnoreCase(generic) /* Streaming generalization call supporting jdk serialization */\n-                || GENERIC_SERIALIZATION_BEAN.equalsIgnoreCase(generic)\n-                || GENERIC_SERIALIZATION_PROTOBUF.equalsIgnoreCase(generic)\n-                || GENERIC_RAW_RETURN.equalsIgnoreCase(generic));\n-\n-    }\n-\n-    public static boolean isValidGenericValue(String generic) {\n-        return isGeneric(generic) || Boolean.FALSE.toString().equalsIgnoreCase(generic);\n-\n-    }\n-\n-    public static boolean isDefaultGenericSerialization(String generic) {\n-        return isGeneric(generic)\n-                && GENERIC_SERIALIZATION_DEFAULT.equalsIgnoreCase(generic);\n-    }\n-\n-    public static boolean isJavaGenericSerialization(String generic) {\n-        return isGeneric(generic)\n-                && GENERIC_SERIALIZATION_NATIVE_JAVA.equalsIgnoreCase(generic);\n-    }\n-\n-    public static boolean isBeanGenericSerialization(String generic) {\n-        return isGeneric(generic) && GENERIC_SERIALIZATION_BEAN.equals(generic);\n-    }\n-\n-    public static boolean isProtobufGenericSerialization(String generic) {\n-        return isGeneric(generic) && GENERIC_SERIALIZATION_PROTOBUF.equals(generic);\n-    }\n-\n-    public static boolean isGenericReturnRawResult(String generic) {\n-        return GENERIC_RAW_RETURN.equals(generic);\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.support;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_RAW_RETURN;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_BEAN;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_DEFAULT;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_NATIVE_JAVA;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_PROTOBUF;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+\r\n+public class ProtocolUtils {\r\n+\r\n+    private static final ConcurrentMap<String, GroupServiceKeyCache> groupServiceKeyCacheMap = new ConcurrentHashMap<>();\r\n+\r\n+    private ProtocolUtils() {\r\n+    }\r\n+\r\n+    public static String serviceKey(URL url) {\r\n+        return serviceKey(url.getPort(), url.getPath(), url.getParameter(VERSION_KEY),\r\n+                url.getParameter(GROUP_KEY));\r\n+    }\r\n+\r\n+    public static String serviceKey(int port, String serviceName, String serviceVersion, String serviceGroup) {\r\n+        serviceGroup = serviceGroup == null ? \"\" : serviceGroup;\r\n+        GroupServiceKeyCache groupServiceKeyCache = groupServiceKeyCacheMap.get(serviceGroup);\r\n+        if (groupServiceKeyCache == null) {\r\n+            groupServiceKeyCacheMap.putIfAbsent(serviceGroup, new GroupServiceKeyCache(serviceGroup));\r\n+            groupServiceKeyCache = groupServiceKeyCacheMap.get(serviceGroup);\r\n+        }\r\n+        return groupServiceKeyCache.getServiceKey(serviceName, serviceVersion, port);\r\n+    }\r\n+\r\n+    public static boolean isGeneric(String generic) {\r\n+        return StringUtils.isNotEmpty(generic)\r\n+                && (GENERIC_SERIALIZATION_DEFAULT.equalsIgnoreCase(generic)  /* Normal generalization cal */\r\n+                || GENERIC_SERIALIZATION_NATIVE_JAVA.equalsIgnoreCase(generic) /* Streaming generalization call supporting jdk serialization */\r\n+                || GENERIC_SERIALIZATION_BEAN.equalsIgnoreCase(generic)\r\n+                || GENERIC_SERIALIZATION_PROTOBUF.equalsIgnoreCase(generic)\r\n+                || GENERIC_RAW_RETURN.equalsIgnoreCase(generic));\r\n+\r\n+    }\r\n+\r\n+    public static boolean isValidGenericValue(String generic) {\r\n+        return isGeneric(generic) || Boolean.FALSE.toString().equalsIgnoreCase(generic);\r\n+\r\n+    }\r\n+\r\n+    public static boolean isDefaultGenericSerialization(String generic) {\r\n+        return isGeneric(generic)\r\n+                && GENERIC_SERIALIZATION_DEFAULT.equalsIgnoreCase(generic);\r\n+    }\r\n+\r\n+    public static boolean isJavaGenericSerialization(String generic) {\r\n+        return isGeneric(generic)\r\n+                && GENERIC_SERIALIZATION_NATIVE_JAVA.equalsIgnoreCase(generic);\r\n+    }\r\n+\r\n+    public static boolean isBeanGenericSerialization(String generic) {\r\n+        return isGeneric(generic) && GENERIC_SERIALIZATION_BEAN.equals(generic);\r\n+    }\r\n+\r\n+    public static boolean isProtobufGenericSerialization(String generic) {\r\n+        return isGeneric(generic) && GENERIC_SERIALIZATION_PROTOBUF.equals(generic);\r\n+    }\r\n+\r\n+    public static boolean isGenericReturnRawResult(String generic) {\r\n+        return GENERIC_RAW_RETURN.equals(generic);\r\n+    }\r\n+}\r\n"}, {"source1": "security/serialize.blockedlist", "source2": "security/serialize.blockedlist", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,167 +1,167 @@\n-#\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-aj.org.objectweb.asm.\n-br.com.anteros.\n-ch.qos.logback.\n-clojure.core$constantly\n-clojure.main$eval_opt\n-com.alibaba.citrus.springext.support.parser.abstractnamedproxybeandefinitionparser$proxytargetfactory\n-com.alibaba.citrus.springext.util.springextutil.abstractproxy\n-com.alibaba.druid.pool.druiddatasource\n-com.alibaba.druid.stat.jdbcdatasourcestat\n-com.alibaba.fastjson.annotation\n-com.alipay.custrelation.service.model.redress.pair\n-com.caucho.\n-com.ibatis.\n-com.mchange\n-com.mysql.cj.jdbc.admin.\n-com.mysql.cj.jdbc.mysqlconnectionpooldatasource\n-com.mysql.cj.jdbc.mysqldatasource\n-com.mysql.cj.jdbc.mysqlxadatasource\n-com.mysql.cj.log.\n-com.p6spy.engine.\n-com.rometools.rome.feed.impl.equalsbean\n-com.rometools.rome.feed.impl.tostringbean\n-com.sun.\n-com.taobao.eagleeye.wrapper\n-com.zaxxer.hikari.\n-flex.messaging.util.concurrent.\n-java.awt.i\n-java.awt.p\n-java.beans.expression\n-java.io.closeable\n-java.io.serializable\n-java.lang.autocloseable\n-java.lang.class\n-java.lang.cloneable\n-java.lang.iterable\n-java.lang.object\n-java.lang.readable\n-java.lang.runnable\n-java.lang.thread\n-java.lang.unixprocess\n-java.net.inetaddress\n-java.net.socket\n-java.net.url\n-java.rmi\n-java.security.signedobject\n-java.util.collection\n-java.util.eventlistener\n-java.util.jar.\n-java.util.logging.\n-java.util.prefs.\n-java.util.serviceloader$lazyiterator\n-javassist.\n-javax.activation.\n-javax.imageio.imageio$containsfilter\n-javax.imageio.spi.serviceregistry\n-javax.management.\n-javax.naming.\n-javax.net.\n-javax.print.\n-javax.script.\n-javax.sound.\n-javax.swing.j\n-javax.tools.\n-javax.xml\n-jdk.internal.\n-jodd.db.connection.\n-junit.\n-net.bytebuddy.dynamic.loading.bytearrayclassloader\n-net.sf.cglib.\n-net.sf.ehcache.hibernate.\n-net.sf.ehcache.transaction.manager.\n-oracle.jdbc.\n-oracle.jms.aq\n-oracle.net\n-org.aoju.bus.proxy.provider.\n-org.apache.activemq.activemqconnectionfactory\n-org.apache.activemq.activemqxaconnectionfactory\n-org.apache.activemq.jms.pool.\n-org.apache.activemq.pool.\n-org.apache.activemq.spring.\n-org.apache.aries.transaction.\n-org.apache.axis2.jaxws.spi.handler.\n-org.apache.axis2.transport.jms.\n-org.apache.bcel\n-org.apache.carbondata.core.scan.expression.expressionresult\n-org.apache.catalina.\n-org.apache.cocoon.\n-org.apache.commons.beanutils\n-org.apache.commons.collections.comparators.\n-org.apache.commons.collections.functors\n-org.apache.commons.collections.functors.\n-org.apache.commons.collections.transformer\n-org.apache.commons.collections4.comparators\n-org.apache.commons.collections4.functors\n-org.apache.commons.collections4.transformer\n-org.apache.commons.configuration\n-org.apache.commons.dbcp\n-org.apache.commons.fileupload\n-org.apache.commons.jelly.\n-org.apache.commons.logging.\n-org.apache.commons.proxy.\n-org.apache.cxf.jaxrs.provider.\n-org.apache.hadoop.shaded.com.zaxxer.hikari.\n-org.apache.http.auth.\n-org.apache.http.conn.\n-org.apache.http.cookie.\n-org.apache.http.impl.\n-org.apache.ibatis.datasource\n-org.apache.ibatis.executor.\n-org.apache.ibatis.javassist.\n-org.apache.ibatis.ognl.\n-org.apache.ibatis.parsing.\n-org.apache.ibatis.reflection.\n-org.apache.ibatis.scripting.\n-org.apache.ignite.cache.jta.\n-org.apache.log4j.\n-org.apache.logging.\n-org.apache.myfaces.context.servlet\n-org.apache.openjpa.ee.\n-org.apache.shiro.jndi.\n-org.apache.shiro.realm.\n-org.apache.tomcat\n-org.apache.wicket.util\n-org.apache.xalan\n-org.apache.xbean.\n-org.apache.xpath.xpathcontext\n-org.codehaus.groovy.runtime\n-org.codehaus.jackson.\n-org.eclipse.jetty.\n-org.geotools.filter.constantexpression\n-org.h2.jdbcx.\n-org.h2.server.\n-org.hibernate\n-org.javasimon.\n-org.jaxen.\n-org.jboss\n-org.jdom.\n-org.jdom2.transform.\n-org.logicalcobwebs.\n-org.mortbay.jetty.\n-org.mozilla.javascript\n-org.objectweb.asm.\n-org.osjava.sj.\n-org.python.core\n-org.quartz.\n-org.slf4j.\n-org.springframework.\n-org.yaml.snakeyaml.tokens.directivetoken\n+#\r\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+aj.org.objectweb.asm.\r\n+br.com.anteros.\r\n+ch.qos.logback.\r\n+clojure.core$constantly\r\n+clojure.main$eval_opt\r\n+com.alibaba.citrus.springext.support.parser.abstractnamedproxybeandefinitionparser$proxytargetfactory\r\n+com.alibaba.citrus.springext.util.springextutil.abstractproxy\r\n+com.alibaba.druid.pool.druiddatasource\r\n+com.alibaba.druid.stat.jdbcdatasourcestat\r\n+com.alibaba.fastjson.annotation\r\n+com.alipay.custrelation.service.model.redress.pair\r\n+com.caucho.\r\n+com.ibatis.\r\n+com.mchange\r\n+com.mysql.cj.jdbc.admin.\r\n+com.mysql.cj.jdbc.mysqlconnectionpooldatasource\r\n+com.mysql.cj.jdbc.mysqldatasource\r\n+com.mysql.cj.jdbc.mysqlxadatasource\r\n+com.mysql.cj.log.\r\n+com.p6spy.engine.\r\n+com.rometools.rome.feed.impl.equalsbean\r\n+com.rometools.rome.feed.impl.tostringbean\r\n+com.sun.\r\n+com.taobao.eagleeye.wrapper\r\n+com.zaxxer.hikari.\r\n+flex.messaging.util.concurrent.\r\n+java.awt.i\r\n+java.awt.p\r\n+java.beans.expression\r\n+java.io.closeable\r\n+java.io.serializable\r\n+java.lang.autocloseable\r\n+java.lang.class\r\n+java.lang.cloneable\r\n+java.lang.iterable\r\n+java.lang.object\r\n+java.lang.readable\r\n+java.lang.runnable\r\n+java.lang.thread\r\n+java.lang.unixprocess\r\n+java.net.inetaddress\r\n+java.net.socket\r\n+java.net.url\r\n+java.rmi\r\n+java.security.signedobject\r\n+java.util.collection\r\n+java.util.eventlistener\r\n+java.util.jar.\r\n+java.util.logging.\r\n+java.util.prefs.\r\n+java.util.serviceloader$lazyiterator\r\n+javassist.\r\n+javax.activation.\r\n+javax.imageio.imageio$containsfilter\r\n+javax.imageio.spi.serviceregistry\r\n+javax.management.\r\n+javax.naming.\r\n+javax.net.\r\n+javax.print.\r\n+javax.script.\r\n+javax.sound.\r\n+javax.swing.j\r\n+javax.tools.\r\n+javax.xml\r\n+jdk.internal.\r\n+jodd.db.connection.\r\n+junit.\r\n+net.bytebuddy.dynamic.loading.bytearrayclassloader\r\n+net.sf.cglib.\r\n+net.sf.ehcache.hibernate.\r\n+net.sf.ehcache.transaction.manager.\r\n+oracle.jdbc.\r\n+oracle.jms.aq\r\n+oracle.net\r\n+org.aoju.bus.proxy.provider.\r\n+org.apache.activemq.activemqconnectionfactory\r\n+org.apache.activemq.activemqxaconnectionfactory\r\n+org.apache.activemq.jms.pool.\r\n+org.apache.activemq.pool.\r\n+org.apache.activemq.spring.\r\n+org.apache.aries.transaction.\r\n+org.apache.axis2.jaxws.spi.handler.\r\n+org.apache.axis2.transport.jms.\r\n+org.apache.bcel\r\n+org.apache.carbondata.core.scan.expression.expressionresult\r\n+org.apache.catalina.\r\n+org.apache.cocoon.\r\n+org.apache.commons.beanutils\r\n+org.apache.commons.collections.comparators.\r\n+org.apache.commons.collections.functors\r\n+org.apache.commons.collections.functors.\r\n+org.apache.commons.collections.transformer\r\n+org.apache.commons.collections4.comparators\r\n+org.apache.commons.collections4.functors\r\n+org.apache.commons.collections4.transformer\r\n+org.apache.commons.configuration\r\n+org.apache.commons.dbcp\r\n+org.apache.commons.fileupload\r\n+org.apache.commons.jelly.\r\n+org.apache.commons.logging.\r\n+org.apache.commons.proxy.\r\n+org.apache.cxf.jaxrs.provider.\r\n+org.apache.hadoop.shaded.com.zaxxer.hikari.\r\n+org.apache.http.auth.\r\n+org.apache.http.conn.\r\n+org.apache.http.cookie.\r\n+org.apache.http.impl.\r\n+org.apache.ibatis.datasource\r\n+org.apache.ibatis.executor.\r\n+org.apache.ibatis.javassist.\r\n+org.apache.ibatis.ognl.\r\n+org.apache.ibatis.parsing.\r\n+org.apache.ibatis.reflection.\r\n+org.apache.ibatis.scripting.\r\n+org.apache.ignite.cache.jta.\r\n+org.apache.log4j.\r\n+org.apache.logging.\r\n+org.apache.myfaces.context.servlet\r\n+org.apache.openjpa.ee.\r\n+org.apache.shiro.jndi.\r\n+org.apache.shiro.realm.\r\n+org.apache.tomcat\r\n+org.apache.wicket.util\r\n+org.apache.xalan\r\n+org.apache.xbean.\r\n+org.apache.xpath.xpathcontext\r\n+org.codehaus.groovy.runtime\r\n+org.codehaus.jackson.\r\n+org.eclipse.jetty.\r\n+org.geotools.filter.constantexpression\r\n+org.h2.jdbcx.\r\n+org.h2.server.\r\n+org.hibernate\r\n+org.javasimon.\r\n+org.jaxen.\r\n+org.jboss\r\n+org.jdom.\r\n+org.jdom2.transform.\r\n+org.logicalcobwebs.\r\n+org.mortbay.jetty.\r\n+org.mozilla.javascript\r\n+org.objectweb.asm.\r\n+org.osjava.sj.\r\n+org.python.core\r\n+org.quartz.\r\n+org.slf4j.\r\n+org.springframework.\r\n+org.yaml.snakeyaml.tokens.directivetoken\r\n sun.rmi.server.unicastref\n"}]}
