From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v5 5/7] xen/arm: zynqmp: eemi access control Date: Mon, 3 Dec 2018 13:03:39 -0800 Message-ID: <1543871021-315-5-git-send-email-sstabellini@kernel.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: edgar.iglesias@xilinx.com, Stefano Stabellini , julien.grall@arm.com, sstabellini@kernel.org, saeed.nowshadi@xilinx.com List-Id: xen-devel@lists.xenproject.org RnJvbTogIkVkZ2FyIEUuIElnbGVzaWFzIiA8ZWRnYXIuaWdsZXNpYXNAeGlsaW54LmNvbT4KCkZy b206IEVkZ2FyIEUuIElnbGVzaWFzIDxlZGdhci5pZ2xlc2lhc0B4aWxpbnguY29tPgoKSW50cm9k dWNlIGRhdGEgc3RydWN0cyB0byBpbXBsZW1lbnQgYmFzaWMgYWNjZXNzIGNvbnRyb2xzLgpJbnRy b2R1Y2UgdGhlIGZvbGxvd2luZyB0aHJlZSBmdW5jdGlvbnM6Cgpkb21haW5faGFzX25vZGVfYWNj ZXNzOiBjaGVjayBhY2Nlc3MgdG8gdGhlIG5vZGUKZG9tYWluX2hhc19yZXNldF9hY2Nlc3M6IGNo ZWNrIGFjY2VzcyB0byB0aGUgcmVzZXQgbGluZQpkb21haW5faGFzX21taW9fYWNjZXNzOiBjaGVj ayBhY2Nlc3MgdG8gdGhlIHJlZ2lzdGVyCgpTaWduZWQtb2ZmLWJ5OiBFZGdhciBFLiBJZ2xlc2lh cyA8ZWRnYXIuaWdsZXNpYXNAeGlsaW54LmNvbT4KU2lnbmVkLW9mZi1ieTogU3RlZmFubyBTdGFi ZWxsaW5pIDxzdGVmYW5vc0B4aWxpbnguY29tPgoKLS0tClN0YXRpY2FsbHkgZGVmaW5lczoKCi0g cG1fbm9kZV9hY2Nlc3MKSXQgZW5jb2RlcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSBub2Rl IGlkIGFuZCB0aGUgc3RhcnQgb2YgdGhlIE1NSU8KcmVnaW9uIG9mIGEgZGV2aWNlIGluIHRoZSBj b3JyZXNwb25kaW5nIHBvd2VyIGRvbWFpbi4gSXQgaXMgdXNlZCBmb3IKcGVybWlzc2lvbiBjaGVj a2luZy4gQWx0aG91Z2ggdGhlIE1NSU8gcmVnaW9uIHN0YXJ0IGFkZHJlc3MgaXMgYXZhaWxhYmxl Cm9uIGRldmljZSB0cmVlIGFuZCBjb3VsZCBiZSBkZXJpdmVkIGZyb20gdGhlcmUgKHdlIHBsYW4g dG8gaW1wcm92ZSB0aGF0CmluIHRoZSBmdXR1cmUpLCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4g YSBub2RlIGlkIGFuZCBjb3JyZXNwb25kaW5nCmRldmljZXMgaXMgbm90IGRlc2NyaWJlZCBhbmQg bmVlZHMgdG8gYmUgaGFyZGNvZGVkLgoKLSBwbV9yZXNldF9hY2Nlc3MKU2FtZSBhcyBwbV9ub2Rl X2FjY2VzcyBmb3IgcmVzZXQgbGluZXMuCgotLS0KQ2hhbmdlcyBpbiB2NToKLSBpbXByb3ZlIGlu LWNvZGUgY29tbWVudHMKLSB1c2UgbWZuX3QgaW4gc3RydWN0IHBtX2FjY2VzcwotIHJlbW92ZSBt bWlvX2FjY2VzcyB0YWJsZQoKQ2hhbmdlcyBpbiB2NDoKLSBhZGQgI2luY2x1ZGUgYXMgbmVlZGVk Ci0gYWRkICNpZiAwIGZvciBiaXNlY3RhYmlsaXR5Ci0gdXNlIG1mbl90IGluIHBtX2NoZWNrX2Fj Y2VzcwotIGFkZCB3cmFwLWFyb3VuZCBBU1NFUlQgaW4gZG9tYWluX2hhc19tbWlvX2FjY2Vzcwot IHVzZSBHRU5NQVNLIGluIGRvbWFpbl9oYXNfbW1pb19hY2Nlc3MKLSBwcm9wZXIgYm91bmQgY2hl Y2tzICg9PSBBUlJBWV9TSVpFIGlzIG91dCBvZiBib3VuZCkKLS0tCiB4ZW4vYXJjaC9hcm0vcGxh dGZvcm1zL3hpbGlueC16eW5xbXAtZWVtaS5jIHwgMzQ4ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDEgZmlsZSBjaGFuZ2VkLCAzNDggaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3hl bi9hcmNoL2FybS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1lZW1pLmMgYi94ZW4vYXJjaC9hcm0v cGxhdGZvcm1zL3hpbGlueC16eW5xbXAtZWVtaS5jCmluZGV4IDM2OWJiM2YuLjkyYTAyZGYgMTAw NjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1lZW1pLmMKKysr IGIveGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy94aWxpbngtenlucW1wLWVlbWkuYwpAQCAtMTYsOSAr MTYsMzU3IEBACiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgogICovCiAKKy8qCisgKiAgRUVNSSBQb3dlciBNYW5hZ2VtZW50IEFQSSBhY2Nlc3MKKyAqCisg KiBSZWZzOgorICogaHR0cHM6Ly93d3cueGlsaW54LmNvbS9zdXBwb3J0L2RvY3VtZW50YXRpb24v dXNlcl9ndWlkZXMvdWcxMjAwLWVlbWktYXBpLnBkZgorICoKKyAqIEJhY2tncm91bmQ6CisgKiBU aGUgWnlucU1QIGhhcyBhIHN1YnN5c3RlbSBuYW1lZCB0aGUgUE1VIHdpdGggYSBDUFUgYW5kIHNw ZWNpYWwgZGV2aWNlcworICogZGVkaWNhdGVkIHRvIHJ1bm5pbmcgUG93ZXIgTWFuYWdlbWVudCBG aXJtd2FyZS4gT3RoZXIgbWFzdGVycyBpbiB0aGUKKyAqIHN5c3RlbSBuZWVkIHRvIHNlbmQgcmVx dWVzdHMgdG8gdGhlIFBNVSBpbiBvcmRlciB0byBmb3IgZXhhbXBsZToKKyAqICogTWFuYWdlIHBv d2VyIHN0YXRlCisgKiAqIENvbmZpZ3VyZSBjbG9ja3MKKyAqICogUHJvZ3JhbSBiaXRzdHJlYW1z IGZvciB0aGUgcHJvZ3JhbW1hYmxlIGxvZ2ljCisgKiAqIGV0YworICoKKyAqIEFsdGhvdWdoIHRo ZSBkZXRhaWxzIG9mIHRoZSBzZXR1cCBhcmUgY29uZmlndXJhYmxlLCBpbiB0aGUgY29tbW9uIGNh c2UKKyAqIHRoZSBQTVUgbGl2ZXMgaW4gdGhlIFNlY3VyZSB3b3JsZC4gTlMgV29ybGQgY2Fubm90 IGRpcmVjdGx5IGNvbW11bmljYXRlCisgKiB3aXRoIGl0IGFuZCBtdXN0IHVzZSBwcm94eSBzZXJ2 aWNlcyBmcm9tIEFSTSBUcnVzdGVkIEZpcm13YXJlIHRvIHJlYWNoCisgKiB0aGUgUE1VLgorICoK KyAqIFBvd2VyIE1hbmFnZW1lbnQgb24gdGhlIFp5bnFNUCBpcyBpbXBsZW1lbnRlZCBpbiBhIGxh eWVyZWQgbWFubmVyLgorICogVGhlIFBNVSBrbm93cyBhYm91dCB2YXJpb3VzIG1hc3RlcnMgYW5k IHdpbGwgZW5mb3JjZSBhY2Nlc3MgY29udHJvbHMKKyAqIGJhc2VkIG9uIGEgcHJlLWNvbmZpZ3Vy ZWQgcGFydGl0aW9uaW5nLiBUaGlzIGNvbmZpZ3VyYXRpb24gZGljdGF0ZXMKKyAqIHdoaWNoIGRl dmljZXMgYXJlIG93bmVkIGJ5IHRoZSB2YXJpb3VzIG1hc3RlcnMgYW5kIHRoZSBQTVUgRlcgbWFr ZXMgc3VyZQorICogdGhhdCBhIGdpdmVuIG1hc3RlciBjYW5ub3QgdHVybiBvZmYgYSBkZXZpY2Ug dGhhdCBpdCBkb2VzIG5vdCBvd24gb3IgdGhhdAorICogaXMgaW4gdXNlIGJ5IG90aGVyIG1hc3Rl cnMuCisgKgorICogVGhlIFBNVSBpcyBub3QgYXdhcmUgb2YgbXVsdGlwbGUgZXhlY3V0aW9uIHN0 YXRlcyBpbiBtYXN0ZXJzLgorICogRm9yIGV4YW1wbGUsIGl0IHRyZWF0cyB0aGUgQVJNdjggY29y ZXMgYXMgc2luZ2xlIHVuaXRzIGFuZCBkb2VzIG5vdAorICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBT ZWN1cmUgdnMgTlMgT1MncyBub3IgZG9lcyBpdCBrbm93IGFib3V0IEh5cGVydmlzb3JzCisgKiBh bmQgbXVsdGlwbGUgZ3Vlc3RzLiBJdCBpcyB1cCB0byBzb2Z0d2FyZSBvbiB0aGUgQVJNdjggY29y ZXMgdG8gcHJlc2VudAorICogYSB1bmlmaWVkIHZpZXcgb2YgaXRzIHBvd2VyIHJlcXVpcmVtZW50 cy4KKyAqCisgKiBUbyBpbXBsZW1lbnQgdGhpcyB1bmlmaWVkIHZpZXcsIEFSTSBUcnVzdGVkIEZp cm13YXJlIGF0IEVMMyBwcm92aWRlcworICogYWNjZXNzIHRvIHRoZSBQTSBBUEkgdmlhIFNNQyBj YWxscy4gQVJNIFRydXN0ZWQgRmlybXdhcmUgaXMgcmVzcG9uc2libGUKKyAqIGZvciBtZWRpYXRp bmcgYmV0d2VlbiB0aGUgU2VjdXJlIGFuZCB0aGUgTlMgd29ybGQsIHJlamVjdGluZyBTTUMgY2Fs bHMKKyAqIHRoYXQgcmVxdWVzdCBjaGFuZ2VzIHRoYXQgYXJlIG5vdCBhbGxvd2VkLgorICoKKyAq IFhlbiBydW5uaW5nIGFib3ZlIEFURiBvd25zIHRoZSBOUyB3b3JsZCBhbmQgaXMgcmVzcG9uc2li bGUgZm9yIHByZXNlbnRpbmcKKyAqIHVuaWZpZWQgUE0gcmVxdWVzdHMgdGFraW5nIGFsbCBndWVz dHMgYW5kIHRoZSBoeXBlcnZpc29yIGludG8gYWNjb3VudC4KKyAqCisgKiBJbXBsZW1lbnRhdGlv bjoKKyAqIFRoZSBQTSBBUEkgY29udGFpbnMgZGlmZmVyZW50IGNsYXNzZXMgb2YgY2FsbHMuCisg KiBDZXJ0YWluIGNhbGxzIGFyZSBoYXJtbGVzcyB0byBleHBvc2UgdG8gYW55IGd1ZXN0LgorICog VGhlc2UgaW5jbHVkZSBjYWxscyB0byBnZXQgdGhlIFBNIEFQSSBWZXJzaW9uLCBvciB0byByZWFk IG91dCB0aGUgdmVyc2lvbgorICogb2YgdGhlIGNoaXAgd2UncmUgcnVubmluZyBvbi4KKyAqCisg KiBJbiBvcmRlciB0byBjb3JyZWN0bHkgdmlydHVhbGl6ZSB0aGVzZSBjYWxscywgd2UgbmVlZCB0 byBrbm93IGlmCisgKiBndWVzdHMgaXNzdWluZyB0aGVzZSBjYWxscyBoYXZlIG93bmVyc2hpcCBv ZiB0aGUgZ2l2ZW4gZGV2aWNlLgorICogVGhlIGFwcHJvYWNoIHRha2VuIGhlcmUgaXMgdG8gbWFw IFBNIEFQSSBOb2RlcyBpZGVudGlmeWluZworICogYSBkZXZpY2UgaW50byBiYXNlIGFkZHJlc3Nl cyBmb3IgcmVnaXN0ZXJzIHRoYXQgYmVsb25nIHRvIHRoYXQKKyAqIHNhbWUgZGV2aWNlLgorICoK KyAqIElmIHRoZSBndWVzdCBoYXMgYWNjZXNzIHRvIGRldmljZXMgcmVnaXN0ZXJzLCB3ZSBnaXZl IHRoZSBndWVzdAorICogYWNjZXNzIHRvIFBNIEFQSSBjYWxscyB0aGF0IGFmZmVjdCB0aGF0IGRl dmljZS4gVGhpcyBpcyBpbXBsZW1lbnRlZAorICogYnkgcG1fbm9kZV9hY2Nlc3MgYW5kIGRvbWFp bl9oYXNfbm9kZV9hY2Nlc3MoKS4KKyAqLworCisjaW5jbHVkZSA8eGVuL2lvY2FwLmg+CisjaW5j bHVkZSA8eGVuL3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3JlZ3MuaD4KICNpbmNsdWRlIDxhc20v cGxhdGZvcm1zL3hpbGlueC16eW5xbXAtZWVtaS5oPgogCisjaWYgMAorc3RydWN0IHBtX2FjY2Vz cworeworICAgIG1mbl90IG1mbjsKKyAgICBib29sIGh3ZG9tX2FjY2VzczsgICAgLyogSFcgZG9t YWluIGdldHMgYWNjZXNzIHJlZ2FyZGxlc3MuICAqLworfTsKKworLyoKKyAqIFRoaXMgdGFibGUg bWFwcyBhIG5vZGUgaW50byBhIG1lbW9yeSBhZGRyZXNzLgorICogSWYgYSBndWVzdCBoYXMgYWNj ZXNzIHRvIHRoZSBhZGRyZXNzLCBpdCBoYXMgZW5vdWdoIGNvbnRyb2wKKyAqIG92ZXIgdGhlIG5v ZGUgdG8gZ3JhbnQgaXQgYWNjZXNzIHRvIEVFTUkgY2FsbHMgZm9yIHRoYXQgbm9kZS4KKyAqLwor c3RhdGljIGNvbnN0IHN0cnVjdCBwbV9hY2Nlc3MgcG1fbm9kZV9hY2Nlc3NbXSA9IHsKKyAgICAv KiBNTV9SUFUgZ3JhbnRzIGFjY2VzcyB0byBhbGwgUlBVIE5vZGVzLiAgKi8KKyAgICBbTk9ERV9S UFVdID0geyBtZm5faW5pdChNTV9SUFUpIH0sCisgICAgW05PREVfUlBVXzBdID0geyBtZm5faW5p dChNTV9SUFUpIH0sCisgICAgW05PREVfUlBVXzFdID0geyBtZm5faW5pdChNTV9SUFUpIH0sCisg ICAgW05PREVfSVBJX1JQVV8wXSA9IHsgbWZuX2luaXQoTU1fUlBVKSB9LAorCisgICAgLyogR1BV IG5vZGVzLiAgKi8KKyAgICBbTk9ERV9HUFVdID0geyBtZm5faW5pdChNTV9HUFUpIH0sCisgICAg W05PREVfR1BVX1BQXzBdID0geyBtZm5faW5pdChNTV9HUFUpIH0sCisgICAgW05PREVfR1BVX1BQ XzFdID0geyBtZm5faW5pdChNTV9HUFUpIH0sCisKKyAgICBbTk9ERV9VU0JfMF0gPSB7IG1mbl9p bml0KE1NX1VTQjNfMF9YSENJKSB9LAorICAgIFtOT0RFX1VTQl8xXSA9IHsgbWZuX2luaXQoTU1f VVNCM18xX1hIQ0kpIH0sCisgICAgW05PREVfVFRDXzBdID0geyBtZm5faW5pdChNTV9UVEMwKSB9 LAorICAgIFtOT0RFX1RUQ18xXSA9IHsgbWZuX2luaXQoTU1fVFRDMSkgfSwKKyAgICBbTk9ERV9U VENfMl0gPSB7IG1mbl9pbml0KE1NX1RUQzIpIH0sCisgICAgW05PREVfVFRDXzNdID0geyBtZm5f aW5pdChNTV9UVEMzKSB9LAorICAgIFtOT0RFX1NBVEFdID0geyBtZm5faW5pdChNTV9TQVRBX0FI Q0lfSEJBKSB9LAorICAgIFtOT0RFX0VUSF8wXSA9IHsgbWZuX2luaXQoTU1fR0VNMCkgfSwKKyAg ICBbTk9ERV9FVEhfMV0gPSB7IG1mbl9pbml0KE1NX0dFTTEpIH0sCisgICAgW05PREVfRVRIXzJd ID0geyBtZm5faW5pdChNTV9HRU0yKSB9LAorICAgIFtOT0RFX0VUSF8zXSA9IHsgbWZuX2luaXQo TU1fR0VNMykgfSwKKyAgICBbTk9ERV9VQVJUXzBdID0geyBtZm5faW5pdChNTV9VQVJUMCkgfSwK KyAgICBbTk9ERV9VQVJUXzFdID0geyBtZm5faW5pdChNTV9VQVJUMSkgfSwKKyAgICBbTk9ERV9T UElfMF0gPSB7IG1mbl9pbml0KE1NX1NQSTApIH0sCisgICAgW05PREVfU1BJXzFdID0geyBtZm5f aW5pdChNTV9TUEkxKSB9LAorICAgIFtOT0RFX0kyQ18wXSA9IHsgbWZuX2luaXQoTU1fSTJDMCkg fSwKKyAgICBbTk9ERV9JMkNfMV0gPSB7IG1mbl9pbml0KE1NX0kyQzEpIH0sCisgICAgW05PREVf U0RfMF0gPSB7IG1mbl9pbml0KE1NX1NEMCkgfSwKKyAgICBbTk9ERV9TRF8xXSA9IHsgbWZuX2lu aXQoTU1fU0QxKSB9LAorICAgIFtOT0RFX0RQXSA9IHsgbWZuX2luaXQoTU1fRFApIH0sCisKKyAg ICAvKiBHdWVzdCB3aXRoIEdETUEgQ2hhbm5lbCAwIGdldHMgUE0gYWNjZXNzLiBPdGhlciBndWVz dHMgZG9uJ3QuICAqLworICAgIFtOT0RFX0dETUFdID0geyBtZm5faW5pdChNTV9HRE1BX0NIMCkg fSwKKyAgICAvKiBHdWVzdCB3aXRoIEFETUEgQ2hhbm5lbCAwIGdldHMgUE0gYWNjZXNzLiBPdGhl ciBndWVzdHMgZG9uJ3QuICAqLworICAgIFtOT0RFX0FETUFdID0geyBtZm5faW5pdChNTV9BRE1B X0NIMCkgfSwKKworICAgIFtOT0RFX05BTkRdID0geyBtZm5faW5pdChNTV9OQU5EKSB9LAorICAg IFtOT0RFX1FTUEldID0geyBtZm5faW5pdChNTV9RU1BJKSB9LAorICAgIFtOT0RFX0dQSU9dID0g eyBtZm5faW5pdChNTV9HUElPKSB9LAorICAgIFtOT0RFX0NBTl8wXSA9IHsgbWZuX2luaXQoTU1f Q0FOMCkgfSwKKyAgICBbTk9ERV9DQU5fMV0gPSB7IG1mbl9pbml0KE1NX0NBTjEpIH0sCisKKyAg ICAvKiBPbmx5IGZvciB0aGUgaGFyZHdhcmUgZG9tYWluLiAgKi8KKyAgICBbTk9ERV9BRkldID0g eyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAorICAgIFtOT0RFX0FQTExdID0geyAuaHdkb21fYWNj ZXNzID0gdHJ1ZSB9LAorICAgIFtOT0RFX1ZQTExdID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9 LAorICAgIFtOT0RFX0RQTExdID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAorICAgIFtOT0RF X1JQTExdID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAorICAgIFtOT0RFX0lPUExMXSA9IHsg Lmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbTk9ERV9ERFJdID0geyAuaHdkb21fYWNjZXNz ID0gdHJ1ZSB9LAorICAgIFtOT0RFX0lQSV9BUFVdID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9 LAorICAgIFtOT0RFX1BDQVBdID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAorCisgICAgW05P REVfUENJRV0gPSB7IG1mbl9pbml0KE1NX1BDSUVfQVRUUklCKSB9LAorICAgIFtOT0RFX1JUQ10g PSB7IG1mbl9pbml0KE1NX1JUQykgfSwKK307CisKKy8qCisgKiBUaGlzIHRhYmxlIG1hcHMgcmVz ZXQgbGluZSBJRHMgaW50byBhIG1lbW9yeSBhZGRyZXNzLgorICogSWYgYSBndWVzdCBoYXMgYWNj ZXNzIHRvIHRoZSBhZGRyZXNzLCBpdCBoYXMgZW5vdWdoIGNvbnRyb2wKKyAqIG92ZXIgdGhlIGFm ZmVjdGVkIG5vZGUgdG8gZ3JhbnQgaXQgYWNjZXNzIHRvIEVFTUkgY2FsbHMgZm9yCisgKiByZXNl dHRpbmcgdGhhdCBub2RlLgorICovCisjZGVmaW5lIFhJTFBNX1JFU0VUX0lEWChuKSAobiAtIFhJ TFBNX1JFU0VUX1BDSUVfQ0ZHKQorc3RhdGljIGNvbnN0IHN0cnVjdCBwbV9hY2Nlc3MgcG1fcmVz ZXRfYWNjZXNzW10gPSB7CisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9QQ0lFX0NG RyldID0geyBtZm5faW5pdChNTV9BWElQQ0lFX01BSU4pIH0sCisgICAgW1hJTFBNX1JFU0VUX0lE WChYSUxQTV9SRVNFVF9QQ0lFX0JSSURHRSldID0geyBtZm5faW5pdChNTV9QQ0lFX0FUVFJJQikg fSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1BDSUVfQ1RSTCldID0geyBtZm5f aW5pdChNTV9QQ0lFX0FUVFJJQikgfSwKKworICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVT RVRfRFApXSA9IHsgbWZuX2luaXQoTU1fRFApIH0sCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQ TV9SRVNFVF9TV0RUX0NSRildID0geyBtZm5faW5pdChNTV9TV0RUKSB9LAorICAgIFtYSUxQTV9S RVNFVF9JRFgoWElMUE1fUkVTRVRfQUZJX0ZNNSldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9 LAorICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfQUZJX0ZNNCldID0geyAuaHdkb21f YWNjZXNzID0gdHJ1ZSB9LAorICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfQUZJX0ZN MyldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAorICAgIFtYSUxQTV9SRVNFVF9JRFgoWElM UE1fUkVTRVRfQUZJX0ZNMildID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAorICAgIFtYSUxQ TV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfQUZJX0ZNMSldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1 ZSB9LAorICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfQUZJX0ZNMCldID0geyAuaHdk b21fYWNjZXNzID0gdHJ1ZSB9LAorCisgICAgLyogQ2hhbm5lbCAwIGdyYW50cyBQTSBhY2Nlc3Mu ICAqLworICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfR0RNQSldID0geyBtZm5faW5p dChNTV9HRE1BX0NIMCkgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQVV9Q UDEpXSA9IHsgbWZuX2luaXQoTU1fR1BVKSB9LAorICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1f UkVTRVRfR1BVX1BQMCldID0geyBtZm5faW5pdChNTV9HUFUpIH0sCisgICAgW1hJTFBNX1JFU0VU X0lEWChYSUxQTV9SRVNFVF9HVCldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAorICAgIFtY SUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfU0FUQSldID0geyBtZm5faW5pdChNTV9TQVRBX0FI Q0lfSEJBKSB9LAorCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9BUE1fRlBEKV0g PSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9S RVNFVF9TT0ZUKV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCisKKyAgICBbWElMUE1fUkVT RVRfSURYKFhJTFBNX1JFU0VUX0dFTTApXSA9IHsgbWZuX2luaXQoTU1fR0VNMCkgfSwKKyAgICBb WElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dFTTEpXSA9IHsgbWZuX2luaXQoTU1fR0VNMSkg fSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dFTTIpXSA9IHsgbWZuX2luaXQo TU1fR0VNMikgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dFTTMpXSA9IHsg bWZuX2luaXQoTU1fR0VNMykgfSwKKworICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRf UVNQSSldID0geyBtZm5faW5pdChNTV9RU1BJKSB9LAorICAgIFtYSUxQTV9SRVNFVF9JRFgoWElM UE1fUkVTRVRfVUFSVDApXSA9IHsgbWZuX2luaXQoTU1fVUFSVDApIH0sCisgICAgW1hJTFBNX1JF U0VUX0lEWChYSUxQTV9SRVNFVF9VQVJUMSldID0geyBtZm5faW5pdChNTV9VQVJUMSkgfSwKKyAg ICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1NQSTApXSA9IHsgbWZuX2luaXQoTU1fU1BJ MCkgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1NQSTEpXSA9IHsgbWZuX2lu aXQoTU1fU1BJMSkgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1NESU8wKV0g PSB7IG1mbl9pbml0KE1NX1NEMCkgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VU X1NESU8xKV0gPSB7IG1mbl9pbml0KE1NX1NEMSkgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJ TFBNX1JFU0VUX0NBTjApXSA9IHsgbWZuX2luaXQoTU1fQ0FOMCkgfSwKKyAgICBbWElMUE1fUkVT RVRfSURYKFhJTFBNX1JFU0VUX0NBTjEpXSA9IHsgbWZuX2luaXQoTU1fQ0FOMSkgfSwKKyAgICBb WElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0kyQzApXSA9IHsgbWZuX2luaXQoTU1fSTJDMCkg fSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0kyQzEpXSA9IHsgbWZuX2luaXQo TU1fSTJDMSkgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1RUQzApXSA9IHsg bWZuX2luaXQoTU1fVFRDMCkgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1RU QzEpXSA9IHsgbWZuX2luaXQoTU1fVFRDMSkgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBN X1JFU0VUX1RUQzIpXSA9IHsgbWZuX2luaXQoTU1fVFRDMikgfSwKKyAgICBbWElMUE1fUkVTRVRf SURYKFhJTFBNX1JFU0VUX1RUQzMpXSA9IHsgbWZuX2luaXQoTU1fVFRDMykgfSwKKyAgICBbWElM UE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1NXRFRfQ1JMKV0gPSB7IG1mbl9pbml0KE1NX1NXRFQp IH0sCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9OQU5EKV0gPSB7IG1mbl9pbml0 KE1NX05BTkQpIH0sCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9BRE1BKV0gPSB7 IG1mbl9pbml0KE1NX0FETUFfQ0gwKSB9LAorICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVT RVRfR1BJTyldID0geyBtZm5faW5pdChNTV9HUElPKSB9LAorICAgIFtYSUxQTV9SRVNFVF9JRFgo WElMUE1fUkVTRVRfSU9VX0NDKV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCisgICAgW1hJ TFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9USU1FU1RBTVApXSA9IHsgLmh3ZG9tX2FjY2VzcyA9 IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1JQVV9SNTApXSA9IHsg bWZuX2luaXQoTU1fUlBVKSB9LAorICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfUlBV X1I1MSldID0geyBtZm5faW5pdChNTV9SUFUpIH0sCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQ TV9SRVNFVF9SUFVfQU1CQSldID0geyBtZm5faW5pdChNTV9SUFUpIH0sCisgICAgW1hJTFBNX1JF U0VUX0lEWChYSUxQTV9SRVNFVF9PQ00pXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAg ICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1JQVV9QR0UpXSA9IHsgbWZuX2luaXQoTU1f UlBVKSB9LAorCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9VU0IwX0NPUkVSRVNF VCldID0geyBtZm5faW5pdChNTV9VU0IzXzBfWEhDSSkgfSwKKyAgICBbWElMUE1fUkVTRVRfSURY KFhJTFBNX1JFU0VUX1VTQjBfSElCRVJSRVNFVCldID0geyBtZm5faW5pdChNTV9VU0IzXzBfWEhD SSkgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1VTQjBfQVBCKV0gPSB7IG1m bl9pbml0KE1NX1VTQjNfMF9YSENJKSB9LAorCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9S RVNFVF9VU0IxX0NPUkVSRVNFVCldID0geyBtZm5faW5pdChNTV9VU0IzXzFfWEhDSSkgfSwKKyAg ICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1VTQjFfSElCRVJSRVNFVCldID0geyBtZm5f aW5pdChNTV9VU0IzXzFfWEhDSSkgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VU X1VTQjFfQVBCKV0gPSB7IG1mbl9pbml0KE1NX1VTQjNfMV9YSENJKSB9LAorCisgICAgW1hJTFBN X1JFU0VUX0lEWChYSUxQTV9SRVNFVF9JUEkpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwK KyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0FQTV9MUEQpXSA9IHsgLmh3ZG9tX2Fj Y2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1JUQyldID0g eyBtZm5faW5pdChNTV9SVEMpIH0sCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9T WVNNT04pXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURY KFhJTFBNX1JFU0VUX0FGSV9GTTYpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBb WElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0xQRF9TV0RUKV0gPSB7IG1mbl9pbml0KE1NX1NX RFQpIH0sCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9GUEQpXSA9IHsgLmh3ZG9t X2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1JQVV9E QkcxKV0gPSB7IG1mbl9pbml0KE1NX1JQVSkgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBN X1JFU0VUX1JQVV9EQkcwKV0gPSB7IG1mbl9pbml0KE1NX1JQVSkgfSwKKyAgICBbWElMUE1fUkVT RVRfSURYKFhJTFBNX1JFU0VUX0RCR19MUEQpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwK KyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0RCR19GUEQpXSA9IHsgLmh3ZG9tX2Fj Y2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0FQTEwpXSA9 IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JF U0VUX0RQTEwpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRf SURYKFhJTFBNX1JFU0VUX1ZQTEwpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBb WElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0lPUExMKV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0 cnVlIH0sCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9SUExMKV0gPSB7IC5od2Rv bV9hY2Nlc3MgPSB0cnVlIH0sCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9HUE8z X1BMXzApXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURY KFhJTFBNX1JFU0VUX0dQTzNfUExfMSldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAorICAg IFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfR1BPM19QTF8yKV0gPSB7IC5od2RvbV9hY2Nl c3MgPSB0cnVlIH0sCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9HUE8zX1BMXzMp XSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBN X1JFU0VUX0dQTzNfUExfNCldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAorICAgIFtYSUxQ TV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfR1BPM19QTF81KV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0 cnVlIH0sCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9HUE8zX1BMXzYpXSA9IHsg Lmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VU X0dQTzNfUExfNyldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAorICAgIFtYSUxQTV9SRVNF VF9JRFgoWElMUE1fUkVTRVRfR1BPM19QTF84KV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0s CisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9HUE8zX1BMXzkpXSA9IHsgLmh3ZG9t X2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNf UExfMTApXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURY KFhJTFBNX1JFU0VUX0dQTzNfUExfMTEpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAg ICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMTIpXSA9IHsgLmh3ZG9tX2Fj Y2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExf MTMpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJ TFBNX1JFU0VUX0dQTzNfUExfMTQpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBb WElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMTUpXSA9IHsgLmh3ZG9tX2FjY2Vz cyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMTYp XSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBN X1JFU0VUX0dQTzNfUExfMTcpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElM UE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMTgpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9 IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMTkpXSA9 IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JF U0VUX0dQTzNfUExfMjApXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1f UkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMjEpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRy dWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMjIpXSA9IHsg Lmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VU X0dQTzNfUExfMjMpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVT RVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMjQpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUg fSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMjUpXSA9IHsgLmh3 ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQ TzNfUExfMjYpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRf SURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMjcpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwK KyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMjgpXSA9IHsgLmh3ZG9t X2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNf UExfMjkpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURY KFhJTFBNX1JFU0VUX0dQTzNfUExfMzApXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKKyAg ICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMzEpXSA9IHsgLmh3ZG9tX2Fj Y2VzcyA9IHRydWUgfSwKKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1JQVV9MUyld ID0geyBtZm5faW5pdChNTV9SUFUpIH0sCisgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNF VF9QU19PTkxZKV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCisgICAgW1hJTFBNX1JFU0VU X0lEWChYSUxQTV9SRVNFVF9QTCldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAorfTsKKwor c3RhdGljIGJvb2wgcG1fY2hlY2tfYWNjZXNzKGNvbnN0IHN0cnVjdCBwbV9hY2Nlc3MgKmFjbCwg c3RydWN0IGRvbWFpbiAqZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBp ZHgpCit7CisgICAgaWYgKCBhY2xbaWR4XS5od2RvbV9hY2Nlc3MgJiYgaXNfaGFyZHdhcmVfZG9t YWluKGQpICkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoICFtZm5feChhY2xbaWR4 XS5tZm4pICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlvbWVtX2FjY2Vz c19wZXJtaXR0ZWQoZCwgbWZuX3goYWNsW2lkeF0ubWZuKSwgbWZuX3goYWNsW2lkeF0ubWZuKSk7 Cit9CisKKy8qIENoZWNrIGlmIGEgZG9tYWluIGhhcyBhY2Nlc3MgdG8gYSBub2RlLiAgKi8KK3N0 YXRpYyBib29sIGRvbWFpbl9oYXNfbm9kZV9hY2Nlc3Moc3RydWN0IGRvbWFpbiAqZCwgdWludDMy X3Qgbm9kZWlkKQoreworICAgIGlmICggbm9kZWlkID49IEFSUkFZX1NJWkUocG1fbm9kZV9hY2Nl c3MpICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHBtX2NoZWNrX2FjY2Vz cyhwbV9ub2RlX2FjY2VzcywgZCwgbm9kZWlkKTsKK30KKworLyogQ2hlY2sgaWYgYSBkb21haW4g aGFzIGFjY2VzcyB0byBhIHJlc2V0IGxpbmUuICAqLworc3RhdGljIGJvb2wgZG9tYWluX2hhc19y ZXNldF9hY2Nlc3Moc3RydWN0IGRvbWFpbiAqZCwgdWludDMyX3QgcnN0KQoreworICAgIGlmICgg cnN0IDwgWElMUE1fUkVTRVRfUENJRV9DRkcgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg ICByc3QgLT0gWElMUE1fUkVTRVRfUENJRV9DRkc7CisKKyAgICBpZiAoIHJzdCA+PSBBUlJBWV9T SVpFKHBtX3Jlc2V0X2FjY2VzcykgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1 cm4gcG1fY2hlY2tfYWNjZXNzKHBtX3Jlc2V0X2FjY2VzcywgZCwgcnN0KTsKK30KKworLyoKKyAq IENoZWNrIGlmIGEgZ2l2ZW4gZG9tYWluIGhhcyBhY2Nlc3MgdG8gcGVyZm9ybSBhbiBpbmRpcmVj dAorICogTU1JTyBhY2Nlc3MuCisgKgorICogSWYgdGhlIHByb3ZpZGVkIG1hc2sgaXMgaW52YWxp ZCwgaXQgd2lsbCBiZSBmaXhlZCB1cC4KKyAqLworc3RhdGljIGJvb2wgZG9tYWluX2hhc19tbWlv X2FjY2VzcyhzdHJ1Y3QgZG9tYWluICpkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIHdyaXRlLCBwYWRkcl90IGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90ICptYXNrKQoreworICAgIHVuc2lnbmVkIGludCBpOworICAgIGJv b2wgcmV0ID0gZmFsc2U7CisgICAgdWludDMyX3QgcHJvdF9tYXNrID0gMDsKKworICAgIC8qCisg ICAgICogVGhlIGhhcmR3YXJlIGRvbWFpbiBnZXRzIHJlYWQgYWNjZXNzIHRvIGV2ZXJ5dGhpbmcu CisgICAgICogTG93ZXIgbGF5ZXJzIHdpbGwgZG8gZnVydGhlciBmaWx0ZXJpbmcuCisgICAgICov CisgICAgaWYgKCAhd3JpdGUgJiYgaXNfaGFyZHdhcmVfZG9tYWluKGQpICkKKyAgICAgICAgcmV0 dXJuIHRydWU7CisKKyAgICAvKiBTY2FuIHRoZSBBQ0wuICAqLworICAgIGZvciAoIGkgPSAwOyBp IDwgQVJSQVlfU0laRShwbV9tbWlvX2FjY2Vzcyk7IGkrKyApCisgICAgeworICAgICAgICBBU1NF UlQocG1fbW1pb19hY2Nlc3NbaV0uc3RhcnQgKyBwbV9tbWlvX2FjY2Vzc1tpXS5zaXplID49Cisg ICAgICAgICAgICAgICBwbV9tbWlvX2FjY2Vzc1tpXS5zdGFydCk7CisKKyAgICAgICAgaWYgKCBh ZGRyIDwgcG1fbW1pb19hY2Nlc3NbaV0uc3RhcnQgKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl OworICAgICAgICBpZiAoIGFkZHIgPj0gcG1fbW1pb19hY2Nlc3NbaV0uc3RhcnQgKyBwbV9tbWlv X2FjY2Vzc1tpXS5zaXplICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICgg d3JpdGUgJiYgcG1fbW1pb19hY2Nlc3NbaV0ucmVhZG9ubHkgKQorICAgICAgICAgICAgcmV0dXJu IGZhbHNlOworICAgICAgICBpZiAoIHBtX21taW9fYWNjZXNzW2ldLmh3ZG9tX2FjY2VzcyAmJiAh aXNfaGFyZHdhcmVfZG9tYWluKGQpICkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg ICAgaWYgKCAhZG9tYWluX2hhc19ub2RlX2FjY2VzcyhkLCBwbV9tbWlvX2FjY2Vzc1tpXS5ub2Rl KSApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLyogV2UndmUgZ290IGFj Y2VzcyB0byB0aGlzIHJlZyAob3IgcGFydHMgb2YgaXQpLiAgKi8KKyAgICAgICAgcmV0ID0gdHJ1 ZTsKKworICAgICAgICAvKiBQZXJtaXQgd3JpdGUgYWNjZXNzIHRvIHNlbGVjdGVkIGJpdHMuICAq LworICAgICAgICBwcm90X21hc2sgfD0gcG1fbW1pb19hY2Nlc3NbaV0ubWFzayA/OiBHRU5NQVNL KDMxLCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBNYXNraW5n IG9ubHkgYXBwbGllcyB0byB3cml0ZXM6IHZhbHVlcyBhcmUgc2FmZSB0byByZWFkLCBidXQgbm90 CisgICAgICogYWxsIGJpdHMgYXJlIHdyaXRlYWJsZS4KKyAgICAgKi8KKyAgICBpZiAoIHdyaXRl ICkKKyAgICAgICAgKm1hc2sgJj0gcHJvdF9tYXNrOworCisgICAgcmV0dXJuIHJldDsKK30KKyNl bmRpZgorCiBib29sIHp5bnFtcF9lZW1pKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQogewog ICAgIHJldHVybiBmYWxzZTsKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp c3RpbmZvL3hlbi1kZXZlbA==