From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v5 6/7] xen/arm: zynqmp: implement zynqmp_eemi Date: Wed, 12 Dec 2018 10:48:30 +0000 Message-ID: References: <1543871021-315-6-git-send-email-sstabellini@kernel.org> <5d6b9c12-fff1-cf9f-8fb8-e3237c98b47f@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: Stefano Stabellini Cc: edgar.iglesias@xilinx.com, Stefano Stabellini , saeed.nowshadi@xilinx.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org CgpPbiAxMS8xMi8yMDE4IDIyOjIzLCBTdGVmYW5vIFN0YWJlbGxpbmkgd3JvdGU6Cj4gT24gVHVl LCAxMSBEZWMgMjAxOCwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+PiBIaSBTdGVmYW5vLAo+Pgo+PiBP biAwMy8xMi8yMDE4IDIxOjAzLCBTdGVmYW5vIFN0YWJlbGxpbmkgd3JvdGU6Cj4+PiBGcm9tOiAi RWRnYXIgRS4gSWdsZXNpYXMiIDxlZGdhci5pZ2xlc2lhc0B4aWxpbnguY29tPgo+Pj4KPj4+IEZy b206IEVkZ2FyIEUuIElnbGVzaWFzIDxlZGdhci5pZ2xlc2lhc0B4aWxpbnguY29tPgo+Pj4KPj4+ IHp5bnFtcF9lZW1pIHVzZXMgdGhlIGRlZmluZWQgZnVuY3Rpb25zIGFuZCBzdHJ1Y3RzIHRvIGRl Y2lkZSB3aGV0aGVyIHRvCj4+PiBtYWtlIGEgY2FsbCB0byB0aGUgZmlybXdhcmUsIG9yIHRvIHNp bXBseSByZXR1cm4gYSBwcmVkZWZpbmVkIHZhbHVlLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IEVk Z2FyIEUuIElnbGVzaWFzIDxlZGdhci5pZ2xlc2lhc0B4aWxpbnguY29tPgo+Pj4gU2lnbmVkLW9m Zi1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5vc0B4aWxpbnguY29tPgo+Pj4gLS0tCj4+ PiBDaGFuZ2VzIGluIHY1Ogo+Pj4gLSByZW1vdmUgbW1pb19hY2Nlc3MgaGFuZGxpbmcKPj4+Cj4+ PiBDaGFuZ2VzIGluIHY0Ogo+Pj4gLSBhZGQgI2luY2x1ZGUgYXMgbmVlZGVkCj4+PiAtIGltcHJv dmUgY29tbWVudAo+Pj4gLSBjb2RlIHN0eWxlCj4+PiAtLS0KPj4+ICAgIHhlbi9hcmNoL2FybS9w bGF0Zm9ybXMveGlsaW54LXp5bnFtcC1lZW1pLmMgfCAxODEKPj4+ICsrKysrKysrKysrKysrKysr KystLS0tLS0tLS0KPj4+ICAgIDEgZmlsZSBjaGFuZ2VkLCAxMjUgaW5zZXJ0aW9ucygrKSwgNTYg ZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9wbGF0Zm9ybXMv eGlsaW54LXp5bnFtcC1lZW1pLmMKPj4+IGIveGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy94aWxpbngt enlucW1wLWVlbWkuYwo+Pj4gaW5kZXggOTJhMDJkZi4uOWVjZjI4NiAxMDA2NDQKPj4+IC0tLSBh L3hlbi9hcmNoL2FybS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1lZW1pLmMKPj4+ICsrKyBiL3hl bi9hcmNoL2FybS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1lZW1pLmMKPj4+IEBAIC03NiwxMCAr NzYsMTAgQEAKPj4+ICAgICAgI2luY2x1ZGUgPHhlbi9pb2NhcC5oPgo+Pj4gICAgI2luY2x1ZGUg PHhlbi9zY2hlZC5oPgo+Pj4gKyNpbmNsdWRlIDxhc20vc21jY2MuaD4KPj4+ICAgICNpbmNsdWRl IDxhc20vcmVncy5oPgo+Pj4gICAgI2luY2x1ZGUgPGFzbS9wbGF0Zm9ybXMveGlsaW54LXp5bnFt cC1lZW1pLmg+Cj4+PiAgICAtI2lmIDAKPj4+ICAgIHN0cnVjdCBwbV9hY2Nlc3MKPj4+ICAgIHsK Pj4+ICAgICAgICBtZm5fdCBtZm47Cj4+PiBAQCAtMzA5LDY3ICszMDksMTM2IEBAIHN0YXRpYyBi b29sIGRvbWFpbl9oYXNfcmVzZXRfYWNjZXNzKHN0cnVjdCBkb21haW4gKmQsCj4+PiB1aW50MzJf dCByc3QpCj4+PiAgICAgICAgcmV0dXJuIHBtX2NoZWNrX2FjY2VzcyhwbV9yZXNldF9hY2Nlc3Ms IGQsIHJzdCk7Cj4+PiAgICB9Cj4+PiAgICAtLyoKPj4+IC0gKiBDaGVjayBpZiBhIGdpdmVuIGRv bWFpbiBoYXMgYWNjZXNzIHRvIHBlcmZvcm0gYW4gaW5kaXJlY3QKPj4+IC0gKiBNTUlPIGFjY2Vz cy4KPj4+IC0gKgo+Pj4gLSAqIElmIHRoZSBwcm92aWRlZCBtYXNrIGlzIGludmFsaWQsIGl0IHdp bGwgYmUgZml4ZWQgdXAuCj4+PiAtICovCj4+PiAtc3RhdGljIGJvb2wgZG9tYWluX2hhc19tbWlv X2FjY2VzcyhzdHJ1Y3QgZG9tYWluICpkLAo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9vbCB3cml0ZSwgcGFkZHJfdCBhZGRyLAo+Pj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QgKm1hc2spCj4+Cj4+IFdoeSBkbyB5b3UgcmVtb3Zl IGNvZGUgdGhhdCB5b3UganVzdCBpbnRyb2R1Y2VkPwo+IAo+IEkgYW0gcmVhbGx5IHNvcnJ5IGFi b3V0IHRoaXMsIGl0IHdhcyBlcnJvciBhcHBseWluZyBhIHBhdGNoLiBUaGlzIGNvZGUKPiBzaG91 bGQgbmV2ZXIgaGF2ZSBiZWVuIGludHJvZHVjZWQ6IHRoZSBjb2RlIHNob3VsZCBiZSByZW1vdmVk IGZyb20gdGhlCj4gcHJldmlvdXMgcGF0Y2guIEknbGwgZml4IGl0Lgo+IAo+IAo+Pj4gK2Jvb2wg enlucW1wX2VlbWkoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4+PiAgICB7Cj4+PiAtICAg IHVuc2lnbmVkIGludCBpOwo+Pj4gLSAgICBib29sIHJldCA9IGZhbHNlOwo+Pj4gLSAgICB1aW50 MzJfdCBwcm90X21hc2sgPSAwOwo+Pj4gLQo+Pj4gLSAgICAvKgo+Pj4gLSAgICAgKiBUaGUgaGFy ZHdhcmUgZG9tYWluIGdldHMgcmVhZCBhY2Nlc3MgdG8gZXZlcnl0aGluZy4KPj4+IC0gICAgICog TG93ZXIgbGF5ZXJzIHdpbGwgZG8gZnVydGhlciBmaWx0ZXJpbmcuCj4+PiAtICAgICAqLwo+Pj4g LSAgICBpZiAoICF3cml0ZSAmJiBpc19oYXJkd2FyZV9kb21haW4oZCkgKQo+Pj4gLSAgICAgICAg cmV0dXJuIHRydWU7Cj4+PiArICAgIHN0cnVjdCBhcm1fc21jY2NfcmVzIHJlczsKPj4+ICsgICAg dWludDMyX3QgZmlkID0gZ2V0X3VzZXJfcmVnKHJlZ3MsIDApOwo+Pj4gKyAgICB1aW50MzJfdCBu b2RlaWQgPSBnZXRfdXNlcl9yZWcocmVncywgMSk7Cj4+Cj4+IFlvdSBkaWRuJ3QgYWRkcmVzcyBt eSBjb25jZXJuIHJlZ2FyZGluZyBTTUMzMiB2cyBTTUM2NCBjb252ZW50aW9uLiBBcyBJIHNhaWQK Pj4gZWFybGllciBvbiwgYXQgbGVhc3QgQ0FMTF9DT1VOVCwgVUlEIGFuZCBWRVJTSU9OIGFyZSBv bmx5IGFjY2Vzc2libGUgdXNpbmcgdGhlCj4+IFNNQzMyIGNvbnZlbnRpb24uCj4+Cj4+IEkgY2Fu J3QgdGVsbCBmb3IgdGhlIG90aGVyIGFzIHRoZSBFRU1JIHNwZWMgZG9lcyBub3Qgc2VlbSB0byBz cGVjaWZ5IGl0LiBJCj4+IHdvdWxkIGJlIHN1cnByaXNlZCB0aGF0IEVFTUkgd291bGQgIGlnbm9y ZSB0b3BzIGJpdHMgb2YgdGhlIElEIGdpdmVuIHRoZXkKPj4gY29udmV5IGRpZmZlcmVudCBpbmZv cm1hdGlvbiAoZS5nICBmYXN0L3lpZWxkaW5nIGNhbGwsIDMyLzY0LWJpdCBjb252ZW50aW9uKS4K Pj4KPj4gTG9va2luZyBhdCB0aGUgYnJhbmNoIHlvdSBtZW50aW9uZWQgZWFybGllciBvbiwgenlu cW1wX3BtX2ludm9rZV9mbgo+PiAoZHJpdmVycy9maXJtd2FyZS94aWxpbngvenlucW1wLmMpIGlz IGRlZmluaXRlbHkgdXNpbmcgdGhlIFNNQzY0IGNhbGxpbmcKPj4gY29udmVudGlvbiBhcyBkZXNj cmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYWJvdmUgdGhlIGZ1bmN0aW9uLgo+Pgo+PiBTbyB0 aGlzIG5lZWRzIHRvIGJlIGZpeGVkIHByb3Blcmx5Lgo+IAo+IE9LLCBJJ2xsIGFkZCBhIGNoZWNr IGZvciB0aGUgbWFuZGF0b3J5IHNtYzMyIGNhbGxzIGFuZCBmb3J3YXJkIHRoZW0gdG8KPiBmaXJt d2FyZSBwcm9wZXJseS4KCnNtYzMyIGlzIG9ubHkgcGFydCBvZiB0aGUgcHJvYmxlbSBJIG1lbnRp b25lZC4gVGhlIG1haW4gcHJvYmxlbSBpcyB5b3Ugb25seSBsb29rIAphdCB0aGUgZnVuY3Rpb24g bnVtYmVyIChiaXRzIDAtMTUpLiBUaGlzIGlzIG5vdCBlbm91Z2ggdG8ga25vdyB3aGljaCBmdW5j dGlvbiBpcyAKZ29pbmcgdG8gYmUgY2FsbGVkLiBZb3Ugd2FudCB0byB0YWtlIGludG8gYWNjb3Vu dCB0aGUgZnVsbCBmdW5jdGlvbiBpZGVudGlmaWVyLiAKV2UgcHJvdmlkZSBoZWxwZXJzIHRvIGNy ZWF0ZSB0aGVtIChzZWUgQVJNX1NNQ0NDX0NBTExfVkFMKS4KCj4gCj4gICAKPj4+ICsgICAgdW5z aWduZWQgaW50IHBtX2ZuID0gZmlkICYgMHhGRkZGOwo+Pj4gKyAgICBlbnVtIHBtX3JldF9zdGF0 dXMgcmV0Owo+Pj4gICAgLSAgICAvKiBTY2FuIHRoZSBBQ0wuICAqLwo+Pj4gLSAgICBmb3IgKCBp ID0gMDsgaSA8IEFSUkFZX1NJWkUocG1fbW1pb19hY2Nlc3MpOyBpKysgKQo+Pj4gKyAgICBzd2l0 Y2ggKCBwbV9mbiApCj4+PiAgICAgICAgewo+Pj4gLSAgICAgICAgQVNTRVJUKHBtX21taW9fYWNj ZXNzW2ldLnN0YXJ0ICsgcG1fbW1pb19hY2Nlc3NbaV0uc2l6ZSA+PQo+Pj4gLSAgICAgICAgICAg ICAgIHBtX21taW9fYWNjZXNzW2ldLnN0YXJ0KTsKPj4+IC0KPj4+IC0gICAgICAgIGlmICggYWRk ciA8IHBtX21taW9fYWNjZXNzW2ldLnN0YXJ0ICkKPj4+IC0gICAgICAgICAgICByZXR1cm4gZmFs c2U7Cj4+PiAtICAgICAgICBpZiAoIGFkZHIgPj0gcG1fbW1pb19hY2Nlc3NbaV0uc3RhcnQgKyBw bV9tbWlvX2FjY2Vzc1tpXS5zaXplICkKPj4+IC0gICAgICAgICAgICBjb250aW51ZTsKPj4+IC0K Pj4+IC0gICAgICAgIGlmICggd3JpdGUgJiYgcG1fbW1pb19hY2Nlc3NbaV0ucmVhZG9ubHkgKQo+ Pj4gLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4+IC0gICAgICAgIGlmICggcG1fbW1pb19h Y2Nlc3NbaV0uaHdkb21fYWNjZXNzICYmICFpc19oYXJkd2FyZV9kb21haW4oZCkgKQo+Pj4gLSAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4+IC0gICAgICAgIGlmICggIWRvbWFpbl9oYXNfbm9k ZV9hY2Nlc3MoZCwgcG1fbW1pb19hY2Nlc3NbaV0ubm9kZSkgKQo+Pj4gLSAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKPj4+IC0KPj4+IC0gICAgICAgIC8qIFdlJ3ZlIGdvdCBhY2Nlc3MgdG8gdGhp cyByZWcgKG9yIHBhcnRzIG9mIGl0KS4gICovCj4+PiAtICAgICAgICByZXQgPSB0cnVlOwo+Pj4g LQo+Pj4gLSAgICAgICAgLyogUGVybWl0IHdyaXRlIGFjY2VzcyB0byBzZWxlY3RlZCBiaXRzLiAg Ki8KPj4+IC0gICAgICAgIHByb3RfbWFzayB8PSBwbV9tbWlvX2FjY2Vzc1tpXS5tYXNrID86IEdF Tk1BU0soMzEsIDApOwo+Pj4gLSAgICAgICAgYnJlYWs7Cj4+PiAtICAgIH0KPj4+IC0KPj4+ICAg ICAgICAvKgo+Pj4gLSAgICAgKiBNYXNraW5nIG9ubHkgYXBwbGllcyB0byB3cml0ZXM6IHZhbHVl cyBhcmUgc2FmZSB0byByZWFkLCBidXQgbm90Cj4+PiAtICAgICAqIGFsbCBiaXRzIGFyZSB3cml0 ZWFibGUuCj4+PiArICAgICAqIFdlIGNhbid0IGFsbG93IENQVXMgdG8gc3VzcGVuZCB3aXRob3V0 IFhlbiBrbm93aW5nIGFib3V0IGl0Lgo+Pj4gKyAgICAgKiBXZSBhY2NlcHQgYnV0IGlnbm9yZSB0 aGUgcmVxdWVzdCBhbmQgd2FpdCBmb3IgdGhlIGd1ZXN0IHRvIGlzc3VlCj4+PiArICAgICAqIGEg V0ZJIG9yIFBTQ0kgY2FsbCB3aGljaCBYZW4gd2lsbCB0cmFwIGFuZCBhY3QgYWNjb3JkaW5nbHkg dXBvbi4KPj4+ICAgICAgICAgKi8KPj4+IC0gICAgaWYgKCB3cml0ZSApCj4+PiAtICAgICAgICAq bWFzayAmPSBwcm90X21hc2s7Cj4+PiAtCj4+PiAtICAgIHJldHVybiByZXQ7Cj4+PiAtfQo+Pj4g LSNlbmRpZgo+Pj4gKyAgICBjYXNlIFBNX1NFTEZfU1VTUEVORDoKPj4+ICsgICAgICAgIHJldCA9 IFhTVF9QTV9TVUNDRVNTOwo+Pj4gKyAgICAgICAgZ290byBkb25lOwo+Pj4gKwo+Pj4gKyAgICBj YXNlIFBNX0dFVF9OT0RFX1NUQVRVUzoKPj4+ICsgICAgLyogQVBJIGZvciBQVXMuICAqLwo+Pj4g KyAgICBjYXNlIFBNX1JFUV9TVVNQRU5EOgo+Pj4gKyAgICBjYXNlIFBNX0ZPUkNFX1BPV0VSRE9X TjoKPj4+ICsgICAgY2FzZSBQTV9BQk9SVF9TVVNQRU5EOgo+Pj4gKyAgICBjYXNlIFBNX1JFUV9X QUtFVVA6Cj4+PiArICAgIGNhc2UgUE1fU0VUX1dBS0VVUF9TT1VSQ0U6Cj4+PiArICAgIC8qIEFQ SSBmb3Igc2xhdmVzLiAgKi8KPj4+ICsgICAgY2FzZSBQTV9SRVFfTk9ERToKPj4+ICsgICAgY2Fz ZSBQTV9SRUxFQVNFX05PREU6Cj4+PiArICAgIGNhc2UgUE1fU0VUX1JFUVVJUkVNRU5UOgo+Pj4g KyAgICBjYXNlIFBNX1NFVF9NQVhfTEFURU5DWToKPj4+ICsgICAgICAgIGlmICggIWRvbWFpbl9o YXNfbm9kZV9hY2Nlc3MoY3VycmVudC0+ZG9tYWluLCBub2RlaWQpICkKPj4+ICsgICAgICAgIHsK Pj4+ICsgICAgICAgICAgICBncHJpbnRrKFhFTkxPR19XQVJOSU5HLAo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgInp5bnFtcC1wbTogZm49JXUgTm8gYWNjZXNzIHRvIG5vZGUgJXVcbiIsIHBtX2Zu LAo+Pj4gbm9kZWlkKTsKPj4+ICsgICAgICAgICAgICByZXQgPSBYU1RfUE1fTk9fQUNDRVNTOwo+ Pj4gKyAgICAgICAgICAgIGdvdG8gZG9uZTsKPj4+ICsgICAgICAgIH0KPj4+ICsgICAgICAgIGdv dG8gZm9yd2FyZF90b19mdzsKPj4+ICsKPj4+ICsgICAgY2FzZSBQTV9SRVNFVF9BU1NFUlQ6Cj4+ PiArICAgIGNhc2UgUE1fUkVTRVRfR0VUX1NUQVRVUzoKPj4+ICsgICAgICAgIGlmICggIWRvbWFp bl9oYXNfcmVzZXRfYWNjZXNzKGN1cnJlbnQtPmRvbWFpbiwgbm9kZWlkKSApCj4+PiArICAgICAg ICB7Cj4+PiArICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfV0FSTklORywKPj4+ICsgICAgICAg ICAgICAgICAgICAgICJ6eW5xbXAtcG06IGZuPSV1IE5vIGFjY2VzcyB0byByZXNldCAldVxuIiwg cG1fZm4sCj4+PiBub2RlaWQpOwo+Pj4gKyAgICAgICAgICAgIHJldCA9IFhTVF9QTV9OT19BQ0NF U1M7Cj4+PiArICAgICAgICAgICAgZ290byBkb25lOwo+Pj4gKyAgICAgICAgfQo+Pj4gKyAgICAg ICAgZ290byBmb3J3YXJkX3RvX2Z3Owo+Pj4gKwo+Pj4gKyAgICAvKiBUaGVzZSBjYWxscyBhcmUg c2FmZSBhbmQgYWx3YXlzIGFsbG93ZWQuICAqLwo+Pj4gKyAgICBjYXNlIFpZTlFNUF9TSVBfU1ZD X0NBTExfQ09VTlQ6Cj4+PiArICAgIGNhc2UgWllOUU1QX1NJUF9TVkNfVUlEOgo+Pj4gKyAgICBj YXNlIFpZTlFNUF9TSVBfU1ZDX1ZFUlNJT046Cj4+PiArICAgIGNhc2UgUE1fR0VUX1RSVVNUWk9O RV9WRVJTSU9OOgo+Pj4gKyAgICBjYXNlIFBNX0dFVF9BUElfVkVSU0lPTjoKPj4+ICsgICAgY2Fz ZSBQTV9HRVRfQ0hJUElEOgo+Pj4gKyAgICAgICAgZ290byBmb3J3YXJkX3RvX2Z3Owo+Pj4gKwo+ Pj4gKyAgICAvKiBObyBNTUlPIGFjY2VzcyBpcyBhbGxvd2VkIGZyb20gbm9uLXNlY3VyZSBkb21h aW5zICovCj4+PiArICAgIGNhc2UgUE1fTU1JT19XUklURToKPj4+ICsgICAgY2FzZSBQTV9NTUlP X1JFQUQ6Cj4+PiArICAgICAgICBncHJpbnRrKFhFTkxPR19XQVJOSU5HLAo+Pj4gKyAgICAgICAg ICAgICAgICAienlucW1wLXBtOiBmbj0ldSBObyBNTUlPIGFjY2VzcyB0byAldVxuIiwgcG1fZm4s IG5vZGVpZCk7Cj4+PiArICAgICAgICByZXQgPSBYU1RfUE1fTk9fQUNDRVNTOwo+Pj4gKyAgICAg ICAgZ290byBkb25lOwo+Pj4gKwo+Pj4gKyAgICAvKiBFeGNsdXNpdmUgdG8gdGhlIGhhcmR3YXJl IGRvbWFpbi4gICovCj4+PiArICAgIGNhc2UgUE1fSU5JVDoKPj4+ICsgICAgY2FzZSBQTV9TRVRf Q09ORklHVVJBVElPTjoKPj4+ICsgICAgY2FzZSBQTV9GUEdBX0xPQUQ6Cj4+PiArICAgIGNhc2Ug UE1fRlBHQV9HRVRfU1RBVFVTOgo+Pj4gKyAgICBjYXNlIFBNX1NFQ1VSRV9TSEE6Cj4+PiArICAg IGNhc2UgUE1fU0VDVVJFX1JTQToKPj4+ICsgICAgY2FzZSBQTV9QSU5DVFJMX1NFVF9GVU5DVElP TjoKPj4+ICsgICAgY2FzZSBQTV9QSU5DVFJMX1JFUVVFU1Q6Cj4+PiArICAgIGNhc2UgUE1fUElO Q1RSTF9SRUxFQVNFOgo+Pj4gKyAgICBjYXNlIFBNX1BJTkNUUkxfR0VUX0ZVTkNUSU9OOgo+Pj4g KyAgICBjYXNlIFBNX1BJTkNUUkxfQ09ORklHX1BBUkFNX0dFVDoKPj4+ICsgICAgY2FzZSBQTV9Q SU5DVFJMX0NPTkZJR19QQVJBTV9TRVQ6Cj4+PiArICAgIGNhc2UgUE1fSU9DVEw6Cj4+PiArICAg IGNhc2UgUE1fUVVFUllfREFUQToKPj4+ICsgICAgY2FzZSBQTV9DTE9DS19FTkFCTEU6Cj4+PiAr ICAgIGNhc2UgUE1fQ0xPQ0tfRElTQUJMRToKPj4+ICsgICAgY2FzZSBQTV9DTE9DS19HRVRTVEFU RToKPj4+ICsgICAgY2FzZSBQTV9DTE9DS19HRVRESVZJREVSOgo+Pj4gKyAgICBjYXNlIFBNX0NM T0NLX1NFVERJVklERVI6Cj4+PiArICAgIGNhc2UgUE1fQ0xPQ0tfU0VUUkFURToKPj4+ICsgICAg Y2FzZSBQTV9DTE9DS19HRVRSQVRFOgo+Pj4gKyAgICBjYXNlIFBNX0NMT0NLX1NFVFBBUkVOVDoK Pj4+ICsgICAgY2FzZSBQTV9DTE9DS19HRVRQQVJFTlQ6Cj4+PiArICAgICAgICBpZiAoICFpc19o YXJkd2FyZV9kb21haW4oY3VycmVudC0+ZG9tYWluKSApCj4+PiArICAgICAgICB7Cj4+PiArICAg ICAgICAgICAgZ3ByaW50ayhYRU5MT0dfV0FSTklORywgImVlbWk6IGZuPSV1IE5vIGFjY2VzcyIs IHBtX2ZuKTsKPj4+ICsgICAgICAgICAgICByZXQgPSBYU1RfUE1fTk9fQUNDRVNTOwo+Pj4gKyAg ICAgICAgICAgIGdvdG8gZG9uZTsKPj4+ICsgICAgICAgIH0KPj4+ICsgICAgICAgIGdvdG8gZm9y d2FyZF90b19mdzsKPj4+ICsKPj4+ICsgICAgLyogVGhlc2UgY2FsbHMgYXJlIG5ldmVyIGFsbG93 ZWQuICAqLwo+Pj4gKyAgICBjYXNlIFBNX1NZU1RFTV9TSFVURE9XTjoKPj4+ICsgICAgICAgIHJl dCA9IFhTVF9QTV9OT19BQ0NFU1M7Cj4+PiArICAgICAgICBnb3RvIGRvbmU7Cj4+PiArCj4+PiAr ICAgIGRlZmF1bHQ6Cj4+PiArICAgICAgICBncHJpbnRrKFhFTkxPR19XQVJOSU5HLCAienlucW1w LXBtOiBVbmhhbmRsZWQgUE0gQ2FsbDogJXVcbiIsIGZpZCk7Cj4+PiArICAgICAgICByZXR1cm4g ZmFsc2U7Cj4+PiArICAgIH0KPj4+ICAgIC1ib29sIHp5bnFtcF9lZW1pKHN0cnVjdCBjcHVfdXNl cl9yZWdzICpyZWdzKQo+Pj4gLXsKPj4+IC0gICAgcmV0dXJuIGZhbHNlOwo+Pj4gK2ZvcndhcmRf dG9fZnc6Cj4+PiArICAgIGFybV9zbWNjY18xXzFfc21jKGdldF91c2VyX3JlZyhyZWdzLCAwKSwK Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDEpLAo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICBnZXRfdXNlcl9yZWcocmVncywgMiksdmFsdWUgdG8KPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDMpLAo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICBnZXRfdXNlcl9yZWcocmVncywgNCksCj4+PiArICAgICAgICAgICAgICAg ICAgICAgIGdldF91c2VyX3JlZyhyZWdzLCA1KSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg Z2V0X3VzZXJfcmVnKHJlZ3MsIDYpLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICBnZXRfdXNl cl9yZWcocmVncywgNyksCj4+PiArICAgICAgICAgICAgICAgICAgICAgICZyZXMpOwo+Pgo+PiBJ ZiB5b3UgdXNlIGFsd2F5cyBTTUNDQyAxLjEsIHRoZW4geW91IHNob3VsZCBhZGQgY29kZSB0byBk ZW55IFhlbiBib290IG9uCj4+IHBsYXRmb3JtIG5vdCBzdXBwb3J0aW5nIFNNQ0NDIDEuMSBvciBs YXRlci4KPiAKPiBJIGNhbiBkbyB0aGF0Lgo+IAo+IAo+PiBGdXJ0aGVybW9yZSwgeW91IGFyZSBm b3J3YXJkaW5nIHVuc2FuaXRpemVkIHZhbHVlcyB0byB0aGUgZmlybXdhcmUuIEZvcgo+PiBpbnN0 YW5jZSwgd2hhdCB3b3VsZCBoYXBwZW4gaWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIG9mIHRo ZSBjYWxsIGFyZQo+PiBpbmNyZWFzZWQ/IEhvdyBhcmUgeW91IHN1cmUgdGhpcyB3aWxsIG5vdCBv cGVuIGEgaG9sZT8KPiAKPiBFRU1JIGlzIGJhY2t3YXJkIGNvbXBhdGlibGUgYW5kIHRoZSBpbXBs ZW1lbnRhdGlvbiBpcyB0ZXN0ZWQgd2l0aCBYZW4KPiByZWd1bGFybHkuIEEgY2hhbmdlIGxpa2Ug dGhlIG9uZSB5b3UgZGVzY3JpYmUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYQo+IGJhY2t3YXJkIGNv bXBhdGliaWxpdHkgYnJlYWthZ2UuCgpJIGRpc2FncmVlLCB5b3UgY2FuIHN0aWxsIG1ha2UgYmFj a3dhcmQgY29tcGF0aWJsZS4gRm9yIGluc3RhbmNlLCB0aGUgbmV3IApwYXJhbWV0ZXJzIGNvdWxk IGJlIGdhdGVkIGJ5IGEgZmxhZyBpbiBhbiBleGlzdGluZyBwYXJhbWV0ZXIuIEFub3RoZXIgd2F5 IGlzIApYaWxpbnggcHJvbWlzZSB0aGF0IG5vbi1leGlzdGluZyBhcmd1bWVudHMgc2hvdWxkIGFs d2F5cyBiZSAwIGFuZCB0aGVuIApyZS1wdXJwb3NlIHRoZSB2YWx1ZSBmb3Igbm9uLXplcm8gY2Fz ZS4KCldoaWxlIGl0IGlzIGJhY2t3YXJkIGNvbXBhdGlibGUsIHlvdSBtYXkgZW5kIHVwIHBhc3Np bmcgdW5zYW5pdGl6ZWQgdmFsdWUgdG8gdGhlCmZpcm13YXJlLiBOb3Qgc3VyZSB0aGlzIGlzIHdo YXQgd2Ugd2FudC4uLgoKQ2hlZXJzLAoKLS0gCkp1bGllbiBHcmFsbAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y Zy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==