From mboxrd@z Thu Jan 1 00:00:00 1970 From: John.C.Harrison@Intel.com Subject: [PATCH 03/13] staging/android/sync: Move sync framework out of staging Date: Fri, 11 Dec 2015 13:11:51 +0000 Message-ID: <1449839521-21958-4-git-send-email-John.C.Harrison@Intel.com> References: <1449839521-21958-1-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 30BD76EFA1 for ; Fri, 11 Dec 2015 05:12:24 -0800 (PST) In-Reply-To: <1449839521-21958-1-git-send-email-John.C.Harrison@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KClRoZSBzeW5j IGZyYW1ld29yayBpcyBub3cgdXNlZCBieSB0aGUgaTkxNSBkcml2ZXIuIFRoZXJlZm9yZSBpdCBj YW4gYmUKbW92ZWQgb3V0IG9mIHN0YWdpbmcgYW5kIGludG8gdGhlIHJlZ3VsYXIgdHJlZS4gQWxz bywgdGhlIHB1YmxpYwppbnRlcmZhY2VzIGNhbiBhY3R1YWxseSBiZSBtYWRlIHB1YmxpYyBhbmQg ZXhwb3J0ZWQuCgp2MzogTmV3IHBhdGNoIGZvciBzZXJpZXMuCgpTaWduZWQtb2ZmLWJ5OiBKb2hu IEhhcnJpc29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBHZW9m ZiBNaWxsZXIgPGdlb2ZmLm1pbGxlckBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9hbmRyb2lkL0tj b25maWcgICAgICAgICAgICAgICAgfCAgMjggKysKIGRyaXZlcnMvYW5kcm9pZC9NYWtlZmlsZSAg ICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvYW5kcm9pZC9zd19zeW5jLmMgICAgICAgICAg ICAgIHwgMjYwICsrKysrKysrKysrKwogZHJpdmVycy9hbmRyb2lkL3N3X3N5bmMuaCAgICAgICAg ICAgICAgfCAgNTkgKysrCiBkcml2ZXJzL2FuZHJvaWQvc3luYy5jICAgICAgICAgICAgICAgICB8 IDczNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvYW5kcm9pZC9z eW5jLmggICAgICAgICAgICAgICAgIHwgMzY2ICsrKysrKysrKysrKysrKysKIGRyaXZlcnMvYW5k cm9pZC9zeW5jX2RlYnVnLmMgICAgICAgICAgIHwgMjU2ICsrKysrKysrKysrKwogZHJpdmVycy9h bmRyb2lkL3RyYWNlL3N5bmMuaCAgICAgICAgICAgfCAgODIgKysrKwogZHJpdmVycy9zdGFnaW5n L2FuZHJvaWQvS2NvbmZpZyAgICAgICAgfCAgMjggLS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lk L01ha2VmaWxlICAgICAgIHwgICAyIC0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N3X3N5bmMu YyAgICAgIHwgMjYwIC0tLS0tLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3dfc3lu Yy5oICAgICAgfCAgNTkgLS0tCiBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmMgICAgICAg ICB8IDczNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2lu Zy9hbmRyb2lkL3N5bmMuaCAgICAgICAgIHwgMzY2IC0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMv c3RhZ2luZy9hbmRyb2lkL3N5bmNfZGVidWcuYyAgIHwgMjU2IC0tLS0tLS0tLS0tLQogZHJpdmVy cy9zdGFnaW5nL2FuZHJvaWQvdHJhY2Uvc3luYy5oICAgfCAgODIgLS0tLQogZHJpdmVycy9zdGFn aW5nL2FuZHJvaWQvdWFwaS9zd19zeW5jLmggfCAgMzIgLS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRy b2lkL3VhcGkvc3luYy5oICAgIHwgIDk3IC0tLS0tCiBpbmNsdWRlL3VhcGkvS2J1aWxkICAgICAg ICAgICAgICAgICAgICB8ICAgMSArCiBpbmNsdWRlL3VhcGkvc3luYy9LYnVpbGQgICAgICAgICAg ICAgICB8ICAgMyArCiBpbmNsdWRlL3VhcGkvc3luYy9zd19zeW5jLmggICAgICAgICAgICB8ICAz MiArKwogaW5jbHVkZS91YXBpL3N5bmMvc3luYy5oICAgICAgICAgICAgICAgfCAgOTcgKysrKysK IDIyIGZpbGVzIGNoYW5nZWQsIDE5MjAgaW5zZXJ0aW9ucygrKSwgMTkxNiBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2FuZHJvaWQvc3dfc3luYy5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9hbmRyb2lkL3N3X3N5bmMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvYW5kcm9pZC9zeW5jLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2FuZHJvaWQv c3luYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9hbmRyb2lkL3N5bmNfZGVidWcuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvYW5kcm9pZC90cmFjZS9zeW5jLmgKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zd19zeW5jLmMKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zd19zeW5jLmgKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3N0YWdpbmcvYW5kcm9pZC9zeW5jX2RlYnVnLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3N0YWdpbmcvYW5kcm9pZC90cmFjZS9zeW5jLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3N0YWdpbmcvYW5kcm9pZC91YXBpL3N3X3N5bmMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkvc3luYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVk ZS91YXBpL3N5bmMvS2J1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL3N5bmMv c3dfc3luYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL3N5bmMvc3luYy5oCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWcgYi9kcml2ZXJzL2FuZHJvaWQvS2Nv bmZpZwppbmRleCBiZGZjNmM2Li45ZWRjZDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FuZHJvaWQv S2NvbmZpZworKysgYi9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZwpAQCAtMzIsNiArMzIsMzQgQEAg Y29uZmlnIEFORFJPSURfQklOREVSX0lQQ18zMkJJVAogCiAJICBOb3RlIHRoYXQgZW5hYmxpbmcg dGhpcyB3aWxsIGJyZWFrIG5ld2VyIEFuZHJvaWQgdXNlci1zcGFjZS4KIAorY29uZmlnIFNZTkMK Kwlib29sICJTeW5jaHJvbml6YXRpb24gZnJhbWV3b3JrIgorCWRlZmF1bHQgbgorCXNlbGVjdCBB Tk9OX0lOT0RFUworCXNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUgorCS0tLWhlbHAtLS0KKwkgIFRo aXMgb3B0aW9uIGVuYWJsZXMgdGhlIGZyYW1ld29yayBmb3Igc3luY2hyb25pemF0aW9uIGJldHdl ZW4gbXVsdGlwbGUKKwkgIGRyaXZlcnMuICBTeW5jIGltcGxlbWVudGF0aW9ucyBjYW4gdGFrZSBh ZHZhbnRhZ2Ugb2YgaGFyZHdhcmUKKwkgIHN5bmNocm9uaXphdGlvbiBidWlsdCBpbnRvIGRldmlj ZXMgbGlrZSBHUFVzLgorCitjb25maWcgU1dfU1lOQworCWJvb2wgIlNvZnR3YXJlIHN5bmNocm9u aXphdGlvbiBvYmplY3RzIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gU1lOQworCS0tLWhlbHAt LS0KKwkgIEEgc3luYyBvYmplY3QgZHJpdmVyIHRoYXQgdXNlcyBhIDMyYml0IGNvdW50ZXIgdG8g Y29vcmRpbmF0ZQorCSAgc3luY2hyb25pemF0aW9uLiAgVXNlZnVsIHdoZW4gdGhlcmUgaXMgbm8g aGFyZHdhcmUgcHJpbWl0aXZlIGJhY2tpbmcKKwkgIHRoZSBzeW5jaHJvbml6YXRpb24uCisKK2Nv bmZpZyBTV19TWU5DX1VTRVIKKwlib29sICJVc2Vyc3BhY2UgQVBJIGZvciBTV19TWU5DIgorCWRl ZmF1bHQgbgorCWRlcGVuZHMgb24gU1dfU1lOQworCS0tLWhlbHAtLS0KKwkgIFByb3ZpZGVzIGEg dXNlciBzcGFjZSBBUEkgdG8gdGhlIHN3IHN5bmMgb2JqZWN0LgorCSAgKldBUk5JTkcqIGltcHJv cGVyIHVzZSBvZiB0aGlzIGNhbiByZXN1bHQgaW4gZGVhZGxvY2tpbmcga2VybmVsCisJICBkcml2 ZXJzIGZyb20gdXNlcnNwYWNlLgorCiBlbmRpZiAjIGlmIEFORFJPSUQKIAogZW5kbWVudQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL01ha2VmaWxlIGIvZHJpdmVycy9hbmRyb2lkL01ha2Vm aWxlCmluZGV4IDNiN2U0YjAuLmExNDY1ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYW5kcm9pZC9N YWtlZmlsZQorKysgYi9kcml2ZXJzL2FuZHJvaWQvTWFrZWZpbGUKQEAgLTEsMyArMSw1IEBACiBj Y2ZsYWdzLXkgKz0gLUkkKHNyYykJCQkjIG5lZWRlZCBmb3IgdHJhY2UgZXZlbnRzCiAKIG9iai0k KENPTkZJR19BTkRST0lEX0JJTkRFUl9JUEMpCSs9IGJpbmRlci5vCitvYmotJChDT05GSUdfU1lO QykJCQkrPSBzeW5jLm8gc3luY19kZWJ1Zy5vCitvYmotJChDT05GSUdfU1dfU1lOQykJCQkrPSBz d19zeW5jLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9zd19zeW5jLmMgYi9kcml2ZXJz L2FuZHJvaWQvc3dfc3luYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0 ZmYxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FuZHJvaWQvc3dfc3luYy5jCkBAIC0w LDAgKzEsMjYwIEBACisvKgorICogZHJpdmVycy9iYXNlL3N3X3N5bmMuYworICoKKyAqIENvcHly aWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vu c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0 aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxp bnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9m cy5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNj YWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgInN3X3N5bmMu aCIKKworc3RhdGljIGludCBzd19zeW5jX2NtcCh1MzIgYSwgdTMyIGIpCit7CisJaWYgKGEgPT0g YikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKChzMzIpYSAtIChzMzIpYikgPCAwID8gLTEgOiAx OworfQorCitzdHJ1Y3Qgc3luY19wdCAqc3dfc3luY19wdF9jcmVhdGUoc3RydWN0IHN3X3N5bmNf dGltZWxpbmUgKm9iaiwgdTMyIHZhbHVlKQoreworCXN0cnVjdCBzd19zeW5jX3B0ICpwdDsKKwor CXB0ID0gKHN0cnVjdCBzd19zeW5jX3B0ICopCisJCXN5bmNfcHRfY3JlYXRlKCZvYmotPm9iaiwg c2l6ZW9mKHN0cnVjdCBzd19zeW5jX3B0KSk7CisKKwlwdC0+dmFsdWUgPSB2YWx1ZTsKKworCXJl dHVybiAoc3RydWN0IHN5bmNfcHQgKilwdDsKK30KK0VYUE9SVF9TWU1CT0woc3dfc3luY19wdF9j cmVhdGUpOworCitzdGF0aWMgc3RydWN0IHN5bmNfcHQgKnN3X3N5bmNfcHRfZHVwKHN0cnVjdCBz eW5jX3B0ICpzeW5jX3B0KQoreworCXN0cnVjdCBzd19zeW5jX3B0ICpwdCA9IChzdHJ1Y3Qgc3df c3luY19wdCAqKXN5bmNfcHQ7CisJc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiA9CisJCShz dHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqKXN5bmNfcHRfcGFyZW50KHN5bmNfcHQpOworCisJcmV0 dXJuIChzdHJ1Y3Qgc3luY19wdCAqKXN3X3N5bmNfcHRfY3JlYXRlKG9iaiwgcHQtPnZhbHVlKTsK K30KKworc3RhdGljIGludCBzd19zeW5jX3B0X2hhc19zaWduYWxlZChzdHJ1Y3Qgc3luY19wdCAq c3luY19wdCkKK3sKKwlzdHJ1Y3Qgc3dfc3luY19wdCAqcHQgPSAoc3RydWN0IHN3X3N5bmNfcHQg KilzeW5jX3B0OworCXN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmogPQorCQkoc3RydWN0IHN3 X3N5bmNfdGltZWxpbmUgKilzeW5jX3B0X3BhcmVudChzeW5jX3B0KTsKKworCXJldHVybiBzd19z eW5jX2NtcChvYmotPnZhbHVlLCBwdC0+dmFsdWUpID49IDA7Cit9CisKK3N0YXRpYyBpbnQgc3df c3luY19wdF9jb21wYXJlKHN0cnVjdCBzeW5jX3B0ICphLCBzdHJ1Y3Qgc3luY19wdCAqYikKK3sK KwlzdHJ1Y3Qgc3dfc3luY19wdCAqcHRfYSA9IChzdHJ1Y3Qgc3dfc3luY19wdCAqKWE7CisJc3Ry dWN0IHN3X3N5bmNfcHQgKnB0X2IgPSAoc3RydWN0IHN3X3N5bmNfcHQgKiliOworCisJcmV0dXJu IHN3X3N5bmNfY21wKHB0X2EtPnZhbHVlLCBwdF9iLT52YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQg c3dfc3luY19maWxsX2RyaXZlcl9kYXRhKHN0cnVjdCBzeW5jX3B0ICpzeW5jX3B0LAorCQkJCSAg ICB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3dfc3luY19wdCAqcHQgPSAoc3Ry dWN0IHN3X3N5bmNfcHQgKilzeW5jX3B0OworCisJaWYgKHNpemUgPCBzaXplb2YocHQtPnZhbHVl KSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoZGF0YSwgJnB0LT52YWx1ZSwgc2l6ZW9m KHB0LT52YWx1ZSkpOworCisJcmV0dXJuIHNpemVvZihwdC0+dmFsdWUpOworfQorCitzdGF0aWMg dm9pZCBzd19zeW5jX3RpbWVsaW5lX3ZhbHVlX3N0cihzdHJ1Y3Qgc3luY190aW1lbGluZSAqc3lu Y190aW1lbGluZSwKKwkJCQkgICAgICAgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qg c3dfc3luY190aW1lbGluZSAqdGltZWxpbmUgPQorCQkoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUg KilzeW5jX3RpbWVsaW5lOworCXNucHJpbnRmKHN0ciwgc2l6ZSwgIiVkIiwgdGltZWxpbmUtPnZh bHVlKTsKK30KKworc3RhdGljIHZvaWQgc3dfc3luY19wdF92YWx1ZV9zdHIoc3RydWN0IHN5bmNf cHQgKnN5bmNfcHQsCisJCQkJIGNoYXIgKnN0ciwgaW50IHNpemUpCit7CisJc3RydWN0IHN3X3N5 bmNfcHQgKnB0ID0gKHN0cnVjdCBzd19zeW5jX3B0ICopc3luY19wdDsKKworCXNucHJpbnRmKHN0 ciwgc2l6ZSwgIiVkIiwgcHQtPnZhbHVlKTsKK30KKworc3RhdGljIHN0cnVjdCBzeW5jX3RpbWVs aW5lX29wcyBzd19zeW5jX3RpbWVsaW5lX29wcyA9IHsKKwkuZHJpdmVyX25hbWUgPSAic3dfc3lu YyIsCisJLmR1cCA9IHN3X3N5bmNfcHRfZHVwLAorCS5oYXNfc2lnbmFsZWQgPSBzd19zeW5jX3B0 X2hhc19zaWduYWxlZCwKKwkuY29tcGFyZSA9IHN3X3N5bmNfcHRfY29tcGFyZSwKKwkuZmlsbF9k cml2ZXJfZGF0YSA9IHN3X3N5bmNfZmlsbF9kcml2ZXJfZGF0YSwKKwkudGltZWxpbmVfdmFsdWVf c3RyID0gc3dfc3luY190aW1lbGluZV92YWx1ZV9zdHIsCisJLnB0X3ZhbHVlX3N0ciA9IHN3X3N5 bmNfcHRfdmFsdWVfc3RyLAorfTsKKworc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKnN3X3N5bmNf dGltZWxpbmVfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN3X3N5bmNfdGlt ZWxpbmUgKm9iaiA9IChzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqKQorCQlzeW5jX3RpbWVsaW5l X2NyZWF0ZSgmc3dfc3luY190aW1lbGluZV9vcHMsCisJCQkJICAgICBzaXplb2Yoc3RydWN0IHN3 X3N5bmNfdGltZWxpbmUpLAorCQkJCSAgICAgbmFtZSk7CisKKwlyZXR1cm4gb2JqOworfQorRVhQ T1JUX1NZTUJPTChzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSk7CisKK3ZvaWQgc3dfc3luY190aW1l bGluZV9pbmMoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiwgdTMyIGluYykKK3sKKwlvYmot PnZhbHVlICs9IGluYzsKKworCXN5bmNfdGltZWxpbmVfc2lnbmFsKCZvYmotPm9iaik7Cit9CitF WFBPUlRfU1lNQk9MKHN3X3N5bmNfdGltZWxpbmVfaW5jKTsKKworI2lmZGVmIENPTkZJR19TV19T WU5DX1VTRVIKKy8qICpXQVJOSU5HKgorICoKKyAqIGltcHJvcGVyIHVzZSBvZiB0aGlzIGNhbiBy ZXN1bHQgaW4gZGVhZGxvY2tpbmcga2VybmVsIGRyaXZlcnMgZnJvbSB1c2Vyc3BhY2UuCisgKi8K KworLyogb3BlbmluZyBzd19zeW5jIGNyZWF0ZSBhIG5ldyBzeW5jIG9iaiAqLworc3RhdGljIGlu dCBzd19zeW5jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7 CisJc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iajsKKwljaGFyIHRhc2tfY29tbVtUQVNLX0NP TU1fTEVOXTsKKworCWdldF90YXNrX2NvbW0odGFza19jb21tLCBjdXJyZW50KTsKKworCW9iaiA9 IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlKHRhc2tfY29tbSk7CisJaWYgKCFvYmopCisJCXJldHVy biAtRU5PTUVNOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gb2JqOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgc3dfc3luY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVj dCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmogPSBmaWxlLT5w cml2YXRlX2RhdGE7CisKKwlzeW5jX3RpbWVsaW5lX2Rlc3Ryb3koJm9iai0+b2JqKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGxvbmcgc3dfc3luY19pb2N0bF9jcmVhdGVfZmVuY2Uoc3RydWN0 IHN3X3N5bmNfdGltZWxpbmUgKm9iaiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7 CisJaW50IGZkID0gZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NMT0VYRUMpOworCWludCBlcnI7CisJ c3RydWN0IHN5bmNfcHQgKnB0OworCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZTsKKwlzdHJ1Y3Qg c3dfc3luY19jcmVhdGVfZmVuY2VfZGF0YSBkYXRhOworCisJaWYgKGZkIDwgMCkKKwkJcmV0dXJu IGZkOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZkYXRhLCAodm9pZCBfX3VzZXIgKilhcmcsIHNp emVvZihkYXRhKSkpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBlcnI7CisJfQorCisJcHQg PSBzd19zeW5jX3B0X2NyZWF0ZShvYmosIGRhdGEudmFsdWUpOworCWlmICghcHQpIHsKKwkJZXJy ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJZGF0YS5uYW1lW3NpemVvZihkYXRhLm5h bWUpIC0gMV0gPSAnXDAnOworCWZlbmNlID0gc3luY19mZW5jZV9jcmVhdGUoZGF0YS5uYW1lLCBw dCk7CisJaWYgKCFmZW5jZSkgeworCQlzeW5jX3B0X2ZyZWUocHQpOworCQllcnIgPSAtRU5PTUVN OworCQlnb3RvIGVycjsKKwl9CisKKwlkYXRhLmZlbmNlID0gZmQ7CisJaWYgKGNvcHlfdG9fdXNl cigodm9pZCBfX3VzZXIgKilhcmcsICZkYXRhLCBzaXplb2YoZGF0YSkpKSB7CisJCXN5bmNfZmVu Y2VfcHV0KGZlbmNlKTsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBlcnI7CisJfQorCisJc3lu Y19mZW5jZV9pbnN0YWxsKGZlbmNlLCBmZCk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXB1dF91 bnVzZWRfZmQoZmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBsb25nIHN3X3N5bmNfaW9j dGxfaW5jKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmosIHVuc2lnbmVkIGxvbmcgYXJnKQor eworCXUzMiB2YWx1ZTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsdWUsICh2b2lkIF9fdXNl ciAqKWFyZywgc2l6ZW9mKHZhbHVlKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJc3dfc3luY190 aW1lbGluZV9pbmMob2JqLCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcg c3dfc3luY19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAg dW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiA9IGZp bGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTV19TWU5DX0lPQ19D UkVBVEVfRkVOQ0U6CisJCXJldHVybiBzd19zeW5jX2lvY3RsX2NyZWF0ZV9mZW5jZShvYmosIGFy Zyk7CisKKwljYXNlIFNXX1NZTkNfSU9DX0lOQzoKKwkJcmV0dXJuIHN3X3N5bmNfaW9jdGxfaW5j KG9iaiwgYXJnKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PVFRZOworCX0KK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3dfc3luY19mb3BzID0geworCS5vd25l ciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gc3dfc3luY19vcGVuLAorCS5yZWxlYXNlID0gc3df c3luY19yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IHN3X3N5bmNfaW9jdGwsCisJLmNvbXBh dF9pb2N0bCA9IHN3X3N5bmNfaW9jdGwsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ug c3dfc3luY19kZXYgPSB7CisJLm1pbm9yCT0gTUlTQ19EWU5BTUlDX01JTk9SLAorCS5uYW1lCT0g InN3X3N5bmMiLAorCS5mb3BzCT0gJnN3X3N5bmNfZm9wcywKK307CisKK3N0YXRpYyBpbnQgX19p bml0IHN3X3N5bmNfZGV2aWNlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gbWlzY19yZWdpc3Rlcigm c3dfc3luY19kZXYpOworfQorZGV2aWNlX2luaXRjYWxsKHN3X3N5bmNfZGV2aWNlX2luaXQpOwor CisjZW5kaWYgLyogQ09ORklHX1NXX1NZTkNfVVNFUiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9h bmRyb2lkL3N3X3N5bmMuaCBiL2RyaXZlcnMvYW5kcm9pZC9zd19zeW5jLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmOGI4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvYW5kcm9pZC9zd19zeW5jLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIGluY2x1ZGUvbGlu dXgvc3dfc3luYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgorICoK KyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmli dXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NXX1NZTkNfSAorI2RlZmluZSBfTElO VVhfU1dfU1lOQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4 L2tjb25maWcuaD4KKyNpbmNsdWRlIDx1YXBpL3N5bmMvc3dfc3luYy5oPgorI2luY2x1ZGUgInN5 bmMuaCIKKworc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgeworCXN0cnVjdAlzeW5jX3RpbWVsaW5l CW9iajsKKworCXUzMgkJCXZhbHVlOworfTsKKworc3RydWN0IHN3X3N5bmNfcHQgeworCXN0cnVj dCBzeW5jX3B0CQlwdDsKKworCXUzMgkJCXZhbHVlOworfTsKKworI2lmIElTX0VOQUJMRUQoQ09O RklHX1NXX1NZTkMpCitzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqc3dfc3luY190aW1lbGluZV9j cmVhdGUoY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIHN3X3N5bmNfdGltZWxpbmVfaW5jKHN0cnVj dCBzd19zeW5jX3RpbWVsaW5lICpvYmosIHUzMiBpbmMpOworCitzdHJ1Y3Qgc3luY19wdCAqc3df c3luY19wdF9jcmVhdGUoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiwgdTMyIHZhbHVlKTsK KyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpzd19zeW5jX3Rp bWVsaW5lX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiBOVUxMOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgc3dfc3luY190aW1lbGluZV9pbmMoc3RydWN0IHN3X3N5bmNfdGlt ZWxpbmUgKm9iaiwgdTMyIGluYykKK3sKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3luY19w dCAqc3dfc3luY19wdF9jcmVhdGUoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiwKKwkJCQkJ CXUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBJU19FTkFCTEVEKENP TkZJR19TV19TWU5DKSAqLworCisjZW5kaWYgLyogX0xJTlVYX1NXX1NZTkNfSCAqLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9hbmRyb2lkL3N5bmMuYyBiL2RyaXZlcnMvYW5kcm9pZC9zeW5jLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwZTkxOQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvYW5kcm9pZC9zeW5jLmMKQEAgLTAsMCArMSw3MzQgQEAKKy8qCisgKiBkcml2 ZXJzL2Jhc2Uvc3luYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgor ICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0 cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVk ZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxp bnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcG9s bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUu aD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgor I2luY2x1ZGUgPGxpbnV4L2Fub25faW5vZGVzLmg+CisKKyNpbmNsdWRlICJzeW5jLmgiCisKKyNk ZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgInRyYWNlL3N5bmMuaCIKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBmZW5jZV9vcHMgYW5kcm9pZF9mZW5jZV9vcHM7CitzdGF0aWMgY29u c3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeW5jX2ZlbmNlX2ZvcHM7CisKK3N0cnVjdCBzeW5j X3RpbWVsaW5lICpzeW5jX3RpbWVsaW5lX2NyZWF0ZShjb25zdCBzdHJ1Y3Qgc3luY190aW1lbGlu ZV9vcHMgKm9wcywKKwkJCQkJICAgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3Ry dWN0IHN5bmNfdGltZWxpbmUgKm9iajsKKworCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBzeW5j X3RpbWVsaW5lKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlvYmogPSBremFsbG9jKHNpemUsIEdGUF9L RVJORUwpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlrcmVmX2luaXQo Jm9iai0+a3JlZik7CisJb2JqLT5vcHMgPSBvcHM7CisJb2JqLT5jb250ZXh0ID0gZmVuY2VfY29u dGV4dF9hbGxvYygxKTsKKwlzdHJsY3B5KG9iai0+bmFtZSwgbmFtZSwgc2l6ZW9mKG9iai0+bmFt ZSkpOworCisJSU5JVF9MSVNUX0hFQUQoJm9iai0+Y2hpbGRfbGlzdF9oZWFkKTsKKwlJTklUX0xJ U1RfSEVBRCgmb2JqLT5hY3RpdmVfbGlzdF9oZWFkKTsKKwlzcGluX2xvY2tfaW5pdCgmb2JqLT5j aGlsZF9saXN0X2xvY2spOworCisJc3luY190aW1lbGluZV9kZWJ1Z19hZGQob2JqKTsKKworCXJl dHVybiBvYmo7Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNfdGltZWxpbmVfY3JlYXRlKTsKKworc3Rh dGljIHZvaWQgc3luY190aW1lbGluZV9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVj dCBzeW5jX3RpbWVsaW5lICpvYmogPQorCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHN5bmNf dGltZWxpbmUsIGtyZWYpOworCisJc3luY190aW1lbGluZV9kZWJ1Z19yZW1vdmUob2JqKTsKKwor CWlmIChvYmotPm9wcy0+cmVsZWFzZV9vYmopCisJCW9iai0+b3BzLT5yZWxlYXNlX29iaihvYmop OworCisJa2ZyZWUob2JqKTsKK30KKworc3RhdGljIHZvaWQgc3luY190aW1lbGluZV9nZXQoc3Ry dWN0IHN5bmNfdGltZWxpbmUgKm9iaikKK3sKKwlrcmVmX2dldCgmb2JqLT5rcmVmKTsKK30KKwor c3RhdGljIHZvaWQgc3luY190aW1lbGluZV9wdXQoc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iaikK K3sKKwlrcmVmX3B1dCgmb2JqLT5rcmVmLCBzeW5jX3RpbWVsaW5lX2ZyZWUpOworfQorCit2b2lk IHN5bmNfdGltZWxpbmVfZGVzdHJveShzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQoreworCW9i ai0+ZGVzdHJveWVkID0gdHJ1ZTsKKwkvKgorCSAqIEVuc3VyZSB0aW1lbGluZSBpcyBtYXJrZWQg YXMgZGVzdHJveWVkIGJlZm9yZQorCSAqIGNoYW5naW5nIHRpbWVsaW5lJ3MgZmVuY2VzIHN0YXR1 cy4KKwkgKi8KKwlzbXBfd21iKCk7CisKKwkvKgorCSAqIHNpZ25hbCBhbnkgY2hpbGRyZW4gdGhh dCB0aGVpciBwYXJlbnQgaXMgZ29pbmcgYXdheS4KKwkgKi8KKwlzeW5jX3RpbWVsaW5lX3NpZ25h bChvYmopOworCXN5bmNfdGltZWxpbmVfcHV0KG9iaik7Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNf dGltZWxpbmVfZGVzdHJveSk7CisKK3ZvaWQgc3luY190aW1lbGluZV9zaWduYWwoc3RydWN0IHN5 bmNfdGltZWxpbmUgKm9iaikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChz aWduYWxlZF9wdHMpOworCXN0cnVjdCBzeW5jX3B0ICpwdCwgKm5leHQ7CisKKwl0cmFjZV9zeW5j X3RpbWVsaW5lKG9iaik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2JqLT5jaGlsZF9saXN0X2xv Y2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdCwgbmV4dCwgJm9iai0+ YWN0aXZlX2xpc3RfaGVhZCwKKwkJCQkgYWN0aXZlX2xpc3QpIHsKKwkJaWYgKGZlbmNlX2lzX3Np Z25hbGVkX2xvY2tlZCgmcHQtPmJhc2UpKQorCQkJbGlzdF9kZWxfaW5pdCgmcHQtPmFjdGl2ZV9s aXN0KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmotPmNoaWxkX2xpc3RfbG9j aywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChzeW5jX3RpbWVsaW5lX3NpZ25hbCk7CisKK3N0 cnVjdCBzeW5jX3B0ICpzeW5jX3B0X2NyZWF0ZShzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqLCBp bnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzeW5jX3B0ICpwdDsK KworCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBzeW5jX3B0KSkKKwkJcmV0dXJuIE5VTEw7CisK KwlwdCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHB0ID09IE5VTEwpCisJCXJl dHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBm bGFncyk7CisJc3luY190aW1lbGluZV9nZXQob2JqKTsKKwlmZW5jZV9pbml0KCZwdC0+YmFzZSwg JmFuZHJvaWRfZmVuY2Vfb3BzLCAmb2JqLT5jaGlsZF9saXN0X2xvY2ssCisJCSAgIG9iai0+Y29u dGV4dCwgKytvYmotPnZhbHVlKTsKKwlsaXN0X2FkZF90YWlsKCZwdC0+Y2hpbGRfbGlzdCwgJm9i ai0+Y2hpbGRfbGlzdF9oZWFkKTsKKwlJTklUX0xJU1RfSEVBRCgmcHQtPmFjdGl2ZV9saXN0KTsK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmotPmNoaWxkX2xpc3RfbG9jaywgZmxhZ3MpOwor CXJldHVybiBwdDsKK30KK0VYUE9SVF9TWU1CT0woc3luY19wdF9jcmVhdGUpOworCit2b2lkIHN5 bmNfcHRfZnJlZShzdHJ1Y3Qgc3luY19wdCAqcHQpCit7CisJZmVuY2VfcHV0KCZwdC0+YmFzZSk7 Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNfcHRfZnJlZSk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3luY19m ZW5jZSAqc3luY19mZW5jZV9hbGxvYyhpbnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlz dHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2U7CisKKwlmZW5jZSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tF Uk5FTCk7CisJaWYgKGZlbmNlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJZmVuY2UtPmZp bGUgPSBhbm9uX2lub2RlX2dldGZpbGUoInN5bmNfZmVuY2UiLCAmc3luY19mZW5jZV9mb3BzLAor CQkJCQkgZmVuY2UsIDApOworCWlmIChJU19FUlIoZmVuY2UtPmZpbGUpKQorCQlnb3RvIGVycjsK KworCWtyZWZfaW5pdCgmZmVuY2UtPmtyZWYpOworCXN0cmxjcHkoZmVuY2UtPm5hbWUsIG5hbWUs IHNpemVvZihmZW5jZS0+bmFtZSkpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZmVuY2UtPndx KTsKKworCXJldHVybiBmZW5jZTsKKworZXJyOgorCWtmcmVlKGZlbmNlKTsKKwlyZXR1cm4gTlVM TDsKK30KKworc3RhdGljIHZvaWQgZmVuY2VfY2hlY2tfY2JfZnVuYyhzdHJ1Y3QgZmVuY2UgKmYs IHN0cnVjdCBmZW5jZV9jYiAqY2IpCit7CisJc3RydWN0IHN5bmNfZmVuY2VfY2IgKmNoZWNrOwor CXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZTsKKworCWNoZWNrID0gY29udGFpbmVyX29mKGNiLCBz dHJ1Y3Qgc3luY19mZW5jZV9jYiwgY2IpOworCWZlbmNlID0gY2hlY2stPmZlbmNlOworCisJaWYg KGF0b21pY19kZWNfYW5kX3Rlc3QoJmZlbmNlLT5zdGF0dXMpKQorCQl3YWtlX3VwX2FsbCgmZmVu Y2UtPndxKTsKK30KKworLyogVE9ETzogaW1wbGVtZW50IGEgY3JlYXRlIHdoaWNoIHRha2VzIG1v cmUgdGhhdCBvbmUgc3luY19wdCAqLworc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfY3Jl YXRlX2RtYShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZmVuY2UgKnB0KQoreworCXN0cnVjdCBz eW5jX2ZlbmNlICpmZW5jZTsKKworCWZlbmNlID0gc3luY19mZW5jZV9hbGxvYyhvZmZzZXRvZihz dHJ1Y3Qgc3luY19mZW5jZSwgY2JzWzFdKSwgbmFtZSk7CisJaWYgKGZlbmNlID09IE5VTEwpCisJ CXJldHVybiBOVUxMOworCisJZmVuY2UtPm51bV9mZW5jZXMgPSAxOworCWF0b21pY19zZXQoJmZl bmNlLT5zdGF0dXMsIDEpOworCisJZmVuY2UtPmNic1swXS5zeW5jX3B0ID0gcHQ7CisJZmVuY2Ut PmNic1swXS5mZW5jZSA9IGZlbmNlOworCWlmIChmZW5jZV9hZGRfY2FsbGJhY2socHQsICZmZW5j ZS0+Y2JzWzBdLmNiLCBmZW5jZV9jaGVja19jYl9mdW5jKSkKKwkJYXRvbWljX2RlYygmZmVuY2Ut PnN0YXR1cyk7CisKKwlzeW5jX2ZlbmNlX2RlYnVnX2FkZChmZW5jZSk7CisKKwlyZXR1cm4gZmVu Y2U7Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNfZmVuY2VfY3JlYXRlX2RtYSk7CisKK3N0cnVjdCBz eW5jX2ZlbmNlICpzeW5jX2ZlbmNlX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3lu Y19wdCAqcHQpCit7CisJcmV0dXJuIHN5bmNfZmVuY2VfY3JlYXRlX2RtYShuYW1lLCAmcHQtPmJh c2UpOworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX2NyZWF0ZSk7CisKK3N0cnVjdCBzeW5j X2ZlbmNlICpzeW5jX2ZlbmNlX2ZkZ2V0KGludCBmZCkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9 IGZnZXQoZmQpOworCisJaWYgKGZpbGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAo ZmlsZS0+Zl9vcCAhPSAmc3luY19mZW5jZV9mb3BzKQorCQlnb3RvIGVycjsKKworCXJldHVybiBm aWxlLT5wcml2YXRlX2RhdGE7CisKK2VycjoKKwlmcHV0KGZpbGUpOworCXJldHVybiBOVUxMOwor fQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX2ZkZ2V0KTsKKwordm9pZCBzeW5jX2ZlbmNlX3B1 dChzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UpCit7CisJZnB1dChmZW5jZS0+ZmlsZSk7Cit9CitF WFBPUlRfU1lNQk9MKHN5bmNfZmVuY2VfcHV0KTsKKwordm9pZCBzeW5jX2ZlbmNlX2luc3RhbGwo c3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlLCBpbnQgZmQpCit7CisJZmRfaW5zdGFsbChmZCwgZmVu Y2UtPmZpbGUpOworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX2luc3RhbGwpOworCitzdGF0 aWMgdm9pZCBzeW5jX2ZlbmNlX2FkZF9wdChzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsCisJCQkg ICAgICBpbnQgKmksIHN0cnVjdCBmZW5jZSAqcHQpCit7CisJZmVuY2UtPmNic1sqaV0uc3luY19w dCA9IHB0OworCWZlbmNlLT5jYnNbKmldLmZlbmNlID0gZmVuY2U7CisKKwlpZiAoIWZlbmNlX2Fk ZF9jYWxsYmFjayhwdCwgJmZlbmNlLT5jYnNbKmldLmNiLCBmZW5jZV9jaGVja19jYl9mdW5jKSkg eworCQlmZW5jZV9nZXQocHQpOworCQkoKmkpKys7CisJfQorfQorCitzdHJ1Y3Qgc3luY19mZW5j ZSAqc3luY19mZW5jZV9tZXJnZShjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBzdHJ1Y3Qgc3lu Y19mZW5jZSAqYSwgc3RydWN0IHN5bmNfZmVuY2UgKmIpCit7CisJaW50IG51bV9mZW5jZXMgPSBh LT5udW1fZmVuY2VzICsgYi0+bnVtX2ZlbmNlczsKKwlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2U7 CisJaW50IGksIGlfYSwgaV9iOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG9mZnNldG9mKHN0cnVj dCBzeW5jX2ZlbmNlLCBjYnNbbnVtX2ZlbmNlc10pOworCisJZmVuY2UgPSBzeW5jX2ZlbmNlX2Fs bG9jKHNpemUsIG5hbWUpOworCWlmIChmZW5jZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwor CWF0b21pY19zZXQoJmZlbmNlLT5zdGF0dXMsIG51bV9mZW5jZXMpOworCisJLyoKKwkgKiBBc3N1 bWUgc3luY19mZW5jZSBhIGFuZCBiIGFyZSBib3RoIG9yZGVyZWQgYW5kIGhhdmUgbm8KKwkgKiBk dXBsaWNhdGVzIHdpdGggdGhlIHNhbWUgY29udGV4dC4KKwkgKgorCSAqIElmIGEgc3luY19mZW5j ZSBjYW4gb25seSBiZSBjcmVhdGVkIHdpdGggc3luY19mZW5jZV9tZXJnZQorCSAqIGFuZCBzeW5j X2ZlbmNlX2NyZWF0ZSwgdGhpcyBpcyBhIHJlYXNvbmFibGUgYXNzdW1wdGlvbi4KKwkgKi8KKwlm b3IgKGkgPSBpX2EgPSBpX2IgPSAwOyBpX2EgPCBhLT5udW1fZmVuY2VzICYmIGlfYiA8IGItPm51 bV9mZW5jZXM7ICkgeworCQlzdHJ1Y3QgZmVuY2UgKnB0X2EgPSBhLT5jYnNbaV9hXS5zeW5jX3B0 OworCQlzdHJ1Y3QgZmVuY2UgKnB0X2IgPSBiLT5jYnNbaV9iXS5zeW5jX3B0OworCisJCWlmIChw dF9hLT5jb250ZXh0IDwgcHRfYi0+Y29udGV4dCkgeworCQkJc3luY19mZW5jZV9hZGRfcHQoZmVu Y2UsICZpLCBwdF9hKTsKKworCQkJaV9hKys7CisJCX0gZWxzZSBpZiAocHRfYS0+Y29udGV4dCA+ IHB0X2ItPmNvbnRleHQpIHsKKwkJCXN5bmNfZmVuY2VfYWRkX3B0KGZlbmNlLCAmaSwgcHRfYik7 CisKKwkJCWlfYisrOworCQl9IGVsc2UgeworCQkJaWYgKHB0X2EtPnNlcW5vIC0gcHRfYi0+c2Vx bm8gPD0gSU5UX01BWCkKKwkJCQlzeW5jX2ZlbmNlX2FkZF9wdChmZW5jZSwgJmksIHB0X2EpOwor CQkJZWxzZQorCQkJCXN5bmNfZmVuY2VfYWRkX3B0KGZlbmNlLCAmaSwgcHRfYik7CisKKwkJCWlf YSsrOworCQkJaV9iKys7CisJCX0KKwl9CisKKwlmb3IgKDsgaV9hIDwgYS0+bnVtX2ZlbmNlczsg aV9hKyspCisJCXN5bmNfZmVuY2VfYWRkX3B0KGZlbmNlLCAmaSwgYS0+Y2JzW2lfYV0uc3luY19w dCk7CisKKwlmb3IgKDsgaV9iIDwgYi0+bnVtX2ZlbmNlczsgaV9iKyspCisJCXN5bmNfZmVuY2Vf YWRkX3B0KGZlbmNlLCAmaSwgYi0+Y2JzW2lfYl0uc3luY19wdCk7CisKKwlpZiAobnVtX2ZlbmNl cyA+IGkpCisJCWF0b21pY19zdWIobnVtX2ZlbmNlcyAtIGksICZmZW5jZS0+c3RhdHVzKTsKKwlm ZW5jZS0+bnVtX2ZlbmNlcyA9IGk7CisKKwlzeW5jX2ZlbmNlX2RlYnVnX2FkZChmZW5jZSk7CisJ cmV0dXJuIGZlbmNlOworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX21lcmdlKTsKKworaW50 IHN5bmNfZmVuY2Vfd2FrZV91cF93cSh3YWl0X3F1ZXVlX3QgKmN1cnIsIHVuc2lnbmVkIG1vZGUs CisJCQkJIGludCB3YWtlX2ZsYWdzLCB2b2lkICprZXkpCit7CisJc3RydWN0IHN5bmNfZmVuY2Vf d2FpdGVyICp3YWl0OworCisJd2FpdCA9IGNvbnRhaW5lcl9vZihjdXJyLCBzdHJ1Y3Qgc3luY19m ZW5jZV93YWl0ZXIsIHdvcmspOworCWxpc3RfZGVsX2luaXQoJndhaXQtPndvcmsudGFza19saXN0 KTsKKworCXdhaXQtPmNhbGxiYWNrKHdhaXQtPndvcmsucHJpdmF0ZSwgd2FpdCk7CisJcmV0dXJu IDE7Cit9CisKK2ludCBzeW5jX2ZlbmNlX3dhaXRfYXN5bmMoc3RydWN0IHN5bmNfZmVuY2UgKmZl bmNlLAorCQkJICBzdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgKndhaXRlcikKK3sKKwlpbnQgZXJy ID0gYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisK KwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmICghZXJyKQorCQlyZXR1cm4gMTsK KworCWluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoJndhaXRlci0+d29yaywgc3luY19mZW5jZV93 YWtlX3VwX3dxKTsKKwl3YWl0ZXItPndvcmsucHJpdmF0ZSA9IGZlbmNlOworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJmZlbmNlLT53cS5sb2NrLCBmbGFncyk7CisJZXJyID0gYXRvbWljX3JlYWQoJmZl bmNlLT5zdGF0dXMpOworCWlmIChlcnIgPiAwKQorCQlfX2FkZF93YWl0X3F1ZXVlX3RhaWwoJmZl bmNlLT53cSwgJndhaXRlci0+d29yayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVuY2Ut PndxLmxvY2ssIGZsYWdzKTsKKworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0 dXJuICFlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNfZmVuY2Vfd2FpdF9hc3luYyk7CisKK2lu dCBzeW5jX2ZlbmNlX2NhbmNlbF9hc3luYyhzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsCisJCQkg ICAgIHN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciAqd2FpdGVyKQoreworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmVuY2UtPndxLmxv Y2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJndhaXRlci0+d29yay50YXNrX2xpc3QpKQor CQlsaXN0X2RlbF9pbml0KCZ3YWl0ZXItPndvcmsudGFza19saXN0KTsKKwllbHNlCisJCXJldCA9 IC1FTk9FTlQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVuY2UtPndxLmxvY2ssIGZsYWdz KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX2NhbmNlbF9hc3lu Yyk7CisKK2ludCBzeW5jX2ZlbmNlX3dhaXQoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlLCBsb25n IHRpbWVvdXQpCit7CisJbG9uZyByZXQ7CisJaW50IGk7CisKKwlpZiAodGltZW91dCA8IDApCisJ CXRpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKKwllbHNlCisJCXRpbWVvdXQgPSBtc2Vj c190b19qaWZmaWVzKHRpbWVvdXQpOworCisJdHJhY2Vfc3luY193YWl0KGZlbmNlLCAxKTsKKwlm b3IgKGkgPSAwOyBpIDwgZmVuY2UtPm51bV9mZW5jZXM7ICsraSkKKwkJdHJhY2Vfc3luY19wdChm ZW5jZS0+Y2JzW2ldLnN5bmNfcHQpOworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90 aW1lb3V0KGZlbmNlLT53cSwKKwkJCQkJICAgICAgIGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVz KSA8PSAwLAorCQkJCQkgICAgICAgdGltZW91dCk7CisJdHJhY2Vfc3luY193YWl0KGZlbmNlLCAw KTsKKworCWlmIChyZXQgPCAwKSB7CisJCXJldHVybiByZXQ7CisJfSBlbHNlIGlmIChyZXQgPT0g MCkgeworCQlpZiAodGltZW91dCkgeworCQkJcHJfaW5mbygiZmVuY2UgdGltZW91dCBvbiBbJXBd IGFmdGVyICVkbXNcbiIsIGZlbmNlLAorCQkJCWppZmZpZXNfdG9fbXNlY3ModGltZW91dCkpOwor CQkJc3luY19kdW1wKCk7CisJCX0KKwkJcmV0dXJuIC1FVElNRTsKKwl9CisKKwlyZXQgPSBhdG9t aWNfcmVhZCgmZmVuY2UtPnN0YXR1cyk7CisJaWYgKHJldCkgeworCQlwcl9pbmZvKCJmZW5jZSBl cnJvciAlbGQgb24gWyVwXVxuIiwgcmV0LCBmZW5jZSk7CisJCXN5bmNfZHVtcCgpOworCX0KKwly ZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX3dhaXQpOworCitzdGF0aWMg Y29uc3QgY2hhciAqYW5kcm9pZF9mZW5jZV9nZXRfZHJpdmVyX25hbWUoc3RydWN0IGZlbmNlICpm ZW5jZSkKK3sKKwlzdHJ1Y3Qgc3luY19wdCAqcHQgPSBjb250YWluZXJfb2YoZmVuY2UsIHN0cnVj dCBzeW5jX3B0LCBiYXNlKTsKKwlzdHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50ID0gc3luY19w dF9wYXJlbnQocHQpOworCisJcmV0dXJuIHBhcmVudC0+b3BzLT5kcml2ZXJfbmFtZTsKK30KKwor c3RhdGljIGNvbnN0IGNoYXIgKmFuZHJvaWRfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUoc3RydWN0 IGZlbmNlICpmZW5jZSkKK3sKKwlzdHJ1Y3Qgc3luY19wdCAqcHQgPSBjb250YWluZXJfb2YoZmVu Y2UsIHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKKwlzdHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50 ID0gc3luY19wdF9wYXJlbnQocHQpOworCisJcmV0dXJuIHBhcmVudC0+bmFtZTsKK30KKworc3Rh dGljIHZvaWQgYW5kcm9pZF9mZW5jZV9yZWxlYXNlKHN0cnVjdCBmZW5jZSAqZmVuY2UpCit7CisJ c3RydWN0IHN5bmNfcHQgKnB0ID0gY29udGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qgc3luY19wdCwg YmFzZSk7CisJc3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRfcGFyZW50KHB0 KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoZmVuY2UtPmxv Y2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmcHQtPmNoaWxkX2xpc3QpOworCWlmIChXQVJOX09OX09O Q0UoIWxpc3RfZW1wdHkoJnB0LT5hY3RpdmVfbGlzdCkpKQorCQlsaXN0X2RlbCgmcHQtPmFjdGl2 ZV9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZlbmNlLT5sb2NrLCBmbGFncyk7CisK KwlpZiAocGFyZW50LT5vcHMtPmZyZWVfcHQpCisJCXBhcmVudC0+b3BzLT5mcmVlX3B0KHB0KTsK KworCXN5bmNfdGltZWxpbmVfcHV0KHBhcmVudCk7CisJZmVuY2VfZnJlZSgmcHQtPmJhc2UpOwor fQorCitzdGF0aWMgYm9vbCBhbmRyb2lkX2ZlbmNlX3NpZ25hbGVkKHN0cnVjdCBmZW5jZSAqZmVu Y2UpCit7CisJc3RydWN0IHN5bmNfcHQgKnB0ID0gY29udGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qg c3luY19wdCwgYmFzZSk7CisJc3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRf cGFyZW50KHB0KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcGFyZW50LT5vcHMtPmhhc19zaWduYWxl ZChwdCk7CisJaWYgKHJldCA8IDApCisJCWZlbmNlLT5zdGF0dXMgPSByZXQ7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGJvb2wgYW5kcm9pZF9mZW5jZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVj dCBmZW5jZSAqZmVuY2UpCit7CisJc3RydWN0IHN5bmNfcHQgKnB0ID0gY29udGFpbmVyX29mKGZl bmNlLCBzdHJ1Y3Qgc3luY19wdCwgYmFzZSk7CisJc3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVu dCA9IHN5bmNfcHRfcGFyZW50KHB0KTsKKworCWlmIChhbmRyb2lkX2ZlbmNlX3NpZ25hbGVkKGZl bmNlKSkKKwkJcmV0dXJuIGZhbHNlOworCisJbGlzdF9hZGRfdGFpbCgmcHQtPmFjdGl2ZV9saXN0 LCAmcGFyZW50LT5hY3RpdmVfbGlzdF9oZWFkKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj IGludCBhbmRyb2lkX2ZlbmNlX2ZpbGxfZHJpdmVyX2RhdGEoc3RydWN0IGZlbmNlICpmZW5jZSwK KwkJCQkJICB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3luY19wdCAqcHQgPSBj b250YWluZXJfb2YoZmVuY2UsIHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKKwlzdHJ1Y3Qgc3luY190 aW1lbGluZSAqcGFyZW50ID0gc3luY19wdF9wYXJlbnQocHQpOworCisJaWYgKCFwYXJlbnQtPm9w cy0+ZmlsbF9kcml2ZXJfZGF0YSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBhcmVudC0+b3BzLT5m aWxsX2RyaXZlcl9kYXRhKHB0LCBkYXRhLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9p ZF9mZW5jZV92YWx1ZV9zdHIoc3RydWN0IGZlbmNlICpmZW5jZSwKKwkJCQkgICAgY2hhciAqc3Ry LCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3luY19wdCAqcHQgPSBjb250YWluZXJfb2YoZmVuY2Us IHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKKwlzdHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50ID0g c3luY19wdF9wYXJlbnQocHQpOworCisJaWYgKCFwYXJlbnQtPm9wcy0+cHRfdmFsdWVfc3RyKSB7 CisJCWlmIChzaXplKQorCQkJKnN0ciA9IDA7CisJCXJldHVybjsKKwl9CisJcGFyZW50LT5vcHMt PnB0X3ZhbHVlX3N0cihwdCwgc3RyLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9pZF9m ZW5jZV90aW1lbGluZV92YWx1ZV9zdHIoc3RydWN0IGZlbmNlICpmZW5jZSwKKwkJCQkJICAgICBj aGFyICpzdHIsIGludCBzaXplKQoreworCXN0cnVjdCBzeW5jX3B0ICpwdCA9IGNvbnRhaW5lcl9v ZihmZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJhc2UpOworCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpw YXJlbnQgPSBzeW5jX3B0X3BhcmVudChwdCk7CisKKwlpZiAoIXBhcmVudC0+b3BzLT50aW1lbGlu ZV92YWx1ZV9zdHIpIHsKKwkJaWYgKHNpemUpCisJCQkqc3RyID0gMDsKKwkJcmV0dXJuOworCX0K KwlwYXJlbnQtPm9wcy0+dGltZWxpbmVfdmFsdWVfc3RyKHBhcmVudCwgc3RyLCBzaXplKTsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBmZW5jZV9vcHMgYW5kcm9pZF9mZW5jZV9vcHMgPSB7CisJ LmdldF9kcml2ZXJfbmFtZSA9IGFuZHJvaWRfZmVuY2VfZ2V0X2RyaXZlcl9uYW1lLAorCS5nZXRf dGltZWxpbmVfbmFtZSA9IGFuZHJvaWRfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUsCisJLmVuYWJs ZV9zaWduYWxpbmcgPSBhbmRyb2lkX2ZlbmNlX2VuYWJsZV9zaWduYWxpbmcsCisJLnNpZ25hbGVk ID0gYW5kcm9pZF9mZW5jZV9zaWduYWxlZCwKKwkud2FpdCA9IGZlbmNlX2RlZmF1bHRfd2FpdCwK KwkucmVsZWFzZSA9IGFuZHJvaWRfZmVuY2VfcmVsZWFzZSwKKwkuZmlsbF9kcml2ZXJfZGF0YSA9 IGFuZHJvaWRfZmVuY2VfZmlsbF9kcml2ZXJfZGF0YSwKKwkuZmVuY2VfdmFsdWVfc3RyID0gYW5k cm9pZF9mZW5jZV92YWx1ZV9zdHIsCisJLnRpbWVsaW5lX3ZhbHVlX3N0ciA9IGFuZHJvaWRfZmVu Y2VfdGltZWxpbmVfdmFsdWVfc3RyLAorfTsKKworc3RhdGljIHZvaWQgc3luY19mZW5jZV9mcmVl KHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSA9IGNvbnRh aW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc3luY19mZW5jZSwga3JlZik7CisJaW50IGksIHN0YXR1cyA9 IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBmZW5jZS0+ bnVtX2ZlbmNlczsgKytpKSB7CisJCWlmIChzdGF0dXMpCisJCQlmZW5jZV9yZW1vdmVfY2FsbGJh Y2soZmVuY2UtPmNic1tpXS5zeW5jX3B0LAorCQkJCQkgICAgICAmZmVuY2UtPmNic1tpXS5jYik7 CisJCWZlbmNlX3B1dChmZW5jZS0+Y2JzW2ldLnN5bmNfcHQpOworCX0KKworCWtmcmVlKGZlbmNl KTsKK30KKworc3RhdGljIGludCBzeW5jX2ZlbmNlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9k ZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlID0gZmls ZS0+cHJpdmF0ZV9kYXRhOworCisJc3luY19mZW5jZV9kZWJ1Z19yZW1vdmUoZmVuY2UpOworCisJ a3JlZl9wdXQoJmZlbmNlLT5rcmVmLCBzeW5jX2ZlbmNlX2ZyZWUpOworCXJldHVybiAwOworfQor CitzdGF0aWMgdW5zaWduZWQgaW50IHN5bmNfZmVuY2VfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwg cG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UgPSBmaWxlLT5w cml2YXRlX2RhdGE7CisJaW50IHN0YXR1czsKKworCXBvbGxfd2FpdChmaWxlLCAmZmVuY2UtPndx LCB3YWl0KTsKKworCXN0YXR1cyA9IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsKKworCWlm ICghc3RhdHVzKQorCQlyZXR1cm4gUE9MTElOOworCWVsc2UgaWYgKHN0YXR1cyA8IDApCisJCXJl dHVybiBQT0xMRVJSOworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBzeW5jX2ZlbmNlX2lv Y3RsX3dhaXQoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sK KwlfX3MzMiB2YWx1ZTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsdWUsICh2b2lkIF9fdXNl ciAqKWFyZywgc2l6ZW9mKHZhbHVlKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIHN5 bmNfZmVuY2Vfd2FpdChmZW5jZSwgdmFsdWUpOworfQorCitzdGF0aWMgbG9uZyBzeW5jX2ZlbmNl X2lvY3RsX21lcmdlKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwgdW5zaWduZWQgbG9uZyBhcmcp Cit7CisJaW50IGZkID0gZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NMT0VYRUMpOworCWludCBlcnI7 CisJc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlMiwgKmZlbmNlMzsKKwlzdHJ1Y3Qgc3luY19tZXJn ZV9kYXRhIGRhdGE7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZmQ7CisKKwlpZiAoY29weV9m cm9tX3VzZXIoJmRhdGEsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGRhdGEpKSkgeworCQll cnIgPSAtRUZBVUxUOworCQlnb3RvIGVycl9wdXRfZmQ7CisJfQorCisJZmVuY2UyID0gc3luY19m ZW5jZV9mZGdldChkYXRhLmZkMik7CisJaWYgKGZlbmNlMiA9PSBOVUxMKSB7CisJCWVyciA9IC1F Tk9FTlQ7CisJCWdvdG8gZXJyX3B1dF9mZDsKKwl9CisKKwlkYXRhLm5hbWVbc2l6ZW9mKGRhdGEu bmFtZSkgLSAxXSA9ICdcMCc7CisJZmVuY2UzID0gc3luY19mZW5jZV9tZXJnZShkYXRhLm5hbWUs IGZlbmNlLCBmZW5jZTIpOworCWlmIChmZW5jZTMgPT0gTlVMTCkgeworCQllcnIgPSAtRU5PTUVN OworCQlnb3RvIGVycl9wdXRfZmVuY2UyOworCX0KKworCWRhdGEuZmVuY2UgPSBmZDsKKwlpZiAo Y29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmRhdGEsIHNpemVvZihkYXRhKSkpIHsK KwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBlcnJfcHV0X2ZlbmNlMzsKKwl9CisKKwlzeW5jX2Zl bmNlX2luc3RhbGwoZmVuY2UzLCBmZCk7CisJc3luY19mZW5jZV9wdXQoZmVuY2UyKTsKKwlyZXR1 cm4gMDsKKworZXJyX3B1dF9mZW5jZTM6CisJc3luY19mZW5jZV9wdXQoZmVuY2UzKTsKKworZXJy X3B1dF9mZW5jZTI6CisJc3luY19mZW5jZV9wdXQoZmVuY2UyKTsKKworZXJyX3B1dF9mZDoKKwlw dXRfdW51c2VkX2ZkKGZkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHN5bmNfZmls bF9wdF9pbmZvKHN0cnVjdCBmZW5jZSAqZmVuY2UsIHZvaWQgKmRhdGEsIGludCBzaXplKQorewor CXN0cnVjdCBzeW5jX3B0X2luZm8gKmluZm8gPSBkYXRhOworCWludCByZXQ7CisKKwlpZiAoc2l6 ZSA8IHNpemVvZihzdHJ1Y3Qgc3luY19wdF9pbmZvKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlp bmZvLT5sZW4gPSBzaXplb2Yoc3RydWN0IHN5bmNfcHRfaW5mbyk7CisKKwlpZiAoZmVuY2UtPm9w cy0+ZmlsbF9kcml2ZXJfZGF0YSkgeworCQlyZXQgPSBmZW5jZS0+b3BzLT5maWxsX2RyaXZlcl9k YXRhKGZlbmNlLCBpbmZvLT5kcml2ZXJfZGF0YSwKKwkJCQkJCSAgIHNpemUgLSBzaXplb2YoKmlu Zm8pKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWluZm8tPmxlbiArPSBy ZXQ7CisJfQorCisJc3RybGNweShpbmZvLT5vYmpfbmFtZSwgZmVuY2UtPm9wcy0+Z2V0X3RpbWVs aW5lX25hbWUoZmVuY2UpLAorCQlzaXplb2YoaW5mby0+b2JqX25hbWUpKTsKKwlzdHJsY3B5KGlu Zm8tPmRyaXZlcl9uYW1lLCBmZW5jZS0+b3BzLT5nZXRfZHJpdmVyX25hbWUoZmVuY2UpLAorCQlz aXplb2YoaW5mby0+ZHJpdmVyX25hbWUpKTsKKwlpZiAoZmVuY2VfaXNfc2lnbmFsZWQoZmVuY2Up KQorCQlpbmZvLT5zdGF0dXMgPSBmZW5jZS0+c3RhdHVzID49IDAgPyAxIDogZmVuY2UtPnN0YXR1 czsKKwllbHNlCisJCWluZm8tPnN0YXR1cyA9IDA7CisJaW5mby0+dGltZXN0YW1wX25zID0ga3Rp bWVfdG9fbnMoZmVuY2UtPnRpbWVzdGFtcCk7CisKKwlyZXR1cm4gaW5mby0+bGVuOworfQorCitz dGF0aWMgbG9uZyBzeW5jX2ZlbmNlX2lvY3RsX2ZlbmNlX2luZm8oc3RydWN0IHN5bmNfZmVuY2Ug KmZlbmNlLAorCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc3luY19mZW5jZV9p bmZvX2RhdGEgKmRhdGE7CisJX191MzIgc2l6ZTsKKwlfX3UzMiBsZW4gPSAwOworCWludCByZXQs IGk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnNpemUsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6 ZW9mKHNpemUpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1 Y3Qgc3luY19mZW5jZV9pbmZvX2RhdGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzaXpl ID4gNDA5NikKKwkJc2l6ZSA9IDQwOTY7CisKKwlkYXRhID0ga3phbGxvYyhzaXplLCBHRlBfS0VS TkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN0cmxjcHko ZGF0YS0+bmFtZSwgZmVuY2UtPm5hbWUsIHNpemVvZihkYXRhLT5uYW1lKSk7CisJZGF0YS0+c3Rh dHVzID0gYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpOworCWlmIChkYXRhLT5zdGF0dXMgPj0g MCkKKwkJZGF0YS0+c3RhdHVzID0gIWRhdGEtPnN0YXR1czsKKworCWxlbiA9IHNpemVvZihzdHJ1 Y3Qgc3luY19mZW5jZV9pbmZvX2RhdGEpOworCisJZm9yIChpID0gMDsgaSA8IGZlbmNlLT5udW1f ZmVuY2VzOyArK2kpIHsKKwkJc3RydWN0IGZlbmNlICpwdCA9IGZlbmNlLT5jYnNbaV0uc3luY19w dDsKKworCQlyZXQgPSBzeW5jX2ZpbGxfcHRfaW5mbyhwdCwgKHU4ICopZGF0YSArIGxlbiwgc2l6 ZSAtIGxlbik7CisKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQlsZW4gKz0gcmV0 OworCX0KKworCWRhdGEtPmxlbiA9IGxlbjsKKworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191 c2VyICopYXJnLCBkYXRhLCBsZW4pKQorCQlyZXQgPSAtRUZBVUxUOworCWVsc2UKKwkJcmV0ID0g MDsKKworb3V0OgorCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGxv bmcgc3luY19mZW5jZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwK KwkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNl ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNZTkNfSU9D X1dBSVQ6CisJCXJldHVybiBzeW5jX2ZlbmNlX2lvY3RsX3dhaXQoZmVuY2UsIGFyZyk7CisKKwlj YXNlIFNZTkNfSU9DX01FUkdFOgorCQlyZXR1cm4gc3luY19mZW5jZV9pb2N0bF9tZXJnZShmZW5j ZSwgYXJnKTsKKworCWNhc2UgU1lOQ19JT0NfRkVOQ0VfSU5GTzoKKwkJcmV0dXJuIHN5bmNfZmVu Y2VfaW9jdGxfZmVuY2VfaW5mbyhmZW5jZSwgYXJnKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAt RU5PVFRZOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3lu Y19mZW5jZV9mb3BzID0geworCS5yZWxlYXNlID0gc3luY19mZW5jZV9yZWxlYXNlLAorCS5wb2xs ID0gc3luY19mZW5jZV9wb2xsLAorCS51bmxvY2tlZF9pb2N0bCA9IHN5bmNfZmVuY2VfaW9jdGws CisJLmNvbXBhdF9pb2N0bCA9IHN5bmNfZmVuY2VfaW9jdGwsCit9OworCmRpZmYgLS1naXQgYS9k cml2ZXJzL2FuZHJvaWQvc3luYy5oIGIvZHJpdmVycy9hbmRyb2lkL3N5bmMuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2NmZjAxCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9hbmRyb2lkL3N5bmMuaApAQCAtMCwwICsxLDM2NiBAQAorLyoKKyAqIGluY2x1ZGUvbGlu dXgvc3luYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NZTkNfSAorI2Rl ZmluZSBfTElOVVhfU1lOQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUg PGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4 L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dh aXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mZW5jZS5oPgorCisjaW5jbHVkZSA8dWFwaS9zeW5jL3N5 bmMuaD4KKworc3RydWN0IHN5bmNfdGltZWxpbmU7CitzdHJ1Y3Qgc3luY19wdDsKK3N0cnVjdCBz eW5jX2ZlbmNlOworCisvKioKKyAqIHN0cnVjdCBzeW5jX3RpbWVsaW5lX29wcyAtIHN5bmMgb2Jq ZWN0IGltcGxlbWVudGF0aW9uIG9wcworICogQGRyaXZlcl9uYW1lOgluYW1lIG9mIHRoZSBpbXBs ZW1lbnRhdGlvbgorICogQGR1cDoJCWR1cGxpY2F0ZSBhIHN5bmNfcHQKKyAqIEBoYXNfc2lnbmFs ZWQ6CXJldHVybnM6CisgKgkJCSAgMSBpZiBwdCBoYXMgc2lnbmFsZWQKKyAqCQkJICAwIGlmIHB0 IGhhcyBub3Qgc2lnbmFsZWQKKyAqCQkJIDwwIG9uIGVycm9yCisgKiBAY29tcGFyZToJCXJldHVy bnM6CisgKgkJCSAgMSBpZiBiIHdpbGwgc2lnbmFsIGJlZm9yZSBhCisgKgkJCSAgMCBpZiBhIGFu ZCBiIHdpbGwgc2lnbmFsIGF0IHRoZSBzYW1lIHRpbWUKKyAqCQkJIC0xIGlmIGEgd2lsbCBzaWdu YWwgYmVmb3JlIGIKKyAqIEBmcmVlX3B0OgkJY2FsbGVkIGJlZm9yZSBzeW5jX3B0IGlzIGZyZWVk CisgKiBAcmVsZWFzZV9vYmo6CWNhbGxlZCBiZWZvcmUgc3luY190aW1lbGluZSBpcyBmcmVlZAor ICogQGZpbGxfZHJpdmVyX2RhdGE6CXdyaXRlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRyaXZl ciBkYXRhIHRvIGRhdGEuCisgKgkJCSAgc2hvdWxkIHJldHVybiBhbiBlcnJvciBpZiB0aGVyZSBp cyBub3QgZW5vdWdoIHJvb20KKyAqCQkJICBhcyBzcGVjaWZpZWQgYnkgc2l6ZS4gIFRoaXMgaW5m b3JtYXRpb24gaXMgcmV0dXJuZWQKKyAqCQkJICB0byB1c2Vyc3BhY2UgYnkgU1lOQ19JT0NfRkVO Q0VfSU5GTy4KKyAqIEB0aW1lbGluZV92YWx1ZV9zdHI6IGZpbGwgc3RyIHdpdGggdGhlIHZhbHVl IG9mIHRoZSBzeW5jX3RpbWVsaW5lJ3MgY291bnRlcgorICogQHB0X3ZhbHVlX3N0cjoJZmlsbCBz dHIgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHN5bmNfcHQKKyAqLworc3RydWN0IHN5bmNfdGltZWxp bmVfb3BzIHsKKwljb25zdCBjaGFyICpkcml2ZXJfbmFtZTsKKworCS8qIHJlcXVpcmVkICovCisJ c3RydWN0IHN5bmNfcHQgKiAoKmR1cCkoc3RydWN0IHN5bmNfcHQgKnB0KTsKKworCS8qIHJlcXVp cmVkICovCisJaW50ICgqaGFzX3NpZ25hbGVkKShzdHJ1Y3Qgc3luY19wdCAqcHQpOworCisJLyog cmVxdWlyZWQgKi8KKwlpbnQgKCpjb21wYXJlKShzdHJ1Y3Qgc3luY19wdCAqYSwgc3RydWN0IHN5 bmNfcHQgKmIpOworCisJLyogb3B0aW9uYWwgKi8KKwl2b2lkICgqZnJlZV9wdCkoc3RydWN0IHN5 bmNfcHQgKnN5bmNfcHQpOworCisJLyogb3B0aW9uYWwgKi8KKwl2b2lkICgqcmVsZWFzZV9vYmop KHN0cnVjdCBzeW5jX3RpbWVsaW5lICpzeW5jX3RpbWVsaW5lKTsKKworCS8qIG9wdGlvbmFsICov CisJaW50ICgqZmlsbF9kcml2ZXJfZGF0YSkoc3RydWN0IHN5bmNfcHQgKnN5bmNwdCwgdm9pZCAq ZGF0YSwgaW50IHNpemUpOworCisJLyogb3B0aW9uYWwgKi8KKwl2b2lkICgqdGltZWxpbmVfdmFs dWVfc3RyKShzdHJ1Y3Qgc3luY190aW1lbGluZSAqdGltZWxpbmUsIGNoYXIgKnN0ciwKKwkJCQkg ICBpbnQgc2l6ZSk7CisKKwkvKiBvcHRpb25hbCAqLworCXZvaWQgKCpwdF92YWx1ZV9zdHIpKHN0 cnVjdCBzeW5jX3B0ICpwdCwgY2hhciAqc3RyLCBpbnQgc2l6ZSk7Cit9OworCisvKioKKyAqIHN0 cnVjdCBzeW5jX3RpbWVsaW5lIC0gc3luYyBvYmplY3QKKyAqIEBrcmVmOgkJcmVmZXJlbmNlIGNv dW50IG9uIGZlbmNlLgorICogQG9wczoJCW9wcyB0aGF0IGRlZmluZSB0aGUgaW1wbGVtZW50YXRp b24gb2YgdGhlIHN5bmNfdGltZWxpbmUKKyAqIEBuYW1lOgkJbmFtZSBvZiB0aGUgc3luY190aW1l bGluZS4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyAqIEBkZXN0cm95ZWQ6CQlzZXQgd2hlbiBzeW5j X3RpbWVsaW5lIGlzIGRlc3Ryb3llZAorICogQGNoaWxkX2xpc3RfaGVhZDoJbGlzdCBvZiBjaGls ZHJlbiBzeW5jX3B0cyBmb3IgdGhpcyBzeW5jX3RpbWVsaW5lCisgKiBAY2hpbGRfbGlzdF9sb2Nr Oglsb2NrIHByb3RlY3RpbmcgQGNoaWxkX2xpc3RfaGVhZCwgZGVzdHJveWVkLCBhbmQKKyAqCQkJ ICBzeW5jX3B0LnN0YXR1cworICogQGFjdGl2ZV9saXN0X2hlYWQ6CWxpc3Qgb2YgYWN0aXZlICh1 bnNpZ25hbGVkL2Vycm9yZWQpIHN5bmNfcHRzCisgKiBAc3luY190aW1lbGluZV9saXN0OgltZW1i ZXJzaGlwIGluIGdsb2JhbCBzeW5jX3RpbWVsaW5lX2xpc3QKKyAqLworc3RydWN0IHN5bmNfdGlt ZWxpbmUgeworCXN0cnVjdCBrcmVmCQlrcmVmOworCWNvbnN0IHN0cnVjdCBzeW5jX3RpbWVsaW5l X29wcwkqb3BzOworCWNoYXIJCQluYW1lWzMyXTsKKworCS8qIHByb3RlY3RlZCBieSBjaGlsZF9s aXN0X2xvY2sgKi8KKwlib29sCQkJZGVzdHJveWVkOworCWludAkJCWNvbnRleHQsIHZhbHVlOwor CisJc3RydWN0IGxpc3RfaGVhZAljaGlsZF9saXN0X2hlYWQ7CisJc3BpbmxvY2tfdAkJY2hpbGRf bGlzdF9sb2NrOworCisJc3RydWN0IGxpc3RfaGVhZAlhY3RpdmVfbGlzdF9oZWFkOworCisjaWZk ZWYgQ09ORklHX0RFQlVHX0ZTCisJc3RydWN0IGxpc3RfaGVhZAlzeW5jX3RpbWVsaW5lX2xpc3Q7 CisjZW5kaWYKK307CisKKy8qKgorICogc3RydWN0IHN5bmNfcHQgLSBzeW5jIHBvaW50CisgKiBA ZmVuY2U6CQliYXNlIGZlbmNlIGNsYXNzCisgKiBAY2hpbGRfbGlzdDoJCW1lbWJlcnNoaXAgaW4g c3luY190aW1lbGluZS5jaGlsZF9saXN0X2hlYWQKKyAqIEBhY3RpdmVfbGlzdDoJbWVtYmVyc2hp cCBpbiBzeW5jX3RpbWVsaW5lLmFjdGl2ZV9saXN0X2hlYWQKKyAqIEBzaWduYWxlZF9saXN0Oglt ZW1iZXJzaGlwIGluIHRlbXBvcmFyeSBzaWduYWxlZF9saXN0IG9uIHN0YWNrCisgKiBAZmVuY2U6 CQlzeW5jX2ZlbmNlIHRvIHdoaWNoIHRoZSBzeW5jX3B0IGJlbG9uZ3MKKyAqIEBwdF9saXN0OgkJ bWVtYmVyc2hpcCBpbiBzeW5jX2ZlbmNlLnB0X2xpc3RfaGVhZAorICogQHN0YXR1czoJCTE6IHNp Z25hbGVkLCAwOmFjdGl2ZSwgPDA6IGVycm9yCisgKiBAdGltZXN0YW1wOgkJdGltZSB3aGljaCBz eW5jX3B0IHN0YXR1cyB0cmFuc2l0aW9uZWQgZnJvbSBhY3RpdmUgdG8KKyAqCQkJICBzaWduYWxl ZCBvciBlcnJvci4KKyAqLworc3RydWN0IHN5bmNfcHQgeworCXN0cnVjdCBmZW5jZSBiYXNlOwor CisJc3RydWN0IGxpc3RfaGVhZAljaGlsZF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZl X2xpc3Q7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW5jX3RpbWVsaW5lICpzeW5jX3B0 X3BhcmVudChzdHJ1Y3Qgc3luY19wdCAqcHQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwdC0+ YmFzZS5sb2NrLCBzdHJ1Y3Qgc3luY190aW1lbGluZSwKKwkJCSAgICBjaGlsZF9saXN0X2xvY2sp OworfQorCitzdHJ1Y3Qgc3luY19mZW5jZV9jYiB7CisJc3RydWN0IGZlbmNlX2NiIGNiOworCXN0 cnVjdCBmZW5jZSAqc3luY19wdDsKKwlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2U7Cit9OworCisv KioKKyAqIHN0cnVjdCBzeW5jX2ZlbmNlIC0gc3luYyBmZW5jZQorICogQGZpbGU6CQlmaWxlIHJl cHJlc2VudGluZyB0aGlzIGZlbmNlCisgKiBAa3JlZjoJCXJlZmVyZW5jZSBjb3VudCBvbiBmZW5j ZS4KKyAqIEBuYW1lOgkJbmFtZSBvZiBzeW5jX2ZlbmNlLiAgVXNlZnVsIGZvciBkZWJ1Z2dpbmcK KyAqIEBwdF9saXN0X2hlYWQ6CWxpc3Qgb2Ygc3luY19wdHMgaW4gdGhlIGZlbmNlLiAgaW1tdXRh YmxlIG9uY2UgZmVuY2UKKyAqCQkJICBpcyBjcmVhdGVkCisgKiBAc3RhdHVzOgkJMDogc2lnbmFs ZWQsID4wOmFjdGl2ZSwgPDA6IGVycm9yCisgKgorICogQHdxOgkJCXdhaXQgcXVldWUgZm9yIGZl bmNlIHNpZ25hbGluZworICogQHN5bmNfZmVuY2VfbGlzdDoJbWVtYmVyc2hpcCBpbiBnbG9iYWwg ZmVuY2UgbGlzdAorICovCitzdHJ1Y3Qgc3luY19mZW5jZSB7CisJc3RydWN0IGZpbGUJCSpmaWxl OworCXN0cnVjdCBrcmVmCQlrcmVmOworCWNoYXIJCQluYW1lWzMyXTsKKyNpZmRlZiBDT05GSUdf REVCVUdfRlMKKwlzdHJ1Y3QgbGlzdF9oZWFkCXN5bmNfZmVuY2VfbGlzdDsKKyNlbmRpZgorCWlu dCBudW1fZmVuY2VzOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJd3E7CisJYXRvbWljX3QJCXN0YXR1 czsKKworCXN0cnVjdCBzeW5jX2ZlbmNlX2NiCWNic1tdOworfTsKKworc3RydWN0IHN5bmNfZmVu Y2Vfd2FpdGVyOwordHlwZWRlZiB2b2lkICgqc3luY19jYWxsYmFja190KShzdHJ1Y3Qgc3luY19m ZW5jZSAqZmVuY2UsCisJCQkJc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyICp3YWl0ZXIpOworCisv KioKKyAqIHN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciAtIG1ldGFkYXRhIGZvciBhc3luY2hyb25v dXMgd2FpdGVyIG9uIGEgZmVuY2UKKyAqIEB3YWl0ZXJfbGlzdDoJbWVtYmVyc2hpcCBpbiBzeW5j X2ZlbmNlLndhaXRlcl9saXN0X2hlYWQKKyAqIEBjYWxsYmFjazoJCWZ1bmN0aW9uIHBvaW50ZXIg dG8gY2FsbCB3aGVuIGZlbmNlIHNpZ25hbHMKKyAqIEBjYWxsYmFja19kYXRhOglwb2ludGVyIHRv IHBhc3MgdG8gQGNhbGxiYWNrCisgKi8KK3N0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciB7CisJd2Fp dF9xdWV1ZV90IHdvcms7CisJc3luY19jYWxsYmFja190IGNhbGxiYWNrOworfTsKKworc3RhdGlj IGlubGluZSB2b2lkIHN5bmNfZmVuY2Vfd2FpdGVyX2luaXQoc3RydWN0IHN5bmNfZmVuY2Vfd2Fp dGVyICp3YWl0ZXIsCisJCQkJCSAgc3luY19jYWxsYmFja190IGNhbGxiYWNrKQoreworCUlOSVRf TElTVF9IRUFEKCZ3YWl0ZXItPndvcmsudGFza19saXN0KTsKKwl3YWl0ZXItPmNhbGxiYWNrID0g Y2FsbGJhY2s7Cit9CisKKy8qCisgKiBBUEkgZm9yIHN5bmNfdGltZWxpbmUgaW1wbGVtZW50ZXJz CisgKi8KKworLyoqCisgKiBzeW5jX3RpbWVsaW5lX2NyZWF0ZSgpIC0gY3JlYXRlcyBhIHN5bmMg b2JqZWN0CisgKiBAb3BzOglzcGVjaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9wcyBmb3IgdGhl IG9iamVjdAorICogQHNpemU6CXNpemUgdG8gYWxsb2NhdGUgZm9yIHRoaXMgb2JqCisgKiBAbmFt ZToJc3luY190aW1lbGluZSBuYW1lCisgKgorICogQ3JlYXRlcyBhIG5ldyBzeW5jX3RpbWVsaW5l IHdoaWNoIHdpbGwgdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpZWQgYnkKKyAqIEBvcHMu ICBAc2l6ZSBieXRlcyB3aWxsIGJlIGFsbG9jYXRlZCBhbGxvd2luZyBmb3IgaW1wbGVtZW50YXRp b24gc3BlY2lmaWMKKyAqIGRhdGEgdG8gYmUga2VwdCBhZnRlciB0aGUgZ2VuZXJpYyBzeW5jX3Rp bWVsaW5lIHN0cnVjdC4KKyAqLworc3RydWN0IHN5bmNfdGltZWxpbmUgKnN5bmNfdGltZWxpbmVf Y3JlYXRlKGNvbnN0IHN0cnVjdCBzeW5jX3RpbWVsaW5lX29wcyAqb3BzLAorCQkJCQkgICBpbnQg c2l6ZSwgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgorICogc3luY190aW1lbGluZV9kZXN0cm95 KCkgLSBkZXN0cm95cyBhIHN5bmMgb2JqZWN0CisgKiBAb2JqOglzeW5jX3RpbWVsaW5lIHRvIGRl c3Ryb3kKKyAqCisgKiBBIHN5bmMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGNhbGwgdGhpcyB3aGVu IHRoZSBAb2JqIGlzIGdvaW5nIGF3YXkKKyAqIChpLmUuIG1vZHVsZSB1bmxvYWQuKSAgQG9iaiB3 b24ndCBhY3R1YWxseSBiZSBmcmVlZCB1bnRpbCBhbGwgaXRzIGNoaWxkcmVuCisgKiBzeW5jX3B0 cyBhcmUgZnJlZWQuCisgKi8KK3ZvaWQgc3luY190aW1lbGluZV9kZXN0cm95KHN0cnVjdCBzeW5j X3RpbWVsaW5lICpvYmopOworCisvKioKKyAqIHN5bmNfdGltZWxpbmVfc2lnbmFsKCkgLSBzaWdu YWwgYSBzdGF0dXMgY2hhbmdlIG9uIGEgc3luY190aW1lbGluZQorICogQG9iajoJc3luY190aW1l bGluZSB0byBzaWduYWwKKyAqCisgKiBBIHN5bmMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGNhbGwg dGhpcyBhbnkgdGltZSBvbmUgb2YgaXQncyBzeW5jX3B0cworICogaGFzIHNpZ25hbGVkIG9yIGhh cyBhbiBlcnJvciBjb25kaXRpb24uCisgKi8KK3ZvaWQgc3luY190aW1lbGluZV9zaWduYWwoc3Ry dWN0IHN5bmNfdGltZWxpbmUgKm9iaik7CisKKy8qKgorICogc3luY19wdF9jcmVhdGUoKSAtIGNy ZWF0ZXMgYSBzeW5jIHB0CisgKiBAcGFyZW50OglzeW5jX3B0J3MgcGFyZW50IHN5bmNfdGltZWxp bmUKKyAqIEBzaXplOglzaXplIHRvIGFsbG9jYXRlIGZvciB0aGlzIHB0CisgKgorICogQ3JlYXRl cyBhIG5ldyBzeW5jX3B0IGFzIGEgY2hpbGQgb2YgQHBhcmVudC4gIEBzaXplIGJ5dGVzIHdpbGwg YmUKKyAqIGFsbG9jYXRlZCBhbGxvd2luZyBmb3IgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZGF0 YSB0byBiZSBrZXB0IGFmdGVyCisgKiB0aGUgZ2VuZXJpYyBzeW5jX3RpbWVsaW5lIHN0cnVjdC4K KyAqLworc3RydWN0IHN5bmNfcHQgKnN5bmNfcHRfY3JlYXRlKHN0cnVjdCBzeW5jX3RpbWVsaW5l ICpwYXJlbnQsIGludCBzaXplKTsKKworLyoqCisgKiBzeW5jX3B0X2ZyZWUoKSAtIGZyZWVzIGEg c3luYyBwdAorICogQHB0OgkJc3luY19wdCB0byBmcmVlCisgKgorICogVGhpcyBzaG91bGQgb25s eSBiZSBjYWxsZWQgb24gc3luY19wdHMgd2hpY2ggaGF2ZSBiZWVuIGNyZWF0ZWQgYnV0CisgKiBu b3QgYWRkZWQgdG8gYSBmZW5jZS4KKyAqLwordm9pZCBzeW5jX3B0X2ZyZWUoc3RydWN0IHN5bmNf cHQgKnB0KTsKKworLyoqCisgKiBzeW5jX2ZlbmNlX2NyZWF0ZSgpIC0gY3JlYXRlcyBhIHN5bmMg ZmVuY2UKKyAqIEBuYW1lOgluYW1lIG9mIGZlbmNlIHRvIGNyZWF0ZQorICogQHB0OgkJc3luY19w dCB0byBhZGQgdG8gdGhlIGZlbmNlCisgKgorICogQ3JlYXRlcyBhIGZlbmNlIGNvbnRhaW5nIEBw dC4gIE9uY2UgdGhpcyBpcyBjYWxsZWQsIHRoZSBmZW5jZSB0YWtlcworICogb3duZXJzaGlwIG9m IEBwdC4KKyAqLworc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfY3JlYXRlKGNvbnN0IGNo YXIgKm5hbWUsIHN0cnVjdCBzeW5jX3B0ICpwdCk7CisKKy8qKgorICogc3luY19mZW5jZV9jcmVh dGVfZG1hKCkgLSBjcmVhdGVzIGEgc3luYyBmZW5jZSBmcm9tIGRtYS1mZW5jZQorICogQG5hbWU6 CW5hbWUgb2YgZmVuY2UgdG8gY3JlYXRlCisgKiBAcHQ6CWRtYS1mZW5jZSB0byBhZGQgdG8gdGhl IGZlbmNlCisgKgorICogQ3JlYXRlcyBhIGZlbmNlIGNvbnRhaW5nIEBwdC4gIE9uY2UgdGhpcyBp cyBjYWxsZWQsIHRoZSBmZW5jZSB0YWtlcworICogb3duZXJzaGlwIG9mIEBwdC4KKyAqLworc3Ry dWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfY3JlYXRlX2RtYShjb25zdCBjaGFyICpuYW1lLCBz dHJ1Y3QgZmVuY2UgKnB0KTsKKworLyoKKyAqIEFQSSBmb3Igc3luY19mZW5jZSBjb25zdW1lcnMK KyAqLworCisvKioKKyAqIHN5bmNfZmVuY2VfbWVyZ2UoKSAtIG1lcmdlIHR3byBmZW5jZXMKKyAq IEBuYW1lOgluYW1lIG9mIG5ldyBmZW5jZQorICogQGE6CQlmZW5jZSBhCisgKiBAYjoJCWZlbmNl IGIKKyAqCisgKiBDcmVhdGVzIGEgbmV3IGZlbmNlIHdoaWNoIGNvbnRhaW5zIGNvcGllcyBvZiBh bGwgdGhlIHN5bmNfcHRzIGluIGJvdGgKKyAqIEBhIGFuZCBAYi4gIEBhIGFuZCBAYiByZW1haW4g dmFsaWQsIGluZGVwZW5kZW50IGZlbmNlcy4KKyAqLworc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNf ZmVuY2VfbWVyZ2UoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgc3RydWN0IHN5bmNfZmVuY2Ug KmEsIHN0cnVjdCBzeW5jX2ZlbmNlICpiKTsKKworLyoqCisgKiBzeW5jX2ZlbmNlX2ZkZ2V0KCkg LSBnZXQgYSBmZW5jZSBmcm9tIGFuIGZkCisgKiBAZmQ6CQlmZCByZWZlcmVuY2luZyBhIGZlbmNl CisgKgorICogRW5zdXJlcyBAZmQgcmVmZXJlbmNlcyBhIHZhbGlkIGZlbmNlLCBpbmNyZW1lbnRz IHRoZSByZWZjb3VudCBvZiB0aGUgYmFja2luZworICogZmlsZSwgYW5kIHJldHVybnMgdGhlIGZl bmNlLgorICovCitzdHJ1Y3Qgc3luY19mZW5jZSAqc3luY19mZW5jZV9mZGdldChpbnQgZmQpOwor CisvKioKKyAqIHN5bmNfZmVuY2VfcHV0KCkgLSBwdXRzIGEgcmVmZXJlbmNlIG9mIGEgc3luYyBm ZW5jZQorICogQGZlbmNlOglmZW5jZSB0byBwdXQKKyAqCisgKiBQdXRzIGEgcmVmZXJlbmNlIG9u IEBmZW5jZS4gIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgZmVuY2UgYW5kCisg KiBhbGwgaXQncyBzeW5jX3B0cyB3aWxsIGJlIGZyZWVkCisgKi8KK3ZvaWQgc3luY19mZW5jZV9w dXQoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlKTsKKworLyoqCisgKiBzeW5jX2ZlbmNlX2luc3Rh bGwoKSAtIGluc3RhbGxzIGEgZmVuY2UgaW50byBhIGZpbGUgZGVzY3JpcHRvcgorICogQGZlbmNl OglmZW5jZSB0byBpbnN0YWxsCisgKiBAZmQ6CQlmaWxlIGRlc2NyaXB0b3IgaW4gd2hpY2ggdG8g aW5zdGFsbCB0aGUgZmVuY2UKKyAqCisgKiBJbnN0YWxscyBAZmVuY2UgaW50byBAZmQuICBAZmQn cyBzaG91bGQgYmUgYWNxdWlyZWQgdGhyb3VnaAorICogZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NM T0VYRUMpLgorICovCit2b2lkIHN5bmNfZmVuY2VfaW5zdGFsbChzdHJ1Y3Qgc3luY19mZW5jZSAq ZmVuY2UsIGludCBmZCk7CisKKy8qKgorICogc3luY19mZW5jZV93YWl0X2FzeW5jKCkgLSByZWdp c3RlcnMgYW5kIGFzeW5jIHdhaXQgb24gdGhlIGZlbmNlCisgKiBAZmVuY2U6CQlmZW5jZSB0byB3 YWl0IG9uCisgKiBAd2FpdGVyOgkJd2FpdGVyIGNhbGxiYWNrIHN0cnVjaworICoKKyAqIFJldHVy bnMgMSBpZiBAZmVuY2UgaGFzIGFscmVhZHkgc2lnbmFsZWQuCisgKgorICogUmVnaXN0ZXJzIGEg Y2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gQGZlbmNlIHNpZ25hbHMgb3IgaGFzIGFuIGVycm9y LgorICogQHdhaXRlciBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aCBzeW5jX2ZlbmNlX3dhaXRl cl9pbml0KCkuCisgKi8KK2ludCBzeW5jX2ZlbmNlX3dhaXRfYXN5bmMoc3RydWN0IHN5bmNfZmVu Y2UgKmZlbmNlLAorCQkJICBzdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgKndhaXRlcik7CisKKy8q KgorICogc3luY19mZW5jZV9jYW5jZWxfYXN5bmMoKSAtIGNhbmNlbHMgYW4gYXN5bmMgd2FpdAor ICogQGZlbmNlOgkJZmVuY2UgdG8gd2FpdCBvbgorICogQHdhaXRlcjoJCXdhaXRlciBjYWxsYmFj ayBzdHJ1Y2sKKyAqCisgKiByZXR1cm5zIDAgaWYgd2FpdGVyIHdhcyByZW1vdmVkIGZyb20gZmVu Y2UncyBhc3luYyB3YWl0ZXIgbGlzdC4KKyAqIHJldHVybnMgLUVOT0VOVCBpZiB3YWl0ZXIgd2Fz IG5vdCBmb3VuZCBvbiBmZW5jZSdzIGFzeW5jIHdhaXRlciBsaXN0LgorICoKKyAqIENhbmNlbHMg YSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgYXN5bmMgd2FpdC4gIFdpbGwgZmFpbCBncmFjZWZ1bGx5 IGlmCisgKiBAd2FpdGVyIHdhcyBuZXZlciByZWdpc3RlcmVkIG9yIGlmIEBmZW5jZSBoYXMgYWxy ZWFkeSBzaWduYWxlZCBAd2FpdGVyLgorICovCitpbnQgc3luY19mZW5jZV9jYW5jZWxfYXN5bmMo c3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlLAorCQkJICAgIHN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRl ciAqd2FpdGVyKTsKKworLyoqCisgKiBzeW5jX2ZlbmNlX3dhaXQoKSAtIHdhaXQgb24gZmVuY2UK KyAqIEBmZW5jZToJZmVuY2UgdG8gd2FpdCBvbgorICogQHRpZW1vdXQ6CXRpbWVvdXQgaW4gbXMK KyAqCisgKiBXYWl0IGZvciBAZmVuY2UgdG8gYmUgc2lnbmFsZWQgb3IgaGF2ZSBhbiBlcnJvci4g IFdhaXRzIGluZGVmaW5pdGVseQorICogaWYgQHRpbWVvdXQgPCAwCisgKi8KK2ludCBzeW5jX2Zl bmNlX3dhaXQoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlLCBsb25nIHRpbWVvdXQpOworCisjaWZk ZWYgQ09ORklHX0RFQlVHX0ZTCisKK3ZvaWQgc3luY190aW1lbGluZV9kZWJ1Z19hZGQoc3RydWN0 IHN5bmNfdGltZWxpbmUgKm9iaik7Cit2b2lkIHN5bmNfdGltZWxpbmVfZGVidWdfcmVtb3ZlKHN0 cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopOwordm9pZCBzeW5jX2ZlbmNlX2RlYnVnX2FkZChzdHJ1 Y3Qgc3luY19mZW5jZSAqZmVuY2UpOwordm9pZCBzeW5jX2ZlbmNlX2RlYnVnX3JlbW92ZShzdHJ1 Y3Qgc3luY19mZW5jZSAqZmVuY2UpOwordm9pZCBzeW5jX2R1bXAodm9pZCk7CisKKyNlbHNlCisj IGRlZmluZSBzeW5jX3RpbWVsaW5lX2RlYnVnX2FkZChvYmopCisjIGRlZmluZSBzeW5jX3RpbWVs aW5lX2RlYnVnX3JlbW92ZShvYmopCisjIGRlZmluZSBzeW5jX2ZlbmNlX2RlYnVnX2FkZChmZW5j ZSkKKyMgZGVmaW5lIHN5bmNfZmVuY2VfZGVidWdfcmVtb3ZlKGZlbmNlKQorIyBkZWZpbmUgc3lu Y19kdW1wKCkKKyNlbmRpZgoraW50IHN5bmNfZmVuY2Vfd2FrZV91cF93cSh3YWl0X3F1ZXVlX3Qg KmN1cnIsIHVuc2lnbmVkIG1vZGUsCisJCQkJIGludCB3YWtlX2ZsYWdzLCB2b2lkICprZXkpOwor CisjZW5kaWYgLyogX0xJTlVYX1NZTkNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lk L3N5bmNfZGVidWcuYyBiL2RyaXZlcnMvYW5kcm9pZC9zeW5jX2RlYnVnLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ1ZDEzYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvYW5kcm9pZC9zeW5jX2RlYnVnLmMKQEAgLTAsMCArMSwyNTYgQEAKKy8qCisgKiBkcml2ZXJz L2Jhc2Uvc3luYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgorICoK KyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmli dXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8 bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4 L2ZzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5o PgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4K KyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2lu Y2x1ZGUgPGxpbnV4L2Fub25faW5vZGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZTY0Lmg+Cisj aW5jbHVkZSAic3luYy5oIgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKK3N0YXRpYyBMSVNU X0hFQUQoc3luY190aW1lbGluZV9saXN0X2hlYWQpOworc3RhdGljIERFRklORV9TUElOTE9DSyhz eW5jX3RpbWVsaW5lX2xpc3RfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHN5bmNfZmVuY2VfbGlz dF9oZWFkKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3luY19mZW5jZV9saXN0X2xvY2spOwor Cit2b2lkIHN5bmNfdGltZWxpbmVfZGVidWdfYWRkKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmop Cit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzeW5jX3Rp bWVsaW5lX2xpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJm9iai0+c3luY190aW1l bGluZV9saXN0LCAmc3luY190aW1lbGluZV9saXN0X2hlYWQpOworCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnN5bmNfdGltZWxpbmVfbGlzdF9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgc3luY190 aW1lbGluZV9kZWJ1Z19yZW1vdmUoc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iaikKK3sKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN5bmNfdGltZWxpbmVfbGlz dF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJm9iai0+c3luY190aW1lbGluZV9saXN0KTsKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX3RpbWVsaW5lX2xpc3RfbG9jaywgZmxhZ3MpOwor fQorCit2b2lkIHN5bmNfZmVuY2VfZGVidWdfYWRkKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSkK K3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN5bmNfZmVu Y2VfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmZmVuY2UtPnN5bmNfZmVuY2Vf bGlzdCwgJnN5bmNfZmVuY2VfbGlzdF9oZWFkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZz eW5jX2ZlbmNlX2xpc3RfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHN5bmNfZmVuY2VfZGVidWdf cmVtb3ZlKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdz OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN5bmNfZmVuY2VfbGlzdF9sb2NrLCBmbGFncyk7CisJ bGlzdF9kZWwoJmZlbmNlLT5zeW5jX2ZlbmNlX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnN5bmNfZmVuY2VfbGlzdF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFy ICpzeW5jX3N0YXR1c19zdHIoaW50IHN0YXR1cykKK3sKKwlpZiAoc3RhdHVzID09IDApCisJCXJl dHVybiAic2lnbmFsZWQiOworCisJaWYgKHN0YXR1cyA+IDApCisJCXJldHVybiAiYWN0aXZlIjsK KworCXJldHVybiAiZXJyb3IiOworfQorCitzdGF0aWMgdm9pZCBzeW5jX3ByaW50X3B0KHN0cnVj dCBzZXFfZmlsZSAqcywgc3RydWN0IGZlbmNlICpwdCwgYm9vbCBmZW5jZSkKK3sKKwlpbnQgc3Rh dHVzID0gMTsKKworCWlmIChmZW5jZV9pc19zaWduYWxlZF9sb2NrZWQocHQpKQorCQlzdGF0dXMg PSBwdC0+c3RhdHVzOworCisJc2VxX3ByaW50ZihzLCAiICAlcyVzcHQgJXMiLAorCQkgICBmZW5j ZSAmJiBwdC0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZSA/CisJCSAgIHB0LT5vcHMtPmdldF90aW1l bGluZV9uYW1lKHB0KSA6ICIiLAorCQkgICBmZW5jZSA/ICJfIiA6ICIiLAorCQkgICBzeW5jX3N0 YXR1c19zdHIoc3RhdHVzKSk7CisKKwlpZiAoc3RhdHVzIDw9IDApIHsKKwkJc3RydWN0IHRpbWVz cGVjNjQgdHM2NCA9CisJCQlrdGltZV90b190aW1lc3BlYzY0KHB0LT50aW1lc3RhbXApOworCisJ CXNlcV9wcmludGYocywgIkAlbGxkLiUwOWxkIiwgKHM2NCl0czY0LnR2X3NlYywgdHM2NC50dl9u c2VjKTsKKwl9CisKKwlpZiAoKCFmZW5jZSB8fCBwdC0+b3BzLT50aW1lbGluZV92YWx1ZV9zdHIp ICYmCisJICAgIHB0LT5vcHMtPmZlbmNlX3ZhbHVlX3N0cikgeworCQljaGFyIHZhbHVlWzY0XTsK KwkJYm9vbCBzdWNjZXNzOworCisJCXB0LT5vcHMtPmZlbmNlX3ZhbHVlX3N0cihwdCwgdmFsdWUs IHNpemVvZih2YWx1ZSkpOworCQlzdWNjZXNzID0gc3RybGVuKHZhbHVlKTsKKworCQlpZiAoc3Vj Y2VzcykKKwkJCXNlcV9wcmludGYocywgIjogJXMiLCB2YWx1ZSk7CisKKwkJaWYgKHN1Y2Nlc3Mg JiYgZmVuY2UpIHsKKwkJCXB0LT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cihwdCwgdmFsdWUsIHNp emVvZih2YWx1ZSkpOworCisJCQlpZiAoc3RybGVuKHZhbHVlKSkKKwkJCQlzZXFfcHJpbnRmKHMs ICIgLyAlcyIsIHZhbHVlKTsKKwkJfQorCX0KKworCXNlcV9wdXRzKHMsICJcbiIpOworfQorCitz dGF0aWMgdm9pZCBzeW5jX3ByaW50X29iaihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBzeW5j X3RpbWVsaW5lICpvYmopCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCXVuc2lnbmVkIGxv bmcgZmxhZ3M7CisKKwlzZXFfcHJpbnRmKHMsICIlcyAlcyIsIG9iai0+bmFtZSwgb2JqLT5vcHMt PmRyaXZlcl9uYW1lKTsKKworCWlmIChvYmotPm9wcy0+dGltZWxpbmVfdmFsdWVfc3RyKSB7CisJ CWNoYXIgdmFsdWVbNjRdOworCisJCW9iai0+b3BzLT50aW1lbGluZV92YWx1ZV9zdHIob2JqLCB2 YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisJCXNlcV9wcmludGYocywgIjogJXMiLCB2YWx1ZSk7CisJ fQorCisJc2VxX3B1dHMocywgIlxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2JqLT5jaGls ZF9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJm9iai0+Y2hpbGRfbGlz dF9oZWFkKSB7CisJCXN0cnVjdCBzeW5jX3B0ICpwdCA9CisJCQljb250YWluZXJfb2YocG9zLCBz dHJ1Y3Qgc3luY19wdCwgY2hpbGRfbGlzdCk7CisJCXN5bmNfcHJpbnRfcHQocywgJnB0LT5iYXNl LCBmYWxzZSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9iai0+Y2hpbGRfbGlzdF9s b2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHN5bmNfcHJpbnRfZmVuY2Uoc3RydWN0IHNl cV9maWxlICpzLCBzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UpCit7CisJd2FpdF9xdWV1ZV90ICpw b3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCXNlcV9wcmludGYocywgIlsl cF0gJXM6ICVzXG4iLCBmZW5jZSwgZmVuY2UtPm5hbWUsCisJCSAgIHN5bmNfc3RhdHVzX3N0cihh dG9taWNfcmVhZCgmZmVuY2UtPnN0YXR1cykpKTsKKworCWZvciAoaSA9IDA7IGkgPCBmZW5jZS0+ bnVtX2ZlbmNlczsgKytpKSB7CisJCXN5bmNfcHJpbnRfcHQocywgZmVuY2UtPmNic1tpXS5zeW5j X3B0LCB0cnVlKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmVuY2UtPndxLmxvY2ssIGZs YWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmZlbmNlLT53cS50YXNrX2xpc3QsIHRh c2tfbGlzdCkgeworCQlzdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgKndhaXRlcjsKKworCQlpZiAo cG9zLT5mdW5jICE9ICZzeW5jX2ZlbmNlX3dha2VfdXBfd3EpCisJCQljb250aW51ZTsKKworCQl3 YWl0ZXIgPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIsIHdvcmsp OworCisJCXNlcV9wcmludGYocywgIndhaXRlciAlcEZcbiIsIHdhaXRlci0+Y2FsbGJhY2spOwor CX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZW5jZS0+d3EubG9jaywgZmxhZ3MpOworfQor CitzdGF0aWMgaW50IHN5bmNfZGVidWdmc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAq dW51c2VkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9z OworCisJc2VxX3B1dHMocywgIm9ianM6XG4tLS0tLS0tLS0tLS0tLVxuIik7CisKKwlzcGluX2xv Y2tfaXJxc2F2ZSgmc3luY190aW1lbGluZV9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9l YWNoKHBvcywgJnN5bmNfdGltZWxpbmVfbGlzdF9oZWFkKSB7CisJCXN0cnVjdCBzeW5jX3RpbWVs aW5lICpvYmogPQorCQkJY29udGFpbmVyX29mKHBvcywgc3RydWN0IHN5bmNfdGltZWxpbmUsCisJ CQkJICAgICBzeW5jX3RpbWVsaW5lX2xpc3QpOworCisJCXN5bmNfcHJpbnRfb2JqKHMsIG9iaik7 CisJCXNlcV9wdXRzKHMsICJcbiIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5j X3RpbWVsaW5lX2xpc3RfbG9jaywgZmxhZ3MpOworCisJc2VxX3B1dHMocywgImZlbmNlczpcbi0t LS0tLS0tLS0tLS0tXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzeW5jX2ZlbmNlX2xpc3Rf bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2gocG9zLCAmc3luY19mZW5jZV9saXN0X2hlYWQp IHsKKwkJc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlID0KKwkJCWNvbnRhaW5lcl9vZihwb3MsIHN0 cnVjdCBzeW5jX2ZlbmNlLCBzeW5jX2ZlbmNlX2xpc3QpOworCisJCXN5bmNfcHJpbnRfZmVuY2Uo cywgZmVuY2UpOworCQlzZXFfcHV0cyhzLCAiXG4iKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmc3luY19mZW5jZV9saXN0X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBzeW5jX2RlYnVnZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmls ZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc3luY19kZWJ1Z2ZzX3Nob3cs IGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0 aW9ucyBzeW5jX2RlYnVnZnNfZm9wcyA9IHsKKwkub3BlbiAgICAgICAgICAgPSBzeW5jX2RlYnVn ZnNfb3BlbiwKKwkucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICAgICAgICAg PSBzZXFfbHNlZWssCisJLnJlbGVhc2UgICAgICAgID0gc2luZ2xlX3JlbGVhc2UsCit9OworCitz dGF0aWMgX19pbml0IGludCBzeW5jX2RlYnVnZnNfaW5pdCh2b2lkKQoreworCWRlYnVnZnNfY3Jl YXRlX2ZpbGUoInN5bmMiLCBTX0lSVUdPLCBOVUxMLCBOVUxMLCAmc3luY19kZWJ1Z2ZzX2ZvcHMp OworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChzeW5jX2RlYnVnZnNfaW5pdCk7CisKKyNk ZWZpbmUgRFVNUF9DSFVOSyAyNTYKK3N0YXRpYyBjaGFyIHN5bmNfZHVtcF9idWZbNjQgKiAxMDI0 XTsKK3ZvaWQgc3luY19kdW1wKHZvaWQpCit7CisJc3RydWN0IHNlcV9maWxlIHMgPSB7CisJCS5i dWYgPSBzeW5jX2R1bXBfYnVmLAorCQkuc2l6ZSA9IHNpemVvZihzeW5jX2R1bXBfYnVmKSAtIDEs CisJfTsKKwlpbnQgaTsKKworCXN5bmNfZGVidWdmc19zaG93KCZzLCBOVUxMKTsKKworCWZvciAo aSA9IDA7IGkgPCBzLmNvdW50OyBpICs9IERVTVBfQ0hVTkspIHsKKwkJaWYgKChzLmNvdW50IC0g aSkgPiBEVU1QX0NIVU5LKSB7CisJCQljaGFyIGMgPSBzLmJ1ZltpICsgRFVNUF9DSFVOS107CisK KwkJCXMuYnVmW2kgKyBEVU1QX0NIVU5LXSA9IDA7CisJCQlwcl9jb250KCIlcyIsIHMuYnVmICsg aSk7CisJCQlzLmJ1ZltpICsgRFVNUF9DSFVOS10gPSBjOworCQl9IGVsc2UgeworCQkJcy5idWZb cy5jb3VudF0gPSAwOworCQkJcHJfY29udCgiJXMiLCBzLmJ1ZiArIGkpOworCQl9CisJfQorfQor CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC90cmFjZS9zeW5jLmggYi9kcml2 ZXJzL2FuZHJvaWQvdHJhY2Uvc3luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjdkY2YyZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FuZHJvaWQvdHJhY2Uvc3lu Yy5oCkBAIC0wLDAgKzEsODIgQEAKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0Vf SU5DTFVERV9QQVRIIC4uLy4uL2RyaXZlcnMvYW5kcm9pZC90cmFjZQorI2RlZmluZSBUUkFDRV9T WVNURU0gc3luYworCisjaWYgIWRlZmluZWQoX1RSQUNFX1NZTkNfSCkgfHwgZGVmaW5lZChUUkFD RV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX1RSQUNFX1NZTkNfSAorCisjaW5jbHVkZSAi Li4vc3luYy5oIgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworVFJBQ0VfRVZFTlQo c3luY190aW1lbGluZSwKKwlUUF9QUk9UTyhzdHJ1Y3Qgc3luY190aW1lbGluZSAqdGltZWxpbmUp LAorCisJVFBfQVJHUyh0aW1lbGluZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQkJX19zdHJp bmcobmFtZSwgdGltZWxpbmUtPm5hbWUpCisJCQlfX2FycmF5KGNoYXIsIHZhbHVlLCAzMikKKwkp LAorCisJVFBfZmFzdF9hc3NpZ24oCisJCQlfX2Fzc2lnbl9zdHIobmFtZSwgdGltZWxpbmUtPm5h bWUpOworCQkJaWYgKHRpbWVsaW5lLT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cikgeworCQkJCXRp bWVsaW5lLT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cih0aW1lbGluZSwKKwkJCQkJCQlfX2VudHJ5 LT52YWx1ZSwKKwkJCQkJCQlzaXplb2YoX19lbnRyeS0+dmFsdWUpKTsKKwkJCX0gZWxzZSB7CisJ CQkJX19lbnRyeS0+dmFsdWVbMF0gPSAnXDAnOworCQkJfQorCSksCisKKwlUUF9wcmludGsoIm5h bWU9JXMgdmFsdWU9JXMiLCBfX2dldF9zdHIobmFtZSksIF9fZW50cnktPnZhbHVlKQorKTsKKwor VFJBQ0VfRVZFTlQoc3luY193YWl0LAorCVRQX1BST1RPKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5j ZSwgaW50IGJlZ2luKSwKKworCVRQX0FSR1MoZmVuY2UsIGJlZ2luKSwKKworCVRQX1NUUlVDVF9f ZW50cnkoCisJCQlfX3N0cmluZyhuYW1lLCBmZW5jZS0+bmFtZSkKKwkJCV9fZmllbGQoczMyLCBz dGF0dXMpCisJCQlfX2ZpZWxkKHUzMiwgYmVnaW4pCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAor CQkJX19hc3NpZ25fc3RyKG5hbWUsIGZlbmNlLT5uYW1lKTsKKwkJCV9fZW50cnktPnN0YXR1cyA9 IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsKKwkJCV9fZW50cnktPmJlZ2luID0gYmVnaW47 CisJKSwKKworCVRQX3ByaW50aygiJXMgbmFtZT0lcyBzdGF0ZT0lZCIsIF9fZW50cnktPmJlZ2lu ID8gImJlZ2luIiA6ICJlbmQiLAorCQkJX19nZXRfc3RyKG5hbWUpLCBfX2VudHJ5LT5zdGF0dXMp CispOworCitUUkFDRV9FVkVOVChzeW5jX3B0LAorCVRQX1BST1RPKHN0cnVjdCBmZW5jZSAqcHQp LAorCisJVFBfQVJHUyhwdCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX3N0cmluZyh0aW1l bGluZSwgcHQtPm9wcy0+Z2V0X3RpbWVsaW5lX25hbWUocHQpKQorCQlfX2FycmF5KGNoYXIsIHZh bHVlLCAzMikKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fYXNzaWduX3N0cih0aW1lbGlu ZSwgcHQtPm9wcy0+Z2V0X3RpbWVsaW5lX25hbWUocHQpKTsKKwkJaWYgKHB0LT5vcHMtPmZlbmNl X3ZhbHVlX3N0cikgeworCQkJcHQtPm9wcy0+ZmVuY2VfdmFsdWVfc3RyKHB0LCBfX2VudHJ5LT52 YWx1ZSwKKwkJCQkJCQlzaXplb2YoX19lbnRyeS0+dmFsdWUpKTsKKwkJfSBlbHNlIHsKKwkJCV9f ZW50cnktPnZhbHVlWzBdID0gJ1wwJzsKKwkJfQorCSksCisKKwlUUF9wcmludGsoIm5hbWU9JXMg dmFsdWU9JXMiLCBfX2dldF9zdHIodGltZWxpbmUpLCBfX2VudHJ5LT52YWx1ZSkKKyk7CisKKyNl bmRpZiAvKiBpZiAhZGVmaW5lZChfVFJBQ0VfU1lOQ19IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURF Ul9NVUxUSV9SRUFEKSAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rp b24gKi8KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZl cnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29u ZmlnCmluZGV4IDQyYjE1MTIuLjRiMThmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9h bmRyb2lkL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZwpAQCAt MzgsMzQgKzM4LDYgQEAgY29uZmlnIEFORFJPSURfTE9XX01FTU9SWV9LSUxMRVIKIAkgIHNjcmlw dHMgKC9pbml0LnJjKSwgYW5kIGl0IGRlZmluZXMgcHJpb3JpdHkgdmFsdWVzIHdpdGggbWluaW11 bSBmcmVlIG1lbW9yeSBzaXplCiAJICBmb3IgZWFjaCBwcmlvcml0eS4KIAotY29uZmlnIFNZTkMK LQlib29sICJTeW5jaHJvbml6YXRpb24gZnJhbWV3b3JrIgotCWRlZmF1bHQgbgotCXNlbGVjdCBB Tk9OX0lOT0RFUwotCXNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUgotCS0tLWhlbHAtLS0KLQkgIFRo aXMgb3B0aW9uIGVuYWJsZXMgdGhlIGZyYW1ld29yayBmb3Igc3luY2hyb25pemF0aW9uIGJldHdl ZW4gbXVsdGlwbGUKLQkgIGRyaXZlcnMuICBTeW5jIGltcGxlbWVudGF0aW9ucyBjYW4gdGFrZSBh ZHZhbnRhZ2Ugb2YgaGFyZHdhcmUKLQkgIHN5bmNocm9uaXphdGlvbiBidWlsdCBpbnRvIGRldmlj ZXMgbGlrZSBHUFVzLgotCi1jb25maWcgU1dfU1lOQwotCWJvb2wgIlNvZnR3YXJlIHN5bmNocm9u aXphdGlvbiBvYmplY3RzIgotCWRlZmF1bHQgbgotCWRlcGVuZHMgb24gU1lOQwotCS0tLWhlbHAt LS0KLQkgIEEgc3luYyBvYmplY3QgZHJpdmVyIHRoYXQgdXNlcyBhIDMyYml0IGNvdW50ZXIgdG8g Y29vcmRpbmF0ZQotCSAgc3luY2hyb25pemF0aW9uLiAgVXNlZnVsIHdoZW4gdGhlcmUgaXMgbm8g aGFyZHdhcmUgcHJpbWl0aXZlIGJhY2tpbmcKLQkgIHRoZSBzeW5jaHJvbml6YXRpb24uCi0KLWNv bmZpZyBTV19TWU5DX1VTRVIKLQlib29sICJVc2Vyc3BhY2UgQVBJIGZvciBTV19TWU5DIgotCWRl ZmF1bHQgbgotCWRlcGVuZHMgb24gU1dfU1lOQwotCS0tLWhlbHAtLS0KLQkgIFByb3ZpZGVzIGEg dXNlciBzcGFjZSBBUEkgdG8gdGhlIHN3IHN5bmMgb2JqZWN0LgotCSAgKldBUk5JTkcqIGltcHJv cGVyIHVzZSBvZiB0aGlzIGNhbiByZXN1bHQgaW4gZGVhZGxvY2tpbmcga2VybmVsCi0JICBkcml2 ZXJzIGZyb20gdXNlcnNwYWNlLgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lv bi9LY29uZmlnIgogCiBlbmRpZiAjIGlmIEFORFJPSUQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy9hbmRyb2lkL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvTWFrZWZpbGUK aW5kZXggYzdiNmM5OS4uMzU1YWQwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJv aWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvTWFrZWZpbGUKQEAgLTYs NSArNiwzIEBAIG9iai0kKENPTkZJR19BU0hNRU0pCQkJKz0gYXNobWVtLm8KIG9iai0kKENPTkZJ R19BTkRST0lEX1RJTUVEX09VVFBVVCkJKz0gdGltZWRfb3V0cHV0Lm8KIG9iai0kKENPTkZJR19B TkRST0lEX1RJTUVEX0dQSU8pCSs9IHRpbWVkX2dwaW8ubwogb2JqLSQoQ09ORklHX0FORFJPSURf TE9XX01FTU9SWV9LSUxMRVIpCSs9IGxvd21lbW9yeWtpbGxlci5vCi1vYmotJChDT05GSUdfU1lO QykJCQkrPSBzeW5jLm8gc3luY19kZWJ1Zy5vCi1vYmotJChDT05GSUdfU1dfU1lOQykJCQkrPSBz d19zeW5jLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N3X3N5bmMuYyBi L2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N3X3N5bmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggYzRmZjE2Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9z d19zeW5jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMv YmFzZS9zd19zeW5jLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCi0g KgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKLSAqIG1heSBiZSBjb3BpZWQsIGRpc3Ry aWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCi0gKgotICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUg PGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KLSNpbmNsdWRlIDxsaW51 eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2 aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNj ZXNzLmg+Ci0KLSNpbmNsdWRlICJzd19zeW5jLmgiCi0KLXN0YXRpYyBpbnQgc3dfc3luY19jbXAo dTMyIGEsIHUzMiBiKQotewotCWlmIChhID09IGIpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuICgo czMyKWEgLSAoczMyKWIpIDwgMCA/IC0xIDogMTsKLX0KLQotc3RydWN0IHN5bmNfcHQgKnN3X3N5 bmNfcHRfY3JlYXRlKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmosIHUzMiB2YWx1ZSkKLXsK LQlzdHJ1Y3Qgc3dfc3luY19wdCAqcHQ7Ci0KLQlwdCA9IChzdHJ1Y3Qgc3dfc3luY19wdCAqKQot CQlzeW5jX3B0X2NyZWF0ZSgmb2JqLT5vYmosIHNpemVvZihzdHJ1Y3Qgc3dfc3luY19wdCkpOwot Ci0JcHQtPnZhbHVlID0gdmFsdWU7Ci0KLQlyZXR1cm4gKHN0cnVjdCBzeW5jX3B0ICopcHQ7Ci19 Ci1FWFBPUlRfU1lNQk9MKHN3X3N5bmNfcHRfY3JlYXRlKTsKLQotc3RhdGljIHN0cnVjdCBzeW5j X3B0ICpzd19zeW5jX3B0X2R1cChzdHJ1Y3Qgc3luY19wdCAqc3luY19wdCkKLXsKLQlzdHJ1Y3Qg c3dfc3luY19wdCAqcHQgPSAoc3RydWN0IHN3X3N5bmNfcHQgKilzeW5jX3B0OwotCXN0cnVjdCBz d19zeW5jX3RpbWVsaW5lICpvYmogPQotCQkoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKilzeW5j X3B0X3BhcmVudChzeW5jX3B0KTsKLQotCXJldHVybiAoc3RydWN0IHN5bmNfcHQgKilzd19zeW5j X3B0X2NyZWF0ZShvYmosIHB0LT52YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgc3dfc3luY19wdF9o YXNfc2lnbmFsZWQoc3RydWN0IHN5bmNfcHQgKnN5bmNfcHQpCi17Ci0Jc3RydWN0IHN3X3N5bmNf cHQgKnB0ID0gKHN0cnVjdCBzd19zeW5jX3B0ICopc3luY19wdDsKLQlzdHJ1Y3Qgc3dfc3luY190 aW1lbGluZSAqb2JqID0KLQkJKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICopc3luY19wdF9wYXJl bnQoc3luY19wdCk7Ci0KLQlyZXR1cm4gc3dfc3luY19jbXAob2JqLT52YWx1ZSwgcHQtPnZhbHVl KSA+PSAwOwotfQotCi1zdGF0aWMgaW50IHN3X3N5bmNfcHRfY29tcGFyZShzdHJ1Y3Qgc3luY19w dCAqYSwgc3RydWN0IHN5bmNfcHQgKmIpCi17Ci0Jc3RydWN0IHN3X3N5bmNfcHQgKnB0X2EgPSAo c3RydWN0IHN3X3N5bmNfcHQgKilhOwotCXN0cnVjdCBzd19zeW5jX3B0ICpwdF9iID0gKHN0cnVj dCBzd19zeW5jX3B0ICopYjsKLQotCXJldHVybiBzd19zeW5jX2NtcChwdF9hLT52YWx1ZSwgcHRf Yi0+dmFsdWUpOwotfQotCi1zdGF0aWMgaW50IHN3X3N5bmNfZmlsbF9kcml2ZXJfZGF0YShzdHJ1 Y3Qgc3luY19wdCAqc3luY19wdCwKLQkJCQkgICAgdm9pZCAqZGF0YSwgaW50IHNpemUpCi17Ci0J c3RydWN0IHN3X3N5bmNfcHQgKnB0ID0gKHN0cnVjdCBzd19zeW5jX3B0ICopc3luY19wdDsKLQot CWlmIChzaXplIDwgc2l6ZW9mKHB0LT52YWx1ZSkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVt Y3B5KGRhdGEsICZwdC0+dmFsdWUsIHNpemVvZihwdC0+dmFsdWUpKTsKLQotCXJldHVybiBzaXpl b2YocHQtPnZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgc3dfc3luY190aW1lbGluZV92YWx1ZV9z dHIoc3RydWN0IHN5bmNfdGltZWxpbmUgKnN5bmNfdGltZWxpbmUsCi0JCQkJICAgICAgIGNoYXIg KnN0ciwgaW50IHNpemUpCi17Ci0Jc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKnRpbWVsaW5lID0K LQkJKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICopc3luY190aW1lbGluZTsKLQlzbnByaW50Zihz dHIsIHNpemUsICIlZCIsIHRpbWVsaW5lLT52YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN3X3N5 bmNfcHRfdmFsdWVfc3RyKHN0cnVjdCBzeW5jX3B0ICpzeW5jX3B0LAotCQkJCSBjaGFyICpzdHIs IGludCBzaXplKQotewotCXN0cnVjdCBzd19zeW5jX3B0ICpwdCA9IChzdHJ1Y3Qgc3dfc3luY19w dCAqKXN5bmNfcHQ7Ci0KLQlzbnByaW50ZihzdHIsIHNpemUsICIlZCIsIHB0LT52YWx1ZSk7Ci19 Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3luY190aW1lbGluZV9vcHMgc3dfc3luY190aW1lbGluZV9vcHMg PSB7Ci0JLmRyaXZlcl9uYW1lID0gInN3X3N5bmMiLAotCS5kdXAgPSBzd19zeW5jX3B0X2R1cCwK LQkuaGFzX3NpZ25hbGVkID0gc3dfc3luY19wdF9oYXNfc2lnbmFsZWQsCi0JLmNvbXBhcmUgPSBz d19zeW5jX3B0X2NvbXBhcmUsCi0JLmZpbGxfZHJpdmVyX2RhdGEgPSBzd19zeW5jX2ZpbGxfZHJp dmVyX2RhdGEsCi0JLnRpbWVsaW5lX3ZhbHVlX3N0ciA9IHN3X3N5bmNfdGltZWxpbmVfdmFsdWVf c3RyLAotCS5wdF92YWx1ZV9zdHIgPSBzd19zeW5jX3B0X3ZhbHVlX3N0ciwKLX07Ci0KLXN0cnVj dCBzd19zeW5jX3RpbWVsaW5lICpzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZShjb25zdCBjaGFyICpu YW1lKQotewotCXN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmogPSAoc3RydWN0IHN3X3N5bmNf dGltZWxpbmUgKikKLQkJc3luY190aW1lbGluZV9jcmVhdGUoJnN3X3N5bmNfdGltZWxpbmVfb3Bz LAotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lKSwKLQkJCQkgICAgIG5h bWUpOwotCi0JcmV0dXJuIG9iajsKLX0KLUVYUE9SVF9TWU1CT0woc3dfc3luY190aW1lbGluZV9j cmVhdGUpOwotCi12b2lkIHN3X3N5bmNfdGltZWxpbmVfaW5jKHN0cnVjdCBzd19zeW5jX3RpbWVs aW5lICpvYmosIHUzMiBpbmMpCi17Ci0Jb2JqLT52YWx1ZSArPSBpbmM7Ci0KLQlzeW5jX3RpbWVs aW5lX3NpZ25hbCgmb2JqLT5vYmopOwotfQotRVhQT1JUX1NZTUJPTChzd19zeW5jX3RpbWVsaW5l X2luYyk7Ci0KLSNpZmRlZiBDT05GSUdfU1dfU1lOQ19VU0VSCi0vKiAqV0FSTklORyoKLSAqCi0g KiBpbXByb3BlciB1c2Ugb2YgdGhpcyBjYW4gcmVzdWx0IGluIGRlYWRsb2NraW5nIGtlcm5lbCBk cml2ZXJzIGZyb20gdXNlcnNwYWNlLgotICovCi0KLS8qIG9wZW5pbmcgc3dfc3luYyBjcmVhdGUg YSBuZXcgc3luYyBvYmogKi8KLXN0YXRpYyBpbnQgc3dfc3luY19vcGVuKHN0cnVjdCBpbm9kZSAq aW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpv Ymo7Ci0JY2hhciB0YXNrX2NvbW1bVEFTS19DT01NX0xFTl07Ci0KLQlnZXRfdGFza19jb21tKHRh c2tfY29tbSwgY3VycmVudCk7Ci0KLQlvYmogPSBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSh0YXNr X2NvbW0pOwotCWlmICghb2JqKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZpbGUtPnByaXZhdGVf ZGF0YSA9IG9iajsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN3X3N5bmNfcmVsZWFz ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc3df c3luY190aW1lbGluZSAqb2JqID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0Jc3luY190aW1lbGlu ZV9kZXN0cm95KCZvYmotPm9iaik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBsb25nIHN3X3N5 bmNfaW9jdGxfY3JlYXRlX2ZlbmNlKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmosCi0JCQkJ ICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWludCBmZCA9IGdldF91bnVzZWRfZmRfZmxh Z3MoT19DTE9FWEVDKTsKLQlpbnQgZXJyOwotCXN0cnVjdCBzeW5jX3B0ICpwdDsKLQlzdHJ1Y3Qg c3luY19mZW5jZSAqZmVuY2U7Ci0Jc3RydWN0IHN3X3N5bmNfY3JlYXRlX2ZlbmNlX2RhdGEgZGF0 YTsKLQotCWlmIChmZCA8IDApCi0JCXJldHVybiBmZDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigm ZGF0YSwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoZGF0YSkpKSB7Ci0JCWVyciA9IC1FRkFV TFQ7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXB0ID0gc3dfc3luY19wdF9jcmVhdGUob2JqLCBkYXRh LnZhbHVlKTsKLQlpZiAoIXB0KSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOwotCX0K LQotCWRhdGEubmFtZVtzaXplb2YoZGF0YS5uYW1lKSAtIDFdID0gJ1wwJzsKLQlmZW5jZSA9IHN5 bmNfZmVuY2VfY3JlYXRlKGRhdGEubmFtZSwgcHQpOwotCWlmICghZmVuY2UpIHsKLQkJc3luY19w dF9mcmVlKHB0KTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnI7Ci0JfQotCi0JZGF0YS5m ZW5jZSA9IGZkOwotCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmZGF0YSwg c2l6ZW9mKGRhdGEpKSkgewotCQlzeW5jX2ZlbmNlX3B1dChmZW5jZSk7Ci0JCWVyciA9IC1FRkFV TFQ7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXN5bmNfZmVuY2VfaW5zdGFsbChmZW5jZSwgZmQpOwot Ci0JcmV0dXJuIDA7Ci0KLWVycjoKLQlwdXRfdW51c2VkX2ZkKGZkKTsKLQlyZXR1cm4gZXJyOwot fQotCi1zdGF0aWMgbG9uZyBzd19zeW5jX2lvY3RsX2luYyhzdHJ1Y3Qgc3dfc3luY190aW1lbGlu ZSAqb2JqLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQl1MzIgdmFsdWU7Ci0KLQlpZiAoY29weV9m cm9tX3VzZXIoJnZhbHVlLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih2YWx1ZSkpKQotCQly ZXR1cm4gLUVGQVVMVDsKLQotCXN3X3N5bmNfdGltZWxpbmVfaW5jKG9iaiwgdmFsdWUpOwotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBsb25nIHN3X3N5bmNfaW9jdGwoc3RydWN0IGZpbGUgKmZp bGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVj dCBzd19zeW5jX3RpbWVsaW5lICpvYmogPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlzd2l0Y2gg KGNtZCkgewotCWNhc2UgU1dfU1lOQ19JT0NfQ1JFQVRFX0ZFTkNFOgotCQlyZXR1cm4gc3dfc3lu Y19pb2N0bF9jcmVhdGVfZmVuY2Uob2JqLCBhcmcpOwotCi0JY2FzZSBTV19TWU5DX0lPQ19JTkM6 Ci0JCXJldHVybiBzd19zeW5jX2lvY3RsX2luYyhvYmosIGFyZyk7Ci0KLQlkZWZhdWx0OgotCQly ZXR1cm4gLUVOT1RUWTsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHN3X3N5bmNfZm9wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkub3BlbiA9IHN3 X3N5bmNfb3BlbiwKLQkucmVsZWFzZSA9IHN3X3N5bmNfcmVsZWFzZSwKLQkudW5sb2NrZWRfaW9j dGwgPSBzd19zeW5jX2lvY3RsLAotCS5jb21wYXRfaW9jdGwgPSBzd19zeW5jX2lvY3RsLAotfTsK LQotc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHN3X3N5bmNfZGV2ID0gewotCS5taW5vcgk9IE1J U0NfRFlOQU1JQ19NSU5PUiwKLQkubmFtZQk9ICJzd19zeW5jIiwKLQkuZm9wcwk9ICZzd19zeW5j X2ZvcHMsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzd19zeW5jX2RldmljZV9pbml0KHZvaWQp Ci17Ci0JcmV0dXJuIG1pc2NfcmVnaXN0ZXIoJnN3X3N5bmNfZGV2KTsKLX0KLWRldmljZV9pbml0 Y2FsbChzd19zeW5jX2RldmljZV9pbml0KTsKLQotI2VuZGlmIC8qIENPTkZJR19TV19TWU5DX1VT RVIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N3X3N5bmMuaCBiL2Ry aXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N3X3N5bmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggYzg3YWU5ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zd19z eW5jLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogaW5jbHVkZS9saW51 eC9zd19zeW5jLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCi0gKgot ICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKLSAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1 dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCi0gKgotICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfTElOVVhfU1dfU1lOQ19ICi0jZGVmaW5lIF9MSU5V WF9TV19TWU5DX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgv a2NvbmZpZy5oPgotI2luY2x1ZGUgInN5bmMuaCIKLSNpbmNsdWRlICJ1YXBpL3N3X3N5bmMuaCIK LQotc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgewotCXN0cnVjdAlzeW5jX3RpbWVsaW5lCW9iajsK LQotCXUzMgkJCXZhbHVlOwotfTsKLQotc3RydWN0IHN3X3N5bmNfcHQgewotCXN0cnVjdCBzeW5j X3B0CQlwdDsKLQotCXUzMgkJCXZhbHVlOwotfTsKLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX1NX X1NZTkMpCi1zdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqc3dfc3luY190aW1lbGluZV9jcmVhdGUo Y29uc3QgY2hhciAqbmFtZSk7Ci12b2lkIHN3X3N5bmNfdGltZWxpbmVfaW5jKHN0cnVjdCBzd19z eW5jX3RpbWVsaW5lICpvYmosIHUzMiBpbmMpOwotCi1zdHJ1Y3Qgc3luY19wdCAqc3dfc3luY19w dF9jcmVhdGUoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiwgdTMyIHZhbHVlKTsKLSNlbHNl Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpzd19zeW5jX3RpbWVsaW5l X2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKQotewotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMg aW5saW5lIHZvaWQgc3dfc3luY190aW1lbGluZV9pbmMoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUg Km9iaiwgdTMyIGluYykKLXsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3luY19wdCAqc3df c3luY19wdF9jcmVhdGUoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiwKLQkJCQkJCXUzMiB2 YWx1ZSkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLSNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19T V19TWU5DKSAqLwotCi0jZW5kaWYgLyogX0xJTlVYX1NXX1NZTkNfSCAqLwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3luYy5jIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQv c3luYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjBlOTE5Li4wMDAwMDAwCi0t LSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuYworKysgL2Rldi9udWxsCkBAIC0xLDcz NCArMCwwIEBACi0vKgotICogZHJpdmVycy9iYXNlL3N5bmMuYwotICoKLSAqIENvcHlyaWdodCAo QykgMjAxMiBHb29nbGUsIEluYy4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNp b24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAot ICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0 ZXJtcy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGlu dXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4 L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2lu Y2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1 ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgotCi0j aW5jbHVkZSAic3luYy5oIgotCi0jZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKLSNpbmNsdWRl ICJ0cmFjZS9zeW5jLmgiCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmVuY2Vfb3BzIGFuZHJvaWRf ZmVuY2Vfb3BzOwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3luY19mZW5j ZV9mb3BzOwotCi1zdHJ1Y3Qgc3luY190aW1lbGluZSAqc3luY190aW1lbGluZV9jcmVhdGUoY29u c3Qgc3RydWN0IHN5bmNfdGltZWxpbmVfb3BzICpvcHMsCi0JCQkJCSAgIGludCBzaXplLCBjb25z dCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmo7Ci0KLQlpZiAoc2l6 ZSA8IHNpemVvZihzdHJ1Y3Qgc3luY190aW1lbGluZSkpCi0JCXJldHVybiBOVUxMOwotCi0Jb2Jq ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAob2JqID09IE5VTEwpCi0JCXJldHVy biBOVUxMOwotCi0Ja3JlZl9pbml0KCZvYmotPmtyZWYpOwotCW9iai0+b3BzID0gb3BzOwotCW9i ai0+Y29udGV4dCA9IGZlbmNlX2NvbnRleHRfYWxsb2MoMSk7Ci0Jc3RybGNweShvYmotPm5hbWUs IG5hbWUsIHNpemVvZihvYmotPm5hbWUpKTsKLQotCUlOSVRfTElTVF9IRUFEKCZvYmotPmNoaWxk X2xpc3RfaGVhZCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm9iai0+YWN0aXZlX2xpc3RfaGVhZCk7Ci0J c3Bpbl9sb2NrX2luaXQoJm9iai0+Y2hpbGRfbGlzdF9sb2NrKTsKLQotCXN5bmNfdGltZWxpbmVf ZGVidWdfYWRkKG9iaik7Ci0KLQlyZXR1cm4gb2JqOwotfQotRVhQT1JUX1NZTUJPTChzeW5jX3Rp bWVsaW5lX2NyZWF0ZSk7Ci0KLXN0YXRpYyB2b2lkIHN5bmNfdGltZWxpbmVfZnJlZShzdHJ1Y3Qg a3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqID0KLQkJY29udGFpbmVy X29mKGtyZWYsIHN0cnVjdCBzeW5jX3RpbWVsaW5lLCBrcmVmKTsKLQotCXN5bmNfdGltZWxpbmVf ZGVidWdfcmVtb3ZlKG9iaik7Ci0KLQlpZiAob2JqLT5vcHMtPnJlbGVhc2Vfb2JqKQotCQlvYmot Pm9wcy0+cmVsZWFzZV9vYmoob2JqKTsKLQotCWtmcmVlKG9iaik7Ci19Ci0KLXN0YXRpYyB2b2lk IHN5bmNfdGltZWxpbmVfZ2V0KHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopCi17Ci0Ja3JlZl9n ZXQoJm9iai0+a3JlZik7Ci19Ci0KLXN0YXRpYyB2b2lkIHN5bmNfdGltZWxpbmVfcHV0KHN0cnVj dCBzeW5jX3RpbWVsaW5lICpvYmopCi17Ci0Ja3JlZl9wdXQoJm9iai0+a3JlZiwgc3luY190aW1l bGluZV9mcmVlKTsKLX0KLQotdm9pZCBzeW5jX3RpbWVsaW5lX2Rlc3Ryb3koc3RydWN0IHN5bmNf dGltZWxpbmUgKm9iaikKLXsKLQlvYmotPmRlc3Ryb3llZCA9IHRydWU7Ci0JLyoKLQkgKiBFbnN1 cmUgdGltZWxpbmUgaXMgbWFya2VkIGFzIGRlc3Ryb3llZCBiZWZvcmUKLQkgKiBjaGFuZ2luZyB0 aW1lbGluZSdzIGZlbmNlcyBzdGF0dXMuCi0JICovCi0Jc21wX3dtYigpOwotCi0JLyoKLQkgKiBz aWduYWwgYW55IGNoaWxkcmVuIHRoYXQgdGhlaXIgcGFyZW50IGlzIGdvaW5nIGF3YXkuCi0JICov Ci0Jc3luY190aW1lbGluZV9zaWduYWwob2JqKTsKLQlzeW5jX3RpbWVsaW5lX3B1dChvYmopOwot fQotRVhQT1JUX1NZTUJPTChzeW5jX3RpbWVsaW5lX2Rlc3Ryb3kpOwotCi12b2lkIHN5bmNfdGlt ZWxpbmVfc2lnbmFsKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopCi17Ci0JdW5zaWduZWQgbG9u ZyBmbGFnczsKLQlMSVNUX0hFQUQoc2lnbmFsZWRfcHRzKTsKLQlzdHJ1Y3Qgc3luY19wdCAqcHQs ICpuZXh0OwotCi0JdHJhY2Vfc3luY190aW1lbGluZShvYmopOwotCi0Jc3Bpbl9sb2NrX2lycXNh dmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5 X3NhZmUocHQsIG5leHQsICZvYmotPmFjdGl2ZV9saXN0X2hlYWQsCi0JCQkJIGFjdGl2ZV9saXN0 KSB7Ci0JCWlmIChmZW5jZV9pc19zaWduYWxlZF9sb2NrZWQoJnB0LT5iYXNlKSkKLQkJCWxpc3Rf ZGVsX2luaXQoJnB0LT5hY3RpdmVfbGlzdCk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmb2JqLT5jaGlsZF9saXN0X2xvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woc3luY190 aW1lbGluZV9zaWduYWwpOwotCi1zdHJ1Y3Qgc3luY19wdCAqc3luY19wdF9jcmVhdGUoc3RydWN0 IHN5bmNfdGltZWxpbmUgKm9iaiwgaW50IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsK LQlzdHJ1Y3Qgc3luY19wdCAqcHQ7Ci0KLQlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc3luY19w dCkpCi0JCXJldHVybiBOVUxMOwotCi0JcHQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwot CWlmIChwdCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZv YmotPmNoaWxkX2xpc3RfbG9jaywgZmxhZ3MpOwotCXN5bmNfdGltZWxpbmVfZ2V0KG9iaik7Ci0J ZmVuY2VfaW5pdCgmcHQtPmJhc2UsICZhbmRyb2lkX2ZlbmNlX29wcywgJm9iai0+Y2hpbGRfbGlz dF9sb2NrLAotCQkgICBvYmotPmNvbnRleHQsICsrb2JqLT52YWx1ZSk7Ci0JbGlzdF9hZGRfdGFp bCgmcHQtPmNoaWxkX2xpc3QsICZvYmotPmNoaWxkX2xpc3RfaGVhZCk7Ci0JSU5JVF9MSVNUX0hF QUQoJnB0LT5hY3RpdmVfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqLT5jaGls ZF9saXN0X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcHQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHN5bmNf cHRfY3JlYXRlKTsKLQotdm9pZCBzeW5jX3B0X2ZyZWUoc3RydWN0IHN5bmNfcHQgKnB0KQotewot CWZlbmNlX3B1dCgmcHQtPmJhc2UpOwotfQotRVhQT1JUX1NZTUJPTChzeW5jX3B0X2ZyZWUpOwot Ci1zdGF0aWMgc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfYWxsb2MoaW50IHNpemUsIGNv bnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlOwotCi0JZmVuY2Ug PSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChmZW5jZSA9PSBOVUxMKQotCQlyZXR1 cm4gTlVMTDsKLQotCWZlbmNlLT5maWxlID0gYW5vbl9pbm9kZV9nZXRmaWxlKCJzeW5jX2ZlbmNl IiwgJnN5bmNfZmVuY2VfZm9wcywKLQkJCQkJIGZlbmNlLCAwKTsKLQlpZiAoSVNfRVJSKGZlbmNl LT5maWxlKSkKLQkJZ290byBlcnI7Ci0KLQlrcmVmX2luaXQoJmZlbmNlLT5rcmVmKTsKLQlzdHJs Y3B5KGZlbmNlLT5uYW1lLCBuYW1lLCBzaXplb2YoZmVuY2UtPm5hbWUpKTsKLQotCWluaXRfd2Fp dHF1ZXVlX2hlYWQoJmZlbmNlLT53cSk7Ci0KLQlyZXR1cm4gZmVuY2U7Ci0KLWVycjoKLQlrZnJl ZShmZW5jZSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGZlbmNlX2NoZWNrX2Ni X2Z1bmMoc3RydWN0IGZlbmNlICpmLCBzdHJ1Y3QgZmVuY2VfY2IgKmNiKQotewotCXN0cnVjdCBz eW5jX2ZlbmNlX2NiICpjaGVjazsKLQlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2U7Ci0KLQljaGVj ayA9IGNvbnRhaW5lcl9vZihjYiwgc3RydWN0IHN5bmNfZmVuY2VfY2IsIGNiKTsKLQlmZW5jZSA9 IGNoZWNrLT5mZW5jZTsKLQotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZmZW5jZS0+c3RhdHVz KSkKLQkJd2FrZV91cF9hbGwoJmZlbmNlLT53cSk7Ci19Ci0KLS8qIFRPRE86IGltcGxlbWVudCBh IGNyZWF0ZSB3aGljaCB0YWtlcyBtb3JlIHRoYXQgb25lIHN5bmNfcHQgKi8KLXN0cnVjdCBzeW5j X2ZlbmNlICpzeW5jX2ZlbmNlX2NyZWF0ZV9kbWEoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGZl bmNlICpwdCkKLXsKLQlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2U7Ci0KLQlmZW5jZSA9IHN5bmNf ZmVuY2VfYWxsb2Mob2Zmc2V0b2Yoc3RydWN0IHN5bmNfZmVuY2UsIGNic1sxXSksIG5hbWUpOwot CWlmIChmZW5jZSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWZlbmNlLT5udW1fZmVuY2Vz ID0gMTsKLQlhdG9taWNfc2V0KCZmZW5jZS0+c3RhdHVzLCAxKTsKLQotCWZlbmNlLT5jYnNbMF0u c3luY19wdCA9IHB0OwotCWZlbmNlLT5jYnNbMF0uZmVuY2UgPSBmZW5jZTsKLQlpZiAoZmVuY2Vf YWRkX2NhbGxiYWNrKHB0LCAmZmVuY2UtPmNic1swXS5jYiwgZmVuY2VfY2hlY2tfY2JfZnVuYykp Ci0JCWF0b21pY19kZWMoJmZlbmNlLT5zdGF0dXMpOwotCi0Jc3luY19mZW5jZV9kZWJ1Z19hZGQo ZmVuY2UpOwotCi0JcmV0dXJuIGZlbmNlOwotfQotRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX2Ny ZWF0ZV9kbWEpOwotCi1zdHJ1Y3Qgc3luY19mZW5jZSAqc3luY19mZW5jZV9jcmVhdGUoY29uc3Qg Y2hhciAqbmFtZSwgc3RydWN0IHN5bmNfcHQgKnB0KQotewotCXJldHVybiBzeW5jX2ZlbmNlX2Ny ZWF0ZV9kbWEobmFtZSwgJnB0LT5iYXNlKTsKLX0KLUVYUE9SVF9TWU1CT0woc3luY19mZW5jZV9j cmVhdGUpOwotCi1zdHJ1Y3Qgc3luY19mZW5jZSAqc3luY19mZW5jZV9mZGdldChpbnQgZmQpCi17 Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBmZ2V0KGZkKTsKLQotCWlmIChmaWxlID09IE5VTEwpCi0J CXJldHVybiBOVUxMOwotCi0JaWYgKGZpbGUtPmZfb3AgIT0gJnN5bmNfZmVuY2VfZm9wcykKLQkJ Z290byBlcnI7Ci0KLQlyZXR1cm4gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi1lcnI6Ci0JZnB1dChm aWxlKTsKLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0woc3luY19mZW5jZV9mZGdldCk7 Ci0KLXZvaWQgc3luY19mZW5jZV9wdXQoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlKQotewotCWZw dXQoZmVuY2UtPmZpbGUpOwotfQotRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX3B1dCk7Ci0KLXZv aWQgc3luY19mZW5jZV9pbnN0YWxsKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwgaW50IGZkKQot ewotCWZkX2luc3RhbGwoZmQsIGZlbmNlLT5maWxlKTsKLX0KLUVYUE9SVF9TWU1CT0woc3luY19m ZW5jZV9pbnN0YWxsKTsKLQotc3RhdGljIHZvaWQgc3luY19mZW5jZV9hZGRfcHQoc3RydWN0IHN5 bmNfZmVuY2UgKmZlbmNlLAotCQkJICAgICAgaW50ICppLCBzdHJ1Y3QgZmVuY2UgKnB0KQotewot CWZlbmNlLT5jYnNbKmldLnN5bmNfcHQgPSBwdDsKLQlmZW5jZS0+Y2JzWyppXS5mZW5jZSA9IGZl bmNlOwotCi0JaWYgKCFmZW5jZV9hZGRfY2FsbGJhY2socHQsICZmZW5jZS0+Y2JzWyppXS5jYiwg ZmVuY2VfY2hlY2tfY2JfZnVuYykpIHsKLQkJZmVuY2VfZ2V0KHB0KTsKLQkJKCppKSsrOwotCX0K LX0KLQotc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfbWVyZ2UoY29uc3QgY2hhciAqbmFt ZSwKLQkJCQkgICAgc3RydWN0IHN5bmNfZmVuY2UgKmEsIHN0cnVjdCBzeW5jX2ZlbmNlICpiKQot ewotCWludCBudW1fZmVuY2VzID0gYS0+bnVtX2ZlbmNlcyArIGItPm51bV9mZW5jZXM7Ci0Jc3Ry dWN0IHN5bmNfZmVuY2UgKmZlbmNlOwotCWludCBpLCBpX2EsIGlfYjsKLQl1bnNpZ25lZCBsb25n IHNpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgc3luY19mZW5jZSwgY2JzW251bV9mZW5jZXNdKTsKLQot CWZlbmNlID0gc3luY19mZW5jZV9hbGxvYyhzaXplLCBuYW1lKTsKLQlpZiAoZmVuY2UgPT0gTlVM TCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlhdG9taWNfc2V0KCZmZW5jZS0+c3RhdHVzLCBudW1fZmVu Y2VzKTsKLQotCS8qCi0JICogQXNzdW1lIHN5bmNfZmVuY2UgYSBhbmQgYiBhcmUgYm90aCBvcmRl cmVkIGFuZCBoYXZlIG5vCi0JICogZHVwbGljYXRlcyB3aXRoIHRoZSBzYW1lIGNvbnRleHQuCi0J ICoKLQkgKiBJZiBhIHN5bmNfZmVuY2UgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aXRoIHN5bmNfZmVu Y2VfbWVyZ2UKLQkgKiBhbmQgc3luY19mZW5jZV9jcmVhdGUsIHRoaXMgaXMgYSByZWFzb25hYmxl IGFzc3VtcHRpb24uCi0JICovCi0JZm9yIChpID0gaV9hID0gaV9iID0gMDsgaV9hIDwgYS0+bnVt X2ZlbmNlcyAmJiBpX2IgPCBiLT5udW1fZmVuY2VzOyApIHsKLQkJc3RydWN0IGZlbmNlICpwdF9h ID0gYS0+Y2JzW2lfYV0uc3luY19wdDsKLQkJc3RydWN0IGZlbmNlICpwdF9iID0gYi0+Y2JzW2lf Yl0uc3luY19wdDsKLQotCQlpZiAocHRfYS0+Y29udGV4dCA8IHB0X2ItPmNvbnRleHQpIHsKLQkJ CXN5bmNfZmVuY2VfYWRkX3B0KGZlbmNlLCAmaSwgcHRfYSk7Ci0KLQkJCWlfYSsrOwotCQl9IGVs c2UgaWYgKHB0X2EtPmNvbnRleHQgPiBwdF9iLT5jb250ZXh0KSB7Ci0JCQlzeW5jX2ZlbmNlX2Fk ZF9wdChmZW5jZSwgJmksIHB0X2IpOwotCi0JCQlpX2IrKzsKLQkJfSBlbHNlIHsKLQkJCWlmIChw dF9hLT5zZXFubyAtIHB0X2ItPnNlcW5vIDw9IElOVF9NQVgpCi0JCQkJc3luY19mZW5jZV9hZGRf cHQoZmVuY2UsICZpLCBwdF9hKTsKLQkJCWVsc2UKLQkJCQlzeW5jX2ZlbmNlX2FkZF9wdChmZW5j ZSwgJmksIHB0X2IpOwotCi0JCQlpX2ErKzsKLQkJCWlfYisrOwotCQl9Ci0JfQotCi0JZm9yICg7 IGlfYSA8IGEtPm51bV9mZW5jZXM7IGlfYSsrKQotCQlzeW5jX2ZlbmNlX2FkZF9wdChmZW5jZSwg JmksIGEtPmNic1tpX2FdLnN5bmNfcHQpOwotCi0JZm9yICg7IGlfYiA8IGItPm51bV9mZW5jZXM7 IGlfYisrKQotCQlzeW5jX2ZlbmNlX2FkZF9wdChmZW5jZSwgJmksIGItPmNic1tpX2JdLnN5bmNf cHQpOwotCi0JaWYgKG51bV9mZW5jZXMgPiBpKQotCQlhdG9taWNfc3ViKG51bV9mZW5jZXMgLSBp LCAmZmVuY2UtPnN0YXR1cyk7Ci0JZmVuY2UtPm51bV9mZW5jZXMgPSBpOwotCi0Jc3luY19mZW5j ZV9kZWJ1Z19hZGQoZmVuY2UpOwotCXJldHVybiBmZW5jZTsKLX0KLUVYUE9SVF9TWU1CT0woc3lu Y19mZW5jZV9tZXJnZSk7Ci0KLWludCBzeW5jX2ZlbmNlX3dha2VfdXBfd3Eod2FpdF9xdWV1ZV90 ICpjdXJyLCB1bnNpZ25lZCBtb2RlLAotCQkJCSBpbnQgd2FrZV9mbGFncywgdm9pZCAqa2V5KQot ewotCXN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciAqd2FpdDsKLQotCXdhaXQgPSBjb250YWluZXJf b2YoY3Vyciwgc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyLCB3b3JrKTsKLQlsaXN0X2RlbF9pbml0 KCZ3YWl0LT53b3JrLnRhc2tfbGlzdCk7Ci0KLQl3YWl0LT5jYWxsYmFjayh3YWl0LT53b3JrLnBy aXZhdGUsIHdhaXQpOwotCXJldHVybiAxOwotfQotCi1pbnQgc3luY19mZW5jZV93YWl0X2FzeW5j KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwKLQkJCSAgc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVy ICp3YWl0ZXIpCi17Ci0JaW50IGVyciA9IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsKLQl1 bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlp ZiAoIWVycikKLQkJcmV0dXJuIDE7Ci0KLQlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZ3YWl0 ZXItPndvcmssIHN5bmNfZmVuY2Vfd2FrZV91cF93cSk7Ci0Jd2FpdGVyLT53b3JrLnByaXZhdGUg PSBmZW5jZTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmZW5jZS0+d3EubG9jaywgZmxhZ3MpOwot CWVyciA9IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsKLQlpZiAoZXJyID4gMCkKLQkJX19h ZGRfd2FpdF9xdWV1ZV90YWlsKCZmZW5jZS0+d3EsICZ3YWl0ZXItPndvcmspOwotCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmZlbmNlLT53cS5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoZXJyIDwgMCkK LQkJcmV0dXJuIGVycjsKLQotCXJldHVybiAhZXJyOwotfQotRVhQT1JUX1NZTUJPTChzeW5jX2Zl bmNlX3dhaXRfYXN5bmMpOwotCi1pbnQgc3luY19mZW5jZV9jYW5jZWxfYXN5bmMoc3RydWN0IHN5 bmNfZmVuY2UgKmZlbmNlLAotCQkJICAgICBzdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgKndhaXRl cikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2Nr X2lycXNhdmUoJmZlbmNlLT53cS5sb2NrLCBmbGFncyk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZ3YWl0 ZXItPndvcmsudGFza19saXN0KSkKLQkJbGlzdF9kZWxfaW5pdCgmd2FpdGVyLT53b3JrLnRhc2tf bGlzdCk7Ci0JZWxzZQotCQlyZXQgPSAtRU5PRU5UOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmZlbmNlLT53cS5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wo c3luY19mZW5jZV9jYW5jZWxfYXN5bmMpOwotCi1pbnQgc3luY19mZW5jZV93YWl0KHN0cnVjdCBz eW5jX2ZlbmNlICpmZW5jZSwgbG9uZyB0aW1lb3V0KQotewotCWxvbmcgcmV0OwotCWludCBpOwot Ci0JaWYgKHRpbWVvdXQgPCAwKQotCQl0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7Ci0J ZWxzZQotCQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKLQotCXRyYWNlX3N5 bmNfd2FpdChmZW5jZSwgMSk7Ci0JZm9yIChpID0gMDsgaSA8IGZlbmNlLT5udW1fZmVuY2VzOyAr K2kpCi0JCXRyYWNlX3N5bmNfcHQoZmVuY2UtPmNic1tpXS5zeW5jX3B0KTsKLQlyZXQgPSB3YWl0 X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChmZW5jZS0+d3EsCi0JCQkJCSAgICAgICBhdG9t aWNfcmVhZCgmZmVuY2UtPnN0YXR1cykgPD0gMCwKLQkJCQkJICAgICAgIHRpbWVvdXQpOwotCXRy YWNlX3N5bmNfd2FpdChmZW5jZSwgMCk7Ci0KLQlpZiAocmV0IDwgMCkgewotCQlyZXR1cm4gcmV0 OwotCX0gZWxzZSBpZiAocmV0ID09IDApIHsKLQkJaWYgKHRpbWVvdXQpIHsKLQkJCXByX2luZm8o ImZlbmNlIHRpbWVvdXQgb24gWyVwXSBhZnRlciAlZG1zXG4iLCBmZW5jZSwKLQkJCQlqaWZmaWVz X3RvX21zZWNzKHRpbWVvdXQpKTsKLQkJCXN5bmNfZHVtcCgpOwotCQl9Ci0JCXJldHVybiAtRVRJ TUU7Ci0JfQotCi0JcmV0ID0gYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpOwotCWlmIChyZXQp IHsKLQkJcHJfaW5mbygiZmVuY2UgZXJyb3IgJWxkIG9uIFslcF1cbiIsIHJldCwgZmVuY2UpOwot CQlzeW5jX2R1bXAoKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woc3luY19m ZW5jZV93YWl0KTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmFuZHJvaWRfZmVuY2VfZ2V0X2RyaXZl cl9uYW1lKHN0cnVjdCBmZW5jZSAqZmVuY2UpCi17Ci0Jc3RydWN0IHN5bmNfcHQgKnB0ID0gY29u dGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qgc3luY19wdCwgYmFzZSk7Ci0Jc3RydWN0IHN5bmNfdGlt ZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRfcGFyZW50KHB0KTsKLQotCXJldHVybiBwYXJlbnQtPm9w cy0+ZHJpdmVyX25hbWU7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICphbmRyb2lkX2ZlbmNlX2dl dF90aW1lbGluZV9uYW1lKHN0cnVjdCBmZW5jZSAqZmVuY2UpCi17Ci0Jc3RydWN0IHN5bmNfcHQg KnB0ID0gY29udGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qgc3luY19wdCwgYmFzZSk7Ci0Jc3RydWN0 IHN5bmNfdGltZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRfcGFyZW50KHB0KTsKLQotCXJldHVybiBw YXJlbnQtPm5hbWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfZmVuY2VfcmVsZWFzZShzdHJ1 Y3QgZmVuY2UgKmZlbmNlKQotewotCXN0cnVjdCBzeW5jX3B0ICpwdCA9IGNvbnRhaW5lcl9vZihm ZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJhc2UpOwotCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJl bnQgPSBzeW5jX3B0X3BhcmVudChwdCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5f bG9ja19pcnFzYXZlKGZlbmNlLT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9kZWwoJnB0LT5jaGlsZF9s aXN0KTsKLQlpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZwdC0+YWN0aXZlX2xpc3QpKSkK LQkJbGlzdF9kZWwoJnB0LT5hY3RpdmVfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShm ZW5jZS0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHBhcmVudC0+b3BzLT5mcmVlX3B0KQotCQlwYXJl bnQtPm9wcy0+ZnJlZV9wdChwdCk7Ci0KLQlzeW5jX3RpbWVsaW5lX3B1dChwYXJlbnQpOwotCWZl bmNlX2ZyZWUoJnB0LT5iYXNlKTsKLX0KLQotc3RhdGljIGJvb2wgYW5kcm9pZF9mZW5jZV9zaWdu YWxlZChzdHJ1Y3QgZmVuY2UgKmZlbmNlKQotewotCXN0cnVjdCBzeW5jX3B0ICpwdCA9IGNvbnRh aW5lcl9vZihmZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJhc2UpOwotCXN0cnVjdCBzeW5jX3RpbWVs aW5lICpwYXJlbnQgPSBzeW5jX3B0X3BhcmVudChwdCk7Ci0JaW50IHJldDsKLQotCXJldCA9IHBh cmVudC0+b3BzLT5oYXNfc2lnbmFsZWQocHQpOwotCWlmIChyZXQgPCAwKQotCQlmZW5jZS0+c3Rh dHVzID0gcmV0OwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBib29sIGFuZHJvaWRfZmVuY2Vf ZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgZmVuY2UgKmZlbmNlKQotewotCXN0cnVjdCBzeW5jX3B0 ICpwdCA9IGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJhc2UpOwotCXN0cnVj dCBzeW5jX3RpbWVsaW5lICpwYXJlbnQgPSBzeW5jX3B0X3BhcmVudChwdCk7Ci0KLQlpZiAoYW5k cm9pZF9mZW5jZV9zaWduYWxlZChmZW5jZSkpCi0JCXJldHVybiBmYWxzZTsKLQotCWxpc3RfYWRk X3RhaWwoJnB0LT5hY3RpdmVfbGlzdCwgJnBhcmVudC0+YWN0aXZlX2xpc3RfaGVhZCk7Ci0JcmV0 dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbnQgYW5kcm9pZF9mZW5jZV9maWxsX2RyaXZlcl9kYXRh KHN0cnVjdCBmZW5jZSAqZmVuY2UsCi0JCQkJCSAgdm9pZCAqZGF0YSwgaW50IHNpemUpCi17Ci0J c3RydWN0IHN5bmNfcHQgKnB0ID0gY29udGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qgc3luY19wdCwg YmFzZSk7Ci0Jc3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRfcGFyZW50KHB0 KTsKLQotCWlmICghcGFyZW50LT5vcHMtPmZpbGxfZHJpdmVyX2RhdGEpCi0JCXJldHVybiAwOwot CXJldHVybiBwYXJlbnQtPm9wcy0+ZmlsbF9kcml2ZXJfZGF0YShwdCwgZGF0YSwgc2l6ZSk7Ci19 Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfZmVuY2VfdmFsdWVfc3RyKHN0cnVjdCBmZW5jZSAqZmVu Y2UsCi0JCQkJICAgIGNoYXIgKnN0ciwgaW50IHNpemUpCi17Ci0Jc3RydWN0IHN5bmNfcHQgKnB0 ID0gY29udGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qgc3luY19wdCwgYmFzZSk7Ci0Jc3RydWN0IHN5 bmNfdGltZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRfcGFyZW50KHB0KTsKLQotCWlmICghcGFyZW50 LT5vcHMtPnB0X3ZhbHVlX3N0cikgewotCQlpZiAoc2l6ZSkKLQkJCSpzdHIgPSAwOwotCQlyZXR1 cm47Ci0JfQotCXBhcmVudC0+b3BzLT5wdF92YWx1ZV9zdHIocHQsIHN0ciwgc2l6ZSk7Ci19Ci0K LXN0YXRpYyB2b2lkIGFuZHJvaWRfZmVuY2VfdGltZWxpbmVfdmFsdWVfc3RyKHN0cnVjdCBmZW5j ZSAqZmVuY2UsCi0JCQkJCSAgICAgY2hhciAqc3RyLCBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3Qgc3lu Y19wdCAqcHQgPSBjb250YWluZXJfb2YoZmVuY2UsIHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKLQlz dHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50ID0gc3luY19wdF9wYXJlbnQocHQpOwotCi0JaWYg KCFwYXJlbnQtPm9wcy0+dGltZWxpbmVfdmFsdWVfc3RyKSB7Ci0JCWlmIChzaXplKQotCQkJKnN0 ciA9IDA7Ci0JCXJldHVybjsKLQl9Ci0JcGFyZW50LT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cihw YXJlbnQsIHN0ciwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmVuY2Vfb3BzIGFu ZHJvaWRfZmVuY2Vfb3BzID0gewotCS5nZXRfZHJpdmVyX25hbWUgPSBhbmRyb2lkX2ZlbmNlX2dl dF9kcml2ZXJfbmFtZSwKLQkuZ2V0X3RpbWVsaW5lX25hbWUgPSBhbmRyb2lkX2ZlbmNlX2dldF90 aW1lbGluZV9uYW1lLAotCS5lbmFibGVfc2lnbmFsaW5nID0gYW5kcm9pZF9mZW5jZV9lbmFibGVf c2lnbmFsaW5nLAotCS5zaWduYWxlZCA9IGFuZHJvaWRfZmVuY2Vfc2lnbmFsZWQsCi0JLndhaXQg PSBmZW5jZV9kZWZhdWx0X3dhaXQsCi0JLnJlbGVhc2UgPSBhbmRyb2lkX2ZlbmNlX3JlbGVhc2Us Ci0JLmZpbGxfZHJpdmVyX2RhdGEgPSBhbmRyb2lkX2ZlbmNlX2ZpbGxfZHJpdmVyX2RhdGEsCi0J LmZlbmNlX3ZhbHVlX3N0ciA9IGFuZHJvaWRfZmVuY2VfdmFsdWVfc3RyLAotCS50aW1lbGluZV92 YWx1ZV9zdHIgPSBhbmRyb2lkX2ZlbmNlX3RpbWVsaW5lX3ZhbHVlX3N0ciwKLX07Ci0KLXN0YXRp YyB2b2lkIHN5bmNfZmVuY2VfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3Qgc3lu Y19mZW5jZSAqZmVuY2UgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHN5bmNfZmVuY2UsIGty ZWYpOwotCWludCBpLCBzdGF0dXMgPSBhdG9taWNfcmVhZCgmZmVuY2UtPnN0YXR1cyk7Ci0KLQlm b3IgKGkgPSAwOyBpIDwgZmVuY2UtPm51bV9mZW5jZXM7ICsraSkgewotCQlpZiAoc3RhdHVzKQot CQkJZmVuY2VfcmVtb3ZlX2NhbGxiYWNrKGZlbmNlLT5jYnNbaV0uc3luY19wdCwKLQkJCQkJICAg ICAgJmZlbmNlLT5jYnNbaV0uY2IpOwotCQlmZW5jZV9wdXQoZmVuY2UtPmNic1tpXS5zeW5jX3B0 KTsKLQl9Ci0KLQlrZnJlZShmZW5jZSk7Ci19Ci0KLXN0YXRpYyBpbnQgc3luY19mZW5jZV9yZWxl YXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBz eW5jX2ZlbmNlICpmZW5jZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXN5bmNfZmVuY2VfZGVi dWdfcmVtb3ZlKGZlbmNlKTsKLQotCWtyZWZfcHV0KCZmZW5jZS0+a3JlZiwgc3luY19mZW5jZV9m cmVlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBzeW5jX2ZlbmNlX3Bv bGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCi17Ci0Jc3RydWN0IHN5bmNf ZmVuY2UgKmZlbmNlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCBzdGF0dXM7Ci0KLQlwb2xs X3dhaXQoZmlsZSwgJmZlbmNlLT53cSwgd2FpdCk7Ci0KLQlzdGF0dXMgPSBhdG9taWNfcmVhZCgm ZmVuY2UtPnN0YXR1cyk7Ci0KLQlpZiAoIXN0YXR1cykKLQkJcmV0dXJuIFBPTExJTjsKLQllbHNl IGlmIChzdGF0dXMgPCAwKQotCQlyZXR1cm4gUE9MTEVSUjsKLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGxvbmcgc3luY19mZW5jZV9pb2N0bF93YWl0KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwg dW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JX19zMzIgdmFsdWU7Ci0KLQlpZiAoY29weV9mcm9tX3Vz ZXIoJnZhbHVlLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih2YWx1ZSkpKQotCQlyZXR1cm4g LUVGQVVMVDsKLQotCXJldHVybiBzeW5jX2ZlbmNlX3dhaXQoZmVuY2UsIHZhbHVlKTsKLX0KLQot c3RhdGljIGxvbmcgc3luY19mZW5jZV9pb2N0bF9tZXJnZShzdHJ1Y3Qgc3luY19mZW5jZSAqZmVu Y2UsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWludCBmZCA9IGdldF91bnVzZWRfZmRfZmxhZ3Mo T19DTE9FWEVDKTsKLQlpbnQgZXJyOwotCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZTIsICpmZW5j ZTM7Ci0Jc3RydWN0IHN5bmNfbWVyZ2VfZGF0YSBkYXRhOwotCi0JaWYgKGZkIDwgMCkKLQkJcmV0 dXJuIGZkOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZkYXRhLCAodm9pZCBfX3VzZXIgKilhcmcs IHNpemVvZihkYXRhKSkpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBlcnJfcHV0X2ZkOwot CX0KLQotCWZlbmNlMiA9IHN5bmNfZmVuY2VfZmRnZXQoZGF0YS5mZDIpOwotCWlmIChmZW5jZTIg PT0gTlVMTCkgewotCQllcnIgPSAtRU5PRU5UOwotCQlnb3RvIGVycl9wdXRfZmQ7Ci0JfQotCi0J ZGF0YS5uYW1lW3NpemVvZihkYXRhLm5hbWUpIC0gMV0gPSAnXDAnOwotCWZlbmNlMyA9IHN5bmNf ZmVuY2VfbWVyZ2UoZGF0YS5uYW1lLCBmZW5jZSwgZmVuY2UyKTsKLQlpZiAoZmVuY2UzID09IE5V TEwpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfcHV0X2ZlbmNlMjsKLQl9Ci0KLQlk YXRhLmZlbmNlID0gZmQ7Ci0JaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZk YXRhLCBzaXplb2YoZGF0YSkpKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX3B1dF9m ZW5jZTM7Ci0JfQotCi0Jc3luY19mZW5jZV9pbnN0YWxsKGZlbmNlMywgZmQpOwotCXN5bmNfZmVu Y2VfcHV0KGZlbmNlMik7Ci0JcmV0dXJuIDA7Ci0KLWVycl9wdXRfZmVuY2UzOgotCXN5bmNfZmVu Y2VfcHV0KGZlbmNlMyk7Ci0KLWVycl9wdXRfZmVuY2UyOgotCXN5bmNfZmVuY2VfcHV0KGZlbmNl Mik7Ci0KLWVycl9wdXRfZmQ6Ci0JcHV0X3VudXNlZF9mZChmZCk7Ci0JcmV0dXJuIGVycjsKLX0K LQotc3RhdGljIGludCBzeW5jX2ZpbGxfcHRfaW5mbyhzdHJ1Y3QgZmVuY2UgKmZlbmNlLCB2b2lk ICpkYXRhLCBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3Qgc3luY19wdF9pbmZvICppbmZvID0gZGF0YTsK LQlpbnQgcmV0OwotCi0JaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IHN5bmNfcHRfaW5mbykpCi0J CXJldHVybiAtRU5PTUVNOwotCi0JaW5mby0+bGVuID0gc2l6ZW9mKHN0cnVjdCBzeW5jX3B0X2lu Zm8pOwotCi0JaWYgKGZlbmNlLT5vcHMtPmZpbGxfZHJpdmVyX2RhdGEpIHsKLQkJcmV0ID0gZmVu Y2UtPm9wcy0+ZmlsbF9kcml2ZXJfZGF0YShmZW5jZSwgaW5mby0+ZHJpdmVyX2RhdGEsCi0JCQkJ CQkgICBzaXplIC0gc2l6ZW9mKCppbmZvKSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJl dDsKLQotCQlpbmZvLT5sZW4gKz0gcmV0OwotCX0KLQotCXN0cmxjcHkoaW5mby0+b2JqX25hbWUs IGZlbmNlLT5vcHMtPmdldF90aW1lbGluZV9uYW1lKGZlbmNlKSwKLQkJc2l6ZW9mKGluZm8tPm9i al9uYW1lKSk7Ci0Jc3RybGNweShpbmZvLT5kcml2ZXJfbmFtZSwgZmVuY2UtPm9wcy0+Z2V0X2Ry aXZlcl9uYW1lKGZlbmNlKSwKLQkJc2l6ZW9mKGluZm8tPmRyaXZlcl9uYW1lKSk7Ci0JaWYgKGZl bmNlX2lzX3NpZ25hbGVkKGZlbmNlKSkKLQkJaW5mby0+c3RhdHVzID0gZmVuY2UtPnN0YXR1cyA+ PSAwID8gMSA6IGZlbmNlLT5zdGF0dXM7Ci0JZWxzZQotCQlpbmZvLT5zdGF0dXMgPSAwOwotCWlu Zm8tPnRpbWVzdGFtcF9ucyA9IGt0aW1lX3RvX25zKGZlbmNlLT50aW1lc3RhbXApOwotCi0JcmV0 dXJuIGluZm8tPmxlbjsKLX0KLQotc3RhdGljIGxvbmcgc3luY19mZW5jZV9pb2N0bF9mZW5jZV9p bmZvKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwKLQkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCi17 Ci0Jc3RydWN0IHN5bmNfZmVuY2VfaW5mb19kYXRhICpkYXRhOwotCV9fdTMyIHNpemU7Ci0JX191 MzIgbGVuID0gMDsKLQlpbnQgcmV0LCBpOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZzaXplLCAo dm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihzaXplKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0J aWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IHN5bmNfZmVuY2VfaW5mb19kYXRhKSkKLQkJcmV0dXJu IC1FSU5WQUw7Ci0KLQlpZiAoc2l6ZSA+IDQwOTYpCi0JCXNpemUgPSA0MDk2OwotCi0JZGF0YSA9 IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRhdGEgPT0gTlVMTCkKLQkJcmV0dXJu IC1FTk9NRU07Ci0KLQlzdHJsY3B5KGRhdGEtPm5hbWUsIGZlbmNlLT5uYW1lLCBzaXplb2YoZGF0 YS0+bmFtZSkpOwotCWRhdGEtPnN0YXR1cyA9IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsK LQlpZiAoZGF0YS0+c3RhdHVzID49IDApCi0JCWRhdGEtPnN0YXR1cyA9ICFkYXRhLT5zdGF0dXM7 Ci0KLQlsZW4gPSBzaXplb2Yoc3RydWN0IHN5bmNfZmVuY2VfaW5mb19kYXRhKTsKLQotCWZvciAo aSA9IDA7IGkgPCBmZW5jZS0+bnVtX2ZlbmNlczsgKytpKSB7Ci0JCXN0cnVjdCBmZW5jZSAqcHQg PSBmZW5jZS0+Y2JzW2ldLnN5bmNfcHQ7Ci0KLQkJcmV0ID0gc3luY19maWxsX3B0X2luZm8ocHQs ICh1OCAqKWRhdGEgKyBsZW4sIHNpemUgLSBsZW4pOwotCi0JCWlmIChyZXQgPCAwKQotCQkJZ290 byBvdXQ7Ci0KLQkJbGVuICs9IHJldDsKLQl9Ci0KLQlkYXRhLT5sZW4gPSBsZW47Ci0KLQlpZiAo Y29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgZGF0YSwgbGVuKSkKLQkJcmV0ID0gLUVG QVVMVDsKLQllbHNlCi0JCXJldCA9IDA7Ci0KLW91dDoKLQlrZnJlZShkYXRhKTsKLQotCXJldHVy biByZXQ7Ci19Ci0KLXN0YXRpYyBsb25nIHN5bmNfZmVuY2VfaW9jdGwoc3RydWN0IGZpbGUgKmZp bGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0 cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXN3aXRjaCAo Y21kKSB7Ci0JY2FzZSBTWU5DX0lPQ19XQUlUOgotCQlyZXR1cm4gc3luY19mZW5jZV9pb2N0bF93 YWl0KGZlbmNlLCBhcmcpOwotCi0JY2FzZSBTWU5DX0lPQ19NRVJHRToKLQkJcmV0dXJuIHN5bmNf ZmVuY2VfaW9jdGxfbWVyZ2UoZmVuY2UsIGFyZyk7Ci0KLQljYXNlIFNZTkNfSU9DX0ZFTkNFX0lO Rk86Ci0JCXJldHVybiBzeW5jX2ZlbmNlX2lvY3RsX2ZlbmNlX2luZm8oZmVuY2UsIGFyZyk7Ci0K LQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT1RUWTsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgZmlsZV9vcGVyYXRpb25zIHN5bmNfZmVuY2VfZm9wcyA9IHsKLQkucmVsZWFzZSA9IHN5bmNf ZmVuY2VfcmVsZWFzZSwKLQkucG9sbCA9IHN5bmNfZmVuY2VfcG9sbCwKLQkudW5sb2NrZWRfaW9j dGwgPSBzeW5jX2ZlbmNlX2lvY3RsLAotCS5jb21wYXRfaW9jdGwgPSBzeW5jX2ZlbmNlX2lvY3Rs LAotfTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3luYy5oIGIvZHJp dmVycy9zdGFnaW5nL2FuZHJvaWQvc3luYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBhZmEwNzUyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuaAor KysgL2Rldi9udWxsCkBAIC0xLDM2NiArMCwwIEBACi0vKgotICogaW5jbHVkZS9saW51eC9zeW5j LmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfTElOVVhfU1lOQ19ICi0jZGVmaW5lIF9M SU5VWF9TWU5DX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgv a3JlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5o PgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgot I2luY2x1ZGUgPGxpbnV4L2ZlbmNlLmg+Ci0KLSNpbmNsdWRlICJ1YXBpL3N5bmMuaCIKLQotc3Ry dWN0IHN5bmNfdGltZWxpbmU7Ci1zdHJ1Y3Qgc3luY19wdDsKLXN0cnVjdCBzeW5jX2ZlbmNlOwot Ci0vKioKLSAqIHN0cnVjdCBzeW5jX3RpbWVsaW5lX29wcyAtIHN5bmMgb2JqZWN0IGltcGxlbWVu dGF0aW9uIG9wcwotICogQGRyaXZlcl9uYW1lOgluYW1lIG9mIHRoZSBpbXBsZW1lbnRhdGlvbgot ICogQGR1cDoJCWR1cGxpY2F0ZSBhIHN5bmNfcHQKLSAqIEBoYXNfc2lnbmFsZWQ6CXJldHVybnM6 Ci0gKgkJCSAgMSBpZiBwdCBoYXMgc2lnbmFsZWQKLSAqCQkJICAwIGlmIHB0IGhhcyBub3Qgc2ln bmFsZWQKLSAqCQkJIDwwIG9uIGVycm9yCi0gKiBAY29tcGFyZToJCXJldHVybnM6Ci0gKgkJCSAg MSBpZiBiIHdpbGwgc2lnbmFsIGJlZm9yZSBhCi0gKgkJCSAgMCBpZiBhIGFuZCBiIHdpbGwgc2ln bmFsIGF0IHRoZSBzYW1lIHRpbWUKLSAqCQkJIC0xIGlmIGEgd2lsbCBzaWduYWwgYmVmb3JlIGIK LSAqIEBmcmVlX3B0OgkJY2FsbGVkIGJlZm9yZSBzeW5jX3B0IGlzIGZyZWVkCi0gKiBAcmVsZWFz ZV9vYmo6CWNhbGxlZCBiZWZvcmUgc3luY190aW1lbGluZSBpcyBmcmVlZAotICogQGZpbGxfZHJp dmVyX2RhdGE6CXdyaXRlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRyaXZlciBkYXRhIHRvIGRh dGEuCi0gKgkJCSAgc2hvdWxkIHJldHVybiBhbiBlcnJvciBpZiB0aGVyZSBpcyBub3QgZW5vdWdo IHJvb20KLSAqCQkJICBhcyBzcGVjaWZpZWQgYnkgc2l6ZS4gIFRoaXMgaW5mb3JtYXRpb24gaXMg cmV0dXJuZWQKLSAqCQkJICB0byB1c2Vyc3BhY2UgYnkgU1lOQ19JT0NfRkVOQ0VfSU5GTy4KLSAq IEB0aW1lbGluZV92YWx1ZV9zdHI6IGZpbGwgc3RyIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBzeW5j X3RpbWVsaW5lJ3MgY291bnRlcgotICogQHB0X3ZhbHVlX3N0cjoJZmlsbCBzdHIgd2l0aCB0aGUg dmFsdWUgb2YgdGhlIHN5bmNfcHQKLSAqLwotc3RydWN0IHN5bmNfdGltZWxpbmVfb3BzIHsKLQlj b25zdCBjaGFyICpkcml2ZXJfbmFtZTsKLQotCS8qIHJlcXVpcmVkICovCi0Jc3RydWN0IHN5bmNf cHQgKiAoKmR1cCkoc3RydWN0IHN5bmNfcHQgKnB0KTsKLQotCS8qIHJlcXVpcmVkICovCi0JaW50 ICgqaGFzX3NpZ25hbGVkKShzdHJ1Y3Qgc3luY19wdCAqcHQpOwotCi0JLyogcmVxdWlyZWQgKi8K LQlpbnQgKCpjb21wYXJlKShzdHJ1Y3Qgc3luY19wdCAqYSwgc3RydWN0IHN5bmNfcHQgKmIpOwot Ci0JLyogb3B0aW9uYWwgKi8KLQl2b2lkICgqZnJlZV9wdCkoc3RydWN0IHN5bmNfcHQgKnN5bmNf cHQpOwotCi0JLyogb3B0aW9uYWwgKi8KLQl2b2lkICgqcmVsZWFzZV9vYmopKHN0cnVjdCBzeW5j X3RpbWVsaW5lICpzeW5jX3RpbWVsaW5lKTsKLQotCS8qIG9wdGlvbmFsICovCi0JaW50ICgqZmls bF9kcml2ZXJfZGF0YSkoc3RydWN0IHN5bmNfcHQgKnN5bmNwdCwgdm9pZCAqZGF0YSwgaW50IHNp emUpOwotCi0JLyogb3B0aW9uYWwgKi8KLQl2b2lkICgqdGltZWxpbmVfdmFsdWVfc3RyKShzdHJ1 Y3Qgc3luY190aW1lbGluZSAqdGltZWxpbmUsIGNoYXIgKnN0ciwKLQkJCQkgICBpbnQgc2l6ZSk7 Ci0KLQkvKiBvcHRpb25hbCAqLwotCXZvaWQgKCpwdF92YWx1ZV9zdHIpKHN0cnVjdCBzeW5jX3B0 ICpwdCwgY2hhciAqc3RyLCBpbnQgc2l6ZSk7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBzeW5jX3Rp bWVsaW5lIC0gc3luYyBvYmplY3QKLSAqIEBrcmVmOgkJcmVmZXJlbmNlIGNvdW50IG9uIGZlbmNl LgotICogQG9wczoJCW9wcyB0aGF0IGRlZmluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN5 bmNfdGltZWxpbmUKLSAqIEBuYW1lOgkJbmFtZSBvZiB0aGUgc3luY190aW1lbGluZS4gVXNlZnVs IGZvciBkZWJ1Z2dpbmcKLSAqIEBkZXN0cm95ZWQ6CQlzZXQgd2hlbiBzeW5jX3RpbWVsaW5lIGlz IGRlc3Ryb3llZAotICogQGNoaWxkX2xpc3RfaGVhZDoJbGlzdCBvZiBjaGlsZHJlbiBzeW5jX3B0 cyBmb3IgdGhpcyBzeW5jX3RpbWVsaW5lCi0gKiBAY2hpbGRfbGlzdF9sb2NrOglsb2NrIHByb3Rl Y3RpbmcgQGNoaWxkX2xpc3RfaGVhZCwgZGVzdHJveWVkLCBhbmQKLSAqCQkJICBzeW5jX3B0LnN0 YXR1cwotICogQGFjdGl2ZV9saXN0X2hlYWQ6CWxpc3Qgb2YgYWN0aXZlICh1bnNpZ25hbGVkL2Vy cm9yZWQpIHN5bmNfcHRzCi0gKiBAc3luY190aW1lbGluZV9saXN0OgltZW1iZXJzaGlwIGluIGds b2JhbCBzeW5jX3RpbWVsaW5lX2xpc3QKLSAqLwotc3RydWN0IHN5bmNfdGltZWxpbmUgewotCXN0 cnVjdCBrcmVmCQlrcmVmOwotCWNvbnN0IHN0cnVjdCBzeW5jX3RpbWVsaW5lX29wcwkqb3BzOwot CWNoYXIJCQluYW1lWzMyXTsKLQotCS8qIHByb3RlY3RlZCBieSBjaGlsZF9saXN0X2xvY2sgKi8K LQlib29sCQkJZGVzdHJveWVkOwotCWludAkJCWNvbnRleHQsIHZhbHVlOwotCi0Jc3RydWN0IGxp c3RfaGVhZAljaGlsZF9saXN0X2hlYWQ7Ci0Jc3BpbmxvY2tfdAkJY2hpbGRfbGlzdF9sb2NrOwot Ci0Jc3RydWN0IGxpc3RfaGVhZAlhY3RpdmVfbGlzdF9oZWFkOwotCi0jaWZkZWYgQ09ORklHX0RF QlVHX0ZTCi0Jc3RydWN0IGxpc3RfaGVhZAlzeW5jX3RpbWVsaW5lX2xpc3Q7Ci0jZW5kaWYKLX07 Ci0KLS8qKgotICogc3RydWN0IHN5bmNfcHQgLSBzeW5jIHBvaW50Ci0gKiBAZmVuY2U6CQliYXNl IGZlbmNlIGNsYXNzCi0gKiBAY2hpbGRfbGlzdDoJCW1lbWJlcnNoaXAgaW4gc3luY190aW1lbGlu ZS5jaGlsZF9saXN0X2hlYWQKLSAqIEBhY3RpdmVfbGlzdDoJbWVtYmVyc2hpcCBpbiBzeW5jX3Rp bWVsaW5lLmFjdGl2ZV9saXN0X2hlYWQKLSAqIEBzaWduYWxlZF9saXN0OgltZW1iZXJzaGlwIGlu IHRlbXBvcmFyeSBzaWduYWxlZF9saXN0IG9uIHN0YWNrCi0gKiBAZmVuY2U6CQlzeW5jX2ZlbmNl IHRvIHdoaWNoIHRoZSBzeW5jX3B0IGJlbG9uZ3MKLSAqIEBwdF9saXN0OgkJbWVtYmVyc2hpcCBp biBzeW5jX2ZlbmNlLnB0X2xpc3RfaGVhZAotICogQHN0YXR1czoJCTE6IHNpZ25hbGVkLCAwOmFj dGl2ZSwgPDA6IGVycm9yCi0gKiBAdGltZXN0YW1wOgkJdGltZSB3aGljaCBzeW5jX3B0IHN0YXR1 cyB0cmFuc2l0aW9uZWQgZnJvbSBhY3RpdmUgdG8KLSAqCQkJICBzaWduYWxlZCBvciBlcnJvci4K LSAqLwotc3RydWN0IHN5bmNfcHQgewotCXN0cnVjdCBmZW5jZSBiYXNlOwotCi0Jc3RydWN0IGxp c3RfaGVhZAljaGlsZF9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlX2xpc3Q7Ci19Owot Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCBzeW5jX3RpbWVsaW5lICpzeW5jX3B0X3BhcmVudChzdHJ1 Y3Qgc3luY19wdCAqcHQpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihwdC0+YmFzZS5sb2NrLCBz dHJ1Y3Qgc3luY190aW1lbGluZSwKLQkJCSAgICBjaGlsZF9saXN0X2xvY2spOwotfQotCi1zdHJ1 Y3Qgc3luY19mZW5jZV9jYiB7Ci0Jc3RydWN0IGZlbmNlX2NiIGNiOwotCXN0cnVjdCBmZW5jZSAq c3luY19wdDsKLQlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2U7Ci19OwotCi0vKioKLSAqIHN0cnVj dCBzeW5jX2ZlbmNlIC0gc3luYyBmZW5jZQotICogQGZpbGU6CQlmaWxlIHJlcHJlc2VudGluZyB0 aGlzIGZlbmNlCi0gKiBAa3JlZjoJCXJlZmVyZW5jZSBjb3VudCBvbiBmZW5jZS4KLSAqIEBuYW1l OgkJbmFtZSBvZiBzeW5jX2ZlbmNlLiAgVXNlZnVsIGZvciBkZWJ1Z2dpbmcKLSAqIEBwdF9saXN0 X2hlYWQ6CWxpc3Qgb2Ygc3luY19wdHMgaW4gdGhlIGZlbmNlLiAgaW1tdXRhYmxlIG9uY2UgZmVu Y2UKLSAqCQkJICBpcyBjcmVhdGVkCi0gKiBAc3RhdHVzOgkJMDogc2lnbmFsZWQsID4wOmFjdGl2 ZSwgPDA6IGVycm9yCi0gKgotICogQHdxOgkJCXdhaXQgcXVldWUgZm9yIGZlbmNlIHNpZ25hbGlu ZwotICogQHN5bmNfZmVuY2VfbGlzdDoJbWVtYmVyc2hpcCBpbiBnbG9iYWwgZmVuY2UgbGlzdAot ICovCi1zdHJ1Y3Qgc3luY19mZW5jZSB7Ci0Jc3RydWN0IGZpbGUJCSpmaWxlOwotCXN0cnVjdCBr cmVmCQlrcmVmOwotCWNoYXIJCQluYW1lWzMyXTsKLSNpZmRlZiBDT05GSUdfREVCVUdfRlMKLQlz dHJ1Y3QgbGlzdF9oZWFkCXN5bmNfZmVuY2VfbGlzdDsKLSNlbmRpZgotCWludCBudW1fZmVuY2Vz OwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJd3E7Ci0JYXRvbWljX3QJCXN0YXR1czsKLQotCXN0cnVj dCBzeW5jX2ZlbmNlX2NiCWNic1tdOwotfTsKLQotc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyOwot dHlwZWRlZiB2b2lkICgqc3luY19jYWxsYmFja190KShzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2Us Ci0JCQkJc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyICp3YWl0ZXIpOwotCi0vKioKLSAqIHN0cnVj dCBzeW5jX2ZlbmNlX3dhaXRlciAtIG1ldGFkYXRhIGZvciBhc3luY2hyb25vdXMgd2FpdGVyIG9u IGEgZmVuY2UKLSAqIEB3YWl0ZXJfbGlzdDoJbWVtYmVyc2hpcCBpbiBzeW5jX2ZlbmNlLndhaXRl cl9saXN0X2hlYWQKLSAqIEBjYWxsYmFjazoJCWZ1bmN0aW9uIHBvaW50ZXIgdG8gY2FsbCB3aGVu IGZlbmNlIHNpZ25hbHMKLSAqIEBjYWxsYmFja19kYXRhOglwb2ludGVyIHRvIHBhc3MgdG8gQGNh bGxiYWNrCi0gKi8KLXN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciB7Ci0Jd2FpdF9xdWV1ZV90IHdv cms7Ci0Jc3luY19jYWxsYmFja190IGNhbGxiYWNrOwotfTsKLQotc3RhdGljIGlubGluZSB2b2lk IHN5bmNfZmVuY2Vfd2FpdGVyX2luaXQoc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyICp3YWl0ZXIs Ci0JCQkJCSAgc3luY19jYWxsYmFja190IGNhbGxiYWNrKQotewotCUlOSVRfTElTVF9IRUFEKCZ3 YWl0ZXItPndvcmsudGFza19saXN0KTsKLQl3YWl0ZXItPmNhbGxiYWNrID0gY2FsbGJhY2s7Ci19 Ci0KLS8qCi0gKiBBUEkgZm9yIHN5bmNfdGltZWxpbmUgaW1wbGVtZW50ZXJzCi0gKi8KLQotLyoq Ci0gKiBzeW5jX3RpbWVsaW5lX2NyZWF0ZSgpIC0gY3JlYXRlcyBhIHN5bmMgb2JqZWN0Ci0gKiBA b3BzOglzcGVjaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9wcyBmb3IgdGhlIG9iamVjdAotICog QHNpemU6CXNpemUgdG8gYWxsb2NhdGUgZm9yIHRoaXMgb2JqCi0gKiBAbmFtZToJc3luY190aW1l bGluZSBuYW1lCi0gKgotICogQ3JlYXRlcyBhIG5ldyBzeW5jX3RpbWVsaW5lIHdoaWNoIHdpbGwg dXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpZWQgYnkKLSAqIEBvcHMuICBAc2l6ZSBieXRl cyB3aWxsIGJlIGFsbG9jYXRlZCBhbGxvd2luZyBmb3IgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMK LSAqIGRhdGEgdG8gYmUga2VwdCBhZnRlciB0aGUgZ2VuZXJpYyBzeW5jX3RpbWVsaW5lIHN0cnVj dC4KLSAqLwotc3RydWN0IHN5bmNfdGltZWxpbmUgKnN5bmNfdGltZWxpbmVfY3JlYXRlKGNvbnN0 IHN0cnVjdCBzeW5jX3RpbWVsaW5lX29wcyAqb3BzLAotCQkJCQkgICBpbnQgc2l6ZSwgY29uc3Qg Y2hhciAqbmFtZSk7Ci0KLS8qKgotICogc3luY190aW1lbGluZV9kZXN0cm95KCkgLSBkZXN0cm95 cyBhIHN5bmMgb2JqZWN0Ci0gKiBAb2JqOglzeW5jX3RpbWVsaW5lIHRvIGRlc3Ryb3kKLSAqCi0g KiBBIHN5bmMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGNhbGwgdGhpcyB3aGVuIHRoZSBAb2JqIGlz IGdvaW5nIGF3YXkKLSAqIChpLmUuIG1vZHVsZSB1bmxvYWQuKSAgQG9iaiB3b24ndCBhY3R1YWxs eSBiZSBmcmVlZCB1bnRpbCBhbGwgaXRzIGNoaWxkcmVuCi0gKiBzeW5jX3B0cyBhcmUgZnJlZWQu Ci0gKi8KLXZvaWQgc3luY190aW1lbGluZV9kZXN0cm95KHN0cnVjdCBzeW5jX3RpbWVsaW5lICpv YmopOwotCi0vKioKLSAqIHN5bmNfdGltZWxpbmVfc2lnbmFsKCkgLSBzaWduYWwgYSBzdGF0dXMg Y2hhbmdlIG9uIGEgc3luY190aW1lbGluZQotICogQG9iajoJc3luY190aW1lbGluZSB0byBzaWdu YWwKLSAqCi0gKiBBIHN5bmMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGNhbGwgdGhpcyBhbnkgdGlt ZSBvbmUgb2YgaXQncyBzeW5jX3B0cwotICogaGFzIHNpZ25hbGVkIG9yIGhhcyBhbiBlcnJvciBj b25kaXRpb24uCi0gKi8KLXZvaWQgc3luY190aW1lbGluZV9zaWduYWwoc3RydWN0IHN5bmNfdGlt ZWxpbmUgKm9iaik7Ci0KLS8qKgotICogc3luY19wdF9jcmVhdGUoKSAtIGNyZWF0ZXMgYSBzeW5j IHB0Ci0gKiBAcGFyZW50OglzeW5jX3B0J3MgcGFyZW50IHN5bmNfdGltZWxpbmUKLSAqIEBzaXpl OglzaXplIHRvIGFsbG9jYXRlIGZvciB0aGlzIHB0Ci0gKgotICogQ3JlYXRlcyBhIG5ldyBzeW5j X3B0IGFzIGEgY2hpbGQgb2YgQHBhcmVudC4gIEBzaXplIGJ5dGVzIHdpbGwgYmUKLSAqIGFsbG9j YXRlZCBhbGxvd2luZyBmb3IgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZGF0YSB0byBiZSBrZXB0 IGFmdGVyCi0gKiB0aGUgZ2VuZXJpYyBzeW5jX3RpbWVsaW5lIHN0cnVjdC4KLSAqLwotc3RydWN0 IHN5bmNfcHQgKnN5bmNfcHRfY3JlYXRlKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJlbnQsIGlu dCBzaXplKTsKLQotLyoqCi0gKiBzeW5jX3B0X2ZyZWUoKSAtIGZyZWVzIGEgc3luYyBwdAotICog QHB0OgkJc3luY19wdCB0byBmcmVlCi0gKgotICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQg b24gc3luY19wdHMgd2hpY2ggaGF2ZSBiZWVuIGNyZWF0ZWQgYnV0Ci0gKiBub3QgYWRkZWQgdG8g YSBmZW5jZS4KLSAqLwotdm9pZCBzeW5jX3B0X2ZyZWUoc3RydWN0IHN5bmNfcHQgKnB0KTsKLQot LyoqCi0gKiBzeW5jX2ZlbmNlX2NyZWF0ZSgpIC0gY3JlYXRlcyBhIHN5bmMgZmVuY2UKLSAqIEBu YW1lOgluYW1lIG9mIGZlbmNlIHRvIGNyZWF0ZQotICogQHB0OgkJc3luY19wdCB0byBhZGQgdG8g dGhlIGZlbmNlCi0gKgotICogQ3JlYXRlcyBhIGZlbmNlIGNvbnRhaW5nIEBwdC4gIE9uY2UgdGhp cyBpcyBjYWxsZWQsIHRoZSBmZW5jZSB0YWtlcwotICogb3duZXJzaGlwIG9mIEBwdC4KLSAqLwot c3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHN0 cnVjdCBzeW5jX3B0ICpwdCk7Ci0KLS8qKgotICogc3luY19mZW5jZV9jcmVhdGVfZG1hKCkgLSBj cmVhdGVzIGEgc3luYyBmZW5jZSBmcm9tIGRtYS1mZW5jZQotICogQG5hbWU6CW5hbWUgb2YgZmVu Y2UgdG8gY3JlYXRlCi0gKiBAcHQ6CWRtYS1mZW5jZSB0byBhZGQgdG8gdGhlIGZlbmNlCi0gKgot ICogQ3JlYXRlcyBhIGZlbmNlIGNvbnRhaW5nIEBwdC4gIE9uY2UgdGhpcyBpcyBjYWxsZWQsIHRo ZSBmZW5jZSB0YWtlcwotICogb3duZXJzaGlwIG9mIEBwdC4KLSAqLwotc3RydWN0IHN5bmNfZmVu Y2UgKnN5bmNfZmVuY2VfY3JlYXRlX2RtYShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZmVuY2Ug KnB0KTsKLQotLyoKLSAqIEFQSSBmb3Igc3luY19mZW5jZSBjb25zdW1lcnMKLSAqLwotCi0vKioK LSAqIHN5bmNfZmVuY2VfbWVyZ2UoKSAtIG1lcmdlIHR3byBmZW5jZXMKLSAqIEBuYW1lOgluYW1l IG9mIG5ldyBmZW5jZQotICogQGE6CQlmZW5jZSBhCi0gKiBAYjoJCWZlbmNlIGIKLSAqCi0gKiBD cmVhdGVzIGEgbmV3IGZlbmNlIHdoaWNoIGNvbnRhaW5zIGNvcGllcyBvZiBhbGwgdGhlIHN5bmNf cHRzIGluIGJvdGgKLSAqIEBhIGFuZCBAYi4gIEBhIGFuZCBAYiByZW1haW4gdmFsaWQsIGluZGVw ZW5kZW50IGZlbmNlcy4KLSAqLwotc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfbWVyZ2Uo Y29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgc3RydWN0IHN5bmNfZmVuY2UgKmEsIHN0cnVjdCBz eW5jX2ZlbmNlICpiKTsKLQotLyoqCi0gKiBzeW5jX2ZlbmNlX2ZkZ2V0KCkgLSBnZXQgYSBmZW5j ZSBmcm9tIGFuIGZkCi0gKiBAZmQ6CQlmZCByZWZlcmVuY2luZyBhIGZlbmNlCi0gKgotICogRW5z dXJlcyBAZmQgcmVmZXJlbmNlcyBhIHZhbGlkIGZlbmNlLCBpbmNyZW1lbnRzIHRoZSByZWZjb3Vu dCBvZiB0aGUgYmFja2luZwotICogZmlsZSwgYW5kIHJldHVybnMgdGhlIGZlbmNlLgotICovCi1z dHJ1Y3Qgc3luY19mZW5jZSAqc3luY19mZW5jZV9mZGdldChpbnQgZmQpOwotCi0vKioKLSAqIHN5 bmNfZmVuY2VfcHV0KCkgLSBwdXRzIGEgcmVmZXJlbmNlIG9mIGEgc3luYyBmZW5jZQotICogQGZl bmNlOglmZW5jZSB0byBwdXQKLSAqCi0gKiBQdXRzIGEgcmVmZXJlbmNlIG9uIEBmZW5jZS4gIElm IHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgZmVuY2UgYW5kCi0gKiBhbGwgaXQncyBz eW5jX3B0cyB3aWxsIGJlIGZyZWVkCi0gKi8KLXZvaWQgc3luY19mZW5jZV9wdXQoc3RydWN0IHN5 bmNfZmVuY2UgKmZlbmNlKTsKLQotLyoqCi0gKiBzeW5jX2ZlbmNlX2luc3RhbGwoKSAtIGluc3Rh bGxzIGEgZmVuY2UgaW50byBhIGZpbGUgZGVzY3JpcHRvcgotICogQGZlbmNlOglmZW5jZSB0byBp bnN0YWxsCi0gKiBAZmQ6CQlmaWxlIGRlc2NyaXB0b3IgaW4gd2hpY2ggdG8gaW5zdGFsbCB0aGUg ZmVuY2UKLSAqCi0gKiBJbnN0YWxscyBAZmVuY2UgaW50byBAZmQuICBAZmQncyBzaG91bGQgYmUg YWNxdWlyZWQgdGhyb3VnaAotICogZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NMT0VYRUMpLgotICov Ci12b2lkIHN5bmNfZmVuY2VfaW5zdGFsbChzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsIGludCBm ZCk7Ci0KLS8qKgotICogc3luY19mZW5jZV93YWl0X2FzeW5jKCkgLSByZWdpc3RlcnMgYW5kIGFz eW5jIHdhaXQgb24gdGhlIGZlbmNlCi0gKiBAZmVuY2U6CQlmZW5jZSB0byB3YWl0IG9uCi0gKiBA d2FpdGVyOgkJd2FpdGVyIGNhbGxiYWNrIHN0cnVjawotICoKLSAqIFJldHVybnMgMSBpZiBAZmVu Y2UgaGFzIGFscmVhZHkgc2lnbmFsZWQuCi0gKgotICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8g YmUgY2FsbGVkIHdoZW4gQGZlbmNlIHNpZ25hbHMgb3IgaGFzIGFuIGVycm9yLgotICogQHdhaXRl ciBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aCBzeW5jX2ZlbmNlX3dhaXRlcl9pbml0KCkuCi0g Ki8KLWludCBzeW5jX2ZlbmNlX3dhaXRfYXN5bmMoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlLAot CQkJICBzdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgKndhaXRlcik7Ci0KLS8qKgotICogc3luY19m ZW5jZV9jYW5jZWxfYXN5bmMoKSAtIGNhbmNlbHMgYW4gYXN5bmMgd2FpdAotICogQGZlbmNlOgkJ ZmVuY2UgdG8gd2FpdCBvbgotICogQHdhaXRlcjoJCXdhaXRlciBjYWxsYmFjayBzdHJ1Y2sKLSAq Ci0gKiByZXR1cm5zIDAgaWYgd2FpdGVyIHdhcyByZW1vdmVkIGZyb20gZmVuY2UncyBhc3luYyB3 YWl0ZXIgbGlzdC4KLSAqIHJldHVybnMgLUVOT0VOVCBpZiB3YWl0ZXIgd2FzIG5vdCBmb3VuZCBv biBmZW5jZSdzIGFzeW5jIHdhaXRlciBsaXN0LgotICoKLSAqIENhbmNlbHMgYSBwcmV2aW91c2x5 IHJlZ2lzdGVyZWQgYXN5bmMgd2FpdC4gIFdpbGwgZmFpbCBncmFjZWZ1bGx5IGlmCi0gKiBAd2Fp dGVyIHdhcyBuZXZlciByZWdpc3RlcmVkIG9yIGlmIEBmZW5jZSBoYXMgYWxyZWFkeSBzaWduYWxl ZCBAd2FpdGVyLgotICovCi1pbnQgc3luY19mZW5jZV9jYW5jZWxfYXN5bmMoc3RydWN0IHN5bmNf ZmVuY2UgKmZlbmNlLAotCQkJICAgIHN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciAqd2FpdGVyKTsK LQotLyoqCi0gKiBzeW5jX2ZlbmNlX3dhaXQoKSAtIHdhaXQgb24gZmVuY2UKLSAqIEBmZW5jZToJ ZmVuY2UgdG8gd2FpdCBvbgotICogQHRpZW1vdXQ6CXRpbWVvdXQgaW4gbXMKLSAqCi0gKiBXYWl0 IGZvciBAZmVuY2UgdG8gYmUgc2lnbmFsZWQgb3IgaGF2ZSBhbiBlcnJvci4gIFdhaXRzIGluZGVm aW5pdGVseQotICogaWYgQHRpbWVvdXQgPCAwCi0gKi8KLWludCBzeW5jX2ZlbmNlX3dhaXQoc3Ry dWN0IHN5bmNfZmVuY2UgKmZlbmNlLCBsb25nIHRpbWVvdXQpOwotCi0jaWZkZWYgQ09ORklHX0RF QlVHX0ZTCi0KLXZvaWQgc3luY190aW1lbGluZV9kZWJ1Z19hZGQoc3RydWN0IHN5bmNfdGltZWxp bmUgKm9iaik7Ci12b2lkIHN5bmNfdGltZWxpbmVfZGVidWdfcmVtb3ZlKHN0cnVjdCBzeW5jX3Rp bWVsaW5lICpvYmopOwotdm9pZCBzeW5jX2ZlbmNlX2RlYnVnX2FkZChzdHJ1Y3Qgc3luY19mZW5j ZSAqZmVuY2UpOwotdm9pZCBzeW5jX2ZlbmNlX2RlYnVnX3JlbW92ZShzdHJ1Y3Qgc3luY19mZW5j ZSAqZmVuY2UpOwotdm9pZCBzeW5jX2R1bXAodm9pZCk7Ci0KLSNlbHNlCi0jIGRlZmluZSBzeW5j X3RpbWVsaW5lX2RlYnVnX2FkZChvYmopCi0jIGRlZmluZSBzeW5jX3RpbWVsaW5lX2RlYnVnX3Jl bW92ZShvYmopCi0jIGRlZmluZSBzeW5jX2ZlbmNlX2RlYnVnX2FkZChmZW5jZSkKLSMgZGVmaW5l IHN5bmNfZmVuY2VfZGVidWdfcmVtb3ZlKGZlbmNlKQotIyBkZWZpbmUgc3luY19kdW1wKCkKLSNl bmRpZgotaW50IHN5bmNfZmVuY2Vfd2FrZV91cF93cSh3YWl0X3F1ZXVlX3QgKmN1cnIsIHVuc2ln bmVkIG1vZGUsCi0JCQkJIGludCB3YWtlX2ZsYWdzLCB2b2lkICprZXkpOwotCi0jZW5kaWYgLyog X0xJTlVYX1NZTkNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3lu Y19kZWJ1Zy5jIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3luY19kZWJ1Zy5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDVkMTNjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3Rh Z2luZy9hbmRyb2lkL3N5bmNfZGVidWcuYworKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBA Ci0vKgotICogZHJpdmVycy9iYXNlL3N5bmMuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBH b29nbGUsIEluYy4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAotICogbWF5IGJl IGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KLSAq Ci0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVidWdm cy5oPgotI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4K LSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1 ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxp bnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4 L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgotI2luY2x1ZGUgPGxp bnV4L3RpbWU2NC5oPgotI2luY2x1ZGUgInN5bmMuaCIKLQotI2lmZGVmIENPTkZJR19ERUJVR19G UwotCi1zdGF0aWMgTElTVF9IRUFEKHN5bmNfdGltZWxpbmVfbGlzdF9oZWFkKTsKLXN0YXRpYyBE RUZJTkVfU1BJTkxPQ0soc3luY190aW1lbGluZV9saXN0X2xvY2spOwotc3RhdGljIExJU1RfSEVB RChzeW5jX2ZlbmNlX2xpc3RfaGVhZCk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN5bmNfZmVu Y2VfbGlzdF9sb2NrKTsKLQotdm9pZCBzeW5jX3RpbWVsaW5lX2RlYnVnX2FkZChzdHJ1Y3Qgc3lu Y190aW1lbGluZSAqb2JqKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tf aXJxc2F2ZSgmc3luY190aW1lbGluZV9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWls KCZvYmotPnN5bmNfdGltZWxpbmVfbGlzdCwgJnN5bmNfdGltZWxpbmVfbGlzdF9oZWFkKTsKLQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX3RpbWVsaW5lX2xpc3RfbG9jaywgZmxhZ3MpOwot fQotCi12b2lkIHN5bmNfdGltZWxpbmVfZGVidWdfcmVtb3ZlKHN0cnVjdCBzeW5jX3RpbWVsaW5l ICpvYmopCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZz eW5jX3RpbWVsaW5lX2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZvYmotPnN5bmNfdGlt ZWxpbmVfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3luY190aW1lbGluZV9saXN0 X2xvY2ssIGZsYWdzKTsKLX0KLQotdm9pZCBzeW5jX2ZlbmNlX2RlYnVnX2FkZChzdHJ1Y3Qgc3lu Y19mZW5jZSAqZmVuY2UpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19p cnFzYXZlKCZzeW5jX2ZlbmNlX2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJmZl bmNlLT5zeW5jX2ZlbmNlX2xpc3QsICZzeW5jX2ZlbmNlX2xpc3RfaGVhZCk7Ci0Jc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmc3luY19mZW5jZV9saXN0X2xvY2ssIGZsYWdzKTsKLX0KLQotdm9pZCBz eW5jX2ZlbmNlX2RlYnVnX3JlbW92ZShzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UpCi17Ci0JdW5z aWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzeW5jX2ZlbmNlX2xpc3Rf bG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZmZW5jZS0+c3luY19mZW5jZV9saXN0KTsKLQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX2ZlbmNlX2xpc3RfbG9jaywgZmxhZ3MpOwotfQotCi1z dGF0aWMgY29uc3QgY2hhciAqc3luY19zdGF0dXNfc3RyKGludCBzdGF0dXMpCi17Ci0JaWYgKHN0 YXR1cyA9PSAwKQotCQlyZXR1cm4gInNpZ25hbGVkIjsKLQotCWlmIChzdGF0dXMgPiAwKQotCQly ZXR1cm4gImFjdGl2ZSI7Ci0KLQlyZXR1cm4gImVycm9yIjsKLX0KLQotc3RhdGljIHZvaWQgc3lu Y19wcmludF9wdChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBmZW5jZSAqcHQsIGJvb2wgZmVu Y2UpCi17Ci0JaW50IHN0YXR1cyA9IDE7Ci0KLQlpZiAoZmVuY2VfaXNfc2lnbmFsZWRfbG9ja2Vk KHB0KSkKLQkJc3RhdHVzID0gcHQtPnN0YXR1czsKLQotCXNlcV9wcmludGYocywgIiAgJXMlc3B0 ICVzIiwKLQkJICAgZmVuY2UgJiYgcHQtPm9wcy0+Z2V0X3RpbWVsaW5lX25hbWUgPwotCQkgICBw dC0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZShwdCkgOiAiIiwKLQkJICAgZmVuY2UgPyAiXyIgOiAi IiwKLQkJICAgc3luY19zdGF0dXNfc3RyKHN0YXR1cykpOwotCi0JaWYgKHN0YXR1cyA8PSAwKSB7 Ci0JCXN0cnVjdCB0aW1lc3BlYzY0IHRzNjQgPQotCQkJa3RpbWVfdG9fdGltZXNwZWM2NChwdC0+ dGltZXN0YW1wKTsKLQotCQlzZXFfcHJpbnRmKHMsICJAJWxsZC4lMDlsZCIsIChzNjQpdHM2NC50 dl9zZWMsIHRzNjQudHZfbnNlYyk7Ci0JfQotCi0JaWYgKCghZmVuY2UgfHwgcHQtPm9wcy0+dGlt ZWxpbmVfdmFsdWVfc3RyKSAmJgotCSAgICBwdC0+b3BzLT5mZW5jZV92YWx1ZV9zdHIpIHsKLQkJ Y2hhciB2YWx1ZVs2NF07Ci0JCWJvb2wgc3VjY2VzczsKLQotCQlwdC0+b3BzLT5mZW5jZV92YWx1 ZV9zdHIocHQsIHZhbHVlLCBzaXplb2YodmFsdWUpKTsKLQkJc3VjY2VzcyA9IHN0cmxlbih2YWx1 ZSk7Ci0KLQkJaWYgKHN1Y2Nlc3MpCi0JCQlzZXFfcHJpbnRmKHMsICI6ICVzIiwgdmFsdWUpOwot Ci0JCWlmIChzdWNjZXNzICYmIGZlbmNlKSB7Ci0JCQlwdC0+b3BzLT50aW1lbGluZV92YWx1ZV9z dHIocHQsIHZhbHVlLCBzaXplb2YodmFsdWUpKTsKLQotCQkJaWYgKHN0cmxlbih2YWx1ZSkpCi0J CQkJc2VxX3ByaW50ZihzLCAiIC8gJXMiLCB2YWx1ZSk7Ci0JCX0KLQl9Ci0KLQlzZXFfcHV0cyhz LCAiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgc3luY19wcmludF9vYmooc3RydWN0IHNlcV9maWxl ICpzLCBzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnBv czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc2VxX3ByaW50ZihzLCAiJXMgJXMiLCBvYmot Pm5hbWUsIG9iai0+b3BzLT5kcml2ZXJfbmFtZSk7Ci0KLQlpZiAob2JqLT5vcHMtPnRpbWVsaW5l X3ZhbHVlX3N0cikgewotCQljaGFyIHZhbHVlWzY0XTsKLQotCQlvYmotPm9wcy0+dGltZWxpbmVf dmFsdWVfc3RyKG9iaiwgdmFsdWUsIHNpemVvZih2YWx1ZSkpOwotCQlzZXFfcHJpbnRmKHMsICI6 ICVzIiwgdmFsdWUpOwotCX0KLQotCXNlcV9wdXRzKHMsICJcbiIpOwotCi0Jc3Bpbl9sb2NrX2ly cXNhdmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaChwb3Ms ICZvYmotPmNoaWxkX2xpc3RfaGVhZCkgewotCQlzdHJ1Y3Qgc3luY19wdCAqcHQgPQotCQkJY29u dGFpbmVyX29mKHBvcywgc3RydWN0IHN5bmNfcHQsIGNoaWxkX2xpc3QpOwotCQlzeW5jX3ByaW50 X3B0KHMsICZwdC0+YmFzZSwgZmFsc2UpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZv YmotPmNoaWxkX2xpc3RfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBzeW5jX3ByaW50 X2ZlbmNlKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlKQotewot CXdhaXRfcXVldWVfdCAqcG9zOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0KLQlz ZXFfcHJpbnRmKHMsICJbJXBdICVzOiAlc1xuIiwgZmVuY2UsIGZlbmNlLT5uYW1lLAotCQkgICBz eW5jX3N0YXR1c19zdHIoYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpKSk7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgZmVuY2UtPm51bV9mZW5jZXM7ICsraSkgewotCQlzeW5jX3ByaW50X3B0KHMsIGZl bmNlLT5jYnNbaV0uc3luY19wdCwgdHJ1ZSk7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZl bmNlLT53cS5sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZmZW5jZS0+ d3EudGFza19saXN0LCB0YXNrX2xpc3QpIHsKLQkJc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyICp3 YWl0ZXI7Ci0KLQkJaWYgKHBvcy0+ZnVuYyAhPSAmc3luY19mZW5jZV93YWtlX3VwX3dxKQotCQkJ Y29udGludWU7Ci0KLQkJd2FpdGVyID0gY29udGFpbmVyX29mKHBvcywgc3RydWN0IHN5bmNfZmVu Y2Vfd2FpdGVyLCB3b3JrKTsKLQotCQlzZXFfcHJpbnRmKHMsICJ3YWl0ZXIgJXBGXG4iLCB3YWl0 ZXItPmNhbGxiYWNrKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVuY2UtPndxLmxv Y2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBzeW5jX2RlYnVnZnNfc2hvdyhzdHJ1Y3Qgc2Vx X2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVj dCBsaXN0X2hlYWQgKnBvczsKLQotCXNlcV9wdXRzKHMsICJvYmpzOlxuLS0tLS0tLS0tLS0tLS1c biIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN5bmNfdGltZWxpbmVfbGlzdF9sb2NrLCBmbGFn cyk7Ci0JbGlzdF9mb3JfZWFjaChwb3MsICZzeW5jX3RpbWVsaW5lX2xpc3RfaGVhZCkgewotCQlz dHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqID0KLQkJCWNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBz eW5jX3RpbWVsaW5lLAotCQkJCSAgICAgc3luY190aW1lbGluZV9saXN0KTsKLQotCQlzeW5jX3By aW50X29iaihzLCBvYmopOwotCQlzZXFfcHV0cyhzLCAiXG4iKTsKLQl9Ci0Jc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmc3luY190aW1lbGluZV9saXN0X2xvY2ssIGZsYWdzKTsKLQotCXNlcV9wdXRz KHMsICJmZW5jZXM6XG4tLS0tLS0tLS0tLS0tLVxuIik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgm c3luY19mZW5jZV9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoKHBvcywgJnN5bmNf ZmVuY2VfbGlzdF9oZWFkKSB7Ci0JCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSA9Ci0JCQljb250 YWluZXJfb2YocG9zLCBzdHJ1Y3Qgc3luY19mZW5jZSwgc3luY19mZW5jZV9saXN0KTsKLQotCQlz eW5jX3ByaW50X2ZlbmNlKHMsIGZlbmNlKTsKLQkJc2VxX3B1dHMocywgIlxuIik7Ci0JfQotCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5bmNfZmVuY2VfbGlzdF9sb2NrLCBmbGFncyk7Ci0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3luY19kZWJ1Z2ZzX29wZW4oc3RydWN0IGlub2RlICpp bm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHN5 bmNfZGVidWdmc19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0 cnVjdCBmaWxlX29wZXJhdGlvbnMgc3luY19kZWJ1Z2ZzX2ZvcHMgPSB7Ci0JLm9wZW4gICAgICAg ICAgID0gc3luY19kZWJ1Z2ZzX29wZW4sCi0JLnJlYWQgICAgICAgICAgID0gc2VxX3JlYWQsCi0J Lmxsc2VlayAgICAgICAgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlICAgICAgICA9IHNpbmdsZV9y ZWxlYXNlLAotfTsKLQotc3RhdGljIF9faW5pdCBpbnQgc3luY19kZWJ1Z2ZzX2luaXQodm9pZCkK LXsKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzeW5jIiwgU19JUlVHTywgTlVMTCwgTlVMTCwgJnN5 bmNfZGVidWdmc19mb3BzKTsKLQlyZXR1cm4gMDsKLX0KLWxhdGVfaW5pdGNhbGwoc3luY19kZWJ1 Z2ZzX2luaXQpOwotCi0jZGVmaW5lIERVTVBfQ0hVTksgMjU2Ci1zdGF0aWMgY2hhciBzeW5jX2R1 bXBfYnVmWzY0ICogMTAyNF07Ci12b2lkIHN5bmNfZHVtcCh2b2lkKQotewotCXN0cnVjdCBzZXFf ZmlsZSBzID0gewotCQkuYnVmID0gc3luY19kdW1wX2J1ZiwKLQkJLnNpemUgPSBzaXplb2Yoc3lu Y19kdW1wX2J1ZikgLSAxLAotCX07Ci0JaW50IGk7Ci0KLQlzeW5jX2RlYnVnZnNfc2hvdygmcywg TlVMTCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcy5jb3VudDsgaSArPSBEVU1QX0NIVU5LKSB7Ci0J CWlmICgocy5jb3VudCAtIGkpID4gRFVNUF9DSFVOSykgewotCQkJY2hhciBjID0gcy5idWZbaSAr IERVTVBfQ0hVTktdOwotCi0JCQlzLmJ1ZltpICsgRFVNUF9DSFVOS10gPSAwOwotCQkJcHJfY29u dCgiJXMiLCBzLmJ1ZiArIGkpOwotCQkJcy5idWZbaSArIERVTVBfQ0hVTktdID0gYzsKLQkJfSBl bHNlIHsKLQkJCXMuYnVmW3MuY291bnRdID0gMDsKLQkJCXByX2NvbnQoIiVzIiwgcy5idWYgKyBp KTsKLQkJfQotCX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5k cm9pZC90cmFjZS9zeW5jLmggYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC90cmFjZS9zeW5jLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZWRiOTcuLjAwMDAwMDAKLS0tIGEvZHJp dmVycy9zdGFnaW5nL2FuZHJvaWQvdHJhY2Uvc3luYy5oCisrKyAvZGV2L251bGwKQEAgLTEsODIg KzAsMCBAQAotI3VuZGVmIFRSQUNFX1NZU1RFTQotI2RlZmluZSBUUkFDRV9JTkNMVURFX1BBVEgg Li4vLi4vZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdHJhY2UKLSNkZWZpbmUgVFJBQ0VfU1lTVEVN IHN5bmMKLQotI2lmICFkZWZpbmVkKF9UUkFDRV9TWU5DX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVB REVSX01VTFRJX1JFQUQpCi0jZGVmaW5lIF9UUkFDRV9TWU5DX0gKLQotI2luY2x1ZGUgIi4uL3N5 bmMuaCIKLSNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+Ci0KLVRSQUNFX0VWRU5UKHN5bmNf dGltZWxpbmUsCi0JVFBfUFJPVE8oc3RydWN0IHN5bmNfdGltZWxpbmUgKnRpbWVsaW5lKSwKLQot CVRQX0FSR1ModGltZWxpbmUpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJCV9fc3RyaW5nKG5h bWUsIHRpbWVsaW5lLT5uYW1lKQotCQkJX19hcnJheShjaGFyLCB2YWx1ZSwgMzIpCi0JKSwKLQot CVRQX2Zhc3RfYXNzaWduKAotCQkJX19hc3NpZ25fc3RyKG5hbWUsIHRpbWVsaW5lLT5uYW1lKTsK LQkJCWlmICh0aW1lbGluZS0+b3BzLT50aW1lbGluZV92YWx1ZV9zdHIpIHsKLQkJCQl0aW1lbGlu ZS0+b3BzLT50aW1lbGluZV92YWx1ZV9zdHIodGltZWxpbmUsCi0JCQkJCQkJX19lbnRyeS0+dmFs dWUsCi0JCQkJCQkJc2l6ZW9mKF9fZW50cnktPnZhbHVlKSk7Ci0JCQl9IGVsc2UgewotCQkJCV9f ZW50cnktPnZhbHVlWzBdID0gJ1wwJzsKLQkJCX0KLQkpLAotCi0JVFBfcHJpbnRrKCJuYW1lPSVz IHZhbHVlPSVzIiwgX19nZXRfc3RyKG5hbWUpLCBfX2VudHJ5LT52YWx1ZSkKLSk7Ci0KLVRSQUNF X0VWRU5UKHN5bmNfd2FpdCwKLQlUUF9QUk9UTyhzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsIGlu dCBiZWdpbiksCi0KLQlUUF9BUkdTKGZlbmNlLCBiZWdpbiksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5 KAotCQkJX19zdHJpbmcobmFtZSwgZmVuY2UtPm5hbWUpCi0JCQlfX2ZpZWxkKHMzMiwgc3RhdHVz KQotCQkJX19maWVsZCh1MzIsIGJlZ2luKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJCV9f YXNzaWduX3N0cihuYW1lLCBmZW5jZS0+bmFtZSk7Ci0JCQlfX2VudHJ5LT5zdGF0dXMgPSBhdG9t aWNfcmVhZCgmZmVuY2UtPnN0YXR1cyk7Ci0JCQlfX2VudHJ5LT5iZWdpbiA9IGJlZ2luOwotCSks Ci0KLQlUUF9wcmludGsoIiVzIG5hbWU9JXMgc3RhdGU9JWQiLCBfX2VudHJ5LT5iZWdpbiA/ICJi ZWdpbiIgOiAiZW5kIiwKLQkJCV9fZ2V0X3N0cihuYW1lKSwgX19lbnRyeS0+c3RhdHVzKQotKTsK LQotVFJBQ0VfRVZFTlQoc3luY19wdCwKLQlUUF9QUk9UTyhzdHJ1Y3QgZmVuY2UgKnB0KSwKLQot CVRQX0FSR1MocHQpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19zdHJpbmcodGltZWxpbmUs IHB0LT5vcHMtPmdldF90aW1lbGluZV9uYW1lKHB0KSkKLQkJX19hcnJheShjaGFyLCB2YWx1ZSwg MzIpCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWduKAotCQlfX2Fzc2lnbl9zdHIodGltZWxpbmUsIHB0 LT5vcHMtPmdldF90aW1lbGluZV9uYW1lKHB0KSk7Ci0JCWlmIChwdC0+b3BzLT5mZW5jZV92YWx1 ZV9zdHIpIHsKLQkJCXB0LT5vcHMtPmZlbmNlX3ZhbHVlX3N0cihwdCwgX19lbnRyeS0+dmFsdWUs Ci0JCQkJCQkJc2l6ZW9mKF9fZW50cnktPnZhbHVlKSk7Ci0JCX0gZWxzZSB7Ci0JCQlfX2VudHJ5 LT52YWx1ZVswXSA9ICdcMCc7Ci0JCX0KLQkpLAotCi0JVFBfcHJpbnRrKCJuYW1lPSVzIHZhbHVl PSVzIiwgX19nZXRfc3RyKHRpbWVsaW5lKSwgX19lbnRyeS0+dmFsdWUpCi0pOwotCi0jZW5kaWYg LyogaWYgIWRlZmluZWQoX1RSQUNFX1NZTkNfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVM VElfUkVBRCkgKi8KLQotLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICov Ci0jaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0 YWdpbmcvYW5kcm9pZC91YXBpL3N3X3N5bmMuaCBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3Vh cGkvc3dfc3luYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjVkNDg2Li4wMDAw MDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkvc3dfc3luYy5oCisrKyAvZGV2 L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUs IEluYy4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAotICogbWF5IGJlIGNvcGll ZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KLSAqCi0gKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVmIF9VQVBJX0xJTlVYX1NXX1NZTkNf SAotI2RlZmluZSBfVUFQSV9MSU5VWF9TV19TWU5DX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+Ci0KLXN0cnVjdCBzd19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRhIHsKLQlfX3UzMgl2YWx1ZTsK LQljaGFyCW5hbWVbMzJdOwotCV9fczMyCWZlbmNlOyAvKiBmZCBvZiBuZXcgZmVuY2UgKi8KLX07 Ci0KLSNkZWZpbmUgU1dfU1lOQ19JT0NfTUFHSUMJJ1cnCi0KLSNkZWZpbmUgU1dfU1lOQ19JT0Nf Q1JFQVRFX0ZFTkNFCV9JT1dSKFNXX1NZTkNfSU9DX01BR0lDLCAwLFwKLQkJc3RydWN0IHN3X3N5 bmNfY3JlYXRlX2ZlbmNlX2RhdGEpCi0jZGVmaW5lIFNXX1NZTkNfSU9DX0lOQwkJCV9JT1coU1df U1lOQ19JT0NfTUFHSUMsIDEsIF9fdTMyKQotCi0jZW5kaWYgLyogX1VBUElfTElOVVhfU1dfU1lO Q19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC91YXBpL3N5bmMuaCBi L2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkvc3luYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBlOTY0Yzc1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lk L3VhcGkvc3luYy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHly aWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK LSAqLwotCi0jaWZuZGVmIF9VQVBJX0xJTlVYX1NZTkNfSAotI2RlZmluZSBfVUFQSV9MSU5VWF9T WU5DX0gKLQotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMu aD4KLQotLyoqCi0gKiBzdHJ1Y3Qgc3luY19tZXJnZV9kYXRhIC0gZGF0YSBwYXNzZWQgdG8gbWVy Z2UgaW9jdGwKLSAqIEBmZDI6CWZpbGUgZGVzY3JpcHRvciBvZiBzZWNvbmQgZmVuY2UKLSAqIEBu YW1lOgluYW1lIG9mIG5ldyBmZW5jZQotICogQGZlbmNlOglyZXR1cm5zIHRoZSBmZCBvZiB0aGUg bmV3IGZlbmNlIHRvIHVzZXJzcGFjZQotICovCi1zdHJ1Y3Qgc3luY19tZXJnZV9kYXRhIHsKLQlf X3MzMglmZDI7IC8qIGZkIG9mIHNlY29uZCBmZW5jZSAqLwotCWNoYXIJbmFtZVszMl07IC8qIG5h bWUgb2YgbmV3IGZlbmNlICovCi0JX19zMzIJZmVuY2U7IC8qIGZkIG9uIG5ld2x5IGNyZWF0ZWQg ZmVuY2UgKi8KLX07Ci0KLS8qKgotICogc3RydWN0IHN5bmNfcHRfaW5mbyAtIGRldGFpbGVkIHN5 bmNfcHQgaW5mb3JtYXRpb24KLSAqIEBsZW46CQlsZW5ndGggb2Ygc3luY19wdF9pbmZvIGluY2x1 ZGluZyBhbnkgZHJpdmVyX2RhdGEKLSAqIEBvYmpfbmFtZToJCW5hbWUgb2YgcGFyZW50IHN5bmNf dGltZWxpbmUKLSAqIEBkcml2ZXJfbmFtZToJbmFtZSBvZiBkcml2ZXIgaW1wbGVtZW50aW5nIHRo ZSBwYXJlbnQKLSAqIEBzdGF0dXM6CQlzdGF0dXMgb2YgdGhlIHN5bmNfcHQgMDphY3RpdmUgMTpz aWduYWxlZCA8MDplcnJvcgotICogQHRpbWVzdGFtcF9uczoJdGltZXN0YW1wIG9mIHN0YXR1cyBj aGFuZ2UgaW4gbmFub3NlY29uZHMKLSAqIEBkcml2ZXJfZGF0YToJYW55IGRyaXZlciBkZXBlbmRl bnQgZGF0YQotICovCi1zdHJ1Y3Qgc3luY19wdF9pbmZvIHsKLQlfX3UzMglsZW47Ci0JY2hhcglv YmpfbmFtZVszMl07Ci0JY2hhcglkcml2ZXJfbmFtZVszMl07Ci0JX19zMzIJc3RhdHVzOwotCV9f dTY0CXRpbWVzdGFtcF9uczsKLQotCV9fdTgJZHJpdmVyX2RhdGFbMF07Ci19OwotCi0vKioKLSAq IHN0cnVjdCBzeW5jX2ZlbmNlX2luZm9fZGF0YSAtIGRhdGEgcmV0dXJuZWQgZnJvbSBmZW5jZSBp bmZvIGlvY3RsCi0gKiBAbGVuOglpb2N0bCBjYWxsZXIgd3JpdGVzIHRoZSBzaXplIG9mIHRoZSBi dWZmZXIgaXRzIHBhc3NpbmcgaW4uCi0gKgkJaW9jdGwgcmV0dXJucyBsZW5ndGggb2Ygc3luY19m ZW5jZV9kYXRhIHJldHVybmVkIHRvIHVzZXJzcGFjZQotICoJCWluY2x1ZGluZyBwdF9pbmZvLgot ICogQG5hbWU6CW5hbWUgb2YgZmVuY2UKLSAqIEBzdGF0dXM6CXN0YXR1cyBvZiBmZW5jZS4gMTog c2lnbmFsZWQgMDphY3RpdmUgPDA6ZXJyb3IKLSAqIEBwdF9pbmZvOglhIHN5bmNfcHRfaW5mbyBz dHJ1Y3QgZm9yIGV2ZXJ5IHN5bmNfcHQgaW4gdGhlIGZlbmNlCi0gKi8KLXN0cnVjdCBzeW5jX2Zl bmNlX2luZm9fZGF0YSB7Ci0JX191MzIJbGVuOwotCWNoYXIJbmFtZVszMl07Ci0JX19zMzIJc3Rh dHVzOwotCi0JX191OAlwdF9pbmZvWzBdOwotfTsKLQotI2RlZmluZSBTWU5DX0lPQ19NQUdJQwkJ Jz4nCi0KLS8qKgotICogRE9DOiBTWU5DX0lPQ19XQUlUIC0gd2FpdCBmb3IgYSBmZW5jZSB0byBz aWduYWwKLSAqCi0gKiBwYXNzIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiAgV2FpdHMgaW5kZWZp bml0ZWx5IHRpbWVvdXQgPCAwLgotICovCi0jZGVmaW5lIFNZTkNfSU9DX1dBSVQJCV9JT1coU1lO Q19JT0NfTUFHSUMsIDAsIF9fczMyKQotCi0vKioKLSAqIERPQzogU1lOQ19JT0NfTUVSR0UgLSBt ZXJnZSB0d28gZmVuY2VzCi0gKgotICogVGFrZXMgYSBzdHJ1Y3Qgc3luY19tZXJnZV9kYXRhLiAg Q3JlYXRlcyBhIG5ldyBmZW5jZSBjb250YWluaW5nIGNvcGllcyBvZgotICogdGhlIHN5bmNfcHRz IGluIGJvdGggdGhlIGNhbGxpbmcgZmQgYW5kIHN5bmNfbWVyZ2VfZGF0YS5mZDIuICBSZXR1cm5z IHRoZQotICogbmV3IGZlbmNlJ3MgZmQgaW4gc3luY19tZXJnZV9kYXRhLmZlbmNlCi0gKi8KLSNk ZWZpbmUgU1lOQ19JT0NfTUVSR0UJCV9JT1dSKFNZTkNfSU9DX01BR0lDLCAxLCBzdHJ1Y3Qgc3lu Y19tZXJnZV9kYXRhKQotCi0vKioKLSAqIERPQzogU1lOQ19JT0NfRkVOQ0VfSU5GTyAtIGdldCBk ZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBhIGZlbmNlCi0gKgotICogVGFrZXMgYSBzdHJ1Y3Qgc3lu Y19mZW5jZV9pbmZvX2RhdGEgd2l0aCBleHRyYSBzcGFjZSBhbGxvY2F0ZWQgZm9yIHB0X2luZm8u Ci0gKiBDYWxsZXIgc2hvdWxkIHdyaXRlIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgaW50byBsZW4u ICBPbiByZXR1cm4sIGxlbiBpcwotICogdXBkYXRlZCB0byByZWZsZWN0IHRoZSB0b3RhbCBzaXpl IG9mIHRoZSBzeW5jX2ZlbmNlX2luZm9fZGF0YSBpbmNsdWRpbmcKLSAqIHB0X2luZm8uCi0gKgot ICogcHRfaW5mbyBpcyBhIGJ1ZmZlciBjb250YWluaW5nIHN5bmNfcHRfaW5mb3MgZm9yIGV2ZXJ5 IHN5bmNfcHQgaW4gdGhlIGZlbmNlLgotICogVG8gaXRlcmF0ZSBvdmVyIHRoZSBzeW5jX3B0X2lu Zm9zLCB1c2UgdGhlIHN5bmNfcHRfaW5mby5sZW4gZmllbGQuCi0gKi8KLSNkZWZpbmUgU1lOQ19J T0NfRkVOQ0VfSU5GTwlfSU9XUihTWU5DX0lPQ19NQUdJQywgMixcCi0Jc3RydWN0IHN5bmNfZmVu Y2VfaW5mb19kYXRhKQotCi0jZW5kaWYgLyogX1VBUElfTElOVVhfU1lOQ19IICovCmRpZmYgLS1n aXQgYS9pbmNsdWRlL3VhcGkvS2J1aWxkIGIvaW5jbHVkZS91YXBpL0tidWlsZAppbmRleCAyNDVh YTZlLi43YzQxNWQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvS2J1aWxkCisrKyBiL2luY2x1 ZGUvdWFwaS9LYnVpbGQKQEAgLTEzLDMgKzEzLDQgQEAgaGVhZGVyLXkgKz0gZHJtLwogaGVhZGVy LXkgKz0geGVuLwogaGVhZGVyLXkgKz0gc2NzaS8KIGhlYWRlci15ICs9IG1pc2MvCitoZWFkZXIt eSArPSBzeW5jLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL3N5bmMvS2J1aWxkIGIvaW5jbHVk ZS91YXBpL3N5bmMvS2J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3 MTZmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3VhcGkvc3luYy9LYnVpbGQKQEAgLTAs MCArMSwzIEBACisjIHN5bmMgSGVhZGVyIGV4cG9ydCBsaXN0CitoZWFkZXIteSArPSBzd19zeW5j LmgKK2hlYWRlci15ICs9IHN5bmMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL3N5bmMvc3df c3luYy5oIGIvaW5jbHVkZS91YXBpL3N5bmMvc3dfc3luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjliNWQ0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3VhcGkv c3luYy9zd19zeW5jLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx MiBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5 IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9VQVBJX0xJTlVY X1NXX1NZTkNfSAorI2RlZmluZSBfVUFQSV9MSU5VWF9TV19TWU5DX0gKKworI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+CisKK3N0cnVjdCBzd19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRhIHsKKwlfX3Uz Mgl2YWx1ZTsKKwljaGFyCW5hbWVbMzJdOworCV9fczMyCWZlbmNlOyAvKiBmZCBvZiBuZXcgZmVu Y2UgKi8KK307CisKKyNkZWZpbmUgU1dfU1lOQ19JT0NfTUFHSUMJJ1cnCisKKyNkZWZpbmUgU1df U1lOQ19JT0NfQ1JFQVRFX0ZFTkNFCV9JT1dSKFNXX1NZTkNfSU9DX01BR0lDLCAwLFwKKwkJc3Ry dWN0IHN3X3N5bmNfY3JlYXRlX2ZlbmNlX2RhdGEpCisjZGVmaW5lIFNXX1NZTkNfSU9DX0lOQwkJ CV9JT1coU1dfU1lOQ19JT0NfTUFHSUMsIDEsIF9fdTMyKQorCisjZW5kaWYgLyogX1VBUElfTElO VVhfU1dfU1lOQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvc3luYy9zeW5jLmggYi9p bmNsdWRlL3VhcGkvc3luYy9zeW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZTk2NGM3NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9zeW5jL3N5bmMuaApA QCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX1VBUElfTElOVVhf U1lOQ19ICisjZGVmaW5lIF9VQVBJX0xJTlVYX1NZTkNfSAorCisjaW5jbHVkZSA8bGludXgvaW9j dGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKioKKyAqIHN0cnVjdCBzeW5jX21l cmdlX2RhdGEgLSBkYXRhIHBhc3NlZCB0byBtZXJnZSBpb2N0bAorICogQGZkMjoJZmlsZSBkZXNj cmlwdG9yIG9mIHNlY29uZCBmZW5jZQorICogQG5hbWU6CW5hbWUgb2YgbmV3IGZlbmNlCisgKiBA ZmVuY2U6CXJldHVybnMgdGhlIGZkIG9mIHRoZSBuZXcgZmVuY2UgdG8gdXNlcnNwYWNlCisgKi8K K3N0cnVjdCBzeW5jX21lcmdlX2RhdGEgeworCV9fczMyCWZkMjsgLyogZmQgb2Ygc2Vjb25kIGZl bmNlICovCisJY2hhcgluYW1lWzMyXTsgLyogbmFtZSBvZiBuZXcgZmVuY2UgKi8KKwlfX3MzMglm ZW5jZTsgLyogZmQgb24gbmV3bHkgY3JlYXRlZCBmZW5jZSAqLworfTsKKworLyoqCisgKiBzdHJ1 Y3Qgc3luY19wdF9pbmZvIC0gZGV0YWlsZWQgc3luY19wdCBpbmZvcm1hdGlvbgorICogQGxlbjoJ CWxlbmd0aCBvZiBzeW5jX3B0X2luZm8gaW5jbHVkaW5nIGFueSBkcml2ZXJfZGF0YQorICogQG9i al9uYW1lOgkJbmFtZSBvZiBwYXJlbnQgc3luY190aW1lbGluZQorICogQGRyaXZlcl9uYW1lOglu YW1lIG9mIGRyaXZlciBpbXBsZW1lbnRpbmcgdGhlIHBhcmVudAorICogQHN0YXR1czoJCXN0YXR1 cyBvZiB0aGUgc3luY19wdCAwOmFjdGl2ZSAxOnNpZ25hbGVkIDwwOmVycm9yCisgKiBAdGltZXN0 YW1wX25zOgl0aW1lc3RhbXAgb2Ygc3RhdHVzIGNoYW5nZSBpbiBuYW5vc2Vjb25kcworICogQGRy aXZlcl9kYXRhOglhbnkgZHJpdmVyIGRlcGVuZGVudCBkYXRhCisgKi8KK3N0cnVjdCBzeW5jX3B0 X2luZm8geworCV9fdTMyCWxlbjsKKwljaGFyCW9ial9uYW1lWzMyXTsKKwljaGFyCWRyaXZlcl9u YW1lWzMyXTsKKwlfX3MzMglzdGF0dXM7CisJX191NjQJdGltZXN0YW1wX25zOworCisJX191OAlk cml2ZXJfZGF0YVswXTsKK307CisKKy8qKgorICogc3RydWN0IHN5bmNfZmVuY2VfaW5mb19kYXRh IC0gZGF0YSByZXR1cm5lZCBmcm9tIGZlbmNlIGluZm8gaW9jdGwKKyAqIEBsZW46CWlvY3RsIGNh bGxlciB3cml0ZXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpdHMgcGFzc2luZyBpbi4KKyAqCQlp b2N0bCByZXR1cm5zIGxlbmd0aCBvZiBzeW5jX2ZlbmNlX2RhdGEgcmV0dXJuZWQgdG8gdXNlcnNw YWNlCisgKgkJaW5jbHVkaW5nIHB0X2luZm8uCisgKiBAbmFtZToJbmFtZSBvZiBmZW5jZQorICog QHN0YXR1czoJc3RhdHVzIG9mIGZlbmNlLiAxOiBzaWduYWxlZCAwOmFjdGl2ZSA8MDplcnJvcgor ICogQHB0X2luZm86CWEgc3luY19wdF9pbmZvIHN0cnVjdCBmb3IgZXZlcnkgc3luY19wdCBpbiB0 aGUgZmVuY2UKKyAqLworc3RydWN0IHN5bmNfZmVuY2VfaW5mb19kYXRhIHsKKwlfX3UzMglsZW47 CisJY2hhcgluYW1lWzMyXTsKKwlfX3MzMglzdGF0dXM7CisKKwlfX3U4CXB0X2luZm9bMF07Cit9 OworCisjZGVmaW5lIFNZTkNfSU9DX01BR0lDCQknPicKKworLyoqCisgKiBET0M6IFNZTkNfSU9D X1dBSVQgLSB3YWl0IGZvciBhIGZlbmNlIHRvIHNpZ25hbAorICoKKyAqIHBhc3MgdGltZW91dCBp biBtaWxsaXNlY29uZHMuICBXYWl0cyBpbmRlZmluaXRlbHkgdGltZW91dCA8IDAuCisgKi8KKyNk ZWZpbmUgU1lOQ19JT0NfV0FJVAkJX0lPVyhTWU5DX0lPQ19NQUdJQywgMCwgX19zMzIpCisKKy8q KgorICogRE9DOiBTWU5DX0lPQ19NRVJHRSAtIG1lcmdlIHR3byBmZW5jZXMKKyAqCisgKiBUYWtl cyBhIHN0cnVjdCBzeW5jX21lcmdlX2RhdGEuICBDcmVhdGVzIGEgbmV3IGZlbmNlIGNvbnRhaW5p bmcgY29waWVzIG9mCisgKiB0aGUgc3luY19wdHMgaW4gYm90aCB0aGUgY2FsbGluZyBmZCBhbmQg c3luY19tZXJnZV9kYXRhLmZkMi4gIFJldHVybnMgdGhlCisgKiBuZXcgZmVuY2UncyBmZCBpbiBz eW5jX21lcmdlX2RhdGEuZmVuY2UKKyAqLworI2RlZmluZSBTWU5DX0lPQ19NRVJHRQkJX0lPV1Io U1lOQ19JT0NfTUFHSUMsIDEsIHN0cnVjdCBzeW5jX21lcmdlX2RhdGEpCisKKy8qKgorICogRE9D OiBTWU5DX0lPQ19GRU5DRV9JTkZPIC0gZ2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGEgZmVu Y2UKKyAqCisgKiBUYWtlcyBhIHN0cnVjdCBzeW5jX2ZlbmNlX2luZm9fZGF0YSB3aXRoIGV4dHJh IHNwYWNlIGFsbG9jYXRlZCBmb3IgcHRfaW5mby4KKyAqIENhbGxlciBzaG91bGQgd3JpdGUgdGhl IHNpemUgb2YgdGhlIGJ1ZmZlciBpbnRvIGxlbi4gIE9uIHJldHVybiwgbGVuIGlzCisgKiB1cGRh dGVkIHRvIHJlZmxlY3QgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHN5bmNfZmVuY2VfaW5mb19kYXRh IGluY2x1ZGluZworICogcHRfaW5mby4KKyAqCisgKiBwdF9pbmZvIGlzIGEgYnVmZmVyIGNvbnRh aW5pbmcgc3luY19wdF9pbmZvcyBmb3IgZXZlcnkgc3luY19wdCBpbiB0aGUgZmVuY2UuCisgKiBU byBpdGVyYXRlIG92ZXIgdGhlIHN5bmNfcHRfaW5mb3MsIHVzZSB0aGUgc3luY19wdF9pbmZvLmxl biBmaWVsZC4KKyAqLworI2RlZmluZSBTWU5DX0lPQ19GRU5DRV9JTkZPCV9JT1dSKFNZTkNfSU9D X01BR0lDLCAyLFwKKwlzdHJ1Y3Qgc3luY19mZW5jZV9pbmZvX2RhdGEpCisKKyNlbmRpZiAvKiBf VUFQSV9MSU5VWF9TWU5DX0ggKi8KLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=