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: [v0,3/4] drivers: edac: Add cache erp driver for Last Level Cache Controller (LLCC) From: Venkata Narendra Kumar Gutta Message-Id: <1532540697-26630-4-git-send-email-vnkgutta@codeaurora.org> Date: Wed, 25 Jul 2018 10:44:56 -0700 To: evgreen@chromium.org, robh@kernel.org, bp@alien8.de, mchehab@kernel.org, linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org, andy.gross@linaro.org, david.brown@linaro.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, tsoni@codeaurora.org, ckadabi@codeaurora.org, rishabhb@codeaurora.org Cc: Venkata Narendra Kumar Gutta List-ID: QWRkIGNhY2hlIGVycm9yIHJlcG9ydGluZyBkcml2ZXIgZm9yIHNpbmdsZSBhbmQgZG91YmxlIGJp dCBlcnJvcnMgb24KTGFzdCBMZXZlbCBDYWNoZSBDb250cm9sbGVyIChMTENDKSBjYWNoZS4gVGhp cyBkcml2ZXIgdGFrZXMgY2FyZSBvZgpkdW1waW5nIHJlZ2lzdGVycyBhbmQgYWRkIGNvbmZpZyBv cHRpb25zIHRvIGVuYWJsZSBhbmQgZGlzYWJsZSBwYW5pYwp3aGVuIHRoZXNlIGVycm9ycyBoYXBw ZW4uCgpTaWduZWQtb2ZmLWJ5OiBDaGFubmFnb3VkIEthZGFiaSA8Y2thZGFiaUBjb2RlYXVyb3Jh Lm9yZz4KU2lnbmVkLW9mZi1ieTogVmVua2F0YSBOYXJlbmRyYSBLdW1hciBHdXR0YSA8dm5rZ3V0 dGFAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9lZGFjL0tjb25maWcgICAgICAgICAgfCAg MjEgKysKIGRyaXZlcnMvZWRhYy9NYWtlZmlsZSAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZWRh Yy9xY29tX2xsY2NfZWRhYy5jIHwgNTIwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1NDIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZWRhYy9xY29tX2xsY2NfZWRhYy5jCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCA1NzMwNGIyLi42 ODUxOGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2Vk YWMvS2NvbmZpZwpAQCAtNDYwLDQgKzQ2MCwyNSBAQCBjb25maWcgRURBQ19USQogCSAgU3VwcG9y dCBmb3IgZXJyb3IgZGV0ZWN0aW9uIGFuZCBjb3JyZWN0aW9uIG9uIHRoZQogICAgICAgICAgIFRJ IFNvQ3MuCiAKK2NvbmZpZyBFREFDX1FDT01fTExDQworICAgICAgICBkZXBlbmRzIG9uIFFDT01f TExDQworICAgICAgICB0cmlzdGF0ZSAiUUNPTSBFREFDIENvbnRyb2xsZXIgZm9yIExMQ0MgQ2Fj aGUiCisgICAgICAgIGhlbHAKKyAgICAgICAgICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24g YW5kIGNvcnJlY3Rpb24gb24gdGhlCisgICAgICAgICAgUUNPTSBMTENDIGNhY2hlLiBSZXBvcnQg ZXJyb3JzIGNhdWdodCBieSBMTENDIEVDQworICAgICAgICAgIG1lY2hhbmlzbS4KKworICAgICAg ICAgIEZvciBkZWJ1Z2dpbmcgaXNzdWVzIGhhdmluZyB0byBkbyB3aXRoIHN0YWJpbGl0eSBhbmQg b3ZlcmFsbCBzeXN0ZW0KKyAgICAgICAgICBoZWFsdGgsIHlvdSBzaG91bGQgcHJvYmFibHkgc2F5 ICdZJyBoZXJlLgorCitjb25maWcgRURBQ19RQ09NX0xMQ0NfUEFOSUNfT05fVUUKKyAgICAgICAg ZGVwZW5kcyBvbiBFREFDX1FDT01fTExDQworICAgICAgICBib29sICJQYW5pYyBvbiB1bmNvcnJl Y3RhYmxlIGVycm9ycyAtIHFjb20gbGxjYyIKKyAgICAgICAgaGVscAorICAgICAgICAgIEZvcmNp Ymx5IGNhdXNlIGEga2VybmVsIHBhbmljIGlmIGFuIHVuY29ycmVjdGFibGUgZXJyb3IgKFVFKSBp cworICAgICAgICAgIGRldGVjdGVkLiBUaGlzIGNhbiByZWR1Y2UgZGVidWdnaW5nIHRpbWVzIG9u IGhhcmR3YXJlIHdoaWNoIG1heSBiZQorICAgICAgICAgIG9wZXJhdGluZyBhdCB2b2x0YWdlcyBv ciBmcmVxdWVuY2llcyBvdXRzaWRlIG5vcm1hbCBzcGVjaWZpY2F0aW9uLgorCisgICAgICAgICAg Rm9yIHByb2R1Y3Rpb24gYnVpbGRzLCB5b3Ugc2hvdWxkIHByb2JhYmx5IHNheSAnTicgaGVyZS4K KwogZW5kaWYgIyBFREFDCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUgYi9kcml2 ZXJzL2VkYWMvTWFrZWZpbGUKaW5kZXggMDJiNDNhNy4uMjhhZmYyOCAxMDA2NDQKLS0tIGEvZHJp dmVycy9lZGFjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQpAQCAtNzcsMyAr NzcsNCBAQCBvYmotJChDT05GSUdfRURBQ19BTFRFUkEpCQkrPSBhbHRlcmFfZWRhYy5vCiBvYmot JChDT05GSUdfRURBQ19TWU5PUFNZUykJCSs9IHN5bm9wc3lzX2VkYWMubwogb2JqLSQoQ09ORklH X0VEQUNfWEdFTkUpCQkrPSB4Z2VuZV9lZGFjLm8KIG9iai0kKENPTkZJR19FREFDX1RJKQkJCSs9 IHRpX2VkYWMubworb2JqLSQoQ09ORklHX0VEQUNfUUNPTV9MTENDKQkJKz0gcWNvbV9sbGNjX2Vk YWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3Fjb21fbGxjY19lZGFjLmMgYi9kcml2ZXJz L2VkYWMvcWNvbV9sbGNjX2VkYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li43YTY3OGI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL3Fjb21fbGxjY19lZGFj LmMKQEAgLTAsMCArMSw1MjAgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVk ZSA8bGludXgvZWRhYy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1 ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVk ZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc29jL3Fjb20vbGxjYy1xY29t Lmg+CisjaW5jbHVkZSAiZWRhY19tYy5oIgorI2luY2x1ZGUgImVkYWNfZGV2aWNlLmgiCisKKyNp ZmRlZiBDT05GSUdfRURBQ19RQ09NX0xMQ0NfUEFOSUNfT05fVUUKKyNkZWZpbmUgTExDQ19FUlBf UEFOSUNfT05fVUUgMQorI2Vsc2UKKyNkZWZpbmUgTExDQ19FUlBfUEFOSUNfT05fVUUgMAorI2Vu ZGlmCisKKyNkZWZpbmUgRURBQ19MTENDCSJxY29tX2xsY2MiCisKKyNkZWZpbmUgVFJQX1NZTl9S RUdfQ05UCTYKKworI2RlZmluZSBEUlBfU1lOX1JFR19DTlQJOAorCisjZGVmaW5lIExMQ0NfQ09N TU9OX1NUQVRVUzAJCTB4MDAwMzAwMEMKKyNkZWZpbmUgTExDQ19MQl9DTlRfTUFTSwkJR0VOTUFT SygzMSwgMjgpCisjZGVmaW5lIExMQ0NfTEJfQ05UX1NISUZUCQkyOAorCisvKiBzaW5nbGUgJiBE b3VibGUgQml0IHN5bmRyb21lIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgVFJQX0VDQ19T Ql9FUlJfU1lOMAkJMHgwMDAyMzA0QworI2RlZmluZSBUUlBfRUNDX0RCX0VSUl9TWU4wCQkweDAw MDIwMzcwCisjZGVmaW5lIERSUF9FQ0NfU0JfRVJSX1NZTjAJCTB4MDAwNDIwNEMKKyNkZWZpbmUg RFJQX0VDQ19EQl9FUlJfU1lOMAkJMHgwMDA0MjA3MAorCisvKiBFcnJvciByZWdpc3RlciBvZmZz ZXRzICovCisjZGVmaW5lIFRSUF9FQ0NfRVJST1JfU1RBVFVTMQkJMHgwMDAyMDM0OAorI2RlZmlu ZSBUUlBfRUNDX0VSUk9SX1NUQVRVUzAJCTB4MDAwMjAzNDQKKyNkZWZpbmUgRFJQX0VDQ19FUlJP Ul9TVEFUVVMxCQkweDAwMDQyMDQ4CisjZGVmaW5lIERSUF9FQ0NfRVJST1JfU1RBVFVTMAkJMHgw MDA0MjA0NAorCisvKiBUUlAsIERSUCBpbnRlcnJ1cHQgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2Rl ZmluZSBEUlBfSU5URVJSVVBUX1NUQVRVUwkJMHgwMDA0MTAwMAorI2RlZmluZSBUUlBfSU5URVJS VVBUXzBfU1RBVFVTCQkweDAwMDIwNDgwCisjZGVmaW5lIERSUF9JTlRFUlJVUFRfQ0xFQVIJCTB4 MDAwNDEwMDgKKyNkZWZpbmUgRFJQX0VDQ19FUlJPUl9DTlRSX0NMRUFSCTB4MDAwNDAwMDQKKyNk ZWZpbmUgVFJQX0lOVEVSUlVQVF8wX0NMRUFSCQkweDAwMDIwNDg0CisjZGVmaW5lIFRSUF9FQ0Nf RVJST1JfQ05UUl9DTEVBUgkweDAwMDIwNDQwCisKKy8qIE1hc2sgYW5kIHNoaWZ0IG1hY3JvcyAq LworI2RlZmluZSBFQ0NfREJfRVJSX0NPVU5UX01BU0sJR0VOTUFTSyg0LCAwKQorI2RlZmluZSBF Q0NfREJfRVJSX1dBWVNfTUFTSwlHRU5NQVNLKDMxLCAxNikKKyNkZWZpbmUgRUNDX0RCX0VSUl9X QVlTX1NISUZUCUJJVCg0KQorCisjZGVmaW5lIEVDQ19TQl9FUlJfQ09VTlRfTUFTSwlHRU5NQVNL KDIzLCAxNikKKyNkZWZpbmUgRUNDX1NCX0VSUl9DT1VOVF9TSElGVAlCSVQoNCkKKyNkZWZpbmUg RUNDX1NCX0VSUl9XQVlTX01BU0sJR0VOTUFTSygxNSwgMCkKKworI2RlZmluZSBTQl9FQ0NfRVJS T1IJCUJJVCgwKQorI2RlZmluZSBEQl9FQ0NfRVJST1IJCUJJVCgxKQorCisjZGVmaW5lIERSUF9U UlBfSU5UX0NMRUFSCUdFTk1BU0soMSwgMCkKKyNkZWZpbmUgRFJQX1RSUF9DTlRfQ0xFQVIJR0VO TUFTSygxLCAwKQorCisvKiBDb25maWcgcmVnaXN0ZXJzIG9mZnNldHMqLworI2RlZmluZSBEUlBf RUNDX0VSUk9SX0NGRyAgICAgICAweDAwMDQwMDAwCisKKy8qIFRSUCwgRFJQIGludGVycnVwdCBy ZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIENNTl9JTlRFUlJVUFRfMF9FTkFCTEUgICAgICAg ICAgMHgwMDAzMDAxQworI2RlZmluZSBDTU5fSU5URVJSVVBUXzJfRU5BQkxFICAgICAgICAgIDB4 MDAwMzAwM0MKKyNkZWZpbmUgVFJQX0lOVEVSUlVQVF8wX0VOQUJMRSAgICAgICAgICAweDAwMDIw NDg4CisjZGVmaW5lIERSUF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgMHgwMDA0MTAwQwor CisjZGVmaW5lIFNCX0VSUk9SX1RIUkVTSE9MRCAgICAgIDB4MQorI2RlZmluZSBTQl9FUlJPUl9U SFJFU0hPTERfU0hJRlQgICAgICAgIDI0CisjZGVmaW5lIFNCX0RCX1RSUF9JTlRFUlJVUFRfRU5B QkxFICAgICAgMHgzCisjZGVmaW5lIFRSUDBfSU5URVJSVVBUX0VOQUJMRSAgIDB4MQorI2RlZmlu ZSBEUlAwX0lOVEVSUlVQVF9FTkFCTEUgICBCSVQoNikKKyNkZWZpbmUgU0JfREJfRFJQX0lOVEVS UlVQVF9FTkFCTEUgICAgICAweDMKKworCitlbnVtIHsKKwlMTENDX0RSQU1fQ0UgPSAwLAorCUxM Q0NfRFJBTV9VRSwKKwlMTENDX1RSQU1fQ0UsCisJTExDQ19UUkFNX1VFLAorfTsKKworc3RydWN0 IGVycm9yc19lZGFjIHsKKwljb25zdCBjaGFyICptc2c7CisJdm9pZCAoKmZ1bmMpKHN0cnVjdCBl ZGFjX2RldmljZV9jdGxfaW5mbyAqZWRldl9jdGwsCisJCQkJaW50IGluc3RfbnIsIGludCBibG9j a19uciwgY29uc3QgY2hhciAqbXNnKTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXJyb3Jz X2VkYWMgZXJyb3JzW10gPSB7CisJeyJMTENDIERhdGEgUkFNIGNvcnJlY3RhYmxlIEVycm9yIiwg ZWRhY19kZXZpY2VfaGFuZGxlX2NlfSwKKwl7IkxMQ0MgRGF0YSBSQU0gdW5jb3JyZWN0YWJsZSBF cnJvciIsIGVkYWNfZGV2aWNlX2hhbmRsZV91ZX0sCisJeyJMTENDIFRhZyBSQU0gY29ycmVjdGFi bGUgRXJyb3IiLCBlZGFjX2RldmljZV9oYW5kbGVfY2V9LAorCXsiTExDQyBUYWcgUkFNIHVuY29y cmVjdGFibGUgRXJyb3IiLCBlZGFjX2RldmljZV9oYW5kbGVfdWV9LAorfTsKKworc3RhdGljIGlu dCBxY29tX2xsY2NfY29yZV9zZXR1cChzdHJ1Y3QgcmVnbWFwICpsbGNjX2JjYXN0X3JlZ21hcCkK K3sKKwl1MzIgc2JfZXJyX3RocmVzaG9sZDsKKwlpbnQgcmV0OworCisJLyogRW5hYmxlIFRSUCBp biBpbnN0YW5jZSAyIG9mIGNvbW1vbiBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCisJcmV0 ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGxsY2NfYmNhc3RfcmVnbWFwLCBDTU5fSU5URVJSVVBUXzJf RU5BQkxFLAorCQkJCVRSUDBfSU5URVJSVVBUX0VOQUJMRSwKKwkJCQlUUlAwX0lOVEVSUlVQVF9F TkFCTEUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBFbmFibGUgRUNDIGludGVy cnVwdHMgb24gVGFnIFJhbSAqLworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhsbGNjX2JjYXN0 X3JlZ21hcCwgVFJQX0lOVEVSUlVQVF8wX0VOQUJMRSwKKwkJCQlTQl9EQl9UUlBfSU5URVJSVVBU X0VOQUJMRSwKKwkJCQlTQl9EQl9UUlBfSU5URVJSVVBUX0VOQUJMRSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCS8qIEVuYWJsZSBTQiBlcnJvciBmb3IgRGF0YSBSQU0gKi8KKwlzYl9l cnJfdGhyZXNob2xkID0gKFNCX0VSUk9SX1RIUkVTSE9MRCA8PCBTQl9FUlJPUl9USFJFU0hPTERf U0hJRlQpOworCXJldCA9IHJlZ21hcF93cml0ZShsbGNjX2JjYXN0X3JlZ21hcCwgRFJQX0VDQ19F UlJPUl9DRkcsCisJCQkJc2JfZXJyX3RocmVzaG9sZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCS8qIEVuYWJsZSBEUlAgaW4gaW5zdGFuY2UgMiBvZiBjb21tb24gaW50ZXJydXB0IGVu YWJsZSByZWdpc3RlciAqLworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhsbGNjX2JjYXN0X3Jl Z21hcCwgQ01OX0lOVEVSUlVQVF8yX0VOQUJMRSwKKwkJCQlEUlAwX0lOVEVSUlVQVF9FTkFCTEUs IERSUDBfSU5URVJSVVBUX0VOQUJMRSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8q IEVuYWJsZSBFQ0MgaW50ZXJydXB0cyBvbiBEYXRhIFJhbSAqLworCXJldCA9IHJlZ21hcF93cml0 ZShsbGNjX2JjYXN0X3JlZ21hcCwgRFJQX0lOVEVSUlVQVF9FTkFCTEUsCisJCQkJU0JfREJfRFJQ X0lOVEVSUlVQVF9FTkFCTEUpOworCXJldHVybiByZXQ7Cit9CisKKy8qIENsZWFyIHRoZSBlcnJv ciBpbnRlcnJ1cHQgYW5kIGNvdW50ZXIgcmVnaXN0ZXJzICovCitzdGF0aWMgaW50IHFjb21fbGxj Y19jbGVhcl9lcnJvcnMoaW50IGVycl90eXBlLCBzdHJ1Y3QgbGxjY19kcnZfZGF0YSAqZHJ2KQor eworCWludCByZXQgPSAwOworCisJc3dpdGNoIChlcnJfdHlwZSkgeworCWNhc2UgTExDQ19EUkFN X0NFOgorCWNhc2UgTExDQ19EUkFNX1VFOgorCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCisJ CXJldCA9IHJlZ21hcF93cml0ZShkcnYtPmJjYXN0X3JlZ21hcCwgRFJQX0lOVEVSUlVQVF9DTEVB UiwKKwkJCQkJRFJQX1RSUF9JTlRfQ0xFQVIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsK KworCQkvKiBDbGVhciB0aGUgY291bnRlcnMgKi8KKwkJcmV0ID0gcmVnbWFwX3dyaXRlKGRydi0+ YmNhc3RfcmVnbWFwLCBEUlBfRUNDX0VSUk9SX0NOVFJfQ0xFQVIsCisJCQkJCURSUF9UUlBfQ05U X0NMRUFSKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWJyZWFrOworCWNhc2UgTExD Q19UUkFNX0NFOgorCWNhc2UgTExDQ19UUkFNX1VFOgorCQlyZXQgPSByZWdtYXBfd3JpdGUoZHJ2 LT5iY2FzdF9yZWdtYXAsIFRSUF9JTlRFUlJVUFRfMF9DTEVBUiwKKwkJCQkJRFJQX1RSUF9JTlRf Q0xFQVIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSByZWdtYXBfd3Jp dGUoZHJ2LT5iY2FzdF9yZWdtYXAsIFRSUF9FQ0NfRVJST1JfQ05UUl9DTEVBUiwKKwkJCQkJRFJQ X1RSUF9DTlRfQ0xFQVIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisJ fQorCXJldHVybiByZXQ7Cit9CisKKy8qIER1bXAgc3luZHJvbWUgcmVnaXN0ZXJzIGZvciB0YWcg UmFtIERvdWJsZSBiaXQgZXJyb3JzICovCitzdGF0aWMgaW50IGR1bXBfdHJwX2RiX3N5bl9yZWco c3RydWN0IGxsY2NfZHJ2X2RhdGEgKmRydiwgdTMyIGJhbmspCit7CisJaW50IGksIHJldDsKKwlp bnQgZGJfZXJyX2NudDsKKwlpbnQgZGJfZXJyX3dheXM7CisJdTMyIHN5bmRfcmVnOworCXUzMiBz eW5kX3ZhbDsKKworCWZvciAoaSA9IDA7IGkgPCBUUlBfU1lOX1JFR19DTlQ7IGkrKykgeworCQlz eW5kX3JlZyA9IFRSUF9FQ0NfREJfRVJSX1NZTjAgKyAoaSAqIDQpOworCQlyZXQgPSByZWdtYXBf cmVhZChkcnYtPnJlZ21hcCwgZHJ2LT5vZmZzZXRzW2JhbmtdICsgc3luZF9yZWcsCisJCQkJJnN5 bmRfdmFsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWVkYWNfcHJpbnRrKEtFUk5f Q1JJVCwgRURBQ19MTENDLCAiVFJQX0VDQ19TWU4lZDogMHglOHhcbiIsCisJCQlpLCBzeW5kX3Zh bCk7CisJfQorCisJcmV0ID0gcmVnbWFwX3JlYWQoZHJ2LT5yZWdtYXAsCisJCQkJZHJ2LT5vZmZz ZXRzW2JhbmtdICsgVFJQX0VDQ19FUlJPUl9TVEFUVVMxLAorCQkJCSZkYl9lcnJfY250KTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWRiX2Vycl9jbnQgPSAoZGJfZXJyX2NudCAmIEVDQ19E Ql9FUlJfQ09VTlRfTUFTSyk7CisJZWRhY19wcmludGsoS0VSTl9DUklULCBFREFDX0xMQ0MsICJE b3VibGUtQml0IGVycm9yIGNvdW50OiAweCU0eFxuIiwKKwkJZGJfZXJyX2NudCk7CisKKwlyZXQg PSByZWdtYXBfcmVhZChkcnYtPnJlZ21hcCwKKwkJZHJ2LT5vZmZzZXRzW2JhbmtdICsgVFJQX0VD Q19FUlJPUl9TVEFUVVMwLCAmZGJfZXJyX3dheXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisJZGJfZXJyX3dheXMgPSAoZGJfZXJyX3dheXMgJiBFQ0NfREJfRVJSX1dBWVNfTUFTSyk7CisJ ZGJfZXJyX3dheXMgPj49IEVDQ19EQl9FUlJfV0FZU19TSElGVDsKKworCWVkYWNfcHJpbnRrKEtF Uk5fQ1JJVCwgRURBQ19MTENDLCAiRG91YmxlLUJpdCBlcnJvciB3YXlzOiAweCU0eFxuIiwKKwkJ ZGJfZXJyX3dheXMpOworCisJcmV0dXJuIHJldDsKK30KKworLyogRHVtcCBzeW5kcm9tZSByZWdp c3RlciBmb3IgdGFnIFJhbSBTaW5nbGUgQml0IEVycm9ycyAqLworc3RhdGljIGludCBkdW1wX3Ry cF9zYl9zeW5fcmVnKHN0cnVjdCBsbGNjX2Rydl9kYXRhICpkcnYsIHUzMiBiYW5rKQoreworCWlu dCBpLCByZXQ7CisJaW50IHNiX2Vycl9jbnQ7CisJaW50IHNiX2Vycl93YXlzOworCXUzMiBzeW5k X3JlZzsKKwl1MzIgc3luZF92YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFJQX1NZTl9SRUdfQ05U OyBpKyspIHsKKwkJc3luZF9yZWcgPSBUUlBfRUNDX1NCX0VSUl9TWU4wICsgKGkgKiA0KTsKKwkJ cmV0ID0gcmVnbWFwX3JlYWQoZHJ2LT5yZWdtYXAsIGRydi0+b2Zmc2V0c1tiYW5rXSArIHN5bmRf cmVnLAorCQkJCQkmc3luZF92YWwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJZWRh Y19wcmludGsoS0VSTl9DUklULCBFREFDX0xMQ0MsICJUUlBfRUNDX1NZTiVkOiAweCU4eFxuIiwK KwkJCQlpLCBzeW5kX3ZhbCk7CisJfQorCisJcmV0ID0gcmVnbWFwX3JlYWQoZHJ2LT5yZWdtYXAs CisJCQkJZHJ2LT5vZmZzZXRzW2JhbmtdICsgVFJQX0VDQ19FUlJPUl9TVEFUVVMxLAorCQkJCSZz Yl9lcnJfY250KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXNiX2Vycl9jbnQgPSAoc2Jf ZXJyX2NudCAmIEVDQ19TQl9FUlJfQ09VTlRfTUFTSyk7CisJc2JfZXJyX2NudCA+Pj0gRUNDX1NC X0VSUl9DT1VOVF9TSElGVDsKKwllZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfTExDQywgIlNp bmdsZS1CaXQgZXJyb3IgY291bnQ6IDB4JTR4XG4iLAorCQlzYl9lcnJfY250KTsKKworCXJldCA9 IHJlZ21hcF9yZWFkKGRydi0+cmVnbWFwLAorCQkJCWRydi0+b2Zmc2V0c1tiYW5rXSArIFRSUF9F Q0NfRVJST1JfU1RBVFVTMCwKKwkJCQkmc2JfZXJyX3dheXMpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlzYl9lcnJfd2F5cyA9IHNiX2Vycl93YXlzICYgRUNDX1NCX0VSUl9XQVlTX01B U0s7CisKKwllZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfTExDQywgIlNpbmdsZS1CaXQgZXJy b3Igd2F5czogMHglNHhcbiIsCisJCQlzYl9lcnJfd2F5cyk7CisKKwlyZXR1cm4gcmV0OworfQor CisvKiBEdW1wIHN5bmRyb21lIHJlZ2lzdGVycyBmb3IgRGF0YSBSYW0gRG91YmxlIGJpdCBlcnJv cnMgKi8KK3N0YXRpYyBpbnQgZHVtcF9kcnBfZGJfc3luX3JlZyhzdHJ1Y3QgbGxjY19kcnZfZGF0 YSAqZHJ2LCB1MzIgYmFuaykKK3sKKwlpbnQgaSwgcmV0OworCWludCBkYl9lcnJfY250OworCWlu dCBkYl9lcnJfd2F5czsKKwl1MzIgc3luZF9yZWc7CisJdTMyIHN5bmRfdmFsOworCisJZm9yIChp ID0gMDsgaSA8IERSUF9TWU5fUkVHX0NOVDsgaSsrKSB7CisJCXN5bmRfcmVnID0gRFJQX0VDQ19E Ql9FUlJfU1lOMCArIChpICogNCk7CisJCXJldCA9IHJlZ21hcF9yZWFkKGRydi0+cmVnbWFwLCBk cnYtPm9mZnNldHNbYmFua10gKyBzeW5kX3JlZywKKwkJCQkJJnN5bmRfdmFsKTsKKwkJaWYgKHJl dCkKKwkJCXJldHVybiByZXQ7CisJCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19MTENDLCAi RFJQX0VDQ19TWU4lZDogMHglOHhcbiIsCisJCQkJaSwgc3luZF92YWwpOworCX0KKworCXJldCA9 IHJlZ21hcF9yZWFkKGRydi0+cmVnbWFwLAorCQkJCWRydi0+b2Zmc2V0c1tiYW5rXSArIERSUF9F Q0NfRVJST1JfU1RBVFVTMSwKKwkJCQkmZGJfZXJyX2NudCk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKwlkYl9lcnJfY250ID0gKGRiX2Vycl9jbnQgJiBFQ0NfREJfRVJSX0NPVU5UX01BU0sp OworCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19MTENDLCAiRG91YmxlLUJpdCBlcnJvciBj b3VudDogMHglNHhcbiIsCisJCWRiX2Vycl9jbnQpOworCisJcmV0ID0gcmVnbWFwX3JlYWQoZHJ2 LT5yZWdtYXAsCisJCQkJZHJ2LT5vZmZzZXRzW2JhbmtdICsgRFJQX0VDQ19FUlJPUl9TVEFUVVMw LAorCQkJCSZkYl9lcnJfd2F5cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlkYl9lcnJf d2F5cyAmPSBFQ0NfREJfRVJSX1dBWVNfTUFTSzsKKwlkYl9lcnJfd2F5cyA+Pj0gRUNDX0RCX0VS Ul9XQVlTX1NISUZUOworCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19MTENDLCAiRG91Ymxl LUJpdCBlcnJvciB3YXlzOiAweCU0eFxuIiwKKwkJZGJfZXJyX3dheXMpOworCisJcmV0dXJuIHJl dDsKK30KKworLyogRHVtcCBTeW5kcm9tZSByZWdpc3RlcnMgZm9yIERhdGEgUmFtIFNpbmdsZSBi aXQgZXJyb3JzKi8KK3N0YXRpYyBpbnQgZHVtcF9kcnBfc2Jfc3luX3JlZyhzdHJ1Y3QgbGxjY19k cnZfZGF0YSAqZHJ2LCB1MzIgYmFuaykKK3sKKwlpbnQgaSwgcmV0OworCWludCBzYl9lcnJfY250 OworCWludCBzYl9lcnJfd2F5czsKKwl1MzIgc3luZF9yZWc7CisJdTMyIHN5bmRfdmFsOworCisJ Zm9yIChpID0gMDsgaSA8IERSUF9TWU5fUkVHX0NOVDsgaSsrKSB7CisJCXN5bmRfcmVnID0gRFJQ X0VDQ19TQl9FUlJfU1lOMCArIChpICogNCk7CisJCXJldCA9IHJlZ21hcF9yZWFkKGRydi0+cmVn bWFwLCBkcnYtPm9mZnNldHNbYmFua10gKyBzeW5kX3JlZywKKwkJCQkJJnN5bmRfdmFsKTsKKwkJ aWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19M TENDLCAiRFJQX0VDQ19TWU4lZDogMHglOHhcbiIsCisJCQkJaSwgc3luZF92YWwpOworCX0KKwor CXJldCA9IHJlZ21hcF9yZWFkKGRydi0+cmVnbWFwLAorCQkJCWRydi0+b2Zmc2V0c1tiYW5rXSAr IERSUF9FQ0NfRVJST1JfU1RBVFVTMSwKKwkJCQkmc2JfZXJyX2NudCk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKwlzYl9lcnJfY250ICY9IEVDQ19TQl9FUlJfQ09VTlRfTUFTSzsKKwlzYl9l cnJfY250ID4+PSBFQ0NfU0JfRVJSX0NPVU5UX1NISUZUOworCWVkYWNfcHJpbnRrKEtFUk5fQ1JJ VCwgRURBQ19MTENDLCAiU2luZ2xlLUJpdCBlcnJvciBjb3VudDogMHglNHhcbiIsCisJCXNiX2Vy cl9jbnQpOworCisJcmV0ID0gcmVnbWFwX3JlYWQoZHJ2LT5yZWdtYXAsCisJCQkJZHJ2LT5vZmZz ZXRzW2JhbmtdICsgRFJQX0VDQ19FUlJPUl9TVEFUVVMwLAorCQkJCSZzYl9lcnJfd2F5cyk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlzYl9lcnJfd2F5cyA9IHNiX2Vycl93YXlzICYgRUND X1NCX0VSUl9XQVlTX01BU0s7CisKKwllZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfTExDQywg IlNpbmdsZS1CaXQgZXJyb3Igd2F5czogMHglNHhcbiIsCisJCXNiX2Vycl93YXlzKTsKKworCXJl dHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBkdW1wX3N5bl9yZWcoc3RydWN0IGVkYWNfZGV2 aWNlX2N0bF9pbmZvICplZGV2X2N0bCwKKwkJCSBpbnQgZXJyX3R5cGUsIHUzMiBiYW5rKQorewor CWludCByZXQgPSAwOworCXN0cnVjdCBsbGNjX2Rydl9kYXRhICpkcnYgPSBlZGV2X2N0bC0+cHZ0 X2luZm87CisKKwlzd2l0Y2ggKGVycl90eXBlKSB7CisJY2FzZSBMTENDX0RSQU1fQ0U6CisJCXJl dCA9IGR1bXBfZHJwX3NiX3N5bl9yZWcoZHJ2LCBiYW5rKTsKKwkJYnJlYWs7CisJY2FzZSBMTEND X0RSQU1fVUU6CisJCXJldCA9IGR1bXBfZHJwX2RiX3N5bl9yZWcoZHJ2LCBiYW5rKTsKKwkJYnJl YWs7CisJY2FzZSBMTENDX1RSQU1fQ0U6CisJCXJldCA9IGR1bXBfdHJwX3NiX3N5bl9yZWcoZHJ2 LCBiYW5rKTsKKwkJYnJlYWs7CisJY2FzZSBMTENDX1RSQU1fVUU6CisJCXJldCA9IGR1bXBfdHJw X2RiX3N5bl9yZWcoZHJ2LCBiYW5rKTsKKwkJYnJlYWs7CisJfQorCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlyZXQgPSBxY29tX2xsY2NfY2xlYXJfZXJyb3JzKGVycl90eXBlLCBkcnYpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwllcnJvcnNbZXJyX3R5cGVdLmZ1bmMoZWRldl9j dGwsIDAsIGJhbmssIGVycm9yc1tlcnJfdHlwZV0ubXNnKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpcnFyZXR1cm5fdCBxY29tX2xsY2NfY2hlY2tfY2FjaGVfZXJyb3JzCisJCShzdHJ1 Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkZXZfY3RsKQoreworCWludCByZXQ7CisJdTMyIGRy cF9lcnJvcjsKKwl1MzIgdHJwX2Vycm9yOworCXN0cnVjdCBsbGNjX2Rydl9kYXRhICpkcnYgPSBl ZGV2X2N0bC0+cHZ0X2luZm87CisJdTMyIGk7CisJaXJxcmV0dXJuX3QgaXJxX3JjID0gSVJRX05P TkU7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHJ2LT5udW1fYmFua3M7IGkrKykgeworCQkvKiBMb29r IGZvciBEYXRhIFJBTSBlcnJvcnMgKi8KKwkJcmV0ID0gcmVnbWFwX3JlYWQoZHJ2LT5yZWdtYXAs CisJCQkJZHJ2LT5vZmZzZXRzW2ldICsgRFJQX0lOVEVSUlVQVF9TVEFUVVMsCisJCQkJJmRycF9l cnJvcik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gaXJxX3JjOworCisJCWlmIChkcnBfZXJyb3Ig JiBTQl9FQ0NfRVJST1IpIHsKKwkJCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19MTENDLAor CQkJCSJTaW5nbGUgQml0IEVycm9yIGRldGVjdGVkIGluIERhdGEgUmFtXG4iKTsKKwkJCWR1bXBf c3luX3JlZyhlZGV2X2N0bCwgTExDQ19EUkFNX0NFLCBpKTsKKwkJCWlycV9yYyA9IElSUV9IQU5E TEVEOworCQl9IGVsc2UgaWYgKGRycF9lcnJvciAmIERCX0VDQ19FUlJPUikgeworCQkJZWRhY19w cmludGsoS0VSTl9DUklULCBFREFDX0xMQ0MsCisJCQkJIkRvdWJsZSBCaXQgRXJyb3IgZGV0ZWN0 ZWQgaW4gRGF0YSBSYW1cbiIpOworCQkJZHVtcF9zeW5fcmVnKGVkZXZfY3RsLCBMTENDX0RSQU1f VUUsIGkpOworCQkJaXJxX3JjID0gSVJRX0hBTkRMRUQ7CisJCX0KKworCQkvKiBMb29rIGZvciBU YWcgUkFNIGVycm9ycyAqLworCQlyZXQgPSByZWdtYXBfcmVhZChkcnYtPnJlZ21hcCwKKwkJCQlk cnYtPm9mZnNldHNbaV0gKyBUUlBfSU5URVJSVVBUXzBfU1RBVFVTLAorCQkJCSZ0cnBfZXJyb3Ip OworCQlpZiAocmV0KQorCQkJcmV0dXJuIGlycV9yYzsKKwkJaWYgKHRycF9lcnJvciAmIFNCX0VD Q19FUlJPUikgeworCQkJZWRhY19wcmludGsoS0VSTl9DUklULCBFREFDX0xMQ0MsCisJCQkJIlNp bmdsZSBCaXQgRXJyb3IgZGV0ZWN0ZWQgaW4gVGFnIFJhbVxuIik7CisJCQlkdW1wX3N5bl9yZWco ZWRldl9jdGwsIExMQ0NfVFJBTV9DRSwgaSk7CisJCQlpcnFfcmMgPSBJUlFfSEFORExFRDsKKwkJ fSBlbHNlIGlmICh0cnBfZXJyb3IgJiBEQl9FQ0NfRVJST1IpIHsKKwkJCWVkYWNfcHJpbnRrKEtF Uk5fQ1JJVCwgRURBQ19MTENDLAorCQkJCSJEb3VibGUgQml0IEVycm9yIGRldGVjdGVkIGluIFRh ZyBSYW1cbiIpOworCQkJZHVtcF9zeW5fcmVnKGVkZXZfY3RsLCBMTENDX1RSQU1fVUUsIGkpOwor CQkJaXJxX3JjID0gSVJRX0hBTkRMRUQ7CisJCX0KKwl9CisKKwlyZXR1cm4gaXJxX3JjOworfQor CitzdGF0aWMgaXJxcmV0dXJuX3QgbGxjY19lY2NfaXJxX2hhbmRsZXIKKwkJCShpbnQgaXJxLCB2 b2lkICplZGV2X2N0bCkKK3sKKwlyZXR1cm4gcWNvbV9sbGNjX2NoZWNrX2NhY2hlX2Vycm9ycyhl ZGV2X2N0bCk7Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9sbGNjX2VycF9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByYzsKKwl1MzIgZWNjX2lycTsKKwlzdHJ1Y3Qg ZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkZXZfY3RsOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZw ZGV2LT5kZXY7CisJc3RydWN0IGxsY2NfZHJ2X2RhdGEgKmxsY2NfZHJpdl9kYXRhID0gcGRldi0+ ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlyYyA9IHFjb21fbGxjY19jb3JlX3NldHVwKGxsY2NfZHJp dl9kYXRhLT5iY2FzdF9yZWdtYXApOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyogQWxs b2NhdGUgZWRhYyBjb250cm9sIGluZm8gKi8KKwllZGV2X2N0bCA9IGVkYWNfZGV2aWNlX2FsbG9j X2N0bF9pbmZvKDAsICJxY29tLWxsY2MiLCAxLAorCQkJCSJiYW5rIiwgbGxjY19kcml2X2RhdGEt Pm51bV9iYW5rcywgMSwgTlVMTCwgMCwKKwkJCQllZGFjX2RldmljZV9hbGxvY19pbmRleCgpKTsK KworCWlmICghZWRldl9jdGwpCisJCXJldHVybiAtRU5PTUVNOworCisJZWRldl9jdGwtPmRldiA9 IGRldjsKKwllZGV2X2N0bC0+bW9kX25hbWUgPSBkZXZfbmFtZShkZXYpOworCWVkZXZfY3RsLT5k ZXZfbmFtZSA9IGRldl9uYW1lKGRldik7CisJZWRldl9jdGwtPmN0bF9uYW1lID0gImxsY2MiOwor CWVkZXZfY3RsLT5wYW5pY19vbl91ZSA9IExMQ0NfRVJQX1BBTklDX09OX1VFOworCisJZWRldl9j dGwtPnB2dF9pbmZvID0gKHN0cnVjdCBsbGNjX2Rydl9kYXRhICopIGxsY2NfZHJpdl9kYXRhOwor CisJcmMgPSBlZGFjX2RldmljZV9hZGRfZGV2aWNlKGVkZXZfY3RsKTsKKwlpZiAocmMpCisJCWdv dG8gb3V0X21lbTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGVkZXZfY3RsKTsKKwor CS8qIFJlcXVlc3QgZm9yIGVjYyBpcnEgKi8KKwllY2NfaXJxID0gbGxjY19kcml2X2RhdGEtPmVj Y19pcnE7CisJaWYgKCFlY2NfaXJxKSB7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZGV2 OworCX0KKwlyYyA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBlY2NfaXJxLCBsbGNjX2VjY19pcnFf aGFuZGxlciwKKwkJCQlJUlFGX1RSSUdHRVJfSElHSCwgImxsY2NfZWNjIiwgZWRldl9jdGwpOwor CWlmIChyYykKKwkJZ290byBvdXRfZGV2OworCisJcmV0dXJuIHJjOworCitvdXRfZGV2OgorCWVk YWNfZGV2aWNlX2RlbF9kZXZpY2UoZWRldl9jdGwtPmRldik7CitvdXRfbWVtOgorCWVkYWNfZGV2 aWNlX2ZyZWVfY3RsX2luZm8oZWRldl9jdGwpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMg aW50IHFjb21fbGxjY19lcnBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7 CisJc3RydWN0IGVkYWNfZGV2aWNlX2N0bF9pbmZvICplZGV2X2N0bCA9IGRldl9nZXRfZHJ2ZGF0 YSgmcGRldi0+ZGV2KTsKKworCWVkYWNfZGV2aWNlX2RlbF9kZXZpY2UoZWRldl9jdGwtPmRldik7 CisJZWRhY19kZXZpY2VfZnJlZV9jdGxfaW5mbyhlZGV2X2N0bCk7CisJcGxhdGZvcm1fc2V0X2Ry dmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgcWNvbV9sbGNjX2VycF9tYXRjaF90YWJsZVtdID0geworCXsgLmNvbXBh dGlibGUgPSAicWNvbSxsbGNjLWVycCIgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciBxY29tX2xsY2NfZXJwX2RyaXZlciA9IHsKKwkucHJvYmUgPSBxY29tX2xs Y2NfZXJwX3Byb2JlLAorCS5yZW1vdmUgPSBxY29tX2xsY2NfZXJwX3JlbW92ZSwKKwkuZHJpdmVy ID0geworCQkubmFtZSA9ICJxY29tX2xsY2NfZXJwIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gcWNv bV9sbGNjX2VycF9tYXRjaF90YWJsZSwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIo cWNvbV9sbGNjX2VycF9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlFDT00gTExDQyBF cnJvciBSZXBvcnRpbmciKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK