From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sender4-pp-o90.zoho.com (sender4-pp-o90.zoho.com [136.143.188.90]) by sourceware.org (Postfix) with ESMTPS id 10A863858C1F; Sat, 3 Dec 2022 03:10:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 10A863858C1F Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=zoho.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=zoho.com ARC-Seal: i=1; a=rsa-sha256; t=1670037030; cv=none; d=zohomail.com; s=zohoarc; b=KQOTSKelOpjSpYpZtRT4sHySQRTcgPYFdk7f2eHvMEYqvBjRaLiJB6dN5jeVal4MCBNU0jGsP46kH47twA1zzF6aO1DH3UTjRcBoatuSEV2pP7ILOxmw1hYYPoedKNEFxbMf0DtREVbbHphqQv26VAfuGMIgmH/IEcl8XFrf/aA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1670037030; h=Content-Type:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=IvxvgJ2M2tas0sEIqJ+JwJd7bheuud72hcJXJDgk/sY=; b=cN6tpEq60ml9B1pXMcEsFK4WERzi1oEI9mnLj59kTqD8FvGyolr+GzaXVOqt4jlI2qG58DN93gz5bFIrkVnmy9v15RDgddzQfE2zUtquELinrU1wxdJ0sMwDuhMM3v8bg4Us5qE9LJnzY9b2l0pN7E1pCZWUSF0NWVSaFm+k3Vk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=zoho.com; spf=pass smtp.mailfrom=bouanto@zoho.com; dmarc=pass header.from= DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=zapps768; d=zoho.com; h=message-id:subject:from:to:cc:date:in-reply-to:references:content-type:user-agent:mime-version; b=rywbo/1a8jhIOk9e2i7K7wUHriz6xHCtlLJxNR6akbaY7/R3lWPxqYxqiQFexYGGNabAEeBD6GoT l5xlFIrnSYI8uFr3VtDFRYf/ASRcz3C9WqmGn3HirDajSqJUN4jf DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1670037030; s=zm2022; d=zoho.com; i=bouanto@zoho.com; h=Message-ID:Subject:Subject:From:From:To:To:Cc:Cc:Date:Date:In-Reply-To:References:Content-Type:MIME-Version:Message-Id:Reply-To; bh=IvxvgJ2M2tas0sEIqJ+JwJd7bheuud72hcJXJDgk/sY=; b=Xy0gESPYLNP5V8tnBUXd6a5gZN6fHxAraaeLRMuXXRgTbHf8ooTfTlkUmdW7xUZk 8djTRfvlo8oX8LPcfsPKAQUaerUmqvlJCDVenOBbUzNwOxAr8a8YpOC4upy1FwODyzo F7XGCNGSlha1t78dDCx+IJSX7Qoa6crK/D8UhGSo= Received: from [192.168.1.174] (38.87.11.6 [38.87.11.6]) by mx.zohomail.com with SMTPS id 1670037029334392.4095605547352; Fri, 2 Dec 2022 19:10:29 -0800 (PST) Message-ID: Subject: Re: [PATCH] libgccjit: Fix float vector comparison From: Antoni Boucher To: David Malcolm , gcc-patches@gcc.gnu.org, jit@gcc.gnu.org Cc: Guillaume Gomez Date: Fri, 02 Dec 2022 22:10:27 -0500 In-Reply-To: <138f2f9ca9eeee76f3fc7532e32a535ac8884fe2.camel@redhat.com> References: <30eb27a08792e1e2b92e663753f22e31f65c7791.camel@redhat.com> <15fbee19972751bfa05c24ec95bc441c621c98ad.camel@zoho.com> <74150b934836583a532d310c68d29384daf2fbd0.camel@redhat.com> <5827fc95314506387b9b0e5c5da865eb28cf28e8.camel@zoho.com> <138f2f9ca9eeee76f3fc7532e32a535ac8884fe2.camel@redhat.com> Content-Type: multipart/mixed; boundary="=-39spO7Hk5A2+R2lKHe3z" User-Agent: Evolution 3.46.1 MIME-Version: 1.0 X-Zoho-Virus-Status: 1 X-ZohoMailClient: External X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,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: --=-39spO7Hk5A2+R2lKHe3z Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I'm posting the patch again so that you can double-check that I wrote the DCO for the co-author correctly. Does that look good? Thanks. On Thu, 2022-12-01 at 11:57 -0500, David Malcolm wrote: > On Thu, 2022-12-01 at 10:33 -0500, Antoni Boucher wrote: > > On Thu, 2022-12-01 at 10:25 -0500, David Malcolm wrote: > > > On Thu, 2022-12-01 at 10:01 -0500, Antoni Boucher wrote: > > > > Thanks, David. > > > > Since we're not in phase 1 anymore, do we need an approval > > > > before > > > > I > > > > merge like last year or can I merge immediately? > > >=20 > > > I think it counts as a bug fix and thus you can go ahead and > > > merge > > > (assuming you've done the usual testing). > > >=20 > > > > I also have many other patches (all in jit) that I need to > > > > prepare > > > > and > > > > post to this mailing list. > > > > What do you think? > > >=20 > > > Given that you're one of the main users of libgccjit I think > > > there's > > > a > > > case for stretching the deadlines a bit here. > > >=20 > > > Do you have a repo I can look at? > >=20 > > Yes! The commits are in my fork: > > https://github.com/antoyo/gcc > >=20 > > The only big one is the one adding support for target-dependent > > builtins: > > https://github.com/antoyo/gcc/commit/6d4313d4c02dd878f43917c978f299f511= 9330f0 > >=20 > > Regarding this one, there's the issue that since we record the > > builtins > > on the first context run, we only have access to the builtins from > > the > > second run. > > Do you have any idea how to fix this? > > Or do you consider this is acceptable? >=20 > This is implemented behind the new > gcc_jit_context_get_target_builtin_function entrypoint, right? >=20 > If so, perhaps that recording::context::get_target_builtin_function > could detect if it's the first time it's been called on this context, > and if so make a playback::context to do the detection?=C2=A0 That way it > would be transparent to the user, and work first time. >=20 >=20 > I see you have patches to add function and variable attributes; I > wonder if this would be cleaner internally if there was a > recording::attribute class, rather than the std::pair currently in > use > (some attributes have int arguments rather than string, others have > multiple args). >=20 > I also wondered if a "gcc_jit_attribute" type could be exposed to the > user, e.g.: >=20 > =C2=A0 attr1 =3D gcc_jit_context_new_attribute (ctxt, "noreturn"); > =C2=A0 attr2 =3D gcc_jit_context_new_attribute_with_string (ctxt, "alias"= , > "__foo"); > =C2=A0 gcc_jit_function_add_attribute (ctxt, attr1); > =C2=A0 gcc_jit_function_add_attribute (ctxt, attr2); >=20 > or somesuch?=C2=A0 But I think the API you currently have is OK. >=20 >=20 > >=20 > > I also have a WIP branch which adds support for try/catch: > > https://github.com/antoyo/gcc/commit/6219339fcacb079431596a0bc6cf8d430a= 1bd5a1 > > I'm not sure if this one is going to be ready soon or not. >=20 > I see that the new entrypoints have e.g.: >=20 > /* Add a try/catch statement. > =C2=A0=C2=A0 This is equivalent to this C++ code: > =C2=A0=C2=A0=C2=A0=C2=A0 try { > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 try_block > =C2=A0=C2=A0=C2=A0=C2=A0 } > =C2=A0=C2=A0=C2=A0=C2=A0 catch { > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 catch_block > =C2=A0=C2=A0=C2=A0=C2=A0 } > */ >=20 > void > gcc_jit_block_add_try_catch (gcc_jit_block *block, > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 gcc_jit_location *loc, > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 gcc_jit_block *try_block, > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 gcc_jit_block *catch_block); >=20 > but I'm not sure how this is meant to interact with the CFG-like > model > used by the rest of the gcc_jit_block_* API.=C2=A0 What happens at the en= d > of the blocks?=C2=A0 Does the generated code use the C++ ABI for > exception- > handling? >=20 > Dave >=20 > >=20 > > Thanks. > >=20 > > >=20 > > > Dave > > >=20 > > >=20 > > > >=20 > > > > On Thu, 2022-12-01 at 09:28 -0500, David Malcolm wrote: > > > > > On Sun, 2022-11-20 at 14:03 -0500, Antoni Boucher via Jit > > > > > wrote: > > > > > > Hi. > > > > > > This fixes bug 107770. > > > > > > Thanks for the review. > > > > >=20 > > > > > Thanks, the patch looks good to me. > > > > >=20 > > > > > Dave > > > > >=20 > > > >=20 > > >=20 > >=20 >=20 --=-39spO7Hk5A2+R2lKHe3z Content-Disposition: attachment; filename="0001-libgccjit-Fix-float-vector-comparison.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-libgccjit-Fix-float-vector-comparison.patch"; charset="UTF-8" RnJvbSBjMjg3NDlkOWE0YTc1MzVmN2Y1NjExMjdlMGYwMmEwNjM1ZmI0YWU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmkgQm91Y2hlciA8Ym91YW50b0B6b2hvLmNvbT4KRGF0 ZTogU3VuLCAyMCBOb3YgMjAyMiAxMDoyMjo1MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIGxpYmdj Y2ppdDogRml4IGZsb2F0IHZlY3RvciBjb21wYXJpc29uCgpGaXggZmxvYXQgdmVjdG9yIGNvbXBh cmlzb24gYW5kIGFkZCBjb21wYXJpc29uIHRlc3RzIGRpZG4ndCBpbmNsdWRlIGZsb2F0IGFuZAp2 ZWN0b3JzLgoKZ2NjL3Rlc3RzdWl0ZToKCVBSIGppdC8xMDc3NzAKCSogaml0LmRnL2hhcm5lc3Mu aDogQWRkIG5ldyBtYWNybyB0byB0byBwZXJmb3JtIHZlY3RvcgoJY29tcGFyaXNvbnMKCSogaml0 LmRnL3Rlc3QtZXhwcmVzc2lvbnMuYzogRXh0ZW5kIGNvbXBhcmlzb24gdGVzdHMgdG8gYWRkIGZs b2F0Cgl0eXBlcyBhbmQgdmVjdG9ycwoKZ2NjL2ppdDoKCVBSIGppdC8xMDc3NzAKCSogaml0LXBs YXliYWNrLmNjOiBGaXggdmVjdG9yIGZsb2F0IGNvbXBhcmlzb24KCSogaml0LXBsYXliYWNrLmg6 IFVwZGF0ZSBjb21wYXJpc29uIGZ1bmN0aW9uIHNpZ25hdHVyZQoJKiBqaXQtcmVjb3JkaW5nLmNj OiBVcGRhdGUgY2FsbCBmb3IgIm5ld19jb21wYXJpc29uIiBmdW5jdGlvbgoJKiBqaXQtcmVjb3Jk aW5nLmg6IEZpeCB2ZWN0b3IgZmxvYXQgY29tcGFyaXNvbgoKQ28tYXV0aG9yZWQtYnk6IEd1aWxs YXVtZSBHb21leiA8Z3VpbGxhdW1lMS5nb21lekBnbWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6IEd1 aWxsYXVtZSBHb21leiA8Z3VpbGxhdW1lMS5nb21lekBnbWFpbC5jb20+Ci0tLQogZ2NjL2ppdC9q aXQtcGxheWJhY2suY2MgICAgICAgICAgICAgICAgIHwgIDI3ICsrLQogZ2NjL2ppdC9qaXQtcGxh eWJhY2suaCAgICAgICAgICAgICAgICAgIHwgICAyICstCiBnY2Mvaml0L2ppdC1yZWNvcmRpbmcu Y2MgICAgICAgICAgICAgICAgfCAgIDMgKy0KIGdjYy9qaXQvaml0LXJlY29yZGluZy5oICAgICAg ICAgICAgICAgICB8ICAxOCArLQogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvaGFybmVzcy5oICAgICAg ICAgIHwgIDE1ICsrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWV4cHJlc3Npb25zLmMgfCAy MzQgKysrKysrKysrKysrKysrKysrKy0tLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDI0NiBpbnNlcnRp b25zKCspLCA1MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1wbGF5YmFj ay5jYyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmNjCmluZGV4IGQyMjdkMzYyODNhLi4yODg4ZGEx NmViZiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MKKysrIGIvZ2NjL2ppdC9q aXQtcGxheWJhY2suY2MKQEAgLTEyMTMsNyArMTIxMyw3IEBAIHBsYXliYWNrOjpydmFsdWUgKgog cGxheWJhY2s6OmNvbnRleHQ6OgogbmV3X2NvbXBhcmlzb24gKGxvY2F0aW9uICpsb2MsCiAJCWVu dW0gZ2NjX2ppdF9jb21wYXJpc29uIG9wLAotCQlydmFsdWUgKmEsIHJ2YWx1ZSAqYikKKwkJcnZh bHVlICphLCBydmFsdWUgKmIsIHR5cGUgKnZlY19yZXN1bHRfdHlwZSkKIHsKICAgLy8gRklYTUU6 IHR5cGUtY2hlY2tpbmcsIG9yIGNvZXJjaW9uPwogICBlbnVtIHRyZWVfY29kZSBpbm5lcl9vcDsK QEAgLTEyNTIsMTAgKzEyNTIsMjcgQEAgbmV3X2NvbXBhcmlzb24gKGxvY2F0aW9uICpsb2MsCiAg IHRyZWUgbm9kZV9iID0gYi0+YXNfdHJlZSAoKTsKICAgbm9kZV9iID0gZm9sZF9jb25zdF92YXIg KG5vZGVfYik7CiAKLSAgdHJlZSBpbm5lcl9leHByID0gYnVpbGQyIChpbm5lcl9vcCwKLQkJCSAg ICBib29sZWFuX3R5cGVfbm9kZSwKLQkJCSAgICBub2RlX2EsCi0JCQkgICAgbm9kZV9iKTsKKyAg dHJlZSBpbm5lcl9leHByOworICB0cmVlIGFfdHlwZSA9IFRSRUVfVFlQRSAobm9kZV9hKTsKKyAg aWYgKFZFQ1RPUl9UWVBFX1AgKGFfdHlwZSkpCisgIHsKKyAgICAvKiBCdWlsZCBhIHZlY3RvciBj b21wYXJpc29uLiAgU2VlIGJ1aWxkX3ZlY19jbXAgaW4gYy10eXBlY2suY2MgZm9yCisgICAgICAg cmVmZXJlbmNlLiAgKi8KKyAgICB0cmVlIHRfdmVjX3Jlc3VsdF90eXBlID0gdmVjX3Jlc3VsdF90 eXBlLT5hc190cmVlICgpOworICAgIHRyZWUgemVyb192ZWMgPSBidWlsZF96ZXJvX2NzdCAodF92 ZWNfcmVzdWx0X3R5cGUpOworICAgIHRyZWUgbWludXNfb25lX3ZlYyA9IGJ1aWxkX21pbnVzX29u ZV9jc3QgKHRfdmVjX3Jlc3VsdF90eXBlKTsKKyAgICB0cmVlIGNtcF90eXBlID0gdHJ1dGhfdHlw ZV9mb3IgKGFfdHlwZSk7CisgICAgdHJlZSBjbXAgPSBidWlsZDIgKGlubmVyX29wLCBjbXBfdHlw ZSwgbm9kZV9hLCBub2RlX2IpOworICAgIGlubmVyX2V4cHIgPSBidWlsZDMgKFZFQ19DT05EX0VY UFIsIHRfdmVjX3Jlc3VsdF90eXBlLCBjbXAsIG1pbnVzX29uZV92ZWMsCisJCQkgemVyb192ZWMp OworICB9CisgIGVsc2UKKyAgeworICAgIGlubmVyX2V4cHIgPSBidWlsZDIgKGlubmVyX29wLAor CQkJIGJvb2xlYW5fdHlwZV9ub2RlLAorCQkJIG5vZGVfYSwKKwkJCSBub2RlX2IpOworICB9CiAK ICAgLyogVHJ5IHRvIGZvbGQuICAqLwogICBpbm5lcl9leHByID0gZm9sZCAoaW5uZXJfZXhwcik7 CmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5oIGIvZ2NjL2ppdC9qaXQtcGxheWJh Y2suaAppbmRleCAzYmEwMmEwNDUxYS4uMDU2ZTUyMzE1MTQgMTAwNjQ0Ci0tLSBhL2djYy9qaXQv aml0LXBsYXliYWNrLmgKKysrIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suaApAQCAtMTYyLDcgKzE2 Miw3IEBAIHB1YmxpYzoKICAgcnZhbHVlICoKICAgbmV3X2NvbXBhcmlzb24gKGxvY2F0aW9uICps b2MsCiAJCSAgZW51bSBnY2Nfaml0X2NvbXBhcmlzb24gb3AsCi0JCSAgcnZhbHVlICphLCBydmFs dWUgKmIpOworCQkgIHJ2YWx1ZSAqYSwgcnZhbHVlICpiLCB0eXBlICp2ZWNfcmVzdWx0X3R5cGUp OwogCiAgIHJ2YWx1ZSAqCiAgIG5ld19jYWxsIChsb2NhdGlvbiAqbG9jLApkaWZmIC0tZ2l0IGEv Z2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjCmluZGV4 IGY3OGRhZWQyZDcxLi5iNWViNjQ4YWQyNCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcmVjb3Jk aW5nLmNjCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5jYwpAQCAtNTgzNyw3ICs1ODM3LDgg QEAgcmVjb3JkaW5nOjpjb21wYXJpc29uOjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpCiAgIHNl dF9wbGF5YmFja19vYmogKHItPm5ld19jb21wYXJpc29uIChwbGF5YmFja19sb2NhdGlvbiAociwg bV9sb2MpLAogCQkJCSAgICAgICBtX29wLAogCQkJCSAgICAgICBtX2EtPnBsYXliYWNrX3J2YWx1 ZSAoKSwKLQkJCQkgICAgICAgbV9iLT5wbGF5YmFja19ydmFsdWUgKCkpKTsKKwkJCQkgICAgICAg bV9iLT5wbGF5YmFja19ydmFsdWUgKCksCisJCQkJICAgICAgIG1fdHlwZS0+cGxheWJhY2tfdHlw ZSAoKSkpOwogfQogCiAvKiBJbXBsZW1lbnRhdGlvbiBvZiBwdXJlIHZpcnR1YWwgaG9vayByZWNv cmRpbmc6OnJ2YWx1ZTo6dmlzaXRfY2hpbGRyZW4KZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXJl Y29yZGluZy5oIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKaW5kZXggODYxMGVhOTg4YmQuLjVk N2M3MTc3Y2MzIDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaAorKysgYi9nY2Mv aml0L2ppdC1yZWNvcmRpbmcuaApAQCAtMTY4Myw3ICsxNjgzLDIzIEBAIHB1YmxpYzoKICAgICBt X29wIChvcCksCiAgICAgbV9hIChhKSwKICAgICBtX2IgKGIpCi0gIHt9CisgIHsKKyAgICB0eXBl ICphX3R5cGUgPSBhLT5nZXRfdHlwZSAoKTsKKyAgICB2ZWN0b3JfdHlwZSAqdmVjX3R5cGUgPSBh X3R5cGUtPmR5bl9jYXN0X3ZlY3Rvcl90eXBlICgpOworICAgIGlmICh2ZWNfdHlwZSAhPSBOVUxM KQorICAgIHsKKyAgICAgIHR5cGUgKmVsZW1lbnRfdHlwZSA9IHZlY190eXBlLT5nZXRfZWxlbWVu dF90eXBlICgpOworICAgICAgdHlwZSAqaW5uZXJfdHlwZTsKKyAgICAgIC8qIFZlY3RvcnMgb2Yg ZmxvYXRpbmctcG9pbnQgdmFsdWVzIHJldHVybiBhIHZlY3RvciBvZiBpbnRlZ2VycyBvZiB0aGUK KyAgICAgICAgIHNhbWUgc2l6ZS4gICovCisgICAgICBpZiAoZWxlbWVudF90eXBlLT5pc19mbG9h dCAoKSkKKwlpbm5lcl90eXBlID0gY3R4dC0+Z2V0X2ludF90eXBlIChlbGVtZW50X3R5cGUtPmdl dF9zaXplICgpLCBmYWxzZSk7CisgICAgICBlbHNlCisJaW5uZXJfdHlwZSA9IGVsZW1lbnRfdHlw ZTsKKyAgICAgIG1fdHlwZSA9IG5ldyB2ZWN0b3JfdHlwZSAoaW5uZXJfdHlwZSwgdmVjX3R5cGUt PmdldF9udW1fdW5pdHMgKCkpOworICAgICAgY3R4dC0+cmVjb3JkIChtX3R5cGUpOworICAgIH0K KyAgfQogCiAgIHZvaWQgcmVwbGF5X2ludG8gKHJlcGxheWVyICpyKSBmaW5hbCBvdmVycmlkZTsK IApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvaGFybmVzcy5oIGIvZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvaGFybmVzcy5oCmluZGV4IDdiNzBjZTczZGQ1Li5lNDIzYWJlOWVlMSAxMDA2 NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvaGFybmVzcy5oCisrKyBiL2djYy90ZXN0c3Vp dGUvaml0LmRnL2hhcm5lc3MuaApAQCAtNjgsNiArNjgsMjEgQEAgc3RhdGljIGNoYXIgdGVzdFsx MDI0XTsKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg fSB3aGlsZSAoMCkKIAorI2RlZmluZSBDSEVDS19WRUNUT1JfVkFMVUUoTEVOLCBBQ1RVQUwsIEVY UEVDVEVEKSBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgZm9yIChpbnQgX19jaGVja192ZWN0b3JfaXQgPSAwOyBfX2NoZWNrX3ZlY3Rvcl9pdCA8 IExFTjsgKytfX2NoZWNrX3ZlY3Rvcl9pdCkgeyBcCisgICAgICBpZiAoKEFDVFVBTClbX19jaGVj a192ZWN0b3JfaXRdICE9IChFWFBFQ1RFRClbX19jaGVja192ZWN0b3JfaXRdKSB7IFwKKyAgICAg ICAgICBmYWlsICgiJXM6ICVzOiBhY3R1YWw6ICVzICE9IGV4cGVjdGVkOiAlcyAocG9zaXRpb24g JWQpIiwgXAorICAgICAgICAgICAgICB0ZXN0LCBfX2Z1bmNfXywgI0FDVFVBTCwgI0VYUEVDVEVE LCBfX2NoZWNrX3ZlY3Rvcl9pdCk7ICBcCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgImluY29y cmVjdCB2YWx1ZVxuIik7IFwKKyAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgfSBcCisgICAgfSBcCisgIHBhc3MgKCIlczogJXM6IGFjdHVhbDog JXMgPT0gZXhwZWN0ZWQ6ICVzIiwgXAorICAgICAgICB0ZXN0LCBfX2Z1bmNfXywgI0FDVFVBTCwg I0VYUEVDVEVEKTsgIFwKKyAgfSB3aGlsZSAoMCkKKworCiAjZGVmaW5lIENIRUNLX0RPVUJMRV9W QUxVRShBQ1RVQUwsIEVYUEVDVEVEKSBcCiAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCiAgICAgZG91YmxlIGV4cGVjdGVkID0gKEVYUEVDVEVEKTsJICAgICBc CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWV4cHJlc3Npb25zLmMgYi9n Y2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWV4cHJlc3Npb25zLmMKaW5kZXggZjljYzY0ZmQ0ZGIu LjEzYjNiYWY3OWVhIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWV4cHJl c3Npb25zLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1leHByZXNzaW9ucy5jCkBA IC0zODMsMTUgKzM4Myw3IEBAIG1ha2VfdGVzdF9vZl9jb21wYXJpc29uIChnY2Nfaml0X2NvbnRl eHQgKmN0eHQsCiAgIGdjY19qaXRfcGFyYW0gKnBhcmFtX2IgPQogICAgIGdjY19qaXRfY29udGV4 dF9uZXdfcGFyYW0gKGN0eHQsIE5VTEwsIHR5cGUsICJiIik7CiAgIGdjY19qaXRfcGFyYW0gKnBh cmFtc1tdID0ge3BhcmFtX2EsIHBhcmFtX2J9OwotICBnY2Nfaml0X3R5cGUgKmJvb2xfdHlwZSA9 Ci0gICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfQk9PTCk7 Ci0gIGdjY19qaXRfZnVuY3Rpb24gKnRlc3RfZm4gPQotICAgIGdjY19qaXRfY29udGV4dF9uZXdf ZnVuY3Rpb24gKGN0eHQsIE5VTEwsCi0JCQkJICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAot CQkJCSAgYm9vbF90eXBlLAotCQkJCSAgZnVuY25hbWUsCi0JCQkJICAyLCBwYXJhbXMsCi0JCQkJ ICAwKTsKKwogICBnY2Nfaml0X3J2YWx1ZSAqY29tcGFyaXNvbiA9CiAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19jb21wYXJpc29uICgKICAgICAgIGN0eHQsCkBAIC00MDAsNiArMzkyLDE2IEBAIG1h a2VfdGVzdF9vZl9jb21wYXJpc29uIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAgICAgICBnY2Nf aml0X3BhcmFtX2FzX3J2YWx1ZSAocGFyYW1fYSksCiAgICAgICBnY2Nfaml0X3BhcmFtX2FzX3J2 YWx1ZSAocGFyYW1fYikpOwogCisgIGdjY19qaXRfdHlwZSAqY29tcGFyaXNvbl90eXBlID0gZ2Nj X2ppdF9ydmFsdWVfZ2V0X3R5cGUoY29tcGFyaXNvbik7CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAq dGVzdF9mbiA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwK KwkJCQkgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICBjb21wYXJpc29uX3R5cGUs CisJCQkJICBmdW5jbmFtZSwKKwkJCQkgIDIsIHBhcmFtcywKKwkJCQkgIDApOworCiAgIGdjY19q aXRfYmxvY2sgKmluaXRpYWwgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAodGVzdF9mbiwg ImluaXRpYWwiKTsKICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGluaXRpYWwsIE5V TEwsIGNvbXBhcmlzb24pOwogCkBAIC00MDcsNDggKzQwOSwxMDMgQEAgbWFrZV90ZXN0X29mX2Nv bXBhcmlzb24gKGdjY19qaXRfY29udGV4dCAqY3R4dCwKICAgICBnY2Nfaml0X3J2YWx1ZV9hc19v YmplY3QgKGNvbXBhcmlzb24pKTsKIH0KIAotc3RhdGljIHZvaWQKLW1ha2VfdGVzdHNfb2ZfY29t cGFyaXNvbnMgKGdjY19qaXRfY29udGV4dCAqY3R4dCkKK3N0YXRpYyB2b2lkIHJ1bl90ZXN0X29m X2NvbXBhcmlzb24oZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJIGdjY19qaXRfdHlwZSAqdHlw ZSwKKwkJCSBlbnVtIGdjY19qaXRfY29tcGFyaXNvbiBvcCwKKwkJCSBjb25zdCBjaGFyICpmdW5j bmFtZSwKKwkJCSBjb25zdCBjaGFyICp2ZWNfZnVuY25hbWUsCisJCQkgY29uc3QgY2hhciAqZXhw ZWN0ZWQpCiB7Ci0gIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPQotICAgIGdjY19qaXRfY29udGV4 dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0lOVCk7CisgIGdjY19qaXRfdHlwZSAqdmVj X3R5cGUgPQorICAgIGdjY19qaXRfdHlwZV9nZXRfdmVjdG9yICh0eXBlLCA0KTsKIAogICBDSEVD S19TVFJJTkdfVkFMVUUgKAogICAgIG1ha2VfdGVzdF9vZl9jb21wYXJpc29uIChjdHh0LAotCQkJ ICAgICBpbnRfdHlwZSwKLQkJCSAgICAgR0NDX0pJVF9DT01QQVJJU09OX0VRLAotCQkJICAgICAi dGVzdF9DT01QQVJJU09OX0VRX29uX2ludCIpLAotICAgICJhID09IGIiKTsKLSAgQ0hFQ0tfU1RS SU5HX1ZBTFVFICgKLSAgICBtYWtlX3Rlc3Rfb2ZfY29tcGFyaXNvbiAoY3R4dCwKLQkJCSAgICAg aW50X3R5cGUsCi0JCQkgICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9ORSwKLQkJCSAgICAgInRlc3Rf Q09NUEFSSVNPTl9ORV9vbl9pbnQiKSwKLSAgICAiYSAhPSBiIik7Ci0gIENIRUNLX1NUUklOR19W QUxVRSAoCi0gICAgbWFrZV90ZXN0X29mX2NvbXBhcmlzb24gKGN0eHQsCi0JCQkgICAgIGludF90 eXBlLAotCQkJICAgICBHQ0NfSklUX0NPTVBBUklTT05fTFQsCi0JCQkgICAgICJ0ZXN0X0NPTVBB UklTT05fTFRfb25faW50IiksCi0gICAgImEgPCBiIik7CisJCQkgICAgIHR5cGUsCisJCQkgICAg IG9wLAorCQkJICAgICBmdW5jbmFtZSksCisgICAgZXhwZWN0ZWQpOwogICBDSEVDS19TVFJJTkdf VkFMVUUgKAogICAgIG1ha2VfdGVzdF9vZl9jb21wYXJpc29uIChjdHh0LAotCQkJICAgICBpbnRf dHlwZSwKLQkJCSAgICAgR0NDX0pJVF9DT01QQVJJU09OX0xFLAotCQkJICAgICAidGVzdF9DT01Q QVJJU09OX0xFX29uX2ludCIpLAotICAgICJhIDw9IGIiKTsKLSAgQ0hFQ0tfU1RSSU5HX1ZBTFVF ICgKLSAgICBtYWtlX3Rlc3Rfb2ZfY29tcGFyaXNvbiAoY3R4dCwKLQkJCSAgICAgaW50X3R5cGUs Ci0JCQkgICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9HVCwKLQkJCSAgICAgInRlc3RfQ09NUEFSSVNP Tl9HVF9vbl9pbnQiKSwKLSAgICAiYSA+IGIiKTsKLSAgQ0hFQ0tfU1RSSU5HX1ZBTFVFICgKLSAg ICBtYWtlX3Rlc3Rfb2ZfY29tcGFyaXNvbiAoY3R4dCwKLQkJCSAgICAgaW50X3R5cGUsCi0JCQkg ICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9HRSwKLQkJCSAgICAgInRlc3RfQ09NUEFSSVNPTl9HRV9v bl9pbnQiKSwKLSAgICAiYSA+PSBiIik7CisJCQkgICAgIHZlY190eXBlLAorCQkJICAgICBvcCwK KwkJCSAgICAgdmVjX2Z1bmNuYW1lKSwKKyAgICBleHBlY3RlZCk7Cit9CisKK3N0YXRpYyB2b2lk CittYWtlX3Rlc3RzX29mX2NvbXBhcmlzb25zIChnY2Nfaml0X2NvbnRleHQgKmN0eHQpCit7Cisg IGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAo Y3R4dCwgR0NDX0pJVF9UWVBFX0lOVCk7CisgIGdjY19qaXRfdHlwZSAqZmxvYXRfdHlwZSA9Cisg ICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfRkxPQVQpOwor CisgIHJ1bl90ZXN0X29mX2NvbXBhcmlzb24oCisgIAljdHh0LAorICAJaW50X3R5cGUsCisgIAlH Q0NfSklUX0NPTVBBUklTT05fRVEsCisgIAkidGVzdF9DT01QQVJJU09OX0VRX29uX2ludCIsCisg IAkidGVzdF9DT01QQVJJU09OX0VRX29uX3ZlY19pbnQiLAorICAJImEgPT0gYiIpOworICBydW5f dGVzdF9vZl9jb21wYXJpc29uKAorICAJY3R4dCwKKyAgCWludF90eXBlLAorICAJR0NDX0pJVF9D T01QQVJJU09OX05FLAorICAJInRlc3RfQ09NUEFSSVNPTl9ORV9vbl9pbnQiLAorICAJInRlc3Rf Q09NUEFSSVNPTl9ORV9vbl92ZWNfaW50IiwKKyAgCSJhICE9IGIiKTsKKyAgcnVuX3Rlc3Rfb2Zf Y29tcGFyaXNvbigKKyAgCWN0eHQsCisgIAlpbnRfdHlwZSwKKyAgCUdDQ19KSVRfQ09NUEFSSVNP Tl9MVCwKKyAgCSJ0ZXN0X0NPTVBBUklTT05fTFRfb25faW50IiwKKyAgCSJ0ZXN0X0NPTVBBUklT T05fTFRfb25fdmVjX2ludCIsCisgIAkiYSA8IGIiKTsKKyAgcnVuX3Rlc3Rfb2ZfY29tcGFyaXNv bigKKyAgCWN0eHQsCisgIAlpbnRfdHlwZSwKKyAgCUdDQ19KSVRfQ09NUEFSSVNPTl9MRSwKKyAg CSJ0ZXN0X0NPTVBBUklTT05fTEVfb25faW50IiwKKyAgCSJ0ZXN0X0NPTVBBUklTT05fTEVfb25f dmVjX2ludCIsCisgIAkiYSA8PSBiIik7CisgIHJ1bl90ZXN0X29mX2NvbXBhcmlzb24oCisgIAlj dHh0LAorICAJaW50X3R5cGUsCisgIAlHQ0NfSklUX0NPTVBBUklTT05fR1QsCisgIAkidGVzdF9D T01QQVJJU09OX0dUX29uX2ludCIsCisgIAkidGVzdF9DT01QQVJJU09OX0dUX29uX3ZlY19pbnQi LAorICAJImEgPiBiIik7CisgIHJ1bl90ZXN0X29mX2NvbXBhcmlzb24oCisgIAljdHh0LAorICAJ aW50X3R5cGUsCisgIAlHQ0NfSklUX0NPTVBBUklTT05fR0UsCisgIAkidGVzdF9DT01QQVJJU09O X0dFX29uX2ludCIsCisgIAkidGVzdF9DT01QQVJJU09OX0dFX29uX3ZlY19pbnQiLAorICAJImEg Pj0gYiIpOworCisgIC8vIEZsb2F0IHRlc3RzCisgIHJ1bl90ZXN0X29mX2NvbXBhcmlzb24oCisg IAljdHh0LAorICAJZmxvYXRfdHlwZSwKKyAgCUdDQ19KSVRfQ09NUEFSSVNPTl9ORSwKKyAgCSJ0 ZXN0X0NPTVBBUklTT05fTkVfb25fZmxvYXQiLAorICAJInRlc3RfQ09NUEFSSVNPTl9ORV9vbl92 ZWNfZmxvYXQiLAorICAJImEgIT0gYiIpOworICBydW5fdGVzdF9vZl9jb21wYXJpc29uKAorICAJ Y3R4dCwKKyAgCWZsb2F0X3R5cGUsCisgIAlHQ0NfSklUX0NPTVBBUklTT05fTFQsCisgIAkidGVz dF9DT01QQVJJU09OX0xUX29uX2Zsb2F0IiwKKyAgCSJ0ZXN0X0NPTVBBUklTT05fTFRfb25fdmVj X2Zsb2F0IiwKKyAgCSJhIDwgYiIpOworICBydW5fdGVzdF9vZl9jb21wYXJpc29uKAorICAJY3R4 dCwKKyAgCWZsb2F0X3R5cGUsCisgIAlHQ0NfSklUX0NPTVBBUklTT05fR1QsCisgIAkidGVzdF9D T01QQVJJU09OX0dUX29uX2Zsb2F0IiwKKyAgCSJ0ZXN0X0NPTVBBUklTT05fR1Rfb25fdmVjX2Zs b2F0IiwKKyAgCSJhID4gYiIpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTAyLDYgKzU1OSw5MyBA QCB2ZXJpZnlfY29tcGFyaXNvbnMgKGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCiAgIENIRUNLX1ZB TFVFICh0ZXN0X0NPTVBBUklTT05fR0Vfb25faW50ICgwLCAwKSwgMSk7CiAgIENIRUNLX1ZBTFVF ICh0ZXN0X0NPTVBBUklTT05fR0Vfb25faW50ICgxLCAyKSwgMCk7CiAgIENIRUNLX1ZBTFVFICh0 ZXN0X0NPTVBBUklTT05fR0Vfb25faW50ICgyLCAxKSwgMSk7CisKKyAgdHlwZWRlZiBpbnQgX192 ZWN0b3IgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoc2l6ZW9mKGludCkgKiAyKSkp OworICB0eXBlZGVmIF9fdmVjdG9yICgqdGVzdF92ZWNfZm4pIChfX3ZlY3RvciwgX192ZWN0b3Ip OworCisgIF9fdmVjdG9yIHplcm9femVybyA9IHswLCAwfTsKKyAgX192ZWN0b3IgemVyb19vbmUg PSB7MCwgMX07CisgIF9fdmVjdG9yIG9uZV96ZXJvID0gezEsIDB9OworCisgIF9fdmVjdG9yIHRy dWVfdHJ1ZSA9IHstMSwgLTF9OworICBfX3ZlY3RvciBmYWxzZV90cnVlID0gezAsIC0xfTsKKyAg X192ZWN0b3IgdHJ1ZV9mYWxzZSA9IHstMSwgMH07CisgIF9fdmVjdG9yIGZhbHNlX2ZhbHNlID0g ezAsIDB9OworCisgIHRlc3RfdmVjX2ZuIHRlc3RfQ09NUEFSSVNPTl9FUV9vbl92ZWNfaW50ID0K KyAgICAodGVzdF92ZWNfZm4pZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwKKwkJCQkg ICAgICAidGVzdF9DT01QQVJJU09OX0VRX29uX3ZlY19pbnQiKTsKKyAgQ0hFQ0tfTk9OX05VTEwg KHRlc3RfQ09NUEFSSVNPTl9FUV9vbl92ZWNfaW50KTsKKyAgQ0hFQ0tfVkVDVE9SX1ZBTFVFICgy LCB0ZXN0X0NPTVBBUklTT05fRVFfb25fdmVjX2ludCAoemVyb196ZXJvLCB6ZXJvX3plcm8pLCB0 cnVlX3RydWUpOworICBDSEVDS19WRUNUT1JfVkFMVUUgKDIsIHRlc3RfQ09NUEFSSVNPTl9FUV9v bl92ZWNfaW50ICh6ZXJvX29uZSwgb25lX3plcm8pLCBmYWxzZV9mYWxzZSk7CisKKyAgdGVzdF92 ZWNfZm4gdGVzdF9DT01QQVJJU09OX05FX29uX3ZlY19pbnQgPQorICAgICh0ZXN0X3ZlY19mbiln Y2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LAorCQkJCSAgICAgICJ0ZXN0X0NPTVBBUklT T05fTkVfb25fdmVjX2ludCIpOworICBDSEVDS19OT05fTlVMTCAodGVzdF9DT01QQVJJU09OX05F X29uX3ZlY19pbnQpOworICBDSEVDS19WRUNUT1JfVkFMVUUgKDIsIHRlc3RfQ09NUEFSSVNPTl9O RV9vbl92ZWNfaW50ICh6ZXJvX3plcm8sIHplcm9femVybyksIGZhbHNlX2ZhbHNlKTsKKyAgQ0hF Q0tfVkVDVE9SX1ZBTFVFICgyLCB0ZXN0X0NPTVBBUklTT05fTkVfb25fdmVjX2ludCAoemVyb19v bmUsIG9uZV96ZXJvKSwgdHJ1ZV90cnVlKTsKKworICB0ZXN0X3ZlY19mbiB0ZXN0X0NPTVBBUklT T05fTFRfb25fdmVjX2ludCA9CisgICAgKHRlc3RfdmVjX2ZuKWdjY19qaXRfcmVzdWx0X2dldF9j b2RlIChyZXN1bHQsCisJCQkJICAgICAgInRlc3RfQ09NUEFSSVNPTl9MVF9vbl92ZWNfaW50Iik7 CisgIENIRUNLX05PTl9OVUxMICh0ZXN0X0NPTVBBUklTT05fTFRfb25fdmVjX2ludCk7CisgIENI RUNLX1ZFQ1RPUl9WQUxVRSAoMiwgdGVzdF9DT01QQVJJU09OX0xUX29uX3ZlY19pbnQgKHplcm9f emVybywgemVyb196ZXJvKSwgZmFsc2VfZmFsc2UpOworICBDSEVDS19WRUNUT1JfVkFMVUUgKDIs IHRlc3RfQ09NUEFSSVNPTl9MVF9vbl92ZWNfaW50ICh6ZXJvX29uZSwgb25lX3plcm8pLCB0cnVl X2ZhbHNlKTsKKworICB0ZXN0X3ZlY19mbiB0ZXN0X0NPTVBBUklTT05fTEVfb25fdmVjX2ludCA9 CisgICAgKHRlc3RfdmVjX2ZuKWdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsCisJCQkJ ICAgICAgInRlc3RfQ09NUEFSSVNPTl9MRV9vbl92ZWNfaW50Iik7CisgIENIRUNLX05PTl9OVUxM ICh0ZXN0X0NPTVBBUklTT05fTEVfb25fdmVjX2ludCk7CisgIENIRUNLX1ZFQ1RPUl9WQUxVRSAo MiwgdGVzdF9DT01QQVJJU09OX0xFX29uX3ZlY19pbnQgKHplcm9femVybywgemVyb196ZXJvKSwg dHJ1ZV90cnVlKTsKKyAgQ0hFQ0tfVkVDVE9SX1ZBTFVFICgyLCB0ZXN0X0NPTVBBUklTT05fTEVf b25fdmVjX2ludCAoemVyb19vbmUsIG9uZV96ZXJvKSwgdHJ1ZV9mYWxzZSk7CisKKyAgdGVzdF92 ZWNfZm4gdGVzdF9DT01QQVJJU09OX0dUX29uX3ZlY19pbnQgPQorICAgICh0ZXN0X3ZlY19mbiln Y2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LAorCQkJCSAgICAgICJ0ZXN0X0NPTVBBUklT T05fR1Rfb25fdmVjX2ludCIpOworICBDSEVDS19OT05fTlVMTCAodGVzdF9DT01QQVJJU09OX0dU X29uX3ZlY19pbnQpOworICBDSEVDS19WRUNUT1JfVkFMVUUgKDIsIHRlc3RfQ09NUEFSSVNPTl9H VF9vbl92ZWNfaW50ICh6ZXJvX3plcm8sIHplcm9femVybyksIGZhbHNlX2ZhbHNlKTsKKyAgQ0hF Q0tfVkVDVE9SX1ZBTFVFICgyLCB0ZXN0X0NPTVBBUklTT05fR1Rfb25fdmVjX2ludCAoemVyb19v bmUsIG9uZV96ZXJvKSwgZmFsc2VfdHJ1ZSk7CisKKyAgdGVzdF92ZWNfZm4gdGVzdF9DT01QQVJJ U09OX0dFX29uX3ZlY19pbnQgPQorICAgICh0ZXN0X3ZlY19mbilnY2Nfaml0X3Jlc3VsdF9nZXRf Y29kZSAocmVzdWx0LAorCQkJCSAgICAgICJ0ZXN0X0NPTVBBUklTT05fR0Vfb25fdmVjX2ludCIp OworICBDSEVDS19OT05fTlVMTCAodGVzdF9DT01QQVJJU09OX0dFX29uX3ZlY19pbnQpOworICBD SEVDS19WRUNUT1JfVkFMVUUgKDIsIHRlc3RfQ09NUEFSSVNPTl9HRV9vbl92ZWNfaW50ICh6ZXJv X3plcm8sIHplcm9femVybyksIHRydWVfdHJ1ZSk7CisgIENIRUNLX1ZFQ1RPUl9WQUxVRSAoMiwg dGVzdF9DT01QQVJJU09OX0dFX29uX3ZlY19pbnQgKHplcm9fb25lLCBvbmVfemVybyksIGZhbHNl X3RydWUpOworCisgIHR5cGVkZWYgZmxvYXQgX192ZWN0b3JfZiBfX2F0dHJpYnV0ZV9fICgoX192 ZWN0b3Jfc2l6ZV9fIChzaXplb2YoZmxvYXQpICogMikpKTsKKyAgdHlwZWRlZiBfX3ZlY3RvciAo KnRlc3RfdmVjX2ZfZm4pIChfX3ZlY3Rvcl9mLCBfX3ZlY3Rvcl9mKTsKKworICBfX3ZlY3Rvcl9m IHplcm9femVyb19mID0gezAsIDB9OworICBfX3ZlY3Rvcl9mIHplcm9fb25lX2YgPSB7MCwgMX07 CisgIF9fdmVjdG9yX2Ygb25lX3plcm9fZiA9IHsxLCAwfTsKKworICBfX3ZlY3Rvcl9mIHRydWVf dHJ1ZV9mID0gey0xLCAtMX07CisgIF9fdmVjdG9yX2YgZmFsc2VfdHJ1ZV9mID0gezAsIC0xfTsK KyAgX192ZWN0b3JfZiB0cnVlX2ZhbHNlX2YgPSB7LTEsIDB9OworICBfX3ZlY3Rvcl9mIGZhbHNl X2ZhbHNlX2YgPSB7MCwgMH07CisKKyAgdGVzdF92ZWNfZl9mbiB0ZXN0X0NPTVBBUklTT05fTkVf b25fdmVjX2Zsb2F0ID0KKyAgICAodGVzdF92ZWNfZl9mbilnY2Nfaml0X3Jlc3VsdF9nZXRfY29k ZSAocmVzdWx0LAorCQkJCSAgICAgICJ0ZXN0X0NPTVBBUklTT05fTkVfb25fdmVjX2Zsb2F0Iik7 CisgIENIRUNLX05PTl9OVUxMICh0ZXN0X0NPTVBBUklTT05fTkVfb25fdmVjX2Zsb2F0KTsKKyAg Q0hFQ0tfVkVDVE9SX1ZBTFVFICgyLCB0ZXN0X0NPTVBBUklTT05fTkVfb25fdmVjX2Zsb2F0ICh6 ZXJvX3plcm9fZiwgemVyb196ZXJvX2YpLCBmYWxzZV9mYWxzZV9mKTsKKyAgQ0hFQ0tfVkVDVE9S X1ZBTFVFICgyLCB0ZXN0X0NPTVBBUklTT05fTkVfb25fdmVjX2Zsb2F0ICh6ZXJvX29uZV9mLCBv bmVfemVyb19mKSwgdHJ1ZV90cnVlX2YpOworCisgIHRlc3RfdmVjX2ZfZm4gdGVzdF9DT01QQVJJ U09OX0xUX29uX3ZlY19mbG9hdCA9CisgICAgKHRlc3RfdmVjX2ZfZm4pZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKHJlc3VsdCwKKwkJCQkgICAgICAidGVzdF9DT01QQVJJU09OX0xUX29uX3ZlY19m bG9hdCIpOworICBDSEVDS19OT05fTlVMTCAodGVzdF9DT01QQVJJU09OX0xUX29uX3ZlY19mbG9h dCk7CisgIENIRUNLX1ZFQ1RPUl9WQUxVRSAoMiwgdGVzdF9DT01QQVJJU09OX0xUX29uX3ZlY19m bG9hdCAoemVyb196ZXJvX2YsIHplcm9femVyb19mKSwgZmFsc2VfZmFsc2VfZik7CisgIENIRUNL X1ZFQ1RPUl9WQUxVRSAoMiwgdGVzdF9DT01QQVJJU09OX0xUX29uX3ZlY19mbG9hdCAoemVyb19v bmVfZiwgb25lX3plcm9fZiksIHRydWVfZmFsc2VfZik7CisKKyAgdGVzdF92ZWNfZl9mbiB0ZXN0 X0NPTVBBUklTT05fR1Rfb25fdmVjX2Zsb2F0ID0KKyAgICAodGVzdF92ZWNfZl9mbilnY2Nfaml0 X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LAorCQkJCSAgICAgICJ0ZXN0X0NPTVBBUklTT05fR1Rf b25fdmVjX2Zsb2F0Iik7CisgIENIRUNLX05PTl9OVUxMICh0ZXN0X0NPTVBBUklTT05fR1Rfb25f dmVjX2Zsb2F0KTsKKyAgQ0hFQ0tfVkVDVE9SX1ZBTFVFICgyLCB0ZXN0X0NPTVBBUklTT05fR1Rf b25fdmVjX2Zsb2F0ICh6ZXJvX3plcm9fZiwgemVyb196ZXJvX2YpLCBmYWxzZV9mYWxzZV9mKTsK KyAgQ0hFQ0tfVkVDVE9SX1ZBTFVFICgyLCB0ZXN0X0NPTVBBUklTT05fR1Rfb25fdmVjX2Zsb2F0 ICh6ZXJvX29uZV9mLCBvbmVfemVyb19mKSwgZmFsc2VfdHJ1ZV9mKTsKIH0KIAogLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKLS0gCjIuMjYuMi43LmcxOWRiOWNmYjY4LmRpcnR5Cgo= --=-39spO7Hk5A2+R2lKHe3z--