[PATCH] [RFC]Super Page for Alpha,Sparc64,i386

Naohiko Shimizu (pshimizu@fa2.so-net.ne.jp)
Mon, 12 Aug 2002 17:45:22 +0900


This is a multi-part message in MIME format.

--Multipart_Mon__12_Aug_2002_17:45:22_+0900_0825a4b0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

This mail was bounced, and I resent it from my home.
The original mail attached both 2.4.18 and 2.4.19 patch but
it was too long for the list, and I deleted 2.4.18 patch.
------------------------------------------------------------------
Before shutting down my server, I decide to post the patch itself
to this list.
Our university will stop the electoricity, and my server will get back
in 8/14.

The url of the original patch is:
http://shimizu-lab.dt.u-tokai.ac.jp/lsp.html

Any comment will be welcome, but I cannot answer before 8/14.

I attached 2.4.19 version.
For i386, we sould turn on vm_align feature to boost the performance:
sysctl -w super_page.vm_align=1
This feature makes the anonymous mmap requests align to the
super page boundary if the requested length is larger than a
super page size.

The i386 port is efficient only with the pentium4 class machine with
a program which uses a lot of memory(such as 64MB or more).
The Alpha and Sparc64 port is efficient with much smaller size of the
programs. Because they support not only 4MB but also 64KB and 512KB.

The attached benchmark program (transm.c) will test the memory throughput
performance with large strides with matrices transpose. It outputs
the dimension, store stride performance (MB/S), load stride performance(MB/S)
respectively.

The Linux Super Page does not have any special system calls.
It automatically turns on the super page feature with little excessive
working set. The feature is controlable through sysctl.
You can turn off it with sysctl -w super_page.nr=1, and turn on again
with sysctl -w super_page.nr=2 (for i386) or
sysctl -w super_page.nr=4 (for Alpha and Sparc64).

I also provide /proc interface to monitor the reservation, allocation
and fail of the allocation for the super pages.

Plans for future enhancements:

1. simplify the set_pte macro
2. Support shared memory
3. Support COW
4. IA64 port (two plans 1: use long pte, 2: use region)

But I myself is too busy these days for summer/fall course lectures
and their preparations. Then do not ask me for the enhancements.

-- 

Naohiko Shimizu Department of Communications Engineering, School of Information Technology and Electronics, Tokai University 1117 Kitakaname Hiratsuka 259-1292 Japan TEL.+81-463-58-1211(ext. 4084) FAX.+81-463-58-8320

--Multipart_Mon__12_Aug_2002_17:45:22_+0900_0825a4b0 Content-Type: application/octet-stream; name="super_page-2.4.19_020810-alpha+sparc64+i386.patch" Content-Disposition: attachment; filename="super_page-2.4.19_020810-alpha+sparc64+i386.patch" Content-Transfer-Encoding: base64

ZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS9Eb2N1bWVudGF0aW9uL3N1cGVyX3BhZ2UudHh0IGxpbnV4 L0RvY3VtZW50YXRpb24vc3VwZXJfcGFnZS50eHQKLS0tIGxpbnV4LTIuNC4xOS9Eb2N1bWVudGF0 aW9uL3N1cGVyX3BhZ2UudHh0CVRodSBKYW4gIDEgMDk6MDA6MDAgMTk3MAorKysgbGludXgvRG9j dW1lbnRhdGlvbi9zdXBlcl9wYWdlLnR4dAlXZWQgQXVnICA3IDEwOjQxOjU4IDIwMDIKQEAgLTAs MCArMSw2OSBAQAorVGhlIHN1cGVyIHBhZ2UgaXMgYSBmZWF0dXJlIHdoaWNoIGV4dGVuZCB0aGUg VExCIGNvdmVyYWdlIG11Y2guCitTb21lIG1vZGVybiBwcm9jZXNzb3JzIGhhdmUgdGhpcyBmZWF0 dXJlLCBhbmQgTGludXggU3VwZXIgUGFnZQord2lsbCBhY3RpdmF0ZSB0aGlzIGZlYXR1cmUgYW5k IHJlc3VsdCBpbiBnZXR0aW5nIG1vcmUgcGVyZm9ybWFuY2UKK2ZvciB0aGUgZXh0ZW5zaXZlbHkg VExCIG1pc3NpbmcgcHJvZ3JhbXMuCisKK1RoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIG9mIHRoaXMg cGF0Y2ggaXMKKzEpIEFscGhhCisyKSBTcGFyYzY0CiszKSBpMzg2CisKK0J1dCBJIGRvbid0IGhh dmUgYW55IFNwYXJjNjQgbWFjaGluZSB0aGVuIGl0IGlzIG5vdCB0ZXN0ZWQgYnkgbXlzZWxmLgor VGhlIGkzODYgcG9ydCBpcyB1bmRlciB0aGUgZGV2ZWxvcG1lbnQuIFRoZSBjdXJyZW50IHZlcnNp b24gY2FuIG5vdAorYWN0aXZhdGUgdGhlIHN1cGVyIHBhZ2UgZm9yIGkzODYgYnV0IG9ubHkgcHJv dmlkZSB0aGUgZnJhbWV3b3JrLgorSSBoYXZlIGEgd29ya2luZyBwYXRjaCBmb3IgaTM4NiBieSBt eSBzdHVkZW50IGJ1dCBpdCBpcyBhIGRpcnR5IGhhY2sKK29uIG15IEFscGhhIHBvcnQgYW5kIEkg d2lsbCBub3QgdGFrZSBpdC4KKworVGhlIHN1cGVyIHBhZ2UgcGF0Y2ggcHJvdmlkZXMgc29tZSBj b252ZW5pZW50IGZlYXR1cmVzLgorCisvcHJvYy9zdXBlcl9wYWdlOiAKKworY3VycmVudCBucjog VGhlIG1heGltdW0gc3VwZXIgcGFnZSBpbmRleC4gQWxwaGEsU3BhcmM2NCBzdXBwb3J0IDEgdGhy b3VnaCA0CithbmQgaTM4NiBzdXBwb3J0IDEgb3IgMi4KK2N1cnJlbnQgdm1fYWxpZ246IFRoZSBj dXJyZW50IHN1cGVyIHBhZ2UgYWxpZ24gZmxhZy4gMTowIG1lYW5zIHRoYXQgYW5vbnltb3VzCitt bWFwIHJlcXVlc3Qgd2lsbCBiZSBhbGlnbmVkIHRvIHRoZSBhcHByb3ByaWF0ZSBzdXBlciBwYWdl IGJvdW5kYXJ5LgorMToxIG1lYW5zIHRoYXQgaW4gYWRkaXRpb24gdG8gdGhlIHN0YXJ0IGFsaWdu bWVudCwgdGhlIGxlbmd0aCB3aWxsIGJlIGFsaWduZWQKK3RvIHRoZSBzdXBlciBwYWdlIGJvdW5k YXJ5LgorY3VycmVudCBiaXRtYXNrOiBUaGUgdmFsdWUgb2YgdGhlIHN1cGVyIHBhZ2Ugb3JkZXIg bWFzay4KK29yZGVyIHJlc2VydmUgIGFsbG9jYXRlICBmYWlsOiBUaGUgc3VwZXIgcGFnZSBvcmRl ciwgcmVzZXJ2YXRpb24gY291bnQsCisgYWxsb2NhdGlvbiBjb3VudCBhbmQgYWxsb2NhdGlvbiBm YWlsIGNvdW50LCByZXNwZWN0aXZlbHkuCisKK3N5c2N0bDogUHJvdmlkZSBmb2xsb3dpbmcgdmFy aWFibGVzLgorCitucjogVGhlIG1heGltdW0gc3VwZXIgcGFnZSBpbmRleC4KK3ZtX2FsaWduOiBU aGUgc3VwZXIgcGFnZSBhbGlnbiBmbGFnLgordGFpbF9hbGlnbjogVGhlIHN1cGVyIHBhZ2UgYWxp Z24gZmxhZyBmb3IgdGhlIGVuZCBvZiBhbGxvY2F0aW9uLiBPbmx5IHZhbGlkIHdoZW4gdGhlIHZt X2FsaWduPT0xLgorYml0bWFzazogVGhlIHN1cGVyIHBhZ2Ugb3JkZXIgbWFzay4gVGhlIHN1cGVy IHBhZ2UgaW5kZXggY29ycmVzcG9uZGluZyB0bwordGhlIDAgdmFsdWUgb2YgdGhlIG1hc2sgd2ls bCBub3QgYmUgdXNlZC4gSXQgd2lsbCBmYWxsIGludG8gdGhlIGF0b21pYyBwYWdlLgorbG9ncmVz ZXQ6IFRoZSBjb3VudGVyIHdpbGwgYmUgcmVzZXQgYnkgcmVhZGluZyBpdC4KKworVGhlIEFscGhh IGFyY2hpdGVjdHVyZSBkZWZpbmVzIEdyYW51bGFyaXR5IEhpbnQoR0gpIGJpdHMgaW4gdGhlCitQ YWdlIFRhYmxlIEVudHJ5KFBURSkuIElmIHRoZXNlIGJpdHMgYXJlIHNldCB0byBub24temVybyB2 YWx1ZSwKK2l0IHN1cHBseSBhIGhpbnQgdG8gdHJhbnNsYXRpb24gYnVmZmVyIGltcGxlbWVudGF0 aW9ucyB0aGF0CithIGJsb2NrIG9mIHBhZ2VzIGNhbiBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlIGxh cmdlciBwYWdlLgorVGhlIHNwYXJjNjQgaGFzIGFsbW9zdCBzYW1lIGZlYXR1cmUgaW4gdGhlIFBU RSB0aGF0IGRlZmluZXMgdGhlCitwYWdlIHNpemUgd2hpY2ggaXMgbWFwcGVkIGJ5IHRoZSBQVEUu IFRoZSByZXN0cmljdGlvbiB0byAgdXNlCithbmQgdGhlIHBhZ2Ugc2l6ZSB2YXJpYXRpb24gaXMg YWxzbyB0aGUgc2FtZSBhcyBBbHBoYS4KKworSXQgbWVhbnMgdGhhdCBldmVuIGlmIHdlIGRvbid0 IGhhdmUgdmFyaWFibGUgbGVuZ3RoIHBhZ2UgbWVjaGFuaXNtLAord2Ugd2lsbCBoYXZlIHRoZSBv cHBvcnR1bml0eSB0byByZWR1Y2UgdHJhbnNsYXRpb24gbWlzc2VzLgorRm9yIHRoZSBsYXJnZSB3 b3JraW5nIHNldCBIUEMgYXBwbGljYXRpb25zIHRoZSBwZXJmb3JtYW5jZQorZGVncmFkYXRpb24g Y2F1c2VkIGJ5IHRoZSB0cmFuc2xhdGlvbiBtaXNzZXMgc2hvdWxkIGJlIGF2b2lkZWQuCitUaGVu IGlmIHdlIGNhbiB1c2UgdGhpcyBmZWF0dXJlLCBtYW55IEhQQyBhcHBsaWNhdGlvbnMgd2lsbCBi ZQorYXBwcmVjaWF0ZWQuCisKK0luIHRoaXMgcmVsZWFzZSB0aGVyZSBpcyBhIGNvbmZpZ3VyYXRp b24gb3B0aW9uIHRvIHN1cHBvcnQgdGhpcworZmVhdHVyZSBmb3IgQWxwaGEgYXJjaGl0ZWN0dXJl LiBZb3UgY2FuIHR1cm4gb24gdGhpcyBmZWF0dXJlIGJ5IGFzc2VydAordGhlIENPTkZJR19TVVBF Ul9QQUdFIHZhcmlhYmxlLiBXaXRoIHRoaXMgcmVsZWFzZSwgeW91IGNhbiBzZXQgR0ggYml0cyBp bgoreW91ciBwYWdlIHRhYmxlIHdoZW4geW91IGNhbGwgYnJrIHN5c3RlbSBjYWxsIG9yIGFub255 bW91cyBtbWFwIHN5c3RlbSBjYWxsIAord2l0aCBNQVBfUFJJVkFURSBmbGFnIG9uLiBUaGVuIGlm IHlvdSB3YW50IHRvIHJ1biB5b3VyIHByb2dyYW0gd2l0aAorZW5vdWdoIHNwZWVkLCB5b3Ugc2hv dWxkIGFsbG9jYXRlIG1lbW9yeSB3aXRoIHRoZXNlIGNhbGwgKG9yIG1vcmUKK2dlbmVyYWwgeW91 IGNhbiB1c2UgbWFsbG9jIGxpYnJhcnkgY2FsbCkuIAorVGhlIEdIIGJpdHMgb25seSBzZXQgb24g dGhlIGhlYXAgYWxsb2NhdGlvbiwgYWZ0ZXIgdGhhdCBpZiBhbnkgcHJvY2VzcworY2hhbmdlcyB0 aGUgdGFibGUgaXQgd2lsbCBkcm9wIHRoZSBiaXRzIGZvciBzYWZldHkuIFlvdSBtYXkgd2FudCB0 bworc3RvcCBzd2FwcGluZyBmb3IgY29udGludW91cyBoaWdoIHBlcmZvcm1hbmNlIG9wZXJhdGlv bi4KKworCitOYW9oaWtvIFNoaW1penU8bnNoaW1penVAa2V5YWtpLmNjLnUtdG9rYWkuYWMuanA+ CitVUkw6IGh0dHA6Ly9zaGltaXp1LWxhYi5kdC51LXRva2FpLmFjLmpwL2xzcC5odG1sCisKZGlm ZiAtdXJOIGxpbnV4LTIuNC4xOS9hcmNoL2FscGhhL2NvbmZpZy5pbiBsaW51eC9hcmNoL2FscGhh L2NvbmZpZy5pbgotLS0gbGludXgtMi40LjE5L2FyY2gvYWxwaGEvY29uZmlnLmluCVNhdCBBdWcg IDMgMDk6Mzk6NDIgMjAwMgorKysgbGludXgvYXJjaC9hbHBoYS9jb25maWcuaW4JVGh1IEF1ZyAg OCAxMToxMTozNCAyMDAyCkBAIC0yNTksNiArMjU5LDExIEBACiAjIExBUkdFX1ZNQUxMT0MgaXMg cmFjeSwgaWYgeW91ICpyZWFsbHkqIG5lZWQgaXQgdGhlbiBmaXggaXQgZmlyc3QKIGRlZmluZV9i b29sIENPTkZJR19BTFBIQV9MQVJHRV9WTUFMTE9DIG4KIAorYm9vbCAnU3VwZXJQYWdlIFN1cHBv cnQnIENPTkZJR19TVVBFUl9QQUdFCitpZiBbICIkQ09ORklHX1NVUEVSX1BBR0UiID0gInkiIF07 IHRoZW4KKyAgIGRlZmluZV9pbnQgIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSIDExCitmaQor CiBzb3VyY2UgZHJpdmVycy9wY2kvQ29uZmlnLmluCiAKIGJvb2wgJ1N1cHBvcnQgZm9yIGhvdC1w bHVnZ2FibGUgZGV2aWNlcycgQ09ORklHX0hPVFBMVUcKZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS9h cmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMgbGludXgvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5 cy5jCi0tLSBsaW51eC0yLjQuMTkvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCVNhdCBBdWcg IDMgMDk6Mzk6NDIgMjAwMgorKysgbGludXgvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCVdl ZCBBdWcgIDcgMjA6MzE6NTQgMjAwMgpAQCAtMTMyMSw2ICsxMzIxLDkgQEAKIAlyZXR1cm4gcmV0 OwogfQogCisjaWYgQ09ORklHX1NVUEVSX1BBR0UKK2V4dGVybiBpbnQgc3VwZXJfcGFnZV92bV9h bGlnbjsKKyNlbmRpZgogLyogR2V0IGFuIGFkZHJlc3MgcmFuZ2Ugd2hpY2ggaXMgY3VycmVudGx5 IHVubWFwcGVkLiAgU2ltaWxhciB0byB0aGUKICAgIGdlbmVyaWMgdmVyc2lvbiBleGNlcHQgdGhh dCB3ZSBrbm93IGhvdyB0byBob25vciBBRERSX0xJTUlUXzMyQklULiAgKi8KIApAQCAtMTMyOSw2 ICsxMzMyLDE4IEBACiAJCSAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGltaXQpCiB7CiAJc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7CisgICAg ICAgIHVuc2lnbmVkIGxvbmcgc3VwZXJfcGFnZV9tYXNrPTA7CisjaWYgQ09ORklHX1NVUEVSX1BB R0UKKyAgICAgICAgICAgaWYoc3VwZXJfcGFnZV92bV9hbGlnbiYmYWRkcj09UEFHRV9BTElHTihU QVNLX1VOTUFQUEVEX0JBU0UpKSB7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGZv cihpPXN1cGVyX3BhZ2VfbnItMTsgaT4wOyBpLS0pIHsKKyAgICAgICAgICAgICAgaWYobGVuPihQ QUdFX1NJWkUgPDwgc3VwZXJfcGFnZV9vcmRlcltpXSkpIHsKKyAgICAgICAgICAgICAgICBzdXBl cl9wYWdlX21hc2sgPSAoUEFHRV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV0pIC0xOworICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyNlbmRpZgogCiAJd2hpbGUgKDEpIHsKIAkJLyogQXQgdGhpcyBwb2ludDog ICghdm1hIHx8IGFkZHIgPCB2bWEtPnZtX2VuZCkuICovCkBAIC0xMzM4LDYgKzEzNTMsNyBAQAog CQkJcmV0dXJuIGFkZHI7CiAJCWFkZHIgPSB2bWEtPnZtX2VuZDsKIAkJdm1hID0gdm1hLT52bV9u ZXh0OworICAgICAgICAgICAgICAgIGFkZHIgPSAoYWRkciArIHN1cGVyX3BhZ2VfbWFzaykmfnN1 cGVyX3BhZ2VfbWFzazsKIAl9CiB9CiAKZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS9hcmNoL2FscGhh L21tL2luaXQuYyBsaW51eC9hcmNoL2FscGhhL21tL2luaXQuYwotLS0gbGludXgtMi40LjE5L2Fy Y2gvYWxwaGEvbW0vaW5pdC5jCVNhdCBBdWcgIDMgMDk6Mzk6NDIgMjAwMgorKysgbGludXgvYXJj aC9hbHBoYS9tbS9pbml0LmMJVHVlIEF1ZyAgNiAxOTo1MjozMSAyMDAyCkBAIC01LDYgKzUsNyBA QAogICovCiAKIC8qIDIuMy54IHpvbmUgYWxsb2NhdG9yLCAxOTk5IEFuZHJlYSBBcmNhbmdlbGkg PGFuZHJlYUBzdXNlLmRlPiAqLworLyogU1VQRVJfUEFHRSBzdXBwb3J0LCAyMDAwIE5hb2hpa28g U2hpbWl6dSA8bnNoaW1penVAa2V5YWtpLmNjLnUtdG9rYWkuYWMuanA+ICovCiAKICNpbmNsdWRl IDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KQEAgLTQ2LDYgKzQ3 LDEyIEBACiBzdHJ1Y3QgcGd0YWJsZV9jYWNoZV9zdHJ1Y3QgcXVpY2tsaXN0czsKICNlbmRpZgog CisjaWZkZWYgQ09ORklHX1NVUEVSX1BBR0UKK2ludCBzdXBlcl9wYWdlX29yZGVyW1NVUEVSX1BB R0VfTlJdID0gezAsMyw2LDl9OworcGdwcm90X3Qgc3VwZXJfcGFnZV9wcm90W1NVUEVSX1BBR0Vf TlJdID0gCisgIHtfX3BncHJvdCgweDAwMDApLF9fcGdwcm90KDB4MDAyMCksX19wZ3Byb3QoMHgw MDQwKSxfX3BncHJvdCgweDAwNjApfTsKKyNlbmRpZgorCiBwZ2RfdCAqCiBnZXRfcGdkX3Nsb3co dm9pZCkKIHsKZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS9hcmNoL2kzODYvY29uZmlnLmluIGxpbnV4 L2FyY2gvaTM4Ni9jb25maWcuaW4KLS0tIGxpbnV4LTIuNC4xOS9hcmNoL2kzODYvY29uZmlnLmlu CVNhdCBBdWcgIDMgMDk6Mzk6NDIgMjAwMgorKysgbGludXgvYXJjaC9pMzg2L2NvbmZpZy5pbglT YXQgQXVnIDEwIDE4OjI3OjU0IDIwMDIKQEAgLTE4NSw2ICsxODUsMTEgQEAKICAgIGRlZmluZV9i b29sIENPTkZJR19YODZfUEFFIHkKIGZpCiAKK2Jvb2wgJ1N1cGVyIFBhZ2UgU3VwcG9ydCcgQ09O RklHX1NVUEVSX1BBR0UKK2lmIFsgIiRDT05GSUdfU1VQRVJfUEFHRSIgPSAieSIgXTsgdGhlbgor ICAgZGVmaW5lX2ludCAgQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVIgMTIKK2ZpCisKIGJvb2wg J01hdGggZW11bGF0aW9uJyBDT05GSUdfTUFUSF9FTVVMQVRJT04KIGJvb2wgJ01UUlIgKE1lbW9y eSBUeXBlIFJhbmdlIFJlZ2lzdGVyKSBzdXBwb3J0JyBDT05GSUdfTVRSUgogYm9vbCAnU3ltbWV0 cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCcgQ09ORklHX1NNUApkaWZmIC11ck4gbGludXgt Mi40LjE5L2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvaGVh ZC5TCi0tLSBsaW51eC0yLjQuMTkvYXJjaC9pMzg2L2tlcm5lbC9oZWFkLlMJU2F0IEF1ZyAgMyAw OTozOTo0MiAyMDAyCisrKyBsaW51eC9hcmNoL2kzODYva2VybmVsL2hlYWQuUwlUdWUgQXVnICA2 IDE5OjUyOjMxIDIwMDIKQEAgLTkzLDcgKzkzLDExIEBACiAgKiBFbmFibGUgcGFnaW5nCiAgKi8K IDM6CisjaWYgQ09ORklHX1NVUEVSX1BBR0UKKwltb3ZsICRzd2FwcGVyX3RsYl9kaXItX19QQUdF X09GRlNFVCwlZWF4CisjZWxzZQogCW1vdmwgJHN3YXBwZXJfcGdfZGlyLV9fUEFHRV9PRkZTRVQs JWVheAorI2VuZGlmCiAJbW92bCAlZWF4LCVjcjMJCS8qIHNldCB0aGUgcGFnZSB0YWJsZSBwb2lu dGVyLi4gKi8KIAltb3ZsICVjcjAsJWVheAogCW9ybCAkMHg4MDAwMDAwMCwlZWF4CkBAIC0zNzks NiArMzgzLDI4IEBACiAgKi8KIC5vcmcgMHgxMDAwCiBFTlRSWShzd2FwcGVyX3BnX2RpcikKKyNp ZiBDT05GSUdfU1VQRVJfUEFHRQorCS5sb25nIDB4MDAxMDMwMDcKKwkubG9uZyAweDAwMTA0MDA3 CisJLmZpbGwgQk9PVF9VU0VSX1BHRF9QVFJTLTIsNCwwCisJLyogZGVmYXVsdDogNzY2IGVudHJp ZXMgKi8KKwkubG9uZyAweDAwMTAzMDA3CisJLmxvbmcgMHgwMDEwNDAwNworCS8qIGRlZmF1bHQ6 IDI1NCBlbnRyaWVzICovCisJLmZpbGwgQk9PVF9LRVJORUxfUEdEX1BUUlMtMiw0LDAKKy8qIHdl IGNvcHkgdGhlIHRhYmxlIGZvciB0aGUgdGxiICovCitzd2FwcGVyX3RsYl9kaXI6CisJLmxvbmcg MHgwMDEwMzAwNworCS5sb25nIDB4MDAxMDQwMDcKKwkuZmlsbCBCT09UX1VTRVJfUEdEX1BUUlMt Miw0LDAKKwkvKiBkZWZhdWx0OiA3NjYgZW50cmllcyAqLworCS5sb25nIDB4MDAxMDMwMDcKKwku bG9uZyAweDAwMTA0MDA3CisJLyogZGVmYXVsdDogMjU0IGVudHJpZXMgKi8KKwkuZmlsbCBCT09U X0tFUk5FTF9QR0RfUFRSUy0yLDQsMAorCisjZGVmaW5lIFNVUEVSX09GRlNFVCArMHgxMDAwCisj ZWxzZQogCS5sb25nIDB4MDAxMDIwMDcKIAkubG9uZyAweDAwMTAzMDA3CiAJLmZpbGwgQk9PVF9V U0VSX1BHRF9QVFJTLTIsNCwwCkBAIC0zODcsMTUgKzQxMywxNyBAQAogCS5sb25nIDB4MDAxMDMw MDcKIAkvKiBkZWZhdWx0OiAyNTQgZW50cmllcyAqLwogCS5maWxsIEJPT1RfS0VSTkVMX1BHRF9Q VFJTLTIsNCwwCisjZGVmaW5lIFNVUEVSX09GRlNFVAorI2VuZGlmCiAKIC8qCiAgKiBUaGUgcGFn ZSB0YWJsZXMgYXJlIGluaXRpYWxpemVkIHRvIG9ubHkgOE1CIGhlcmUgLSB0aGUgZmluYWwgcGFn ZQogICogdGFibGVzIGFyZSBzZXQgdXAgbGF0ZXIgZGVwZW5kaW5nIG9uIG1lbW9yeSBzaXplLgog ICovCi0ub3JnIDB4MjAwMAorLm9yZyAweDIwMDAgU1VQRVJfT0ZGU0VUCiBFTlRSWShwZzApCiAK LS5vcmcgMHgzMDAwCisub3JnIDB4MzAwMCBTVVBFUl9PRkZTRVQKIEVOVFJZKHBnMSkKIAogLyoK QEAgLTQwMywxMCArNDMxLDEwIEBACiAgKiBpbml0aWFsaXphdGlvbiBsb29wIGNvdW50cyB1bnRp bCBlbXB0eV96ZXJvX3BhZ2UpCiAgKi8KIAotLm9yZyAweDQwMDAKKy5vcmcgMHg0MDAwIFNVUEVS X09GRlNFVAogRU5UUlkoZW1wdHlfemVyb19wYWdlKQogCi0ub3JnIDB4NTAwMAorLm9yZyAweDUw MDAgU1VQRVJfT0ZGU0VUCiAKIC8qCiAgKiBSZWFsIGJlZ2lubmluZyBvZiBub3JtYWwgInRleHQi IHNlZ21lbnQKZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS9hcmNoL2kzODYvbW0vZmF1bHQuYyBsaW51 eC9hcmNoL2kzODYvbW0vZmF1bHQuYwotLS0gbGludXgtMi40LjE5L2FyY2gvaTM4Ni9tbS9mYXVs dC5jCVNhdCBBdWcgIDMgMDk6Mzk6NDIgMjAwMgorKysgbGludXgvYXJjaC9pMzg2L21tL2ZhdWx0 LmMJVHVlIEF1ZyAgNiAxOTo1MjozMSAyMDAyCkBAIC0zODMsNiArMzgzLDkgQEAKIAogCQlhc20o Im1vdmwgJSVjcjMsJTAiOiI9ciIgKHBnZCkpOwogCQlwZ2QgPSBvZmZzZXQgKyAocGdkX3QgKilf X3ZhKHBnZCk7CisjaWYgQ09ORklHX1NVUEVSX1BBR0UKKyAgICAgICAgICAgICAgICBwZ2QgLT0g UFRSU19QRVJfUEdEOworI2VuZGlmCiAJCXBnZF9rID0gaW5pdF9tbS5wZ2QgKyBvZmZzZXQ7CiAK IAkJaWYgKCFwZ2RfcHJlc2VudCgqcGdkX2spKQpkaWZmIC11ck4gbGludXgtMi40LjE5L2FyY2gv aTM4Ni9tbS9pbml0LmMgbGludXgvYXJjaC9pMzg2L21tL2luaXQuYwotLS0gbGludXgtMi40LjE5 L2FyY2gvaTM4Ni9tbS9pbml0LmMJU2F0IEF1ZyAgMyAwOTozOTo0MiAyMDAyCisrKyBsaW51eC9h cmNoL2kzODYvbW0vaW5pdC5jCVR1ZSBBdWcgIDYgMTk6NTc6NDQgMjAwMgpAQCAtNjUsNiArNjUs MTcgQEAKIAlyZXR1cm4gZnJlZWQ7CiB9CiAKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorI2lmIENP TkZJR19YODZfUEFFCitpbnQgc3VwZXJfcGFnZV9vcmRlcltTVVBFUl9QQUdFX05SXSA9IHswLDl9 OworI2Vsc2UKK2ludCBzdXBlcl9wYWdlX29yZGVyW1NVUEVSX1BBR0VfTlJdID0gezAsMTB9Owor I2VuZGlmCisvKiBXZSB1c2UgdGhlIHVudXNlZCBiaXQgb2YgdGhlIHB0ZS4gTi4gU2hpbWl6dSAq LworcGdwcm90X3Qgc3VwZXJfcGFnZV9wcm90W1NVUEVSX1BBR0VfTlJdID0ge19fcGdwcm90KDAp LF9fcGdwcm90KF9QQUdFX1NVUEVSKX07CisjZW5kaWYKKworCiAvKgogICogTk9URTogcGFnZXRh YmxlX2luaXQgYWxsb2MgYWxsIHRoZSBmaXhtYXAgcGFnZXRhYmxlcyBjb250aWd1b3VzIG9uIHRo ZQogICogcGh5c2ljYWwgc3BhY2Ugc28gd2UgY2FuIGNhY2hlIHRoZSBwbGFjZSBvZiB0aGUgZmly c3Qgb25lIGFuZCBtb3ZlCkBAIC0zMzEsNyArMzQyLDExIEBACiB7CiAJcGFnZXRhYmxlX2luaXQo KTsKIAorI2lmIENPTkZJR19TVVBFUl9QQUdFCisJbG9hZF9jcjMoc3dhcHBlcl9wZ19kaXIrUFRS U19QRVJfUEdEKTsJCisjZWxzZQogCWxvYWRfY3IzKHN3YXBwZXJfcGdfZGlyKTsJCisjZW5kaWYK IAogI2lmIENPTkZJR19YODZfUEFFCiAJLyoKQEAgLTYwMyw4ICs2MTgsMTMgQEAKIAkvKgogCSAq IFBBRSBwZ2RzIG11c3QgYmUgMTYtYnl0ZSBhbGlnbmVkOgogCSAqLworI2lmIENPTkZJR19TVVBF Ul9QQUdFCisJcGFlX3BnZF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicGFlX3BnZCIsIFBU Ul9QRVJfUEdEKnNpemVvZihwZ2RfdCkqMiwgMCwKKwkJU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xB Ql9NVVNUX0hXQ0FDSEVfQUxJR04sIE5VTEwsIE5VTEwpOworI2Vsc2UKIAlwYWVfcGdkX2NhY2hl cCA9IGttZW1fY2FjaGVfY3JlYXRlKCJwYWVfcGdkIiwgMzIsIDAsCiAJCVNMQUJfSFdDQUNIRV9B TElHTiB8IFNMQUJfTVVTVF9IV0NBQ0hFX0FMSUdOLCBOVUxMLCBOVUxMKTsKKyNlbmRpZgogCWlm ICghcGFlX3BnZF9jYWNoZXApCiAJCXBhbmljKCJpbml0X3BhZSgpOiBDYW5ub3QgYWxsb2MgcGFl X3BnZCBTTEFCIGNhY2hlIik7CiB9CmRpZmYgLXVyTiBsaW51eC0yLjQuMTkvYXJjaC9zcGFyYzY0 L2NvbmZpZy5pbiBsaW51eC9hcmNoL3NwYXJjNjQvY29uZmlnLmluCi0tLSBsaW51eC0yLjQuMTkv YXJjaC9zcGFyYzY0L2NvbmZpZy5pbglTYXQgQXVnICAzIDA5OjM5OjQzIDIwMDIKKysrIGxpbnV4 L2FyY2gvc3BhcmM2NC9jb25maWcuaW4JVGh1IEF1ZyAgOCAxMToxMTo1NiAyMDAyCkBAIC0zMSw2 ICszMSwxMSBAQAogIyBJZGVudGlmeSB0aGlzIGFzIGEgU3BhcmM2NCBidWlsZAogZGVmaW5lX2Jv b2wgQ09ORklHX1NQQVJDNjQgeQogCitib29sICdTdXBlclBhZ2UgU3VwcG9ydCcgQ09ORklHX1NV UEVSX1BBR0UKK2lmIFsgIiRDT05GSUdfU1VQRVJfUEFHRSIgPSAieSIgXTsgdGhlbgorICAgZGVm aW5lX2ludCAgQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVIgMTEKK2ZpCisKIGJvb2wgJ1N1cHBv cnQgZm9yIGhvdC1wbHVnZ2FibGUgZGV2aWNlcycgQ09ORklHX0hPVFBMVUcKIAogIyBHbG9iYWwg dGhpbmdzIGFjcm9zcyBhbGwgU3VuIG1hY2hpbmVzLgpkaWZmIC11ck4gbGludXgtMi40LjE5L2Fy Y2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjLmMgbGludXgvYXJjaC9zcGFyYzY0L2tlcm5lbC9z eXNfc3BhcmMuYwotLS0gbGludXgtMi40LjE5L2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJj LmMJU2F0IEF1ZyAgMyAwOTozOTo0MyAyMDAyCisrKyBsaW51eC9hcmNoL3NwYXJjNjQva2VybmVs L3N5c19zcGFyYy5jCVdlZCBBdWcgIDcgMjA6MzE6MzAgMjAwMgpAQCAtNDQsMTEgKzQ0LDE1IEBA CiAJKCgoKGFkZHIpK1NITUxCQS0xKSZ+KFNITUxCQS0xKSkgKwlcCiAJICgoKHBnb2ZmKTw8UEFH RV9TSElGVCkgJiAoU0hNTEJBLTEpKSkKIAorI2lmIENPTkZJR19TVVBFUl9QQUdFCitleHRlcm4g aW50IHN1cGVyX3BhZ2Vfdm1fYWxpZ247CisjZW5kaWYKIHVuc2lnbmVkIGxvbmcgYXJjaF9nZXRf dW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNp Z25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncykK IHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bW07CiAJdW5zaWduZWQgbG9uZyB0YXNrX3Np emUgPSBUQVNLX1NJWkU7CiAJaW50IGRvX2NvbG9yX2FsaWduOworICAgICAgICB1bnNpZ25lZCBs b25nIHN1cGVyX3BhZ2VfbWFzaz0wOwogCiAJaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7CiAJCS8q IFdlIGRvIG5vdCBhY2NlcHQgYSBzaGFyZWQgbWFwcGluZyBpZiBpdCB3b3VsZCB2aW9sYXRlCkBA IC02Myw4ICs2NywyMCBAQAogCQl0YXNrX3NpemUgPSAweGYwMDAwMDAwVUw7CiAJaWYgKGxlbiA+ IHRhc2tfc2l6ZSB8fCBsZW4gPiAtUEFHRV9PRkZTRVQpCiAJCXJldHVybiAtRU5PTUVNOwotCWlm ICghYWRkcikKKwlpZiAoIWFkZHIpIHsKIAkJYWRkciA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKyNp ZiBDT05GSUdfU1VQRVJfUEFHRQorICAgICAgICAgICAgICAgIGlmKHN1cGVyX3BhZ2Vfdm1fYWxp Z24pIHsKKyAgICAgICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgICAgIGZvcihpPXN1 cGVyX3BhZ2VfbnItMTsgaT4wOyBpLS0pIHsKKyAgICAgICAgICAgICAgICAgICBpZihsZW4+KFBB R0VfU0laRSA8PCBzdXBlcl9wYWdlX29yZGVyW2ldKSkgeworICAgICAgICAgICAgICAgICAgICAg IHN1cGVyX3BhZ2VfbWFzayA9IChQQUdFX1NJWkUgPDwgc3VwZXJfcGFnZV9vcmRlcltpXSktMTsK KyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgfQog CiAJZG9fY29sb3JfYWxpZ24gPSAwOwogCWlmIChmaWxwIHx8IChmbGFncyAmIE1BUF9TSEFSRUQp KQpAQCAtNzQsNiArOTAsNyBAQAogCQlhZGRyID0gQ09MT1VSX0FMSUdOKGFkZHIsIHBnb2ZmKTsK IAllbHNlCiAJCWFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpOworCiAJdGFza19zaXplIC09IGxlbjsK IAogCWZvciAodm1tID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOyA7IHZtbSA9IHZtbS0+ dm1fbmV4dCkgewpAQCAtODksNiArMTA2LDEwIEBACiAJCWFkZHIgPSB2bW0tPnZtX2VuZDsKIAkJ aWYgKGRvX2NvbG9yX2FsaWduKQogCQkJYWRkciA9IENPTE9VUl9BTElHTihhZGRyLCBwZ29mZik7 CisjaWYgQ09ORklHX1NVUEVSX1BBR0UKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgCQkg ICAgICAgIGFkZHIgPSAoYWRkciArIHN1cGVyX3BhZ2VfbWFzaykmfnN1cGVyX3BhZ2VfbWFzazsK KyNlbmRpZgogCX0KIH0KIApkaWZmIC11ck4gbGludXgtMi40LjE5L2FyY2gvc3BhcmM2NC9tbS9p bml0LmMgbGludXgvYXJjaC9zcGFyYzY0L21tL2luaXQuYwotLS0gbGludXgtMi40LjE5L2FyY2gv c3BhcmM2NC9tbS9pbml0LmMJU2F0IEF1ZyAgMyAwOTozOTo0MyAyMDAyCisrKyBsaW51eC9hcmNo L3NwYXJjNjQvbW0vaW5pdC5jCVR1ZSBBdWcgIDYgMTk6NTI6MzEgMjAwMgpAQCAtMTAzOCw2ICsx MDM4LDEzIEBACiBzdHJ1Y3QgcGd0YWJsZV9jYWNoZV9zdHJ1Y3QgcGd0X3F1aWNrbGlzdHM7CiAj ZW5kaWYKIAorI2lmZGVmIENPTkZJR19TVVBFUl9QQUdFCitpbnQgc3VwZXJfcGFnZV9vcmRlcltT VVBFUl9QQUdFX05SXSA9IHswLDMsNiw5fTsKK3BncHJvdF90IHN1cGVyX3BhZ2VfcHJvdFtTVVBF Ul9QQUdFX05SXSA9IAorICAgICAgIHtfX3BncHJvdChfUEFHRV9TWjhLKSxfX3BncHJvdChfUEFH RV9TWjY0SyksCisgICAgICAgIF9fcGdwcm90KF9QQUdFX1NaNTEySyksX19wZ3Byb3QoX1BBR0Vf U1o0TUIpfTsKKyNlbmRpZgorCiAvKiBPSywgd2UgaGF2ZSB0byBjb2xvciB0aGVzZSBwYWdlcy4g VGhlIHBhZ2UgdGFibGVzIGFyZSBhY2Nlc3NlZAogICogYnkgbm9uLURjYWNoZSBlbmFibGVkIG1h cHBpbmcgaW4gdGhlIFZQVEUgYXJlYSBieSB0aGUgZHRsYl9iYWNrZW5kLlMKICAqIGNvZGUsIGFz IHdlbGwgYXMgYnkgUEFHRV9PRkZTRVQgcmFuZ2UgZGlyZWN0LW1hcHBlZCBhZGRyZXNzZXMgYnkg CmRpZmYgLXVyTiBsaW51eC0yLjQuMTkvaW5jbHVkZS9hc20tYWxwaGEvcGd0YWJsZS5oIGxpbnV4 L2luY2x1ZGUvYXNtLWFscGhhL3BndGFibGUuaAotLS0gbGludXgtMi40LjE5L2luY2x1ZGUvYXNt LWFscGhhL3BndGFibGUuaAlTYXQgQXVnICAzIDA5OjM5OjQ1IDIwMDIKKysrIGxpbnV4L2luY2x1 ZGUvYXNtLWFscGhhL3BndGFibGUuaAlUdWUgQXVnICA2IDE5OjUyOjMxIDIwMDIKQEAgLTE5LDcg KzE5LDEwIEBACiAgKiB3aXRoaW4gYSBwYWdlIHRhYmxlIGFyZSBkaXJlY3RseSBtb2RpZmllZC4g IFRodXMsIHRoZSBmb2xsb3dpbmcKICAqIGhvb2sgaXMgbWFkZSBhdmFpbGFibGUuCiAgKi8KLSNk ZWZpbmUgc2V0X3B0ZShwdGVwdHIsIHB0ZXZhbCkgKCgqKHB0ZXB0cikpID0gKHB0ZXZhbCkpCisv KiAKKyAqICBTVVBFUl9QQUdFIHN1cHBvcnQgYWRkZWQgYnkgTmFvaGlrbyBTaGltaXp1CisJPG5z aGltaXp1QGtleWFraS5jYy51LXRva2FpLmFjLmpwPgorICovCiAKIC8qIFBNRF9TSElGVCBkZXRl cm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgY2Fu IG1hcCAqLwogI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyAoUEFHRV9TSElGVC0zKSkK QEAgLTI1NCw5ICsyNTcsNyBAQAogZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nIHBnZF9wYWdl KHBnZF90IHBnZCkKIHsgcmV0dXJuIFBBR0VfT0ZGU0VUICsgKChwZ2RfdmFsKHBnZCkgJiBfUEZO X01BU0spID4+ICgzMi1QQUdFX1NISUZUKSk7IH0KIAotZXh0ZXJuIGlubGluZSBpbnQgcHRlX25v bmUocHRlX3QgcHRlKQkJeyByZXR1cm4gIXB0ZV92YWwocHRlKTsgfQogZXh0ZXJuIGlubGluZSBp bnQgcHRlX3ByZXNlbnQocHRlX3QgcHRlKQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9W QUxJRDsgfQotZXh0ZXJuIGlubGluZSB2b2lkIHB0ZV9jbGVhcihwdGVfdCAqcHRlcCkJeyBwdGVf dmFsKCpwdGVwKSA9IDA7IH0KIAogZXh0ZXJuIGlubGluZSBpbnQgcG1kX25vbmUocG1kX3QgcG1k KQkJeyByZXR1cm4gIXBtZF92YWwocG1kKTsgfQogZXh0ZXJuIGlubGluZSBpbnQgcG1kX2JhZChw bWRfdCBwbWQpCQl7IHJldHVybiAocG1kX3ZhbChwbWQpICYgfl9QRk5fTUFTSykgIT0gX1BBR0Vf VEFCTEU7IH0KQEAgLTI2OCw2ICsyNjksNTkgQEAKIGV4dGVybiBpbmxpbmUgaW50IHBnZF9wcmVz ZW50KHBnZF90IHBnZCkJeyByZXR1cm4gcGdkX3ZhbChwZ2QpICYgX1BBR0VfVkFMSUQ7IH0KIGV4 dGVybiBpbmxpbmUgdm9pZCBwZ2RfY2xlYXIocGdkX3QgKiBwZ2RwKQl7IHBnZF92YWwoKnBnZHAp ID0gMDsgfQogCisjZGVmaW5lIGNsZWFyX3BtZF9zcChwbWQpIGRvIHt9IHdoaWxlKDApCisjZGVm aW5lIHN1cGVyX3BhZ2VfcG9wdWxhdGUoYWRyLCBwYWdlLCBwcm90LCBpbmRleCkgZG8ge30gd2hp bGUgKDApCisKKyNpZm5kZWYgQ09ORklHX1NVUEVSX1BBR0UKKyNkZWZpbmUgU1VQRVJfUEFHRV9O UiAxCisjZGVmaW5lIFNVUEVSX1BBR0VfTUFTSyAwCisjZGVmaW5lIHNldF9wdGUocHRlcHRyLCBw dGV2YWwpICgoKihwdGVwdHIpKSA9IChwdGV2YWwpKQorZXh0ZXJuIGlubGluZSBpbnQgcHRlX25v bmUocHRlX3QgcHRlKQkJeyByZXR1cm4gIShwdGVfdmFsKHB0ZSkpOyB9CitleHRlcm4gaW5saW5l IHZvaWQgcHRlX2NsZWFyKHB0ZV90ICpwdGVwKQl7IHB0ZV92YWwoKnB0ZXApPTA7IH0KKyNlbHNl CisjZGVmaW5lIFNVUEVSX1BBR0VfTUFTSyAweDAwNjAKKyNkZWZpbmUgU1VQRVJfUEFHRV9NQVNL X1NISUZUIDUKKyNkZWZpbmUgU1VQRVJfUEFHRV9OUiA0CitleHRlcm4gaW50IHN1cGVyX3BhZ2Vf b3JkZXJbXTsKK2V4dGVybiBwZ3Byb3RfdCBzdXBlcl9wYWdlX3Byb3RbXTsKK2V4dGVybiBpbmxp bmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkJCXsgcmV0dXJuICEocHRlX3ZhbChwdGUpICYgflNV UEVSX1BBR0VfTUFTSyk7IH0KKyNkZWZpbmUgcHRlX3RvX3NwX2luZGV4KHgpICAoKHB0ZV92YWwo eCkgJiBTVVBFUl9QQUdFX01BU0spID4+IFNVUEVSX1BBR0VfTUFTS19TSElGVCkKK2V4dGVybiBp bmxpbmUgcHRlX3QgbWtfcHRlX3NwX2NsZWFuKHB0ZV90IHB0ZSkge3B0ZV92YWwocHRlKSAmPSB+ U1VQRVJfUEFHRV9NQVNLOyByZXR1cm4gcHRlO30gCitleHRlcm4gaW5saW5lIHZvaWQgZG93bl9w dGVfc3AocHRlX3QgKnB0ZXB0ciwgaW50IGluZGV4KSB7CisJCWludCBpLG9yZGVyOworCQlwdGVf dCAqYWRkcjsKKwkJb3JkZXIgPSBzdXBlcl9wYWdlX29yZGVyW2luZGV4XTsKKwkJYWRkciA9IChw dGVfdCAqKSgodW5zaWduZWQgbG9uZykgcHRlcHRyICYgfigoMVVMPDwob3JkZXIgKyBTSVpFT0Zf UFRSX0xPRzIpKSAtIDEpKTsKKwkJZm9yICggaT0wOyBpIDwgMTw8b3JkZXI7IGkrKykgeworCQkJ cHRlX3ZhbCgqKGFkZHIraSkpID0gKHB0ZV92YWwoKihhZGRyK2kpKSAmIH5TVVBFUl9QQUdFX01B U0spIHwgcGdwcm90X3ZhbChzdXBlcl9wYWdlX3Byb3RbaW5kZXggLTFdKTsKKwkJfQorCX0KK2V4 dGVybiBpbmxpbmUgdm9pZCBjbGVhcl9wdGVfc3AocHRlX3QgKnB0ZXB0ciwgaW50IGluZGV4KSB7 CisJCWludCBpLG9yZGVyOworCQlwdGVfdCAqYWRkcjsKKwkJb3JkZXIgPSBzdXBlcl9wYWdlX29y ZGVyW2luZGV4XTsKKwkJYWRkciA9IChwdGVfdCAqKSgodW5zaWduZWQgbG9uZykgcHRlcHRyICYg figoMVVMPDwob3JkZXIgKyBTSVpFT0ZfUFRSX0xPRzIpKSAtIDEpKTsKKwkJZm9yICggaT0wOyBp IDwgMTw8b3JkZXI7IGkrKykgeworCQkJcHRlX3ZhbCgqKGFkZHIraSkpICY9ICB+U1VQRVJfUEFH RV9NQVNLOworCQl9CisJfQorZXh0ZXJuIGlubGluZSB2b2lkIHNldF9wdGVfcmF3KHB0ZV90ICpw dGVwdHIsIHB0ZV90IHB0ZXZhbCkgeworCXJldHJ5OgorCWlmICggcHRlX3ByZXNlbnQoKnB0ZXB0 cikgJiYgKCBwdGVfdmFsKCpwdGVwdHIpICYgU1VQRVJfUEFHRV9NQVNLICkpIHsKKwkJZG93bl9w dGVfc3AocHRlcHRyLCBwdGVfdG9fc3BfaW5kZXgoKnB0ZXB0cikpOworCQlnb3RvIHJldHJ5Owor CX0KKwkqcHRlcHRyID0gcHRldmFsOworfQorZXh0ZXJuIGlubGluZSB2b2lkIHNldF9wdGUocHRl X3QgKnB0ZXB0ciwgcHRlX3QgcHRldmFsKSB7CisJaWYgKCBwdGVfbm9uZSgqcHRlcHRyKSAmJiAo IHB0ZV92YWwoKnB0ZXB0cikgJiBTVVBFUl9QQUdFX01BU0sgKSkgeworCQljbGVhcl9wdGVfc3Ao cHRlcHRyLCBwdGVfdG9fc3BfaW5kZXgoKnB0ZXB0cikpOworCX0KKwlzZXRfcHRlX3JhdyhwdGVw dHIsIG1rX3B0ZV9zcF9jbGVhbihwdGV2YWwpKTsKK30KK2V4dGVybiBpbmxpbmUgdm9pZCBwdGVf Y2xlYXIocHRlX3QgKnB0ZXApCXsgcHRlX3QgcHRlOyBwdGVfdmFsKHB0ZSk9MDsgc2V0X3B0ZShw dGVwLCBwdGUpOyB9CisjZW5kaWYKKwogLyoKICAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlm IHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4KICAqIFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4K ZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS9pbmNsdWRlL2FzbS1pMzg2L21tdV9jb250ZXh0LmggbGlu dXgvaW5jbHVkZS9hc20taTM4Ni9tbXVfY29udGV4dC5oCi0tLSBsaW51eC0yLjQuMTkvaW5jbHVk ZS9hc20taTM4Ni9tbXVfY29udGV4dC5oCVNhdCBBdWcgIDMgMDk6Mzk6NDUgMjAwMgorKysgbGlu dXgvaW5jbHVkZS9hc20taTM4Ni9tbXVfY29udGV4dC5oCVR1ZSBBdWcgIDYgMjA6NDg6MDAgMjAw MgpAQCAtNDIsNyArNDIsMTEgQEAKIAkJc2V0X2JpdChjcHUsICZuZXh0LT5jcHVfdm1fbWFzayk7 CiAJCXNldF9iaXQoY3B1LCAmbmV4dC0+Y29udGV4dC5jcHV2YWxpZCk7CiAJCS8qIFJlLWxvYWQg cGFnZSB0YWJsZXMgKi8KKyNpZmRlZiBDT05GSUdfU1VQRVJfUEFHRQorCQlsb2FkX2NyMyhuZXh0 LT5wZ2QrUFRSU19QRVJfUEdEKTsKKyNlbHNlCiAJCWxvYWRfY3IzKG5leHQtPnBnZCk7CisjZW5k aWYKIAl9CiAjaWZkZWYgQ09ORklHX1NNUAogCWVsc2UgewpkaWZmIC11ck4gbGludXgtMi40LjE5 L2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvcGdhbGxv Yy5oCi0tLSBsaW51eC0yLjQuMTkvaW5jbHVkZS9hc20taTM4Ni9wZ2FsbG9jLmgJU2F0IEF1ZyAg MyAwOTozOTo0NSAyMDAyCisrKyBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3BnYWxsb2MuaAlUdWUg QXVnICA2IDIwOjQ4OjAwIDIwMDIKQEAgLTExLDYgKzExLDI5IEBACiAjZGVmaW5lIHB0ZV9xdWlj a2xpc3QgKGN1cnJlbnRfY3B1X2RhdGEucHRlX3F1aWNrKQogI2RlZmluZSBwZ3RhYmxlX2NhY2hl X3NpemUgKGN1cnJlbnRfY3B1X2RhdGEucGd0YWJsZV9jYWNoZV9zeikKIAorI2lmIENPTkZJR19T VVBFUl9QQUdFCitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfcGFnZV9wb3B1bGF0ZSh1bnNpZ25l ZCBsb25nIGFkZHJlc3MsCisgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgcGdwcm90 X3QgcHJvdCwgaW50IHNwaW5kZXgpIHsKKyAgcGdkX3QgKnBnZDsKKyAgcG1kX3QgKnBtZDsKKyAg dW5pb24geworICAgICBwbWRfdCBlbnRyeTsKKyAgICAgcHRlX3QgcHRlX2VudHJ5OworICAgfSB4 OworICBwZ2QgPSBwZ2Rfb2Zmc2V0KGN1cnJlbnQtPm1tLCBhZGRyZXNzKTsKKyAgcG1kID0gcG1k X29mZnNldChwZ2QsIGFkZHJlc3MpOworICB4LnB0ZV9lbnRyeSA9IG1rX3B0ZShwYWdlLCBfX3Bn cHJvdChwZ3Byb3RfdmFsKHByb3QpfF9QQUdFX1BTRSkpIDsKKyAgeC5wdGVfZW50cnkgPSBwdGVf bWt3cml0ZShwdGVfbWtkaXJ0eSh4LnB0ZV9lbnRyeSkpOworI2lmIGRlZmluZWQgKENPTkZJR19Y ODZfUEFFKQorICBzZXRfcG1kX3JhdyhwbWQgKyBQVFJTX1BFUl9QTUQsIHguZW50cnkpOworI2Vs c2UKKyAgc2V0X3BtZF9yYXcocG1kICsgUFRSU19QRVJfUEdELCB4LmVudHJ5KTsKKyNlbmRpZgor fQorI2Vsc2UKKyNkZWZpbmUgc3VwZXJfcGFnZV9wb3B1bGF0ZShhZGRyZXNzLCBwYWdlLCBwcm90 LCBzcGluZGV4KSBkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKICNkZWZpbmUgcG1kX3BvcHVsYXRl KG1tLCBwbWQsIHB0ZSkgXAogCQlzZXRfcG1kKHBtZCwgX19wbWQoX1BBR0VfVEFCTEUgKyBfX3Bh KHB0ZSkpKQogCkBAIC0zNiwxNSArNTksMzEgQEAKIAogCWlmIChwZ2QpIHsKIAkJZm9yIChpID0g MDsgaSA8IFVTRVJfUFRSU19QRVJfUEdEOyBpKyspIHsKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQor CQkJdW5zaWduZWQgbG9uZyBwbWQgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsMSk7CisJ CQlpZiAoIXBtZCkKKwkJCQlnb3RvIG91dF9vb207CisJCQljbGVhcl9wYWdlKHBtZCArIChQVFJT X1BFUl9QTUQqc2l6ZW9mKHBtZF90KSkpOworI2Vsc2UKIAkJCXVuc2lnbmVkIGxvbmcgcG1kID0g X19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwogCQkJaWYgKCFwbWQpCiAJCQkJZ290byBvdXRf b29tOworI2VuZGlmCiAJCQljbGVhcl9wYWdlKHBtZCk7CiAJCQlzZXRfcGdkKHBnZCArIGksIF9f cGdkKDEgKyBfX3BhKHBtZCkpKTsKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCQkJc2V0X3BnZF9y YXcocGdkICsgaSArIFBUUlNfUEVSX1BHRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f cGdkKDEgKyBfX3BhKHBtZCArIChQVFJTX1BFUl9QTUQqc2l6ZW9mKHBtZF90KSkpKSk7CisjZW5k aWYKIAkJfQogCQltZW1jcHkocGdkICsgVVNFUl9QVFJTX1BFUl9QR0QsCiAJCQlzd2FwcGVyX3Bn X2RpciArIFVTRVJfUFRSU19QRVJfUEdELAogCQkJKFBUUlNfUEVSX1BHRCAtIFVTRVJfUFRSU19Q RVJfUEdEKSAqIHNpemVvZihwZ2RfdCkpOworI2lmIENPTkZJR19TVVBFUl9QQUdFCisJCW1lbWNw eShwZ2QgKyBQVFJTX1BFUl9QR0QgKyBVU0VSX1BUUlNfUEVSX1BHRCwKKwkJCXN3YXBwZXJfcGdf ZGlyICsgVVNFUl9QVFJTX1BFUl9QR0QsCisJCQkoUFRSU19QRVJfUEdEIC0gVVNFUl9QVFJTX1BF Ul9QR0QpICogc2l6ZW9mKHBnZF90KSk7CisjZW5kaWYKIAl9CiAJcmV0dXJuIHBnZDsKIG91dF9v b206CkBAIC01OCw2ICs5NywyMSBAQAogCiBzdGF0aWMgaW5saW5lIHBnZF90ICpnZXRfcGdkX3Ns b3codm9pZCkKIHsKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCXBnZF90ICpwZ2QgPSAocGdkX3Qg KilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsMSk7CisKKwlpZiAocGdkKSB7CisJCW1lbXNl dChwZ2QsIDAsIFVTRVJfUFRSU19QRVJfUEdEICogc2l6ZW9mKHBnZF90KSk7CisJCW1lbWNweShw Z2QgKyBVU0VSX1BUUlNfUEVSX1BHRCwKKwkJCXN3YXBwZXJfcGdfZGlyICsgVVNFUl9QVFJTX1BF Ul9QR0QsCisJCQkoUFRSU19QRVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBn ZF90KSk7CisJCW1lbXNldChwZ2QgKyBQVFJTX1BFUl9QR0QsCisgICAgICAgICAgICAgICAgICAg ICAgIDAsIFVTRVJfUFRSU19QRVJfUEdEICogc2l6ZW9mKHBnZF90KSk7CisJCW1lbWNweShwZ2Qg KyBQVFJTX1BFUl9QR0QgKyBVU0VSX1BUUlNfUEVSX1BHRCwKKwkJCXN3YXBwZXJfcGdfZGlyICsg VVNFUl9QVFJTX1BFUl9QR0QsCisJCQkoUFRSU19QRVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0Qp ICogc2l6ZW9mKHBnZF90KSk7CisJfQorI2Vsc2UKIAlwZ2RfdCAqcGdkID0gKHBnZF90ICopX19n ZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwogCiAJaWYgKHBnZCkgewpAQCAtNjYsNiArMTIwLDcg QEAKIAkJCXN3YXBwZXJfcGdfZGlyICsgVVNFUl9QVFJTX1BFUl9QR0QsCiAJCQkoUFRSU19QRVJf UEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBnZF90KSk7CiAJfQorI2VuZGlmCiAJ cmV0dXJuIHBnZDsKIH0KIApAQCAtOTYsMTIgKzE1MSwyMSBAQAogI2lmIGRlZmluZWQoQ09ORklH X1g4Nl9QQUUpCiAJaW50IGk7CiAKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCWZvciAoaSA9IDA7 IGkgPCBVU0VSX1BUUlNfUEVSX1BHRDsgaSsrKQorCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25n KV9fdmEocGdkX3ZhbChwZ2RbaV0pLTEpLCAxKTsKKyNlbHNlCiAJZm9yIChpID0gMDsgaSA8IFVT RVJfUFRSU19QRVJfUEdEOyBpKyspCiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylfX3ZhKHBn ZF92YWwocGdkW2ldKS0xKSk7CisjZW5kaWYKIAlrbWVtX2NhY2hlX2ZyZWUocGFlX3BnZF9jYWNo ZXAsIHBnZCk7CiAjZWxzZQorI2lmIENPTkZJR19TVVBFUl9QQUdFCisJZnJlZV9wYWdlcygodW5z aWduZWQgbG9uZylwZ2QsIDEpOworI2Vsc2UKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGdk KTsKICNlbmRpZgorI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9hbGxvY19v bmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKZGlmZiAtdXJO IGxpbnV4LTIuNC4xOS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtMmxldmVsLmggbGludXgvaW5j bHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC5oCi0tLSBsaW51eC0yLjQuMTkvaW5jbHVkZS9h c20taTM4Ni9wZ3RhYmxlLTJsZXZlbC5oCUZyaSBKdWwgMjcgMDU6NDA6MzIgMjAwMQorKysgbGlu dXgvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC5oCVR1ZSBBdWcgIDYgMjA6NDg6MDAg MjAwMgpAQCAtMzksMTMgKzM5LDI4IEBACiAgKiB3aXRoaW4gYSBwYWdlIHRhYmxlIGFyZSBkaXJl Y3RseSBtb2RpZmllZC4gIFRodXMsIHRoZSBmb2xsb3dpbmcKICAqIGhvb2sgaXMgbWFkZSBhdmFp bGFibGUuCiAgKi8KKyNpZm5kZWYgQ09ORklHX1NVUEVSX1BBR0UKICNkZWZpbmUgc2V0X3B0ZShw dGVwdHIsIHB0ZXZhbCkgKCoocHRlcHRyKSA9IHB0ZXZhbCkKKyNlbmRpZgogLyoKICAqIChwbWRz IGFyZSBmb2xkZWQgaW50byBwZ2RzIHNvIHRoaXMgZG9lc250IGdldCBhY3R1YWxseSBjYWxsZWQs CiAgKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rp b24uKQogICovCisjaWYgQ09ORklHX1NVUEVSX1BBR0UKKyNkZWZpbmUgc2V0X3BtZF9yYXcocG1k cHRyLCBwbWR2YWwpICgqKHBtZHB0cikgPSBwbWR2YWwpCisjZGVmaW5lIHNldF9wZ2RfcmF3KHBn ZHB0ciwgcGdkdmFsKSAoKihwZ2RwdHIpID0gcGdkdmFsKQorI2RlZmluZSBzZXRfcG1kKHBtZHB0 ciwgcG1kdmFsKSBkbyB7XAorICAgICAgICBzZXRfcG1kX3JhdyhwbWRwdHIsIHBtZHZhbCk7XAor ICAgICAgICBzZXRfcG1kX3JhdyhwbWRwdHIrUFRSU19QRVJfUEdELCBwbWR2YWwpO1wKKyAgICAg ICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbCkgZG8ge1wKKyAg ICAgICAgc2V0X3BnZF9yYXcocGdkcHRyLCBwZ2R2YWwpO1wKKyAgICAgICAgc2V0X3BnZF9yYXco cGdkcHRyK1BUUlNfUEVSX1BHRCwgcGdkdmFsKTtcCisgICAgICAgIH0gd2hpbGUgKDApCisjZWxz ZQogI2RlZmluZSBzZXRfcG1kKHBtZHB0ciwgcG1kdmFsKSAoKihwbWRwdHIpID0gcG1kdmFsKQog I2RlZmluZSBzZXRfcGdkKHBnZHB0ciwgcGdkdmFsKSAoKihwZ2RwdHIpID0gcGdkdmFsKQorI2Vu ZGlmCiAKICNkZWZpbmUgcGdkX3BhZ2UocGdkKSBcCiAoKHVuc2lnbmVkIGxvbmcpIF9fdmEocGdk X3ZhbChwZ2QpICYgUEFHRV9NQVNLKSkKQEAgLTU1LDkgKzcwLDkgQEAKIAlyZXR1cm4gKHBtZF90 ICopIGRpcjsKIH0KICNkZWZpbmUgcHRlcF9nZXRfYW5kX2NsZWFyKHhwKQlfX3B0ZSh4Y2hnKCYo eHApLT5wdGVfbG93LCAwKSkKLSNkZWZpbmUgcHRlX3NhbWUoYSwgYikJCSgoYSkucHRlX2xvdyA9 PSAoYikucHRlX2xvdykKKyNkZWZpbmUgcHRlX3NhbWUoYSwgYikgICAgICAgICAgKChhKS5wdGVf bG93ID09IChiKS5wdGVfbG93KQogI2RlZmluZSBwdGVfcGFnZSh4KQkJKG1lbV9tYXArKCh1bnNp Z25lZCBsb25nKSgoKHgpLnB0ZV9sb3cgPj4gUEFHRV9TSElGVCkpKSkKLSNkZWZpbmUgcHRlX25v bmUoeCkJCSghKHgpLnB0ZV9sb3cpCisjZGVmaW5lIHB0ZV9ub25lKHgpCQkoISgoeCkucHRlX2xv dyZ+U1VQRVJfUEFHRV9NQVNLKSkKICNkZWZpbmUgX19ta19wdGUocGFnZV9ucixwZ3Byb3QpIF9f cHRlKCgocGFnZV9ucikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHBncHJvdCkpCiAKICNl bmRpZiAvKiBfSTM4Nl9QR1RBQkxFXzJMRVZFTF9IICovCmRpZmYgLXVyTiBsaW51eC0yLjQuMTkv aW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTNsZXZlbC5oIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYv cGd0YWJsZS0zbGV2ZWwuaAotLS0gbGludXgtMi40LjE5L2luY2x1ZGUvYXNtLWkzODYvcGd0YWJs ZS0zbGV2ZWwuaAlGcmkgSnVsIDI3IDA1OjQwOjMyIDIwMDEKKysrIGxpbnV4L2luY2x1ZGUvYXNt LWkzODYvcGd0YWJsZS0zbGV2ZWwuaAlUdWUgQXVnICA2IDIwOjQ4OjAwIDIwMDIKQEAgLTQzLDE2 ICs0MywzMyBAQAogICogbm90IHBvc3NpYmxlLCB1c2UgcHRlX2dldF9hbmRfY2xlYXIgdG8gb2J0 YWluIHRoZSBvbGQgcHRlCiAgKiB2YWx1ZSBhbmQgdGhlbiB1c2Ugc2V0X3B0ZSB0byB1cGRhdGUg aXQuICAtYmVuCiAgKi8KKyNpZm5kZWYgQ09ORklHX1NVUEVSX1BBR0UKIHN0YXRpYyBpbmxpbmUg dm9pZCBzZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCiB7CiAJcHRlcC0+cHRlX2hpZ2gg PSBwdGUucHRlX2hpZ2g7CiAJc21wX3dtYigpOwogCXB0ZXAtPnB0ZV9sb3cgPSBwdGUucHRlX2xv dzsKIH0KKyNlbmRpZgorI2lmIENPTkZJR19TVVBFUl9QQUdFCisjZGVmaW5lIHNldF9wZ2RfcmF3 KHBnZHB0cixwZ2R2YWwpIFwKKwkJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nIGxvbmcgKikocGdk cHRyKSxwZ2RfdmFsKHBnZHZhbCkpCisjZGVmaW5lIHNldF9wbWRfcmF3KHBtZHB0cixwbWR2YWwp IFwKKwkJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nIGxvbmcgKikocG1kcHRyKSxwbWRfdmFsKHBt ZHZhbCkpCisjZGVmaW5lIHNldF9wbWQocG1kcHRyLHBtZHZhbCkgZG8ge1wKKyAgICBzZXRfcG1k X3JhdyhwbWRwdHIscG1kdmFsKTtcCisgICAgc2V0X3BtZF9yYXcocG1kcHRyK1BUUlNfUEVSX1BN RCxwbWR2YWwpO1wKKyAgICB9IHdoaWxlKDApCisjZGVmaW5lIHNldF9wZ2QocGdkcHRyLHBnZHZh bCkgZG8ge1wKKyAgICBzZXRfcGdkX3JhdyhwZ2RwdHIscGdkdmFsKTtcCisgICAgc2V0X3BnZF9y YXcocGdkcHRyK1BUUlNfUEVSX1BHRCxwZ2R2YWwpO1wKKyAgICB9IHdoaWxlKDApCisjZWxzZQog I2RlZmluZSBzZXRfcG1kKHBtZHB0cixwbWR2YWwpIFwKIAkJc2V0XzY0Yml0KCh1bnNpZ25lZCBs b25nIGxvbmcgKikocG1kcHRyKSxwbWRfdmFsKHBtZHZhbCkpCiAjZGVmaW5lIHNldF9wZ2QocGdk cHRyLHBnZHZhbCkgXAogCQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShwZ2RwdHIp LHBnZF92YWwocGdkdmFsKSkKKyNlbmRpZgogCiAvKgogICogUGVudGl1bS1JSSBlcnJhdHVtIEEx MzogaW4gUEFFIG1vZGUgd2UgZXhwbGljaXRseSBoYXZlIHRvIGZsdXNoCkBAIC04Nyw3ICsxMDQs NyBAQAogfQogCiAjZGVmaW5lIHB0ZV9wYWdlKHgpCShtZW1fbWFwKygoKHgpLnB0ZV9sb3cgPj4g UEFHRV9TSElGVCkgfCAoKHgpLnB0ZV9oaWdoIDw8ICgzMiAtIFBBR0VfU0hJRlQpKSkpCi0jZGVm aW5lIHB0ZV9ub25lKHgpCSghKHgpLnB0ZV9sb3cgJiYgISh4KS5wdGVfaGlnaCkKKyNkZWZpbmUg cHRlX25vbmUoeCkJKCEoKHgpLnB0ZV9sb3cmflNVUEVSX1BBR0VfTUFTSykgJiYgISh4KS5wdGVf aGlnaCkKIAogc3RhdGljIGlubGluZSBwdGVfdCBfX21rX3B0ZSh1bnNpZ25lZCBsb25nIHBhZ2Vf bnIsIHBncHJvdF90IHBncHJvdCkKIHsKZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS9pbmNsdWRlL2Fz bS1pMzg2L3BndGFibGUuaCBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAotLS0gbGlu dXgtMi40LjE5L2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oCVNhdCBBdWcgIDMgMDk6Mzk6NDUg MjAwMgorKysgbGludXgvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgJVHVlIEF1ZyAgNiAyMDo0 ODowMCAyMDAyCkBAIC0yMSw3ICsyMSwxMSBAQAogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNl bmRpZgogCisjaWYgQ09ORklHX1NVUEVSX1BBR0UKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2Rp clsyMDQ4XTsKKyNlbHNlCiBleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbMTAyNF07CisjZW5k aWYKIGV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOwogCiAvKiBDYWNoZXMgYXJlbid0IGJy YWluLWRlYWQgb24gdGhlIGludGVsLiAqLwpAQCAtOTgsNiArMTAyLDE0IEBACiAKICNlbmRpZiAv KiAhX19BU1NFTUJMWV9fICovCiAKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorI2RlZmluZSBTVVBF Ul9QQUdFX01BU0sgX1BBR0VfU1VQRVIKKyNkZWZpbmUgU1VQRVJfUEFHRV9NQVNLX1NISUZUIDkK KyNkZWZpbmUgU1VQRVJfUEFHRV9OUiAyCisjZWxzZQorI2RlZmluZSBTVVBFUl9QQUdFX05SIDEK KyNkZWZpbmUgU1VQRVJfUEFHRV9NQVNLIDAKKyNlbmRpZgogLyoKICAqIFRoZSBMaW51eCB4ODYg cGFnaW5nIGFyY2hpdGVjdHVyZSBpcyAnY29tcGlsZS10aW1lIGR1YWwtbW9kZScsIGl0CiAgKiBp bXBsZW1lbnRzIGJvdGggdGhlIHRyYWRpdGlvbmFsIDItbGV2ZWwgeDg2IHBhZ2UgdGFibGVzIGFu ZCB0aGUKQEAgLTE4NSw2ICsxOTcsNyBAQAogI2RlZmluZSBfUEFHRV9ESVJUWQkweDA0MAogI2Rl ZmluZSBfUEFHRV9QU0UJMHgwODAJLyogNCBNQiAob3IgMk1CKSBwYWdlLCBQZW50aXVtKywgaWYg cHJlc2VudC4uICovCiAjZGVmaW5lIF9QQUdFX0dMT0JBTAkweDEwMAkvKiBHbG9iYWwgVExCIGVu dHJ5IFBQcm8rICovCisjZGVmaW5lIF9QQUdFX1NVUEVSCTB4MjAwCS8qIFN1cGVyUGFnZSBjYW5k aWRhdGVkIHBhZ2UgKi8KIAogI2RlZmluZSBfUEFHRV9QUk9UTk9ORQkweDA4MAkvKiBJZiBub3Qg cHJlc2VudCAqLwogCkBAIC0yOTMsNiArMzA2LDcxIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcHRl cF9zZXRfd3Jwcm90ZWN0KHB0ZV90ICpwdGVwKQkJeyBjbGVhcl9iaXQoX1BBR0VfQklUX1JXLCBw dGVwKTsgfQogc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfbWtkaXJ0eShwdGVfdCAqcHRlcCkJCQl7 IHNldF9iaXQoX1BBR0VfQklUX0RJUlRZLCBwdGVwKTsgfQogCisjaWYgQ09ORklHX1g4Nl9QQUUK KyNkZWZpbmUgU0laRU9GX1BUUl9MT0cyIDMKKyNlbHNlCisjZGVmaW5lIFNJWkVPRl9QVFJfTE9H MiAyCisjZW5kaWYgCisjaWYgQ09ORklHX1NVUEVSX1BBR0UKK2V4dGVybiBwZ3Byb3RfdCBzdXBl cl9wYWdlX3Byb3RbXTsKK2V4dGVybiBpbnQgc3VwZXJfcGFnZV9vcmRlcltdOworI2RlZmluZSBw dGVfdG9fc3BfaW5kZXgoeCkgICgoKHgpLnB0ZV9sb3cgJiBTVVBFUl9QQUdFX01BU0spID4+IFNV UEVSX1BBR0VfTUFTS19TSElGVCkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgbWtfcHRlX3NwX2NsZWFu KHB0ZV90IHB0ZSkKKyAgICB7KHB0ZSkucHRlX2xvdyAmPSB+U1VQRVJfUEFHRV9NQVNLOyByZXR1 cm4gcHRlO30gCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcG1kX3NwKHBtZF90ICpwbWQpIHsK KyNpZiBDT05GSUdfWDg2X1BBRQorICAgICAgICAgICBzZXRfcG1kX3JhdygocG1kK1BUUlNfUEVS X1BNRCksICpwbWQpOworI2Vsc2UKKyAgICAgICAgICAgc2V0X3BtZF9yYXcoKHBtZCtQVFJTX1BF Ul9QR0QpLCAqcG1kKTsKKworI2VuZGlmIAorICAgIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkb3du X3B0ZV9zcChwdGVfdCAqcHRlcHRyLCBpbnQgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpbnQg aSxvcmRlcjsKKyAgICAgICAgICAgICAgICBwdGVfdCAqYWRkcjsKKyAgICAgICAgICAgICAgICBv cmRlciA9IHN1cGVyX3BhZ2Vfb3JkZXJbaW5kZXhdOworICAgICAgICAgICAgICAgIGFkZHIgPSAo cHRlX3QgKikoKHVuc2lnbmVkIGxvbmcpIHB0ZXB0ciAmCisgICAgICAgICAgICAgICAgICAgICAg IH4oKDFVTDw8KG9yZGVyICsgU0laRU9GX1BUUl9MT0cyKSkgLSAxKSk7CisgICAgICAgICAgICAg ICAgZm9yICggaT0wOyBpIDwgMTw8b3JkZXI7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAg ICAgKCooYWRkcitpKSkucHRlX2xvdyA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgq KGFkZHIraSkpLnB0ZV9sb3cgJiB+U1VQRVJfUEFHRV9NQVNLKSB8CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdwcm90X3ZhbChzdXBlcl9wYWdlX3Byb3RbaW5kZXggLTFdKTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wdGVf c3AocHRlX3QgKnB0ZXB0ciwgaW50IGluZGV4KSB7CisgICAgICAgICAgICAgICAgaW50IGksb3Jk ZXI7CisgICAgICAgICAgICAgICAgcHRlX3QgKmFkZHI7CisgICAgICAgICAgICAgICAgb3JkZXIg PSBzdXBlcl9wYWdlX29yZGVyW2luZGV4XTsKKyAgICAgICAgICAgICAgICBhZGRyID0gKHB0ZV90 ICopKCh1bnNpZ25lZCBsb25nKSBwdGVwdHIgJgorICAgICAgICAgICAgICAgICAgICAgICAgfigo MVVMPDwob3JkZXIgKyBTSVpFT0ZfUFRSX0xPRzIpKSAtIDEpKTsKKyAgICAgICAgICAgICAgICBm b3IgKCBpPTA7IGkgPCAxPDxvcmRlcjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAo KihhZGRyK2kpKS5wdGVfbG93ICY9ICB+U1VQRVJfUEFHRV9NQVNLOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgfQorI2lmIENPTkZJR19YODZfUEFFCitleHRlcm4gaW5saW5lIHZvaWQgc2V0 X3B0ZV9yYXcocHRlX3QgKnB0ZXB0ciwgcHRlX3QgcHRldmFsKSB7CisgICAgICAgIGlmICggcHRl X3ByZXNlbnQoKnB0ZXB0cikgJiYgKCAoKnB0ZXB0cikucHRlX2xvdyAmIFNVUEVSX1BBR0VfTUFT SyApKSB7CisgICAgICAgICAgICAgICAgZG93bl9wdGVfc3AocHRlcHRyLCBwdGVfdG9fc3BfaW5k ZXgoKnB0ZXB0cikpOworICAgICAgICB9CisJcHRlcHRyLT5wdGVfaGlnaCA9IHB0ZS5wdGVfaGln aDsKKwlzbXBfd21iKCk7CisJcHRlcHRyLT5wdGVfbG93ID0gcHRlLnB0ZV9sb3c7Cit9CisjZWxz ZQorZXh0ZXJuIGlubGluZSB2b2lkIHNldF9wdGVfcmF3KHB0ZV90ICpwdGVwdHIsIHB0ZV90IHB0 ZXZhbCkgeworICAgICAgICBpZiAoIHB0ZV9wcmVzZW50KCpwdGVwdHIpICYmICggKCpwdGVwdHIp LnB0ZV9sb3cgJiBTVVBFUl9QQUdFX01BU0sgKSkgeworICAgICAgICAgICAgICAgIGRvd25fcHRl X3NwKHB0ZXB0ciwgcHRlX3RvX3NwX2luZGV4KCpwdGVwdHIpKTsKKyAgICAgICAgfQorICAgICAg ICAqcHRlcHRyID0gcHRldmFsOworfQorI2VuZGlmCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0 ZShwdGVfdCAqcHRlcHRyLCBwdGVfdCBwdGV2YWwpIHsKKyAgICAgICAgaWYgKCBwdGVfbm9uZSgq cHRlcHRyKSAmJiAoICgqcHRlcHRyKS5wdGVfbG93ICYgU1VQRVJfUEFHRV9NQVNLICkpIHsKKyAg ICAgICAgICAgICAgICBjbGVhcl9wdGVfc3AocHRlcHRyLCBwdGVfdG9fc3BfaW5kZXgoKnB0ZXB0 cikpOworICAgICAgICB9CisgICAgICAgIHNldF9wdGVfcmF3KHB0ZXB0ciwgbWtfcHRlX3NwX2Ns ZWFuKHB0ZXZhbCkpOworfQorI2VuZGlmCiAvKgogICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNv bnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKICAqIGFuZCBhIHBh Z2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCkBA IC0zNDIsMTEgKzQyMCwxMiBAQAogCiAvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5 ICovCiAjZGVmaW5lIFNXUF9UWVBFKHgpCQkJKCgoeCkudmFsID4+IDEpICYgMHgzZikKLSNkZWZp bmUgU1dQX09GRlNFVCh4KQkJCSgoeCkudmFsID4+IDgpCi0jZGVmaW5lIFNXUF9FTlRSWSh0eXBl LCBvZmZzZXQpCQkoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgMSkgfCAoKG9mZnNldCkgPDwg OCkgfSkKKyNkZWZpbmUgU1dQX09GRlNFVCh4KQkJCSgoeCkudmFsID4+IDEyKQorI2RlZmluZSBT V1BfRU5UUlkodHlwZSwgb2Zmc2V0KQkJKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDEpIHwg KChvZmZzZXQpIDw8IDEyKSB9KQogI2RlZmluZSBwdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dw X2VudHJ5X3QpIHsgKHB0ZSkucHRlX2xvdyB9KQogI2RlZmluZSBzd3BfZW50cnlfdG9fcHRlKHgp CQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKIAorCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwog CiAvKiBOZWVkcyB0byBiZSBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBsaW51eC9tbS5oLCBhcyBp dCBpcyBhcmNoIGRlcGVuZGVudCAqLwpkaWZmIC11ck4gbGludXgtMi40LjE5L2luY2x1ZGUvYXNt LXNwYXJjNjQvcGd0YWJsZS5oIGxpbnV4L2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCi0t LSBsaW51eC0yLjQuMTkvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgJU2F0IEF1ZyAgMyAw OTozOTo0NSAyMDAyCisrKyBsaW51eC9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaAlUdWUg QXVnICA2IDE5OjUyOjMxIDIwMDIKQEAgLTYxLDEzICs2MSwxNiBAQAogI2RlZmluZSBQR0RJUl9T SVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCiAjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0la RS0xKSkKIAorI2RlZmluZSBTSVpFT0ZfUFRSX0xPRzIJCQkzCisKICNpZm5kZWYgX19BU1NFTUJM WV9fCiAKIC8qIENlcnRhaW4gYXJjaGl0ZWN0dXJlcyBuZWVkIHRvIGRvIHNwZWNpYWwgdGhpbmdz IHdoZW4gcHRlJ3MKICAqIHdpdGhpbiBhIHBhZ2UgdGFibGUgYXJlIGRpcmVjdGx5IG1vZGlmaWVk LiAgVGh1cywgdGhlIGZvbGxvd2luZwogICogaG9vayBpcyBtYWRlIGF2YWlsYWJsZS4KLSAqLwor TW92ZWQgZm9yIHRoZSBTdXBlclBhZ2UuIGJ5IE5haGlrbyBTaGltaXp1LgogI2RlZmluZSBzZXRf cHRlKHB0ZXB0ciwgcHRldmFsKSAoKCoocHRlcHRyKSkgPSAocHRldmFsKSkKKyAqLwogCiAvKiBF bnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbC4gKi8KICNkZWZpbmUgUFRSU19QRVJfUFRF CQkoMVVMIDw8IChQQUdFX1NISUZULTMpKQpAQCAtMTM1LDcgKzEzOCw3IEBACiAjZWxpZiBQQUdF X1NISUZUID09IDE5CiAjZGVmaW5lIF9QQUdFX1NaQklUUwlfUEFHRV9TWjUxMksKICNlbGlmIFBB R0VfU0hJRlQgPT0gMjIKLSNkZWZpbmUgX1BBR0VfU1pCSVRTCV9QQUdFX1NaNE0KKyNkZWZpbmUg X1BBR0VfU1pCSVRTCV9QQUdFX1NaNE1CCiAjZWxzZQogI2Vycm9yIFdyb25nIFBBR0VfU0hJRlQg c3BlY2lmaWVkCiAjZW5kaWYKQEAgLTIxNyw5ICsyMjAsNyBAQAogCShwZ2RfdmFsKCoocGdkcCkp ID0gKF9fcGEoKHVuc2lnbmVkIGxvbmcpIChwbWRwKSkgPj4gMTFVTCkpCiAjZGVmaW5lIHBtZF9w YWdlKHBtZCkJCQkoKHVuc2lnbmVkIGxvbmcpIF9fdmEoKHBtZF92YWwocG1kKTw8MTFVTCkpKQog I2RlZmluZSBwZ2RfcGFnZShwZ2QpCQkJKCh1bnNpZ25lZCBsb25nKSBfX3ZhKChwZ2RfdmFsKHBn ZCk8PDExVUwpKSkKLSNkZWZpbmUgcHRlX25vbmUocHRlKSAJCQkoIXB0ZV92YWwocHRlKSkKICNk ZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX1BSRVNFTlQpCi0j ZGVmaW5lIHB0ZV9jbGVhcihwdGUpCQkJKHB0ZV92YWwoKihwdGUpKSA9IDBVTCkKICNkZWZpbmUg cG1kX25vbmUocG1kKQkJCSghcG1kX3ZhbChwbWQpKQogI2RlZmluZSBwbWRfYmFkKHBtZCkJCQko MCkKICNkZWZpbmUgcG1kX3ByZXNlbnQocG1kKQkJKHBtZF92YWwocG1kKSAhPSAwVUwpCkBAIC0y MjksNiArMjMwLDU5IEBACiAjZGVmaW5lIHBnZF9wcmVzZW50KHBnZCkJCShwZ2RfdmFsKHBnZCkg IT0gMFVMKQogI2RlZmluZSBwZ2RfY2xlYXIocGdkcCkJCQkocGdkX3ZhbCgqKHBnZHApKSA9IDBV TCkKIAorI2RlZmluZSBjbGVhcl9wbWRfc3AocG1kKSBkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBz dXBlcl9wYWdlX3BvcHVsYXRlKGFkciwgcGFnZSwgcHJvdCwgaW5kZXgpIGRvIHt9IHdoaWxlICgw KQorCisjaWZuZGVmIENPTkZJR19TVVBFUl9QQUdFCisjZGVmaW5lIFNVUEVSX1BBR0VfTlIgMQor I2RlZmluZSBTVVBFUl9QQUdFX01BU0sgMAorI2RlZmluZSBzZXRfcHRlKHB0ZXB0ciwgcHRldmFs KSAoKCoocHRlcHRyKSkgPSAocHRldmFsKSkKKyNkZWZpbmUgcHRlX25vbmUocHRlKSAgICAgICAg ICAgICAgICAgICAoIXB0ZV92YWwocHRlKSkKKyNkZWZpbmUgcHRlX2NsZWFyKHB0ZSkgICAgICAg ICAgICAgICAgICAocHRlX3ZhbCgqKHB0ZSkpID0gMFVMKQorI2Vsc2UKKyNkZWZpbmUgU1VQRVJf UEFHRV9NQVNLIChfUEFHRV9TWjY0S3xfUEFHRV9TWjUxMkt8X1BBR0VfU1o0TUIpCisjZGVmaW5l IFNVUEVSX1BBR0VfTUFTS19TSElGVCA2MQorI2RlZmluZSBTVVBFUl9QQUdFX05SIDQKK2V4dGVy biBpbnQgc3VwZXJfcGFnZV9vcmRlcltdOworZXh0ZXJuIHBncHJvdF90IHN1cGVyX3BhZ2VfcHJv dFtdOworZXh0ZXJuIGlubGluZSBpbnQgcHRlX25vbmUocHRlX3QgcHRlKSAgICAgICAgICB7IHJl dHVybiAhKHB0ZV92YWwocHRlKSAmIH5TVVBFUl9QQUdFX01BU0spOyB9CisjZGVmaW5lIHB0ZV90 b19zcF9pbmRleCh4KSAgKChwdGVfdmFsKHgpICYgU1VQRVJfUEFHRV9NQVNLKSA+PiBTVVBFUl9Q QUdFX01BU0tfU0hJRlQpCitleHRlcm4gaW5saW5lIHB0ZV90IG1rX3B0ZV9zcF9jbGVhbihwdGVf dCBwdGUpIHtwdGVfdmFsKHB0ZSkgJj0gflNVUEVSX1BBR0VfTUFTSzsgcmV0dXJuIHB0ZTt9IAor ZXh0ZXJuIGlubGluZSB2b2lkIGRvd25fcHRlX3NwKHB0ZV90ICpwdGVwdHIsIGludCBpbmRleCkg eworICAgICAgICAgICAgICAgaW50IGksb3JkZXI7CisgICAgICAgICAgICAgICBwdGVfdCAqYWRk cjsKKyAgICAgICAgICAgICAgIG9yZGVyID0gc3VwZXJfcGFnZV9vcmRlcltpbmRleF07CisgICAg ICAgICAgICAgICBhZGRyID0gKHB0ZV90ICopKCh1bnNpZ25lZCBsb25nKSBwdGVwdHIgJiB+KCgx VUw8PChvcmRlciArIFNJWkVPRl9QVFJfTE9HMikpIC0gMSkpOworICAgICAgICAgICAgICAgZm9y ICggaT0wOyBpIDwgMTw8b3JkZXI7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICBwdGVf dmFsKCooYWRkcitpKSkgPSAocHRlX3ZhbCgqKGFkZHIraSkpICYgflNVUEVSX1BBR0VfTUFTSykg fCBwZ3Byb3RfdmFsKHN1cGVyX3BhZ2VfcHJvdFtpbmRleCAtMV0pOworICAgICAgICAgICAgICAg fQorICAgICAgIH0KK2V4dGVybiBpbmxpbmUgdm9pZCBjbGVhcl9wdGVfc3AocHRlX3QgKnB0ZXB0 ciwgaW50IGluZGV4KSB7CisgICAgICAgICAgICAgICBpbnQgaSxvcmRlcjsKKyAgICAgICAgICAg ICAgIHB0ZV90ICphZGRyOworICAgICAgICAgICAgICAgb3JkZXIgPSBzdXBlcl9wYWdlX29yZGVy W2luZGV4XTsKKyAgICAgICAgICAgICAgIGFkZHIgPSAocHRlX3QgKikoKHVuc2lnbmVkIGxvbmcp IHB0ZXB0ciAmIH4oKDFVTDw8KG9yZGVyICsgU0laRU9GX1BUUl9MT0cyKSkgLSAxKSk7CisgICAg ICAgICAgICAgICBmb3IgKCBpPTA7IGkgPCAxPDxvcmRlcjsgaSsrKSB7CisgICAgICAgICAgICAg ICAgICAgICAgIHB0ZV92YWwoKihhZGRyK2kpKSAmPSAgflNVUEVSX1BBR0VfTUFTSzsKKyAgICAg ICAgICAgICAgIH0KKyAgICAgICB9CitleHRlcm4gaW5saW5lIHZvaWQgc2V0X3B0ZV9yYXcocHRl X3QgKnB0ZXB0ciwgcHRlX3QgcHRldmFsKSB7CisgICAgICAgcmV0cnk6CisgICAgICAgaWYgKCBw dGVfcHJlc2VudCgqcHRlcHRyKSAmJiAoIHB0ZV92YWwoKnB0ZXB0cikgJiBTVVBFUl9QQUdFX01B U0sgKSkgeworICAgICAgICAgICAgICAgZG93bl9wdGVfc3AocHRlcHRyLCBwdGVfdG9fc3BfaW5k ZXgoKnB0ZXB0cikpOworICAgICAgICAgICAgICAgZ290byByZXRyeTsKKyAgICAgICB9CisgICAg ICAgKnB0ZXB0ciA9IHB0ZXZhbDsKK30KK2V4dGVybiBpbmxpbmUgdm9pZCBzZXRfcHRlKHB0ZV90 ICpwdGVwdHIsIHB0ZV90IHB0ZXZhbCkgeworICAgICAgIGlmICggcHRlX25vbmUoKnB0ZXB0cikg JiYgKCBwdGVfdmFsKCpwdGVwdHIpICYgU1VQRVJfUEFHRV9NQVNLICkpIHsKKyAgICAgICAgICAg ICAgIGNsZWFyX3B0ZV9zcChwdGVwdHIsIHB0ZV90b19zcF9pbmRleCgqcHRlcHRyKSk7CisgICAg ICAgfQorICAgICAgIHNldF9wdGVfcmF3KHB0ZXB0ciwgbWtfcHRlX3NwX2NsZWFuKHB0ZXZhbCkp OworfQorZXh0ZXJuIGlubGluZSB2b2lkIHB0ZV9jbGVhcihwdGVfdCAqcHRlcCkgICAgICB7IHB0 ZV90IHB0ZTsgcHRlX3ZhbChwdGUpPTA7IHNldF9wdGUocHRlcCwgcHRlKTsgfQorI2VuZGlmCisK IC8qIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4KICAq IFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4KICAqLwpkaWZmIC11ck4gbGludXgtMi40LjE5 L2luY2x1ZGUvbGludXgvbW0uaCBsaW51eC9pbmNsdWRlL2xpbnV4L21tLmgKLS0tIGxpbnV4LTIu NC4xOS9pbmNsdWRlL2xpbnV4L21tLmgJU2F0IEF1ZyAgMyAwOTozOTo0NSAyMDAyCisrKyBsaW51 eC9pbmNsdWRlL2xpbnV4L21tLmgJVHVlIEF1ZyAgNiAyMDo0ODowMCAyMDAyCkBAIC00MDMsNiAr NDAzLDIxIEBACiAjZGVmaW5lIFBhZ2VIaWdoTWVtKHBhZ2UpCQkwIC8qIG5lZWRlZCB0byBvcHRp bWl6ZSBhd2F5IGF0IGNvbXBpbGUgdGltZSAqLwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU1VQ RVJfUEFHRQorZXh0ZXJuIGludCBzdXBlcl9wYWdlX25yOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcg c3VwZXJfcGFnZV9yZXNlcnZlW107CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdXBlcl9wYWdlX2Fs bG9jYXRlW107CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdXBlcl9wYWdlX2Rvd25ncmFkZVtdOwor dm9pZCBzdXBlcl9wYWdlX2luaXQodm9pZCk7CisjZWxzZQorI2RlZmluZSBwdGVfdG9fc3BfaW5k ZXgoeCkgKDApCisjZGVmaW5lIGRvd25fcHRlX3NwKHB0ZSwgb3JkZXIpCisjZGVmaW5lIHNldF9w dGVfcmF3KHB0ZXAsIHB0ZSkgc2V0X3B0ZShwdGVwLCBwdGUpCisjZGVmaW5lIHN1cGVyX3BhZ2Vf cG9wdWxhdGUoYWRyLCBwYWdlLCBwcm90LCBpbmRleCkKKyNkZWZpbmUgY2xlYXJfcG1kX3NwKHBt ZCkKKyNlbmRpZgorCisKICNkZWZpbmUgU2V0UGFnZVJlc2VydmVkKHBhZ2UpCQlzZXRfYml0KFBH X3Jlc2VydmVkLCAmKHBhZ2UpLT5mbGFncykKICNkZWZpbmUgQ2xlYXJQYWdlUmVzZXJ2ZWQocGFn ZSkJCWNsZWFyX2JpdChQR19yZXNlcnZlZCwgJihwYWdlKS0+ZmxhZ3MpCiAKQEAgLTQ4MSw2ICs0 OTYsNyBAQAogZXh0ZXJuIHB0ZV90ICpGQVNUQ0FMTChwdGVfYWxsb2Moc3RydWN0IG1tX3N0cnVj dCAqbW0sIHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykpOwogZXh0ZXJuIGludCBo YW5kbGVfbW1fZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sc3RydWN0IHZtX2FyZWFfc3RydWN0 ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHdyaXRlX2FjY2Vzcyk7CiBleHRlcm4g aW50IG1ha2VfcGFnZXNfcHJlc2VudCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcg ZW5kKTsKK2V4dGVybiBpbnQgbWFrZV9wdGVzX3ByZXNlbnQodW5zaWduZWQgbG9uZyBhZGRyLCB1 bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4gaW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0 YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbiwg aW50IHdyaXRlKTsKIGV4dGVybiBpbnQgcHRyYWNlX3JlYWRkYXRhKHN0cnVjdCB0YXNrX3N0cnVj dCAqdHNrLCB1bnNpZ25lZCBsb25nIHNyYywgY2hhciAqZHN0LCBpbnQgbGVuKTsKIGV4dGVybiBp bnQgcHRyYWNlX3dyaXRlZGF0YShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY2hhciAqIHNyYywg dW5zaWduZWQgbG9uZyBkc3QsIGludCBsZW4pOwpAQCAtNTE2LDYgKzUzMiwxMiBAQAogZXh0ZXJu IHZvaWQgc2lfbWVtaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqIHZhbCk7CiBleHRlcm4gdm9pZCBzd2Fw aW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90KTsKIAorZXh0ZXJuIHZvaWQgX19icmVha19hcmVhIChz dHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvcmRlcik7CitzdGF0aWMgaW5saW5lIHZv aWQgYnJlYWtfYXJlYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvcmRlcikKK3sK KwlfX2JyZWFrX2FyZWEocGFnZSwgb3JkZXIpOworfQorCiBleHRlcm4gc3RydWN0IGFkZHJlc3Nf c3BhY2Ugc3dhcHBlcl9zcGFjZTsKICNkZWZpbmUgUGFnZVN3YXBDYWNoZShwYWdlKSAoKHBhZ2Up LT5tYXBwaW5nID09ICZzd2FwcGVyX3NwYWNlKQogCmRpZmYgLXVyTiBsaW51eC0yLjQuMTkva2Vy bmVsL3N5c2N0bC5jIGxpbnV4L2tlcm5lbC9zeXNjdGwuYwotLS0gbGludXgtMi40LjE5L2tlcm5l bC9zeXNjdGwuYwlTYXQgQXVnICAzIDA5OjM5OjQ2IDIwMDIKKysrIGxpbnV4L2tlcm5lbC9zeXNj dGwuYwlUdWUgQXVnICA2IDE5OjUyOjMxIDIwMDIKQEAgLTE0MCw2ICsxNDAsOSBAQAogc3RhdGlj IHZvaWQgcmVnaXN0ZXJfcHJvY190YWJsZShjdGxfdGFibGUgKiwgc3RydWN0IHByb2NfZGlyX2Vu dHJ5ICopOwogc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9wcm9jX3RhYmxlKGN0bF90YWJsZSAqLCBz dHJ1Y3QgcHJvY19kaXJfZW50cnkgKik7CiAjZW5kaWYKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQor dm9pZCBzdXBlcl9wYWdlX2luaXQodm9pZCk7CisjZW5kaWYKIAogLyogVGhlIGRlZmF1bHQgc3lz Y3RsIHRhYmxlczogKi8KIApAQCAtMzI4LDYgKzMzMSw5IEBACiAJcmVnaXN0ZXJfcHJvY190YWJs ZShyb290X3RhYmxlLCBwcm9jX3N5c19yb290KTsKIAlpbml0X2lycV9wcm9jKCk7CiAjZW5kaWYK KyNpZmRlZiBDT05GSUdfU1VQRVJfUEFHRQorCXN1cGVyX3BhZ2VfaW5pdCgpOworI2VuZGlmCiB9 CiAKIGludCBkb19zeXNjdGwoaW50ICpuYW1lLCBpbnQgbmxlbiwgdm9pZCAqb2xkdmFsLCBzaXpl X3QgKm9sZGxlbnAsCmRpZmYgLXVyTiBsaW51eC0yLjQuMTkvbW0vTWFrZWZpbGUgbGludXgvbW0v TWFrZWZpbGUKLS0tIGxpbnV4LTIuNC4xOS9tbS9NYWtlZmlsZQlTYXQgQXVnICAzIDA5OjM5OjQ2 IDIwMDIKKysrIGxpbnV4L21tL01ha2VmaWxlCVR1ZSBBdWcgIDYgMTk6NTI6MzEgMjAwMgpAQCAt MTgsNCArMTgsNiBAQAogCiBvYmotJChDT05GSUdfSElHSE1FTSkgKz0gaGlnaG1lbS5vCiAKK29i ai0kKENPTkZJR19TVVBFUl9QQUdFKSArPSBzdXBlcl9wYWdlLm8KKwogaW5jbHVkZSAkKFRPUERJ UikvUnVsZXMubWFrZQpkaWZmIC11ck4gbGludXgtMi40LjE5L21tL21lbW9yeS5jIGxpbnV4L21t L21lbW9yeS5jCi0tLSBsaW51eC0yLjQuMTkvbW0vbWVtb3J5LmMJU2F0IEF1ZyAgMyAwOTozOTo0 NiAyMDAyCisrKyBsaW51eC9tbS9tZW1vcnkuYwlUdWUgQXVnICA2IDIxOjAxOjU2IDIwMDIKQEAg LTM0LDYgKzM0LDggQEAKICAqCiAgKiAxNi4wNy45OSAgLSAgU3VwcG9ydCBvZiBCSUdNRU0gYWRk ZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHCiAgKgkJKEdlcmhhcmQuV2ljaGVydEBw ZGIuc2llbWVucy5kZSkKKyAqIDEzLjA2LjAwICAtICBTdXBwb3J0IG9mIFNVUEVSX1BBR0UgYWRk ZWQgYnkgTmFvaGlrbyBTaGltaXp1LCBUb2thaSBVbml2LgorICAgICAgICAgICAgICAgIDxuc2hp bWl6dUBrZXlha2kuY2MudS10b2thaS5hYy5qcD4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW0u aD4KQEAgLTU2LDYgKzU4LDE1IEBACiB2b2lkICogaGlnaF9tZW1vcnk7CiBzdHJ1Y3QgcGFnZSAq aGlnaG1lbV9zdGFydF9wYWdlOwogCisjaWZkZWYgQ09ORklHX1NVUEVSX1BBR0UKK3ZvaWQgYWRq X3NwX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgemFwLAorICAgICAgICAgICAgICAg dW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZCk7CisjZWxzZQoraW50IHN1 cGVyX3BhZ2Vfb3JkZXJbXSA9IHswfTsKK3BncHJvdF90IHN1cGVyX3BhZ2VfcHJvdFtdID0gezB4 MDB9OworI2VuZGlmCisKKwogLyoKICAqIFdlIHNwZWNpYWwtY2FzZSB0aGUgQy1PLVcgWkVST19Q QUdFLCBiZWNhdXNlIGl0J3Mgc3VjaAogICogYSBjb21tb24gb2NjdXJyZW5jZSAobm8gbmVlZCB0 byByZWFkIHRoZSBwYWdlIHRvIGtub3cKQEAgLTE4NCw2ICsxOTUsMTQgQEAKIAl1bnNpZ25lZCBs b25nIGVuZCA9IHZtYS0+dm1fZW5kOwogCXVuc2lnbmVkIGxvbmcgY293ID0gKHZtYS0+dm1fZmxh Z3MgJiAoVk1fU0hBUkVEIHwgVk1fTUFZV1JJVEUpKSA9PSBWTV9NQVlXUklURTsKIAorI2lmIDAm JkNPTkZJR19TVVBFUl9QQUdFCisgICAgICAgIGlmKGNvdykgeworCSAgICAgc3Bpbl9sb2NrKCZz cmMtPnBhZ2VfdGFibGVfbG9jayk7CQkJCisJICAgICBhZGpfc3BfcmFuZ2Uoc3JjLCAwLCBhZGRy ZXNzLCBlbmQpOworCSAgICAgc3Bpbl91bmxvY2soJnNyYy0+cGFnZV90YWJsZV9sb2NrKTsJCQkK KyAgICAgICAgIH0KKyNlbmRpZgorCiAJc3JjX3BnZCA9IHBnZF9vZmZzZXQoc3JjLCBhZGRyZXNz KS0xOwogCWRzdF9wZ2QgPSBwZ2Rfb2Zmc2V0KGRzdCwgYWRkcmVzcyktMTsKIApAQCAtMzEzLDkg KzMzMiwxNiBAQAogCQlzaXplID0gUE1EX1NJWkUgLSBvZmZzZXQ7CiAJc2l6ZSAmPSBQQUdFX01B U0s7CiAJZm9yIChvZmZzZXQ9MDsgb2Zmc2V0IDwgc2l6ZTsgcHRlcCsrLCBvZmZzZXQgKz0gUEFH RV9TSVpFKSB7Ci0JCXB0ZV90IHB0ZSA9ICpwdGVwOworCQlwdGVfdCBwdGU7CisgICAgICAgIHNw X3JldHJ5OgorCQlwdGUgPSAqcHRlcDsKIAkJaWYgKHB0ZV9ub25lKHB0ZSkpCi0JCQljb250aW51 ZTsKKwkJCXsgCisgICAgICAgICAgICAgICAgICAgICAgICBpZihwdGVfdG9fc3BfaW5kZXgocHRl KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bl9wdGVfc3AocHRlcCxwdGVfdG9f c3BfaW5kZXgocHRlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHNwX3JldHJ5 OworICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCWNvbnRpbnVlOyB9CiAJCWlmIChwdGVf cHJlc2VudChwdGUpKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB0ZV9wYWdlKHB0ZSk7CiAJ CQlpZiAoVkFMSURfUEFHRShwYWdlKSAmJiAhUGFnZVJlc2VydmVkKHBhZ2UpKQpAQCAtMzUwLDYg KzM3Niw3IEBACiAJCWVuZCA9ICgoYWRkcmVzcyArIFBHRElSX1NJWkUpICYgUEdESVJfTUFTSyk7 CiAJZnJlZWQgPSAwOwogCWRvIHsKKyAgICAgICAgICAgICAgICBjbGVhcl9wbWRfc3AocG1kKTsK IAkJZnJlZWQgKz0gemFwX3B0ZV9yYW5nZSh0bGIsIHBtZCwgYWRkcmVzcywgZW5kIC0gYWRkcmVz cyk7CiAJCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOyAKIAkJcG1k Kys7CkBAIC0zNjcsNiArMzk0LDEyIEBACiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHJlc3Ms IGVuZCA9IGFkZHJlc3MgKyBzaXplOwogCWludCBmcmVlZCA9IDA7CiAKKyNpZiBDT05GSUdfU1VQ RVJfUEFHRQorCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJYWRqX3NwX3Jhbmdl KG1tLCAxLCBhZGRyZXNzLCBlbmQpOworCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2Nr KTsKKyNlbmRpZgorCiAJZGlyID0gcGdkX29mZnNldChtbSwgYWRkcmVzcyk7CiAKIAkvKgpAQCAt NzgxLDYgKzgxNCw3IEBACiAJCXB0ZV90ICogcHRlID0gcHRlX2FsbG9jKG1tLCBwbWQsIGFkZHJl c3MpOwogCQlpZiAoIXB0ZSkKIAkJCXJldHVybiAtRU5PTUVNOworICAgICAgICAgICAgICAgIGNs ZWFyX3BtZF9zcChwbWQpOwogCQl6ZXJvbWFwX3B0ZV9yYW5nZShwdGUsIGFkZHJlc3MsIGVuZCAt IGFkZHJlc3MsIHByb3QpOwogCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQTURfU0laRSkgJiBQTURf TUFTSzsKIAkJcG1kKys7CkBAIC03OTYsNiArODMwLDExIEBACiAJdW5zaWduZWQgbG9uZyBlbmQg PSBhZGRyZXNzICsgc2l6ZTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwog CisjaWYgQ09ORklHX1NVUEVSX1BBR0UKKwlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2sp OworCWFkal9zcF9yYW5nZShtbSwgMSwgYWRkcmVzcywgZW5kKTsKKwlzcGluX3VubG9jaygmbW0t PnBhZ2VfdGFibGVfbG9jayk7CisjZW5kaWYKIAlkaXIgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNz KTsKIAlmbHVzaF9jYWNoZV9yYW5nZShtbSwgYmVnLCBlbmQpOwogCWlmIChhZGRyZXNzID49IGVu ZCkKQEAgLTg2MSw2ICs5MDAsNyBAQAogCQlwdGVfdCAqIHB0ZSA9IHB0ZV9hbGxvYyhtbSwgcG1k LCBhZGRyZXNzKTsKIAkJaWYgKCFwdGUpCiAJCQlyZXR1cm4gLUVOT01FTTsKKyAgICAgICAgICAg ICAgICBjbGVhcl9wbWRfc3AocG1kKTsKIAkJcmVtYXBfcHRlX3JhbmdlKHB0ZSwgYWRkcmVzcywg ZW5kIC0gYWRkcmVzcywgYWRkcmVzcyArIHBoeXNfYWRkciwgcHJvdCk7CiAJCWFkZHJlc3MgPSAo YWRkcmVzcyArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOwogCQlwbWQrKzsKQEAgLTg3Nyw2ICs5MTcs MTEgQEAKIAl1bnNpZ25lZCBsb25nIGVuZCA9IGZyb20gKyBzaXplOwogCXN0cnVjdCBtbV9zdHJ1 Y3QgKm1tID0gY3VycmVudC0+bW07CiAKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCXNwaW5fbG9j aygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJYWRqX3NwX3JhbmdlKG1tLCAxLCBiZWcsIGVuZCk7 CisJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworI2VuZGlmCiAJcGh5c19hZGRy IC09IGZyb207CiAJZGlyID0gcGdkX29mZnNldChtbSwgZnJvbSk7CiAJZmx1c2hfY2FjaGVfcmFu Z2UobW0sIGJlZywgZW5kKTsKQEAgLTk1OSw4ICsxMDA0LDMyIEBACiAJCWludCByZXVzZSA9IGNh bl9zaGFyZV9zd2FwX3BhZ2Uob2xkX3BhZ2UpOwogCQl1bmxvY2tfcGFnZShvbGRfcGFnZSk7CiAJ CWlmIChyZXVzZSkgeworI2lmIDAmJkNPTkZJR19TVVBFUl9QQUdFCisgICAgICAgICAgICAgICAg ICBpbnQgb3JkZXI7CisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqd2twYWdlOworICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisgICAgICAgICAgc3BfcmV0cnk6 CisgICAgICAgICAgICAgICAgICBvcmRlciA9IHN1cGVyX3BhZ2Vfb3JkZXJbcHRlX3RvX3NwX2lu ZGV4KCpwYWdlX3RhYmxlKV07CisgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAob2xkX3BhZ2Ug LSBtZW1fbWFwKSAmIH4oMVVMPDxvcmRlciAtMSk7CisgICAgICAgICAgICAgICAgICB3a3BhZ2Ug PSBtZW1fbWFwICsgb2Zmc2V0OworICAgICAgICAgICAgICAgICAgaWYob3JkZXIpCisgICAgICAg ICAgICAgICAgICAgZm9yKGk9MDsgaTwxPDxvcmRlcjsgaSsrKSB7CisgICAgICAgICAgICAgICAg ICAgIGlmKHBhZ2VfY291bnQod2twYWdlK2kpPjEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ZG93bl9wdGVfc3AocGFnZV90YWJsZSwgcHRlX3RvX3NwX2luZGV4KCpwYWdlX3RhYmxlKSk7Cisg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc3BfcmV0cnk7CisgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZm9yKGk9MDsgaTwx PDxvcmRlcjsgaSsrKSB7CisJCSAgICBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkcmVzcyk7CisJ CSAgICBlc3RhYmxpc2hfcHRlKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZStpLAorICAgICAgICAg ICAgICAgICAgICAgIHB0ZV9ta3lvdW5nKHB0ZV9ta2RpcnR5KHB0ZV9ta3dyaXRlKCoocGFnZV90 YWJsZStpKSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzICs9IFBBR0VfU0la RTsKKyAgICAgICAgICAgICAgICAgICAgfQorI2Vsc2UKIAkJCWZsdXNoX2NhY2hlX3BhZ2Uodm1h LCBhZGRyZXNzKTsKLQkJCWVzdGFibGlzaF9wdGUodm1hLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBw dGVfbWt5b3VuZyhwdGVfbWtkaXJ0eShwdGVfbWt3cml0ZShwdGUpKSkpOworCQkJZXN0YWJsaXNo X3B0ZSh2bWEsIGFkZHJlc3MsIHBhZ2VfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBwdGVfbWt5b3VuZyhwdGVfbWtkaXJ0eShwdGVfbWt3cml0ZShwdGUpKSkpOworI2VuZGlmCiAJ CQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJCQlyZXR1cm4gMTsJLyogTWlu b3IgZmF1bHQgKi8KIAkJfQpAQCAtMTE5MSwzNCArMTI2MCw4MyBAQAogc3RhdGljIGludCBkb19h bm9ueW1vdXNfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqIHZtYSwgcHRlX3QgKnBhZ2VfdGFibGUsIGludCB3cml0ZV9hY2Nlc3MsIHVuc2lnbmVkIGxv bmcgYWRkcikKIHsKIAlwdGVfdCBlbnRyeTsKLQorICAgICAgICBpbnQgaTsKKyAgICAgICAgdW5z aWduZWQgbG9uZyBzcGFkZHI7CisgICAgICAgIHB0ZV90IG9sZHB0ZTsKKyAgICAgICAgaW50IG9y ZGVyOworICAgICAgICBwdGVfdCAqd2t0YWJsZTsKIAkvKiBSZWFkLW9ubHkgbWFwcGluZyBvZiBa RVJPX1BBR0UuICovCiAJZW50cnkgPSBwdGVfd3Jwcm90ZWN0KG1rX3B0ZShaRVJPX1BBR0UoYWRk ciksIHZtYS0+dm1fcGFnZV9wcm90KSk7CiAKIAkvKiAuLmV4Y2VwdCBpZiBpdCdzIGEgd3JpdGUg YWNjZXNzICovCiAJaWYgKHdyaXRlX2FjY2VzcykgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKK3Jl dHJ5OgorICAgICAgICAgICAgICAgIG9sZHB0ZSA9ICpwYWdlX3RhYmxlOworICAgICAgICAgICAg ICAgIG9yZGVyID0gc3VwZXJfcGFnZV9vcmRlcltwdGVfdG9fc3BfaW5kZXgob2xkcHRlKV07Cisg ICAgICAgICAgICAgICAgd2t0YWJsZSA9CisgICAgICAgICAgICAgICAgICAgKHB0ZV90ICopKCh1 bnNpZ25lZCBsb25nKXBhZ2VfdGFibGUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH4oKDFVTCA8PCAob3JkZXIgKyBTSVpFT0ZfUFRSX0xPRzIpKSAtMSkpOworCisgICAgICAgICAg ICAgICBmb3IgKGk9MDsgaSA8IDEgPDwgb3JkZXI7IGkrKykgeworICAgICAgICAgICAgICAgICBp ZighcHRlX25vbmUoKih3a3RhYmxlK2kpKSkgeworICAgICAgICAgICAgICAgICAgICBkb3duX3B0 ZV9zcChwYWdlX3RhYmxlLCBwdGVfdG9fc3BfaW5kZXgob2xkcHRlKSk7CisgICAgICAgICAgICAg ICAgICAgIGdvdG8gcmV0cnk7CisgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgIH0KIAogCQkvKiBBbGxvY2F0ZSBvdXIgb3duIHByaXZhdGUgcGFnZS4gKi8KIAkJc3Bpbl91 bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCi0JCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9I SUdIVVNFUik7Ci0JCWlmICghcGFnZSkKLQkJCWdvdG8gbm9fbWVtOwotCQljbGVhcl91c2VyX2hp Z2hwYWdlKHBhZ2UsIGFkZHIpOwotCisgICAgICAgICAgICAgICAgcGFnZSA9IGFsbG9jX3BhZ2Vz KEdGUF9ISUdIVVNFUiwgb3JkZXIpOworICAgICAgICAgICAgICAgIGlmICghcGFnZSkgeworICAg ICAgICAgICAgICAgICAgIGlmIChvcmRlcikgeworCQkgICAgICBzcGluX2xvY2soJm1tLT5wYWdl X3RhYmxlX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgIHN1cGVyX3BhZ2VfZG93bmdyYWRl W3B0ZV90b19zcF9pbmRleChvbGRwdGUpXSsrOworICAgICAgICAgICAgICAgICAgICAgIGRvd25f cHRlX3NwKHBhZ2VfdGFibGUsIHB0ZV90b19zcF9pbmRleChvbGRwdGUpKTsKKyAgICAgICAgICAg ICAgICAgICAgICBnb3RvIHJldHJ5OworICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAg ICAgICAgICAgICAgZWxzZSBnb3RvIG5vX21lbTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgc3BhZGRyID0gYWRkciAmIH4oKFBBR0VfU0laRSA8PCBvcmRlcikgLSAxKTsKKyAg ICAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IDEgPDwgb3JkZXI7IGkrKykgeworICAgICAgICAg ICAgICAgICAgICAgICAgY2xlYXJfdXNlcl9oaWdocGFnZShwYWdlK2ksIHNwYWRkcik7CisgICAg ICAgICAgICAgICAgICAgICAgICBzcGFkZHIgKz0gUEFHRV9TSVpFOworICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIGlmIChvcmRlcikgeworICAgICAgICAgICAgICAgIGJyZWFr X2FyZWEocGFnZSwgb3JkZXIpOworICAgICAgICAgICAgICAgIHN1cGVyX3BhZ2VfYWxsb2NhdGVb cHRlX3RvX3NwX2luZGV4KG9sZHB0ZSldKys7CisJCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVf bG9jayk7CisgICAgICAgICAgICAgICAgc3BhZGRyID0gYWRkciAmIH4oKFBBR0VfU0laRSA8PCBv cmRlcikgLSAxKTsKKyAgICAgICAgICAgICAgICBzdXBlcl9wYWdlX3BvcHVsYXRlKHNwYWRkciwg cGFnZSwgdm1hLT52bV9wYWdlX3Byb3QsCisgICAgICAgICAgICAgICAgICAgICAgICBwdGVfdG9f c3BfaW5kZXgob2xkcHRlKSk7CisgICAgICAgICAgICAgICAgZm9yIChpPTA7IGkgPCAxIDw8IG9y ZGVyOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICBlbnRyeSA9IHB0ZV9ta3dyaXRlKHB0ZV9t a2RpcnR5KAorICAgICAgICAgICAgICAgICAgICAgbWtfcHRlKHBhZ2UraSwgX19wZ3Byb3QocGdw cm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCl8CisgICAgICAgICAgICAgICAgICAgICAgICBwZ3By b3RfdmFsKHN1cGVyX3BhZ2VfcHJvdFtwdGVfdG9fc3BfaW5kZXgob2xkcHRlKV0pKSkpKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIG1tLT5yc3MrKzsKKyAgICAgICAgICAgICAgICAgICAgICAg IGZsdXNoX3BhZ2VfdG9fcmFtKHBhZ2UraSk7CisJCSAgICAgICAgbHJ1X2NhY2hlX2FkZChwYWdl K2kpOworCQkgICAgICAgIG1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlK2kpOworICAgICAgICAgICAg ICAgICAgICAgICAgc2V0X3B0ZV9yYXcod2t0YWJsZStpLCBlbnRyeSk7CisgICAgICAgICAgICAg ICAgICAgICAgICBzcGFkZHIgKz0gUEFHRV9TSVpFOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgfSBlbHNlewogCQlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCQlp ZiAoIXB0ZV9ub25lKCpwYWdlX3RhYmxlKSkgewogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2Up OwogCQkJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCQkJcmV0dXJuIDE7CiAJ CX0KLQkJbW0tPnJzcysrOwotCQlmbHVzaF9wYWdlX3RvX3JhbShwYWdlKTsKLQkJZW50cnkgPSBw dGVfbWt3cml0ZShwdGVfbWtkaXJ0eShta19wdGUocGFnZSwgdm1hLT52bV9wYWdlX3Byb3QpKSk7 CisgICAgICAgICAgICAgICAgbW0tPnJzcysrOworICAgICAgICAgICAgICAgIGZsdXNoX3BhZ2Vf dG9fcmFtKHBhZ2UpOworICAgICAgICAgICAgICAgIGVudHJ5ID0gcHRlX21rd3JpdGUocHRlX21r ZGlydHkoCisgICAgICAgICAgICAgICAgICAgICBta19wdGUocGFnZSwgdm1hLT52bV9wYWdlX3By b3QpKSk7CiAJCWxydV9jYWNoZV9hZGQocGFnZSk7CiAJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdl KTsKLQl9CisJICAgICAgICBzZXRfcHRlKHBhZ2VfdGFibGUsIGVudHJ5KTsKKyAgICAgICAgICB9 CisgICAgICAgIH0gZWxzZQogCiAJc2V0X3B0ZShwYWdlX3RhYmxlLCBlbnRyeSk7CiAKZGlmZiAt dXJOIGxpbnV4LTIuNC4xOS9tbS9tbWFwLmMgbGludXgvbW0vbW1hcC5jCi0tLSBsaW51eC0yLjQu MTkvbW0vbW1hcC5jCVNhdCBBdWcgIDMgMDk6Mzk6NDYgMjAwMgorKysgbGludXgvbW0vbW1hcC5j CVdlZCBBdWcgIDcgMjA6MzA6NTIgMjAwMgpAQCAtNTgzLDYgKzU4MywxOCBAQAogCQltbS0+bG9j a2VkX3ZtICs9IGxlbiA+PiBQQUdFX1NISUZUOwogCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciwg YWRkciArIGxlbik7CiAJfQorCS8qCisJICogbW1hcCBtYXkgcHJvdmlkZSBuZXcgcGFnZXMgYW5k IHdlIGhhdmUgdGhlIGNoYW5jZSB0byBzZXQgdGhlCisgICAgICAgICAqIFNVUEVSX1BBR0UgYml0 cyBpbiB0aGUgVExCIGVudHJpZXMsIHRoZW4gd2UgY2FsbCBtYWtlX3B0ZXNfcHJlc2VudC4KKwkg KiBNQVBfUFJJVkFURSBmbGFnIGdpdmVzIGEgY2hhbmNlIHRvIHRlbGwgdXMgCisJICogdGhhdCBp dCBpcyBhIHBsYWluIGFsbG9jYXRpb24uCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgPE4uU2hpbWl6dT4KKwkgKi8KKyNpZmRlZiBDT05GSUdfU1VQRVJfUEFH RQorCWlmICh2bV9mbGFncyAmIE1BUF9QUklWQVRFKSB7CisJICAgbWFrZV9wdGVzX3ByZXNlbnQo YWRkciwgYWRkciArIGxlbik7CisgICAgICAgIH0KKyNlbmRpZgogCXJldHVybiBhZGRyOwogCiB1 bm1hcF9hbmRfZnJlZV92bWE6CkBAIC02MTAsMTMgKzYyMiwyOCBAQAogICogVGhpcyBmdW5jdGlv biAia25vd3MiIHRoYXQgLUVOT01FTSBoYXMgdGhlIGJpdHMgc2V0LgogICovCiAjaWZuZGVmIEhB VkVfQVJDSF9VTk1BUFBFRF9BUkVBCisjaWYgQ09ORklHX1NVUEVSX1BBR0UKK2V4dGVybiBpbnQg c3VwZXJfcGFnZV92bV9hbGlnbjsKKyNlbmRpZgogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25n IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcg YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxv bmcgZmxhZ3MpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisgICAgICAgIHVuc2ln bmVkIGxvbmcgc3VwZXJfcGFnZV9tYXNrPTA7CiAKIAlpZiAobGVuID4gVEFTS19TSVpFKQogCQly ZXR1cm4gLUVOT01FTTsKIAorI2lmIENPTkZJR19TVVBFUl9QQUdFCisgICAgICBpZihzdXBlcl9w YWdlX3ZtX2FsaWduKSB7CisgICAgICAgaW50IGk7CisgICAgICAgZm9yKGk9c3VwZXJfcGFnZV9u ci0xOyBpPjA7IGktLSkgeworICAgICAgICAgaWYobGVuPihQQUdFX1NJWkUgPDwgc3VwZXJfcGFn ZV9vcmRlcltpXSkpIHsKKyAgICAgICAgICAgICAgICBzdXBlcl9wYWdlX21hc2sgPSAoUEFHRV9T SVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV0pIC0xOworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgIH0KKyNlbmRpZgogCWlmIChhZGRyKSB7CiAJ CWFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpOwogCQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwg YWRkcik7CkBAIC02MzMsNiArNjYwLDkgQEAKIAkJaWYgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2 bWEtPnZtX3N0YXJ0KQogCQkJcmV0dXJuIGFkZHI7CiAJCWFkZHIgPSB2bWEtPnZtX2VuZDsKKyNp ZiBDT05GSUdfU1VQRVJfUEFHRQorICAgICAgICAgICAgICAgIGFkZHIgPSAoYWRkciArIHN1cGVy X3BhZ2VfbWFzaykmfnN1cGVyX3BhZ2VfbWFzazsKKyNlbmRpZgogCX0KIH0KICNlbHNlCkBAIC0x MDk5LDYgKzExMjksMTQgQEAKIAkJbW0tPmxvY2tlZF92bSArPSBsZW4gPj4gUEFHRV9TSElGVDsK IAkJbWFrZV9wYWdlc19wcmVzZW50KGFkZHIsIGFkZHIgKyBsZW4pOwogCX0KKwkvKgorCSAqIGJy ayBwcm92aWRlIG5ldyBwYWdlcyBhbmQgd2UgaGF2ZSB0aGUgY2hhbmNlIHRvIHNldCB0aGUKKyAg ICAgICAgICogU1VQRVJfUEFHRSBiaXRzIGZvciBUTEIsIHRoZW4gd2UgY2FsbCBtYWtlX3B0ZXNf cHJlc2VudC4KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 Ti5TaGltaXp1PgorCSAqLworI2lmZGVmIENPTkZJR19TVVBFUl9QQUdFCisJbWFrZV9wdGVzX3By ZXNlbnQoYWRkciwgYWRkciArIGxlbik7CisjZW5kaWYKIAlyZXR1cm4gYWRkcjsKIH0KIApkaWZm IC11ck4gbGludXgtMi40LjE5L21tL3BhZ2VfYWxsb2MuYyBsaW51eC9tbS9wYWdlX2FsbG9jLmMK LS0tIGxpbnV4LTIuNC4xOS9tbS9wYWdlX2FsbG9jLmMJU2F0IEF1ZyAgMyAwOTozOTo0NiAyMDAy CisrKyBsaW51eC9tbS9wYWdlX2FsbG9jLmMJVHVlIEF1ZyAgNiAxOTo1MjozMSAyMDAyCkBAIC0x MCw2ICsxMCw3IEBACiAgKiAgUmVzaGFwZWQgaXQgdG8gYmUgYSB6b25lZCBhbGxvY2F0b3IsIElu Z28gTW9sbmFyLCBSZWQgSGF0LCAxOTk5CiAgKiAgRGlzY29udGlndW91cyBtZW1vcnkgc3VwcG9y dCwgS2Fub2ogU2FyY2FyLCBTR0ksIE5vdiAxOTk5CiAgKiAgWm9uZSBiYWxhbmNpbmcsIEthbm9q IFNhcmNhciwgU0dJLCBKYW4gMjAwMAorICogIFBhZ2UgR3JhbnVsYXJpdHkgSGludCBzdXBwb3J0 LCBOYW9oaWtvIFNoaW1penUsIFRva2FpIFVuaXYuLCBKdWwgMjAwMAogICovCiAKICNpbmNsdWRl IDxsaW51eC9jb25maWcuaD4KZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS9tbS9zdXBlcl9wYWdlLmMg bGludXgvbW0vc3VwZXJfcGFnZS5jCi0tLSBsaW51eC0yLjQuMTkvbW0vc3VwZXJfcGFnZS5jCVRo dSBKYW4gIDEgMDk6MDA6MDAgMTk3MAorKysgbGludXgvbW0vc3VwZXJfcGFnZS5jCVNhdCBBdWcg MTAgMTg6MjY6NTAgMjAwMgpAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAgTGludXggU3VwZXIgUGFn ZSBpbnRlcm5hbCBmdW5jdGlvbnMuCisqLworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVk ZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51 eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXBjdGwuaD4KKyNpbmNsdWRlIDxsaW51 eC9pb2J1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9w YWdlbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS91YWNj ZXNzLmg+CisjaW5jbHVkZSA8YXNtL3RsYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4K KyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKworLyogV2UgdXNlIGFyYml0cmFyeSBoaWdoIG51 bWJlciBmb3IgdGhlIHN5c2N0bC4gWW91IG1heSBoYXZlIHRvIGNoYW5nZSBpdC4qLworCisjZGVm aW5lIENUTF9TVVBFUl9QQUdFIDQ2NDkKKyNkZWZpbmUgQ1RMX1NFVF9OUiAxCisjZGVmaW5lIENU TF9TRVRfQUxJR04gMgorI2RlZmluZSBDVExfU0VUX0JJVE1BU0sgMworI2RlZmluZSBDVExfU0VU X0xPR1JFUyA0CisKK2ludCBzdXBlcl9wYWdlX25yID0gMTsgLyogV2Ugc3RhcnQgd2l0aG91dCBz dXBlcl9wYWdlIGF0IGZpcnN0LiAqLworaW50IHN1cGVyX3BhZ2Vfdm1fYWxpZ24gPSAwOyAvKiBX ZSBzdGFydCB3aXRob3V0IHN1cGVyX3BhZ2UgYWxpZ24gYXQgZmlyc3QuICovCitpbnQgc3VwZXJf cGFnZV90YWlsX2FsaWduID0gMDsgLyogV2Ugc3RhcnQgd2l0aG91dCBzdXBlcl9wYWdlIHRhaWwg YWxpZ24gYXQgZmlyc3QuICovCitpbnQgc3VwZXJfcGFnZV9iaXRtYXNrID0gKDE8PFNVUEVSX1BB R0VfTlIpLTE7IC8qIFRvIGNvbnRyb2wgZWFjaCBvcmRlciBvZiB0aGUgcmVzZXJ2YXRpb24uICov CitpbnQgc3VwZXJfcGFnZV9sb2dyZXNldCA9IDA7IC8qIElmIDEgdGhlbiByZXNldCBjb3VudGVy IHdoZW4gZHVtcGVkICovCisKK3Vuc2lnbmVkIGxvbmcgc3VwZXJfcGFnZV9yZXNlcnZlW1NVUEVS X1BBR0VfTlJdOwordW5zaWduZWQgbG9uZyBzdXBlcl9wYWdlX2FsbG9jYXRlW1NVUEVSX1BBR0Vf TlJdOwordW5zaWduZWQgbG9uZyBzdXBlcl9wYWdlX2Rvd25ncmFkZVtTVVBFUl9QQUdFX05SXTsK KyNpZiBDT05GSUdfU1lTQ1RMCitzdGF0aWMgY3RsX3RhYmxlIHN1cGVyX3BhZ2VfdGFibGVbXSA9 IHsKKyAgICAgICAge0NUTF9TRVRfTlIsICJuciIsICZzdXBlcl9wYWdlX25yLCBzaXplb2YoaW50 KSwKKyAgICAgICAgIDA2NDQsIE5VTEwsICZwcm9jX2RvaW50dmVjfSwKKyAgICAgICAge0NUTF9T RVRfQUxJR04sICJ2bV9hbGlnbiIsICZzdXBlcl9wYWdlX3ZtX2FsaWduLCBzaXplb2YoaW50KSwK KyAgICAgICAgIDA2NDQsIE5VTEwsICZwcm9jX2RvaW50dmVjfSwKKyAgICAgICAge0NUTF9TRVRf QUxJR04sICJ0YWlsX2FsaWduIiwgJnN1cGVyX3BhZ2VfdGFpbF9hbGlnbiwgc2l6ZW9mKGludCks CisgICAgICAgICAwNjQ0LCBOVUxMLCAmcHJvY19kb2ludHZlY30sCisgICAgICAgIHtDVExfU0VU X0JJVE1BU0ssICJiaXRtYXNrIiwgJnN1cGVyX3BhZ2VfYml0bWFzaywgc2l6ZW9mKGludCksCisg ICAgICAgICAwNjQ0LCBOVUxMLCAmcHJvY19kb2ludHZlY30sCisgICAgICAgIHtDVExfU0VUX0xP R1JFUywgImxvZ3Jlc2V0IiwgJnN1cGVyX3BhZ2VfbG9ncmVzZXQsIHNpemVvZihpbnQpLAorICAg ICAgICAgMDY0NCwgTlVMTCwgJnByb2NfZG9pbnR2ZWN9LAorCXswfQorfTsKK3N0YXRpYyBjdGxf dGFibGUgc3lzX3RhYmxlW10gPSB7CisJe0NUTF9TVVBFUl9QQUdFLCAic3VwZXJfcGFnZSIsIE5V TEwsIDAsIDA1NTUsIHN1cGVyX3BhZ2VfdGFibGV9LAorCXswfQorfTsKKworI2VuZGlmCisKKyNp ZiBDT05GSUdfUFJPQ19GUworaW50IHN1cGVyX3BhZ2VfZ2V0aW5mbyhjaGFyICpidWYsIGNoYXIg KipzdGFydCwgb2ZmX3QgZnBvcywgaW50IGxlbmd0aCkKK3sKKyAgICAgIGludCBpOworICAgICAg Y2hhciAqcCA9IGJ1ZjsKKworICAgICAgcCArPSBzcHJpbnRmKHAsICJjdXJyZW50IG5yOiAlZFxu Iiwgc3VwZXJfcGFnZV9ucik7CisgICAgICBwICs9IHNwcmludGYocCwgImN1cnJlbnQgdm1fYWxp Z246ICVkOiVkXG4iLCAKKyAgICAgICAgIHN1cGVyX3BhZ2Vfdm1fYWxpZ24sIHN1cGVyX3BhZ2Vf dGFpbF9hbGlnbik7CisgICAgICBwICs9IHNwcmludGYocCwgImN1cnJlbnQgYml0bWFzazogJWRc biIsIHN1cGVyX3BhZ2VfYml0bWFzayk7CisgICAgICBwICs9IHNwcmludGYocCwgIm9yZGVyXHRy ZXNlcnZlXHRhbGxvY2F0ZVx0ZmFpbCBcbiIpOworICAgICAgZm9yKGk9MTtpPFNVUEVSX1BBR0Vf TlI7aSsrKSB7CisgICAgICBwICs9IHNwcmludGYocCwgIiVkOlx0JWxkXHQlbGRcdCVsZFxuIiwK KyAgICAgICAgICAgICAgIHN1cGVyX3BhZ2Vfb3JkZXJbaV0sCisgICAgICAgICAgICAgICBzdXBl cl9wYWdlX3Jlc2VydmVbaV0sCisgICAgICAgICAgICAgICBzdXBlcl9wYWdlX2FsbG9jYXRlW2ld LAorICAgICAgICAgICAgICAgc3VwZXJfcGFnZV9kb3duZ3JhZGVbaV0KKyAgICAgICAgICAgICAg ICk7CisgICAgICB9CisgICAgICBpZihzdXBlcl9wYWdlX2xvZ3Jlc2V0KQorICAgICAgZm9yKGk9 MTtpPFNVUEVSX1BBR0VfTlI7aSsrKSB7CisgICAgICAgICAgICAgICBzdXBlcl9wYWdlX3Jlc2Vy dmVbaV0gPSAwOworICAgICAgICAgICAgICAgc3VwZXJfcGFnZV9hbGxvY2F0ZVtpXSA9IDA7Cisg ICAgICAgICAgICAgICBzdXBlcl9wYWdlX2Rvd25ncmFkZVtpXSA9IDA7CisgICAgICB9CisgICAg ICByZXR1cm4gcCAtIGJ1ZjsKKyB9CisjZW5kaWYKKwordm9pZCBzdXBlcl9wYWdlX2luaXQoKSB7 CisgIGludCBpOworICBzdXBlcl9wYWdlX25yID0gU1VQRVJfUEFHRV9OUjsKKyNpZiBDT05GSUdf UFJPQ19GUworICBmb3IoaT0wO2k8U1VQRVJfUEFHRV9OUjtpKyspIHsKKyAgICAgICAgICBzdXBl cl9wYWdlX3Jlc2VydmVbaV0gPSAwOworICAgICAgICAgIHN1cGVyX3BhZ2VfYWxsb2NhdGVbaV0g PSAwOworICAgICAgICAgIHN1cGVyX3BhZ2VfZG93bmdyYWRlW2ldID0gMDsKKyAgfQorICBjcmVh dGVfcHJvY19pbmZvX2VudHJ5KCJzdXBlcl9wYWdlIiwgMCwgTlVMTCwgc3VwZXJfcGFnZV9nZXRp bmZvKTsKKyNlbmRpZgorI2lmIENPTkZJR19TWVNDVEwKKyAgcmVnaXN0ZXJfc3lzY3RsX3RhYmxl KHN5c190YWJsZSwwKTsKKyNlbmRpZgorfQorCisgIC8qCisgICAqIEFsbG9jYXRpbmcgUFRFcyBm b3IgZnV0dXJlIGZhbHQgaGFuZGxpbmcuIAorICAgKi8KKyAgCit2b2lkIHNldF9zcF9yYW5nZSh1 bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBvcmRlciwgcGdwcm90X3QgcHJvdCkKKyAgeworICAg ICAgICBpbnQgaTsKKyAgICAgICAgcGdkX3QgKiBkaXI7CisgICAgICAgIHBtZF90ICpwbWQ7Cisg ICAgICAgIHB0ZV90ICogcHRlOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07 CisgIAorCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisgICAgICAgIGRpciA9IHBn ZF9vZmZzZXQobW0sIGFkZHJlc3MpOworICAgICAgICBwbWQgPSBwbWRfYWxsb2MobW0sIGRpciwg YWRkcmVzcyk7CisgICAgICAgIGlmICghcG1kKSBnb3RvIG91dDsKKyAgICAgICAgYWRkcmVzcyAm PSB+UEdESVJfTUFTSzsKKyAgICAgICAgcHRlID0gcHRlX2FsbG9jKG1tLCBwbWQsIGFkZHJlc3Mp OworICAgICAgICBpZiAoIXB0ZSkKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IDE8PG9yZGVyOyBpICsrKQorICAgICAgICAgICAgICAgIGlmKCFwdGVf bm9uZSgqKHB0ZStpKSkpIGdvdG8gb3V0OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTw8b3Jk ZXI7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBzZXRfcHRlX3JhdyhwdGUsIHB0ZV9tb2RpZnko KnB0ZSwgcHJvdCkpOworICAgICAgICAgICAgICAgIHB0ZSsrOworICAgICAgICB9CitvdXQ6CisJ c3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworICAgICAgICByZXR1cm47CisgIH0K KyAgCisgIC8qCisgICAqIFNpbXBsaXN0aWMgbmV3IHBhZ2UgdGFibGUgYWxsb2NhdGlvbiBmb3Ig c3lzX2Jyay4uCisgICAqIE9ubHkgR0ggYml0ICE9IDAgdGFibGVzIHdpbGwgYmUgYWxsb2NhdGVk LgorICAgKiBBdCB0aGlzIHRpbWUsIHdlIHdpbGwgbm90IGFsbG9jYXRlIHJlYWwgc3RvcmFnZSwg aXQgcmVtYWlucworICAgKiBmb3IgdGhlIHBhZ2VfZmF1bHQgaGFuZGxlci4KKyAgICovCitpbnQg bWFrZV9wdGVzX3ByZXNlbnQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkK KyAgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByZW07CisgICAgICAg IGlmIChhZGRyID49IGVuZCkKKyAgICAgICAgICAgICAgICBCVUcoKTsKKyAgLyoKKyAgICogVGhl IGZpcnN0IG9yZGVyKGk9MCkgaXMgdGhlIG9yZGluYXJ5IHB0ZSAoMXBhZ2UpLCB0aGVuIHdlIHNr aXAgdG8KKyAgICogYWxsb2NhdGUgdGhlIHB0ZS4KKyAgICovCisgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBzdXBlcl9wYWdlX25yIC0gMTsgaSsrKSB7CisgICAgICAgICAgIHJlbSA9ICh+YWRkciAr IDEpICYgKChQQUdFX1NJWkUgPDwgc3VwZXJfcGFnZV9vcmRlcltpKzFdKSAtIDEpOworICAgICAg ICAgICB3aGlsZSAocmVtICYmCisgICAgICAgICAgICAgICAgICAoYWRkciAmICgoUEFHRV9TSVpF IDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV0pIC0gMSkpID09IDBVTCAmJgorICAgICAgICAgICAgICAg ICAgKChlbmQgLSBhZGRyICkgPj0gKFBBR0VfU0laRSA8PCBzdXBlcl9wYWdlX29yZGVyW2ldKSkp IHsKKyAgICAgICAgICAgICAgICAgIGlmKGkmJnN1cGVyX3BhZ2VfYml0bWFzayAmICgxPDxpKSkg eworICAgICAgICAgICAgICAgICAgIHN1cGVyX3BhZ2VfcmVzZXJ2ZVtpXSsrOworICAgICAgICAg ICAgICAgICAgIHNldF9zcF9yYW5nZShhZGRyLCBzdXBlcl9wYWdlX29yZGVyW2ldLCBzdXBlcl9w YWdlX3Byb3RbaV0pOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgYWRkciArPSBQQUdFX1NJWkUgPDwgc3VwZXJfcGFnZV9vcmRlcltpXTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJlbSAgLT0gUEFHRV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV07Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IHN1cGVyX3BhZ2Vf bnIgLSAxOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKAorICAgICAgICAg ICAgICAgICAgICAoYWRkciAmICgoUEFHRV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV0pIC0g MSkpID09IDBVTCAmJgorICAgICAgICAgICAgICAgICAgICAoKGVuZCAtIGFkZHIgKSA+PSAoUEFH RV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV0pKSkgeworICAgICAgICAgICAgICAgICAgICAg aWYoc3VwZXJfcGFnZV9iaXRtYXNrICYgKDE8PGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBzdXBlcl9wYWdlX3Jlc2VydmVbaV0rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9z cF9yYW5nZShhZGRyLCBzdXBlcl9wYWdlX29yZGVyW2ldLCBzdXBlcl9wYWdlX3Byb3RbaV0pOwor ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkciArPSBQ QUdFX1NJWkUgPDwgc3VwZXJfcGFnZV9vcmRlcltpXTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgIH0KKwordm9pZCBhZGpfc3BfcHRlKHN0cnVjdCBt bV9zdHJ1Y3QgKm1tLCBpbnQgemFwLAorICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRy ZXNzLCBpbnQgb3JkZXIpCisgIHsKKyAgICAgICAgaW50IGksZG93bmdyYWRlOworICAgICAgICBw Z2RfdCAqIGRpcjsKKyAgICAgICAgcG1kX3QgKnBtZDsKKyAgICAgICAgcHRlX3QgKiBwdGU7Cisg IAorICAgICAgICBkb3duZ3JhZGU9MDsKKyAgICAgICAgZGlyID0gcGdkX29mZnNldChtbSwgYWRk cmVzcyk7CisgICAgICAgIHBtZCA9IHBtZF9vZmZzZXQoZGlyLCBhZGRyZXNzKTsKKyAgICAgICAg aWYgKCFwbWQpIHJldHVybjsKKyAgICAgICAgYWRkcmVzcyAmPSB+UEdESVJfTUFTSzsKKyAgICAg ICAgcHRlID0gcHRlX29mZnNldChwbWQsIGFkZHJlc3MpOworICAgICAgICBpZiAoIXB0ZSkgcmV0 dXJuOworLyoKK1dlIGFzc3VtZSB0aGF0IHRoZSBsYXJnZXN0IHN1cGVyIHBhZ2UgaXMgbGVzcyBv ciBlcXVhbCB0byB0aGUKK21hcHBlZCBhcmVhIGJ5IHRoZSBwbWQuIFRoZW4gZm9sbG93aW5nIGNv ZGUgZG9lcyBub3QgdGFrZQordGhlIHBtZF9vZmZzZXQgYWdhaW4uIElmIHlvdSB3YW50IHRvIHVz ZSBhIGxhcmdlciBzdXBlciBwYWdlLAoreW91IG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUuCisqLwor ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTw8b3JkZXI7IGkgKyspIHsKKyByZXRyeToKKyAgICAg ICAgICAgaWYoc3VwZXJfcGFnZV9vcmRlcltwdGVfdG9fc3BfaW5kZXgoKihwdGUraSkpXT5vcmRl cikgeworICAgICAgICAgICAgICAgIGRvd25fcHRlX3NwKHB0ZStpLHB0ZV90b19zcF9pbmRleCgq KHB0ZStpKSkpOworICAgICAgICAgICAgICAgIGRvd25ncmFkZT0xOworICAgICAgICAgICAgICAg IGdvdG8gcmV0cnk7CisgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYoemFw KSBjbGVhcl9wdGVfc3AocHRlLCBwdGVfdG9fc3BfaW5kZXgoKnB0ZSkpOworICAgICAgICBpZih6 YXB8fGRvd25ncmFkZSkgY2xlYXJfcG1kX3NwKHBtZCk7CisgICAgICAgIHJldHVybjsKKyAgfQor ICAKK3ZvaWQgYWRqX3NwX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgemFwLCAKKyAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCisg IHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcmVtOworICAgICAgICBp ZiAoYWRkciA+PSBlbmQpCisgICAgICAgICAgICAgICAgQlVHKCk7CisKKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IHN1cGVyX3BhZ2VfbnIgLSAxOyBpKyspIHsKKyAgICAgICAgICAgcmVtID0gKH5h ZGRyICsgMSkgJiAoKFBBR0VfU0laRSA8PCBzdXBlcl9wYWdlX29yZGVyW2krMV0pIC0gMSk7Cisg ICAgICAgICAgIHdoaWxlIChyZW0gJiYKKyAgICAgICAgICAgICAgICAgIChhZGRyICYgKChQQUdF X1NJWkUgPDwgc3VwZXJfcGFnZV9vcmRlcltpXSkgLSAxKSkgPT0gMFVMICYmCisgICAgICAgICAg ICAgICAgICAoKGVuZCAtIGFkZHIgKSA+PSAoUEFHRV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJb aV0pKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRqX3NwX3B0ZShtbSwgemFwLCBhZGRy LCBzdXBlcl9wYWdlX29yZGVyW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgKz0g UEFHRV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV07CisgICAgICAgICAgICAgICAgICAgICAg ICByZW0gIC09IFBBR0VfU0laRSA8PCBzdXBlcl9wYWdlX29yZGVyW2ldOworICAgICAgICAgICAg ICAgIH07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gc3VwZXJfcGFnZV9uciAtIDE7IGkg Pj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKAorICAgICAgICAgICAgICAgICAg ICAoYWRkciAmICgoUEFHRV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV0pIC0gMSkpID09IDBV TCAmJgorICAgICAgICAgICAgICAgICAgICAoKGVuZCAtIGFkZHIgKSA+PSAoUEFHRV9TSVpFIDw8 IHN1cGVyX3BhZ2Vfb3JkZXJbaV0pKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRqX3Nw X3B0ZShtbSwgemFwLCBhZGRyLCBzdXBlcl9wYWdlX29yZGVyW2ldKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGFkZHIgKz0gUEFHRV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV07CisgICAg ICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgIH0KKwordm9pZCBf X2JyZWFrX2FyZWEgKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9yZGVyKSB7CisJ aW50IGk7CisJdW5zaWduZWQgbG9uZyBzaXplID0gMSA8PCBvcmRlcjsKKworCWZvciAoIGkgPSAw OyBpIDwgc2l6ZTsgaSsrICkgeworCQlzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMSk7CisJfQor CXJldHVybjsKK30KKwo=

--Multipart_Mon__12_Aug_2002_17:45:22_+0900_0825a4b0 Content-Type: application/octet-stream; name="transm.c" Content-Disposition: attachment; filename="transm.c" Content-Transfer-Encoding: base64

LyoKIFRoaXMgcHJvZ3JhbSBpcyBmb3IgdGVzdGluZyBsYXJnZSBzdHJpZGUgZGF0YSB0cmFuc2Zl cgoKSSBwdXQgdGhpcyBwcm9ncmFtIHVuZGVyIHRoZSBHUEwuCgpDb250YWN0Ok5hb2hpa28gU2hp bWl6dSwgCglTY2hvb2wgb2YgRW5naW5lZXJpbmcsIFRva2FpIFVuaXZlcnNpdHkuCgkxMTE3IEtp dGFrYW5hbWUsIEthbmFnYXdhIDI1OS0xMiBKYXBhbgoJZW1haWw6bnNoaW1penVAa2V5YWtpLmNj LnUtdG9rYWkuYWMuanAKCVRFTDogKzgxLTQ2My01OC0xMjExKGV4dC40MDg0KQoJRkFYOiArODEt NDYzLTU4LTgzMjAKCTxVUkw6aHR0cDovL3NoaW1penUtbGFiLmV0LnUtdG9rYWkuYWMuanAvPgoq LwoKCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDx1bmlz dGQuaD4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3lz L3RpbWUuaD4KI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgoKc3RydWN0IHJ1c2FnZSBydXNhZ2U7 Cgpkb3VibGUgZHRpbWUoKQp7CiBkb3VibGUgcTsKCiBnZXRydXNhZ2UoUlVTQUdFX1NFTEYsJnJ1 c2FnZSk7CgogcSA9IChkb3VibGUpKHJ1c2FnZS5ydV91dGltZS50dl9zZWMpOwogcSA9IHEgKyAo ZG91YmxlKShydXNhZ2UucnVfdXRpbWUudHZfdXNlYykgKiAxLjBlLTA2OwoJCiByZXR1cm4gcTsK fQoKZG91YmxlIGJlbmNoMShkb3VibGUgKmEsIGRvdWJsZSAqYiwgaW50IGRpbSwgaW50IGl0ZXIp IHsKCiBpbnQgaSxqLGtrLGlkaW0sIGpkaW07CiBkb3VibGUJc3RhcnR0aW1lLCBlbmR0aW1lOwoK IGZvcihpPTA7IGk8IGRpbSpkaW07IGkrKykgYVtpXSA9IGJbaV0gPSAwLjA7CiBzdGFydHRpbWUg PSBkdGltZSgpOwogZm9yKGtrPTA7IGtrPGl0ZXI7IGtrKyspIHsKICAgICAgICBpZGltPTA7Cglm b3IoaT0wOyBpPGRpbTsgaSsrKSB7CiAgICAgICAgICAgICAgICBqZGltPTA7CgkJZm9yKGo9MDsg ajwgZGltOyBqKyspIHsKCQkJYVtqZGltK2ldID0gYltpZGltK2pdOwogICAgICAgICAgICAgICAg ICAgICAgICBqZGltKz1kaW07CgkJICB9CiAgICAgICAgICAgICAgICBpZGltKz1kaW07CgkgfQog fQogZW5kdGltZSA9IGR0aW1lKCk7CnJldHVybiBlbmR0aW1lLXN0YXJ0dGltZTsKfQoKZG91Ymxl IGJlbmNoMihkb3VibGUgKmEsIGRvdWJsZSAqYiwgaW50IGRpbSwgaW50IGl0ZXIpIHsKCiBpbnQg aSxqLGtrLGlkaW0samRpbTsKIGRvdWJsZQlzdGFydHRpbWUsIGVuZHRpbWU7CgogZm9yKGk9MDsg aTwgZGltKmRpbTsgaSsrKSBhW2ldID0gYltpXSA9IDAuMDsKIHN0YXJ0dGltZSA9IGR0aW1lKCk7 CiBmb3Ioa2s9MDsga2s8aXRlcjsga2srKykgewogICAgICAgIGpkaW09MDsKCWZvcihqPTA7IGo8 IGRpbTsgaisrKSB7CiAgICAgICAgICAgICAgICBpZGltPTA7CgkJZm9yKGk9MDsgaTxkaW07IGkr KykgewoJCQlhW2pkaW0raV0gPSBiW2lkaW0ral07CiAgICAgICAgICAgICAgICAgICAgICAgIGlk aW0rPWRpbTsKCQkgIH0KICAgICAgICAgICAgICAgIGpkaW0rPWRpbTsKCSB9CiB9CiBlbmR0aW1l ID0gZHRpbWUoKTsKIHJldHVybiBlbmR0aW1lLXN0YXJ0dGltZTsKfQoKaW50IG1haW4oKQp7CiBk b3VibGUJKmEsICpiOwogaW50ICAgIGRpbSxpdGVyOwogZG91YmxlIHRpbWUxLHRpbWUyOwoKCiBm b3IoZGltPTIwMTsgZGltPDM1MDA7IGRpbSs9MikgewogYSA9IChkb3VibGUgKiltYWxsb2Moc2l6 ZW9mKGRvdWJsZSkqKGRpbSpkaW0qMikpOwogYiA9IGEgKyBkaW0qZGltOwogaXRlcj0zNTAwKjM1 MDAvKGRpbSpkaW0pOwogaWYoYT09TlVMTCkgewogICBwcmludGYoIm5vdCBlbm91Z2ggbWVtb3J5 XG4iKTsKICAgZXhpdCgxKTsKIH0KIHRpbWUxPWJlbmNoMShhLGIsZGltLGl0ZXIpOwogdGltZTI9 YmVuY2gyKGEsYixkaW0saXRlcik7CiBmcmVlKGEpOwogcHJpbnRmKCIlZCAiLCBkaW0pOwogcHJp bnRmKCIgJTUuMmYiLCBpdGVyKmRpbSpkaW0qc2l6ZW9mKGRvdWJsZSkqMWUtNi90aW1lMSk7CiBw cmludGYoIiAlNS4yZlxuIiwgaXRlcipkaW0qZGltKnNpemVvZihkb3VibGUpKjFlLTYvdGltZTIp OwogfQogZXhpdCgwKTsKfQoKCg==

--Multipart_Mon__12_Aug_2002_17:45:22_+0900_0825a4b0-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/