From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from zg8tmty3ljk5ljewns4xndka.icoremail.net (zg8tmty3ljk5ljewns4xndka.icoremail.net [167.99.105.149]) by sourceware.org (Postfix) with ESMTP id 3CEBF3858D39 for ; Wed, 2 Aug 2023 01:39:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3CEBF3858D39 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=eswincomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=eswincomputing.com Received: from E0002168DT (unknown [10.12.97.254]) by app2 (Coremail) with SMTP id EggMCgCX3pTms8lkNPg4AA--.24346S2; Wed, 02 Aug 2023 09:39:50 +0800 (CST) Date: Wed, 2 Aug 2023 09:39:50 +0800 From: "Xiao Zeng" To: jeffreyalaw Cc: gcc-patches , research_trasio , kito.cheng , zhengyu , eri-sw-toolchain Subject: Re: Re: [PATCH V2] [PATCH 3/5] [RISC-V] Generate Zicond instruction for select pattern with condition eq or neq to 0 References: <20230729091308.29792-1-zengxiao@eswincomputing.com>, <856935c9-9252-f6c5-a950-4b43a8c156fa@gmail.com> X-Priority: 3 X-GUID: 6BF1140F-3E21-46C7-96A7-6E8AD1E10C71 X-Has-Attach: no X-Mailer: Foxmail 7.2.15.80[cn] Mime-Version: 1.0 Message-ID: <2023080209394998952341@eswincomputing.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-CM-TRANSID:EggMCgCX3pTms8lkNPg4AA--.24346S2 X-Coremail-Antispam: 1UD129KBjvAXoW3ur1DZr48CF13tF48Jw1kKrg_yoW8Jw45Wo WUKr1rJr15Jr1j9r1UGr1UJr13XF1UJr1DJr1UGry7Jr1UJr1UJ3yUJryjy3yUJr18Gr1U Jr1UJryUtFyUJr15n29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UjIYCTnIWjp_UUUOz7k0a2IF6w4kM7kC6x804xWl14x267AKxVWUJVW8JwAFc2x0 x2IEx4CE42xK8VAvwI8IcIk0rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj4 1l84x0c7CEw4AK67xGY2AK021l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7xvwVC0 I7IYx2IY6xkF7I0E14v26r4UJVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4 vEx4A2jsIEc7CjxVAFwI0_GcCE3s1lnx0E6VACY4xI67k04243AVACY4xI67k04243AVAK zVAKj4xI6x02cVCv0xWle2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I 8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_Jr0_Jr4lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCF s4IE7xkEbVWUJVW8JwACjcxG0xvY0x0EwIxGrwACY4xI67k04243AVAKzVAKj4xxMxkIec xEwVCm-wCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r 4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UMVCEFcxC0VAYjxAxZFUvcSsGvfC2Kfnx nUUI43ZEXa7IUel383UUUUU== X-CM-SenderInfo: p2hqw5xldrqvxvzl0uprps33xlqjhudrp/ X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00,BODY_8BITS,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_NUMSUBJECT,KAM_SHORT,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,TXREP,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: T24gVHVlLCBBdWcgMDEsIDIwMjMgYXQgMDI6MDY6MDAgUE3CoEplZmYgTGF3IDxqZWZmcmV5YWxh d0BnbWFpbC5jb20+IHdyb3RlOgo+Cj4KPgo+T24gNy8yOS8yMyAwMzoxMywgWGlhbyBaZW5nIHdy b3RlOgo+PiBUaGlzIHBhdGNoIHJlY29nbml6ZXMgWmljb25kIHBhdHRlcm5zIHdoZW4gdGhlIHNl bGVjdCBwYXR0ZXJuCj4+IHdpdGggY29uZGl0aW9uIGVxIG9yIG5lcSB0byAwICh1c2luZyBlcSBh cyBhbiBleGFtcGxlKSwgbmFtZWx5Ogo+Pgo+PiAxIHJkID0gKHJzMiA9PSAwKSA/IG5vbi1pbW0g OiAwCj4+IDIgcmQgPSAocnMyID09IDApID8gbm9uLWltbSA6IG5vbi1pbW0KPj4gMyByZCA9IChy czIgPT0gMCkgPyByZWcgOiBub24taW1tCj4+IDQgcmQgPSAocnMyID09IDApID8gcmVnIDogcmVn Cj4+Cj4+IGdjYy9DaGFuZ2VMb2c6Cj4+Cj4+wqDCoMKgwqDCoMKgwqDCoMKgICogY29uZmlnL3Jp c2N2L3Jpc2N2LmNjIChyaXNjdl9leHBhbmRfY29uZGl0aW9uYWxfbW92ZSk6IFJlY29nbml6ZQo+ PsKgwqDCoMKgwqDCoMKgwqDCoCBaaWNvbmQgcGF0dGVybnMKPj7CoMKgwqDCoMKgwqDCoMKgwqAg KiBjb25maWcvcmlzY3YvcmlzY3YubWQ6IFJlY29nbml6ZSBaaWNvbmQgcGF0dGVybnMgdGhyb3Vn aCBtb3Y8bW9kZT5jYwo+Pgo+PiBnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoKPj4KPj7CoMKgwqDC oMKgwqDCoMKgwqAgKiBnY2MudGFyZ2V0L3Jpc2N2L3ppY29uZC1wcmltaXRpdmVTZW1hbnRpY3Nf cmV0dXJuXzBfaW1tLmM6IE5ldyB0ZXN0Lgo+PsKgwqDCoMKgwqDCoMKgwqDCoCAqIGdjYy50YXJn ZXQvcmlzY3Yvemljb25kLXByaW1pdGl2ZVNlbWFudGljc19yZXR1cm5faW1tX2ltbS5jOiBOZXcg dGVzdC4KPj7CoMKgwqDCoMKgwqDCoMKgwqAgKiBnY2MudGFyZ2V0L3Jpc2N2L3ppY29uZC1wcmlt aXRpdmVTZW1hbnRpY3NfcmV0dXJuX2ltbV9yZWcuYzogTmV3IHRlc3QuCj4+wqDCoMKgwqDCoMKg wqDCoMKgICogZ2NjLnRhcmdldC9yaXNjdi96aWNvbmQtcHJpbWl0aXZlU2VtYW50aWNzX3JldHVy bl9yZWdfcmVnLmM6IE5ldyB0ZXN0Lgo+PiAtLS0KPj7CoMKgIGdjYy9jb25maWcvcmlzY3Yvcmlz Y3YuY2PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMTQ0ICsrKysr KysrKysrKysrKysrKwo+PsKgwqAgZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5tZMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNCArLQo+PsKgwqAgLi4uL3ppY29u ZC1wcmltaXRpdmVTZW1hbnRpY3NfcmV0dXJuXzBfaW1tLmPCoCB8wqAgNjUgKysrKysrKysKPj7C oMKgIC4uLnppY29uZC1wcmltaXRpdmVTZW1hbnRpY3NfcmV0dXJuX2ltbV9pbW0uYyB8wqAgNzMg KysrKysrKysrCj4+wqDCoCAuLi56aWNvbmQtcHJpbWl0aXZlU2VtYW50aWNzX3JldHVybl9pbW1f cmVnLmMgfMKgIDY1ICsrKysrKysrCj4+wqDCoCAuLi56aWNvbmQtcHJpbWl0aXZlU2VtYW50aWNz X3JldHVybl9yZWdfcmVnLmMgfMKgIDY1ICsrKysrKysrCj4+wqDCoCA2IGZpbGVzIGNoYW5nZWQs IDQxNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+PsKgwqAgY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi96aWNvbmQtcHJpbWl0aXZlU2VtYW50 aWNzX3JldHVybl8wX2ltbS5jCj4+wqDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L3Jpc2N2L3ppY29uZC1wcmltaXRpdmVTZW1hbnRpY3NfcmV0dXJuX2ltbV9p bW0uYwo+PsKgwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9y aXNjdi96aWNvbmQtcHJpbWl0aXZlU2VtYW50aWNzX3JldHVybl9pbW1fcmVnLmMKPj7CoMKgIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3Yvemljb25kLXBy aW1pdGl2ZVNlbWFudGljc19yZXR1cm5fcmVnX3JlZy5jCj4+Cj4+IGRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnL3Jpc2N2L3Jpc2N2LmNjIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5jYwo+PiBpbmRl eCA5NDFlYTI1ZTFmMi4uNmFjMzlmNjNkZDcgMTAwNjQ0Cj4+IC0tLSBhL2djYy9jb25maWcvcmlz Y3YvcmlzY3YuY2MKPj4gKysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5jYwo+PiBAQCAtMzUx Niw2ICszNTE2LDE1MCBAQCByaXNjdl9leHBhbmRfY29uZGl0aW9uYWxfbW92ZSAocnR4IGRlc3Qs IHJ0eCBvcCwgcnR4IGNvbnMsIHJ0eCBhbHQpCj4+wqDCoCDCoCBjb25kLCBjb25zLCBhbHQpKSk7 Cj4+wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gdHJ1ZTsKPj7CoMKgwqDCoMKgwqAgfQo+PiArwqAg ZWxzZSBpZiAoVEFSR0VUX1pJQ09ORAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKGNvZGUg PT0gRVEgfHwgY29kZSA9PSBORSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9NT0RF X0NMQVNTIChtb2RlKSA9PSBNT0RFX0lOVCkKPj4gK8KgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgIG5l ZWRfZXFfbmVfcCA9IHRydWU7Cj4+ICvCoMKgwqDCoMKgIC8qIDAgKyBpbW3CoCAqLwo+PiArwqDC oMKgwqDCoCBpZiAoR0VUX0NPREUgKGNvbnMpID09IENPTlNUX0lOVCAmJiBjb25zID09IGNvbnN0 MF9ydHgKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAoYWx0KSA9PSBDT05TVF9J TlQgJiYgYWx0ICE9IGNvbnN0MF9ydHgpCj5BIGNvdXBsZSBuaXRzLsKgIFJhdGhlciB0aGFuIHRl c3QgdGhlIEdFVF9DT0RFIChvYmplY3QpID09IENPTlNUX0lOVCwKPmluc3RlYWQgdXNlIENPTlNU X0lOVF9QIChvYmplY3QpLiAKZml4ZWQKCj4KPlJhdGhlciB0aGFuIHVzaW5nIGNvbnN0MF9ydHgs IHVzZSBDT05TVDBfUlRYIChtb2RlKS7CoCBUaGF0IG1ha2VzIGl0IG1vcmUKPmdlbmVyYWwuIApm aXhlZAoKPgo+Cj4KPj4gK8KgwqDCoMKgwqDCoMKgIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoCBy aXNjdl9lbWl0X2ludF9jb21wYXJlICgmY29kZSwgJm9wMCwgJm9wMSwgbmVlZF9lcV9uZV9wKTsK Pk1pZ2h0IGFzIHdlbGwgdXNlICJ0cnVlIiByYXRoZXIgdGhhbiAibmVlZF9lcV9uZV9wIiBoZXJl IGFuZCBmb3IgdGhlCj5vdGhlciBjYWxscyBpbiB5b3VyIG5ldyBjb2RlLgo+IApmaXhlZAoKPj4g K8KgwqDCoMKgwqAgLyogaW1tICsgaW1twqAgKi8KPj4gK8KgwqDCoMKgwqAgZWxzZSBpZiAoR0VU X0NPREUgKGNvbnMpID09IENPTlNUX0lOVCAmJiBjb25zICE9IGNvbnN0MF9ydHgKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKGFsdCkgPT0gQ09OU1RfSU5UICYm IGFsdCAhPSBjb25zdDBfcnR4KQo+U28gc2FtZSBjb21tZW50cyBvbiB1c2luZyBDT05TVF9JTlRf UCBhbmQgQ09OU1QwX1JUWCAKZml4ZWQKCj4+ICvCoMKgwqDCoMKgwqDCoCB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqAgcmlzY3ZfZW1pdF9pbnRfY29tcGFyZSAoJmNvZGUsICZvcDAsICZvcDEsIG5l ZWRfZXFfbmVfcCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqAgcnR4IGNvbmQgPSBnZW5fcnR4X2Zt dF9lZSAoY29kZSwgR0VUX01PREUgKG9wMCksIG9wMCwgb3AxKTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoCBydHggcmVnID0gZ2VuX3JlZ19ydHggKG1vZGUpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg IHJ0eCB0ZW1wID0gR0VOX0lOVCAoSU5UVkFMIChhbHQpIC0gSU5UVkFMIChjb25zKSk7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqAgZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAocmVnLCB0ZW1wKSk7Cj5V c2UgZm9yY2VfcmVnIGhlcmUgcmF0aGVyIHRoYW4gZGlyZWN0bHkgZW1pdHRpbmcgdGhlIGluc24g dG8gaW5pdGlhbGl6ZQo+InJlZyIuwqAgV2hhdCB5b3UncmUgZG9pbmcgd29ya3Mgd2hlbiB0aGUg ZGlmZmVyZW5jZSBpcyBzbWFsbCBidXQgd2lsbAo+bm90IHdvcmsgd2hlbiB0aGUgZGlmZmVyZW5j ZSBkb2VzIG5vdCBmaXQgaW50byBhIHNpZ25lZCAxMmJpdCB2YWx1ZS4gCmZpeGVkCgo+Cj4+ICvC oMKgwqDCoMKgIC8qIGltbSArIHJlZ8KgICovCj4+ICvCoMKgwqDCoMKgIGVsc2UgaWYgKEdFVF9D T0RFIChjb25zKSA9PSBDT05TVF9JTlQgJiYgY29ucyAhPSBjb25zdDBfcnR4Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChhbHQpID09IFJFRykKPlNhbWUgY29t bWVudHMgYWJvdXQgQ09OU1RfSU5UX1AgYW5kIENPTlNUMF9SVFguwqAgQW5kIGluc3RlYWQgb2Yg dXNpbmcKPkdFVF9DT0RFIChvYmplY3QpID09IFJFRywgdXNlIFJFR19QIChvYmplY3QpLgo+Cj4K Pj4gK8KgwqDCoMKgwqDCoMKgIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoCAvKiBPcHRpbWl6ZSBm b3IgcmVnaXN0ZXIgdmFsdWUgb2YgMC7CoCAqLwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChv cDAgPT0gYWx0ICYmIG9wMSA9PSBjb25zdDBfcnR4KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBydHggY29uZCA9IGdlbl9ydHhfZm10 X2VlIChjb2RlLCBHRVRfTU9ERSAob3AwKSwgb3AwLCBvcDEpOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY29ucyA9IGZvcmNlX3JlZyAobW9kZSwgY29ucyk7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChkZXN0LCBnZW5fcnR4X0lG X1RIRU5fRUxTRSAobW9kZSwgY29uZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29ucywgYWx0KSkp Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHRydWU7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIH0KPklzbid0IHRoaXMgb25seSB2YWxpZCBmb3IgTkU/CkhlcmUgaXMg d2hhdCBJIGRpZG4ndCBleHByZXNzIGNsZWFybHksIHBsZWFzZSBzZWXCoHRoZSBmb2xsb3dpbmcg cGF0dGVybnMgaW4gemljb25kLm1kOgoKKGRlZmluZV9pbnNuICIqY3plcm8uZXF6LjxHUFI6bW9k ZT48QU5ZSTptb2RlPi5vcHQyIgrCoCBbKHNldCAobWF0Y2hfb3BlcmFuZDpHUFIgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIj1yIikKwqAgwqAgwqAgwqAg KGlmX3RoZW5fZWxzZTpHUFIgKGVxIChtYXRjaF9vcGVyYW5kOkFOWUkgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgInIiKQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAo Y29uc3RfaW50IDApKQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobWF0 Y2hfb3BlcmFuZDpHUFIgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobWF0Y2hfb3BlcmFuZDpHUFIgMyAicmVnaXN0ZXJfb3Bl cmFuZCIgIjEiKSkpXQrCoCAiVEFSR0VUX1pJQ09ORCAmJiBydHhfZXF1YWxfcCAob3BlcmFuZHNb MV0sIMKgb3BlcmFuZHNbM10pIgrCoCAiY3plcm8ubmV6XHQlMCwlMiwlMSIKKQpOb3RlIHRoYXQg dGhlIEVRIGluIHRoZSBwYXR0ZXJuIGJlY29tZXMgdGhlIG9wcG9zaXRlIG5leiBpbiBhc3NlbWJs eSBpbnN0cnVjdGlvbiBlbWlzc2lvbi4KCihkZWZpbmVfaW5zbiAiKmN6ZXJvLm5lei48R1BSOm1v ZGU+PEFOWUk6bW9kZT4ub3B0MyIKwqAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgInJlZ2lz dGVyX29wZXJhbmQiIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICI9ciIpCsKgIMKgIMKgIMKg IChpZl90aGVuX2Vsc2U6R1BSIChuZSAobWF0Y2hfb3BlcmFuZDpBTllJIDEgInJlZ2lzdGVyX29w ZXJhbmQiICJyIikKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg KGNvbnN0X2ludCAwKSkKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKG1h dGNoX29wZXJhbmQ6R1BSIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKG1hdGNoX29wZXJhbmQ6R1BSIDMgInJlZ2lzdGVyX29w ZXJhbmQiICIxIikpKV0KwqAgIlRBUkdFVF9aSUNPTkQgJiYgcnR4X2VxdWFsX3AgKG9wZXJhbmRz WzFdLCBvcGVyYW5kc1szXSkiCsKgICJjemVyby5lcXpcdCUwLCUyLCUxIgopCk5vdGUgdGhhdCB0 aGUgTkUgaW4gdGhlIHBhdHRlcm4gYmVjb21lcyB0aGUgb3Bwb3NpdGUgZXF6IGluIGFzc2VtYmx5 IGluc3RydWN0aW9uIGVtaXNzaW9uLgoKVGhlcmVmb3JlLCBFUS9ORSBjYW4gYmUgdXNlZCBoZXJl LgoKPkFsc28gdXNlIENPTlNUMF9SVFggaW4gdGhhdCB0ZXN0LsKgCmZpeGVkCgo+Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqAgLyogSGFuZGxlIHRoZSBzcGVjaWFsIHNpdHVhdGlvbiBvZjogLTIwNDgg PT0gSU5UVkFMIChhbHQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdG8gYXZvaWQgZmFp bHVyZSBkdWUgdG8gYW4gdW5yZWNvZ25pemVkIGluc24uIExldCB0aGUgY29zdGluZwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vZGVsIGRldGVybWluZSBpZiB0aGUgY29uZGl0aW9uYWwg bW92ZSBzZXF1ZW5jZSBpcyBiZXR0ZXIKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0aGFu IHRoZSBicmFuY2hpbmcgc2VxdWVuY2UuwqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoCBpZiAo LTIwNDggPT0gSU5UVkFMIChjb25zKSkKPlNvIGluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIGV4cGxp Y2l0IHZhbHVlcywgd2UgaGF2ZSBTTUFMTF9PUEVSQU5EIHRvIGRvCj5pdCBmb3IgdXMuwqAgQWxz byBub3RlIHRoYXQgZm9yICFTTUFMTF9PUEVSQU5EIHdlIGNhbiBqdXN0IGZvcmNlIHRoZQo+dmFs dWUgaW50byBhIHJlZ2lzdGVyIHVzaW5nICJmb3JjZV9yZWciIGFuZCBhbGwgdGhlIHJpZ2h0IHRo aW5ncyB3aWxsCj5oYXBwZW4uCj4KPlNvIGp1c3QgYWRkIHNvbWV0aGluZyBsaWtlIHRoaXMgdG8g eW91ciBvcmlnaW5hbCBjb2RlOgo+Cj7CoMKgIGlmICghU01BTExfT1BFUkFORCAoSU5UVkFMIChj b25zKSkKPsKgwqDCoMKgIGNvbnMgPSBmb3JjZV9yZWcgKG1vZGUsIGNvbnMpOwo+Cj5UaGF0IHdp bGwgcmVzdWx0IGluIENPTlMgYmVpbmcgZWl0aGVyIGEgc2ltcGxlIGludGVnZXIgY29uc3RhbnQg KHdoZW4gaXQKPmlzIHN1aXRhYmxlIGZvciBhZGRpKSBvciBhIHJlZ2lzdGVyIChhbGwgb3RoZXIg Y2FzZXMpLsKgIEF0IHRoYXQgcG9pbnQKPnlvdSBjYW4gdXNlIGl0IGluIGFuIGFyaXRobWV0aWMg aW5zdHJ1Y3Rpb24uIApGaXJzdCwgSSBtb2RpZmllZCB0aGUgY29uc3RyYWludHMgb2YgbW92PG1v ZGU+Y2MgaW4gcmlzY3YubWQ6Ci0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg KG1hdGNoX29wZXJhbmQ6R1BSIDIgInJlZ19vcl8wX29wZXJhbmQiKQorIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIChtYXRjaF9vcGVyYW5kOkdQUiAyICJzZmJfYWx1X29wZXJh bmQiKQpTbyBib3RoIGNvbnMgYW5kIGFsdCB3aWxsIHNhdGlzZnkgdGhlIGNvbmRpdGlvbjogc2Zi X2FsdV9vcGVyYW5kLgoKVGhlIHZhbHVlIG9mIGNvbnMgc2F0aXNmaWVzIFNNQUxMX09QRVJBTkQs IGJ1dCB0YWtpbmcgYSBuZWdhdGl2ZQpudW1iZXIgb24gaXQgbWF5IG5vdCBzYXRpc2Z5IFNNQUxM X09QRVJBTkQuIFRoZSBvbmx5IGNvcm5lciBjYXNlIGhlcmUKaXMgdGhhdMKgaXMgLTIwNDggPT0g SU5UVkFMIChjb25zKS4gU28gaW4gdGhlIGNvcm5lciBjYXNlLCBpdCBtdXN0IGJlIGZvcmNlX3Jl Zy4KVGhlbiB0aGUgc3RhdGUgYXQgdGhpcyB0aW1lIGJlY29tZXMgcmVnK3JlZy4gUmF0aGVyIHRo YW4gdGhlIGNhc2UKaW1tK3JlZyBoYW5kbGVkIGJ5IHRoaXMgYnJhbmNoLiBTbyBmb3IgdGhlIGNv cm5lciBjYXNlIEkgY2FsbApyaXNjdl9leHBhbmRfY29uZGl0aW9uYWxfbW92ZSByZWN1cnNpdmVs eS4KCk9yLCBkbyB5b3UgaGF2ZSBhIGJldHRlciBzdWdnZXN0aW9uIGZvciB0aGlzIHBsYWNlPwo+ Cj4KPgo+PiArwqDCoMKgwqDCoCAvKiBpbW0gKyAwwqAgKi8KPj4gK8KgwqDCoMKgwqAgZWxzZSBp ZiAoR0VUX0NPREUgKGNvbnMpID09IENPTlNUX0lOVCAmJiBjb25zICE9IGNvbnN0MF9ydHgKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKGFsdCkgPT0gQ09OU1Rf SU5UICYmIGFsdCA9PSBjb25zdDBfcnR4KQo+PiArwqDCoMKgwqDCoMKgwqAgewo+PiArwqDCoMKg wqDCoMKgwqDCoMKgIHJpc2N2X2VtaXRfaW50X2NvbXBhcmUgKCZjb2RlLCAmb3AwLCAmb3AxLCBu ZWVkX2VxX25lX3ApOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgIHJ0eCBjb25kID0gZ2VuX3J0eF9m bXRfZWUgKGNvZGUsIEdFVF9NT0RFIChvcDApLCBvcDAsIG9wMSk7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqAgY29ucyA9IGZvcmNlX3JlZyAobW9kZSwgY29ucyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqAgZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAoZGVzdCwgZ2VuX3J0eF9JRl9USEVOX0VMU0UgKG1v ZGUsIGNvbmQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zLCBhbHQpKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIHRydWU7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgIC8qIHJl ZyArIGltbcKgICovCj4+ICvCoMKgwqDCoMKgIGVsc2UgaWYgKEdFVF9DT0RFIChjb25zKSA9PSBS RUcKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKGFsdCkgPT0g Q09OU1RfSU5UICYmIGFsdCAhPSBjb25zdDBfcnR4KQo+PiArwqDCoMKgwqDCoMKgwqAgewo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgIC8qIE9wdGltaXplIGZvciByZWdpc3RlciB2YWx1ZSBvZiAwLsKg ICovCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG9wMCA9PSBjb25zICYmIG9wMSA9PSBjb25z dDBfcnR4KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBydHggY29uZCA9IGdlbl9ydHhfZm10X2VlIChjb2RlLCBHRVRfTU9ERSAob3Aw KSwgb3AwLCBvcDEpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWx0ID0gZm9yY2Vf cmVnIChtb2RlLCBhbHQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW1pdF9pbnNu IChnZW5fcnR4X1NFVCAoZGVzdCwgZ2VuX3J0eF9JRl9USEVOX0VMU0UgKG1vZGUsIGNvbmQsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNvbnMsIGFsdCkpKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiB0cnVlOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj5TbyBpbiB0 aGlzIGNhc2UgaXNuJ3QgaXQgb25seSB2YWxpZCBmb3IgRVE/IApBcyBleHBsYWluZWQgYmVmb3Jl LCBib3RoIEVRL05FIGFyZSBwb3NzaWJsZSBoZXJlLgoKPgo+PiArwqDCoMKgwqDCoMKgwqDCoMKg IGlmICgtMjA0OCA9PSBJTlRWQUwgKGFsdCkpCj5TaW1pbGFyIGNvbW1lbnQgYXMgYWJvdmUuwqAg V2hlbiBBTFQgZG9lc24ndCBmaXQgaW50byBhIFNNQUxMX09QRVJBTkRfUCwKPmp1c3QgZm9yY2Ug aXQgaW50byBhIHJlZ2lzdGVyLgo+Cj4+ICvCoMKgwqDCoMKgIC8qIHJlZyArIHJlZ8KgICovCj4+ ICvCoMKgwqDCoMKgIGVsc2UgaWYgKEdFVF9DT0RFIChjb25zKSA9PSBSRUcgJiYgR0VUX0NPREUg KGFsdCkgPT0gUkVHKQo+PiArwqDCoMKgwqDCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKg IC8qIE9wdGltaXplIGZvciBvcDAgPT0gY29ucyAmJiBvcDEgPT0gY29uc3QwX3J0eC7CoCAqLwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChvcDAgPT0gY29ucyAmJiBvcDEgPT0gY29uc3QwX3J0 eCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcnR4IGNvbmQgPSBnZW5fcnR4X2ZtdF9lZSAoY29kZSwgR0VUX01PREUgKG9wMCksIG9w MCwgb3AxKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVtaXRfaW5zbiAoZ2VuX3J0 eF9TRVQgKGRlc3QsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnZW5fcnR4X0lGX1RIRU5fRUxTRSAo bW9kZSwgY29uZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgQ09OU1QwX1JUWCAobW9kZSksCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFsdCkpKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiB0cnVlOwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqAgLyogT3B0aW1pemUgZm9yIG9w MCA9PSBhbHQgJiYgb3AxID09IGNvbnN0MF9ydHguwqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oCBpZiAob3AwID09IGFsdCAmJiBvcDEgPT0gY29uc3QwX3J0eCkKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnR4IGNvbmQgPSBnZW5f cnR4X2ZtdF9lZSAoY29kZSwgR0VUX01PREUgKG9wMCksIG9wMCwgb3AxKTsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKGRlc3QsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBnZW5fcnR4X0lGX1RIRU5fRUxTRSAobW9kZSwgY29uZCwgY29ucywKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgQ09OU1QwX1JUWCAobW9kZSkpKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gdHJ1ZTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+SSBzdXNwZWN0IHdl IG5lZWQgc29tZSB0ZXN0aW5nIG9mIHRoZSBjb2RlIGluIHRoZSB0d28gc2VxdWVuY2VzIGFib3Zl Lgo+SSdkIGJldCBvbmUgaXMgb25seSB2YWxpZCBmb3IgRVEgYW5kIHRoZSBvdGhlciBmb3IgTkUu IApBcyBleHBsYWluZWQgYWJvdmUsIHRoZXkgd29yayBmaW5lLgoKPgo+SXQncyBpbXByb3Zpbmcg Y29uc2lkZXJhYmx5LiAKWW91ciBjb2RlIHJldmlldyBjb21tZW50cyBwdXNoIHRoaXMgY29kZSB0 byBiZSBiZXR0ZXIuCgo+Cj5XUlQgY29zdGluZy7CoCBJJ20gc3RpbGwgc2VlaW5nIHNvbWUgd2Vp cmRuZXNzIGluIGhvdyBjb25kaXRpb25hbCBtb3Zlcwo+YXJlIGJlaW5nIGNvc3RlZCBmcm9tIHRo ZSBpZi1jb252ZXJ0ZXIuwqAgSSB0aGluayB5b3VyIHBhdGNoIHRoYXQgc2V0IHRoZQo+Y29zdCB0 byBDT1NUU19OX0lOU05TICgwKSB3YXMganVzdCB3b3JraW5nIGFyb3VuZCBhIGRlZXBlciBidWcg aW4gdGhlCj5jb3N0aW5nIGNvZGUuwqAgSSdtIHN0aWxsIHRyeWluZyB0byBmaWd1cmUgb3V0IHRo ZSBiZXN0IHdheSB0byBjbGVhbiB0aGF0IHVwLiAKWWVzLCB0aGlzIHBsYWNlIGRlc2VydmVzIGRl ZXAgdGhvdWdodC4KCkJ5IHRoZSB3YXksIHRoZSByZWFzb24gd2h5IEkgZGlkIHRoaXMgKnRvdGFs ID0gQ09TVFNfTl9JTlNOUyAoMCkgaXMgdGhhdAp0aGUgcmVzdWx0IG9mIHNlcV9jb3N0IGluIGlm Y3Z0LmNjIGlzIG5vdCBmZWFzaWJsZSwgc3BlY2lmaWNhbGx5LCB0aGUgcmVzdWx0IGlzIHRvbwps YXJnZS4gWW91IGNhbiB0ZXN0LCBmb3IgYSBzaW1wbGUgQURESSBpbnNuLCBpZiBJIHJlbWVtYmVy IGNvcnJlY3RseSwgaXRzCnJlc3VsdCBpcyA4LiBQZXJoYXBzLCB0aGlzIHJlc3VsdCBpcyBubyBw cm9ibGVtIGluIHRoZSBjb21iaW5lIHBhc3MuIEFzIGZvcgp0aGUgWmljb25kJ3MgaW5zdHJ1Y3Rp b24sIHRoaXMgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhhdCBvZiBBRERJLgpUaGlzIGNhdXNlcyB0 aGUgaWZjdnQgcGFzcyB0byByZWplY3QgcHJvZml0YWJsZSBvcHRpbWl6YXRpb25zIGF0IC1Pcy4K Cj4KPgo+amVmZgoKMSBMZXQncyBjbGFyaWZ5IGNvc3QgaXNzdWUgYWZ0ZXIgdjMgcGF0Y2hbMy81 XSBpcyBkb25lLgoyIHYzIHBhdGNoWzMvNV0gYWRkcmVzcyBpczrCoGh0dHBzOi8vZ2NjLmdudS5v cmcvcGlwZXJtYWlsL2djYy1wYXRjaGVzLzIwMjMtQXVndXN0LzYyNjAxNS5odG1sCgpUaGFua3MK WGlhbyBaZW5n