From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 41875 invoked by alias); 29 Oct 2015 18:13:33 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 40873 invoked by uid 89); 29 Oct 2015 18:13:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-vk0-f43.google.com Received: from mail-vk0-f43.google.com (HELO mail-vk0-f43.google.com) (209.85.213.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 29 Oct 2015 18:13:31 +0000 Received: by vkgs66 with SMTP id s66so32313168vkg.1 for ; Thu, 29 Oct 2015 11:13:29 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.31.137.11 with SMTP id l11mr2360664vkd.38.1446142408884; Thu, 29 Oct 2015 11:13:28 -0700 (PDT) Received: by 10.31.75.130 with HTTP; Thu, 29 Oct 2015 11:13:28 -0700 (PDT) In-Reply-To: <20151029170224.GB37773@kam.mff.cuni.cz> References: <5616C9CA.2010702@redhat.com> <20151008213644.GD5527@kam.mff.cuni.cz> <5617FD1D.9010406@redhat.com> <20151009182753.GA7750@kam.mff.cuni.cz> <20151009200422.GA23615@kam.mff.cuni.cz> <562E4BB1.3050606@redhat.com> <20151029170224.GB37773@kam.mff.cuni.cz> Date: Thu, 29 Oct 2015 18:15:00 -0000 Message-ID: Subject: Re: [PATCH] New attribute to create target clones From: Evgeny Stupachenko To: Jan Hubicka Cc: Jeff Law , Bernd Schmidt , Bernd Schmidt , GCC Patches Content-Type: multipart/mixed; boundary=001a11441386939c7605234244d1 X-IsSubscribed: yes X-SW-Source: 2015-10/txt/msg03258.txt.bz2 --001a11441386939c7605234244d1 Content-Type: text/plain; charset=UTF-8 Content-length: 1976 On Thu, Oct 29, 2015 at 8:02 PM, Jan Hubicka wrote: >> Yes. This is not necessary. However that way we'll have the following >> code in dispatcher: >> cmpl $6, __cpu_model+4(%rip) >> sete %al >> movzbl %al, %eax >> testl %eax, %eax >> jle .L16 >> movl $foo.target_clone.1, %eax >> I think it is very hard to read and debug such... >> >> While now we have: >> >> cmpl $6, __cpu_model+4(%rip) >> sete %al >> movzbl %al, %eax >> testl %eax, %eax >> jle .L16 >> movl $foo.arch_slm, %eax >> >> and it is clear that we are jumping to SLM code here. >> I'd like to keep target in names. > > I am not against more informative names, but why you don't pass the info here: > > +create_target_clone (cgraph_node *node, bool definition) > +{ > + cgraph_node *new_node; > + if (definition) > + { > + new_node = node->create_version_clone_with_body (vNULL, NULL, > + NULL, false, > + NULL, NULL, > + "target_clone"); > + new_node->force_output = true; > + } > + else > + { > + tree new_decl = copy_node (node->decl); > + new_node = cgraph_node::get_create (new_decl); > + } > + return new_node; > +} > > passing "arch_slm" instead of target_clone will get you the name you want > (plus the extra index that may be needed anyway to disambiguate). > > Note that in general those .suffixes should be machine parseable, so cp-demangle.c > can expand them correctly. We may want to have some consistent grammar for them here > and update cp-demangle.c to output nice info like "target clone for..." Ok. I've modified the patch correspondingly. > > I will look at the rest of the patch at evening. > Honza >> >> Thanks, >> Evgeny >> > >> > >> > Jeff > > --001a11441386939c7605234244d1 Content-Type: application/octet-stream; name="target_clones5.patch" Content-Disposition: attachment; filename="target_clones5.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_igcjuima0 Content-length: 35820 ZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5p bgppbmRleCA3ODNlNGM5Li44NDdiOWQ0IDEwMDY0NAotLS0gYS9nY2MvTWFr ZWZpbGUuaW4KKysrIGIvZ2NjL01ha2VmaWxlLmluCkBAIC0xMzQ4LDYgKzEz NDgsNyBAQCBPQkpTID0gXAogCW1jZi5vIFwKIAltb2RlLXN3aXRjaGluZy5v IFwKIAltb2R1bG8tc2NoZWQubyBcCisJbXVsdGlwbGVfdGFyZ2V0Lm8gXAog CW9tcC1sb3cubyBcCiAJb3B0YWJzLm8gXAogCW9wdGFicy1saWJmdW5jcy5v IFwKZGlmZiAtLWdpdCBhL2djYy9hdHRyaWJzLmMgYi9nY2MvYXR0cmlicy5j CmluZGV4IDZjYmUwMTEuLjllNzBmMDQgMTAwNjQ0Ci0tLSBhL2djYy9hdHRy aWJzLmMKKysrIGIvZ2NjL2F0dHJpYnMuYwpAQCAtNjgxLDMgKzY4MSwyMSBA QCBhcHBseV90bV9hdHRyICh0cmVlIGZuZGVjbCwgdHJlZSBhdHRyKQogewog ICBkZWNsX2F0dHJpYnV0ZXMgKCZUUkVFX1RZUEUgKGZuZGVjbCksIHRyZWVf Y29ucyAoYXR0ciwgTlVMTCwgTlVMTCksIDApOwogfQorCisvKiBNYWtlcyBh IGZ1bmN0aW9uIGF0dHJpYnV0ZSBvZiB0aGUgZm9ybSBOQU1FKEFSR19OQU1F KSBhbmQgY2hhaW5zCisgICBpdCB0byBDSEFJTi4gICovCisKK3RyZWUKK21h a2VfYXR0cmlidXRlIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICph cmdfbmFtZSwgdHJlZSBjaGFpbikKK3sKKyAgdHJlZSBhdHRyX25hbWU7Cisg IHRyZWUgYXR0cl9hcmdfbmFtZTsKKyAgdHJlZSBhdHRyX2FyZ3M7CisgIHRy ZWUgYXR0cjsKKworICBhdHRyX25hbWUgPSBnZXRfaWRlbnRpZmllciAobmFt ZSk7CisgIGF0dHJfYXJnX25hbWUgPSBidWlsZF9zdHJpbmcgKHN0cmxlbiAo YXJnX25hbWUpLCBhcmdfbmFtZSk7CisgIGF0dHJfYXJncyA9IHRyZWVfY29u cyAoTlVMTF9UUkVFLCBhdHRyX2FyZ19uYW1lLCBOVUxMX1RSRUUpOworICBh dHRyID0gdHJlZV9jb25zIChhdHRyX25hbWUsIGF0dHJfYXJncywgY2hhaW4p OworICByZXR1cm4gYXR0cjsKK30KZGlmZiAtLWdpdCBhL2djYy9hdHRyaWJz LmggYi9nY2MvYXR0cmlicy5oCmluZGV4IGFjODU1ZDUuLjNjMGJlNGYgMTAw NjQ0Ci0tLSBhL2djYy9hdHRyaWJzLmgKKysrIGIvZ2NjL2F0dHJpYnMuaApA QCAtMzYsNSArMzYsNiBAQCBleHRlcm4gdHJlZSBkZWNsX2F0dHJpYnV0ZXMg KHRyZWUgKiwgdHJlZSwgaW50KTsKIGV4dGVybiBib29sIGN4eDExX2F0dHJp YnV0ZV9wIChjb25zdF90cmVlKTsKIGV4dGVybiB0cmVlIGdldF9hdHRyaWJ1 dGVfbmFtZSAoY29uc3RfdHJlZSk7CiBleHRlcm4gdm9pZCBhcHBseV90bV9h dHRyICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG1ha2VfYXR0cmlidXRl IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdHJlZSk7CiAKICNlbmRp ZiAvLyBHQ0NfQVRUUklCU19ICmRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkv Yy1jb21tb24uYyBiL2djYy9jLWZhbWlseS9jLWNvbW1vbi5jCmluZGV4IDFj NzU5MjEuLjE0NGE1ZDggMTAwNjQ0Ci0tLSBhL2djYy9jLWZhbWlseS9jLWNv bW1vbi5jCisrKyBiL2djYy9jLWZhbWlseS9jLWNvbW1vbi5jCkBAIC0zODQs NiArMzg0LDcgQEAgc3RhdGljIHRyZWUgaGFuZGxlX2FsbG9jX3NpemVfYXR0 cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKIHN0 YXRpYyB0cmVlIGhhbmRsZV9hbGxvY19hbGlnbl9hdHRyaWJ1dGUgKHRyZWUg KiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwogc3RhdGljIHRyZWUgaGFu ZGxlX2Fzc3VtZV9hbGlnbmVkX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0 cmVlLCBpbnQsIGJvb2wgKik7CiBzdGF0aWMgdHJlZSBoYW5kbGVfdGFyZ2V0 X2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7 CitzdGF0aWMgdHJlZSBoYW5kbGVfdGFyZ2V0X2Nsb25lc19hdHRyaWJ1dGUg KHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwogc3RhdGljIHRy ZWUgaGFuZGxlX29wdGltaXplX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0 cmVlLCBpbnQsIGJvb2wgKik7CiBzdGF0aWMgdHJlZSBpZ25vcmVfYXR0cmli dXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKIHN0YXRp YyB0cmVlIGhhbmRsZV9ub19zcGxpdF9zdGFja19hdHRyaWJ1dGUgKHRyZWUg KiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwpAQCAtNzk4LDYgKzc5OSw4 IEBAIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYyBjX2NvbW1vbl9hdHRy aWJ1dGVfdGFibGVbXSA9CiAJCQkgICAgICBoYW5kbGVfZXJyb3JfYXR0cmli dXRlLCBmYWxzZSB9LAogICB7ICJ0YXJnZXQiLCAgICAgICAgICAgICAgICAg MSwgLTEsIHRydWUsIGZhbHNlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV90 YXJnZXRfYXR0cmlidXRlLCBmYWxzZSB9LAorICB7ICJ0YXJnZXRfY2xvbmVz IiwgICAgICAgICAgMSwgLTEsIHRydWUsIGZhbHNlLCBmYWxzZSwKKwkJCSAg ICAgIGhhbmRsZV90YXJnZXRfY2xvbmVzX2F0dHJpYnV0ZSwgZmFsc2UgfSwK ICAgeyAib3B0aW1pemUiLCAgICAgICAgICAgICAgIDEsIC0xLCB0cnVlLCBm YWxzZSwgZmFsc2UsCiAJCQkgICAgICBoYW5kbGVfb3B0aW1pemVfYXR0cmli dXRlLCBmYWxzZSB9LAogICAvKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuICBU aGUgbGVhZGluZyAnKicgYm90aCBwcmV2ZW50cyBpdHMgdXNhZ2UgaW4KQEAg LTczOTYsNiArNzM5OSwxMiBAQCBoYW5kbGVfYWx3YXlzX2lubGluZV9hdHRy aWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUgbmFtZSwKIAkJICAgIndpdGggJXFz IGF0dHJpYnV0ZSIsIG5hbWUsICJub2lubGluZSIpOwogCSAgKm5vX2FkZF9h dHRycyA9IHRydWU7CiAJfQorICAgICAgZWxzZSBpZiAobG9va3VwX2F0dHJp YnV0ZSAoInRhcmdldF9jbG9uZXMiLCBERUNMX0FUVFJJQlVURVMgKCpub2Rl KSkpCisJeworCSAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0 dHJpYnV0ZSBpZ25vcmVkIGR1ZSB0byBjb25mbGljdCAiCisJCSAgICJ3aXRo ICVxcyBhdHRyaWJ1dGUiLCBuYW1lLCAidGFyZ2V0X2Nsb25lcyIpOworCSAg Km5vX2FkZF9hdHRycyA9IHRydWU7CisJfQogICAgICAgZWxzZQogCS8qIFNl dCB0aGUgYXR0cmlidXRlIGFuZCBtYXJrIGl0IGZvciBkaXNyZWdhcmRpbmcg aW5saW5lCiAJICAgbGltaXRzLiAgKi8KQEAgLTk4MjQsNiArOTgzMywxMiBA QCBoYW5kbGVfdGFyZ2V0X2F0dHJpYnV0ZSAodHJlZSAqbm9kZSwgdHJlZSBu YW1lLCB0cmVlIGFyZ3MsIGludCBmbGFncywKICAgICAgIHdhcm5pbmcgKE9Q VF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdub3JlZCIsIG5hbWUp OwogICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CiAgICAgfQorICBlbHNl IGlmIChsb29rdXBfYXR0cmlidXRlICgidGFyZ2V0X2Nsb25lcyIsIERFQ0xf QVRUUklCVVRFUyAoKm5vZGUpKSkKKyAgICB7CisgICAgICB3YXJuaW5nIChP UFRfV2F0dHJpYnV0ZXMsICIlcUUgYXR0cmlidXRlIGlnbm9yZWQgZHVlIHRv IGNvbmZsaWN0ICIKKwkJICAgIndpdGggJXFzIGF0dHJpYnV0ZSIsIG5hbWUs ICJ0YXJnZXRfY2xvbmVzIik7CisgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1 ZTsKKyAgICB9CiAgIGVsc2UgaWYgKCEgdGFyZ2V0bS50YXJnZXRfb3B0aW9u LnZhbGlkX2F0dHJpYnV0ZV9wICgqbm9kZSwgbmFtZSwgYXJncywKIAkJCQkJ CSAgICAgIGZsYWdzKSkKICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKQEAg LTk4MzEsNiArOTg0NiwzOSBAQCBoYW5kbGVfdGFyZ2V0X2F0dHJpYnV0ZSAo dHJlZSAqbm9kZSwgdHJlZSBuYW1lLCB0cmVlIGFyZ3MsIGludCBmbGFncywK ICAgcmV0dXJuIE5VTExfVFJFRTsKIH0KIAorLyogSGFuZGxlIGEgInRhcmdl dF9jbG9uZXMiIGF0dHJpYnV0ZS4gICovCisKK3N0YXRpYyB0cmVlCitoYW5k bGVfdGFyZ2V0X2Nsb25lc19hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUg bmFtZSwgdHJlZSBBUkdfVU5VU0VEIChhcmdzKSwKKwkJCSAgaW50IEFSR19V TlVTRUQgKGZsYWdzKSwgYm9vbCAqbm9fYWRkX2F0dHJzKQoreworICAvKiBF bnN1cmUgd2UgaGF2ZSBhIGZ1bmN0aW9uIHR5cGUuICAqLworICBpZiAoVFJF RV9DT0RFICgqbm9kZSkgPT0gRlVOQ1RJT05fREVDTCkKKyAgICB7CisgICAg ICBpZiAobG9va3VwX2F0dHJpYnV0ZSAoImFsd2F5c19pbmxpbmUiLCBERUNM X0FUVFJJQlVURVMgKCpub2RlKSkpCisJeworCSAgd2FybmluZyAoT1BUX1dh dHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIGR1ZSB0byBjb25m bGljdCAiCisJCSAgICJ3aXRoICVxcyBhdHRyaWJ1dGUiLCBuYW1lLCAiYWx3 YXlzX2lubGluZSIpOworCSAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisJfQor ICAgICAgZWxzZSBpZiAobG9va3VwX2F0dHJpYnV0ZSAoInRhcmdldCIsIERF Q0xfQVRUUklCVVRFUyAoKm5vZGUpKSkKKwl7CisJICB3YXJuaW5nIChPUFRf V2F0dHJpYnV0ZXMsICIlcUUgYXR0cmlidXRlIGlnbm9yZWQgZHVlIHRvIGNv bmZsaWN0ICIKKwkJICAgIndpdGggJXFzIGF0dHJpYnV0ZSIsIG5hbWUsICJ0 YXJnZXQiKTsKKwkgICpub19hZGRfYXR0cnMgPSB0cnVlOworCX0KKyAgICAg IGVsc2UKKyAgICAgIC8qIERvIG5vdCBpbmxpbmUgZnVuY3Rpb25zIHdpdGgg bXVsdGlwbGUgY2xvbmUgdGFyZ2V0cy4gICovCisJREVDTF9VTklOTElOQUJM RSAoKm5vZGUpID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB3 YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsICIlcUUgYXR0cmlidXRlIGlnbm9y ZWQiLCBuYW1lKTsKKyAgICAgICpub19hZGRfYXR0cnMgPSB0cnVlOworICAg IH0KKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKwogLyogQXJndW1lbnRzIGJl aW5nIGNvbGxlY3RlZCBmb3Igb3B0aW1pemF0aW9uLiAgKi8KIHR5cGVkZWYg Y29uc3QgY2hhciAqY29uc3RfY2hhcl9wOwkJLyogRm9yIERFRl9WRUNfUC4g ICovCiBzdGF0aWMgR1RZKCgpKSB2ZWM8Y29uc3RfY2hhcl9wLCB2YV9nYz4g Km9wdGltaXplX2FyZ3M7CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYv aTM4Ni5jIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwppbmRleCBhMjMxNGU3 Li45ZjIyMjEwIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5j CisrKyBiL2djYy9jb25maWcvaTM4Ni9pMzg2LmMKQEAgLTM2NDc2LDI0ICsz NjQ3Niw2IEBAIGl4ODZfZ2V0X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNo ZXIgKHZvaWQgKmRlY2wpCiAgIHJldHVybiBkaXNwYXRjaF9kZWNsOwogfQog Ci0vKiBNYWtlcyBhIGZ1bmN0aW9uIGF0dHJpYnV0ZSBvZiB0aGUgZm9ybSBO QU1FKEFSR19OQU1FKSBhbmQgY2hhaW5zCi0gICBpdCB0byBDSEFJTi4gICov Ci0KLXN0YXRpYyB0cmVlCi1tYWtlX2F0dHJpYnV0ZSAoY29uc3QgY2hhciAq bmFtZSwgY29uc3QgY2hhciAqYXJnX25hbWUsIHRyZWUgY2hhaW4pCi17Ci0g IHRyZWUgYXR0cl9uYW1lOwotICB0cmVlIGF0dHJfYXJnX25hbWU7Ci0gIHRy ZWUgYXR0cl9hcmdzOwotICB0cmVlIGF0dHI7Ci0KLSAgYXR0cl9uYW1lID0g Z2V0X2lkZW50aWZpZXIgKG5hbWUpOwotICBhdHRyX2FyZ19uYW1lID0gYnVp bGRfc3RyaW5nIChzdHJsZW4gKGFyZ19uYW1lKSwgYXJnX25hbWUpOwotICBh dHRyX2FyZ3MgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgYXR0cl9hcmdfbmFt ZSwgTlVMTF9UUkVFKTsKLSAgYXR0ciA9IHRyZWVfY29ucyAoYXR0cl9uYW1l LCBhdHRyX2FyZ3MsIGNoYWluKTsKLSAgcmV0dXJuIGF0dHI7Ci19Ci0KIC8q IE1ha2UgdGhlIHJlc29sdmVyIGZ1bmN0aW9uIGRlY2wgdG8gZGlzcGF0Y2gg dGhlIHZlcnNpb25zIG9mCiAgICBhIG11bHRpLXZlcnNpb25lZCBmdW5jdGlv biwgIERFRkFVTFRfREVDTC4gIENyZWF0ZSBhbgogICAgZW1wdHkgYmFzaWMg YmxvY2sgaW4gdGhlIHJlc29sdmVyIGFuZCBzdG9yZSB0aGUgcG9pbnRlciBp bgpkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9leHRlbmQudGV4aSBiL2djYy9kb2Mv ZXh0ZW5kLnRleGkKaW5kZXggNzk0NDBkMy4uNjVhNTk4YSAxMDA2NDQKLS0t IGEvZ2NjL2RvYy9leHRlbmQudGV4aQorKysgYi9nY2MvZG9jL2V4dGVuZC50 ZXhpCkBAIC0zMDY2LDYgKzMwNjYsMTkgQEAgVGhpcyBmdW5jdGlvbiBhdHRy aWJ1dGUgbWFrZSBhIHN0YWNrIHByb3RlY3Rpb24gb2YgdGhlIGZ1bmN0aW9u IGlmCiBmbGFncyBAb3B0aW9ue2ZzdGFjay1wcm90ZWN0b3J9IG9yIEBvcHRp b257ZnN0YWNrLXByb3RlY3Rvci1zdHJvbmd9CiBvciBAb3B0aW9ue2ZzdGFj ay1wcm90ZWN0b3ItZXhwbGljaXR9IGFyZSBzZXQuCiAKK0BpdGVtIHRhcmdl dF9jbG9uZXMgKEB2YXJ7b3B0aW9uc30pCitAY2luZGV4IEBjb2Rle3Rhcmdl dF9jbG9uZXN9IGZ1bmN0aW9uIGF0dHJpYnV0ZQorVGhlIEBjb2Rle3Rhcmdl dF9jbG9uZXN9IGF0dHJpYnV0ZSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhhdCBh IGZ1bmN0aW9uIGlzIHRvCitiZSBjbG9uZWQgaW50byBtdWx0aXBsZSB2ZXJz aW9ucyBjb21waWxlZCB3aXRoIGRpZmZlcmVudCB0YXJnZXQgb3B0aW9ucwor dGhhbiBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoZSBzdXBw b3J0ZWQgb3B0aW9ucyBhbmQgcmVzdHJpY3Rpb25zCithcmUgdGhlIHNhbWUg YXMgZm9yIEBjb2Rle3RhcmdldH0gYXR0cmlidXRlLgorCitGb3IgaW5zdGFu Y2Ugb24gYW4geDg2LCB5b3UgY291bGQgY29tcGlsZSBhIGZ1bmN0aW9uIHdp dGgKK0Bjb2Rle3RhcmdldF9jbG9uZXMoInNzZTQuMSxhdngiKX0uIEl0IHdp bGwgY3JlYXRlIDIgZnVuY3Rpb24gY2xvbmVzLAorb25lIGNvbXBpbGVkIHdp dGggQG9wdGlvbnstbXNzZTQuMX0gYW5kIGFub3RoZXIgd2l0aCBAb3B0aW9u ey1tYXZ4fS4KK0F0IHRoZSBmdW5jdGlvbiBjYWxsIGl0IHdpbGwgY3JlYXRl IHJlc29sdmVyIEBjb2Rle2lmdW5jfSwgdGhhdCB3aWxsCitkeW5hbWljYWxs eSBjYWxsIGEgY2xvbmUgc3VpdGFibGUgZm9yIGN1cnJlbnQgYXJjaGl0ZWN0 dXJlLgorCiBAaXRlbSB0YXJnZXQgKEB2YXJ7b3B0aW9uc30pCiBAY2luZGV4 IEBjb2Rle3RhcmdldH0gZnVuY3Rpb24gYXR0cmlidXRlCiBNdWx0aXBsZSB0 YXJnZXQgYmFjayBlbmRzIGltcGxlbWVudCB0aGUgQGNvZGV7dGFyZ2V0fSBh dHRyaWJ1dGUKZGlmZiAtLWdpdCBhL2djYy9tdWx0aXBsZV90YXJnZXQuYyBi L2djYy9tdWx0aXBsZV90YXJnZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi42MjRiNTdmCi0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L211bHRpcGxlX3RhcmdldC5jCkBAIC0wLDAgKzEsNDMwIEBACisvKiBQYXNz IGZvciBwYXJzaW5nIGZ1bmN0aW9ucyB3aXRoIG11bHRpcGxlIHRhcmdldCBh dHRyaWJ1dGVzLgorCisgICBDb250cmlidXRlZCBieSBFdmdlbnkgU3R1cGFj aGVua28gPGV2c3R1cGFjQGdtYWlsLmNvbT4KKworICAgQ29weXJpZ2h0IChD KSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlz IGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVu ZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBB TlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAg SWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5o IgorI2luY2x1ZGUgImNvcmV0eXBlcy5oIgorI2luY2x1ZGUgImJhY2tlbmQu aCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAic3RyaW5ncG9vbC5o IgorI2luY2x1ZGUgImdpbXBsZS5oIgorI2luY2x1ZGUgImRpYWdub3N0aWMt Y29yZS5oIgorI2luY2x1ZGUgImdpbXBsZS1zc2EuaCIKKyNpbmNsdWRlICJj Z3JhcGguaCIKKyNpbmNsdWRlICJ0cmVlLXBhc3MuaCIKKyNpbmNsdWRlICJ0 YXJnZXQuaCIKKyNpbmNsdWRlICJhdHRyaWJzLmgiCisjaW5jbHVkZSAicHJl dHR5LXByaW50LmgiCisKKy8qIElmIHRoZSBjYWxsIGluIE5PREUgaGFzIG11 bHRpcGxlIHRhcmdldCBhdHRyaWJ1dGUgd2l0aCBtdWx0aXBsZSBmaWVsZHMs CisgICByZXBsYWNlIGl0IHdpdGggZGlzcGF0Y2hlciBjYWxsIGFuZCBjcmVh dGUgZGlzcGF0Y2hlciAob25jZSkuICAqLworCitzdGF0aWMgdm9pZAorY3Jl YXRlX2Rpc3BhdGNoZXJfY2FsbHMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9k ZSkKK3sKKyAgY2dyYXBoX2VkZ2UgKmU7CisgIGNncmFwaF9lZGdlICplX25l eHQ7CisgIC8qIFdlIG5lZWQgdG8gcmVtZW1iZXIgTkVYVF9DQUxMRVIgYXMg aXQgY291bGQgYmUgbW9kaWZpZWQgaW4gdGhlIGxvb3AuICAqLworICBmb3Ig KGUgPSBub2RlLT5jYWxsZXJzOyBlIDtlID0gKGUgPT0gTlVMTCkgPyBlX25l eHQgOiBlLT5uZXh0X2NhbGxlcikKKyAgICB7CisgICAgICB0cmVlIHJlc29s dmVyX2RlY2w7CisgICAgICB0cmVlIGlkZWNsOworICAgICAgdHJlZSBkZWNs OworICAgICAgZ2ltcGxlICpjYWxsID0gZS0+Y2FsbF9zdG10OworICAgICAg c3RydWN0IGNncmFwaF9ub2RlICppbm9kZTsKKworICAgICAgLyogQ2hlY2tp bmcgaWYgY2FsbCBvZiBmdW5jdGlvbiBpcyBjYWxsIG9mIHZlcnNpb25lZCBm dW5jdGlvbi4KKwkgVmVyc2lvbmVkIGZ1bmN0aW9uIGFyZSBub3QgaW5saW5l ZCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0bworCSBjaGVjayBmb3IgaW5saW5l LiAgKi8KKyAgICAgIGlmICghY2FsbAorCSAgfHwgIShkZWNsID0gZ2ltcGxl X2NhbGxfZm5kZWNsIChjYWxsKSkKKwkgIHx8ICFERUNMX0ZVTkNUSU9OX1ZF UlNJT05FRCAoZGVjbCkpCisJY29udGludWU7CisKKyAgICAgIGVfbmV4dCA9 IGUtPm5leHRfY2FsbGVyOworICAgICAgaWRlY2wgPSB0YXJnZXRtLmdldF9m dW5jdGlvbl92ZXJzaW9uc19kaXNwYXRjaGVyIChkZWNsKTsKKyAgICAgIGlm ICghaWRlY2wpCisJeworCSAgZXJyb3JfYXQgKGdpbXBsZV9sb2NhdGlvbiAo Y2FsbCksCisJCSAgICAiZGVmYXVsdCB0YXJnZXRfY2xvbmVzIGF0dHJpYnV0 ZSB3YXMgbm90IHNldCIpOworCX0KKyAgICAgIGlub2RlID0gY2dyYXBoX25v ZGU6OmdldCAoaWRlY2wpOworICAgICAgZ2NjX2Fzc2VydCAoaW5vZGUpOwor ICAgICAgcmVzb2x2ZXJfZGVjbCA9IHRhcmdldG0uZ2VuZXJhdGVfdmVyc2lv bl9kaXNwYXRjaGVyX2JvZHkgKGlub2RlKTsKKworICAgICAgLyogVXBkYXRl IGFsaWFzZXMuICAqLworICAgICAgaW5vZGUtPmFsaWFzID0gdHJ1ZTsKKyAg ICAgIGlub2RlLT5hbGlhc190YXJnZXQgPSByZXNvbHZlcl9kZWNsOworICAg ICAgaWYgKCFpbm9kZS0+YW5hbHl6ZWQpCisJaW5vZGUtPnJlc29sdmVfYWxp YXMgKGNncmFwaF9ub2RlOjpnZXQgKHJlc29sdmVyX2RlY2wpKTsKKworICAg ICAgZS0+cmVkaXJlY3RfY2FsbGVlIChpbm9kZSk7CisgICAgICAvKiAgU2lu Y2UgUkVESVJFQ1RfQ0FMTEVFIG1vZGlmaWVzIE5FWFRfQ0FMTEVSIGZpZWxk IHdlIG1vdmUgdG8KKwkgIHByZXZpb3VzbHkgc2V0IE5FWFRfQ0FMTEVSLiAg Ki8KKyAgICAgIGUgPSBOVUxMOworICAgIH0KK30KKworLyogUmV0dXJuIGxl bmd0aCBvZiBhdHRyaWJ1dGUgbmFtZXMgc3RyaW5nLAorICAgaWYgYXJnbGlz dCBjaGFpbiA+MSwgLTEgb3RoZXJ3aXNlLiAgKi8KKworc3RhdGljIGludAor Z2V0X2F0dHJfbGVuICh0cmVlIGFyZ2xpc3QpCit7CisgIHRyZWUgYXJnOwor ICBpbnQgc3RyX2xlbl9zdW0gPSAwOworICBpbnQgYXJnbnVtID0gMTsKKyAg Zm9yIChhcmcgPSBhcmdsaXN0OyBhcmc7IGFyZyA9IFRSRUVfQ0hBSU4gKGFy ZykpCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICBjb25z dCBjaGFyICpzdHIgPSBUUkVFX1NUUklOR19QT0lOVEVSIChUUkVFX1ZBTFVF IChhcmcpKTsKKyAgICAgIGludCBsZW4gPSBzdHJsZW4gKHN0cik7CisgICAg ICBzdHJfbGVuX3N1bSArPSBsZW4gKyAxOworICAgICAgaWYgKGFyZyAhPSBh cmdsaXN0KQorCWFyZ251bSsrOworICAgICAgZm9yIChpID0gMDsgaSA8IHN0 cmxlbiAoc3RyKTsgaSsrKQorCWlmIChzdHJbaV0gPT0gJywnKQorCSAgYXJn bnVtKys7CisgICAgfQorICBpZiAoYXJnbnVtID09IDEpCisgICAgcmV0dXJu IC0xOworICByZXR1cm4gc3RyX2xlbl9zdW07Cit9CisKKy8qIENyZWF0ZSBz dGluZyB3aXRoIGF0dHJpYnV0ZXMgc2VwYXJhdGVkIGJ5IGNvbW1hLgorICAg UmV0dXJuIG51bWJlciBvZiBhdHRyaWJ1dGVzLiAgKi8KKworc3RhdGljIGlu dAorZ2V0X2F0dHJfc3RyICh0cmVlIGFyZ2xpc3QsIGNoYXIgKmF0dHJfc3Ry KQoreworICB0cmVlIGFyZzsKKyAgc2l6ZV90IHN0cl9sZW5fc3VtID0gMDsK KyAgaW50IGFyZ251bSA9IDA7CisgIHN0cl9sZW5fc3VtID0gMDsKKyAgZm9y IChhcmcgPSBhcmdsaXN0OyBhcmc7IGFyZyA9IFRSRUVfQ0hBSU4gKGFyZykp CisgICAgeworICAgICAgY29uc3QgY2hhciAqc3RyID0gVFJFRV9TVFJJTkdf UE9JTlRFUiAoVFJFRV9WQUxVRSAoYXJnKSk7CisgICAgICBzaXplX3QgbGVu ID0gc3RybGVuIChzdHIpOworICAgICAgbWVtY3B5IChhdHRyX3N0ciArIHN0 cl9sZW5fc3VtLCBzdHIsIGxlbik7CisgICAgICBhdHRyX3N0cltzdHJfbGVu X3N1bSArIGxlbl0gPSBUUkVFX0NIQUlOIChhcmcpID8gJywnIDogJ1wwJzsK KyAgICAgIHN0cl9sZW5fc3VtICs9IGxlbiArIDE7CisgICAgICBhcmdudW0r KzsKKyAgICB9CisgIHJldHVybiBhcmdudW07Cit9CisKKy8qIFJldHVybiBu dW1iZXIgb2YgYXR0cmlidXRlcyBzZXBhcmF0ZWQgYnkgY29tbWEgYW5kIHB1 dCB0aGVtIGludG8gQVJHUy4KKyAgIElmIHRoZXJlIGlzIG5vIERFRkFVTFQg YXR0cmlidXRlIHJldHVybiAtMS4gICovCisKK3N0YXRpYyBpbnQKK3NlcGFy YXRlX2F0dHJzIChjaGFyICphdHRyX3N0ciwgY2hhciAqKmF0dHJzKQorewor ICBpbnQgaSA9IDA7CisgIGJvb2wgaGFzX2RlZmF1bHQgPSBmYWxzZTsKKyAg Y2hhciAqYXR0ciA9IHN0cnRvayAoYXR0cl9zdHIsICIsIik7CisgIHdoaWxl IChhdHRyICE9IE5VTEwpCisgICAgeworICAgICAgaWYgKHN0cmNtcCAoYXR0 ciwgImRlZmF1bHQiKSA9PSAwKQorCXsKKwkgIGhhc19kZWZhdWx0ID0gdHJ1 ZTsKKwkgIGF0dHIgPSBzdHJ0b2sgKE5VTEwsICIsIik7CisJICBjb250aW51 ZTsKKwl9CisgICAgICBhdHRyc1tpXSA9IGF0dHI7CisgICAgICBhdHRyID0g c3RydG9rIChOVUxMLCAiLCIpOworICAgICAgaSsrOworICAgIH0KKyAgaWYg KCFoYXNfZGVmYXVsdCkKKyAgICByZXR1cm4gLTE7CisgIHJldHVybiBpOwor fQorCisvKiAgUmV0dXJuIHRydWUgaWYgc3ltYm9sIGlzIHZhbGlkIGluIGFz c2VtYmxlciBuYW1lLiAgKi8KKworc3RhdGljIGJvb2wKK2lzX3ZhbGlkX2Fz bV9zeW1ib2wgKGNoYXIgYykKK3sKKyAgaWYgKCdhJyA8PSBjICYmIGMgPD0g J3onKQorICAgIHJldHVybiB0cnVlOworICBpZiAoJ0EnIDw9IGMgJiYgYyA8 PSAnWicpCisgICAgcmV0dXJuIHRydWU7CisgIGlmICgnMCcgPD0gYyAmJiBj IDw9ICc5JykKKyAgICByZXR1cm4gdHJ1ZTsKKyAgaWYgKGMgPT0gJ18nKQor ICAgIHJldHVybiB0cnVlOworICByZXR1cm4gZmFsc2U7Cit9CisKKy8qICBS ZXBsYWNlIGFsbCBub3QgdmFsaWQgYXNzZW1ibGVyIHN5bWJvbHMgd2l0aCAn XycuICAqLworCitzdGF0aWMgdm9pZAorY3JlYXRlX25ld19hc21fbmFtZSAo Y2hhciAqb2xkX2FzbV9uYW1lLCBjaGFyICpuZXdfYXNtX25hbWUpCit7Cisg IGludCBpOworICBpbnQgb2xkX25hbWVfbGVuID0gc3RybGVuIChvbGRfYXNt X25hbWUpOworCisgIC8qIFJlcGxhY2UgYWxsIG5vdCB2YWxpZCBhc3NlbWJs ZXIgc3ltYm9scyB3aXRoICdfJy4gICovCisgIGZvciAoaSA9IDA7IGkgPCBv bGRfbmFtZV9sZW47IGkrKykKKyAgICBpZiAoIWlzX3ZhbGlkX2FzbV9zeW1i b2wgKG9sZF9hc21fbmFtZVtpXSkpCisgICAgICBuZXdfYXNtX25hbWVbaV0g PSAnXyc7CisgICAgZWxzZQorICAgICAgbmV3X2FzbV9uYW1lW2ldID0gb2xk X2FzbV9uYW1lW2ldOworICBuZXdfYXNtX25hbWVbb2xkX25hbWVfbGVuXSA9 ICdcMCc7Cit9CisKKy8qICBDcmVhdGVzIHRhcmdldCBjbG9uZSBvZiBOT0RF LiAgKi8KKworc3RhdGljIGNncmFwaF9ub2RlICoKK2NyZWF0ZV90YXJnZXRf Y2xvbmUgKGNncmFwaF9ub2RlICpub2RlLCBib29sIGRlZmluaXRpb24sIGNo YXIgKm5hbWUpCit7CisgIGNncmFwaF9ub2RlICpuZXdfbm9kZTsKKyAgaWYg KGRlZmluaXRpb24pCisgICAgeworICAgICAgbmV3X25vZGUgPSBub2RlLT5j cmVhdGVfdmVyc2lvbl9jbG9uZV93aXRoX2JvZHkgKHZOVUxMLCBOVUxMLAor ICAgIAkJCQkJCSAgICAgICBOVUxMLCBmYWxzZSwKKwkJCQkJCSAgICAgICBO VUxMLCBOVUxMLAorCQkJCQkJICAgICAgIG5hbWUpOworICAgICAgbmV3X25v ZGUtPmZvcmNlX291dHB1dCA9IHRydWU7CisgICAgfQorICBlbHNlCisgICAg eworICAgICAgdHJlZSBuZXdfZGVjbCA9IGNvcHlfbm9kZSAobm9kZS0+ZGVj bCk7CisgICAgICBuZXdfbm9kZSA9IGNncmFwaF9ub2RlOjpnZXRfY3JlYXRl IChuZXdfZGVjbCk7CisgICAgfQorICByZXR1cm4gbmV3X25vZGU7Cit9CisK Ky8qIElmIHRoZSBmdW5jdGlvbiBpbiBOT0RFIGhhcyBtdWx0aXBsZSB0YXJn ZXQgYXR0cmlidXRlcworICAgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBjbG9u ZSBmb3IgZWFjaCB2YWxpZCB0YXJnZXQgYXR0cmlidXRlLiAgKi8KKworc3Rh dGljIGJvb2wKK2V4cGFuZF90YXJnZXRfY2xvbmVzIChzdHJ1Y3QgY2dyYXBo X25vZGUgKm5vZGUsIGJvb2wgZGVmZW5pdGlvbikKK3sKKyAgaW50IGk7Cisg IC8qIFBhcnNpbmcgdGFyZ2V0IGF0dHJpYnV0ZXMgc2VwYXJhdGVkIGJ5IGNv bW1hLiAgKi8KKyAgdHJlZSBhdHRyX3RhcmdldCA9IGxvb2t1cF9hdHRyaWJ1 dGUgKCJ0YXJnZXRfY2xvbmVzIiwKKwkJCQkgICAgICAgREVDTF9BVFRSSUJV VEVTIChub2RlLT5kZWNsKSk7CisgIC8qIE5vIHRhcmdldHMgc3BlY2lmaWVk LiAgKi8KKyAgaWYgKCFhdHRyX3RhcmdldCkKKyAgICByZXR1cm4gZmFsc2U7 CisKKyAgdHJlZSBhcmdsaXN0ID0gVFJFRV9WQUxVRSAoYXR0cl90YXJnZXQp OworICBpbnQgYXR0cl9sZW4gPSBnZXRfYXR0cl9sZW4gKGFyZ2xpc3QpOwor CisgIC8qIE5vIG5lZWQgdG8gY2xvbmUgZm9yIDEgdGFyZ2V0IGF0dHJpYnV0 ZS4gICovCisgIGlmIChhdHRyX2xlbiA9PSAtMSkKKyAgICB7CisgICAgICB3 YXJuaW5nX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAobm9kZS0+ZGVjbCks CisJCSAgMCwKKwkJICAic2luZ2xlIHRhcmdldF9jbG9uZXMgYXR0cmlidXRl IGlzIGlnbm9yZWQiKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK KyAgY2hhciAqYXR0cl9zdHIgPSBYTkVXVkVDIChjaGFyLCBhdHRyX2xlbik7 CisgIGludCBhdHRybnVtID0gZ2V0X2F0dHJfc3RyIChhcmdsaXN0LCBhdHRy X3N0cik7CisKKyAgY2hhciAqKmF0dHJzID0gWE5FV1ZFQyAoY2hhciAqLCBh dHRybnVtKTsKKyAgYXR0cm51bSA9IHNlcGFyYXRlX2F0dHJzIChhdHRyX3N0 ciwgYXR0cnMpOworCisgIGlmIChhdHRybnVtID09IC0xKQorICAgIHsKKyAg ICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAobm9kZS0+ZGVj bCksCisJCSJkZWZhdWx0IHRhcmdldCB3YXMgbm90IHNldCIpOworICAgICAg cmV0dXJuIGZhbHNlOworICAgIH0KKworICBjZ3JhcGhfZnVuY3Rpb25fdmVy c2lvbl9pbmZvICpkZWNsMV92ID0gTlVMTDsKKyAgY2dyYXBoX2Z1bmN0aW9u X3ZlcnNpb25faW5mbyAqZGVjbDJfdiA9IE5VTEw7CisgIGNncmFwaF9mdW5j dGlvbl92ZXJzaW9uX2luZm8gKmJlZm9yZSA9IE5VTEw7CisgIGNncmFwaF9m dW5jdGlvbl92ZXJzaW9uX2luZm8gKmFmdGVyID0gTlVMTDsKKyAgZGVjbDFf diA9IG5vZGUtPmZ1bmN0aW9uX3ZlcnNpb24gKCk7CisgIGlmIChkZWNsMV92 ID09IE5VTEwpCisgICAgZGVjbDFfdiA9IG5vZGUtPmluc2VydF9uZXdfZnVu Y3Rpb25fdmVyc2lvbiAoKTsKKyAgYmVmb3JlID0gZGVjbDFfdjsKKyAgREVD TF9GVU5DVElPTl9WRVJTSU9ORUQgKG5vZGUtPmRlY2wpID0gMTsKKworCisg IGZvciAoaSA9IDA7IGkgPCBhdHRybnVtOyBpKyspCisgICAgeworICAgICAg Y2hhciAqYXR0ciA9IGF0dHJzW2ldOworICAgICAgY2hhciAqc3VmZml4ID0g WE5FV1ZFQyAoY2hhciwgc3RybGVuIChhdHRyKSArIDEpOworICAgICAgY3Jl YXRlX25ld19hc21fbmFtZSAoYXR0ciwgYXNtX3N1ZmZpeCk7CisgICAgICAv KiBDcmVhdGUgbmV3IHRhcmdldCBjbG9uZS4gICovCisgICAgICBjZ3JhcGhf bm9kZSAqbmV3X25vZGUgPSBjcmVhdGVfdGFyZ2V0X2Nsb25lIChub2RlLCBk ZWZlbml0aW9uLCBzdWZmaXgpOworICAgICAgWERFTEVURVZFQyAoc3VmZml4 KTsKKworICAgICAgLyogU2V0IG5ldyBhdHRyaWJ1dGUgZm9yIHRoZSBjbG9u ZS4gICovCisgICAgICB0cmVlIGF0dHJpYnV0ZXMgPSBtYWtlX2F0dHJpYnV0 ZSAoInRhcmdldCIsIGF0dHIsCisJCQkJCURFQ0xfQVRUUklCVVRFUyAobmV3 X25vZGUtPmRlY2wpKTsKKyAgICAgIERFQ0xfQVRUUklCVVRFUyAobmV3X25v ZGUtPmRlY2wpID0gYXR0cmlidXRlczsKKyAgICAgIGlmICghdGFyZ2V0bS50 YXJnZXRfb3B0aW9uLnZhbGlkX2F0dHJpYnV0ZV9wIChuZXdfbm9kZS0+ZGVj bCwgTlVMTCwKKwkJCQkJCSAgICBUUkVFX1ZBTFVFIChhdHRyaWJ1dGVzKSwg MCkpCisJeworCSAgd2FybmluZ19hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04g KG5vZGUtPmRlY2wpLCAwLAorCQkgICAgICAiYXR0cmlidXRlKHRhcmdldF9j bG9uZXMoXCIlc1wiKSkgaXMgbm90ICIKKwkJICAgICAgInZhbGlkIGZvciBj dXJyZW50IHRhcmdldCIsIGF0dHIpOworCSAgY29udGludWU7CisJfQorCisg ICAgICBkZWNsMl92ID0gbmV3X25vZGUtPmZ1bmN0aW9uX3ZlcnNpb24gKCk7 CisgICAgICBpZiAoZGVjbDJfdiAhPSBOVUxMKQorICAgICAgICBjb250aW51 ZTsKKyAgICAgIGRlY2wyX3YgPSBuZXdfbm9kZS0+aW5zZXJ0X25ld19mdW5j dGlvbl92ZXJzaW9uICgpOworCisgICAgICAvKiBDaGFpbiBkZWNsMl92IGFu ZCBkZWNsMV92LiAgQWxsIHNlbWFudGljYWxseSBpZGVudGljYWwgdmVyc2lv bnMKKwkgd2lsbCBiZSBjaGFpbmVkIHRvZ2V0aGVyLiAgKi8KKworICAgICAg YWZ0ZXIgPSBkZWNsMl92OworICAgICAgd2hpbGUgKGJlZm9yZS0+bmV4dCAh PSBOVUxMKQorCWJlZm9yZSA9IGJlZm9yZS0+bmV4dDsKKyAgICAgIHdoaWxl IChhZnRlci0+cHJldiAhPSBOVUxMKQorCWFmdGVyID0gYWZ0ZXItPnByZXY7 CisKKyAgICAgIGJlZm9yZS0+bmV4dCA9IGFmdGVyOworICAgICAgYWZ0ZXIt PnByZXYgPSBiZWZvcmU7CisgICAgICBERUNMX0ZVTkNUSU9OX1ZFUlNJT05F RCAobmV3X25vZGUtPmRlY2wpID0gMTsKKyAgICB9CisgIC8qIFNldHRpbmcg bmV3IGF0dHJpYnV0ZSB0byBpbml0aWFsIGZ1bmN0aW9uLiAgKi8KKyAgdHJl ZSBhdHRyaWJ1dGVzID0gIG1ha2VfYXR0cmlidXRlICgidGFyZ2V0IiwgImRl ZmF1bHQiLAorCQkJCSAgICAgREVDTF9BVFRSSUJVVEVTIChub2RlLT5kZWNs KSk7CisgIERFQ0xfQVRUUklCVVRFUyAobm9kZS0+ZGVjbCkgPSBhdHRyaWJ1 dGVzOworICBpZiAoIXRhcmdldG0udGFyZ2V0X29wdGlvbi52YWxpZF9hdHRy aWJ1dGVfcCAobm9kZS0+ZGVjbCwgTlVMTCwKKwkJCQkJCVRSRUVfVkFMVUUg KGF0dHJpYnV0ZXMpLCAwKSkKKyAgICB7CisgICAgICBlcnJvcl9hdCAoREVD TF9TT1VSQ0VfTE9DQVRJT04gKG5vZGUtPmRlY2wpLAorCQkiYXR0cmlidXRl KHRhcmdldF9jbG9uZXMoXCJkZWZhdWx0XCIpKSBpcyBub3QgIgorCQkidmFs aWQgZm9yIGN1cnJlbnQgdGFyZ2V0Iik7CisgICAgICByZXR1cm4gZmFsc2U7 CisgICAgfQorCisgIFhERUxFVEVWRUMgKGF0dHJzKTsKKyAgWERFTEVURVZF QyAoYXR0cl9zdHIpOworICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJv b2wgdGFyZ2V0X2Nsb25lX3Bhc3M7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQK K2lwYV90YXJnZXRfY2xvbmUgKHZvaWQpCit7CisgIHN0cnVjdCBjZ3JhcGhf bm9kZSAqbm9kZTsKKyAgdGFyZ2V0X2Nsb25lX3Bhc3MgPSBmYWxzZTsKKyAg Rk9SX0VBQ0hfRlVOQ1RJT04gKG5vZGUpCisgICAgaWYgKG5vZGUtPmRlZmlu aXRpb24pCisgICAgICB0YXJnZXRfY2xvbmVfcGFzcyB8PSBleHBhbmRfdGFy Z2V0X2Nsb25lcyAobm9kZSwgdHJ1ZSk7CisgIHJldHVybiAwOworfQorCitu YW1lc3BhY2UgeworCitjb25zdCBwYXNzX2RhdGEgcGFzc19kYXRhX3Rhcmdl dF9jbG9uZSA9Cit7CisgIFNJTVBMRV9JUEFfUEFTUywJCS8qIHR5cGUgKi8K KyAgInRhcmdldGNsb25lIiwJCS8qIG5hbWUgKi8KKyAgT1BUR1JPVVBfTk9O RSwJCS8qIG9wdGluZm9fZmxhZ3MgKi8KKyAgVFZfTk9ORSwJCQkvKiB0dl9p ZCAqLworICAoIFBST1Bfc3NhIHwgUFJPUF9jZmcgKSwJLyogcHJvcGVydGll c19yZXF1aXJlZCAqLworICAwLAkJCQkvKiBwcm9wZXJ0aWVzX3Byb3ZpZGVk ICovCisgIDAsCQkJCS8qIHByb3BlcnRpZXNfZGVzdHJveWVkICovCisgIDAs CQkJCS8qIHRvZG9fZmxhZ3Nfc3RhcnQgKi8KKyAgMAkJCQkvKiB0b2RvX2Zs YWdzX2ZpbmlzaCAqLworfTsKKworY2xhc3MgcGFzc190YXJnZXRfY2xvbmUg OiBwdWJsaWMgc2ltcGxlX2lwYV9vcHRfcGFzcworeworcHVibGljOgorICBw YXNzX3RhcmdldF9jbG9uZSAoZ2NjOjpjb250ZXh0ICpjdHh0KQorICAgIDog c2ltcGxlX2lwYV9vcHRfcGFzcyAocGFzc19kYXRhX3RhcmdldF9jbG9uZSwg Y3R4dCkKKyAge30KKworICAvKiBvcHRfcGFzcyBtZXRob2RzOiAqLworICB2 aXJ0dWFsIGJvb2wgZ2F0ZSAoZnVuY3Rpb24gKik7CisgIHZpcnR1YWwgdW5z aWduZWQgaW50IGV4ZWN1dGUgKGZ1bmN0aW9uICopIHsgcmV0dXJuIGlwYV90 YXJnZXRfY2xvbmUgKCk7IH0KK307CisKK2Jvb2wKK3Bhc3NfdGFyZ2V0X2Ns b25lOjpnYXRlIChmdW5jdGlvbiAqKQoreworICByZXR1cm4gdHJ1ZTsKK30K KworfSAvLyBhbm9uIG5hbWVzcGFjZQorCitzaW1wbGVfaXBhX29wdF9wYXNz ICoKK21ha2VfcGFzc190YXJnZXRfY2xvbmUgKGdjYzo6Y29udGV4dCAqY3R4 dCkKK3sKKyAgcmV0dXJuIG5ldyBwYXNzX3RhcmdldF9jbG9uZSAoY3R4dCk7 Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2lwYV9kaXNwYXRjaGVyX2Nh bGxzICh2b2lkKQoreworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGU7Cisg IEZPUl9FQUNIX0ZVTkNUSU9OIChub2RlKQorICAgIGlmICghbm9kZS0+ZGVm aW5pdGlvbikKKyAgICAgIHRhcmdldF9jbG9uZV9wYXNzIHw9IGV4cGFuZF90 YXJnZXRfY2xvbmVzIChub2RlLCBmYWxzZSk7CisgIGlmICh0YXJnZXRfY2xv bmVfcGFzcykKKyAgICBGT1JfRUFDSF9GVU5DVElPTiAobm9kZSkKKyAgICAg IGNyZWF0ZV9kaXNwYXRjaGVyX2NhbGxzIChub2RlKTsKKyAgcmV0dXJuIDA7 Cit9CisKK25hbWVzcGFjZSB7CisKK2NvbnN0IHBhc3NfZGF0YSBwYXNzX2Rh dGFfZGlzcGF0Y2hlcl9jYWxscyA9Cit7CisgIFNJTVBMRV9JUEFfUEFTUywJ CS8qIHR5cGUgKi8KKyAgImRpc3BhY2hlcmNhbGxzIiwJCS8qIG5hbWUgKi8K KyAgT1BUR1JPVVBfTk9ORSwJCS8qIG9wdGluZm9fZmxhZ3MgKi8KKyAgVFZf Tk9ORSwJCQkvKiB0dl9pZCAqLworICAoIFBST1Bfc3NhIHwgUFJPUF9jZmcg KSwJLyogcHJvcGVydGllc19yZXF1aXJlZCAqLworICAwLAkJCQkvKiBwcm9w ZXJ0aWVzX3Byb3ZpZGVkICovCisgIDAsCQkJCS8qIHByb3BlcnRpZXNfZGVz dHJveWVkICovCisgIDAsCQkJCS8qIHRvZG9fZmxhZ3Nfc3RhcnQgKi8KKyAg MAkJCQkvKiB0b2RvX2ZsYWdzX2ZpbmlzaCAqLworfTsKKworY2xhc3MgcGFz c19kaXNwYXRjaGVyX2NhbGxzIDogcHVibGljIHNpbXBsZV9pcGFfb3B0X3Bh c3MKK3sKK3B1YmxpYzoKKyAgcGFzc19kaXNwYXRjaGVyX2NhbGxzIChnY2M6 OmNvbnRleHQgKmN0eHQpCisgICAgOiBzaW1wbGVfaXBhX29wdF9wYXNzIChw YXNzX2RhdGFfZGlzcGF0Y2hlcl9jYWxscywgY3R4dCkKKyAge30KKworICAv KiBvcHRfcGFzcyBtZXRob2RzOiAqLworICB2aXJ0dWFsIGJvb2wgZ2F0ZSAo ZnVuY3Rpb24gKik7CisgIHZpcnR1YWwgdW5zaWduZWQgaW50IGV4ZWN1dGUg KGZ1bmN0aW9uICopIHsgcmV0dXJuIGlwYV9kaXNwYXRjaGVyX2NhbGxzICgp OyB9Cit9OworCitib29sCitwYXNzX2Rpc3BhdGNoZXJfY2FsbHM6OmdhdGUg KGZ1bmN0aW9uICopCit7CisgIHJldHVybiB0cnVlOworfQorCit9IC8vIGFu b24gbmFtZXNwYWNlCisKK3NpbXBsZV9pcGFfb3B0X3Bhc3MgKgorbWFrZV9w YXNzX2Rpc3BhdGNoZXJfY2FsbHMgKGdjYzo6Y29udGV4dCAqY3R4dCkKK3sK KyAgcmV0dXJuIG5ldyBwYXNzX2Rpc3BhdGNoZXJfY2FsbHMgKGN0eHQpOwor fQpkaWZmIC0tZ2l0IGEvZ2NjL29tcC1sb3cuYyBiL2djYy9vbXAtbG93LmMK aW5kZXggYjQ0NDg2NC4uYzg1Y2U0ZCAxMDA2NDQKLS0tIGEvZ2NjL29tcC1s b3cuYworKysgYi9nY2Mvb21wLWxvdy5jCkBAIC0xNzM0MCw2ICsxNzM0MCw3 IEBAIGlwYV9vbXBfc2ltZF9jbG9uZSAodm9pZCkKICAgc3RydWN0IGNncmFw aF9ub2RlICpub2RlOwogICBGT1JfRUFDSF9GVU5DVElPTiAobm9kZSkKICAg ICBleHBhbmRfc2ltZF9jbG9uZXMgKG5vZGUpOworCiAgIHJldHVybiAwOwog fQogCmRpZmYgLS1naXQgYS9nY2MvcGFzc2VzLmRlZiBiL2djYy9wYXNzZXMu ZGVmCmluZGV4IGRjM2Y0NGMuLjU3Y2JhMzMgMTAwNjQ0Ci0tLSBhL2djYy9w YXNzZXMuZGVmCisrKyBiL2djYy9wYXNzZXMuZGVmCkBAIC0xMjQsNiArMTI0 LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4g IElmIG5vdCBzZWUKICAgTkVYVF9QQVNTIChwYXNzX2lwYV9kZXZpcnQpOwog ICBORVhUX1BBU1MgKHBhc3NfaXBhX2NwKTsKICAgTkVYVF9QQVNTIChwYXNz X2lwYV9jZHRvcl9tZXJnZSk7CisgIE5FWFRfUEFTUyAocGFzc190YXJnZXRf Y2xvbmUpOwogICBORVhUX1BBU1MgKHBhc3NfaXBhX2lubGluZSk7CiAgIE5F WFRfUEFTUyAocGFzc19pcGFfcHVyZV9jb25zdCk7CiAgIE5FWFRfUEFTUyAo cGFzc19pcGFfcmVmZXJlbmNlKTsKQEAgLTE0MCw2ICsxNDEsNyBAQCBhbG9u ZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQogICAgICBjb21waWxlZCB1bml0LiAgKi8KICAgSU5TRVJUX1BBU1NFU19B RlRFUiAoYWxsX2xhdGVfaXBhX3Bhc3NlcykKICAgTkVYVF9QQVNTIChwYXNz X2lwYV9wdGEpOworICBORVhUX1BBU1MgKHBhc3NfZGlzcGF0Y2hlcl9jYWxs cyk7CiAgIE5FWFRfUEFTUyAocGFzc19vbXBfc2ltZF9jbG9uZSk7CiAgIFRF Uk1JTkFURV9QQVNTX0xJU1QgKCkKIApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvZXh0L212YzEuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRn L2V4dC9tdmMxLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZmJmOTAxMQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv ZysrLmRnL2V4dC9tdmMxLkMKQEAgLTAsMCArMSwzNCBAQAorLyogeyBkZy1k byBydW4geyB0YXJnZXQgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gKi8KKwor X19hdHRyaWJ1dGVfXygodGFyZ2V0X2Nsb25lcygiYXZ4IiwiYXJjaD1zbG0i LCJhcmNoPWNvcmUtYXZ4MiIsImRlZmF1bHQiKSkpCitpbnQKK2ZvbyAoKQor eworICByZXR1cm4gLTI7Cit9CisKK19fYXR0cmlidXRlX18oKHRhcmdldCgi YXZ4IiwiYXJjaD1jb3JlLWF2eDIiKSkpCitpbnQKK2JhciAoKQoreworICBy ZXR1cm4gMjsKK30KKworX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJkZWZhdWx0 IikpKQoraW50CitiYXIgKCkKK3sKKyAgcmV0dXJuIDI7Cit9CisKK2ludAor bWFpbiAoKQoreworICBpbnQgciA9IDA7CisgIHIgKz0gYmFyICgpOworICBy ICs9IGZvbyAoKTsKKyAgciArPSBiYXIgKCk7CisgIHIgKz0gZm9vICgpOwor ICByICs9IGJhciAoKTsKKyAgcmV0dXJuIHIgLSAyOworfQpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZXh0L212YzIuQyBiL2djYy90ZXN0 c3VpdGUvZysrLmRnL2V4dC9tdmMyLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZTdhYmFiOAotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2V4dC9tdmMyLkMKQEAgLTAsMCArMSw4IEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgaT84Ni0qLSogeDg2XzY0 LSotKiB9IH0gKi8KKworX19hdHRyaWJ1dGVfXygodGFyZ2V0X2Nsb25lcygi YXZ4IiwiYXJjaD1zbG0iLCJkZWZhdWx0IikpKQorX19hdHRyaWJ1dGVfXygo dGFyZ2V0KCJhdngiKSkpCitpbnQgZm9vICgpOyAvKiB7IGRnLXdhcm5pbmcg Iid0YXJnZXQnIGF0dHJpYnV0ZSBpZ25vcmVkIGR1ZSB0byBjb25mbGljdCB3 aXRoICd0YXJnZXRfY2xvbmVzJyBhdHRyaWJ1dGUiIH0gKi8KKworX19hdHRy aWJ1dGVfXygodGFyZ2V0X2Nsb25lcygiYXZ4IiwiYXJjaD1zbG0iLCJkZWZh dWx0IiksYWx3YXlzX2lubGluZSkpCitpbnQgYmFyICgpOyAvKiB7IGRnLXdh cm5pbmcgIidhbHdheXNfaW5saW5lJyBhdHRyaWJ1dGUgaWdub3JlZCBkdWUg dG8gY29uZmxpY3Qgd2l0aCAndGFyZ2V0X2Nsb25lcycgYXR0cmlidXRlIiB9 ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9leHQvbXZj My5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZXh0L212YzMuQwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWJlYmY3Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZXh0L212YzMuQwpA QCAtMCwwICsxLDggQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBp Pzg2LSotKiB4ODZfNjQtKi0qIH0gfSAqLworCitfX2F0dHJpYnV0ZV9fKCh0 YXJnZXQoImF2eCIpKSkKK19fYXR0cmlidXRlX18oKHRhcmdldF9jbG9uZXMo ImF2eCIsImFyY2g9c2xtIiwiZGVmYXVsdCIpKSkKK2ludCBmb28gKCk7IC8q IHsgZGctd2FybmluZyAiJ3RhcmdldF9jbG9uZXMnIGF0dHJpYnV0ZSBpZ25v cmVkIGR1ZSB0byBjb25mbGljdCB3aXRoICd0YXJnZXQnIGF0dHJpYnV0ZSIg fSAqLworCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lLHRhcmdldF9j bG9uZXMoImF2eCIsImFyY2g9c2xtIiwiZGVmYXVsdCIpKSkKK2ludCBiYXIg KCk7IC8qIHsgZGctd2FybmluZyAiJ3RhcmdldF9jbG9uZXMnIGF0dHJpYnV0 ZSBpZ25vcmVkIGR1ZSB0byBjb25mbGljdCB3aXRoICdhbHdheXNfaW5saW5l JyBhdHRyaWJ1dGUiIH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv ZysrLmRnL2V4dC9tdmM0LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9leHQv bXZjNC5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4 ZTM1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5k Zy9leHQvbXZjNC5DCkBAIC0wLDAgKzEsMzQgQEAKKy8qIHsgZGctZG8gY29t cGlsZSB7IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSAqLworLyog eyBkZy1vcHRpb25zICItbWF2eCIgfSAqLworCisjaW5jbHVkZSA8aW1taW50 cmluLmg+CisKK19fbTI1NiB4LCB5LCB6OworCitfX2F0dHJpYnV0ZV9fKCh0 YXJnZXQoImF2eCIpKSkKK2ludCBiYXIoKQoreworICB4ID0gX21tMjU2X2Fk ZF9wcyAoeSwgeik7CisgIHJldHVybiAxOworfQorCitfX2F0dHJpYnV0ZV9f KCh0YXJnZXQoImRlZmF1bHQiKSkpCitpbnQgYmFyKCkKK3sKKyAgcmV0dXJu IDI7Cit9CisKK2ludAorZm9vYmFyKCkKK3sKKyAgaWYgKF9fYnVpbHRpbl9j cHVfc3VwcG9ydHMgKCJhdngiKSkKKyAgICByZXR1cm4gYmFyKCk7CisgIGVs c2UKKyAgICByZXR1cm4gMDsKK30KKworX19hdHRyaWJ1dGVfXygodGFyZ2V0 X2Nsb25lcygiZGVmYXVsdCIsInNzZTMiKSkpCitpbnQgZm9vKCkKK3sKKyAg cmV0dXJuIGZvb2JhcigpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvbXZjMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvbXZjMS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMDI3MjEK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9tdmMx LmMKQEAgLTAsMCArMSwyNiBAQAorLyogeyBkZy1kbyBydW4geyB0YXJnZXQg aT84Ni0qLSogeDg2XzY0LSotKiB9IH0gKi8KKworX19hdHRyaWJ1dGVfXygo dGFyZ2V0X2Nsb25lcygiYXZ4IiwiYXJjaD1zbG0iLCJhcmNoPWNvcmUtYXZ4 MiIsImRlZmF1bHQiKSkpCitpbnQKK2ZvbyAoKQoreworICByZXR1cm4gLTI7 Cit9CisKK2ludAorYmFyICgpCit7CisgIHJldHVybiAyOworfQorCitpbnQK K21haW4gKCkKK3sKKyAgaW50IHIgPSAwOworICByICs9IGJhciAoKTsKKyAg ciArPSBmb28gKCk7CisgIHIgKz0gYmFyICgpOworICByICs9IGZvbyAoKTsK KyAgciArPSBiYXIgKCk7CisgIHJldHVybiByIC0gMjsKK30KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL212YzIuYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL212YzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5hZjBjNmY3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvbXZjMi5jCkBAIC0wLDAgKzEsNCBAQAorLyogeyBkZy1k byBjb21waWxlIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9ICov CisKK19fYXR0cmlidXRlX18oKHRhcmdldF9jbG9uZXMoImF2eCIsImFyY2g9 c2xtIiwiYXJjaD1jb3JlLWF2eDIiKSkpCitpbnQgZm9vICgpOwpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvbXZjMy5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvbXZjMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjNhZjNlMzUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy9tdmMzLmMKQEAgLTAsMCArMSwxMCBAQAorLyogeyBk Zy1kbyBjb21waWxlIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9 ICovCisKK19fYXR0cmlidXRlX18oKHRhcmdldF9jbG9uZXMoImF2eCIsImFy Y2g9c2xtIiwiYXJjaD1jb3JlLWF2eDIiKSkpCitpbnQgZm9vICgpOyAvKiB7 IGRnLWVycm9yICJkZWZhdWx0IHRhcmdldCB3YXMgbm90IHNldCIgfSAqLwor CitpbnQKK2JhciAoKQoreworICByZXR1cm4gZm9vKCk7Cit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9tdmM0LmMgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy9tdmM0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNDhlYzlhMQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL212YzQuYwpAQCAtMCwwICsxLDI2IEBACisvKiB7IGRn LWRvIHJ1biB7IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSAqLwor CitfX2F0dHJpYnV0ZV9fKCh0YXJnZXRfY2xvbmVzKCJkZWZhdWx0IiwiYXZ4 IiwiZGVmYXVsdCIpKSkKK2ludAorZm9vICgpCit7CisgIHJldHVybiAtMjsK K30KKworaW50CitiYXIgKCkKK3sKKyAgcmV0dXJuIDI7Cit9CisKK2ludAor bWFpbiAoKQoreworICBpbnQgciA9IDA7CisgIHIgKz0gYmFyICgpOworICBy ICs9IGZvbyAoKTsKKyAgciArPSBiYXIgKCk7CisgIHIgKz0gZm9vICgpOwor ICByICs9IGJhciAoKTsKKyAgcmV0dXJuIHIgLSAyOworfQpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvbXZjNS5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvbXZjNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjg5MDAxZTUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy9tdmM1LmMKQEAgLTAsMCArMSwxNyBAQAorLyogeyBkZy1k byBjb21waWxlIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1mbm8taW5saW5lIiB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgImZvby5pZnVuYyIgNiB9 IH0gKi8KKworX19hdHRyaWJ1dGVfXygodGFyZ2V0X2Nsb25lcygiZGVmYXVs dCIsImF2eCIsImF2eDIiKSkpCitpbnQKK2ZvbyAoKQoreworICByZXR1cm4g MTA7Cit9CisKK19fYXR0cmlidXRlX18oKHRhcmdldF9jbG9uZXMoImRlZmF1 bHQiLCJhdngiLCJhdngyIikpKQoraW50CitiYXIgKCkKK3sKKyAgcmV0dXJu IC1mb28gKCk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5k Zy9tdmM2LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9tdmM2LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyMTk4NQotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL212YzYuYwpAQCAt MCwwICsxLDE2IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgaT84 Ni0qLSogeDg2XzY0LSotKiB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8z IiB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZwc2h1 ZmIiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJw dW5wY2tsYnciIH0gfSAqLworCitfX2F0dHJpYnV0ZV9fKCh0YXJnZXRfY2xv bmVzKCJhcmNoPWNvcmUtYXZ4MiIsImFyY2g9c2xtIiwiZGVmYXVsdCIpKSkK K3ZvaWQKK2ZvbyhjaGFyICppbiwgY2hhciAqb3V0LCBpbnQgc2l6ZSkKK3sK KyAgaW50IGk7CisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICB7 CisJb3V0WzIgKiBpXSA9IGluW2ldOworCW91dFsyICogaSArIDFdID0gaW5b aV07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvbXZjNy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvbXZjNy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MWQ3OGUKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9tdmM3LmMKQEAg LTAsMCArMSwxMCBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IGk/ ODYtKi0qIHg4Nl82NC0qLSogfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMgImZvby5pZnVuYyIgNCB9IH0gKi8KKworX19h dHRyaWJ1dGVfXygodGFyZ2V0X2Nsb25lcygiYXZ4IiwiZGVmYXVsdCIsImFy Y2g9c2xtIiwiYXJjaD1jb3JlLWF2eDIiKSkpCitpbnQgZm9vICgpOworCitp bnQgbWFpbigpCit7CisgIHJldHVybiBmb28oKTsKK30KZGlmZiAtLWdpdCBh L2djYy90cmVlLXBhc3MuaCBiL2djYy90cmVlLXBhc3MuaAppbmRleCA5MWY2 M2E4Li4zMTkxZTJiIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1wYXNzLmgKKysr IGIvZ2NjL3RyZWUtcGFzcy5oCkBAIC00ODMsNiArNDgzLDggQEAgZXh0ZXJu IGlwYV9vcHRfcGFzc19kICptYWtlX3Bhc3NfaXBhX3JlZmVyZW5jZSAoZ2Nj Ojpjb250ZXh0ICpjdHh0KTsKIGV4dGVybiBpcGFfb3B0X3Bhc3NfZCAqbWFr ZV9wYXNzX2lwYV9wdXJlX2NvbnN0IChnY2M6OmNvbnRleHQgKmN0eHQpOwog ZXh0ZXJuIHNpbXBsZV9pcGFfb3B0X3Bhc3MgKm1ha2VfcGFzc19pcGFfcHRh IChnY2M6OmNvbnRleHQgKmN0eHQpOwogZXh0ZXJuIHNpbXBsZV9pcGFfb3B0 X3Bhc3MgKm1ha2VfcGFzc19pcGFfdG0gKGdjYzo6Y29udGV4dCAqY3R4dCk7 CitleHRlcm4gc2ltcGxlX2lwYV9vcHRfcGFzcyAqbWFrZV9wYXNzX3Rhcmdl dF9jbG9uZSAoZ2NjOjpjb250ZXh0ICpjdHh0KTsKK2V4dGVybiBzaW1wbGVf aXBhX29wdF9wYXNzICptYWtlX3Bhc3NfZGlzcGF0Y2hlcl9jYWxscyAoZ2Nj Ojpjb250ZXh0ICpjdHh0KTsKIGV4dGVybiBzaW1wbGVfaXBhX29wdF9wYXNz ICptYWtlX3Bhc3Nfb21wX3NpbWRfY2xvbmUgKGdjYzo6Y29udGV4dCAqY3R4 dCk7CiBleHRlcm4gaXBhX29wdF9wYXNzX2QgKm1ha2VfcGFzc19pcGFfcHJv ZmlsZSAoZ2NjOjpjb250ZXh0ICpjdHh0KTsKIGV4dGVybiBpcGFfb3B0X3Bh c3NfZCAqbWFrZV9wYXNzX2lwYV9jZHRvcl9tZXJnZSAoZ2NjOjpjb250ZXh0 ICpjdHh0KTsK --001a11441386939c7605234244d1--