From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v5 11/28] xsplice: Implement support for applying/reverting/replacing patches. Date: Fri, 1 Apr 2016 17:04:38 -0400 Message-ID: <20160401210438.GA20054@char.us.oracle.com> References: <1458849640-22588-1-git-send-email-konrad.wilk@oracle.com> <1458849640-22588-12-git-send-email-konrad.wilk@oracle.com> <56FE938002000078000E2104@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1am6FX-0002UA-7g for xen-devel@lists.xenproject.org; Fri, 01 Apr 2016 21:04:59 +0000 Content-Disposition: inline In-Reply-To: <56FE938002000078000E2104@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich , ross.lagerwall@citrix.com Cc: Kevin Tian , Keir Fraser , Suravee Suthikulpanit , andrew.cooper3@citrix.com, mpohlack@amazon.de, Julien Grall , Stefano Stabellini , Jun Nakajima , sasha.levin@oracle.com, xen-devel@lists.xenproject.org, Boris Ostrovsky List-Id: xen-devel@lists.xenproject.org SGV5IEphbiwKClRoYW5rIHlvdSBmb3IgeW91ciByZXZpZXchClBsZWFzZSBzZWUgYmVsb3cgbXkg YW5zd2Vycy4KClJvc3MsCgpDb3VsZCB5b3UgYW5zd2VyIG9uZSBxdWVzdGlvbiBiZWxvdyBwbGVh c2UuCgpPbiBGcmksIEFwciAwMSwgMjAxNiBhdCAwNzoyODowMEFNIC0wNjAwLCBKYW4gQmV1bGlj aCB3cm90ZToKPiA+Pj4gT24gMjQuMDMuMTYgYXQgMjE6MDAsIDxrb25yYWQud2lsa0BvcmFjbGUu Y29tPiB3cm90ZToKPiA+IEZyb206IFJvc3MgTGFnZXJ3YWxsIDxyb3NzLmxhZ2Vyd2FsbEBjaXRy aXguY29tPgo+ID4gCj4gPiBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgdGhlIGFwcGx5LCByZXZlcnQg YW5kIHJlcGxhY2UgYWN0aW9ucy4KPiA+IAo+ID4gVG8gcGVyZm9ybSBhbmQgYWN0aW9uIG9uIGEg cGF5bG9hZCwgdGhlIGh5cGVyY2FsbCBzZXRzIHVwIGEgZGF0YQo+ID4gc3RydWN0dXJlIHRvIHNj aGVkdWxlIHRoZSB3b3JrLiAgQSBob29rIGlzIGFkZGVkIGluIGFsbCB0aGUKPiA+IHJldHVybi10 by1ndWVzdCBwYXRocyB0byBjaGVjayBmb3Igd29yayB0byBkbyBhbmQgZXhlY3V0ZSBpdCBpZiBu ZWVkZWQuCj4gCj4gTG9va2luZyBhdCB0aGUgZGlmZnN0YXQgYWxvbmUgSSBjYW5ub3Qgc2VlIHRo aXMgYmVpbmcgdGhlIGNhc2UuCj4gUGVyaGFwcyBpdCdzIGp1c3QgdGhlIGRlc2NyaXB0aW9uIGhl cmUgd2hpY2ggbmVlZHMgdG8gYmVjb21lCj4gbW9yZSBwcmVjaXNlLgoKcy9hbGwgdGhlL2NvbW1v bi8gPwoKPiAKPiA+IEluIHRoaXMgd2F5LCBwYXRjaGVzIGNhbiBiZSBhcHBsaWVkIHdpdGggYWxs IENQVXMgaWRsZSBhbmQgd2l0aG91dAo+ID4gc3RhY2tzLiAgVGhlIGZpcnN0IENQVSB0byBkb194 c3BsaWNlKCkgYmVjb21lcyB0aGUgbWFzdGVyIGFuZCB0cmlnZ2VycyBhCj4gPiByZXNjaGVkdWxl IHNvZnRpcnEgdG8gdHJpZ2dlciBhbGwgdGhlIG90aGVyIENQVXMgdG8gZW50ZXIgZG9feHNwbGlj ZSgpCj4gPiB3aXRoIG5vIHN0YWNrLiAgT25jZSBhbGwgQ1BVcyBoYXZlIHJlbmRlenZvdXNlZCwg YWxsIENQVXMgZGlzYWJsZSBJUlFzCj4gPiBhbmQgTk1JcyBhcmUgaWdub3JlZC4gVGhlIHN5c3Rl bSBpcyB0aGVuIHF1aXNjaWVudCBhbmQgdGhlIG1hc3Rlcgo+ID4gcGVyZm9ybXMgdGhlIGFjdGlv bi4gIEFmdGVyIHRoaXMsIGFsbCBDUFVzIGVuYWJsZSBJUlFzIGFuZCBOTUlzIGFyZQo+ID4gcmUt ZW5hYmxlZC4KPiA+IAo+ID4gTm90ZSB0aGF0IGl0IGlzIHVuc2FmZSB0byBwYXRjaCBkb19ubWkg YW5kIHRoZSB4U3BsaWNlIGludGVybmFsIGZ1bmN0aW9ucy4KPiA+IFBhdGNoaW5nIGZ1bmN0aW9u cyBvbiBOTUkvTUNFIHBhdGggaXMgbGlhYmxlIHRvIGVuZCBpbiBkaXNhc3Rlci4KPiAKPiBTbyB3 aGF0IG1lYXN1cmVzIGFyZSAocGxhbm5lZCB0byBiZSkgdGFrZW4gdG8gbWFrZSBzdXJlIHRoaXMK PiBkb2Vzbid0IGhhcHBlbiBieSBhY2NpZGVudD8KCk5vbmUgaW4gdGhpcyBwYXRjaC4KClBsZWFz ZSBrZWVwIGluIG1pbmQgdGhhdCB0aGlzIGlzc3VlIGlzIG5vdCBvbmx5IGEgcHJvYmxlbSB3aXRo CnhTcGxpY2UgYnV0IGFsc28gd2l0aCBhbHRlcm5hdGl2ZSBhc3NlbWJsZXIgcGF0Y2hpbmcuCgpJ IGhhdmVuJ3QgZmlndXJlZCBvdXQgYSBuaWNlIHdheSB0byB0YWtlIGNhcmUgb2YgdGhpcyBhbmQg d2FzIGhvcGluZwp0byBicmFpbnN0b3JtIHRoYXQuIEZvciByaWdodCBub3cgdGhpcyBwYXJ0IGlz IGxlZnQgb3V0IGFzICdUT0RPJy4KCj4gCj4gPiBUaGUgYWN0aW9uIHRvIHBlcmZvcm0gaXMgb25l IG9mOgo+ID4gLSBBUFBMWTogRm9yIGVhY2ggZnVuY3Rpb24gaW4gdGhlIG1vZHVsZSwgc3RvcmUg dGhlIGZpcnN0IDUgYnl0ZXMgb2YgdGhlCj4gPiAgIG9sZCBmdW5jdGlvbiBhbmQgcmVwbGFjZSBp dCB3aXRoIGEganVtcCB0byB0aGUgbmV3IGZ1bmN0aW9uLgo+ID4gLSBSRVZFUlQ6IENvcHkgdGhl IHByZXZpb3VzbHkgc3RvcmVkIGJ5dGVzIGludG8gdGhlIGZpcnN0IDUgYnl0ZXMgb2YgdGhlCj4g PiAgIG9sZCBmdW5jdGlvbi4KPiA+IC0gUkVQTEFDRTogUmV2ZXJ0IGVhY2ggYXBwbGllZCBtb2R1 bGUgYW5kIHRoZW4gYXBwbHkgdGhlIG5ldyBtb2R1bGUuCj4gPiAKPiA+IFRvIHByZXZlbnQgYSBk ZWFkbG9jayB3aXRoIGFueSBvdGhlciBiYXJyaWVyIGluIHRoZSBzeXN0ZW0sIHRoZSBtYXN0ZXIK PiA+IHdpbGwgd2FpdCBmb3IgdXAgdG8gMzBtcyBiZWZvcmUgdGltaW5nIG91dC4KPiA+IE1lYXN1 cmVtZW50cyBmb3VuZCB0aGF0IHRoZSBwYXRjaCBhcHBsaWNhdGlvbiB0byB0YWtlIGFib3V0IDEw MCDOvHMgb24gYQo+ID4gNzIgQ1BVIHN5c3RlbSwgd2hldGhlciBpZGxlIG9yIGZ1bGx5IGxvYWRl ZC4KPiAKPiBUaGF0J3MgZm9yIGFuIGluZGl2aWR1YWwgcGF0Y2ggSSBzdXBwb3NlPyBXaGF0IGlm IFJFUExBQ0UgaGFzIHRvCj4gcmV2ZXJ0IGRvemVucyBvciBodW5kcmVkcyBvZiBwYXRjaGVzPwoK VGhlIHVzZXItc3BhY2UgY2FuIGNoYW5nZSB0aGUgdGltZW91dCB0byBhIGxhcmdlciB2YWx1ZS4g Cj4gCj4gPiBXZSBhbHNvIGFkZCBhbiBCVUlMRF9PTiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc2l6 ZSBvZiB0aGUgc3RydWN0dXJlCj4gPiBvZiB0aGUgcGF5bG9hZCBpcyBub3QgaW5hZHZlcnRseSBj aGFuZ2VkLgo+ID4gCj4gPiBMYXN0bHkgd2UgdW5yb2xsIHRoZSAndm1hcF90b19wYWdlJyBvbiB4 ODYgYXMgaW5zaWRlIHRoZSBtYWNybyB0aGVyZQo+ID4gaXMgYSBwb3NpYmlsaXR5IG9mIGEgTlVM TCBwb2ludGVyLiBIZW5jZSB3ZSB1bnJvbGwgaXQgd2l0aCBleHRyYQo+ID4gQVNTRVJUUy4gTm90 ZSB0aGF0IGFzc2VydHMgb24gbm9uLWRlYnVnIGJ1aWxkcyBhcmUgY29tcGlsZWQgb3V0IGhlbmNl Cj4gPiB0aGUgZXh0cmEgY2hlY2tzIHRoYXQgd2lsbCBqdXN0IHJldHVybiAoYW5kIGxlYWsgbWVt b3J5KS4KPiAKPiBJJ20gYWZyYWlkIEkgY2FuJ3QgcmVhbGx5IG1ha2Ugc2Vuc2Ugb2YgdGhpczog V2hhdCBkb2VzICJ1bnJvbGwiIG1lYW4KPiBoZXJlPyBUaGVyZSdzIG5vIGxvb3AgaW52b2x2ZWQu IEFuZCB3aGVyZSdzIHRoYXQgcG90ZW50aWFsIGZvciBOVUxMPwoKVGhhdCBpcyBhIHZlcnkgc3Rh bGUgY29tbWVudC4gVGhhdCBzaG91bGQgaGF2ZSBiZWVuIGRlbGV0ZWQhCgo+IAo+ID4gLS0tIGEv ZG9jcy9taXNjL3hzcGxpY2UubWFya2Rvd24KPiA+ICsrKyBiL2RvY3MvbWlzYy94c3BsaWNlLm1h cmtkb3duCj4gPiBAQCAtODQxLDcgKzg0MSw4IEBAIFRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IGFs c28gaGF2ZSBhIG1lY2hhbmlzbSBmb3I6Cj4gPiAgICogQmUgYWJsZSB0byBsb29rdXAgaW4gdGhl IFhlbiBoeXBlcnZpc29yIHRoZSBzeW1ib2wgbmFtZXMgb2YgZnVuY3Rpb25zIGZyb20gdGhlIEVM RiBwYXlsb2FkLgo+ID4gICAqIEJlIGFibGUgdG8gcGF0Y2ggLnJvZGF0YSwgLmJzcywgYW5kIC5k YXRhIHNlY3Rpb25zLgo+ID4gICAqIEZ1cnRoZXIgc2FmZXR5IGNoZWNrcyAoYmxhY2tsaXN0IG9m IHdoaWNoIGZ1bmN0aW9ucyBjYW5ub3QgYmUgcGF0Y2hlZCwgY2hlY2sKPiA+IC0gICB0aGUgc3Rh Y2ssIG1ha2Ugc3VyZSB0aGUgcGF5bG9hZCBpcyBidWlsdCB3aXRoIHNhbWUgY29tcGlsZXIgYXMg aHlwZXJ2aXNvcikuCj4gPiArICAgdGhlIHN0YWNrLCBtYWtlIHN1cmUgdGhlIHBheWxvYWQgaXMg YnVpbHQgd2l0aCBzYW1lIGNvbXBpbGVyIGFzIGh5cGVydmlzb3IsCj4gPiArICAgYW5kIE5NSS9N Q0UgaGFuZGxlcnMgYW5kIGRvX25taSBmb3IgcmlnaHQgbm93IC0gdW50aWwgYW4gc2FmZSBzb2x1 dGlvbiBpcyBmb3VuZCkuCj4gCj4gVGhlIHdob2xlIHRoaW5nIGRvZXNuJ3QgcGFyc2UgYW55bW9y ZSBmb3IgbWUgd2l0aCB0aGUgYWRkaXRpb24sCj4gc28gSSBjYW4ndCByZWFsbHkgY29uY2x1ZGUg d2hhdCB5b3UgbWVhbiB0byBzYXkgaGVyZSAoYW5kIGhlbmNlCj4gd2hldGhlciB0aGF0IGFkZHJl c3NlcyB0aGUgZWFybGllciBxdWVzdGlvbikuCgpJdCBpcyBhZGRpbmcgaGFuZGxpbmcgb2YgTk1J L01DRSBvbiB0aGUgJ1RPRE8nIGxpc3Qgc28gdGhhdCBJIGRvbid0IGZvcmdldAphYm91dCBpdC4K Cj4gCj4gPiBAQCAtMTIwLDYgKzEyMSw3IEBAIHN0YXRpYyB2b2lkIGlkbGVfbG9vcCh2b2lkKQo+ ID4gICAgICAgICAgKCpwbV9pZGxlKSgpOwo+ID4gICAgICAgICAgZG9fdGFza2xldCgpOwo+ID4g ICAgICAgICAgZG9fc29mdGlycSgpOwo+ID4gKyAgICAgICAgY2hlY2tfZm9yX3hzcGxpY2Vfd29y aygpOyAvKiBNdXN0IGJlIGxhc3QuICovCj4gPiAgICAgIH0KPiA+ICB9Cj4gPiAgCj4gPiBAQCAt MTM2LDYgKzEzOCw3IEBAIHZvaWQgc3RhcnR1cF9jcHVfaWRsZV9sb29wKHZvaWQpCj4gPiAgCj4g PiAgc3RhdGljIHZvaWQgbm9yZXR1cm4gY29udGludWVfaWRsZV9kb21haW4oc3RydWN0IHZjcHUg KnYpCj4gPiAgewo+ID4gKyAgICBjaGVja19mb3JfeHNwbGljZV93b3JrKCk7Cj4gPiAgICAgIHJl c2V0X3N0YWNrX2FuZF9qdW1wKGlkbGVfbG9vcCk7Cj4gPiAgfQo+IAo+IFRoZSBwbGFjZW1lbnQg aGVyZSBraW5kIG9mIGNvbnRyYWRpY3RzIHRoZSBjb21tZW50IHJpZ2h0IGFib3ZlLgo+IEFuZCBh bnl3YXkgLSB3aHkgaW4gYm90aCBwbGFjZXM/IEFuZCB3aHkgaGVyZSBhbmQgbm90IGluCj4gY29t bW9uIGNvZGUsIGUuZy4gaW4gZG9fc29mdGlycSgpLCBvciAtIGNvbnNpZGVyaW5nIHRoZSBmdXJ0 aGVyCj4gYWRkaXRpb24gYmVsb3cgLSBpbnNpZGUgcmVzZXRfc3RhY2tfYW5kX2p1bXAoKSBfYWZ0 ZXJfIGhhdmluZwo+IHJlc2V0IHRoZSBzdGFjayAoYWZ0ZXIgYWxsIGJ5IGRvaW5nIGl0IHVwIGZy b250IHlvdSBkbyBub3QgcmVhbGx5Cj4gbWVldCB5b3VyIGdvYWwgb2YgZG9pbmcgdGhlIGFjdGlv biAid2l0aG91dCBzdGFja3MiKT8KClJvc3M/Cgo+IAo+ID4gK3ZvaWQgYXJjaF94c3BsaWNlX2Fw cGx5X2ptcChzdHJ1Y3QgeHNwbGljZV9wYXRjaF9mdW5jICpmdW5jKQo+ID4gK3sKPiA+ICsgICAg dWludDMyX3QgdmFsOwo+IAo+IFRoZSB3YXkgaXQncyBiZWluZyB1c2VkIGJlbG93LCBpdCBjbGVh cmx5IHNob3VsZCBiZSBpbnQzMl90Lgo+IAo+ID4gKyAgICB1aW50OF90ICpvbGRfcHRyOwo+ID4g Kwo+ID4gKyAgICBCVUlMRF9CVUdfT04oUEFUQ0hfSU5TTl9TSVpFID4gc2l6ZW9mKGZ1bmMtPnVu ZG8pKTsKPiA+ICsgICAgQlVJTERfQlVHX09OKFBBVENIX0lOU05fU0laRSAhPSAoMSArIHNpemVv ZiB2YWwpKTsKPiA+ICsKPiA+ICsgICAgb2xkX3B0ciA9ICh1aW50OF90ICopZnVuYy0+b2xkX2Fk ZHI7Cj4gCj4gKENvbnNpZGVyaW5nIHRoaXMgY2FzdCwgdGhlICJvbGRfYWRkciIgbWVtYmVyIHNo b3VsZCBiZQo+IHVuc2lnbmVkIGxvbmcgKG9yIHZvaWQgKiksIG5vdCB1aW50NjRfdDogVGhlIGxh dGVzdCBvbiBBUk0zMgo+IHN1Y2ggd291bGQgb3RoZXJ3aXNlIGNhdXNlIHByb2JsZW1zLikKPiAK PiBBbHNvIC0gd2hlcmUgaXMgdGhlIHZlcmlmaWNhdGlvbiB0aGF0Cj4gZnVuYy0+b2xkX3NpemUg Pj0gUEFUQ0hfSU5TTl9TSVpFPwoKTWlzc2luZy4uCi4uc25pcC4uCj4gPiArLyogVGhlcmUgY2Fu IGJlIG9ubHkgb25lIG91dHN0YW5kaW5nIHBhdGNoaW5nIGFjdGlvbi4gKi8KPiA+ICtzdGF0aWMg c3RydWN0IHhzcGxpY2Vfd29yayB4c3BsaWNlX3dvcms7Cj4gPiArCj4gPiArLyogSW5kaWNhdGUg d2hldGhlciB0aGUgQ1BVIG5lZWRzIHRvIGNvbnN1bHQgeHNwbGljZV93b3JrIHN0cnVjdHVyZS4g Ki8KPiA+ICtzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbF90LCB3b3JrX3RvX2RvKTsKPiAKPiBQ ZWVraW5nIGFoZWFkIHRvIHRoZSB1c2VzIG9mIHRoaXMsIEkgY2FuJ3Qgc2VlIHdoeSB0aGlzIGlz IG5lZWRlZAo+IGFsb25nc2lkZSB4c3BsaWNlX3dvcmsuZG9fd29yay4KCkFuZHJldyBhc2tlZCBm b3IgdGhpcyAtIGhlIG5vdGljZWQgdGhhdCB3ZSBwb3VuZCBvbiB0aGUgeHNwbGljZV93b3JrCnN0 cnVjdHVyZSBxdWl0ZSBvZnRlbiBhY3Jvc3MgYSBsb3Qgb2YgQ1BVcy4gSW5zdGVhZCBvZiBwb3Vu ZGluZyBvbiB0aGUgc2FtZQpjYWNoZSBsaW5lIC0gd2UgY291bGQganVzdCByZWFkIGZyb20gYSBw ZXItY3B1IGNhY2hlIGxpbmUuIEhlbmNlIHRoaXMgYWRkaXRpb24uCgo+IAo+ID4gQEAgLTI5Niw2 ICszMzEsNzcgQEAgc3RhdGljIGludCBzZWN1cmVfcGF5bG9hZChzdHJ1Y3QgcGF5bG9hZCAqcGF5 bG9hZCwgc3RydWN0IHhzcGxpY2VfZWxmICplbGYpCj4gPiAgICAgIHJldHVybiByYzsKPiA+ICB9 Cj4gPiAgCj4gPiArc3RhdGljIGludCBjaGVja19zcGVjaWFsX3NlY3Rpb25zKHN0cnVjdCBwYXls b2FkICpwYXlsb2FkLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgeHNwbGljZV9lbGYgKmVsZikKPiAKPiBjb25zdCAodHdpY2UsIGJ1dCB0aGUgZmlyc3QgcGFy YW1ldGVyIGFwcGVhcnMgdG8gYmUgdW51c2VkIGFueXdheSkKPiAKPiA+ICt7Cj4gPiArICAgIHVu c2lnbmVkIGludCBpOwo+ID4gKyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9 IHsgIi54c3BsaWNlLmZ1bmNzIiB9Owo+ID4gKwo+ID4gKyAgICBmb3IgKCBpID0gMDsgaSA8IEFS UkFZX1NJWkUobmFtZXMpOyBpKysgKQo+ID4gKyAgICB7Cj4gPiArICAgICAgICBzdHJ1Y3QgeHNw bGljZV9lbGZfc2VjICpzZWM7Cj4gCj4gY29uc3QKPiAKPiA+ICsgICAgICAgIHNlYyA9IHhzcGxp Y2VfZWxmX3NlY19ieV9uYW1lKGVsZiwgbmFtZXNbaV0pOwo+ID4gKyAgICAgICAgaWYgKCAhc2Vj ICkKPiA+ICsgICAgICAgIHsKPiA+ICsgICAgICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiJXMl czogJXMgaXMgbWlzc2luZyFcbiIsCj4gPiArICAgICAgICAgICAgICAgICAgIFhTUExJQ0UsIGVs Zi0+bmFtZSwgbmFtZXNbaV0pOwo+ID4gKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4g KyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgaWYgKCAhc2VjLT5zZWMtPnNoX3NpemUgKQo+ ID4gKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAg IHJldHVybiAwOwo+ID4gK30KPiAKPiBTbyB5b3UgY2hlY2sgZm9yIHRoZXJlIGJlaW5nIG9uZSBz dWNoIHNlY3Rpb24uIElzIGhhdmluZyBtdWx0aXBsZQo+IG9mIHRoZW0gb2theSAvIG1lYW5pbmdm dWw/CgovbWUgYmxpbmtzLiBZb3UgY2FuIGhhdmUgbXVsdGlwbGUgRUxGIHNlY3Rpb25zIHdpdGgg dGhlIHNhbWUgbmFtZT8KSSB3aWxsIGRvdWJsZS1jaGVjayB0aGUgc3BlYyBvdmVyIHRoZSB3ZWVr ZW5kIHRvIHNlZS4KCi4uIHNuaXAuLgo+ID4gKyAgICBzZWMgPSB4c3BsaWNlX2VsZl9zZWNfYnlf bmFtZShlbGYsICIueHNwbGljZS5mdW5jcyIpOwo+ID4gKyAgICBpZiAoIHNlYyApCj4gCj4gQXNz dW1pbmcgY2hlY2tfc3BlY2lhbF9zZWN0aW9ucygpIGdvdCBpbnZva2VkIGJlZm9yZSB5b3UgZ2V0 IGhlcmUsCj4gd2h5IHRoZSBjb25kaXRpb25hbD8KCkFuZHJldyBhc2tlZCBmb3IgaXQuIEFsYmVp dCBpdCBpcyBwb2ludGxlc3MgYXMgJ2NoZWNrX3NwZWNpYWxfc2VjdGlvbnMnCndpbGwgYmFpbCBo YWx0IHRoZSBwcm9jZXNzIGlmIHRoaXMgc2VjdGlvbiBpcyBub3QgZm91bmQuCgo+IAo+ID4gKyAg ICB7Cj4gPiArICAgICAgICBpZiAoIHNlYy0+c2VjLT5zaF9zaXplICUgc2l6ZW9mICpwYXlsb2Fk LT5mdW5jcyApCj4gPiArICAgICAgICB7Cj4gPiArICAgICAgICAgICAgZHByaW50ayhYRU5MT0df REVCVUcsICIlcyVzOiBXcm9uZyBzaXplIG9mIC54c3BsaWNlLmZ1bmNzIVxuIiwKPiA+ICsgICAg ICAgICAgICAgICAgICAgIFhTUExJQ0UsIGVsZi0+bmFtZSk7Cj4gPiArICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBwYXlsb2FkLT5m dW5jcyA9IChzdHJ1Y3QgeHNwbGljZV9wYXRjaF9mdW5jICopc2VjLT5sb2FkX2FkZHI7Cj4gPiAr ICAgICAgICBwYXlsb2FkLT5uZnVuY3MgPSBzZWMtPnNlYy0+c2hfc2l6ZSAvIChzaXplb2YgKnBh eWxvYWQtPmZ1bmNzKTsKPiAKPiBTaW5jZSB0aGlzIHJlcGVhdHMgKHNvIGZhciBJIHRob3VnaHQg dGhpcyB3YXMgbW9yZSBsaWtlIGEgbWlzdGFrZSksCj4gYW5kIGRlc3BpdGUgYmVpbmcgYSBtYXR0 ZXIgb2YgdGFzdGUgdG8gc29tZSBkZWdyZWUgLSBtYXkgSSBhc2sKPiB0aGF0IHRoZSBjYW5vbmlj YWwgc2l6ZW9mKCkgYmUgdXNlZCwgaW5zdGVhZCBvZiAoc2l6ZW9mIC4uLikgb3IKPiB3aGF0ZXZl ciBlbHNlIHZhcmlhbnRzPwoKU3VyZS4gSSB3aWxsIGNvbnZlcnQgUm9zcydzIHVzZSBvZiBpdC4K PiAKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBmb3IgKCBpID0gMDsgaSA8IHBheWxvYWQtPm5m dW5jczsgaSsrICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgdW5zaWduZWQgaW50IGo7Cj4gPiAr Cj4gPiArICAgICAgICBmID0gJihwYXlsb2FkLT5mdW5jc1tpXSk7Cj4gPiArCj4gPiArICAgICAg ICBpZiAoICFmLT5uZXdfYWRkciB8fCAhZi0+b2xkX2FkZHIgfHwgIWYtPm9sZF9zaXplIHx8ICFm LT5uZXdfc2l6ZSApCj4gCj4gSXNuJ3QgbmV3X3NpemUgPT0gMCBhIHBhcnRpY3VsYXJseSBlYXN5 IHRvIGRlYWwgd2l0aCBjYXNlPwoKVG8gTk9QIGZ1bmM/IE5vLiBJIHdvdWxkIGhhdmUgdG8gaW5j bHVkZSB0aGUgaGVhZGVycyBmb3IgdGhlIG5vcFtdIGluIHRoZSBhcmNoIHhTcGxpY2UKYW5kIGV4 cGFuZCBvbiBpdHMgcGF0Y2hpbmcgKG9yIGV4cG9zZSB0aGUgdGV4dF9wb2tlIGNvZGUpLgoKVGhh dCB3aWxsIGdyb3cgdGhpcyBwYXRjaCB3aGljaCBpcyBiaWcgZW5vdWdoLiBJIGRvbid0IG1pbmQg ZG9pbmcgaXQgaW4gZnVydGhlciBwYXRjaGVzCihhbmQgSSBiZWxpZXZlIGl0IGlzIG1lbnRpb25l ZCBhcyBhIFRPRE8gaW4gdGhlIGRlc2lnbiBkb2Mgc28gdGhhdCBJIHdvbid0IGZvcmdldCkuCgou LiBzbmlwLi4KPiA+ICsgICAgY2FzZSBYU1BMSUNFX0FDVElPTl9SRVBMQUNFOgo+ID4gKyAgICAg ICAgcmMgPSAwOwo+ID4gKyAgICAgICAgLyogTi5COiBVc2UgJ2FwcGxpZWRfbGlzdCcgbWVtYmVy LCBub3QgJ2xpc3QnLiAqLwo+ID4gKyAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3Jl dmVyc2UgKCBvdGhlciwgdG1wLCAmYXBwbGllZF9saXN0LCBhcHBsaWVkX2xpc3QgKQo+ID4gKyAg ICAgICAgewo+ID4gKyAgICAgICAgICAgIG90aGVyLT5yYyA9IHJldmVydF9wYXlsb2FkKG90aGVy KTsKPiAKPiBXaHkgZG9lcyB0aGlzIHNldCAtPnJjLCBidXQgdGhlIHR3byBlYXJsaWVyIG9uZXMg b25seSBzZXQgdGhlIGxvY2FsCj4gdmFyaWFibGU/Cj4gCj4gPiArICAgICAgICAgICAgaWYgKCBv dGhlci0+cmMgPT0gMCApCj4gPiArICAgICAgICAgICAgICAgIG90aGVyLT5zdGF0ZSA9IFhTUExJ Q0VfU1RBVEVfQ0hFQ0tFRDsKPiA+ICsgICAgICAgICAgICBlbHNlCj4gPiArICAgICAgICAgICAg ewo+ID4gKyAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Cj4gPiArICAgICAgICAgICAgICAg IGJyZWFrOwo+ID4gKyAgICAgICAgICAgIH0KPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAg ICAgIGlmICggcmMgIT0gLUVJTlZBTCApCj4gCj4gUGVyaGFwcyBiZXR0ZXIgInJjID09IDAiPwo+ IAo+ID4gKyAgICAgICAgewo+ID4gKyAgICAgICAgICAgIHJjID0gYXBwbHlfcGF5bG9hZChkYXRh KTsKPiA+ICsgICAgICAgICAgICBpZiAoIHJjID09IDAgKQo+ID4gKyAgICAgICAgICAgICAgICBk YXRhLT5zdGF0ZSA9IFhTUExJQ0VfU1RBVEVfQVBQTElFRDsKPiA+ICsgICAgICAgIH0KPiA+ICsg ICAgICAgIGJyZWFrOwo+ID4gKwo+ID4gKyAgICBkZWZhdWx0Ogo+ID4gKyAgICAgICAgcmMgPSAt RUlOVkFMOwo+ID4gKyAgICAgICAgYnJlYWs7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgZGF0 YS0+cmMgPSByYzsKPiAKPiBPaCwgaGVyZSBpdCBpcy4gQnV0IHdoeSB3b3VsZCBhbiB4c3BsaWNl X3dvcmsuY21kICh3aGljaCBwcm9iYWJseQo+IHNob3VsZG4ndCBtYWtlIGl0IGhlcmUgYW55d2F5 KSBtYXJrIHRoZSBwYXlsb2FkIGhhdmluZyBhbiBlcnJvcj8KCkluIHhzcGxpY2VfYWN0aW9uKCkg d2Ugc2V0IGRhdGEtPnJjIHRvIC1FQUdBSU4gcmlnaHQgYmVmb3JlIHdlIGtpY2sKb2YgdGhlIHNj aGVkdWxlX3dvcmsoKS4gVGhhdCB3YXkgdGhlIHVzZXIgY2FuIGNoZWNrIHRoZSAnc3RhdHVzJwpv ZiB0aGUgcGF0Y2hpbmcgYXMgd2UgYXR0ZW1wdCB0byBkbyBpdC4KCkJ1dCBvbmNlIHRoZSBwYXRj aGluZyBoYXMgYmVlbiBjb21wbGV0ZSB3ZSBNVVNUIHNldCBpdCB0byB6ZXJvCihvciB0byBhbiBl cnJvciBpZiB0aGUgcGF0Y2hpbmcgZmFpbGVkKS4KCj4gSXQgZGlkbid0IGNoYW5nZSBzdGF0ZSBv ciBhbnl0aGluZyBhZnRlciBhbGwuCi4uIHNuaXAuLgo+ID4gK3ZvaWQgY2hlY2tfZm9yX3hzcGxp Y2Vfd29yayh2b2lkKQo+ID4gK3sKPiA+ICsgICAgLyogU2V0IGF0IC0xLCBzbyB3aWxsIGdvIHVw IHRvIG51bV9vbmxpbmVfY3B1cyAtIDEuICovCj4gPiArICAgIGlmICggYXRvbWljX2luY19hbmRf dGVzdCgmeHNwbGljZV93b3JrLnNlbWFwaG9yZSkgKQo+ID4gKyAgICB7Cj4gPiArICAgICAgICBz dHJ1Y3QgcGF5bG9hZCAqcDsKPiA+ICsgICAgICAgIHVuc2lnbmVkIGludCB0b3RhbF9jcHVzOwo+ ID4gKwo+ID4gKyAgICAgICAgcCA9IHhzcGxpY2Vfd29yay5kYXRhOwo+ID4gKyAgICAgICAgaWYg KCAhZ2V0X2NwdV9tYXBzKCkgKQo+ID4gKyAgICAgICAgewo+ID4gKyAgICAgICAgICAgIHByaW50 ayhYRU5MT0dfRVJSICIlcyVzOiBDUFUldSAtIHVuYWJsZSB0byBnZXQgY3B1X21hcHMgbG9jayFc biIsCj4gPiArICAgICAgICAgICAgICAgICAgIFhTUExJQ0UsIHAtPm5hbWUsIGNwdSk7Cj4gPiAr ICAgICAgICAgICAgcGVyX2NwdSh3b3JrX3RvX2RvLCBjcHUpID0gMDsKPiA+ICsgICAgICAgICAg ICB4c3BsaWNlX3dvcmsuZGF0YS0+cmMgPSAtRUJVU1k7Cj4gPiArICAgICAgICAgICAgeHNwbGlj ZV93b3JrLmRvX3dvcmsgPSAwOwo+IAo+IE9uIHg4NiBzdWNoIHBvc3NpYmx5IHNpbXVsdGFuZW91 cyBhY2Nlc3NlcyBtYXkgYmUgb2theSwgYnV0IGlzCj4gdGhhdCB1bml2ZXJzYWxseSB0aGUgY2Fz ZT8gV291bGRuJ3QgaXQgYmV0dGVyIGJlIG9ubHkgdGhlIG1vbmFyY2gKPiB3aGljaCB1cGRhdGVz IHNoYXJlZCBkYXRhPwoKTW9uYXJjaD8gT2ggeW91IG1lYW4gYXJjaCBzcGVjaWZpYyBjb2RlIHBh dGg/Cgo+IAo+ID4gKyAgICAgICAgICAgIC8qCj4gPiArICAgICAgICAgICAgICogRG8gTk9UIGRl Y3JlbWVudCBzZW1hcGhvcmUgZG93biAtIGFzIHRoYXQgbWF5IGNhdXNlIHRoZSBvdGhlcgo+ID4g KyAgICAgICAgICAgICAqIENQVSAod2hpY2ggbWF5IGJlIGF0IHRoaXMgZXhhY3QgbW9tZW50IGNo ZWNraW5nIHRoZSBBU1NFUlQpCj4gCj4gV2hpY2ggQVNTRVJUKCk/IChJIGd1ZXNzIHRoZSBvbmUg YSBmZXcgbGluZXMgdXAgLSBidXQgZG9lcyB0aGF0Cj4gbWF0dGVyPykKCkl0IG1lc3NlZCBtZSB1 cCB3aGVuIEkgd2FzIHdvcmtpbmcgb24gaXQgc28gdGhvdWdodCBJIHdvdWxkIGxlYXZlIHRoYXQg aW4gaGVyZQppbiBjYXNlIGFueWJvZHkgd2FudHMgdG8gbW9kaWZ5IHRoZSBjb2RlLiBPciBtb3Jl IGxpa2VseSAtIGlmIEkgcmV3b3JrCnRoaXMgY29kZSB0aGF0IEkgd2lsbCByZWNhbGwgdGhpcy4K Cj4gPiArICAgICAgICAvKiAiTWFzayIgTk1Jcy4gKi8KPiA+ICsgICAgICAgIHNhdmVkX25taV9j YWxsYmFjayA9IHNldF9ubWlfY2FsbGJhY2sobWFza19ubWlfY2FsbGJhY2spOwo+IAo+IFNvIHdo YXQgaWYgYW4gTk1JIGdvdCByYWlzZWQgb24gYSByZW1vdGUgQ1BVIHJpZ2h0IGJlZm9yZSB5b3Ug c2V0Cj4gdGhpcz8gSS5lLiBkb2Vzbid0IHRoaXMgbmVlZCB0byBtb3ZlIGVhcmxpZXI/CgpIbW0u IFllcyB3ZSBzaG91bGQuIFRoYW5rcyEKPiAKPiA+ICsgICAgICAgIC8qIEFsbCBDUFVzIGFyZSB3 YWl0aW5nLCBub3cgc2lnbmFsIHRvIGRpc2FibGUgSVJRcy4gKi8KPiA+ICsgICAgICAgIHhzcGxp Y2Vfd29yay5yZWFkeSA9IDE7Cj4gPiArICAgICAgICBzbXBfd21iKCk7Cj4gPiArCj4gPiArICAg ICAgICBhdG9taWNfaW5jKCZ4c3BsaWNlX3dvcmsuaXJxX3NlbWFwaG9yZSk7Cj4gPiArICAgICAg ICBpZiAoICF4c3BsaWNlX2RvX3dhaXQoJnhzcGxpY2Vfd29yay5pcnFfc2VtYXBob3JlLCB0aW1l b3V0LCB0b3RhbF9jcHVzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaW1l ZCBvdXQgb24gSVJRIHNlbWFwaG9yZSIpICkKPiAKPiBJJ2QgcHJlZmVyIGlmIHRoZSBjb21tb24g cGFydHMgb2YgdGhhdCBtZXNzYWdlIG1vdmVkIGludG8KPiB4c3BsaWNlX2RvX3dhaXQoKSAtIG5v IHJlYXNvbiB0byBoYXZlIG1vcmUgc3RyaW5nIGxpdGVyYWwgc3BhY2UKPiBvY2N1cGllZCB0aGFu IHJlYWxseSBuZWVkZWQuIEFsc28sIGxvb2tpbmcgYmFjaywgdGhlIHJlc3BlY3RpdmUKPiBmdW5j dGlvbiBwYXJhbWV0ZXIgY291bGQgZG8gd2l0aCBhIG1vcmUgZGVzY3JpcHRpdmUgbmFtZS4KPiAK PiBBbmQgdGhlbiAtIGRvZXMgaXQgbWFrZSBzZW5zZSB0byB3YWl0IHRoZSBwZXJoYXBzIGZ1bGwg MzBtcwo+IG9uIHRoaXMgc2Vjb25kIHN0ZXA/IFJlbmRlenZvdXNlZCBDUFVzIHNob3VsZCByZWFj dCByYXRoZXIKPiBxdWlja2x5IHRvIHRoZSBzaWduYWwgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzLgoK V2UgZG9uJ3QgcmVzZXQgdGhlIHRpbWVvdXQgLSB0aGUgdGltZW91dCBpcyBmb3IgYm90aCBjYWxs cwp0byB4c3BsaWNlX2RvX3dhaXQuCj4gCj4gPiArICAgICAgICB7Cj4gPiArICAgICAgICAgICAg bG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwo+ID4gKyAgICAgICAgICAgIC8qIERvIHRoZSBwYXRjaGlu Zy4gKi8KPiA+ICsgICAgICAgICAgICB4c3BsaWNlX2RvX2FjdGlvbigpOwo+ID4gKyAgICAgICAg ICAgIC8qIFRvIGZsdXNoIG91dCBwaXBlbGluZS4gKi8KPiA+ICsgICAgICAgICAgICBhcmNoX3hz cGxpY2VfcG9zdF9hY3Rpb24oKTsKPiAKPiBUaGUgY29tbWVudCBuZWVkcyB0byBiZWNvbWUgbW9y ZSBnZW5lcmljLCBhbmQgbWF5YmUgdGhlCj4gZnVuY3Rpb24gbmFtZSBtb3JlIHNwZWNpZmljLgoK U2VyaWFsaXplIENQVXM/IEZsdXNoIENQVSBwaXBlbGluZT8gRmx1c2ggQ1BVIGktY2FjaGU/Cj4g Cj4gPiArICAgICAgICAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwo+ID4gKyAgICAgICAg fQo+ID4gKyAgICAgICAgc2V0X25taV9jYWxsYmFjayhzYXZlZF9ubWlfY2FsbGJhY2spOwo+ID4g Kwo+ID4gKyBhYm9ydDoKPiA+ICsgICAgICAgIHBlcl9jcHUod29ya190b19kbywgY3B1KSA9IDA7 Cj4gPiArICAgICAgICB4c3BsaWNlX3dvcmsuZG9fd29yayA9IDA7Cj4gPiArCj4gPiArICAgICAg ICBzbXBfd21iKCk7IC8qIFN5bmNocm9uaXplIHdpdGggd2FpdGluZyBDUFVzLiAqLwo+IAo+IFdo YXQgInN5bmNocm9uaXphdGlvbiIgZG9lcyB0aGlzIGJhcnJpZXIgZG8/CgpGb3IgdGhlIC0+ZG9f d29yayBiZWluZyBzZXQgdG8gemVybyAtIGFzIHRoZXkgYXJlIHJlYWRpbmcgYW5kIHJlYWRpbmcg aXQuCgo+IAo+ID4gKyAgICAgICAgQVNTRVJUKGxvY2FsX2lycV9pc19lbmFibGVkKCkpOwo+IAo+ IElzIHRoZXJlIHJlYWxseSBhbnl0aGluZyBiZXR3ZWVuIHRoZSBlYXJsaWVyIGlkZW50aWNhbCBB U1NFUlQoKSBhbmQKPiB0aGlzIG9uZSB3aGljaCBjb3VsZCBsZWF2ZSBpbnRlcnJ1cHRzIG9mZj8K ClRoZSBwYXRjaGluZyBjYWxscyAoaW4gbGF0ZXIgcGF0Y2hlcykgLSB0aGUgbG9hZCBhbmQgdW5s b2FkIGhvb2tzLiBUaG9zZQpjb3VsZCBpbmFkdmVydGx5IGVuYWJsZWQgaW50ZXJydXB0cy4KCj4g Cj4gPiArICAgICAgICBwdXRfY3B1X21hcHMoKTsKPiA+ICsKPiA+ICsgICAgICAgIHByaW50ayhY RU5MT0dfSU5GTyAiJXMlcyBmaW5pc2hlZCB3aXRoIHJjPSVkXG4iLCBYU1BMSUNFLAo+ID4gKyAg ICAgICAgICAgICAgIHAtPm5hbWUsIHAtPnJjKTsKPiAKPiBBbmQgbm8gcmVjb3JkIGxlZnQgb2Yg d2hhdCB3YXMgZG9uZSB3aXRoIHRoYXQgcGF5bG9hZD8KCj8gQnV0IGl0IGRvZXMuIFRoZSByYyBp cyBtZW50aW9uZWQuLiBPciBhcmUgeW91IHNheWluZyB0aGF0IGl0IHNob3VsZAphbHNvIHNheSB3 aGV0aGVyIGl0IHdhcyBhcHBsaWVkL3JldmVydGVkL3JlcGxhY2VkLCBldGM/Cgo+IAo+ID4gKyAg ICB9Cj4gPiArICAgIGVsc2UKPiA+ICsgICAgewo+ID4gKyAgICAgICAgLyogV2FpdCBmb3IgYWxs IENQVXMgdG8gcmVuZGV6dm91cy4gKi8KPiA+ICsgICAgICAgIHdoaWxlICggeHNwbGljZV93b3Jr LmRvX3dvcmsgJiYgIXhzcGxpY2Vfd29yay5yZWFkeSApCj4gPiArICAgICAgICB7Cj4gPiArICAg ICAgICAgICAgY3B1X3JlbGF4KCk7Cj4gPiArICAgICAgICAgICAgc21wX3JtYigpOwo+IAo+IFdo YXQgaXMgdGhlIGJhcnJpZXIgZG9pbmcgaW5zaWRlIHRoaXMgYW5kIHRoZSBvdGhlciBsb29wIGJl bG93PwoKVGhlIGdvYWwgaXMgdG8gZ2V0IHRoZSB1cGRhdGVkIHZhbHVlIGZyb20gLT5kb193b3Jr IGFuZCAtPnJlYWR5LgoKVGhhdCBpcyB0byBkbyB0aGUgc2FtZSB0aGluZyB3ZSBkbyB3aXRoIGZy b250ZW5kIGFuZCBiYWNrZW5kcyAtIHN5bmMKb3V0IHRoZSBycC9yYyBzbyB0aGF0IHRoZSBvdGhl ciBlbmQgY2FuIHJlYWQgaXQgdGhlIHVwZGF0ZWQgdmFsdWUuCgouLiBzbmlwLi4KPiA+ICBzdGF0 aWMgaW50IF9faW5pdCB4c3BsaWNlX2luaXQodm9pZCkKPiA+ICB7Cj4gPiArICAgIEJVSUxEX0JV R19PTiggc2l6ZW9mKHN0cnVjdCB4c3BsaWNlX3BhdGNoX2Z1bmMpICE9IDY0ICk7Cj4gPiArICAg IEJVSUxEX0JVR19PTiggb2Zmc2V0b2Yoc3RydWN0IHhzcGxpY2VfcGF0Y2hfZnVuYywgbmV3X2Fk ZHIpICE9IDggKTsKPiA+ICsgICAgQlVJTERfQlVHX09OKCBvZmZzZXRvZihzdHJ1Y3QgeHNwbGlj ZV9wYXRjaF9mdW5jLCBuZXdfc2l6ZSkgIT0gMjQgKTsKPiAKPiBXaGF0IGFzc3VtcHRpb25zIGdl dCBicm9rZW4gaWYgdGhlc2Ugc2l6ZXMgY2hhbmdlPwoKSSB0aGluayB5b3UgbWVhbiB0aGUgb2Zm c2V0cz8gVGhleSBjYW4gY2hhbmdlLiBJIGFkZGVkIHRoZW0gdG8gbWFrZSBzdXJlCnRoYXQgb24g MzItYml0IGh5cGVydmlzb3IgKEFSTSkgdGhlIG9mZnNldHMgd291bGQgYmUgdGhlIHNhbWUgYXMg b24gNjQtYml0Cmh5cGVydmlzb3IgKHg4NikuCgpUaGUgc2l6ZSBob3dldmVyIE1VU1QgcmVtYWlu IHRoZSBzYW1lIC0gb3RoZXJ3aXNlIHRoZSB0b29sc3RhY2sgd29uJ3QgcHJvZHVjZQpwcm9wZXIg cGF5bG9hZHMgYW55bW9yZS4KCj4gCj4gPiAtLS0gYS94ZW4vaW5jbHVkZS94ZW4veHNwbGljZS5o Cj4gPiArKysgYi94ZW4vaW5jbHVkZS94ZW4veHNwbGljZS5oCj4gPiBAQCAtMTEsMTIgKzExLDMw IEBAIHN0cnVjdCB4c3BsaWNlX2VsZl9zZWM7Cj4gPiAgc3RydWN0IHhzcGxpY2VfZWxmX3N5bTsK PiA+ICBzdHJ1Y3QgeGVuX3N5c2N0bF94c3BsaWNlX29wOwo+ID4gIAo+ID4gKyNpbmNsdWRlIDx4 ZW4vZWxmc3RydWN0cy5oPgo+ID4gKy8qCj4gPiArICogVGhlIHN0cnVjdHVyZSB3aGljaCBkZWZp bmVzIHRoZSBwYXRjaGluZy4gVGhpcyBpcyB3aGF0IHRoZSBoeXBlcnZpc29yCj4gPiArICogZXhw ZWN0cyBpbiB0aGUgJy54c3BsaWNlLmZ1bmMnIHNlY3Rpb24gb2YgdGhlIEVMRiBmaWxlLgo+ID4g KyAqCj4gPiArICogVGhpcyBNVVNUIGJlIGluIHN5bmMgd2l0aCB3aGF0IHRoZSB0b29scyBnZW5l cmF0ZS4KPiAKPiBJbiB3aGljaCBjYXNlIHRoaXMgbmVlZCB0byBiZSBwYXJ0IG9mIHRoZSBwdWJs aWMgaW50ZXJmYWNlLCBJIHdvdWxkCj4gc2F5LgoKQWggeWVzLiBXaGVyZSBzaG91bGQgaXQgZ28/ IHN5c2N0bC5oIGlzIHdoZXJlIHRoZSBYU1BMSUNFIG9wcyBhcmUgLSBvcgpzaG91bGQgdGhpcyBo YXZlIGl0IGlzIG93biBwdWJsaWMveHNwbGljZS5oICBoZWFkZXIgZmlsZT8KPiAKPiA+ICsgKi8K PiA+ICtzdHJ1Y3QgeHNwbGljZV9wYXRjaF9mdW5jIHsKPiA+ICsgICAgY29uc3QgY2hhciAqbmFt ZTsKPiA+ICsgICAgdWludDY0X3QgbmV3X2FkZHI7Cj4gPiArICAgIHVpbnQ2NF90IG9sZF9hZGRy Owo+ID4gKyAgICB1aW50MzJfdCBuZXdfc2l6ZTsKPiA+ICsgICAgdWludDMyX3Qgb2xkX3NpemU7 Cj4gPiArICAgIHVpbnQ4X3QgdW5kb1s4XTsKPiAKPiBTaG91bGRuJ3QgdGhlIHNpemUgb2YgdGhp cyBhcnJheSBiZSBhIHBlci1hcmNoIGNvbnN0YW50PwoKWWVzLgo+IAo+ID4gKyAgICB1aW50OF90 IHBhZFsyNF07Cj4gCj4gV2hhdCBpcyB0aGlzIHBhZGRpbmcgZmllbGQgZ29vZCBmb3I/CgpJIHdh bnQgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSB0byBiZSBleGFjdGx5IDY0LWJ5dGVzIGFjcm9z cwphbGwgYXJjaGl0ZWN0dXJlcy4gVGhhdCB3YXkgSSBkb24ndCBoYXZlIHRvIG1lc3Mgd2l0aCBj b21wYXQgbGF5ZXIKb3IgaGF2ZSB0aGUgZGVzaWduIGRvYyBiZSBkaWZmZXJlbnQgZm9yIEFSTSB2 cyB4ODYuCgpJdCBnaXZlcyB1cyBlbm91Z2ggb2Ygc3BhY2UgdG8gc3Rhc2ggb3RoZXIgJ3ByaXZh dGUnIGZpZWxkcyB3ZSBtYXkgd2FudApvciBldmVuIGV4cGFuZCB0aGlzIHN0cnVjdHVyZSBpbiB0 aGUgZnV0dXJlIGFuZCBmaWxsIGl0IG91dAp3aXRoIGV4dHJhIGZpZWxkcy4gQVJnaCwgYnV0IGZv ciB0aGF0IHdlIG5lZWQgYSB2ZXJzaW9uIGZpZWxkCnNvbWV3aGVyZS4uLiBNYXliZSBhbm90aGVy IHNlY3Rpb24gLnhzcGxpY2VfdmVyc2lvbiB3aGljaCBqdXN0CmhhcyBhIHZhbHVlIG9mIDE/CgpI b3dldmVyIHRoZSBvbmUgdGhpbmcgSSBhbSBub3Qgc3VyZSBhYm91dCBpcyB0aGUgcGFkZGluZy4K ClRoZSAnY29uc3QgY2hhciAqbmFtZScgb24gMzItYml0IEFSTSB3aWxsIGJlIDQgYnl0ZXMgaGVu Y2UKaXQgd2lsbCBpbnNlcnQgNCBieXRlIHBhZGRpbmcgKGF0IGxlYXN0IHRoYXQgaXMgd2hhdCBw YWhvbGUgdGVsbHMgbWUsCmFuZCB0aGUgQlVJTERfQlVHX09OIGNvbmZpcm1zKS4gQnV0IGlmIEkg YnVpbHQgd2l0aCBjbGFuZyBvciBvdGhlcgpjb21waWxlciBpdCBtYXkgdmVyeSB3ZWxsIGlnbm9y ZSBtZS4KCkFueSBzdWdnZXN0aW9ucz8gSSBjb3VsZCBkbzoKCnN0cnVjdCB4c3BsaWNlX3BhdGNo X2Z1bmMgewogICAgY29uc3QgY2hhciAqbmFtZTsKI2lmZGVmIENPTkZJR18zMgogICAgdWludDMy X3QgX25hbWVfcGFkOwojZW5kaWYKICAgIHVpbnQ2NF90IG5ld19hZGRyOwogICAgdWludDY0X3Qg b2xkX2FkZHI7CiAgICB1aW50MzJfdCBuZXdfc2l6ZTsKICAgIHVpbnQzMl90IG9sZF9zaXplOwog ICAgdWludDhfdCB1bmRvWzhdOwogICAgdWludDhfdCBwYWRbMjRdOwp9CgpCdXQgdGhhdCBpcyBu b3QgdmVyeSBuaWNlLgoKQWxzbyBpZiB3ZSBtYWtlIHRoaXMgYSBwdWJsaWMgaGVhZGVyIEkgY2Fu J3QgdmVyeSB3ZWxsIGV4cG9zZSB0aGUKJ3VuZG8nIGludGVybmFscyAtIGl0IG91Z2h0IHRvIGJl IG9wYXF1ZS4gSWRlYXM/CgpUaGFua3MhCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=