From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Jnmpo-0005Hm-Qi for qemu-devel@nongnu.org; Sun, 20 Apr 2008 23:36:52 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Jnmpn-0005HD-C4 for qemu-devel@nongnu.org; Sun, 20 Apr 2008 23:36:52 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Jnmpn-0005H6-3q for qemu-devel@nongnu.org; Sun, 20 Apr 2008 23:36:51 -0400 Received: from hs-out-0708.google.com ([64.233.178.249]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Jnmpm-0005nP-6q for qemu-devel@nongnu.org; Sun, 20 Apr 2008 23:36:50 -0400 Received: by hs-out-0708.google.com with SMTP id k27so766130hsc.2 for ; Sun, 20 Apr 2008 20:36:49 -0700 (PDT) Message-ID: <9cde8bff0804202036w62cc553fhca142ec2731a3a8e@mail.gmail.com> Date: Mon, 21 Apr 2008 12:36:48 +0900 From: "Nguyen Anh Quynh" In-Reply-To: <9cde8bff0804202033p68524e8ag8503b5ba8ab89100@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_835_32186332.1208749009307" References: <9cde8bff0804202032k6bd44ac6td913c05410e6284@mail.gmail.com> <9cde8bff0804202033p68524e8ag8503b5ba8ab89100@mail.gmail.com> Subject: [Qemu-devel] Re: [RFC] linuxboot Option ROM for Linux kernel booting Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: kvm-devel@lists.sourceforge.net, qemu-devel@nongnu.org Cc: Anthony Liguori , "H. Peter Anvin" ------=_Part_835_32186332.1208749009307 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hmm, the last patch includes a binary. So please take this patch instead. Thanks, Q # diffstat linuxboot1.diff Makefile | 13 ++++- linuxboot/Makefile | 40 +++++++++++++++ linuxboot/boot.S | 54 +++++++++++++++++++++ linuxboot/farvar.h | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++ linuxboot/rom.c | 104 ++++++++++++++++++++++++++++++++++++++++ linuxboot/signrom.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++ linuxboot/util.h | 69 +++++++++++++++++++++++++++ qemu/Makefile | 3 - qemu/Makefile.target | 2 qemu/hw/linuxboot.c | 39 +++++++++++++++ qemu/hw/pc.c | 22 +++++++- qemu/hw/pc.h | 5 + 12 files changed, 600 insertions(+), 9 deletions(-) On Mon, Apr 21, 2008 at 12:33 PM, Nguyen Anh Quynh wrote: > Forget to say that this patch is against kvm-66. > > Thanks, > Q > > > > On Mon, Apr 21, 2008 at 12:32 PM, Nguyen Anh Quynh wrote: > > Hi, > > > > This should be submitted to upstream (but not to kvm-devel list), but > > this is only the test code that I want to quickly send out for > > comments. In case it looks OK, I will send it to upstream later. > > > > Inspired by extboot and conversations with Anthony and HPA, this > > linuxboot option ROM is a simple option ROM that intercepts int19 in > > order to execute linux setup code. This approach eliminates the need > > to manipulate the boot sector for this purpose. > > > > To test it, just load linux kernel with your KVM/QEMU image using > > -kernel option in normal way. > > > > I succesfully compiled and tested it with kvm-66 on Ubuntu 7.10, guest > > Ubuntu 8.04. > > > > Thanks, > > Quynh > > > > > > # diffstat linuxboot1.diff > > Makefile | 13 ++++- > > linuxboot/Makefile | 40 +++++++++++++++ > > linuxboot/boot.S | 54 +++++++++++++++++++++ > > linuxboot/farvar.h | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++ > > linuxboot/rom.c | 104 ++++++++++++++++++++++++++++++++++++++++ > > linuxboot/signrom |binary > > linuxboot/signrom.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++ > > linuxboot/util.h | 69 +++++++++++++++++++++++++++ > > qemu/Makefile | 3 - > > qemu/Makefile.target | 2 > > qemu/hw/linuxboot.c | 39 +++++++++++++++ > > qemu/hw/pc.c | 22 +++++++- > > qemu/hw/pc.h | 5 + > > 13 files changed, 600 insertions(+), 9 deletions(-) > > > ------=_Part_835_32186332.1208749009307 Content-Type: text/x-diff; name=linuxboot1.1.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_ffahydxh0 Content-Disposition: attachment; filename=linuxboot1.1.diff Y29tbWl0IGY0ZjExNzg4OThjOGE0YmJiYzBhNDMyMzU0ZGJjYzU2MzUzMDk5YzMKQXV0aG9yOiBO Z3V5ZW4gQW5oIFF1eW5oIDxhcXV5bmhAZ21haWwuY29tPgpEYXRlOiAgIE1vbiBBcHIgMjEgMTI6 Mjc6NDcgMjAwOCArMDkwMAoKICAgIExpbnV4Ym9vdCBPcHRpb24gUk9NIHN1cHBvcnQuCiAgICAK ICAgIFNpZ25lZC1vZmYtYnk6IE5ndXllbiBBbmggUXV5bmggPGFxdXluaEBnbWFpbC5jb20+Cgpk aWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA3NmMxNDlhLi5mZGQ5Mzg4IDEw MDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAgREVTVERJ Uj0KIAogcnBtcmVsZWFzZSA9IGRldmVsCiAKLS5QSE9OWToga2VybmVsIHVzZXIgbGlia3ZtIHFl bXUgYmlvcyB2Z2FiaW9zIGV4dGJvb3QgY2xlYW4gbGliZmR0CisuUEhPTlk6IGtlcm5lbCB1c2Vy IGxpYmt2bSBxZW11IGJpb3MgdmdhYmlvcyBleHRib290IGxpbnV4Ym9vdCBjbGVhbiBsaWJmZHQK IAogYWxsOiBsaWJrdm0gcWVtdQogaWZuZXEgJyQoZmlsdGVyICQoQVJDSCksIHg4Nl82NCBpMzg2 IGlhNjQpJyAnJwpAQCAtMTksNyArMTksNyBAQCBxZW11IGtlcm5lbCB1c2VyIGxpYmt2bToKIAog cWVtdTogbGlia3ZtCiBpZm5lcSAnJChmaWx0ZXIgJChBUkNIKSwgaTM4NiB4ODZfNjQpJyAnJwot ICAgIHFlbXU6IGV4dGJvb3QKKyAgICBxZW11OiBleHRib290IGxpbnV4Ym9vdAogZW5kaWYKIGlm bmVxICckKGZpbHRlciAkKEFSQ0gpLCBwb3dlcnBjKScgJycKICAgICBxZW11OiBsaWJmZHQKQEAg LTQxLDYgKzQxLDE0IEBAIGV4dGJvb3Q6CiAgICAgICAgICAgIHx8ICEgY21wIC1zIHFlbXUvcGMt Ymlvcy9leHRib290LmJpbiBleHRib290L2V4dGJvb3QuYmluOyB0aGVuIFwKIAkJY3AgZXh0Ym9v dC9leHRib290LmJpbiBxZW11L3BjLWJpb3MvZXh0Ym9vdC5iaW47IFwKIAlmaQorCitsaW51eGJv b3Q6CisJJChNQUtFKSAtQyAkQAorCWlmICEgWyAtZiBxZW11L3BjLWJpb3MvbGludXhib290LmJp biBdIFwKKyAgICAgICAgICAgfHwgISBjbXAgLXMgcWVtdS9wYy1iaW9zL2xpbnV4Ym9vdC5iaW4g bGludXhib290L2xpbnV4Ym9vdC5iaW47IHRoZW4gXAorCQljcCBsaW51eGJvb3QvbGludXhib290 LmJpbiBxZW11L3BjLWJpb3MvbGludXhib290LmJpbjsgXAorCWZpCisKIGxpYmZkdDoKIAkkKE1B S0UpIC1DICRACiAKQEAgLTg4LDYgKzk2LDcgQEAgc3JwbToKIAl0YXIgY3pmICQoUlBNVE9QRElS KS9TT1VSQ0VTL2tlcm5lbC50YXIuZ3oga2VybmVsCiAJdGFyIGN6ZiAkKFJQTVRPUERJUikvU09V UkNFUy9zY3JpcHRzLnRhci5neiBzY3JpcHRzCiAJdGFyIGN6ZiAkKFJQTVRPUERJUikvU09VUkNF Uy9leHRib290LnRhci5neiBleHRib290CisJdGFyIGN6ZiAkKFJQTVRPUERJUikvU09VUkNFUy9s aW51eGJvb3QudGFyLmd6IGxpbnV4Ym9vdAogCWNwIE1ha2VmaWxlIGNvbmZpZ3VyZSBrdm1fc3Rh dCAkKFJQTVRPUERJUikvU09VUkNFUwogCXJwbWJ1aWxkICAtLWRlZmluZT0iX3RvcGRpciAkKFJQ TVRPUERJUikiIC1icyAkKHRtcHNwZWMpCiAJJChSTSkgJCh0bXBzcGVjKQpkaWZmIC0tZ2l0IGEv bGludXhib290L01ha2VmaWxlIGIvbGludXhib290L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjNiYzg4YTYKLS0tIC9kZXYvbnVsbAorKysgYi9saW51eGJvb3Qv TWFrZWZpbGUKQEAgLTAsMCArMSw0MCBAQAorIyBNYWtlZmlsZSBmb3IgbGludXhib290IE9wdGlv biBST00KKyMgTmd1eWVuIEFuaCBRdXluaCA8YXF1eW5oQGdtYWlsLmNvbT4KKworQ0MgPSBnY2MK K0NDRkxBR1MgPSAtZyAtV2FsbCAtV2Vycm9yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZvbWl0 LWZyYW1lLXBvaW50ZXIgLU9zCisKK2NjLW9wdGlvbiA9ICQoc2hlbGwgaWYgdGVzdCAteiAiYCQo MSkgJCgyKSAtUyAtbyAvZGV2L251bGwgLXhjIFwKKyAgICAgICAgICAgICAgL2Rldi9udWxsIDI+ JjFgIjsgdGhlbiBlY2hvICIkKDIpIjsgZWxzZSBlY2hvICIkKDMpIjsgZmkgOykKK0NDRkxBR1Mg Kz0gJChjYWxsIGNjLW9wdGlvbiwkKENDKSwtbm9waWUsKQorQ0NGTEFHUyArPSAkKGNhbGwgY2Mt b3B0aW9uLCQoQ0MpLC1mbm8tc3RhY2stcHJvdGVjdG9yLCkKK0NDRkxBR1MgKz0gJChjYWxsIGNj LW9wdGlvbiwkKENDKSwtZm5vLXN0YWNrLXByb3RlY3Rvci1hbGwsKQorCitJTlNUQUxMRElSID0g L3Vzci9zaGFyZS9xZW11CisKKy5QSE9OWTogYWxsCithbGw6IGNsZWFuIGxpbnV4Ym9vdC5iaW4K KworLlBIT05ZOiBpbnN0YWxsCitpbnN0YWxsOiBsaW51eGJvb3QuYmluCisJY3AgbGludXhib290 LmJpbiAkKElOU1RBTExESVIpCisKKy5QSE9OWTogY2xlYW4KK2NsZWFuOgorCSQoUk0pICoubyAq LmltZyAqLmJpbiBzaWducm9tICp+CisKK2xpbnV4Ym9vdC5pbWc6IGJvb3QubyByb20ubworCSQo TEQpIC0tb2Zvcm1hdCBiaW5hcnkgLVR0ZXh0IDAgJF4gLW8gJEAgCisKK2xpbnV4Ym9vdC5iaW46 IGxpbnV4Ym9vdC5pbWcgc2lnbnJvbQorCS4vc2lnbnJvbSBsaW51eGJvb3QuaW1nIGxpbnV4Ym9v dC5iaW4KKworc2lnbnJvbTogc2lnbnJvbS5jCisJJChDQykgLW8gJEAgLWcgLVdhbGwgJF4KKwor JS5vOiAlLmMKKwkkKENDKSAkKENDRkxBR1MpIC1jICQ8CisKKyUubzogJS5TCisJJChDQykgJChD Q0ZMQUdTKSAtYyAkPAorCmRpZmYgLS1naXQgYS9saW51eGJvb3QvYm9vdC5TIGIvbGludXhib290 L2Jvb3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTQ2MWQ2Ci0tLSAv ZGV2L251bGwKKysrIGIvbGludXhib290L2Jvb3QuUwpAQCAtMCwwICsxLDU0IEBACisvKgorICog Ym9vdC5TCisgKiBMaW51eCBCb290IE9wdGlvbiBST00gZm9yIFFFTVUuCisKKyAqIENvcHlyaWdo dCAoQykgYnkgTmd1eWVuIEFuaCBRdXluaCA8YXF1eW5oQGdtYWlsLmNvbT4sIDIwMDguIAorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworCS50ZXh0CisJ LmNvZGUxNmdjYworCS5nbG9ibCBfc3RhcnQKKwkuZXh0ZXJuIHNldHVwCitfc3RhcnQ6CisJLnNo b3J0IDB4QUE1NQkJLyogUk9NIHNpZ25hdHVyZSAqLworCS5ieXRlIDAJCQkJLyogUk9NIHNpemUg LSB0byBiZSBwYXRjaGVkIGF0IGJ1aWx0LXRpbWUgKi8KKwkvKiBST00gZW50cnk6IGluaXRpYWxp emluZyAqLworCXB1c2hhbAorCS8qICVlcyBpcyBjbG9iYmVyZWQsIHNvIHNhdmUgaXQgKi8KKwlw dXNodyAlZXMKKyAgICAvKiBqdXN0IGluIGNhc2UgKi8KKwlwdXNodyAlZHMKKwljbGQKKwljYWxs IHNldHVwCQkvKiBjYWxsIEMgY29kZSAqLworCXBvcHcgICVkcworCXBvcHcgICVlcworCXBvcGFs CisJbHJldHcKKworCS8qIGludGVycnVwdCAxOSBoYW5kbGVyICovCisJLmdsb2JsIGludDE5X2hh bmRsZXIKKwkuZXh0ZXJuIGludDE5X2hhbmRsZXJfQworCS5leHRlcm4gbGludXhfYm9vdAorCWlu dDE5X2hhbmRsZXI6CisJLyogd2UgbmV2ZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgaW50MTksIHNv IG5vIG5lZWQgdG8gY2FyZQorCSAqIGFib3V0IGNsb2JiZXJlZCByZWdpc3RlcnMgOi0pICovCisJ LyogU2V0ICVkcyA9ICVzcyAqLworCW1vdncgJXNzLCAlYXgKKwltb3Z3ICVheCwgJWRzCisJY2xk CisJY2FsbCBpbnQxOV9oYW5kbGVyX0MJLyogY2FsbCBDIGNvZGUgKi8KKwkvKiB3ZSBhY3R1YWxs eSBqdW1wIHRvIGxpbnV4IGtlcm5lbCBzZXR1cCwgc28gbmV2ZXIgcmVhY2ggaGVyZSAqLwpkaWZm IC0tZ2l0IGEvbGludXhib290L2ZhcnZhci5oIGIvbGludXhib290L2ZhcnZhci5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NzYxODYKLS0tIC9kZXYvbnVsbAorKysgYi9s aW51eGJvb3QvZmFydmFyLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBmYXJ2YXIuaAorICog Q29kZSB0byBhY2Nlc3MgbXVsdGlwbGUgc2VnbWVudHMgd2l0aGluIGdjYy4KKyAqCisgKiBDb3B5 cmlnaHQgKEMpIDIwMDggIEtldmluIE8nQ29ubm9yIDxrZXZpbkBrb2Nvbm5vci5uZXQ+CisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0 aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9f RkFSVkFSX0gKKyNkZWZpbmUgX19GQVJWQVJfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8v IER1bW15IGRlZmluaXRpb25zIHVzZWQgdG8gbWFrZSBzdXJlIGdjYyB1bmRlcnN0YW5kcyBkZXBl bmRlbmNpZXMKKy8vIGJldHdlZW4gU0VUX1NFRyBhbmQgR0VUL1JFQUQvV1JJVEVfU0VHIG1hY3Jv cy4KK2V4dGVybiB1aW50MTZfdCBfX3NlZ21lbnRfQ1MsIF9fc2VnbWVudF9EUywgX19zZWdtZW50 X0VTLCBfX3NlZ21lbnRfU1M7CitleHRlcm4gdWludDE2X3QgX19zZWdtZW50X0dTLCBfX3NlZ21l bnRfRlM7CisKKy8vIExvdyBsZXZlbCBtYWNyb3MgZm9yIHJlYWRpbmcvd3JpdGluZyBtZW1vcnkg dmlhIGEgc2VnbWVudCBzZWxlY3Rvci4KKyNkZWZpbmUgX19SRUFEOF9TRUcoU0VHLCB2YXIpICh7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJdHlwZW9mKHZhcikgX192YWx1ZTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX19hc21fXygibW92YiAlJSIgI1NFRyAi OiUxLCAlYjAiIDogIj1RaSIoX192YWx1ZSkgIFwKKwkJCTogIm0iKHZhciksICJtIihfX3NlZ21l bnRfICMjIFNFRykpOyAgICAgICAgICAgIFwKKwkJX192YWx1ZTsgfSkKKyNkZWZpbmUgX19SRUFE MTZfU0VHKFNFRywgdmFyKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJdHlwZW9m KHZhcikgX192YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX19hc21f XygibW92dyAlJSIgI1NFRyAiOiUxLCAldzAiIDogIj1yaSIoX192YWx1ZSkgIFwKKwkJCTogIm0i KHZhciksICJtIihfX3NlZ21lbnRfICMjIFNFRykpOyAgICAgICAgICAgIFwKKwkJX192YWx1ZTsg fSkKKyNkZWZpbmUgX19SRUFEMzJfU0VHKFNFRywgdmFyKSAoeyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKwkJdHlwZW9mKHZhcikgX192YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKwkJX19hc21fXygibW92bCAlJSIgI1NFRyAiOiUxLCAlMCIgOiAiPXJpIihfX3Zh bHVlKSAgIFwKKwkJCTogIm0iKHZhciksICJtIihfX3NlZ21lbnRfICMjIFNFRykpOyAgICAgICAg ICAgIFwKKwkJX192YWx1ZTsgfSkKKworI2RlZmluZSBfX1dSSVRFOF9TRUcoU0VHLCB2YXIsIHZh bHVlKSAgICAgICAgICAgICAgICAgICAgICAgXAorCV9fYXNtX18oIm1vdmIgJWIxLCAlJSIgI1NF RyAiOiUwIiA6ICI9bSIodmFyKSAgICAgICAgICAgXAorCQkJOiAiUSIodmFsdWUpLCAibSIoX19z ZWdtZW50XyAjIyBTRUcpKQorI2RlZmluZSBfX1dSSVRFMTZfU0VHKFNFRywgdmFyLCB2YWx1ZSkg ICAgICAgICAgICAgICAgICAgICAgXAorCV9fYXNtX18oIm1vdncgJXcxLCAlJSIgI1NFRyAiOiUw IiA6ICI9bSIodmFyKSAgICAgICAgICAgXAorCQkJOiAiciIodmFsdWUpLCAibSIoX19zZWdtZW50 XyAjIyBTRUcpKQorI2RlZmluZSBfX1dSSVRFMzJfU0VHKFNFRywgdmFyLCB2YWx1ZSkgICAgICAg ICAgICAgICAgICAgICAgXAorCV9fYXNtX18oIm1vdmwgJTEsICUlIiAjU0VHICI6JTAiIDogIj1t Iih2YXIpICAgICAgICAgICAgXAorCQkJOiAiciIodmFsdWUpLCAibSIoX19zZWdtZW50XyAjIyBT RUcpKQorCisvLyBMb3cgbGV2ZWwgbWFjcm9zIGZvciBnZXR0aW5nL3NldHRpbmcgYSBzZWdtZW50 IHJlZ2lzdGVyLgorI2RlZmluZSBfX1NFVF9TRUcoU0VHLCB2YWx1ZSkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKwlfX2FzbV9fKCJtb3Z3ICV3MSwgJSUiICNTRUcgOiAiPW0i KF9fc2VnbWVudF8gIyMgU0VHKSAgICAgICBcCisJCQk6ICJyIih2YWx1ZSkpCisjZGVmaW5lIF9f R0VUX1NFRyhTRUcpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor CQl1aW50MTZfdCBfX3NlZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKwkJX19hc21fXygibW92dyAlJSIgI1NFRyAiLCAldzAiIDogIj1yIihfX3NlZykgICAgICAg ICAgICBcCisJCQk6ICJtIihfX3NlZ21lbnRfICMjIFNFRykpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorCQlfX3NlZzt9KQorCisvLyBNYWNyb3MgZm9yIGF1dG9tYXRpY2FsbHkgY2hvb3Np bmcgdGhlIGFwcHJvcHJpYXRlIG1lbW9yeSBzaXplCisvLyBhY2Nlc3MgbWV0aG9kLgorZXh0ZXJu IHZvaWQgX19mb3JjZV9saW5rX2Vycm9yX191bmtub3duX3R5cGUoKTsKKworI2RlZmluZSBfX0dF VF9WQVIoc2VnLCB2YXIpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorCQl0eXBlb2YodmFyKSBfX3ZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorCQlpZiAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBl b2YoX192YWwpLCB1aW50OF90KSAgICAgICAgXAorCQkJfHwgX19idWlsdGluX3R5cGVzX2NvbXBh dGlibGVfcCh0eXBlb2YoX192YWwpLCBpbnQ4X3QpKSAgICAgXAorCQlfX3ZhbCA9IF9fUkVBRDhf U0VHKHNlZywgdmFyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQllbHNl IGlmIChfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZihfX3ZhbCksIHVpbnQxNl90 KSAgXAorCQkJfHwgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoX192YWwpLCBp bnQxNl90KSkgICAgXAorCQlfX3ZhbCA9IF9fUkVBRDE2X1NFRyhzZWcsIHZhcik7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorCQllbHNlIGlmIChfX2J1aWx0aW5fdHlwZXNfY29t cGF0aWJsZV9wKHR5cGVvZihfX3ZhbCksIHVpbnQzMl90KSAgXAorCQkJfHwgX19idWlsdGluX3R5 cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoX192YWwpLCBpbnQzMl90KSkgICAgXAorCQlfX3ZhbCA9 IF9fUkVBRDMyX1NFRyhzZWcsIHZhcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorCQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorCQlfX2ZvcmNlX2xpbmtfZXJyb3JfX3Vua25vd25fdHlwZSgpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlfX3ZhbDsgfSkKKworI2RlZmluZSBfX1NFVF9W QVIoc2VnLCB2YXIsIHZhbCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorCWlmIChfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZih2YXIpLCB1aW50OF90 KSAgICAgICAgICAgICAgXAorCQkJfHwgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBl b2YodmFyKSwgaW50OF90KSkgICAgICAgXAorCV9fV1JJVEU4X1NFRyhzZWcsIHZhciwgKHZhbCkp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWVsc2UgaWYgKF9fYnVp bHRpbl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKHZhciksIHVpbnQxNl90KSAgICAgICAgXAor CQkJfHwgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YodmFyKSwgaW50MTZfdCkp ICAgICAgXAorCV9fV1JJVEUxNl9TRUcoc2VnLCB2YXIsICh2YWwpKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorCWVsc2UgaWYgKF9fYnVpbHRpbl90eXBlc19jb21wYXRp YmxlX3AodHlwZW9mKHZhciksIHVpbnQzMl90KSAgICAgICAgXAorCQkJfHwgX19idWlsdGluX3R5 cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YodmFyKSwgaW50MzJfdCkpICAgICAgXAorCV9fV1JJVEUz Ml9TRUcoc2VnLCB2YXIsICh2YWwpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorCV9fZm9yY2VfbGlua19lcnJvcl9fdW5rbm93bl90eXBlKCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworLy8gTWFj cm9zIGZvciBjb252ZXJ0aW5nIHRvL2Zyb20gMzJiaXQgc3R5bGUgcG9pbnRlcnMgdG8gdGhlaXIK Ky8vIGVxdWl2YWxlbnQgMTZiaXQgc2VnbWVudC9vZmZzZXQgdmFsdWVzLgorI2RlZmluZSBGQVJQ VFJfVE9fU0VHKHApICgoKHUzMikocCkpID4+IDQpCisjZGVmaW5lIEZBUlBUUl9UT19PRkZTRVQo cCkgKCgodTMyKShwKSkgJiAweGYpCisjZGVmaW5lIE1BS0VfRkFSUFRSKHNlZyxvZmYpICgodm9p ZCopKCgoc2VnKTw8NCkrKG9mZikpKQorCisvLyBNYWNyb3MgZm9yIGFjY2Vzc2luZyBhIHZhcmlh YmxlIGluIGFub3RoZXIgc2VnbWVudC4gIChUaGV5CisvLyBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0 aGUgJWVzIHNlZ21lbnQgYW5kIHRoZW4gbWFrZSB0aGUgYXBwcm9wcmlhdGUKKy8vIGFjY2Vzcy4p CisjZGVmaW5lIF9fR0VUX0ZBUlZBUihzZWcsIHZhcikgKHsgICAgICAgICAgICAgICBcCisJCVNF VF9TRUcoRVMsIChzZWcpKTsgICAgICAgICAgICAgICAgICAgICBcCisJCUdFVF9WQVIoRVMsICh2 YXIpKTsgfSkKKworI2RlZmluZSBfX1NFVF9GQVJWQVIoc2VnLCB2YXIsIHZhbCkgZG8geyAgICAg ICAgXAorCXR5cGVvZih2YXIpIF9fc2Z2X3ZhbCA9ICh2YWwpOyAgICAgICAgICAgICAgXAorCVNF VF9TRUcoRVMsIChzZWcpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCVNFVF9WQVIoRVMs ICh2YXIpLCBfX3Nmdl92YWwpOyAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmlu ZSBHRVRfRkFSVkFSKHNlZywgdmFyKSBfX0dFVF9GQVJWQVIoKHNlZyksICh2YXIpKQorI2RlZmlu ZSBTRVRfRkFSVkFSKHNlZywgdmFyLCB2YWwpIF9fU0VUX0ZBUlZBUigoc2VnKSwgKHZhciksICh2 YWwpKQorCisjZGVmaW5lIEdFVF9WQVIoc2VnLCB2YXIpIF9fR0VUX1ZBUihzZWcsICh2YXIpKQor I2RlZmluZSBTRVRfVkFSKHNlZywgdmFyLCB2YWwpIF9fU0VUX1ZBUihzZWcsICh2YXIpLCAodmFs KSkKKworI2RlZmluZSBTRVRfU0VHKFNFRywgdmFsdWUpIF9fU0VUX1NFRyhTRUcsICh2YWx1ZSkp CisjZGVmaW5lIEdFVF9TRUcoU0VHKSBfX0dFVF9TRUcoU0VHKQorCisjZW5kaWYKZGlmZiAtLWdp dCBhL2xpbnV4Ym9vdC9yb20uYyBiL2xpbnV4Ym9vdC9yb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi40Y2Q2MDBkCi0tLSAvZGV2L251bGwKKysrIGIvbGludXhib290L3Jv bS5jCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogcm9tLmMKKyAqIExpbnV4IEJvb3QgT3B0aW9u IFJPTSBmb3IgUUVNVS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIGJ5IE5ndXllbiBBbmggUXV5bmgg PGFxdXluaEBnbWFpbC5jb20+LCAyMDA4LiAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIg b2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv dW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZmFydmFy LmgiCisKK2FzbSAoIi5jb2RlMTZnY2MiKTsKKworc3RydWN0IGxpbnV4Ym9vdF9pbmZvIHsKKwl1 aW50MTZfdCBjczsJCS8qIENTIHNlZ21lbnQgKi8KKwl1aW50MTZfdCBkczsJCS8qIERTIHNlZ21l bnQgKi8KKwl1aW50MTZfdCBzcDsJCS8qIFNQIHJlZyAqLworfTsKKworI2RlZmluZSBMSU5VWEJP T1RfUE9SVCAweDQwNworCitzdHJ1Y3QgaXZlY3RvciB7CisJdWludDE2X3Qgb2Zmc2V0OworCXVp bnQxNl90IHNlZ21lbnQ7Cit9OworLyogbWFuaXB1bGF0ZSBpbnRlcnJ1cHQgdmVjdG9yIGVudHJ5 ICovCisjZGVmaW5lIEdFVF9JVlRfRU5UUlkoaW5kZXgsdmFyKSBcCisgICAgR0VUX0ZBUlZBUigw LCAoKHN0cnVjdCBpdmVjdG9yICopKGluZGV4KnNpemVvZihzdHJ1Y3QgaXZlY3RvcikpKS0+dmFy KQorI2RlZmluZSBTRVRfSVZUX0VOVFJZKGluZGV4LHZhcix2YWx1ZSkgXAorICAgIFNFVF9GQVJW QVIoMCwgKChzdHJ1Y3QgaXZlY3RvciAqKShpbmRleCpzaXplb2Yoc3RydWN0IGl2ZWN0b3IpKSkt PnZhciwgdmFsdWUpCisKKy8qIGNhbGxlZCBmcm9tIEFTTSBjb2RlIGluIGJvb3QuUyAqLwordm9p ZCBzZXR1cCgpCit7CisJLyogaW5zdGFsbCBvdXIgSU5UIDE5IGhhbmRsZXIgKi8KKwlleHRlcm4g dm9pZCBpbnQxOV9oYW5kbGVyOworCVNFVF9JVlRfRU5UUlkoMHgxOSwgc2VnbWVudCwgR0VUX1NF RyhDUykpOworCVNFVF9JVlRfRU5UUlkoMHgxOSwgb2Zmc2V0LCAodWludDE2X3QpJmludDE5X2hh bmRsZXIpOworfQorCisvKiBzZW5kIGNvbW1hbmQgdG8gUUVNVSB2aWEgYSBkZWRpY2F0ZWQgSU8g cG9ydCAqLworc3RhdGljIHZvaWQgZ2V0X2xpbnV4Ym9vdF9pbmZvKHN0cnVjdCBsaW51eGJvb3Rf aW5mbyAqaW5mbykKK3sKKwl1aW50MTZfdCBzZWc7CisJY2hhciB0bXBbMTYgKyBzaXplb2YoKmlu Zm8pXSwgKnA7CisKKwkvKiBhbGlnbiB0byAxNiAqLworCXAgPSAoY2hhciAqKSgoKHVpbnQzMl90 KXRtcCArIDB4RikgJiB+MHhGKTsKKwltZW1jcHkocCwgaW5mbywgc2l6ZW9mKCppbmZvKSk7CisK KwkvKiBzZW5kIHNlZ21lbnQgY29udGFpbmVkIGluZm8gdG8gUUVNVSAqLworCXNlZyA9ICgodWlu dDMyX3QpcCA+PiA0KSArIEdFVF9TRUcoU1MpOworCW91dHcoc2VnLCBMSU5VWEJPT1RfUE9SVCk7 CisKKwkvKiBub3cgY29weSBiYWNrIHRoZSByZXN1bHQgdG8gaW5mbyAqLworCW1lbWNweShpbmZv LCBwLCBzaXplb2YoKmluZm8pKTsKK30KKworLyogYm9vdCBsaW51eCBieSBqbXAgdG8gaXRzIGtl cm5lbCBzZXR1cCBjb2RlICovCitzdGF0aWMgdm9pZCBib290X2xpbnV4KHVpbnQxNl90IGNzLCB1 aW50MTZfdCBkcywgdWludDE2X3Qgc3ApCit7CisJYXNtIHZvbGF0aWxlICgKKwkJCSJjbGkgICAg ICAgICAgICAgXG4iCisJCQkiY2xkICAgICAgICAgICAgIFxuIgorCQkJLyogc2V0dXAgcmVnaXN0 ZXJzIGZvciBrZXJuZWwgc2V0dXAgKi8KKwkJCSJtb3Z3ICUwLCAlJWRzICAgXG4iCisJCQkibW92 dyAlMCwgJSVlcyAgIFxuIgorCQkJIm1vdncgJTAsICUlZnMgICBcbiIKKwkJCSJtb3Z3ICUwLCAl JWdzICAgXG4iCisJCQkibW92dyAlMCwgJSVzcyAgIFxuIgorCQkJIm1vdncgJTIsICUlc3AgICBc biIKKwkJCS8qIHB1c2ggQ1M6SVAgKi8KKwkJCSJwdXNodyAlMSAgICAgICAgXG4iCisJCQkicHVz aHcgJDAgICAgICAgIFxuIgorCQkJLyogbm93IChpbXBsaWNpdGx5KSBqdW1wIHRvIENTOklQICov CisJCQkibHJldHcgICAgICAgICAgIFxuIgorCQkJOgorCQkJOiAicm0iIChkcyksICJybSIgKGNz KSwgInJtIiAoc3ApCisJKTsKK30KKworLyogaG9vayBJTlQgMTMgKi8KKy8qIGNhbGxlZCBmcm9t IEFTTSBjb2RlIGluIGJvb3QuUyAqLwordm9pZCBpbnQxOV9oYW5kbGVyX0MoKQoreworCXN0cnVj dCBsaW51eGJvb3RfaW5mbyBpbmZvOworCisJZ2V0X2xpbnV4Ym9vdF9pbmZvKCZpbmZvKTsKKwor CWJvb3RfbGludXgoaW5mby5jcywgaW5mby5kcywgaW5mby5zcCk7Cit9CmRpZmYgLS1naXQgYS9s aW51eGJvb3Qvc2lnbnJvbS5jIGIvbGludXhib290L3NpZ25yb20uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4yZjJhNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGludXhib290 L3NpZ25yb20uYwpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIEV4dGVuZGVkIEJvb3QgT3B0aW9u IFJPTQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAq IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICog Q29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAwNworICogICBBdXRob3JzOiBBbnRob255IExp Z3VvcmkgPGFsaWd1b3JpQHVzLmlibS5jb20+CisgKgorICogQ29weXJpZ2h0IGJ5IE5ndXllbiBB bmggUXV5bmggPGFxdXluaEBnbWFpbC5jb20+LCAyMDA4LgorICovCisKKyNpbmNsdWRlIDxzdGRp by5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUg PHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+ CisKKyNkZWZpbmUgQkxPQ0sgNTEyCisKK3N0YXRpYyBsb25nIGdldF9maWxlX3NpemUoRklMRSAq ZikKK3sKKwlsb25nIHdoZXJlLCBzaXplOworCisJd2hlcmUgPSBmdGVsbChmKTsKKwlmc2Vlayhm LCAwLCBTRUVLX0VORCk7CisJc2l6ZSA9IGZ0ZWxsKGYpOworCWZzZWVrKGYsIHdoZXJlLCBTRUVL X1NFVCk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQoreworCUZJTEUgKmZpbiwgKmZvdXQ7CisJY2hhciBidWZmZXJbQkxPQ0tdOworCWludCBp LCBqLCBzaXplOworCWxvbmcgcm9tX3NpemU7CisKKwl1aW50OF90IHN1bSA9IDA7CisKKwlpZiAo YXJnYyAhPSAzKSB7CisJCXByaW50ZigiVXNhZ2U6ICVzIDxST00+IDxPVVRQVVQ+XG4iLCBhcmd2 WzBdKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZmluID0gZm9wZW4oYXJndlsxXSwgInJiIik7CisJ Zm91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3YiIpOworCisJaWYgKGZpbiA9PSBOVUxMIHx8IGZvdXQg PT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIGlucHV0L291dHB1 dCBmaWxlc1xuIik7CisJCXJldHVybiAxOworCX0KKworCXJvbV9zaXplID0gZ2V0X2ZpbGVfc2l6 ZShmaW4pOworCWlmIChyb21fc2l6ZSA9PSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6 IFJPTSBzaXplID0gMD9cbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBzZXQgcm9tX3NpemUg dG8gYmxvY2tzIG9mIDUxMiBieXRlcyAqLworCXJvbV9zaXplID0gKHJvbV9zaXplLzUxMikgKyAx OworCisJLyogcmVhZCBhbGwgZGF0YSBpbiBST00gaW1hZ2UsIGV4Y2VwdCB0aGUgbGFzdCBibG9j ayAqLworCWZvciAoaSA9IDA7IGkgPCByb21fc2l6ZSAtIDE7IGkgKyspIHsKKwkJbWVtc2V0KGJ1 ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOworCisJCXNpemUgPSBmcmVhZChidWZmZXIsIEJMT0NL LCAxLCBmaW4pOworCQlpZiAoc2l6ZSA9PSAxKSB7CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJLyog Zmlyc3QgYmxvY2ssIGxldHMgc2V0IFJPTSBzaXplICovCisJCQkJYnVmZmVyWzJdID0gKHVpbnQ4 X3Qpcm9tX3NpemU7CisJCQl9CisKKwkJCWZvciAoaiA9IDA7IGogPCBCTE9DSzsgaisrKQorCQkJ CXN1bSArPSBidWZmZXJbal07CisKKwkJCWlmIChmd3JpdGUoYnVmZmVyLCBCTE9DSywgMSwgZm91 dCkgIT0gMSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiV3JpdGUgZmFpbGVkXG4iKTsKKwkJCQly ZXR1cm4gMTsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVk IHRvIHJlYWQgZnJvbSBpbnB1dCBmaWxlXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJ Lyogbm93IHJlYWQgbGFzdCBibG9jayBvZiBST00gaW1hZ2UgKi8KKwltZW1zZXQoYnVmZmVyLCAw LCBzaXplb2YoYnVmZmVyKSk7CisJc2l6ZSA9IGZyZWFkKGJ1ZmZlciwgMSwgQkxPQ0ssIGZpbik7 CisJaWYgKGZlcnJvcihmaW4pKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJlYWQg ZnJvbSBpbnB1dCBmaWxlXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHJvbV9zaXplID09 IDEpCisJCS8qIHNldCBST00gc2l6ZSAqLworCQlidWZmZXJbMl0gPSAodWludDhfdClyb21fc2l6 ZTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCXN1bSArPSBidWZmZXJbaV07CisK KwkvKiBzZXQgY2hlY2tzdW0gaW4gZmluYWwgYnl0ZSAqLworCWJ1ZmZlcltCTE9DSyAtIDFdID0g LXN1bTsKKworCWlmIChmd3JpdGUoYnVmZmVyLCBCTE9DSywgMSwgZm91dCkgIT0gMSkgeworCQlm cHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byB3cml0ZSB0byBvdXRwdXQgZmlsZVxuIik7CisJCXJl dHVybiAxOworCX0KKworCWZjbG9zZShmaW4pOworCWZjbG9zZShmb3V0KTsKKworCXJldHVybiAw OworfQpkaWZmIC0tZ2l0IGEvbGludXhib290L3V0aWwuaCBiL2xpbnV4Ym9vdC91dGlsLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4NTlkOAotLS0gL2Rldi9udWxsCisr KyBiL2xpbnV4Ym9vdC91dGlsLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIHV0aWwuaAorICoK KyAqIENvcHlyaWdodCAoQykgMjAwOCwgTmd1eWVuIEFuaCBRdXluaCA8YXF1eW5oQGdtYWlsLmNv bT4KKyAqCisgKiBTb21lIGNvZGUgaXMgbGlmdGVkIGZyb20gdGhlIGxlZ2FjeWJpb3MgcHJvamVj dCBieSBLZXZpbiBPJ0Nvbm5vciAoaHR0cDovL3d3dy5saW51eHRvZ28ub3JnL35rZXZpbi8pCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm IF9fVVRJTF9IX18KKyNkZWZpbmUgX19VVElMX0hfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisK K3N0YXRpYyBpbmxpbmUgdm9pZCBvdXR3KHVpbnQxNl90IHZhbHVlLCB1aW50MTZfdCBwb3J0KQor eworCWFzbSB2b2xhdGlsZSgib3V0dyAldzAsICV3MSIgOiA6ICJhIih2YWx1ZSksICJOZCIocG9y dCkpOworfQorCisjZGVmaW5lIFVSRUcoRVIsIFIsIFJILCBSTCkgdW5pb24geyB1aW50MzJfdCBF UjsgCVwKKwlzdHJ1Y3QgeyB1aW50MTZfdCBSOyB1aW50MTZfdCBSICMjIF9oaTsgfTsJXAorCXN0 cnVjdCB7CVwKKwkJdWludDhfdCBSTDsJXAorCQl1aW50OF90IFJIOwlcCisJCXVpbnQ4X3QgUiAj IyBfaGlsbzsJXAorCQl1aW50OF90IFIgIyMgX2hpaGk7CVwKKwl9OwlcCit9CisKKy8qIFNldCBv ZiByZWdpc3RlcnMgcGFzc2VkIHRvIElOVCAxMyBoYW5kbGVyLgorICogVGhlc2UgcmVnaXN0ZXJz IGNhbiBiZSBtb2RpZmllZCBvbiByZXR1cm4uICovCitzdHJ1Y3QgaXJlZ3MgeworCXVpbnQxNl90 IGRzOworCXVpbnQxNl90IGVzOworCVVSRUcoZWRpLCBkaSwgZGlfaGksIGRpX2xvKTsKKwlVUkVH KGVzaSwgc2ksIHNpX2hpLCBzaV9sbyk7CisJVVJFRyhlYngsIGJ4LCBiaCwgYmwpOworCVVSRUco ZWR4LCBkeCwgZGgsIGRsKTsKKwlVUkVHKGVjeCwgY3gsIGNoLCBjbCk7CisJVVJFRyhlYXgsIGF4 LCBhaCwgYWwpOworCXVpbnQxNl90IGlwOworCXVpbnQxNl90IGNzOworCXVpbnQxNl90IGZsYWdz OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGlubGluZSB2b2lkICptZW1j cHkodm9pZCAqIGRlc3QsIHZvaWQgKnNyYywgdW5zaWduZWQgaW50IGNvdW50KQoreworCWNoYXIg KnRtcCA9IChjaGFyICopZGVzdCwgKnMgPSAoY2hhciAqKXNyYzsKKworCXdoaWxlIChjb3VudC0t KQorCQkqdG1wKysgPSAqcysrOworCisJcmV0dXJuIGRlc3Q7Cit9CisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvcWVtdS9NYWtlZmlsZSBiL3FlbXUvTWFrZWZpbGUKaW5kZXggYTMwNTRiNC4uMzcyMmI1 ZSAxMDA2NDQKLS0tIGEvcWVtdS9NYWtlZmlsZQorKysgYi9xZW11L01ha2VmaWxlCkBAIC0xOTUs NyArMTk1LDcgQEAgZW5kaWYKIAlta2RpciAtcCAiJChERVNURElSKSQoZGF0YWRpcikiCiAJc2V0 IC1lOyBmb3IgeCBpbiBiaW9zLmJpbiB2Z2FiaW9zLmJpbiB2Z2FiaW9zLWNpcnJ1cy5iaW4gcHBj X3JvbS5iaW4gXAogCQl2aWRlby54IG9wZW5iaW9zLXNwYXJjMzIgcHhlLW5lMmtfcGNpLmJpbiBc Ci0JCXB4ZS1ydGw4MTM5LmJpbiBweGUtcGNuZXQuYmluIHB4ZS1lMTAwMC5iaW4gZXh0Ym9vdC5i aW4gXAorCQlweGUtcnRsODEzOS5iaW4gcHhlLXBjbmV0LmJpbiBweGUtZTEwMDAuYmluIGV4dGJv b3QuYmluIGxpbnV4Ym9vdC5iaW4gXAogCQliYW1ib28uZHRiOyBcCiAgICAgICAgIGRvIFwKIAkJ JChJTlNUQUxMKSAtbSA2NDQgJChTUkNfUEFUSCkvcGMtYmlvcy8kJHggIiQoREVTVERJUikkKGRh dGFkaXIpIjsgXApAQCAtMzAyLDYgKzMwMiw3IEBAIHRhcmJpbjoKIAkkKGRhdGFkaXIpL3B4ZS1y dGw4MTM5LmJpbiBcCiAgICAgICAgICQoZGF0YWRpcikvcHhlLXBjbmV0LmJpbiBcCiAJJChkYXRh ZGlyKS9leHRib290LmJpbiBcCisJJChkYXRhZGlyKS9saW51eGJvb3QuYmluIFwKIAkkKGRvY2Rp cikvcWVtdS1kb2MuaHRtbCBcCiAJJChkb2NkaXIpL3FlbXUtdGVjaC5odG1sIFwKIAkkKG1hbmRp cikvbWFuMS9xZW11LjEgJChtYW5kaXIpL21hbjEvcWVtdS1pbWcuMQpkaWZmIC0tZ2l0IGEvcWVt dS9NYWtlZmlsZS50YXJnZXQgYi9xZW11L01ha2VmaWxlLnRhcmdldAppbmRleCAyZmMyOTg4Li42 YTZkMjFiIDEwMDY0NAotLS0gYS9xZW11L01ha2VmaWxlLnRhcmdldAorKysgYi9xZW11L01ha2Vm aWxlLnRhcmdldApAQCAtNTkxLDcgKzU5MSw3IEBAIGlmZXEgKCQoVEFSR0VUX0JBU0VfQVJDSCks IGkzODYpCiBPQkpTKz0gaWRlLm8gcGNrYmQubyBwczIubyB2Z2EubyAkKFNPVU5EX0hXKSBkbWEu bwogT0JKUys9IGZkYy5vIG1jMTQ2ODE4cnRjLm8gc2VyaWFsLm8gaTgyNTkubyBpODI1NC5vIHBj c3BrLm8gcGMubwogT0JKUys9IGNpcnJ1c192Z2EubyBhcGljLm8gcGFyYWxsZWwubyBhY3BpLm8g cGlpeF9wY2kubwotT0JKUys9IHVzYi11aGNpLm8gdm1tb3VzZS5vIHZtcG9ydC5vIHZtd2FyZV92 Z2EubyBleHRib290Lm8KK09CSlMrPSB1c2ItdWhjaS5vIHZtbW91c2UubyB2bXBvcnQubyB2bXdh cmVfdmdhLm8gZXh0Ym9vdC5vIGxpbnV4Ym9vdC5vCiBpZmVxICgkKFVTRV9LVk1fUElUKSwgMSkK IE9CSlMrPSBpODI1NC1rdm0ubwogZW5kaWYKZGlmZiAtLWdpdCBhL3FlbXUvaHcvbGludXhib290 LmMgYi9xZW11L2h3L2xpbnV4Ym9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmU2YjdlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9xZW11L2h3L2xpbnV4Ym9vdC5jCkBAIC0w LDAgKzEsMzkgQEAKKy8qCisgKiBsaW51eGJvb3QuYworICogTGludXggQm9vdCBPcHRpb24gUk9N LgorICoKKyAqIENvcHlyaWdodCAoQykgTmd1eWVuIEFuaCBRdXluaCA8YXF1eW5oQGdtYWlsLmNv bT4sIDIwMDguCisgKgorICogVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgR1BM IGxpY2Vuc2UgdmVyc2lvbiAyLiAKKyAqIFNlZSB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3At bGV2ZWwgZGlyZWN0b3J5LgorICovCisKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgInBjLmgi CisKKy8qIEV4dGVuZGVkIEJvb3QgUk9NIHN1cG9ydCAqLworCitzdHJ1Y3QgbGludXhib290X2lu Zm8geworCS8qIHVpbnQxNl90IHJlcXVlc3Q7ICovCisJdWludDE2X3QgY3M7ICAgICAgICAvKiBD UyBzZWdtZW50ICovCisJdWludDE2X3QgZHM7ICAgICAgICAvKiBEUyBzZWdtZW50ICovCisJdWlu dDE2X3Qgc3A7ICAgICAgICAvKiBTUCByZWcgKi8KK307CisKKyNkZWZpbmUgTElOVVhCT09UX1BP UlQgMHg0MDcKKworc3RhdGljIHZvaWQgbGludXhib290X3dyaXRlKHZvaWQgKm9wYXF1ZSwgdWlu dDMyX3QgYWRkciwgdWludDMyX3QgdmFsdWUpCit7CisgICAgc3RydWN0IGxpbnV4Ym9vdF9pbmZv ICppbmZvID0gKHZvaWQgKikocGh5c19yYW1fYmFzZSArICgodmFsdWUgJiAweEZGRkYpIDw8IDQp KTsKKworCWluZm8tPmNzID0ga2VybmVsX3NldHVwX2NzOworCWluZm8tPmRzID0ga2VybmVsX3Nl dHVwX2RzOworCWluZm8tPnNwID0ga2VybmVsX3NldHVwX3NwOworCisJY3B1X3BoeXNpY2FsX21l bW9yeV9zZXRfZGlydHkoKHZhbHVlICYgMHhGRkZGKSA8PCA0KTsKK30KKwordm9pZCBsaW51eGJv b3RfaW5pdCgpCit7CisgICAgcmVnaXN0ZXJfaW9wb3J0X3dyaXRlKExJTlVYQk9PVF9QT1JULCAx LCAyLCBsaW51eGJvb3Rfd3JpdGUsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvcWVtdS9ody9wYy5j IGIvcWVtdS9ody9wYy5jCmluZGV4IGFlODdhYjkuLmZkZGU0Y2QgMTAwNjQ0Ci0tLSBhL3FlbXUv aHcvcGMuYworKysgYi9xZW11L2h3L3BjLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNkZWZpbmUgVkdB QklPU19GSUxFTkFNRSAidmdhYmlvcy5iaW4iCiAjZGVmaW5lIFZHQUJJT1NfQ0lSUlVTX0ZJTEVO QU1FICJ2Z2FiaW9zLWNpcnJ1cy5iaW4iCiAjZGVmaW5lIEVYVEJPT1RfRklMRU5BTUUgImV4dGJv b3QuYmluIgorI2RlZmluZSBMSU5VWEJPT1RfRklMRU5BTUUgImxpbnV4Ym9vdC5iaW4iCiAKIC8q IExlYXZlIGEgY2h1bmsgb2YgbWVtb3J5IGF0IHRoZSB0b3Agb2YgUkFNIGZvciB0aGUgQklPUyBB Q1BJIHRhYmxlcy4gICovCiAjZGVmaW5lIEFDUElfREFUQV9TSVpFICAgICAgIDB4MTAwMDAKQEAg LTQ5Miw2ICs0OTMsOCBAQCBzdGF0aWMgbG9uZyBnZXRfZmlsZV9zaXplKEZJTEUgKmYpCiAgICAg cmV0dXJuIHNpemU7CiB9CiAKK3VpbnQxNl90IGtlcm5lbF9zZXR1cF9jcywga2VybmVsX3NldHVw X2RzLCBrZXJuZWxfc2V0dXBfc3A7CisKIHN0YXRpYyB2b2lkIGxvYWRfbGludXgoY29uc3QgY2hh ciAqa2VybmVsX2ZpbGVuYW1lLAogCQkgICAgICAgY29uc3QgY2hhciAqaW5pdHJkX2ZpbGVuYW1l LAogCQkgICAgICAgY29uc3QgY2hhciAqa2VybmVsX2NtZGxpbmUpCkBAIC02MzgsMTEgKzY0MSwx MiBAQCBzdGF0aWMgdm9pZCBsb2FkX2xpbnV4KGNvbnN0IGNoYXIgKmtlcm5lbF9maWxlbmFtZSwK ICAgICAvKiBnZW5lcmF0ZSBib290c2VjdG9yIHRvIHNldCB1cCB0aGUgaW5pdGlhbCByZWdpc3Rl ciBzdGF0ZSAqLwogICAgIHJlYWxfc2VnID0gKHJlYWxfYWRkci1waHlzX3JhbV9iYXNlKSA+PiA0 OwogICAgIHNlZ1swXSA9IHNlZ1syXSA9IHNlZ1szXSA9IHNlZ1s0XSA9IHNlZ1s0XSA9IHJlYWxf c2VnOwotICAgIHNlZ1sxXSA9IHJlYWxfc2VnKzB4MjA7CS8qIENTICovCisJa2VybmVsX3NldHVw X2RzID0gcmVhbF9zZWc7CisgICAga2VybmVsX3NldHVwX2NzID0gc2VnWzFdID0gcmVhbF9zZWcr MHgyMDsJLyogQ1MgKi8KICAgICBtZW1zZXQoZ3ByLCAwLCBzaXplb2YgZ3ByKTsKLSAgICBncHJb NF0gPSBjbWRsaW5lX2FkZHItcmVhbF9hZGRyLTE2OwkvKiBTUCAoLTE2IGlzIHBhcmFub2lhKSAq LworICAgIGtlcm5lbF9zZXR1cF9zcCA9IGdwcls0XSA9IGNtZGxpbmVfYWRkci1yZWFsX2FkZHIt MTY7CS8qIFNQICgtMTYgaXMgcGFyYW5vaWEpICovCiAKLSAgICBnZW5lcmF0ZV9ib290c2VjdChn cHIsIHNlZywgMCk7CisgICAgLy9nZW5lcmF0ZV9ib290c2VjdChncHIsIHNlZywgMCk7CiB9CiAK IHN0YXRpYyB2b2lkIG1haW5fY3B1X3Jlc2V0KHZvaWQgKm9wYXF1ZSkKQEAgLTkwMyw2ICs5MDcs MTQgQEAgc3RhdGljIHZvaWQgcGNfaW5pdDEocmFtX2FkZHJfdCByYW1fc2l6ZSwgaW50IHZnYV9y YW1fc2l6ZSwKICAgICBmb3IgKGkgPSAwOyBpIDwgbmJfb3B0aW9uX3JvbXM7IGkrKykKIAlvcHRf cm9tX29mZnNldCArPSBsb2FkX29wdGlvbl9yb20ob3B0aW9uX3JvbVtpXSwgb3B0X3JvbV9vZmZz ZXQpOwogCisJLyogbGludXhib290IG9wdGlvbiBST00gYWxzbyBpbnRlcmNlcHRzIGludDE5LCBi dXQgbmV2ZXIgY2FsbCBvcmlnaW5hbCBpbnQxOSwKKwkgKiBzbyBpdCBtdXN0IGJlIGxvYWRlZCBi ZWZvcmUgZXh0Ym9vdCEgKi8KKyAgICBpZiAobGludXhfYm9vdCkgeworCXNucHJpbnRmKGJ1Ziwg c2l6ZW9mKGJ1ZiksICIlcy8lcyIsIGJpb3NfZGlyLCBMSU5VWEJPT1RfRklMRU5BTUUpOworCW9w dF9yb21fb2Zmc2V0ICs9IGxvYWRfb3B0aW9uX3JvbShidWYsIG9wdF9yb21fb2Zmc2V0KTsKKwlm cHJpbnRmKHN0ZGVyciwgImxpbnV4Ym9vdCBST00gbG9hZGVkIGF0IDB4JXhcbiIsIG9wdF9yb21f b2Zmc2V0KTsKKwl9CisKICAgICBpZiAoZXh0Ym9vdF9kcml2ZSAhPSAtMSkgewogCXNucHJpbnRm KGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lcyIsIGJpb3NfZGlyLCBFWFRCT09UX0ZJTEVOQU1FKTsK IAlvcHRfcm9tX29mZnNldCArPSBsb2FkX29wdGlvbl9yb20oYnVmLCBvcHRfcm9tX29mZnNldCk7 CkBAIC05MzEsOCArOTQzLDEwIEBAIHN0YXRpYyB2b2lkIHBjX2luaXQxKHJhbV9hZGRyX3QgcmFt X3NpemUsIGludCB2Z2FfcmFtX3NpemUsCiAKICAgICBib2Noc19iaW9zX2luaXQoKTsKIAotICAg IGlmIChsaW51eF9ib290KQorICAgIGlmIChsaW51eF9ib290KSB7CiAJbG9hZF9saW51eChrZXJu ZWxfZmlsZW5hbWUsIGluaXRyZF9maWxlbmFtZSwga2VybmVsX2NtZGxpbmUpOworCWxpbnV4Ym9v dF9pbml0KCk7CisJfQogCiAgICAgY3B1X2lycSA9IHFlbXVfYWxsb2NhdGVfaXJxcyhwaWNfaXJx X3JlcXVlc3QsIGZpcnN0X2NwdSwgMSk7CiAgICAgaTgyNTkgPSBpODI1OV9pbml0KGNwdV9pcnFb MF0pOwpkaWZmIC0tZ2l0IGEvcWVtdS9ody9wYy5oIGIvcWVtdS9ody9wYy5oCmluZGV4IGYyNmZj YjYuLmQ4NmVjZmQgMTAwNjQ0Ci0tLSBhL3FlbXUvaHcvcGMuaAorKysgYi9xZW11L2h3L3BjLmgK QEAgLTE1OCw3ICsxNTgsMTAgQEAgdm9pZCAqdmlydGlvX2Jsa19pbml0KFBDSUJ1cyAqYnVzLCB1 aW50MTZfdCB2ZW5kb3IsIHVpbnQxNl90IGRldmljZSwKIAkJICAgICAgQmxvY2tEcml2ZXJTdGF0 ZSAqYnMpOwogCiAvKiBleHRib290LmMgKi8KLQogdm9pZCBleHRib290X2luaXQoQmxvY2tEcml2 ZXJTdGF0ZSAqYnMsIGludCBjbWQpOwogCisvKiBsaW51eF9ib290ICovCit1aW50MTZfdCBrZXJu ZWxfc2V0dXBfY3MsIGtlcm5lbF9zZXR1cF9kcywga2VybmVsX3NldHVwX3NwOwordm9pZCBsaW51 eGJvb3RfaW5pdCh2b2lkKTsKKwogI2VuZGlmCg== ------=_Part_835_32186332.1208749009307--