From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27636 invoked by alias); 25 Jan 2020 13:50:17 -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 27627 invoked by uid 89); 25 Jan 2020 13:50:17 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-22.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 spammy=H*f:sk:BYAPR01, H*i:sk:BYAPR01 X-HELO: NAM04-BN3-obe.outbound.protection.outlook.com Received: from mail-eopbgr680126.outbound.protection.outlook.com (HELO NAM04-BN3-obe.outbound.protection.outlook.com) (40.107.68.126) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 25 Jan 2020 13:50:14 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oXrsitQjTUZZ+gKeCEn+WQWd/FpfLdjsTq/y7VIGjmwHqtxEPdUIXkb1U0IA6k8DpuhodtRY3VT8ed0jIQ1cQoj6S8AxhgjeQfoPPu89ihMUzAq88ZsSLV1FiX77wsP7I+V0yQmCfIA0PEjxpH/B1H5MpruaWZKOHBWcjxFbiUfeNc0pADGLXvp7oQZVCjJwYeRCg9XOaM4y4XyAJfNrNbHVR+E4MP9SX4HK8EsYOnkbsD5T2TZkuA80S9w5MfrplAV5pTsyZXMkPPqvHiVjrfO5mVH+ViQdKeu5al7/4AUVo2wRT98i7W08LtOHUPgC42onZx//7LT3LmdLDFPtFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wXhYpwXwpL3Vg9skAFCYHLm9RSKkYhoXPAxhru75KfM=; b=cU7pVoSDi4y8Mj4iY3h5aUkSrdyba2QN2RZ5pfnCRRTB4GqeWtSA83qkpwWa/j+L32OhEwUz9i8pZJwfGwUdHAsQNwS3pCSmRJntDMNIlp/MksFpK9SggL/Z+RzSfX1gXkha79Z3Rftu5IpMBsdUCe8MIby37IT5wkVLChWU4pPx3saFgU8Q6nOSSpwdU7fRuYBdFgyr41U9vrK/qQkXocLqgd5UmEuuBHQYKpZKTCzmPVXoc1DTdK1gFSPbcF86msJuGBO5H9g7AAeZ5VW3/HBvSJL07fzz5XaDXDrO7LptSe5SNjuY9ecsRZmZVRQeMcgGFr+yEOo8YU1OBheTVQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wXhYpwXwpL3Vg9skAFCYHLm9RSKkYhoXPAxhru75KfM=; b=Ke1FrvF71cVM5/5WF/PUHZKdKETPJLfUKI1j0sRbhmaJ10QJ5FKeNGggJtMQsn87uzZLazoBVkmchJGWQKSOb8mia+Jwot9DTfL8zDM9io8u3dvfN4xAHVqLhMSGfm3a2m3oPfAxWbzQ2iofipZb4GlXUqmU60/O7cLiDrBzkNA= Received: from BYAPR01MB4869.prod.exchangelabs.com (20.177.226.139) by BYAPR01MB3912.prod.exchangelabs.com (52.135.199.29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2665.23; Sat, 25 Jan 2020 13:50:11 +0000 Received: from BYAPR01MB4869.prod.exchangelabs.com ([fe80::b092:f9fd:5516:bba]) by BYAPR01MB4869.prod.exchangelabs.com ([fe80::b092:f9fd:5516:bba%7]) with mapi id 15.20.2665.017; Sat, 25 Jan 2020 13:50:10 +0000 From: Feng Xue OS To: "mjambor@suse.cz" , Jan Hubicka , "gcc-patches@gcc.gnu.org" Subject: [PATCH V2] Generalized value pass-through for self-recursive function (ipa/pr93203) Date: Sat, 25 Jan 2020 16:17:00 -0000 Message-ID: References: In-Reply-To: authentication-results: spf=none (sender IP is ) smtp.mailfrom=fxue@os.amperecomputing.com; x-ms-oob-tlc-oobclassifiers: OLM:5797; received-spf: None (protection.outlook.com: os.amperecomputing.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-messagedata: BUOFsyawGAJXP6YvptqWoaiCDSqgrO3mvgWgkuS7ETIOb2YJlVQ2J9ZTcfz0PtNKvJBbyG91CE8mk0jm9B87PMp5KfcV6KTsbwSlMUmjdTpxzq1eYN0amOyrWix5/ObFMp41OpKa01EdA1GgIPRKqQ== x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_002_BYAPR01MB48698368F177337119EF9040F7090BYAPR01MB4869prod_" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: noeDfNhmxVZrOA+k3Eau5bbwYy4Lq0dSpY6tivI7PdEllZvsRPTcqg1wxGtz9GN/Mfe92FfoFGJFpELwPRqC/N6Se4XElWbUghyZtFaWx3I= X-IsSubscribed: yes X-SW-Source: 2020-01/txt/msg01698.txt.bz2 --_002_BYAPR01MB48698368F177337119EF9040F7090BYAPR01MB4869prod_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 2144 Made some changes. Feng ________________________________________ From: Feng Xue OS Sent: Saturday, January 25, 2020 5:54 PM To: mjambor@suse.cz; Jan Hubicka; gcc-patches@gcc.gnu.org Subject: [PATCH] Generalized value pass-through for self-recursive function= (ipa/pr93203) Besides simple pass-through (aggregate) jump function, arithmetic (aggregat= e) jump function could also bring same (aggregate) value as parameter passed-in for self-feeding recursive call. For example, f1 (int i) /* normal jump function */ { f1 (i & 1); } Suppose i is 0, recursive propagation via (i & 1) also gets 0, which can be seen as a simple pass-through of i. f2 (int *p) /* aggregate jump function */ { int t =3D *p & 1; f2 (&t); } Likewise, if *p is 0, (*p & 1) is also 0, and &t is an aggregate simple pass-through of p. This patch is to support these two kinds of value pass-through. Bootstrapped/regtested on x86_64-linux and aarch64-linux. Feng --- 2020-01-25 Feng Xue PR ipa/93203 * ipa-cp.c (ipcp_lattice::add_value): Add source with same call edge but different source value. (adjust_callers_for_value_intersection): New function. (gather_edges_for_value): Adjust order of callers to let a non-self-recursive caller be the first element. (self_recursive_pass_through_p): Add a new parameter simple, and check generalized self-recursive pass-through jump function. (self_recursive_agg_pass_through_p): Likewise. (find_more_scalar_values_for_callers_subset): Compute value from pass-through jump function for self-recursive. (intersect_with_plats): Remove code of itersection with unknown place holder value. (intersect_with_agg_replacements): Likewise. (intersect_aggregates_with_edge): Deduce with from pass-through jump function for self-recursive. (decide_whether_version_node): Remove dead callers and adjust order to let a non-self-recursive caller be the first element. --_002_BYAPR01MB48698368F177337119EF9040F7090BYAPR01MB4869prod_ Content-Type: text/x-patch; name="0001-Generalized-value-pass-through-for-self-recusive-fun.patch" Content-Description: 0001-Generalized-value-pass-through-for-self-recusive-fun.patch Content-Disposition: attachment; filename="0001-Generalized-value-pass-through-for-self-recusive-fun.patch"; size=13998; creation-date="Sat, 25 Jan 2020 13:49:08 GMT"; modification-date="Sat, 25 Jan 2020 13:49:08 GMT" Content-Transfer-Encoding: base64 Content-length: 18976 RnJvbSA3NGFlZjBjZDJmNDBmZjgyOGE0YjJhYmNiYmRiYmY0YjFhZWExZmNm IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBGZW5nIFh1ZSA8Znh1 ZUBvcy5hbXBlcmVjb21wdXRpbmcuY29tPgpEYXRlOiBUdWUsIDIxIEphbiAy MDIwIDIwOjUzOjM4ICswODAwClN1YmplY3Q6IFtQQVRDSF0gR2VuZXJhbGl6 ZWQgdmFsdWUgcGFzcy10aHJvdWdoIGZvciBzZWxmLXJlY3VzaXZlIGZ1bmN0 aW9uCgotLS0KIGdjYy9pcGEtY3AuYyAgICAgICAgICAgICAgICAgICAgICAg fCAxOTUgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIGdjYy90ZXN0 c3VpdGUvZysrLmRnL2lwYS9wcjkzMjAzLkMgfCAgOTUgKysrKysrKysrKysr KysKIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9pcGNwLTEuYyAgfCAgIDIg Ky0KIDMgZmlsZXMgY2hhbmdlZCwgMjE2IGluc2VydGlvbnMoKyksIDc2IGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv ZysrLmRnL2lwYS9wcjkzMjAzLkMKCmRpZmYgLS1naXQgYS9nY2MvaXBhLWNw LmMgYi9nY2MvaXBhLWNwLmMKaW5kZXggMTdkYTFkOGU4YTcuLjY0ZDIzYTM0 MjkyIDEwMDY0NAotLS0gYS9nY2MvaXBhLWNwLmMKKysrIGIvZ2NjL2lwYS1j cC5jCkBAIC0xODUwLDcgKzE4NTAsNyBAQCBpcGNwX2xhdHRpY2U8dmFsdHlw ZT46OmFkZF92YWx1ZSAodmFsdHlwZSBuZXd2YWwsIGNncmFwaF9lZGdlICpj cywKIAkgIHsKIAkgICAgaXBjcF92YWx1ZV9zb3VyY2U8dmFsdHlwZT4gKnM7 CiAJICAgIGZvciAocyA9IHZhbC0+c291cmNlczsgczsgcyA9IHMtPm5leHQp Ci0JICAgICAgaWYgKHMtPmNzID09IGNzKQorCSAgICAgIGlmIChzLT5jcyA9 PSBjcyAmJiBzLT52YWwgPT0gc3JjX3ZhbCkKIAkJYnJlYWs7CiAJICAgIGlm IChzKQogCSAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQyMDcsNiArNDIwNywz MyBAQCBnZXRfaW5mb19hYm91dF9uZWNlc3NhcnlfZWRnZXMgKGlwY3BfdmFs dWU8dmFsdHlwZT4gKnZhbCwgY2dyYXBoX25vZGUgKmRlc3QsCiAgIHJldHVy biBob3Q7CiB9CiAKKy8qIEdpdmVuIGEgTk9ERSwgYW5kIGEgc2V0IG9mIGl0 cyBDQUxMRVJTLCB0cnkgdG8gYWRqdXN0IG9yZGVyIG9mIHRoZSBjYWxsZXJz CisgICB0byBsZXQgYSBub24tc2VsZi1yZWN1cnNpdmUgY2FsbGVyIGJlIHRo ZSBmaXJzdCBlbGVtZW50LiAgVGh1cywgd2UgY2FuCisgICBzaW1wbGlmeSBp bnRlcnNlY3Rpbmcgb3BlcmF0aW9ucyBvbiB2YWx1ZXMgdGhhdCBhcnJpdmUg ZnJvbSBhbGwgb2YgdGhlc2UKKyAgIGNhbGxlcnMsIGVzcGVjaWFsbHkgd2hl biB0aGVyZSBleGlzdHMgc2VsZi1yZWN1cnNpdmUgY2FsbC4gIFJldHVybiB0 cnVlIGlmCisgICB0aGlzIGtpbmQgb2YgYWRqdXN0bWVudCBpcyBwb3NzaWJs ZS4gICovCisKK3N0YXRpYyBib29sCithZGp1c3RfY2FsbGVyc19mb3JfdmFs dWVfaW50ZXJzZWN0aW9uICh2ZWM8Y2dyYXBoX2VkZ2UgKj4gY2FsbGVycywK KwkJCQkgICAgICAgY2dyYXBoX25vZGUgKm5vZGUpCit7CisgIGZvciAodW5z aWduZWQgaSA9IDA7IGkgPCBjYWxsZXJzLmxlbmd0aCAoKTsgaSsrKQorICAg IHsKKyAgICAgIGNncmFwaF9lZGdlICpjcyA9IGNhbGxlcnNbaV07CisKKyAg ICAgIGlmIChjcy0+Y2FsbGVyICE9IG5vZGUpCisJeworCSAgaWYgKGkgPiAw KQorCSAgICB7CisJICAgICAgY2FsbGVyc1tpXSA9IGNhbGxlcnNbMF07CisJ ICAgICAgY2FsbGVyc1swXSA9IGNzOworCSAgICB9CisJICByZXR1cm4gdHJ1 ZTsKKwl9CisgICAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKIC8qIFJldHVy biBhIHZlY3RvciBvZiBpbmNvbWluZyBlZGdlcyB0aGF0IGRvIGJyaW5nIHZh bHVlIFZBTCB0byBub2RlIERFU1QuICBJdAogICAgaXMgYXNzdW1lZCB0aGVp ciBudW1iZXIgaXMga25vd24gYW5kIGVxdWFsIHRvIENBTExFUl9DT1VOVC4g ICovCiAKQEAgLTQyMzAsNiArNDI1Nyw5IEBAIGdhdGhlcl9lZGdlc19mb3Jf dmFsdWUgKGlwY3BfdmFsdWU8dmFsdHlwZT4gKnZhbCwgY2dyYXBoX25vZGUg KmRlc3QsCiAJfQogICAgIH0KIAorICBpZiAoY2FsbGVyX2NvdW50ID4gMSkK KyAgICBhZGp1c3RfY2FsbGVyc19mb3JfdmFsdWVfaW50ZXJzZWN0aW9uIChy ZXQsIGRlc3QpOworCiAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTQyNDEsNyAr NDI3MSw2IEBAIGdldF9yZXBsYWNlbWVudF9tYXAgKGNsYXNzIGlwYV9ub2Rl X3BhcmFtcyAqaW5mbywgdHJlZSB2YWx1ZSwgaW50IHBhcm1fbnVtKQogewog ICBzdHJ1Y3QgaXBhX3JlcGxhY2VfbWFwICpyZXBsYWNlX21hcDsKIAotCiAg IHJlcGxhY2VfbWFwID0gZ2djX2FsbG9jPGlwYV9yZXBsYWNlX21hcD4gKCk7 CiAgIGlmIChkdW1wX2ZpbGUpCiAgICAgewpAQCAtNDU5MiwzNiArNDYyMSw0 MCBAQCBjcmVhdGVfc3BlY2lhbGl6ZWRfbm9kZSAoc3RydWN0IGNncmFwaF9u b2RlICpub2RlLAogfQogCiAvKiBSZXR1cm4gdHJ1ZSwgaWYgSkZVTkMsIHdo aWNoIGRlc2NyaWJlcyBhIGktdGggcGFyYW1ldGVyIG9mIGNhbGwgQ1MsIGlz IGEKLSAgIHNpbXBsZSBuby1vcGVyYXRpb24gcGFzcy10aHJvdWdoIGZ1bmN0 aW9uIHRvIGl0c2VsZi4gICovCisgICBwYXNzLXRocm91Z2ggZnVuY3Rpb24g dG8gaXRzZWxmLiAgV2hlbiBTSU1QTEUgaXMgdHJ1ZSwgZnVydGhlciBjaGVj ayBpZgorICAgSkZVTkMgaXMgYSBzaW1wbGUgbm8tb3BlcmF0aW9uIHBhc3Mt dGhyb3VnaC4gICovCiAKIHN0YXRpYyBib29sCi1zZWxmX3JlY3Vyc2l2ZV9w YXNzX3Rocm91Z2hfcCAoY2dyYXBoX2VkZ2UgKmNzLCBpcGFfanVtcF9mdW5j ICpqZnVuYywgaW50IGkpCitzZWxmX3JlY3Vyc2l2ZV9wYXNzX3Rocm91Z2hf cCAoY2dyYXBoX2VkZ2UgKmNzLCBpcGFfanVtcF9mdW5jICpqZnVuYywgaW50 IGksCisJCQkgICAgICAgYm9vbCBzaW1wbGUgPSB0cnVlKQogewogICBlbnVt IGF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHk7CiAgIGlmIChjcy0+Y2FsbGVy ID09IGNzLT5jYWxsZWUtPmZ1bmN0aW9uX3N5bWJvbCAoJmF2YWlsYWJpbGl0 eSkKICAgICAgICYmIGF2YWlsYWJpbGl0eSA+IEFWQUlMX0lOVEVSUE9TQUJM RQogICAgICAgJiYgamZ1bmMtPnR5cGUgPT0gSVBBX0pGX1BBU1NfVEhST1VH SAotICAgICAgJiYgaXBhX2dldF9qZl9wYXNzX3Rocm91Z2hfb3BlcmF0aW9u IChqZnVuYykgPT0gTk9QX0VYUFIKKyAgICAgICYmICghc2ltcGxlIHx8IGlw YV9nZXRfamZfcGFzc190aHJvdWdoX29wZXJhdGlvbiAoamZ1bmMpID09IE5P UF9FWFBSKQogICAgICAgJiYgaXBhX2dldF9qZl9wYXNzX3Rocm91Z2hfZm9y bWFsX2lkIChqZnVuYykgPT0gaSkKICAgICByZXR1cm4gdHJ1ZTsKICAgcmV0 dXJuIGZhbHNlOwogfQogCiAvKiBSZXR1cm4gdHJ1ZSwgaWYgSkZVTkMsIHdo aWNoIGRlc2NyaWJlcyBhIHBhcnQgb2YgYW4gYWdncmVnYXRlIHJlcHJlc2Vu dGVkCi0gICBvciBwb2ludGVkIHRvIGJ5IHRoZSBpLXRoIHBhcmFtZXRlciBv ZiBjYWxsIENTLCBpcyBhIHNpbXBsZSBuby1vcGVyYXRpb24KLSAgIHBhc3Mt dGhyb3VnaCBmdW5jdGlvbiB0byBpdHNlbGYuICAqLworICAgb3IgcG9pbnRl ZCB0byBieSB0aGUgaS10aCBwYXJhbWV0ZXIgb2YgY2FsbCBDUywgaXMgYSBw YXNzLXRocm91Z2ggZnVuY3Rpb24KKyAgIHRvIGl0c2VsZi4gIFdoZW4gU0lN UExFIGlzIHRydWUsIGZ1cnRoZXIgY2hlY2sgaWYgSkZVTkMgaXMgYSBzaW1w bGUKKyAgIG5vLW9wZXJhdGlvbiBwYXNzLXRocm91Z2guICAqLwogCiBzdGF0 aWMgYm9vbAogc2VsZl9yZWN1cnNpdmVfYWdnX3Bhc3NfdGhyb3VnaF9wIChj Z3JhcGhfZWRnZSAqY3MsIGlwYV9hZ2dfamZfaXRlbSAqamZ1bmMsCi0JCQkJ ICAgaW50IGkpCisJCQkJICAgaW50IGksIGJvb2wgc2ltcGxlID0gdHJ1ZSkK IHsKICAgZW51bSBhdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5OwogICBpZiAo Y3MtPmNhbGxlciA9PSBjcy0+Y2FsbGVlLT5mdW5jdGlvbl9zeW1ib2wgKCZh dmFpbGFiaWxpdHkpCiAgICAgICAmJiBhdmFpbGFiaWxpdHkgPiBBVkFJTF9J TlRFUlBPU0FCTEUKICAgICAgICYmIGpmdW5jLT5qZnR5cGUgPT0gSVBBX0pG X0xPQURfQUdHCiAgICAgICAmJiBqZnVuYy0+b2Zmc2V0ID09IGpmdW5jLT52 YWx1ZS5sb2FkX2FnZy5vZmZzZXQKLSAgICAgICYmIGpmdW5jLT52YWx1ZS5w YXNzX3Rocm91Z2gub3BlcmF0aW9uID09IE5PUF9FWFBSCi0gICAgICAmJiBq ZnVuYy0+dmFsdWUucGFzc190aHJvdWdoLmZvcm1hbF9pZCA9PSBpKQorICAg ICAgJiYgKCFzaW1wbGUgfHwgamZ1bmMtPnZhbHVlLnBhc3NfdGhyb3VnaC5v cGVyYXRpb24gPT0gTk9QX0VYUFIpCisgICAgICAmJiBqZnVuYy0+dmFsdWUu cGFzc190aHJvdWdoLmZvcm1hbF9pZCA9PSBpCisgICAgICAmJiB1c2VsZXNz X3R5cGVfY29udmVyc2lvbl9wIChqZnVuYy0+dmFsdWUubG9hZF9hZ2cudHlw ZSwgamZ1bmMtPnR5cGUpKQogICAgIHJldHVybiB0cnVlOwogICByZXR1cm4g ZmFsc2U7CiB9CkBAIC00NjUzLDkgKzQ2ODYsNiBAQCBmaW5kX21vcmVfc2Nh bGFyX3ZhbHVlc19mb3JfY2FsbGVyc19zdWJzZXQgKHN0cnVjdCBjZ3JhcGhf bm9kZSAqbm9kZSwKIAkgIHN0cnVjdCBpcGFfanVtcF9mdW5jICpqdW1wX2Z1 bmM7CiAJICB0cmVlIHQ7CiAKLQkgIGlmIChJUEFfTk9ERV9SRUYgKGNzLT5j YWxsZXIpICYmIElQQV9OT0RFX1JFRiAoY3MtPmNhbGxlciktPm5vZGVfZGVh ZCkKLQkgICAgY29udGludWU7Ci0KIAkgIGlmICghSVBBX0VER0VfUkVGIChj cykKIAkgICAgICB8fCBpID49IGlwYV9nZXRfY3NfYXJndW1lbnRfY291bnQg KElQQV9FREdFX1JFRiAoY3MpKQogCSAgICAgIHx8IChpID09IDAKQEAgLTQ2 NjUsMTAgKzQ2OTUsMzAgQEAgZmluZF9tb3JlX3NjYWxhcl92YWx1ZXNfZm9y X2NhbGxlcnNfc3Vic2V0IChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUsCiAJ ICAgICAgYnJlYWs7CiAJICAgIH0KIAkgIGp1bXBfZnVuYyA9IGlwYV9nZXRf aXRoX2p1bXBfZnVuYyAoSVBBX0VER0VfUkVGIChjcyksIGkpOwotCSAgaWYg KHNlbGZfcmVjdXJzaXZlX3Bhc3NfdGhyb3VnaF9wIChjcywganVtcF9mdW5j LCBpKSkKLQkgICAgY29udGludWU7CiAKLQkgIHQgPSBpcGFfdmFsdWVfZnJv bV9qZnVuYyAoSVBBX05PREVfUkVGIChjcy0+Y2FsbGVyKSwganVtcF9mdW5j LCB0eXBlKTsKKwkgIC8qIEJlc2lkZXMgc2ltcGxlIHBhc3MtdGhyb3VnaCBq dW1wIGZ1bmN0aW9uLCBhcml0aG1ldGljIGp1bXAKKwkgICAgIGZ1bmN0aW9u IGNvdWxkIGFsc28gaW50cm9kdWNlIGFyZ3VtZW50LWRpcmVjdC1wYXNzLXRo cm91Z2ggZm9yCisJICAgICBzZWxmLWZlZWRpbmcgcmVjdXJzaXZlIGNhbGwu ICBGb3IgZXhhbXBsZSwKKworCSAgICAgICAgZm4gKGludCBpKQorCSAgICAg ICAgeworCSAgICAgICAgICBmbiAoaSAmIDEpOworCSAgICAgICAgfQorCisJ ICAgICBHaXZlbiB0aGF0IGkgaXMgMCwgcmVjdXJzaXZlIHByb3BhZ2F0aW9u IHZpYSAoaSAmIDEpIGFsc28gZ2V0cworCSAgICAgMC4gICovCisJICBpZiAo c2VsZl9yZWN1cnNpdmVfcGFzc190aHJvdWdoX3AgKGNzLCBqdW1wX2Z1bmMs IGksIGZhbHNlKSkKKwkgICAgeworCSAgICAgIGdjY19hc3NlcnQgKG5ld3Zh bCk7CisJICAgICAgdCA9IGlwYV9nZXRfamZfYXJpdGhfcmVzdWx0ICgKKwkJ CQlpcGFfZ2V0X2pmX3Bhc3NfdGhyb3VnaF9vcGVyYXRpb24gKGp1bXBfZnVu YyksCisJCQkJbmV3dmFsLAorCQkJCWlwYV9nZXRfamZfcGFzc190aHJvdWdo X29wZXJhbmQgKGp1bXBfZnVuYyksCisJCQkJdHlwZSk7CisJICAgIH0KKwkg IGVsc2UKKwkgICAgdCA9IGlwYV92YWx1ZV9mcm9tX2pmdW5jIChJUEFfTk9E RV9SRUYgKGNzLT5jYWxsZXIpLCBqdW1wX2Z1bmMsCisJCQkJICAgICAgdHlw ZSk7CiAJICBpZiAoIXQKIAkgICAgICB8fCAobmV3dmFsCiAJCSAgJiYgIXZh bHVlc19lcXVhbF9mb3JfaXBjcF9wICh0LCBuZXd2YWwpKQpAQCAtNDgxNywx OSArNDg2NywxMiBAQCBpbnRlcnNlY3Rfd2l0aF9wbGF0cyAoY2xhc3MgaXBj cF9wYXJhbV9sYXR0aWNlcyAqcGxhdHMsCiAJICAgIGJyZWFrOwogCSAgaWYg KGFnbGF0LT5vZmZzZXQgLSBvZmZzZXQgPT0gaXRlbS0+b2Zmc2V0KQogCSAg ICB7Ci0JICAgICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoaXRlbS0+dmFsdWUp OwogCSAgICAgIGlmIChhZ2xhdC0+aXNfc2luZ2xlX2NvbnN0ICgpKQogCQl7 CiAJCSAgdHJlZSB2YWx1ZSA9IGFnbGF0LT52YWx1ZXMtPnZhbHVlOwogCiAJ CSAgaWYgKHZhbHVlc19lcXVhbF9mb3JfaXBjcF9wIChpdGVtLT52YWx1ZSwg dmFsdWUpKQogCQkgICAgZm91bmQgPSB0cnVlOwotCQkgIGVsc2UgaWYgKGl0 ZW0tPnZhbHVlID09IGVycm9yX21hcmtfbm9kZSkKLQkJICAgIHsKLQkJICAg ICAgLyogUmVwbGFjZSB1bmtub3duIHBsYWNlIGhvbGRlciB2YWx1ZSB3aXRo IHJlYWwgb25lLiAgKi8KLQkJICAgICAgaXRlbS0+dmFsdWUgPSB2YWx1ZTsK LQkJICAgICAgZm91bmQgPSB0cnVlOwotCQkgICAgfQogCQl9CiAJICAgICAg YnJlYWs7CiAJICAgIH0KQEAgLTQ4OTgsMTIgKzQ5NDEsNiBAQCBpbnRlcnNl Y3Rfd2l0aF9hZ2dfcmVwbGFjZW1lbnRzIChzdHJ1Y3QgY2dyYXBoX25vZGUg Km5vZGUsIGludCBpbmRleCwKIAkgICAgewogCSAgICAgIGlmICh2YWx1ZXNf ZXF1YWxfZm9yX2lwY3BfcCAoaXRlbS0+dmFsdWUsIGF2LT52YWx1ZSkpCiAJ CWZvdW5kID0gdHJ1ZTsKLQkgICAgICBlbHNlIGlmIChpdGVtLT52YWx1ZSA9 PSBlcnJvcl9tYXJrX25vZGUpCi0JCXsKLQkJICAvKiBSZXBsYWNlIHBsYWNl IGhvbGRlciB2YWx1ZSB3aXRoIHJlYWwgb25lLiAgKi8KLQkJICBpdGVtLT52 YWx1ZSA9IGF2LT52YWx1ZTsKLQkJICBmb3VuZCA9IHRydWU7Ci0JCX0KIAkg ICAgICBicmVhazsKIAkgICAgfQogCX0KQEAgLTUwMDgsMzEgKzUwNDUsMTYg QEAgaW50ZXJzZWN0X2FnZ3JlZ2F0ZXNfd2l0aF9lZGdlIChzdHJ1Y3QgY2dy YXBoX2VkZ2UgKmNzLCBpbnQgaW5kZXgsCiAJZm9yICh1bnNpZ25lZCBpID0g MDsgaSA8IGpmdW5jLT5hZ2cuaXRlbXMtPmxlbmd0aCAoKTsgaSsrKQogCSAg ewogCSAgICBzdHJ1Y3QgaXBhX2FnZ19qZl9pdGVtICphZ2dfaXRlbSA9ICYo KmpmdW5jLT5hZ2cuaXRlbXMpW2ldOwotCSAgICBzdHJ1Y3QgaXBhX2FnZ192 YWx1ZSBhZ2dfdmFsdWU7Ci0KLQkgICAgaWYgKHNlbGZfcmVjdXJzaXZlX2Fn Z19wYXNzX3Rocm91Z2hfcCAoY3MsIGFnZ19pdGVtLCBpbmRleCkpCi0JICAg ICAgewotCQkvKiBGb3IgYSBzZWxmLXJlY3Vyc2l2ZSBjYWxsLCBpZiBhZ2dy ZWdhdGUganVtcCBmdW5jdGlvbiBpcyBhCi0JCSAgIHNpbXBsZSBwYXNzLXRo cm91Z2gsIHRoZSBleGFjdCB2YWx1ZSB0aGF0IGl0IHN0YW5kcyBmb3IgaXMK LQkJICAgbm90IGtub3duIGF0IHRoaXMgcG9pbnQsIHdoaWNoIG11c3QgY29t ZXMgZnJvbSBvdGhlciBjYWxsCi0JCSAgIHNpdGVzLiAgQnV0IHdlIHN0aWxs IG5lZWQgdG8gYWRkIGEgcGxhY2UgaG9sZGVyIGluIHZhbHVlCi0JCSAgIHNl dHMgdG8gaW5kaWNhdGUgaXQsIGhlcmUgd2UgdXNlIGVycm9yX21hcmtfbm9k ZSB0bwotCQkgICByZXByZXNlbnQgdGhlIHNwZWNpYWwgdW5rbm93biB2YWx1 ZSwgd2hpY2ggd2lsbCBiZSByZXBsYWNlZAotCQkgICB3aXRoIHJlYWwgb25l IGR1cmluZyBsYXRlciBpbnRlcnNlY3Rpbmcgb3BlcmF0aW9ucy4gICovCi0J CWFnZ192YWx1ZS52YWx1ZSA9IGVycm9yX21hcmtfbm9kZTsKLQkgICAgICB9 Ci0JICAgIGVsc2UKKwkgICAgdHJlZSB2YWx1ZSA9IGlwYV9hZ2dfdmFsdWVf ZnJvbV9ub2RlIChjYWxsZXJfaW5mbywgY3MtPmNhbGxlciwKKwkJCQkJCSAg YWdnX2l0ZW0pOworCSAgICBpZiAodmFsdWUpCiAJICAgICAgewotCQl0cmVl IHZhbHVlID0gaXBhX2FnZ192YWx1ZV9mcm9tX25vZGUgKGNhbGxlcl9pbmZv LCBjcy0+Y2FsbGVyLAotCQkJCQkJICAgICAgYWdnX2l0ZW0pOwotCQlpZiAo IXZhbHVlKQotCQkgIGNvbnRpbnVlOworCQlzdHJ1Y3QgaXBhX2FnZ192YWx1 ZSBhZ2dfdmFsdWU7CiAKIAkJYWdnX3ZhbHVlLnZhbHVlID0gdmFsdWU7CisJ CWFnZ192YWx1ZS5vZmZzZXQgPSBhZ2dfaXRlbS0+b2Zmc2V0OworCQlpbnRl ci5zYWZlX3B1c2ggKGFnZ192YWx1ZSk7CiAJICAgICAgfQotCi0JICAgIGFn Z192YWx1ZS5vZmZzZXQgPSBhZ2dfaXRlbS0+b2Zmc2V0OwotCSAgICBpbnRl ci5zYWZlX3B1c2ggKGFnZ192YWx1ZSk7CiAJICB9CiAgICAgICBlbHNlCiAJ Rk9SX0VBQ0hfVkVDX0VMVCAoaW50ZXIsIGssIGl0ZW0pCkBAIC01MDUzLDI1 ICs1MDc1LDMyIEBAIGludGVyc2VjdF9hZ2dyZWdhdGVzX3dpdGhfZWRnZSAo c3RydWN0IGNncmFwaF9lZGdlICpjcywgaW50IGluZGV4LAogCQkgIHsKIAkJ ICAgIHRyZWUgdmFsdWU7CiAKLQkJICAgIGlmIChzZWxmX3JlY3Vyc2l2ZV9h Z2dfcGFzc190aHJvdWdoX3AgKGNzLCB0aSwgaW5kZXgpKQotCQkgICAgICB7 Ci0JCQkvKiBBIHNpbXBsZSBhZ2dyZWdhdGUgcGFzcy10aHJvdWdoIGluIHNl bGYtcmVjdXJzaXZlCi0JCQkgICBjYWxsIHNob3VsZCBsZWFkIHRvIHNhbWUg dmFsdWUuICAqLwotCQkJZm91bmQgPSB0cnVlOwotCQkgICAgICB9Ci0JCSAg ICBlbHNlIGlmICgodmFsdWUgPSBpcGFfYWdnX3ZhbHVlX2Zyb21fbm9kZSAo Y2FsbGVyX2luZm8sCi0JCQkJCQkJICAgICBjcy0+Y2FsbGVyLCB0aSkpKQot CQkgICAgICB7Ci0JCQlpZiAodmFsdWVzX2VxdWFsX2Zvcl9pcGNwX3AgKGl0 ZW0tPnZhbHVlLCB2YWx1ZSkpCi0JCQkgIGZvdW5kID0gdHJ1ZTsKLQkJCWVs c2UgaWYgKGl0ZW0tPnZhbHVlID09IGVycm9yX21hcmtfbm9kZSkKLQkJCSAg ewotCQkJICAgIC8qIFJlcGxhY2UgdW5rbm93biBwbGFjZSBob2xkZXIgdmFs dWUgd2l0aCByZWFsCi0JCQkgICAgICAgb25lLiAgKi8KLQkJCSAgICBpdGVt LT52YWx1ZSA9IHZhbHVlOwotCQkJICAgIGZvdW5kID0gdHJ1ZTsKLQkJCSAg fQotCQkgICAgICB9CisJCSAgICAvKiBCZXNpZGVzIHNpbXBsZSBwYXNzLXRo cm91Z2ggYWdncmVnYXRlIGp1bXAgZnVuY3Rpb24sCisJCSAgICAgICBhcml0 aG1ldGljIGFnZ3JlZ2F0ZSBqdW1wIGZ1bmN0aW9uIGNvdWxkIGFsc28gYnJp bmcKKwkJICAgICAgIHNhbWUgYWdncmVnYXRlIHZhbHVlIGFzIHBhcmFtZXRl ciBwYXNzZWQtaW4gZm9yCisJCSAgICAgICBzZWxmLWZlZWRpbmcgcmVjdXJz aXZlIGNhbGwuICBGb3IgZXhhbXBsZSwKKworCQkgICAgICAgICBmbiAoaW50 ICppKQorCQkgICAgICAgICAgIHsKKwkJICAgICAgICAgICAgIGludCBqID0g KmkgJiAxOworCQkgICAgICAgICAgICAgZm4gKCZqKTsKKwkJICAgICAgICAg ICB9CisKKwkJICAgICAgIEdpdmVuIHRoYXQgKmkgaXMgMCwgcmVjdXJzaXZl IHByb3BhZ2F0aW9uIHZpYSAoKmkgJiAxKQorCQkgICAgICAgYWxzbyBnZXRz IDAuICAqLworCQkgICAgaWYgKHNlbGZfcmVjdXJzaXZlX2FnZ19wYXNzX3Ro cm91Z2hfcCAoY3MsIHRpLCBpbmRleCwKKwkJCQkJCQkgICBmYWxzZSkpCisJ CSAgICAgIHZhbHVlID0gaXBhX2dldF9qZl9hcml0aF9yZXN1bHQgKAorCQkJ CQl0aS0+dmFsdWUucGFzc190aHJvdWdoLm9wZXJhdGlvbiwKKwkJCQkJaXRl bS0+dmFsdWUsCisJCQkJCXRpLT52YWx1ZS5wYXNzX3Rocm91Z2gub3BlcmFu ZCwKKwkJCQkJdGktPnR5cGUpOworCQkgICAgZWxzZQorCQkgICAgICB2YWx1 ZSA9IGlwYV9hZ2dfdmFsdWVfZnJvbV9ub2RlIChjYWxsZXJfaW5mbywKKwkJ CQkJCSAgICAgICBjcy0+Y2FsbGVyLCB0aSk7CisKKwkJICAgIGlmICh2YWx1 ZSAmJiB2YWx1ZXNfZXF1YWxfZm9yX2lwY3BfcCAoaXRlbS0+dmFsdWUsIHZh bHVlKSkKKwkJICAgICAgZm91bmQgPSB0cnVlOwogCQkgICAgYnJlYWs7CiAJ CSAgfQogCQlsKys7CkBAIC01MTQ3LDkgKzUxNzYsNiBAQCBmaW5kX2FnZ3Jl Z2F0ZV92YWx1ZXNfZm9yX2NhbGxlcnNfc3Vic2V0IChzdHJ1Y3QgY2dyYXBo X25vZGUgKm5vZGUsCiAJICBpZiAoIWl0ZW0tPnZhbHVlKQogCSAgICBjb250 aW51ZTsKIAotCSAgLyogQWxsIHZhbHVlcyBtdXN0IGJlIHJlYWwgdmFsdWVz LCBub3QgdW5rbm93biBwbGFjZSBob2xkZXJzLiAgKi8KLQkgIGdjY19hc3Nl cnQgKGl0ZW0tPnZhbHVlICE9IGVycm9yX21hcmtfbm9kZSk7Ci0KIAkgIHYg PSBnZ2NfYWxsb2M8aXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZT4gKCk7CiAJ ICB2LT5pbmRleCA9IGk7CiAJICB2LT5vZmZzZXQgPSBpdGVtLT5vZmZzZXQ7 CkBAIC01NTQ1LDEzICs1NTcxLDMzIEBAIGRlY2lkZV93aGV0aGVyX3ZlcnNp b25fbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQogICBpZiAoaW5m by0+ZG9fY2xvbmVfZm9yX2FsbF9jb250ZXh0cykKICAgICB7CiAgICAgICBz dHJ1Y3QgY2dyYXBoX25vZGUgKmNsb25lOwotICAgICAgdmVjPGNncmFwaF9l ZGdlICo+IGNhbGxlcnM7CisgICAgICB2ZWM8Y2dyYXBoX2VkZ2UgKj4gY2Fs bGVycyA9IG5vZGUtPmNvbGxlY3RfY2FsbGVycyAoKTsKKworICAgICAgZm9y IChpbnQgaSA9IGNhbGxlcnMubGVuZ3RoICgpIC0gMTsgaSA+PSAwOyBpLS0p CisJeworCSAgY2dyYXBoX2VkZ2UgKmNzID0gY2FsbGVyc1tpXTsKKwkgIGNs YXNzIGlwYV9ub2RlX3BhcmFtcyAqY2FsbGVyX2luZm8gPSBJUEFfTk9ERV9S RUYgKGNzLT5jYWxsZXIpOworCisJICBpZiAoY2FsbGVyX2luZm8gJiYgY2Fs bGVyX2luZm8tPm5vZGVfZGVhZCkKKwkgICAgY2FsbGVycy51bm9yZGVyZWRf cmVtb3ZlIChpKTsKKwl9CisKKyAgICAgIGlmICghYWRqdXN0X2NhbGxlcnNf Zm9yX3ZhbHVlX2ludGVyc2VjdGlvbiAoY2FsbGVycywgbm9kZSkpCisJewor CSAgLyogSWYgbm9kZSBpcyBub3QgY2FsbGVkIGJ5IGFueW9uZSwgb3IgYWxs IGl0cyBjYWxsZXIgZWRnZXMgYXJlCisJICAgICBzZWxmLXJlY3Vyc2l2ZSwg dGhlIG5vZGUgaXMgbm90IHJlYWxseSBiZSBpbiB1c2UsIG5vIG5lZWQgdG8K KwkgICAgIGRvIGNsb25pbmcuICAqLworCSAgY2FsbGVycy5yZWxlYXNlICgp OworCSAga25vd25fY3N0cy5yZWxlYXNlICgpOworCSAga25vd25fY29udGV4 dHMucmVsZWFzZSAoKTsKKwkgIGluZm8tPmRvX2Nsb25lX2Zvcl9hbGxfY29u dGV4dHMgPSBmYWxzZTsKKwkgIHJldHVybiByZXQ7CisJfQogCiAgICAgICBp ZiAoZHVtcF9maWxlKQogCWZwcmludGYgKGR1bXBfZmlsZSwgIiAtIENyZWF0 aW5nIGEgc3BlY2lhbGl6ZWQgbm9kZSBvZiAlcyAiCiAJCSAiZm9yIGFsbCBr bm93biBjb250ZXh0cy5cbiIsIG5vZGUtPmR1bXBfbmFtZSAoKSk7CiAKLSAg ICAgIGNhbGxlcnMgPSBub2RlLT5jb2xsZWN0X2NhbGxlcnMgKCk7CiAgICAg ICBmaW5kX21vcmVfc2NhbGFyX3ZhbHVlc19mb3JfY2FsbGVyc19zdWJzZXQg KG5vZGUsIGtub3duX2NzdHMsIGNhbGxlcnMpOwogICAgICAgZmluZF9tb3Jl X2NvbnRleHRzX2Zvcl9jYWxsZXJfc3Vic2V0IChub2RlLCAma25vd25fY29u dGV4dHMsIGNhbGxlcnMpOwogICAgICAgaXBhX2FnZ19yZXBsYWNlbWVudF92 YWx1ZSAqYWdndmFscwpAQCAtNTU2NCw3ICs1NjEwLDYgQEAgZGVjaWRlX3do ZXRoZXJfdmVyc2lvbl9ub2RlIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUp CiAJfQogICAgICAgY2xvbmUgPSBjcmVhdGVfc3BlY2lhbGl6ZWRfbm9kZSAo bm9kZSwga25vd25fY3N0cywga25vd25fY29udGV4dHMsCiAJCQkJICAgICAg IGFnZ3ZhbHMsIGNhbGxlcnMpOwotICAgICAgaW5mbyA9IElQQV9OT0RFX1JF RiAobm9kZSk7CiAgICAgICBpbmZvLT5kb19jbG9uZV9mb3JfYWxsX2NvbnRl eHRzID0gZmFsc2U7CiAgICAgICBJUEFfTk9ERV9SRUYgKGNsb25lKS0+aXNf YWxsX2NvbnRleHRzX2Nsb25lID0gdHJ1ZTsKICAgICAgIHJldCA9IHRydWU7 CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9pcGEvcHI5MzIw My5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvaXBhL3ByOTMyMDMuQwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjRjZDY5MDAx YjUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9p cGEvcHI5MzIwMy5DCkBAIC0wLDAgKzEsOTUgQEAKKy8qIHsgZGctZG8gY29t cGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMyAtdyAtc3RkPWdudSsr MTEiIH0gKi8KKworY2xhc3MgYSB7CitwdWJsaWM6CisgIGEoY2hhciAqKTsK K307CitjbGFzcyBhZCB7CitwdWJsaWM6CisgIGFkKGEgKik7Cit9OworY2xh c3MgYiB7fTsKK3VzaW5nIGFoID0gY2xhc3MgYWsgeworICB1c2luZyBhbCA9 IGNoYXI7CisKK3B1YmxpYzoKKyAgYWsoYikgOiBhaygwKSB7fQorICBhayBh bigpIHsgcmV0dXJuIGFwICYgMTsgfQorICBhbCBhcDsKKyAgYWsoYWwgYWYp IDogYXAoYWYpIHt9Cit9Oworc3RydWN0IGF0IHsKKyAgYWggYXU7CisgIGlu dCBhdjsKKyAgY2hhciBhdzsKKyAgY2hhciBheDsKK307CitjbGFzcyBheiB7 CitwdWJsaWM6CisgIHN0cnVjdCBiYSB7CisgICAgdm9pZCBiYihhayBhbSkg eworICAgICAgYWsgYmMgPSBhbS5hbigpOworICAgICAgYmIoYmMpOworICAg IH0KKyAgfTsKKyAgdm9pZCBiZChhayBhbSkgeyBiZS5iYihhbSk7IH0KKyAg YmEgYmU7Cit9OworY2xhc3MgYmcgeworcHVibGljOgorICBpbnQgYmg7Cisg IGF0IGJpOworfTsKK2ludCBiajsKK2ludCAqYms7CitpbnQgYzsKK2NsYXNz IGJsIHsKKyAgYm9vbCBibSgpOworICBiZyBibjsKKyAgYXogYm87CisgIGlu dCBlOworICBpbnQgYnE7Cit9OworY2xhc3MgYnMgeworcHVibGljOgorICBi cyhpbnQgKiwgYWggKiwgY2hhciAqLCBjaGFyICosIGludCk7Cit9OwordGVt cGxhdGUgPCB0eXBlbmFtZSBidCA+IGNsYXNzIGJ1IDogYnMgeworICB1c2lu ZyBidiA9IHR5cGVuYW1lIGJ0OjpidjsKKworcHVibGljOgorICB0ZW1wbGF0 ZSA8IHR5cGVuYW1lLi4uIGJ4ID4KKyAgYnUoYSAqYnksIGludCAqYnosIGF0 IGJvZHksIGJ4Li4uKQorICAgICAgOiBicyhieiwgJmJvZHkuYXUsICZib2R5 LmF3LCAmYm9keS5heCwgYm9keS5hdiksIGNhKGJ4KCkuLi4pLCBjYihieSks CisgICAgICAgIGNjKGJ5KSwgY2QoYnkpLCBjZShieSkge30KKyAgdm9pZCBj ZigpIHsKKyAgICBhdXRvIGNnID0gY2goKTsKKyAgICBhdXRvIGNpID0gKmNq KCk7CisgICAgY2EuY2sodGhpcywgY2csICZjaSk7CisgIH0KKyAgYnQgY2E7 CisgIGFkIGNiOworICBhZCBjYzsKKyAgYWQgY2Q7CisgIGFkIGNlOworICBi diAqY2ooKTsKKyAgYnYgY2goKTsKK307CitjbGFzcyBjbCB7CitwdWJsaWM6 CisgIHVzaW5nIGJ2ID0gc3RydWN0IHt9OworICBjbChheiAqLCBpbnQsIGlu dCwgaW50LCBpbnQsIGEgKiwgaW50LCBpbnQgKiopOworICB2b2lkIGNrKGJz ICosIGJ2LCBidiAqKSB7CisgICAgYiBkOworICAgIGFrIGNpKGQpOworICAg IGJvLmJkKGNpKTsKKyAgfQorICBheiBibzsKK307Citib29sIGJsOjpibSgp IHsKKyAgYSBieSgiIik7CisgIGJ1PCBjbCA+IGNuKCZieSwgJmJqLCBibi5i aSwgJmJvLCBjLCBibi5iaCwgZSwgMCwgJmJ5LCBicSwgJmJrKTsKKyAgY24u Y2YoKTsKK30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv aXBhL2lwY3AtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL2lwY3At MS5jCmluZGV4IDk1MjY5NGQzMDJiLi5iYWE5Yzk3ZmZiMCAxMDA2NDQKLS0t IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL2lwY3AtMS5jCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9pcGNwLTEuYwpAQCAtNDUsNyArNDUs NyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQogfQogCiAKLS8q IHsgZGctZmluYWwgeyBzY2FuLWlwYS1kdW1wICJDcmVhdGluZyBhIHNwZWNp YWxpemVkIG5vZGUgb2YgZi4qZm9yIGFsbCBrbm93biBjb250ZXh0cyIgImNw IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWlwYS1kdW1wICJDcmVh dGluZyBhIHNwZWNpYWxpemVkIG5vZGUgb2YgZiIgImNwIiB9IH0gKi8KIC8q IHsgZGctZmluYWwgeyBzY2FuLWlwYS1kdW1wICJyZXBsYWNpbmcgcGFyYW0g LjAgYSB3aXRoIGNvbnN0IDciICJjcCIgIH0gfSAqLwogCiAKLS0gCjIuMTcu MQoK --_002_BYAPR01MB48698368F177337119EF9040F7090BYAPR01MB4869prod_--