From: Date: June 12 2008 1:20pm Subject: bzr commit into mysql-6.0-wtf branch (vvaintroub:2657) Bug#24509, WL#3049 List-Archive: http://lists.mysql.com/commits/47776 X-Bug: 24509 Message-Id: <200806121120.m5CBKmCs010309@mail.mysql.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 I0F0IGZpbGU6Ly8vQzovYnpyL215c3FsLTYuMC13dGYtMjA0OC8KCiAyNjU3IFZsYWRpc2xhdiBW YWludHJvdWIJMjAwOC0wNi0xMgogICAgICBCdWcjMjQ1MDkgLSAyMDQ4IGZpbGUgZGVzY3JpcHRv ciBsaW1pdCBvbiB3aW5kb3dzIG5lZWRzIGluY3JlYXNpbmcsIGFsc28gCiAgICAgIFdMIzMwNDkg LSBpbXByb3ZlZCBXaW5kb3dzIEkvTwogICAgICAKICAgICAgVGhlIHBhdGNoIHJlcGxhY2VzIHRo ZSB1c2Ugb2YgdGhlIFBPU0lYIEkvTyBpbnRlcmZhY2VzIGluIG15c3lzIG9uIFdpbmRvd3Mgd2l0 aCAKICAgICAgdGhlIFdpbjMyIEFQSSBjYWxscyAoQ3JlYXRlRmlsZSwgV3JpdGVGaWxlLCBldGMp LiBUaGUgV2luZG93cyBIQU5ETEUgZm9yIHRoZSBvcGVuIAogICAgICBmaWxlIGlzIHN0b3JlZCBp biB0aGUgbXlfZmlsZV9pbmZvIHN0cnVjdCwgYWxvbmcgd2l0aCBhIGZsYWcgZm9yIGFwcGVuZCBt b2RlIAogICAgICAoYmVjYXVzZSB0aGUgV2luZG93cyBBUEkgZG9lcyBub3Qgc3VwcG9ydCBvcGVu aW5nIGZpbGVzIGluIGFwcGVuZCBtb2RlIGluIGFsbCBjYXNlcykKICAgICAgVGhlIGRlZmF1bHQg bWF4IG9wZW4gZmlsZXMgaGFzIGJlZW4gaW5jcmVhc2VkIHRvIDE2Mzg0IGFuZCBjYW4gYmUgaW5j cmVhc2VkIGZ1cnRoZXIKICAgICAgYnkgc2V0dGluZyAtLW1heC1vcGVuLWZpbGVzPTx2YWx1ZT4g ZHVyaW5nIHRoZSBzZXJ2ZXIgc3RhcnQuCiAgICAgICAgICAgIAogICAgICBBbm90aGVyIG1ham9y IGNoYW5nZSBpbiB0aGlzIHBhdGNoIHRoYXQgYWxtb3N0IGFsbCBXaW5kb3dzIHNwZWNpZmljIGZp bGUgSU8gY29kZQogICAgICBoYXMgYmVlbiBtb3ZlZCB0byBhIG5ldyBmaWxlIG15X3dpbmZpbGUu YywgZ3JlYXRseSByZWR1Y2luZyB0aGUgYW1vdW50IG9mIGNvZGUgCiAgICAgIGluICNpZmRlZiBi bG9ja3Mgd2l0aGluIG15c3lzLCAgdGh1cyBpbXByb3ZpbmcgcmVhZGFiaWxpdHkuCiAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAgCiAgICAgIE1pbm9yIGVuaGFuY2VtZW50czoKICAgICAg LSBteV8oZilzdGF0KCkgaXMgY2hhbmdlZCB0byB1c2UgX19zdGF0aTY0IHN0cnVjdHVyZSB3aXRo ICA2NCBmaWxlIHNpemUKICAgICAgYW5kIHRpbWVzdGFtcHMuIEl0IHdpbGwgbm93IHJldHVybiBj b3JyZWN0IGZpbGUgc2l6ZSBub3cgKEMgcnVudGltZSBpbXBsZW1lbnRhdGlvbgogICAgICB1c2Vk IHRvIHJlcG9ydCBvdXRkYXRlZCBpbmZvcm1hdGlvbikKICAgICAgLSBteV9sb2NrIG9uIFdpbmRv d3MgaXMgcHJlcGFyZWQgdG8gaGFuZGxlIGFkZGl0aW9uYWwgdGltZW91dCBwYXJhbWV0ZXIKYWRk ZWQ6CiAgbXlzcWwtdGVzdC9zdWl0ZS9sYXJnZV90ZXN0cy9yL2xvY2tfdGFibGVzX2JpZy5yZXN1 bHQKICBteXNxbC10ZXN0L3N1aXRlL2xhcmdlX3Rlc3RzL3QvbG9ja190YWJsZXNfYmlnLnRlc3QK ICBteXN5cy9teV93aW5lcnIuYwogIG15c3lzL215X3dpbmZpbGUuYwptb2RpZmllZDoKICAuYnpy LW15c3FsL2RlZmF1bHQuY29uZgogIGNsaWVudC9teXNxbGJpbmxvZy5jYwogIGNsaWVudC9teXNx bHNsYXAuYwogIGNsaWVudC9yZWFkbGluZS5jYwogIGluY2x1ZGUvY29uZmlnLXdpbi5oCiAgaW5j bHVkZS9teV9kaXIuaAogIGluY2x1ZGUvbXlfZ2xvYmFsLmgKICBpbmNsdWRlL215X3N5cy5oCiAg bGlibXlzcWwvQ01ha2VMaXN0cy50eHQKICBteXN5cy9DTWFrZUxpc3RzLnR4dAogIG15c3lzL01h a2VmaWxlLmFtCiAgbXlzeXMvZGVmYXVsdF9tb2RpZnkuYwogIG15c3lzL215X2Noc2l6ZS5jCiAg bXlzeXMvbXlfY3JlYXRlLmMKICBteXN5cy9teV9maWxlLmMKICBteXN5cy9teV9mb3Blbi5jCiAg bXlzeXMvbXlfZnN0cmVhbS5jCiAgbXlzeXMvbXlfbGliLmMKICBteXN5cy9teV9sb2NrLmMKICBt eXN5cy9teV9tbWFwLmMKICBteXN5cy9teV9vcGVuLmMKICBteXN5cy9teV9wcmVhZC5jCiAgbXlz eXMvbXlfcXVpY2suYwogIG15c3lzL215X3JlYWQuYwogIG15c3lzL215X3NlZWsuYwogIG15c3lz L215X3N0YXRpYy5jCiAgbXlzeXMvbXlfc3luYy5jCiAgbXlzeXMvbXlfd3JpdGUuYwogIHN0b3Jh Z2UvaW5ub2Jhc2UvaGFuZGxlci9oYV9pbm5vZGIuY2MKICBzdG9yYWdlL215aXNhbS9taV9sb2Nr aW5nLmMKCnBlci1maWxlIG1lc3NhZ2VzOgogIC5ienItbXlzcWwvZGVmYXVsdC5jb25mCiAgICBj aGFuZ2UgdHJlZSBuYW1lCiAgY2xpZW50L215c3FsYmlubG9nLmNjCiAgICBmaWxlbm8gLT4gbXlf ZmlsZW5vCiAgY2xpZW50L215c3Fsc2xhcC5jCiAgICBmaWxlbm8gLT4gbXlfZmlsZW5vCiAgY2xp ZW50L3JlYWRsaW5lLmNjCiAgICBmaWxlbm8gLT4gbXlfZmlsZW5vCiAgaW5jbHVkZS9jb25maWct d2luLmgKICAgIEluY3JlYXNlIE9TX0ZJTEVfTElNSVQgZm9yIFdpbmRvd3MKICBpbmNsdWRlL215 X2Rpci5oCiAgICBVc2Ugc3RhdDY0IGZvciBzdGF0KCkgZmFtaWx5IG9mIGZ1bmN0aW9ucyBvbiBX aW5kb3dzLCBiZWNhdXNlIG9mIDY0IGJpdCBmaWxlIHNpemUKICBpbmNsdWRlL215X2dsb2JhbC5o CiAgICBQb3J0IGNvbXBpbGVfdGltZV9hc3NlcnQoKSBmb3IgdXNlIG9uIFdpbmRvd3MgKHJlbGll cyBvbiBDX0FTU0VSVCBWaXN1YWwgU3R1ZGlvIG1hY3JvKQogICAgSW5jcmVhc2VkIGRlZmF1bHQg dmFsdWUgZm9yIG9wZW4gZmlsZSBsaW1pdCB0byAxNksKICBpbmNsdWRlL215X3N5cy5oCiAgICAt IG15X2ZpbGVfaW5mbyBnb3QgbmV3IHN0cnVjdHVyZSBtZW1iZXJzIC0gZmlsZSBoYW5kbGUgYW5k IG9wZW4gZmxhZ3MuCiAgICAtIG5ldyBBTlNJL1BPU0lYIGZpbGUgSU8gZnVuY3Rpb25zIG9uIHdp bmRvd3MgKGltcGxlbWVudGVkIGluIG15X3dpbmZpbGUuYyBhbmQgCiAgICAgbm90IHVzaW5nIEMg cnVudGltZSkKICBsaWJteXNxbC9DTWFrZUxpc3RzLnR4dAogICAgbmV3IGZpbGVzIG15X3dpbmZp bGUuYyBhbmQgbXlfd2luZXJyLmMKICBteXNxbC10ZXN0L3N1aXRlL2xhcmdlX3Rlc3RzL3IvbG9j a190YWJsZXNfYmlnLnJlc3VsdAogICAgdGVzdCBmb3IgbW9yZSB0aGVuIDIwNDggb3BlbiBmaWxl IGRlc2NyaXB0b3JzIG9uIFdpbmRvd3MKICBteXNxbC10ZXN0L3N1aXRlL2xhcmdlX3Rlc3RzL3Qv bG9ja190YWJsZXNfYmlnLnRlc3QKICAgIHRlc3QgZm9yIG1vcmUgdGhlbiAyMDQ4IG9wZW4gZmls ZSBkZXNjcmlwdG9ycyBvbiBXaW5kb3dzLCB1c2luZyBMT0NLIFRBQkxFUwogIG15c3lzL0NNYWtl TGlzdHMudHh0CiAgICBuZXcgZmlsZXMgbXlfd2luZmlsZS5jIGFuZCBteV93aW5lcnIuYwogIG15 c3lzL01ha2VmaWxlLmFtCiAgICBuZXcgZmlsZXMgbXlfd2luZmlsZS5jIGFuZCBteV93aW5lcnIu YwogIG15c3lzL2RlZmF1bHRfbW9kaWZ5LmMKICAgIGZpbGVuby0+bXlfZmlsZW5vCiAgbXlzeXMv bXlfY2hzaXplLmMKICAgIGltcGxlbWVudGF0aW9uIG9mIGNoc2l6ZSBvbiBXaW5kb3dzIG5vdyBt b3ZlZCB0byBteV93aW5maWxlLmMKICBteXN5cy9teV9jcmVhdGUuYwogICAgLSBteV9zb3Blbi0+ bXlfd2luX29wZW4KICAgIC0gY2xvc2Ugb3BlbiBmaWxlIGJlZm9yZSByZW1vdmluZyAod29uJ3Qg d29yayBvbiBXaW5kb3dzIG90aGVyd2lzZSkKICBteXN5cy9teV9maWxlLmMKICAgIE9uIFdpbmRv d3MsIGZpbGVzIHJldHVybmVkIGJ5IG15X29wZW4gd2lsbCBub3Qgc3RhcnQgd2l0aCAwLCBidXQg MjA0OCAKICAgIChtYWtpbmcgaXQgc2ltcGxlIHRvIGRldGVjdCBpbmNvbXBhdGlibGUgbWl4IG9m IENSVCBhbmQgbXlzeXMgIGlvIGZ1bmN0aW9ucykKICBteXN5cy9teV9mb3Blbi5jCiAgICBmaWxl bm8tPm15X3dpbl9maWxlbm8gLCBmY2xvc2UtPm15X3dpbl9mY2xvc2UsIGZkb3Blbi0+bXlfd2lu X2Zkb3BlbgogICAgY2hlY2tpbmcgZm9yIGxlZ2FsIGZpbGVuYW1lIG9uIG9wZW4oKSBpcyBkb25l IGJ5IG15X3dpbl9bZl1vcGVuIGZ1bmN0aW9ucwogIG15c3lzL215X2ZzdHJlYW0uYwogICAgZmls ZW5vLT5teV9maWxlbm8KICBteXN5cy9teV9saWIuYwogICAgV2luZG93cyBzdGF0KCkgZnVuY3Rp b25zIGFyZSBtb3ZlZCB0byBteV93aW5maWxlLmMKICBteXN5cy9teV9sb2NrLmMKICAgIE1vdmUg V2luZG93cyBjb2RlIHVuZGVyICNpZmRlZiB0byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHdpbl9sb2Nr KCkuCiAgICBBZGQgYSBwYXJhbWV0ZXIgZm9yIGxvY2sgd2FpdCB0aW1lb3V0IChhcyByZXF1ZXN0 ZWQgYnkgR3VpbGhlbSkKICBteXN5cy9teV9tbWFwLmMKICAgIF9nZXRfb3NmaGFuZGxlLT5teV9n ZXRfb3NmaGFuZGxlCiAgbXlzeXMvbXlfb3Blbi5jCiAgICBteV9zb3Blbi0+bXlfd2luX29wZW4g KHNpbXBsZXIgaW50ZXJmYWNlKQogIG15c3lzL215X3ByZWFkLmMKICAgIFJlbW92ZWQgbW9zdCB3 aW5kb3dzIHNwZWNpZmljIGNvZGUgdG8gbXlfd2luX2ZpbGUuYwogICAgVXNlIG15X3dpbl9wcmVh ZAogIG15c3lzL215X3F1aWNrLmMKICAgIFJlbW92ZWQgbW9zdCB3aW5kb3dzIHNwZWNpZmljIGNv ZGUgdG8gbXlfd2luX2ZpbGUuYwogICAgVXNlIG15X3dpbl9yZWFkL215X3dpbl93cml0ZQogIG15 c3lzL215X3JlYWQuYwogICAgUmVtb3ZlZCBtb3N0IHdpbmRvd3Mgc3BlY2lmaWMgY29kZSB0byBt eV93aW5fZmlsZS5jCiAgICBVc2UgbXlfd2luX3JlYWQoKQogIG15c3lzL215X3NlZWsuYwogICAg VXNlIG15X3dpbl9sc2VlaygpIG9uIFdpbmRvd3MgaW4gbXlfc2VlaygoKSBhbmQgIG15X3RlbGwo KQogICAgUmVtb3ZlZCBkZWFkIGNvZGUgKHN5bmNocm9uaXphdGlvbiBvZiBsc2Vla3MpCiAgICBJ bXByb3ZlZCBEQlVHIHRyYWNpbmcgKGZpbGUgcG9zaXRpb24gaXMgdWxvbmdsb25nLCBub3QgdWxv bmcpCiAgbXlzeXMvbXlfc3RhdGljLmMKICAgIFJlbW92ZWQgYXJyYXkgaW5pdGlhbGl6YXRpb24u IG15X2ZpbGVfaW5mb19kZWZhdWx0IGlzIGdsb2JhbCB2YXJpYWJsZQogICAgdGh1cyBpdCBpcyBp bml0aWFsaXplZCB3aXRoIGFsbCB6ZXJvcyBhbnl3YXkuCiAgbXlzeXMvbXlfc3luYy5jCiAgICBf Y29tbWl0LT5teV93aW5fZnN5bmMKICBteXN5cy9teV93aW5lcnIuYwogICAgTmV3IGZpbGUgbXlf d2luZXJyLmMKICAgIEV4cG9ydHMgbXlfb3NtYXBlcnIgbW9kZWxsZWQgYWZ0ZXIgdW5kb2N1bWVu dGVkIEMgcnVudGltZQogICAgZnVuY3Rpb24gX2Rvc21hcGVycigpLiBUaGUgcHJvYmxlbSB3aXRo IF9kb3NtYXBlcnIoKSB1c2VkIHByZXZpb3VzbHkgaXMgdGhhdCAKICAgIDEpIGl0IGlzIG5vd2hl cmUgZG9jdW1lbnRlZCBhbmQgdGh1cyBjb2RlIHJlbHlpbmcgb24gaXQgaXMgbm90IGd1YXJhbnRl ZWQgdG8gd29yawogICAgICAgaW4gc3Vic2VxdWVudCByZWxlYXNlcyBvbiB0aGUgQyBydW50aW1l CiAgICAyKSBpdCBpcyBwcmVzZW50IG9ubHkgaW4gc3RhdGljIEMgcnVudGltZSAobXlzcWxkIGRv ZXMgbm90IGxpbmsgaWYgY29tcGlsZWQgd2l0aAogICAgIC9NRCkKICBteXN5cy9teV93aW5maWxl LmMKICAgIE5ldyBmaWxlIG15X3dpbmZpbGUuYwogICAgSW1wbGVtZW50cyBBTlNJL1Bvc2l4IGZp bGUgaW8gcm91dGluZXMsIGlmIHBvc3NpYmxlIHdpdGhvdXQgdXNpbmcgQyBydW50aW1lCiAgICAo QyBydW50aW1lIGRyb3BwZWQgYmVjYXVzZSBvZiB0aGUgMjA0OCBmaWxlIGRlc2NyaXB0b3IgbGlt aXQpLgogIG15c3lzL215X3dyaXRlLmMKICAgIHdyaXRlLT5teV93aW5fd3JpdGUKICBzdG9yYWdl L2lubm9iYXNlL2hhbmRsZXIvaGFfaW5ub2RiLmNjCiAgICBteXN5cyBuYXRpdmUgV2luZG93cyBJ TyA6IGNvcnJlY3QgaW5ub2RiIHRtcCBmaWxlIGhhbmRsaW5nCiAgICBteXNxbF90bXBmaWxlIGRv ZXMgbm90IHJldHVybiB2YWxpZCBDUlQgZmlsZSBkZXNjcmlwdG9yLCB0aHVzCiAgICBpdCBpcyBu b3QgcG9zc2libGUgdG8gZHVwKCkgaXQuIEluc3RlYWQsIHRoZSBuYXRpdmUgZmlsZSBoYW5kbGUg aGFzIAogICAgdG8gYmUgZHVwbGljYXRlZCBhbmQgdGhlbiBjb252ZXJ0ZWQgdG8gQ1JUIGRlc2Ny aXB0b3IKICBzdG9yYWdlL215aXNhbS9taV9sb2NraW5nLmMKICAgIF9jb21taXQtPm15X3N5bmMK PT09IG1vZGlmaWVkIGZpbGUgJy5ienItbXlzcWwvZGVmYXVsdC5jb25mJwotLS0gYS8uYnpyLW15 c3FsL2RlZmF1bHQuY29uZgkyMDA4LTA1LTI4IDE1OjEzOjE4ICswMDAwCisrKyBiLy5ienItbXlz cWwvZGVmYXVsdC5jb25mCTIwMDgtMDYtMTIgMTE6MjA6MjggKzAwMDAKQEAgLTEsNCArMSw0IEBA CiBbTVlTUUxdCiBwb3N0X2NvbW1pdF90byA9ICJjb21taXRzQGxpc3RzLm15c3FsLmNvbSIKIHBv c3RfcHVzaF90byA9ICJjb21taXRzQGxpc3RzLm15c3FsLmNvbSIKLXRyZWVfbmFtZSA9ICJteXNx bC02LjAiCit0cmVlX25hbWUgPSAibXlzcWwtNi4wLXd0ZiIKCj09PSBtb2RpZmllZCBmaWxlICdj bGllbnQvbXlzcWxiaW5sb2cuY2MnCi0tLSBhL2NsaWVudC9teXNxbGJpbmxvZy5jYwkyMDA4LTA0 LTAzIDE3OjIyOjEwICswMDAwCisrKyBiL2NsaWVudC9teXNxbGJpbmxvZy5jYwkyMDA4LTA2LTEy IDExOjIwOjI4ICswMDAwCkBAIC0xODQwLDcgKzE4NDAsNyBAQCBzdGF0aWMgRXhpdF9zdGF0dXMg ZHVtcF9sb2NhbF9sb2dfZW50cmllCiAgICAgICByZXR1cm4gRVJST1JfU1RPUDsKICAgICB9CiAj ZW5kaWYgCi0gICAgaWYgKGluaXRfaW9fY2FjaGUoZmlsZSwgZmlsZW5vKHN0ZGluKSwgMCwgUkVB RF9DQUNIRSwgKG15X29mZl90KSAwLAorICAgIGlmIChpbml0X2lvX2NhY2hlKGZpbGUsIG15X2Zp bGVubyhzdGRpbiksIDAsIFJFQURfQ0FDSEUsIChteV9vZmZfdCkgMCwKIAkJICAgICAgMCwgTVlG KE1ZX1dNRSB8IE1ZX05BQlAgfCBNWV9ET05UX0NIRUNLX0ZJTEVTSVpFKSkpCiAgICAgewogICAg ICAgZXJyb3IoIkZhaWxlZCB0byBpbml0IElPIGNhY2hlLiIpOwoKPT09IG1vZGlmaWVkIGZpbGUg J2NsaWVudC9teXNxbHNsYXAuYycKLS0tIGEvY2xpZW50L215c3Fsc2xhcC5jCTIwMDgtMDQtMjUg MTY6NDM6MjUgKzAwMDAKKysrIGIvY2xpZW50L215c3Fsc2xhcC5jCTIwMDgtMDYtMTIgMTE6MjA6 MjggKzAwMDAKQEAgLTEzMzEsNyArMTMzMSw3IEBAIGdldF9vcHRpb25zKGludCAqYXJnYyxjaGFy ICoqKmFyZ3YpCiAgICAgCiAgICAgaWYgKG9wdF9jc3Zfc3RyWzBdID09ICctJykKICAgICB7Ci0g ICAgICBjc3ZfZmlsZT0gZmlsZW5vKHN0ZG91dCk7CisgICAgICBjc3ZfZmlsZT0gbXlfZmlsZW5v KHN0ZG91dCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnY2xp ZW50L3JlYWRsaW5lLmNjJwotLS0gYS9jbGllbnQvcmVhZGxpbmUuY2MJMjAwNy0wNS0xMCAwOTo1 OTozOSArMDAwMAorKysgYi9jbGllbnQvcmVhZGxpbmUuY2MJMjAwOC0wNi0xMiAxMToyMDoyOCAr MDAwMApAQCAtMzMsNyArMzMsNyBAQCBMSU5FX0JVRkZFUiAqYmF0Y2hfcmVhZGxpbmVfaW5pdCh1 bG9uZyBtCiAgIGlmICghKGxpbmVfYnVmZj0oTElORV9CVUZGRVIqKQogICAgICAgICBteV9tYWxs b2Moc2l6ZW9mKCpsaW5lX2J1ZmYpLE1ZRihNWV9XTUUgfCBNWV9aRVJPRklMTCkpKSkKICAgICBy ZXR1cm4gMDsKLSAgaWYgKGluaXRfbGluZV9idWZmZXIobGluZV9idWZmLGZpbGVubyhmaWxlKSxJ T19TSVpFLG1heF9zaXplKSkKKyAgaWYgKGluaXRfbGluZV9idWZmZXIobGluZV9idWZmLG15X2Zp bGVubyhmaWxlKSxJT19TSVpFLG1heF9zaXplKSkKICAgewogICAgIG15X2ZyZWUobGluZV9idWZm LE1ZRigwKSk7CiAgICAgcmV0dXJuIDA7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnaW5jbHVkZS9jb25m aWctd2luLmgnCi0tLSBhL2luY2x1ZGUvY29uZmlnLXdpbi5oCTIwMDgtMDYtMDUgMjA6NDQ6Mjkg KzAwMDAKKysrIGIvaW5jbHVkZS9jb25maWctd2luLmgJMjAwOC0wNi0xMiAxMToyMDoyOCArMDAw MApAQCAtNzMsNyArNzMsNiBAQAogI2VuZGlmCiAKIC8qIEZpbGUgYW5kIGxvY2sgY29uc3RhbnRz ICovCi0jZGVmaW5lIE9fU0hBUkUJCTB4MTAwMAkJLyogT3BlbiBmaWxlIGluIHNoYXJpbmcgbW9k ZSAqLwogI2lmZGVmIF9fQk9STEFORENfXwogI2RlZmluZSBGX1JETENLCQlMS19OQkxDSwkvKiBy ZWFkIGxvY2sgKi8KICNkZWZpbmUgRl9XUkxDSwkJTEtfTkJSTENLCS8qIHdyaXRlIGxvY2sgKi8K QEAgLTM1NSw3ICszNTQsNyBAQCBpbmxpbmUgZG91YmxlIHVsb25nbG9uZzJkb3VibGUodWxvbmds b25nCiAjZGVmaW5lIEZOX0RFVkNIQVIJJzonCiAjZGVmaW5lIEZOX05FVFdPUktfRFJJVkVTCS8q IFVzZXMgXFwgdG8gaW5kaWNhdGUgbmV0d29yayBkcml2ZXMgKi8KICNkZWZpbmUgRk5fTk9fQ0FT RV9TRU5DRQkvKiBGaWxlcyBhcmUgbm90IGNhc2Utc2Vuc2l0aXZlICovCi0jZGVmaW5lIE9TX0ZJ TEVfTElNSVQJMjA0OAorI2RlZmluZSBPU19GSUxFX0xJTUlUCVVJTlRfTUFYIC8qIE5vIGxpbWl0 Ki8KIAogI2RlZmluZSBET19OT1RfUkVNT1ZFX1RIUkVBRF9XUkFQUEVSUwogI2RlZmluZSB0aHJl YWRfc2FmZV9pbmNyZW1lbnQoVixMKSBJbnRlcmxvY2tlZEluY3JlbWVudCgobG9uZyopICYoVikp Cgo9PT0gbW9kaWZpZWQgZmlsZSAnaW5jbHVkZS9teV9kaXIuaCcKLS0tIGEvaW5jbHVkZS9teV9k aXIuaAkyMDA2LTEyLTIzIDE5OjE3OjE1ICswMDAwCisrKyBiL2luY2x1ZGUvbXlfZGlyLmgJMjAw OC0wNi0xMiAxMToyMDoyOCArMDAwMApAQCAtNjksNyArNjksMTEgQEAgdHlwZWRlZiBzdHJ1Y3Qg bXlfc3RhdAogCiAjZWxzZQogCisjaWYoX01TQ19WRVIpCisjZGVmaW5lIE1ZX1NUQVQgc3RydWN0 IF9fc3RhdDY0IC8qIDY0IGJpdCBmaWxlIHNpemUgYW5kIHRpbWVzdGFtcCAqLworI2Vsc2UKICNk ZWZpbmUgTVlfU1RBVCBzdHJ1Y3Qgc3RhdAkvKiBPcmdpbmFsIHN0cnVjdCBoYXZlIHdoYXQgd2Ug bmVlZCAqLworI2VuZGlmCiAKICNlbmRpZiAvKiBVU0VfTVlfU1RBVF9TVFJVQ1QgKi8KIAoKPT09 IG1vZGlmaWVkIGZpbGUgJ2luY2x1ZGUvbXlfZ2xvYmFsLmgnCi0tLSBhL2luY2x1ZGUvbXlfZ2xv YmFsLmgJMjAwOC0wNS0yMiAxODo0MDoxNSArMDAwMAorKysgYi9pbmNsdWRlL215X2dsb2JhbC5o CTIwMDgtMDYtMTIgMTE6MjA6MjggKzAwMDAKQEAgLTQ2OSwxNSArNDY5LDE3IEBAIENfTU9ERV9F TkQKICNpbmNsdWRlIDxhc3NlcnQuaD4KIAogLyogYW4gYXNzZXJ0IHRoYXQgd29ya3MgYXQgY29t cGlsZS10aW1lLiBvbmx5IGZvciBjb25zdGFudCBleHByZXNzaW9uICovCi0jaWZuZGVmIF9fR05V Q19fCi0jZGVmaW5lIGNvbXBpbGVfdGltZV9hc3NlcnQoWCkgIGRvIHsgfSB3aGlsZSgwKQotI2Vs c2UKKyNpZiAoX01TQ19WRVIgPj0xNDAwKQorI2RlZmluZSBjb21waWxlX3RpbWVfYXNzZXJ0KFgp ICBkbyB7IENfQVNTRVJUKFgpOyB9IHdoaWxlKDApCisjZWxpZiBkZWZpbmVkIChfX19HTlVDX18p CiAjZGVmaW5lIGNvbXBpbGVfdGltZV9hc3NlcnQoWCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAogICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2hhciBjb21waWxlX3RpbWVfYXNz ZXJ0WyhYKSA/IDEgOiAtMV0gICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7ICAgICAgICAgIFwKICAgfSB3 aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgY29tcGlsZV90aW1lX2Fzc2VydChYKSAgZG8geyB9IHdo aWxlKDApCiAjZW5kaWYKIAogLyogR28gYXJvdW5kIHNvbWUgYnVncyBpbiBkaWZmZXJlbnQgT1Mg YW5kIGNvbXBpbGVycyAqLwpAQCAtNzYwLDcgKzc2MiwzMCBAQCB0eXBlZGVmIFNPQ0tFVF9TSVpF X1RZUEUgc2l6ZV9zb2NrZXQ7CiAjZGVmaW5lIEZOX0xJQkNIQVIJJy8nCiAjZGVmaW5lIEZOX1JP T1RESVIJIi8iCiAjZW5kaWYKKworLyogCisgIE1ZX0ZJTEVfTUlOIGlzICBXaW5kb3dzIHNwZWNp YWxpdHkgYW5kIGlzIHVzZWQgdG8gcXVpY2tseSBkZXRlY3QKKyAgdGhlIG1pc21hdGNoIG9mIENS VCBhbmQgbXlzeXMgZmlsZSBJTyB1c2FnZSBvbiBXaW5kb3dzIGF0IHJ1bnRpbWUuCisgIENSVCBm aWxlIGRlc2NyaXB0b3JzIGNhbiBiZSBpbiB0aGUgcmFuZ2UgMC0yMDQ3LCB3aGVyZWFzIGRlc2Ny aXB0b3JzIHJldHVybmVkCisgIGJ5IG15X29wZW4oKSB3aWxsIHN0YXJ0IHdpdGggMjA0OC4gSWYg YSBmaWxlIGRlc2NyaXB0b3Igd2l0aCB2YWx1ZSBsZXNzIHRoZW4KKyAgTVlfRklMRV9NSU4gaXMg cGFzc2VkIHRvIG15c3lzIElPIGZ1bmN0aW9uLCBjaGFuY2VzIGFyZSBpdCBzdGVtbXMgZnJvbQor ICBvcGVuKCkvZmlsZW5vKCkgYW5kIG5vdCBteV9vcGVuKCkvbXlfZmlsZW5vLgorCisgIE9uIFVu aXgsIHdoZXJlIHRoZSBteXN5cyBmdW5jdGlvbnMgYXJlIGxpZ2h0IHdyYXBwZXJzIGFyb3VuZCBs aWJjLCBNWV9GSUxFX01JTgorICBpcyBsb2dpY2FsbHkgMC4KKyovCisjaWZkZWYgX19XSU5fXwor I2RlZmluZSBNWV9GSUxFX01JTiAgMjA0OAorI2Vsc2UKKyNkZWZpbmUgTVlfRklMRV9NSU4gIDAK KyNlbmRpZgorCisjaWZuZGVmIF9fV0lOX18KICNkZWZpbmUgTVlfTkZJTEUJNjQJLyogVGhpcyBp cyBvbmx5IHVzZWQgdG8gc2F2ZSBmaWxlbmFtZXMgKi8KKyNlbHNlCisjZGVmaW5lIE1ZX05GSUxF ICgxNjM4NCArIE1ZX0ZJTEVfTUlOKSAvKiBUaGlzIGlzIHVzZWQgdG8gc3RvcmUgZmlsZSBoYW5k bGVzICovCisjZW5kaWYKKwogI2lmbmRlZiBPU19GSUxFX0xJTUlUCiAjZGVmaW5lIE9TX0ZJTEVf TElNSVQJNjU1MzUKICNlbmRpZgpAQCAtNzk5LDcgKzgyNCw2IEBAIHR5cGVkZWYgU09DS0VUX1NJ WkVfVFlQRSBzaXplX3NvY2tldDsKICNkZWZpbmUgTk9fSEFTSAkJCS8qIE5vdCBuZWVkZWQgYW55 bW9yZSAqLwogI2lmZGVmIF9fV0lOX18KICNkZWZpbmUgTk9fRElSX0xJQlJBUlkJCS8qIE5vdCBz dGFuZGFyIGRpci1saWJyYXJ5ICovCi0jZGVmaW5lIFVTRV9NWV9TVEFUX1NUUlVDVAkvKiBGb3Ig bXlfbGliICovCiAjZW5kaWYKIAogLyogU29tZSBkZWZpbmVzIG9mIGZ1bmN0aW9ucyBmb3IgcG9y dGFiaWxpdHkgKi8KCj09PSBtb2RpZmllZCBmaWxlICdpbmNsdWRlL215X3N5cy5oJwotLS0gYS9p bmNsdWRlL215X3N5cy5oCTIwMDgtMDYtMDUgMjA6NDQ6MjkgKzAwMDAKKysrIGIvaW5jbHVkZS9t eV9zeXMuaAkyMDA4LTA2LTEyIDExOjIwOjI4ICswMDAwCkBAIC0zMTIsOCArMzEyLDEyIEBAIGVu dW0gZmlsZV90eXBlCiAKIHN0cnVjdCBzdF9teV9maWxlX2luZm8KIHsKLSAgY2hhciAqCQluYW1l OwotICBlbnVtIGZpbGVfdHlwZQl0eXBlOworICBjaGFyICogIG5hbWU7CisjaWZkZWYgX19XSU5f XworICBIQU5ETEUgZmhhbmRsZTsgICAvKiB3aW4zMiBmaWxlIGhhbmRsZSAqLworICBpbnQgICAg b2ZsYWc7ICAgICAvKiBvcGVuIGZsYWdzLCBlLmcgT19BUFBFTkQgKi8KKyNlbmRpZgorICBlbnVt ICAgZmlsZV90eXBlCXR5cGU7CiAjaWYgZGVmaW5lZChUSFJFQUQpICYmICFkZWZpbmVkKEhBVkVf UFJFQUQpICYmICFkZWZpbmVkKF9fV0lOX18pCiAgIHB0aHJlYWRfbXV0ZXhfdAltdXRleDsKICNl bmRpZgpAQCAtNjE5LDggKzYyMywyOCBAQCBleHRlcm4gdm9pZCAqbXlfbWVtbWVtKGNvbnN0IHZv aWQgKmhheXN0CiAKIAogI2lmZGVmIF9fV0lOX18KLWV4dGVybiBpbnQgbXlfYWNjZXNzKGNvbnN0 IGNoYXIgKnBhdGgsIGludCBhbW9kZSk7Ci1leHRlcm4gRmlsZSBteV9zb3Blbihjb25zdCBjaGFy ICpwYXRoLCBpbnQgb2ZsYWcsIGludCBzaGZsYWcsIGludCBwbW9kZSk7CitleHRlcm4gaW50ICAg ICAgbXlfYWNjZXNzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBhbW9kZSk7CitleHRlcm4gRmlsZSAg ICAgbXlfd2luX29wZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IG9mbGFnKTsKK2V4dGVybiBpbnQg ICAgICBteV93aW5fY2xvc2UoRmlsZSBmZCk7CitleHRlcm4gc2l6ZV90ICAgbXlfd2luX3JlYWQo RmlsZSBmZCwgdWNoYXIgKmJ1ZmZlciwgc2l6ZV90ICBjb3VudCk7CitleHRlcm4gc2l6ZV90ICAg bXlfd2luX3dyaXRlKEZpbGUgZmQsIGNvbnN0IHVjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCk7 CitleHRlcm4gc2l6ZV90ICAgbXlfd2luX3ByZWFkKEZpbGUgZmQsIHVjaGFyICpidWZmZXIsIHNp emVfdCBjb3VudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15X29mZl90IG9mZnNl dCk7CitleHRlcm4gc2l6ZV90ICAgbXlfd2luX3B3cml0ZShGaWxlIGZkLCBjb25zdCB1Y2hhciAq YnVmZmVyLCBzaXplX3QgY291bnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlf b2ZmX3Qgb2Zmc2V0KTsKK2V4dGVybiBteV9vZmZfdCBteV93aW5fbHNlZWsoRmlsZSBmZCwgbXlf b2ZmX3QgcG9zLCBpbnQgd2hlbmNlKTsKK2V4dGVybiBpbnQgICAgICBteV93aW5fY2hzaXplKEZp bGUgZmQsICBteV9vZmZfdCBuZXdsZW5ndGgpOworZXh0ZXJuIEZJTEUqICAgIG15X3dpbl9mb3Bl bihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqdHlwZSk7CitleHRlcm4gRmlsZSAg ICAgbXlfd2luX2ZjbG9zZShGSUxFICpmaWxlKTsKK2V4dGVybiBGaWxlICAgICBteV93aW5fZmls ZW5vKEZJTEUgKmZpbGUpOworZXh0ZXJuIEZJTEUqICAgIG15X3dpbl9mZG9wZW4oRmlsZSBGaWxl ZGVzLCBjb25zdCBjaGFyICp0eXBlKTsKK2V4dGVybiBpbnQgICAgICBteV93aW5fc3RhdChjb25z dCBjaGFyICpwYXRoLCBzdHJ1Y3QgX3N0YXQ2NCAqYnVmKTsKK2V4dGVybiBpbnQgICAgICBteV93 aW5fZnN0YXQoRmlsZSBmZCwgc3RydWN0IF9zdGF0NjQgKmJ1Zik7CitleHRlcm4gaW50ICAgICAg bXlfd2luX2ZzeW5jKEZpbGUgZmQpOworZXh0ZXJuIEZpbGUgICAgIG15X3dpbl9zb3Blbihjb25z dCBjaGFyICpwYXRoLCBpbnQgb2ZsYWcsIGludCBzaGZsYWcsIGludCBwZXJtKTsKK2V4dGVybiBI QU5ETEUgICBteV9nZXRfb3NmaGFuZGxlKEZpbGUgZmQpOworZXh0ZXJuIEZpbGUgICAgIG15X29w ZW5fb3NmaGFuZGxlKEhBTkRMRSBoYW5kbGUsIGludCBvZmxhZyk7CitleHRlcm4gdm9pZCAgICAg bXlfb3NtYXBlcnIodW5zaWduZWQgbG9uZyBsYXN0X2Vycm9yKTsKICNlbHNlCiAjZGVmaW5lIG15 X2FjY2VzcyBhY2Nlc3MKICNlbmRpZgpAQCAtNjQxLDYgKzY2NSw3IEBAIGV4dGVybiB2b2lkIGlu aXRfZ2xvYl9lcnJzKHZvaWQpOwogZXh0ZXJuIEZJTEUgKm15X2ZvcGVuKGNvbnN0IGNoYXIgKkZp bGVOYW1lLGludCBGbGFncyxteWYgTXlGbGFncyk7CiBleHRlcm4gRklMRSAqbXlfZmRvcGVuKEZp bGUgRmlsZWRlcyxjb25zdCBjaGFyICpuYW1lLCBpbnQgRmxhZ3MsbXlmIE15RmxhZ3MpOwogZXh0 ZXJuIGludCBteV9mY2xvc2UoRklMRSAqZmQsbXlmIE15RmxhZ3MpOworZXh0ZXJuIEZpbGUgbXlf ZmlsZW5vKEZJTEUgKmZkKTsKIGV4dGVybiBpbnQgbXlfY2hzaXplKEZpbGUgZmQsbXlfb2ZmX3Qg bmV3bGVuZ3RoLCBpbnQgZmlsbGVyLCBteWYgTXlGbGFncyk7CiBleHRlcm4gaW50IG15X3N5bmMo RmlsZSBmZCwgbXlmIG15X2ZsYWdzKTsKIGV4dGVybiBpbnQgbXlfc3luY19kaXIoY29uc3QgY2hh ciAqZGlyX25hbWUsIG15ZiBteV9mbGFncyk7CkBAIC05MDYsNyArOTMxLDcgQEAgZXh0ZXJuIGlu dCBteV9nZXRuY3B1cygpOwogI2RlZmluZSBIQVZFX01NQVAKICNlbmRpZgogCi12b2lkICpteV9t bWFwKHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBteV9vZmZfdCk7Cit2b2lkICpteV9t bWFwKHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCwgRmlsZSwgbXlfb2ZmX3QpOwogaW50IG15X211 bm1hcCh2b2lkICosIHNpemVfdCk7CiAjZW5kaWYKIAoKPT09IG1vZGlmaWVkIGZpbGUgJ2xpYm15 c3FsL0NNYWtlTGlzdHMudHh0JwotLS0gYS9saWJteXNxbC9DTWFrZUxpc3RzLnR4dAkyMDA4LTA0 LTA4IDAxOjQ3OjEzICswMDAwCisrKyBiL2xpYm15c3FsL0NNYWtlTGlzdHMudHh0CTIwMDgtMDYt MTIgMTE6MjA6MjggKzAwMDAKQEAgLTk4LDcgKzk4LDcgQEAgU0VUKENMSUVOVF9TT1VSQ0VTICAg Li4vbXlzeXMvYXJyYXkuYyAuLgogICAgICAgICAgICAgICAgICAgICAgLi4vc3RyaW5ncy9zdHJ0 b2xsLmMgLi4vc3RyaW5ncy9zdHJ0b3VsbC5jIC4uL3N0cmluZ3Mvc3RyeG1vdi5jIC4uL3N0cmlu Z3Mvc3RyeG5tb3YuYyAKICAgICAgICAgICAgICAgICAgICAgIC4uL215c3lzL3Rocl9tdXRleC5j IC4uL215c3lzL3R5cGVsaWIuYyAuLi92aW8vdmlvLmMgLi4vdmlvL3Zpb3NvY2tldC5jIAogICAg ICAgICAgICAgICAgICAgICAgLi4vdmlvL3Zpb3NzbC5jIC4uL3Zpby92aW9zc2xmYWN0b3JpZXMu YyAuLi9zdHJpbmdzL3htbC5jIC4uL215c3lzL21mX3Fzb3J0LmMKLQkJICAgICAuLi9teXN5cy9t eV9nZXRzeXN0aW1lLmMgLi4vbXlzeXMvbXlfc3luYy5jICR7TElCX1NPVVJDRVN9KQorCQkgICAg IC4uL215c3lzL215X2dldHN5c3RpbWUuYyAuLi9teXN5cy9teV9zeW5jLmMgLi4vbXlzeXMvbXlf d2luZXJyLmMgLi4vbXlzeXMvbXlfd2luZmlsZS5jICR7TElCX1NPVVJDRVN9KQogCiAjIE5lZWQg dG8gc2V0IFVTRV9UTFMgZm9yIGJ1aWxkaW5nIHRoZSBETEwsIHNpbmNlIF9fZGVjbHNwZWModGhy ZWFkKQogIyBhcHByb2FjaCB0byB0aHJlYWQgbG9jYWwgc3RvcmFnZSBkb2VzIG5vdCB3b3JrIHBy b3Blcmx5IGluIERMTHMuCgo9PT0gYWRkZWQgZmlsZSAnbXlzcWwtdGVzdC9zdWl0ZS9sYXJnZV90 ZXN0cy9yL2xvY2tfdGFibGVzX2JpZy5yZXN1bHQnCi0tLSBhL215c3FsLXRlc3Qvc3VpdGUvbGFy Z2VfdGVzdHMvci9sb2NrX3RhYmxlc19iaWcucmVzdWx0CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAw MDAKKysrIGIvbXlzcWwtdGVzdC9zdWl0ZS9sYXJnZV90ZXN0cy9yL2xvY2tfdGFibGVzX2JpZy5y ZXN1bHQJMjAwOC0wNi0xMiAxMToyMDoyOCArMDAwMApAQCAtMCwwICsxIEBACithbGwgZG9uZQoK PT09IGFkZGVkIGZpbGUgJ215c3FsLXRlc3Qvc3VpdGUvbGFyZ2VfdGVzdHMvdC9sb2NrX3RhYmxl c19iaWcudGVzdCcKLS0tIGEvbXlzcWwtdGVzdC9zdWl0ZS9sYXJnZV90ZXN0cy90L2xvY2tfdGFi bGVzX2JpZy50ZXN0CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGIvbXlzcWwtdGVzdC9z dWl0ZS9sYXJnZV90ZXN0cy90L2xvY2tfdGFibGVzX2JpZy50ZXN0CTIwMDgtMDYtMTIgMTE6MjA6 MjggKzAwMDAKQEAgLTAsMCArMSwzMiBAQAorIw0KKyMgQnVnIzEyMzQ1IGNhbm5vdCB1c2UgbW9y ZSB0aGFuIDIwNDggZmlsZSBkZXNjcmlwdG9ycyBvbiB3aW5kb3dzDQorIw0KKy0tZGlzYWJsZV9x dWVyeV9sb2cNCitjcmVhdGUgZGF0YWJhc2UgbWFueV90YWJsZXM7DQordXNlIG1hbnlfdGFibGVz Ow0KK2xldCAkbWF4X3RhYmxlcz0zMDAwOw0KK2xldCAkaT0kbWF4X3RhYmxlczsNCisNCistLWRp c2FibGVfd2FybmluZ3MNCitjcmVhdGUgdGFibGUgdCAoaSBpbnQpOw0KK2xldCAkdGFibGVfbGlz dD10IFJFQUQ7IA0KKw0KK3doaWxlICgkaSkNCit7DQorIGV2YWwgY3JlYXRlIHRhYmxlIHQkaSAo aSBpbnQpOw0KKyBsZXQgJHRhYmxlX2xpc3Q9ICR0YWJsZV9saXN0ICx0JGkgUkVBRDsNCisgZGVj ICRpOw0KK30NCisNCisjbG9jayBhbGwgdGFibGVzIHdlIGp1c3QgY3JlYXRlZCAocmVzZW1ibGVz IG15c3FsZHVtcCBzdGFydHVwIGlzIGRvaW5nIHdpdGggLS1hbGwtZGF0YWJhc2VzIG9wZXJhdGlv bikNCisjVGhlcmUgd2lsbCBiZSAzIGRlc2NyaXB0b3JzIGZvciBlYWNoIHRhYmxlICh0YWJsZS5G Uk0sIHRhYmxlLk1ZSSBhbmQgdGFibGUuTVlEIGZpbGVzKSBtZWFucyA5MDAwIGZpbGVzDQorI2Rl c2NyaXB0b3JzIGFsdG9nZXRoZXIuIEZvciBNaWNyb3NvZnQgQyBydW50aW1lLCB0aGlzIGlzIHdh eSB0b28gbWFueS4NCisNCitldmFsIExPQ0sgVEFCTEVTICR0YWJsZV9saXN0Ow0KK3VubG9jayB0 YWJsZXM7DQorDQorZHJvcCBkYXRhYmFzZSBtYW55X3RhYmxlczsNCistLWRpc2FibGVfcXVlcnlf bG9nDQorLS1lY2hvIGFsbCBkb25lDQorDQorDQoKPT09IG1vZGlmaWVkIGZpbGUgJ215c3lzL0NN YWtlTGlzdHMudHh0JwotLS0gYS9teXN5cy9DTWFrZUxpc3RzLnR4dAkyMDA3LTExLTA3IDIzOjE4 OjMwICswMDAwCisrKyBiL215c3lzL0NNYWtlTGlzdHMudHh0CTIwMDgtMDYtMTIgMTE6MjA6Mjgg KzAwMDAKQEAgLTM5LDcgKzM5LDcgQEAgU0VUKE1ZU1lTX1NPVVJDRVMgIGFycmF5LmMgY2hhcnNl dC1kZWYuYwogCQkJCW15X21rZGlyLmMgbXlfbW1hcC5jIG15X25ldC5jIG15X29uY2UuYyBteV9v cGVuLmMgbXlfcHJlYWQuYyBteV9wdGhyZWFkLmMgCiAJCQkJbXlfcXVpY2suYyBteV9yZWFkLmMg bXlfcmVhbGxvYy5jIG15X3JlZGVsLmMgbXlfcmVuYW1lLmMgbXlfc2Vlay5jIG15X3NsZWVwLmMK IAkJCQlteV9zdGF0aWMuYyBteV9zeW1saW5rLmMgbXlfc3ltbGluazIuYyBteV9zeW5jLmMgbXlf dGhyX2luaXQuYyBteV93aW5jb25kLmMKLQkJCQlteV93aW5kYWMuYyBteV93aW50aHJlYWQuYyBt eV93cml0ZS5jIHB0cl9jbXAuYyBxdWV1ZXMuYworCQkJCW15X3dpbmVyci5jIG15X3dpbmZpbGUu YyBteV93aW5kYWMuYyBteV93aW50aHJlYWQuYyBteV93cml0ZS5jIHB0cl9jbXAuYyBxdWV1ZXMu YwogCQkJCXJpam5kYWVsLmMgc2FmZW1hbGxvYy5jIHNoYTEuYyBzdHJpbmcuYyB0aHJfYWxhcm0u YyB0aHJfbG9jay5jIHRocl9tdXRleC5jCiAJCQkJdGhyX3J3bG9jay5jIHRyZWUuYyB0eXBlbGli LmMgbXlfdmxlLmMgYmFzZTY0LmMgbXlfbWVtbWVtLmMgbXlfZ2V0cGFnZXNpemUuYwogCQkJCW15 X2F0b21pYy5jIG15X2dldG5jcHVzLmMgbGZfZHluYXJyYXkuYyBsZl9hbGxvYy1waW4uYyBsZl9o YXNoLmMpCgo9PT0gbW9kaWZpZWQgZmlsZSAnbXlzeXMvTWFrZWZpbGUuYW0nCi0tLSBhL215c3lz L01ha2VmaWxlLmFtCTIwMDgtMDQtMDEgMTU6MTM6NTcgKzAwMDAKKysrIGIvbXlzeXMvTWFrZWZp bGUuYW0JMjAwOC0wNi0xMiAxMToyMDoyOCArMDAwMApAQCAtNTcsNyArNTcsNyBAQCBsaWJteXN5 c19hX1NPVVJDRVMgPSAgICBteV9pbml0LmMgbXlfZ2V0CiBFWFRSQV9ESVNUID0JCXRocl9hbGFy bS5jIHRocl9sb2NrLmMgbXlfcHRocmVhZC5jIG15X3Rocl9pbml0LmMgXAogCQkJdGhyX211dGV4 LmMgdGhyX3J3bG9jay5jIFwKIAkJCUNNYWtlTGlzdHMudHh0IG1mX3NvdW5kZXguYyBcCi0JCQlt eV9jb25pby5jIG15X3dpbmNvbmQuYyBteV93aW50aHJlYWQuYworCQkJbXlfY29uaW8uYyBteV93 aW5jb25kLmMgbXlfd2ludGhyZWFkLmMgbXlfd2luZXJyLmMgbXlfd2luZmlsZS5jCiBsaWJteXN5 c19hX0xJQkFERCA9CUBUSFJFQURfTE9CSkVDVFNACiAjIHRlc3RfZGlyX0RFUEVOREVOQ0lFUz0J JChMSUJSQVJJRVMpCiAjIHRlc3RoYXNoX0RFUEVOREVOQ0lFUz0JJChMSUJSQVJJRVMpCgo9PT0g bW9kaWZpZWQgZmlsZSAnbXlzeXMvZGVmYXVsdF9tb2RpZnkuYycKLS0tIGEvbXlzeXMvZGVmYXVs dF9tb2RpZnkuYwkyMDA3LTA3LTMwIDA4OjMzOjUwICswMDAwCisrKyBiL215c3lzL2RlZmF1bHRf bW9kaWZ5LmMJMjAwOC0wNi0xMiAxMToyMDoyOCArMDAwMApAQCAtODAsNyArODAsNyBAQCBpbnQg bW9kaWZ5X2RlZmF1bHRzX2ZpbGUoY29uc3QgY2hhciAqZmlsCiAgICAgREJVR19SRVRVUk4oMik7 CiAKICAgLyogbXlfZnN0YXQgZG9lc24ndCB1c2UgdGhlIGZsYWcgcGFyYW1ldGVyICovCi0gIGlm IChteV9mc3RhdChmaWxlbm8oY25mX2ZpbGUpLCAmZmlsZV9zdGF0LCBNWUYoMCkpKQorICBpZiAo bXlfZnN0YXQobXlfZmlsZW5vKGNuZl9maWxlKSwgJmZpbGVfc3RhdCwgTVlGKDApKSkKICAgICBn b3RvIG1hbGxvY19lcnI7CiAKICAgaWYgKG9wdGlvbiAmJiBvcHRpb25fdmFsdWUpCkBAIC0yMTUs NyArMjE1LDcgQEAgaW50IG1vZGlmeV9kZWZhdWx0c19maWxlKGNvbnN0IGNoYXIgKmZpbAogICBp ZiAob3B0X2FwcGxpZWQpCiAgIHsKICAgICAvKiBEb24ndCB3cml0ZSB0aGUgZmlsZSBpZiB0aGVy ZSBhcmUgbm8gY2hhbmdlcyB0byBiZSBtYWRlICovCi0gICAgaWYgKG15X2Noc2l6ZShmaWxlbm8o Y25mX2ZpbGUpLCAobXlfb2ZmX3QpIChkc3RfcHRyIC0gZmlsZV9idWZmZXIpLCAwLAorICAgIGlm IChteV9jaHNpemUobXlfZmlsZW5vKGNuZl9maWxlKSwgKG15X29mZl90KSAoZHN0X3B0ciAtIGZp bGVfYnVmZmVyKSwgMCwKICAgICAgICAgICAgICAgICAgIE1ZRihNWV9XTUUpKSB8fAogICAgICAg ICBteV9mc2VlayhjbmZfZmlsZSwgMCwgTVlfU0VFS19TRVQsIE1ZRigwKSkgfHwKICAgICAgICAg bXlfZndyaXRlKGNuZl9maWxlLCAodWNoYXIqKSBmaWxlX2J1ZmZlciwgKHNpemVfdCkgKGRzdF9w dHIgLSBmaWxlX2J1ZmZlciksCgo9PT0gbW9kaWZpZWQgZmlsZSAnbXlzeXMvbXlfY2hzaXplLmMn Ci0tLSBhL215c3lzL215X2Noc2l6ZS5jCTIwMDctMDUtMTAgMDk6NTk6MzkgKzAwMDAKKysrIGIv bXlzeXMvbXlfY2hzaXplLmMJMjAwOC0wNi0xMiAxMToyMDoyOCArMDAwMApAQCAtNTIsMjAgKzUy LDEzIEBAIGludCBteV9jaHNpemUoRmlsZSBmZCwgbXlfb2ZmX3QgbmV3bGVuZ3QKIAogICBpZiAo b2xkc2l6ZSA+IG5ld2xlbmd0aCkKICAgewotI2lmIGRlZmluZWQoSEFWRV9TRVRGSUxFUE9JTlRF UikKLSAgLyogVGhpcyBpcyBmb3IgdGhlIG1vbWVudCBvbmx5IHRydWUgb24gd2luZG93cyAqLwot ICAgIGxvbmcgaXNfc3VjY2VzczsKLSAgICBIQU5ETEUgd2luX2ZpbGU9IChIQU5ETEUpIF9nZXRf b3NmaGFuZGxlKGZkKTsKLSAgICBsb25nIGxlbmd0aF9sb3csIGxlbmd0aF9oaWdoOwotICAgIGxl bmd0aF9sb3c9IChsb25nKSAodWxvbmcpIG5ld2xlbmd0aDsKLSAgICBsZW5ndGhfaGlnaD0gKGxv bmcpICgodWxvbmdsb25nKSBuZXdsZW5ndGggPj4gMzIpOwotICAgIGlzX3N1Y2Nlc3M9IFNldEZp bGVQb2ludGVyKHdpbl9maWxlLCBsZW5ndGhfbG93LCAmbGVuZ3RoX2hpZ2gsIEZJTEVfQkVHSU4p OwotICAgIGlmIChpc19zdWNjZXNzID09IC0xICYmIChteV9lcnJubz0gR2V0TGFzdEVycm9yKCkp ICE9IE5PX0VSUk9SKQorI2lmZGVmIF9fV0lOX18KKyAgICBpZihteV93aW5fY2hzaXplKGZkLCBu ZXdsZW5ndGgpKQorICAgIHsKKyAgICAgIG15X2Vycm5vPSBlcnJubzsKICAgICAgIGdvdG8gZXJy OwotICAgIGlmIChTZXRFbmRPZkZpbGUod2luX2ZpbGUpKQotICAgICAgREJVR19SRVRVUk4oMCk7 Ci0gICAgbXlfZXJybm89IEdldExhc3RFcnJvcigpOwotICAgIGdvdG8gZXJyOworICAgIH0KKyAg ICBEQlVHX1JFVFVSTigwKTsKICNlbGlmIGRlZmluZWQoSEFWRV9GVFJVTkNBVEUpCiAgICAgaWYg KGZ0cnVuY2F0ZShmZCwgKG9mZl90KSBuZXdsZW5ndGgpKQogICAgIHsKCj09PSBtb2RpZmllZCBm aWxlICdteXN5cy9teV9jcmVhdGUuYycKLS0tIGEvbXlzeXMvbXlfY3JlYXRlLmMJMjAwOC0wMy0x MyAyMTozNTo1MiArMDAwMAorKysgYi9teXN5cy9teV9jcmVhdGUuYwkyMDA4LTA2LTEyIDExOjIw OjI4ICswMDAwCkBAIC00MSwxNiArNDEsMTIgQEAgRmlsZSBteV9jcmVhdGUoY29uc3QgY2hhciAq RmlsZU5hbWUsIGludAogCQkgICBGaWxlTmFtZSwgQ3JlYXRlRmxhZ3MsIGFjY2Vzc19mbGFncywg TXlGbGFncykpOwogCiAjaWYgIWRlZmluZWQoTk9fT1BFTl8zKQotICBmZCA9IG9wZW4oKGNoYXIg KikgRmlsZU5hbWUsIGFjY2Vzc19mbGFncyB8IE9fQ1JFQVQsCisgIGZkPSBvcGVuKChjaGFyICop IEZpbGVOYW1lLCBhY2Nlc3NfZmxhZ3MgfCBPX0NSRUFULAogCSAgICBDcmVhdGVGbGFncyA/IENy ZWF0ZUZsYWdzIDogbXlfdW1hc2spOwotI2VsaWYgZGVmaW5lZChWTVMpCi0gIGZkID0gb3Blbigo Y2hhciAqKSBGaWxlTmFtZSwgYWNjZXNzX2ZsYWdzIHwgT19DUkVBVCwgMCwKLQkgICAgImN0eD1z dG0iLCJjdHg9YmluIik7CiAjZWxpZiBkZWZpbmVkKF9fV0lOX18pCi0gIGZkPSBteV9zb3Blbigo Y2hhciAqKSBGaWxlTmFtZSwgYWNjZXNzX2ZsYWdzIHwgT19DUkVBVCB8IE9fQklOQVJZLAotCSAg ICAgICBTSF9ERU5ZTk8sIE1ZX1NfSVJFQUQgfCBNWV9TX0lXUklURSk7CisgIGZkPSBteV93aW5f b3BlbihGaWxlTmFtZSwgYWNjZXNzX2ZsYWdzIHwgT19DUkVBVCk7CiAjZWxzZQotICBmZCA9IG9w ZW4oRmlsZU5hbWUsIGFjY2Vzc19mbGFncyk7CisgIGZkPSBvcGVuKEZpbGVOYW1lLCBhY2Nlc3Nf ZmxhZ3MpOwogI2VuZGlmCiAKICAgaWYgKChNeUZsYWdzICYgTVlfU1lOQ19ESVIpICYmIChmZCA+ PTApICYmCkBAIC03MSw2ICs2Nyw3IEBAIEZpbGUgbXlfY3JlYXRlKGNvbnN0IGNoYXIgKkZpbGVO YW1lLCBpbnQKICAgaWYgKHVubGlrZWx5KGZkID49IDAgJiYgcmMgPCAwKSkKICAgewogICAgIGlu dCB0bXA9IG15X2Vycm5vOworICAgIG15X2Nsb3NlKGZkLCBNeUZsYWdzKTsKICAgICBteV9kZWxl dGUoRmlsZU5hbWUsIE15RmxhZ3MpOwogICAgIG15X2Vycm5vPSB0bXA7CiAgIH0KCj09PSBtb2Rp ZmllZCBmaWxlICdteXN5cy9teV9maWxlLmMnCi0tLSBhL215c3lzL215X2ZpbGUuYwkyMDA2LTEy LTIzIDE5OjIwOjQwICswMDAwCisrKyBiL215c3lzL215X2ZpbGUuYwkyMDA4LTA2LTEyIDExOjIw OjI4ICswMDAwCkBAIC05Nyw2ICs5Nyw3IEBAIHVpbnQgbXlfc2V0X21heF9vcGVuX2ZpbGVzKHVp bnQgZmlsZXMpCiAgIERCVUdfRU5URVIoIm15X3NldF9tYXhfb3Blbl9maWxlcyIpOwogICBEQlVH X1BSSU5UKCJlbnRlciIsKCJmaWxlczogJXUgIG15X2ZpbGVfbGltaXQ6ICV1IiwgZmlsZXMsIG15 X2ZpbGVfbGltaXQpKTsKIAorICBmaWxlcyArPSBNWV9GSUxFX01JTjsKICAgZmlsZXM9IHNldF9t YXhfb3Blbl9maWxlcyhtaW4oZmlsZXMsIE9TX0ZJTEVfTElNSVQpKTsKICAgaWYgKGZpbGVzIDw9 IE1ZX05GSUxFKQogICAgIERCVUdfUkVUVVJOKGZpbGVzKTsKCj09PSBtb2RpZmllZCBmaWxlICdt eXN5cy9teV9mb3Blbi5jJwotLS0gYS9teXN5cy9teV9mb3Blbi5jCTIwMDgtMDMtMjcgMTg6NDA6 MDAgKzAwMDAKKysrIGIvbXlzeXMvbXlfZm9wZW4uYwkyMDA4LTA2LTEyIDExOjIwOjI4ICswMDAw CkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAibXlfc3RhdGljLmgiCiAjaW5jbHVkZSA8ZXJy bm8uaD4KICNpbmNsdWRlICJteXN5c19lcnIuaCIKKyNpbmNsdWRlIDxteV9zeXMuaD4KIAogc3Rh dGljIHZvaWQgbWFrZV9mdHlwZShjaGFyICogdG8saW50IGZsYWcpOwogCkBAIC00MSwyNCArNDIs MTQgQEAgRklMRSAqbXlfZm9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGludAogICBEQlVHX0VO VEVSKCJteV9mb3BlbiIpOwogICBEQlVHX1BSSU5UKCJteSIsKCJOYW1lOiAnJXMnICBmbGFnczog JWQgIE15RmxhZ3M6ICVkIiwKIAkJICAgZmlsZW5hbWUsIGZsYWdzLCBNeUZsYWdzKSk7Ci0gIC8q IAotICAgIGlmIHdlIGFyZSBub3QgY3JlYXRpbmcsIHRoZW4gd2UgbmVlZCB0byB1c2UgbXlfYWNj ZXNzIHRvIG1ha2Ugc3VyZSAgCi0gICAgdGhlIGZpbGUgZXhpc3RzIHNpbmNlIFdpbmRvd3MgZG9l c24ndCBoYW5kbGUgZmlsZXMgbGlrZSAiY29tMS5zeW0iIAotICAgIHZlcnkgIHdlbGwgCi0gICov CisKKyAgbWFrZV9mdHlwZSh0eXBlLGZsYWdzKTsKKwogI2lmZGVmIF9fV0lOX18KLSAgaWYgKGNo ZWNrX2lmX2xlZ2FsX2ZpbGVuYW1lKGZpbGVuYW1lKSkKLSAgewotICAgIGVycm5vPSBFQUNDRVM7 Ci0gICAgZmQ9IDA7Ci0gIH0KLSAgZWxzZQorICBmZD0gbXlfd2luX2ZvcGVuKGZpbGVuYW1lLCB0 eXBlKTsKKyNlbHNlCisgIGZkPSBmb3BlbihmaWxlbmFtZSwgdHlwZSk7CiAjZW5kaWYKLSAgewot ICAgIG1ha2VfZnR5cGUodHlwZSxmbGFncyk7Ci0gICAgZmQgPSBmb3BlbihmaWxlbmFtZSwgdHlw ZSk7Ci0gIH0KLSAgCiAgIGlmIChmZCAhPSAwKQogICB7CiAgICAgLyoKQEAgLTY2LDE4ICs1Nywy MCBAQCBGSUxFICpteV9mb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50CiAgICAgICBvbiBz b21lIE9TIChTVU5PUykuIEFjdHVhbGx5IHRoZSBmaWxlbmFtZSBzYXZlIGlzbid0IHRoYXQgaW1w b3J0YW50CiAgICAgICBzbyB3ZSBjYW4gaWdub3JlIGlmIHRoaXMgZG9lc24ndCB3b3JrLgogICAg ICovCi0gICAgaWYgKCh1aW50KSBmaWxlbm8oZmQpID49IG15X2ZpbGVfbGltaXQpCisKKyAgICBp bnQgZmlsZWRlc2MgPSBteV9maWxlbm8oZmQpOworICAgIGlmICgodWludClmaWxlZGVzYyA+PSBt eV9maWxlX2xpbWl0KQogICAgIHsKICAgICAgIHRocmVhZF9zYWZlX2luY3JlbWVudChteV9zdHJl YW1fb3BlbmVkLCZUSFJfTE9DS19vcGVuKTsKICAgICAgIERCVUdfUkVUVVJOKGZkKTsJCQkJLyog c2FmZWd1YXJkICovCiAgICAgfQogICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmVEhSX0xPQ0tfb3Bl bik7Ci0gICAgaWYgKChteV9maWxlX2luZm9bZmlsZW5vKGZkKV0ubmFtZSA9IChjaGFyKikKKyAg ICBpZiAoKG15X2ZpbGVfaW5mb1tmaWxlZGVzY10ubmFtZSA9IChjaGFyKikKIAkgbXlfc3RyZHVw KGZpbGVuYW1lLE15RmxhZ3MpKSkKICAgICB7CiAgICAgICBteV9zdHJlYW1fb3BlbmVkKys7CiAg ICAgICBteV9maWxlX3RvdGFsX29wZW5lZCsrOwotICAgICAgbXlfZmlsZV9pbmZvW2ZpbGVubyhm ZCldLnR5cGUgPSBTVFJFQU1fQllfRk9QRU47CisgICAgICBteV9maWxlX2luZm9bZmlsZWRlc2Nd LnR5cGUgPSBTVFJFQU1fQllfRk9QRU47CiAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmVEhS X0xPQ0tfb3Blbik7CiAgICAgICBEQlVHX1BSSU5UKCJleGl0IiwoInN0cmVhbTogJXAiLCBmZCkp OwogICAgICAgREJVR19SRVRVUk4oZmQpOwpAQCAtOTksNiArOTIsNyBAQCBGSUxFICpteV9mb3Bl bihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50CiAKIAkvKiBDbG9zZSBhIHN0cmVhbSAqLwogCisv KiBDbG9zZSBhIHN0cmVhbSAqLwogaW50IG15X2ZjbG9zZShGSUxFICpmZCwgbXlmIE15RmxhZ3Mp CiB7CiAgIGludCBlcnIsZmlsZTsKQEAgLTEwNiw4ICsxMDAsMTMgQEAgaW50IG15X2ZjbG9zZShG SUxFICpmZCwgbXlmIE15RmxhZ3MpCiAgIERCVUdfUFJJTlQoIm15IiwoInN0cmVhbTogJXAgIE15 RmxhZ3M6ICVkIiwgZmQsIE15RmxhZ3MpKTsKIAogICBwdGhyZWFkX211dGV4X2xvY2soJlRIUl9M T0NLX29wZW4pOwotICBmaWxlPWZpbGVubyhmZCk7Ci0gIGlmICgoZXJyID0gZmNsb3NlKGZkKSkg PCAwKQorICBmaWxlPSBteV9maWxlbm8oZmQpOworI2lmbmRlZiBfX1dJTl9fCisgIGVyciA9IGZj bG9zZShmZCk7CisjZWxzZQorICBlcnIgPSBteV93aW5fZmNsb3NlKGZkKTsKKyNlbmRpZgorICBp ZihlcnIgPCAwKQogICB7CiAgICAgbXlfZXJybm89ZXJybm87CiAgICAgaWYgKE15RmxhZ3MgJiAo TVlfRkFFIHwgTVlfV01FKSkKQEAgLTEzOCw3ICsxMzcsMTIgQEAgRklMRSAqbXlfZmRvcGVuKEZp bGUgRmlsZWRlcywgY29uc3QgY2hhcgogCQkgICBGaWxlZGVzLCBGbGFncywgTXlGbGFncykpOwog CiAgIG1ha2VfZnR5cGUodHlwZSxGbGFncyk7Ci0gIGlmICgoZmQgPSBmZG9wZW4oRmlsZWRlcywg dHlwZSkpID09IDApCisjaWZkZWYgX19XSU5fXworICBmZCA9IG15X3dpbl9mZG9wZW4oRmlsZWRl cywgdHlwZSk7CisjZWxzZQorICBmZCA9IGZkb3BlbihGaWxlZGVzLCB0eXBlKTsKKyNlbmRpZgor ICBpZighZmQpCiAgIHsKICAgICBteV9lcnJubz1lcnJubzsKICAgICBpZiAoTXlGbGFncyAmIChN WV9GQUUgfCBNWV9XTUUpKQoKPT09IG1vZGlmaWVkIGZpbGUgJ215c3lzL215X2ZzdHJlYW0uYycK LS0tIGEvbXlzeXMvbXlfZnN0cmVhbS5jCTIwMDgtMDQtMDkgMDE6MDc6MDAgKzAwMDAKKysrIGIv bXlzeXMvbXlfZnN0cmVhbS5jCTIwMDgtMDYtMTIgMTE6MjA6MjggKzAwMDAKQEAgLTU2LDExICs1 NiwxMSBAQCBzaXplX3QgbXlfZnJlYWQoRklMRSAqc3RyZWFtLCB1Y2hhciAqQnVmCiAgICAgewog ICAgICAgaWYgKGZlcnJvcihzdHJlYW0pKQogCW15X2Vycm9yKEVFX1JFQUQsIE1ZRihNRV9CRUxM K01FX1dBSVRUQU5HKSwKLQkJIG15X2ZpbGVuYW1lKGZpbGVubyhzdHJlYW0pKSxlcnJubyk7CisJ CSBteV9maWxlbmFtZShteV9maWxlbm8oc3RyZWFtKSksZXJybm8pOwogICAgICAgZWxzZQogICAg ICAgaWYgKE15RmxhZ3MgJiAoTVlfTkFCUCB8IE1ZX0ZOQUJQKSkKIAlteV9lcnJvcihFRV9FT0ZF UlIsIE1ZRihNRV9CRUxMK01FX1dBSVRUQU5HKSwKLQkJIG15X2ZpbGVuYW1lKGZpbGVubyhzdHJl YW0pKSxlcnJubyk7CisJCSBteV9maWxlbmFtZShteV9maWxlbm8oc3RyZWFtKSksZXJybm8pOwog ICAgIH0KICAgICBteV9lcnJubz1lcnJubyA/IGVycm5vIDogLTE7CiAgICAgaWYgKGZlcnJvcihz dHJlYW0pIHx8IE15RmxhZ3MgJiAoTVlfTkFCUCB8IE1ZX0ZOQUJQKSkKQEAgLTE0NCw3ICsxNDQs NyBAQCBzaXplX3QgbXlfZndyaXRlKEZJTEUgKnN0cmVhbSwgY29uc3QgdWNoCiAJaWYgKE15Rmxh Z3MgJiAoTVlfV01FIHwgTVlfRkFFIHwgTVlfRk5BQlApKQogCXsKIAkgIG15X2Vycm9yKEVFX1dS SVRFLCBNWUYoTUVfQkVMTCtNRV9XQUlUVEFORyksCi0JCSAgIG15X2ZpbGVuYW1lKGZpbGVubyhz dHJlYW0pKSxlcnJubyk7CisJCSAgIG15X2ZpbGVuYW1lKG15X2ZpbGVubyhzdHJlYW0pKSxlcnJu byk7CiAJfQogCXdyaXR0ZW5ieXRlcz0gKHNpemVfdCkgLTE7ICAgICAgICAvKiBSZXR1cm4gdGhh dCB3ZSBnb3QgZXJyb3IgKi8KIAlicmVhazsKQEAgLTE4NCwzICsxODQsMTQgQEAgbXlfb2ZmX3Qg bXlfZnRlbGwoRklMRSAqc3RyZWFtLCBteWYgTXlGbAogICBEQlVHX1BSSU5UKCJleGl0IiwoImZ0 ZWxsOiAlbHUiLCh1bG9uZykgcG9zKSk7CiAgIERCVUdfUkVUVVJOKChteV9vZmZfdCkgcG9zKTsK IH0gLyogbXlfZnRlbGwgKi8KKworCisvKiBHZXQgYSBGaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhl IHN0cmVhbSovCitpbnQgbXlfZmlsZW5vKEZJTEUgKmYpCit7CisjaWZkZWYgX19XSU5fXworICBy ZXR1cm4gbXlfd2luX2ZpbGVubyhmKTsKKyNlbHNlCisgcmV0dXJuIGZpbGVubyhmKTsKKyNlbmRp ZgorfQoKPT09IG1vZGlmaWVkIGZpbGUgJ215c3lzL215X2xpYi5jJwotLS0gYS9teXN5cy9teV9s aWIuYwkyMDA4LTA0LTA5IDAxOjA3OjAwICswMDAwCisrKyBiL215c3lzL215X2xpYi5jCTIwMDgt MDYtMTIgMTE6MjA6MjggKzAwMDAKQEAgLTUxNCwxMiArNTE0LDIwIEBAIGVycm9yOgogKiogTm90 ZSB0aGF0IE1ZX1NUQVQgaXMgYXNzdW1lZCB0byBiZSBzYW1lIGFzIHN0cnVjdCBzdGF0CiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLyAKIAotaW50IG15X2ZzdGF0KGludCBGaWxlZGVzLCBNWV9TVEFUICpz dGF0X2FyZWEsCisjaWZkZWYgX19XSU5fXworCisjZW5kaWYKKworaW50IG15X2ZzdGF0KEZpbGUg RmlsZWRlcywgTVlfU1RBVCAqc3RhdF9hcmVhLAogICAgICAgICAgICAgIG15ZiBNeUZsYWdzIF9f YXR0cmlidXRlX18oKHVudXNlZCkpKQogewogICBEQlVHX0VOVEVSKCJteV9mc3RhdCIpOwogICBE QlVHX1BSSU5UKCJteSIsKCJmZDogJWQgIE15RmxhZ3M6ICVkIiwgRmlsZWRlcywgTXlGbGFncykp OworI2lmZGVmIF9fV0lOX18KKyAgREJVR19SRVRVUk4obXlfd2luX2ZzdGF0KEZpbGVkZXMsIHN0 YXRfYXJlYSkpOworI2Vsc2UKICAgREJVR19SRVRVUk4oZnN0YXQoRmlsZWRlcywgKHN0cnVjdCBz dGF0ICopIHN0YXRfYXJlYSkpOworI2VuZGlmCiB9CiAKIApAQCAtNTMzLDkgKzU0MSwxMyBAQCBN WV9TVEFUICpteV9zdGF0KGNvbnN0IGNoYXIgKnBhdGgsIE1ZX1NUCiAgIGlmICgobV91c2VkPSAo c3RhdF9hcmVhID09IE5VTEwpKSkKICAgICBpZiAoIShzdGF0X2FyZWEgPSAoTVlfU1RBVCAqKSBt eV9tYWxsb2Moc2l6ZW9mKE1ZX1NUQVQpLCBteV9mbGFncykpKQogICAgICAgZ290byBlcnJvcjsK LSAgaWYgKCEgc3RhdCgoY2hhciAqKSBwYXRoLCAoc3RydWN0IHN0YXQgKikgc3RhdF9hcmVhKSAp Ci0gICAgREJVR19SRVRVUk4oc3RhdF9hcmVhKTsKLQorI2lmbmRlZiBfX1dJTl9fCisgICAgaWYg KCEgc3RhdCgoY2hhciAqKSBwYXRoLCAoc3RydWN0IHN0YXQgKikgc3RhdF9hcmVhKSApCisgICAg ICBEQlVHX1JFVFVSTihzdGF0X2FyZWEpOworI2Vsc2UKKyAgICBpZiAoISBteV93aW5fc3RhdChw YXRoLCBzdGF0X2FyZWEpICkKKyAgICAgIERCVUdfUkVUVVJOKHN0YXRfYXJlYSk7CisjZW5kaWYK ICAgREJVR19QUklOVCgiZXJyb3IiLCgiR290IGVycm5vOiAlZCBmcm9tIHN0YXQiLCBlcnJubykp OwogICBteV9lcnJubz0gZXJybm87CiAgIGlmIChtX3VzZWQpCQkJCQkvKiBGcmVlIGlmIG5ldyBh cmVhICovCgo9PT0gbW9kaWZpZWQgZmlsZSAnbXlzeXMvbXlfbG9jay5jJwotLS0gYS9teXN5cy9t eV9sb2NrLmMJMjAwOC0wMi0wMSAxMjowNDozMiArMDAwMAorKysgYi9teXN5cy9teV9sb2NrLmMJ MjAwOC0wNi0xMiAxMToyMDoyOCArMDAwMApAQCAtMjIsMTMgKzIyLDgwIEBACiAjdW5kZWYgTk9f QUxBUk1fTE9PUAogI2VuZGlmCiAjaW5jbHVkZSA8bXlfYWxhcm0uaD4KLSNpZmRlZiBfX1dJTl9f Ci0jaW5jbHVkZSA8c3lzL2xvY2tpbmcuaD4KLSNlbmRpZgogI2lmZGVmIF9fTkVUV0FSRV9fCiAj aW5jbHVkZSA8bmtzL2ZzaW8uaD4KICNlbmRpZgogCisjaWZkZWYgX19XSU5fXworI2RlZmluZSBX SU5fTE9DS19JTkZJTklURSAtMQorI2RlZmluZSBXSU5fTE9DS19TTEVFUF9NSUxMSVMgMTAwCisK K3N0YXRpYyBpbnQgd2luX2xvY2soRmlsZSBmZCwgaW50IGxvY2t0eXBlLCBteV9vZmZfdCBzdGFy dCwgbXlfb2ZmX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X3NlYykKK3sK KyAgTEFSR0VfSU5URUdFUiBsaU9mZnNldCxsaUxlbmd0aDsKKyAgRFdPUkQgZHdGbGFnczsKKyAg T1ZFUkxBUFBFRCBvdj0gezB9OworICBIQU5ETEUgaEZpbGU9IChIQU5ETEUpbXlfZ2V0X29zZmhh bmRsZShmZCk7CisgIERXT1JEICBsYXN0RXJyb3IgPSAwOworICBpbnQgaTsKKworICBEQlVHX0VO VEVSKCLilKRteV93aW5fbG9jayIpOworCisgIGxpT2Zmc2V0LlF1YWRQYXJ0PSBzdGFydDsKKyAg bGlMZW5ndGguUXVhZFBhcnQ9IGxlbmd0aDsKKworICBvdi5PZmZzZXQ9ICAgICAgbGlPZmZzZXQu TG93UGFydDsKKyAgb3YuT2Zmc2V0SGlnaD0gIGxpT2Zmc2V0LkhpZ2hQYXJ0OworCisgIGlmIChs b2NrdHlwZSA9PSBGX1VOTENLKQorICB7CisgICAgaWYoVW5sb2NrRmlsZUV4KGhGaWxlLCAwLCBs aUxlbmd0aC5Mb3dQYXJ0LCBsaUxlbmd0aC5IaWdoUGFydCwgJm92KSkKKyAgICAgIERCVUdfUkVU VVJOKDApOworICAgIGdvdG8gZXJyb3I7CisgIH0KKyAgZWxzZSBpZiAobG9ja3R5cGUgPT0gRl9S RExDSykKKyAgICAvKiByZWFkIGxvY2sgaXMgbWFwcGVkIHRvIGEgc2hhcmVkIGxvY2suICovCisg ICAgZHdGbGFncz0gMDsKKyAgZWxzZQorICAgIC8qIHdyaXRlIGxvY2sgaXMgbWFwcGVkIHRvIGFu IGV4Y2x1c2l2ZSBsb2NrLiAqLworICAgIGR3RmxhZ3M9IExPQ0tGSUxFX0VYQ0xVU0lWRV9MT0NL OworCisgIGlmICh0aW1lb3V0X3NlYyA9PSBXSU5fTE9DS19JTkZJTklURSkKKyAgeworICAgIGlm IChMb2NrRmlsZUV4KGhGaWxlLCBkd0ZsYWdzLCAwLCBsaUxlbmd0aC5Mb3dQYXJ0LCBsaUxlbmd0 aC5IaWdoUGFydCwgJm92KSkKKyAgICAgIERCVUdfUkVUVVJOKDApOworICAgIGdvdG8gZXJyb3I7 CisgIH0KKyAgCisgIGR3RmxhZ3N8PSBMT0NLRklMRV9GQUlMX0lNTUVESUFURUxZOworCisgIC8q IFRyeSBsb2NrIGluIGEgbG9vcCwgdW50aWwgdGhlIGxvY2sgaXMgYWNxdWlyZWQgb3IgdGltZW91 dCBoYXBwZW5zICovCisgIGZvcihpPTA7IDtpKz0gV0lOX0xPQ0tfU0xFRVBfTUlMTElTKQorICB7 CisgICAgaWYgKExvY2tGaWxlRXgoaEZpbGUsIGR3RmxhZ3MsIDAsIGxpTGVuZ3RoLkxvd1BhcnQs IGxpTGVuZ3RoLkhpZ2hQYXJ0LCAmb3YpKQorICAgICBEQlVHX1JFVFVSTigwKTsKKworICAgIGlm KEdldExhc3RFcnJvcigpICE9IEVSUk9SX0lPX1BFTkRJTkcpCisgICAgICBnb3RvIGVycm9yOwor CisgICAgaWYoaSA+PSB0aW1lb3V0X3NlYyoxMDAwKQorICAgICAgYnJlYWs7CisgICAgU2xlZXAo V0lOX0xPQ0tfU0xFRVBfTUlMTElTKTsKKyAgfQorCisgIC8qIHRpbWVvdXQgKi8KKyAgZXJybm8g PSBFQUdBSU47CisgIERCVUdfUkVUVVJOKC0xKTsKKworZXJyb3I6CisgICBteV9vc21hcGVycihH ZXRMYXN0RXJyb3IoKSk7CisgICBEQlVHX1JFVFVSTigtMSk7Cit9CisjZW5kaWYKKworCisKIC8q IAogICBMb2NrIGEgcGFydCBvZiBhIGZpbGUgCiAKQEAgLTQ4LDkgKzExNSw2IEBAIGludCBteV9s b2NrKEZpbGUgZmQsIGludCBsb2NrdHlwZSwgbXlfb2YKICNpZmRlZiBfX05FVFdBUkVfXwogICBp bnQgbnhFcnJubzsKICNlbmRpZgotI2lmZGVmIF9fV0lOX18KLSAgRFdPUkQgbGFzdEVycm9yOwot I2VuZGlmCiAKICAgREJVR19FTlRFUigibXlfbG9jayIpOwogICBEQlVHX1BSSU5UKCJteSIsKCJG ZDogJWQgIE9wOiAlZCAgc3RhcnQ6ICVsZCAgTGVuZ3RoOiAlbGQgIE15RmxhZ3M6ICVkIiwKQEAg LTEwMiw0MiArMTY2LDkgQEAgaW50IG15X2xvY2soRmlsZSBmZCwgaW50IGxvY2t0eXBlLCBteV9v ZgogICAgIH0KICAgfQogI2VsaWYgZGVmaW5lZChfX1dJTl9fKQotICB7Ci0gICAgCi0gICAgTEFS R0VfSU5URUdFUiBsaU9mZnNldCxsaUxlbmd0aDsKLSAgICBEV09SRCBkd0ZsYWdzOwotICAgIE9W RVJMQVBQRUQgb3Y9IHswfTsKLSAgICBIQU5ETEUgaEZpbGU9IChIQU5ETEUpX2dldF9vc2ZoYW5k bGUoZmQpOwotCi0gICAgbGFzdEVycm9yPSAwOwotCi0gICAgbGlPZmZzZXQuUXVhZFBhcnQ9IHN0 YXJ0OwotICAgIGxpTGVuZ3RoLlF1YWRQYXJ0PSBsZW5ndGg7Ci0KLSAgICBvdi5PZmZzZXQ9ICAg ICAgbGlPZmZzZXQuTG93UGFydDsKLSAgICBvdi5PZmZzZXRIaWdoPSAgbGlPZmZzZXQuSGlnaFBh cnQ7Ci0KLSAgICBpZiAobG9ja3R5cGUgPT0gRl9VTkxDSykKLSAgICB7Ci0gICAgICAvKiBUaGUg bG9jayBmbGFncyBhcmUgY3VycmVudGx5IGlnbm9yZWQgYnkgV2luZG93cyAqLwotICAgICAgaWYo VW5sb2NrRmlsZUV4KGhGaWxlLCAwLCBsaUxlbmd0aC5Mb3dQYXJ0LCBsaUxlbmd0aC5IaWdoUGFy dCwgJm92KSkKLSAgICAgICAgREJVR19SRVRVUk4oMCk7Ci0gICAgICBlbHNlCi0gICAgICAgIGxh c3RFcnJvcj0gR2V0TGFzdEVycm9yKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGxvY2t0eXBlID09 IEZfUkRMQ0spCi0gICAgICAgIC8qIHJlYWQgbG9jayBpcyBtYXBwZWQgdG8gYSBzaGFyZWQgbG9j ay4gKi8KLSAgICAgICAgZHdGbGFncz0gMDsKLSAgICBlbHNlCi0gICAgICAgIC8qIHdyaXRlIGxv Y2sgaXMgbWFwcGVkIHRvIGFuIGV4Y2x1c2l2ZSBsb2NrLiAqLwotICAgICAgICBkd0ZsYWdzPSBM T0NLRklMRV9FWENMVVNJVkVfTE9DSzsKLQotICAgIGlmIChNeUZsYWdzICYgTVlfRE9OVF9XQUlU KQotICAgICAgIGR3RmxhZ3N8PSBMT0NLRklMRV9GQUlMX0lNTUVESUFURUxZOwotCi0gICAgaWYg KExvY2tGaWxlRXgoaEZpbGUsIGR3RmxhZ3MsIDAsIGxpTGVuZ3RoLkxvd1BhcnQsIGxpTGVuZ3Ro LkhpZ2hQYXJ0LCAmb3YpKQotICAgICAgICBEQlVHX1JFVFVSTigwKTsKLSAgfQorICBpZih3aW5f bG9jayhmZCwgbG9ja3R5cGUsIHN0YXJ0LCBsZW5ndGgsIAorICAgICAgKE15RmxhZ3MgPT0gTVlf RE9OVF9XQUlUKT8wOldJTl9MT0NLX0lORklOSVRFKSA9PSAwKQorCSAgREJVR19SRVRVUk4oMCk7 CiAjZWxzZQogI2lmIGRlZmluZWQoSEFWRV9GQ05UTCkKICAgewpAQCAtMTg4LDggKzIxOSw2IEBA IGludCBteV9sb2NrKEZpbGUgZmQsIGludCBsb2NrdHlwZSwgbXlfb2YKIAogI2lmZGVmIF9fTkVU V0FSRV9fCiAgIG15X2Vycm5vID0gbnhFcnJubzsKLSNlbGlmIGRlZmluZWQoX19XSU5fXykKLSAg bXlfZXJybm8gPSAobGFzdEVycm9yID09IEVSUk9SX0lPX1BFTkRJTkcpPyBFQUdBSU46bGFzdEVy cm9yP2xhc3RFcnJvciA6IC0xOwogI2Vsc2UKIAkvKiBXZSBnb3QgYW4gZXJyb3IuIFdlIGRvbid0 IHdhbnQgRUFDQ0VTIGVycm9ycyAqLwogICBteV9lcnJubz0oZXJybm8gPT0gRUFDQ0VTKSA/IEVB R0FJTiA6IGVycm5vID8gZXJybm8gOiAtMTsKCj09PSBtb2RpZmllZCBmaWxlICdteXN5cy9teV9t bWFwLmMnCi0tLSBhL215c3lzL215X21tYXAuYwkyMDA2LTEyLTIzIDE5OjIwOjQwICswMDAwCisr KyBiL215c3lzL215X21tYXAuYwkyMDA4LTA2LTEyIDExOjIwOjI4ICswMDAwCkBAIC0zMywxMSAr MzMsMTEgQEAgc3RhdGljIFNFQ1VSSVRZX0FUVFJJQlVURVMgbW1hcF9zZWN1cml0eQogICB7c2l6 ZW9mKFNFQ1VSSVRZX0FUVFJJQlVURVMpLCAwLCBUUlVFfTsKIAogdm9pZCAqbXlfbW1hcCh2b2lk ICphZGRyLCBzaXplX3QgbGVuLCBpbnQgcHJvdCwKLSAgICAgICAgICAgICAgIGludCBmbGFncywg aW50IGZkLCBteV9vZmZfdCBvZmZzZXQpCisgICAgICAgICAgICAgICBpbnQgZmxhZ3MsIEZpbGUg ZmQsIG15X29mZl90IG9mZnNldCkKIHsKICAgSEFORExFIGhGaWxlTWFwOwogICBMUFZPSUQgcHRy OwotICBIQU5ETEUgaEZpbGU9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworICBIQU5ETEUg aEZpbGU9IChIQU5ETEUpbXlfZ2V0X29zZmhhbmRsZShmZCk7CiAgIGlmIChoRmlsZSA9PSBJTlZB TElEX0hBTkRMRV9WQUxVRSkKICAgICByZXR1cm4gTUFQX0ZBSUxFRDsKIAoKPT09IG1vZGlmaWVk IGZpbGUgJ215c3lzL215X29wZW4uYycKLS0tIGEvbXlzeXMvbXlfb3Blbi5jCTIwMDgtMDQtMDgg MDE6NDc6MTMgKzAwMDAKKysrIGIvbXlzeXMvbXlfb3Blbi5jCTIwMDgtMDYtMTIgMTE6MjA6Mjgg KzAwMDAKQEAgLTQ0LDI4ICs0NCw3IEBAIEZpbGUgbXlfb3Blbihjb25zdCBjaGFyICpGaWxlTmFt ZSwgaW50IEYKICAgREJVR19QUklOVCgibXkiLCgiTmFtZTogJyVzJyAgRmxhZ3M6ICVkICBNeUZs YWdzOiAlZCIsCiAJCSAgIEZpbGVOYW1lLCBGbGFncywgTXlGbGFncykpOwogI2lmIGRlZmluZWQo X19XSU5fXykKLSAgLyogCi0gICAgQ2hlY2sgdGhhdCB3ZSBkb24ndCB0cnkgdG8gb3BlbiBvciBj cmVhdGUgYSBmaWxlIG5hbWUgdGhhdCBtYXkKLSAgICBjYXVzZSBwcm9ibGVtcyBmb3IgdXMgaW4g dGhlIGZ1dHVyZSAobGlrZSBQUk4pCi0gICovICAKLSAgaWYgKGNoZWNrX2lmX2xlZ2FsX2ZpbGVu YW1lKEZpbGVOYW1lKSkKLSAgewotICAgIGVycm5vPSBFQUNDRVM7Ci0gICAgREJVR19SRVRVUk4o bXlfcmVnaXN0ZXJfZmlsZW5hbWUoLTEsIEZpbGVOYW1lLCBGSUxFX0JZX09QRU4sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUVfRklMRU5PVEZPVU5ELCBNeUZsYWdzKSk7 Ci0gIH0KLSNpZm5kZWYgX19XSU5fXwotICBpZiAoRmxhZ3MgJiBPX1NIQVJFKQotICAgIGZkID0g c29wZW4oKGNoYXIgKikgRmlsZU5hbWUsIChGbGFncyAmIH5PX1NIQVJFKSB8IE9fQklOQVJZLCBT SF9ERU5ZTk8sCi0JICAgICAgIE1ZX1NfSVJFQUQgfCBNWV9TX0lXUklURSk7Ci0gIGVsc2UKLSAg ICBmZCA9IG9wZW4oKGNoYXIgKikgRmlsZU5hbWUsIEZsYWdzIHwgT19CSU5BUlksCi0JICAgICAg TVlfU19JUkVBRCB8IE1ZX1NfSVdSSVRFKTsKLSNlbHNlCi0gIGZkPSBteV9zb3BlbigoY2hhciAq KSBGaWxlTmFtZSwgKEZsYWdzICYgfk9fU0hBUkUpIHwgT19CSU5BUlksIFNIX0RFTllOTywKLQkg ICAgICAgTVlfU19JUkVBRCB8IE1ZX1NfSVdSSVRFKTsKLSNlbmRpZgotCisgIGZkID0gbXlfd2lu X29wZW4oRmlsZU5hbWUsIEZsYWdzKTsKICNlbGlmICFkZWZpbmVkKE5PX09QRU5fMykKICAgZmQg PSBvcGVuKEZpbGVOYW1lLCBGbGFncywgbXlfdW1hc2spOwkvKiBOb3JtYWwgdW5peCAqLwogI2Vs c2UKQEAgLTk0LDExICs3MywxNCBAQCBpbnQgbXlfY2xvc2UoRmlsZSBmZCwgbXlmIE15RmxhZ3Mp CiAgIERCVUdfUFJJTlQoIm15IiwoImZkOiAlZCAgTXlGbGFnczogJWQiLGZkLCBNeUZsYWdzKSk7 CiAKICAgcHRocmVhZF9tdXRleF9sb2NrKCZUSFJfTE9DS19vcGVuKTsKKyNpZm5kZWYgX19XSU5f XwogICBkbwogICB7CiAgICAgZXJyPSBjbG9zZShmZCk7CiAgIH0gd2hpbGUgKGVyciA9PSAtMSAm JiBlcnJubyA9PSBFSU5UUik7Ci0KKyNlbHNlCisgIGVycj0gbXlfd2luX2Nsb3NlKGZkKTsKKyNl bmRpZgogICBpZiAoZXJyKQogICB7CiAgICAgREJVR19QUklOVCgiZXJyb3IiLCgiR290IGVycm9y ICVkIG9uIGNsb3NlIixlcnIpKTsKQEAgLTE0MSw3ICsxMjMsNyBAQCBGaWxlIG15X3JlZ2lzdGVy X2ZpbGVuYW1lKEZpbGUgZmQsIGNvbnN0CiAJCQkgIHR5cGVfb2ZfZmlsZSwgdWludCBlcnJvcl9t ZXNzYWdlX251bWJlciwgbXlmIE15RmxhZ3MpCiB7CiAgIERCVUdfRU5URVIoIm15X3JlZ2lzdGVy X2ZpbGVuYW1lIik7Ci0gIGlmICgoaW50KSBmZCA+PSAwKQorICBpZiAoKGludCkgZmQgPj0gTVlf RklMRV9NSU4pCiAgIHsKICAgICBpZiAoKHVpbnQpIGZkID49IG15X2ZpbGVfbGltaXQpCiAgICAg ewpAQCAtMTg3LDE4OCArMTY5LDcgQEAgRmlsZSBteV9yZWdpc3Rlcl9maWxlbmFtZShGaWxlIGZk LCBjb25zdAogICBEQlVHX1JFVFVSTigtMSk7CiB9CiAKLSNpZmRlZiBfX1dJTl9fCi0KLWV4dGVy biB2b2lkIF9fY2RlY2wgX2Rvc21hcGVycih1bnNpZ25lZCBsb25nKTsKIAotLyoKLSAgT3BlbiBh IGZpbGUgd2l0aCBzaGFyaW5nLiBTaW1pbGFyIHRvIF9zb3BlbigpIGZyb20gbGliYywgYnV0IGFs bG93cyBtYW5hZ2luZwotICBzaGFyZSBkZWxldGUgb24gd2luMzIKLQotICBTWU5PUFNJUwotICAg IG15X3NvcGVuKCkKLSAgICAgIHBhdGggICAgZnVsbHkgcXVhbGlmaWVkIGZpbGUgbmFtZQotICAg ICAgb2ZsYWcgICBvcGVyYXRpb24gZmxhZ3MKLSAgICAgIHNoZmxhZwlzaGFyZSBmbGFnCi0gICAg ICBwbW9kZSAgIHBlcm1pc3Npb24gZmxhZ3MKLQotICBSRVRVUk4gVkFMVUUKLSAgICBGaWxlIGRl c2NyaXB0b3Igb2Ygb3BlbmVkIGZpbGUgaWYgc3VjY2VzcwotICAgIC0xIGFuZCBzZXRzIGVycm5v IGlmIGZhaWxzLgotKi8KLQotRmlsZSBteV9zb3Blbihjb25zdCBjaGFyICpwYXRoLCBpbnQgb2Zs YWcsIGludCBzaGZsYWcsIGludCBwbW9kZSkKLXsKLSAgaW50ICBmaDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGhhbmRsZSBvZiBvcGVuZWQgZmlsZSAqLwotICBpbnQgbWFzazsK LSAgSEFORExFIG9zZmg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TIGhhbmRsZSBv ZiBvcGVuZWQgZmlsZSAqLwotICBEV09SRCBmaWxlYWNjZXNzOyAgICAgICAgICAgICAgICAgICAg ICAgLyogT1MgZmlsZSBhY2Nlc3MgKHJlcXVlc3RlZCkgKi8KLSAgRFdPUkQgZmlsZXNoYXJlOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE9TIGZpbGUgc2hhcmluZyBtb2RlICovCi0gIERXT1JE IGZpbGVjcmVhdGU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBPUyBtZXRob2Qgb2Ygb3Blbmlu Zy9jcmVhdGluZyAqLwotICBEV09SRCBmaWxlYXR0cmliOyAgICAgICAgICAgICAgICAgICAgICAg LyogT1MgZmlsZSBhdHRyaWJ1dGUgZmxhZ3MgKi8KLSAgU0VDVVJJVFlfQVRUUklCVVRFUyBTZWN1 cml0eUF0dHJpYnV0ZXM7Ci0KLSAgU2VjdXJpdHlBdHRyaWJ1dGVzLm5MZW5ndGg9IHNpemVvZihT ZWN1cml0eUF0dHJpYnV0ZXMpOwotICBTZWN1cml0eUF0dHJpYnV0ZXMubHBTZWN1cml0eURlc2Ny aXB0b3I9IE5VTEw7Ci0gIFNlY3VyaXR5QXR0cmlidXRlcy5iSW5oZXJpdEhhbmRsZT0gIShvZmxh ZyAmIF9PX05PSU5IRVJJVCk7Ci0KLSAgLyoKLSAgICogZGVjb2RlIHRoZSBhY2Nlc3MgZmxhZ3MK LSAgICovCi0gIHN3aXRjaCAob2ZsYWcgJiAoX09fUkRPTkxZIHwgX09fV1JPTkxZIHwgX09fUkRX UikpIHsKLSAgICBjYXNlIF9PX1JET05MWTogICAgICAgICAvKiByZWFkIGFjY2VzcyAqLwotICAg ICAgZmlsZWFjY2Vzcz0gR0VORVJJQ19SRUFEOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBfT19X Uk9OTFk6ICAgICAgICAgLyogd3JpdGUgYWNjZXNzICovCi0gICAgICBmaWxlYWNjZXNzPSBHRU5F UklDX1dSSVRFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBfT19SRFdSOiAgICAgICAgICAgLyog cmVhZCBhbmQgd3JpdGUgYWNjZXNzICovCi0gICAgICBmaWxlYWNjZXNzPSBHRU5FUklDX1JFQUQg fCBHRU5FUklDX1dSSVRFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogICAgICAgICAgICAg ICAgLyogZXJyb3IsIGJhZCBvZmxhZyAqLwotICAgICAgZXJybm89IEVJTlZBTDsKLSAgICAgIF9k b3NlcnJubz0gMEw7ICAgICAgICAvKiBub3QgYW4gT1MgZXJyb3IgKi8KLSAgICAgIHJldHVybiAt MTsKLSAgfQotCi0gIC8qCi0gICAqIGRlY29kZSBzaGFyaW5nIGZsYWdzCi0gICAqLwotICBzd2l0 Y2ggKHNoZmxhZykgewotICAgIGNhc2UgX1NIX0RFTllSVzogICAgICAgIC8qIGV4Y2x1c2l2ZSBh Y2Nlc3MgZXhjZXB0IGRlbGV0ZSAqLwotICAgICAgZmlsZXNoYXJlPSBGSUxFX1NIQVJFX0RFTEVU RTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgX1NIX0RFTllXUjogICAgICAgIC8qIHNoYXJlIHJl YWQgYW5kIGRlbGV0ZSBhY2Nlc3MgKi8KLSAgICAgIGZpbGVzaGFyZT0gRklMRV9TSEFSRV9SRUFE IHwgRklMRV9TSEFSRV9ERUxFVEU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIF9TSF9ERU5ZUkQ6 ICAgICAgICAvKiBzaGFyZSB3cml0ZSBhbmQgZGVsZXRlIGFjY2VzcyAqLwotICAgICAgZmlsZXNo YXJlPSBGSUxFX1NIQVJFX1dSSVRFIHwgRklMRV9TSEFSRV9ERUxFVEU7Ci0gICAgICBicmVhazsK LSAgICBjYXNlIF9TSF9ERU5ZTk86ICAgICAgICAvKiBzaGFyZSByZWFkLCB3cml0ZSBhbmQgZGVs ZXRlIGFjY2VzcyAqLwotICAgICAgZmlsZXNoYXJlPSBGSUxFX1NIQVJFX1JFQUQgfCBGSUxFX1NI QVJFX1dSSVRFIHwgRklMRV9TSEFSRV9ERUxFVEU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIF9T SF9ERU5ZUldEOiAgICAgICAvKiBleGNsdXNpdmUgYWNjZXNzICovCi0gICAgICBmaWxlc2hhcmU9 IDBMOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBfU0hfREVOWVdSRDogICAgICAgLyogc2hhcmUg cmVhZCBhY2Nlc3MgKi8KLSAgICAgIGZpbGVzaGFyZT0gRklMRV9TSEFSRV9SRUFEOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSBfU0hfREVOWVJERDogICAgICAgLyogc2hhcmUgd3JpdGUgYWNjZXNz ICovCi0gICAgICBmaWxlc2hhcmU9IEZJTEVfU0hBUkVfV1JJVEU7Ci0gICAgICBicmVhazsKLSAg ICBjYXNlIF9TSF9ERU5ZREVMOiAgICAgICAvKiBzaGFyZSByZWFkIGFuZCB3cml0ZSBhY2Nlc3Mg Ki8KLSAgICAgIGZpbGVzaGFyZT0gRklMRV9TSEFSRV9SRUFEIHwgRklMRV9TSEFSRV9XUklURTsK LSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIC8qIGVycm9yLCBiYWQg c2hmbGFnICovCi0gICAgICBlcnJubz0gRUlOVkFMOwotICAgICAgX2Rvc2Vycm5vPSAwTDsgICAg ICAgIC8qIG5vdCBhbiBPUyBlcnJvciAqLwotICAgICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyoK LSAgICogZGVjb2RlIG9wZW4vY3JlYXRlIG1ldGhvZCBmbGFncwotICAgKi8KLSAgc3dpdGNoIChv ZmxhZyAmIChfT19DUkVBVCB8IF9PX0VYQ0wgfCBfT19UUlVOQykpIHsKLSAgICBjYXNlIDA6Ci0g ICAgY2FzZSBfT19FWENMOiAgICAgICAgICAgICAgICAgICAvKiBpZ25vcmUgRVhDTCB3L28gQ1JF QVQgKi8KLSAgICAgIGZpbGVjcmVhdGU9IE9QRU5fRVhJU1RJTkc7Ci0gICAgICBicmVhazsKLQot ICAgIGNhc2UgX09fQ1JFQVQ6Ci0gICAgICBmaWxlY3JlYXRlPSBPUEVOX0FMV0FZUzsKLSAgICAg IGJyZWFrOwotCi0gICAgY2FzZSBfT19DUkVBVCB8IF9PX0VYQ0w6Ci0gICAgY2FzZSBfT19DUkVB VCB8IF9PX1RSVU5DIHwgX09fRVhDTDoKLSAgICAgIGZpbGVjcmVhdGU9IENSRUFURV9ORVc7Ci0g ICAgICBicmVhazsKLQotICAgIGNhc2UgX09fVFJVTkM6Ci0gICAgY2FzZSBfT19UUlVOQyB8IF9P X0VYQ0w6ICAgICAgICAvKiBpZ25vcmUgRVhDTCB3L28gQ1JFQVQgKi8KLSAgICAgIGZpbGVjcmVh dGU9IFRSVU5DQVRFX0VYSVNUSU5HOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIF9PX0NSRUFU IHwgX09fVFJVTkM6Ci0gICAgICBmaWxlY3JlYXRlPSBDUkVBVEVfQUxXQVlTOwotICAgICAgYnJl YWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgLyogdGhpcyBjYW4ndCBoYXBwZW4gLi4uIGFsbCBj YXNlcyBhcmUgY292ZXJlZCAqLwotICAgICAgZXJybm89IEVJTlZBTDsKLSAgICAgIF9kb3NlcnJu bz0gMEw7Ci0gICAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKgotICAgKiBkZWNvZGUgZmlsZSBh dHRyaWJ1dGUgZmxhZ3MgaWYgX09fQ1JFQVQgd2FzIHNwZWNpZmllZAotICAgKi8KLSAgZmlsZWF0 dHJpYj0gRklMRV9BVFRSSUJVVEVfTk9STUFMOyAgICAgLyogZGVmYXVsdCAqLwotICBpZiAob2Zs YWcgJiBfT19DUkVBVCkgCi0gIHsKLSAgICBfdW1hc2soKG1hc2s9IF91bWFzaygwKSkpOwotICAg IAotICAgIGlmICghKChwbW9kZSAmIH5tYXNrKSAmIF9TX0lXUklURSkpCi0gICAgICBmaWxlYXR0 cmliPSBGSUxFX0FUVFJJQlVURV9SRUFET05MWTsKLSAgfQotCi0gIC8qCi0gICAqIFNldCB0ZW1w b3JhcnkgZmlsZSAoZGVsZXRlLW9uLWNsb3NlKSBhdHRyaWJ1dGUgaWYgcmVxdWVzdGVkLgotICAg Ki8KLSAgaWYgKG9mbGFnICYgX09fVEVNUE9SQVJZKSAKLSAgewotICAgIGZpbGVhdHRyaWJ8PSBG SUxFX0ZMQUdfREVMRVRFX09OX0NMT1NFOwotICAgIGZpbGVhY2Nlc3N8PSBERUxFVEU7Ci0gIH0K LQotICAvKgotICAgKiBTZXQgdGVtcG9yYXJ5IGZpbGUgKGRlbGF5LWZsdXNoLXRvLWRpc2spIGF0 dHJpYnV0ZSBpZiByZXF1ZXN0ZWQuCi0gICAqLwotICBpZiAob2ZsYWcgJiBfT19TSE9SVF9MSVZF RCkKLSAgICBmaWxlYXR0cmlifD0gRklMRV9BVFRSSUJVVEVfVEVNUE9SQVJZOwotCi0gIC8qCi0g ICAqIFNldCBzZXF1ZW50aWFsIG9yIHJhbmRvbSBhY2Nlc3MgYXR0cmlidXRlIGlmIHJlcXVlc3Rl ZC4KLSAgICovCi0gIGlmIChvZmxhZyAmIF9PX1NFUVVFTlRJQUwpCi0gICAgZmlsZWF0dHJpYnw9 IEZJTEVfRkxBR19TRVFVRU5USUFMX1NDQU47Ci0gIGVsc2UgaWYgKG9mbGFnICYgX09fUkFORE9N KQotICAgIGZpbGVhdHRyaWJ8PSBGSUxFX0ZMQUdfUkFORE9NX0FDQ0VTUzsKLQotICAvKgotICAg KiB0cnkgdG8gb3Blbi9jcmVhdGUgdGhlIGZpbGUKLSAgICovCi0gIGlmICgob3NmaD0gQ3JlYXRl RmlsZShwYXRoLCBmaWxlYWNjZXNzLCBmaWxlc2hhcmUsICZTZWN1cml0eUF0dHJpYnV0ZXMsIAot ICAgICAgICAgICAgICAgICAgICAgICAgZmlsZWNyZWF0ZSwgZmlsZWF0dHJpYiwgTlVMTCkpID09 IElOVkFMSURfSEFORExFX1ZBTFVFKQotICB7Ci0gICAgLyoKLSAgICAgKiBPUyBjYWxsIHRvIG9w ZW4vY3JlYXRlIGZpbGUgZmFpbGVkISBtYXAgdGhlIGVycm9yLCByZWxlYXNlCi0gICAgICogdGhl IGxvY2ssIGFuZCByZXR1cm4gLTEuIG5vdGUgdGhhdCBpdCdzIG5vdCBuZWNlc3NhcnkgdG8KLSAg ICAgKiBjYWxsIF9mcmVlX29zZmhuZCAoaXQgaGFzbid0IGJlZW4gdXNlZCB5ZXQpLgotICAgICAq LwotICAgIF9kb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOyAgICAgLyogbWFwIGVycm9yICovCi0g ICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gZXJyb3IgdG8gY2Fs bGVyICovCi0gIH0KLQotICBpZiAoKGZoPSBfb3Blbl9vc2ZoYW5kbGUoKGludHB0cl90KW9zZmgs IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZsYWcgJiAoX09fQVBQRU5EIHwgX09fUkRP TkxZIHwgX09fVEVYVCkpKSA9PSAtMSkKLSAgewotICAgIF9kb3NtYXBlcnIoR2V0TGFzdEVycm9y KCkpOyAgICAgLyogbWFwIGVycm9yICovCi0gICAgQ2xvc2VIYW5kbGUob3NmaCk7Ci0gIH0KLQot ICByZXR1cm4gZmg7ICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGhhbmRsZSAqLwot fQotI2VuZGlmIC8qIF9fV0lOX18gKi8KIAogCiAjaWZkZWYgRVhUUkFfREVCVUcKCj09PSBtb2Rp ZmllZCBmaWxlICdteXN5cy9teV9wcmVhZC5jJwotLS0gYS9teXN5cy9teV9wcmVhZC5jCTIwMDgt MDQtMjUgMTY6NDM6MjUgKzAwMDAKKysrIGIvbXlzeXMvbXlfcHJlYWQuYwkyMDA4LTA2LTEyIDEx OjIwOjI4ICswMDAwCkBAIC0yMCw3NyArMjAsNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2Vu ZGlmCiAKLSNpZmRlZiBfX1dJTl9fCi1leHRlcm4gdm9pZCAgX2Rvc21hcGVycihEV09SRCk7CiAK LS8qCi0gIFBvc2l0aW9uYWwgcmVhZCBhbmQgd3JpdGUgb24gV2luZG93cy4KLQotICBOT1RFOiAK LSAgLSB0aGlzIGZ1bmN0aW9ucyByZXF1aXJlIE5ULWJhc2VkIGtlcm5lbC4KLSAgLSB0aGV5IGNh biByZWFkL3dyaXRlIGF0IG1vc3QgNEdCIGF0IG9uY2UuCi0gIC0gdW5saWtlIFBvc2l4IHByZWFk L3B3cml0ZSwgdGhleSBjaGFuZ2UgZmlsZSBwb2ludGVyIHBvc2l0aW9uLgotKi8KLXN0YXRpYyBz aXplX3QgcHJlYWQoRmlsZSBGaWxlZGVzLCB1Y2hhciAqQnVmZmVyLCBzaXplX3QgQ291bnQsIG15 X29mZl90IG9mZnNldCkKLXsKLSAgRFdPUkQgICAgICAgICBuQnl0ZXNSZWFkOwotICBIQU5ETEUg ICAgICAgIGhGaWxlOwotICBPVkVSTEFQUEVEICAgIG92PXswfTsKLSAgTEFSR0VfSU5URUdFUiBs aTsKLQotICBpZighQ291bnQpCi0gICAgcmV0dXJuIDA7Ci0jaWZkZWYgX1dJTjY0Ci0gIGlmKENv dW50ID4gVUlOVF9NQVgpCi0gICAgQ291bnQgPSBVSU5UX01BWDsKLSNlbmRpZgotCi0gIGhGaWxl PSAgICAgICAgIChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoRmlsZWRlcyk7Ci0gIGxpLlF1YWRQYXJ0 PSAgIG9mZnNldDsKLSAgb3YuT2Zmc2V0PSAgICAgbGkuTG93UGFydDsKLSAgb3YuT2Zmc2V0SGln aD0gbGkuSGlnaFBhcnQ7Ci0KLSAgaWYoIVJlYWRGaWxlKGhGaWxlLCBCdWZmZXIsIChEV09SRClD b3VudCwgJm5CeXRlc1JlYWQsICZvdikpCi0gIHsKLSAgICBEV09SRCBsYXN0RXJyb3IgPSBHZXRM YXN0RXJyb3IoKTsKLSAgICBpZihsYXN0RXJyb3IgPT0gRVJST1JfSEFORExFX0VPRikKLSAgICAg ICByZXR1cm4gMDsgLypyZXR1cm4gMCBhdCBFT0YqLwotICAgIF9kb3NtYXBlcnIobGFzdEVycm9y KTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgZWxzZQotICAgIHJldHVybiBuQnl0ZXNSZWFkOwot fQotCi1zdGF0aWMgc2l6ZV90IHB3cml0ZShGaWxlIEZpbGVkZXMsIGNvbnN0IHVjaGFyICpCdWZm ZXIsIHNpemVfdCBDb3VudCwgbXlfb2ZmX3Qgb2Zmc2V0KQotewotICBEV09SRCAgICAgICAgIG5C eXRlc1dyaXR0ZW47Ci0gIEhBTkRMRSAgICAgICAgaEZpbGU7Ci0gIE9WRVJMQVBQRUQgICAgb3Y9 ezB9OwotICBMQVJHRV9JTlRFR0VSIGxpOwotCi0gIGlmKCFDb3VudCkKLSAgICByZXR1cm4gMDsK LQotI2lmZGVmIF9XSU42NAotICBpZihDb3VudCA+IFVJTlRfTUFYKQotICAgIENvdW50ID0gVUlO VF9NQVg7Ci0jZW5kaWYKLQotICBoRmlsZT0gICAgICAgICAoSEFORExFKV9nZXRfb3NmaGFuZGxl KEZpbGVkZXMpOwotICBsaS5RdWFkUGFydD0gICBvZmZzZXQ7Ci0gIG92Lk9mZnNldD0gICAgIGxp Lkxvd1BhcnQ7Ci0gIG92Lk9mZnNldEhpZ2g9IGxpLkhpZ2hQYXJ0OwotCi0gIGlmKCFXcml0ZUZp bGUoaEZpbGUsIEJ1ZmZlciwgKERXT1JEKUNvdW50LCAmbkJ5dGVzV3JpdHRlbiwgJm92KSkKLSAg ewotICAgIF9kb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOwotICAgIHJldHVybiAtMTsKLSAgfQot ICBlbHNlCi0gICAgcmV0dXJuIG5CeXRlc1dyaXR0ZW47Ci19Ci0jZW5kaWYKIAogLyoKICAgUmVh ZCBhIGNodW5rIG9mIGJ5dGVzIGZyb20gYSBmaWxlIGZyb20gYSBnaXZlbiBwb3NpdGlvbgpAQCAt MTI0LDkgKzU0LDcgQEAgc2l6ZV90IG15X3ByZWFkKEZpbGUgRmlsZWRlcywgdWNoYXIgKkJ1Zgog ICAgICAgICAgICAgICAgICAgIE15RmxhZ3MpKTsKICAgZm9yICg7OykKICAgewotI2lmbmRlZiBf X1dJTl9fCiAgICAgZXJybm89MDsJCQkJCS8qIExpbnV4IGRvZXNuJ3QgcmVzZXQgdGhpcyAqLwot I2VuZGlmCiAjaWYgIWRlZmluZWQgKEhBVkVfUFJFQUQpICYmICFkZWZpbmVkIChfX1dJTl9fKQog ICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbXlfZmlsZV9pbmZvW0ZpbGVkZXNdLm11dGV4KTsKICAg ICByZWFkYnl0ZXM9ICh1aW50KSAtMTsKQEAgLTEzNCw5ICs2MiwxNiBAQCBzaXplX3QgbXlfcHJl YWQoRmlsZSBGaWxlZGVzLCB1Y2hhciAqQnVmCiAJICAgIChyZWFkYnl0ZXM9IHJlYWQoRmlsZWRl cywgQnVmZmVyLCBDb3VudCkpICE9IENvdW50KTsKICAgICBwdGhyZWFkX211dGV4X3VubG9jaygm bXlfZmlsZV9pbmZvW0ZpbGVkZXNdLm11dGV4KTsKICNlbHNlCi0gICAgaWYgKChlcnJvcj0gKChy ZWFkYnl0ZXM9IHByZWFkKEZpbGVkZXMsIEJ1ZmZlciwgQ291bnQsIG9mZnNldCkpICE9IENvdW50 KSkpCisjaWYgZGVmaW5lZChfX1dJTl9fKQorICAgIHJlYWRieXRlcz0gbXlfd2luX3ByZWFkKEZp bGVkZXMsIEJ1ZmZlciwgQ291bnQsIG9mZnNldCk7CisjZWxzZSAKKyAgICByZWFkYnl0ZXM9IHBy ZWFkKEZpbGVkZXMsIEJ1ZmZlciwgQ291bnQsIG9mZnNldCk7CisjZW5kaWYKKyAgICBlcnJvcj0g IChyZWFkYnl0ZXMgIT0gQ291bnQpOworICAgIGlmKGVycm9yKQogICAgICAgbXlfZXJybm89IGVy cm5vID8gZXJybm8gOiAtMTsKICNlbmRpZgorCiAgICAgaWYgKGVycm9yIHx8IHJlYWRieXRlcyAh PSBDb3VudCkKICAgICB7CiAgICAgICBEQlVHX1BSSU5UKCJ3YXJuaW5nIiwoIlJlYWQgb25seSAl ZCBieXRlcyBvZmYgJXUgZnJvbSAlZCwgZXJybm86ICVkIiwKQEAgLTE4OSw3ICsxMjQsNyBAQCBz aXplX3QgbXlfcHJlYWQoRmlsZSBGaWxlZGVzLCB1Y2hhciAqQnVmCiAgICAgIyAgICAgICAgICAg ICBOdW1iZXIgb2YgYnl0ZXMgcmVhZAogKi8KIAotc2l6ZV90IG15X3B3cml0ZShpbnQgRmlsZWRl cywgY29uc3QgdWNoYXIgKkJ1ZmZlciwgc2l6ZV90IENvdW50LAorc2l6ZV90IG15X3B3cml0ZShG aWxlIEZpbGVkZXMsIGNvbnN0IHVjaGFyICpCdWZmZXIsIHNpemVfdCBDb3VudCwKICAgICAgICAg ICAgICAgICAgbXlfb2ZmX3Qgb2Zmc2V0LCBteWYgTXlGbGFncykKIHsKICAgc2l6ZV90IHdyaXRl bmJ5dGVzLCB3cml0dGVuOwpAQCAtMjEyLDExICsxNDcsMTQgQEAgc2l6ZV90IG15X3B3cml0ZShp bnQgRmlsZWRlcywgY29uc3QgdWNoYQogICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZteV9maWxl X2luZm9bRmlsZWRlc10ubXV0ZXgpOwogICAgIGlmIChlcnJvcikKICAgICAgIGJyZWFrOworI2Vs aWYgZGVmaW5lZCAoX19XSU5fXykKKyAgICB3cml0ZW5ieXRlcz0gbXlfd2luX3B3cml0ZShGaWxl ZGVzLCBCdWZmZXIsIENvdW50LCBvZmZzZXQpOwogI2Vsc2UKLSAgICBpZiAoKHdyaXRlbmJ5dGVz PSBwd3JpdGUoRmlsZWRlcywgQnVmZmVyLCBDb3VudCxvZmZzZXQpKSA9PSBDb3VudCkKKyAgICB3 cml0ZW5ieXRlcz0gcHdyaXRlKEZpbGVkZXMsIEJ1ZmZlciwgQ291bnQsIG9mZnNldCk7CisjZW5k aWYKKyAgICBpZih3cml0ZW5ieXRlcyA9PSBDb3VudCkKICAgICAgIGJyZWFrOwogICAgIG15X2Vy cm5vPSBlcnJubzsKLSNlbmRpZgogICAgIGlmICh3cml0ZW5ieXRlcyAhPSAoc2l6ZV90KSAtMSkK ICAgICB7CQkJCQkvKiBTYWZlZ3VlYXJkICovCiAgICAgICB3cml0dGVuKz13cml0ZW5ieXRlczsK Cj09PSBtb2RpZmllZCBmaWxlICdteXN5cy9teV9xdWljay5jJwotLS0gYS9teXN5cy9teV9xdWlj ay5jCTIwMDctMDYtMjEgMDg6MTM6MTAgKzAwMDAKKysrIGIvbXlzeXMvbXlfcXVpY2suYwkyMDA4 LTA2LTEyIDExOjIwOjI4ICswMDAwCkBAIC0xOSwxMSArMTksMTkgQEAKICNpbmNsdWRlICJteV9u b3N5cy5oIgogCiAKKyNpZmRlZiBfX1dJTl9fCitleHRlcm4gc2l6ZV90IG15X3dpbl9yZWFkKEZp bGUgRmlsZWRlcyx1Y2hhciAqQnVmZmVyLHNpemVfdCBDb3VudCk7CisjZW5kaWYKKwogc2l6ZV90 IG15X3F1aWNrX3JlYWQoRmlsZSBGaWxlZGVzLHVjaGFyICpCdWZmZXIsc2l6ZV90IENvdW50LG15 ZiBNeUZsYWdzKQogewogICBzaXplX3QgcmVhZGJ5dGVzOwotCi0gIGlmICgocmVhZGJ5dGVzID0g cmVhZChGaWxlZGVzLCBCdWZmZXIsIENvdW50KSkgIT0gQ291bnQpCisjaWZkZWYgX19XSU5fXwor ICByZWFkYnl0ZXM9IG15X3dpbl9yZWFkKEZpbGVkZXMsIEJ1ZmZlciwgQ291bnQpOworI2Vsc2UK KyAgcmVhZGJ5dGVzPSByZWFkKEZpbGVkZXMsIEJ1ZmZlciwgQ291bnQpOworI2VuZGlmCisgIGlm KHJlYWRieXRlcyAhPSBDb3VudCkKICAgewogI2lmbmRlZiBEQlVHX09GRgogICAgIGlmICgocmVh ZGJ5dGVzID09IDAgfHwgcmVhZGJ5dGVzID09IChzaXplX3QpIC0xKSAmJiBlcnJubyA9PSBFSU5U UikKQEAgLTQwLDkgKzQ4LDE0IEBAIHNpemVfdCBteV9xdWlja19yZWFkKEZpbGUgRmlsZWRlcyx1 Y2hhciAKIH0KIAogCi1zaXplX3QgbXlfcXVpY2tfd3JpdGUoRmlsZSBGaWxlZGVzLGNvbnN0IHVj aGFyICpCdWZmZXIsc2l6ZV90IENvdW50KQorCitzaXplX3QgbXlfcXVpY2tfd3JpdGUoRmlsZSBG aWxlZGVzLCBjb25zdCB1Y2hhciAqQnVmZmVyLCBzaXplX3QgQ291bnQpCiB7Ci0jaWZuZGVmIERC VUdfT0ZGCisjaWZkZWYgX19XSU5fXworICByZXR1cm4gbXlfd2luX3dyaXRlKEZpbGVkZXMsIEJ1 ZmZlciwgQ291bnQpOworI2Vsc2UKKworI2lmICFkZWZpbmVkIChEQlVHX09GRikKICAgc2l6ZV90 IHdyaXR0ZW5ieXRlczsKICNlbmRpZgogCkBAIC02NCw0ICs3Nyw1IEBAIHNpemVfdCBteV9xdWlj a193cml0ZShGaWxlIEZpbGVkZXMsY29uc3QKICAgICByZXR1cm4gKHNpemVfdCkgLTE7CiAgIH0K ICAgcmV0dXJuIDA7CisjZW5kaWYKIH0KCj09PSBtb2RpZmllZCBmaWxlICdteXN5cy9teV9yZWFk LmMnCi0tLSBhL215c3lzL215X3JlYWQuYwkyMDA4LTAzLTI3IDE4OjQwOjAwICswMDAwCisrKyBi L215c3lzL215X3JlYWQuYwkyMDA4LTA2LTEyIDExOjIwOjI4ICswMDAwCkBAIC00NCw3ICs0NCwx MyBAQCBzaXplX3QgbXlfcmVhZChGaWxlIEZpbGVkZXMsIHVjaGFyICpCdWZmCiAgIGZvciAoOzsp CiAgIHsKICAgICBlcnJubz0gMDsJCQkJCS8qIExpbnV4IGRvZXNuJ3QgcmVzZXQgdGhpcyAqLwot ICAgIGlmICgocmVhZGJ5dGVzPSByZWFkKEZpbGVkZXMsIEJ1ZmZlciwgQ291bnQpKSAhPSBDb3Vu dCkKKyNpZmRlZiBfX1dJTl9fCisgICAgcmVhZGJ5dGVzPSAgbXlfd2luX3JlYWQoRmlsZWRlcywg QnVmZmVyLCBDb3VudCk7CisjZWxzZQorICAgIHJlYWRieXRlcz0gIHJlYWQoRmlsZWRlcywgQnVm ZmVyLCBDb3VudCk7CisjZW5kaWYKKworICAgIGlmIChyZWFkYnl0ZXMgIT0gQ291bnQpCiAgICAg ewogICAgICAgbXlfZXJybm89IGVycm5vID8gZXJybm8gOiAtMTsKICAgICAgIERCVUdfUFJJTlQo Indhcm5pbmciLCgiUmVhZCBvbmx5ICVkIGJ5dGVzIG9mZiAlbHUgZnJvbSAlZCwgZXJybm86ICVk IiwKCj09PSBtb2RpZmllZCBmaWxlICdteXN5cy9teV9zZWVrLmMnCi0tLSBhL215c3lzL215X3Nl ZWsuYwkyMDA4LTAyLTAxIDEyOjA0OjMyICswMDAwCisrKyBiL215c3lzL215X3NlZWsuYwkyMDA4 LTA2LTEyIDExOjIwOjI4ICswMDAwCkBAIC00NSwzNiArNDUsMzAgQEAKIG15X29mZl90IG15X3Nl ZWsoRmlsZSBmZCwgbXlfb2ZmX3QgcG9zLCBpbnQgd2hlbmNlLAogCQkgbXlmIE15RmxhZ3MgX19h dHRyaWJ1dGVfXygodW51c2VkKSkpCiB7Ci0gIHJlZzEgb3Nfb2ZmX3QgbmV3cG9zPSAtMTsKKyAg b3Nfb2ZmX3QgbmV3cG9zPSAtMTsKICAgREJVR19FTlRFUigibXlfc2VlayIpOwotICBEQlVHX1BS SU5UKCJteSIsKCJGZDogJWQgIEhwb3M6ICVsdSAgUG9zOiAlbHUgIFdoZW5jZTogJWQgIE15Rmxh Z3M6ICVkIiwKLQkJICAgZmQsICh1bG9uZykgKCgodWxvbmdsb25nKSBwb3MpID4+IDMyKSwgKHVs b25nKSBwb3MsIAotCQkgICB3aGVuY2UsIE15RmxhZ3MpKTsKKyAgREJVR19QUklOVCgibXkiLCgi RmQ6ICVkIFBvczogJWxsdSAgV2hlbmNlOiAlZCAgTXlGbGFnczogJWQiLAorCQkgICBmZCwgKHVs b25nbG9uZykgcG9zLCB3aGVuY2UsIE15RmxhZ3MpKTsKICAgREJVR19BU1NFUlQocG9zICE9IE1Z X0ZJTEVQT1NfRVJST1IpOwkJLyogc2FmZXR5IGNoZWNrICovCiAKICAgLyoKICAgICAgIE1ha2Ug c3VyZSB3ZSBhcmUgdXNpbmcgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IhCiAgICovCiAgIERCVUdf QVNTRVJUKGZkICE9IC0xKTsKLSNpZiBkZWZpbmVkKFRIUkVBRCkgJiYgIWRlZmluZWQoSEFWRV9Q UkVBRCkgJiYgIWRlZmluZWQoX19XSU5fXykKLSAgaWYgKE15RmxhZ3MgJiBNWV9USFJFQURTQUZF KQotICB7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZteV9maWxlX2luZm9bZmRdLm11dGV4KTsK LSAgICBuZXdwb3M9IGxzZWVrKGZkLCBwb3MsIHdoZW5jZSk7Ci0gICAgcHRocmVhZF9tdXRleF91 bmxvY2soJm15X2ZpbGVfaW5mb1tmZF0ubXV0ZXgpOwotICB9Ci0gIGVsc2UKKyNpZiBkZWZpbmVk IChfX1dJTl9fKQorICBuZXdwb3M9IG15X3dpbl9sc2VlayhmZCwgcG9zLCB3aGVuY2UpOworI2Vs c2UKKyAgbmV3cG9zPSBsc2VlayhmZCwgcG9zLCB3aGVuY2UpOwogI2VuZGlmCi0gICAgbmV3cG9z PSBsc2VlayhmZCwgcG9zLCB3aGVuY2UpOwogICBpZiAobmV3cG9zID09IChvc19vZmZfdCkgLTEp CiAgIHsKICAgICBteV9lcnJubz1lcnJubzsKLSAgICBEQlVHX1BSSU5UKCJlcnJvciIsKCJsc2Vl azogJWx1ICBlcnJubzogJWQiLCAodWxvbmcpIG5ld3BvcyxlcnJubykpOworICAgIERCVUdfUFJJ TlQoImVycm9yIiwoImxzZWVrOiAlbGx1ICBlcnJubzogJWQiLCAodWxvbmdsb25nKSBuZXdwb3Ms ZXJybm8pKTsKICAgICBEQlVHX1JFVFVSTihNWV9GSUxFUE9TX0VSUk9SKTsKICAgfQogICBpZiAo KG15X29mZl90KSBuZXdwb3MgIT0gcG9zKQogICB7Ci0gICAgREJVR19QUklOVCgiZXhpdCIsKCJw b3M6ICVsdSIsICh1bG9uZykgbmV3cG9zKSk7CisgICAgREJVR19QUklOVCgiZXhpdCIsKCJwb3M6 ICVsbHUiLCAodWxvbmdsb25nKSBuZXdwb3MpKTsKICAgfQogICBEQlVHX1JFVFVSTigobXlfb2Zm X3QpIG5ld3Bvcyk7CiB9IC8qIG15X3NlZWsgKi8KQEAgLTg5LDEzICs4MywxMyBAQCBteV9vZmZf dCBteV90ZWxsKEZpbGUgZmQsIG15ZiBNeUZsYWdzIF9fCiAgIERCVUdfRU5URVIoIm15X3RlbGwi KTsKICAgREJVR19QUklOVCgibXkiLCgiRmQ6ICVkICBNeUZsYWdzOiAlZCIsZmQsIE15RmxhZ3Mp KTsKICAgREJVR19BU1NFUlQoZmQgPj0gMCk7Ci0jaWZkZWYgSEFWRV9URUxMCisjaWYgZGVmaW5l ZCAoSEFWRV9URUxMKSAmJiAhZGVmaW5lZCAoX19XSU5fXykKICAgcG9zPXRlbGwoZmQpOwogI2Vs c2UKLSAgcG9zPWxzZWVrKGZkLCAwTCwgTVlfU0VFS19DVVIpOworICBwb3M9bXlfc2VlayhmZCwg MEwsIE1ZX1NFRUtfQ1VSLDApOwogI2VuZGlmCiAgIGlmIChwb3MgPT0gKG9zX29mZl90KSAtMSkK ICAgICBteV9lcnJubz1lcnJubzsKLSAgREJVR19QUklOVCgiZXhpdCIsKCJwb3M6ICVsdSIsICh1 bG9uZykgcG9zKSk7CisgIERCVUdfUFJJTlQoImV4aXQiLCgicG9zOiAlbGx1IiwgKHVsb25nbG9u ZykgcG9zKSk7CiAgIERCVUdfUkVUVVJOKChteV9vZmZfdCkgcG9zKTsKIH0gLyogbXlfdGVsbCAq LwoKPT09IG1vZGlmaWVkIGZpbGUgJ215c3lzL215X3N0YXRpYy5jJwotLS0gYS9teXN5cy9teV9z dGF0aWMuYwkyMDA4LTA1LTA2IDA5OjU0OjE3ICswMDAwCisrKyBiL215c3lzL215X3N0YXRpYy5j CTIwMDgtMDYtMTIgMTE6MjA6MjggKzAwMDAKQEAgLTM1LDcgKzM1LDcgQEAgaW50CQlORUFSIG15 X3VtYXNrPTA2NjQsIE5FQVIgbXlfdW1hc2tfZAogI2lmbmRlZiBUSFJFQUQKIGludAkJTkVBUiBt eV9lcnJubz0wOwogI2VuZGlmCi1zdHJ1Y3Qgc3RfbXlfZmlsZV9pbmZvIG15X2ZpbGVfaW5mb19k ZWZhdWx0W01ZX05GSUxFXT0ge3swLFVOT1BFTn19Oworc3RydWN0IHN0X215X2ZpbGVfaW5mbyBt eV9maWxlX2luZm9fZGVmYXVsdFtNWV9ORklMRV07CiB1aW50ICAgbXlfZmlsZV9saW1pdD0gTVlf TkZJTEU7CiBzdHJ1Y3Qgc3RfbXlfZmlsZV9pbmZvICpteV9maWxlX2luZm89IG15X2ZpbGVfaW5m b19kZWZhdWx0OwogCgo9PT0gbW9kaWZpZWQgZmlsZSAnbXlzeXMvbXlfc3luYy5jJwotLS0gYS9t eXN5cy9teV9zeW5jLmMJMjAwNy0xMC0xMSAxNTowNzo0MCArMDAwMAorKysgYi9teXN5cy9teV9z eW5jLmMJMjAwOC0wNi0xMiAxMToyMDoyOCArMDAwMApAQCAtNjMsNyArNjMsNyBAQCBpbnQgbXlf c3luYyhGaWxlIGZkLCBteWYgbXlfZmxhZ3MpCiAjZWxpZiBkZWZpbmVkKEhBVkVfRlNZTkMpCiAg ICAgcmVzPSBmc3luYyhmZCk7CiAjZWxpZiBkZWZpbmVkKF9fV0lOX18pCi0gICAgcmVzPSBfY29t bWl0KGZkKTsKKyAgICByZXMgPSBteV93aW5fZnN5bmMoZmQpOwogI2Vsc2UKICNlcnJvciBDYW5u b3QgZmluZCBhIHdheSB0byBzeW5jIGEgZmlsZSwgZHVyYWJpbGl0eSBpbiBkYW5nZXIKICAgICBy ZXM9IDA7CQkJCQkvKiBObyBzeW5jIChzdHJhbmdlIE9TKSAqLwoKPT09IGFkZGVkIGZpbGUgJ215 c3lzL215X3dpbmVyci5jJwotLS0gYS9teXN5cy9teV93aW5lcnIuYwkxOTcwLTAxLTAxIDAwOjAw OjAwICswMDAwCisrKyBiL215c3lzL215X3dpbmVyci5jCTIwMDgtMDYtMTIgMTE6MjA6MjggKzAw MDAKQEAgLTAsMCArMSwxMjMgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwOCBNeVNRTCBBQgorCitU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3Vu ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIx MTEtMTMwNyAgVVNBICovCisKKy8qCisgIENvbnZlcnQgV2luZG93cyBBUEkgZXJyb3IgKEdldExh c3RFcnJvcigpIHRvIFBvc2l4IGVxdWl2YWxlbnQgKGVycm5vKQorICBUaGUgZXhwb3J0ZWQgZnVu Y3Rpb24gIG15X29zbWFwZXJyKCkgaXMgbW9kZWxsZWQgYWZ0ZXIgYW5kIGJvcnJvd3MKKyAgaGVh dmlseSBmcm9tIHVuZG9jdW1lbnRlZCBfZG9zbWFwZXJyKCkoZm91bmQgb2YgdGhlIHN0YXRpYyBN aWNyb3NvZnQgQyBydW50aW1lKS4KKyovCisKKyNpbmNsdWRlIDxteV9nbG9iYWwuaD4KKyNpbmNs dWRlIDxteV9zeXMuaD4KKworCitzdHJ1Y3QgZXJyZW50cnkgCit7CisgIHVuc2lnbmVkIGxvbmcg b3Njb2RlOyAgIC8qIE9TIHJldHVybiB2YWx1ZSAqLworICBpbnQgZXJybm9jb2RlOyAgLyogU3lz dGVtIFYgZXJyb3IgY29kZSAqLworfTsKKworc3RhdGljIHN0cnVjdCBlcnJlbnRyeSBlcnJ0YWJs ZVtdID0geworICB7ICBFUlJPUl9JTlZBTElEX0ZVTkNUSU9OLCAgICAgICBFSU5WQUwgICAgfSwg IC8qIDEgKi8KKyAgeyAgRVJST1JfRklMRV9OT1RfRk9VTkQsICAgICAgICAgRU5PRU5UICAgIH0s ICAvKiAyICovCisgIHsgIEVSUk9SX1BBVEhfTk9UX0ZPVU5ELCAgICAgICAgIEVOT0VOVCAgICB9 LCAgLyogMyAqLworICB7ICBFUlJPUl9UT09fTUFOWV9PUEVOX0ZJTEVTLCAgICBFTUZJTEUgICAg fSwgIC8qIDQgKi8KKyAgeyAgRVJST1JfQUNDRVNTX0RFTklFRCwgICAgICAgICAgRUFDQ0VTICAg IH0sICAvKiA1ICovCisgIHsgIEVSUk9SX0lOVkFMSURfSEFORExFLCAgICAgICAgIEVCQURGICAg ICB9LCAgLyogNiAqLworICB7ICBFUlJPUl9BUkVOQV9UUkFTSEVELCAgICAgICAgICBFTk9NRU0g ICAgfSwgIC8qIDcgKi8KKyAgeyAgRVJST1JfTk9UX0VOT1VHSF9NRU1PUlksICAgICAgRU5PTUVN ICAgIH0sICAvKiA4ICovCisgIHsgIEVSUk9SX0lOVkFMSURfQkxPQ0ssICAgICAgICAgIEVOT01F TSAgICB9LCAgLyogOSAqLworICB7ICBFUlJPUl9CQURfRU5WSVJPTk1FTlQsICAgICAgICBFMkJJ RyAgICAgfSwgIC8qIDEwICovCisgIHsgIEVSUk9SX0JBRF9GT1JNQVQsICAgICAgICAgICAgIEVO T0VYRUMgICB9LCAgLyogMTEgKi8KKyAgeyAgRVJST1JfSU5WQUxJRF9BQ0NFU1MsICAgICAgICAg RUlOVkFMICAgIH0sICAvKiAxMiAqLworICB7ICBFUlJPUl9JTlZBTElEX0RBVEEsICAgICAgICAg ICBFSU5WQUwgICAgfSwgIC8qIDEzICovCisgIHsgIEVSUk9SX0lOVkFMSURfRFJJVkUsICAgICAg ICAgIEVOT0VOVCAgICB9LCAgLyogMTUgKi8KKyAgeyAgRVJST1JfQ1VSUkVOVF9ESVJFQ1RPUlks ICAgICAgRUFDQ0VTICAgIH0sICAvKiAxNiAqLworICB7ICBFUlJPUl9OT1RfU0FNRV9ERVZJQ0Us ICAgICAgICBFWERFViAgICAgfSwgIC8qIDE3ICovCisgIHsgIEVSUk9SX05PX01PUkVfRklMRVMs ICAgICAgICAgIEVOT0VOVCAgICB9LCAgLyogMTggKi8KKyAgeyAgRVJST1JfTE9DS19WSU9MQVRJ T04sICAgICAgICAgRUFDQ0VTICAgIH0sICAvKiAzMyAqLworICB7ICBFUlJPUl9CQURfTkVUUEFU SCwgICAgICAgICAgICBFTk9FTlQgICAgfSwgIC8qIDUzICovCisgIHsgIEVSUk9SX05FVFdPUktf QUNDRVNTX0RFTklFRCwgIEVBQ0NFUyAgICB9LCAgLyogNjUgKi8KKyAgeyAgRVJST1JfQkFEX05F VF9OQU1FLCAgICAgICAgICAgRU5PRU5UICAgIH0sICAvKiA2NyAqLworICB7ICBFUlJPUl9GSUxF X0VYSVNUUywgICAgICAgICAgICBFRVhJU1QgICAgfSwgIC8qIDgwICovCisgIHsgIEVSUk9SX0NB Tk5PVF9NQUtFLCAgICAgICAgICAgIEVBQ0NFUyAgICB9LCAgLyogODIgKi8KKyAgeyAgRVJST1Jf RkFJTF9JMjQsICAgICAgICAgICAgICAgRUFDQ0VTICAgIH0sICAvKiA4MyAqLworICB7ICBFUlJP Ul9JTlZBTElEX1BBUkFNRVRFUiwgICAgICBFSU5WQUwgICAgfSwgIC8qIDg3ICovCisgIHsgIEVS Uk9SX05PX1BST0NfU0xPVFMsICAgICAgICAgIEVBR0FJTiAgICB9LCAgLyogODkgKi8KKyAgeyAg RVJST1JfRFJJVkVfTE9DS0VELCAgICAgICAgICAgRUFDQ0VTICAgIH0sICAvKiAxMDggKi8KKyAg eyAgRVJST1JfQlJPS0VOX1BJUEUsICAgICAgICAgICAgRVBJUEUgICAgIH0sICAvKiAxMDkgKi8K KyAgeyAgRVJST1JfRElTS19GVUxMLCAgICAgICAgICAgICAgRU5PU1BDICAgIH0sICAvKiAxMTIg Ki8KKyAgeyAgRVJST1JfSU5WQUxJRF9UQVJHRVRfSEFORExFLCAgRUJBREYgICAgIH0sICAvKiAx MTQgKi8KKyAgeyAgRVJST1JfSU5WQUxJRF9IQU5ETEUsICAgICAgICAgRUlOVkFMICAgIH0sICAv KiAxMjQgKi8KKyAgeyAgRVJST1JfV0FJVF9OT19DSElMRFJFTiwgICAgICAgRUNISUxEICAgIH0s ICAvKiAxMjggKi8KKyAgeyAgRVJST1JfQ0hJTERfTk9UX0NPTVBMRVRFLCAgICAgRUNISUxEICAg IH0sICAvKiAxMjkgKi8KKyAgeyAgRVJST1JfRElSRUNUX0FDQ0VTU19IQU5ETEUsICAgRUJBREYg ICAgIH0sICAvKiAxMzAgKi8KKyAgeyAgRVJST1JfTkVHQVRJVkVfU0VFSywgICAgICAgICAgRUlO VkFMICAgIH0sICAvKiAxMzEgKi8KKyAgeyAgRVJST1JfU0VFS19PTl9ERVZJQ0UsICAgICAgICAg RUFDQ0VTICAgIH0sICAvKiAxMzIgKi8KKyAgeyAgRVJST1JfRElSX05PVF9FTVBUWSwgICAgICAg ICAgRU5PVEVNUFRZIH0sICAvKiAxNDUgKi8KKyAgeyAgRVJST1JfTk9UX0xPQ0tFRCwgICAgICAg ICAgICAgRUFDQ0VTICAgIH0sICAvKiAxNTggKi8KKyAgeyAgRVJST1JfQkFEX1BBVEhOQU1FLCAg ICAgICAgICAgRU5PRU5UICAgIH0sICAvKiAxNjEgKi8KKyAgeyAgRVJST1JfTUFYX1RIUkRTX1JF QUNIRUQsICAgICAgRUFHQUlOICAgIH0sICAvKiAxNjQgKi8KKyAgeyAgRVJST1JfTE9DS19GQUlM RUQsICAgICAgICAgICAgRUFDQ0VTICAgIH0sICAvKiAxNjcgKi8KKyAgeyAgRVJST1JfQUxSRUFE WV9FWElTVFMsICAgICAgICAgRUVYSVNUICAgIH0sICAvKiAxODMgKi8KKyAgeyAgRVJST1JfRklM RU5BTUVfRVhDRURfUkFOR0UsICAgRU5PRU5UICAgIH0sICAvKiAyMDYgKi8KKyAgeyAgRVJST1Jf TkVTVElOR19OT1RfQUxMT1dFRCwgICAgRUFHQUlOICAgIH0sICAvKiAyMTUgKi8KKyAgeyAgRVJS T1JfTk9UX0VOT1VHSF9RVU9UQSwgICAgICAgRU5PTUVNICAgIH0gICAgLyogMTgxNiAqLworfTsK KworLyogc2l6ZSBvZiB0aGUgdGFibGUgKi8KKyNkZWZpbmUgRVJSVEFCTEVTSVpFIChzaXplb2Yo ZXJydGFibGUpL3NpemVvZihlcnJ0YWJsZVswXSkpCisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIGNv bnN0YW50cyBtdXN0IGJlIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtCit2YWx1ZXMgaW4gdGhlIChj b250aWd1b3VzKSByYW5nZSBvZiBFeGVjIEZhaWx1cmUgZXJyb3JzLiAqLworI2RlZmluZSBNSU5f RVhFQ19FUlJPUiBFUlJPUl9JTlZBTElEX1NUQVJUSU5HX0NPREVTRUcKKyNkZWZpbmUgTUFYX0VY RUNfRVJST1IgRVJST1JfSU5GTE9PUF9JTl9SRUxPQ19DSEFJTgorCisvKiBUaGVzZSBhcmUgdGhl IGxvdyBhbmQgaGlnaCB2YWx1ZSBpbiB0aGUgcmFuZ2Ugb2YgZXJyb3JzIHRoYXQgYXJlCithY2Nl c3MgdmlvbGF0aW9ucyAqLworI2RlZmluZSBNSU5fRUFDQ0VTX1JBTkdFIEVSUk9SX1dSSVRFX1BS T1RFQ1QKKyNkZWZpbmUgTUFYX0VBQ0NFU19SQU5HRSBFUlJPUl9TSEFSSU5HX0JVRkZFUl9FWENF RURFRAorCisKK3N0YXRpYyBpbnQgZ2V0X2Vycm5vX2Zyb21fb3NlcnIodW5zaWduZWQgbG9uZyBv c2Vycm5vKQoreworICBpbnQgaTsKKworICAvKiBjaGVjayB0aGUgdGFibGUgZm9yIHRoZSBPUyBl cnJvciBjb2RlICovCisgIGZvciAoaSA9IDA7IGkgPCBFUlJUQUJMRVNJWkU7ICsraSkgCisgIHsK KyAgICBpZiAob3NlcnJubyA9PSBlcnJ0YWJsZVtpXS5vc2NvZGUpIAorICAgIHsKKyAgICAgIHJl dHVybiAgZXJydGFibGVbaV0uZXJybm9jb2RlOworICAgIH0KKyAgfQorCisgIC8qIFRoZSBlcnJv ciBjb2RlIHdhc24ndCBpbiB0aGUgdGFibGUuICBXZSBjaGVjayBmb3IgYSByYW5nZSBvZiAqLwor ICAvKiBFQUNDRVMgZXJyb3JzIG9yIGV4ZWMgZmFpbHVyZSBlcnJvcnMgKEVOT0VYRUMpLiAgT3Ro ZXJ3aXNlICAgKi8KKyAgLyogRUlOVkFMIGlzIHJldHVybmVkLiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgaWYgKG9zZXJybm8gPj0gTUlOX0VBQ0NFU19S QU5HRSAmJiBvc2Vycm5vIDw9IE1BWF9FQUNDRVNfUkFOR0UpCisgICAgcmV0dXJuIEVBQ0NFUzsK KyAgZWxzZSBpZiAob3NlcnJubyA+PSBNSU5fRVhFQ19FUlJPUiAmJiBvc2Vycm5vIDw9IE1BWF9F WEVDX0VSUk9SKQorICAgIHJldHVybiBFTk9FWEVDOworICBlbHNlCisgICAgcmV0dXJuIEVJTlZB TDsKK30KKworLyogU2V0IGVycm5vIGNvcnJlc3BvbnNpbmcgdG8gR2V0TGFzdEVycm9yKCkgdmFs dWUgKi8KK3ZvaWQgbXlfb3NtYXBlcnIgKCB1bnNpZ25lZCBsb25nIG9zZXJybm8pCit7CisgICAg ZXJybm8gPSBnZXRfZXJybm9fZnJvbV9vc2Vycihvc2Vycm5vKTsKK30KCj09PSBhZGRlZCBmaWxl ICdteXN5cy9teV93aW5maWxlLmMnCi0tLSBhL215c3lzL215X3dpbmZpbGUuYwkxOTcwLTAxLTAx IDAwOjAwOjAwICswMDAwCisrKyBiL215c3lzL215X3dpbmZpbGUuYwkyMDA4LTA2LTEyIDExOjIw OjI4ICswMDAwCkBAIC0wLDAgKzEsNjQ5IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDggTXlTUUwg QUIKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCith bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rvbiwg TUEgIDAyMTExLTEzMDcgIFVTQSAqLworCisvKgorICBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUg aXMgdG8gcHJvdmlkZSBpbXBsZW1lbnRhdGlvbiBvZiBmaWxlIElPIHJvdXRpbmVzIG9uIAorICBX aW5kb3dzIHRoYXQgY2FuIGJlIHRob3VnaHQgYXMgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgY29y cmVzcG9uZGluZyBDIHJ1bnRpbWUKKyAgZnVuY3Rpb25hbGl0eS4KKworICBDb21wYXJlZCB0byBX aW5kb3dzIENSVCwgdGhpcyBvbmUgCisgIC0gZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBmaWxlIGRl c2NyaXB0b3IgCisgIGxpbWl0YXRpb24gKGRlZmF1bHQgaXMgMTYzODQgYW5kIGNhbiAgYmUgaW5j cmVhc2VkIGZ1cnRoZXIsIHdoZXJlYXMgQ1JUIHBvc2VzCisgIGEgaGFyZCBsaW1pdCBvZiAyMDQ4 IGZpbGUgZGVzY3JpcHRvcnMpCisgIC0gdGhlIGZpbGUgb3BlcmF0aW9ucyBhcmUgbm90IHNlcmlh bGl6ZWQKKyAgLSBwb3NpdGlvbmFsIElPIHByZWFkL3B3cml0ZSBpcyBwb3J0ZWQgaGVyZS4KKyAg LSBubyB0ZXh0IG1vZGUgZm9yIGZpbGVzLCBhbGwgSU8gaXMgImJpbmFyeSIKKworICBOYW1pbmcg Y29udmVudGlvbjoKKyAgQWxsIHJvdXRpbmVzIGFyZSBwcmVmaXhlZCB3aXRoIG15X3dpbl8sIGUu ZyBQb3NpeCBvcGVuKCkgaXMgaW1wbGVtZW50ZWQgd2l0aCAKKyAgbXlfd2luX29wZW4oKQorCisg IEltcGxlbWVudGVkIGFyZQorICAtIFBPU0lYIHJvdXRpbmVzKGUuZyBvcGVuLCByZWFkLCBsc2Vl ayAuLi4pCisgIC0gU29tZSBBTlNJIEMgc3RyZWFtIHJvdXRpbmVzIChmb3BlbiwgZmRvcGVuLCBm aWxlbm8sIGZjbG9zZSkKKyAgLSBXaW5kb3dzIENSVCBlcXV2YWxpZW50cyAobXlfZ2V0X29zZmhh bmRsZSwgb3Blbl9vc2ZoYW5kbGUpCisgIC0gUmFuZG9tIHN0dWZmIChteV93aW5fbG9jaykKKwor ICBXb3J0aCB0byBub3RlOgorICAtIEZpbGUgZGVzY3JpcHRvcnMgdXNlZCBoZXJlIGFyZSBsb2Nh dGVkIGluIGEgcmFuZ2UgdGhhdCBpcyBub3QgY29tcGF0aWJsZSAKKyAgd2l0aCBDUlQgb24gcHVy cG9zZS4gQXR0ZW1wdCB0byB1c2UgYSBmaWxlIGRlc2NyaXB0b3IgZnJvbSBXaW5kb3dzIENSVCBs aWJyYXJ5CisgIHJhbmdlIGluIG15X3dpbl8qIGZ1bmN0aW9uIHdpbGwgYmUgcHVuaXNoZWQgd2l0 aCBEQlVHX0FTU0VSVCgpCisKKyAgLSBGaWxlIHN0cmVhbXMgKEZJTEUgKikgYXJlIGFjdHVhbGx5 IGZyb20gdGhlIEMgcnVudGltZS4gVGhlIHJvdXRpbmVzIHByb3ZpZGVkCisgIGhlcmUgYXJlIHVz ZWZ1bCBvbmx5IGluIHNjZXJuYXJpb3MgdGhhdCB1c2UgbG93LWxldmVsIElPIHdpdGggbXlfd2lu X2ZpbGVubygpCisqLworCisjaWZkZWYgX1dJTjMyCisKKyNpbmNsdWRlICJteXN5c19wcml2Lmgi CisjaW5jbHVkZSA8c2hhcmUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisvKiBBc3NvY2lh dGVzIGEgZmlsZSBkZXNjcmlwdG9yIHdpdGggYW4gZXhpc3Rpbmcgb3BlcmF0aW5nLXN5c3RlbSBm aWxlIGhhbmRsZS4qLworRmlsZSBteV9vcGVuX29zZmhhbmRsZShIQU5ETEUgaGFuZGxlLCBpbnQg b2ZsYWcpCit7CisgIGludCBvZmZzZXQ9IC0xOworICB1aW50IGk7CisgIERCVUdfRU5URVIoIm15 X29wZW5fb3NmaGFuZGxlIik7CisKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZUSFJfTE9DS19vcGVu KTsKKyAgZm9yKGk9IE1ZX0ZJTEVfTUlOOyBpIDwgbXlfZmlsZV9saW1pdDtpKyspCisgIHsKKyAg ICBpZihteV9maWxlX2luZm9baV0uZmhhbmRsZSA9PSAwKQorICAgIHsKKyAgICAgIHN0cnVjdCBz dF9teV9maWxlX2luZm8gKmZpbmZvID0gJihteV9maWxlX2luZm9baV0pOworICAgICAgZmluZm8t PnR5cGU9ICAgIEZJTEVfQllfT1BFTjsKKyAgICAgIGZpbmZvLT5maGFuZGxlPSBoYW5kbGU7Cisg ICAgICBmaW5mby0+b2ZsYWc9ICAgb2ZsYWc7CisgICAgICBvZmZzZXQgPSBpOworICAgICAgYnJl YWs7CisgICAgfQorICB9CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZUSFJfTE9DS19vcGVuKTsK KyAgaWYob2Zmc2V0ID09IC0xKQorICAgIGVycm5vPSBFTUZJTEU7IC8qIHRvIG1hbnkgZmlsZSBo YW5kbGVzIG9wZW4gKi8KKyAgREJVR19SRVRVUk4ob2Zmc2V0KTsKK30KKworCitzdGF0aWMgdm9p ZCBpbnZhbGlkYXRlX2ZkKEZpbGUgZmQpCit7CisgIERCVUdfRU5URVIoImludmFsaWRhdGVfZmQi KTsKKyAgREJVR19BU1NFUlQoZmQgPj0gTVlfRklMRV9NSU4gJiYgZmQgPCAoaW50KW15X2ZpbGVf bGltaXQpOworICBteV9maWxlX2luZm9bZmRdLmZoYW5kbGUgPSAwOworICBEQlVHX1ZPSURfUkVU VVJOOworfQorCisKK0hBTkRMRSBteV9nZXRfb3NmaGFuZGxlKEZpbGUgZmQpCit7CisgIERCVUdf RU5URVIoIm15X2dldF9vc2ZoYW5kbGUiKTsKKyAgREJVR19BU1NFUlQoZmQgPj0gTVlfRklMRV9N SU4gJiYgZmQgPCAoaW50KW15X2ZpbGVfbGltaXQpOworICBEQlVHX1JFVFVSTihteV9maWxlX2lu Zm9bZmRdLmZoYW5kbGUpOworfQorCisKK3N0YXRpYyBpbnQgbXlfZ2V0X29wZW5fZmxhZ3MoRmls ZSBmZCkKK3sKKyAgREJVR19FTlRFUigibXlfZ2V0X29zZmhhbmRsZSIpOworICBEQlVHX0FTU0VS VChmZCA+PSBNWV9GSUxFX01JTiAmJiBmZCA8IChpbnQpbXlfZmlsZV9saW1pdCk7CisgIERCVUdf UkVUVVJOKG15X2ZpbGVfaW5mb1tmZF0ub2ZsYWcpOworfQorCisKKy8qCisgIE9wZW4gYSBmaWxl IHdpdGggc2hhcmluZy4gU2ltaWxhciB0byBfc29wZW4oKSBmcm9tIGxpYmMsIGJ1dCBhbGxvd3Mg bWFuYWdpbmcKKyAgc2hhcmUgZGVsZXRlIG9uIHdpbjMyCisKKyAgU1lOT1BTSVMKKyAgbXlfd2lu X3NvcGVuKCkKKyAgcGF0aCAgICBmaWxlIG5hbWUKKyAgb2ZsYWcgICBvcGVyYXRpb24gZmxhZ3MK KyAgc2hmbGFnICBzaGFyZSBmbGFnCisgIHBtb2RlICAgcGVybWlzc2lvbiBmbGFncworCisgIFJF VFVSTiBWQUxVRQorICBGaWxlIGRlc2NyaXB0b3Igb2Ygb3BlbmVkIGZpbGUgaWYgc3VjY2Vzcwor ICAtMSBhbmQgc2V0cyBlcnJubyBpZiBmYWlscy4KKyovCisKK0ZpbGUgbXlfd2luX3NvcGVuKGNv bnN0IGNoYXIgKnBhdGgsIGludCBvZmxhZywgaW50IHNoZmxhZywgaW50IHBtb2RlKQoreworICBp bnQgIGZoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGFuZGxlIG9mIG9wZW5l ZCBmaWxlICovCisgIGludCBtYXNrOworICBIQU5ETEUgb3NmaDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogT1MgaGFuZGxlIG9mIG9wZW5lZCBmaWxlICovCisgIERXT1JEIGZpbGVhY2Nl c3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBPUyBmaWxlIGFjY2VzcyAocmVxdWVzdGVkKSAq LworICBEV09SRCBmaWxlc2hhcmU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT1MgZmlsZSBz aGFyaW5nIG1vZGUgKi8KKyAgRFdPUkQgZmlsZWNyZWF0ZTsgICAgICAgICAgICAgICAgICAgICAg IC8qIE9TIG1ldGhvZCBvZiBvcGVuaW5nL2NyZWF0aW5nICovCisgIERXT1JEIGZpbGVhdHRyaWI7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBPUyBmaWxlIGF0dHJpYnV0ZSBmbGFncyAqLworICBT RUNVUklUWV9BVFRSSUJVVEVTIFNlY3VyaXR5QXR0cmlidXRlczsKKworICBEQlVHX0VOVEVSKCJt eV93aW5fc29wZW4iKTsKKworICBpZiAoY2hlY2tfaWZfbGVnYWxfZmlsZW5hbWUocGF0aCkpCisg IHsKKyAgICBlcnJubz0gRUFDQ0VTOworICAgIERCVUdfUkVUVVJOKC0xKTsKKyAgfQorICBTZWN1 cml0eUF0dHJpYnV0ZXMubkxlbmd0aD0gc2l6ZW9mKFNlY3VyaXR5QXR0cmlidXRlcyk7CisgIFNl Y3VyaXR5QXR0cmlidXRlcy5scFNlY3VyaXR5RGVzY3JpcHRvcj0gTlVMTDsKKyAgU2VjdXJpdHlB dHRyaWJ1dGVzLmJJbmhlcml0SGFuZGxlPSAhKG9mbGFnICYgX09fTk9JTkhFUklUKTsKKworICAv KiBkZWNvZGUgdGhlIGFjY2VzcyBmbGFncyAgKi8KKyAgc3dpdGNoIChvZmxhZyAmIChfT19SRE9O TFkgfCBfT19XUk9OTFkgfCBfT19SRFdSKSkgeworICAgIGNhc2UgX09fUkRPTkxZOiAgICAgICAg IC8qIHJlYWQgYWNjZXNzICovCisgICAgICBmaWxlYWNjZXNzPSBHRU5FUklDX1JFQUQ7CisgICAg ICBicmVhazsKKyAgICBjYXNlIF9PX1dST05MWTogICAgICAgICAvKiB3cml0ZSBhY2Nlc3MgKi8K KyAgICAgIGZpbGVhY2Nlc3M9IEdFTkVSSUNfV1JJVEU7CisgICAgICBicmVhazsKKyAgICBjYXNl IF9PX1JEV1I6ICAgICAgICAgICAvKiByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgKi8KKyAgICAgIGZp bGVhY2Nlc3M9IEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEU7CisgICAgICBicmVhazsKKyAg ICBkZWZhdWx0OiAgICAgICAgICAgICAgICAvKiBlcnJvciwgYmFkIG9mbGFnICovCisgICAgICBl cnJubz0gRUlOVkFMOworICAgICAgREJVR19SRVRVUk4oLTEpOworICB9CisKKyAgLyogZGVjb2Rl IHNoYXJpbmcgZmxhZ3MgKi8KKyAgc3dpdGNoIChzaGZsYWcpIHsKKyAgICBjYXNlIF9TSF9ERU5Z Ulc6ICAgICAgICAvKiBleGNsdXNpdmUgYWNjZXNzIGV4Y2VwdCBkZWxldGUgKi8KKyAgICAgIGZp bGVzaGFyZT0gRklMRV9TSEFSRV9ERUxFVEU7CisgICAgICBicmVhazsKKyAgICBjYXNlIF9TSF9E RU5ZV1I6ICAgICAgICAvKiBzaGFyZSByZWFkIGFuZCBkZWxldGUgYWNjZXNzICovCisgICAgICBm aWxlc2hhcmU9IEZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfREVMRVRFOworICAgICAgYnJl YWs7CisgICAgY2FzZSBfU0hfREVOWVJEOiAgICAgICAgLyogc2hhcmUgd3JpdGUgYW5kIGRlbGV0 ZSBhY2Nlc3MgKi8KKyAgICAgIGZpbGVzaGFyZT0gRklMRV9TSEFSRV9XUklURSB8IEZJTEVfU0hB UkVfREVMRVRFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBfU0hfREVOWU5POiAgICAgICAgLyog c2hhcmUgcmVhZCwgd3JpdGUgYW5kIGRlbGV0ZSBhY2Nlc3MgKi8KKyAgICAgIGZpbGVzaGFyZT0g RklMRV9TSEFSRV9SRUFEIHwgRklMRV9TSEFSRV9XUklURSB8IEZJTEVfU0hBUkVfREVMRVRFOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSBfU0hfREVOWVJXRDogICAgICAgLyogZXhjbHVzaXZlIGFj Y2VzcyAqLworICAgICAgZmlsZXNoYXJlPSAwTDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgX1NI X0RFTllXUkQ6ICAgICAgIC8qIHNoYXJlIHJlYWQgYWNjZXNzICovCisgICAgICBmaWxlc2hhcmU9 IEZJTEVfU0hBUkVfUkVBRDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgX1NIX0RFTllSREQ6ICAg ICAgIC8qIHNoYXJlIHdyaXRlIGFjY2VzcyAqLworICAgICAgZmlsZXNoYXJlPSBGSUxFX1NIQVJF X1dSSVRFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBfU0hfREVOWURFTDogICAgICAgLyogc2hh cmUgcmVhZCBhbmQgd3JpdGUgYWNjZXNzICovCisgICAgICBmaWxlc2hhcmU9IEZJTEVfU0hBUkVf UkVBRCB8IEZJTEVfU0hBUkVfV1JJVEU7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAgICAg ICAgICAgICAgICAvKiBlcnJvciwgYmFkIHNoZmxhZyAqLworICAgICAgZXJybm89IEVJTlZBTDsK KyAgICAgIERCVUdfUkVUVVJOKC0xKTsKKyAgfQorCisgIC8qIGRlY29kZSBvcGVuL2NyZWF0ZSBt ZXRob2QgZmxhZ3MgICovCisgIHN3aXRjaCAob2ZsYWcgJiAoX09fQ1JFQVQgfCBfT19FWENMIHwg X09fVFJVTkMpKSB7CisgICAgY2FzZSAwOgorICAgIGNhc2UgX09fRVhDTDogICAgICAgICAgICAg ICAgICAgLyogaWdub3JlIEVYQ0wgdy9vIENSRUFUICovCisgICAgICBmaWxlY3JlYXRlPSBPUEVO X0VYSVNUSU5HOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIF9PX0NSRUFUOgorICAgICAgZmls ZWNyZWF0ZT0gT1BFTl9BTFdBWVM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgX09fQ1JFQVQg fCBfT19FWENMOgorICAgIGNhc2UgX09fQ1JFQVQgfCBfT19UUlVOQyB8IF9PX0VYQ0w6CisgICAg ICBmaWxlY3JlYXRlPSBDUkVBVEVfTkVXOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIF9PX1RS VU5DOgorICAgIGNhc2UgX09fVFJVTkMgfCBfT19FWENMOiAgICAgICAgLyogaWdub3JlIEVYQ0wg dy9vIENSRUFUICovCisgICAgICBmaWxlY3JlYXRlPSBUUlVOQ0FURV9FWElTVElORzsKKyAgICAg IGJyZWFrOworCisgICAgY2FzZSBfT19DUkVBVCB8IF9PX1RSVU5DOgorICAgICAgZmlsZWNyZWF0 ZT0gQ1JFQVRFX0FMV0FZUzsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIC8q IHRoaXMgY2FuJ3QgaGFwcGVuIC4uLiBhbGwgY2FzZXMgYXJlIGNvdmVyZWQgKi8KKyAgICAgIGVy cm5vPSBFSU5WQUw7CisgICAgICBEQlVHX1JFVFVSTigtMSk7CisgIH0KKworICAvKiBkZWNvZGUg ZmlsZSBhdHRyaWJ1dGUgZmxhZ3MgaWYgX09fQ1JFQVQgd2FzIHNwZWNpZmllZCAqLworICBmaWxl YXR0cmliPSBGSUxFX0FUVFJJQlVURV9OT1JNQUw7ICAgICAvKiBkZWZhdWx0ICovCisgIGlmIChv ZmxhZyAmIF9PX0NSRUFUKSAKKyAgeworICAgIF91bWFzaygobWFzaz0gX3VtYXNrKDApKSk7CisK KyAgICBpZiAoISgocG1vZGUgJiB+bWFzaykgJiBfU19JV1JJVEUpKQorICAgICAgZmlsZWF0dHJp Yj0gRklMRV9BVFRSSUJVVEVfUkVBRE9OTFk7CisgIH0KKworICAvKiBTZXQgdGVtcG9yYXJ5IGZp bGUgKGRlbGV0ZS1vbi1jbG9zZSkgYXR0cmlidXRlIGlmIHJlcXVlc3RlZC4gKi8KKyAgaWYgKG9m bGFnICYgX09fVEVNUE9SQVJZKSAKKyAgeworICAgIGZpbGVhdHRyaWJ8PSBGSUxFX0ZMQUdfREVM RVRFX09OX0NMT1NFOworICAgIGZpbGVhY2Nlc3N8PSBERUxFVEU7CisgIH0KKworICAvKiBTZXQg dGVtcG9yYXJ5IGZpbGUgKGRlbGF5LWZsdXNoLXRvLWRpc2spIGF0dHJpYnV0ZSBpZiByZXF1ZXN0 ZWQuKi8KKyAgaWYgKG9mbGFnICYgX09fU0hPUlRfTElWRUQpCisgICAgZmlsZWF0dHJpYnw9IEZJ TEVfQVRUUklCVVRFX1RFTVBPUkFSWTsKKworICAvKiBTZXQgc2VxdWVudGlhbCBvciByYW5kb20g YWNjZXNzIGF0dHJpYnV0ZSBpZiByZXF1ZXN0ZWQuICovCisgIGlmIChvZmxhZyAmIF9PX1NFUVVF TlRJQUwpCisgICAgZmlsZWF0dHJpYnw9IEZJTEVfRkxBR19TRVFVRU5USUFMX1NDQU47CisgIGVs c2UgaWYgKG9mbGFnICYgX09fUkFORE9NKQorICAgIGZpbGVhdHRyaWJ8PSBGSUxFX0ZMQUdfUkFO RE9NX0FDQ0VTUzsKKworICAvKiB0cnkgdG8gb3Blbi9jcmVhdGUgdGhlIGZpbGUgICovCisgIGlm ICgob3NmaD0gQ3JlYXRlRmlsZShwYXRoLCBmaWxlYWNjZXNzLCBmaWxlc2hhcmUsICZTZWN1cml0 eUF0dHJpYnV0ZXMsIAorICAgIGZpbGVjcmVhdGUsIGZpbGVhdHRyaWIsIE5VTEwpKSA9PSBJTlZB TElEX0hBTkRMRV9WQUxVRSkKKyAgeworICAgIC8qCisgICAgICAgT1MgY2FsbCB0byBvcGVuL2Ny ZWF0ZSBmaWxlIGZhaWxlZCEgbWFwIHRoZSBlcnJvciwgcmVsZWFzZQorICAgICAgIHRoZSBsb2Nr LCBhbmQgcmV0dXJuIC0xLiBub3RlIHRoYXQgaXQncyBub3QgbmVjZXNzYXJ5IHRvCisgICAgICAg Y2FsbCBfZnJlZV9vc2ZobmQgKGl0IGhhc24ndCBiZWVuIHVzZWQgeWV0KS4KKyAgICAqLworICAg IG15X29zbWFwZXJyKEdldExhc3RFcnJvcigpKTsgICAgIC8qIG1hcCBlcnJvciAqLworICAgIERC VUdfUkVUVVJOKC0xKTsgICAgICAgICAgICAgICAgIC8qIHJldHVybiBlcnJvciB0byBjYWxsZXIg Ki8KKyAgfQorCisgIGlmICgoZmg9IG15X29wZW5fb3NmaGFuZGxlKG9zZmgsIAorICAgIG9mbGFn ICYgKF9PX0FQUEVORCB8IF9PX1JET05MWSB8IF9PX1RFWFQpKSkgPT0gLTEpCisgIHsKKyAgICBD bG9zZUhhbmRsZShvc2ZoKTsKKyAgfQorCisgIERCVUdfUkVUVVJOKGZoKTsgICAgICAgICAgICAg ICAgICAgLyogcmV0dXJuIGhhbmRsZSAqLworfQorCisKK0ZpbGUgbXlfd2luX29wZW4oY29uc3Qg Y2hhciAqcGF0aCwgaW50IGZsYWdzKQoreworICBEQlVHX0VOVEVSKCJteV93aW5fb3BlbiIpOwor ICBEQlVHX1JFVFVSTihteV93aW5fc29wZW4oKGNoYXIgKikgcGF0aCwgZmxhZ3MgfCBfT19CSU5B UlksIF9TSF9ERU5ZTk8sIAorICAgIF9TX0lSRUFEIHwgU19JV1JJVEUpKTsKK30KKworCitpbnQg bXlfd2luX2Nsb3NlKEZpbGUgZmQpCit7CisgIERCVUdfRU5URVIoIm15X3dpbl9jbG9zZSIpOwor ICBpZihDbG9zZUhhbmRsZShteV9nZXRfb3NmaGFuZGxlKGZkKSkpCisgIHsKKyAgICBpbnZhbGlk YXRlX2ZkKGZkKTsKKyAgICBEQlVHX1JFVFVSTigwKTsKKyAgfQorICBteV9vc21hcGVycihHZXRM YXN0RXJyb3IoKSk7CisgIERCVUdfUkVUVVJOKC0xKTsKK30KKworCitzaXplX3QgbXlfd2luX3By ZWFkKEZpbGUgRmlsZWRlcywgdWNoYXIgKkJ1ZmZlciwgc2l6ZV90IENvdW50LCBteV9vZmZfdCBv ZmZzZXQpCit7CisgIERXT1JEICAgICAgICAgbkJ5dGVzUmVhZDsKKyAgSEFORExFICAgICAgICBo RmlsZTsKKyAgT1ZFUkxBUFBFRCAgICBvdj17MH07CisgIExBUkdFX0lOVEVHRVIgbGk7CisKKyAg REJVR19FTlRFUigibXlfd2luX3ByZWFkIik7CisKKyAgaWYoIUNvdW50KQorICAgIERCVUdfUkVU VVJOKDApOworI2lmZGVmIF9XSU42NAorICBpZihDb3VudCA+IFVJTlRfTUFYKQorICAgIENvdW50 ID0gVUlOVF9NQVg7CisjZW5kaWYKKworICBoRmlsZT0gICAgICAgICAoSEFORExFKW15X2dldF9v c2ZoYW5kbGUoRmlsZWRlcyk7CisgIGxpLlF1YWRQYXJ0PSAgIG9mZnNldDsKKyAgb3YuT2Zmc2V0 PSAgICAgbGkuTG93UGFydDsKKyAgb3YuT2Zmc2V0SGlnaD0gbGkuSGlnaFBhcnQ7CisKKyAgaWYo IVJlYWRGaWxlKGhGaWxlLCBCdWZmZXIsIChEV09SRClDb3VudCwgJm5CeXRlc1JlYWQsICZvdikp CisgIHsKKyAgICBEV09SRCBsYXN0RXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBpZihsYXN0 RXJyb3IgPT0gRVJST1JfSEFORExFX0VPRikKKyAgICAgIERCVUdfUkVUVVJOKDApOyAvKnJldHVy biAwIGF0IEVPRiovCisgICAgbXlfb3NtYXBlcnIobGFzdEVycm9yKTsKKyAgICBEQlVHX1JFVFVS TigtMSk7CisgIH0KKyAgREJVR19SRVRVUk4obkJ5dGVzUmVhZCk7Cit9CisKKworc2l6ZV90IG15 X3dpbl9yZWFkKEZpbGUgRmlsZWRlcywgdWNoYXIgKkJ1ZmZlciwgc2l6ZV90IENvdW50KQorewor ICBEV09SRCAgICAgICAgIG5CeXRlc1JlYWQ7CisgIEhBTkRMRSAgICAgICAgaEZpbGU7CisKKyAg REJVR19FTlRFUigibXlfd2luX3JlYWQiKTsKKyAgaWYoIUNvdW50KQorICAgIHJldHVybiAwOwor I2lmZGVmIF9XSU42NAorICBpZihDb3VudCA+IFVJTlRfTUFYKQorICAgIENvdW50ID0gVUlOVF9N QVg7CisjZW5kaWYKKworICBoRmlsZT0gKEhBTkRMRSlteV9nZXRfb3NmaGFuZGxlKEZpbGVkZXMp OworCisgIGlmKCFSZWFkRmlsZShoRmlsZSwgQnVmZmVyLCAoRFdPUkQpQ291bnQsICZuQnl0ZXNS ZWFkLCBOVUxMKSkKKyAgeworICAgIERXT1JEIGxhc3RFcnJvciA9IEdldExhc3RFcnJvcigpOwor ICAgIGlmKGxhc3RFcnJvciA9PSBFUlJPUl9IQU5ETEVfRU9GKQorICAgICAgREJVR19SRVRVUk4o MCk7IC8qcmV0dXJuIDAgYXQgRU9GKi8KKyAgICBteV9vc21hcGVycihsYXN0RXJyb3IpOworICAg IERCVUdfUkVUVVJOKC0xKTsKKyAgfQorICBEQlVHX1JFVFVSTihuQnl0ZXNSZWFkKTsKK30KKwor CitzaXplX3QgbXlfd2luX3B3cml0ZShGaWxlIEZpbGVkZXMsIGNvbnN0IHVjaGFyICpCdWZmZXIs IHNpemVfdCBDb3VudCwgCisgICAgICAgICAgICAgICAgICAgICBteV9vZmZfdCBvZmZzZXQpCit7 CisgIERXT1JEICAgICAgICAgbkJ5dGVzV3JpdHRlbjsKKyAgSEFORExFICAgICAgICBoRmlsZTsK KyAgT1ZFUkxBUFBFRCAgICBvdj17MH07CisgIExBUkdFX0lOVEVHRVIgbGk7CisKKyAgREJVR19F TlRFUigibXlfd2luX3B3cml0ZSIpOworICBEQlVHX1BSSU5UKCJteSIsKCJGaWxlZGVzOiAlZCwg QnVmZmVyOiAlcCwgQ291bnQ6ICV6ZCwgb2Zmc2V0OiAlbGx1IiwgCisgICAgRmlsZWRlcywgQnVm ZmVyLCBDb3VudCwgKHVsb25nbG9uZylvZmZzZXQpKTsKKworICBpZighQ291bnQpCisgICAgREJV R19SRVRVUk4oMCk7CisKKyNpZmRlZiBfV0lONjQKKyAgaWYoQ291bnQgPiBVSU5UX01BWCkKKyAg ICBDb3VudCA9IFVJTlRfTUFYOworI2VuZGlmCisKKyAgaEZpbGU9ICAgICAgICAgKEhBTkRMRSlt eV9nZXRfb3NmaGFuZGxlKEZpbGVkZXMpOworICBsaS5RdWFkUGFydD0gICBvZmZzZXQ7CisgIG92 Lk9mZnNldD0gICAgIGxpLkxvd1BhcnQ7CisgIG92Lk9mZnNldEhpZ2g9IGxpLkhpZ2hQYXJ0Owor CisgIGlmKCFXcml0ZUZpbGUoaEZpbGUsIEJ1ZmZlciwgKERXT1JEKUNvdW50LCAmbkJ5dGVzV3Jp dHRlbiwgJm92KSkKKyAgeworICAgIG15X29zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKyAgICBE QlVHX1JFVFVSTigtMSk7CisgIH0KKyAgZWxzZQorICAgIERCVUdfUkVUVVJOKG5CeXRlc1dyaXR0 ZW4pOworfQorCisKK215X29mZl90IG15X3dpbl9sc2VlayhGaWxlIGZkLCBteV9vZmZfdCBwb3Ms IGludCB3aGVuY2UpCit7CisgIExBUkdFX0lOVEVHRVIgb2Zmc2V0OworICBMQVJHRV9JTlRFR0VS IG5ld3BvczsKKworICBEQlVHX0VOVEVSKCJteV93aW5fbHNlZWsiKTsKKworICAvKiBDaGVjayBj b21wYXRpYmlsaXR5IG9mIFdpbmRvd3MgYW5kIFBvc2l4IHNlZWsgY29uc3RhbnRzICovCisgIGNv bXBpbGVfdGltZV9hc3NlcnQoRklMRV9CRUdJTiA9PSBTRUVLX1NFVCAmJiBGSUxFX0NVUlJFTlQg PT0gU0VFS19DVVIgCisgICAgJiYgRklMRV9FTkQgPT0gU0VFS19FTkQpOworCisgIG9mZnNldC5R dWFkUGFydCA9IHBvczsKKyAgaWYoIVNldEZpbGVQb2ludGVyRXgobXlfZ2V0X29zZmhhbmRsZShm ZCksIG9mZnNldCwgJm5ld3Bvcywgd2hlbmNlKSkKKyAgeworICAgIG15X29zbWFwZXJyKEdldExh c3RFcnJvcigpKTsKKyAgICBuZXdwb3MuUXVhZFBhcnQgPSAtMTsKKyAgfQorICBEQlVHX1JFVFVS TihuZXdwb3MuUXVhZFBhcnQpOworfQorCisKKyNpZm5kZWYgRklMRV9XUklURV9UT19FTkRfT0Zf RklMRQorI2RlZmluZSBGSUxFX1dSSVRFX1RPX0VORF9PRl9GSUxFICAgICAgIDB4ZmZmZmZmZmYK KyNlbmRpZgorc2l6ZV90IG15X3dpbl93cml0ZShGaWxlIGZkLCBjb25zdCB1Y2hhciAqQnVmZmVy LCBzaXplX3QgQ291bnQpCit7CisgIERXT1JEIG5Xcml0dGVuOworICBPVkVSTEFQUEVEIG92Owor ICBPVkVSTEFQUEVEICpwb3YgPSBOVUxMOworICBIQU5ETEUgaEZpbGU7CisKKyAgREJVR19FTlRF UigibXlfd2luX3dyaXRlIik7CisgIERCVUdfUFJJTlQoIm15IiwoIkZpbGVkZXM6ICVkLCBCdWZm ZXI6ICVwLCBDb3VudCAlemQiLCBmZCwgQnVmZmVyLCBDb3VudCkpOworICBpZihteV9nZXRfb3Bl bl9mbGFncyhmZCkgJiBfT19BUFBFTkQpCisgIHsKKyAgICAvKgorICAgICAgIEF0b21pYyBhcHBl bmQgdG8gdGhlIGVuZCBvZiBmaWxlIGlzIGlzIGRvbmUgYnkgc3BlY2lhbCBpbml0aWFsaXphdGlv biBvZiAKKyAgICAgICB0aGUgT1ZFUkxBUFBFRCBzdHJ1Y3R1cmUuIFNlZSBNU0ROIFdyaXRlRmls ZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm8uCisgICAgKi8KKyAgICBtZW1zZXQoJm92LCAw LCBzaXplb2Yob3YpKTsKKyAgICBvdi5PZmZzZXQgPSBGSUxFX1dSSVRFX1RPX0VORF9PRl9GSUxF OyAKKyAgICBvdi5PZmZzZXRIaWdoID0gLTE7CisgICAgcG92ID0gJm92OworICB9CisKKyAgaEZp bGUgPSBteV9nZXRfb3NmaGFuZGxlKGZkKTsKKyAgaWYoIVdyaXRlRmlsZShoRmlsZSwgQnVmZmVy LCAoRFdPUkQpQ291bnQsICZuV3JpdHRlbiwgcG92KSkKKyAgeworICAgIG5Xcml0dGVuICA9IChz aXplX3QpLTE7CisgICAgbXlfb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOworICB9CisgIERCVUdf UkVUVVJOKChzaXplX3QpbldyaXR0ZW4pOworfQorCisKK2ludCBteV93aW5fY2hzaXplKEZpbGUg ZmQsICBteV9vZmZfdCBuZXdsZW5ndGgpCit7CisgIEhBTkRMRSBoRmlsZTsKKyAgTEFSR0VfSU5U RUdFUiBsZW5ndGg7CisgIERCVUdfRU5URVIoIm15X3dpbl9jaHNpemUiKTsKKworICBoRmlsZSA9 IChIQU5ETEUpIG15X2dldF9vc2ZoYW5kbGUoZmQpOworICBsZW5ndGguUXVhZFBhcnQgPSBuZXds ZW5ndGg7CisgIGlmICghU2V0RmlsZVBvaW50ZXJFeChoRmlsZSwgbGVuZ3RoICwgTlVMTCAsIEZJ TEVfQkVHSU4pKQorICAgIGdvdG8gZXJyOworICBpZiAoIVNldEVuZE9mRmlsZShoRmlsZSkpCisg ICAgZ290byBlcnI7CisgIERCVUdfUkVUVVJOKDApOworZXJyOgorICBteV9vc21hcGVycihHZXRM YXN0RXJyb3IoKSk7CisgIG15X2Vycm5vPSBlcnJubzsKKyAgREJVR19SRVRVUk4oLTEpOworfQor CisKKy8qIEdldCB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciBzdGRpbixzdGRvdXQgb3Igc3RkZXJy ICovCitzdGF0aWMgRmlsZSBteV9nZXRfc3RkZmlsZV9kZXNjcmlwdG9yKEZJTEUgKnN0cmVhbSkK K3sKKyAgSEFORExFIGhGaWxlOworICBEV09SRCBuU3RkSGFuZGxlOworICBEQlVHX0VOVEVSKCJt eV9nZXRfc3RkZmlsZV9kZXNjcmlwdG9yIik7CisKKyAgaWYoc3RyZWFtID09IHN0ZGluKQorICAg IG5TdGRIYW5kbGU9IFNURF9JTlBVVF9IQU5ETEU7CisgIGVsc2UgaWYoc3RyZWFtID09IHN0ZG91 dCkKKyAgICBuU3RkSGFuZGxlPSBTVERfT1VUUFVUX0hBTkRMRTsKKyAgZWxzZSBpZihzdHJlYW0g PT0gc3RkZXJyKQorICAgIG5TdGRIYW5kbGU9IFNURF9FUlJPUl9IQU5ETEU7CisgIGVsc2UKKyAg ICBEQlVHX1JFVFVSTigtMSk7CisKKyAgaEZpbGU9IEdldFN0ZEhhbmRsZShuU3RkSGFuZGxlKTsK KyAgaWYoaEZpbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgREJVR19SRVRVUk4obXlf b3Blbl9vc2ZoYW5kbGUoaEZpbGUsIDApKTsKKyAgREJVR19SRVRVUk4oLTEpOworfQorCisKK0Zp bGUgbXlfd2luX2ZpbGVubyhGSUxFICpmaWxlKQoreworICBIQU5ETEUgaEZpbGU9IChIQU5ETEUp X2dldF9vc2ZoYW5kbGUoZmlsZW5vKGZpbGUpKTsKKyAgaW50IHJldHZhbD0gLTE7CisgIHVpbnQg aTsKKworICBEQlVHX0VOVEVSKCJteV93aW5fZmlsZW5vIik7CisKKyAgZm9yKGk9IE1ZX0ZJTEVf TUlOOyBpIDwgbXlfZmlsZV9saW1pdDsgaSsrKQorICB7CisgICAgaWYobXlfZmlsZV9pbmZvW2ld LmZoYW5kbGUgPT0gaEZpbGUpCisgICAgeworICAgICAgcmV0dmFsID0gaTsKKyAgICAgIGJyZWFr OworICAgIH0KKyAgfQorICBpZihyZXR2YWwgPT0gLTEpCisgICAgLyogdHJ5IHN0ZCBzdHJlYW0g Ki8KKyAgICBEQlVHX1JFVFVSTihteV9nZXRfc3RkZmlsZV9kZXNjcmlwdG9yKGZpbGUpKTsKKyAg REJVR19SRVRVUk4ocmV0dmFsKTsKK30KKworCitGSUxFICpteV93aW5fZm9wZW4oY29uc3QgY2hh ciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnR5cGUpCit7CisgIEZJTEUgKmZpbGU7CisgIGludCBm bGFncz0gMDsKKyAgREJVR19FTlRFUigibXlfd2luX29wZW4iKTsKKworICAvKiAKKyAgICBJZiB3 ZSBhcmUgbm90IGNyZWF0aW5nLCB0aGVuIHdlIG5lZWQgdG8gdXNlIG15X2FjY2VzcyB0byBtYWtl IHN1cmUgIAorICAgIHRoZSBmaWxlIGV4aXN0cyBzaW5jZSBXaW5kb3dzIGRvZXNuJ3QgaGFuZGxl IGZpbGVzIGxpa2UgImNvbTEuc3ltIiAKKyAgICB2ZXJ5ICB3ZWxsCisgICovCisgIGlmIChjaGVj a19pZl9sZWdhbF9maWxlbmFtZShmaWxlbmFtZSkpCisgIHsKKyAgICBlcnJubz0gRUFDQ0VTOwor ICAgIERCVUdfUkVUVVJOKE5VTEwpOworICB9CisKKyAgZmlsZT0gZm9wZW4oZmlsZW5hbWUsIHR5 cGUpOworICBpZighZmlsZSkKKyAgICBEQlVHX1JFVFVSTihOVUxMKTsKKworICBpZihzdHJjaHIo dHlwZSwnYScpICE9IE5VTEwpCisgICAgZmxhZ3MgPSBPX0FQUEVORDsKKworICAvKgorICAgICBS ZWdpc3RlciBmaWxlIGhhbmRsZSBpbiBteV90YWJsZV9pbmZvLgorICAgICBOZWNlc3NhcnkgZm9y IG15X2ZpbGVubygpCisgICAqLworICBpZihteV9vcGVuX29zZmhhbmRsZSgoSEFORExFKV9nZXRf b3NmaGFuZGxlKGZpbGVubyhmaWxlKSksIGZsYWdzKSA8IDApCisgIHsKKyAgICBmY2xvc2UoZmls ZSk7CisgICAgREJVR19SRVRVUk4oTlVMTCk7CisgIH0KKyAgREJVR19SRVRVUk4oZmlsZSk7Cit9 CisKKworRklMRSAqIG15X3dpbl9mZG9wZW4oRmlsZSBmZCwgY29uc3QgY2hhciAqdHlwZSkKK3sK KyAgRklMRSAqZmlsZTsKKyAgaW50IGNydF9mZDsKKyAgaW50IGZsYWdzPSAwOworCisgIERCVUdf RU5URVIoIm15X3dpbl9mZG9wZW4iKTsKKworICBpZihzdHJjaHIodHlwZSwnYScpICE9IE5VTEwp CisgICAgZmxhZ3MgPSBPX0FQUEVORDsKKyAgLyogQ29udmVydCBPUyBmaWxlIGhhbmRsZSB0byBD UlQgZmlsZSBkZXNjcmlwdG9yIGFuZCB0aGVuIGNhbGwgZmRvcGVuKi8KKyAgY3J0X2ZkPSBfb3Bl bl9vc2ZoYW5kbGUoKGludHB0cl90KW15X2dldF9vc2ZoYW5kbGUoZmQpLCBmbGFncyk7CisgIGlm KGNydF9mZCA8IDApCisgICAgZmlsZT0gTlVMTDsKKyAgZWxzZQorICAgIGZpbGU9IGZkb3Blbihj cnRfZmQsIHR5cGUpOworICBEQlVHX1JFVFVSTihmaWxlKTsKK30KKworCitpbnQgbXlfd2luX2Zj bG9zZShGSUxFICpmaWxlKQoreworICBGaWxlIGZkOworCisgIERCVUdfRU5URVIoIm15X3dpbl9j bG9zZSIpOworICBmZCA9IG15X2ZpbGVubyhmaWxlKTsKKyAgaWYoZmQgPCAwKQorICAgIERCVUdf UkVUVVJOKC0xKTsKKyAgaWYoZmNsb3NlKGZpbGUpIDwgMCkKKyAgICBEQlVHX1JFVFVSTigtMSk7 CisgIGludmFsaWRhdGVfZmQoZmQpOworICBEQlVHX1JFVFVSTigwKTsKK30KKworCisKKy8qCisg IFF1aWNrIGFuZCBkaXJ0eSBteV9mc3RhdCgpIGltcGxlbWVudGF0aW9uIGZvciBXaW5kb3dzLgor ICBVc2UgQ1JUIGZzdGF0IG9uIHRlbXBvcmFyaWx5IGFsbG9jYXRlZCBmaWxlIGRlc2NyaXB0b3Iu CisgIFBhdGNoIGZpbGUgc2l6ZSwgYmVjYXVzZSBzaXplIHRoYXQgZnN0YXQgcmV0dXJucyBpcyBu b3QgCisgIHJlbGlhYmxlIChtYXkgYmUgb3V0ZGF0ZWQpCisqLworaW50IG15X3dpbl9mc3RhdChG aWxlIGZkLCBzdHJ1Y3QgX3N0YXQ2NCAqYnVmKQoreworICBpbnQgY3J0X2ZkOworICBpbnQgcmV0 dmFsOworICBIQU5ETEUgaEZpbGUsIGhEdXA7CisKKyAgREJVR19FTlRFUigibXlfd2luX2ZzdGF0 Iik7CisKKyAgaEZpbGUgPSBteV9nZXRfb3NmaGFuZGxlKGZkKTsKKyAgaWYoIUR1cGxpY2F0ZUhh bmRsZSggR2V0Q3VycmVudFByb2Nlc3MoKSwgaEZpbGUsIEdldEN1cnJlbnRQcm9jZXNzKCksIAor ICAgICZoRHVwICwwLEZBTFNFLERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCisgIHsKKyAgICBteV9v c21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisgICAgREJVR19SRVRVUk4oLTEpOworICB9CisgIGlm ICgoY3J0X2ZkPSBfb3Blbl9vc2ZoYW5kbGUoKGludHB0cl90KWhEdXAsMCkpIDwgMCkKKyAgICBE QlVHX1JFVFVSTigtMSk7CisKKyAgcmV0dmFsPSBfZnN0YXRpNjQoY3J0X2ZkLCBidWYpOworICBp ZihyZXR2YWwgPT0gMCkKKyAgeworICAgIC8qIEZpbGUgc2l6ZSByZXR1cm5lZCBieSBzdGF0IGlz IG5vdCBhY2N1cmF0ZSAobWF5IGJlIG91dGRhdGVkKSwgZml4IGl0Ki8KKyAgICBHZXRGaWxlU2l6 ZUV4KGhEdXAsIChQTEFSR0VfSU5URUdFUikgKCYoYnVmLT5zdF9zaXplKSkpOworICB9CisgIF9j bG9zZShjcnRfZmQpOworICBEQlVHX1JFVFVSTihyZXR2YWwpOworfQorCisKKworaW50IG15X3dp bl9zdGF0KCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgX3N0YXQ2NCAqYnVmKQoreworICBEQlVH X0VOVEVSKCJteV93aW5fc3RhdCIpOworICBpZihfc3RhdGk2NCggcGF0aCwgYnVmKSA9PSAwKQor ICB7CisgICAgLyogRmlsZSBzaXplIHJldHVybmVkIGJ5IHN0YXQgaXMgbm90IGFjY3VyYXRlICht YXkgYmUgb3V0ZGF0ZWQpLCBmaXggaXQqLworICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEg ZGF0YTsKKyAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeChwYXRoLCBHZXRGaWxlRXhJbmZvU3Rh bmRhcmQsICZkYXRhKSkKKyAgICB7CisgICAgICBMQVJHRV9JTlRFR0VSIGxpOworICAgICAgbGku TG93UGFydCAgPSBkYXRhLm5GaWxlU2l6ZUxvdzsKKyAgICAgIGxpLkhpZ2hQYXJ0ID0gZGF0YS5u RmlsZVNpemVIaWdoOworICAgICAgYnVmLT5zdF9zaXplID0gbGkuUXVhZFBhcnQ7CisgICAgfQor ICAgIERCVUdfUkVUVVJOKDApOworICB9CisgIERCVUdfUkVUVVJOKC0xKTsKK30KKworCisKK2lu dCBteV93aW5fZnN5bmMoRmlsZSBmZCkKK3sKKyAgREJVR19FTlRFUigibXlfd2luX2ZzeW5jIik7 CisgIGlmKEZsdXNoRmlsZUJ1ZmZlcnMobXlfZ2V0X29zZmhhbmRsZShmZCkpKQorICAgIERCVUdf UkVUVVJOKDApOworICBteV9vc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisgIERCVUdfUkVUVVJO KC0xKTsKK30KKworCisjZW5kaWYgLypfV0lOMzIqLwoKPT09IG1vZGlmaWVkIGZpbGUgJ215c3lz L215X3dyaXRlLmMnCi0tLSBhL215c3lzL215X3dyaXRlLmMJMjAwOC0wNC0wOSAwMTowNzowMCAr MDAwMAorKysgYi9teXN5cy9teV93cml0ZS5jCTIwMDgtMDYtMTIgMTE6MjA6MjggKzAwMDAKQEAg LTIwLDcgKzIwLDcgQEAKIAogCS8qIFdyaXRlIGEgY2h1bmsgb2YgYnl0ZXMgdG8gYSBmaWxlICov CiAKLXNpemVfdCBteV93cml0ZShpbnQgRmlsZWRlcywgY29uc3QgdWNoYXIgKkJ1ZmZlciwgc2l6 ZV90IENvdW50LCBteWYgTXlGbGFncykKK3NpemVfdCBteV93cml0ZShGaWxlIEZpbGVkZXMsIGNv bnN0IHVjaGFyICpCdWZmZXIsIHNpemVfdCBDb3VudCwgbXlmIE15RmxhZ3MpCiB7CiAgIHNpemVf dCB3cml0ZW5ieXRlcywgd3JpdHRlbjsKICAgdWludCBlcnJvcnM7CkBAIC0zNSw3ICszNSwxMiBA QCBzaXplX3QgbXlfd3JpdGUoaW50IEZpbGVkZXMsIGNvbnN0IHVjaGFyCiAgIAogICBmb3IgKDs7 KQogICB7Ci0gICAgaWYgKCh3cml0ZW5ieXRlcz0gd3JpdGUoRmlsZWRlcywgQnVmZmVyLCBDb3Vu dCkpID09IENvdW50KQorI2lmZGVmIF9fV0lOX18KKyAgICB3cml0ZW5ieXRlcz0gbXlfd2luX3dy aXRlKEZpbGVkZXMsIEJ1ZmZlciwgQ291bnQpOworI2Vsc2UKKyAgICB3cml0ZW5ieXRlcz0gd3Jp dGUoRmlsZWRlcywgQnVmZmVyLCBDb3VudCk7CisjZW5kaWYKKyAgICBpZiAod3JpdGVuYnl0ZXMg PT0gQ291bnQpCiAgICAgICBicmVhazsKICAgICBpZiAod3JpdGVuYnl0ZXMgIT0gKHNpemVfdCkg LTEpCiAgICAgewkJCQkJCS8qIFNhZmVndWFyZCAqLwoKPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3Jh Z2UvaW5ub2Jhc2UvaGFuZGxlci9oYV9pbm5vZGIuY2MnCi0tLSBhL3N0b3JhZ2UvaW5ub2Jhc2Uv aGFuZGxlci9oYV9pbm5vZGIuY2MJMjAwOC0wNS0yMiAxODo0MDoxNSArMDAwMAorKysgYi9zdG9y YWdlL2lubm9iYXNlL2hhbmRsZXIvaGFfaW5ub2RiLmNjCTIwMDgtMDYtMTIgMTE6MjA6MjggKzAw MDAKQEAgLTg3NCw3ICs4NzQsMjkgQEAgaW5ub2Jhc2VfbXlzcWxfdG1wZmlsZSh2b2lkKQogCQl3 aWxsIGJlIHBhc3NlZCB0byBmZG9wZW4oKSwgaXQgd2lsbCBiZSBjbG9zZWQgYnkgaW52b2tpbmcK IAkJZmNsb3NlKCksIHdoaWNoIGluIHR1cm4gd2lsbCBpbnZva2UgY2xvc2UoKSBpbnN0ZWFkIG9m CiAJCW15X2Nsb3NlKCkuICovCisKKyNpZmRlZiBfV0lOMzIKKwkJLyogTm90ZSB0aGF0IG9uIFdp bmRvd3MsIHRoZSBpbnRlZ2VyIHJldHVybmVkIGJ5IG15c3FsX3RtcGZpbGUgCisJCWhhcyBubyBy ZWxhdGlvbiB0byBDIHJ1bnRpbWUgZmlsZSBkZXNjcmlwdG9yLiBIZXJlLCB3ZSBuZWVkIAorCQl0 byBjYWxsIG15X2dldF9vc2ZoYW5kbGUgdG8gZ2V0IHRoZSBIQU5ETEUgYW5kIHRoZW4gY29udmVy dCBpdCAKKwkJdG8gQyBydW50aW1lIGZpbGVkZXNjcmlwdG9yLiAqLworCQl7CisJCQlIQU5ETEUg aEZpbGUgPSBteV9nZXRfb3NmaGFuZGxlKGZkKTsKKwkJCUhBTkRMRSBoRHVwOworCQkJQk9PTCBi T0sgPSAKKwkJCQlEdXBsaWNhdGVIYW5kbGUoR2V0Q3VycmVudFByb2Nlc3MoKSwgaEZpbGUsIEdl dEN1cnJlbnRQcm9jZXNzKCksCisJCQkJCQkJCSZoRHVwLCAwLCBGQUxTRSwgRFVQTElDQVRFX1NB TUVfQUNDRVNTKTsKKwkJCWlmKGJPSykgeworCQkJCWZkMiA9IF9vcGVuX29zZmhhbmRsZSgoaW50 cHRyX3QpaER1cCwwKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCW15X29zbWFwZXJyKEdldExhc3RF cnJvcigpKTsKKwkJCQlmZDIgPSAtMTsKKwkJCX0JCisJCX0KKyNlbHNlCiAJCWZkMiA9IGR1cChm ZCk7CisjZW5kaWYKIAkJaWYgKGZkMiA8IDApIHsKIAkJCURCVUdfUFJJTlQoImVycm9yIiwoIkdv dCBlcnJvciAlZCBvbiBkdXAiLGZkMikpOwogCQkJbXlfZXJybm89ZXJybm87Cgo9PT0gbW9kaWZp ZWQgZmlsZSAnc3RvcmFnZS9teWlzYW0vbWlfbG9ja2luZy5jJwotLS0gYS9zdG9yYWdlL215aXNh bS9taV9sb2NraW5nLmMJMjAwOC0wNC0wOSAwMTowNzowMCArMDAwMAorKysgYi9zdG9yYWdlL215 aXNhbS9taV9sb2NraW5nLmMJMjAwOC0wNi0xMiAxMToyMDoyOCArMDAwMApAQCAtNDYwLDggKzQ2 MCw4IEBAIGludCBfbWlfd3JpdGVpbmZvKHJlZ2lzdGVyIE1JX0lORk8gKmluZm8KICNpZmRlZiBf X1dJTl9fCiAgICAgICBpZiAobXlpc2FtX2ZsdXNoKQogICAgICAgewotCV9jb21taXQoc2hhcmUt PmtmaWxlKTsKLQlfY29tbWl0KGluZm8tPmRmaWxlKTsKKwlteV9zeW5jKHNoYXJlLT5rZmlsZSww KTsKKwlteV9zeW5jKGluZm8tPmRmaWxlLDApOwogICAgICAgfQogI2VuZGlmCiAgICAgfQoK