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: [2/2] EDAC, altera: Initialize peripheral FIFOs in probe() From: thor.thayer@linux.intel.com Message-Id: <1553635771-32693-2-git-send-email-thor.thayer@linux.intel.com> Date: Tue, 26 Mar 2019 16:29:31 -0500 To: bp@alien8.de, mchehab@kernel.org, james.morse@arm.com Cc: linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org, Thor Thayer List-ID: RnJvbTogVGhvciBUaGF5ZXIgPHRob3IudGhheWVyQGxpbnV4LmludGVsLmNvbT4KClRoZSBGSUZP IG1lbW9yeSBhbmQgRUNDIGluaXRpYWxpemF0aW9uIGRvZXNuJ3QgbmVlZCB0byBiZQpkb25lIGFz IGEgc2VwYXJhdGUgb3BlcmF0aW9uIGVhcmx5IGluIHRoZSBzdGFydHVwLgoKSW1wcm92ZSB0aGUg QXJyaWExMCBhbmQgU3RyYXRpeDEwIHBlcmlwaGVyYWwgRklGTyBpbml0CmJ5IGluaXRpYWxpemlu ZyBtZW1vcnkgYW5kIGVuYWJsaW5nIEVDQyBhcyBwYXJ0IG9mIHRoZQpkZXZpY2UgZHJpdmVyIGlu aXRpYWxpemF0aW9uLgoKU2lnbmVkLW9mZi1ieTogVGhvciBUaGF5ZXIgPHRob3IudGhheWVyQGxp bnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2VkYWMvYWx0ZXJhX2VkYWMuYyB8IDE2MiArKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2Vk LCA5MSBpbnNlcnRpb25zKCspLCA3MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2VkYWMvYWx0ZXJhX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbHRlcmFfZWRhYy5jCmluZGV4IGFj YjMwMDZkZjYzMS4uNzYxMTk5MTc1Yzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYWx0ZXJh X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYWx0ZXJhX2VkYWMuYwpAQCAtMTM2MSw4ICsxMzYx LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZWRhY19kZXZpY2VfcHJ2X2RhdGEgYTEwX2wyZWNj X2RhdGEgPSB7CiAKICNpZmRlZiBDT05GSUdfRURBQ19BTFRFUkFfRVRIRVJORVQKIAorc3RhdGlj IGludCBfX2luaXQgc29jZnBnYV9pbml0X2V0aGVybmV0X2VjYyhzdHJ1Y3QgYWx0cl9lZGFjX2Rl dmljZV9kZXYgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYWx0cl9pbml0X2ExMF9lY2Nf ZGV2aWNlX3R5cGUoImFsdHIsc29jZnBnYS1ldGgtbWFjLWVjYyIpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlyZXR1cm4gYWx0cl9jaGVja19lY2NfZGVwcyhkZXYpOworfQorCiBzdGF0 aWMgY29uc3Qgc3RydWN0IGVkYWNfZGV2aWNlX3Bydl9kYXRhIGExMF9lbmV0ZWNjX2RhdGEgPSB7 Ci0JLnNldHVwID0gYWx0cl9jaGVja19lY2NfZGVwcywKKwkuc2V0dXAgPSBzb2NmcGdhX2luaXRf ZXRoZXJuZXRfZWNjLAogCS5jZV9jbGVhcl9tYXNrID0gQUxUUl9BMTBfRUNDX1NFUlJQRU5BLAog CS51ZV9jbGVhcl9tYXNrID0gQUxUUl9BMTBfRUNDX0RFUlJQRU5BLAogCS5lY2NfZW5hYmxlX21h c2sgPSBBTFRSX0ExMF9DT01NT05fRUNDX0VOX0NUTCwKQEAgLTEzNzQsMjEgKzEzODUsMjUgQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX2RldmljZV9wcnZfZGF0YSBhMTBfZW5ldGVjY19kYXRh ID0gewogCS5pbmplY3RfZm9wcyA9ICZhbHRyX2VkYWNfYTEwX2RldmljZV9pbmplY3QyX2ZvcHMs CiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzb2NmcGdhX2luaXRfZXRoZXJuZXRfZWNjKHZvaWQp Ci17Ci0JcmV0dXJuIGFsdHJfaW5pdF9hMTBfZWNjX2RldmljZV90eXBlKCJhbHRyLHNvY2ZwZ2Et ZXRoLW1hYy1lY2MiKTsKLX0KLQotZWFybHlfaW5pdGNhbGwoc29jZnBnYV9pbml0X2V0aGVybmV0 X2VjYyk7Ci0KICNlbmRpZgkvKiBDT05GSUdfRURBQ19BTFRFUkFfRVRIRVJORVQgKi8KIAogLyoq KioqKioqKioqKioqKioqKioqKiogTkFORCBEZXZpY2UgRnVuY3Rpb25zICoqKioqKioqKioqKioq KioqKioqKiovCiAKICNpZmRlZiBDT05GSUdfRURBQ19BTFRFUkFfTkFORAogCitzdGF0aWMgaW50 IF9faW5pdCBzb2NmcGdhX2luaXRfbmFuZF9lY2Moc3RydWN0IGFsdHJfZWRhY19kZXZpY2VfZGV2 ICpkZXZpY2UpCit7CisJaW50IHJldDsKKworCXJldCA9IGFsdHJfaW5pdF9hMTBfZWNjX2Rldmlj ZV90eXBlKCJhbHRyLHNvY2ZwZ2EtbmFuZC1lY2MiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmV0dXJuIGFsdHJfY2hlY2tfZWNjX2RlcHMoZGV2aWNlKTsKK30KKwogc3RhdGljIGNv bnN0IHN0cnVjdCBlZGFjX2RldmljZV9wcnZfZGF0YSBhMTBfbmFuZGVjY19kYXRhID0gewotCS5z ZXR1cCA9IGFsdHJfY2hlY2tfZWNjX2RlcHMsCisJLnNldHVwID0gc29jZnBnYV9pbml0X25hbmRf ZWNjLAogCS5jZV9jbGVhcl9tYXNrID0gQUxUUl9BMTBfRUNDX1NFUlJQRU5BLAogCS51ZV9jbGVh cl9tYXNrID0gQUxUUl9BMTBfRUNDX0RFUlJQRU5BLAogCS5lY2NfZW5hYmxlX21hc2sgPSBBTFRS X0ExMF9DT01NT05fRUNDX0VOX0NUTCwKQEAgLTE0MDAsMjEgKzE0MTUsMjUgQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBlZGFjX2RldmljZV9wcnZfZGF0YSBhMTBfbmFuZGVjY19kYXRhID0gewogCS5p bmplY3RfZm9wcyA9ICZhbHRyX2VkYWNfYTEwX2RldmljZV9pbmplY3RfZm9wcywKIH07CiAKLXN0 YXRpYyBpbnQgX19pbml0IHNvY2ZwZ2FfaW5pdF9uYW5kX2VjYyh2b2lkKQotewotCXJldHVybiBh bHRyX2luaXRfYTEwX2VjY19kZXZpY2VfdHlwZSgiYWx0cixzb2NmcGdhLW5hbmQtZWNjIik7Ci19 Ci0KLWVhcmx5X2luaXRjYWxsKHNvY2ZwZ2FfaW5pdF9uYW5kX2VjYyk7Ci0KICNlbmRpZgkvKiBD T05GSUdfRURBQ19BTFRFUkFfTkFORCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKiBETUEg RGV2aWNlIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWZkZWYgQ09ORklH X0VEQUNfQUxURVJBX0RNQQogCitzdGF0aWMgaW50IF9faW5pdCBzb2NmcGdhX2luaXRfZG1hX2Vj YyhzdHJ1Y3QgYWx0cl9lZGFjX2RldmljZV9kZXYgKmRldmljZSkKK3sKKwlpbnQgcmV0OworCisJ cmV0ID0gYWx0cl9pbml0X2ExMF9lY2NfZGV2aWNlX3R5cGUoImFsdHIsc29jZnBnYS1kbWEtZWNj Iik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBhbHRyX2NoZWNrX2VjY19k ZXBzKGRldmljZSk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZWRhY19kZXZpY2VfcHJ2X2Rh dGEgYTEwX2RtYWVjY19kYXRhID0gewotCS5zZXR1cCA9IGFsdHJfY2hlY2tfZWNjX2RlcHMsCisJ LnNldHVwID0gc29jZnBnYV9pbml0X2RtYV9lY2MsCiAJLmNlX2NsZWFyX21hc2sgPSBBTFRSX0Ex MF9FQ0NfU0VSUlBFTkEsCiAJLnVlX2NsZWFyX21hc2sgPSBBTFRSX0ExMF9FQ0NfREVSUlBFTkEs CiAJLmVjY19lbmFibGVfbWFzayA9IEFMVFJfQTEwX0NPTU1PTl9FQ0NfRU5fQ1RMLApAQCAtMTQy NiwyMSArMTQ0NSwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfZGV2aWNlX3Bydl9kYXRh IGExMF9kbWFlY2NfZGF0YSA9IHsKIAkuaW5qZWN0X2ZvcHMgPSAmYWx0cl9lZGFjX2ExMF9kZXZp Y2VfaW5qZWN0X2ZvcHMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzb2NmcGdhX2luaXRfZG1h X2VjYyh2b2lkKQotewotCXJldHVybiBhbHRyX2luaXRfYTEwX2VjY19kZXZpY2VfdHlwZSgiYWx0 cixzb2NmcGdhLWRtYS1lY2MiKTsKLX0KLQotZWFybHlfaW5pdGNhbGwoc29jZnBnYV9pbml0X2Rt YV9lY2MpOwotCiAjZW5kaWYJLyogQ09ORklHX0VEQUNfQUxURVJBX0RNQSAqLwogCiAvKioqKioq KioqKioqKioqKioqKioqKiBVU0IgRGV2aWNlIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioq KioqLwogCiAjaWZkZWYgQ09ORklHX0VEQUNfQUxURVJBX1VTQgogCitzdGF0aWMgaW50IF9faW5p dCBzb2NmcGdhX2luaXRfdXNiX2VjYyhzdHJ1Y3QgYWx0cl9lZGFjX2RldmljZV9kZXYgKmRldmlj ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYWx0cl9pbml0X2ExMF9lY2NfZGV2aWNlX3R5cGUo ImFsdHIsc29jZnBnYS11c2ItZWNjIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJl dHVybiBhbHRyX2NoZWNrX2VjY19kZXBzKGRldmljZSk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZWRhY19kZXZpY2VfcHJ2X2RhdGEgYTEwX3VzYmVjY19kYXRhID0gewotCS5zZXR1cCA9IGFs dHJfY2hlY2tfZWNjX2RlcHMsCisJLnNldHVwID0gc29jZnBnYV9pbml0X3VzYl9lY2MsCiAJLmNl X2NsZWFyX21hc2sgPSBBTFRSX0ExMF9FQ0NfU0VSUlBFTkEsCiAJLnVlX2NsZWFyX21hc2sgPSBB TFRSX0ExMF9FQ0NfREVSUlBFTkEsCiAJLmVjY19lbmFibGVfbWFzayA9IEFMVFJfQTEwX0NPTU1P Tl9FQ0NfRU5fQ1RMLApAQCAtMTQ1MiwyMSArMTQ3NSwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGVkYWNfZGV2aWNlX3Bydl9kYXRhIGExMF91c2JlY2NfZGF0YSA9IHsKIAkuaW5qZWN0X2ZvcHMg PSAmYWx0cl9lZGFjX2ExMF9kZXZpY2VfaW5qZWN0Ml9mb3BzLAogfTsKIAotc3RhdGljIGludCBf X2luaXQgc29jZnBnYV9pbml0X3VzYl9lY2Modm9pZCkKLXsKLQlyZXR1cm4gYWx0cl9pbml0X2Ex MF9lY2NfZGV2aWNlX3R5cGUoImFsdHIsc29jZnBnYS11c2ItZWNjIik7Ci19Ci0KLWVhcmx5X2lu aXRjYWxsKHNvY2ZwZ2FfaW5pdF91c2JfZWNjKTsKLQogI2VuZGlmCS8qIENPTkZJR19FREFDX0FM VEVSQV9VU0IgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKiogUVNQSSBEZXZpY2UgRnVuY3Rp b25zICoqKioqKioqKioqKioqKioqKioqKiovCiAKICNpZmRlZiBDT05GSUdfRURBQ19BTFRFUkFf UVNQSQogCitzdGF0aWMgaW50IF9faW5pdCBzb2NmcGdhX2luaXRfcXNwaV9lY2Moc3RydWN0IGFs dHJfZWRhY19kZXZpY2VfZGV2ICpkZXZpY2UpCit7CisJaW50IHJldDsKKworCXJldCA9IGFsdHJf aW5pdF9hMTBfZWNjX2RldmljZV90eXBlKCJhbHRyLHNvY2ZwZ2EtcXNwaS1lY2MiKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGFsdHJfY2hlY2tfZWNjX2RlcHMoZGV2aWNl KTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX2RldmljZV9wcnZfZGF0YSBhMTBfcXNw aWVjY19kYXRhID0gewotCS5zZXR1cCA9IGFsdHJfY2hlY2tfZWNjX2RlcHMsCisJLnNldHVwID0g c29jZnBnYV9pbml0X3FzcGlfZWNjLAogCS5jZV9jbGVhcl9tYXNrID0gQUxUUl9BMTBfRUNDX1NF UlJQRU5BLAogCS51ZV9jbGVhcl9tYXNrID0gQUxUUl9BMTBfRUNDX0RFUlJQRU5BLAogCS5lY2Nf ZW5hYmxlX21hc2sgPSBBTFRSX0ExMF9DT01NT05fRUNDX0VOX0NUTCwKQEAgLTE0NzgsMTMgKzE1 MDUsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfZGV2aWNlX3Bydl9kYXRhIGExMF9xc3Bp ZWNjX2RhdGEgPSB7CiAJLmluamVjdF9mb3BzID0gJmFsdHJfZWRhY19hMTBfZGV2aWNlX2luamVj dF9mb3BzLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgc29jZnBnYV9pbml0X3FzcGlfZWNjKHZv aWQpCi17Ci0JcmV0dXJuIGFsdHJfaW5pdF9hMTBfZWNjX2RldmljZV90eXBlKCJhbHRyLHNvY2Zw Z2EtcXNwaS1lY2MiKTsKLX0KLQotZWFybHlfaW5pdGNhbGwoc29jZnBnYV9pbml0X3FzcGlfZWNj KTsKLQogI2VuZGlmCS8qIENPTkZJR19FREFDX0FMVEVSQV9RU1BJICovCiAKIC8qKioqKioqKioq KioqKioqKioqKiogU0RNTUMgRGV2aWNlIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioq LwpAQCAtMTU5Myw2ICsxNjEzLDM1IEBAIHN0YXRpYyBpbnQgYWx0cl9wb3J0Yl9zZXR1cChzdHJ1 Y3QgYWx0cl9lZGFjX2RldmljZV9kZXYgKmRldmljZSkKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRp YyBpbnQgX19pbml0IHNvY2ZwZ2FfaW5pdF9zZG1tY19lY2Moc3RydWN0IGFsdHJfZWRhY19kZXZp Y2VfZGV2ICpkZXZpY2UpCit7CisJaW50IHJjID0gLUVOT0RFVjsKKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKmNoaWxkOworCisJY2hpbGQgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxM LCAiYWx0cixzb2NmcGdhLXNkbW1jLWVjYyIpOworCWlmICghY2hpbGQpCisJCXJldHVybiAtRU5P REVWOworCisJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKGNoaWxkKSkKKwkJZ290byBleGl0 OworCisJaWYgKHZhbGlkYXRlX3BhcmVudF9hdmFpbGFibGUoY2hpbGQpKQorCQlnb3RvIGV4aXQ7 CisKKwkvKiBJbml0IHBvcnRCICovCisJcmMgPSBhbHRyX2luaXRfYTEwX2VjY19ibG9jayhjaGls ZCwgQUxUUl9BMTBfU0RNTUNfSVJRX01BU0ssCisJCQkJICAgICBhMTBfc2RtbWNlY2NiX2RhdGEu ZWNjX2VuYWJsZV9tYXNrLCAxKTsKKwlpZiAocmMpCisJCWdvdG8gZXhpdDsKKworCS8qIFNldHVw IHBvcnRCICovCisJcmV0dXJuIGFsdHJfcG9ydGJfc2V0dXAoZGV2aWNlKTsKKworZXhpdDoKKwlv Zl9ub2RlX3B1dChjaGlsZCk7CisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3Qg YWx0cl9lZGFjX2ExMF9lY2NfaXJxX3BvcnRiKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlz dHJ1Y3QgYWx0cl9lZGFjX2RldmljZV9kZXYgKmFkID0gZGV2X2lkOwpAQCAtMTYxNyw3ICsxNjY2 LDcgQEAgc3RhdGljIGlycXJldHVybl90IGFsdHJfZWRhY19hMTBfZWNjX2lycV9wb3J0YihpbnQg aXJxLCB2b2lkICpkZXZfaWQpCiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZWRhY19kZXZpY2Vf cHJ2X2RhdGEgYTEwX3NkbW1jZWNjYV9kYXRhID0gewotCS5zZXR1cCA9IGFsdHJfcG9ydGJfc2V0 dXAsCisJLnNldHVwID0gc29jZnBnYV9pbml0X3NkbW1jX2VjYywKIAkuY2VfY2xlYXJfbWFzayA9 IEFMVFJfQTEwX0VDQ19TRVJSUEVOQSwKIAkudWVfY2xlYXJfbWFzayA9IEFMVFJfQTEwX0VDQ19E RVJSUEVOQSwKIAkuZWNjX2VuYWJsZV9tYXNrID0gQUxUUl9BMTBfQ09NTU9OX0VDQ19FTl9DVEws CkBAIC0xNjMwLDcgKzE2NzksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfZGV2aWNlX3By dl9kYXRhIGExMF9zZG1tY2VjY2FfZGF0YSA9IHsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZWRhY19kZXZpY2VfcHJ2X2RhdGEgYTEwX3NkbW1jZWNjYl9kYXRhID0gewotCS5zZXR1cCA9IGFs dHJfcG9ydGJfc2V0dXAsCisJLnNldHVwID0gc29jZnBnYV9pbml0X3NkbW1jX2VjYywKIAkuY2Vf Y2xlYXJfbWFzayA9IEFMVFJfQTEwX0VDQ19TRVJSUEVOQiwKIAkudWVfY2xlYXJfbWFzayA9IEFM VFJfQTEwX0VDQ19ERVJSUEVOQiwKIAkuZWNjX2VuYWJsZV9tYXNrID0gQUxUUl9BMTBfQ09NTU9O X0VDQ19FTl9DVEwsCkBAIC0xNjQyLDM1ICsxNjkxLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBl ZGFjX2RldmljZV9wcnZfZGF0YSBhMTBfc2RtbWNlY2NiX2RhdGEgPSB7CiAJLmluamVjdF9mb3Bz ID0gJmFsdHJfZWRhY19hMTBfZGV2aWNlX2luamVjdF9mb3BzLAogfTsKIAotc3RhdGljIGludCBf X2luaXQgc29jZnBnYV9pbml0X3NkbW1jX2VjYyh2b2lkKQotewotCWludCByYyA9IC1FTk9ERVY7 Ci0Jc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKLQotCWlmICghc29jZnBnYV9pc19hMTAoKSAm JiAhc29jZnBnYV9pc19zMTAoKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQljaGlsZCA9IG9mX2Zp bmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJhbHRyLHNvY2ZwZ2Etc2RtbWMtZWNjIik7 Ci0JaWYgKCFjaGlsZCkgewotCQllZGFjX3ByaW50ayhLRVJOX1dBUk5JTkcsIEVEQUNfREVWSUNF LCAiU0RNTUMgbm9kZSBub3QgZm91bmRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlp ZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUoY2hpbGQpKQotCQlnb3RvIGV4aXQ7Ci0KLQlpZiAo dmFsaWRhdGVfcGFyZW50X2F2YWlsYWJsZShjaGlsZCkpCi0JCWdvdG8gZXhpdDsKLQotCXJjID0g YWx0cl9pbml0X2ExMF9lY2NfYmxvY2soY2hpbGQsIEFMVFJfQTEwX1NETU1DX0lSUV9NQVNLLAot CQkJCSAgICAgYTEwX3NkbW1jZWNjYV9kYXRhLmVjY19lbmFibGVfbWFzaywgMSk7Ci1leGl0Ogot CW9mX25vZGVfcHV0KGNoaWxkKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWVhcmx5X2luaXRjYWxsKHNv Y2ZwZ2FfaW5pdF9zZG1tY19lY2MpOwotCiAjZW5kaWYJLyogQ09ORklHX0VEQUNfQUxURVJBX1NE TU1DICovCiAKIC8qKioqKioqKioqKioqKioqKioqKiogQXJyaWExMCBFREFDIERldmljZSBGdW5j dGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKi8K