From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id DB3C06E3C7 for ; Tue, 10 Apr 2018 10:48:36 +0000 (UTC) From: Katarzyna Dec Date: Tue, 10 Apr 2018 12:48:25 +0200 Message-Id: <20180410104833.24519-2-katarzyna.dec@intel.com> In-Reply-To: <20180409154229.678-1-lukasz.kalamarz@intel.com> References: <20180409154229.678-1-lukasz.kalamarz@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v4 1/4] lib: Move common gpgpu/media fill functions to gpu_fill library List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: R3BncHVfZmlsbCBhbmQgbWVkaWFfZmlsbCBsaWJyYXJpZXMgYXJlIHZlcnkgc2ltaWxhciBhbmQg bWFueQpmdW5jdGlvbnMgY2FuIGJlIHNoYXJlZC4gSSBoYXZlIGNyZWF0ZWQgbGlicmFyeSBncHVf ZmlsbCB3aXRoCmFsbCBmdW5jdGlvbnMgbmVlZGVkIGZvciBpbXBsZW1lbnRpbmcgZ3BncHVfZmls bCBhbmQgbWVkaWFfZmlsbAp0ZXN0cyBmb3IgYWxsIEdlbnMuIEZvciByZXZpZXdpbmcgYW5kIGRl YnVnZ2luZyBwdXJwb3NlcyB0aGlzIHBhdGNoCnNob3VsZCBiZSBvbmx5IG1vdmluZyBmdW5jdGlv bnMgZnJvbSBmZXcgbGlicmFyaWVzIHRvIG9uZSByZW1vdmluZwpmdW5jdGlvbnMgaWRlbnRpY2Fs IGZvciBib3RoIG1lZGlhIGFuZCBncGdwdS4KUGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgcmVxdWly ZWQgbW9yZSBjaGFuZ2VzOgogIFJlbW92aW5nIGdlbjdfZmlsbF9ncGdwdV9rZXJuZWwgZnVuY3Rp b24gdGhhdCBpcyBpZGVudGljYWwgdG8KZ2VuN19maWxsX21lZGlhX2tlcm5lbCBhbmQgaW50cm9k dWNlcyBjb25mbGljdCB3aXRoIG1vdmluZwpnZW5YX2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Is IHdoaWNoIGFyZSB0aGUgc2FtZSBmb3IgbWVkaWEgYW5kIGdwZ3B1LgogIEZ1bmN0aW9uIGdlbjhf ZmlsbF9tZWRpYV9rZXJuZWwgaXMgbm90IHJlbW92ZWQgaW4gdGhpcyBwYXRjaAooYWx0aG91Z2gg aXQgaXMgaWRlbnRpY2FsIHdpdGggZ2VuNyB2ZXJzaW9uKSwgYmVjYXVzZSB0aGlzIHBhdGNoCnNo b3VsZCBiZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGZ1bmN0aW9ucyBtb3ZlbWVudC4KICBnZW44X2Zp bGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Igd2FzIHVuaWZpZWQgZm9yIG1lZGlhIGFuZCBncGdwdQpi eSBhZGRpbmcga2VybmVsIGFuZCBpdHMgc2l6ZSBhcyBhIHBhcmFtZXRlciAodGhpcyBwYXJhbWV0 ZXJzCndlcmUgbWlzc2luZyBpbiBtZWRpYSBnZW44LCBnZW44bHAgYW5kIGdlbjkgZnVuY3Rpb25z KQogIGdlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Mgd2FzIHVuaWZpZWQsIHRoZSBvbmUgZm9y IGdwZ3B1IHdhcwpjb25maWd1cmVkIGxpa2UgaXQgd291bGQgYmUgdXNpbmcgaW5kaXJlY3Qgc3Rh dGUgKHdoaWxlIHdlIGFyZQp1c2luZyBDVVJCRSkuIEkgaGF2ZSBjaGVja2VkIHRoYXQgbWVkaWEg ZmlsbCB2ZXJzaW9uCihPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpKSB3b3JrcyBm aW5lIG9uIGdwZ3B1IGdlbjggYW5kIG5ld2VyLgoKdjI6IENoYW5nZWQgY29kZSBsYXlvdXQuIEdl blhfZmlsbF9tZWRpYV9rZXJuZWwgd2FzIGlkZW50aWNhbCB0bwpnZW5YX2ZpbGxfZ3BncHVfa2Vy bmVsIHNvIHRoaXMgZnVuY3Rpb24gd2FzIHVuaWZpZWQgdG8KZ2VuN19maWxsX2tlcm5lbC4gVGhl cmUgd2VyZSAyIHZlcnkgc2ltaWxhciBmdW5jdGlvbnMKZ2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRk cmVzcyBmb3IgbWVkaWEgYW5kIGdwZ3B1LCB3aGVyZSB0aGUgb25lCmZvciBncGdwdSB3YXMgY29u ZmlndXJlZCBsaWtlIGl0IHdvdWxkIGJlIHVzaW5nIGluZGlyZWN0IHN0YXRlCih3aGlsZSB3ZSBh cmUgdXNpbmcgQ1VSQkUpLiBJIGhhdmUgY2hlY2tlZCBpZiBtZWRpYSBmaWxsIHZlcnNpb24Kd29y a3MgZmluZSBpbiBncGdwdSB0ZXN0IG9uIEdlbjggYW5kIHVuaWZpZWQgdGhlbS4KCnYzOiBNYWRl IHBhdGNoIGVhc2llciBmb3IgcmV2aWV3aW5nIG1vdmluZyBjaGFuZ2VzIHVuaWZ5aW5nIGNvZGUg Zm9yCnZhcmlvdXMgZ2VucyAodGhhdCB3ZXJlIGluY2x1ZGVkIHYxKSB0byBvdGhlciBwYXRjaCwg bGVhdmluZyBvbmx5CnRoZSBtb3N0IGNyaXRpY2FsIGNvZGUgY2hhbmdlcy4KCnY0OiBBZGRlZCBj b3B5cmlnaHRzIGFuZCAjZGVmaW5lIHRvIGdwdV9maWxsLmgKClNpZ25lZC1vZmYtYnk6IEthdGFy enluYSBEZWMgPGthdGFyenluYS5kZWNAaW50ZWwuY29tPgpDYzogTHVrYXN6IEthbGFtYXJ6IDxs dWthc3oua2FsYW1hcnpAaW50ZWwuY29tPgpDYzogRGFuaWVsZSBDZXJhb2xvIFNwdXJpbyA8ZGFu aWVsZS5jZXJhb2xvc3B1cmlvQGludGVsLmNvbT4KLS0tCiBsaWIvTWFrZWZpbGUuc291cmNlcyAg ICB8ICAgMiArCiBsaWIvZ3BncHVfZmlsbC5jICAgICAgICB8IDU3MSArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYi9ncHVfZmlsbC5jICAgICAgICAgIHwgNzU4ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL2dwdV9maWxs LmggICAgICAgICAgfCAxNjcgKysrKysrKysrKysKIGxpYi9tZWRpYV9maWxsX2dlbjcuYyAgIHwg MjcxICstLS0tLS0tLS0tLS0tLS0tCiBsaWIvbWVkaWFfZmlsbF9nZW44LmMgICB8IDI5MCArLS0t LS0tLS0tLS0tLS0tLS0KIGxpYi9tZWRpYV9maWxsX2dlbjhscC5jIHwgMjg0ICstLS0tLS0tLS0t LS0tLS0tLQogbGliL21lZGlhX2ZpbGxfZ2VuOS5jICAgfCAyOTggKy0tLS0tLS0tLS0tLS0tLS0t LQogbGliL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDEgKwogOSBmaWxlcyBjaGFuZ2VkLCA5Mzcg aW5zZXJ0aW9ucygrKSwgMTcwNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv Z3B1X2ZpbGwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9ncHVfZmlsbC5oCgpkaWZmIC0tZ2l0 IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwppbmRleCAzZDM3 ZWYxZC4uNDVlNjVkZDcgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL2xp Yi9NYWtlZmlsZS5zb3VyY2VzCkBAIC02NCw2ICs2NCw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJ XAogCW1lZGlhX3NwaW4uYwkJXAogCWdwZ3B1X2ZpbGwuaAkJXAogCWdwZ3B1X2ZpbGwuYwkJXAor CWdwdV9maWxsLmgJCVwKKwlncHVfZmlsbC5jCQlcCiAJZ2VuN19tZWRpYS5oICAgICAgICAgICAg XAogCWdlbjhfbWVkaWEuaCAgICAgICAgICAgIFwKIAlyZW5kZXJjb3B5X2k5MTUuYwlcCmRpZmYg LS1naXQgYS9saWIvZ3BncHVfZmlsbC5jIGIvbGliL2dwZ3B1X2ZpbGwuYwppbmRleCA0ZDk4NjQz ZC4uZjI3NjVmZDYgMTAwNjQ0Ci0tLSBhL2xpYi9ncGdwdV9maWxsLmMKKysrIGIvbGliL2dwZ3B1 X2ZpbGwuYwpAQCAtMzAsMTAgKzMwLDkgQEAKIAogI2luY2x1ZGUgImludGVsX3JlZy5oIgogI2lu Y2x1ZGUgImRybXRlc3QuaCIKLSNpbmNsdWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgotI2luY2x1 ZGUgImdlbjdfbWVkaWEuaCIKLSNpbmNsdWRlICJnZW44X21lZGlhLmgiCisKICNpbmNsdWRlICJn cGdwdV9maWxsLmgiCisjaW5jbHVkZSAiZ3B1X2ZpbGwuaCIKIAogLyogc2hhZGVycy9ncGdwdS9n cGdwdV9maWxsLmd4YSAqLwogc3RhdGljIGNvbnN0IHVpbnQzMl90IGdlbjdfZ3BncHVfa2VybmVs W11bNF0gPSB7CkBAIC03NSw1NzIgKzc0LDYgQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGdlbjlf Z3BncHVfa2VybmVsW11bNF0gPSB7CiAJeyAweDA3ODAwMDMxLCAweDIwMDAwYTQwLCAweDA2MDAw ZTAwLCAweDgyMDAwMDEwIH0sCiB9OwogCi1zdGF0aWMgdWludDMyX3QKLWJhdGNoX3VzZWQoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlyZXR1cm4gYmF0Y2gtPnB0ciAtIGJh dGNoLT5idWZmZXI7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfYWxpZ24oc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zm c2V0ID0gYmF0Y2hfdXNlZChiYXRjaCk7Ci0Jb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBhbGlnbik7 Ci0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIgKyBvZmZzZXQ7Ci0JcmV0dXJuIG9mZnNldDsK LX0KLQotc3RhdGljIHZvaWQgKgotYmF0Y2hfYWxsb2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zm c2V0ID0gYmF0Y2hfYWxpZ24oYmF0Y2gsIGFsaWduKTsKLQliYXRjaC0+cHRyICs9IHNpemU7Ci0J cmV0dXJuIG1lbXNldChiYXRjaC0+YnVmZmVyICsgb2Zmc2V0LCAwLCBzaXplKTsKLX0KLQotc3Rh dGljIHVpbnQzMl90Ci1iYXRjaF9vZmZzZXQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwgdm9pZCAqcHRyKQotewotCXJldHVybiAodWludDhfdCAqKXB0ciAtIGJhdGNoLT5idWZmZXI7 Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfY29weShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLCBjb25zdCB2b2lkICpwdHIsIHVpbnQzMl90IHNpemUsCi0JICAgdWludDMyX3Qg YWxpZ24pCi17Ci0JcmV0dXJuIGJhdGNoX29mZnNldChiYXRjaCwgbWVtY3B5KGJhdGNoX2FsbG9j KGJhdGNoLCBzaXplLCBhbGlnbiksIHB0ciwgc2l6ZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ2Vu N19yZW5kZXJfZmx1c2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qg YmF0Y2hfZW5kKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fc3ViZGF0YShi YXRjaC0+Ym8sIDAsIDQwOTYsIGJhdGNoLT5idWZmZXIpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0 ID0gZHJtX2ludGVsX2JvX21yYl9leGVjKGJhdGNoLT5ibywgYmF0Y2hfZW5kLAotCQkJCQlOVUxM LCAwLCAwLCAwKTsKLQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKLX0KLQotc3RhdGljIHVpbnQzMl90 Ci1nZW43X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwgdWludDhfdCBjb2xvcikKLXsKLQl1aW50OF90ICpjdXJiZV9idWZmZXI7Ci0JdWludDMy X3Qgb2Zmc2V0OwotCi0JY3VyYmVfYnVmZmVyID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZih1 aW50MzJfdCkgKiA4LCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBjdXJiZV9i dWZmZXIpOwotCSpjdXJiZV9idWZmZXIgPSBjb2xvcjsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0K LXN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwKLQkJCXN0cnVjdCBpZ3RfYnVmICpidWYsCi0JCQl1aW50MzJfdCBm b3JtYXQsCi0JCQlpbnQgaXNfZHN0KQotewotCXN0cnVjdCBnZW43X3N1cmZhY2Vfc3RhdGUgKnNz OwotCXVpbnQzMl90IHdyaXRlX2RvbWFpbiwgcmVhZF9kb21haW4sIG9mZnNldDsKLQlpbnQgcmV0 OwotCi0JaWYgKGlzX2RzdCkgewotCQl3cml0ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVf R0VNX0RPTUFJTl9SRU5ERVI7Ci0JfSBlbHNlIHsKLQkJd3JpdGVfZG9tYWluID0gMDsKLQkJcmVh ZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUjsKLQl9Ci0KLQlzcyA9IGJhdGNoX2Fs bG9jKGJhdGNoLCBzaXplb2YoKnNzKSwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRj aCwgc3MpOwotCi0Jc3MtPnNzMC5zdXJmYWNlX3R5cGUgPSBHRU43X1NVUkZBQ0VfMkQ7Ci0Jc3Mt PnNzMC5zdXJmYWNlX2Zvcm1hdCA9IGZvcm1hdDsKLQlzcy0+c3MwLnJlbmRlcl9jYWNoZV9yZWFk X3dyaXRlID0gMTsKLQotCWlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19YKQotCQlzcy0+ c3MwLnRpbGVkX21vZGUgPSAyOwotCWVsc2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5H X1kpCi0JCXNzLT5zczAudGlsZWRfbW9kZSA9IDM7Ci0KLQlzcy0+c3MxLmJhc2VfYWRkciA9IGJ1 Zi0+Ym8tPm9mZnNldDsKLQlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8s Ci0JCQkJYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcykgKyA0LAotCQkJCWJ1Zi0+Ym8sIDAsCi0JCQkJ cmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbik7Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci0KLQlz cy0+c3MyLmhlaWdodCA9IGlndF9idWZfaGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGgg ID0gaWd0X2J1Zl93aWR0aChidWYpIC0gMTsKLQotCXNzLT5zczMucGl0Y2ggID0gYnVmLT5zdHJp ZGUgLSAxOwotCi0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9yID0gNDsKLQlzcy0+c3M3 LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2cgPSA1OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxl Y3RfYiA9IDY7Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9hID0gNzsKLQotCXJldHVy biBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXN0cnVjdCBpZ3RfYnVmICpidWYs Ci0JCQl1aW50MzJfdCBmb3JtYXQsCi0JCQlpbnQgaXNfZHN0KQotewotCXN0cnVjdCBnZW44X3N1 cmZhY2Vfc3RhdGUgKnNzOwotCXVpbnQzMl90IHdyaXRlX2RvbWFpbiwgcmVhZF9kb21haW4sIG9m ZnNldDsKLQlpbnQgcmV0OwotCi0JaWYgKGlzX2RzdCkgewotCQl3cml0ZV9kb21haW4gPSByZWFk X2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Ci0JfSBlbHNlIHsKLQkJd3JpdGVfZG9t YWluID0gMDsKLQkJcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUjsKLQl9Ci0K LQlzcyA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNzKSwgNjQpOwotCW9mZnNldCA9IGJh dGNoX29mZnNldChiYXRjaCwgc3MpOwotCi0Jc3MtPnNzMC5zdXJmYWNlX3R5cGUgPSBHRU44X1NV UkZBQ0VfMkQ7Ci0Jc3MtPnNzMC5zdXJmYWNlX2Zvcm1hdCA9IGZvcm1hdDsKLQlzcy0+c3MwLnJl bmRlcl9jYWNoZV9yZWFkX3dyaXRlID0gMTsKLQlzcy0+c3MwLnZlcnRpY2FsX2FsaWdubWVudCA9 IDE7IC8qIGFsaWduIDQgKi8KLQlzcy0+c3MwLmhvcml6b250YWxfYWxpZ25tZW50ID0gMTsgLyog YWxpZ24gNCAqLwotCi0JaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1gpCi0JCXNzLT5z czAudGlsZWRfbW9kZSA9IDI7Ci0JZWxzZSBpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdf WSkKLQkJc3MtPnNzMC50aWxlZF9tb2RlID0gMzsKLQotCXNzLT5zczguYmFzZV9hZGRyID0gYnVm LT5iby0+b2Zmc2V0OwotCi0JcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJv LAotCQkJCWJhdGNoX29mZnNldChiYXRjaCwgc3MpICsgOCAqIDQsCi0JCQkJYnVmLT5ibywgMCwK LQkJCQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluKTsKLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7 Ci0KLQlzcy0+c3MyLmhlaWdodCA9IGlndF9idWZfaGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIu d2lkdGggID0gaWd0X2J1Zl93aWR0aChidWYpIC0gMTsKLQlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+ c3RyaWRlIC0gMTsKLQotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfciA9IDQ7Ci0Jc3Mt PnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9nID0gNTsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxf c2VsZWN0X2IgPSA2OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYSA9IDc7Ci0KLQly ZXR1cm4gb2Zmc2V0OwotCi19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxsX2JpbmRpbmdf dGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXN0cnVjdCBpZ3RfYnVm ICpkc3QpCi17Ci0JdWludDMyX3QgKmJpbmRpbmdfdGFibGUsIG9mZnNldDsKLQotCWJpbmRpbmdf dGFibGUgPSBiYXRjaF9hbGxvYyhiYXRjaCwgMzIsIDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZz ZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUpOwotCi0JYmluZGluZ190YWJsZVswXSA9IGdlbjdfZmls bF9zdXJmYWNlX3N0YXRlKGJhdGNoLCBkc3QsIEdFTjdfU1VSRkFDRUZPUk1BVF9SOF9VTk9STSwg MSk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9i aW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3Qg aWd0X2J1ZiAqZHN0KQotewotCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxlLCBvZmZzZXQ7Ci0KLQli aW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIDMyLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0 Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsKLQotCWJpbmRpbmdfdGFibGVbMF0gPSBn ZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShiYXRjaCwgZHN0LCBHRU44X1NVUkZBQ0VGT1JNQVRfUjhf VU5PUk0sIDEpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW43 X2ZpbGxfZ3BncHVfa2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCWNv bnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAotCQlzaXplX3Qgc2l6ZSkKLXsKLQl1aW50MzJfdCBv ZmZzZXQ7Ci0KLQlvZmZzZXQgPSBiYXRjaF9jb3B5KGJhdGNoLCBrZXJuZWwsIHNpemUsIDY0KTsK LQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxsX2ludGVy ZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdCBp Z3RfYnVmICpkc3QsCi0JCQkgICAgICAgY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sIHNpemVf dCBzaXplKQotewotCXN0cnVjdCBnZW43X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEgKmlkZDsK LQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3QgYmluZGluZ190YWJsZV9vZmZzZXQsIGtlcm5l bF9vZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlX29mZnNldCA9IGdlbjdfZmlsbF9iaW5kaW5nX3Rh YmxlKGJhdGNoLCBkc3QpOwotCWtlcm5lbF9vZmZzZXQgPSBnZW43X2ZpbGxfZ3BncHVfa2VybmVs KGJhdGNoLCBrZXJuZWwsIHNpemUpOwotCi0JaWRkID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVv ZigqaWRkKSwgNjQpOwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgaWRkKTsKLQotCWlk ZC0+ZGVzYzAua2VybmVsX3N0YXJ0X3BvaW50ZXIgPSAoa2VybmVsX29mZnNldCA+PiA2KTsKLQot CWlkZC0+ZGVzYzEuc2luZ2xlX3Byb2dyYW1fZmxvdyA9IDE7Ci0JaWRkLT5kZXNjMS5mbG9hdGlu Z19wb2ludF9tb2RlID0gR0VON19GTE9BVElOR19QT0lOVF9JRUVFXzc1NDsKLQotCWlkZC0+ZGVz YzIuc2FtcGxlcl9jb3VudCA9IDA7ICAgICAgLyogMCBzYW1wbGVycyB1c2VkICovCi0JaWRkLT5k ZXNjMi5zYW1wbGVyX3N0YXRlX3BvaW50ZXIgPSAwOwotCi0JaWRkLT5kZXNjMy5iaW5kaW5nX3Rh YmxlX2VudHJ5X2NvdW50ID0gMDsKLQlpZGQtPmRlc2MzLmJpbmRpbmdfdGFibGVfcG9pbnRlciA9 IChiaW5kaW5nX3RhYmxlX29mZnNldCA+PiA1KTsKLQotCWlkZC0+ZGVzYzQuY29uc3RhbnRfdXJi X2VudHJ5X3JlYWRfb2Zmc2V0ID0gMDsKLQlpZGQtPmRlc2M0LmNvbnN0YW50X3VyYl9lbnRyeV9y ZWFkX2xlbmd0aCA9IDE7IC8qIGdyZiAxICovCi0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0 aWMgdWludDMyX3QKLWdlbjhfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LAotCQkJICAgICAgIGNvbnN0 IHVpbnQzMl90IGtlcm5lbFtdWzRdLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgZ2VuOF9pbnRl cmZhY2VfZGVzY3JpcHRvcl9kYXRhICppZGQ7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90 IGJpbmRpbmdfdGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zmc2V0OwotCi0JYmluZGluZ190YWJsZV9v ZmZzZXQgPSBnZW44X2ZpbGxfYmluZGluZ190YWJsZShiYXRjaCwgZHN0KTsKLQlrZXJuZWxfb2Zm c2V0ID0gZ2VuN19maWxsX2dwZ3B1X2tlcm5lbChiYXRjaCwga2VybmVsLCBzaXplKTsKLQotCWlk ZCA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKmlkZCksIDY0KTsKLQlvZmZzZXQgPSBiYXRj aF9vZmZzZXQoYmF0Y2gsIGlkZCk7Ci0KLQlpZGQtPmRlc2MwLmtlcm5lbF9zdGFydF9wb2ludGVy ID0gKGtlcm5lbF9vZmZzZXQgPj4gNik7Ci0KLQlpZGQtPmRlc2MyLnNpbmdsZV9wcm9ncmFtX2Zs b3cgPSAxOwotCWlkZC0+ZGVzYzIuZmxvYXRpbmdfcG9pbnRfbW9kZSA9IEdFTjhfRkxPQVRJTkdf UE9JTlRfSUVFRV83NTQ7Ci0KLQlpZGQtPmRlc2MzLnNhbXBsZXJfY291bnQgPSAwOyAgICAgIC8q IDAgc2FtcGxlcnMgdXNlZCAqLwotCWlkZC0+ZGVzYzMuc2FtcGxlcl9zdGF0ZV9wb2ludGVyID0g MDsKLQotCWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDA7Ci0JaWRkLT5k ZXNjNC5iaW5kaW5nX3RhYmxlX3BvaW50ZXIgPSAoYmluZGluZ190YWJsZV9vZmZzZXQgPj4gNSk7 Ci0KLQlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX29mZnNldCA9IDA7Ci0JaWRk LT5kZXNjNS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9sZW5ndGggPSAxOyAvKiBncmYgMSAqLwot Ci0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9zdGF0ZV9iYXNl X2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0go R0VON19TVEFURV9CQVNFX0FERFJFU1MgfCAoMTAgLSAyKSk7Ci0KLQkvKiBnZW5lcmFsICovCi0J T1VUX0JBVENIKDApOwotCi0JLyogc3VyZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5 MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkv KiBkeW5hbWljICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RS VUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGluZGlyZWN0ICovCi0JT1VU X0JBVENIKDApOwotCi0JLyogaW5zdHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJ OTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0J LyogZ2VuZXJhbC9keW5hbWljL2luZGlyZWN0L2luc3RydWN0aW9uIGFjY2VzcyBCb3VuZCAqLwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotfQotCi1z dGF0aWMgdm9pZAotZ2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU44X1NUQVRFX0JBU0VfQUREUkVTUyB8 ICgxNiAtIDIpKTsKLQotCS8qIGdlbmVyYWwgKi8KLQlPVVRfQkFUQ0goMCB8ICgweDc4IDw8IDQp IHwgKDAgPDwgMSkgfCAgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0JT1VUX0JBVENIKDApOwotCi0J Lyogc3RhdGVsZXNzIGRhdGEgcG9ydCAqLwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01P RElGWSk7Ci0KLQkvKiBzdXJmYWNlICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1f RE9NQUlOX1NBTVBMRVIsIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogZHluYW1pYyAq LwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgfCBJOTE1X0dF TV9ET01BSU5fSU5TVFJVQ1RJT04sCi0JCSAgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkv KiBpbmRpcmVjdCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCApOwotCi0JLyogaW5z dHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJV Q1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogZ2VuZXJhbCBzdGF0ZSBidWZm ZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7Ci0JLyogZHluYW1pYyBzdGF0 ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7Ci0JLyogaW5kaXJlY3Qg b2JqZWN0IGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsKLQkvKiBp bnRydWN0aW9uIGJ1ZmZlciBzaXplLCBtdXN0IHNldCBtb2RpZnkgZW5hYmxlIGJpdCwgb3RoZXJ3 aXNlIGl0IG1heSByZXN1bHQgaW4gR1BVIGhhbmcgKi8KLQlPVVRfQkFUQ0goMSA8PCAxMiB8IDEp OwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOV9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU44X1NUQVRFX0JBU0Vf QUREUkVTUyB8ICgxOSAtIDIpKTsKLQotCS8qIGdlbmVyYWwgKi8KLQlPVVRfQkFUQ0goMCB8IEJB U0VfQUREUkVTU19NT0RJRlkpOwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIHN0YXRlbGVzcyBkYXRh IHBvcnQgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogc3Vy ZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAw LCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGR5bmFtaWMgKi8KLQlPVVRfUkVMT0MoYmF0 Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSIHwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNU SU9OLAotCQkwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGluZGlyZWN0ICovCi0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCS8qIGluc3RydWN0aW9uICovCi0JT1VUX1JF TE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJF U1NfTU9ESUZZKTsKLQotCS8qIGdlbmVyYWwgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFU Q0goMHhmZmZmZjAwMCB8IDEpOwotCS8qIGR5bmFtaWMgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlP VVRfQkFUQ0goMSA8PCAxMiB8IDEpOwotCS8qIGluZGlyZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAq LwotCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7Ci0JLyogaW50cnVjdGlvbiBidWZmZXIgc2l6 ZSwgbXVzdCBzZXQgbW9kaWZ5IGVuYWJsZSBiaXQsIG90aGVyd2lzZSBpdCBtYXkgcmVzdWx0IGlu IEdQVSBoYW5nICovCi0JT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsKLQotCS8qIEJpbmRsZXNzIHN1 cmZhY2Ugc3RhdGUgYmFzZSBhZGRyZXNzICovCi0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1Nf TU9ESUZZKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDB4ZmZmZmYwMDApOwotfQotCi1z dGF0aWMgdm9pZAotZ2VuN19lbWl0X3ZmZV9zdGF0ZV9ncGdwdShzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU43X01FRElBX1ZGRV9TVEFURSB8ICg4IC0g MikpOwotCi0JLyogc2NyYXRjaCBidWZmZXIgKi8KLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBudW1i ZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVzICovCi0JT1VUX0JBVENIKDEgPDwgMTYgfCAvKiBt YXggbnVtIG9mIHRocmVhZHMgKi8KLQkJICAwIDw8IDggfCAvKiBudW0gb2YgVVJCIGVudHJ5ICov Ci0JCSAgMSA8PCAyKTsgLyogR1BHUFUgbW9kZSAqLwotCi0JT1VUX0JBVENIKDApOwotCi0JLyog dXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICovCi0JT1VUX0JBVENIKDAgPDwgMTYgfCAJLyog VVJCIGVudHJ5IHNpemUgaW4gMjU2IGJpdHMgdW5pdCAqLwotCQkgIDEpOwkJLyogQ1VSQkUgZW50 cnkgc2l6ZSBpbiAyNTYgYml0cyB1bml0ICovCi0KLQkvKiBzY29yZWJvYXJkICovCi0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1nZW44X2VtaXRfdmZlX3N0YXRlX2dwZ3B1KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gpCi17Ci0JT1VUX0JBVENIKEdFTjhfTUVESUFfVkZFX1NUQVRFIHwgKDkgLSAyKSk7Ci0KLQkv KiBzY3JhdGNoIGJ1ZmZlciAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQkv KiBudW1iZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVzICovCi0JT1VUX0JBVENIKDEgPDwgMTYg fCAxIDw8IDgpOwotCi0JT1VUX0JBVENIKDApOwotCi0JLyogdXJiIGVudHJ5IHNpemUgJiBjdXJi ZSBzaXplICovCi0JT1VUX0JBVENIKDAgPDwgMTYgfCAxKTsKLQotCS8qIHNjb3JlYm9hcmQgKi8K LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLX0KLQotc3Rh dGljIHZvaWQKLWdlbjdfZW1pdF9jdXJiZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsIHVpbnQzMl90IGN1cmJlX2J1ZmZlcikKLXsKLQlPVVRfQkFUQ0goR0VON19NRURJQV9D VVJCRV9MT0FEIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCS8qIGN1cmJlIHRvdGFsIGRh dGEgbGVuZ3RoICovCi0JT1VUX0JBVENIKDY0KTsKLQkvKiBjdXJiZSBkYXRhIHN0YXJ0IGFkZHJl c3MsIGlzIHJlbGF0aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFU Q0goY3VyYmVfYnVmZmVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9pbnRlcmZhY2Vf ZGVzY3JpcHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90 IGludGVyZmFjZV9kZXNjcmlwdG9yKQotewotCU9VVF9CQVRDSChHRU43X01FRElBX0lOVEVSRkFD RV9ERVNDUklQVE9SX0xPQUQgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogaW50ZXJm YWNlIGRlc2NyaXB0b3IgZGF0YSBsZW5ndGggKi8KLQlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVjdCBn ZW43X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEpKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRv ciBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCi0J T1VUX0JBVENIKGludGVyZmFjZV9kZXNjcmlwdG9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhf ZW1pdF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsIHVpbnQzMl90IGludGVyZmFjZV9kZXNjcmlwdG9yKQotewotCU9VVF9CQVRDSChHRU44 X01FRElBX0lOVEVSRkFDRV9ERVNDUklQVE9SX0xPQUQgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0go MCk7Ci0JLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgZGF0YSBsZW5ndGggKi8KLQlPVVRfQkFUQ0go c2l6ZW9mKHN0cnVjdCBnZW44X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEpKTsKLQkvKiBpbnRl cmZhY2UgZGVzY3JpcHRvciBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFz ZSBhZGRyZXNzICovCi0JT1VUX0JBVENIKGludGVyZmFjZV9kZXNjcmlwdG9yKTsKLX0KLQotc3Rh dGljIHZvaWQKLWdlbjdfZW1pdF9ncGdwdV93YWxrKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCi0JCSAgICAgdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKLQkJICAgICB1bnNpZ25lZCB3 aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotewotCXVpbnQzMl90IHhfZGltLCB5X2RpbSwgdG1wLCBy aWdodF9tYXNrOwotCi0JLyoKLQkgKiBTaW1wbHkgZG8gU0lNRDE2IGJhc2VkIGRpc3BhdGNoLCBz byBldmVyeSB0aHJlYWQgdXNlcwotCSAqIFNJTUQxNiBjaGFubmVscy4KLQkgKgotCSAqIERlZmlu ZSBvdXIgb3duIHRocmVhZCBncm91cCBzaXplLCBlLmcgMTZ4MSBmb3IgZXZlcnkgZ3JvdXAsIHRo ZW4KLQkgKiB3aWxsIGhhdmUgMSB0aHJlYWQgZWFjaCBncm91cCBpbiBTSU1EMTYgZGlzcGF0Y2gu IFNvIHRocmVhZAotCSAqIHdpZHRoL2hlaWdodC9kZXB0aCBhcmUgYWxsIDEuCi0JICoKLQkgKiBU aGVuIHRocmVhZCBncm91cCBYID0gd2lkdGggLyAxNiAoYWxpZ25lZCB0byAxNikKLQkgKiB0aHJl YWQgZ3JvdXAgWSA9IGhlaWdodDsKLQkgKi8KLQl4X2RpbSA9ICh3aWR0aCArIDE1KSAvIDE2Owot CXlfZGltID0gaGVpZ2h0OwotCi0JdG1wID0gd2lkdGggJiAxNTsKLQlpZiAodG1wID09IDApCi0J CXJpZ2h0X21hc2sgPSAoMSA8PCAxNikgLSAxOwotCWVsc2UKLQkJcmlnaHRfbWFzayA9ICgxIDw8 IHRtcCkgLSAxOwotCi0JT1VUX0JBVENIKEdFTjdfR1BHUFVfV0FMS0VSIHwgOSk7Ci0KLQkvKiBp bnRlcmZhY2UgZGVzY3JpcHRvciBvZmZzZXQgKi8KLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBTSU1E IHNpemUsIHRocmVhZCB3L2gvZCAqLwotCU9VVF9CQVRDSCgxIDw8IDMwIHwgLyogU0lNRDE2ICov Ci0JCSAgMCA8PCAxNiB8IC8qIGRlcHRoOjEgKi8KLQkJICAwIDw8IDggfCAvKiBoZWlnaHQ6MSAq LwotCQkgIDApOyAvKiB3aWR0aDoxICovCi0KLQkvKiB0aHJlYWQgZ3JvdXAgWCAqLwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goeF9kaW0pOwotCi0JLyogdGhyZWFkIGdyb3VwIFkgKi8KLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKHlfZGltKTsKLQotCS8qIHRocmVhZCBncm91cCBaICov Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgxKTsKLQotCS8qIHJpZ2h0IG1hc2sgKi8KLQlP VVRfQkFUQ0gocmlnaHRfbWFzayk7Ci0KLQkvKiBib3R0b20gbWFzaywgaGVpZ2h0IDEsIGFsd2F5 cyAweGZmZmZmZmZmICovCi0JT1VUX0JBVENIKDB4ZmZmZmZmZmYpOwotfQotCi1zdGF0aWMgdm9p ZAotZ2VuOF9lbWl0X2dwZ3B1X3dhbGsoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK LQkJICAgICB1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAotCQkgICAgIHVuc2lnbmVkIHdpZHRoLCB1 bnNpZ25lZCBoZWlnaHQpCi17Ci0JdWludDMyX3QgeF9kaW0sIHlfZGltLCB0bXAsIHJpZ2h0X21h c2s7Ci0KLQkvKgotCSAqIFNpbXBseSBkbyBTSU1EMTYgYmFzZWQgZGlzcGF0Y2gsIHNvIGV2ZXJ5 IHRocmVhZCB1c2VzCi0JICogU0lNRDE2IGNoYW5uZWxzLgotCSAqCi0JICogRGVmaW5lIG91ciBv d24gdGhyZWFkIGdyb3VwIHNpemUsIGUuZyAxNngxIGZvciBldmVyeSBncm91cCwgdGhlbgotCSAq IHdpbGwgaGF2ZSAxIHRocmVhZCBlYWNoIGdyb3VwIGluIFNJTUQxNiBkaXNwYXRjaC4gU28gdGhy ZWFkCi0JICogd2lkdGgvaGVpZ2h0L2RlcHRoIGFyZSBhbGwgMS4KLQkgKgotCSAqIFRoZW4gdGhy ZWFkIGdyb3VwIFggPSB3aWR0aCAvIDE2IChhbGlnbmVkIHRvIDE2KQotCSAqIHRocmVhZCBncm91 cCBZID0gaGVpZ2h0OwotCSAqLwotCXhfZGltID0gKHdpZHRoICsgMTUpIC8gMTY7Ci0JeV9kaW0g PSBoZWlnaHQ7Ci0KLQl0bXAgPSB3aWR0aCAmIDE1OwotCWlmICh0bXAgPT0gMCkKLQkJcmlnaHRf bWFzayA9ICgxIDw8IDE2KSAtIDE7Ci0JZWxzZQotCQlyaWdodF9tYXNrID0gKDEgPDwgdG1wKSAt IDE7Ci0KLQlPVVRfQkFUQ0goR0VON19HUEdQVV9XQUxLRVIgfCAxMyk7Ci0KLQlPVVRfQkFUQ0go MCk7IC8qIGtlcm5lbCBvZmZzZXQgKi8KLQlPVVRfQkFUQ0goMCk7IC8qIGluZGlyZWN0IGRhdGEg bGVuZ3RoICovCi0JT1VUX0JBVENIKDApOyAvKiBpbmRpcmVjdCBkYXRhIG9mZnNldCAqLwotCi0J LyogU0lNRCBzaXplLCB0aHJlYWQgdy9oL2QgKi8KLQlPVVRfQkFUQ0goMSA8PCAzMCB8IC8qIFNJ TUQxNiAqLwotCQkgIDAgPDwgMTYgfCAvKiBkZXB0aDoxICovCi0JCSAgMCA8PCA4IHwgLyogaGVp Z2h0OjEgKi8KLQkJICAwKTsgLyogd2lkdGg6MSAqLwotCi0JLyogdGhyZWFkIGdyb3VwIFggKi8K LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCh4X2RpbSk7Ci0KLQkv KiB0aHJlYWQgZ3JvdXAgWSAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKHlfZGltKTsKLQotCS8qIHRocmVhZCBncm91cCBaICovCi0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgxKTsKLQotCS8qIHJpZ2h0IG1hc2sgKi8KLQlPVVRfQkFUQ0gocmlnaHRfbWFz ayk7Ci0KLQkvKiBib3R0b20gbWFzaywgaGVpZ2h0IDEsIGFsd2F5cyAweGZmZmZmZmZmICovCi0J T1VUX0JBVENIKDB4ZmZmZmZmZmYpOwotfQotCiAvKgogICogVGhpcyBzZXRzIHVwIHRoZSBncGdw dSBwaXBlbGluZSwKICAqCmRpZmYgLS1naXQgYS9saWIvZ3B1X2ZpbGwuYyBiL2xpYi9ncHVfZmls bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4xNzJjNmRiNgotLS0gL2Rl di9udWxsCisrKyBiL2xpYi9ncHVfZmlsbC5jCkBAIC0wLDAgKzEsNzU4IEBACisjaW5jbHVkZSAi Z3B1X2ZpbGwuaCIKKwordWludDMyX3QKK2JhdGNoX3VzZWQoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCkKK3sKKwlyZXR1cm4gYmF0Y2gtPnB0ciAtIGJhdGNoLT5idWZmZXI7Cit9CisK K3VpbnQzMl90CitiYXRjaF9hbGlnbihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1 aW50MzJfdCBhbGlnbikKK3sKKwl1aW50MzJfdCBvZmZzZXQgPSBiYXRjaF91c2VkKGJhdGNoKTsK KwlvZmZzZXQgPSBBTElHTihvZmZzZXQsIGFsaWduKTsKKwliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1 ZmZlciArIG9mZnNldDsKKwlyZXR1cm4gb2Zmc2V0OworfQorCit2b2lkICoKK2JhdGNoX2FsbG9j KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90 IGFsaWduKQoreworCXVpbnQzMl90IG9mZnNldCA9IGJhdGNoX2FsaWduKGJhdGNoLCBhbGlnbik7 CisJYmF0Y2gtPnB0ciArPSBzaXplOworCXJldHVybiBtZW1zZXQoYmF0Y2gtPmJ1ZmZlciArIG9m ZnNldCwgMCwgc2l6ZSk7Cit9CisKK3VpbnQzMl90CitiYXRjaF9vZmZzZXQoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwgdm9pZCAqcHRyKQoreworCXJldHVybiAodWludDhfdCAqKXB0 ciAtIGJhdGNoLT5idWZmZXI7Cit9CisKK3VpbnQzMl90CitiYXRjaF9jb3B5KHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHZvaWQgKnB0ciwgdWludDMyX3Qgc2l6ZSwgdWlu dDMyX3QgYWxpZ24pCit7CisJcmV0dXJuIGJhdGNoX29mZnNldChiYXRjaCwgbWVtY3B5KGJhdGNo X2FsbG9jKGJhdGNoLCBzaXplLCBhbGlnbiksIHB0ciwgc2l6ZSkpOworfQorCit2b2lkCitnZW43 X3JlbmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBi YXRjaF9lbmQpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9pbnRlbF9ib19zdWJkYXRhKGJh dGNoLT5ibywgMCwgNDA5NiwgYmF0Y2gtPmJ1ZmZlcik7CisJaWYgKHJldCA9PSAwKQorCQlyZXQg PSBkcm1faW50ZWxfYm9fbXJiX2V4ZWMoYmF0Y2gtPmJvLCBiYXRjaF9lbmQsCisJCQkJCU5VTEws IDAsIDAsIDApOworCWlndF9hc3NlcnQocmV0ID09IDApOworfQorCit1aW50MzJfdAorZ2VuN19m aWxsX2N1cmJlX2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJ CQl1aW50OF90IGNvbG9yKQoreworCXVpbnQ4X3QgKmN1cmJlX2J1ZmZlcjsKKwl1aW50MzJfdCBv ZmZzZXQ7CisKKwljdXJiZV9idWZmZXIgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKHVpbnQz Ml90KSAqIDgsIDY0KTsKKwlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGN1cmJlX2J1ZmZl cik7CisJKmN1cmJlX2J1ZmZlciA9IGNvbG9yOworCisJcmV0dXJuIG9mZnNldDsKK30KKwordWlu dDMyX3QKK2dlbjdfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCisJCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkJdWludDMyX3QgZm9ybWF0LAorCQkJ aW50IGlzX2RzdCkKK3sKKwlzdHJ1Y3QgZ2VuN19zdXJmYWNlX3N0YXRlICpzczsKKwl1aW50MzJf dCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7CisJaW50IHJldDsKKworCWlmIChp c19kc3QpIHsKKwkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5f UkVOREVSOworCX0gZWxzZSB7CisJCXdyaXRlX2RvbWFpbiA9IDA7CisJCXJlYWRfZG9tYWluID0g STkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7CisJfQorCisJc3MgPSBiYXRjaF9hbGxvYyhiYXRjaCwg c2l6ZW9mKCpzcyksIDY0KTsKKwlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIHNzKTsKKwor CXNzLT5zczAuc3VyZmFjZV90eXBlID0gR0VON19TVVJGQUNFXzJEOworCXNzLT5zczAuc3VyZmFj ZV9mb3JtYXQgPSBmb3JtYXQ7CisJc3MtPnNzMC5yZW5kZXJfY2FjaGVfcmVhZF93cml0ZSA9IDE7 CisKKwlpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWCkKKwkJc3MtPnNzMC50aWxlZF9t b2RlID0gMjsKKwllbHNlIGlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQorCQlzcy0+ c3MwLnRpbGVkX21vZGUgPSAzOworCisJc3MtPnNzMS5iYXNlX2FkZHIgPSBidWYtPmJvLT5vZmZz ZXQ7CisJcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLAorCQkJCWJhdGNo X29mZnNldChiYXRjaCwgc3MpICsgNCwKKwkJCQlidWYtPmJvLCAwLAorCQkJCXJlYWRfZG9tYWlu LCB3cml0ZV9kb21haW4pOworCWlndF9hc3NlcnQocmV0ID09IDApOworCisJc3MtPnNzMi5oZWln aHQgPSBpZ3RfYnVmX2hlaWdodChidWYpIC0gMTsKKwlzcy0+c3MyLndpZHRoICA9IGlndF9idWZf d2lkdGgoYnVmKSAtIDE7CisKKwlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+c3RyaWRlIC0gMTsKKwor CXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfciA9IDQ7CisJc3MtPnNzNy5zaGFkZXJfY2hh bmVsX3NlbGVjdF9nID0gNTsKKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2Owor CXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYSA9IDc7CisKKwlyZXR1cm4gb2Zmc2V0Owor fQorCit1aW50MzJfdAorZ2VuN19maWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwKKwkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpCit7CisJdWludDMyX3QgKmJp bmRpbmdfdGFibGUsIG9mZnNldDsKKworCWJpbmRpbmdfdGFibGUgPSBiYXRjaF9hbGxvYyhiYXRj aCwgMzIsIDY0KTsKKwlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUp OworCWJpbmRpbmdfdGFibGVbMF0gPSBnZW43X2ZpbGxfc3VyZmFjZV9zdGF0ZShiYXRjaCwgZHN0 LAorCQkJCQkJR0VON19TVVJGQUNFRk9STUFUX1I4X1VOT1JNLCAxKTsKKworCXJldHVybiBvZmZz ZXQ7Cit9CisKK3VpbnQzMl90CitnZW43X2ZpbGxfbWVkaWFfa2VybmVsKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsCisJCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAorCQlzaXpl X3Qgc2l6ZSkKK3sKKwl1aW50MzJfdCBvZmZzZXQ7CisKKwlvZmZzZXQgPSBiYXRjaF9jb3B5KGJh dGNoLCBrZXJuZWwsIHNpemUsIDY0KTsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3VpbnQzMl90 CitnZW44X2ZpbGxfbWVkaWFfa2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs CisJCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAorCQlzaXplX3Qgc2l6ZSkKK3sKKwl1aW50 MzJfdCBvZmZzZXQ7CisKKwlvZmZzZXQgPSBiYXRjaF9jb3B5KGJhdGNoLCBrZXJuZWwsIHNpemUs IDY0KTsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3VpbnQzMl90CitnZW43X2ZpbGxfaW50ZXJm YWNlX2Rlc2NyaXB0b3Ioc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgc3RydWN0IGln dF9idWYgKmRzdCwKKwkJCSAgICAgICBjb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwgc2l6ZV90 IHNpemUpCit7CisJc3RydWN0IGdlbjdfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfZGF0YSAqaWRkOwor CXVpbnQzMl90IG9mZnNldDsKKwl1aW50MzJfdCBiaW5kaW5nX3RhYmxlX29mZnNldCwga2VybmVs X29mZnNldDsKKworCWJpbmRpbmdfdGFibGVfb2Zmc2V0ID0gZ2VuN19maWxsX2JpbmRpbmdfdGFi bGUoYmF0Y2gsIGRzdCk7CisJa2VybmVsX29mZnNldCA9IGdlbjdfZmlsbF9tZWRpYV9rZXJuZWwo YmF0Y2gsIGtlcm5lbCwgc2l6ZSk7CisKKwlpZGQgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9m KCppZGQpLCA2NCk7CisJb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBpZGQpOworCisJaWRk LT5kZXNjMC5rZXJuZWxfc3RhcnRfcG9pbnRlciA9IChrZXJuZWxfb2Zmc2V0ID4+IDYpOworCisJ aWRkLT5kZXNjMS5zaW5nbGVfcHJvZ3JhbV9mbG93ID0gMTsKKwlpZGQtPmRlc2MxLmZsb2F0aW5n X3BvaW50X21vZGUgPSBHRU43X0ZMT0FUSU5HX1BPSU5UX0lFRUVfNzU0OworCisJaWRkLT5kZXNj Mi5zYW1wbGVyX2NvdW50ID0gMDsgICAgICAvKiAwIHNhbXBsZXJzIHVzZWQgKi8KKwlpZGQtPmRl c2MyLnNhbXBsZXJfc3RhdGVfcG9pbnRlciA9IDA7CisKKwlpZGQtPmRlc2MzLmJpbmRpbmdfdGFi bGVfZW50cnlfY291bnQgPSAwOworCWlkZC0+ZGVzYzMuYmluZGluZ190YWJsZV9wb2ludGVyID0g KGJpbmRpbmdfdGFibGVfb2Zmc2V0ID4+IDUpOworCisJaWRkLT5kZXNjNC5jb25zdGFudF91cmJf ZW50cnlfcmVhZF9vZmZzZXQgPSAwOworCWlkZC0+ZGVzYzQuY29uc3RhbnRfdXJiX2VudHJ5X3Jl YWRfbGVuZ3RoID0gMTsgLyogZ3JmIDEgKi8KKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3ZvaWQK K2dlbjdfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCkKK3sKKwlPVVRfQkFUQ0goR0VON19TVEFURV9CQVNFX0FERFJFU1MgfCAoMTAgLSAyKSk7 CisKKwkvKiBnZW5lcmFsICovCisJT1VUX0JBVENIKDApOworCisJLyogc3VyZmFjZSAqLworCU9V VF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9B RERSRVNTX01PRElGWSk7CisKKwkvKiBkeW5hbWljICovCisJT1VUX1JFTE9DKGJhdGNoLT5ibywg STkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwor CS8qIGluZGlyZWN0ICovCisJT1VUX0JBVENIKDApOworCisJLyogaW5zdHJ1Y3Rpb24gKi8KKwlP VVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0Vf QUREUkVTU19NT0RJRlkpOworCisJLyogZ2VuZXJhbC9keW5hbWljL2luZGlyZWN0L2luc3RydWN0 aW9uIGFjY2VzcyBCb3VuZCAqLworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCB8IEJBU0Vf QUREUkVTU19NT0RJRlkpOworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCB8IEJBU0VfQURE UkVTU19NT0RJRlkpOworfQorCit2b2lkCitnZW43X2VtaXRfdmZlX3N0YXRlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCit7CisJT1VUX0JBVENIKEdFTjdfTUVESUFfVkZFX1NUQVRF IHwgKDggLSAyKSk7CisKKwkvKiBzY3JhdGNoIGJ1ZmZlciAqLworCU9VVF9CQVRDSCgwKTsKKwor CS8qIG51bWJlciBvZiB0aHJlYWRzICYgdXJiIGVudHJpZXMgKi8KKwlPVVRfQkFUQ0goMSA8PCAx NiB8CisJCTIgPDwgOCk7CisKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiB1cmIgZW50cnkgc2l6ZSAm IGN1cmJlIHNpemUgKi8KKwlPVVRfQkFUQ0goMiA8PCAxNiB8IAkvKiBpbiAyNTYgYml0cyB1bml0 ICovCisJCTIpOwkJLyogaW4gMjU2IGJpdHMgdW5pdCAqLworCisJLyogc2NvcmVib2FyZCAqLwor CU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDApOworfQorCit2b2lk CitnZW43X2VtaXRfdmZlX3N0YXRlX2dwZ3B1KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gpCit7CisJT1VUX0JBVENIKEdFTjdfTUVESUFfVkZFX1NUQVRFIHwgKDggLSAyKSk7CisKKwkv KiBzY3JhdGNoIGJ1ZmZlciAqLworCU9VVF9CQVRDSCgwKTsKKworCS8qIG51bWJlciBvZiB0aHJl YWRzICYgdXJiIGVudHJpZXMgKi8KKwlPVVRfQkFUQ0goMSA8PCAxNiB8IC8qIG1heCBudW0gb2Yg dGhyZWFkcyAqLworCQkgIDAgPDwgOCB8IC8qIG51bSBvZiBVUkIgZW50cnkgKi8KKwkJICAxIDw8 IDIpOyAvKiBHUEdQVSBtb2RlICovCisKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiB1cmIgZW50cnkg c2l6ZSAmIGN1cmJlIHNpemUgKi8KKwlPVVRfQkFUQ0goMCA8PCAxNiB8IAkvKiBVUkIgZW50cnkg c2l6ZSBpbiAyNTYgYml0cyB1bml0ICovCisJCSAgMSk7CQkvKiBDVVJCRSBlbnRyeSBzaXplIGlu IDI1NiBiaXRzIHVuaXQgKi8KKworCS8qIHNjb3JlYm9hcmQgKi8KKwlPVVRfQkFUQ0goMCk7CisJ T1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKK30KKwordm9pZAorZ2VuN19lbWl0X2N1cmJl X2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgY3VyYmVfYnVm ZmVyKQoreworCU9VVF9CQVRDSChHRU43X01FRElBX0NVUkJFX0xPQUQgfCAoNCAtIDIpKTsKKwlP VVRfQkFUQ0goMCk7CisJLyogY3VyYmUgdG90YWwgZGF0YSBsZW5ndGggKi8KKwlPVVRfQkFUQ0go NjQpOworCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8gdGhlIGR5 bmFtaWNzIGJhc2UgYWRkcmVzcyAqLworCU9VVF9CQVRDSChjdXJiZV9idWZmZXIpOworfQorCit2 b2lkCitnZW43X2VtaXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcikKK3sKKwlPVVRf QkFUQ0goR0VON19NRURJQV9JTlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FEIHwgKDQgLSAyKSk7CisJ T1VUX0JBVENIKDApOworCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGRhdGEgbGVuZ3RoICovCisJ T1VUX0JBVENIKHNpemVvZihzdHJ1Y3QgZ2VuN19pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRhKSk7 CisJLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8gdGhlIGR5 bmFtaWNzIGJhc2UgYWRkcmVzcyAqLworCU9VVF9CQVRDSChpbnRlcmZhY2VfZGVzY3JpcHRvcik7 Cit9CisKK3ZvaWQKK2dlbjdfZW1pdF9tZWRpYV9vYmplY3RzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCisJCQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAorCQkJdW5zaWduZWQgd2lk dGgsIHVuc2lnbmVkIGhlaWdodCkKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCB3 aWR0aCAvIDE2OyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGhlaWdodCAvIDE2OyBqKyspIHsK KwkJCU9VVF9CQVRDSChHRU43X01FRElBX09CSkVDVCB8ICg4IC0gMikpOworCisJCQkvKiBpbnRl cmZhY2UgZGVzY3JpcHRvciBvZmZzZXQgKi8KKwkJCU9VVF9CQVRDSCgwKTsKKworCQkJLyogd2l0 aG91dCBpbmRpcmVjdCBkYXRhICovCisJCQlPVVRfQkFUQ0goMCk7CisJCQlPVVRfQkFUQ0goMCk7 CisKKwkJCS8qIHNjb3JlYm9hcmQgKi8KKwkJCU9VVF9CQVRDSCgwKTsKKwkJCU9VVF9CQVRDSCgw KTsKKworCQkJLyogaW5saW5lIGRhdGEgKHhvZmZzZXQsIHlvZmZzZXQpICovCisJCQlPVVRfQkFU Q0goeCArIGkgKiAxNik7CisJCQlPVVRfQkFUQ0goeSArIGogKiAxNik7CisJCX0KKwl9Cit9CisK K3ZvaWQKK2dlbjdfZW1pdF9ncGdwdV93YWxrKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsCisJCSAgICAgdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKKwkJICAgICB1bnNpZ25lZCB3aWR0 aCwgdW5zaWduZWQgaGVpZ2h0KQoreworCXVpbnQzMl90IHhfZGltLCB5X2RpbSwgdG1wLCByaWdo dF9tYXNrOworCisJLyoKKwkgKiBTaW1wbHkgZG8gU0lNRDE2IGJhc2VkIGRpc3BhdGNoLCBzbyBl dmVyeSB0aHJlYWQgdXNlcworCSAqIFNJTUQxNiBjaGFubmVscy4KKwkgKgorCSAqIERlZmluZSBv dXIgb3duIHRocmVhZCBncm91cCBzaXplLCBlLmcgMTZ4MSBmb3IgZXZlcnkgZ3JvdXAsIHRoZW4K KwkgKiB3aWxsIGhhdmUgMSB0aHJlYWQgZWFjaCBncm91cCBpbiBTSU1EMTYgZGlzcGF0Y2guIFNv IHRocmVhZAorCSAqIHdpZHRoL2hlaWdodC9kZXB0aCBhcmUgYWxsIDEuCisJICoKKwkgKiBUaGVu IHRocmVhZCBncm91cCBYID0gd2lkdGggLyAxNiAoYWxpZ25lZCB0byAxNikKKwkgKiB0aHJlYWQg Z3JvdXAgWSA9IGhlaWdodDsKKwkgKi8KKwl4X2RpbSA9ICh3aWR0aCArIDE1KSAvIDE2OworCXlf ZGltID0gaGVpZ2h0OworCisJdG1wID0gd2lkdGggJiAxNTsKKwlpZiAodG1wID09IDApCisJCXJp Z2h0X21hc2sgPSAoMSA8PCAxNikgLSAxOworCWVsc2UKKwkJcmlnaHRfbWFzayA9ICgxIDw8IHRt cCkgLSAxOworCisJT1VUX0JBVENIKEdFTjdfR1BHUFVfV0FMS0VSIHwgOSk7CisKKwkvKiBpbnRl cmZhY2UgZGVzY3JpcHRvciBvZmZzZXQgKi8KKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBTSU1EIHNp emUsIHRocmVhZCB3L2gvZCAqLworCU9VVF9CQVRDSCgxIDw8IDMwIHwgLyogU0lNRDE2ICovCisJ CSAgMCA8PCAxNiB8IC8qIGRlcHRoOjEgKi8KKwkJICAwIDw8IDggfCAvKiBoZWlnaHQ6MSAqLwor CQkgIDApOyAvKiB3aWR0aDoxICovCisKKwkvKiB0aHJlYWQgZ3JvdXAgWCAqLworCU9VVF9CQVRD SCgwKTsKKwlPVVRfQkFUQ0goeF9kaW0pOworCisJLyogdGhyZWFkIGdyb3VwIFkgKi8KKwlPVVRf QkFUQ0goMCk7CisJT1VUX0JBVENIKHlfZGltKTsKKworCS8qIHRocmVhZCBncm91cCBaICovCisJ T1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgxKTsKKworCS8qIHJpZ2h0IG1hc2sgKi8KKwlPVVRf QkFUQ0gocmlnaHRfbWFzayk7CisKKwkvKiBib3R0b20gbWFzaywgaGVpZ2h0IDEsIGFsd2F5cyAw eGZmZmZmZmZmICovCisJT1VUX0JBVENIKDB4ZmZmZmZmZmYpOworfQorCit2b2lkCitnZW44X3Jl bmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBiYXRj aF9lbmQpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9pbnRlbF9ib19zdWJkYXRhKGJhdGNo LT5ibywgMCwgNDA5NiwgYmF0Y2gtPmJ1ZmZlcik7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBk cm1faW50ZWxfYm9fbXJiX2V4ZWMoYmF0Y2gtPmJvLCBiYXRjaF9lbmQsCisJCQkJCU5VTEwsIDAs IDAsIDApOworCWlndF9hc3NlcnQocmV0ID09IDApOworfQorCisKK3VpbnQzMl90CitnZW44X2Zp bGxfY3VyYmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJ CXVpbnQ4X3QgY29sb3IpCit7CisJdWludDhfdCAqY3VyYmVfYnVmZmVyOworCXVpbnQzMl90IG9m ZnNldDsKKworCWN1cmJlX2J1ZmZlciA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YodWludDMy X3QpICogOCwgNjQpOworCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgY3VyYmVfYnVmZmVy KTsKKwkqY3VyYmVfYnVmZmVyID0gY29sb3I7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCit1aW50 MzJfdAorZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwKKwkJCXN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQl1aW50MzJfdCBmb3JtYXQsCisJCQlp bnQgaXNfZHN0KQoreworCXN0cnVjdCBnZW44X3N1cmZhY2Vfc3RhdGUgKnNzOworCXVpbnQzMl90 IHdyaXRlX2RvbWFpbiwgcmVhZF9kb21haW4sIG9mZnNldDsKKwlpbnQgcmV0OworCisJaWYgKGlz X2RzdCkgeworCQl3cml0ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9S RU5ERVI7CisJfSBlbHNlIHsKKwkJd3JpdGVfZG9tYWluID0gMDsKKwkJcmVhZF9kb21haW4gPSBJ OTE1X0dFTV9ET01BSU5fU0FNUExFUjsKKwl9CisKKwlzcyA9IGJhdGNoX2FsbG9jKGJhdGNoLCBz aXplb2YoKnNzKSwgNjQpOworCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgc3MpOworCisJ c3MtPnNzMC5zdXJmYWNlX3R5cGUgPSBHRU44X1NVUkZBQ0VfMkQ7CisJc3MtPnNzMC5zdXJmYWNl X2Zvcm1hdCA9IGZvcm1hdDsKKwlzcy0+c3MwLnJlbmRlcl9jYWNoZV9yZWFkX3dyaXRlID0gMTsK Kwlzcy0+c3MwLnZlcnRpY2FsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8KKwlzcy0+c3Mw Lmhvcml6b250YWxfYWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLworCisJaWYgKGJ1Zi0+dGls aW5nID09IEk5MTVfVElMSU5HX1gpCisJCXNzLT5zczAudGlsZWRfbW9kZSA9IDI7CisJZWxzZSBp ZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKKwkJc3MtPnNzMC50aWxlZF9tb2RlID0g MzsKKworCXNzLT5zczguYmFzZV9hZGRyID0gYnVmLT5iby0+b2Zmc2V0OworCisJcmV0ID0gZHJt X2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLAorCQkJCWJhdGNoX29mZnNldChiYXRjaCwg c3MpICsgOCAqIDQsCisJCQkJYnVmLT5ibywgMCwKKwkJCQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9t YWluKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKKworCXNzLT5zczIuaGVpZ2h0ID0gaWd0X2J1 Zl9oZWlnaHQoYnVmKSAtIDE7CisJc3MtPnNzMi53aWR0aCAgPSBpZ3RfYnVmX3dpZHRoKGJ1Zikg LSAxOworCXNzLT5zczMucGl0Y2ggID0gYnVmLT5zdHJpZGUgLSAxOworCisJc3MtPnNzNy5zaGFk ZXJfY2hhbmVsX3NlbGVjdF9yID0gNDsKKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2cg PSA1OworCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYiA9IDY7CisJc3MtPnNzNy5zaGFk ZXJfY2hhbmVsX3NlbGVjdF9hID0gNzsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3VpbnQzMl90 CitnZW44X2ZpbGxfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAorCQkJc3RydWN0IGlndF9idWYgKmRzdCkKK3sKKwl1aW50MzJfdCAqYmluZGluZ190YWJsZSwg b2Zmc2V0OworCisJYmluZGluZ190YWJsZSA9IGJhdGNoX2FsbG9jKGJhdGNoLCAzMiwgNjQpOwor CW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgYmluZGluZ190YWJsZSk7CisKKwliaW5kaW5n X3RhYmxlWzBdID0gZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoYmF0Y2gsIGRzdCwKKwkJCQkJCUdF TjhfU1VSRkFDRUZPUk1BVF9SOF9VTk9STSwgMSk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCit1 aW50MzJfdAorZ2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdCBpZ3RfYnVmICpkc3QsICBjb25zdCB1aW50MzJfdCBrZXJu ZWxbXVs0XSwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGdlbjhfaW50ZXJmYWNlX2Rlc2NyaXB0 b3JfZGF0YSAqaWRkOworCXVpbnQzMl90IG9mZnNldDsKKwl1aW50MzJfdCBiaW5kaW5nX3RhYmxl X29mZnNldCwga2VybmVsX29mZnNldDsKKworCWJpbmRpbmdfdGFibGVfb2Zmc2V0ID0gZ2VuOF9m aWxsX2JpbmRpbmdfdGFibGUoYmF0Y2gsIGRzdCk7CisJa2VybmVsX29mZnNldCA9IGdlbjhfZmls bF9tZWRpYV9rZXJuZWwoYmF0Y2gsIGtlcm5lbCwgc2l6ZSk7CisKKwlpZGQgPSBiYXRjaF9hbGxv YyhiYXRjaCwgc2l6ZW9mKCppZGQpLCA2NCk7CisJb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNo LCBpZGQpOworCisJaWRkLT5kZXNjMC5rZXJuZWxfc3RhcnRfcG9pbnRlciA9IChrZXJuZWxfb2Zm c2V0ID4+IDYpOworCisJaWRkLT5kZXNjMi5zaW5nbGVfcHJvZ3JhbV9mbG93ID0gMTsKKwlpZGQt PmRlc2MyLmZsb2F0aW5nX3BvaW50X21vZGUgPSBHRU44X0ZMT0FUSU5HX1BPSU5UX0lFRUVfNzU0 OworCisJaWRkLT5kZXNjMy5zYW1wbGVyX2NvdW50ID0gMDsgICAgICAvKiAwIHNhbXBsZXJzIHVz ZWQgKi8KKwlpZGQtPmRlc2MzLnNhbXBsZXJfc3RhdGVfcG9pbnRlciA9IDA7CisKKwlpZGQtPmRl c2M0LmJpbmRpbmdfdGFibGVfZW50cnlfY291bnQgPSAwOworCWlkZC0+ZGVzYzQuYmluZGluZ190 YWJsZV9wb2ludGVyID0gKGJpbmRpbmdfdGFibGVfb2Zmc2V0ID4+IDUpOworCisJaWRkLT5kZXNj NS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9vZmZzZXQgPSAwOworCWlkZC0+ZGVzYzUuY29uc3Rh bnRfdXJiX2VudHJ5X3JlYWRfbGVuZ3RoID0gMTsgLyogZ3JmIDEgKi8KKworCXJldHVybiBvZmZz ZXQ7Cit9CisKK3ZvaWQKK2dlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCkKK3sKKwlPVVRfQkFUQ0goR0VOOF9TVEFURV9CQVNFX0FERFJF U1MgfCAoMTYgLSAyKSk7CisKKwkvKiBnZW5lcmFsICovCisJT1VUX0JBVENIKDAgfCBCQVNFX0FE RFJFU1NfTU9ESUZZKTsKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBzdGF0ZWxlc3MgZGF0YSBwb3J0 ICovCisJT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIHN1cmZhY2Ug Ki8KKwlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiwgMCwgQkFT RV9BRERSRVNTX01PRElGWSk7CisKKwkvKiBkeW5hbWljICovCisJT1VUX1JFTE9DKGJhdGNoLT5i bywgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiB8IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwK KwkJMCwgQkFTRV9BRERSRVNTX01PRElGWSk7CisKKwkvKiBpbmRpcmVjdCAqLworCU9VVF9CQVRD SCgwKTsKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBpbnN0cnVjdGlvbiAqLworCU9VVF9SRUxPQyhi YXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01P RElGWSk7CisKKwkvKiBnZW5lcmFsIHN0YXRlIGJ1ZmZlciBzaXplICovCisJT1VUX0JBVENIKDB4 ZmZmZmYwMDAgfCAxKTsKKwkvKiBkeW5hbWljIHN0YXRlIGJ1ZmZlciBzaXplICovCisJT1VUX0JB VENIKDEgPDwgMTIgfCAxKTsKKwkvKiBpbmRpcmVjdCBvYmplY3QgYnVmZmVyIHNpemUgKi8KKwlP VVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOworCS8qIGludHJ1Y3Rpb24gYnVmZmVyIHNpemUsIG11 c3Qgc2V0IG1vZGlmeSBlbmFibGUgYml0LCBvdGhlcndpc2UgaXQgbWF5IHJlc3VsdCBpbiBHUFUg aGFuZyAqLworCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7Cit9CisKK3ZvaWQKK2dlbjhfZW1pdF92 ZmVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK3sKKwlPVVRfQkFUQ0go R0VOOF9NRURJQV9WRkVfU1RBVEUgfCAoOSAtIDIpKTsKKworCS8qIHNjcmF0Y2ggYnVmZmVyICov CisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKKworCS8qIG51bWJlciBvZiB0aHJlYWRz ICYgdXJiIGVudHJpZXMgKi8KKwlPVVRfQkFUQ0goMSA8PCAxNiB8CisJCTIgPDwgOCk7CisKKwlP VVRfQkFUQ0goMCk7CisKKwkvKiB1cmIgZW50cnkgc2l6ZSAmIGN1cmJlIHNpemUgKi8KKwlPVVRf QkFUQ0goMiA8PCAxNiB8CisJCTIpOworCisJLyogc2NvcmVib2FyZCAqLworCU9VVF9CQVRDSCgw KTsKKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKDApOworfQorCit2b2lkCitnZW44X2VtaXRf dmZlX3N0YXRlX2dwZ3B1KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCit7CisJT1VU X0JBVENIKEdFTjhfTUVESUFfVkZFX1NUQVRFIHwgKDkgLSAyKSk7CisKKwkvKiBzY3JhdGNoIGJ1 ZmZlciAqLworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goMCk7CisKKwkvKiBudW1iZXIgb2Yg dGhyZWFkcyAmIHVyYiBlbnRyaWVzICovCisJT1VUX0JBVENIKDEgPDwgMTYgfCAxIDw8IDgpOwor CisJT1VUX0JBVENIKDApOworCisJLyogdXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICovCisJ T1VUX0JBVENIKDAgPDwgMTYgfCAxKTsKKworCS8qIHNjb3JlYm9hcmQgKi8KKwlPVVRfQkFUQ0go MCk7CisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKK30KKwordm9pZAorZ2VuOF9lbWl0 X2N1cmJlX2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgY3Vy YmVfYnVmZmVyKQoreworCU9VVF9CQVRDSChHRU44X01FRElBX0NVUkJFX0xPQUQgfCAoNCAtIDIp KTsKKwlPVVRfQkFUQ0goMCk7CisJLyogY3VyYmUgdG90YWwgZGF0YSBsZW5ndGggKi8KKwlPVVRf QkFUQ0goNjQpOworCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8g dGhlIGR5bmFtaWNzIGJhc2UgYWRkcmVzcyAqLworCU9VVF9CQVRDSChjdXJiZV9idWZmZXIpOwor fQorCit2b2lkCitnZW44X2VtaXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcikKK3sK KwlPVVRfQkFUQ0goR0VOOF9NRURJQV9JTlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FEIHwgKDQgLSAy KSk7CisJT1VUX0JBVENIKDApOworCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGRhdGEgbGVuZ3Ro ICovCisJT1VUX0JBVENIKHNpemVvZihzdHJ1Y3QgZ2VuOF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9k YXRhKSk7CisJLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8g dGhlIGR5bmFtaWNzIGJhc2UgYWRkcmVzcyAqLworCU9VVF9CQVRDSChpbnRlcmZhY2VfZGVzY3Jp cHRvcik7Cit9CisKK3ZvaWQKK2dlbjhfZW1pdF9tZWRpYV9zdGF0ZV9mbHVzaChzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQoreworCU9VVF9CQVRDSChHRU44X01FRElBX1NUQVRFX0ZM VVNIIHwgKDIgLSAyKSk7CisJT1VUX0JBVENIKDApOworfQorCit2b2lkCitnZW44X2VtaXRfbWVk aWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJdW5zaWduZWQg eCwgdW5zaWduZWQgeSwKKwkJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7CisJ aW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLyAxNjsgaSsrKSB7CisJCWZvciAo aiA9IDA7IGogPCBoZWlnaHQgLyAxNjsgaisrKSB7CisJCQlPVVRfQkFUQ0goR0VOOF9NRURJQV9P QkpFQ1QgfCAoOCAtIDIpKTsKKworCQkJLyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICov CisJCQlPVVRfQkFUQ0goMCk7CisKKwkJCS8qIHdpdGhvdXQgaW5kaXJlY3QgZGF0YSAqLworCQkJ T1VUX0JBVENIKDApOworCQkJT1VUX0JBVENIKDApOworCisJCQkvKiBzY29yZWJvYXJkICovCisJ CQlPVVRfQkFUQ0goMCk7CisJCQlPVVRfQkFUQ0goMCk7CisKKwkJCS8qIGlubGluZSBkYXRhICh4 b2Zmc2V0LCB5b2Zmc2V0KSAqLworCQkJT1VUX0JBVENIKHggKyBpICogMTYpOworCQkJT1VUX0JB VENIKHkgKyBqICogMTYpOworCQkJZ2VuOF9lbWl0X21lZGlhX3N0YXRlX2ZsdXNoKGJhdGNoKTsK KwkJfQorCX0KK30KK3ZvaWQKK2dlbjhscF9lbWl0X21lZGlhX29iamVjdHMoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCisJCQl1bnNp Z25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQoreworCWludCBpLCBqOworCisJZm9yIChpID0g MDsgaSA8IHdpZHRoIC8gMTY7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgaGVpZ2h0IC8gMTY7 IGorKykgeworCQkJT1VUX0JBVENIKEdFTjhfTUVESUFfT0JKRUNUIHwgKDggLSAyKSk7CisKKwkJ CS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIG9mZnNldCAqLworCQkJT1VUX0JBVENIKDApOworCisJ CQkvKiB3aXRob3V0IGluZGlyZWN0IGRhdGEgKi8KKwkJCU9VVF9CQVRDSCgwKTsKKwkJCU9VVF9C QVRDSCgwKTsKKworCQkJLyogc2NvcmVib2FyZCAqLworCQkJT1VUX0JBVENIKDApOworCQkJT1VU X0JBVENIKDApOworCisJCQkvKiBpbmxpbmUgZGF0YSAoeG9mZnNldCwgeW9mZnNldCkgKi8KKwkJ CU9VVF9CQVRDSCh4ICsgaSAqIDE2KTsKKwkJCU9VVF9CQVRDSCh5ICsgaiAqIDE2KTsKKwkJfQor CX0KK30KK3ZvaWQKK2dlbjhfZW1pdF9ncGdwdV93YWxrKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsCisJCSAgICAgdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKKwkJICAgICB1bnNpZ25l ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQoreworCXVpbnQzMl90IHhfZGltLCB5X2RpbSwgdG1w LCByaWdodF9tYXNrOworCisJLyoKKwkgKiBTaW1wbHkgZG8gU0lNRDE2IGJhc2VkIGRpc3BhdGNo LCBzbyBldmVyeSB0aHJlYWQgdXNlcworCSAqIFNJTUQxNiBjaGFubmVscy4KKwkgKgorCSAqIERl ZmluZSBvdXIgb3duIHRocmVhZCBncm91cCBzaXplLCBlLmcgMTZ4MSBmb3IgZXZlcnkgZ3JvdXAs IHRoZW4KKwkgKiB3aWxsIGhhdmUgMSB0aHJlYWQgZWFjaCBncm91cCBpbiBTSU1EMTYgZGlzcGF0 Y2guIFNvIHRocmVhZAorCSAqIHdpZHRoL2hlaWdodC9kZXB0aCBhcmUgYWxsIDEuCisJICoKKwkg KiBUaGVuIHRocmVhZCBncm91cCBYID0gd2lkdGggLyAxNiAoYWxpZ25lZCB0byAxNikKKwkgKiB0 aHJlYWQgZ3JvdXAgWSA9IGhlaWdodDsKKwkgKi8KKwl4X2RpbSA9ICh3aWR0aCArIDE1KSAvIDE2 OworCXlfZGltID0gaGVpZ2h0OworCisJdG1wID0gd2lkdGggJiAxNTsKKwlpZiAodG1wID09IDAp CisJCXJpZ2h0X21hc2sgPSAoMSA8PCAxNikgLSAxOworCWVsc2UKKwkJcmlnaHRfbWFzayA9ICgx IDw8IHRtcCkgLSAxOworCisJT1VUX0JBVENIKEdFTjdfR1BHUFVfV0FMS0VSIHwgMTMpOworCisJ T1VUX0JBVENIKDApOyAvKiBrZXJuZWwgb2Zmc2V0ICovCisJT1VUX0JBVENIKDApOyAvKiBpbmRp cmVjdCBkYXRhIGxlbmd0aCAqLworCU9VVF9CQVRDSCgwKTsgLyogaW5kaXJlY3QgZGF0YSBvZmZz ZXQgKi8KKworCS8qIFNJTUQgc2l6ZSwgdGhyZWFkIHcvaC9kICovCisJT1VUX0JBVENIKDEgPDwg MzAgfCAvKiBTSU1EMTYgKi8KKwkJICAwIDw8IDE2IHwgLyogZGVwdGg6MSAqLworCQkgIDAgPDwg OCB8IC8qIGhlaWdodDoxICovCisJCSAgMCk7IC8qIHdpZHRoOjEgKi8KKworCS8qIHRocmVhZCBn cm91cCBYICovCisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goeF9k aW0pOworCisJLyogdGhyZWFkIGdyb3VwIFkgKi8KKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENI KDApOworCU9VVF9CQVRDSCh5X2RpbSk7CisKKwkvKiB0aHJlYWQgZ3JvdXAgWiAqLworCU9VVF9C QVRDSCgwKTsKKwlPVVRfQkFUQ0goMSk7CisKKwkvKiByaWdodCBtYXNrICovCisJT1VUX0JBVENI KHJpZ2h0X21hc2spOworCisJLyogYm90dG9tIG1hc2ssIGhlaWdodCAxLCBhbHdheXMgMHhmZmZm ZmZmZiAqLworCU9VVF9CQVRDSCgweGZmZmZmZmZmKTsKK30KKwordm9pZAorZ2VuOV9lbWl0X3N0 YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQoreworCU9V VF9CQVRDSChHRU44X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxOSAtIDIpKTsKKworCS8qIGdlbmVy YWwgKi8KKwlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOworCU9VVF9CQVRDSCgw KTsKKworCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8KKwlPVVRfQkFUQ0goMCB8IEJBU0VfQURE UkVTU19NT0RJRlkpOworCisJLyogc3VyZmFjZSAqLworCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5 MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIGR5 bmFtaWMgKi8KKwlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSIHwg STkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAorCQkwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsK KworCS8qIGluZGlyZWN0ICovCisJT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCgwKTsKKworCS8q IGluc3RydWN0aW9uICovCisJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKworCS8qIGdlbmVyYWwgc3RhdGUg YnVmZmVyIHNpemUgKi8KKwlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOworCS8qIGR5bmFtaWMg c3RhdGUgYnVmZmVyIHNpemUgKi8KKwlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOworCS8qIGluZGly ZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAqLworCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7CisJ LyogaW50cnVjdGlvbiBidWZmZXIgc2l6ZSwgbXVzdCBzZXQgbW9kaWZ5IGVuYWJsZSBiaXQsIG90 aGVyd2lzZSBpdCBtYXkgcmVzdWx0IGluIEdQVSBoYW5nICovCisJT1VUX0JBVENIKDEgPDwgMTIg fCAxKTsKKworCS8qIEJpbmRsZXNzIHN1cmZhY2Ugc3RhdGUgYmFzZSBhZGRyZXNzICovCisJT1VU X0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwlPVVRfQkFUQ0goMCk7CisJT1VUX0JB VENIKDB4ZmZmZmYwMDApOworfQpkaWZmIC0tZ2l0IGEvbGliL2dwdV9maWxsLmggYi9saWIvZ3B1 X2ZpbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uODdlNjJjODYKLS0t IC9kZXYvbnVsbAorKysgYi9saWIvZ3B1X2ZpbGwuaApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIEdQVV9GSUxMX0gK KyNkZWZpbmUgR1BVX0ZJTExfSAorCisjaW5jbHVkZSA8aW50ZWxfYnVmbWdyLmg+CisjaW5jbHVk ZSA8aTkxNV9kcm0uaD4KKworI2luY2x1ZGUgIm1lZGlhX2ZpbGwuaCIKKyNpbmNsdWRlICJnZW43 X21lZGlhLmgiCisjaW5jbHVkZSAiZ2VuOF9tZWRpYS5oIgorI2luY2x1ZGUgImludGVsX3JlZy5o IgorI2luY2x1ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgor I2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKwordWludDMy X3QKK2JhdGNoX3VzZWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7CisKK3VpbnQz Ml90CitiYXRjaF9hbGlnbihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJf dCBhbGlnbik7CisKK3ZvaWQgKgorYmF0Y2hfYWxsb2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pOworCit1aW50MzJfdAorYmF0 Y2hfb2Zmc2V0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHZvaWQgKnB0cik7CisK K3VpbnQzMl90CitiYXRjaF9jb3B5KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGNv bnN0IHZvaWQgKnB0ciwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pOworCit2b2lkCitn ZW43X3JlbmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJf dCBiYXRjaF9lbmQpOworCit1aW50MzJfdAorZ2VuN19maWxsX2N1cmJlX2J1ZmZlcl9kYXRhKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQl1aW50OF90IGNvbG9yKTsKKwordWlu dDMyX3QKK2dlbjdfZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCisJCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkJdWludDMyX3QgZm9ybWF0LAorCQkJ aW50IGlzX2RzdCk7CisKK3VpbnQzMl90CitnZW43X2ZpbGxfYmluZGluZ190YWJsZShzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJc3RydWN0IGlndF9idWYgKmRzdCk7CisKK3Vp bnQzMl90CitnZW43X2ZpbGxfbWVkaWFfa2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCisJCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAorCQlzaXplX3Qgc2l6ZSk7CisK K3VpbnQzMl90CitnZW44X2ZpbGxfbWVkaWFfa2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsCisJCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAorCQlzaXplX3Qgc2l6ZSk7 CisKK3VpbnQzMl90CitnZW43X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Ioc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwgc3RydWN0IGlndF9idWYgKmRzdCwKKwkJCSAgICAgICBjb25z dCB1aW50MzJfdCBrZXJuZWxbXVs0XSwgc2l6ZV90IHNpemUpOworCit2b2lkCitnZW43X2VtaXRf c3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpOworCit2 b2lkCitnZW43X2VtaXRfdmZlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gp OworCit2b2lkCitnZW43X2VtaXRfdmZlX3N0YXRlX2dwZ3B1KHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gpOworCit2b2lkCitnZW43X2VtaXRfY3VyYmVfbG9hZChzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBjdXJiZV9idWZmZXIpOworCit2b2lkCitnZW43 X2VtaXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLCB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcik7CisKK3ZvaWQKK2dlbjdfZW1p dF9tZWRpYV9vYmplY3RzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQl1bnNp Z25lZCB4LCB1bnNpZ25lZCB5LAorCQkJdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7 CisKK3ZvaWQKK2dlbjdfZW1pdF9ncGdwdV93YWxrKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCisJCSAgICAgdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKKwkJICAgICB1bnNpZ25lZCB3 aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKKwordm9pZAorZ2VuOF9yZW5kZXJfZmx1c2goc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYmF0Y2hfZW5kKTsKKwordWludDMy X3QKK2dlbjhfZmlsbF9jdXJiZV9idWZmZXJfZGF0YShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAorCQkJdWludDhfdCBjb2xvcik7CisKK3VpbnQzMl90CitnZW44X2ZpbGxfc3VyZmFj ZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJc3RydWN0IGlndF9i dWYgKmJ1ZiwKKwkJCXVpbnQzMl90IGZvcm1hdCwKKwkJCWludCBpc19kc3QpOworCit1aW50MzJf dAorZ2VuOF9maWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwKKwkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpOworCit1aW50MzJfdAorZ2VuOF9maWxsX2ludGVy ZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdCBp Z3RfYnVmICpkc3QsICBjb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwgc2l6ZV90IHNpemUpOwor Cit2b2lkCitnZW44X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gpOworCit2b2lkCitnZW44X2VtaXRfdmZlX3N0YXRlKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gpOworCit2b2lkCitnZW44X2VtaXRfdmZlX3N0YXRlX2dwZ3B1KHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpOworCit2b2lkCitnZW44X2VtaXRfY3VyYmVf bG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBjdXJiZV9idWZm ZXIpOworCit2b2lkCitnZW44X2VtaXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcik7 CisKK3ZvaWQKK2dlbjhfZW1pdF9tZWRpYV9zdGF0ZV9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKTsKKwordm9pZAorZ2VuOF9lbWl0X21lZGlhX29iamVjdHMoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKKwkJCXVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCisJCQl1 bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKKwordm9pZAorZ2VuOGxwX2VtaXRfbWVk aWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJdW5zaWduZWQg eCwgdW5zaWduZWQgeSwKKwkJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOworCit2 b2lkCitnZW44X2VtaXRfZ3BncHVfd2FsayhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAorCQkgICAgIHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCisJCSAgICAgdW5zaWduZWQgd2lkdGgs IHVuc2lnbmVkIGhlaWdodCk7CisKK3ZvaWQKK2dlbjlfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Mo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7CisKKyNlbmRpZiAvKiBHUFVfRklMTF9I ICovCmRpZmYgLS1naXQgYS9saWIvbWVkaWFfZmlsbF9nZW43LmMgYi9saWIvbWVkaWFfZmlsbF9n ZW43LmMKaW5kZXggNmZiNDQ3OTguLmM5NzU1NWE2IDEwMDY0NAotLS0gYS9saWIvbWVkaWFfZmls bF9nZW43LmMKKysrIGIvbGliL21lZGlhX2ZpbGxfZ2VuNy5jCkBAIC01LDcgKzUsNyBAQAogI2lu Y2x1ZGUgImdlbjdfbWVkaWEuaCIKICNpbmNsdWRlICJpbnRlbF9yZWcuaCIKICNpbmNsdWRlICJk cm10ZXN0LmgiCi0KKyNpbmNsdWRlICJncHVfZmlsbC5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgog CiBzdGF0aWMgY29uc3QgdWludDMyX3QgbWVkaWFfa2VybmVsW11bNF0gPSB7CkBAIC0yMiwyNzUg KzIyLDYgQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IG1lZGlhX2tlcm5lbFtdWzRdID0gewogCXsg MHgwNzgwMDAzMSwgMHgyMDAwMWNhOCwgMHgwMDAwMGUwMCwgMHg4MjAwMDAxMCB9LAogfTsKIAot c3RhdGljIHVpbnQzMl90Ci1iYXRjaF91c2VkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gpCi17Ci0JcmV0dXJuIGJhdGNoLT5wdHIgLSBiYXRjaC0+YnVmZmVyOwotfQotCi1zdGF0aWMg dWludDMyX3QKLWJhdGNoX2FsaWduKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVp bnQzMl90IGFsaWduKQotewotCXVpbnQzMl90IG9mZnNldCA9IGJhdGNoX3VzZWQoYmF0Y2gpOwot CW9mZnNldCA9IEFMSUdOKG9mZnNldCwgYWxpZ24pOwotCWJhdGNoLT5wdHIgPSBiYXRjaC0+YnVm ZmVyICsgb2Zmc2V0OwotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLWJhdGNo X2FsbG9jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IHNpemUsIHVp bnQzMl90IGFsaWduKQotewotCXVpbnQzMl90IG9mZnNldCA9IGJhdGNoX2FsaWduKGJhdGNoLCBh bGlnbik7Ci0JYmF0Y2gtPnB0ciArPSBzaXplOwotCXJldHVybiBtZW1zZXQoYmF0Y2gtPmJ1ZmZl ciArIG9mZnNldCwgMCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfb2Zmc2V0 KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHZvaWQgKnB0cikKLXsKLQlyZXR1cm4g KHVpbnQ4X3QgKilwdHIgLSBiYXRjaC0+YnVmZmVyOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWJh dGNoX2NvcHkoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgY29uc3Qgdm9pZCAqcHRy LCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikKLXsKLQlyZXR1cm4gYmF0Y2hfb2Zmc2V0 KGJhdGNoLCBtZW1jcHkoYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemUsIGFsaWduKSwgcHRyLCBzaXpl KSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW43X3JlbmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBiYXRjaF9lbmQpCi17Ci0JaW50IHJldDsKLQotCXJl dCA9IGRybV9pbnRlbF9ib19zdWJkYXRhKGJhdGNoLT5ibywgMCwgNDA5NiwgYmF0Y2gtPmJ1ZmZl cik7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBkcm1faW50ZWxfYm9fbXJiX2V4ZWMoYmF0Y2gt PmJvLCBiYXRjaF9lbmQsCi0JCQkJCU5VTEwsIDAsIDAsIDApOwotCWlndF9hc3NlcnQocmV0ID09 IDApOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjdfZmlsbF9jdXJiZV9idWZmZXJfZGF0YShz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJdWludDhfdCBjb2xvcikKLXsKLQl1 aW50OF90ICpjdXJiZV9idWZmZXI7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCi0JY3VyYmVfYnVmZmVy ID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZih1aW50MzJfdCkgKiA4LCA2NCk7Ci0Jb2Zmc2V0 ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBjdXJiZV9idWZmZXIpOwotCSpjdXJiZV9idWZmZXIgPSBj b2xvcjsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxs X3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXN0cnVj dCBpZ3RfYnVmICpidWYsCi0JCQl1aW50MzJfdCBmb3JtYXQsCi0JCQlpbnQgaXNfZHN0KQotewot CXN0cnVjdCBnZW43X3N1cmZhY2Vfc3RhdGUgKnNzOwotCXVpbnQzMl90IHdyaXRlX2RvbWFpbiwg cmVhZF9kb21haW4sIG9mZnNldDsKLQlpbnQgcmV0OwotCi0JaWYgKGlzX2RzdCkgewotCQl3cml0 ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Ci0JfSBlbHNl IHsKLQkJd3JpdGVfZG9tYWluID0gMDsKLQkJcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5f U0FNUExFUjsKLQl9Ci0KLQlzcyA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNzKSwgNjQp OwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgc3MpOwotCi0Jc3MtPnNzMC5zdXJmYWNl X3R5cGUgPSBHRU43X1NVUkZBQ0VfMkQ7Ci0Jc3MtPnNzMC5zdXJmYWNlX2Zvcm1hdCA9IGZvcm1h dDsKLQlzcy0+c3MwLnJlbmRlcl9jYWNoZV9yZWFkX3dyaXRlID0gMTsKLQotCWlmIChidWYtPnRp bGluZyA9PSBJOTE1X1RJTElOR19YKQotCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAyOwotCWVsc2Ug aWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCi0JCXNzLT5zczAudGlsZWRfbW9kZSA9 IDM7Ci0KLQlzcy0+c3MxLmJhc2VfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDsKLQlyZXQgPSBkcm1f aW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJYmF0Y2hfb2Zmc2V0KGJhdGNoLCBz cykgKyA0LAotCQkJCWJ1Zi0+Ym8sIDAsCi0JCQkJcmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbik7 Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7Ci0KLQlzcy0+c3MyLmhlaWdodCA9IGlndF9idWZfaGVp Z2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGggID0gaWd0X2J1Zl93aWR0aChidWYpIC0gMTsK LQotCXNzLT5zczMucGl0Y2ggID0gYnVmLT5zdHJpZGUgLSAxOwotCi0Jc3MtPnNzNy5zaGFkZXJf Y2hhbmVsX3NlbGVjdF9yID0gNDsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2cgPSA1 OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYiA9IDY7Ci0Jc3MtPnNzNy5zaGFkZXJf Y2hhbmVsX3NlbGVjdF9hID0gNzsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50 MzJfdAotZ2VuN19maWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwKLQkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpCi17Ci0JdWludDMyX3QgKmJpbmRpbmdfdGFi bGUsIG9mZnNldDsKLQotCWJpbmRpbmdfdGFibGUgPSBiYXRjaF9hbGxvYyhiYXRjaCwgMzIsIDY0 KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUpOwotCi0JYmlu ZGluZ190YWJsZVswXSA9IGdlbjdfZmlsbF9zdXJmYWNlX3N0YXRlKGJhdGNoLCBkc3QsIEdFTjdf U1VSRkFDRUZPUk1BVF9SOF9VTk9STSwgMSk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0 aWMgdWludDMyX3QKLWdlbjdfZmlsbF9tZWRpYV9rZXJuZWwoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwKLQkJY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sCi0JCXNpemVfdCBzaXpl KQotewotCXVpbnQzMl90IG9mZnNldDsKLQotCW9mZnNldCA9IGJhdGNoX2NvcHkoYmF0Y2gsIGtl cm5lbCwgc2l6ZSwgNjQpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90 Ci1nZW43X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Ioc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwgc3RydWN0IGlndF9idWYgKmRzdCwKLQkJCSAgICAgICBjb25zdCB1aW50MzJfdCBr ZXJuZWxbXVs0XSwgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IGdlbjdfaW50ZXJmYWNlX2Rlc2Ny aXB0b3JfZGF0YSAqaWRkOwotCXVpbnQzMl90IG9mZnNldDsKLQl1aW50MzJfdCBiaW5kaW5nX3Rh YmxlX29mZnNldCwga2VybmVsX29mZnNldDsKLQotCWJpbmRpbmdfdGFibGVfb2Zmc2V0ID0gZ2Vu N19maWxsX2JpbmRpbmdfdGFibGUoYmF0Y2gsIGRzdCk7Ci0Ja2VybmVsX29mZnNldCA9IGdlbjdf ZmlsbF9tZWRpYV9rZXJuZWwoYmF0Y2gsIGtlcm5lbCwgc2l6ZSk7Ci0KLQlpZGQgPSBiYXRjaF9h bGxvYyhiYXRjaCwgc2l6ZW9mKCppZGQpLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJh dGNoLCBpZGQpOwotCi0JaWRkLT5kZXNjMC5rZXJuZWxfc3RhcnRfcG9pbnRlciA9IChrZXJuZWxf b2Zmc2V0ID4+IDYpOwotCi0JaWRkLT5kZXNjMS5zaW5nbGVfcHJvZ3JhbV9mbG93ID0gMTsKLQlp ZGQtPmRlc2MxLmZsb2F0aW5nX3BvaW50X21vZGUgPSBHRU43X0ZMT0FUSU5HX1BPSU5UX0lFRUVf NzU0OwotCi0JaWRkLT5kZXNjMi5zYW1wbGVyX2NvdW50ID0gMDsgICAgICAvKiAwIHNhbXBsZXJz IHVzZWQgKi8KLQlpZGQtPmRlc2MyLnNhbXBsZXJfc3RhdGVfcG9pbnRlciA9IDA7Ci0KLQlpZGQt PmRlc2MzLmJpbmRpbmdfdGFibGVfZW50cnlfY291bnQgPSAwOwotCWlkZC0+ZGVzYzMuYmluZGlu Z190YWJsZV9wb2ludGVyID0gKGJpbmRpbmdfdGFibGVfb2Zmc2V0ID4+IDUpOwotCi0JaWRkLT5k ZXNjNC5jb25zdGFudF91cmJfZW50cnlfcmVhZF9vZmZzZXQgPSAwOwotCWlkZC0+ZGVzYzQuY29u c3RhbnRfdXJiX2VudHJ5X3JlYWRfbGVuZ3RoID0gMTsgLyogZ3JmIDEgKi8KLQotCXJldHVybiBv ZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW43X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JT1VUX0JBVENIKEdFTjdfU1RBVEVf QkFTRV9BRERSRVNTIHwgKDEwIC0gMikpOwotCi0JLyogZ2VuZXJhbCAqLwotCU9VVF9CQVRDSCgw KTsKLQotCS8qIHN1cmZhY2UgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01B SU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogZHluYW1pYyAq LwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwg QkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBpbmRpcmVjdCAqLwotCU9VVF9CQVRDSCgwKTsK LQotCS8qIGluc3RydWN0aW9uICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9N QUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGdlbmVyYWwv ZHluYW1pYy9pbmRpcmVjdC9pbnN0cnVjdGlvbiBhY2Nlc3MgQm91bmQgKi8KLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLX0KLQotc3RhdGljIHZvaWQK LWdlbjdfZW1pdF92ZmVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsK LQlPVVRfQkFUQ0goR0VON19NRURJQV9WRkVfU1RBVEUgfCAoOCAtIDIpKTsKLQotCS8qIHNjcmF0 Y2ggYnVmZmVyICovCi0JT1VUX0JBVENIKDApOwotCi0JLyogbnVtYmVyIG9mIHRocmVhZHMgJiB1 cmIgZW50cmllcyAqLwotCU9VVF9CQVRDSCgxIDw8IDE2IHwKLQkJMiA8PCA4KTsKLQotCU9VVF9C QVRDSCgwKTsKLQotCS8qIHVyYiBlbnRyeSBzaXplICYgY3VyYmUgc2l6ZSAqLwotCU9VVF9CQVRD SCgyIDw8IDE2IHwgCS8qIGluIDI1NiBiaXRzIHVuaXQgKi8KLQkJMik7CQkvKiBpbiAyNTYgYml0 cyB1bml0ICovCi0KLQkvKiBzY29yZWJvYXJkICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW43X2VtaXRfY3VyYmVf bG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBjdXJiZV9idWZm ZXIpCi17Ci0JT1VUX0JBVENIKEdFTjdfTUVESUFfQ1VSQkVfTE9BRCB8ICg0IC0gMikpOwotCU9V VF9CQVRDSCgwKTsKLQkvKiBjdXJiZSB0b3RhbCBkYXRhIGxlbmd0aCAqLwotCU9VVF9CQVRDSCg2 NCk7Ci0JLyogY3VyYmUgZGF0YSBzdGFydCBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHlu YW1pY3MgYmFzZSBhZGRyZXNzICovCi0JT1VUX0JBVENIKGN1cmJlX2J1ZmZlcik7Ci19Ci0KLXN0 YXRpYyB2b2lkCi1nZW43X2VtaXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcikKLXsK LQlPVVRfQkFUQ0goR0VON19NRURJQV9JTlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FEIHwgKDQgLSAy KSk7Ci0JT1VUX0JBVENIKDApOwotCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGRhdGEgbGVuZ3Ro ICovCi0JT1VUX0JBVENIKHNpemVvZihzdHJ1Y3QgZ2VuN19pbnRlcmZhY2VfZGVzY3JpcHRvcl9k YXRhKSk7Ci0JLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8g dGhlIGR5bmFtaWNzIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSChpbnRlcmZhY2VfZGVzY3Jp cHRvcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW43X2VtaXRfbWVkaWFfb2JqZWN0cyhzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJdW5zaWduZWQgeCwgdW5zaWduZWQgeSwKLQkJ CXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCi17Ci0JaW50IGksIGo7Ci0KLQlmb3Ig KGkgPSAwOyBpIDwgd2lkdGggLyAxNjsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBoZWlnaHQg LyAxNjsgaisrKSB7Ci0JCQlPVVRfQkFUQ0goR0VON19NRURJQV9PQkpFQ1QgfCAoOCAtIDIpKTsK LQotCQkJLyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICovCi0JCQlPVVRfQkFUQ0goMCk7 Ci0KLQkJCS8qIHdpdGhvdXQgaW5kaXJlY3QgZGF0YSAqLwotCQkJT1VUX0JBVENIKDApOwotCQkJ T1VUX0JBVENIKDApOwotCi0JCQkvKiBzY29yZWJvYXJkICovCi0JCQlPVVRfQkFUQ0goMCk7Ci0J CQlPVVRfQkFUQ0goMCk7Ci0KLQkJCS8qIGlubGluZSBkYXRhICh4b2Zmc2V0LCB5b2Zmc2V0KSAq LwotCQkJT1VUX0JBVENIKHggKyBpICogMTYpOwotCQkJT1VUX0JBVENIKHkgKyBqICogMTYpOwot CQl9Ci0JfQotfQotCiAvKgogICogVGhpcyBzZXRzIHVwIHRoZSBtZWRpYSBwaXBlbGluZSwKICAq CmRpZmYgLS1naXQgYS9saWIvbWVkaWFfZmlsbF9nZW44LmMgYi9saWIvbWVkaWFfZmlsbF9nZW44 LmMKaW5kZXggNGE4ZmU1YTIuLjQyNzA5OTdlIDEwMDY0NAotLS0gYS9saWIvbWVkaWFfZmlsbF9n ZW44LmMKKysrIGIvbGliL21lZGlhX2ZpbGxfZ2VuOC5jCkBAIC01LDcgKzUsNyBAQAogI2luY2x1 ZGUgImdlbjhfbWVkaWEuaCIKICNpbmNsdWRlICJpbnRlbF9yZWcuaCIKICNpbmNsdWRlICJkcm10 ZXN0LmgiCi0KKyNpbmNsdWRlICJncHVfZmlsbC5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogCiAK QEAgLTIzLDI5MyArMjMsNyBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgbWVkaWFfa2VybmVsW11b NF0gPSB7CiAJeyAweDA3ODAwMDMxLCAweDIwMDAwYTQwLCAweDBlMDAwZTAwLCAweDgyMDAwMDEw IH0sCiB9OwogCi1zdGF0aWMgdWludDMyX3QKLWJhdGNoX3VzZWQoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCkKLXsKLQlyZXR1cm4gYmF0Y2gtPnB0ciAtIGJhdGNoLT5idWZmZXI7Ci19 Ci0KLXN0YXRpYyB1aW50MzJfdAotYmF0Y2hfYWxpZ24oc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfdXNl ZChiYXRjaCk7Ci0Jb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBhbGlnbik7Ci0JYmF0Y2gtPnB0ciA9 IGJhdGNoLT5idWZmZXIgKyBvZmZzZXQ7Ci0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZv aWQgKgotYmF0Y2hfYWxsb2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMy X3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfYWxp Z24oYmF0Y2gsIGFsaWduKTsKLQliYXRjaC0+cHRyICs9IHNpemU7Ci0JcmV0dXJuIG1lbXNldChi YXRjaC0+YnVmZmVyICsgb2Zmc2V0LCAwLCBzaXplKTsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1i YXRjaF9vZmZzZXQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdm9pZCAqcHRyKQot ewotCXJldHVybiAodWludDhfdCAqKXB0ciAtIGJhdGNoLT5idWZmZXI7Ci19Ci0KLXN0YXRpYyB1 aW50MzJfdAotYmF0Y2hfY29weShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25z dCB2b2lkICpwdHIsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGFsaWduKQotewotCXJldHVybiBi YXRjaF9vZmZzZXQoYmF0Y2gsIG1lbWNweShiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZSwgYWxpZ24p LCBwdHIsIHNpemUpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfcmVuZGVyX2ZsdXNoKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGJhdGNoX2VuZCkKLXsKLQlpbnQg cmV0OwotCi0JcmV0ID0gZHJtX2ludGVsX2JvX3N1YmRhdGEoYmF0Y2gtPmJvLCAwLCA0MDk2LCBi YXRjaC0+YnVmZmVyKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IGRybV9pbnRlbF9ib19tcmJf ZXhlYyhiYXRjaC0+Ym8sIGJhdGNoX2VuZCwKLQkJCQkJTlVMTCwgMCwgMCwgMCk7Ci0JaWd0X2Fz c2VydChyZXQgPT0gMCk7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuOF9maWxsX2N1cmJlX2J1 ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQl1aW50OF90IGNv bG9yKQotewotCXVpbnQ4X3QgKmN1cmJlX2J1ZmZlcjsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0KLQlj dXJiZV9idWZmZXIgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKHVpbnQzMl90KSAqIDgsIDY0 KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGN1cmJlX2J1ZmZlcik7Ci0JKmN1cmJl X2J1ZmZlciA9IGNvbG9yOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90 Ci1nZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAotCQkJc3RydWN0IGlndF9idWYgKmJ1ZiwKLQkJCXVpbnQzMl90IGZvcm1hdCwKLQkJCWludCBp c19kc3QpCi17Ci0Jc3RydWN0IGdlbjhfc3VyZmFjZV9zdGF0ZSAqc3M7Ci0JdWludDMyX3Qgd3Jp dGVfZG9tYWluLCByZWFkX2RvbWFpbiwgb2Zmc2V0OwotCWludCByZXQ7Ci0KLQlpZiAoaXNfZHN0 KSB7Ci0JCXdyaXRlX2RvbWFpbiA9IHJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRF UjsKLQl9IGVsc2UgewotCQl3cml0ZV9kb21haW4gPSAwOwotCQlyZWFkX2RvbWFpbiA9IEk5MTVf R0VNX0RPTUFJTl9TQU1QTEVSOwotCX0KLQotCXNzID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVv Zigqc3MpLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcyk7Ci0KLQlzcy0+ c3MwLnN1cmZhY2VfdHlwZSA9IEdFTjhfU1VSRkFDRV8yRDsKLQlzcy0+c3MwLnN1cmZhY2VfZm9y bWF0ID0gZm9ybWF0OwotCXNzLT5zczAucmVuZGVyX2NhY2hlX3JlYWRfd3JpdGUgPSAxOwotCXNz LT5zczAudmVydGljYWxfYWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLwotCXNzLT5zczAuaG9y aXpvbnRhbF9hbGlnbm1lbnQgPSAxOyAvKiBhbGlnbiA0ICovCi0KLQlpZiAoYnVmLT50aWxpbmcg PT0gSTkxNV9USUxJTkdfWCkKLQkJc3MtPnNzMC50aWxlZF9tb2RlID0gMjsKLQllbHNlIGlmIChi dWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQotCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAzOwot Ci0Jc3MtPnNzOC5iYXNlX2FkZHIgPSBidWYtPmJvLT5vZmZzZXQ7Ci0KLQlyZXQgPSBkcm1faW50 ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcykg KyA4ICogNCwKLQkJCQlidWYtPmJvLCAwLAotCQkJCXJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4p OwotCWlndF9hc3NlcnQocmV0ID09IDApOwotCi0Jc3MtPnNzMi5oZWlnaHQgPSBpZ3RfYnVmX2hl aWdodChidWYpIC0gMTsKLQlzcy0+c3MyLndpZHRoICA9IGlndF9idWZfd2lkdGgoYnVmKSAtIDE7 Ci0Jc3MtPnNzMy5waXRjaCAgPSBidWYtPnN0cmlkZSAtIDE7Ci0KLQlzcy0+c3M3LnNoYWRlcl9j aGFuZWxfc2VsZWN0X3IgPSA0OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfZyA9IDU7 Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9iID0gNjsKLQlzcy0+c3M3LnNoYWRlcl9j aGFuZWxfc2VsZWN0X2EgPSA3OwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQz Ml90Ci1nZW44X2ZpbGxfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAotCQkJc3RydWN0IGlndF9idWYgKmRzdCkKLXsKLQl1aW50MzJfdCAqYmluZGluZ190YWJs ZSwgb2Zmc2V0OwotCi0JYmluZGluZ190YWJsZSA9IGJhdGNoX2FsbG9jKGJhdGNoLCAzMiwgNjQp OwotCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgYmluZGluZ190YWJsZSk7Ci0KLQliaW5k aW5nX3RhYmxlWzBdID0gZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoYmF0Y2gsIGRzdCwgR0VOOF9T VVJGQUNFRk9STUFUX1I4X1VOT1JNLCAxKTsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRp YyB1aW50MzJfdAotZ2VuOF9maWxsX21lZGlhX2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLAotCQljb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwKLQkJc2l6ZV90IHNpemUp Ci17Ci0JdWludDMyX3Qgb2Zmc2V0OwotCi0Jb2Zmc2V0ID0gYmF0Y2hfY29weShiYXRjaCwga2Vy bmVsLCBzaXplLCA2NCk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMyX3QK LWdlbjhfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQotewotCXN0cnVjdCBnZW44X2ludGVyZmFjZV9k ZXNjcmlwdG9yX2RhdGEgKmlkZDsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3QgYmluZGlu Z190YWJsZV9vZmZzZXQsIGtlcm5lbF9vZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlX29mZnNldCA9 IGdlbjhfZmlsbF9iaW5kaW5nX3RhYmxlKGJhdGNoLCBkc3QpOwotCWtlcm5lbF9vZmZzZXQgPSBn ZW44X2ZpbGxfbWVkaWFfa2VybmVsKGJhdGNoLCBtZWRpYV9rZXJuZWwsIHNpemVvZihtZWRpYV9r ZXJuZWwpKTsKLQotCWlkZCA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKmlkZCksIDY0KTsK LQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGlkZCk7Ci0KLQlpZGQtPmRlc2MwLmtlcm5l bF9zdGFydF9wb2ludGVyID0gKGtlcm5lbF9vZmZzZXQgPj4gNik7Ci0KLQlpZGQtPmRlc2MyLnNp bmdsZV9wcm9ncmFtX2Zsb3cgPSAxOwotCWlkZC0+ZGVzYzIuZmxvYXRpbmdfcG9pbnRfbW9kZSA9 IEdFTjhfRkxPQVRJTkdfUE9JTlRfSUVFRV83NTQ7Ci0KLQlpZGQtPmRlc2MzLnNhbXBsZXJfY291 bnQgPSAwOyAgICAgIC8qIDAgc2FtcGxlcnMgdXNlZCAqLwotCWlkZC0+ZGVzYzMuc2FtcGxlcl9z dGF0ZV9wb2ludGVyID0gMDsKLQotCWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9lbnRyeV9jb3Vu dCA9IDA7Ci0JaWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxlX3BvaW50ZXIgPSAoYmluZGluZ190YWJs ZV9vZmZzZXQgPj4gNSk7Ci0KLQlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX29m ZnNldCA9IDA7Ci0JaWRkLT5kZXNjNS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9sZW5ndGggPSAx OyAvKiBncmYgMSAqLwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhf ZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkK LXsKLQlPVVRfQkFUQ0goR0VOOF9TVEFURV9CQVNFX0FERFJFU1MgfCAoMTYgLSAyKSk7Ci0KLQkv KiBnZW5lcmFsICovCi0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRf QkFUQ0goMCk7Ci0KLQkvKiBzdGF0ZWxlc3MgZGF0YSBwb3J0ICovCi0JT1VUX0JBVENIKDAgfCBC QVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIHN1cmZhY2UgKi8KLQlPVVRfUkVMT0MoYmF0Y2gt PmJvLCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0K LQkvKiBkeW5hbWljICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1JF TkRFUiB8IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwKLQkJMCwgQkFTRV9BRERSRVNTX01P RElGWSk7Ci0KLQkvKiBpbmRpcmVjdCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0KLQkvKiBpbnN0cnVjdGlvbiAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RP TUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBnZW5lcmFs IHN0YXRlIGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsKLQkvKiBk eW5hbWljIHN0YXRlIGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsKLQkv KiBpbmRpcmVjdCBvYmplY3QgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8 IDEpOwotCS8qIGludHJ1Y3Rpb24gYnVmZmVyIHNpemUsIG11c3Qgc2V0IG1vZGlmeSBlbmFibGUg Yml0LCBvdGhlcndpc2UgaXQgbWF5IHJlc3VsdCBpbiBHUFUgaGFuZyAqLwotCU9VVF9CQVRDSCgx IDw8IDEyIHwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2VtaXRfdmZlX3N0YXRlKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JT1VUX0JBVENIKEdFTjhfTUVESUFfVkZF X1NUQVRFIHwgKDkgLSAyKSk7Ci0KLQkvKiBzY3JhdGNoIGJ1ZmZlciAqLwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQkvKiBudW1iZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVz ICovCi0JT1VUX0JBVENIKDEgPDwgMTYgfAotCQkyIDw8IDgpOwotCi0JT1VUX0JBVENIKDApOwot Ci0JLyogdXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICovCi0JT1VUX0JBVENIKDIgPDwgMTYg fAotCQkyKTsKLQotCS8qIHNjb3JlYm9hcmQgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9jdXJiZV9s b2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGN1cmJlX2J1ZmZl cikKLXsKLQlPVVRfQkFUQ0goR0VOOF9NRURJQV9DVVJCRV9MT0FEIHwgKDQgLSAyKSk7Ci0JT1VU X0JBVENIKDApOwotCS8qIGN1cmJlIHRvdGFsIGRhdGEgbGVuZ3RoICovCi0JT1VUX0JBVENIKDY0 KTsKLQkvKiBjdXJiZSBkYXRhIHN0YXJ0IGFkZHJlc3MsIGlzIHJlbGF0aXZlIHRvIHRoZSBkeW5h bWljcyBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goY3VyYmVfYnVmZmVyKTsKLX0KIAotc3Rh dGljIHZvaWQKLWdlbjhfZW1pdF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9sb2FkKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGludGVyZmFjZV9kZXNjcmlwdG9yKQotewot CU9VVF9CQVRDSChHRU44X01FRElBX0lOVEVSRkFDRV9ERVNDUklQVE9SX0xPQUQgfCAoNCAtIDIp KTsKLQlPVVRfQkFUQ0goMCk7Ci0JLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgZGF0YSBsZW5ndGgg Ki8KLQlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVjdCBnZW44X2ludGVyZmFjZV9kZXNjcmlwdG9yX2Rh dGEpKTsKLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0 aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCi0JT1VUX0JBVENIKGludGVyZmFjZV9kZXNjcmlw dG9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9tZWRpYV9zdGF0ZV9mbHVzaChzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU44X01FRElBX1NU QVRFX0ZMVVNIIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotfQotCi1zdGF0aWMgdm9pZAot Z2VuOF9lbWl0X21lZGlhX29iamVjdHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK LQkJCXVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCi0JCQl1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg aGVpZ2h0KQotewotCWludCBpLCBqOwotCi0JZm9yIChpID0gMDsgaSA8IHdpZHRoIC8gMTY7IGkr KykgewotCQlmb3IgKGogPSAwOyBqIDwgaGVpZ2h0IC8gMTY7IGorKykgewotCQkJT1VUX0JBVENI KEdFTjhfTUVESUFfT0JKRUNUIHwgKDggLSAyKSk7Ci0KLQkJCS8qIGludGVyZmFjZSBkZXNjcmlw dG9yIG9mZnNldCAqLwotCQkJT1VUX0JBVENIKDApOwotCi0JCQkvKiB3aXRob3V0IGluZGlyZWN0 IGRhdGEgKi8KLQkJCU9VVF9CQVRDSCgwKTsKLQkJCU9VVF9CQVRDSCgwKTsKLQotCQkJLyogc2Nv cmVib2FyZCAqLwotCQkJT1VUX0JBVENIKDApOwotCQkJT1VUX0JBVENIKDApOwotCi0JCQkvKiBp bmxpbmUgZGF0YSAoeG9mZnNldCwgeW9mZnNldCkgKi8KLQkJCU9VVF9CQVRDSCh4ICsgaSAqIDE2 KTsKLQkJCU9VVF9CQVRDSCh5ICsgaiAqIDE2KTsKLQkJCWdlbjhfZW1pdF9tZWRpYV9zdGF0ZV9m bHVzaChiYXRjaCk7Ci0JCX0KLQl9Ci19CiAKIC8qCiAgKiBUaGlzIHNldHMgdXAgdGhlIG1lZGlh IHBpcGVsaW5lLApAQCAtMzQ5LDcgKzYzLDcgQEAgZ2VuOF9tZWRpYV9maWxsZnVuYyhzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCWJhdGNoLT5wdHIgPSAmYmF0Y2gtPmJ1ZmZlcltC QVRDSF9TVEFURV9TUExJVF07CiAKIAljdXJiZV9idWZmZXIgPSBnZW44X2ZpbGxfY3VyYmVfYnVm ZmVyX2RhdGEoYmF0Y2gsIGNvbG9yKTsKLQlpbnRlcmZhY2VfZGVzY3JpcHRvciA9IGdlbjhfZmls bF9pbnRlcmZhY2VfZGVzY3JpcHRvcihiYXRjaCwgZHN0KTsKKwlpbnRlcmZhY2VfZGVzY3JpcHRv ciA9IGdlbjhfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihiYXRjaCwgZHN0LCBtZWRpYV9rZXJu ZWwsIHNpemVvZihtZWRpYV9rZXJuZWwpKTsKIAlpZ3RfYXNzZXJ0KGJhdGNoLT5wdHIgPCAmYmF0 Y2gtPmJ1ZmZlcls0MDk1XSk7CiAKIAkvKiBtZWRpYSBwaXBlbGluZSAqLwpkaWZmIC0tZ2l0IGEv bGliL21lZGlhX2ZpbGxfZ2VuOGxwLmMgYi9saWIvbWVkaWFfZmlsbF9nZW44bHAuYwppbmRleCAx ZjhhNGFkYy4uZGNjMTE5ODIgMTAwNjQ0Ci0tLSBhL2xpYi9tZWRpYV9maWxsX2dlbjhscC5jCisr KyBiL2xpYi9tZWRpYV9maWxsX2dlbjhscC5jCkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgImdl bjhfbWVkaWEuaCIKICNpbmNsdWRlICJpbnRlbF9yZWcuaCIKICNpbmNsdWRlICJkcm10ZXN0Lmgi Ci0KKyNpbmNsdWRlICJncHVfZmlsbC5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogCiAKQEAgLTIz LDI4NiArMjMsNiBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgbWVkaWFfa2VybmVsW11bNF0gPSB7 CiAJeyAweDA3ODAwMDMxLCAweDIwMDAwYTQwLCAweDBlMDAwZTAwLCAweDgyMDAwMDEwIH0sCiB9 OwogCi1zdGF0aWMgdWludDMyX3QKLWJhdGNoX3VzZWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCkKLXsKLQlyZXR1cm4gYmF0Y2gtPnB0ciAtIGJhdGNoLT5idWZmZXI7Ci19Ci0KLXN0 YXRpYyB1aW50MzJfdAotYmF0Y2hfYWxpZ24oc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfdXNlZChiYXRj aCk7Ci0Jb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBhbGlnbik7Ci0JYmF0Y2gtPnB0ciA9IGJhdGNo LT5idWZmZXIgKyBvZmZzZXQ7Ci0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQgKgot YmF0Y2hfYWxsb2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgc2l6 ZSwgdWludDMyX3QgYWxpZ24pCi17Ci0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfYWxpZ24oYmF0 Y2gsIGFsaWduKTsKLQliYXRjaC0+cHRyICs9IHNpemU7Ci0JcmV0dXJuIG1lbXNldChiYXRjaC0+ YnVmZmVyICsgb2Zmc2V0LCAwLCBzaXplKTsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF9v ZmZzZXQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdm9pZCAqcHRyKQotewotCXJl dHVybiAodWludDhfdCAqKXB0ciAtIGJhdGNoLT5idWZmZXI7Ci19Ci0KLXN0YXRpYyB1aW50MzJf dAotYmF0Y2hfY29weShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCB2b2lk ICpwdHIsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGFsaWduKQotewotCXJldHVybiBiYXRjaF9v ZmZzZXQoYmF0Y2gsIG1lbWNweShiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZSwgYWxpZ24pLCBwdHIs IHNpemUpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfcmVuZGVyX2ZsdXNoKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGJhdGNoX2VuZCkKLXsKLQlpbnQgcmV0Owot Ci0JcmV0ID0gZHJtX2ludGVsX2JvX3N1YmRhdGEoYmF0Y2gtPmJvLCAwLCA0MDk2LCBiYXRjaC0+ YnVmZmVyKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IGRybV9pbnRlbF9ib19tcmJfZXhlYyhi YXRjaC0+Ym8sIGJhdGNoX2VuZCwKLQkJCQkJTlVMTCwgMCwgMCwgMCk7Ci0JaWd0X2Fzc2VydChy ZXQgPT0gMCk7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuOF9maWxsX2N1cmJlX2J1ZmZlcl9k YXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQl1aW50OF90IGNvbG9yKQot ewotCXVpbnQ4X3QgKmN1cmJlX2J1ZmZlcjsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0KLQljdXJiZV9i dWZmZXIgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKHVpbnQzMl90KSAqIDgsIDY0KTsKLQlv ZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGN1cmJlX2J1ZmZlcik7Ci0JKmN1cmJlX2J1ZmZl ciA9IGNvbG9yOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1nZW44 X2ZpbGxfc3VyZmFjZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJ c3RydWN0IGlndF9idWYgKmJ1ZiwKLQkJCXVpbnQzMl90IGZvcm1hdCwKLQkJCWludCBpc19kc3Qp Ci17Ci0Jc3RydWN0IGdlbjhfc3VyZmFjZV9zdGF0ZSAqc3M7Ci0JdWludDMyX3Qgd3JpdGVfZG9t YWluLCByZWFkX2RvbWFpbiwgb2Zmc2V0OwotCWludCByZXQ7Ci0KLQlpZiAoaXNfZHN0KSB7Ci0J CXdyaXRlX2RvbWFpbiA9IHJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKLQl9 IGVsc2UgewotCQl3cml0ZV9kb21haW4gPSAwOwotCQlyZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RP TUFJTl9TQU1QTEVSOwotCX0KLQotCXNzID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigqc3Mp LCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcyk7Ci0KLQlzcy0+c3MwLnN1 cmZhY2VfdHlwZSA9IEdFTjhfU1VSRkFDRV8yRDsKLQlzcy0+c3MwLnN1cmZhY2VfZm9ybWF0ID0g Zm9ybWF0OwotCXNzLT5zczAucmVuZGVyX2NhY2hlX3JlYWRfd3JpdGUgPSAxOwotCXNzLT5zczAu dmVydGljYWxfYWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLwotCXNzLT5zczAuaG9yaXpvbnRh bF9hbGlnbm1lbnQgPSAxOyAvKiBhbGlnbiA0ICovCi0KLQlpZiAoYnVmLT50aWxpbmcgPT0gSTkx NV9USUxJTkdfWCkKLQkJc3MtPnNzMC50aWxlZF9tb2RlID0gMjsKLQllbHNlIGlmIChidWYtPnRp bGluZyA9PSBJOTE1X1RJTElOR19ZKQotCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAzOwotCi0Jc3Mt PnNzOC5iYXNlX2FkZHIgPSBidWYtPmJvLT5vZmZzZXQ7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9f ZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcykgKyA4ICog NCwKLQkJCQlidWYtPmJvLCAwLAotCQkJCXJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4pOwotCWln dF9hc3NlcnQocmV0ID09IDApOwotCi0Jc3MtPnNzMi5oZWlnaHQgPSBpZ3RfYnVmX2hlaWdodChi dWYpIC0gMTsKLQlzcy0+c3MyLndpZHRoICA9IGlndF9idWZfd2lkdGgoYnVmKSAtIDE7Ci0Jc3Mt PnNzMy5waXRjaCAgPSBidWYtPnN0cmlkZSAtIDE7Ci0KLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxf c2VsZWN0X3IgPSA0OwotCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfZyA9IDU7Ci0Jc3Mt PnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9iID0gNjsKLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxf c2VsZWN0X2EgPSA3OwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1n ZW44X2ZpbGxfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAot CQkJc3RydWN0IGlndF9idWYgKmRzdCkKLXsKLQl1aW50MzJfdCAqYmluZGluZ190YWJsZSwgb2Zm c2V0OwotCi0JYmluZGluZ190YWJsZSA9IGJhdGNoX2FsbG9jKGJhdGNoLCAzMiwgNjQpOwotCW9m ZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgYmluZGluZ190YWJsZSk7Ci0KLQliaW5kaW5nX3Rh YmxlWzBdID0gZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoYmF0Y2gsIGRzdCwgR0VOOF9TVVJGQUNF Rk9STUFUX1I4X1VOT1JNLCAxKTsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50 MzJfdAotZ2VuOF9maWxsX21lZGlhX2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAotCQljb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwKLQkJc2l6ZV90IHNpemUpCi17Ci0J dWludDMyX3Qgb2Zmc2V0OwotCi0Jb2Zmc2V0ID0gYmF0Y2hfY29weShiYXRjaCwga2VybmVsLCBz aXplLCA2NCk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdlbjhf ZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQotewotCXN0cnVjdCBnZW44X2ludGVyZmFjZV9kZXNjcmlw dG9yX2RhdGEgKmlkZDsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3QgYmluZGluZ190YWJs ZV9vZmZzZXQsIGtlcm5lbF9vZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlX29mZnNldCA9IGdlbjhf ZmlsbF9iaW5kaW5nX3RhYmxlKGJhdGNoLCBkc3QpOwotCWtlcm5lbF9vZmZzZXQgPSBnZW44X2Zp bGxfbWVkaWFfa2VybmVsKGJhdGNoLCBtZWRpYV9rZXJuZWwsIHNpemVvZihtZWRpYV9rZXJuZWwp KTsKLQotCWlkZCA9IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKmlkZCksIDY0KTsKLQlvZmZz ZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGlkZCk7Ci0KLQlpZGQtPmRlc2MwLmtlcm5lbF9zdGFy dF9wb2ludGVyID0gKGtlcm5lbF9vZmZzZXQgPj4gNik7Ci0KLQlpZGQtPmRlc2MyLnNpbmdsZV9w cm9ncmFtX2Zsb3cgPSAxOwotCWlkZC0+ZGVzYzIuZmxvYXRpbmdfcG9pbnRfbW9kZSA9IEdFTjhf RkxPQVRJTkdfUE9JTlRfSUVFRV83NTQ7Ci0KLQlpZGQtPmRlc2MzLnNhbXBsZXJfY291bnQgPSAw OyAgICAgIC8qIDAgc2FtcGxlcnMgdXNlZCAqLwotCWlkZC0+ZGVzYzMuc2FtcGxlcl9zdGF0ZV9w b2ludGVyID0gMDsKLQotCWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDA7 Ci0JaWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxlX3BvaW50ZXIgPSAoYmluZGluZ190YWJsZV9vZmZz ZXQgPj4gNSk7Ci0KLQlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX29mZnNldCA9 IDA7Ci0JaWRkLT5kZXNjNS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9sZW5ndGggPSAxOyAvKiBn cmYgMSAqLwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9z dGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlP VVRfQkFUQ0goR0VOOF9TVEFURV9CQVNFX0FERFJFU1MgfCAoMTYgLSAyKSk7Ci0KLQkvKiBnZW5l cmFsICovCi0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRfQkFUQ0go MCk7Ci0KLQkvKiBzdGF0ZWxlc3MgZGF0YSBwb3J0ICovCi0JT1VUX0JBVENIKDAgfCBCQVNFX0FE RFJFU1NfTU9ESUZZKTsKLQotCS8qIHN1cmZhY2UgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJ OTE1X0dFTV9ET01BSU5fU0FNUExFUiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBk eW5hbWljICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiB8 IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwKLQkJMCwgQkFTRV9BRERSRVNTX01PRElGWSk7 Ci0KLQkvKiBpbmRpcmVjdCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQkv KiBpbnN0cnVjdGlvbiAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9J TlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0KLQkvKiBnZW5lcmFsIHN0YXRl IGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsKLQkvKiBkeW5hbWlj IHN0YXRlIGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsKLQkvKiBpbmRp cmVjdCBvYmplY3QgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOwot CS8qIGludHJ1Y3Rpb24gYnVmZmVyIHNpemUsIG11c3Qgc2V0IG1vZGlmeSBlbmFibGUgYml0LCBv dGhlcndpc2UgaXQgbWF5IHJlc3VsdCBpbiBHUFUgaGFuZyAqLwotCU9VVF9CQVRDSCgxIDw8IDEy IHwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2VtaXRfdmZlX3N0YXRlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JT1VUX0JBVENIKEdFTjhfTUVESUFfVkZFX1NUQVRF IHwgKDkgLSAyKSk7Ci0KLQkvKiBzY3JhdGNoIGJ1ZmZlciAqLwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0KLQkvKiBudW1iZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVzICovCi0J T1VUX0JBVENIKDEgPDwgMTYgfAotCQkyIDw8IDgpOwotCi0JT1VUX0JBVENIKDApOwotCi0JLyog dXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICovCi0JT1VUX0JBVENIKDIgPDwgMTYgfAotCQky KTsKLQotCS8qIHNjb3JlYm9hcmQgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9jdXJiZV9sb2FkKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGN1cmJlX2J1ZmZlcikKLXsK LQlPVVRfQkFUQ0goR0VOOF9NRURJQV9DVVJCRV9MT0FEIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENI KDApOwotCS8qIGN1cmJlIHRvdGFsIGRhdGEgbGVuZ3RoICovCi0JT1VUX0JBVENIKDY0KTsKLQkv KiBjdXJiZSBkYXRhIHN0YXJ0IGFkZHJlc3MsIGlzIHJlbGF0aXZlIHRvIHRoZSBkeW5hbWljcyBi YXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goY3VyYmVfYnVmZmVyKTsKLX0KLQotc3RhdGljIHZv aWQKLWdlbjhfZW1pdF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGludGVyZmFjZV9kZXNjcmlwdG9yKQotewotCU9VVF9C QVRDSChHRU44X01FRElBX0lOVEVSRkFDRV9ERVNDUklQVE9SX0xPQUQgfCAoNCAtIDIpKTsKLQlP VVRfQkFUQ0goMCk7Ci0JLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgZGF0YSBsZW5ndGggKi8KLQlP VVRfQkFUQ0goc2l6ZW9mKHN0cnVjdCBnZW44X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEpKTsK LQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHlu YW1pY3MgYmFzZSBhZGRyZXNzICovCi0JT1VUX0JBVENIKGludGVyZmFjZV9kZXNjcmlwdG9yKTsK LX0KLQotc3RhdGljIHZvaWQKLWdlbjhscF9lbWl0X21lZGlhX29iamVjdHMoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXVuc2lnbmVkIHgsIHVuc2lnbmVkIHksCi0JCQl1bnNp Z25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotewotCWludCBpLCBqOwotCi0JZm9yIChpID0g MDsgaSA8IHdpZHRoIC8gMTY7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgaGVpZ2h0IC8gMTY7 IGorKykgewotCQkJT1VUX0JBVENIKEdFTjhfTUVESUFfT0JKRUNUIHwgKDggLSAyKSk7Ci0KLQkJ CS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIG9mZnNldCAqLwotCQkJT1VUX0JBVENIKDApOwotCi0J CQkvKiB3aXRob3V0IGluZGlyZWN0IGRhdGEgKi8KLQkJCU9VVF9CQVRDSCgwKTsKLQkJCU9VVF9C QVRDSCgwKTsKLQotCQkJLyogc2NvcmVib2FyZCAqLwotCQkJT1VUX0JBVENIKDApOwotCQkJT1VU X0JBVENIKDApOwotCi0JCQkvKiBpbmxpbmUgZGF0YSAoeG9mZnNldCwgeW9mZnNldCkgKi8KLQkJ CU9VVF9CQVRDSCh4ICsgaSAqIDE2KTsKLQkJCU9VVF9CQVRDSCh5ICsgaiAqIDE2KTsKLQkJfQot CX0KLX0KLQogLyoKICAqIFRoaXMgc2V0cyB1cCB0aGUgbWVkaWEgcGlwZWxpbmUsCiAgKgpAQCAt MzQxLDcgKzYxLDcgQEAgZ2VuOGxwX21lZGlhX2ZpbGxmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCiAJYmF0Y2gtPnB0ciA9ICZiYXRjaC0+YnVmZmVyW0JBVENIX1NUQVRFX1NQ TElUXTsKIAogCWN1cmJlX2J1ZmZlciA9IGdlbjhfZmlsbF9jdXJiZV9idWZmZXJfZGF0YShiYXRj aCwgY29sb3IpOwotCWludGVyZmFjZV9kZXNjcmlwdG9yID0gZ2VuOF9maWxsX2ludGVyZmFjZV9k ZXNjcmlwdG9yKGJhdGNoLCBkc3QpOworCWludGVyZmFjZV9kZXNjcmlwdG9yID0gZ2VuOF9maWxs X2ludGVyZmFjZV9kZXNjcmlwdG9yKGJhdGNoLCBkc3QsIG1lZGlhX2tlcm5lbCwgc2l6ZW9mKG1l ZGlhX2tlcm5lbCkpOwogCWlndF9hc3NlcnQoYmF0Y2gtPnB0ciA8ICZiYXRjaC0+YnVmZmVyWzQw OTVdKTsKIAogCS8qIG1lZGlhIHBpcGVsaW5lICovCmRpZmYgLS1naXQgYS9saWIvbWVkaWFfZmls bF9nZW45LmMgYi9saWIvbWVkaWFfZmlsbF9nZW45LmMKaW5kZXggM2ZkMjE4MTkuLjZhY2NkYmU0 IDEwMDY0NAotLS0gYS9saWIvbWVkaWFfZmlsbF9nZW45LmMKKysrIGIvbGliL21lZGlhX2ZpbGxf Z2VuOS5jCkBAIC00LDExICs0LDkgQEAKICNpbmNsdWRlICJtZWRpYV9maWxsLmgiCiAjaW5jbHVk ZSAiZ2VuOF9tZWRpYS5oIgogI2luY2x1ZGUgImludGVsX3JlZy5oIgotCisjaW5jbHVkZSAiZ3B1 X2ZpbGwuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KIAotI2RlZmluZSBBTElHTih4LCB5KSAoKCh4 KSArICh5KS0xKSAmIH4oKHkpLTEpKQotCiBzdGF0aWMgY29uc3QgdWludDMyX3QgbWVkaWFfa2Vy bmVsW11bNF0gPSB7CiAJeyAweDAwNDAwMDAxLCAweDIwMjAyMjg4LCAweDAwMDAwMDIwLCAweDAw MDAwMDAwIH0sCiAJeyAweDAwNjAwMDAxLCAweDIwODAwMjA4LCAweDAwOGQwMDAwLCAweDAwMDAw MDAwIH0sCkBAIC0yMywyOTggKzIxLDYgQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IG1lZGlhX2tl cm5lbFtdWzRdID0gewogCXsgMHgwNzgwMDAzMSwgMHgyMDAwMGE0MCwgMHgwZTAwMGUwMCwgMHg4 MjAwMDAxMCB9LAogfTsKIAotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF91c2VkKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JcmV0dXJuIGJhdGNoLT5wdHIgLSBiYXRjaC0+YnVm ZmVyOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWJhdGNoX2FsaWduKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGFsaWduKQotewotCXVpbnQzMl90IG9mZnNldCA9IGJh dGNoX3VzZWQoYmF0Y2gpOwotCW9mZnNldCA9IEFMSUdOKG9mZnNldCwgYWxpZ24pOwotCWJhdGNo LT5wdHIgPSBiYXRjaC0+YnVmZmVyICsgb2Zmc2V0OwotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0 YXRpYyB2b2lkICoKLWJhdGNoX2FsbG9jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs IHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGFsaWduKQotewotCXVpbnQzMl90IG9mZnNldCA9IGJh dGNoX2FsaWduKGJhdGNoLCBhbGlnbik7Ci0JYmF0Y2gtPnB0ciArPSBzaXplOwotCXJldHVybiBt ZW1zZXQoYmF0Y2gtPmJ1ZmZlciArIG9mZnNldCwgMCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB1aW50 MzJfdAotYmF0Y2hfb2Zmc2V0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHZvaWQg KnB0cikKLXsKLQlyZXR1cm4gKHVpbnQ4X3QgKilwdHIgLSBiYXRjaC0+YnVmZmVyOwotfQotCi1z dGF0aWMgdWludDMyX3QKLWJhdGNoX2NvcHkoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwgY29uc3Qgdm9pZCAqcHRyLCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikKLXsKLQly ZXR1cm4gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBtZW1jcHkoYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemUs IGFsaWduKSwgcHRyLCBzaXplKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X3JlbmRlcl9mbHVz aChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBiYXRjaF9lbmQpCi17 Ci0JaW50IHJldDsKLQotCXJldCA9IGRybV9pbnRlbF9ib19zdWJkYXRhKGJhdGNoLT5ibywgMCwg NDA5NiwgYmF0Y2gtPmJ1ZmZlcik7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBkcm1faW50ZWxf Ym9fbXJiX2V4ZWMoYmF0Y2gtPmJvLCBiYXRjaF9lbmQsCi0JCQkJCU5VTEwsIDAsIDAsIDApOwot CWFzc2VydChyZXQgPT0gMCk7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotZ2VuOF9maWxsX2N1cmJl X2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQl1aW50OF90 IGNvbG9yKQotewotCXVpbnQ4X3QgKmN1cmJlX2J1ZmZlcjsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0K LQljdXJiZV9idWZmZXIgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKHVpbnQzMl90KSAqIDgs IDY0KTsKLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGN1cmJlX2J1ZmZlcik7Ci0JKmN1 cmJlX2J1ZmZlciA9IGNvbG9yOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHVpbnQz Ml90Ci1nZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAotCQkJc3RydWN0IGlndF9idWYgKmJ1ZiwKLQkJCXVpbnQzMl90IGZvcm1hdCwKLQkJCWlu dCBpc19kc3QpCi17Ci0Jc3RydWN0IGdlbjhfc3VyZmFjZV9zdGF0ZSAqc3M7Ci0JdWludDMyX3Qg d3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbiwgb2Zmc2V0OwotCWludCByZXQ7Ci0KLQlpZiAoaXNf ZHN0KSB7Ci0JCXdyaXRlX2RvbWFpbiA9IHJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JF TkRFUjsKLQl9IGVsc2UgewotCQl3cml0ZV9kb21haW4gPSAwOwotCQlyZWFkX2RvbWFpbiA9IEk5 MTVfR0VNX0RPTUFJTl9TQU1QTEVSOwotCX0KLQotCXNzID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNp emVvZigqc3MpLCA2NCk7Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcyk7Ci0KLQlz cy0+c3MwLnN1cmZhY2VfdHlwZSA9IEdFTjhfU1VSRkFDRV8yRDsKLQlzcy0+c3MwLnN1cmZhY2Vf Zm9ybWF0ID0gZm9ybWF0OwotCXNzLT5zczAucmVuZGVyX2NhY2hlX3JlYWRfd3JpdGUgPSAxOwot CXNzLT5zczAudmVydGljYWxfYWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLwotCXNzLT5zczAu aG9yaXpvbnRhbF9hbGlnbm1lbnQgPSAxOyAvKiBhbGlnbiA0ICovCi0KLQlpZiAoYnVmLT50aWxp bmcgPT0gSTkxNV9USUxJTkdfWCkKLQkJc3MtPnNzMC50aWxlZF9tb2RlID0gMjsKLQllbHNlIGlm IChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQotCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAz OwotCi0Jc3MtPnNzOC5iYXNlX2FkZHIgPSBidWYtPmJvLT5vZmZzZXQ7Ci0KLQlyZXQgPSBkcm1f aW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJYmF0Y2hfb2Zmc2V0KGJhdGNoLCBz cykgKyA4ICogNCwKLQkJCQlidWYtPmJvLCAwLAotCQkJCXJlYWRfZG9tYWluLCB3cml0ZV9kb21h aW4pOwotCWFzc2VydChyZXQgPT0gMCk7Ci0KLQlzcy0+c3MyLmhlaWdodCA9IGlndF9idWZfaGVp Z2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGggID0gaWd0X2J1Zl93aWR0aChidWYpIC0gMTsK LQlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+c3RyaWRlIC0gMTsKLQotCXNzLT5zczcuc2hhZGVyX2No YW5lbF9zZWxlY3RfciA9IDQ7Ci0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9nID0gNTsK LQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2OwotCXNzLT5zczcuc2hhZGVyX2No YW5lbF9zZWxlY3RfYSA9IDc7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdWludDMy X3QKLWdlbjhfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsCi0JCQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQotewotCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxl LCBvZmZzZXQ7Ci0KLQliaW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIDMyLCA2NCk7 Ci0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsKLQotCWJpbmRp bmdfdGFibGVbMF0gPSBnZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShiYXRjaCwgZHN0LCBHRU44X1NV UkZBQ0VGT1JNQVRfUjhfVU5PUk0sIDEpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGlj IHVpbnQzMl90Ci1nZW44X2ZpbGxfbWVkaWFfa2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsCi0JCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLAotCQlzaXplX3Qgc2l6ZSkK LXsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSBiYXRjaF9jb3B5KGJhdGNoLCBrZXJu ZWwsIHNpemUsIDY0KTsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAot Z2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsIHN0cnVjdCBpZ3RfYnVmICpkc3QpCi17Ci0Jc3RydWN0IGdlbjhfaW50ZXJmYWNlX2Rl c2NyaXB0b3JfZGF0YSAqaWRkOwotCXVpbnQzMl90IG9mZnNldDsKLQl1aW50MzJfdCBiaW5kaW5n X3RhYmxlX29mZnNldCwga2VybmVsX29mZnNldDsKLQotCWJpbmRpbmdfdGFibGVfb2Zmc2V0ID0g Z2VuOF9maWxsX2JpbmRpbmdfdGFibGUoYmF0Y2gsIGRzdCk7Ci0Ja2VybmVsX29mZnNldCA9IGdl bjhfZmlsbF9tZWRpYV9rZXJuZWwoYmF0Y2gsIG1lZGlhX2tlcm5lbCwgc2l6ZW9mKG1lZGlhX2tl cm5lbCkpOwotCi0JaWRkID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigqaWRkKSwgNjQpOwot CW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgaWRkKTsKLQotCWlkZC0+ZGVzYzAua2VybmVs X3N0YXJ0X3BvaW50ZXIgPSAoa2VybmVsX29mZnNldCA+PiA2KTsKLQotCWlkZC0+ZGVzYzIuc2lu Z2xlX3Byb2dyYW1fZmxvdyA9IDE7Ci0JaWRkLT5kZXNjMi5mbG9hdGluZ19wb2ludF9tb2RlID0g R0VOOF9GTE9BVElOR19QT0lOVF9JRUVFXzc1NDsKLQotCWlkZC0+ZGVzYzMuc2FtcGxlcl9jb3Vu dCA9IDA7ICAgICAgLyogMCBzYW1wbGVycyB1c2VkICovCi0JaWRkLT5kZXNjMy5zYW1wbGVyX3N0 YXRlX3BvaW50ZXIgPSAwOwotCi0JaWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxlX2VudHJ5X2NvdW50 ID0gMDsKLQlpZGQtPmRlc2M0LmJpbmRpbmdfdGFibGVfcG9pbnRlciA9IChiaW5kaW5nX3RhYmxl X29mZnNldCA+PiA1KTsKLQotCWlkZC0+ZGVzYzUuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfb2Zm c2V0ID0gMDsKLQlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX2xlbmd0aCA9IDE7 IC8qIGdyZiAxICovCi0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOV9l bWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQot ewotCU9VVF9CQVRDSChHRU44X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxOSAtIDIpKTsKLQotCS8q IGdlbmVyYWwgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9VVF9C QVRDSCgwKTsKLQotCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8KLQlPVVRfQkFUQ0goMCB8IEJB U0VfQUREUkVTU19NT0RJRlkpOwotCi0JLyogc3VyZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRjaC0+ Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQot CS8qIGR5bmFtaWMgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fUkVO REVSIHwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAotCQkwLCBCQVNFX0FERFJFU1NfTU9E SUZZKTsKLQotCS8qIGluZGlyZWN0ICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQotCS8qIGluc3RydWN0aW9uICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9N QUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCS8qIGdlbmVyYWwg c3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOwotCS8qIGR5 bmFtaWMgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOwotCS8q IGluZGlyZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwg MSk7Ci0JLyogaW50cnVjdGlvbiBidWZmZXIgc2l6ZSwgbXVzdCBzZXQgbW9kaWZ5IGVuYWJsZSBi aXQsIG90aGVyd2lzZSBpdCBtYXkgcmVzdWx0IGluIEdQVSBoYW5nICovCi0JT1VUX0JBVENIKDEg PDwgMTIgfCAxKTsKLQotCS8qIEJpbmRsZXNzIHN1cmZhY2Ugc3RhdGUgYmFzZSBhZGRyZXNzICov Ci0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDB4ZmZmZmYwMDApOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9lbWl0X3ZmZV9z dGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCU9VVF9CQVRDSChHRU44 X01FRElBX1ZGRV9TVEFURSB8ICg5IC0gMikpOwotCi0JLyogc2NyYXRjaCBidWZmZXIgKi8KLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JLyogbnVtYmVyIG9mIHRocmVhZHMgJiB1 cmIgZW50cmllcyAqLwotCU9VVF9CQVRDSCgxIDw8IDE2IHwKLQkJMiA8PCA4KTsKLQotCU9VVF9C QVRDSCgwKTsKLQotCS8qIHVyYiBlbnRyeSBzaXplICYgY3VyYmUgc2l6ZSAqLwotCU9VVF9CQVRD SCgyIDw8IDE2IHwKLQkJMik7Ci0KLQkvKiBzY29yZWJvYXJkICovCi0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2Vt aXRfY3VyYmVfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBj dXJiZV9idWZmZXIpCi17Ci0JT1VUX0JBVENIKEdFTjhfTUVESUFfQ1VSQkVfTE9BRCB8ICg0IC0g MikpOwotCU9VVF9CQVRDSCgwKTsKLQkvKiBjdXJiZSB0b3RhbCBkYXRhIGxlbmd0aCAqLwotCU9V VF9CQVRDSCg2NCk7Ci0JLyogY3VyYmUgZGF0YSBzdGFydCBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0 byB0aGUgZHluYW1pY3MgYmFzZSBhZGRyZXNzICovCi0JT1VUX0JBVENIKGN1cmJlX2J1ZmZlcik7 Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2VtaXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3Jp cHRvcikKLXsKLQlPVVRfQkFUQ0goR0VOOF9NRURJQV9JTlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FE IHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGRh dGEgbGVuZ3RoICovCi0JT1VUX0JBVENIKHNpemVvZihzdHJ1Y3QgZ2VuOF9pbnRlcmZhY2VfZGVz Y3JpcHRvcl9kYXRhKSk7Ci0JLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgYWRkcmVzcywgaXMgcmVs YXRpdmUgdG8gdGhlIGR5bmFtaWNzIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSChpbnRlcmZh Y2VfZGVzY3JpcHRvcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW44X2VtaXRfbWVkaWFfc3RhdGVf Zmx1c2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKLXsKLQlPVVRfQkFUQ0goR0VO OF9NRURJQV9TVEFURV9GTFVTSCB8ICgyIC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLX0KLQotc3Rh dGljIHZvaWQKLWdlbjhfZW1pdF9tZWRpYV9vYmplY3RzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsCi0JCQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LAotCQkJdW5zaWduZWQgd2lkdGgs IHVuc2lnbmVkIGhlaWdodCkKLXsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDA7IGkgPCB3aWR0 aCAvIDE2OyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IGhlaWdodCAvIDE2OyBqKyspIHsKLQkJ CU9VVF9CQVRDSChHRU44X01FRElBX09CSkVDVCB8ICg4IC0gMikpOwotCi0JCQkvKiBpbnRlcmZh Y2UgZGVzY3JpcHRvciBvZmZzZXQgKi8KLQkJCU9VVF9CQVRDSCgwKTsKLQotCQkJLyogd2l0aG91 dCBpbmRpcmVjdCBkYXRhICovCi0JCQlPVVRfQkFUQ0goMCk7Ci0JCQlPVVRfQkFUQ0goMCk7Ci0K LQkJCS8qIHNjb3JlYm9hcmQgKi8KLQkJCU9VVF9CQVRDSCgwKTsKLQkJCU9VVF9CQVRDSCgwKTsK LQotCQkJLyogaW5saW5lIGRhdGEgKHhvZmZzZXQsIHlvZmZzZXQpICovCi0JCQlPVVRfQkFUQ0go eCArIGkgKiAxNik7Ci0JCQlPVVRfQkFUQ0goeSArIGogKiAxNik7Ci0JCQlnZW44X2VtaXRfbWVk aWFfc3RhdGVfZmx1c2goYmF0Y2gpOwotCQl9Ci0JfQotfQogCiAvKgogICogVGhpcyBzZXRzIHVw IHRoZSBtZWRpYSBwaXBlbGluZSwKQEAgLTM1NCw3ICs2MCw3IEBAIGdlbjlfbWVkaWFfZmlsbGZ1 bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAliYXRjaC0+cHRyID0gJmJhdGNo LT5idWZmZXJbQkFUQ0hfU1RBVEVfU1BMSVRdOwogCiAJY3VyYmVfYnVmZmVyID0gZ2VuOF9maWxs X2N1cmJlX2J1ZmZlcl9kYXRhKGJhdGNoLCBjb2xvcik7Ci0JaW50ZXJmYWNlX2Rlc2NyaXB0b3Ig PSBnZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3IoYmF0Y2gsIGRzdCk7CisJaW50ZXJmYWNl X2Rlc2NyaXB0b3IgPSBnZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3IoYmF0Y2gsIGRzdCwg bWVkaWFfa2VybmVsLCBzaXplb2YobWVkaWFfa2VybmVsKSk7CiAJYXNzZXJ0KGJhdGNoLT5wdHIg PCAmYmF0Y2gtPmJ1ZmZlcls0MDk1XSk7CiAKIAkvKiBtZWRpYSBwaXBlbGluZSAqLwpkaWZmIC0t Z2l0IGEvbGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCmluZGV4IGIzYjhiMTRhLi4z ODVlMDhiOSAxMDA2NDQKLS0tIGEvbGliL21lc29uLmJ1aWxkCisrKyBiL2xpYi9tZXNvbi5idWls ZApAQCAtMzAsNiArMzAsNyBAQCBsaWJfc291cmNlcyA9IFsKIAknbWVkaWFfZmlsbF9nZW45LmMn LAogCSdtZWRpYV9zcGluLmMnLAogCSdncGdwdV9maWxsLmMnLAorCSdncHVfZmlsbC5jJywKIAkn cmVuZGVyY29weV9pOTE1LmMnLAogCSdyZW5kZXJjb3B5X2k4MzAuYycsCiAJJ3JlbmRlcmNvcHlf Z2VuNi5jJywKLS0gCjIuMTQuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3Qt ZGV2Cg==