From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Krisztian Gyoerffy" Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="_===490053====selecktra.com===_" Subject: [linux-lvm] Problem at compiling kernel 2.4.18 with lvm 1.0.7 Sender: linux-lvm-admin@sistina.com Errors-To: linux-lvm-admin@sistina.com Reply-To: linux-lvm@sistina.com List-Help: List-Post: List-Subscribe: , List-Unsubscribe: , List-Archive: Date: Wed Oct 29 08:54:07 2003 List-Id: To: linux-lvm@sistina.com This is a multi-part MIME message --_===490053====selecktra.com===_ Content-Type: text/plain; charset="ISO-8859-1"; format="flowed" Content-Transfer-Encoding: 8bit --- the forwarded message follows --- --_===490053====selecktra.com===_ Content-Type: message/rfc822 From: "Krisztian Gyoerffy" Subject: Problem at compiling kernel 2.4.18 with lvm 1.0.7 To: linux-lvm@sistina.com X-Mailer: CommuniGate Pro WebUser Interface v.4.1.6 Date: Tue, 28 Oct 2003 16:18:15 +0100 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="_===490049====selecktra.com===_" This is a multi-part MIME message --_===490049====selecktra.com===_ Content-Type: text/plain; charset="ISO-8859-1"; format="flowed" Content-Transfer-Encoding: 8bit Hi LVM friends, I have problem with the following scenario: - I use SuSE linux 7.1 (I know, this might be a bit old, but I follow the rule "never touch a running system") with kernel 2.4.16 and lvm 1.0.7 - Since SuSE rolled out the latest kernel for 7.1 and I would like to keep my OS up to date I installed the 2.4.18 kernel source from SuSE on my machine - I executed exactly the steps written in INSTALL and PATCH/README. Everything was ok - Then I configured the rest of the kernel and tried to compile. But after a while, when it was compiling the LVM stuff, it stopped compiling with the following message: gcc -D__KERNEL__ -I/usr/src/linux-2.4.18.SuSE/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=i686 -DKBUILD_BASENAME=lvm -c -o lvm.o lvm.c gcc -D__KERNEL__ -I/usr/src/linux-2.4.18.SuSE/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=i686 -DKBUILD_BASENAME=lvm_snap -c -o lvm-snap.o lvm-snap.c lvm-snap.c: In function `lvm_snapshot_COW': lvm-snap.c:365: structure has no member named `blocks' make[3]: *** [lvm-snap.o] Error 1 make[3]: Leaving directory `/usr/src/linux-2.4.18.SuSE/drivers/md' make[2]: *** [first_rule] Error 2 make[2]: Leaving directory `/usr/src/linux-2.4.18.SuSE/drivers/md' make[1]: *** [_subdir_md] Error 2 make[1]: Leaving directory `/usr/src/linux-2.4.18.SuSE/drivers' make: *** [_dir_drivers] Error 2 Afterwards I looked into the patch file, and into the lvm-snap.c at the given position, line 365. There is the reference to the "blocks" variable of the iobuf structure. This iobuf structure is defined in the /usr/src/linux/include/linux/iobuf.h header file. But this header file is completly different in the source of the 2.4.18 kernel than in the source of the 2.4.16 kernel, where the patch and compiling were ok. Do you have any idea what can I do to get it compiled? I attach the lvm patch file generated by make and the iobuf.h file for both versions 2.4.16 and 2.4.18. Hope to hear from you soon, and thanks in advance Krisztian --_===490049====selecktra.com===_ Content-Type: text/plain Content-Disposition: attachment; filename="iobuf.h.2.4.16" Content-Transfer-Encoding: base64 LyoKICogaW9idWYuaAogKgogKiBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmVzIHVzZWQgdG8gdHJh Y2sgYWJzdHJhY3Qga2VybmVsLXNwYWNlIGlvIGJ1ZmZlcnMuCiAqCiAqLwoKI2lmbmRlZiBf X0xJTlVYX0lPQlVGX0gKI2RlZmluZSBfX0xJTlVYX0lPQlVGX0gKCiNpbmNsdWRlIDxsaW51 eC9tbS5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgojaW5jbHVkZSA8bGludXgvd2FpdC5o PgojaW5jbHVkZSA8YXNtL2F0b21pYy5oPgoKLyoKICogVGhlIGtpb2J1ZiBzdHJ1Y3R1cmUg ZGVzY3JpYmVzIGEgcGh5c2ljYWwgc2V0IG9mIHBhZ2VzIHJlc2VydmVkCiAqIGxvY2tlZCBm b3IgSU8uICBUaGUgcmVmZXJlbmNlIGNvdW50cyBvbiBlYWNoIHBhZ2Ugd2lsbCBoYXZlIGJl ZW4KICogaW5jcmVtZW50ZWQsIGFuZCB0aGUgZmxhZ3MgZmllbGQgd2lsbCBpbmRpY2F0ZSB3 aGV0aGVyIG9yIG5vdCB3ZSBoYXZlCiAqIHByZS1sb2NrZWQgYWxsIG9mIHRoZSBwYWdlcyBm b3IgSU8uCiAqCiAqIGtpb2J1ZnMgbWF5IGJlIHBhc3NlZCBpbiBhcnJheXMgdG8gZm9ybSBh IGtpb3ZlYywgYnV0IHdlIG11c3QKICogcHJlc2VydmUgdGhlIHByb3BlcnR5IHRoYXQgbm8g cGFnZSBpcyBwcmVzZW50IG1vcmUgdGhhbiBvbmNlIG92ZXIgdGhlCiAqIGVudGlyZSBpb3Zl Yy4KICovCgojZGVmaW5lIEtJT19NQVhfQVRPTUlDX0lPCTUxMiAvKiBpbiBrYiAqLwojZGVm aW5lIEtJT19TVEFUSUNfUEFHRVMJKEtJT19NQVhfQVRPTUlDX0lPIC8gKFBBR0VfU0laRSA+ PiAxMCkgKyAxKQojZGVmaW5lIEtJT19NQVhfU0VDVE9SUwkJKEtJT19NQVhfQVRPTUlDX0lP ICogMikKCi8qIFRoZSBtYWluIGtpb2J1ZiBzdHJ1Y3QgdXNlZCBmb3IgYWxsIG91ciBJTyEg Ki8KCnN0cnVjdCBraW9idWYgCnsKCWludAkJbnJfcGFnZXM7CS8qIFBhZ2VzIGFjdHVhbGx5 IHJlZmVyZW5jZWQgKi8KCWludAkJYXJyYXlfbGVuOwkvKiBTcGFjZSBpbiB0aGUgYWxsb2Nh dGVkIGxpc3RzICovCglpbnQJCW9mZnNldDsJCS8qIE9mZnNldCB0byBzdGFydCBvZiB2YWxp ZCBkYXRhICovCglpbnQJCWxlbmd0aDsJCS8qIE51bWJlciBvZiB2YWxpZCBieXRlcyBvZiBk YXRhICovCgoJLyogS2VlcCBzZXBhcmF0ZSB0cmFjayBvZiB0aGUgcGh5c2ljYWwgYWRkcmVz c2VzIGFuZCBwYWdlCgkgKiBzdHJ1Y3RzIGludm9sdmVkLiAgSWYgd2UgZG8gSU8gdG8gYSBt ZW1vcnktbWFwcGVkIGRldmljZQoJICogcmVnaW9uLCB0aGVyZSB3b24ndCBuZWNlc3Nhcmls eSBiZSBwYWdlIHN0cnVjdHMgZGVmaW5lZCBmb3IKCSAqIGV2ZXJ5IGFkZHJlc3MuICovCgoJ c3RydWN0IHBhZ2UgKioJbWFwbGlzdDsKCgl1bnNpZ25lZCBpbnQJbG9ja2VkIDogMTsJLyog SWYgc2V0LCBwYWdlcyBoYXMgYmVlbiBsb2NrZWQgKi8KCQoJLyogQWx3YXlzIGVtYmVkIGVu b3VnaCBzdHJ1Y3QgcGFnZXMgZm9yIGF0b21pYyBJTyAqLwoJc3RydWN0IHBhZ2UgKgltYXBf YXJyYXlbS0lPX1NUQVRJQ19QQUdFU107CglzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaFtLSU9f TUFYX1NFQ1RPUlNdOwoJdW5zaWduZWQgbG9uZyBibG9ja3NbS0lPX01BWF9TRUNUT1JTXTsK CgkvKiBEeW5hbWljIHN0YXRlIGZvciBJTyBjb21wbGV0aW9uOiAqLwoJYXRvbWljX3QJaW9f Y291bnQ7CS8qIElPcyBzdGlsbCBpbiBwcm9ncmVzcyAqLwoJaW50CQllcnJubzsJCS8qIFN0 YXR1cyBvZiBjb21wbGV0ZWQgSU8gKi8KCXZvaWQJCSgqZW5kX2lvKSAoc3RydWN0IGtpb2J1 ZiAqKTsgLyogQ29tcGxldGlvbiBjYWxsYmFjayAqLwoJd2FpdF9xdWV1ZV9oZWFkX3Qgd2Fp dF9xdWV1ZTsKfTsKCgovKiBtbS9tZW1vcnkuYyAqLwoKaW50CW1hcF91c2VyX2tpb2J1Zihp bnQgcncsIHN0cnVjdCBraW9idWYgKiwgdW5zaWduZWQgbG9uZyB2YSwgc2l6ZV90IGxlbik7 CnZvaWQJdW5tYXBfa2lvYnVmKHN0cnVjdCBraW9idWYgKmlvYnVmKTsKaW50CWxvY2tfa2lv dmVjKGludCBuciwgc3RydWN0IGtpb2J1ZiAqaW92ZWNbXSwgaW50IHdhaXQpOwppbnQJdW5s b2NrX2tpb3ZlYyhpbnQgbnIsIHN0cnVjdCBraW9idWYgKmlvdmVjW10pOwp2b2lkCW1hcmtf ZGlydHlfa2lvYnVmKHN0cnVjdCBraW9idWYgKmlvYnVmLCBpbnQgYnl0ZXMpOwoKLyogZnMv aW9idWYuYyAqLwoKdm9pZAllbmRfa2lvX3JlcXVlc3Qoc3RydWN0IGtpb2J1ZiAqLCBpbnQp Owp2b2lkCXNpbXBsZV93YWtldXBfa2lvYnVmKHN0cnVjdCBraW9idWYgKik7CmludAlhbGxv Y19raW92ZWMoaW50IG5yLCBzdHJ1Y3Qga2lvYnVmICoqKTsKdm9pZAlmcmVlX2tpb3ZlYyhp bnQgbnIsIHN0cnVjdCBraW9idWYgKiopOwppbnQJZXhwYW5kX2tpb2J1ZihzdHJ1Y3Qga2lv YnVmICosIGludCk7CnZvaWQJa2lvYnVmX3dhaXRfZm9yX2lvKHN0cnVjdCBraW9idWYgKik7 CmV4dGVybiBpbnQgYWxsb2Nfa2lvYnVmX2JocyhzdHJ1Y3Qga2lvYnVmICopOwpleHRlcm4g dm9pZCBmcmVlX2tpb2J1Zl9iaHMoc3RydWN0IGtpb2J1ZiAqKTsKCi8qIGZzL2J1ZmZlci5j ICovCgppbnQJYnJ3X2tpb3ZlYyhpbnQgcncsIGludCBuciwgc3RydWN0IGtpb2J1ZiAqaW92 ZWNbXSwgCgkJICAga2Rldl90IGRldiwgdW5zaWduZWQgbG9uZyBiW10sIGludCBzaXplKTsK CiNlbmRpZiAvKiBfX0xJTlVYX0lPQlVGX0ggKi8K --_===490049====selecktra.com===_ Content-Type: text/plain Content-Disposition: attachment; filename="iobuf.h.2.4.18" Content-Transfer-Encoding: base64 LyoKICogaW9idWYuaAogKgogKiBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmVzIHVzZWQgdG8gdHJh Y2sgYWJzdHJhY3Qga2VybmVsLXNwYWNlIGlvIGJ1ZmZlcnMuCiAqCiAqLwoKI2lmbmRlZiBf X0xJTlVYX0lPQlVGX0gKI2RlZmluZSBfX0xJTlVYX0lPQlVGX0gKCiNpbmNsdWRlIDxsaW51 eC9tbS5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgojaW5jbHVkZSA8bGludXgvd2FpdC5o PgojaW5jbHVkZSA8YXNtL2F0b21pYy5oPgoKLyoKICogVGhlIGtpb2J1ZiBzdHJ1Y3R1cmUg ZGVzY3JpYmVzIGEgcGh5c2ljYWwgc2V0IG9mIHBhZ2VzIHJlc2VydmVkCiAqIGxvY2tlZCBm b3IgSU8uICBUaGUgcmVmZXJlbmNlIGNvdW50cyBvbiBlYWNoIHBhZ2Ugd2lsbCBoYXZlIGJl ZW4KICogaW5jcmVtZW50ZWQsIGFuZCB0aGUgZmxhZ3MgZmllbGQgd2lsbCBpbmRpY2F0ZSB3 aGV0aGVyIG9yIG5vdCB3ZSBoYXZlCiAqIHByZS1sb2NrZWQgYWxsIG9mIHRoZSBwYWdlcyBm b3IgSU8uCiAqCiAqIGtpb2J1ZnMgbWF5IGJlIHBhc3NlZCBpbiBhcnJheXMgdG8gZm9ybSBh IGtpb3ZlYywgYnV0IHdlIG11c3QKICogcHJlc2VydmUgdGhlIHByb3BlcnR5IHRoYXQgbm8g cGFnZSBpcyBwcmVzZW50IG1vcmUgdGhhbiBvbmNlIG92ZXIgdGhlCiAqIGVudGlyZSBpb3Zl Yy4KICovCgojZGVmaW5lIEtJT19NQVhfQVRPTUlDX0lPCTUxMiAvKiBpbiBrYiAqLwojZGVm aW5lIEtJT19TVEFUSUNfUEFHRVMJKEtJT19NQVhfQVRPTUlDX0lPIC8gKFBBR0VfU0laRSA+ PiAxMCkgKyAxKQojZGVmaW5lIEtJT19NQVhfU0VDVE9SUwkJKEtJT19NQVhfQVRPTUlDX0lP ICogMikKCiNkZWZpbmUgUkFXSU9fQkxPQ0tTSVpFCQk0MDk2CiNkZWZpbmUgUkFXSU9fQkxP Q0tNQVNLCQkoUkFXSU9fQkxPQ0tTSVpFLTEpCgovKiBUaGUgbWFpbiBraW9idWYgc3RydWN0 IHVzZWQgZm9yIGFsbCBvdXIgSU8hICovCgpzdHJ1Y3Qga2lvYnVmIAp7CglpbnQJCW5yX3Bh Z2VzOwkvKiBQYWdlcyBhY3R1YWxseSByZWZlcmVuY2VkICovCglpbnQJCWFycmF5X2xlbjsJ LyogU3BhY2UgaW4gdGhlIGFsbG9jYXRlZCBsaXN0cyAqLwoJaW50CQlvZmZzZXQ7CQkvKiBP ZmZzZXQgdG8gc3RhcnQgb2YgdmFsaWQgZGF0YSAqLwoJaW50CQlsZW5ndGg7CQkvKiBOdW1i ZXIgb2YgdmFsaWQgYnl0ZXMgb2YgZGF0YSAqLwoKCS8qIEtlZXAgc2VwYXJhdGUgdHJhY2sg b2YgdGhlIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgcGFnZQoJICogc3RydWN0cyBpbnZvbHZl ZC4gIElmIHdlIGRvIElPIHRvIGEgbWVtb3J5LW1hcHBlZCBkZXZpY2UKCSAqIHJlZ2lvbiwg dGhlcmUgd29uJ3QgbmVjZXNzYXJpbHkgYmUgcGFnZSBzdHJ1Y3RzIGRlZmluZWQgZm9yCgkg KiBldmVyeSBhZGRyZXNzLiAqLwoKCXN0cnVjdCBwYWdlICoqCW1hcGxpc3Q7CgoJdW5zaWdu ZWQgaW50CWxvY2tlZCA6IDEsCS8qIElmIHNldCwgcGFnZXMgaGFzIGJlZW4gbG9ja2VkICov CgkJCWRvdmFyeSA6IDE7CS8qIElmIHNldCwgZG8gdmFyaWFibGUgc2l6ZSBJTyAqLwoJCglz dHJ1Y3QgYnVmZmVyX2hlYWQgKioga2lvX2JoOwoJdW5zaWduZWQgbG9uZyAqIGtpb19ibG9j a3M7CgoJLyogRHluYW1pYyBzdGF0ZSBmb3IgSU8gY29tcGxldGlvbjogKi8KCWF0b21pY190 CWlvX2NvdW50OwkvKiBJT3Mgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KCWludAkJZXJybm87CQkv KiBTdGF0dXMgb2YgY29tcGxldGVkIElPICovCgl2b2lkCQkoKmVuZF9pbykgKHN0cnVjdCBr aW9idWYgKik7IC8qIENvbXBsZXRpb24gY2FsbGJhY2sgKi8KCXdhaXRfcXVldWVfaGVhZF90 IHdhaXRfcXVldWU7Cn07CgoKLyogbW0vbWVtb3J5LmMgKi8KCmludAltYXBfdXNlcl9raW9i dWYoaW50IHJ3LCBzdHJ1Y3Qga2lvYnVmICosIHVuc2lnbmVkIGxvbmcgdmEsIHNpemVfdCBs ZW4pOwp2b2lkCXVubWFwX2tpb2J1ZihzdHJ1Y3Qga2lvYnVmICppb2J1Zik7CmludAlsb2Nr X2tpb3ZlYyhpbnQgbnIsIHN0cnVjdCBraW9idWYgKmlvdmVjW10sIGludCB3YWl0KTsKaW50 CXVubG9ja19raW92ZWMoaW50IG5yLCBzdHJ1Y3Qga2lvYnVmICppb3ZlY1tdKTsKdm9pZAlt YXJrX2RpcnR5X2tpb2J1ZihzdHJ1Y3Qga2lvYnVmICppb2J1ZiwgaW50IGJ5dGVzKTsKCi8q IGZzL2lvYnVmLmMgKi8KCnZvaWQJZW5kX2tpb19yZXF1ZXN0KHN0cnVjdCBraW9idWYgKiwg aW50KTsKdm9pZAlzaW1wbGVfd2FrZXVwX2tpb2J1ZihzdHJ1Y3Qga2lvYnVmICopOwppbnQJ YWxsb2Nfa2lvdmVjKGludCBuciwgc3RydWN0IGtpb2J1ZiAqKik7CnZvaWQJZnJlZV9raW92 ZWMoaW50IG5yLCBzdHJ1Y3Qga2lvYnVmICoqKTsKaW50CWV4cGFuZF9raW9idWYoc3RydWN0 IGtpb2J1ZiAqLCBpbnQpOwp2b2lkCWtpb2J1Zl93YWl0X2Zvcl9pbyhzdHJ1Y3Qga2lvYnVm ICopOwpleHRlcm4gaW50IGFsbG9jX2tpb2J1Zl9iaHMoc3RydWN0IGtpb2J1ZiAqKTsKZXh0 ZXJuIHZvaWQgZnJlZV9raW9idWZfYmhzKHN0cnVjdCBraW9idWYgKik7CgovKiBmcy9idWZm ZXIuYyAqLwoKaW50CWJyd19raW92ZWMoaW50IHJ3LCBpbnQgbnIsIHN0cnVjdCBraW9idWYg KmlvdmVjW10sIAoJCSAgIGtkZXZfdCBkZXYsIHVuc2lnbmVkIGxvbmcgYltdLCBpbnQgc2l6 ZSk7CgojZW5kaWYgLyogX19MSU5VWF9JT0JVRl9IICovCg== --_===490049====selecktra.com===_ Content-Type: text/plain Content-Disposition: attachment; filename="lvm-1.0.7-2.4.18.patch" Content-Transfer-Encoding: base64 LS0tIGxpbnV4L2luY2x1ZGUvbGludXgvbHZtLmgub3JpZwlNb24gTWFyIDI0IDE1OjA3OjI1 IDIwMDMKKysrIGxpbnV4L2luY2x1ZGUvbGludXgvbHZtLmgJVHVlIE9jdCAyOCAxMjo0Mzow MyAyMDAzCkBAIC0zLDEzICszLDE0IEBACiAgKiBrZXJuZWwvbHZtLmgKICAqIHRvb2xzL2xp Yi9sdm0uaAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NyAtIDIwMDEgIEhlaW56IE1hdWVs c2hhZ2VuLCBTaXN0aW5hIFNvZnR3YXJlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgLSAyMDAy ICBIZWlueiBNYXVlbHNoYWdlbiwgU2lzdGluYSBTb2Z0d2FyZQogICoKICAqIEZlYnJ1YXJ5 LU5vdmVtYmVyIDE5OTcKICAqIE1heS1KdWx5IDE5OTgKICAqIEphbnVhcnktTWFyY2gsSnVs eSxTZXB0ZW1iZXIsT2N0b2JlcixEZXplbWJlciAxOTk5CiAgKiBKYW51YXJ5LEZlYnJ1YXJ5 LEp1bHksTm92ZW1iZXIgMjAwMAogICogSmFudWFyeS1NYXJjaCxKdW5lLEp1bHkgMjAwMQor ICogTWF5IDIwMDIKICAqCiAgKiBsdm0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTc5LDgg KzgwLDggQEAKICNpZm5kZWYgX0xWTV9IX0lOQ0xVREUKICNkZWZpbmUgX0xWTV9IX0lOQ0xV REUKIAotI2RlZmluZSBMVk1fUkVMRUFTRV9OQU1FICIxLjAuMyIKLSNkZWZpbmUgTFZNX1JF TEVBU0VfREFURSAiMTkvMDIvMjAwMiIKKyNkZWZpbmUgTFZNX1JFTEVBU0VfTkFNRSAiMS4w LjciCisjZGVmaW5lIExWTV9SRUxFQVNFX0RBVEUgIjI4LzAzLzIwMDMiCiAKICNkZWZpbmUJ X0xWTV9LRVJORUxfSF9WRVJTSU9OCSJMVk0gIkxWTV9SRUxFQVNFX05BTUUiICgiTFZNX1JF TEVBU0VfREFURSIpIgogCkBAIC05Myw3ICs5NCw3IEBACiAjZGVmaW5lCUxWTV9UT1RBTF9S RVNFVAogCiAjaWZkZWYgX19LRVJORUxfXwotI3VuZGVmIExWTV9IRF9OQU1FIC8qIGRpc3Bs YXkgbmljZSBuYW1lcyBpbiAvcHJvYy9wYXJ0aXRpb25zICovCisjdW5kZWYgTFZNX0hEX05B TUUJCS8qIGRpc3BsYXkgbmljZSBuYW1lcyBpbiAvcHJvYy9wYXJ0aXRpb25zICovCiAKIC8q IGxvdHMgb2YgZGVidWdnaW5nIG91dHB1dCAoc2VlIGRyaXZlciBzb3VyY2UpCiAgICAjZGVm aW5lIERFQlVHX0xWTV9HRVRfSU5GTwpAQCAtMTE3LDcgKzExOCw3IEBACiAgICBjYXVzZXMg cHJvYmxlbXMgb24gc29tZSBwbGF0Zm9ybXMuIEl0J3Mgbm90IG5pY2UgYnV0IHRoZW4KICAg IG5laXRoZXIgaXMgdGhlIGFsdGVybmF0aXZlLiAqLwogc3RydWN0IGxpc3RfaGVhZCB7Ci0g ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQsICpwcmV2OworCXN0cnVjdCBsaXN0X2hl YWQgKm5leHQsICpwcmV2OwogfTsKICNkZWZpbmUgX19LRVJORUxfXwogI2luY2x1ZGUgPGxp bnV4L2tkZXZfdC5oPgpAQCAtMjA4LDQwICsyMDksMzUgQEAKIC8qCiAgKiBWR0RBOiBkZWZh dWx0IGRpc2sgc3BhY2VzIGFuZCBvZmZzZXRzCiAgKgotICogICBUaGVyZSdzIHNwYWNlIGFm dGVyIHRoZSBzdHJ1Y3R1cmVzIGZvciBsYXRlciBleHRlbnNpb25zLgotICogICBUaGUgcGh5 c2ljYWwgdm9sdW1lIHN0cnVjdHVyZSBob2xkcyBvZmZzZXQgYW5kIHNpemUgZGVmaW5pdGlv bnMKLSAqICAgZm9yIGl0c2VsZiAod2VsbCwga2luZCBvZiByZWR1bmRhbnQgOy0pIGFuZCBh bGwgb3RoZXIgc3RydWN0dXJle3N8IGFycmF5c307Ci0gKgotICogICBJbiByZWNlbnQgdmVy c2lvbnMgc2luY2UgTFZNIDAuOS4xIHdlIGFsaWduIHRvIDRrIG9mZnNldHMgaW4gb3JkZXIg dG8gZWFzZQotICogICBmdXR1cmUga2VybmVsIHJlYWRzIG9mIHRoZSBtZXRhZGF0YS4KLSAq Ci0gKiAgIG9mZnNldCAgICAgICAgICAgICAgIHdoYXQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZQotICogICAtLS0tLS0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLQotICogICAwICAgICAgICAgICAg ICAgICAgICBwaHlzaWNhbCB2b2x1bWUgc3RydWN0dXJlICAgICAgICAgIHB2LT5wdl9vbl9k aXNrLnNpemUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAofjUwMCBieXRlKQotICogICBwdi0+dmdfb25fZGlzay5iYXNl ICB2b2x1bWUgZ3JvdXAgc3RydWN0dXJlICAgICAgICAgICAgIHB2LT52Z19vbl9kaXNrLnNp emUKLSAqCi0gKiAgIHB2LT51dWlkbGlzdF9vbl9kaXNrLmJhc2UgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMTI4IGJ5dGUgZWFjaAotICogICAgICAgICAgICAgICAgICAgICAg ICB1dWlkbGlzdCBvZiBwaHlzaWNhbCB2b2x1bWVzCi0gKiAgICAgICAgICAgICAgICAgICAg ICAgIGhvbGRpbmcgb25lIHV1aWQgcGVyIHBoeXNpY2FsIHZvbHVtZQorICogICB0aGVyZSdz IHNwYWNlIGFmdGVyIHRoZSBzdHJ1Y3R1cmVzIGZvciBsYXRlciBleHRlbnNpb25zLgogICoK LSAqICAgcHYtPmx2X29uX2Rpc2suYmFzZSAgbG9naWNhbCB2b2x1bWUgc3RydWN0dXJlczsg ICAgICAgICBwdi0+bHZfb25fZGlzay5zaXplCi0gKiAgICAgICAgICAgICAgICAgICAgICAg IG9uZSBzdHJ1Y3R1cmUgcGVyIGxvZ2ljYWwgdm9sdW1lICAgKH4zMDAgYnl0ZSBlYWNoKQor ICogICBvZmZzZXQgICAgICAgICAgICB3aGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplCisgKiAgIC0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLQorICogICAwICAgICAgICAgICAgICAgICBw aHlzaWNhbCB2b2x1bWUgc3RydWN0dXJlICAgICAgICAgICB+NTAwIGJ5dGUKICAqCi0gKiAg IHB2LT5wZV9vbl9kaXNrLmJhc2UgIHBoeXNpY2FsIGV4dGVudCBhbGxvYy4gc3RydWN0cyAg ICAgcHYtPnBlX29uX2Rpc2suc2l6ZQotICogICAgICAgICAgICAgICAgICAgICAgICBvbmUg c3RyY3V0dXJlIHBlciBwaHlzaWNhbCBleHRlbnQgICg0IGJ5dGUgZWFjaCkKKyAqICAgMUsg ICAgICAgICAgICAgICAgdm9sdW1lIGdyb3VwIHN0cnVjdHVyZSAgICAgICAgICAgICAgfjIw MCBieXRlCiAgKgotICogICBFbmQgb2YgZGlzayAtICAgICAgICBmaXJzdCBwaHlzaWNhbCBl eHRlbnQgICAgICAgICAgICAgIGRlZmF1bHQgNCBtZWdhYnl0ZQorICogICA2SyAgICAgICAg ICAgICAgICBuYW1lbGlzdCBvZiBwaHlzaWNhbCB2b2x1bWVzICAgICAgICAxMjggYnl0ZSBl YWNoCisgKgorICogICA2ayArIG4gKiB+MzAwYnl0ZSBuIGxvZ2ljYWwgdm9sdW1lIHN0cnVj dHVyZXMgICAgICAgICB+MzAwIGJ5dGUgZWFjaAorICoKKyAqICAgKyBtICogNGJ5dGUgICAg ICAgbSBwaHlzaWNhbCBleHRlbnQgYWxsb2MuIHN0cnVjdHMgICAgNCBieXRlIGVhY2gKKyAq CisgKiAgIEVuZCBvZiBkaXNrIC0gICAgIGZpcnN0IHBoeXNpY2FsIGV4dGVudCAgICAgICAg ICAgICAgIHR5cGljYWxseSA0IG1lZ2FieXRlCiAgKiAgIFBFIHRvdGFsICoKICAqICAgUEUg c2l6ZQotICogICAocm91bmRlZCB0byA2NGsgb2Zmc2V0IHRvZGF5KQogICoKLSAqICAgcHYt PnBlX29uX2Rpc2suYmFzZSArIHB2LT5wZV9vbl9kaXNrLnNpemUgPT0gc3RhcnQgb2YgZmly c3QgcGh5c2ljYWwgZXh0ZW50CiAgKgogICovCiAKIC8qIERPTlQgVE9VQ0ggVEhFU0UgISEh ICovCiAKKworCisKKworCisKIC8qCiAgKiBMVk1fUEVfVF9NQVggY29ycmVzcG9uZHMgdG86 CiAgKgpAQCAtMjUzLDcgKzI0OSw3IEBACiAgKgogICogTWF4aW11bSBQRSBzaXplIG9mIDE2 R0IgZ2l2ZXMgYSBtYXhpbXVtIGxvZ2ljYWwgdm9sdW1lIHNpemUgb2YgMTAyNCBUQi4KICAq Ci0gKiBBRkFJSywgdGhlIGFjdHVhbCBrZXJuZWxzIGxpbWl0IHRoaXMgdG8gMiBUQi4KKyAq IEFGQUlLLCB0aGUgYWN0dWFsIGtlcm5lbHMgbGltaXQgdGhpcyB0byAxIFRCLgogICoKICAq IFNob3VsZCBiZSBhIHN1ZmZpY2llbnQgc3BlY3RydW0gOyopCiAgKi8KQEAgLTI2Miw5ICsy NTgsOSBAQAogI2RlZmluZQlMVk1fUEVfVF9NQVgJCSggKCAxIDw8ICggc2l6ZW9mICggdWlu dDE2X3QpICogOCkpIC0gMikKIAogI2RlZmluZQlMVk1fTFZfU0laRV9NQVgoYSkJKCAoIGxv bmcgbG9uZykgTFZNX1BFX1RfTUFYICogKGEpLT5wZV9zaXplID4gKCBsb25nIGxvbmcpIDEw MjQqMTAyNC9TRUNUT1JfU0laRSoxMDI0KjEwMjQgPyAoIGxvbmcgbG9uZykgMTAyNCoxMDI0 L1NFQ1RPUl9TSVpFKjEwMjQqMTAyNCA6ICggbG9uZyBsb25nKSBMVk1fUEVfVF9NQVggKiAo YSktPnBlX3NpemUpCi0jZGVmaW5lCUxWTV9NSU5fUEVfU0laRQkJKCA4MTkyTCAvIFNFQ1RP Ul9TSVpFKSAvKiA4IEtCIGluIHNlY3RvcnMgKi8KKyNkZWZpbmUJTFZNX01JTl9QRV9TSVpF CQkoIDgxOTJMIC8gU0VDVE9SX1NJWkUpCS8qIDggS0IgaW4gc2VjdG9ycyAqLwogI2RlZmlu ZQlMVk1fTUFYX1BFX1NJWkUJCSggMTZMICogMTAyNEwgKiAxMDI0TCAvIFNFQ1RPUl9TSVpF ICogMTAyNCkJLyogMTZHQiBpbiBzZWN0b3JzICovCi0jZGVmaW5lCUxWTV9ERUZBVUxUX1BF X1NJWkUJKCA0MDk2TCAqIDEwMjQgLyBTRUNUT1JfU0laRSkJLyogNCBNQiBpbiBzZWN0b3Jz ICovCisjZGVmaW5lCUxWTV9ERUZBVUxUX1BFX1NJWkUJKCAzMjc2OEwgKiAxMDI0IC8gU0VD VE9SX1NJWkUpCS8qIDMyIE1CIGluIHNlY3RvcnMgKi8KICNkZWZpbmUJTFZNX0RFRkFVTFRf U1RSSVBFX1NJWkUJMTZMCS8qIDE2IEtCICAqLwogI2RlZmluZQlMVk1fTUlOX1NUUklQRV9T SVpFCSggUEFHRV9TSVpFL1NFQ1RPUl9TSVpFKQkvKiBQQUdFU0laRSBpbiBzZWN0b3JzICov CiAjZGVmaW5lCUxWTV9NQVhfU1RSSVBFX1NJWkUJKCA1MTJMICogMTAyNCAvIFNFQ1RPUl9T SVpFKQkvKiA1MTIgS0IgaW4gc2VjdG9ycyAqLwpAQCAtMjczLDcgKzI2OSw3IEBACiAjZGVm aW5lCUxWTV9NQVhfTUlSUk9SUyAgICAJMgkvKiBmdXR1cmUgdXNlICovCiAjZGVmaW5lCUxW TV9NSU5fUkVBRF9BSEVBRAkwCS8qIG1pbmltdW0gcmVhZCBhaGVhZCBzZWN0b3JzICovCiAj ZGVmaW5lCUxWTV9ERUZBVUxUX1JFQURfQUhFQUQJMTAyNAkvKiBzZWN0b3JzIGZvciA1MTJr IHNjc2kgc2VnbWVudHMgKi8KLSNkZWZpbmUJTFZNX01BWF9SRUFEX0FIRUFECTEwMDAwCS8q IG1heGltdW0gcmVhZCBhaGVhZCBzZWN0b3JzICovCisjZGVmaW5lCUxWTV9NQVhfUkVBRF9B SEVBRAkxMDI0CS8qIG1heGltdW0gcmVhZCBhaGVhZCBzZWN0b3JzICovCiAjZGVmaW5lCUxW TV9NQVhfTFZfSU9fVElNRU9VVAk2MAkvKiBzZWNvbmRzIEkvTyB0aW1lb3V0IChmdXR1cmUg dXNlKSAqLwogI2RlZmluZQlMVk1fUEFSVElUSU9OICAgICAgICAgICAweGZlCS8qIExWTSBw YXJ0aXRpb24gaWQgKi8KICNkZWZpbmUJTFZNX05FV19QQVJUSVRJT04gICAgICAgMHg4ZQkv KiBuZXcgTFZNIHBhcnRpdGlvbiBpZCAoMTAvMDkvMTk5OSkgKi8KQEAgLTQyMCw5ICs0MTYs OSBAQAogdHlwZWRlZiBzdHJ1Y3QgbHZfYmxvY2tfZXhjZXB0aW9uX3YxIHsKIAlzdHJ1Y3Qg bGlzdF9oZWFkIGhhc2g7CiAJdWludDMyX3QgcnNlY3Rvcl9vcmc7Ci0Ja2Rldl90ICAgcmRl dl9vcmc7CisJa2Rldl90IHJkZXZfb3JnOwogCXVpbnQzMl90IHJzZWN0b3JfbmV3OwotCWtk ZXZfdCAgIHJkZXZfbmV3OworCWtkZXZfdCByZGV2X25ldzsKIH0gbHZfYmxvY2tfZXhjZXB0 aW9uX3Q7CiAKIC8qIGRpc2sgc3RvcmVkIHBlIGluZm9ybWF0aW9uICovCkBAIC00NjYsNyAr NDYyLDcgQEAKIAl1aW50IHBlX3N0YWxlOwkJLyogZm9yIGZ1dHVyZSB1c2UgKi8KIAlwZV9k aXNrX3QgKnBlOwkJLyogSE0gKi8KIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZDsKLQljaGFy IHB2X3V1aWRbVVVJRF9MRU4rMV07CisJY2hhciBwdl91dWlkW1VVSURfTEVOICsgMV07CiAK ICNpZm5kZWYgX19LRVJORUxfXwogCXVpbnQzMl90IHBlX3N0YXJ0OwkvKiBpbiBzZWN0b3Jz ICovCkBAIC00NzcsNyArNDczLDcgQEAKIC8qIGRpc2sgKi8KIHR5cGVkZWYgc3RydWN0IHB2 X2Rpc2tfdjIgewogCXVpbnQ4X3QgaWRbMl07CQkvKiBJZGVudGlmaWVyICovCi0JdWludDE2 X3QgdmVyc2lvbjsJCS8qIEhNIGx2bSB2ZXJzaW9uICovCisJdWludDE2X3QgdmVyc2lvbjsJ LyogSE0gbHZtIHZlcnNpb24gKi8KIAlsdm1fZGlza19kYXRhX3QgcHZfb25fZGlzazsKIAls dm1fZGlza19kYXRhX3Qgdmdfb25fZGlzazsKIAlsdm1fZGlza19kYXRhX3QgcHZfdXVpZGxp c3Rfb25fZGlzazsKQEAgLTQ5MCwxNCArNDg2LDE0IEBACiAJdWludDMyX3QgcHZfbnVtYmVy OwogCXVpbnQzMl90IHB2X3N0YXR1czsKIAl1aW50MzJfdCBwdl9hbGxvY2F0YWJsZTsKLQl1 aW50MzJfdCBwdl9zaXplOwkJLyogSE0gKi8KKwl1aW50MzJfdCBwdl9zaXplOwkvKiBITSAq LwogCXVpbnQzMl90IGx2X2N1cjsKIAl1aW50MzJfdCBwZV9zaXplOwogCXVpbnQzMl90IHBl X3RvdGFsOwogCXVpbnQzMl90IHBlX2FsbG9jYXRlZDsKLQkKKwogCS8qIG5ldyBpbiBzdHJ1 Y3QgdmVyc2lvbiAyICovCi0JdWludDMyX3QgcGVfc3RhcnQ7CSAgICAgICAgLyogaW4gc2Vj dG9ycyAqLworCXVpbnQzMl90IHBlX3N0YXJ0OwkvKiBpbiBzZWN0b3JzICovCiAKIH0gcHZf ZGlza190OwogCkBAIC01NzEsOCArNTY3LDggQEAKIAl1aW50MzJfdCBsdl9zbmFwc2hvdF9o YXNoX3RhYmxlX3NpemU7CiAJdWludDMyX3QgbHZfc25hcHNob3RfaGFzaF9tYXNrOwogCXdh aXRfcXVldWVfaGVhZF90IGx2X3NuYXBzaG90X3dhaXQ7Ci0JaW50CWx2X3NuYXBzaG90X3Vz ZV9yYXRlOwotCXN0cnVjdCB2Z192Mwkqdmc7CisJaW50IGx2X3NuYXBzaG90X3VzZV9yYXRl OworCXN0cnVjdCB2Z192MyAqdmc7CiAKIAl1aW50IGx2X2FsbG9jYXRlZF9zbmFwc2hvdF9s ZTsKICNlbHNlCkBAIC01ODYsMTQgKzU4MiwxNCBAQAogCXVpbnQ4X3QgdmdfbmFtZVtOQU1F X0xFTl07CiAJdWludDMyX3QgbHZfYWNjZXNzOwogCXVpbnQzMl90IGx2X3N0YXR1czsKLQl1 aW50MzJfdCBsdl9vcGVuOwkJLyogSE0gKi8KLQl1aW50MzJfdCBsdl9kZXY7CQkvKiBITSAq LworCXVpbnQzMl90IGx2X29wZW47CS8qIEhNICovCisJdWludDMyX3QgbHZfZGV2OwkvKiBI TSAqLwogCXVpbnQzMl90IGx2X251bWJlcjsJLyogSE0gKi8KIAl1aW50MzJfdCBsdl9taXJy b3JfY29waWVzOwkvKiBmb3IgZnV0dXJlIHVzZSAqLwogCXVpbnQzMl90IGx2X3JlY292ZXJ5 OwkvKiAgICAgICAiICAgICAgICAqLwogCXVpbnQzMl90IGx2X3NjaGVkdWxlOwkvKiAgICAg ICAiICAgICAgICAqLwogCXVpbnQzMl90IGx2X3NpemU7Ci0JdWludDMyX3QgbHZfc25hcHNo b3RfbWlub3I7LyogbWlub3IgbnVtYmVyIG9mIG9yaWdpbmFsICovCisJdWludDMyX3QgbHZf c25hcHNob3RfbWlub3I7CS8qIG1pbm9yIG51bWJlciBvZiBvcmlnaW5hbCAqLwogCXVpbnQx Nl90IGx2X2NodW5rX3NpemU7CS8qIGNodW5rIHNpemUgb2Ygc25hcHNob3QgKi8KIAl1aW50 MTZfdCBkdW1teTsKIAl1aW50MzJfdCBsdl9hbGxvY2F0ZWRfbGU7CkBAIC02MzAsNyArNjI2 LDcgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7CiAJcHZfdCAqcHZbQUJTX01B WF9QViArIDFdOwkvKiBwaHlzaWNhbCB2b2x1bWUgc3RydWN0IHBvaW50ZXJzICovCiAJbHZf dCAqbHZbQUJTX01BWF9MViArIDFdOwkvKiBsb2dpY2FsICB2b2x1bWUgc3RydWN0IHBvaW50 ZXJzICovCi0JY2hhciB2Z191dWlkW1VVSURfTEVOKzFdOwkvKiB2b2x1bWUgZ3JvdXAgVVVJ RCAqLworCWNoYXIgdmdfdXVpZFtVVUlEX0xFTiArIDFdOwkvKiB2b2x1bWUgZ3JvdXAgVVVJ RCAqLwogI2lmZGVmIF9fS0VSTkVMX18KIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnZnX2Rp cl9wZGU7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpsdl9zdWJkaXJfcGRlOwpAQCAtNjQ0 LDIwICs2NDAsMjAgQEAKIC8qIGRpc2sgKi8KIHR5cGVkZWYgc3RydWN0IHZnX2Rpc2tfdjIg ewogCXVpbnQ4X3QgdmdfdXVpZFtVVUlEX0xFTl07CS8qIHZvbHVtZSBncm91cCBVVUlEICov Ci0JdWludDhfdCB2Z19uYW1lX2R1bW15W05BTUVfTEVOLVVVSURfTEVOXTsJLyogcmVzdCBv ZiB2MSBWRyBuYW1lICovCisJdWludDhfdCB2Z19uYW1lX2R1bW15W05BTUVfTEVOIC0gVVVJ RF9MRU5dOwkvKiByZXN0IG9mIHYxIFZHIG5hbWUgKi8KIAl1aW50MzJfdCB2Z19udW1iZXI7 CS8qIHZvbHVtZSBncm91cCBudW1iZXIgKi8KIAl1aW50MzJfdCB2Z19hY2Nlc3M7CS8qIHJl YWQvd3JpdGUgKi8KIAl1aW50MzJfdCB2Z19zdGF0dXM7CS8qIGFjdGl2ZSBvciBub3QgKi8K LQl1aW50MzJfdCBsdl9tYXg7CQkvKiBtYXhpbXVtIGxvZ2ljYWwgdm9sdW1lcyAqLwotCXVp bnQzMl90IGx2X2N1cjsJCS8qIGN1cnJlbnQgbG9naWNhbCB2b2x1bWVzICovCi0JdWludDMy X3QgbHZfb3BlbjsJCS8qIG9wZW4gICAgbG9naWNhbCB2b2x1bWVzICovCi0JdWludDMyX3Qg cHZfbWF4OwkJLyogbWF4aW11bSBwaHlzaWNhbCB2b2x1bWVzICovCi0JdWludDMyX3QgcHZf Y3VyOwkJLyogY3VycmVudCBwaHlzaWNhbCB2b2x1bWVzIEZVICovCi0JdWludDMyX3QgcHZf YWN0OwkJLyogYWN0aXZlIHBoeXNpY2FsIHZvbHVtZXMgKi8KKwl1aW50MzJfdCBsdl9tYXg7 CS8qIG1heGltdW0gbG9naWNhbCB2b2x1bWVzICovCisJdWludDMyX3QgbHZfY3VyOwkvKiBj dXJyZW50IGxvZ2ljYWwgdm9sdW1lcyAqLworCXVpbnQzMl90IGx2X29wZW47CS8qIG9wZW4g ICAgbG9naWNhbCB2b2x1bWVzICovCisJdWludDMyX3QgcHZfbWF4OwkvKiBtYXhpbXVtIHBo eXNpY2FsIHZvbHVtZXMgKi8KKwl1aW50MzJfdCBwdl9jdXI7CS8qIGN1cnJlbnQgcGh5c2lj YWwgdm9sdW1lcyBGVSAqLworCXVpbnQzMl90IHB2X2FjdDsJLyogYWN0aXZlIHBoeXNpY2Fs IHZvbHVtZXMgKi8KIAl1aW50MzJfdCBkdW1teTsKIAl1aW50MzJfdCB2Z2RhOwkJLyogdm9s dW1lIGdyb3VwIGRlc2NyaXB0b3IgYXJyYXlzIEZVICovCi0JdWludDMyX3QgcGVfc2l6ZTsJ CS8qIHBoeXNpY2FsIGV4dGVudCBzaXplIGluIHNlY3RvcnMgKi8KLQl1aW50MzJfdCBwZV90 b3RhbDsJCS8qIHRvdGFsIG9mIHBoeXNpY2FsIGV4dGVudHMgKi8KKwl1aW50MzJfdCBwZV9z aXplOwkvKiBwaHlzaWNhbCBleHRlbnQgc2l6ZSBpbiBzZWN0b3JzICovCisJdWludDMyX3Qg cGVfdG90YWw7CS8qIHRvdGFsIG9mIHBoeXNpY2FsIGV4dGVudHMgKi8KIAl1aW50MzJfdCBw ZV9hbGxvY2F0ZWQ7CS8qIGFsbG9jYXRlZCBwaHlzaWNhbCBleHRlbnRzICovCiAJdWludDMy X3QgcHZnX3RvdGFsOwkvKiBwaHlzaWNhbCB2b2x1bWUgZ3JvdXBzIEZVICovCiB9IHZnX2Rp c2tfdDsKQEAgLTcxNiw0MCArNzEyLDQ0IEBACiAKIC8qIFJlcXVlc3Qgc3RydWN0dXJlIExW X1NOQVBTSE9UX1VTRV9SQVRFICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0JaW50CWJsb2NrOwot CWludAlyYXRlOworCWludCBibG9jazsKKwlpbnQgcmF0ZTsKIH0gbHZfc25hcHNob3RfdXNl X3JhdGVfcmVxX3Q7CiAKIAogCiAvKiB1c2VmdWwgaW5saW5lcyAqLwotc3RhdGljIGlubGlu ZSB1bG9uZyByb3VuZF91cCh1bG9uZyBuLCB1bG9uZyBzaXplKSB7CitzdGF0aWMgaW5saW5l IHVsb25nIHJvdW5kX3VwKHVsb25nIG4sIHVsb25nIHNpemUpCit7CiAJc2l6ZS0tOwogCXJl dHVybiAobiArIHNpemUpICYgfnNpemU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdWxvbmcgZGl2 X3VwKHVsb25nIG4sIHVsb25nIHNpemUpIHsKK3N0YXRpYyBpbmxpbmUgdWxvbmcgZGl2X3Vw KHVsb25nIG4sIHVsb25nIHNpemUpCit7CiAJcmV0dXJuIHJvdW5kX3VwKG4sIHNpemUpIC8g c2l6ZTsKIH0KIAogLyogRklYTUU6IG5hc3R5IGNhcGl0YWwgbGV0dGVycyAqLwotc3RhdGlj IGludCBpbmxpbmUgTFZNX0dFVF9DT1dfVEFCTEVfQ0hVTktTX1BFUl9QRSh2Z190ICp2Zywg bHZfdCAqbHYpIHsKK3N0YXRpYyBpbnQgaW5saW5lIExWTV9HRVRfQ09XX1RBQkxFX0NIVU5L U19QRVJfUEUodmdfdCAqIHZnLCBsdl90ICogbHYpCit7CiAJcmV0dXJuIHZnLT5wZV9zaXpl IC8gbHYtPmx2X2NodW5rX3NpemU7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIExWTV9HRVRf Q09XX1RBQkxFX0VOVFJJRVNfUEVSX1BFKHZnX3QgKnZnLCBsdl90ICpsdikgeworc3RhdGlj IGludCBpbmxpbmUgTFZNX0dFVF9DT1dfVEFCTEVfRU5UUklFU19QRVJfUEUodmdfdCAqIHZn LCBsdl90ICogbHYpCit7CiAJdWxvbmcgY2h1bmtzID0gdmctPnBlX3NpemUgLyBsdi0+bHZf Y2h1bmtfc2l6ZTsKIAl1bG9uZyBlbnRyeV9zaXplID0gc2l6ZW9mKGx2X0NPV190YWJsZV9k aXNrX3QpOwogCXVsb25nIGNodW5rX3NpemUgPSBsdi0+bHZfY2h1bmtfc2l6ZSAqIFNFQ1RP Ul9TSVpFOwogCXVsb25nIGVudHJpZXMgPSAodmctPnBlX3NpemUgKiBTRUNUT1JfU0laRSkg LwotCQkoZW50cnlfc2l6ZSArIGNodW5rX3NpemUpOworCSAgICAoZW50cnlfc2l6ZSArIGNo dW5rX3NpemUpOwogCi0JaWYoY2h1bmtzIDwgMikKKwlpZiAoY2h1bmtzIDwgMikKIAkJcmV0 dXJuIDA7CiAKLQlmb3IoOyBlbnRyaWVzOyBlbnRyaWVzLS0pCi0JCWlmKChkaXZfdXAoZW50 cmllcyAqIGVudHJ5X3NpemUsIGNodW5rX3NpemUpICsgZW50cmllcykgPD0KLQkJICAgY2h1 bmtzKQorCWZvciAoOyBlbnRyaWVzOyBlbnRyaWVzLS0pCisJCWlmICgoZGl2X3VwKGVudHJp ZXMgKiBlbnRyeV9zaXplLCBjaHVua19zaXplKSArIGVudHJpZXMpIDw9CisJCSAgICBjaHVu a3MpCiAJCQlicmVhazsKIAogCXJldHVybiBlbnRyaWVzOwpAQCAtNzU3LDQgKzc1NywzIEBA CiAKIAogI2VuZGlmCQkJCS8qICNpZm5kZWYgX0xWTV9IX0lOQ0xVREUgKi8KLQotLS0gbGlu dXgvZHJpdmVycy9tZC9sdm0uYy5vcmlnCU1vbiBNYXIgMjQgMTU6MDc6MzcgMjAwMworKysg bGludXgvZHJpdmVycy9tZC9sdm0uYwlUdWUgT2N0IDI4IDEyOjQzOjAzIDIwMDMKQEAgLTEs MTMgKzEsMTUgQEAKIC8qCiAgKiBrZXJuZWwvbHZtLmMKICAqCi0gKiBDb3B5cmlnaHQgKEMp IDE5OTcgLSAyMDAxICBIZWlueiBNYXVlbHNoYWdlbiwgU2lzdGluYSBTb2Z0d2FyZQorICog Q29weXJpZ2h0IChDKSAxOTk3IC0gMjAwMiAgSGVpbnogTWF1ZWxzaGFnZW4sIFNpc3RpbmEg U29mdHdhcmUKICAqCiAgKiBGZWJydWFyeS1Ob3ZlbWJlciAxOTk3CiAgKiBBcHJpbC1NYXks SnVseS1BdWd1c3QsTm92ZW1iZXIgMTk5OAogICogSmFudWFyeS1NYXJjaCxNYXksSnVseSxT ZXB0ZW1iZXIsT2N0b2JlciAxOTk5CiAgKiBKYW51YXJ5LEZlYnJ1YXJ5LEp1bHksU2VwdGVt YmVyLU5vdmVtYmVyIDIwMDAKLSAqIEphbnVhcnktQXByaWwgMjAwMQorICogSmFudWFyeS1N YXksSnVuZSxPY3RvYmVyIDIwMDEKKyAqIE1heS1BdWd1c3QgMjAwMgorICogRmVicnVhcnkg MjAwMwogICoKICAqCiAgKiBMVk0gZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIxNCw2ICsyMTYsMTcgQEAKICAq ICAgICAgICAgICAgICAgICBpbiB0aGUgTFYgZWFjaCB0aW1lLiAgW0FFRF0KICAqICAgIDEy LzEwLzIwMDEgLSBVc2UgYWRkL2RlbF9nZW5kaXNrKCkgcm91dGluZXMgaW4gMi40LjEwKwog ICogICAgMDEvMTEvMjAwMSAtIEJhY2twb3J0IHJlYWRfYWhlYWQgY2hhbmdlIGZyb20gTGlu dXMga2VybmVsIFtBRURdCisgKiAgICAyNC8wNS8yMDAyIC0gZml4ZWQgbG9ja2luZyBidWcg aW4gbHZtX2RvX2xlX3JlbWFwKCkgaW50cm9kdWNlZCB3aXRoIDEuMC40CisgKiAgICAxMy8w Ni8yMDAyIC0gdXNlIGJsa19pb2N0bCgpIHRvIHN1cHBvcnQgdmFyaW91cyBzdGFuZGFyZCBi bG9jayBpb2N0bHMKKyAqICAgICAgICAgICAgICAgLSBzdXBwb3J0IEhESU9fR0VUR0VPX0JJ RyBpb2N0bAorICogICAgMDUvMDcvMjAwMiAtIGZpeGVkIE9CTyBlcnJvciBvbiB2ZyBhcnJh eSBhY2Nlc3MgW2JlbmhAa2VybmVsLmNyYXNoaW5nLm9yZ10KKyAqICAgIDIyLzA3LzIwMDIg LSBzdHJlYW1saW5lZCBibGtfaW9jdGwoKSBjYWxsCisgKiAgICAxNC8wOC8yMDAyIC0gc3Rv cmVkIGZzIGhhbmRsZSBpbiBsdm1fZG9fbHZfcmVuYW1lCisgKiAgICAgICAgICAgICAgICAg W2thb3J1QGJzZC50bmVzLm5lYy5jby5qcF0KKyAqICAgIDA2LzAyLzIwMDMgLSBmaXggcGVy c2lzdGVudCBzbmFwc2hvdCBleHRlbmQvcmVkdWNlIGJ1ZyBpbgorICoJCSAgIGx2bV9kb19s dl9leHRlbmRfcmVkdWNlKCkgW2RhbGVzdGVwaGVuc29uQG1hYy5jb21dCisgKiAgICAwNC8w My8yMDAzIC0gc25hcHNob3QgZXh0ZW5kL3JlZHVjZSBtZW1vcnkgbGVhaworICogICAgICAg ICAgICAgICAtIFZHIFBFIGNvdW50ZXIgd3JvbmcgW2RhbGVzdGVwaGVuc29uQG1hYy5jb21d CiAgKgogICovCiAKQEAgLTIyMyw2ICsyMzYsOSBAQAogI2RlZmluZSBERVZJQ0VfT0ZGKGRl dmljZSkKICNkZWZpbmUgTE9DQUxfRU5EX1JFUVVFU1QKIAorLyogbHZtX2RvX2x2X2NyZWF0 ZSBjYWxscyBmc3luY19kZXZfbG9ja2ZzKCkvdW5sb2NrZnMoKSAqLworLyogI2RlZmluZQlM Vk1fVkZTX0VOSEFOQ0VNRU5UICovCisKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAg LTM1NCwxNCArMzcwLDEzIEBACiAKIAogLyogdm9sdW1lIGdyb3VwIGRlc2NyaXB0b3IgYXJl YSBwb2ludGVycyAqLwotdmdfdCAqdmdbQUJTX01BWF9WR107Cit2Z190ICp2Z1tBQlNfTUFY X1ZHICsgMV07CiAKIC8qIG1hcCBmcm9tIGJsb2NrIG1pbm9yIG51bWJlciB0byBWRyBhbmQg TFYgbnVtYmVycyAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RhdGljIHN0cnVjdCB7CiAJaW50 IHZnX251bWJlcjsKIAlpbnQgbHZfbnVtYmVyOwotfSB2Z19sdl9tYXBfdDsKLXN0YXRpYyB2 Z19sdl9tYXBfdCB2Z19sdl9tYXBbQUJTX01BWF9MVl07Cit9IHZnX2x2X21hcFtBQlNfTUFY X0xWXTsKIAogCiAvKiBSZXF1ZXN0IHN0cnVjdHVyZXMgKGx2bV9jaHJfaW9jdGwoKSkgKi8K QEAgLTM5MSw2ICs0MDYsNyBAQAogCiAKIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHZtX2No cl9mb3BzID0geworCW93bmVyOlRISVNfTU9EVUxFLAogCW9wZW46bHZtX2Nocl9vcGVuLAog CXJlbGVhc2U6bHZtX2Nocl9jbG9zZSwKIAlpb2N0bDpsdm1fY2hyX2lvY3RsLApAQCAtMzk4 LDEwICs0MTQsMTAgQEAKIAogLyogYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMgc3RydWN0dXJl IG5lZWRlZCBmb3IgMi4zLjM4PyBhbmQgYWJvdmUgKi8KIHN0cnVjdCBibG9ja19kZXZpY2Vf b3BlcmF0aW9ucyBsdm1fYmxrX2RvcHMgPSB7Ci0Jb3duZXI6VEhJU19NT0RVTEUsCi0Jb3Bl bjpsdm1fYmxrX29wZW4sCi0JcmVsZWFzZTpsdm1fYmxrX2Nsb3NlLAotCWlvY3RsOmx2bV9i bGtfaW9jdGwsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGx2bV9ibGtf b3BlbiwKKwkucmVsZWFzZQk9IGx2bV9ibGtfY2xvc2UsCisJLmlvY3RsCQk9IGx2bV9ibGtf aW9jdGwsCiB9OwogCiAKQEAgLTQxMiwxMyArNDI4LDEzIEBACiBzdGF0aWMgaW50IGx2bV9z aXplW01BWF9MVl07CiAKIHN0YXRpYyBzdHJ1Y3QgZ2VuZGlzayBsdm1fZ2VuZGlzayA9IHsK LQltYWpvcjpNQUpPUl9OUiwKLQltYWpvcl9uYW1lOkxWTV9OQU1FLAotCW1pbm9yX3NoaWZ0 OjAsCi0JbWF4X3A6MSwKLQlwYXJ0Omx2bV9oZF9zdHJ1Y3QsCi0Jc2l6ZXM6bHZtX3NpemUs Ci0JbnJfcmVhbDpNQVhfTFYsCisJLm1ham9yCQk9IE1BSk9SX05SLAorCS5tYWpvcl9uYW1l CT0gTFZNX05BTUUsCisJLm1pbm9yX3NoaWZ0CT0gMCwKKwkubWF4X3AJCT0gMSwKKwkucGFy dAkJPSBsdm1faGRfc3RydWN0LAorCS5zaXplcwkJPSBsdm1fc2l6ZSwKKwkubnJfcmVhbAk9 IE1BWF9MViwKIH07CiAKIApAQCAtNTMxLDcgKzU0Nyw3IEBACiAJcGVfbG9ja19yZXEuZGF0 YS5wdl9vZmZzZXQgPSAwOwogCiAJLyogSW5pdGlhbGl6ZSBWRyBwb2ludGVycyAqLwotCWZv ciAodiA9IDA7IHYgPCBBQlNfTUFYX1ZHOyB2KyspCisJZm9yICh2ID0gMDsgdiA8IEFCU19N QVhfVkcgKyAxOyB2KyspCiAJCXZnW3ZdID0gTlVMTDsKIAogCS8qIEluaXRpYWxpemUgTFYg LT4gVkcgYXNzb2NpYXRpb24gKi8KQEAgLTYyNCw3ICs2NDAsOCBAQAogCQkvKiBjaGVjayBs dm0gdmVyc2lvbiB0byBlbnN1cmUgZHJpdmVyL3Rvb2xzK2xpYgogCQkgICBpbnRlcm9wZXJh YmlsaXR5ICovCiAJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmbHZtX2lvcF92ZXJzaW9uLCBz aXplb2YodXNob3J0KSkgIT0KLQkJICAgIDApIHJldHVybiAtRUZBVUxUOworCQkgICAgMCkK KwkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKIAogI2lmZGVmIExWTV9UT1RBTF9S RVNFVApAQCAtNjg3LDcgKzcwNCw4IEBACiAJCWlmICh2Z19wdHIgPT0gTlVMTCkKIAkJCXJl dHVybiAtRU5YSU87CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmZXh0ZW5kYWJsZSwgYXJnLCBz aXplb2YoZXh0ZW5kYWJsZSkpICE9Ci0JCSAgICAwKSByZXR1cm4gLUVGQVVMVDsKKwkJICAg IDApCisJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlpZiAoZXh0ZW5kYWJsZSA9PSBWR19FWFRF TkRBQkxFIHx8CiAJCSAgICBleHRlbmRhYmxlID09IH5WR19FWFRFTkRBQkxFKSB7CkBAIC03 NDMsNyArNzYxLDggQEAKIAogCQlpZiAoY29tbWFuZCAhPSBMVl9SRU1PVkUpIHsKIAkJCWlm IChjb3B5X2Zyb21fdXNlcigmbHYsIGx2X3JlcS5sdiwgc2l6ZW9mKGx2X3QpKSAhPQotCQkJ ICAgIDApIHJldHVybiAtRUZBVUxUOworCQkJICAgIDApCisJCQkJcmV0dXJuIC1FRkFVTFQ7 CiAJCX0KIAkJc3dpdGNoIChjb21tYW5kKSB7CiAJCWNhc2UgTFZfQ1JFQVRFOgpAQCAtNzk5 LDcgKzgxOCw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICIlcyAtLSBs dm1fY2hyX2lvY3RsOiB1bmtub3duIGNvbW1hbmQgMHgleFxuIiwKIAkJICAgICAgIGx2bV9u YW1lLCBjb21tYW5kKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRU5PVFRZOwog CX0KIAogCXJldHVybiAwOwpAQCAtODgwLDEwICs4OTksMTIgQEAKIAkJLyogV2UgbmVlZCB0 byBiZSBhYmxlIHRvICJyZWFkIiBhbiBpbmFjdGl2ZSBMVgogCQkgICB0byByZS1hY3RpdmF0 ZSBpdCBhZ2FpbiAqLwogCQlpZiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgot CQkgICAgKCEobHZfcHRyLT5sdl9zdGF0dXMgJiBMVl9BQ1RJVkUpKSkgcmV0dXJuIC1FUEVS TTsKKwkJICAgICghKGx2X3B0ci0+bHZfc3RhdHVzICYgTFZfQUNUSVZFKSkpCisJCQlyZXR1 cm4gLUVQRVJNOwogCiAJCWlmICghKGx2X3B0ci0+bHZfYWNjZXNzICYgTFZfV1JJVEUpICYm Ci0JCSAgICAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKSByZXR1cm4gLUVBQ0NFUzsK KwkJICAgIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJCQlyZXR1cm4gLUVBQ0NF UzsKIAogCiAJCS8qIGJlIHN1cmUgdG8gaW5jcmVtZW50IFZHIGNvdW50ZXIgKi8KQEAgLTkw MCwxMTIgKzkyMSwxMTggQEAKIAlyZXR1cm4gLUVOWElPOwogfQkJCQkvKiBsdm1fYmxrX29w ZW4oKSAqLwogCisvKiBEZWxpdmVyICJoYXJkIGRpc2sgZ2VvbWV0cnkiICovCitzdGF0aWMg aW50IF9oZGlvX2dldGdlbyh1bG9uZyBhLCBsdl90ICogbHZfcHRyLCBpbnQgd2hhdCkKK3sK KwlpbnQgcmV0ID0gMDsKKwl1Y2hhciBoZWFkcyA9IDEyODsKKwl1Y2hhciBzZWN0b3JzID0g MTI4OworCXVsb25nIHN0YXJ0ID0gMDsKKwl1aW50IGN5bGluZGVyczsKKworCXdoaWxlICho ZWFkcyAqIHNlY3RvcnMgPiBsdl9wdHItPmx2X3NpemUpIHsKKwkJaGVhZHMgPj49IDE7CisJ CXNlY3RvcnMgPj49IDE7CisJfQorCWN5bGluZGVycyA9IGx2X3B0ci0+bHZfc2l6ZSAvIGhl YWRzIC8gc2VjdG9yczsKKworCXN3aXRjaCAod2hhdCkgeworCWNhc2UgMDoKKwkJeworCQkJ c3RydWN0IGhkX2dlb21ldHJ5ICpoZCA9IChzdHJ1Y3QgaGRfZ2VvbWV0cnkgKikgYTsKKwor CQkJaWYgKHB1dF91c2VyKGhlYWRzLCAmaGQtPmhlYWRzKSB8fAorCQkJICAgIHB1dF91c2Vy KHNlY3RvcnMsICZoZC0+c2VjdG9ycykgfHwKKwkJCSAgICBwdXRfdXNlcigodXNob3J0KSBj eWxpbmRlcnMsICZoZC0+Y3lsaW5kZXJzKSB8fAorCQkJICAgIHB1dF91c2VyKHN0YXJ0LCAm aGQtPnN0YXJ0KSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKyNp ZmRlZiBIRElPX0dFVEdFT19CSUcKKwljYXNlIDE6CisJCXsKKwkJCXN0cnVjdCBoZF9iaWdf Z2VvbWV0cnkgKmhkID0KKwkJCSAgICAoc3RydWN0IGhkX2JpZ19nZW9tZXRyeSAqKSBhOwor CisJCQlpZiAocHV0X3VzZXIoaGVhZHMsICZoZC0+aGVhZHMpIHx8CisJCQkgICAgcHV0X3Vz ZXIoc2VjdG9ycywgJmhkLT5zZWN0b3JzKSB8fAorCQkJICAgIHB1dF91c2VyKGN5bGluZGVy cywgJmhkLT5jeWxpbmRlcnMpIHx8CisJCQkgICAgcHV0X3VzZXIoc3RhcnQsICZoZC0+c3Rh cnQpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCisJ fQorCisJUF9JT0NUTCgiJXMgLS0gbHZtX2Jsa19pb2N0bCAtLSBjeWxpbmRlcnM6ICVkXG4i LAorCQlsdm1fbmFtZSwgY3lsaW5kZXJzKTsKKwlyZXR1cm4gcmV0OworfQorCiAKIC8qCiAg KiBibG9jayBkZXZpY2UgaS9vLWNvbnRyb2wgcm91dGluZQogICovCiBzdGF0aWMgaW50IGx2 bV9ibGtfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0J CQkgdWludCBjb21tYW5kLCB1bG9uZyBhKQorCQkJIHVpbnQgY21kLCB1bG9uZyBhKQogewot CWludCBtaW5vciA9IE1JTk9SKGlub2RlLT5pX3JkZXYpOworCWtkZXZfdCBkZXYgPSBpbm9k ZS0+aV9yZGV2OworCWludCBtaW5vciA9IE1JTk9SKGRldiksIHJldDsKIAl2Z190ICp2Z19w dHIgPSB2Z1tWR19CTEsobWlub3IpXTsKIAlsdl90ICpsdl9wdHIgPSB2Z19wdHItPmx2W0xW X0JMSyhtaW5vcildOwogCXZvaWQgKmFyZyA9ICh2b2lkICopIGE7Ci0Jc3RydWN0IGhkX2dl b21ldHJ5ICpoZCA9IChzdHJ1Y3QgaGRfZ2VvbWV0cnkgKikgYTsKIAotCVBfSU9DVEwoImJs ayBNSU5PUjogJWQgIGNvbW1hbmQ6IDB4JVggIGFyZzogJXAgIFZHIzogJWQgIExWIzogJWQg ICIKLQkJIm1vZGU6ICVzJXNcbiIsIG1pbm9yLCBjb21tYW5kLCBhcmcsIFZHX0JMSyhtaW5v ciksCisJUF9JT0NUTCgiYmxrIE1JTk9SOiAlZCAgY21kOiAweCVYICBhcmc6ICVwICBWRyM6 ICVkICBMViM6ICVkICAiCisJCSJtb2RlOiAlcyVzXG4iLCBtaW5vciwgY21kLCBhcmcsIFZH X0JMSyhtaW5vciksCiAJCUxWX0JMSyhtaW5vciksIE1PREVfVE9fU1RSKGZpbGUtPmZfbW9k ZSkpOwogCi0Jc3dpdGNoIChjb21tYW5kKSB7Ci0JY2FzZSBCTEtTU1pHRVQ6Ci0JCS8qIGdl dCBibG9jayBkZXZpY2Ugc2VjdG9yIHNpemUgYXMgbmVlZGVkIGUuZy4gYnkgZmRpc2sgKi8K LQkJcmV0dXJuIHB1dF91c2VyKGx2bV9zZWN0c2l6ZShpbm9kZS0+aV9yZGV2KSwgKGludCAq KSBhcmcpOwotCi0JY2FzZSBCTEtHRVRTSVpFOgotCQkvKiByZXR1cm4gZGV2aWNlIHNpemUg Ki8KLQkJUF9JT0NUTCgiQkxLR0VUU0laRTogJXVcbiIsIGx2X3B0ci0+bHZfc2l6ZSk7Ci0J CWlmIChwdXRfdXNlcihsdl9wdHItPmx2X3NpemUsICh1bnNpZ25lZCBsb25nICopIGFyZykp Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7Ci0KLSNpZmRlZiBCTEtHRVRTSVpFNjQK LQljYXNlIEJMS0dFVFNJWkU2NDoKLQkJaWYgKHB1dF91c2VyKCh1NjQpIGx2X3B0ci0+bHZf c2l6ZSA8PCA5LCAodTY0ICopIGFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7 Ci0jZW5kaWYKLQotCWNhc2UgQkxLRkxTQlVGOgotCQkvKiBmbHVzaCBidWZmZXIgY2FjaGUg Ki8KLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FQUNDRVM7 Ci0KLQkJUF9JT0NUTCgiQkxLRkxTQlVGXG4iKTsKLQotCQlmc3luY19kZXYoaW5vZGUtPmlf cmRldik7Ci0JCWludmFsaWRhdGVfYnVmZmVycyhpbm9kZS0+aV9yZGV2KTsKLQkJYnJlYWs7 Ci0KLQorCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBCTEtSQVNFVDoKIAkJLyogc2V0IHJlYWQg YWhlYWQgZm9yIGJsb2NrIGRldmljZSAqLwotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1J TikpCi0JCQlyZXR1cm4gLUVBQ0NFUzsKLQotCQlQX0lPQ1RMKCJCTEtSQVNFVDogJWxkIHNl Y3RvcnMgZm9yICVzXG4iLAotCQkJKGxvbmcpIGFyZywga2Rldm5hbWUoaW5vZGUtPmlfcmRl dikpOwotCi0JCWlmICgobG9uZykgYXJnIDwgTFZNX01JTl9SRUFEX0FIRUFEIHx8Ci0JCSAg ICAobG9uZykgYXJnID4gTFZNX01BWF9SRUFEX0FIRUFEKSByZXR1cm4gLUVJTlZBTDsKLQkJ bHZfcHRyLT5sdl9yZWFkX2FoZWFkID0gKGxvbmcpIGFyZzsKKwkJcmV0ID0gYmxrX2lvY3Rs KGRldiwgY21kLCBhKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWx2X3B0ci0+ bHZfcmVhZF9haGVhZCA9IChsb25nKSBhOwogCQlMVk1fQ09SUkVDVF9SRUFEX0FIRUFEKGx2 X3B0ci0+bHZfcmVhZF9haGVhZCk7Ci0JCXJlYWRfYWhlYWRbTUFKT1JfTlJdID0gbHZfcHRy LT5sdl9yZWFkX2FoZWFkOwotCQlicmVhazsKLQotCi0JY2FzZSBCTEtSQUdFVDoKLQkJLyog Z2V0IGN1cnJlbnQgcmVhZCBhaGVhZCBzZXR0aW5nICovCi0JCVBfSU9DVEwoIkJMS1JBR0VU ICVkXG4iLCBsdl9wdHItPmx2X3JlYWRfYWhlYWQpOwotCQlpZiAocHV0X3VzZXIobHZfcHRy LT5sdl9yZWFkX2FoZWFkLCAobG9uZyAqKSBhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CiAJ CWJyZWFrOwogCi0KIAljYXNlIEhESU9fR0VUR0VPOgorI2lmZGVmIEhESU9fR0VUR0VPX0JJ RworCWNhc2UgSERJT19HRVRHRU9fQklHOgorI2VuZGlmCiAJCS8qIGdldCBkaXNrIGdlb21l dHJ5ICovCiAJCVBfSU9DVEwoIiVzIC0tIGx2bV9ibGtfaW9jdGwgLS0gSERJT19HRVRHRU9c biIsIGx2bV9uYW1lKTsKLQkJaWYgKGhkID09IE5VTEwpCisJCWlmICghYSkKIAkJCXJldHVy biAtRUlOVkFMOwotCQl7Ci0JCQl1bnNpZ25lZCBjaGFyIGhlYWRzID0gNjQ7Ci0JCQl1bnNp Z25lZCBjaGFyIHNlY3RvcnMgPSAzMjsKLQkJCWxvbmcgc3RhcnQgPSAwOwotCQkJc2hvcnQg Y3lsaW5kZXJzID0KLQkJCSAgICBsdl9wdHItPmx2X3NpemUgLyBoZWFkcyAvIHNlY3RvcnM7 Ci0KLQkJCWlmIChjb3B5X3RvX3VzZXIoKGNoYXIgKikgJmhkLT5oZWFkcywgJmhlYWRzLAot CQkJCQkgc2l6ZW9mKGhlYWRzKSkgIT0gMCB8fAotCQkJICAgIGNvcHlfdG9fdXNlcigoY2hh ciAqKSAmaGQtPnNlY3RvcnMsICZzZWN0b3JzLAotCQkJCQkgc2l6ZW9mKHNlY3RvcnMpKSAh PSAwIHx8Ci0JCQkgICAgY29weV90b191c2VyKChzaG9ydCAqKSAmaGQtPmN5bGluZGVycywK LQkJCQkJICZjeWxpbmRlcnMsCi0JCQkJCSBzaXplb2YoY3lsaW5kZXJzKSkgIT0gMAotCQkJ ICAgIHx8IGNvcHlfdG9fdXNlcigobG9uZyAqKSAmaGQtPnN0YXJ0LCAmc3RhcnQsCi0JCQkJ CSAgICBzaXplb2Yoc3RhcnQpKSAhPSAwKQotCQkJCXJldHVybiAtRUZBVUxUOwogCi0JCQlQ X0lPQ1RMKCIlcyAtLSBsdm1fYmxrX2lvY3RsIC0tIGN5bGluZGVyczogJWRcbiIsCi0JCQkJ bHZtX25hbWUsIGN5bGluZGVycyk7CisJCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgSERJT19H RVRHRU86CisJCQlyZXR1cm4gX2hkaW9fZ2V0Z2VvKGEsIGx2X3B0ciwgMCk7CisjaWZkZWYg SERJT19HRVRHRU9fQklHCisJCWNhc2UgSERJT19HRVRHRU9fQklHOgorCQkJcmV0dXJuIF9o ZGlvX2dldGdlbyhhLCBsdl9wdHIsIDEpOworI2VuZGlmCiAJCX0KLQkJYnJlYWs7CiAKKwlj YXNlIExWX0JNQVA6CisJCS8qIHR1cm4gbG9naWNhbCBibG9jayBpbnRvIChkZXZfdCwgYmxv Y2spLiBub24gcHJpdmlsZWdlZC4gKi8KKwkJLyogZG9uJ3QgYm1hcCBhIHNuYXBzaG90LCBz aW5jZSB0aGUgbWFwcGluZyBjYW4gY2hhbmdlICovCisJCWlmIChsdl9wdHItPmx2X2FjY2Vz cyAmIExWX1NOQVBTSE9UKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQlyZXR1cm4gbHZtX3Vz ZXJfYm1hcChpbm9kZSwgKHN0cnVjdCBsdl9ibWFwICopIGFyZyk7CiAKIAljYXNlIExWX1NF VF9BQ0NFU1M6CiAJCS8qIHNldCBhY2Nlc3MgZmxhZ3Mgb2YgYSBsb2dpY2FsIHZvbHVtZSAq LwogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVBQ0NFUzsK KworCQlkb3duX3dyaXRlKCZsdl9wdHItPmx2X2xvY2spOwogCQlsdl9wdHItPmx2X2FjY2Vz cyA9ICh1bG9uZykgYXJnOworCQl1cF93cml0ZSgmbHZfcHRyLT5sdl9sb2NrKTsKKwogCQlp ZiAobHZfcHRyLT5sdl9hY2Nlc3MgJiBMVl9XUklURSkKIAkJCXNldF9kZXZpY2Vfcm8obHZf cHRyLT5sdl9kZXYsIDApOwogCQllbHNlCkBAIC0xMDEzLDM4ICsxMDQwLDM3IEBACiAJCWJy ZWFrOwogCiAKKwljYXNlIExWX1NFVF9BTExPQ0FUSU9OOgorCQkvKiBzZXQgYWxsb2NhdGlv biBmbGFncyBvZiBhIGxvZ2ljYWwgdm9sdW1lICovCisJCWlmICghY2FwYWJsZShDQVBfU1lT X0FETUlOKSkKKwkJCXJldHVybiAtRUFDQ0VTOworCQlkb3duX3dyaXRlKCZsdl9wdHItPmx2 X2xvY2spOworCQlsdl9wdHItPmx2X2FsbG9jYXRpb24gPSAodWxvbmcpIGFyZzsKKwkJdXBf d3JpdGUoJmx2X3B0ci0+bHZfbG9jayk7CisJCWJyZWFrOworCiAJY2FzZSBMVl9TRVRfU1RB VFVTOgogCQkvKiBzZXQgc3RhdHVzIGZsYWdzIG9mIGEgbG9naWNhbCB2b2x1bWUgKi8KIAkJ aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCWlm ICghKCh1bG9uZykgYXJnICYgTFZfQUNUSVZFKSAmJiBsdl9wdHItPmx2X29wZW4gPiAxKQog CQkJcmV0dXJuIC1FUEVSTTsKKwkJZG93bl93cml0ZSgmbHZfcHRyLT5sdl9sb2NrKTsKIAkJ bHZfcHRyLT5sdl9zdGF0dXMgPSAodWxvbmcpIGFyZzsKLQkJYnJlYWs7Ci0KLQljYXNlIExW X0JNQVA6Ci0JCS8qIHR1cm4gbG9naWNhbCBibG9jayBpbnRvIChkZXZfdCwgYmxvY2spLiBu b24gcHJpdmlsZWdlZC4gKi8KLQkJLyogZG9uJ3QgYm1hcCBhIHNuYXBzaG90LCBzaW5jZSB0 aGUgbWFwcGluZyBjYW4gY2hhbmdlICovCi0JCWlmIChsdl9wdHItPmx2X2FjY2VzcyAmIExW X1NOQVBTSE9UKQotCQkJcmV0dXJuIC1FUEVSTTsKLQotCQlyZXR1cm4gbHZtX3VzZXJfYm1h cChpbm9kZSwgKHN0cnVjdCBsdl9ibWFwICopIGFyZyk7Ci0KLQljYXNlIExWX1NFVF9BTExP Q0FUSU9OOgotCQkvKiBzZXQgYWxsb2NhdGlvbiBmbGFncyBvZiBhIGxvZ2ljYWwgdm9sdW1l ICovCi0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRUFDQ0VT OwotCQlsdl9wdHItPmx2X2FsbG9jYXRpb24gPSAodWxvbmcpIGFyZzsKKwkJdXBfd3JpdGUo Jmx2X3B0ci0+bHZfbG9jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBMVl9TTkFQU0hPVF9VU0Vf UkFURToKIAkJcmV0dXJuIGx2bV9nZXRfc25hcHNob3RfdXNlX3JhdGUobHZfcHRyLCBhcmcp OwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIiVzIC0t IGx2bV9ibGtfaW9jdGw6IHVua25vd24gY29tbWFuZCAweCV4XG4iLAotCQkgICAgICAgbHZt X25hbWUsIGNvbW1hbmQpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogSGFuZGxlIHJlc3Qg aGVyZSAqLworCQlyZXQgPSBibGtfaW9jdGwoZGV2LCBjbWQsIGEpOworCQlpZiAocmV0KQor CQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlcyAtLSBsdm1fYmxrX2lvY3Rs OiB1bmtub3duICIKKwkJCSAgICAgICAiY21kIDB4JXhcbiIsIGx2bV9uYW1lLCBjbWQpOwor CQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAwOwpAQCAtMTA3Niw4ICsxMTAyLDEyIEBA CiB7CiAJbHZfc25hcHNob3RfdXNlX3JhdGVfcmVxX3QgbHZfcmF0ZV9yZXE7CiAKLQlpZiAo IShsdi0+bHZfYWNjZXNzICYgTFZfU05BUFNIT1QpKQorCWRvd25fcmVhZCgmbHYtPmx2X2xv Y2spOworCWlmICghKGx2LT5sdl9hY2Nlc3MgJiBMVl9TTkFQU0hPVCkpIHsKKwkJdXBfcmVh ZCgmbHYtPmx2X2xvY2spOwogCQlyZXR1cm4gLUVQRVJNOworCX0KKwl1cF9yZWFkKCZsdi0+ bHZfbG9jayk7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmx2X3JhdGVfcmVxLCBhcmcsIHNp emVvZihsdl9yYXRlX3JlcSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEwODcsMTAgKzEx MTcsMTcgQEAKIAogCXN3aXRjaCAobHZfcmF0ZV9yZXEuYmxvY2spIHsKIAljYXNlIDA6CisJ CWRvd25fd3JpdGUoJmx2LT5sdl9sb2NrKTsKIAkJbHYtPmx2X3NuYXBzaG90X3VzZV9yYXRl ID0gbHZfcmF0ZV9yZXEucmF0ZTsKKwkJdXBfd3JpdGUoJmx2LT5sdl9sb2NrKTsKKwkJZG93 bl9yZWFkKCZsdi0+bHZfbG9jayk7CiAJCWlmIChsdi0+bHZfcmVtYXBfcHRyICogMTAwIC8g bHYtPmx2X3JlbWFwX2VuZCA8Ci0JCSAgICBsdi0+bHZfc25hcHNob3RfdXNlX3JhdGUpCi0J CQkgICAgaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmbHYtPmx2X3NuYXBzaG90X3dhaXQpOwor CQkgICAgbHYtPmx2X3NuYXBzaG90X3VzZV9yYXRlKSB7CisJCQl1cF9yZWFkKCZsdi0+bHZf bG9jayk7CisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZsdi0+bHZfc25hcHNob3Rfd2Fp dCk7CisJCQlkb3duX3JlYWQoJmx2LT5sdl9sb2NrKTsKKwkJfQorCQl1cF9yZWFkKCZsdi0+ bHZfbG9jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBPX05PTkJMT0NLOgpAQCAtMTA5OSw3ICsx MTM2LDkgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJZG93bl9yZWFk KCZsdi0+bHZfbG9jayk7CiAJbHZfcmF0ZV9yZXEucmF0ZSA9IGx2LT5sdl9yZW1hcF9wdHIg KiAxMDAgLyBsdi0+bHZfcmVtYXBfZW5kOworCXVwX3JlYWQoJmx2LT5sdl9sb2NrKTsKIAog CXJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCAmbHZfcmF0ZV9yZXEsCiAJCQkgICAgc2l6ZW9m KGx2X3JhdGVfcmVxKSkgPyAtRUZBVUxUIDogMDsKQEAgLTExNDQsOCArMTE4Myw3IEBACiAK IAkvKiB3ZSBtdXN0IHJlZG8gbHZtX3NuYXBzaG90X3JlbWFwX2Jsb2NrIGluIG9yZGVyIHRv IGF2b2lkIGEKIAkgICByYWNlIGNvbmRpdGlvbiBpbiB0aGUgZ2FwIHdoZXJlIG5vIGxvY2sg d2FzIGhlbGQgKi8KLQlpZiAobHYtPmx2X2Jsb2NrX2V4Y2VwdGlvbiAmJiAKLQkgICAgIWx2 bV9zbmFwc2hvdF9yZW1hcF9ibG9jaygmcmRldiwgJnJzZWN0b3IsIHBlX3N0YXJ0LCBsdikg JiYKKwlpZiAoIWx2bV9zbmFwc2hvdF9yZW1hcF9ibG9jaygmcmRldiwgJnJzZWN0b3IsIHBl X3N0YXJ0LCBsdikgJiYKIAkgICAgIWx2bV9zbmFwc2hvdF9DT1cocmRldiwgcnNlY3Rvciwg cGVfc3RhcnQsIHJzZWN0b3IsIHZnLCBsdikpCiAJCWx2bV93cml0ZV9DT1dfdGFibGVfYmxv Y2sodmcsIGx2KTsKIApAQCAtMTE1NSwxMiArMTE5MywxMSBAQAogc3RhdGljIGlubGluZSB2 b2lkIF9yZW1hcF9zbmFwc2hvdChrZGV2X3QgcmRldiwgdWxvbmcgcnNlY3RvciwKIAkJCQkg ICB1bG9uZyBwZV9zdGFydCwgbHZfdCAqIGx2LCB2Z190ICogdmcpCiB7Ci0JaW50IHIgPSAw OworCWludCByOwogCiAJLyogY2hlY2sgdG8gc2VlIGlmIHRoaXMgY2h1bmsgaXMgYWxyZWFk eSBpbiB0aGUgc25hcHNob3QgKi8KIAlkb3duX3JlYWQoJmx2LT5sdl9sb2NrKTsKLQlpZiAo bHYtPmx2X2Jsb2NrX2V4Y2VwdGlvbikKLQkJciA9IGx2bV9zbmFwc2hvdF9yZW1hcF9ibG9j aygmcmRldiwgJnJzZWN0b3IsIHBlX3N0YXJ0LCBsdik7CisJciA9IGx2bV9zbmFwc2hvdF9y ZW1hcF9ibG9jaygmcmRldiwgJnJzZWN0b3IsIHBlX3N0YXJ0LCBsdik7CiAJdXBfcmVhZCgm bHYtPmx2X2xvY2spOwogCiAJaWYgKCFyKQpAQCAtMTI0OCw3ICsxMjg1LDcgQEAKIAkJICAg IChyc2VjdG9yX29yZyAlIHZnX3RoaXMtPnBlX3NpemUpOwogCQlyZGV2X21hcCA9IGx2LT5s dl9jdXJyZW50X3BlW2luZGV4XS5kZXY7CiAKLQkJUF9NQVAoImx2X2N1cnJlbnRfcGVbJWx1 XS5wZTogJXUgIHJkZXY6ICVzICByc2VjdG9yOiVsdVxuIiwKKwkJUF9NQVAoImx2X2N1cnJl bnRfcGVbJWxkXS5wZTogJWQgIHJkZXY6ICVzICByc2VjdG9yOiVsZFxuIiwKIAkJICAgICAg aW5kZXgsIGx2LT5sdl9jdXJyZW50X3BlW2luZGV4XS5wZSwKIAkJICAgICAga2Rldm5hbWUo cmRldl9tYXApLCByc2VjdG9yX21hcCk7CiAKQEAgLTEyNzAsOCArMTMwNyw4IEBACiAJCSAg ICAobHYtPmx2X3N0cmlwZXMgLSAxKSAqIGx2LT5sdl9zdHJpcGVzaXplOwogCQlyZGV2X21h cCA9IGx2LT5sdl9jdXJyZW50X3BlW2luZGV4XS5kZXY7CiAKLQkJUF9NQVAoImx2X2N1cnJl bnRfcGVbJWx1XS5wZTogJWQgIHJkZXY6ICVzICByc2VjdG9yOiVsdVxuIgotCQkgICAgICAi c3RyaXBlX2xlbmd0aDogJWx1ICBzdHJpcGVfaW5kZXg6ICVsdVxuIiwKKwkJUF9NQVAoImx2 X2N1cnJlbnRfcGVbJWxkXS5wZTogJWQgIHJkZXY6ICVzICByc2VjdG9yOiVsZFxuIgorCQkg ICAgICAic3RyaXBlX2xlbmd0aDogJWxkICBzdHJpcGVfaW5kZXg6ICVsZFxuIiwKIAkJICAg ICAgaW5kZXgsIGx2LT5sdl9jdXJyZW50X3BlW2luZGV4XS5wZSwKIAkJICAgICAga2Rldm5h bWUocmRldl9tYXApLCByc2VjdG9yX21hcCwgc3RyaXBlX2xlbmd0aCwKIAkJICAgICAgc3Ry aXBlX2luZGV4KTsKQEAgLTEyOTksOSArMTMzNiwxMCBAQAogCQlnb3RvIG91dDsKIAogCWlm IChsdi0+bHZfYWNjZXNzICYgTFZfU05BUFNIT1QpIHsJLyogcmVtYXAgc25hcHNob3QgKi8K LQkJaWYgKGx2bV9zbmFwc2hvdF9yZW1hcF9ibG9jawotCQkgICAgKCZyZGV2X21hcCwgJnJz ZWN0b3JfbWFwLCBwZV9zdGFydCwgbHYpIDwgMCkKLQkJCQlnb3RvIGJhZDsKKwkJaWYgKGx2 bV9zbmFwc2hvdF9yZW1hcF9ibG9jaygmcmRldl9tYXAsICZyc2VjdG9yX21hcCwKKwkJCQkJ ICAgICBwZV9zdGFydCwgbHYpIDwgMCkKKwkJCWdvdG8gYmFkOworCiAJfSBlbHNlIGlmIChy dyA9PSBXUklURSB8fCBydyA9PSBXUklURUEpIHsJLyogc25hcHNob3Qgb3JpZ2luICovCiAJ CWx2X3QgKnNuYXA7CiAKQEAgLTEzMjcsNyArMTM2NSw4IEBACiAJcmV0dXJuIDE7CiAKICAg ICAgIGJhZDoKLQlpZiAoYmgtPmJfZW5kX2lvKSBidWZmZXJfSU9fZXJyb3IoYmgpOworCWlm IChiaC0+Yl9lbmRfaW8pCisJCWJ1ZmZlcl9JT19lcnJvcihiaCk7CiAJdXBfcmVhZCgmbHYt Pmx2X2xvY2spOwogCXJldHVybiAtMTsKIH0JCQkJLyogbHZtX21hcCgpICovCkBAIC0xNDgx LDEyICsxNTIwLDE3IEBACiAJaWYgKHZnX3B0ciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOWElP OwogCWlmIChjb3B5X2Zyb21fdXNlcigmbGVfcmVtYXBfcmVxLCBhcmcsCi0JCQkgICBzaXpl b2YobGVfcmVtYXBfcmVxX3QpKSAhPSAwKSByZXR1cm4gLUVGQVVMVDsKKwkJCSAgIHNpemVv ZihsZV9yZW1hcF9yZXFfdCkpICE9IDApCisJCXJldHVybiAtRUZBVUxUOwogCiAJZm9yIChs ID0gMDsgbCA8IHZnX3B0ci0+bHZfbWF4OyBsKyspIHsKIAkJbHZfcHRyID0gdmdfcHRyLT5s dltsXTsKLQkJaWYgKGx2X3B0ciAhPSBOVUxMICYmCi0JCSAgICBzdHJjbXAobHZfcHRyLT5s dl9uYW1lLCBsZV9yZW1hcF9yZXEubHZfbmFtZSkgPT0gMCkgeworCisJCWlmICghbHZfcHRy KQorCQkJY29udGludWU7CisKKwkJaWYgKHN0cmNtcChsdl9wdHItPmx2X25hbWUsIGxlX3Jl bWFwX3JlcS5sdl9uYW1lKSA9PSAwKSB7CisJCQlkb3duX3dyaXRlKCZsdl9wdHItPmx2X2xv Y2spOwogCQkJZm9yIChsZSA9IDA7IGxlIDwgbHZfcHRyLT5sdl9hbGxvY2F0ZWRfbGU7IGxl KyspIHsKIAkJCQlpZiAobHZfcHRyLT5sdl9jdXJyZW50X3BlW2xlXS5kZXYgPT0KIAkJCQkg ICAgbGVfcmVtYXBfcmVxLm9sZF9kZXYgJiYKQEAgLTE0OTYsMTEgKzE1NDAsMTIgQEAKIAkJ CQkJICAgIGxlX3JlbWFwX3JlcS5uZXdfZGV2OwogCQkJCQlsdl9wdHItPmx2X2N1cnJlbnRf cGVbbGVdLnBlID0KIAkJCQkJICAgIGxlX3JlbWFwX3JlcS5uZXdfcGU7Ci0KIAkJCQkJX191 cGRhdGVfaGFyZHNlY3RzaXplKGx2X3B0cik7CisJCQkJCXVwX3dyaXRlKCZsdl9wdHItPmx2 X2xvY2spOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9CisJCQl1cF93cml0ZSgmbHZf cHRyLT5sdl9sb2NrKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtMTUzOCw2 ICsxNTgzLDEwIEBACiAJaWYgKG1pbm9yID09IC0xKQogCQltaW5vciA9IHZnX3B0ci0+dmdf bnVtYmVyOwogCisJLyogY2hlY2sgbGltaXRzICovCisJaWYgKG1pbm9yID49IEFCU19NQVhf VkcpCisJCXJldHVybiAtRUZBVUxUOworCiAJLyogVmFsaWRhdGUgaXQgKi8KIAlpZiAodmdb VkdfQ0hSKG1pbm9yKV0gIT0gTlVMTCkgewogCQlQX0lPQ1RMKCJsdm1fZG9fdmdfY3JlYXRl IEVSUk9SOiBWRyAlZCBpbiB1c2VcbiIsIG1pbm9yKTsKQEAgLTE3MzMsMTUgKzE3ODIsMTYg QEAKIAlmb3IgKGwgPSAwOyBsIDwgdmdfcHRyLT5sdl9tYXg7IGwrKykgewogCQlpZiAoKGx2 X3B0ciA9IHZnX3B0ci0+bHZbbF0pID09IE5VTEwpCiAJCQljb250aW51ZTsKKwkJbWVtc2V0 KGx2X3B0ci0+dmdfbmFtZSwgMCwgc2l6ZW9mKCp2Z19uYW1lKSk7CiAJCXN0cm5jcHkobHZf cHRyLT52Z19uYW1lLCB2Z19uYW1lLCBzaXplb2YodmdfbmFtZSkpOwogCQlwdHIgPSBzdHJy Y2hyKGx2X3B0ci0+bHZfbmFtZSwgJy8nKTsKLQkJaWYgKHB0ciA9PSBOVUxMKQotCQkJcHRy ID0gbHZfcHRyLT5sdl9uYW1lOworCQlwdHIgPSBwdHIgPyBwdHIgKyAxIDogbHZfcHRyLT5s dl9uYW1lOwogCQlzdHJuY3B5KGx2X25hbWUsIHB0ciwgc2l6ZW9mKGx2X25hbWUpKTsKIAkJ bGVuID0gc2l6ZW9mKExWTV9ESVJfUFJFRklYKTsKIAkJc3RyY3B5KGx2X3B0ci0+bHZfbmFt ZSwgTFZNX0RJUl9QUkVGSVgpOwogCQlzdHJuY2F0KGx2X3B0ci0+bHZfbmFtZSwgdmdfbmFt ZSwgTkFNRV9MRU4gLSBsZW4pOwotCQlsZW4gKz0gc3RybGVuKHZnX25hbWUpOworCQlzdHJj YXQobHZfcHRyLT5sdl9uYW1lLCAiLyIpOworCQlsZW4gKz0gc3RybGVuKHZnX25hbWUpICsg MTsKIAkJc3RybmNhdChsdl9wdHItPmx2X25hbWUsIGx2X25hbWUsIE5BTUVfTEVOIC0gbGVu KTsKIAl9CiAJZm9yIChwID0gMDsgcCA8IHZnX3B0ci0+cHZfbWF4OyBwKyspIHsKQEAgLTE3 NTIsNiArMTgwMiwyNSBAQAogCiAJbHZtX2ZzX2NyZWF0ZV92Zyh2Z19wdHIpOwogCisJLyog TmVlZCB0byBhZGQgUFYgZW50cmllcyAqLworCWZvciAocCA9IDA7IHAgPCB2Z19wdHItPnB2 X2FjdDsgcCsrKSB7CisJCXB2X3QgKnB2X3B0ciA9IHZnX3B0ci0+cHZbcF07CisKKwkJaWYg KHB2X3B0cikKKwkJCWx2bV9mc19jcmVhdGVfcHYodmdfcHRyLCBwdl9wdHIpOworCX0KKwor CS8qIE5lZWQgdG8gYWRkIExWIGVudHJpZXMgKi8KKwlmb3IgKGwgPSAwOyBsIDwgdmdfcHRy LT5sdl9tYXg7IGwrKykgeworCQlsdl90ICpsdl9wdHIgPSB2Z19wdHItPmx2W2xdOworCisJ CWlmICghbHZfcHRyKQorCQkJY29udGludWU7CisKKwkJbHZtX2dlbmRpc2sucGFydFtNSU5P Uihsdl9wdHItPmx2X2RldildLmRlID0KKwkJICAgIGx2bV9mc19jcmVhdGVfbHYodmdfcHRy LCBsdl9wdHIpOworCX0KKwogCXJldHVybiAwOwogfQkJCQkvKiBsdm1fZG9fdmdfcmVuYW1l ICovCiAKQEAgLTE4MjgsNiArMTg5Nyw5IEBACiAJcHZfdCAqcHY7CiAJaW50IGVycjsKIAor CWlmICghdmdfcHRyKQorCQlyZXR1cm4gLUVOWElPOworCiAJcHYgPSBrbWFsbG9jKHNpemVv Zihwdl90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHB2ID09IE5VTEwpIHsKIAkJcHJpbnRrKEtF Uk5fQ1JJVApAQCAtMjA2MCw4ICsyMTMyLDcgQEAKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJ CQkJfQogCi0JCQkJaWYgKAotCQkJCSAgICAobHZfcHRyLT5sdl9ibG9ja19leGNlcHRpb24g PQorCQkJCWlmICgobHZfcHRyLT5sdl9ibG9ja19leGNlcHRpb24gPQogCQkJCSAgICAgdm1h bGxvYyhzaXplKSkgPT0gTlVMTCkgewogCQkJCQlwcmludGsoS0VSTl9DUklUCiAJCQkJCSAg ICAgICAiJXMgLS0gbHZtX2RvX2x2X2NyZWF0ZTogdm1hbGxvYyBlcnJvciBMVl9CTE9DS19F WENFUFRJT04gIgpAQCAtMjEyMCw4ICsyMTkxLDggQEAKIAkJCQl2Z19wdHItPnBlX2FsbG9j YXRlZCArPQogCQkJCSAgICBsdl9wdHItPmx2X2FsbG9jYXRlZF9zbmFwc2hvdF9sZTsKIAot CQkJCWlmICgocmV0ID0gbHZtX3NuYXBzaG90X2FsbG9jKGx2X3B0cikpICE9Ci0JCQkJICAg IDApIHsKKwkJCQlpZiAoKHJldCA9CisJCQkJICAgICBsdm1fc25hcHNob3RfYWxsb2MobHZf cHRyKSkgIT0gMCkgewogCQkJCQl2ZnJlZShsdl9wdHItPmx2X2Jsb2NrX2V4Y2VwdGlvbik7 CiAJCQkJCWtmcmVlKGx2X3B0cik7CiAJCQkJCXZnX3B0ci0+bHZbbF0gPSBOVUxMOwpAQCAt MjE3Nyw4ICsyMjQ4LDEyIEBACiAJaWYgKGx2X3B0ci0+bHZfYWNjZXNzICYgTFZfU05BUFNI T1QpIHsKIAkJbHZfdCAqb3JnID0gbHZfcHRyLT5sdl9zbmFwc2hvdF9vcmcsICpsYXN0Owog CisJCS8qIHN5bmMgdGhlIG9yaWdpbmFsIGxvZ2ljYWwgdm9sdW1lICovCisJCWZzeW5jX2Rl dihvcmctPmx2X2Rldik7CisjaWZkZWYJTFZNX1ZGU19FTkhBTkNFTUVOVAogCQkvKiBWRlMg ZnVuY3Rpb24gY2FsbCB0byBzeW5jIGFuZCBsb2NrIHRoZSBmaWxlc3lzdGVtICovCiAJCWZz eW5jX2Rldl9sb2NrZnMob3JnLT5sdl9kZXYpOworI2VuZGlmCiAKIAkJZG93bl93cml0ZSgm b3JnLT5sdl9sb2NrKTsKIAkJb3JnLT5sdl9hY2Nlc3MgfD0gTFZfU05BUFNIT1RfT1JHOwpA QCAtMjIwNCw5ICsyMjc5LDExIEBACiAJZWxzZQogCQlzZXRfZGV2aWNlX3JvKGx2X3B0ci0+ bHZfZGV2LCAxKTsKIAorI2lmZGVmCUxWTV9WRlNfRU5IQU5DRU1FTlQKIC8qIFZGUyBmdW5j dGlvbiBjYWxsIHRvIHVubG9jayB0aGUgZmlsZXN5c3RlbSAqLwogCWlmIChsdl9wdHItPmx2 X2FjY2VzcyAmIExWX1NOQVBTSE9UKQogCQl1bmxvY2tmcyhsdl9wdHItPmx2X3NuYXBzaG90 X29yZy0+bHZfZGV2KTsKKyNlbmRpZgogCiAJbHZtX2dlbmRpc2sucGFydFtNSU5PUihsdl9w dHItPmx2X2RldildLmRlID0KIAkgICAgbHZtX2ZzX2NyZWF0ZV9sdih2Z19wdHIsIGx2X3B0 cik7CkBAIC0yMjIzLDYgKzIzMDAsOSBAQAogCXZnX3QgKnZnX3B0ciA9IHZnW1ZHX0NIUiht aW5vcildOwogCWx2X3QgKmx2X3B0cjsKIAorCWlmICghdmdfcHRyKQorCQlyZXR1cm4gLUVO WElPOworCiAJaWYgKGwgPT0gLTEpIHsKIAkJZm9yIChsID0gMDsgbCA8IHZnX3B0ci0+bHZf bWF4OyBsKyspIHsKIAkJCWlmICh2Z19wdHItPmx2W2xdICE9IE5VTEwgJiYKQEAgLTI0MDgs NyArMjQ4OCw3IEBACiAJCX0KIAl9CiAKLQkvKiBzYXZlIGF2YWlsaWFibGUgaS9vIHN0YXRp c3RpYyBkYXRhICovCisJLyogc2F2ZSBhdmFpbGFibGUgaS9vIHN0YXRpc3RpYyBkYXRhICov CiAJaWYgKG9sZF9sdi0+bHZfc3RyaXBlcyA8IDIpIHsJLyogbGluZWFyIGxvZ2ljYWwgdm9s dW1lICovCiAJCWVuZCA9IG1pbihvbGRfbHYtPmx2X2N1cnJlbnRfbGUsIG5ld19sdi0+bHZf Y3VycmVudF9sZSk7CiAJCWZvciAobCA9IDA7IGwgPCBlbmQ7IGwrKykgewpAQCAtMjQ1NCwx MiArMjUzNCwxNiBAQAogCWx2X3QgKm9sZF9sdjsKIAlwZV90ICpwZTsKIAorCWlmICghdmdf cHRyKQorCQlyZXR1cm4gLUVOWElPOworCiAJaWYgKChwZSA9IG5ld19sdi0+bHZfY3VycmVu dF9wZSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmb3IgKGwgPSAwOyBsIDwg dmdfcHRyLT5sdl9tYXg7IGwrKykKIAkJaWYgKHZnX3B0ci0+bHZbbF0KLQkJICAgICYmICFz dHJjbXAodmdfcHRyLT5sdltsXS0+bHZfbmFtZSwgbHZfbmFtZSkpIGJyZWFrOworCQkgICAg JiYgIXN0cmNtcCh2Z19wdHItPmx2W2xdLT5sdl9uYW1lLCBsdl9uYW1lKSkKKwkJCWJyZWFr OwogCiAJaWYgKGwgPT0gdmdfcHRyLT5sdl9tYXgpCiAJCXJldHVybiAtRU5YSU87CkBAIC0y NDY5LDggKzI1NTMsNyBAQAogCWlmIChvbGRfbHYtPmx2X2FjY2VzcyAmIExWX1NOQVBTSE9U KSB7CiAJCS8qIG9ubHkgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiBvbiBhY3RpdmUgc25hcHNo b3RzICovCiAJCWlmIChvbGRfbHYtPmx2X3N0YXR1cyAmIExWX0FDVElWRSkKLQkJCXIgPQot CQkJICAgIF9fZXh0ZW5kX3JlZHVjZV9zbmFwc2hvdCh2Z19wdHIsIG9sZF9sdiwKKwkJCXIg PSBfX2V4dGVuZF9yZWR1Y2Vfc25hcHNob3QodmdfcHRyLCBvbGRfbHYsCiAJCQkJCQkgICAg IG5ld19sdik7CiAJCWVsc2UKIAkJCXIgPSAtRVBFUk07CkBAIC0yNDgxLDcgKzI1NjQsNyBA QAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCS8qIGNvcHkgcmVsZXZlbnQgZmllbGRzICov CisJLyogY29weSByZWxldmFudCBmaWVsZHMgKi8KIAlkb3duX3dyaXRlKCZvbGRfbHYtPmx2 X2xvY2spOwogCiAJaWYgKG5ld19sdi0+bHZfYWNjZXNzICYgTFZfU05BUFNIT1QpIHsKQEAg LTI0OTAsNiArMjU3Myw4IEBACiAJCXNpemUgKj0gc2l6ZW9mKGx2X2Jsb2NrX2V4Y2VwdGlv bl90KTsKIAkJbWVtY3B5KG5ld19sdi0+bHZfYmxvY2tfZXhjZXB0aW9uLAogCQkgICAgICAg b2xkX2x2LT5sdl9ibG9ja19leGNlcHRpb24sIHNpemUpOworCQl2ZnJlZShvbGRfbHYtPmx2 X2Jsb2NrX2V4Y2VwdGlvbik7CisJCXZmcmVlKG9sZF9sdi0+bHZfc25hcHNob3RfaGFzaF90 YWJsZSk7CiAKIAkJb2xkX2x2LT5sdl9yZW1hcF9lbmQgPSBuZXdfbHYtPmx2X3JlbWFwX2Vu ZDsKIAkJb2xkX2x2LT5sdl9ibG9ja19leGNlcHRpb24gPSBuZXdfbHYtPmx2X2Jsb2NrX2V4 Y2VwdGlvbjsKQEAgLTI1MDAsMTUgKzI1ODUsMTYgQEAKIAkJb2xkX2x2LT5sdl9zbmFwc2hv dF9oYXNoX21hc2sgPQogCQkgICAgbmV3X2x2LT5sdl9zbmFwc2hvdF9oYXNoX21hc2s7CiAK LQkJZm9yIChlID0gMDsgZSA8IG5ld19sdi0+bHZfcmVtYXBfcHRyOyBlKyspCisJCWZvciAo ZSA9IDA7IGUgPCBvbGRfbHYtPmx2X3JlbWFwX3B0cjsgZSsrKQogCQkJbHZtX2hhc2hfbGlu ayhuZXdfbHYtPmx2X2Jsb2NrX2V4Y2VwdGlvbiArIGUsCiAJCQkJICAgICAgbmV3X2x2LT5s dl9ibG9ja19leGNlcHRpb25bZV0uCiAJCQkJICAgICAgcmRldl9vcmcsCiAJCQkJICAgICAg bmV3X2x2LT5sdl9ibG9ja19leGNlcHRpb25bZV0uCiAJCQkJICAgICAgcnNlY3Rvcl9vcmcs IG5ld19sdik7CiAKKwkJdmdfcHRyLT5wZV9hbGxvY2F0ZWQgLT0gb2xkX2x2LT5sdl9hbGxv Y2F0ZWRfbGU7CisJCXZnX3B0ci0+cGVfYWxsb2NhdGVkICs9IG5ld19sdi0+bHZfYWxsb2Nh dGVkX2xlOwogCX0gZWxzZSB7Ci0KIAkJdmZyZWUob2xkX2x2LT5sdl9jdXJyZW50X3BlKTsK IAkJdmZyZWUob2xkX2x2LT5sdl9zbmFwc2hvdF9oYXNoX3RhYmxlKTsKIApAQCAtMjYyNSw5 ICsyNzExLDYgQEAKIAogCWlmIChsdl9zdGF0dXNfYnlpbmRleF9yZXEubHYgPT0gTlVMTCkK IAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGx2X3N0YXR1c19ieWluZGV4X3JlcS5sdl9pbmRl eCA8IDAgfHwKLQkgICAgbHZfc3RhdHVzX2J5aW5kZXhfcmVxLmx2X2luZGV4ID49IE1BWF9M VikKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKChsdl9wdHIgPSB2Z19wdHItPmx2W2x2X3N0 YXR1c19ieWluZGV4X3JlcS5sdl9pbmRleF0pID09IE5VTEwpCiAJCXJldHVybiAtRU5YSU87 CiAKQEAgLTI2NDIsMTIgKzI3MjUsMTQgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAo Y29weV90b191c2VyKGx2X3N0YXR1c19ieWluZGV4X3JlcS5sdiwgbHZfcHRyLCBzaXplb2Yo bHZfdCkpICE9Ci0JICAgIDApIHJldHVybiAtRUZBVUxUOworCSAgICAwKQorCQlyZXR1cm4g LUVGQVVMVDsKIAlpZiAoc2F2ZWRfcHRyMSAhPSBOVUxMKSB7CiAJCWlmIChjb3B5X3RvX3Vz ZXIoc2F2ZWRfcHRyMSwKIAkJCQkgbHZfcHRyLT5sdl9jdXJyZW50X3BlLAogCQkJCSBsdl9w dHItPmx2X2FsbG9jYXRlZF9sZSAqCi0JCQkJIHNpemVvZihwZV90KSkgIT0gMCkgcmV0dXJu IC1FRkFVTFQ7CisJCQkJIHNpemVvZihwZV90KSkgIT0gMCkKKwkJCXJldHVybiAtRUZBVUxU OwogCX0KIAogCS8qIFJlc3RvcmUgdXNlcm1vZGUgcG9pbnRlcnMgKi8KQEAgLTI2OTksMTIg KzI3ODQsMTQgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoY29weV90b191c2VyKGx2 X3N0YXR1c19ieWRldl9yZXEubHYsIGx2X3B0ciwgc2l6ZW9mKGx2X3QpKSAhPQotCSAgICAw KSByZXR1cm4gLUVGQVVMVDsKKwkgICAgMCkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKHNh dmVkX3B0cjEgIT0gTlVMTCkgewogCQlpZiAoY29weV90b191c2VyKHNhdmVkX3B0cjEsCiAJ CQkJIGx2X3B0ci0+bHZfY3VycmVudF9wZSwKIAkJCQkgbHZfcHRyLT5sdl9hbGxvY2F0ZWRf bGUgKgotCQkJCSBzaXplb2YocGVfdCkpICE9IDApIHJldHVybiAtRUZBVUxUOworCQkJCSBz aXplb2YocGVfdCkpICE9IDApCisJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAJLyogUmVzdG9y ZSB1c2VybW9kZSBwb2ludGVycyAqLwogCWlmIChjb3B5X3RvX3VzZXIKQEAgLTI3MjUsNiAr MjgxMiw5IEBACiAJaW50IHJldCA9IDA7CiAJbHZfdCAqbHZfcHRyID0gTlVMTDsKIAorCWlm ICghdmdfcHRyKQorCQlyZXR1cm4gLUVOWElPOworCiAJZm9yIChsID0gMDsgbCA8IHZnX3B0 ci0+bHZfbWF4OyBsKyspIHsKIAkJaWYgKChsdl9wdHIgPSB2Z19wdHItPmx2W2xdKSA9PSBO VUxMKQogCQkJY29udGludWU7CkBAIC0yNzMyLDcgKzI4MjIsOCBAQAogCQkJbHZtX2ZzX3Jl bW92ZV9sdih2Z19wdHIsIGx2X3B0cik7CiAJCQlzdHJuY3B5KGx2X3B0ci0+bHZfbmFtZSwg bHZfcmVxLT5sdl9uYW1lLAogCQkJCU5BTUVfTEVOKTsKLQkJCWx2bV9mc19jcmVhdGVfbHYo dmdfcHRyLCBsdl9wdHIpOworCQkJbHZtX2dlbmRpc2sucGFydFtNSU5PUihsdl9wdHItPmx2 X2RldildLmRlID0KKwkJCQlsdm1fZnNfY3JlYXRlX2x2KHZnX3B0ciwgbHZfcHRyKTsKIAkJ CWJyZWFrOwogCQl9CiAJfQpAQCAtMjc1NSw3ICsyODQ2LDggQEAKIAlpZiAodmdfcHRyID09 IE5VTEwpCiAJCXJldHVybiAtRU5YSU87CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZwdl9jaGFu Z2VfcmVxLCBhcmcsCi0JCQkgICBzaXplb2YocHZfY2hhbmdlX3JlcSkpICE9IDApIHJldHVy biAtRUZBVUxUOworCQkJICAgc2l6ZW9mKHB2X2NoYW5nZV9yZXEpKSAhPSAwKQorCQlyZXR1 cm4gLUVGQVVMVDsKIAogCWZvciAocCA9IDA7IHAgPCB2Z19wdHItPnB2X21heDsgcCsrKSB7 CiAJCXB2X3B0ciA9IHZnX3B0ci0+cHZbcF07CkBAIC0yNzg5LDcgKzI4ODEsOCBAQAogCWlm ICh2Z19wdHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAoY29weV9mcm9tX3Vz ZXIoJnB2X3N0YXR1c19yZXEsIGFyZywKLQkJCSAgIHNpemVvZihwdl9zdGF0dXNfcmVxKSkg IT0gMCkgcmV0dXJuIC1FRkFVTFQ7CisJCQkgICBzaXplb2YocHZfc3RhdHVzX3JlcSkpICE9 IDApCisJCXJldHVybiAtRUZBVUxUOwogCiAJZm9yIChwID0gMDsgcCA8IHZnX3B0ci0+cHZf bWF4OyBwKyspIHsKIAkJcHZfcHRyID0gdmdfcHRyLT5wdltwXTsKLS0tIGxpbnV4L2RyaXZl cnMvbWQvbHZtLWludGVybmFsLmgub3JpZwlNb24gTWFyIDI0IDE1OjA3OjIyIDIwMDMKKysr IGxpbnV4L2RyaXZlcnMvbWQvbHZtLWludGVybmFsLmgJVHVlIE9jdCAyOCAxMjo0MzowMyAy MDAzCkBAIC00OSw2ICs0OSwxMCBAQAogZXh0ZXJuIHZnX3QgKnZnW107CiBleHRlcm4gc3Ry dWN0IGZpbGVfb3BlcmF0aW9ucyBsdm1fY2hyX2ZvcHM7CiAKKyNpZm5kZWYJdWNoYXIKK3R5 cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcjsKKyNlbmRpZgorCiBleHRlcm4gc3RydWN0IGJs b2NrX2RldmljZV9vcGVyYXRpb25zIGx2bV9ibGtfZG9wczsKIAogI2RlZmluZSBsdm1fc2Vj dHNpemUoZGV2KSBnZXRfaGFyZHNlY3Rfc2l6ZShkZXYpCkBAIC04NSwyNCArODksMjQgQEAK IGludCBsdm1fZ2V0X2Jsa3NpemUoa2Rldl90KTsKIGludCBsdm1fc25hcHNob3RfYWxsb2Mo bHZfdCAqKTsKIGludCBsdm1fc25hcHNob3RfZmlsbF9DT1dfcGFnZSh2Z190ICosIGx2X3Qg Kik7Ci1pbnQgbHZtX3NuYXBzaG90X0NPVyhrZGV2X3QsIHVsb25nLCB1bG9uZywgdWxvbmcs IHZnX3QgKnZnLCBsdl90ICopOworaW50IGx2bV9zbmFwc2hvdF9DT1coa2Rldl90LCB1bG9u ZywgdWxvbmcsIHVsb25nLCB2Z190ICogdmcsIGx2X3QgKik7CiBpbnQgbHZtX3NuYXBzaG90 X3JlbWFwX2Jsb2NrKGtkZXZfdCAqLCB1bG9uZyAqLCB1bG9uZywgbHZfdCAqKTsKIHZvaWQg bHZtX3NuYXBzaG90X3JlbGVhc2UobHZfdCAqKTsKIGludCBsdm1fd3JpdGVfQ09XX3RhYmxl X2Jsb2NrKHZnX3QgKiwgbHZfdCAqKTsKIHZvaWQgbHZtX2hhc2hfbGluayhsdl9ibG9ja19l eGNlcHRpb25fdCAqLCBrZGV2X3QsIHVsb25nLCBsdl90ICopOwogaW50IGx2bV9zbmFwc2hv dF9hbGxvY19oYXNoX3RhYmxlKGx2X3QgKik7Ci12b2lkIGx2bV9kcm9wX3NuYXBzaG90KHZn X3QgKnZnLCBsdl90ICosIGNvbnN0IGNoYXIgKik7Cit2b2lkIGx2bV9kcm9wX3NuYXBzaG90 KHZnX3QgKiB2ZywgbHZfdCAqLCBjb25zdCBjaGFyICopOwogCiAKIC8qIGx2bV9mcy5jICov CiB2b2lkIGx2bV9pbml0X2ZzKHZvaWQpOwogdm9pZCBsdm1fZmluX2ZzKHZvaWQpOwogCi12 b2lkIGx2bV9mc19jcmVhdGVfdmcodmdfdCAqdmdfcHRyKTsKLXZvaWQgbHZtX2ZzX3JlbW92 ZV92Zyh2Z190ICp2Z19wdHIpOwotZGV2ZnNfaGFuZGxlX3QgbHZtX2ZzX2NyZWF0ZV9sdih2 Z190ICp2Z19wdHIsIGx2X3QgKmx2KTsKLXZvaWQgbHZtX2ZzX3JlbW92ZV9sdih2Z190ICp2 Z19wdHIsIGx2X3QgKmx2KTsKLXZvaWQgbHZtX2ZzX2NyZWF0ZV9wdih2Z190ICp2Z19wdHIs IHB2X3QgKnB2KTsKLXZvaWQgbHZtX2ZzX3JlbW92ZV9wdih2Z190ICp2Z19wdHIsIHB2X3Qg KnB2KTsKK3ZvaWQgbHZtX2ZzX2NyZWF0ZV92Zyh2Z190ICogdmdfcHRyKTsKK3ZvaWQgbHZt X2ZzX3JlbW92ZV92Zyh2Z190ICogdmdfcHRyKTsKK2RldmZzX2hhbmRsZV90IGx2bV9mc19j cmVhdGVfbHYodmdfdCAqIHZnX3B0ciwgbHZfdCAqIGx2KTsKK3ZvaWQgbHZtX2ZzX3JlbW92 ZV9sdih2Z190ICogdmdfcHRyLCBsdl90ICogbHYpOwordm9pZCBsdm1fZnNfY3JlYXRlX3B2 KHZnX3QgKiB2Z19wdHIsIHB2X3QgKiBwdik7Cit2b2lkIGx2bV9mc19yZW1vdmVfcHYodmdf dCAqIHZnX3B0ciwgcHZfdCAqIHB2KTsKIAogI2VuZGlmCi0tLSBsaW51eC9kcml2ZXJzL21k L2x2bS1zbmFwLmMub3JpZwlNb24gTWFyIDI0IDE1OjA3OjMyIDIwMDMKKysrIGxpbnV4L2Ry aXZlcnMvbWQvbHZtLXNuYXAuYwlUdWUgT2N0IDI4IDEyOjQzOjAzIDIwMDMKQEAgLTIsNyAr Miw3IEBACiAgKiBrZXJuZWwvbHZtLXNuYXAuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAw MCBBbmRyZWEgQXJjYW5nZWxpIDxhbmRyZWFAc3VzZS5kZT4gU3VTRQotICogICAgICAgICAg ICAgICAyMDAwIC0gMjAwMSBIZWlueiBNYXVlbHNoYWdlbiwgU2lzdGluYSBTb2Z0d2FyZQor ICogICAgICAgICAgICAgICAyMDAwIC0gMjAwMiBIZWlueiBNYXVlbHNoYWdlbiwgU2lzdGlu YSBTb2Z0d2FyZQogICoKICAqIExWTSBzbmFwc2hvdCBkcml2ZXIgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKQEAgLTQxLDYgKzQxLDkgQEAKICAqICAgICAgICAgICAgICAgICBsdm1fc25hcHNo b3RfZmlsbF9DT1dfdGFibGUgaGFzIGEgcmV0dXJuIHZhbHVlIHRvby4KICAqICAgIDE1LzEw LzIwMDEgLSBmaXggc25hcHNob3QgYWxpZ25tZW50IHByb2JsZW0gW0NNXQogICogICAgICAg ICAgICAgICAtIGZpeCBzbmFwc2hvdCBmdWxsIG9vcHMgKGFsd2F5cyBjaGVjayBsdl9ibG9j a19leGNlcHRpb24pIFtDTV0KKyAqICAgIDI2LzA2LzIwMDIgLSBzdXBwb3J0IGZvciBuZXcg bGlzdF9tb3ZlIG1hY3JvIFtwYXRjaEBsdWNreW5ldC5keW51LmNvbV0KKyAqICAgIDI2LzA3 LzIwMDIgLSByZW1vdmVkIGNvbmRpdGlvbmFsIGxpc3RfbW92ZSBtYWNybyBiZWNhdXNlIHdl IHdpbGwKKyAqICAgICAgICAgICAgICAgICBkaXNjb250aW51ZSBMVk0xIGJlZm9yZSAyLjYg YW55d2F5CiAgKgogICovCiAKQEAgLTU2LDcgKzU5LDggQEAKIAogI2luY2x1ZGUgImx2bS1p bnRlcm5hbC5oIgogCi1zdGF0aWMgY2hhciAqbHZtX3NuYXBfdmVyc2lvbiBfX2F0dHJpYnV0 ZV9fICgodW51c2VkKSkgPSAiTFZNICJMVk1fUkVMRUFTRV9OQU1FIiBzbmFwc2hvdCBjb2Rl ICgiTFZNX1JFTEVBU0VfREFURSIpXG4iOworc3RhdGljIGNoYXIgKmx2bV9zbmFwX3ZlcnNp b24gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpID0KKyAgICAiTFZNICIgTFZNX1JFTEVBU0Vf TkFNRSAiIHNuYXBzaG90IGNvZGUgKCIgTFZNX1JFTEVBU0VfREFURSAiKVxuIjsKIAogCiBl eHRlcm4gY29uc3QgY2hhciAqY29uc3QgbHZtX25hbWU7CkBAIC02NCwxOSArNjgsMjAgQEAK IAogdm9pZCBsdm1fc25hcHNob3RfcmVsZWFzZShsdl90ICopOwogCi1zdGF0aWMgaW50IF93 cml0ZV9DT1dfdGFibGVfYmxvY2sodmdfdCAqdmcsIGx2X3QgKmx2LCBpbnQgaWR4LAorc3Rh dGljIGludCBfd3JpdGVfQ09XX3RhYmxlX2Jsb2NrKHZnX3QgKiB2ZywgbHZfdCAqIGx2LCBp bnQgaWR4LAogCQkJCSAgY29uc3QgY2hhciAqKnJlYXNvbik7Ci1zdGF0aWMgdm9pZCBfZGlz YWJsZV9zbmFwc2hvdCh2Z190ICp2ZywgbHZfdCAqbHYpOworc3RhdGljIHZvaWQgX2Rpc2Fi bGVfc25hcHNob3QodmdfdCAqIHZnLCBsdl90ICogbHYpOwogCiAKIHN0YXRpYyBpbmxpbmUg aW50IF9fYnJ3X2tpb3ZlYyhpbnQgcncsIGludCBuciwgc3RydWN0IGtpb2J1ZiAqaW92ZWNb XSwKIAkJCSAgICAgICBrZGV2X3QgZGV2LCB1bnNpZ25lZCBsb25nIGJbXSwgaW50IHNpemUs Ci0JCQkgICAgICAgbHZfdCAqbHYpIHsKKwkJCSAgICAgICBsdl90ICogbHYpCit7CiAJcmV0 dXJuIGJyd19raW92ZWMocncsIG5yLCBpb3ZlYywgZGV2LCBiLCBzaXplKTsKIH0KIAogCi1z dGF0aWMgaW50IF9wdl9nZXRfbnVtYmVyKHZnX3QgKiB2Zywga2Rldl90IHJkZXYsIHVpbnQg KnB2bikKK3N0YXRpYyBpbnQgX3B2X2dldF9udW1iZXIodmdfdCAqIHZnLCBrZGV2X3QgcmRl diwgdWludCAqIHB2bikKIHsKIAl1aW50IHA7CiAJZm9yIChwID0gMDsgcCA8IHZnLT5wdl9t YXg7IHArKykgewpAQCAtMTAzLDI5ICsxMDgsMjkgQEAKICNkZWZpbmUgaGFzaGZuKGRldixi bG9jayxtYXNrLGNodW5rX3NpemUpIFwKIAkoKEhBU0hERVYoZGV2KV4oKGJsb2NrKS8oY2h1 bmtfc2l6ZSkpKSAmIChtYXNrKSkKIAotc3RhdGljIGlubGluZSBsdl9ibG9ja19leGNlcHRp b25fdCAqCi1sdm1fZmluZF9leGNlcHRpb25fdGFibGUoa2Rldl90IG9yZ19kZXYsIHVuc2ln bmVkIGxvbmcgb3JnX3N0YXJ0LCBsdl90ICogbHYpCitzdGF0aWMgaW5saW5lIGx2X2Jsb2Nr X2V4Y2VwdGlvbl90ICpsdm1fZmluZF9leGNlcHRpb25fdGFibGUoa2Rldl90CisJCQkJCQkJ ICAgICBvcmdfZGV2LAorCQkJCQkJCSAgICAgdW5zaWduZWQgbG9uZworCQkJCQkJCSAgICAg b3JnX3N0YXJ0LAorCQkJCQkJCSAgICAgbHZfdCAqIGx2KQogewotCXN0cnVjdCBsaXN0X2hl YWQgKiBoYXNoX3RhYmxlID0gbHYtPmx2X3NuYXBzaG90X2hhc2hfdGFibGUsICogbmV4dDsK KwlzdHJ1Y3QgbGlzdF9oZWFkICpoYXNoX3RhYmxlID0gbHYtPmx2X3NuYXBzaG90X2hhc2hf dGFibGUsICpuZXh0OwogCXVuc2lnbmVkIGxvbmcgbWFzayA9IGx2LT5sdl9zbmFwc2hvdF9o YXNoX21hc2s7CiAJaW50IGNodW5rX3NpemUgPSBsdi0+bHZfY2h1bmtfc2l6ZTsKLQlsdl9i bG9ja19leGNlcHRpb25fdCAqIHJldDsKKwlsdl9ibG9ja19leGNlcHRpb25fdCAqcmV0Owog CWludCBpID0gMDsKIAotCWlmICghaGFzaF90YWJsZSkKLQkJQlVHKCkgOwotCWhhc2hfdGFi bGUgPSAmaGFzaF90YWJsZVtoYXNoZm4ob3JnX2Rldiwgb3JnX3N0YXJ0LCBtYXNrLCBjaHVu a19zaXplKV07CisJaGFzaF90YWJsZSA9CisJICAgICZoYXNoX3RhYmxlW2hhc2hmbihvcmdf ZGV2LCBvcmdfc3RhcnQsIG1hc2ssIGNodW5rX3NpemUpXTsKIAlyZXQgPSBOVUxMOwotCWZv ciAobmV4dCA9IGhhc2hfdGFibGUtPm5leHQ7IG5leHQgIT0gaGFzaF90YWJsZTsgbmV4dCA9 IG5leHQtPm5leHQpCi0JewotCQlsdl9ibG9ja19leGNlcHRpb25fdCAqIGV4Y2VwdGlvbjsK Kwlmb3IgKG5leHQgPSBoYXNoX3RhYmxlLT5uZXh0OyBuZXh0ICE9IGhhc2hfdGFibGU7CisJ ICAgICBuZXh0ID0gbmV4dC0+bmV4dCkgeworCQlsdl9ibG9ja19leGNlcHRpb25fdCAqZXhj ZXB0aW9uOwogCiAJCWV4Y2VwdGlvbiA9IGxpc3RfZW50cnkobmV4dCwgbHZfYmxvY2tfZXhj ZXB0aW9uX3QsIGhhc2gpOwogCQlpZiAoZXhjZXB0aW9uLT5yc2VjdG9yX29yZyA9PSBvcmdf c3RhcnQgJiYKLQkJICAgIGV4Y2VwdGlvbi0+cmRldl9vcmcgPT0gb3JnX2RldikKLQkJewot CQkJaWYgKGkpCi0JCQl7CisJCSAgICBleGNlcHRpb24tPnJkZXZfb3JnID09IG9yZ19kZXYp IHsKKwkJCWlmIChpKSB7CiAJCQkJLyogZnVuLCBpc24ndCBpdD8gOikgKi8KIAkJCQlsaXN0 X2RlbChuZXh0KTsKIAkJCQlsaXN0X2FkZChuZXh0LCBoYXNoX3RhYmxlKTsKQEAgLTE0Miwx MyArMTQ3LDE0IEBACiAJCQkgIGtkZXZfdCBvcmdfZGV2LCB1bnNpZ25lZCBsb25nIG9yZ19z dGFydCwKIAkJCSAgbHZfdCAqIGx2KQogewotCXN0cnVjdCBsaXN0X2hlYWQgKiBoYXNoX3Rh YmxlID0gbHYtPmx2X3NuYXBzaG90X2hhc2hfdGFibGU7CisJc3RydWN0IGxpc3RfaGVhZCAq aGFzaF90YWJsZSA9IGx2LT5sdl9zbmFwc2hvdF9oYXNoX3RhYmxlOwogCXVuc2lnbmVkIGxv bmcgbWFzayA9IGx2LT5sdl9zbmFwc2hvdF9oYXNoX21hc2s7CiAJaW50IGNodW5rX3NpemUg PSBsdi0+bHZfY2h1bmtfc2l6ZTsKIAogCWlmICghaGFzaF90YWJsZSkKIAkJQlVHKCk7Ci0J aGFzaF90YWJsZSA9ICZoYXNoX3RhYmxlW2hhc2hmbihvcmdfZGV2LCBvcmdfc3RhcnQsIG1h c2ssIGNodW5rX3NpemUpXTsKKwloYXNoX3RhYmxlID0KKwkgICAgJmhhc2hfdGFibGVbaGFz aGZuKG9yZ19kZXYsIG9yZ19zdGFydCwgbWFzaywgY2h1bmtfc2l6ZSldOwogCWxpc3RfYWRk KCZleGNlcHRpb24tPmhhc2gsIGhhc2hfdGFibGUpOwogfQogCkBAIC0xNjAsMjYgKzE2Niwy NSBAQAogICoKICAqIFdlIG5lZWQgdG8gYmUgaG9sZGluZyBhdCBsZWFzdCBhIHJlYWQgbG9j ayBvbiBsdi0+bHZfbG9jay4KICAqLwotaW50IGx2bV9zbmFwc2hvdF9yZW1hcF9ibG9jayhr ZGV2X3QgKiBvcmdfZGV2LCB1bnNpZ25lZCBsb25nICogb3JnX3NlY3RvciwKK2ludCBsdm1f c25hcHNob3RfcmVtYXBfYmxvY2soa2Rldl90ICogb3JnX2RldiwgdW5zaWduZWQgbG9uZyAq b3JnX3NlY3RvciwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBwZV9zdGFydCwgbHZfdCAqIGx2 KQogewogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBwZV9vZmYsIHBlX2FkanVzdG1lbnQs IF9fb3JnX3N0YXJ0OwogCWtkZXZfdCBfX29yZ19kZXY7CiAJaW50IGNodW5rX3NpemUgPSBs di0+bHZfY2h1bmtfc2l6ZTsKLQlsdl9ibG9ja19leGNlcHRpb25fdCAqIGV4Y2VwdGlvbjsK Kwlsdl9ibG9ja19leGNlcHRpb25fdCAqZXhjZXB0aW9uOwogCiAJaWYgKCFsdi0+bHZfYmxv Y2tfZXhjZXB0aW9uKQogCQlyZXR1cm4gLTE7CiAKIAlwZV9vZmYgPSBwZV9zdGFydCAlIGNo dW5rX3NpemU7Ci0JcGVfYWRqdXN0bWVudCA9ICgqb3JnX3NlY3Rvci1wZV9vZmYpICUgY2h1 bmtfc2l6ZTsKKwlwZV9hZGp1c3RtZW50ID0gKCpvcmdfc2VjdG9yIC0gcGVfb2ZmKSAlIGNo dW5rX3NpemU7CiAJX19vcmdfc3RhcnQgPSAqb3JnX3NlY3RvciAtIHBlX2FkanVzdG1lbnQ7 CiAJX19vcmdfZGV2ID0gKm9yZ19kZXY7CiAJcmV0ID0gMDsKIAlleGNlcHRpb24gPSBsdm1f ZmluZF9leGNlcHRpb25fdGFibGUoX19vcmdfZGV2LCBfX29yZ19zdGFydCwgbHYpOwotCWlm IChleGNlcHRpb24pCi0JeworCWlmIChleGNlcHRpb24pIHsKIAkJKm9yZ19kZXYgPSBleGNl cHRpb24tPnJkZXZfbmV3OwogCQkqb3JnX3NlY3RvciA9IGV4Y2VwdGlvbi0+cnNlY3Rvcl9u ZXcgKyBwZV9hZGp1c3RtZW50OwogCQlyZXQgPSAxOwpAQCAtMTg3LDcgKzE5Miw3IEBACiAJ cmV0dXJuIHJldDsKIH0KIAotdm9pZCBsdm1fZHJvcF9zbmFwc2hvdCh2Z190ICp2ZywgbHZf dCAqbHZfc25hcCwgY29uc3QgY2hhciAqcmVhc29uKQordm9pZCBsdm1fZHJvcF9zbmFwc2hv dCh2Z190ICogdmcsIGx2X3QgKiBsdl9zbmFwLCBjb25zdCBjaGFyICpyZWFzb24pCiB7CiAJ a2Rldl90IGxhc3RfZGV2OwogCWludCBpOwpAQCAtMjAwLDcgKzIwNSw3IEBACiAJX2Rpc2Fi bGVfc25hcHNob3QodmcsIGx2X3NuYXApOwogCiAJZm9yIChpID0gbGFzdF9kZXYgPSAwOyBp IDwgbHZfc25hcC0+bHZfcmVtYXBfcHRyOyBpKyspIHsKLQkJaWYgKCBsdl9zbmFwLT5sdl9i bG9ja19leGNlcHRpb25baV0ucmRldl9uZXcgIT0gbGFzdF9kZXYpIHsKKwkJaWYgKGx2X3Nu YXAtPmx2X2Jsb2NrX2V4Y2VwdGlvbltpXS5yZGV2X25ldyAhPSBsYXN0X2RldikgewogCQkJ bGFzdF9kZXYgPSBsdl9zbmFwLT5sdl9ibG9ja19leGNlcHRpb25baV0ucmRldl9uZXc7CiAJ CQlpbnZhbGlkYXRlX2J1ZmZlcnMobGFzdF9kZXYpOwogCQl9CkBAIC0yMTEsMTQgKzIxNiwx NCBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAiJXMgLS0gZ2l2aW5nIHVwIHRv IHNuYXBzaG90ICVzIG9uICVzOiAlc1xuIiwKLQkgICAgICAgbHZtX25hbWUsIGx2X3NuYXAt Pmx2X3NuYXBzaG90X29yZy0+bHZfbmFtZSwgbHZfc25hcC0+bHZfbmFtZSwKLQkgICAgICAg cmVhc29uKTsKKwkgICAgICAgbHZtX25hbWUsIGx2X3NuYXAtPmx2X3NuYXBzaG90X29yZy0+ bHZfbmFtZSwKKwkgICAgICAgbHZfc25hcC0+bHZfbmFtZSwgcmVhc29uKTsKIH0KIAogc3Rh dGljIGlubGluZSBpbnQgbHZtX3NuYXBzaG90X3ByZXBhcmVfYmxvY2tzKHVuc2lnbmVkIGxv bmcgKmJsb2NrcywKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCSAg ICAgICBpbnQgbnJfc2VjdG9ycywKLQkJCQkJICAgICAgIGludCBibG9ja3NpemUpCisJCQkJ CSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSAgICAgIGludCBucl9zZWN0b3Jz LAorCQkJCQkgICAgICBpbnQgYmxvY2tzaXplKQogewogCWludCBpLCBzZWN0b3JzX3Blcl9i bG9jaywgbnJfYmxvY2tzOwogCkBAIC0yNDEsOCArMjQ2LDcgQEAKIAlpbnQgY29ycmVjdF9z aXplID0gQkxPQ0tfU0laRSwgaSwgbWFqb3I7CiAKIAltYWpvciA9IE1BSk9SKGRldik7Ci0J aWYgKGJsa3NpemVfc2l6ZVttYWpvcl0pCi0JeworCWlmIChibGtzaXplX3NpemVbbWFqb3Jd KSB7CiAJCWkgPSBibGtzaXplX3NpemVbbWFqb3JdW01JTk9SKGRldildOwogCQlpZiAoaSkK IAkJCWNvcnJlY3Rfc2l6ZSA9IGk7CkBAIC0yNTEsMTAgKzI1NSwxMCBAQAogfQogCiAjaWZk ZWYgREVCVUdfU05BUFNIT1QKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX3NuYXBf Y2FjaGUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBuciwKLQkJCQkJIGtk ZXZfdCBkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9zbmFwX2NhY2hlKHVu c2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSB1bnNpZ25lZCBsb25nIG5yLCBrZGV2X3QgZGV2 KQogewotCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoOworCXN0cnVjdCBidWZmZXJfaGVhZCAq Ymg7CiAJaW50IHNlY3RvcnNfcGVyX2Jsb2NrLCBpLCBibGtzaXplLCBtaW5vcjsKIAogCW1p bm9yID0gTUlOT1IoZGV2KTsKQEAgLTI2Myw4ICsyNjcsNyBAQAogCW5yIC89IHNlY3RvcnNf cGVyX2Jsb2NrOwogCXN0YXJ0IC89IHNlY3RvcnNfcGVyX2Jsb2NrOwogCi0JZm9yIChpID0g MDsgaSA8IG5yOyBpKyspCi0JeworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CiAJCWJo ID0gZ2V0X2hhc2hfdGFibGUoZGV2LCBzdGFydCsrLCBibGtzaXplKTsKIAkJaWYgKGJoKQog CQkJYmZvcmdldChiaCk7CkBAIC0yNzcsNDAgKzI4MCw0NCBAQAogewogCWludCBpZCA9IDAs IGlzID0gbHZfc25hcC0+bHZfcmVtYXBfcHRyOwogCXVsb25nIGJsa3NpemVfc25hcDsKLQls dl9DT1dfdGFibGVfZGlza190ICogbHZfQ09XX3RhYmxlID0gKGx2X0NPV190YWJsZV9kaXNr X3QgKikKLQkJcGFnZV9hZGRyZXNzKGx2X3NuYXAtPmx2X0NPV190YWJsZV9pb2J1Zi0+bWFw bGlzdFswXSk7CisJbHZfQ09XX3RhYmxlX2Rpc2tfdCAqbHZfQ09XX3RhYmxlID0gKGx2X0NP V190YWJsZV9kaXNrX3QgKikKKwkgICAgcGFnZV9hZGRyZXNzKGx2X3NuYXAtPmx2X0NPV190 YWJsZV9pb2J1Zi0+bWFwbGlzdFswXSk7CiAKIAlpZiAoaXMgPT0gMCkKIAkJcmV0dXJuIDA7 CiAKIAlpcy0tOwogCWJsa3NpemVfc25hcCA9Ci0JCWx2bV9nZXRfYmxrc2l6ZShsdl9zbmFw LT5sdl9ibG9ja19leGNlcHRpb25baXNdLnJkZXZfbmV3KTsKKwkgICAgbHZtX2dldF9ibGtz aXplKGx2X3NuYXAtPmx2X2Jsb2NrX2V4Y2VwdGlvbltpc10ucmRldl9uZXcpOwogCWlzIC09 IGlzICUgKGJsa3NpemVfc25hcCAvIHNpemVvZihsdl9DT1dfdGFibGVfZGlza190KSk7CiAK IAltZW1zZXQobHZfQ09XX3RhYmxlLCAwLCBibGtzaXplX3NuYXApOwotCWZvciAoIDsgaXMg PCBsdl9zbmFwLT5sdl9yZW1hcF9wdHI7IGlzKyssIGlkKyspIHsKKwlmb3IgKDsgaXMgPCBs dl9zbmFwLT5sdl9yZW1hcF9wdHI7IGlzKyssIGlkKyspIHsKIAkJLyogc3RvcmUgbmV3IENP V190YWJsZSBlbnRyeSAqLwotCQlsdl9ibG9ja19leGNlcHRpb25fdCAqYmUgPSBsdl9zbmFw LT5sdl9ibG9ja19leGNlcHRpb24gKyBpczsKKwkJbHZfYmxvY2tfZXhjZXB0aW9uX3QgKmJl ID0KKwkJICAgIGx2X3NuYXAtPmx2X2Jsb2NrX2V4Y2VwdGlvbiArIGlzOwogCQl1aW50IHB2 bjsKIAogCQlpZiAoX3B2X2dldF9udW1iZXIodmcsIGJlLT5yZGV2X29yZywgJnB2bikpCiAJ CQlnb3RvIGJhZDsKIAogCQlsdl9DT1dfdGFibGVbaWRdLnB2X29yZ19udW1iZXIgPSBjcHVf dG9fbGU2NChwdm4pOwotCQlsdl9DT1dfdGFibGVbaWRdLnB2X29yZ19yc2VjdG9yID0gY3B1 X3RvX2xlNjQoYmUtPnJzZWN0b3Jfb3JnKTsKKwkJbHZfQ09XX3RhYmxlW2lkXS5wdl9vcmdf cnNlY3RvciA9CisJCSAgICBjcHVfdG9fbGU2NChiZS0+cnNlY3Rvcl9vcmcpOwogCiAJCWlm IChfcHZfZ2V0X251bWJlcih2ZywgYmUtPnJkZXZfbmV3LCAmcHZuKSkKIAkJCWdvdG8gYmFk OwogCiAJCWx2X0NPV190YWJsZVtpZF0ucHZfc25hcF9udW1iZXIgPSBjcHVfdG9fbGU2NChw dm4pOwotCQlsdl9DT1dfdGFibGVbaWRdLnB2X3NuYXBfcnNlY3RvciA9IGNwdV90b19sZTY0 KGJlLT5yc2VjdG9yX25ldyk7CisJCWx2X0NPV190YWJsZVtpZF0ucHZfc25hcF9yc2VjdG9y ID0KKwkJICAgIGNwdV90b19sZTY0KGJlLT5yc2VjdG9yX25ldyk7CiAJfQogCiAJcmV0dXJu IDA7CiAKLSBiYWQ6Ci0JcHJpbnRrKEtFUk5fRVJSICIlcyAtLSBsdm1fc25hcHNob3RfZmls bF9DT1dfcGFnZSBmYWlsZWQiLCBsdm1fbmFtZSk7CisgICAgICBiYWQ6CisJcHJpbnRrKEtF Uk5fRVJSICIlcyAtLSBsdm1fc25hcHNob3RfZmlsbF9DT1dfcGFnZSBmYWlsZWQiLAorCSAg ICAgICBsdm1fbmFtZSk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0zMjAsMTIgKzMyNywxMiBA QAogICoKICAqIFdlIG5lZWQgdG8gaG9sZCBhIHdyaXRlIGxvY2sgb24gbHZfc25hcC0+bHZf bG9jay4KICAqLwotaW50IGx2bV93cml0ZV9DT1dfdGFibGVfYmxvY2sodmdfdCAqIHZnLCBs dl90ICpsdl9zbmFwKQoraW50IGx2bV93cml0ZV9DT1dfdGFibGVfYmxvY2sodmdfdCAqIHZn LCBsdl90ICogbHZfc25hcCkKIHsKIAlpbnQgcjsKIAljb25zdCBjaGFyICplcnI7Ci0JaWYo KHIgPSBfd3JpdGVfQ09XX3RhYmxlX2Jsb2NrKHZnLCBsdl9zbmFwLAotCQkJCSAgICAgICBs dl9zbmFwLT5sdl9yZW1hcF9wdHIgLSAxLCAmZXJyKSkpCisJaWYgKChyID0gX3dyaXRlX0NP V190YWJsZV9ibG9jayh2ZywgbHZfc25hcCwKKwkJCQkJbHZfc25hcC0+bHZfcmVtYXBfcHRy IC0gMSwgJmVycikpKQogCQlsdm1fZHJvcF9zbmFwc2hvdCh2ZywgbHZfc25hcCwgZXJyKTsK IAlyZXR1cm4gcjsKIH0KQEAgLTM0NiwxNCArMzUzLDE2IEBACiAJCSAgICAgdW5zaWduZWQg bG9uZyBvcmdfcGh5c19zZWN0b3IsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBvcmdfcGVfc3Rh cnQsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBvcmdfdmlydF9zZWN0b3IsCi0JCSAgICAgdmdf dCAqdmcsIGx2X3QqIGx2X3NuYXApCisJCSAgICAgdmdfdCAqIHZnLCBsdl90ICogbHZfc25h cCkKIHsKLQljb25zdCBjaGFyICogcmVhc29uOwotCXVuc2lnbmVkIGxvbmcgb3JnX3N0YXJ0 LCBzbmFwX3N0YXJ0LCBzbmFwX3BoeXNfZGV2LCB2aXJ0X3N0YXJ0LCBwZV9vZmY7CisJY29u c3QgY2hhciAqcmVhc29uOworCXVuc2lnbmVkIGxvbmcgb3JnX3N0YXJ0LCBzbmFwX3N0YXJ0 LCBzbmFwX3BoeXNfZGV2LCB2aXJ0X3N0YXJ0LAorCSAgICBwZV9vZmY7CiAJdW5zaWduZWQg bG9uZyBwaHlzX3N0YXJ0OwotCWludCBpZHggPSBsdl9zbmFwLT5sdl9yZW1hcF9wdHIsIGNo dW5rX3NpemUgPSBsdl9zbmFwLT5sdl9jaHVua19zaXplOwotCXN0cnVjdCBraW9idWYgKiBp b2J1ZiA9IGx2X3NuYXAtPmx2X2lvYnVmOwotCXVuc2lnbmVkIGxvbmcgKmJsb2NrcyA9IGlv YnVmLT5raW9fYmxvY2tzOworCWludCBpZHggPSBsdl9zbmFwLT5sdl9yZW1hcF9wdHIsIGNo dW5rX3NpemUgPQorCSAgICBsdl9zbmFwLT5sdl9jaHVua19zaXplOworCXN0cnVjdCBraW9i dWYgKmlvYnVmID0gbHZfc25hcC0+bHZfaW9idWY7CisJdW5zaWduZWQgbG9uZyAqYmxvY2tz ID0gaW9idWYtPmJsb2NrczsKIAlpbnQgYmxrc2l6ZV9zbmFwLCBibGtzaXplX29yZywgbWlu X2Jsa3NpemUsIG1heF9ibGtzaXplOwogCWludCBtYXhfc2VjdG9ycywgbnJfc2VjdG9yczsK IApAQCAtMzYzLDcgKzM3Miw4IEBACiAKIAkvKiBjYWxjdWxhdGUgcGh5c2ljYWwgYm91bmRh cmllcyBvZiBzb3VyY2UgY2h1bmsgKi8KIAlwZV9vZmYgPSBvcmdfcGVfc3RhcnQgJSBjaHVu a19zaXplOwotCW9yZ19zdGFydCA9IG9yZ19waHlzX3NlY3RvciAtICgob3JnX3BoeXNfc2Vj dG9yLXBlX29mZikgJSBjaHVua19zaXplKTsKKwlvcmdfc3RhcnQgPQorCSAgICBvcmdfcGh5 c19zZWN0b3IgLSAoKG9yZ19waHlzX3NlY3RvciAtIHBlX29mZikgJSBjaHVua19zaXplKTsK IAl2aXJ0X3N0YXJ0ID0gb3JnX3ZpcnRfc2VjdG9yIC0gKG9yZ19waHlzX3NlY3RvciAtIG9y Z19zdGFydCk7CiAKIAkvKiBjYWxjdWxhdGUgcGh5c2ljYWwgYm91bmRhcmllcyBvZiBkZXN0 aW5hdGlvbiBjaHVuayAqLwpAQCAtMzc4LDI1ICszODgsMjIgQEAKIAkgICAgICAgbHZtX25h bWUsCiAJICAgICAgIGtkZXZuYW1lKG9yZ19waHlzX2RldiksIG9yZ19waHlzX3NlY3Rvciwg b3JnX3N0YXJ0LAogCSAgICAgICBrZGV2bmFtZShzbmFwX3BoeXNfZGV2KSwgc25hcF9zdGFy dCwKLQkgICAgICAgY2h1bmtfc2l6ZSwKLQkgICAgICAgb3JnX3BlX3N0YXJ0LCBwZV9vZmYs Ci0JICAgICAgIG9yZ192aXJ0X3NlY3Rvcik7CisJICAgICAgIGNodW5rX3NpemUsIG9yZ19w ZV9zdGFydCwgcGVfb2ZmLCBvcmdfdmlydF9zZWN0b3IpOwogI2VuZGlmCiAKIAlibGtzaXpl X29yZyA9IGx2bV9zZWN0c2l6ZShvcmdfcGh5c19kZXYpOwogCWJsa3NpemVfc25hcCA9IGx2 bV9zZWN0c2l6ZShzbmFwX3BoeXNfZGV2KTsKIAltYXhfYmxrc2l6ZSA9IG1heChibGtzaXpl X29yZywgYmxrc2l6ZV9zbmFwKTsKIAltaW5fYmxrc2l6ZSA9IG1pbihibGtzaXplX29yZywg Ymxrc2l6ZV9zbmFwKTsKLQltYXhfc2VjdG9ycyA9IEtJT19NQVhfU0VDVE9SUyAqIChtaW5f Ymxrc2l6ZT4+OSk7CisJbWF4X3NlY3RvcnMgPSBLSU9fTUFYX1NFQ1RPUlMgKiAobWluX2Js a3NpemUgPj4gOSk7CiAKLQlpZiAoY2h1bmtfc2l6ZSAlIChtYXhfYmxrc2l6ZT4+OSkpCisJ aWYgKGNodW5rX3NpemUgJSAobWF4X2Jsa3NpemUgPj4gOSkpCiAJCWdvdG8gZmFpbF9ibGtz aXplOwogCiAJLyogRG9uJ3QgY2hhbmdlIG9yZ19zdGFydCwgd2UgbmVlZCBpdCB0byBmaWxs IGluIHRoZSBleGNlcHRpb24gdGFibGUgKi8KIAlwaHlzX3N0YXJ0ID0gb3JnX3N0YXJ0Owog Ci0Jd2hpbGUgKGNodW5rX3NpemUpCi0JeworCXdoaWxlIChjaHVua19zaXplKSB7CiAJCW5y X3NlY3RvcnMgPSBtaW4oY2h1bmtfc2l6ZSwgbWF4X3NlY3RvcnMpOwogCQljaHVua19zaXpl IC09IG5yX3NlY3RvcnM7CiAKQEAgLTQwNyw3ICs0MTQsOCBAQAogCQkJZ290byBmYWlsX3By ZXBhcmU7CiAKIAkJaWYgKF9fYnJ3X2tpb3ZlYyhSRUFELCAxLCAmaW9idWYsIG9yZ19waHlz X2RldiwgYmxvY2tzLAotCQkJCSBibGtzaXplX29yZywgbHZfc25hcCkgIT0gKG5yX3NlY3Rv cnM8PDkpKQorCQkJCSBibGtzaXplX29yZywKKwkJCQkgbHZfc25hcCkgIT0gKG5yX3NlY3Rv cnMgPDwgOSkpCiAJCQlnb3RvIGZhaWxfcmF3X3JlYWQ7CiAKIAkJaWYgKCFsdm1fc25hcHNo b3RfcHJlcGFyZV9ibG9ja3MoYmxvY2tzLCBzbmFwX3N0YXJ0LApAQCAtNDE1LDcgKzQyMyw4 IEBACiAJCQlnb3RvIGZhaWxfcHJlcGFyZTsKIAogCQlpZiAoX19icndfa2lvdmVjKFdSSVRF LCAxLCAmaW9idWYsIHNuYXBfcGh5c19kZXYsIGJsb2NrcywKLQkJCQkgYmxrc2l6ZV9zbmFw LCBsdl9zbmFwKSAhPSAobnJfc2VjdG9yczw8OSkpCisJCQkJIGJsa3NpemVfc25hcCwKKwkJ CQkgbHZfc25hcCkgIT0gKG5yX3NlY3RvcnMgPDwgOSkpCiAJCQlnb3RvIGZhaWxfcmF3X3dy aXRlOwogCiAJCXBoeXNfc3RhcnQgKz0gbnJfc2VjdG9yczsKQEAgLTQzNyw1MyArNDQ2LDU1 IEBACiAJCSAgICAgIG9yZ19waHlzX2Rldiwgb3JnX3N0YXJ0LCBsdl9zbmFwKTsKIAlsdl9z bmFwLT5sdl9yZW1hcF9wdHIgPSBpZHggKyAxOwogCWlmIChsdl9zbmFwLT5sdl9zbmFwc2hv dF91c2VfcmF0ZSA+IDApIHsKLQkJaWYgKGx2X3NuYXAtPmx2X3JlbWFwX3B0ciAqIDEwMCAv IGx2X3NuYXAtPmx2X3JlbWFwX2VuZCA+PSBsdl9zbmFwLT5sdl9zbmFwc2hvdF91c2VfcmF0 ZSkKKwkJaWYgKGx2X3NuYXAtPmx2X3JlbWFwX3B0ciAqIDEwMCAvIGx2X3NuYXAtPmx2X3Jl bWFwX2VuZCA+PQorCQkgICAgbHZfc25hcC0+bHZfc25hcHNob3RfdXNlX3JhdGUpCiAJCQl3 YWtlX3VwX2ludGVycnVwdGlibGUoJmx2X3NuYXAtPmx2X3NuYXBzaG90X3dhaXQpOwogCX0K IAlyZXR1cm4gMDsKIAogCS8qIHNsb3cgcGF0aCAqLwotb3V0OgorICAgICAgb3V0OgogCWx2 bV9kcm9wX3NuYXBzaG90KHZnLCBsdl9zbmFwLCByZWFzb24pOwogCXJldHVybiAxOwogCi1m YWlsX291dF9vZl9zcGFjZToKKyAgICAgIGZhaWxfb3V0X29mX3NwYWNlOgogCXJlYXNvbiA9 ICJvdXQgb2Ygc3BhY2UiOwogCWdvdG8gb3V0OwotZmFpbF9yYXdfcmVhZDoKKyAgICAgIGZh aWxfcmF3X3JlYWQ6CiAJcmVhc29uID0gInJlYWQgZXJyb3IiOwogCWdvdG8gb3V0OwotZmFp bF9yYXdfd3JpdGU6CisgICAgICBmYWlsX3Jhd193cml0ZToKIAlyZWFzb24gPSAid3JpdGUg ZXJyb3IiOwogCWdvdG8gb3V0OwotZmFpbF9ibGtzaXplOgorICAgICAgZmFpbF9ibGtzaXpl OgogCXJlYXNvbiA9ICJibG9ja3NpemUgZXJyb3IiOwogCWdvdG8gb3V0OwogCi1mYWlsX3By ZXBhcmU6CisgICAgICBmYWlsX3ByZXBhcmU6CiAJcmVhc29uID0gImNvdWxkbid0IHByZXBh cmUga2lvdmVjIGJsb2NrcyAiCi0JCSIoc3RhcnQgcHJvYmFibHkgaXNuJ3QgYmxvY2sgYWxp Z25lZCkiOworCSAgICAiKHN0YXJ0IHByb2JhYmx5IGlzbid0IGJsb2NrIGFsaWduZWQpIjsK IAlnb3RvIG91dDsKIH0KIAotaW50IGx2bV9zbmFwc2hvdF9hbGxvY19pb2J1Zl9wYWdlcyhz dHJ1Y3Qga2lvYnVmICogaW9idWYsIGludCBzZWN0b3JzKQoraW50IGx2bV9zbmFwc2hvdF9h bGxvY19pb2J1Zl9wYWdlcyhzdHJ1Y3Qga2lvYnVmICppb2J1ZiwgaW50IHNlY3RvcnMpCiB7 CiAJaW50IGJ5dGVzLCBucl9wYWdlcywgZXJyLCBpOwogCiAJYnl0ZXMgPSBzZWN0b3JzICog U0VDVE9SX1NJWkU7CiAJbnJfcGFnZXMgPSAoYnl0ZXMgKyB+UEFHRV9NQVNLKSA+PiBQQUdF X1NISUZUOwogCWVyciA9IGV4cGFuZF9raW9idWYoaW9idWYsIG5yX3BhZ2VzKTsKLQlpZiAo ZXJyKSBnb3RvIG91dDsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKIAogCWVyciA9IC1FTk9N RU07CiAJaW9idWYtPmxvY2tlZCA9IDE7CiAJaW9idWYtPm5yX3BhZ2VzID0gMDsKLQlmb3Ig KGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykKLQl7Ci0JCXN0cnVjdCBwYWdlICogcGFnZTsK Kwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFn ZTsKIAogCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCFwYWdlKSBn b3RvIG91dDsKKwkJaWYgKCFwYWdlKQorCQkJZ290byBvdXQ7CiAKIAkJaW9idWYtPm1hcGxp c3RbaV0gPSBwYWdlOwogCQlMb2NrUGFnZShwYWdlKTsKQEAgLTQ5Myw3ICs1MDQsNyBAQAog CiAJZXJyID0gMDsKIAotb3V0OgorICAgICAgb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAg LTUxMywxMyArNTI0LDEzIEBACiB7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBsb25nIGJ1Y2tl dHMsIG1heF9idWNrZXRzLCBzaXplOwotCXN0cnVjdCBsaXN0X2hlYWQgKiBoYXNoOworCXN0 cnVjdCBsaXN0X2hlYWQgKmhhc2g7CiAKIAlidWNrZXRzID0gbHYtPmx2X3JlbWFwX2VuZDsK IAltYXhfYnVja2V0cyA9IGNhbGNfbWF4X2J1Y2tldHMoKTsKIAlidWNrZXRzID0gbWluKGJ1 Y2tldHMsIG1heF9idWNrZXRzKTsKLQl3aGlsZSAoYnVja2V0cyAmIChidWNrZXRzLTEpKQot CQlidWNrZXRzICY9IChidWNrZXRzLTEpOworCXdoaWxlIChidWNrZXRzICYgKGJ1Y2tldHMg LSAxKSkKKwkJYnVja2V0cyAmPSAoYnVja2V0cyAtIDEpOwogCiAJc2l6ZSA9IGJ1Y2tldHMg KiBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCk7CiAKQEAgLTUzMSwxMSArNTQyLDExIEBACiAJ CWdvdG8gb3V0OwogCWx2LT5sdl9zbmFwc2hvdF9oYXNoX3RhYmxlX3NpemUgPSBzaXplOwog Ci0JbHYtPmx2X3NuYXBzaG90X2hhc2hfbWFzayA9IGJ1Y2tldHMtMTsKKwlsdi0+bHZfc25h cHNob3RfaGFzaF9tYXNrID0gYnVja2V0cyAtIDE7CiAJd2hpbGUgKGJ1Y2tldHMtLSkKLQkJ SU5JVF9MSVNUX0hFQUQoaGFzaCtidWNrZXRzKTsKKwkJSU5JVF9MSVNUX0hFQUQoaGFzaCAr IGJ1Y2tldHMpOwogCWVyciA9IDA7Ci1vdXQ6CisgICAgICBvdXQ6CiAJcmV0dXJuIGVycjsK IH0KIApAQCAtNTQ1LDMzICs1NTYsMzkgQEAKIAogCS8qIGFsbG9jYXRlIGtpb3ZlYyB0byBk byBjaHVuayBpbyAqLwogCXJldCA9IGFsbG9jX2tpb3ZlYygxLCAmbHZfc25hcC0+bHZfaW9i dWYpOwotCWlmIChyZXQpIGdvdG8gb3V0OworCWlmIChyZXQpCisJCWdvdG8gb3V0OwogCi0J bWF4X3NlY3RvcnMgPSBLSU9fTUFYX1NFQ1RPUlMgPDwgKFBBR0VfU0hJRlQtOSk7CisJbWF4 X3NlY3RvcnMgPSBLSU9fTUFYX1NFQ1RPUlMgPDwgKFBBR0VfU0hJRlQgLSA5KTsKIAotCXJl dCA9IGx2bV9zbmFwc2hvdF9hbGxvY19pb2J1Zl9wYWdlcyhsdl9zbmFwLT5sdl9pb2J1Ziwg bWF4X3NlY3RvcnMpOwotCWlmIChyZXQpIGdvdG8gb3V0X2ZyZWVfa2lvdmVjOworCXJldCA9 CisJICAgIGx2bV9zbmFwc2hvdF9hbGxvY19pb2J1Zl9wYWdlcyhsdl9zbmFwLT5sdl9pb2J1 ZiwgbWF4X3NlY3RvcnMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWVfa2lvdmVjOwog CiAJLyogYWxsb2NhdGUga2lvdmVjIHRvIGRvIGV4Y2VwdGlvbiB0YWJsZSBpbyAqLwogCXJl dCA9IGFsbG9jX2tpb3ZlYygxLCAmbHZfc25hcC0+bHZfQ09XX3RhYmxlX2lvYnVmKTsKLQlp ZiAocmV0KSBnb3RvIG91dF9mcmVlX2tpb3ZlYzsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9m cmVlX2tpb3ZlYzsKIAogCXJldCA9IGx2bV9zbmFwc2hvdF9hbGxvY19pb2J1Zl9wYWdlcyhs dl9zbmFwLT5sdl9DT1dfdGFibGVfaW9idWYsCi0JCQkJCSAgICAgUEFHRV9TSVpFL1NFQ1RP Ul9TSVpFKTsKLQlpZiAocmV0KSBnb3RvIG91dF9mcmVlX2JvdGhfa2lvdmVjczsKKwkJCQkJ ICAgICBQQUdFX1NJWkUgLyBTRUNUT1JfU0laRSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRf ZnJlZV9ib3RoX2tpb3ZlY3M7CiAKIAlyZXQgPSBsdm1fc25hcHNob3RfYWxsb2NfaGFzaF90 YWJsZShsdl9zbmFwKTsKLQlpZiAocmV0KSBnb3RvIG91dF9mcmVlX2JvdGhfa2lvdmVjczsK KwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlX2JvdGhfa2lvdmVjczsKIAotb3V0OgorICAg ICAgb3V0OgogCXJldHVybiByZXQ7CiAKLW91dF9mcmVlX2JvdGhfa2lvdmVjczoKKyAgICAg IG91dF9mcmVlX2JvdGhfa2lvdmVjczoKIAl1bm1hcF9raW9idWYobHZfc25hcC0+bHZfQ09X X3RhYmxlX2lvYnVmKTsKIAlmcmVlX2tpb3ZlYygxLCAmbHZfc25hcC0+bHZfQ09XX3RhYmxl X2lvYnVmKTsKIAlsdl9zbmFwLT5sdl9DT1dfdGFibGVfaW9idWYgPSBOVUxMOwogCi1vdXRf ZnJlZV9raW92ZWM6CisgICAgICBvdXRfZnJlZV9raW92ZWM6CiAJdW5tYXBfa2lvYnVmKGx2 X3NuYXAtPmx2X2lvYnVmKTsKIAlmcmVlX2tpb3ZlYygxLCAmbHZfc25hcC0+bHZfaW9idWYp OwogCWx2X3NuYXAtPmx2X2lvYnVmID0gTlVMTDsKQEAgLTU4MiwyNyArNTk5LDIzIEBACiAK IHZvaWQgbHZtX3NuYXBzaG90X3JlbGVhc2UobHZfdCAqIGx2KQogewotCWlmIChsdi0+bHZf YmxvY2tfZXhjZXB0aW9uKQotCXsKKwlpZiAobHYtPmx2X2Jsb2NrX2V4Y2VwdGlvbikgewog CQl2ZnJlZShsdi0+bHZfYmxvY2tfZXhjZXB0aW9uKTsKIAkJbHYtPmx2X2Jsb2NrX2V4Y2Vw dGlvbiA9IE5VTEw7CiAJfQotCWlmIChsdi0+bHZfc25hcHNob3RfaGFzaF90YWJsZSkKLQl7 CisJaWYgKGx2LT5sdl9zbmFwc2hvdF9oYXNoX3RhYmxlKSB7CiAJCXZmcmVlKGx2LT5sdl9z bmFwc2hvdF9oYXNoX3RhYmxlKTsKIAkJbHYtPmx2X3NuYXBzaG90X2hhc2hfdGFibGUgPSBO VUxMOwogCQlsdi0+bHZfc25hcHNob3RfaGFzaF90YWJsZV9zaXplID0gMDsKIAl9Ci0JaWYg KGx2LT5sdl9pb2J1ZikKLQl7Ci0JICAgICAgICBraW9idWZfd2FpdF9mb3JfaW8obHYtPmx2 X2lvYnVmKTsKKwlpZiAobHYtPmx2X2lvYnVmKSB7CisJCWtpb2J1Zl93YWl0X2Zvcl9pbyhs di0+bHZfaW9idWYpOwogCQl1bm1hcF9raW9idWYobHYtPmx2X2lvYnVmKTsKIAkJZnJlZV9r aW92ZWMoMSwgJmx2LT5sdl9pb2J1Zik7CiAJCWx2LT5sdl9pb2J1ZiA9IE5VTEw7CiAJfQot CWlmIChsdi0+bHZfQ09XX3RhYmxlX2lvYnVmKQotCXsKLQkgICAgICAgIGtpb2J1Zl93YWl0 X2Zvcl9pbyhsdi0+bHZfQ09XX3RhYmxlX2lvYnVmKTsKKwlpZiAobHYtPmx2X0NPV190YWJs ZV9pb2J1ZikgeworCQlraW9idWZfd2FpdF9mb3JfaW8obHYtPmx2X0NPV190YWJsZV9pb2J1 Zik7CiAJCXVubWFwX2tpb2J1Zihsdi0+bHZfQ09XX3RhYmxlX2lvYnVmKTsKIAkJZnJlZV9r aW92ZWMoMSwgJmx2LT5sdl9DT1dfdGFibGVfaW9idWYpOwogCQlsdi0+bHZfQ09XX3RhYmxl X2lvYnVmID0gTlVMTDsKQEAgLTYxMCw1NSArNjIzLDY3IEBACiB9CiAKIAotc3RhdGljIGlu dCBfd3JpdGVfQ09XX3RhYmxlX2Jsb2NrKHZnX3QgKnZnLCBsdl90ICpsdl9zbmFwLAotCQkJ CSAgaW50IGlkeCwgY29uc3QgY2hhciAqKnJlYXNvbikgeworc3RhdGljIGludCBfd3JpdGVf Q09XX3RhYmxlX2Jsb2NrKHZnX3QgKiB2ZywgbHZfdCAqIGx2X3NuYXAsCisJCQkJICBpbnQg aWR4LCBjb25zdCBjaGFyICoqcmVhc29uKQorewogCWludCBibGtzaXplX3NuYXA7CiAJaW50 IGVuZF9vZl90YWJsZTsKIAlpbnQgaWR4X0NPV190YWJsZTsKIAl1aW50IHB2bjsKIAl1bG9u ZyBzbmFwX3BlX3N0YXJ0LCBDT1dfdGFibGVfc2VjdG9yX29mZnNldCwKLQkgICAgICBDT1df ZW50cmllc19wZXJfcGUsIENPV19jaHVua3NfcGVyX3BlLCBDT1dfZW50cmllc19wZXJfYmxv Y2s7CisJICAgIENPV19lbnRyaWVzX3Blcl9wZSwgQ09XX2NodW5rc19wZXJfcGUsIENPV19l bnRyaWVzX3Blcl9ibG9jazsKIAl1bG9uZyBibG9ja3NbMV07CiAJa2Rldl90IHNuYXBfcGh5 c19kZXY7CiAJbHZfYmxvY2tfZXhjZXB0aW9uX3QgKmJlOwogCXN0cnVjdCBraW9idWYgKkNP V190YWJsZV9pb2J1ZiA9IGx2X3NuYXAtPmx2X0NPV190YWJsZV9pb2J1ZjsKLQlsdl9DT1df dGFibGVfZGlza190ICogbHZfQ09XX3RhYmxlID0KLQkgICAoIGx2X0NPV190YWJsZV9kaXNr X3QgKikgcGFnZV9hZGRyZXNzKGx2X3NuYXAtPmx2X0NPV190YWJsZV9pb2J1Zi0+bWFwbGlz dFswXSk7CisJbHZfQ09XX3RhYmxlX2Rpc2tfdCAqbHZfQ09XX3RhYmxlID0KKwkgICAgKGx2 X0NPV190YWJsZV9kaXNrX3QgKikgcGFnZV9hZGRyZXNzKGx2X3NuYXAtPgorCQkJCQkJIGx2 X0NPV190YWJsZV9pb2J1Zi0+CisJCQkJCQkgbWFwbGlzdFswXSk7CiAKIAlDT1dfY2h1bmtz X3Blcl9wZSA9IExWTV9HRVRfQ09XX1RBQkxFX0NIVU5LU19QRVJfUEUodmcsIGx2X3NuYXAp OwogCUNPV19lbnRyaWVzX3Blcl9wZSA9IExWTV9HRVRfQ09XX1RBQkxFX0VOVFJJRVNfUEVS X1BFKHZnLCBsdl9zbmFwKTsKIAogCS8qIGdldCBwaHlzaWNhbCBhZGRyZXNzZSBvZiBkZXN0 aW5hdGlvbiBjaHVuayAqLwogCXNuYXBfcGh5c19kZXYgPSBsdl9zbmFwLT5sdl9ibG9ja19l eGNlcHRpb25baWR4XS5yZGV2X25ldzsKLQlzbmFwX3BlX3N0YXJ0ID0gbHZfc25hcC0+bHZf YmxvY2tfZXhjZXB0aW9uW2lkeCAtIChpZHggJSBDT1dfZW50cmllc19wZXJfcGUpXS5yc2Vj dG9yX25ldyAtIGx2X3NuYXAtPmx2X2NodW5rX3NpemU7CisJc25hcF9wZV9zdGFydCA9CisJ ICAgIGx2X3NuYXAtPmx2X2Jsb2NrX2V4Y2VwdGlvbltpZHggLQorCQkJCQkoaWR4ICUKKwkJ CQkJIENPV19lbnRyaWVzX3Blcl9wZSldLnJzZWN0b3JfbmV3IC0KKwkgICAgbHZfc25hcC0+ bHZfY2h1bmtfc2l6ZTsKIAogCWJsa3NpemVfc25hcCA9IGx2bV9zZWN0c2l6ZShzbmFwX3Bo eXNfZGV2KTsKIAotICAgICAgICBDT1dfZW50cmllc19wZXJfYmxvY2sgPSBibGtzaXplX3Nu YXAgLyBzaXplb2YobHZfQ09XX3RhYmxlX2Rpc2tfdCk7Ci0gICAgICAgIGlkeF9DT1dfdGFi bGUgPSBpZHggJSBDT1dfZW50cmllc19wZXJfcGUgJSBDT1dfZW50cmllc19wZXJfYmxvY2s7 CisJQ09XX2VudHJpZXNfcGVyX2Jsb2NrID0gYmxrc2l6ZV9zbmFwIC8gc2l6ZW9mKGx2X0NP V190YWJsZV9kaXNrX3QpOworCWlkeF9DT1dfdGFibGUgPSBpZHggJSBDT1dfZW50cmllc19w ZXJfcGUgJSBDT1dfZW50cmllc19wZXJfYmxvY2s7CiAKLQlpZiAoIGlkeF9DT1dfdGFibGUg PT0gMCkgbWVtc2V0KGx2X0NPV190YWJsZSwgMCwgYmxrc2l6ZV9zbmFwKTsKKwlpZiAoaWR4 X0NPV190YWJsZSA9PSAwKQorCQltZW1zZXQobHZfQ09XX3RhYmxlLCAwLCBibGtzaXplX3Nu YXApOwogCiAJLyogc2VjdG9yIG9mZnNldCBpbnRvIHRoZSBvbiBkaXNrIENPVyB0YWJsZSAq LwotCUNPV190YWJsZV9zZWN0b3Jfb2Zmc2V0ID0gKGlkeCAlIENPV19lbnRyaWVzX3Blcl9w ZSkgLyAoU0VDVE9SX1NJWkUgLyBzaXplb2YobHZfQ09XX3RhYmxlX2Rpc2tfdCkpOwotCi0g ICAgICAgIC8qIENPVyB0YWJsZSBibG9jayB0byB3cml0ZSBuZXh0ICovCi0JYmxvY2tzWzBd ID0gKHNuYXBfcGVfc3RhcnQgKyBDT1dfdGFibGVfc2VjdG9yX29mZnNldCkgPj4gKGJsa3Np emVfc25hcCA+PiAxMCk7CisJQ09XX3RhYmxlX3NlY3Rvcl9vZmZzZXQgPQorCSAgICAoaWR4 ICUgQ09XX2VudHJpZXNfcGVyX3BlKSAvIChTRUNUT1JfU0laRSAvCisJCQkJCSAgc2l6ZW9m KGx2X0NPV190YWJsZV9kaXNrX3QpKTsKKworCS8qIENPVyB0YWJsZSBibG9jayB0byB3cml0 ZSBuZXh0ICovCisJYmxvY2tzWzBdID0KKwkgICAgKHNuYXBfcGVfc3RhcnQgKworCSAgICAg Q09XX3RhYmxlX3NlY3Rvcl9vZmZzZXQpID4+IChibGtzaXplX3NuYXAgPj4gMTApOwogCiAJ Lyogc3RvcmUgbmV3IENPV190YWJsZSBlbnRyeSAqLwogCWJlID0gbHZfc25hcC0+bHZfYmxv Y2tfZXhjZXB0aW9uICsgaWR4OwotCWlmKF9wdl9nZXRfbnVtYmVyKHZnLCBiZS0+cmRldl9v cmcsICZwdm4pKQorCWlmIChfcHZfZ2V0X251bWJlcih2ZywgYmUtPnJkZXZfb3JnLCAmcHZu KSkKIAkJZ290byBmYWlsX3B2X2dldF9udW1iZXI7CiAKIAlsdl9DT1dfdGFibGVbaWR4X0NP V190YWJsZV0ucHZfb3JnX251bWJlciA9IGNwdV90b19sZTY0KHB2bik7CiAJbHZfQ09XX3Rh YmxlW2lkeF9DT1dfdGFibGVdLnB2X29yZ19yc2VjdG9yID0KLQkJY3B1X3RvX2xlNjQoYmUt PnJzZWN0b3Jfb3JnKTsKLQlpZihfcHZfZ2V0X251bWJlcih2Zywgc25hcF9waHlzX2Rldiwg JnB2bikpCisJICAgIGNwdV90b19sZTY0KGJlLT5yc2VjdG9yX29yZyk7CisJaWYgKF9wdl9n ZXRfbnVtYmVyKHZnLCBzbmFwX3BoeXNfZGV2LCAmcHZuKSkKIAkJZ290byBmYWlsX3B2X2dl dF9udW1iZXI7CiAKIAlsdl9DT1dfdGFibGVbaWR4X0NPV190YWJsZV0ucHZfc25hcF9udW1i ZXIgPSBjcHVfdG9fbGU2NChwdm4pOwogCWx2X0NPV190YWJsZVtpZHhfQ09XX3RhYmxlXS5w dl9zbmFwX3JzZWN0b3IgPQotCQljcHVfdG9fbGU2NChiZS0+cnNlY3Rvcl9uZXcpOworCSAg ICBjcHVfdG9fbGU2NChiZS0+cnNlY3Rvcl9uZXcpOwogCiAJQ09XX3RhYmxlX2lvYnVmLT5s ZW5ndGggPSBibGtzaXplX3NuYXA7CiAJLyogQ09XX3RhYmxlX2lvYnVmLT5ucl9wYWdlcyA9 IDE7ICovCkBAIC02NjksMzYgKzY5NCw0MiBAQAogCiAJLyogaW5pdGlhbGl6YXRpb24gb2Yg bmV4dCBDT1cgZXhjZXB0aW9uIHRhYmxlIGJsb2NrIHdpdGggemVyb2VzICovCiAJZW5kX29m X3RhYmxlID0gaWR4ICUgQ09XX2VudHJpZXNfcGVyX3BlID09IENPV19lbnRyaWVzX3Blcl9w ZSAtIDE7Ci0JaWYgKGlkeF9DT1dfdGFibGUgJSBDT1dfZW50cmllc19wZXJfYmxvY2sgPT0g Q09XX2VudHJpZXNfcGVyX2Jsb2NrIC0gMSB8fCBlbmRfb2ZfdGFibGUpCi0JeworCWlmIChp ZHhfQ09XX3RhYmxlICUgQ09XX2VudHJpZXNfcGVyX2Jsb2NrID09CisJICAgIENPV19lbnRy aWVzX3Blcl9ibG9jayAtIDEgfHwgZW5kX29mX3RhYmxlKSB7CiAJCS8qIGRvbid0IGdvIGJl eW9uZCB0aGUgZW5kICovCi0JCWlmIChpZHggKyAxID49IGx2X3NuYXAtPmx2X3JlbWFwX2Vu ZCkgZ290byBvdXQ7CisJCWlmIChpZHggKyAxID49IGx2X3NuYXAtPmx2X3JlbWFwX2VuZCkK KwkJCWdvdG8gb3V0OwogCiAJCW1lbXNldChsdl9DT1dfdGFibGUsIDAsIGJsa3NpemVfc25h cCk7CiAKLQkJaWYgKGVuZF9vZl90YWJsZSkKLQkJeworCQlpZiAoZW5kX29mX3RhYmxlKSB7 CiAJCQlpZHgrKzsKLQkJCXNuYXBfcGh5c19kZXYgPSBsdl9zbmFwLT5sdl9ibG9ja19leGNl cHRpb25baWR4XS5yZGV2X25ldzsKLQkJCXNuYXBfcGVfc3RhcnQgPSBsdl9zbmFwLT5sdl9i bG9ja19leGNlcHRpb25baWR4IC0gKGlkeCAlIENPV19lbnRyaWVzX3Blcl9wZSldLnJzZWN0 b3JfbmV3IC0gbHZfc25hcC0+bHZfY2h1bmtfc2l6ZTsKKwkJCXNuYXBfcGh5c19kZXYgPQor CQkJICAgIGx2X3NuYXAtPmx2X2Jsb2NrX2V4Y2VwdGlvbltpZHhdLnJkZXZfbmV3OworCQkJ c25hcF9wZV9zdGFydCA9CisJCQkgICAgbHZfc25hcC0+bHZfYmxvY2tfZXhjZXB0aW9uW2lk eCAtCisJCQkJCQkJKGlkeCAlCisJCQkJCQkJIENPV19lbnRyaWVzX3Blcl9wZSldLgorCQkJ ICAgIHJzZWN0b3JfbmV3IC0gbHZfc25hcC0+bHZfY2h1bmtfc2l6ZTsKIAkJCWJsa3NpemVf c25hcCA9IGx2bV9zZWN0c2l6ZShzbmFwX3BoeXNfZGV2KTsKIAkJCWJsb2Nrc1swXSA9IHNu YXBfcGVfc3RhcnQgPj4gKGJsa3NpemVfc25hcCA+PiAxMCk7Ci0JCX0gZWxzZSBibG9ja3Nb MF0rKzsKKwkJfSBlbHNlCisJCQlibG9ja3NbMF0rKzsKIAogCQlpZiAoX19icndfa2lvdmVj KFdSSVRFLCAxLCAmQ09XX3RhYmxlX2lvYnVmLCBzbmFwX3BoeXNfZGV2LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLCBibGtzaXplX3NuYXAsIGx2X3NuYXAp ICE9Ci0gICAgICAgICAgICAgICAgICAgIGJsa3NpemVfc25hcCkKKwkJCQkgYmxvY2tzLCBi bGtzaXplX3NuYXAsIGx2X3NuYXApICE9CisJCSAgICBibGtzaXplX3NuYXApCiAJCQlnb3Rv IGZhaWxfcmF3X3dyaXRlOwogCX0KIAotb3V0OgorICAgICAgb3V0OgogCXJldHVybiAwOwog Ci1mYWlsX3Jhd193cml0ZToKKyAgICAgIGZhaWxfcmF3X3dyaXRlOgogCSpyZWFzb24gPSAi d3JpdGUgZXJyb3IiOwogCXJldHVybiAxOwogCi1mYWlsX3B2X2dldF9udW1iZXI6CisgICAg ICBmYWlsX3B2X2dldF9udW1iZXI6CiAJKnJlYXNvbiA9ICJfcHZfZ2V0X251bWJlciBmYWls ZWQiOwogCXJldHVybiAxOwogfQpAQCAtNzE0LDEwICs3NDUsMTIgQEAKICAqIHRvIGFjdGl2 YXRlIHRoZSBzbmFwc2hvdCBhbmQgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nLgogICov CiAKLXN0YXRpYyB2b2lkIF9kaXNhYmxlX3NuYXBzaG90KHZnX3QgKnZnLCBsdl90ICpsdikg eworc3RhdGljIHZvaWQgX2Rpc2FibGVfc25hcHNob3QodmdfdCAqIHZnLCBsdl90ICogbHYp Cit7CiAJY29uc3QgY2hhciAqZXJyOwotCWx2LT5sdl9ibG9ja19leGNlcHRpb25bMF0ucnNl Y3Rvcl9vcmcgPSBMVk1fU05BUFNIT1RfRFJPUFBFRF9TRUNUT1I7Ci0JaWYoX3dyaXRlX0NP V190YWJsZV9ibG9jayh2ZywgbHYsIDAsICZlcnIpIDwgMCkgeworCWx2LT5sdl9ibG9ja19l eGNlcHRpb25bMF0ucnNlY3Rvcl9vcmcgPQorCSAgICBMVk1fU05BUFNIT1RfRFJPUFBFRF9T RUNUT1I7CisJaWYgKF93cml0ZV9DT1dfdGFibGVfYmxvY2sodmcsIGx2LCAwLCAmZXJyKSA8 IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcyAtLSBjb3VsZG4ndCBkaXNhYmxlIHNuYXBz aG90OiAlc1xuIiwKIAkJICAgICAgIGx2bV9uYW1lLCBlcnIpOwogCX0KLS0tIGxpbnV4L2Ry aXZlcnMvbWQvbHZtLWZzLmMub3JpZwlNb24gTWFyIDI0IDE1OjA3OjIyIDIwMDMKKysrIGxp bnV4L2RyaXZlcnMvbWQvbHZtLWZzLmMJVHVlIE9jdCAyOCAxMjo0MzowMyAyMDAzCkBAIC0x LDkgKzEsMTAgQEAKIC8qCiAgKiBrZXJuZWwvbHZtLWZzLmMKICAqCi0gKiBDb3B5cmlnaHQg KEMpIDIwMDEgU2lzdGluYSBTb2Z0d2FyZQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIg U2lzdGluYSBTb2Z0d2FyZQogICoKLSAqIEphbnVhcnktQXByaWwgMjAwMQorICogSmFudWFy eS1NYXksRGVjZW1iZXIgMjAwMQorICogTWF5IDIwMDIKICAqCiAgKiBMVk0gZHJpdmVyIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK ICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CkBAIC01OCw5ICs1OSw5IEBACiBzdGF0aWMgaW50IF9wcm9j X3JlYWRfZ2xvYmFsKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAogCQkJ ICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBf dmdfaW5mbyh2Z190ICp2Z19wdHIsIGNoYXIgKmJ1Zik7Ci1zdGF0aWMgaW50IF9sdl9pbmZv KHZnX3QgKnZnX3B0ciwgbHZfdCAqbHZfcHRyLCBjaGFyICpidWYpOwotc3RhdGljIGludCBf cHZfaW5mbyhwdl90ICpwdl9wdHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgaW50IF92Z19pbmZv KHZnX3QgKiB2Z19wdHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgaW50IF9sdl9pbmZvKHZnX3Qg KiB2Z19wdHIsIGx2X3QgKiBsdl9wdHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgaW50IF9wdl9p bmZvKHB2X3QgKiBwdl9wdHIsIGNoYXIgKmJ1Zik7CiAKIHN0YXRpYyB2b2lkIF9zaG93X3V1 aWQoY29uc3QgY2hhciAqc3JjLCBjaGFyICpiLCBjaGFyICplKTsKIApAQCAtNzcsODEgKzc4 LDk1IEBACiAvKiBpbmxpbmUgZnVuY3Rpb25zICovCiAKIC8qIHB1YmxpYyBpbnRlcmZhY2Ug Ki8KLXZvaWQgX19pbml0IGx2bV9pbml0X2ZzKCkgewordm9pZCBfX2luaXQgbHZtX2luaXRf ZnMoKQorewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOwogCiAvKiBVc2VyLXNwYWNl IGhhcyBhbHJlYWR5IHJlZ2lzdGVyZWQgdGhpcyAqLwogI2lmIDAKLQlsdm1fZGV2ZnNfaGFu ZGxlID0gZGV2ZnNfcmVnaXN0ZXIoCi0JCTAgLCAibHZtIiwgMCwgTFZNX0NIQVJfTUFKT1Is IDAsCi0JCVNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAsCi0JCSZsdm1f Y2hyX2ZvcHMsIE5VTEwpOworCWx2bV9kZXZmc19oYW5kbGUgPSBkZXZmc19yZWdpc3Rlcigw LCAibHZtIiwgMCwgTFZNX0NIQVJfTUFKT1IsIDAsCisJCQkJCSAgU19JRkNIUiB8IFNfSVJV U1IgfCBTX0lXVVNSIHwKKwkJCQkJICBTX0lSR1JQLCAmbHZtX2Nocl9mb3BzLCBOVUxMKTsK ICNlbmRpZgogCWx2bV9wcm9jX2RpciA9IGNyZWF0ZV9wcm9jX2VudHJ5KExWTV9ESVIsIFNf SUZESVIsICZwcm9jX3Jvb3QpOwogCWlmIChsdm1fcHJvY19kaXIpIHsKLQkJbHZtX3Byb2Nf dmdfc3ViZGlyID0gY3JlYXRlX3Byb2NfZW50cnkoTFZNX1ZHX1NVQkRJUiwgU19JRkRJUiwK LQkJCQkJCSAgICAgICBsdm1fcHJvY19kaXIpOworCQlsdm1fcHJvY192Z19zdWJkaXIgPQor CQkgICAgY3JlYXRlX3Byb2NfZW50cnkoTFZNX1ZHX1NVQkRJUiwgU19JRkRJUiwKKwkJCQkg ICAgICBsdm1fcHJvY19kaXIpOwogCQlwZGUgPSBjcmVhdGVfcHJvY19lbnRyeShMVk1fR0xP QkFMLCBTX0lGUkVHLCBsdm1fcHJvY19kaXIpOwotCQlpZiAoIHBkZSAhPSBOVUxMKSBwZGUt PnJlYWRfcHJvYyA9IF9wcm9jX3JlYWRfZ2xvYmFsOworCQlpZiAocGRlICE9IE5VTEwpCisJ CQlwZGUtPnJlYWRfcHJvYyA9IF9wcm9jX3JlYWRfZ2xvYmFsOwogCX0KIH0KIAotdm9pZCBs dm1fZmluX2ZzKCkgewordm9pZCBsdm1fZmluX2ZzKCkKK3sKICNpZiAwCi0JZGV2ZnNfdW5y ZWdpc3RlciAobHZtX2RldmZzX2hhbmRsZSk7CisJZGV2ZnNfdW5yZWdpc3Rlcihsdm1fZGV2 ZnNfaGFuZGxlKTsKICNlbmRpZgogCXJlbW92ZV9wcm9jX2VudHJ5KExWTV9HTE9CQUwsIGx2 bV9wcm9jX2Rpcik7CiAJcmVtb3ZlX3Byb2NfZW50cnkoTFZNX1ZHX1NVQkRJUiwgbHZtX3By b2NfZGlyKTsKIAlyZW1vdmVfcHJvY19lbnRyeShMVk1fRElSLCAmcHJvY19yb290KTsKIH0K IAotdm9pZCBsdm1fZnNfY3JlYXRlX3ZnKHZnX3QgKnZnX3B0cikgewordm9pZCBsdm1fZnNf Y3JlYXRlX3ZnKHZnX3QgKiB2Z19wdHIpCit7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpw ZGU7CiAKKwlpZiAoIXZnX3B0cikKKwkJcmV0dXJuOworCiAJdmdfZGV2ZnNfaGFuZGxlW3Zn X3B0ci0+dmdfbnVtYmVyXSA9Ci0JCWRldmZzX21rX2RpcigwLCB2Z19wdHItPnZnX25hbWUs IE5VTEwpOworCSAgICBkZXZmc19ta19kaXIoMCwgdmdfcHRyLT52Z19uYW1lLCBOVUxMKTsK IAotCWNoX2RldmZzX2hhbmRsZVt2Z19wdHItPnZnX251bWJlcl0gPSBkZXZmc19yZWdpc3Rl cigKLQkJdmdfZGV2ZnNfaGFuZGxlW3ZnX3B0ci0+dmdfbnVtYmVyXSAsICJncm91cCIsCi0J CURFVkZTX0ZMX0RFRkFVTFQsIExWTV9DSEFSX01BSk9SLCB2Z19wdHItPnZnX251bWJlciwK LQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCwKLQkJJmx2bV9jaHJf Zm9wcywgTlVMTCk7CisJY2hfZGV2ZnNfaGFuZGxlW3ZnX3B0ci0+dmdfbnVtYmVyXSA9CisJ ICAgIGRldmZzX3JlZ2lzdGVyKHZnX2RldmZzX2hhbmRsZVt2Z19wdHItPnZnX251bWJlcl0s ICJncm91cCIsCisJCQkgICBERVZGU19GTF9ERUZBVUxULCBMVk1fQ0hBUl9NQUpPUiwKKwkJ CSAgIHZnX3B0ci0+dmdfbnVtYmVyLAorCQkJICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lX VVNSIHwgU19JUkdSUCwKKwkJCSAgICZsdm1fY2hyX2ZvcHMsIE5VTEwpOwogCiAJdmdfcHRy LT52Z19kaXJfcGRlID0gY3JlYXRlX3Byb2NfZW50cnkodmdfcHRyLT52Z19uYW1lLCBTX0lG RElSLAogCQkJCQkgICAgICAgbHZtX3Byb2Nfdmdfc3ViZGlyKTsKIAotCWlmKChwZGUgPSBj cmVhdGVfcHJvY19lbnRyeSgiZ3JvdXAiLCBTX0lGUkVHLCB2Z19wdHItPnZnX2Rpcl9wZGUp KSkgeworCWlmICgocGRlID0KKwkgICAgIGNyZWF0ZV9wcm9jX2VudHJ5KCJncm91cCIsIFNf SUZSRUcsIHZnX3B0ci0+dmdfZGlyX3BkZSkpKSB7CiAJCXBkZS0+cmVhZF9wcm9jID0gX3By b2NfcmVhZF92ZzsKIAkJcGRlLT5kYXRhID0gdmdfcHRyOwogCX0KIAogCXZnX3B0ci0+bHZf c3ViZGlyX3BkZSA9Ci0JCWNyZWF0ZV9wcm9jX2VudHJ5KExWTV9MVl9TVUJESVIsIFNfSUZE SVIsIHZnX3B0ci0+dmdfZGlyX3BkZSk7CisJICAgIGNyZWF0ZV9wcm9jX2VudHJ5KExWTV9M Vl9TVUJESVIsIFNfSUZESVIsIHZnX3B0ci0+dmdfZGlyX3BkZSk7CiAKIAl2Z19wdHItPnB2 X3N1YmRpcl9wZGUgPQotCQljcmVhdGVfcHJvY19lbnRyeShMVk1fUFZfU1VCRElSLCBTX0lG RElSLCB2Z19wdHItPnZnX2Rpcl9wZGUpOworCSAgICBjcmVhdGVfcHJvY19lbnRyeShMVk1f UFZfU1VCRElSLCBTX0lGRElSLCB2Z19wdHItPnZnX2Rpcl9wZGUpOwogfQogCi12b2lkIGx2 bV9mc19yZW1vdmVfdmcodmdfdCAqdmdfcHRyKSB7Cit2b2lkIGx2bV9mc19yZW1vdmVfdmco dmdfdCAqIHZnX3B0cikKK3sKIAlpbnQgaTsKIAorCWlmICghdmdfcHRyKQorCQlyZXR1cm47 CisKIAlkZXZmc191bnJlZ2lzdGVyKGNoX2RldmZzX2hhbmRsZVt2Z19wdHItPnZnX251bWJl cl0pOwogCWNoX2RldmZzX2hhbmRsZVt2Z19wdHItPnZnX251bWJlcl0gPSBOVUxMOwogCi0J LyogcmVtb3ZlIHB2J3MgKi8KLQlmb3IoaSA9IDA7IGkgPCB2Z19wdHItPnB2X21heDsgaSsr KQotCQlpZih2Z19wdHItPnB2W2ldKSBsdm1fZnNfcmVtb3ZlX3B2KHZnX3B0ciwgdmdfcHRy LT5wdltpXSk7Ci0KIAkvKiByZW1vdmUgbHYncyAqLwotCWZvcihpID0gMDsgaSA8IHZnX3B0 ci0+bHZfbWF4OyBpKyspCi0JCWlmKHZnX3B0ci0+bHZbaV0pIGx2bV9mc19yZW1vdmVfbHYo dmdfcHRyLCB2Z19wdHItPmx2W2ldKTsKLQorCWZvciAoaSA9IDA7IGkgPCB2Z19wdHItPmx2 X21heDsgaSsrKQorCQlpZiAodmdfcHRyLT5sdltpXSkKKwkJCWx2bV9mc19yZW1vdmVfbHYo dmdfcHRyLCB2Z19wdHItPmx2W2ldKTsKIAogCS8qIG11c3Qgbm90IHJlbW92ZSBkaXJlY3Rv cnkgYmVmb3JlIGxlYWYgbm9kZXMgKi8KIAlkZXZmc191bnJlZ2lzdGVyKHZnX2RldmZzX2hh bmRsZVt2Z19wdHItPnZnX251bWJlcl0pOwogCXZnX2RldmZzX2hhbmRsZVt2Z19wdHItPnZn X251bWJlcl0gPSBOVUxMOwogCi0JaWYodmdfcHRyLT52Z19kaXJfcGRlKSB7CisJLyogcmVt b3ZlIHB2J3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdmdfcHRyLT5wdl9tYXg7IGkrKykKKwkJ aWYgKHZnX3B0ci0+cHZbaV0pCisJCQlsdm1fZnNfcmVtb3ZlX3B2KHZnX3B0ciwgdmdfcHRy LT5wdltpXSk7CisKKwlpZiAodmdfcHRyLT52Z19kaXJfcGRlKSB7CiAJCXJlbW92ZV9wcm9j X2VudHJ5KExWTV9MVl9TVUJESVIsIHZnX3B0ci0+dmdfZGlyX3BkZSk7CiAJCXZnX3B0ci0+ bHZfc3ViZGlyX3BkZSA9IE5VTEw7CiAKQEAgLTE2Niw3MyArMTgxLDk3IEBACiB9CiAKIAot c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpfYmFzZW5hbWUoY29uc3QgY2hhciAqc3RyKSB7 CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKl9iYXNlbmFtZShjb25zdCBjaGFyICpzdHIp Cit7CiAJY29uc3QgY2hhciAqbmFtZSA9IHN0cnJjaHIoc3RyLCAnLycpOwogCW5hbWUgPSBu YW1lID8gbmFtZSArIDEgOiBzdHI7CiAJcmV0dXJuIG5hbWU7CiB9CiAKLWRldmZzX2hhbmRs ZV90IGx2bV9mc19jcmVhdGVfbHYodmdfdCAqdmdfcHRyLCBsdl90ICpsdikgeworZGV2ZnNf aGFuZGxlX3QgbHZtX2ZzX2NyZWF0ZV9sdih2Z190ICogdmdfcHRyLCBsdl90ICogbHYpCit7 CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7Ci0JY29uc3QgY2hhciAqbmFtZSA9IF9i YXNlbmFtZShsdi0+bHZfbmFtZSk7CisJY29uc3QgY2hhciAqbmFtZTsKIAotCWx2X2RldmZz X2hhbmRsZVtNSU5PUihsdi0+bHZfZGV2KV0gPSBkZXZmc19yZWdpc3RlcigKLQkJdmdfZGV2 ZnNfaGFuZGxlW3ZnX3B0ci0+dmdfbnVtYmVyXSwgbmFtZSwKLQkJREVWRlNfRkxfREVGQVVM VCwgTFZNX0JMS19NQUpPUiwgTUlOT1IobHYtPmx2X2RldiksCi0JCVNfSUZCTEsgfCBTX0lS VVNSIHwgU19JV1VTUiB8IFNfSVJHUlAsCi0JCSZsdm1fYmxrX2RvcHMsIE5VTEwpOworCWlm ICghdmdfcHRyIHx8ICFsdikKKwkJcmV0dXJuIE5VTEw7CiAKLQlpZih2Z19wdHItPmx2X3N1 YmRpcl9wZGUgJiYKLQkgICAocGRlID0gY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgU19JRlJF RywgdmdfcHRyLT5sdl9zdWJkaXJfcGRlKSkpIHsKKwluYW1lID0gX2Jhc2VuYW1lKGx2LT5s dl9uYW1lKTsKKworCWx2X2RldmZzX2hhbmRsZVtNSU5PUihsdi0+bHZfZGV2KV0gPQorCSAg ICBkZXZmc19yZWdpc3Rlcih2Z19kZXZmc19oYW5kbGVbdmdfcHRyLT52Z19udW1iZXJdLCBu YW1lLAorCQkJICAgREVWRlNfRkxfREVGQVVMVCwgTFZNX0JMS19NQUpPUiwKKwkJCSAgIE1J Tk9SKGx2LT5sdl9kZXYpLAorCQkJICAgU19JRkJMSyB8IFNfSVJVU1IgfCBTX0lXVVNSIHwg U19JUkdSUCwKKwkJCSAgICZsdm1fYmxrX2RvcHMsIE5VTEwpOworCisJaWYgKHZnX3B0ci0+ bHZfc3ViZGlyX3BkZSAmJgorCSAgICAocGRlID0KKwkgICAgIGNyZWF0ZV9wcm9jX2VudHJ5 KG5hbWUsIFNfSUZSRUcsIHZnX3B0ci0+bHZfc3ViZGlyX3BkZSkpKSB7CiAJCXBkZS0+cmVh ZF9wcm9jID0gX3Byb2NfcmVhZF9sdjsKIAkJcGRlLT5kYXRhID0gbHY7CiAJfQogCXJldHVy biBsdl9kZXZmc19oYW5kbGVbTUlOT1IobHYtPmx2X2RldildOwogfQogCi12b2lkIGx2bV9m c19yZW1vdmVfbHYodmdfdCAqdmdfcHRyLCBsdl90ICpsdikgewordm9pZCBsdm1fZnNfcmVt b3ZlX2x2KHZnX3QgKiB2Z19wdHIsIGx2X3QgKiBsdikKK3sKKworCWlmICghdmdfcHRyIHx8 ICFsdikKKwkJcmV0dXJuOworCiAJZGV2ZnNfdW5yZWdpc3Rlcihsdl9kZXZmc19oYW5kbGVb TUlOT1IobHYtPmx2X2RldildKTsKIAlsdl9kZXZmc19oYW5kbGVbTUlOT1IobHYtPmx2X2Rl dildID0gTlVMTDsKIAotCWlmKHZnX3B0ci0+bHZfc3ViZGlyX3BkZSkgeworCWlmICh2Z19w dHItPmx2X3N1YmRpcl9wZGUpIHsKIAkJY29uc3QgY2hhciAqbmFtZSA9IF9iYXNlbmFtZShs di0+bHZfbmFtZSk7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KG5hbWUsIHZnX3B0ci0+bHZfc3Vi ZGlyX3BkZSk7CiAJfQogfQogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfbWFrZV9wdl9uYW1l KGNvbnN0IGNoYXIgKnNyYywgY2hhciAqYiwgY2hhciAqZSkgeworc3RhdGljIGlubGluZSB2 b2lkIF9tYWtlX3B2X25hbWUoY29uc3QgY2hhciAqc3JjLCBjaGFyICpiLCBjaGFyICplKQor ewogCWludCBvZmZzZXQgPSBzdHJsZW4oTFZNX0RJUl9QUkVGSVgpOwotCWlmKHN0cm5jbXAo c3JjLCBMVk1fRElSX1BSRUZJWCwgb2Zmc2V0KSkKKwlpZiAoc3RybmNtcChzcmMsIExWTV9E SVJfUFJFRklYLCBvZmZzZXQpKQogCQlvZmZzZXQgPSAwOwogCiAJZS0tOwogCXNyYyArPSBv ZmZzZXQ7Ci0Jd2hpbGUoKnNyYyAmJiAoYiAhPSBlKSkgeworCXdoaWxlICgqc3JjICYmIChi ICE9IGUpKSB7CiAJCSpiKysgPSAoKnNyYyA9PSAnLycpID8gJ18nIDogKnNyYzsKIAkJc3Jj Kys7CiAJfQogCSpiID0gJ1wwJzsKIH0KIAotdm9pZCBsdm1fZnNfY3JlYXRlX3B2KHZnX3Qg KnZnX3B0ciwgcHZfdCAqcHYpIHsKK3ZvaWQgbHZtX2ZzX2NyZWF0ZV9wdih2Z190ICogdmdf cHRyLCBwdl90ICogcHYpCit7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CiAJY2hh ciBuYW1lW05BTUVfTEVOXTsKIAotCWlmKCF2Z19wdHItPnB2X3N1YmRpcl9wZGUpCisJaWYg KCF2Z19wdHIgfHwgIXB2KQorCQlyZXR1cm47CisKKwlpZiAoIXZnX3B0ci0+cHZfc3ViZGly X3BkZSkKIAkJcmV0dXJuOwogCiAJX21ha2VfcHZfbmFtZShwdi0+cHZfbmFtZSwgbmFtZSwg bmFtZSArIHNpemVvZihuYW1lKSk7Ci0JaWYoKHBkZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5h bWUsIFNfSUZSRUcsIHZnX3B0ci0+cHZfc3ViZGlyX3BkZSkpKSB7CisJaWYgKChwZGUgPQor CSAgICAgY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgU19JRlJFRywgdmdfcHRyLT5wdl9zdWJk aXJfcGRlKSkpIHsKIAkJcGRlLT5yZWFkX3Byb2MgPSBfcHJvY19yZWFkX3B2OwogCQlwZGUt PmRhdGEgPSBwdjsKIAl9CiB9CiAKLXZvaWQgbHZtX2ZzX3JlbW92ZV9wdih2Z190ICp2Z19w dHIsIHB2X3QgKnB2KSB7Cit2b2lkIGx2bV9mc19yZW1vdmVfcHYodmdfdCAqIHZnX3B0ciwg cHZfdCAqIHB2KQorewogCWNoYXIgbmFtZVtOQU1FX0xFTl07CiAKLQlpZighdmdfcHRyLT5w dl9zdWJkaXJfcGRlKQorCWlmICghdmdfcHRyIHx8ICFwdikKKwkJcmV0dXJuOworCisJaWYg KCF2Z19wdHItPnB2X3N1YmRpcl9wZGUpCiAJCXJldHVybjsKIAogCV9tYWtlX3B2X25hbWUo cHYtPnB2X25hbWUsIG5hbWUsIG5hbWUgKyBzaXplb2YobmFtZSkpOwpAQCAtMjQxLDcgKzI4 MCw4IEBACiAKIAogc3RhdGljIGludCBfcHJvY19yZWFkX3ZnKGNoYXIgKnBhZ2UsIGNoYXIg KipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpk YXRhKSB7CisJCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKIAlpbnQg c3ogPSAwOwogCXZnX3QgKnZnX3B0ciA9IGRhdGE7CiAJY2hhciB1dWlkW05BTUVfTEVOXTsK QEAgLTI1OCw5ICsyOTgsMTEgQEAKIAlzeiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgIlBWIG1h eDogICAgICAgJXVcbiIsIHZnX3B0ci0+cHZfbWF4KTsKIAlzeiArPSBzcHJpbnRmKHBhZ2Ug KyBzeiwgIlBWIGN1cnJlbnQ6ICAgJXVcbiIsIHZnX3B0ci0+cHZfY3VyKTsKIAlzeiArPSBz cHJpbnRmKHBhZ2UgKyBzeiwgIlBWIGFjdGl2ZTogICAgJXVcbiIsIHZnX3B0ci0+cHZfYWN0 KTsKLQlzeiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgIlBFIHNpemU6ICAgICAgJXVcbiIsIHZn X3B0ci0+cGVfc2l6ZSAvIDIpOworCXN6ICs9CisJICAgIHNwcmludGYocGFnZSArIHN6LCAi UEUgc2l6ZTogICAgICAldVxuIiwgdmdfcHRyLT5wZV9zaXplIC8gMik7CiAJc3ogKz0gc3By aW50ZihwYWdlICsgc3osICJQRSB0b3RhbDogICAgICV1XG4iLCB2Z19wdHItPnBlX3RvdGFs KTsKLQlzeiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgIlBFIGFsbG9jYXRlZDogJXVcbiIsIHZn X3B0ci0+cGVfYWxsb2NhdGVkKTsKKwlzeiArPQorCSAgICBzcHJpbnRmKHBhZ2UgKyBzeiwg IlBFIGFsbG9jYXRlZDogJXVcbiIsIHZnX3B0ci0+cGVfYWxsb2NhdGVkKTsKIAogCV9zaG93 X3V1aWQodmdfcHRyLT52Z191dWlkLCB1dWlkLCB1dWlkICsgc2l6ZW9mKHV1aWQpKTsKIAlz eiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgInV1aWQ6ICAgICAgICAgJXNcbiIsIHV1aWQpOwpA QCAtMjY5LDcgKzMxMSw4IEBACiB9CiAKIHN0YXRpYyBpbnQgX3Byb2NfcmVhZF9sdihjaGFy ICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCSAgaW50IGNvdW50LCBpbnQg KmVvZiwgdm9pZCAqZGF0YSkgeworCQkJIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRh dGEpCit7CiAJaW50IHN6ID0gMDsKIAlsdl90ICpsdiA9IGRhdGE7CiAKQEAgLTI4MCw3ICsz MjMsNyBAQAogCXN6ICs9IHNwcmludGYocGFnZSArIHN6LCAibnVtYmVyOiAgICAgICAldVxu IiwgbHYtPmx2X251bWJlcik7CiAJc3ogKz0gc3ByaW50ZihwYWdlICsgc3osICJvcGVuOiAg ICAgICAgICV1XG4iLCBsdi0+bHZfb3Blbik7CiAJc3ogKz0gc3ByaW50ZihwYWdlICsgc3os ICJhbGxvY2F0aW9uOiAgICV1XG4iLCBsdi0+bHZfYWxsb2NhdGlvbik7Ci0JaWYobHYtPmx2 X3N0cmlwZXMgPiAxKSB7CisJaWYgKGx2LT5sdl9zdHJpcGVzID4gMSkgewogCQlzeiArPSBz cHJpbnRmKHBhZ2UgKyBzeiwgInN0cmlwZXM6ICAgICAgJXVcbiIsCiAJCQkgICAgICBsdi0+ bHZfc3RyaXBlcyk7CiAJCXN6ICs9IHNwcmludGYocGFnZSArIHN6LCAic3RyaXBlc2l6ZTog ICAldVxuIiwKQEAgLTI5Myw3ICszMzYsOCBAQAogfQogCiBzdGF0aWMgaW50IF9wcm9jX3Jl YWRfcHYoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgaW50IGNv dW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkgeworCQkJIGludCBjb3VudCwgaW50ICplb2Ys IHZvaWQgKmRhdGEpCit7CiAJaW50IHN6ID0gMDsKIAlwdl90ICpwdiA9IGRhdGE7CiAJY2hh ciB1dWlkW05BTUVfTEVOXTsKQEAgLTMwOCw3ICszNTIsNyBAQAogCXN6ICs9IHNwcmludGYo cGFnZSArIHN6LCAiUEUgdG90YWw6ICAgICAldVxuIiwgcHYtPnBlX3RvdGFsKTsKIAlzeiAr PSBzcHJpbnRmKHBhZ2UgKyBzeiwgIlBFIGFsbG9jYXRlZDogJXVcbiIsIHB2LT5wZV9hbGxv Y2F0ZWQpOwogCXN6ICs9IHNwcmludGYocGFnZSArIHN6LCAiZGV2aWNlOiAgICAgICAlMDJ1 OiUwMnVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgTUFKT1IocHYtPnB2X2RldiksIE1J Tk9SKHB2LT5wdl9kZXYpKTsKKwkJICAgICAgTUFKT1IocHYtPnB2X2RldiksIE1JTk9SKHB2 LT5wdl9kZXYpKTsKIAogCV9zaG93X3V1aWQocHYtPnB2X3V1aWQsIHV1aWQsIHV1aWQgKyBz aXplb2YodXVpZCkpOwogCXN6ICs9IHNwcmludGYocGFnZSArIHN6LCAidXVpZDogICAgICAg ICAlc1xuIiwgdXVpZCk7CkBAIC0zMTYsMTMgKzM2MCwxNSBAQAogCXJldHVybiBzejsKIH0K IAotc3RhdGljIGludCBfcHJvY19yZWFkX2dsb2JhbChjaGFyICpwYWdlLCBjaGFyICoqc3Rh cnQsIG9mZl90IHBvcywgaW50IGNvdW50LAotCQkJICAgICBpbnQgKmVvZiwgdm9pZCAqZGF0 YSkgeworc3RhdGljIGludCBfcHJvY19yZWFkX2dsb2JhbChjaGFyICpwYWdlLCBjaGFyICoq c3RhcnQsIG9mZl90IHBvcywKKwkJCSAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAq ZGF0YSkKK3sKIAogI2RlZmluZSAgTFZNX1BST0NfQlVGICAgKCBpID09IDAgPyBkdW1teV9i dWYgOiAmYnVmW3N6XSkKIAotCWludCBjLCBpLCBsLCBwLCB2LCB2Z19jb3VudGVyLCBwdl9j b3VudGVyLCBsdl9jb3VudGVyLCBsdl9vcGVuX2NvdW50ZXIsCi0JCWx2X29wZW5fdG90YWws IHBlX3RfYnl0ZXMsIGhhc2hfdGFibGVfYnl0ZXMsIGx2X2Jsb2NrX2V4Y2VwdGlvbl90X2J5 dGVzLCBzZWNvbmRzOworCWludCBjLCBpLCBsLCBwLCB2LCB2Z19jb3VudGVyLCBwdl9jb3Vu dGVyLCBsdl9jb3VudGVyLAorCSAgICBsdl9vcGVuX2NvdW50ZXIsIGx2X29wZW5fdG90YWws IHBlX3RfYnl0ZXMsIGhhc2hfdGFibGVfYnl0ZXMsCisJICAgIGx2X2Jsb2NrX2V4Y2VwdGlv bl90X2J5dGVzLCBzZWNvbmRzOwogCXN0YXRpYyBvZmZfdCBzejsKIAlvZmZfdCBzel9sYXN0 OwogCXN0YXRpYyBjaGFyICpidWYgPSBOVUxMOwpAQCAtMzM4LDEyICszODQsMTIgQEAKIAkg ICAgICAgbHZtX25hbWUsIHBvcywgY291bnQpOwogI2VuZGlmCiAKLQlpZihwb3MgIT0gMCAm JiBidWYgIT0gTlVMTCkKKwlpZiAocG9zICE9IDAgJiYgYnVmICE9IE5VTEwpCiAJCWdvdG8g b3V0OwogCi0Jc3pfbGFzdCA9IHZnX2NvdW50ZXIgPSBwdl9jb3VudGVyID0gbHZfY291bnRl ciA9IGx2X29wZW5fY291bnRlciA9IFwKLQkJbHZfb3Blbl90b3RhbCA9IHBlX3RfYnl0ZXMg PSBoYXNoX3RhYmxlX2J5dGVzID0gXAotCQlsdl9ibG9ja19leGNlcHRpb25fdF9ieXRlcyA9 IDA7CisJc3pfbGFzdCA9IHZnX2NvdW50ZXIgPSBwdl9jb3VudGVyID0gbHZfY291bnRlciA9 IGx2X29wZW5fY291bnRlciA9CisJICAgIGx2X29wZW5fdG90YWwgPSBwZV90X2J5dGVzID0g aGFzaF90YWJsZV9ieXRlcyA9CisJICAgIGx2X2Jsb2NrX2V4Y2VwdGlvbl90X2J5dGVzID0g MDsKIAogCS8qIGdldCBzb21lIHN0YXRpc3RpY3MgKi8KIAlmb3IgKHYgPSAwOyB2IDwgQUJT X01BWF9WRzsgdisrKSB7CkBAIC0zNTMsMTQgKzM5OSwyNiBAQAogCQkJbHZfY291bnRlciAr PSB2Z19wdHItPmx2X2N1cjsKIAkJCWlmICh2Z19wdHItPmx2X2N1ciA+IDApIHsKIAkJCQlm b3IgKGwgPSAwOyBsIDwgdmdbdl0tPmx2X21heDsgbCsrKSB7Ci0JCQkJCWlmICgobHZfcHRy ID0gdmdfcHRyLT5sdltsXSkgIT0gTlVMTCkgewotCQkJCQkJcGVfdF9ieXRlcyArPSBsdl9w dHItPmx2X2FsbG9jYXRlZF9sZTsKLQkJCQkJCWhhc2hfdGFibGVfYnl0ZXMgKz0gbHZfcHRy LT5sdl9zbmFwc2hvdF9oYXNoX3RhYmxlX3NpemU7Ci0JCQkJCQlpZiAobHZfcHRyLT5sdl9i bG9ja19leGNlcHRpb24gIT0gTlVMTCkKLQkJCQkJCQlsdl9ibG9ja19leGNlcHRpb25fdF9i eXRlcyArPSBsdl9wdHItPmx2X3JlbWFwX2VuZDsKKwkJCQkJaWYgKChsdl9wdHIgPQorCQkJ CQkgICAgIHZnX3B0ci0+bHZbbF0pICE9IE5VTEwpIHsKKwkJCQkJCXBlX3RfYnl0ZXMgKz0K KwkJCQkJCSAgICBsdl9wdHItPgorCQkJCQkJICAgIGx2X2FsbG9jYXRlZF9sZTsKKwkJCQkJ CWhhc2hfdGFibGVfYnl0ZXMgKz0KKwkJCQkJCSAgICBsdl9wdHItPgorCQkJCQkJICAgIGx2 X3NuYXBzaG90X2hhc2hfdGFibGVfc2l6ZTsKKwkJCQkJCWlmIChsdl9wdHItPgorCQkJCQkJ ICAgIGx2X2Jsb2NrX2V4Y2VwdGlvbiAhPQorCQkJCQkJICAgIE5VTEwpCisJCQkJCQkJbHZf YmxvY2tfZXhjZXB0aW9uX3RfYnl0ZXMKKwkJCQkJCQkgICAgKz0KKwkJCQkJCQkgICAgbHZf cHRyLT4KKwkJCQkJCQkgICAgbHZfcmVtYXBfZW5kOwogCQkJCQkJaWYgKGx2X3B0ci0+bHZf b3BlbiA+IDApIHsKIAkJCQkJCQlsdl9vcGVuX2NvdW50ZXIrKzsKLQkJCQkJCQlsdl9vcGVu X3RvdGFsICs9IGx2X3B0ci0+bHZfb3BlbjsKKwkJCQkJCQlsdl9vcGVuX3RvdGFsICs9CisJ CQkJCQkJICAgIGx2X3B0ci0+CisJCQkJCQkJICAgIGx2X29wZW47CiAJCQkJCQl9CiAJCQkJ CX0KIAkJCQl9CkBAIC0zODIsOCArNDQwLDcgQEAKIAkgICAybmQgdG8gZmlsbCB0aGUgbWFs bG9jZWQgYnVmZmVyICovCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQlzeiA9IDA7 Ci0JCXN6ICs9IHNwcmludGYoTFZNX1BST0NfQlVGLAotCQkJICAgICAgIkxWTSAiCisJCXN6 ICs9IHNwcmludGYoTFZNX1BST0NfQlVGLCAiTFZNICIKICNpZmRlZiBNT0RVTEUKIAkJCSAg ICAgICJtb2R1bGUiCiAjZWxzZQpAQCAtNDAxLDggKzQ1OCw3IEBACiAJCQkgICAgICBsdl9v cGVuX2NvdW50ZXIgPT0gMSA/ICIiIDogInMiKTsKIAkJaWYgKGx2X29wZW5fdG90YWwgPiAw KQogCQkJc3ogKz0gc3ByaW50ZihMVk1fUFJPQ19CVUYsCi0JCQkJICAgICAgIiAlZCB0aW1l cylcbiIsCi0JCQkJICAgICAgbHZfb3Blbl90b3RhbCk7CisJCQkJICAgICAgIiAlZCB0aW1l cylcbiIsIGx2X29wZW5fdG90YWwpOwogCQllbHNlCiAJCQlzeiArPSBzcHJpbnRmKExWTV9Q Uk9DX0JVRiwgIikiKTsKIAkJc3ogKz0gc3ByaW50ZihMVk1fUFJPQ19CVUYsCkBAIC00MTAs NyArNDY2LDggQEAKIAkJCSAgICAgIHZnX2NvdW50ZXIgKiBzaXplb2YodmdfdCkgKwogCQkJ ICAgICAgcHZfY291bnRlciAqIHNpemVvZihwdl90KSArCiAJCQkgICAgICBsdl9jb3VudGVy ICogc2l6ZW9mKGx2X3QpICsKLQkJCSAgICAgIHBlX3RfYnl0ZXMgKyBoYXNoX3RhYmxlX2J5 dGVzICsgbHZfYmxvY2tfZXhjZXB0aW9uX3RfYnl0ZXMgKyBzel9sYXN0LAorCQkJICAgICAg cGVfdF9ieXRlcyArIGhhc2hfdGFibGVfYnl0ZXMgKworCQkJICAgICAgbHZfYmxvY2tfZXhj ZXB0aW9uX3RfYnl0ZXMgKyBzel9sYXN0LAogCQkJICAgICAgbHZtX2lvcF92ZXJzaW9uKTsK IAogCQlzZWNvbmRzID0gQ1VSUkVOVF9USU1FIC0gbG9hZHRpbWU7CkBAIC00MjQsNDYgKzQ4 MSw3MCBAQAogCQl9CiAJCXN6ICs9IHNwcmludGYoTFZNX1BST0NfQlVGLCAiJWQ6JTAyZDol MDJkIGFjdGl2ZVxuIiwKIAkJCSAgICAgIChzZWNvbmRzICUgODY0MDApIC8gMzYwMCwKLQkJ CSAgICAgIChzZWNvbmRzICUgMzYwMCkgLyA2MCwKLQkJCSAgICAgIHNlY29uZHMgJSA2MCk7 CisJCQkgICAgICAoc2Vjb25kcyAlIDM2MDApIC8gNjAsIHNlY29uZHMgJSA2MCk7CiAKIAkJ aWYgKHZnX2NvdW50ZXIgPiAwKSB7CiAJCQlmb3IgKHYgPSAwOyB2IDwgQUJTX01BWF9WRzsg disrKSB7CiAJCQkJLyogdm9sdW1lIGdyb3VwICovCiAJCQkJaWYgKCh2Z19wdHIgPSB2Z1t2 XSkgIT0gTlVMTCkgewotCQkJCQlzeiArPSBfdmdfaW5mbyh2Z19wdHIsIExWTV9QUk9DX0JV Rik7CisJCQkJCXN6ICs9CisJCQkJCSAgICBfdmdfaW5mbyh2Z19wdHIsIExWTV9QUk9DX0JV Rik7CiAKIAkJCQkJLyogcGh5c2ljYWwgdm9sdW1lcyAqLwogCQkJCQlzeiArPSBzcHJpbnRm KExWTV9QUk9DX0JVRiwKIAkJCQkJCSAgICAgICJcbiAgUFYlcyAiLAotCQkJCQkJICAgICAg dmdfcHRyLT5wdl9jdXIgPT0gMSA/ICI6ICIgOiAiczoiKTsKKwkJCQkJCSAgICAgIHZnX3B0 ci0+cHZfY3VyID09CisJCQkJCQkgICAgICAxID8gIjogIiA6ICJzOiIpOwogCQkJCQljID0g MDsKLQkJCQkJZm9yIChwID0gMDsgcCA8IHZnX3B0ci0+cHZfbWF4OyBwKyspIHsKLQkJCQkJ CWlmICgocHZfcHRyID0gdmdfcHRyLT5wdltwXSkgIT0gTlVMTCkgewotCQkJCQkJCXN6ICs9 IF9wdl9pbmZvKHB2X3B0ciwgTFZNX1BST0NfQlVGKTsKKwkJCQkJZm9yIChwID0gMDsgcCA8 IHZnX3B0ci0+cHZfbWF4OworCQkJCQkgICAgIHArKykgeworCQkJCQkJaWYgKChwdl9wdHIg PQorCQkJCQkJICAgICB2Z19wdHItPnB2W3BdKSAhPQorCQkJCQkJICAgIE5VTEwpIHsKKwkJ CQkJCQlzeiArPQorCQkJCQkJCSAgICBfcHZfaW5mbworCQkJCQkJCSAgICAocHZfcHRyLAor CQkJCQkJCSAgICAgTFZNX1BST0NfQlVGKTsKIAogCQkJCQkJCWMrKzsKLQkJCQkJCQlpZiAo YyA8IHZnX3B0ci0+cHZfY3VyKQotCQkJCQkJCQlzeiArPSBzcHJpbnRmKExWTV9QUk9DX0JV RiwKLQkJCQkJCQkJCSAgICAgICJcbiAgICAgICAiKTsKKwkJCQkJCQlpZiAoYyA8CisJCQkJ CQkJICAgIHZnX3B0ci0+cHZfY3VyKQorCQkJCQkJCQlzeiArPQorCQkJCQkJCQkgICAgc3By aW50ZgorCQkJCQkJCQkgICAgKExWTV9QUk9DX0JVRiwKKwkJCQkJCQkJICAgICAiXG4gICAg ICAgIik7CiAJCQkJCQl9CiAJCQkJCX0KIAogCQkJCQkvKiBsb2dpY2FsIHZvbHVtZXMgKi8K IAkJCQkJc3ogKz0gc3ByaW50ZihMVk1fUFJPQ19CVUYsCiAJCQkJCQkgICAgICAiXG4gICAg TFYlcyAiLAotCQkJCQkJICAgICAgdmdfcHRyLT5sdl9jdXIgPT0gMSA/ICI6ICIgOiAiczoi KTsKKwkJCQkJCSAgICAgIHZnX3B0ci0+bHZfY3VyID09CisJCQkJCQkgICAgICAxID8gIjog IiA6ICJzOiIpOwogCQkJCQljID0gMDsKLQkJCQkJZm9yIChsID0gMDsgbCA8IHZnX3B0ci0+ bHZfbWF4OyBsKyspIHsKLQkJCQkJCWlmICgobHZfcHRyID0gdmdfcHRyLT5sdltsXSkgIT0g TlVMTCkgewotCQkJCQkJCXN6ICs9IF9sdl9pbmZvKHZnX3B0ciwgbHZfcHRyLCBMVk1fUFJP Q19CVUYpOworCQkJCQlmb3IgKGwgPSAwOyBsIDwgdmdfcHRyLT5sdl9tYXg7CisJCQkJCSAg ICAgbCsrKSB7CisJCQkJCQlpZiAoKGx2X3B0ciA9CisJCQkJCQkgICAgIHZnX3B0ci0+bHZb bF0pICE9CisJCQkJCQkgICAgTlVMTCkgeworCQkJCQkJCXN6ICs9CisJCQkJCQkJICAgIF9s dl9pbmZvCisJCQkJCQkJICAgICh2Z19wdHIsCisJCQkJCQkJICAgICBsdl9wdHIsCisJCQkJ CQkJICAgICBMVk1fUFJPQ19CVUYpOwogCQkJCQkJCWMrKzsKLQkJCQkJCQlpZiAoYyA8IHZn X3B0ci0+bHZfY3VyKQotCQkJCQkJCQlzeiArPSBzcHJpbnRmKExWTV9QUk9DX0JVRiwKLQkJ CQkJCQkJCSAgICAgICJcbiAgICAgICAgICIpOworCQkJCQkJCWlmIChjIDwKKwkJCQkJCQkg ICAgdmdfcHRyLT5sdl9jdXIpCisJCQkJCQkJCXN6ICs9CisJCQkJCQkJCSAgICBzcHJpbnRm CisJCQkJCQkJCSAgICAoTFZNX1BST0NfQlVGLAorCQkJCQkJCQkgICAgICJcbiAgICAgICAg ICIpOwogCQkJCQkJfQogCQkJCQl9Ci0JCQkJCWlmICh2Z19wdHItPmx2X2N1ciA9PSAwKSBz eiArPSBzcHJpbnRmKExWTV9QUk9DX0JVRiwgIm5vbmUiKTsKKwkJCQkJaWYgKHZnX3B0ci0+ bHZfY3VyID09IDApCisJCQkJCQlzeiArPQorCQkJCQkJICAgIHNwcmludGYoTFZNX1BST0Nf QlVGLAorCQkJCQkJCSAgICAibm9uZSIpOwogCQkJCQlzeiArPSBzcHJpbnRmKExWTV9QUk9D X0JVRiwgIlxuIik7CiAJCQkJfQogCQkJfQpAQCAtNDc0LDE0ICs1NTUsMTUgQEAKIAkJCXVu bG9ja19rZXJuZWwoKTsKIAkJCWlmIChidWYgPT0gTlVMTCkgewogCQkJCXN6ID0gMDsKLQkJ CQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXMgLSB2bWFsbG9jIGVycm9yIGF0IGxpbmUgJWRc biIsCisJCQkJcmV0dXJuIHNwcmludGYocGFnZSwKKwkJCQkJICAgICAgICIlcyAtIHZtYWxs b2MgZXJyb3IgYXQgbGluZSAlZFxuIiwKIAkJCQkJICAgICAgIGx2bV9uYW1lLCBfX0xJTkVf Xyk7CiAJCQl9CiAJCX0KIAkJc3pfbGFzdCA9IHN6OwogCX0KIAotIG91dDoKKyAgICAgIG91 dDoKIAlpZiAocG9zID4gc3ogLSAxKSB7CiAJCWxvY2tfa2VybmVsKCk7CiAJCXZmcmVlKGJ1 Zik7CkBAIC01MDEsMTEgKzU4MywxMyBAQAogLyoKICAqIHByb3ZpZGUgVkcgaW5mbyBmb3Ig cHJvYyBmaWxlc3lzdGVtIHVzZSAoZ2xvYmFsKQogICovCi1zdGF0aWMgaW50IF92Z19pbmZv KHZnX3QgKnZnX3B0ciwgY2hhciAqYnVmKSB7CitzdGF0aWMgaW50IF92Z19pbmZvKHZnX3Qg KiB2Z19wdHIsIGNoYXIgKmJ1ZikKK3sKIAlpbnQgc3ogPSAwOwogCWNoYXIgaW5hY3RpdmVf ZmxhZyA9ICcgJzsKIAotCWlmICghKHZnX3B0ci0+dmdfc3RhdHVzICYgVkdfQUNUSVZFKSkg aW5hY3RpdmVfZmxhZyA9ICdJJzsKKwlpZiAoISh2Z19wdHItPnZnX3N0YXR1cyAmIFZHX0FD VElWRSkpCisJCWluYWN0aXZlX2ZsYWcgPSAnSSc7CiAJc3ogPSBzcHJpbnRmKGJ1ZiwKIAkJ ICAgICAiXG5WRzogJWMlcyAgWyVkIFBWLCAlZCBMVi8lZCBvcGVuXSAiCiAJCSAgICAgIiBQ RSBTaXplOiAlZCBLQlxuIgpAQCAtNTE2LDEzICs2MDAsMTMgQEAKIAkJICAgICB2Z19wdHIt PnB2X2N1ciwKIAkJICAgICB2Z19wdHItPmx2X2N1ciwKIAkJICAgICB2Z19wdHItPmx2X29w ZW4sCi0JICAgICAJICAgICB2Z19wdHItPnBlX3NpemUgPj4gMSwKKwkJICAgICB2Z19wdHIt PnBlX3NpemUgPj4gMSwKIAkJICAgICB2Z19wdHItPnBlX3NpemUgKiB2Z19wdHItPnBlX3Rv dGFsID4+IDEsCiAJCSAgICAgdmdfcHRyLT5wZV90b3RhbCwKIAkJICAgICB2Z19wdHItPnBl X2FsbG9jYXRlZCAqIHZnX3B0ci0+cGVfc2l6ZSA+PiAxLAotCSAgICAgCSAgICAgdmdfcHRy LT5wZV9hbGxvY2F0ZWQsCisJCSAgICAgdmdfcHRyLT5wZV9hbGxvY2F0ZWQsCiAJCSAgICAg KHZnX3B0ci0+cGVfdG90YWwgLSB2Z19wdHItPnBlX2FsbG9jYXRlZCkgKgotCSAgICAgCSAg ICAgdmdfcHRyLT5wZV9zaXplID4+IDEsCisJCSAgICAgdmdfcHRyLT5wZV9zaXplID4+IDEs CiAJCSAgICAgdmdfcHRyLT5wZV90b3RhbCAtIHZnX3B0ci0+cGVfYWxsb2NhdGVkKTsKIAly ZXR1cm4gc3o7CiB9CkBAIC01MzEsMTAgKzYxNSwxMSBAQAogLyoKICAqIHByb3ZpZGUgTFYg aW5mbyBmb3IgcHJvYyBmaWxlc3lzdGVtIHVzZSAoZ2xvYmFsKQogICovCi1zdGF0aWMgaW50 IF9sdl9pbmZvKHZnX3QgKnZnX3B0ciwgbHZfdCAqbHZfcHRyLCBjaGFyICpidWYpIHsKK3N0 YXRpYyBpbnQgX2x2X2luZm8odmdfdCAqIHZnX3B0ciwgbHZfdCAqIGx2X3B0ciwgY2hhciAq YnVmKQorewogCWludCBzeiA9IDA7CiAJY2hhciBpbmFjdGl2ZV9mbGFnID0gJ0EnLCBhbGxv Y2F0aW9uX2ZsYWcgPSAnICcsCi0JCXN0cmlwZXNfZmxhZyA9ICcgJywgcndfZmxhZyA9ICcg JywgKmJhc2VuYW1lOworCSAgICBzdHJpcGVzX2ZsYWcgPSAnICcsIHJ3X2ZsYWcgPSAnICcs ICpiYXNlbmFtZTsKIAogCWlmICghKGx2X3B0ci0+bHZfc3RhdHVzICYgTFZfQUNUSVZFKSkK IAkJaW5hY3RpdmVfZmxhZyA9ICdJJzsKQEAgLTU0NywzNSArNjMyLDMzIEBACiAJc3RyaXBl c19mbGFnID0gJ0wnOwogCWlmIChsdl9wdHItPmx2X3N0cmlwZXMgPiAxKQogCQlzdHJpcGVz X2ZsYWcgPSAnUyc7Ci0Jc3ogKz0gc3ByaW50ZihidWYrc3osCisJc3ogKz0gc3ByaW50Zihi dWYgKyBzeiwKIAkJICAgICAgIlslYyVjJWMlYyIsCiAJCSAgICAgIGluYWN0aXZlX2ZsYWcs Ci0JIHJ3X2ZsYWcsCi0JCSAgICAgIGFsbG9jYXRpb25fZmxhZywKLQkJICAgICAgc3RyaXBl c19mbGFnKTsKKwkJICAgICAgcndfZmxhZywgYWxsb2NhdGlvbl9mbGFnLCBzdHJpcGVzX2Zs YWcpOwogCWlmIChsdl9wdHItPmx2X3N0cmlwZXMgPiAxKQotCQlzeiArPSBzcHJpbnRmKGJ1 ZitzeiwgIiUtMmQiLAotCQkJICAgICAgbHZfcHRyLT5sdl9zdHJpcGVzKTsKKwkJc3ogKz0g c3ByaW50ZihidWYgKyBzeiwgIiUtMmQiLCBsdl9wdHItPmx2X3N0cmlwZXMpOwogCWVsc2UK LQkJc3ogKz0gc3ByaW50ZihidWYrc3osICIgICIpOworCQlzeiArPSBzcHJpbnRmKGJ1ZiAr IHN6LCAiICAiKTsKIAogCS8qIEZJWE1FOiB1c2UgX2Jhc2VuYW1lICovCiAJYmFzZW5hbWUg PSBzdHJyY2hyKGx2X3B0ci0+bHZfbmFtZSwgJy8nKTsKLQlpZiAoIGJhc2VuYW1lID09IDAp IGJhc2VuYW1lID0gbHZfcHRyLT5sdl9uYW1lOwotCWVsc2UgICAgICAgICAgICAgICAgYmFz ZW5hbWUrKzsKLQlzeiArPSBzcHJpbnRmKGJ1ZitzeiwgIl0gJS0yNXMiLCBiYXNlbmFtZSk7 CisJaWYgKGJhc2VuYW1lID09IDApCisJCWJhc2VuYW1lID0gbHZfcHRyLT5sdl9uYW1lOwor CWVsc2UKKwkJYmFzZW5hbWUrKzsKKwlzeiArPSBzcHJpbnRmKGJ1ZiArIHN6LCAiXSAlLTI1 cyIsIGJhc2VuYW1lKTsKIAlpZiAoc3RybGVuKGJhc2VuYW1lKSA+IDI1KQotCQlzeiArPSBz cHJpbnRmKGJ1ZitzeiwKKwkJc3ogKz0gc3ByaW50ZihidWYgKyBzeiwKIAkJCSAgICAgICJc biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOwotCXN6ICs9IHNwcmludGYoYnVm K3N6LCAiJTlkIC8lLTZkICAgIiwKKwlzeiArPSBzcHJpbnRmKGJ1ZiArIHN6LCAiJTlkIC8l LTZkICAgIiwKIAkJICAgICAgbHZfcHRyLT5sdl9zaXplID4+IDEsCiAJCSAgICAgIGx2X3B0 ci0+bHZfc2l6ZSAvIHZnX3B0ci0+cGVfc2l6ZSk7CiAKIAlpZiAobHZfcHRyLT5sdl9vcGVu ID09IDApCi0JCXN6ICs9IHNwcmludGYoYnVmK3N6LCAiY2xvc2UiKTsKKwkJc3ogKz0gc3By aW50ZihidWYgKyBzeiwgImNsb3NlIik7CiAJZWxzZQotCQlzeiArPSBzcHJpbnRmKGJ1Zitz eiwgIiVkeCBvcGVuIiwKLQkJCSAgICAgIGx2X3B0ci0+bHZfb3Blbik7CisJCXN6ICs9IHNw cmludGYoYnVmICsgc3osICIlZHggb3BlbiIsIGx2X3B0ci0+bHZfb3Blbik7CiAKIAlyZXR1 cm4gc3o7CiB9CkBAIC01ODQsNyArNjY3LDggQEAKIC8qCiAgKiBwcm92aWRlIFBWIGluZm8g Zm9yIHByb2MgZmlsZXN5c3RlbSB1c2UgKGdsb2JhbCkKICAqLwotc3RhdGljIGludCBfcHZf aW5mbyhwdl90ICpwdiwgY2hhciAqYnVmKSB7CitzdGF0aWMgaW50IF9wdl9pbmZvKHB2X3Qg KiBwdiwgY2hhciAqYnVmKQorewogCWludCBzeiA9IDA7CiAJY2hhciBpbmFjdGl2ZV9mbGFn ID0gJ0EnLCBhbGxvY2F0aW9uX2ZsYWcgPSAnICc7CiAJY2hhciAqcHZfbmFtZSA9IE5VTEw7 CkBAIC01OTQsOSArNjc4LDExIEBACiAJYWxsb2NhdGlvbl9mbGFnID0gJ0EnOwogCWlmICgh KHB2LT5wdl9hbGxvY2F0YWJsZSAmIFBWX0FMTE9DQVRBQkxFKSkKIAkJYWxsb2NhdGlvbl9m bGFnID0gJ04nOwotCXB2X25hbWUgPSBzdHJjaHIocHYtPnB2X25hbWUrMSwnLycpOwotCWlm ICggcHZfbmFtZSA9PSAwKSBwdl9uYW1lID0gcHYtPnB2X25hbWU7Ci0JZWxzZSAgICAgICAg ICAgICAgIHB2X25hbWUrKzsKKwlwdl9uYW1lID0gc3RyY2hyKHB2LT5wdl9uYW1lICsgMSwg Jy8nKTsKKwlpZiAocHZfbmFtZSA9PSAwKQorCQlwdl9uYW1lID0gcHYtPnB2X25hbWU7CisJ ZWxzZQorCQlwdl9uYW1lKys7CiAJc3ogPSBzcHJpbnRmKGJ1ZiwKIAkJICAgICAiWyVjJWNd ICUtMjFzICU4ZCAvJS02ZCAgIgogCQkgICAgICIlOGQgLyUtNmQgICU4ZCAvJS02ZCIsCkBA IC02MDgsMTcgKzY5NCwxNyBAQAogCQkgICAgIHB2LT5wZV9hbGxvY2F0ZWQgKiBwdi0+cGVf c2l6ZSA+PiAxLAogCQkgICAgIHB2LT5wZV9hbGxvY2F0ZWQsCiAJCSAgICAgKHB2LT5wZV90 b3RhbCAtIHB2LT5wZV9hbGxvY2F0ZWQpICoKLQkJICAgICBwdi0+cGVfc2l6ZSA+PiAxLAot CQkgICAgIHB2LT5wZV90b3RhbCAtIHB2LT5wZV9hbGxvY2F0ZWQpOworCQkgICAgIHB2LT5w ZV9zaXplID4+IDEsIHB2LT5wZV90b3RhbCAtIHB2LT5wZV9hbGxvY2F0ZWQpOwogCXJldHVy biBzejsKIH0KIAotc3RhdGljIHZvaWQgX3Nob3dfdXVpZChjb25zdCBjaGFyICpzcmMsIGNo YXIgKmIsIGNoYXIgKmUpIHsKK3N0YXRpYyB2b2lkIF9zaG93X3V1aWQoY29uc3QgY2hhciAq c3JjLCBjaGFyICpiLCBjaGFyICplKQorewogCWludCBpOwogCiAJZS0tOwotCWZvcihpID0g MDsgKnNyYyAmJiAoYiAhPSBlKTsgaSsrKSB7Ci0JCWlmKGkgJiYgIShpICYgMHgzKSkKKwlm b3IgKGkgPSAwOyAqc3JjICYmIChiICE9IGUpOyBpKyspIHsKKwkJaWYgKGkgJiYgIShpICYg MHgzKSkKIAkJCSpiKysgPSAnLSc7CiAJCSpiKysgPSAqc3JjKys7CiAJfQo= --_===490049====selecktra.com===_-- --_===490053====selecktra.com===_--