From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpbgeu1.qq.com (smtpbgeu1.qq.com [52.59.177.22]) by sourceware.org (Postfix) with ESMTPS id C7B9F3857020 for ; Tue, 16 May 2023 04:33:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C7B9F3857020 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: bizesmtp71t1684211580thioo7wg Received: from LAPTOP-EPITNQBU ( [58.60.1.20]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 16 May 2023 12:32:59 +0800 (CST) X-QQ-SSF: 01400000000000F0R000000A0000000 X-QQ-FEAT: W+onFc5Tw4M5Zh06THKXsKX4kGvlOOyBf6RQwxzmubvMezTdT9Gvw3NnTlE8C 1PUDdnK48KQg7EuasbNv+eFdAqLUvuRnLLgcHfmR3RBkJHxVWqi6FQVDGWs7m4WVReryS1M U9BfJFweBk1z0cjHEJK+wBV6ozN8aQtzLJGbRxXT01ncEHTlnJ+R2YBJu58iawrGMEWDfWj rULrm4eRxAMRyU98xDKKmQn2CH1Y7zNg6BMNQS5kIPXx8RP9Fk44EWx9b8cXkHSdFLlEwMc 1dxtidiORwX4whHwS1HW8PHSwPwYrKCIO6hop4yEGr710PlFQAgLi9DklINw4LOqYJZ3O/a 52u5AcV0sbVVOpksCl5UZTj+m+fy9umwwE4N1zg/AxLHpg3/XZiB6Yxn4fOEAdfzSa96eFs p5rAwZwzF/aM35DtAfzrDcmlI12i1xgyYmdKRaWJiuo= X-QQ-GoodBg: 2 X-BIZMAIL-ID: 2021313630109656908 Date: Tue, 16 May 2023 12:32:59 +0800 From: "juzhe.zhong@rivai.ai" To: richard.sandiford Cc: gcc-patches , rguenther Subject: Re: Re: [PATCH V7] VECT: Add decrement IV support in Loop Vectorizer References: <20230515012844.183599-1-juzhe.zhong@rivai.ai>, X-Priority: 3 X-GUID: 9815DFFA-D537-47B8-93B5-DCAB86F50F85 X-Has-Attach: no X-Mailer: Foxmail 7.2.16.188[cn] Mime-Version: 1.0 Message-ID: Content-Type: multipart/alternative; boundary="----=_001_NextPart006600541431_=----" X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:rivai.ai:qybglogicsvrgz:qybglogicsvrgz7a-one-0 X-Spam-Status: No, score=-7.8 required=5.0 tests=BAYES_00,GIT_PATCH_0,HTML_MESSAGE,KAM_DMARC_STATUS,KAM_SHORT,MIME_BASE64_TEXT,RCVD_IN_BARRACUDACENTRAL,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,RCVD_IN_SORBS_WEB,SPF_PASS,TXREP,T_KAM_HTML_FONT_INVALID,T_SCC_BODY_TEXT_LINE,T_SPF_HELO_TEMPERROR 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_NextPart006600541431_=---- Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: base64 Pj4gVGhlIGV4YW1wbGVzIGFyZSBnb29kLCBidXQgdGhpcyBvbmUgbWFkZSBt ZSB3b25kZXI6IHdoeSBpcyB0aGUNCj4+IGFkanVzdG1lbnQgbWFkZSB0byB0 aGUgbGltaXQgKG5hbWVseSAxNiwgdGhlIGdhcCBiZXR3ZWVuIF8zOSBhbmQg XzQxKQ0KPj4gZGlmZmVyZW50IGZyb20gdGhlIGxpbWl0cyBpbXBvc2VkIGJ5 IHRoZSBNSU5fRVhQUiAoMzIpPyAgQW5kIEkgdGhpbmsNCj4+IHRoZSBhbnN3 ZXIgaXMgdGhhdDoNCg0KPj4gLSBfNDcgY291bnRzIHRoZSBudW1iZXIgb2Yg ZWxlbWVudHMgcHJvY2Vzc2VkIGJ5IHRoZSBsb29wIGluIHRvdGFsLA0KPj4g ICBpbmNsdWRpbmcgdGhlIHZlY3RvcnMgdW5kZXIgdGhlIGNvbnRyb2wgb2Yg XzQ0DQoNCj4+IC0gXzQ0IGNvdW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz IGNvbnRyb2xsZWQgYnkgXzQ3IGluIHRoZSBuZXh0DQo+PiAgIGl0ZXJhdGlv biBvZiB0aGUgdmVjdG9yIGxvb3AgKGlmIHRoZXJlIGlzIG9uZSkNCg0KPj4g QW5kIHRoYXQncyBuZWVkZWQgdG8gYWxsb3cgdGhlIElWcyB0byBiZSB1cGRh dGVkIGluZGVwZW5kZW50bHkuDQoNCj4+IFRoZSBkaWZmaWN1bHR5IHdpdGgg dGhpcyBpcyB0aGF0IHRoZSBsZW5fbG9hZCogYW5kIGxlbl9zdG9yZSoNCj4+ IG9wdGFicyBjdXJyZW50bHkgc2F5IHRoYXQgdGhlIGJlaGF2aW91ciBpcyB1 bmRlZmluZWQgaWYgdGhlDQo+PiBsZW5ndGggYXJndW1lbnQgaXMgZ3JlYXRl ciB0aGFuIHRoZSBsZW5ndGggb2YgYSB2ZWN0b3IuDQo+PiBTbyBJIHRoaW5r IHVzaW5nIHRoZXNlIHZhbHVlcyBvZiBfNDcgYW5kIF80NCBpbiB0aGUgLkxF Tl9TVE9SRXMNCj4+IGlzIHJlbHlpbmcgb24gdW5kZWZpbmVkIGJlaGF2aW91 ci4NCg0KPj4gSGF2ZW4ndCBoYWQgdGltZSB0byB0aGluayBhYm91dCB0aGUg Y29uc2VxdWVuY2VzIG9mIHRoYXQgeWV0LA0KPj4gYnV0IHdhbnRlZCB0byBz ZW5kIHNvbWV0aGluZyBvdXQgc29vbmVyIHJhdGhlciB0aGFuIGxhdGVyLg0K DQpIaSwgUmljaGFyZC4gSSB0b3RhbGx5IHVuZGVyc3RhbmQgeW91ciBjb25j ZXJuIG5vdy4gSSB0aGluayB0aGUgdW5kZWZpbmUgYmVoYXZpb3IgaXMgbW9y ZQ0KYXBwcm9wcmlhdGUgZm9yIFJWViBzaW5jZSB3ZSBoYXZlIHZzZXR2bGkg aW5zdHJ1Y3Rpb24gdGhhdCBndXJhbnRlZSB0aGlzIHdpbGwgY2F1c2UgcG90 ZW50aWFsDQppc3N1ZXMuIEhvd2V2ZXIsIGZvciBzb21lIG90aGVyIHRhcmdl dCwgd2UgbWF5IG5lZWQgdG8gdXNlIGFkZGl0aW9uYWwgTUlOX0VYUFIgdG8g Z3VhcmQNCnRoZSBsZW5ndGggbmV2ZXIgb3ZlciBWRi4gSSB0aGluayBpdCBj YW4gYmUgYWRkcmVzc2VkIGluIHRoZSBmdXR1cmUgd2hlbiBpdCBpcyBuZWVk ZWQuDQoNCkZvciBub3csIGlzIGl0IE9LIGZvciB0cnVuayB0aGUgVjkgcGF0 Y2g/DQpodHRwczovL2djYy5nbnUub3JnL3BpcGVybWFpbC9nY2MtcGF0Y2hl cy8yMDIzLU1heS82MTg2MzguaHRtbCANCndoaWNoIGhhcyBmaXhlZCB0aGUg Y29tbWVudHMgYXMgeW91IHN1Z2dlc3RlZC4NCg0KQmVzaWRlcywgd2Ugd2ls bCBnb2luZyB0byBhZGQgbW9yZSBwYXR0ZXJucyBoYXMgbGVuZ3RoIGluY2x1 ZGVkOg0KbGVuX21hc2tfbG9hZC9sZW5fbWFza19zdG9yZXMsIGxlbl9tYXNr X2dhdGhlcl9sb2FkLyBsZW5fY29uZC4uLmV0Yw0KVGhleSBhcmUgYWxsIHVu ZGVmaW5lIGJlaGF2aW9yIGZvciBsZW5ndGggbGFyZ2VyIHRoYW4gdGhlIHZl Y3RvciBsZW5ndGguDQoNClRoYW5rcy4NCg0KDQpqdXpoZS56aG9uZ0ByaXZh aS5haQ0KIA0KRnJvbTogUmljaGFyZCBTYW5kaWZvcmQNCkRhdGU6IDIwMjMt MDUtMTYgMDM6NDQNClRvOiBqdXpoZS56aG9uZw0KQ0M6IGdjYy1wYXRjaGVz OyByZ3VlbnRoZXINClN1YmplY3Q6IFJlOiBbUEFUQ0ggVjddIFZFQ1Q6IEFk ZCBkZWNyZW1lbnQgSVYgc3VwcG9ydCBpbiBMb29wIFZlY3Rvcml6ZXINCmp1 emhlLnpob25nQHJpdmFpLmFpIHdyaXRlczoNCj4gRnJvbTogSnV6aGUtWmhv bmcgPGp1emhlLnpob25nQHJpdmFpLmFpPg0KPg0KPiBUaGlzIHBhdGNoIGlt cGxlbWVudCBkZWNyZW1lbnQgSVYgZm9yIGxlbmd0aCBhcHByb2FjaCBpbiBs b29wIGNvbnRyb2wuDQo+DQo+IEFkZHJlc3MgY29tbWVudCBmcm9tIGtld2Vu IHRoYXQgaW5jb3Jwb3JhdGUgdGhlIGltcGxlbWVudGF0aW9uIGluc2lkZQ0K PiAidmVjdF9zZXRfbG9vcF9jb250cm9sc19kaXJlY3RseSIgaW5zdGVhZCBv ZiBhIHN0YW5kYWxvbmUgZnVuY3Rpb24uDQo+DQo+IEFkZHJlc3MgY29tbWVu dCBmcm9tIFJpY2hhcmQgdXNpbmcgTUlOX0VYUFIgdG8gaGFuZGxlIHRoZXNl IDMgZm9sbG93aW5nDQo+IGNhc2VzDQo+IDEuIHNpbmdsZSByZ3JvdXAuDQo+ IDIuIG11bHRpcGxlIHJncm91cCBmb3IgU0xQLg0KPiAzLiBtdWx0aXBsZSBy Z3JvdXAgZm9yIG5vbi1TTFAgKHRlc3RlZCBvbiB2ZWNfcGFja190cnVuYyku DQogDQpUaGFua3MsIHRoaXMgbG9va3MgcHJldHR5IHJlYXNvbmFibGUgdG8g bWUgRldJVywgYnV0IHNvbWUgY29tbWVudHMgYmVsb3c6DQogDQo+IEJvb3Rz dHJhcGVkICYmIFJlZ3Jlc3Npb24gb24geDg2Lg0KPg0KPiBPayBmb3IgdHJ1 bmsgPw0KPg0KPiBnY2MvQ2hhbmdlTG9nOg0KPg0KPiAgICAgICAgICogdHJl ZS12ZWN0LWxvb3AtbWFuaXAuY2MgKHZlY3RfYWRqdXN0X2xvb3BfbGVucyk6 IE5ldyBmdW5jdGlvbi4NCj4gICAgICAgICAodmVjdF9zZXRfbG9vcF9jb250 cm9sc19kaXJlY3RseSk6IEFkZCBkZWNyZW1lbnQgSVYgc3VwcG9ydC4NCj4g ICAgICAgICAodmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFydGlhbF92ZWN0 b3JzKTogRGl0dG8uDQo+ICAgICAgICAgKiB0cmVlLXZlY3QtbG9vcC5jYyAo X2xvb3BfdmVjX2luZm86Ol9sb29wX3ZlY19pbmZvKTogQWRkIGEgbmV3IHZh cmlhYmxlLg0KPiAgICAgICAgICh2ZWN0X2dldF9sb29wX2xlbik6IEFkZCBk ZWNyZW1lbnQgSVYgc3VwcG9ydC4NCj4gICAgICAgICAqIHRyZWUtdmVjdC1z dG10cy5jYyAodmVjdG9yaXphYmxlX3N0b3JlKTogRGl0dG8uDQo+ICAgICAg ICAgKHZlY3Rvcml6YWJsZV9sb2FkKTogRGl0dG8uDQo+ICAgICAgICAgKiB0 cmVlLXZlY3Rvcml6ZXIuaCAoTE9PUF9WSU5GT19VU0lOR19ERUNSRU1FTlRJ TkdfSVZfUCk6IE5ldyBtYWNyby4NCj4gICAgICAgICAodmVjdF9nZXRfbG9v cF9sZW4pOiBBZGQgZGVjcmVtZW50IElWIHN1cHBvcnQuDQo+DQo+IC0tLQ0K PiAgZ2NjL3RyZWUtdmVjdC1sb29wLW1hbmlwLmNjIHwgMTc3ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiAgZ2NjL3RyZWUtdmVj dC1sb29wLmNjICAgICAgIHwgIDM4ICsrKysrKystDQo+ICBnY2MvdHJlZS12 ZWN0LXN0bXRzLmNjICAgICAgfCAgIDkgKy0NCj4gIGdjYy90cmVlLXZlY3Rv cml6ZXIuaCAgICAgICB8ICAxMyArKy0NCj4gIDQgZmlsZXMgY2hhbmdlZCwg MjI0IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQ0KPg0KPiBkaWZm IC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1sb29wLW1hbmlwLmNjIGIvZ2NjL3Ry ZWUtdmVjdC1sb29wLW1hbmlwLmNjDQo+IGluZGV4IGZmNjE1OWUwOGQ1Li4x YmFhYzdiMWI1MiAxMDA2NDQNCj4gLS0tIGEvZ2NjL3RyZWUtdmVjdC1sb29w LW1hbmlwLmNjDQo+ICsrKyBiL2djYy90cmVlLXZlY3QtbG9vcC1tYW5pcC5j Yw0KPiBAQCAtMzg1LDYgKzM4NSw1OCBAQCB2ZWN0X21heWJlX3Blcm11dGVf bG9vcF9tYXNrcyAoZ2ltcGxlX3NlcSAqc2VxLCByZ3JvdXBfY29udHJvbHMg KmRlc3RfcmdtLA0KPiAgICByZXR1cm4gZmFsc2U7DQo+ICB9DQo+ICANCj4g Ky8qIFRyeSB0byB1c2UgYWRqdXN0IGxvb3AgbGVucyBmb3Igbm9uLVNMUCBt dWx0aXBsZS1yZ3JvdXBzLg0KPiArDQo+ICsgICAgIF8zNiA9IE1JTl9FWFBS IDxpdnRtcF8zNCwgVkY+Ow0KPiArDQo+ICsgICAgIEZpcnN0IGxlbmd0aCAo TUlOIChYLCBWRi9OKSk6DQo+ICsgICAgICAgbG9vcF9sZW5fMTUgPSBNSU5f RVhQUiA8XzM2LCBWRi9OPjsNCj4gKw0KPiArICAgICBTZWNvbmQgbGVuZ3Ro Og0KPiArICAgICAgIHRtcCA9IF8zNiAtIGxvb3BfbGVuXzE1Ow0KPiArICAg ICAgIGxvb3BfbGVuXzE2ID0gTUlOICh0bXAsIFZGL04pOw0KPiArDQo+ICsg ICAgIFRoaXJkIGxlbmd0aDoNCj4gKyAgICAgICB0bXAyID0gdG1wIC0gbG9v cF9sZW5fMTY7DQo+ICsgICAgICAgbG9vcF9sZW5fMTcgPSBNSU4gKHRtcDIs IFZGL04pOw0KPiArDQo+ICsgICAgIEZvcnRoIGxlbmd0aDoNCj4gKyAgICAg ICB0bXAzID0gdG1wMiAtIGxvb3BfbGVuXzE3Ow0KPiArICAgICAgIGxvb3Bf bGVuXzE4ID0gTUlOICh0bXAzLCBWRi9OKTsgICovDQo+ICsNCj4gK3N0YXRp YyB2b2lkDQo+ICt2ZWN0X2FkanVzdF9sb29wX2xlbnMgKHRyZWUgaXZfdHlw ZSwgZ2ltcGxlX3NlcSAqc2VxLCByZ3JvdXBfY29udHJvbHMgKmRlc3Rfcmdt LA0KPiArICAgICAgICByZ3JvdXBfY29udHJvbHMgKnNyY19yZ20pDQo+ICt7 DQo+ICsgIHRyZWUgY3RybF90eXBlID0gZGVzdF9yZ20tPnR5cGU7DQo+ICsg IHBvbHlfdWludDY0IG5pdGVtc19wZXJfY3RybA0KPiArICAgID0gVFlQRV9W RUNUT1JfU1VCUEFSVFMgKGN0cmxfdHlwZSkgKiBkZXN0X3JnbS0+ZmFjdG9y Ow0KPiArDQo+ICsgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZGVz dF9yZ20tPmNvbnRyb2xzLmxlbmd0aCAoKTsgKytpKQ0KPiArICAgIHsNCj4g KyAgICAgIHRyZWUgc3JjID0gc3JjX3JnbS0+Y29udHJvbHNbaSAvIGRlc3Rf cmdtLT5jb250cm9scy5sZW5ndGggKCldOw0KPiArICAgICAgdHJlZSBkZXN0 ID0gZGVzdF9yZ20tPmNvbnRyb2xzW2ldOw0KPiArICAgICAgdHJlZSBsZW5n dGhfbGltaXQgPSBidWlsZF9pbnRfY3N0IChpdl90eXBlLCBuaXRlbXNfcGVy X2N0cmwpOw0KPiArICAgICAgZ2Fzc2lnbiAqc3RtdDsNCj4gKyAgICAgIGlm IChpID09IDApDQo+ICsgew0KPiArICAgLyogTUlOIChYLCBWRipJL04pIGNh cHBlZCB0byB0aGUgcmFuZ2UgWzAsIFZGL05dLiAgKi8NCj4gKyAgIHN0bXQg PSBnaW1wbGVfYnVpbGRfYXNzaWduIChkZXN0LCBNSU5fRVhQUiwgc3JjLCBs ZW5ndGhfbGltaXQpOw0KPiArICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoc2Vx LCBzdG10KTsNCj4gKyB9DQo+ICsgICAgICBlbHNlDQo+ICsgew0KPiArICAg LyogKE1JTiAocmVtYWluLCBWRipJL04pKSBjYXBwZWQgdG8gdGhlIHJhbmdl IFswLCBWRi9OXS4gICovDQo+ICsgICB0cmVlIHRlbXAgPSBtYWtlX3NzYV9u YW1lIChpdl90eXBlKTsNCj4gKyAgIHN0bXQgPSBnaW1wbGVfYnVpbGRfYXNz aWduICh0ZW1wLCBNSU5VU19FWFBSLCBzcmMsDQo+ICsgICAgICAgZGVzdF9y Z20tPmNvbnRyb2xzW2kgLSAxXSk7DQo+ICsgICBnaW1wbGVfc2VxX2FkZF9z dG10IChzZXEsIHN0bXQpOw0KPiArICAgc3RtdCA9IGdpbXBsZV9idWlsZF9h c3NpZ24gKGRlc3QsIE1JTl9FWFBSLCB0ZW1wLCBsZW5ndGhfbGltaXQpOw0K PiArICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoc2VxLCBzdG10KTsNCj4gKyB9 DQo+ICsgICAgfQ0KPiArfQ0KPiArDQo+ICAvKiBIZWxwZXIgZm9yIHZlY3Rf c2V0X2xvb3BfY29uZGl0aW9uX3BhcnRpYWxfdmVjdG9ycy4gIEdlbmVyYXRl IGRlZmluaXRpb25zDQo+ICAgICBmb3IgYWxsIHRoZSByZ3JvdXAgY29udHJv bHMgaW4gUkdDIGFuZCByZXR1cm4gYSBjb250cm9sIHRoYXQgaXMgbm9uemVy bw0KPiAgICAgd2hlbiB0aGUgbG9vcCBuZWVkcyB0byBpdGVyYXRlLiAgQWRk IGFueSBuZXcgcHJlaGVhZGVyIHN0YXRlbWVudHMgdG8NCj4gQEAgLTQ2OCw5 ICs1MjAsMTAgQEAgdmVjdF9zZXRfbG9vcF9jb250cm9sc19kaXJlY3RseSAo Y2xhc3MgbG9vcCAqbG9vcCwgbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0K PiAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciBpbmNyX2dzaTsNCj4gICAgYm9v bCBpbnNlcnRfYWZ0ZXI7DQo+ICAgIHN0YW5kYXJkX2l2X2luY3JlbWVudF9w b3NpdGlvbiAobG9vcCwgJmluY3JfZ3NpLCAmaW5zZXJ0X2FmdGVyKTsNCj4g LSAgY3JlYXRlX2l2IChidWlsZF9pbnRfY3N0IChpdl90eXBlLCAwKSwgUExV U19FWFBSLCBuaXRlbXNfc3RlcCwgTlVMTF9UUkVFLA0KPiAtICAgICAgbG9v cCwgJmluY3JfZ3NpLCBpbnNlcnRfYWZ0ZXIsICZpbmRleF9iZWZvcmVfaW5j ciwNCj4gLSAgICAgICZpbmRleF9hZnRlcl9pbmNyKTsNCj4gKyAgaWYgKCFM T09QX1ZJTkZPX1VTSU5HX0RFQ1JFTUVOVElOR19JVl9QIChsb29wX3ZpbmZv KSkNCj4gKyAgICBjcmVhdGVfaXYgKGJ1aWxkX2ludF9jc3QgKGl2X3R5cGUs IDApLCBQTFVTX0VYUFIsIG5pdGVtc19zdGVwLCBOVUxMX1RSRUUsDQo+ICsg ICAgICAgIGxvb3AsICZpbmNyX2dzaSwgaW5zZXJ0X2FmdGVyLCAmaW5kZXhf YmVmb3JlX2luY3IsDQo+ICsgICAgICAgICZpbmRleF9hZnRlcl9pbmNyKTsN Cj4gIA0KPiAgICB0cmVlIHplcm9faW5kZXggPSBidWlsZF9pbnRfY3N0IChj b21wYXJlX3R5cGUsIDApOw0KPiAgICB0cmVlIHRlc3RfaW5kZXgsIHRlc3Rf bGltaXQsIGZpcnN0X2xpbWl0Ow0KPiBAQCAtNTUyLDggKzYwNSwxMyBAQCB2 ZWN0X3NldF9sb29wX2NvbnRyb2xzX2RpcmVjdGx5IChjbGFzcyBsb29wICps b29wLCBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ICAgIC8qIENvbnZl cnQgdGhlIElWIHZhbHVlIHRvIHRoZSBjb21wYXJpc29uIHR5cGUgKGVpdGhl ciBhIG5vLW9wIG9yDQo+ICAgICAgIGEgZGVtb3Rpb24pLiAgKi8NCj4gICAg Z2ltcGxlX3NlcSB0ZXN0X3NlcSA9IE5VTEw7DQo+IC0gIHRlc3RfaW5kZXgg PSBnaW1wbGVfY29udmVydCAoJnRlc3Rfc2VxLCBjb21wYXJlX3R5cGUsIHRl c3RfaW5kZXgpOw0KPiAtICBnc2lfaW5zZXJ0X3NlcV9iZWZvcmUgKHRlc3Rf Z3NpLCB0ZXN0X3NlcSwgR1NJX1NBTUVfU1RNVCk7DQo+ICsgIGlmIChMT09Q X1ZJTkZPX1VTSU5HX0RFQ1JFTUVOVElOR19JVl9QIChsb29wX3ZpbmZvKSkN Cj4gKyAgICB0ZXN0X2xpbWl0ID0gZ2ltcGxlX2NvbnZlcnQgKHByZWhlYWRl cl9zZXEsIGl2X3R5cGUsIG5pdGVtc190b3RhbCk7DQo+ICsgIGVsc2UNCj4g KyAgICB7DQo+ICsgICAgICB0ZXN0X2luZGV4ID0gZ2ltcGxlX2NvbnZlcnQg KCZ0ZXN0X3NlcSwgY29tcGFyZV90eXBlLCB0ZXN0X2luZGV4KTsNCj4gKyAg ICAgIGdzaV9pbnNlcnRfc2VxX2JlZm9yZSAodGVzdF9nc2ksIHRlc3Rfc2Vx LCBHU0lfU0FNRV9TVE1UKTsNCj4gKyAgICB9DQo+ICANCj4gICAgLyogUHJv dmlkZSBhIGRlZmluaXRpb24gb2YgZWFjaCBjb250cm9sIGluIHRoZSBncm91 cC4gICovDQo+ICAgIHRyZWUgbmV4dF9jdHJsID0gTlVMTF9UUkVFOw0KPiBA QCAtNTg3LDYgKzY0NSwxMDEgQEAgdmVjdF9zZXRfbG9vcF9jb250cm9sc19k aXJlY3RseSAoY2xhc3MgbG9vcCAqbG9vcCwgbG9vcF92ZWNfaW5mbyBsb29w X3ZpbmZvLA0KPiAgICBiaWFzX3RyZWUpOw0KPiAgfQ0KPiAgDQo+ICsgICAg ICBpZiAoTE9PUF9WSU5GT19VU0lOR19ERUNSRU1FTlRJTkdfSVZfUCAobG9v cF92aW5mbykpDQo+ICsgew0KPiArICAgLyogQ3JlYXRlIGRlY3JlbWVudCBJ VjoNCj4gKw0KPiArICAgICAgQ2FzZSAxIChzaW5nbGUgcmdyb3VwKToNCj4g KyAuLi4NCj4gKyBfMTAgPSAodW5zaWduZWQgbG9uZykgY291bnRfMTIoRCk7 DQo+ICsgLi4uDQo+ICsgIyBpdnRtcF85ID0gUEhJIDxpdnRtcF8zNSg2KSwg XzEwKDUpPg0KPiArIF8zNiA9IE1JTl9FWFBSIDxpdnRtcF85LCBQT0xZX0lO VF9DU1QgWzQsIDRdPjsNCj4gKyAuLi4NCj4gKyB2ZWN0X180LjhfMjggPSAu TEVOX0xPQUQgKF8xNywgMzJCLCBfMzYsIDApOw0KPiArIC4uLg0KPiArIGl2 dG1wXzM1ID0gaXZ0bXBfOSAtIF8zNjsNCj4gKyAuLi4NCj4gKyBpZiAoaXZ0 bXBfMzUgIT0gMCkNCj4gKyAgIGdvdG8gPGJiIDQ+OyBbODMuMzMlXQ0KPiAr IGVsc2UNCj4gKyAgIGdvdG8gPGJiIDU+OyBbMTYuNjclXQ0KPiArDQo+ICsg ICAgICBDYXNlIDIgKFNMUCBtdWx0aXBsZSByZ3JvdXApOg0KPiArIC4uLg0K PiArIF8zOCA9ICh1bnNpZ25lZCBsb25nKSBuXzEyKEQpOw0KPiArIF8zOSA9 IF8zOCAqIDI7DQo+ICsgXzQwID0gTUFYX0VYUFIgPF8zOSwgMTY+Ow0KPiAr IF80MSA9IF80MCArIDE4NDQ2NzQ0MDczNzA5NTUxNjAwOw0KIA0KRWFzaWVy IHRvIHJlYWQgYXM6DQogDQogIF80MSA9IF80MCAtIDE2DQogDQood2hpY2gg bWlnaHQgbm90IGJlIHZhbGlkIGdpbXBsZSwgYnV0IHBzZXVkb2NvZGUgaXMg Z29vZCBlbm91Z2gpLg0KIA0KPiArIC4uLg0KPiArICMgaXZ0bXBfNDIgPSBQ SEkgPGl2dG1wXzQzKDQpLCBfNDEoMyk+DQo+ICsgIyBpdnRtcF80NSA9IFBI SSA8aXZ0bXBfNDYoNCksIF8zOSgzKT4NCj4gKyAuLi4NCj4gKyBfNDQgPSBN SU5fRVhQUiA8aXZ0bXBfNDIsIDMyPjsNCj4gKyBfNDcgPSBNSU5fRVhQUiA8 aXZ0bXBfNDUsIDMyPjsNCj4gKyAuLi4NCj4gKyAuTEVOX1NUT1JFIChfNiwg OEIsIF80NywgLi4uKTsNCj4gKyAuLi4NCj4gKyAuTEVOX1NUT1JFIChfMjUs IDhCLCBfNDQsIC4uLik7DQo+ICsgXzMzID0gXzQ3IC8gMjsNCj4gKyAuLi4N Cj4gKyAuTEVOX1NUT1JFIChfOCwgMTZCLCBfMzMsIC4uLik7DQo+ICsgXzM2 ID0gXzQ0IC8gMjsNCj4gKyAuLi4NCj4gKyAuTEVOX1NUT1JFIChfMTUsIDE2 QiwgXzM2LCAuLi4pOw0KPiArIGl2dG1wXzQ2ID0gaXZ0bXBfNDUgLSBfNDc7 DQo+ICsgaXZ0bXBfNDMgPSBpdnRtcF80MiAtIF80NDsNCj4gKyAuLi4NCj4g KyBpZiAoaXZ0bXBfNDYgIT0gMCkNCj4gKyAgIGdvdG8gPGJiIDQ+OyBbODMu MzMlXQ0KPiArIGVsc2UNCj4gKyAgIGdvdG8gPGJiIDU+OyBbMTYuNjclXQ0K IA0KVGhlIGV4YW1wbGVzIGFyZSBnb29kLCBidXQgdGhpcyBvbmUgbWFkZSBt ZSB3b25kZXI6IHdoeSBpcyB0aGUNCmFkanVzdG1lbnQgbWFkZSB0byB0aGUg bGltaXQgKG5hbWVseSAxNiwgdGhlIGdhcCBiZXR3ZWVuIF8zOSBhbmQgXzQx KQ0KZGlmZmVyZW50IGZyb20gdGhlIGxpbWl0cyBpbXBvc2VkIGJ5IHRoZSBN SU5fRVhQUiAoMzIpPyAgQW5kIEkgdGhpbmsNCnRoZSBhbnN3ZXIgaXMgdGhh dDoNCiANCi0gXzQ3IGNvdW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHBy b2Nlc3NlZCBieSB0aGUgbG9vcCBpbiB0b3RhbCwNCiAgaW5jbHVkaW5nIHRo ZSB2ZWN0b3JzIHVuZGVyIHRoZSBjb250cm9sIG9mIF80NA0KIA0KLSBfNDQg Y291bnRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgY29udHJvbGxlZCBieSBf NDcgaW4gdGhlIG5leHQNCiAgaXRlcmF0aW9uIG9mIHRoZSB2ZWN0b3IgbG9v cCAoaWYgdGhlcmUgaXMgb25lKQ0KIA0KQW5kIHRoYXQncyBuZWVkZWQgdG8g YWxsb3cgdGhlIElWcyB0byBiZSB1cGRhdGVkIGluZGVwZW5kZW50bHkuDQog DQpUaGUgZGlmZmljdWx0eSB3aXRoIHRoaXMgaXMgdGhhdCB0aGUgbGVuX2xv YWQqIGFuZCBsZW5fc3RvcmUqDQpvcHRhYnMgY3VycmVudGx5IHNheSB0aGF0 IHRoZSBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkIGlmIHRoZQ0KbGVuZ3RoIGFy Z3VtZW50IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIGEgdmVjdG9y Lg0KU28gSSB0aGluayB1c2luZyB0aGVzZSB2YWx1ZXMgb2YgXzQ3IGFuZCBf NDQgaW4gdGhlIC5MRU5fU1RPUkVzDQppcyByZWx5aW5nIG9uIHVuZGVmaW5l ZCBiZWhhdmlvdXIuDQogDQpIYXZlbid0IGhhZCB0aW1lIHRvIHRoaW5rIGFi b3V0IHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhhdCB5ZXQsDQpidXQgd2FudGVk IHRvIHNlbmQgc29tZXRoaW5nIG91dCBzb29uZXIgcmF0aGVyIHRoYW4gbGF0 ZXIuDQogDQo+ICsNCj4gKyAgICAgIENhc2UgMyAobm9uLVNMUCBtdWx0aXBs ZSByZ3JvdXApOg0KPiArIC4uLg0KPiArIF8zOCA9ICh1bnNpZ25lZCBsb25n KSBuXzEyKEQpOw0KPiArIC4uLg0KPiArICMgaXZ0bXBfMzggPSBQSEkgPGl2 dG1wXzM5KDMpLCAxMDAoMik+DQo+ICsgLi4uDQo+ICsgXzQwID0gTUlOX0VY UFIgPGl2dG1wXzM4LCBQT0xZX0lOVF9DU1QgWzgsIDhdPjsNCj4gKyBsb29w X2xlbl8yMSA9IE1JTl9FWFBSIDxfNDAsIFBPTFlfSU5UX0NTVCBbMiwgMl0+ Ow0KPiArIF80MSA9IF80MCAtIGxvb3BfbGVuXzIxOw0KPiArIGxvb3BfbGVu XzIwID0gTUlOX0VYUFIgPF80MSwgUE9MWV9JTlRfQ1NUIFsyLCAyXT47DQo+ ICsgXzQyID0gXzQwIC0gbG9vcF9sZW5fMjA7DQo+ICsgbG9vcF9sZW5fMTkg PSBNSU5fRVhQUiA8XzQyLCBQT0xZX0lOVF9DU1QgWzIsIDJdPjsNCj4gKyBf NDMgPSBfNDAgLSBsb29wX2xlbl8xOTsNCj4gKyBsb29wX2xlbl8xNiA9IE1J Tl9FWFBSIDxfNDMsIFBPTFlfSU5UX0NTVCBbMiwgMl0+Ow0KPiArIC4uLg0K PiArIHZlY3RfXzQuOF8xNSA9IC5MRU5fTE9BRCAoXzYsIDY0QiwgbG9vcF9s ZW5fMjEsIDApOw0KPiArIC4uLg0KPiArIHZlY3RfXzQuOV84ID0gLkxFTl9M T0FEIChfMTMsIDY0QiwgbG9vcF9sZW5fMjAsIDApOw0KPiArIC4uLg0KPiAr IHZlY3RfXzQuMTBfMjggPSAuTEVOX0xPQUQgKF80NiwgNjRCLCBsb29wX2xl bl8xOSwgMCk7DQo+ICsgLi4uDQo+ICsgdmVjdF9fNC4xMV8zMCA9IC5MRU5f TE9BRCAoXzQ5LCA2NEIsIGxvb3BfbGVuXzE2LCAwKTsNCj4gKyB2ZWN0X183 LjEzXzMxID0gVkVDX1BBQ0tfVFJVTkNfRVhQUiA8dmVjdF9fNC44XzE1LCB2 ZWN0X180LjlfOD47DQo+ICsgdmVjdF9fNy4xM18zMiA9IFZFQ19QQUNLX1RS VU5DX0VYUFIgPHZlY3RfXzQuMTBfMjgsIHZlY3RfXzQuMTFfMzA+Ow0KPiAr IHZlY3RfXzcuMTJfMzMgPSBWRUNfUEFDS19UUlVOQ19FWFBSIDx2ZWN0X183 LjEzXzMxLCB2ZWN0X183LjEzXzMyPjsNCj4gKyAuLi4NCj4gKyAuTEVOX1NU T1JFIChfMTQsIDE2QiwgXzQwLCB2ZWN0X183LjEyXzMzLCAwKTsNCj4gKyBp dnRtcF8zOSA9IGl2dG1wXzM4IC0gXzQwOw0KPiArIC4uLg0KPiArIGlmIChp dnRtcF8zOSAhPSAwKQ0KPiArICAgZ290byA8YmIgMz47IFs5Mi4zMSVdDQo+ ICsgZWxzZQ0KPiArICAgZ290byA8YmIgND47IFs3LjY5JV0NCj4gKyAgICov DQo+ICsgICBjcmVhdGVfaXYgKHRoaXNfdGVzdF9saW1pdCwgTUlOVVNfRVhQ UiwgY3RybCwgTlVMTF9UUkVFLCBsb29wLA0KPiArICAgICAgJmluY3JfZ3Np LCBpbnNlcnRfYWZ0ZXIsICZpbmRleF9iZWZvcmVfaW5jciwNCj4gKyAgICAg ICZpbmRleF9hZnRlcl9pbmNyKTsNCj4gKyAgIHRyZWUgc3RlcCA9IGdpbXBs ZV9idWlsZCAoaGVhZGVyX3NlcSwgTUlOX0VYUFIsIGl2X3R5cGUsDQo+ICsg ICAgIGluZGV4X2JlZm9yZV9pbmNyLCBuaXRlbXNfc3RlcCk7DQo+ICsgICBn YXNzaWduICphc3NpZ24gPSBnaW1wbGVfYnVpbGRfYXNzaWduIChjdHJsLCBz dGVwKTsNCj4gKyAgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKGhlYWRlcl9zZXEs IGFzc2lnbik7DQo+ICsgICBuZXh0X2N0cmwgPSBpbmRleF9hZnRlcl9pbmNy Ow0KPiArICAgY29udGludWU7DQo+ICsgfQ0KPiArDQo+ICAgICAgICAvKiBD cmVhdGUgdGhlIGluaXRpYWwgY29udHJvbC4gIEZpcnN0IGluY2x1ZGUgYWxs IGl0ZW1zIHRoYXQNCj4gIGFyZSB3aXRoaW4gdGhlIGxvb3AgbGltaXQuICAq Lw0KPiAgICAgICAgdHJlZSBpbml0X2N0cmwgPSBOVUxMX1RSRUU7DQo+IEBA IC03MDQsNiArODU3LDcgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFy dGlhbF92ZWN0b3JzIChjbGFzcyBsb29wICpsb29wLA0KPiAgDQo+ICAgIGJv b2wgdXNlX21hc2tzX3AgPSBMT09QX1ZJTkZPX0ZVTExZX01BU0tFRF9QIChs b29wX3ZpbmZvKTsNCj4gICAgdHJlZSBjb21wYXJlX3R5cGUgPSBMT09QX1ZJ TkZPX1JHUk9VUF9DT01QQVJFX1RZUEUgKGxvb3BfdmluZm8pOw0KPiArICB0 cmVlIGl2X3R5cGUgPSBMT09QX1ZJTkZPX1JHUk9VUF9JVl9UWVBFIChsb29w X3ZpbmZvKTsNCj4gICAgdW5zaWduZWQgaW50IGNvbXBhcmVfcHJlY2lzaW9u ID0gVFlQRV9QUkVDSVNJT04gKGNvbXBhcmVfdHlwZSk7DQo+ICAgIHRyZWUg b3JpZ19uaXRlcnMgPSBuaXRlcnM7DQo+ICANCj4gQEAgLTc1Myw2ICs5MDcs MTkgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFydGlhbF92ZWN0b3Jz IChjbGFzcyBsb29wICpsb29wLA0KPiAgICAgICAgY29udGludWU7DQo+ICAg IH0NCj4gIA0KPiArIGlmIChMT09QX1ZJTkZPX1VTSU5HX0RFQ1JFTUVOVElO R19JVl9QIChsb29wX3ZpbmZvKQ0KPiArICAgICAmJiByZ2MtPm1heF9uc2Nh bGFyc19wZXJfaXRlciA9PSAxDQo+ICsgICAgICYmIHJnYyAhPSAmTE9PUF9W SU5GT19MRU5TIChsb29wX3ZpbmZvKVswXSkNCj4gKyAgIHsNCj4gKyAgICAg cmdyb3VwX2NvbnRyb2xzICpzdWJfcmdjDQo+ICsgICAgICAgPSAmKCpjb250 cm9scylbbm1hc2tzIC8gcmdjLT5jb250cm9scy5sZW5ndGggKCkgLSAxXTsN Cj4gKyAgICAgaWYgKCFzdWJfcmdjLT5jb250cm9scy5pc19lbXB0eSAoKSkN Cj4gKyAgICAgICB7DQo+ICsgdmVjdF9hZGp1c3RfbG9vcF9sZW5zIChpdl90 eXBlLCAmaGVhZGVyX3NlcSwgcmdjLCBzdWJfcmdjKTsNCj4gKyBjb250aW51 ZTsNCj4gKyAgICAgICB9DQo+ICsgICB9DQo+ICsNCj4gIC8qIFNlZSB3aGV0 aGVyIHplcm8tYmFzZWQgSVYgd291bGQgZXZlciBnZW5lcmF0ZSBhbGwtZmFs c2UgbWFza3MNCj4gICAgIG9yIHplcm8gbGVuZ3RoIGJlZm9yZSB3cmFwcGlu ZyBhcm91bmQuICAqLw0KPiAgYm9vbCBtaWdodF93cmFwX3AgPSB2ZWN0X3Jn cm91cF9pdl9taWdodF93cmFwX3AgKGxvb3BfdmluZm8sIHJnYyk7DQo+IGRp ZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LWxvb3AuY2MgYi9nY2MvdHJlZS12 ZWN0LWxvb3AuY2MNCj4gaW5kZXggZWQwMTY2ZmVkYWIuLjQ0YzA4MjlhODIz IDEwMDY0NA0KPiAtLS0gYS9nY2MvdHJlZS12ZWN0LWxvb3AuY2MNCj4gKysr IGIvZ2NjL3RyZWUtdmVjdC1sb29wLmNjDQo+IEBAIC05NzMsNiArOTczLDcg QEAgX2xvb3BfdmVjX2luZm86Ol9sb29wX3ZlY19pbmZvIChjbGFzcyBsb29w ICpsb29wX2luLCB2ZWNfaW5mb19zaGFyZWQgKnNoYXJlZCkNCj4gICAgICB2 ZWN0b3JpemFibGUgKGZhbHNlKSwNCj4gICAgICBjYW5fdXNlX3BhcnRpYWxf dmVjdG9yc19wIChwYXJhbV92ZWN0X3BhcnRpYWxfdmVjdG9yX3VzYWdlICE9 IDApLA0KPiAgICAgIHVzaW5nX3BhcnRpYWxfdmVjdG9yc19wIChmYWxzZSks DQo+ICsgICAgdXNpbmdfZGVjcmVtZW50aW5nX2l2X3AgKGZhbHNlKSwNCj4g ICAgICBlcGlsX3VzaW5nX3BhcnRpYWxfdmVjdG9yc19wIChmYWxzZSksDQo+ ICAgICAgcGFydGlhbF9sb2FkX3N0b3JlX2JpYXMgKDApLA0KPiAgICAgIHBl ZWxpbmdfZm9yX2dhcHMgKGZhbHNlKSwNCj4gQEAgLTI3MjUsNiArMjcyNiwx NyBAQCBzdGFydF9vdmVyOg0KPiAgICAgICAgJiYgIXZlY3RfdmVyaWZ5X2xv b3BfbGVucyAobG9vcF92aW5mbykpDQo+ICAgICAgTE9PUF9WSU5GT19DQU5f VVNFX1BBUlRJQUxfVkVDVE9SU19QIChsb29wX3ZpbmZvKSA9IGZhbHNlOw0K PiAgDQo+ICsgIC8qIElmIHdlJ3JlIHZlY3Rvcml6aW5nIGFuIGxvb3AgdGhh dCB1c2VzIGxlbmd0aCAiY29udHJvbHMiIGFuZA0KPiArICAgICBjYW4gaXRl cmF0ZSBtb3JlIHRoYW4gb25jZSwgd2UgYXBwbHkgZGVjcmVtZW50aW5nIElW IGFwcHJvYWNoDQo+ICsgICAgIGluIGxvb3AgY29udHJvbC4gICovDQo+ICsg IGlmIChMT09QX1ZJTkZPX0NBTl9VU0VfUEFSVElBTF9WRUNUT1JTX1AgKGxv b3BfdmluZm8pDQo+ICsgICAgICAmJiAhTE9PUF9WSU5GT19MRU5TIChsb29w X3ZpbmZvKS5pc19lbXB0eSAoKQ0KPiArICAgICAgJiYgIShMT09QX1ZJTkZP X05JVEVSU19LTk9XTl9QIChsb29wX3ZpbmZvKQ0KPiArICAgICYmIExPT1Bf VklORk9fVkVDVF9GQUNUT1IgKGxvb3BfdmluZm8pLmlzX2NvbnN0YW50ICgp DQo+ICsgICAgJiYgTE9PUF9WSU5GT19JTlRfTklURVJTIChsb29wX3ZpbmZv KQ0KPiArIDw9IExPT1BfVklORk9fVkVDVF9GQUNUT1IgKGxvb3BfdmluZm8p LmlzX2NvbnN0YW50ICgpKSkNCiANCkl0IHdvdWxkIGJlIGJldHRlciB0byB1 c2Uga25vd25fbGUgaGVyZSwgd2l0aG91dCBjaGVja2luZyB3aGV0aGVyIHRo ZQ0KVkYgaXMgY29uc3RhbnQuDQogDQpUaGFua3MsDQpSaWNoYXJkDQogDQo+ ICsgICAgTE9PUF9WSU5GT19VU0lOR19ERUNSRU1FTlRJTkdfSVZfUCAobG9v cF92aW5mbykgPSB0cnVlOw0KPiArDQo+ICAgIC8qIElmIHdlJ3JlIHZlY3Rv cml6aW5nIGFuIGVwaWxvZ3VlIGxvb3AsIHRoZSB2ZWN0b3JpemVkIGxvb3Ag ZWl0aGVyIG5lZWRzDQo+ICAgICAgIHRvIGJlIGFibGUgdG8gaGFuZGxlIGZl d2VyIHRoYW4gVkYgc2NhbGFycywgb3IgbmVlZHMgdG8gaGF2ZSBhIGxvd2Vy IFZGDQo+ICAgICAgIHRoYW4gdGhlIG1haW4gbG9vcC4gICovDQo+IEBAIC0x MDM2NCwxMiArMTAzNzYsMTQgQEAgdmVjdF9yZWNvcmRfbG9vcF9sZW4gKGxv b3BfdmVjX2luZm8gbG9vcF92aW5mbywgdmVjX2xvb3BfbGVucyAqbGVucywN Cj4gICAgIHJncm91cCB0aGF0IG9wZXJhdGVzIG9uIE5WRUNUT1JTIHZlY3Rv cnMsIHdoZXJlIDAgPD0gSU5ERVggPCBOVkVDVE9SUy4gICovDQo+ICANCj4g IHRyZWUNCj4gLXZlY3RfZ2V0X2xvb3BfbGVuIChsb29wX3ZlY19pbmZvIGxv b3BfdmluZm8sIHZlY19sb29wX2xlbnMgKmxlbnMsDQo+IC0gICAgdW5zaWdu ZWQgaW50IG52ZWN0b3JzLCB1bnNpZ25lZCBpbnQgaW5kZXgpDQo+ICt2ZWN0 X2dldF9sb29wX2xlbiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBnaW1w bGVfc3RtdF9pdGVyYXRvciAqZ3NpLA0KPiArICAgIHZlY19sb29wX2xlbnMg KmxlbnMsIHVuc2lnbmVkIGludCBudmVjdG9ycywgdHJlZSB2ZWN0eXBlLA0K PiArICAgIHVuc2lnbmVkIGludCBpbmRleCkNCj4gIHsNCj4gICAgcmdyb3Vw X2NvbnRyb2xzICpyZ2wgPSAmKCpsZW5zKVtudmVjdG9ycyAtIDFdOw0KPiAg ICBib29sIHVzZV9iaWFzX2FkanVzdGVkX2xlbiA9DQo+ICAgICAgTE9PUF9W SU5GT19QQVJUSUFMX0xPQURfU1RPUkVfQklBUyAobG9vcF92aW5mbykgIT0g MDsNCj4gKyAgdHJlZSBpdl90eXBlID0gTE9PUF9WSU5GT19SR1JPVVBfSVZf VFlQRSAobG9vcF92aW5mbyk7DQo+ICANCj4gICAgLyogUG9wdWxhdGUgdGhl IHJncm91cCdzIGxlbiBhcnJheSwgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGlt ZSB3ZSd2ZQ0KPiAgICAgICB1c2VkIGl0LiAgKi8NCj4gQEAgLTEwNDAwLDYg KzEwNDE0LDI2IEBAIHZlY3RfZ2V0X2xvb3BfbGVuIChsb29wX3ZlY19pbmZv IGxvb3BfdmluZm8sIHZlY19sb29wX2xlbnMgKmxlbnMsDQo+ICANCj4gICAg aWYgKHVzZV9iaWFzX2FkanVzdGVkX2xlbikNCj4gICAgICByZXR1cm4gcmds LT5iaWFzX2FkanVzdGVkX2N0cmw7DQo+ICsgIGVsc2UgaWYgKExPT1BfVklO Rk9fVVNJTkdfREVDUkVNRU5USU5HX0lWX1AgKGxvb3BfdmluZm8pKQ0KPiAr ICAgIHsNCj4gKyAgICAgIHRyZWUgbG9vcF9sZW4gPSByZ2wtPmNvbnRyb2xz W2luZGV4XTsNCj4gKyAgICAgIHBvbHlfaW50NjQgbnVuaXRzMSA9IFRZUEVf VkVDVE9SX1NVQlBBUlRTIChyZ2wtPnR5cGUpOw0KPiArICAgICAgcG9seV9p bnQ2NCBudW5pdHMyID0gVFlQRV9WRUNUT1JfU1VCUEFSVFMgKHZlY3R5cGUp Ow0KPiArICAgICAgaWYgKG1heWJlX25lIChudW5pdHMxLCBudW5pdHMyKSkN Cj4gKyB7DQo+ICsgICAvKiBBIGxvb3AgbGVuIGZvciBkYXRhIHR5cGUgWCBj YW4gYmUgcmV1c2VkIGZvciBkYXRhIHR5cGUgWQ0KPiArICAgICAgaWYgWCBo YXMgTiB0aW1lcyBtb3JlIGVsZW1lbnRzIHRoYW4gWSBhbmQgaWYgWSdzIGVs ZW1lbnRzDQo+ICsgICAgICBhcmUgTiB0aW1lcyBiaWdnZXIgdGhhbiBYJ3Mu ICAqLw0KPiArICAgZ2NjX2Fzc2VydCAobXVsdGlwbGVfcCAobnVuaXRzMSwg bnVuaXRzMikpOw0KPiArICAgdW5zaWduZWQgaW50IGZhY3RvciA9IGV4YWN0 X2RpdiAobnVuaXRzMSwgbnVuaXRzMikudG9fY29uc3RhbnQgKCk7DQo+ICsg ICBnaW1wbGVfc2VxIHNlcSA9IE5VTEw7DQo+ICsgICBsb29wX2xlbiA9IGdp bXBsZV9idWlsZCAoJnNlcSwgUkRJVl9FWFBSLCBpdl90eXBlLCBsb29wX2xl biwNCj4gKyAgICBidWlsZF9pbnRfY3N0IChpdl90eXBlLCBmYWN0b3IpKTsN Cj4gKyAgIGlmIChzZXEpDQo+ICsgICAgIGdzaV9pbnNlcnRfc2VxX2JlZm9y ZSAoZ3NpLCBzZXEsIEdTSV9TQU1FX1NUTVQpOw0KPiArIH0NCj4gKyAgICAg IHJldHVybiBsb29wX2xlbjsNCj4gKyAgICB9DQo+ICAgIGVsc2UNCj4gICAg ICByZXR1cm4gcmdsLT5jb250cm9sc1tpbmRleF07DQo+ICB9DQo+IGRpZmYg LS1naXQgYS9nY2MvdHJlZS12ZWN0LXN0bXRzLmNjIGIvZ2NjL3RyZWUtdmVj dC1zdG10cy5jYw0KPiBpbmRleCA3MzEzMTkxYjBkYi4uYjVlNGJjNTkzNTUg MTAwNjQ0DQo+IC0tLSBhL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MNCj4gKysr IGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYw0KPiBAQCAtODc5NSw4ICs4Nzk1 LDkgQEAgdmVjdG9yaXphYmxlX3N0b3JlICh2ZWNfaW5mbyAqdmluZm8sDQo+ ICAgICAgICBlbHNlIGlmIChsb29wX2xlbnMpDQo+ICB7DQo+ICAgIHRyZWUg ZmluYWxfbGVuDQo+IC0gICAgID0gdmVjdF9nZXRfbG9vcF9sZW4gKGxvb3Bf dmluZm8sIGxvb3BfbGVucywNCj4gLSB2ZWNfbnVtICogbmNvcGllcywgdmVj X251bSAqIGogKyBpKTsNCj4gKyAgICAgPSB2ZWN0X2dldF9sb29wX2xlbiAo bG9vcF92aW5mbywgZ3NpLCBsb29wX2xlbnMsDQo+ICsgdmVjX251bSAqIG5j b3BpZXMsIHZlY3R5cGUsDQo+ICsgdmVjX251bSAqIGogKyBpKTsNCj4gICAg dHJlZSBwdHIgPSBidWlsZF9pbnRfY3N0IChyZWZfdHlwZSwgYWxpZ24gKiBC SVRTX1BFUl9VTklUKTsNCj4gICAgbWFjaGluZV9tb2RlIHZtb2RlID0gVFlQ RV9NT0RFICh2ZWN0eXBlKTsNCj4gICAgb3B0X21hY2hpbmVfbW9kZSBuZXdf b3Ztb2RlDQo+IEBAIC0xMDE1MSw4ICsxMDE1Miw4IEBAIHZlY3Rvcml6YWJs ZV9sb2FkICh2ZWNfaW5mbyAqdmluZm8sDQo+ICAgICAgZWxzZSBpZiAobG9v cF9sZW5zICYmIG1lbW9yeV9hY2Nlc3NfdHlwZSAhPSBWTUFUX0lOVkFSSUFO VCkNCj4gICAgICAgIHsNCj4gIHRyZWUgZmluYWxfbGVuDQo+IC0gICA9IHZl Y3RfZ2V0X2xvb3BfbGVuIChsb29wX3ZpbmZvLCBsb29wX2xlbnMsDQo+IC0g ICAgICAgIHZlY19udW0gKiBuY29waWVzLA0KPiArICAgPSB2ZWN0X2dldF9s b29wX2xlbiAobG9vcF92aW5mbywgZ3NpLCBsb29wX2xlbnMsDQo+ICsgICAg ICAgIHZlY19udW0gKiBuY29waWVzLCB2ZWN0eXBlLA0KPiAgICAgICAgIHZl Y19udW0gKiBqICsgaSk7DQo+ICB0cmVlIHB0ciA9IGJ1aWxkX2ludF9jc3Qg KHJlZl90eXBlLA0KPiAgICBhbGlnbiAqIEJJVFNfUEVSX1VOSVQpOw0KPiBk aWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdG9yaXplci5oIGIvZ2NjL3RyZWUt dmVjdG9yaXplci5oDQo+IGluZGV4IDljZjJmYjIzZmUzLi44YWYzYjM1MzI0 ZSAxMDA2NDQNCj4gLS0tIGEvZ2NjL3RyZWUtdmVjdG9yaXplci5oDQo+ICsr KyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuaA0KPiBAQCAtODE4LDYgKzgxOCwx MyBAQCBwdWJsaWM6DQo+ICAgICAgIHRoZSB2ZWN0b3IgbG9vcCBjYW4gaGFu ZGxlIGZld2VyIHRoYW4gVkYgc2NhbGFycy4gICovDQo+ICAgIGJvb2wgdXNp bmdfcGFydGlhbF92ZWN0b3JzX3A7DQo+ICANCj4gKyAgLyogVHJ1ZSBpZiB3 ZSd2ZSBkZWNpZGVkIHRvIHVzZSBhIGRlY3JlbWVudGluZyBsb29wIGNvbnRy b2wgSVYgdGhhdCBjb3VudHMNCj4gKyAgICAgc2NhbGFycy4gVGhpcyBjYW4g YmUgZG9uZSBmb3IgYW55IGxvb3AgdGhhdDoNCj4gKw0KPiArIChhKSB1c2Vz IGxlbmd0aCAiY29udHJvbHMiOyBhbmQNCj4gKyAoYikgY2FuIGl0ZXJhdGUg bW9yZSB0aGFuIG9uY2UuICAqLw0KPiArICBib29sIHVzaW5nX2RlY3JlbWVu dGluZ19pdl9wOw0KPiArDQo+ICAgIC8qIFRydWUgaWYgd2UndmUgZGVjaWRl ZCB0byB1c2UgcGFydGlhbGx5LXBvcHVsYXRlZCB2ZWN0b3JzIGZvciB0aGUN Cj4gICAgICAgZXBpbG9ndWUgb2YgbG9vcC4gICovDQo+ICAgIGJvb2wgZXBp bF91c2luZ19wYXJ0aWFsX3ZlY3RvcnNfcDsNCj4gQEAgLTg5MCw2ICs4OTcs NyBAQCBwdWJsaWM6DQo+ICAjZGVmaW5lIExPT1BfVklORk9fVkVDVE9SSVpB QkxFX1AoTCkgICAgICAgKEwpLT52ZWN0b3JpemFibGUNCj4gICNkZWZpbmUg TE9PUF9WSU5GT19DQU5fVVNFX1BBUlRJQUxfVkVDVE9SU19QKEwpIChMKS0+ Y2FuX3VzZV9wYXJ0aWFsX3ZlY3RvcnNfcA0KPiAgI2RlZmluZSBMT09QX1ZJ TkZPX1VTSU5HX1BBUlRJQUxfVkVDVE9SU19QKEwpIChMKS0+dXNpbmdfcGFy dGlhbF92ZWN0b3JzX3ANCj4gKyNkZWZpbmUgTE9PUF9WSU5GT19VU0lOR19E RUNSRU1FTlRJTkdfSVZfUChMKSAoTCktPnVzaW5nX2RlY3JlbWVudGluZ19p dl9wDQo+ICAjZGVmaW5lIExPT1BfVklORk9fRVBJTF9VU0lOR19QQVJUSUFM X1ZFQ1RPUlNfUChMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K PiAgICAoTCktPmVwaWxfdXNpbmdfcGFydGlhbF92ZWN0b3JzX3ANCj4gICNk ZWZpbmUgTE9PUF9WSU5GT19QQVJUSUFMX0xPQURfU1RPUkVfQklBUyhMKSAo TCktPnBhcnRpYWxfbG9hZF9zdG9yZV9iaWFzDQo+IEBAIC0yMjkzLDggKzIz MDEsOSBAQCBleHRlcm4gdHJlZSB2ZWN0X2dldF9sb29wX21hc2sgKGdpbXBs ZV9zdG10X2l0ZXJhdG9yICosIHZlY19sb29wX21hc2tzICosDQo+ICB1bnNp Z25lZCBpbnQsIHRyZWUsIHVuc2lnbmVkIGludCk7DQo+ICBleHRlcm4gdm9p ZCB2ZWN0X3JlY29yZF9sb29wX2xlbiAobG9vcF92ZWNfaW5mbywgdmVjX2xv b3BfbGVucyAqLCB1bnNpZ25lZCBpbnQsDQo+ICAgIHRyZWUsIHVuc2lnbmVk IGludCk7DQo+IC1leHRlcm4gdHJlZSB2ZWN0X2dldF9sb29wX2xlbiAobG9v cF92ZWNfaW5mbywgdmVjX2xvb3BfbGVucyAqLCB1bnNpZ25lZCBpbnQsDQo+ IC0gICAgICAgIHVuc2lnbmVkIGludCk7DQo+ICtleHRlcm4gdHJlZSB2ZWN0 X2dldF9sb29wX2xlbiAobG9vcF92ZWNfaW5mbywgZ2ltcGxlX3N0bXRfaXRl cmF0b3IgKiwNCj4gKyAgICAgICAgdmVjX2xvb3BfbGVucyAqLCB1bnNpZ25l ZCBpbnQsIHRyZWUsDQo+ICsgICAgICAgIHVuc2lnbmVkIGludCk7DQo+ICBl eHRlcm4gZ2ltcGxlX3NlcSB2ZWN0X2dlbl9sZW4gKHRyZWUsIHRyZWUsIHRy ZWUsIHRyZWUpOw0KPiAgZXh0ZXJuIHN0bXRfdmVjX2luZm8gaW5mb19mb3Jf cmVkdWN0aW9uICh2ZWNfaW5mbyAqLCBzdG10X3ZlY19pbmZvKTsNCj4gIGV4 dGVybiBib29sIHJlZHVjdGlvbl9mbl9mb3Jfc2NhbGFyX2NvZGUgKGNvZGVf aGVscGVyLCBpbnRlcm5hbF9mbiAqKTsNCiANCg== ------=_001_NextPart006600541431_=------