From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 48F22382BC36 for ; Thu, 27 Jan 2022 16:41:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 48F22382BC36 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: WVhVM+niAih/V8b8hinnvXqMM/nPoqSuOEVP/yWpva0Zhd10GY/lgOG29sVK4nb7ljEUuQ1hge oghVadyvtOpPhwq2wuB0CES62q+TYASqEw4HSTm6XzS7YQsDuYdHv87iDi0ZChOs5tQG4TnjUA zUC++RwkQNv6HArODPUgHva7eMLNQIWsfLKIqTkVc5eX6MjF17lpICNkmUuxrYPvMNb5eZ2iFJ zHwqiS8hMQvdaLtq86EtLyXqEVZVh43A09spWGdUcU4yeCPR59Wsta/3dFqbz1MqGjnq21bCgz gkEkpBoT2Ifux0aiFlpNfIKo X-IronPort-AV: E=Sophos;i="5.88,321,1635235200"; d="scan'208";a="71300212" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa2.mentor.iphmx.com with ESMTP; 27 Jan 2022 08:41:32 -0800 IronPort-SDR: g8vmI5/ofOwVsZvHtNGyCwlcf3QToRqtbrieHY8/s+ZJw18MJuOgkKWohkdjPUeUVRhg25aMr7 RG7r/3t2GQB0xeHb87cLVirVWNc5hzDS0kSeP+xeYRp9GXUFZayLON7CEET53mS38rCvGCQa3+ 3Mdor4L60elW+/a6hUjJqJsPDZcNLPWAHXjlLXzlKePWaqPpYqau+3Vj6cmGjx3S2mmieGEBmO LNTOk+9tWpQaxOX/UWy11uf+Zk2QXJH8oYXAf9hKX19vJH8x8Ogwa1bL/wdkeoswOSJB6F/Wju xZA= Content-Type: multipart/mixed; boundary="------------22m8Lw03wPn3z6SNZvrqzmtC" Message-ID: Date: Thu, 27 Jan 2022 16:41:26 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.5.1 Content-Language: en-GB From: Andrew Stubbs Subject: [PATCH] openmp, nvptx: low-lat memory access traits To: "gcc-patches@gcc.gnu.org" X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-15.mgc.mentorg.com (139.181.222.15) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 27 Jan 2022 16:41:35 -0000 --------------22m8Lw03wPn3z6SNZvrqzmtC Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit This patch adjusts the NVPTX low-latency allocator that I have previously posted (awaiting re-review). The patch assumes that all my previously posted patches are applied already. Given that any memory allocated from the low-latency memory space cannot support the "access=all" allocator trait (because the hardware does not provide any means to do so) it seems reasonable that omp_alloc should fail (or fall back) when asked to do so. Unfortunately the "all" setting is the default when the trait is not specified explicitly, so it must also fail in that case also. This patch implements the restriction accordingly. The validation applies only to the NVPTX configuration, so some future implementation for another target can do whatever it needs with "access". Without explicitly saying so, this change means that the omp_low_latency_mem_alloc predefined allocator now implies "access=pteam" (at least on NVPTX). OK for stage 1? Thanks Andrew --------------22m8Lw03wPn3z6SNZvrqzmtC Content-Type: text/plain; charset="UTF-8"; name="220127-lowlat-access.patch" Content-Disposition: attachment; filename="220127-lowlat-access.patch" Content-Transfer-Encoding: base64 b3Blbm1wLCBudnB0eDogbG93LWxhdCBtZW1vcnkgYWNjZXNzIHRyYWl0cwoKVGhlIE5WUFRY IGxvdyBsYXRlbmN5IG1lbW9yeSBpcyBub3QgYWNjZXNzaWJsZSBvdXRzaWRlIHRoZSB0ZWFt IHRoYXQgYWxsb2NhdGVzCml0LCBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSB1bmF2YWlsYWJs ZSBmb3IgYWxsb2NhdG9ycyB3aXRoIHRoZSBhY2Nlc3MgdHJhaXQKImFsbCIuICBUaGlzIGNo YW5nZSBtZWFucyB0aGF0IHRoZSBvbXBfbG93X2xhdF9tZW1fYWxsb2MgcHJlZGVmaW5lZAph bGxvY2F0b3Igbm93IGltcGxpY2l0bHkgaW1wbGllcyB0aGUgInB0ZWFtIiB0cmFpdC4KCmxp YmdvbXAvQ2hhbmdlTG9nOgoKCSogYWxsb2NhdG9yLmMgKE1FTVNQQUNFX1ZBTElEQVRFKTog TmV3IG1hY3JvLgoJKG9tcF9hbGlnbmVkX2FsbG9jKTogVXNlIE1FTVNQQUNFX1ZBTElEQVRF LgoJKG9tcF9hbGlnbmVkX2NhbGxvYyk6IExpa2V3aXNlLgoJKG9tcF9yZWFsbG9jKTogTGlr ZXdpc2UuCgkqIGNvbmZpZy9udnB0eC9hbGxvY2F0b3IuYyAobnZwdHhfbWVtc3BhY2VfdmFs aWRhdGUpOiBOZXcgZnVuY3Rpb24uCgkoTUVNU1BBQ0VfVkFMSURBVEUpOiBOZXcgbWFjcm8u CgkqIHRlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy00LmMgKG1haW4pOiBBZGQgYWNj ZXNzIHRyYWl0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtNi5jIChtYWlu KTogQWRkIGFjY2VzcyB0cmFpdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3Jz LTcuYzogTmV3IHRlc3QuCgpkaWZmIC0tZ2l0IGEvbGliZ29tcC9hbGxvY2F0b3IuYyBiL2xp YmdvbXAvYWxsb2NhdG9yLmMKaW5kZXggYjFmNDFjY2MwZDQuLjAwMGNjYzJkZDljIDEwMDY0 NAotLS0gYS9saWJnb21wL2FsbG9jYXRvci5jCisrKyBiL2xpYmdvbXAvYWxsb2NhdG9yLmMK QEAgLTUxLDYgKzUxLDkgQEAKICNkZWZpbmUgTUVNU1BBQ0VfRlJFRShNRU1TUEFDRSwgQURE UiwgU0laRSwgUElOKSBcCiAgIChQSU4gPyBOVUxMIDogZnJlZSAoQUREUikpCiAjZW5kaWYK KyNpZm5kZWYgTUVNU1BBQ0VfVkFMSURBVEUKKyNkZWZpbmUgTUVNU1BBQ0VfVkFMSURBVEUo TUVNU1BBQ0UsIEFDQ0VTUykgMQorI2VuZGlmCiAKIC8qIE1hcCB0aGUgcHJlZGVmaW5lZCBh bGxvY2F0b3JzIHRvIHRoZSBjb3JyZWN0IG1lbW9yeSBzcGFjZS4KICAgIFRoZSBpbmRleCB0 byB0aGlzIHRhYmxlIGlzIHRoZSBvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGVudW0gdmFsdWUu ICAqLwpAQCAtMjc5LDYgKzI4MiwxMCBAQCByZXRyeToKICAgaWYgKF9fYnVpbHRpbl9hZGRf b3ZlcmZsb3cgKHNpemUsIG5ld19zaXplLCAmbmV3X3NpemUpKQogICAgIGdvdG8gZmFpbDsK IAorICBpZiAoYWxsb2NhdG9yX2RhdGEKKyAgICAgICYmICFNRU1TUEFDRV9WQUxJREFURSAo YWxsb2NhdG9yX2RhdGEtPm1lbXNwYWNlLCBhbGxvY2F0b3JfZGF0YS0+YWNjZXNzKSkKKyAg ICBnb3RvIGZhaWw7CisKICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGFsbG9jYXRvcl9kYXRh CiAJCQkmJiBhbGxvY2F0b3JfZGF0YS0+cG9vbF9zaXplIDwgfih1aW50cHRyX3QpIDAsIDAp KQogICAgIHsKQEAgLTUwNSw2ICs1MTIsMTAgQEAgcmV0cnk6CiAgIGlmIChfX2J1aWx0aW5f YWRkX292ZXJmbG93IChzaXplX3RlbXAsIG5ld19zaXplLCAmbmV3X3NpemUpKQogICAgIGdv dG8gZmFpbDsKIAorICBpZiAoYWxsb2NhdG9yX2RhdGEKKyAgICAgICYmICFNRU1TUEFDRV9W QUxJREFURSAoYWxsb2NhdG9yX2RhdGEtPm1lbXNwYWNlLCBhbGxvY2F0b3JfZGF0YS0+YWNj ZXNzKSkKKyAgICBnb3RvIGZhaWw7CisKICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGFsbG9j YXRvcl9kYXRhCiAJCQkmJiBhbGxvY2F0b3JfZGF0YS0+cG9vbF9zaXplIDwgfih1aW50cHRy X3QpIDAsIDApKQogICAgIHsKQEAgLTY3Miw2ICs2ODMsMTAgQEAgcmV0cnk6CiAgICAgZ290 byBmYWlsOwogICBvbGRfc2l6ZSA9IGRhdGEtPnNpemU7CiAKKyAgaWYgKGFsbG9jYXRvcl9k YXRhCisgICAgICAmJiAhTUVNU1BBQ0VfVkFMSURBVEUgKGFsbG9jYXRvcl9kYXRhLT5tZW1z cGFjZSwgYWxsb2NhdG9yX2RhdGEtPmFjY2VzcykpCisgICAgZ290byBmYWlsOworCiAgIGlm IChfX2J1aWx0aW5fZXhwZWN0IChhbGxvY2F0b3JfZGF0YQogCQkJJiYgYWxsb2NhdG9yX2Rh dGEtPnBvb2xfc2l6ZSA8IH4odWludHB0cl90KSAwLCAwKSkKICAgICB7CmRpZmYgLS1naXQg YS9saWJnb21wL2NvbmZpZy9udnB0eC9hbGxvY2F0b3IuYyBiL2xpYmdvbXAvY29uZmlnL252 cHR4L2FsbG9jYXRvci5jCmluZGV4IGY3NDBiOTdmNmFjLi4wMTAyNjgwYjcxNyAxMDA2NDQK LS0tIGEvbGliZ29tcC9jb25maWcvbnZwdHgvYWxsb2NhdG9yLmMKKysrIGIvbGliZ29tcC9j b25maWcvbnZwdHgvYWxsb2NhdG9yLmMKQEAgLTM1OCw2ICszNTgsMTUgQEAgbnZwdHhfbWVt c3BhY2VfcmVhbGxvYyAob21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlLCB2b2lkICph ZGRyLAogICAgIHJldHVybiByZWFsbG9jIChhZGRyLCBzaXplKTsKIH0KIAorc3RhdGljIGlu bGluZSBpbnQKK252cHR4X21lbXNwYWNlX3ZhbGlkYXRlIChvbXBfbWVtc3BhY2VfaGFuZGxl X3QgbWVtc3BhY2UsIHVuc2lnbmVkIGFjY2VzcykKK3sKKyAgLyogRGlzYWxsb3cgdXNlIG9m IGxvdy1sYXRlbmN5IG1lbW9yeSB3aGVuIGl0IG11c3QgYmUgYWNjZXNzaWJsZSBieQorICAg ICBhbGwgdGhyZWFkcy4gICovCisgIHJldHVybiAobWVtc3BhY2UgIT0gb21wX2xvd19sYXRf bWVtX3NwYWNlCisJICB8fCBhY2Nlc3MgIT0gb21wX2F0dl9hbGwpOworfQorCiAjZGVmaW5l IE1FTVNQQUNFX0FMTE9DKE1FTVNQQUNFLCBTSVpFLCBQSU4pIFwKICAgbnZwdHhfbWVtc3Bh Y2VfYWxsb2MgKE1FTVNQQUNFLCBTSVpFKQogI2RlZmluZSBNRU1TUEFDRV9DQUxMT0MoTUVN U1BBQ0UsIFNJWkUsIFBJTikgXApAQCAtMzY2LDUgKzM3NSw3IEBAIG52cHR4X21lbXNwYWNl X3JlYWxsb2MgKG9tcF9tZW1zcGFjZV9oYW5kbGVfdCBtZW1zcGFjZSwgdm9pZCAqYWRkciwK ICAgbnZwdHhfbWVtc3BhY2VfcmVhbGxvYyAoTUVNU1BBQ0UsIEFERFIsIE9MRFNJWkUsIFNJ WkUpCiAjZGVmaW5lIE1FTVNQQUNFX0ZSRUUoTUVNU1BBQ0UsIEFERFIsIFNJWkUsIFBJTikg XAogICBudnB0eF9tZW1zcGFjZV9mcmVlIChNRU1TUEFDRSwgQUREUiwgU0laRSkKKyNkZWZp bmUgTUVNU1BBQ0VfVkFMSURBVEUoTUVNU1BBQ0UsIEFDQ0VTUykgXAorICBudnB0eF9tZW1z cGFjZV92YWxpZGF0ZSAoTUVNU1BBQ0UsIEFDQ0VTUykKIAogI2luY2x1ZGUgIi4uLy4uL2Fs bG9jYXRvci5jIgpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2Fs bG9jYXRvcnMtNC5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMt NC5jCmluZGV4IDlmYTZhYTE2MjRmLi5jYWUyN2VhMzNjMSAxMDA2NDQKLS0tIGEvbGliZ29t cC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtNC5jCisrKyBiL2xpYmdvbXAvdGVz dHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTQuYwpAQCAtMjMsMTAgKzIzLDExIEBAIG1h aW4gKCkKICAgI3ByYWdtYSBvbXAgdGFyZ2V0CiAgIHsKICAgICAvKiBFbnN1cmUgdGhhdCB0 aGUgbWVtb3J5IHdlIGdldCAqaXMqIGxvdy1sYXRlbmN5IHdpdGggYSBudWxsLWZhbGxiYWNr LiAgKi8KLSAgICBvbXBfYWxsb2N0cmFpdF90IHRyYWl0c1sxXQotICAgICAgPSB7IHsgb21w X2F0a19mYWxsYmFjaywgb21wX2F0dl9udWxsX2ZiIH0gfTsKKyAgICBvbXBfYWxsb2N0cmFp dF90IHRyYWl0c1syXQorICAgICAgPSB7IHsgb21wX2F0a19mYWxsYmFjaywgb21wX2F0dl9u dWxsX2ZiIH0sCisgICAgICAgICAgeyBvbXBfYXRrX2FjY2Vzcywgb21wX2F0dl9wdGVhbSB9 IH07CiAgICAgb21wX2FsbG9jYXRvcl9oYW5kbGVfdCBsb3dsYXQgPSBvbXBfaW5pdF9hbGxv Y2F0b3IgKG9tcF9sb3dfbGF0X21lbV9zcGFjZSwKLQkJCQkJCQkxLCB0cmFpdHMpOworCQkJ CQkJCTIsIHRyYWl0cyk7CiAKICAgICBpbnQgc2l6ZSA9IDQ7CiAKZGlmZiAtLWdpdCBhL2xp YmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTYuYyBiL2xpYmdvbXAvdGVz dHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTYuYwppbmRleCA5MGJmNzMwOTVlZi4uYzAz MjMzZGY1ODIgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxv Y2F0b3JzLTYuYworKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9y cy02LmMKQEAgLTIzLDEwICsyMywxMSBAQCBtYWluICgpCiAgICNwcmFnbWEgb21wIHRhcmdl dAogICB7CiAgICAgLyogRW5zdXJlIHRoYXQgdGhlIG1lbW9yeSB3ZSBnZXQgKmlzKiBsb3ct bGF0ZW5jeSB3aXRoIGEgbnVsbC1mYWxsYmFjay4gICovCi0gICAgb21wX2FsbG9jdHJhaXRf dCB0cmFpdHNbMV0KLSAgICAgID0geyB7IG9tcF9hdGtfZmFsbGJhY2ssIG9tcF9hdHZfbnVs bF9mYiB9IH07CisgICAgb21wX2FsbG9jdHJhaXRfdCB0cmFpdHNbMl0KKyAgICAgID0geyB7 IG9tcF9hdGtfZmFsbGJhY2ssIG9tcF9hdHZfbnVsbF9mYiB9LAorICAgICAgICAgIHsgb21w X2F0a19hY2Nlc3MsIG9tcF9hdHZfcHRlYW0gfSB9OwogICAgIG9tcF9hbGxvY2F0b3JfaGFu ZGxlX3QgbG93bGF0ID0gb21wX2luaXRfYWxsb2NhdG9yIChvbXBfbG93X2xhdF9tZW1fc3Bh Y2UsCi0JCQkJCQkJMSwgdHJhaXRzKTsKKwkJCQkJCQkyLCB0cmFpdHMpOwogCiAgICAgaW50 IHNpemUgPSAxNjsKIApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5j L2FsbG9jYXRvcnMtNy5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRv cnMtNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMGE3Mzhi MWQxZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9h bGxvY2F0b3JzLTcuYwpAQCAtMCwwICsxLDY4IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisK Ky8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IG9mZmxvYWRfZGV2aWNlIH0gKi8K Ky8qIHsgZGcteGZhaWwtaWYgIm5vdCBpbXBsZW1lbnRlZCIgeyAhIG9mZmxvYWRfdGFyZ2V0 X252cHR4IH0gfSAqLworCisvKiBUZXN0IHRoYXQgR1BVIGxvdy1sYXRlbmN5IGFsbG9jYXRp b24gaXMgbGltaXRlZCB0byB0ZWFtIGFjY2Vzcy4gICovCisKKyNpbmNsdWRlIDxzdGRkZWYu aD4KKyNpbmNsdWRlIDxvbXAuaD4KKworI3ByYWdtYSBvbXAgcmVxdWlyZXMgZHluYW1pY19h bGxvY2F0b3JzCisKK2ludAorbWFpbiAoKQoreworICAjcHJhZ21hIG9tcCB0YXJnZXQKKyAg eworICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBtZW1vcnkgd2UgZ2V0ICppcyogbG93LWxhdGVu Y3kgd2l0aCBhIG51bGwtZmFsbGJhY2suICAqLworICAgIG9tcF9hbGxvY3RyYWl0X3QgdHJh aXRzWzJdCisgICAgICA9IHsgeyBvbXBfYXRrX2ZhbGxiYWNrLCBvbXBfYXR2X251bGxfZmIg fSwKKwkgIHsgb21wX2F0a19hY2Nlc3MsIG9tcF9hdHZfcHRlYW0gfSB9OworICAgIG9tcF9h bGxvY2F0b3JfaGFuZGxlX3QgbG93bGF0ID0gb21wX2luaXRfYWxsb2NhdG9yIChvbXBfbG93 X2xhdF9tZW1fc3BhY2UsCisJCQkJCQkJMiwgdHJhaXRzKTsKKworICAgIG9tcF9hbGxvY3Ry YWl0X3QgdHJhaXRzX2FsbFsyXQorICAgICAgPSB7IHsgb21wX2F0a19mYWxsYmFjaywgb21w X2F0dl9udWxsX2ZiIH0sCisJICB7IG9tcF9hdGtfYWNjZXNzLCBvbXBfYXR2X2FsbCB9IH07 CisgICAgb21wX2FsbG9jYXRvcl9oYW5kbGVfdCBsb3dsYXRfYWxsCisgICAgICA9IG9tcF9p bml0X2FsbG9jYXRvciAob21wX2xvd19sYXRfbWVtX3NwYWNlLCAyLCB0cmFpdHNfYWxsKTsK KworICAgIG9tcF9hbGxvY3RyYWl0X3QgdHJhaXRzX2RlZmF1bHRbMV0KKyAgICAgID0geyB7 IG9tcF9hdGtfZmFsbGJhY2ssIG9tcF9hdHZfbnVsbF9mYiB9IH07CisgICAgb21wX2FsbG9j YXRvcl9oYW5kbGVfdCBsb3dsYXRfZGVmYXVsdAorICAgICAgPSBvbXBfaW5pdF9hbGxvY2F0 b3IgKG9tcF9sb3dfbGF0X21lbV9zcGFjZSwgMSwgdHJhaXRzX2RlZmF1bHQpOworCisgICAg dm9pZCAqYSA9IG9tcF9hbGxvYygxLCBsb3dsYXQpOwkgICAgLy8gZ29vZAorICAgIHZvaWQg KmIgPSBvbXBfYWxsb2MoMSwgbG93bGF0X2FsbCk7ICAgICAvLyBiYWQKKyAgICB2b2lkICpj ID0gb21wX2FsbG9jKDEsIGxvd2xhdF9kZWZhdWx0KTsgLy8gYmFkCisKKyAgICBpZiAoIWEg fHwgYiB8fCBjKQorICAgICAgX19idWlsdGluX2Fib3J0ICgpOworCisgICAgb21wX2ZyZWUg KGEsIGxvd2xhdCk7CisKKworICAgIGEgPSBvbXBfY2FsbG9jKDEsIDEsIGxvd2xhdCk7CSAg Ly8gZ29vZAorICAgIGIgPSBvbXBfY2FsbG9jKDEsIDEsIGxvd2xhdF9hbGwpOyAgICAgLy8g YmFkCisgICAgYyA9IG9tcF9jYWxsb2MoMSwgMSwgbG93bGF0X2RlZmF1bHQpOyAvLyBiYWQK KworICAgIGlmICghYSB8fCBiIHx8IGMpCisgICAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisK KyAgICBvbXBfZnJlZSAoYSwgbG93bGF0KTsKKworCisgICAgYSA9IG9tcF9yZWFsbG9jKE5V TEwsIDEsIGxvd2xhdCwgbG93bGF0KTsJCSAgICAgIC8vIGdvb2QKKyAgICBiID0gb21wX3Jl YWxsb2MoTlVMTCwgMSwgbG93bGF0X2FsbCwgbG93bGF0X2FsbCk7CSAgICAgIC8vIGJhZAor ICAgIGMgPSBvbXBfcmVhbGxvYyhOVUxMLCAxLCBsb3dsYXRfZGVmYXVsdCwgbG93bGF0X2Rl ZmF1bHQpOyAvLyBiYWQKKworICAgIGlmICghYSB8fCBiIHx8IGMpCisgICAgICBfX2J1aWx0 aW5fYWJvcnQgKCk7CisKKyAgICBvbXBfZnJlZSAoYSwgbG93bGF0KTsKKyAgfQorCityZXR1 cm4gMDsKK30KKwo= --------------22m8Lw03wPn3z6SNZvrqzmtC--