Index: lld/COFF/InputFiles.h =================================================================== --- lld/COFF/InputFiles.h +++ lld/COFF/InputFiles.h @@ -14,6 +14,7 @@ #include "lld/Common/LLVM.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/DenseSet.h" +#include "llvm/DebugInfo/CodeView/TypeRecord.h" #include "llvm/LTO/LTO.h" #include "llvm/Object/Archive.h" #include "llvm/Object/COFF.h" @@ -124,6 +125,9 @@ // Returns the underying COFF file. COFFObjectFile *getCOFFObj() { return COFFObj.get(); } + // Whether the .obj was already merged into the final PDB or not + bool wasProcessedForPDB() const { return !!ModuleDBI; } + static std::vector Instances; // Flags in the absolute @feat.00 symbol if it is present. These usually @@ -144,6 +148,10 @@ // if we are not producing a PDB. llvm::pdb::DbiModuleDescriptorBuilder *ModuleDBI = nullptr; + // If the .obj represents a precompiled types type map, we need the signature + // through the following record + llvm::Optional EndPrecomp; + private: void initializeChunks(); void initializeSymbols(); Index: lld/COFF/PDB.cpp =================================================================== --- lld/COFF/PDB.cpp +++ lld/COFF/PDB.cpp @@ -48,6 +48,7 @@ #include "llvm/Object/COFF.h" #include "llvm/Support/BinaryByteStream.h" #include "llvm/Support/Endian.h" +#include "llvm/Support/Errc.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/JamCRC.h" #include "llvm/Support/Path.h" @@ -79,6 +80,7 @@ SmallVector TPIMap; SmallVector IPIMap; bool IsTypeServerMap = false; + bool IsPrecompiledTypeMap = false; }; class PDBLinker { @@ -102,7 +104,7 @@ void addObjectsToPDB(); /// Link CodeView from a single object file into the PDB. - void addObjFile(ObjFile *File); + void addObjFile(ObjFile *File, CVIndexMap *CV = nullptr); /// Produce a mapping from the type and item indices used in the object /// file to those in the destination PDB. @@ -121,6 +123,8 @@ Expected maybeMergeTypeServerPDB(ObjFile *File, TypeServer2Record &TS); + const CVIndexMap &aquirePrecompObj(ObjFile *File, PrecompRecord &Precomp); + /// Add the section map and section contributions to the PDB. void addSections(ArrayRef OutputSections, ArrayRef SectionTable); @@ -166,6 +170,9 @@ /// Type index mappings of type server PDBs that we've loaded so far. std::map TypeServerIndexMappings; + /// Type index mappings of precompiled type type map that we've loaded so far. + std::map PrecompTypeIndexMappings; + /// List of TypeServer PDBs which cannot be loaded. /// Cached to prevent repeated load attempts. std::set MissingTypeServerPDBs; @@ -245,18 +252,19 @@ }); } -static Optional -maybeReadTypeServerRecord(CVTypeArray &Types) { +template +static Optional +maybeReadRecord(CVTypeArray &Types, const uint32_t RecordTypeValue) { auto I = Types.begin(); if (I == Types.end()) return None; const CVType &Type = *I; - if (Type.kind() != LF_TYPESERVER2) + if (Type.kind() != RecordTypeValue) return None; - TypeServer2Record TS; - if (auto EC = TypeDeserializer::deserializeAs(const_cast(Type), TS)) - fatal("error reading type server record: " + toString(std::move(EC))); - return std::move(TS); + RecordType R; + if (auto EC = TypeDeserializer::deserializeAs(const_cast(Type), R)) + fatal("error reading record: " + toString(std::move(EC))); + return std::move(R); } Expected PDBLinker::mergeDebugT(ObjFile *File, @@ -264,7 +272,10 @@ ScopedTimer T(TypeMergingTimer); ArrayRef Data = getDebugSection(File, ".debug$T"); + // Try again, precompiled headers use .debug$P instead of .debug$T if (Data.empty()) + Data = getDebugSection(File, ".debug$P"); + if (Data.empty()) return ObjectIndexMap; BinaryByteStream Stream(Data, support::little); @@ -275,11 +286,30 @@ // Look through type servers. If we've already seen this type server, don't // merge any type information. - if (Optional TS = maybeReadTypeServerRecord(Types)) - return maybeMergeTypeServerPDB(File, *TS); + if (Optional TS = + maybeReadRecord(Types, LF_TYPESERVER2)) + return maybeMergeTypeServerPDB(File, *TS); - // This is a /Z7 object. Fill in the temporary, caller-provided - // ObjectIndexMap. + // This is a /Z7 object. + // If the current .obj was compiled with /Yu, then process the corresponding + // precompiled .obj (/Yc) first. Some type indices in the current .obj are + // referencing data in the precompiled .obj, so we need both to be loaded. + if (Optional Precomp = + maybeReadRecord(Types, LF_PRECOMP)) { + const CVIndexMap &PrecompIndexMap = aquirePrecompObj(File, *Precomp); + assert(PrecompIndexMap.IsPrecompiledTypeMap); + + if (PrecompIndexMap.TPIMap.empty()) + return PrecompIndexMap; + + // merge in the precompiled type indices + assert(Precomp->getStartTypeIndex() == TypeIndex::FirstNonSimpleIndex); + assert(Precomp->getTypesCount() <= PrecompIndexMap.TPIMap.size()); + ObjectIndexMap.TPIMap.append(PrecompIndexMap.TPIMap.begin(), + PrecompIndexMap.TPIMap.begin() + (Precomp->getTypesCount() + 1)); + } + + // Fill in the temporary, caller-provided ObjectIndexMap. if (Config->DebugGHashes) { ArrayRef Hashes; std::vector OwnedHashes; @@ -291,15 +321,18 @@ } if (auto Err = mergeTypeAndIdRecords(GlobalIDTable, GlobalTypeTable, - ObjectIndexMap.TPIMap, Types, Hashes)) + ObjectIndexMap.TPIMap, Types, Hashes, + File->EndPrecomp)) fatal("codeview::mergeTypeAndIdRecords failed: " + toString(std::move(Err))); } else { if (auto Err = mergeTypeAndIdRecords(IDTable, TypeTable, - ObjectIndexMap.TPIMap, Types)) + ObjectIndexMap.TPIMap, Types, + File->EndPrecomp)) fatal("codeview::mergeTypeAndIdRecords failed: " + toString(std::move(Err))); } + return ObjectIndexMap; } @@ -307,8 +340,12 @@ tryToLoadPDB(const GUID &GuidFromObj, StringRef TSPath) { ErrorOr> MBOrErr = MemoryBuffer::getFile( TSPath, /*FileSize=*/-1, /*RequiresNullTerminator=*/false); - if (!MBOrErr) + if (!MBOrErr) { + if (MBOrErr.getError() == llvm::errc::no_such_file_or_directory) + return make_error(pdb::generic_error_code::invalid_path, + TSPath); return errorCodeToError(MBOrErr.getError()); + } std::unique_ptr ThisSession; if (auto EC = pdb::NativeSession::createFromPdb( @@ -330,7 +367,7 @@ // must match the GUID specified in the TypeServer2 record. if (ExpectedInfo->getGuid() != GuidFromObj) return make_error( - pdb::generic_error_code::type_server_not_found, TSPath); + pdb::generic_error_code::type_server_does_not_match, TSPath); return std::move(NS); } @@ -360,7 +397,7 @@ // 2. Next to the object file or archive file auto ExpectedSession = tryToLoadPDB(TSId, TSPath); if (!ExpectedSession) { - consumeError(ExpectedSession.takeError()); + Error initialErr = std::move(ExpectedSession.takeError()); StringRef LocalPath = !File->ParentName.empty() ? File->ParentName : File->getName(); SmallString<128> Path = sys::path::parent_path(LocalPath); @@ -367,11 +404,25 @@ sys::path::append( Path, sys::path::filename(TSPath, sys::path::Style::windows)); ExpectedSession = tryToLoadPDB(TSId, Path); + if (!ExpectedSession) { + // Do this to display the full PDB path in the error log + consumeError(ExpectedSession.takeError()); + ExpectedSession = std::move(initialErr); + } } + if (auto E = ExpectedSession.takeError()) { TypeServerIndexMappings.erase(TSId); MissingTypeServerPDBs.emplace(TSId); - return std::move(E); + if (E.isA()) + return std::move(E); + + // We need the full path to the PDB when an error occurs + std::string genericErr = toString(std::move(E)); + genericErr += " "; + genericErr += TSPath; + + return make_error(genericErr); } pdb::NativeSession *Session = ExpectedSession->get(); @@ -397,9 +448,11 @@ auto IpiHashes = GloballyHashedType::hashIds(ExpectedIpi->typeArray(), TpiHashes); + Optional EndPrecomp; // Merge TPI first, because the IPI stream will reference type indices. if (auto Err = mergeTypeRecords(GlobalTypeTable, IndexMap.TPIMap, - ExpectedTpi->typeArray(), TpiHashes)) + ExpectedTpi->typeArray(), TpiHashes, + EndPrecomp)) fatal("codeview::mergeTypeRecords failed: " + toString(std::move(Err))); // Merge IPI. @@ -422,6 +475,89 @@ return IndexMap; } +const CVIndexMap &PDBLinker::aquirePrecompObj(ObjFile *File, + PrecompRecord &Precomp) { + + // First, check if we already loaded the precompiled types .obj with this + // signature. Return the type index mapping if we have it. + auto Insertion = PrecompTypeIndexMappings.insert( + {Precomp.getSignature(), CVIndexMap()}); + CVIndexMap &IndexMap = Insertion.first->second; + if (!Insertion.second) + return IndexMap; + + // Mark this map as a precompiled types map. + IndexMap.IsPrecompiledTypeMap = true; + + SmallString<128> PrecompPath = Precomp.getPrecompFilePath(); + sys::fs::make_absolute(PrecompPath); + sys::path::native(PrecompPath, sys::path::Style::windows); + + ObjFile *CurrentFile = nullptr; + SmallString<128> CurrentPath; + + // link.exe assumes that a precompiled object must always be provided + // on the command-line + // First, try comparing the whole path if possible + for (ObjFile *f : ObjFile::Instances) { + CurrentPath = f->getName(); + sys::fs::make_absolute(CurrentPath); + sys::path::native(CurrentPath, sys::path::Style::windows); + + if (CurrentPath.equals_lower(PrecompPath)) { + CurrentFile = f; + break; + } + CurrentPath.clear(); + } + + if (CurrentPath.empty()) + { + // If the precomp object was on a different path, we can still use it, + // although only if its unique on the command-line + StringRef PrecompName = sys::path::filename(PrecompPath); + CurrentPath.clear(); + for (ObjFile *f : ObjFile::Instances) { + SmallString<128> path = f->getName(); + sys::fs::make_absolute(path); + sys::path::native(path, sys::path::Style::windows); + StringRef filename = sys::path::filename(path); + + if (!filename.equals_lower(PrecompName)) + continue; + + if (!CurrentPath.empty()) + fatal("the precompiled object name must appear once on the " + "command-line: " + PrecompName); + + CurrentPath = filename; + CurrentFile = f; + } + } + + if (!CurrentPath.empty()) + { + addObjFile(CurrentFile, &IndexMap); + + if (!CurrentFile->EndPrecomp) + fatal(CurrentPath + " is not a precompiled .obj"); + + if (Precomp.getSignature() != CurrentFile->EndPrecomp->getSignature()) + warn("the signature of the precompiled file " + CurrentPath + " does not " + "match; the file(s) might be out of date. Linking as if no debug " + "info."); + + return IndexMap; + } + + warn("dependent precompiled object not found: " + PrecompPath + + ", linking as if no debug info (" + File->getName() + ")"); + + static CVIndexMap emptyMap; + emptyMap.IsPrecompiledTypeMap = true; + return emptyMap; +} + static bool remapTypeIndex(TypeIndex &TI, ArrayRef TypeIndexMap) { if (TI.isSimple()) return true; @@ -780,7 +916,10 @@ ".debug$S"); } -void PDBLinker::addObjFile(ObjFile *File) { +void PDBLinker::addObjFile(ObjFile *File, CVIndexMap *CV) { + if (File->wasProcessedForPDB()) + return; + // Add a module descriptor for every object file. We need to put an absolute // path to the object into the PDB. If this is a plain object, we make its // path absolute. If it's an object in an archive, we make the archive path @@ -799,10 +938,11 @@ // the PDB first, so that we can get the map from object file type and item // indices to PDB type and item indices. CVIndexMap ObjectIndexMap; - auto IndexMapResult = mergeDebugT(File, ObjectIndexMap); + auto IndexMapResult = mergeDebugT(File, CV ? *CV : ObjectIndexMap); // If the .debug$T sections fail to merge, assume there is no debug info. if (!IndexMapResult) { + //if (!OPT_ignore_LNK4099) warn("Type server PDB for " + Name + " is invalid, ignoring debug info. " + toString(IndexMapResult.takeError())); return; @@ -945,6 +1085,7 @@ addTypeInfo(Builder.getTpiBuilder(), TypeTable); addTypeInfo(Builder.getIpiBuilder(), IDTable); } + T2.stop(); ScopedTimer T3(GlobalsLayoutTimer); Index: lld/test/COFF/Inputs/precomp-a.yaml =================================================================== --- lld/test/COFF/Inputs/precomp-a.yaml +++ lld/test/COFF/Inputs/precomp-a.yaml @@ -0,0 +1,320 @@ +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_AMD64 + Characteristics: [ ] +sections: + - Name: .drectve + Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ] + Alignment: 1 + SectionData: 2020202D494E434C5544453A5F5F40405F50636853796D5F403030405568656D556F6F77556776686755786C7575556B6976786C6E6B556B6976786C6E6B4F6C79714036303445453535424437323731373742202F44454641554C544C49423A224C4942434D5422202F44454641554C544C49423A224F4C444E414D45532220 + - Name: '.debug$S' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + SectionData: 04000000F100000067000000290001110E981611463A5C73766E5C6C6C645C746573745C434F46465C707265636F6D705C612E6F626A003A003C1101600000D00013000000975E010013000000975E01004D6963726F736F667420285229204F7074696D697A696E6720436F6D70696C65720000F10000004E0000002A00471100000000000000000000000012000000040000000D00000009140000000000000000006D61696E001C001210280000000000000000000000000000000000000000000042110002004F110000F20000003800000000000000000000001200000020000000040000002C000000000000000400008004000000050000800B000000060000800D00000007000080F40000003800000001000000000000002A00000010018ABCEA62EB23FB98D2EBB93681A648DF0000510000001001EFE82D334B06E66A15DE7DA3C6C3302C0000F30000007400000000663A5C73766E5C6C6C645C746573745C636F66665C707265636F6D705C707265636F6D702E70636800663A5C73766E5C6C6C645C746573745C636F66665C707265636F6D705C707265636F6D702E6800663A5C73766E5C6C6C645C746573745C636F66665C707265636F6D705C612E63707000F10000000800000006004C1113140000 + Subsections: + - !Symbols + Records: + - Kind: S_OBJNAME + ObjNameSym: + Signature: 286693390 + ObjectName: 'F:\svn\lld\test\COFF\precomp\a.obj' + - Kind: S_COMPILE3 + Compile3Sym: + Flags: [ SecurityChecks, HotPatch ] + Machine: X64 + FrontendMajor: 19 + FrontendMinor: 0 + FrontendBuild: 24215 + FrontendQFE: 1 + BackendMajor: 19 + BackendMinor: 0 + BackendBuild: 24215 + BackendQFE: 1 + Version: 'Microsoft (R) Optimizing Compiler' + - !Symbols + Records: + - Kind: S_GPROC32_ID + ProcSym: + CodeSize: 18 + DbgStart: 4 + DbgEnd: 13 + FunctionType: 5129 + Flags: [ ] + DisplayName: main + - Kind: S_FRAMEPROC + FrameProcSym: + TotalFrameBytes: 40 + PaddingFrameBytes: 0 + OffsetToPadding: 0 + BytesOfCalleeSavedRegisters: 0 + OffsetOfExceptionHandler: 0 + SectionIdOfExceptionHandler: 0 + Flags: [ AsynchronousExceptionHandling, OptimizedForSpeed ] + - Kind: S_PROC_ID_END + ScopeEndSym: + - !Lines + CodeSize: 18 + Flags: [ ] + RelocOffset: 0 + RelocSegment: 0 + Blocks: + - FileName: 'f:\svn\lld\test\coff\precomp\a.cpp' + Lines: + - Offset: 0 + LineStart: 4 + IsStatement: true + EndDelta: 0 + - Offset: 4 + LineStart: 5 + IsStatement: true + EndDelta: 0 + - Offset: 11 + LineStart: 6 + IsStatement: true + EndDelta: 0 + - Offset: 13 + LineStart: 7 + IsStatement: true + EndDelta: 0 + Columns: + - !FileChecksums + Checksums: + - FileName: 'f:\svn\lld\test\coff\precomp\precomp.pch' + Kind: None + Checksum: '' + - FileName: 'f:\svn\lld\test\coff\precomp\precomp.h' + Kind: MD5 + Checksum: 8ABCEA62EB23FB98D2EBB93681A648DF + - FileName: 'f:\svn\lld\test\coff\precomp\a.cpp' + Kind: MD5 + Checksum: EFE82D334B06E66A15DE7DA3C6C3302C + - !StringTable + Strings: + - 'f:\svn\lld\test\coff\precomp\precomp.pch' + - 'f:\svn\lld\test\coff\precomp\precomp.h' + - 'f:\svn\lld\test\coff\precomp\a.cpp' + - !Symbols + Records: + - Kind: S_BUILDINFO + BuildInfoSym: + BuildId: 5139 + Relocations: + - VirtualAddress: 156 + SymbolName: main + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 160 + SymbolName: main + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 212 + SymbolName: main + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 216 + SymbolName: main + Type: IMAGE_REL_AMD64_SECTION + - Name: '.debug$T' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + SectionData: 040000003A00091500100000070400000E981611663A5C73766E5C6C6C645C746573745C636F66665C707265636F6D705C707265636F6D702E6F626A00F3F2F10A00011201000000700000000E0008107400000000000100071400001200011600000000291000006D61696E00F3F2F116000116000000000814000046756E6374696F6E00F3F2F12600051600000000463A5C73766E5C6C6C645C746573745C434F46465C707265636F6D7000F3F2F14E00051600000000433A5C50726F6772616D2046696C65732028783836295C4D6963726F736F66742056697375616C2053747564696F2031342E305C56435C42494E5C616D6436345C636C2E65786500F2000516000000002D5A37202D5975707265636F6D702E68202D63202D4D54202D4922433A5C50726F6772616D2046696C65732028783836295C4D6963726F736F66742056697375616C2053747564696F2031342E305C56435C494E434C55444522202D4922433A5C50726F6772616D2046696C65732028783836295C4D6963726F736F66742056697375616C2053747564696F2031342E305C56435C41544C4D46435C494E434C55444522202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F7773204B6974735C31305C696E636C7564655C31302E302E31363239392E305C756372742200F2F1F600051600000000202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F7773204B6974735C4E4554465853444B5C342E362E315C696E636C7564655C756D22202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F7773204B6974735C31305C696E636C7564655C31302E302E31363239392E305C73686172656422202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F7773204B6974735C31305C696E636C7564655C31302E302E31363239392E305C756D22202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F777300F10E000416020000000D1400000E140000320005160F140000204B6974735C31305C696E636C7564655C31302E302E31363239392E305C77696E727422202D5450202D58000E00051600000000612E63707000F2F12E00051600000000463A5C73766E5C6C6C645C746573745C434F46465C707265636F6D705C76633134302E70646200F11A00031605000B1400000C140000111400001214000010140000F2F1 + Types: + - Kind: LF_PRECOMP + Precomp: + StartTypeIndex: 4096 + TypesCount: 1031 + Signature: 286693390 + PrecompFilePath: 'f:\svn\lld\test\coff\precomp\precomp.obj' + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 112 ] + - Kind: LF_PROCEDURE + Procedure: + ReturnType: 116 + CallConv: NearC + Options: [ None ] + ParameterCount: 1 + ArgumentList: 5127 + - Kind: LF_FUNC_ID + FuncId: + ParentScope: 0 + FunctionType: 4137 + Name: main + - Kind: LF_FUNC_ID + FuncId: + ParentScope: 0 + FunctionType: 5128 + Name: Function + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'F:\svn\lld\test\COFF\precomp' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\cl.exe' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: '-Z7 -Yuprecomp.h -c -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt"' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: ' -I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\shared" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um" -I"C:\Program Files (x86)\Windows' + - Kind: LF_SUBSTR_LIST + StringList: + StringIndices: [ 5133, 5134 ] + - Kind: LF_STRING_ID + StringId: + Id: 5135 + String: ' Kits\10\include\10.0.16299.0\winrt" -TP -X' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: a.cpp + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'F:\svn\lld\test\COFF\precomp\vc140.pdb' + - Kind: LF_BUILDINFO + BuildInfo: + ArgIndices: [ 5131, 5132, 5137, 5138, 5136 ] + - Name: '.text$mn' + Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] + Alignment: 16 + SectionData: 4883EC28B161E80000000033C04883C428C3 + Relocations: + - VirtualAddress: 7 + SymbolName: '?Function@@YAHD@Z' + Type: IMAGE_REL_AMD64_REL32 + - Name: .xdata + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: '0104010004420000' + - Name: .pdata + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: '000000001200000000000000' + Relocations: + - VirtualAddress: 0 + SymbolName: '$LN3' + Type: IMAGE_REL_AMD64_ADDR32NB + - VirtualAddress: 4 + SymbolName: '$LN3' + Type: IMAGE_REL_AMD64_ADDR32NB + - VirtualAddress: 8 + SymbolName: '$unwind$main' + Type: IMAGE_REL_AMD64_ADDR32NB +symbols: + - Name: '@comp.id' + Value: 17129111 + SectionNumber: -1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: '@feat.00' + Value: 2147484048 + SectionNumber: -1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: .drectve + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 128 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: '.debug$S' + Value: 0 + SectionNumber: 2 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 472 + NumberOfRelocations: 4 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: '.debug$T' + Value: 0 + SectionNumber: 3 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 908 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: '.text$mn' + Value: 0 + SectionNumber: 4 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 18 + NumberOfRelocations: 1 + NumberOfLinenumbers: 0 + CheckSum: 1070898005 + Number: 0 + - Name: '?Function@@YAHD@Z' + Value: 0 + SectionNumber: 0 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_FUNCTION + StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: main + Value: 0 + SectionNumber: 4 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_FUNCTION + StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: '$LN3' + Value: 0 + SectionNumber: 4 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_LABEL + - Name: .xdata + Value: 0 + SectionNumber: 5 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 8 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 264583633 + Number: 0 + - Name: '$unwind$main' + Value: 0 + SectionNumber: 5 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: .pdata + Value: 0 + SectionNumber: 6 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 12 + NumberOfRelocations: 3 + NumberOfLinenumbers: 0 + CheckSum: 1050555990 + Number: 0 + - Name: '$pdata$main' + Value: 0 + SectionNumber: 6 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC +... Index: lld/test/COFF/Inputs/precomp-b.yaml =================================================================== --- lld/test/COFF/Inputs/precomp-b.yaml +++ lld/test/COFF/Inputs/precomp-b.yaml @@ -0,0 +1,247 @@ +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_AMD64 + Characteristics: [ ] +sections: + - Name: .drectve + Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ] + Alignment: 1 + SectionData: 2020202D494E434C5544453A5F5F40405F50636853796D5F403030405568656D556F6F77556776686755786C7575556B6976786C6E6B556B6976786C6E6B4F6C79714036303445453535424437323731373742202F44454641554C544C49423A224C4942434D5422202F44454641554C544C49423A224F4C444E414D45532220 + - Name: '.debug$S' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + SectionData: 04000000F100000067000000290001110E981611463A5C73766E5C6C6C645C746573745C434F46465C707265636F6D705C622E6F626A003A003C1101600000D00013000000975E010013000000975E01004D6963726F736F667420285229204F7074696D697A696E6720436F6D70696C65720000F1000000620000002E0047110000000000000000000000000A0000000400000009000000091400000000000000000046756E6374696F6E001C00121000000000000000000000000000000000000000000000004211000E00111108000000700000004F01610002004F110000F20000003000000000000000000000000A000000200000000300000024000000000000000400008004000000050000800900000006000080F40000003800000001000000000000002A00000010018ABCEA62EB23FB98D2EBB93681A648DF00005100000010015C7191C294F5926D77D3AA07FD0843AB0000F30000007400000000663A5C73766E5C6C6C645C746573745C636F66665C707265636F6D705C707265636F6D702E70636800663A5C73766E5C6C6C645C746573745C636F66665C707265636F6D705C707265636F6D702E6800663A5C73766E5C6C6C645C746573745C636F66665C707265636F6D705C622E63707000F10000000800000006004C1112140000 + Subsections: + - !Symbols + Records: + - Kind: S_OBJNAME + ObjNameSym: + Signature: 286693390 + ObjectName: 'F:\svn\lld\test\COFF\precomp\b.obj' + - Kind: S_COMPILE3 + Compile3Sym: + Flags: [ SecurityChecks, HotPatch ] + Machine: X64 + FrontendMajor: 19 + FrontendMinor: 0 + FrontendBuild: 24215 + FrontendQFE: 1 + BackendMajor: 19 + BackendMinor: 0 + BackendBuild: 24215 + BackendQFE: 1 + Version: 'Microsoft (R) Optimizing Compiler' + - !Symbols + Records: + - Kind: S_GPROC32_ID + ProcSym: + CodeSize: 10 + DbgStart: 4 + DbgEnd: 9 + FunctionType: 5129 + Flags: [ ] + DisplayName: Function + - Kind: S_FRAMEPROC + FrameProcSym: + TotalFrameBytes: 0 + PaddingFrameBytes: 0 + OffsetToPadding: 0 + BytesOfCalleeSavedRegisters: 0 + OffsetOfExceptionHandler: 0 + SectionIdOfExceptionHandler: 0 + Flags: [ AsynchronousExceptionHandling, OptimizedForSpeed ] + - Kind: S_REGREL32 + RegRelativeSym: + Offset: 8 + Type: 112 + Register: RSP + VarName: a + - Kind: S_PROC_ID_END + ScopeEndSym: + - !Lines + CodeSize: 10 + Flags: [ ] + RelocOffset: 0 + RelocSegment: 0 + Blocks: + - FileName: 'f:\svn\lld\test\coff\precomp\b.cpp' + Lines: + - Offset: 0 + LineStart: 4 + IsStatement: true + EndDelta: 0 + - Offset: 4 + LineStart: 5 + IsStatement: true + EndDelta: 0 + - Offset: 9 + LineStart: 6 + IsStatement: true + EndDelta: 0 + Columns: + - !FileChecksums + Checksums: + - FileName: 'f:\svn\lld\test\coff\precomp\precomp.pch' + Kind: None + Checksum: '' + - FileName: 'f:\svn\lld\test\coff\precomp\precomp.h' + Kind: MD5 + Checksum: 8ABCEA62EB23FB98D2EBB93681A648DF + - FileName: 'f:\svn\lld\test\coff\precomp\b.cpp' + Kind: MD5 + Checksum: 5C7191C294F5926D77D3AA07FD0843AB + - !StringTable + Strings: + - 'f:\svn\lld\test\coff\precomp\precomp.pch' + - 'f:\svn\lld\test\coff\precomp\precomp.h' + - 'f:\svn\lld\test\coff\precomp\b.cpp' + - !Symbols + Records: + - Kind: S_BUILDINFO + BuildInfoSym: + BuildId: 5138 + Relocations: + - VirtualAddress: 156 + SymbolName: '?Function@@YAHD@Z' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 160 + SymbolName: '?Function@@YAHD@Z' + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 232 + SymbolName: '?Function@@YAHD@Z' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 236 + SymbolName: '?Function@@YAHD@Z' + Type: IMAGE_REL_AMD64_SECTION + - Name: '.debug$T' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + SectionData: 040000003A00091500100000070400000E981611663A5C73766E5C6C6C645C746573745C636F66665C707265636F6D705C707265636F6D702E6F626A00F3F2F10A00011201000000700000000E00081074000000000001000714000016000116000000000814000046756E6374696F6E00F3F2F12600051600000000463A5C73766E5C6C6C645C746573745C434F46465C707265636F6D7000F3F2F14E00051600000000433A5C50726F6772616D2046696C65732028783836295C4D6963726F736F66742056697375616C2053747564696F2031342E305C56435C42494E5C616D6436345C636C2E65786500F2000516000000002D5A37202D5975707265636F6D702E68202D63202D4D54202D4922433A5C50726F6772616D2046696C65732028783836295C4D6963726F736F66742056697375616C2053747564696F2031342E305C56435C494E434C55444522202D4922433A5C50726F6772616D2046696C65732028783836295C4D6963726F736F66742056697375616C2053747564696F2031342E305C56435C41544C4D46435C494E434C55444522202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F7773204B6974735C31305C696E636C7564655C31302E302E31363239392E305C756372742200F2F1F600051600000000202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F7773204B6974735C4E4554465853444B5C342E362E315C696E636C7564655C756D22202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F7773204B6974735C31305C696E636C7564655C31302E302E31363239392E305C73686172656422202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F7773204B6974735C31305C696E636C7564655C31302E302E31363239392E305C756D22202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F777300F10E000416020000000C1400000D140000320005160E140000204B6974735C31305C696E636C7564655C31302E302E31363239392E305C77696E727422202D5450202D58000E00051600000000622E63707000F2F12E00051600000000463A5C73766E5C6C6C645C746573745C434F46465C707265636F6D705C76633134302E70646200F11A00031605000A1400000B14000010140000111400000F140000F2F1 + Types: + - Kind: LF_PRECOMP + Precomp: + StartTypeIndex: 4096 + TypesCount: 1031 + Signature: 286693390 + PrecompFilePath: 'f:\svn\lld\test\coff\precomp\precomp.obj' + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ 112 ] + - Kind: LF_PROCEDURE + Procedure: + ReturnType: 116 + CallConv: NearC + Options: [ None ] + ParameterCount: 1 + ArgumentList: 5127 + - Kind: LF_FUNC_ID + FuncId: + ParentScope: 0 + FunctionType: 5128 + Name: Function + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'F:\svn\lld\test\COFF\precomp' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\cl.exe' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: '-Z7 -Yuprecomp.h -c -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt"' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: ' -I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\shared" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um" -I"C:\Program Files (x86)\Windows' + - Kind: LF_SUBSTR_LIST + StringList: + StringIndices: [ 5132, 5133 ] + - Kind: LF_STRING_ID + StringId: + Id: 5134 + String: ' Kits\10\include\10.0.16299.0\winrt" -TP -X' + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: b.cpp + - Kind: LF_STRING_ID + StringId: + Id: 0 + String: 'F:\svn\lld\test\COFF\precomp\vc140.pdb' + - Kind: LF_BUILDINFO + BuildInfo: + ArgIndices: [ 5130, 5131, 5136, 5137, 5135 ] + - Name: '.text$mn' + Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] + Alignment: 16 + SectionData: 884C24080FBE442408C3 +symbols: + - Name: '@comp.id' + Value: 17129111 + SectionNumber: -1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: '@feat.00' + Value: 2147484048 + SectionNumber: -1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: .drectve + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 128 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: '.debug$S' + Value: 0 + SectionNumber: 2 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 484 + NumberOfRelocations: 4 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: '.debug$T' + Value: 0 + SectionNumber: 3 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 888 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: '.text$mn' + Value: 0 + SectionNumber: 4 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 10 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 1015064537 + Number: 0 + - Name: '?Function@@YAHD@Z' + Value: 0 + SectionNumber: 4 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_FUNCTION + StorageClass: IMAGE_SYM_CLASS_EXTERNAL +... Index: lld/test/COFF/Inputs/precomp-precomp.yaml =================================================================== --- lld/test/COFF/Inputs/precomp-precomp.yaml +++ lld/test/COFF/Inputs/precomp-precomp.yaml @@ -0,0 +1,812 @@ +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_AMD64 + Characteristics: [ ] +sections: + - Name: .drectve + Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ] + Alignment: 1 + SectionData: 2020202F44454641554C544C49423A224C4942434D5422202F44454641554C544C49423A224F4C444E414D45532220 + - Name: '.debug$S' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + SectionData: 04000000F10000006D0000002F0001110E981611463A5C73766E5C6C6C645C746573745C434F46465C707265636F6D705C707265636F6D702E6F626A003A003C1101600000D00013000000975E010013000000975E01004D6963726F736F667420285229204F7074696D697A696E6720436F6D70696C657200000000F1000000D31C000027000811051400005F5F76635F617474726962757465733A3A6969645F69734174747269627574650028000811FF1300005F5F76635F617474726962757465733A3A64656661756C74417474726962757465002C000811F71300005F5F76635F617474726962757465733A3A64656661756C7462696E644174747269627574650031000811F11300005F5F76635F617474726962757465733A3A6E6F5F696E6A65637465645F746578744174747269627574650024000811E81300005F5F76635F617474726962757465733A3A707472417474726962757465002A000811E21300005F5F76635F617474726962757465733A3A6370705F71756F74654174747269627574650028000811DC1300005F5F76635F617474726962757465733A3A636F6E74726F6C4174747269627574650028000811D61300005F5F76635F617474726962757465733A3A70726F707075744174747269627574650027000811D01300005F5F76635F617474726962757465733A3A7361747970654174747269627574650028000811C81300005F5F76635F617474726962757465733A3A636F636C6173734174747269627574650025000811C21300005F5F76635F617474726962757465733A3A6C636964417474726962757465002E000811BC1300005F5F76635F617474726962757465733A3A6C6962726172795F626C6F636B417474726962757465002D000811B61300005F5F76635F617474726962757465733A3A6E6F6E62726F777361626C654174747269627574650029000811B01300005F5F76635F617474726962757465733A3A6D735F756E696F6E417474726962757465002A000811AA1300005F5F76635F617474726962757465733A3A696D706F727469646C4174747269627574650027000811A41300005F5F76635F617474726962757465733A3A637573746F6D417474726962757465002B0008119E1300005F5F76635F617474726962757465733A3A70726F70707574726566417474726962757465002A000811981300005F5F76635F617474726962757465733A3A756964656661756C744174747269627574650029000811921300005F5F76635F617474726962757465733A3A726561646F6E6C79417474726962757465002D0008118C1300005F5F76635F617474726962757465733A3A6576656E745F736F757263654174747269627574650039000811841300005F5F76635F617474726962757465733A3A6576656E745F736F757263654174747269627574653A3A6F7074696D697A655F650035000811811300005F5F76635F617474726962757465733A3A6576656E745F736F757263654174747269627574653A3A747970655F6500270008117D1300005F5F76635F617474726962757465733A3A7075626C69634174747269627574650042000811771300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A6E6F746966795F61746C70726F76417474726962757465003F000811711300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A68656C705F737472696E6741747472696275746500420008116B1300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A72657175697265735F76616C7565417474726962757465003D000811651300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A61735F737472696E67417474726962757465003E0008115F1300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A76315F616C74747970654174747269627574650046000811591300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A76315F616C74747970654174747269627574653A3A747970655F65004F000811551300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A736F757263655F616E6E6F746174696F6E5F61747472696275746541747472696275746500410008114D1300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A70726F636573735F6561726C79417474726962757465003F000811471300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A6D756C74695F76616C7565417474726962757465003D000811411300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A6174747269627574654174747269627574650039000811391300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A75736167654174747269627574650042000811331300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A75736167654174747269627574653A3A75736167655F6500410008112F1300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A64656661756C745F76616C7565417474726962757465003E000811281300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A72657065617461626C65417474726962757465003C000811221300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A76315F6561726C79417474726962757465003B0008111C1300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A76315F6E616D65417474726962757465002B000811161300005F5F76635F617474726962757465733A3A69646C5F6D6F64756C6541747472696275746500280008110D1300005F5F76635F617474726962757465733A3A6C6173745F6973417474726962757465002C000811071300005F5F76635F617474726962757465733A3A7472616E736D69745F6173417474726962757465002A000811011300005F5F76635F617474726962757465733A3A696D706F72746C69624174747269627574650023000811FB1200005F5F76635F617474726962757465733A3A696E417474726962757465002E000811F51200005F5F76635F617474726962757465733A3A696D6D65646961746562696E64417474726962757465002C000811EF1200005F5F76635F617474726962757465733A3A7377697463685F74797065417474726962757465002C000811E91200005F5F76635F617474726962757465733A3A68656C70636F6E746578744174747269627574650027000811E31200005F5F76635F617474726962757465733A3A737472696E674174747269627574650026000811DD1200005F5F76635F617474726962757465733A3A72616E6765417474726962757465002B000811D61200005F5F76635F617474726962757465733A3A696E636C7564656C6962417474726962757465002E000811D01200005F5F76635F617474726962757465733A3A68656C70737472696E67646C6C4174747269627574650026000811710000005F5F76635F617474726962757465733A3A776964655F636861725F747970650023000811CA1200005F5F76635F617474726962757465733A3A69644174747269627574650027000811C41200005F5F76635F617474726962757465733A3A68696464656E417474726962757465002A000811BE1200005F5F76635F617474726962757465733A3A746872656164696E674174747269627574650037000811B61200005F5F76635F617474726962757465733A3A746872656164696E674174747269627574653A3A746872656164696E675F650027000811B21200005F5F76635F617474726962757465733A3A6F626A6563744174747269627574650028000811AC1200005F5F76635F617474726962757465733A3A696E636C756465417474726962757465002B000811A61200005F5F76635F617474726962757465733A3A72657374726963746564417474726962757465002D0008119E1200005F5F76635F617474726962757465733A3A776972655F6D61727368616C4174747269627574650028000811981200005F5F76635F617474726962757465733A3A656D697469646C41747472696275746500290008118E1200005F5F76635F617474726962757465733A3A6F7074696F6E616C4174747269627574650029000811881200005F5F76635F617474726962757465733A3A66697273745F69734174747269627574650027000811821200005F5F76635F617474726962757465733A3A6D61785F6973417474726962757465002E0008117C1200005F5F76635F617474726962757465733A3A6F6C656175746F6D6174696F6E4174747269627574650028000811761200005F5F76635F617474726962757465733A3A76315F656E756D417474726962757465002E000811701200005F5F76635F617474726962757465733A3A6E6F6E657874656E7369626C65417474726962757465002D0008116A1200005F5F76635F617474726962757465733A3A616767726567617461626C654174747269627574650035000811621200005F5F76635F617474726962757465733A3A616767726567617461626C654174747269627574653A3A747970655F65002D0008115E1200005F5F76635F617474726962757465733A3A64656661756C7476616C75654174747269627574650028000811581200005F5F76635F617474726962757465733A3A70726F70676574417474726962757465002E000811521200005F5F76635F617474726962757465733A3A64656661756C74767461626C6541747472696275746500280008114C1200005F5F76635F617474726962757465733A3A63616C6C5F6173417474726962757465002E000811461200005F5F76635F617474726962757465733A3A64697370696E746572666163654174747269627574650027000811401200005F5F76635F617474726962757465733A3A6578706F727441747472696275746500250008113A1200005F5F76635F617474726962757465733A3A686F6F6B4174747269627574650031000811301200005F5F76635F617474726962757465733A3A61746C3A3A73796E6368726F6E697A65417474726962757465002F0008112A1200005F5F76635F617474726962757465733A3A61746C3A3A64625F636F6C756D6E417474726962757465002E000811211200005F5F76635F617474726962757465733A3A61746C3A3A64625F706172616D4174747269627574650031000811171200005F5F76635F617474726962757465733A3A61746C3A3A64625F6163636573736F7241747472696275746500320008110E1200005F5F76635F617474726962757465733A3A61746C3A3A736F61705F68616E646C65724174747269627574650038000811061200005F5F76635F617474726962757465733A3A61746C3A3A737570706F72745F6572726F725F696E666F4174747269627574650039000811001200005F5F76635F617474726962757465733A3A61746C3A3A636F6D5F696E746572666163655F656E7472794174747269627574650035000811F81100005F5F76635F617474726962757465733A3A61746C3A3A726571756573745F68616E646C6572417474726962757465002D000811EF1100005F5F76635F617474726962757465733A3A61746C3A3A706572666D6F6E4174747269627574650039000811E51100005F5F76635F617474726962757465733A3A61746C3A3A696D706C656D656E74735F63617465676F7279417474726962757465002F000811DF1100005F5F76635F617474726962757465733A3A61746C3A3A64625F736F757263654174747269627574650030000811D31100005F5F76635F617474726962757465733A3A61746C3A3A61676772656761746573417474726962757465002E000811CB1100005F5F76635F617474726962757465733A3A61746C3A3A64625F7461626C654174747269627574650031000811BE1100005F5F76635F617474726962757465733A3A61746C3A3A736F61705F6865616465724174747269627574650030000811B41100005F5F76635F617474726962757465733A3A61746C3A3A64625F636F6D6D616E64417474726962757465002E000811A41100005F5F76635F617474726962757465733A3A61746C3A3A7461675F6E616D6541747472696275746500340008119B1100005F5F76635F617474726962757465733A3A61746C3A3A736F61705F6E616D6573706163654174747269627574650031000811931100005F5F76635F617474726962757465733A3A61746C3A3A706572665F6F626A65637441747472696275746500290008118A1100005F5F76635F617474726962757465733A3A61746C3A3A7264784174747269627574650032000811811100005F5F76635F617474726962757465733A3A61746C3A3A706572665F636F756E7465724174747269627574650031000811781100005F5F76635F617474726962757465733A3A61746C3A3A736F61705F6D6574686F644174747269627574650037000811701100005F5F76635F617474726962757465733A3A61746C3A3A72657175697265735F63617465676F727941747472696275746500390008116A1100005F5F76635F617474726962757465733A3A61746C3A3A726567697374726174696F6E5F736372697074417474726962757465002D000811621100005F5F76635F617474726962757465733A3A6E6F6E637265617461626C6541747472696275746500300008115C1100005F5F76635F617474726962757465733A3A64656661756C74636F6C6C656C656D4174747269627574650024000811561100005F5F76635F617474726962757465733A3A6F646C417474726962757465002A000811501100005F5F76635F617474726962757465733A3A7377697463685F6973417474726962757465002A0008114A1100005F5F76635F617474726962757465733A3A69646C5F71756F7465417474726962757465002C000811421100005F5F76635F617474726962757465733A3A646973706C617962696E64417474726962757465002B0008113C1100005F5F76635F617474726962757465733A3A68656C70737472696E674174747269627574650032000811361100005F5F76635F617474726962757465733A3A68656C70737472696E67636F6E746578744174747269627574650027000811301100005F5F76635F617474726962757465733A3A756E686F6F6B4174747269627574650027000811231100005F5F76635F617474726962757465733A3A70726F67696441747472696275746500280008111D1100005F5F76635F617474726962757465733A3A76657273696F6E4174747269627574650028000811171100005F5F76635F617474726962757465733A3A73697A655F69734174747269627574650025000811111100005F5F76635F617474726962757465733A3A6475616C417474726962757465002B0008110B1100005F5F76635F617474726962757465733A3A696D706C656D656E7473417474726962757465002F000811031100005F5F76635F617474726962757465733A3A6576656E745F72656365697665724174747269627574650037000811F91000005F5F76635F617474726962757465733A3A6576656E745F72656365697665724174747269627574653A3A747970655F650026000811F51000005F5F76635F617474726962757465733A3A6C6F63616C4174747269627574650030000811EF1000005F5F76635F617474726962757465733A3A706F696E7465725F64656661756C744174747269627574650038000811E91000005F5F76635F617474726962757465733A3A706F696E7465725F64656661756C744174747269627574653A3A747970655F65002C000811E51000005F5F76635F617474726962757465733A3A72657175657374656469744174747269627574650029000811DF1000005F5F76635F617474726962757465733A3A62696E6461626C654174747269627574650027000811D91000005F5F76635F617474726962757465733A3A707261676D61417474726962757465002A000811D31000005F5F76635F617474726962757465733A3A6170706F626A6563744174747269627574650027000811CD1000005F5F76635F617474726962757465733A3A72657476616C4174747269627574650025000811C71000005F5F76635F617474726962757465733A3A636173654174747269627574650025000811C01000005F5F76635F617474726962757465733A3A757569644174747269627574650026000811BA1000005F5F76635F617474726962757465733A3A656E7472794174747269627574650027000811B41000005F5F76635F617474726962757465733A3A736F757263654174747269627574650029000811AC1000005F5F76635F617474726962757465733A3A68656C7066696C654174747269627574650029000811A61000005F5F76635F617474726962757465733A3A6C6963656E736564417474726962757465002B000811A01000005F5F76635F617474726962757465733A3A6173796E635F7575696441747472696275746500270008119A1000005F5F76635F617474726962757465733A3A756E69717565417474726962757465002A000811941000005F5F76635F617474726962757465733A3A6C656E6774685F697341747472696275746500270008118E1000005F5F76635F617474726962757465733A3A766172617267417474726962757465002A000811881000005F5F76635F617474726962757465733A3A76695F70726F6769644174747269627574650029000811821000005F5F76635F617474726962757465733A3A70726F76696465724174747269627574650024000811791000005F5F76635F617474726962757465733A3A7265664174747269627574650031000811731000005F5F76635F617474726962757465733A3A757365736765746C6173746572726F7241747472696275746500270008116D1000005F5F76635F617474726962757465733A3A696D706F72744174747269627574650024000811661000005F5F76635F617474726962757465733A3A6F75744174747269627574650027000811601000005F5F76635F617474726962757465733A3A6D6F64756C65417474726962757465002F000811531000005F5F76635F617474726962757465733A3A6D6F64756C654174747269627574653A3A747970655F6500160008114F1000005F5479706544657363726970746F720025000811491000005F735F5F52545449436F6D706C6574654F626A6563744C6F6361746F72320018000811091000005F735F5F436174636861626C65547970650022000811491000005F5F52545449436F6D706C6574654F626A6563744C6F6361746F720015000811030100007374643A3A6E756C6C7074725F7400200008113C1000005F5F5254544942617365436C61737344657363726970746F720011000811431000005F5F7263475549445F74001E000811401000005047455457494E52545F4F4F4D5F455843455054494F4E001D000811251000005F735F5F5254544942617365436C617373417272617900110008112E1000005F5468726F77496E666F00230008113C1000005F735F5F5254544942617365436C61737344657363726970746F7232001A000811141000005F436174636861626C65547970654172726179000B000811361000005F504D44000F000811331000005F5F735F4755494400270008111D1000005F735F5F52545449436C61737348696572617263687944657363726970746F7200140008112E1000005F735F5F5468726F77496E666F001B000811251000005F5F5254544942617365436C617373417272617900250008111D1000005F5F52545449436C61737348696572617263687944657363726970746F72000C000811161000005F504D464E001D000811141000005F735F5F436174636861626C65547970654172726179000D0008112300000073697A655F74001B0008110E1000005F5F525474797065696452657475726E547970650015000811091000005F436174636861626C65547970650000F4000000080000000100000000000000F30000002A00000000663A5C73766E5C6C6C645C746573745C636F66665C707265636F6D705C707265636F6D702E706368000000F10000000800000006004C1110140000 + Subsections: + - !Symbols + Records: + - Kind: S_OBJNAME + ObjNameSym: + Signature: 286693390 + ObjectName: 'F:\svn\lld\test\COFF\precomp\precomp.obj' + - Kind: S_COMPILE3 + Compile3Sym: + Flags: [ SecurityChecks, HotPatch ] + Machine: X64 + FrontendMajor: 19 + FrontendMinor: 0 + FrontendBuild: 24215 + FrontendQFE: 1 + BackendMajor: 19 + BackendMinor: 0 + BackendBuild: 24215 + BackendQFE: 1 + Version: 'Microsoft (R) Optimizing Compiler' + - !Symbols + Records: + - Kind: S_UDT + UDTSym: + Type: 5125 + UDTName: '__vc_attributes::iid_isAttribute' + - Kind: S_UDT + UDTSym: + Type: 5119 + UDTName: '__vc_attributes::defaultAttribute' + - Kind: S_UDT + UDTSym: + Type: 5111 + UDTName: '__vc_attributes::defaultbindAttribute' + - Kind: S_UDT + UDTSym: + Type: 5105 + UDTName: '__vc_attributes::no_injected_textAttribute' + - Kind: S_UDT + UDTSym: + Type: 5096 + UDTName: '__vc_attributes::ptrAttribute' + - Kind: S_UDT + UDTSym: + Type: 5090 + UDTName: '__vc_attributes::cpp_quoteAttribute' + - Kind: S_UDT + UDTSym: + Type: 5084 + UDTName: '__vc_attributes::controlAttribute' + - Kind: S_UDT + UDTSym: + Type: 5078 + UDTName: '__vc_attributes::propputAttribute' + - Kind: S_UDT + UDTSym: + Type: 5072 + UDTName: '__vc_attributes::satypeAttribute' + - Kind: S_UDT + UDTSym: + Type: 5064 + UDTName: '__vc_attributes::coclassAttribute' + - Kind: S_UDT + UDTSym: + Type: 5058 + UDTName: '__vc_attributes::lcidAttribute' + - Kind: S_UDT + UDTSym: + Type: 5052 + UDTName: '__vc_attributes::library_blockAttribute' + - Kind: S_UDT + UDTSym: + Type: 5046 + UDTName: '__vc_attributes::nonbrowsableAttribute' + - Kind: S_UDT + UDTSym: + Type: 5040 + UDTName: '__vc_attributes::ms_unionAttribute' + - Kind: S_UDT + UDTSym: + Type: 5034 + UDTName: '__vc_attributes::importidlAttribute' + - Kind: S_UDT + UDTSym: + Type: 5028 + UDTName: '__vc_attributes::customAttribute' + - Kind: S_UDT + UDTSym: + Type: 5022 + UDTName: '__vc_attributes::propputrefAttribute' + - Kind: S_UDT + UDTSym: + Type: 5016 + UDTName: '__vc_attributes::uidefaultAttribute' + - Kind: S_UDT + UDTSym: + Type: 5010 + UDTName: '__vc_attributes::readonlyAttribute' + - Kind: S_UDT + UDTSym: + Type: 5004 + UDTName: '__vc_attributes::event_sourceAttribute' + - Kind: S_UDT + UDTSym: + Type: 4996 + UDTName: '__vc_attributes::event_sourceAttribute::optimize_e' + - Kind: S_UDT + UDTSym: + Type: 4993 + UDTName: '__vc_attributes::event_sourceAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4989 + UDTName: '__vc_attributes::publicAttribute' + - Kind: S_UDT + UDTSym: + Type: 4983 + UDTName: '__vc_attributes::helper_attributes::notify_atlprovAttribute' + - Kind: S_UDT + UDTSym: + Type: 4977 + UDTName: '__vc_attributes::helper_attributes::help_stringAttribute' + - Kind: S_UDT + UDTSym: + Type: 4971 + UDTName: '__vc_attributes::helper_attributes::requires_valueAttribute' + - Kind: S_UDT + UDTSym: + Type: 4965 + UDTName: '__vc_attributes::helper_attributes::as_stringAttribute' + - Kind: S_UDT + UDTSym: + Type: 4959 + UDTName: '__vc_attributes::helper_attributes::v1_alttypeAttribute' + - Kind: S_UDT + UDTSym: + Type: 4953 + UDTName: '__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4949 + UDTName: '__vc_attributes::helper_attributes::source_annotation_attributeAttribute' + - Kind: S_UDT + UDTSym: + Type: 4941 + UDTName: '__vc_attributes::helper_attributes::process_earlyAttribute' + - Kind: S_UDT + UDTSym: + Type: 4935 + UDTName: '__vc_attributes::helper_attributes::multi_valueAttribute' + - Kind: S_UDT + UDTSym: + Type: 4929 + UDTName: '__vc_attributes::helper_attributes::attributeAttribute' + - Kind: S_UDT + UDTSym: + Type: 4921 + UDTName: '__vc_attributes::helper_attributes::usageAttribute' + - Kind: S_UDT + UDTSym: + Type: 4915 + UDTName: '__vc_attributes::helper_attributes::usageAttribute::usage_e' + - Kind: S_UDT + UDTSym: + Type: 4911 + UDTName: '__vc_attributes::helper_attributes::default_valueAttribute' + - Kind: S_UDT + UDTSym: + Type: 4904 + UDTName: '__vc_attributes::helper_attributes::repeatableAttribute' + - Kind: S_UDT + UDTSym: + Type: 4898 + UDTName: '__vc_attributes::helper_attributes::v1_earlyAttribute' + - Kind: S_UDT + UDTSym: + Type: 4892 + UDTName: '__vc_attributes::helper_attributes::v1_nameAttribute' + - Kind: S_UDT + UDTSym: + Type: 4886 + UDTName: '__vc_attributes::idl_moduleAttribute' + - Kind: S_UDT + UDTSym: + Type: 4877 + UDTName: '__vc_attributes::last_isAttribute' + - Kind: S_UDT + UDTSym: + Type: 4871 + UDTName: '__vc_attributes::transmit_asAttribute' + - Kind: S_UDT + UDTSym: + Type: 4865 + UDTName: '__vc_attributes::importlibAttribute' + - Kind: S_UDT + UDTSym: + Type: 4859 + UDTName: '__vc_attributes::inAttribute' + - Kind: S_UDT + UDTSym: + Type: 4853 + UDTName: '__vc_attributes::immediatebindAttribute' + - Kind: S_UDT + UDTSym: + Type: 4847 + UDTName: '__vc_attributes::switch_typeAttribute' + - Kind: S_UDT + UDTSym: + Type: 4841 + UDTName: '__vc_attributes::helpcontextAttribute' + - Kind: S_UDT + UDTSym: + Type: 4835 + UDTName: '__vc_attributes::stringAttribute' + - Kind: S_UDT + UDTSym: + Type: 4829 + UDTName: '__vc_attributes::rangeAttribute' + - Kind: S_UDT + UDTSym: + Type: 4822 + UDTName: '__vc_attributes::includelibAttribute' + - Kind: S_UDT + UDTSym: + Type: 4816 + UDTName: '__vc_attributes::helpstringdllAttribute' + - Kind: S_UDT + UDTSym: + Type: 113 + UDTName: '__vc_attributes::wide_char_type' + - Kind: S_UDT + UDTSym: + Type: 4810 + UDTName: '__vc_attributes::idAttribute' + - Kind: S_UDT + UDTSym: + Type: 4804 + UDTName: '__vc_attributes::hiddenAttribute' + - Kind: S_UDT + UDTSym: + Type: 4798 + UDTName: '__vc_attributes::threadingAttribute' + - Kind: S_UDT + UDTSym: + Type: 4790 + UDTName: '__vc_attributes::threadingAttribute::threading_e' + - Kind: S_UDT + UDTSym: + Type: 4786 + UDTName: '__vc_attributes::objectAttribute' + - Kind: S_UDT + UDTSym: + Type: 4780 + UDTName: '__vc_attributes::includeAttribute' + - Kind: S_UDT + UDTSym: + Type: 4774 + UDTName: '__vc_attributes::restrictedAttribute' + - Kind: S_UDT + UDTSym: + Type: 4766 + UDTName: '__vc_attributes::wire_marshalAttribute' + - Kind: S_UDT + UDTSym: + Type: 4760 + UDTName: '__vc_attributes::emitidlAttribute' + - Kind: S_UDT + UDTSym: + Type: 4750 + UDTName: '__vc_attributes::optionalAttribute' + - Kind: S_UDT + UDTSym: + Type: 4744 + UDTName: '__vc_attributes::first_isAttribute' + - Kind: S_UDT + UDTSym: + Type: 4738 + UDTName: '__vc_attributes::max_isAttribute' + - Kind: S_UDT + UDTSym: + Type: 4732 + UDTName: '__vc_attributes::oleautomationAttribute' + - Kind: S_UDT + UDTSym: + Type: 4726 + UDTName: '__vc_attributes::v1_enumAttribute' + - Kind: S_UDT + UDTSym: + Type: 4720 + UDTName: '__vc_attributes::nonextensibleAttribute' + - Kind: S_UDT + UDTSym: + Type: 4714 + UDTName: '__vc_attributes::aggregatableAttribute' + - Kind: S_UDT + UDTSym: + Type: 4706 + UDTName: '__vc_attributes::aggregatableAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4702 + UDTName: '__vc_attributes::defaultvalueAttribute' + - Kind: S_UDT + UDTSym: + Type: 4696 + UDTName: '__vc_attributes::propgetAttribute' + - Kind: S_UDT + UDTSym: + Type: 4690 + UDTName: '__vc_attributes::defaultvtableAttribute' + - Kind: S_UDT + UDTSym: + Type: 4684 + UDTName: '__vc_attributes::call_asAttribute' + - Kind: S_UDT + UDTSym: + Type: 4678 + UDTName: '__vc_attributes::dispinterfaceAttribute' + - Kind: S_UDT + UDTSym: + Type: 4672 + UDTName: '__vc_attributes::exportAttribute' + - Kind: S_UDT + UDTSym: + Type: 4666 + UDTName: '__vc_attributes::hookAttribute' + - Kind: S_UDT + UDTSym: + Type: 4656 + UDTName: '__vc_attributes::atl::synchronizeAttribute' + - Kind: S_UDT + UDTSym: + Type: 4650 + UDTName: '__vc_attributes::atl::db_columnAttribute' + - Kind: S_UDT + UDTSym: + Type: 4641 + UDTName: '__vc_attributes::atl::db_paramAttribute' + - Kind: S_UDT + UDTSym: + Type: 4631 + UDTName: '__vc_attributes::atl::db_accessorAttribute' + - Kind: S_UDT + UDTSym: + Type: 4622 + UDTName: '__vc_attributes::atl::soap_handlerAttribute' + - Kind: S_UDT + UDTSym: + Type: 4614 + UDTName: '__vc_attributes::atl::support_error_infoAttribute' + - Kind: S_UDT + UDTSym: + Type: 4608 + UDTName: '__vc_attributes::atl::com_interface_entryAttribute' + - Kind: S_UDT + UDTSym: + Type: 4600 + UDTName: '__vc_attributes::atl::request_handlerAttribute' + - Kind: S_UDT + UDTSym: + Type: 4591 + UDTName: '__vc_attributes::atl::perfmonAttribute' + - Kind: S_UDT + UDTSym: + Type: 4581 + UDTName: '__vc_attributes::atl::implements_categoryAttribute' + - Kind: S_UDT + UDTSym: + Type: 4575 + UDTName: '__vc_attributes::atl::db_sourceAttribute' + - Kind: S_UDT + UDTSym: + Type: 4563 + UDTName: '__vc_attributes::atl::aggregatesAttribute' + - Kind: S_UDT + UDTSym: + Type: 4555 + UDTName: '__vc_attributes::atl::db_tableAttribute' + - Kind: S_UDT + UDTSym: + Type: 4542 + UDTName: '__vc_attributes::atl::soap_headerAttribute' + - Kind: S_UDT + UDTSym: + Type: 4532 + UDTName: '__vc_attributes::atl::db_commandAttribute' + - Kind: S_UDT + UDTSym: + Type: 4516 + UDTName: '__vc_attributes::atl::tag_nameAttribute' + - Kind: S_UDT + UDTSym: + Type: 4507 + UDTName: '__vc_attributes::atl::soap_namespaceAttribute' + - Kind: S_UDT + UDTSym: + Type: 4499 + UDTName: '__vc_attributes::atl::perf_objectAttribute' + - Kind: S_UDT + UDTSym: + Type: 4490 + UDTName: '__vc_attributes::atl::rdxAttribute' + - Kind: S_UDT + UDTSym: + Type: 4481 + UDTName: '__vc_attributes::atl::perf_counterAttribute' + - Kind: S_UDT + UDTSym: + Type: 4472 + UDTName: '__vc_attributes::atl::soap_methodAttribute' + - Kind: S_UDT + UDTSym: + Type: 4464 + UDTName: '__vc_attributes::atl::requires_categoryAttribute' + - Kind: S_UDT + UDTSym: + Type: 4458 + UDTName: '__vc_attributes::atl::registration_scriptAttribute' + - Kind: S_UDT + UDTSym: + Type: 4450 + UDTName: '__vc_attributes::noncreatableAttribute' + - Kind: S_UDT + UDTSym: + Type: 4444 + UDTName: '__vc_attributes::defaultcollelemAttribute' + - Kind: S_UDT + UDTSym: + Type: 4438 + UDTName: '__vc_attributes::odlAttribute' + - Kind: S_UDT + UDTSym: + Type: 4432 + UDTName: '__vc_attributes::switch_isAttribute' + - Kind: S_UDT + UDTSym: + Type: 4426 + UDTName: '__vc_attributes::idl_quoteAttribute' + - Kind: S_UDT + UDTSym: + Type: 4418 + UDTName: '__vc_attributes::displaybindAttribute' + - Kind: S_UDT + UDTSym: + Type: 4412 + UDTName: '__vc_attributes::helpstringAttribute' + - Kind: S_UDT + UDTSym: + Type: 4406 + UDTName: '__vc_attributes::helpstringcontextAttribute' + - Kind: S_UDT + UDTSym: + Type: 4400 + UDTName: '__vc_attributes::unhookAttribute' + - Kind: S_UDT + UDTSym: + Type: 4387 + UDTName: '__vc_attributes::progidAttribute' + - Kind: S_UDT + UDTSym: + Type: 4381 + UDTName: '__vc_attributes::versionAttribute' + - Kind: S_UDT + UDTSym: + Type: 4375 + UDTName: '__vc_attributes::size_isAttribute' + - Kind: S_UDT + UDTSym: + Type: 4369 + UDTName: '__vc_attributes::dualAttribute' + - Kind: S_UDT + UDTSym: + Type: 4363 + UDTName: '__vc_attributes::implementsAttribute' + - Kind: S_UDT + UDTSym: + Type: 4355 + UDTName: '__vc_attributes::event_receiverAttribute' + - Kind: S_UDT + UDTSym: + Type: 4345 + UDTName: '__vc_attributes::event_receiverAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4341 + UDTName: '__vc_attributes::localAttribute' + - Kind: S_UDT + UDTSym: + Type: 4335 + UDTName: '__vc_attributes::pointer_defaultAttribute' + - Kind: S_UDT + UDTSym: + Type: 4329 + UDTName: '__vc_attributes::pointer_defaultAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4325 + UDTName: '__vc_attributes::requesteditAttribute' + - Kind: S_UDT + UDTSym: + Type: 4319 + UDTName: '__vc_attributes::bindableAttribute' + - Kind: S_UDT + UDTSym: + Type: 4313 + UDTName: '__vc_attributes::pragmaAttribute' + - Kind: S_UDT + UDTSym: + Type: 4307 + UDTName: '__vc_attributes::appobjectAttribute' + - Kind: S_UDT + UDTSym: + Type: 4301 + UDTName: '__vc_attributes::retvalAttribute' + - Kind: S_UDT + UDTSym: + Type: 4295 + UDTName: '__vc_attributes::caseAttribute' + - Kind: S_UDT + UDTSym: + Type: 4288 + UDTName: '__vc_attributes::uuidAttribute' + - Kind: S_UDT + UDTSym: + Type: 4282 + UDTName: '__vc_attributes::entryAttribute' + - Kind: S_UDT + UDTSym: + Type: 4276 + UDTName: '__vc_attributes::sourceAttribute' + - Kind: S_UDT + UDTSym: + Type: 4268 + UDTName: '__vc_attributes::helpfileAttribute' + - Kind: S_UDT + UDTSym: + Type: 4262 + UDTName: '__vc_attributes::licensedAttribute' + - Kind: S_UDT + UDTSym: + Type: 4256 + UDTName: '__vc_attributes::async_uuidAttribute' + - Kind: S_UDT + UDTSym: + Type: 4250 + UDTName: '__vc_attributes::uniqueAttribute' + - Kind: S_UDT + UDTSym: + Type: 4244 + UDTName: '__vc_attributes::length_isAttribute' + - Kind: S_UDT + UDTSym: + Type: 4238 + UDTName: '__vc_attributes::varargAttribute' + - Kind: S_UDT + UDTSym: + Type: 4232 + UDTName: '__vc_attributes::vi_progidAttribute' + - Kind: S_UDT + UDTSym: + Type: 4226 + UDTName: '__vc_attributes::providerAttribute' + - Kind: S_UDT + UDTSym: + Type: 4217 + UDTName: '__vc_attributes::refAttribute' + - Kind: S_UDT + UDTSym: + Type: 4211 + UDTName: '__vc_attributes::usesgetlasterrorAttribute' + - Kind: S_UDT + UDTSym: + Type: 4205 + UDTName: '__vc_attributes::importAttribute' + - Kind: S_UDT + UDTSym: + Type: 4198 + UDTName: '__vc_attributes::outAttribute' + - Kind: S_UDT + UDTSym: + Type: 4192 + UDTName: '__vc_attributes::moduleAttribute' + - Kind: S_UDT + UDTSym: + Type: 4179 + UDTName: '__vc_attributes::moduleAttribute::type_e' + - Kind: S_UDT + UDTSym: + Type: 4175 + UDTName: _TypeDescriptor + - Kind: S_UDT + UDTSym: + Type: 4169 + UDTName: _s__RTTICompleteObjectLocator2 + - Kind: S_UDT + UDTSym: + Type: 4105 + UDTName: _s__CatchableType + - Kind: S_UDT + UDTSym: + Type: 4169 + UDTName: __RTTICompleteObjectLocator + - Kind: S_UDT + UDTSym: + Type: 259 + UDTName: 'std::nullptr_t' + - Kind: S_UDT + UDTSym: + Type: 4156 + UDTName: __RTTIBaseClassDescriptor + - Kind: S_UDT + UDTSym: + Type: 4163 + UDTName: __rcGUID_t + - Kind: S_UDT + UDTSym: + Type: 4160 + UDTName: PGETWINRT_OOM_EXCEPTION + - Kind: S_UDT + UDTSym: + Type: 4133 + UDTName: _s__RTTIBaseClassArray + - Kind: S_UDT + UDTSym: + Type: 4142 + UDTName: _ThrowInfo + - Kind: S_UDT + UDTSym: + Type: 4156 + UDTName: _s__RTTIBaseClassDescriptor2 + - Kind: S_UDT + UDTSym: + Type: 4116 + UDTName: _CatchableTypeArray + - Kind: S_UDT + UDTSym: + Type: 4150 + UDTName: _PMD + - Kind: S_UDT + UDTSym: + Type: 4147 + UDTName: __s_GUID + - Kind: S_UDT + UDTSym: + Type: 4125 + UDTName: _s__RTTIClassHierarchyDescriptor + - Kind: S_UDT + UDTSym: + Type: 4142 + UDTName: _s__ThrowInfo + - Kind: S_UDT + UDTSym: + Type: 4133 + UDTName: __RTTIBaseClassArray + - Kind: S_UDT + UDTSym: + Type: 4125 + UDTName: __RTTIClassHierarchyDescriptor + - Kind: S_UDT + UDTSym: + Type: 4118 + UDTName: _PMFN + - Kind: S_UDT + UDTSym: + Type: 4116 + UDTName: _s__CatchableTypeArray + - Kind: S_UDT + UDTSym: + Type: 35 + UDTName: size_t + - Kind: S_UDT + UDTSym: + Type: 4110 + UDTName: __RTtypeidReturnType + - Kind: S_UDT + UDTSym: + Type: 4105 + UDTName: _CatchableType + - !FileChecksums + Checksums: + - FileName: 'f:\svn\lld\test\coff\precomp\precomp.pch' + Kind: None + Checksum: '' + - !StringTable + Strings: + - 'f:\svn\lld\test\coff\precomp\precomp.pch' + - !Symbols + Records: + - Kind: S_BUILDINFO + BuildInfoSym: + BuildId: 5136 + - Name: '.debug$P' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + SectionData: 040000003E0005150000800200000000000000000000000000005F735F5F436174636861626C6554797065002E3F41555F735F5F436174636861626C65547970654040000A000110001000000100F2F13A0005150000800200000000000000000000000000005F5479706544657363726970746F72002E3F41555F5479706544657363726970746F724040000A000210021000000C000100260005150000800200000000000000000000000000005F504D44002E3F41555F504D44404000F2F10A00011201000000030600000E0008100300000000000100051000000A000210061000000C000100760003120D15030075000000000070726F7065727469657300F3F2F10D1503000310000004007054797065000D150300041000000C0074686973446973706C6163656D656E7400F10D15030074000000180073697A654F724F666673657400F10D150300071000001C00636F707946756E6374696F6E00F13E0005150500000208100000000000000000000024005F735F5F436174636861626C6554797065002E3F41555F735F5F436174636861626C65547970654040004E00051600000000663A5C73766E5C6C6C645C746573745C636F66665C707265636F6D705C707265646566696E656420632B2B2074797065732028636F6D70696C657220696E7465726E616C2900F2F10E000616091000000A1000004C0000002E000415000080020000000000000000000000000000747970655F696E666F002E3F4156747970655F696E666F4040000A0001100C1000000100F2F10A0002100D1000002C0001004A0005150000800200000000000000000000000000005F735F5F436174636861626C65547970654172726179002E3F41555F735F5F436174636861626C65547970654172726179404000F2F10A000110001000000100F2F10A000210101000000C0001000E0003151110000023000000000000F13E0003120D1503007400000000006E436174636861626C65547970657300F2F10D15030012100000040061727261794F66436174636861626C655479706573004A0005150200000213100000000000000000000004005F735F5F436174636861626C65547970654172726179002E3F41555F735F5F436174636861626C65547970654172726179404000F2F10E000616141000000A100000550000000A000210061000000C0001005E0005150000800200000000000000000000000000005F735F5F52545449436C61737348696572617263687944657363726970746F72002E3F41555F735F5F52545449436C61737348696572617263687944657363726970746F72404000F2F10A000110171000000100F2F14A0005150000800200000000000000000000000000005F735F5F5254544942617365436C6173734172726179002E3F41555F735F5F5254544942617365436C6173734172726179404000F2F10A000110191000000100F2F10A0002101A1000000C000100660003120D1503002200000000007369676E6174757265000D1503002200000004006174747269627574657300F3F2F10D1503002200000008006E756D42617365436C617373657300F3F2F10D1503001B1000000C007042617365436C617373417272617900F2F15E000515040000021C100000000000000000000014005F735F5F52545449436C61737348696572617263687944657363726970746F72002E3F41555F735F5F52545449436C61737348696572617263687944657363726970746F72404000F2F10E0006161D1000000A100000860000000A000110191000000100F2F1560005150000800200000000000000000000000000005F735F5F5254544942617365436C61737344657363726970746F7232002E3F41555F735F5F5254544942617365436C61737344657363726970746F7232404000F2F10A000110201000000100F2F10A000210211000000C0001000E0003152210000023000000000000F12A0003120D15030023100000000061727261794F6642617365436C61737344657363726970746F727300F2F14A0005150100000224100000000000000000000004005F735F5F5254544942617365436C6173734172726179002E3F41555F735F5F5254544942617365436C6173734172726179404000F2F10E000616251000000A10000082000000360005150000800200000000000000000000000000005F735F5F5468726F77496E666F002E3F41555F735F5F5468726F77496E666F40400006000112000000000E0008107400000000000000281000000A000210291000000C0001000A0001100F1000000100F2F10A0002102B1000000C0001006E0003120D1503007500000000006174747269627574657300F3F2F10D150300071000000400706D666E556E77696E6400F3F2F10D1503002A1000000C0070466F7277617264436F6D70617400F3F2F10D1503002C100000140070436174636861626C6554797065417272617900F2F136000515040000022D10000000000000000000001C005F735F5F5468726F77496E666F002E3F41555F735F5F5468726F77496E666F4040000E0006162E1000000A1000005A0000002E0005150000800200000000000000000000000000005F5F735F47554944002E3F41555F5F735F47554944404000F2F10E0003152000000023000000080000F1420003120D1503002200000000004461746131000D1503002100000004004461746132000D1503002100000006004461746133000D1503003110000008004461746134002E0005150400000232100000000000000000000010005F5F735F47554944002E3F41555F5F735F47554944404000F2F10E000616331000000A100000B0000000320003120D1503007400000000006D64697370000D1503007400000004007064697370000D15030074000000080076646973700026000515030000023510000000000000000000000C005F504D44002E3F41555F504D44404000F2F10E000616361000000A1000003A0000000A0001100F1000000100F2F10A000110171000000100F2F10A000210391000000C0001007E0003120D150300031000000000705479706544657363726970746F7200F2F10D1503002200000008006E756D436F6E7461696E65644261736573000D150300041000000C007768657265000D1503002200000018006174747269627574657300F3F2F10D1503003A1000001C0070436C61737344657363726970746F7200F156000515050000023B100000000000000000000024005F735F5F5254544942617365436C61737344657363726970746F7232002E3F41555F735F5F5254544942617365436C61737344657363726970746F7232404000F2F10E0006163C1000000A100000790000000A000110271000000100F2F10E0008100306000000000000281000000A0002103F1000000C000100260005150000800200000000000000000000000000005F47554944002E3F41555F475549444040000A000110411000000100F2F10A000210421000002C0001000A000110201000000100F2F15A0005150000800200000000000000000000000000005F735F5F52545449436F6D706C6574654F626A6563744C6F6361746F7232002E3F41555F735F5F52545449436F6D706C6574654F626A6563744C6F6361746F7232404000F2F10A000110451000000100F2F10A000210461000000C000100860003120D1503002200000000007369676E6174757265000D1503002200000004006F666673657400F3F2F10D15030022000000080063644F666673657400F10D150300031000000C00705479706544657363726970746F7200F2F10D1503003A100000140070436C61737344657363726970746F7200F10D150300471000001C007053656C66005A0005150600000248100000000000000000000024005F735F5F52545449436F6D706C6574654F626A6563744C6F6361746F7232002E3F41555F735F5F52545449436F6D706C6574654F626A6563744C6F6361746F7232404000F2F10E000616491000000A1000008C0000000A000110030000000100F2F10A0002104B1000000C0001000E0003157000000023000000000000F1360003120D1503004C10000000007056465461626C6500F10D1503000306000008007370617265000D1503004D10000010006E616D6500F13A000515030000024E100000000000000000000010005F5479706544657363726970746F72002E3F41555F5479706544657363726970746F724040000E0006164F1000000A100000450000005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6D6F64756C65417474726962757465002E3F41556D6F64756C65417474726962757465405F5F76635F61747472696275746573404000F3F2F15A000312021503000100646C6C00F2F102150300020065786500F2F10215030003007365727669636500F2F1021503000400756E73706563696669656400F2F102150300020045584500F2F10215030003005345525649434500F2F1660007150600080274000000521000005F5F76635F617474726962757465733A3A6D6F64756C654174747269627574653A3A747970655F65002E3F415734747970655F65406D6F64756C65417474726962757465405F5F76635F61747472696275746573404000F15200051600000000663A5C73766E5C6C6C645C746573745C636F66665C707265636F6D705C707265646566696E656420632B2B20617474726962757465732028636F6D70696C657220696E7465726E616C2900F10E0006165310000054100000E20100000A000110700000000100F2F10A000210561000000C000100420001120F0000005310000057100000571000005710000074000000300000005710000074000000571000005710000074000000300000003000000057100000571000000A000210511000000C0401001A00091003000000511000005910000000020F0058100000000000000A00011201000000531000001A000910030000005110000059100000000201005B100000000000001A0009100300000051100000591000000002000028100000000000001A000612030000005A100000030000005C100000030000005D100000620103121015000053100000747970655F6500F10F1503005E1000006D6F64756C65417474726962757465000D1503005310000000007479706500F10D1503005710000008006E616D6500F10D15030057100000100076657273696F6E00F2F10D1503005710000018007575696400F10D1503007400000020006C63696400F10D150300300000002400636F6E74726F6C00F2F10D15030057100000280068656C70737472696E6700F3F2F10D15030074000000300068656C70737472696E67636F6E74657874000D15030057100000380068656C70737472696E67646C6C000D15030057100000400068656C7066696C6500F10D15030074000000480068656C70636F6E7465787400F2F10D150300300000004C0068696464656E00F3F2F10D150300300000004D007265737472696374656400F3F2F10D150300571000005000637573746F6D00F3F2F10D1503005710000058007265736F757263655F6E616D65005E000515130012025F100000000000000000000060005F5F76635F617474726962757465733A3A6D6F64756C65417474726962757465002E3F41556D6F64756C65417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006166010000054100000E1010000560005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6F7574417474726962757465002E3F41556F7574417474726962757465405F5F76635F61747472696275746573404000F10A000210621000000C0401001A0009100300000062100000631000000002000028100000000000001A00031211150300641000006F757441747472696275746500F3F2F1560005150100020265100000000000000000000001005F5F76635F617474726962757465733A3A6F7574417474726962757465002E3F41556F7574417474726962757465405F5F76635F61747472696275746573404000F10E00061666100000541000009C0300005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A696D706F7274417474726962757465002E3F4155696D706F7274417474726962757465405F5F76635F61747472696275746573404000F3F2F10A00011201000000571000000A000210681000000C0401001A00091003000000681000006A1000000002010069100000000000002E000312111503006B100000696D706F7274417474726962757465000D15030057100000000069646C5F66696C6500F15E000515020002026C100000000000000000000008005F5F76635F617474726962757465733A3A696D706F7274417474726962757465002E3F4155696D706F7274417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006166D100000541000000A030000720005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A757365736765746C6173746572726F72417474726962757465002E3F4155757365736765746C6173746572726F72417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002106F1000000C0401001A000910030000006F10000070100000000200002810000000000000260003121115030071100000757365736765746C6173746572726F7241747472696275746500F2F1720005150100020272100000000000000000000001005F5F76635F617474726962757465733A3A757365736765746C6173746572726F72417474726962757465002E3F4155757365736765746C6173746572726F72417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616731000005410000051040000560005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A726566417474726962757465002E3F4155726566417474726962757465405F5F76635F61747472696275746573404000F10A000210751000000C0401001A0009100300000075100000761000000002000028100000000000001A000312111503007710000072656641747472696275746500F3F2F1560005150100020278100000000000000000000001005F5F76635F617474726962757465733A3A726566417474726962757465002E3F4155726566417474726962757465405F5F76635F61747472696275746573404000F10E0006167910000054100000DD030000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A70726F7669646572417474726962757465002E3F415570726F7669646572417474726962757465405F5F76635F61747472696275746573404000F3F2F112000112030000005710000057100000740000000A0002107B1000000C0401001A000910030000007B1000007D100000000203007C100000000000001A000910030000007B1000007D10000000020000281000000000000012000612030000007E100000030000007F100000520003120F1502008010000070726F766964657241747472696275746500F2F10D1503005710000000006E616D6500F10D1503005710000008007575696400F10D150300740000001000636F6F6B69657300F2F1620005150500020281100000000000000000000018005F5F76635F617474726962757465733A3A70726F7669646572417474726962757465002E3F415570726F7669646572417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616821000005410000043010000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A76695F70726F676964417474726962757465002E3F415576695F70726F676964417474726962757465405F5F76635F61747472696275746573404000F10A000210841000000C0401001A0009100300000084100000851000000002010069100000000000002E000312111503008610000076695F70726F67696441747472696275746500F10D15030057100000000076616C756500620005150200020287100000000000000000000008005F5F76635F617474726962757465733A3A76695F70726F676964417474726962757465002E3F415576695F70726F676964417474726962757465405F5F76635F61747472696275746573404000F10E0006168810000054100000D60100005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A766172617267417474726962757465002E3F4155766172617267417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002108A1000000C0401001A000910030000008A1000008B1000000002000028100000000000001A000312111503008C100000766172617267417474726962757465005E000515010002028D100000000000000000000001005F5F76635F617474726962757465733A3A766172617267417474726962757465002E3F4155766172617267417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006168E1000005410000061040000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6C656E6774685F6973417474726962757465002E3F41556C656E6774685F6973417474726962757465405F5F76635F61747472696275746573404000F10A000210901000000C0401001A0009100300000090100000911000000002010069100000000000003600031211150300921000006C656E6774685F697341747472696275746500F10D15030057100000000065787072657373696F6E00F3F2F1620005150200020293100000000000000000000008005F5F76635F617474726962757465733A3A6C656E6774685F6973417474726962757465002E3F41556C656E6774685F6973417474726962757465405F5F76635F61747472696275746573404000F10E00061694100000541000003E0300005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A756E69717565417474726962757465002E3F4155756E69717565417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210961000000C0401001A0009100300000096100000971000000002000028100000000000001A0003121115030098100000756E69717565417474726962757465005E0005150100020299100000000000000000000001005F5F76635F617474726962757465733A3A756E69717565417474726962757465002E3F4155756E69717565417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006169A1000005410000049040000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6173796E635F75756964417474726962757465002E3F41556173796E635F75756964417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002109C1000000C0401001A000910030000009C1000009D1000000002010069100000000000002E000312111503009E1000006173796E635F75756964417474726962757465000D1503005710000000007575696400F166000515020002029F100000000000000000000008005F5F76635F617474726962757465733A3A6173796E635F75756964417474726962757465002E3F41556173796E635F75756964417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616A01000005410000036020000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6C6963656E736564417474726962757465002E3F41556C6963656E736564417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210A21000000C0401001A00091003000000A2100000A31000000002000028100000000000001E00031211150300A41000006C6963656E73656441747472696275746500F2F16200051501000202A5100000000000000000000001005F5F76635F617474726962757465733A3A6C6963656E736564417474726962757465002E3F41556C6963656E736564417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616A61000005410000048030000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7066696C65417474726962757465002E3F415568656C7066696C65417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210A81000000C0401001A00091003000000A8100000A91000000002010069100000000000003200031211150300AA10000068656C7066696C6541747472696275746500F2F10D15030057100000000066696C656E616D6500F16200051502000202AB100000000000000000000008005F5F76635F617474726962757465733A3A68656C7066696C65417474726962757465002E3F415568656C7066696C65417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616AC10000054100000BF0200005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A736F75726365417474726962757465002E3F4155736F75726365417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210AE1000000C0401001A00091003000000AE100000AF1000000002010069100000000000001A00091003000000AE100000AF1000000002000028100000000000001200061203000000B010000003000000B11000002A0003120F150200B2100000736F75726365417474726962757465000D15030057100000000076616C7565005E00051503000202B3100000000000000000000008005F5F76635F617474726962757465733A3A736F75726365417474726962757465002E3F4155736F75726365417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616B410000054100000180400005A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A656E747279417474726962757465002E3F4155656E747279417474726962757465405F5F76635F61747472696275746573404000F10A000210B61000000C0401001A00091003000000B6100000B71000000002010069100000000000002E00031211150300B8100000656E74727941747472696275746500F10D150300571000000000656E7472795F696400F15A00051502000202B9100000000000000000000008005F5F76635F617474726962757465733A3A656E747279417474726962757465002E3F4155656E747279417474726962757465405F5F76635F61747472696275746573404000F10E000616BA10000054100000A00200005A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A75756964417474726962757465002E3F415575756964417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210BC1000000C0401001A00091003000000BC100000BD1000000002010069100000000000002A00031211150300BE1000007575696441747472696275746500F2F10D15030057100000000076616C7565005A00051502000202BF100000000000000000000008005F5F76635F617474726962757465733A3A75756964417474726962757465002E3F415575756964417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616C010000054100000BC0100005A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A63617365417474726962757465002E3F415563617365417474726962757465405F5F76635F61747472696275746573404000F3F2F10A00011201000000740000000A000210C21000000C0401001A00091003000000C2100000C410000000020100C3100000000000002A00031211150300C51000006361736541747472696275746500F2F10D15030074000000000076616C7565005A00051502000202C6100000000000000000000004005F5F76635F617474726962757465733A3A63617365417474726962757465002E3F415563617365417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616C710000054100000520200005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A72657476616C417474726962757465002E3F415572657476616C417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210C91000000C0401001A00091003000000C9100000CA1000000002000028100000000000001A00031211150300CB10000072657476616C417474726962757465005E00051501000202CC100000000000000000000001005F5F76635F617474726962757465733A3A72657476616C417474726962757465002E3F415572657476616C417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616CD10000054100000FB030000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6170706F626A656374417474726962757465002E3F41556170706F626A656374417474726962757465405F5F76635F61747472696275746573404000F10A000210CF1000000C0401001A00091003000000CF100000D01000000002000028100000000000001E00031211150300D11000006170706F626A65637441747472696275746500F16200051501000202D2100000000000000000000001005F5F76635F617474726962757465733A3A6170706F626A656374417474726962757465002E3F41556170706F626A656374417474726962757465405F5F76635F61747472696275746573404000F10E000616D3100000541000002E0200005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A707261676D61417474726962757465002E3F4155707261676D61417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210D51000000C0401001A00091003000000D5100000D61000000002010069100000000000003600031211150300D7100000707261676D61417474726962757465000D150300571000000000746F6B656E5F73657175656E636500F3F2F15E00051502000202D8100000000000000000000008005F5F76635F617474726962757465733A3A707261676D61417474726962757465002E3F4155707261676D61417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616D910000054100000B2030000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A62696E6461626C65417474726962757465002E3F415562696E6461626C65417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210DB1000000C0401001A00091003000000DB100000DC1000000002000028100000000000001E00031211150300DD10000062696E6461626C6541747472696275746500F2F16200051501000202DE100000000000000000000001005F5F76635F617474726962757465733A3A62696E6461626C65417474726962757465002E3F415562696E6461626C65417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616DF1000005410000040020000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A7265717565737465646974417474726962757465002E3F41557265717565737465646974417474726962757465405F5F76635F61747472696275746573404000F10A000210E11000000C0401001A00091003000000E1100000E21000000002000028100000000000002200031211150300E3100000726571756573746564697441747472696275746500F3F2F16600051501000202E4100000000000000000000001005F5F76635F617474726962757465733A3A7265717565737465646974417474726962757465002E3F41557265717565737465646974417474726962757465405F5F76635F61747472696275746573404000F10E000616E510000054100000E50300006E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A706F696E7465725F64656661756C74417474726962757465002E3F4155706F696E7465725F64656661756C74417474726962757465405F5F76635F61747472696275746573404000F12A00031202150300000070747200F2F102150300010072656600F2F1021503000200756E6971756500F3F2F17A0007150300080274000000E81000005F5F76635F617474726962757465733A3A706F696E7465725F64656661756C744174747269627574653A3A747970655F65002E3F415734747970655F6540706F696E7465725F64656661756C74417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616E910000054100000A50300000A00011201000000E91000000A000210E71000000C0401001A00091003000000E7100000EC10000000020100EB100000000000004600031210150000E9100000747970655F6500F111150300ED100000706F696E7465725F64656661756C7441747472696275746500F3F2F10D150300E910000000007479706500F16E00051503001202EE100000000000000000000004005F5F76635F617474726962757465733A3A706F696E7465725F64656661756C74417474726962757465002E3F4155706F696E7465725F64656661756C74417474726962757465405F5F76635F61747472696275746573404000F10E000616EF10000054100000A40300005A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6C6F63616C417474726962757465002E3F41556C6F63616C417474726962757465405F5F76635F61747472696275746573404000F10A000210F11000000C0401001A00091003000000F1100000F21000000002000028100000000000001A00031211150300F31000006C6F63616C41747472696275746500F15A00051501000202F4100000000000000000000001005F5F76635F617474726962757465733A3A6C6F63616C417474726962757465002E3F41556C6F63616C417474726962757465405F5F76635F61747472696275746573404000F10E000616F510000054100000500300006E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6576656E745F7265636569766572417474726962757465002E3F41556576656E745F7265636569766572417474726962757465405F5F76635F61747472696275746573404000F3F2F12E0003120215030000006E617469766500F3F2F1021503000100636F6D00F2F10215030002006D616E6167656400F2F1760007150300080274000000F81000005F5F76635F617474726962757465733A3A6576656E745F72656365697665724174747269627574653A3A747970655F65002E3F415734747970655F65406576656E745F7265636569766572417474726962757465405F5F76635F61747472696275746573404000F10E000616F910000054100000880000000E00011202000000F9100000300000000A000210F71000000C0401001A00091003000000F7100000FC10000000020200FB100000000000000A00011201000000F91000001A00091003000000F7100000FC10000000020100FE100000000000001A00091003000000F7100000FC1000000002000028100000000000001A00061203000000FD10000003000000FF10000003000000001100005E00031210150000F9100000747970655F6500F10F150300011100006576656E745F7265636569766572417474726962757465000D150300F910000000007479706500F10D1503003000000004006C61796F75745F646570656E64656E7400F16E0005150600120202110000000000000000000008005F5F76635F617474726962757465733A3A6576656E745F7265636569766572417474726962757465002E3F41556576656E745F7265636569766572417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616031100005410000087000000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A696D706C656D656E7473417474726962757465002E3F4155696D706C656D656E7473417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210051100000C0401001A0009100300000005110000061100000002010069100000000000001A0009100300000005110000061100000002000028100000000000001200061203000000071100000300000008110000520003120F15020009110000696D706C656D656E7473417474726962757465000D150300571000000000696E746572666163657300F3F2F10D15030057100000080064697370696E746572666163657300F3F2F166000515040002020A110000000000000000000010005F5F76635F617474726962757465733A3A696D706C656D656E7473417474726962757465002E3F4155696D706C656D656E7473417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006160B11000054100000EF0000005A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6475616C417474726962757465002E3F41556475616C417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002100D1100000C0401001A000910030000000D1100000E1100000002000028100000000000001A000312111503000F1100006475616C41747472696275746500F2F15A0005150100020210110000000000000000000001005F5F76635F617474726962757465733A3A6475616C417474726962757465002E3F41556475616C417474726962757465405F5F76635F61747472696275746573404000F3F2F10E00061611110000541000007E0100005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A73697A655F6973417474726962757465002E3F415573697A655F6973417474726962757465405F5F76635F61747472696275746573404000F10A000210131100000C0401001A00091003000000131100001411000000020100691000000000000036000312111503001511000073697A655F697341747472696275746500F3F2F10D15030057100000000065787072657373696F6E00F3F2F15E0005150200020216110000000000000000000008005F5F76635F617474726962757465733A3A73697A655F6973417474726962757465002E3F415573697A655F6973417474726962757465405F5F76635F61747472696275746573404000F10E0006161711000054100000040400005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A76657273696F6E417474726962757465002E3F415576657273696F6E417474726962757465405F5F76635F61747472696275746573404000F10A000210191100000C0401001A00091003000000191100001A1100000002010069100000000000002E000312111503001B11000076657273696F6E41747472696275746500F3F2F10D15030057100000000076616C7565005E000515020002021C110000000000000000000008005F5F76635F617474726962757465733A3A76657273696F6E417474726962757465002E3F415576657273696F6E417474726962757465405F5F76635F61747472696275746573404000F10E0006161D11000054100000C90100005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A70726F676964417474726962757465002E3F415570726F676964417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002101F1100000C0401001A000910030000001F110000201100000002010069100000000000002A000312111503002111000070726F676964417474726962757465000D1503005710000000006E616D6500F15E0005150200020222110000000000000000000008005F5F76635F617474726962757465733A3A70726F676964417474726962757465002E3F415570726F676964417474726962757465405F5F76635F61747472696275746573404000F3F2F10E00061623110000541000009A0100005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A756E686F6F6B417474726962757465002E3F4155756E686F6F6B417474726962757465405F5F76635F61747472696275746573404000F3F2F11600011204000000571000005710000057100000571000000A000210251100000C0401001A00091003000000251100002711000000020400261100000000000012000112030000005710000057100000571000001A0009100300000025110000271100000002030029110000000000000E0001120200000057100000571000001A000910030000002511000027110000000202002B110000000000001A000910030000002511000027110000000200002810000000000000220006120300000028110000030000002A110000030000002C110000030000002D110000660003120F1504002E110000756E686F6F6B417474726962757465000D1503005710000000006576656E74000D150300571000000800736F7572636500F3F2F10D15030057100000100068616E646C657200F2F10D150300571000001800726563656976657200F15E000515080002022F110000000000000000000020005F5F76635F617474726962757465733A3A756E686F6F6B417474726962757465002E3F4155756E686F6F6B417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616301100005410000090040000720005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C70737472696E67636F6E74657874417474726962757465002E3F415568656C70737472696E67636F6E74657874417474726962757465405F5F76635F61747472696275746573404000F10A000210321100000C0401001A00091003000000321100003311000000020100C3100000000000003A000312111503003411000068656C70737472696E67636F6E7465787441747472696275746500F10D150300740000000000636F6E74657874696400720005150200020235110000000000000000000004005F5F76635F617474726962757465733A3A68656C70737472696E67636F6E74657874417474726962757465002E3F415568656C70737472696E67636F6E74657874417474726962757465405F5F76635F61747472696275746573404000F10E0006163611000054100000D2020000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C70737472696E67417474726962757465002E3F415568656C70737472696E67417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210381100000C0401001A0009100300000038110000391100000002010069100000000000003A000312111503003A11000068656C70737472696E67417474726962757465000D15030057100000000068656C705F746578745F737472696E6700F166000515020002023B110000000000000000000008005F5F76635F617474726962757465733A3A68656C70737472696E67417474726962757465002E3F415568656C70737472696E67417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006163C11000054100000C9020000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A646973706C617962696E64417474726962757465002E3F4155646973706C617962696E64417474726962757465405F5F76635F61747472696275746573404000F10A0002103E1100000C0401001A000910030000003E1100003F110000000200002810000000000000220003121115030040110000646973706C617962696E6441747472696275746500F3F2F1660005150100020241110000000000000000000001005F5F76635F617474726962757465733A3A646973706C617962696E64417474726962757465002E3F4155646973706C617962696E64417474726962757465405F5F76635F61747472696275746573404000F10E000616421100005410000097020000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A69646C5F71756F7465417474726962757465002E3F415569646C5F71756F7465417474726962757465405F5F76635F61747472696275746573404000F10A000210441100000C0401001A0009100300000044110000451100000002010069100000000000001A00091003000000441100004511000000020000281000000000000012000612030000004611000003000000471100002E0003120F1502004811000069646C5F71756F746541747472696275746500F10D1503005710000000007465787400F1620005150300020249110000000000000000000008005F5F76635F617474726962757465733A3A69646C5F71756F7465417474726962757465002E3F415569646C5F71756F7465417474726962757465405F5F76635F61747472696275746573404000F10E0006164A11000054100000E3000000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A7377697463685F6973417474726962757465002E3F41557377697463685F6973417474726962757465405F5F76635F61747472696275746573404000F10A0002104C1100000C0401001A000910030000004C1100004D1100000002010069100000000000003E000312111503004E1100007377697463685F697341747472696275746500F10D1503005710000000006C696D697465645F65787072657373696F6E00F3F2F162000515020002024F110000000000000000000008005F5F76635F617474726962757465733A3A7377697463685F6973417474726962757465002E3F41557377697463685F6973417474726962757465405F5F76635F61747472696275746573404000F10E000616501100005410000024040000560005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6F646C417474726962757465002E3F41556F646C417474726962757465405F5F76635F61747472696275746573404000F10A000210521100000C0401001A0009100300000052110000531100000002000028100000000000001A00031211150300541100006F646C41747472696275746500F3F2F1560005150100020255110000000000000000000001005F5F76635F617474726962757465733A3A6F646C417474726962757465002E3F41556F646C417474726962757465405F5F76635F61747472696275746573404000F10E0006165611000054100000840300006E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A64656661756C74636F6C6C656C656D417474726962757465002E3F415564656661756C74636F6C6C656C656D417474726962757465405F5F76635F61747472696275746573404000F10A000210581100000C0401001A00091003000000581100005911000000020000281000000000000026000312111503005A11000064656661756C74636F6C6C656C656D41747472696275746500F3F2F16E000515010002025B110000000000000000000001005F5F76635F617474726962757465733A3A64656661756C74636F6C6C656C656D417474726962757465002E3F415564656661756C74636F6C6C656C656D417474726962757465405F5F76635F61747472696275746573404000F10E0006165C110000541000007A0200006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6E6F6E637265617461626C65417474726962757465002E3F41556E6F6E637265617461626C65417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002105E1100000C0401001A000910030000005E1100005F1100000002000028100000000000002200031211150300601100006E6F6E637265617461626C6541747472696275746500F2F16A0005150100020261110000000000000000000001005F5F76635F617474726962757465733A3A6E6F6E637265617461626C65417474726962757465002E3F41556E6F6E637265617461626C65417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006166211000054100000740300007E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A726567697374726174696F6E5F736372697074417474726962757465002E3F4155726567697374726174696F6E5F7363726970744174747269627574654061746C405F5F76635F617474726962757465734040000A000210641100000C0401001A0009100300000064110000651100000002010069100000000000001A00091003000000641100006511000000020000281000000000000012000612030000006611000003000000671100003E0003120F15020068110000726567697374726174696F6E5F73637269707441747472696275746500F3F2F10D15030057100000000073637269707400F3F2F17E0005150300020269110000000000000000000008005F5F76635F617474726962757465733A3A61746C3A3A726567697374726174696F6E5F736372697074417474726962757465002E3F4155726567697374726174696F6E5F7363726970744174747269627574654061746C405F5F76635F617474726962757465734040000E0006166A11000054100000300500007A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A72657175697265735F63617465676F7279417474726962757465002E3F415572657175697265735F63617465676F72794174747269627574654061746C405F5F76635F617474726962757465734040000A0002106C1100000C0401001A000910030000006C1100006D11000000020100691000000000000036000312111503006E11000072657175697265735F63617465676F727941747472696275746500F10D15030057100000000076616C7565007A000515020002026F110000000000000000000008005F5F76635F617474726962757465733A3A61746C3A3A72657175697265735F63617465676F7279417474726962757465002E3F415572657175697265735F63617465676F72794174747269627574654061746C405F5F76635F617474726962757465734040000E0006167011000054100000160500006E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A736F61705F6D6574686F64417474726962757465002E3F4155736F61705F6D6574686F644174747269627574654061746C405F5F76635F617474726962757465734040000A000210721100000C0401001A0009100300000072110000731100000002010069100000000000001A0009100300000072110000731100000002000028100000000000001200061203000000741100000300000075110000320003120F15020076110000736F61705F6D6574686F6441747472696275746500F3F2F10D1503005710000000006E616D6500F16E0005150300020277110000000000000000000008005F5F76635F617474726962757465733A3A61746C3A3A736F61705F6D6574686F64417474726962757465002E3F4155736F61705F6D6574686F644174747269627574654061746C405F5F76635F617474726962757465734040000E0006167811000054100000BE040000720005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A706572665F636F756E746572417474726962757465002E3F4155706572665F636F756E7465724174747269627574654061746C405F5F76635F61747472696275746573404000F2F12E0001120A000000571000005710000074000000740000007400000074000000300000007400000074000000571000000A0002107A1100000C0401001A000910030000007A1100007C11000000020A007B110000000000001A000910030000007A1100007C11000000020000281000000000000012000612030000007D110000030000007E110000120103120F1502007F110000706572665F636F756E74657241747472696275746500F2F10D1503005710000000006E616D65737472696E6700F3F2F10D15030057100000080068656C70737472696E6700F3F2F10D1503007400000010006E616D655F72657300F10D15030074000000140068656C705F72657300F10D150300740000001800636F756E7465727479706500F2F10D150300740000001C006465667363616C6500F10D15030030000000200064656661756C745F636F756E74657200F2F10D15030074000000240064657461696C00F3F2F10D1503007400000028006D61785F636F756E7465725F73697A6500F10D150300571000003000636F756E746572747970655F737472696E6700F3F2F1720005150C00020280110000000000000000000038005F5F76635F617474726962757465733A3A61746C3A3A706572665F636F756E746572417474726962757465002E3F4155706572665F636F756E7465724174747269627574654061746C405F5F76635F61747472696275746573404000F2F10E0006168111000054100000080600005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A726478417474726962757465002E3F41557264784174747269627574654061746C405F5F76635F617474726962757465734040000A000210831100000C0401001A0009100300000083110000841100000002030029110000000000001A000910030000008311000084110000000202002B110000000000001A0009100300000083110000841100000002000028100000000000001A000612030000008511000003000000861100000300000087110000520003120F1503008811000072647841747472696275746500F3F2F10D1503005710000000006B657900F2F10D15030057100000080076616C75656E616D65000D1503005710000010007265677479706500F2F15E0005150600020289110000000000000000000018005F5F76635F617474726962757465733A3A61746C3A3A726478417474726962757465002E3F41557264784174747269627574654061746C405F5F76635F617474726962757465734040000E0006168A11000054100000200500006E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A706572665F6F626A656374417474726962757465002E3F4155706572665F6F626A6563744174747269627574654061746C405F5F76635F61747472696275746573404000260001120800000074000000740000005710000057100000740000003000000057100000740000000A0002108C1100000C0401001A000910030000008C1100008E110000000208008D110000000000001A000910030000008C1100008E11000000020000281000000000000012000612030000008F1100000300000090110000D60003120F15020091110000706572665F6F626A65637441747472696275746500F3F2F10D1503007400000000006E616D655F72657300F10D15030074000000040068656C705F72657300F10D1503005710000008006E616D65737472696E6700F3F2F10D15030057100000100068656C70737472696E6700F3F2F10D15030074000000180064657461696C00F3F2F10D150300300000001C006E6F5F696E7374616E63657300F10D150300571000002000636C6173735F00F3F2F10D1503007400000028006D6178696E73746E616D656C656E00F3F2F16E0005150A00020292110000000000000000000030005F5F76635F617474726962757465733A3A61746C3A3A706572665F6F626A656374417474726962757465002E3F4155706572665F6F626A6563744174747269627574654061746C405F5F76635F617474726962757465734040000E0006169311000054100000EB050000760005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A736F61705F6E616D657370616365417474726962757465002E3F4155736F61705F6E616D6573706163654174747269627574654061746C405F5F76635F61747472696275746573404000F2F10A000210951100000C0401001A0009100300000095110000961100000002010069100000000000001A0009100300000095110000961100000002000028100000000000001200061203000000971100000300000098110000320003120F15020099110000736F61705F6E616D657370616365417474726962757465000D15030057100000000076616C75650076000515030002029A110000000000000000000008005F5F76635F617474726962757465733A3A61746C3A3A736F61705F6E616D657370616365417474726962757465002E3F4155736F61705F6E616D6573706163654174747269627574654061746C405F5F76635F61747472696275746573404000F2F10E0006169B11000054100000DB0400006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A7461675F6E616D65417474726962757465002E3F41557461675F6E616D654174747269627574654061746C405F5F76635F61747472696275746573404000F2F10A0002109D1100000C0401001A000910030000009D1100009E110000000202002B110000000000001A000910030000009D1100009E1100000002010069100000000000001A000910030000009D1100009E1100000002000028100000000000001A000612030000009F11000003000000A011000003000000A1110000460003120F150300A21100007461675F6E616D6541747472696275746500F2F10D1503005710000000006E616D6500F10D15030057100000080070617273655F66756E6300F3F2F16A00051505000202A3110000000000000000000010005F5F76635F617474726962757465733A3A61746C3A3A7461675F6E616D65417474726962757465002E3F41557461675F6E616D654174747269627574654061746C405F5F76635F61747472696275746573404000F2F10E000616A411000054100000C20500006E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A64625F636F6D6D616E64417474726962757465002E3F415564625F636F6D6D616E644174747269627574654061746C405F5F76635F61747472696275746573404000F2F10A000110710000000100F2F10A000210A71100000C0001001E00011206000000A8110000A8110000A8110000A8110000A8110000A81100000A000210A61100000C0401001A00091003000000A6110000AA11000000020600A9110000000000000A00011201000000A81100001A00091003000000A6110000AA11000000020100AC110000000000001E000112060000005710000057100000571000005710000057100000571000001A00091003000000A6110000AA11000000020600AE110000000000001A00091003000000A6110000AA1100000002010069100000000000001A00091003000000A6110000AA1100000002000028100000000000002A00061203000000AB11000003000000AD11000003000000AF11000003000000B011000003000000B11100009A0003120F150500B211000064625F636F6D6D616E64417474726962757465000D150300571000000000636F6D6D616E6400F2F10D1503005710000008006E616D6500F10D150300571000001000736F757263655F6E616D6500F2F10D15030057100000180068726573756C7400F2F10D15030057100000200062696E64696E677300F10D15030057100000280062756C6B5F666574636800F3F2F16E0005150B000202B3110000000000000000000030005F5F76635F617474726962757465733A3A61746C3A3A64625F636F6D6D616E64417474726962757465002E3F415564625F636F6D6D616E644174747269627574654061746C405F5F76635F61747472696275746573404000F2F10E000616B4110000541000004D0500006E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A736F61705F686561646572417474726962757465002E3F4155736F61705F6865616465724174747269627574654061746C405F5F76635F617474726962757465734040001600011204000000571000003000000030000000300000000A000210B61100000C0401001A00091003000000B6110000B811000000020400B7110000000000001A00091003000000B6110000B81100000002010069100000000000001A00091003000000B6110000B81100000002000028100000000000001A00061203000000B911000003000000BA11000003000000BB110000660003120F150300BC110000736F61705F68656164657241747472696275746500F3F2F10D15030057100000000076616C7565000D150300300000000800726571756972656400F10D150300300000000900696E00F3F2F10D150300300000000A006F757400F2F16E00051507000202BD110000000000000000000010005F5F76635F617474726962757465733A3A61746C3A3A736F61705F686561646572417474726962757465002E3F4155736F61705F6865616465724174747269627574654061746C405F5F76635F617474726962757465734040000E000616BE11000054100000CA0400006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A64625F7461626C65417474726962757465002E3F415564625F7461626C654174747269627574654061746C405F5F76635F61747472696275746573404000F2F11A00011205000000A8110000A8110000A8110000A8110000A81100000A000210C01100000C0401001A00091003000000C0110000C211000000020500C1110000000000001A00091003000000C0110000C211000000020100AC110000000000001A0001120500000057100000571000005710000057100000571000001A00091003000000C0110000C211000000020500C5110000000000001A00091003000000C0110000C21100000002010069100000000000001A00091003000000C0110000C21100000002000028100000000000002A00061203000000C311000003000000C411000003000000C611000003000000C711000003000000C8110000820003120F150500C911000064625F7461626C6541747472696275746500F2F10D1503005710000000007461626C65000D1503005710000008006E616D6500F10D150300571000001000736F757263655F6E616D6500F2F10D15030057100000180068726573756C7400F2F10D15030057100000200062756C6B5F666574636800F3F2F16A0005150A000202CA110000000000000000000028005F5F76635F617474726962757465733A3A61746C3A3A64625F7461626C65417474726962757465002E3F415564625F7461626C654174747269627574654061746C405F5F76635F61747472696275746573404000F2F10E000616CB11000054100000650500006E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A61676772656761746573417474726962757465002E3F4155616767726567617465734174747269627574654061746C405F5F76635F61747472696275746573404000F2F10A000210CD1100000C0401001A00091003000000CD110000CE1100000002010069100000000000001A00091003000000CD110000CE1100000002000028100000000000001200061203000000CF11000003000000D01100002E0003120F150200D111000061676772656761746573417474726962757465000D150300571000000000636C736964006E00051503000202D2110000000000000000000008005F5F76635F617474726962757465733A3A61746C3A3A61676772656761746573417474726962757465002E3F4155616767726567617465734174747269627574654061746C405F5F76635F61747472696275746573404000F2F10E000616D311000054100000FE0400006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A64625F736F75726365417474726962757465002E3F415564625F736F757263654174747269627574654061746C405F5F76635F617474726962757465734040001200011203000000A8110000A8110000A81100000A000210D51100000C0401001A00091003000000D5110000D711000000020300D6110000000000001A00091003000000D5110000D711000000020100AC110000000000001A00091003000000D5110000D71100000002030029110000000000001A00091003000000D5110000D71100000002010069100000000000001A00091003000000D5110000D71100000002000028100000000000002A00061203000000D811000003000000D911000003000000DA11000003000000DB11000003000000DC110000560003120F150500DD11000064625F736F7572636541747472696275746500F10D150300571000000000736F7572636500F3F2F10D1503005710000008006E616D6500F10D15030057100000100068726573756C7400F2F16A00051508000202DE110000000000000000000018005F5F76635F617474726962757465733A3A61746C3A3A64625F736F75726365417474726962757465002E3F415564625F736F757263654174747269627574654061746C405F5F76635F617474726962757465734040000E000616DF110000541000003B0500007E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A696D706C656D656E74735F63617465676F7279417474726962757465002E3F4155696D706C656D656E74735F63617465676F72794174747269627574654061746C405F5F76635F617474726962757465734040000A000210E11100000C0401001A00091003000000E1110000E21100000002010069100000000000003A00031211150300E3110000696D706C656D656E74735F63617465676F727941747472696275746500F3F2F10D15030057100000000076616C7565007E00051502000202E4110000000000000000000008005F5F76635F617474726962757465733A3A61746C3A3A696D706C656D656E74735F63617465676F7279417474726962757465002E3F4155696D706C656D656E74735F63617465676F72794174747269627574654061746C405F5F76635F617474726962757465734040000E000616E5110000541000000A050000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A706572666D6F6E417474726962757465002E3F4155706572666D6F6E4174747269627574654061746C405F5F76635F617474726962757465734040000E0001120200000057100000300000000A000210E71100000C0401001A00091003000000E7110000E911000000020200E8110000000000001A00091003000000E7110000E91100000002010069100000000000001A00091003000000E7110000E91100000002000028100000000000001A00061203000000EA11000003000000EB11000003000000EC110000420003120F150300ED110000706572666D6F6E41747472696275746500F3F2F10D1503005710000000006E616D6500F10D150300300000000800726567697374657200F16600051505000202EE110000000000000000000010005F5F76635F617474726962757465733A3A61746C3A3A706572666D6F6E417474726962757465002E3F4155706572666D6F6E4174747269627574654061746C405F5F76635F617474726962757465734040000E000616EF11000054100000DE050000760005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A726571756573745F68616E646C6572417474726962757465002E3F4155726571756573745F68616E646C65724174747269627574654061746C405F5F76635F617474726962757465734040000A000210F11100000C0401001A00091003000000F1110000F2110000000202002B110000000000001A00091003000000F1110000F21100000002010069100000000000001A00091003000000F1110000F21100000002000028100000000000001A00061203000000F311000003000000F411000003000000F5110000460003120F150300F6110000726571756573745F68616E646C657241747472696275746500F3F2F10D1503005710000000006E616D6500F10D15030057100000080073646C00F2F17600051505000202F7110000000000000000000010005F5F76635F617474726962757465733A3A61746C3A3A726571756573745F68616E646C6572417474726962757465002E3F4155726571756573745F68616E646C65724174747269627574654061746C405F5F76635F617474726962757465734040000E000616F811000054100000D00500007E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A636F6D5F696E746572666163655F656E747279417474726962757465002E3F4155636F6D5F696E746572666163655F656E7472794174747269627574654061746C405F5F76635F617474726962757465734040000A000210FA1100000C0401001A00091003000000FA110000FB1100000002010069100000000000001A00091003000000FA110000FB1100000002000028100000000000001200061203000000FC11000003000000FD1100003A0003120F150200FE110000636F6D5F696E746572666163655F656E74727941747472696275746500F3F2F10D15030057100000000076616C7565007E00051503000202FF110000000000000000000008005F5F76635F617474726962757465733A3A61746C3A3A636F6D5F696E746572666163655F656E747279417474726962757465002E3F4155636F6D5F696E746572666163655F656E7472794174747269627574654061746C405F5F76635F617474726962757465734040000E0006160012000054100000E60400007E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A737570706F72745F6572726F725F696E666F417474726962757465002E3F4155737570706F72745F6572726F725F696E666F4174747269627574654061746C405F5F76635F61747472696275746573404000F2F10A000210021200000C0401001A000910030000000212000003120000000201006910000000000000420003121115030004120000737570706F72745F6572726F725F696E666F417474726962757465000D1503005710000000006572726F725F696E7465726661636500F2F17E0005150200020205120000000000000000000008005F5F76635F617474726962757465733A3A61746C3A3A737570706F72745F6572726F725F696E666F417474726962757465002E3F4155737570706F72745F6572726F725F696E666F4174747269627574654061746C405F5F76635F61747472696275746573404000F2F10E0006160612000054100000F3040000720005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A736F61705F68616E646C6572417474726962757465002E3F4155736F61705F68616E646C65724174747269627574654061746C405F5F76635F61747472696275746573404000F2F10A000210081200000C0401001A00091003000000081200000912000000020500C5110000000000001A00091003000000081200000912000000020000281000000000000012000612030000000A120000030000000B1200007A0003120F1502000C120000736F61705F68616E646C657241747472696275746500F2F10D1503005710000000006E616D6500F10D1503005710000008006E616D657370616365000D15030057100000100070726F746F636F6C00F10D1503005710000018007374796C65000D15030057100000200075736500F2F172000515070002020D120000000000000000000028005F5F76635F617474726962757465733A3A61746C3A3A736F61705F68616E646C6572417474726962757465002E3F4155736F61705F68616E646C65724174747269627574654061746C405F5F76635F61747472696275746573404000F2F10E0006160E12000054100000A70400006E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A64625F6163636573736F72417474726962757465002E3F415564625F6163636573736F724174747269627574654061746C405F5F76635F617474726962757465734040000E0001120200000074000000300000000A000210101200000C0401001A0009100300000010120000121200000002020011120000000000001A0009100300000010120000121200000002000028100000000000001200061203000000131200000300000014120000420003120F1502001512000064625F6163636573736F7241747472696275746500F3F2F10D150300740000000000696400F3F2F10D1503003000000004006175746F5F006E0005150400020216120000000000000000000008005F5F76635F617474726962757465733A3A61746C3A3A64625F6163636573736F72417474726962757465002E3F415564625F6163636573736F724174747269627574654061746C405F5F76635F617474726962757465734040000E00061617120000541000007B0500006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A64625F706172616D417474726962757465002E3F415564625F706172616D4174747269627574654061746C405F5F76635F61747472696275746573404000F2F12200011207000000571000005710000057100000571000005710000057100000571000000A000210191200000C0401001A00091003000000191200001B120000000207001A120000000000001A00091003000000191200001B1200000002010069100000000000001A00091003000000191200001B1200000002000028100000000000001A000612030000001C120000030000001D120000030000001E120000A60003120F1503001F12000064625F706172616D41747472696275746500F2F10D1503005710000000006F7264696E616C00F2F10D150300571000000800706172616D74797065000D15030057100000100064627479706500F3F2F10D150300571000001800707265636973696F6E000D1503005710000020007363616C65000D15030057100000280073746174757300F3F2F10D1503005710000030006C656E67746800F3F2F16A0005150A00020220120000000000000000000038005F5F76635F617474726962757465733A3A61746C3A3A64625F706172616D417474726962757465002E3F415564625F706172616D4174747269627574654061746C405F5F76635F61747472696275746573404000F2F10E0006162112000054100000A40500006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A64625F636F6C756D6E417474726962757465002E3F415564625F636F6C756D6E4174747269627574654061746C405F5F76635F617474726962757465734040000A000210231200000C0401001A00091003000000231200002412000000020600AE110000000000001A0009100300000023120000241200000002010069100000000000001A0009100300000023120000241200000002000028100000000000001A000612030000002512000003000000261200000300000027120000920003120F1503002812000064625F636F6C756D6E41747472696275746500F10D1503005710000000006F7264696E616C00F2F10D15030057100000080064627479706500F3F2F10D150300571000001000707265636973696F6E000D1503005710000018007363616C65000D15030057100000200073746174757300F3F2F10D1503005710000028006C656E67746800F3F2F16A0005150900020229120000000000000000000030005F5F76635F617474726962757465733A3A61746C3A3A64625F636F6C756D6E417474726962757465002E3F415564625F636F6C756D6E4174747269627574654061746C405F5F76635F617474726962757465734040000E0006162A12000054100000890500006E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A61746C3A3A73796E6368726F6E697A65417474726962757465002E3F415573796E6368726F6E697A654174747269627574654061746C405F5F76635F617474726962757465734040000A0002102C1200000C0401001A000910030000002C1200002D12000000020000281000000000000022000312111503002E12000073796E6368726F6E697A6541747472696275746500F3F2F16E000515010002022F120000000000000000000001005F5F76635F617474726962757465733A3A61746C3A3A73796E6368726F6E697A65417474726962757465002E3F415573796E6368726F6E697A654174747269627574654061746C405F5F76635F617474726962757465734040000E00061630120000541000009F0400005A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A686F6F6B417474726962757465002E3F4155686F6F6B417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210321200000C0401001A0009100300000032120000331200000002040026110000000000001A0009100300000032120000331200000002030029110000000000001A000910030000003212000033120000000202002B110000000000001A000910030000003212000033120000000200002810000000000000220006120300000034120000030000003512000003000000361200000300000037120000660003120F15040038120000686F6F6B41747472696275746500F2F10D1503005710000000006576656E74000D150300571000000800736F7572636500F3F2F10D15030057100000100068616E646C657200F2F10D150300571000001800726563656976657200F15A0005150800020239120000000000000000000020005F5F76635F617474726962757465733A3A686F6F6B417474726962757465002E3F4155686F6F6B417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006163A12000054100000840400005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6578706F7274417474726962757465002E3F41556578706F7274417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002103C1200000C0401001A000910030000003C1200003D1200000002000028100000000000001A000312111503003E1200006578706F7274417474726962757465005E000515010002023F120000000000000000000001005F5F76635F617474726962757465733A3A6578706F7274417474726962757465002E3F41556578706F7274417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006164012000054100000B90000006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A64697370696E74657266616365417474726962757465002E3F415564697370696E74657266616365417474726962757465405F5F76635F61747472696275746573404000F10A000210421200000C0401001A00091003000000421200004312000000020000281000000000000022000312111503004412000064697370696E7465726661636541747472696275746500F16A0005150100020245120000000000000000000001005F5F76635F617474726962757465733A3A64697370696E74657266616365417474726962757465002E3F415564697370696E74657266616365417474726962757465405F5F76635F61747472696275746573404000F10E0006164612000054100000750100005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A63616C6C5F6173417474726962757465002E3F415563616C6C5F6173417474726962757465405F5F76635F61747472696275746573404000F10A000210481200000C0401001A00091003000000481200004912000000020100051000000000000036000312111503004A12000063616C6C5F617341747472696275746500F3F2F10D1503000306000000006C6F63616C5F70726F6300F3F2F15E000515020002024B120000000000000000000008005F5F76635F617474726962757465733A3A63616C6C5F6173417474726962757465002E3F415563616C6C5F6173417474726962757465405F5F76635F61747472696275746573404000F10E0006164C12000054100000490200006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A64656661756C74767461626C65417474726962757465002E3F415564656661756C74767461626C65417474726962757465405F5F76635F61747472696275746573404000F10A0002104E1200000C0401001A000910030000004E1200004F12000000020100691000000000000032000312111503005012000064656661756C74767461626C6541747472696275746500F10D15030057100000000076616C7565006A0005150200020251120000000000000000000008005F5F76635F617474726962757465733A3A64656661756C74767461626C65417474726962757465002E3F415564656661756C74767461626C65417474726962757465405F5F76635F61747472696275746573404000F10E00061652120000541000008D0200005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A70726F70676574417474726962757465002E3F415570726F70676574417474726962757465405F5F76635F61747472696275746573404000F10A000210541200000C0401001A0009100300000054120000551200000002000028100000000000001E000312111503005612000070726F7067657441747472696275746500F3F2F15E0005150100020257120000000000000000000001005F5F76635F617474726962757465733A3A70726F70676574417474726962757465002E3F415570726F70676574417474726962757465405F5F76635F61747472696275746573404000F10E0006165812000054100000290100006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A64656661756C7476616C7565417474726962757465002E3F415564656661756C7476616C7565417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002105A1200000C0401001A000910030000005A1200005B12000000020100691000000000000032000312111503005C12000064656661756C7476616C756541747472696275746500F2F10D15030057100000000076616C7565006A000515020002025D120000000000000000000008005F5F76635F617474726962757465733A3A64656661756C7476616C7565417474726962757465002E3F415564656661756C7476616C7565417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006165E12000054100000830200006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A616767726567617461626C65417474726962757465002E3F4155616767726567617461626C65417474726962757465405F5F76635F61747472696275746573404000F3F2F12E0003120215030000006E6576657200021503000100616C6C6F77656400F2F1021503000200616C7761797300F3F2F1720007150300080274000000611200005F5F76635F617474726962757465733A3A616767726567617461626C654174747269627574653A3A747970655F65002E3F415734747970655F6540616767726567617461626C65417474726962757465405F5F76635F61747472696275746573404000F10E0006166212000054100000210200000A00011201000000621200000A000210601200000C0401001A0009100300000060120000651200000002010064120000000000001A0009100300000060120000651200000002000028100000000000001200061203000000661200000300000067120000420003121015000062120000747970655F6500F10F15020068120000616767726567617461626C6541747472696275746500F2F10D1503006212000000007479706500F16A0005150400120269120000000000000000000004005F5F76635F617474726962757465733A3A616767726567617461626C65417474726962757465002E3F4155616767726567617461626C65417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006166A12000054100000200200006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6E6F6E657874656E7369626C65417474726962757465002E3F41556E6F6E657874656E7369626C65417474726962757465405F5F76635F61747472696275746573404000F10A0002106C1200000C0401001A000910030000006C1200006D12000000020000281000000000000022000312111503006E1200006E6F6E657874656E7369626C6541747472696275746500F16A000515010002026F120000000000000000000001005F5F76635F617474726962757465733A3A6E6F6E657874656E7369626C65417474726962757465002E3F41556E6F6E657874656E7369626C65417474726962757465405F5F76635F61747472696275746573404000F10E00061670120000541000007C0300005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A76315F656E756D417474726962757465002E3F415576315F656E756D417474726962757465405F5F76635F61747472696275746573404000F10A000210721200000C0401001A0009100300000072120000731200000002000028100000000000001E000312111503007412000076315F656E756D41747472696275746500F3F2F15E0005150100020275120000000000000000000001005F5F76635F617474726962757465733A3A76315F656E756D417474726962757465002E3F415576315F656E756D417474726962757465405F5F76635F61747472696275746573404000F10E0006167612000054100000590400006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6F6C656175746F6D6174696F6E417474726962757465002E3F41556F6C656175746F6D6174696F6E417474726962757465405F5F76635F61747472696275746573404000F10A000210781200000C0401001A00091003000000781200007912000000020000281000000000000022000312111503007A1200006F6C656175746F6D6174696F6E41747472696275746500F16A000515010002027B120000000000000000000001005F5F76635F617474726962757465733A3A6F6C656175746F6D6174696F6E417474726962757465002E3F41556F6C656175746F6D6174696F6E417474726962757465405F5F76635F61747472696275746573404000F10E0006167C120000541000008C0300005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6D61785F6973417474726962757465002E3F41556D61785F6973417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002107E1200000C0401001A000910030000007E1200007F1200000002010069100000000000003200031211150300801200006D61785F6973417474726962757465000D15030057100000000065787072657373696F6E00F3F2F15E0005150200020281120000000000000000000008005F5F76635F617474726962757465733A3A6D61785F6973417474726962757465002E3F41556D61785F6973417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616821200005410000059030000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A66697273745F6973417474726962757465002E3F415566697273745F6973417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210841200000C0401001A0009100300000084120000851200000002010069100000000000002E000312111503008612000066697273745F697341747472696275746500F2F10D15030057100000000076616C756500620005150200020287120000000000000000000008005F5F76635F617474726962757465733A3A66697273745F6973417474726962757465002E3F415566697273745F6973417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006168812000054100000AA020000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6F7074696F6E616C417474726962757465002E3F41556F7074696F6E616C417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002108A1200000C0401001A000910030000008A1200008B1200000002000028100000000000001E000312111503008C1200006F7074696F6E616C41747472696275746500F2F162000515010002028D120000000000000000000001005F5F76635F617474726962757465733A3A6F7074696F6E616C417474726962757465002E3F41556F7074696F6E616C417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006168E12000054100000940300005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A656D697469646C417474726962757465002E3F4155656D697469646C417474726962757465405F5F76635F61747472696275746573404000F10A000110740000000100F2F10A000210901200000C0401001A0009100300000090120000921200000002020011120000000000001A00091003000000901200009212000000020100C3100000000000001A0009100300000090120000921200000002000028100000000000001A0006120300000093120000030000009412000003000000951200008A0003120E150300911200007265737472696374656400F10E15030091120000666F7263656400F10E150300911200007075736800F3F2F10E15030091120000706F70000F15030096120000656D697469646C41747472696275746500F3F2F10D15030074000000000076616C7565000D15030030000000040064656661756C74696D706F72747300F3F2F15E0005150900020297120000000000000000000008005F5F76635F617474726962757465733A3A656D697469646C417474726962757465002E3F4155656D697469646C417474726962757465405F5F76635F61747472696275746573404000F10E0006169812000054100000A40000006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A776972655F6D61727368616C417474726962757465002E3F4155776972655F6D61727368616C417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002109A1200000C0401001A000910030000009A1200009B12000000020100691000000000000036000312111503009C120000776972655F6D61727368616C41747472696275746500F2F10D150300571000000000776972655F74797065006A000515020002029D120000000000000000000008005F5F76635F617474726962757465733A3A776972655F6D61727368616C417474726962757465002E3F4155776972655F6D61727368616C417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006169E120000541000006A040000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A72657374726963746564417474726962757465002E3F415572657374726963746564417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210A01200000C0401001A00091003000000A0120000A11200000002010069100000000000001A00091003000000A0120000A11200000002000028100000000000001200061203000000A212000003000000A31200002E0003120F150200A412000072657374726963746564417474726962757465000D15030057100000000076616C7565006600051503000202A5120000000000000000000008005F5F76635F617474726962757465733A3A72657374726963746564417474726962757465002E3F415572657374726963746564417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616A612000054100000EF0300005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A696E636C756465417474726962757465002E3F4155696E636C756465417474726962757465405F5F76635F61747472696275746573404000F10A000210A81200000C0401001A00091003000000A8120000A91200000002010069100000000000003600031211150300AA120000696E636C75646541747472696275746500F3F2F10D150300571000000000696E636C7564655F66696C6500F15E00051502000202AB120000000000000000000008005F5F76635F617474726962757465733A3A696E636C756465417474726962757465002E3F4155696E636C756465417474726962757465405F5F76635F61747472696275746573404000F10E000616AC12000054100000280300005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6F626A656374417474726962757465002E3F41556F626A656374417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210AE1200000C0401001A00091003000000AE120000AF1200000002000028100000000000001A00031211150300B01200006F626A656374417474726962757465005E00051501000202B1120000000000000000000001005F5F76635F617474726962757465733A3A6F626A656374417474726962757465002E3F41556F626A656374417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616B2120000541000008F010000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A746872656164696E67417474726962757465002E3F4155746872656164696E67417474726962757465405F5F76635F61747472696275746573404000F14A00031202150300010061706172746D656E740002150300020073696E676C6500F3F2F10215030003006672656500F10215030004006E65757472616C00F2F1021503000500626F746800F1760007150500080274000000B51200005F5F76635F617474726962757465733A3A746872656164696E674174747269627574653A3A746872656164696E675F65002E3F415734746872656164696E675F6540746872656164696E67417474726962757465405F5F76635F61747472696275746573404000F10E000616B612000054100000A70100000A00011201000000B61200000A000210B41200000C0401001A00091003000000B4120000B912000000020100B8120000000000001A00091003000000B4120000B91200000002000028100000000000001200061203000000BA12000003000000BB1200004200031210150000B6120000746872656164696E675F65000F150200BC120000746872656164696E6741747472696275746500F10D150300B6120000000076616C7565006200051504001202BD120000000000000000000004005F5F76635F617474726962757465733A3A746872656164696E67417474726962757465002E3F4155746872656164696E67417474726962757465405F5F76635F61747472696275746573404000F10E000616BE12000054100000A60100005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68696464656E417474726962757465002E3F415568696464656E417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210C01200000C0401001A00091003000000C0120000C11200000002000028100000000000001A00031211150300C212000068696464656E417474726962757465005E00051501000202C3120000000000000000000001005F5F76635F617474726962757465733A3A68696464656E417474726962757465002E3F415568696464656E417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616C412000054100000E5020000560005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6964417474726962757465002E3F41556964417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210C61200000C0401001A00091003000000C6120000C712000000020100C3100000000000002A00031211150300C81200006964417474726962757465000D15030074000000000069645F6E756D00F3F2F15600051502000202C9120000000000000000000004005F5F76635F617474726962757465733A3A6964417474726962757465002E3F41556964417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616CA12000054100000ED0200006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C70737472696E67646C6C417474726962757465002E3F415568656C70737472696E67646C6C417474726962757465405F5F76635F61747472696275746573404000F10A000210CC1200000C0401001A00091003000000CC120000CD1200000002010069100000000000003600031211150300CE12000068656C70737472696E67646C6C41747472696275746500F10D150300571000000000646C6C6E616D6500F2F16A00051502000202CF120000000000000000000008005F5F76635F617474726962757465733A3A68656C70737472696E67646C6C417474726962757465002E3F415568656C70737472696E67646C6C417474726962757465405F5F76635F61747472696275746573404000F10E000616D012000054100000DC020000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A696E636C7564656C6962417474726962757465002E3F4155696E636C7564656C6962417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210D21200000C0401001A00091003000000D2120000D31200000002010069100000000000002E00031211150300D4120000696E636C7564656C6962417474726962757465000D15030057100000000076616C7565006600051502000202D5120000000000000000000008005F5F76635F617474726962757465733A3A696E636C7564656C6962417474726962757465002E3F4155696E636C7564656C6962417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616D6120000541000000A0100005A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A72616E6765417474726962757465002E3F415572616E6765417474726962757465405F5F76635F61747472696275746573404000F10E0001120200000074000000740000000A000210D81200000C0401001A00091003000000D8120000DA12000000020200D9120000000000004200031211150300DB12000072616E676541747472696275746500F10D1503007400000000006C6F775F76616C00F2F10D150300740000000400686967685F76616C00F15A00051503000202DC120000000000000000000008005F5F76635F617474726962757465733A3A72616E6765417474726962757465002E3F415572616E6765417474726962757465405F5F76635F61747472696275746573404000F10E000616DD12000054100000CB0300005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A737472696E67417474726962757465002E3F4155737472696E67417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210DF1200000C0401001A00091003000000DF120000E01200000002000028100000000000001A00031211150300E1120000737472696E67417474726962757465005E00051501000202E2120000000000000000000001005F5F76635F617474726962757465733A3A737472696E67417474726962757465002E3F4155737472696E67417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616E3120000541000000E040000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C70636F6E74657874417474726962757465002E3F415568656C70636F6E74657874417474726962757465405F5F76635F61747472696275746573404000F10A000210E51200000C0401001A00091003000000E5120000E61200000002010069100000000000003E00031211150300E712000068656C70636F6E7465787441747472696275746500F3F2F10D15030057100000000068656C70636F6E746578745F76616C7565006600051502000202E8120000000000000000000008005F5F76635F617474726962757465733A3A68656C70636F6E74657874417474726962757465002E3F415568656C70636F6E74657874417474726962757465405F5F76635F61747472696275746573404000F10E000616E912000054100000B5020000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A7377697463685F74797065417474726962757465002E3F41557377697463685F74797065417474726962757465405F5F76635F61747472696275746573404000F10A000210EB1200000C0401001A00091003000000EB120000EC1200000002010069100000000000004200031211150300ED1200007377697463685F7479706541747472696275746500F3F2F10D1503005710000000007377697463685F747970655F737065636966696572006600051502000202EE120000000000000000000008005F5F76635F617474726962757465733A3A7377697463685F74797065417474726962757465002E3F41557377697463685F74797065417474726962757465405F5F76635F61747472696275746573404000F10E000616EF120000541000002E0400006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A696D6D65646961746562696E64417474726962757465002E3F4155696D6D65646961746562696E64417474726962757465405F5F76635F61747472696275746573404000F10A000210F11200000C0401001A00091003000000F1120000F21200000002000028100000000000002200031211150300F3120000696D6D65646961746562696E6441747472696275746500F16A00051501000202F4120000000000000000000001005F5F76635F617474726962757465733A3A696D6D65646961746562696E64417474726962757465002E3F4155696D6D65646961746562696E64417474726962757465405F5F76635F61747472696275746573404000F10E000616F51200005410000000030000560005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A696E417474726962757465002E3F4155696E417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210F71200000C0401001A00091003000000F7120000F81200000002000028100000000000001600031211150300F9120000696E417474726962757465005600051501000202FA120000000000000000000001005F5F76635F617474726962757465733A3A696E417474726962757465002E3F4155696E417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616FB120000541000001F030000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A696D706F72746C6962417474726962757465002E3F4155696D706F72746C6962417474726962757465405F5F76635F61747472696275746573404000F10A000210FD1200000C0401001A00091003000000FD120000FE1200000002010069100000000000003200031211150300FF120000696D706F72746C696241747472696275746500F10D150300571000000000746C625F66696C6500F1620005150200020200130000000000000000000008005F5F76635F617474726962757465733A3A696D706F72746C6962417474726962757465002E3F4155696D706F72746C6962417474726962757465405F5F76635F61747472696275746573404000F10E000616011300005410000016030000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A7472616E736D69745F6173417474726962757465002E3F41557472616E736D69745F6173417474726962757465405F5F76635F61747472696275746573404000F10A000210031300000C0401001A0009100300000003130000041300000002010069100000000000003600031211150300051300007472616E736D69745F617341747472696275746500F3F2F10D150300571000000000786D69745F7479706500660005150200020206130000000000000000000008005F5F76635F617474726962757465733A3A7472616E736D69745F6173417474726962757465002E3F41557472616E736D69745F6173417474726962757465405F5F76635F61747472696275746573404000F10E0006160713000054100000380400005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6C6173745F6973417474726962757465002E3F41556C6173745F6973417474726962757465405F5F76635F61747472696275746573404000F10A000210091300000C0401001A00091003000000091300000A13000000020100691000000000000036000312111503000B1300006C6173745F697341747472696275746500F3F2F10D15030057100000000065787072657373696F6E00F3F2F15E000515020002020C130000000000000000000008005F5F76635F617474726962757465733A3A6C6173745F6973417474726962757465002E3F41556C6173745F6973417474726962757465405F5F76635F61747472696275746573404000F10E0006160D1300005410000033030000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A69646C5F6D6F64756C65417474726962757465002E3F415569646C5F6D6F64756C65417474726962757465405F5F76635F61747472696275746573404000F3F2F12A000112090000005710000057100000571000005710000057100000740000007400000030000000300000000A0002100F1300000C0401001A000910030000000F130000111300000002090010130000000000001A000910030000000F130000111300000002000028100000000000001200061203000000121300000300000013130000DE0003120F1502001413000069646C5F6D6F64756C65417474726962757465000D1503005710000000006E616D6500F10D150300571000000800646C6C6E616D6500F2F10D15030057100000100076657273696F6E00F2F10D1503005710000018007575696400F10D15030057100000200068656C70737472696E6700F3F2F10D15030074000000280068656C70737472696E67636F6E74657874000D150300740000002C0068656C70636F6E7465787400F2F10D15030030000000300068696464656E00F3F2F10D1503003000000031007265737472696374656400F3F2F1660005150B00020215130000000000000000000038005F5F76635F617474726962757465733A3A69646C5F6D6F64756C65417474726962757465002E3F415569646C5F6D6F64756C65417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006161613000054100000C3000000820005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A76315F6E616D65417474726962757465002E3F415576315F6E616D654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000A000210181300000C0401001A0009100300000018130000191300000002010069100000000000002E000312111503001A13000076315F6E616D6541747472696275746500F3F2F10D1503005710000000006E616D6500F182000515020002021B130000000000000000000008005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A76315F6E616D65417474726962757465002E3F415576315F6E616D654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000E0006161C130000541000001F000000860005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A76315F6561726C79417474726962757465002E3F415576315F6561726C794174747269627574654068656C7065725F61747472696275746573405F5F76635F61747472696275746573404000F2F10A0002101E1300000C0401001A000910030000001E1300001F1300000002000028100000000000001E000312111503002013000076315F6561726C7941747472696275746500F2F1860005150100020221130000000000000000000001005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A76315F6561726C79417474726962757465002E3F415576315F6561726C794174747269627574654068656C7065725F61747472696275746573405F5F76635F61747472696275746573404000F2F10E00061622130000541000001A0000008A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A72657065617461626C65417474726962757465002E3F415572657065617461626C654174747269627574654068656C7065725F61747472696275746573405F5F76635F61747472696275746573404000F2F10A000210241300000C0401001A0009100300000024130000251300000002000028100000000000001E000312111503002613000072657065617461626C65417474726962757465008A0005150100020227130000000000000000000001005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A72657065617461626C65417474726962757465002E3F415572657065617461626C654174747269627574654068656C7065725F61747472696275746573405F5F76635F61747472696275746573404000F2F10E0006162813000054100000590000008E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A64656661756C745F76616C7565417474726962757465002E3F415564656661756C745F76616C75654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000A00011201000000000000000A0002102A1300000C0401001A000910030000002A1300002C130000000201002B1300000000000032000312111503002D13000064656661756C745F76616C756541747472696275746500F10D15030003060000000076616C7565008E000515020002022E130000000000000000000008005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A64656661756C745F76616C7565417474726962757465002E3F415564656661756C745F76616C75654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000E0006162F13000054100000140000007E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A7573616765417474726962757465002E3F415575736167654174747269627574654068656C7065725F61747472696275746573405F5F76635F61747472696275746573404000F202031202150300000065416E7955736167650002150300010065436F436C61737355736167650002150300020065434F4D496E74657266616365557361676500F3F2F102150300060065496E74657266616365557361676500F2F1021503000800654D656D626572557361676500F1021503001000654D6574686F64557361676500F102150300200065496E746572666163654D6574686F6455736167650002150300400065496E746572666163654D656D62657255736167650002150300800065436F436C6173734D656D626572557361676500F2F102150300000165436F436C6173734D6574686F64557361676500F2F102150300000365476C6F62616C4D6574686F64557361676500F3F2F102150300000465476C6F62616C44617461557361676500F102150300000865436C617373557361676500F2F102150300001065496E74657266616365506172616D65746572557361676500F1021503000030654D6574686F64506172616D657465725573616765000215030000406549444C4D6F64756C65557361676500F2F1021503000280008065416E6F6E796D6F75735573616765000215030004800000010065547970656465665573616765000215030004800000020065556E696F6E557361676500F2F10215030004800000040065456E756D557361676500F3F2F10215030004800000080065446566696E65546167557361676500F2F10215030004800000100065537472756374557361676500F102150300048000002000654C6F63616C557361676500F2F1021503000480000040006550726F7065727479557361676500F3F2F102150300048000008000654576656E74557361676500F2F1021503000480000000016554656D706C617465557361676500F3F2F102150300048000000001654D6F64756C65557361676500F10215030004800000000265496C6C6567616C55736167650002150300048000000004654173796E6368726F6E6F7573557361676500F3F2F1021503000480FF7F3F0065416E7949444C557361676500F18A0007151E00080274000000321300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A75736167654174747269627574653A3A75736167655F65002E3F41573475736167655F654075736167654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000E0006163313000054100000330000000A00011201000000750000000A000210311300000C0401001A0009100300000031130000361300000002010035130000000000003A000312101500003313000075736167655F65001115030037130000757361676541747472696275746500F10D15030075000000000076616C7565007E0005150300120238130000000000000000000004005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A7573616765417474726962757465002E3F415575736167654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000E000616391300005410000031000000860005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A617474726962757465417474726962757465002E3F41556174747269627574654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000A0002103B1300000C0401001A000910030000003B1300003C13000000020100C3100000000000001A000910030000003B1300003C13000000020000281000000000000012000612030000003D130000030000003E130000820103120E15030091120000416C6C000E15030091120000417373656D626C7900F3F2F10E15030091120000436C61737300F2F10E15030091120000436F6E7374727563746F72000E1503009112000044656C656761746500F3F2F10E15030091120000456E756D00F3F2F10E150300911200004576656E7400F2F10E150300911200004669656C6400F2F10E1503009112000047656E65726963506172616D6574657200F3F2F10E15030091120000496E7465726661636500F2F10E150300911200004D6574686F6400F10E150300911200004D6F64756C6500F10E15030091120000506172616D6574657200F2F10E1503009112000050726F706572747900F3F2F10E1503009112000052657475726E56616C7565000E1503009112000053747275637400F10F1502003F13000061747472696275746541747472696275746500F10D15030074000000000056616C69644F6E00F2F10D150300300000000400416C6C6F774D756C7469706C65000D150300300000000500496E6865726974656400860005151500020240130000000000000000000008005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A617474726962757465417474726962757465002E3F41556174747269627574654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000E0006164113000054100000190000008A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A6D756C74695F76616C7565417474726962757465002E3F41556D756C74695F76616C75654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000A000210431300000C0401001A0009100300000043130000441300000002000028100000000000002200031211150300451300006D756C74695F76616C756541747472696275746500F3F2F18A0005150100020246130000000000000000000001005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A6D756C74695F76616C7565417474726962757465002E3F41556D756C74695F76616C75654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000E00061647130000541000007C0000008E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A70726F636573735F6561726C79417474726962757465002E3F415570726F636573735F6561726C794174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000A000210491300000C0401001A00091003000000491300004A13000000020000281000000000000022000312111503004B13000070726F636573735F6561726C7941747472696275746500F18E000515010002024C130000000000000000000001005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A70726F636573735F6561726C79417474726962757465002E3F415570726F636573735F6561726C794174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000E0006164D1300005410000065000000AA0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A736F757263655F616E6E6F746174696F6E5F617474726962757465417474726962757465002E3F4155736F757263655F616E6E6F746174696F6E5F6174747269627574654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000A0002104F1300000C0401001A000910030000004F1300005013000000020100C3100000000000001A000910030000004F130000501300000002000028100000000000001200061203000000511300000300000052130000920103120E15030091120000416C6C000E15030091120000417373656D626C7900F3F2F10E15030091120000436C61737300F2F10E15030091120000436F6E7374727563746F72000E1503009112000044656C656761746500F3F2F10E15030091120000456E756D00F3F2F10E150300911200004576656E7400F2F10E150300911200004669656C6400F2F10E1503009112000047656E65726963506172616D6574657200F3F2F10E15030091120000496E7465726661636500F2F10E150300911200004D6574686F6400F10E150300911200004D6F64756C6500F10E15030091120000506172616D6574657200F2F10E1503009112000050726F706572747900F3F2F10E1503009112000052657475726E56616C7565000E1503009112000053747275637400F10E1503009112000054797065646566000F15020053130000736F757263655F616E6E6F746174696F6E5F61747472696275746541747472696275746500F3F2F10D15030074000000000056616C69644F6E00F2F10D150300300000000400416C6C6F774D756C7469706C6500AA0005151500020254130000000000000000000008005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A736F757263655F616E6E6F746174696F6E5F617474726962757465417474726962757465002E3F4155736F757263655F616E6E6F746174696F6E5F6174747269627574654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000E0006165513000054100000340000008A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A76315F616C7474797065417474726962757465002E3F415576315F616C74747970654174747269627574654068656C7065725F61747472696275746573405F5F76635F61747472696275746573404000F2F14200031202150300000065426F6F6C65616E00F102150300010065496E746567657200F102150300020065466C6F617400F3F2F102150300030065446F75626C6500F2F1920007150400080274000000581300005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A76315F616C74747970654174747269627574653A3A747970655F65002E3F415734747970655F654076315F616C74747970654174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000E0006165913000054100000260000000A00011201000000591300000A000210571300000C0401001A00091003000000571300005C130000000201005B130000000000003E0003121015000059130000747970655F6500F1111503005D13000076315F616C7474797065417474726962757465000D1503005913000000007479706500F18A000515030012025E130000000000000000000004005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A76315F616C7474797065417474726962757465002E3F415576315F616C74747970654174747269627574654068656C7065725F61747472696275746573405F5F76635F61747472696275746573404000F2F10E0006165F1300005410000025000000860005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A61735F737472696E67417474726962757465002E3F415561735F737472696E674174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000A000210611300000C0401001A0009100300000061130000621300000002000028100000000000001E000312111503006313000061735F737472696E6741747472696275746500F1860005150100020264130000000000000000000001005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A61735F737472696E67417474726962757465002E3F415561735F737472696E674174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000E00061665130000541000005F000000920005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A72657175697265735F76616C7565417474726962757465002E3F415572657175697265735F76616C75654174747269627574654068656C7065725F61747472696275746573405F5F76635F61747472696275746573404000F2F10A000210671300000C0401001A00091003000000671300006813000000020000281000000000000022000312111503006913000072657175697265735F76616C75654174747269627574650092000515010002026A130000000000000000000001005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A72657175697265735F76616C7565417474726962757465002E3F415572657175697265735F76616C75654174747269627574654068656C7065725F61747472696275746573405F5F76635F61747472696275746573404000F2F10E0006166B13000054100000760000008A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A68656C705F737472696E67417474726962757465002E3F415568656C705F737472696E674174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000A0002106D1300000C0401001A000910030000006D1300006E13000000020100691000000000000032000312111503006F13000068656C705F737472696E6741747472696275746500F3F2F10D15030057100000000076616C7565008A0005150200020270130000000000000000000008005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A68656C705F737472696E67417474726962757465002E3F415568656C705F737472696E674174747269627574654068656C7065725F61747472696275746573405F5F76635F617474726962757465734040000E00061671130000541000006F000000920005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A6E6F746966795F61746C70726F76417474726962757465002E3F41556E6F746966795F61746C70726F764174747269627574654068656C7065725F61747472696275746573405F5F76635F61747472696275746573404000F2F10A000210731300000C0401001A0009100300000073130000741300000002000028100000000000002200031211150300751300006E6F746966795F61746C70726F7641747472696275746500920005150100020276130000000000000000000001005F5F76635F617474726962757465733A3A68656C7065725F617474726962757465733A3A6E6F746966795F61746C70726F76417474726962757465002E3F41556E6F746966795F61746C70726F764174747269627574654068656C7065725F61747472696275746573405F5F76635F61747472696275746573404000F2F10E00061677130000541000006A0000005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A7075626C6963417474726962757465002E3F41557075626C6963417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210791300000C0401001A00091003000000791300007A1300000002000028100000000000001A000312111503007B1300007075626C6963417474726962757465005E000515010002027C130000000000000000000001005F5F76635F617474726962757465733A3A7075626C6963417474726962757465002E3F41557075626C6963417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006167D13000054100000C30300006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6576656E745F736F75726365417474726962757465002E3F41556576656E745F736F75726365417474726962757465405F5F76635F61747472696275746573404000F3F2F12E0003120215030000006E617469766500F3F2F1021503000100636F6D00F2F10215030002006D616E6167656400F2F1720007150300080274000000801300005F5F76635F617474726962757465733A3A6576656E745F736F757263654174747269627574653A3A747970655F65002E3F415734747970655F65406576656E745F736F75726365417474726962757465405F5F76635F61747472696275746573404000F10E0006168113000054100000760400001A00031202150300000073706565640002150300010073697A6500F17A0007150200080274000000831300005F5F76635F617474726962757465733A3A6576656E745F736F757263654174747269627574653A3A6F7074696D697A655F65002E3F4157346F7074696D697A655F65406576656E745F736F75726365417474726962757465405F5F76635F61747472696275746573404000F10E0006168413000054100000790400000A00011201000000811300000A0002107F1300000C0401001A000910030000007F130000871300000002010086130000000000001A000910030000007F1300008713000000020000281000000000000012000612030000008813000003000000891300007E0003121015000081130000747970655F6500F110150000841300006F7074696D697A655F6500F10F1502008A1300006576656E745F736F7572636541747472696275746500F2F10D1503008113000000007479706500F10D1503008413000004006F7074696D697A6500F10D1503003000000008006465636F7261746500F16A000515070012028B13000000000000000000000C005F5F76635F617474726962757465733A3A6576656E745F736F75726365417474726962757465002E3F41556576656E745F736F75726365417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006168C1300005410000075040000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A726561646F6E6C79417474726962757465002E3F4155726561646F6E6C79417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002108E1300000C0401001A000910030000008E1300008F1300000002000028100000000000001E0003121115030090130000726561646F6E6C7941747472696275746500F2F1620005150100020291130000000000000000000001005F5F76635F617474726962757465733A3A726561646F6E6C79417474726962757465002E3F4155726561646F6E6C79417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006169213000054100000D5030000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A756964656661756C74417474726962757465002E3F4155756964656661756C74417474726962757465405F5F76635F61747472696275746573404000F10A000210941300000C0401001A0009100300000094130000951300000002000028100000000000001E0003121115030096130000756964656661756C7441747472696275746500F1620005150100020297130000000000000000000001005F5F76635F617474726962757465733A3A756964656661756C74417474726962757465002E3F4155756964656661756C74417474726962757465405F5F76635F61747472696275746573404000F10E000616981300005410000041040000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A70726F70707574726566417474726962757465002E3F415570726F70707574726566417474726962757465405F5F76635F61747472696275746573404000F3F2F10A0002109A1300000C0401001A000910030000009A1300009B1300000002000028100000000000001E000312111503009C13000070726F707075747265664174747269627574650066000515010002029D130000000000000000000001005F5F76635F617474726962757465733A3A70726F70707574726566417474726962757465002E3F415570726F70707574726566417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006169E130000541000003B0100005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A637573746F6D417474726962757465002E3F4155637573746F6D417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210A01300000C0401001A00091003000000A0130000A11300000002010069100000000000002A00031211150300A2130000637573746F6D417474726962757465000D15030070060000000076616C7565005E00051502000202A3130000000000000000000008005F5F76635F617474726962757465733A3A637573746F6D417474726962757465002E3F4155637573746F6D417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616A4130000541000006A010000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A696D706F727469646C417474726962757465002E3F4155696D706F727469646C417474726962757465405F5F76635F61747472696275746573404000F10A000210A61300000C0401001A00091003000000A6130000A71300000002010069100000000000002E00031211150300A8130000696D706F727469646C41747472696275746500F10D15030057100000000076616C7565006200051502000202A9130000000000000000000008005F5F76635F617474726962757465733A3A696D706F727469646C417474726962757465002E3F4155696D706F727469646C417474726962757465405F5F76635F61747472696275746573404000F10E000616AA13000054100000FE000000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6D735F756E696F6E417474726962757465002E3F41556D735F756E696F6E417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210AC1300000C0401001A00091003000000AC130000AD1300000002000028100000000000001E00031211150300AE1300006D735F756E696F6E41747472696275746500F2F16200051501000202AF130000000000000000000001005F5F76635F617474726962757465733A3A6D735F756E696F6E417474726962757465002E3F41556D735F756E696F6E417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616B013000054100000630300006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6E6F6E62726F777361626C65417474726962757465002E3F41556E6F6E62726F777361626C65417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210B21300000C0401001A00091003000000B2130000B31300000002000028100000000000002200031211150300B41300006E6F6E62726F777361626C6541747472696275746500F2F16A00051501000202B5130000000000000000000001005F5F76635F617474726962757465733A3A6E6F6E62726F777361626C65417474726962757465002E3F41556E6F6E62726F777361626C65417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616B6130000541000006B0300006A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6C6962726172795F626C6F636B417474726962757465002E3F41556C6962726172795F626C6F636B417474726962757465405F5F76635F61747472696275746573404000F10A000210B81300000C0401001A00091003000000B8130000B91300000002000028100000000000002200031211150300BA1300006C6962726172795F626C6F636B41747472696275746500F16A00051501000202BB130000000000000000000001005F5F76635F617474726962757465733A3A6C6962726172795F626C6F636B417474726962757465002E3F41556C6962726172795F626C6F636B417474726962757465405F5F76635F61747472696275746573404000F10E000616BC13000054100000140100005A0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6C636964417474726962757465002E3F41556C636964417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210BE1300000C0401001A00091003000000BE130000BF1300000002000028100000000000001A00031211150300C01300006C63696441747472696275746500F2F15A00051501000202C1130000000000000000000001005F5F76635F617474726962757465733A3A6C636964417474726962757465002E3F41556C636964417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616C213000054100000860100005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A636F636C617373417474726962757465002E3F4155636F636C617373417474726962757465405F5F76635F61747472696275746573404000F10A000210C41300000C0401001A00091003000000C4130000C51300000002000028100000000000001E00031211150300C6130000636F636C61737341747472696275746500F3F2F15E00051501000202C7130000000000000000000001005F5F76635F617474726962757465733A3A636F636C617373417474726962757465002E3F4155636F636C617373417474726962757465405F5F76635F61747472696275746573404000F10E000616C813000054100000560100005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A736174797065417474726962757465002E3F4155736174797065417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210CA1300000C0401001A00091003000000CA130000CB1300000002010069100000000000001A00091003000000CA130000CB1300000002000028100000000000001200061203000000CC13000003000000CD1300002A0003120F150200CE130000736174797065417474726962757465000D1503005710000000007479706500F15E00051503000202CF130000000000000000000008005F5F76635F617474726962757465733A3A736174797065417474726962757465002E3F4155736174797065417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616D0130000541000001D0100005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A70726F70707574417474726962757465002E3F415570726F70707574417474726962757465405F5F76635F61747472696275746573404000F10A000210D21300000C0401001A00091003000000D2130000D31300000002000028100000000000001E00031211150300D413000070726F7070757441747472696275746500F3F2F15E00051501000202D5130000000000000000000001005F5F76635F617474726962757465733A3A70726F70707574417474726962757465002E3F415570726F70707574417474726962757465405F5F76635F61747472696275746573404000F10E000616D613000054100000320100005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A636F6E74726F6C417474726962757465002E3F4155636F6E74726F6C417474726962757465405F5F76635F61747472696275746573404000F10A000210D81300000C0401001A00091003000000D8130000D91300000002000028100000000000001E00031211150300DA130000636F6E74726F6C41747472696275746500F3F2F15E00051501000202DB130000000000000000000001005F5F76635F617474726962757465733A3A636F6E74726F6C417474726962757465002E3F4155636F6E74726F6C417474726962757465405F5F76635F61747472696275746573404000F10E000616DC1300005410000060010000620005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6370705F71756F7465417474726962757465002E3F41556370705F71756F7465417474726962757465405F5F76635F61747472696275746573404000F10A000210DE1300000C0401001A00091003000000DE130000DF1300000002010069100000000000003200031211150300E01300006370705F71756F746541747472696275746500F10D150300571000000000737472696E6700F3F2F16200051502000202E1130000000000000000000008005F5F76635F617474726962757465733A3A6370705F71756F7465417474726962757465002E3F41556370705F71756F7465417474726962757465405F5F76635F61747472696275746573404000F10E000616E2130000541000005C020000560005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A707472417474726962757465002E3F4155707472417474726962757465405F5F76635F61747472696275746573404000F10A000210E41300000C0401001A00091003000000E4130000E51300000002000028100000000000001A00031211150300E613000070747241747472696275746500F3F2F15600051501000202E7130000000000000000000001005F5F76635F617474726962757465733A3A707472417474726962757465002E3F4155707472417474726962757465405F5F76635F61747472696275746573404000F10E000616E813000054100000BB030000720005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6E6F5F696E6A65637465645F74657874417474726962757465002E3F41556E6F5F696E6A65637465645F74657874417474726962757465405F5F76635F61747472696275746573404000F3F2F10A00011201000000300000000A000210EA1300000C0401001A00091003000000EA130000EC13000000020100EB130000000000001A00091003000000EA130000EC1300000002000028100000000000001200061203000000ED13000003000000EE130000360003120F150200EF1300006E6F5F696E6A65637465645F7465787441747472696275746500F2F10D15030030000000000076616C7565007200051503000202F0130000000000000000000001005F5F76635F617474726962757465733A3A6E6F5F696E6A65637465645F74657874417474726962757465002E3F41556E6F5F696E6A65637465645F74657874417474726962757465405F5F76635F61747472696275746573404000F3F2F10E000616F11300005410000098000000660005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A64656661756C7462696E64417474726962757465002E3F415564656661756C7462696E64417474726962757465405F5F76635F61747472696275746573404000F10A000210F31300000C0401001A00091003000000F3130000F41300000002000028100000000000002200031211150300F513000064656661756C7462696E6441747472696275746500F3F2F16600051501000202F6130000000000000000000001005F5F76635F617474726962757465733A3A64656661756C7462696E64417474726962757465002E3F415564656661756C7462696E64417474726962757465405F5F76635F61747472696275746573404000F10E000616F713000054100000720200005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A64656661756C74417474726962757465002E3F415564656661756C74417474726962757465405F5F76635F61747472696275746573404000F10A000210F91300000C0401001A00091003000000F9130000FA1300000002010069100000000000001A00091003000000F9130000FA1300000002000028100000000000001200061203000000FB13000003000000FC1300002E0003120F150200FD13000064656661756C7441747472696275746500F3F2F10D15030057100000000076616C7565005E00051503000202FE130000000000000000000008005F5F76635F617474726962757465733A3A64656661756C74417474726962757465002E3F415564656661756C74417474726962757465405F5F76635F61747472696275746573404000F10E000616FF13000054100000670200005E0005150000800200000000000000000000000000005F5F76635F617474726962757465733A3A6969645F6973417474726962757465002E3F41556969645F6973417474726962757465405F5F76635F61747472696275746573404000F3F2F10A000210011400000C0401001A0009100300000001140000021400000002010069100000000000003A00031211150300031400006969645F6973417474726962757465000D1503005710000000006C696D697465645F65787072657373696F6E00F3F2F15E0005150200020204140000000000000000000008005F5F76635F617474726962757465733A3A6969645F6973417474726962757465002E3F41556969645F6973417474726962757465405F5F76635F61747472696275746573404000F3F2F10E0006160514000054100000F7020000060014000E9816112600051600000000463A5C73766E5C6C6C645C746573745C434F46465C707265636F6D7000F3F2F14E00051600000000433A5C50726F6772616D2046696C65732028783836295C4D6963726F736F66742056697375616C2053747564696F2031342E305C56435C42494E5C616D6436345C636C2E65786500F2000516000000002D5A37202D5963707265636F6D702E68202D63202D4D54202D4922433A5C50726F6772616D2046696C65732028783836295C4D6963726F736F66742056697375616C2053747564696F2031342E305C56435C494E434C55444522202D4922433A5C50726F6772616D2046696C65732028783836295C4D6963726F736F66742056697375616C2053747564696F2031342E305C56435C41544C4D46435C494E434C55444522202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F7773204B6974735C31305C696E636C7564655C31302E302E31363239392E305C756372742200F2F1F600051600000000202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F7773204B6974735C4E4554465853444B5C342E362E315C696E636C7564655C756D22202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F7773204B6974735C31305C696E636C7564655C31302E302E31363239392E305C73686172656422202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F7773204B6974735C31305C696E636C7564655C31302E302E31363239392E305C756D22202D4922433A5C50726F6772616D2046696C65732028783836295C57696E646F777300F10E000416020000000A1400000B140000320005160C140000204B6974735C31305C696E636C7564655C31302E302E31363239392E305C77696E727422202D5450202D58001200051600000000707265636F6D702E637070002E00051600000000463A5C73766E5C6C6C645C746573745C434F46465C707265636F6D705C76633134302E70646200F11A000316050008140000091400000E1400000F1400000D140000F2F1 + - Name: .bss + Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ] + Alignment: 4 + SectionData: '' + - Name: '.debug$S' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + SectionData: 04000000F10000005600000054000D11740000000000000000005F5F40405F50636853796D5F403030405568656D556F6F77556776686755786C7575556B6976786C6E6B556B6976786C6E6B4F6C79714036303445453535424437323731373742000000 + Subsections: + - !Symbols + Records: + - Kind: S_GDATA32 + DataSym: + Type: 116 + DisplayName: '__@@_PchSym_@00@UhemUoowUgvhgUxluuUkivxlnkUkivxlnkOlyq@604EE55BD727177B' + Relocations: + - VirtualAddress: 20 + SymbolName: '__@@_PchSym_@00@UhemUoowUgvhgUxluuUkivxlnkUkivxlnkOlyq@604EE55BD727177B' + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 24 + SymbolName: '__@@_PchSym_@00@UhemUoowUgvhgUxluuUkivxlnkUkivxlnkOlyq@604EE55BD727177B' + Type: IMAGE_REL_AMD64_SECTION +symbols: + - Name: '@comp.id' + Value: 17129111 + SectionNumber: -1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: '@feat.00' + Value: 2147484048 + SectionNumber: -1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + - Name: .drectve + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 47 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: '.debug$S' + Value: 0 + SectionNumber: 2 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 7596 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: '.debug$P' + Value: 0 + SectionNumber: 3 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 53728 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + - Name: .bss + Value: 0 + SectionNumber: 4 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 4 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 0 + Selection: IMAGE_COMDAT_SELECT_ANY + - Name: '__@@_PchSym_@00@UhemUoowUgvhgUxluuUkivxlnkUkivxlnkOlyq@604EE55BD727177B' + Value: 0 + SectionNumber: 4 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: '.debug$S' + Value: 0 + SectionNumber: 5 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 100 + NumberOfRelocations: 2 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 4 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE +... Index: lld/test/COFF/precomp.test =================================================================== --- lld/test/COFF/precomp.test +++ lld/test/COFF/precomp.test @@ -0,0 +1,40 @@ + +RUN: rm -rf %t1/ +RUN: mkdir %t1 +RUN: yaml2obj %S/Inputs/precomp-a.yaml > %t1/a.obj +RUN: yaml2obj %S/Inputs/precomp-b.yaml > %t1/b.obj +RUN: yaml2obj %S/Inputs/precomp-precomp.yaml > %t1/precomp.obj +RUN: lld-link %t1/a.obj %t1/b.obj %t1/precomp.obj /nodefaultlib /entry:main \ +RUN: /debug /pdb:%t1/out.pdb /out:out.exe /opt:ref /opt:icf +RUN: llvm-pdbutil dump -types %t1/out.pdb | FileCheck %s + +CHECK: Types (TPI Stream) +CHECK-NOT: LF_PRECOMP +CHECK-NOT: LF_ENDPRECOMP + +# // precomp.h +# #pragma once +# int Function(char A); +# +# // precomp.cpp +# // cl.exe precomp.cpp /Z7 /Ycprecomp.h /c +# #include "precomp.h" +# +# // a.cpp +# #include "precomp.h" +# int main(void) { +# Function('a'); +# return 0; +# } +# +# // b.cpp +# #include "precomp.h" +# int Function(char a) { +# return (int)a; +# } +# +# // cl.exe a.cpp b.cpp /Z7 /Yuprecomp.h /c +# +# // obj2yaml precomp.obj >precomp-precomp.yaml +# // obj2yaml a.obj >precomp-a.yaml +# // obj2yaml b.obj >precomp-b.yaml Index: llvm/include/llvm/DebugInfo/CodeView/CodeViewTypes.def =================================================================== --- llvm/include/llvm/DebugInfo/CodeView/CodeViewTypes.def +++ llvm/include/llvm/DebugInfo/CodeView/CodeViewTypes.def @@ -84,6 +84,8 @@ TYPE_RECORD(LF_UDT_SRC_LINE, 0x1606, UdtSourceLine) TYPE_RECORD(LF_UDT_MOD_SRC_LINE, 0x1607, UdtModSourceLine) +TYPE_RECORD(LF_PRECOMP, 0x1509, Precomp) +TYPE_RECORD(LF_ENDPRECOMP, 0x0014, EndPrecomp) TYPE_RECORD(LF_METHODLIST, 0x1206, MethodOverloadList) @@ -106,7 +108,6 @@ CV_TYPE(LF_DIMARRAY_16t, 0x0011) CV_TYPE(LF_VFTPATH_16t, 0x0012) CV_TYPE(LF_PRECOMP_16t, 0x0013) -CV_TYPE(LF_ENDPRECOMP, 0x0014) CV_TYPE(LF_OEM_16t, 0x0015) CV_TYPE(LF_TYPESERVER_ST, 0x0016) @@ -181,7 +182,6 @@ CV_TYPE(LF_ST_MAX, 0x1500) CV_TYPE(LF_TYPESERVER, 0x1501) CV_TYPE(LF_DIMARRAY, 0x1508) -CV_TYPE(LF_PRECOMP, 0x1509) CV_TYPE(LF_ALIAS, 0x150a) CV_TYPE(LF_DEFARG, 0x150b) CV_TYPE(LF_FRIENDFCN, 0x150c) Index: llvm/include/llvm/DebugInfo/CodeView/TypeRecord.h =================================================================== --- llvm/include/llvm/DebugInfo/CodeView/TypeRecord.h +++ llvm/include/llvm/DebugInfo/CodeView/TypeRecord.h @@ -896,6 +896,34 @@ TypeIndex ContinuationIndex; }; +// LF_PRECOMP +class PrecompRecord : public TypeRecord { +public: + PrecompRecord() = default; + explicit PrecompRecord(TypeRecordKind Kind) : TypeRecord(Kind) {} + + uint32_t getStartTypeIndex() const { return StartTypeIndex; } + uint32_t getTypesCount() const { return TypesCount; } + uint32_t getSignature() const { return Signature; } + StringRef getPrecompFilePath() const { return PrecompFilePath; } + + uint32_t StartTypeIndex; + uint32_t TypesCount; + uint32_t Signature; + StringRef PrecompFilePath; +}; + +// LF_ENDPRECOMP +class EndPrecompRecord : public TypeRecord { +public: + EndPrecompRecord() = default; + explicit EndPrecompRecord(TypeRecordKind Kind) : TypeRecord(Kind) {} + + uint32_t getSignature() const { return Signature; } + + uint32_t Signature; +}; + } // end namespace codeview } // end namespace llvm Index: llvm/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h =================================================================== --- llvm/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h +++ llvm/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h @@ -83,18 +83,21 @@ Error mergeTypeAndIdRecords(MergingTypeTableBuilder &DestIds, MergingTypeTableBuilder &DestTypes, SmallVectorImpl &SourceToDest, - const CVTypeArray &IdsAndTypes); + const CVTypeArray &IdsAndTypes, + Optional &EndPrecomp); Error mergeTypeAndIdRecords(GlobalTypeTableBuilder &DestIds, GlobalTypeTableBuilder &DestTypes, SmallVectorImpl &SourceToDest, const CVTypeArray &IdsAndTypes, - ArrayRef Hashes); + ArrayRef Hashes, + Optional &EndPrecomp); Error mergeTypeRecords(GlobalTypeTableBuilder &Dest, SmallVectorImpl &SourceToDest, const CVTypeArray &Types, - ArrayRef Hashes); + ArrayRef Hashes, + Optional &EndPrecomp); Error mergeIdRecords(GlobalTypeTableBuilder &Dest, ArrayRef Types, SmallVectorImpl &SourceToDest, Index: llvm/include/llvm/DebugInfo/PDB/GenericError.h =================================================================== --- llvm/include/llvm/DebugInfo/PDB/GenericError.h +++ llvm/include/llvm/DebugInfo/PDB/GenericError.h @@ -20,6 +20,7 @@ invalid_path = 1, dia_sdk_not_present, type_server_not_found, + type_server_does_not_match, unspecified, }; Index: llvm/lib/DebugInfo/CodeView/RecordName.cpp =================================================================== --- llvm/lib/DebugInfo/CodeView/RecordName.cpp +++ llvm/lib/DebugInfo/CodeView/RecordName.cpp @@ -236,6 +236,16 @@ return Error::success(); } +Error TypeNameComputer::visitKnownRecord(CVType &CVR, + PrecompRecord &Precomp) { + return Error::success(); +} + +Error TypeNameComputer::visitKnownRecord(CVType &CVR, + EndPrecompRecord &EndPrecomp) { + return Error::success(); +} + std::string llvm::codeview::computeTypeName(TypeCollection &Types, TypeIndex Index) { TypeNameComputer Computer(Types); Index: llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp =================================================================== --- llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp +++ llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp @@ -216,7 +216,16 @@ Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR, FileStaticSym &FileStatic) { printTypeIndex("Index", FileStatic.Index); - W.printNumber("ModFilenameOffset", FileStatic.ModFilenameOffset); + if (ObjDelegate) { + DebugStringTableSubsectionRef Strings = ObjDelegate->getStringTable(); + auto ExpectedModFilename = Strings.getString(FileStatic.ModFilenameOffset); + if (!ExpectedModFilename) { + consumeError(ExpectedModFilename.takeError()); + return llvm::make_error( + "String table offset outside of bounds of String Table!"); + } + W.printString("ModFilename", *ExpectedModFilename); + } W.printFlags("Flags", uint16_t(FileStatic.Flags), getLocalFlagNames()); W.printString("Name", FileStatic.Name); return Error::success(); Index: llvm/lib/DebugInfo/CodeView/TypeDumpVisitor.cpp =================================================================== --- llvm/lib/DebugInfo/CodeView/TypeDumpVisitor.cpp +++ llvm/lib/DebugInfo/CodeView/TypeDumpVisitor.cpp @@ -553,3 +553,18 @@ W->printEnum("Mode", uint16_t(LR.Mode), makeArrayRef(LabelTypeEnum)); return Error::success(); } + +Error TypeDumpVisitor::visitKnownRecord(CVType &CVR, + PrecompRecord &Precomp) { + W->printNumber("StartIndex", Precomp.getStartTypeIndex()); + W->printNumber("Count", Precomp.getTypesCount()); + W->printHex("Signature", Precomp.getSignature()); + W->printString("PrecompFile", Precomp.getPrecompFilePath()); + return Error::success(); +} + +Error TypeDumpVisitor::visitKnownRecord(CVType &CVR, + EndPrecompRecord &EndPrecomp) { + W->printHex("Signature", EndPrecomp.getSignature()); + return Error::success(); +} Index: llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp =================================================================== --- llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp +++ llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp @@ -480,3 +480,18 @@ return Error::success(); } + +Error TypeRecordMapping::visitKnownRecord(CVType &CVR, + PrecompRecord &Precomp) { + error(IO.mapInteger(Precomp.StartTypeIndex)); + error(IO.mapInteger(Precomp.TypesCount)); + error(IO.mapInteger(Precomp.Signature)); + error(IO.mapStringZ(Precomp.PrecompFilePath)); + return Error::success(); +} + +Error TypeRecordMapping::visitKnownRecord(CVType &CVR, + EndPrecompRecord &EndPrecomp) { + error(IO.mapInteger(EndPrecomp.Signature)); + return Error::success(); +} Index: llvm/lib/DebugInfo/CodeView/TypeStreamMerger.cpp =================================================================== --- llvm/lib/DebugInfo/CodeView/TypeStreamMerger.cpp +++ llvm/lib/DebugInfo/CodeView/TypeStreamMerger.cpp @@ -12,6 +12,7 @@ #include "llvm/ADT/StringExtras.h" #include "llvm/DebugInfo/CodeView/GlobalTypeTableBuilder.h" #include "llvm/DebugInfo/CodeView/MergingTypeTableBuilder.h" +#include "llvm/DebugInfo/CodeView/TypeDeserializer.h" #include "llvm/DebugInfo/CodeView/TypeIndex.h" #include "llvm/DebugInfo/CodeView/TypeIndexDiscovery.h" #include "llvm/DebugInfo/CodeView/TypeRecord.h" @@ -63,7 +64,12 @@ public: explicit TypeStreamMerger(SmallVectorImpl &SourceToDest) : IndexMap(SourceToDest) { - SourceToDest.clear(); + // A precompiled obj might be referenced here: + // All data in SourceToDest is assumed to belong to the precompiled obj, + // and is already remapped to the target PDB. + // Every type that will be merged in needs to back-reference this data. + // We also don't want to resolve twice the types in the precompiled obj. + CurIndex += SourceToDest.size(); } static const TypeIndex Untranslated; @@ -71,7 +77,8 @@ // Local hashing entry points Error mergeTypesAndIds(MergingTypeTableBuilder &DestIds, MergingTypeTableBuilder &DestTypes, - const CVTypeArray &IdsAndTypes); + const CVTypeArray &IdsAndTypes, + Optional &EP); Error mergeIdRecords(MergingTypeTableBuilder &Dest, ArrayRef TypeSourceToDest, const CVTypeArray &Ids); @@ -82,13 +89,16 @@ Error mergeTypesAndIds(GlobalTypeTableBuilder &DestIds, GlobalTypeTableBuilder &DestTypes, const CVTypeArray &IdsAndTypes, - ArrayRef Hashes); + ArrayRef Hashes, + Optional &EP); Error mergeIdRecords(GlobalTypeTableBuilder &Dest, ArrayRef TypeSourceToDest, const CVTypeArray &Ids, ArrayRef Hashes); - Error mergeTypeRecords(GlobalTypeTableBuilder &Dest, const CVTypeArray &Types, - ArrayRef Hashes); + Error mergeTypeRecords(GlobalTypeTableBuilder &Dest, + const CVTypeArray &Types, + ArrayRef Hashes, + Optional &EP); private: Error doit(const CVTypeArray &Types); @@ -185,6 +195,8 @@ /// Temporary storage that we use to copy a record's data while re-writing /// its type indices. SmallVector RemapStorage; + + Optional EndPrecomp; }; } // end anonymous namespace @@ -226,7 +238,10 @@ if (IsSecondPass && MapPos >= Map.size()) { // FIXME: Print a more useful error. We can give the current record and the // index that we think its pointing to. - LastError = joinErrors(std::move(*LastError), errorCorruptRecord()); + if (LastError) + LastError = joinErrors(std::move(*LastError), errorCorruptRecord()); + else + LastError = errorCorruptRecord(); } ++NumBadIndices; @@ -258,22 +273,31 @@ Error TypeStreamMerger::mergeTypesAndIds(MergingTypeTableBuilder &DestIds, MergingTypeTableBuilder &DestTypes, - const CVTypeArray &IdsAndTypes) { + const CVTypeArray &IdsAndTypes, + Optional &EP) { DestIdStream = &DestIds; DestTypeStream = &DestTypes; UseGlobalHashes = false; - return doit(IdsAndTypes); + + auto e = doit(IdsAndTypes); + + EP = EndPrecomp; + return e; } // Global hashing entry points Error TypeStreamMerger::mergeTypeRecords(GlobalTypeTableBuilder &Dest, const CVTypeArray &Types, - ArrayRef Hashes) { + ArrayRef Hashes, + Optional &EP) { DestGlobalTypeStream = &Dest; UseGlobalHashes = true; GlobalHashes = Hashes; - return doit(Types); + auto e = doit(Types); + + EP = EndPrecomp; + return e; } Error TypeStreamMerger::mergeIdRecords(GlobalTypeTableBuilder &Dest, @@ -291,12 +315,17 @@ Error TypeStreamMerger::mergeTypesAndIds(GlobalTypeTableBuilder &DestIds, GlobalTypeTableBuilder &DestTypes, const CVTypeArray &IdsAndTypes, - ArrayRef Hashes) { + ArrayRef Hashes, + Optional &EP) { DestGlobalIdStream = &DestIds; DestGlobalTypeStream = &DestTypes; UseGlobalHashes = true; GlobalHashes = Hashes; - return doit(IdsAndTypes); + + auto e = doit(IdsAndTypes); + + EP = EndPrecomp; + return e; } Error TypeStreamMerger::doit(const CVTypeArray &Types) { @@ -342,31 +371,61 @@ } Error TypeStreamMerger::remapType(const CVType &Type) { - auto DoSerialize = + + TypeIndex DestIdx = Untranslated; + + // For .obj files containing precompiled types, we need to extract the + // signature, through EndPrecompRecord. This is done here for performance + // reasons, to avoid re-parsing the Types stream; in most cases, this .obj + // will not be a precompiled types file. + if (Type.kind() == LF_ENDPRECOMP) { + assert(!EndPrecomp); + EndPrecomp.emplace(); + if (auto EC = TypeDeserializer::deserializeAs(const_cast(Type), + EndPrecomp.getValue())) + return joinErrors(std::move(EC), errorCorruptRecord()); + } else if (Type.kind() == LF_PRECOMP) { + PrecompRecord Precomp; + if (auto EC = TypeDeserializer::deserializeAs(const_cast(Type), + Precomp)) + return joinErrors(std::move(EC), errorCorruptRecord()); + + assert(Precomp.getTypesCount() == IndexMap.size() - 1); + } else { + auto DoSerialize = [this, Type](MutableArrayRef Storage) -> ArrayRef { - return remapIndices(Type, Storage); - }; + return remapIndices(Type, Storage); + }; - TypeIndex DestIdx = Untranslated; - if (LLVM_LIKELY(UseGlobalHashes)) { - GlobalTypeTableBuilder &Dest = + if (LLVM_LIKELY(UseGlobalHashes)) { + GlobalTypeTableBuilder &Dest = isIdRecord(Type.kind()) ? *DestGlobalIdStream : *DestGlobalTypeStream; - GloballyHashedType H = GlobalHashes[CurIndex.toArrayIndex()]; - DestIdx = Dest.insertRecordAs(H, Type.RecordData.size(), DoSerialize); - } else { - MergingTypeTableBuilder &Dest = + GloballyHashedType H = GlobalHashes[CurIndex.toArrayIndex()]; + DestIdx = Dest.insertRecordAs(H, Type.RecordData.size(), DoSerialize); + } else { + MergingTypeTableBuilder &Dest = isIdRecord(Type.kind()) ? *DestIdStream : *DestTypeStream; - RemapStorage.resize(Type.RecordData.size()); - ArrayRef Result = DoSerialize(RemapStorage); - if (!Result.empty()) - DestIdx = Dest.insertRecordBytes(Result); + RemapStorage.resize(Type.RecordData.size()); + ArrayRef Result = DoSerialize(RemapStorage); + if (!Result.empty()) + DestIdx = Dest.insertRecordBytes(Result); + } } + addMapping(DestIdx); ++CurIndex; assert((IsSecondPass || IndexMap.size() == slotForIndex(CurIndex)) && - "visitKnownRecord should add one index map entry"); + "visitKnownRecord should add one index map entry"); + + if (Type.kind() == LF_PRECOMP) { + // Pop the LF_PRECOMP and LF_ENDPRECOMP records from the output stream + CurIndex -= 2; + IndexMap.pop_back(); + IndexMap.pop_back(); + } + return Error::success(); } @@ -415,25 +474,29 @@ Error llvm::codeview::mergeTypeAndIdRecords( MergingTypeTableBuilder &DestIds, MergingTypeTableBuilder &DestTypes, - SmallVectorImpl &SourceToDest, const CVTypeArray &IdsAndTypes) { + SmallVectorImpl &SourceToDest, const CVTypeArray &IdsAndTypes, + Optional &EndPrecomp) { TypeStreamMerger M(SourceToDest); - return M.mergeTypesAndIds(DestIds, DestTypes, IdsAndTypes); + return M.mergeTypesAndIds(DestIds, DestTypes, IdsAndTypes, EndPrecomp); } Error llvm::codeview::mergeTypeAndIdRecords( GlobalTypeTableBuilder &DestIds, GlobalTypeTableBuilder &DestTypes, SmallVectorImpl &SourceToDest, const CVTypeArray &IdsAndTypes, - ArrayRef Hashes) { + ArrayRef Hashes, + Optional &EndPrecomp) { TypeStreamMerger M(SourceToDest); - return M.mergeTypesAndIds(DestIds, DestTypes, IdsAndTypes, Hashes); + return M.mergeTypesAndIds(DestIds, DestTypes, IdsAndTypes, Hashes, + EndPrecomp); } Error llvm::codeview::mergeTypeRecords(GlobalTypeTableBuilder &Dest, SmallVectorImpl &SourceToDest, const CVTypeArray &Types, - ArrayRef Hashes) { + ArrayRef Hashes, + Optional &EndPrecomp) { TypeStreamMerger M(SourceToDest); - return M.mergeTypeRecords(Dest, Types, Hashes); + return M.mergeTypeRecords(Dest, Types, Hashes, EndPrecomp); } Error llvm::codeview::mergeIdRecords(GlobalTypeTableBuilder &Dest, Index: llvm/lib/DebugInfo/PDB/GenericError.cpp =================================================================== --- llvm/lib/DebugInfo/PDB/GenericError.cpp +++ llvm/lib/DebugInfo/PDB/GenericError.cpp @@ -28,6 +28,9 @@ return "An unknown error has occurred."; case generic_error_code::type_server_not_found: return "Type server PDB was not found."; + case generic_error_code::type_server_does_not_match: + return "Type server PDB was found, but does not match the expected " + "GUID."; case generic_error_code::dia_sdk_not_present: return "LLVM was not compiled with support for DIA. This usually means " "that you are are not using MSVC, or your Visual Studio " @@ -48,7 +51,7 @@ GenericError::GenericError(generic_error_code C) : GenericError(C, "") {} GenericError::GenericError(StringRef Context) - : GenericError(generic_error_code::unspecified, Context) {} + : GenericError(generic_error_code::unspecified, Context) { } GenericError::GenericError(generic_error_code C, StringRef Context) : Code(C) { ErrMsg = "PDB Error: "; Index: llvm/lib/ObjectYAML/CodeViewYAMLTypes.cpp =================================================================== --- llvm/lib/ObjectYAML/CodeViewYAMLTypes.cpp +++ llvm/lib/ObjectYAML/CodeViewYAMLTypes.cpp @@ -595,6 +595,17 @@ IO.mapRequired("Methods", Record.Methods); } +template <> void LeafRecordImpl::map(IO &IO) { + IO.mapRequired("StartTypeIndex", Record.StartTypeIndex); + IO.mapRequired("TypesCount", Record.TypesCount); + IO.mapRequired("Signature", Record.Signature); + IO.mapRequired("PrecompFilePath", Record.PrecompFilePath); +} + +template <> void LeafRecordImpl::map(IO &IO) { + IO.mapRequired("Signature", Record.Signature); +} + template <> void MemberRecordImpl::map(IO &IO) { MappingTraits::mapping(IO, Record); } Index: llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp =================================================================== --- llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp +++ llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp @@ -467,6 +467,23 @@ return Error::success(); } +Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, + PrecompRecord &Precomp) { + std::string Signature = "0x" + utohexstr(Precomp.Signature); + P.format(" start index = {0}, types count = {1}, signature = {2}," + " precomp path = {3}", + Precomp.StartTypeIndex, Precomp.TypesCount, Signature, + Precomp.PrecompFilePath); + return Error::success(); +} + +Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, + EndPrecompRecord &EP) { + std::string Signature = "0x" + utohexstr(EP.Signature); + P.format(" signature = {0}", Signature); + return Error::success(); +} + Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR, NestedTypeRecord &Nested) { P.format(" [name = `{0}`, parent = {1}]", Nested.Name, Nested.Type); Index: llvm/tools/llvm-readobj/COFFDumper.cpp =================================================================== --- llvm/tools/llvm-readobj/COFFDumper.cpp +++ llvm/tools/llvm-readobj/COFFDumper.cpp @@ -1222,7 +1222,9 @@ error(object_error::parse_failed); } SmallVector SourceToDest; - if (auto EC = mergeTypeAndIdRecords(CVIDs, CVTypes, SourceToDest, Types)) + Optional EndPrecomp; + if (auto EC = mergeTypeAndIdRecords(CVIDs, CVTypes, SourceToDest, Types, + EndPrecomp)) return error(std::move(EC)); } } Index: llvm/unittests/DebugInfo/CodeView/TypeIndexDiscoveryTest.cpp =================================================================== --- llvm/unittests/DebugInfo/CodeView/TypeIndexDiscoveryTest.cpp +++ llvm/unittests/DebugInfo/CodeView/TypeIndexDiscoveryTest.cpp @@ -580,3 +580,16 @@ checkTypeReferences(2, TypeIndex(7), TypeIndex(8), TypeIndex(9)); } +TEST_F(TypeIndexIteratorTest, Precomp) { + PrecompRecord P(TypeRecordKind::Precomp); + P.StartTypeIndex = TypeIndex::FirstNonSimpleIndex; + P.TypesCount = 100; + P.Signature = 0x12345678; + P.PrecompFilePath = "C:/precomp.obj"; + + EndPrecompRecord EP(TypeRecordKind::EndPrecomp); + EP.Signature = P.Signature; + + writeTypeRecords(P, EP); + checkTypeReferences(0); +}