From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 9/9 v2] ASoC: AMD: Add machine driver for cz rt5650 Date: Fri, 28 Jul 2017 15:31:34 -0400 Message-ID: <1501270294-31153-10-git-send-email-alexander.deucher@amd.com> References: <1501270294-31153-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1501270294-31153-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw@public.gmane.org, airlied-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, Vijendar.Mukunda-5C7GfCeVMHo@public.gmane.org, rajeevkumar.linux-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, perex-/Fr2/VpizcU@public.gmane.org Cc: tiwai-l3A5Bk7waGM@public.gmane.org, Alex Deucher , lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, Akshu Agrawal List-Id: alsa-devel@alsa-project.org RnJvbTogQWtzaHUgQWdyYXdhbCA8YWtzaHUuYWdyYXdhbEBhbWQuY29tPgoKVGhlIGRyaXZlciBp cyB1c2VkIGZvciBBTUQgYm9hcmQgdXNpbmcgcnQ1NjUwIGNvZGVjLgoKU2lnbmVkLW9mZi1ieTog QWtzaHUgQWdyYXdhbCA8YWtzaHUuYWdyYXdhbEBhbWQuY29tPgpTaWduZWQtb2ZmLWJ5OiBBbGV4 IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+Ci0tLQoKVjI6IENoYW5nZSBBQ1BJ IElEIHRvIEFNREkxMDAyCgpzb3VuZC9zb2MvYW1kL0tjb25maWcgICAgICB8ICAgNyArKwogc291 bmQvc29jL2FtZC9NYWtlZmlsZSAgICAgfCAgIDIgKwogc291bmQvc29jL2FtZC9hY3AtcnQ1NjQ1 LmMgfCAyMTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAz IGZpbGVzIGNoYW5nZWQsIDIxOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc291 bmQvc29jL2FtZC9hY3AtcnQ1NjQ1LmMKCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYW1kL0tjb25m aWcgYi9zb3VuZC9zb2MvYW1kL0tjb25maWcKaW5kZXggNzgxODdlYi4uZWIwYWU2MCAxMDA2NDQK LS0tIGEvc291bmQvc29jL2FtZC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9hbWQvS2NvbmZpZwpA QCAtMiwzICsyLDEwIEBAIGNvbmZpZyBTTkRfU09DX0FNRF9BQ1AKIAl0cmlzdGF0ZSAiQU1EIEF1 ZGlvIENvcHJvY2Vzc29yIHN1cHBvcnQiCiAJaGVscAogCSBUaGlzIG9wdGlvbiBlbmFibGVzIEFD UCBETUEgc3VwcG9ydCBvbiBBTUQgcGxhdGZvcm0uCitjb25maWcgU05EX1NPQ19BTURfQ1pfUlQ1 NjQ1X01BQ0gKKwl0cmlzdGF0ZSAiQU1EIENaIHN1cHBvcnQgZm9yIFJUNTY0NSIKKwlzZWxlY3Qg U05EX1NPQ19SVDU2NDUKKwlzZWxlY3QgU05EX1NPQ19BTURfQUNQCisJZGVwZW5kcyBvbiBJMkNf REVTSUdOV0FSRV9QTEFURk9STQorCWhlbHAKKwkgVGhpcyBvcHRpb24gZW5hYmxlcyBtYWNoaW5l IGRyaXZlciBmb3IgcnQ1NjQ1LgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2FtZC9NYWtlZmlsZSBi L3NvdW5kL3NvYy9hbWQvTWFrZWZpbGUKaW5kZXggMWE2NmVjMC4uZWVkNjRmZiAxMDA2NDQKLS0t IGEvc291bmQvc29jL2FtZC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvYW1kL01ha2VmaWxlCkBA IC0xLDMgKzEsNSBAQAogc25kLXNvYy1hY3AtcGNtLW9ianMJOj0gYWNwLXBjbS1kbWEubworc25k LXNvYy1hY3AtcnQ1NjQ1LW1hY2gtb2JqcyA6PSBhY3AtcnQ1NjQ1Lm8KIAogb2JqLSQoQ09ORklH X1NORF9TT0NfQU1EX0FDUCkgKz0gc25kLXNvYy1hY3AtcGNtLm8KK29iai0kKENPTkZJR19TTkRf U09DX0FNRF9DWl9SVDU2NDVfTUFDSCkgKz0gc25kLXNvYy1hY3AtcnQ1NjQ1LW1hY2gubwpkaWZm IC0tZ2l0IGEvc291bmQvc29jL2FtZC9hY3AtcnQ1NjQ1LmMgYi9zb3VuZC9zb2MvYW1kL2FjcC1y dDU2NDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTdkYmVhCi0tLSAv ZGV2L251bGwKKysrIGIvc291bmQvc29jL2FtZC9hY3AtcnQ1NjQ1LmMKQEAgLTAsMCArMSwyMTAg QEAKKy8qCisgKiBNYWNoaW5lIGRyaXZlciBmb3IgQU1EIEFDUCBBdWRpbyBlbmdpbmUgdXNpbmcg UmVhbHRlayBSVDU2NDUgY29kZWMKKyAqCisgKiBDb3B5cmlnaHQgMjAxNyBBZHZhbmNlZCBNaWNy byBEZXZpY2VzLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIG1vZGlmaWVkIGZyb20gcnQyODgg bWFjaGluZSBkcml2ZXIKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9U SEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKgorICovCisKKyNpbmNsdWRlIDxz b3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvcGNt Lmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1k YXBtLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNs dWRlIDxsaW51eC9hY3BpLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3MvcnQ1NjQ1LmgiCisKKyNk ZWZpbmUgQ1pfUExBVF9DTEsgMjQwMDAwMDAKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2sg Y3pfamFjazsKKworc3RhdGljIGludCBjel9haWYxX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9z dWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpw YXJhbXMpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0 ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNf ZGFpID0gcnRkLT5jb2RlY19kYWk7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfcGxsKGNvZGVj X2RhaSwgMCwgUlQ1NjQ1X1BMTDFfU19NQ0xLLAorCQkJCSAgQ1pfUExBVF9DTEssIHBhcmFtc19y YXRlKHBhcmFtcykgKiA1MTIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIocnRkLT5kZXYs ICJjYW4ndCBzZXQgY29kZWMgcGxsOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgUlQ1NjQ1X1NDTEtfU19Q TEwxLAorCQkJCXBhcmFtc19yYXRlKHBhcmFtcykgKiA1MTIsIFNORF9TT0NfQ0xPQ0tfT1VUKTsK KwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHJ0ZC0+ZGV2LCAiY2FuJ3Qgc2V0IGNvZGVjIHN5 c2NsazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludCBjel9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCit7 CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfc29j X2NvZGVjICpjb2RlYzsKKworCWNvZGVjID0gcnRkLT5jb2RlYzsKKwljYXJkID0gcnRkLT5jYXJk OworCisJcmV0ID0gc25kX3NvY19jYXJkX2phY2tfbmV3KGNhcmQsICJIZWFkc2V0IEphY2siLAor CQkJCVNORF9KQUNLX0hFQURQSE9ORSB8IFNORF9KQUNLX01JQ1JPUEhPTkUgfAorCQkJCVNORF9K QUNLX0JUTl8wIHwgU05EX0pBQ0tfQlROXzEgfAorCQkJCVNORF9KQUNLX0JUTl8yIHwgU05EX0pB Q0tfQlROXzMsCisJCQkJJmN6X2phY2ssIE5VTEwsIDApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy cihjYXJkLT5kZXYsICJIUCBqYWNrIGNyZWF0aW9uIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlydDU2NDVfc2V0X2phY2tfZGV0ZWN0KGNvZGVjLCAmY3pfamFjaywg JmN6X2phY2ssICZjel9qYWNrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNu ZF9zb2Nfb3BzIGN6X2FpZjFfb3BzID0geworCS5od19wYXJhbXMgPSBjel9haWYxX2h3X3BhcmFt cywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBjel9kYWlfcnQ1NjUwW10g PSB7CisJeworCQkubmFtZSA9ICJhbWQtcnQ1NjQ1LXBsYXkiLAorCQkuc3RyZWFtX25hbWUgPSAi UlQ1NjQ1X0FJRjEiLAorCQkucGxhdGZvcm1fbmFtZSA9ICJhY3BfYXVkaW9fZG1hLjAuYXV0byIs CisJCS5jcHVfZGFpX25hbWUgPSAiZGVzaWdud2FyZS1pMnMuMS5hdXRvIiwKKwkJLmNvZGVjX2Rh aV9uYW1lID0gInJ0NTY0NS1haWYxIiwKKwkJLmNvZGVjX25hbWUgPSAiaTJjLTEwRUM1NjUwOjAw IiwKKwkJLmRhaV9mbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9O RgorCQkJCXwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSwKKwkJLmluaXQgPSBjel9pbml0LAorCQku b3BzID0gJmN6X2FpZjFfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJhbWQtcnQ1NjQ1LWNhcCIs CisJCS5zdHJlYW1fbmFtZSA9ICJSVDU2NDVfQUlGMSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gImFj cF9hdWRpb19kbWEuMC5hdXRvIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJkZXNpZ253YXJlLWkycy4y LmF1dG8iLAorCQkuY29kZWNfZGFpX25hbWUgPSAicnQ1NjQ1LWFpZjEiLAorCQkuY29kZWNfbmFt ZSA9ICJpMmMtMTBFQzU2NTA6MDAiLAorCQkuZGFpX2ZtdCA9IFNORF9TT0NfREFJRk1UX0kyUyB8 IFNORF9TT0NfREFJRk1UX05CX05GCisJCQkJfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNLAorCQku aW5pdCA9IGN6X2luaXQsCisJCS5vcHMgPSAmY3pfYWlmMV9vcHMsCisJfSwKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBjel93aWRnZXRzW10gPSB7CisJU05E X1NPQ19EQVBNX0hQKCJIZWFkcGhvbmVzIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiU3Bl YWtlcnMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJIZWFkc2V0IE1pYyIsIE5VTEwpLAor CVNORF9TT0NfREFQTV9NSUMoIkludCBNaWMiLCBOVUxMKSwKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGN6X2F1ZGlvX3JvdXRlW10gPSB7CisJeyJIZWFkcGhv bmVzIiwgTlVMTCwgIkhQT0wifSwKKwl7IkhlYWRwaG9uZXMiLCBOVUxMLCAiSFBPUiJ9LAorCXsi UkVDTUlYTCIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAorCXsiUkVDTUlYUiIsIE5VTEwsICJIZWFk c2V0IE1pYyJ9LAorCXsiU3BlYWtlcnMiLCBOVUxMLCAiU1BPTCJ9LAorCXsiU3BlYWtlcnMiLCBO VUxMLCAiU1BPUiJ9LAorCXsiRE1JQyBMMiIsIE5VTEwsICJJbnQgTWljIn0sCisJeyJETUlDIFIy IiwgTlVMTCwgIkludCBNaWMifSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250 cm9sX25ldyBjel9tY19jb250cm9sc1tdID0geworCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRw aG9uZXMiKSwKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJTcGVha2VycyIpLAorCVNPQ19EQVBNX1BJ Tl9TV0lUQ0goIkhlYWRzZXQgTWljIiksCisJU09DX0RBUE1fUElOX1NXSVRDSCgiSW50IE1pYyIp LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgY3pfY2FyZCA9IHsKKwkubmFtZSA9 ICJhY3BydDU2NTAiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kYWlfbGluayA9IGN6X2Rh aV9ydDU2NTAsCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUoY3pfZGFpX3J0NTY1MCksCisJLmRh cG1fd2lkZ2V0cyA9IGN6X3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpF KGN6X3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyA9IGN6X2F1ZGlvX3JvdXRlLAorCS5udW1fZGFw bV9yb3V0ZXMgPSBBUlJBWV9TSVpFKGN6X2F1ZGlvX3JvdXRlKSwKKwkuY29udHJvbHMgPSBjel9t Y19jb250cm9scywKKwkubnVtX2NvbnRyb2xzID0gQVJSQVlfU0laRShjel9tY19jb250cm9scyks Cit9OworCitzdGF0aWMgaW50IGN6X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkOworCisJY2FyZCA9ICZj el9jYXJkOworCWN6X2NhcmQuZGV2ID0gJnBkZXYtPmRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0 YShwZGV2LCBjYXJkKTsKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NhcmQoY2FyZCk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJInNuZF9zb2NfcmVnaXN0ZXJfY2Fy ZCglcykgZmFpbGVkOiAlZFxuIiwKKwkJCQljel9jYXJkLm5hbWUsIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN6X3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQ7CisKKwlj YXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc25kX3NvY191bnJlZ2lzdGVyX2Nh cmQoY2FyZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2Rl dmljZV9pZCBjel9hdWRpb19hY3BpX21hdGNoW10gPSB7CisJeyAiQU1ESTEwMDIiLCAwIH0sCisJ e30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjel9wY21fZHJpdmVyID0g eworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImN6LXJ0NTY0NSIsCisJCS5hY3BpX21hdGNoX3Rh YmxlID0gQUNQSV9QVFIoY3pfYXVkaW9fYWNwaV9tYXRjaCksCisJCS5wbSA9ICZzbmRfc29jX3Bt X29wcywKKwl9LAorCS5wcm9iZSA9IGN6X3Byb2JlLAorCS5yZW1vdmUgPSBjel9yZW1vdmUsCit9 OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGN6X3BjbV9kcml2ZXIpOworCitNT0RVTEVfQVVU SE9SKCJha3NodS5hZ3Jhd2FsQGFtZC5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTigiY3otcnQ1 NjQ1IGF1ZGlvIHN1cHBvcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gCjIuNS41 CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4 IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK