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 85882A00C4; Mon, 25 Jul 2022 00:18:31 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 65DC94021E; Mon, 25 Jul 2022 00:18:31 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id EC771400D4 for ; Mon, 25 Jul 2022 00:18:29 +0200 (CEST) X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Subject: RE: [RFC v2] non-temporal memcpy Date: Mon, 25 Jul 2022 00:18:26 +0200 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35D871E6@smartserver.smartshare.dk> In-Reply-To: <262c214b-7870-a221-2621-6684dce42823@yandex.ru> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [RFC v2] non-temporal memcpy Thread-Index: AdifYjmzwv8JvkFhT0yj+PrUQl+y2QAQTHNw References: <98CBD80474FA8B44BF855DF32C47DC35D871D4@smartserver.smartshare.dk> <98CBD80474FA8B44BF855DF32C47DC35D871DB@smartserver.smartshare.dk> <262c214b-7870-a221-2621-6684dce42823@yandex.ru> From: =?UTF-8?B?TW9ydGVuIEJyw7hydXA=?= To: "Konstantin Ananyev" , , "Bruce Richardson" Cc: "Jan Viktorin" , "Ruifeng Wang" , "David Christensen" , "Stanislaw Kardach" 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 PiBGcm9tOiBLb25zdGFudGluIEFuYW55ZXYgW21haWx0bzprb25zdGFudGluLnYuYW5hbnlldkB5 YW5kZXgucnVdDQo+IFNlbnQ6IFN1bmRheSwgMjQgSnVseSAyMDIyIDE1LjM1DQo+IA0KPiAyMi8w Ny8yMDIyIDExOjQ0LCBNb3J0ZW4gQnLDuHJ1cCDQv9C40YjQtdGCOg0KPiA+PiBGcm9tOiBLb25z dGFudGluIEFuYW55ZXYgW21haWx0bzprb25zdGFudGluLnYuYW5hbnlldkB5YW5kZXgucnVdDQo+ ID4+IFNlbnQ6IEZyaWRheSwgMjIgSnVseSAyMDIyIDAxLjIwDQo+ID4+DQo+ID4+IEhpIE1vcnRl biwNCj4gPj4NCj4gPj4+IFRoaXMgUkZDIHByb3Bvc2VzIGEgc2V0IG9mIGZ1bmN0aW9ucyBvcHRp bWl6ZWQgZm9yIG5vbi10ZW1wb3JhbA0KPiA+PiBtZW1vcnkgY29weS4NCj4gPj4+DQo+ID4+PiBB dCB0aGlzIHN0YWdlLCBJIGFtIGFza2luZyBmb3IgZmVlZGJhY2sgb24gdGhlIGNvbmNlcHQuDQo+ ID4+Pg0KPiA+Pj4gQXBwbGljYXRpb25zIHNvbWV0aW1lcyBkYXRhIHRvIGFub3RoZXIgbWVtb3J5 IGxvY2F0aW9uLCB3aGljaCBpcw0KPiBvbmx5DQo+ID4+IHVzZWQNCj4gPj4+IG11Y2ggbGF0ZXIu DQo+ID4+PiBJbiB0aGlzIGNhc2UsIGl0IGlzIGluZWZmaWNpZW50IHRvIHBvbGx1dGUgdGhlIGRh dGEgY2FjaGUgd2l0aCB0aGUNCj4gPj4gY29waWVkDQo+ID4+PiBkYXRhLg0KPiA+Pj4NCj4gPj4+ IEFuIGV4YW1wbGUgdXNlIGNhc2UgKG9yaWdpbmF0aW5nIGZyb20gYSByZWFsIGxpZmUgYXBwbGlj YXRpb24pOg0KPiA+Pj4gQ29weWluZyBmaWx0ZXJlZCBwYWNrZXRzLCBvciB0aGUgZmlyc3QgcGFy dCBvZiB0aGVtLCBpbnRvIGEgY2FwdHVyZQ0KPiA+PiBidWZmZXINCj4gPj4+IGZvciBvZmZsaW5l IGFuYWx5c2lzLg0KPiA+Pj4NCj4gPj4+IFRoZSBwdXJwb3NlIG9mIHRoZXNlIGZ1bmN0aW9ucyBp cyB0byBhY2hpZXZlIGEgcGVyZm9ybWFuY2UgZ2FpbiBieQ0KPiA+PiBub3QNCj4gPj4+IHBvbGx1 dGluZyB0aGUgY2FjaGUgd2hlbiBjb3B5aW5nIGRhdGEuDQo+ID4+PiBBbHRob3VnaCB0aGUgdGhy b3VnaHB1dCBtYXkgYmUgaW1wcm92ZWQgYnkgZnVydGhlciBvcHRpbWl6YXRpb24sIEkNCj4gZG8N Cj4gPj4gbm90DQo+ID4+PiBjb25zaWRlciB0aHJvdWdwdXQgb3B0aW1pemF0aW9uIHJlbGV2YW50 IGluaXRpYWxseS4NCj4gPj4+DQo+ID4+PiBUaGUgeDg2IG5vbi10ZW1wb3JhbCBsb2FkIGluc3Ry dWN0aW9ucyBoYXZlIDE2IGJ5dGUgYWxpZ25tZW50DQo+ID4+PiByZXF1aXJlbWVudHMgWzFdLCB3 aGlsZSBBUk0gbm9uLXRlbXBvcmFsIGxvYWQgaW5zdHJ1Y3Rpb25zIGFyZQ0KPiA+PiBhdmFpbGFi bGUgd2l0aA0KPiA+Pj4gNCBieXRlIGFsaWdubWVudCByZXF1aXJlbWVudHMgWzJdLg0KPiA+Pj4g Qm90aCBwbGF0Zm9ybXMgb2ZmZXIgbm9uLXRlbXBvcmFsIHN0b3JlIGluc3RydWN0aW9ucyB3aXRo IDQgYnl0ZQ0KPiA+PiBhbGlnbm1lbnQNCj4gPj4+IHJlcXVpcmVtZW50cy4NCj4gPj4+DQo+ID4+ PiBJbiBhZGRpdGlvbiB0byB0aGUgcHJpbWFyeSBmdW5jdGlvbiB3aXRob3V0IGFueSBhbGlnbm1l bnQNCj4gPj4gcmVxdWlyZW1lbnRzLCB3ZQ0KPiA+Pj4gYWxzbyBwcm92aWRlIGZ1bmN0aW9ucyBm b3IgcmVzcGVjdGl2bHkgMTYgYW5kIDQgYnl0ZSBhbGlnbmVkIGFjY2Vzcw0KPiA+PiBmb3INCj4g Pj4+IHBlcmZvcm1hbmNlIHB1cnBvc2VzLg0KPiA+Pj4NCj4gPj4+IFRoZSBmdW5jdGlvbiBuYW1l cyByZXNlbWJsZSBzdGFuZGFyZCBDIGxpYnJhcnkgZnVuY3Rpb24gbmFtZXMsIGJ1dA0KPiA+PiB0 aGVpcg0KPiA+Pj4gc2lnbmF0dXJlcyBhcmUgaW50ZW50aW9uYWxseSBkaWZmZXJlbnQuIE5vIG5l ZWQgdG8gZHJhZyBsZWdhY3kgaW50bw0KPiA+PiBpdC4NCj4gPj4+DQo+ID4+PiBOQjogRG9uJ3Qg Y29tbWVudCBvbiBzcGFjZXMgZm9yIGluZGVudGF0aW9uOyBhIHBhdGNoIHdpbGwgZm9sbG93DQo+ IERQREsNCj4gPj4gY29kaW5nDQo+ID4+PiBzdHlsZSBhbmQgdXNlIFRBQi4NCj4gPj4NCj4gPj4N Cj4gPj4gSSB0aGluayB0aGVyZSB3ZXJlIGRpc2N1c3Npb25zIGluIG90aGVyIGRpcmVjdGlvbiAt IHJlbW92ZQ0KPiBydGVfbWVtY3B5KCkNCj4gPj4gY29tcGxldGVseSBhbmQgdXNlIG1lbWNweSgp IGluc3RlYWQuLi4NCj4gPg0KPiA+IFllcywgdGhlIGhpZ2hseSBvcHRpbWl6ZWQgcnRlX21lbWNw eSgpIGltcGxlbWVudGF0aW9uIG9mIG1lbWNweSgpIGhhcw0KPiBiZWNvbWUgb2Jzb2xldGUsIG5v dyB0aGF0IG1vZGVybiBjb21waWxlcnMgcHJvdmlkZSBhbiBlZmZpY2llbnQNCj4gbWVtY3B5KCkg aW1wbGVtZW50YXRpb24uDQo+ID4NCj4gPiBJdCdzIGFuIGV4Y2VsbGVudCByZWZlcmVuY2UsIGJl Y2F1c2Ugd2Ugc2hvdWxkIGxlYXJuIGZyb20gaXQsIGFuZA0KPiBhdm9pZCBpbnRyb2R1Y2luZyBz aW1pbGFyIG1pc3Rha2VzIHdpdGggbm9uLXRlbXBvcmFsIG1lbWNweS4NCj4gPg0KPiA+PiBCdXQg aWYgd2UgaGF2ZSBhIGdvb2QgdXNlIGNhc2UgZm9yIHRoYXQsIHRoZW4gSSBhbSBwb3NpdGl2ZSBp bg0KPiA+PiBwcmluY2lwbGUuDQo+ID4NCj4gPiBUaGUgc3RhbmRhcmQgQyBsaWJyYXJ5IGRvZXNu J3Qgb2ZmZXIgbm9uLXRlbXBvcmFsIG1lbWNweSgpLCBzbyB3ZQ0KPiBuZWVkIHRvIGltcGxlbWVu dCBpdCBvdXJzZWx2ZXMuDQo+ID4NCj4gPj4gVGhvdWdoIEkgdGhpbmsgd2UgbmVlZCBhIGNsZWFy IHVzZS1jYXNlIHdpdGhpbiBkcGRrIGZvciBpdA0KPiA+PiB0byBkZW1vbnN0cmF0ZSBwZXJmb21h bmNlIGdhaW4uDQo+ID4NCj4gPiBUaGUgcGVyZm9ybWFuY2UgZ2FpbiBpcyB0byBhdm9pZCBwb2xs dXRpbmcgdGhlIGRhdGEgY2FjaGUuIERQREsNCj4gZXhhbXBsZSBhcHBsaWNhdGlvbnMsIGxpa2Ug bDNmd2QsIGFyZSBwcm9iYWJseSB0b28gcHJpbWl0aXZlIHRvIG1lYXN1cmUNCj4gYW55IGJlbmVm aXQgaW4gdGhpcyByZWdhcmQuDQo+ID4NCj4gPj4gUHJvYmFibHkgY29weWluZyBwYWNrZXRzIHdp dGhpbiBwZHVtcCBsaWIsIG9yIGV4YW1wbGVzL2RtYS4gb3IgLi4uDQo+ID4NCj4gPiBHb29kIHBv aW50IC0gdGhlIG5ldyBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgc29tZXdoZXJlIHdpdGhpbiBE UERLLg0KPiBGb3IgdGhpcyBwdXJwb3NlLCBJIHdpbGwgbG9vayBpbnRvIG1vZGlmeWluZyBydGVf cGt0bWJ1Zl9jb3B5KCksIHdoaWNoDQo+IGlzIHVzZWQgYnkgcGR1bXBfY29weSgpLCB0byB1c2Ug bm9uLXRlbXBvcmFsIGNvcHlpbmcgb2YgdGhlIHBhY2tldA0KPiBkYXRhLg0KPiA+DQo+ID4+IEFu b3RoZXIgdGhvdWdodCAtIGRvIHdlIHJlYWxseSBuZWVkIGEgc2VwYXJhdGUgaW5saW5lIGZ1bmN0 aW9uIGZvcg0KPiBlYWNoDQo+ID4+IGZsYXZvdXI/DQo+ID4+IE1pZ2h0IGJlIGp1c3Qgb25lIG5v bi1pbmxpbmUgcnRlX21lbWNweV9udChkc3QsIHNyYywgc2l6ZSwgZmxhZ3MpLA0KPiA+PiB3aGVy ZSBmbGFncyBjb3VsZCBiZSBjb21iaW5hdGlvbiBvZiBOVF9TUkMsIE5UX0RTVCwgYW5kIGtlZXAN Cj4gYWxpZ25tZW50DQo+ID4+IGRldGVjdGlvbi9kZWNpc2lvbnMgdG8gcGFydGljdWxhciBpbXBs ZW1lbnRhdGlvbj8NCj4gPg0KPiA+IFRoYW5rIHlvdSBmb3IgdGhlIGZlZWRiYWNrLCBLb25zdGFu dGluLg0KPiA+DQo+ID4gTXkgYW5zd2VyIHRvIHRoaXMgc3VnZ2VzdGlvbiBnZXRzIGEgbGl0dGxl IGxvbmd3aW5kZWQuLi4NCj4gPg0KPiA+IExvb2tpbmcgYXQgdGhlIERQREsgcGNhcG5nIGxpYnJh cnksIGl0IGNvcGllcyBhIDQgYnl0ZSBhbGlnbmVkDQo+IG1ldGFkYXRhIHN0cnVjdHVyZSBzaXpl ZCAyOCBieXRlLiBTbyBpdCBjYW4gZG8gd2l0aCA0IGJ5dGUgYWxpZ25lZA0KPiBmdW5jdGlvbnMu DQo+ID4NCj4gPiBPdXIgYXBwbGljYXRpb24gY2FuIGNhcHR1cmUgcGFja2V0cyBzdGFydGluZyBh dCB0aGUgSVAgaGVhZGVyLCB3aGljaA0KPiBpcyBvZmZzZXQgYnkgMTQgYnl0ZSAoRXRoZXJuZXQg aGVhZGVyIHNpemUpIGZyb20gdGhlIHBhY2tldCBidWZmZXIsIHNvDQo+IGl0IHJlcXVpcmVzIDIg Ynl0ZSBhbGlnbm1lbnQuIEFuZCB0aHVzLCByZXF1aXJpbmcgNCBieXRlIGFsaWdubWVudCBpcw0K PiBub3QgYWNjZXB0YWJsZS4NCj4gPg0KPiA+IE91ciBhcHBsaWNhdGlvbiB1c2VzIDE2IGJ5dGUg YWxpZ25tZW50IGluIHRoZSBjYXB0dXJlIGJ1ZmZlciBhcmVhLA0KPiBhbmQgY2FuIGJlbmVmaXQg ZnJvbSAxNiBieXRlIGFsaWduZWQgZnVuY3Rpb25zLiBGdXJ0aGVybW9yZSwgeDg2DQo+IHByb2Nl c3NvcnMgcmVxdWlyZSAxNiBieXRlIGFsaWdubWVudCBmb3Igbm9uLXRlbXBvcmFsIGxvYWQNCj4g aW5zdHJ1Y3Rpb25zLCBzbyBJIHRoaW5rIGEgMTYgYnl0ZSBhbGlnbmVkIG5vbi10ZW1wb3JhbCBt ZW1jcHkgZnVuY3Rpb24NCj4gc2hvdWxkIGJlIG9mZmVyZWQuDQo+IA0KPiANCj4gWWVzLCB4ODYg bmVlZHMgMTZCIGFsaWdubWVudCBmb3IgTlQgbG9hZC9zdG9yZXMNCj4gQnV0IHRoYXQncyBzdXBw b3NlZCB0byBiZSBhcmNoIHNwZWNpZmljIGxpbWl0YXRpb24sDQo+IHRoYXQgd2UgcHJvYmFibHkg d2FudCB0byBoaWRlLCBubz8NCg0KQWdyZWUuDQoNCj4gSW5zaWRlIHRoZSBmdW5jdGlvbiBjYW4g Y2hlY2sgYWxpZ25tZW50IG9mIGJvdGggc3JjIGFuZCBkc3QNCj4gYW5kIGRlY2lkZSBzaG91bGQg aXQgdXNlIE5UIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIG9yIGp1c3QNCj4gZG8gbm9ybWFsIGNv cHkuDQoNClllcywgSSdtIGV4cGVyaW1lbnRpbmcgd2l0aCB0aGUgeDg2IGlubGluZSBmdW5jdGlv biBzaG93biBiZWxvdy4gQW5kIGhvcGVmdWxseSwgd2l0aCBzb21lICJleHRlcm4gaW5saW5lIiBv ciBvdGhlciBtYWdpYywgSSBjYW4gaGlkZSB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBp biB0aGUgYXJjaCBzcGVjaWZpYyBoZWFkZXJzLCBhbmQgb25seSBleHBvc2UgdGhlIGZ1bmN0aW9u IGRlY2xhcmF0aW9uIG9mIHJ0ZV9tZW1jcHlfbnQoKSBpbiB0aGUgY29tbW9uIGhlYWRlci4NCg0K SSdtIGN1cnJlbnRseSB3b3JraW5nIG9uIHRoZSB4ODYgaW1wbGVtZW50YXRpb24gLSB3aGVuIEkn bSBzYXRpc2ZpZWQgd2l0aCB0aGF0LCBJJ2xsIGxvb2sgaW50byBob3cgdG8gaGlkZSB0aGUgaW1w bGVtZW50YXRpb25zIGluIHRoZSBhcmNoIHNwZWNpZmljIGhlYWRlciBmaWxlcywgYW5kIG9ubHkg ZXhwb3NlIHRoZSBjb21tb24gZnVuY3Rpb24gZGVjbGFyYXRpb24gaW4gdGhlIGdlbmVyaWMgaGVh ZGVyIGZpbGUgYWxzbyB1c2VkIGZvciBkb2N1bWVudGF0aW9uLiBJIHdvcmtzIGZvciBydGVfbWVt Y3B5KCksIHNvIEkgY2FuIHByb2JhYmx5IGZpbmQgdGhlIHdheSB0byBkbyBpdCB0aGVyZS4NCg0K LyoNCiAqIE5vbi1UZW1wb3JhbCBNZW1vcnkgT3BlcmF0aW9ucyBGbGFncy4NCiAqLw0KDQojZGVm aW5lIFJURV9NRU1PUFNfRl9MRU5BX01BU0sgIChVSU5UNjRfQygweEZFKSA8PCAwKSAgIC8qKiBM ZW5ndGggYWxpZ25tZW50IG1hc2suICovDQojZGVmaW5lIFJURV9NRU1PUFNfRl9MRU4yQSAgICAg IChVSU5UNjRfQygyKSA8PCAwKSAgICAgIC8qKiBMZW5ndGggaXMgMiBieXRlIGFsaWduZWQuICov DQojZGVmaW5lIFJURV9NRU1PUFNfRl9MRU40QSAgICAgIChVSU5UNjRfQyg0KSA8PCAwKSAgICAg IC8qKiBMZW5ndGggaXMgNCBieXRlIGFsaWduZWQuICovDQojZGVmaW5lIFJURV9NRU1PUFNfRl9M RU44QSAgICAgIChVSU5UNjRfQyg4KSA8PCAwKSAgICAgIC8qKiBMZW5ndGggaXMgOCBieXRlIGFs aWduZWQuICovDQojZGVmaW5lIFJURV9NRU1PUFNfRl9MRU4xNkEgICAgIChVSU5UNjRfQygxNikg PDwgMCkgICAgIC8qKiBMZW5ndGggaXMgMTYgYnl0ZSBhbGlnbmVkLiAqLw0KI2RlZmluZSBSVEVf TUVNT1BTX0ZfTEVOMzJBICAgICAoVUlOVDY0X0MoMzIpIDw8IDApICAgICAvKiogTGVuZ3RoIGlz IDMyIGJ5dGUgYWxpZ25lZC4gKi8NCiNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjY0QSAgICAgKFVJ TlQ2NF9DKDY0KSA8PCAwKSAgICAgLyoqIExlbmd0aCBpcyA2NCBieXRlIGFsaWduZWQuICovDQoj ZGVmaW5lIFJURV9NRU1PUFNfRl9MRU4xMjhBICAgIChVSU5UNjRfQygxMjgpIDw8IDApICAgIC8q KiBMZW5ndGggaXMgMTI4IGJ5dGUgYWxpZ25lZC4gKi8NCg0KI2RlZmluZSBSVEVfTUVNT1BTX0Zf RFNUQV9NQVNLICAoVUlOVDY0X0MoMHhGRSkgPDwgOCkgICAvKiogRGVzdGluYXRpb24gYWRkcmVz cyBhbGlnbm1lbnQgbWFzay4gKi8NCiNkZWZpbmUgUlRFX01FTU9QU19GX0RTVDJBICAgICAgKFVJ TlQ2NF9DKDIpIDw8IDgpICAgICAgLyoqIERlc3RpbmF0aW9uIGFkZHJlc3MgaXMgMiBieXRlIGFs aWduZWQuICovDQojZGVmaW5lIFJURV9NRU1PUFNfRl9EU1Q0QSAgICAgIChVSU5UNjRfQyg0KSA8 PCA4KSAgICAgIC8qKiBEZXN0aW5hdGlvbiBhZGRyZXNzIGlzIDQgYnl0ZSBhbGlnbmVkLiAqLw0K I2RlZmluZSBSVEVfTUVNT1BTX0ZfRFNUOEEgICAgICAoVUlOVDY0X0MoOCkgPDwgOCkgICAgICAv KiogRGVzdGluYXRpb24gYWRkcmVzcyBpcyA4IGJ5dGUgYWxpZ25lZC4gKi8NCiNkZWZpbmUgUlRF X01FTU9QU19GX0RTVDE2QSAgICAgKFVJTlQ2NF9DKDE2KSA8PCA4KSAgICAgLyoqIERlc3RpbmF0 aW9uIGFkZHJlc3MgaXMgMTYgYnl0ZSBhbGlnbmVkLiAqLw0KI2RlZmluZSBSVEVfTUVNT1BTX0Zf RFNUMzJBICAgICAoVUlOVDY0X0MoMzIpIDw8IDgpICAgICAvKiogRGVzdGluYXRpb24gYWRkcmVz cyBpcyAzMiBieXRlIGFsaWduZWQuICovDQojZGVmaW5lIFJURV9NRU1PUFNfRl9EU1Q2NEEgICAg IChVSU5UNjRfQyg2NCkgPDwgOCkgICAgIC8qKiBEZXN0aW5hdGlvbiBhZGRyZXNzIGlzIDY0IGJ5 dGUgYWxpZ25lZC4gKi8NCiNkZWZpbmUgUlRFX01FTU9QU19GX0RTVDEyOEEgICAgKFVJTlQ2NF9D KDEyOCkgPDwgOCkgICAgLyoqIERlc3RpbmF0aW9uIGFkZHJlc3MgaXMgMTI4IGJ5dGUgYWxpZ25l ZC4gKi8NCg0KI2RlZmluZSBSVEVfTUVNT1BTX0ZfU1JDQV9NQVNLICAoVUlOVDY0X0MoMHhGRSkg PDwgMTYpICAvKiogU291cmNlIGFkZHJlc3MgYWxpZ25tZW50IG1hc2suICovDQojZGVmaW5lIFJU RV9NRU1PUFNfRl9TUkMyQSAgICAgIChVSU5UNjRfQygyKSA8PCAxNikgICAgIC8qKiBTb3VyY2Ug YWRkcmVzcyBpcyAyIGJ5dGUgYWxpZ25lZC4gKi8NCiNkZWZpbmUgUlRFX01FTU9QU19GX1NSQzRB ICAgICAgKFVJTlQ2NF9DKDQpIDw8IDE2KSAgICAgLyoqIFNvdXJjZSBhZGRyZXNzIGlzIDQgYnl0 ZSBhbGlnbmVkLiAqLw0KI2RlZmluZSBSVEVfTUVNT1BTX0ZfU1JDOEEgICAgICAoVUlOVDY0X0Mo OCkgPDwgMTYpICAgICAvKiogU291cmNlIGFkZHJlc3MgaXMgOCBieXRlIGFsaWduZWQuICovDQoj ZGVmaW5lIFJURV9NRU1PUFNfRl9TUkMxNkEgICAgIChVSU5UNjRfQygxNikgPDwgMTYpICAgIC8q KiBTb3VyY2UgYWRkcmVzcyBpcyAxNiBieXRlIGFsaWduZWQuICovDQojZGVmaW5lIFJURV9NRU1P UFNfRl9TUkMzMkEgICAgIChVSU5UNjRfQygzMikgPDwgMTYpICAgIC8qKiBTb3VyY2UgYWRkcmVz cyBpcyAzMiBieXRlIGFsaWduZWQuICovDQojZGVmaW5lIFJURV9NRU1PUFNfRl9TUkM2NEEgICAg IChVSU5UNjRfQyg2NCkgPDwgMTYpICAgIC8qKiBTb3VyY2UgYWRkcmVzcyBpcyA2NCBieXRlIGFs aWduZWQuICovDQojZGVmaW5lIFJURV9NRU1PUFNfRl9TUkMxMjhBICAgIChVSU5UNjRfQygxMjgp IDw8IDE2KSAgIC8qKiBTb3VyY2UgYWRkcmVzcyBpcyAxMjggYnl0ZSBhbGlnbmVkLiAqLw0KDQov KioNCiAqIEB3YXJuaW5nDQogKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ug d2l0aG91dCBwcmlvciBub3RpY2UuDQogKg0KICogTm9uLXRlbXBvcmFsIG1lbW9yeSBjb3B5Lg0K ICogVGhlIG1lbW9yeSBhcmVhcyBtdXN0IG5vdCBvdmVybGFwLg0KICoNCiAqIEBub3RlDQogKiBJ ZiB0aGUgZGVzdGluYXRpb24gYW5kL29yIGxlbmd0aCBpcyB1bmFsaWduZWQsIHNvbWUgY29waWVk IGJ5dGVzIHdpbGwgYmUNCiAqIHN0b3JlZCBpbiB0aGUgZGVzdGluYXRpb24gbWVtb3J5IGFyZWEg dXNpbmcgdGVtcG9yYWwgYWNjZXNzLg0KICoNCiAqIEBwYXJhbSBkc3QNCiAqICAgUG9pbnRlciB0 byB0aGUgbm9uLXRlbXBvcmFsIGRlc3RpbmF0aW9uIG1lbW9yeSBhcmVhLg0KICogQHBhcmFtIHNy Yw0KICogICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwgc291cmNlIG1lbW9yeSBhcmVhLg0K ICogQHBhcmFtIGxlbg0KICogICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4NCiAqIEBwYXJhbSBm bGFncw0KICogICBIaW50cyBmb3IgbWVtb3J5IGFjY2Vzcy4NCiAqICAgQW55IG9mIHRoZSBSVEVf TUVNT1BTX0ZfTEVObkEsIFJURV9NRU1PUFNfRl9EU1RuQSwgUlRFX01FTU9QU19GX1NSQ25BIGZs YWdzLg0KICovDQpfX3J0ZV9leHBlcmltZW50YWwNCnN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5l DQpfX2F0dHJpYnV0ZV9fKChfX25vbm51bGxfXygxLCAyKSwgX19hY2Nlc3NfXyh3cml0ZV9vbmx5 LCAxLCAzKSwgX19hY2Nlc3NfXyhyZWFkX29ubHksIDIsIDMpKSkNCnZvaWQgcnRlX21lbWNweV9u dCh2b2lkICogX19ydGVfcmVzdHJpY3QgZHN0LCBjb25zdCB2b2lkICogX19ydGVfcmVzdHJpY3Qg c3JjLCBzaXplX3QgbGVuLA0KICAgICAgICBjb25zdCB1aW50NjRfdCBmbGFncykNCnsNCiAgICBp ZiAoX19idWlsdGluX2NvbnN0YW50X3AoZmxhZ3MpID8NCiAgICAgICAgICAgICgoZmxhZ3MgJiBS VEVfTUVNT1BTX0ZfTEVOQV9NQVNLKSA+PSBSVEVfTUVNT1BTX0ZfTEVOMTZBICYmDQogICAgICAg ICAgICAoZmxhZ3MgJiBSVEVfTUVNT1BTX0ZfRFNUQV9NQVNLKSA+PSBSVEVfTUVNT1BTX0ZfRFNU MTZBKSA6DQogICAgICAgICAgICAhKCgodWludHB0cl90KWRzdCB8IGxlbikgJiAoMTYgLSAxKSkp IHsNCiAgICAgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGZsYWdzKSA/DQogICAgICAgICAg ICAgICAgKGZsYWdzICYgUlRFX01FTU9QU19GX1NSQ0FfTUFTSykgPj0gUlRFX01FTU9QU19GX1NS QzE2QSA6DQogICAgICAgICAgICAgICAgISgodWludHB0cl90KXNyYyAmICgxNiAtIDEpKSkNCiAg ICAgICAgICAgIHJ0ZV9tZW1jcHlfbnQxNmEoZHN0LCBzcmMsIGxlbi8qLCBmbGFncyovKTsNCiAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgcnRlX21lbWNweV9udDE2ZGxhKGRzdCwgc3JjLCBsZW4v KiwgZmxhZ3MqLyk7DQogICAgfQ0KICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGZs YWdzKSA/ICgNCiAgICAgICAgICAgIChmbGFncyAmIFJURV9NRU1PUFNfRl9MRU5BX01BU0spID49 IFJURV9NRU1PUFNfRl9MRU40QSAmJg0KICAgICAgICAgICAgKGZsYWdzICYgUlRFX01FTU9QU19G X0RTVEFfTUFTSykgPj0gUlRFX01FTU9QU19GX0RTVDRBICYmDQogICAgICAgICAgICAoZmxhZ3Mg JiBSVEVfTUVNT1BTX0ZfU1JDQV9NQVNLKSA+PSBSVEVfTUVNT1BTX0ZfU1JDNEEpIDoNCiAgICAg ICAgICAgICEoKCh1aW50cHRyX3QpZHN0IHwgKHVpbnRwdHJfdClzcmMgfCBsZW4pICYgKDQgLSAx KSkpIHsNCiAgICAgICAgcnRlX21lbWNweV9udDRhKGRzdCwgc3JjLCBsZW4vKiwgZmxhZ3MqLyk7 DQogICAgfQ0KICAgIGVsc2UNCiAgICAgICAgcnRlX21lbWNweV9udF91bmFsaWduZWQoZHN0LCBz cmMsIGxlbi8qLCBmbGFncyovKTsNCn0NCg0KDQo+IA0KPiANCj4gPiBXaGlsZSB3b3JraW5nIG9u IHRoZXNlIGZ1bnRpb25zLCBJIGV4cGVyaW1lbnRlZCB3aXRoIGFuDQo+IHJ0ZV9tZW1jcHlfbnQo KSB0YWtpbmcgZmxhZ3MsIHdoaWNoIGlzIGFsc28gbXkgcGVyc29uYWwgcHJlZmVyZW5jZSwgYnV0 DQo+IGhhdmVuJ3Qgc3VjY2VlZCB5ZXQuIEVzcGVjaWFsbHkgd2hlbiBjb3B5aW5nIGEgMTYgYnl0 ZSBhbGlnbmVkDQo+IHN0cnVjdHVyZSBvZiBvbmx5IDE2IGJ5dGUsIHRoZSBvdmVyaGVhZCBvZiB0 aGUgZnVuY3Rpb24gY2FsbCArDQo+IGNvbXBhcmluZyB0aGUgZmxhZ3MgKyB0aGUgY29weSBsb29w IG92ZXJoZWFkIGlzIHNpZ25pZmljYW50LCBjb21wYXJlZA0KPiB0byBpbmxpbmUgY29kZSBjb25z aXN0aW5nIG9mIG9ubHkgb25lIHBhaXIgb2YgIm1vdm50ZHFhICglcnNpKSwleG1tMDsNCj4gbW92 bnRkcSAleG1tMCwoJXJkaSkiIGluc3RydWN0aW9ucy4NCj4gPg0KPiA+IFJlbWVtYmVyIHRoYXQg YSBub24taW5saW5lZCBydGVfbWVtY3B5X250KCkgd2lsbCBiZSBjYWxsZWQgd2l0aCB2ZXJ5DQo+ IHZhcnlpbmcgc2l6ZSwgZHVlIHRvIHRoZSB0eXBpY2FsIG1peCBvZiBzbWFsbCBhbmQgYmlnIHBh Y2tldHMsIHNvDQo+IGJyYW5jaCBwcmVkaWN0aW9uIHdpbGwgbm90IGhlbHAuDQo+ID4NCj4gPiBU aGlzIFJGQyBkb2VzIG5vdCB5ZXQgc2hvdyB0aGUgcnRlX21lbWNweV9udCgpIGZ1bmN0aW9uIGhh bmRsaW5nDQo+IHVuYWxpZ25lZCBsb2FkL3N0b3JlLCBidXQgaXQgaXMgbW9yZSBjb21wbGV4IHRo YW4gdGhlIGFsaWduZWQNCj4gZnVuY3Rpb25zLiBTbyBJIHRoaW5rIHRoZSBhbGlnbmVkIHZhcmlh bnRzIGFyZSB3YXJyYW50ZWQgLSBmb3INCj4gcGVyZm9ybWFuY2UgcmVhc29ucy4NCj4gPg0KPiA+ IFNvbWUgb2YgdGhlIG5lZWQgZm9yIGV4cG9zaW5nIGluZGl2aWR1YWwgZnVuY3Rpb25zIGZvciBk aWZmZXJlbnQNCj4gYWxpZ25tZW50IHN0ZW1zIGZyb20gdGhlIGNvbXBpbGVyIGJlaW5nIHVuYWJs ZSB0byBkZXRlcm1pbmUgdGhlDQo+IGFsaWdubWVudCBvZiB0aGUgc291cmNlIGFuZCBkZXN0aW5h dGlvbiBwb2ludGVycyBhdCBidWlsZCB0aW1lLiBTbyB3ZQ0KPiBuZWVkIHRvIGhlbHAgdGhlIGNv bXBpbGVyIHdpdGggdGhpcyBhdCBidWlsZCB0aW1lLCBhbmQgdGh1cyB0aGUgbmVlZA0KPiBmb3Ig aW5saW5pbmcgdGhlIGZ1bmN0aW9uLiBJZiB3ZSBleHBvc2UgYSBidW5jaCBvZiBzbWFsbCBpbmxp bmUNCj4gZnVuY3Rpb25zIG9yIGEgYmlnIGlubGluZSBmdW5jdGlvbiB3aXRoIGZsYWdzIHNlZW1z IHRvIGJlIGEgbWF0dGVyIG9mDQo+IHRhc3RlLg0KPiA+DQo+ID4gVGhpbmtpbmcgYWJvdXQgaXQs IHlvdSBhcmUgcHJvYmFibHkgcmlnaHQgdGhhdCBleHBvc2luZyBhIHNpbmdsZQ0KPiBmdW5jdGlv biB3aXRoIGZsYWdzIGlzIGJldHRlciBmb3IgZG9jdW1lbnRhdGlvbiBwdXJwb3NlcyBhbmQgZWFz aWVyIGZvcg0KPiBvdGhlciBhcmNoaXRlY3R1cmVzIHRvIGltcGxlbWVudC4gQnV0IGl0IHN0aWxs IG5lZWRzIHRvIGJlIGlubGluZSwgZm9yDQo+IHRoZSByZWFzb25zIGRlc2NyaWJlZCBhYm92ZS4N Cj4gDQo+IA0KPiBPaywgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IG1haW4gdXNlLWNhc2Ug Zm9yIGl0IHdvdWxkIGJlIGNvcHlpbmcNCj4gb2YNCj4gYmlnIGNodW5rcyBvZiBkYXRhLCBidXQg ZnJvbSB5b3VyIGRlc2NyaXB0aW9uIGl0IG1pZ2h0IG5vdCBiZSB0aGUgY2FzZS4NCg0KVGhpcyBp cyBmb3IgcXVpY2tseSBjb3B5aW5nIHJlbGF0aXZlbHkgc21hbGwgcGllY2VzIG9mIGRhdGEgc3lu Y2hyb25vdXNseSB3aXRob3V0IHBvbGx1dGluZyB0aGUgQ1BVcyBkYXRhIGNhY2hlLCBlLmcuIGp1 c3QgYmVmb3JlIHBhc3Npbmcgb24gYSBwYWNrZXQgdG8gYW4gRXRoZXJuZXQgUE1EIGZvciB0cmFu c21pc3Npb24uDQoNCkJpZyBjaHVua3Mgb2YgZGF0YSBzaG91bGQgYmUgY29waWVkIGFzeW5jaHJv bm91c2x5IGJ5IERNQS4NCg0KPiBZZXMsIGZvciBqdXN0IDE2LzMyQiBjb3B5IGZ1bmN0aW9uIGNh bGwgb3ZlcmhlYWQgbWlnaHQgYmUgd2F5IHRvbw0KPiBoaWdoLi4uDQo+IEFzIGFub3RoZXIgYWx0 ZXJuYXRpdmUgLSB3b3VsZCBtZW1jcHlfbnRfYnVsaygpIGhlbHAgc29tZWhvdz8NCj4gSXQgY2Fu IGRvIGNvcHlpbmcgZm9yIHRoZSBzZXZlcmFsIHNyYy9kc3QgcGFpcnMgYXQgb25jZSBhbmQNCj4g dGhhdCBtaWdodCBoZWxwIHRvIGFtb3J0aXplIGNvc3Qgb2YgZnVuY3Rpb24gY2FsbC4NCg0KSW4g bWFueSBjYXNlcywgbWVtY3B5X250KCkgd2lsbCByZXBsYWNlIG1lbWNweSgpIGluc2lkZSBsb29w cywgc28gaXQgc2hvdWxkIGJlIGp1c3QgYXMgZWFzeSB0byB1c2UgYXMgbWVtY3B5KCkuIEUuZy4g bG9vayBhdCBydGVfcGt0bWJ1Zl9jb3B5KCkuLi4gQnVpbGRpbmcgYSBtZW1jb3B5IGFycmF5IHRv IHBhc3MgdG8gbWVtY3B5X250X2J1bGsoKSBmcm9tIHJ0ZV9wa3RtYnVmX2NvcHkoKSB3b3VsZCBy ZXF1aXJlIGEgc2lnbmlmaWNhbnQgcmV3cml0ZSBvZiBydGVfcGt0bWJ1Zl9jb3B5KCksIGNvbXBh cmVkIHRvIGp1c3QgcmVwbGFjaW5nIHJ0ZV9tZW1jcHkoKSB3aXRoIHJ0ZV9tZW1jcHlfbnQoKS4g QW5kIHRoaXMgaXMganVzdCBvbmUgZnVuY3Rpb24gdXNpbmcgbWVtY3B5KCkuDQoNCj4gDQo+IA0K PiA+DQo+ID4+DQo+ID4+DQo+ID4+PiBbMV0gaHR0cHM6Ly93d3cuaW50ZWwuY29tL2NvbnRlbnQv d3d3L3VzL2VuL2RvY3MvaW50cmluc2ljcy0NCj4gPj4gZ3VpZGUvaW5kZXguaHRtbCN0ZXh0PV9t bV9zdHJlYW1fbG9hZA0KPiA+Pj4gWzJdIGh0dHBzOi8vZGV2ZWxvcGVyLmFybS5jb20vZG9jdW1l bnRhdGlvbi8xMDAwNzYvMDEwMC9BNjQtDQo+ID4+IEluc3RydWN0aW9uLVNldC1SZWZlcmVuY2Uv QTY0LUZsb2F0aW5nLXBvaW50LUluc3RydWN0aW9ucy9MRE5QLS0NCj4gU0lNRC0NCj4gPj4gYW5k LUZQLQ0KPiA+Pj4NCj4gPj4+IFYyOg0KPiA+Pj4gLSBPbmx5IGNvcHkgZnJvbSBub24tdGVtcG9y YWwgc291cmNlIHRvIG5vbi10ZW1wb3JhbCBkZXN0aW5hdGlvbi4NCj4gPj4+ICAgICBJLmUuIHJl bW92ZSB0aGUgdHdvIHZhcmlhbnRzIHdpdGggb25seSBzb3VyY2UgYW5kL29yDQo+IGRlc3RpbmF0 aW9uDQo+ID4+IGJlaW5nDQo+ID4+PiAgICAgbm9uLXRlbXBvcmFsLg0KPiA+Pj4gLSBEbyBub3Qg cmVxdWlyZSBhbGlnbm1lbnQuDQo+ID4+PiAgICAgSW5zdGVhZCwgb2ZmZXIgYWRkaXRpb25hbCA0 IGFuZCAxNiBieXRlIGFsaWduZWQgZnVuY3Rpb25zIGZvcg0KPiA+PiBwZXJmb3JtYW5jZQ0KPiA+ Pj4gICAgIHB1cnBvc2VzLg0KPiA+Pj4gLSBJbXBsZW1lbnRlZCB0d28gb2YgdGhlIGZ1bmN0aW9u cyBmb3IgeDg2Lg0KPiA+Pj4gLSBSZW1vdmUgbWVtc2V0IGZ1bmN0aW9uLg0KPiA+Pj4NCj4gPj4+ IFNpZ25lZC1vZmYtYnk6IE1vcnRlbiBCcsO4cnVwIDxtYkBzbWFydHNoYXJlc3lzdGVtcy5jb20+ DQo+ID4+PiAtLS0NCj4gPj4+DQo+ID4+PiAvKioNCj4gPj4+ICAgICogQHdhcm5pbmcNCj4gPj4+ ICAgICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Ig bm90aWNlLg0KPiA+Pj4gICAgKg0KPiA+Pj4gICAgKiBDb3B5IGRhdGEgZnJvbSBub24tdGVtcG9y YWwgc291cmNlIHRvIG5vbi10ZW1wb3JhbA0KPiBkZXN0aW5hdGlvbi4NCj4gPj4+ICAgICoNCj4g Pj4+ICAgICogQHBhcmFtIGRzdA0KPiA+Pj4gICAgKiAgIFBvaW50ZXIgdG8gdGhlIG5vbi10ZW1w b3JhbCBkZXN0aW5hdGlvbiBvZiB0aGUgZGF0YS4NCj4gPj4+ICAgICogICBTaG91bGQgYmUgNCBi eXRlIGFsaWduZWQsIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlLg0KPiA+Pj4gICAgKiBAcGFyYW0g c3JjDQo+ID4+PiAgICAqICAgUG9pbnRlciB0byB0aGUgbm9uLXRlbXBvcmFsIHNvdXJjZSBkYXRh Lg0KPiA+Pj4gICAgKiAgIE5vIGFsaWdubWVudCByZXF1aXJlbWVudHMuDQo+ID4+PiAgICAqIEBw YXJhbSBsZW4NCj4gPj4+ICAgICogICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4NCj4gPj4+ICAg ICogICBTaG91bGQgYmUgYmUgZGl2aXNpYmxlIGJ5IDQsIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNl Lg0KPiA+Pj4gICAgKi8NCj4gPj4+IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+Pj4gc3RhdGljIF9f cnRlX2Fsd2F5c19pbmxpbmUNCj4gPj4+IF9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fKDEsIDIp LCBfX2FjY2Vzc19fKHdyaXRlX29ubHksIDEsIDMpLA0KPiA+PiBfX2FjY2Vzc19fKHJlYWRfb25s eSwgMiwgMykpKQ0KPiA+Pj4gdm9pZCBydGVfbWVtY3B5X250KHZvaWQgKiBfX3J0ZV9yZXN0cmlj dCBkc3QsIGNvbnN0IHZvaWQgKg0KPiA+PiBfX3J0ZV9yZXN0cmljdCBzcmMsIHNpemVfdCBsZW4p DQo+ID4+PiAvKiBJbXBsZW1lbnRhdGlvbiBULkIuRC4gKi8NCj4gPj4+DQo+ID4+PiAvKioNCj4g Pj4+ICAgICogQHdhcm5pbmcNCj4gPj4+ICAgICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBt YXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+Pj4gICAgKg0KPiA+Pj4gICAgKiBD b3B5IGRhdGEgaW4gYmxvY2tzIG9mIDE2IGJ5dGUgZnJvbSBhbGlnbmVkIG5vbi10ZW1wb3JhbA0K PiBzb3VyY2UNCj4gPj4+ICAgICogdG8gYWxpZ25lZCBub24tdGVtcG9yYWwgZGVzdGluYXRpb24u DQo+ID4+PiAgICAqDQo+ID4+PiAgICAqIEBwYXJhbSBkc3QNCj4gPj4+ICAgICogICBQb2ludGVy IHRvIHRoZSBub24tdGVtcG9yYWwgZGVzdGluYXRpb24gb2YgdGhlIGRhdGEuDQo+ID4+PiAgICAq ICAgTXVzdCBiZSAxNiBieXRlIGFsaWduZWQuDQo+ID4+PiAgICAqIEBwYXJhbSBzcmMNCj4gPj4+ ICAgICogICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwgc291cmNlIGRhdGEuDQo+ID4+PiAg ICAqICAgTXVzdCBiZSAxNiBieXRlIGFsaWduZWQuDQo+ID4+PiAgICAqIEBwYXJhbSBsZW4NCj4g Pj4+ICAgICogICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4NCj4gPj4+ICAgICogICBNdXN0IGJl IGRpdmlzaWJsZSBieSAxNi4NCj4gPj4+ICAgICovDQo+ID4+PiBfX3J0ZV9leHBlcmltZW50YWwN Cj4gPj4+IHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lDQo+ID4+PiBfX2F0dHJpYnV0ZV9fKChf X25vbm51bGxfXygxLCAyKSwgX19hY2Nlc3NfXyh3cml0ZV9vbmx5LCAxLCAzKSwNCj4gPj4gX19h Y2Nlc3NfXyhyZWFkX29ubHksIDIsIDMpKSkNCj4gPj4+IHZvaWQgcnRlX21lbWNweV9udDE2YSh2 b2lkICogX19ydGVfcmVzdHJpY3QgZHN0LCBjb25zdCB2b2lkICoNCj4gPj4gX19ydGVfcmVzdHJp Y3Qgc3JjLCBzaXplX3QgbGVuKQ0KPiA+Pj4gew0KPiA+Pj4gICAgICAgY29uc3Qgdm9pZCAqIGNv bnN0ICBlbmQgPSBSVEVfUFRSX0FERChzcmMsIGxlbik7DQo+ID4+Pg0KPiA+Pj4gICAgICAgUlRF X0FTU0VSVChydGVfaXNfYWxpZ25lZChkc3QsIHNpemVvZihfX20xMjhpKSkpOw0KPiA+Pj4gICAg ICAgUlRFX0FTU0VSVChydGVfaXNfYWxpZ25lZChzcmMsIHNpemVvZihfX20xMjhpKSkpOw0KPiA+ Pj4gICAgICAgUlRFX0FTU0VSVChydGVfaXNfYWxpZ25lZChsZW4sIHNpemVvZihfX20xMjhpKSkp Ow0KPiA+Pj4NCj4gPj4+ICAgICAgIC8qIENvcHkgbGFyZ2UgcG9ydGlvbiBvZiBkYXRhLiAqLw0K PiA+Pj4gICAgICAgd2hpbGUgKFJURV9QVFJfRElGRihlbmQsIHNyYykgPj0gNCAqIHNpemVvZihf X20xMjhpKSkgew0KPiA+Pj4gICAgICAgICAgIHJlZ2lzdGVyIF9fbTEyOGkgICAgeG1tMCwgeG1t MSwgeG1tMiwgeG1tMzsNCj4gPj4+DQo+ID4+PiAvKiBOb3RlOiBXb3JrYXJvdW5kIGZvciBfbW1f c3RyZWFtX2xvYWRfc2kxMjgoKSBub3QgdGFraW5nIGEgY29uc3QNCj4gPj4gcG9pbnRlciBhcyBw YXJhbWV0ZXIuICovDQo+ID4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gNCj4gPj4+ICNw cmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkaXNjYXJkZWQtcXVhbGlmaWVycyINCj4g Pj4+ICAgICAgICAgICB4bW0wID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFJURV9QVFJfQUREKHNy YywgMCAqDQo+ID4+IHNpemVvZihfX20xMjhpKSkpOw0KPiA+Pj4gICAgICAgICAgIHhtbTEgPSBf bW1fc3RyZWFtX2xvYWRfc2kxMjgoUlRFX1BUUl9BREQoc3JjLCAxICoNCj4gPj4gc2l6ZW9mKF9f bTEyOGkpKSk7DQo+ID4+PiAgICAgICAgICAgeG1tMiA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChS VEVfUFRSX0FERChzcmMsIDIgKg0KPiA+PiBzaXplb2YoX19tMTI4aSkpKTsNCj4gPj4+ICAgICAg ICAgICB4bW0zID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFJURV9QVFJfQUREKHNyYywgMyAqDQo+ ID4+IHNpemVvZihfX20xMjhpKSkpOw0KPiA+Pj4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AN Cj4gPj4+ICAgICAgICAgICBfbW1fc3RyZWFtX3NpMTI4KFJURV9QVFJfQUREKGRzdCwgMCAqIHNp emVvZihfX20xMjhpKSksDQo+ID4+IHhtbTApOw0KPiA+Pj4gICAgICAgICAgIF9tbV9zdHJlYW1f c2kxMjgoUlRFX1BUUl9BREQoZHN0LCAxICogc2l6ZW9mKF9fbTEyOGkpKSwNCj4gPj4geG1tMSk7 DQo+ID4+PiAgICAgICAgICAgX21tX3N0cmVhbV9zaTEyOChSVEVfUFRSX0FERChkc3QsIDIgKiBz aXplb2YoX19tMTI4aSkpLA0KPiA+PiB4bW0yKTsNCj4gPj4+ICAgICAgICAgICBfbW1fc3RyZWFt X3NpMTI4KFJURV9QVFJfQUREKGRzdCwgMyAqIHNpemVvZihfX20xMjhpKSksDQo+ID4+IHhtbTMp Ow0KPiA+Pj4gICAgICAgICAgIHNyYyA9IFJURV9QVFJfQUREKHNyYywgNCAqIHNpemVvZihfX20x MjhpKSk7DQo+ID4+PiAgICAgICAgICAgZHN0ID0gUlRFX1BUUl9BREQoZHN0LCA0ICogc2l6ZW9m KF9fbTEyOGkpKTsNCj4gPj4+ICAgICAgIH0NCj4gPj4+DQo+ID4+PiAgICAgICAvKiBDb3B5IHJl bWFpbmluZyBkYXRhLiAqLw0KPiA+Pj4gICAgICAgd2hpbGUgKHNyYyAhPSBlbmQpIHsNCj4gPj4+ ICAgICAgICAgICByZWdpc3RlciBfX20xMjhpICAgIHhtbTsNCj4gPj4+DQo+ID4+PiAvKiBOb3Rl OiBXb3JrYXJvdW5kIGZvciBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoKSBub3QgdGFraW5nIGEgY29u c3QNCj4gPj4gcG9pbnRlciBhcyBwYXJhbWV0ZXIuICovDQo+ID4+PiAjcHJhZ21hIEdDQyBkaWFn bm9zdGljIHB1c2gNCj4gPj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkaXNj YXJkZWQtcXVhbGlmaWVycyINCj4gPj4+ICAgICAgICAgICB4bW0gPSBfbW1fc3RyZWFtX2xvYWRf c2kxMjgoc3JjKTsNCj4gPj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wDQo+ID4+PiAgICAg ICAgICAgX21tX3N0cmVhbV9zaTEyOChkc3QsIHhtbSk7DQo+ID4+PiAgICAgICAgICAgc3JjID0g UlRFX1BUUl9BREQoc3JjLCBzaXplb2YoX19tMTI4aSkpOw0KPiA+Pj4gICAgICAgICAgIGRzdCA9 IFJURV9QVFJfQUREKGRzdCwgc2l6ZW9mKF9fbTEyOGkpKTsNCj4gPj4+ICAgICAgIH0NCj4gPj4+ IH0NCj4gPj4+DQo+ID4+PiAvKioNCj4gPj4+ICAgICogQHdhcm5pbmcNCj4gPj4+ICAgICogQGIg RVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0K PiA+Pj4gICAgKg0KPiA+Pj4gICAgKiBDb3B5IGRhdGEgaW4gYmxvY2tzIG9mIDQgYnl0ZSBmcm9t IGFsaWduZWQgbm9uLXRlbXBvcmFsIHNvdXJjZQ0KPiA+Pj4gICAgKiB0byBhbGlnbmVkIG5vbi10 ZW1wb3JhbCBkZXN0aW5hdGlvbi4NCj4gPj4+ICAgICoNCj4gPj4+ICAgICogQHBhcmFtIGRzdA0K PiA+Pj4gICAgKiAgIFBvaW50ZXIgdG8gdGhlIG5vbi10ZW1wb3JhbCBkZXN0aW5hdGlvbiBvZiB0 aGUgZGF0YS4NCj4gPj4+ICAgICogICBNdXN0IGJlIDQgYnl0ZSBhbGlnbmVkLg0KPiA+Pj4gICAg KiBAcGFyYW0gc3JjDQo+ID4+PiAgICAqICAgUG9pbnRlciB0byB0aGUgbm9uLXRlbXBvcmFsIHNv dXJjZSBkYXRhLg0KPiA+Pj4gICAgKiAgIE11c3QgYmUgNCBieXRlIGFsaWduZWQuDQo+ID4+PiAg ICAqIEBwYXJhbSBsZW4NCj4gPj4+ICAgICogICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4NCj4g Pj4+ICAgICogICBNdXN0IGJlIGRpdmlzaWJsZSBieSA0Lg0KPiA+Pj4gICAgKi8NCj4gPj4+IF9f cnRlX2V4cGVyaW1lbnRhbA0KPiA+Pj4gc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUNCj4gPj4+ IF9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fKDEsIDIpLCBfX2FjY2Vzc19fKHdyaXRlX29ubHks IDEsIDMpLA0KPiA+PiBfX2FjY2Vzc19fKHJlYWRfb25seSwgMiwgMykpKQ0KPiA+Pj4gdm9pZCBy dGVfbWVtY3B5X250NGEodm9pZCAqIF9fcnRlX3Jlc3RyaWN0IGRzdCwgY29uc3Qgdm9pZCAqDQo+ ID4+IF9fcnRlX3Jlc3RyaWN0IHNyYywgc2l6ZV90IGxlbikNCj4gPj4+IHsNCj4gPj4+ICAgICAg IGludDMyX3QgICAgICAgICAgICAgYnVmW3NpemVvZihfX20xMjhpKSAvIHNpemVvZihpbnQzMl90 KV0NCj4gPj4gX19ydGVfYWxpZ25lZChzaXplb2YoX19tMTI4aSkpOw0KPiA+Pj4gICAgICAgLyoq IEFkZHJlc3Mgb2Ygc291cmNlIGRhdGEsIHJvdW5kZWQgZG93biB0byBhY2hpZXZlDQo+IGFsaWdu bWVudC4NCj4gPj4gKi8NCj4gPj4+ICAgICAgIGNvbnN0IHZvaWQgKiAgICAgICAgc3JjYSA9IFJU RV9QVFJfQUxJR05fRkxPT1Ioc3JjLA0KPiA+PiBzaXplb2YoX19tMTI4aSkpOw0KPiA+Pj4gICAg ICAgLyoqIEFkZHJlc3Mgb2YgZW5kIG9mIHNvdXJjZSBkYXRhLCByb3VuZGVkIGRvd24gdG8gYWNo aWV2ZQ0KPiA+PiBhbGlnbm1lbnQuICovDQo+ID4+PiAgICAgICBjb25zdCB2b2lkICogY29uc3Qg IHNyY2VuZGEgPQ0KPiA+PiBSVEVfUFRSX0FMSUdOX0ZMT09SKFJURV9QVFJfQUREKHNyYywgbGVu KSwgc2l6ZW9mKF9fbTEyOGkpKTsNCj4gPj4+ICAgICAgIGNvbnN0IGludCAgICAgICAgICAgb2Zm c2V0ID0gIFJURV9QVFJfRElGRihzcmMsIHNyY2EpIC8NCj4gPj4gc2l6ZW9mKGludDMyX3QpOw0K PiA+Pj4gICAgICAgcmVnaXN0ZXIgX19tMTI4aSAgICB4bW0wOw0KPiA+Pj4NCj4gPj4+ICAgICAg IFJURV9BU1NFUlQocnRlX2lzX2FsaWduZWQoZHN0LCBzaXplb2YoaW50MzJfdCkpKTsNCj4gPj4+ ICAgICAgIFJURV9BU1NFUlQocnRlX2lzX2FsaWduZWQoc3JjLCBzaXplb2YoaW50MzJfdCkpKTsN Cj4gPj4+ICAgICAgIFJURV9BU1NFUlQocnRlX2lzX2FsaWduZWQobGVuLCBzaXplb2YoaW50MzJf dCkpKTsNCj4gPj4+DQo+ID4+PiAgICAgICBpZiAodW5saWtlbHkobGVuID09IDApKSByZXR1cm47 DQo+ID4+Pg0KPiA+Pj4gICAgICAgLyogQ29weSBmaXJzdCwgbm9uLV9fbTEyOGkgYWxpZ25lZCwg cGFydCBvZiBzb3VyY2UgZGF0YS4gKi8NCj4gPj4+ICAgICAgIGlmIChvZmZzZXQpIHsNCj4gPj4+ IC8qIE5vdGU6IFdvcmthcm91bmQgZm9yIF9tbV9zdHJlYW1fbG9hZF9zaTEyOCgpIG5vdCB0YWtp bmcgYSBjb25zdA0KPiA+PiBwb2ludGVyIGFzIHBhcmFtZXRlci4gKi8NCj4gPj4+ICNwcmFnbWEg R0NDIGRpYWdub3N0aWMgcHVzaA0KPiA+Pj4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk ICItV2Rpc2NhcmRlZC1xdWFsaWZpZXJzIg0KPiA+Pj4gICAgICAgICAgIHhtbTAgPSBfbW1fc3Ry ZWFtX2xvYWRfc2kxMjgoc3JjYSk7DQo+ID4+PiAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KCh2 b2lkICopYnVmLCB4bW0wKTsNCj4gPj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wDQo+ID4+ PiAgICAgICAgICAgc3dpdGNoIChvZmZzZXQpIHsNCj4gPj4+ICAgICAgICAgICAgICAgY2FzZSAx Og0KPiA+Pj4gICAgICAgICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRz dCwgMCAqDQo+ID4+IHNpemVvZihpbnQzMl90KSksIGJ1ZlsxXSk7DQo+ID4+PiAgICAgICAgICAg ICAgICAgICBpZiAodW5saWtlbHkobGVuID09IDEgKiBzaXplb2YoaW50MzJfdCkpKSByZXR1cm47 DQo+ID4+PiAgICAgICAgICAgICAgICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BUUl9BREQoZHN0 LCAxICoNCj4gPj4gc2l6ZW9mKGludDMyX3QpKSwgYnVmWzJdKTsNCj4gPj4+ICAgICAgICAgICAg ICAgICAgIGlmICh1bmxpa2VseShsZW4gPT0gMiAqIHNpemVvZihpbnQzMl90KSkpIHJldHVybjsN Cj4gPj4+ICAgICAgICAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3Qs IDIgKg0KPiA+PiBzaXplb2YoaW50MzJfdCkpLCBidWZbM10pOw0KPiA+Pj4gICAgICAgICAgICAg ICAgICAgYnJlYWs7DQo+ID4+PiAgICAgICAgICAgICAgIGNhc2UgMjoNCj4gPj4+ICAgICAgICAg ICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDAgKg0KPiA+PiBzaXpl b2YoaW50MzJfdCkpLCBidWZbMl0pOw0KPiA+Pj4gICAgICAgICAgICAgICAgICAgaWYgKHVubGlr ZWx5KGxlbiA9PSAxICogc2l6ZW9mKGludDMyX3QpKSkgcmV0dXJuOw0KPiA+Pj4gICAgICAgICAg ICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMSAqDQo+ID4+IHNpemVv ZihpbnQzMl90KSksIGJ1ZlszXSk7DQo+ID4+PiAgICAgICAgICAgICAgICAgICBicmVhazsNCj4g Pj4+ICAgICAgICAgICAgICAgY2FzZSAzOg0KPiA+Pj4gICAgICAgICAgICAgICAgICAgX21tX3N0 cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ID4+IHNpemVvZihpbnQzMl90KSksIGJ1 ZlszXSk7DQo+ID4+PiAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPj4+ICAgICAgICAgICB9 DQo+ID4+PiAgICAgICAgICAgc3JjYSA9IFJURV9QVFJfQUREKHNyY2EsICg0IC0gb2Zmc2V0KSAq IHNpemVvZihpbnQzMl90KSk7DQo+ID4+PiAgICAgICAgICAgZHN0ID0gUlRFX1BUUl9BREQoZHN0 LCAoNCAtIG9mZnNldCkgKiBzaXplb2YoaW50MzJfdCkpOw0KPiA+Pj4gICAgICAgfQ0KPiA+Pj4N Cj4gPj4+ICAgICAgIC8qIENvcHkgbWlkZGxlLCBfX20xMjhpIGFsaWduZWQsIHBhcnQgb2Ygc291 cmNlIGRhdGEuICovDQo+ID4+PiAgICAgICB3aGlsZSAoc3JjYSAhPSBzcmNlbmRhKSB7DQo+ID4+ PiAvKiBOb3RlOiBXb3JrYXJvdW5kIGZvciBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoKSBub3QgdGFr aW5nIGEgY29uc3QNCj4gPj4gcG9pbnRlciBhcyBwYXJhbWV0ZXIuICovDQo+ID4+PiAjcHJhZ21h IEdDQyBkaWFnbm9zdGljIHB1c2gNCj4gPj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3Jl ZCAiLVdkaXNjYXJkZWQtcXVhbGlmaWVycyINCj4gPj4+ICAgICAgICAgICB4bW0wID0gX21tX3N0 cmVhbV9sb2FkX3NpMTI4KHNyY2EpOw0KPiA+Pj4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AN Cj4gPj4+ICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgoKHZvaWQgKilidWYsIHhtbTApOw0KPiA+ Pj4gICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDAgKiBzaXplb2Yo aW50MzJfdCkpLA0KPiA+PiBidWZbMF0pOw0KPiA+Pj4gICAgICAgICAgIF9tbV9zdHJlYW1fc2kz MihSVEVfUFRSX0FERChkc3QsIDEgKiBzaXplb2YoaW50MzJfdCkpLA0KPiA+PiBidWZbMV0pOw0K PiA+Pj4gICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDIgKiBzaXpl b2YoaW50MzJfdCkpLA0KPiA+PiBidWZbMl0pOw0KPiA+Pj4gICAgICAgICAgIF9tbV9zdHJlYW1f c2kzMihSVEVfUFRSX0FERChkc3QsIDMgKiBzaXplb2YoaW50MzJfdCkpLA0KPiA+PiBidWZbM10p Ow0KPiA+Pj4gICAgICAgICAgIHNyY2EgPSBSVEVfUFRSX0FERChzcmNhLCBzaXplb2YoX19tMTI4 aSkpOw0KPiA+Pj4gICAgICAgICAgIGRzdCA9IFJURV9QVFJfQUREKGRzdCwgNCAqIHNpemVvZihp bnQzMl90KSk7DQo+ID4+PiAgICAgICB9DQo+ID4+Pg0KPiA+Pj4gICAgICAgLyogQ29weSBsYXN0 LCBub24tX19tMTI4aSBhbGlnbmVkLCBwYXJ0IG9mIHNvdXJjZSBkYXRhLiAqLw0KPiA+Pj4gICAg ICAgaWYgKFJURV9QVFJfRElGRihzcmNhLCBzcmMpICE9IDQpIHsNCj4gPj4+IC8qIE5vdGU6IFdv cmthcm91bmQgZm9yIF9tbV9zdHJlYW1fbG9hZF9zaTEyOCgpIG5vdCB0YWtpbmcgYSBjb25zdA0K PiA+PiBwb2ludGVyIGFzIHBhcmFtZXRlci4gKi8NCj4gPj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0 aWMgcHVzaA0KPiA+Pj4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Rpc2NhcmRl ZC1xdWFsaWZpZXJzIg0KPiA+Pj4gICAgICAgICAgIHhtbTAgPSBfbW1fc3RyZWFtX2xvYWRfc2kx Mjgoc3JjYSk7DQo+ID4+PiAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KCh2b2lkICopYnVmLCB4 bW0wKTsNCj4gPj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wDQo+ID4+PiAgICAgICAgICAg c3dpdGNoIChvZmZzZXQpIHsNCj4gPj4+ICAgICAgICAgICAgICAgY2FzZSAxOg0KPiA+Pj4gICAg ICAgICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ID4+ IHNpemVvZihpbnQzMl90KSksIGJ1ZlswXSk7DQo+ID4+PiAgICAgICAgICAgICAgICAgICBicmVh azsNCj4gPj4+ICAgICAgICAgICAgICAgY2FzZSAyOg0KPiA+Pj4gICAgICAgICAgICAgICAgICAg X21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ID4+IHNpemVvZihpbnQzMl90 KSksIGJ1ZlswXSk7DQo+ID4+PiAgICAgICAgICAgICAgICAgICBpZiAodW5saWtlbHkoUlRFX1BU Ul9ESUZGKHNyY2EsIHNyYykgPT0gMSAqDQo+ID4+IHNpemVvZihpbnQzMl90KSkpIHJldHVybjsN Cj4gPj4+ICAgICAgICAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3Qs IDEgKg0KPiA+PiBzaXplb2YoaW50MzJfdCkpLCBidWZbMV0pOw0KPiA+Pj4gICAgICAgICAgICAg ICAgICAgYnJlYWs7DQo+ID4+PiAgICAgICAgICAgICAgIGNhc2UgMzoNCj4gPj4+ICAgICAgICAg ICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDAgKg0KPiA+PiBzaXpl b2YoaW50MzJfdCkpLCBidWZbMF0pOw0KPiA+Pj4gICAgICAgICAgICAgICAgICAgaWYgKHVubGlr ZWx5KFJURV9QVFJfRElGRihzcmNhLCBzcmMpID09IDEgKg0KPiA+PiBzaXplb2YoaW50MzJfdCkp KSByZXR1cm47DQo+ID4+PiAgICAgICAgICAgICAgICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BU Ul9BREQoZHN0LCAxICoNCj4gPj4gc2l6ZW9mKGludDMyX3QpKSwgYnVmWzFdKTsNCj4gPj4+ICAg ICAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShSVEVfUFRSX0RJRkYoc3JjYSwgc3JjKSA9PSAy ICoNCj4gPj4gc2l6ZW9mKGludDMyX3QpKSkgcmV0dXJuOw0KPiA+Pj4gICAgICAgICAgICAgICAg ICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMiAqDQo+ID4+IHNpemVvZihpbnQz Ml90KSksIGJ1ZlsyXSk7DQo+ID4+PiAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPj4+ICAg ICAgICAgICB9DQo+ID4+PiAgICAgICB9DQo+ID4+PiB9DQo+ID4+Pg0KPiA+Pg0KPiA+DQo+IA0K DQo=