From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 51086 invoked by alias); 16 Feb 2017 17:48:48 -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 50971 invoked by uid 89); 16 Feb 2017 17:48:47 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.4 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.2 spammy=sk:scale_b, H*Ad:U*pthaugen, estimated, H*MI:eurprd08 X-HELO: EUR01-VE1-obe.outbound.protection.outlook.com Received: from mail-ve1eur01on0058.outbound.protection.outlook.com (HELO EUR01-VE1-obe.outbound.protection.outlook.com) (104.47.1.58) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 16 Feb 2017 17:48:37 +0000 Received: from VI1PR0802MB2176.eurprd08.prod.outlook.com (10.172.12.21) by VI1PR0802MB2174.eurprd08.prod.outlook.com (10.172.12.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.16; Thu, 16 Feb 2017 17:48:34 +0000 Received: from VI1PR0802MB2176.eurprd08.prod.outlook.com ([10.172.12.21]) by VI1PR0802MB2176.eurprd08.prod.outlook.com ([10.172.12.21]) with mapi id 15.01.0888.030; Thu, 16 Feb 2017 17:48:33 +0000 From: Bin Cheng To: "gcc-patches@gcc.gnu.org" CC: nd , "pthaugen@linux.vnet.ibm.com" Subject: [PATCH PR77536]Generate correct profiling information for vectorized loop Date: Thu, 16 Feb 2017 18:38:00 -0000 Message-ID: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Bin.Cheng@arm.com; x-ms-office365-filtering-correlation-id: a8e77db3-bd42-4807-e4f9-08d456940705 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:VI1PR0802MB2174; x-microsoft-exchange-diagnostics: 1;VI1PR0802MB2174;7:zyGMHVUmh5O/aCbI8Wk7GNG5E4pSzRmoo8pJwKqbUbf8GgEJKiVRfRz4MrMUFutaBGxj5+q1lu11KeJevNRB2c1xHRZ2cFXFdz9TUFQYmrVnK+8Cb8QgQKa+HUte/2YgK/VL/b/Idzz05wzSNKtMqIfgidH6x8l/dNMVHfUpS0Q2sLTAlEuOOmowffev885jyxoB/oTifFMoVbnNrdj0WbSs41M4WrlXYha+lFMO89AXcvH1Ee6kFultkb+THfG874S688YI93Hl3FxCt+6bAB9mlfYPoxxVJU/0TAs8Qare/Sb5dOr3NevZbAygoInP0M0JAD1nAI2DwHuw9jWdCA== nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(102415395)(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6041248)(20161123558025)(20161123555025)(20161123564025)(20161123560025)(20161123562025)(6072148);SRVR:VI1PR0802MB2174;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0802MB2174; x-forefront-prvs: 0220D4B98D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(7916002)(39850400002)(39450400003)(39860400002)(39410400002)(39840400002)(377424004)(199003)(189002)(54534003)(6436002)(54906002)(5660300001)(6506006)(25786008)(81156014)(54356999)(99936001)(50986999)(33656002)(55016002)(5640700003)(68736007)(8676002)(105586002)(53936002)(97736004)(99286003)(6916009)(389900003)(9686003)(77096006)(66066001)(7696004)(122556002)(189998001)(81166006)(2501003)(2351001)(101416001)(4326007)(86362001)(110136004)(38730400002)(92566002)(74316002)(2900100001)(8936002)(3280700002)(2906002)(102836003)(106356001)(3846002)(305945005)(3660700001)(6116002)(7736002)(106116001);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0802MB2174;H:VI1PR0802MB2176.eurprd08.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_002_VI1PR0802MB217672F0D45BA9EA238CA7BDE75A0VI1PR0802MB2176_" MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Feb 2017 17:48:33.5204 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2174 X-IsSubscribed: yes X-SW-Source: 2017-02/txt/msg01058.txt.bz2 --_002_VI1PR0802MB217672F0D45BA9EA238CA7BDE75A0VI1PR0802MB2176_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 1435 Hi, After fixing PR79347, the main problem with vectorizer is we scale down pro= filing counters for vect_loop by VF, regardless of context CFG's profiling information. Th= is is wrong and sometimes makes vect_loop not hot code, which may confuses following optimi= zers. This patch generates well-formed profiling information as generic tree unroller = does. It borrows code from tree-ssa-loop-manip.c and does small refactors to existing code. = Vectorizer will not introduce mismatch counters with it, and unroll and vrp2 are the two ma= jor passes messing up profiling counters now. Though it removes all mismatch in vecto= rizer, I am not sure if this counts as a regression fix. BTW, it may also help PR78116? Hi Pat, could you please help verify this? = Thanks! Bootstrap and test on x86_64 and AArch64 ongoing. Is it OK if no failures? Thanks, bin 2017-02-16 Bin Cheng PR tree-optimization/77536 * tree-ssa-loop-manip.c (niter_for_unrolled_loop): New function. (tree_transform_and_unroll_loop): Use above function to compute the estimated niter of unrolled loop. * tree-ssa-loop-manip.h niter_for_unrolled_loop(): New declaration. * tree-vect-loop.c (scale_profile_for_vect_loop): New function. (vect_transform_loop): Call above function. gcc/testsuite/ChangeLog 2017-02-16 Bin Cheng PR tree-optimization/77536 * gcc.dg/vect/pr79347.c: Revise testing string.= --_002_VI1PR0802MB217672F0D45BA9EA238CA7BDE75A0VI1PR0802MB2176_ Content-Type: text/plain; name="pr77536-20170216.txt" Content-Description: pr77536-20170216.txt Content-Disposition: attachment; filename="pr77536-20170216.txt"; size=6580; creation-date="Thu, 16 Feb 2017 17:47:10 GMT"; modification-date="Thu, 16 Feb 2017 17:47:10 GMT" Content-Transfer-Encoding: base64 Content-length: 8923 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvcHI3OTM0 Ny5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9wcjc5MzQ3LmMKaW5k ZXggNTg2YzYzOC4uNjgyNTQyMCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC9wcjc5MzQ3LmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC9wcjc5MzQ3LmMKQEAgLTEwLDQgKzEwLDQgQEAgdm9pZCBu KHZvaWQpCiAgICAgYVtpXSsrOwogfQogCi0vKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgIkludmFsaWQgc3VtIG9mICIgMiAidmVjdCIg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICJJ bnZhbGlkIHN1bSBvZiAiICJ2ZWN0IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90cmVlLXNzYS1sb29wLW1hbmlwLmMgYi9nY2MvdHJlZS1zc2EtbG9vcC1t YW5pcC5jCmluZGV4IDQzZGYyOWMuLjZkODY4YzUgMTAwNjQ0Ci0tLSBhL2dj Yy90cmVlLXNzYS1sb29wLW1hbmlwLmMKKysrIGIvZ2NjL3RyZWUtc3NhLWxv b3AtbWFuaXAuYwpAQCAtMTA5Myw2ICsxMDkzLDMxIEBAIHNjYWxlX2RvbWlu YXRlZF9ibG9ja3NfaW5fbG9vcCAoc3RydWN0IGxvb3AgKmxvb3AsIGJhc2lj X2Jsb2NrIGJiLAogICAgIH0KIH0KIAorLyogUmV0dXJuIGVzdGltYXRlZCBu aXRlciBmb3IgTE9PUCBhZnRlciB1bnJvbGxpbmcgYnkgRkFDVE9SIHRpbWVz LiAgKi8KKwordW5zaWduZWQKK25pdGVyX2Zvcl91bnJvbGxlZF9sb29wIChz dHJ1Y3QgbG9vcCAqbG9vcCwgdW5zaWduZWQgZmFjdG9yKQoreworICB1bnNp Z25lZCBlc3Rfbml0ZXIgPSBleHBlY3RlZF9sb29wX2l0ZXJhdGlvbnMgKGxv b3ApOworICBnY2NfYXNzZXJ0IChmYWN0b3IgIT0gMCk7CisgIHVuc2lnbmVk IG5ld19lc3Rfbml0ZXIgPSBlc3Rfbml0ZXIgLyBmYWN0b3I7CisKKyAgLyog V2l0aG91dCBwcm9maWxlIGZlZWRiYWNrLCBsb29wcyBmb3Igd2hpY2ggd2Ug ZG8gbm90IGtub3cgYSBiZXR0ZXIgZXN0aW1hdGUKKyAgICAgYXJlIGFzc3Vt ZWQgdG8gcm9sbCAxMCB0aW1lcy4gIFdoZW4gd2UgdW5yb2xsIHN1Y2ggbG9v cCwgaXQgYXBwZWFycyB0bworICAgICByb2xsIHRvbyBsaXR0bGUsIGFuZCBp dCBtYXkgZXZlbiBzZWVtIHRvIGJlIGNvbGQuICBUbyBhdm9pZCB0aGlzLCB3 ZQorICAgICBlbnN1cmUgdGhhdCB0aGUgY3JlYXRlZCBsb29wIGFwcGVhcnMg dG8gcm9sbCBhdCBsZWFzdCA1IHRpbWVzIChidXQgYXQKKyAgICAgbW9zdCBh cyBtYW55IHRpbWVzIGFzIGJlZm9yZSB1bnJvbGxpbmcpLiAgKi8KKyAgaWYg KG5ld19lc3Rfbml0ZXIgPCA1KQorICAgIHsKKyAgICAgIGlmIChlc3Rfbml0 ZXIgPCA1KQorCW5ld19lc3Rfbml0ZXIgPSBlc3Rfbml0ZXI7CisgICAgICBl bHNlCisJbmV3X2VzdF9uaXRlciA9IDU7CisgICAgfQorCisgIHJldHVybiBu ZXdfZXN0X25pdGVyOworfQorCiAvKiBVbnJvbGwgTE9PUCBGQUNUT1IgdGlt ZXMuICBERVNDIGRlc2NyaWJlcyBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiBM T09QLgogICAgRVhJVCBpcyB0aGUgZXhpdCBvZiB0aGUgbG9vcCB0byB0aGF0 IERFU0MgY29ycmVzcG9uZHMuCiAKQEAgLTExNzAsMTIgKzExOTUsMTEgQEAg dHJlZV90cmFuc2Zvcm1fYW5kX3Vucm9sbF9sb29wIChzdHJ1Y3QgbG9vcCAq bG9vcCwgdW5zaWduZWQgZmFjdG9yLAogICBnaW1wbGVfc3RtdF9pdGVyYXRv ciBic2k7CiAgIHVzZV9vcGVyYW5kX3Agb3A7CiAgIGJvb2wgb2s7Ci0gIHVu c2lnbmVkIGVzdF9uaXRlciwgcHJvYl9lbnRyeSwgc2NhbGVfdW5yb2xsZWQs IHNjYWxlX3Jlc3QsIGZyZXFfZSwgZnJlcV9oOwotICB1bnNpZ25lZCBuZXdf ZXN0X25pdGVyLCBpLCBwcm9iOworICB1bnNpZ25lZCBpLCBwcm9iLCBwcm9i X2VudHJ5LCBzY2FsZV91bnJvbGxlZCwgc2NhbGVfcmVzdCwgZnJlcV9lLCBm cmVxX2g7CisgIHVuc2lnbmVkIG5ld19lc3Rfbml0ZXIgPSBuaXRlcl9mb3Jf dW5yb2xsZWRfbG9vcCAobG9vcCwgZmFjdG9yKTsKICAgdW5zaWduZWQgaXJy ID0gbG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCktPmZsYWdzICYgRURHRV9J UlJFRFVDSUJMRV9MT09QOwogICBhdXRvX3ZlYzxlZGdlPiB0b19yZW1vdmU7 CiAKLSAgZXN0X25pdGVyID0gZXhwZWN0ZWRfbG9vcF9pdGVyYXRpb25zIChs b29wKTsKICAgZGV0ZXJtaW5lX2V4aXRfY29uZGl0aW9ucyAobG9vcCwgZGVz YywgZmFjdG9yLAogCQkJICAgICAmZW50ZXJfbWFpbl9jb25kLCAmZXhpdF9i YXNlLCAmZXhpdF9zdGVwLAogCQkJICAgICAmZXhpdF9jbXAsICZleGl0X2Jv dW5kKTsKQEAgLTEyMDcsMjIgKzEyMzEsNiBAQCB0cmVlX3RyYW5zZm9ybV9h bmRfdW5yb2xsX2xvb3AgKHN0cnVjdCBsb29wICpsb29wLCB1bnNpZ25lZCBm YWN0b3IsCiAgIGdjY19hc3NlcnQgKG5ld19sb29wICE9IE5VTEwpOwogICB1 cGRhdGVfc3NhIChUT0RPX3VwZGF0ZV9zc2EpOwogCi0gIC8qIERldGVybWlu ZSB0aGUgcHJvYmFiaWxpdHkgb2YgdGhlIGV4aXQgZWRnZSBvZiB0aGUgdW5y b2xsZWQgbG9vcC4gICovCi0gIG5ld19lc3Rfbml0ZXIgPSBlc3Rfbml0ZXIg LyBmYWN0b3I7Ci0KLSAgLyogV2l0aG91dCBwcm9maWxlIGZlZWRiYWNrLCBs b29wcyBmb3IgdGhhdCB3ZSBkbyBub3Qga25vdyBhIGJldHRlciBlc3RpbWF0 ZQotICAgICBhcmUgYXNzdW1lZCB0byByb2xsIDEwIHRpbWVzLiAgV2hlbiB3 ZSB1bnJvbGwgc3VjaCBsb29wLCBpdCBhcHBlYXJzIHRvCi0gICAgIHJvbGwg dG9vIGxpdHRsZSwgYW5kIGl0IG1heSBldmVuIHNlZW0gdG8gYmUgY29sZC4g IFRvIGF2b2lkIHRoaXMsIHdlCi0gICAgIGVuc3VyZSB0aGF0IHRoZSBjcmVh dGVkIGxvb3AgYXBwZWFycyB0byByb2xsIGF0IGxlYXN0IDUgdGltZXMgKGJ1 dCBhdAotICAgICBtb3N0IGFzIG1hbnkgdGltZXMgYXMgYmVmb3JlIHVucm9s bGluZykuICAqLwotICBpZiAobmV3X2VzdF9uaXRlciA8IDUpCi0gICAgewot ICAgICAgaWYgKGVzdF9uaXRlciA8IDUpCi0JbmV3X2VzdF9uaXRlciA9IGVz dF9uaXRlcjsKLSAgICAgIGVsc2UKLQluZXdfZXN0X25pdGVyID0gNTsKLSAg ICB9Ci0KICAgLyogUHJlcGFyZSB0aGUgY2ZnIGFuZCB1cGRhdGUgdGhlIHBo aSBub2Rlcy4gIE1vdmUgdGhlIGxvb3AgZXhpdCB0byB0aGUKICAgICAgbG9v cCBsYXRjaCAoYW5kIG1ha2UgaXRzIGNvbmRpdGlvbiBkdW1teSwgZm9yIHRo ZSBtb21lbnQpLiAgKi8KICAgcmVzdCA9IGxvb3BfcHJlaGVhZGVyX2VkZ2Ug KG5ld19sb29wKS0+c3JjOwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3NhLWxv b3AtbWFuaXAuaCBiL2djYy90cmVlLXNzYS1sb29wLW1hbmlwLmgKaW5kZXgg MWU3NTMxZi4uOTYxYjM4YSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLWxv b3AtbWFuaXAuaAorKysgYi9nY2MvdHJlZS1zc2EtbG9vcC1tYW5pcC5oCkBA IC00OCw2ICs0OCw3IEBAIGV4dGVybiBib29sIGdpbXBsZV9kdXBsaWNhdGVf bG9vcF90b19oZWFkZXJfZWRnZSAoc3RydWN0IGxvb3AgKiwgZWRnZSwKIAkJ CQkJCSAgaW50KTsKIGV4dGVybiBib29sIGNhbl91bnJvbGxfbG9vcF9wIChz dHJ1Y3QgbG9vcCAqbG9vcCwgdW5zaWduZWQgZmFjdG9yLAogCQkJICAgICAg IHN0cnVjdCB0cmVlX25pdGVyX2Rlc2MgKm5pdGVyKTsKK2V4dGVybiB1bnNp Z25lZCBuaXRlcl9mb3JfdW5yb2xsZWRfbG9vcCAoc3RydWN0IGxvb3AgKiwg dW5zaWduZWQpOwogZXh0ZXJuIHZvaWQgdHJlZV90cmFuc2Zvcm1fYW5kX3Vu cm9sbF9sb29wIChzdHJ1Y3QgbG9vcCAqLCB1bnNpZ25lZCwKIAkJCQkJICAg IGVkZ2UsIHN0cnVjdCB0cmVlX25pdGVyX2Rlc2MgKiwKIAkJCQkJICAgIHRy YW5zZm9ybV9jYWxsYmFjaywgdm9pZCAqKTsKZGlmZiAtLWdpdCBhL2djYy90 cmVlLXZlY3QtbG9vcC5jIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmMKaW5kZXgg YzVhMTYyNy4uYzMxMWMwNCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdC1s b29wLmMKKysrIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmMKQEAgLTY3MTgsNiAr NjcxOCwzNSBAQCBsb29wX25pdGVyc19ub19vdmVyZmxvdyAobG9vcF92ZWNf aW5mbyBsb29wX3ZpbmZvKQogICByZXR1cm4gZmFsc2U7CiB9CiAKKy8qIFNj YWxlIHByb2ZpbGluZyBjb3VudGVycyBieSBlc3RpbWF0aW9uIGZvciBMT09Q IHdoaWNoIGlzIHZlY3Rvcml6ZWQKKyAgIGJ5IGZhY3RvciBWRi4gICovCisK K3N0YXRpYyB2b2lkCitzY2FsZV9wcm9maWxlX2Zvcl92ZWN0X2xvb3AgKHN0 cnVjdCBsb29wICpsb29wLCB1bnNpZ25lZCB2ZikKK3sKKyAgdW5zaWduZWQg ZnJlcV9oID0gbG9vcC0+aGVhZGVyLT5mcmVxdWVuY3k7CisgIHVuc2lnbmVk IGZyZXFfZSA9IEVER0VfRlJFUVVFTkNZIChsb29wX3ByZWhlYWRlcl9lZGdl IChsb29wKSk7CisgIC8qIFJlZHVjZSBsb29wIGl0ZXJhdGlvbnMgYnkgdGhl IHZlY3Rvcml6YXRpb24gZmFjdG9yLiAgKi8KKyAgdW5zaWduZWQgbmV3X2Vz dF9uaXRlciA9IG5pdGVyX2Zvcl91bnJvbGxlZF9sb29wIChsb29wLCB2Zik7 CisKKyAgaWYgKGZyZXFfaCAhPSAwKQorICAgIHNjYWxlX2xvb3BfZnJlcXVl bmNpZXMgKGxvb3AsIGZyZXFfZSAqIChuZXdfZXN0X25pdGVyICsgMSksIGZy ZXFfaCk7CisKKyAgYmFzaWNfYmxvY2sgZXhpdF9iYiA9IHNpbmdsZV9wcmVk IChsb29wLT5sYXRjaCk7CisgIGVkZ2UgZXhpdF9lID0gc2luZ2xlX2V4aXQg KGxvb3ApOworICBleGl0X2UtPmNvdW50ID0gbG9vcF9wcmVoZWFkZXJfZWRn ZSAobG9vcCktPmNvdW50OworICBleGl0X2UtPnByb2JhYmlsaXR5ID0gUkVH X0JSX1BST0JfQkFTRSAvIChuZXdfZXN0X25pdGVyICsgMSk7CisKKyAgZWRn ZSBleGl0X2wgPSBzaW5nbGVfcHJlZF9lZGdlIChsb29wLT5sYXRjaCk7Cisg IGludCBwcm9iID0gZXhpdF9sLT5wcm9iYWJpbGl0eTsKKyAgZXhpdF9sLT5w cm9iYWJpbGl0eSA9IFJFR19CUl9QUk9CX0JBU0UgLSBleGl0X2UtPnByb2Jh YmlsaXR5OworICBleGl0X2wtPmNvdW50ID0gZXhpdF9iYi0+Y291bnQgLSBl eGl0X2UtPmNvdW50OworICBpZiAoZXhpdF9sLT5jb3VudCA8IDApCisgICAg ZXhpdF9sLT5jb3VudCA9IDA7CisgIGlmIChwcm9iID4gMCkKKyAgICBzY2Fs ZV9iYnNfZnJlcXVlbmNpZXNfaW50ICgmbG9vcC0+bGF0Y2gsIDEsIGV4aXRf bC0+cHJvYmFiaWxpdHksIHByb2IpOworfQorCiAvKiBGdW5jdGlvbiB2ZWN0 X3RyYW5zZm9ybV9sb29wLgogCiAgICBUaGUgYW5hbHlzaXMgcGhhc2UgaGFz IGRldGVybWluZWQgdGhhdCB0aGUgbG9vcCBpcyB2ZWN0b3JpemFibGUuCkBA IC02NzQzLDE2ICs2NzcyLDEwIEBAIHZlY3RfdHJhbnNmb3JtX2xvb3AgKGxv b3BfdmVjX2luZm8gbG9vcF92aW5mbykKICAgYm9vbCB0cmFuc2Zvcm1fcGF0 dGVybl9zdG10ID0gZmFsc2U7CiAgIGJvb2wgY2hlY2tfcHJvZml0YWJpbGl0 eSA9IGZhbHNlOwogICBpbnQgdGg7Ci0gIC8qIFJlY29yZCBudW1iZXIgb2Yg aXRlcmF0aW9ucyBiZWZvcmUgd2Ugc3RhcnRlZCB0YW1wZXJpbmcgd2l0aCB0 aGUgcHJvZmlsZS4gKi8KLSAgZ2Nvdl90eXBlIGV4cGVjdGVkX2l0ZXJhdGlv bnMgPSBleHBlY3RlZF9sb29wX2l0ZXJhdGlvbnNfdW5ib3VuZGVkIChsb29w KTsKIAogICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAgICAgZHVtcF9wcmlu dGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwgIj09PSB2ZWNfdHJh bnNmb3JtX2xvb3AgPT09XG4iKTsKIAotICAvKiBJZiBwcm9maWxlIGlzIGlu cHJlY2lzZSwgd2UgaGF2ZSBjaGFuY2UgdG8gZml4IGl0IHVwLiAgKi8KLSAg aWYgKExPT1BfVklORk9fTklURVJTX0tOT1dOX1AgKGxvb3BfdmluZm8pKQot ICAgIGV4cGVjdGVkX2l0ZXJhdGlvbnMgPSBMT09QX1ZJTkZPX0lOVF9OSVRF UlMgKGxvb3BfdmluZm8pOwotCiAgIC8qIFVzZSB0aGUgbW9yZSBjb25zZXJ2 YXRpdmUgdmVjdG9yaXphdGlvbiB0aHJlc2hvbGQuICBJZiB0aGUgbnVtYmVy CiAgICAgIG9mIGl0ZXJhdGlvbnMgaXMgY29uc3RhbnQgYXNzdW1lIHRoZSBj b3N0IGNoZWNrIGhhcyBiZWVuIHBlcmZvcm1lZAogICAgICBieSBvdXIgY2Fs bGVyLiAgSWYgdGhlIHRocmVzaG9sZCBtYWtlcyBhbGwgbG9vcHMgcHJvZml0 YWJsZSB0aGF0CkBAIC03MDY4LDkgKzcwOTEsOCBAQCB2ZWN0X3RyYW5zZm9y bV9sb29wIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8pCiAKICAgc2xwZWVs X21ha2VfbG9vcF9pdGVyYXRlX250aW1lcyAobG9vcCwgbml0ZXJzX3ZlY3Rv cik7CiAKLSAgLyogUmVkdWNlIGxvb3AgaXRlcmF0aW9ucyBieSB0aGUgdmVj dG9yaXphdGlvbiBmYWN0b3IuICAqLwotICBzY2FsZV9sb29wX3Byb2ZpbGUg KGxvb3AsIEdDT1ZfQ09NUFVURV9TQ0FMRSAoMSwgdmYpLAotCQkgICAgICBl eHBlY3RlZF9pdGVyYXRpb25zIC8gdmYpOworICBzY2FsZV9wcm9maWxlX2Zv cl92ZWN0X2xvb3AgKGxvb3AsIHZmKTsKKwogICAvKiBUaGUgbWluaW11bSBu dW1iZXIgb2YgaXRlcmF0aW9ucyBwZXJmb3JtZWQgYnkgdGhlIGVwaWxvZ3Vl LiAgVGhpcwogICAgICBpcyAxIHdoZW4gcGVlbGluZyBmb3IgZ2FwcyBiZWNh dXNlIHdlIGFsd2F5cyBuZWVkIGEgZmluYWwgc2NhbGFyCiAgICAgIGl0ZXJh dGlvbi4gICovCg== --_002_VI1PR0802MB217672F0D45BA9EA238CA7BDE75A0VI1PR0802MB2176_--