From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id C8A383854172 for ; Thu, 20 Oct 2022 00:38:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C8A383854172 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1666226284; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=u2a0Xj3GKeImVsxCKB8svIctKzw6TQqIRxAmi1Lt4HU=; b=L8m8CTiZEIwt51y8GqUMzdM0QdH/ehQDAK7NqeiyWOcKzu1YWehkD6e9MVu+YJof/zzfil F2a11XPafPC02DhV+Z6mOGHYELcWAyKgdtnuPML9eaVmtP5JamZdh3POLj5MlSgE2R5Op8 4kiynqTTEfNXpKc7xG1zxI99V0TNBlk= Received: from mail-io1-f72.google.com (mail-io1-f72.google.com [209.85.166.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-53-_xSscnmFND2x9JHSfSqB-Q-1; Wed, 19 Oct 2022 20:38:02 -0400 X-MC-Unique: _xSscnmFND2x9JHSfSqB-Q-1 Received: by mail-io1-f72.google.com with SMTP id b12-20020a5d804c000000b006b723722d4eso14900764ior.17 for ; Wed, 19 Oct 2022 17:38:02 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=f07HYnbUQF2c8ApOZJdxB2FKKoE3pi4V90KOxX0/aP0=; b=fklrml3d++l4zcXcoWEOd8Yc4nITF9BzcJALIQq5hIoZbVHYH70+EBE7JLNJ0a2Z8o Uuyav4LFeyWdcUrstiensuR2Pf7AjrckI5NQaK67D7J/UFr4/aqrgrgDoSE5Bdf9utTI nvw58XUTmcCLKeDtz++War7McXyWdOp2GKLVgzWev0O5j1+V5nSMsXCFGqmFu/wrty/1 4rrnbQtqjfjbQHlgabw94jLN1Kthon6yoIQLOFdgAVh/PifMcqR0Bi2wexBJlrlI9Wk9 KW+2Dq2Zcx7vQnP1j3z93FkgEibUZW35b5W0r9/6bBJtH9DY+E3QEUQ6G5CPOVCuIvm9 GCJA== X-Gm-Message-State: ACrzQf1uwz3kcDqmHmodgVgpdwelKF20mYCaSp6iWV0qeNk/VY1L/O32 oguiDTy+tFZvqbWw+XWjqJjCmTbkIRh4rAP+zZWG2pRMZ8VezBnZRCNkCYz5kvdmZulNTVmxmPU Bl1Jm/i2YQz5zPGQDS9NwDzfW7B2d5bEOQayZle9lwn2HfPydKDCbWfHzqzTzoZKboV0A/Q== X-Received: by 2002:a92:ca0c:0:b0:2f9:204:7a0d with SMTP id j12-20020a92ca0c000000b002f902047a0dmr8475672ils.194.1666226280692; Wed, 19 Oct 2022 17:38:00 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4gE3sj0nSSSv7E2uNKBAqbybLL7IJg5ZUl80ertJ25UrGb4OvOp0XdgXyHsvvDobjt+qjP7Q== X-Received: by 2002:a92:ca0c:0:b0:2f9:204:7a0d with SMTP id j12-20020a92ca0c000000b002f902047a0dmr8475650ils.194.1666226280356; Wed, 19 Oct 2022 17:38:00 -0700 (PDT) Received: from ?IPV6:2607:fea8:a263:f600::3c4d? ([2607:fea8:a263:f600::3c4d]) by smtp.gmail.com with ESMTPSA id v13-20020a92c6cd000000b002f8e98869d2sm2529633ilm.43.2022.10.19.17.37.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 19 Oct 2022 17:37:59 -0700 (PDT) Message-ID: <8601499b-9b56-5ecd-4838-b9fbd120b043@redhat.com> Date: Wed, 19 Oct 2022 20:37:57 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1 To: gcc-patches Cc: "hernandez, aldy" , Jakub Jelinek , Jan Hubicka , Richard Biener From: Andrew MacLeod Subject: [COMMITTED] PR c++/106654 - Add assume support to VRP. X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------IvUFyEO0oQFX2Yh0EtTc0n3m" Content-Language: en-US X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------IvUFyEO0oQFX2Yh0EtTc0n3m Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit This patch adds basic support for ASSUME functions to VRP. Based on the previous set of patches, Ive cleaned them up, and this provides the basic support from rangers generalized model. It does not support non-ssa name parameters, I think you might be on your own for that. I modified Jakubs assumption pass to use GORI to query parameter rangers in assumption functions and set the global range for those, and then ranger's infer infrastructure is used to inject these rangers at assume call locations in VRP. I also added an optimization testcase that tests the basic functionality in VRP2.  For instance it can reduce: int f2 (int x, int y, int z) {   [[assume (x+12 == 14 && y >= 0 && y + 10 < 13 && z + 4 >= 4 && z - 2 < 18)]];   unsigned q = x + y + z;   if (q*2 > 46)     return 0;   return 1; } to: return 1; Its good to get us going, bt I think theres still lots of room for improvement. Bootstraps on x86_64-pc-linux-gnu with no regressions.  Pushed. Andrew --------------IvUFyEO0oQFX2Yh0EtTc0n3m Content-Type: text/x-patch; charset=UTF-8; name="0001-Add-assume-support-to-VRP.patch" Content-Disposition: attachment; filename="0001-Add-assume-support-to-VRP.patch" Content-Transfer-Encoding: base64 RnJvbSA1M2U2ZDdhMzEwMjQwOWYwZjJhNWE5ZmZiZmJlYWE2MmMxMzVkOTkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgTWFjTGVvZCA8YW1hY2xlb2RAcmVkaGF0LmNvbT4K RGF0ZTogVHVlLCAxOCBPY3QgMjAyMiAxNjoyOTo0OSAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIEFk ZCBhc3N1bWUgc3VwcG9ydCB0byBWUlAuCgpUaGlzIHByb3ZpZGVzIGFuIGFzc3VtZV9xdWVyeSBj bGFzcyB1c2luZyByYW5nZXJzIEdPUkkgbW9kdWxlIHRvCmRldGVybWluZSB3aGF0IHJhbmdlcyB3 b3VsZCBiZSBhcHBsaWVkIHRvIGFueSBTU0EgTkFNRVMgaW4gdGhlIGZ1bmN0aW9uCmlmIHRoZSBy ZXR1cm4gdmFsdWUgd2VyZSBbMSwgMV0uICBBbnkgcGFyYW1ldGVyIHJhbmdlcyBhcmUgc3RvcmVk IGluCnRoZSBTU0FfTkFNRV9SQU5HRV9JTkZPIGZpZWxkLCBhbmQgcmFuZ2VyJ3MgaW5mZXJyZWQg cmFuZ2UgbWFjaGluZXJ5IGlzCnRoZW4gdXNlZCB0byBsb29rIHRoZXNlIHVwIGFuZCBtYXRjaCB0 aGVtIHRvIGFzc3VtZSBjYWxsIHBhcmFtZXRlcmVzCmluIHRoZSBib2RpZXMgb2Ygb3RoZXIgZnVu Y3Rpb25zLi4KCiAgICAgICAgUFIgYysrLzEwNjY1NAoJZ2NjLwoJKiBnaW1wbGUtcmFuZ2UtZ29y aS5oIChjb21wdXRlX29wZXJhbmRfcmFuZ2UpOiBNYWtlIHB1YmxpYy4KCSogZ2ltcGxlLXJhbmdl LWluZmVyLmNjIChnaW1wbGVfaW5mZXJfcmFuZ2U6OmNoZWNrX2Fzc3VtZV9mdW5jKTogTmV3LgoJ KGdpbXBsZV9pbmZlcl9yYW5nZTo6Z2ltcGxlX2luZmVyX3JhbmdlKTogQ2hlY2sgZm9yIGFzc3Vt ZSBjYWxscy4KCSogZ2ltcGxlLXJhbmdlLWluZmVyLmggKGNoZWNrX2Fzc3VtZV9mdW5jKTogQWRk IHByb3RvdHlwZS4KCSogZ2ltcGxlLXJhbmdlLmNjIChhc3N1bWVfcXVlcnk6OmFzc3VtZV9yYW5n ZV9wKTogTmV3LgoJKGFzc3VtZV9xdWVyeTo6cmFuZ2Vfb2ZfZXhwcik6IE5ldy4KCShhc3N1bWVf cXVlcnk6OmFzc3VtZV9xdWVyeSk6IE5ldy4KCShhc3N1bWVfcXVlcnk6OmNhbGN1bGF0ZV9vcCk6 IE5ldy4KCShhc3N1bWVfcXVlcnk6OmNhbGN1bGF0ZV9waGkpOiBOZXcuCgkoYXNzdW1lX3F1ZXJ5 OjpjaGVja190YWtlbl9lZGdlKTogTmV3LgoJKGFzc3VtZV9xdWVyeTo6Y2FsY3VsYXRlX3N0bXQp OiBOZXcuCgkoYXNzdW1lX3F1ZXJ5OjpkdW1wKTogTmV3LgoJKiBnaW1wbGUtcmFuZ2UuaCAoY2xh c3MgYXNzdW1lX3F1ZXJ5KTogTmV3LgoJKiB0cmVlLXZycC5jYyAocGFzc19hc3N1bXB0aW9uczo6 ZXhlY3V0ZSk6IEFkZCBwcm9jZXNzaW5nLgoKCWdjYy90ZXN0c3VpdGUvCgkqIGcrKy5kZy9jcHAy My9hdHRyLWFzc3VtZS1vcHQuQzogTmV3LgotLS0KIGdjYy9naW1wbGUtcmFuZ2UtZ29yaS5oICAg ICAgICAgICAgICAgICAgICAgIHwgICA2ICstCiBnY2MvZ2ltcGxlLXJhbmdlLWluZmVyLmNjICAg ICAgICAgICAgICAgICAgICB8ICA1NCArKysrKysKIGdjYy9naW1wbGUtcmFuZ2UtaW5mZXIuaCAg ICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGdjYy9naW1wbGUtcmFuZ2UuY2MgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgMTkwICsrKysrKysrKysrKysrKysrKysKIGdjYy9naW1wbGUtcmFu Z2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE4ICsrCiBnY2MvdGVzdHN1aXRlL2cr Ky5kZy9jcHAyMy9hdHRyLWFzc3VtZS1vcHQuQyB8ICA0MiArKysrCiBnY2MvdHJlZS12cnAuY2Mg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzNCArKysrCiA3IGZpbGVzIGNoYW5nZWQs IDM0MiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2F0dHItYXNzdW1lLW9wdC5DCgpkaWZmIC0tZ2l0IGEv Z2NjL2dpbXBsZS1yYW5nZS1nb3JpLmggYi9nY2MvZ2ltcGxlLXJhbmdlLWdvcmkuaAppbmRleCBj N2EzMjE2MmExYi4uNmNjNTMzYjU4YjIgMTAwNjQ0Ci0tLSBhL2djYy9naW1wbGUtcmFuZ2UtZ29y aS5oCisrKyBiL2djYy9naW1wbGUtcmFuZ2UtZ29yaS5oCkBAIC0xNjUsMTUgKzE2NSwxNSBAQCBw dWJsaWM6CiAgIGJvb2wgaGFzX2VkZ2VfcmFuZ2VfcCAodHJlZSBuYW1lLCBiYXNpY19ibG9jayBi YiA9IE5VTEwpOwogICBib29sIGhhc19lZGdlX3JhbmdlX3AgKHRyZWUgbmFtZSwgZWRnZSBlKTsK ICAgdm9pZCBkdW1wIChGSUxFICpmKTsKKyAgYm9vbCBjb21wdXRlX29wZXJhbmRfcmFuZ2UgKHZy YW5nZSAmciwgZ2ltcGxlICpzdG10LCBjb25zdCB2cmFuZ2UgJmxocywKKwkJCSAgICAgIHRyZWUg bmFtZSwgY2xhc3MgZnVyX3NvdXJjZSAmc3JjLAorCQkJICAgICAgdmFsdWVfcmVsYXRpb24gKnJl bCA9IE5VTEwpOwogcHJpdmF0ZToKICAgYm9vbCByZWZpbmVfdXNpbmdfcmVsYXRpb24gKHRyZWUg b3AxLCB2cmFuZ2UgJm9wMV9yYW5nZSwKIAkJCSAgICAgIHRyZWUgb3AyLCB2cmFuZ2UgJm9wMl9y YW5nZSwKIAkJCSAgICAgIGZ1cl9zb3VyY2UgJnNyYywgcmVsYXRpb25fa2luZCBrKTsKICAgYm9v bCBtYXlfcmVjb21wdXRlX3AgKHRyZWUgbmFtZSwgZWRnZSBlKTsKICAgYm9vbCBtYXlfcmVjb21w dXRlX3AgKHRyZWUgbmFtZSwgYmFzaWNfYmxvY2sgYmIgPSBOVUxMKTsKLSAgYm9vbCBjb21wdXRl X29wZXJhbmRfcmFuZ2UgKHZyYW5nZSAmciwgZ2ltcGxlICpzdG10LCBjb25zdCB2cmFuZ2UgJmxo cywKLQkJCSAgICAgIHRyZWUgbmFtZSwgY2xhc3MgZnVyX3NvdXJjZSAmc3JjLAotCQkJICAgICAg dmFsdWVfcmVsYXRpb24gKnJlbCA9IE5VTEwpOwogICBib29sIGNvbXB1dGVfb3BlcmFuZF9yYW5n ZV9zd2l0Y2ggKHZyYW5nZSAmciwgZ3N3aXRjaCAqcywgY29uc3QgdnJhbmdlICZsaHMsCiAJCQkJ ICAgICB0cmVlIG5hbWUsIGZ1cl9zb3VyY2UgJnNyYyk7CiAgIGJvb2wgY29tcHV0ZV9vcGVyYW5k MV9yYW5nZSAodnJhbmdlICZyLCBnaW1wbGVfcmFuZ2Vfb3BfaGFuZGxlciAmaGFuZGxlciwKZGlm ZiAtLWdpdCBhL2djYy9naW1wbGUtcmFuZ2UtaW5mZXIuY2MgYi9nY2MvZ2ltcGxlLXJhbmdlLWlu ZmVyLmNjCmluZGV4IGYwZDY2ZDA0N2E2Li4wMTBiMzRhNmJkZSAxMDA2NDQKLS0tIGEvZ2NjL2dp bXBsZS1yYW5nZS1pbmZlci5jYworKysgYi9nY2MvZ2ltcGxlLXJhbmdlLWluZmVyLmNjCkBAIC0z NSw2ICszNSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBu b3Qgc2VlCiAjaW5jbHVkZSAiZ2ltcGxlLWl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiZ2ltcGxlLXdh bGsuaCIKICNpbmNsdWRlICJjZmdhbmFsLmgiCisjaW5jbHVkZSAidHJlZS1kZmEuaCIKIAogLy8g QWRhcHRlZCBmcm9tIGluZmVyX25vbm51bGxfcmFuZ2VfYnlfZGVyZWZlcmVuY2UgYW5kIGNoZWNr X2xvYWRzdG9yZQogLy8gdG8gcHJvY2VzcyBub25udWxsIHNzYV9uYW1lIE9QIGluIFMuICBEQVRB IGNvbnRhaW5zIGEgcG9pbnRlciB0byBhCkBAIC01Niw2ICs1Nyw1NCBAQCBub25fbnVsbF9sb2Fk c3RvcmUgKGdpbXBsZSAqLCB0cmVlIG9wLCB0cmVlLCB2b2lkICpkYXRhKQogICByZXR1cm4gZmFs c2U7CiB9CiAKKy8vIFByb2Nlc3MgYW4gQVNTVU1FIGNhbGwgdG8gc2VlIGlmIHRoZXJlIGFyZSBh bnkgaW5mZXJyZWQgcmFuZ2VzIGF2YWlsYWJsZS4KKwordm9pZAorZ2ltcGxlX2luZmVyX3Jhbmdl OjpjaGVja19hc3N1bWVfZnVuYyAoZ2NhbGwgKmNhbGwpCit7CisgIHRyZWUgYXJnOworICB1bnNp Z25lZCBpOworICB0cmVlIGFzc3VtZV9pZCA9IFRSRUVfT1BFUkFORCAoZ2ltcGxlX2NhbGxfYXJn IChjYWxsLCAwKSwgMCk7CisgIGlmICghYXNzdW1lX2lkKQorICAgIHJldHVybjsKKyAgc3RydWN0 IGZ1bmN0aW9uICpmdW4gPSBERUNMX1NUUlVDVF9GVU5DVElPTiAoYXNzdW1lX2lkKTsKKyAgaWYg KCFmdW4pCisgICAgcmV0dXJuOworICAvLyBMb29wIG92ZXIgYXJndW1lbnRzLCBtYXRjaGluZyB0 aGVtIHRvIHRoZSBhc3N1bWUgcGFyYW10ZXJzLgorICBmb3IgKGFyZyA9IERFQ0xfQVJHVU1FTlRT IChhc3N1bWVfaWQpLCBpID0gMTsKKyAgICAgICBhcmcgJiYgaSA8IGdpbXBsZV9jYWxsX251bV9h cmdzIChjYWxsKTsKKyAgICAgICBpKyssIGFyZyA9IERFQ0xfQ0hBSU4gKGFyZykpCisgICAgewor ICAgICAgdHJlZSBvcCA9IGdpbXBsZV9jYWxsX2FyZyAoY2FsbCwgaSk7CisgICAgICB0cmVlIHR5 cGUgPSBUUkVFX1RZUEUgKG9wKTsKKyAgICAgIGlmIChnaW1wbGVfcmFuZ2Vfc3NhX3AgKG9wKSAm JiBWYWx1ZV9SYW5nZTo6c3VwcG9ydHNfdHlwZV9wICh0eXBlKSkKKwl7CisJICB0cmVlIGRlZmF1 bHRfZGVmID0gc3NhX2RlZmF1bHRfZGVmIChmdW4sIGFyZyk7CisJICBpZiAoIWRlZmF1bHRfZGVm IHx8IHR5cGUgIT0gVFJFRV9UWVBFIChkZWZhdWx0X2RlZikpCisJICAgIGNvbnRpbnVlOworCSAg Ly8gUXVlcnkgdGhlIGdsb2JhbCByYW5nZSBvZiB0aGUgZGVmYXVsdCBkZWYgaW4gdGhlIGFzc3Vt ZSBmdW5jdGlvbi4KKwkgIFZhbHVlX1JhbmdlIGFzc3VtZV9yYW5nZSAodHlwZSk7CisJICBnbG9i YWxfcmFuZ2VzLnJhbmdlX29mX2V4cHIgKGFzc3VtZV9yYW5nZSwgZGVmYXVsdF9kZWYpOworCSAg Ly8gSWYgdGhlcmUgaXMgYSBub24tdmFyeWluZyByZXN1bHQsIGFkZCBpdCBhcyBhbiBpbmZlcnJl ZCByYW5nZS4KKwkgIGlmICghYXNzdW1lX3JhbmdlLnZhcnlpbmdfcCAoKSkKKwkgICAgeworCSAg ICAgIGFkZF9yYW5nZSAob3AsIGFzc3VtZV9yYW5nZSk7CisJICAgICAgaWYgKGR1bXBfZmlsZSkK KwkJeworCQkgIHByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCBhc3N1bWVfaWQsIFRERl9T TElNKTsKKwkJICBmcHJpbnRmIChkdW1wX2ZpbGUsICIgYXNzdW1lIGluZmVycmVkIHJhbmdlIG9m ICIpOworCQkgIHByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCBvcCwgVERGX1NMSU0pOwor CQkgIGZwcmludGYgKGR1bXBfZmlsZSwgIiAocGFyYW0gIik7CisJCSAgcHJpbnRfZ2VuZXJpY19l eHByIChkdW1wX2ZpbGUsIGFyZywgVERGX1NMSU0pOworCQkgIGZwcmludGYgKGR1bXBfZmlsZSwg IikgPSAiKTsKKwkJICBhc3N1bWVfcmFuZ2UuZHVtcCAoZHVtcF9maWxlKTsKKwkJICBmcHV0YyAo J1xuJywgZHVtcF9maWxlKTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKwogLy8gQWRkIE5B TUUgYW5kIFJBTkdFIHRvIHRoZSByYW5nZSBpbmZlcmVuY2Ugc3VtbWFyeS4KIAogdm9pZApAQCAt MTExLDYgKzE2MCwxMSBAQCBnaW1wbGVfaW5mZXJfcmFuZ2U6OmdpbXBsZV9pbmZlcl9yYW5nZSAo Z2ltcGxlICpzKQogICAgICAgLy8gRmFsbHRocnUgYW5kIHdhbGsgbG9hZC9zdG9yZSBvcHMgbm93 LgogICAgIH0KIAorICAvLyBDaGVjayBmb3IgaW5mZXJyZWQgcmFuZ2VzIGZyb20gQVNTVU1FIGNh bGxzLgorICBpZiAoaXNfYTxnY2FsbCAqPiAocykgJiYgZ2ltcGxlX2NhbGxfaW50ZXJuYWxfcCAo cykKKyAgICAgICYmIGdpbXBsZV9jYWxsX2ludGVybmFsX2ZuIChzKSA9PSBJRk5fQVNTVU1FKQor ICAgIGNoZWNrX2Fzc3VtZV9mdW5jIChhc19hPGdjYWxsICo+IChzKSk7CisKICAgLy8gTG9vayBm b3IgcG9zc2libGUgbm9uLW51bGwgdmFsdWVzLgogICBpZiAoZmxhZ19kZWxldGVfbnVsbF9wb2lu dGVyX2NoZWNrcyAmJiBnaW1wbGVfY29kZSAocykgIT0gR0lNUExFX0FTTQogICAgICAgJiYgIWdp bXBsZV9jbG9iYmVyX3AgKHMpKQpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsZS1yYW5nZS1pbmZlci5o IGIvZ2NjL2dpbXBsZS1yYW5nZS1pbmZlci5oCmluZGV4IDQ2OGI3ZDExMjg2Li5hZGZlMWZkOGM2 OSAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBsZS1yYW5nZS1pbmZlci5oCisrKyBiL2djYy9naW1wbGUt cmFuZ2UtaW5mZXIuaApAQCAtNDAsNiArNDAsNyBAQCBwdWJsaWM6CiAgIHZvaWQgYWRkX3Jhbmdl ICh0cmVlIG5hbWUsIHZyYW5nZSAmcmFuZ2UpOwogICB2b2lkIGFkZF9ub256ZXJvICh0cmVlIG5h bWUpOwogcHJpdmF0ZToKKyAgdm9pZCBjaGVja19hc3N1bWVfZnVuYyAoZ2NhbGwgKmNhbGwpOwog ICB1bnNpZ25lZCBudW1fYXJnczsKICAgc3RhdGljIGNvbnN0IGludCBzaXplX2xpbWl0ID0gMTA7 CiAgIHRyZWUgbV9uYW1lc1tzaXplX2xpbWl0XTsKZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtcmFu Z2UuY2MgYi9nY2MvZ2ltcGxlLXJhbmdlLmNjCmluZGV4IGQ2N2Q2NDk5Yzc4Li4wNTg0Mzk3MzNl ZSAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBsZS1yYW5nZS5jYworKysgYi9nY2MvZ2ltcGxlLXJhbmdl LmNjCkBAIC02NDUsMyArNjQ1LDE5MyBAQCBkaXNhYmxlX3JhbmdlciAoc3RydWN0IGZ1bmN0aW9u ICpmdW4pCiAgIGRlbGV0ZSBmdW4tPnhfcmFuZ2VfcXVlcnk7CiAgIGZ1bi0+eF9yYW5nZV9xdWVy eSA9IE5VTEw7CiB9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBJZiB0aGVyZSBpcyBhIG5v bi12YXJ5aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBOQU1FLCByZXR1cm4gdHJ1ZSBhbmQgdGhl CisvLyByYW5nZSBpbiBSLgorCitib29sCithc3N1bWVfcXVlcnk6OmFzc3VtZV9yYW5nZV9wICh2 cmFuZ2UgJnIsIHRyZWUgbmFtZSkKK3sKKyAgaWYgKGdsb2JhbC5nZXRfZ2xvYmFsX3JhbmdlIChy LCBuYW1lKSkKKyAgICByZXR1cm4gIXIudmFyeWluZ19wICgpOworICByZXR1cm4gZmFsc2U7Cit9 CisKKy8vIFF1ZXJ5IHVzZWQgYnkgR09SSSB0byBwaWNrIHVwIGFueSBrbm93biB2YWx1ZSBvbiBl bnRyeSB0byBhIGJsb2NrLgorCitib29sCithc3N1bWVfcXVlcnk6OnJhbmdlX29mX2V4cHIgKHZy YW5nZSAmciwgdHJlZSBleHByLCBnaW1wbGUgKnN0bXQpCit7CisgIGlmICghZ2ltcGxlX3Jhbmdl X3NzYV9wIChleHByKSkKKyAgICByZXR1cm4gZ2V0X3RyZWVfcmFuZ2UgKHIsIGV4cHIsIHN0bXQp OworCisgIGlmICghZ2xvYmFsLmdldF9nbG9iYWxfcmFuZ2UgKHIsIGV4cHIpKQorICAgIHIuc2V0 X3ZhcnlpbmcgKFRSRUVfVFlQRSAoZXhwcikpOworICByZXR1cm4gdHJ1ZTsKK30KKworLy8gSWYg dGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucyBhbiBpbnRlZ3JhbCB2YWx1ZSwgYW5kIGhhcyBh IHNpbmdsZSByZXR1cm4KKy8vIHN0YXRlbWVudCwgaXQgd2lsbCBjYWxjdWxhdGUgYW55IFNTQV9O QU1FUyBpcyBjYW4gZGV0ZXJtaW5lIHJhbmdlcyBmb3JyCisvLyBhc3N1bWluZyB0aGUgZnVuY3Rp b24gcmV0dXJucyAxLgorCithc3N1bWVfcXVlcnk6OmFzc3VtZV9xdWVyeSAoKQoreworICBiYXNp Y19ibG9jayBleGl0X2JiID0gRVhJVF9CTE9DS19QVFJfRk9SX0ZOIChjZnVuKTsKKyAgaWYgKHNp bmdsZV9wcmVkX3AgKGV4aXRfYmIpKQorICAgIHsKKyAgICAgIGJhc2ljX2Jsb2NrIGJiID0gc2lu Z2xlX3ByZWQgKGV4aXRfYmIpOworICAgICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgZ3NpID0gZ3Np X2xhc3Rfbm9uZGVidWdfYmIgKGJiKTsKKyAgICAgIGlmIChnc2lfZW5kX3AgKGdzaSkpCisJcmV0 dXJuOworICAgICAgZ2ltcGxlICpzID0gZ3NpX3N0bXQgKGdzaSk7CisgICAgICBpZiAoIWlzX2E8 Z3JldHVybiAqPiAocykpCisJcmV0dXJuOworICAgICAgZ3JldHVybiAqZ3JldCA9IGFzX2E8Z3Jl dHVybiAqPiAocyk7CisgICAgICB0cmVlIG9wID0gZ2ltcGxlX3JldHVybl9yZXR2YWwgKGdyZXQp OworICAgICAgaWYgKCFnaW1wbGVfcmFuZ2Vfc3NhX3AgKG9wKSkKKwlyZXR1cm47CisgICAgICB0 cmVlIGxoc190eXBlID0gVFJFRV9UWVBFIChvcCk7CisgICAgICBpZiAoIWlyYW5nZTo6c3VwcG9y dHNfcCAobGhzX3R5cGUpKQorCXJldHVybjsKKworICAgICAgdW5zaWduZWQgcHJlYyA9IFRZUEVf UFJFQ0lTSU9OIChsaHNfdHlwZSk7CisgICAgICBpbnRfcmFuZ2U8Mj4gbGhzX3JhbmdlIChsaHNf dHlwZSwgd2k6Om9uZSAocHJlYyksIHdpOjpvbmUgKHByZWMpKTsKKyAgICAgIGdsb2JhbC5zZXRf Z2xvYmFsX3JhbmdlIChvcCwgbGhzX3JhbmdlKTsKKworICAgICAgZ2ltcGxlICpkZWYgPSBTU0Ff TkFNRV9ERUZfU1RNVCAob3ApOworICAgICAgaWYgKCFkZWYgfHwgZ2ltcGxlX2dldF9saHMgKGRl ZikgIT0gb3ApCisJcmV0dXJuOworICAgICAgZnVyX3N0bXQgc3JjIChncmV0LCB0aGlzKTsKKyAg ICAgIGNhbGN1bGF0ZV9zdG10IChkZWYsIGxoc19yYW5nZSwgc3JjKTsKKyAgICB9Cit9CisKKy8v IEV2YWx1YXRlIG9wZXJhbmQgT1Agb24gc3RhdGVtZW50IFMsIHVzaW5nIHRoZSBwcm92aWRlZCBM SFMgcmFuZ2UuCisvLyBJZiBzdWNjZXNzZnVsLCBzZXQgdGhlIHJhbmdlIGluIHRoZSBnbG9iYWwg dGFibGUsIHRoZW4gdmlzaXQgT1AncyBkZWYgc3RtdC4KKwordm9pZAorYXNzdW1lX3F1ZXJ5Ojpj YWxjdWxhdGVfb3AgKHRyZWUgb3AsIGdpbXBsZSAqcywgdnJhbmdlICZsaHMsIGZ1cl9zb3VyY2Ug JnNyYykKK3sKKyAgVmFsdWVfUmFuZ2Ugb3BfcmFuZ2UgKFRSRUVfVFlQRSAob3ApKTsKKyAgaWYg KG1fZ29yaS5jb21wdXRlX29wZXJhbmRfcmFuZ2UgKG9wX3JhbmdlLCBzLCBsaHMsIG9wLCBzcmMp CisgICAgICAmJiAhb3BfcmFuZ2UudmFyeWluZ19wICgpKQorICAgIHsKKyAgICAgIFZhbHVlX1Jh bmdlIHJhbmdlIChUUkVFX1RZUEUgKG9wKSk7CisgICAgICBpZiAoZ2xvYmFsLmdldF9nbG9iYWxf cmFuZ2UgKHJhbmdlLCBvcCkpCisJb3BfcmFuZ2UuaW50ZXJzZWN0IChyYW5nZSk7CisgICAgICBn bG9iYWwuc2V0X2dsb2JhbF9yYW5nZSAob3AsIG9wX3JhbmdlKTsKKyAgICAgIGdpbXBsZSAqZGVm X3N0bXQgPSBTU0FfTkFNRV9ERUZfU1RNVCAob3ApOworICAgICAgaWYgKGRlZl9zdG10ICYmIGdp bXBsZV9nZXRfbGhzIChkZWZfc3RtdCkgPT0gb3ApCisJY2FsY3VsYXRlX3N0bXQgKGRlZl9zdG10 LCBvcF9yYW5nZSwgc3JjKTsKKyAgICB9Cit9CisKKy8vIEV2YWx1YXRlIFBISSBzdGF0ZW1lbnQs IHVzaW5nIHRoZSBwcm92aWRlZCBMSFMgcmFuZ2UuCisvLyBDaGVjayBlYWNoIGNvbnN0YW50IGFy Z3VtZW50IHByZWRlY2Vzc29yIGlmIGl0IGNhbiBiZSB0YWtlbgorLy8gcHJvdmlkZSBMSFMgdG8g YW55IHN5bWJvbGljIGFyZ21ldWVudHMsIGFuZCBwcm9jZXNzIHRoZWlyIGRlZiBzdGF0ZW1lbnRz LgorCit2b2lkCithc3N1bWVfcXVlcnk6OmNhbGN1bGF0ZV9waGkgKGdwaGkgKnBoaSwgdnJhbmdl ICZsaHNfcmFuZ2UsIGZ1cl9zb3VyY2UgJnNyYykKK3sKKyAgZm9yICh1bnNpZ25lZCB4PSAwOyB4 IDwgZ2ltcGxlX3BoaV9udW1fYXJncyAocGhpKTsgeCsrKQorICAgIHsKKyAgICAgIHRyZWUgYXJn ID0gZ2ltcGxlX3BoaV9hcmdfZGVmIChwaGksIHgpOworICAgICAgVmFsdWVfUmFuZ2UgYXJnX3Jh bmdlIChUUkVFX1RZUEUgKGFyZykpOworICAgICAgaWYgKGdpbXBsZV9yYW5nZV9zc2FfcCAoYXJn KSkKKwl7CisJICAvLyBBIHN5bWJvbCBhcmcgd2lsbCBiZSB0aGUgTEhTIHZhbHVlLgorCSAgYXJn X3JhbmdlID0gbGhzX3JhbmdlOworCSAgcmFuZ2VfY2FzdCAoYXJnX3JhbmdlLCBUUkVFX1RZUEUg KGFyZykpOworCSAgaWYgKCFnbG9iYWwuZ2V0X2dsb2JhbF9yYW5nZSAoYXJnX3JhbmdlLCBhcmcp KQorCSAgICB7CisJICAgICAgZ2xvYmFsLnNldF9nbG9iYWxfcmFuZ2UgKGFyZywgYXJnX3Jhbmdl KTsKKwkgICAgICBnaW1wbGUgKmRlZl9zdG10ID0gU1NBX05BTUVfREVGX1NUTVQgKGFyZyk7CisJ ICAgICAgaWYgKGRlZl9zdG10ICYmIGdpbXBsZV9nZXRfbGhzIChkZWZfc3RtdCkgPT0gYXJnKQor CQljYWxjdWxhdGVfc3RtdCAoZGVmX3N0bXQsIGFyZ19yYW5nZSwgc3JjKTsKKwkgICAgfQorCX0K KyAgICAgIGVsc2UgaWYgKGdldF90cmVlX3JhbmdlIChhcmdfcmFuZ2UsIGFyZywgTlVMTCkpCisJ eworCSAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0YW50IHZhbHVlIHRoYXQgZGlmZmVycyBmcm9tIExI UywgdGhpcworCSAgLy8gZWRnZSBjYW5ub3QgYmUgdGFrZW4uCisJICBhcmdfcmFuZ2UuaW50ZXJz ZWN0IChsaHNfcmFuZ2UpOworCSAgaWYgKGFyZ19yYW5nZS51bmRlZmluZWRfcCAoKSkKKwkgICAg Y29udGludWU7CisJICAvLyBPdGhlcndpc2UgY2hlY2sgdGhlIGNvbmRpdGlvbiBmZWVkaW5nIHRo aXMgZWRnZS4KKwkgIGVkZ2UgZSA9IGdpbXBsZV9waGlfYXJnX2VkZ2UgKHBoaSwgeCk7CisJICBj aGVja190YWtlbl9lZGdlIChlLCBzcmMpOworCX0KKyAgICB9Cit9CisKKy8vIElmIGFuIGVkZ2Ug aXMga25vd24gdG8gYmUgdGFrZW4sIGV4YW1pbmUgdGhlIG91dGdvaW5nIGVkZ2UgdG8gc2VlCisv LyBpZiBpdCBjYXJyaWVzIGFueSByYW5nZSBpbmZvcm1hdGlvbiB0aGF0IGNhbiBhbHNvIGJlIGV2 YWx1YXRlZC4KKwordm9pZAorYXNzdW1lX3F1ZXJ5OjpjaGVja190YWtlbl9lZGdlIChlZGdlIGUs IGZ1cl9zb3VyY2UgJnNyYykKK3sKKyAgZ2ltcGxlICpzdG10ID0gZ2ltcGxlX291dGdvaW5nX3Jh bmdlX3N0bXRfcCAoZS0+c3JjKTsKKyAgaWYgKHN0bXQgJiYgaXNfYTxnY29uZCAqPiAoc3RtdCkp CisgICAgeworICAgICAgaW50X3JhbmdlPDI+IGNvbmQ7CisgICAgICBnY29uZF9lZGdlX3Jhbmdl IChjb25kLCBlKTsKKyAgICAgIGNhbGN1bGF0ZV9zdG10IChzdG10LCBjb25kLCBzcmMpOworICAg IH0KK30KKworLy8gRXZhbHVhdGUgc3RhdGVtZW50IFMgd2hpY2ggcHJvZHVjZXMgcmFuZ2UgTEhT X1JBTkdFLgorCit2b2lkCithc3N1bWVfcXVlcnk6OmNhbGN1bGF0ZV9zdG10IChnaW1wbGUgKnMs IHZyYW5nZSAmbGhzX3JhbmdlLCBmdXJfc291cmNlICZzcmMpCit7CisgIGdpbXBsZV9yYW5nZV9v cF9oYW5kbGVyIGhhbmRsZXIgKHMpOworICBpZiAoaGFuZGxlcikKKyAgICB7CisgICAgICB0cmVl IG9wID0gZ2ltcGxlX3JhbmdlX3NzYV9wIChoYW5kbGVyLm9wZXJhbmQxICgpKTsKKyAgICAgIGlm IChvcCkKKwljYWxjdWxhdGVfb3AgKG9wLCBzLCBsaHNfcmFuZ2UsIHNyYyk7CisgICAgICBvcCA9 IGdpbXBsZV9yYW5nZV9zc2FfcCAoaGFuZGxlci5vcGVyYW5kMiAoKSk7CisgICAgICBpZiAob3Ap CisJY2FsY3VsYXRlX29wIChvcCwgcywgbGhzX3JhbmdlLCBzcmMpOworICAgIH0KKyAgZWxzZSBp ZiAoaXNfYTxncGhpICo+IChzKSkKKyAgICB7CisgICAgICBjYWxjdWxhdGVfcGhpIChhc19hPGdw aGkgKj4gKHMpLCBsaHNfcmFuZ2UsIHNyYyk7CisgICAgICAvLyBEb24ndCBmdXJ0aGVyIGNoZWNr IHByZWRlY2Vzc29ycyBvZiBibG9ja3Mgd2l0aCBQSElzLgorICAgICAgcmV0dXJuOworICAgIH0K KworICAvLyBFdmVuIGlmIHRoZSB3YWxrIGJhY2sgdGVybWluYXRlcyBiZWZvcmUgdGhlIHRvcCwg aWYgdGhpcyBpcyBhIHNpbmdsZQorICAvLyBwcmVkZWNlc3NvciBibG9jaywgc2VlIGlmIHRoZSBw cmVkZWNlc3NvciBwcm92aWRlZCBhbnkgcmFuZ2VzIHRvIGdldCBoZXJlLgorICBpZiAoc2luZ2xl X3ByZWRfcCAoZ2ltcGxlX2JiIChzKSkpCisgICAgY2hlY2tfdGFrZW5fZWRnZSAoc2luZ2xlX3By ZWRfZWRnZSAoZ2ltcGxlX2JiIChzKSksIHNyYyk7Cit9CisKKy8vIFNob3cgZXZlcnl0aGluZyB0 aGF0IHdhcyBjYWxjdWxhdGVkLgorCit2b2lkCithc3N1bWVfcXVlcnk6OmR1bXAgKEZJTEUgKmYp Cit7CisgIGZwcmludGYgKGYsICJBc3N1bXB0aW9uIGRldGFpbHMgY2FsY3VsYXRlZDpcbiIpOwor ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtX3NzYV9uYW1lczsgaSsrKQorICAgIHsKKyAg ICAgIHRyZWUgbmFtZSA9IHNzYV9uYW1lIChpKTsKKyAgICAgIGlmICghbmFtZSB8fCAhZ2ltcGxl X3JhbmdlX3NzYV9wIChuYW1lKSkKKwljb250aW51ZTsKKyAgICAgIHRyZWUgdHlwZSA9IFRSRUVf VFlQRSAobmFtZSk7CisgICAgICBpZiAoIVZhbHVlX1JhbmdlOjpzdXBwb3J0c190eXBlX3AgKHR5 cGUpKQorCWNvbnRpbnVlOworCisgICAgICBWYWx1ZV9SYW5nZSBhc3N1bWVfcmFuZ2UgKHR5cGUp OworICAgICAgaWYgKGFzc3VtZV9yYW5nZV9wIChhc3N1bWVfcmFuZ2UsIG5hbWUpKQorCXsKKwkg IHByaW50X2dlbmVyaWNfZXhwciAoZiwgbmFtZSwgVERGX1NMSU0pOworCSAgZnByaW50ZiAoZiwg IiAtPiAiKTsKKwkgIGFzc3VtZV9yYW5nZS5kdW1wIChmKTsKKwkgIGZwdXRjICgnXG4nLCBmKTsK Kwl9CisgICAgfQorICBmcHJpbnRmIChmLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t XG4iKTsKK30KZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtcmFuZ2UuaCBiL2djYy9naW1wbGUtcmFu Z2UuaAppbmRleCA4YjJmZjU2ODVlNS4uNDgwMGJmYmY4OTAgMTAwNjQ0Ci0tLSBhL2djYy9naW1w bGUtcmFuZ2UuaAorKysgYi9nY2MvZ2ltcGxlLXJhbmdlLmgKQEAgLTgwLDQgKzgwLDIyIEBAIGV4 dGVybiBnaW1wbGVfcmFuZ2VyICplbmFibGVfcmFuZ2VyIChzdHJ1Y3QgZnVuY3Rpb24gKm0sCiAJ CQkJICAgICBib29sIHVzZV9pbW1fdXNlcyA9IHRydWUpOwogZXh0ZXJuIHZvaWQgZGlzYWJsZV9y YW5nZXIgKHN0cnVjdCBmdW5jdGlvbiAqKTsKIAorY2xhc3MgYXNzdW1lX3F1ZXJ5IDogcHVibGlj IHJhbmdlX3F1ZXJ5Cit7CitwdWJsaWM6CisgIGFzc3VtZV9xdWVyeSAoKTsKKyAgYm9vbCBhc3N1 bWVfcmFuZ2VfcCAodnJhbmdlICZyLCB0cmVlIG5hbWUpOworICB2aXJ0dWFsIGJvb2wgcmFuZ2Vf b2ZfZXhwciAodnJhbmdlICZyLCB0cmVlIGV4cHIsIGdpbXBsZSAqID0gTlVMTCk7CisgIHZvaWQg ZHVtcCAoRklMRSAqZik7Citwcm90ZWN0ZWQ6CisgIHZvaWQgY2FsY3VsYXRlX3N0bXQgKGdpbXBs ZSAqcywgdnJhbmdlICZsaHNfcmFuZ2UsIGZ1cl9zb3VyY2UgJnNyYyk7CisgIHZvaWQgY2FsY3Vs YXRlX29wICh0cmVlIG9wLCBnaW1wbGUgKnMsIHZyYW5nZSAmbGhzLCBmdXJfc291cmNlICZzcmMp OworICB2b2lkIGNhbGN1bGF0ZV9waGkgKGdwaGkgKnBoaSwgdnJhbmdlICZsaHNfcmFuZ2UsIGZ1 cl9zb3VyY2UgJnNyYyk7CisgIHZvaWQgY2hlY2tfdGFrZW5fZWRnZSAoZWRnZSBlLCBmdXJfc291 cmNlICZzcmMpOworCisgIHNzYV9nbG9iYWxfY2FjaGUgZ2xvYmFsOworICBnb3JpX2NvbXB1dGUg bV9nb3JpOworfTsKKworCiAjZW5kaWYgLy8gR0NDX0dJTVBMRV9SQU5HRV9ICmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9hdHRyLWFzc3VtZS1vcHQuQyBiL2djYy90ZXN0 c3VpdGUvZysrLmRnL2NwcDIzL2F0dHItYXNzdW1lLW9wdC5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi44OGQ1ZTc4ZGJiYQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2F0dHItYXNzdW1lLW9wdC5DCkBAIC0wLDAgKzEsNDIgQEAK Ky8vIFAxNzc0UjggLSBQb3J0YWJsZSBhc3N1bXB0aW9ucworLy8geyBkZy1kbyBjb21waWxlIHsg dGFyZ2V0IGMrKzExIH0gfQorLy8geyBkZy1vcHRpb25zICItTzIgLWZkdW1wLXRyZWUtdnJwMiIg fQorLy8gVGVzdCB0aGUgd2UgY2FuIG9wdGltaXplIGJhc2VkIG9uIGNvbmRpdGlvbnMgaW4gYXNz dW1lLgorCitpbnQKK2YxICh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCB6KQorewor ICBbW2Fzc3VtZSAoeCA9PSAyICYmIHkgPCAzICYmIHogPCAyMCldXTsKKyAgdW5zaWduZWQgcSA9 IHggKyB5ICsgejsKKyAgaWYgKHEgPiAyMykKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9 CisKKworaW50CitmMiAoaW50IHgsIGludCB5LCBpbnQgeikKK3sKKyAgW1thc3N1bWUgKHgrMTIg PT0gMTQgJiYgeSA+PSAwICYmIHkgKyAxMCA8IDEzICYmIHogKyA0ID49IDQgJiYgeiAtIDIgPCAx OCldXTsKKyAgdW5zaWduZWQgcSA9IHggKyB5ICsgejsKKyAgaWYgKHEqMiA+IDQ2KQorICAgIHJl dHVybiAwOworICByZXR1cm4gMTsKK30KKworaW50CitmMyAoaW50IHgsIGludCB5LCBpbnQgeikK K3sKKyAgW1thc3N1bWUgKHggKyAxMiA9PSAxNCAmJiB6IC8gMiA+IDApXV07CisgIFtbYXNzdW1l ICh5ID49IDAgJiYgeiAtIDIgPCAxOCldXTsKKyAgW1thc3N1bWUgKHkgKyAxMCA8IDEzICYmIHog KyA0ID49IDIpXV07CisgIGludCBxID0geCArIHkgKyB6OworICBpZiAocSAqIDIgPiA0NikKKyAg ICByZXR1cm4gMDsKKyAgaWYgKHogPCAwKQorICAgIHJldHVybiAwOworICByZXR1cm4gMTsKK30K KworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJyZXR1cm4gMCIgMCAidnJw MiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInJldHVybiAx IiAzICJ2cnAyIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90cmVlLXZycC5jYyBiL2djYy90cmVl LXZycC5jYwppbmRleCAxYWRiMTVjOTkzNC4uZTVhMjkyYmI4NzUgMTAwNjQ0Ci0tLSBhL2djYy90 cmVlLXZycC5jYworKysgYi9nY2MvdHJlZS12cnAuY2MKQEAgLTUwLDYgKzUwLDcgQEAgYWxvbmcg d2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJn aW1wbGUtcmFuZ2UtcGF0aC5oIgogI2luY2x1ZGUgInZhbHVlLXBvaW50ZXItZXF1aXYuaCIKICNp bmNsdWRlICJnaW1wbGUtZm9sZC5oIgorI2luY2x1ZGUgInRyZWUtZGZhLmgiCiAKIC8qIFNldCBv ZiBTU0EgbmFtZXMgZm91bmQgbGl2ZSBkdXJpbmcgdGhlIFJQTyB0cmF2ZXJzYWwgb2YgdGhlIGZ1 bmN0aW9uCiAgICBmb3Igc3RpbGwgYWN0aXZlIGJhc2ljLWJsb2Nrcy4gICovCkBAIC00NDY1LDYg KzQ0NjYsMzkgQEAgcHVibGljOgogICBib29sIGdhdGUgKGZ1bmN0aW9uICpmdW4pIGZpbmFsIG92 ZXJyaWRlIHsgcmV0dXJuIGZ1bi0+YXNzdW1lX2Z1bmN0aW9uOyB9CiAgIHVuc2lnbmVkIGludCBl eGVjdXRlIChmdW5jdGlvbiAqKSBmaW5hbCBvdmVycmlkZQogICAgIHsKKyAgICAgIGFzc3VtZV9x dWVyeSBxdWVyeTsKKyAgICAgIGlmIChkdW1wX2ZpbGUpCisJZnByaW50ZiAoZHVtcF9maWxlLCAi QXNzdW1wdGlvbnMgOlxuLS0tLS0tLS0tLS0tLS1cbiIpOworCisgICAgICBmb3IgKHRyZWUgYXJn ID0gREVDTF9BUkdVTUVOVFMgKGNmdW4tPmRlY2wpOyBhcmc7IGFyZyA9IERFQ0xfQ0hBSU4gKGFy ZykpCisJeworCSAgdHJlZSBuYW1lID0gc3NhX2RlZmF1bHRfZGVmIChjZnVuLCBhcmcpOworCSAg aWYgKCFuYW1lIHx8ICFnaW1wbGVfcmFuZ2Vfc3NhX3AgKG5hbWUpKQorCSAgICBjb250aW51ZTsK KwkgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAobmFtZSk7CisJICBpZiAoIVZhbHVlX1JhbmdlOjpz dXBwb3J0c190eXBlX3AgKHR5cGUpKQorCSAgICBjb250aW51ZTsKKwkgIFZhbHVlX1JhbmdlIGFz c3VtZV9yYW5nZSAodHlwZSk7CisJICBpZiAocXVlcnkuYXNzdW1lX3JhbmdlX3AgKGFzc3VtZV9y YW5nZSwgbmFtZSkpCisJICAgIHsKKwkgICAgICAvLyBTZXQgdGhlIGdsb2JhbCByYW5nZSBvZiBO QU1FIHRvIGFueXRoaW5nIGNhbGN1bGF0ZWQuCisJICAgICAgc2V0X3JhbmdlX2luZm8gKG5hbWUs IGFzc3VtZV9yYW5nZSk7CisJICAgICAgaWYgKGR1bXBfZmlsZSkKKwkJeworCQkgIHByaW50X2dl bmVyaWNfZXhwciAoZHVtcF9maWxlLCBuYW1lLCBUREZfU0xJTSk7CisJCSAgZnByaW50ZiAoZHVt cF9maWxlLCAiIC0+ICIpOworCQkgIGFzc3VtZV9yYW5nZS5kdW1wIChkdW1wX2ZpbGUpOworCQkg IGZwdXRjICgnXG4nLCBkdW1wX2ZpbGUpOworCQl9CisJICAgIH0KKwl9CisgICAgICBpZiAoZHVt cF9maWxlKQorCXsKKwkgIGZwdXRjICgnXG4nLCBkdW1wX2ZpbGUpOworCSAgZ2ltcGxlX2R1bXBf Y2ZnIChkdW1wX2ZpbGUsIGR1bXBfZmxhZ3MgJiB+VERGX0RFVEFJTFMpOworCSAgaWYgKGR1bXBf ZmxhZ3MgJiBUREZfREVUQUlMUykKKwkgICAgcXVlcnkuZHVtcCAoZHVtcF9maWxlKTsKKwl9CiAg ICAgICByZXR1cm4gVE9ET19kaXNjYXJkX2Z1bmN0aW9uOwogICAgIH0KIAotLSAKMi4zNy4zCgo= --------------IvUFyEO0oQFX2Yh0EtTc0n3m--