From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v4 1/4] mtd: spi-nor: add memory controllers for the Aspeed AST2500 SoC Date: Mon, 12 Dec 2016 16:40:49 +0100 Message-ID: <1481557252-13656-2-git-send-email-clg@kaod.org> References: <1481557252-13656-1-git-send-email-clg@kaod.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1481557252-13656-1-git-send-email-clg@kaod.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+gldm-linux-mtd-36=gmane.org@lists.infradead.org To: linux-mtd@lists.infradead.org Cc: Mark Rutland , Boris Brezillon , devicetree@vger.kernel.org, Richard Weinberger , Marek Vasut , Rob Herring , Joel Stanley , Cyrille Pitchen , Brian Norris , David Woodhouse , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= List-Id: devicetree@vger.kernel.org VGhpcyBkcml2ZXIgYWRkcyBtdGQgc3VwcG9ydCBmb3IgdGhlIEFzcGVlZCBBU1QyNTAwIFNvQyBz dGF0aWMgbWVtb3J5CmNvbnRyb2xsZXJzIDoKCiAqIEZpcm13YXJlIFNQSSBNZW1vcnkgQ29udHJv bGxlciAoRk1DKQogICAuIEJNQyBmaXJtd2FyZQogICAuIDMgY2hpcCBzZWxlY3QgcGlucyAoQ0Uw IH4gQ0UyKQogICAuIHN1cHBvcnRzIFNQSSB0eXBlIGZsYXNoIG1lbW9yeSAoQ0UwLUNFMSkKICAg LiBDRTIgY2FuIGJlIG9mIE5PUiB0eXBlIGZsYXNoIGJ1dCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQg YnkgdGhlCiAgICAgZHJpdmVyCgogKiBTUEkgRmxhc2ggQ29udHJvbGxlciAoU1BJMSBhbmQgU1BJ MikKICAgLiBob3N0IGZpcm13YXJlCiAgIC4gMiBjaGlwIHNlbGVjdCBwaW5zIChDRTAgfiBDRTEp CiAgIC4gc3VwcG9ydHMgU1BJIHR5cGUgZmxhc2ggbWVtb3J5CgpFYWNoIGNvbnRyb2xsZXIgaGFz IGEgbWVtb3J5IHJhbmdlIG9uIHdoaWNoIGl0IG1hcHMgaXRzIGZsYXNoIG1vZHVsZQpzbGF2ZXMu IEVhY2ggc2xhdmUgaXMgYXNzaWduZWQgYSBtZW1vcnkgd2luZG93IGZvciBpdHMgbWFwcGluZyB0 aGF0CmNhbiBiZSBjaGFuZ2VkIGF0IGJvb3RpbWUgd2l0aCB0aGUgU2VnbWVudCBBZGRyZXNzIFJl Z2lzdGVyLgoKRWFjaCBTUEkgZmxhc2ggc2xhdmUgY2FuIHRoZW4gYmUgYWNjZXNzZWQgaW4gdHdv IG1vZGVzOiBDb21tYW5kIGFuZApVc2VyLiBXaGVuIGluIFVzZXIgbW9kZSwgYWNjZXNzZXMgdG8g dGhlIG1lbW9yeSBzZWdtZW50IG9mIHRoZSBzbGF2ZXMKYXJlIHRyYW5zbGF0ZWQgaW4gU1BJIHRy YW5zZmVycy4gV2hlbiBpbiBDb21tYW5kIG1vZGUsIHRoZSBIVwpnZW5lcmF0ZXMgdGhlIFNQSSBj b21tYW5kcyBhdXRvbWF0aWNhbGx5IGFuZCB0aGUgbWVtb3J5IHNlZ21lbnQgaXMKYWNjZXNzZWQg YXMgaWYgZG9pbmcgYSBNTUlPLgoKQ3VycmVudGx5LCBvbmx5IHRoZSBVc2VyIG1vZGUgaXMgc3Vw cG9ydGVkLiBDb21tYW5kIG1vZGUgbmVlZHMgYQpsaXR0bGUgbW9yZSB3b3JrIHRvIGNoZWNrIHRo YXQgdGhlIG1lbW9yeSB3aW5kb3cgb24gdGhlIEFIQiBidXMgZml0cwp0aGUgbW9kdWxlIHNpemUu CgpCYXNlZCBvbiBwcmV2aW91cyB3b3JrIGZyb20gTWlsdG9uIEQuIE1pbGxlciBJSSA8bWlsdG9u bUB1cy5pYm0uY29tPgoKU2lnbmVkLW9mZi1ieTogQ8OpZHJpYyBMZSBHb2F0ZXIgPGNsZ0BrYW9k Lm9yZz4KUmV2aWV3ZWQtYnk6IEpvZWwgU3RhbmxleSA8am9lbEBqbXMuaWQuYXU+Ci0tLQoKQ2hh bmdlcyBzaW5jZSB2MzoKIC0gcmV3b3JrZWQgSU8gcm91dGluZXMgdG8gdXNlIGlve3JlYWQsd3Jp dGV9MzJfcmVwCiAtIGNoYW5nZWQgY29uZmlnIG9wdGlvbiB0byBTUElfQVNQRUVEX1NNQwogLSBm aXhlZCBhc3BlZWRfc21jX2NoaXBfc2V0dXBfaW5pdCgpIHJldHVybmVkIHZhbHVlCiAtIG1lcmdl ZCB0aGUgdXNlIG9mIHRoZSAibGFiZWwiIHByb3BlcnR5IgoKIGRyaXZlcnMvbXRkL3NwaS1ub3Iv S2NvbmZpZyAgICAgIHwgIDEwICsKIGRyaXZlcnMvbXRkL3NwaS1ub3IvTWFrZWZpbGUgICAgIHwg ICAxICsKIGRyaXZlcnMvbXRkL3NwaS1ub3IvYXNwZWVkLXNtYy5jIHwgNzE5ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA3MzAgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbXRkL3NwaS1ub3IvYXNwZWVkLXNt Yy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvc3BpLW5vci9LY29uZmlnIGIvZHJpdmVycy9t dGQvc3BpLW5vci9LY29uZmlnCmluZGV4IDRhNjgyZWUwZjYzMi4uNDIxNjhlOWQ2MDk3IDEwMDY0 NAotLS0gYS9kcml2ZXJzL210ZC9zcGktbm9yL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvc3Bp LW5vci9LY29uZmlnCkBAIC0yOSw2ICsyOSwxNiBAQCBjb25maWcgTVREX1NQSV9OT1JfVVNFXzRL X1NFQ1RPUlMKIAkgIFBsZWFzZSBub3RlIHRoYXQgc29tZSB0b29scy9kcml2ZXJzL2ZpbGVzeXN0 ZW1zIG1heSBub3Qgd29yayB3aXRoCiAJICA0MDk2IEIgZXJhc2Ugc2l6ZSAoZS5nLiBVQklGUyBy ZXF1aXJlcyAxNSBLaUIgYXMgYSBtaW5pbXVtKS4KIAorY29uZmlnIFNQSV9BU1BFRURfU01DCisJ dHJpc3RhdGUgIkFzcGVlZCBmbGFzaCBjb250cm9sbGVycyBpbiBTUEkgbW9kZSIKKwlkZXBlbmRz IG9uIEFSQ0hfQVNQRUVEIHx8IENPTVBJTEVfVEVTVAorCWRlcGVuZHMgb24gSEFTX0lPTUVNICYm IE9GCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBGaXJtd2FyZSBNZW1v cnkgY29udHJvbGxlciAoRk1DKQorCSAgaW4gdGhlIEFzcGVlZCBBU1QyNTAwIFNvQyB3aGVuIGF0 dGFjaGVkIHRvIFNQSSBOT1IgY2hpcHMsCisJICBhbmQgc3VwcG9ydCBmb3IgdGhlIFNQSSBmbGFz aCBtZW1vcnkgY29udHJvbGxlciAoU1BJKSBmb3IKKwkgIHRoZSBob3N0IGZpcm13YXJlLiBUaGUg aW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBTUEkgTk9SLgorCiBjb25maWcgU1BJX0FUTUVM X1FVQURTUEkKIAl0cmlzdGF0ZSAiQXRtZWwgUXVhZCBTUEkgQ29udHJvbGxlciIKIAlkZXBlbmRz IG9uIEFSQ0hfQVQ5MSB8fCAoQVJNICYmIENPTVBJTEVfVEVTVCkKZGlmZiAtLWdpdCBhL2RyaXZl cnMvbXRkL3NwaS1ub3IvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9zcGktbm9yL01ha2VmaWxlCmlu ZGV4IDEyMTY5NWU4MzU0Mi4uNmZmNjRiYzdmYTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9z cGktbm9yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL3NwaS1ub3IvTWFrZWZpbGUKQEAgLTEs NCArMSw1IEBACiBvYmotJChDT05GSUdfTVREX1NQSV9OT1IpCSs9IHNwaS1ub3Iubworb2JqLSQo Q09ORklHX1NQSV9BU1BFRURfU01DKQkrPSBhc3BlZWQtc21jLm8KIG9iai0kKENPTkZJR19TUElf QVRNRUxfUVVBRFNQSSkJKz0gYXRtZWwtcXVhZHNwaS5vCiBvYmotJChDT05GSUdfU1BJX0NBREVO Q0VfUVVBRFNQSSkJKz0gY2FkZW5jZS1xdWFkc3BpLm8KIG9iai0kKENPTkZJR19TUElfRlNMX1FV QURTUEkpCSs9IGZzbC1xdWFkc3BpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3NwaS1ub3Iv YXNwZWVkLXNtYy5jIGIvZHJpdmVycy9tdGQvc3BpLW5vci9hc3BlZWQtc21jLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNjY3YWI3YWViOWIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL210ZC9zcGktbm9yL2FzcGVlZC1zbWMuYwpAQCAtMCwwICsxLDcxOSBA QAorLyoKKyAqIEFTUEVFRCBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgZHJpdmVyCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KKyNpbmNsdWRl IDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbXRk L210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGlu dXgvbXRkL3NwaS1ub3IuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4 L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKworI2RlZmluZSBERVZJ Q0VfTkFNRQkiYXNwZWVkLXNtYyIKKworLyoKKyAqIFRoZSBkcml2ZXIgb25seSBzdXBwb3J0IFNQ SSBmbGFzaAorICovCitlbnVtIGFzcGVlZF9zbWNfZmxhc2hfdHlwZSB7CisJc21jX3R5cGVfbm9y ICA9IDAsCisJc21jX3R5cGVfbmFuZCA9IDEsCisJc21jX3R5cGVfc3BpICA9IDIsCit9OworCitz dHJ1Y3QgYXNwZWVkX3NtY19jaGlwOworCitzdHJ1Y3QgYXNwZWVkX3NtY19pbmZvIHsKKwl1MzIg bWF4c2l6ZTsJCS8qIG1heGltdW0gc2l6ZSBvZiBjaGlwIHdpbmRvdyAqLworCXU4IG5jZTsJCQkv KiBudW1iZXIgb2YgY2hpcCBlbmFibGVzICovCisJYm9vbCBoYXN0eXBlOwkJLyogZmxhc2ggdHlw ZSBmaWVsZCBleGlzdHMgaW4gY29uZmlnIHJlZyAqLworCXU4IHdlMDsJCQkvKiBzaGlmdCBmb3Ig d3JpdGUgZW5hYmxlIGJpdCBmb3IgQ0UwICovCisJdTggY3RsMDsJCS8qIG9mZnNldCBpbiByZWdz IG9mIGN0bCBmb3IgQ0UwICovCisKKwl2b2lkICgqc2V0XzRiKShzdHJ1Y3QgYXNwZWVkX3NtY19j aGlwICpjaGlwKTsKK307CisKK3N0YXRpYyB2b2lkIGFzcGVlZF9zbWNfY2hpcF9zZXRfNGIoc3Ry dWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXNwZWVk X3NtY19pbmZvIGZtY18yNTAwX2luZm8gPSB7CisJLm1heHNpemUgPSAyNTYgKiAxMDI0ICogMTAy NCwKKwkubmNlID0gMywKKwkuaGFzdHlwZSA9IHRydWUsCisJLndlMCA9IDE2LAorCS5jdGwwID0g MHgxMCwKKwkuc2V0XzRiID0gYXNwZWVkX3NtY19jaGlwX3NldF80YiwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgYXNwZWVkX3NtY19pbmZvIHNwaV8yNTAwX2luZm8gPSB7CisJLm1heHNpemUg PSAxMjggKiAxMDI0ICogMTAyNCwKKwkubmNlID0gMiwKKwkuaGFzdHlwZSA9IGZhbHNlLAorCS53 ZTAgPSAxNiwKKwkuY3RsMCA9IDB4MTAsCisJLnNldF80YiA9IGFzcGVlZF9zbWNfY2hpcF9zZXRf NGIsCit9OworCitlbnVtIGFzcGVlZF9zbWNfY3RsX3JlZ192YWx1ZSB7CisJc21jX2Jhc2UsCQkv KiBiYXNlIHZhbHVlIHdpdGhvdXQgbW9kZSBmb3Igb3RoZXIgY29tbWFuZHMgKi8KKwlzbWNfcmVh ZCwJCS8qIGNvbW1hbmQgcmVnIGZvciAobWF5YmUgZmFzdCkgcmVhZHMgKi8KKwlzbWNfd3JpdGUs CQkvKiBjb21tYW5kIHJlZyBmb3Igd3JpdGVzICovCisJc21jX21heCwKK307CisKK3N0cnVjdCBh c3BlZWRfc21jX2NvbnRyb2xsZXI7CisKK3N0cnVjdCBhc3BlZWRfc21jX2NoaXAgeworCWludCBj czsKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jb250cm9sbGVyICpjb250cm9sbGVyOworCXZvaWQgX19p b21lbSAqY3RsOwkJCS8qIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwl2b2lkIF9faW9tZW0gKmFoYl9i YXNlOwkJCS8qIGJhc2Ugb2YgY2hpcCB3aW5kb3cgKi8KKwl1MzIgY3RsX3ZhbFtzbWNfbWF4XTsJ CQkvKiBjb250cm9sIHNldHRpbmdzICovCisJZW51bSBhc3BlZWRfc21jX2ZsYXNoX3R5cGUgdHlw ZTsJLyogd2hhdCB0eXBlIG9mIGZsYXNoICovCisJc3RydWN0IHNwaV9ub3Igbm9yOworfTsKKwor c3RydWN0IGFzcGVlZF9zbWNfY29udHJvbGxlciB7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJ c3RydWN0IG11dGV4IG11dGV4OwkJCS8qIGNvbnRyb2xsZXIgYWNjZXNzIG11dGV4ICovCisJY29u c3Qgc3RydWN0IGFzcGVlZF9zbWNfaW5mbyAqaW5mbzsJLyogdHlwZSBpbmZvIG9mIGNvbnRyb2xs ZXIgKi8KKwl2b2lkIF9faW9tZW0gKnJlZ3M7CQkJLyogY29udHJvbGxlciByZWdpc3RlcnMgKi8K Kwl2b2lkIF9faW9tZW0gKmFoYl9iYXNlOwkJCS8qIHBlci1jaGlwIHdpbmRvd3MgcmVzb3VyY2Ug Ki8KKworCXN0cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNoaXBzWzBdOwkvKiBwb2ludGVycyB0byBh dHRhY2hlZCBjaGlwcyAqLworfTsKKworLyoKKyAqIFNQSSBGbGFzaCBDb25maWd1cmF0aW9uIFJl Z2lzdGVyIChBU1QyNTAwIFNQSSkKKyAqICAgICBvcgorICogVHlwZSBzZXR0aW5nIFJlZ2lzdGVy IChBU1QyNTAwIEZNQykuCisgKiBDRTAgYW5kIENFMSBjYW4gb25seSBiZSBvZiB0eXBlIFNQSS4g Q0UyIGNhbiBiZSBvZiB0eXBlIE5PUiBidXQgdGhlCisgKiBkcml2ZXIgZG9lcyBub3Qgc3VwcG9y dCBpdC4KKyAqLworI2RlZmluZSBDT05GSUdfUkVHCQkJMHgwCisjZGVmaW5lIENPTkZJR19ESVNB QkxFX0xFR0FDWQkJQklUKDMxKSAvKiAxICovCisKKyNkZWZpbmUgQ09ORklHX0NFMl9XUklURQkJ QklUKDE4KQorI2RlZmluZSBDT05GSUdfQ0UxX1dSSVRFCQlCSVQoMTcpCisjZGVmaW5lIENPTkZJ R19DRTBfV1JJVEUJCUJJVCgxNikKKworI2RlZmluZSBDT05GSUdfQ0UyX1RZUEUJCQlCSVQoNCkg LyogQVNUMjUwMCBGTUMgb25seSAqLworI2RlZmluZSBDT05GSUdfQ0UxX1RZUEUJCQlCSVQoMikg LyogQVNUMjUwMCBGTUMgb25seSAqLworI2RlZmluZSBDT05GSUdfQ0UwX1RZUEUJCQlCSVQoMCkg LyogQVNUMjUwMCBGTUMgb25seSAqLworCisvKgorICogQ0UgQ29udHJvbCBSZWdpc3RlcgorICov CisjZGVmaW5lIENFX0NPTlRST0xfUkVHCQkJMHg0CisKKy8qCisgKiBDRXggQ29udHJvbCBSZWdp c3RlcgorICovCisjZGVmaW5lIENPTlRST0xfQUFGX01PREUJCUJJVCgzMSkKKyNkZWZpbmUgQ09O VFJPTF9JT19NT0RFX01BU0sJCUdFTk1BU0soMzAsIDI4KQorI2RlZmluZSBDT05UUk9MX0lPX0RV QUxfREFUQQkJQklUKDI5KQorI2RlZmluZSBDT05UUk9MX0lPX0RVQUxfQUREUl9EQVRBCShCSVQo MjkpIHwgQklUKDI4KSkKKyNkZWZpbmUgQ09OVFJPTF9JT19RVUFEX0RBVEEJCUJJVCgzMCkKKyNk ZWZpbmUgQ09OVFJPTF9JT19RVUFEX0FERFJfREFUQQkoQklUKDMwKSB8IEJJVCgyOCkpCisjZGVm aW5lIENPTlRST0xfQ0VfSU5BQ1RJVkVfU0hJRlQJMjQKKyNkZWZpbmUgQ09OVFJPTF9DRV9JTkFD VElWRV9NQVNLCUdFTk1BU0soMjcsIFwKKwkJCQkJQ09OVFJPTF9DRV9JTkFDVElWRV9TSElGVCkK Ky8qIDAgPSAxNlQgLi4uIDE1ID0gMVQgICBUPUhDTEsgKi8KKyNkZWZpbmUgQ09OVFJPTF9DT01N QU5EX1NISUZUCQkxNgorI2RlZmluZSBDT05UUk9MX0RVTU1ZX0NPTU1BTkRfT1VUCUJJVCgxNSkK KyNkZWZpbmUgQ09OVFJPTF9JT19EVU1NWV9ISQkJQklUKDE0KQorI2RlZmluZSBDT05UUk9MX0lP X0RVTU1ZX0hJX1NISUZUCTE0CisjZGVmaW5lIENPTlRST0xfQ0xLX0RJVjQJCUJJVCgxMykgLyog b3RoZXJzICovCisjZGVmaW5lIENPTlRST0xfUldfTUVSR0UJCUJJVCgxMikKKyNkZWZpbmUgQ09O VFJPTF9JT19EVU1NWV9MT19TSElGVAk2CisjZGVmaW5lIENPTlRST0xfSU9fRFVNTVlfTE8JCUdF Tk1BU0soNywgXAorCQkJCQkJQ09OVFJPTF9JT19EVU1NWV9MT19TSElGVCkKKyNkZWZpbmUgQ09O VFJPTF9JT19EVU1NWV9NQVNLCQkoQ09OVFJPTF9JT19EVU1NWV9ISSB8IFwKKwkJCQkJIENPTlRS T0xfSU9fRFVNTVlfTE8pCisjZGVmaW5lIENPTlRST0xfSU9fRFVNTVlfU0VUKGR1bW15KQkJCQkg XAorCSgoKCgoZHVtbXkpID4+IDIpICYgMHgxKSA8PCBDT05UUk9MX0lPX0RVTU1ZX0hJX1NISUZU KSB8IFwKKwkgKCgoZHVtbXkpICYgMHgzKSA8PCBDT05UUk9MX0lPX0RVTU1ZX0xPX1NISUZUKSkK KworI2RlZmluZSBDT05UUk9MX0NMT0NLX0ZSRVFfU0VMX1NISUZUCTgKKyNkZWZpbmUgQ09OVFJP TF9DTE9DS19GUkVRX1NFTF9NQVNLCUdFTk1BU0soMTEsIFwKKwkJCQkJCUNPTlRST0xfQ0xPQ0tf RlJFUV9TRUxfU0hJRlQpCisjZGVmaW5lIENPTlRST0xfTFNCX0ZJUlNUCQlCSVQoNSkKKyNkZWZp bmUgQ09OVFJPTF9DTE9DS19NT0RFXzMJCUJJVCg0KQorI2RlZmluZSBDT05UUk9MX0lOX0RVQUxf REFUQQkJQklUKDMpCisjZGVmaW5lIENPTlRST0xfQ0VfU1RPUF9BQ1RJVkVfQ09OVFJPTAlCSVQo MikKKyNkZWZpbmUgQ09OVFJPTF9DT01NQU5EX01PREVfTUFTSwlHRU5NQVNLKDEsIDApCisjZGVm aW5lIENPTlRST0xfQ09NTUFORF9NT0RFX05PUk1BTAkwCisjZGVmaW5lIENPTlRST0xfQ09NTUFO RF9NT0RFX0ZSRUFECTEKKyNkZWZpbmUgQ09OVFJPTF9DT01NQU5EX01PREVfV1JJVEUJMgorI2Rl ZmluZSBDT05UUk9MX0NPTU1BTkRfTU9ERV9VU0VSCTMKKworI2RlZmluZSBDT05UUk9MX0tFRVBf TUFTSwkJCQkJCVwKKwkoQ09OVFJPTF9BQUZfTU9ERSB8IENPTlRST0xfQ0VfSU5BQ1RJVkVfTUFT SyB8IENPTlRST0xfQ0xLX0RJVjQgfCBcCisJIENPTlRST0xfSU9fRFVNTVlfTUFTSyB8IENPTlRS T0xfQ0xPQ0tfRlJFUV9TRUxfTUFTSyB8CQlcCisJIENPTlRST0xfTFNCX0ZJUlNUIHwgQ09OVFJP TF9DTE9DS19NT0RFXzMpCisKKy8qCisgKiBUaGUgU2VnbWVudCBSZWdpc3RlciB1c2VzIGEgOE1C IHVuaXQgdG8gZW5jb2RlIHRoZSBzdGFydCBhZGRyZXNzCisgKiBhbmQgdGhlIGVuZCBhZGRyZXNz IG9mIHRoZSBtYXBwaW5nIHdpbmRvdyBvZiBhIGZsYXNoIFNQSSBzbGF2ZSA6CisgKgorICogICAg ICAgIHwgYnl0ZSAxIHwgYnl0ZSAyIHwgYnl0ZSAzIHwgYnl0ZSA0IHwKKyAqICAgICAgICArLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisgKiAgICAgICAgfCAgZW5kICAgfCAg c3RhcnQgfCAgIDAgICAgfCAgIDAgICAgfAorICovCisjZGVmaW5lIFNFR01FTlRfQUREUl9SRUcw CQkweDMwCisjZGVmaW5lIFNFR01FTlRfQUREUl9TVEFSVChfcikJCSgoKChfcikgPj4gMTYpICYg MHhGRikgPDwgMjMpCisjZGVmaW5lIFNFR01FTlRfQUREUl9FTkQoX3IpCQkoKCgoX3IpID4+IDI0 KSAmIDB4RkYpIDw8IDIzKQorCisvKgorICogSW4gdXNlciBtb2RlIGFsbCBkYXRhIGJ5dGVzIHJl YWQgb3Igd3JpdHRlbiB0byB0aGUgY2hpcCBkZWNvZGUgYWRkcmVzcworICogcmFuZ2UgYXJlIHRy YW5zZmVycmVkIHRvIG9yIGZyb20gdGhlIFNQSSBidXMuIFRoZSByYW5nZSBpcyB0cmVhdGVkIGFz IGEKKyAqIGZpZm8gb2YgYXJiaXRyYXRyeSAxLCAyLCBvciA0IGJ5dGUgd2lkdGggYnV0IGVhY2gg d3JpdGUgaGFzIHRvIGJlIGFsaWduZWQKKyAqIHRvIGl0cyBzaXplLiBUaGUgYWRkcmVzcyB3aXRo aW4gdGhlIG11bHRpcGxlIDhrQiByYW5nZSBpcyBpZ25vcmVkIHdoZW4KKyAqIHNlbmRpbmcgYnl0 ZXMgdG8gdGhlIFNQSSBidXMuCisgKgorICogT24gdGhlIGFybSBhcmNoaXRlY3R1cmUsIGFzIG9m IExpbnV4IHZlcnNpb24gNC4zLCBtZW1jcHlfZnJvbWlvIGFuZAorICogbWVtY3B5X3RvaW8gb24g bGl0dGxlIGVuZGlhbiB0YXJnZXRzIHVzZSB0aGUgb3B0aW1pemVkIG1lbWNweSByb3V0aW5lcwor ICogdGhhdCB3ZXJlIGRlc2lnbmVkIGZvciB3ZWxsIGJlaGF2aWVkIG1lbW9yeSBzdG9yYWdlLiBU aGVzZSByb3V0aW5lcworICogaGF2ZSBhIHN0dXR0ZXIgaWYgdGhlIHNvdXJjZSBhbmQgZGVzdGlu YXRpb24gYXJlIG5vdCBib3RoIHdvcmQgYWxpZ25lZCwKKyAqIG9uY2Ugd2l0aCBhIGR1cGxpY2F0 ZSBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBhZnRlciBhbGlnbmluZyB0byB0aGUKKyAqIGRlc3RpbmF0 aW9uIHRvIGEgd29yZCBib3VuZGFyeSwgYW5kIGFnYWluIHdpdGggYSBkdXBsaWNhdGUgYWNjZXNz IHRvCisgKiB0aGUgc291cmNlIHdoZW4gdGhlIGZpbmFsIGJ5dGUgY291bnQgaXMgbm90IHdvcmQg YWxpZ25lZC4KKyAqCisgKiBXaGVuIHdyaXRpbmcgb3IgcmVhZGluZyB0aGUgZmlmbyB0aGlzIHN0 dXR0ZXIgZGlzY2FyZHMgZGF0YSBvciBzZW5kcworICogdG9vIG11Y2ggZGF0YSB0byB0aGUgZmlm byBhbmQgY2FuIG5vdCBiZSB1c2VkIGJ5IHRoaXMgZHJpdmVyLgorICoKKyAqIFdoaWxlIHRoZSBs b3cgbGV2ZWwgaW8gc3RyaW5nIHJvdXRpbmVzIHRoYXQgaW1wbGVtZW50IHRoZSBpbnNsIGZhbWls eSBkbworICogdGhlIGRlc2lyZWQgYWNjZXNzZXMgYW5kIG1lbW9yeSBpbmNyZW1lbnRzLCB0aGUg Y3Jvc3MgYXJjaGl0ZWN0dXJlIGlvCisgKiBtYWNyb3MgbWFrZSB0aGVtIGVzc2VudGlhbGx5IGlt cG9zc2libGUgdG8gdXNlIG9uIGEgbWVtb3J5IG1hcHBlZCBhZGRyZXNzCisgKiBpbnN0ZWFkIG9m IGEgYSB0b2tlbiBmcm9tIHRoZSBjYWxsIHRvIGlvbWFwIG9mIGFuIGlvIHBvcnQuCisgKgorICog VGhlc2UgZmlmbyByb3V0aW5lcyB1c2UgcmVhZGwgYW5kIGZyaWVuZHMgdG8gYSBjb25zdGFudCBp byBwb3J0IGFuZCB1cGRhdGUKKyAqIHRoZSBtZW1vcnkgYnVmZmVyIHBvaW50ZXIgYW5kIGNvdW50 IHZpYSBleHBsaWNpdCBjb2RlLiBUaGUgZmluYWwgdXBkYXRlcworICogdG8gbGVuIGFyZSBvcHRp bWlzdGljYWxseSBzdXBwcmVzc2VkLgorICovCitzdGF0aWMgaW50IGFzcGVlZF9zbWNfcmVhZF9m cm9tX2FoYih2b2lkICpidWYsIGNvbnN0IHZvaWQgX19pb21lbSAqc3JjLAorCQkJCSAgICBzaXpl X3QgbGVuKQoreworCWlmIChJU19BTElHTkVEKCh1aW50cHRyX3Qpc3JjLCBzaXplb2YodWludHB0 cl90KSkgJiYKKwkgICAgSVNfQUxJR05FRCgodWludHB0cl90KWJ1Ziwgc2l6ZW9mKHVpbnRwdHJf dCkpICYmCisJICAgIElTX0FMSUdORUQobGVuLCBzaXplb2YodTMyKSkpIHsKKwkJaW9yZWFkMzJf cmVwKHNyYywgYnVmLCBsZW4gPj4gMik7CisJfSBlbHNlIHsKKwkJaW9yZWFkOF9yZXAoc3JjLCBi dWYsIGxlbik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFzcGVlZF9zbWNfd3Jp dGVfdG9fYWhiKHZvaWQgX19pb21lbSAqZHN0LCBjb25zdCB2b2lkICpidWYsCisJCQkJICAgc2l6 ZV90IGxlbikKK3sKKwlpZiAoSVNfQUxJR05FRCgodWludHB0cl90KWRzdCwgc2l6ZW9mKHVpbnRw dHJfdCkpICYmCisJICAgIElTX0FMSUdORUQoKHVpbnRwdHJfdClidWYsIHNpemVvZih1aW50cHRy X3QpKSAmJgorCSAgICBJU19BTElHTkVEKGxlbiwgc2l6ZW9mKHUzMikpKSB7CisJCWlvd3JpdGUz Ml9yZXAoZHN0LCBidWYsIGxlbiA+PiAyKTsKKwl9IGVsc2UgeworCQlpb3dyaXRlOF9yZXAoZHN0 LCBidWYsIGxlbik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBhc3Bl ZWRfc21jX2NoaXBfd3JpdGVfYml0KHN0cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNoaXApCit7CisJ cmV0dXJuIEJJVChjaGlwLT5jb250cm9sbGVyLT5pbmZvLT53ZTAgKyBjaGlwLT5jcyk7Cit9CisK K3N0YXRpYyB2b2lkIGFzcGVlZF9zbWNfY2hpcF9jaGVja19jb25maWcoc3RydWN0IGFzcGVlZF9z bWNfY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jb250cm9sbGVyICpjb250cm9s bGVyID0gY2hpcC0+Y29udHJvbGxlcjsKKwl1MzIgcmVnOworCisJcmVnID0gcmVhZGwoY29udHJv bGxlci0+cmVncyArIENPTkZJR19SRUcpOworCisJaWYgKHJlZyAmIGFzcGVlZF9zbWNfY2hpcF93 cml0ZV9iaXQoY2hpcCkpCisJCXJldHVybjsKKworCWRldl9kYmcoY29udHJvbGxlci0+ZGV2LCAi Y29uZmlnIHdyaXRlIGlzIG5vdCBzZXQgISBAJXA6IDB4JTA4eFxuIiwKKwkJY29udHJvbGxlci0+ cmVncyArIENPTkZJR19SRUcsIHJlZyk7CisJcmVnIHw9IGFzcGVlZF9zbWNfY2hpcF93cml0ZV9i aXQoY2hpcCk7CisJd3JpdGVsKHJlZywgY29udHJvbGxlci0+cmVncyArIENPTkZJR19SRUcpOwor fQorCitzdGF0aWMgdm9pZCBhc3BlZWRfc21jX3N0YXJ0X3VzZXIoc3RydWN0IHNwaV9ub3IgKm5v cikKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwID0gbm9yLT5wcml2OworCXUzMiBj dGwgPSBjaGlwLT5jdGxfdmFsW3NtY19iYXNlXTsKKworCS8qCisJICogV2hlbiB0aGUgY2hpcCBp cyBjb250cm9sbGVkIGluIHVzZXIgbW9kZSwgd2UgbmVlZCB3cml0ZQorCSAqIGFjY2VzcyB0byBz ZW5kIHRoZSBvcGNvZGVzIHRvIGl0LiBTbyBjaGVjayB0aGUgY29uZmlnLgorCSAqLworCWFzcGVl ZF9zbWNfY2hpcF9jaGVja19jb25maWcoY2hpcCk7CisKKwljdGwgfD0gQ09OVFJPTF9DT01NQU5E X01PREVfVVNFUiB8CisJCUNPTlRST0xfQ0VfU1RPUF9BQ1RJVkVfQ09OVFJPTDsKKwl3cml0ZWwo Y3RsLCBjaGlwLT5jdGwpOworCisJY3RsICY9IH5DT05UUk9MX0NFX1NUT1BfQUNUSVZFX0NPTlRS T0w7CisJd3JpdGVsKGN0bCwgY2hpcC0+Y3RsKTsKK30KKworc3RhdGljIHZvaWQgYXNwZWVkX3Nt Y19zdG9wX3VzZXIoc3RydWN0IHNwaV9ub3IgKm5vcikKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19j aGlwICpjaGlwID0gbm9yLT5wcml2OworCisJdTMyIGN0bCA9IGNoaXAtPmN0bF92YWxbc21jX3Jl YWRdOworCXUzMiBjdGwyID0gY3RsIHwgQ09OVFJPTF9DT01NQU5EX01PREVfVVNFUiB8CisJCUNP TlRST0xfQ0VfU1RPUF9BQ1RJVkVfQ09OVFJPTDsKKworCXdyaXRlbChjdGwyLCBjaGlwLT5jdGwp OwkvKiBzdG9wIHVzZXIgQ0UgY29udHJvbCAqLworCXdyaXRlbChjdGwsIGNoaXAtPmN0bCk7CQkv KiBkZWZhdWx0IHRvIGZyZWFkIG9yIHJlYWQgbW9kZSAqLworfQorCitzdGF0aWMgaW50IGFzcGVl ZF9zbWNfcHJlcChzdHJ1Y3Qgc3BpX25vciAqbm9yLCBlbnVtIHNwaV9ub3Jfb3BzIG9wcykKK3sK KwlzdHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwID0gbm9yLT5wcml2OworCisJbXV0ZXhfbG9j aygmY2hpcC0+Y29udHJvbGxlci0+bXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBhc3BlZWRfc21jX3VucHJlcChzdHJ1Y3Qgc3BpX25vciAqbm9yLCBlbnVtIHNwaV9ub3Jfb3Bz IG9wcykKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwID0gbm9yLT5wcml2OworCisJ bXV0ZXhfdW5sb2NrKCZjaGlwLT5jb250cm9sbGVyLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQg YXNwZWVkX3NtY19yZWFkX3JlZyhzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1OCBvcGNvZGUsIHU4ICpi dWYsIGludCBsZW4pCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcCA9IG5vci0+cHJp djsKKworCWFzcGVlZF9zbWNfc3RhcnRfdXNlcihub3IpOworCWFzcGVlZF9zbWNfd3JpdGVfdG9f YWhiKGNoaXAtPmFoYl9iYXNlLCAmb3Bjb2RlLCAxKTsKKwlhc3BlZWRfc21jX3JlYWRfZnJvbV9h aGIoYnVmLCBjaGlwLT5haGJfYmFzZSwgbGVuKTsKKwlhc3BlZWRfc21jX3N0b3BfdXNlcihub3Ip OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFzcGVlZF9zbWNfd3JpdGVfcmVnKHN0cnVj dCBzcGlfbm9yICpub3IsIHU4IG9wY29kZSwgdTggKmJ1ZiwKKwkJCQlpbnQgbGVuKQoreworCXN0 cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNoaXAgPSBub3ItPnByaXY7CisKKwlhc3BlZWRfc21jX3N0 YXJ0X3VzZXIobm9yKTsKKwlhc3BlZWRfc21jX3dyaXRlX3RvX2FoYihjaGlwLT5haGJfYmFzZSwg Jm9wY29kZSwgMSk7CisJYXNwZWVkX3NtY193cml0ZV90b19haGIoY2hpcC0+YWhiX2Jhc2UsIGJ1 ZiwgbGVuKTsKKwlhc3BlZWRfc21jX3N0b3BfdXNlcihub3IpOworCXJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCBhc3BlZWRfc21jX3NlbmRfY21kX2FkZHIoc3RydWN0IHNwaV9ub3IgKm5vciwg dTggY21kLCB1MzIgYWRkcikKK3sKKwlzdHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwID0gbm9y LT5wcml2OworCV9fYmUzMiB0ZW1wOworCXUzMiBjbWRhZGRyOworCisJc3dpdGNoIChub3ItPmFk ZHJfd2lkdGgpIHsKKwlkZWZhdWx0OgorCQlXQVJOX09OQ0UoMSwgIlVuZXhwZWN0ZWQgYWRkcmVz cyB3aWR0aCAldSwgZGVmYXVsdGluZyB0byAzXG4iLAorCQkJICBub3ItPmFkZHJfd2lkdGgpOwor CQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgMzoKKwkJY21kYWRkciA9IGFkZHIgJiAweEZGRkZG RjsKKwkJY21kYWRkciB8PSBjbWQgPDwgMjQ7CisKKwkJdGVtcCA9IGNwdV90b19iZTMyKGNtZGFk ZHIpOworCQlhc3BlZWRfc21jX3dyaXRlX3RvX2FoYihjaGlwLT5haGJfYmFzZSwgJnRlbXAsIDQp OworCQlicmVhazsKKwljYXNlIDQ6CisJCXRlbXAgPSBjcHVfdG9fYmUzMihhZGRyKTsKKwkJYXNw ZWVkX3NtY193cml0ZV90b19haGIoY2hpcC0+YWhiX2Jhc2UsICZjbWQsIDEpOworCQlhc3BlZWRf c21jX3dyaXRlX3RvX2FoYihjaGlwLT5haGJfYmFzZSwgJnRlbXAsIDQpOworCQlicmVhazsKKwl9 Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFzcGVlZF9zbWNfcmVhZF91c2VyKHN0cnVjdCBzcGlfbm9y ICpub3IsIGxvZmZfdCBmcm9tLAorCQkJCSAgICBzaXplX3QgbGVuLCB1X2NoYXIgKnJlYWRfYnVm KQoreworCXN0cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNoaXAgPSBub3ItPnByaXY7CisKKwlhc3Bl ZWRfc21jX3N0YXJ0X3VzZXIobm9yKTsKKwlhc3BlZWRfc21jX3NlbmRfY21kX2FkZHIobm9yLCBu b3ItPnJlYWRfb3Bjb2RlLCBmcm9tKTsKKwlhc3BlZWRfc21jX3JlYWRfZnJvbV9haGIocmVhZF9i dWYsIGNoaXAtPmFoYl9iYXNlLCBsZW4pOworCWFzcGVlZF9zbWNfc3RvcF91c2VyKG5vcik7CisJ cmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgYXNwZWVkX3NtY193cml0ZV91c2VyKHN0 cnVjdCBzcGlfbm9yICpub3IsIGxvZmZfdCB0bywKKwkJCQkgICAgIHNpemVfdCBsZW4sIGNvbnN0 IHVfY2hhciAqd3JpdGVfYnVmKQoreworCXN0cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNoaXAgPSBu b3ItPnByaXY7CisKKwlhc3BlZWRfc21jX3N0YXJ0X3VzZXIobm9yKTsKKwlhc3BlZWRfc21jX3Nl bmRfY21kX2FkZHIobm9yLCBub3ItPnByb2dyYW1fb3Bjb2RlLCB0byk7CisJYXNwZWVkX3NtY193 cml0ZV90b19haGIoY2hpcC0+YWhiX2Jhc2UsIHdyaXRlX2J1ZiwgbGVuKTsKKwlhc3BlZWRfc21j X3N0b3BfdXNlcihub3IpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgYXNwZWVkX3Nt Y191bnJlZ2lzdGVyKHN0cnVjdCBhc3BlZWRfc21jX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIpCit7 CisJc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAqY2hpcDsKKwlpbnQgbjsKKworCWZvciAobiA9IDA7 IG4gPCBjb250cm9sbGVyLT5pbmZvLT5uY2U7IG4rKykgeworCQljaGlwID0gY29udHJvbGxlci0+ Y2hpcHNbbl07CisJCWlmIChjaGlwKQorCQkJbXRkX2RldmljZV91bnJlZ2lzdGVyKCZjaGlwLT5u b3IubXRkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhc3BlZWRfc21jX3Jl bW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGFzcGVlZF9zbWNf dW5yZWdpc3RlcihwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpKTsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXNwZWVkX3NtY19tYXRjaGVzW10gPSB7CisJeyAuY29tcGF0 aWJsZSA9ICJhc3BlZWQsYXN0MjUwMC1mbWMiLCAuZGF0YSA9ICZmbWNfMjUwMF9pbmZvIH0sCisJ eyAuY29tcGF0aWJsZSA9ICJhc3BlZWQsYXN0MjUwMC1zcGkiLCAuZGF0YSA9ICZzcGlfMjUwMF9p bmZvIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXNwZWVkX3NtY19tYXRj aGVzKTsKKworLyoKKyAqIEVhY2ggY2hpcCBoYXMgYSBtYXBwaW5nIHdpbmRvdyBkZWZpbmVkIGJ5 IGEgc2VnbWVudCBhZGRyZXNzCisgKiByZWdpc3RlciBkZWZpbmluZyBhIHN0YXJ0IGFuZCBhbiBl bmQgYWRkcmVzcyBvbiB0aGUgQUhCIGJ1cy4gVGhlc2UKKyAqIGFkZHJlc3NlcyBjYW4gYmUgY29u ZmlndXJlZCB0byBmaXQgdGhlIGNoaXAgc2l6ZSBhbmQgb2ZmZXIgYQorICogY29udGlndW91cyBt ZW1vcnkgcmVnaW9uIGFjcm9zcyBjaGlwcy4gRm9yIHRoZSBtb21lbnQsIHdlIG9ubHkKKyAqIGNo ZWNrIHRoYXQgZWFjaCBjaGlwIHNlZ21lbnQgaXMgdmFsaWQuCisgKi8KK3N0YXRpYyB2b2lkIF9f aW9tZW0gKmFzcGVlZF9zbWNfY2hpcF9iYXNlKHN0cnVjdCBhc3BlZWRfc21jX2NoaXAgKmNoaXAs CisJCQkJCSAgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY29u dHJvbGxlciAqY29udHJvbGxlciA9IGNoaXAtPmNvbnRyb2xsZXI7CisJdTMyIG9mZnNldCA9IDA7 CisJdTMyIHJlZzsKKworCWlmIChjb250cm9sbGVyLT5pbmZvLT5uY2UgPiAxKSB7CisJCXJlZyA9 IHJlYWRsKGNvbnRyb2xsZXItPnJlZ3MgKyBTRUdNRU5UX0FERFJfUkVHMCArCisJCQkgICAgY2hp cC0+Y3MgKiA0KTsKKworCQlpZiAoU0VHTUVOVF9BRERSX1NUQVJUKHJlZykgPj0gU0VHTUVOVF9B RERSX0VORChyZWcpKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJb2Zmc2V0ID0gU0VHTUVOVF9BRERS X1NUQVJUKHJlZykgLSByZXMtPnN0YXJ0OworCX0KKworCXJldHVybiBjb250cm9sbGVyLT5haGJf YmFzZSArIG9mZnNldDsKK30KKworc3RhdGljIHZvaWQgYXNwZWVkX3NtY19jaGlwX2VuYWJsZV93 cml0ZShzdHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwKQoreworCXN0cnVjdCBhc3BlZWRfc21j X2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBjaGlwLT5jb250cm9sbGVyOworCXUzMiByZWc7CisK KwlyZWcgPSByZWFkbChjb250cm9sbGVyLT5yZWdzICsgQ09ORklHX1JFRyk7CisKKwlyZWcgfD0g YXNwZWVkX3NtY19jaGlwX3dyaXRlX2JpdChjaGlwKTsKKwl3cml0ZWwocmVnLCBjb250cm9sbGVy LT5yZWdzICsgQ09ORklHX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIGFzcGVlZF9zbWNfY2hpcF9z ZXRfdHlwZShzdHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwLCBpbnQgdHlwZSkKK3sKKwlzdHJ1 Y3QgYXNwZWVkX3NtY19jb250cm9sbGVyICpjb250cm9sbGVyID0gY2hpcC0+Y29udHJvbGxlcjsK Kwl1MzIgcmVnOworCisJY2hpcC0+dHlwZSA9IHR5cGU7CisKKwlyZWcgPSByZWFkbChjb250cm9s bGVyLT5yZWdzICsgQ09ORklHX1JFRyk7CisJcmVnICY9IH4oMyA8PCAoY2hpcC0+Y3MgKiAyKSk7 CisJcmVnIHw9IGNoaXAtPnR5cGUgPDwgKGNoaXAtPmNzICogMik7CisJd3JpdGVsKHJlZywgY29u dHJvbGxlci0+cmVncyArIENPTkZJR19SRUcpOworfQorCisvKgorICogVGhlIEFTVDI1MDAgRk1D IGZsYXNoIGNvbnRyb2xsZXIgc2hvdWxkIGJlIHN0cmFwcGVkIGJ5IGhhcmR3YXJlLCBvcgorICog YXV0b2RldGVjdGVkLCBidXQgdGhlIEFTVDI1MDAgU1BJIGZsYXNoIG5lZWRzIHRvIGJlIHNldC4K KyAqLworc3RhdGljIHZvaWQgYXNwZWVkX3NtY19jaGlwX3NldF80YihzdHJ1Y3QgYXNwZWVkX3Nt Y19jaGlwICpjaGlwKQoreworCXN0cnVjdCBhc3BlZWRfc21jX2NvbnRyb2xsZXIgKmNvbnRyb2xs ZXIgPSBjaGlwLT5jb250cm9sbGVyOworCXUzMiByZWc7CisKKwlpZiAoY2hpcC0+Y29udHJvbGxl ci0+aW5mbyA9PSAmc3BpXzI1MDBfaW5mbykgeworCQlyZWcgPSByZWFkbChjb250cm9sbGVyLT5y ZWdzICsgQ0VfQ09OVFJPTF9SRUcpOworCQlyZWcgfD0gMSA8PCBjaGlwLT5jczsKKwkJd3JpdGVs KHJlZywgY29udHJvbGxlci0+cmVncyArIENFX0NPTlRST0xfUkVHKTsKKwl9Cit9CisKK3N0YXRp YyBpbnQgYXNwZWVkX3NtY19jaGlwX3NldHVwX2luaXQoc3RydWN0IGFzcGVlZF9zbWNfY2hpcCAq Y2hpcCwKKwkJCQkgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwlzdHJ1Y3QgYXNwZWVk X3NtY19jb250cm9sbGVyICpjb250cm9sbGVyID0gY2hpcC0+Y29udHJvbGxlcjsKKwljb25zdCBz dHJ1Y3QgYXNwZWVkX3NtY19pbmZvICppbmZvID0gY29udHJvbGxlci0+aW5mbzsKKwl1MzIgcmVn LCBiYXNlX3JlZzsKKworCS8qCisJICogQWx3YXlzIHR1cm4gb24gdGhlIHdyaXRlIGVuYWJsZSBi aXQgdG8gYWxsb3cgb3Bjb2RlcyB0byBiZQorCSAqIHNlbnQgaW4gdXNlciBtb2RlLgorCSAqLwor CWFzcGVlZF9zbWNfY2hpcF9lbmFibGVfd3JpdGUoY2hpcCk7CisKKwkvKiBUaGUgZHJpdmVyIG9u bHkgc3VwcG9ydHMgU1BJIHR5cGUgZmxhc2ggKi8KKwlpZiAoaW5mby0+aGFzdHlwZSkKKwkJYXNw ZWVkX3NtY19jaGlwX3NldF90eXBlKGNoaXAsIHNtY190eXBlX3NwaSk7CisKKwkvKgorCSAqIENv bmZpZ3VyZSBjaGlwIGJhc2UgYWRkcmVzcyBpbiBtZW1vcnkKKwkgKi8KKwljaGlwLT5haGJfYmFz ZSA9IGFzcGVlZF9zbWNfY2hpcF9iYXNlKGNoaXAsIHJlcyk7CisJaWYgKCFjaGlwLT5haGJfYmFz ZSkgeworCQlkZXZfd2FybihjaGlwLT5ub3IuZGV2LCAiQ0Ugc2VnbWVudCB3aW5kb3cgY2xvc2Vk LlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogR2V0IHZhbHVlIG9mIHRo ZSBpbmhlcml0ZWQgY29udHJvbCByZWdpc3Rlci4gVS1Cb290IHVzdWFsbHkKKwkgKiBkb2VzIHNv bWUgdGltaW5nIGNhbGlicmF0aW9uIG9uIHRoZSBGTUMgY2hpcCwgc28gaXQncyBnb29kCisJICog dG8ga2VlcCB0aGVtLiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgaGFuZGxlIGNhbGlicmF0aW9u CisJICogZnJvbSBMaW51eC4KKwkgKi8KKwlyZWcgPSByZWFkbChjaGlwLT5jdGwpOworCWRldl9k YmcoY29udHJvbGxlci0+ZGV2LCAiY29udHJvbCByZWdpc3RlcjogJTA4eFxuIiwgcmVnKTsKKwor CWJhc2VfcmVnID0gcmVnICYgQ09OVFJPTF9LRUVQX01BU0s7CisJaWYgKGJhc2VfcmVnICE9IHJl ZykgeworCQlkZXZfaW5mbyhjb250cm9sbGVyLT5kZXYsCisJCQkgImNvbnRyb2wgcmVnaXN0ZXIg Y2hhbmdlZCB0bzogJTA4eFxuIiwKKwkJCSBiYXNlX3JlZyk7CisJfQorCWNoaXAtPmN0bF92YWxb c21jX2Jhc2VdID0gYmFzZV9yZWc7CisKKwkvKgorCSAqIFJldGFpbiB0aGUgcHJpb3IgdmFsdWUg b2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYXMgdGhlCisJICogZGVmYXVsdCBpZiBpdCB3YXMgbm9y bWFsIGFjY2VzcyBtb2RlLiBPdGhlcndpc2Ugc3RhcnQgd2l0aAorCSAqIHRoZSBzYW5pdGl6ZWQg YmFzZSB2YWx1ZSBzZXQgdG8gcmVhZCBtb2RlLgorCSAqLworCWlmICgocmVnICYgQ09OVFJPTF9D T01NQU5EX01PREVfTUFTSykgPT0KKwkgICAgQ09OVFJPTF9DT01NQU5EX01PREVfTk9STUFMKQor CQljaGlwLT5jdGxfdmFsW3NtY19yZWFkXSA9IHJlZzsKKwllbHNlCisJCWNoaXAtPmN0bF92YWxb c21jX3JlYWRdID0gY2hpcC0+Y3RsX3ZhbFtzbWNfYmFzZV0gfAorCQkJQ09OVFJPTF9DT01NQU5E X01PREVfTk9STUFMOworCisJZGV2X2RiZyhjb250cm9sbGVyLT5kZXYsICJkZWZhdWx0IGNvbnRy b2wgcmVnaXN0ZXI6ICUwOHhcbiIsCisJCWNoaXAtPmN0bF92YWxbc21jX3JlYWRdKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBhc3BlZWRfc21jX2NoaXBfc2V0dXBfZmluaXNoKHN0cnVj dCBhc3BlZWRfc21jX2NoaXAgKmNoaXApCit7CisJc3RydWN0IGFzcGVlZF9zbWNfY29udHJvbGxl ciAqY29udHJvbGxlciA9IGNoaXAtPmNvbnRyb2xsZXI7CisJY29uc3Qgc3RydWN0IGFzcGVlZF9z bWNfaW5mbyAqaW5mbyA9IGNvbnRyb2xsZXItPmluZm87CisJdTMyIGNtZDsKKworCWlmIChjaGlw LT5ub3IuYWRkcl93aWR0aCA9PSA0ICYmIGluZm8tPnNldF80YikKKwkJaW5mby0+c2V0XzRiKGNo aXApOworCisJLyoKKwkgKiBiYXNlIG1vZGUgaGFzIG5vdCBiZWVuIG9wdGltaXplZCB5ZXQuIHVz ZSBpdCBmb3Igd3JpdGVzLgorCSAqLworCWNoaXAtPmN0bF92YWxbc21jX3dyaXRlXSA9IGNoaXAt PmN0bF92YWxbc21jX2Jhc2VdIHwKKwkJY2hpcC0+bm9yLnByb2dyYW1fb3Bjb2RlIDw8IENPTlRS T0xfQ09NTUFORF9TSElGVCB8CisJCUNPTlRST0xfQ09NTUFORF9NT0RFX1dSSVRFOworCisJZGV2 X2RiZyhjb250cm9sbGVyLT5kZXYsICJ3cml0ZSBjb250cm9sIHJlZ2lzdGVyOiAlMDh4XG4iLAor CQljaGlwLT5jdGxfdmFsW3NtY193cml0ZV0pOworCisJLyoKKwkgKiBUT0RPOiBBZGp1c3QgY2xv Y2tzIGlmIGZhc3QgcmVhZCBpcyBzdXBwb3J0ZWQgYW5kIGludGVycHJldAorCSAqIFNQSS1OT1Ig ZmxhZ3MgdG8gYWRqdXN0IGNvbnRyb2xsZXIgc2V0dGluZ3MuCisJICovCisJc3dpdGNoIChjaGlw LT5ub3IuZmxhc2hfcmVhZCkgeworCWNhc2UgU1BJX05PUl9OT1JNQUw6CisJCWNtZCA9IENPTlRS T0xfQ09NTUFORF9NT0RFX05PUk1BTDsKKwkJYnJlYWs7CisJY2FzZSBTUElfTk9SX0ZBU1Q6CisJ CWNtZCA9IENPTlRST0xfQ09NTUFORF9NT0RFX0ZSRUFEOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlkZXZfZXJyKGNoaXAtPm5vci5kZXYsICJ1bnN1cHBvcnRlZCBTUEkgcmVhZCBtb2RlXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2hpcC0+Y3RsX3ZhbFtzbWNfcmVhZF0gfD0gY21k IHwKKwkJQ09OVFJPTF9JT19EVU1NWV9TRVQoY2hpcC0+bm9yLnJlYWRfZHVtbXkgLyA4KTsKKwor CWRldl9kYmcoY29udHJvbGxlci0+ZGV2LCAiYmFzZSBjb250cm9sIHJlZ2lzdGVyOiAlMDh4XG4i LAorCQljaGlwLT5jdGxfdmFsW3NtY19yZWFkXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgYXNwZWVkX3NtY19zZXR1cF9mbGFzaChzdHJ1Y3QgYXNwZWVkX3NtY19jb250cm9sbGVyICpj b250cm9sbGVyLAorCQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHJlc291cmNl ICpyKQoreworCWNvbnN0IHN0cnVjdCBhc3BlZWRfc21jX2luZm8gKmluZm8gPSBjb250cm9sbGVy LT5pbmZvOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRyb2xsZXItPmRldjsKKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKmNoaWxkOworCXVuc2lnbmVkIGludCBjczsKKwlpbnQgcmV0ID0gLUVOT0RF VjsKKworCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkgeworCQlz dHJ1Y3QgYXNwZWVkX3NtY19jaGlwICpjaGlwOworCQlzdHJ1Y3Qgc3BpX25vciAqbm9yOworCQlz dHJ1Y3QgbXRkX2luZm8gKm10ZDsKKworCQkvKiBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0 IE5BTkQgb3IgTk9SIGZsYXNoIGRldmljZXMuICovCisJCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBh dGlibGUoY2hpbGQsICJqZWRlYyxzcGktbm9yIikpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgInJlZyIsICZjcyk7CisJCWlmIChyZXQpIHsKKwkJ CWRldl9lcnIoZGV2LCAiQ291bGRuJ3Qgbm90IHJlYWQgY2hpcCBzZWxlY3QuXG4iKTsKKwkJCWJy ZWFrOworCQl9CisKKwkJaWYgKGNzID49IGluZm8tPm5jZSkgeworCQkJZGV2X2VycihkZXYsICJD aGlwIHNlbGVjdCAlZCBvdXQgb2YgcmFuZ2UuXG4iLAorCQkJCWNzKTsKKwkJCXJldCA9IC1FUkFO R0U7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChjb250cm9sbGVyLT5jaGlwc1tjc10pIHsKKwkJ CWRldl9lcnIoZGV2LCAiQ2hpcCBzZWxlY3QgJWQgYWxyZWFkeSBpbiB1c2UgYnkgJXNcbiIsCisJ CQkJY3MsIGRldl9uYW1lKGNvbnRyb2xsZXItPmNoaXBzW2NzXS0+bm9yLmRldikpOworCQkJcmV0 ID0gLUVCVVNZOworCQkJYnJlYWs7CisJCX0KKworCQljaGlwID0gZGV2bV9remFsbG9jKGNvbnRy b2xsZXItPmRldiwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY2hpcCkgewor CQkJcmV0ID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2hpcC0+Y29udHJvbGxlciA9 IGNvbnRyb2xsZXI7CisJCWNoaXAtPmN0bCA9IGNvbnRyb2xsZXItPnJlZ3MgKyBpbmZvLT5jdGww ICsgY3MgKiA0OworCQljaGlwLT5jcyA9IGNzOworCisJCW5vciA9ICZjaGlwLT5ub3I7CisJCW10 ZCA9ICZub3ItPm10ZDsKKworCQlub3ItPmRldiA9IGRldjsKKwkJbm9yLT5wcml2ID0gY2hpcDsK KwkJc3BpX25vcl9zZXRfZmxhc2hfbm9kZShub3IsIGNoaWxkKTsKKwkJbm9yLT5yZWFkID0gYXNw ZWVkX3NtY19yZWFkX3VzZXI7CisJCW5vci0+d3JpdGUgPSBhc3BlZWRfc21jX3dyaXRlX3VzZXI7 CisJCW5vci0+cmVhZF9yZWcgPSBhc3BlZWRfc21jX3JlYWRfcmVnOworCQlub3ItPndyaXRlX3Jl ZyA9IGFzcGVlZF9zbWNfd3JpdGVfcmVnOworCQlub3ItPnByZXBhcmUgPSBhc3BlZWRfc21jX3By ZXA7CisJCW5vci0+dW5wcmVwYXJlID0gYXNwZWVkX3NtY191bnByZXA7CisKKwkJbXRkLT5uYW1l ID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAibGFiZWwiLCBOVUxMKTsKKworCQlyZXQgPSBhc3Bl ZWRfc21jX2NoaXBfc2V0dXBfaW5pdChjaGlwLCByKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOwor CisJCS8qCisJCSAqIFRPRE86IEFkZCBzdXBwb3J0IGZvciBTUElfTk9SX1FVQUQgYW5kIFNQSV9O T1JfRFVBTAorCQkgKiBhdHRhY2ggd2hlbiBib2FyZCBzdXBwb3J0IGlzIHByZXNlbnQgYXMgZGV0 ZXJtaW5lZAorCQkgKiBieSBvZiBwcm9wZXJ0eS4KKwkJICovCisJCXJldCA9IHNwaV9ub3Jfc2Nh bihub3IsIE5VTEwsIFNQSV9OT1JfTk9STUFMKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCisJ CXJldCA9IGFzcGVlZF9zbWNfY2hpcF9zZXR1cF9maW5pc2goY2hpcCk7CisJCWlmIChyZXQpCisJ CQlicmVhazsKKworCQlyZXQgPSBtdGRfZGV2aWNlX3JlZ2lzdGVyKG10ZCwgTlVMTCwgMCk7CisJ CWlmIChyZXQpCisJCQlicmVhazsKKworCQljb250cm9sbGVyLT5jaGlwc1tjc10gPSBjaGlwOwor CX0KKworCWlmIChyZXQpCisJCWFzcGVlZF9zbWNfdW5yZWdpc3Rlcihjb250cm9sbGVyKTsKKwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXNwZWVkX3NtY19wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5k ZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBh c3BlZWRfc21jX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7CisJY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCAqbWF0Y2g7CisJY29uc3Qgc3RydWN0IGFzcGVlZF9zbWNfaW5mbyAqaW5mbzsKKwlzdHJ1 Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2Uo YXNwZWVkX3NtY19tYXRjaGVzLCAmcGRldi0+ZGV2KTsKKwlpZiAoIW1hdGNoIHx8ICFtYXRjaC0+ ZGF0YSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaW5mbyA9IG1hdGNoLT5kYXRhOworCisJY29udHJv bGxlciA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmNvbnRyb2xsZXIpICsKKwkJ aW5mby0+bmNlICogc2l6ZW9mKGNvbnRyb2xsZXItPmNoaXBzWzBdKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFjb250cm9sbGVyKQorCQlyZXR1cm4gLUVOT01FTTsKKwljb250cm9sbGVyLT5pbmZvID0g aW5mbzsKKwljb250cm9sbGVyLT5kZXYgPSBkZXY7CisKKwltdXRleF9pbml0KCZjb250cm9sbGVy LT5tdXRleCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY29udHJvbGxlcik7CisKKwly ZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWNv bnRyb2xsZXItPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJ U19FUlIoY29udHJvbGxlci0+cmVncykpIHsKKwkJZGV2X2VycihkZXYsICJDYW5ub3QgcmVtYXAg Y29udHJvbGxlciBhZGRyZXNzLlxuIik7CisJCXJldHVybiBQVFJfRVJSKGNvbnRyb2xsZXItPnJl Z3MpOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF X01FTSwgMSk7CisJY29udHJvbGxlci0+YWhiX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2Uo ZGV2LCByZXMpOworCWlmIChJU19FUlIoY29udHJvbGxlci0+YWhiX2Jhc2UpKSB7CisJCWRldl9l cnIoZGV2LCAiQ2Fubm90IHJlbWFwIGNvbnRyb2xsZXIgYWRkcmVzcy5cbiIpOworCQlyZXR1cm4g UFRSX0VSUihjb250cm9sbGVyLT5haGJfYmFzZSk7CisJfQorCisJcmV0ID0gYXNwZWVkX3NtY19z ZXR1cF9mbGFzaChjb250cm9sbGVyLCBucCwgcmVzKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRl diwgIkFzcGVlZCBTTUMgcHJvYmUgZmFpbGVkICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXNwZWVkX3NtY19kcml2ZXIgPSB7 CisJLnByb2JlID0gYXNwZWVkX3NtY19wcm9iZSwKKwkucmVtb3ZlID0gYXNwZWVkX3NtY19yZW1v dmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBERVZJQ0VfTkFNRSwKKwkJLm9mX21hdGNoX3Rh YmxlID0gYXNwZWVkX3NtY19tYXRjaGVzLAorCX0KK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2 ZXIoYXNwZWVkX3NtY19kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTUEVFRCBTdGF0 aWMgTWVtb3J5IENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJDZWRyaWMgTGUg R29hdGVyIDxjbGdAa2FvZC5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIAoy LjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg==