From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [1/2] EDAC: Add Aspeed AST2500 EDAC driver From: Borislav Petkov Message-Id: <20190110095049.GB17621@zn.tnic> Date: Thu, 10 Jan 2019 10:50:49 +0100 To: Stefan Schaeckeler Cc: Rob Herring , Mark Rutland , Joel Stanley , Andrew Jeffery , Mauro Carvalho Chehab , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org, linux-edac@vger.kernel.org, Stefan M Schaeckeler List-ID: T24gU3VuLCBEZWMgMTYsIDIwMTggYXQgMTA6MDE6NTZQTSAtMDgwMCwgU3RlZmFuIFNjaGFlY2tl bGVyIHdyb3RlOgo+IEZyb206IFN0ZWZhbiBNIFNjaGFlY2tlbGVyIDxzc2NoYWVja0BjaXNjby5j b20+Cj4gCj4gQWRkIHN1cHBvcnQgZm9yIHRoZSBBc3BlZWQgQVNUMjUwMCBTb0MgRURBQyBkcml2 ZXIuCj4gCj4gU2lnbmVkLW9mZi1ieTogU3RlZmFuIE0gU2NoYWVja2VsZXIgPHNzY2hhZWNrQGNp c2NvLmNvbT4KPiAtLS0KPiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgfCAgIDYg Kwo+ICBhcmNoL2FybS9ib290L2R0cy9hc3BlZWQtZzUuZHRzaSB8ICAgNyArCj4gIGRyaXZlcnMv ZWRhYy9LY29uZmlnICAgICAgICAgICAgIHwgICA3ICsKPiAgZHJpdmVycy9lZGFjL01ha2VmaWxl ICAgICAgICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2VkYWMvYXNwZWVkX2VkYWMuYyAgICAgICB8 IDQ1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDUgZmlsZXMgY2hhbmdlZCwg NDc4IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZWRhYy9hc3Bl ZWRfZWRhYy5jCgpJIGNvdWxkbid0IHNlZSBhbnl0aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IC0g b25seSBuaXRwaWNrcyBiZWxvdy4KCj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRB SU5FUlMKPiBpbmRleCAzMzE4ZjMwOTAzYjIuLjFmZWI5MmIxNDAyOSAxMDA2NDQKPiAtLS0gYS9N QUlOVEFJTkVSUwo+ICsrKyBiL01BSU5UQUlORVJTCj4gQEAgLTUzMTUsNiArNTMxNSwxMiBAQCBM OglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwo+ICBTOglNYWludGFpbmVkCj4gIEY6CWRyaXZl cnMvZWRhYy9hbWQ2NF9lZGFjKgo+ICAKPiArRURBQy1BU1QyNTAwCj4gK006CVN0ZWZhbiBTY2hh ZWNrZWxlciA8c3NjaGFlY2tAY2lzY28uY29tPgo+ICtTOglTdXBwb3J0ZWQKPiArRjoJZHJpdmVy cy9lZGFjL2FzcGVlZF9lZGFjLmMKPiArRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRp bmdzL2VkYWMvYXNwZWVkLXNkcmFtLWVkYWMudHh0Cj4gKwo+ICBFREFDLUNBTFhFREEKPiAgTToJ Um9iZXJ0IFJpY2h0ZXIgPHJyaWNAa2VybmVsLm9yZz4KPiAgTDoJbGludXgtZWRhY0B2Z2VyLmtl cm5lbC5vcmcKPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXNwZWVkLWc1LmR0c2kg Yi9hcmNoL2FybS9ib290L2R0cy9hc3BlZWQtZzUuZHRzaQo+IGluZGV4IGQxMDc0NTlmYzBmOC4u YjRlNDc5YWI1YTJkIDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FzcGVlZC1nNS5k dHNpCj4gKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXNwZWVkLWc1LmR0c2kKPiBAQCAtNDcsNiAr NDcsMTMgQEAKPiAgCQlyZWcgPSA8MHg4MDAwMDAwMCAwPjsKPiAgCX07Cj4gIAo+ICsJZWRhYzog c2RyYW1AMWU2ZTAwMDAgewo+ICsJCWNvbXBhdGlibGUgPSAiYXNwZWVkLGFzdDI1MDAtc2RyYW0t ZWRhYyI7Cj4gKwkJcmVnID0gPDB4MWU2ZTAwMDAgMHgxNzQ+Owo+ICsJCWludGVycnVwdHMgPSA8 MD47Cj4gKwkJc3RhdHVzID0gImRpc2FibGVkIjsKPiArCX07Cj4gKwo+ICAJYWhiIHsKPiAgCQlj b21wYXRpYmxlID0gInNpbXBsZS1idXMiOwo+ICAJCSNhZGRyZXNzLWNlbGxzID0gPDE+Owo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvS2NvbmZpZyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCj4g aW5kZXggNDFjOWNjZGQyMGQ2Li42NzgzNDQzMGIwYTEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9l ZGFjL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwo+IEBAIC00NzUsNCArNDc1 LDExIEBAIGNvbmZpZyBFREFDX1FDT00KPiAgCSAgRm9yIGRlYnVnZ2luZyBpc3N1ZXMgaGF2aW5n IHRvIGRvIHdpdGggc3RhYmlsaXR5IGFuZCBvdmVyYWxsIHN5c3RlbQo+ICAJICBoZWFsdGgsIHlv dSBzaG91bGQgcHJvYmFibHkgc2F5ICdZJyBoZXJlLgo+ICAKPiArY29uZmlnIEVEQUNfQVNQRUVE Cj4gKwl0cmlzdGF0ZSAiQXNwZWVkIEFTVCAyNTAwIFNvQyIKPiArCWRlcGVuZHMgb24gTUFDSF9B U1BFRURfRzUKPiArCWhlbHAKPiArCSAgU3VwcG9ydCBmb3IgZXJyb3IgZGV0ZWN0aW9uIGFuZCBj b3JyZWN0aW9uIG9uIHRoZQo+ICsJICBBc3BlZWQgQVNUIDI1MDAgU29DLgo+ICsKPiAgZW5kaWYg IyBFREFDCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZSBiL2RyaXZlcnMvZWRh Yy9NYWtlZmlsZQo+IGluZGV4IDcxNjA5NmQwOGVhMC4uZTFmMjNkNGZmODYwIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQo+ IEBAIC03OCwzICs3OCw0IEBAIG9iai0kKENPTkZJR19FREFDX1NZTk9QU1lTKQkJKz0gc3lub3Bz eXNfZWRhYy5vCj4gIG9iai0kKENPTkZJR19FREFDX1hHRU5FKQkJKz0geGdlbmVfZWRhYy5vCj4g IG9iai0kKENPTkZJR19FREFDX1RJKQkJCSs9IHRpX2VkYWMubwo+ICBvYmotJChDT05GSUdfRURB Q19RQ09NKQkJCSs9IHFjb21fZWRhYy5vCj4gK29iai0kKENPTkZJR19FREFDX0FTUEVFRCkJCSs9 IGFzcGVlZF9lZGFjLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FzcGVlZF9lZGFjLmMg Yi9kcml2ZXJzL2VkYWMvYXNwZWVkX2VkYWMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMDAwMDAwLi5kNmVkMTE5OTA5ZWIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJp dmVycy9lZGFjL2FzcGVlZF9lZGFjLmMKPiBAQCAtMCwwICsxLDQ1NyBAQAo+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMTggQ2lz Y28gU3lzdGVtcwo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4gKyAqIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgo+ICsgKiAyIG9m IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKWW91 IGhhdmUgdGhlIFNQRFggbGljZW5zZSBpZGVudGlmaWVyIC0gbm8gbmVlZCBmb3IgdGhhdCB0ZXh0 LgoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZWRhYy5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsj aW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFw Lmg+Cj4gKyNpbmNsdWRlIDxhc20vcGFnZS5oPgo+ICsjaW5jbHVkZSAiZWRhY19tb2R1bGUuaCIK PiArCj4gKwo+ICsjZGVmaW5lIERSVl9OQU1FICJhc3BlZWQtZWRhYyIKPiArCj4gKwo+ICsvKiBy ZWdpc3RlcnMgKi8KCm5vIG5lZWQgZm9yIHRoYXQgY29tbWVudAoKPiArI2RlZmluZSBBU1BFRURf TUNSX1BST1QgICAgICAgIDB4MDAgLyogcHJvdGVjdGlvbiBrZXkgcmVnaXN0ZXIgKi8KPiArI2Rl ZmluZSBBU1BFRURfTUNSX0NPTkYgICAgICAgIDB4MDQgLyogY29uZmlndXJhdGlvbiByZWdpc3Rl ciAqLwo+ICsjZGVmaW5lIEFTUEVFRF9NQ1JfSU5UUl9DVFJMICAgMHg1MCAvKiBpbnRlcnJ1cHQg Y29udHJvbC9zdGF0dXMgcmVnaXN0ZXIgKi8KPiArI2RlZmluZSBBU1BFRURfTUNSX0FERFJfVU5S RUMgIDB4NTggLyogYWRkcmVzcyBvZiBmaXJzdCB1bi1yZWNvdmVyYWJsZSBlcnJvciAqLwo+ICsj ZGVmaW5lIEFTUEVFRF9NQ1JfQUREUl9SRUMgICAgMHg1YyAvKiBhZGRyZXNzIG9mIGxhc3QgcmVj b3ZlcmFibGUgZXJyb3IgKi8KPiArI2RlZmluZSBBU1BFRURfTUNSX0xBU1QgICAgICAgIEFTUEVF RF9NQ1JfQUREUl9SRUMKPiArCj4gKwo+ICsvKiBiaXRzIGFuZCBtYXNrcyAqLwoKZGl0dG8KCj4g KyNkZWZpbmUgQVNQRUVEX01DUl9QUk9UX1BBU1NXRAkgICAgICAgICAgICAweGZjNjAwMzA5Cj4g KyNkZWZpbmUgQVNQRUVEX01DUl9DT05GX0RSQU1fVFlQRSAgICAgICAgICAgICAgIEJJVCg0KQo+ ICsjZGVmaW5lIEFTUEVFRF9NQ1JfQ09ORl9FQ0MgICAgICAgICAgICAgICAgICAgICBCSVQoNykK PiArI2RlZmluZSBBU1BFRURfTUNSX0lOVFJfQ1RSTF9DTEVBUiAgICAgICAgICAgICBCSVQoMzEp Cj4gKyNkZWZpbmUgQVNQRUVEX01DUl9JTlRSX0NUUkxfQ05UX1JFQyAgIEdFTk1BU0soMjMsIDE2 KQo+ICsjZGVmaW5lIEFTUEVFRF9NQ1JfSU5UUl9DVFJMX0NOVF9VTlJFQyBHRU5NQVNLKDE1LCAx MikKPiArI2RlZmluZSBBU1BFRURfTUNSX0lOVFJfQ1RSTF9FTkFCTEUgIChCSVQoMCkgfCBCSVQo MSkpCj4gKwo+ICsKPiArCj4gK3N0YXRpYyBpbnQgYXNwZWVkX2VkYWNfcmVnbWFwX3JlZ193cml0 ZSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLAo+ICsJCQkJCXVuc2lnbmVkIGludCB2 YWwpCgpBbGwgdGhlIHN0YXRpYyBmdW5jdGlvbnMgZG9uJ3QgbmVlZCB0aGUgImFzcGVlZF9lZGFj IiBwcmVmaXguCgo+ICt7Cj4gKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICop Y29udGV4dDsKPiArCj4gKwkvKiBlbmFibGUgd3JpdGUgdG8gTUNSIHJlZ2lzdGVyIHNldCAqLwo+ ICsJd3JpdGVsKEFTUEVFRF9NQ1JfUFJPVF9QQVNTV0QsIHJlZ3MgKyBBU1BFRURfTUNSX1BST1Qp Owo+ICsKPiArCXdyaXRlbCh2YWwsIHJlZ3MgKyByZWcpOwo+ICsKPiArCS8qIGRpc2FibGUgd3Jp dGUgdG8gTUNSIHJlZ2lzdGVyIHNldCAqLwo+ICsJd3JpdGVsKH5BU1BFRURfTUNSX1BST1RfUEFT U1dELCByZWdzICsgQVNQRUVEX01DUl9QUk9UKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArCj4gK3N0YXRpYyBpbnQgYXNwZWVkX2VkYWNfcmVnbWFwX3JlZ19yZWFkKHZvaWQgKmNvbnRl eHQsIHVuc2lnbmVkIGludCByZWcsCj4gKwkJCQkgICAgICAgdW5zaWduZWQgaW50ICp2YWwpCj4g K3sKPiArCXZvaWQgX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKiljb250ZXh0Owo+ICsK PiArCSp2YWwgPSByZWFkbChyZWdzICsgcmVnKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGJvb2wgYXNwZWVkX2VkYWNfcmVnbWFwX2lzX3ZvbGF0aWxlKHN0cnVjdCBkZXZp Y2UgKmRldiwKPiArCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVnKQo+ICt7Cj4gKwlzd2l0Y2ggKHJl Zykgewo+ICsJY2FzZSBBU1BFRURfTUNSX1BST1Q6Cj4gKwljYXNlIEFTUEVFRF9NQ1JfSU5UUl9D VFJMOgo+ICsJY2FzZSBBU1BFRURfTUNSX0FERFJfVU5SRUM6Cj4gKwljYXNlIEFTUEVFRF9NQ1Jf QUREUl9SRUM6Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiBmYWxz ZTsKPiArCX0KPiArfQo+ICsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZp ZyBhc3BlZWRfZWRhY19yZWdtYXBfY29uZmlnID0gewo+ICsJLnJlZ19iaXRzID0gMzIsCj4gKwku dmFsX2JpdHMgPSAzMiwKPiArCS5yZWdfc3RyaWRlID0gNCwKPiArCS5tYXhfcmVnaXN0ZXIgPSBB U1BFRURfTUNSX0xBU1QsCj4gKwkucmVnX3dyaXRlID0gYXNwZWVkX2VkYWNfcmVnbWFwX3JlZ193 cml0ZSwKPiArCS5yZWdfcmVhZCA9IGFzcGVlZF9lZGFjX3JlZ21hcF9yZWdfcmVhZCwKPiArCS52 b2xhdGlsZV9yZWcgPSBhc3BlZWRfZWRhY19yZWdtYXBfaXNfdm9sYXRpbGUsCj4gKwkuZmFzdF9p byA9IHRydWUsCj4gK307Cj4gKwo+ICsKPiArc3RhdGljIHN0cnVjdCByZWdtYXAgKmFzcGVlZF9l ZGFjX3JlZ21hcDsKClB1dCB0aGF0IGRlZmluaXRpb24gYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSwg dW5kZXIgdGhlICNkZWZpbmVzLgoKPiArCj4gKwo+ICtzdGF0aWMgdm9pZCBhc3BlZWRfZWRhY19j b3VudF9yZWMoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAo+ICsJCQkJICB1OCByZWNfY250LAo+ ICsJCQkJICB1MzIgcmVjX2FkZHIpCj4gK3sKPiArCXN0cnVjdCBjc3Jvd19pbmZvICpjc3JvdyA9 IG1jaS0+Y3Nyb3dzWzBdOwo+ICsJdTMyIHBhZ2UsIG9mZnNldCwgc3luZHJvbWU7Cj4gKwo+ICsJ aWYgKHJlY19jbnQgPiAwKSB7CgpTYXZlIGFuIGluZGVudGF0aW9uIGxldmVsOgoKCWlmICghcmVj X2NudCkKCQlyZXR1cm47Cgo+ICsJCS8qIHJlcG9ydCBmaXJzdCBmZXcgZXJyb3JzIChpZiB0aGVy ZSBhcmUpICovCj4gKwkJLyogbm90ZTogbm8gYWRkcmVzc2VzIGFyZSByZWNvcmRlZCAqLwo+ICsJ CWlmIChyZWNfY250ID4gMSkgewo+ICsJCQlwYWdlID0gMDsgLyogbm90IGF2YWlsYWJsZSAqLwo+ ICsJCQlvZmZzZXQgPSAwOyAgLyogbm90IGF2YWlsYWJsZSAqLwo+ICsJCQlzeW5kcm9tZSA9IDA7 IC8qIG5vdCBhdmFpbGFibGUgKi8KCkRvIGEgc2luZ2xlIGNvbW1lbnQsIG92ZXIgdGhlIGxpbmVz LCBub3Qgc2lkZXdheXMuIERpdHRvIGZvciB0aGUgcmVzdCBvZgp0aGUgZHJpdmVyIC0gc2lkZSBj b21tZW50cyBtYWtlIHRoZSBjb2RlIGhhcmRlciB0byByZWFkLgoKPiArCQkJZWRhY19tY19oYW5k bGVfZXJyb3IoSFdfRVZFTlRfRVJSX0NPUlJFQ1RFRCwgbWNpLAo+ICsJCQkJCSAgICAgcmVjX2Nu dC0xLCBwYWdlLCBvZmZzZXQsCj4gKwkJCQkJICAgICBzeW5kcm9tZSwgMCwgMCwgLTEsCj4gKwkJ CQkJICAgICAiYWRkcmVzcyhlcykgbm90IGF2YWlsYWJsZSIsICIiKTsKPiArCQl9Cj4gKwo+ICsJ CS8qIHJlcG9ydCBsYXN0IGVycm9yICovCj4gKwkJLyogbm90ZTogcmVjX2FkZHIgaXMgdGhlIGxh c3QgcmVjb3ZlcmFibGUgZXJyb3IgYWRkciAqLwo+ICsJCXBhZ2UgPSByZWNfYWRkciA+PiBQQUdF X1NISUZUOwo+ICsJCW9mZnNldCA9IHJlY19hZGRyICYgflBBR0VfTUFTSzsKPiArCQlzeW5kcm9t ZSA9IDA7IC8qIG5vdCBhdmFpbGFibGUgKi8KPiArCQllZGFjX21jX2hhbmRsZV9lcnJvcihIV19F VkVOVF9FUlJfQ09SUkVDVEVELCBtY2ksIDEsCj4gKwkJCQkgICAgIGNzcm93LT5maXJzdF9wYWdl ICsgcGFnZSwgb2Zmc2V0LCBzeW5kcm9tZSwKPiArCQkJCSAgICAgMCwgMCwgLTEsICIiLCAiIik7 Cj4gKwl9Cj4gK30KPiArCj4gKwo+ICtzdGF0aWMgdm9pZCBhc3BlZWRfZWRhY19jb3VudF91bl9y ZWMoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAo+ICsJCQkJICAgICB1OCB1bl9yZWNfY250LAo+ ICsJCQkJICAgICB1MzIgdW5fcmVjX2FkZHIpCj4gK3sKPiArCXN0cnVjdCBjc3Jvd19pbmZvICpj c3JvdyA9IG1jaS0+Y3Nyb3dzWzBdOwo+ICsJdTMyIHBhZ2UsIG9mZnNldCwgc3luZHJvbWU7Cj4g Kwo+ICsJaWYgKHVuX3JlY19jbnQgPiAwKSB7CgpBcyBhYm92ZTogc2F2ZSBhbiBpbmRlbnRhdGlv biBsZXZlbCBieSBmbGlwcGluZyB0aGUgY2hlY2suCgo+ICsJCS8qIHJlcG9ydCAxLiBlcnJvciAq Lwo+ICsJCS8qIG5vdGU6IHVuX3JlY19hZGRyIGlzIHRoZSBmaXJzdCB1bnJlY292ZXJhYmxlIGVy cm9yIGFkZHIgKi8KPiArCQlwYWdlID0gdW5fcmVjX2FkZHIgPj4gUEFHRV9TSElGVDsKPiArCQlv ZmZzZXQgPSB1bl9yZWNfYWRkciAmIH5QQUdFX01BU0s7Cj4gKwkJc3luZHJvbWUgPSAwOyAvKiBu b3QgYXZhaWxhYmxlICovCj4gKwkJZWRhY19tY19oYW5kbGVfZXJyb3IoSFdfRVZFTlRfRVJSX1VO Q09SUkVDVEVELCBtY2ksIDEsCj4gKwkJCQkgICAgIGNzcm93LT5maXJzdF9wYWdlICsgcGFnZSwg b2Zmc2V0LCBzeW5kcm9tZSwKPiArCQkJCSAgICAgMCwgMCwgLTEsICIiLCAiIik7Cj4gKwo+ICsJ CS8qIHJlcG9ydCBmdXJ0aGVyIGVycm9ycyAoaWYgdGhlcmUgYXJlKSAqLwo+ICsJCS8qIG5vdGU6 IG5vIGFkZHJlc3NlcyBhcmUgcmVjb3JkZWQgKi8KPiArCQlpZiAodW5fcmVjX2NudCA+IDEpIHsK PiArCQkJcGFnZSA9IDA7ICAvKiBub3QgYXZhaWxhYmxlICovCj4gKwkJCW9mZnNldCA9IDA7ICAv KiBub3QgYXZhaWxhYmxlICovCj4gKwkJCXN5bmRyb21lID0gMDsgLyogbm90IGF2YWlsYWJsZSAq Lwo+ICsJCQllZGFjX21jX2hhbmRsZV9lcnJvcihIV19FVkVOVF9FUlJfVU5DT1JSRUNURUQsIG1j aSwKPiArCQkJCQkgICAgIHVuX3JlY19jbnQtMSwgcGFnZSwgb2Zmc2V0LAo+ICsJCQkJCSAgICAg c3luZHJvbWUsIDAsIDAsIC0xLAo+ICsJCQkJCSAgICAgImFkZHJlc3MoZXMpIG5vdCBhdmFpbGFi bGUiLCAiIik7Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIHZvaWQgYXNwZWVk X2VkYWNfZW5hYmxlX2ludGVycnVwdHModm9pZCkKPiArewo+ICsKPiArCXJlZ21hcF91cGRhdGVf Yml0cyhhc3BlZWRfZWRhY19yZWdtYXAsIEFTUEVFRF9NQ1JfSU5UUl9DVFJMLAo+ICsJCQkgICBB U1BFRURfTUNSX0lOVFJfQ1RSTF9FTkFCTEUsCj4gKwkJCSAgIEFTUEVFRF9NQ1JfSU5UUl9DVFJM X0VOQUJMRSk7Cj4gK30KCkEgZnVuY3Rpb24gd2hpY2ggaGFzIGEgc2luZ2xlIHN0YXRlbWVudCBh bmQgaXMgY2FsbGVkIG9ubHkgb25jZSwgbG9va3MKYSBiaXQgdXNlbGVzcyB0byBtZS4gSnVzdCBw dXQgdGhlIHJlZ21hcF91cGRhdGVfYml0cygpIGNhbGwgYXQgdGhlIGNhbGwKc2l0ZSB3aXRoIGEg Y29tbWVudCAod2hpY2ggeW91IGFscmVhZHkgaGF2ZSkuCgo+ICsKPiArCj4gK3N0YXRpYyB2b2lk IGFzcGVlZF9lZGFjX2Rpc2FibGVfaW50ZXJydXB0cyh2b2lkKQo+ICt7Cj4gKwlyZWdtYXBfdXBk YXRlX2JpdHMoYXNwZWVkX2VkYWNfcmVnbWFwLCBBU1BFRURfTUNSX0lOVFJfQ1RSTCwKPiArCQkJ ICAgQVNQRUVEX01DUl9JTlRSX0NUUkxfRU5BQkxFLCAwKTsKPiArfQoKRGl0dG8uCgo+ICsKPiAr Cj4gK3N0YXRpYyB2b2lkIGFzcGVlZF9lZGFjX2NsZWFyX2ludGVycnVwdHModm9pZCkKPiArewo+ ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGFzcGVlZF9lZGFjX3JlZ21hcCwgQVNQRUVEX01DUl9JTlRS X0NUUkwsCj4gKwkJCSAgIEFTUEVFRF9NQ1JfSU5UUl9DVFJMX0NMRUFSLAo+ICsJCQkgICBBU1BF RURfTUNSX0lOVFJfQ1RSTF9DTEVBUik7Cj4gKwo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGFzcGVl ZF9lZGFjX3JlZ21hcCwgQVNQRUVEX01DUl9JTlRSX0NUUkwsCj4gKwkJCSAgIEFTUEVFRF9NQ1Jf SU5UUl9DVFJMX0NMRUFSLCAwKTsKPiArfQoKRGl0dG8uCgo+ICsKPiArCj4gK3N0YXRpYyBpcnFy ZXR1cm5fdCBhc3BlZWRfZWRhY19pc3IoaW50IGlycSwgdm9pZCAqYXJnKQo+ICt7Cj4gKwl1OCAg cmVjX2NudCwgdW5fcmVjX2NudDsKPiArCXUzMiByZWNfYWRkciwgdW5fcmVjX2FkZHI7Cj4gKwlz dHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kgPSBhcmc7Cj4gKwl1MzIgcmVnNTAsIHJlZzVjLCByZWc1 ODsKPiArCj4gKwlyZWdtYXBfcmVhZChhc3BlZWRfZWRhY19yZWdtYXAsIEFTUEVFRF9NQ1JfSU5U Ul9DVFJMLCAmcmVnNTApOwo+ICsJZGV2X2RiZyhtY2ktPnBkZXYsICJyZWNlaXZlZCBlZGFjIGlu dGVycnVwdCB3LyBtbWMgcmVnaXN0ZXIgNTA6IDB4JXhcbiIsCj4gKwkJcmVnNTApOwo+ICsKPiAr CS8qIGNvbGxlY3QgZGF0YSBhYm91dCByZWNvdmVyYWJsZSBhbmQgdW5yZWNvdmVyYWJsZSBlcnJv cnMgKi8KPiArCXJlY19jbnQgPSAocmVnNTAgJiBBU1BFRURfTUNSX0lOVFJfQ1RSTF9DTlRfUkVD KSA+PiAxNjsKPiArCXVuX3JlY19jbnQgPSAocmVnNTAgJiBBU1BFRURfTUNSX0lOVFJfQ1RSTF9D TlRfVU5SRUMpID4+IDEyOwo+ICsKPiArCWRldl9kYmcobWNpLT5wZGV2LCAiJWQgcmVjb3ZlcmFi bGUgaW50ZXJydXB0cyBhbmQgJWQgdW5yZWNvdmVyYWJsZSBpbnRlcnJ1cHRzXG4iLAo+ICsJCXJl Y19jbnQsIHVuX3JlY19jbnQpOwo+ICsKPiArCXJlZ21hcF9yZWFkKGFzcGVlZF9lZGFjX3JlZ21h cCwgQVNQRUVEX01DUl9BRERSX1VOUkVDLCAmcmVnNTgpOwo+ICsJdW5fcmVjX2FkZHIgPSByZWc1 OCA+PiA0Owo+ICsKPiArCXJlZ21hcF9yZWFkKGFzcGVlZF9lZGFjX3JlZ21hcCwgQVNQRUVEX01D Ul9BRERSX1JFQywgJnJlZzVjKTsKPiArCXJlY19hZGRyID0gcmVnNWMgPj4gNDsKPiArCj4gKwkv KiBjbGVhciBpbnRlcnJ1cHQgZmxhZ3MgYW5kIGVycm9yIGNvdW50ZXJzOiAqLwo+ICsJYXNwZWVk X2VkYWNfY2xlYXJfaW50ZXJydXB0cygpOwo+ICsKPiArCS8qIHByb2Nlc3MgcmVjb3ZlcmFibGUg YW5kIHVucmVjb3ZlcmFibGUgZXJyb3JzICovCj4gKwlpZiAocmVjX2NudCA+IDApCgpZb3UgY2hl Y2sgcmVjX2NudCBoZXJlICphbmQqIGluIHRoZSBmdW5jdGlvbj8gT25lIGNhbiBuZXZlciBiZSBz dXJlIGh1aD8gOi0pCgo+ICsJCWFzcGVlZF9lZGFjX2NvdW50X3JlYyhtY2ksIHJlY19jbnQsIHJl Y19hZGRyKTsKPiArCj4gKwlpZiAodW5fcmVjX2NudCA+IDApCj4gKwkJYXNwZWVkX2VkYWNfY291 bnRfdW5fcmVjKG1jaSwgdW5fcmVjX2NudCwgdW5fcmVjX2FkZHIpOwoKRGl0dG8uIEp1c3QgZG8g dGhlIGNoZWNrcyBpbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMuCgo+ICsKPiArCWlmICgocmVj X2NudCA9PSAwKSAmJiAodW5fcmVjX2NudCA9PSAwKSkKCkRvCglpZiAoIXJlY19jbnQgJiYgIXVu X3JlY19jbnQpCgo+ICsJCWRldl9kYmcobWNpLT5wZGV2LCAicmVjZWl2ZWQgZWRhYyBpbnRlcnJ1 cHQsIGJ1dCBkaWQgbm90IGZpbmQgYW55IGVjYyBjb3VudGVyc1xuIik7CgpzL2VjYy9FQ0MvZwoK PiArCj4gKwlyZWdtYXBfcmVhZChhc3BlZWRfZWRhY19yZWdtYXAsIEFTUEVFRF9NQ1JfSU5UUl9D VFJMLCAmcmVnNTApOwo+ICsJZGV2X2RiZyhtY2ktPnBkZXYsICJlZGFjIGludGVycnVwdCBoYW5k bGVkLiBtbWMgcmVnIDUwIGlzIG5vdzogMHgleFxuIiwKPiArCQlyZWc1MCk7Cj4gKwo+ICsJcmV0 dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIGludCBhc3BlZWRfZWRhY19j b25maWdfaXJxKHZvaWQgKmN0eCwKPiArCQkJCSAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKCkxldCB0aGF0IGxpbmUgc3RpY2sgb3V0LgoKPiArewo+ICsJaW50IGlycTsKPiArCWludCBy YzsKPiArCj4gKwkvKiByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlciAqLwo+ICsKPiArCWlycSA9 IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4gKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJnb3Qg aXJxICVkXG4iLCBpcnEpOwo+ICsJaWYgKCFpcnEpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ ICsJcmMgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgYXNwZWVkX2VkYWNfaXNy LAo+ICsJCQkgICAgICBJUlFGX1RSSUdHRVJfSElHSCwgRFJWX05BTUUsIGN0eCk7Cj4gKwlpZiAo cmMpIHsKPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBpcnEgJWRc biIsIGlycSk7Cj4gKwkJcmV0dXJuIHJjOwo+ICsJfQo+ICsKPiArCS8qIGVuYWJsZSBpbnRlcnJ1 cHRzICovCj4gKwlhc3BlZWRfZWRhY19lbmFibGVfaW50ZXJydXB0cygpOwo+ICsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIGludCBhc3BlZWRfZWRhY19pbml0X2Nzcm93cyhz dHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCj4gK3sKPiArCXN0cnVjdCBjc3Jvd19pbmZvICpjc3Jv dyA9IG1jaS0+Y3Nyb3dzWzBdOwo+ICsJc3RydWN0IGRpbW1faW5mbyAqZGltbTsKPiArCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbnA7Cj4gKwl1MzIgbnJfcGFnZXMsIGRyYW1fdHlwZTsKPiArCXN0cnVj dCByZXNvdXJjZSByOwo+ICsJdTMyIHJlZzA0Owo+ICsJaW50IHJjOwo+ICsKPiArCS8qIHJldHJp ZXZlIGluZm8gYWJvdXQgcGh5c2ljYWwgbWVtb3J5IGZyb20gZGV2aWNlIHRyZWUgKi8KPiArCW5w ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9tZW1vcnkiKTsKPiArCgpTdXBlcmZsdW91cyBuZXcg bGluZS4KCj4gKwlpZiAoIW5wKSB7Cj4gKwkJZGV2X2VycihtY2ktPnBkZXYsICJkdDogbWlzc2lu ZyAvbWVtb3J5IG5vZGVcbiIpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfTsKPiArCj4gKwly YyA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyKTsKPiArCj4gKwlvZl9ub2RlX3B1 dChucCk7Cj4gKwo+ICsJaWYgKHJjKSB7Cj4gKwkJZGV2X2VycihtY2ktPnBkZXYsICJkdDogZmFp bGVkIHJlcXVlc3RpbmcgcmVzb3VyY2UgZm9yIC9tZW1vcnkgbm9kZVxuIik7Cj4gKwkJcmV0dXJu IHJjOwo+ICsJfTsKPiArCj4gKwlkZXZfZGJnKG1jaS0+cGRldiwgImR0OiAvbWVtb3J5IG5vZGUg cmVzb3VyY2VzOiBmaXJzdCBwYWdlIHIuc3RhcnQ9MHgleCwgcmVzb3VyY2Vfc2l6ZT0weCV4LCBQ QUdFX1NISUZUIG1hY3JvPTB4JXhcbiIsCj4gKwkJci5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmciks IFBBR0VfU0hJRlQpOwo+ICsKPiArCWNzcm93LT5maXJzdF9wYWdlID0gci5zdGFydCA+PiBQQUdF X1NISUZUOwo+ICsJbnJfcGFnZXMgPSByZXNvdXJjZV9zaXplKCZyKSA+PiBQQUdFX1NISUZUOwo+ ICsJY3Nyb3ctPmxhc3RfcGFnZSA9IGNzcm93LT5maXJzdF9wYWdlICsgbnJfcGFnZXMgLSAxOwo+ ICsKPiArCXJlZ21hcF9yZWFkKGFzcGVlZF9lZGFjX3JlZ21hcCwgQVNQRUVEX01DUl9DT05GLCAm cmVnMDQpOwo+ICsJZHJhbV90eXBlID0gKHJlZzA0ICYgQVNQRUVEX01DUl9DT05GX0RSQU1fVFlQ RSkgPyBNRU1fRERSNCA6IE1FTV9ERFIzOwo+ICsKPiArCWRpbW0gPSBjc3Jvdy0+Y2hhbm5lbHNb MF0tPmRpbW07Cj4gKwlkaW1tLT5tdHlwZSA9IGRyYW1fdHlwZTsKPiArCWRpbW0tPmVkYWNfbW9k ZSA9IEVEQUNfU0VDREVEOwo+ICsJZGltbS0+bnJfcGFnZXMgPSBucl9wYWdlcyAvIGNzcm93LT5u cl9jaGFubmVsczsKPiArCj4gKwlkZXZfZGJnKG1jaS0+cGRldiwgImluaXRpYWxpemVkIGRpbW0g d2l0aCBmaXJzdF9wYWdlPTB4JWx4IGFuZCBucl9wYWdlcz0weCV4XG4iLAo+ICsJCWNzcm93LT5m aXJzdF9wYWdlLCBucl9wYWdlcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKwo+ICtz dGF0aWMgaW50IGFzcGVlZF9lZGFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKwl2b2lkIF9faW9t ZW0gKnJlZ3M7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiArCXN0cnVjdCBtZW1fY3RsX2lu Zm8gKm1jaTsKPiArCXN0cnVjdCBlZGFjX21jX2xheWVyIGxheWVyc1syXTsKPiArCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnA7Cj4gKwl1MzIgcmVnMDQ7Cj4gKwlpbnQgcmM7CgpQbGVhc2Ugc29ydCBm dW5jdGlvbiBsb2NhbCB2YXJpYWJsZXMgZGVjbGFyYXRpb24gaW4gYSByZXZlcnNlIGNocmlzdG1h cwp0cmVlIG9yZGVyOgoKCTx0eXBlIEE+IGxvbmdlc3RfdmFyaWFibGVfbmFtZTsKCTx0eXBlIEI+ IHNob3J0ZXJfdmFyX25hbWU7Cgk8dHlwZSBDPiBldmVuX3Nob3J0ZXI7Cgk8dHlwZSBEPiBpOwoK RG8gdGhhdCBpbiBhbGwgZnVuY3Rpb25zLgoKPiArCj4gKwkvKiBzZXR1cCByZWdtYXAgKi8KPiAr CW5wID0gZGV2LT5vZl9ub2RlOwo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShw ZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gKwlpZiAoIXJlcykKPiArCQlyZXR1cm4gLUVOT0VO VDsKPiArCj4gKwlyZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKPiArCWlm IChJU19FUlIocmVncykpCj4gKwkJcmV0dXJuIFBUUl9FUlIocmVncyk7Cj4gKwo+ICsJYXNwZWVk X2VkYWNfcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdChkZXYsIE5VTEwsIChfX2ZvcmNlIHZvaWQg KilyZWdzLAo+ICsJCQkJCSAgICAgICAmYXNwZWVkX2VkYWNfcmVnbWFwX2NvbmZpZyk7Cj4gKwlp ZiAoSVNfRVJSKGFzcGVlZF9lZGFjX3JlZ21hcCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoYXNwZWVk X2VkYWNfcmVnbWFwKTsKPiArCj4gKwkvKiBiYWlsIG91dCBpZiBFQ0MgbW9kZSBpcyBub3QgY29u ZmlndXJlZCAqLwo+ICsJcmVnbWFwX3JlYWQoYXNwZWVkX2VkYWNfcmVnbWFwLCBBU1BFRURfTUNS X0NPTkYsICZyZWcwNCk7Cj4gKwlpZiAoIShyZWcwNCAmIEFTUEVFRF9NQ1JfQ09ORl9FQ0MpKSB7 Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRUNDIG1vZGUgaXMgbm90IGNvbmZpZ3VyZWQgaW4g dS1ib290XG4iKTsKPiArCQlyZXR1cm4gLUVQRVJNOwo+ICsJfQo+ICsKPiArCWVkYWNfb3Bfc3Rh dGUgPSBFREFDX09QU1RBVEVfSU5UOwo+ICsKPiArCS8qIGFsbG9jYXRlICYgaW5pdCBFREFDIE1D IGRhdGEgc3RydWN0dXJlICovCj4gKwlsYXllcnNbMF0udHlwZSA9IEVEQUNfTUNfTEFZRVJfQ0hJ UF9TRUxFQ1Q7Cj4gKwlsYXllcnNbMF0uc2l6ZSA9IDE7Cj4gKwlsYXllcnNbMF0uaXNfdmlydF9j c3JvdyA9IHRydWU7Cj4gKwlsYXllcnNbMV0udHlwZSA9IEVEQUNfTUNfTEFZRVJfQ0hBTk5FTDsK PiArCWxheWVyc1sxXS5zaXplID0gMTsKPiArCWxheWVyc1sxXS5pc192aXJ0X2Nzcm93ID0gZmFs c2U7Cj4gKwo+ICsJbWNpID0gZWRhY19tY19hbGxvYygwLCBBUlJBWV9TSVpFKGxheWVycyksIGxh eWVycywgMCk7Cj4gKwlpZiAobWNpID09IE5VTEwpCgoJaWYgKCFtY2kpCgo+ICsJCXJldHVybiAt RU5PTUVNOwo+ICsKPiArCW1jaS0+cGRldiA9ICZwZGV2LT5kZXY7Cj4gKwltY2ktPm10eXBlX2Nh cCA9IE1FTV9GTEFHX0REUjMgfCBNRU1fRkxBR19ERFI0Owo+ICsJbWNpLT5lZGFjX2N0bF9jYXAg PSBFREFDX0ZMQUdfU0VDREVEOwo+ICsJbWNpLT5lZGFjX2NhcCA9IEVEQUNfRkxBR19TRUNERUQ7 Cj4gKwltY2ktPnNjcnViX2NhcCA9IFNDUlVCX0ZMQUdfSFdfU1JDOwo+ICsJbWNpLT5zY3J1Yl9t b2RlID0gU0NSVUJfSFdfU1JDOwo+ICsJbWNpLT5tb2RfbmFtZSA9IERSVl9OQU1FOwo+ICsJbWNp LT5jdGxfbmFtZSA9ICJNSUMiOwo+ICsJbWNpLT5kZXZfbmFtZSA9IGRldl9uYW1lKCZwZGV2LT5k ZXYpOwo+ICsKPiArCXJjID0gYXNwZWVkX2VkYWNfaW5pdF9jc3Jvd3MobWNpKTsKPiArCWlmIChy Yykgewo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0IGNzcm93c1xuIik7 Cj4gKwkJZ290byBwcm9iZV9leGl0MDI7Cj4gKwl9Cj4gKwo+ICsJcGxhdGZvcm1fc2V0X2RydmRh dGEocGRldiwgbWNpKTsKPiArCj4gKwkvKiByZWdpc3RlciB3aXRoIGVkYWMgY29yZSAqLwo+ICsJ cmMgPSBlZGFjX21jX2FkZF9tYyhtY2kpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJZGV2X2VycigmcGRl di0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHdpdGggRURBQyBjb3JlXG4iKTsKPiArCQlnb3Rv IHByb2JlX2V4aXQwMjsKPiArCX0KPiArCj4gKwkvKiByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxl ciBhbmQgZW5hYmxlIGludGVycnVwdHMgKi8KPiArCXJjID0gYXNwZWVkX2VkYWNfY29uZmlnX2ly cShtY2ksIHBkZXYpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFp bGVkIHNldHRpbmcgdXAgaXJxXG4iKTsKPiArCQlnb3RvIHByb2JlX2V4aXQwMTsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gMDsKPiArCj4gK3Byb2JlX2V4aXQwMToKPiArCWVkYWNfbWNfZGVsX21jKCZw ZGV2LT5kZXYpOwo+ICtwcm9iZV9leGl0MDI6Cj4gKwllZGFjX21jX2ZyZWUobWNpKTsKPiArCXJl dHVybiByYzsKPiArfQoKLi4uCg==