From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30658 invoked by alias); 11 Sep 2009 17:25:39 -0000 Received: (qmail 30635 invoked by uid 22791); 11 Sep 2009 17:25:35 -0000 X-SWARE-Spam-Status: No, hits=1.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_44,J_CHICKENPOX_45,J_CHICKENPOX_48,J_CHICKENPOX_55,J_CHICKENPOX_61,J_CHICKENPOX_62,J_CHICKENPOX_83,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 11 Sep 2009 17:25:28 +0000 Received: from wpaz5.hot.corp.google.com (wpaz5.hot.corp.google.com [172.24.198.69]) by smtp-out.google.com with ESMTP id n8BHPQEH013898 for ; Fri, 11 Sep 2009 10:25:27 -0700 Received: from fxm20 (fxm20.prod.google.com [10.184.13.20]) by wpaz5.hot.corp.google.com with ESMTP id n8BHPBhQ024820 for ; Fri, 11 Sep 2009 10:25:24 -0700 Received: by fxm20 with SMTP id 20so971816fxm.38 for ; Fri, 11 Sep 2009 10:25:23 -0700 (PDT) MIME-Version: 1.0 Received: by 10.103.50.22 with SMTP id c22mr1557089muk.54.1252689923777; Fri, 11 Sep 2009 10:25:23 -0700 (PDT) Date: Fri, 11 Sep 2009 17:25:00 -0000 Message-ID: <7ebec9e70909111025j740aebc3x28d7895a4f779f1@mail.gmail.com> Subject: gold: try to open the output file in incremental build and check if it has the inputs section From: Mikolaj Zalewski To: binutils@sourceware.org Content-Type: multipart/mixed; boundary=0016e659f402eba4f6047350994c X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2009-09/txt/msg00331.txt.bz2 --0016e659f402eba4f6047350994c Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1518 This patch adds an object representing the output file and makes use of it - gold now checks if the input is an ELF file and if it has a SHT_GNU_INCREMENTAL_INPUTS section. I have moved some code from object.cc to elf_file.h to reuse it. The new code informs the user why it needs to fall back to full link (except for the obvious case that the output doesn't exist). However, I'm not sure if this will be helpful or annoying. Does anyone has an opinion? elfcpp: 2009-09-11 Mikolaj Zalewski * elf_file.h: Fix header guard. (Elf_recognizer): New class, code from gold/object.cc. (Elf_file::find_section_by_type): New method. gold: 2009-09-11 Mikolaj Zalewski * incremental.cc: Include . Include "target-select.h". (vexplain_no_incremental): New function. (explain_no_incremental): New function. (Incremental_binary::error): New method. (Sized_incremental_binary::do_find_incremental_inputs_section): New method. (make_sized_incremental_binary): New function. (open_incremental_binary): New function. (can_incrementally_link_file): Add checks if output is ELF and has inputs section. * incremental.h: Include "elf_file.h". Include "output.h". (Incremental_binary): New class. (Sized_incremental_binary): New class. (open_incremental_binary): Declare. * object.cc (is_elf_object): Use elfcpp::Elf_recognizer::is_elf_file. (make_elf_object): Use elfcpp::Elf_recognizer::is_valid_header. * output.cc (Output_file::filesize): New method. --0016e659f402eba4f6047350994c Content-Type: text/plain; charset=US-ASCII; name="0001-gold-try-to-open-the-output-file-in-incremental-build-and-check-if-it-has-the-inputs-section.txt" Content-Disposition: attachment; filename="0001-gold-try-to-open-the-output-file-in-incremental-build-and-check-if-it-has-the-inputs-section.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fzh67l1y0 Content-length: 26243 RnJvbSA3NzkyNzQwM2I3ZDQwODFiYjU4ZDAzNzRlNDExNDI0MTNhNmRlZmMy IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtvbGFqIFphbGV3 c2tpIDxtaWtvbGFqekBwdWNoYXRlay5kb20+CkRhdGU6IEZyaSwgMTEgU2Vw IDIwMDkgMTg6NTQ6NDkgKzAyMDAKU3ViamVjdDogW1BBVENIXSBnb2xkOiB0 cnkgdG8gb3BlbiB0aGUgb3V0cHV0IGZpbGUgaW4gaW5jcmVtZW50YWwgYnVp bGQgYW5kIGNoZWNrIGlmIGl0IGhhcyB0aGUgaW5wdXRzIHNlY3Rpb24KCi0t LQogZWxmY3BwL2VsZmNwcF9maWxlLmggfCAgMTU4ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLQogZ29sZC9pbmNyZW1lbnRh bC5jYyAgfCAgMTkwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBnb2xkL2luY3JlbWVudGFsLmggICB8ICAx MTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBnb2xkL29iamVj dC5jYyAgICAgICB8ICAgNzQgKysrLS0tLS0tLS0tLS0tLS0tLQogZ29sZC9v dXRwdXQuaCAgICAgICAgfCAgICA1ICsrCiA1IGZpbGVzIGNoYW5nZWQsIDQ3 NyBpbnNlcnRpb25zKCspLCA2MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9lbGZjcHAvZWxmY3BwX2ZpbGUuaCBiL2VsZmNwcC9lbGZjcHBfZmlsZS5o CmluZGV4IGYxZjQ0MjMuLmFmZjFhMjMgMTAwNjQ0Ci0tLSBhL2VsZmNwcC9l bGZjcHBfZmlsZS5oCisrKyBiL2VsZmNwcC9lbGZjcHBfZmlsZS5oCkBAIC01 Myw3ICs1Myw3IEBACiAvLyBUaGlzIHBlcm1pdHMgd3JpdGluZwogLy8gICAg ZWxmY3BwOjpTaGRyIHNoZHIoZmlsZSwgZWYuc2VjdGlvbl9oZWFkZXIobikp OwogCi0jaWZuZGVmIEVMRlBDUF9GSUxFX0gKKyNpZm5kZWYgRUxGQ1BQX0ZJ TEVfSAogI2RlZmluZSBFTEZDUFBfRklMRV9ICiAKICNpbmNsdWRlIDxzdHJp bmc+CkBAIC02Miw2ICs2MiwzNCBAQAogbmFtZXNwYWNlIGVsZmNwcAogewog CisvLyBBIHNpbXBsZSBoZWxwZXIgY2xhc3MgdG8gcmVjb2duaXplIGlmIGEg ZmlsZSBoYXMgYW4gRUxGIGhlYWRlci4KKworY2xhc3MgRWxmX3JlY29nbml6 ZXIKK3sKKyBwdWJsaWM6CisgIC8vIE1heGltdW0gaGVhZGVyIHNpemUuIFRo ZSB1c2VyIHNob3VsZCB0cnkgdG8gcmVhZCB0aGF0IG11Y2ggb2YgdGhlCisg IC8vIGZpbGUgd2hlbiB1c2luZyB0aGlzIGNsYXNzLgorCisgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2hlYWRlcl9zaXplID0gRWxmX3NpemVzPDY0Pjo6ZWhk cl9zaXplOworCisgIC8vIENoZWNrcyBpZiB0aGUgZmlsZSBjb250YWlucyB0 aGUgRUxGIG1hZ2ljLiBPdGhlciBoZWFkZXIgZmllbGRzIGFyZSBub3QKKyAg Ly8gY2hlY2tlZC4KKworICBzdGF0aWMgYm9vbAorICBpc19lbGZfZmlsZShj b25zdCB1bnNpZ25lZCBjaGFyKiBlaGRyX2J1ZiwgaW50IHNpemUpOworCisg IC8vIENoZWNrIGlmIHRoaXMgaXMgYSB2YWxpZCBoZWFkZXIgb2YgYSAzMi1i aXQgb3IgNjQtYml0LCBsaXR0bGUtZW5kaWFuIG9yCisgIC8vIGJpZy1lbmRp YW4gRUxGIGZpbGUuICBBc3N1bWVzIGlzX2VsZl9maWxlKCkgaGFzIGJlZW4g Y2hlY2tlZCB0byBiZSB0cnVlLgorICAvLyBJZiB0aGUgaGVhZGVyIGlzIG5v dCB2YWxpZCwgKkVSUk9SIGNvbnRhaW5zIGEgaHVtYW4tcmVhZGFibGUgZXJy b3IKKyAgLy8gbWVzc2FnZS4gIElmIGlzIGlzLCAqQklUTkVTUyBpcyBzZXQg dG8gZWl0aGVyIDMyIG9yIDY0LCAqQklHX0VORElBTgorICAvLyBpbmZvcm1z IGlmIHRoZSBmaWxlIGlzIGJpZy1lbmRpYW4uCisKKyAgc3RhdGljIGJvb2wK KyAgaXNfdmFsaWRfaGVhZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGVoZHJf YnVmLCBvZmZfdCBzaXplLAorICAgICAgICAgICAgICAgICAgaW50KiBiaXRu ZXNzLCBib29sKiBiaWdfZW5kaWFuLAorICAgICAgICAgICAgICAgICAgc3Rk OjpzdHJpbmcqIGVycm9yKTsKK307CisKIC8vIFRoaXMgb2JqZWN0IGlzIHVz ZWQgdG8gcmVhZCBhbiBFTEYgZmlsZS4KIC8vICAgU0laRTogVGhlIHNpemUg b2YgZmlsZSwgMzIgb3IgNjQuCiAvLyAgIEJJR19FTkRJQU46IFdoZXRoZXIg dGhlIGZpbGUgaXMgaW4gYmlnLWVuZGlhbiBmb3JtYXQuCkBAIC05OSw2ICsx MjcsMTEgQEAgY2xhc3MgRWxmX2ZpbGUKICAgc2hvZmYoKSBjb25zdAogICB7 IHJldHVybiB0aGlzLT5zaG9mZl87IH0KIAorICAvLyBGaW5kIHNlY3Rpb24g b2YgdHlwZSBUWVBFIGFuZCByZXR1cm4gaXRzIGluZGV4LiBSZXR1cm5zIFNI Tl9VTkRFRiBpZgorICAvLyBub3QgZm91bmQuCisgIHVuc2lnbmVkIGludAor ICBmaW5kX3NlY3Rpb25fYnlfdHlwZSh1bnNpZ25lZCBpbnQgdHlwZSk7CisK ICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VjdGlvbnMuCiAgIHVuc2ln bmVkIGludAogICBzaG51bSgpCkBAIC0xOTMsNiArMjI2LDExMSBAQCBjbGFz cyBFbGZfZmlsZQogICBpbnQgbGFyZ2Vfc2huZHhfb2Zmc2V0XzsKIH07CiAK Ky8vIElubGluZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4KKworLy8gQ2hlY2sg Zm9yIHByZXNlbmNlIG9mIHRoZSBFTEYgbWFnaWMuCisKK2lubGluZSBib29s CitFbGZfcmVjb2duaXplcjo6aXNfZWxmX2ZpbGUoY29uc3QgdW5zaWduZWQg Y2hhciogZWhkcl9idWYsIGludCBzaXplKQoreworICBpZiAoc2l6ZSA8IDQp CisgICAgcmV0dXJuIGZhbHNlOworCisgIHN0YXRpYyB1bnNpZ25lZCBjaGFy IGVsZm1hZ2ljWzRdID0KKyAgICB7CisgICAgICBlbGZjcHA6OkVMRk1BRzAs IGVsZmNwcDo6RUxGTUFHMSwKKyAgICAgIGVsZmNwcDo6RUxGTUFHMiwgZWxm Y3BwOjpFTEZNQUczCisgICAgfTsKKyAgcmV0dXJuIG1lbWNtcChlaGRyX2J1 ZiwgZWxmbWFnaWMsIDQpID09IDA7Cit9CisKK25hbWVzcGFjZQoreworCitp bmxpbmUgc3RkOjpzdHJpbmcKK2ludGVybmFsX3ByaW50Zl9pbnQoY29uc3Qg Y2hhciogZm9ybWF0LCBpbnQgYXJnKQoreworICBjaGFyIGJ1ZlsyNTZdOwor ICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIGFyZyk7Cisg IGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsgIC8vIEVuc3VyZSB0aGUgc3Ry aW5nIGlzIE5VTEwtdGVybWluYXRlZC4KKyAgcmV0dXJuIHN0ZDo6c3RyaW5n KGJ1Zik7Cit9CisKK30gIC8vIEVuZCBhbm9ueW1vdXMgbmFtZXNwYWNlLgor CisvLyBDaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIEVMRiBoZWFkZXIuCisK K2lubGluZSBib29sCitFbGZfcmVjb2duaXplcjo6aXNfdmFsaWRfaGVhZGVy KAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGVoZHJfYnVmLCBvZmZfdCBz aXplLCBpbnQqIGJpdG5lc3MsIGJvb2wqIGJpZ19lbmRpYW4sCisgICAgc3Rk OjpzdHJpbmcqIGVycm9yKQoreworICBpZiAoc2l6ZSA8IGVsZmNwcDo6RUlf TklERU5UKQorICAgIHsKKyAgICAgICplcnJvciA9IF8oIkVMRiBmaWxlIHRv byBzaG9ydCIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBp bnQgdiA9IGVoZHJfYnVmW2VsZmNwcDo6RUlfVkVSU0lPTl07CisgIGlmICh2 ICE9IGVsZmNwcDo6RVZfQ1VSUkVOVCkKKyAgICB7CisgICAgICBpZiAodiA9 PSBlbGZjcHA6OkVWX05PTkUpCisgICAgICAgICplcnJvciA9IF8oImludmFs aWQgRUxGIHZlcnNpb24gMCIpOworICAgICAgZWxzZQorICAgICAgICAqZXJy b3IgPSBpbnRlcm5hbF9wcmludGZfaW50KF8oInVuc3VwcG9ydGVkIEVMRiB2 ZXJzaW9uICVkIiksIHYpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K KworICBpbnQgYyA9IGVoZHJfYnVmW2VsZmNwcDo6RUlfQ0xBU1NdOworICBp ZiAoYyA9PSBlbGZjcHA6OkVMRkNMQVNTTk9ORSkKKyAgICB7CisgICAgICAq ZXJyb3IgPSBfKCJpbnZhbGlkIEVMRiBjbGFzcyAwIik7CisgICAgICByZXR1 cm4gZmFsc2U7CisgICAgfQorICBlbHNlIGlmIChjICE9IGVsZmNwcDo6RUxG Q0xBU1MzMgorICAgICAgICAgICAmJiBjICE9IGVsZmNwcDo6RUxGQ0xBU1M2 NCkKKyAgICB7CisgICAgICAqZXJyb3IgPSBpbnRlcm5hbF9wcmludGZfaW50 KF8oInVuc3VwcG9ydGVkIEVMRiBjbGFzcyAlZCIpLCBjKTsKKyAgICAgIHJl dHVybiBmYWxzZTsKKyAgICB9CisKKyAgaW50IGQgPSBlaGRyX2J1ZltlbGZj cHA6OkVJX0RBVEFdOworICBpZiAoZCA9PSBlbGZjcHA6OkVMRkRBVEFOT05F KQorICAgIHsKKyAgICAgICplcnJvciA9IF8oImludmFsaWQgRUxGIGRhdGEg ZW5jb2RpbmciKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIGVs c2UgaWYgKGQgIT0gZWxmY3BwOjpFTEZEQVRBMkxTQgorICAgICAgICAgICAm JiBkICE9IGVsZmNwcDo6RUxGREFUQTJNU0IpCisgICAgeworICAgICAgKmVy cm9yID0gaW50ZXJuYWxfcHJpbnRmX2ludChfKCJ1bnN1cHBvcnRlZCBFTEYg ZGF0YSBlbmNvZGluZyAlZCIpLCBkKTsKKyAgICAgIHJldHVybiBmYWxzZTsK KyAgICB9CisKKyAgKmJpZ19lbmRpYW4gPSAoZCA9PSBlbGZjcHA6OkVMRkRB VEEyTVNCKTsKKworICBpZiAoYyA9PSBlbGZjcHA6OkVMRkNMQVNTMzIpCisg ICAgeworICAgICAgaWYgKHNpemUgPCBlbGZjcHA6OkVsZl9zaXplczwzMj46 OmVoZHJfc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICplcnJvciA9IF8o IkVMRiBmaWxlIHRvbyBzaG9ydCIpOworICAgICAgICAgIHJldHVybiBmYWxz ZTsKKyAgICAgICAgfQorICAgICAgKmJpdG5lc3MgPSAzMjsKKyAgICB9Cisg IGVsc2UKKyAgICB7CisgICAgICBpZiAoc2l6ZSA8IGVsZmNwcDo6RWxmX3Np emVzPDY0Pjo6ZWhkcl9zaXplKQorICAgICAgICB7CisgICAgICAgICAgKmVy cm9yID0gXygiRUxGIGZpbGUgdG9vIHNob3J0Iik7CisgICAgICAgICAgcmV0 dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAqYml0bmVzcyA9IDY0Owor ICAgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKKwogLy8gVGVtcGxhdGUgZnVu Y3Rpb24gZGVmaW5pdGlvbnMuCiAKIC8vIENvbnN0cnVjdCBhbiBFbGZfZmls ZSBnaXZlbiBhbiBFTEYgZmlsZSBoZWFkZXIuCkBAIC0yNjksNiArNDA3LDI0 IEBAIEVsZl9maWxlPHNpemUsIGJpZ19lbmRpYW4sIEZpbGU+Ojppbml0aWFs aXplX3NobnVtKCkKICAgICB9CiB9CiAKKy8vIEZpbmQgc2VjdGlvbiBvZiB0 eXBlIFRZUEUgYW5kIHJldHVybiBpdHMgaW5kZXguIFJldHVybnMgU0hOX1VO REVGIGlmCisvLyBub3QgZm91bmQuCit0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9v bCBiaWdfZW5kaWFuLCB0eXBlbmFtZSBGaWxlPgordW5zaWduZWQgaW50CitF bGZfZmlsZTxzaXplLCBiaWdfZW5kaWFuLCBGaWxlPjo6ZmluZF9zZWN0aW9u X2J5X3R5cGUodW5zaWduZWQgaW50IHR5cGUpCit7CisgIHVuc2lnbmVkIGlu dCBzaG51bSA9IHRoaXMtPnNobnVtKCk7CisgIHR5cGVuYW1lIEZpbGU6OlZp ZXcgdigKKyAgICAgIHRoaXMtPmZpbGVfLT52aWV3KHRoaXMtPnNob2ZmXywg VGhpczo6c2hkcl9zaXplICogc2hudW0pKTsKKyAgZm9yICh1bnNpZ25lZCBp bnQgaSA9IDA7IGkgPCBzaG51bTsgaSsrKQorICAgIHsKKyAgICAgIEVmX3No ZHIgc2hkcih2LmRhdGEoKSArIFRoaXM6OnNoZHJfc2l6ZSAqIGkpOworICAg ICAgaWYgKHNoZHIuZ2V0X3NoX3R5cGUoKSA9PSB0eXBlKQorICAgICAgICBy ZXR1cm4gaTsKKyAgICB9CisgIHJldHVybiBTSE5fVU5ERUY7Cit9CisKIC8v IFJldHVybiB0aGUgZmlsZSBvZmZzZXQgb2YgdGhlIHNlY3Rpb24gaGVhZGVy IG9mIHNlY3Rpb24gU0hORFguCiAKIHRlbXBsYXRlPGludCBzaXplLCBib29s IGJpZ19lbmRpYW4sIHR5cGVuYW1lIEZpbGU+CmRpZmYgLS1naXQgYS9nb2xk L2luY3JlbWVudGFsLmNjIGIvZ29sZC9pbmNyZW1lbnRhbC5jYwppbmRleCA0 YTNlY2IxLi5lOGRjZTE2IDEwMDY0NAotLS0gYS9nb2xkL2luY3JlbWVudGFs LmNjCisrKyBiL2dvbGQvaW5jcmVtZW50YWwuY2MKQEAgLTIwLDEyICsyMCwx NSBAQAogLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwKIC8vIE1BIDAyMTEwLTEzMDEsIFVT QS4KIAorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCiAjaW5jbHVkZSAiZ29sZC5o IgogI2luY2x1ZGUgImVsZmNwcC5oIgogI2luY2x1ZGUgIm91dHB1dC5oIgog I2luY2x1ZGUgImluY3JlbWVudGFsLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZS5o IgogI2luY2x1ZGUgIm91dHB1dC5oIgorI2luY2x1ZGUgInRhcmdldC1zZWxl Y3QuaCIKIAogdXNpbmcgZWxmY3BwOjpDb252ZXJ0OwogCkBAIC0xNTAsNiAr MTUzLDE2MiBAQCBjbGFzcyBJbmNyZW1lbnRhbF9pbnB1dHNfZW50cnlfd3Jp dGUKICAgaW50ZXJuYWw6OkluY3JlbWVudGFsX2lucHV0c19lbnRyeV9kYXRh KiBwXzsKIH07CiAKKy8vIEluZm9ybSB0aGUgdXNlciB3aHkgd2UgZG9uJ3Qg ZG8gYW4gaW5jcmVtZW50YWwgbGluay4gIE5vdCBjYWxsZWQgaW4KKy8vIHRo ZSBvYnZpb3VzIGNhc2Ugb2YgbWlzc2luZyBvdXRwdXQgZmlsZS4gIFRPRE86 IElzIHRoaXMgaGVscGZ1bD8KKwordm9pZAordmV4cGxhaW5fbm9faW5jcmVt ZW50YWwoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7Cisg IGNoYXIqIGJ1ZiA9IE5VTEw7CisgIGlmICh2YXNwcmludGYoJmJ1ZiwgZm9y bWF0LCBhcmdzKSA8IDApCisgICAgZ29sZF9ub21lbSgpOworICBnb2xkX2lu Zm8oXygidGhlIGxpbmsgbWlnaHQgdGFrZSBsb25nZXI6ICIKKyAgICAgICAg ICAgICAgImNhbm5vdCBwZXJmb3JtIGluY3JlbWVudGFsIGxpbms6ICVzIiks IGJ1Zik7CisgIGZyZWUoYnVmKTsKK30KKwordm9pZAorZXhwbGFpbl9ub19p bmNyZW1lbnRhbChjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKK3sKKyAgdmFf bGlzdCBhcmdzOworICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICB2ZXhw bGFpbl9ub19pbmNyZW1lbnRhbChmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQo YXJncyk7Cit9CisKKy8vIFJlcG9ydCBhbiBlcnJvci4KKwordm9pZAorSW5j cmVtZW50YWxfYmluYXJ5OjplcnJvcihjb25zdCBjaGFyKiBmb3JtYXQsIC4u LikgY29uc3QKK3sKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydChhcmdz LCBmb3JtYXQpOworICAvLyBDdXJyZW50IGNvZGUgb25seSBjaGVja3MgaWYg dGhlIGZpbGUgY2FuIGJlIHVzZWQgZm9yIGluY3JlbWVudGFsIGxpbmtpbmcs CisgIC8vIHNvIGVycm9ycyBzaG91bGRuJ3QgZmFpbCB0aGUgYnVpbGQsIGJ1 dCBvbmx5IHJlc3VsdCBpbiBhIGZhbGxiYWNrIHRvIGEKKyAgLy8gZnVsbCBi dWlsZC4KKyAgLy8gVE9ETzogd2hlbiB3ZSBpbXBsZW1lbnQgaW5jcmVtZW50 YWwgZWRpdGluZyBvZiB0aGUgZmlsZSwgd2UgbWF5IG5lZWQgYQorICAvLyBm bGFnIHRoYXQgd2lsbCBjYXVzZSBlcnJvcnMgdG8gYmUgdHJlYXRlZCBzZXJp b3VzbHkuCisgIHZleHBsYWluX25vX2luY3JlbWVudGFsKGZvcm1hdCwgYXJn cyk7CisgIHZhX2VuZChhcmdzKTsKK30KKwordGVtcGxhdGU8aW50IHNpemUs IGJvb2wgYmlnX2VuZGlhbj4KK2Jvb2wKK1NpemVkX2luY3JlbWVudGFsX2Jp bmFyeTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fZmluZF9pbmNyZW1lbnRhbF9p bnB1dHNfc2VjdGlvbigKKyAgICBMb2NhdGlvbiogbG9jYXRpb24pCit7Cisg IHVuc2lnbmVkIGludCBzaG5keCA9IHRoaXMtPmVsZl9maWxlXy5maW5kX3Nl Y3Rpb25fYnlfdHlwZSgKKyAgICAgIGVsZmNwcDo6U0hUX0dOVV9JTkNSRU1F TlRBTF9JTlBVVFMpOworICBpZiAoc2huZHggPT0gZWxmY3BwOjpTSE5fVU5E RUYpICAvLyBOb3QgZm91bmQuCisgICAgcmV0dXJuIGZhbHNlOworICAqbG9j YXRpb24gPSB0aGlzLT5lbGZfZmlsZV8uc2VjdGlvbl9jb250ZW50cyhzaG5k eCk7CisgIHJldHVybiB0cnVlOworfQorCituYW1lc3BhY2UKK3sKKworLy8g Q3JlYXRlIGEgU2l6ZWRfaW5jcmVtZW50YWxfYmluYXJ5IG9iamVjdCBvZiB0 aGUgc3BlY2lmaWVkIHNpemUgYW5kCisvLyBlbmRpYW5uZXNzLiBGYWlscyBp ZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBub3Qgc3VwcG9ydGVkLgor Cit0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgorSW5jcmVt ZW50YWxfYmluYXJ5KgorbWFrZV9zaXplZF9pbmNyZW1lbnRhbF9iaW5hcnko T3V0cHV0X2ZpbGUqIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBlbGZjcHA6OkVoZHI8c2l6ZSwgYmlnX2VuZGlhbj4mIGVo ZHIpCit7CisgIFRhcmdldCogdGFyZ2V0ID0gc2VsZWN0X3RhcmdldChlaGRy LmdldF9lX21hY2hpbmUoKSwgc2l6ZSwgYmlnX2VuZGlhbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVoZHIuZ2V0X2VfaWRlbnQoKVtl bGZjcHA6OkVJX09TQUJJXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVoZHIuZ2V0X2VfaWRlbnQoKVtlbGZjcHA6OkVJX0FCSVZFUlNJ T05dKTsKKyAgaWYgKHRhcmdldCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGV4 cGxhaW5fbm9faW5jcmVtZW50YWwoXygidW5zdXBwb3J0ZWQgRUxGIG1hY2hp bmUgbnVtYmVyICVkIiksCisgICAgICAgICAgICAgICBlaGRyLmdldF9lX21h Y2hpbmUoKSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgcmV0 dXJuIG5ldyBTaXplZF9pbmNyZW1lbnRhbF9iaW5hcnk8c2l6ZSwgYmlnX2Vu ZGlhbj4oZmlsZSwgZWhkciwgdGFyZ2V0KTsKK30KKworfSAgLy8gRW5kIG9m IGFub255bW91cyBuYW1lc3BhY2UuCisKKy8vIENyZWF0ZSBhbiBJbmNyZW1l bnRhbF9iaW5hcnkgb2JqZWN0IGZvciBGSUxFLiBSZXR1cm5zIE5VTEwgaXMg dGhpcyBpcyBub3QKKy8vIHBvc3NpYmxlLCBlLmcuIEZJTEUgaXMgbm90IGFu IEVMRiBmaWxlIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0YXJnZXQuIEZJTEUK Ky8vIHNob3VsZCBiZSBvcGVuZWQuCisKK0luY3JlbWVudGFsX2JpbmFyeSoK K29wZW5faW5jcmVtZW50YWxfYmluYXJ5KE91dHB1dF9maWxlKiBmaWxlKQor eworICBvZmZfdCBmaWxlc2l6ZSA9IGZpbGUtPmZpbGVzaXplKCk7CisgIGlu dCB3YW50ID0gZWxmY3BwOjpFbGZfcmVjb2duaXplcjo6bWF4X2hlYWRlcl9z aXplOworICBpZiAoZmlsZXNpemUgPCB3YW50KQorICAgIHdhbnQgPSBmaWxl c2l6ZTsKKworICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwID0gZmlsZS0+Z2V0 X2lucHV0X3ZpZXcoMCwgd2FudCk7CisgIGlmICghZWxmY3BwOjpFbGZfcmVj b2duaXplcjo6aXNfZWxmX2ZpbGUocCwgd2FudCkpCisgICAgeworICAgICAg ZXhwbGFpbl9ub19pbmNyZW1lbnRhbChfKCJvdXRwdXQgaXMgbm90IGFuIEVM RiBmaWxlLiIpKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBp bnQgc2l6ZTsKKyAgYm9vbCBiaWdfZW5kaWFuOworICBzdGQ6OnN0cmluZyBl cnJvcjsKKyAgaWYgKCFlbGZjcHA6OkVsZl9yZWNvZ25pemVyOjppc192YWxp ZF9oZWFkZXIocCwgd2FudCwgJnNpemUsICZiaWdfZW5kaWFuLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJy b3IpKQorICAgIHsKKyAgICAgIGV4cGxhaW5fbm9faW5jcmVtZW50YWwoZXJy b3IuY19zdHIoKSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAg SW5jcmVtZW50YWxfYmluYXJ5KiByZXN1bHQgPSBOVUxMOworICBpZiAoc2l6 ZSA9PSAzMikKKyAgICB7CisgICAgICBpZiAoYmlnX2VuZGlhbikKKyAgICAg ICAgeworI2lmZGVmIEhBVkVfVEFSR0VUXzMyX0JJRworICAgICAgICAgIHJl c3VsdCA9IG1ha2Vfc2l6ZWRfaW5jcmVtZW50YWxfYmluYXJ5PDMyLCB0cnVl PigKKyAgICAgICAgICAgICAgZmlsZSwgZWxmY3BwOjpFaGRyPDMyLCB0cnVl PihwKSk7CisjZWxzZQorICAgICAgICAgIGV4cGxhaW5fbm9faW5jcmVtZW50 YWwoXygidW5zdXBwb3J0ZWQgZmlsZTogMzItYml0LCBiaWctZW5kaWFuIikp OworI2VuZGlmCisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgewor I2lmZGVmIEhBVkVfVEFSR0VUXzMyX0xJVFRMRQorICAgICAgICAgIHJlc3Vs dCA9IG1ha2Vfc2l6ZWRfaW5jcmVtZW50YWxfYmluYXJ5PDMyLCBmYWxzZT4o CisgICAgICAgICAgICAgIGZpbGUsIGVsZmNwcDo6RWhkcjwzMiwgZmFsc2U+ KHApKTsKKyNlbHNlCisgICAgICAgICAgZXhwbGFpbl9ub19pbmNyZW1lbnRh bChfKCJ1bnN1cHBvcnRlZCBmaWxlOiAzMi1iaXQsIGxpdHRsZS1lbmRpYW4i KSk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoc2l6 ZSA9PSA2NCkKKyAgICB7CisgICAgICBpZiAoYmlnX2VuZGlhbikKKyAgICAg ICAgeworI2lmZGVmIEhBVkVfVEFSR0VUXzY0X0JJRworICAgICAgICAgIHJl c3VsdCA9IG1ha2Vfc2l6ZWRfaW5jcmVtZW50YWxfYmluYXJ5PDY0LCB0cnVl PigKKyAgICAgICAgICAgICAgZmlsZSwgZWxmY3BwOjpFaGRyPDY0LCB0cnVl PihwKSk7CisjZWxzZQorICAgICAgICAgIGV4cGxhaW5fbm9faW5jcmVtZW50 YWwoXygidW5zdXBwb3J0ZWQgZmlsZTogNjQtYml0LCBiaWctZW5kaWFuIikp OworI2VuZGlmCisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgewor I2lmZGVmIEhBVkVfVEFSR0VUXzY0X0xJVFRMRQorICAgICAgICAgIHJlc3Vs dCA9IG1ha2Vfc2l6ZWRfaW5jcmVtZW50YWxfYmluYXJ5PDY0LCBmYWxzZT4o CisgICAgICAgICAgICAgIGZpbGUsIGVsZmNwcDo6RWhkcjw2NCwgZmFsc2U+ KHApKTsKKyNlbHNlCisgICAgICAgICAgZXhwbGFpbl9ub19pbmNyZW1lbnRh bChfKCJ1bnN1cHBvcnRlZCBmaWxlOiA2NC1iaXQsIGxpdHRsZS1lbmRpYW4i KSk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIGdv bGRfdW5yZWFjaGFibGUoKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCiAv LyBBbmFseXplcyB0aGUgb3V0cHV0IGZpbGUgdG8gY2hlY2sgaWYgaW5jcmVt ZW50YWwgbGlua2luZyBpcyBwb3NzaWJsZSBhbmQKIC8vICh0byBiZSBkb25l KSB3aGF0IGZpbGVzIG5lZWQgdG8gYmUgcmVsaW5rZWQuCiAKQEAgLTE1OSw2 ICszMTgsMTUgQEAgSW5jcmVtZW50YWxfY2hlY2tlcjo6Y2FuX2luY3JlbWVu dGFsbHlfbGlua19vdXRwdXRfZmlsZSgpCiAgIE91dHB1dF9maWxlIG91dHB1 dCh0aGlzLT5vdXRwdXRfbmFtZV8pOwogICBpZiAoIW91dHB1dC5vcGVuX2Zv cl9tb2RpZmljYXRpb24oKSkKICAgICByZXR1cm4gZmFsc2U7CisgIHN0ZDo6 YXV0b19wdHI8SW5jcmVtZW50YWxfYmluYXJ5PiBiaW5hcnkob3Blbl9pbmNy ZW1lbnRhbF9iaW5hcnkoJm91dHB1dCkpOworICBpZiAoYmluYXJ5LmdldCgp ID09IE5VTEwpCisgICAgcmV0dXJuIGZhbHNlOworICBJbmNyZW1lbnRhbF9i aW5hcnk6OkxvY2F0aW9uIGlucHV0c19sb2NhdGlvbjsKKyAgaWYgKCFiaW5h cnktPmZpbmRfaW5jcmVtZW50YWxfaW5wdXRzX3NlY3Rpb24oJmlucHV0c19s b2NhdGlvbikpCisgICAgeworICAgICAgZXhwbGFpbl9ub19pbmNyZW1lbnRh bCgibm8gaW5jcmVtZW50YWwgZGF0YSBmcm9tIHByZXZpb3VzIGJ1aWxkIik7 CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICByZXR1cm4gdHJ1ZTsK IH0KIApAQCAtMzkyLDQgKzU2MCwyNiBAQCBJbmNyZW1lbnRhbF9pbnB1dHM6 OnNpemVkX2NyZWF0ZV9pbnB1dHNfc2VjdGlvbl9kYXRhKCkKIAkJCQkgICAg ICAiKiogaW5jcmVtZW50YWwgbGluayBpbnB1dHMgbGlzdCIpOwogfQogCisv LyBJbnN0YW50aWF0ZSB0aGUgdGVtcGxhdGVzIHdlIG5lZWQuCisKKyNpZmRl ZiBIQVZFX1RBUkdFVF8zMl9MSVRUTEUKK3RlbXBsYXRlCitjbGFzcyBTaXpl ZF9pbmNyZW1lbnRhbF9iaW5hcnk8MzIsIGZhbHNlPjsKKyNlbmRpZgorCisj aWZkZWYgSEFWRV9UQVJHRVRfMzJfQklHCit0ZW1wbGF0ZQorY2xhc3MgU2l6 ZWRfaW5jcmVtZW50YWxfYmluYXJ5PDMyLCB0cnVlPjsKKyNlbmRpZgorCisj aWZkZWYgSEFWRV9UQVJHRVRfNjRfTElUVExFCit0ZW1wbGF0ZQorY2xhc3Mg U2l6ZWRfaW5jcmVtZW50YWxfYmluYXJ5PDY0LCBmYWxzZT47CisjZW5kaWYK KworI2lmZGVmIEhBVkVfVEFSR0VUXzY0X0JJRwordGVtcGxhdGUKK2NsYXNz IFNpemVkX2luY3JlbWVudGFsX2JpbmFyeTw2NCwgdHJ1ZT47CisjZW5kaWYK KwogfSAvLyBFbmQgbmFtZXNwYWNlIGdvbGQuCmRpZmYgLS1naXQgYS9nb2xk L2luY3JlbWVudGFsLmggYi9nb2xkL2luY3JlbWVudGFsLmgKaW5kZXggOTY1 MDk5My4uODkwOTMyNCAxMDA2NDQKLS0tIGEvZ29sZC9pbmNyZW1lbnRhbC5o CisrKyBiL2dvbGQvaW5jcmVtZW50YWwuaApAQCAtMjYsOSArMjYsMTEgQEAK ICNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVk ZSAiZWxmY3BwX2ZpbGUuaCIKICNpbmNsdWRlICJzdHJpbmdwb29sLmgiCiAj aW5jbHVkZSAid29ya3F1ZXVlLmgiCiAjaW5jbHVkZSAiZmlsZXJlYWQuaCIK KyNpbmNsdWRlICJvdXRwdXQuaCIKIAogbmFtZXNwYWNlIGdvbGQKIHsKQEAg LTUwLDYgKzUyLDExNyBAQCBlbnVtIEluY3JlbWVudGFsX2lucHV0X3R5cGUK ICAgSU5DUkVNRU5UQUxfSU5QVVRfU0NSSVBUID0gNAogfTsKIAorLy8gQW4g b2JqZWN0IHJlcHJlc2VudGluZyB0aGUgRUxGIGZpbGUgd2UgZWRpdCBkdXJp bmcgYW4gaW5jcmVtZW50YWwgYnVpbGQuCisvLyBTaW1pbGFyIHRvIE9iamVj dCBvciBEeW5vYmosIGJ1dCBvcGVyYXRlcyBvbiBPdXRwdXRfZmlsZSBhbmQg Y29udGFpbnMKKy8vIG1ldGhvZCBzcGVjaWZpYyB0byBmaWxlIGVkaXRpb24g KFRCRCkuIFRoaXMgaXMgdGhlIGFic3RyYWN0IHBhcmVudCBjbGFzcworLy8g aW1wbGVtZW50ZWQgaW4gU2l6ZWRfaW5jcmVtZW50YWxfYmluYXJ5PHNpemUs IGJpZ19lbmRpYW4+IGZvciBhIHNwZWNpZmljCisvLyBlbmRpYW5uZXNzIGFu ZCBzaXplLgorCitjbGFzcyBJbmNyZW1lbnRhbF9iaW5hcnkKK3sKKyBwdWJs aWM6CisgIEluY3JlbWVudGFsX2JpbmFyeShPdXRwdXRfZmlsZSogb3V0cHV0 LCBUYXJnZXQqIHRhcmdldCkKKyAgICA6IG91dHB1dF8ob3V0cHV0KSwgdGFy Z2V0Xyh0YXJnZXQpCisgIHsgfQorCisgIHZpcnR1YWwKKyAgfkluY3JlbWVu dGFsX2JpbmFyeSgpCisgIHsgfQorCisgIC8vIEZ1bmN0aW9ucyBhbmQgdHlw ZXMgZm9yIHRoZSBlbGZjcHA6OkVsZl9maWxlIGludGVyZmFjZS4gIFRoaXMK KyAgLy8gcGVybWl0IHVzIHRvIHVzZSBJbmNyZW1lbnRhbF9iaW5hcnkgYXMg dGhlIEZpbGUgdGVtcGxhdGUgcGFyYW1ldGVyIGZvcgorICAvLyBlbGZjcHA6 OkVsZl9maWxlLgorCisgIC8vIFRoZSBWaWV3IGNsYXNzIGlzIHJldHVybmVk IGJ5IHZpZXcuICBJdCBtdXN0IHN1cHBvcnQgYSBzaW5nbGUKKyAgLy8gbWV0 aG9kLCBkYXRhKCkuICBUaGlzIGlzIHRyaXZpYWwsIGJlY2F1c2UgT3V0cHV0 X2ZpbGU6OmdldF9vdXRwdXRfdmlldworICAvLyBkb2VzIHdoYXQgd2UgbmVl ZC4KKyAgY2xhc3MgVmlldworICB7CisgICBwdWJsaWM6CisgICAgVmlldyhj b25zdCB1bnNpZ25lZCBjaGFyKiBwKQorICAgICAgOiBwXyhwKQorICAgIHsg fQorCisgICAgY29uc3QgdW5zaWduZWQgY2hhcioKKyAgICBkYXRhKCkgY29u c3QKKyAgICB7IHJldHVybiB0aGlzLT5wXzsgfQorCisgICBwcml2YXRlOgor ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHBfOworICB9OworCisgIC8vIFJl dHVybiBhIFZpZXcuCisgIFZpZXcKKyAgdmlldyhvZmZfdCBmaWxlX29mZnNl dCwgc2VjdGlvbl9zaXplX3R5cGUgZGF0YV9zaXplKQorICB7IHJldHVybiBW aWV3KHRoaXMtPm91dHB1dF8tPmdldF9pbnB1dF92aWV3KGZpbGVfb2Zmc2V0 LCBkYXRhX3NpemUpKTsgfQorCisgIC8vIEEgbG9jYXRpb24gaW4gdGhlIGZp bGUuCisgIHN0cnVjdCBMb2NhdGlvbgorICB7CisgICAgb2ZmX3QgZmlsZV9v ZmZzZXQ7CisgICAgb2ZmX3QgZGF0YV9zaXplOworCisgICAgTG9jYXRpb24o b2ZmX3QgZm8sIHNlY3Rpb25fc2l6ZV90eXBlIGRzKQorICAgICAgOiBmaWxl X29mZnNldChmbyksIGRhdGFfc2l6ZShkcykKKyAgICB7IH0KKworICAgIExv Y2F0aW9uKCkKKyAgICAgIDogZmlsZV9vZmZzZXQoMCksIGRhdGFfc2l6ZSgw KQorICAgIHsgfQorICB9OworCisgIC8vIEdldCBhIFZpZXcgZ2l2ZW4gYSBM b2NhdGlvbi4KKyAgVmlldyB2aWV3KExvY2F0aW9uIGxvYykKKyAgeyByZXR1 cm4gVmlldyh0aGlzLT52aWV3KGxvYy5maWxlX29mZnNldCwgbG9jLmRhdGFf c2l6ZSkpOyB9CisKKyAgLy8gUmVwb3J0IGFuIGVycm9yLgorICB2b2lkCisg IGVycm9yKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBjb25zdCBBVFRSSUJV VEVfUFJJTlRGXzI7CisKKworICAvLyBGaW5kIHRoZSAuZ251X2luY3JlbWVu dGFsX2lucHV0cyBzZWN0aW9uLiAgSXQgc2VsZWN0cyB0aGUgZmlyc3Qgc2Vj dGlvbgorICAvLyBvZiB0eXBlIFNIVF9HTlVfSU5DUkVNRU5UQUxfSU5QVVRT LiAgUmV0dXJucyBmYWxzZSBpZiBzdWNoIGEgc2VjdGlvbgorICAvLyBpcyBu b3QgZm91bmQuCisgIGJvb2wKKyAgZmluZF9pbmNyZW1lbnRhbF9pbnB1dHNf c2VjdGlvbihMb2NhdGlvbiogbG9jYXRpb24pCisgIHsgcmV0dXJuIGRvX2Zp bmRfaW5jcmVtZW50YWxfaW5wdXRzX3NlY3Rpb24obG9jYXRpb24pOyB9CisK KyBwcm90ZWN0ZWQ6CisgIC8vIEZpbmQgaW5jcmVtZW50YWwgaW5wdXRzIHNl Y3Rpb24uCisgIHZpcnR1YWwgYm9vbAorICBkb19maW5kX2luY3JlbWVudGFs X2lucHV0c19zZWN0aW9uKExvY2F0aW9uKiBsb2NhdGlvbikgPSAwOworCisg cHJpdmF0ZToKKyAgLy8gRWRpdGVkIG91dHB1dCBmaWxlIG9iamVjdC4KKyAg T3V0cHV0X2ZpbGUqIG91dHB1dF87CisgIC8vIFRhcmdldCBvZiB0aGUgb3V0 cHV0IGZpbGUuCisgIFRhcmdldCogdGFyZ2V0XzsKK307CisKK3RlbXBsYXRl PGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+CitjbGFzcyBTaXplZF9pbmNy ZW1lbnRhbF9iaW5hcnkgOiBwdWJsaWMgSW5jcmVtZW50YWxfYmluYXJ5Cit7 CisgcHVibGljOgorICBTaXplZF9pbmNyZW1lbnRhbF9iaW5hcnkoT3V0cHV0 X2ZpbGUqIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGVsZmNwcDo6RWhkcjxzaXplLCBiaWdfZW5kaWFuPiYgZWhkciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCogdGFyZ2V0KQorICAg IDogSW5jcmVtZW50YWxfYmluYXJ5KG91dHB1dCwgdGFyZ2V0KSwgZWxmX2Zp bGVfKHRoaXMsIGVoZHIpCisgIHsgfQorCisgcHJvdGVjdGVkOgorICB2aXJ0 dWFsIGJvb2wKKyAgZG9fZmluZF9pbmNyZW1lbnRhbF9pbnB1dHNfc2VjdGlv bihMb2NhdGlvbiogbG9jYXRpb24pOworCisgcHJpdmF0ZToKKyAgLy8gT3V0 cHV0IGFzIGFuIEVMRiBmaWxlLgorICBlbGZjcHA6OkVsZl9maWxlPHNpemUs IGJpZ19lbmRpYW4sIEluY3JlbWVudGFsX2JpbmFyeT4gZWxmX2ZpbGVfOwor fTsKKworLy8gQ3JlYXRlIGFuIEluY3JlbWVudGFsX2JpbmFyeSBvYmplY3Qg Zm9yIEZJTEUuIFJldHVybnMgTlVMTCBpcyB0aGlzIGlzIG5vdAorLy8gcG9z c2libGUsIGUuZy4gRklMRSBpcyBub3QgYW4gRUxGIGZpbGUgb3IgaGFzIGFu IHVuc3VwcG9ydGVkIHRhcmdldC4KK0luY3JlbWVudGFsX2JpbmFyeSoKK29w ZW5faW5jcmVtZW50YWxfYmluYXJ5KE91dHB1dF9maWxlKiBmaWxlKTsKKwog Ly8gQ29kZSBpbnZva2VkIGVhcmx5IGR1cmluZyBhbiBpbmNyZW1lbnRhbCBs aW5rIHRoYXQgY2hlY2tzIHdoYXQgZmlsZXMgbmVlZAogLy8gdG8gYmUgcmVs aW5rZWQuCiBjbGFzcyBJbmNyZW1lbnRhbF9jaGVja2VyCmRpZmYgLS1naXQg YS9nb2xkL29iamVjdC5jYyBiL2dvbGQvb2JqZWN0LmNjCmluZGV4IGJlNjI5 NGMuLjE0MWZhMjMgMTAwNjQ0Ci0tLSBhL2dvbGQvb2JqZWN0LmNjCisrKyBi L2dvbGQvb2JqZWN0LmNjCkBAIC0yMjQzLDcgKzIyNDMsNyBAQCBpc19lbGZf b2JqZWN0KElucHV0X2ZpbGUqIGlucHV0X2ZpbGUsIG9mZl90IG9mZnNldCwK IAkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiogc3RhcnQsIGludCAqcmVh ZF9zaXplKQogewogICBvZmZfdCBmaWxlc2l6ZSA9IGlucHV0X2ZpbGUtPmZp bGUoKS5maWxlc2l6ZSgpOwotICBpbnQgd2FudCA9IGVsZmNwcDo6RWxmX3Np emVzPDY0Pjo6ZWhkcl9zaXplOworICBpbnQgd2FudCA9IGVsZmNwcDo6RWxm X3JlY29nbml6ZXI6Om1heF9oZWFkZXJfc2l6ZTsKICAgaWYgKGZpbGVzaXpl IC0gb2Zmc2V0IDwgd2FudCkKICAgICB3YW50ID0gZmlsZXNpemUgLSBvZmZz ZXQ7CiAKQEAgLTIyNTIsMTUgKzIyNTIsNyBAQCBpc19lbGZfb2JqZWN0KElu cHV0X2ZpbGUqIGlucHV0X2ZpbGUsIG9mZl90IG9mZnNldCwKICAgKnN0YXJ0 ID0gcDsKICAgKnJlYWRfc2l6ZSA9IHdhbnQ7CiAKLSAgaWYgKHdhbnQgPCA0 KQotICAgIHJldHVybiBmYWxzZTsKLQotICBzdGF0aWMgdW5zaWduZWQgY2hh ciBlbGZtYWdpY1s0XSA9Ci0gICAgewotICAgICAgZWxmY3BwOjpFTEZNQUcw LCBlbGZjcHA6OkVMRk1BRzEsCi0gICAgICBlbGZjcHA6OkVMRk1BRzIsIGVs ZmNwcDo6RUxGTUFHMwotICAgIH07Ci0gIHJldHVybiBtZW1jbXAocCwgZWxm bWFnaWMsIDQpID09IDA7CisgIHJldHVybiBlbGZjcHA6OkVsZl9yZWNvZ25p emVyOjppc19lbGZfZmlsZShwLCB3YW50KTsKIH0KIAogLy8gUmVhZCBhbiBF TEYgZmlsZSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBpbnN0YW5jZSBv ZiBPYmplY3QuCkBAIC0yMjczLDU3ICsyMjY1LDE4IEBAIG1ha2VfZWxmX29i amVjdChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgSW5wdXRfZmlsZSogaW5w dXRfZmlsZSwgb2ZmX3Qgb2Zmc2V0LAogICBpZiAocHVuY29uZmlndXJlZCAh PSBOVUxMKQogICAgICpwdW5jb25maWd1cmVkID0gZmFsc2U7CiAKLSAgaWYg KGJ5dGVzIDwgZWxmY3BwOjpFSV9OSURFTlQpCi0gICAgewotICAgICAgZ29s ZF9lcnJvcihfKCIlczogRUxGIGZpbGUgdG9vIHNob3J0IiksIG5hbWUuY19z dHIoKSk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgaW50IHYg PSBwW2VsZmNwcDo6RUlfVkVSU0lPTl07Ci0gIGlmICh2ICE9IGVsZmNwcDo6 RVZfQ1VSUkVOVCkKLSAgICB7Ci0gICAgICBpZiAodiA9PSBlbGZjcHA6OkVW X05PTkUpCi0JZ29sZF9lcnJvcihfKCIlczogaW52YWxpZCBFTEYgdmVyc2lv biAwIiksIG5hbWUuY19zdHIoKSk7Ci0gICAgICBlbHNlCi0JZ29sZF9lcnJv cihfKCIlczogdW5zdXBwb3J0ZWQgRUxGIHZlcnNpb24gJWQiKSwgbmFtZS5j X3N0cigpLCB2KTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICBp bnQgYyA9IHBbZWxmY3BwOjpFSV9DTEFTU107Ci0gIGlmIChjID09IGVsZmNw cDo6RUxGQ0xBU1NOT05FKQorICBzdGQ6OnN0cmluZyBlcnJvcjsKKyAgYm9v bCBiaWdfZW5kaWFuOworICBpbnQgYml0bmVzczsKKyAgaWYgKCFlbGZjcHA6 OkVsZl9yZWNvZ25pemVyOjppc192YWxpZF9oZWFkZXIocCwgYnl0ZXMsICZi aXRuZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmYmlnX2VuZGlhbiwgJmVycm9yKSkKICAgICB7Ci0gICAg ICBnb2xkX2Vycm9yKF8oIiVzOiBpbnZhbGlkIEVMRiBjbGFzcyAwIiksIG5h bWUuY19zdHIoKSk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gIGVs c2UgaWYgKGMgIT0gZWxmY3BwOjpFTEZDTEFTUzMyCi0JICAgJiYgYyAhPSBl bGZjcHA6OkVMRkNMQVNTNjQpCi0gICAgewotICAgICAgZ29sZF9lcnJvcihf KCIlczogdW5zdXBwb3J0ZWQgRUxGIGNsYXNzICVkIiksIG5hbWUuY19zdHIo KSwgYyk7CisgICAgICBnb2xkX2Vycm9yKF8oIiVzOiAlcyIpLCBuYW1lLmNf c3RyKCksIGVycm9yLmNfc3RyKCkpOwogICAgICAgcmV0dXJuIE5VTEw7CiAg ICAgfQogCi0gIGludCBkID0gcFtlbGZjcHA6OkVJX0RBVEFdOwotICBpZiAo ZCA9PSBlbGZjcHA6OkVMRkRBVEFOT05FKQorICBpZiAoYml0bmVzcyA9PSAz MikKICAgICB7Ci0gICAgICBnb2xkX2Vycm9yKF8oIiVzOiBpbnZhbGlkIEVM RiBkYXRhIGVuY29kaW5nIiksIG5hbWUuY19zdHIoKSk7Ci0gICAgICByZXR1 cm4gTlVMTDsKLSAgICB9Ci0gIGVsc2UgaWYgKGQgIT0gZWxmY3BwOjpFTEZE QVRBMkxTQgotCSAgICYmIGQgIT0gZWxmY3BwOjpFTEZEQVRBMk1TQikKLSAg ICB7Ci0gICAgICBnb2xkX2Vycm9yKF8oIiVzOiB1bnN1cHBvcnRlZCBFTEYg ZGF0YSBlbmNvZGluZyAlZCIpLCBuYW1lLmNfc3RyKCksIGQpOwotICAgICAg cmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gIGJvb2wgYmlnX2VuZGlhbiA9IGQg PT0gZWxmY3BwOjpFTEZEQVRBMk1TQjsKLQotICBpZiAoYyA9PSBlbGZjcHA6 OkVMRkNMQVNTMzIpCi0gICAgewotICAgICAgaWYgKGJ5dGVzIDwgZWxmY3Bw OjpFbGZfc2l6ZXM8MzI+OjplaGRyX3NpemUpCi0JewotCSAgZ29sZF9lcnJv cihfKCIlczogRUxGIGZpbGUgdG9vIHNob3J0IiksIG5hbWUuY19zdHIoKSk7 Ci0JICByZXR1cm4gTlVMTDsKLQl9CiAgICAgICBpZiAoYmlnX2VuZGlhbikK IAl7CiAjaWZkZWYgSEFWRV9UQVJHRVRfMzJfQklHCkBAIC0yMzU3LDEzICsy MzEwLDggQEAgbWFrZV9lbGZfb2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBu YW1lLCBJbnB1dF9maWxlKiBpbnB1dF9maWxlLCBvZmZfdCBvZmZzZXQsCiAj ZW5kaWYKIAl9CiAgICAgfQotICBlbHNlCisgIGVsc2UgaWYgKGJpdG5lc3Mg PT0gNjQpCiAgICAgewotICAgICAgaWYgKGJ5dGVzIDwgZWxmY3BwOjpFbGZf c2l6ZXM8NjQ+OjplaGRyX3NpemUpCi0JewotCSAgZ29sZF9lcnJvcihfKCIl czogRUxGIGZpbGUgdG9vIHNob3J0IiksIG5hbWUuY19zdHIoKSk7Ci0JICBy ZXR1cm4gTlVMTDsKLQl9CiAgICAgICBpZiAoYmlnX2VuZGlhbikKIAl7CiAj aWZkZWYgSEFWRV9UQVJHRVRfNjRfQklHCkBAIC0yMzk3LDYgKzIzNDUsOCBA QCBtYWtlX2VsZl9vYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIElu cHV0X2ZpbGUqIGlucHV0X2ZpbGUsIG9mZl90IG9mZnNldCwKICNlbmRpZgog CX0KICAgICB9CisgIGVsc2UKKyAgICBnb2xkX3VucmVhY2hhYmxlKCk7CiB9 CiAKIC8vIEluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZXMgd2UgbmVlZC4KZGlm ZiAtLWdpdCBhL2dvbGQvb3V0cHV0LmggYi9nb2xkL291dHB1dC5oCmluZGV4 IDdiZDBjZjMuLjEwNDI5ZGYgMTAwNjQ0Ci0tLSBhL2dvbGQvb3V0cHV0LmgK KysrIGIvZ29sZC9vdXRwdXQuaApAQCAtMzExNCw2ICszMTE0LDExIEBAIGNs YXNzIE91dHB1dF9maWxlCiAgIHZvaWQKICAgY2xvc2UoKTsKIAorICAvLyBS ZXR1cm4gdGhlIHNpemUgb2YgdGhpcyBmaWxlLgorICBvZmZfdAorICBmaWxl c2l6ZSgpCisgIHsgcmV0dXJuIHRoaXMtPmZpbGVfc2l6ZV87IH0KKwogICAv LyBXZSBjdXJyZW50bHkgYWx3YXlzIHVzZSBtbWFwIHdoaWNoIG1ha2VzIHRo ZSB2aWV3IGhhbmRsaW5nIHF1aXRlCiAgIC8vIHNpbXBsZS4gIEluIHRoZSBm dXR1cmUgd2UgbWF5IHN1cHBvcnQgb3RoZXIgYXBwcm9hY2hlcy4KIAotLSAK MS40LjQuMgoK --0016e659f402eba4f6047350994c--