From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH v6 03/24] libxc: Implementation of XEN_XSPLICE_op in libxc Date: Thu, 7 Apr 2016 20:53:07 +0100 Message-ID: <5706BAA3.4030907@citrix.com> References: <1460000983-28170-1-git-send-email-konrad.wilk@oracle.com> <1460000983-28170-4-git-send-email-konrad.wilk@oracle.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 1aoFzS-0000ap-6x for xen-devel@lists.xenproject.org; Thu, 07 Apr 2016 19:53:18 +0000 In-Reply-To: <1460000983-28170-4-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Konrad Rzeszutek Wilk , xen-devel@lists.xenproject.org, konrad@kernel.org, ross.lagerwall@citrix.com, mpohlack@amazon.de, sasha.levin@oracle.com Cc: Ian Jackson , Wei Liu , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org T24gMDcvMDQvMTYgMDQ6NDksIEtvbnJhZCBSemVzenV0ZWsgV2lsayB3cm90ZToKPiBkaWZmIC0t Z2l0IGEvdG9vbHMvbGlieGMveGNfbWlzYy5jIGIvdG9vbHMvbGlieGMveGNfbWlzYy5jCj4gaW5k ZXggMTI0NTM3Yi4uZTA5YWM5MCAxMDA2NDQKPiAtLS0gYS90b29scy9saWJ4Yy94Y19taXNjLmMK PiArKysgYi90b29scy9saWJ4Yy94Y19taXNjLmMKPiBAQCAtNjkzLDYgKzY5MywzNDMgQEAgaW50 IHhjX2h2bV9pbmplY3RfdHJhcCgKPiAgICAgIHJldHVybiByYzsKPiAgfQo+ICAKPiAraW50IHhj X3hzcGxpY2VfdXBsb2FkKHhjX2ludGVyZmFjZSAqeGNoLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqbmFtZSwKPiArICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBh eWxvYWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplKQo+ICt7Cj4gKyAg ICBpbnQgcmM7Cj4gKyAgICBERUNMQVJFX1NZU0NUTDsKPiArICAgIERFQ0xBUkVfSFlQRVJDQUxM X0JVRkZFUihjaGFyLCBsb2NhbCk7Cj4gKyAgICBERUNMQVJFX0hZUEVSQ0FMTF9CT1VOQ0UobmFt ZSwgMCAvKiBsYXRlciAqLywgWENfSFlQRVJDQUxMX0JVRkZFUl9CT1VOQ0VfSU4pOwo+ICsgICAg eGVuX3hzcGxpY2VfbmFtZV90IGRlZl9uYW1lID0geyAucGFkID0geyAwLCAwLCAwIH0gfTsKPiAr Cj4gKyAgICBpZiAoICFuYW1lIHx8ICFwYXlsb2FkICkKPiArICAgICAgICByZXR1cm4gLTE7CgpJ dHMgcmVhc29uYWJsZSB0byB0cnVzdCAob3IgYXNzZXJ0KCkpIHRoYXQgdGhlc2UgcG9pbnRlcnMg YXJlIG5vdCBOVUxMLgoKUGxlYXNlIGhvd2V2ZXIgZG9uJ3QgcmV0dXJuIC0xIHdpdGhvdXQgc2V0 dGluZyBlcnJuby4gIFdlIGFscmVhZHkgaGF2ZQp0b28gbWFueSAiZmFpbGVkOiBTdWNjZXNzIiBj YXNlcyBpbiBsaWJ4Yy4gIElmIHlvdSBkbyB3YW50IHRvIGtlZXAgdGhpcywKdGhlbiBFSU5WQUwu Cgo+ICsKPiArICAgIGRlZl9uYW1lLnNpemUgPSBzdHJsZW4obmFtZSkgKyAxOwo+ICsgICAgaWYg KCBkZWZfbmFtZS5zaXplID4gWEVOX1hTUExJQ0VfTkFNRV9TSVpFICkKCmVycm5vID0gRUlOVkFM Cgo+ICsgICAgICAgIHJldHVybiAtMTsKPiArCj4gKyAgICBIWVBFUkNBTExfQk9VTkNFX1NFVF9T SVpFKG5hbWUsIGRlZl9uYW1lLnNpemUpOwo+ICsKPiArICAgIGlmICggeGNfaHlwZXJjYWxsX2Jv dW5jZV9wcmUoeGNoLCBuYW1lKSApCj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsKPiArICAgIGxv Y2FsID0geGNfaHlwZXJjYWxsX2J1ZmZlcl9hbGxvYyh4Y2gsIGxvY2FsLCBzaXplKTsKPiArICAg IGlmICggIWxvY2FsICkKPiArICAgIHsKPiArICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bv c3QoeGNoLCBuYW1lKTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKyAgICBtZW1j cHkobG9jYWwsIHBheWxvYWQsIHNpemUpOwo+ICsKPiArICAgIHN5c2N0bC5jbWQgPSBYRU5fU1lT Q1RMX3hzcGxpY2Vfb3A7Cj4gKyAgICBzeXNjdGwudS54c3BsaWNlLmNtZCA9IFhFTl9TWVNDVExf WFNQTElDRV9VUExPQUQ7Cj4gKyAgICBzeXNjdGwudS54c3BsaWNlLnBhZCA9IDA7Cj4gKyAgICBz eXNjdGwudS54c3BsaWNlLnUudXBsb2FkLnNpemUgPSBzaXplOwo+ICsgICAgc2V0X3hlbl9ndWVz dF9oYW5kbGUoc3lzY3RsLnUueHNwbGljZS51LnVwbG9hZC5wYXlsb2FkLCBsb2NhbCk7Cj4gKwo+ ICsgICAgc3lzY3RsLnUueHNwbGljZS51LnVwbG9hZC5uYW1lID0gZGVmX25hbWU7Cj4gKyAgICBz ZXRfeGVuX2d1ZXN0X2hhbmRsZShzeXNjdGwudS54c3BsaWNlLnUudXBsb2FkLm5hbWUubmFtZSwg bmFtZSk7Cj4gKwo+ICsgICAgcmMgPSBkb19zeXNjdGwoeGNoLCAmc3lzY3RsKTsKPiArCj4gKyAg ICB4Y19oeXBlcmNhbGxfYnVmZmVyX2ZyZWUoeGNoLCBsb2NhbCk7Cj4gKyAgICB4Y19oeXBlcmNh bGxfYm91bmNlX3Bvc3QoeGNoLCBuYW1lKTsKPiArCj4gKyAgICByZXR1cm4gcmM7Cj4gK30KPiAr Cj4gK2ludCB4Y194c3BsaWNlX2dldCh4Y19pbnRlcmZhY2UgKnhjaCwKPiArICAgICAgICAgICAg ICAgICAgIGNoYXIgKm5hbWUsCj4gKyAgICAgICAgICAgICAgICAgICB4ZW5feHNwbGljZV9zdGF0 dXNfdCAqc3RhdHVzKQo+ICt7Cj4gKyAgICBpbnQgcmM7Cj4gKyAgICBERUNMQVJFX1NZU0NUTDsK PiArICAgIERFQ0xBUkVfSFlQRVJDQUxMX0JPVU5DRShuYW1lLCAwIC8qYWRqdXN0IGxhdGVyICov LCBYQ19IWVBFUkNBTExfQlVGRkVSX0JPVU5DRV9JTik7Cj4gKyAgICB4ZW5feHNwbGljZV9uYW1l X3QgZGVmX25hbWUgPSB7IC5wYWQgPSB7IDAsIDAsIDAgfSB9Owo+ICsKPiArICAgIGlmICggIW5h bWUgKQoKRUlOVkFMCgo+ICsgICAgICAgIHJldHVybiAtMTsKPiArCj4gKyAgICBkZWZfbmFtZS5z aXplID0gc3RybGVuKG5hbWUpICsgMTsKPiArICAgIGlmICggZGVmX25hbWUuc2l6ZSA+IFhFTl9Y U1BMSUNFX05BTUVfU0laRSApCgpFSU5WQUwKCj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsKPiAr ICAgIEhZUEVSQ0FMTF9CT1VOQ0VfU0VUX1NJWkUobmFtZSwgZGVmX25hbWUuc2l6ZSk7Cj4gKwo+ ICsgICAgaWYgKCB4Y19oeXBlcmNhbGxfYm91bmNlX3ByZSh4Y2gsIG5hbWUpICkKPiArICAgICAg ICByZXR1cm4gLTE7Cj4gKwo+ICsgICAgc3lzY3RsLmNtZCA9IFhFTl9TWVNDVExfeHNwbGljZV9v cDsKPiArICAgIHN5c2N0bC51LnhzcGxpY2UuY21kID0gWEVOX1NZU0NUTF9YU1BMSUNFX0dFVDsK PiArICAgIHN5c2N0bC51LnhzcGxpY2UucGFkID0gMDsKPiArCj4gKyAgICBzeXNjdGwudS54c3Bs aWNlLnUuZ2V0LnN0YXR1cy5zdGF0ZSA9IDA7Cj4gKyAgICBzeXNjdGwudS54c3BsaWNlLnUuZ2V0 LnN0YXR1cy5yYyA9IDA7Cj4gKwo+ICsgICAgc3lzY3RsLnUueHNwbGljZS51LmdldC5uYW1lID0g ZGVmX25hbWU7Cj4gKyAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShzeXNjdGwudS54c3BsaWNlLnUu Z2V0Lm5hbWUubmFtZSwgbmFtZSk7Cj4gKwo+ICsgICAgcmMgPSBkb19zeXNjdGwoeGNoLCAmc3lz Y3RsKTsKPiArCj4gKyAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNoLCBuYW1lKTsKPiAr Cj4gKyAgICBtZW1jcHkoc3RhdHVzLCAmc3lzY3RsLnUueHNwbGljZS51LmdldC5zdGF0dXMsIHNp emVvZigqc3RhdHVzKSk7Cj4gKwo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICsvKgo+ICsg KiBUaGUgaGVhcnQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBnZXQgYW4gYXJyYXkgb2YgeGVuX3hz cGxpY2Vfc3RhdHVzX3QuCj4gKyAqCj4gKyAqIEhvd2V2ZXIgaXQgaXMgY29tcGxleCBiZWNhdXNl IGl0IGhhcyB0byBkZWFsIHdpdGggdGhlIGh5cGVydmlzb3IKPiArICogcmV0dXJuaW5nIHNvbWUg b2YgdGhlIHJlcXVlc3RlZCBkYXRhIG9yIGRhdGEgYmVpbmcgc3RhbGUKPiArICogKGFub3RoZXIg aHlwZXJjYWxsIG1pZ2h0IGFsdGVyIHRoZSBsaXN0KS4KPiArICoKPiArICogVGhlIHBhcmFtZXRl cnMgdGhhdCB0aGUgZnVuY3Rpb24gZXhwZWN0cyB0byBjb250YWluIGRhdGEgZnJvbQo+ICsgKiB0 aGUgaHlwZXJ2aXNvciBhcmU6ICdpbmZvJywgJ25hbWUnLCBhbmQgJ2xlbicuIFRoZSAnZG9uZScg YW5kCj4gKyAqICdsZWZ0JyBhcmUgYWxzbyB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBlbnRy aWVzIGZpbGxlZCBvdXQKPiArICogYW5kIHJlc3BlY3RpdmVseSB0aGUgbnVtYmVyIG9mIGVudHJp ZXMgbGVmdCB0byBnZXQgZnJvbSBoeXBlcnZpc29yLgo+ICsgKgo+ICsgKiBJdCBpcyBleHBlY3Rl ZCB0aGF0IHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgdGhlCj4gKyAqICds ZWZ0JyBhbmQgdXNlIHRoZSB2YWx1ZSBmb3IgJ3N0YXJ0Jy4gVGhpcyB3YXkgd2UgaGF2ZSBhbgo+ ICsgKiBjdXJzb3IgaW4gdGhlIGFycmF5LiBOb3RlIHRoYXQgdGhlICdpbmZvJywnbmFtZScsIGFu ZCAnbGVuJyB3aWxsCj4gKyAqIGJlIHVwZGF0ZWQgYXQgdGhlIHN1YnNlcXVlbnQgY2FsbHMuCj4g KyAqCj4gKyAqIFRoZSAnbWF4JyBpcyB0byBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyIHdpdGgg dGhlIG1heGltdW0KPiArICogbnVtYmVyIG9mIGVudHJpZXMgdGhhdCAnaW5mbycsICduYW1lJywg YW5kICdsZW4nIGFycmF5cyBjYW4KPiArICogYmUgZmlsbGVkIHVwIHdpdGguCj4gKyAqCj4gKyAq IEVhY2ggZW50cnkgaW4gdGhlICduYW1lJyBhcnJheSBpcyBleHBlY3RlZCB0byBiZSBvZiBYRU5f WFNQTElDRV9OQU1FX1NJWkUKPiArICogbGVuZ3RoLgo+ICsgKgo+ICsgKiBFYWNoIGVudHJ5IGlu IHRoZSAnaW5mbycgYXJyYXkgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgeGVuX3hzcGxpY2Vfc3RhdHVz X3QKPiArICogc3RydWN0dXJlIHNpemUuCj4gKyAqCj4gKyAqIEVhY2ggZW50cnkgaW4gdGhlICds ZW4nIGFycmF5IGlzIGV4cGVjdGVkIHRvIGJlIG9mIHVpbnQzMl90IHNpemUuCj4gKyAqCj4gKyAq IFRoZSByZXR1cm4gdmFsdWUgaXMgemVybyBpZiB0aGUgaHlwZXJjYWxsIGNvbXBsZXRlZCBzdWNj ZXNzZnVsbHkuCj4gKyAqIE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGlzIF9ub3RfIHRoZSBh bW91bnQgb2YgZW50cmllcyBmaWxsZWQKPiArICogb3V0IC0gdGhhdCBpcyBzYXZlZCBpbiAnZG9u ZScuCj4gKyAqCj4gKyAqIElmIHRoZXJlIHdhcyBhbiBlcnJvciBwZXJmb3JtaW5nIHRoZSBvcGVy YXRpb24sIHRoZSByZXR1cm4gdmFsdWUKPiArICogd2lsbCBjb250YWluIGFuIG5lZ2F0aXZlIC1F WFggdHlwZSB2YWx1ZS4gVGhlICdkb25lJyBhbmQgJ2xlZnQnCj4gKyAqIHdpbGwgY29udGFpbiB0 aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBoYWQgYmVlbiBzdWNjZXNmdWxseQo+ICsgKiByZXRy aWV2ZWQgKGlmIGFueSkuCj4gKyAqLwo+ICtpbnQgeGNfeHNwbGljZV9saXN0KHhjX2ludGVyZmFj ZSAqeGNoLCB1bnNpZ25lZCBpbnQgbWF4LCB1bnNpZ25lZCBpbnQgc3RhcnQsCj4gKyAgICAgICAg ICAgICAgICAgICAgeGVuX3hzcGxpY2Vfc3RhdHVzX3QgKmluZm8sCj4gKyAgICAgICAgICAgICAg ICAgICAgY2hhciAqbmFtZSwgdWludDMyX3QgKmxlbiwKPiArICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgKmRvbmUsCj4gKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICps ZWZ0KQo+ICt7Cj4gKyAgICBpbnQgcmM7Cj4gKyAgICBERUNMQVJFX1NZU0NUTDsKPiArICAgIC8q IFRoZSBzaXplcyBhcmUgYWRqdXN0ZWQgbGF0ZXIgLSBoZW5jZSB6ZXJvLiAqLwo+ICsgICAgREVD TEFSRV9IWVBFUkNBTExfQk9VTkNFKGluZm8sIDAsIFhDX0hZUEVSQ0FMTF9CVUZGRVJfQk9VTkNF X09VVCk7Cj4gKyAgICBERUNMQVJFX0hZUEVSQ0FMTF9CT1VOQ0UobmFtZSwgMCwgWENfSFlQRVJD QUxMX0JVRkZFUl9CT1VOQ0VfT1VUKTsKPiArICAgIERFQ0xBUkVfSFlQRVJDQUxMX0JPVU5DRShs ZW4sIDAsIFhDX0hZUEVSQ0FMTF9CVUZGRVJfQk9VTkNFX09VVCk7Cj4gKyAgICB1aW50MzJfdCBt YXhfYmF0Y2hfc3osIG5yOwo+ICsgICAgdWludDMyX3QgdmVyc2lvbiA9IDAsIHJldHJpZXMgPSAw Owo+ICsgICAgdWludDMyX3QgYWRqdXN0ID0gMDsKPiArICAgIHNzaXplX3Qgc3o7Cj4gKwo+ICsg ICAgaWYgKCAhbWF4IHx8ICFpbmZvIHx8ICFuYW1lIHx8ICFsZW4gKQoKRUlOVkFMCgo+ICsgICAg ICAgIHJldHVybiAtMTsKPiArCj4gKyAgICBzeXNjdGwuY21kID0gWEVOX1NZU0NUTF94c3BsaWNl X29wOwo+ICsgICAgc3lzY3RsLnUueHNwbGljZS5jbWQgPSBYRU5fU1lTQ1RMX1hTUExJQ0VfTElT VDsKPiArICAgIHN5c2N0bC51LnhzcGxpY2UucGFkID0gMDsKPiArICAgIHN5c2N0bC51LnhzcGxp Y2UudS5saXN0LnZlcnNpb24gPSAwOwo+ICsgICAgc3lzY3RsLnUueHNwbGljZS51Lmxpc3QuaWR4 ID0gc3RhcnQ7Cj4gKyAgICBzeXNjdGwudS54c3BsaWNlLnUubGlzdC5wYWQgPSAwOwo+ICsKPiAr ICAgIG1heF9iYXRjaF9zeiA9IG1heDsKPiArICAgIC8qIENvbnZpZW5jZSB2YWx1ZS4gKi8KPiAr ICAgIHN6ID0gc2l6ZW9mKCpuYW1lKSAqIFhFTl9YU1BMSUNFX05BTUVfU0laRTsKPiArICAgICpk b25lID0gMDsKPiArICAgICpsZWZ0ID0gMDsKPiArICAgIGRvIHsKPiArICAgICAgICAvKgo+ICsg ICAgICAgICAqIFRoZSBmaXJzdCB0aW1lIHdlIGdvIGluIHRoaXMgbG9vcCBvdXIgJ21heCcgbWF5 IGJlIGJpZ2dlcgo+ICsgICAgICAgICAqIHRoYW4gd2hhdCB0aGUgaHlwZXJ2aXNvciBpcyBjb21m b3J0YWJsZSB3aXRoIC0gaGVuY2UgdGhlIGZpcnN0Cj4gKyAgICAgICAgICogY291cGxlIG9mIGxv b3BzIG1heSBhZGp1c3QgdGhlIG51bWJlciBvZiBlbnRyaWVzIHdlIHdpbGwKPiArICAgICAgICAg KiB3YW50IGZpbGxlZCAodHJhY2tlZCBieSAnbnInKS4KPiArICAgICAgICAgKgo+ICsgICAgICAg ICAqIE4uQi4gVGhpcyBpcyBhIGRvIHsgfSB3aGlsZSBsb29wIGFuZCB0aGUgcmlnaHQgaGFuZCBz aWRlIG9mCj4gKyAgICAgICAgICogdGhlIGNvbmRpdGlvbmFsIHdoZW4gYWRqdXN0aW5nIHdpbGwg ZXZhbHVhdGUgdG8gZmFsc2UgKGFzCj4gKyAgICAgICAgICogKmxlZnQgaXMgc2V0IHRvIHplcm8g YmVmb3JlIHRoZSBsb29wLiBIZW5jZSB3ZSBuZWVkIHRoaXMKPiArICAgICAgICAgKiBhZGp1c3Qg LSBldmVuIGlmIHdlIHJlc2V0IGl0IGF0IHRoZSBzdGFydCBvZiB0aGUgbG9vcC4KPiArICAgICAg ICAgKi8KPiArICAgICAgICBpZiAoIGFkanVzdCApCj4gKyAgICAgICAgICAgIGFkanVzdCA9IDA7 IC8qIFVzZWQgd2hlbiBhZGp1c3RpbmcgdGhlICdtYXhfYmF0Y2hfc3onIG9yICdyZXRyaWVzJy4g Ki8KPiArCj4gKyAgICAgICAgbnIgPSBtaW4obWF4IC0gKmRvbmUsIG1heF9iYXRjaF9zeik7Cj4g Kwo+ICsgICAgICAgIHN5c2N0bC51LnhzcGxpY2UudS5saXN0Lm5yID0gbnI7Cj4gKyAgICAgICAg LyogRml4IHRoZSBzaXplIChtYXkgdmFyeSBiZXR3ZWVuIGh5cGVyY2FsbHMpLiAqLwo+ICsgICAg ICAgIEhZUEVSQ0FMTF9CT1VOQ0VfU0VUX1NJWkUoaW5mbywgbnIgKiBzaXplb2YoKmluZm8pKTsK PiArICAgICAgICBIWVBFUkNBTExfQk9VTkNFX1NFVF9TSVpFKG5hbWUsIG5yICogbnIpOwo+ICsg ICAgICAgIEhZUEVSQ0FMTF9CT1VOQ0VfU0VUX1NJWkUobGVuLCBuciAqIHNpemVvZigqbGVuKSk7 Cj4gKyAgICAgICAgLyogTW92ZSB0aGUgcG9pbnRlciB0byBwcm9wZXIgb2Zmc2V0IGludG8gJ2lu Zm8nLiAqLwo+ICsgICAgICAgIChIWVBFUkNBTExfQlVGRkVSKGluZm8pKS0+dWJ1ZiA9IGluZm8g KyAqZG9uZTsKPiArICAgICAgICAoSFlQRVJDQUxMX0JVRkZFUihuYW1lKSktPnVidWYgPSBuYW1l ICsgKHN6ICogKmRvbmUpOwo+ICsgICAgICAgIChIWVBFUkNBTExfQlVGRkVSKGxlbikpLT51YnVm ID0gbGVuICsgKmRvbmU7Cj4gKyAgICAgICAgLyogQWxsb2NhdGUgbWVtb3J5LiAqLwo+ICsgICAg ICAgIHJjID0geGNfaHlwZXJjYWxsX2JvdW5jZV9wcmUoeGNoLCBpbmZvKTsKPiArICAgICAgICBp ZiAoIHJjICkKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgIHJjID0geGNfaHlw ZXJjYWxsX2JvdW5jZV9wcmUoeGNoLCBuYW1lKTsKPiArICAgICAgICBpZiAoIHJjICkKPiArICAg ICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgIHJjID0geGNfaHlwZXJjYWxsX2JvdW5jZV9w cmUoeGNoLCBsZW4pOwo+ICsgICAgICAgIGlmICggcmMgKQo+ICsgICAgICAgICAgICBicmVhazsK PiArCj4gKyAgICAgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUoc3lzY3RsLnUueHNwbGljZS51Lmxp c3Quc3RhdHVzLCBpbmZvKTsKPiArICAgICAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShzeXNjdGwu dS54c3BsaWNlLnUubGlzdC5uYW1lLCBuYW1lKTsKPiArICAgICAgICBzZXRfeGVuX2d1ZXN0X2hh bmRsZShzeXNjdGwudS54c3BsaWNlLnUubGlzdC5sZW4sIGxlbik7Cj4gKwo+ICsgICAgICAgIHJj ID0gZG9fc3lzY3RsKHhjaCwgJnN5c2N0bCk7Cj4gKyAgICAgICAgLyoKPiArICAgICAgICAgKiBG cm9tIGhlcmUgb24gd2UgTVVTVCBjYWxsIHhjX2h5cGVyY2FsbF9ib3VuY2UuIElmIHJjIDwgMCB3 ZQo+ICsgICAgICAgICAqIGVuZCB1cCBkb2luZyBpdCAob3V0c2lkZSB0aGUgbG9vcCksIHNvIHVz aW5nIGEgYnJlYWsgaXMgT0suCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgaWYgKCByYyA8IDAg JiYgZXJybm8gPT0gRTJCSUcgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgaWYgKCBtYXhf YmF0Y2hfc3ogPD0gMSApCj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAg bWF4X2JhdGNoX3N6ID4+PSAxOwo+ICsgICAgICAgICAgICBhZGp1c3QgPSAxOyAvKiBGb3IgdGhl IGxvb3AgY29uZGl0aW9uYWwgdG8gbGV0IHVzIGxvb3AgYWdhaW4uICovCj4gKyAgICAgICAgICAg IC8qIE5vIG1lbW9yeSBsZWFrcyEgKi8KPiArICAgICAgICAgICAgeGNfaHlwZXJjYWxsX2JvdW5j ZV9wb3N0KHhjaCwgaW5mbyk7Cj4gKyAgICAgICAgICAgIHhjX2h5cGVyY2FsbF9ib3VuY2VfcG9z dCh4Y2gsIG5hbWUpOwo+ICsgICAgICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNo LCBsZW4pOwo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICB9Cj4gKyAgICAgICAg ZWxzZSBpZiAoIHJjIDwgMCApIC8qIEZvciBhbGwgb3RoZXIgZXJyb3JzIHdlIGJhaWwgb3V0LiAq Lwo+ICsgICAgICAgICAgICBicmVhazsKPiArCj4gKyAgICAgICAgaWYgKCAhdmVyc2lvbiApCj4g KyAgICAgICAgICAgIHZlcnNpb24gPSBzeXNjdGwudS54c3BsaWNlLnUubGlzdC52ZXJzaW9uOwo+ ICsKPiArICAgICAgICBpZiAoIHN5c2N0bC51LnhzcGxpY2UudS5saXN0LnZlcnNpb24gIT0gdmVy c2lvbiApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICAvKiBXZSBjb3VsZCBtYWtlIHRoaXMg Y29uZmlndXJhYmxlIGFzIHBhcmFtZXRlcj8gKi8KPiArICAgICAgICAgICAgaWYgKCByZXRyaWVz KysgPiAzICkKPiArICAgICAgICAgICAgewo+ICsgICAgICAgICAgICAgICAgcmMgPSAtMTsKPiAr ICAgICAgICAgICAgICAgIGVycm5vID0gRUJVU1k7Cj4gKyAgICAgICAgICAgICAgICBicmVhazsK PiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAqZG9uZSA9IDA7IC8qIFJldHJ5IGZyb20g c2NyYXRjaC4gKi8KPiArICAgICAgICAgICAgdmVyc2lvbiA9IHN5c2N0bC51LnhzcGxpY2UudS5s aXN0LnZlcnNpb247Cj4gKyAgICAgICAgICAgIGFkanVzdCA9IDE7IC8qIEFuZCBtYWtlIHN1cmUg d2UgY29udGludWUgaW4gdGhlIGxvb3AuICovCj4gKyAgICAgICAgICAgIC8qIE5vIG1lbW9yeSBs ZWFrcy4gKi8KPiArICAgICAgICAgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9wb3N0KHhjaCwgaW5m byk7Cj4gKyAgICAgICAgICAgIHhjX2h5cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIG5hbWUpOwo+ ICsgICAgICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNoLCBsZW4pOwo+ICsgICAg ICAgICAgICBjb250aW51ZTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8qIFdlIHNob3Vs ZCBuZXZlciBoaXQgdGhpcywgYnV0IGp1c3QgaW4gY2FzZS4gKi8KPiArICAgICAgICBpZiAoIHJj ID4gbnIgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgZXJybm8gPSBFT1ZFUkZMT1c7IC8q IE92ZXJmbG93ISAqLwo+ICsgICAgICAgICAgICByYyA9IC0xOwo+ICsgICAgICAgICAgICBicmVh azsKPiArICAgICAgICB9Cj4gKyAgICAgICAgKmxlZnQgPSBzeXNjdGwudS54c3BsaWNlLnUubGlz dC5ucjsgLyogVG90YWwgcmVtYWluaW5nIGNvdW50LiAqLwo+ICsgICAgICAgIC8qIENvcHkgb25s eSB1cCAncmMnIG9mIGRhdGEnIC0gd2UgY291bGQgYWRkICdtaW4ocmMsbnIpIGlmIGRlc2lyZWQu ICovCj4gKyAgICAgICAgSFlQRVJDQUxMX0JPVU5DRV9TRVRfU0laRShpbmZvLCAocmMgKiBzaXpl b2YoKmluZm8pKSk7Cj4gKyAgICAgICAgSFlQRVJDQUxMX0JPVU5DRV9TRVRfU0laRShuYW1lLCAo cmMgKiBzeikpOwo+ICsgICAgICAgIEhZUEVSQ0FMTF9CT1VOQ0VfU0VUX1NJWkUobGVuLCAocmMg KiBzaXplb2YoKmxlbikpKTsKPiArICAgICAgICAvKiBCb3VuY2UgdGhlIGRhdGEgYW5kIGZyZWUg dGhlIGJvdW5jZSBidWZmZXIuICovCj4gKyAgICAgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9wb3N0 KHhjaCwgaW5mbyk7Cj4gKyAgICAgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9wb3N0KHhjaCwgbmFt ZSk7Cj4gKyAgICAgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9wb3N0KHhjaCwgbGVuKTsKPiArICAg ICAgICAvKiBBbmQgdXBkYXRlIGhvdyBtYW55IGVsZW1lbnRzIG9mIGluZm8gd2UgaGF2ZSBjb3Bp ZWQgaW50by4gKi8KPiArICAgICAgICAqZG9uZSArPSByYzsKPiArICAgICAgICAvKiBVcGRhdGUg aWR4LiAqLwo+ICsgICAgICAgIHN5c2N0bC51LnhzcGxpY2UudS5saXN0LmlkeCA9ICpkb25lOwo+ ICsgICAgfSB3aGlsZSAoIGFkanVzdCB8fCAoKmRvbmUgPCBtYXggJiYgKmxlZnQgIT0gMCkgKTsK PiArCj4gKyAgICBpZiAoIHJjIDwgMCApCj4gKyAgICB7Cj4gKyAgICAgICAgeGNfaHlwZXJjYWxs X2JvdW5jZV9wb3N0KHhjaCwgbGVuKTsKPiArICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bv c3QoeGNoLCBuYW1lKTsKPiArICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNoLCBp bmZvKTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gcmMgPiAwID8gMCA6IHJjOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IF94Y194c3BsaWNlX2FjdGlvbih4Y19pbnRlcmZhY2UgKnhjaCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFjdGlvbiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdWludDMyX3QgdGltZW91dCkKPiArewo+ICsgICAgaW50IHJjOwo+ICsg ICAgREVDTEFSRV9TWVNDVEw7Cj4gKyAgICAvKiBUaGUgc2l6ZSBpcyBmaWd1cmVkIG91dCB3aGVu IHdlIHN0cmxlbihuYW1lKSAqLwo+ICsgICAgREVDTEFSRV9IWVBFUkNBTExfQk9VTkNFKG5hbWUs IDAsIFhDX0hZUEVSQ0FMTF9CVUZGRVJfQk9VTkNFX0lOKTsKPiArICAgIHhlbl94c3BsaWNlX25h bWVfdCBkZWZfbmFtZSA9IHsgLnBhZCA9IHsgMCwgMCwgMCB9IH07Cj4gKwo+ICsgICAgZGVmX25h bWUuc2l6ZSA9IHN0cmxlbihuYW1lKSArIDE7Cj4gKwo+ICsgICAgaWYgKCBkZWZfbmFtZS5zaXpl ID4gWEVOX1hTUExJQ0VfTkFNRV9TSVpFICkKCkVJTlZBTAoKPiArICAgICAgICByZXR1cm4gLTE7 Cj4gKwo+ICsgICAgSFlQRVJDQUxMX0JPVU5DRV9TRVRfU0laRShuYW1lLCBkZWZfbmFtZS5zaXpl KTsKPiArCj4gKyAgICBpZiAoIHhjX2h5cGVyY2FsbF9ib3VuY2VfcHJlKHhjaCwgbmFtZSkgKQo+ ICsgICAgICAgIHJldHVybiAtMTsKPiArCj4gKyAgICBzeXNjdGwuY21kID0gWEVOX1NZU0NUTF94 c3BsaWNlX29wOwo+ICsgICAgc3lzY3RsLnUueHNwbGljZS5jbWQgPSBYRU5fU1lTQ1RMX1hTUExJ Q0VfQUNUSU9OOwo+ICsgICAgc3lzY3RsLnUueHNwbGljZS5wYWQgPSAwOwo+ICsgICAgc3lzY3Rs LnUueHNwbGljZS51LmFjdGlvbi5jbWQgPSBhY3Rpb247Cj4gKyAgICBzeXNjdGwudS54c3BsaWNl LnUuYWN0aW9uLnRpbWVvdXQgPSB0aW1lb3V0Owo+ICsKPiArICAgIHN5c2N0bC51LnhzcGxpY2Uu dS5hY3Rpb24ubmFtZSA9IGRlZl9uYW1lOwo+ICsgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUoc3lz Y3RsLnUueHNwbGljZS51LmFjdGlvbi5uYW1lLm5hbWUsIG5hbWUpOwo+ICsKPiArICAgIHJjID0g ZG9fc3lzY3RsKHhjaCwgJnN5c2N0bCk7Cj4gKwo+ICsgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9w b3N0KHhjaCwgbmFtZSk7CgpYZW4gZG9lc24ndCB3cml0ZSB0byBuYW1lIGF0IGFsbCwgZG9lcyBp dD8gIChmdXJ0aGVyIHN1Z2dlc3RlZCBieQpCT1VOQ0VfSU4pLgoKSWYgbm90LCB5b3Ugc2hvdWxk IHMvY2hhciAqbmFtZS9jb25zdCAmL2cgYWNyb3NzIHRoaXMgcGF0Y2gKCk90aGVyd2lzZSwgbm8g bWFqb3IgcHJvYmxlbXMuICBXaXRoIHRoZXNlIGZpeGVkLCBSZXZpZXdlZC1ieTogQW5kcmV3CkNv b3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KCj4gKwo+ICsgICAgcmV0dXJuIHJjOwo+ ICt9CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVu LWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMu eGVuLm9yZy94ZW4tZGV2ZWwK