From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from yw-out-2324.google.com (yw-out-2324.google.com [74.125.46.29]) by ozlabs.org (Postfix) with ESMTP id 3F40ADDDF5 for ; Sat, 28 Jun 2008 00:31:28 +1000 (EST) Received: by yw-out-2324.google.com with SMTP id 5so212685ywh.39 for ; Fri, 27 Jun 2008 07:31:15 -0700 (PDT) Message-ID: <792f5f410806270544p69c773b9o9df4a5618d4babe1@mail.gmail.com> Date: Fri, 27 Jun 2008 13:44:08 +0100 From: "Tim Yamin" Sender: plasmaroo@gmail.com To: linuxppc-dev@ozlabs.org Subject: [PATCH]: [MPC5200] (v2) Add ATA DMA support MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_8867_26471737.1214570648812" List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , ------=_Part_8867_26471737.1214570648812 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Changes from previous version: - Add FIFO status error checking code before a DMA transaction starts and after it is completed. - Fix an incorrect check in the previous patch causing spurious "dma table too small" errors. Tim ------=_Part_8867_26471737.1214570648812 Content-Type: text/x-patch; name=1050-mpc5200-add-ATA-DMA.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fhyrrnn20 Content-Disposition: attachment; filename=1050-mpc5200-add-ATA-DMA.patch VGhpcyBwYXRjaCBhZGRzIE1ETUEvVURNQSBzdXBwb3J0ICh1c2luZyBCZXN0Q29tbSBmb3IgRE1B KSBvbiB0aGUgTVBDNTIwMApwbGF0Zm9ybS4KCkJhc2VkIGhlYXZpbHkgb24gcHJldmlvdXMgd29y ayBieSBGcmVlc2NhbGUgKEJlcm5hcmQgS3VobiwgSm9obiBSaWdieSkKYW5kIERvbWVuIFB1bmNl ci4KClVzaW5nIGEgU2FuRGlzayBFeHRyZW1lIElWIENGIGNhcmQgSSBnZXQgcmVhZCBzcGVlZHMg b2YgYXBwcm94aW1hdGVseQoyNi43MCBNQi9zZWMuCgpUaGUgQmVzdENvbW0gQVRBIHRhc2sgcHJp b3JpdHkgd2FzIGNoYW5nZWQgdG8gbWF4aW11bSBpbiBiZXN0Y29tbV9wcml2Lmg7CnRoaXMgZml4 ZXMgYSBkZWFkbG9jayBpc3N1ZSBJIHdhcyBleHBlcmllbmNpbmcgd2hlbiBoZWF2eSBETUEgd2Fz Cm9jY3VyaW5nIG9uIGJvdGggdGhlIEFUQSBhbmQgRXRoZXJuZXQgQmVzdENvbW0gdGFza3MsIGUu Zy4gd2hlbgpkb3dubG9hZGluZyBhIGxhcmdlIGZpbGUgb3ZlciBhIExBTiB0byBkaXNrLgoKVGhl cmUncyBhbHNvIHdoYXQgSSBiZWxpZXZlIHRvIGJlIGEgaGFyZHdhcmUgYnVnIGlmIHlvdSBoYXZl IGhpZ2ggbGV2ZWxzCm9mIEJlc3RDb21tIEFUQSBETUEgYWN0aXZpdHkgYWxvbmcgd2l0aCBoZWF2 eSBMb2NhbFBsdXMgQnVzIGFjdGl2aXR5Owp0aGUgYWRkcmVzcyBidXMgc2VlbXMgdG8gc29tZXRp bWVzIGdldCBjb3JydXB0ZWQgd2l0aCBBVEEgY29tbWFuZHMgd2hpbGUKdGhlIExvY2FsUGx1cyBC dXMgb3BlcmF0aW9uIGlzIHN0aWxsIGFjdGl2ZSAoaS5lLiBDaGlwIFNlbGVjdCBpcyBhc3NlcnRl ZCkuCgpJJ3ZlIGFza2VkIEZyZWVzY2FsZSBhYm91dCB0aGlzIGJ1dCBoYXZlIG5vdCByZWNlaXZl ZCBhIHJlcGx5IHlldCAtLSBpZgphbnlib2R5IGZyb20gRnJlZXNjYWxlIGhhcyBhbnkgaWRlYXMg cGxlYXNlIGNvbnRhY3QgbWU7IEkgY2FuIHN1cHBseSBzb21lCmFuYWx5emVyIHRyYWNlcyBpZiBu ZWVkZWQuIFRoZXJlZm9yZSwgZm9yIG5vdywgZG8gbm90IGVuYWJsZSBETUEgaWYgeW91Cm5lZWQg cmVsaWFibGUgTG9jYWxQbHVzIEJ1cyB1bmxlc3MgeW91IGRvIGEgZml4dXAgaW4geW91ciBkcml2 ZXIgYXMKZm9sbG93czoKCkxvY2tpbmcgZXhhbXBsZToKCiAgICAgICAgd2hpbGUgKHRlc3RfYW5k X3NldF9iaXQoMCwgJnBhdGFfbXBjNTJ4eF9hdGFfZG1hX2xvY2spICE9IDApCiAgICAgICAgewog ICAgICAgICAgICAgICAgc3RydWN0IGJjb21fdGFza18yICp0c2sgPSBwYXRhX21wYzUyeHhfYXRh X2RtYV90YXNrOwoKICAgICAgICAgICAgICAgIGlmKGJjb21fYnVmZmVyX2RvbmVfMih0c2spKQog ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CgoJcmV0dXJuIDA7Cgoo U2F2ZSB0aGUgcmV0dXJuIHZhbHVlIHRvIGBmbGFnc2ApCgpVbmxvY2tpbmcgZXhhbXBsZToKCiAg ICAgICAgaWYoZmxhZ3MgPT0gMCkKICAgICAgICAgICAgICAgIGNsZWFyX2JpdCgwLCAmcGF0YV9t cGM1Mnh4X2F0YV9kbWFfbG9jayk7CgpDb21tZW50cyBhbmQgdGVzdGluZyB3b3VsZCBvZiBjb3Vy c2UgYmUgdmVyeSB3ZWxjb21lLgoKVGhhbmtzLAoKU2lnbmVkLW9mZi1ieTogVGltIFlhbWluIDxw bGFzbUByb28ubWUudWs+CgpkaWZmIC1OdXJwIGxpbnV4LTIuNi4yNi1yYzYvYXJjaC9wb3dlcnBj L3N5c2Rldi9iZXN0Y29tbS9hdGEuaCBsaW51eC0yLjYuMjYtcmM2Lm5ldy9hcmNoL3Bvd2VycGMv c3lzZGV2L2Jlc3Rjb21tL2F0YS5oCi0tLSBsaW51eC0yLjYuMjYtcmM2L2FyY2gvcG93ZXJwYy9z eXNkZXYvYmVzdGNvbW0vYXRhLmgJMjAwOC0wMy0xOCAxNTo0OTo1My4wMDAwMDAwMDAgKzAwMDAK KysrIGxpbnV4LTIuNi4yNi1yYzYubmV3L2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYXRh LmgJMjAwOC0wNC0xNSAxMDo0MjozOC4wMDAwMDAwMDAgKzAxMDAKQEAgLTE2LDggKzE2LDggQEAK IAogc3RydWN0IGJjb21fYXRhX2JkIHsKIAl1MzIJc3RhdHVzOwotCXUzMglkc3RfcGE7CiAJdTMy CXNyY19wYTsKKwl1MzIJZHN0X3BhOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBiY29tX3Rhc2sgKgpk aWZmIC1OdXJwIGxpbnV4LTIuNi4yNi1yYzYvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9i ZXN0Y29tbS5jIGxpbnV4LTIuNi4yNi1yYzYubmV3L2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNv bW0vYmVzdGNvbW0uYwotLS0gbGludXgtMi42LjI2LXJjNi9hcmNoL3Bvd2VycGMvc3lzZGV2L2Jl c3Rjb21tL2Jlc3Rjb21tLmMJMjAwOC0wMy0xOCAxNTo0OTo1My4wMDAwMDAwMDAgKzAwMDAKKysr IGxpbnV4LTIuNi4yNi1yYzYubmV3L2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVzdGNv bW0uYwkyMDA4LTA0LTE1IDEwOjQyOjM4LjAwMDAwMDAwMCArMDEwMApAQCAtMzMwLDExICszMzAs MTAgQEAKIAkvKiBJbml0ICdhbHdheXMnIGluaXRpYXRvciAqLwogCW91dF84KCZiY29tX2VuZy0+ cmVncy0+aXByW0JDT01fSU5JVElBVE9SX0FMV0FZU10sIEJDT01fSVBSX0FMV0FZUyk7CiAKLQkv KiBEaXNhYmxlIENPTU0gQnVzIFByZWZldGNoIG9uIHRoZSBvcmlnaW5hbCA1MjAwOyBpdCdzIGJy b2tlbiAqLwotCWlmICgobWZzcHIoU1BSTl9TVlIpICYgTVBDNTIwMF9TVlJfTUFTSykgPT0gTVBD NTIwMF9TVlIpIHsKLQkJcmVndmFsID0gaW5fYmUxNigmYmNvbV9lbmctPnJlZ3MtPlB0ZENudHJs KTsKLQkJb3V0X2JlMTYoJmJjb21fZW5nLT5yZWdzLT5QdGRDbnRybCwgIHJlZ3ZhbCB8IDEpOwot CX0KKwkvKiBEaXNhYmxlIENPTU0gQnVzIFByZWZldGNoOyBBVEEgRE1BIGRvZXMgbm90IHdvcmsg cHJvcGVybHkgd2l0aCBpdAorCSAgIGVuYWJsZWQuICovCisJcmVndmFsID0gaW5fYmUxNigmYmNv bV9lbmctPnJlZ3MtPlB0ZENudHJsKTsKKwlvdXRfYmUxNigmYmNvbV9lbmctPnJlZ3MtPlB0ZENu dHJsLCByZWd2YWwgfCAxKTsKIAogCS8qIEluaXQgbG9jayAqLwogCXNwaW5fbG9ja19pbml0KCZi Y29tX2VuZy0+bG9jayk7CmRpZmYgLU51cnAgbGludXgtMi42LjI2LXJjNi9hcmNoL3Bvd2VycGMv c3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tLmggbGludXgtMi42LjI2LXJjNi5uZXcvYXJjaC9wb3dl cnBjL3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbS5oCi0tLSBsaW51eC0yLjYuMjYtcmM2L2FyY2gv cG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW0uaAkyMDA4LTAzLTE4IDE1OjQ5OjUzLjAw MDAwMDAwMCArMDAwMAorKysgbGludXgtMi42LjI2LXJjNi5uZXcvYXJjaC9wb3dlcnBjL3N5c2Rl di9iZXN0Y29tbS9iZXN0Y29tbS5oCTIwMDgtMDQtMTUgMTA6NDI6MzguMDAwMDAwMDAwICswMTAw CkBAIC0xNyw2ICsxNyw3IEBACiAjZGVmaW5lIF9fQkVTVENPTU1fSF9fCiAKIHN0cnVjdCBiY29t X2JkOyAvKiBkZWZpbmVkIGxhdGVyIG9uIC4uLiAqLworc3RydWN0IGJjb21fYmRfMjsKIAogCiAv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0gKi8KQEAgLTQ5LDYgKzUwLDIyIEBACiAJdm9pZCoJCXByaXY7CiB9 OwogCitzdHJ1Y3QgYmNvbV90YXNrXzIgeworCXVuc2lnbmVkIGludAl0YXNrbnVtOworCXVuc2ln bmVkIGludAlmbGFnczsKKwlpbnQJCWlycTsKKworCXN0cnVjdCBiY29tX2JkXzIJKmJkOworCXBo eXNfYWRkcl90CWJkX3BhOworCXZvaWQJCSoqY29va2llOworCXVuc2lnbmVkIHNob3J0CWluZGV4 OworCXVuc2lnbmVkIHNob3J0CW91dGRleDsKKwl1bnNpZ25lZCBpbnQJbnVtX2JkOworCXVuc2ln bmVkIGludAliZF9zaXplOworCisJdm9pZCoJCXByaXY7Cit9OworCiAjZGVmaW5lIEJDT01fRkxB R1NfTk9ORSAgICAgICAgIDB4MDAwMDAwMDB1bAogI2RlZmluZSBCQ09NX0ZMQUdTX0VOQUJMRV9U QVNLICAoMXVsIDw8ICAwKQogCkBAIC05NSw2ICsxMTIsMTEgQEAKIAl1MzIJZGF0YVsxXTsJLyog dmFyaWFibGUsIGJ1dCBhdCBsZWFzdCAxICovCiB9OwogCitzdHJ1Y3QgYmNvbV9iZF8yIHsKKwl1 MzIJc3RhdHVzOworCXUzMglkYXRhWzJdOwkvKiB2YXJpYWJsZSwgYnV0IGF0IGxlYXN0IDIgKi8K K307CisKICNkZWZpbmUgQkNPTV9CRF9SRUFEWQkweDQwMDAwMDAwdWwKIAogLyoqIF9iY29tX25l eHRfaW5kZXggLSBHZXQgbmV4dCBpbnB1dCBpbmRleC4KQEAgLTEwOCw2ICsxMzAsMTIgQEAKIAly ZXR1cm4gKCh0c2stPmluZGV4ICsgMSkgPT0gdHNrLT5udW1fYmQpID8gMCA6IHRzay0+aW5kZXgg KyAxOwogfQogCitzdGF0aWMgaW5saW5lIGludAorX2Jjb21fbmV4dF9pbmRleF8yKHN0cnVjdCBi Y29tX3Rhc2tfMiAqdHNrKQoreworCXJldHVybiAoKHRzay0+aW5kZXggKyAxKSA9PSB0c2stPm51 bV9iZCkgPyAwIDogdHNrLT5pbmRleCArIDE7Cit9CisKIC8qKiBfYmNvbV9uZXh0X291dGRleCAt IEdldCBuZXh0IG91dHB1dCBpbmRleC4KICAqIEB0c2s6IHBvaW50ZXIgdG8gdGFzayBzdHJ1Y3R1 cmUKICAqCkBAIC0xMjksNiArMTU3LDEyIEBACiAJcmV0dXJuIHRzay0+aW5kZXggPT0gdHNrLT5v dXRkZXg7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50CitiY29tX3F1ZXVlX2VtcHR5XzIoc3RydWN0 IGJjb21fdGFza18yICp0c2spCit7CisJcmV0dXJuIHRzay0+aW5kZXggPT0gdHNrLT5vdXRkZXg7 Cit9CisKIC8qKgogICogYmNvbV9xdWV1ZV9mdWxsIC0gQ2hlY2tzIGlmIGEgQmVzdENvbW0gdGFz ayBCRCBxdWV1ZSBpcyBmdWxsCiAgKiBAdHNrOiBUaGUgQmVzdENvbW0gdGFzayBzdHJ1Y3R1cmUK QEAgLTE1MSw2ICsxODUsMTQgQEAKIAlyZXR1cm4gISh0c2stPmJkW3Rzay0+b3V0ZGV4XS5zdGF0 dXMgJiBCQ09NX0JEX1JFQURZKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK2Jjb21fYnVmZmVy X2RvbmVfMihzdHJ1Y3QgYmNvbV90YXNrXzIgKnRzaykKK3sKKwlpZiAoYmNvbV9xdWV1ZV9lbXB0 eV8yKHRzaykpCisJCXJldHVybiAwOworCXJldHVybiAhKHRzay0+YmRbdHNrLT5vdXRkZXhdLnN0 YXR1cyAmIEJDT01fQkRfUkVBRFkpOworfQorCiAvKioKICAqIGJjb21fcHJlcGFyZV9uZXh0X2J1 ZmZlciAtIGNsZWFyIHN0YXR1cyBvZiBuZXh0IGF2YWlsYWJsZSBidWZmZXIuCiAgKiBAdHNrOiBU aGUgQmVzdENvbW0gdGFzayBzdHJ1Y3R1cmUKQEAgLTE3NSw2ICsyMTcsMjIgQEAKIAkJYmNvbV9l bmFibGUodHNrKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgYmNvbV9iZF8yICoKK2Jjb21f cHJlcGFyZV9uZXh0X2J1ZmZlcl8yKHN0cnVjdCBiY29tX3Rhc2tfMiAqdHNrKQoreworCXRzay0+ YmRbdHNrLT5pbmRleF0uc3RhdHVzID0gMDsJLyogY2xlYW51cCBsYXN0IHN0YXR1cyAqLworCXJl dHVybiAmdHNrLT5iZFt0c2stPmluZGV4XTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitiY29t X3N1Ym1pdF9uZXh0X2J1ZmZlcl8yKHN0cnVjdCBiY29tX3Rhc2tfMiAqdHNrLCB2b2lkICpjb29r aWUpCit7CisJdHNrLT5jb29raWVbdHNrLT5pbmRleF0gPSBjb29raWU7CisJbWIoKTsJLyogZW5z dXJlIHRoZSBiZCBpcyByZWFsbHkgdXAtdG8tZGF0ZSAqLworCXRzay0+YmRbdHNrLT5pbmRleF0u c3RhdHVzIHw9IEJDT01fQkRfUkVBRFk7CisJdHNrLT5pbmRleCA9IF9iY29tX25leHRfaW5kZXhf Mih0c2spOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgKgogYmNvbV9yZXRyaWV2ZV9idWZmZXIo c3RydWN0IGJjb21fdGFzayAqdHNrLCB1MzIgKnBfc3RhdHVzLCBzdHJ1Y3QgYmNvbV9iZCAqKnBf YmQpCiB7CmRpZmYgLU51cnAgbGludXgtMi42LjI2LXJjNi9hcmNoL3Bvd2VycGMvc3lzZGV2L2Jl c3Rjb21tL2Jlc3Rjb21tX3ByaXYuaCBsaW51eC0yLjYuMjYtcmM2Lm5ldy9hcmNoL3Bvd2VycGMv c3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tX3ByaXYuaAotLS0gbGludXgtMi42LjI2LXJjNi9hcmNo L3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tX3ByaXYuaAkyMDA4LTAzLTE4IDE1OjQ5 OjUzLjAwMDAwMDAwMCArMDAwMAorKysgbGludXgtMi42LjI2LXJjNi5uZXcvYXJjaC9wb3dlcnBj L3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbV9wcml2LmgJMjAwOC0wNC0xNSAxMDo0MjozOC4wMDAw MDAwMDAgKzAxMDAKQEAgLTE5OCw4ICsxOTgsOCBAQCBzdHJ1Y3QgYmNvbV90YXNrX2hlYWRlciB7 CiAjZGVmaW5lIEJDT01fSVBSX1NDVE1SXzEJMgogI2RlZmluZSBCQ09NX0lQUl9GRUNfUlgJCTYK ICNkZWZpbmUgQkNPTV9JUFJfRkVDX1RYCQk1Ci0jZGVmaW5lIEJDT01fSVBSX0FUQV9SWAkJNAot I2RlZmluZSBCQ09NX0lQUl9BVEFfVFgJCTMKKyNkZWZpbmUgQkNPTV9JUFJfQVRBX1JYCQk3Cisj ZGVmaW5lIEJDT01fSVBSX0FUQV9UWAkJNwogI2RlZmluZSBCQ09NX0lQUl9TQ1BDSV9SWAkyCiAj ZGVmaW5lIEJDT01fSVBSX1NDUENJX1RYCTIKICNkZWZpbmUgQkNPTV9JUFJfUFNDM19SWAkyCmRp ZmYgLU51cnAgbGludXgtMi42LjI2LXJjNi9kcml2ZXJzL2F0YS9LY29uZmlnIGxpbnV4LTIuNi4y Ni1yYzYubmV3L2RyaXZlcnMvYXRhL0tjb25maWcKLS0tIGxpbnV4LTIuNi4yNi1yYzYvZHJpdmVy cy9hdGEvS2NvbmZpZwkyMDA4LTAzLTE4IDE1OjQ5OjMzLjAwMDAwMDAwMCArMDAwMAorKysgbGlu dXgtMi42LjI2LXJjNi5uZXcvZHJpdmVycy9hdGEvS2NvbmZpZwkyMDA4LTA0LTE1IDEwOjQxOjUx LjAwMDAwMDAwMCArMDEwMApAQCAtNDYyLDYgKzQ2MiwxNSBAQAogCiAJICBJZiB1bnN1cmUsIHNh eSBOLgogCitjb25maWcgUEFUQV9NUEM1Mnh4X0RNQQorCXRyaXN0YXRlICJGcmVlc2NhbGUgTVBD NTJ4eCBTb0MgaW50ZXJuYWwgSURFIERNQSIKKwlkZXBlbmRzIG9uIFBBVEFfTVBDNTJ4eAorCWhl bHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgRE1BIG9uIHRoZSBNUEM1Mnh4 IFNvQyBQQVRBCisJICBjb250cm9sbGVyLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25m aWcgUEFUQV9NUElJWAogCXRyaXN0YXRlICJJbnRlbCBQQVRBIE1QSUlYIHN1cHBvcnQiCiAJZGVw ZW5kcyBvbiBQQ0kKZGlmZiAtTnVycCBsaW51eC0yLjYuMjYtcmM2L2RyaXZlcnMvYXRhL3BhdGFf bXBjNTJ4eC5jIGxpbnV4LTIuNi4yNi1yYzYubmV3L2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5j Ci0tLSBsaW51eC0yLjYuMjYtcmM2L2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCTIwMDgtMDMt MTggMTU6NDk6MzMuMDAwMDAwMDAwICswMDAwCisrKyBsaW51eC0yLjYuMjYtcmM2Lm5ldy9kcml2 ZXJzL2F0YS9wYXRhX21wYzUyeHguYwkyMDA4LTA0LTE1IDEwOjQxOjQ5LjAwMDAwMDAwMCArMDEw MApAQCAtNiw2ICs2LDkgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBTeWx2YWluIE11bmF1dCA8 dG50QDI0NnROdC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTWlwc3lzIC0gQmVuamFtaW4g SGVycmVuc2NobWlkdAogICoKKyAqIFVETUEgc3VwcG9ydCBiYXNlZCBvbiBwYXRjaGVzIGJ5IEZy ZWVzY2FsZSAoQmVybmFyZCBLdWhuLCBKb2huIFJpZ2J5KSwKKyAqIERvbWVuIFB1bmNlciBhbmQg VGltIFlhbWluLgorICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiB2ZXJzaW9uIDIuIFRoaXMgcHJv Z3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQogICog a2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCkBAIC0xNywyOCArMjAsNDcgQEAKICNp bmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCisjaW5j bHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRl IDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGFz bS9tcGM1Mnh4Lmg+CiAKKyNpbmNsdWRlIDxzeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW0uaD4KKyNp bmNsdWRlIDxzeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW1fcHJpdi5oPgorI2luY2x1ZGUgPHN5c2Rl di9iZXN0Y29tbS9hdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkibXBjNTJ4eF9hdGEiCiAjZGVm aW5lIERSVl9WRVJTSU9OCSIwLjEuMiIKIAotCiAvKiBQcml2YXRlIHN0cnVjdHVyZXMgdXNlZCBi eSB0aGUgZHJpdmVyICovCiBzdHJ1Y3QgbXBjNTJ4eF9hdGFfdGltaW5ncyB7CiAJdTMyCXBpbzE7 CiAJdTMyCXBpbzI7CisJdTMyCW1kbWExOworCXUzMgltZG1hMjsKKwl1MzIJdWRtYTE7CisJdTMy CXVkbWEyOworCXUzMgl1ZG1hMzsKKwl1MzIJdWRtYTQ7CisJdTMyCXVkbWE1OworCWludAl1c2lu Z191ZG1hOwogfTsKIAogc3RydWN0IG1wYzUyeHhfYXRhX3ByaXYgewogCXVuc2lnbmVkIGludAkJ CWlwYl9wZXJpb2Q7CiAJc3RydWN0IG1wYzUyeHhfYXRhIF9faW9tZW0gKglhdGFfcmVnczsKKwlz dHJ1Y3QgbXBjNTJ4eF9hdGEgX19pb21lbSAqCWF0YV9yZWdzX3BhOwogCWludAkJCQlhdGFfaXJx OwogCXN0cnVjdCBtcGM1Mnh4X2F0YV90aW1pbmdzCXRpbWluZ3NbMl07CiAJaW50CQkJCWNzZWw7 CisKKwkvKiBETUEgKi8KKwlzdHJ1Y3QgYmNvbV90YXNrICoJCWRtYXRzazsKKwljb25zdCBzdHJ1 Y3QgdWRtYXNwZWMgKgkJdWRtYXNwZWM7CisJY29uc3Qgc3RydWN0IG1kbWFzcGVjICoJCW1kbWFz cGVjOworCWludCAJCQkJbXBjNTJ4eF9hdGFfZG1hX2xhc3Rfd3JpdGU7CisJaW50CQkJCXdhaXRp bmdfZm9yX2RtYTsKIH07CiAKIApAQCAtNTMsNiArNzUsMTAyIEBACiAKICNkZWZpbmUgQ0FMQ19D TEtDWUMoYyx2KSAoKCgodikrKGMpLTEpLyhjKSkpCiAKKy8qIEFUQVBJLTQgTURNQSBzcGVjcyAo aW4gY2xvY2tzKSAqLworc3RydWN0IG1kbWFzcGVjIHsKKwl1MzIgdDBNWzNdOworCXUzMiB0ZFsz XTsKKwl1MzIgdGhbM107CisJdTMyIHRqWzNdOworCXUzMiB0a3dbM107CisJdTMyIHRtWzNdOwor CXUzMiB0blszXTsKK307CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRtYXNwZWMgbWRtYXNwZWM2NiA9IHsKKwl7MzIs ICAxMCwgIDh9LAorCXsxNSwgIDYsICAgNX0sCisJezIsICAgMSwgICAxfSwKKwl7MiwgICAxLCAg IDF9LAorCXsxNSwgIDQsICAgMn0sCisJezQsICAgMiwgICAyfSwKKwl7MSwgICAxLCAgIDF9Cit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1kbWFzcGVjIG1kbWFzcGVjMTMyID0geworCXs2NCwg IDIwLCAgMTZ9LAorCXsyOSwgIDExLCAgMTB9LAorCXszLCAgIDIsICAgMn0sCisJezMsICAgMSwg ICAxfSwKKwl7MjksICA3LCAgIDR9LAorCXs3LCAgIDQsICAgNH0sCisJezIsICAgMSwgICAxfQor fTsKKworCisvKiBBVEFQSS00IFVETUEgc3BlY3MgKGluIGNsb2NrcykgKi8KK3N0cnVjdCB1ZG1h c3BlYyB7CisJdTMyIHRjeWNbNl07CisJdTMyIHQyY3ljWzZdOworCXUzMiB0ZHNbNl07CisJdTMy IHRkaFs2XTsKKwl1MzIgdGR2c1s2XTsKKwl1MzIgdGR2aFs2XTsKKwl1MzIgdGZzX21pbls2XTsK Kwl1MzIgdGxpX21heFs2XTsKKwl1MzIgdG1saVs2XTsKKwl1MzIgdGF6WzZdOworCXUzMiB0emFo WzZdOworCXUzMiB0ZW52X21pbls2XTsKKwl1MzIgdHNyWzZdOworCXUzMiB0cmZzWzZdOworCXUz MiB0cnBbNl07CisJdTMyIHRhY2tbNl07CisJdTMyIHRzc1s2XTsKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgdWRtYXNwZWMgdWRtYXNwZWM2NiA9IHsKKwl7IDgsICA1LCAgNCwgIDMsICAyLCAg Mn0sCisJezE2LCAxMSwgIDgsICA2LCAgNCAsIDJ9LAorCXsgMSwgIDEsICAxLCAgMSwgIDEsICAx fSwKKwl7IDEsICAxLCAgMSwgIDEsICAxLCAgMX0sCisJeyA1LCAgNCwgIDMsICAyLCAgMSwgIDF9 LAorCXsgMSwgIDEsICAxLCAgMSwgIDEsICAxfSwKKwl7MTYsIDE0LCAxMiwgIDksICA4LCAgNn0s CisJezEwLCAxMCwgMTAsICA3LCAgOCwgIDV9LAorCXsgMiwgIDIsICAyLCAgMiwgIDIsICAyfSwK Kwl7IDEsICAxLCAgMSwgIDEsICAxLCAgMX0sCisJeyAyLCAgMiwgIDIsICAyLCAgMiwgIDJ9LAor CXsgMiwgIDIsICAyLCAgMiwgIDIsICAyfSwKKwl7IDMsICAyLCAgMiwgIDIsICAyLCAgMn0sCisJ eyA1LCAgNSwgIDQsICA0LCAgNCwgIDR9LAorCXsxMSwgIDksICA3LCAgNywgIDcsICA2fSwKKwl7 IDIsICAyLCAgMiwgIDIsICAyLCAgMn0sCisJeyA0LCAgNCwgIDQsICA0LCAgNCwgIDR9Cit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IHVkbWFzcGVjIHVkbWFzcGVjMTMyID0geworCXsxNSwgMTAs ICA2LCAgNywgIDIsICAzfSwKKwl7MzEsIDIxLCAxMiwgMTIsICA1LCAgNn0sCisJeyAyLCAgMiwg IDEsICAxLCAgMCwgIDF9LAorCXsgMSwgIDEsICAxLCAgMSwgIDAsICAxfSwKKwl7MTAsICA3LCAg NSwgIDMsICAxLCAgMX0sCisJeyAxLCAgMSwgIDEsICAxLCAgMSwgIDF9LAorCXszMCwgMjcsIDIz LCAxNSwgMTYsIDEyfSwKKwl7MjAsIDIwLCAyMCwgMTMsIDE0LCAxMH0sCisJeyAzLCAgMywgIDMs ICAzLCAgMiwgIDN9LAorCXsgMiwgIDIsICAyLCAgMiwgIDEsICAyfSwKKwl7IDMsICAzLCAgMywg IDMsICAyLCAgM30sCisJeyAzLCAgMywgIDMsICAzLCAgMiwgIDN9LAorCXsgNywgIDQsICAzLCAg MywgIDIsICAzfSwKKwl7MTAsIDEwLCAgOCwgIDgsICA3LCAgN30sCisJezIyLCAxNywgMTQsIDE0 LCAxMywgMTJ9LAorCXsgMywgIDMsICAzLCAgMywgIDIsICAzfSwKKwl7IDcsICA3LCAgNywgIDcs ICA2LCAgN30sCit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogCiAvKiBCaXQgZGVmaW5pdGlvbnMgaW5zaWRlIHRoZSByZWdpc3RlcnMgKi8KICNkZWZpbmUg TVBDNTJ4eF9BVEFfSE9TVENPTkZfU01SCTB4ODAwMDAwMDBVTCAvKiBTdGF0ZSBtYWNoaW5lIHJl c2V0ICovCkBAIC02Niw2ICsxODQsNyBAQAogI2RlZmluZSBNUEM1Mnh4X0FUQV9IT1NUU1RBVF9X RVJSCTB4MDEwMDAwMDBVTCAvKiBXcml0ZSBFcnJvciAqLwogCiAjZGVmaW5lIE1QQzUyeHhfQVRB X0ZJRk9TVEFUX0VNUFRZCTB4MDEgLyogRklGTyBFbXB0eSAqLworI2RlZmluZSBNUEM1Mnh4X0FU QV9GSUZPU1RBVF9FUlJPUgkweDQwIC8qIEZJRk8gRXJyb3IgKi8KIAogI2RlZmluZSBNUEM1Mnh4 X0FUQV9ETUFNT0RFX1dSSVRFCTB4MDEgLyogV3JpdGUgRE1BICovCiAjZGVmaW5lIE1QQzUyeHhf QVRBX0RNQU1PREVfUkVBRAkweDAyIC8qIFJlYWQgRE1BICovCkBAIC03NSw2ICsxOTQsOCBAQAog I2RlZmluZSBNUEM1Mnh4X0FUQV9ETUFNT0RFX0ZSCQkweDIwIC8qIEZJRk8gUmVzZXQgKi8KICNk ZWZpbmUgTVBDNTJ4eF9BVEFfRE1BTU9ERV9IVVQJCTB4NDAgLyogSG9zdCBVRE1BIGJ1cnN0IHRl cm1pbmF0ZSAqLwogCisjZGVmaW5lIE1BWF9ETUFfQlVGRkVSUyAxMjgKKyNkZWZpbmUgTUFYX0RN QV9CVUZGRVJfU0laRSAweDIwMDAwdQogCiAvKiBTdHJ1Y3R1cmUgb2YgdGhlIGhhcmR3YXJlIHJl Z2lzdGVycyAqLwogc3RydWN0IG1wYzUyeHhfYXRhIHsKQEAgLTEzMyw2ICsyNTQsOSBAQAogCXU4 ICByZXNlcnZlZDIxWzJdOwogfTsKIAorLyogQmVzdENvbW0gbG9ja2luZyAqLwordW5zaWduZWQg bG9uZyBwYXRhX21wYzUyeHhfYXRhX2RtYV9sb2NrID0gMDsKK3N0cnVjdCBiY29tX3Rhc2tfMiAq cGF0YV9tcGM1Mnh4X2F0YV9kbWFfdGFzazsKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBB dXggZm5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KQEAgLTE0MSw2ICsyNjUsMTkgQEAKIAogLyogTVBDNTJ4eCBsb3cg bGV2ZWwgaHcgY29udHJvbCAqLwogCitzdGF0aWMgaW5saW5lIHZvaWQKK21wYzUyeHhfYXRhX3dh aXRfdGlwX2JpdF9jbGVhcihzdHJ1Y3QgbXBjNTJ4eF9hdGEgX19pb21lbSAqcmVncykKK3sKKwlp bnQgdGltZW91dCA9IDEwMDA7CisKKwl3aGlsZSAoaW5fYmUzMigmcmVncy0+aG9zdF9zdGF0dXMp ICYgTVBDNTJ4eF9BVEFfSE9TVFNUQVRfVElQKQorCQlpZiAodGltZW91dC0tID09IDApIHsKKwkJ CXByaW50ayhLRVJOX0VSUiAibXBjNTJ4eC1pZGU6IFRpbWVvdXQgd2FpdGluZyBmb3IgVElQIGNs ZWFyXG4iKTsKKwkJCWJyZWFrOworCQl9CisJdWRlbGF5KDEwKTsgICAgIC8qIEZJWE1FOiBOZWNl c3NhcnkgPz8/ICovCit9CisKIHN0YXRpYyBpbnQKIG1wYzUyeHhfYXRhX2NvbXB1dGVfcGlvX3Rp bWluZ3Moc3RydWN0IG1wYzUyeHhfYXRhX3ByaXYgKnByaXYsIGludCBkZXYsIGludCBwaW8pCiB7 CkBAIC0xNjUsNiArMzAyLDk1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK21wYzUy eHhfYXRhX2NvbXB1dGVfbWRtYV90aW1pbmdzKHN0cnVjdCBtcGM1Mnh4X2F0YV9wcml2ICpwcml2 LCBpbnQgZGV2LCBpbnQgc3BlZWQpCit7CisJc3RydWN0IG1wYzUyeHhfYXRhX3RpbWluZ3MgKnRp bWluZyA9ICZwcml2LT50aW1pbmdzW2Rldl07CisJdTMyIHQwTSwgdGQsIHRrdywgdG0sIHRoLCB0 aiwgdG47CisKKwlpZiAoc3BlZWQgPCAwIHx8IHNwZWVkID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwl0ME0gPSBwcml2LT5tZG1hc3BlYy0+dDBNW3NwZWVkXTsKKwl0ZCA9IHByaXYtPm1kbWFz cGVjLT50ZFtzcGVlZF07CisJdGt3ID0gcHJpdi0+bWRtYXNwZWMtPnRrd1tzcGVlZF07CisJdG0g PSBwcml2LT5tZG1hc3BlYy0+dG1bc3BlZWRdOworCXRoID0gcHJpdi0+bWRtYXNwZWMtPnRoW3Nw ZWVkXTsKKwl0aiA9IHByaXYtPm1kbWFzcGVjLT50altzcGVlZF07CisJdG4gPSBwcml2LT5tZG1h c3BlYy0+dG5bc3BlZWRdOworCisJRFBSSU5USyAoInQwTSA9ICVkXG4iLCB0ME0pOworCURQUklO VEsgKCJ0ZCAgPSAlZFxuIiwgdGQpOworCURQUklOVEsgKCJ0a3cgPSAlZFxuIiwgdGt3KTsKKwlE UFJJTlRLICgidG0gID0gJWRcbiIsIHRtKTsKKwlEUFJJTlRLICgidGggID0gJWRcbiIsIHRoKTsK KwlEUFJJTlRLICgidGogID0gJWRcbiIsIHRqKTsKKwlEUFJJTlRLICgidG4gID0gJWRcbiIsIHRu KTsKKworCXRpbWluZy0+bWRtYTEgPSAodDBNIDw8IDI0KSB8ICh0ZCA8PCAxNikgfCAodGt3IDw8 IDgpIHwgKHRtKTsKKwl0aW1pbmctPm1kbWEyID0gKHRoIDw8IDI0KSB8ICh0aiA8PCAxNikgfCAo dG4gPDwgOCk7CisKKwl0aW1pbmctPnVzaW5nX3VkbWEgPSAwOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQKK21wYzUyeHhfYXRhX2NvbXB1dGVfdWRtYV90aW1pbmdzKHN0cnVjdCBtcGM1 Mnh4X2F0YV9wcml2ICpwcml2LCBpbnQgZGV2LCBpbnQgc3BlZWQpCit7CisJc3RydWN0IG1wYzUy eHhfYXRhX3RpbWluZ3MgKnRpbWluZyA9ICZwcml2LT50aW1pbmdzW2Rldl07CisJdTMyIHQyY3lj LCB0Y3ljLCB0ZHMsIHRkaCwgdGR2cywgdGR2aCwgdGZzLCB0bGksIHRtbGksIHRheiwgdGVudiwg dHNyLCB0c3MsIHRyZnMsIHRycCwgdGFjaywgdHphaDsKKworCWlmIChzcGVlZCA8IDAgfHwgc3Bl ZWQgPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXQyY3ljID0gcHJpdi0+dWRtYXNwZWMtPnQy Y3ljW3NwZWVkXTsKKwl0Y3ljID0gcHJpdi0+dWRtYXNwZWMtPnRjeWNbc3BlZWRdOworCXRkcyA9 IHByaXYtPnVkbWFzcGVjLT50ZHNbc3BlZWRdOworCXRkaCA9IHByaXYtPnVkbWFzcGVjLT50ZGhb c3BlZWRdOworCXRkdnMgPSBwcml2LT51ZG1hc3BlYy0+dGR2c1tzcGVlZF07CisJdGR2aCA9IHBy aXYtPnVkbWFzcGVjLT50ZHZoW3NwZWVkXTsKKwl0ZnMgPSBwcml2LT51ZG1hc3BlYy0+dGZzX21p bltzcGVlZF07CisJdG1saSA9IHByaXYtPnVkbWFzcGVjLT50bWxpW3NwZWVkXTsKKwl0ZW52ID0g cHJpdi0+dWRtYXNwZWMtPnRlbnZfbWluW3NwZWVkXTsKKwl0c3MgPSBwcml2LT51ZG1hc3BlYy0+ dHNzW3NwZWVkXTsKKwl0cnAgPSBwcml2LT51ZG1hc3BlYy0+dHJwW3NwZWVkXTsKKwl0YWNrID0g cHJpdi0+dWRtYXNwZWMtPnRhY2tbc3BlZWRdOworCXR6YWggPSBwcml2LT51ZG1hc3BlYy0+dHph aFtzcGVlZF07CisJdGF6ID0gcHJpdi0+dWRtYXNwZWMtPnRheltzcGVlZF07CisJdHJmcyA9IHBy aXYtPnVkbWFzcGVjLT50cmZzW3NwZWVkXTsKKwl0c3IgPSBwcml2LT51ZG1hc3BlYy0+dHNyW3Nw ZWVkXTsKKwl0bGkgPSBwcml2LT51ZG1hc3BlYy0+dGxpX21heFtzcGVlZF07CisKKwlEUFJJTlRL ICgiVURNQSB0MmN5YyA9ICVkXG4iLCB0MmN5Yyk7CisJRFBSSU5USyAoIlVETUEgdGN5YyAgPSAl ZFxuIiwgdGN5Yyk7CisJRFBSSU5USyAoIlVETUEgdGRzICAgPSAlZFxuIiwgdGRzKTsKKwlEUFJJ TlRLICgiVURNQSB0ZGggICA9ICVkXG4iLCB0ZGgpOworCURQUklOVEsgKCJVRE1BIHRkdnMgID0g JWRcbiIsIHRkdnMpOworCURQUklOVEsgKCJVRE1BIHRkdmggID0gJWRcbiIsIHRkdmgpOworCURQ UklOVEsgKCJVRE1BIHRmcyAgID0gJWRcbiIsIHRmcyk7CisJRFBSSU5USyAoIlVETUEgdGxpICAg PSAlZFxuIiwgdGxpKTsKKwlEUFJJTlRLICgiVURNQSB0bWxpICA9ICVkXG4iLCB0bWxpKTsKKwlE UFJJTlRLICgiVURNQSB0YXogICA9ICVkXG4iLCB0YXopOworCURQUklOVEsgKCJVRE1BIHRlbnYg ID0gJWRcbiIsIHRlbnYpOworCURQUklOVEsgKCJVRE1BIHRzciAgID0gJWRcbiIsIHRzcik7CisJ RFBSSU5USyAoIlVETUEgdHNzICAgPSAlZFxuIiwgdHNzKTsKKwlEUFJJTlRLICgiVURNQSB0cmZz ICA9ICVkXG4iLCB0cmZzKTsKKwlEUFJJTlRLICgiVURNQSB0cnAgICA9ICVkXG4iLCB0cnApOwor CURQUklOVEsgKCJVRE1BIHRhY2sgID0gJWRcbiIsIHRhY2spOworCURQUklOVEsgKCJVRE1BIHR6 YWggID0gJWRcbiIsIHR6YWgpOworCisJdGltaW5nLT51ZG1hMSA9ICh0MmN5YyA8PCAyNCkgfCAo dGN5YyA8PCAxNikgfCAodGRzIDw8IDgpIHwgKHRkaCk7CisJdGltaW5nLT51ZG1hMiA9ICh0ZHZz IDw8IDI0KSB8ICh0ZHZoIDw8IDE2KSB8ICh0ZnMgPDwgOCkgfCAodGxpKTsKKwl0aW1pbmctPnVk bWEzID0gKHRtbGkgPDwgMjQpIHwgKHRheiA8PCAxNikgfCAodGVudiA8PCA4KSB8ICh0c3IpOwor CXRpbWluZy0+dWRtYTQgPSAodHNzIDw8IDI0KSB8ICh0cmZzIDw8IDE2KSB8ICh0cnAgPDwgOCkg fCAodGFjayk7CisJdGltaW5nLT51ZG1hNSA9ICh0emFoIDw8IDI0KTsKKworCXRpbWluZy0+dXNp bmdfdWRtYSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQKIG1wYzUyeHhfYXRh X2FwcGx5X3RpbWluZ3Moc3RydWN0IG1wYzUyeHhfYXRhX3ByaXYgKnByaXYsIGludCBkZXZpY2Up CiB7CkBAIC0xNzMsMTQgKzM5OSwxMyBAQAogCiAJb3V0X2JlMzIoJnJlZ3MtPnBpbzEsICB0aW1p bmctPnBpbzEpOwogCW91dF9iZTMyKCZyZWdzLT5waW8yLCAgdGltaW5nLT5waW8yKTsKLQlvdXRf YmUzMigmcmVncy0+bWRtYTEsIDApOwotCW91dF9iZTMyKCZyZWdzLT5tZG1hMiwgMCk7Ci0Jb3V0 X2JlMzIoJnJlZ3MtPnVkbWExLCAwKTsKLQlvdXRfYmUzMigmcmVncy0+dWRtYTIsIDApOwotCW91 dF9iZTMyKCZyZWdzLT51ZG1hMywgMCk7Ci0Jb3V0X2JlMzIoJnJlZ3MtPnVkbWE0LCAwKTsKLQlv dXRfYmUzMigmcmVncy0+dWRtYTUsIDApOwotCisJb3V0X2JlMzIoJnJlZ3MtPm1kbWExLCB0aW1p bmctPm1kbWExKTsKKwlvdXRfYmUzMigmcmVncy0+bWRtYTIsIHRpbWluZy0+bWRtYTIpOworCW91 dF9iZTMyKCZyZWdzLT51ZG1hMSwgdGltaW5nLT51ZG1hMSk7CisJb3V0X2JlMzIoJnJlZ3MtPnVk bWEyLCB0aW1pbmctPnVkbWEyKTsKKwlvdXRfYmUzMigmcmVncy0+dWRtYTMsIHRpbWluZy0+dWRt YTMpOworCW91dF9iZTMyKCZyZWdzLT51ZG1hNCwgdGltaW5nLT51ZG1hNCk7CisJb3V0X2JlMzIo JnJlZ3MtPnVkbWE1LCB0aW1pbmctPnVkbWE1KTsKIAlwcml2LT5jc2VsID0gZGV2aWNlOwogfQog CkBAIC0yNDUsNiArNDcwLDI4IEBACiAJbXBjNTJ4eF9hdGFfYXBwbHlfdGltaW5ncyhwcml2LCBh ZGV2LT5kZXZubyk7CiB9CiBzdGF0aWMgdm9pZAorbXBjNTJ4eF9hdGFfc2V0X2RtYW1vZGUoc3Ry dWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IG1w YzUyeHhfYXRhX3ByaXYgKnByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCWludCBydjsK KworCWlmIChhZGV2LT5kbWFfbW9kZSA+PSBYRkVSX1VETUFfMCkgeworCQlpbnQgZG1hID0gYWRl di0+ZG1hX21vZGUgLSBYRkVSX1VETUFfMDsKKwkJcnYgPSBtcGM1Mnh4X2F0YV9jb21wdXRlX3Vk bWFfdGltaW5ncyhwcml2LCBhZGV2LT5kZXZubywgZG1hKTsKKwl9IGVsc2UgeworCQlpbnQgZG1h ID0gYWRldi0+ZG1hX21vZGUgLSBYRkVSX01XX0RNQV8wOworCQlydiA9IG1wYzUyeHhfYXRhX2Nv bXB1dGVfbWRtYV90aW1pbmdzKHByaXYsIGFkZXYtPmRldm5vLCBkbWEpOworCX0KKworCWlmIChy dikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCSI6IFRyeWluZyB0byBzZWxlY3Qg aW52YWxpZCBETUEgbW9kZSAlZFxuIiwgYWRldi0+ZG1hX21vZGUpOworCQlyZXR1cm47CisJfQor CisJbXBjNTJ4eF9hdGFfYXBwbHlfdGltaW5ncyhwcml2LCBhZGV2LT5kZXZubyk7Cit9CitzdGF0 aWMgdm9pZAogbXBjNTJ4eF9hdGFfZGV2X3NlbGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNp Z25lZCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBtcGM1Mnh4X2F0YV9wcml2ICpwcml2ID0gYXAt Pmhvc3QtPnByaXZhdGVfZGF0YTsKQEAgLTI1NSwxNiArNTAyLDIwOCBAQAogCWF0YV9zZmZfZGV2 X3NlbGVjdChhcCxkZXZpY2UpOwogfQogCitzdGF0aWMgdm9pZAorbXBjNTJ4eF9zZmZfZXhlY19j b21tYW5kKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRm KQoreworCXN0cnVjdCBtcGM1Mnh4X2F0YV9wcml2ICpwcml2ID0gYXAtPmhvc3QtPnByaXZhdGVf ZGF0YTsKKworCW1wYzUyeHhfYXRhX3dhaXRfdGlwX2JpdF9jbGVhcihwcml2LT5hdGFfcmVncyk7 CisJYXRhX3NmZl9leGVjX2NvbW1hbmQoYXAsIHRmKTsKK30KKworc3RhdGljIGludAorbXBjNTJ4 eF9hdGFfYnVpbGRfZG1hdGFibGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1 Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBtcGM1Mnh4X2F0YV9wcml2ICpwcml2 ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXBjNTJ4eF9hdGEgX19pb21lbSAq cmVnc19wYSA9IHByaXYtPmF0YV9yZWdzX3BhOworCXVuc2lnbmVkIGludCByZWFkID0gIShxYy0+ dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpLCBzaTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNn OworCWludCBjb3VudCA9IDA7CisKKwlpZiAocmVhZCkKKwkJYmNvbV9hdGFfcnhfcHJlcGFyZShw cml2LT5kbWF0c2spOworCWVsc2UKKwkJYmNvbV9hdGFfdHhfcHJlcGFyZShwcml2LT5kbWF0c2sp OworCisJZm9yX2VhY2hfc2cocWMtPnNnLCBzZywgcWMtPm5fZWxlbSwgc2kpIHsKKwkJdTMyIGN1 cl9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQl1MzIgY3VyX2xlbiA9IHNnX2RtYV9sZW4o c2cpOworCisJCXdoaWxlIChjdXJfbGVuKSB7CisJCQl1bnNpZ25lZCBpbnQgdGMgPSBtaW4oY3Vy X2xlbiwgTUFYX0RNQV9CVUZGRVJfU0laRSk7CisJCQlzdHJ1Y3QgYmNvbV9hdGFfYmQgKmJkID0g KHN0cnVjdCBiY29tX2F0YV9iZCAqKSBiY29tX3ByZXBhcmVfbmV4dF9idWZmZXJfMigoc3RydWN0 IGJjb21fdGFza18yICopIHByaXYtPmRtYXRzayk7CisKKwkJCWlmIChyZWFkKSB7CisJCQkJYmQt PnN0YXR1cyA9IHRjOworCQkJCWJkLT5zcmNfcGEgPSAoX19mb3JjZSB1MzIpICZyZWdzX3BhLT5m aWZvX2RhdGE7CisJCQkJYmQtPmRzdF9wYSA9IGN1cl9hZGRyOworCisJCQkJaW52YWxpZGF0ZV9k Y2FjaGVfcmFuZ2UoKF9fZm9yY2UgdTMyKSBwaHlzX3RvX3ZpcnQoY3VyX2FkZHIpLCAoX19mb3Jj ZSB1MzIpIHBoeXNfdG9fdmlydChjdXJfYWRkcikgKyAoX19mb3JjZSB1MzIpIGN1cl9sZW4pOwor CQkJfSBlbHNlIHsKKwkJCQliZC0+c3RhdHVzID0gdGM7CisJCQkJYmQtPnNyY19wYSA9IGN1cl9h ZGRyOworCQkJCWJkLT5kc3RfcGEgPSAoX19mb3JjZSB1MzIpICZyZWdzX3BhLT5maWZvX2RhdGE7 CisKKwkJCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKF9fZm9yY2UgdTMyKSBwaHlzX3RvX3ZpcnQoY3Vy X2FkZHIpLCAoX19mb3JjZSB1MzIpIHBoeXNfdG9fdmlydChjdXJfYWRkcikgKyAoX19mb3JjZSB1 MzIpIGN1cl9sZW4pOworCQkJfQorCisJCQliY29tX3N1Ym1pdF9uZXh0X2J1ZmZlcl8yKChzdHJ1 Y3QgYmNvbV90YXNrXzIgKikgcHJpdi0+ZG1hdHNrLCBOVUxMKTsKKworCQkJY3VyX2FkZHIgKz0g dGM7CisJCQljdXJfbGVuIC09IHRjOworCQkJY291bnQrKzsKKworCQkJaWYgKGNvdW50ID4gTUFY X0RNQV9CVUZGRVJTKSB7CisJCQkJcHJpbnRrKEtFUk5fQUxFUlQgIiVzOiAlaSBkbWEgdGFibGUg dG9vIHNtYWxsXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQkJCWdvdG8gdXNlX3Bpb19pbnN0 ZWFkOworCQkJfQorCQl9CisJfQorCXJldHVybiAxOworCit1c2VfcGlvX2luc3RlYWQ6CisJYmNv bV9hdGFfcmVzZXRfYmQocHJpdi0+ZG1hdHNrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg dm9pZAorbXBjNTJ4eF9ibWRtYV9zZXR1cChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQorewor CXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJc3RydWN0IG1wYzUyeHhfYXRhX3ByaXYg KnByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtcGM1Mnh4X2F0YSBfX2lv bWVtICpyZWdzID0gcHJpdi0+YXRhX3JlZ3M7CisKKwl1bnNpZ25lZCBpbnQgcmVhZCA9ICEocWMt PnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKTsKKwl1OCBkbWFfbW9kZTsKKworCWlmICghbXBj NTJ4eF9hdGFfYnVpbGRfZG1hdGFibGUocWMpKSB7CisJCXByaW50ayhLRVJOX0FMRVJUICIlczog JWksIHJldHVybiAxP1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwl9CisKKwkvKiBDaGVjayBG SUZPIGlzIE9LLi4uICovCisJaWYoaW5fOCgmcHJpdi0+YXRhX3JlZ3MtPmZpZm9fc3RhdHVzKSAm IE1QQzUyeHhfQVRBX0ZJRk9TVEFUX0VSUk9SKQorCQlwcmludGsoIldBUk5JTkc6IHBhdGFfbXBj NTJ4eCBGSUZPIGVycm9yIGRldGVjdGVkOiAweCUwMnghXG4iLCBpbl84KCZwcml2LT5hdGFfcmVn cy0+Zmlmb19zdGF0dXMpKTsKKworCWlmIChyZWFkKSB7CisJCWRtYV9tb2RlID0gTVBDNTJ4eF9B VEFfRE1BTU9ERV9JRSB8IE1QQzUyeHhfQVRBX0RNQU1PREVfUkVBRCB8CisJCQkJTVBDNTJ4eF9B VEFfRE1BTU9ERV9GRTsKKworCQkvKiBTZXR1cCBGSUZPIGlmIGRpcmVjdGlvbiBjaGFuZ2VkICov CisJCWlmIChwcml2LT5tcGM1Mnh4X2F0YV9kbWFfbGFzdF93cml0ZSAhPSAwKSB7CisJCQlwcml2 LT5tcGM1Mnh4X2F0YV9kbWFfbGFzdF93cml0ZSA9IDA7CisJCQltcGM1Mnh4X2F0YV93YWl0X3Rp cF9iaXRfY2xlYXIocmVncyk7CisKKwkJCS8qIENvbmZpZ3VyZSBGSUZPIHdpdGggZ3JhbnVsYXJp dHkgdG8gNyBsaWtlIHNhbXBsZSBjb2RlICovCisJCQlvdXRfOCgmcmVncy0+Zmlmb19jb250cm9s LCA3KTsKKwkJCW91dF9iZTE2KCZyZWdzLT5maWZvX2FsYXJtLCAxMjgpOworCisJCQkvKiBTZXQg RklGTyBSZXNldCBiaXQgKEZSKSAqLworCQkJb3V0XzgoJnJlZ3MtPmRtYV9tb2RlLCBNUEM1Mnh4 X0FUQV9ETUFNT0RFX0ZSKTsKKwkJfQorCX0gZWxzZSB7CisJCWRtYV9tb2RlID0gTVBDNTJ4eF9B VEFfRE1BTU9ERV9JRSB8IE1QQzUyeHhfQVRBX0RNQU1PREVfV1JJVEU7CisKKwkJLyogU2V0dXAg RklGTyBpZiBkaXJlY3Rpb24gY2hhbmdlZCAqLworCQlpZiAocHJpdi0+bXBjNTJ4eF9hdGFfZG1h X2xhc3Rfd3JpdGUgIT0gMSkgeworCQkJcHJpdi0+bXBjNTJ4eF9hdGFfZG1hX2xhc3Rfd3JpdGUg PSAxOworCQkJbXBjNTJ4eF9hdGFfd2FpdF90aXBfYml0X2NsZWFyKHJlZ3MpOworCisJCQkvKiBD b25maWd1cmUgRklGTyB3aXRoIGdyYW51bGFyaXR5IHRvIDQgbGlrZSBzYW1wbGUgY29kZSAqLwor CQkJb3V0XzgoJnJlZ3MtPmZpZm9fY29udHJvbCwgNCk7CisJCQlvdXRfYmUxNigmcmVncy0+Zmlm b19hbGFybSwgMTI4KTsKKwkJfQorCX0KKworCWlmIChwcml2LT50aW1pbmdzW3FjLT5kZXYtPmRl dm5vXS51c2luZ191ZG1hKQorCQlkbWFfbW9kZSB8PSBNUEM1Mnh4X0FUQV9ETUFNT0RFX1VETUE7 CisKKwltcGM1Mnh4X2F0YV93YWl0X3RpcF9iaXRfY2xlYXIocmVncyk7CisJb3V0XzgoJnJlZ3Mt PmRtYV9tb2RlLCBkbWFfbW9kZSk7CisKKwlwcml2LT53YWl0aW5nX2Zvcl9kbWEgPSBBVEFfRE1B X0FDVElWRTsKKworCWF0YV93YWl0X2lkbGUoYXApOworCWFwLT5vcHMtPnNmZl9leGVjX2NvbW1h bmQoYXAsICZxYy0+dGYpOworfQorCitzdGF0aWMgdm9pZAorbXBjNTJ4eF9ibWRtYV9zdGFydChz dHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+ YXA7CisJc3RydWN0IG1wYzUyeHhfYXRhX3ByaXYgKnByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9k YXRhOworCisJLyogTG9jYWxCdXMgbG9jayAqLworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KDAs ICZwYXRhX21wYzUyeHhfYXRhX2RtYV9sb2NrKSAhPSAwKQorCQk7CisKKwliY29tX3NldF90YXNr X2F1dG9fc3RhcnQocHJpdi0+ZG1hdHNrLT50YXNrbnVtLCBwcml2LT5kbWF0c2stPnRhc2tudW0g fCAweDQwKTsKKwliY29tX2VuYWJsZShwcml2LT5kbWF0c2spOworfQorCitzdGF0aWMgdm9pZAor bXBjNTJ4eF9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0 IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3QgbXBjNTJ4eF9hdGFfcHJpdiAqcHJpdiA9 IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisKKwliY29tX2Rpc2FibGUocHJpdi0+ZG1hdHNrKTsK KwliY29tX2F0YV9yZXNldF9iZChwcml2LT5kbWF0c2spOworCisJLyogTG9jYWxCdXMgdW5sb2Nr Ki8KKwljbGVhcl9iaXQoMCwgJnBhdGFfbXBjNTJ4eF9hdGFfZG1hX2xvY2spOworCisJcHJpdi0+ d2FpdGluZ19mb3JfZG1hID0gMDsKKworCS8qIENoZWNrIEZJRk8gaXMgT0suLi4gKi8KKwlpZihp bl84KCZwcml2LT5hdGFfcmVncy0+Zmlmb19zdGF0dXMpICYgTVBDNTJ4eF9BVEFfRklGT1NUQVRf RVJST1IpCisJCXByaW50aygiV0FSTklORzogcGF0YV9tcGM1Mnh4IEZJRk8gZXJyb3IgZGV0ZWN0 ZWQ6IDB4JTAyeCFcbiIsIGluXzgoJnByaXYtPmF0YV9yZWdzLT5maWZvX3N0YXR1cykpOworfQor CitzdGF0aWMgdTgKK21wYzUyeHhfYm1kbWFfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7 CisJc3RydWN0IG1wYzUyeHhfYXRhX3ByaXYgKnByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRh OworCisJLyogQ2hlY2sgRklGTyBpcyBPSy4uLiAqLworCWlmKGluXzgoJnByaXYtPmF0YV9yZWdz LT5maWZvX3N0YXR1cykgJiBNUEM1Mnh4X0FUQV9GSUZPU1RBVF9FUlJPUikKKwl7CisJCXByaW50 aygiV0FSTklORzogcGF0YV9tcGM1Mnh4IEZJRk8gZXJyb3IgZGV0ZWN0ZWQ6IDB4JTAyeCFcbiIs IGluXzgoJnByaXYtPmF0YV9yZWdzLT5maWZvX3N0YXR1cykpOworCQlyZXR1cm4gcHJpdi0+d2Fp dGluZ19mb3JfZG1hIHwgQVRBX0RNQV9FUlI7CisJfQorCisJcmV0dXJuIHByaXYtPndhaXRpbmdf Zm9yX2RtYTsKK30KKworc3RhdGljIGlycXJldHVybl90CittcGM1Mnh4X2F0YV90YXNrX2lycShp bnQgaXJxLCB2b2lkICp2cHJpdikKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9hdGFfcHJpdiAqcHJpdiA9 IHZwcml2OworCXByaXYtPndhaXRpbmdfZm9yX2RtYSB8PSBBVEFfRE1BX0lOVFI7CisKKwlyZXR1 cm4gSVJRX0hBTkRMRUQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG1w YzUyeHhfYXRhX3NodCA9IHsKIAlBVEFfUElPX1NIVChEUlZfTkFNRSksCiB9OwogCiBzdGF0aWMg c3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbXBjNTJ4eF9hdGFfcG9ydF9vcHMgPSB7CiAJLmlu aGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAotCS5zZmZfZGV2X3NlbGVjdAkJPSBtcGM1Mnh4 X2F0YV9kZXZfc2VsZWN0LAotCS5jYWJsZV9kZXRlY3QJCT0gYXRhX2NhYmxlXzQwd2lyZSwKKwog CS5zZXRfcGlvbW9kZQkJPSBtcGM1Mnh4X2F0YV9zZXRfcGlvbW9kZSwKLQkucG9zdF9pbnRlcm5h bF9jbWQJPSBBVEFfT1BfTlVMTCwKKwkuc2V0X2RtYW1vZGUJCT0gbXBjNTJ4eF9hdGFfc2V0X2Rt YW1vZGUsCisKKwkuc2ZmX2V4ZWNfY29tbWFuZAk9IG1wYzUyeHhfc2ZmX2V4ZWNfY29tbWFuZCwK Kwkuc2ZmX2Rldl9zZWxlY3QJCT0gbXBjNTJ4eF9hdGFfZGV2X3NlbGVjdCwKKworCS5ibWRtYV9z ZXR1cAkJPSBtcGM1Mnh4X2JtZG1hX3NldHVwLAorCS5ibWRtYV9zdGFydAkJPSBtcGM1Mnh4X2Jt ZG1hX3N0YXJ0LAorCS5ibWRtYV9zdG9wCQk9IG1wYzUyeHhfYm1kbWFfc3RvcCwKKwkuYm1kbWFf c3RhdHVzCQk9IG1wYzUyeHhfYm1kbWFfc3RhdHVzLAorCisJLnFjX3ByZXAJCT0gYXRhX25vb3Bf cWNfcHJlcCwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CkBAIC0yODEsOSArNzIwLDE0IEBA CiAKIAlhcCA9IGhvc3QtPnBvcnRzWzBdOwogCWFwLT5mbGFncwkJfD0gQVRBX0ZMQUdfU0xBVkVf UE9TUzsKLQlhcC0+cGlvX21hc2sJCT0gMHgxZjsJLyogVXAgdG8gUElPNCAqLwotCWFwLT5td2Rt YV9tYXNrCQk9IDB4MDA7CS8qIE5vIE1XRE1BICAgKi8KLQlhcC0+dWRtYV9tYXNrCQk9IDB4MDA7 CS8qIE5vIFVETUEgICAgKi8KKwlhcC0+cGlvX21hc2sJCT0gQVRBX1BJTzQ7CS8qIFVwIHRvIFBJ TzQgKi8KKyNpZmRlZiBDT05GSUdfUEFUQV9NUEM1Mnh4X0RNQQorCWFwLT5td2RtYV9tYXNrCQk9 IDB4MDc7CQkvKiBVcCB0byBNV0RNQTIgKi8KKwlhcC0+dWRtYV9tYXNrCQk9IEFUQV9VRE1BMjsJ LyogVXAgdG8gVURNQTIgKi8KKyNlbHNlCisJYXAtPm13ZG1hX21hc2sJCT0gMHgwMDsJCS8qIE5v IE1XRE1BICovCisJYXAtPnVkbWFfbWFzawkJPSAweDAwOwkJLyogTm8gVURNQSAqLworI2VuZGlm CiAJYXAtPm9wcwkJCT0gJm1wYzUyeHhfYXRhX3BvcnRfb3BzOwogCWhvc3QtPnByaXZhdGVfZGF0 YQk9IHByaXY7CiAKQEAgLTMzMyw3ICs3NzcsNyBAQAogCWludCBhdGFfaXJxOwogCXN0cnVjdCBt cGM1Mnh4X2F0YSBfX2lvbWVtICphdGFfcmVnczsKIAlzdHJ1Y3QgbXBjNTJ4eF9hdGFfcHJpdiAq cHJpdjsKLQlpbnQgcnY7CisJaW50IHJ2LCByZXQsIHRhc2tfaXJxOwogCiAJLyogR2V0IGlwYiBm cmVxdWVuY3kgKi8KIAlpcGJfZnJlcSA9IG1wYzUyeHhfZmluZF9pcGJfZnJlcShvcC0+bm9kZSk7 CkBAIC0zODksOCArODMzLDMxIEBACiAKIAlwcml2LT5pcGJfcGVyaW9kID0gMTAwMDAwMDAwMCAv IChpcGJfZnJlcSAvIDEwMDApOwogCXByaXYtPmF0YV9yZWdzID0gYXRhX3JlZ3M7CisJcHJpdi0+ YXRhX3JlZ3NfcGEgPSAoc3RydWN0IG1wYzUyeHhfYXRhIF9faW9tZW0gKikgcmVzX21lbS5zdGFy dDsKIAlwcml2LT5hdGFfaXJxID0gYXRhX2lycTsKIAlwcml2LT5jc2VsID0gLTE7CisJcHJpdi0+ bXBjNTJ4eF9hdGFfZG1hX2xhc3Rfd3JpdGUgPSAtMTsKKworCWlmIChpcGJfZnJlcS8xMDAwMDAw ID09IDY2KSB7CisJCXByaXYtPm1kbWFzcGVjID0gJm1kbWFzcGVjNjY7CisJCXByaXYtPnVkbWFz cGVjID0gJnVkbWFzcGVjNjY7CisJfSBlbHNlIHsKKwkJcHJpdi0+bWRtYXNwZWMgPSAmbWRtYXNw ZWMxMzI7CisJCXByaXYtPnVkbWFzcGVjID0gJnVkbWFzcGVjMTMyOworCX0KKworCXByaXYtPmRt YXRzayA9IGJjb21fYXRhX2luaXQoTUFYX0RNQV9CVUZGRVJTLCBNQVhfRE1BX0JVRkZFUl9TSVpF KTsKKwlwYXRhX21wYzUyeHhfYXRhX2RtYV90YXNrID0gKHN0cnVjdCBiY29tX3Rhc2tfMiAqKSBw cml2LT5kbWF0c2s7CisJaWYgKCFwcml2LT5kbWF0c2spIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQg IiVzOiAlaVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwkJcnYgPSAtRU5PTUVNOworCQlnb3Rv IGVycjsKKwl9CisKKwl0YXNrX2lycSA9IGJjb21fZ2V0X3Rhc2tfaXJxKHByaXYtPmRtYXRzayk7 CisJcmV0ID0gcmVxdWVzdF9pcnEodGFza19pcnEsICZtcGM1Mnh4X2F0YV90YXNrX2lycSwgSVJR Rl9ESVNBQkxFRCwgIkFUQSB0YXNrIiwgcHJpdik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5f QUxFUlQgIiVzOiByZXF1ZXN0X2lycSBmYWlsZWQgd2l0aDogJWlcbiIsIF9fZnVuY19fLCByZXQp OwogCiAJLyogSW5pdCB0aGUgaHcgKi8KIAlydiA9IG1wYzUyeHhfYXRhX2h3X2luaXQocHJpdik7 Cg== ------=_Part_8867_26471737.1214570648812--