From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpbgjp3.qq.com (smtpbgjp3.qq.com [54.92.39.34]) by sourceware.org (Postfix) with ESMTPS id ADE0A3855586 for ; Fri, 7 Jul 2023 10:08:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org ADE0A3855586 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rivai.ai Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rivai.ai X-QQ-mid: bizesmtp75t1688724481ts9pia8p Received: from LAPTOP-EPITNQBU ( [58.60.1.5]) by bizesmtp.qq.com (ESMTP) with id ; Fri, 07 Jul 2023 18:08:00 +0800 (CST) X-QQ-SSF: 01400000000000G0T000000A0000000 X-QQ-FEAT: qcKkmz/zJhwFySM0jltbFl9YEYCRO3PSh0WLHtVZ6CPtuPkYBOVhPlpotKJI3 8aJrqJdZs/AzOHE9uQwEZuv/Cx9Cz5g9rVtF5vNpqXJcNoCcCw9OPIW9ITlf/CPhD9R6qdc 2y3HeYrEFhnueoBdvdGak5NvmNgc1HSQApOMse0oaF74lmIgdZhh5MyyaBZZQtw7IhvvTtM PfVNTse978vC5Oz2WL9uBGHYdqAsGxPMjtntm/zw4/BTVDZPQijhKFJtucG8kQ63or1Cat1 4UjFSn9aEDWudHK2nEnPG6qjJLeiIaVxgQPOScBZhzNTP67ShndS4hlJU2ZGf4ZdergSY7d XJOl7Yjjdo8CWMVH3wZgaFMPIiYrkAtAfdosamt1oeSULs6Fu+r13Zl1eEILeHOyuZq5aGB v6ox4tcpx0EAuvzmMzUv1ri4WR/as7Ob X-QQ-GoodBg: 2 X-BIZMAIL-ID: 9488117792817928933 Date: Fri, 7 Jul 2023 18:07:59 +0800 From: "juzhe.zhong@rivai.ai" To: "Robin Dapp" , gcc-patches Cc: "Robin Dapp" , kito.cheng , Kito.cheng , palmer , palmer , jeffreyalaw Subject: Re: Re: [PATCH V3] RISC-V: Support gather_load/scatter RVV auto-vectorization References: <20230707010023.863732-1-juzhe.zhong@rivai.ai>, X-Priority: 3 X-GUID: 7EC6BB13-4F8F-4085-832A-09F9ABB78CD2 X-Has-Attach: no X-Mailer: Foxmail 7.2.16.188[cn] Mime-Version: 1.0 Message-ID: Content-Type: multipart/alternative; boundary="----=_001_NextPart374530284202_=----" X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:rivai.ai:qybglogicsvrgz:qybglogicsvrgz7a-one-0 X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00,GIT_PATCH_0,HTML_MESSAGE,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS,TXREP,T_KAM_HTML_FONT_INVALID,T_SCC_BODY_TEXT_LINE 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: This is a multi-part message in MIME format. ------=_001_NextPart374530284202_=---- Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Pj4gSXQncyBhIGJpdCB3ZWlyZCB0aGF0IHRoZSBmdW5jdGlvbiBub3cgYWxz byBlbWl0cyBhbiBpbnNuLiAgSXQncyBub3QNCj4+IHNpbWlsYXIgdG8gdGhl IGFhcmNoNjQgdmFyaWFudCBhbnltb3JlIHRoZW4sIEkgc3VwcG9zZS4gIElm IHNvLCBwbGVhc2UNCj4+IHJlbW92ZSB0aGUgY29tbWVudC4NCk9rLg0KDQo+ PiBlbHRfbW9kZSBpcyB1bnVzZWQgYWZ0ZXIgeW91ciBwYXRjaC4gIFBsZWFz ZSByZW1vdmUgaXQgb3Igd2Ugd2lsbCBoYXZlDQo+PiBhIGJvb3RzdHJhcCBl cnJvci4NCk9rDQoNCj4+V2hlbiByZWFkaW5nIGl0IEkgY29uc2lkZXJlZCB1 bmlmeWluZyBib3RoIGNhc2VzIGFuZCBoYXZlIG1vZHVsb19zZWxfaW5kaWNl cw0KPj5qdXN0IGRvIG5vdGhpbmcgd2hlbiB0aGUgY29uc3RhbnQgYWxyZWFk eSBzYXRpc2ZpZXMgdGhlIHJhbmdlIHJlcXVpcmVtZW50Lg0KPj5Xb3VsZCB0 aGF0IHdvcms/DQpJIHRyaWVkIGJ1dCBpdCB0dXJucyBvdXQgdG8gY2F1c2Ug ZXhlY3V0aW9uIGZhaWxlLg0KDQoNCj4+VGhlIHZlY3Rvcml6ZXIgd2lsbCBu ZXZlciBlbWl0IHRoaXMgYnV0IHdlIHdvdWxkbid0IHdhbnQgYSBzdGVwDQo+ Pm9mIDEgaGVyZSwgcmlnaHQ/DQpObywgeW91IGNhbiB0YWtlIGEgbG9vayBh dCBzdHJpZGVkX2xvYWQtMi5jDQoNCj4+V2hhdCdzIGR1bW1wPyAgZHVtYj8g IEl0IGxvb2tzIGxpa2UgaXQncyB1c2VkIGZvciBzd2l0Y2hpbmcgYmV0d2Vl bg0KPj52bG1heC9ub252bG1heCBzbyBhIGRpZmZlcmVudCBuYW1lIG1pZ2h0 IGJlIGFkdmlzYWJsZS4NClNvcnJ5IGZvciB0eXBvLCBpdCBzaG91bGQgYmUg ZHVtbXlfbGVuIG1lYW5zIGxlbmd0aD0gdmYgdGhhdCBpcyB0aGUgdHJpY2sg SSBwbGF5IG9uIG1pZGRsZS1lbmQgbWVhbmluZyBzdWNoIHZlY3RvciBvcGVy YXRpb25zIGRvIG5vdCBhZmZlY3QgYnkgbGVuZ3RoLg0KDQoNCj4+VGhlIG9w cyBhcmUgc2ltaWxhciwgYmV0dGVyIHRvIGRlZmluZSB0aGVtIG91dHNpZGUg b2YgdGhlIGlmL2Vsc2UuDQo+Pkkgd291bGQgYWxzbyByYXRoZXIgaGF2ZSBi b3RoIGluIHRoZSBzYW1lIGVtaXQgaGVscGVyIGJ1dCB0aGF0IHdhcw0KPj5k aXNjdXNzZWQgYmVmb3JlLiAgVGhlIGZvbGxvd2luZyBzaW1pbGFyIHBhdHRl cm5zIGFsbCBsb29rIGEgYml0DQo+PiJib2lsZXJwbGF0ZS1pc2giLiAgVG9s ZXJhYmxlIGZvciBub3cgSSBndWVzcy4NCk9rLCB3aWxsIGhhdmUgYSB0cnku DQoNCg0KPj5UaGlzIG9uZSBJIGRvbid0IGdldC4gIFdoeSBkbyB3ZSBzdGls bCBuZWVkIHRvIHplcm9fZXh0ZW5kIHdoZW4gdGhlDQo+PmhhcmR3YXJlIGRv ZXMgaXQgZm9yIHVzPyAgU2hvdWxkbid0IHdlIG9ubHkgc2lnbiBleHRlbmQg d2hlbiB0aGUNCj4+ZXhwYW5kZXIgc2F5cyBzbz8gIEFjdHVhbGx5IHdlIHNo b3VsZCBldmVuIHNjYW4tYXNzZW1ibGVyLW5vdCBmb3INCj4+KHYpemV4dD8g IEFkZGl0aW9uYWxseSBtYXliZSBhbHNvIHNjYW4tYXNzZW1ibGVyICh2KXNl eHQgZm9yIHRoZQ0KPj5yZXNwZWN0aXZlIGNhc2VzLg0KDQpGb3IgemVyb19l eHRlbmQgd2l0aCBzY2FsZSAhPSAxLCB3ZSBuZWVkIHRvIGZpcnN0IHplcm9f ZXh0ZW5kIHRoZW4gbXVsdGlwbGUgdGhlIHNjYWxlLg0KDQo+PkJlc2lkZXMs IGNvdWxkbid0IHdlIGRvIGEgd2lkZW5pbmcgc2hpZnQgd2hlbiBjb21iaW5p bmcgaXQgd2l0aA0KPj5zY2FsZV9sb2cgIT0gMD8NClJWViBoYXMgd2lkZW5p bmcgc2hpZnQ/IEkgZGlkbid0IGtub3cgdGhhdC4gQ3VycmVudCBuYXR1cmFs IGFwcHJvYWNoIGlzIGZpcnN0IGV4dGVuZCBvZmZzZXQgdGhlbiBzaGlmdC4N Cg0KPj5pbnN0ZWFkLiAgVGhpcyBhdm9pZCB0aGUgKHN1cnByaXNpbmcpIHdl aXJkIHN1YnJlZyBiZWluZyBnZW5lcmF0ZWQNCj4+YXQgYWxsIGFuZCB3ZSBk b24ndCBuZWVkIHRvIGVuc3VyZSwgcHJvYmFibHkgcmVkdW5kYW50bHksIHRo YXQgdGhlDQo+PmNvbnN0X3BvbHkgdmFsdWUgaXMgaW4gcmFuZ2UgZXRjLg0K T2suDQoNCj4+TWF5YmUgYWRkIGEgc2luZ2xlLWxpbmUgY29tbWVudCBhcyBm b3IgdGhlIG90aGVyIGV4aXN0aW5nIGNhc2VzLg0Kb0suDQoNCg0KanV6aGUu emhvbmdAcml2YWkuYWkNCiANCkZyb206IFJvYmluIERhcHANCkRhdGU6IDIw MjMtMDctMDcgMTc6NDMNClRvOiBKdXpoZS1aaG9uZzsgZ2NjLXBhdGNoZXMN CkNDOiByZGFwcC5nY2M7IGtpdG8uY2hlbmc7IGtpdG8uY2hlbmc7IHBhbG1l cjsgcGFsbWVyOyBqZWZmcmV5YWxhdw0KU3ViamVjdDogUmU6IFtQQVRDSCBW M10gUklTQy1WOiBTdXBwb3J0IGdhdGhlcl9sb2FkL3NjYXR0ZXIgUlZWIGF1 dG8tdmVjdG9yaXphdGlvbg0KSGkgSnV6aGUsDQogDQp0aGFua3MsIHRoYXQn cyBxdWl0ZSBhIGNodW5rIDopIGFuZCBpdCB0b29rIG1lIGEgd2hpbGUgdG8N CmdvIHRocm91Z2ggaXQuDQogDQo+IEBAIC01NjQsNyArNTY1LDE0IEBAIGNv bnN0X3ZlY19hbGxfaW5fcmFuZ2VfcCAocnR4IHZlYywgcG9seV9pbnQ2NCBt aW52YWwsIHBvbHlfaW50NjQgbWF4dmFsKQ0KPiAgc3RhdGljIHJ0eA0KPiAg Z2VuX2NvbnN0X3ZlY3Rvcl9kdXAgKG1hY2hpbmVfbW9kZSBtb2RlLCBwb2x5 X2ludDY0IHZhbCkNCj4gIHsNCj4gLSAgcnR4IGMgPSBnZW5faW50X21vZGUg KHZhbCwgR0VUX01PREVfSU5ORVIgKG1vZGUpKTsNCj4gKyAgc2NhbGFyX21v ZGUgc21vZGUgPSBHRVRfTU9ERV9JTk5FUiAobW9kZSk7DQo+ICsgIHJ0eCBj ID0gZ2VuX2ludF9tb2RlICh2YWwsIHNtb2RlKTsNCj4gKyAgaWYgKCF2YWwu aXNfY29uc3RhbnQgKCkgJiYgR0VUX01PREVfU0laRSAoc21vZGUpID4gR0VU X01PREVfU0laRSAoUG1vZGUpKQ0KPiArICAgIHsNCj4gKyAgICAgIHJ0eCBk dXAgPSBnZW5fcmVnX3J0eCAobW9kZSk7DQo+ICsgICAgICBlbWl0X2luc24g KGdlbl92ZWNfZHVwbGljYXRlIChtb2RlLCBkdXAsIGMpKTsNCj4gKyAgICAg IHJldHVybiBkdXA7DQo+ICsgICAgfQ0KPiAgICByZXR1cm4gZ2VuX2NvbnN0 X3ZlY19kdXBsaWNhdGUgKG1vZGUsIGMpOw0KPiAgfQ0KIA0KSXQncyBhIGJp dCB3ZWlyZCB0aGF0IHRoZSBmdW5jdGlvbiBub3cgYWxzbyBlbWl0cyBhbiBp bnNuLiAgSXQncyBub3QNCnNpbWlsYXIgdG8gdGhlIGFhcmNoNjQgdmFyaWFu dCBhbnltb3JlIHRoZW4sIEkgc3VwcG9zZS4gIElmIHNvLCBwbGVhc2UNCnJl bW92ZSB0aGUgY29tbWVudC4NCiANCj4gKw0KPiAgLyogVGhpcyBmdW5jdGlv biBlbWl0cyBhIG1hc2tlZCBpbnN0cnVjdGlvbi4gICovDQo+ICB2b2lkDQo+ ICBlbWl0X3ZsbWF4X21hc2tlZF9tdV9pbnNuICh1bnNpZ25lZCBpY29kZSwg aW50IG9wX251bSwgcnR4ICpvcHMpDQo+IEBAIC0xMTYyLDcgKzEyMDMsNiBA QCBleHBhbmRfY29uc3RfdmVjdG9yIChydHggdGFyZ2V0LCBydHggc3JjKQ0K PiAgfQ0KPiAgICAgICAgZWxzZQ0KPiAgew0KPiAtICAgZWx0ID0gZm9yY2Vf cmVnIChlbHRfbW9kZSwgZWx0KTsNCj4gICAgcnR4IG9wc1tdID0ge3RtcCwg ZWx0fTsNCj4gICAgZW1pdF92bG1heF9pbnNuIChjb2RlX2Zvcl9wcmVkX2Jy b2FkY2FzdCAobW9kZSksIFJWVl9VTk9QLCBvcHMpOw0KPiAgfQ0KPiBAQCAt MjQzMSw2ICsyNDcxLDI1IEBAIGV4cGFuZF92ZWNfY21wX2Zsb2F0IChydHgg dGFyZ2V0LCBydHhfY29kZSBjb2RlLCBydHggb3AwLCBydHggb3AxLA0KPiAg ICByZXR1cm4gZmFsc2U7DQo+ICB9DQogDQplbHRfbW9kZSBpcyB1bnVzZWQg YWZ0ZXIgeW91ciBwYXRjaC4gIFBsZWFzZSByZW1vdmUgaXQgb3Igd2Ugd2ls bCBoYXZlDQphIGJvb3RzdHJhcCBlcnJvci4NCiANCj4gQEAgLTI0NDQsNDIg KzI1MDMsNDcgQEAgZXhwYW5kX3ZlY19wZXJtIChydHggdGFyZ2V0LCBydHgg b3AwLCBydHggb3AxLCBydHggc2VsKQ0KPiAgICAgICBpbmRleCBpcyBpbiBy YW5nZSBvZiBbMCwgbnVuaXRzIC0gMV0uIEEgc2luZ2xlIHZyZ2F0aGVyIGlu c3RydWN0aW9ucyBpcw0KPiAgICAgICBlbm91Z2guIFNpbmNlIHdlIHdpbGwg dXNlIHZyZ2F0aGVyZWkxNi52diBmb3IgdmFyaWFibGUtbGVuZ3RoIHZlY3Rv ciwNCj4gICAgICAgaXQgaXMgbmV2ZXIgb3V0IG9mIHJhbmdlIGFuZCB3ZSBk b24ndCBuZWVkIHRvIG1vZHVsbyB0aGUgaW5kZXguICAqLw0KPiAtICBpZiAo IW51bml0cy5pc19jb25zdGFudCAoKSB8fCBjb25zdF92ZWNfYWxsX2luX3Jh bmdlX3AgKHNlbCwgMCwgbnVuaXRzIC0gMSkpDQo+ICsgIGlmIChudW5pdHMu aXNfY29uc3RhbnQgKCkgJiYgY29uc3RfdmVjX2FsbF9pbl9yYW5nZV9wIChz ZWwsIDAsIG51bml0cyAtIDEpKQ0KPiAgICAgIHsNCj4gICAgICAgIGVtaXRf dmxtYXhfZ2F0aGVyX2luc24gKHRhcmdldCwgb3AwLCBzZWwpOw0KPiAgICAg ICAgcmV0dXJuOw0KPiAgICAgIH0NCj4gIA0KPiAgICAvKiBDaGVjayBpZiB0 aGUgdHdvIHZhbHVlcyB2ZWN0b3JzIGFyZSB0aGUgc2FtZS4gICovDQo+IC0g IGlmIChydHhfZXF1YWxfcCAob3AwLCBvcDEpIHx8IGNvbnN0X3ZlY19kdXBs aWNhdGVfcCAoc2VsKSkNCj4gKyAgaWYgKHJ0eF9lcXVhbF9wIChvcDAsIG9w MSkpDQo+ICAgICAgew0KPiAgICAgICAgLyogTm90ZTogdmVjX3Blcm0gaW5k aWNlcyBhcmUgc3VwcG9zZWQgdG8gd3JhcCB3aGVuIHRoZXkgZ28gYmV5b25k IHRoZQ0KPiAgc2l6ZSBvZiB0aGUgdHdvIHZhbHVlIHZlY3RvcnMsIGkuZS4g dGhlIHVwcGVyIGJpdHMgb2YgdGhlIGluZGljZXMNCj4gIGFyZSBlZmZlY3Rp dmVseSBpZ25vcmVkLiAgUlZWIHZyZ2F0aGVyIGluc3RlYWQgcHJvZHVjZXMg MCBmb3IgYW55DQo+ICBvdXQtb2YtcmFuZ2UgaW5kaWNlcywgc28gd2UgbmVl ZCB0byBtb2R1bG8gYWxsIHRoZSB2ZWNfcGVybSBpbmRpY2VzDQo+ICB0byBl bnN1cmUgdGhleSBhcmUgYWxsIGluIHJhbmdlIG9mIFswLCBudW5pdHMgLSAx XS4gICovDQo+IC0gICAgICBydHggbWF4X3NlbCA9IGdlbl9jb25zdF92ZWN0 b3JfZHVwIChzZWxfbW9kZSwgbnVuaXRzIC0gMSk7DQo+IC0gICAgICBydHgg c2VsX21vZCA9IGV4cGFuZF9zaW1wbGVfYmlub3AgKHNlbF9tb2RlLCBBTkQs IHNlbCwgbWF4X3NlbCwgTlVMTCwgMCwNCj4gLSBPUFRBQl9ESVJFQ1QpOw0K PiAtICAgICAgZW1pdF92bG1heF9nYXRoZXJfaW5zbiAodGFyZ2V0LCBvcDEs IHNlbF9tb2QpOw0KPiArICAgICAgcnR4IHNlbF9tb2QgPSBtb2R1bG9fc2Vs X2luZGljZXMgKHNlbCwgbnVuaXRzIC0gMSk7DQo+ICsgICAgICBlbWl0X3Zs bWF4X2dhdGhlcl9pbnNuICh0YXJnZXQsIG9wMCwgc2VsX21vZCk7DQo+ICAg ICAgICByZXR1cm47DQo+ICAgICAgfQ0KIA0KV2hlbiByZWFkaW5nIGl0IEkg Y29uc2lkZXJlZCB1bmlmeWluZyBib3RoIGNhc2VzIGFuZCBoYXZlIG1vZHVs b19zZWxfaW5kaWNlcw0KanVzdCBkbyBub3RoaW5nIHdoZW4gdGhlIGNvbnN0 YW50IGFscmVhZHkgc2F0aXNmaWVzIHRoZSByYW5nZSByZXF1aXJlbWVudC4N CldvdWxkIHRoYXQgd29yaz8NCiANCj4gLSAgICAgIE9QVEFCX0RJUkVDVCk7 DQo+ICsgICAgICBwb2x5X3VpbnQ2NCB2YWx1ZSA9IHJ0eF90b19wb2x5X2lu dDY0IChlbHQpOw0KPiArICAgICAgcnR4IG9wID0gb3AwOw0KPiArICAgICAg aWYgKG1heWJlX2d0ICh2YWx1ZSwgbnVuaXRzIC0gMSkpDQo+ICsgew0KPiAr ICAgc2VsID0gZ2VuX2NvbnN0X3ZlY3Rvcl9kdXAgKHNlbF9tb2RlLCB2YWx1 ZSAtIG51bml0cyk7DQo+ICsgICBvcCA9IG9wMTsNCj4gKyB9DQo+ICsgICAg ICBlbWl0X3ZsbWF4X2dhdGhlcl9pbnNuICh0YXJnZXQsIG9wLCBzZWwpOw0K PiAgICAgIH0NCiANClRoYXQncyBhZ2FpbiBhICJtb2R1bG8iLiAgIENvdWxk IHRoYXQgYWxzbyBmaXQgaW4gbW9kdWxvX3NlbF9pbmRpY2VzPw0KWW91ciBj YWxsIGluIHRoZSBlbmQsIGl0IGp1c3QgZmVlbHMgbGlrZSB3ZSBkbyB0aGUg c2FtZSB0aGluZyBraW5kDQpvZiBkaWZmZXJlbnRseSBpbiBzZXZlcmFsIHBs YWNlcyBidXQgbm8gc3RyaWN0IHByZWZlcmVuY2UgaGVyZS4NCiANCj4gKy8q IFJldHVybiB0cnVlIGlmIGl0IGlzIHRoZSBzdHJpZGVkIGxvYWQvc3RvcmUu ICAqLw0KPiArc3RhdGljIGJvb2wNCj4gK3N0cmlkZWRfbG9hZF9zdG9yZV9w IChydHggdmVjX29mZnNldCwgcnR4ICpiYXNlLCBydHggKnN0ZXApDQo+ICt7 DQo+ICsgIGlmIChjb25zdF92ZWNfc2VyaWVzX3AgKHZlY19vZmZzZXQsIGJh c2UsIHN0ZXApKQ0KPiArICAgIHJldHVybiB0cnVlOw0KIA0KVGhlIHZlY3Rv cml6ZXIgd2lsbCBuZXZlciBlbWl0IHRoaXMgYnV0IHdlIHdvdWxkbid0IHdh bnQgYSBzdGVwDQpvZiAxIGhlcmUsIHJpZ2h0Pw0KIA0KPiArDQo+ICsgIC8q IEZvciBzdHJpZGVkIGxvYWQvc3RvcmUsIHZlY3Rvcml6ZXIgYWx3YXlzIGdl bmVyYXRlcw0KPiArICAgICBWRUNfU0VSSUVTX0VYUFIgZm9yIHZlY19vZmZz ZXQuICAqLw0KPiArICB0cmVlIGV4cHIgPSBSRUdfRVhQUiAodmVjX29mZnNl dCk7DQo+ICsgIGlmICghZXhwciB8fCBUUkVFX0NPREUgKGV4cHIpICE9IFNT QV9OQU1FKQ0KPiArICAgIHJldHVybiBmYWxzZTsNCj4gKw0KPiArICAvKiBD aGVjayBpZiBpdCBpcyBHSU1QTEUgbGlrZTogXzg4ID0gVkVDX1NFUklFU19F WFBSIDwwLCBfODc+OyAgKi8NCj4gKyAgZ2ltcGxlICpkZWZfc3RtdCA9IFNT QV9OQU1FX0RFRl9TVE1UIChleHByKTsNCj4gKyAgaWYgKCFkZWZfc3RtdCB8 fCAhaXNfZ2ltcGxlX2Fzc2lnbiAoZGVmX3N0bXQpDQo+ICsgICAgICB8fCBn aW1wbGVfYXNzaWduX3Joc19jb2RlIChkZWZfc3RtdCkgIT0gVkVDX1NFUklF U19FWFBSKQ0KPiArICAgIHJldHVybiBmYWxzZTsNCiANCkludGVyZXN0aW5n IHRvIHF1ZXJ5IHRoZSBnaW1wbGUgaGVyZS4gIEFzIGxvbmcgYXMgdGhlDQp2 ZWN0b3JpemVyIGRvZXNuJ3QgZG8gc3RyaWRlZCBzdG9yZXMgc2VwYXJhdGVs eSwgSSBndWVzcyB3ZSBjYW4NCmxpdmUgd2l0aCB0aGF0Lg0KIA0KPiArICBy dHggcHRyLCB2ZWNfb2Zmc2V0LCB2ZWNfcmVnLCBsZW4sIG1hc2s7DQo+ICsg IGJvb2wgemVyb19leHRlbmRfcDsNCj4gKyAgaW50IHNjYWxlX2xvZzI7DQo+ ICsgIGlmIChpc19sb2FkKQ0KPiArICAgIHsNCj4gKyAgICAgIHZlY19yZWcg PSBvcHNbMF07DQo+ICsgICAgICBwdHIgPSBvcHNbMV07DQo+ICsgICAgICB2 ZWNfb2Zmc2V0ID0gb3BzWzJdOw0KPiArICAgICAgemVyb19leHRlbmRfcCA9 IElOVFZBTCAob3BzWzNdKTsNCj4gKyAgICAgIHNjYWxlX2xvZzIgPSBleGFj dF9sb2cyIChJTlRWQUwgKG9wc1s0XSkpOw0KPiArICAgICAgbGVuID0gb3Bz WzVdOw0KPiArICAgICAgbWFzayA9IG9wc1s3XTsNCj4gKyAgICB9DQo+ICsg IGVsc2UNCj4gKyAgICB7DQo+ICsgICAgICB2ZWNfcmVnID0gb3BzWzRdOw0K PiArICAgICAgcHRyID0gb3BzWzBdOw0KPiArICAgICAgdmVjX29mZnNldCA9 IG9wc1sxXTsNCj4gKyAgICAgIHplcm9fZXh0ZW5kX3AgPSBJTlRWQUwgKG9w c1syXSk7DQo+ICsgICAgICBzY2FsZV9sb2cyID0gZXhhY3RfbG9nMiAoSU5U VkFMIChvcHNbM10pKTsNCj4gKyAgICAgIGxlbiA9IG9wc1s1XTsNCj4gKyAg ICAgIG1hc2sgPSBvcHNbN107DQo+ICsgICAgfQ0KIA0KPiArICBib29sIGlz X2R1bW1wX2xlbiA9IHBvbHlfaW50X3J0eF9wIChsZW4sICZ2YWx1ZSkgJiYg a25vd25fZXEgKHZhbHVlLCBudW5pdHMpOw0KIA0KV2hhdCdzIGR1bW1wPyAg ZHVtYj8gIEl0IGxvb2tzIGxpa2UgaXQncyB1c2VkIGZvciBzd2l0Y2hpbmcg YmV0d2Vlbg0KdmxtYXgvbm9udmxtYXggc28gYSBkaWZmZXJlbnQgbmFtZSBt aWdodCBiZSBhZHZpc2FibGUuDQogDQo+ICsgICAgICAgZW1pdF9pbnNuIChn ZW5fZXh0ZW5kX2luc24gKGV4dGVuZF9zdGVwLCBzdGVwLCBQbW9kZSwNCj4g KyAgIEdFVF9NT0RFIChzdGVwKSwNCj4gKyAgIHplcm9fZXh0ZW5kX3AgPyB0 cnVlIDogZmFsc2UpKTsNCj4gKyAgICAgICBzdGVwID0gZXh0ZW5kX3N0ZXA7 DQo+ICsgICAgIH0NCj4gKyB9DQogDQpTZWUgYmVsb3cuDQogDQo+ICsgICAg ICBydHggbWVtID0gdmFsaWRpemVfbWVtIChnZW5fcnR4X01FTSAodmVjX21v ZGUsIHB0cikpOw0KPiArICAgICAgLyogRW1pdCB2bHNlLnYgaWYgaXQncyBs b2FkLiBPdGhlcndpc2UsIGVtaXQgdnNzZS52LiAgKi8NCj4gKyAgICAgIGlm IChpc19sb2FkKQ0KPiArIHsNCj4gKyAgIGluc25fY29kZSBpY29kZSA9IGNv ZGVfZm9yX3ByZWRfc3RyaWRlZF9sb2FkICh2ZWNfbW9kZSk7DQo+ICsgICBp ZiAoaXNfZHVtbXBfbGVuKQ0KPiArICAgICB7DQo+ICsgICAgICAgcnR4IGxv YWRfb3BzW10NCj4gKyA9IHt2ZWNfcmVnLCBtYXNrLCBSVlZfVlVOREVGICh2 ZWNfbW9kZSksIG1lbSwgc3RlcH07DQo+ICsgICAgICAgZW1pdF92bG1heF9t YXNrZWRfaW5zbiAoaWNvZGUsIFJWVl9HQVRIRVJfTV9PUCwgbG9hZF9vcHMp Ow0KPiArICAgICB9DQo+ICsgICBlbHNlDQo+ICsgICAgIHsNCj4gKyAgICAg ICBydHggbG9hZF9vcHNbXQ0KPiArID0ge3ZlY19yZWcsIG1hc2ssIFJWVl9W VU5ERUYgKHZlY19tb2RlKSwgbWVtLCBzdGVwfTsNCj4gKyAgICAgICBlbWl0 X25vbnZsbWF4X21hc2tlZF9pbnNuIChpY29kZSwgUlZWX0dBVEhFUl9NX09Q LCBsb2FkX29wcywgbGVuKTsNCj4gKyAgICAgfQ0KPiArIH0NCiANClRoZSBv cHMgYXJlIHNpbWlsYXIsIGJldHRlciB0byBkZWZpbmUgdGhlbSBvdXRzaWRl IG9mIHRoZSBpZi9lbHNlLg0KSSB3b3VsZCBhbHNvIHJhdGhlciBoYXZlIGJv dGggaW4gdGhlIHNhbWUgZW1pdCBoZWxwZXIgYnV0IHRoYXQgd2FzDQpkaXNj dXNzZWQgYmVmb3JlLiAgVGhlIGZvbGxvd2luZyBzaW1pbGFyIHBhdHRlcm5z IGFsbCBsb29rIGEgYml0DQoiYm9pbGVycGxhdGUtaXNoIi4gIFRvbGVyYWJs ZSBmb3Igbm93IEkgZ3Vlc3MuDQogDQo+ICsgIGlmIChpbm5lcl9vZmZzaXpl IDwgaW5uZXJfdnNpemUpDQo+ICsgICAgew0KPiArICAgICAgLyogNy4yLiBW ZWN0b3IgTG9hZC9TdG9yZSBBZGRyZXNzaW5nIE1vZGVzLg0KPiArIElmIHRo ZSB2ZWN0b3Igb2Zmc2V0IGVsZW1lbnRzIGFyZSBuYXJyb3dlciB0aGFuIFhM RU4sIHRoZXkgYXJlDQo+ICsgemVyby1leHRlbmRlZCB0byBYTEVOIGJlZm9y ZSBhZGRpbmcgdG8gdGhlIHB0ciBlZmZlY3RpdmUgYWRkcmVzcy4gSWYNCj4g KyB0aGUgdmVjdG9yIG9mZnNldCBlbGVtZW50cyBhcmUgd2lkZXIgdGhhbiBY TEVOLCB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQNCj4gKyBYTEVOIGJpdHMgYXJl IHVzZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24uIEFuIGltcGxlbWVu dGF0aW9uIG11c3QNCj4gKyByYWlzZSBhbiBpbGxlZ2FsIGluc3RydWN0aW9u IGV4Y2VwdGlvbiBpZiB0aGUgRUVXIGlzIG5vdCBzdXBwb3J0ZWQgZm9yDQo+ ICsgb2Zmc2V0IGVsZW1lbnRzLiAgKi8NCj4gKyAgICAgIGlmICghemVyb19l eHRlbmRfcCB8fCAoemVyb19leHRlbmRfcCAmJiBzY2FsZV9sb2cyICE9IDAp KQ0KPiArIHsNCj4gKyAgIGlmICh6ZXJvX2V4dGVuZF9wKQ0KPiArICAgICBp bm5lcl9pZHhfbW9kZQ0KPiArICAgICAgID0gaW50X21vZGVfZm9yX3NpemUg KGlubmVyX29mZnNpemUgKiAyLCAwKS5yZXF1aXJlICgpOw0KPiArICAgZWxz ZQ0KPiArICAgICBpbm5lcl9pZHhfbW9kZSA9IGludF9tb2RlX2Zvcl9zaXpl IChCSVRTX1BFUl9XT1JELCAwKS5yZXF1aXJlICgpOw0KPiArICAgbWFjaGlu ZV9tb2RlIG5ld19pZHhfbW9kZQ0KPiArICAgICA9IGdldF92ZWN0b3JfbW9k ZSAoaW5uZXJfaWR4X21vZGUsIG51bml0cykucmVxdWlyZSAoKTsNCj4gKyAg IHJ0eCB0bXAgPSBnZW5fcmVnX3J0eCAobmV3X2lkeF9tb2RlKTsNCj4gKyAg IGVtaXRfaW5zbiAoZ2VuX2V4dGVuZF9pbnNuICh0bXAsIHZlY19vZmZzZXQs IG5ld19pZHhfbW9kZSwgaWR4X21vZGUsDQo+ICsgICAgICAgemVyb19leHRl bmRfcCA/IHRydWUgOiBmYWxzZSkpOw0KPiArICAgdmVjX29mZnNldCA9IHRt cDsNCj4gKyAgIGlkeF9tb2RlID0gbmV3X2lkeF9tb2RlOw0KPiArIH0NCj4g KyAgICB9DQogDQpUaGlzIG9uZSBJIGRvbid0IGdldC4gIFdoeSBkbyB3ZSBz dGlsbCBuZWVkIHRvIHplcm9fZXh0ZW5kIHdoZW4gdGhlDQpoYXJkd2FyZSBk b2VzIGl0IGZvciB1cz8gIFNob3VsZG4ndCB3ZSBvbmx5IHNpZ24gZXh0ZW5k IHdoZW4gdGhlDQpleHBhbmRlciBzYXlzIHNvPyAgQWN0dWFsbHkgd2Ugc2hv dWxkIGV2ZW4gc2Nhbi1hc3NlbWJsZXItbm90IGZvcg0KKHYpemV4dD8gIEFk ZGl0aW9uYWxseSBtYXliZSBhbHNvIHNjYW4tYXNzZW1ibGVyICh2KXNleHQg Zm9yIHRoZQ0KcmVzcGVjdGl2ZSBjYXNlcy4NCkJlc2lkZXMsIGNvdWxkbid0 IHdlIGRvIGEgd2lkZW5pbmcgc2hpZnQgd2hlbiBjb21iaW5pbmcgaXQgd2l0 aA0Kc2NhbGVfbG9nICE9IDA/DQogDQo+ICsgIGlmIChTVUJSRUdfUCAoc3Jj KSAmJiBDT05TVF9QT0xZX0lOVF9QIChTVUJSRUdfUkVHIChzcmMpKSkNCj4g KyAgICB7DQo+ICsgICAgICAvKiBTaW5jZSBWTEVOQiByZXN1bHQgZmV0ZWNo ZWQgYnkgY3NyciBpcyBhbHdheXMgd2l0aGluIFBtb2RlIHNpemUsDQo+ICsg d2UgYWx3YXlzIHNldCB0aGUgdXBwZXIgYml0cyBvZiB0aGUgUkVHIHdpdGgg bGFyZ2VyIG1vZGUgdGhhbiBQbW9kZQ0KPiArIGFzIDAuICBUaGUgY29kZSBz ZXF1ZW5jZSBpcyB0cmFuc2Zvcm1lZCBhcyBmb2xsb3dzOg0KPiArDQo+ICsg ICAgICAtIChzZXQgKHJlZzpTSSAxMzYpDQo+ICsgICAgIChzdWJyZWc6U0kg KGNvbnN0X3BvbHlfaW50OkRJIFsxNiwxNl0pIDApKQ0KPiArICAgICAgLT4g KHNldCAocmVnOlNJIDEzNikgKGNvbnN0X3BvbHlfaW50OlNJIFsxNiwxNl0p KQ0KPiArDQo+ICsgICAgICAtIChzZXQgKHJlZzpTSSAxMzYpDQo+ICsgICAg IChzdWJyZWc6U0kgKGNvbnN0X3BvbHlfaW50OkRJIFsxNiwxNl0pIDQpKQ0K PiArICAgICAgLT4gKHNldCAocmVnOlNJIDEzNikgKGNvbnN0X2ludCAwKSkg ICovDQo+ICsgICAgICBydHggcG9seV9ydHggPSBTVUJSRUdfUkVHIChzcmMp Ow0KPiArICAgICAgcG9seV9pbnQ2NCB2YWx1ZSA9IHJ0eF90b19wb2x5X2lu dDY0IChwb2x5X3J0eCk7DQo+ICsgICAgICAvKiBUaGUgb25seSBwb3NzaWJs ZSBjYXNlIGlzIGhhbmRsaW5nIENPTlNUX1BPTFlfSU5UOkRJIGluIFJWMzIg c3lzdGVtLiAqLw0KPiArICAgICAgZ2NjX2Fzc2VydCAoIVRBUkdFVF82NEJJ VCAmJiBtb2RlID09IFNJbW9kZQ0KPiArICAgJiYgR0VUX01PREUgKHBvbHlf cnR4KSA9PSBESW1vZGUgJiYga25vd25fZ2UgKHZhbHVlLCAwVSkpOw0KPiAr ICAgICAgaWYgKGtub3duX2VxIChTVUJSRUdfQllURSAoc3JjKSwgR0VUX01P REVfU0laRSAoUG1vZGUpKSkNCj4gKyBlbWl0X21vdmVfaW5zbiAoZGVzdCwg Y29uc3QwX3J0eCk7DQo+ICsgICAgICBlbHNlDQo+ICsgZW1pdF9tb3ZlX2lu c24gKGRlc3QsIGdlbl9pbnRfbW9kZSAodmFsdWUsIFBtb2RlKSk7DQo+ICsg ICAgICByZXR1cm4gdHJ1ZTsNCj4gKyAgICB9DQogDQpBcyBkaXNjdXNzZWQg c2VwYXJhdGVseSwgSSdkIHJhdGhlciBnbyB3aXRoDQogDQpkaWZmIC0tZ2l0 IGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5jYyBiL2djYy9jb25maWcvcmlz Y3YvcmlzY3YuY2MNCmluZGV4IGQ0MGQ0MzBkYjFiLi42NzM1Yzc3NjNiNSAx MDA2NDQNCi0tLSBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YuY2MNCisrKyBi L2djYy9jb25maWcvcmlzY3YvcmlzY3YuY2MNCkBAIC0yMDYxLDcgKzIwNjEs MTQgQEAgcmlzY3ZfbGVnaXRpbWl6ZV9wb2x5X21vdmUgKG1hY2hpbmVfbW9k ZSBtb2RlLCBydHggZGVzdCwgcnR4IHRtcCwgcnR4IHNyYykNCiAgICAgICht LCBuKSA9IGJhc2UgKiBtYWduICsgY29uc3RhbnQuDQogICAgICBUaGlzIGNh bGN1bGF0aW9uIGRvZXNuJ3QgbmVlZCBkaXYgb3BlcmF0aW9uLiAgKi8NCi0g IGVtaXRfbW92ZV9pbnNuICh0bXAsIGdlbl9pbnRfbW9kZSAoQllURVNfUEVS X1JJU0NWX1ZFQ1RPUiwgbW9kZSkpOw0KKyAgICBpZiAobW9kZSA8PSBQbW9k ZSkNCisgICAgICBlbWl0X21vdmVfaW5zbiAodG1wLCBnZW5faW50X21vZGUg KEJZVEVTX1BFUl9SSVNDVl9WRUNUT1IsIG1vZGUpKTsNCisgICAgZWxzZQ0K KyAgICAgIHsNCisgICAgICAgZW1pdF9tb3ZlX2luc24gKGdlbl9oaWdocGFy dCAoUG1vZGUsIHRtcCksIENPTlNUMF9SVFggKFBtb2RlKSk7DQorICAgICAg IGVtaXRfbW92ZV9pbnNuIChnZW5fbG93cGFydCAoUG1vZGUsIHRtcCksDQor ICAgICAgICAgICAgICAgICAgICAgICBnZW5faW50X21vZGUgKEJZVEVTX1BF Ul9SSVNDVl9WRUNUT1IsIFBtb2RlKSk7DQorICAgICAgfQ0KICAgaWYgKEJZ VEVTX1BFUl9SSVNDVl9WRUNUT1IuaXNfY29uc3RhbnQgKCkpDQogICAgIHsN CkBAIC0yMTY4LDcgKzIxNzUsNyBAQCByaXNjdl9sZWdpdGltaXplX21vdmUg KG1hY2hpbmVfbW9kZSBtb2RlLCBydHggZGVzdCwgcnR4IHNyYykNCiAgICAg ICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCi0gICAgICBpZiAoc2F0 aXNmaWVzX2NvbnN0cmFpbnRfdnAgKHNyYykpDQorICAgICAgaWYgKHNhdGlz Zmllc19jb25zdHJhaW50X3ZwIChzcmMpICYmIEdFVF9NT0RFIChzcmMpID09 IFBtb2RlKQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogDQppbnN0ZWFkLiAg VGhpcyBhdm9pZCB0aGUgKHN1cnByaXNpbmcpIHdlaXJkIHN1YnJlZyBiZWlu ZyBnZW5lcmF0ZWQNCmF0IGFsbCBhbmQgd2UgZG9uJ3QgbmVlZCB0byBlbnN1 cmUsIHByb2JhYmx5IHJlZHVuZGFudGx5LCB0aGF0IHRoZQ0KY29uc3RfcG9s eSB2YWx1ZSBpcyBpbiByYW5nZSBldGMuDQogDQo+ICsgICAgICAgICAgICYm IChpbW1lZGlhdGVfb3BlcmFuZCAob3BlcmFuZHNbM10sIFBtb2RlKQ0KPiAr ICAgICAgICB8fCAoQ09OU1RfUE9MWV9JTlRfUCAob3BlcmFuZHNbM10pdWxk bid0IHdlIGRvIGEgd2lkZW5pbmcgc2hpZnQgd2hlbiBjb21iaW5lZCB3aXRo DQpzY2FsZV9sb2cgIT0gMD8NCj4gKyAgICAgICAgICAgICYmIGtub3duX2dl IChydHhfdG9fcG9seV9pbnQ2NCAob3BlcmFuZHNbM10pLCAwVSkNCj4gKyAg ICAmJiBrbm93bl9sZSAocnR4X3RvX3BvbHlfaW50NjQgKG9wZXJhbmRzWzNd KSwgR0VUX01PREVfU0laRSAoPE1PREU+bW9kZSkpKSkpDQo+ICsgICAgew0K PiArICAgICAgcnR4IHRtcCA9IGdlbl9yZWdfcnR4IChQbW9kZSk7DQo+ICsg ICAgICBwb2x5X2ludDY0IHZhbHVlID0gcnR4X3RvX3BvbHlfaW50NjQgKG9w ZXJhbmRzWzNdKTsNCj4gKyAgICAgIGVtaXRfbW92ZV9pbnNuICh0bXAsIGdl bl9pbnRfbW9kZSAodmFsdWUsIFBtb2RlKSk7DQo+ICsgICAgICBvcGVyYW5k c1szXSA9IGdlbl9ydHhfU0lHTl9FWFRFTkQgKDxWRUw+bW9kZSwgdG1wKTsN Cj4gKyAgICB9DQogDQpNYXliZSBhZGQgYSBzaW5nbGUtbGluZSBjb21tZW50 IGFzIGZvciB0aGUgb3RoZXIgZXhpc3RpbmcgY2FzZXMuDQogDQo+ICsrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYXV0b3ZlYy9n YXRoZXItc2NhdHRlci9zdHJpZGVkX3N0b3JlX3J1bi0yLmMNCj4gQEAgLTAs MCArMSw4MiBAQA0KPiArLyogeyBkZy1kbyBydW4geyB0YXJnZXQgeyByaXNj dl92ZWN0b3IgfSB9IH0gKi8NCkFzIGRpc2N1c3NlZCBzZXBhcmF0ZWx5LCAg SSB3b3VsZCBwcmVmZXIgc2VwYXJhdGUgcnVuIHRlc3RzIGZvcg0KenZmaCht aW4pIGJ1dCBJIGd1ZXNzIHdlIGNhbiBsaXZlIHdpdGggdGhlbSBqdXN0IG5v dCBiZWluZyB2ZWN0b3JpemVkDQpmb3Igbm93Lg0KIA0KUmVnYXJkcw0KUm9i aW4NCiANCiANCg== ------=_001_NextPart374530284202_=------