From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH 10/18] xen/arm: Implement GIC suspend/resume functions (gicv2 only) Date: Wed, 14 Nov 2018 13:24:38 +0000 Message-ID: <64d1c6ba-de67-4757-5be6-2390286eb60e@arm.com> References: <1542022244-22977-1-git-send-email-mirela.simonovic@aggios.com> <1542022244-22977-11-git-send-email-mirela.simonovic@aggios.com> <746b0ad8-4ce1-dfaf-eadc-939657426900@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Mirela Simonovic , xen-devel@lists.xen.org, xen-devel@lists.xenproject.org Cc: stefano.stabellini@xilinx.com, Stefano Stabellini , dm@aggios.com, saeed.nowshadi@xilinx.com List-Id: xen-devel@lists.xenproject.org SGkgTWlyZWxhLAoKT24gMTQvMTEvMjAxOCAxMjo1MiwgTWlyZWxhIFNpbW9ub3ZpYyB3cm90ZToK PiBUaGFua3MgZm9yIHRoZSByZXZpZXcKPiAKPiAKPiBPbiAxMS8xNC8yMDE4IDAxOjQxIFBNLCBK dWxpZW4gR3JhbGwgd3JvdGU6Cj4+IEhpLAo+Pgo+PiBJIGFtIG5vdCBlbnRpcmVseSBzdXJlIHdo ZXJlIHRvIGFzayBpdCwgc28gSSB3aWxsIGRvIGl0IGhlcmUuIEZyb20gbXkgCj4+IHVuZGVyc3Rh bmRpbmcgb2YgdGhlIFBTQ0kgc3BlYywgYWxsIHRoZSBpbnRlcnJ1cHRzIHNob3VsZCBoYXZlIGJl ZW4gbWlncmF0ZWQgCj4+IGF3YXkgZnJvbSB0dXJuZWQgb2ZmIENQVS4gV2hlcmUgZG8geW91IGVu c3VyZSB0aGF0IGluIHRoZSBzdXNwZW5kIHBhdGg/Cj4+Cj4gCj4gZGlzYWJsZV9ub25ib290X2Nw dXMgd2lsbCBsZWFkIHRvIENQVV9PRkYgUFNDSSB0byBiZSBjYWxsZWQuIFRoYXQgaXMgb3J0aG9n b25hbCAKPiB0byBzdXNwZW5kIHN1cHBvcnQgaW4gdGhpcyBzZXJpZXMKCkFGQUlDVCwgbm9uZSBv ZiB0aGUgUFNDSSBDUFVfT0ZGIGNvZGUgd2lsbCBtaWdyYXRlIHRoZSBpbnRlcnJ1cHQuIEkgYWxy ZWFkeSAKcG9pbnRlZCB0aGF0IHdoZW4geW91IHNlbmQgeW91ciBzZXJpZXMgdG8gZml4IHRoZSBD UFVfT0ZGLiBCdXQgdGhpcyBzdGlsbCBkb2VzIApub3Qgc2VlbSB0byBiZSBhZGRyZXNzZWQuIFNv IG15IHF1ZXN0aW9uIGlzIHN0aWxsIG9wZW4uCgo+IAo+Pgo+PiBPbiAxMi8xMS8yMDE4IDExOjMw LCBNaXJlbGEgU2ltb25vdmljIHdyb3RlOgo+Pj4gU3lzdGVtIHN1c3BlbmQgbWF5IGxlYWQgdG8g YSBzdGF0ZSB3aGVyZSBHSUMgd291bGQgYmUgcG93ZXJlZCBkb3duLgo+Pj4gVGhlcmVmb3JlLCBY ZW4gc2hvdWxkIHNhdmUvcmVzdG9yZSB0aGUgY29udGV4dCBvZiBHSUMgb24gc3VzcGVuZC9yZXN1 bWUuCj4+PiBOb3RlIHRoYXQgdGhlIGNvbnRleHQgY29uc2lzdHMgb2Ygc3RhdGVzIG9mIHJlZ2lz dGVycyB3aGljaCBhcmUKPj4+IGNvbnRyb2xsZWQgYnkgdGhlIGh5cGVydmlzb3IuIE90aGVyIEdJ QyByZWdpc3RlcnMgd2hpY2ggYXJlIGFjY2Vzc2libGUKPj4+IGJ5IGd1ZXN0cyBhcmUgc2F2ZWQv cmVzdG9yZWQgb24gY29udGV4dCBzd2l0Y2guCj4+PiBUZXN0ZWQgb24gWGlsaW54IFVsdHJhc2Nh bGUrIE1QU29DIHdpdGggKGFuZCB3aXRob3V0KSBwb3dlcmluZyBkb3duCj4+PiB0aGUgR0lDLgo+ Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IE1pcmVsYSBTaW1vbm92aWMgPG1pcmVsYS5zaW1vbm92aWNA YWdnaW9zLmNvbT4KPj4+IFNpZ25lZC1vZmYtYnk6IFNhZWVkIE5vd3NoYWRpIDxzYWVlZC5ub3dz aGFkaUB4aWxpbnguY29tPgo+Pj4gLS0tCj4+PiDCoCB4ZW4vYXJjaC9hcm0vZ2ljLXYyLmPCoMKg wqDCoCB8IDE0NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4+PiDCoCB4ZW4vYXJjaC9hcm0vZ2ljLmPCoMKgwqDCoMKgwqDCoCB8wqAgMjcgKysrKysrKysr Cj4+PiDCoCB4ZW4vaW5jbHVkZS9hc20tYXJtL2dpYy5oIHzCoMKgIDggKysrCj4+PiDCoCAzIGZp bGVzIGNoYW5nZWQsIDE4MiBpbnNlcnRpb25zKCspCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL3hlbi9h cmNoL2FybS9naWMtdjIuYyBiL3hlbi9hcmNoL2FybS9naWMtdjIuYwo+Pj4gaW5kZXggZTdlYjAx ZjMwYS4uYmI1MmI2NGVjYiAxMDA2NDQKPj4+IC0tLSBhL3hlbi9hcmNoL2FybS9naWMtdjIuYwo+ Pj4gKysrIGIveGVuL2FyY2gvYXJtL2dpYy12Mi5jCj4+PiBAQCAtMTIzLDYgKzEyMywyNSBAQCBz dGF0aWMgREVGSU5FX1BFUl9DUFUodTgsIGdpY19jcHVfaWQpOwo+Pj4gwqAgLyogTWF4aW11bSBj cHUgaW50ZXJmYWNlIHBlciBHSUMgKi8KPj4+IMKgICNkZWZpbmUgTlJfR0lDX0NQVV9JRiA4Cj4+ PiDCoCArLyogR0lDdjIgcmVnaXN0ZXJzIHRvIGJlIHNhdmVkL3Jlc3RvcmVkIG9uIHN5c3RlbSBz dXNwZW5kL3Jlc3VtZSAqLwo+Pj4gK3N0cnVjdCBnaWN2Ml9jb250ZXh0IHsKPj4+ICvCoMKgwqAg LyogR0lDQyBjb250ZXh0ICovCj4+PiArwqDCoMKgIHVpbnQzMl90IGdpY2NfY3RscjsKPj4+ICvC oMKgwqAgdWludDMyX3QgZ2ljY19wbXI7Cj4+PiArwqDCoMKgIHVpbnQzMl90IGdpY2NfYnByOwo+ Pj4gK8KgwqDCoCAvKiBHSUNEIGNvbnRleHQgKi8KPj4+ICvCoMKgwqAgdWludDMyX3QgZ2ljZF9j dGxyOwo+Pj4gK8KgwqDCoCB1aW50MzJfdCAqZ2ljZF9pc2VuYWJsZXI7Cj4+PiArwqDCoMKgIHVp bnQzMl90ICpnaWNkX2lzYWN0aXZlcjsKPj4+ICvCoMKgwqAgdWludDMyX3QgKmdpY2RfaXByaW9y aXR5cjsKPj4+ICvCoMKgwqAgdWludDMyX3QgKmdpY2RfaXRhcmdldHNyOwo+Pj4gK8KgwqDCoCB1 aW50MzJfdCAqZ2ljZF9pY2ZncjsKPj4+ICt9Owo+Pgo+PiBJdCB0b29rIG1lIGEgbG9uZyB0aW1l IHRvIHVuZGVyc3RhbmQgdGhhdCB5b3Ugd2lsbCBvbmx5IHNhdmUgdGhlIGNvbnRleHQgZm9yIAo+ PiB0aGUgQ1BVMCBhbmQgRGlzdHJpYnV0b3IuCj4gCj4gWWVzLCBvdGhlciBwaHlzaWNhbCBDUFVz IGFyZSBob3QtdW5wbHVnZ2VkIGF0IHRoaXMgcG9pbnQuCj4gCj4+Cj4+IEkgd291bGQgcHJlZmVy IGlmIHdlIGtlZXAgc2VwYXJhdGUgcGVyLUNQVSBjb250ZXh0IGFuZCBjb21tb24gY29udGV4dC4g VGhpcyAKPj4gd291bGQga2VlcCB0aGUgbG9naWMgdmVyeSBzaW1pbGFyIHRvIHRoZSByZXN0IG9m IHRoZSBHSUMgZHJpdmVycy4KPj4KPj4+ICsKPj4+ICtzdGF0aWMgc3RydWN0IGdpY3YyX2NvbnRl eHQgZ2ljdjJfY29udGV4dDsKPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBnaWN2Ml9hbGxvY19jb250 ZXh0KHN0cnVjdCBnaWN2Ml9jb250ZXh0ICpnYyk7Cj4+Cj4+IFBsZWFzZSBkb24ndCBkbyBmb3J3 YXJkIGRlY2xhcmF0aW9uLiBUaGUgY29kZSBzaG91bGQgYmUgYWRkZWQgaW4gdGhlIGNvcnJlY3Qg Cj4+IHBsYWNlLgo+Pgo+IAo+IEFncmVlZAo+IAo+Pj4gKwo+Pj4gwqAgc3RhdGljIGlubGluZSB2 b2lkIHdyaXRlYl9naWNkKHVpbnQ4X3QgdmFsLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQo+Pj4gwqAg ewo+Pj4gwqDCoMKgwqDCoCB3cml0ZWJfcmVsYXhlZCh2YWwsIGdpY3YyLm1hcF9kYmFzZSArIG9m ZnNldCk7Cj4+PiBAQCAtMTMxMCw2ICsxMzI5LDkgQEAgc3RhdGljIGludCBfX2luaXQgZ2ljdjJf aW5pdCh2b2lkKQo+Pj4gwqDCoMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJmdpY3YyLmxvY2spOwo+ Pj4gwqAgK8KgwqDCoCAvKiBBbGxvY2F0ZSBtZW1vcnkgdG8gYmUgdXNlZCBmb3Igc2F2aW5nIEdJ QyBjb250ZXh0IGR1cmluZyB0aGUgCj4+PiBzdXNwZW5kICovCj4+PiArwqDCoMKgIGdpY3YyX2Fs bG9jX2NvbnRleHQoJmdpY3YyX2NvbnRleHQpOwo+Pj4gKwo+Pj4gwqDCoMKgwqDCoCByZXR1cm4g MDsKPj4+IMKgIH0KPj4+IMKgIEBAIC0xMzE5LDYgKzEzNDEsMTI5IEBAIHN0YXRpYyB2b2lkIGdp Y3YyX2RvX0xQSSh1bnNpZ25lZCBpbnQgbHBpKQo+Pj4gwqDCoMKgwqDCoCBCVUcoKTsKPj4+IMKg IH0KPj4+IMKgICtzdGF0aWMgdm9pZCBnaWN2Ml9hbGxvY19jb250ZXh0KHN0cnVjdCBnaWN2Ml9j b250ZXh0ICpnYykKPj4+ICt7Cj4+Cj4+IElzIGl0IG5lY2Vzc2FyeSB0byBhbGxvY2F0ZSB0aGVt IGF0IGJvb3Q/IENhbiB3ZSBtYWtlIHRoZW0gc3RhdGljIG9yIGFsbG9jYXRlIAo+PiB0aGVtIHdo ZW4gd2Ugc3VzcGVuZD8KPj4KPiAKPiBXZSBuZWVkIHRvIGFsbG9jYXRlIGR5bmFtaWNhbGx5IGJl Y2F1c2UgdGhlIHNpemUgb2YgYWxsb2NhdGVkIGRhdGEgZGVwZW5kcyBvbiAKPiB0aGUgbnVtYmVy IG9mIGlycSBsaW5lcywgd2hpY2ggaXMgbm90IGtub3duIGF0IHRoZSBjb21waWxlIHRpbWUuCgpX ZWxsIHlvdSBrbm93IHRoZSB1cHBlciBib3VuZC4gV2h5IGNhbid0IHlvdSB1c2UgdGhlIHVwcGVy IGJvdW5kPwoKPiBBbHRlcm5hdGl2ZSBpcyB0byBhbGxvY2F0ZSBvbiBzdXNwZW5kLCBidXQgSSBi ZWxpZXZlIGl0IGlzIGJldHRlciB0byBkbyB0aGlzIAo+IHdoZW4gdGhlIHN5c3RlbSBib290cy4K CldoeSBpcyBpdCBiZXR0ZXI/Cgo+IAo+Pj4gK8KgwqDCoCB1aW50MzJfdCBuID0gZ2ljdjJfaW5m by5ucl9saW5lczsKPj4+ICsKPj4+ICvCoMKgwqAgZ2MtPmdpY2RfaXNlbmFibGVyID0geHphbGxv Y19hcnJheSh1aW50MzJfdCwgRElWX1JPVU5EX1VQKG4sIDMyKSk7Cj4+PiArwqDCoMKgIGlmICgg IWdjLT5naWNkX2lzZW5hYmxlciApCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4gKwo+ Pj4gK8KgwqDCoCBnYy0+Z2ljZF9pc2FjdGl2ZXIgPSB4emFsbG9jX2FycmF5KHVpbnQzMl90LCBE SVZfUk9VTkRfVVAobiwgMzIpKTsKPj4+ICvCoMKgwqAgaWYgKCAhZ2MtPmdpY2RfaXNhY3RpdmVy ICkKPj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZyZWVfZ2ljZF9pc2VuYWJsZXI7Cj4+PiArCj4+ PiArwqDCoMKgIGdjLT5naWNkX2l0YXJnZXRzciA9IHh6YWxsb2NfYXJyYXkodWludDMyX3QsIERJ Vl9ST1VORF9VUChuLCA0KSk7Cj4+PiArwqDCoMKgIGlmICggIWdjLT5naWNkX2l0YXJnZXRzciAp Cj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmcmVlX2dpY2RfaXNhY3RpdmVyOwo+Pj4gKwo+Pj4g K8KgwqDCoCBnYy0+Z2ljZF9pcHJpb3JpdHlyID0geHphbGxvY19hcnJheSh1aW50MzJfdCwgRElW X1JPVU5EX1VQKG4sIDQpKTsKPj4+ICvCoMKgwqAgaWYgKCAhZ2MtPmdpY2RfaXByaW9yaXR5ciAp Cj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmcmVlX2dpY2RfaXRhcmdldHNyOwo+Pj4gKwo+Pj4g K8KgwqDCoCBnYy0+Z2ljZF9pY2ZnciA9IHh6YWxsb2NfYXJyYXkodWludDMyX3QsIERJVl9ST1VO RF9VUChuLCAxNikpOwo+Pj4gK8KgwqDCoCBpZiAoIGdjLT5naWNkX2ljZmdyICkKPj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm47Cj4+PiArCj4+PiArwqDCoMKgIHhmcmVlKGdjLT5naWNkX2lwcmlv cml0eXIpOwo+Pj4gKwo+Pj4gK2ZyZWVfZ2ljZF9pdGFyZ2V0c3I6Cj4+PiArwqDCoMKgIHhmcmVl KGdjLT5naWNkX2l0YXJnZXRzcik7Cj4+PiArCj4+PiArZnJlZV9naWNkX2lzYWN0aXZlcjoKPj4+ ICvCoMKgwqAgeGZyZWUoZ2MtPmdpY2RfaXNhY3RpdmVyKTsKPj4+ICsKPj4+ICtmcmVlX2dpY2Rf aXNlbmFibGVyOgo+Pj4gK8KgwqDCoCB4ZnJlZShnYy0+Z2ljZF9pc2VuYWJsZXIpOwo+Pj4gK8Kg wqDCoCBnYy0+Z2ljZF9pc2VuYWJsZXIgPSBOVUxMOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg aW50IGdpY3YyX3N1c3BlbmQodm9pZCkKPj4+ICt7Cj4+PiArwqDCoMKgIGludCBpOwo+Pj4gKwo+ Pj4gK8KgwqDCoCAvKiBTYXZlIEdJQ0MgY29uZmlndXJhdGlvbiAqLwo+Pj4gK8KgwqDCoCBnaWN2 Ml9jb250ZXh0LmdpY2NfY3RsciA9IHJlYWRsX2dpY2MoR0lDQ19DVExSKTsKPj4+ICvCoMKgwqAg Z2ljdjJfY29udGV4dC5naWNjX3BtciA9IHJlYWRsX2dpY2MoR0lDQ19QTVIpOwo+Pj4gK8KgwqDC oCBnaWN2Ml9jb250ZXh0LmdpY2NfYnByID0gcmVhZGxfZ2ljYyhHSUNDX0JQUik7Cj4+Cj4+IEFG QUlDVCwgdGhvc2UgdmFsdWVzIHNob3VsZCBhbHdheXMgYmUgdGhlIHNhbWUuIFNvIEkgd291bGQg anVzdCByZXN0b3JlIHRoZW0gCj4+IHdpdGggdGhlIGhhcmRjb2RlZCB2YWx1ZS4KPj4KPj4gVGhp cyBjb3VsZCBsaWtlbHkgYmUgZmFjdG9yZWQgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0aGF0IGNv dWxkIGJlIHVzZWQgaW4gCj4+IGdpY3YyX2NwdV9pbml0IGFzIHdlbGwuCj4+Cj4+PiArCj4+PiAr wqDCoMKgIC8qIElmIGdpY3YyX2FsbG9jX2NvbnRleHQoKSBoYXNuJ3QgYWxsb2NhdGVkIG1lbW9y eSwgcmV0dXJuICovCj4+PiArwqDCoMKgIGlmICggIWdpY3YyX2NvbnRleHQuZ2ljZF9pc2VuYWJs ZXIgKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4gKwo+Pj4gK8KgwqDC oCAvKiBTYXZlIEdJQ0QgY29uZmlndXJhdGlvbiAqLwo+Pj4gK8KgwqDCoCBnaWN2Ml9jb250ZXh0 LmdpY2RfY3RsciA9IHJlYWRsX2dpY2QoR0lDRF9DVExSKTsKPj4KPj4gU2FtZSBoZXJlLgo+Pgo+ Pj4gKwo+Pj4gK8KgwqDCoCBmb3IgKCBpID0gMDsgaSA8IERJVl9ST1VORF9VUChnaWN2Ml9pbmZv Lm5yX2xpbmVzLCAzMik7IGkrKyApCj4+PiArwqDCoMKgwqDCoMKgwqAgZ2ljdjJfY29udGV4dC5n aWNkX2lzZW5hYmxlcltpXSA9IHJlYWRsX2dpY2QoR0lDRF9JU0VOQUJMRVIgKyBpICogNCk7Cj4+ PiArCj4+PiArwqDCoMKgIGZvciAoIGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKGdpY3YyX2luZm8u bnJfbGluZXMsIDMyKTsgaSsrICkKPj4+ICvCoMKgwqDCoMKgwqDCoCBnaWN2Ml9jb250ZXh0Lmdp Y2RfaXNhY3RpdmVyW2ldID0gcmVhZGxfZ2ljZChHSUNEX0lTQUNUSVZFUiArIGkgKiA0KTsKPj4+ ICsKPj4+ICvCoMKgwqAgZm9yICggaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAoZ2ljdjJfaW5mby5u cl9saW5lcywgNCk7IGkrKyApCj4+PiArwqDCoMKgwqDCoMKgwqAgZ2ljdjJfY29udGV4dC5naWNk X2lwcmlvcml0eXJbaV0gPSByZWFkbF9naWNkKEdJQ0RfSVBSSU9SSVRZUiArIGkgKiA0KTsKPj4+ ICsKPj4+ICvCoMKgwqAgZm9yICggaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAoZ2ljdjJfaW5mby5u cl9saW5lcywgNCk7IGkrKyApCj4+PiArwqDCoMKgwqDCoMKgwqAgZ2ljdjJfY29udGV4dC5naWNk X2l0YXJnZXRzcltpXSA9IHJlYWRsX2dpY2QoR0lDRF9JVEFSR0VUU1IgKyBpICogNCk7Cj4+PiAr Cj4+PiArwqDCoMKgIGZvciAoIGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKGdpY3YyX2luZm8ubnJf bGluZXMsIDE2KTsgaSsrICkKPj4+ICvCoMKgwqDCoMKgwqDCoCBnaWN2Ml9jb250ZXh0LmdpY2Rf aWNmZ3JbaV0gPSByZWFkbF9naWNkKEdJQ0RfSUNGR1IgKyBpICogNCk7Cj4+PiArCj4+PiArwqDC oMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBnaWN2Ml9yZXN1bWUo dm9pZCkKPj4+ICt7Cj4+PiArwqDCoMKgIGludCBpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBBU1NFUlQo Z2ljdjJfY29udGV4dC5naWNkX2lzZW5hYmxlcik7Cj4+PiArwqDCoMKgIEFTU0VSVChnaWN2Ml9j b250ZXh0LmdpY2RfaXNhY3RpdmVyKTsKPj4+ICvCoMKgwqAgQVNTRVJUKGdpY3YyX2NvbnRleHQu Z2ljZF9pcHJpb3JpdHlyKTsKPj4+ICvCoMKgwqAgQVNTRVJUKGdpY3YyX2NvbnRleHQuZ2ljZF9p dGFyZ2V0c3IpOwo+Pj4gK8KgwqDCoCBBU1NFUlQoZ2ljdjJfY29udGV4dC5naWNkX2ljZmdyKTsK Pj4+ICsKPj4+ICvCoMKgwqAgLyogRGlzYWJsZSBDUFUgaW50ZXJmYWNlIGFuZCBkaXN0cmlidXRv ciAqLwo+Pj4gK8KgwqDCoCB3cml0ZWxfZ2ljYygwLCBHSUNDX0NUTFIpOwo+Pj4gK8KgwqDCoCB3 cml0ZWxfZ2ljZCgwLCBHSUNEX0NUTFIpOwo+Pj4gK8KgwqDCoCBpc2IoKTsKPj4+ICsKPj4+ICvC oMKgwqAgLyogUmVzdG9yZSBHSUNEIGNvbmZpZ3VyYXRpb24gKi8KPj4+ICvCoMKgwqAgZm9yICgg aSA9IDA7IGkgPCBESVZfUk9VTkRfVVAoZ2ljdjJfaW5mby5ucl9saW5lcywgMzIpOyBpKysgKQo+ Pj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbF9naWNkKDB4ZmZmZmZmZmYsIEdJQ0RfSUNFTkFCTEVS ICsgaSAqIDQpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBmb3IgKCBpID0gMDsgaSA8IERJVl9ST1VORF9V UChnaWN2Ml9pbmZvLm5yX2xpbmVzLCAzMik7IGkrKyApCj4+PiArwqDCoMKgwqDCoMKgwqAgd3Jp dGVsX2dpY2QoZ2ljdjJfY29udGV4dC5naWNkX2lzZW5hYmxlcltpXSwgR0lDRF9JU0VOQUJMRVIg KyBpICogNCk7Cj4+Cj4+IEkgd291bGQgcHJlZmVyIGlmIHRoZXJlIGlzIG9ubHkgb25lIGZvciB3 aXRoIDIgd3JpdGUuIFRoaXMgd291bGQgbWFrZSBtb3JlIAo+PiBvYnZpb3VzIHdoeSB5b3UgbmVl ZCB0byBjbGVhciBhbGwgZW5hYmxlZCBiaXQgZmlyc3QuCj4+Cj4+PiArCj4+PiArwqDCoMKgIGZv ciAoIGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKGdpY3YyX2luZm8ubnJfbGluZXMsIDMyKTsgaSsr ICkKPj4+ICvCoMKgwqDCoMKgwqDCoCB3cml0ZWxfZ2ljZCgweGZmZmZmZmZmLCBHSUNEX0lDQUNU SVZFUiArIGkgKiA0KTsKPj4+ICsKPj4+ICvCoMKgwqAgZm9yICggaSA9IDA7IGkgPCBESVZfUk9V TkRfVVAoZ2ljdjJfaW5mby5ucl9saW5lcywgMzIpOyBpKysgKQo+Pj4gK8KgwqDCoMKgwqDCoMKg IHdyaXRlbF9naWNkKGdpY3YyX2NvbnRleHQuZ2ljZF9pc2FjdGl2ZXJbaV0sIEdJQ0RfSVNBQ1RJ VkVSICsgaSAqIDQpOwo+Pgo+PiBTYW1lIGhlcmUuCj4+Cj4+PiArCj4+PiArwqDCoMKgIGZvciAo IGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKGdpY3YyX2luZm8ubnJfbGluZXMsIDQpOyBpKysgKQo+ Pj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbF9naWNkKGdpY3YyX2NvbnRleHQuZ2ljZF9pcHJpb3Jp dHlyW2ldLCBHSUNEX0lQUklPUklUWVIgKyBpICogNCk7Cj4+PiArCj4+PiArwqDCoMKgIGZvciAo IGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKGdpY3YyX2luZm8ubnJfbGluZXMsIDQpOyBpKysgKQo+ Pj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbF9naWNkKGdpY3YyX2NvbnRleHQuZ2ljZF9pdGFyZ2V0 c3JbaV0sIEdJQ0RfSVRBUkdFVFNSICsgaSAqIDQpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBmb3IgKCBp ID0gMDsgaSA8IERJVl9ST1VORF9VUChnaWN2Ml9pbmZvLm5yX2xpbmVzLCAxNik7IGkrKyApCj4+ PiArwqDCoMKgwqDCoMKgwqAgd3JpdGVsX2dpY2QoZ2ljdjJfY29udGV4dC5naWNkX2ljZmdyW2ld LCBHSUNEX0lDRkdSICsgaSAqIDQpOwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBNYWtlIHN1cmUgYWxs IHJlZ2lzdGVycyBhcmUgcmVzdG9yZWQgYW5kIGVuYWJsZSBkaXN0cmlidXRvciAqLwo+Pj4gK8Kg wqDCoCBpc2IoKTsKPj4+ICvCoMKgwqAgd3JpdGVsX2dpY2QoZ2ljdjJfY29udGV4dC5naWNkX2N0 bHIgfCBHSUNEX0NUTF9FTkFCTEUsIEdJQ0RfQ1RMUik7Cj4+PiArCj4+PiArwqDCoMKgIC8qIFJl c3RvcmUgR0lDIENQVSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiAqLwo+Pj4gK8KgwqDCoCB3cml0 ZWxfZ2ljYyhnaWN2Ml9jb250ZXh0LmdpY2NfcG1yLCBHSUNDX1BNUik7Cj4+PiArwqDCoMKgIHdy aXRlbF9naWNjKGdpY3YyX2NvbnRleHQuZ2ljY19icHIsIEdJQ0NfQlBSKTsKPj4+ICvCoMKgwqAg aXNiKCk7Cj4+PiArCj4+PiArwqDCoMKgIC8qIEVuYWJsZSBHSUMgQ1BVIGludGVyZmFjZSAqLwo+ Pj4gK8KgwqDCoCB3cml0ZWxfZ2ljYyhnaWN2Ml9jb250ZXh0LmdpY2NfY3RsciB8IEdJQ0NfQ1RM X0VOQUJMRSB8IEdJQ0NfQ1RMX0VPSSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgR0lDQ19DVExSKTsKPj4+ICvCoMKgwqAgaXNiKCk7Cj4+PiArfQo+Pj4gKwo+Pj4gwqAgY29u c3Qgc3RhdGljIHN0cnVjdCBnaWNfaHdfb3BlcmF0aW9ucyBnaWN2Ml9vcHMgPSB7Cj4+PiDCoMKg wqDCoMKgIC5pbmZvwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gJmdpY3YyX2luZm8s Cj4+PiDCoMKgwqDCoMKgIC5pbml0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gZ2lj djJfaW5pdCwKPj4+IEBAIC0xMzUxLDYgKzE0OTYsOCBAQCBjb25zdCBzdGF0aWMgc3RydWN0IGdp Y19od19vcGVyYXRpb25zIGdpY3YyX29wcyA9IHsKPj4+IMKgwqDCoMKgwqAgLm1hcF9od2RvbV9l eHRyYV9tYXBwaW5ncyA9IGdpY3YyX21hcF9od2Rvd25fZXh0cmFfbWFwcGluZ3MsCj4+PiDCoMKg wqDCoMKgIC5pb21lbV9kZW55X2FjY2Vzc8KgwqAgPSBnaWN2Ml9pb21lbV9kZW55X2FjY2VzcywK Pj4+IMKgwqDCoMKgwqAgLmRvX0xQScKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gZ2ljdjJf ZG9fTFBJLAo+Pj4gK8KgwqDCoCAuc3VzcGVuZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGdp Y3YyX3N1c3BlbmQsCj4+PiArwqDCoMKgIC5yZXN1bWXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCA9IGdpY3YyX3Jlc3VtZSwKPj4+IMKgIH07Cj4+PiDCoMKgwqAgLyogU2V0IHVwIHRoZSBHSUMg Ki8KPj4+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vZ2ljLmMgYi94ZW4vYXJjaC9hcm0vZ2lj LmMKPj4+IGluZGV4IGU1MjRhZDU4M2QuLjZlOThmNDM2OTEgMTAwNjQ0Cj4+PiAtLS0gYS94ZW4v YXJjaC9hcm0vZ2ljLmMKPj4+ICsrKyBiL3hlbi9hcmNoL2FybS9naWMuYwo+Pj4gQEAgLTQ2NCw2 ICs0NjQsMzMgQEAgaW50IGdpY19pb21lbV9kZW55X2FjY2Vzcyhjb25zdCBzdHJ1Y3QgZG9tYWlu ICpkKQo+Pj4gwqDCoMKgwqDCoCByZXR1cm4gZ2ljX2h3X29wcy0+aW9tZW1fZGVueV9hY2Nlc3Mo ZCk7Cj4+PiDCoCB9Cj4+PiDCoCAraW50IGdpY19zdXNwZW5kKHZvaWQpCj4+PiArewo+Pj4gK8Kg wqDCoCAvKiBNdXN0IGJlIGNhbGxlZCBieSBib290IENQVSMwIHdpdGggaW50ZXJydXB0cyBkaXNh YmxlZCAqLwo+Pj4gK8KgwqDCoCBBU1NFUlQoIWxvY2FsX2lycV9pc19lbmFibGVkKCkpOwo+Pj4g K8KgwqDCoCBBU1NFUlQoIXNtcF9wcm9jZXNzb3JfaWQoKSk7Cj4+PiArCj4+PiArwqDCoMKgIGlm ICggIWdpY19od19vcHMtPnN1c3BlbmQgfHwgIWdpY19od19vcHMtPnJlc3VtZSApCj4+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9TWVM7Cj4+PiArCj4+PiArwqDCoMKgIGdpY19od19vcHMt PnN1c3BlbmQoKTsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4g K3ZvaWQgZ2ljX3Jlc3VtZSh2b2lkKQo+Pj4gK3sKPj4+ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDC oCAqIE11c3QgYmUgY2FsbGVkIGJ5IGJvb3QgQ1BVIzAgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVk IGFmdGVyIGdpY19zdXNwZW5kCj4+PiArwqDCoMKgwqAgKiBoYXMgcmV0dXJuZWQgc3VjY2Vzc2Z1 bGx5Lgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIEFTU0VSVCghbG9jYWxfaXJxX2lzX2Vu YWJsZWQoKSk7Cj4+PiArwqDCoMKgIEFTU0VSVCghc21wX3Byb2Nlc3Nvcl9pZCgpKTsKPj4+ICvC oMKgwqAgQVNTRVJUKGdpY19od19vcHMtPnJlc3VtZSk7Cj4+PiArCj4+PiArwqDCoMKgIGdpY19o d19vcHMtPnJlc3VtZSgpOwo+Pj4gK30KPj4+ICsKPj4+IMKgIHN0YXRpYyBpbnQgY3B1X2dpY19j YWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBh Y3Rpb24sCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHZvaWQgKmhjcHUpCj4+PiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNt LWFybS9naWMuaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljLmgKPj4+IGluZGV4IDIyZmExMjJl NTIuLjQ2MDY2Y2FhYzggMTAwNjQ0Cj4+PiAtLS0gYS94ZW4vaW5jbHVkZS9hc20tYXJtL2dpYy5o Cj4+PiArKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2dpYy5oCj4+PiBAQCAtMjc3LDYgKzI3Nywx MCBAQCBleHRlcm4gaW50IGdpY3Zfc2V0dXAoc3RydWN0IGRvbWFpbiAqZCk7Cj4+PiDCoCBleHRl cm4gdm9pZCBnaWNfc2F2ZV9zdGF0ZShzdHJ1Y3QgdmNwdSAqdik7Cj4+PiDCoCBleHRlcm4gdm9p ZCBnaWNfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgdmNwdSAqdik7Cj4+PiDCoCArLyogU3VzcGVuZC9y ZXN1bWUgKi8KPj4+ICtleHRlcm4gaW50IGdpY19zdXNwZW5kKHZvaWQpOwo+Pj4gK2V4dGVybiB2 b2lkIGdpY19yZXN1bWUodm9pZCk7Cj4+PiArCj4+PiDCoCAvKiBTR0kgKEFLQSBJUElzKSAqLwo+ Pj4gwqAgZW51bSBnaWNfc2dpIHsKPj4+IMKgwqDCoMKgwqAgR0lDX1NHSV9FVkVOVF9DSEVDSyA9 IDAsCj4+PiBAQCAtMzkwLDYgKzM5NCwxMCBAQCBzdHJ1Y3QgZ2ljX2h3X29wZXJhdGlvbnMgewo+ Pj4gwqDCoMKgwqDCoCBpbnQgKCppb21lbV9kZW55X2FjY2VzcykoY29uc3Qgc3RydWN0IGRvbWFp biAqZCk7Cj4+PiDCoMKgwqDCoMKgIC8qIEhhbmRsZSBMUElzLCB3aGljaCByZXF1aXJlIHNwZWNp YWwgaGFuZGxpbmcgKi8KPj4+IMKgwqDCoMKgwqAgdm9pZCAoKmRvX0xQSSkodW5zaWduZWQgaW50 IGxwaSk7Cj4+PiArwqDCoMKgIC8qIFNhdmUgR0lDIGNvbmZpZ3VyYXRpb24gZHVlIHRvIHRoZSBz eXN0ZW0gc3VzcGVuZCAqLwo+Pj4gK8KgwqDCoCBpbnQgKCpzdXNwZW5kKSh2b2lkKTsKPj4+ICvC oMKgwqAgLyogUmVzdG9yZSBHSUMgY29uZmlndXJhdGlvbiBkdWUgdG8gdGhlIHN5c3RlbSByZXN1 bWUgKi8KPj4+ICvCoMKgwqAgdm9pZCAoKnJlc3VtZSkodm9pZCk7Cj4+Cj4+IFRoZSBjb21tZW50 cyBvbiB0b3BzIG9mIHN1c3BlbmQvcmVzdW1lIHN1Z2dlc3QgdGhhdCB0aGlzIHNob3VsZCBiZSBj YWxsZWQgCj4+IHNhdmUvcmVzdG9yZS4KPiAKPiBJIHRob3VnaHQgdGhhdCB0b28sIGJ1dCBzYXZl L3Jlc3RvcmUgYWxyZWFkeSBleGlzdCBhbmQgYXJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgoK SG93IGFib3V0IHJlbmFtaW5nIHRoZSBvdGhlciBmdW5jdGlvbnMgdG8gc2F2ZV92Y3B1X3N0YXRl L3Jlc3RvcmVfdmNwdV9zdGF0ZT8KCkNoZWVycywKCkNoZWVycywKCi0tIApKdWxpZW4gR3JhbGwK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=