From mboxrd@z Thu Jan 1 00:00:00 1970 From: Namhyung Kim Subject: [PATCH 2/3] qemu: Implement virtio-pstore device Date: Wed, 31 Aug 2016 17:08:01 +0900 Message-ID: <20160831080802.13408-3-namhyung@kernel.org> References: <20160831080802.13408-1-namhyung@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Anton Vorontsov , "Daniel P . Berrange" , Kees Cook , "Michael S. Tsirkin" , Namhyung Kim , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , LKML , Steven Rostedt , Minchan Kim , Tony Luck , Anthony Liguori , Colin Cross , Paolo Bonzini , Ingo Molnar To: virtio-dev@lists.oasis-open.org, virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, qemu-devel@nongnu.org Return-path: In-Reply-To: <20160831080802.13408-1-namhyung@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: kvm.vger.kernel.org RnJvbTogTmFtaHl1bmcgS2ltIDxuYW1oeXVuZ0BnbWFpbC5jb20+CgpBZGQgdmlydGlvIHBzdG9y ZSBkZXZpY2UgdG8gYWxsb3cga2VybmVsIGxvZyBmaWxlcyBzYXZlZCBvbiB0aGUgaG9zdC4KSXQg d2lsbCBzYXZlIHRoZSBsb2cgZmlsZXMgb24gdGhlIGRpcmVjdG9yeSBnaXZlbiBieSBwc3RvcmUg ZGV2aWNlCm9wdGlvbi4KCiAgJCBxZW11LXN5c3RlbS14ODZfNjQgLWRldmljZSB2aXJ0aW8tcHN0 b3JlLGRpcmVjdG9yeT1kaXIteHggLi4uCgogIChndWVzdCkgIyBlY2hvIGMgPiAvcHJvYy9zeXNy cS10cmlnZ2VyCgogICQgbHMgZGlyLXh4CiAgZG1lc2ctMS5lbmMueiAgZG1lc2ctMi5lbmMuegoK VGhlIGxvZyBmaWxlcyBhcmUgdXN1YWxseSBjb21wcmVzc2VkIHVzaW5nIHpsaWIuICBVc2VycyBj YW4gc2VlIHRoZSBsb2cKbWVzc2FnZXMgZGlyZWN0bHkgb24gdGhlIGhvc3Qgb3Igb24gdGhlIGd1 ZXN0ICh1c2luZyBwc3RvcmUgZmlsZXN5c3RlbSkuCgpUaGUgJ2RpcmVjdG9yeScgcHJvcGVydHkg aXMgcmVxdWlyZWQgZm9yIHZpcnRpby1wc3RvcmUgZGV2aWNlIHRvIHdvcmsuCkl0IGFsc28gYWRk cyAnYnVmc2l6ZScgcHJvcGVydHkgdG8gc2V0IHNpemUgb2YgcHN0b3JlIGJ1ZmVyLgoKQ2M6IFBh b2xvIEJvbnppbmkgPHBib256aW5pQHJlZGhhdC5jb20+CkNjOiBSYWRpbSBLcsSNbcOhxZkgPHJr cmNtYXJAcmVkaGF0LmNvbT4KQ2M6ICJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNv bT4KQ2M6IEFudGhvbnkgTGlndW9yaSA8YWxpZ3VvcmlAYW1hem9uLmNvbT4KQ2M6IEFudG9uIFZv cm9udHNvdiA8YW50b25AZW5vbXNnLm9yZz4KQ2M6IENvbGluIENyb3NzIDxjY3Jvc3NAYW5kcm9p ZC5jb20+CkNjOiBLZWVzIENvb2sgPGtlZXNjb29rQGNocm9taXVtLm9yZz4KQ2M6IFRvbnkgTHVj ayA8dG9ueS5sdWNrQGludGVsLmNvbT4KQ2M6IFN0ZXZlbiBSb3N0ZWR0IDxyb3N0ZWR0QGdvb2Rt aXMub3JnPgpDYzogSW5nbyBNb2xuYXIgPG1pbmdvQGtlcm5lbC5vcmc+CkNjOiBNaW5jaGFuIEtp bSA8bWluY2hhbkBrZXJuZWwub3JnPgpDYzogRGFuaWVsIFAuIEJlcnJhbmdlIDxiZXJyYW5nZUBy ZWRoYXQuY29tPgpDYzoga3ZtQHZnZXIua2VybmVsLm9yZwpDYzogcWVtdS1kZXZlbEBub25nbnUu b3JnCkNjOiB2aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpTaWduZWQt b2ZmLWJ5OiBOYW1oeXVuZyBLaW0gPG5hbWh5dW5nQGdtYWlsLmNvbT4KLS0tCiBody92aXJ0aW8v TWFrZWZpbGUub2JqcyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBody92aXJ0aW8v dmlydGlvLXBjaS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUyICsrCiBody92aXJ0aW8v dmlydGlvLXBjaS5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE0ICsKIGh3L3ZpcnRpby92 aXJ0aW8tcHN0b3JlLmMgICAgICAgICAgICAgICAgICAgICAgfCA2ODkgKysrKysrKysrKysrKysr KysrKysrKysrKwogaW5jbHVkZS9ody9wY2kvcGNpLmggICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMSArCiBpbmNsdWRlL2h3L3ZpcnRpby92aXJ0aW8tcHN0b3JlLmggICAgICAgICAgICAg IHwgIDM2ICsrCiBpbmNsdWRlL3N0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX2lkcy5oICAg IHwgICAxICsKIGluY2x1ZGUvc3RhbmRhcmQtaGVhZGVycy9saW51eC92aXJ0aW9fcHN0b3JlLmgg fCAgNzYgKysrCiBxZGV2LW1vbml0b3IuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIDkgZmlsZXMgY2hhbmdlZCwgODcxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBody92aXJ0aW8vdmlydGlvLXBzdG9yZS5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgaW5jbHVkZS9ody92aXJ0aW8vdmlydGlvLXBzdG9yZS5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19wc3RvcmUuaAoK ZGlmZiAtLWdpdCBhL2h3L3ZpcnRpby9NYWtlZmlsZS5vYmpzIGIvaHcvdmlydGlvL01ha2VmaWxl Lm9ianMKaW5kZXggM2UyYjE3NS4uYWFlNzA4MiAxMDA2NDQKLS0tIGEvaHcvdmlydGlvL01ha2Vm aWxlLm9ianMKKysrIGIvaHcvdmlydGlvL01ha2VmaWxlLm9ianMKQEAgLTQsNCArNCw0IEBAIGNv bW1vbi1vYmoteSArPSB2aXJ0aW8tYnVzLm8KIGNvbW1vbi1vYmoteSArPSB2aXJ0aW8tbW1pby5v CiAKIG9iai15ICs9IHZpcnRpby5vIHZpcnRpby1iYWxsb29uLm8gCi1vYmotJChDT05GSUdfTElO VVgpICs9IHZob3N0Lm8gdmhvc3QtYmFja2VuZC5vIHZob3N0LXVzZXIubworb2JqLSQoQ09ORklH X0xJTlVYKSArPSB2aG9zdC5vIHZob3N0LWJhY2tlbmQubyB2aG9zdC11c2VyLm8gdmlydGlvLXBz dG9yZS5vCmRpZmYgLS1naXQgYS9ody92aXJ0aW8vdmlydGlvLXBjaS5jIGIvaHcvdmlydGlvL3Zp cnRpby1wY2kuYwppbmRleCA3NTVmOTIxLi5jMTg0ODIzIDEwMDY0NAotLS0gYS9ody92aXJ0aW8v dmlydGlvLXBjaS5jCisrKyBiL2h3L3ZpcnRpby92aXJ0aW8tcGNpLmMKQEAgLTI0MTYsNiArMjQx Niw1NyBAQCBzdGF0aWMgY29uc3QgVHlwZUluZm8gdmlydGlvX2hvc3RfcGNpX2luZm8gPSB7CiB9 OwogI2VuZGlmCiAKKy8qIHZpcnRpby1wc3RvcmUtcGNpICovCisKK3N0YXRpYyB2b2lkIHZpcnRp b19wc3RvcmVfcGNpX3JlYWxpemUoVmlydElPUENJUHJveHkgKnZwY2lfZGV2LCBFcnJvciAqKmVy cnApCit7CisgICAgVmlydElPUHN0b3JlUENJICp2cHMgPSBWSVJUSU9fUFNUT1JFX1BDSSh2cGNp X2Rldik7CisgICAgRGV2aWNlU3RhdGUgKnZkZXYgPSBERVZJQ0UoJnZwcy0+dmRldik7CisgICAg RXJyb3IgKmVyciA9IE5VTEw7CisKKyAgICBxZGV2X3NldF9wYXJlbnRfYnVzKHZkZXYsIEJVUygm dnBjaV9kZXYtPmJ1cykpOworICAgIG9iamVjdF9wcm9wZXJ0eV9zZXRfYm9vbChPQkpFQ1QodmRl diksIHRydWUsICJyZWFsaXplZCIsICZlcnIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgZXJy b3JfcHJvcGFnYXRlKGVycnAsIGVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3N0 YXRpYyB2b2lkIHZpcnRpb19wc3RvcmVfcGNpX2NsYXNzX2luaXQoT2JqZWN0Q2xhc3MgKmtsYXNz LCB2b2lkICpkYXRhKQoreworICAgIERldmljZUNsYXNzICpkYyA9IERFVklDRV9DTEFTUyhrbGFz cyk7CisgICAgVmlydGlvUENJQ2xhc3MgKmsgPSBWSVJUSU9fUENJX0NMQVNTKGtsYXNzKTsKKyAg ICBQQ0lEZXZpY2VDbGFzcyAqcGNpZGV2X2sgPSBQQ0lfREVWSUNFX0NMQVNTKGtsYXNzKTsKKwor ICAgIGstPnJlYWxpemUgPSB2aXJ0aW9fcHN0b3JlX3BjaV9yZWFsaXplOworICAgIHNldF9iaXQo REVWSUNFX0NBVEVHT1JZX01JU0MsIGRjLT5jYXRlZ29yaWVzKTsKKworICAgIHBjaWRldl9rLT52 ZW5kb3JfaWQgPSBQQ0lfVkVORE9SX0lEX1JFREhBVF9RVU1SQU5FVDsKKyAgICBwY2lkZXZfay0+ ZGV2aWNlX2lkID0gUENJX0RFVklDRV9JRF9WSVJUSU9fUFNUT1JFOworICAgIHBjaWRldl9rLT5y ZXZpc2lvbiA9IFZJUlRJT19QQ0lfQUJJX1ZFUlNJT047CisgICAgcGNpZGV2X2stPmNsYXNzX2lk ID0gUENJX0NMQVNTX09USEVSUzsKK30KKworc3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV9wY2lf aW5zdGFuY2VfaW5pdChPYmplY3QgKm9iaikKK3sKKyAgICBWaXJ0SU9Qc3RvcmVQQ0kgKmRldiA9 IFZJUlRJT19QU1RPUkVfUENJKG9iaik7CisKKyAgICB2aXJ0aW9faW5zdGFuY2VfaW5pdF9jb21t b24ob2JqLCAmZGV2LT52ZGV2LCBzaXplb2YoZGV2LT52ZGV2KSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVFlQRV9WSVJUSU9fUFNUT1JFKTsKKyAgICBvYmplY3RfcHJvcGVydHlf YWRkX2FsaWFzKG9iaiwgImRpcmVjdG9yeSIsIE9CSkVDVCgmZGV2LT52ZGV2KSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RvcnkiLCAmZXJyb3JfYWJvcnQpOworICAgIG9i amVjdF9wcm9wZXJ0eV9hZGRfYWxpYXMob2JqLCAiYnVmc2l6ZSIsIE9CSkVDVCgmZGV2LT52ZGV2 KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidWZzaXplIiwgJmVycm9yX2Fib3J0 KTsKK30KKworc3RhdGljIGNvbnN0IFR5cGVJbmZvIHZpcnRpb19wc3RvcmVfcGNpX2luZm8gPSB7 CisgICAgLm5hbWUgICAgICAgICAgPSBUWVBFX1ZJUlRJT19QU1RPUkVfUENJLAorICAgIC5wYXJl bnQgICAgICAgID0gVFlQRV9WSVJUSU9fUENJLAorICAgIC5pbnN0YW5jZV9zaXplID0gc2l6ZW9m KFZpcnRJT1BzdG9yZVBDSSksCisgICAgLmluc3RhbmNlX2luaXQgPSB2aXJ0aW9fcHN0b3JlX3Bj aV9pbnN0YW5jZV9pbml0LAorICAgIC5jbGFzc19pbml0ICAgID0gdmlydGlvX3BzdG9yZV9wY2lf Y2xhc3NfaW5pdCwKK307CisKIC8qIHZpcnRpby1wY2ktYnVzICovCiAKIHN0YXRpYyB2b2lkIHZp cnRpb19wY2lfYnVzX25ldyhWaXJ0aW9CdXNTdGF0ZSAqYnVzLCBzaXplX3QgYnVzX3NpemUsCkBA IC0yNDg1LDYgKzI1MzYsNyBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fcGNpX3JlZ2lzdGVyX3R5cGVz KHZvaWQpCiAjaWZkZWYgQ09ORklHX1ZIT1NUX1NDU0kKICAgICB0eXBlX3JlZ2lzdGVyX3N0YXRp Yygmdmhvc3Rfc2NzaV9wY2lfaW5mbyk7CiAjZW5kaWYKKyAgICB0eXBlX3JlZ2lzdGVyX3N0YXRp YygmdmlydGlvX3BzdG9yZV9wY2lfaW5mbyk7CiB9CiAKIHR5cGVfaW5pdCh2aXJ0aW9fcGNpX3Jl Z2lzdGVyX3R5cGVzKQpkaWZmIC0tZ2l0IGEvaHcvdmlydGlvL3ZpcnRpby1wY2kuaCBiL2h3L3Zp cnRpby92aXJ0aW8tcGNpLmgKaW5kZXggMjVmYmY4YS4uMzU0YjJiNyAxMDA2NDQKLS0tIGEvaHcv dmlydGlvL3ZpcnRpby1wY2kuaAorKysgYi9ody92aXJ0aW8vdmlydGlvLXBjaS5oCkBAIC0zMSw2 ICszMSw3IEBACiAjaWZkZWYgQ09ORklHX1ZIT1NUX1NDU0kKICNpbmNsdWRlICJody92aXJ0aW8v dmhvc3Qtc2NzaS5oIgogI2VuZGlmCisjaW5jbHVkZSAiaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUu aCIKIAogdHlwZWRlZiBzdHJ1Y3QgVmlydElPUENJUHJveHkgVmlydElPUENJUHJveHk7CiB0eXBl ZGVmIHN0cnVjdCBWaXJ0SU9CbGtQQ0kgVmlydElPQmxrUENJOwpAQCAtNDQsNiArNDUsNyBAQCB0 eXBlZGVmIHN0cnVjdCBWaXJ0SU9JbnB1dFBDSSBWaXJ0SU9JbnB1dFBDSTsKIHR5cGVkZWYgc3Ry dWN0IFZpcnRJT0lucHV0SElEUENJIFZpcnRJT0lucHV0SElEUENJOwogdHlwZWRlZiBzdHJ1Y3Qg VmlydElPSW5wdXRIb3N0UENJIFZpcnRJT0lucHV0SG9zdFBDSTsKIHR5cGVkZWYgc3RydWN0IFZp cnRJT0dQVVBDSSBWaXJ0SU9HUFVQQ0k7Cit0eXBlZGVmIHN0cnVjdCBWaXJ0SU9Qc3RvcmVQQ0kg VmlydElPUHN0b3JlUENJOwogCiAvKiB2aXJ0aW8tcGNpLWJ1cyAqLwogCkBAIC0zMjQsNiArMzI2 LDE4IEBAIHN0cnVjdCBWaXJ0SU9HUFVQQ0kgewogICAgIFZpcnRJT0dQVSB2ZGV2OwogfTsKIAor LyoKKyAqIHZpcnRpby1wc3RvcmUtcGNpOiBUaGlzIGV4dGVuZHMgVmlydGlvUENJUHJveHkuCisg Ki8KKyNkZWZpbmUgVFlQRV9WSVJUSU9fUFNUT1JFX1BDSSAidmlydGlvLXBzdG9yZS1wY2kiCisj ZGVmaW5lIFZJUlRJT19QU1RPUkVfUENJKG9iaikgXAorICAgICAgICBPQkpFQ1RfQ0hFQ0soVmly dElPUHN0b3JlUENJLCAob2JqKSwgVFlQRV9WSVJUSU9fUFNUT1JFX1BDSSkKKworc3RydWN0IFZp cnRJT1BzdG9yZVBDSSB7CisgICAgVmlydElPUENJUHJveHkgcGFyZW50X29iajsKKyAgICBWaXJ0 SU9Qc3RvcmUgdmRldjsKK307CisKIC8qIFZpcnRpbyBBQkkgdmVyc2lvbiwgaWYgd2UgaW5jcmVt ZW50IHRoaXMsIHdlIGJyZWFrIHRoZSBndWVzdCBkcml2ZXIuICovCiAjZGVmaW5lIFZJUlRJT19Q Q0lfQUJJX1ZFUlNJT04gICAgICAgICAgMAogCmRpZmYgLS1naXQgYS9ody92aXJ0aW8vdmlydGlv LXBzdG9yZS5jIGIvaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4wOGQxMDYzCi0tLSAvZGV2L251bGwKKysrIGIvaHcvdmlydGlvL3Zp cnRpby1wc3RvcmUuYwpAQCAtMCwwICsxLDY4OSBAQAorLyoKKyAqIFZpcnRpbyBQc3RvcmUgRGV2 aWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE2ICBMRyBFbGVjdHJvbmljcworICoKKyAqIEF1 dGhvcnM6CisgKiAgTmFtaHl1bmcgS2ltICA8bmFtaHl1bmdAZ21haWwuY29tPgorICoKKyAqIFRo aXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNp b24gMiBvciBsYXRlci4KKyAqIFNlZSB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwg ZGlyZWN0b3J5LgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgInFl bXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2lvdi5oIgorI2luY2x1ZGUgInFlbXUtY29tbW9u LmgiCisjaW5jbHVkZSAicWVtdS9jdXRpbHMuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9y dC5oIgorI2luY2x1ZGUgInN5c2VtdS9rdm0uaCIKKyNpbmNsdWRlICJxYXBpL3Zpc2l0b3IuaCIK KyNpbmNsdWRlICJxYXBpLWV2ZW50LmgiCisjaW5jbHVkZSAiaW8vY2hhbm5lbC1maWxlLmgiCisj aW5jbHVkZSAidHJhY2UuaCIKKworI2luY2x1ZGUgImh3L3ZpcnRpby92aXJ0aW8uaCIKKyNpbmNs dWRlICJody92aXJ0aW8vdmlydGlvLWJ1cy5oIgorI2luY2x1ZGUgImh3L3ZpcnRpby92aXJ0aW8t YWNjZXNzLmgiCisjaW5jbHVkZSAiaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuaCIKKworI2RlZmlu ZSBQU1RPUkVfREVGQVVMVF9CVUZTSVpFICAgKDE2ICogMTAyNCkKKyNkZWZpbmUgUFNUT1JFX0RF RkFVTFRfRklMRV9NQVggIDUKKworLyogdGhlIGluZGV4IHNob3VsZCBtYXRjaCB0byB0aGUgdHlw ZSB2YWx1ZSAqLworc3RhdGljIGNvbnN0IGNoYXIgKnZpcnRpb19wc3RvcmVfZmlsZV9wcmVmaXhb XSA9IHsKKyAgICAidW5rbm93bi0iLAkJLyogVklSVElPX1BTVE9SRV9UWVBFX1VOS05PV04gKi8K KyAgICAiZG1lc2ctIiwJCS8qIFZJUlRJT19QU1RPUkVfVFlQRV9ETUVTRyAqLworfTsKKworc3Rh dGljIGNoYXIgKnZpcnRpb19wc3RvcmVfdG9fZmlsZW5hbWUoVmlydElPUHN0b3JlICpzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpcnRpb19wc3RvcmVf cmVxICpyZXEpCit7CisgICAgY29uc3QgY2hhciAqYmFzZW5hbWU7CisgICAgdW5zaWduZWQgbG9u ZyBsb25nIGlkOworICAgIHVuc2lnbmVkIGludCB0eXBlID0gbGUxNl90b19jcHUocmVxLT50eXBl KTsKKyAgICB1bnNpZ25lZCBpbnQgZmxhZ3MgPSBsZTMyX3RvX2NwdShyZXEtPmZsYWdzKTsKKwor ICAgIGlmICh0eXBlIDwgQVJSQVlfU0laRSh2aXJ0aW9fcHN0b3JlX2ZpbGVfcHJlZml4KSkgewor ICAgICAgICBiYXNlbmFtZSA9IHZpcnRpb19wc3RvcmVfZmlsZV9wcmVmaXhbdHlwZV07CisgICAg fSBlbHNlIHsKKyAgICAgICAgYmFzZW5hbWUgPSAidW5rbm93bi0iOworICAgIH0KKworICAgIGlk ID0gcy0+aWQrKzsKKyAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmKCIlcy8lcyVsbHUlcyIsIHMt PmRpcmVjdG9yeSwgYmFzZW5hbWUsIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs YWdzICYgVklSVElPX1BTVE9SRV9GTF9DT01QUkVTU0VEID8gIi5lbmMueiIgOiAiIik7Cit9CisK K3N0YXRpYyBjaGFyICp2aXJ0aW9fcHN0b3JlX2Zyb21fZmlsZW5hbWUoVmlydElPUHN0b3JlICpz LCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgdmlydGlvX3BzdG9yZV9maWxlaW5mbyAqaW5mbykKK3sKKyAgICBjaGFyICpmaWxlbmFt ZTsKKyAgICB1bnNpZ25lZCBpbnQgaWR4OworCisgICAgZmlsZW5hbWUgPSBnX3N0cmR1cF9wcmlu dGYoIiVzLyVzIiwgcy0+ZGlyZWN0b3J5LCBuYW1lKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVM TCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZ X1NJWkUodmlydGlvX3BzdG9yZV9maWxlX3ByZWZpeCk7IGlkeCsrKSB7CisgICAgICAgIGlmIChn X3N0cl9oYXNfcHJlZml4KG5hbWUsIHZpcnRpb19wc3RvcmVfZmlsZV9wcmVmaXhbaWR4XSkpIHsK KyAgICAgICAgICAgIGluZm8tPnR5cGUgPSBpZHg7CisgICAgICAgICAgICBuYW1lICs9IHN0cmxl bih2aXJ0aW9fcHN0b3JlX2ZpbGVfcHJlZml4W2lkeF0pOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaWR4ID09IEFSUkFZX1NJWkUodmlydGlvX3BzdG9y ZV9maWxlX3ByZWZpeCkpIHsKKyAgICAgICAgZ19mcmVlKGZpbGVuYW1lKTsKKyAgICAgICAgcmV0 dXJuIE5VTEw7CisgICAgfQorCisgICAgcWVtdV9zdHJ0b3VsbChuYW1lLCBOVUxMLCAwLCAmaW5m by0+aWQpOworCisgICAgaW5mby0+ZmxhZ3MgPSAwOworICAgIGlmIChnX3N0cl9oYXNfc3VmZml4 KG5hbWUsICIuZW5jLnoiKSkgeworICAgICAgICBpbmZvLT5mbGFncyB8PSBWSVJUSU9fUFNUT1JF X0ZMX0NPTVBSRVNTRUQ7CisgICAgfQorCisgICAgcmV0dXJuIGZpbGVuYW1lOworfQorCitzdGF0 aWMgaW50IHByZWZpeF9pZHg7CitzdGF0aWMgaW50IHByZWZpeF9jb3VudDsKK3N0YXRpYyBpbnQg cHJlZml4X2xlbjsKKworc3RhdGljIGludCBmaWx0ZXJfcHN0b3JlKGNvbnN0IHN0cnVjdCBkaXJl bnQgKmRlKQoreworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHByZWZpeF9jb3Vu dDsgaSsrKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCA9IHZpcnRpb19wc3RvcmVfZmls ZV9wcmVmaXhbcHJlZml4X2lkeCArIGldOworCisgICAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4 KGRlLT5kX25hbWUsIHByZWZpeCkpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9 CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvcnRfcHN0b3JlKGNvbnN0 IHN0cnVjdCBkaXJlbnQgKiphLCBjb25zdCBzdHJ1Y3QgZGlyZW50ICoqYikKK3sKKyAgICB1aW50 NjRfdCBpZF9hLCBpZF9iOworCisgICAgcWVtdV9zdHJ0b3VsbCgoKmEpLT5kX25hbWUgKyBwcmVm aXhfbGVuLCBOVUxMLCAwLCAmaWRfYSk7CisgICAgcWVtdV9zdHJ0b3VsbCgoKmIpLT5kX25hbWUg KyBwcmVmaXhfbGVuLCBOVUxMLCAwLCAmaWRfYik7CisKKyAgICByZXR1cm4gaWRfYSAtIGlkX2I7 Cit9CisKK3N0YXRpYyBpbnQgZGVsZXRlX29sZF9wc3RvcmVfZmlsZShWaXJ0SU9Qc3RvcmUgKnMs IHVuc2lnbmVkIHNob3J0IHR5cGUpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgaW50IGksIG51 bTsKKyAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBzdHJ1Y3QgZGlyZW50ICoqZmlsZXM7CisKKyAg ICBpZiAodHlwZSA+PSBBUlJBWV9TSVpFKHZpcnRpb19wc3RvcmVfZmlsZV9wcmVmaXgpKSB7Cisg ICAgICAgIHR5cGUgPSBWSVJUSU9fUFNUT1JFX1RZUEVfVU5LTk9XTjsKKyAgICB9CisKKyAgICBw cmVmaXhfaWR4ID0gdHlwZTsKKyAgICBwcmVmaXhfbGVuID0gc3RybGVuKHZpcnRpb19wc3RvcmVf ZmlsZV9wcmVmaXhbdHlwZV0pOworICAgIHByZWZpeF9jb3VudCA9IDE7ICAvKiBvbmx5IHNjYW4g Y3VycmVudCB0eXBlICovCisKKyAgICAvKiBkZWxldGUgdGhlIG9sZGVzdCBmaWxlIGluIHRoZSBz YW1lIHR5cGUgKi8KKyAgICBudW0gPSBzY2FuZGlyKHMtPmRpcmVjdG9yeSwgJmZpbGVzLCBmaWx0 ZXJfcHN0b3JlLCBzb3J0X3BzdG9yZSk7CisgICAgaWYgKG51bSA8IDApCisgICAgICAgIHJldHVy biBudW07CisgICAgaWYgKG51bSA8IChpbnQpcy0+ZmlsZV9tYXgpCisgICAgICAgIGdvdG8gb3V0 OworCisgICAgZmlsZW5hbWUgPSBnX3N0cmR1cF9wcmludGYoIiVzLyVzIiwgcy0+ZGlyZWN0b3J5 LCBmaWxlc1swXS0+ZF9uYW1lKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAg ICByZXQgPSAtMTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgcmV0ID0gdW5saW5r KGZpbGVuYW1lKTsKKworb3V0OgorICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworICAg ICAgICBnX2ZyZWUoZmlsZXNbaV0pOworICAgIH0KKyAgICBnX2ZyZWUoZmlsZXMpOworCisgICAg cmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdmlydGlvX3BzdG9yZV9kb19vcGVuKFZp cnRJT1BzdG9yZSAqcykKK3sKKyAgICAvKiBzY2FuIGFsbCBwc3RvcmUgZmlsZXMgKi8KKyAgICBw cmVmaXhfaWR4ID0gMDsKKyAgICBwcmVmaXhfY291bnQgPSBBUlJBWV9TSVpFKHZpcnRpb19wc3Rv cmVfZmlsZV9wcmVmaXgpOworCisgICAgcy0+ZmlsZV9pZHggPSAwOworICAgIHMtPm51bV9maWxl ID0gc2NhbmRpcihzLT5kaXJlY3RvcnksICZzLT5maWxlcywgZmlsdGVyX3BzdG9yZSwgYWxwaGFz b3J0KTsKKworICAgIHJldHVybiBzLT5udW1fZmlsZSA+PSAwID8gMCA6IC0xOworfQorCitzdGF0 aWMgc3NpemVfdCB2aXJ0aW9fcHN0b3JlX2RvX2Nsb3NlKFZpcnRJT1BzdG9yZSAqcykKK3sKKyAg ICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzLT5udW1fZmlsZTsgaSsrKSB7CisgICAg ICAgIGdfZnJlZShzLT5maWxlc1tpXSk7CisgICAgfQorICAgIGdfZnJlZShzLT5maWxlcyk7Cisg ICAgcy0+ZmlsZXMgPSBOVUxMOworCisgICAgcy0+bnVtX2ZpbGUgPSAwOworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgc3NpemVfdCB2aXJ0aW9fcHN0b3JlX2RvX2VyYXNlKFZpcnRJT1BzdG9y ZSAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpcnRp b19wc3RvcmVfcmVxICpyZXEpCit7CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAgaW50IHJldDsK KworICAgIGZpbGVuYW1lID0gdmlydGlvX3BzdG9yZV90b19maWxlbmFtZShzLCByZXEpOworICAg IGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXQgPSB1 bmxpbmsoZmlsZW5hbWUpOworCisgICAgZ19mcmVlKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gcmV0 OworfQorCitzdHJ1Y3QgcHN0b3JlX3JlYWRfYXJnIHsKKyAgICBWaXJ0SU9Qc3RvcmUgKnZwczsK KyAgICBWaXJ0UXVldWVFbGVtZW50ICplbGVtOworICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2Zp bGVpbmZvIGluZm87CisgICAgUUlPQ2hhbm5lbCAqaW9jOworfTsKKworc3RhdGljIGdib29sZWFu IHBzdG9yZV9hc3luY19yZWFkX2ZuKFFJT0NoYW5uZWwgKmlvYywgR0lPQ29uZGl0aW9uIGNvbmRp dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRh KQoreworICAgIHN0cnVjdCBwc3RvcmVfcmVhZF9hcmcgKnJhcmcgPSBkYXRhOworICAgIHN0cnVj dCB2aXJ0aW9fcHN0b3JlX2ZpbGVpbmZvICppbmZvID0gJnJhcmctPmluZm87CisgICAgVmlydElP UHN0b3JlICp2cHMgPSByYXJnLT52cHM7CisgICAgVmlydFF1ZXVlRWxlbWVudCAqZWxlbSA9IHJh cmctPmVsZW07CisgICAgc3RydWN0IHZpcnRpb19wc3RvcmVfcmVzIHJlczsKKyAgICBzaXplX3Qg b2Zmc2V0ID0gc2l6ZW9mKHJlcykgKyBzaXplb2YoKmluZm8pOworICAgIHN0cnVjdCBpb3ZlYyAq c2cgPSBlbGVtLT5pbl9zZzsKKyAgICB1bnNpZ25lZCBpbnQgc2dfbnVtID0gZWxlbS0+aW5fbnVt OworICAgIEVycm9yICplcnIgPSBOVUxMOworICAgIHNzaXplX3QgbGVuOworICAgIGludCByZXQ7 CisKKyAgICAvKiBza2lwIHJlcyBhbmQgZmlsZWluZm8gKi8KKyAgICBpb3ZfZGlzY2FyZF9mcm9u dCgmc2csICZzZ19udW0sIHNpemVvZihyZXMpICsgc2l6ZW9mKCppbmZvKSk7CisKKyAgICBsZW4g PSBxaW9fY2hhbm5lbF9yZWFkdihyYXJnLT5pb2MsIHNnLCBzZ19udW0sICZlcnIpOworICAgIGlm IChsZW4gPCAwKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pIHsKKyAgICAgICAgICAg IGxlbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gLTE7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgaW5mby0+bGVuID0gY3B1X3RvX2xlMzIobGVuKTsKKyAgICAgICAgcmV0ID0gMDsKKyAg ICB9CisKKyAgICByZXMuY21kICA9IGNwdV90b19sZTE2KFZJUlRJT19QU1RPUkVfQ01EX1JFQUQp OworICAgIHJlcy50eXBlID0gY3B1X3RvX2xlMTYoVklSVElPX1BTVE9SRV9UWVBFX1VOS05PV04p OworICAgIHJlcy5yZXQgID0gY3B1X3RvX2xlMzIocmV0KTsKKworICAgIC8qIG5vdyBjb3B5IHJl cyBhbmQgZmlsZWluZm8gKi8KKyAgICBpb3ZfZnJvbV9idWYoZWxlbS0+aW5fc2csIGVsZW0tPmlu X251bSwgMCwgJnJlcywgc2l6ZW9mKHJlcykpOworICAgIGlvdl9mcm9tX2J1ZihlbGVtLT5pbl9z ZywgZWxlbS0+aW5fbnVtLCBzaXplb2YocmVzKSwgaW5mbywgc2l6ZW9mKCppbmZvKSk7CisKKyAg ICBsZW4gKz0gb2Zmc2V0OworICAgIHZpcnRxdWV1ZV9wdXNoKHZwcy0+cnZxLCBlbGVtLCBsZW4p OworICAgIHZpcnRpb19ub3RpZnkoVklSVElPX0RFVklDRSh2cHMpLCB2cHMtPnJ2cSk7CisKKyAg ICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcmFyZ19mbihncG9pbnRlciBk YXRhKQoreworICAgIHN0cnVjdCBwc3RvcmVfcmVhZF9hcmcgKnJhcmcgPSBkYXRhOworCisgICAg cWlvX2NoYW5uZWxfY2xvc2UocmFyZy0+aW9jLCBOVUxMKTsKKworICAgIGdfZnJlZShyYXJnLT5l bGVtKTsKKyAgICBnX2ZyZWUocmFyZyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpcnRpb19wc3Rv cmVfZG9fcmVhZChWaXJ0SU9Qc3RvcmUgKnMsIFZpcnRRdWV1ZUVsZW1lbnQgKmVsZW0pCit7Cisg ICAgY2hhciAqZmlsZW5hbWUgPSBOVUxMOworICAgIGludCBpZHg7CisgICAgc3RydWN0IHN0YXQg c3RidWY7CisgICAgc3RydWN0IHBzdG9yZV9yZWFkX2FyZyAqcmFyZyA9IE5VTEw7CisgICAgUUlP Q2hhbm5lbEZpbGUgKmlvY2Y7CisgICAgRXJyb3IgKmVyciA9IE5VTEw7CisgICAgaW50IHJldCA9 IC0xOworCisgICAgaWYgKHMtPmZpbGVfaWR4ID49IHMtPm51bV9maWxlKSB7CisgICAgICAgIHJl dHVybiAwOworICAgIH0KKworICAgIHJhcmcgPSBnX21hbGxvYyhzaXplb2YoKnJhcmcpKTsKKyAg ICBpZiAocmFyZyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBp ZHggPSBzLT5maWxlX2lkeCsrOworICAgIGZpbGVuYW1lID0gdmlydGlvX3BzdG9yZV9mcm9tX2Zp bGVuYW1lKHMsIHMtPmZpbGVzW2lkeF0tPmRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmcmFyZy0+aW5mbyk7CisgICAgaWYgKGZpbGVuYW1lID09IE5V TEwpIHsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaW9jZiA9IHFpb19jaGFubmVs X2ZpbGVfbmV3X3BhdGgoZmlsZW5hbWUsIE9fUkRPTkxZLCAwNjQ0LCAmZXJyKTsKKyAgICBpZiAo ZXJyKSB7CisgICAgICAgIGVycm9yX3JlcG9ydGZfZXJyKGVyciwgImNhbm5vdCBjcmVhdGUgaW8g Y2hhbm5lbDogIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmIChmc3RhdChp b2NmLT5mZCwgJnN0YnVmKSA8IDApIHsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAg cmFyZy0+dnBzICAgICAgICAgICAgPSBzOworICAgIHJhcmctPmVsZW0gICAgICAgICAgID0gZWxl bTsKKyAgICByYXJnLT5pb2MgICAgICAgICAgICA9IFFJT19DSEFOTkVMKGlvY2YpOworICAgIHJh cmctPmluZm8uaWQgICAgICAgID0gY3B1X3RvX2xlNjQocmFyZy0+aW5mby5pZCk7CisgICAgcmFy Zy0+aW5mby50eXBlICAgICAgPSBjcHVfdG9fbGUxNihyYXJnLT5pbmZvLnR5cGUpOworICAgIHJh cmctPmluZm8uZmxhZ3MgICAgID0gY3B1X3RvX2xlMzIocmFyZy0+aW5mby5mbGFncyk7CisgICAg cmFyZy0+aW5mby50aW1lX3NlYyAgPSBjcHVfdG9fbGU2NChzdGJ1Zi5zdF9jdGltLnR2X3NlYyk7 CisgICAgcmFyZy0+aW5mby50aW1lX25zZWMgPSBjcHVfdG9fbGUzMihzdGJ1Zi5zdF9jdGltLnR2 X25zZWMpOworCisgICAgcWlvX2NoYW5uZWxfc2V0X2Jsb2NraW5nKHJhcmctPmlvYywgZmFsc2Us ICZlcnIpOworICAgIHFpb19jaGFubmVsX2FkZF93YXRjaChyYXJnLT5pb2MsIEdfSU9fSU4sIHBz dG9yZV9hc3luY19yZWFkX2ZuLCByYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVl X3JhcmdfZm4pOworICAgIGdfZnJlZShmaWxlbmFtZSk7CisgICAgcmV0dXJuIDE7CisKK291dDoK KyAgICBnX2ZyZWUoZmlsZW5hbWUpOworICAgIGdfZnJlZShyYXJnKTsKKworICAgIHJldHVybiBy ZXQ7Cit9CisKK3N0cnVjdCBwc3RvcmVfd3JpdGVfYXJnIHsKKyAgICBWaXJ0SU9Qc3RvcmUgKnZw czsKKyAgICBWaXJ0UXVldWVFbGVtZW50ICplbGVtOworICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3Jl X3JlcSAqcmVxOworICAgIFFJT0NoYW5uZWwgKmlvYzsKK307CisKK3N0YXRpYyBnYm9vbGVhbiBw c3RvcmVfYXN5bmNfd3JpdGVfZm4oUUlPQ2hhbm5lbCAqaW9jLCBHSU9Db25kaXRpb24gY29uZGl0 aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRh KQoreworICAgIHN0cnVjdCBwc3RvcmVfd3JpdGVfYXJnICp3YXJnID0gZGF0YTsKKyAgICBWaXJ0 SU9Qc3RvcmUgKnZwcyA9IHdhcmctPnZwczsKKyAgICBWaXJ0UXVldWVFbGVtZW50ICplbGVtID0g d2FyZy0+ZWxlbTsKKyAgICBzdHJ1Y3QgaW92ZWMgKnNnID0gZWxlbS0+b3V0X3NnOworICAgIHVu c2lnbmVkIGludCBzZ19udW0gPSBlbGVtLT5vdXRfbnVtOworICAgIHN0cnVjdCB2aXJ0aW9fcHN0 b3JlX3JlcyByZXM7CisgICAgRXJyb3IgKmVyciA9IE5VTEw7CisgICAgc3NpemVfdCBsZW47Cisg ICAgaW50IHJldDsKKworICAgIC8qIHdlIGFscmVhZHkgY29uc3VtZWQgdGhlIHJlcSAqLworICAg IGlvdl9kaXNjYXJkX2Zyb250KCZzZywgJnNnX251bSwgc2l6ZW9mKCp3YXJnLT5yZXEpKTsKKwor ICAgIGxlbiA9IHFpb19jaGFubmVsX3dyaXRldih3YXJnLT5pb2MsIHNnLCBzZ19udW0sICZlcnIp OworICAgIGlmIChsZW4gPCAwKSB7CisgICAgICAgIHJldCA9IC0xOworICAgIH0gZWxzZSB7Cisg ICAgICAgIHJldCA9IDA7CisgICAgfQorCisgICAgcmVzLmNtZCAgPSBjcHVfdG9fbGUxNihWSVJU SU9fUFNUT1JFX0NNRF9XUklURSk7CisgICAgcmVzLnR5cGUgPSB3YXJnLT5yZXEtPnR5cGU7Cisg ICAgcmVzLnJldCAgPSBjcHVfdG9fbGUzMihyZXQpOworCisgICAgLyogdGVsbCB0aGUgcmVzdWx0 IHRvIGd1ZXN0ICovCisgICAgaW92X2Zyb21fYnVmKGVsZW0tPmluX3NnLCBlbGVtLT5pbl9udW0s IDAsICZyZXMsIHNpemVvZihyZXMpKTsKKworICAgIHZpcnRxdWV1ZV9wdXNoKHZwcy0+d3ZxLCBl bGVtLCBzaXplb2YocmVzKSk7CisgICAgdmlydGlvX25vdGlmeShWSVJUSU9fREVWSUNFKHZwcyks IHZwcy0+d3ZxKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgZnJlZV93 YXJnX2ZuKGdwb2ludGVyIGRhdGEpCit7CisgICAgc3RydWN0IHBzdG9yZV93cml0ZV9hcmcgKndh cmcgPSBkYXRhOworCisgICAgcWlvX2NoYW5uZWxfY2xvc2Uod2FyZy0+aW9jLCBOVUxMKTsKKwor ICAgIGdfZnJlZSh3YXJnLT5lbGVtKTsKKyAgICBnX2ZyZWUod2FyZyk7Cit9CisKK3N0YXRpYyBz c2l6ZV90IHZpcnRpb19wc3RvcmVfZG9fd3JpdGUoVmlydElPUHN0b3JlICpzLCBWaXJ0UXVldWVF bGVtZW50ICplbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdmlydGlvX3BzdG9yZV9yZXEgKnJlcSkKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCB0eXBlID0g bGUxNl90b19jcHUocmVxLT50eXBlKTsKKyAgICBjaGFyICpmaWxlbmFtZSA9IE5VTEw7CisgICAg aW50IGZsYWdzID0gT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQzsKKyAgICBzdHJ1Y3QgcHN0 b3JlX3dyaXRlX2FyZyAqd2FyZyA9IE5VTEw7CisgICAgUUlPQ2hhbm5lbEZpbGUgKmlvY2Y7Cisg ICAgRXJyb3IgKmVyciA9IE5VTEw7CisgICAgaW50IHJldCA9IC0xOworCisgICAgLyogZG8gbm90 IGtlZXAgc2FtZSB0eXBlIG9mIGZpbGVzIG1vcmUgdGhhbiAnZmlsZS1tYXgnICovCisgICAgZGVs ZXRlX29sZF9wc3RvcmVfZmlsZShzLCB0eXBlKTsKKworICAgIGZpbGVuYW1lID0gdmlydGlvX3Bz dG9yZV90b19maWxlbmFtZShzLCByZXEpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7Cisg ICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpb2NmID0gcWlvX2NoYW5uZWxfZmlsZV9u ZXdfcGF0aChmaWxlbmFtZSwgZmxhZ3MsIDA2NDQsICZlcnIpOworICAgIGlmIChlcnIpIHsKKyAg ICAgICAgZXJyb3JfcmVwb3J0Zl9lcnIoZXJyLCAiY2Fubm90IGNyZWF0ZSBpbyBjaGFubmVsOiAi KTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgd2FyZyA9IGdfbWFsbG9jKHNpemVv Zigqd2FyZykpOworICAgIGlmICh3YXJnID09IE5VTEwpIHsKKyAgICAgICAgZ290byBvdXQ7Cisg ICAgfQorCisgICAgd2FyZy0+dnBzICA9IHM7CisgICAgd2FyZy0+ZWxlbSA9IGVsZW07CisgICAg d2FyZy0+cmVxICA9IHJlcTsKKyAgICB3YXJnLT5pb2MgID0gUUlPX0NIQU5ORUwoaW9jZik7CisK KyAgICBxaW9fY2hhbm5lbF9zZXRfYmxvY2tpbmcod2FyZy0+aW9jLCBmYWxzZSwgJmVycik7Cisg ICAgcWlvX2NoYW5uZWxfYWRkX3dhdGNoKHdhcmctPmlvYywgR19JT19PVVQsIHBzdG9yZV9hc3lu Y193cml0ZV9mbiwgd2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV93YXJnX2Zu KTsKKyAgICBnX2ZyZWUoZmlsZW5hbWUpOworICAgIHJldHVybiAxOworCitvdXQ6CisgICAgZ19m cmVlKGZpbGVuYW1lKTsKKyAgICBnX2ZyZWUod2FyZyk7CisgICAgcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV9oYW5kbGVfaW8oVmlydElPRGV2aWNlICp2ZGV2LCBW aXJ0UXVldWUgKnZxKQoreworICAgIFZpcnRJT1BzdG9yZSAqcyA9IFZJUlRJT19QU1RPUkUodmRl dik7CisgICAgVmlydFF1ZXVlRWxlbWVudCAqZWxlbTsKKyAgICBzdHJ1Y3QgdmlydGlvX3BzdG9y ZV9yZXEgcmVxOworICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcyByZXM7CisgICAgc3NpemVf dCBsZW4gPSAwOworICAgIGludCByZXQ7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGVsZW0g PSB2aXJ0cXVldWVfcG9wKHZxLCBzaXplb2YoVmlydFF1ZXVlRWxlbWVudCkpOworICAgICAgICBp ZiAoIWVsZW0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm IChlbGVtLT5vdXRfbnVtIDwgMSB8fCBlbGVtLT5pbl9udW0gPCAxKSB7CisgICAgICAgICAgICBl cnJvcl9yZXBvcnQoInJlcXVlc3Qgb3IgcmVzcG9uc2UgYnVmZmVyIGlzIG1pc3NpbmciKTsKKyAg ICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZWxlbS0+b3V0X251 bSA+IDIgfHwgZWxlbS0+aW5fbnVtID4gMykgeworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJp bnZhbGlkIG51bWJlciBvZiBpbnB1dC9vdXRwdXQgYnVmZmVyIik7CisgICAgICAgICAgICBleGl0 KDEpOworICAgICAgICB9CisKKyAgICAgICAgbGVuID0gaW92X3RvX2J1ZihlbGVtLT5vdXRfc2cs IGVsZW0tPm91dF9udW0sIDAsICZyZXEsIHNpemVvZihyZXEpKTsKKyAgICAgICAgaWYgKGxlbiAh PSAoc3NpemVfdClzaXplb2YocmVxKSkgeworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJpbnZh bGlkIHJlcXVlc3Qgc2l6ZTogJWxkIiwgKGxvbmcpbGVuKTsKKyAgICAgICAgICAgIGV4aXQoMSk7 CisgICAgICAgIH0KKyAgICAgICAgcmVzLmNtZCAgPSByZXEuY21kOworICAgICAgICByZXMudHlw ZSA9IHJlcS50eXBlOworCisgICAgICAgIHN3aXRjaCAobGUxNl90b19jcHUocmVxLmNtZCkpIHsK KyAgICAgICAgY2FzZSBWSVJUSU9fUFNUT1JFX0NNRF9PUEVOOgorICAgICAgICAgICAgcmV0ID0g dmlydGlvX3BzdG9yZV9kb19vcGVuKHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh c2UgVklSVElPX1BTVE9SRV9DTURfQ0xPU0U6CisgICAgICAgICAgICByZXQgPSB2aXJ0aW9fcHN0 b3JlX2RvX2Nsb3NlKHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVklSVElP X1BTVE9SRV9DTURfRVJBU0U6CisgICAgICAgICAgICByZXQgPSB2aXJ0aW9fcHN0b3JlX2RvX2Vy YXNlKHMsICZyZXEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVklSVElPX1BT VE9SRV9DTURfUkVBRDoKKyAgICAgICAgICAgIHJldCA9IHZpcnRpb19wc3RvcmVfZG9fcmVhZChz LCBlbGVtKTsKKyAgICAgICAgICAgIGlmIChyZXQgPT0gMSkgeworICAgICAgICAgICAgICAgIC8q IGFzeW5jIGNoYW5uZWwgaW8gKi8KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZJUlRJT19QU1RPUkVfQ01E X1dSSVRFOgorICAgICAgICAgICAgcmV0ID0gdmlydGlvX3BzdG9yZV9kb193cml0ZShzLCBlbGVt LCAmcmVxKTsKKyAgICAgICAgICAgIGlmIChyZXQgPT0gMSkgeworICAgICAgICAgICAgICAgIC8q IGFzeW5jIGNoYW5uZWwgaW8gKi8KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg cmV0ID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJlcy5y ZXQgPSByZXQ7CisKKyAgICAgICAgaW92X2Zyb21fYnVmKGVsZW0tPmluX3NnLCBlbGVtLT5pbl9u dW0sIDAsICZyZXMsIHNpemVvZihyZXMpKTsKKyAgICAgICAgdmlydHF1ZXVlX3B1c2godnEsIGVs ZW0sIHNpemVvZihyZXMpICsgbGVuKTsKKworICAgICAgICB2aXJ0aW9fbm90aWZ5KHZkZXYsIHZx KTsKKyAgICAgICAgZ19mcmVlKGVsZW0pOworCisgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAg ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRp b19wc3RvcmVfZGV2aWNlX3JlYWxpemUoRGV2aWNlU3RhdGUgKmRldiwgRXJyb3IgKiplcnJwKQor eworICAgIFZpcnRJT0RldmljZSAqdmRldiA9IFZJUlRJT19ERVZJQ0UoZGV2KTsKKyAgICBWaXJ0 SU9Qc3RvcmUgKnMgPSBWSVJUSU9fUFNUT1JFKGRldik7CisKKyAgICB2aXJ0aW9faW5pdCh2ZGV2 LCAidmlydGlvLXBzdG9yZSIsIFZJUlRJT19JRF9QU1RPUkUsCisgICAgICAgICAgICAgICAgc2l6 ZW9mKHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2NvbmZpZykpOworCisgICAgcy0+aWQgPSAxOworCisg ICAgaWYgKCFzLT5idWZzaXplKQorICAgICAgICBzLT5idWZzaXplID0gUFNUT1JFX0RFRkFVTFRf QlVGU0laRTsKKyAgICBpZiAoIXMtPmZpbGVfbWF4KQorICAgICAgICBzLT5maWxlX21heCA9IFBT VE9SRV9ERUZBVUxUX0ZJTEVfTUFYOworCisgICAgcy0+cnZxID0gdmlydGlvX2FkZF9xdWV1ZSh2 ZGV2LCAxMjgsIHZpcnRpb19wc3RvcmVfaGFuZGxlX2lvKTsKKyAgICBzLT53dnEgPSB2aXJ0aW9f YWRkX3F1ZXVlKHZkZXYsIDEyOCwgdmlydGlvX3BzdG9yZV9oYW5kbGVfaW8pOworfQorCitzdGF0 aWMgdm9pZCB2aXJ0aW9fcHN0b3JlX2RldmljZV91bnJlYWxpemUoRGV2aWNlU3RhdGUgKmRldiwg RXJyb3IgKiplcnJwKQoreworICAgIFZpcnRJT0RldmljZSAqdmRldiA9IFZJUlRJT19ERVZJQ0Uo ZGV2KTsKKworICAgIHZpcnRpb19jbGVhbnVwKHZkZXYpOworfQorCitzdGF0aWMgdm9pZCB2aXJ0 aW9fcHN0b3JlX2dldF9jb25maWcoVmlydElPRGV2aWNlICp2ZGV2LCB1aW50OF90ICpjb25maWdf ZGF0YSkKK3sKKyAgICBWaXJ0SU9Qc3RvcmUgKmRldiA9IFZJUlRJT19QU1RPUkUodmRldik7Cisg ICAgc3RydWN0IHZpcnRpb19wc3RvcmVfY29uZmlnIGNvbmZpZzsKKworICAgIGNvbmZpZy5idWZz aXplID0gY3B1X3RvX2xlMzIoZGV2LT5idWZzaXplKTsKKworICAgIG1lbWNweShjb25maWdfZGF0 YSwgJmNvbmZpZywgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2NvbmZpZykpOworfQorCitz dGF0aWMgdm9pZCB2aXJ0aW9fcHN0b3JlX3NldF9jb25maWcoVmlydElPRGV2aWNlICp2ZGV2LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNvbmZp Z19kYXRhKQoreworICAgIFZpcnRJT1BzdG9yZSAqZGV2ID0gVklSVElPX1BTVE9SRSh2ZGV2KTsK KyAgICBzdHJ1Y3QgdmlydGlvX3BzdG9yZV9jb25maWcgY29uZmlnOworCisgICAgbWVtY3B5KCZj b25maWcsIGNvbmZpZ19kYXRhLCBzaXplb2Yoc3RydWN0IHZpcnRpb19wc3RvcmVfY29uZmlnKSk7 CisKKyAgICBkZXYtPmJ1ZnNpemUgPSBsZTMyX3RvX2NwdShjb25maWcuYnVmc2l6ZSk7Cit9CisK K3N0YXRpYyB1aW50NjRfdCBnZXRfZmVhdHVyZXMoVmlydElPRGV2aWNlICp2ZGV2LCB1aW50NjRf dCBmLCBFcnJvciAqKmVycnApCit7CisgICAgcmV0dXJuIGY7Cit9CisKK3N0YXRpYyB2b2lkIHBz dG9yZV9nZXRfZGlyZWN0b3J5KE9iamVjdCAqb2JqLCBWaXNpdG9yICp2LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqb3BhcXVlLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgKiplcnJwKQoreworICAgIFZpcnRJ T1BzdG9yZSAqcyA9IG9wYXF1ZTsKKworICAgIHZpc2l0X3R5cGVfc3RyKHYsIG5hbWUsICZzLT5k aXJlY3RvcnksIGVycnApOworfQorCitzdGF0aWMgdm9pZCBwc3RvcmVfc2V0X2RpcmVjdG9yeShP YmplY3QgKm9iaiwgVmlzaXRvciAqdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKm9wYXF1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVycm9yICoqZXJycCkKK3sKKyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBvcGFxdWU7 CisgICAgRXJyb3IgKmxvY2FsX2VyciA9IE5VTEw7CisgICAgY2hhciAqdmFsdWU7CisKKyAgICB2 aXNpdF90eXBlX3N0cih2LCBuYW1lLCAmdmFsdWUsICZsb2NhbF9lcnIpOworICAgIGlmIChsb2Nh bF9lcnIpIHsKKyAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vycik7CisgICAg ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnX2ZyZWUocy0+ZGlyZWN0b3J5KTsKKyAgICBzLT5k aXJlY3RvcnkgPSB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgcHN0b3JlX3JlbGVhc2VfZGlyZWN0 b3J5KE9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBv cGFxdWU7CisKKyAgICBnX2ZyZWUocy0+ZGlyZWN0b3J5KTsKKyAgICBzLT5kaXJlY3RvcnkgPSBO VUxMOworfQorCitzdGF0aWMgdm9pZCBwc3RvcmVfZ2V0X2J1ZnNpemUoT2JqZWN0ICpvYmosIFZp c2l0b3IgKnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFt ZSwgdm9pZCAqb3BhcXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yICoq ZXJycCkKK3sKKyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBvcGFxdWU7CisgICAgdWludDY0X3QgdmFs dWUgPSBzLT5idWZzaXplOworCisgICAgdmlzaXRfdHlwZV9zaXplKHYsIG5hbWUsICZ2YWx1ZSwg ZXJycCk7Cit9CisKK3N0YXRpYyB2b2lkIHBzdG9yZV9zZXRfYnVmc2l6ZShPYmplY3QgKm9iaiwg VmlzaXRvciAqdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpu YW1lLCB2b2lkICpvcGFxdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3Ig KiplcnJwKQoreworICAgIFZpcnRJT1BzdG9yZSAqcyA9IG9wYXF1ZTsKKyAgICBFcnJvciAqZXJy b3IgPSBOVUxMOworICAgIHVpbnQ2NF90IHZhbHVlOworCisgICAgdmlzaXRfdHlwZV9zaXplKHYs IG5hbWUsICZ2YWx1ZSwgJmVycm9yKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZXJyb3Jf cHJvcGFnYXRlKGVycnAsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm ICh2YWx1ZSA8IDQwOTYpIHsKKyAgICAgICAgZXJyb3Jfc2V0ZygmZXJyb3IsICJXYXJuaW5nOiB0 b28gc21hbGwgYnVmZmVyIHNpemU6ICUiUFJJdTY0LCB2YWx1ZSk7CisgICAgICAgIGVycm9yX3By b3BhZ2F0ZShlcnJwLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzLT5i dWZzaXplID0gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHBzdG9yZV9nZXRfZmlsZV9tYXgoT2Jq ZWN0ICpvYmosIFZpc2l0b3IgKnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKm5hbWUsIHZvaWQgKm9wYXF1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRXJyb3IgKiplcnJwKQoreworICAgIFZpcnRJT1BzdG9yZSAqcyA9IG9wYXF1ZTsKKyAg ICBpbnQ2NF90IHZhbHVlID0gcy0+ZmlsZV9tYXg7CisKKyAgICB2aXNpdF90eXBlX2ludCh2LCBu YW1lLCAmdmFsdWUsIGVycnApOworfQorCitzdGF0aWMgdm9pZCBwc3RvcmVfc2V0X2ZpbGVfbWF4 KE9iamVjdCAqb2JqLCBWaXNpdG9yICp2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpvcGFxdWUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVycm9yICoqZXJycCkKK3sKKyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBvcGFxdWU7 CisgICAgRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBpbnQ2NF90IHZhbHVlOworCisgICAgdmlz aXRfdHlwZV9pbnQodiwgbmFtZSwgJnZhbHVlLCAmZXJyb3IpOworICAgIGlmIChlcnJvcikgewor ICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJycCwgZXJyb3IpOworICAgICAgICByZXR1cm47Cisg ICAgfQorCisgICAgcy0+ZmlsZV9tYXggPSB2YWx1ZTsKK30KKworc3RhdGljIFByb3BlcnR5IHZp cnRpb19wc3RvcmVfcHJvcGVydGllc1tdID0geworICAgIERFRklORV9QUk9QX0VORF9PRl9MSVNU KCksCit9OworCitzdGF0aWMgdm9pZCB2aXJ0aW9fcHN0b3JlX2luc3RhbmNlX2luaXQoT2JqZWN0 ICpvYmopCit7CisgICAgVmlydElPUHN0b3JlICpzID0gVklSVElPX1BTVE9SRShvYmopOworCisg ICAgb2JqZWN0X3Byb3BlcnR5X2FkZChvYmosICJkaXJlY3RvcnkiLCAic3RyIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgIHBzdG9yZV9nZXRfZGlyZWN0b3J5LCBwc3RvcmVfc2V0X2RpcmVjdG9y eSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzdG9yZV9yZWxlYXNlX2RpcmVjdG9yeSwgcywg TlVMTCk7CisgICAgb2JqZWN0X3Byb3BlcnR5X2FkZChvYmosICJidWZzaXplIiwgInNpemUiLAor ICAgICAgICAgICAgICAgICAgICAgICAgcHN0b3JlX2dldF9idWZzaXplLCBwc3RvcmVfc2V0X2J1 ZnNpemUsIE5VTEwsIHMsIE5VTEwpOworICAgIG9iamVjdF9wcm9wZXJ0eV9hZGQob2JqLCAiZmls ZS1tYXgiLCAiaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzdG9yZV9nZXRfZmlsZV9t YXgsIHBzdG9yZV9zZXRfZmlsZV9tYXgsIE5VTEwsIHMsIE5VTEwpOworfQorCitzdGF0aWMgdm9p ZCB2aXJ0aW9fcHN0b3JlX2NsYXNzX2luaXQoT2JqZWN0Q2xhc3MgKmtsYXNzLCB2b2lkICpkYXRh KQoreworICAgIERldmljZUNsYXNzICpkYyA9IERFVklDRV9DTEFTUyhrbGFzcyk7CisgICAgVmly dGlvRGV2aWNlQ2xhc3MgKnZkYyA9IFZJUlRJT19ERVZJQ0VfQ0xBU1Moa2xhc3MpOworCisgICAg ZGMtPnByb3BzID0gdmlydGlvX3BzdG9yZV9wcm9wZXJ0aWVzOworICAgIHNldF9iaXQoREVWSUNF X0NBVEVHT1JZX01JU0MsIGRjLT5jYXRlZ29yaWVzKTsKKyAgICB2ZGMtPnJlYWxpemUgPSB2aXJ0 aW9fcHN0b3JlX2RldmljZV9yZWFsaXplOworICAgIHZkYy0+dW5yZWFsaXplID0gdmlydGlvX3Bz dG9yZV9kZXZpY2VfdW5yZWFsaXplOworICAgIHZkYy0+Z2V0X2NvbmZpZyA9IHZpcnRpb19wc3Rv cmVfZ2V0X2NvbmZpZzsKKyAgICB2ZGMtPnNldF9jb25maWcgPSB2aXJ0aW9fcHN0b3JlX3NldF9j b25maWc7CisgICAgdmRjLT5nZXRfZmVhdHVyZXMgPSBnZXRfZmVhdHVyZXM7Cit9CisKK3N0YXRp YyBjb25zdCBUeXBlSW5mbyB2aXJ0aW9fcHN0b3JlX2luZm8gPSB7CisgICAgLm5hbWUgPSBUWVBF X1ZJUlRJT19QU1RPUkUsCisgICAgLnBhcmVudCA9IFRZUEVfVklSVElPX0RFVklDRSwKKyAgICAu aW5zdGFuY2Vfc2l6ZSA9IHNpemVvZihWaXJ0SU9Qc3RvcmUpLAorICAgIC5pbnN0YW5jZV9pbml0 ID0gdmlydGlvX3BzdG9yZV9pbnN0YW5jZV9pbml0LAorICAgIC5jbGFzc19pbml0ID0gdmlydGlv X3BzdG9yZV9jbGFzc19pbml0LAorfTsKKworc3RhdGljIHZvaWQgdmlydGlvX3JlZ2lzdGVyX3R5 cGVzKHZvaWQpCit7CisgICAgdHlwZV9yZWdpc3Rlcl9zdGF0aWMoJnZpcnRpb19wc3RvcmVfaW5m byk7Cit9CisKK3R5cGVfaW5pdCh2aXJ0aW9fcmVnaXN0ZXJfdHlwZXMpCmRpZmYgLS1naXQgYS9p bmNsdWRlL2h3L3BjaS9wY2kuaCBiL2luY2x1ZGUvaHcvcGNpL3BjaS5oCmluZGV4IDkyOWVjMmYu LmIzMTc3NGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaHcvcGNpL3BjaS5oCisrKyBiL2luY2x1ZGUv aHcvcGNpL3BjaS5oCkBAIC03OSw2ICs3OSw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklS VElPX1NDU0kgICAgICAgIDB4MTAwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJUlRJT19STkcg ICAgICAgICAweDEwMDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSVJUSU9fOVAgICAgICAgICAg MHgxMDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklSVElPX1BTVE9SRSAgICAgIDB4MTAwYQog CiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUkVESEFUICAgICAgICAgICAgIDB4MWIzNgogI2RlZmlu ZSBQQ0lfREVWSUNFX0lEX1JFREhBVF9CUklER0UgICAgICAweDAwMDEKZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuaCBiL2luY2x1ZGUvaHcvdmlydGlvL3ZpcnRp by1wc3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWIxODI4Ci0t LSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9ody92aXJ0aW8vdmlydGlvLXBzdG9yZS5oCkBAIC0w LDAgKzEsMzYgQEAKKy8qCisgKiBWaXJ0aW8gUHN0b3JlIFN1cHBvcnQKKyAqCisgKiBBdXRob3Jz OgorICogIE5hbWh5dW5nIEtpbSAgICAgIDxuYW1oeXVuZ0BnbWFpbC5jb20+CisgKgorICogVGhp cyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lv biAyLiAgU2VlCisgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5 LgorICoKKyAqLworCisjaWZuZGVmIF9RRU1VX1ZJUlRJT19QU1RPUkVfSAorI2RlZmluZSBfUUVN VV9WSVJUSU9fUFNUT1JFX0gKKworI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgvdmly dGlvX3BzdG9yZS5oIgorI2luY2x1ZGUgImh3L3ZpcnRpby92aXJ0aW8uaCIKKyNpbmNsdWRlICJo dy9wY2kvcGNpLmgiCisKKyNkZWZpbmUgVFlQRV9WSVJUSU9fUFNUT1JFICJ2aXJ0aW8tcHN0b3Jl LWRldmljZSIKKyNkZWZpbmUgVklSVElPX1BTVE9SRShvYmopIFwKKyAgICAgICAgT0JKRUNUX0NI RUNLKFZpcnRJT1BzdG9yZSwgKG9iaiksIFRZUEVfVklSVElPX1BTVE9SRSkKKwordHlwZWRlZiBz dHJ1Y3QgVmlydElPUHN0b3JlIHsKKyAgICBWaXJ0SU9EZXZpY2UgICAgcGFyZW50X29iajsKKyAg ICBWaXJ0UXVldWUgICAgICAqcnZxOworICAgIFZpcnRRdWV1ZSAgICAgICp3dnE7CisgICAgY2hh ciAgICAgICAgICAgKmRpcmVjdG9yeTsKKyAgICBpbnQgICAgICAgICAgICAgZmlsZV9pZHg7Cisg ICAgaW50ICAgICAgICAgICAgIG51bV9maWxlOworICAgIHN0cnVjdCBkaXJlbnQgKipmaWxlczsK KyAgICB1aW50NjRfdCAgICAgICAgaWQ7CisgICAgdWludDY0X3QgICAgICAgIGJ1ZnNpemU7Cisg ICAgdWludDY0X3QgICAgICAgIGZpbGVfbWF4OworfSBWaXJ0SU9Qc3RvcmU7CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19pZHMuaCBi L2luY2x1ZGUvc3RhbmRhcmQtaGVhZGVycy9saW51eC92aXJ0aW9faWRzLmgKaW5kZXggNzc5MjVm NS4uYzcyYTlhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3Zp cnRpb19pZHMuaAorKysgYi9pbmNsdWRlL3N0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX2lk cy5oCkBAIC00MSw1ICs0MSw2IEBACiAjZGVmaW5lIFZJUlRJT19JRF9DQUlGCSAgICAgICAxMiAv KiBWaXJ0aW8gY2FpZiAqLwogI2RlZmluZSBWSVJUSU9fSURfR1BVICAgICAgICAgIDE2IC8qIHZp cnRpbyBHUFUgKi8KICNkZWZpbmUgVklSVElPX0lEX0lOUFVUICAgICAgICAxOCAvKiB2aXJ0aW8g aW5wdXQgKi8KKyNkZWZpbmUgVklSVElPX0lEX1BTVE9SRSAgICAgICAyMiAvKiB2aXJ0aW8gcHN0 b3JlICovCiAKICNlbmRpZiAvKiBfTElOVVhfVklSVElPX0lEU19IICovCmRpZmYgLS1naXQgYS9p bmNsdWRlL3N0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX3BzdG9yZS5oIGIvaW5jbHVkZS9z dGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19wc3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4yZjkxODM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zdGFu ZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19wc3RvcmUuaApAQCAtMCwwICsxLDc2IEBACisjaWZu ZGVmIF9MSU5VWF9WSVJUSU9fUFNUT1JFX0gKKyNkZWZpbmUgX0xJTlVYX1ZJUlRJT19QU1RPUkVf SAorLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBk ZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKKyAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLgor ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp YnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJQk0gbm9yIHRoZSBuYW1lcyBvZiBp dHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lm aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK KyAqIFNVQ0ggREFNQUdFLiAqLworI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgvdHlw ZXMuaCIKKyNpbmNsdWRlICJzdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb190eXBlcy5oIgor I2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX2lkcy5oIgorI2luY2x1ZGUg InN0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX2NvbmZpZy5oIgorCisjZGVmaW5lIFZJUlRJ T19QU1RPUkVfQ01EX05VTEwgICAwCisjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX09QRU4gICAx CisjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX1JFQUQgICAyCisjZGVmaW5lIFZJUlRJT19QU1RP UkVfQ01EX1dSSVRFICAzCisjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX0VSQVNFICA0CisjZGVm aW5lIFZJUlRJT19QU1RPUkVfQ01EX0NMT1NFICA1CisKKyNkZWZpbmUgVklSVElPX1BTVE9SRV9U WVBFX1VOS05PV04gIDAKKyNkZWZpbmUgVklSVElPX1BTVE9SRV9UWVBFX0RNRVNHICAgIDEKKwor I2RlZmluZSBWSVJUSU9fUFNUT1JFX0ZMX0NPTVBSRVNTRUQgIDEKKworc3RydWN0IHZpcnRpb19w c3RvcmVfcmVxIHsKKyAgICBfX3ZpcnRpbzE2IGNtZDsKKyAgICBfX3ZpcnRpbzE2IHR5cGU7Cisg ICAgX192aXJ0aW8zMiBmbGFnczsKKyAgICBfX3ZpcnRpbzY0IGlkOworICAgIF9fdmlydGlvMzIg Y291bnQ7CisgICAgX192aXJ0aW8zMiByZXNlcnZlZDsKK307CisKK3N0cnVjdCB2aXJ0aW9fcHN0 b3JlX3JlcyB7CisgICAgX192aXJ0aW8xNiBjbWQ7CisgICAgX192aXJ0aW8xNiB0eXBlOworICAg IF9fdmlydGlvMzIgcmV0OworfTsKKworc3RydWN0IHZpcnRpb19wc3RvcmVfZmlsZWluZm8gewor ICAgIF9fdmlydGlvNjQgaWQ7CisgICAgX192aXJ0aW8zMiBjb3VudDsKKyAgICBfX3ZpcnRpbzE2 IHR5cGU7CisgICAgX192aXJ0aW8xNiB1bnVzZWQ7CisgICAgX192aXJ0aW8zMiBmbGFnczsKKyAg ICBfX3ZpcnRpbzMyIGxlbjsKKyAgICBfX3ZpcnRpbzY0IHRpbWVfc2VjOworICAgIF9fdmlydGlv MzIgdGltZV9uc2VjOworICAgIF9fdmlydGlvMzIgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3Qgdmly dGlvX3BzdG9yZV9jb25maWcgeworICAgIF9fdmlydGlvMzIgYnVmc2l6ZTsKK307CisKKyNlbmRp ZiAvKiBfTElOVVhfVklSVElPX1BTVE9SRV9IICovCmRpZmYgLS1naXQgYS9xZGV2LW1vbml0b3Iu YyBiL3FkZXYtbW9uaXRvci5jCmluZGV4IGUxOTYxN2YuLmUxZGY1YTkgMTAwNjQ0Ci0tLSBhL3Fk ZXYtbW9uaXRvci5jCisrKyBiL3FkZXYtbW9uaXRvci5jCkBAIC03Myw2ICs3Myw3IEBAIHN0YXRp YyBjb25zdCBRRGV2QWxpYXMgcWRldl9hbGlhc190YWJsZVtdID0gewogICAgIHsgInZpcnRpby1z ZXJpYWwtcGNpIiwgInZpcnRpby1zZXJpYWwiLCBRRU1VX0FSQ0hfQUxMICYgflFFTVVfQVJDSF9T MzkwWCB9LAogICAgIHsgInZpcnRpby10YWJsZXQtY2N3IiwgInZpcnRpby10YWJsZXQiLCBRRU1V X0FSQ0hfUzM5MFggfSwKICAgICB7ICJ2aXJ0aW8tdGFibGV0LXBjaSIsICJ2aXJ0aW8tdGFibGV0 IiwgUUVNVV9BUkNIX0FMTCAmIH5RRU1VX0FSQ0hfUzM5MFggfSwKKyAgICB7ICJ2aXJ0aW8tcHN0 b3JlLXBjaSIsICJ2aXJ0aW8tcHN0b3JlIiB9LAogICAgIHsgfQogfTsKIAotLSAKMi45LjMKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0 aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9y ZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0 dWFsaXphdGlvbg==