From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-wg0-x232.google.com ([2a00:1450:400c:c00::232]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1XOlx2-0006Ea-Kv for barebox@lists.infradead.org; Tue, 02 Sep 2014 11:08:42 +0000 Received: by mail-wg0-f50.google.com with SMTP id x12so6662484wgg.33 for ; Tue, 02 Sep 2014 04:08:18 -0700 (PDT) From: =?UTF-8?q?Rapha=C3=ABl=20Poggi?= Date: Tue, 2 Sep 2014 13:07:59 +0200 Message-Id: <1409656080-19280-3-git-send-email-poggi.raph@gmail.com> In-Reply-To: <1409656080-19280-1-git-send-email-poggi.raph@gmail.com> References: <1409656080-19280-1-git-send-email-poggi.raph@gmail.com> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH v3 2/3] pinctrl: at91: add pinctrl driver To: barebox@lists.infradead.org Cc: =?UTF-8?q?Rapha=C3=ABl=20Poggi?= VGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gbWFjaC1hdDkxL2dwaW8uYyBhbmQgbGludXggcGluY3Ry bCBkcml2ZXIuClRoZSBkcml2ZXIgY29udGFpbnMgdGhlIGdwaW8gYW5kIHBpbmN0cmwgcGFydHMg KGxpa2UgaW4gbGludXgpIGJlY2F1c2UgdGhlIHR3byBwYXJ0cwpzaGFyZSBzb21lIHN0cnVjdHVy ZXMgYW5kIGxvZ2ljcy4KClNpZ25lZC1vZmYtYnk6IFJhcGhhw6tsIFBvZ2dpIDxwb2dnaS5yYXBo QGdtYWlsLmNvbT4KLS0tCiBkcml2ZXJzL3BpbmN0cmwvS2NvbmZpZyAgICAgICAgfCAgICA2ICsK IGRyaXZlcnMvcGluY3RybC9NYWtlZmlsZSAgICAgICB8ICAgIDEgKwogZHJpdmVycy9waW5jdHJs L3BpbmN0cmwtYXQ5MS5jIHwgIDUyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDUzNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYXQ5MS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9waW5jdHJsL0tjb25maWcgYi9kcml2ZXJzL3BpbmN0cmwvS2NvbmZpZwppbmRleCBkZmZhYTRl Li5jZTU1YzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvS2NvbmZpZworKysgYi9kcml2 ZXJzL3BpbmN0cmwvS2NvbmZpZwpAQCAtNyw2ICs3LDEyIEBAIGNvbmZpZyBQSU5DVFJMCiAJICBm cm9tIHRoZSBkZXZpY2V0cmVlLiBMZWdhY3kgZHJpdmVycyBoZXJlIG1heSBub3QgbmVlZCB0aGlz IGNvcmUKIAkgIHN1cHBvcnQgYnV0IGluc3RlYWQgcHJvdmlkZSB0aGVpciBvd24gU29DIHNwZWNp ZmljIEFQSXMKIAorY29uZmlnIFBJTkNUUkxfQVQ5MQorCXNlbGVjdCBQSU5DVFJMCisJYm9vbAor CWhlbHAKKwkgICAgVGhlIHBpbm11eCBjb250cm9sbGVyIGZvdW5kIG9uIEFUOTEgU29Dcy4KKwog Y29uZmlnIFBJTkNUUkxfSU1YX0lPTVVYX1YxCiAJc2VsZWN0IFBJTkNUUkwgaWYgT0ZERVZJQ0UK IAlib29sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvTWFrZWZpbGUgYi9kcml2ZXJzL3Bp bmN0cmwvTWFrZWZpbGUKaW5kZXggNTY2YmExMS4uM2VhODY0OSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9waW5jdHJsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGluY3RybC9NYWtlZmlsZQpAQCAtMSw0 ICsxLDUgQEAKIG9iai0kKENPTkZJR19QSU5DVFJMKQkrPSBwaW5jdHJsLm8KK29iai0kKENPTkZJ R19QSU5DVFJMX0FUOTEpICs9IHBpbmN0cmwtYXQ5MS5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9J TVhfSU9NVVhfVjEpICs9IGlteC1pb211eC12MS5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9JTVhf SU9NVVhfVjIpICs9IGlteC1pb211eC12Mi5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9JTVhfSU9N VVhfVjMpICs9IGlteC1pb211eC12My5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGlu Y3RybC1hdDkxLmMgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1hdDkxLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMzODYyYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvcGluY3RybC9waW5jdHJsLWF0OTEuYwpAQCAtMCwwICsxLDUyNyBAQAorLyoKKyAqIENvcHly aWdodCAoQykgMjAwNSBIUCBMYWJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBKZWFuLUNo cmlzdG9waGUgUExBR05JT0wtVklMTEFSRCA8cGxhZ25pb2pAamNyb3NvZnQuY29tPgorICogQ29w eXJpZ2h0IChDKSAyMDE0IFJhcGhhw6tsIFBvZ2dpCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBm b3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2lu Y2x1ZGUgPGNvbXBsZXRlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGlu dXgvZXJyLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpby5oPgorI2luY2x1ZGUg PGdwaW8uaD4KKyNpbmNsdWRlIDxpbml0Lmg+CisjaW5jbHVkZSA8ZHJpdmVyLmg+CisjaW5jbHVk ZSA8Z2V0b3B0Lmg+CisKKyNpbmNsdWRlIDxtYWNoL2F0OTFfcGlvLmg+CisjaW5jbHVkZSA8bWFj aC9ncGlvLmg+CisKKyNpbmNsdWRlIDxwaW5jdHJsLmg+CisKK3N0cnVjdCBhdDkxX3BpbmN0cmwg eworCXN0cnVjdCBwaW5jdHJsX2RldmljZSBwY3RsOworCXN0cnVjdCBhdDkxX3BpbmN0cmxfbXV4 X29wcwkqb3BzOworfTsKKworc3RydWN0IGF0OTFfZ3Bpb19jaGlwIHsKKwlzdHJ1Y3QgZ3Bpb19j aGlwCWNoaXA7CisJdm9pZCBfX2lvbWVtCQkqcmVnYmFzZTsJLyogUElPIGJhbmsgdmlydHVhbCBh ZGRyZXNzICovCisJc3RydWN0IGF0OTFfcGluY3RybF9tdXhfb3BzICpvcHM7CS8qIG9wcyAqLwor fTsKKworZW51bSBhdDkxX211eCB7CisJQVQ5MV9NVVhfR1BJTyA9IDAsCisJQVQ5MV9NVVhfUEVS SVBIX0EgPSAxLAorCUFUOTFfTVVYX1BFUklQSF9CID0gMiwKKwlBVDkxX01VWF9QRVJJUEhfQyA9 IDMsCisJQVQ5MV9NVVhfUEVSSVBIX0QgPSA0LAorfTsKKworI2RlZmluZSBNQVhfR1BJT19CQU5L UwkJNQorI2RlZmluZSB0b19hdDkxX3BpbmN0cmwoYykgY29udGFpbmVyX29mKGMsIHN0cnVjdCBh dDkxX3BpbmN0cmwsIHBjdGwpOworI2RlZmluZSB0b19hdDkxX2dwaW9fY2hpcChjKSBjb250YWlu ZXJfb2YoYywgc3RydWN0IGF0OTFfZ3Bpb19jaGlwLCBjaGlwKQorCisjZGVmaW5lIFBVTExfVVAg ICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBNVUxUSV9EUklWRSAgICAgKDEgPDwgMSkKKyNkZWZp bmUgREVHTElUQ0ggICAgICAgICgxIDw8IDIpCisjZGVmaW5lIFBVTExfRE9XTiAgICAgICAoMSA8 PCAzKQorI2RlZmluZSBESVNfU0NITUlUICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgREVCT1VOQ0Ug ICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBERUJPVU5DRV9WQUxfU0hJRlQgICAgICAxNworI2Rl ZmluZSBERUJPVU5DRV9WQUwgICAgKDB4M2ZmZiA8PCBERUJPVU5DRV9WQUxfU0hJRlQpCisKK3N0 YXRpYyBpbnQgZ3Bpb19iYW5rczsKKworc3RhdGljIHN0cnVjdCBhdDkxX2dwaW9fY2hpcCBncGlv X2NoaXBbTUFYX0dQSU9fQkFOS1NdOworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcGlu X3RvX2NvbnRyb2xsZXIoc3RydWN0IGF0OTFfcGluY3RybCAqaW5mbywgdW5zaWduZWQgcGluKQor eworCXBpbiAvPSBNQVhfTkJfR1BJT19QRVJfQkFOSzsKKwlpZiAobGlrZWx5KHBpbiA8IGdwaW9f YmFua3MpKQorCQlyZXR1cm4gZ3Bpb19jaGlwW3Bpbl0ucmVnYmFzZTsKKworCXJldHVybiBOVUxM OworfQorCisvKioKKyAqIHN0cnVjdCBhdDkxX3BpbmN0cmxfbXV4X29wcyAtIGRlc2NyaWJlcyBh biBBdDkxIG11eCBvcHMgZ3JvdXAKKyAqIG9uIG5ldyBJUCB3aXRoIHN1cHBvcnQgZm9yIHBlcmlw aCBDIGFuZCBEIHRoZSB3YXkgdG8gbXV4IGluCisgKiBwZXJpcGggQSBhbmQgQiBoYXMgY2hhbmdl ZAorICogU28gcHJvdmlkZSB0aGUgcmlnaHQgY2FsbCBiYWNrCisgKiBpZiBub3QgcHJlc2VudCBt ZWFucyB0aGUgSVAgZG9lcyBub3Qgc3VwcG9ydCBpdAorICogQGdldF9wZXJpcGg6IHJldHVybiB0 aGUgcGVyaXBoIG1vZGUgY29uZmlndXJlZAorICogQG11eF9BX3BlcmlwaDogbXV4IGFzIHBlcmlw aCBBCisgKiBAbXV4X0JfcGVyaXBoOiBtdXggYXMgcGVyaXBoIEIKKyAqIEBtdXhfQ19wZXJpcGg6 IG11eCBhcyBwZXJpcGggQworICogQG11eF9EX3BlcmlwaDogbXV4IGFzIHBlcmlwaCBECisgKiBA c2V0X2RlZ2xpdGNoOiBlbmFibGUvZGlzYWJsZSBkZWdsaXRjaAorICogQHNldF9kZWJvdW5jZTog ZW5hYmxlL2Rpc2FibGUgZGVib3VuY2UKKyAqIEBzZXRfcHVsbGRvd246IGVuYWJsZS9kaXNhYmxl IHB1bGxkb3duCisgKiBAZGlzYWJsZV9zY2htaXR0X3RyaWc6IGRpc2FibGUgc2NobWl0dCB0cmln Z2VyCisgKi8KK3N0cnVjdCBhdDkxX3BpbmN0cmxfbXV4X29wcyB7CisJZW51bSBhdDkxX211eCAo KmdldF9wZXJpcGgpKHZvaWQgX19pb21lbSAqcGlvLCB1bnNpZ25lZCBtYXNrKTsKKwl2b2lkICgq bXV4X0FfcGVyaXBoKSh2b2lkIF9faW9tZW0gKnBpbywgdW5zaWduZWQgbWFzayk7CisJdm9pZCAo Km11eF9CX3BlcmlwaCkodm9pZCBfX2lvbWVtICpwaW8sIHVuc2lnbmVkIG1hc2spOworCXZvaWQg KCptdXhfQ19wZXJpcGgpKHZvaWQgX19pb21lbSAqcGlvLCB1bnNpZ25lZCBtYXNrKTsKKwl2b2lk ICgqbXV4X0RfcGVyaXBoKSh2b2lkIF9faW9tZW0gKnBpbywgdW5zaWduZWQgbWFzayk7CisJYm9v bCAoKmdldF9kZWdsaXRjaCkodm9pZCBfX2lvbWVtICpwaW8sIHVuc2lnbmVkIHBpbik7CisJdm9p ZCAoKnNldF9kZWdsaXRjaCkodm9pZCBfX2lvbWVtICpwaW8sIHVuc2lnbmVkIG1hc2ssIGJvb2wg aW5fb24pOworCWJvb2wgKCpnZXRfZGVib3VuY2UpKHZvaWQgX19pb21lbSAqcGlvLCB1bnNpZ25l ZCBwaW4sIHUzMiAqZGl2KTsKKwl2b2lkICgqc2V0X2RlYm91bmNlKSh2b2lkIF9faW9tZW0gKnBp bywgdW5zaWduZWQgbWFzaywgYm9vbCBpbl9vbiwgdTMyIGRpdik7CisJYm9vbCAoKmdldF9wdWxs ZG93bikodm9pZCBfX2lvbWVtICpwaW8sIHVuc2lnbmVkIHBpbik7CisJdm9pZCAoKnNldF9wdWxs ZG93bikodm9pZCBfX2lvbWVtICpwaW8sIHVuc2lnbmVkIG1hc2ssIGJvb2wgaW5fb24pOworCWJv b2wgKCpnZXRfc2NobWl0dF90cmlnKSh2b2lkIF9faW9tZW0gKnBpbywgdW5zaWduZWQgcGluKTsK Kwl2b2lkICgqZGlzYWJsZV9zY2htaXR0X3RyaWcpKHZvaWQgX19pb21lbSAqcGlvLCB1bnNpZ25l ZCBtYXNrKTsKK307CisKK3N0YXRpYyBlbnVtIGF0OTFfbXV4IGF0OTFfbXV4X3BpbzNfZ2V0X3Bl cmlwaCh2b2lkIF9faW9tZW0gKnBpbywgdW5zaWduZWQgbWFzaykKK3sKKwl1bnNpZ25lZCBzZWxl Y3Q7CisKKwlpZiAoX19yYXdfcmVhZGwocGlvICsgUElPX1BTUikgJiBtYXNrKQorCQlyZXR1cm4g QVQ5MV9NVVhfR1BJTzsKKworCXNlbGVjdCA9ICEhKF9fcmF3X3JlYWRsKHBpbyArIFBJT19BQkNE U1IxKSAmIG1hc2spOworCXNlbGVjdCB8PSAoISEoX19yYXdfcmVhZGwocGlvICsgUElPX0FCQ0RT UjIpICYgbWFzaykgPDwgMSk7CisKKwlyZXR1cm4gc2VsZWN0ICsgMTsKK30KKworc3RhdGljIGVu dW0gYXQ5MV9tdXggYXQ5MV9tdXhfZ2V0X3BlcmlwaCh2b2lkIF9faW9tZW0gKnBpbywgdW5zaWdu ZWQgbWFzaykKK3sKKwl1bnNpZ25lZCBzZWxlY3Q7CisKKwlpZiAoX19yYXdfcmVhZGwocGlvICsg UElPX1BTUikgJiBtYXNrKQorCQlyZXR1cm4gQVQ5MV9NVVhfR1BJTzsKKworCXNlbGVjdCA9IF9f cmF3X3JlYWRsKHBpbyArIFBJT19BQlNSKSAmIG1hc2s7CisKKwlyZXR1cm4gc2VsZWN0ICsgMTsK K30KKworc3RhdGljIGJvb2wgYXQ5MV9tdXhfZ2V0X2RlZ2xpdGNoKHZvaWQgX19pb21lbSAqcGlv LCB1bnNpZ25lZCBwaW4pCit7CisJcmV0dXJuIChfX3Jhd19yZWFkbChwaW8gKyBQSU9fSUZTUikg Pj4gcGluKSAmIDB4MTsKK30KKworc3RhdGljIGJvb2wgYXQ5MV9tdXhfcGlvM19nZXRfZGVib3Vu Y2Uodm9pZCBfX2lvbWVtICpwaW8sIHVuc2lnbmVkIHBpbiwgdTMyICpkaXYpCit7CisJKmRpdiA9 IF9fcmF3X3JlYWRsKHBpbyArIFBJT19TQ0RSKTsKKworCXJldHVybiAoX19yYXdfcmVhZGwocGlv ICsgUElPX0lGU0NTUikgPj4gcGluKSAmIDB4MTsKK30KKworc3RhdGljIGJvb2wgYXQ5MV9tdXhf cGlvM19nZXRfcHVsbGRvd24odm9pZCBfX2lvbWVtICpwaW8sIHVuc2lnbmVkIHBpbikKK3sKKwly ZXR1cm4gKF9fcmF3X3JlYWRsKHBpbyArIFBJT19QUERTUikgPj4gcGluKSAmIDB4MTsKK30KKwor c3RhdGljIGJvb2wgYXQ5MV9tdXhfcGlvM19nZXRfc2NobWl0dF90cmlnKHZvaWQgX19pb21lbSAq cGlvLCB1bnNpZ25lZCBwaW4pCit7CisJcmV0dXJuIChfX3Jhd19yZWFkbChwaW8gKyBQSU9fU0NI TUlUVCkgPj4gcGluKSAmIDB4MTsKK30KKworc3RhdGljIHN0cnVjdCBhdDkxX3BpbmN0cmxfbXV4 X29wcyBhdDkxcm05MjAwX29wcyA9IHsKKwkuZ2V0X3BlcmlwaAk9IGF0OTFfbXV4X2dldF9wZXJp cGgsCisJLm11eF9BX3BlcmlwaAk9IGF0OTFfbXV4X3NldF9BX3BlcmlwaCwKKwkubXV4X0JfcGVy aXBoCT0gYXQ5MV9tdXhfc2V0X0JfcGVyaXBoLAorCS5nZXRfZGVnbGl0Y2gJPSBhdDkxX211eF9n ZXRfZGVnbGl0Y2gsCisJLnNldF9kZWdsaXRjaAk9IGF0OTFfbXV4X3NldF9kZWdsaXRjaCwKK307 CisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9waW5jdHJsX211eF9vcHMgYXQ5MXNhbTl4NV9vcHMgPSB7 CisJLmdldF9wZXJpcGgJPSBhdDkxX211eF9waW8zX2dldF9wZXJpcGgsCisJLm11eF9BX3Blcmlw aAk9IGF0OTFfbXV4X3BpbzNfc2V0X0FfcGVyaXBoLAorCS5tdXhfQl9wZXJpcGgJPSBhdDkxX211 eF9waW8zX3NldF9CX3BlcmlwaCwKKwkubXV4X0NfcGVyaXBoCT0gYXQ5MV9tdXhfcGlvM19zZXRf Q19wZXJpcGgsCisJLm11eF9EX3BlcmlwaAk9IGF0OTFfbXV4X3BpbzNfc2V0X0RfcGVyaXBoLAor CS5nZXRfZGVnbGl0Y2gJPSBhdDkxX211eF9nZXRfZGVnbGl0Y2gsCisJLnNldF9kZWdsaXRjaAk9 IGF0OTFfbXV4X3BpbzNfc2V0X2RlZ2xpdGNoLAorCS5nZXRfZGVib3VuY2UJPSBhdDkxX211eF9w aW8zX2dldF9kZWJvdW5jZSwKKwkuc2V0X2RlYm91bmNlCT0gYXQ5MV9tdXhfcGlvM19zZXRfZGVi b3VuY2UsCisJLmdldF9wdWxsZG93bgk9IGF0OTFfbXV4X3BpbzNfZ2V0X3B1bGxkb3duLAorCS5z ZXRfcHVsbGRvd24JPSBhdDkxX211eF9waW8zX3NldF9wdWxsZG93biwKKwkuZ2V0X3NjaG1pdHRf dHJpZyA9IGF0OTFfbXV4X3BpbzNfZ2V0X3NjaG1pdHRfdHJpZywKKwkuZGlzYWJsZV9zY2htaXR0 X3RyaWcgPSBhdDkxX211eF9waW8zX2Rpc2FibGVfc2NobWl0dF90cmlnLAorfTsKKworc3RhdGlj IGludCBhdDkxX211eF9waW4oc3RydWN0IGF0OTFfcGluY3RybCAqaW5mbywgdW5zaWduZWQgcGlu LCBlbnVtIGF0OTFfbXV4IG11eCwgaW50IHVzZV9wdWxsdXApCit7CisJdm9pZCBfX2lvbWVtCSpw aW8gPSBwaW5fdG9fY29udHJvbGxlcihpbmZvLCBwaW4pOworCXVuc2lnbmVkIG1hc2sgPSBwaW5f dG9fbWFzayhwaW4pOworCisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgh cGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWF0OTFfbXV4X2Rpc2FibGVfaW50ZXJydXB0KHBp bywgbWFzayk7CisKKwlzd2l0Y2ggKG11eCkgeworCWNhc2UgQVQ5MV9NVVhfR1BJTzoKKwkJYXQ5 MV9tdXhfZ3Bpb19lbmFibGUocGlvLCBtYXNrKTsKKwkJYnJlYWs7CisJY2FzZSBBVDkxX01VWF9Q RVJJUEhfQToKKwkJaW5mby0+b3BzLT5tdXhfQV9wZXJpcGgocGlvLCBtYXNrKTsKKwkJYnJlYWs7 CisJY2FzZSBBVDkxX01VWF9QRVJJUEhfQjoKKwkJaW5mby0+b3BzLT5tdXhfQl9wZXJpcGgocGlv LCBtYXNrKTsKKwkJYnJlYWs7CisJY2FzZSBBVDkxX01VWF9QRVJJUEhfQzoKKwkJaWYgKCFpbmZv LT5vcHMtPm11eF9DX3BlcmlwaCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpbmZvLT5vcHMtPm11 eF9DX3BlcmlwaChwaW8sIG1hc2spOworCQlicmVhazsKKwljYXNlIEFUOTFfTVVYX1BFUklQSF9E OgorCQlpZiAoIWluZm8tPm9wcy0+bXV4X0RfcGVyaXBoKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJ CWluZm8tPm9wcy0+bXV4X0RfcGVyaXBoKHBpbywgbWFzayk7CisJCWJyZWFrOworCX0KKwlpZiAo bXV4KQorCQlhdDkxX211eF9ncGlvX2Rpc2FibGUocGlvLCBtYXNrKTsKKworCWlmICh1c2VfcHVs bHVwID49IDApCisJCWF0OTFfbXV4X3NldF9wdWxsdXAocGlvLCBtYXNrLCB1c2VfcHVsbHVwKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhdDkxX3BpbmN0 cmxfZHRfaWRzW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxcm05MjAwLXBp bmN0cmwiLAorCQkuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSZhdDkxcm05MjAwX29wcywKKwl9LCB7 CisJCS5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUtcGluY3RybCIsCisJCS5kYXRhID0g KHVuc2lnbmVkIGxvbmcpJmF0OTFzYW05eDVfb3BzLAorCX0sIHsKKwkJLyogc2VudGluZWwgKi8K Kwl9Cit9OworCitzdGF0aWMgc3RydWN0IGF0OTFfcGluY3RybF9tdXhfb3BzICphdDkxX3BpbmN0 cmxfZ2V0X2RyaXZlcl9kYXRhKHN0cnVjdCBkZXZpY2VfZCAqZGV2KQoreworCXN0cnVjdCBhdDkx X3BpbmN0cmxfbXV4X29wcyAqb3BzX2RhdGEgPSBOVUxMOworCWludCByYzsKKworCWlmIChkZXYt PmRldmljZV9ub2RlKSB7CisJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOworCQlt YXRjaCA9IG9mX21hdGNoX25vZGUoYXQ5MV9waW5jdHJsX2R0X2lkcywgZGV2LT5kZXZpY2Vfbm9k ZSk7CisJCWlmICghbWF0Y2gpCisJCQlvcHNfZGF0YSA9IE5VTEw7CisJCWVsc2UKKwkJCW9wc19k YXRhID0gKHN0cnVjdCBhdDkxX3BpbmN0cmxfbXV4X29wcyAqKW1hdGNoLT5kYXRhOworCX0gZWxz ZSB7CisJCXJjID0gZGV2X2dldF9kcnZkYXRhKGRldiwgKHVuc2lnbmVkIGxvbmcgKikmb3BzX2Rh dGEpOworCQlpZiAocmMpCisJCQlvcHNfZGF0YSA9IE5VTEw7CisJfQorCisJcmV0dXJuIG9wc19k YXRhOworfQorCitzdGF0aWMgaW50IGF0OTFfcGluY3RybF9zZXRfY29uZihzdHJ1Y3QgYXQ5MV9w aW5jdHJsICppbmZvLCB1bnNpZ25lZCBpbnQgcGluX251bSwgdW5zaWduZWQgaW50IG11eCwgdW5z aWduZWQgaW50IGNvbmYpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisJdm9pZCBfX2lvbWVtICpw aW87CisKKwlwaW8gPSBwaW5fdG9fY29udHJvbGxlcihpbmZvLCBwaW5fbnVtKTsKKwltYXNrID0g cGluX3RvX21hc2socGluX251bSk7CisKKwlpZiAoY29uZiAmIFBVTExfVVAgJiYgY29uZiAmIFBV TExfRE9XTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhdDkxX211eF9zZXRfcHVsbHVwKHBpbywg bWFzaywgY29uZiAmIFBVTExfVVApOworCWF0OTFfbXV4X3NldF9tdWx0aWRyaXZlKHBpbywgbWFz aywgY29uZiAmIE1VTFRJX0RSSVZFKTsKKwlpZiAoaW5mby0+b3BzLT5zZXRfZGVnbGl0Y2gpCisJ CWluZm8tPm9wcy0+c2V0X2RlZ2xpdGNoKHBpbywgbWFzaywgY29uZiAmIERFR0xJVENIKTsKKwlp ZiAoaW5mby0+b3BzLT5zZXRfZGVib3VuY2UpCisJCWluZm8tPm9wcy0+c2V0X2RlYm91bmNlKHBp bywgbWFzaywgY29uZiAmIERFQk9VTkNFLAorCQkJKGNvbmYgJiBERUJPVU5DRV9WQUwpID4+IERF Qk9VTkNFX1ZBTF9TSElGVCk7CisJaWYgKGluZm8tPm9wcy0+c2V0X3B1bGxkb3duKQorCQlpbmZv LT5vcHMtPnNldF9wdWxsZG93bihwaW8sIG1hc2ssIGNvbmYgJiBQVUxMX0RPV04pOworCWlmIChp bmZvLT5vcHMtPmRpc2FibGVfc2NobWl0dF90cmlnICYmIGNvbmYgJiBESVNfU0NITUlUKQorCQlp bmZvLT5vcHMtPmRpc2FibGVfc2NobWl0dF90cmlnKHBpbywgbWFzayk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBhdDkxX3BpbmN0cmxfc2V0X3N0YXRlKHN0cnVjdCBwaW5jdHJsX2Rl dmljZSAqcGRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgYXQ5MV9waW5j dHJsICppbmZvOworCWNvbnN0IF9fYmUzMiAqbGlzdDsKKwlpbnQgaSwgc2l6ZTsKKwlpbnQgcmV0 ID0gMDsKKwlpbnQgYmFua19udW0sIHBpbl9udW0sIG11eCwgY29uZjsKKworCWluZm8gPSB0b19h dDkxX3BpbmN0cmwocGRldik7CisKKwlsaXN0ID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiYXRtZWws cGlucyIsICZzaXplKTsKKwlzaXplIC89IHNpemVvZigqbGlzdCk7CisKKwlpZiAoIXNpemUgfHwg c2l6ZSAlIDQpIHsKKwkJZGV2X2VycihwZGV2LT5kZXYsICJ3cm9uZyBwaW5zIG51bWJlciBvciBw aW5zIGFuZCBjb25maWdzIHNob3VsZCBiZSBieSA0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgeworCQliYW5rX251bSA9IGJlMzJf dG9fY3B1KCpsaXN0KyspOworCQlwaW5fbnVtID0gYmUzMl90b19jcHUoKmxpc3QrKyk7CisJCW11 eCA9IGJlMzJfdG9fY3B1KCpsaXN0KyspOworCQljb25mID0gYmUzMl90b19jcHUoKmxpc3QrKyk7 CisKKwkJcmV0ID0gYXQ5MV9tdXhfcGluKGluZm8sIHBpbl9udW0sIG11eCwgY29uZiAmIFBVTExf VVApOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKHBkZXYtPmRldiwgImZhaWxlZCB0byBtdXgg cGluICVkXG4iLCBwaW5fbnVtKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSBhdDkx X3BpbmN0cmxfc2V0X2NvbmYoaW5mbywgcGluX251bSwgbXV4LCBjb25mKTsKKwkJaWYgKHJldCkg eworCQkJZGV2X2VycihwZGV2LT5kZXYsICJmYWlsZWQgdG8gc2V0IGNvbmYgb24gcGluICVkXG4i LCBwaW5fbnVtKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgc3RydWN0IHBpbmN0cmxfb3BzIGF0OTFfcGluY3RybF9vcHMgPSB7CisJLnNldF9z dGF0ZSA9IGF0OTFfcGluY3RybF9zZXRfc3RhdGUsCit9OworCitzdGF0aWMgaW50IGF0OTFfcGlu Y3RybF9wcm9iZShzdHJ1Y3QgZGV2aWNlX2QgKmRldikKK3sKKwlzdHJ1Y3QgYXQ5MV9waW5jdHJs ICppbmZvOworCWludCByZXQ7CisKKwlpbmZvID0geHphbGxvYyhzaXplb2Yoc3RydWN0IGF0OTFf cGluY3RybCkpOworCisJaW5mby0+b3BzID0gYXQ5MV9waW5jdHJsX2dldF9kcml2ZXJfZGF0YShk ZXYpOworCWlmICghaW5mby0+b3BzKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJldHJp ZXZlIGRyaXZlciBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW5mby0+cGN0 bC5kZXYgPSBkZXY7CisJaW5mby0+cGN0bC5vcHMgPSAmYXQ5MV9waW5jdHJsX29wczsKKworCXJl dCA9IHBpbmN0cmxfcmVnaXN0ZXIoJmluZm8tPnBjdGwpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlkZXZfaW5mbyhkZXYsICJBVDkxIHBpbmN0cmwgcmVnaXN0ZXJlZFxuIik7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgYXQ5MV9waW5j dHJsX2lkc1tdID0geworCXsKKwkJLm5hbWUgPSAiYXQ5MXJtOTIwMC1waW5jdHJsIiwKKwkJLmRy aXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpJmF0OTFybTkyMDBfb3BzLAorCX0sIHsKKwkJLm5h bWUgPSAiYXQ5MXNhbTl4NS1waW5jdHJsIiwKKwkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxv bmcpJmF0OTFzYW05eDVfb3BzLAorCX0sIHsKKwkJLyogc2VudGluZWwgKi8KKwl9LAorfTsKKwor c3RhdGljIHN0cnVjdCBkcml2ZXJfZCBhdDkxX3BpbmN0cmxfZHJpdmVyID0geworCS5uYW1lID0g InBpbmN0cmwtYXQ5MSIsCisJLnByb2JlID0gYXQ5MV9waW5jdHJsX3Byb2JlLAorCS5pZF90YWJs ZSA9IGF0OTFfcGluY3RybF9pZHMsCisJLm9mX2NvbXBhdGlibGUgPSBEUlZfT0ZfQ09NUEFUKGF0 OTFfcGluY3RybF9kdF9pZHMpLAorfTsKKworc3RhdGljIGludCBhdDkxX3BpbmN0cmxfaW5pdCh2 b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF0OTFfcGluY3RybF9k cml2ZXIpOworfQorY29yZWRldmljZV9pbml0Y2FsbChhdDkxX3BpbmN0cmxfaW5pdCk7CisKK3N0 YXRpYyBpbnQgYXQ5MV9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBv ZmZzZXQpCit7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dw aW9fY2hpcChjaGlwKTsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsK Kwl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7CisKKwlyZXR1cm4gYXQ5MV9tdXhfZ3Bpb19n ZXQocGlvLCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgYXQ5MV9ncGlvX3NldChzdHJ1Y3QgZ3Bp b19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYXQ5 MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IHRvX2F0OTFfZ3Bpb19jaGlwKGNoaXApOworCXZvaWQg X19pb21lbSAqcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOworCXVuc2lnbmVkIG1hc2sgPSAxIDw8 IG9mZnNldDsKKworCWF0OTFfbXV4X2dwaW9fc2V0KHBpbywgbWFzaywgdmFsdWUpOworfQorCitz dGF0aWMgaW50IGF0OTFfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNo aXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJaW50IHZhbHVlKQoreworCXN0cnVjdCBhdDkxX2dwaW9f Y2hpcCAqYXQ5MV9ncGlvID0gdG9fYXQ5MV9ncGlvX2NoaXAoY2hpcCk7CisJdm9pZCBfX2lvbWVt ICpwaW8gPSBhdDkxX2dwaW8tPnJlZ2Jhc2U7CisJdW5zaWduZWQgbWFzayA9IDEgPDwgb2Zmc2V0 OworCisJYXQ5MV9tdXhfZ3Bpb19zZXQocGlvLCBtYXNrLCB2YWx1ZSk7CisJX19yYXdfd3JpdGVs KG1hc2ssIHBpbyArIFBJT19PRVIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ5 MV9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBv ZmZzZXQpCit7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dw aW9fY2hpcChjaGlwKTsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsK Kwl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7CisKKwlfX3Jhd193cml0ZWwobWFzaywgcGlv ICsgUElPX09EUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDkxX2dwaW9fcmVx dWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0 IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKKwl2 b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKKwl1bnNpZ25lZCBtYXNrID0g MSA8PCBvZmZzZXQ7CisKKwlkZXZfZGJnKGNoaXAtPmRldiwgIiVzOiVkIHBpbyVjJWQoJWQpXG4i LCBfX2Z1bmNfXywgX19MSU5FX18sCisJCSAnQScgKyBwaW5fdG9fYmFuayhjaGlwLT5iYXNlKSwg b2Zmc2V0LCBjaGlwLT5iYXNlICsgb2Zmc2V0KTsKKwlhdDkxX211eF9ncGlvX2VuYWJsZShwaW8s IG1hc2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0OTFfZ3Bpb19mcmVlKHN0 cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlkZXZfZGJnKGNoaXAt PmRldiwgIiVzOiVkIHBpbyVjJWQoJWQpXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCisJCSAnQScg KyBwaW5fdG9fYmFuayhjaGlwLT5iYXNlKSwgb2Zmc2V0LCBjaGlwLT5iYXNlICsgb2Zmc2V0KTsK K30KKworc3RhdGljIHN0cnVjdCBncGlvX29wcyBhdDkxX2dwaW9fb3BzID0geworCS5yZXF1ZXN0 ID0gYXQ5MV9ncGlvX3JlcXVlc3QsCisJLmZyZWUgPSBhdDkxX2dwaW9fZnJlZSwKKwkuZGlyZWN0 aW9uX2lucHV0ID0gYXQ5MV9ncGlvX2RpcmVjdGlvbl9pbnB1dCwKKwkuZGlyZWN0aW9uX291dHB1 dCA9IGF0OTFfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAorCS5nZXQgPSBhdDkxX2dwaW9fZ2V0LAor CS5zZXQgPSBhdDkxX2dwaW9fc2V0LAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQg YXQ5MV9ncGlvX2R0X2lkc1tdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJt OTIwMC1ncGlvIiwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUtZ3Bp byIsCisJfSwgeworCQkvKiBzZW50aW5lbCAqLworCX0sCit9OworCitzdGF0aWMgaW50IGF0OTFf Z3Bpb19wcm9iZShzdHJ1Y3QgZGV2aWNlX2QgKmRldikKK3sKKwlzdHJ1Y3QgYXQ5MV9ncGlvX2No aXAgKmF0OTFfZ3BpbzsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IHJldDsKKwlpbnQgYWxpYXNf aWR4ID0gb2ZfYWxpYXNfZ2V0X2lkKGRldi0+ZGV2aWNlX25vZGUsICJncGlvIik7CisKKwlCVUdf T04oZGV2LT5pZCA+IE1BWF9HUElPX0JBTktTKTsKKworCWF0OTFfZ3BpbyA9ICZncGlvX2NoaXBb YWxpYXNfaWR4XTsKKworCWNsayA9IGNsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGNs aykpIHsKKwkJcmV0ID0gUFRSX0VSUihjbGspOworCQlkZXZfZXJyKGRldiwgImNsb2NrIG5vdCBm b3VuZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gY2xrX2VuYWJs ZShjbGspOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiY2xvY2sgZmFpbGVkIHRv IGVuYWJsZTogJWRcbiIsIHJldCk7CisJCWNsa19wdXQoY2xrKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlncGlvX2JhbmtzID0gbWF4KGdwaW9fYmFua3MsIGFsaWFzX2lkeCArIDEpOworCWF0OTFf Z3Bpby0+cmVnYmFzZSA9IGRldl9yZXF1ZXN0X21lbV9yZWdpb24oZGV2LCAwKTsKKworCWF0OTFf Z3Bpby0+Y2hpcC5vcHMgPSAmYXQ5MV9ncGlvX29wczsKKwlhdDkxX2dwaW8tPmNoaXAubmdwaW8g PSBNQVhfTkJfR1BJT19QRVJfQkFOSzsKKwlhdDkxX2dwaW8tPmNoaXAuZGV2ID0gZGV2OworCWF0 OTFfZ3Bpby0+Y2hpcC5iYXNlID0gZGV2LT5pZCAqIE1BWF9OQl9HUElPX1BFUl9CQU5LOworCisJ cmV0ID0gZ3Bpb2NoaXBfYWRkKCZhdDkxX2dwaW8tPmNoaXApOworCWlmIChyZXQpIHsKKwkJZGV2 X2VycihkZXYsICJjb3VsZG4ndCBhZGQgZ3Bpb2NoaXAsIHJldCA9ICVkXG4iLCByZXQpOworCQly ZXR1cm4gcmV0OworCX0KKworCWRldl9pbmZvKGRldiwgIkFUOTEgZ3BpbyBkcml2ZXIgcmVnaXN0 ZXJlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2VfaWQgYXQ5MV9ncGlvX2lkc1tdID0geworCXsKKwkJLm5hbWUgPSAiYXQ5MXJtOTIwMC1ncGlv IiwKKwl9LCB7CisJCS5uYW1lID0gImF0OTFzYW05eDUtZ3BpbyIsCisJfSwgeworCQkvKiBzZW50 aW5lbCAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGRyaXZlcl9kIGF0OTFfZ3Bpb19kcml2 ZXIgPSB7CisJLm5hbWUgPSAiZ3Bpby1hdDkxIiwKKwkucHJvYmUgPSBhdDkxX2dwaW9fcHJvYmUs CisJLmlkX3RhYmxlID0gYXQ5MV9ncGlvX2lkcywKKwkub2ZfY29tcGF0aWJsZQk9IERSVl9PRl9D T01QQVQoYXQ5MV9ncGlvX2R0X2lkcyksCit9OworCitzdGF0aWMgaW50IGF0OTFfZ3Bpb19pbml0 KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXQ5MV9ncGlvX2Ry aXZlcik7Cit9Citjb3JlZGV2aWNlX2luaXRjYWxsKGF0OTFfZ3Bpb19pbml0KTsKLS0gCjEuNy45 LjUKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpiYXJl Ym94IG1haWxpbmcgbGlzdApiYXJlYm94QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9iYXJlYm94Cg==