From cfe-commits Wed Aug 12 15:57:31 2015 From: Ben Langmuir via cfe-commits Date: Wed, 12 Aug 2015 15:57:31 +0000 To: cfe-commits Subject: Re: [PATCH] D11403: [Modules] Add Darwin-specific compatibility module map parsing hacks Message-Id: X-MARC-Message: https://marc.info/?l=cfe-commits&m=143939505604256 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--b1_cc74744d0a9caf0c824b7bf48d4e159f" --b1_cc74744d0a9caf0c824b7bf48d4e159f Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: quoted-printable benlangmuir updated this revision to Diff 31947. benlangmuir added a comment. Changes per review. I still need to check performance of code-completing i= mport statements to make sure the extra directory iteration isn't a big reg= ression. Repository: rL LLVM http://reviews.llvm.org/D11403 Files: include/clang/Basic/Module.h lib/Basic/Module.cpp lib/Lex/ModuleMap.cpp test/Modules/Inputs/System/usr/include/assert.h test/Modules/Inputs/System/usr/include/module.map test/Modules/Inputs/System/usr/include/tcl-private/header.h test/Modules/darwin_specific_modulemap_hacks.m --b1_cc74744d0a9caf0c824b7bf48d4e159f Content-Type: text/x-patch; charset=utf-8; name="D11403.31947.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D11403.31947.patch" SW5kZXg6IHRlc3QvTW9kdWxlcy9kYXJ3aW5fc3BlY2lmaWNfbW9kdWxlbWFw X2hhY2tzLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxs CisrKyB0ZXN0L01vZHVsZXMvZGFyd2luX3NwZWNpZmljX21vZHVsZW1hcF9o YWNrcy5tCkBAIC0wLDAgKzEsMjIgQEAKKy8vIFJVTjogcm0gLXJmICV0Cisv LyBSVU46ICVjbGFuZ19jYzEgLWZtb2R1bGVzIC1mbW9kdWxlcy1jYWNoZS1w YXRoPSV0IC1maW1wbGljaXQtbW9kdWxlLW1hcHMgLWlzeXN0ZW0gJVMvSW5w dXRzL1N5c3RlbS91c3IvaW5jbHVkZSAtdHJpcGxlIHg4Nl82NC1hcHBsZS1k YXJ3aW4xMCAlcyAtdmVyaWZ5IC1mc3ludGF4LW9ubHkKKy8vIGV4cGVjdGVk LW5vLWRpYWdub3N0aWNzCisKK0BpbXBvcnQgRGFyd2luLkMuZXhjbHVkZWQ7 IC8vIG5vIGVycm9yLCBoZWFkZXIgaXMgaW1wbGljaXRseSAndGV4dHVhbCcK K0BpbXBvcnQgVGNsLlByaXZhdGU7ICAgICAgIC8vIG5vIGVycm9yLCBoZWFk ZXIgaXMgaW1wbGljaXRseSAndGV4dHVhbCcKK0BpbXBvcnQgSU9LaXQuYXZj OyAgICAgICAgIC8vIG5vIGVycm9yLCBjcGx1c3BsdXMgcmVxdWlyZW1lbnQg cmVtb3ZlZAorCisjaWYgZGVmaW5lZChEQVJXSU5fQ19FWENMVURFRCkKKyNl cnJvciBhc3NlcnQuaCBzaG91bGQgYmUgdGV4dHVhbAorI2VsaWYgZGVmaW5l ZChUQ0xfUFJJVkFURSkKKyNlcnJvciB0Y2wtcHJpdmF0ZS9oZWFkZXIuaCBz aG91bGQgYmUgdGV4dHVhbAorI2VuZGlmCisKKyNpbXBvcnQgPGFzc2VydC5o PgorI2ltcG9ydCA8dGNsLXByaXZhdGUvaGVhZGVyLmg+CisKKyNpZiAhZGVm aW5lZChEQVJXSU5fQ19FWENMVURFRCkKKyNlcnJvciBhc3NlcnQuaCBtaXNz aW5nCisjZWxpZiAhZGVmaW5lZChUQ0xfUFJJVkFURSkKKyNlcnJvciB0Y2wt cHJpdmF0ZS9oZWFkZXIuaCBtaXNzaW5nCisjZW5kaWYKSW5kZXg6IHRlc3Qv TW9kdWxlcy9JbnB1dHMvU3lzdGVtL3Vzci9pbmNsdWRlL3RjbC1wcml2YXRl L2hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVs bAorKysgdGVzdC9Nb2R1bGVzL0lucHV0cy9TeXN0ZW0vdXNyL2luY2x1ZGUv dGNsLXByaXZhdGUvaGVhZGVyLmgKQEAgLTAsMCArMSwyIEBACisvLyB0Y2wt cHJpdmF0ZS9oZWFkZXIuaAorI2RlZmluZSBUQ0xfUFJJVkFURSAxCkluZGV4 OiB0ZXN0L01vZHVsZXMvSW5wdXRzL1N5c3RlbS91c3IvaW5jbHVkZS9tb2R1 bGUubWFwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3QvTW9kdWxl cy9JbnB1dHMvU3lzdGVtL3Vzci9pbmNsdWRlL21vZHVsZS5tYXAKKysrIHRl c3QvTW9kdWxlcy9JbnB1dHMvU3lzdGVtL3Vzci9pbmNsdWRlL21vZHVsZS5t YXAKQEAgLTMwLDMgKzMwLDI1IEBACiAgIGhlYWRlciAidXNlc19vdGhlcl9j b25zdGFudHMuaCIKICAgZXhwb3J0ICoKIH0KKworbW9kdWxlIERhcndpbiB7 CisgIG1vZHVsZSBDIHsKKyAgICBtb2R1bGUgZXhjbHVkZWQgeworICAgICAg cmVxdWlyZXMgZXhjbHVkZWQKKyAgICAgIGhlYWRlciAiYXNzZXJ0LmgiCisg ICAgfQorICB9Cit9CisKK21vZHVsZSBUY2wgeworICBtb2R1bGUgUHJpdmF0 ZSB7CisgICAgcmVxdWlyZXMgZXhjbHVkZWQKKyAgICB1bWJyZWxsYSAiIgor ICB9Cit9CisKK21vZHVsZSBJT0tpdCB7CisgIG1vZHVsZSBhdmMgeworICAg IHJlcXVpcmVzIGNwbHVzcGx1cworICB9Cit9CkluZGV4OiB0ZXN0L01vZHVs ZXMvSW5wdXRzL1N5c3RlbS91c3IvaW5jbHVkZS9hc3NlcnQuaAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIHRlc3QvTW9kdWxl cy9JbnB1dHMvU3lzdGVtL3Vzci9pbmNsdWRlL2Fzc2VydC5oCkBAIC0wLDAg KzEsMiBAQAorLy8gYXNzZXJ0LmgKKyNkZWZpbmUgREFSV0lOX0NfRVhDTFVE RUQgMQpJbmRleDogbGliL0xleC9Nb2R1bGVNYXAuY3BwCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGxpYi9MZXgvTW9kdWxlTWFwLmNwcAorKysgbGli L0xleC9Nb2R1bGVNYXAuY3BwCkBAIC0xMDE1LDcgKzEwMTUsMTggQEAKICAg ICAKICAgICAvLy8gXGJyaWVmIFRoZSBhY3RpdmUgbW9kdWxlLgogICAgIE1v ZHVsZSAqQWN0aXZlTW9kdWxlOwotICAgIAorCisgICAgLy8vIFxicmllZiBX aGV0aGVyIGEgbW9kdWxlIHVzZXMgdGhlICdyZXF1aXJlcyBleGNsdWRlZCcg aGFjayB0byBtYXJrIGl0cworICAgIC8vLyBjb250ZW50cyBhcyAndGV4dHVh bCcuCisgICAgLy8vCisgICAgLy8vIE9uIG9sZGVyIERhcndpbiBTREsgdmVy c2lvbnMsICdyZXF1aXJlcyBleGNsdWRlZCcgaXMgdXNlZCB0byBtYXJrIHRo ZQorICAgIC8vLyBjb250ZW50cyBvZiB0aGUgRGFyd2luLkMuZXhjbHVkZWQg KGFzc2VydC5oKSBhbmQgVGNsLlByaXZhdGUgbW9kdWxlcyBhcworICAgIC8v LyBub24tbW9kdWxhciBoZWFkZXJzLiAgRm9yIGJhY2t3YXJkcyBjb21wYXRp YmlsaXR5LCB3ZSBjb250aW51ZSB0bworICAgIC8vLyBzdXBwb3J0CisgICAg Ly8vIHRoaXMgaWRpb20gZm9yIGp1c3QgdGhlc2UgbW9kdWxlcywgYW5kIG1h cCB0aGUgaGVhZGVycyB0byAndGV4dHVhbCcgdG8KKyAgICAvLy8gbWF0Y2gg dGhlIG9yaWdpbmFsIGludGVudC4KKyAgICBsbHZtOjpTbWFsbFB0clNldDxN b2R1bGUgKiwgMj4gVXNlc1JlcXVpcmVzRXhjbHVkZWRIYWNrOworCiAgICAg Ly8vIFxicmllZiBDb25zdW1lIHRoZSBjdXJyZW50IHRva2VuIGFuZCByZXR1 cm4gaXRzIGxvY2F0aW9uLgogICAgIFNvdXJjZUxvY2F0aW9uIGNvbnN1bWVU b2tlbigpOwogICAgIApAQCAtMTU3MCw2ICsxNTgxLDM4IEBACiAgICAgICAg ICAgICA6IEZpbGUtPmdldERpcigpLCBFeHRlcm5Mb2MpOwogfQogCisvLy8g V2hldGhlciB0byBhZGQgdGhlIHJlcXVpcmVtZW50IFxwIEZlYXR1cmUgdG8g dGhlIG1vZHVsZSBccCBNLgorLy8vCisvLy8gVGhpcyBwcmVzZXJ2ZXMgYmFj a3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIHR3byBoYWNrcyBpbiB0aGUgRGFy d2luIHN5c3RlbQorLy8vIG1vZHVsZSBtYXAgZmlsZXM6CisvLy8KKy8vLyAx LiBUaGUgdXNlIG9mICdyZXF1aXJlcyBleGNsdWRlZCcgdG8gbWFrZSBoZWFk ZXJzIG5vbi1tb2R1bGFyLCB3aGljaAorLy8vICAgIHNob3VsZCByZWFsbHkg YmUgbWFwcGVkIHRvICd0ZXh0dWFsJyBub3cgdGhhdCB3ZSBoYXZlIHRoaXMg ZmVhdHVyZS4gIFdlCisvLy8gICAgZHJvcCB0aGUgJ2V4Y2x1ZGVkJyByZXF1 aXJlbWVudCwgYW5kIHNldCBccCBJc1JlcXVpcmVzRXhjbHVkZWRIYWNrIHRv CisvLy8gICAgdHJ1ZS4gIExhdGVyLCB0aGlzIGJpdCB3aWxsIGJlIHVzZWQg dG8gbWFwIGFsbCB0aGUgaGVhZGVycyBpbnNpZGUgdGhpcworLy8vICAgIG1v ZHVsZSB0byAndGV4dHVhbCcuCisvLy8KKy8vLyAgICBUaGlzIGFmZmVjdHMg RGFyd2luLkMuZXhjbHVkZWQgKGZvciBhc3NlcnQuaCkgYW5kIFRjbC5Qcml2 YXRlLgorLy8vCisvLy8gMi4gUmVtb3ZlcyBhIGJvZ3VzIGNwbHVzcGx1cyBy ZXF1aXJlbWVudCBmcm9tIElPS2l0LmF2Yy4gIFRoaXMgcmVxdWlyZW1lbnQK Ky8vLyAgICB3YXMgbmV2ZXIgY29ycmVjdCBhbmQgY2F1c2VzIGlzc3VlcyBu b3cgdGhhdCB3ZSBjaGVjayBpdCwgc28gZHJvcCBpdC4KK3N0YXRpYyBib29s IHNob3VsZEFkZFJlcXVpcmVtZW50KE1vZHVsZSAqTSwgU3RyaW5nUmVmIEZl YXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s ICZJc1JlcXVpcmVzRXhjbHVkZWRIYWNrKSB7CisgIHN0YXRpYyBjb25zdCBT dHJpbmdSZWYgRGFyd2luQ0V4Y2x1ZGVkW10gPSB7IkRhcndpbiIsICJDIiwg ImV4Y2x1ZGVkIn07CisgIHN0YXRpYyBjb25zdCBTdHJpbmdSZWYgVGNsUHJp dmF0ZVtdID0geyJUY2wiLCAiUHJpdmF0ZSJ9OworICBzdGF0aWMgY29uc3Qg U3RyaW5nUmVmIElPS2l0QVZDW10gPSB7IklPS2l0IiwgImF2YyJ9OworCisg IGlmIChGZWF0dXJlID09ICJleGNsdWRlZCIgJiYgKE0tPmZ1bGxNb2R1bGVO YW1lRXF1YWwoRGFyd2luQ0V4Y2x1ZGVkKSB8fAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBNLT5mdWxsTW9kdWxlTmFtZUVxdWFsKFRjbFBy aXZhdGUpKSkgeworICAgICAgSXNSZXF1aXJlc0V4Y2x1ZGVkSGFjayA9IHRy dWU7CisgICAgICByZXR1cm4gZmFsc2U7CisgIH0gZWxzZSBpZiAoRmVhdHVy ZSA9PSAiY3BsdXNwbHVzIiAmJiBNLT5mdWxsTW9kdWxlTmFtZUVxdWFsKElP S2l0QVZDKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVy biB0cnVlOworfQorCiAvLy8gXGJyaWVmIFBhcnNlIGEgcmVxdWlyZXMgZGVj bGFyYXRpb24uCiAvLy8KIC8vLyAgIHJlcXVpcmVzLWRlY2xhcmF0aW9uOgpA QCAtMTYwNSw5ICsxNjQ4LDE4IEBACiAgICAgc3RkOjpzdHJpbmcgRmVhdHVy ZSA9IFRvay5nZXRTdHJpbmcoKTsKICAgICBjb25zdW1lVG9rZW4oKTsKIAot ICAgIC8vIEFkZCB0aGlzIGZlYXR1cmUuCi0gICAgQWN0aXZlTW9kdWxlLT5h ZGRSZXF1aXJlbWVudChGZWF0dXJlLCBSZXF1aXJlZFN0YXRlLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwLkxhbmdPcHRzLCAqTWFw LlRhcmdldCk7CisgICAgYm9vbCBJc1JlcXVpcmVzRXhjbHVkZWRIYWNrID0g ZmFsc2U7CisgICAgYm9vbCBTaG91bGRBZGRSZXF1aXJlbWVudCA9CisgICAg ICAgIHNob3VsZEFkZFJlcXVpcmVtZW50KEFjdGl2ZU1vZHVsZSwgRmVhdHVy ZSwgSXNSZXF1aXJlc0V4Y2x1ZGVkSGFjayk7CisKKyAgICBpZiAoSXNSZXF1 aXJlc0V4Y2x1ZGVkSGFjaykKKyAgICAgIFVzZXNSZXF1aXJlc0V4Y2x1ZGVk SGFjay5pbnNlcnQoQWN0aXZlTW9kdWxlKTsKKworICAgIGlmIChTaG91bGRB ZGRSZXF1aXJlbWVudCkgeworICAgICAgLy8gQWRkIHRoaXMgZmVhdHVyZS4K KyAgICAgIEFjdGl2ZU1vZHVsZS0+YWRkUmVxdWlyZW1lbnQoRmVhdHVyZSwg UmVxdWlyZWRTdGF0ZSwgTWFwLkxhbmdPcHRzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqTWFwLlRhcmdldCk7CisgICAgfQogCiAg ICAgaWYgKCFUb2suaXMoTU1Ub2tlbjo6Q29tbWEpKQogICAgICAgYnJlYWs7 CkBAIC0xNjU3LDkgKzE3MDksMTYgQEAKICAgICAgIGNvbnN1bWVUb2tlbigp OwogICAgIH0KICAgfQorCiAgIGlmIChMZWFkaW5nVG9rZW4gPT0gTU1Ub2tl bjo6VGV4dHVhbEtleXdvcmQpCiAgICAgUm9sZSA9IE1vZHVsZU1hcDo6TW9k dWxlSGVhZGVyUm9sZShSb2xlIHwgTW9kdWxlTWFwOjpUZXh0dWFsSGVhZGVy KTsKIAorICBpZiAoVXNlc1JlcXVpcmVzRXhjbHVkZWRIYWNrLmNvdW50KEFj dGl2ZU1vZHVsZSkpIHsKKyAgICAvLyBNYXJrIHRoaXMgaGVhZGVyICd0ZXh0 dWFsJyAoc2VlIGRvYyBjb21tZW50IGZvcgorICAgIC8vIE1vZHVsZTo6VXNl c1JlcXVpcmVzRXhjbHVkZWRIYWNrKS4KKyAgICBSb2xlID0gTW9kdWxlTWFw OjpNb2R1bGVIZWFkZXJSb2xlKFJvbGUgfCBNb2R1bGVNYXA6OlRleHR1YWxI ZWFkZXIpOworICB9CisKICAgaWYgKExlYWRpbmdUb2tlbiAhPSBNTVRva2Vu OjpIZWFkZXJLZXl3b3JkKSB7CiAgICAgaWYgKCFUb2suaXMoTU1Ub2tlbjo6 SGVhZGVyS2V5d29yZCkpIHsKICAgICAgIERpYWdzLlJlcG9ydChUb2suZ2V0 TG9jYXRpb24oKSwgZGlhZzo6ZXJyX21tYXBfZXhwZWN0ZWRfaGVhZGVyKQpA QCAtMTgzOCwxNCArMTg5Nyw0MCBAQAogICAgIEhhZEVycm9yID0gdHJ1ZTsK ICAgICByZXR1cm47CiAgIH0KLSAgCisKKyAgaWYgKFVzZXNSZXF1aXJlc0V4 Y2x1ZGVkSGFjay5jb3VudChBY3RpdmVNb2R1bGUpKSB7CisgICAgLy8gTWFy ayB0aGlzIGhlYWRlciAndGV4dHVhbCcgKHNlZSBkb2MgY29tbWVudCBmb3IK KyAgICAvLyBNb2R1bGVNYXBQYXJzZXI6OlVzZXNSZXF1aXJlc0V4Y2x1ZGVk SGFjaykuIEFsdGhvdWdoIGl0ZXJhdGluZyBvdmVyIHRoZQorICAgIC8vIGRp cmVjdG9yeSBpcyByZWxhdGl2ZWx5IGV4cGVuc2l2ZSwgaW4gcHJhY3RpY2Ug dGhpcyBvbmx5IGFwcGxpZXMgdG8gdGhlCisgICAgLy8gdW5jb21tb25seSB1 c2VkIFRjbCBtb2R1bGUgb24gRGFyd2luIHBsYXRmb3Jtcy4KKyAgICBzdGQ6 OmVycm9yX2NvZGUgRUM7CisgICAgU21hbGxWZWN0b3I8TW9kdWxlOjpIZWFk ZXIsIDY+IEhlYWRlcnM7CisgICAgZm9yIChsbHZtOjpzeXM6OmZzOjpyZWN1 cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIEkoRGlyLT5nZXROYW1lKCksIEVD KSwgRTsKKyAgICAgICAgIEkgIT0gRSAmJiAhRUM7IEkuaW5jcmVtZW50KEVD KSkgeworICAgICAgaWYgKGNvbnN0IEZpbGVFbnRyeSAqRkUgPSBTb3VyY2VN Z3IuZ2V0RmlsZU1hbmFnZXIoKS5nZXRGaWxlKEktPnBhdGgoKSkpIHsKKwor ICAgICAgICBNb2R1bGU6OkhlYWRlciBIZWFkZXIgPSB7SS0+cGF0aCgpLCBG RX07CisgICAgICAgIEhlYWRlcnMucHVzaF9iYWNrKHN0ZDo6bW92ZShIZWFk ZXIpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTb3J0IGhlYWRlciBw YXRocyBzbyB0aGF0IHRoZSBwY20gZG9lc24ndCBkZXBlbmQgb24gaXRlcmF0 aW9uIG9yZGVyLgorICAgIGxsdm06OmFycmF5X3BvZF9zb3J0KEhlYWRlcnMu YmVnaW4oKSwgSGVhZGVycy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBbXShjb25zdCBNb2R1bGU6OkhlYWRlciAqQSwgY29uc3QgTW9kdWxl OjpIZWFkZXIgKkIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBBLT5OYW1lQXNXcml0dGVuLmNvbXBhcmUoQi0+TmFtZUFzV3JpdHRl bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgZm9yIChh dXRvICZIZWFkZXIgOiBIZWFkZXJzKQorICAgICAgTWFwLmFkZEhlYWRlcihB Y3RpdmVNb2R1bGUsIHN0ZDo6bW92ZShIZWFkZXIpLCBNb2R1bGVNYXA6OlRl eHR1YWxIZWFkZXIpOworICAgIHJldHVybjsKKyAgfQorCiAgIGlmIChNb2R1 bGUgKk93bmluZ01vZHVsZSA9IE1hcC5VbWJyZWxsYURpcnNbRGlyXSkgewog ICAgIERpYWdzLlJlcG9ydChVbWJyZWxsYUxvYywgZGlhZzo6ZXJyX21tYXBf dW1icmVsbGFfY2xhc2gpCiAgICAgICA8PCBPd25pbmdNb2R1bGUtPmdldEZ1 bGxNb2R1bGVOYW1lKCk7CiAgICAgSGFkRXJyb3IgPSB0cnVlOwogICAgIHJl dHVybjsKLSAgfSAKLSAgCisgIH0KKwogICAvLyBSZWNvcmQgdGhpcyB1bWJy ZWxsYSBkaXJlY3RvcnkuCiAgIE1hcC5zZXRVbWJyZWxsYURpcihBY3RpdmVN b2R1bGUsIERpciwgRGlyTmFtZSk7CiB9CkluZGV4OiBsaWIvQmFzaWMvTW9k dWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWIvQmFzaWMv TW9kdWxlLmNwcAorKysgbGliL0Jhc2ljL01vZHVsZS5jcHAKQEAgLTEzOCw2 ICsxMzgsMTUgQEAKICAgcmV0dXJuIFJlc3VsdDsKIH0KIAorYm9vbCBNb2R1 bGU6OmZ1bGxNb2R1bGVOYW1lRXF1YWwoQXJyYXlSZWY8U3RyaW5nUmVmPiBu YW1lUGFydHMpIGNvbnN0IHsKKyAgZm9yIChjb25zdCBNb2R1bGUgKk0gPSB0 aGlzOyBNOyBNID0gTS0+UGFyZW50KSB7CisgICAgaWYgKG5hbWVQYXJ0cy5l bXB0eSgpIHx8IE0tPk5hbWUgIT0gbmFtZVBhcnRzLmJhY2soKSkKKyAgICAg IHJldHVybiBmYWxzZTsKKyAgICBuYW1lUGFydHMgPSBuYW1lUGFydHMuZHJv cF9iYWNrKCk7CisgIH0KKyAgcmV0dXJuIG5hbWVQYXJ0cy5lbXB0eSgpOwor fQorCiBNb2R1bGU6OkRpcmVjdG9yeU5hbWUgTW9kdWxlOjpnZXRVbWJyZWxs YURpcigpIGNvbnN0IHsKICAgaWYgKEhlYWRlciBVID0gZ2V0VW1icmVsbGFI ZWFkZXIoKSkKICAgICByZXR1cm4geyIiLCBVLkVudHJ5LT5nZXREaXIoKX07 CkluZGV4OiBpbmNsdWRlL2NsYW5nL0Jhc2ljL01vZHVsZS5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvY2xhbmcvQmFzaWMvTW9kdWxl LmgKKysrIGluY2x1ZGUvY2xhbmcvQmFzaWMvTW9kdWxlLmgKQEAgLTM1Niw2 ICszNTYsMTIgQEAKICAgLy8vIGl0cyB0b3AtbGV2ZWwgbW9kdWxlLgogICBz dGQ6OnN0cmluZyBnZXRGdWxsTW9kdWxlTmFtZSgpIGNvbnN0OwogCisgIC8v LyBcYnJpZWYgV2hldGhlciB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgbW9kdWxl IGlzIGVxdWFsIHRvIGpvaW5pbmcKKyAgLy8vIFxwIG5hbWVQYXJ0cyB3aXRo ICIuInMuCisgIC8vLworICAvLy8gVGhpcyBpcyBtb3JlIGVmZmljaWVudCB0 aGFuIGdldEZ1bGxNb2R1bGVOYW1lKCkuCisgIGJvb2wgZnVsbE1vZHVsZU5h bWVFcXVhbChBcnJheVJlZjxTdHJpbmdSZWY+IG5hbWVQYXJ0cykgY29uc3Q7 CisKICAgLy8vIFxicmllZiBSZXRyaWV2ZSB0aGUgdG9wLWxldmVsIG1vZHVs ZSBmb3IgdGhpcyAoc3ViKW1vZHVsZSwgd2hpY2ggbWF5CiAgIC8vLyBiZSB0 aGlzIG1vZHVsZS4KICAgTW9kdWxlICpnZXRUb3BMZXZlbE1vZHVsZSgpIHsK --b1_cc74744d0a9caf0c824b7bf48d4e159f Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KY2ZlLWNvbW1p dHMgbWFpbGluZyBsaXN0CmNmZS1jb21taXRzQGxpc3RzLmxsdm0ub3JnCmh0dHA6Ly9saXN0cy5s bHZtLm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vY2ZlLWNvbW1pdHMK --b1_cc74744d0a9caf0c824b7bf48d4e159f--