From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C673DA04FD; Fri, 29 Jul 2022 13:50:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AAA954069C; Fri, 29 Jul 2022 13:50:22 +0200 (CEST) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id E4E4540151 for ; Fri, 29 Jul 2022 13:50:20 +0200 (CEST) Received: from fraeml707-chm.china.huawei.com (unknown [172.18.147.226]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4LvQkc1tD1z6855h; Fri, 29 Jul 2022 19:48:08 +0800 (CST) Received: from fraeml712-chm.china.huawei.com (10.206.15.61) by fraeml707-chm.china.huawei.com (10.206.15.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 29 Jul 2022 13:50:18 +0200 Received: from fraeml712-chm.china.huawei.com ([10.206.15.61]) by fraeml712-chm.china.huawei.com ([10.206.15.61]) with mapi id 15.01.2375.024; Fri, 29 Jul 2022 13:50:18 +0200 From: Konstantin Ananyev To: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= , "Konstantin Ananyev" , "dev@dpdk.org" , Bruce Richardson CC: Jan Viktorin , Ruifeng Wang , David Christensen , "Stanislaw Kardach" Subject: RE: [RFC v2] non-temporal memcpy Thread-Topic: [RFC v2] non-temporal memcpy Thread-Index: AdifYjmzwv8JvkFhT0yj+PrUQl+y2QAQTHNwAN90EwAAAaH6gAAF35ig Date: Fri, 29 Jul 2022 11:50:18 +0000 Message-ID: <24a6aafd01534dc0b75105f1356de574@huawei.com> References: <98CBD80474FA8B44BF855DF32C47DC35D871D4@smartserver.smartshare.dk> <98CBD80474FA8B44BF855DF32C47DC35D871DB@smartserver.smartshare.dk> <262c214b-7870-a221-2621-6684dce42823@yandex.ru> <98CBD80474FA8B44BF855DF32C47DC35D871E6@smartserver.smartshare.dk> <2c646d01-14d0-e5cb-2d7c-50c8456fc3e5@yandex.ru> <98CBD80474FA8B44BF855DF32C47DC35D8720C@smartserver.smartshare.dk> In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35D8720C@smartserver.smartshare.dk> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.126.174.150] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org DQo+ID4gRnJvbTogS29uc3RhbnRpbiBBbmFueWV2IFttYWlsdG86a29uc3RhbnRpbi52LmFuYW55 ZXZAeWFuZGV4LnJ1XQ0KPiA+IFNlbnQ6IEZyaWRheSwgMjkgSnVseSAyMDIyIDEyLjAwDQo+ID4N Cj4gPiAyNC8wNy8yMDIyIDIzOjE4LCBNb3J0ZW4gQnLDuHJ1cCDQv9C40YjQtdGCOg0KPiA+ID4+ IEZyb206IEtvbnN0YW50aW4gQW5hbnlldiBbbWFpbHRvOmtvbnN0YW50aW4udi5hbmFueWV2QHlh bmRleC5ydV0NCj4gPiA+PiBTZW50OiBTdW5kYXksIDI0IEp1bHkgMjAyMiAxNS4zNQ0KPiA+ID4+ DQo+ID4gPj4gMjIvMDcvMjAyMiAxMTo0NCwgTW9ydGVuIEJyw7hydXAg0L/QuNGI0LXRgjoNCj4g PiA+Pj4+IEZyb206IEtvbnN0YW50aW4gQW5hbnlldiBbbWFpbHRvOmtvbnN0YW50aW4udi5hbmFu eWV2QHlhbmRleC5ydV0NCj4gPiA+Pj4+IFNlbnQ6IEZyaWRheSwgMjIgSnVseSAyMDIyIDAxLjIw DQo+ID4gPj4+Pg0KPiA+ID4+Pj4gSGkgTW9ydGVuLA0KPiA+ID4+Pj4NCj4gPiA+Pj4+PiBUaGlz IFJGQyBwcm9wb3NlcyBhIHNldCBvZiBmdW5jdGlvbnMgb3B0aW1pemVkIGZvciBub24tdGVtcG9y YWwNCj4gPiA+Pj4+IG1lbW9yeSBjb3B5Lg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gQXQgdGhpcyBz dGFnZSwgSSBhbSBhc2tpbmcgZm9yIGZlZWRiYWNrIG9uIHRoZSBjb25jZXB0Lg0KPiA+ID4+Pj4+ DQo+ID4gPj4+Pj4gQXBwbGljYXRpb25zIHNvbWV0aW1lcyBkYXRhIHRvIGFub3RoZXIgbWVtb3J5 IGxvY2F0aW9uLCB3aGljaCBpcw0KPiA+ID4+IG9ubHkNCj4gPiA+Pj4+IHVzZWQNCj4gPiA+Pj4+ PiBtdWNoIGxhdGVyLg0KPiA+ID4+Pj4+IEluIHRoaXMgY2FzZSwgaXQgaXMgaW5lZmZpY2llbnQg dG8gcG9sbHV0ZSB0aGUgZGF0YSBjYWNoZSB3aXRoDQo+ID4gdGhlDQo+ID4gPj4+PiBjb3BpZWQN Cj4gPiA+Pj4+PiBkYXRhLg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gQW4gZXhhbXBsZSB1c2UgY2Fz ZSAob3JpZ2luYXRpbmcgZnJvbSBhIHJlYWwgbGlmZSBhcHBsaWNhdGlvbik6DQo+ID4gPj4+Pj4g Q29weWluZyBmaWx0ZXJlZCBwYWNrZXRzLCBvciB0aGUgZmlyc3QgcGFydCBvZiB0aGVtLCBpbnRv IGENCj4gPiBjYXB0dXJlDQo+ID4gPj4+PiBidWZmZXINCj4gPiA+Pj4+PiBmb3Igb2ZmbGluZSBh bmFseXNpcy4NCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IFRoZSBwdXJwb3NlIG9mIHRoZXNlIGZ1bmN0 aW9ucyBpcyB0byBhY2hpZXZlIGEgcGVyZm9ybWFuY2UgZ2Fpbg0KPiA+IGJ5DQo+ID4gPj4+PiBu b3QNCj4gPiA+Pj4+PiBwb2xsdXRpbmcgdGhlIGNhY2hlIHdoZW4gY29weWluZyBkYXRhLg0KPiA+ ID4+Pj4+IEFsdGhvdWdoIHRoZSB0aHJvdWdocHV0IG1heSBiZSBpbXByb3ZlZCBieSBmdXJ0aGVy IG9wdGltaXphdGlvbiwNCj4gPiBJDQo+ID4gPj4gZG8NCj4gPiA+Pj4+IG5vdA0KPiA+ID4+Pj4+ IGNvbnNpZGVyIHRocm91Z3B1dCBvcHRpbWl6YXRpb24gcmVsZXZhbnQgaW5pdGlhbGx5Lg0KPiA+ ID4+Pj4+DQo+ID4gPj4+Pj4gVGhlIHg4NiBub24tdGVtcG9yYWwgbG9hZCBpbnN0cnVjdGlvbnMg aGF2ZSAxNiBieXRlIGFsaWdubWVudA0KPiA+ID4+Pj4+IHJlcXVpcmVtZW50cyBbMV0sIHdoaWxl IEFSTSBub24tdGVtcG9yYWwgbG9hZCBpbnN0cnVjdGlvbnMgYXJlDQo+ID4gPj4+PiBhdmFpbGFi bGUgd2l0aA0KPiA+ID4+Pj4+IDQgYnl0ZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIFsyXS4NCj4g PiA+Pj4+PiBCb3RoIHBsYXRmb3JtcyBvZmZlciBub24tdGVtcG9yYWwgc3RvcmUgaW5zdHJ1Y3Rp b25zIHdpdGggNCBieXRlDQo+ID4gPj4+PiBhbGlnbm1lbnQNCj4gPiA+Pj4+PiByZXF1aXJlbWVu dHMuDQo+ID4gPj4+Pj4NCj4gPiA+Pj4+PiBJbiBhZGRpdGlvbiB0byB0aGUgcHJpbWFyeSBmdW5j dGlvbiB3aXRob3V0IGFueSBhbGlnbm1lbnQNCj4gPiA+Pj4+IHJlcXVpcmVtZW50cywgd2UNCj4g PiA+Pj4+PiBhbHNvIHByb3ZpZGUgZnVuY3Rpb25zIGZvciByZXNwZWN0aXZseSAxNiBhbmQgNCBi eXRlIGFsaWduZWQNCj4gPiBhY2Nlc3MNCj4gPiA+Pj4+IGZvcg0KPiA+ID4+Pj4+IHBlcmZvcm1h bmNlIHB1cnBvc2VzLg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gVGhlIGZ1bmN0aW9uIG5hbWVzIHJl c2VtYmxlIHN0YW5kYXJkIEMgbGlicmFyeSBmdW5jdGlvbiBuYW1lcywNCj4gPiBidXQNCj4gPiA+ Pj4+IHRoZWlyDQo+ID4gPj4+Pj4gc2lnbmF0dXJlcyBhcmUgaW50ZW50aW9uYWxseSBkaWZmZXJl bnQuIE5vIG5lZWQgdG8gZHJhZyBsZWdhY3kNCj4gPiBpbnRvDQo+ID4gPj4+PiBpdC4NCj4gPiA+ Pj4+Pg0KPiA+ID4+Pj4+IE5COiBEb24ndCBjb21tZW50IG9uIHNwYWNlcyBmb3IgaW5kZW50YXRp b247IGEgcGF0Y2ggd2lsbCBmb2xsb3cNCj4gPiA+PiBEUERLDQo+ID4gPj4+PiBjb2RpbmcNCj4g PiA+Pj4+PiBzdHlsZSBhbmQgdXNlIFRBQi4NCj4gPiA+Pj4+DQo+ID4gPj4+Pg0KPiA+ID4+Pj4g SSB0aGluayB0aGVyZSB3ZXJlIGRpc2N1c3Npb25zIGluIG90aGVyIGRpcmVjdGlvbiAtIHJlbW92 ZQ0KPiA+ID4+IHJ0ZV9tZW1jcHkoKQ0KPiA+ID4+Pj4gY29tcGxldGVseSBhbmQgdXNlIG1lbWNw eSgpIGluc3RlYWQuLi4NCj4gPiA+Pj4NCj4gPiA+Pj4gWWVzLCB0aGUgaGlnaGx5IG9wdGltaXpl ZCBydGVfbWVtY3B5KCkgaW1wbGVtZW50YXRpb24gb2YgbWVtY3B5KCkNCj4gPiBoYXMNCj4gPiA+ PiBiZWNvbWUgb2Jzb2xldGUsIG5vdyB0aGF0IG1vZGVybiBjb21waWxlcnMgcHJvdmlkZSBhbiBl ZmZpY2llbnQNCj4gPiA+PiBtZW1jcHkoKSBpbXBsZW1lbnRhdGlvbi4NCj4gPiA+Pj4NCj4gPiA+ Pj4gSXQncyBhbiBleGNlbGxlbnQgcmVmZXJlbmNlLCBiZWNhdXNlIHdlIHNob3VsZCBsZWFybiBm cm9tIGl0LCBhbmQNCj4gPiA+PiBhdm9pZCBpbnRyb2R1Y2luZyBzaW1pbGFyIG1pc3Rha2VzIHdp dGggbm9uLXRlbXBvcmFsIG1lbWNweS4NCj4gPiA+Pj4NCj4gPiA+Pj4+IEJ1dCBpZiB3ZSBoYXZl IGEgZ29vZCB1c2UgY2FzZSBmb3IgdGhhdCwgdGhlbiBJIGFtIHBvc2l0aXZlIGluDQo+ID4gPj4+ PiBwcmluY2lwbGUuDQo+ID4gPj4+DQo+ID4gPj4+IFRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgZG9l c24ndCBvZmZlciBub24tdGVtcG9yYWwgbWVtY3B5KCksIHNvIHdlDQo+ID4gPj4gbmVlZCB0byBp bXBsZW1lbnQgaXQgb3Vyc2VsdmVzLg0KPiA+ID4+Pg0KPiA+ID4+Pj4gVGhvdWdoIEkgdGhpbmsg d2UgbmVlZCBhIGNsZWFyIHVzZS1jYXNlIHdpdGhpbiBkcGRrIGZvciBpdA0KPiA+ID4+Pj4gdG8g ZGVtb25zdHJhdGUgcGVyZm9tYW5jZSBnYWluLg0KPiA+ID4+Pg0KPiA+ID4+PiBUaGUgcGVyZm9y bWFuY2UgZ2FpbiBpcyB0byBhdm9pZCBwb2xsdXRpbmcgdGhlIGRhdGEgY2FjaGUuIERQREsNCj4g PiA+PiBleGFtcGxlIGFwcGxpY2F0aW9ucywgbGlrZSBsM2Z3ZCwgYXJlIHByb2JhYmx5IHRvbyBw cmltaXRpdmUgdG8NCj4gPiBtZWFzdXJlDQo+ID4gPj4gYW55IGJlbmVmaXQgaW4gdGhpcyByZWdh cmQuDQo+ID4gPj4+DQo+ID4gPj4+PiBQcm9iYWJseSBjb3B5aW5nIHBhY2tldHMgd2l0aGluIHBk dW1wIGxpYiwgb3IgZXhhbXBsZXMvZG1hLiBvciAuLi4NCj4gPiA+Pj4NCj4gPiA+Pj4gR29vZCBw b2ludCAtIHRoZSBuZXcgZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIHNvbWV3aGVyZSB3aXRoaW4N Cj4gPiBEUERLLg0KPiA+ID4+IEZvciB0aGlzIHB1cnBvc2UsIEkgd2lsbCBsb29rIGludG8gbW9k aWZ5aW5nIHJ0ZV9wa3RtYnVmX2NvcHkoKSwNCj4gPiB3aGljaA0KPiA+ID4+IGlzIHVzZWQgYnkg cGR1bXBfY29weSgpLCB0byB1c2Ugbm9uLXRlbXBvcmFsIGNvcHlpbmcgb2YgdGhlIHBhY2tldA0K PiA+ID4+IGRhdGEuDQo+ID4gPj4+DQo+ID4gPj4+PiBBbm90aGVyIHRob3VnaHQgLSBkbyB3ZSBy ZWFsbHkgbmVlZCBhIHNlcGFyYXRlIGlubGluZSBmdW5jdGlvbiBmb3INCj4gPiA+PiBlYWNoDQo+ ID4gPj4+PiBmbGF2b3VyPw0KPiA+ID4+Pj4gTWlnaHQgYmUganVzdCBvbmUgbm9uLWlubGluZSBy dGVfbWVtY3B5X250KGRzdCwgc3JjLCBzaXplLCBmbGFncyksDQo+ID4gPj4+PiB3aGVyZSBmbGFn cyBjb3VsZCBiZSBjb21iaW5hdGlvbiBvZiBOVF9TUkMsIE5UX0RTVCwgYW5kIGtlZXANCj4gPiA+ PiBhbGlnbm1lbnQNCj4gPiA+Pj4+IGRldGVjdGlvbi9kZWNpc2lvbnMgdG8gcGFydGljdWxhciBp bXBsZW1lbnRhdGlvbj8NCj4gPiA+Pj4NCj4gPiA+Pj4gVGhhbmsgeW91IGZvciB0aGUgZmVlZGJh Y2ssIEtvbnN0YW50aW4uDQo+ID4gPj4+DQo+ID4gPj4+IE15IGFuc3dlciB0byB0aGlzIHN1Z2dl c3Rpb24gZ2V0cyBhIGxpdHRsZSBsb25nd2luZGVkLi4uDQo+ID4gPj4+DQo+ID4gPj4+IExvb2tp bmcgYXQgdGhlIERQREsgcGNhcG5nIGxpYnJhcnksIGl0IGNvcGllcyBhIDQgYnl0ZSBhbGlnbmVk DQo+ID4gPj4gbWV0YWRhdGEgc3RydWN0dXJlIHNpemVkIDI4IGJ5dGUuIFNvIGl0IGNhbiBkbyB3 aXRoIDQgYnl0ZSBhbGlnbmVkDQo+ID4gPj4gZnVuY3Rpb25zLg0KPiA+ID4+Pg0KPiA+ID4+PiBP dXIgYXBwbGljYXRpb24gY2FuIGNhcHR1cmUgcGFja2V0cyBzdGFydGluZyBhdCB0aGUgSVAgaGVh ZGVyLA0KPiA+IHdoaWNoDQo+ID4gPj4gaXMgb2Zmc2V0IGJ5IDE0IGJ5dGUgKEV0aGVybmV0IGhl YWRlciBzaXplKSBmcm9tIHRoZSBwYWNrZXQgYnVmZmVyLA0KPiA+IHNvDQo+ID4gPj4gaXQgcmVx dWlyZXMgMiBieXRlIGFsaWdubWVudC4gQW5kIHRodXMsIHJlcXVpcmluZyA0IGJ5dGUgYWxpZ25t ZW50DQo+ID4gaXMNCj4gPiA+PiBub3QgYWNjZXB0YWJsZS4NCj4gPiA+Pj4NCj4gPiA+Pj4gT3Vy IGFwcGxpY2F0aW9uIHVzZXMgMTYgYnl0ZSBhbGlnbm1lbnQgaW4gdGhlIGNhcHR1cmUgYnVmZmVy IGFyZWEsDQo+ID4gPj4gYW5kIGNhbiBiZW5lZml0IGZyb20gMTYgYnl0ZSBhbGlnbmVkIGZ1bmN0 aW9ucy4gRnVydGhlcm1vcmUsIHg4Ng0KPiA+ID4+IHByb2Nlc3NvcnMgcmVxdWlyZSAxNiBieXRl IGFsaWdubWVudCBmb3Igbm9uLXRlbXBvcmFsIGxvYWQNCj4gPiA+PiBpbnN0cnVjdGlvbnMsIHNv IEkgdGhpbmsgYSAxNiBieXRlIGFsaWduZWQgbm9uLXRlbXBvcmFsIG1lbWNweQ0KPiA+IGZ1bmN0 aW9uDQo+ID4gPj4gc2hvdWxkIGJlIG9mZmVyZWQuDQo+ID4gPj4NCj4gPiA+Pg0KPiA+ID4+IFll cywgeDg2IG5lZWRzIDE2QiBhbGlnbm1lbnQgZm9yIE5UIGxvYWQvc3RvcmVzDQo+ID4gPj4gQnV0 IHRoYXQncyBzdXBwb3NlZCB0byBiZSBhcmNoIHNwZWNpZmljIGxpbWl0YXRpb24sDQo+ID4gPj4g dGhhdCB3ZSBwcm9iYWJseSB3YW50IHRvIGhpZGUsIG5vPw0KPiA+ID4NCj4gPiA+IEFncmVlLg0K PiA+ID4NCj4gPiA+PiBJbnNpZGUgdGhlIGZ1bmN0aW9uIGNhbiBjaGVjayBhbGlnbm1lbnQgb2Yg Ym90aCBzcmMgYW5kIGRzdA0KPiA+ID4+IGFuZCBkZWNpZGUgc2hvdWxkIGl0IHVzZSBOVCBsb2Fk L3N0b3JlIGluc3RydWN0aW9ucyBvciBqdXN0DQo+ID4gPj4gZG8gbm9ybWFsIGNvcHkuDQo+ID4g Pg0KPiA+ID4gWWVzLCBJJ20gZXhwZXJpbWVudGluZyB3aXRoIHRoZSB4ODYgaW5saW5lIGZ1bmN0 aW9uIHNob3duIGJlbG93LiBBbmQNCj4gPiBob3BlZnVsbHksIHdpdGggc29tZSAiZXh0ZXJuIGlu bGluZSIgb3Igb3RoZXIgbWFnaWMsIEkgY2FuIGhpZGUgdGhlDQo+ID4gZGlmZmVyZW50IGltcGxl bWVudGF0aW9ucyBpbiB0aGUgYXJjaCBzcGVjaWZpYyBoZWFkZXJzLCBhbmQgb25seSBleHBvc2UN Cj4gPiB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gb2YgcnRlX21lbWNweV9udCgpIGluIHRoZSBj b21tb24gaGVhZGVyLg0KPiA+ID4NCj4gPiA+IEknbSBjdXJyZW50bHkgd29ya2luZyBvbiB0aGUg eDg2IGltcGxlbWVudGF0aW9uIC0gd2hlbiBJJ20gc2F0aXNmaWVkDQo+ID4gd2l0aCB0aGF0LCBJ J2xsIGxvb2sgaW50byBob3cgdG8gaGlkZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZSBhcmNo DQo+ID4gc3BlY2lmaWMgaGVhZGVyIGZpbGVzLCBhbmQgb25seSBleHBvc2UgdGhlIGNvbW1vbiBm dW5jdGlvbiBkZWNsYXJhdGlvbg0KPiA+IGluIHRoZSBnZW5lcmljIGhlYWRlciBmaWxlIGFsc28g dXNlZCBmb3IgZG9jdW1lbnRhdGlvbi4gSSB3b3JrcyBmb3INCj4gPiBydGVfbWVtY3B5KCksIHNv IEkgY2FuIHByb2JhYmx5IGZpbmQgdGhlIHdheSB0byBkbyBpdCB0aGVyZS4NCj4gPiA+DQo+ID4g PiAvKg0KPiA+ID4gICAqIE5vbi1UZW1wb3JhbCBNZW1vcnkgT3BlcmF0aW9ucyBGbGFncy4NCj4g PiA+ICAgKi8NCj4gPiA+DQo+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNfRl9MRU5BX01BU0sgIChV SU5UNjRfQygweEZFKSA8PCAwKSAgIC8qKiBMZW5ndGgNCj4gPiBhbGlnbm1lbnQgbWFzay4gKi8N Cj4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjJBICAgICAgKFVJTlQ2NF9DKDIpIDw8IDAp ICAgICAgLyoqIExlbmd0aCBpcw0KPiA+IDIgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmlu ZSBSVEVfTUVNT1BTX0ZfTEVONEEgICAgICAoVUlOVDY0X0MoNCkgPDwgMCkgICAgICAvKiogTGVu Z3RoIGlzDQo+ID4gNCBieXRlIGFsaWduZWQuICovDQo+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNf Rl9MRU44QSAgICAgIChVSU5UNjRfQyg4KSA8PCAwKSAgICAgIC8qKiBMZW5ndGggaXMNCj4gPiA4 IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjE2QSAgICAg KFVJTlQ2NF9DKDE2KSA8PCAwKSAgICAgLyoqIExlbmd0aCBpcw0KPiA+IDE2IGJ5dGUgYWxpZ25l ZC4gKi8NCj4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjMyQSAgICAgKFVJTlQ2NF9DKDMy KSA8PCAwKSAgICAgLyoqIExlbmd0aCBpcw0KPiA+IDMyIGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjY0QSAgICAgKFVJTlQ2NF9DKDY0KSA8PCAwKSAgICAg LyoqIExlbmd0aCBpcw0KPiA+IDY0IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ICNkZWZpbmUgUlRF X01FTU9QU19GX0xFTjEyOEEgICAgKFVJTlQ2NF9DKDEyOCkgPDwgMCkgICAgLyoqIExlbmd0aCBp cw0KPiA+IDEyOCBieXRlIGFsaWduZWQuICovDQo+ID4gPg0KPiA+ID4gI2RlZmluZSBSVEVfTUVN T1BTX0ZfRFNUQV9NQVNLICAoVUlOVDY0X0MoMHhGRSkgPDwgOCkgICAvKioNCj4gPiBEZXN0aW5h dGlvbiBhZGRyZXNzIGFsaWdubWVudCBtYXNrLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BT X0ZfRFNUMkEgICAgICAoVUlOVDY0X0MoMikgPDwgOCkgICAgICAvKioNCj4gPiBEZXN0aW5hdGlv biBhZGRyZXNzIGlzIDIgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BT X0ZfRFNUNEEgICAgICAoVUlOVDY0X0MoNCkgPDwgOCkgICAgICAvKioNCj4gPiBEZXN0aW5hdGlv biBhZGRyZXNzIGlzIDQgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BT X0ZfRFNUOEEgICAgICAoVUlOVDY0X0MoOCkgPDwgOCkgICAgICAvKioNCj4gPiBEZXN0aW5hdGlv biBhZGRyZXNzIGlzIDggYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BT X0ZfRFNUMTZBICAgICAoVUlOVDY0X0MoMTYpIDw8IDgpICAgICAvKioNCj4gPiBEZXN0aW5hdGlv biBhZGRyZXNzIGlzIDE2IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ICNkZWZpbmUgUlRFX01FTU9Q U19GX0RTVDMyQSAgICAgKFVJTlQ2NF9DKDMyKSA8PCA4KSAgICAgLyoqDQo+ID4gRGVzdGluYXRp b24gYWRkcmVzcyBpcyAzMiBieXRlIGFsaWduZWQuICovDQo+ID4gPiAjZGVmaW5lIFJURV9NRU1P UFNfRl9EU1Q2NEEgICAgIChVSU5UNjRfQyg2NCkgPDwgOCkgICAgIC8qKg0KPiA+IERlc3RpbmF0 aW9uIGFkZHJlc3MgaXMgNjQgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVN T1BTX0ZfRFNUMTI4QSAgICAoVUlOVDY0X0MoMTI4KSA8PCA4KSAgICAvKioNCj4gPiBEZXN0aW5h dGlvbiBhZGRyZXNzIGlzIDEyOCBieXRlIGFsaWduZWQuICovDQo+ID4gPg0KPiA+ID4gI2RlZmlu ZSBSVEVfTUVNT1BTX0ZfU1JDQV9NQVNLICAoVUlOVDY0X0MoMHhGRSkgPDwgMTYpICAvKiogU291 cmNlDQo+ID4gYWRkcmVzcyBhbGlnbm1lbnQgbWFzay4gKi8NCj4gPiA+ICNkZWZpbmUgUlRFX01F TU9QU19GX1NSQzJBICAgICAgKFVJTlQ2NF9DKDIpIDw8IDE2KSAgICAgLyoqIFNvdXJjZQ0KPiA+ IGFkZHJlc3MgaXMgMiBieXRlIGFsaWduZWQuICovDQo+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNf Rl9TUkM0QSAgICAgIChVSU5UNjRfQyg0KSA8PCAxNikgICAgIC8qKiBTb3VyY2UNCj4gPiBhZGRy ZXNzIGlzIDQgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BTX0ZfU1JD OEEgICAgICAoVUlOVDY0X0MoOCkgPDwgMTYpICAgICAvKiogU291cmNlDQo+ID4gYWRkcmVzcyBp cyA4IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX1NSQzE2QSAg ICAgKFVJTlQ2NF9DKDE2KSA8PCAxNikgICAgLyoqIFNvdXJjZQ0KPiA+IGFkZHJlc3MgaXMgMTYg Ynl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BTX0ZfU1JDMzJBICAgICAo VUlOVDY0X0MoMzIpIDw8IDE2KSAgICAvKiogU291cmNlDQo+ID4gYWRkcmVzcyBpcyAzMiBieXRl IGFsaWduZWQuICovDQo+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNfRl9TUkM2NEEgICAgIChVSU5U NjRfQyg2NCkgPDwgMTYpICAgIC8qKiBTb3VyY2UNCj4gPiBhZGRyZXNzIGlzIDY0IGJ5dGUgYWxp Z25lZC4gKi8NCj4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX1NSQzEyOEEgICAgKFVJTlQ2NF9D KDEyOCkgPDwgMTYpICAgLyoqIFNvdXJjZQ0KPiA+IGFkZHJlc3MgaXMgMTI4IGJ5dGUgYWxpZ25l ZC4gKi8NCj4gPiA+DQo+ID4gPiAvKioNCj4gPiA+ICAgKiBAd2FybmluZw0KPiA+ID4gICAqIEBi IEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4N Cj4gPiA+ICAgKg0KPiA+ID4gICAqIE5vbi10ZW1wb3JhbCBtZW1vcnkgY29weS4NCj4gPiA+ICAg KiBUaGUgbWVtb3J5IGFyZWFzIG11c3Qgbm90IG92ZXJsYXAuDQo+ID4gPiAgICoNCj4gPiA+ICAg KiBAbm90ZQ0KPiA+ID4gICAqIElmIHRoZSBkZXN0aW5hdGlvbiBhbmQvb3IgbGVuZ3RoIGlzIHVu YWxpZ25lZCwgc29tZSBjb3BpZWQgYnl0ZXMNCj4gPiB3aWxsIGJlDQo+ID4gPiAgICogc3RvcmVk IGluIHRoZSBkZXN0aW5hdGlvbiBtZW1vcnkgYXJlYSB1c2luZyB0ZW1wb3JhbCBhY2Nlc3MuDQo+ ID4gPiAgICoNCj4gPiA+ICAgKiBAcGFyYW0gZHN0DQo+ID4gPiAgICogICBQb2ludGVyIHRvIHRo ZSBub24tdGVtcG9yYWwgZGVzdGluYXRpb24gbWVtb3J5IGFyZWEuDQo+ID4gPiAgICogQHBhcmFt IHNyYw0KPiA+ID4gICAqICAgUG9pbnRlciB0byB0aGUgbm9uLXRlbXBvcmFsIHNvdXJjZSBtZW1v cnkgYXJlYS4NCj4gPiA+ICAgKiBAcGFyYW0gbGVuDQo+ID4gPiAgICogICBOdW1iZXIgb2YgYnl0 ZXMgdG8gY29weS4NCj4gPiA+ICAgKiBAcGFyYW0gZmxhZ3MNCj4gPiA+ICAgKiAgIEhpbnRzIGZv ciBtZW1vcnkgYWNjZXNzLg0KPiA+ID4gICAqICAgQW55IG9mIHRoZSBSVEVfTUVNT1BTX0ZfTEVO bkEsIFJURV9NRU1PUFNfRl9EU1RuQSwNCj4gPiBSVEVfTUVNT1BTX0ZfU1JDbkEgZmxhZ3MuDQo+ ID4gPiAgICovDQo+ID4gPiBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+IHN0YXRpYyBfX3J0ZV9h bHdheXNfaW5saW5lDQo+ID4gPiBfX2F0dHJpYnV0ZV9fKChfX25vbm51bGxfXygxLCAyKSwgX19h Y2Nlc3NfXyh3cml0ZV9vbmx5LCAxLCAzKSwNCj4gPiBfX2FjY2Vzc19fKHJlYWRfb25seSwgMiwg MykpKQ0KPiA+ID4gdm9pZCBydGVfbWVtY3B5X250KHZvaWQgKiBfX3J0ZV9yZXN0cmljdCBkc3Qs IGNvbnN0IHZvaWQgKg0KPiA+IF9fcnRlX3Jlc3RyaWN0IHNyYywgc2l6ZV90IGxlbiwNCj4gPiA+ ICAgICAgICAgIGNvbnN0IHVpbnQ2NF90IGZsYWdzKQ0KPiA+ID4gew0KPiA+ID4gICAgICBpZiAo X19idWlsdGluX2NvbnN0YW50X3AoZmxhZ3MpID8NCj4gPiA+ICAgICAgICAgICAgICAoKGZsYWdz ICYgUlRFX01FTU9QU19GX0xFTkFfTUFTSykgPj0gUlRFX01FTU9QU19GX0xFTjE2QQ0KPiA+ICYm DQo+ID4gPiAgICAgICAgICAgICAgKGZsYWdzICYgUlRFX01FTU9QU19GX0RTVEFfTUFTSykgPj0g UlRFX01FTU9QU19GX0RTVDE2QSkNCj4gPiA6DQo+ID4gPiAgICAgICAgICAgICAgISgoKHVpbnRw dHJfdClkc3QgfCBsZW4pICYgKDE2IC0gMSkpKSB7DQo+ID4gPiAgICAgICAgICBpZiAoX19idWls dGluX2NvbnN0YW50X3AoZmxhZ3MpID8NCj4gPiA+ICAgICAgICAgICAgICAgICAgKGZsYWdzICYg UlRFX01FTU9QU19GX1NSQ0FfTUFTSykgPj0NCj4gPiBSVEVfTUVNT1BTX0ZfU1JDMTZBIDoNCj4g PiA+ICAgICAgICAgICAgICAgICAgISgodWludHB0cl90KXNyYyAmICgxNiAtIDEpKSkNCj4gPiA+ ICAgICAgICAgICAgICBydGVfbWVtY3B5X250MTZhKGRzdCwgc3JjLCBsZW4vKiwgZmxhZ3MqLyk7 DQo+ID4gPiAgICAgICAgICBlbHNlDQo+ID4gPiAgICAgICAgICAgICAgcnRlX21lbWNweV9udDE2 ZGxhKGRzdCwgc3JjLCBsZW4vKiwgZmxhZ3MqLyk7DQo+ID4gPiAgICAgIH0NCj4gPiA+ICAgICAg ZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZmxhZ3MpID8gKA0KPiA+ID4gICAgICAgICAg ICAgIChmbGFncyAmIFJURV9NRU1PUFNfRl9MRU5BX01BU0spID49IFJURV9NRU1PUFNfRl9MRU40 QQ0KPiA+ICYmDQo+ID4gPiAgICAgICAgICAgICAgKGZsYWdzICYgUlRFX01FTU9QU19GX0RTVEFf TUFTSykgPj0gUlRFX01FTU9QU19GX0RTVDRBDQo+ID4gJiYNCj4gPiA+ICAgICAgICAgICAgICAo ZmxhZ3MgJiBSVEVfTUVNT1BTX0ZfU1JDQV9NQVNLKSA+PSBSVEVfTUVNT1BTX0ZfU1JDNEEpDQo+ ID4gOg0KPiA+ID4gICAgICAgICAgICAgICEoKCh1aW50cHRyX3QpZHN0IHwgKHVpbnRwdHJfdClz cmMgfCBsZW4pICYgKDQgLSAxKSkpIHsNCj4gPiA+ICAgICAgICAgIHJ0ZV9tZW1jcHlfbnQ0YShk c3QsIHNyYywgbGVuLyosIGZsYWdzKi8pOw0KPiA+ID4gICAgICB9DQo+ID4gPiAgICAgIGVsc2UN Cj4gPiA+ICAgICAgICAgIHJ0ZV9tZW1jcHlfbnRfdW5hbGlnbmVkKGRzdCwgc3JjLCBsZW4vKiwg ZmxhZ3MqLyk7DQo+ID4gPiB9DQo+ID4NCj4gPg0KPiA+IERvIHdlIHJlYWxseSBuZWVkIHRvIGV4 cG9zZSBhbGwgdGhlc2UgZG96ZW4gZmxhZ3M/DQo+ID4gTXkgdGhvdWdodCBhdCBsZWFzdCBhYm91 dCB4ODYgaW1wbGVtZW50YWlvbiB3YXMgYWJvdXQgc29tZXRoaW5nIG1vcmUNCj4gPiBzaW1wbGUg bGlrZToNCj4gPiB2b2lkIHJ0ZV9tZW1jcHlfbnQodm9pZCAqIF9fcnRlX3Jlc3RyaWN0IGRzdCwN Cj4gPiAJY29uc3Qgdm9pZCAqIF9fcnRlX3Jlc3RyaWN0IHNyYywgc2l6ZV90IGxlbiwNCj4gPiAJ Y29uc3QgdWludDY0X3QgZmxhZ3MpDQo+ID4gew0KPiA+DQo+ID4gCWlmIChmbGFncyA9PSAoU1JD X05UIHwgRFNUX05UKSAmJiAoKGRzdCB8IHNyYykgJiAweGYpID09IDApIHsNCj4gPiAJCV9kb19u dF9zcmNfbnRfZHN0X250KC4uLik7DQo+ID4gCX0gZWxzZSBpZiAoZmxhZ3MgPT0gRFNUX05UICYm IChkc3QgJiAweGYpID09IDApIHsNCj4gPiAJCV9kb19zcmNfbmFfZHN0X250KC4uLik7DQo+ID4g CX0gZWxzZSBpZiAoZmxhZ3MgPT0gU1JDX05UICYmIChzcmMgJiAweGYpID09IDApIHsNCj4gPiAJ CV9kb19zcmNfbnRfZHN0X25hKC4uLik7DQo+ID4gCX0gZWxzZQ0KPiA+IAkJbWVtY3B5KGRzdCwg c3JjLCBsZW4pOw0KPiA+IH0NCj4gDQo+IFRoZSBjb21iaW5hdGlvbiBvZiBmbGFncywgaW5saW5l IGFuZCBfX2J1aWx0aW5fY29uc3RhbnRfcCgpIGFsbG93cyB0aGUgY29tcGlsZXIgdG8gcHJvZHVj ZSB6ZXJvLW92ZXJoZWFkIGNvZGUuIFdpdGhvdXQgaXQsIHRoZQ0KPiByZXN1bHRpbmcgY29kZSB3 aWxsIGNvbnRhaW4gYSBidW5jaCBvZiBydW4tdGltZSBiaXRtYXNrIGNvbXBhcmlzb25zIGFuZCBi cmFuY2hlcyB0byBkZXRlcm1pbmUgdGhlIHVsdGltYXRlIGNvcHkgZnVuY3Rpb24uDQoNCkkgdGhp bmsgaXQgaXMgdW5hdm9pZGFibGUsIHVubGVzcyB5b3VyIGludGVudGlvbiBmb3IgdGhpcyBmdW5j dGlvbiB0byB0cnVzdCBmbGFncyB3aXRob3V0IGNoZWNraW5nIGFjdHVhbCBhZGRyZXNzZXMuDQoN CiBPbiB4ODYNCj4gdGhlcmUgYXJlIG5vdCBvbmx5IDE2IGJ5dGUsIGJ1dCBhbHNvIDQgYnl0ZSBh bGlnbm1lbnQgdmFyaWFudHMgb2Ygbm9uLXRlbXBvcmFsIHN0b3JlLiBUaGUgYmVhdXR5IG9mIGl0 IHdpbGwgYmUgbW9yZSBvYnZpb3VzIHdoZW4gdGhlDQo+IHBhdGNoIGlzIHJlYWR5Lg0KDQpPaywg SSB3aWxsIGp1c3Qgd2FpdCBmb3IgZmluYWwgdmVyc2lvbiB0aGVuIDopDQogDQo+IA0KPiBBbmQg aW4gbXkgY3VycmVudCB3b3JraW5nIHZlcnNpb24gKG5vdCB0aGUgY29kZSBwcm92aWRlZCBoZXJl KSwgdGhlIGZsYWdzIGFyZSBoaW50cywgc28gdXNpbmcgdGhlbSB3aWxsIGJlIG9wdGlvbmFsLiBU aGUgZnVuY3Rpb24NCj4gaGVhZGVycyB3aWxsIGxvb2sgcm91Z2hseSBsaWtlIHRoaXM6DQo+IA0K PiBzdGF0aWMgaW5saW5lIHZvaWQgcnRlX21lbWNweV9udF9leCgNCj4gCQl2b2lkICogZHN0LCBj b25zdCB2b2lkICogc3JjLA0KPiAJCXNpemVfdCBsZW4sIHVpbnQ2NF90IGZsYWdzKTsNCj4gDQo+ IHN0YXRpYyBpbmxpbmUgdm9pZCBydGVfbWVtY3B5X250KA0KPiAJCXZvaWQgKiBkc3QsIGNvbnN0 IHZvaWQgKiBzcmMsDQo+IAkJc2l6ZV90IGxlbikNCj4gew0KPiAJcnRlX21lbWNweV9udF9leChk c3QsIHNyYywgbGVuLCAwKTsNCj4gfQ0KPiANCj4gSSBtaWdodCBhZGQgYW4gX2V4IHBvc3RmaXgg dmFyaWFudCBvZiB0aGUgbWJ1ZiBwYWNrZXQgbm9uLXRlbXBvcmFsIGNvcHkgZnVuY3Rpb24gdG9v LCBidXQgSSdtIG5vdCB3b3JraW5nIG9uIHRoYXQgZnVuY3Rpb24geWV0LCBzbyBJDQo+IGRvbid0 IHlldCBrbm93IGlmIGl0IG1ha2VzIHNlbnNlIG9yIG5vdC4NCj4gDQo+IE15IGNvbmNlcHQgZm9y IGJ1aWxkIHRpbWUgYWxpZ25tZW50IGhpbnRzIGNhbiBhbHNvIGJlIGNvcGllZCBpbnRvIGFuIHJ0 ZV9tZW1jcHlfZXgoKSBmdW5jdGlvbiBmb3IgaW1wcm92ZWQgcGVyZm9ybWFuY2UuIEJ1dCBJDQo+ IGRvbid0IHdhbnQgbXkgcGF0Y2ggdG8gZXhwYW5kIHRvbyBtdWNoIG91dHNpZGUgaXRzIGluaXRp YWwgc2NvcGUsIHNvIEkgd2lsbCBub3QgbW9kaWZ5IHJ0ZV9tZW1jcHkoKSB3aXRoIHRoaXMgcGF0 Y2guDQo+IA0KPiBBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIHByb3ZpZGUgcnRlX21lbWNweV9leChk LHMsbCxmbGFncykgaW5zdGVhZCBvZiBydGVfbWVtY3B5X250W19leF0oKSwgYW5kIHVzZSB0aGUg ZmxhZ3MgdG8gaW5kaWNhdGUgbm9uLQ0KPiB0ZW1wb3JhbCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9u Lg0KPiANCj4gVGhpcyBpcyBvbmx5IGEgcXVlc3Rpb24gYWJvdXQgd2hpY2ggQVBJIHRoZSBjb21t dW5pdHkgcHJlZmVycy4gSSB3aWxsIG5vdCBjaGFuZ2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIHJ0 ZV9tZW1jcHkoKSB3aXRoIHRoaXMgcGF0Y2ggLQ0KPiBpdCdzIGFub3RoZXIgam9iIHRvIGRvIHRo YXQuDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4NCj4gPiA+Pg0KPiA+ID4+DQo+ID4gPj4+IFdoaWxl IHdvcmtpbmcgb24gdGhlc2UgZnVudGlvbnMsIEkgZXhwZXJpbWVudGVkIHdpdGggYW4NCj4gPiA+ PiBydGVfbWVtY3B5X250KCkgdGFraW5nIGZsYWdzLCB3aGljaCBpcyBhbHNvIG15IHBlcnNvbmFs IHByZWZlcmVuY2UsDQo+ID4gYnV0DQo+ID4gPj4gaGF2ZW4ndCBzdWNjZWVkIHlldC4gRXNwZWNp YWxseSB3aGVuIGNvcHlpbmcgYSAxNiBieXRlIGFsaWduZWQNCj4gPiA+PiBzdHJ1Y3R1cmUgb2Yg b25seSAxNiBieXRlLCB0aGUgb3ZlcmhlYWQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgKw0KPiA+ID4+ IGNvbXBhcmluZyB0aGUgZmxhZ3MgKyB0aGUgY29weSBsb29wIG92ZXJoZWFkIGlzIHNpZ25pZmlj YW50LA0KPiA+IGNvbXBhcmVkDQo+ID4gPj4gdG8gaW5saW5lIGNvZGUgY29uc2lzdGluZyBvZiBv bmx5IG9uZSBwYWlyIG9mICJtb3ZudGRxYQ0KPiA+ICglcnNpKSwleG1tMDsNCj4gPiA+PiBtb3Zu dGRxICV4bW0wLCglcmRpKSIgaW5zdHJ1Y3Rpb25zLg0KPiA+ID4+Pg0KPiA+ID4+PiBSZW1lbWJl ciB0aGF0IGEgbm9uLWlubGluZWQgcnRlX21lbWNweV9udCgpIHdpbGwgYmUgY2FsbGVkIHdpdGgN Cj4gPiB2ZXJ5DQo+ID4gPj4gdmFyeWluZyBzaXplLCBkdWUgdG8gdGhlIHR5cGljYWwgbWl4IG9m IHNtYWxsIGFuZCBiaWcgcGFja2V0cywgc28NCj4gPiA+PiBicmFuY2ggcHJlZGljdGlvbiB3aWxs IG5vdCBoZWxwLg0KPiA+ID4+Pg0KPiA+ID4+PiBUaGlzIFJGQyBkb2VzIG5vdCB5ZXQgc2hvdyB0 aGUgcnRlX21lbWNweV9udCgpIGZ1bmN0aW9uIGhhbmRsaW5nDQo+ID4gPj4gdW5hbGlnbmVkIGxv YWQvc3RvcmUsIGJ1dCBpdCBpcyBtb3JlIGNvbXBsZXggdGhhbiB0aGUgYWxpZ25lZA0KPiA+ID4+ IGZ1bmN0aW9ucy4gU28gSSB0aGluayB0aGUgYWxpZ25lZCB2YXJpYW50cyBhcmUgd2FycmFudGVk IC0gZm9yDQo+ID4gPj4gcGVyZm9ybWFuY2UgcmVhc29ucy4NCj4gPiA+Pj4NCj4gPiA+Pj4gU29t ZSBvZiB0aGUgbmVlZCBmb3IgZXhwb3NpbmcgaW5kaXZpZHVhbCBmdW5jdGlvbnMgZm9yIGRpZmZl cmVudA0KPiA+ID4+IGFsaWdubWVudCBzdGVtcyBmcm9tIHRoZSBjb21waWxlciBiZWluZyB1bmFi bGUgdG8gZGV0ZXJtaW5lIHRoZQ0KPiA+ID4+IGFsaWdubWVudCBvZiB0aGUgc291cmNlIGFuZCBk ZXN0aW5hdGlvbiBwb2ludGVycyBhdCBidWlsZCB0aW1lLiBTbw0KPiA+IHdlDQo+ID4gPj4gbmVl ZCB0byBoZWxwIHRoZSBjb21waWxlciB3aXRoIHRoaXMgYXQgYnVpbGQgdGltZSwgYW5kIHRodXMg dGhlIG5lZWQNCj4gPiA+PiBmb3IgaW5saW5pbmcgdGhlIGZ1bmN0aW9uLiBJZiB3ZSBleHBvc2Ug YSBidW5jaCBvZiBzbWFsbCBpbmxpbmUNCj4gPiA+PiBmdW5jdGlvbnMgb3IgYSBiaWcgaW5saW5l IGZ1bmN0aW9uIHdpdGggZmxhZ3Mgc2VlbXMgdG8gYmUgYSBtYXR0ZXINCj4gPiBvZg0KPiA+ID4+ IHRhc3RlLg0KPiA+ID4+Pg0KPiA+ID4+PiBUaGlua2luZyBhYm91dCBpdCwgeW91IGFyZSBwcm9i YWJseSByaWdodCB0aGF0IGV4cG9zaW5nIGEgc2luZ2xlDQo+ID4gPj4gZnVuY3Rpb24gd2l0aCBm bGFncyBpcyBiZXR0ZXIgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMgYW5kIGVhc2llcg0KPiA+ IGZvcg0KPiA+ID4+IG90aGVyIGFyY2hpdGVjdHVyZXMgdG8gaW1wbGVtZW50LiBCdXQgaXQgc3Rp bGwgbmVlZHMgdG8gYmUgaW5saW5lLA0KPiA+IGZvcg0KPiA+ID4+IHRoZSByZWFzb25zIGRlc2Ny aWJlZCBhYm92ZS4NCj4gPiA+Pg0KPiA+ID4+DQo+ID4gPj4gT2ssIG15IGluaXRpYWwgdGhvdWdo dCB3YXMgdGhhdCBtYWluIHVzZS1jYXNlIGZvciBpdCB3b3VsZCBiZQ0KPiA+IGNvcHlpbmcNCj4g PiA+PiBvZg0KPiA+ID4+IGJpZyBjaHVua3Mgb2YgZGF0YSwgYnV0IGZyb20geW91ciBkZXNjcmlw dGlvbiBpdCBtaWdodCBub3QgYmUgdGhlDQo+ID4gY2FzZS4NCj4gPiA+DQo+ID4gPiBUaGlzIGlz IGZvciBxdWlja2x5IGNvcHlpbmcgcmVsYXRpdmVseSBzbWFsbCBwaWVjZXMgb2YgZGF0YQ0KPiA+ IHN5bmNocm9ub3VzbHkgd2l0aG91dCBwb2xsdXRpbmcgdGhlIENQVXMgZGF0YSBjYWNoZSwgZS5n LiBqdXN0IGJlZm9yZQ0KPiA+IHBhc3Npbmcgb24gYSBwYWNrZXQgdG8gYW4gRXRoZXJuZXQgUE1E IGZvciB0cmFuc21pc3Npb24uDQo+ID4gPg0KPiA+ID4gQmlnIGNodW5rcyBvZiBkYXRhIHNob3Vs ZCBiZSBjb3BpZWQgYXN5bmNocm9ub3VzbHkgYnkgRE1BLg0KPiA+ID4NCj4gPiA+PiBZZXMsIGZv ciBqdXN0IDE2LzMyQiBjb3B5IGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQgbWlnaHQgYmUgd2F5IHRv bw0KPiA+ID4+IGhpZ2guLi4NCj4gPiA+PiBBcyBhbm90aGVyIGFsdGVybmF0aXZlIC0gd291bGQg bWVtY3B5X250X2J1bGsoKSBoZWxwIHNvbWVob3c/DQo+ID4gPj4gSXQgY2FuIGRvIGNvcHlpbmcg Zm9yIHRoZSBzZXZlcmFsIHNyYy9kc3QgcGFpcnMgYXQgb25jZSBhbmQNCj4gPiA+PiB0aGF0IG1p Z2h0IGhlbHAgdG8gYW1vcnRpemUgY29zdCBvZiBmdW5jdGlvbiBjYWxsLg0KPiA+ID4NCj4gPiA+ IEluIG1hbnkgY2FzZXMsIG1lbWNweV9udCgpIHdpbGwgcmVwbGFjZSBtZW1jcHkoKSBpbnNpZGUg bG9vcHMsIHNvIGl0DQo+ID4gc2hvdWxkIGJlIGp1c3QgYXMgZWFzeSB0byB1c2UgYXMgbWVtY3B5 KCkuIEUuZy4gbG9vayBhdA0KPiA+IHJ0ZV9wa3RtYnVmX2NvcHkoKS4uLiBCdWlsZGluZyBhIG1l bWNvcHkgYXJyYXkgdG8gcGFzcyB0bw0KPiA+IG1lbWNweV9udF9idWxrKCkgZnJvbSBydGVfcGt0 bWJ1Zl9jb3B5KCkgd291bGQgcmVxdWlyZSBhIHNpZ25pZmljYW50DQo+ID4gcmV3cml0ZSBvZiBy dGVfcGt0bWJ1Zl9jb3B5KCksIGNvbXBhcmVkIHRvIGp1c3QgcmVwbGFjaW5nIHJ0ZV9tZW1jcHko KQ0KPiA+IHdpdGggcnRlX21lbWNweV9udCgpLiBBbmQgdGhpcyBpcyBqdXN0IG9uZSBmdW5jdGlv biB1c2luZyBtZW1jcHkoKS4NCj4gPg0KPiA+IEFjdHVhbGx5LCBvbmUgcXVlc3Rpb24gSSBoYXZl IGZvciBzdWNoIHNtYWxsIGRhdGEtdHJhbnNmZXINCj4gPiAoMTZCIHBlciBwYWNrZXQpIC0gZG8g eW91IHN0aWxsIHNlZSBzb21lIG5vdGljYWJsZSBwZXJmb21hbmNlDQo+ID4gaW1wcm92ZW1lbnQg Zm9yIHN1Y2ggc2NlbmFyaW8/DQo+IA0KPiBDb3B5aW5nIDE2IGJ5dGUgZnJvbSBlYWNoIHBhY2tl dCBpbiBhIGJ1cnN0IG9mIDMyIHBhY2tldHMgd291bGQgb3RoZXJ3aXNlIHBvbGx1dGUgNjQgY2Fj aGUgbGluZXMgPSA0IEtCIGNhY2hlLiBXaXRoIHR5cGljYWxseSA2NCBLQiBMMQ0KPiBjYWNoZSwg SSB0aGluayBpdCBtYWtlcyBhIGRpZmZlcmVuY2UuDQoNCkkgdW5kZXJzdGFuZCB0aGUgaW50ZW50 aW9uIGJlaGluZCwgbXkgcXVlc3Rpb24gd2FzIC0gaXQgaXMgcmVhbGx5IG1lYXN1cmFibGU/DQpT b21ldGhpbmcgbGlrZTogdXNpbmcgcGt0bWJ1Zl9jb3B5X250KGxlbj0xNikgb3ZlciB1c2luZyBw a3RtYnVmX2NvcHkobGVuPTE2KQ0Kb24gd29ya2xvYWQgWCBnaXZlcyBZJSB0aG91Z2h0cHV0IGlt cHJvdmVtZW50Pw0KDQo+IA0KPiA+IEFub3RoZXIgcXVlc3Rpb24gLSB3aG8gd2lsbCBkbyAnc2Zl bmNlJyBhZnRlciB0aGUgY29weWluZz8NCj4gPiBXb3VsZCBpdCBiZSBpbnNpZGUgbWVtY3B5X250 IChzZWVtcyBxdWl0ZSBjb3N0bHkpLCBvciB3b3VsZA0KPiA+IGl0IGJlIGFub3RoZXIgQVBJIGZ1 bmN0aW9uIGZvciB0aGF0OiBtZW1jcHlfbnRfZmx1c2goKSBvciBzbz8NCj4gDQo+IE91dHNpZGUu IE9ubHkgdGhlIGRldmVsb3BlciBrbm93cyB3aGVuIGl0IGlzIHJlcXVpcmVkLCBzbyBpdCB3b3Vs ZG4ndCBtYWtlIGFueSBzZW5zZSB0byBhZGQgdGhlIGNvc3QgaW5zaWRlIG1lbWNweV9udCgpLg0K PiANCj4gSSBkb24ndCB0aGluayB3ZSBzaG91bGQgYWRkIGEgZmx1c2ggZnVuY3Rpb247IGl0IHdv dWxkIGp1c3QgYmUgYW5vdGhlciBuYW1lIGZvciBhbiBhbHJlYWR5IGV4aXN0aW5nIGZ1bmN0aW9u LiBSZWZlcnJpbmcgdG8gdGhlIHJlcXVpcmVkDQo+IG9wZXJhdGlvbiBpbiB0aGUgbWVtY3B5X250 KCkgZnVuY3Rpb24gZG9jdW1lbnRhdGlvbiBzaG91bGQgc3VmZmljZS4NCj4gDQo+ID4NCj4gPiA+ Pg0KPiA+ID4+DQo+ID4gPj4+DQo+ID4gPj4+Pg0KPiA+ID4+Pj4NCj4gPiA+Pj4+PiBbMV0gaHR0 cHM6Ly93d3cuaW50ZWwuY29tL2NvbnRlbnQvd3d3L3VzL2VuL2RvY3MvaW50cmluc2ljcy0NCj4g PiA+Pj4+IGd1aWRlL2luZGV4Lmh0bWwjdGV4dD1fbW1fc3RyZWFtX2xvYWQNCj4gPiA+Pj4+PiBb Ml0gaHR0cHM6Ly9kZXZlbG9wZXIuYXJtLmNvbS9kb2N1bWVudGF0aW9uLzEwMDA3Ni8wMTAwL0E2 NC0NCj4gPiA+Pj4+IEluc3RydWN0aW9uLVNldC1SZWZlcmVuY2UvQTY0LUZsb2F0aW5nLXBvaW50 LUluc3RydWN0aW9ucy9MRE5QLS0NCj4gPiA+PiBTSU1ELQ0KPiA+ID4+Pj4gYW5kLUZQLQ0KPiA+ ID4+Pj4+DQo+ID4gPj4+Pj4gVjI6DQo+ID4gPj4+Pj4gLSBPbmx5IGNvcHkgZnJvbSBub24tdGVt cG9yYWwgc291cmNlIHRvIG5vbi10ZW1wb3JhbCBkZXN0aW5hdGlvbi4NCj4gPiA+Pj4+PiAgICAg IEkuZS4gcmVtb3ZlIHRoZSB0d28gdmFyaWFudHMgd2l0aCBvbmx5IHNvdXJjZSBhbmQvb3INCj4g PiA+PiBkZXN0aW5hdGlvbg0KPiA+ID4+Pj4gYmVpbmcNCj4gPiA+Pj4+PiAgICAgIG5vbi10ZW1w b3JhbC4NCj4gPiA+Pj4+PiAtIERvIG5vdCByZXF1aXJlIGFsaWdubWVudC4NCj4gPiA+Pj4+PiAg ICAgIEluc3RlYWQsIG9mZmVyIGFkZGl0aW9uYWwgNCBhbmQgMTYgYnl0ZSBhbGlnbmVkIGZ1bmN0 aW9ucw0KPiA+IGZvcg0KPiA+ID4+Pj4gcGVyZm9ybWFuY2UNCj4gPiA+Pj4+PiAgICAgIHB1cnBv c2VzLg0KPiA+ID4+Pj4+IC0gSW1wbGVtZW50ZWQgdHdvIG9mIHRoZSBmdW5jdGlvbnMgZm9yIHg4 Ni4NCj4gPiA+Pj4+PiAtIFJlbW92ZSBtZW1zZXQgZnVuY3Rpb24uDQo+ID4gPj4+Pj4NCj4gPiA+ Pj4+PiBTaWduZWQtb2ZmLWJ5OiBNb3J0ZW4gQnLDuHJ1cCA8bWJAc21hcnRzaGFyZXN5c3RlbXMu Y29tPg0KPiA+ID4+Pj4+IC0tLQ0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gLyoqDQo+ID4gPj4+Pj4g ICAgICogQHdhcm5pbmcNCj4gPiA+Pj4+PiAgICAgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJ IG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ID4gPj4+Pj4gICAgICoNCj4gPiA+ Pj4+PiAgICAgKiBDb3B5IGRhdGEgZnJvbSBub24tdGVtcG9yYWwgc291cmNlIHRvIG5vbi10ZW1w b3JhbA0KPiA+ID4+IGRlc3RpbmF0aW9uLg0KPiA+ID4+Pj4+ICAgICAqDQo+ID4gPj4+Pj4gICAg ICogQHBhcmFtIGRzdA0KPiA+ID4+Pj4+ICAgICAqICAgUG9pbnRlciB0byB0aGUgbm9uLXRlbXBv cmFsIGRlc3RpbmF0aW9uIG9mIHRoZSBkYXRhLg0KPiA+ID4+Pj4+ICAgICAqICAgU2hvdWxkIGJl IDQgYnl0ZSBhbGlnbmVkLCBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZS4NCj4gPiA+Pj4+PiAgICAg KiBAcGFyYW0gc3JjDQo+ID4gPj4+Pj4gICAgICogICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9y YWwgc291cmNlIGRhdGEuDQo+ID4gPj4+Pj4gICAgICogICBObyBhbGlnbm1lbnQgcmVxdWlyZW1l bnRzLg0KPiA+ID4+Pj4+ICAgICAqIEBwYXJhbSBsZW4NCj4gPiA+Pj4+PiAgICAgKiAgIE51bWJl ciBvZiBieXRlcyB0byBjb3B5Lg0KPiA+ID4+Pj4+ICAgICAqICAgU2hvdWxkIGJlIGJlIGRpdmlz aWJsZSBieSA0LCBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZS4NCj4gPiA+Pj4+PiAgICAgKi8NCj4g PiA+Pj4+PiBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+Pj4+PiBzdGF0aWMgX19ydGVfYWx3YXlz X2lubGluZQ0KPiA+ID4+Pj4+IF9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fKDEsIDIpLCBfX2Fj Y2Vzc19fKHdyaXRlX29ubHksIDEsIDMpLA0KPiA+ID4+Pj4gX19hY2Nlc3NfXyhyZWFkX29ubHks IDIsIDMpKSkNCj4gPiA+Pj4+PiB2b2lkIHJ0ZV9tZW1jcHlfbnQodm9pZCAqIF9fcnRlX3Jlc3Ry aWN0IGRzdCwgY29uc3Qgdm9pZCAqDQo+ID4gPj4+PiBfX3J0ZV9yZXN0cmljdCBzcmMsIHNpemVf dCBsZW4pDQo+ID4gPj4+Pj4gLyogSW1wbGVtZW50YXRpb24gVC5CLkQuICovDQo+ID4gPj4+Pj4N Cj4gPiA+Pj4+PiAvKioNCj4gPiA+Pj4+PiAgICAgKiBAd2FybmluZw0KPiA+ID4+Pj4+ICAgICAq IEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGlj ZS4NCj4gPiA+Pj4+PiAgICAgKg0KPiA+ID4+Pj4+ICAgICAqIENvcHkgZGF0YSBpbiBibG9ja3Mg b2YgMTYgYnl0ZSBmcm9tIGFsaWduZWQgbm9uLXRlbXBvcmFsDQo+ID4gPj4gc291cmNlDQo+ID4g Pj4+Pj4gICAgICogdG8gYWxpZ25lZCBub24tdGVtcG9yYWwgZGVzdGluYXRpb24uDQo+ID4gPj4+ Pj4gICAgICoNCj4gPiA+Pj4+PiAgICAgKiBAcGFyYW0gZHN0DQo+ID4gPj4+Pj4gICAgICogICBQ b2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwgZGVzdGluYXRpb24gb2YgdGhlIGRhdGEuDQo+ID4g Pj4+Pj4gICAgICogICBNdXN0IGJlIDE2IGJ5dGUgYWxpZ25lZC4NCj4gPiA+Pj4+PiAgICAgKiBA cGFyYW0gc3JjDQo+ID4gPj4+Pj4gICAgICogICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwg c291cmNlIGRhdGEuDQo+ID4gPj4+Pj4gICAgICogICBNdXN0IGJlIDE2IGJ5dGUgYWxpZ25lZC4N Cj4gPiA+Pj4+PiAgICAgKiBAcGFyYW0gbGVuDQo+ID4gPj4+Pj4gICAgICogICBOdW1iZXIgb2Yg Ynl0ZXMgdG8gY29weS4NCj4gPiA+Pj4+PiAgICAgKiAgIE11c3QgYmUgZGl2aXNpYmxlIGJ5IDE2 Lg0KPiA+ID4+Pj4+ICAgICAqLw0KPiA+ID4+Pj4+IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ID4+ Pj4+IHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lDQo+ID4gPj4+Pj4gX19hdHRyaWJ1dGVfXygo X19ub25udWxsX18oMSwgMiksIF9fYWNjZXNzX18od3JpdGVfb25seSwgMSwgMyksDQo+ID4gPj4+ PiBfX2FjY2Vzc19fKHJlYWRfb25seSwgMiwgMykpKQ0KPiA+ID4+Pj4+IHZvaWQgcnRlX21lbWNw eV9udDE2YSh2b2lkICogX19ydGVfcmVzdHJpY3QgZHN0LCBjb25zdCB2b2lkICoNCj4gPiA+Pj4+ IF9fcnRlX3Jlc3RyaWN0IHNyYywgc2l6ZV90IGxlbikNCj4gPiA+Pj4+PiB7DQo+ID4gPj4+Pj4g ICAgICAgIGNvbnN0IHZvaWQgKiBjb25zdCAgZW5kID0gUlRFX1BUUl9BREQoc3JjLCBsZW4pOw0K PiA+ID4+Pj4+DQo+ID4gPj4+Pj4gICAgICAgIFJURV9BU1NFUlQocnRlX2lzX2FsaWduZWQoZHN0 LCBzaXplb2YoX19tMTI4aSkpKTsNCj4gPiA+Pj4+PiAgICAgICAgUlRFX0FTU0VSVChydGVfaXNf YWxpZ25lZChzcmMsIHNpemVvZihfX20xMjhpKSkpOw0KPiA+ID4+Pj4+ICAgICAgICBSVEVfQVNT RVJUKHJ0ZV9pc19hbGlnbmVkKGxlbiwgc2l6ZW9mKF9fbTEyOGkpKSk7DQo+ID4gPj4+Pj4NCj4g PiA+Pj4+PiAgICAgICAgLyogQ29weSBsYXJnZSBwb3J0aW9uIG9mIGRhdGEuICovDQo+ID4gPj4+ Pj4gICAgICAgIHdoaWxlIChSVEVfUFRSX0RJRkYoZW5kLCBzcmMpID49IDQgKiBzaXplb2YoX19t MTI4aSkpIHsNCj4gPiA+Pj4+PiAgICAgICAgICAgIHJlZ2lzdGVyIF9fbTEyOGkgICAgeG1tMCwg eG1tMSwgeG1tMiwgeG1tMzsNCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IC8qIE5vdGU6IFdvcmthcm91 bmQgZm9yIF9tbV9zdHJlYW1fbG9hZF9zaTEyOCgpIG5vdCB0YWtpbmcgYQ0KPiA+IGNvbnN0DQo+ ID4gPj4+PiBwb2ludGVyIGFzIHBhcmFtZXRlci4gKi8NCj4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBk aWFnbm9zdGljIHB1c2gNCj4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQg Ii1XZGlzY2FyZGVkLXF1YWxpZmllcnMiDQo+ID4gPj4+Pj4gICAgICAgICAgICB4bW0wID0gX21t X3N0cmVhbV9sb2FkX3NpMTI4KFJURV9QVFJfQUREKHNyYywgMCAqDQo+ID4gPj4+PiBzaXplb2Yo X19tMTI4aSkpKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgIHhtbTEgPSBfbW1fc3RyZWFtX2xvYWRf c2kxMjgoUlRFX1BUUl9BREQoc3JjLCAxICoNCj4gPiA+Pj4+IHNpemVvZihfX20xMjhpKSkpOw0K PiA+ID4+Pj4+ICAgICAgICAgICAgeG1tMiA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChSVEVfUFRS X0FERChzcmMsIDIgKg0KPiA+ID4+Pj4gc2l6ZW9mKF9fbTEyOGkpKSk7DQo+ID4gPj4+Pj4gICAg ICAgICAgICB4bW0zID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFJURV9QVFJfQUREKHNyYywgMyAq DQo+ID4gPj4+PiBzaXplb2YoX19tMTI4aSkpKTsNCj4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFn bm9zdGljIHBvcA0KPiA+ID4+Pj4+ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTEyOChSVEVfUFRS X0FERChkc3QsIDAgKg0KPiA+IHNpemVvZihfX20xMjhpKSksDQo+ID4gPj4+PiB4bW0wKTsNCj4g PiA+Pj4+PiAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kxMjgoUlRFX1BUUl9BREQoZHN0LCAxICoN Cj4gPiBzaXplb2YoX19tMTI4aSkpLA0KPiA+ID4+Pj4geG1tMSk7DQo+ID4gPj4+Pj4gICAgICAg ICAgICBfbW1fc3RyZWFtX3NpMTI4KFJURV9QVFJfQUREKGRzdCwgMiAqDQo+ID4gc2l6ZW9mKF9f bTEyOGkpKSwNCj4gPiA+Pj4+IHhtbTIpOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgX21tX3N0cmVh bV9zaTEyOChSVEVfUFRSX0FERChkc3QsIDMgKg0KPiA+IHNpemVvZihfX20xMjhpKSksDQo+ID4g Pj4+PiB4bW0zKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgIHNyYyA9IFJURV9QVFJfQUREKHNyYywg NCAqIHNpemVvZihfX20xMjhpKSk7DQo+ID4gPj4+Pj4gICAgICAgICAgICBkc3QgPSBSVEVfUFRS X0FERChkc3QsIDQgKiBzaXplb2YoX19tMTI4aSkpOw0KPiA+ID4+Pj4+ICAgICAgICB9DQo+ID4g Pj4+Pj4NCj4gPiA+Pj4+PiAgICAgICAgLyogQ29weSByZW1haW5pbmcgZGF0YS4gKi8NCj4gPiA+ Pj4+PiAgICAgICAgd2hpbGUgKHNyYyAhPSBlbmQpIHsNCj4gPiA+Pj4+PiAgICAgICAgICAgIHJl Z2lzdGVyIF9fbTEyOGkgICAgeG1tOw0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gLyogTm90ZTogV29y a2Fyb3VuZCBmb3IgX21tX3N0cmVhbV9sb2FkX3NpMTI4KCkgbm90IHRha2luZyBhDQo+ID4gY29u c3QNCj4gPiA+Pj4+IHBvaW50ZXIgYXMgcGFyYW1ldGVyLiAqLw0KPiA+ID4+Pj4+ICNwcmFnbWEg R0NDIGRpYWdub3N0aWMgcHVzaA0KPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdu b3JlZCAiLVdkaXNjYXJkZWQtcXVhbGlmaWVycyINCj4gPiA+Pj4+PiAgICAgICAgICAgIHhtbSA9 IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChzcmMpOw0KPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdu b3N0aWMgcG9wDQo+ID4gPj4+Pj4gICAgICAgICAgICBfbW1fc3RyZWFtX3NpMTI4KGRzdCwgeG1t KTsNCj4gPiA+Pj4+PiAgICAgICAgICAgIHNyYyA9IFJURV9QVFJfQUREKHNyYywgc2l6ZW9mKF9f bTEyOGkpKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgIGRzdCA9IFJURV9QVFJfQUREKGRzdCwgc2l6 ZW9mKF9fbTEyOGkpKTsNCj4gPiA+Pj4+PiAgICAgICAgfQ0KPiA+ID4+Pj4+IH0NCj4gPiA+Pj4+ Pg0KPiA+ID4+Pj4+IC8qKg0KPiA+ID4+Pj4+ICAgICAqIEB3YXJuaW5nDQo+ID4gPj4+Pj4gICAg ICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90 aWNlLg0KPiA+ID4+Pj4+ICAgICAqDQo+ID4gPj4+Pj4gICAgICogQ29weSBkYXRhIGluIGJsb2Nr cyBvZiA0IGJ5dGUgZnJvbSBhbGlnbmVkIG5vbi10ZW1wb3JhbA0KPiA+IHNvdXJjZQ0KPiA+ID4+ Pj4+ICAgICAqIHRvIGFsaWduZWQgbm9uLXRlbXBvcmFsIGRlc3RpbmF0aW9uLg0KPiA+ID4+Pj4+ ICAgICAqDQo+ID4gPj4+Pj4gICAgICogQHBhcmFtIGRzdA0KPiA+ID4+Pj4+ICAgICAqICAgUG9p bnRlciB0byB0aGUgbm9uLXRlbXBvcmFsIGRlc3RpbmF0aW9uIG9mIHRoZSBkYXRhLg0KPiA+ID4+ Pj4+ICAgICAqICAgTXVzdCBiZSA0IGJ5dGUgYWxpZ25lZC4NCj4gPiA+Pj4+PiAgICAgKiBAcGFy YW0gc3JjDQo+ID4gPj4+Pj4gICAgICogICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwgc291 cmNlIGRhdGEuDQo+ID4gPj4+Pj4gICAgICogICBNdXN0IGJlIDQgYnl0ZSBhbGlnbmVkLg0KPiA+ ID4+Pj4+ICAgICAqIEBwYXJhbSBsZW4NCj4gPiA+Pj4+PiAgICAgKiAgIE51bWJlciBvZiBieXRl cyB0byBjb3B5Lg0KPiA+ID4+Pj4+ICAgICAqICAgTXVzdCBiZSBkaXZpc2libGUgYnkgNC4NCj4g PiA+Pj4+PiAgICAgKi8NCj4gPiA+Pj4+PiBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+Pj4+PiBz dGF0aWMgX19ydGVfYWx3YXlzX2lubGluZQ0KPiA+ID4+Pj4+IF9fYXR0cmlidXRlX18oKF9fbm9u bnVsbF9fKDEsIDIpLCBfX2FjY2Vzc19fKHdyaXRlX29ubHksIDEsIDMpLA0KPiA+ID4+Pj4gX19h Y2Nlc3NfXyhyZWFkX29ubHksIDIsIDMpKSkNCj4gPiA+Pj4+PiB2b2lkIHJ0ZV9tZW1jcHlfbnQ0 YSh2b2lkICogX19ydGVfcmVzdHJpY3QgZHN0LCBjb25zdCB2b2lkICoNCj4gPiA+Pj4+IF9fcnRl X3Jlc3RyaWN0IHNyYywgc2l6ZV90IGxlbikNCj4gPiA+Pj4+PiB7DQo+ID4gPj4+Pj4gICAgICAg IGludDMyX3QgICAgICAgICAgICAgYnVmW3NpemVvZihfX20xMjhpKSAvIHNpemVvZihpbnQzMl90 KV0NCj4gPiA+Pj4+IF9fcnRlX2FsaWduZWQoc2l6ZW9mKF9fbTEyOGkpKTsNCj4gPiA+Pj4+PiAg ICAgICAgLyoqIEFkZHJlc3Mgb2Ygc291cmNlIGRhdGEsIHJvdW5kZWQgZG93biB0byBhY2hpZXZl DQo+ID4gPj4gYWxpZ25tZW50Lg0KPiA+ID4+Pj4gKi8NCj4gPiA+Pj4+PiAgICAgICAgY29uc3Qg dm9pZCAqICAgICAgICBzcmNhID0gUlRFX1BUUl9BTElHTl9GTE9PUihzcmMsDQo+ID4gPj4+PiBz aXplb2YoX19tMTI4aSkpOw0KPiA+ID4+Pj4+ICAgICAgICAvKiogQWRkcmVzcyBvZiBlbmQgb2Yg c291cmNlIGRhdGEsIHJvdW5kZWQgZG93biB0byBhY2hpZXZlDQo+ID4gPj4+PiBhbGlnbm1lbnQu ICovDQo+ID4gPj4+Pj4gICAgICAgIGNvbnN0IHZvaWQgKiBjb25zdCAgc3JjZW5kYSA9DQo+ID4g Pj4+PiBSVEVfUFRSX0FMSUdOX0ZMT09SKFJURV9QVFJfQUREKHNyYywgbGVuKSwgc2l6ZW9mKF9f bTEyOGkpKTsNCj4gPiA+Pj4+PiAgICAgICAgY29uc3QgaW50ICAgICAgICAgICBvZmZzZXQgPSAg UlRFX1BUUl9ESUZGKHNyYywgc3JjYSkgLw0KPiA+ID4+Pj4gc2l6ZW9mKGludDMyX3QpOw0KPiA+ ID4+Pj4+ICAgICAgICByZWdpc3RlciBfX20xMjhpICAgIHhtbTA7DQo+ID4gPj4+Pj4NCj4gPiA+ Pj4+PiAgICAgICAgUlRFX0FTU0VSVChydGVfaXNfYWxpZ25lZChkc3QsIHNpemVvZihpbnQzMl90 KSkpOw0KPiA+ID4+Pj4+ICAgICAgICBSVEVfQVNTRVJUKHJ0ZV9pc19hbGlnbmVkKHNyYywgc2l6 ZW9mKGludDMyX3QpKSk7DQo+ID4gPj4+Pj4gICAgICAgIFJURV9BU1NFUlQocnRlX2lzX2FsaWdu ZWQobGVuLCBzaXplb2YoaW50MzJfdCkpKTsNCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+ICAgICAgICBp ZiAodW5saWtlbHkobGVuID09IDApKSByZXR1cm47DQo+ID4gPj4+Pj4NCj4gPiA+Pj4+PiAgICAg ICAgLyogQ29weSBmaXJzdCwgbm9uLV9fbTEyOGkgYWxpZ25lZCwgcGFydCBvZiBzb3VyY2UgZGF0 YS4NCj4gPiAqLw0KPiA+ID4+Pj4+ICAgICAgICBpZiAob2Zmc2V0KSB7DQo+ID4gPj4+Pj4gLyog Tm90ZTogV29ya2Fyb3VuZCBmb3IgX21tX3N0cmVhbV9sb2FkX3NpMTI4KCkgbm90IHRha2luZyBh DQo+ID4gY29uc3QNCj4gPiA+Pj4+IHBvaW50ZXIgYXMgcGFyYW1ldGVyLiAqLw0KPiA+ID4+Pj4+ ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaA0KPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdu b3N0aWMgaWdub3JlZCAiLVdkaXNjYXJkZWQtcXVhbGlmaWVycyINCj4gPiA+Pj4+PiAgICAgICAg ICAgIHhtbTAgPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoc3JjYSk7DQo+ID4gPj4+Pj4gICAgICAg ICAgICBfbW1fc3RvcmVfc2kxMjgoKHZvaWQgKilidWYsIHhtbTApOw0KPiA+ID4+Pj4+ICNwcmFn bWEgR0NDIGRpYWdub3N0aWMgcG9wDQo+ID4gPj4+Pj4gICAgICAgICAgICBzd2l0Y2ggKG9mZnNl dCkgew0KPiA+ID4+Pj4+ICAgICAgICAgICAgICAgIGNhc2UgMToNCj4gPiA+Pj4+PiAgICAgICAg ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ID4gPj4+ PiBzaXplb2YoaW50MzJfdCkpLCBidWZbMV0pOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAg ICBpZiAodW5saWtlbHkobGVuID09IDEgKiBzaXplb2YoaW50MzJfdCkpKQ0KPiA+IHJldHVybjsN Cj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQURE KGRzdCwgMSAqDQo+ID4gPj4+PiBzaXplb2YoaW50MzJfdCkpLCBidWZbMl0pOw0KPiA+ID4+Pj4+ ICAgICAgICAgICAgICAgICAgICBpZiAodW5saWtlbHkobGVuID09IDIgKiBzaXplb2YoaW50MzJf dCkpKQ0KPiA+IHJldHVybjsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgX21tX3N0cmVh bV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMiAqDQo+ID4gPj4+PiBzaXplb2YoaW50MzJfdCkpLCBi dWZbM10pOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiA+Pj4+PiAg ICAgICAgICAgICAgICBjYXNlIDI6DQo+ID4gPj4+Pj4gICAgICAgICAgICAgICAgICAgIF9tbV9z dHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDAgKg0KPiA+ID4+Pj4gc2l6ZW9mKGludDMyX3Qp KSwgYnVmWzJdKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KGxl biA9PSAxICogc2l6ZW9mKGludDMyX3QpKSkNCj4gPiByZXR1cm47DQo+ID4gPj4+Pj4gICAgICAg ICAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDEgKg0KPiA+ID4+ Pj4gc2l6ZW9mKGludDMyX3QpKSwgYnVmWzNdKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAg ICAgYnJlYWs7DQo+ID4gPj4+Pj4gICAgICAgICAgICAgICAgY2FzZSAzOg0KPiA+ID4+Pj4+ICAg ICAgICAgICAgICAgICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BUUl9BREQoZHN0LCAwICoNCj4g PiA+Pj4+IHNpemVvZihpbnQzMl90KSksIGJ1ZlszXSk7DQo+ID4gPj4+Pj4gICAgICAgICAgICAg ICAgICAgIGJyZWFrOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgfQ0KPiA+ID4+Pj4+ICAgICAgICAg ICAgc3JjYSA9IFJURV9QVFJfQUREKHNyY2EsICg0IC0gb2Zmc2V0KSAqDQo+ID4gc2l6ZW9mKGlu dDMyX3QpKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgIGRzdCA9IFJURV9QVFJfQUREKGRzdCwgKDQg LSBvZmZzZXQpICoNCj4gPiBzaXplb2YoaW50MzJfdCkpOw0KPiA+ID4+Pj4+ICAgICAgICB9DQo+ ID4gPj4+Pj4NCj4gPiA+Pj4+PiAgICAgICAgLyogQ29weSBtaWRkbGUsIF9fbTEyOGkgYWxpZ25l ZCwgcGFydCBvZiBzb3VyY2UgZGF0YS4gKi8NCj4gPiA+Pj4+PiAgICAgICAgd2hpbGUgKHNyY2Eg IT0gc3JjZW5kYSkgew0KPiA+ID4+Pj4+IC8qIE5vdGU6IFdvcmthcm91bmQgZm9yIF9tbV9zdHJl YW1fbG9hZF9zaTEyOCgpIG5vdCB0YWtpbmcgYQ0KPiA+IGNvbnN0DQo+ID4gPj4+PiBwb2ludGVy IGFzIHBhcmFtZXRlci4gKi8NCj4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gN Cj4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGlzY2FyZGVkLXF1 YWxpZmllcnMiDQo+ID4gPj4+Pj4gICAgICAgICAgICB4bW0wID0gX21tX3N0cmVhbV9sb2FkX3Np MTI4KHNyY2EpOw0KPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wDQo+ID4gPj4+ Pj4gICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgoKHZvaWQgKilidWYsIHhtbTApOw0KPiA+ID4+ Pj4+ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMCAqIHNpemVv ZihpbnQzMl90KSksDQo+ID4gPj4+PiBidWZbMF0pOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgX21t X3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMSAqIHNpemVvZihpbnQzMl90KSksDQo+ID4g Pj4+PiBidWZbMV0pOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9Q VFJfQUREKGRzdCwgMiAqIHNpemVvZihpbnQzMl90KSksDQo+ID4gPj4+PiBidWZbMl0pOw0KPiA+ ID4+Pj4+ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMyAqIHNp emVvZihpbnQzMl90KSksDQo+ID4gPj4+PiBidWZbM10pOw0KPiA+ID4+Pj4+ICAgICAgICAgICAg c3JjYSA9IFJURV9QVFJfQUREKHNyY2EsIHNpemVvZihfX20xMjhpKSk7DQo+ID4gPj4+Pj4gICAg ICAgICAgICBkc3QgPSBSVEVfUFRSX0FERChkc3QsIDQgKiBzaXplb2YoaW50MzJfdCkpOw0KPiA+ ID4+Pj4+ICAgICAgICB9DQo+ID4gPj4+Pj4NCj4gPiA+Pj4+PiAgICAgICAgLyogQ29weSBsYXN0 LCBub24tX19tMTI4aSBhbGlnbmVkLCBwYXJ0IG9mIHNvdXJjZSBkYXRhLiAqLw0KPiA+ID4+Pj4+ ICAgICAgICBpZiAoUlRFX1BUUl9ESUZGKHNyY2EsIHNyYykgIT0gNCkgew0KPiA+ID4+Pj4+IC8q IE5vdGU6IFdvcmthcm91bmQgZm9yIF9tbV9zdHJlYW1fbG9hZF9zaTEyOCgpIG5vdCB0YWtpbmcg YQ0KPiA+IGNvbnN0DQo+ID4gPj4+PiBwb2ludGVyIGFzIHBhcmFtZXRlci4gKi8NCj4gPiA+Pj4+ PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gNCj4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFn bm9zdGljIGlnbm9yZWQgIi1XZGlzY2FyZGVkLXF1YWxpZmllcnMiDQo+ID4gPj4+Pj4gICAgICAg ICAgICB4bW0wID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KHNyY2EpOw0KPiA+ID4+Pj4+ICAgICAg ICAgICAgX21tX3N0b3JlX3NpMTI4KCh2b2lkICopYnVmLCB4bW0wKTsNCj4gPiA+Pj4+PiAjcHJh Z21hIEdDQyBkaWFnbm9zdGljIHBvcA0KPiA+ID4+Pj4+ICAgICAgICAgICAgc3dpdGNoIChvZmZz ZXQpIHsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICBjYXNlIDE6DQo+ID4gPj4+Pj4gICAgICAg ICAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDAgKg0KPiA+ID4+ Pj4gc2l6ZW9mKGludDMyX3QpKSwgYnVmWzBdKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAg ICAgYnJlYWs7DQo+ID4gPj4+Pj4gICAgICAgICAgICAgICAgY2FzZSAyOg0KPiA+ID4+Pj4+ICAg ICAgICAgICAgICAgICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BUUl9BREQoZHN0LCAwICoNCj4g PiA+Pj4+IHNpemVvZihpbnQzMl90KSksIGJ1ZlswXSk7DQo+ID4gPj4+Pj4gICAgICAgICAgICAg ICAgICAgIGlmICh1bmxpa2VseShSVEVfUFRSX0RJRkYoc3JjYSwgc3JjKSA9PSAxICoNCj4gPiA+ Pj4+IHNpemVvZihpbnQzMl90KSkpIHJldHVybjsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAg ICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMSAqDQo+ID4gPj4+PiBzaXplb2Yo aW50MzJfdCkpLCBidWZbMV0pOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBicmVhazsN Cj4gPiA+Pj4+PiAgICAgICAgICAgICAgICBjYXNlIDM6DQo+ID4gPj4+Pj4gICAgICAgICAgICAg ICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDAgKg0KPiA+ID4+Pj4gc2l6 ZW9mKGludDMyX3QpKSwgYnVmWzBdKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgaWYg KHVubGlrZWx5KFJURV9QVFJfRElGRihzcmNhLCBzcmMpID09IDEgKg0KPiA+ID4+Pj4gc2l6ZW9m KGludDMyX3QpKSkgcmV0dXJuOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBfbW1fc3Ry ZWFtX3NpMzIoUlRFX1BUUl9BREQoZHN0LCAxICoNCj4gPiA+Pj4+IHNpemVvZihpbnQzMl90KSks IGJ1ZlsxXSk7DQo+ID4gPj4+Pj4gICAgICAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShSVEVf UFRSX0RJRkYoc3JjYSwgc3JjKSA9PSAyICoNCj4gPiA+Pj4+IHNpemVvZihpbnQzMl90KSkpIHJl dHVybjsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9Q VFJfQUREKGRzdCwgMiAqDQo+ID4gPj4+PiBzaXplb2YoaW50MzJfdCkpLCBidWZbMl0pOw0KPiA+ ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiA+Pj4+PiAgICAgICAgICAgIH0N Cj4gPiA+Pj4+PiAgICAgICAgfQ0KPiA+ID4+Pj4+IH0NCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4NCj4g PiA+Pj4NCj4gPiA+Pg0KPiA+ID4NCj4gPg0KDQo=