From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: =?utf-8?b?RnLDqWTDqXJpYyBCw6lyYXQgPGZiZXJhdEByZWRoYXQuY29tPg==?= To: git-commits@fedoraproject.org Subject: [rpms/glibc] rawhide: Auto-sync with upstream branch master Date: Thu, 24 Sep 2026 11:48:57 GMT Message-ID: <179025053754.1.17577788459617037943.rpms-glibc-52b122b0e8f4@fedoraproject.org> List-ID: X-Git-Repo: rpms/glibc X-Git-Branch: rawhide X-Git-Rev: 52b122b0e8f460dc6c7fce7959d4bdc24f674588 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvZ2xpYmMKICAgICAgICAgICAgQnJhbmNoIDogcmF3aGlkZQogICAgICAgICAg ICBDb21taXQgOiA1MmIxMjJiMGU4ZjQ2MGRjNmM3ZmNlNzk1OWQ0YmRjMjRmNjc0NTg4CiAgICAg ICAgICAgIEF1dGhvciA6IEZyw6lkw6lyaWMgQsOpcmF0IDxmYmVyYXRAcmVkaGF0LmNvbT4KICAg ICAgICAgICAgRGF0ZSAgIDogMjAyNi0wOS0yNFQxMToxMDoyMyswMjowMAogICAgICAgICAgICBT dGF0cyAgOiArMTE2Ly0xMDgxNyBpbiA0IGZpbGUocykKICAgICAgICAgICAgVVJMICAgIDogaHR0 cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9nbGliYy9jLzUyYjEyMmIwZThmNDYwZGM2 YzdmY2U3OTU5ZDRiZGMyNGY2NzQ1ODg/YnJhbmNoPXJhd2hpZGUKCiAgICAgICAgICAgIExvZzoK ICAgICAgICAgICAgQXV0by1zeW5jIHdpdGggdXBzdHJlYW0gYnJhbmNoIG1hc3RlcgoKVXBzdHJl YW0gY29tbWl0OiAwNGEzOTk1NjUwZWMxODFlOThiNzY4ZmVmNTlmMWFkMjI4YTg3YmU1CgotIGFk dmlzb3JpZXM6IGZpeCB0YWcgZm9yIENWRSBpbiBTQS0yMDI2LTAwMjMgKFJvbGYgRWlrZSBCZWVy KQotIFVwZGF0ZSBDVlNTdjMuMSBzY29yZSBmb3IgR0xJQkMtU0EtMjAyNi0wMDIyIChDYXJsb3Mg TydEb25lbGwpCi0gUHVibGlzaCBDVkUtMjAyNi05NTgxOCBhZHZpc29yeSAoQ2FybG9zIE8nRG9u ZWxsKQotIFB1Ymxpc2ggQ1ZFLTIwMjYtODY4MDUgYWR2aXNvcnkgKENhcmxvcyBPJ0RvbmVsbCkK LSBlbGY6IEZpeCBsZC5zbyBTSUdTRUdWIGluIHRyYWNlIG1vZGUgd2l0aCB1bnJlc29sdmVkIFRM UyBzeW1ib2xzIChCWiAzNDUzMikgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKLSBucHRsOiBSZXRyeSBT SUdTRVRYSUQgZGVsaXZlcnkgb24gRUFHQUlOIGluIHNldHhpZCAoYnVnIDIxMTA4KSAoQWRoZW1l cnZhbCBaYW5lbGxhKQotIG1hdGg6IFN5bmMgdGdhbW1hIHdpdGggQ09SRS1NQVRIIChBZGhlbWVy dmFsIFphbmVsbGEpCi0gbWF0aDogU3luYyBleHAxMG0xZiB3aXRoIENPUkUtTUFUSCAoQWRoZW1l cnZhbCBaYW5lbGxhKQotIG1hdGg6IFN5bmMgYWNvc2Ygd2l0aCBDT1JFLU1BVEggKEFkaGVtZXJ2 YWwgWmFuZWxsYSkKLSBtYXRoOiBTeW5jIGxnYW1tYSB3aXRoIENPUkUtTUFUSCAoQWRoZW1lcnZh bCBaYW5lbGxhKQotIEZpeCBkX3RfZm10IGFuZCBkYXRlX2ZtdCBpbiBlbl9TRSBbQlogIzM0NjM1 XSAoTWlrZSBGQUJJQU4pCi0gc3RkbGliOiBEb24ndCBjYWxsIGNsZWFyZW52IGZyb20gX19saWJj X3NldGVudl9mcmVlbWVtIChNYXJrIFdpZWxhYXJkKQotIFB1Ymxpc2ggQ1ZFLTIwMjYtODY3NCBh ZHZpc29yeSAoQWRoZW1lcnZhbCBaYW5lbGxhKQotIG1hbGxvYzogSW1wcm92ZSBjYWxsb2MgW0Ja ICMzNDU4Ml0gKFdpbGNvIERpamtzdHJhKQotIHg4Ni02NDogTGluayB0c3Qtc2hzdGstbGVnYWN5 LTF7ZixnfSB3aXRoIC1XbCwtLW5vLWFzLW5lZWRlZCAoSC5KLiBMdSkKLSBSZXZlcnQgImxpbnV4 OiBBZGQgX19saWJjX3Byb2NtYXBzX2l0ZXJhdGUiIChBZGhlbWVydmFsIFphbmVsbGEpCi0gUmV2 ZXJ0ICJsaW51eDogVXNlIF9fbGliY19wcm9jbWFwc19pdGVyYXRlIG9uIF9fcmVhZG9ubHlfYXJl YV9mYWxsYmFjayIgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKLSBSZXZlcnQgIm5wdGw6IFVzZSBfX2xp YmNfcHJvY21hcHNfaXRlcmF0ZSBvbiBwdGhyZWFkX2dldGF0dHJfbnAiIChBZGhlbWVydmFsIFph bmVsbGEpCi0gUmV2ZXJ0ICJucHRsOiBGYWxsIGJhY2sgdG8gQVRfRVhFQ0ZOIG9uIF9fcHRocmVh ZF9tYWluX3N0YWNrIHdpdGhvdXQgL3Byb2MiIChBZGhlbWVydmFsIFphbmVsbGEpCi0gUmV2ZXJ0 ICJucHRsOiBBY2NvdW50IGZvciB0aGUgc3RhY2sgZ3VhcmQgZ2FwIG9uIHB0aHJlYWRfZ2V0YXR0 cl9ucCAoQlogMzQ2MzcpIiAoQWRoZW1lcnZhbCBaYW5lbGxhKQotIE1hcmsgc3dhcGNvbnRleHQg cmV0dXJuc190d2ljZSBieSBkZWZhdWx0IFtCWiAjMjMxMzBdIChTdGlhbiBIYWxzZXRoKQotIGxp YmlvOiB2YWxpZGF0ZSB0aGUgd2lkZSB2dGFibGUgdmlhIGEgYm91bmRzLWNoZWNrZWQgaW5kZXgg KEFsZXNzYW5kcm8gU2NoaW5vKQotIHJlc29sdjogRml4IGFzc2VydGlvbiBmYWlsdXJlIG9uIHNl YXJjaCBsaXN0IHRydW5jYXRpb24gW0JaIDMxMDI2LCBDVkUtMjAyNi04Njc0XSAoQWRoZW1lcnZh bCBaYW5lbGxhKQotIG5wdGw6IEFjY291bnQgZm9yIHRoZSBzdGFjayBndWFyZCBnYXAgb24gcHRo cmVhZF9nZXRhdHRyX25wIChCWiAzNDYzNykgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKLSBucHRsOiBG YWxsIGJhY2sgdG8gQVRfRVhFQ0ZOIG9uIF9fcHRocmVhZF9tYWluX3N0YWNrIHdpdGhvdXQgL3By b2MgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKLSBucHRsOiBVc2UgX19saWJjX3Byb2NtYXBzX2l0ZXJh dGUgb24gcHRocmVhZF9nZXRhdHRyX25wIChBZGhlbWVydmFsIFphbmVsbGEpCi0gbGludXg6IFVz ZSBfX2xpYmNfcHJvY21hcHNfaXRlcmF0ZSBvbiBfX3JlYWRvbmx5X2FyZWFfZmFsbGJhY2sgKEFk aGVtZXJ2YWwgWmFuZWxsYSkKLSBsaW51eDogQWRkIF9fbGliY19wcm9jbWFwc19pdGVyYXRlIChB ZGhlbWVydmFsIFphbmVsbGEpCi0gbGludXg6IEFkZCBidWZmZXIgYXJndW1lbnQgYW5kIGxpbmUg dHJ1bmNhdGlvbiB0byBfX2xpYmNfcHJvY3V0aWxzX3JlYWRfZmlsZSAoQWRoZW1lcnZhbCBaYW5l bGxhKQotIFB1Ymxpc2ggQ1ZFLTIwMjYtODA0ODkgYWR2aXNvcnkgKENhcmxvcyBPJ0RvbmVsbCkK LSBQdWJsaXNoIENWRS0yMDI2LTc3MTE3IGFkdmlzb3J5IChDYXJsb3MgTydEb25lbGwpCi0gUHVi bGlzaCBDVkUtMjAyNi0xOTU0MiBhZHZpc29yeSAoQWRoZW1lcnZhbCBaYW5lbGxhKQotIFB1Ymxp c2ggQ1ZFLTIwMjYtMTk0OTkgYWR2aXNvcnkgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKLSBtYXRoOiBV cGRhdGUgdGFuaCBmcm9tIENPUkUtTUFUSCAocmV2aXNpb24gZGJkMzc3YTkpIChBZGhlbWVydmFs IFphbmVsbGEpCi0gaW86IFJlamVjdCBhbiBlbXB0eSBwYXRoIGxpc3Qgb24gZnRzX29wZW4gW0Ja ICMyNTQzNF0gW0JaICMzNDYxMF0gKEFkaGVtZXJ2YWwgWmFuZWxsYSkKLSBtYWxsb2M6IFJlamVj dCB0aGUgdG9wIGNodW5rIGluIG1lbTJjaHVua19jaGVjayAoTWFnbnVzIExpbmRob2xtKQotIGFh cmNoNjQ6IEFkZCBNVEUgbW9kZSB0dW5hYmxlIChZdXJ5IEtocnVzdGFsZXYpCi0gZWxmOiBEbyBu b3QgbG9hZCBjYWNoZSBleHRlbnNpb25zIGZyb20gYW4gb2xkLWZvcm1hdCBsZC5zby5jYWNoZSBb QlogIzM0NjAwXSAoU2hhbWlsIEFiZHVsYWV2KQotIFB1Ymxpc2ggQ1ZFLTIwMjYtODkwOTIgYWR2 aXNvcnkgKFNpZGRoZXNoIFBveWFyZWthcikKLSB4ODY6IFNldCBBVlgxMCBhY3RpdmUgb25seSBp ZiBYTU0vWU1NL1pNTSBhcmUgc3VwcG9ydGVkIChILkouIEx1KQotIHRpbWU6IGhhbmRsZSBeIGFu ZCAjIG1vZGlmaWVycyB3aXRoICVaIGluIHdjc2Z0aW1lIChidWcgMzQ2MTEpIChBbmRyZWFzIFNj aHdhYikKLSB4ODY6IERldGVjdCBBUFhfTkNJX05ERF9ORiAoSC5KLiBMdSkKLSBtYXRoOiBsZXQg YXJjaGl0ZWN0dXJlcyBzaWduYWwgdW5kZXJmbG93IGFmdGVyIG5hcnJvd2luZyAoTWF0dCBUdXJu ZXIpCi0gbG9jYWxlOiBmaXggbWVtb3J5IGxlYWtzIGluIHdyaXRlX2xvY2FsZXMgYW5kIHdyaXRl X2NoYXJtYXBzIChSdXNsYW4gVmFsaXlldikKLSBtYXRoOiBTZXQgZXJybm8gdG8gRVJBTkdFIGZv ciBsb2diICgrLTApIFtCWiAjNjc5M10gKFNoYW1pbCBBYmR1bGFldikKLSBhbHBoYTogVXNlIGEg Y29tZGF0IGdyb3VwIGZvciB0aGUgc2hhcmVkIGRpdmlkZS1ieS16ZXJvIGhhbmRsZXIgW0JaICMy MDU0M10gKE1hdHQgVHVybmVyKQotIG5wdGw6IFNraXAgcHJldHR5LXByaW50ZXIgdGVzdHMgd2l0 aG91dCBweXRob24zIFtCWiAjMzQ1MDddIChIZW1hbnRoIEt1bWFyIE0gRCkKLSBSZWNvcmQgQ1ZF LTIwMjYtMTgzNzQgZml4IChGbG9yaWFuIFdlaW1lcikKLSBsaWJpbzogQWRkIHRlc3QgZm9yIGZv cGVuIHdpdGggYW4gZW1wdHkgIiwgY2NzPSIgdmFsdWUgW0JaICMzNDU3NF0gKFNoYW1pbCBBYmR1 bGFldikKLSBsaWJpbzogRml4IENWRS0yMDI2LTE4Mzc0IGhlYXAgYnVmZmVyIG92ZXJmbG93IGlu IGNjcz0gaGFuZGxpbmcgKERvbmdreXVuIFNvbikKLSBnZXRydXNhZ2U6IEFkZCBzbW9rZSB0ZXN0 IGZvciBnZXRydXNhZ2UgKE9uZHJlaiBNYXJlaykKLSBwb3dlcnBjOiBSZXN0b3JlIE5VTEwgY2hl Y2sgb24gX3J0bGRfZ2xvYmFsX3JvIGluIElOSVRfQVJDSCBbQlogIzM0NTAzXSAoTWljaGFlbCBQ ZmVpZnJvdGgpCi0gc3RkaW8tY29tbW9uOiBTa2lwIHRoZSBhIGFuZCBBIGNvbnZlcnNpb25zIGZv ciB0aGUgSUJNIGV4dGVuZGVkIGZvcm1hdCAoTWF0dCBUdXJuZXIpCi0gc3RkaW8tY29tbW9uOiBI YW5kbGUgc3Vibm9ybWFsIHZhbHVlcyBpbiB0aGUgcHJpbnRmIGZvcm1hdCB0ZXN0cyAoTWF0dCBU dXJuZXIpCi0gc3RkaW8tY29tbW9uOiBBZGQgcHJpbnRmIGZvcm1hdCB0ZXN0cyBmb3IgdGhlIGEg YW5kIEEgY29udmVyc2lvbnMgKE1hdHQgVHVybmVyKQotIHN0ZGlvLWNvbW1vbjogQWRkIHByaW50 ZiBmb3JtYXQgdGVzdHMgZm9yIHRoZSBiIGFuZCBCIGNvbnZlcnNpb25zIChNYXR0IFR1cm5lcikK LSBzdGRpby1jb21tb246IFZlcmlmeSBwcmludGYgZm9ybWF0IHRlc3RzIHdpdGggUHl0aG9uIHJh dGhlciB0aGFuIEFXSyAoTWF0dCBUdXJuZXIpCi0gaHVyZDogTWFrZSBfX2ZpbGVfbmFtZV9sb29r dXBfYXQgYXBwbHkgdXBtYXNrIGZvciBPX1RNUEZJTEUgKEJaIDM0NDkzKSAoU2FtdWVsIFRoaWJh dWx0KQotIGh1cmQ6IE1ha2UgcmVhZGxpbmthdCBjaGVjayBib2d1cyBsZW5ndGggcmV0dXJuZWQg YnkgdHJhbnNsYXRvciAoQlogMzQ1MDQpIChTYW11ZWwgVGhpYmF1bHQpCi0gaHVyZDogRml4IHNl dHJldWlkL3NldHJlZ2lkIHNldHRpbmcgc2F2ZWQgSUQgdG8gbmV3IGVmZmVjdGl2ZSBJRCAoQlog MzQ1MDUpIChTYW11ZWwgVGhpYmF1bHQpCi0gc3RkbGliLCB3Y3NtYnM6IEFkZCBtaXNzaW5nIF9f bm9ubnVsbCB0byBzdHJ0byovd2NzdG8qIFtCWiAjMzMwNTNdIChTaGFtaWwgQWJkdWxhZXYpCi0g ZWxmOiBPcGVuIHRoZSBub3JtYWxpemVkICRPUklHSU4gcnBhdGggaW4gQVRfU0VDVVJFIHByb2dy YW1zIChCWiAzNDM2MCkgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKLSB0ZXN0OiBGaXggdHN0LXBlcnNv bmFsaXR5IChZdXJ5IEtocnVzdGFsZXYpCi0gbWFudWFsOiBhZGp1c3QgcmVmZXJlbmNlIHRvIG1h bi1wYWdlcyBmb2xsb3dpbmcgcHJvYyg1KSBzcGxpdC11cCAoQ29sbGluIEZ1bmspCi0gVXBkYXRl cyB1ZHAuaCBmcm9tIExpbnV4IDYuMTkgdG8gbmV0aW5ldC91ZHAuaCAoSmlheXVhbiBDaGVuKQot IG5wdGw6IFRlc3QgY2FzZSBmb3IgYnVnIDM0NTQ2IChGbG9yaWFuIFdlaW1lcikKLSBucHRsOiBV c2UgRkFJTF9VTlNVUFBPUlRFRCBpbiBpbml0X3RwcF90ZXN0IGluIHRzdC10cHAuaCAoRmxvcmlh biBXZWltZXIpCi0gbnB0bDogUmV2ZXJ0IFRQUCB1cGRhdGVzIG9uIHB0aHJlYWRfbXV0ZXhfKmxv Y2sgZmFpbHVyZSAoYnVnIDM0NTQ2KSAoRmxvcmlhbiBXZWltZXIpCi0gbnB0bDogRml4IHRlc3Qg ZXJyb3IgcmVwb3J0aW5nIGluIENIRUNLX1RQUF9QUklPUklUWSBpbiB0c3QtdHBwLmggKEZsb3Jp YW4gV2VpbWVyKQotIG5wdGw6IFJldmVydCByb2J1c3QgbGlzdCBoZWFkIG9uIHB0aHJlYWRfbXV0 ZXhfdGltZWRsb2NrIGZhaWx1cmUgKGJ1ZyAzNDU0MikgKEZsb3JpYW4gV2VpbWVyKQotIG5wdGw6 IFRyZWF0IG5lZ2F0aXZlIHRpbWVzIGFzIHRpbWVkIG91dCBpbiBQSSBmdXRleCBsb2NraW5nIChi dWcgMzQ1NDMpIChGbG9yaWFuIFdlaW1lcikKLSBzdGRpby1jb21tb246IEtlZXAgdHJhaWxpbmcg emVyb3Mgd2hlcmUgJSNnIHJvdW5kcyBpbnRvIGEgbmV3IGRlY2FkZSAoQlogMzQ1NzgpIChNYXR0 IFR1cm5lcikKLSBzdGRpby1jb21tb246IEl0ZXJhdGUgb3ZlciB0aGUgaHVnZSB3aWR0aCBmb3Ig b25lIHByaW50ZiBmdW5jdGlvbiBvbmx5IChNYXR0IFR1cm5lcikKLSBlbGY6IFJlbW92ZSBkZWFk IGxfbmVlZF90bHNfaW5pdCBzdGF0aWMtVExTIGluaXQgcGF0aCAoQWRoZW1lcnZhbCBaYW5lbGxh KQotIGVsZjogUmVtb3ZlIF9fY2hrX2ZhaWwgZnJvbSBkbC1taW5pbWFsLmMgKEFkaGVtZXJ2YWwg WmFuZWxsYSkKLSBlbGY6IEFsbG93IFJQQVRIL1JVTlBBVEggZm9yIHN0YXRpYy1waWUgKEJaIDMz MzI2KSAoQWRoZW1lcnZhbCBaYW5lbGxhKQotIEZpeCBhc3NlcnQgZHVyaW5nIHN0YXRpYyBzdGFy dHVwIChCWiAzMzMyNikgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKLSBVc2UgX2RsX3dyaXRldiBvbiBf X2xpYmNfbWVzc2FnZV9pbXBsIChBZGhlbWVydmFsIFphbmVsbGEpCi0gbnB0bDogQWRkIF9fcmFp c2VfZGlyZWN0IChBZGhlbWVydmFsIFphbmVsbGEpCi0gdHN0LWJhY2t0cmFjZTU6IHNwbGl0IGxv bmcgbGluZSAoU2FtdWVsIFRoaWJhdWx0KQotIHRzdC1iYWNrdHJhY2U1OiBGaXggb24gaHVyZCAo U2FtdWVsIFRoaWJhdWx0KQotIGZjbnRsOiBkcm9wIG5vbm51bGwgYXR0cmlidXRlIGZvciBvcGVu YXQsIG9wZW5hdDIncyBwYXRoIGFyZ3VtZW50IFtCWiAjMzQzMTNdIChTYW0gSmFtZXMpCi0gaW86 IGRyb3Agbm9ubnVsbCBhdHRyaWJ1dGUgZm9yIGZjaG1vZGF0LCBmYWNjZXNzYXQsIGZjaG93bmF0 J3MgcGF0aCBhcmd1bWVudCBbQlogIzM0MzEzXSAoU2FtIEphbWVzKQotIGh1cmQ6IE1vdmUgU0lO R0xFX1RIUkVBRF9QIC8gUlRMRF9TSU5HTEVfVEhSRUFEX1AgdG8gc2luZ2xlLXRocmVhZC5oIChT YW11ZWwgVGhpYmF1bHQpCi0gc3RkbGliOiBtZXJnZSBzb21lIHRlc3RzIGZyb20gZ251bGliIChD b2xsaW4gRnVuaykKLSBucHRsOiBQcm9wYWdhdGUgRURFQURMSyBmcm9tIEZVVEVYX0xPQ0tfUEkg Zm9yIGVycnJvci1jaGVja2luZyBtdXRleGVzIChNb3JpdHogS2xhbW1sZXIpCi0gYWR2aXNvcmll czogZml4IHR5cG8gaW4gUkVBRE1FIChSb2xmIEVpa2UgQmVlcikKLSBVc2UgX19hdHRyaWJ1dGVf b3B0aW1pemF0aW9uX2JhcnJpZXJfXyBmb3IgdGhlIHJlbWFpbmluZyBub2Nsb25lIHVzZXJzIChN YXR0IFR1cm5lcikKLSBpbzogRG8gbm90IGFsaWFzIGZ0cyBhbmQgZnRzNjQgd2hlbiBpbm9kZSB0 eXBlcyBkaWZmZXIgKE1hZ251cyBMaW5kaG9sbSkKLSBVc2UgRkFJTF9VTlNVUFBPUlRFRCBtb3Jl IChTYW0gSmFtZXMpCi0gaWNvbnZkYXRhOiBUZXN0IGNhc2UgZm9yIGJ1ZyAzNDU1NiwgYnVnIDM0 NTY4IChGbG9yaWFuIFdlaW1lcikKLSBpY29udmRhdGE6IEVVQ19KSVNYMDIxMyBkZWNvZGluZyBs YWNrcyBwZW5kaW5nIGNoYXJhY3RlciByZXNldCAoQ1ZFLTIwMjYtODA0ODkpIChGbG9yaWFuIFdl aW1lcikKLSBpY29udmRhdGE6IFNISUZUX0pJU1gwMjEzIGRlY29kaW5nIGxhY2tzIHBlbmRpbmcg Y2hhcmFjdGVyIHJlc2V0IChDVkUtMjAyNi03NzExNykgKEZsb3JpYW4gV2VpbWVyKQotIGxvY2Fs ZWRhdGE6IGJuX0JELCBibl9JTjogdXNlIGZ1bGwgR3JlZ29yaWFuIG1vbnRoIG5hbWVzIGZvciBh Ym1vbiAoQXpoYXJ1bCBIYXF1ZSkKLSBtYW51YWw6IEZpeCBzb21lIHR5cG9zIGluIHRoZSBMb3ct TGV2ZWwgSW5wdXQvT3V0cHV0IGNoYXB0ZXIgKENvbGxpbiBGdW5rKQotIHg4NjogVXBkYXRlIEFW WDEwIHN1cHBvcnQgKEguSi4gTHUpCi0gRG9jdW1lbnQgQ1ZFLTIwMjYtMTgzNzQgYW5kIG5ldyBD VlNTIHRhZyAoU2lkZGhlc2ggUG95YXJla2FyKQotIGFhcmNoNjQ6IEFkZCBtZW1vcnkgY2xvYmJl ciB0byBwa2V5X3dyaXRlIChZdXJ5IEtocnVzdGFsZXYpCi0gc3RkbGliOiBGaXggcmlnaHQtanVz dGlmaWNhdGlvbiBpbiBzdHJmbW9uIChidWcgMzQ1MTAsIENWRS0yMDI2LTE5NDk5KSAoRmxvcmlh biBXZWltZXIpCi0gaHVyZDogU2V0IF9USU1FX0JJVFM9MzIgZm9yIGluc3RhbGxlZCBwcm9ncmFt cyBvbiBpMzg2L0h1cmQgKFNhbXVlbCBUaGliYXVsdCkKLSBBZGQgY2hlY2stc3ltYm9sLXZlcnNp b24uYXdrIChILkouIEx1KQotIExvb25nQXJjaDogQWRkIHN0YW5kYXJkIHNlYXJjaCBwYXRocyBm b3IgMzItYml0IChtZW5ncWluZ2dhbmcpCi0gTG9vbmdBcmNoOiBTdXBwb3J0IHBvaW50ZXIgZ3Vh cmQgb24gTG9vbmdBcmNoMzIgKG1lbmdxaW5nZ2FuZykKLSBodXJkOiBXYXJuIGFib3V0IHNldHRp bmcgX1RJTUVfQklUUz02NCBvbiBpMzg2IEdOVSBIdXJkIChTYW11ZWwgVGhpYmF1bHQpCi0gbWF0 aDogVXBkYXRlIHRhbmggZnJvbSBDT1JFLU1BVEggKHJldmlzaW9uIGJiMzllNGZhKSAoQWRoZW1l cnZhbCBaYW5lbGxhKQotIHRlc3RzOiBlbGY6IEZpeCBmbGFreSB0aHAgdGVzdHMgKFl1cnkgS2hy dXN0YWxldikKClJlbW92ZSBwYXRjaGVzIGFscmVhZHkgYXBwbGllZCB1cHN0cmVhbToKLSBnbGli Yy1yaDI0NTcxODMtMS5wYXRjaAotIGdsaWJjLXJoMjQ1NzE4My0yLnBhdGNoCgotLS0KZGlmZiAt LWdpdCBhL2dsaWJjLXJoMjQ1NzE4My0xLnBhdGNoIGIvZ2xpYmMtcmgyNDU3MTgzLTEucGF0Y2gK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMzhkNzEuLjAwMDAwMDAKLS0tIGEvZ2xp YmMtcmgyNDU3MTgzLTEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NTkwICswLDAgQEAKLVJl dmVydCAiaW86IENvbnNvbGlkYXRlIGZ0cyBpbXBsZW1lbnRhdGlvbiIKLQotVGhpcyByZXZlcnRz IGNvbW1pdCBiOWEyZGVhNTRhYmQxYzVkYjk3NzNhOTJjOTdkZDMyMDJiYmFlYzYyLgotCi1SZWFz b24gZm9yIHJldmVydDogVGhpcyBjaGFuZ2UgYnJlYWtzIGRyYWN1dCBkdWUgdG8gdGhlIHdheSBp dCB1c2VzCi1mdHM6IDxodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lk PTI0NTcxODM+Ci0KLWRpZmYgLS1naXQgYS9TSEFSRUQtRklMRVMgYi9TSEFSRUQtRklMRVMKLWlu ZGV4IDY0NTA0MGQ3ZTEwYzE5MjcuLjEyNmFhZjA5NmQ5MzM3MWMgMTAwNjQ0Ci0tLS0gYS9TSEFS RUQtRklMRVMKLSsrKyBiL1NIQVJFRC1GSUxFUwotQEAgLTQ5LDcgKzQ5LDcgQEAgZ251bGliOgot ICAgaW8vY3ljbGUtY2hlY2suaAotICAgaW8vZGV2LWluby5oCi0gICBpby9mdHMtY3ljbGUuYwot LSAgaW8vZnRzLWNvbW1vbi5jCi0rICBpby9mdHMuYwotICAgaW8vaS1yaW5nLmMKLSAgIGlvL3Nh bWUtaW5vZGUuaAotICAgbG9jYWxlL3Byb2dyYW1zLzNsZXZlbC5oCi1kaWZmIC0tZ2l0IGEvaW8v ZnRzLWNvbW1vbi5jIGIvaW8vZnRzLWNvbW1vbi5jCi1kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK LWluZGV4IDM4MjVmMGFlYjRlYjE1OTQuLjAwMDAwMDAwMDAwMDAwMDAKLS0tLSBhL2lvL2Z0cy1j b21tb24uYwotKysrIC9kZXYvbnVsbAotQEAgLTEsMjIwOCArMCwwIEBACi0tLyogVHJhdmVyc2Ug YSBmaWxlIGhpZXJhcmNoeS4KLS0KLS0gICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyNiBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLS0KLS0gICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2Fy ZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotLSAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0tICAg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIuMSBvZiB0aGUKLS0gICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgotLQotLSAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotLSAgIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotLQotLSAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQotLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHBz Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0tCi0tLyotCi0tICogQ29weXJpZ2h0IChj KSAxOTkwLCAxOTkzLCAxOTk0Ci0tICogICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS0gKgotLSAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotLSAqIGFyZSBtZXQ6Ci0tICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS0gKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu Ci0tICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLS0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0tICogICAgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K LS0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMg b2YgaXRzIGNvbnRyaWJ1dG9ycwotLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLSAqICAgIHdpdGhvdXQg c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLSAqCi0tICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E Ci0tICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCi0tICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS0gKiBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUKLS0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0tICogT1Ig U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0tICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS0gKiBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0t ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRgotLSAqIFNVQ0ggREFNQUdFLgotLSAqLwotLQotLSNpbmNsdWRlIDxj b25maWcuaD4KLS0KLS0jaWYgZGVmaW5lZCBMSUJDX1NDQ1MgJiYgIWRlZmluZWQgR0NDX0xJTlQg JiYgIWRlZmluZWQgbGludAotLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmdHMuYyAgICAg ICA4LjYgKEJlcmtlbGV5KSA4LzE0Lzk0IjsKLS0jZW5kaWYKLS0KLS0jaWYgX0xJQkMKLS0jIGlu Y2x1ZGUgPGZ0cy5oPgotLSNlbHNlCi0tIyBpbmNsdWRlICJmdHNfLmgiCi0tI2VuZGlmCi0tI2lm IF9MSUJDIHx8IEhBVkVfU1lTX1BBUkFNX0gKLS0jIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgotLSNl bmRpZgotLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotLSNpbmNsdWRlIDxmY250bC5oPgotLSNpbmNs dWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxzdGRkZWYuaD4KLS0jaW5jbHVkZSA8c3RkaW50Lmg+ Ci0tI2luY2x1ZGUgPHN0ZGxpYi5oPgotLSNpbmNsdWRlIDxzdHJpbmcuaD4KLS0jaW5jbHVkZSA8 dW5pc3RkLmg+Ci0tCi0tLyogU3VwcG9ydCBmb3IgdGhlIExGUyBBUEkgdmVyc2lvbi4gICovCi0t I2lmbmRlZiBGVFNfT1BFTgotLSMgZGVmaW5lIEZUU19PUEVOIGZ0c19vcGVuCi0tIyBkZWZpbmUg RlRTX0NMT1NFIGZ0c19jbG9zZQotLSMgZGVmaW5lIEZUU19SRUFEIGZ0c19yZWFkCi0tIyBkZWZp bmUgRlRTX1NFVCBmdHNfc2V0Ci0tIyBkZWZpbmUgRlRTX0NISUxEUkVOIGZ0c19jaGlsZHJlbgot LSMgZGVmaW5lIEZUU09CSiBGVFMKLS0jIGRlZmluZSBGVFNFTlRSWSBGVFNFTlQKLS0jIGRlZmlu ZSBJTk9fVCBpbm9fdAotLSMgZGVmaW5lIFNUUlVDVF9TVEFUIHN0YXQKLS0jIGRlZmluZSBGU1RB VCBfX2ZzdGF0Ci0tIyBkZWZpbmUgRlNUQVRBVCBfX2ZzdGF0YXQKLS0jIGRlZmluZSBTVFJVQ1Rf U1RBVEZTIHN0YXRmcwotLSMgZGVmaW5lIEZTVEFURlMgX19mc3RhdGZzCi0tI2VuZGlmCi0tCi0t I2lmICEgX0xJQkMKLS0jIGluY2x1ZGUgImF0dHJpYnV0ZS5oIgotLSMgaW5jbHVkZSAiZmNudGwt LS5oIgotLSMgaW5jbHVkZSAib3BlbmF0LmgiCi0tIyBpbmNsdWRlICJvcGVuZGlyYXQuaCIKLS0j IGluY2x1ZGUgInNhbWUtaW5vZGUuaCIKLS0jIGRlZmluZSBPUEVORElSQVQgb3BlbmRpcmF0Ci0t IyBkZWZpbmUgRlRTRU5UX1dSQVBQRVIoX19wKSBfX3AKLS0jIGRlZmluZSBGVFNfQ09NUEFSX0NB U1QoX19mbikgX19mbgotLSNlbHNlCi0tIyBpbmNsdWRlIDxzdGRib29sLmg+Ci0tCi0tIyBkZWZp bmUgaW50ZXJuYWxfZnVuY3Rpb24KLS0jIGRlZmluZSBGQUxMVEhST1VHSCAgICAgICAgICAgICAg IDsgW1tmYWxsdGhyb3VnaF1dCi0tIyBkZWZpbmUgSEFWRV9TVFJVQ1RfRElSRU5UX0RfVFlQRSAx Ci0tIyBkZWZpbmUgR05VTElCX0ZUU19ERUJVRyAgICAgICAgICAwCi0tIyBpZmRlZiBPX1BBVEgK LS0jICBkZWZpbmUgT19TRUFSQ0ggICAgICAgICAgICAgICAgIE9fUEFUSAotLSMgZWxzZQotLSMg IGRlZmluZSBPX1NFQVJDSCAgICAgICAgICAgICAgICAgT19SRE9OTFkKLS0jIGVuZGlmCi0tIyBk ZWZpbmUgSEFWRV9TWVNfVkZTX0ggICAgICAgICAgICAxCi0tIyBkZWZpbmUgSEFWRV9GU1RBVEZT ICAgICAgICAgICAgICAxCi0tIyBkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfVFlQRSAxCi0t IyBkZWZpbmUgSEFWRV9PUEVOQVQgICAgICAgICAgICAgICAxCi0tIyBkZWZpbmUgSEFWRV9XT1JL SU5HX09fTk9GT0xMT1cgICAxCi0tIyBkZWZpbmUgX0dMX0NNUChhLCBiKSAgICAgICAgICAgICAo KGEpIDwgKGIpID8gLTEgOiAoYSkgPiAoYikpCi0tIyBkZWZpbmUgT1BFTkRJUkFUICAgICAgICAg ICAgICAgICBfX29wZW5kaXJhdAotLQotLXN0YXRpYyBpbmxpbmUgYm9vbCBvcGVuYXRfbmVlZHNf ZmNoZGlyICh2b2lkKQotLXsKLS0gIHJldHVybiBmYWxzZTsKLS19Ci0tCi0tc3RhdGljIGlubGlu ZSBib29sIHN0cmVxIChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCi0tewotLSAgcmV0 dXJuIHN0cmNtcCAoczEsIHMyKSA9PSAwOwotLX0KLS0jIGRlZmluZSByZWFsbG9jYXJyYXkgICAg ICAgICAgICAgIF9fbGliY19yZWFsbG9jYXJyYXkKLS0jIGRlZmluZSBmY2hkaXIgICAgICAgICAg ICAgICAgICAgIF9fZmNoZGlyCi0tIyBkZWZpbmUgY2xvc2UgICAgICAgICAgICAgICAgICAgICBf X2Nsb3NlCi0tIyBkZWZpbmUgY2xvc2VkaXIgICAgICAgICAgICAgICAgICBfX2Nsb3NlZGlyCi0t IyBkZWZpbmUgZmNudGwgICAgICAgICAgICAgICAgICAgICBfX2ZjbnRsCi0tIyBkZWZpbmUgcmVh ZGRpciAgICAgICAgICAgICAgICAgICBfX3JlYWRkaXIKLS0jIGlmbmRlZiBkaXJmZAotLSMgIGRl ZmluZSBkaXJmZCAgICAgICAgICAgICAgICAgICAgX19kaXJmZAotLSMgZW5kaWYKLS0jIGRlZmlu ZSBvcGVuICAgICAgICAgICAgICAgICAgICAgIF9fb3BlbgotLSMgZGVmaW5lIG9wZW5hdCAgICAg ICAgICAgICAgICAgICAgX19vcGVuYXQKLS0KLS0jIGluY2x1ZGUgImN5Y2xlLWNoZWNrLmMiCi0t IyBpbmNsdWRlICJpLXJpbmcuYyIKLS0KLS1zdHJ1Y3QgRlRTRU5UX3dyYXBwZXIKLS17Ci0tICBG VFNPQkogKmZ0c19mdHM7ICAgICAgICAgICAgICAgIC8qIHRoZSBmaWxlIGhpZXJhcmNoeSBpdHNl bGYgKi8KLS0gIERJUiAqZnRzX2RpcnA7ICAgICAgICAgICAgICAgICAgLyogRGlyIHBvaW50ZXIg Zm9yIGFueSBkaXJlY3RvcnkgY29udGFpbmluZwotLQkJCQkgICAgIG1vcmUgZW50cmllcyB0aGFu IHdlIHJlYWQgYXQgb25lIHRpbWUuICAqLwotLSAgc3RydWN0IFNUUlVDVF9TVEFUIGZ0c19zdGF0 OwotLQotLSAgRlRTRU5UUlkgZW50OwotLX07Ci0tCi0tLyogZ2xpYmMgaGlzdG9yaWNhbHkgZGVm aW5lcyB0aGUgRlRTOjpmdHNfY29tcGFyIGFzIGhhdmluZyAndm9pZCAqJywgd2hpbGUgdGhlCi0t ICAgZnRzX29wZW4gaGFzIGEgZnVuY3Rpb24gcG9pbnQgdXNpbmcgJ0ZUU0VOVCAqKicgYXMgYXJn dW1lbnQuICAqLwotLSMgZGVmaW5lIEZUU19DT01QQVJfQ0FTVChfX2ZuKSAoKGludCAoKikgKHZv aWQgY29uc3QgKiwgdm9pZCBjb25zdCAqKSlfX2ZuKQotLQotLSMgZGVmaW5lIEZUU0VOVF9XUkFQ UEVSKHApIFwKLS0gICAgKChzdHJ1Y3QgRlRTRU5UX3dyYXBwZXIgKikgKChjaGFyICopKHApIC0g b2Zmc2V0b2Yoc3RydWN0IEZUU0VOVF93cmFwcGVyLCBlbnQpKSkKLS0jZW5kaWYKLS0jZGVmaW5l IEZUU0VOVF9GVFMocCkgICAoRlRTRU5UX1dSQVBQRVIocCktPmZ0c19mdHMpCi0tI2RlZmluZSBG VFNFTlRfRElSUChwKSAgKEZUU0VOVF9XUkFQUEVSKHApLT5mdHNfZGlycCkKLS0KLS0jaW5jbHVk ZSAiZmxleG1lbWJlci5oIgotLQotLSNpbmNsdWRlIDxkaXJlbnQuaD4KLS0jaWZuZGVmIF9EX0VY QUNUX05BTUxFTgotLSMgZGVmaW5lIF9EX0VYQUNUX05BTUxFTihkaXJlbnQpIHN0cmxlbiAoKGRp cmVudCktPmRfbmFtZSkKLS0jZW5kaWYKLS0KLS0jaWYgSEFWRV9TVFJVQ1RfRElSRU5UX0RfVFlQ RQotLS8qIFRydWUgaWYgdGhlIHR5cGUgb2YgdGhlIGRpcmVjdG9yeSBlbnRyeSBEIGlzIGtub3du LiAgKi8KLS0jIGRlZmluZSBEVF9JU19LTk9XTihkKSAoKGQpLT5kX3R5cGUgIT0gRFRfVU5LTk9X TikKLS0vKiBUcnVlIGlmIHRoZSB0eXBlIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkgRCBtdXN0IGJl IFQuICAqLwotLSMgZGVmaW5lIERUX01VU1RfQkUoZCwgdCkgKChkKS0+ZF90eXBlID09ICh0KSkK LS0jIGRlZmluZSBEX1RZUEUoZCkgKChkKS0+ZF90eXBlKQotLSNlbHNlCi0tIyBkZWZpbmUgRFRf SVNfS05PV04oZCkgZmFsc2UKLS0jIGRlZmluZSBEVF9NVVNUX0JFKGQsIHQpIGZhbHNlCi0tIyBk ZWZpbmUgRF9UWVBFKGQpIERUX1VOS05PV04KLS0KLS0jIHVuZGVmIERUX1VOS05PV04KLS0jIGRl ZmluZSBEVF9VTktOT1dOIDAKLS0KLS0vKiBBbnkgbm9uemVybyB2YWx1ZXMgd2lsbCBkbyBoZXJl LCBzbyBsb25nIGFzIHRoZXkncmUgZGlzdGluY3QuCi0tICAgVW5kZWYgYW55IGV4aXN0aW5nIG1h Y3JvcyBvdXQgb2YgdGhlIHdheS4gICovCi0tIyB1bmRlZiBEVF9CTEsKLS0jIHVuZGVmIERUX0NI UgotLSMgdW5kZWYgRFRfRElSCi0tIyB1bmRlZiBEVF9GSUZPCi0tIyB1bmRlZiBEVF9MTksKLS0j IHVuZGVmIERUX1JFRwotLSMgdW5kZWYgRFRfU09DSwotLSMgZGVmaW5lIERUX0JMSyAxCi0tIyBk ZWZpbmUgRFRfQ0hSIDIKLS0jIGRlZmluZSBEVF9ESVIgMwotLSMgZGVmaW5lIERUX0ZJRk8gNAot LSMgZGVmaW5lIERUX0xOSyA1Ci0tIyBkZWZpbmUgRFRfUkVHIDYKLS0jIGRlZmluZSBEVF9TT0NL IDcKLS0jZW5kaWYKLS0KLS0jaWZuZGVmIFNfSUZCTEsKLS0jIGRlZmluZSBTX0lGQkxLIDAKLS0j ZW5kaWYKLS0jaWZuZGVmIFNfSUZMTksKLS0jIGRlZmluZSBTX0lGTE5LIDAKLS0jZW5kaWYKLS0j aWZuZGVmIFNfSUZTT0NLCi0tIyBkZWZpbmUgU19JRlNPQ0sgMAotLSNlbmRpZgotLQotLWVudW0K LS17Ci0tICBOT1RfQU5fSU5PREVfTlVNQkVSID0gMAotLX07Ci0tCi0tI2lmZGVmIERfSU5PX0lO X0RJUkVOVAotLSMgZGVmaW5lIERfSU5PKGRwKSAoZHApLT5kX2lubwotLSNlbHNlCi0tLyogU29t ZSBzeXN0ZW1zIGRvbid0IGhhdmUgaW5vZGVzLCBzbyBmYWtlIHRoZW0gdG8gYXZvaWQgbG90cyBv ZiBpZmRlZnMuICAqLwotLSMgZGVmaW5lIERfSU5PKGRwKSBOT1RfQU5fSU5PREVfTlVNQkVSCi0t I2VuZGlmCi0tCi0tLyogSWYgcG9zc2libGUgKHNlZSBtYXhfZW50cmllcywgYmVsb3cpLCByZWFk IG5vIG1vcmUgdGhhbiB0aGlzIG1hbnkgZGlyZWN0b3J5Ci0tICAgZW50cmllcyBhdCBhIHRpbWUu ICBXaXRob3V0IHRoaXMgbGltaXQgKGkuZS4sIHdoZW4gdXNpbmcgbm9uLU5VTEwKLS0gICBmdHNf Y29tcGFyKSwgcHJvY2Vzc2luZyBhIGRpcmVjdG9yeSB3aXRoIDQsMDAwLDAwMCBlbnRyaWVzIHJl cXVpcmVzIH4xR2lCCi0tICAgb2YgbWVtb3J5LCBhbmQgaGFuZGxpbmcgNjRNIGVudHJpZXMgd291 bGQgcmVxdWlyZSAxNkdpQiBvZiBtZW1vcnkuICAqLwotLSNpZm5kZWYgRlRTX01BWF9SRUFERElS X0VOVFJJRVMKLS0jIGRlZmluZSBGVFNfTUFYX1JFQURESVJfRU5UUklFUyAxMDAwMDAKLS0jZW5k aWYKLS0KLS0vKiBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIHRoaXMgbWFueSBlbnRyaWVzIGluIGEg ZGlyZWN0b3J5LAotLSAgIGFuZCB0aGUgY29uZGl0aW9ucyBtZW50aW9uZWQgYmVsb3cgYXJlIHNh dGlzZmllZCwgdGhlbiBzb3J0Ci0tICAgdGhlIGVudHJpZXMgb24gaW5vZGUgbnVtYmVyIGJlZm9y ZSBhbnkgZnVydGhlciBwcm9jZXNzaW5nLiAgKi8KLS0jaWZuZGVmIEZUU19JTk9ERV9TT1JUX0RJ Ul9FTlRSSUVTX1RIUkVTSE9MRAotLSMgZGVmaW5lIEZUU19JTk9ERV9TT1JUX0RJUl9FTlRSSUVT X1RIUkVTSE9MRCAxMDAwMAotLSNlbmRpZgotLQotLWVudW0KLS17Ci0tICBfRlRTX0lOT0RFX1NP UlRfRElSX0VOVFJJRVNfVEhSRVNIT0xEID0gRlRTX0lOT0RFX1NPUlRfRElSX0VOVFJJRVNfVEhS RVNIT0xECi0tfTsKLS0KLS1lbnVtIEZ0c19zdGF0Ci0tewotLSAgRlRTX05PX1NUQVRfUkVRVUlS RUQgPSAxLAotLSAgRlRTX1NUQVRfUkVRVUlSRUQgPSAyCi0tfTsKLS0KLS0jaWZuZGVmIF9fc2V0 X2Vycm5vCi0tIyBkZWZpbmUgX19zZXRfZXJybm8oVmFsKSBlcnJubyA9IChWYWwpCi0tI2VuZGlm Ci0tCi0tLyogSWYgdGhpcyBob3N0IHByb3ZpZGVzIHRoZSBvcGVuYXQgZnVuY3Rpb24sIHRoZW4g d2UgY2FuIGF2b2lkCi0tICAgYXR0ZW1wdGluZyB0byBvcGVuICIuIiBpbiBzb21lIGluaXRpYWxp emF0aW9uIGNvZGUgYmVsb3cuICAqLwotLSNpZmRlZiBIQVZFX09QRU5BVAotLSMgZGVmaW5lIEhB VkVfT1BFTkFUX1NVUFBPUlQgMQotLSNlbHNlCi0tIyBkZWZpbmUgSEFWRV9PUEVOQVRfU1VQUE9S VCAwCi0tI2VuZGlmCi0tCi0tI2lmZGVmIE5ERUJVRwotLSMgZGVmaW5lIGZ0c19hc3NlcnQoZXhw cikgKCh2b2lkKSAoMCAmJiAoZXhwcikpKQotLSNlbHNlCi0tIyBkZWZpbmUgZnRzX2Fzc2VydChl eHByKSAgICAgICBcCi0tICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAgICAg eyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAgICAgICBpZiAoIShleHByKSkgICAgICAg ICAgICBcCi0tICAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICBcCi0tICAgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0tICAgIHdoaWxlIChmYWxzZSkKLS0jZW5kaWYKLS0KLS1z dGF0aWMgRlRTRU5UUlkgICpmdHNfYWxsb2MgKEZUU09CSiAqLCBjb25zdCBjaGFyICosIHNpemVf dCk7Ci0tc3RhdGljIEZUU0VOVFJZICAqZnRzX2J1aWxkIChGVFNPQkogKiwgaW50KTsKLS1zdGF0 aWMgdm9pZCAgICAgIGZ0c19sZnJlZSAoRlRTRU5UUlkgKik7Ci0tc3RhdGljIHZvaWQgICAgICBm dHNfbG9hZCAoRlRTT0JKICosIEZUU0VOVFJZICopOwotLXN0YXRpYyBzaXplX3QgICAgZnRzX21h eGFyZ2xlbiAoY2hhciAqIGNvbnN0ICopOwotLXN0YXRpYyB2b2lkICAgICAgZnRzX3BhZGp1c3Qg KEZUU09CSiAqLCBGVFNFTlRSWSAqKTsKLS1zdGF0aWMgYm9vbCAgICAgIGZ0c19wYWxsb2MgKEZU U09CSiAqLCBzaXplX3QpOwotLXN0YXRpYyBGVFNFTlRSWSAgKmZ0c19zb3J0IChGVFNPQkogKiwg RlRTRU5UUlkgKiwgc2l6ZV90KTsKLS1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaW50IGZ0c19zdGF0 IChGVFNPQkogKiwgRlRTRU5UUlkgKiwgYm9vbCk7Ci0tc3RhdGljIGludCAgICAgIGZ0c19zYWZl X2NoYW5nZWRpciAoRlRTT0JKICosIEZUU0VOVFJZICosIGludCwgY29uc3QgY2hhciAqKTsKLS0K LS0jaW5jbHVkZSAiZnRzLWN5Y2xlLmMiCi0tCi0tI2lmbmRlZiBNQVgKLS0jIGRlZmluZSBNQVgo YSxiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQotLSNlbmRpZgotLQotLSNpZm5kZWYgU0laRV9N QVgKLS0jIGRlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCi0tI2VuZGlmCi0tCi0tI2RlZmlu ZSBJU0RPVChhKSAgICAgICAgKGFbMF0gPT0gJy4nICYmICghYVsxXSB8fCAoYVsxXSA9PSAnLicg JiYgIWFbMl0pKSkKLS0KLS0jZGVmaW5lIENMUihvcHQpICAgICAgICAoc3AtPmZ0c19vcHRpb25z ICY9IH4ob3B0KSkKLS0jZGVmaW5lIElTU0VUKG9wdCkgICAgICAoKHNwLT5mdHNfb3B0aW9ucyAm IChvcHQpKSAhPSAwKQotLSNkZWZpbmUgU0VUKG9wdCkgICAgICAgIChzcC0+ZnRzX29wdGlvbnMg fD0gKG9wdCkpCi0tCi0tLyogRklYTUU6IEZUU19OT0NIRElSIGlzIG5vdyBtaXNuYW1lZC4KLS0g ICBDYWxsIGl0IEZUU19VU0VfRlVMTF9SRUxBVElWRV9GSUxFX05BTUVTIGluc3RlYWQuICovCi0t I2RlZmluZSBGQ0hESVIoc3AsIGZkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0tICAoIUlTU0VUKEZUU19OT0NIRElSKSAmJiAoSVNTRVQoRlRTX0NXREZEKSAgICAgICAgICAg ICBcCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoY3dkX2FkdmFuY2VfZmQgKChzcCks IChmZCksIHRydWUpLCAwKSBcCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmY2hkaXIg KGZkKSkpCi0tCi0tCi0tLyogZnRzX2J1aWxkIGZsYWdzICovCi0tLyogRklYTUU6IG1ha2UgdGhp cyBhbiBlbnVtICovCi0tI2RlZmluZSBCQ0hJTEQgICAgICAgICAgMSAgICAgICAgICAgICAgIC8q IGZ0c19jaGlsZHJlbiAqLwotLSNkZWZpbmUgQk5BTUVTICAgICAgICAgIDIgICAgICAgICAgICAg ICAvKiBmdHNfY2hpbGRyZW4sIG5hbWVzIG9ubHkgKi8KLS0jZGVmaW5lIEJSRUFEICAgICAgICAg ICAzICAgICAgICAgICAgICAgLyogZnRzX3JlYWQgKi8KLS0KLS0jaWYgR05VTElCX0ZUU19ERUJV RwotLSMgaW5jbHVkZSA8aW50dHlwZXMuaD4KLS0jIGluY2x1ZGUgPHN0ZGlvLmg+Ci0tYm9vbCBm dHNfZGVidWcgPSBmYWxzZTsKLS0jIGRlZmluZSBEcHJpbnRmKHgpIGRvIHsgaWYgKGZ0c19kZWJ1 ZykgcHJpbnRmIHg7IH0gd2hpbGUgKGZhbHNlKQotLXN0YXRpYyB2b2lkIGZkX3JpbmdfY2hlY2sg KEZUU09CSiBjb25zdCAqKTsKLS1zdGF0aWMgdm9pZCBmZF9yaW5nX3ByaW50IChGVFNPQkogY29u c3QgKiwgRklMRSAqLCBjaGFyIGNvbnN0ICopOwotLSNlbHNlCi0tIyBkZWZpbmUgRHByaW50Zih4 KQotLSMgZGVmaW5lIGZkX3JpbmdfY2hlY2soeCkKLS0jIGRlZmluZSBmZF9yaW5nX3ByaW50KGEs IGIsIGMpCi0tI2VuZGlmCi0tCi0tI2RlZmluZSBMRUFWRV9ESVIoRnRzLCBFbnQsIFRhZykgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gIGRvICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAg ICAgRHByaW50ZiAoKCIgICVzLWxlYXZpbmc6ICVzXG4iLCBUYWcsIChFbnQpLT5mdHNfcGF0aCkp OyAgIFwKLS0gICAgICBsZWF2ZV9kaXIgKEZ0cywgRW50KTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotLSAgICAgIGZkX3JpbmdfY2hlY2sgKEZ0cyk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gIHdoaWxlIChmYWxzZSkK LS0KLS1zdGF0aWMgdm9pZAotLWZkX3JpbmdfY2xlYXIgKElfcmluZyAqZmRfcmluZykKLS17Ci0t ICB3aGlsZSAoICEgaV9yaW5nX2VtcHR5IChmZF9yaW5nKSkKLS0gICAgewotLSAgICAgIGludCBm ZCA9IGlfcmluZ19wb3AgKGZkX3JpbmcpOwotLSAgICAgIGlmICgwIDw9IGZkKQotLSAgICAgICAg Y2xvc2UgKGZkKTsKLS0gICAgfQotLX0KLS0KLS0vKiBPdmVybG9hZCB0aGUgZnRzX3N0YXRwLT5z dF9zaXplIG1lbWJlciAob3RoZXJ3aXNlIHVudXNlZCwgd2hlbgotLSAgIGZ0c19pbmZvIGlzIEZU U19OU09LKSB0byBpbmRpY2F0ZSB3aGV0aGVyIGZ0c19yZWFkIHNob3VsZCBzdGF0Ci0tICAgdGhp cyBlbnRyeSBvciBub3QuICAqLwotLXN0YXRpYyB2b2lkCi0tZnRzX3NldF9zdGF0X3JlcXVpcmVk IChGVFNFTlRSWSAqcCwgYm9vbCByZXF1aXJlZCkKLS17Ci0tICBmdHNfYXNzZXJ0IChwLT5mdHNf aW5mbyA9PSBGVFNfTlNPSyk7Ci0tICBwLT5mdHNfc3RhdHAtPnN0X3NpemUgPSAocmVxdWlyZWQK LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA/IEZUU19TVEFUX1JFUVVJUkVECi0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBGVFNfTk9fU1RBVF9SRVFVSVJFRCk7Ci0tfQotLQotLS8q IFZpcnR1YWwgZmNoZGlyLiAgQWR2YW5jZSBTUCdzIHdvcmtpbmcgZGlyZWN0b3J5IGZpbGUgZGVz Y3JpcHRvciwKLS0gICBTUC0+ZnRzX2N3ZF9mZCwgdG8gRkQsIGFuZCBwdXNoIHRoZSBwcmV2aW91 cyB2YWx1ZSBvbnRvIHRoZSBmZF9yaW5nLgotLSAgIENIRElSX0RPV05fT05FIGlzIHRydWUgaWYg RkQgY29ycmVzcG9uZHMgdG8gYW4gZW50cnkgaW4gdGhlIGRpcmVjdG9yeQotLSAgIG9wZW4gb24g c3AtPmZ0c19jd2RfZmQ7IGkuZS4sIHRvIG1vdmUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9uZSBs ZXZlbAotLSAgIGRvd24uICAqLwotLXN0YXRpYyB2b2lkCi0taW50ZXJuYWxfZnVuY3Rpb24KLS1j d2RfYWR2YW5jZV9mZCAoRlRTT0JKICpzcCwgaW50IGZkLCBib29sIGNoZGlyX2Rvd25fb25lKQot LXsKLS0gIGludCBvbGQgPSBzcC0+ZnRzX2N3ZF9mZDsKLS0gIGZ0c19hc3NlcnQgKG9sZCAhPSBm ZCB8fCBvbGQgPT0gQVRfRkRDV0QpOwotLQotLSAgaWYgKGNoZGlyX2Rvd25fb25lKQotLSAgICB7 Ci0tICAgICAgLyogUHVzaCAib2xkIiBvbnRvIHRoZSByaW5nLgotLSAgICAgICAgIElmIHRoZSBk aXNwbGFjZWQgZmlsZSBkZXNjcmlwdG9yIGlzIG5vbi1uZWdhdGl2ZSwgY2xvc2UgaXQuICAqLwot LSAgICAgIGludCBwcmV2X2ZkX2luX3Nsb3QgPSBpX3JpbmdfcHVzaCAoJnNwLT5mdHNfZmRfcmlu Zywgb2xkKTsKLS0gICAgICBmZF9yaW5nX3ByaW50IChzcCwgc3RkZXJyLCAicG9zdC1wdXNoIik7 Ci0tICAgICAgaWYgKDAgPD0gcHJldl9mZF9pbl9zbG90KQotLSAgICAgICAgY2xvc2UgKHByZXZf ZmRfaW5fc2xvdCk7IC8qIGlnbm9yZSBhbnkgY2xvc2UgZmFpbHVyZSAqLwotLSAgICB9Ci0tICBl bHNlIGlmICggISBJU1NFVCAoRlRTX05PQ0hESVIpKQotLSAgICB7Ci0tICAgICAgaWYgKDAgPD0g b2xkKQotLSAgICAgICAgY2xvc2UgKG9sZCk7IC8qIGlnbm9yZSBhbnkgY2xvc2UgZmFpbHVyZSAq LwotLSAgICB9Ci0tCi0tICBzcC0+ZnRzX2N3ZF9mZCA9IGZkOwotLX0KLS0KLS0vKiBSZXN0b3Jl IHRoZSBpbml0aWFsLCBwcmUtdHJhdmVyc2FsLCAid29ya2luZyBkaXJlY3RvcnkiLgotLSAgIElu IEZUU19DV0RGRCBtb2RlLCB3ZSBtZXJlbHkgY2FsbCBjd2RfYWR2YW5jZV9mZCwgb3RoZXJ3aXNl LAotLSAgIHdlIG1heSBhY3R1YWxseSBjaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgotLSAg IFJldHVybiAwIHVwb24gc3VjY2Vzcy4gVXBvbiBmYWlsdXJlLCBzZXQgZXJybm8gYW5kIHJldHVy biBub256ZXJvLiAgKi8KLS1zdGF0aWMgaW50Ci0tcmVzdG9yZV9pbml0aWFsX2N3ZCAoRlRTT0JK ICpzcCkKLS17Ci0tICBpbnQgZmFpbCA9IEZDSERJUiAoc3AsIElTU0VUIChGVFNfQ1dERkQpID8g QVRfRkRDV0QgOiBzcC0+ZnRzX3JmZCk7Ci0tICBmZF9yaW5nX2NsZWFyICgmKHNwLT5mdHNfZmRf cmluZykpOwotLSAgcmV0dXJuIGZhaWw7Ci0tfQotLQotLS8qIE9wZW4gdGhlIGRpcmVjdG9yeSBE SVIgaWYgcG9zc2libGUsIGFuZCByZXR1cm4gYSBmaWxlCi0tICAgZGVzY3JpcHRvci4gIFJldHVy biAtMSBhbmQgc2V0IGVycm5vIG9uIGZhaWx1cmUuICBJdCBkb2Vzbid0IG1hdHRlcgotLSAgIHdo ZXRoZXIgdGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgcmVhZCBvciB3cml0ZSBhY2Nlc3MuICAqLwot LQotLXN0YXRpYyBpbnQKLS1pbnRlcm5hbF9mdW5jdGlvbgotLWRpcm9wZW4gKEZUU09CSiBjb25z dCAqc3AsIGNoYXIgY29uc3QgKmRpcikKLS17Ci0tICBpbnQgb3Blbl9mbGFncyA9IChPX1NFQVJD SCB8IE9fQ0xPRVhFQyB8IE9fRElSRUNUT1JZIHwgT19OT0NUVFkgfCBPX05PTkJMT0NLCi0tICAg ICAgICAgICAgICAgICAgICB8IChJU1NFVCAoRlRTX1BIWVNJQ0FMKSA/IE9fTk9GT0xMT1cgOiAw KSk7Ci0tCi0tICBpbnQgZmQgPSAoSVNTRVQgKEZUU19DV0RGRCkKLS0gICAgICAgICAgICA/IG9w ZW5hdCAoc3AtPmZ0c19jd2RfZmQsIGRpciwgb3Blbl9mbGFncykKLS0gICAgICAgICAgICA6IG9w ZW4gKGRpciwgb3Blbl9mbGFncykpOwotLSAgcmV0dXJuIGZkOwotLX0KLS0KLS1GVFNPQkogKgot LUZUU19PUEVOIChjaGFyICogY29uc3QgKmFyZ3YsCi0tICAgICAgICAgIHJlZ2lzdGVyIGludCBv cHRpb25zLAotLSAgICAgICAgICBpbnQgKCpjb21wYXIpIChjb25zdCBGVFNFTlRSWSAqKiwgY29u c3QgRlRTRU5UUlkgKiopKQotLXsKLS0gICAgICAgIC8qIE9wdGlvbnMgY2hlY2s6IGdsaWJjIGFk ZGVkIG90aGVyIGZsYWdzIGFmdGVyIEZUU19OQU1FT05MWSBhbmQKLS0JICAgRlRTX1NUT1AsIGFu ZCB0aGV5IGFyZSBhc3N1bWVkIHRvIGJlIHByaXZhdGUuICAqLwotLSAgICAgICAgaWYgKG9wdGlv bnMgJiB+RlRTX09QVElPTk1BU0sKLS0jaWYgX0xJQkMKLS0JICAgIHx8IG9wdGlvbnMgJiAoRlRT X05BTUVPTkxZIHwgRlRTX1NUT1ApCi0tI2VuZGlmCi0tCSAgICApIHsKLS0gICAgICAgICAgICAg ICAgX19zZXRfZXJybm8gKEVJTlZBTCk7Ci0tICAgICAgICAgICAgICAgIHJldHVybiAoTlVMTCk7 Ci0tICAgICAgICB9Ci0tICAgICAgICBpZiAoKG9wdGlvbnMgJiBGVFNfTk9DSERJUikgJiYgKG9w dGlvbnMgJiBGVFNfQ1dERkQpKSB7Ci0tICAgICAgICAgICAgICAgIF9fc2V0X2Vycm5vIChFSU5W QUwpOwotLSAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotLSAgICAgICAgfQotLSNpZiAh X0xJQkMKLS0gICAgICAgIGlmICggISAob3B0aW9ucyAmIChGVFNfTE9HSUNBTCB8IEZUU19QSFlT SUNBTCkpKSB7Ci0tICAgICAgICAgICAgICAgIF9fc2V0X2Vycm5vIChFSU5WQUwpOwotLSAgICAg ICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotLSAgICAgICAgfQotLSNlbHNlCi0tCS8qIGdsaWJj IGhpc3RvcmljYWxseSBmYWxscyB0byBGVFNfUEhZU0lDQUwgaWYgbm8gRlRTX1BIWVNJQ0FMIG9y Ci0tCSAgIEZUU19MT0dJQ0FMIGlzIHNwZWNpZmllZC4gICovCi0tICAgICAgICBpZiAoISAob3B0 aW9ucyAmIChGVFNfUEhZU0lDQUwgfCBGVFNfTE9HSUNBTCkpKQotLQkgIG9wdGlvbnMgfD0gRlRT X1BIWVNJQ0FMOwotLSNlbmRpZgotLQotLSAgICAgICAgLyogQWxsb2NhdGUvaW5pdGlhbGl6ZSB0 aGUgc3RyZWFtICovCi0tICAgICAgICByZWdpc3RlciBGVFNPQkogKnNwID0gY2FsbG9jICgxLCBz aXplb2YgKnNwKTsKLS0gICAgICAgIGlmIChzcCA9PSBOVUxMKQotLSAgICAgICAgICAgICAgICBy ZXR1cm4gKE5VTEwpOwotLSAgICAgICAgc3AtPmZ0c19jb21wYXIgPSBGVFNfQ09NUEFSX0NBU1Qo Y29tcGFyKTsKLS0gICAgICAgIHNwLT5mdHNfb3B0aW9ucyA9IG9wdGlvbnM7Ci0tCi0tICAgICAg ICAvKiBMb2dpY2FsIHdhbGtzIHR1cm4gb24gTk9DSERJUjsgc3ltYm9saWMgbGlua3MgYXJlIHRv byBoYXJkLiAqLwotLSAgICAgICAgaWYgKElTU0VUKEZUU19MT0dJQ0FMKSkgewotLSAgICAgICAg ICAgICAgICBTRVQoRlRTX05PQ0hESVIpOwotLSAgICAgICAgICAgICAgICBDTFIoRlRTX0NXREZE KTsKLS0gICAgICAgIH0KLS0KLS0gICAgICAgIC8qIEluaXRpYWxpemUgZnRzX2N3ZF9mZC4gICov Ci0tICAgICAgICBzcC0+ZnRzX2N3ZF9mZCA9IEFUX0ZEQ1dEOwotLSAgICAgICAgaWYgKCBJU1NF VChGVFNfQ1dERkQpICYmICEgSEFWRV9PUEVOQVRfU1VQUE9SVCkKLS0gICAgICAgICAgewotLSAg ICAgICAgICAgIC8qIFdoaWxlIGl0IGlzbid0IHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBvcGVu ICIuIiB0aGlzCi0tICAgICAgICAgICAgICAgZWFybHksIGRvaW5nIGl0IGhlcmUgc2F2ZXMgdXMg dGhlIHRyb3VibGUgb2YgZW5zdXJpbmcKLS0gICAgICAgICAgICAgICBsYXRlciAod2hlcmUgaXQn ZCBiZSBtZXNzaWVyKSB0aGF0ICIuIiBjYW4gaW4gZmFjdAotLSAgICAgICAgICAgICAgIGJlIG9w ZW5lZC4gIElmIG5vdCwgcmV2ZXJ0IHRvIEZUU19OT0NIRElSIG1vZGUuICAqLwotLSAgICAgICAg ICAgIGludCBmZCA9IG9wZW4gKCIuIiwgT19TRUFSQ0ggfCBPX0NMT0VYRUMpOwotLSAgICAgICAg ICAgIGlmIChmZCA8IDApCi0tICAgICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICAgIC8qIEV2 ZW4gaWYgIi4iIGlzIHVucmVhZGFibGUsIGRvbid0IHJldmVydCB0byBGVFNfTk9DSERJUiBtb2Rl Ci0tICAgICAgICAgICAgICAgICAgIG9uIHN5c3RlbXMgbGlrZSBMaW51eCtQUk9DX0ZTLCB3aGVy ZSBvdXIgb3BlbmF0IGVtdWxhdGlvbgotLSAgICAgICAgICAgICAgICAgICBpcyBnb29kIGVub3Vn aC4gIE5vdGU6IG9uIGEgc3lzdGVtIHRoYXQgZW11bGF0ZXMKLS0gICAgICAgICAgICAgICAgICAg b3BlbmF0IHZpYSAvcHJvYywgdGhpcyB0ZWNobmlxdWUgY2FuIHN0aWxsIGZhaWwsIGJ1dAotLSAg ICAgICAgICAgICAgICAgICBvbmx5IGluIGV4dHJlbWUgY29uZGl0aW9ucywgZS5nLiwgd2hlbiB0 aGUgd29ya2luZwotLSAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2Fubm90IGJlIHNhdmVk IChpLmUuIHNhdmVfY3dkIGZhaWxzKSAtLQotLSAgICAgICAgICAgICAgICAgICBhbmQgdGhhdCBo YXBwZW5zIG9uIExpbnV4IG9ubHkgd2hlbiAiLiIgaXMgdW5yZWFkYWJsZQotLSAgICAgICAgICAg ICAgICAgICBhbmQgdGhlIENXRCB3b3VsZCBiZSBsb25nZXIgdGhhbiBQQVRIX01BWC4KLS0gICAg ICAgICAgICAgICAgICAgRklYTUU6IG9uY2UgTGludXgga2VybmVsIG9wZW5hdCBzdXBwb3J0IGlz IHdlbGwgZXN0YWJsaXNoZWQsCi0tICAgICAgICAgICAgICAgICAgIHJlcGxhY2UgdGhlIGFib3Zl IG9wZW4gY2FsbCBhbmQgdGhpcyBlbnRpcmUgaWYvZWxzZSBibG9jawotLSAgICAgICAgICAgICAg ICAgICB3aXRoIHRoZSBib2R5IG9mIHRoZSBpZi1ibG9jayBiZWxvdy4gICovCi0tICAgICAgICAg ICAgICAgIGlmICggb3BlbmF0X25lZWRzX2ZjaGRpciAoKSkKLS0gICAgICAgICAgICAgICAgICB7 Ci0tICAgICAgICAgICAgICAgICAgICBTRVQoRlRTX05PQ0hESVIpOwotLSAgICAgICAgICAgICAg ICAgICAgQ0xSKEZUU19DV0RGRCk7Ci0tICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAg ICAgfQotLSAgICAgICAgICAgIGVsc2UKLS0gICAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAg ICAgY2xvc2UgKGZkKTsKLS0gICAgICAgICAgICAgIH0KLS0gICAgICAgICAgfQotLQotLSAgICAg ICAgLyoKLS0gICAgICAgICAqIFN0YXJ0IG91dCB3aXRoIDFLIG9mIGZpbGUgbmFtZSBzcGFjZSwg YW5kIGVub3VnaCwgaW4gYW55IGNhc2UsCi0tICAgICAgICAgKiB0byBob2xkIHRoZSB1c2VyJ3Mg ZmlsZSBuYW1lcy4KLS0gICAgICAgICAqLwotLSNpZm5kZWYgTUFYUEFUSExFTgotLSMgZGVmaW5l IE1BWFBBVEhMRU4gMTAyNAotLSNlbmRpZgotLSAgICAgICAgewotLSAgICAgICAgICBzaXplX3Qg bWF4YXJnbGVuID0gZnRzX21heGFyZ2xlbihhcmd2KTsKLS0gICAgICAgICAgaWYgKCEgZnRzX3Bh bGxvYyhzcCwgTUFYKG1heGFyZ2xlbiwgTUFYUEFUSExFTikpKQotLSAgICAgICAgICAgICAgICAg IGdvdG8gbWVtMTsKLS0gICAgICAgIH0KLS0KLS0gICAgICAgIC8qIEFsbG9jYXRlL2luaXRpYWxp emUgcm9vdCdzIHBhcmVudC4gKi8KLS0gICAgICAgIEZUU0VOVFJZICpwYXJlbnQgPSBOVUxMOwot LSAgICAgICAgaWYgKCphcmd2ICE9IE5VTEwpIHsKLS0gICAgICAgICAgICAgICAgaWYgKChwYXJl bnQgPSBmdHNfYWxsb2Moc3AsICIiLCAwKSkgPT0gTlVMTCkKLS0gICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIG1lbTI7Ci0tICAgICAgICAgICAgICAgIHBhcmVudC0+ZnRzX2xldmVsID0gRlRT X1JPT1RQQVJFTlRMRVZFTDsKLS0gICAgICAgICAgfQotLQotLSAgICAgICAgLyogVGhlIGNsYXNz aWMgZnRzIGltcGxlbWVudGF0aW9uIHdvdWxkIGNhbGwgZnRzX3N0YXQgd2l0aAotLSAgICAgICAg ICAgYSBuZXcgZW50cnkgZm9yIGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBsb29wIGJlbG93LgotLSAg ICAgICAgICAgSWYgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gaXMgbm90IHNwZWNpZmllZCBvciBp ZiB0aGUKLS0gICAgICAgICAgIEZUU19ERUZFUl9TVEFUIG9wdGlvbiBpcyBpbiBlZmZlY3QsIGRv bid0IHN0YXQgYW55IGVudHJ5Ci0tICAgICAgICAgICBpbiB0aGlzIGxvb3AuICBUaGlzIGlzIGFu IGF0dGVtcHQgdG8gbWluaW1pemUgdGhlIGludGVydmFsCi0tICAgICAgICAgICBiZXR3ZWVuIHRo ZSBpbml0aWFsIHN0YXQvbHN0YXQvZnN0YXRhdCBhbmQgdGhlIHBvaW50IGF0IHdoaWNoCi0tICAg ICAgICAgICBhIGRpcmVjdG9yeSBhcmd1bWVudCBpcyBmaXJzdCBvcGVuZWQuICBUaGlzIG1hdHRl cnMgZm9yIGFueQotLSAgICAgICAgICAgZGlyZWN0b3J5IGNvbW1hbmQgbGluZSBhcmd1bWVudCB0 aGF0IHJlc2lkZXMgb24gYSBmaWxlIHN5c3RlbQotLSAgICAgICAgICAgd2l0aG91dCBnZW51aW5l IGktbm9kZXMuICBJZiB5b3Ugc3BlY2lmeSBGVFNfREVGRVJfU1RBVCBhbG9uZwotLSAgICAgICAg ICAgd2l0aCBhIGNvbXBhcmlzb24gZnVuY3Rpb24sIHRoYXQgZnVuY3Rpb24gbXVzdCBub3QgYWNj ZXNzIGFueQotLSAgICAgICAgICAgZGF0YSB2aWEgdGhlIGZ0c19zdGF0cCBwb2ludGVyLiAgKi8K LS0gICAgICAgIGJvb2wgZGVmZXJfc3RhdCA9IChjb21wYXIgPT0gTlVMTCB8fCBJU1NFVChGVFNf REVGRVJfU1RBVCkpOwotLQotLSAgICAgICAgLyogQWxsb2NhdGUvaW5pdGlhbGl6ZSByb290KHMp LiAqLwotLSAgICAgICAgcmVnaXN0ZXIgRlRTRU5UUlkgKnJvb3Q7Ci0tICAgICAgICByZWdpc3Rl ciBzaXplX3Qgbml0ZW1zOwotLSAgICAgICAgRlRTRU5UUlkgKnRtcCA9IE5VTEw7ICAgICAvKiBw YWNpZnkgZ2NjICovCi0tICAgICAgICBmb3IgKHJvb3QgPSBOVUxMLCBuaXRlbXMgPSAwOyAqYXJn diAhPSBOVUxMOyArK2FyZ3YsICsrbml0ZW1zKSB7Ci0tICAgICAgICAgICAgICAgIC8qICpEbyog YWxsb3cgemVyby1sZW5ndGggZmlsZSBuYW1lcy4gKi8KLS0gICAgICAgICAgICAgICAgc2l6ZV90 IGxlbiA9IHN0cmxlbigqYXJndik7Ci0tCi0tICAgICAgICAgICAgICAgIGlmICggISAob3B0aW9u cyAmIEZUU19WRVJCQVRJTSkpCi0tICAgICAgICAgICAgICAgICAgewotLSAgICAgICAgICAgICAg ICAgICAgLyogSWYgdGhlcmUgYXJlIHR3byBvciBtb3JlIHRyYWlsaW5nIHNsYXNoZXMsIHRyaW0g YWxsIGJ1dCBvbmUsCi0tICAgICAgICAgICAgICAgICAgICAgICBidXQgZG9uJ3QgY2hhbmdlICIv LyIgdG8gIi8iLCBhbmQgZG8gbWFwICIvLy8iIHRvICIvIi4gICovCi0tICAgICAgICAgICAgICAg ICAgICBjaGFyIGNvbnN0ICp2ID0gKmFyZ3Y7Ci0tICAgICAgICAgICAgICAgICAgICBpZiAoMiA8 IGxlbiAmJiB2W2xlbiAtIDFdID09ICcvJykKLS0gICAgICAgICAgICAgICAgICAgICAgd2hpbGUg KDEgPCBsZW4gJiYgdltsZW4gLSAyXSA9PSAnLycpCi0tICAgICAgICAgICAgICAgICAgICAgICAg LS1sZW47Ci0tICAgICAgICAgICAgICAgICAgfQotLQotLSAgICAgICAgICAgICAgICByZWdpc3Rl ciBGVFNFTlRSWSAqcCA9IGZ0c19hbGxvYyhzcCwgKmFyZ3YsIGxlbik7Ci0tICAgICAgICAgICAg ICAgIGlmIChwID09IE5VTEwpCi0tICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtZW0zOwot LSAgICAgICAgICAgICAgICBwLT5mdHNfbGV2ZWwgPSBGVFNfUk9PVExFVkVMOwotLSAgICAgICAg ICAgICAgICBwLT5mdHNfcGFyZW50ID0gcGFyZW50OwotLSAgICAgICAgICAgICAgICBwLT5mdHNf YWNjcGF0aCA9IHAtPmZ0c19uYW1lOwotLSAgICAgICAgICAgICAgICAvKiBFdmVuIHdoZW4gZGVm ZXJfc3RhdCBpcyB0cnVlLCBiZSBzdXJlIHRvIHN0YXQgdGhlIGZpcnN0Ci0tICAgICAgICAgICAg ICAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudCwgc2luY2UgZnRzX3JlYWQgKGF0IGxlYXN0IHdp dGgKLS0gICAgICAgICAgICAgICAgICAgRlRTX1hERVYpIHJlcXVpcmVzIHRoYXQuICAqLwotLSAg ICAgICAgICAgICAgICBpZiAoZGVmZXJfc3RhdCAmJiByb290ICE9IE5VTEwpIHsKLS0gICAgICAg ICAgICAgICAgICAgICAgICBwLT5mdHNfaW5mbyA9IEZUU19OU09LOwotLSAgICAgICAgICAgICAg ICAgICAgICAgIGZ0c19zZXRfc3RhdF9yZXF1aXJlZChwLCB0cnVlKTsKLS0gICAgICAgICAgICAg ICAgfSBlbHNlIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfaW5mbyA9IGZ0c19z dGF0KHNwLCBwLCBmYWxzZSk7Ci0tICAgICAgICAgICAgICAgIH0KLS0KLS0gICAgICAgICAgICAg ICAgLyoKLS0gICAgICAgICAgICAgICAgICogSWYgY29tcGFyaXNvbiByb3V0aW5lIHN1cHBsaWVk LCB0cmF2ZXJzZSBpbiBzb3J0ZWQKLS0gICAgICAgICAgICAgICAgICogb3JkZXI7IG90aGVyd2lz ZSB0cmF2ZXJzZSBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkLgotLSAgICAgICAgICAgICAgICAgKi8K LS0gICAgICAgICAgICAgICAgaWYgKGNvbXBhcikgewotLSAgICAgICAgICAgICAgICAgICAgICAg IHAtPmZ0c19saW5rID0gcm9vdDsKLS0gICAgICAgICAgICAgICAgICAgICAgICByb290ID0gcDsK LS0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBwLT5m dHNfbGluayA9IE5VTEw7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvb3QgPT0gTlVM TCkKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHJvb3QgPSBwOwotLSAg ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdG1wLT5mdHNfbGluayA9IHA7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0bXAgPSBwOwotLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAg fQotLSAgICAgICAgfQotLSAgICAgICAgaWYgKGNvbXBhciAmJiBuaXRlbXMgPiAxKQotLSAgICAg ICAgICAgICAgICByb290ID0gZnRzX3NvcnQoc3AsIHJvb3QsIG5pdGVtcyk7Ci0tCi0tICAgICAg ICAvKgotLSAgICAgICAgICogQWxsb2NhdGUgYSBkdW1teSBwb2ludGVyIGFuZCBtYWtlIGZ0c19y ZWFkIHRoaW5rIHRoYXQgd2UndmUganVzdAotLSAgICAgICAgICogZmluaXNoZWQgdGhlIG5vZGUg YmVmb3JlIHRoZSByb290KHMpOyBzZXQgcC0+ZnRzX2luZm8gdG8gRlRTX0lOSVQKLS0gICAgICAg ICAqIHNvIHRoYXQgZXZlcnl0aGluZyBhYm91dCB0aGUgImN1cnJlbnQiIG5vZGUgaXMgaWdub3Jl ZC4KLS0gICAgICAgICAqLwotLSAgICAgICAgaWYgKChzcC0+ZnRzX2N1ciA9IGZ0c19hbGxvYyhz cCwgIiIsIDApKSA9PSBOVUxMKQotLSAgICAgICAgICAgICAgICBnb3RvIG1lbTM7Ci0tICAgICAg ICBzcC0+ZnRzX2N1ci0+ZnRzX2xpbmsgPSByb290OwotLSAgICAgICAgc3AtPmZ0c19jdXItPmZ0 c19pbmZvID0gRlRTX0lOSVQ7Ci0tICAgICAgICBzcC0+ZnRzX2N1ci0+ZnRzX2xldmVsID0gMTsK LS0gICAgICAgIGlmICghIHNldHVwX2RpciAoc3ApKQotLSAgICAgICAgICAgICAgICBnb3RvIG1l bTM7Ci0tCi0tICAgICAgICAvKgotLSAgICAgICAgICogSWYgdXNpbmcgY2hkaXIoMiksIGdyYWIg YSBmaWxlIGRlc2NyaXB0b3IgcG9pbnRpbmcgdG8gZG90IHRvIGVuc3VyZQotLSAgICAgICAgICog dGhhdCB3ZSBjYW4gZ2V0IGJhY2sgaGVyZTsgdGhpcyBjb3VsZCBiZSBhdm9pZGVkIGZvciBzb21l IGZpbGUgbmFtZXMsCi0tICAgICAgICAgKiBidXQgYWxtb3N0IGNlcnRhaW5seSBub3Qgd29ydGgg dGhlIGVmZm9ydC4gIFNsYXNoZXMsIHN5bWJvbGljIGxpbmtzLAotLSAgICAgICAgICogYW5kICIu LiIgYXJlIGFsbCBmYWlybHkgbmFzdHkgcHJvYmxlbXMuICBOb3RlLCBpZiB3ZSBjYW4ndCBnZXQg dGhlCi0tICAgICAgICAgKiBkZXNjcmlwdG9yIHdlIHJ1biBhbnl3YXksIGp1c3QgbW9yZSBzbG93 bHkuCi0tICAgICAgICAgKi8KLS0gICAgICAgIGlmICghSVNTRVQoRlRTX05PQ0hESVIpICYmICFJ U1NFVChGVFNfQ1dERkQpCi0tICAgICAgICAgICAgJiYgKHNwLT5mdHNfcmZkID0gZGlyb3BlbiAo c3AsICIuIikpIDwgMCkKLS0gICAgICAgICAgICAgICAgU0VUKEZUU19OT0NIRElSKTsKLS0KLS0g ICAgICAgIGlfcmluZ19pbml0ICgmc3AtPmZ0c19mZF9yaW5nLCAtMSk7Ci0tICAgICAgICByZXR1 cm4gKHNwKTsKLS0KLS1tZW0zOiAgIGZ0c19sZnJlZShyb290KTsKLS0gICAgICAgIGZyZWUoRlRT RU5UX1dSQVBQRVIocGFyZW50KSk7Ci0tbWVtMjogICBmcmVlKHNwLT5mdHNfcGF0aCk7Ci0tbWVt MTogICBmcmVlKHNwKTsKLS0gICAgICAgIHJldHVybiAoTlVMTCk7Ci0tfQotLQotLXN0YXRpYyB2 b2lkCi0taW50ZXJuYWxfZnVuY3Rpb24KLS1mdHNfbG9hZCAoRlRTT0JKICpzcCwgcmVnaXN0ZXIg RlRTRU5UUlkgKnApCi0tewotLSAgICAgICAgLyoKLS0gICAgICAgICAqIExvYWQgdGhlIHN0cmVh bSBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXh0IHRyYXZlcnNhbC4gIFNpbmNlIHdlIGRvbid0Ci0tICAg ICAgICAgKiBhY3R1YWxseSBlbnRlciB0aGUgZGlyZWN0b3J5IHVudGlsIGFmdGVyIHRoZSBwcmVv cmRlciB2aXNpdCwgc2V0Ci0tICAgICAgICAgKiB0aGUgZnRzX2FjY3BhdGggZmllbGQgc3BlY2lh bGx5IHNvIHRoZSBjaGRpciBnZXRzIGRvbmUgdG8gdGhlIHJpZ2h0Ci0tICAgICAgICAgKiBwbGFj ZSBhbmQgdGhlIHVzZXIgY2FuIGFjY2VzcyB0aGUgZmlyc3Qgbm9kZS4gIEZyb20gZnRzX29wZW4g aXQncwotLSAgICAgICAgICoga25vd24gdGhhdCB0aGUgZmlsZSBuYW1lIHdpbGwgZml0LgotLSAg ICAgICAgICovCi0tICAgICAgICByZWdpc3RlciBzaXplX3QgbGVuID0gcC0+ZnRzX3BhdGhsZW4g PSBwLT5mdHNfbmFtZWxlbjsKLS0gICAgICAgIG1lbW1vdmUoc3AtPmZ0c19wYXRoLCBwLT5mdHNf bmFtZSwgbGVuICsgMSk7Ci0tICAgICAgICByZWdpc3RlciBjaGFyICpjcCA9IHN0cnJjaHIocC0+ ZnRzX25hbWUsICcvJyk7Ci0tICAgICAgICBpZiAoY3AgJiYgKGNwICE9IHAtPmZ0c19uYW1lIHx8 IGNwWzFdKSkgewotLSAgICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4oKytjcCk7Ci0tICAgICAg ICAgICAgICAgIG1lbW1vdmUocC0+ZnRzX25hbWUsIGNwLCBsZW4gKyAxKTsKLS0gICAgICAgICAg ICAgICAgcC0+ZnRzX25hbWVsZW4gPSBsZW47Ci0tICAgICAgICB9Ci0tICAgICAgICBwLT5mdHNf YWNjcGF0aCA9IHAtPmZ0c19wYXRoID0gc3AtPmZ0c19wYXRoOwotLX0KLS0KLS1pbnQKLS1GVFNf Q0xPU0UgKEZUU09CSiAqc3ApCi0tewotLSAgICAgICAgLyoKLS0gICAgICAgICAqIFRoaXMgc3Rp bGwgd29ya3MgaWYgd2UgaGF2ZW4ndCByZWFkIGFueXRoaW5nIC0tIHRoZSBkdW1teSBzdHJ1Y3R1 cmUKLS0gICAgICAgICAqIHBvaW50cyB0byB0aGUgcm9vdCBsaXN0LCBzbyB3ZSBzdGVwIHRocm91 Z2ggdG8gdGhlIGVuZCBvZiB0aGUgcm9vdAotLSAgICAgICAgICogbGlzdCB3aGljaCBoYXMgYSB2 YWxpZCBwYXJlbnQgcG9pbnRlci4KLS0gICAgICAgICAqLwotLSAgICAgICAgaWYgKHNwLT5mdHNf Y3VyKSB7Ci0tICAgICAgICAgICAgICAgIHJlZ2lzdGVyIEZUU0VOVFJZICpwOwotLSAgICAgICAg ICAgICAgICBmb3IgKHAgPSBzcC0+ZnRzX2N1cjsgcC0+ZnRzX2xldmVsID49IEZUU19ST09UTEVW RUw7KSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgRlRTRU5UUlkgKmZyZWVw ID0gcDsKLS0gICAgICAgICAgICAgICAgICAgICAgICBwID0gcC0+ZnRzX2xpbmsgIT0gTlVMTCA/ IHAtPmZ0c19saW5rIDogcC0+ZnRzX3BhcmVudDsKLS0gICAgICAgICAgICAgICAgICAgICAgICBm cmVlKEZUU0VOVF9XUkFQUEVSKGZyZWVwKSk7Ci0tICAgICAgICAgICAgICAgIH0KLS0gICAgICAg ICAgICAgICAgZnJlZShGVFNFTlRfV1JBUFBFUihwKSk7Ci0tICAgICAgICB9Ci0tCi0tICAgICAg ICAvKiBGcmVlIHVwIGNoaWxkIGxpbmtlZCBsaXN0LCBzb3J0IGFycmF5LCBmaWxlIG5hbWUgYnVm ZmVyLiAqLwotLSAgICAgICAgaWYgKHNwLT5mdHNfY2hpbGQpCi0tICAgICAgICAgICAgICAgIGZ0 c19sZnJlZShzcC0+ZnRzX2NoaWxkKTsKLS0gICAgICAgIGZyZWUoc3AtPmZ0c19hcnJheSk7Ci0t ICAgICAgICBmcmVlKHNwLT5mdHNfcGF0aCk7Ci0tCi0tICAgICAgICBpbnQgc2F2ZWRfZXJybm8g PSAwOwotLSAgICAgICAgaWYgKElTU0VUKEZUU19DV0RGRCkpCi0tICAgICAgICAgIHsKLS0gICAg ICAgICAgICBpZiAoMCA8PSBzcC0+ZnRzX2N3ZF9mZCkKLS0gICAgICAgICAgICAgIGlmIChjbG9z ZSAoc3AtPmZ0c19jd2RfZmQpKQotLSAgICAgICAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5v OwotLSAgICAgICAgICB9Ci0tICAgICAgICBlbHNlIGlmICghSVNTRVQoRlRTX05PQ0hESVIpKQot LSAgICAgICAgICB7Ci0tICAgICAgICAgICAgLyogUmV0dXJuIHRvIG9yaWdpbmFsIGRpcmVjdG9y eSwgc2F2ZSBlcnJubyBpZiBuZWNlc3NhcnkuICovCi0tICAgICAgICAgICAgaWYgKGZjaGRpcihz cC0+ZnRzX3JmZCkpCi0tICAgICAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOwotLQotLSAg ICAgICAgICAgIC8qIElmIGNsb3NlIGZhaWxzLCByZWNvcmQgZXJybm8gb25seSBpZiBzYXZlZF9l cnJubyBpcyB6ZXJvLAotLSAgICAgICAgICAgICAgIHNvIHRoYXQgd2UgcmVwb3J0IHRoZSBwcm9i YWJseS1tb3JlLW1lYW5pbmdmdWwgZmNoZGlyIGVycm5vLiAgKi8KLS0gICAgICAgICAgICBpZiAo Y2xvc2UgKHNwLT5mdHNfcmZkKSkKLS0gICAgICAgICAgICAgIGlmIChzYXZlZF9lcnJubyA9PSAw KQotLSAgICAgICAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOwotLSAgICAgICAgICB9Ci0t Ci0tICAgICAgICBmZF9yaW5nX2NsZWFyICgmc3AtPmZ0c19mZF9yaW5nKTsKLS0KLS0gICAgICAg IGlmIChzcC0+ZnRzX2xlYWZfb3B0aW1pemF0aW9uX3dvcmtzX2h0KQotLSAgICAgICAgICBoYXNo X2ZyZWUgKHNwLT5mdHNfbGVhZl9vcHRpbWl6YXRpb25fd29ya3NfaHQpOwotLQotLSAgICAgICAg ZnJlZV9kaXIgKHNwKTsKLS0KLS0gICAgICAgIC8qIEZyZWUgdXAgdGhlIHN0cmVhbSBwb2ludGVy LiAqLwotLSAgICAgICAgZnJlZShzcCk7Ci0tCi0tICAgICAgICAvKiBTZXQgZXJybm8gYW5kIHJl dHVybi4gKi8KLS0gICAgICAgIGlmIChzYXZlZF9lcnJubykgewotLSAgICAgICAgICAgICAgICBf X3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOwotLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsK LS0gICAgICAgIH0KLS0KLS0gICAgICAgIHJldHVybiAoMCk7Ci0tfQotLQotLS8qIE1pbmltdW0g bGluayBjb3VudCBvZiBhIHRyYWRpdGlvbmFsIFVuaXggZGlyZWN0b3J5LiAgV2hlbiBsZWFmCi0t ICAgb3B0aW1pemF0aW9uIGlzIE9LIGFuZCBhIGRpcmVjdG9yeSdzIHN0X25saW5rID09IE1JTl9E SVJfTkxJTkssCi0tICAgdGhlbiB0aGUgZGlyZWN0b3J5IGhhcyBubyBzdWJkaXJlY3Rvcmllcy4g ICovCi0tZW51bSB7IE1JTl9ESVJfTkxJTksgPSAyIH07Ci0tCi0tLyogV2hldGhlciBsZWFmIG9w dGltaXphdGlvbiBpcyBPSyBmb3IgYSBkaXJlY3RvcnkuICAqLwotLWVudW0gbGVhZl9vcHRpbWl6 YXRpb24KLS0gIHsKLS0gICAgLyogc3RfbmxpbmsgaXMgbm90IHJlbGlhYmxlIGZvciB0aGlzIGRp cmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzLiAgKi8KLS0gICAgTk9fTEVBRl9PUFRJTUlaQVRJT04s Ci0tCi0tICAgIC8qIHN0X25saW5rID09IDIgbWVhbnMgdGhlIGRpcmVjdG9yeSBsYWNrcyBzdWJk aXJlY3Rvcmllcy4gICovCi0tICAgIE9LX0xFQUZfT1BUSU1JWkFUSU9OCi0tICB9OwotLQotLSNp ZiAoZGVmaW5lZCBfX2xpbnV4X18gfHwgZGVmaW5lZCBfX0FORFJPSURfXykgXAotLSAgJiYgSEFW RV9TWVNfVkZTX0ggJiYgSEFWRV9GU1RBVEZTICYmIEhBVkVfU1RSVUNUX1NUQVRGU19GX1RZUEUK LS0KLS0jIGluY2x1ZGUgPHN5cy92ZnMuaD4KLS0KLS0vKiBMaW51eC1zcGVjaWZpYyBjb25zdGFu dHMgZnJvbSBjb3JldXRpbHMnIHNyYy9mcy5oICovCi0tIyBkZWZpbmUgU19NQUdJQ19BRlMgMHg1 MzQ2NDE0RgotLSMgZGVmaW5lIFNfTUFHSUNfQ0lGUyAweEZGNTM0RDQyCi0tIyBkZWZpbmUgU19N QUdJQ19MVVNUUkUgMHgwQkQwMEJEMAotLSMgZGVmaW5lIFNfTUFHSUNfTkZTIDB4Njk2OQotLSMg ZGVmaW5lIFNfTUFHSUNfUFJPQyAweDlGQTAKLS0jIGRlZmluZSBTX01BR0lDX1RNUEZTIDB4MTAy MTk5NAotLQotLSMgaWZkZWYgSEFWRV9fX0ZTV09SRF9UCi0tdHlwZWRlZiBfX2Zzd29yZF90IGZz d29yZDsKLS0jIGVsc2UKLS10eXBlZGVmIGxvbmcgaW50IGZzd29yZDsKLS0jIGVuZGlmCi0tCi0t LyogTWFwIGEgc3RhdC5zdF9kZXYgbnVtYmVyIHRvIGEgZmlsZSBzeXN0ZW0gdHlwZSBudW1iZXIg Zl9mdHlwZS4gICovCi0tc3RydWN0IGRldl90eXBlCi0tewotLSAgZGV2X3Qgc3RfZGV2OwotLSAg ZnN3b3JkIGZfdHlwZTsKLS19OwotLQotLS8qIFVzZSBhIHRpbnkgaW5pdGlhbCBzaXplLiAgSWYg YSB0cmF2ZXJzYWwgZW5jb3VudGVycyBtb3JlIHRoYW4KLS0gICBhIGZldyBkZXZpY2VzLCB0aGUg Y29zdCBvZiBncm93aW5nL3JlaGFzaGluZyB0aGlzIHRhYmxlIHdpbGwgYmUKLS0gICByZW5kZXJl ZCBuZWdsaWdpYmxlIGJ5IHRoZSBudW1iZXIgb2YgaW5vZGVzIHByb2Nlc3NlZC4gICovCi0tZW51 bSB7IERFVl9UWVBFX0hUX0lOSVRJQUxfU0laRSA9IDEzIH07Ci0tCi0tc3RhdGljIHNpemVfdAot LWRldl90eXBlX2hhc2ggKHZvaWQgY29uc3QgKngsIHNpemVfdCB0YWJsZV9zaXplKQotLXsKLS0g IHN0cnVjdCBkZXZfdHlwZSBjb25zdCAqYXggPSB4OwotLSAgdWludG1heF90IGRldiA9IGF4LT5z dF9kZXY7Ci0tICByZXR1cm4gZGV2ICUgdGFibGVfc2l6ZTsKLS19Ci0tCi0tc3RhdGljIGJvb2wK LS1kZXZfdHlwZV9jb21wYXJlICh2b2lkIGNvbnN0ICp4LCB2b2lkIGNvbnN0ICp5KQotLXsKLS0g IHN0cnVjdCBkZXZfdHlwZSBjb25zdCAqYXggPSB4OwotLSAgc3RydWN0IGRldl90eXBlIGNvbnN0 ICpheSA9IHk7Ci0tICByZXR1cm4gYXgtPnN0X2RldiA9PSBheS0+c3RfZGV2OwotLX0KLS0KLS0v KiBSZXR1cm4gdGhlIGZpbGUgc3lzdGVtIHR5cGUgb2YgUCB3aXRoIGZpbGUgZGVzY3JpcHRvciBG RCwgb3IgMCBpZiBub3Qga25vd24uCi0tICAgSWYgRkQgaXMgbmVnYXRpdmUsIFAncyBmaWxlIGRl c2NyaXB0b3IgaXMgdW5hdmFpbGFibGUuCi0tICAgVHJ5IHRvIGNhY2hlIGtub3duIHZhbHVlcy4g ICovCi0tCi0tc3RhdGljIGZzd29yZAotLWZpbGVzeXN0ZW1fdHlwZSAoRlRTRU5UUlkgY29uc3Qg KnAsIGludCBmZCkKLS17Ci0tICBGVFNPQkogKnNwID0gRlRTRU5UX0ZUUyhwKTsKLS0KLS0gIC8q IElmIHdlJ3JlIG5vdCBpbiBDV0RGRCBtb2RlLCBkb24ndCBib3RoZXIgd2l0aCB0aGlzIG9wdGlt aXphdGlvbiwKLS0gICAgIHNpbmNlIHRoZSBjYWxsZXIgaXMgbm90IHNlcmlvdXMgYWJvdXQgcGVy Zm9ybWFuY2UuICAqLwotLSAgaWYgKCFJU1NFVCAoRlRTX0NXREZEKSkKLS0gICAgcmV0dXJuIDA7 Ci0tCi0tICBIYXNoX3RhYmxlICpoID0gc3AtPmZ0c19sZWFmX29wdGltaXphdGlvbl93b3Jrc19o dDsKLS0gIGlmICghIGgpCi0tICAgIGggPSBzcC0+ZnRzX2xlYWZfb3B0aW1pemF0aW9uX3dvcmtz X2h0Ci0tICAgICAgPSBoYXNoX2luaXRpYWxpemUgKERFVl9UWVBFX0hUX0lOSVRJQUxfU0laRSwg TlVMTCwgZGV2X3R5cGVfaGFzaCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgZGV2X3R5cGVf Y29tcGFyZSwgZnJlZSk7Ci0tCi0tICBpZiAoaCkKLS0gICAgewotLSAgICAgIHN0cnVjdCBkZXZf dHlwZSB0bXA7Ci0tICAgICAgdG1wLnN0X2RldiA9IHAtPmZ0c19zdGF0cC0+c3RfZGV2OwotLSAg ICAgIHN0cnVjdCBkZXZfdHlwZSAqZW50ID0gaGFzaF9sb29rdXAgKGgsICZ0bXApOwotLSAgICAg IGlmIChlbnQpCi0tICAgICAgICByZXR1cm4gZW50LT5mX3R5cGU7Ci0tICAgIH0KLS0KLS0gIC8q IExvb2stdXAgZmFpbGVkLiAgUXVlcnkgZGlyZWN0bHkgYW5kIGNhY2hlIHRoZSByZXN1bHQuICAq LwotLSAgc3RydWN0IFNUUlVDVF9TVEFURlMgZnNfYnVmOwotLSAgaWYgKGZkIDwgMCB8fCBGU1RB VEZTIChmZCwgJmZzX2J1ZikgIT0gMCkKLS0gICAgcmV0dXJuIDA7Ci0tCi0tICBpZiAoaCkKLS0g ICAgewotLSAgICAgIHN0cnVjdCBkZXZfdHlwZSAqdDIgPSBtYWxsb2MgKHNpemVvZiAqdDIpOwot LSAgICAgIGlmICh0MikKLS0gICAgICAgIHsKLS0gICAgICAgICAgdDItPnN0X2RldiA9IHAtPmZ0 c19zdGF0cC0+c3RfZGV2OwotLSAgICAgICAgICB0Mi0+Zl90eXBlID0gZnNfYnVmLmZfdHlwZTsK LS0KLS0gICAgICAgICAgc3RydWN0IGRldl90eXBlICplbnQgPSBoYXNoX2luc2VydCAoaCwgdDIp OwotLSAgICAgICAgICBpZiAoZW50KQotLSAgICAgICAgICAgIGZ0c19hc3NlcnQgKGVudCA9PSB0 Mik7Ci0tICAgICAgICAgIGVsc2UKLS0gICAgICAgICAgICBmcmVlICh0Mik7Ci0tICAgICAgICB9 Ci0tICAgIH0KLS0KLS0gIHJldHVybiBmc19idWYuZl90eXBlOwotLX0KLS0KLS0vKiBSZXR1cm4g dHJ1ZSBpZiBzb3J0aW5nIGRpcmVudHMgb24gaW5vZGUgbnVtYmVycyBpcyBrbm93biB0byBpbXBy b3ZlCi0tICAgdHJhdmVyc2FsIHBlcmZvcm1hbmNlIGZvciB0aGUgZGlyZWN0b3J5IFAgd2l0aCBk ZXNjcmlwdG9yIERJUl9GRC4KLS0gICBSZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLiAgV2hlbiBpbiBk b3VidCwgcmV0dXJuIHRydWUuCi0tICAgRElSX0ZEIGlzIG5lZ2F0aXZlIGlmIHVuYXZhaWxhYmxl LiAgKi8KLS1zdGF0aWMgYm9vbAotLWRpcmVudF9pbm9kZV9zb3J0X21heV9iZV91c2VmdWwgKEZU U0VOVFJZIGNvbnN0ICpwLCBpbnQgZGlyX2ZkKQotLXsKLS0gIC8qIFNraXAgdGhlIHNvcnQgb25s eSBpZiB3ZSBjYW4gZGV0ZXJtaW5lIGVmZmljaWVudGx5Ci0tICAgICB0aGF0IHNraXBwaW5nIGl0 IGlzIHRoZSByaWdodCB0aGluZyB0byBkby4KLS0gICAgIFRoZSBjb3N0IG9mIHBlcmZvcm1pbmcg YW4gdW5uZWNlc3Nhcnkgc29ydCBpcyBuZWdsaWdpYmxlLAotLSAgICAgd2hpbGUgdGhlIGNvc3Qg b2YgKm5vdCogcGVyZm9ybWluZyBpdCBjYW4gYmUgTyhOXjIpIHdpdGgKLS0gICAgIGEgdmVyeSBs YXJnZSBjb25zdGFudC4gICovCi0tCi0tICBzd2l0Y2ggKGZpbGVzeXN0ZW1fdHlwZSAocCwgZGly X2ZkKSkKLS0gICAgewotLSAgICBjYXNlIFNfTUFHSUNfTFVTVFJFOgotLSAgICAgIC8qIE9uIEx1 c3RyZSwgc29ydGluZyBkaXJlY3RvcnkgZW50cmllcyBpbnRlcmZlcmVzIHdpdGggaXRzIGFiaWxp dHkgdG8KLS0gICAgICAgICBwcmVmZXRjaCBmaWxlIG1ldGFkYXRhICh2aWEgc3RhdGFoZWFkKS4g IFRoaXMgd291bGQgbWFrZSBhIGNvbW1hbmQKLS0gICAgICAgICBsaWtlICdkdScgYXJvdW5kIDkg dGltZXMgc2xvd2VyLiAgU2VlCi0tICAgICAgICAgPGh0dHBzOi8vYnVncy5nbnUub3JnLzgwMTA2 Pi4gICovCi0tICAgIGNhc2UgU19NQUdJQ19DSUZTOgotLSAgICBjYXNlIFNfTUFHSUNfTkZTOgot LSAgICBjYXNlIFNfTUFHSUNfVE1QRlM6Ci0tICAgICAgLyogT24gYSBmaWxlIHN5c3RlbSBvZiBh bnkgb2YgdGhlc2UgdHlwZXMsIHNvcnRpbmcKLS0gICAgICAgICBpcyB1bm5lY2Vzc2FyeSwgYW5k IGhlbmNlIHdhc3RlZnVsLiAgKi8KLS0gICAgICByZXR1cm4gZmFsc2U7Ci0tCi0tICAgIGRlZmF1 bHQ6Ci0tICAgICAgcmV0dXJuIHRydWU7Ci0tICAgIH0KLS19Ci0tCi0tLyogR2l2ZW4gYW4gRlRT IGVudHJ5IFAgZm9yIGEgZGlyZWN0b3J5IHdpdGggZGVzY3JpcHRvciBESVJfRkQsCi0tICAgcmV0 dXJuIHdoZXRoZXIgaXQgaXMgdmFsaWQgdG8gYXBwbHkgbGVhZiBvcHRpbWl6YXRpb24uCi0tICAg VGhlIG9wdGltaXphdGlvbiBpcyB2YWxpZCBpZiBhIGRpcmVjdG9yeSdzIHN0X25saW5rIHZhbHVl IGVxdWFsCi0tICAgdG8gTUlOX0RJUl9OTElOSyBtZWFucyB0aGUgZGlyZWN0b3J5IGhhcyBubyBz dWJkaXJlY3Rvcmllcy4KLS0gICBESVJfRkQgaXMgbmVnYXRpdmUgaWYgdW5hdmFpbGFibGUuICAq LwotLXN0YXRpYyBlbnVtIGxlYWZfb3B0aW1pemF0aW9uCi0tbGVhZl9vcHRpbWl6YXRpb24gKEZU U0VOVFJZIGNvbnN0ICpwLCBpbnQgZGlyX2ZkKQotLXsKLS0gIHN3aXRjaCAoZmlsZXN5c3RlbV90 eXBlIChwLCBkaXJfZmQpKQotLSAgICB7Ci0tICAgIGNhc2UgMDoKLS0gICAgICAvKiBMZWFmIG9w dGltaXphdGlvbiBpcyB1bnNhZmUgaWYgdGhlIGZpbGUgc3lzdGVtIHR5cGUgaXMgdW5rbm93bi4g ICovCi0tICAgICAgRkFMTFRIUk9VR0g7Ci0tICAgIGNhc2UgU19NQUdJQ19BRlM6Ci0tICAgICAg LyogQWx0aG91Z2ggQUZTIG1vdW50IHBvaW50cyBhcmUgbm90IGNvdW50ZWQgaW4gc3Rfbmxpbmss IHRoZXkKLS0gICAgICAgICBhY3QgbGlrZSBkaXJlY3Rvcmllcy4gIFNlZSA8aHR0cHM6Ly9idWdz LmRlYmlhbi5vcmcvMTQzMTExPi4gICovCi0tICAgICAgRkFMTFRIUk9VR0g7Ci0tICAgIGNhc2Ug U19NQUdJQ19DSUZTOgotLSAgICAgIC8qIExlYWYgb3B0aW1pemF0aW9uIGNhdXNlcyAnZmluZCcg dG8gYWJvcnQuICBTZWUKLS0gICAgICAgICA8aHR0cHM6Ly9saXN0cy5nbnUub3JnL3IvYnVnLWdu dWxpYi8yMDE4LTA0L21zZzAwMDE1Lmh0bWw+LiAgKi8KLS0gICAgICBGQUxMVEhST1VHSDsKLS0g ICAgY2FzZSBTX01BR0lDX05GUzoKLS0gICAgICAvKiBORlMgcHJvdmlkZXMgdXNhYmxlIGRpcmVu dC5kX3R5cGUgYnV0IG5vdCBuZWNlc3NhcmlseSBmb3IgYWxsIGVudHJpZXMKLS0gICAgICAgICBv ZiBsYXJnZSBkaXJlY3Rvcmllcywgc28gYXMgcGVyIDxodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5j b20vMTI1MjU0OT4KLS0gICAgICAgICBORlMgc2hvdWxkIHJldHVybiB0cnVlLiAgSG93ZXZlciBz dF9ubGluayB2YWx1ZXMgYXJlIG5vdCBhY2N1cmF0ZSBvbgotLSAgICAgICAgIGFsbCBpbXBsZW1l bnRhdGlvbnMgYXMgcGVyIDxodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vMTI5OTE2OT4uICAq LwotLSAgICAgIEZBTExUSFJPVUdIOwotLSAgICBjYXNlIFNfTUFHSUNfUFJPQzoKLS0gICAgICAv KiBQZXIgPGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9 MTQzMTExPiAvcHJvYwotLSAgICAgICAgIG1heSBoYXZlIGJvZ3VzIHN0YXQuc3RfbmxpbmsgdmFs dWVzLiAgKi8KLS0gICAgICByZXR1cm4gTk9fTEVBRl9PUFRJTUlaQVRJT047Ci0tCi0tICAgIGRl ZmF1bHQ6Ci0tICAgICAgcmV0dXJuIE9LX0xFQUZfT1BUSU1JWkFUSU9OOwotLSAgICB9Ci0tfQot LQotLSNlbHNlCi0tc3RhdGljIGJvb2wKLS1kaXJlbnRfaW5vZGVfc29ydF9tYXlfYmVfdXNlZnVs IChfR0xfVU5VU0VEIEZUU0VOVFJZIGNvbnN0ICpwLAotLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9HTF9VTlVTRUQgaW50IGRpcl9mZCkKLS17Ci0tICByZXR1cm4gdHJ1ZTsKLS19 Ci0tc3RhdGljIGVudW0gbGVhZl9vcHRpbWl6YXRpb24KLS1sZWFmX29wdGltaXphdGlvbiAoX0dM X1VOVVNFRCBGVFNFTlRSWSBjb25zdCAqcCwgX0dMX1VOVVNFRCBpbnQgZGlyX2ZkKQotLXsKLS0g IHJldHVybiBOT19MRUFGX09QVElNSVpBVElPTjsKLS19Ci0tI2VuZGlmCi0tCi0tLyoKLS0gKiBT cGVjaWFsIGNhc2Ugb2YgIi8iIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgbmFtZSBzbyB0aGF0IHNs YXNoZXMgYXJlbid0Ci0tICogYXBwZW5kZWQgd2hpY2ggd291bGQgY2F1c2UgZmlsZSBuYW1lcyB0 byBiZSB3cml0dGVuIGFzICIuLi4uLy9mb28iLgotLSAqLwotLSNkZWZpbmUgTkFQUEVORChwKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0g ICAgICAgIChwLT5mdHNfcGF0aFtwLT5mdHNfcGF0aGxlbiAtIDFdID09ICcvJyAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0tICAgICAgICAgICAgPyBwLT5mdHNfcGF0aGxlbiAtIDEgOiBwLT5m dHNfcGF0aGxlbikKLS0KLS1GVFNFTlRSWSAqCi0tRlRTX1JFQUQgKEZUU09CSiAqc3ApCi0tewot LSAgICAgICAgLyogSWYgZmluaXNoZWQgb3IgdW5yZWNvdmVyYWJsZSBlcnJvciwgcmV0dXJuIE5V TEwuICovCi0tICAgICAgICBpZiAoc3AtPmZ0c19jdXIgPT0gTlVMTCB8fCBJU1NFVChGVFNfU1RP UCkpCi0tICAgICAgICAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0tCi0tICAgICAgICAvKiBTZXQg Y3VycmVudCBub2RlIHBvaW50ZXIuICovCi0tICAgICAgICByZWdpc3RlciBGVFNFTlRSWSAqcCA9 IHNwLT5mdHNfY3VyOwotLQotLSAgICAgICAgLyogU2F2ZSBhbmQgemVybyBvdXQgdXNlciBpbnN0 cnVjdGlvbnMuICovCi0tICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBzaG9ydCBpbnQgaW5zdHIg PSBwLT5mdHNfaW5zdHI7Ci0tICAgICAgICBwLT5mdHNfaW5zdHIgPSBGVFNfTk9JTlNUUjsKLS0K LS0gICAgICAgIC8qIEFueSB0eXBlIG9mIGZpbGUgbWF5IGJlIHJlLXZpc2l0ZWQ7IHJlLXN0YXQg YW5kIHJlLXR1cm4uICovCi0tICAgICAgICBpZiAoaW5zdHIgPT0gRlRTX0FHQUlOKSB7Ci0tICAg ICAgICAgICAgICAgIHAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIHAsIGZhbHNlKTsKLS0gICAg ICAgICAgICAgICAgcmV0dXJuIChwKTsKLS0gICAgICAgIH0KLS0gICAgICAgIERwcmludGYgKCgi ZnRzX3JlYWQ6IHA9JXNcbiIsCi0tICAgICAgICAgICAgICAgICAgcC0+ZnRzX2luZm8gPT0gRlRT X0lOSVQgPyAiIiA6IHAtPmZ0c19wYXRoKSk7Ci0tCi0tICAgICAgICAvKgotLSAgICAgICAgICog Rm9sbG93aW5nIGEgc3ltbGluayAtLSBTTE5PTkUgdGVzdCBhbGxvd3MgYXBwbGljYXRpb24gdG8g c2VlCi0tICAgICAgICAgKiBTTE5PTkUgYW5kIHJlY292ZXIuICBJZiBpbmRpcmVjdGluZyB0aHJv dWdoIGEgc3ltbGluaywgaGF2ZQotLSAgICAgICAgICoga2VlcCBhIHBvaW50ZXIgdG8gY3VycmVu dCBsb2NhdGlvbi4gIElmIHVuYWJsZSB0byBnZXQgdGhhdAotLSAgICAgICAgICogcG9pbnRlciwg Zm9sbG93IGZhaWxzLgotLSAgICAgICAgICovCi0tICAgICAgICBpZiAoaW5zdHIgPT0gRlRTX0ZP TExPVyAmJgotLSAgICAgICAgICAgIChwLT5mdHNfaW5mbyA9PSBGVFNfU0wgfHwgcC0+ZnRzX2lu Zm8gPT0gRlRTX1NMTk9ORSkpIHsKLS0gICAgICAgICAgICAgICAgcC0+ZnRzX2luZm8gPSBmdHNf c3RhdChzcCwgcCwgdHJ1ZSk7Ci0tICAgICAgICAgICAgICAgIGlmIChwLT5mdHNfaW5mbyA9PSBG VFNfRCAmJiAhSVNTRVQoRlRTX05PQ0hESVIpKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAg aWYgKChwLT5mdHNfc3ltZmQgPSBkaXJvcGVuIChzcCwgIi4iKSkgPCAwKSB7Ci0tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfZXJybm8gPSBlcnJubzsKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19pbmZvID0gRlRTX0VSUjsKLS0gICAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2UKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAt PmZ0c19mbGFncyB8PSBGVFNfU1lNRk9MTE9XOwotLSAgICAgICAgICAgICAgICB9Ci0tICAgICAg ICAgICAgICAgIGdvdG8gY2hlY2tfZm9yX2RpcjsKLS0gICAgICAgIH0KLS0KLS0gICAgICAgIC8q IERpcmVjdG9yeSBpbiBwcmUtb3JkZXIuICovCi0tICAgICAgICBpZiAocC0+ZnRzX2luZm8gPT0g RlRTX0QpIHsKLS0gICAgICAgICAgICAgICAgLyogSWYgc2tpcHBlZCBvciBjcm9zc2VkIG1vdW50 IHBvaW50LCBkbyBwb3N0LW9yZGVyIHZpc2l0LiAqLwotLSAgICAgICAgICAgICAgICBpZiAoaW5z dHIgPT0gRlRTX1NLSVAgfHwKLS0gICAgICAgICAgICAgICAgICAgIChJU1NFVChGVFNfWERFVikg JiYgcC0+ZnRzX3N0YXRwLT5zdF9kZXYgIT0gc3AtPmZ0c19kZXYpKSB7Ci0tICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHAtPmZ0c19mbGFncyAmIEZUU19TWU1GT0xMT1cpCi0tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodm9pZCljbG9zZShwLT5mdHNfc3ltZmQpOwotLSAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChzcC0+ZnRzX2NoaWxkKSB7Ci0tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmdHNfbGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzcC0+ZnRzX2NoaWxkID0gTlVMTDsKLS0gICAgICAgICAgICAg ICAgICAgICAgICB9Ci0tICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2luZm8gPSBGVFNf RFA7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgTEVBVkVfRElSIChzcCwgcCwgIjEiKTsKLS0g ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHApOwotLSAgICAgICAgICAgICAgICB9Ci0t Ci0tICAgICAgICAgICAgICAgIC8qIFJlYnVpbGQgaWYgb25seSByZWFkIHRoZSBuYW1lcyBhbmQg bm93IHRyYXZlcnNpbmcuICovCi0tICAgICAgICAgICAgICAgIGlmIChzcC0+ZnRzX2NoaWxkICE9 IE5VTEwgJiYgSVNTRVQoRlRTX05BTUVPTkxZKSkgewotLSAgICAgICAgICAgICAgICAgICAgICAg IENMUihGVFNfTkFNRU9OTFkpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0c19sZnJlZShz cC0+ZnRzX2NoaWxkKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBzcC0+ZnRzX2NoaWxkID0g TlVMTDsKLS0gICAgICAgICAgICAgICAgfQotLQotLSAgICAgICAgICAgICAgICAvKgotLSAgICAg ICAgICAgICAgICAgKiBDZCB0byB0aGUgc3ViZGlyZWN0b3J5LgotLSAgICAgICAgICAgICAgICAg KgotLSAgICAgICAgICAgICAgICAgKiBJZiBoYXZlIGFscmVhZHkgcmVhZCBhbmQgbm93IGZhaWwg dG8gY2hkaXIsIHdoYWNrIHRoZSBsaXN0Ci0tICAgICAgICAgICAgICAgICAqIHRvIG1ha2UgdGhl IG5hbWVzIGNvbWUgb3V0IHJpZ2h0LCBhbmQgc2V0IHRoZSBwYXJlbnQgZXJybm8KLS0gICAgICAg ICAgICAgICAgICogc28gdGhlIGFwcGxpY2F0aW9uIHdpbGwgZXZlbnR1YWxseSBnZXQgYW4gZXJy b3IgY29uZGl0aW9uLgotLSAgICAgICAgICAgICAgICAgKiBTZXQgdGhlIEZUU19ET05UQ0hESVIg ZmxhZyBzbyB0aGF0IHdoZW4gd2UgbG9naWNhbGx5IGNoYW5nZQotLSAgICAgICAgICAgICAgICAg KiBkaXJlY3RvcmllcyBiYWNrIHRvIHRoZSBwYXJlbnQgd2UgZG9uJ3QgZG8gYSBjaGRpci4KLS0g ICAgICAgICAgICAgICAgICoKLS0gICAgICAgICAgICAgICAgICogSWYgaGF2ZW4ndCByZWFkIGRv IHNvLiAgSWYgdGhlIHJlYWQgZmFpbHMsIGZ0c19idWlsZCBzZXRzCi0tICAgICAgICAgICAgICAg ICAqIEZUU19TVE9QIG9yIHRoZSBmdHNfaW5mbyBmaWVsZCBvZiB0aGUgbm9kZS4KLS0gICAgICAg ICAgICAgICAgICovCi0tICAgICAgICAgICAgICAgIGlmIChzcC0+ZnRzX2NoaWxkICE9IE5VTEwp IHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnRzX3NhZmVfY2hhbmdlZGlyKHNwLCBw LCAtMSwgcC0+ZnRzX2FjY3BhdGgpKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwLT5mdHNfZXJybm8gPSBlcnJubzsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHAtPmZ0c19mbGFncyB8PSBGVFNfRE9OVENIRElSOwotLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm9yIChwID0gc3AtPmZ0c19jaGlsZDsgcCAhPSBOVUxMOwotLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcC0+ZnRzX2xpbmspCi0tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19hY2NwYXRoID0KLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19wYXJlbnQtPmZ0c19hY2Nw YXRoOwotLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAgfSBlbHNl IGlmICgoc3AtPmZ0c19jaGlsZCA9IGZ0c19idWlsZChzcCwgQlJFQUQpKSA9PSBOVUxMKSB7Ci0t ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElTU0VUKEZUU19TVE9QKSkKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0tICAgICAgICAgICAgICAgICAg ICAgICAgLyogSWYgZnRzX2J1aWxkJ3MgY2FsbCB0byBmdHNfc2FmZV9jaGFuZ2VkaXIgZmFpbGVk Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSBpdCB3YXMgbm90IGFibGUgdG8g ZmNoZGlyIGludG8gYQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSwg dGVsbCB0aGUgY2FsbGVyLiAgKi8KLS0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocC0+ZnRz X2Vycm5vICYmIHAtPmZ0c19pbmZvICE9IEZUU19ETlIpCi0tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwLT5mdHNfaW5mbyA9IEZUU19FUlI7Ci0tICAgICAgICAgICAgICAgICAgICAg ICAgTEVBVkVfRElSIChzcCwgcCwgIjIiKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gKHApOwotLSAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAgICAgIHAgPSBzcC0+ZnRz X2NoaWxkOwotLSAgICAgICAgICAgICAgICBzcC0+ZnRzX2NoaWxkID0gTlVMTDsKLS0gICAgICAg ICAgICAgICAgZ290byBuYW1lOwotLSAgICAgICAgfQotLQotLSAgICAgICAgLyogTW92ZSB0byB0 aGUgbmV4dCBub2RlIG9uIHRoaXMgbGV2ZWwuICovCi0tbmV4dDogOwotLSAgICAgICAgcmVnaXN0 ZXIgRlRTRU5UUlkgKnRtcCA9IHA7Ci0tCi0tICAgICAgICAvKiBJZiB3ZSBoYXZlIHNvIG1hbnkg ZGlyZWN0b3J5IGVudHJpZXMgdGhhdCB3ZSdyZSByZWFkaW5nIHRoZW0KLS0gICAgICAgICAgIGlu IGJhdGNoZXMsIGFuZCB3ZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgYmF0Y2gs Ci0tICAgICAgICAgICByZWFkIGluIGEgbmV3IGJhdGNoLiAgKi8KLS0gICAgICAgIGlmIChwLT5m dHNfbGluayA9PSBOVUxMICYmIEZUU0VOVF9ESVJQKHAtPmZ0c19wYXJlbnQpKQotLSAgICAgICAg ICB7Ci0tICAgICAgICAgICAgcCA9IHRtcC0+ZnRzX3BhcmVudDsKLS0gICAgICAgICAgICBzcC0+ ZnRzX2N1ciA9IHA7Ci0tICAgICAgICAgICAgc3AtPmZ0c19wYXRoW3AtPmZ0c19wYXRobGVuXSA9 ICdcMCc7Ci0tCi0tICAgICAgICAgICAgaWYgKChwID0gZnRzX2J1aWxkIChzcCwgQlJFQUQpKSA9 PSBOVUxMKQotLSAgICAgICAgICAgICAgewotLSAgICAgICAgICAgICAgICBpZiAoSVNTRVQoRlRT X1NUT1ApKQotLSAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotLSAgICAgICAgICAgICAg ICBnb3RvIGNkX2RvdF9kb3Q7Ci0tICAgICAgICAgICAgICB9Ci0tCi0tICAgICAgICAgICAgZnJl ZShGVFNFTlRfV1JBUFBFUih0bXApKTsKLS0gICAgICAgICAgICBnb3RvIG5hbWU7Ci0tICAgICAg ICAgIH0KLS0KLS0gICAgICAgIGlmICgocCA9IHAtPmZ0c19saW5rKSAhPSBOVUxMKSB7Ci0tICAg ICAgICAgICAgICAgIHNwLT5mdHNfY3VyID0gcDsKLS0gICAgICAgICAgICAgICAgZnJlZShGVFNF TlRfV1JBUFBFUih0bXApKTsKLS0KLS0gICAgICAgICAgICAgICAgLyoKLS0gICAgICAgICAgICAg ICAgICogSWYgcmVhY2hlZCB0aGUgdG9wLCByZXR1cm4gdG8gdGhlIG9yaWdpbmFsIGRpcmVjdG9y eSAob3IKLS0gICAgICAgICAgICAgICAgICogdGhlIHJvb3Qgb2YgdGhlIHRyZWUpLCBhbmQgbG9h ZCB0aGUgZmlsZSBuYW1lcyBmb3IgdGhlIG5leHQKLS0gICAgICAgICAgICAgICAgICogcm9vdC4K LS0gICAgICAgICAgICAgICAgICovCi0tICAgICAgICAgICAgICAgIGlmIChwLT5mdHNfbGV2ZWwg PT0gRlRTX1JPT1RMRVZFTCkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN0b3Jl X2luaXRpYWxfY3dkKHNwKSkgewotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VU KEZUU19TVE9QKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTlVM TCk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgICAgICAg IGZyZWVfZGlyKHNwKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBmdHNfbG9hZChzcCwgcCk7 Ci0tICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgc2V0dXBfZGlyKHNwKSkgewotLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9kaXIoc3ApOwotLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKLS0gICAgICAgICAgICAgICAgICAgICAg ICB9Ci0tICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjaGVja19mb3JfZGlyOwotLSAgICAg ICAgICAgICAgICB9Ci0tCi0tICAgICAgICAgICAgICAgIC8qCi0tICAgICAgICAgICAgICAgICAq IFVzZXIgbWF5IGhhdmUgY2FsbGVkIGZ0c19zZXQgb24gdGhlIG5vZGUuICBJZiBza2lwcGVkLAot LSAgICAgICAgICAgICAgICAgKiBpZ25vcmUuICBJZiBmb2xsb3dlZCwgZ2V0IGEgZmlsZSBkZXNj cmlwdG9yIHNvIHdlIGNhbgotLSAgICAgICAgICAgICAgICAgKiBnZXQgYmFjayBpZiBuZWNlc3Nh cnkuCi0tICAgICAgICAgICAgICAgICAqLwotLSAgICAgICAgICAgICAgICBpZiAocC0+ZnRzX2lu c3RyID09IEZUU19TS0lQKQotLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dDsKLS0g ICAgICAgICAgICAgICAgaWYgKHAtPmZ0c19pbnN0ciA9PSBGVFNfRk9MTE9XKSB7Ci0tICAgICAg ICAgICAgICAgICAgICAgICAgcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChzcCwgcCwgdHJ1ZSk7Ci0t ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAtPmZ0c19pbmZvID09IEZUU19EICYmICFJU1NF VChGVFNfTk9DSERJUikpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo cC0+ZnRzX3N5bWZkID0gZGlyb3BlbiAoc3AsICIuIikpIDwgMCkgewotLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfZXJybm8gPSBlcnJubzsKLS0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2luZm8gPSBGVFNfRVJSOwot LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19mbGFncyB8PSBGVFNfU1lNRk9MTE9XOwot LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAgICAgICAgICBwLT5m dHNfaW5zdHIgPSBGVFNfTk9JTlNUUjsKLS0gICAgICAgICAgICAgICAgfQotLQotLW5hbWU6ICAg ICAgICAgICB7Ci0tICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgY2hhciAqdCA9IHNwLT5mdHNf cGF0aCArIE5BUFBFTkQocC0+ZnRzX3BhcmVudCk7Ci0tICAgICAgICAgICAgICAgICAgKnQrKyA9 ICcvJzsKLS0gICAgICAgICAgICAgICAgICBtZW1tb3ZlKHQsIHAtPmZ0c19uYW1lLCBwLT5mdHNf bmFtZWxlbiArIDEpOwotLSAgICAgICAgICAgICAgICB9Ci0tY2hlY2tfZm9yX2RpcjoKLS0gICAg ICAgICAgICAgICAgc3AtPmZ0c19jdXIgPSBwOwotLSAgICAgICAgICAgICAgICBpZiAocC0+ZnRz X2luZm8gPT0gRlRTX05TT0spCi0tICAgICAgICAgICAgICAgICAgewotLSAgICAgICAgICAgICAg ICAgICAgaWYgKHAtPmZ0c19zdGF0cC0+c3Rfc2l6ZSA9PSBGVFNfU1RBVF9SRVFVSVJFRCkKLS0g ICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChzcCwgcCwgZmFsc2Up OwotLSAgICAgICAgICAgICAgICAgICAgZWxzZQotLSAgICAgICAgICAgICAgICAgICAgICBmdHNf YXNzZXJ0IChwLT5mdHNfc3RhdHAtPnN0X3NpemUgPT0gRlRTX05PX1NUQVRfUkVRVUlSRUQpOwot LSAgICAgICAgICAgICAgICAgIH0KLS0KLS0gICAgICAgICAgICAgICAgLyogU2tpcCBmaWxlcyB3 aXRoIGRpZmZlcmVudCBkZXZpY2UgbnVtYmVycyB3aGVuIEZUU19NT1VOVAotLSAgICAgICAgICAg ICAgICAgICBpcyBzZXQuICAqLwotLSAgICAgICAgICAgICAgICBpZiAoSVNTRVQgKEZUU19NT1VO VCkgJiYgcC0+ZnRzX2luZm8gIT0gRlRTX05TICYmCi0tICAgICAgICAgICAgICAgICAgICBwLT5m dHNfbGV2ZWwgIT0gRlRTX1JPT1RMRVZFTCAmJgotLSAgICAgICAgICAgICAgICAgICAgcC0+ZnRz X3N0YXRwLT5zdF9kZXYgIT0gc3AtPmZ0c19kZXYpCi0tICAgICAgICAgICAgICAgICAgICAgIGdv dG8gbmV4dDsKLS0KLS0gICAgICAgICAgICAgICAgaWYgKHAtPmZ0c19pbmZvID09IEZUU19EKQot LSAgICAgICAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAgICAgICAgIC8qIE5vdyB0aGF0IFAt PmZ0c19zdGF0cCBpcyBndWFyYW50ZWVkIHRvIGJlIHZhbGlkLCBpZgotLSAgICAgICAgICAgICAg ICAgICAgICAgdGhpcyBpcyBhIGNvbW1hbmQtbGluZSBkaXJlY3RvcnksIHJlY29yZCBpdHMgZGV2 aWNlCi0tICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIsIHRvIGJlIHVzZWQgZm9yIEZUU19N T1VOVCBhbmQgRlRTX1hERVYuICAqLwotLSAgICAgICAgICAgICAgICAgICAgaWYgKHAtPmZ0c19s ZXZlbCA9PSBGVFNfUk9PVExFVkVMKQotLSAgICAgICAgICAgICAgICAgICAgICBzcC0+ZnRzX2Rl diA9IHAtPmZ0c19zdGF0cC0+c3RfZGV2OwotLSAgICAgICAgICAgICAgICAgICAgRHByaW50ZiAo KCIgIGVudGVyaW5nOiAlc1xuIiwgcC0+ZnRzX3BhdGgpKTsKLS0gICAgICAgICAgICAgICAgICAg IGlmICghIGVudGVyX2RpciAoc3AsIHApKQotLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g TlVMTDsKLS0gICAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAgICAgIHJldHVybiBwOwot LSAgICAgICAgfQotLWNkX2RvdF9kb3Q6Ci0tCi0tICAgICAgICAvKiBNb3ZlIHVwIHRvIHRoZSBw YXJlbnQgbm9kZS4gKi8KLS0gICAgICAgIHAgPSB0bXAtPmZ0c19wYXJlbnQ7Ci0tICAgICAgICBz cC0+ZnRzX2N1ciA9IHA7Ci0tICAgICAgICBmcmVlKEZUU0VOVF9XUkFQUEVSKHRtcCkpOwotLQot LSAgICAgICAgaWYgKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9PVFBBUkVOVExFVkVMKSB7Ci0tICAg ICAgICAgICAgICAgIC8qCi0tICAgICAgICAgICAgICAgICAqIERvbmU7IGZyZWUgZXZlcnl0aGlu ZyB1cCBhbmQgc2V0IGVycm5vIHRvIDAgc28gdGhlIHVzZXIKLS0gICAgICAgICAgICAgICAgICog Y2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gZXJyb3IgYW5kIEVPRi4KLS0gICAgICAgICAgICAgICAg ICovCi0tICAgICAgICAgICAgICAgIGZyZWUoRlRTRU5UX1dSQVBQRVIocCkpOwotLSAgICAgICAg ICAgICAgICBfX3NldF9lcnJubyAoMCk7Ci0tICAgICAgICAgICAgICAgIHJldHVybiAoc3AtPmZ0 c19jdXIgPSBOVUxMKTsKLS0gICAgICAgIH0KLS0KLS0gICAgICAgIGZ0c19hc3NlcnQgKHAtPmZ0 c19pbmZvICE9IEZUU19OU09LKTsKLS0KLS0gICAgICAgIC8qIE5VTCB0ZXJtaW5hdGUgdGhlIGZp bGUgbmFtZS4gICovCi0tICAgICAgICBzcC0+ZnRzX3BhdGhbcC0+ZnRzX3BhdGhsZW5dID0gJ1ww JzsKLS0KLS0gICAgICAgIC8qCi0tICAgICAgICAgKiBSZXR1cm4gdG8gdGhlIHBhcmVudCBkaXJl Y3RvcnkuICBJZiBhdCBhIHJvb3Qgbm9kZSwgcmVzdG9yZQotLSAgICAgICAgICogdGhlIGluaXRp YWwgd29ya2luZyBkaXJlY3RvcnkuICBJZiB3ZSBjYW1lIHRocm91Z2ggYSBzeW1saW5rLAotLSAg ICAgICAgICogZ28gYmFjayB0aHJvdWdoIHRoZSBmaWxlIGRlc2NyaXB0b3IuICBPdGhlcndpc2Us IG1vdmUgdXAKLS0gICAgICAgICAqIG9uZSBsZXZlbCwgdmlhICIuLiIuCi0tICAgICAgICAgKi8K LS0gICAgICAgIGlmIChwLT5mdHNfbGV2ZWwgPT0gRlRTX1JPT1RMRVZFTCkgewotLSAgICAgICAg ICAgICAgICBpZiAocmVzdG9yZV9pbml0aWFsX2N3ZChzcCkpIHsKLS0gICAgICAgICAgICAgICAg ICAgICAgICBwLT5mdHNfZXJybm8gPSBlcnJubzsKLS0gICAgICAgICAgICAgICAgICAgICAgICBT RVQoRlRTX1NUT1ApOwotLSAgICAgICAgICAgICAgICB9Ci0tICAgICAgICB9IGVsc2UgaWYgKHAt PmZ0c19mbGFncyAmIEZUU19TWU1GT0xMT1cpIHsKLS0gICAgICAgICAgICAgICAgaWYgKEZDSERJ UihzcCwgcC0+ZnRzX3N5bWZkKSkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19l cnJubyA9IGVycm5vOwotLSAgICAgICAgICAgICAgICAgICAgICAgIFNFVChGVFNfU1RPUCk7Ci0t ICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAgKHZvaWQpY2xvc2UocC0+ZnRzX3N5 bWZkKTsKLS0gICAgICAgIH0gZWxzZSBpZiAoIShwLT5mdHNfZmxhZ3MgJiBGVFNfRE9OVENIRElS KSAmJgotLSAgICAgICAgICAgICAgICAgICBmdHNfc2FmZV9jaGFuZ2VkaXIoc3AsIHAtPmZ0c19w YXJlbnQsIC0xLCAiLi4iKSkgewotLSAgICAgICAgICAgICAgICBwLT5mdHNfZXJybm8gPSBlcnJu bzsKLS0gICAgICAgICAgICAgICAgU0VUKEZUU19TVE9QKTsKLS0gICAgICAgIH0KLS0KLS0gICAg ICAgIC8qIElmIHRoZSBkaXJlY3RvcnkgY2F1c2VzIGEgY3ljbGUsIHByZXNlcnZlIHRoZSBGVFNf REMgZmxhZyBhbmQga2VlcAotLSAgICAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgZGV2L2lubyBw YWlyIGluIHRoZSBoYXNoIHRhYmxlLiAgSXQgaXMgZ29pbmcgdG8gYmUKLS0gICAgICAgICAgIHJl bW92ZWQgd2hlbiBsZWF2aW5nIHRoZSBvcmlnaW5hbCBkaXJlY3RvcnkuICAqLwotLSAgICAgICAg aWYgKHAtPmZ0c19pbmZvICE9IEZUU19EQykgewotLSAgICAgICAgICAgICAgICBwLT5mdHNfaW5m byA9IHAtPmZ0c19lcnJubyA/IEZUU19FUlIgOiBGVFNfRFA7Ci0tICAgICAgICAgICAgICAgIGlm IChwLT5mdHNfZXJybm8gPT0gMCkKLS0gICAgICAgICAgICAgICAgICAgICAgICBMRUFWRV9ESVIg KHNwLCBwLCAiMyIpOwotLSAgICAgICAgfQotLSAgICAgICAgcmV0dXJuIElTU0VUKEZUU19TVE9Q KSA/IE5VTEwgOiBwOwotLX0KLS0KLS0vKgotLSAqIEZ0c19zZXQgdGFrZXMgdGhlIHN0cmVhbSBh cyBhbiBhcmd1bWVudCBhbHRob3VnaCBpdCdzIG5vdCB1c2VkIGluIHRoaXMKLS0gKiBpbXBsZW1l bnRhdGlvbjsgaXQgd291bGQgYmUgbmVjZXNzYXJ5IGlmIGFueW9uZSB3YW50ZWQgdG8gYWRkIGds b2JhbAotLSAqIHNlbWFudGljcyB0byBmdHMgdXNpbmcgZnRzX3NldC4gIEFuIGVycm9yIHJldHVy biBpcyBhbGxvd2VkIGZvciBzaW1pbGFyCi0tICogcmVhc29ucy4KLS0gKi8KLS0vKiBBUkdTVVNF RCAqLwotLWludAotLUZUU19TRVQgKF9HTF9VTlVTRUQgRlRTT0JKICpzcCwgRlRTRU5UUlkgKnAs IGludCBpbnN0cikKLS17Ci0tICAgICAgICBpZiAoaW5zdHIgIT0gMCAmJiBpbnN0ciAhPSBGVFNf QUdBSU4gJiYgaW5zdHIgIT0gRlRTX0ZPTExPVyAmJgotLSAgICAgICAgICAgIGluc3RyICE9IEZU U19OT0lOU1RSICYmIGluc3RyICE9IEZUU19TS0lQKSB7Ci0tICAgICAgICAgICAgICAgIF9fc2V0 X2Vycm5vIChFSU5WQUwpOwotLSAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwotLSAgICAgICAg fQotLSAgICAgICAgcC0+ZnRzX2luc3RyID0gaW5zdHI7Ci0tICAgICAgICByZXR1cm4gKDApOwot LX0KLS0KLS1GVFNFTlRSWSAqCi0tRlRTX0NISUxEUkVOIChGVFNPQkogKnNwLCBpbnQgaW5zdHIp Ci0tewotLSAgICAgICAgaWYgKGluc3RyICE9IDAgJiYgaW5zdHIgIT0gRlRTX05BTUVPTkxZKSB7 Ci0tICAgICAgICAgICAgICAgIF9fc2V0X2Vycm5vIChFSU5WQUwpOwotLSAgICAgICAgICAgICAg ICByZXR1cm4gKE5VTEwpOwotLSAgICAgICAgfQotLQotLSAgICAgICAgLyogU2V0IGN1cnJlbnQg bm9kZSBwb2ludGVyLiAqLwotLSAgICAgICAgcmVnaXN0ZXIgRlRTRU5UUlkgKnAgPSBzcC0+ZnRz X2N1cjsKLS0KLS0gICAgICAgIC8qCi0tICAgICAgICAgKiBFcnJubyBzZXQgdG8gMCBzbyB1c2Vy IGNhbiBkaXN0aW5ndWlzaCBlbXB0eSBkaXJlY3RvcnkgZnJvbQotLSAgICAgICAgICogYW4gZXJy b3IuCi0tICAgICAgICAgKi8KLS0gICAgICAgIF9fc2V0X2Vycm5vICgwKTsKLS0KLS0gICAgICAg IC8qIEZhdGFsIGVycm9ycyBzdG9wIGhlcmUuICovCi0tICAgICAgICBpZiAoSVNTRVQoRlRTX1NU T1ApKQotLSAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotLQotLSAgICAgICAgLyogUmV0 dXJuIGxvZ2ljYWwgaGllcmFyY2h5IG9mIHVzZXIncyBhcmd1bWVudHMuICovCi0tICAgICAgICBp ZiAocC0+ZnRzX2luZm8gPT0gRlRTX0lOSVQpCi0tICAgICAgICAgICAgICAgIHJldHVybiAocC0+ ZnRzX2xpbmspOwotLQotLSAgICAgICAgLyoKLS0gICAgICAgICAqIElmIG5vdCBhIGRpcmVjdG9y eSBiZWluZyB2aXNpdGVkIGluIHByZS1vcmRlciwgc3RvcCBoZXJlLiAgQ291bGQKLS0gICAgICAg ICAqIGFsbG93IEZUU19ETlIsIGFzc3VtaW5nIHRoZSB1c2VyIGhhcyBmaXhlZCB0aGUgcHJvYmxl bSwgYnV0IHRoZQotLSAgICAgICAgICogc2FtZSBlZmZlY3QgaXMgYXZhaWxhYmxlIHdpdGggRlRT X0FHQUlOLgotLSAgICAgICAgICovCi0tICAgICAgICBpZiAocC0+ZnRzX2luZm8gIT0gRlRTX0Qg LyogJiYgcC0+ZnRzX2luZm8gIT0gRlRTX0ROUiAqLykKLS0gICAgICAgICAgICAgICAgcmV0dXJu IChOVUxMKTsKLS0KLS0gICAgICAgIC8qIEZyZWUgdXAgYW55IHByZXZpb3VzIGNoaWxkIGxpc3Qu ICovCi0tICAgICAgICBpZiAoc3AtPmZ0c19jaGlsZCAhPSBOVUxMKQotLSAgICAgICAgICAgICAg ICBmdHNfbGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0tCi0tICAgICAgICBpZiAoaW5zdHIgPT0gRlRT X05BTUVPTkxZKSB7Ci0tICAgICAgICAgICAgICAgIFNFVChGVFNfTkFNRU9OTFkpOwotLSAgICAg ICAgICAgICAgICBpbnN0ciA9IEJOQU1FUzsKLS0gICAgICAgIH0gZWxzZQotLSAgICAgICAgICAg ICAgICBpbnN0ciA9IEJDSElMRDsKLS0KLS0gICAgICAgIC8qCi0tICAgICAgICAgKiBJZiB1c2lu ZyBjaGRpciBvbiBhIHJlbGF0aXZlIGZpbGUgbmFtZSBhbmQgY2FsbGVkIEJFRk9SRSBmdHNfcmVh ZAotLSAgICAgICAgICogZG9lcyBpdHMgY2hkaXIgdG8gdGhlIHJvb3Qgb2YgYSB0cmF2ZXJzYWws IHdlIGNhbiBsb3NlIC0tIHdlIG5lZWQgdG8KLS0gICAgICAgICAqIGNoZGlyIGludG8gdGhlIHN1 YmRpcmVjdG9yeSwgYW5kIHdlIGRvbid0IGtub3cgd2hlcmUgdGhlIGN1cnJlbnQKLS0gICAgICAg ICAqIGRpcmVjdG9yeSBpcywgc28gd2UgY2FuJ3QgZ2V0IGJhY2sgc28gdGhhdCB0aGUgdXBjb21p bmcgY2hkaXIgYnkKLS0gICAgICAgICAqIGZ0c19yZWFkIHdpbGwgd29yay4KLS0gICAgICAgICAq LwotLSAgICAgICAgaWYgKHAtPmZ0c19sZXZlbCAhPSBGVFNfUk9PVExFVkVMIHx8IHAtPmZ0c19h Y2NwYXRoWzBdID09ICcvJyB8fAotLSAgICAgICAgICAgIElTU0VUKEZUU19OT0NIRElSKSkKLS0g ICAgICAgICAgICAgICAgcmV0dXJuIChzcC0+ZnRzX2NoaWxkID0gZnRzX2J1aWxkKHNwLCBpbnN0 cikpOwotLQotLSAgICAgICAgaW50IGZkID0gZGlyb3BlbiAoc3AsICIuIik7Ci0tICAgICAgICBp ZiAoZmQgPCAwKQotLSAgICAgICAgICAgICAgICByZXR1cm4gKHNwLT5mdHNfY2hpbGQgPSBOVUxM KTsKLS0gICAgICAgIHNwLT5mdHNfY2hpbGQgPSBmdHNfYnVpbGQoc3AsIGluc3RyKTsKLS0gICAg ICAgIGlmIChJU1NFVChGVFNfQ1dERkQpKQotLSAgICAgICAgICB7Ci0tICAgICAgICAgICAgY3dk X2FkdmFuY2VfZmQgKHNwLCBmZCwgdHJ1ZSk7Ci0tICAgICAgICAgIH0KLS0gICAgICAgIGVsc2UK LS0gICAgICAgICAgewotLSAgICAgICAgICAgIGlmIChmY2hkaXIoZmQpKQotLSAgICAgICAgICAg ICAgewotLSAgICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKLS0gICAgICAg ICAgICAgICAgY2xvc2UgKGZkKTsKLS0gICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKHNhdmVk X2Vycm5vKTsKLS0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgICAgICAgICAgICB9 Ci0tICAgICAgICAgICAgY2xvc2UgKGZkKTsKLS0gICAgICAgICAgfQotLSAgICAgICAgcmV0dXJu IChzcC0+ZnRzX2NoaWxkKTsKLS19Ci0tCi0tLyogQSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIHNv cnQgb24gaW5jcmVhc2luZyBpbm9kZSBudW1iZXIuCi0tICAgRm9yIHNvbWUgZmlsZSBzeXN0ZW0g dHlwZXMsIHNvcnRpbmcgZWl0aGVyIHdheSBtYWtlcyBhIGh1Z2UKLS0gICBwZXJmb3JtYW5jZSBk aWZmZXJlbmNlIGZvciBhIGRpcmVjdG9yeSB3aXRoIHZlcnkgbWFueSBlbnRyaWVzLAotLSAgIGJ1 dCBzb3J0aW5nIG9uIGluY3JlYXNpbmcgdmFsdWVzIGlzIHNsaWdodGx5IGJldHRlciB0aGFuIHNv cnRpbmcKLS0gICBvbiBkZWNyZWFzaW5nIHZhbHVlcy4gIFRoZSBkaWZmZXJlbmNlIGlzIGluIHRo ZSA1JSByYW5nZS4gICovCi0tc3RhdGljIGludAotLWZ0c19jb21wYXJlX2lubyAoRlRTRU5UUlkg Y29uc3QgKiphLCBGVFNFTlRSWSBjb25zdCAqKmIpCi0tewotLSAgcmV0dXJuIF9HTF9DTVAgKGFb MF0tPmZ0c19zdGF0cC0+c3RfaW5vLCBiWzBdLT5mdHNfc3RhdHAtPnN0X2lubyk7Ci0tfQotLQot LS8qIE1hcCB0aGUgZGlyZW50LmRfdHlwZSB2YWx1ZSwgRFRZUEUsIHRvIHRoZSBjb3JyZXNwb25k aW5nIHN0YXQuc3RfbW9kZQotLSAgIFNfSUYqIGJpdCBhbmQgc2V0IFNULnN0X21vZGUsIHRodXMg Y2xlYXJpbmcgYWxsIG90aGVyIGJpdHMgaW4gdGhhdCBmaWVsZC4gICovCi0tc3RhdGljIHZvaWQK LS1zZXRfc3RhdF90eXBlIChzdHJ1Y3QgU1RSVUNUX1NUQVQgKnN0LCB1bnNpZ25lZCBpbnQgZHR5 cGUpCi0tewotLSAgbW9kZV90IHR5cGU7Ci0tICBzd2l0Y2ggKGR0eXBlKQotLSAgICB7Ci0tICAg IGNhc2UgRFRfQkxLOgotLSAgICAgIHR5cGUgPSBTX0lGQkxLOwotLSAgICAgIGJyZWFrOwotLSAg ICBjYXNlIERUX0NIUjoKLS0gICAgICB0eXBlID0gU19JRkNIUjsKLS0gICAgICBicmVhazsKLS0g ICAgY2FzZSBEVF9ESVI6Ci0tICAgICAgdHlwZSA9IFNfSUZESVI7Ci0tICAgICAgYnJlYWs7Ci0t ICAgIGNhc2UgRFRfRklGTzoKLS0gICAgICB0eXBlID0gU19JRklGTzsKLS0gICAgICBicmVhazsK LS0gICAgY2FzZSBEVF9MTks6Ci0tICAgICAgdHlwZSA9IFNfSUZMTks7Ci0tICAgICAgYnJlYWs7 Ci0tICAgIGNhc2UgRFRfUkVHOgotLSAgICAgIHR5cGUgPSBTX0lGUkVHOwotLSAgICAgIGJyZWFr OwotLSAgICBjYXNlIERUX1NPQ0s6Ci0tICAgICAgdHlwZSA9IFNfSUZTT0NLOwotLSAgICAgIGJy ZWFrOwotLSAgICBkZWZhdWx0OgotLSAgICAgIHR5cGUgPSAwOwotLSAgICB9Ci0tICBzdC0+c3Rf bW9kZSA9IHR5cGU7Ci0tfQotLQotLSNkZWZpbmUgY2xvc2VkaXJfYW5kX2NsZWFyKGRpcnApICAg ICAgICAgICAgICAgIFwKLS0gIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0tICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotLSAgICAgIGNsb3NlZGlyIChkaXJwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LS0gICAgICBkaXJwID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgd2hpbGUg KDApCi0tCi0tI2RlZmluZSBmdHNfb3BlbmRpcihmaWxlLCBQZGlyX2ZkKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLS0gICAgICAgIE9QRU5ESVJBVCgoISBJU1NFVChGVFNfTk9DSERJ UikgJiYgSVNTRVQoRlRTX0NXREZEKSAgICAgXAotLSAgICAgICAgICAgICAgICAgICA/IHNwLT5m dHNfY3dkX2ZkIDogQVRfRkRDV0QpLCAgICAgICAgICAgICAgICBcCi0tICAgICAgICAgICAgICAg ICAgZmlsZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAg ICAgICAgICAgICAgICAoKChJU1NFVChGVFNfUEhZU0lDQUwpICAgICAgICAgICAgICAgICAgICAg ICAgXAotLSAgICAgICAgICAgICAgICAgICAgICYmICEgKElTU0VUKEZUU19DT01GT0xMT1cpICAg ICAgICAgICAgICAgICBcCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3VyLT5mdHNf bGV2ZWwgPT0gRlRTX1JPT1RMRVZFTCkpIFwKLS0gICAgICAgICAgICAgICAgICAgID8gT19OT0ZP TExPVyA6IDApKSwgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICAgICAgICAgICAgICAg IFBkaXJfZmQpCi0tCi0tLyoKLS0gKiBUaGlzIGlzIHRoZSB0cmlja3kgcGFydCAtLSBkbyBub3Qg Y2FzdWFsbHkgY2hhbmdlICphbnl0aGluZyogaW4gaGVyZS4gIFRoZQotLSAqIGlkZWEgaXMgdG8g YnVpbGQgdGhlIGxpbmtlZCBsaXN0IG9mIGVudHJpZXMgdGhhdCBhcmUgdXNlZCBieSBmdHNfY2hp bGRyZW4KLS0gKiBhbmQgZnRzX3JlYWQuICBUaGVyZSBhcmUgbG90cyBvZiBzcGVjaWFsIGNhc2Vz LgotLSAqCi0tICogVGhlIHJlYWwgc2xvd2Rvd24gaW4gd2Fsa2luZyB0aGUgdHJlZSBpcyB0aGUg c3RhdCBjYWxscy4gIElmIEZUU19OT1NUQVQgaXMKLS0gKiBzZXQgYW5kIGl0J3MgYSBwaHlzaWNh bCB3YWxrIChzbyB0aGF0IHN5bWJvbGljIGxpbmtzIGNhbid0IGJlIGRpcmVjdG9yaWVzKSwKLS0g KiB3ZSBjYW4gZG8gdGhpbmdzIHF1aWNrbHkuICBGaXJzdCwgaWYgaXQncyBhIDQuNEJTRCBmaWxl IHN5c3RlbSwgdGhlIHR5cGUKLS0gKiBvZiB0aGUgZmlsZSBpcyBpbiB0aGUgZGlyZWN0b3J5IGVu dHJ5LiAgT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgdGhhdCB0aGUgbnVtYmVyCi0tICogb2Ygc3ViZGly ZWN0b3JpZXMgaW4gYSBub2RlIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgbGlua3MgdG8gdGhl IHBhcmVudC4KLS0gKiBUaGUgZm9ybWVyIHNraXBzIGFsbCBzdGF0IGNhbGxzLiAgVGhlIGxhdHRl ciBza2lwcyBzdGF0IGNhbGxzIGluIGFueSBsZWFmCi0tICogZGlyZWN0b3JpZXMgYW5kIGZvciBh bnkgZmlsZXMgYWZ0ZXIgdGhlIHN1YmRpcmVjdG9yaWVzIGluIHRoZSBkaXJlY3RvcnkgaGF2ZQot LSAqIGJlZW4gZm91bmQsIGN1dHRpbmcgdGhlIHN0YXQgY2FsbHMgYnkgYWJvdXQgMi8zLgotLSAq LwotLXN0YXRpYyBGVFNFTlRSWSAqCi0taW50ZXJuYWxfZnVuY3Rpb24KLS1mdHNfYnVpbGQgKHJl Z2lzdGVyIEZUU09CSiAqc3AsIGludCB0eXBlKQotLXsKLS0gICAgICAgIEZUU0VOVFJZICpjdXIg PSBzcC0+ZnRzX2N1cjsKLS0gICAgICAgIGJvb2wgY29udGludWVfcmVhZGRpciA9ICEhRlRTRU5U X0RJUlAoY3VyKTsKLS0KLS0gICAgICAgIC8qIFdoZW4gY3VyLT5mdHNfZGlycCBpcyBub24tTlVM TCwgdGhhdCBtZWFucyB3ZSBzaG91bGQKLS0gICAgICAgICAgIGNvbnRpbnVlIGNhbGxpbmcgcmVh ZGRpciBvbiB0aGF0IGV4aXN0aW5nIERJUiogcG9pbnRlcgotLSAgICAgICAgICAgcmF0aGVyIHRo YW4gb3BlbmluZyBhIG5ldyBvbmUuICAqLwotLSAgICAgICAgaW50IGRpcl9mZDsKLS0gICAgICAg IGlmIChjb250aW51ZV9yZWFkZGlyKQotLSAgICAgICAgICB7Ci0tICAgICAgICAgICAgRElSICpk cCA9IEZUU0VOVF9ESVJQKGN1cik7Ci0tICAgICAgICAgICAgZGlyX2ZkID0gZGlyZmQgKGRwKTsK LS0gICAgICAgICAgICBpZiAoZGlyX2ZkIDwgMCkKLS0gICAgICAgICAgICAgIHsKLS0gICAgICAg ICAgICAgICAgaW50IGRpcmZkX2Vycm5vID0gZXJybm87Ci0tICAgICAgICAgICAgICAgIGNsb3Nl ZGlyX2FuZF9jbGVhciAoRlRTRU5UX0RJUlAoY3VyKSk7Ci0tICAgICAgICAgICAgICAgIGlmICh0 eXBlID09IEJSRUFEKQotLSAgICAgICAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAgICAgICAg IGN1ci0+ZnRzX2luZm8gPSBGVFNfRE5SOwotLSAgICAgICAgICAgICAgICAgICAgY3VyLT5mdHNf ZXJybm8gPSBkaXJmZF9lcnJubzsKLS0gICAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAg ICAgIHJldHVybiBOVUxMOwotLSAgICAgICAgICAgICAgfQotLSAgICAgICAgICB9Ci0tICAgICAg ICBlbHNlCi0tICAgICAgICAgIHsKLS0gICAgICAgICAgICAvKiBPcGVuIHRoZSBkaXJlY3Rvcnkg Zm9yIHJlYWRpbmcuICBJZiB0aGlzIGZhaWxzLCB3ZSdyZSBkb25lLgotLSAgICAgICAgICAgICAg IElmIGJlaW5nIGNhbGxlZCBmcm9tIGZ0c19yZWFkLCBzZXQgdGhlIGZ0c19pbmZvIGZpZWxkLiAq LwotLSAgICAgICAgICAgIGlmICgoRlRTRU5UX0RJUlAgKGN1cikgPSBmdHNfb3BlbmRpcihjdXIt PmZ0c19hY2NwYXRoLCAmZGlyX2ZkKSkgPT0gTlVMTCkKLS0gICAgICAgICAgICAgIHsKLS0gICAg ICAgICAgICAgICAgaWYgKHR5cGUgPT0gQlJFQUQpCi0tICAgICAgICAgICAgICAgICAgewotLSAg ICAgICAgICAgICAgICAgICAgY3VyLT5mdHNfaW5mbyA9IEZUU19ETlI7Ci0tICAgICAgICAgICAg ICAgICAgICBjdXItPmZ0c19lcnJubyA9IGVycm5vOwotLSAgICAgICAgICAgICAgICAgIH0KLS0g ICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgICAgICAgICAgICB9Ci0tICAgICAgICAg ICAgLyogUmF0aGVyIHRoYW4gY2FsbGluZyBmdHNfc3RhdCBmb3IgZWFjaCBhbmQgZXZlcnkgZW50 cnkgZW5jb3VudGVyZWQKLS0gICAgICAgICAgICAgICBpbiB0aGUgcmVhZGRpciBsb29wIChiZWxv dyksIHN0YXQgZWFjaCBkaXJlY3Rvcnkgb25seSByaWdodCBhZnRlcgotLSAgICAgICAgICAgICAg IG9wZW5pbmcgaXQuICAqLwotLSAgICAgICAgICAgIGJvb2wgc3RhdF9vcHRpbWl6YXRpb24gPSBj dXItPmZ0c19pbmZvID09IEZUU19OU09LOwotLQotLSAgICAgICAgICAgIGlmIChzdGF0X29wdGlt aXphdGlvbgotLSAgICAgICAgICAgICAgICAvKiBBbHNvIHJlYWQgdGhlIHN0YXQgaW5mbyBhZ2Fp biBhZnRlciBvcGVuaW5nIGEgZGlyZWN0b3J5IHRvCi0tICAgICAgICAgICAgICAgICAgIHJldmVh bCBldmVudHVhbCBjaGFuZ2VzIGNhdXNlZCBieSBhIHN1Ym1vdW50IHRyaWdnZXJlZCBieQotLSAg ICAgICAgICAgICAgICAgICB0aGUgdHJhdmVyc2FsLiAgQnV0IGRvIGl0IG9ubHkgZm9yIHV0aWxp dGllcyB3aGljaCB1c2UKLS0gICAgICAgICAgICAgICAgICAgRlRTX1RJR0hUX0NZQ0xFX0NIRUNL LiAgVGhlcmVmb3JlLCBvbmx5IGZpbmQgYW5kIGR1Ci0tICAgICAgICAgICAgICAgICAgIGJlbmVm aXQvc3VmZmVyIGZyb20gdGhpcyBmZWF0dXJlIGZvciBub3cuICAqLwotLSAgICAgICAgICAgICAg ICB8fCBJU1NFVCAoRlRTX1RJR0hUX0NZQ0xFX0NIRUNLKSkKLS0gICAgICAgICAgICAgIHsKLS0g ICAgICAgICAgICAgICAgaWYgKCFzdGF0X29wdGltaXphdGlvbikKLS0gICAgICAgICAgICAgICAg ICBMRUFWRV9ESVIgKHNwLCBjdXIsICI0Iik7Ci0tICAgICAgICAgICAgICAgIGlmIChGU1RBVCAo ZGlyX2ZkLCBjdXItPmZ0c19zdGF0cCkgIT0gMCkKLS0gICAgICAgICAgICAgICAgICB7Ci0tICAg ICAgICAgICAgICAgICAgICBpbnQgZnN0YXRfZXJybm8gPSBlcnJubzsKLS0gICAgICAgICAgICAg ICAgICAgIGNsb3NlZGlyX2FuZF9jbGVhciAoRlRTRU5UX0RJUlAoY3VyKSk7Ci0tICAgICAgICAg ICAgICAgICAgICBpZiAodHlwZSA9PSBCUkVBRCkKLS0gICAgICAgICAgICAgICAgICAgICAgewot LSAgICAgICAgICAgICAgICAgICAgICAgIGN1ci0+ZnRzX2Vycm5vID0gZnN0YXRfZXJybm87Ci0t ICAgICAgICAgICAgICAgICAgICAgICAgY3VyLT5mdHNfaW5mbyA9IEZUU19OUzsKLS0gICAgICAg ICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKGZzdGF0 X2Vycm5vKTsKLS0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotLSAgICAgICAgICAg ICAgICAgIH0KLS0gICAgICAgICAgICAgICAgaWYgKHN0YXRfb3B0aW1pemF0aW9uKQotLSAgICAg ICAgICAgICAgICAgIGN1ci0+ZnRzX2luZm8gPSBGVFNfRDsKLS0gICAgICAgICAgICAgICAgZWxz ZSBpZiAoISBlbnRlcl9kaXIgKHNwLCBjdXIpKQotLSAgICAgICAgICAgICAgICAgIHsKLS0gICAg ICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOwotLSAgICAgICAgICAgICAg ICAgICAgY2xvc2VkaXJfYW5kX2NsZWFyIChGVFNFTlRfRElSUChjdXIpKTsKLS0gICAgICAgICAg ICAgICAgICAgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7Ci0tICAgICAgICAgICAgICAgICAg ICByZXR1cm4gTlVMTDsKLS0gICAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAgICB9Ci0t ICAgICAgICAgIH0KLS0KLS0gICAgICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIHJlYWRkaXIgZW50 cmllcyB0byByZWFkIGF0IG9uZSB0aW1lLiAgVGhpcwotLSAgICAgICAgICAgbGltaXRhdGlvbiBp cyB0byBhdm9pZCByZWFkaW5nIG1pbGxpb25zIG9mIGVudHJpZXMgaW50byBtZW1vcnkKLS0gICAg ICAgICAgIGF0IG9uY2UuICBXaGVuIGFuIGZ0c19jb21wYXIgZnVuY3Rpb24gaXMgc3BlY2lmaWVk LCB3ZSBoYXZlIG5vCi0tICAgICAgICAgICBjaG9pY2U6IHdlIG11c3QgcmVhZCBhbGwgZW50cmll cyBpbnRvIG1lbW9yeSBiZWZvcmUgY2FsbGluZyB0aGF0Ci0tICAgICAgICAgICBmdW5jdGlvbi4g IEJ1dCB3aGVuIG5vIHN1Y2ggZnVuY3Rpb24gaXMgc3BlY2lmaWVkLCB3ZSBjYW4gcmVhZAotLSAg ICAgICAgICAgZW50cmllcyBpbiBiYXRjaGVzIHRoYXQgYXJlIGxhcmdlIGVub3VnaCB0byBoZWxw IHVzIHdpdGggaW5vZGUtCi0tICAgICAgICAgICBzb3J0aW5nLCB5ZXQgbm90IHNvIGxhcmdlIHRo YXQgd2UgcmlzayBleGhhdXN0aW5nIG1lbW9yeS4gICovCi0tICAgICAgICBzaXplX3QgbWF4X2Vu dHJpZXMgPSBzcC0+ZnRzX2NvbXBhciA/IFNJWkVfTUFYIDogRlRTX01BWF9SRUFERElSX0VOVFJJ RVM7Ci0tCi0tICAgICAgICAvKgotLSAgICAgICAgICogSWYgd2UncmUgZ29pbmcgdG8gbmVlZCB0 byBzdGF0IGFueXRoaW5nIG9yIHdlIHdhbnQgdG8gZGVzY2VuZAotLSAgICAgICAgICogYW5kIHN0 YXkgaW4gdGhlIGRpcmVjdG9yeSwgY2hkaXIuICBJZiB0aGlzIGZhaWxzIHdlIGtlZXAgZ29pbmcs Ci0tICAgICAgICAgKiBidXQgc2V0IGEgZmxhZyBzbyB3ZSBkb24ndCBjaGRpciBhZnRlciB0aGUg cG9zdC1vcmRlciB2aXNpdC4KLS0gICAgICAgICAqIFdlIHdvbid0IGJlIGFibGUgdG8gc3RhdCBh bnl0aGluZywgYnV0IHdlIGNhbiBzdGlsbCByZXR1cm4gdGhlCi0tICAgICAgICAgKiBuYW1lcyB0 aGVtc2VsdmVzLiAgTm90ZSwgdGhhdCBzaW5jZSBmdHNfcmVhZCB3b24ndCBiZSBhYmxlIHRvCi0t ICAgICAgICAgKiBjaGRpciBpbnRvIHRoZSBkaXJlY3RvcnksIGl0IHdpbGwgaGF2ZSB0byByZXR1 cm4gZGlmZmVyZW50IGZpbGUKLS0gICAgICAgICAqIG5hbWVzIHRoYW4gYmVmb3JlLCBpLmUuICJh L2IiIGluc3RlYWQgb2YgImIiLiAgU2luY2UgdGhlIG5vZGUKLS0gICAgICAgICAqIGhhcyBhbHJl YWR5IGJlZW4gdmlzaXRlZCBpbiBwcmUtb3JkZXIsIGhhdmUgdG8gd2FpdCB1bnRpbCB0aGUKLS0g ICAgICAgICAqIHBvc3Qtb3JkZXIgdmlzaXQgdG8gcmV0dXJuIHRoZSBlcnJvci4gIFRoZXJlIGlz IGEgc3BlY2lhbCBjYXNlCi0tICAgICAgICAgKiBoZXJlLCBpZiB0aGVyZSB3YXMgbm90aGluZyB0 byBzdGF0IHRoZW4gaXQncyBub3QgYW4gZXJyb3IgdG8KLS0gICAgICAgICAqIG5vdCBiZSBhYmxl IHRvIHN0YXQuICBUaGlzIGlzIGFsbCBmYWlybHkgbmFzdHkuICBJZiBhIHByb2dyYW0KLS0gICAg ICAgICAqIG5lZWRlZCBzb3J0ZWQgZW50cmllcyBvciBzdGF0IGluZm9ybWF0aW9uLCB0aGV5IGhh ZCBiZXR0ZXIgYmUKLS0gICAgICAgICAqIGNoZWNraW5nIEZUU19OUyBvbiB0aGUgcmV0dXJuZWQg bm9kZXMuCi0tICAgICAgICAgKi8KLS0gICAgICAgIGJvb2wgZGVzY2VuZDsKLS0gICAgICAgIGlm IChjb250aW51ZV9yZWFkZGlyKQotLSAgICAgICAgICB7Ci0tICAgICAgICAgICAgLyogV2hlbiBy ZXN1bWluZyBhIHNob3J0IHJlYWRkaXIgcnVuLCB3ZSBhbHJlYWR5IGhhdmUKLS0gICAgICAgICAg ICAgICB0aGUgcmVxdWlyZWQgZGlycCBhbmQgZGlyX2ZkLiAgKi8KLS0gICAgICAgICAgICBkZXNj ZW5kID0gdHJ1ZTsKLS0gICAgICAgICAgfQotLSAgICAgICAgZWxzZQotLSAgICAgICAgICB7Ci0t ICAgICAgICAgICAgLyogVHJ5IHRvIGRlc2NlbmQgdW5sZXNzIGl0IGlzIGEgbmFtZXMtb25seSBm dHNfY2hpbGRyZW4sCi0tICAgICAgICAgICAgICAgb3IgdGhlIGRpcmVjdG9yeSBpcyBrbm93biB0 byBsYWNrIHN1YmRpcmVjdG9yaWVzLiAgKi8KLS0gICAgICAgICAgICBkZXNjZW5kID0gKHR5cGUg IT0gQk5BTUVTCi0tICAgICAgICAgICAgICAgICAgICAgICAmJiAhIChJU1NFVCAoRlRTX05PU1RB VCkgJiYgSVNTRVQgKEZUU19QSFlTSUNBTCkKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmICEgSVNTRVQgKEZUU19TRUVET1QpCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiBjdXItPmZ0c19zdGF0cC0+c3RfbmxpbmsgPT0gTUlOX0RJUl9OTElOSwotLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgKGxlYWZfb3B0aW1pemF0aW9uIChjdXIsIGRpcl9mZCkKLS0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBOT19MRUFGX09QVElNSVpBVElPTikp KTsKLS0gICAgICAgICAgICBpZiAoZGVzY2VuZCB8fCB0eXBlID09IEJSRUFEKQotLSAgICAgICAg ICAgICAgewotLSAgICAgICAgICAgICAgICBpZiAoSVNTRVQoRlRTX0NXREZEKSkKLS0gICAgICAg ICAgICAgICAgICBkaXJfZmQgPSBmY250bCAoZGlyX2ZkLCBGX0RVUEZEX0NMT0VYRUMsIFNUREVS Ul9GSUxFTk8gKyAxKTsKLS0gICAgICAgICAgICAgICAgaWYgKGRpcl9mZCA8IDAgfHwgZnRzX3Nh ZmVfY2hhbmdlZGlyKHNwLCBjdXIsIGRpcl9mZCwgTlVMTCkpIHsKLS0gICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZGVzY2VuZCAmJiB0eXBlID09IEJSRUFEKQotLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY3VyLT5mdHNfZXJybm8gPSBlcnJubzsKLS0gICAgICAgICAgICAgICAg ICAgICAgICBjdXItPmZ0c19mbGFncyB8PSBGVFNfRE9OVENIRElSOwotLSAgICAgICAgICAgICAg ICAgICAgICAgIGRlc2NlbmQgPSBmYWxzZTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBjbG9z ZWRpcl9hbmRfY2xlYXIoRlRTRU5UX0RJUlAoY3VyKSk7Ci0tICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKElTU0VUKEZUU19DV0RGRCkgJiYgMCA8PSBkaXJfZmQpCi0tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjbG9zZSAoZGlyX2ZkKTsKLS0gICAgICAgICAgICAgICAgICAgICAg ICBGVFNFTlRfRElSUChjdXIpID0gTlVMTDsKLS0gICAgICAgICAgICAgICAgfSBlbHNlCi0tICAg ICAgICAgICAgICAgICAgICAgICAgZGVzY2VuZCA9IHRydWU7Ci0tICAgICAgICAgICAgICB9Ci0t ICAgICAgICAgIH0KLS0KLS0gICAgICAgIC8qCi0tICAgICAgICAgKiBGaWd1cmUgb3V0IHRoZSBt YXggZmlsZSBuYW1lIGxlbmd0aCB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlCi0tICAgICAgICAg KiBjdXJyZW50IGJ1ZmZlciAtLSB0aGUgaW5uZXIgbG9vcCBhbGxvY2F0ZXMgbW9yZSBzcGFjZSBh cyBuZWNlc3NhcnkuCi0tICAgICAgICAgKiBXZSByZWFsbHkgd291bGRuJ3QgaGF2ZSB0byBkbyB0 aGUgbWF4bGVuIGNhbGN1bGF0aW9ucyBoZXJlLCB3ZQotLSAgICAgICAgICogY291bGQgZG8gdGhl bSBpbiBmdHNfcmVhZCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBuYW1lLCBidXQgaXQncyBhCi0tICAg ICAgICAgKiBsb3QgZWFzaWVyIGhlcmUgc2luY2UgdGhlIGxlbmd0aCBpcyBwYXJ0IG9mIHRoZSBk aXJlbnQgc3RydWN0dXJlLgotLSAgICAgICAgICoKLS0gICAgICAgICAqIElmIG5vdCBjaGFuZ2lu ZyBkaXJlY3RvcmllcyBzZXQgYSBwb2ludGVyIHNvIHRoYXQgY2FuIGp1c3QgYXBwZW5kCi0tICAg ICAgICAgKiBlYWNoIG5ldyBjb21wb25lbnQgaW50byB0aGUgZmlsZSBuYW1lLgotLSAgICAgICAg ICovCi0tICAgICAgICBzaXplX3QgbGVuID0gTkFQUEVORChjdXIpOwotLSAgICAgICAgY2hhciAq Y3A7Ci0tICAgICAgICBpZiAoSVNTRVQoRlRTX05PQ0hESVIpKSB7Ci0tICAgICAgICAgICAgICAg IGNwID0gc3AtPmZ0c19wYXRoICsgbGVuOwotLSAgICAgICAgICAgICAgICAqY3ArKyA9ICcvJzsK LS0gICAgICAgIH0gZWxzZSB7Ci0tICAgICAgICAgICAgICAgIC8qIEdDQywgeW91J3JlIHRvbyB2 ZXJib3NlLiAqLwotLSAgICAgICAgICAgICAgICBjcCA9IE5VTEw7Ci0tICAgICAgICB9Ci0tICAg ICAgICBsZW4rKzsKLS0gICAgICAgIHNpemVfdCBtYXhsZW4gPSBzcC0+ZnRzX3BhdGhsZW4gLSBs ZW47Ci0tCi0tICAgICAgICBwdHJkaWZmX3QgbGV2ZWwgPSBjdXItPmZ0c19sZXZlbCArIDE7Ci0t Ci0tICAgICAgICAvKiBSZWFkIHRoZSBkaXJlY3RvcnksIGF0dGFjaGluZyBlYWNoIGVudHJ5IHRv IHRoZSAibGluayIgcG9pbnRlci4gKi8KLS0gICAgICAgIGJvb2wgZG9hZGp1c3QgPSBmYWxzZTsK LS0gICAgICAgIHJlZ2lzdGVyIEZUU0VOVFJZICpoZWFkID0gTlVMTDsKLS0gICAgICAgIEZUU0VO VFJZICp0YWlsID0gTlVMTDsKLS0gICAgICAgIHJlZ2lzdGVyIHNpemVfdCBuaXRlbXMgPSAwOwot LSAgICAgICAgYm9vbCBzb3J0X2J5X2lub2RlID0gZmFsc2U7Ci0tICAgICAgICB3aGlsZSAoRlRT RU5UX0RJUlAoY3VyKSkgewotLSAgICAgICAgICAgICAgICBfX3NldF9lcnJubyAoMCk7Ci0tICAg ICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQgKmRwID0gcmVhZGRpcihGVFNFTlRfRElSUChjdXIp KTsKLS0gICAgICAgICAgICAgICAgaWYgKGRwID09IE5VTEwpIHsKLS0gICAgICAgICAgICAgICAg ICAgICAgICAvKiBTb21lIHJlYWRkaXIoKXMgZG8gbm90IGFic29yYiBFTk9FTlQgKGRpcgotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWQgYnV0IG9wZW4pLiAgVGhpcyBidWcgd2Fz IGZpeGVkIGluCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgMi4zICgyMDAyKS4g ICovCi0tI2lmICEgKDIgPCBfX0dMSUJDX18gKyAoMyA8PSBfX0dMSUJDX01JTk9SX18pKQotLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQpCi0tICAgICAgICAgICAg ICAgICAgICAgICAgICBlcnJubyA9IDA7Ci0tI2VuZGlmCi0tICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGVycm5vKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXItPmZ0 c19lcnJubyA9IGVycm5vOwotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYg d2UndmUgbm90IHJlYWQgYW55IGl0ZW1zIHlldCwgdHJlYXQKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRoZSBlcnJvciBhcyBpZiB3ZSBjYW4ndCBhY2Nlc3MgdGhlIGRpci4g ICovCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXItPmZ0c19pbmZvID0gKGNv bnRpbnVlX3JlYWRkaXIgfHwgbml0ZW1zKQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgID8gRlRTX0VSUiA6IEZUU19ETlI7Ci0tICAgICAgICAgICAgICAg ICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZGlyX2FuZF9jbGVhcihG VFNFTlRfRElSUChjdXIpKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLS0gICAg ICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICBpZiAoIUlTU0VUKEZUU19TRUVET1QpICYm IElTRE9UKGRwLT5kX25hbWUpKQotLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot LQotLSAgICAgICAgICAgICAgICBzaXplX3QgZF9uYW1lbGVuID0gX0RfRVhBQ1RfTkFNTEVOIChk cCk7Ci0tICAgICAgICAgICAgICAgIHJlZ2lzdGVyIEZUU0VOVFJZICpwID0gZnRzX2FsbG9jIChz cCwgZHAtPmRfbmFtZSwgZF9uYW1lbGVuKTsKLS0gICAgICAgICAgICAgICAgaWYgKCFwKQotLSAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbWVtMTsKLS0gICAgICAgICAgICAgICAgaWYgKGRf bmFtZWxlbiA+PSBtYXhsZW4pIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmNsdWRl IHNwYWNlIGZvciBOVUwgKi8KLS0gICAgICAgICAgICAgICAgICAgICAgICB1aW50cHRyX3Qgb2xk YWRkciA9ICh1aW50cHRyX3QpIHNwLT5mdHNfcGF0aDsKLS0gICAgICAgICAgICAgICAgICAgICAg ICBpZiAoISBmdHNfcGFsbG9jKHNwLCBkX25hbWVsZW4gKyBsZW4gKyAxKSkgewotLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyoKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqIE5vIG1vcmUgbWVtb3J5LiAgU2F2ZQotLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogZXJybm8sIGZyZWUgdXAgdGhlIGN1cnJlbnQgc3RydWN0dXJlIGFuZCB0aGUKLS0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0cnVjdHVyZXMgYWxyZWFkeSBhbGxv Y2F0ZWQuCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS1tZW0xOiA7Ci0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsK LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoRlRTRU5UX1dSQVBQRVIocCkp OwotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRzX2xmcmVlKGhlYWQpOwotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VkaXJfYW5kX2NsZWFyKEZUU0VOVF9E SVJQKGN1cikpOwotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyLT5mdHNfaW5m byA9IEZUU19FUlI7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVQoRlRTX1NU T1ApOwotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKHNhdmVk X2Vycm5vKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTlVMTCk7 Ci0tICAgICAgICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgICAgICAgIC8q IERpZCByZWFsbG9jKCkgY2hhbmdlIHRoZSBwb2ludGVyPyAqLwotLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChvbGRhZGRyICE9ICh1aW50cHRyX3QpIHNwLT5mdHNfcGF0aCkgewotLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9hZGp1c3QgPSB0cnVlOwotLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKElTU0VUKEZUU19OT0NIRElSKSkKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3AgPSBzcC0+ZnRzX3BhdGggKyBsZW47Ci0t ICAgICAgICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgICAgICAgIG1heGxl biA9IHNwLT5mdHNfcGF0aGxlbiAtIGxlbjsKLS0gICAgICAgICAgICAgICAgfQotLQotLSAgICAg ICAgICAgICAgICBzaXplX3QgbmV3X2xlbiA9IGxlbiArIGRfbmFtZWxlbjsKLS0gICAgICAgICAg ICAgICAgaWYgKG5ld19sZW4gPCBsZW4pIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICAvKgot LSAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IHdl IHdvdWxkIGVuZCB1cAotLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHdpdGggYSBmaWxlIG5h bWUgbG9uZ2VyIHRoYW4gU0laRV9NQVgsIGZyZWUgdXAKLS0gICAgICAgICAgICAgICAgICAgICAg ICAgKiB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgYW5kIHRoZSBzdHJ1Y3R1cmVzIGFscmVhZHkKLS0g ICAgICAgICAgICAgICAgICAgICAgICAgKiBhbGxvY2F0ZWQsIHRoZW4gZXJyb3Igb3V0IHdpdGgg RU5BTUVUT09MT05HLgotLSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLSAgICAgICAgICAg ICAgICAgICAgICAgIGZyZWUoRlRTRU5UX1dSQVBQRVIocCkpOwotLSAgICAgICAgICAgICAgICAg ICAgICAgIGZ0c19sZnJlZShoZWFkKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWRp cl9hbmRfY2xlYXIoRlRTRU5UX0RJUlAoY3VyKSk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAg Y3VyLT5mdHNfaW5mbyA9IEZUU19FUlI7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgU0VUKEZU U19TVE9QKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBfX3NldF9lcnJubyAoRU5BTUVUT09M T05HKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotLSAgICAgICAg ICAgICAgICB9Ci0tICAgICAgICAgICAgICAgIHAtPmZ0c19sZXZlbCA9IGxldmVsOwotLSAgICAg ICAgICAgICAgICBwLT5mdHNfcGFyZW50ID0gc3AtPmZ0c19jdXI7Ci0tICAgICAgICAgICAgICAg IHAtPmZ0c19wYXRobGVuID0gbmV3X2xlbjsKLS0KLS0gICAgICAgICAgICAgICAgLyogU3RvcmUg ZGlyZW50LmRfaW5vLCBpbiBjYXNlIHdlIG5lZWQgdG8gc29ydAotLSAgICAgICAgICAgICAgICAg ICBlbnRyaWVzIGJlZm9yZSBwcm9jZXNzaW5nIHRoZW0uICAqLwotLSAgICAgICAgICAgICAgICBw LT5mdHNfc3RhdHAtPnN0X2lubyA9IERfSU5PIChkcCk7Ci0tCi0tICAgICAgICAgICAgICAgIC8q IEJ1aWxkIGEgZmlsZSBuYW1lIGZvciBmdHNfc3RhdCB0byBzdGF0LiAqLwotLSAgICAgICAgICAg ICAgICBpZiAoSVNTRVQoRlRTX05PQ0hESVIpKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAg cC0+ZnRzX2FjY3BhdGggPSBwLT5mdHNfcGF0aDsKLS0gICAgICAgICAgICAgICAgICAgICAgICBt ZW1tb3ZlKGNwLCBwLT5mdHNfbmFtZSwgcC0+ZnRzX25hbWVsZW4gKyAxKTsKLS0gICAgICAgICAg ICAgICAgfSBlbHNlCi0tICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2FjY3BhdGggPSBw LT5mdHNfbmFtZTsKLS0KLS0gICAgICAgICAgICAgICAgaWYgKHNwLT5mdHNfY29tcGFyID09IE5V TEwgfHwgSVNTRVQoRlRTX0RFRkVSX1NUQVQpKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAg LyogUmVjb3JkIHdoYXQgZnRzX3JlYWQgd2lsbCBoYXZlIHRvIGRvIHdpdGggdGhpcwotLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LiBJbiBtYW55IGNhc2VzLCBpdCB3aWxsIHNpbXBs eSBmdHNfc3RhdCBpdCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgd2UgY2FuIHRh a2UgYWR2YW50YWdlIG9mIGFueSBkX3R5cGUgaW5mb3JtYXRpb24KLS0gICAgICAgICAgICAgICAg ICAgICAgICAgICB0byBvcHRpbWl6ZSBhd2F5IHRoZSB1bm5lY2Vzc2FyeSBzdGF0IGNhbGxzLiAg SS5lLiwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBGVFNfTk9TVEFUIGlzIGluIGVm ZmVjdCwgd2UgZG9uJ3QgbmVlZCBkZXZpY2UKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBu dW1iZXJzIHVuY29uZGl0aW9uYWxseSAoRlRTX01PVU5UKSBhbmQgd2UncmUgbm90Ci0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIHN5bWxpbmtzIChGVFNfUEhZU0lDQUwpIGFu ZCBkX3R5cGUKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZXMgdGhpcyBpcyAq bm90KiBhIGRpcmVjdG9yeSwgdGhlbiB3ZSB3b24ndAotLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIGhhdmUgdG8gc3RhdCBpdCAgYXQgYWxsLiAgSWYgaXQgKmlzKiBhIGRpcmVjdG9yeSwKLS0g ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIChjdXJyZW50bHkpIHdlIHN0YXQgaXQgcmVn YXJkbGVzcywgaW4gb3JkZXIgdG8KLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZGV2 aWNlIGFuZCBpbm9kZSBudW1iZXJzLiAgU29tZSBkYXkgd2UgbWlnaHQKLS0gICAgICAgICAgICAg ICAgICAgICAgICAgICBvcHRpbWl6ZSB0aGF0IGF3YXksIHRvbywgZm9yIGRpcmVjdG9yaWVzIHdo ZXJlCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9pbm8gaXMga25vd24gdG8gYmUgdmFs aWQuICAqLwotLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2tpcF9zdGF0ID0gKElTU0VU KEZUU19OT1NUQVQpCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgRFRfSVNfS05PV04oZHApCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgISBEVF9NVVNUX0JFKGRwLCBEVF9ESVIpCi0tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgKElTU0VUKEZUU19QSFlTSUNBTCkKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgISBEVF9NVVNUX0JFKGRwLCBE VF9MTkspKQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEg SVNTRVQoRlRTX01PVU5UKSk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2luZm8g PSBGVFNfTlNPSzsKLS0gICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9wYWdhdGUgZGlyZW50 LmRfdHlwZSBpbmZvcm1hdGlvbiBiYWNrCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8g Y2FsbGVyLCB3aGVuIHBvc3NpYmxlLiAgKi8KLS0gICAgICAgICAgICAgICAgICAgICAgICBzZXRf c3RhdF90eXBlIChwLT5mdHNfc3RhdHAsIERfVFlQRSAoZHApKTsKLS0gICAgICAgICAgICAgICAg ICAgICAgICBmdHNfc2V0X3N0YXRfcmVxdWlyZWQocCwgIXNraXBfc3RhdCk7Ci0tICAgICAgICAg ICAgICAgIH0gZWxzZSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2luZm8gPSBm dHNfc3RhdChzcCwgcCwgZmFsc2UpOwotLSAgICAgICAgICAgICAgICB9Ci0tCi0tICAgICAgICAg ICAgICAgIC8qIFdlIHdhbGsgaW4gZGlyZWN0b3J5IG9yZGVyIHNvICJscyAtZiIgZG9lc24ndCBn ZXQgdXBzZXQuICovCi0tICAgICAgICAgICAgICAgIHAtPmZ0c19saW5rID0gTlVMTDsKLS0gICAg ICAgICAgICAgICAgaWYgKGhlYWQgPT0gTlVMTCkKLS0gICAgICAgICAgICAgICAgICAgICAgICBo ZWFkID0gdGFpbCA9IHA7Ci0tICAgICAgICAgICAgICAgIGVsc2UgewotLSAgICAgICAgICAgICAg ICAgICAgICAgIHRhaWwtPmZ0c19saW5rID0gcDsKLS0gICAgICAgICAgICAgICAgICAgICAgICB0 YWlsID0gcDsKLS0gICAgICAgICAgICAgICAgfQotLQotLSAgICAgICAgICAgICAgICAvKiBJZiB0 aGVyZSBhcmUgbWFueSBlbnRyaWVzLCBubyBzb3J0aW5nIGZ1bmN0aW9uIGhhcyBiZWVuCi0tICAg ICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgYW5kIHRoaXMgZmlsZSBzeXN0ZW0gaXMgb2YgYSB0 eXBlIHRoYXQgbWF5IGJlCi0tICAgICAgICAgICAgICAgICAgIHNsb3cgd2l0aCBhIGxhcmdlIG51 bWJlciBvZiBlbnRyaWVzLCBhcnJhbmdlIHRvIHNvcnQgdGhlCi0tICAgICAgICAgICAgICAgICAg IGRpcmVjdG9yeSBlbnRyaWVzIG9uIGluY3JlYXNpbmcgaW5vZGUgbnVtYmVycy4KLS0KLS0gICAg ICAgICAgICAgICAgICAgVGhlIE5JVEVNUyBjb21wYXJpc29uIHVzZXMgPT0sIG5vdCA+LCBiZWNh dXNlIHRoZSB0ZXN0Ci0tICAgICAgICAgICAgICAgICAgIG5lZWRzIHRvIGJlIHRyaWVkIGF0IG1v c3Qgb25jZSBvbmNlLCBhbmQgTklURU1TIHdpbGwgZXhjZWVkCi0tICAgICAgICAgICAgICAgICAg IHRoZSB0aHJlc2hvbGQgYWZ0ZXIgaXQgaXMgaW5jcmVtZW50ZWQgYmVsb3cuICAqLwotLSAgICAg ICAgICAgICAgICBpZiAobml0ZW1zID09IF9GVFNfSU5PREVfU09SVF9ESVJfRU5UUklFU19USFJF U0hPTEQKLS0gICAgICAgICAgICAgICAgICAgICYmICFzcC0+ZnRzX2NvbXBhcikKLS0gICAgICAg ICAgICAgICAgICBzb3J0X2J5X2lub2RlID0gZGlyZW50X2lub2RlX3NvcnRfbWF5X2JlX3VzZWZ1 bCAoY3VyLCBkaXJfZmQpOwotLQotLSAgICAgICAgICAgICAgICArK25pdGVtczsKLS0gICAgICAg ICAgICAgICAgaWYgKG1heF9lbnRyaWVzIDw9IG5pdGVtcykgewotLSAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFdoZW4gdGhlcmUgYXJlIHRvbyBtYW55IGRpciBlbnRyaWVzLCBsZWF2ZQotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZ0c19kaXJwIG9wZW4sIHNvIHRoYXQgYSBzdWJzZXF1 ZW50IGZ0c19yZWFkCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIHRha2UgdXAgd2hl cmUgd2UgbGVhdmUgb2ZmLiAgKi8KLS0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLS0g ICAgICAgICAgICAgICAgfQotLSAgICAgICAgfQotLQotLSAgICAgICAgLyoKLS0gICAgICAgICAq IElmIHJlYWxsb2MoKSBjaGFuZ2VkIHRoZSBhZGRyZXNzIG9mIHRoZSBmaWxlIG5hbWUsIGFkanVz dCB0aGUKLS0gICAgICAgICAqIGFkZHJlc3NlcyBmb3IgdGhlIHJlc3Qgb2YgdGhlIHRyZWUgYW5k IHRoZSBkaXIgbGlzdC4KLS0gICAgICAgICAqLwotLSAgICAgICAgaWYgKGRvYWRqdXN0KQotLSAg ICAgICAgICAgICAgICBmdHNfcGFkanVzdChzcCwgaGVhZCk7Ci0tCi0tICAgICAgICAvKgotLSAg ICAgICAgICogSWYgbm90IGNoYW5naW5nIGRpcmVjdG9yaWVzLCByZXNldCB0aGUgZmlsZSBuYW1l IGJhY2sgdG8gb3JpZ2luYWwKLS0gICAgICAgICAqIHN0YXRlLgotLSAgICAgICAgICovCi0tICAg ICAgICBpZiAoSVNTRVQoRlRTX05PQ0hESVIpKSB7Ci0tICAgICAgICAgICAgICAgIGlmIChsZW4g PT0gc3AtPmZ0c19wYXRobGVuIHx8IG5pdGVtcyA9PSAwKQotLSAgICAgICAgICAgICAgICAgICAg ICAgIC0tY3A7Ci0tICAgICAgICAgICAgICAgICpjcCA9ICdcMCc7Ci0tICAgICAgICB9Ci0tCi0t ICAgICAgICAvKgotLSAgICAgICAgICogSWYgZGVzY2VuZGVkIGFmdGVyIGNhbGxlZCBmcm9tIGZ0 c19jaGlsZHJlbiBvciBhZnRlciBjYWxsZWQgZnJvbQotLSAgICAgICAgICogZnRzX3JlYWQgYW5k IG5vdGhpbmcgZm91bmQsIGdldCBiYWNrLiAgQXQgdGhlIHJvb3QgbGV2ZWwgd2UgdXNlCi0tICAg ICAgICAgKiB0aGUgc2F2ZWQgZmQ7IGlmIG9uZSBvZiBmdHNfb3BlbigpJ3MgYXJndW1lbnRzIGlz IGEgcmVsYXRpdmUgbmFtZQotLSAgICAgICAgICogdG8gYW4gZW1wdHkgZGlyZWN0b3J5LCB3ZSB3 aW5kIHVwIGhlcmUgd2l0aCBubyBvdGhlciB3YXkgYmFjay4gIElmCi0tICAgICAgICAgKiBjYW4n dCBnZXQgYmFjaywgd2UncmUgZG9uZS4KLS0gICAgICAgICAqLwotLSAgICAgICAgaWYgKCFjb250 aW51ZV9yZWFkZGlyICYmIGRlc2NlbmQgJiYgKHR5cGUgPT0gQkNISUxEIHx8ICFuaXRlbXMpICYm Ci0tICAgICAgICAgICAgKGN1ci0+ZnRzX2xldmVsID09IEZUU19ST09UTEVWRUwKLS0gICAgICAg ICAgICAgPyByZXN0b3JlX2luaXRpYWxfY3dkKHNwKQotLSAgICAgICAgICAgICA6IGZ0c19zYWZl X2NoYW5nZWRpcihzcCwgY3VyLT5mdHNfcGFyZW50LCAtMSwgIi4uIikpKSB7Ci0tICAgICAgICAg ICAgICAgIGN1ci0+ZnRzX2luZm8gPSBGVFNfRVJSOwotLSAgICAgICAgICAgICAgICBTRVQoRlRT X1NUT1ApOwotLSAgICAgICAgICAgICAgICBmdHNfbGZyZWUoaGVhZCk7Ci0tICAgICAgICAgICAg ICAgIHJldHVybiAoTlVMTCk7Ci0tICAgICAgICB9Ci0tCi0tICAgICAgICAvKiBJZiBkaWRuJ3Qg ZmluZCBhbnl0aGluZywgcmV0dXJuIE5VTEwuICovCi0tICAgICAgICBpZiAoIW5pdGVtcykgewot LSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBCUkVBRAotLSAgICAgICAgICAgICAgICAgICAg JiYgY3VyLT5mdHNfaW5mbyAhPSBGVFNfRE5SICYmIGN1ci0+ZnRzX2luZm8gIT0gRlRTX0VSUikK LS0gICAgICAgICAgICAgICAgICAgICAgICBjdXItPmZ0c19pbmZvID0gRlRTX0RQOwotLSAgICAg ICAgICAgICAgICBmdHNfbGZyZWUoaGVhZCk7Ci0tICAgICAgICAgICAgICAgIHJldHVybiAoTlVM TCk7Ci0tICAgICAgICB9Ci0tCi0tICAgICAgICBpZiAoc29ydF9ieV9pbm9kZSkgewotLSAgICAg ICAgICAgICAgICBzcC0+ZnRzX2NvbXBhciA9IEZUU19DT01QQVJfQ0FTVCAoZnRzX2NvbXBhcmVf aW5vKTsKLS0gICAgICAgICAgICAgICAgaGVhZCA9IGZ0c19zb3J0IChzcCwgaGVhZCwgbml0ZW1z KTsKLS0gICAgICAgICAgICAgICAgc3AtPmZ0c19jb21wYXIgPSBOVUxMOwotLSAgICAgICAgfQot LQotLSAgICAgICAgLyogU29ydCB0aGUgZW50cmllcy4gKi8KLS0gICAgICAgIGlmIChzcC0+ZnRz X2NvbXBhciAmJiBuaXRlbXMgPiAxKQotLSAgICAgICAgICAgICAgICBoZWFkID0gZnRzX3NvcnQo c3AsIGhlYWQsIG5pdGVtcyk7Ci0tICAgICAgICByZXR1cm4gKGhlYWQpOwotLX0KLS0KLS0jaWYg R05VTElCX0ZUU19ERUJVRwotLQotLXN0cnVjdCBkZXZpbm8gewotLSAgaW50bWF4X3QgZGV2LCBp bm87Ci0tfTsKLS0jZGVmaW5lIFBSSU5UX0RFVklOTyAiKCVqZCwlamQpIgotLQotLXN0YXRpYyBz dHJ1Y3QgZGV2aW5vCi0tZ2V0ZGV2aW5vIChpbnQgZmQpCi0tewotLSAgc3RydWN0IFNUUlVDVF9T VEFUIHN0OwotLSAgcmV0dXJuIChmZCA9PSBBVF9GRENXRAotLSAgICAgICAgICA/IChzdHJ1Y3Qg ZGV2aW5vKSB7IC0xLCAwIH0KLS0gICAgICAgICAgOiBGU1RBVCAoZmQsICZzdCkgPT0gMAotLSAg ICAgICAgICA/IChzdHJ1Y3QgZGV2aW5vKSB7IHN0LnN0X2Rldiwgc3Quc3RfaW5vIH0KLS0gICAg ICAgICAgOiAoc3RydWN0IGRldmlubykgeyAtMSwgZXJybm8gfSk7Ci0tfQotLQotLS8qIFdhbGsg LT5mdHNfcGFyZW50IGxpbmtzIHN0YXJ0aW5nIGF0IEVfQ1VSUiwgdW50aWwgdGhlIHJvb3Qgb2Yg dGhlCi0tICAgY3VycmVudCBoaWVyYXJjaHkuICBUaGVyZSBzaG91bGQgYmUgYSBkaXJlY3Rvcnkg d2l0aCBkZXYvaW5vZGUKLS0gICBtYXRjaGluZyB0aG9zZSBvZiBBRC4gIElmIG5vdCwgcHJpbnQg YSBsb3Qgb2YgZGlhZ25vc3RpY3MuICAqLwotLXN0YXRpYyB2b2lkCi0tZmluZF9tYXRjaGluZ19h bmNlc3RvciAoRlRTRU5UUlkgY29uc3QgKmVfY3Vyciwgc3RydWN0IEFjdGl2ZV9kaXIgY29uc3Qg KmFkKQotLXsKLS0gIGZvciAoRlRTRU5UUlkgY29uc3QgKmVudCA9IGVfY3VycjsKLS0gICAgICAg ZW50LT5mdHNfbGV2ZWwgPj0gRlRTX1JPT1RMRVZFTDsKLS0gICAgICAgZW50ID0gZW50LT5mdHNf cGFyZW50KQotLSAgICB7Ci0tICAgICAgaWYgKGFkLT5pbm8gPT0gZW50LT5mdHNfc3RhdHAtPnN0 X2lubwotLSAgICAgICAgICAmJiBhZC0+ZGV2ID09IGVudC0+ZnRzX3N0YXRwLT5zdF9kZXYpCi0t ICAgICAgICByZXR1cm47Ci0tICAgIH0KLS0gIHByaW50ZiAoIkVSUk9SOiB0cmVlIGRpciwgJXMs IG5vdCBhY3RpdmVcbiIsIGFkLT5mdHNfZW50LT5mdHNfYWNjcGF0aCk7Ci0tICBwcmludGYgKCJh Y3RpdmUgZGlyczpcbiIpOwotLSAgZm9yIChGVFNFTlRSWSBjb25zdCAqZW50ID0gZV9jdXJyOwot LSAgICAgICBlbnQtPmZ0c19sZXZlbCA+PSBGVFNfUk9PVExFVkVMOwotLSAgICAgICBlbnQgPSBl bnQtPmZ0c19wYXJlbnQpCi0tICAgIHByaW50ZiAoIiAgJXMoJSJQUkl1TUFYIi8lIlBSSXVNQVgi KSB0byAlcyglIlBSSXVNQVgiLyUiUFJJdU1BWCIpLi4uXG4iLAotLSAgICAgICAgICAgIGFkLT5m dHNfZW50LT5mdHNfYWNjcGF0aCwKLS0gICAgICAgICAgICAodWludG1heF90KSBhZC0+ZGV2LAot LSAgICAgICAgICAgICh1aW50bWF4X3QpIGFkLT5pbm8sCi0tICAgICAgICAgICAgZW50LT5mdHNf YWNjcGF0aCwKLS0gICAgICAgICAgICAodWludG1heF90KSBlbnQtPmZ0c19zdGF0cC0+c3RfZGV2 LAotLSAgICAgICAgICAgICh1aW50bWF4X3QpIGVudC0+ZnRzX3N0YXRwLT5zdF9pbm8pOwotLX0K LS0KLS12b2lkCi0tZnRzX2Nyb3NzX2NoZWNrIChGVFNPQkogY29uc3QgKnNwKQotLXsKLS0gIGlm ICggISBJU1NFVCAoRlRTX1RJR0hUX0NZQ0xFX0NIRUNLKSkKLS0gICAgcmV0dXJuOwotLQotLSAg RlRTRU5UUlkgY29uc3QgKmVudCA9IHNwLT5mdHNfY3VyOwotLQotLSAgRHByaW50ZiAoKCJmdHMt Y3Jvc3MtY2hlY2sgY3VyPSVzXG4iLCBlbnQtPmZ0c19wYXRoKSk7Ci0tICAvKiBNYWtlIHN1cmUg ZXZlcnkgcGFyZW50IGRpciBpcyBpbiB0aGUgdHJlZS4gICovCi0tICBmb3IgKEZUU0VOVFJZIGNv bnN0ICp0ID0gZW50LT5mdHNfcGFyZW50OwotLSAgICAgICB0LT5mdHNfbGV2ZWwgPj0gRlRTX1JP T1RMRVZFTDsKLS0gICAgICAgdCA9IHQtPmZ0c19wYXJlbnQpCi0tICAgIHsKLS0gICAgICBzdHJ1 Y3QgQWN0aXZlX2RpciBhZDsKLS0gICAgICBhZC5pbm8gPSB0LT5mdHNfc3RhdHAtPnN0X2lubzsK LS0gICAgICBhZC5kZXYgPSB0LT5mdHNfc3RhdHAtPnN0X2RldjsKLS0gICAgICBpZiAoICEgaGFz aF9sb29rdXAgKHNwLT5mdHNfY3ljbGUuaHQsICZhZCkpCi0tICAgICAgICBwcmludGYgKCJFUlJP UjogYWN0aXZlIGRpciwgJXMsIG5vdCBpbiB0cmVlXG4iLCB0LT5mdHNfcGF0aCk7Ci0tICAgIH0K LS0KLS0gIC8qIE1ha2Ugc3VyZSBldmVyeSBkaXIgaW4gdGhlIHRyZWUgaXMgYW4gYWN0aXZlIGRp ci4KLS0gICAgIEJ1dCBFTlQgaXMgbm90IG5lY2Vzc2FyaWx5IGEgZGlyZWN0b3J5LiAgSWYgc28s IGp1c3Qgc2tpcCB0aGlzIHBhcnQuICovCi0tICBpZiAoZW50LT5mdHNfcGFyZW50LT5mdHNfbGV2 ZWwgPj0gRlRTX1JPT1RMRVZFTAotLSAgICAgICYmIChlbnQtPmZ0c19pbmZvID09IEZUU19EUAot LSAgICAgICAgICB8fCBlbnQtPmZ0c19pbmZvID09IEZUU19EKSkKLS0gICAgZm9yIChzdHJ1Y3Qg QWN0aXZlX2RpciAqYWQgPSBoYXNoX2dldF9maXJzdCAoc3AtPmZ0c19jeWNsZS5odCk7Ci0tICAg ICAgICAgYWQgIT0gTlVMTDsKLS0gICAgICAgICBhZCA9IGhhc2hfZ2V0X25leHQgKHNwLT5mdHNf Y3ljbGUuaHQsIGFkKSkKLS0gICAgICB7Ci0tICAgICAgICBmaW5kX21hdGNoaW5nX2FuY2VzdG9y IChlbnQsIGFkKTsKLS0gICAgICB9Ci0tfQotLQotLXN0YXRpYyBib29sCi0tc2FtZV9mZCAoaW50 IGZkMSwgaW50IGZkMikKLS17Ci0tICBzdHJ1Y3QgU1RSVUNUX1NUQVQgc2IxLCBzYjI7Ci0tICBy ZXR1cm4gKEZTVEFUIChmZDEsICZzYjEpID09IDAKLS0gICAgICAgICAgJiYgRlNUQVQgKGZkMiwg JnNiMikgPT0gMAotLSAgICAgICAgICAmJiBwc2FtZV9pbm9kZSAoJnNiMSwgJnNiMikpOwotLX0K LS0KLS1zdGF0aWMgdm9pZAotLWZkX3JpbmdfcHJpbnQgKEZUU09CSiBjb25zdCAqc3AsIEZJTEUg KnN0cmVhbSwgY2hhciBjb25zdCAqbXNnKQotLXsKLS0gIGlmICghZnRzX2RlYnVnKQotLSAgICBy ZXR1cm47Ci0tICBJX3JpbmcgY29uc3QgKmZkX3JpbmcgPSAmc3AtPmZ0c19mZF9yaW5nOwotLSAg c3RydWN0IGRldmlubyBjd2QgPSBnZXRkZXZpbm8gKHNwLT5mdHNfY3dkX2ZkKTsKLS0gIGZwcmlu dGYgKHN0cmVhbSwgIj09PSAlcyA9PT09PT09PT09ICJQUklOVF9ERVZJTk8iXG4iLCBtc2csIGN3 ZC5kZXYsIGN3ZC5pbm8pOwotLSAgaWYgKGlfcmluZ19lbXB0eSAoZmRfcmluZykpCi0tICAgIHJl dHVybjsKLS0KLS0gIHVuc2lnbmVkIGludCBpID0gZmRfcmluZy0+aXJfZnJvbnQ7Ci0tICB3aGls ZSAodHJ1ZSkKLS0gICAgewotLSAgICAgIGludCBmZCA9IGZkX3JpbmctPmlyX2RhdGFbaV07Ci0t ICAgICAgaWYgKGZkIDwgMCkKLS0gICAgICAgIGZwcmludGYgKHN0cmVhbSwgIiV1OiAlZDpcbiIs IGksIGZkKTsKLS0gICAgICBlbHNlCi0tICAgICAgICB7Ci0tICAgICAgICAgIHN0cnVjdCBkZXZp bm8gd2QgPSBnZXRkZXZpbm8gKGZkKTsKLS0gICAgICAgICAgZnByaW50ZiAoc3RyZWFtLCAiJXU6 ICVkOiAiUFJJTlRfREVWSU5PIlxuIiwgaSwgZmQsIHdkLmRldiwgd2QuaW5vKTsKLS0gICAgICAg IH0KLS0gICAgICBpZiAoaSA9PSBmZF9yaW5nLT5pcl9iYWNrKQotLSAgICAgICAgYnJlYWs7Ci0t ICAgICAgaSA9IChpICsgSV9SSU5HX1NJWkUgLSAxKSAlIElfUklOR19TSVpFOwotLSAgICB9Ci0t fQotLQotLS8qIEVuc3VyZSB0aGF0IGVhY2ggZmlsZSBkZXNjcmlwdG9yIG9uIHRoZSBmZF9yaW5n IG1hdGNoZXMgYQotLSAgIHBhcmVudCwgZ3JhbmRwYXJlbnQsIGV0Yy4gb2YgdGhlIGN1cnJlbnQg d29ya2luZyBkaXJlY3RvcnkuICAqLwotLXN0YXRpYyB2b2lkCi0tZmRfcmluZ19jaGVjayAoRlRT T0JKIGNvbnN0ICpzcCkKLS17Ci0tICBpZiAoIWZ0c19kZWJ1ZykKLS0gICAgcmV0dXJuOwotLQot LSAgLyogTWFrZSBhIHdyaXRhYmxlIGNvcHkuICAqLwotLSAgSV9yaW5nIGZkX3cgPSBzcC0+ZnRz X2ZkX3Jpbmc7Ci0tCi0tICBpbnQgY3dkX2ZkID0gc3AtPmZ0c19jd2RfZmQ7Ci0tICBjd2RfZmQg PSBmY250bCAoY3dkX2ZkLCBGX0RVUEZEX0NMT0VYRUMsIFNUREVSUl9GSUxFTk8gKyAxKTsKLS0g IHN0cnVjdCBkZXZpbm8gZG90ID0gZ2V0ZGV2aW5vIChjd2RfZmQpOwotLSAgZnByaW50ZiAoc3Rk ZXJyLCAiPT09PT0gY2hlY2sgPT09PT0gY3dkOiAiUFJJTlRfREVWSU5PIlxuIiwKLS0gICAgICAg ICAgIGRvdC5kZXYsIGRvdC5pbm8pOwotLSAgd2hpbGUgKCAhIGlfcmluZ19lbXB0eSAoJmZkX3cp KQotLSAgICB7Ci0tICAgICAgaW50IGZkID0gaV9yaW5nX3BvcCAoJmZkX3cpOwotLSAgICAgIGlm ICgwIDw9IGZkKQotLSAgICAgICAgewotLSAgICAgICAgICBpbnQgb3Blbl9mbGFncyA9IE9fU0VB UkNIIHwgT19DTE9FWEVDOwotLSAgICAgICAgICBpbnQgcGFyZW50X2ZkID0gb3BlbmF0IChjd2Rf ZmQsICIuLiIsIG9wZW5fZmxhZ3MpOwotLSAgICAgICAgICBpZiAocGFyZW50X2ZkIDwgMCkKLS0g ICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICAvLyBXYXJuPwotLSAgICAgICAgICAgICAgYnJl YWs7Ci0tICAgICAgICAgICAgfQotLSAgICAgICAgICBpZiAoIXNhbWVfZmQgKGZkLCBwYXJlbnRf ZmQpKQotLSAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAgIHN0cnVjdCBkZXZpbm8gY3dkID0g Z2V0ZGV2aW5vIChmZCk7Ci0tICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJyaW5nICA6 ICJQUklOVF9ERVZJTk8iXG4iLCBjd2QuZGV2LCBjd2QuaW5vKTsKLS0gICAgICAgICAgICAgIHN0 cnVjdCBkZXZpbm8gYzIgPSBnZXRkZXZpbm8gKHBhcmVudF9mZCk7Ci0tICAgICAgICAgICAgICBm cHJpbnRmIChzdGRlcnIsICJwYXJlbnQ6ICJQUklOVF9ERVZJTk8iXG4iLCBjMi5kZXYsIGMyLmlu byk7Ci0tICAgICAgICAgICAgICBmdHNfYXNzZXJ0ICgwKTsKLS0gICAgICAgICAgICB9Ci0tICAg ICAgICAgIGNsb3NlIChjd2RfZmQpOwotLSAgICAgICAgICBjd2RfZmQgPSBwYXJlbnRfZmQ7Ci0t ICAgICAgICB9Ci0tICAgIH0KLS0gIGNsb3NlIChjd2RfZmQpOwotLX0KLS0jZW5kaWYKLS0KLS1z dGF0aWMgdW5zaWduZWQgc2hvcnQgaW50Ci0taW50ZXJuYWxfZnVuY3Rpb24KLS1mdHNfc3RhdChG VFNPQkogKnNwLCByZWdpc3RlciBGVFNFTlRSWSAqcCwgYm9vbCBmb2xsb3cpCi0tewotLSAgICAg ICAgaWYgKElTU0VUIChGVFNfTE9HSUNBTCkKLS0gICAgICAgICAgICB8fCAoSVNTRVQgKEZUU19D T01GT0xMT1cpICYmIHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVMKSkKLS0gICAgICAgICAg ICAgICAgZm9sbG93ID0gdHJ1ZTsKLS0KLS0gICAgICAgIHN0cnVjdCBTVFJVQ1RfU1RBVCAqc2Jw ID0gcC0+ZnRzX3N0YXRwOwotLQotLSAgICAgICAgLyoKLS0gICAgICAgICAqIElmIGRvaW5nIGEg bG9naWNhbCB3YWxrLCBvciBhcHBsaWNhdGlvbiByZXF1ZXN0ZWQgRlRTX0ZPTExPVywgZG8KLS0g ICAgICAgICAqIGEgc3RhdCgyKS4gIElmIHRoYXQgZmFpbHMsIGNoZWNrIGZvciBhIG5vbmV4aXN0 ZW50IHN5bWxpbmsuICBJZgotLSAgICAgICAgICogZmFpbCwgc2V0IHRoZSBlcnJubyBmcm9tIHRo ZSBzdGF0IGNhbGwuCi0tICAgICAgICAgKi8KLS0gICAgICAgIGludCBmbGFncyA9IGZvbGxvdyA/ IDAgOiBBVF9TWU1MSU5LX05PRk9MTE9XOwotLSAgICAgICAgaWYgKEZTVEFUQVQgKHNwLT5mdHNf Y3dkX2ZkLCBwLT5mdHNfYWNjcGF0aCwgc2JwLCBmbGFncykgPCAwKQotLSAgICAgICAgICB7Ci0t ICAgICAgICAgICAgaWYgKGZvbGxvdyAmJiBlcnJubyA9PSBFTk9FTlQKLS0gICAgICAgICAgICAg ICAgJiYgMCA8PSBGU1RBVEFUIChzcC0+ZnRzX2N3ZF9mZCwgcC0+ZnRzX2FjY3BhdGgsIHNicCwK LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVF9TWU1MSU5LX05PRk9MTE9XKSkK LS0gICAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKDApOwotLSAg ICAgICAgICAgICAgICByZXR1cm4gRlRTX1NMTk9ORTsKLS0gICAgICAgICAgICAgIH0KLS0KLS0g ICAgICAgICAgICBwLT5mdHNfZXJybm8gPSBlcnJubzsKLS0gICAgICAgICAgIG1lbXNldCAoc2Jw LCAwLCBzaXplb2YgKnNicCk7Ci0tICAgICAgICAgICAgcmV0dXJuIEZUU19OUzsKLS0gICAgICAg ICAgfQotLQotLSAgICAgICAgaWYgKFNfSVNESVIoc2JwLT5zdF9tb2RlKSkgewotLSAgICAgICAg ICAgICAgICBpZiAoSVNET1QocC0+ZnRzX25hbWUpKSB7Ci0tICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ29tbWFuZC1saW5lICIuIiBhbmQgIi4uIiBhcmUgcmVhbCBkaXJlY3Rvcmllcy4gKi8K LS0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9P VExFVkVMID8gRlRTX0QgOiBGVFNfRE9UKTsKLS0gICAgICAgICAgICAgICAgfQotLQotLSAgICAg ICAgICAgICAgICByZXR1cm4gKEZUU19EKTsKLS0gICAgICAgIH0KLS0gICAgICAgIGlmIChTX0lT TE5LKHNicC0+c3RfbW9kZSkpCi0tICAgICAgICAgICAgICAgIHJldHVybiAoRlRTX1NMKTsKLS0g ICAgICAgIGlmIChTX0lTUkVHKHNicC0+c3RfbW9kZSkpCi0tICAgICAgICAgICAgICAgIHJldHVy biAoRlRTX0YpOwotLSAgICAgICAgcmV0dXJuIChGVFNfREVGQVVMVCk7Ci0tfQotLQotLXN0YXRp YyBpbnQKLS1mdHNfY29tcGFyICh2b2lkIGNvbnN0ICphLCB2b2lkIGNvbnN0ICpiKQotLXsKLS0g IC8qIENvbnZlcnQgQSBhbmQgQiB0byB0aGUgY29ycmVjdCB0eXBlcywgdG8gcGFjaWZ5IHRoZSBj b21waWxlciwgYW5kCi0tICAgICBmb3IgcG9ydGFiaWxpdHkgdG8gYml6YXJyZSBob3N0cyB3aGVy ZSAidm9pZCBjb25zdCAqIiBhbmQgIkZUU0VOVAotLSAgICAgY29uc3QgKioiIGRpZmZlciBpbiBy dW50aW1lIHJlcHJlc2VudGF0aW9uLiAgVGhlIGNvbXBhcmlzb24KLS0gICAgIGZ1bmN0aW9uIGNh bm5vdCBtb2RpZnkgKmEgYW5kICpiLCBidXQgdGhlcmUgaXMgbm8gY29tcGlsZS10aW1lCi0tICAg ICBjaGVjayBmb3IgdGhpcy4gICovCi0tICBGVFNFTlRSWSBjb25zdCAqKnBhID0gKEZUU0VOVFJZ IGNvbnN0ICoqKSBhOwotLSAgRlRTRU5UUlkgY29uc3QgKipwYiA9IChGVFNFTlRSWSBjb25zdCAq KikgYjsKLS0gIHJldHVybiBGVFNFTlRfRlRTKHBhWzBdKS0+ZnRzX2NvbXBhciAocGEsIHBiKTsK LS19Ci0tCi0tc3RhdGljIEZUU0VOVFJZICoKLS1pbnRlcm5hbF9mdW5jdGlvbgotLWZ0c19zb3J0 IChGVFNPQkogKnNwLCBGVFNFTlRSWSAqaGVhZCwgcmVnaXN0ZXIgc2l6ZV90IG5pdGVtcykKLS17 Ci0tICAgICAgICByZWdpc3RlciBGVFNFTlRSWSAqKmFwLCAqcDsKLS0KLS0gICAgICAgIC8qIE9u IG1vc3QgbW9kZXJuIGhvc3RzLCB2b2lkICogYW5kIEZUU0VOVCAqKiBoYXZlIHRoZSBzYW1lCi0t ICAgICAgICAgICBydW4tdGltZSByZXByZXNlbnRhdGlvbiwgYW5kIG9uZSBjYW4gY29udmVydCBz cC0+ZnRzX2NvbXBhciB0bwotLSAgICAgICAgICAgdGhlIHR5cGUgcXNvcnQgZXhwZWN0cyB3aXRo b3V0IHByb2JsZW0uICBVc2UgdGhlIGhldXJpc3RpYyB0aGF0Ci0tICAgICAgICAgICB0aGlzIGlz IE9LIGlmIHRoZSB0d28gcG9pbnRlciB0eXBlcyBhcmUgdGhlIHNhbWUgc2l6ZSwgYW5kIGlmCi0t ICAgICAgICAgICBjb252ZXJ0aW5nIEZUU0VOVCAqKiB0byB1aW50cHRyX3QgaXMgdGhlIHNhbWUg YXMgY29udmVydGluZwotLSAgICAgICAgICAgRlRTRU5UICoqIHRvIHZvaWQgKiBhbmQgdGhlbiB0 byB1aW50cHRyX3QuICBUaGlzIGhldXJpc3RpYyBpc24ndAotLSAgICAgICAgICAgdmFsaWQgaW4g Z2VuZXJhbCBidXQgd2UgZG9uJ3Qga25vdyBvZiBhbnkgY291bnRlcmV4YW1wbGVzLiAgKi8KLS0g ICAgICAgIEZUU0VOVFJZICpkdW1teTsKLS0gICAgICAgIGludCAoKmNvbXBhcmUpICh2b2lkIGNv bnN0ICosIHZvaWQgY29uc3QgKikgPQotLSAgICAgICAgICAoKHNpemVvZiAmZHVtbXkgPT0gc2l6 ZW9mICh2b2lkICopCi0tICAgICAgICAgICAgJiYgKHVpbnRwdHJfdCkgJmR1bW15ID09ICh1aW50 cHRyX3QpICh2b2lkICopICZkdW1teSkKLS0gICAgICAgICAgID8gKGludCAoKikgKHZvaWQgY29u c3QgKiwgdm9pZCBjb25zdCAqKSkgc3AtPmZ0c19jb21wYXIKLS0gICAgICAgICAgIDogZnRzX2Nv bXBhcik7Ci0tCi0tICAgICAgICAvKgotLSAgICAgICAgICogQ29uc3RydWN0IGFuIGFycmF5IG9m IHBvaW50ZXJzIHRvIHRoZSBzdHJ1Y3R1cmVzIGFuZCBjYWxsIHFzb3J0KDMpLgotLSAgICAgICAg ICogUmVhc3NlbWJsZSB0aGUgYXJyYXkgaW4gdGhlIG9yZGVyIHJldHVybmVkIGJ5IHFzb3J0LiAg SWYgdW5hYmxlIHRvCi0tICAgICAgICAgKiBzb3J0IGZvciBtZW1vcnkgcmVhc29ucywgcmV0dXJu IHRoZSBkaXJlY3RvcnkgZW50cmllcyBpbiB0aGVpcgotLSAgICAgICAgICogY3VycmVudCBvcmRl ci4gIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhlIGN1cnJlbnQgbmVlZHMgcGx1cwotLSAg ICAgICAgICogNDAgc28gZG9uJ3QgcmVhbGxvYyBvbmUgZW50cnkgYXQgYSB0aW1lLgotLSAgICAg ICAgICovCi0tICAgICAgICBpZiAobml0ZW1zID4gc3AtPmZ0c19uaXRlbXMpIHsKLS0gICAgICAg ICAgICAgICAgc3AtPmZ0c19uaXRlbXMgPSBuaXRlbXMgKyA0MDsKLS0gICAgICAgICAgICAgICAg RlRTRU5UUlkgKiphOwotLSAgICAgICAgICAgICAgICBpZiAoISAoYSA9IHJlYWxsb2NhcnJheSAo c3AtPmZ0c19hcnJheSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNwLT5mdHNfbml0ZW1zLCBzaXplb2YgKmEpKSkgewotLSAgICAgICAgICAgICAgICAgICAgICAg IGZyZWUoc3AtPmZ0c19hcnJheSk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmZ0c19h cnJheSA9IE5VTEw7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmZ0c19uaXRlbXMgPSAw OwotLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaGVhZCk7Ci0tICAgICAgICAgICAg ICAgIH0KLS0gICAgICAgICAgICAgICAgc3AtPmZ0c19hcnJheSA9IGE7Ci0tICAgICAgICB9Ci0t ICAgICAgICBmb3IgKGFwID0gc3AtPmZ0c19hcnJheSwgcCA9IGhlYWQ7IHA7IHAgPSBwLT5mdHNf bGluaykKLS0gICAgICAgICAgICAgICAgKmFwKysgPSBwOwotLSAgICAgICAgcXNvcnQoKHZvaWQg KilzcC0+ZnRzX2FycmF5LCBuaXRlbXMsIHNpemVvZihGVFNFTlRSWSAqKSwgY29tcGFyZSk7Ci0t ICAgICAgICBmb3IgKGhlYWQgPSAqKGFwID0gc3AtPmZ0c19hcnJheSk7IC0tbml0ZW1zOyArK2Fw KQotLSAgICAgICAgICAgICAgICBhcFswXS0+ZnRzX2xpbmsgPSBhcFsxXTsKLS0gICAgICAgIGFw WzBdLT5mdHNfbGluayA9IE5VTEw7Ci0tICAgICAgICByZXR1cm4gKGhlYWQpOwotLX0KLS0KLS1z dGF0aWMgRlRTRU5UUlkgKgotLWludGVybmFsX2Z1bmN0aW9uCi0tZnRzX2FsbG9jIChGVFNPQkog KnNwLCBjb25zdCBjaGFyICpuYW1lLCByZWdpc3RlciBzaXplX3QgbmFtZWxlbikKLS17Ci0tICAg ICAgICAvKgotLSAgICAgICAgICogVGhlIGZpbGUgbmFtZSBpcyBhIHZhcmlhYmxlIGxlbmd0aCBh cnJheS4gIEFsbG9jYXRlIHRoZSBGVFNFTlQKLS0gICAgICAgICAqIHN0cnVjdHVyZSBhbmQgdGhl IGZpbGUgbmFtZSBpbiBvbmUgY2h1bmsuCi0tICAgICAgICAgKi8KLS0gICAgICAgIHNpemVfdCBs ZW4gPSBGTEVYU0laRU9GKEZUU0VOVCwgZnRzX25hbWUsIG5hbWVsZW4gKyAxKTsKLS0JcmVnaXN0 ZXIgRlRTRU5UUlkgKnA7Ci0tI2lmICFfTElCQwotLSAgICAgICAgcCA9IG1hbGxvYyhsZW4pOwot LSAgICAgICAgaWYgKHAgPT0gTlVMTCkKLS0gICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsK LS0jZWxzZQotLQkvKgotLQkgKiBGb3IgZ2xpYmMsIHdlIHVzZSBhIHdyYXBwZXIgc3RydWN0IHRv IHByb3ZpZGUgdGhlIGV4dHJhIHJlcXVpcmVkCi0tCSAqIGZpZWxkcyB3aXRob3V0IGNoYW5naW5n IHRoZSBGU0VOVCBsYXlvdXQuCi0tCSAqLwotLQlsZW4gKz0gc2l6ZW9mIChzdHJ1Y3QgRlRTRU5U X3dyYXBwZXIpOwotLQlzdHJ1Y3QgRlRTRU5UX3dyYXBwZXIgKndyYXBwZXIgPSBtYWxsb2MobGVu KTsKLS0JaWYgKHdyYXBwZXIgPT0gTlVMTCkKLS0JCXJldHVybiAoTlVMTCk7Ci0tCXAgPSAmd3Jh cHBlci0+ZW50OwotLSAgICAgICAgcC0+ZnRzX3N0YXRwID0gJndyYXBwZXItPmZ0c19zdGF0Owot LSNlbmRpZgotLQotLSAgICAgICAgLyogQ29weSB0aGUgbmFtZSBhbmQgZ3VhcmFudGVlIE5VTCB0 ZXJtaW5hdGlvbi4gKi8KLS0gICAgICAgIG1lbWNweShwLT5mdHNfbmFtZSwgbmFtZSwgbmFtZWxl bik7Ci0tICAgICAgICBwLT5mdHNfbmFtZVtuYW1lbGVuXSA9ICdcMCc7Ci0tCi0tICAgICAgICBw LT5mdHNfbmFtZWxlbiA9IG5hbWVsZW47Ci0tICAgICAgICBGVFNFTlRfRlRTKHApPSBzcDsKLS0g ICAgICAgIHAtPmZ0c19wYXRoID0gc3AtPmZ0c19wYXRoOwotLSAgICAgICAgcC0+ZnRzX2Vycm5v ID0gMDsKLS0gICAgICAgIEZUU0VOVF9ESVJQKHApID0gTlVMTDsKLS0gICAgICAgIHAtPmZ0c19m bGFncyA9IDA7Ci0tICAgICAgICBwLT5mdHNfaW5zdHIgPSBGVFNfTk9JTlNUUjsKLS0gICAgICAg IHAtPmZ0c19udW1iZXIgPSAwOwotLSAgICAgICAgcC0+ZnRzX3BvaW50ZXIgPSBOVUxMOwotLSAg ICAgICAgcmV0dXJuIChwKTsKLS19Ci0tCi0tc3RhdGljIHZvaWQKLS1pbnRlcm5hbF9mdW5jdGlv bgotLWZ0c19sZnJlZSAocmVnaXN0ZXIgRlRTRU5UUlkgKmhlYWQpCi0tewotLSAgICAgICAgaW50 IHNhdmVkX2Vycm5vID0gZXJybm87Ci0tCi0tICAgICAgICAvKiBGcmVlIGEgbGlua2VkIGxpc3Qg b2Ygc3RydWN0dXJlcy4gKi8KLS0gICAgICAgIHJlZ2lzdGVyIEZUU0VOVFJZICpwOwotLSAgICAg ICAgd2hpbGUgKChwID0gaGVhZCkpIHsKLS0gICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQtPmZ0 c19saW5rOwotLSAgICAgICAgICAgICAgICBpZiAoRlRTRU5UX0RJUlAocCkpCi0tICAgICAgICAg ICAgICAgICAgICAgICAgY2xvc2VkaXIgKEZUU0VOVF9ESVJQKHApKTsKLS0gICAgICAgICAgICAg ICAgZnJlZShGVFNFTlRfV1JBUFBFUihwKSk7Ci0tICAgICAgICB9Ci0tCi0tICAgICAgICBfX3Nl dF9lcnJubyAoc2F2ZWRfZXJybm8pOwotLX0KLS0KLS0vKgotLSAqIEFsbG93IGVzc2VudGlhbGx5 IHVubGltaXRlZCBmaWxlIG5hbWUgbGVuZ3RoczsgZmluZCwgcm0sIGxzIHNob3VsZAotLSAqIGFs bCB3b3JrIG9uIGFueSB0cmVlLiAgTW9zdCBzeXN0ZW1zIHdpbGwgYWxsb3cgY3JlYXRpb24gb2Yg ZmlsZQotLSAqIG5hbWVzIG11Y2ggbG9uZ2VyIHRoYW4gTUFYUEFUSExFTiwgZXZlbiB0aG91Z2gg dGhlIGtlcm5lbCB3b24ndAotLSAqIHJlc29sdmUgdGhlbS4gIEFkZCB0aGUgc2l6ZSAobm90IGp1 c3Qgd2hhdCdzIG5lZWRlZCkgcGx1cyAyNTYgYnl0ZXMKLS0gKiBzbyBkb24ndCByZWFsbG9jIHRo ZSBmaWxlIG5hbWUgMiBieXRlcyBhdCBhIHRpbWUuCi0tICovCi0tc3RhdGljIGJvb2wKLS1pbnRl cm5hbF9mdW5jdGlvbgotLWZ0c19wYWxsb2MgKEZUU09CSiAqc3AsIHNpemVfdCBtb3JlKQotLXsK LS0gICAgICAgIHNpemVfdCBuZXdfbGVuID0gc3AtPmZ0c19wYXRobGVuICsgbW9yZSArIDI1NjsK LS0KLS0gICAgICAgIC8qCi0tICAgICAgICAgKiBTZWUgaWYgZnRzX3BhdGhsZW4gd291bGQgb3Zl cmZsb3cuCi0tICAgICAgICAgKi8KLS0gICAgICAgIGlmIChuZXdfbGVuIDwgc3AtPmZ0c19wYXRo bGVuKSB7Ci0tICAgICAgICAgICAgICAgIGZyZWUoc3AtPmZ0c19wYXRoKTsKLS0gICAgICAgICAg ICAgICAgc3AtPmZ0c19wYXRoID0gTlVMTDsKLS0gICAgICAgICAgICAgICAgX19zZXRfZXJybm8g KEVOQU1FVE9PTE9ORyk7Ci0tICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLS0gICAgICAg IH0KLS0gICAgICAgIHNwLT5mdHNfcGF0aGxlbiA9IG5ld19sZW47Ci0tICAgICAgICBjaGFyICpw ID0gcmVhbGxvYyhzcC0+ZnRzX3BhdGgsIHNwLT5mdHNfcGF0aGxlbik7Ci0tICAgICAgICBpZiAo cCA9PSBOVUxMKSB7Ci0tICAgICAgICAgICAgICAgIGZyZWUoc3AtPmZ0c19wYXRoKTsKLS0gICAg ICAgICAgICAgICAgc3AtPmZ0c19wYXRoID0gTlVMTDsKLS0gICAgICAgICAgICAgICAgcmV0dXJu IGZhbHNlOwotLSAgICAgICAgfQotLSAgICAgICAgc3AtPmZ0c19wYXRoID0gcDsKLS0gICAgICAg IHJldHVybiB0cnVlOwotLX0KLS0KLS0vKgotLSAqIFdoZW4gdGhlIGZpbGUgbmFtZSBpcyByZWFs bG9jJ2QsIGhhdmUgdG8gZml4IGFsbCBvZiB0aGUgcG9pbnRlcnMgaW4KLS0gKiAgc3RydWN0dXJl cyBhbHJlYWR5IHJldHVybmVkLgotLSAqLwotLXN0YXRpYyB2b2lkCi0taW50ZXJuYWxfZnVuY3Rp b24KLS1mdHNfcGFkanVzdCAoRlRTT0JKICpzcCwgRlRTRU5UUlkgKmhlYWQpCi0tewotLSAgICAg ICAgY2hhciAqYWRkciA9IHNwLT5mdHNfcGF0aDsKLS0KLS0gICAgICAgIC8qIFRoaXMgY29kZSBs b29rcyBhdCBiaXQtcGF0dGVybnMgb2YgZnJlZWQgcG9pbnRlcnMgdG8KLS0gICAgICAgICAgIHJl bG9jYXRlIHRoZW0sIHNvIGl0IHJlbGllcyBvbiB1bmRlZmluZWQgYmVoYXZpb3IuICBJZiB0aGlz Ci0tICAgICAgICAgICB0cmljayBkb2VzIG5vdCB3b3JrIG9uIHlvdXIgcGxhdGZvcm0sIHBsZWFz ZSByZXBvcnQgYSBidWcuICAqLwotLQotLSNkZWZpbmUgQURKVVNUKHApIGRvIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgICAgIHVpbnRw dHJfdCBvbGRfYWNjcGF0aCA9ICh1aW50cHRyX3QpIChwKS0+ZnRzX2FjY3BhdGg7ICAgICAgICAg ICBcCi0tICAgICAgICBpZiAob2xkX2FjY3BhdGggIT0gKHVpbnRwdHJfdCkgKHApLT5mdHNfbmFt ZSkgeyAgICAgICAgICAgICAgICAgXAotLSAgICAgICAgICAgICAgICAocCktPmZ0c19hY2NwYXRo ID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgICAgICAgICAg ICAgICBhZGRyICsgKG9sZF9hY2NwYXRoIC0gKHVpbnRwdHJfdCkgKHApLT5mdHNfcGF0aCk7ICAg ICBcCi0tICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotLSAgICAgICAgKHApLT5mdHNfcGF0aCA9IGFkZHI7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS19IHdoaWxlICgwKQot LSAgICAgICAgLyogQWRqdXN0IHRoZSBjdXJyZW50IHNldCBvZiBjaGlsZHJlbi4gKi8KLS0gICAg ICAgIGZvciAoRlRTRU5UUlkgKnAgPSBzcC0+ZnRzX2NoaWxkOyBwOyBwID0gcC0+ZnRzX2xpbmsp Ci0tICAgICAgICAgICAgICAgIEFESlVTVChwKTsKLS0KLS0gICAgICAgIC8qIEFkanVzdCB0aGUg cmVzdCBvZiB0aGUgdHJlZSwgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGxldmVsLiAqLwotLSAgICAg ICAgZm9yIChGVFNFTlRSWSAqcCA9IGhlYWQ7IHAtPmZ0c19sZXZlbCA+PSBGVFNfUk9PVExFVkVM OykgewotLSAgICAgICAgICAgICAgICBBREpVU1QocCk7Ci0tICAgICAgICAgICAgICAgIHAgPSBw LT5mdHNfbGluayA/IHAtPmZ0c19saW5rIDogcC0+ZnRzX3BhcmVudDsKLS0gICAgICAgIH0KLS19 Ci0tCi0tc3RhdGljIHNpemVfdAotLWludGVybmFsX2Z1bmN0aW9uIF9HTF9BVFRSSUJVVEVfUFVS RQotLWZ0c19tYXhhcmdsZW4gKGNoYXIgKiBjb25zdCAqYXJndikKLS17Ci0tICAgICAgICBzaXpl X3QgbWF4OwotLQotLSAgICAgICAgZm9yIChtYXggPSAwOyAqYXJndjsgKythcmd2KSB7Ci0tICAg ICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oKmFyZ3YpOwotLSAgICAgICAgICAgICAg ICBpZiAobGVuID4gbWF4KQotLSAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IGxlbjsKLS0g ICAgICAgIH0KLS0gICAgICAgIHJldHVybiAobWF4ICsgMSk7Ci0tfQotLQotLS8qCi0tICogQ2hh bmdlIHRvIGRpciBzcGVjaWZpZWQgYnkgZmQgb3IgZmlsZSBuYW1lIHdpdGhvdXQgZ2V0dGluZwot LSAqIHRyaWNrZWQgYnkgc29tZW9uZSBjaGFuZ2luZyB0aGUgd29ybGQgb3V0IGZyb20gdW5kZXJu ZWF0aCB1cy4KLS0gKiBBc3N1bWVzIHAtPmZ0c19zdGF0cC0+c3RfZGV2IGFuZCBwLT5mdHNfc3Rh dHAtPnN0X2lubyBhcmUgZmlsbGVkIGluLgotLSAqIElmIEZEIGlzIG5vbi1uZWdhdGl2ZSwgZXhw ZWN0IGl0IHRvIGJlIHVzZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLAotLSAqIGFuZCB0 byBiZSBjbG9zZWQgZXZlbnR1YWxseS4gIFNvIGRvbid0IHBhc3MgZS5nLiwgJ2RpcmZkKGRpcnAp JyBhbmQgdGhlbgotLSAqIGRvIGNsb3NlZGlyKGRpcnApLCBiZWNhdXNlIHRoYXQgd291bGQgaW52 YWxpZGF0ZSB0aGUgc2F2ZWQgRkQuCi0tICogVXBvbiBmYWlsdXJlLCBjbG9zZSBGRCBpbW1lZGlh dGVseSBhbmQgcmV0dXJuIG5vbnplcm8uCi0tICovCi0tc3RhdGljIGludAotLWludGVybmFsX2Z1 bmN0aW9uCi0tZnRzX3NhZmVfY2hhbmdlZGlyIChGVFNPQkogKnNwLCBGVFNFTlRSWSAqcCwgaW50 IGZkLCBjaGFyIGNvbnN0ICpkaXIpCi0tewotLSAgICAgICAgZnRzX2Fzc2VydCAoMCA8PSBmZCB8 fCBkaXIgIT0gTlVMTCk7Ci0tICAgICAgICBib29sIGlzX2RvdGRvdCA9IGRpciAmJiBzdHJlcSAo ZGlyLCAiLi4iKTsKLS0KLS0gICAgICAgIC8qIFRoaXMgY2xhdXNlIGhhbmRsZXMgdGhlIHVudXN1 YWwgY2FzZSBpbiB3aGljaCBGVFNfTk9DSERJUgotLSAgICAgICAgICAgaXMgc3BlY2lmaWVkLCBh bG9uZyB3aXRoIEZUU19DV0RGRC4gIEluIHRoYXQgY2FzZSwgdGhlcmUgaXMKLS0gICAgICAgICAg IG5vIG5lZWQgdG8gY2hhbmdlIGV2ZW4gdGhlIHZpcnR1YWwgY3dkIGZpbGUgZGVzY3JpcHRvci4K LS0gICAgICAgICAgIEhvd2V2ZXIsIGlmIEZEIGlzIG5vbi1uZWdhdGl2ZSwgd2UgZG8gY2xvc2Ug aXQgaGVyZS4gICovCi0tICAgICAgICBpZiAoSVNTRVQgKEZUU19OT0NIRElSKSkKLS0gICAgICAg ICAgewotLSAgICAgICAgICAgIGlmIChJU1NFVCAoRlRTX0NXREZEKSAmJiAwIDw9IGZkKQotLSAg ICAgICAgICAgICAgY2xvc2UgKGZkKTsKLS0gICAgICAgICAgICByZXR1cm4gMDsKLS0gICAgICAg ICAgfQotLQotLSAgICAgICAgaWYgKGZkIDwgMCAmJiBpc19kb3Rkb3QgJiYgSVNTRVQgKEZUU19D V0RGRCkpCi0tICAgICAgICAgIHsKLS0gICAgICAgICAgICAvKiBXaGVuIHBvc3NpYmxlLCBza2lw IHRoZSBkaXJvcGVuIGFuZCBzdWJzZXF1ZW50IGZzdGF0K2Rldi9pbm8KLS0gICAgICAgICAgICAg ICBjb21wYXJpc29uLiAgSS5lLiwgd2hlbiBjaGFuZ2luZyB0byBwYXJlbnQgZGlyZWN0b3J5Ci0t ICAgICAgICAgICAgICAgKGNoZGlyICgiLi4iKSksIHVzZSBhIGZpbGUgZGVzY3JpcHRvciBmcm9t IHRoZSByaW5nIGFuZAotLSAgICAgICAgICAgICAgIHNhdmUgdGhlIG92ZXJoZWFkIG9mIGRpcm9w ZW4rZnN0YXQsIGFzIHdlbGwgYXMgYXZvaWRpbmcKLS0gICAgICAgICAgICAgICBmYWlsdXJlIHdo ZW4gd2UgbGFjayAieCIgYWNjZXNzIHRvIHRoZSB2aXJ0dWFsIGN3ZC4gICovCi0tICAgICAgICAg ICAgaWYgKCAhIGlfcmluZ19lbXB0eSAoJnNwLT5mdHNfZmRfcmluZykpCi0tICAgICAgICAgICAg ICB7Ci0tICAgICAgICAgICAgICAgIGludCBwYXJlbnRfZmQ7Ci0tICAgICAgICAgICAgICAgIGZk X3JpbmdfcHJpbnQgKHNwLCBzdGRlcnIsICJwcmUtcG9wIik7Ci0tICAgICAgICAgICAgICAgIHBh cmVudF9mZCA9IGlfcmluZ19wb3AgKCZzcC0+ZnRzX2ZkX3JpbmcpOwotLSAgICAgICAgICAgICAg ICBpZiAoMCA8PSBwYXJlbnRfZmQpCi0tICAgICAgICAgICAgICAgICAgewotLSAgICAgICAgICAg ICAgICAgICAgZmQgPSBwYXJlbnRfZmQ7Ci0tICAgICAgICAgICAgICAgICAgICBkaXIgPSBOVUxM OwotLSAgICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgIH0KLS0gICAgICAgICAgfQot LQotLSAgICAgICAgaW50IG5ld2ZkID0gZmQ7Ci0tICAgICAgICBpZiAoZmQgPCAwICYmIChuZXdm ZCA9IGRpcm9wZW4gKHNwLCBkaXIpKSA8IDApCi0tICAgICAgICAgIHJldHVybiAtMTsKLS0KLS0g ICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgZGV2L2lub2RlIGNoZWNrIGlzIG5lY2Vzc2FyeSBpZiB3 ZSdyZSBkb2luZyBhCi0tICAgICAgICAgICAibG9naWNhbCIgdHJhdmVyc2FsICh0aHJvdWdoIHN5 bWxpbmtzLCBhIGxhIGNob3duIC1MKSwgaWYgdGhlCi0tICAgICAgICAgICBzeXN0ZW0gbGFja3Mg T19OT0ZPTExPVyBzdXBwb3J0LCBvciBpZiB3ZSdyZSBjaGFuZ2luZyB0byAiLi4iCi0tICAgICAg ICAgICAoYnV0IG5vdCB2aWEgYSBwb3BwZWQgZmlsZSBkZXNjcmlwdG9yKS4gIFdoZW4gY2hhbmdp bmcgdG8gdGhlCi0tICAgICAgICAgICBuYW1lICIuLiIsIE9fTk9GT0xMT1cgY2FuJ3QgaGVscC4g IEluIGdlbmVyYWwsIHdoZW4gdGhlIHRhcmdldCBpcwotLSAgICAgICAgICAgbm90ICIuLiIsIGRp cm9wZW4ncyB1c2Ugb2YgT19OT0ZPTExPVyBlbnN1cmVzIHdlIGRvbid0IG1pc3Rha2VubHkKLS0g ICAgICAgICAgIGZvbGxvdyBhIHN5bWxpbmssIHNvIHdlIGNhbiBhdm9pZCB0aGUgZXhwZW5zZSBv ZiB0aGlzIGZzdGF0LiAgKi8KLS0gICAgICAgIGludCByZXQ7Ci0tICAgICAgICBpZiAoSVNTRVQo RlRTX0xPR0lDQUwpIHx8ICEgSEFWRV9XT1JLSU5HX09fTk9GT0xMT1cKLS0gICAgICAgICAgICB8 fCAoZGlyICYmIHN0cmVxIChkaXIsICIuLiIpKSkKLS0gICAgICAgICAgewotLSAgICAgICAgICAg IHN0cnVjdCBTVFJVQ1RfU1RBVCBzYjsKLS0gICAgICAgICAgICBpZiAoRlNUQVQgKG5ld2ZkLCAm c2IpKQotLSAgICAgICAgICAgICAgewotLSAgICAgICAgICAgICAgICByZXQgPSAtMTsKLS0gICAg ICAgICAgICAgICAgZ290byBiYWlsOwotLSAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgIGlm IChwLT5mdHNfc3RhdHAtPnN0X2RldiAhPSBzYi5zdF9kZXYKLS0gICAgICAgICAgICAgICAgfHwg cC0+ZnRzX3N0YXRwLT5zdF9pbm8gIT0gc2Iuc3RfaW5vKQotLSAgICAgICAgICAgICAgewotLSAg ICAgICAgICAgICAgICBfX3NldF9lcnJubyAoRU5PRU5UKTsgICAgICAgICAgIC8qIGRpc2luZm9y bWF0aW9uICovCi0tICAgICAgICAgICAgICAgIHJldCA9IC0xOwotLSAgICAgICAgICAgICAgICBn b3RvIGJhaWw7Ci0tICAgICAgICAgICAgICB9Ci0tICAgICAgICAgIH0KLS0KLS0gICAgICAgIGlm IChJU1NFVChGVFNfQ1dERkQpKQotLSAgICAgICAgICB7Ci0tICAgICAgICAgICAgY3dkX2FkdmFu Y2VfZmQgKHNwLCBuZXdmZCwgISBpc19kb3Rkb3QpOwotLSAgICAgICAgICAgIHJldHVybiAwOwot LSAgICAgICAgICB9Ci0tCi0tICAgICAgICByZXQgPSBmY2hkaXIobmV3ZmQpOwotLWJhaWw6Ci0t ICAgICAgICBpZiAoZmQgPCAwKQotLSAgICAgICAgICB7Ci0tICAgICAgICAgICAgaW50IG9lcnJu byA9IGVycm5vOwotLSAgICAgICAgICAgICh2b2lkKWNsb3NlKG5ld2ZkKTsKLS0gICAgICAgICAg ICBfX3NldF9lcnJubyAob2Vycm5vKTsKLS0gICAgICAgICAgfQotLSAgICAgICAgcmV0dXJuIHJl dDsKLS19Ci1kaWZmIC0tZ2l0IGEvaW8vZnRzLmMgYi9pby9mdHMuYwotaW5kZXggZDNiOGU1YTEw MGYzMjEzZi4uMzgyNWYwYWViNGViMTU5NCAxMDA2NDQKLS0tLSBhL2lvL2Z0cy5jCi0rKysgYi9p by9mdHMuYwotQEAgLTEsMjMgKzEsMjIwOCBAQAotLS8qIEZpbGUgdHJlZSB0cmF2ZXJzYWwgZnVu Y3Rpb25zIExGUyB2ZXJzaW9uLgotLSAgIENvcHlyaWdodCAoQykgMjAyNiBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KLS0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGli cmFyeS4KLSsvKiBUcmF2ZXJzZSBhIGZpbGUgaGllcmFyY2h5LgotIAotLSAgIFRoZSBHTlUgQyBM aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot LSAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKLS0gICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIKLS0gICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAy NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAKLS0gICBUaGUgR05VIEMgTGlicmFy eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAg IFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Ci0rICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMKLSsgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQotKyAgIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rICAgVGhpcyBmaWxlIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LS0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQotLSAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4gICovCi0rCi0rLyotCi0rICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzLCAxOTk0Ci0r ICogICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiA0LiBOZWl0aGVyIHRoZSBu YW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwot KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZQotKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg UkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKyAq IFNVQ0ggREFNQUdFLgotKyAqLwotKwotKyNpbmNsdWRlIDxjb25maWcuaD4KLSsKLSsjaWYgZGVm aW5lZCBMSUJDX1NDQ1MgJiYgIWRlZmluZWQgR0NDX0xJTlQgJiYgIWRlZmluZWQgbGludAotK3N0 YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmdHMuYyAgICAgICA4LjYgKEJlcmtlbGV5KSA4LzE0 Lzk0IjsKLSsjZW5kaWYKLSsKLSsjaWYgX0xJQkMKLSsjIGluY2x1ZGUgPGZ0cy5oPgotKyNlbHNl Ci0rIyBpbmNsdWRlICJmdHNfLmgiCi0rI2VuZGlmCi0rI2lmIF9MSUJDIHx8IEhBVkVfU1lTX1BB UkFNX0gKLSsjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxzeXMv c3RhdC5oPgotKyNpbmNsdWRlIDxmY250bC5oPgotKyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNs dWRlIDxzdGRkZWYuaD4KLSsjaW5jbHVkZSA8c3RkaW50Lmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5o PgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8dW5pc3RkLmg+Ci0rCi0rLyogU3Vw cG9ydCBmb3IgdGhlIExGUyBBUEkgdmVyc2lvbi4gICovCi0rI2lmbmRlZiBGVFNfT1BFTgotKyMg ZGVmaW5lIEZUU19PUEVOIGZ0c19vcGVuCi0rIyBkZWZpbmUgRlRTX0NMT1NFIGZ0c19jbG9zZQot KyMgZGVmaW5lIEZUU19SRUFEIGZ0c19yZWFkCi0rIyBkZWZpbmUgRlRTX1NFVCBmdHNfc2V0Ci0r IyBkZWZpbmUgRlRTX0NISUxEUkVOIGZ0c19jaGlsZHJlbgotKyMgZGVmaW5lIEZUU09CSiBGVFMK LSsjIGRlZmluZSBGVFNFTlRSWSBGVFNFTlQKLSsjIGRlZmluZSBJTk9fVCBpbm9fdAotKyMgZGVm aW5lIFNUUlVDVF9TVEFUIHN0YXQKLSsjIGRlZmluZSBGU1RBVCBfX2ZzdGF0Ci0rIyBkZWZpbmUg RlNUQVRBVCBfX2ZzdGF0YXQKLSsjIGRlZmluZSBTVFJVQ1RfU1RBVEZTIHN0YXRmcwotKyMgZGVm aW5lIEZTVEFURlMgX19mc3RhdGZzCi0rI2VuZGlmCi0rCi0rI2lmICEgX0xJQkMKLSsjIGluY2x1 ZGUgImF0dHJpYnV0ZS5oIgotKyMgaW5jbHVkZSAiZmNudGwtLS5oIgotKyMgaW5jbHVkZSAib3Bl bmF0LmgiCi0rIyBpbmNsdWRlICJvcGVuZGlyYXQuaCIKLSsjIGluY2x1ZGUgInNhbWUtaW5vZGUu aCIKLSsjIGRlZmluZSBPUEVORElSQVQgb3BlbmRpcmF0Ci0rIyBkZWZpbmUgRlRTRU5UX1dSQVBQ RVIoX19wKSBfX3AKLSsjIGRlZmluZSBGVFNfQ09NUEFSX0NBU1QoX19mbikgX19mbgotKyNlbHNl Ci0rIyBpbmNsdWRlIDxzdGRib29sLmg+Ci0rCi0rIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24K LSsjIGRlZmluZSBGQUxMVEhST1VHSCAgICAgICAgICAgICAgIDsgW1tmYWxsdGhyb3VnaF1dCi0r IyBkZWZpbmUgSEFWRV9TVFJVQ1RfRElSRU5UX0RfVFlQRSAxCi0rIyBkZWZpbmUgR05VTElCX0ZU U19ERUJVRyAgICAgICAgICAwCi0rIyBpZmRlZiBPX1BBVEgKLSsjICBkZWZpbmUgT19TRUFSQ0gg ICAgICAgICAgICAgICAgIE9fUEFUSAotKyMgZWxzZQotKyMgIGRlZmluZSBPX1NFQVJDSCAgICAg ICAgICAgICAgICAgT19SRE9OTFkKLSsjIGVuZGlmCi0rIyBkZWZpbmUgSEFWRV9TWVNfVkZTX0gg ICAgICAgICAgICAxCi0rIyBkZWZpbmUgSEFWRV9GU1RBVEZTICAgICAgICAgICAgICAxCi0rIyBk ZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfVFlQRSAxCi0rIyBkZWZpbmUgSEFWRV9PUEVOQVQg ICAgICAgICAgICAgICAxCi0rIyBkZWZpbmUgSEFWRV9XT1JLSU5HX09fTk9GT0xMT1cgICAxCi0r IyBkZWZpbmUgX0dMX0NNUChhLCBiKSAgICAgICAgICAgICAoKGEpIDwgKGIpID8gLTEgOiAoYSkg PiAoYikpCi0rIyBkZWZpbmUgT1BFTkRJUkFUICAgICAgICAgICAgICAgICBfX29wZW5kaXJhdAot KwotK3N0YXRpYyBpbmxpbmUgYm9vbCBvcGVuYXRfbmVlZHNfZmNoZGlyICh2b2lkKQotK3sKLSsg IHJldHVybiBmYWxzZTsKLSt9Ci0rCi0rc3RhdGljIGlubGluZSBib29sIHN0cmVxIChjb25zdCBj aGFyICpzMSwgY29uc3QgY2hhciAqczIpCi0rewotKyAgcmV0dXJuIHN0cmNtcCAoczEsIHMyKSA9 PSAwOwotK30KLSsjIGRlZmluZSByZWFsbG9jYXJyYXkgICAgICAgICAgICAgIF9fbGliY19yZWFs bG9jYXJyYXkKLSsjIGRlZmluZSBmY2hkaXIgICAgICAgICAgICAgICAgICAgIF9fZmNoZGlyCi0r IyBkZWZpbmUgY2xvc2UgICAgICAgICAgICAgICAgICAgICBfX2Nsb3NlCi0rIyBkZWZpbmUgY2xv c2VkaXIgICAgICAgICAgICAgICAgICBfX2Nsb3NlZGlyCi0rIyBkZWZpbmUgZmNudGwgICAgICAg ICAgICAgICAgICAgICBfX2ZjbnRsCi0rIyBkZWZpbmUgcmVhZGRpciAgICAgICAgICAgICAgICAg ICBfX3JlYWRkaXIKLSsjIGlmbmRlZiBkaXJmZAotKyMgIGRlZmluZSBkaXJmZCAgICAgICAgICAg ICAgICAgICAgX19kaXJmZAotKyMgZW5kaWYKLSsjIGRlZmluZSBvcGVuICAgICAgICAgICAgICAg ICAgICAgIF9fb3BlbgotKyMgZGVmaW5lIG9wZW5hdCAgICAgICAgICAgICAgICAgICAgX19vcGVu YXQKLSAKLS0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCi0tICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJy YXJ5OyBpZiBub3QsIHNlZQotLSAgIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LwotKyMgaW5jbHVkZSAiY3ljbGUtY2hlY2suYyIKLSsjIGluY2x1ZGUgImktcmluZy5jIgotIAot LSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLStzdHJ1Y3QgRlRTRU5UX3dyYXBwZXIKLSt7Ci0rICBG VFNPQkogKmZ0c19mdHM7ICAgICAgICAgICAgICAgIC8qIHRoZSBmaWxlIGhpZXJhcmNoeSBpdHNl bGYgKi8KLSsgIERJUiAqZnRzX2RpcnA7ICAgICAgICAgICAgICAgICAgLyogRGlyIHBvaW50ZXIg Zm9yIGFueSBkaXJlY3RvcnkgY29udGFpbmluZwotKwkJCQkgICAgIG1vcmUgZW50cmllcyB0aGFu IHdlIHJlYWQgYXQgb25lIHRpbWUuICAqLwotKyAgc3RydWN0IFNUUlVDVF9TVEFUIGZ0c19zdGF0 OwotIAotLSNpZm5kZWYgX19PRkZfVF9NQVRDSEVTX09GRjY0X1QKLS0jIGluY2x1ZGUgImlvL2Z0 cy1jb21tb24uYyIKLSsgIEZUU0VOVFJZIGVudDsKLSt9OwotKwotKy8qIGdsaWJjIGhpc3Rvcmlj YWx5IGRlZmluZXMgdGhlIEZUUzo6ZnRzX2NvbXBhciBhcyBoYXZpbmcgJ3ZvaWQgKicsIHdoaWxl IHRoZQotKyAgIGZ0c19vcGVuIGhhcyBhIGZ1bmN0aW9uIHBvaW50IHVzaW5nICdGVFNFTlQgKion IGFzIGFyZ3VtZW50LiAgKi8KLSsjIGRlZmluZSBGVFNfQ09NUEFSX0NBU1QoX19mbikgKChpbnQg KCopICh2b2lkIGNvbnN0ICosIHZvaWQgY29uc3QgKikpX19mbikKLSsKLSsjIGRlZmluZSBGVFNF TlRfV1JBUFBFUihwKSBcCi0rICAgICgoc3RydWN0IEZUU0VOVF93cmFwcGVyICopICgoY2hhciAq KShwKSAtIG9mZnNldG9mKHN0cnVjdCBGVFNFTlRfd3JhcHBlciwgZW50KSkpCi0rI2VuZGlmCi0r I2RlZmluZSBGVFNFTlRfRlRTKHApICAgKEZUU0VOVF9XUkFQUEVSKHApLT5mdHNfZnRzKQotKyNk ZWZpbmUgRlRTRU5UX0RJUlAocCkgIChGVFNFTlRfV1JBUFBFUihwKS0+ZnRzX2RpcnApCi0rCi0r I2luY2x1ZGUgImZsZXhtZW1iZXIuaCIKLSsKLSsjaW5jbHVkZSA8ZGlyZW50Lmg+Ci0rI2lmbmRl ZiBfRF9FWEFDVF9OQU1MRU4KLSsjIGRlZmluZSBfRF9FWEFDVF9OQU1MRU4oZGlyZW50KSBzdHJs ZW4gKChkaXJlbnQpLT5kX25hbWUpCi0gI2VuZGlmCi0rCi0rI2lmIEhBVkVfU1RSVUNUX0RJUkVO VF9EX1RZUEUKLSsvKiBUcnVlIGlmIHRoZSB0eXBlIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkgRCBp cyBrbm93bi4gICovCi0rIyBkZWZpbmUgRFRfSVNfS05PV04oZCkgKChkKS0+ZF90eXBlICE9IERU X1VOS05PV04pCi0rLyogVHJ1ZSBpZiB0aGUgdHlwZSBvZiB0aGUgZGlyZWN0b3J5IGVudHJ5IEQg bXVzdCBiZSBULiAgKi8KLSsjIGRlZmluZSBEVF9NVVNUX0JFKGQsIHQpICgoZCktPmRfdHlwZSA9 PSAodCkpCi0rIyBkZWZpbmUgRF9UWVBFKGQpICgoZCktPmRfdHlwZSkKLSsjZWxzZQotKyMgZGVm aW5lIERUX0lTX0tOT1dOKGQpIGZhbHNlCi0rIyBkZWZpbmUgRFRfTVVTVF9CRShkLCB0KSBmYWxz ZQotKyMgZGVmaW5lIERfVFlQRShkKSBEVF9VTktOT1dOCi0rCi0rIyB1bmRlZiBEVF9VTktOT1dO Ci0rIyBkZWZpbmUgRFRfVU5LTk9XTiAwCi0rCi0rLyogQW55IG5vbnplcm8gdmFsdWVzIHdpbGwg ZG8gaGVyZSwgc28gbG9uZyBhcyB0aGV5J3JlIGRpc3RpbmN0LgotKyAgIFVuZGVmIGFueSBleGlz dGluZyBtYWNyb3Mgb3V0IG9mIHRoZSB3YXkuICAqLwotKyMgdW5kZWYgRFRfQkxLCi0rIyB1bmRl ZiBEVF9DSFIKLSsjIHVuZGVmIERUX0RJUgotKyMgdW5kZWYgRFRfRklGTwotKyMgdW5kZWYgRFRf TE5LCi0rIyB1bmRlZiBEVF9SRUcKLSsjIHVuZGVmIERUX1NPQ0sKLSsjIGRlZmluZSBEVF9CTEsg MQotKyMgZGVmaW5lIERUX0NIUiAyCi0rIyBkZWZpbmUgRFRfRElSIDMKLSsjIGRlZmluZSBEVF9G SUZPIDQKLSsjIGRlZmluZSBEVF9MTksgNQotKyMgZGVmaW5lIERUX1JFRyA2Ci0rIyBkZWZpbmUg RFRfU09DSyA3Ci0rI2VuZGlmCi0rCi0rI2lmbmRlZiBTX0lGQkxLCi0rIyBkZWZpbmUgU19JRkJM SyAwCi0rI2VuZGlmCi0rI2lmbmRlZiBTX0lGTE5LCi0rIyBkZWZpbmUgU19JRkxOSyAwCi0rI2Vu ZGlmCi0rI2lmbmRlZiBTX0lGU09DSwotKyMgZGVmaW5lIFNfSUZTT0NLIDAKLSsjZW5kaWYKLSsK LStlbnVtCi0rewotKyAgTk9UX0FOX0lOT0RFX05VTUJFUiA9IDAKLSt9OwotKwotKyNpZmRlZiBE X0lOT19JTl9ESVJFTlQKLSsjIGRlZmluZSBEX0lOTyhkcCkgKGRwKS0+ZF9pbm8KLSsjZWxzZQot Ky8qIFNvbWUgc3lzdGVtcyBkb24ndCBoYXZlIGlub2Rlcywgc28gZmFrZSB0aGVtIHRvIGF2b2lk IGxvdHMgb2YgaWZkZWZzLiAgKi8KLSsjIGRlZmluZSBEX0lOTyhkcCkgTk9UX0FOX0lOT0RFX05V TUJFUgotKyNlbmRpZgotKwotKy8qIElmIHBvc3NpYmxlIChzZWUgbWF4X2VudHJpZXMsIGJlbG93 KSwgcmVhZCBubyBtb3JlIHRoYW4gdGhpcyBtYW55IGRpcmVjdG9yeQotKyAgIGVudHJpZXMgYXQg YSB0aW1lLiAgV2l0aG91dCB0aGlzIGxpbWl0IChpLmUuLCB3aGVuIHVzaW5nIG5vbi1OVUxMCi0r ICAgZnRzX2NvbXBhciksIHByb2Nlc3NpbmcgYSBkaXJlY3Rvcnkgd2l0aCA0LDAwMCwwMDAgZW50 cmllcyByZXF1aXJlcyB+MUdpQgotKyAgIG9mIG1lbW9yeSwgYW5kIGhhbmRsaW5nIDY0TSBlbnRy aWVzIHdvdWxkIHJlcXVpcmUgMTZHaUIgb2YgbWVtb3J5LiAgKi8KLSsjaWZuZGVmIEZUU19NQVhf UkVBRERJUl9FTlRSSUVTCi0rIyBkZWZpbmUgRlRTX01BWF9SRUFERElSX0VOVFJJRVMgMTAwMDAw Ci0rI2VuZGlmCi0rCi0rLyogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0aGlzIG1hbnkgZW50cmll cyBpbiBhIGRpcmVjdG9yeSwKLSsgICBhbmQgdGhlIGNvbmRpdGlvbnMgbWVudGlvbmVkIGJlbG93 IGFyZSBzYXRpc2ZpZWQsIHRoZW4gc29ydAotKyAgIHRoZSBlbnRyaWVzIG9uIGlub2RlIG51bWJl ciBiZWZvcmUgYW55IGZ1cnRoZXIgcHJvY2Vzc2luZy4gICovCi0rI2lmbmRlZiBGVFNfSU5PREVf U09SVF9ESVJfRU5UUklFU19USFJFU0hPTEQKLSsjIGRlZmluZSBGVFNfSU5PREVfU09SVF9ESVJf RU5UUklFU19USFJFU0hPTEQgMTAwMDAKLSsjZW5kaWYKLSsKLStlbnVtCi0rewotKyAgX0ZUU19J Tk9ERV9TT1JUX0RJUl9FTlRSSUVTX1RIUkVTSE9MRCA9IEZUU19JTk9ERV9TT1JUX0RJUl9FTlRS SUVTX1RIUkVTSE9MRAotK307Ci0rCi0rZW51bSBGdHNfc3RhdAotK3sKLSsgIEZUU19OT19TVEFU X1JFUVVJUkVEID0gMSwKLSsgIEZUU19TVEFUX1JFUVVJUkVEID0gMgotK307Ci0rCi0rI2lmbmRl ZiBfX3NldF9lcnJubwotKyMgZGVmaW5lIF9fc2V0X2Vycm5vKFZhbCkgZXJybm8gPSAoVmFsKQot KyNlbmRpZgotKwotKy8qIElmIHRoaXMgaG9zdCBwcm92aWRlcyB0aGUgb3BlbmF0IGZ1bmN0aW9u LCB0aGVuIHdlIGNhbiBhdm9pZAotKyAgIGF0dGVtcHRpbmcgdG8gb3BlbiAiLiIgaW4gc29tZSBp bml0aWFsaXphdGlvbiBjb2RlIGJlbG93LiAgKi8KLSsjaWZkZWYgSEFWRV9PUEVOQVQKLSsjIGRl ZmluZSBIQVZFX09QRU5BVF9TVVBQT1JUIDEKLSsjZWxzZQotKyMgZGVmaW5lIEhBVkVfT1BFTkFU X1NVUFBPUlQgMAotKyNlbmRpZgotKwotKyNpZmRlZiBOREVCVUcKLSsjIGRlZmluZSBmdHNfYXNz ZXJ0KGV4cHIpICgodm9pZCkgKDAgJiYgKGV4cHIpKSkKLSsjZWxzZQotKyMgZGVmaW5lIGZ0c19h c3NlcnQoZXhwcikgICAgICAgXAotKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgaWYgKCEoZXhwcikp ICAgICAgICAgICAgXAotKyAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgXAotKyAgICAg IH0gICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB3aGlsZSAoZmFsc2UpCi0rI2VuZGlm Ci0rCi0rc3RhdGljIEZUU0VOVFJZICAqZnRzX2FsbG9jIChGVFNPQkogKiwgY29uc3QgY2hhciAq LCBzaXplX3QpOwotK3N0YXRpYyBGVFNFTlRSWSAgKmZ0c19idWlsZCAoRlRTT0JKICosIGludCk7 Ci0rc3RhdGljIHZvaWQgICAgICBmdHNfbGZyZWUgKEZUU0VOVFJZICopOwotK3N0YXRpYyB2b2lk ICAgICAgZnRzX2xvYWQgKEZUU09CSiAqLCBGVFNFTlRSWSAqKTsKLStzdGF0aWMgc2l6ZV90ICAg IGZ0c19tYXhhcmdsZW4gKGNoYXIgKiBjb25zdCAqKTsKLStzdGF0aWMgdm9pZCAgICAgIGZ0c19w YWRqdXN0IChGVFNPQkogKiwgRlRTRU5UUlkgKik7Ci0rc3RhdGljIGJvb2wgICAgICBmdHNfcGFs bG9jIChGVFNPQkogKiwgc2l6ZV90KTsKLStzdGF0aWMgRlRTRU5UUlkgICpmdHNfc29ydCAoRlRT T0JKICosIEZUU0VOVFJZICosIHNpemVfdCk7Ci0rc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBm dHNfc3RhdCAoRlRTT0JKICosIEZUU0VOVFJZICosIGJvb2wpOwotK3N0YXRpYyBpbnQgICAgICBm dHNfc2FmZV9jaGFuZ2VkaXIgKEZUU09CSiAqLCBGVFNFTlRSWSAqLCBpbnQsIGNvbnN0IGNoYXIg Kik7Ci0rCi0rI2luY2x1ZGUgImZ0cy1jeWNsZS5jIgotKwotKyNpZm5kZWYgTUFYCi0rIyBkZWZp bmUgTUFYKGEsYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKLSsjZW5kaWYKLSsKLSsjaWZuZGVm IFNJWkVfTUFYCi0rIyBkZWZpbmUgU0laRV9NQVggKChzaXplX3QpIC0xKQotKyNlbmRpZgotKwot KyNkZWZpbmUgSVNET1QoYSkgICAgICAgIChhWzBdID09ICcuJyAmJiAoIWFbMV0gfHwgKGFbMV0g PT0gJy4nICYmICFhWzJdKSkpCi0rCi0rI2RlZmluZSBDTFIob3B0KSAgICAgICAgKHNwLT5mdHNf b3B0aW9ucyAmPSB+KG9wdCkpCi0rI2RlZmluZSBJU1NFVChvcHQpICAgICAgKChzcC0+ZnRzX29w dGlvbnMgJiAob3B0KSkgIT0gMCkKLSsjZGVmaW5lIFNFVChvcHQpICAgICAgICAoc3AtPmZ0c19v cHRpb25zIHw9IChvcHQpKQotKwotKy8qIEZJWE1FOiBGVFNfTk9DSERJUiBpcyBub3cgbWlzbmFt ZWQuCi0rICAgQ2FsbCBpdCBGVFNfVVNFX0ZVTExfUkVMQVRJVkVfRklMRV9OQU1FUyBpbnN0ZWFk LiAqLwotKyNkZWZpbmUgRkNIRElSKHNwLCBmZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgKCFJU1NFVChGVFNfTk9DSERJUikgJiYgKElTU0VUKEZUU19DV0RGRCkgICAg ICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGN3ZF9hZHZhbmNlX2Zk ICgoc3ApLCAoZmQpLCB0cnVlKSwgMCkgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDog ZmNoZGlyIChmZCkpKQotKwotKwotKy8qIGZ0c19idWlsZCBmbGFncyAqLwotKy8qIEZJWE1FOiBt YWtlIHRoaXMgYW4gZW51bSAqLwotKyNkZWZpbmUgQkNISUxEICAgICAgICAgIDEgICAgICAgICAg ICAgICAvKiBmdHNfY2hpbGRyZW4gKi8KLSsjZGVmaW5lIEJOQU1FUyAgICAgICAgICAyICAgICAg ICAgICAgICAgLyogZnRzX2NoaWxkcmVuLCBuYW1lcyBvbmx5ICovCi0rI2RlZmluZSBCUkVBRCAg ICAgICAgICAgMyAgICAgICAgICAgICAgIC8qIGZ0c19yZWFkICovCi0rCi0rI2lmIEdOVUxJQl9G VFNfREVCVUcKLSsjIGluY2x1ZGUgPGludHR5cGVzLmg+Ci0rIyBpbmNsdWRlIDxzdGRpby5oPgot K2Jvb2wgZnRzX2RlYnVnID0gZmFsc2U7Ci0rIyBkZWZpbmUgRHByaW50Zih4KSBkbyB7IGlmIChm dHNfZGVidWcpIHByaW50ZiB4OyB9IHdoaWxlIChmYWxzZSkKLStzdGF0aWMgdm9pZCBmZF9yaW5n X2NoZWNrIChGVFNPQkogY29uc3QgKik7Ci0rc3RhdGljIHZvaWQgZmRfcmluZ19wcmludCAoRlRT T0JKIGNvbnN0ICosIEZJTEUgKiwgY2hhciBjb25zdCAqKTsKLSsjZWxzZQotKyMgZGVmaW5lIERw cmludGYoeCkKLSsjIGRlZmluZSBmZF9yaW5nX2NoZWNrKHgpCi0rIyBkZWZpbmUgZmRfcmluZ19w cmludChhLCBiLCBjKQotKyNlbmRpZgotKwotKyNkZWZpbmUgTEVBVkVfRElSKEZ0cywgRW50LCBU YWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBkbyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgIERwcmludGYgKCgiICAlcy1sZWF2aW5nOiAlc1xuIiwgVGFnLCAoRW50KS0+ZnRz X3BhdGgpKTsgICBcCi0rICAgICAgbGVhdmVfZGlyIChGdHMsIEVudCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBmZF9yaW5nX2NoZWNrIChGdHMpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB3aGlsZSAo ZmFsc2UpCi0rCi0rc3RhdGljIHZvaWQKLStmZF9yaW5nX2NsZWFyIChJX3JpbmcgKmZkX3Jpbmcp Ci0rewotKyAgd2hpbGUgKCAhIGlfcmluZ19lbXB0eSAoZmRfcmluZykpCi0rICAgIHsKLSsgICAg ICBpbnQgZmQgPSBpX3JpbmdfcG9wIChmZF9yaW5nKTsKLSsgICAgICBpZiAoMCA8PSBmZCkKLSsg ICAgICAgIGNsb3NlIChmZCk7Ci0rICAgIH0KLSt9Ci0rCi0rLyogT3ZlcmxvYWQgdGhlIGZ0c19z dGF0cC0+c3Rfc2l6ZSBtZW1iZXIgKG90aGVyd2lzZSB1bnVzZWQsIHdoZW4KLSsgICBmdHNfaW5m byBpcyBGVFNfTlNPSykgdG8gaW5kaWNhdGUgd2hldGhlciBmdHNfcmVhZCBzaG91bGQgc3RhdAot KyAgIHRoaXMgZW50cnkgb3Igbm90LiAgKi8KLStzdGF0aWMgdm9pZAotK2Z0c19zZXRfc3RhdF9y ZXF1aXJlZCAoRlRTRU5UUlkgKnAsIGJvb2wgcmVxdWlyZWQpCi0rewotKyAgZnRzX2Fzc2VydCAo cC0+ZnRzX2luZm8gPT0gRlRTX05TT0spOwotKyAgcC0+ZnRzX3N0YXRwLT5zdF9zaXplID0gKHJl cXVpcmVkCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBGVFNfU1RBVF9SRVFVSVJFRAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogRlRTX05PX1NUQVRfUkVRVUlSRUQpOwotK30K LSsKLSsvKiBWaXJ0dWFsIGZjaGRpci4gIEFkdmFuY2UgU1AncyB3b3JraW5nIGRpcmVjdG9yeSBm aWxlIGRlc2NyaXB0b3IsCi0rICAgU1AtPmZ0c19jd2RfZmQsIHRvIEZELCBhbmQgcHVzaCB0aGUg cHJldmlvdXMgdmFsdWUgb250byB0aGUgZmRfcmluZy4KLSsgICBDSERJUl9ET1dOX09ORSBpcyB0 cnVlIGlmIEZEIGNvcnJlc3BvbmRzIHRvIGFuIGVudHJ5IGluIHRoZSBkaXJlY3RvcnkKLSsgICBv cGVuIG9uIHNwLT5mdHNfY3dkX2ZkOyBpLmUuLCB0byBtb3ZlIHRoZSB3b3JraW5nIGRpcmVjdG9y eSBvbmUgbGV2ZWwKLSsgICBkb3duLiAgKi8KLStzdGF0aWMgdm9pZAotK2ludGVybmFsX2Z1bmN0 aW9uCi0rY3dkX2FkdmFuY2VfZmQgKEZUU09CSiAqc3AsIGludCBmZCwgYm9vbCBjaGRpcl9kb3du X29uZSkKLSt7Ci0rICBpbnQgb2xkID0gc3AtPmZ0c19jd2RfZmQ7Ci0rICBmdHNfYXNzZXJ0IChv bGQgIT0gZmQgfHwgb2xkID09IEFUX0ZEQ1dEKTsKLSsKLSsgIGlmIChjaGRpcl9kb3duX29uZSkK LSsgICAgewotKyAgICAgIC8qIFB1c2ggIm9sZCIgb250byB0aGUgcmluZy4KLSsgICAgICAgICBJ ZiB0aGUgZGlzcGxhY2VkIGZpbGUgZGVzY3JpcHRvciBpcyBub24tbmVnYXRpdmUsIGNsb3NlIGl0 LiAgKi8KLSsgICAgICBpbnQgcHJldl9mZF9pbl9zbG90ID0gaV9yaW5nX3B1c2ggKCZzcC0+ZnRz X2ZkX3JpbmcsIG9sZCk7Ci0rICAgICAgZmRfcmluZ19wcmludCAoc3AsIHN0ZGVyciwgInBvc3Qt cHVzaCIpOwotKyAgICAgIGlmICgwIDw9IHByZXZfZmRfaW5fc2xvdCkKLSsgICAgICAgIGNsb3Nl IChwcmV2X2ZkX2luX3Nsb3QpOyAvKiBpZ25vcmUgYW55IGNsb3NlIGZhaWx1cmUgKi8KLSsgICAg fQotKyAgZWxzZSBpZiAoICEgSVNTRVQgKEZUU19OT0NIRElSKSkKLSsgICAgewotKyAgICAgIGlm ICgwIDw9IG9sZCkKLSsgICAgICAgIGNsb3NlIChvbGQpOyAvKiBpZ25vcmUgYW55IGNsb3NlIGZh aWx1cmUgKi8KLSsgICAgfQotKwotKyAgc3AtPmZ0c19jd2RfZmQgPSBmZDsKLSt9Ci0rCi0rLyog UmVzdG9yZSB0aGUgaW5pdGlhbCwgcHJlLXRyYXZlcnNhbCwgIndvcmtpbmcgZGlyZWN0b3J5Ii4K LSsgICBJbiBGVFNfQ1dERkQgbW9kZSwgd2UgbWVyZWx5IGNhbGwgY3dkX2FkdmFuY2VfZmQsIG90 aGVyd2lzZSwKLSsgICB3ZSBtYXkgYWN0dWFsbHkgY2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9y eS4KLSsgICBSZXR1cm4gMCB1cG9uIHN1Y2Nlc3MuIFVwb24gZmFpbHVyZSwgc2V0IGVycm5vIGFu ZCByZXR1cm4gbm9uemVyby4gICovCi0rc3RhdGljIGludAotK3Jlc3RvcmVfaW5pdGlhbF9jd2Qg KEZUU09CSiAqc3ApCi0rewotKyAgaW50IGZhaWwgPSBGQ0hESVIgKHNwLCBJU1NFVCAoRlRTX0NX REZEKSA/IEFUX0ZEQ1dEIDogc3AtPmZ0c19yZmQpOwotKyAgZmRfcmluZ19jbGVhciAoJihzcC0+ ZnRzX2ZkX3JpbmcpKTsKLSsgIHJldHVybiBmYWlsOwotK30KLSsKLSsvKiBPcGVuIHRoZSBkaXJl Y3RvcnkgRElSIGlmIHBvc3NpYmxlLCBhbmQgcmV0dXJuIGEgZmlsZQotKyAgIGRlc2NyaXB0b3Iu ICBSZXR1cm4gLTEgYW5kIHNldCBlcnJubyBvbiBmYWlsdXJlLiAgSXQgZG9lc24ndCBtYXR0ZXIK LSsgICB3aGV0aGVyIHRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIHJlYWQgb3Igd3JpdGUgYWNjZXNz LiAgKi8KLSsKLStzdGF0aWMgaW50Ci0raW50ZXJuYWxfZnVuY3Rpb24KLStkaXJvcGVuIChGVFNP QkogY29uc3QgKnNwLCBjaGFyIGNvbnN0ICpkaXIpCi0rewotKyAgaW50IG9wZW5fZmxhZ3MgPSAo T19TRUFSQ0ggfCBPX0NMT0VYRUMgfCBPX0RJUkVDVE9SWSB8IE9fTk9DVFRZIHwgT19OT05CTE9D SwotKyAgICAgICAgICAgICAgICAgICAgfCAoSVNTRVQgKEZUU19QSFlTSUNBTCkgPyBPX05PRk9M TE9XIDogMCkpOwotKwotKyAgaW50IGZkID0gKElTU0VUIChGVFNfQ1dERkQpCi0rICAgICAgICAg ICAgPyBvcGVuYXQgKHNwLT5mdHNfY3dkX2ZkLCBkaXIsIG9wZW5fZmxhZ3MpCi0rICAgICAgICAg ICAgOiBvcGVuIChkaXIsIG9wZW5fZmxhZ3MpKTsKLSsgIHJldHVybiBmZDsKLSt9Ci0rCi0rRlRT T0JKICoKLStGVFNfT1BFTiAoY2hhciAqIGNvbnN0ICphcmd2LAotKyAgICAgICAgICByZWdpc3Rl ciBpbnQgb3B0aW9ucywKLSsgICAgICAgICAgaW50ICgqY29tcGFyKSAoY29uc3QgRlRTRU5UUlkg KiosIGNvbnN0IEZUU0VOVFJZICoqKSkKLSt7Ci0rICAgICAgICAvKiBPcHRpb25zIGNoZWNrOiBn bGliYyBhZGRlZCBvdGhlciBmbGFncyBhZnRlciBGVFNfTkFNRU9OTFkgYW5kCi0rCSAgIEZUU19T VE9QLCBhbmQgdGhleSBhcmUgYXNzdW1lZCB0byBiZSBwcml2YXRlLiAgKi8KLSsgICAgICAgIGlm IChvcHRpb25zICYgfkZUU19PUFRJT05NQVNLCi0rI2lmIF9MSUJDCi0rCSAgICB8fCBvcHRpb25z ICYgKEZUU19OQU1FT05MWSB8IEZUU19TVE9QKQotKyNlbmRpZgotKwkgICAgKSB7Ci0rICAgICAg ICAgICAgICAgIF9fc2V0X2Vycm5vIChFSU5WQUwpOwotKyAgICAgICAgICAgICAgICByZXR1cm4g KE5VTEwpOwotKyAgICAgICAgfQotKyAgICAgICAgaWYgKChvcHRpb25zICYgRlRTX05PQ0hESVIp ICYmIChvcHRpb25zICYgRlRTX0NXREZEKSkgewotKyAgICAgICAgICAgICAgICBfX3NldF9lcnJu byAoRUlOVkFMKTsKLSsgICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKLSsgICAgICAgIH0K LSsjaWYgIV9MSUJDCi0rICAgICAgICBpZiAoICEgKG9wdGlvbnMgJiAoRlRTX0xPR0lDQUwgfCBG VFNfUEhZU0lDQUwpKSkgewotKyAgICAgICAgICAgICAgICBfX3NldF9lcnJubyAoRUlOVkFMKTsK LSsgICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKLSsgICAgICAgIH0KLSsjZWxzZQotKwkv KiBnbGliYyBoaXN0b3JpY2FsbHkgZmFsbHMgdG8gRlRTX1BIWVNJQ0FMIGlmIG5vIEZUU19QSFlT SUNBTCBvcgotKwkgICBGVFNfTE9HSUNBTCBpcyBzcGVjaWZpZWQuICAqLwotKyAgICAgICAgaWYg KCEgKG9wdGlvbnMgJiAoRlRTX1BIWVNJQ0FMIHwgRlRTX0xPR0lDQUwpKSkKLSsJICBvcHRpb25z IHw9IEZUU19QSFlTSUNBTDsKLSsjZW5kaWYKLSsKLSsgICAgICAgIC8qIEFsbG9jYXRlL2luaXRp YWxpemUgdGhlIHN0cmVhbSAqLwotKyAgICAgICAgcmVnaXN0ZXIgRlRTT0JKICpzcCA9IGNhbGxv YyAoMSwgc2l6ZW9mICpzcCk7Ci0rICAgICAgICBpZiAoc3AgPT0gTlVMTCkKLSsgICAgICAgICAg ICAgICAgcmV0dXJuIChOVUxMKTsKLSsgICAgICAgIHNwLT5mdHNfY29tcGFyID0gRlRTX0NPTVBB Ul9DQVNUKGNvbXBhcik7Ci0rICAgICAgICBzcC0+ZnRzX29wdGlvbnMgPSBvcHRpb25zOwotKwot KyAgICAgICAgLyogTG9naWNhbCB3YWxrcyB0dXJuIG9uIE5PQ0hESVI7IHN5bWJvbGljIGxpbmtz IGFyZSB0b28gaGFyZC4gKi8KLSsgICAgICAgIGlmIChJU1NFVChGVFNfTE9HSUNBTCkpIHsKLSsg ICAgICAgICAgICAgICAgU0VUKEZUU19OT0NIRElSKTsKLSsgICAgICAgICAgICAgICAgQ0xSKEZU U19DV0RGRCk7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICAvKiBJbml0aWFsaXplIGZ0c19jd2Rf ZmQuICAqLwotKyAgICAgICAgc3AtPmZ0c19jd2RfZmQgPSBBVF9GRENXRDsKLSsgICAgICAgIGlm ICggSVNTRVQoRlRTX0NXREZEKSAmJiAhIEhBVkVfT1BFTkFUX1NVUFBPUlQpCi0rICAgICAgICAg IHsKLSsgICAgICAgICAgICAvKiBXaGlsZSBpdCBpc24ndCB0ZWNobmljYWxseSBuZWNlc3Nhcnkg dG8gb3BlbiAiLiIgdGhpcwotKyAgICAgICAgICAgICAgIGVhcmx5LCBkb2luZyBpdCBoZXJlIHNh dmVzIHVzIHRoZSB0cm91YmxlIG9mIGVuc3VyaW5nCi0rICAgICAgICAgICAgICAgbGF0ZXIgKHdo ZXJlIGl0J2QgYmUgbWVzc2llcikgdGhhdCAiLiIgY2FuIGluIGZhY3QKLSsgICAgICAgICAgICAg ICBiZSBvcGVuZWQuICBJZiBub3QsIHJldmVydCB0byBGVFNfTk9DSERJUiBtb2RlLiAgKi8KLSsg ICAgICAgICAgICBpbnQgZmQgPSBvcGVuICgiLiIsIE9fU0VBUkNIIHwgT19DTE9FWEVDKTsKLSsg ICAgICAgICAgICBpZiAoZmQgPCAwKQotKyAgICAgICAgICAgICAgewotKyAgICAgICAgICAgICAg ICAvKiBFdmVuIGlmICIuIiBpcyB1bnJlYWRhYmxlLCBkb24ndCByZXZlcnQgdG8gRlRTX05PQ0hE SVIgbW9kZQotKyAgICAgICAgICAgICAgICAgICBvbiBzeXN0ZW1zIGxpa2UgTGludXgrUFJPQ19G Uywgd2hlcmUgb3VyIG9wZW5hdCBlbXVsYXRpb24KLSsgICAgICAgICAgICAgICAgICAgaXMgZ29v ZCBlbm91Z2guICBOb3RlOiBvbiBhIHN5c3RlbSB0aGF0IGVtdWxhdGVzCi0rICAgICAgICAgICAg ICAgICAgIG9wZW5hdCB2aWEgL3Byb2MsIHRoaXMgdGVjaG5pcXVlIGNhbiBzdGlsbCBmYWlsLCBi dXQKLSsgICAgICAgICAgICAgICAgICAgb25seSBpbiBleHRyZW1lIGNvbmRpdGlvbnMsIGUuZy4s IHdoZW4gdGhlIHdvcmtpbmcKLSsgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGNhbm5vdCBi ZSBzYXZlZCAoaS5lLiBzYXZlX2N3ZCBmYWlscykgLS0KLSsgICAgICAgICAgICAgICAgICAgYW5k IHRoYXQgaGFwcGVucyBvbiBMaW51eCBvbmx5IHdoZW4gIi4iIGlzIHVucmVhZGFibGUKLSsgICAg ICAgICAgICAgICAgICAgYW5kIHRoZSBDV0Qgd291bGQgYmUgbG9uZ2VyIHRoYW4gUEFUSF9NQVgu Ci0rICAgICAgICAgICAgICAgICAgIEZJWE1FOiBvbmNlIExpbnV4IGtlcm5lbCBvcGVuYXQgc3Vw cG9ydCBpcyB3ZWxsIGVzdGFibGlzaGVkLAotKyAgICAgICAgICAgICAgICAgICByZXBsYWNlIHRo ZSBhYm92ZSBvcGVuIGNhbGwgYW5kIHRoaXMgZW50aXJlIGlmL2Vsc2UgYmxvY2sKLSsgICAgICAg ICAgICAgICAgICAgd2l0aCB0aGUgYm9keSBvZiB0aGUgaWYtYmxvY2sgYmVsb3cuICAqLwotKyAg ICAgICAgICAgICAgICBpZiAoIG9wZW5hdF9uZWVkc19mY2hkaXIgKCkpCi0rICAgICAgICAgICAg ICAgICAgewotKyAgICAgICAgICAgICAgICAgICAgU0VUKEZUU19OT0NIRElSKTsKLSsgICAgICAg ICAgICAgICAgICAgIENMUihGVFNfQ1dERkQpOwotKyAgICAgICAgICAgICAgICAgIH0KLSsgICAg ICAgICAgICAgIH0KLSsgICAgICAgICAgICBlbHNlCi0rICAgICAgICAgICAgICB7Ci0rICAgICAg ICAgICAgICAgIGNsb3NlIChmZCk7Ci0rICAgICAgICAgICAgICB9Ci0rICAgICAgICAgIH0KLSsK LSsgICAgICAgIC8qCi0rICAgICAgICAgKiBTdGFydCBvdXQgd2l0aCAxSyBvZiBmaWxlIG5hbWUg c3BhY2UsIGFuZCBlbm91Z2gsIGluIGFueSBjYXNlLAotKyAgICAgICAgICogdG8gaG9sZCB0aGUg dXNlcidzIGZpbGUgbmFtZXMuCi0rICAgICAgICAgKi8KLSsjaWZuZGVmIE1BWFBBVEhMRU4KLSsj IGRlZmluZSBNQVhQQVRITEVOIDEwMjQKLSsjZW5kaWYKLSsgICAgICAgIHsKLSsgICAgICAgICAg c2l6ZV90IG1heGFyZ2xlbiA9IGZ0c19tYXhhcmdsZW4oYXJndik7Ci0rICAgICAgICAgIGlmICgh IGZ0c19wYWxsb2Moc3AsIE1BWChtYXhhcmdsZW4sIE1BWFBBVEhMRU4pKSkKLSsgICAgICAgICAg ICAgICAgICBnb3RvIG1lbTE7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICAvKiBBbGxvY2F0ZS9p bml0aWFsaXplIHJvb3QncyBwYXJlbnQuICovCi0rICAgICAgICBGVFNFTlRSWSAqcGFyZW50ID0g TlVMTDsKLSsgICAgICAgIGlmICgqYXJndiAhPSBOVUxMKSB7Ci0rICAgICAgICAgICAgICAgIGlm ICgocGFyZW50ID0gZnRzX2FsbG9jKHNwLCAiIiwgMCkpID09IE5VTEwpCi0rICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBtZW0yOwotKyAgICAgICAgICAgICAgICBwYXJlbnQtPmZ0c19sZXZl bCA9IEZUU19ST09UUEFSRU5UTEVWRUw7Ci0rICAgICAgICAgIH0KLSsKLSsgICAgICAgIC8qIFRo ZSBjbGFzc2ljIGZ0cyBpbXBsZW1lbnRhdGlvbiB3b3VsZCBjYWxsIGZ0c19zdGF0IHdpdGgKLSsg ICAgICAgICAgIGEgbmV3IGVudHJ5IGZvciBlYWNoIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCBiZWxv dy4KLSsgICAgICAgICAgIElmIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGlzIG5vdCBzcGVjaWZp ZWQgb3IgaWYgdGhlCi0rICAgICAgICAgICBGVFNfREVGRVJfU1RBVCBvcHRpb24gaXMgaW4gZWZm ZWN0LCBkb24ndCBzdGF0IGFueSBlbnRyeQotKyAgICAgICAgICAgaW4gdGhpcyBsb29wLiAgVGhp cyBpcyBhbiBhdHRlbXB0IHRvIG1pbmltaXplIHRoZSBpbnRlcnZhbAotKyAgICAgICAgICAgYmV0 d2VlbiB0aGUgaW5pdGlhbCBzdGF0L2xzdGF0L2ZzdGF0YXQgYW5kIHRoZSBwb2ludCBhdCB3aGlj aAotKyAgICAgICAgICAgYSBkaXJlY3RvcnkgYXJndW1lbnQgaXMgZmlyc3Qgb3BlbmVkLiAgVGhp cyBtYXR0ZXJzIGZvciBhbnkKLSsgICAgICAgICAgIGRpcmVjdG9yeSBjb21tYW5kIGxpbmUgYXJn dW1lbnQgdGhhdCByZXNpZGVzIG9uIGEgZmlsZSBzeXN0ZW0KLSsgICAgICAgICAgIHdpdGhvdXQg Z2VudWluZSBpLW5vZGVzLiAgSWYgeW91IHNwZWNpZnkgRlRTX0RFRkVSX1NUQVQgYWxvbmcKLSsg ICAgICAgICAgIHdpdGggYSBjb21wYXJpc29uIGZ1bmN0aW9uLCB0aGF0IGZ1bmN0aW9uIG11c3Qg bm90IGFjY2VzcyBhbnkKLSsgICAgICAgICAgIGRhdGEgdmlhIHRoZSBmdHNfc3RhdHAgcG9pbnRl ci4gICovCi0rICAgICAgICBib29sIGRlZmVyX3N0YXQgPSAoY29tcGFyID09IE5VTEwgfHwgSVNT RVQoRlRTX0RFRkVSX1NUQVQpKTsKLSsKLSsgICAgICAgIC8qIEFsbG9jYXRlL2luaXRpYWxpemUg cm9vdChzKS4gKi8KLSsgICAgICAgIHJlZ2lzdGVyIEZUU0VOVFJZICpyb290OwotKyAgICAgICAg cmVnaXN0ZXIgc2l6ZV90IG5pdGVtczsKLSsgICAgICAgIEZUU0VOVFJZICp0bXAgPSBOVUxMOyAg ICAgLyogcGFjaWZ5IGdjYyAqLwotKyAgICAgICAgZm9yIChyb290ID0gTlVMTCwgbml0ZW1zID0g MDsgKmFyZ3YgIT0gTlVMTDsgKythcmd2LCArK25pdGVtcykgewotKyAgICAgICAgICAgICAgICAv KiAqRG8qIGFsbG93IHplcm8tbGVuZ3RoIGZpbGUgbmFtZXMuICovCi0rICAgICAgICAgICAgICAg IHNpemVfdCBsZW4gPSBzdHJsZW4oKmFyZ3YpOwotKwotKyAgICAgICAgICAgICAgICBpZiAoICEg KG9wdGlvbnMgJiBGVFNfVkVSQkFUSU0pKQotKyAgICAgICAgICAgICAgICAgIHsKLSsgICAgICAg ICAgICAgICAgICAgIC8qIElmIHRoZXJlIGFyZSB0d28gb3IgbW9yZSB0cmFpbGluZyBzbGFzaGVz LCB0cmltIGFsbCBidXQgb25lLAotKyAgICAgICAgICAgICAgICAgICAgICAgYnV0IGRvbid0IGNo YW5nZSAiLy8iIHRvICIvIiwgYW5kIGRvIG1hcCAiLy8vIiB0byAiLyIuICAqLwotKyAgICAgICAg ICAgICAgICAgICAgY2hhciBjb25zdCAqdiA9ICphcmd2OwotKyAgICAgICAgICAgICAgICAgICAg aWYgKDIgPCBsZW4gJiYgdltsZW4gLSAxXSA9PSAnLycpCi0rICAgICAgICAgICAgICAgICAgICAg IHdoaWxlICgxIDwgbGVuICYmIHZbbGVuIC0gMl0gPT0gJy8nKQotKyAgICAgICAgICAgICAgICAg ICAgICAgIC0tbGVuOwotKyAgICAgICAgICAgICAgICAgIH0KLSsKLSsgICAgICAgICAgICAgICAg cmVnaXN0ZXIgRlRTRU5UUlkgKnAgPSBmdHNfYWxsb2Moc3AsICphcmd2LCBsZW4pOwotKyAgICAg ICAgICAgICAgICBpZiAocCA9PSBOVUxMKQotKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g bWVtMzsKLSsgICAgICAgICAgICAgICAgcC0+ZnRzX2xldmVsID0gRlRTX1JPT1RMRVZFTDsKLSsg ICAgICAgICAgICAgICAgcC0+ZnRzX3BhcmVudCA9IHBhcmVudDsKLSsgICAgICAgICAgICAgICAg cC0+ZnRzX2FjY3BhdGggPSBwLT5mdHNfbmFtZTsKLSsgICAgICAgICAgICAgICAgLyogRXZlbiB3 aGVuIGRlZmVyX3N0YXQgaXMgdHJ1ZSwgYmUgc3VyZSB0byBzdGF0IHRoZSBmaXJzdAotKyAgICAg ICAgICAgICAgICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnQsIHNpbmNlIGZ0c19yZWFkIChhdCBs ZWFzdCB3aXRoCi0rICAgICAgICAgICAgICAgICAgIEZUU19YREVWKSByZXF1aXJlcyB0aGF0LiAg Ki8KLSsgICAgICAgICAgICAgICAgaWYgKGRlZmVyX3N0YXQgJiYgcm9vdCAhPSBOVUxMKSB7Ci0r ICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2luZm8gPSBGVFNfTlNPSzsKLSsgICAgICAg ICAgICAgICAgICAgICAgICBmdHNfc2V0X3N0YXRfcmVxdWlyZWQocCwgdHJ1ZSk7Ci0rICAgICAg ICAgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2luZm8g PSBmdHNfc3RhdChzcCwgcCwgZmFsc2UpOwotKyAgICAgICAgICAgICAgICB9Ci0rCi0rICAgICAg ICAgICAgICAgIC8qCi0rICAgICAgICAgICAgICAgICAqIElmIGNvbXBhcmlzb24gcm91dGluZSBz dXBwbGllZCwgdHJhdmVyc2UgaW4gc29ydGVkCi0rICAgICAgICAgICAgICAgICAqIG9yZGVyOyBv dGhlcndpc2UgdHJhdmVyc2UgaW4gdGhlIG9yZGVyIHNwZWNpZmllZC4KLSsgICAgICAgICAgICAg ICAgICovCi0rICAgICAgICAgICAgICAgIGlmIChjb21wYXIpIHsKLSsgICAgICAgICAgICAgICAg ICAgICAgICBwLT5mdHNfbGluayA9IHJvb3Q7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcm9v dCA9IHA7Ci0rICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgICAgICAgICAg ICAgcC0+ZnRzX2xpbmsgPSBOVUxMOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb290 ID09IE5VTEwpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSByb290ID0g cDsKLSsgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRtcC0+ZnRzX2xpbmsgPSBwOwotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG1wID0gcDsKLSsgICAgICAgICAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAg ICAgICAgIH0KLSsgICAgICAgIH0KLSsgICAgICAgIGlmIChjb21wYXIgJiYgbml0ZW1zID4gMSkK LSsgICAgICAgICAgICAgICAgcm9vdCA9IGZ0c19zb3J0KHNwLCByb290LCBuaXRlbXMpOwotKwot KyAgICAgICAgLyoKLSsgICAgICAgICAqIEFsbG9jYXRlIGEgZHVtbXkgcG9pbnRlciBhbmQgbWFr ZSBmdHNfcmVhZCB0aGluayB0aGF0IHdlJ3ZlIGp1c3QKLSsgICAgICAgICAqIGZpbmlzaGVkIHRo ZSBub2RlIGJlZm9yZSB0aGUgcm9vdChzKTsgc2V0IHAtPmZ0c19pbmZvIHRvIEZUU19JTklUCi0r ICAgICAgICAgKiBzbyB0aGF0IGV2ZXJ5dGhpbmcgYWJvdXQgdGhlICJjdXJyZW50IiBub2RlIGlz IGlnbm9yZWQuCi0rICAgICAgICAgKi8KLSsgICAgICAgIGlmICgoc3AtPmZ0c19jdXIgPSBmdHNf YWxsb2Moc3AsICIiLCAwKSkgPT0gTlVMTCkKLSsgICAgICAgICAgICAgICAgZ290byBtZW0zOwot KyAgICAgICAgc3AtPmZ0c19jdXItPmZ0c19saW5rID0gcm9vdDsKLSsgICAgICAgIHNwLT5mdHNf Y3VyLT5mdHNfaW5mbyA9IEZUU19JTklUOwotKyAgICAgICAgc3AtPmZ0c19jdXItPmZ0c19sZXZl bCA9IDE7Ci0rICAgICAgICBpZiAoISBzZXR1cF9kaXIgKHNwKSkKLSsgICAgICAgICAgICAgICAg Z290byBtZW0zOwotKwotKyAgICAgICAgLyoKLSsgICAgICAgICAqIElmIHVzaW5nIGNoZGlyKDIp LCBncmFiIGEgZmlsZSBkZXNjcmlwdG9yIHBvaW50aW5nIHRvIGRvdCB0byBlbnN1cmUKLSsgICAg ICAgICAqIHRoYXQgd2UgY2FuIGdldCBiYWNrIGhlcmU7IHRoaXMgY291bGQgYmUgYXZvaWRlZCBm b3Igc29tZSBmaWxlIG5hbWVzLAotKyAgICAgICAgICogYnV0IGFsbW9zdCBjZXJ0YWlubHkgbm90 IHdvcnRoIHRoZSBlZmZvcnQuICBTbGFzaGVzLCBzeW1ib2xpYyBsaW5rcywKLSsgICAgICAgICAq IGFuZCAiLi4iIGFyZSBhbGwgZmFpcmx5IG5hc3R5IHByb2JsZW1zLiAgTm90ZSwgaWYgd2UgY2Fu J3QgZ2V0IHRoZQotKyAgICAgICAgICogZGVzY3JpcHRvciB3ZSBydW4gYW55d2F5LCBqdXN0IG1v cmUgc2xvd2x5LgotKyAgICAgICAgICovCi0rICAgICAgICBpZiAoIUlTU0VUKEZUU19OT0NIRElS KSAmJiAhSVNTRVQoRlRTX0NXREZEKQotKyAgICAgICAgICAgICYmIChzcC0+ZnRzX3JmZCA9IGRp cm9wZW4gKHNwLCAiLiIpKSA8IDApCi0rICAgICAgICAgICAgICAgIFNFVChGVFNfTk9DSERJUik7 Ci0rCi0rICAgICAgICBpX3JpbmdfaW5pdCAoJnNwLT5mdHNfZmRfcmluZywgLTEpOwotKyAgICAg ICAgcmV0dXJuIChzcCk7Ci0rCi0rbWVtMzogICBmdHNfbGZyZWUocm9vdCk7Ci0rICAgICAgICBm cmVlKEZUU0VOVF9XUkFQUEVSKHBhcmVudCkpOwotK21lbTI6ICAgZnJlZShzcC0+ZnRzX3BhdGgp OwotK21lbTE6ICAgZnJlZShzcCk7Ci0rICAgICAgICByZXR1cm4gKE5VTEwpOwotK30KLSsKLStz dGF0aWMgdm9pZAotK2ludGVybmFsX2Z1bmN0aW9uCi0rZnRzX2xvYWQgKEZUU09CSiAqc3AsIHJl Z2lzdGVyIEZUU0VOVFJZICpwKQotK3sKLSsgICAgICAgIC8qCi0rICAgICAgICAgKiBMb2FkIHRo ZSBzdHJlYW0gc3RydWN0dXJlIGZvciB0aGUgbmV4dCB0cmF2ZXJzYWwuICBTaW5jZSB3ZSBkb24n dAotKyAgICAgICAgICogYWN0dWFsbHkgZW50ZXIgdGhlIGRpcmVjdG9yeSB1bnRpbCBhZnRlciB0 aGUgcHJlb3JkZXIgdmlzaXQsIHNldAotKyAgICAgICAgICogdGhlIGZ0c19hY2NwYXRoIGZpZWxk IHNwZWNpYWxseSBzbyB0aGUgY2hkaXIgZ2V0cyBkb25lIHRvIHRoZSByaWdodAotKyAgICAgICAg ICogcGxhY2UgYW5kIHRoZSB1c2VyIGNhbiBhY2Nlc3MgdGhlIGZpcnN0IG5vZGUuICBGcm9tIGZ0 c19vcGVuIGl0J3MKLSsgICAgICAgICAqIGtub3duIHRoYXQgdGhlIGZpbGUgbmFtZSB3aWxsIGZp dC4KLSsgICAgICAgICAqLwotKyAgICAgICAgcmVnaXN0ZXIgc2l6ZV90IGxlbiA9IHAtPmZ0c19w YXRobGVuID0gcC0+ZnRzX25hbWVsZW47Ci0rICAgICAgICBtZW1tb3ZlKHNwLT5mdHNfcGF0aCwg cC0+ZnRzX25hbWUsIGxlbiArIDEpOwotKyAgICAgICAgcmVnaXN0ZXIgY2hhciAqY3AgPSBzdHJy Y2hyKHAtPmZ0c19uYW1lLCAnLycpOwotKyAgICAgICAgaWYgKGNwICYmIChjcCAhPSBwLT5mdHNf bmFtZSB8fCBjcFsxXSkpIHsKLSsgICAgICAgICAgICAgICAgbGVuID0gc3RybGVuKCsrY3ApOwot KyAgICAgICAgICAgICAgICBtZW1tb3ZlKHAtPmZ0c19uYW1lLCBjcCwgbGVuICsgMSk7Ci0rICAg ICAgICAgICAgICAgIHAtPmZ0c19uYW1lbGVuID0gbGVuOwotKyAgICAgICAgfQotKyAgICAgICAg cC0+ZnRzX2FjY3BhdGggPSBwLT5mdHNfcGF0aCA9IHNwLT5mdHNfcGF0aDsKLSt9Ci0rCi0raW50 Ci0rRlRTX0NMT1NFIChGVFNPQkogKnNwKQotK3sKLSsgICAgICAgIC8qCi0rICAgICAgICAgKiBU aGlzIHN0aWxsIHdvcmtzIGlmIHdlIGhhdmVuJ3QgcmVhZCBhbnl0aGluZyAtLSB0aGUgZHVtbXkg c3RydWN0dXJlCi0rICAgICAgICAgKiBwb2ludHMgdG8gdGhlIHJvb3QgbGlzdCwgc28gd2Ugc3Rl cCB0aHJvdWdoIHRvIHRoZSBlbmQgb2YgdGhlIHJvb3QKLSsgICAgICAgICAqIGxpc3Qgd2hpY2gg aGFzIGEgdmFsaWQgcGFyZW50IHBvaW50ZXIuCi0rICAgICAgICAgKi8KLSsgICAgICAgIGlmIChz cC0+ZnRzX2N1cikgewotKyAgICAgICAgICAgICAgICByZWdpc3RlciBGVFNFTlRSWSAqcDsKLSsg ICAgICAgICAgICAgICAgZm9yIChwID0gc3AtPmZ0c19jdXI7IHAtPmZ0c19sZXZlbCA+PSBGVFNf Uk9PVExFVkVMOykgewotKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIEZUU0VOVFJZ ICpmcmVlcCA9IHA7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHAtPmZ0c19saW5rICE9 IE5VTEwgPyBwLT5mdHNfbGluayA6IHAtPmZ0c19wYXJlbnQ7Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgZnJlZShGVFNFTlRfV1JBUFBFUihmcmVlcCkpOwotKyAgICAgICAgICAgICAgICB9Ci0r ICAgICAgICAgICAgICAgIGZyZWUoRlRTRU5UX1dSQVBQRVIocCkpOwotKyAgICAgICAgfQotKwot KyAgICAgICAgLyogRnJlZSB1cCBjaGlsZCBsaW5rZWQgbGlzdCwgc29ydCBhcnJheSwgZmlsZSBu YW1lIGJ1ZmZlci4gKi8KLSsgICAgICAgIGlmIChzcC0+ZnRzX2NoaWxkKQotKyAgICAgICAgICAg ICAgICBmdHNfbGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0rICAgICAgICBmcmVlKHNwLT5mdHNfYXJy YXkpOwotKyAgICAgICAgZnJlZShzcC0+ZnRzX3BhdGgpOwotKwotKyAgICAgICAgaW50IHNhdmVk X2Vycm5vID0gMDsKLSsgICAgICAgIGlmIChJU1NFVChGVFNfQ1dERkQpKQotKyAgICAgICAgICB7 Ci0rICAgICAgICAgICAgaWYgKDAgPD0gc3AtPmZ0c19jd2RfZmQpCi0rICAgICAgICAgICAgICBp ZiAoY2xvc2UgKHNwLT5mdHNfY3dkX2ZkKSkKLSsgICAgICAgICAgICAgICAgc2F2ZWRfZXJybm8g PSBlcnJubzsKLSsgICAgICAgICAgfQotKyAgICAgICAgZWxzZSBpZiAoIUlTU0VUKEZUU19OT0NI RElSKSkKLSsgICAgICAgICAgewotKyAgICAgICAgICAgIC8qIFJldHVybiB0byBvcmlnaW5hbCBk aXJlY3RvcnksIHNhdmUgZXJybm8gaWYgbmVjZXNzYXJ5LiAqLwotKyAgICAgICAgICAgIGlmIChm Y2hkaXIoc3AtPmZ0c19yZmQpKQotKyAgICAgICAgICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsK LSsKLSsgICAgICAgICAgICAvKiBJZiBjbG9zZSBmYWlscywgcmVjb3JkIGVycm5vIG9ubHkgaWYg c2F2ZWRfZXJybm8gaXMgemVybywKLSsgICAgICAgICAgICAgICBzbyB0aGF0IHdlIHJlcG9ydCB0 aGUgcHJvYmFibHktbW9yZS1tZWFuaW5nZnVsIGZjaGRpciBlcnJuby4gICovCi0rICAgICAgICAg ICAgaWYgKGNsb3NlIChzcC0+ZnRzX3JmZCkpCi0rICAgICAgICAgICAgICBpZiAoc2F2ZWRfZXJy bm8gPT0gMCkKLSsgICAgICAgICAgICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKLSsgICAgICAg ICAgfQotKwotKyAgICAgICAgZmRfcmluZ19jbGVhciAoJnNwLT5mdHNfZmRfcmluZyk7Ci0rCi0r ICAgICAgICBpZiAoc3AtPmZ0c19sZWFmX29wdGltaXphdGlvbl93b3Jrc19odCkKLSsgICAgICAg ICAgaGFzaF9mcmVlIChzcC0+ZnRzX2xlYWZfb3B0aW1pemF0aW9uX3dvcmtzX2h0KTsKLSsKLSsg ICAgICAgIGZyZWVfZGlyIChzcCk7Ci0rCi0rICAgICAgICAvKiBGcmVlIHVwIHRoZSBzdHJlYW0g cG9pbnRlci4gKi8KLSsgICAgICAgIGZyZWUoc3ApOwotKwotKyAgICAgICAgLyogU2V0IGVycm5v IGFuZCByZXR1cm4uICovCi0rICAgICAgICBpZiAoc2F2ZWRfZXJybm8pIHsKLSsgICAgICAgICAg ICAgICAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsKLSsgICAgICAgICAgICAgICAgcmV0dXJu ICgtMSk7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICByZXR1cm4gKDApOwotK30KLSsKLSsvKiBN aW5pbXVtIGxpbmsgY291bnQgb2YgYSB0cmFkaXRpb25hbCBVbml4IGRpcmVjdG9yeS4gIFdoZW4g bGVhZgotKyAgIG9wdGltaXphdGlvbiBpcyBPSyBhbmQgYSBkaXJlY3RvcnkncyBzdF9ubGluayA9 PSBNSU5fRElSX05MSU5LLAotKyAgIHRoZW4gdGhlIGRpcmVjdG9yeSBoYXMgbm8gc3ViZGlyZWN0 b3JpZXMuICAqLwotK2VudW0geyBNSU5fRElSX05MSU5LID0gMiB9OwotKwotKy8qIFdoZXRoZXIg bGVhZiBvcHRpbWl6YXRpb24gaXMgT0sgZm9yIGEgZGlyZWN0b3J5LiAgKi8KLStlbnVtIGxlYWZf b3B0aW1pemF0aW9uCi0rICB7Ci0rICAgIC8qIHN0X25saW5rIGlzIG5vdCByZWxpYWJsZSBmb3Ig dGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3Rvcmllcy4gICovCi0rICAgIE5PX0xFQUZfT1BUSU1J WkFUSU9OLAotKwotKyAgICAvKiBzdF9ubGluayA9PSAyIG1lYW5zIHRoZSBkaXJlY3RvcnkgbGFj a3Mgc3ViZGlyZWN0b3JpZXMuICAqLwotKyAgICBPS19MRUFGX09QVElNSVpBVElPTgotKyAgfTsK LSsKLSsjaWYgKGRlZmluZWQgX19saW51eF9fIHx8IGRlZmluZWQgX19BTkRST0lEX18pIFwKLSsg ICYmIEhBVkVfU1lTX1ZGU19IICYmIEhBVkVfRlNUQVRGUyAmJiBIQVZFX1NUUlVDVF9TVEFURlNf Rl9UWVBFCi0rCi0rIyBpbmNsdWRlIDxzeXMvdmZzLmg+Ci0rCi0rLyogTGludXgtc3BlY2lmaWMg Y29uc3RhbnRzIGZyb20gY29yZXV0aWxzJyBzcmMvZnMuaCAqLwotKyMgZGVmaW5lIFNfTUFHSUNf QUZTIDB4NTM0NjQxNEYKLSsjIGRlZmluZSBTX01BR0lDX0NJRlMgMHhGRjUzNEQ0MgotKyMgZGVm aW5lIFNfTUFHSUNfTFVTVFJFIDB4MEJEMDBCRDAKLSsjIGRlZmluZSBTX01BR0lDX05GUyAweDY5 NjkKLSsjIGRlZmluZSBTX01BR0lDX1BST0MgMHg5RkEwCi0rIyBkZWZpbmUgU19NQUdJQ19UTVBG UyAweDEwMjE5OTQKLSsKLSsjIGlmZGVmIEhBVkVfX19GU1dPUkRfVAotK3R5cGVkZWYgX19mc3dv cmRfdCBmc3dvcmQ7Ci0rIyBlbHNlCi0rdHlwZWRlZiBsb25nIGludCBmc3dvcmQ7Ci0rIyBlbmRp ZgotKwotKy8qIE1hcCBhIHN0YXQuc3RfZGV2IG51bWJlciB0byBhIGZpbGUgc3lzdGVtIHR5cGUg bnVtYmVyIGZfZnR5cGUuICAqLwotK3N0cnVjdCBkZXZfdHlwZQotK3sKLSsgIGRldl90IHN0X2Rl djsKLSsgIGZzd29yZCBmX3R5cGU7Ci0rfTsKLSsKLSsvKiBVc2UgYSB0aW55IGluaXRpYWwgc2l6 ZS4gIElmIGEgdHJhdmVyc2FsIGVuY291bnRlcnMgbW9yZSB0aGFuCi0rICAgYSBmZXcgZGV2aWNl cywgdGhlIGNvc3Qgb2YgZ3Jvd2luZy9yZWhhc2hpbmcgdGhpcyB0YWJsZSB3aWxsIGJlCi0rICAg cmVuZGVyZWQgbmVnbGlnaWJsZSBieSB0aGUgbnVtYmVyIG9mIGlub2RlcyBwcm9jZXNzZWQuICAq LwotK2VudW0geyBERVZfVFlQRV9IVF9JTklUSUFMX1NJWkUgPSAxMyB9OwotKwotK3N0YXRpYyBz aXplX3QKLStkZXZfdHlwZV9oYXNoICh2b2lkIGNvbnN0ICp4LCBzaXplX3QgdGFibGVfc2l6ZSkK LSt7Ci0rICBzdHJ1Y3QgZGV2X3R5cGUgY29uc3QgKmF4ID0geDsKLSsgIHVpbnRtYXhfdCBkZXYg PSBheC0+c3RfZGV2OwotKyAgcmV0dXJuIGRldiAlIHRhYmxlX3NpemU7Ci0rfQotKwotK3N0YXRp YyBib29sCi0rZGV2X3R5cGVfY29tcGFyZSAodm9pZCBjb25zdCAqeCwgdm9pZCBjb25zdCAqeSkK LSt7Ci0rICBzdHJ1Y3QgZGV2X3R5cGUgY29uc3QgKmF4ID0geDsKLSsgIHN0cnVjdCBkZXZfdHlw ZSBjb25zdCAqYXkgPSB5OwotKyAgcmV0dXJuIGF4LT5zdF9kZXYgPT0gYXktPnN0X2RldjsKLSt9 Ci0rCi0rLyogUmV0dXJuIHRoZSBmaWxlIHN5c3RlbSB0eXBlIG9mIFAgd2l0aCBmaWxlIGRlc2Ny aXB0b3IgRkQsIG9yIDAgaWYgbm90IGtub3duLgotKyAgIElmIEZEIGlzIG5lZ2F0aXZlLCBQJ3Mg ZmlsZSBkZXNjcmlwdG9yIGlzIHVuYXZhaWxhYmxlLgotKyAgIFRyeSB0byBjYWNoZSBrbm93biB2 YWx1ZXMuICAqLwotKwotK3N0YXRpYyBmc3dvcmQKLStmaWxlc3lzdGVtX3R5cGUgKEZUU0VOVFJZ IGNvbnN0ICpwLCBpbnQgZmQpCi0rewotKyAgRlRTT0JKICpzcCA9IEZUU0VOVF9GVFMocCk7Ci0r Ci0rICAvKiBJZiB3ZSdyZSBub3QgaW4gQ1dERkQgbW9kZSwgZG9uJ3QgYm90aGVyIHdpdGggdGhp cyBvcHRpbWl6YXRpb24sCi0rICAgICBzaW5jZSB0aGUgY2FsbGVyIGlzIG5vdCBzZXJpb3VzIGFi b3V0IHBlcmZvcm1hbmNlLiAgKi8KLSsgIGlmICghSVNTRVQgKEZUU19DV0RGRCkpCi0rICAgIHJl dHVybiAwOwotKwotKyAgSGFzaF90YWJsZSAqaCA9IHNwLT5mdHNfbGVhZl9vcHRpbWl6YXRpb25f d29ya3NfaHQ7Ci0rICBpZiAoISBoKQotKyAgICBoID0gc3AtPmZ0c19sZWFmX29wdGltaXphdGlv bl93b3Jrc19odAotKyAgICAgID0gaGFzaF9pbml0aWFsaXplIChERVZfVFlQRV9IVF9JTklUSUFM X1NJWkUsIE5VTEwsIGRldl90eXBlX2hhc2gsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGRl dl90eXBlX2NvbXBhcmUsIGZyZWUpOwotKwotKyAgaWYgKGgpCi0rICAgIHsKLSsgICAgICBzdHJ1 Y3QgZGV2X3R5cGUgdG1wOwotKyAgICAgIHRtcC5zdF9kZXYgPSBwLT5mdHNfc3RhdHAtPnN0X2Rl djsKLSsgICAgICBzdHJ1Y3QgZGV2X3R5cGUgKmVudCA9IGhhc2hfbG9va3VwIChoLCAmdG1wKTsK LSsgICAgICBpZiAoZW50KQotKyAgICAgICAgcmV0dXJuIGVudC0+Zl90eXBlOwotKyAgICB9Ci0r Ci0rICAvKiBMb29rLXVwIGZhaWxlZC4gIFF1ZXJ5IGRpcmVjdGx5IGFuZCBjYWNoZSB0aGUgcmVz dWx0LiAgKi8KLSsgIHN0cnVjdCBTVFJVQ1RfU1RBVEZTIGZzX2J1ZjsKLSsgIGlmIChmZCA8IDAg fHwgRlNUQVRGUyAoZmQsICZmc19idWYpICE9IDApCi0rICAgIHJldHVybiAwOwotKwotKyAgaWYg KGgpCi0rICAgIHsKLSsgICAgICBzdHJ1Y3QgZGV2X3R5cGUgKnQyID0gbWFsbG9jIChzaXplb2Yg KnQyKTsKLSsgICAgICBpZiAodDIpCi0rICAgICAgICB7Ci0rICAgICAgICAgIHQyLT5zdF9kZXYg PSBwLT5mdHNfc3RhdHAtPnN0X2RldjsKLSsgICAgICAgICAgdDItPmZfdHlwZSA9IGZzX2J1Zi5m X3R5cGU7Ci0rCi0rICAgICAgICAgIHN0cnVjdCBkZXZfdHlwZSAqZW50ID0gaGFzaF9pbnNlcnQg KGgsIHQyKTsKLSsgICAgICAgICAgaWYgKGVudCkKLSsgICAgICAgICAgICBmdHNfYXNzZXJ0IChl bnQgPT0gdDIpOwotKyAgICAgICAgICBlbHNlCi0rICAgICAgICAgICAgZnJlZSAodDIpOwotKyAg ICAgICAgfQotKyAgICB9Ci0rCi0rICByZXR1cm4gZnNfYnVmLmZfdHlwZTsKLSt9Ci0rCi0rLyog UmV0dXJuIHRydWUgaWYgc29ydGluZyBkaXJlbnRzIG9uIGlub2RlIG51bWJlcnMgaXMga25vd24g dG8gaW1wcm92ZQotKyAgIHRyYXZlcnNhbCBwZXJmb3JtYW5jZSBmb3IgdGhlIGRpcmVjdG9yeSBQ IHdpdGggZGVzY3JpcHRvciBESVJfRkQuCi0rICAgUmV0dXJuIGZhbHNlIG90aGVyd2lzZS4gIFdo ZW4gaW4gZG91YnQsIHJldHVybiB0cnVlLgotKyAgIERJUl9GRCBpcyBuZWdhdGl2ZSBpZiB1bmF2 YWlsYWJsZS4gICovCi0rc3RhdGljIGJvb2wKLStkaXJlbnRfaW5vZGVfc29ydF9tYXlfYmVfdXNl ZnVsIChGVFNFTlRSWSBjb25zdCAqcCwgaW50IGRpcl9mZCkKLSt7Ci0rICAvKiBTa2lwIHRoZSBz b3J0IG9ubHkgaWYgd2UgY2FuIGRldGVybWluZSBlZmZpY2llbnRseQotKyAgICAgdGhhdCBza2lw cGluZyBpdCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCi0rICAgICBUaGUgY29zdCBvZiBwZXJm b3JtaW5nIGFuIHVubmVjZXNzYXJ5IHNvcnQgaXMgbmVnbGlnaWJsZSwKLSsgICAgIHdoaWxlIHRo ZSBjb3N0IG9mICpub3QqIHBlcmZvcm1pbmcgaXQgY2FuIGJlIE8oTl4yKSB3aXRoCi0rICAgICBh IHZlcnkgbGFyZ2UgY29uc3RhbnQuICAqLwotKwotKyAgc3dpdGNoIChmaWxlc3lzdGVtX3R5cGUg KHAsIGRpcl9mZCkpCi0rICAgIHsKLSsgICAgY2FzZSBTX01BR0lDX0xVU1RSRToKLSsgICAgICAv KiBPbiBMdXN0cmUsIHNvcnRpbmcgZGlyZWN0b3J5IGVudHJpZXMgaW50ZXJmZXJlcyB3aXRoIGl0 cyBhYmlsaXR5IHRvCi0rICAgICAgICAgcHJlZmV0Y2ggZmlsZSBtZXRhZGF0YSAodmlhIHN0YXRh aGVhZCkuICBUaGlzIHdvdWxkIG1ha2UgYSBjb21tYW5kCi0rICAgICAgICAgbGlrZSAnZHUnIGFy b3VuZCA5IHRpbWVzIHNsb3dlci4gIFNlZQotKyAgICAgICAgIDxodHRwczovL2J1Z3MuZ251Lm9y Zy84MDEwNj4uICAqLwotKyAgICBjYXNlIFNfTUFHSUNfQ0lGUzoKLSsgICAgY2FzZSBTX01BR0lD X05GUzoKLSsgICAgY2FzZSBTX01BR0lDX1RNUEZTOgotKyAgICAgIC8qIE9uIGEgZmlsZSBzeXN0 ZW0gb2YgYW55IG9mIHRoZXNlIHR5cGVzLCBzb3J0aW5nCi0rICAgICAgICAgaXMgdW5uZWNlc3Nh cnksIGFuZCBoZW5jZSB3YXN0ZWZ1bC4gICovCi0rICAgICAgcmV0dXJuIGZhbHNlOwotKwotKyAg ICBkZWZhdWx0OgotKyAgICAgIHJldHVybiB0cnVlOwotKyAgICB9Ci0rfQotKwotKy8qIEdpdmVu IGFuIEZUUyBlbnRyeSBQIGZvciBhIGRpcmVjdG9yeSB3aXRoIGRlc2NyaXB0b3IgRElSX0ZELAot KyAgIHJldHVybiB3aGV0aGVyIGl0IGlzIHZhbGlkIHRvIGFwcGx5IGxlYWYgb3B0aW1pemF0aW9u LgotKyAgIFRoZSBvcHRpbWl6YXRpb24gaXMgdmFsaWQgaWYgYSBkaXJlY3RvcnkncyBzdF9ubGlu ayB2YWx1ZSBlcXVhbAotKyAgIHRvIE1JTl9ESVJfTkxJTksgbWVhbnMgdGhlIGRpcmVjdG9yeSBo YXMgbm8gc3ViZGlyZWN0b3JpZXMuCi0rICAgRElSX0ZEIGlzIG5lZ2F0aXZlIGlmIHVuYXZhaWxh YmxlLiAgKi8KLStzdGF0aWMgZW51bSBsZWFmX29wdGltaXphdGlvbgotK2xlYWZfb3B0aW1pemF0 aW9uIChGVFNFTlRSWSBjb25zdCAqcCwgaW50IGRpcl9mZCkKLSt7Ci0rICBzd2l0Y2ggKGZpbGVz eXN0ZW1fdHlwZSAocCwgZGlyX2ZkKSkKLSsgICAgewotKyAgICBjYXNlIDA6Ci0rICAgICAgLyog TGVhZiBvcHRpbWl6YXRpb24gaXMgdW5zYWZlIGlmIHRoZSBmaWxlIHN5c3RlbSB0eXBlIGlzIHVu a25vd24uICAqLwotKyAgICAgIEZBTExUSFJPVUdIOwotKyAgICBjYXNlIFNfTUFHSUNfQUZTOgot KyAgICAgIC8qIEFsdGhvdWdoIEFGUyBtb3VudCBwb2ludHMgYXJlIG5vdCBjb3VudGVkIGluIHN0 X25saW5rLCB0aGV5Ci0rICAgICAgICAgYWN0IGxpa2UgZGlyZWN0b3JpZXMuICBTZWUgPGh0dHBz Oi8vYnVncy5kZWJpYW4ub3JnLzE0MzExMT4uICAqLwotKyAgICAgIEZBTExUSFJPVUdIOwotKyAg ICBjYXNlIFNfTUFHSUNfQ0lGUzoKLSsgICAgICAvKiBMZWFmIG9wdGltaXphdGlvbiBjYXVzZXMg J2ZpbmQnIHRvIGFib3J0LiAgU2VlCi0rICAgICAgICAgPGh0dHBzOi8vbGlzdHMuZ251Lm9yZy9y L2J1Zy1nbnVsaWIvMjAxOC0wNC9tc2cwMDAxNS5odG1sPi4gICovCi0rICAgICAgRkFMTFRIUk9V R0g7Ci0rICAgIGNhc2UgU19NQUdJQ19ORlM6Ci0rICAgICAgLyogTkZTIHByb3ZpZGVzIHVzYWJs ZSBkaXJlbnQuZF90eXBlIGJ1dCBub3QgbmVjZXNzYXJpbHkgZm9yIGFsbCBlbnRyaWVzCi0rICAg ICAgICAgb2YgbGFyZ2UgZGlyZWN0b3JpZXMsIHNvIGFzIHBlciA8aHR0cHM6Ly9idWd6aWxsYS5y ZWRoYXQuY29tLzEyNTI1NDk+Ci0rICAgICAgICAgTkZTIHNob3VsZCByZXR1cm4gdHJ1ZS4gIEhv d2V2ZXIgc3RfbmxpbmsgdmFsdWVzIGFyZSBub3QgYWNjdXJhdGUgb24KLSsgICAgICAgICBhbGwg aW1wbGVtZW50YXRpb25zIGFzIHBlciA8aHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tLzEyOTkx Njk+LiAgKi8KLSsgICAgICBGQUxMVEhST1VHSDsKLSsgICAgY2FzZSBTX01BR0lDX1BST0M6Ci0r ICAgICAgLyogUGVyIDxodHRwczovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5j Z2k/YnVnPTE0MzExMT4gL3Byb2MKLSsgICAgICAgICBtYXkgaGF2ZSBib2d1cyBzdGF0LnN0X25s aW5rIHZhbHVlcy4gICovCi0rICAgICAgcmV0dXJuIE5PX0xFQUZfT1BUSU1JWkFUSU9OOwotKwot KyAgICBkZWZhdWx0OgotKyAgICAgIHJldHVybiBPS19MRUFGX09QVElNSVpBVElPTjsKLSsgICAg fQotK30KLSsKLSsjZWxzZQotK3N0YXRpYyBib29sCi0rZGlyZW50X2lub2RlX3NvcnRfbWF5X2Jl X3VzZWZ1bCAoX0dMX1VOVVNFRCBGVFNFTlRSWSBjb25zdCAqcCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfR0xfVU5VU0VEIGludCBkaXJfZmQpCi0rewotKyAgcmV0dXJuIHRy dWU7Ci0rfQotK3N0YXRpYyBlbnVtIGxlYWZfb3B0aW1pemF0aW9uCi0rbGVhZl9vcHRpbWl6YXRp b24gKF9HTF9VTlVTRUQgRlRTRU5UUlkgY29uc3QgKnAsIF9HTF9VTlVTRUQgaW50IGRpcl9mZCkK LSt7Ci0rICByZXR1cm4gTk9fTEVBRl9PUFRJTUlaQVRJT047Ci0rfQotKyNlbmRpZgotKwotKy8q Ci0rICogU3BlY2lhbCBjYXNlIG9mICIvIiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIG5hbWUgc28g dGhhdCBzbGFzaGVzIGFyZW4ndAotKyAqIGFwcGVuZGVkIHdoaWNoIHdvdWxkIGNhdXNlIGZpbGUg bmFtZXMgdG8gYmUgd3JpdHRlbiBhcyAiLi4uLi8vZm9vIi4KLSsgKi8KLSsjZGVmaW5lIE5BUFBF TkQocCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgICAocC0+ZnRzX3BhdGhbcC0+ZnRzX3BhdGhsZW4gLSAxXSA9PSAnLycgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgID8gcC0+ZnRzX3BhdGhsZW4gLSAx IDogcC0+ZnRzX3BhdGhsZW4pCi0rCi0rRlRTRU5UUlkgKgotK0ZUU19SRUFEIChGVFNPQkogKnNw KQotK3sKLSsgICAgICAgIC8qIElmIGZpbmlzaGVkIG9yIHVucmVjb3ZlcmFibGUgZXJyb3IsIHJl dHVybiBOVUxMLiAqLwotKyAgICAgICAgaWYgKHNwLT5mdHNfY3VyID09IE5VTEwgfHwgSVNTRVQo RlRTX1NUT1ApKQotKyAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotKwotKyAgICAgICAg LyogU2V0IGN1cnJlbnQgbm9kZSBwb2ludGVyLiAqLwotKyAgICAgICAgcmVnaXN0ZXIgRlRTRU5U UlkgKnAgPSBzcC0+ZnRzX2N1cjsKLSsKLSsgICAgICAgIC8qIFNhdmUgYW5kIHplcm8gb3V0IHVz ZXIgaW5zdHJ1Y3Rpb25zLiAqLwotKyAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgc2hvcnQgaW50 IGluc3RyID0gcC0+ZnRzX2luc3RyOwotKyAgICAgICAgcC0+ZnRzX2luc3RyID0gRlRTX05PSU5T VFI7Ci0rCi0rICAgICAgICAvKiBBbnkgdHlwZSBvZiBmaWxlIG1heSBiZSByZS12aXNpdGVkOyBy ZS1zdGF0IGFuZCByZS10dXJuLiAqLwotKyAgICAgICAgaWYgKGluc3RyID09IEZUU19BR0FJTikg ewotKyAgICAgICAgICAgICAgICBwLT5mdHNfaW5mbyA9IGZ0c19zdGF0KHNwLCBwLCBmYWxzZSk7 Ci0rICAgICAgICAgICAgICAgIHJldHVybiAocCk7Ci0rICAgICAgICB9Ci0rICAgICAgICBEcHJp bnRmICgoImZ0c19yZWFkOiBwPSVzXG4iLAotKyAgICAgICAgICAgICAgICAgIHAtPmZ0c19pbmZv ID09IEZUU19JTklUID8gIiIgOiBwLT5mdHNfcGF0aCkpOwotKwotKyAgICAgICAgLyoKLSsgICAg ICAgICAqIEZvbGxvd2luZyBhIHN5bWxpbmsgLS0gU0xOT05FIHRlc3QgYWxsb3dzIGFwcGxpY2F0 aW9uIHRvIHNlZQotKyAgICAgICAgICogU0xOT05FIGFuZCByZWNvdmVyLiAgSWYgaW5kaXJlY3Rp bmcgdGhyb3VnaCBhIHN5bWxpbmssIGhhdmUKLSsgICAgICAgICAqIGtlZXAgYSBwb2ludGVyIHRv IGN1cnJlbnQgbG9jYXRpb24uICBJZiB1bmFibGUgdG8gZ2V0IHRoYXQKLSsgICAgICAgICAqIHBv aW50ZXIsIGZvbGxvdyBmYWlscy4KLSsgICAgICAgICAqLwotKyAgICAgICAgaWYgKGluc3RyID09 IEZUU19GT0xMT1cgJiYKLSsgICAgICAgICAgICAocC0+ZnRzX2luZm8gPT0gRlRTX1NMIHx8IHAt PmZ0c19pbmZvID09IEZUU19TTE5PTkUpKSB7Ci0rICAgICAgICAgICAgICAgIHAtPmZ0c19pbmZv ID0gZnRzX3N0YXQoc3AsIHAsIHRydWUpOwotKyAgICAgICAgICAgICAgICBpZiAocC0+ZnRzX2lu Zm8gPT0gRlRTX0QgJiYgIUlTU0VUKEZUU19OT0NIRElSKSkgewotKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgocC0+ZnRzX3N5bWZkID0gZGlyb3BlbiAoc3AsICIuIikpIDwgMCkgewotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2Vycm5vID0gZXJybm87Ci0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfaW5mbyA9IEZUU19FUlI7Ci0rICAg ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwLT5mdHNfZmxhZ3MgfD0gRlRTX1NZTUZPTExPVzsKLSsgICAgICAgICAgICAgICAgfQot KyAgICAgICAgICAgICAgICBnb3RvIGNoZWNrX2Zvcl9kaXI7Ci0rICAgICAgICB9Ci0rCi0rICAg ICAgICAvKiBEaXJlY3RvcnkgaW4gcHJlLW9yZGVyLiAqLwotKyAgICAgICAgaWYgKHAtPmZ0c19p bmZvID09IEZUU19EKSB7Ci0rICAgICAgICAgICAgICAgIC8qIElmIHNraXBwZWQgb3IgY3Jvc3Nl ZCBtb3VudCBwb2ludCwgZG8gcG9zdC1vcmRlciB2aXNpdC4gKi8KLSsgICAgICAgICAgICAgICAg aWYgKGluc3RyID09IEZUU19TS0lQIHx8Ci0rICAgICAgICAgICAgICAgICAgICAoSVNTRVQoRlRT X1hERVYpICYmIHAtPmZ0c19zdGF0cC0+c3RfZGV2ICE9IHNwLT5mdHNfZGV2KSkgewotKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChwLT5mdHNfZmxhZ3MgJiBGVFNfU1lNRk9MTE9XKQotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpY2xvc2UocC0+ZnRzX3N5bWZkKTsK LSsgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3AtPmZ0c19jaGlsZCkgewotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZnRzX2xmcmVlKHNwLT5mdHNfY2hpbGQpOwotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmZ0c19jaGlsZCA9IE5VTEw7Ci0rICAgICAg ICAgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19pbmZv ID0gRlRTX0RQOwotKyAgICAgICAgICAgICAgICAgICAgICAgIExFQVZFX0RJUiAoc3AsIHAsICIx Iik7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwKTsKLSsgICAgICAgICAgICAg ICAgfQotKwotKyAgICAgICAgICAgICAgICAvKiBSZWJ1aWxkIGlmIG9ubHkgcmVhZCB0aGUgbmFt ZXMgYW5kIG5vdyB0cmF2ZXJzaW5nLiAqLwotKyAgICAgICAgICAgICAgICBpZiAoc3AtPmZ0c19j aGlsZCAhPSBOVUxMICYmIElTU0VUKEZUU19OQU1FT05MWSkpIHsKLSsgICAgICAgICAgICAgICAg ICAgICAgICBDTFIoRlRTX05BTUVPTkxZKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICBmdHNf bGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmZ0c19j aGlsZCA9IE5VTEw7Ci0rICAgICAgICAgICAgICAgIH0KLSsKLSsgICAgICAgICAgICAgICAgLyoK LSsgICAgICAgICAgICAgICAgICogQ2QgdG8gdGhlIHN1YmRpcmVjdG9yeS4KLSsgICAgICAgICAg ICAgICAgICoKLSsgICAgICAgICAgICAgICAgICogSWYgaGF2ZSBhbHJlYWR5IHJlYWQgYW5kIG5v dyBmYWlsIHRvIGNoZGlyLCB3aGFjayB0aGUgbGlzdAotKyAgICAgICAgICAgICAgICAgKiB0byBt YWtlIHRoZSBuYW1lcyBjb21lIG91dCByaWdodCwgYW5kIHNldCB0aGUgcGFyZW50IGVycm5vCi0r ICAgICAgICAgICAgICAgICAqIHNvIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGV2ZW50dWFsbHkgZ2V0 IGFuIGVycm9yIGNvbmRpdGlvbi4KLSsgICAgICAgICAgICAgICAgICogU2V0IHRoZSBGVFNfRE9O VENIRElSIGZsYWcgc28gdGhhdCB3aGVuIHdlIGxvZ2ljYWxseSBjaGFuZ2UKLSsgICAgICAgICAg ICAgICAgICogZGlyZWN0b3JpZXMgYmFjayB0byB0aGUgcGFyZW50IHdlIGRvbid0IGRvIGEgY2hk aXIuCi0rICAgICAgICAgICAgICAgICAqCi0rICAgICAgICAgICAgICAgICAqIElmIGhhdmVuJ3Qg cmVhZCBkbyBzby4gIElmIHRoZSByZWFkIGZhaWxzLCBmdHNfYnVpbGQgc2V0cwotKyAgICAgICAg ICAgICAgICAgKiBGVFNfU1RPUCBvciB0aGUgZnRzX2luZm8gZmllbGQgb2YgdGhlIG5vZGUuCi0r ICAgICAgICAgICAgICAgICAqLwotKyAgICAgICAgICAgICAgICBpZiAoc3AtPmZ0c19jaGlsZCAh PSBOVUxMKSB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0c19zYWZlX2NoYW5nZWRp cihzcCwgcCwgLTEsIHAtPmZ0c19hY2NwYXRoKSkgewotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcC0+ZnRzX2Vycm5vID0gZXJybm87Ci0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwLT5mdHNfZmxhZ3MgfD0gRlRTX0RPTlRDSERJUjsKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZvciAocCA9IHNwLT5mdHNfY2hpbGQ7IHAgIT0gTlVMTDsKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHAtPmZ0c19saW5rKQotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfYWNjcGF0aCA9Ci0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfcGFyZW50LT5m dHNfYWNjcGF0aDsKLSsgICAgICAgICAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoKHNwLT5mdHNfY2hpbGQgPSBmdHNfYnVpbGQoc3AsIEJSRUFEKSkgPT0gTlVM TCkgewotKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJU1NFVChGVFNfU1RPUCkpCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotKyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIElmIGZ0c19idWlsZCdzIGNhbGwgdG8gZnRzX3NhZmVfY2hhbmdlZGly IGZhaWxlZAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgd2FzIG5vdCBh YmxlIHRvIGZjaGRpciBpbnRvIGEKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXJl Y3RvcnksIHRlbGwgdGhlIGNhbGxlci4gICovCi0rICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHAtPmZ0c19lcnJubyAmJiBwLT5mdHNfaW5mbyAhPSBGVFNfRE5SKQotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcC0+ZnRzX2luZm8gPSBGVFNfRVJSOwotKyAgICAgICAgICAgICAg ICAgICAgICAgIExFQVZFX0RJUiAoc3AsIHAsICIyIik7Ci0rICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIChwKTsKLSsgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgICBwID0g c3AtPmZ0c19jaGlsZDsKLSsgICAgICAgICAgICAgICAgc3AtPmZ0c19jaGlsZCA9IE5VTEw7Ci0r ICAgICAgICAgICAgICAgIGdvdG8gbmFtZTsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIC8qIE1v dmUgdG8gdGhlIG5leHQgbm9kZSBvbiB0aGlzIGxldmVsLiAqLwotK25leHQ6IDsKLSsgICAgICAg IHJlZ2lzdGVyIEZUU0VOVFJZICp0bXAgPSBwOwotKwotKyAgICAgICAgLyogSWYgd2UgaGF2ZSBz byBtYW55IGRpcmVjdG9yeSBlbnRyaWVzIHRoYXQgd2UncmUgcmVhZGluZyB0aGVtCi0rICAgICAg ICAgICBpbiBiYXRjaGVzLCBhbmQgd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50 IGJhdGNoLAotKyAgICAgICAgICAgcmVhZCBpbiBhIG5ldyBiYXRjaC4gICovCi0rICAgICAgICBp ZiAocC0+ZnRzX2xpbmsgPT0gTlVMTCAmJiBGVFNFTlRfRElSUChwLT5mdHNfcGFyZW50KSkKLSsg ICAgICAgICAgewotKyAgICAgICAgICAgIHAgPSB0bXAtPmZ0c19wYXJlbnQ7Ci0rICAgICAgICAg ICAgc3AtPmZ0c19jdXIgPSBwOwotKyAgICAgICAgICAgIHNwLT5mdHNfcGF0aFtwLT5mdHNfcGF0 aGxlbl0gPSAnXDAnOwotKwotKyAgICAgICAgICAgIGlmICgocCA9IGZ0c19idWlsZCAoc3AsIEJS RUFEKSkgPT0gTlVMTCkKLSsgICAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgICAgaWYgKElT U0VUKEZUU19TVE9QKSkKLSsgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgICAg ICAgICAgICAgZ290byBjZF9kb3RfZG90OwotKyAgICAgICAgICAgICAgfQotKwotKyAgICAgICAg ICAgIGZyZWUoRlRTRU5UX1dSQVBQRVIodG1wKSk7Ci0rICAgICAgICAgICAgZ290byBuYW1lOwot KyAgICAgICAgICB9Ci0rCi0rICAgICAgICBpZiAoKHAgPSBwLT5mdHNfbGluaykgIT0gTlVMTCkg ewotKyAgICAgICAgICAgICAgICBzcC0+ZnRzX2N1ciA9IHA7Ci0rICAgICAgICAgICAgICAgIGZy ZWUoRlRTRU5UX1dSQVBQRVIodG1wKSk7Ci0rCi0rICAgICAgICAgICAgICAgIC8qCi0rICAgICAg ICAgICAgICAgICAqIElmIHJlYWNoZWQgdGhlIHRvcCwgcmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBk aXJlY3RvcnkgKG9yCi0rICAgICAgICAgICAgICAgICAqIHRoZSByb290IG9mIHRoZSB0cmVlKSwg YW5kIGxvYWQgdGhlIGZpbGUgbmFtZXMgZm9yIHRoZSBuZXh0Ci0rICAgICAgICAgICAgICAgICAq IHJvb3QuCi0rICAgICAgICAgICAgICAgICAqLwotKyAgICAgICAgICAgICAgICBpZiAocC0+ZnRz X2xldmVsID09IEZUU19ST09UTEVWRUwpIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICBpZiAo cmVzdG9yZV9pbml0aWFsX2N3ZChzcCkpIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNFVChGVFNfU1RPUCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gKE5VTEwpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgICAg ICAgICAgICBmcmVlX2RpcihzcCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgZnRzX2xvYWQo c3AsIHApOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIHNldHVwX2RpcihzcCkpIHsK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfZGlyKHNwKTsKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0rICAgICAgICAgICAgICAg ICAgICAgICAgfQotKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gY2hlY2tfZm9yX2RpcjsK LSsgICAgICAgICAgICAgICAgfQotKwotKyAgICAgICAgICAgICAgICAvKgotKyAgICAgICAgICAg ICAgICAgKiBVc2VyIG1heSBoYXZlIGNhbGxlZCBmdHNfc2V0IG9uIHRoZSBub2RlLiAgSWYgc2tp cHBlZCwKLSsgICAgICAgICAgICAgICAgICogaWdub3JlLiAgSWYgZm9sbG93ZWQsIGdldCBhIGZp bGUgZGVzY3JpcHRvciBzbyB3ZSBjYW4KLSsgICAgICAgICAgICAgICAgICogZ2V0IGJhY2sgaWYg bmVjZXNzYXJ5LgotKyAgICAgICAgICAgICAgICAgKi8KLSsgICAgICAgICAgICAgICAgaWYgKHAt PmZ0c19pbnN0ciA9PSBGVFNfU0tJUCkKLSsgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5l eHQ7Ci0rICAgICAgICAgICAgICAgIGlmIChwLT5mdHNfaW5zdHIgPT0gRlRTX0ZPTExPVykgewot KyAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIHAsIHRy dWUpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLT5mdHNfaW5mbyA9PSBGVFNfRCAm JiAhSVNTRVQoRlRTX05PQ0hESVIpKSB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoKHAtPmZ0c19zeW1mZCA9IGRpcm9wZW4gKHNwLCAiLiIpKSA8IDApIHsKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2Vycm5vID0gZXJybm87Ci0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19pbmZvID0gRlRT X0VSUjsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfZmxhZ3MgfD0gRlRTX1NZTUZP TExPVzsKLSsgICAgICAgICAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgICAgICAgICAg ICAgcC0+ZnRzX2luc3RyID0gRlRTX05PSU5TVFI7Ci0rICAgICAgICAgICAgICAgIH0KLSsKLStu YW1lOiAgICAgICAgICAgewotKyAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNoYXIgKnQgPSBz cC0+ZnRzX3BhdGggKyBOQVBQRU5EKHAtPmZ0c19wYXJlbnQpOwotKyAgICAgICAgICAgICAgICAg ICp0KysgPSAnLyc7Ci0rICAgICAgICAgICAgICAgICAgbWVtbW92ZSh0LCBwLT5mdHNfbmFtZSwg cC0+ZnRzX25hbWVsZW4gKyAxKTsKLSsgICAgICAgICAgICAgICAgfQotK2NoZWNrX2Zvcl9kaXI6 Ci0rICAgICAgICAgICAgICAgIHNwLT5mdHNfY3VyID0gcDsKLSsgICAgICAgICAgICAgICAgaWYg KHAtPmZ0c19pbmZvID09IEZUU19OU09LKQotKyAgICAgICAgICAgICAgICAgIHsKLSsgICAgICAg ICAgICAgICAgICAgIGlmIChwLT5mdHNfc3RhdHAtPnN0X3NpemUgPT0gRlRTX1NUQVRfUkVRVUlS RUQpCi0rICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIHAs IGZhbHNlKTsKLSsgICAgICAgICAgICAgICAgICAgIGVsc2UKLSsgICAgICAgICAgICAgICAgICAg ICAgZnRzX2Fzc2VydCAocC0+ZnRzX3N0YXRwLT5zdF9zaXplID09IEZUU19OT19TVEFUX1JFUVVJ UkVEKTsKLSsgICAgICAgICAgICAgICAgICB9Ci0rCi0rICAgICAgICAgICAgICAgIC8qIFNraXAg ZmlsZXMgd2l0aCBkaWZmZXJlbnQgZGV2aWNlIG51bWJlcnMgd2hlbiBGVFNfTU9VTlQKLSsgICAg ICAgICAgICAgICAgICAgaXMgc2V0LiAgKi8KLSsgICAgICAgICAgICAgICAgaWYgKElTU0VUIChG VFNfTU9VTlQpICYmIHAtPmZ0c19pbmZvICE9IEZUU19OUyAmJgotKyAgICAgICAgICAgICAgICAg ICAgcC0+ZnRzX2xldmVsICE9IEZUU19ST09UTEVWRUwgJiYKLSsgICAgICAgICAgICAgICAgICAg IHAtPmZ0c19zdGF0cC0+c3RfZGV2ICE9IHNwLT5mdHNfZGV2KQotKyAgICAgICAgICAgICAgICAg ICAgICBnb3RvIG5leHQ7Ci0rCi0rICAgICAgICAgICAgICAgIGlmIChwLT5mdHNfaW5mbyA9PSBG VFNfRCkKLSsgICAgICAgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICAgICAgICAvKiBOb3cg dGhhdCBQLT5mdHNfc3RhdHAgaXMgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCwgaWYKLSsgICAgICAg ICAgICAgICAgICAgICAgIHRoaXMgaXMgYSBjb21tYW5kLWxpbmUgZGlyZWN0b3J5LCByZWNvcmQg aXRzIGRldmljZQotKyAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyLCB0byBiZSB1c2VkIGZv ciBGVFNfTU9VTlQgYW5kIEZUU19YREVWLiAgKi8KLSsgICAgICAgICAgICAgICAgICAgIGlmIChw LT5mdHNfbGV2ZWwgPT0gRlRTX1JPT1RMRVZFTCkKLSsgICAgICAgICAgICAgICAgICAgICAgc3At PmZ0c19kZXYgPSBwLT5mdHNfc3RhdHAtPnN0X2RldjsKLSsgICAgICAgICAgICAgICAgICAgIERw cmludGYgKCgiICBlbnRlcmluZzogJXNcbiIsIHAtPmZ0c19wYXRoKSk7Ci0rICAgICAgICAgICAg ICAgICAgICBpZiAoISBlbnRlcl9kaXIgKHNwLCBwKSkKLSsgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIE5VTEw7Ci0rICAgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgICByZXR1 cm4gcDsKLSsgICAgICAgIH0KLStjZF9kb3RfZG90OgotKwotKyAgICAgICAgLyogTW92ZSB1cCB0 byB0aGUgcGFyZW50IG5vZGUuICovCi0rICAgICAgICBwID0gdG1wLT5mdHNfcGFyZW50OwotKyAg ICAgICAgc3AtPmZ0c19jdXIgPSBwOwotKyAgICAgICAgZnJlZShGVFNFTlRfV1JBUFBFUih0bXAp KTsKLSsKLSsgICAgICAgIGlmIChwLT5mdHNfbGV2ZWwgPT0gRlRTX1JPT1RQQVJFTlRMRVZFTCkg ewotKyAgICAgICAgICAgICAgICAvKgotKyAgICAgICAgICAgICAgICAgKiBEb25lOyBmcmVlIGV2 ZXJ5dGhpbmcgdXAgYW5kIHNldCBlcnJubyB0byAwIHNvIHRoZSB1c2VyCi0rICAgICAgICAgICAg ICAgICAqIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVycm9yIGFuZCBFT0YuCi0rICAgICAgICAg ICAgICAgICAqLwotKyAgICAgICAgICAgICAgICBmcmVlKEZUU0VOVF9XUkFQUEVSKHApKTsKLSsg ICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKDApOwotKyAgICAgICAgICAgICAgICByZXR1cm4g KHNwLT5mdHNfY3VyID0gTlVMTCk7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBmdHNfYXNzZXJ0 IChwLT5mdHNfaW5mbyAhPSBGVFNfTlNPSyk7Ci0rCi0rICAgICAgICAvKiBOVUwgdGVybWluYXRl IHRoZSBmaWxlIG5hbWUuICAqLwotKyAgICAgICAgc3AtPmZ0c19wYXRoW3AtPmZ0c19wYXRobGVu XSA9ICdcMCc7Ci0rCi0rICAgICAgICAvKgotKyAgICAgICAgICogUmV0dXJuIHRvIHRoZSBwYXJl bnQgZGlyZWN0b3J5LiAgSWYgYXQgYSByb290IG5vZGUsIHJlc3RvcmUKLSsgICAgICAgICAqIHRo ZSBpbml0aWFsIHdvcmtpbmcgZGlyZWN0b3J5LiAgSWYgd2UgY2FtZSB0aHJvdWdoIGEgc3ltbGlu aywKLSsgICAgICAgICAqIGdvIGJhY2sgdGhyb3VnaCB0aGUgZmlsZSBkZXNjcmlwdG9yLiAgT3Ro ZXJ3aXNlLCBtb3ZlIHVwCi0rICAgICAgICAgKiBvbmUgbGV2ZWwsIHZpYSAiLi4iLgotKyAgICAg ICAgICovCi0rICAgICAgICBpZiAocC0+ZnRzX2xldmVsID09IEZUU19ST09UTEVWRUwpIHsKLSsg ICAgICAgICAgICAgICAgaWYgKHJlc3RvcmVfaW5pdGlhbF9jd2Qoc3ApKSB7Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgcC0+ZnRzX2Vycm5vID0gZXJybm87Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgU0VUKEZUU19TVE9QKTsKLSsgICAgICAgICAgICAgICAgfQotKyAgICAgICAgfSBlbHNl IGlmIChwLT5mdHNfZmxhZ3MgJiBGVFNfU1lNRk9MTE9XKSB7Ci0rICAgICAgICAgICAgICAgIGlm IChGQ0hESVIoc3AsIHAtPmZ0c19zeW1mZCkpIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICBw LT5mdHNfZXJybm8gPSBlcnJubzsKLSsgICAgICAgICAgICAgICAgICAgICAgICBTRVQoRlRTX1NU T1ApOwotKyAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgICAgICh2b2lkKWNsb3NlKHAt PmZ0c19zeW1mZCk7Ci0rICAgICAgICB9IGVsc2UgaWYgKCEocC0+ZnRzX2ZsYWdzICYgRlRTX0RP TlRDSERJUikgJiYKLSsgICAgICAgICAgICAgICAgICAgZnRzX3NhZmVfY2hhbmdlZGlyKHNwLCBw LT5mdHNfcGFyZW50LCAtMSwgIi4uIikpIHsKLSsgICAgICAgICAgICAgICAgcC0+ZnRzX2Vycm5v ID0gZXJybm87Ci0rICAgICAgICAgICAgICAgIFNFVChGVFNfU1RPUCk7Ci0rICAgICAgICB9Ci0r Ci0rICAgICAgICAvKiBJZiB0aGUgZGlyZWN0b3J5IGNhdXNlcyBhIGN5Y2xlLCBwcmVzZXJ2ZSB0 aGUgRlRTX0RDIGZsYWcgYW5kIGtlZXAKLSsgICAgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIGRl di9pbm8gcGFpciBpbiB0aGUgaGFzaCB0YWJsZS4gIEl0IGlzIGdvaW5nIHRvIGJlCi0rICAgICAg ICAgICByZW1vdmVkIHdoZW4gbGVhdmluZyB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5LiAgKi8KLSsg ICAgICAgIGlmIChwLT5mdHNfaW5mbyAhPSBGVFNfREMpIHsKLSsgICAgICAgICAgICAgICAgcC0+ ZnRzX2luZm8gPSBwLT5mdHNfZXJybm8gPyBGVFNfRVJSIDogRlRTX0RQOwotKyAgICAgICAgICAg ICAgICBpZiAocC0+ZnRzX2Vycm5vID09IDApCi0rICAgICAgICAgICAgICAgICAgICAgICAgTEVB VkVfRElSIChzcCwgcCwgIjMiKTsKLSsgICAgICAgIH0KLSsgICAgICAgIHJldHVybiBJU1NFVChG VFNfU1RPUCkgPyBOVUxMIDogcDsKLSt9Ci0rCi0rLyoKLSsgKiBGdHNfc2V0IHRha2VzIHRoZSBz dHJlYW0gYXMgYW4gYXJndW1lbnQgYWx0aG91Z2ggaXQncyBub3QgdXNlZCBpbiB0aGlzCi0rICog aW1wbGVtZW50YXRpb247IGl0IHdvdWxkIGJlIG5lY2Vzc2FyeSBpZiBhbnlvbmUgd2FudGVkIHRv IGFkZCBnbG9iYWwKLSsgKiBzZW1hbnRpY3MgdG8gZnRzIHVzaW5nIGZ0c19zZXQuICBBbiBlcnJv ciByZXR1cm4gaXMgYWxsb3dlZCBmb3Igc2ltaWxhcgotKyAqIHJlYXNvbnMuCi0rICovCi0rLyog QVJHU1VTRUQgKi8KLStpbnQKLStGVFNfU0VUIChfR0xfVU5VU0VEIEZUU09CSiAqc3AsIEZUU0VO VFJZICpwLCBpbnQgaW5zdHIpCi0rewotKyAgICAgICAgaWYgKGluc3RyICE9IDAgJiYgaW5zdHIg IT0gRlRTX0FHQUlOICYmIGluc3RyICE9IEZUU19GT0xMT1cgJiYKLSsgICAgICAgICAgICBpbnN0 ciAhPSBGVFNfTk9JTlNUUiAmJiBpbnN0ciAhPSBGVFNfU0tJUCkgewotKyAgICAgICAgICAgICAg ICBfX3NldF9lcnJubyAoRUlOVkFMKTsKLSsgICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKLSsg ICAgICAgIH0KLSsgICAgICAgIHAtPmZ0c19pbnN0ciA9IGluc3RyOwotKyAgICAgICAgcmV0dXJu ICgwKTsKLSt9Ci0rCi0rRlRTRU5UUlkgKgotK0ZUU19DSElMRFJFTiAoRlRTT0JKICpzcCwgaW50 IGluc3RyKQotK3sKLSsgICAgICAgIGlmIChpbnN0ciAhPSAwICYmIGluc3RyICE9IEZUU19OQU1F T05MWSkgewotKyAgICAgICAgICAgICAgICBfX3NldF9lcnJubyAoRUlOVkFMKTsKLSsgICAgICAg ICAgICAgICAgcmV0dXJuIChOVUxMKTsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIC8qIFNldCBj dXJyZW50IG5vZGUgcG9pbnRlci4gKi8KLSsgICAgICAgIHJlZ2lzdGVyIEZUU0VOVFJZICpwID0g c3AtPmZ0c19jdXI7Ci0rCi0rICAgICAgICAvKgotKyAgICAgICAgICogRXJybm8gc2V0IHRvIDAg c28gdXNlciBjYW4gZGlzdGluZ3Vpc2ggZW1wdHkgZGlyZWN0b3J5IGZyb20KLSsgICAgICAgICAq IGFuIGVycm9yLgotKyAgICAgICAgICovCi0rICAgICAgICBfX3NldF9lcnJubyAoMCk7Ci0rCi0r ICAgICAgICAvKiBGYXRhbCBlcnJvcnMgc3RvcCBoZXJlLiAqLwotKyAgICAgICAgaWYgKElTU0VU KEZUU19TVE9QKSkKLSsgICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKLSsKLSsgICAgICAg IC8qIFJldHVybiBsb2dpY2FsIGhpZXJhcmNoeSBvZiB1c2VyJ3MgYXJndW1lbnRzLiAqLwotKyAg ICAgICAgaWYgKHAtPmZ0c19pbmZvID09IEZUU19JTklUKQotKyAgICAgICAgICAgICAgICByZXR1 cm4gKHAtPmZ0c19saW5rKTsKLSsKLSsgICAgICAgIC8qCi0rICAgICAgICAgKiBJZiBub3QgYSBk aXJlY3RvcnkgYmVpbmcgdmlzaXRlZCBpbiBwcmUtb3JkZXIsIHN0b3AgaGVyZS4gIENvdWxkCi0r ICAgICAgICAgKiBhbGxvdyBGVFNfRE5SLCBhc3N1bWluZyB0aGUgdXNlciBoYXMgZml4ZWQgdGhl IHByb2JsZW0sIGJ1dCB0aGUKLSsgICAgICAgICAqIHNhbWUgZWZmZWN0IGlzIGF2YWlsYWJsZSB3 aXRoIEZUU19BR0FJTi4KLSsgICAgICAgICAqLwotKyAgICAgICAgaWYgKHAtPmZ0c19pbmZvICE9 IEZUU19EIC8qICYmIHAtPmZ0c19pbmZvICE9IEZUU19ETlIgKi8pCi0rICAgICAgICAgICAgICAg IHJldHVybiAoTlVMTCk7Ci0rCi0rICAgICAgICAvKiBGcmVlIHVwIGFueSBwcmV2aW91cyBjaGls ZCBsaXN0LiAqLwotKyAgICAgICAgaWYgKHNwLT5mdHNfY2hpbGQgIT0gTlVMTCkKLSsgICAgICAg ICAgICAgICAgZnRzX2xmcmVlKHNwLT5mdHNfY2hpbGQpOwotKwotKyAgICAgICAgaWYgKGluc3Ry ID09IEZUU19OQU1FT05MWSkgewotKyAgICAgICAgICAgICAgICBTRVQoRlRTX05BTUVPTkxZKTsK LSsgICAgICAgICAgICAgICAgaW5zdHIgPSBCTkFNRVM7Ci0rICAgICAgICB9IGVsc2UKLSsgICAg ICAgICAgICAgICAgaW5zdHIgPSBCQ0hJTEQ7Ci0rCi0rICAgICAgICAvKgotKyAgICAgICAgICog SWYgdXNpbmcgY2hkaXIgb24gYSByZWxhdGl2ZSBmaWxlIG5hbWUgYW5kIGNhbGxlZCBCRUZPUkUg ZnRzX3JlYWQKLSsgICAgICAgICAqIGRvZXMgaXRzIGNoZGlyIHRvIHRoZSByb290IG9mIGEgdHJh dmVyc2FsLCB3ZSBjYW4gbG9zZSAtLSB3ZSBuZWVkIHRvCi0rICAgICAgICAgKiBjaGRpciBpbnRv IHRoZSBzdWJkaXJlY3RvcnksIGFuZCB3ZSBkb24ndCBrbm93IHdoZXJlIHRoZSBjdXJyZW50Ci0r ICAgICAgICAgKiBkaXJlY3RvcnkgaXMsIHNvIHdlIGNhbid0IGdldCBiYWNrIHNvIHRoYXQgdGhl IHVwY29taW5nIGNoZGlyIGJ5Ci0rICAgICAgICAgKiBmdHNfcmVhZCB3aWxsIHdvcmsuCi0rICAg ICAgICAgKi8KLSsgICAgICAgIGlmIChwLT5mdHNfbGV2ZWwgIT0gRlRTX1JPT1RMRVZFTCB8fCBw LT5mdHNfYWNjcGF0aFswXSA9PSAnLycgfHwKLSsgICAgICAgICAgICBJU1NFVChGVFNfTk9DSERJ UikpCi0rICAgICAgICAgICAgICAgIHJldHVybiAoc3AtPmZ0c19jaGlsZCA9IGZ0c19idWlsZChz cCwgaW5zdHIpKTsKLSsKLSsgICAgICAgIGludCBmZCA9IGRpcm9wZW4gKHNwLCAiLiIpOwotKyAg ICAgICAgaWYgKGZkIDwgMCkKLSsgICAgICAgICAgICAgICAgcmV0dXJuIChzcC0+ZnRzX2NoaWxk ID0gTlVMTCk7Ci0rICAgICAgICBzcC0+ZnRzX2NoaWxkID0gZnRzX2J1aWxkKHNwLCBpbnN0cik7 Ci0rICAgICAgICBpZiAoSVNTRVQoRlRTX0NXREZEKSkKLSsgICAgICAgICAgewotKyAgICAgICAg ICAgIGN3ZF9hZHZhbmNlX2ZkIChzcCwgZmQsIHRydWUpOwotKyAgICAgICAgICB9Ci0rICAgICAg ICBlbHNlCi0rICAgICAgICAgIHsKLSsgICAgICAgICAgICBpZiAoZmNoZGlyKGZkKSkKLSsgICAg ICAgICAgICAgIHsKLSsgICAgICAgICAgICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87Ci0r ICAgICAgICAgICAgICAgIGNsb3NlIChmZCk7Ci0rICAgICAgICAgICAgICAgIF9fc2V0X2Vycm5v IChzYXZlZF9lcnJubyk7Ci0rICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotKyAgICAgICAg ICAgICAgfQotKyAgICAgICAgICAgIGNsb3NlIChmZCk7Ci0rICAgICAgICAgIH0KLSsgICAgICAg IHJldHVybiAoc3AtPmZ0c19jaGlsZCk7Ci0rfQotKwotKy8qIEEgY29tcGFyaXNvbiBmdW5jdGlv biB0byBzb3J0IG9uIGluY3JlYXNpbmcgaW5vZGUgbnVtYmVyLgotKyAgIEZvciBzb21lIGZpbGUg c3lzdGVtIHR5cGVzLCBzb3J0aW5nIGVpdGhlciB3YXkgbWFrZXMgYSBodWdlCi0rICAgcGVyZm9y bWFuY2UgZGlmZmVyZW5jZSBmb3IgYSBkaXJlY3Rvcnkgd2l0aCB2ZXJ5IG1hbnkgZW50cmllcywK LSsgICBidXQgc29ydGluZyBvbiBpbmNyZWFzaW5nIHZhbHVlcyBpcyBzbGlnaHRseSBiZXR0ZXIg dGhhbiBzb3J0aW5nCi0rICAgb24gZGVjcmVhc2luZyB2YWx1ZXMuICBUaGUgZGlmZmVyZW5jZSBp cyBpbiB0aGUgNSUgcmFuZ2UuICAqLwotK3N0YXRpYyBpbnQKLStmdHNfY29tcGFyZV9pbm8gKEZU U0VOVFJZIGNvbnN0ICoqYSwgRlRTRU5UUlkgY29uc3QgKipiKQotK3sKLSsgIHJldHVybiBfR0xf Q01QIChhWzBdLT5mdHNfc3RhdHAtPnN0X2lubywgYlswXS0+ZnRzX3N0YXRwLT5zdF9pbm8pOwot K30KLSsKLSsvKiBNYXAgdGhlIGRpcmVudC5kX3R5cGUgdmFsdWUsIERUWVBFLCB0byB0aGUgY29y cmVzcG9uZGluZyBzdGF0LnN0X21vZGUKLSsgICBTX0lGKiBiaXQgYW5kIHNldCBTVC5zdF9tb2Rl LCB0aHVzIGNsZWFyaW5nIGFsbCBvdGhlciBiaXRzIGluIHRoYXQgZmllbGQuICAqLwotK3N0YXRp YyB2b2lkCi0rc2V0X3N0YXRfdHlwZSAoc3RydWN0IFNUUlVDVF9TVEFUICpzdCwgdW5zaWduZWQg aW50IGR0eXBlKQotK3sKLSsgIG1vZGVfdCB0eXBlOwotKyAgc3dpdGNoIChkdHlwZSkKLSsgICAg ewotKyAgICBjYXNlIERUX0JMSzoKLSsgICAgICB0eXBlID0gU19JRkJMSzsKLSsgICAgICBicmVh azsKLSsgICAgY2FzZSBEVF9DSFI6Ci0rICAgICAgdHlwZSA9IFNfSUZDSFI7Ci0rICAgICAgYnJl YWs7Ci0rICAgIGNhc2UgRFRfRElSOgotKyAgICAgIHR5cGUgPSBTX0lGRElSOwotKyAgICAgIGJy ZWFrOwotKyAgICBjYXNlIERUX0ZJRk86Ci0rICAgICAgdHlwZSA9IFNfSUZJRk87Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgRFRfTE5LOgotKyAgICAgIHR5cGUgPSBTX0lGTE5LOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIERUX1JFRzoKLSsgICAgICB0eXBlID0gU19JRlJFRzsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSBEVF9TT0NLOgotKyAgICAgIHR5cGUgPSBTX0lGU09DSzsKLSsg ICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICB0eXBlID0gMDsKLSsgICAgfQotKyAg c3QtPnN0X21vZGUgPSB0eXBlOwotK30KLSsKLSsjZGVmaW5lIGNsb3NlZGlyX2FuZF9jbGVhcihk aXJwKSAgICAgICAgICAgICAgICBcCi0rICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICBjbG9zZWRpciAoZGlycCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgZGlycCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IHdoaWxlICgwKQotKwotKyNkZWZpbmUgZnRzX29wZW5kaXIoZmlsZSwgUGRpcl9mZCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBPUEVORElSQVQoKCEgSVNTRVQoRlRT X05PQ0hESVIpICYmIElTU0VUKEZUU19DV0RGRCkgICAgIFwKLSsgICAgICAgICAgICAgICAgICAg PyBzcC0+ZnRzX2N3ZF9mZCA6IEFUX0ZEQ1dEKSwgICAgICAgICAgICAgICAgXAotKyAgICAgICAg ICAgICAgICAgIGZpbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgICAgICAgICAgICAgKCgoSVNTRVQoRlRTX1BIWVNJQ0FMKSAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAmJiAhIChJU1NFVChGVFNfQ09NRk9M TE9XKSAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1 ci0+ZnRzX2xldmVsID09IEZUU19ST09UTEVWRUwpKSBcCi0rICAgICAgICAgICAgICAgICAgICA/ IE9fTk9GT0xMT1cgOiAwKSksICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAg ICAgICAgICBQZGlyX2ZkKQotKwotKy8qCi0rICogVGhpcyBpcyB0aGUgdHJpY2t5IHBhcnQgLS0g ZG8gbm90IGNhc3VhbGx5IGNoYW5nZSAqYW55dGhpbmcqIGluIGhlcmUuICBUaGUKLSsgKiBpZGVh IGlzIHRvIGJ1aWxkIHRoZSBsaW5rZWQgbGlzdCBvZiBlbnRyaWVzIHRoYXQgYXJlIHVzZWQgYnkg ZnRzX2NoaWxkcmVuCi0rICogYW5kIGZ0c19yZWFkLiAgVGhlcmUgYXJlIGxvdHMgb2Ygc3BlY2lh bCBjYXNlcy4KLSsgKgotKyAqIFRoZSByZWFsIHNsb3dkb3duIGluIHdhbGtpbmcgdGhlIHRyZWUg aXMgdGhlIHN0YXQgY2FsbHMuICBJZiBGVFNfTk9TVEFUIGlzCi0rICogc2V0IGFuZCBpdCdzIGEg cGh5c2ljYWwgd2FsayAoc28gdGhhdCBzeW1ib2xpYyBsaW5rcyBjYW4ndCBiZSBkaXJlY3Rvcmll cyksCi0rICogd2UgY2FuIGRvIHRoaW5ncyBxdWlja2x5LiAgRmlyc3QsIGlmIGl0J3MgYSA0LjRC U0QgZmlsZSBzeXN0ZW0sIHRoZSB0eXBlCi0rICogb2YgdGhlIGZpbGUgaXMgaW4gdGhlIGRpcmVj dG9yeSBlbnRyeS4gIE90aGVyd2lzZSwgd2UgYXNzdW1lIHRoYXQgdGhlIG51bWJlcgotKyAqIG9m IHN1YmRpcmVjdG9yaWVzIGluIGEgbm9kZSBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGxpbmtz IHRvIHRoZSBwYXJlbnQuCi0rICogVGhlIGZvcm1lciBza2lwcyBhbGwgc3RhdCBjYWxscy4gIFRo ZSBsYXR0ZXIgc2tpcHMgc3RhdCBjYWxscyBpbiBhbnkgbGVhZgotKyAqIGRpcmVjdG9yaWVzIGFu ZCBmb3IgYW55IGZpbGVzIGFmdGVyIHRoZSBzdWJkaXJlY3RvcmllcyBpbiB0aGUgZGlyZWN0b3J5 IGhhdmUKLSsgKiBiZWVuIGZvdW5kLCBjdXR0aW5nIHRoZSBzdGF0IGNhbGxzIGJ5IGFib3V0IDIv My4KLSsgKi8KLStzdGF0aWMgRlRTRU5UUlkgKgotK2ludGVybmFsX2Z1bmN0aW9uCi0rZnRzX2J1 aWxkIChyZWdpc3RlciBGVFNPQkogKnNwLCBpbnQgdHlwZSkKLSt7Ci0rICAgICAgICBGVFNFTlRS WSAqY3VyID0gc3AtPmZ0c19jdXI7Ci0rICAgICAgICBib29sIGNvbnRpbnVlX3JlYWRkaXIgPSAh IUZUU0VOVF9ESVJQKGN1cik7Ci0rCi0rICAgICAgICAvKiBXaGVuIGN1ci0+ZnRzX2RpcnAgaXMg bm9uLU5VTEwsIHRoYXQgbWVhbnMgd2Ugc2hvdWxkCi0rICAgICAgICAgICBjb250aW51ZSBjYWxs aW5nIHJlYWRkaXIgb24gdGhhdCBleGlzdGluZyBESVIqIHBvaW50ZXIKLSsgICAgICAgICAgIHJh dGhlciB0aGFuIG9wZW5pbmcgYSBuZXcgb25lLiAgKi8KLSsgICAgICAgIGludCBkaXJfZmQ7Ci0r ICAgICAgICBpZiAoY29udGludWVfcmVhZGRpcikKLSsgICAgICAgICAgewotKyAgICAgICAgICAg IERJUiAqZHAgPSBGVFNFTlRfRElSUChjdXIpOwotKyAgICAgICAgICAgIGRpcl9mZCA9IGRpcmZk IChkcCk7Ci0rICAgICAgICAgICAgaWYgKGRpcl9mZCA8IDApCi0rICAgICAgICAgICAgICB7Ci0r ICAgICAgICAgICAgICAgIGludCBkaXJmZF9lcnJubyA9IGVycm5vOwotKyAgICAgICAgICAgICAg ICBjbG9zZWRpcl9hbmRfY2xlYXIgKEZUU0VOVF9ESVJQKGN1cikpOwotKyAgICAgICAgICAgICAg ICBpZiAodHlwZSA9PSBCUkVBRCkKLSsgICAgICAgICAgICAgICAgICB7Ci0rICAgICAgICAgICAg ICAgICAgICBjdXItPmZ0c19pbmZvID0gRlRTX0ROUjsKLSsgICAgICAgICAgICAgICAgICAgIGN1 ci0+ZnRzX2Vycm5vID0gZGlyZmRfZXJybm87Ci0rICAgICAgICAgICAgICAgICAgfQotKyAgICAg ICAgICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgfQot KyAgICAgICAgZWxzZQotKyAgICAgICAgICB7Ci0rICAgICAgICAgICAgLyogT3BlbiB0aGUgZGly ZWN0b3J5IGZvciByZWFkaW5nLiAgSWYgdGhpcyBmYWlscywgd2UncmUgZG9uZS4KLSsgICAgICAg ICAgICAgICBJZiBiZWluZyBjYWxsZWQgZnJvbSBmdHNfcmVhZCwgc2V0IHRoZSBmdHNfaW5mbyBm aWVsZC4gKi8KLSsgICAgICAgICAgICBpZiAoKEZUU0VOVF9ESVJQIChjdXIpID0gZnRzX29wZW5k aXIoY3VyLT5mdHNfYWNjcGF0aCwgJmRpcl9mZCkpID09IE5VTEwpCi0rICAgICAgICAgICAgICB7 Ci0rICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEJSRUFEKQotKyAgICAgICAgICAgICAgICAg IHsKLSsgICAgICAgICAgICAgICAgICAgIGN1ci0+ZnRzX2luZm8gPSBGVFNfRE5SOwotKyAgICAg ICAgICAgICAgICAgICAgY3VyLT5mdHNfZXJybm8gPSBlcnJubzsKLSsgICAgICAgICAgICAgICAg ICB9Ci0rICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotKyAgICAgICAgICAgICAgfQotKyAg ICAgICAgICAgIC8qIFJhdGhlciB0aGFuIGNhbGxpbmcgZnRzX3N0YXQgZm9yIGVhY2ggYW5kIGV2 ZXJ5IGVudHJ5IGVuY291bnRlcmVkCi0rICAgICAgICAgICAgICAgaW4gdGhlIHJlYWRkaXIgbG9v cCAoYmVsb3cpLCBzdGF0IGVhY2ggZGlyZWN0b3J5IG9ubHkgcmlnaHQgYWZ0ZXIKLSsgICAgICAg ICAgICAgICBvcGVuaW5nIGl0LiAgKi8KLSsgICAgICAgICAgICBib29sIHN0YXRfb3B0aW1pemF0 aW9uID0gY3VyLT5mdHNfaW5mbyA9PSBGVFNfTlNPSzsKLSsKLSsgICAgICAgICAgICBpZiAoc3Rh dF9vcHRpbWl6YXRpb24KLSsgICAgICAgICAgICAgICAgLyogQWxzbyByZWFkIHRoZSBzdGF0IGlu Zm8gYWdhaW4gYWZ0ZXIgb3BlbmluZyBhIGRpcmVjdG9yeSB0bwotKyAgICAgICAgICAgICAgICAg ICByZXZlYWwgZXZlbnR1YWwgY2hhbmdlcyBjYXVzZWQgYnkgYSBzdWJtb3VudCB0cmlnZ2VyZWQg YnkKLSsgICAgICAgICAgICAgICAgICAgdGhlIHRyYXZlcnNhbC4gIEJ1dCBkbyBpdCBvbmx5IGZv ciB1dGlsaXRpZXMgd2hpY2ggdXNlCi0rICAgICAgICAgICAgICAgICAgIEZUU19USUdIVF9DWUNM RV9DSEVDSy4gIFRoZXJlZm9yZSwgb25seSBmaW5kIGFuZCBkdQotKyAgICAgICAgICAgICAgICAg ICBiZW5lZml0L3N1ZmZlciBmcm9tIHRoaXMgZmVhdHVyZSBmb3Igbm93LiAgKi8KLSsgICAgICAg ICAgICAgICAgfHwgSVNTRVQgKEZUU19USUdIVF9DWUNMRV9DSEVDSykpCi0rICAgICAgICAgICAg ICB7Ci0rICAgICAgICAgICAgICAgIGlmICghc3RhdF9vcHRpbWl6YXRpb24pCi0rICAgICAgICAg ICAgICAgICAgTEVBVkVfRElSIChzcCwgY3VyLCAiNCIpOwotKyAgICAgICAgICAgICAgICBpZiAo RlNUQVQgKGRpcl9mZCwgY3VyLT5mdHNfc3RhdHApICE9IDApCi0rICAgICAgICAgICAgICAgICAg ewotKyAgICAgICAgICAgICAgICAgICAgaW50IGZzdGF0X2Vycm5vID0gZXJybm87Ci0rICAgICAg ICAgICAgICAgICAgICBjbG9zZWRpcl9hbmRfY2xlYXIgKEZUU0VOVF9ESVJQKGN1cikpOwotKyAg ICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gQlJFQUQpCi0rICAgICAgICAgICAgICAgICAg ICAgIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICBjdXItPmZ0c19lcnJubyA9IGZzdGF0X2Vy cm5vOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGN1ci0+ZnRzX2luZm8gPSBGVFNfTlM7Ci0r ICAgICAgICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgICAgICAgIF9fc2V0X2Vycm5v IChmc3RhdF9lcnJubyk7Ci0rICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAg ICAgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgICAgIGlmIChzdGF0X29wdGltaXphdGlvbikK LSsgICAgICAgICAgICAgICAgICBjdXItPmZ0c19pbmZvID0gRlRTX0Q7Ci0rICAgICAgICAgICAg ICAgIGVsc2UgaWYgKCEgZW50ZXJfZGlyIChzcCwgY3VyKSkKLSsgICAgICAgICAgICAgICAgICB7 Ci0rICAgICAgICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKLSsgICAgICAg ICAgICAgICAgICAgIGNsb3NlZGlyX2FuZF9jbGVhciAoRlRTRU5UX0RJUlAoY3VyKSk7Ci0rICAg ICAgICAgICAgICAgICAgICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOwotKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAg ICAgfQotKyAgICAgICAgICB9Ci0rCi0rICAgICAgICAvKiBNYXhpbXVtIG51bWJlciBvZiByZWFk ZGlyIGVudHJpZXMgdG8gcmVhZCBhdCBvbmUgdGltZS4gIFRoaXMKLSsgICAgICAgICAgIGxpbWl0 YXRpb24gaXMgdG8gYXZvaWQgcmVhZGluZyBtaWxsaW9ucyBvZiBlbnRyaWVzIGludG8gbWVtb3J5 Ci0rICAgICAgICAgICBhdCBvbmNlLiAgV2hlbiBhbiBmdHNfY29tcGFyIGZ1bmN0aW9uIGlzIHNw ZWNpZmllZCwgd2UgaGF2ZSBubwotKyAgICAgICAgICAgY2hvaWNlOiB3ZSBtdXN0IHJlYWQgYWxs IGVudHJpZXMgaW50byBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgdGhhdAotKyAgICAgICAgICAgZnVu Y3Rpb24uICBCdXQgd2hlbiBubyBzdWNoIGZ1bmN0aW9uIGlzIHNwZWNpZmllZCwgd2UgY2FuIHJl YWQKLSsgICAgICAgICAgIGVudHJpZXMgaW4gYmF0Y2hlcyB0aGF0IGFyZSBsYXJnZSBlbm91Z2gg dG8gaGVscCB1cyB3aXRoIGlub2RlLQotKyAgICAgICAgICAgc29ydGluZywgeWV0IG5vdCBzbyBs YXJnZSB0aGF0IHdlIHJpc2sgZXhoYXVzdGluZyBtZW1vcnkuICAqLwotKyAgICAgICAgc2l6ZV90 IG1heF9lbnRyaWVzID0gc3AtPmZ0c19jb21wYXIgPyBTSVpFX01BWCA6IEZUU19NQVhfUkVBRERJ Ul9FTlRSSUVTOwotKwotKyAgICAgICAgLyoKLSsgICAgICAgICAqIElmIHdlJ3JlIGdvaW5nIHRv IG5lZWQgdG8gc3RhdCBhbnl0aGluZyBvciB3ZSB3YW50IHRvIGRlc2NlbmQKLSsgICAgICAgICAq IGFuZCBzdGF5IGluIHRoZSBkaXJlY3RvcnksIGNoZGlyLiAgSWYgdGhpcyBmYWlscyB3ZSBrZWVw IGdvaW5nLAotKyAgICAgICAgICogYnV0IHNldCBhIGZsYWcgc28gd2UgZG9uJ3QgY2hkaXIgYWZ0 ZXIgdGhlIHBvc3Qtb3JkZXIgdmlzaXQuCi0rICAgICAgICAgKiBXZSB3b24ndCBiZSBhYmxlIHRv IHN0YXQgYW55dGhpbmcsIGJ1dCB3ZSBjYW4gc3RpbGwgcmV0dXJuIHRoZQotKyAgICAgICAgICog bmFtZXMgdGhlbXNlbHZlcy4gIE5vdGUsIHRoYXQgc2luY2UgZnRzX3JlYWQgd29uJ3QgYmUgYWJs ZSB0bwotKyAgICAgICAgICogY2hkaXIgaW50byB0aGUgZGlyZWN0b3J5LCBpdCB3aWxsIGhhdmUg dG8gcmV0dXJuIGRpZmZlcmVudCBmaWxlCi0rICAgICAgICAgKiBuYW1lcyB0aGFuIGJlZm9yZSwg aS5lLiAiYS9iIiBpbnN0ZWFkIG9mICJiIi4gIFNpbmNlIHRoZSBub2RlCi0rICAgICAgICAgKiBo YXMgYWxyZWFkeSBiZWVuIHZpc2l0ZWQgaW4gcHJlLW9yZGVyLCBoYXZlIHRvIHdhaXQgdW50aWwg dGhlCi0rICAgICAgICAgKiBwb3N0LW9yZGVyIHZpc2l0IHRvIHJldHVybiB0aGUgZXJyb3IuICBU aGVyZSBpcyBhIHNwZWNpYWwgY2FzZQotKyAgICAgICAgICogaGVyZSwgaWYgdGhlcmUgd2FzIG5v dGhpbmcgdG8gc3RhdCB0aGVuIGl0J3Mgbm90IGFuIGVycm9yIHRvCi0rICAgICAgICAgKiBub3Qg YmUgYWJsZSB0byBzdGF0LiAgVGhpcyBpcyBhbGwgZmFpcmx5IG5hc3R5LiAgSWYgYSBwcm9ncmFt Ci0rICAgICAgICAgKiBuZWVkZWQgc29ydGVkIGVudHJpZXMgb3Igc3RhdCBpbmZvcm1hdGlvbiwg dGhleSBoYWQgYmV0dGVyIGJlCi0rICAgICAgICAgKiBjaGVja2luZyBGVFNfTlMgb24gdGhlIHJl dHVybmVkIG5vZGVzLgotKyAgICAgICAgICovCi0rICAgICAgICBib29sIGRlc2NlbmQ7Ci0rICAg ICAgICBpZiAoY29udGludWVfcmVhZGRpcikKLSsgICAgICAgICAgewotKyAgICAgICAgICAgIC8q IFdoZW4gcmVzdW1pbmcgYSBzaG9ydCByZWFkZGlyIHJ1biwgd2UgYWxyZWFkeSBoYXZlCi0rICAg ICAgICAgICAgICAgdGhlIHJlcXVpcmVkIGRpcnAgYW5kIGRpcl9mZC4gICovCi0rICAgICAgICAg ICAgZGVzY2VuZCA9IHRydWU7Ci0rICAgICAgICAgIH0KLSsgICAgICAgIGVsc2UKLSsgICAgICAg ICAgewotKyAgICAgICAgICAgIC8qIFRyeSB0byBkZXNjZW5kIHVubGVzcyBpdCBpcyBhIG5hbWVz LW9ubHkgZnRzX2NoaWxkcmVuLAotKyAgICAgICAgICAgICAgIG9yIHRoZSBkaXJlY3RvcnkgaXMg a25vd24gdG8gbGFjayBzdWJkaXJlY3Rvcmllcy4gICovCi0rICAgICAgICAgICAgZGVzY2VuZCA9 ICh0eXBlICE9IEJOQU1FUwotKyAgICAgICAgICAgICAgICAgICAgICAgJiYgISAoSVNTRVQgKEZU U19OT1NUQVQpICYmIElTU0VUIChGVFNfUEhZU0lDQUwpCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiAhIElTU0VUIChGVFNfU0VFRE9UKQotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgY3VyLT5mdHNfc3RhdHAtPnN0X25saW5rID09IE1JTl9ESVJfTkxJTksKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIChsZWFmX29wdGltaXphdGlvbiAoY3VyLCBkaXJf ZmQpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gTk9fTEVBRl9PUFRJTUla QVRJT04pKSk7Ci0rICAgICAgICAgICAgaWYgKGRlc2NlbmQgfHwgdHlwZSA9PSBCUkVBRCkKLSsg ICAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgICAgaWYgKElTU0VUKEZUU19DV0RGRCkpCi0r ICAgICAgICAgICAgICAgICAgZGlyX2ZkID0gZmNudGwgKGRpcl9mZCwgRl9EVVBGRF9DTE9FWEVD LCBTVERFUlJfRklMRU5PICsgMSk7Ci0rICAgICAgICAgICAgICAgIGlmIChkaXJfZmQgPCAwIHx8 IGZ0c19zYWZlX2NoYW5nZWRpcihzcCwgY3VyLCBkaXJfZmQsIE5VTEwpKSB7Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGRlc2NlbmQgJiYgdHlwZSA9PSBCUkVBRCkKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGN1ci0+ZnRzX2Vycm5vID0gZXJybm87Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgY3VyLT5mdHNfZmxhZ3MgfD0gRlRTX0RPTlRDSERJUjsKLSsgICAgICAg ICAgICAgICAgICAgICAgICBkZXNjZW5kID0gZmFsc2U7Ci0rICAgICAgICAgICAgICAgICAgICAg ICAgY2xvc2VkaXJfYW5kX2NsZWFyKEZUU0VOVF9ESVJQKGN1cikpOwotKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChJU1NFVChGVFNfQ1dERkQpICYmIDAgPD0gZGlyX2ZkKQotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2UgKGRpcl9mZCk7Ci0rICAgICAgICAgICAgICAg ICAgICAgICAgRlRTRU5UX0RJUlAoY3VyKSA9IE5VTEw7Ci0rICAgICAgICAgICAgICAgIH0gZWxz ZQotKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NlbmQgPSB0cnVlOwotKyAgICAgICAgICAg ICAgfQotKyAgICAgICAgICB9Ci0rCi0rICAgICAgICAvKgotKyAgICAgICAgICogRmlndXJlIG91 dCB0aGUgbWF4IGZpbGUgbmFtZSBsZW5ndGggdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZQotKyAg ICAgICAgICogY3VycmVudCBidWZmZXIgLS0gdGhlIGlubmVyIGxvb3AgYWxsb2NhdGVzIG1vcmUg c3BhY2UgYXMgbmVjZXNzYXJ5LgotKyAgICAgICAgICogV2UgcmVhbGx5IHdvdWxkbid0IGhhdmUg dG8gZG8gdGhlIG1heGxlbiBjYWxjdWxhdGlvbnMgaGVyZSwgd2UKLSsgICAgICAgICAqIGNvdWxk IGRvIHRoZW0gaW4gZnRzX3JlYWQgYmVmb3JlIHJldHVybmluZyB0aGUgbmFtZSwgYnV0IGl0J3Mg YQotKyAgICAgICAgICogbG90IGVhc2llciBoZXJlIHNpbmNlIHRoZSBsZW5ndGggaXMgcGFydCBv ZiB0aGUgZGlyZW50IHN0cnVjdHVyZS4KLSsgICAgICAgICAqCi0rICAgICAgICAgKiBJZiBub3Qg Y2hhbmdpbmcgZGlyZWN0b3JpZXMgc2V0IGEgcG9pbnRlciBzbyB0aGF0IGNhbiBqdXN0IGFwcGVu ZAotKyAgICAgICAgICogZWFjaCBuZXcgY29tcG9uZW50IGludG8gdGhlIGZpbGUgbmFtZS4KLSsg ICAgICAgICAqLwotKyAgICAgICAgc2l6ZV90IGxlbiA9IE5BUFBFTkQoY3VyKTsKLSsgICAgICAg IGNoYXIgKmNwOwotKyAgICAgICAgaWYgKElTU0VUKEZUU19OT0NIRElSKSkgewotKyAgICAgICAg ICAgICAgICBjcCA9IHNwLT5mdHNfcGF0aCArIGxlbjsKLSsgICAgICAgICAgICAgICAgKmNwKysg PSAnLyc7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgICAgICAvKiBHQ0MsIHlvdSdy ZSB0b28gdmVyYm9zZS4gKi8KLSsgICAgICAgICAgICAgICAgY3AgPSBOVUxMOwotKyAgICAgICAg fQotKyAgICAgICAgbGVuKys7Ci0rICAgICAgICBzaXplX3QgbWF4bGVuID0gc3AtPmZ0c19wYXRo bGVuIC0gbGVuOwotKwotKyAgICAgICAgcHRyZGlmZl90IGxldmVsID0gY3VyLT5mdHNfbGV2ZWwg KyAxOwotKwotKyAgICAgICAgLyogUmVhZCB0aGUgZGlyZWN0b3J5LCBhdHRhY2hpbmcgZWFjaCBl bnRyeSB0byB0aGUgImxpbmsiIHBvaW50ZXIuICovCi0rICAgICAgICBib29sIGRvYWRqdXN0ID0g ZmFsc2U7Ci0rICAgICAgICByZWdpc3RlciBGVFNFTlRSWSAqaGVhZCA9IE5VTEw7Ci0rICAgICAg ICBGVFNFTlRSWSAqdGFpbCA9IE5VTEw7Ci0rICAgICAgICByZWdpc3RlciBzaXplX3Qgbml0ZW1z ID0gMDsKLSsgICAgICAgIGJvb2wgc29ydF9ieV9pbm9kZSA9IGZhbHNlOwotKyAgICAgICAgd2hp bGUgKEZUU0VOVF9ESVJQKGN1cikpIHsKLSsgICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKDAp OwotKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50ICpkcCA9IHJlYWRkaXIoRlRTRU5UX0RJ UlAoY3VyKSk7Ci0rICAgICAgICAgICAgICAgIGlmIChkcCA9PSBOVUxMKSB7Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgLyogU29tZSByZWFkZGlyKClzIGRvIG5vdCBhYnNvcmIgRU5PRU5UIChk aXIKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkIGJ1dCBvcGVuKS4gIFRoaXMg YnVnIHdhcyBmaXhlZCBpbgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIDIuMyAo MjAwMikuICAqLwotKyNpZiAhICgyIDwgX19HTElCQ19fICsgKDMgPD0gX19HTElCQ19NSU5PUl9f KSkKLSsgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UKQotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSAwOwotKyNlbmRpZgotKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChlcnJubykgewotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3VyLT5mdHNfZXJybm8gPSBlcnJubzsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIElmIHdlJ3ZlIG5vdCByZWFkIGFueSBpdGVtcyB5ZXQsIHRyZWF0Ci0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGUgZXJyb3IgYXMgaWYgd2UgY2FuJ3QgYWNjZXNzIHRo ZSBkaXIuICAqLwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyLT5mdHNfaW5m byA9IChjb250aW51ZV9yZWFkZGlyIHx8IG5pdGVtcykKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA/IEZUU19FUlIgOiBGVFNfRE5SOwotKyAgICAgICAg ICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcl9hbmRf Y2xlYXIoRlRTRU5UX0RJUlAoY3VyKSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0rICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgICAgaWYgKCFJU1NFVChGVFNfU0VF RE9UKSAmJiBJU0RPVChkcC0+ZF9uYW1lKSkKLSsgICAgICAgICAgICAgICAgICAgICAgICBjb250 aW51ZTsKLSsKLSsgICAgICAgICAgICAgICAgc2l6ZV90IGRfbmFtZWxlbiA9IF9EX0VYQUNUX05B TUxFTiAoZHApOwotKyAgICAgICAgICAgICAgICByZWdpc3RlciBGVFNFTlRSWSAqcCA9IGZ0c19h bGxvYyAoc3AsIGRwLT5kX25hbWUsIGRfbmFtZWxlbik7Ci0rICAgICAgICAgICAgICAgIGlmICgh cCkKLSsgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG1lbTE7Ci0rICAgICAgICAgICAgICAg IGlmIChkX25hbWVsZW4gPj0gbWF4bGVuKSB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgLyog aW5jbHVkZSBzcGFjZSBmb3IgTlVMICovCi0rICAgICAgICAgICAgICAgICAgICAgICAgdWludHB0 cl90IG9sZGFkZHIgPSAodWludHB0cl90KSBzcC0+ZnRzX3BhdGg7Ci0rICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCEgZnRzX3BhbGxvYyhzcCwgZF9uYW1lbGVuICsgbGVuICsgMSkpIHsKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKiBObyBtb3JlIG1lbW9yeS4gIFNhdmUKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqIGVycm5vLCBmcmVlIHVwIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBhbmQg dGhlCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdHJ1Y3R1cmVzIGFscmVh ZHkgYWxsb2NhdGVkLgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0rbWVt MTogOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNhdmVkX2Vycm5vID0g ZXJybm87Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKEZUU0VOVF9XUkFQ UEVSKHApKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0c19sZnJlZShoZWFk KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZGlyX2FuZF9jbGVhcihG VFNFTlRfRElSUChjdXIpKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ci0+ ZnRzX2luZm8gPSBGVFNfRVJSOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VU KEZUU19TVE9QKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2V0X2Vycm5v IChzYXZlZF9lcnJubyk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g KE5VTEwpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBEaWQgcmVhbGxvYygpIGNoYW5nZSB0aGUgcG9pbnRlcj8gKi8KLSsgICAgICAgICAg ICAgICAgICAgICAgICBpZiAob2xkYWRkciAhPSAodWludHB0cl90KSBzcC0+ZnRzX3BhdGgpIHsK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvYWRqdXN0ID0gdHJ1ZTsKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJU1NFVChGVFNfTk9DSERJUikpCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwID0gc3AtPmZ0c19wYXRoICsg bGVuOwotKyAgICAgICAgICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgICAgICAgICAg ICBtYXhsZW4gPSBzcC0+ZnRzX3BhdGhsZW4gLSBsZW47Ci0rICAgICAgICAgICAgICAgIH0KLSsK LSsgICAgICAgICAgICAgICAgc2l6ZV90IG5ld19sZW4gPSBsZW4gKyBkX25hbWVsZW47Ci0rICAg ICAgICAgICAgICAgIGlmIChuZXdfbGVuIDwgbGVuKSB7Ci0rICAgICAgICAgICAgICAgICAgICAg ICAgLyoKLSsgICAgICAgICAgICAgICAgICAgICAgICAgKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQg dGhhdCB3ZSB3b3VsZCBlbmQgdXAKLSsgICAgICAgICAgICAgICAgICAgICAgICAgKiB3aXRoIGEg ZmlsZSBuYW1lIGxvbmdlciB0aGFuIFNJWkVfTUFYLCBmcmVlIHVwCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICogdGhlIGN1cnJlbnQgc3RydWN0dXJlIGFuZCB0aGUgc3RydWN0dXJlcyBhbHJl YWR5Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICogYWxsb2NhdGVkLCB0aGVuIGVycm9yIG91 dCB3aXRoIEVOQU1FVE9PTE9ORy4KLSsgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSsgICAg ICAgICAgICAgICAgICAgICAgICBmcmVlKEZUU0VOVF9XUkFQUEVSKHApKTsKLSsgICAgICAgICAg ICAgICAgICAgICAgICBmdHNfbGZyZWUoaGVhZCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAg Y2xvc2VkaXJfYW5kX2NsZWFyKEZUU0VOVF9ESVJQKGN1cikpOwotKyAgICAgICAgICAgICAgICAg ICAgICAgIGN1ci0+ZnRzX2luZm8gPSBGVFNfRVJSOwotKyAgICAgICAgICAgICAgICAgICAgICAg IFNFVChGVFNfU1RPUCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKEVO QU1FVE9PTE9ORyk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKLSsg ICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgICBwLT5mdHNfbGV2ZWwgPSBsZXZlbDsK LSsgICAgICAgICAgICAgICAgcC0+ZnRzX3BhcmVudCA9IHNwLT5mdHNfY3VyOwotKyAgICAgICAg ICAgICAgICBwLT5mdHNfcGF0aGxlbiA9IG5ld19sZW47Ci0rCi0rICAgICAgICAgICAgICAgIC8q IFN0b3JlIGRpcmVudC5kX2lubywgaW4gY2FzZSB3ZSBuZWVkIHRvIHNvcnQKLSsgICAgICAgICAg ICAgICAgICAgZW50cmllcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLiAgKi8KLSsgICAgICAgICAg ICAgICAgcC0+ZnRzX3N0YXRwLT5zdF9pbm8gPSBEX0lOTyAoZHApOwotKwotKyAgICAgICAgICAg ICAgICAvKiBCdWlsZCBhIGZpbGUgbmFtZSBmb3IgZnRzX3N0YXQgdG8gc3RhdC4gKi8KLSsgICAg ICAgICAgICAgICAgaWYgKElTU0VUKEZUU19OT0NIRElSKSkgewotKyAgICAgICAgICAgICAgICAg ICAgICAgIHAtPmZ0c19hY2NwYXRoID0gcC0+ZnRzX3BhdGg7Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgbWVtbW92ZShjcCwgcC0+ZnRzX25hbWUsIHAtPmZ0c19uYW1lbGVuICsgMSk7Ci0rICAg ICAgICAgICAgICAgIH0gZWxzZQotKyAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19hY2Nw YXRoID0gcC0+ZnRzX25hbWU7Ci0rCi0rICAgICAgICAgICAgICAgIGlmIChzcC0+ZnRzX2NvbXBh ciA9PSBOVUxMIHx8IElTU0VUKEZUU19ERUZFUl9TVEFUKSkgewotKyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlY29yZCB3aGF0IGZ0c19yZWFkIHdpbGwgaGF2ZSB0byBkbyB3aXRoIHRoaXMK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS4gSW4gbWFueSBjYXNlcywgaXQgd2ls bCBzaW1wbHkgZnRzX3N0YXQgaXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHdl IGNhbiB0YWtlIGFkdmFudGFnZSBvZiBhbnkgZF90eXBlIGluZm9ybWF0aW9uCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG8gb3B0aW1pemUgYXdheSB0aGUgdW5uZWNlc3Nhcnkgc3RhdCBj YWxscy4gIEkuZS4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgRlRTX05PU1RBVCBp cyBpbiBlZmZlY3QsIHdlIGRvbid0IG5lZWQgZGV2aWNlCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnVtYmVycyB1bmNvbmRpdGlvbmFsbHkgKEZUU19NT1VOVCkgYW5kIHdlJ3JlIG5vdAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBzeW1saW5rcyAoRlRTX1BIWVNJ Q0FMKSBhbmQgZF90eXBlCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGVzIHRo aXMgaXMgKm5vdCogYSBkaXJlY3RvcnksIHRoZW4gd2Ugd29uJ3QKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICBoYXZlIHRvIHN0YXQgaXQgIGF0IGFsbC4gIElmIGl0ICppcyogYSBkaXJlY3Rv cnksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiAoY3VycmVudGx5KSB3ZSBzdGF0 IGl0IHJlZ2FyZGxlc3MsIGluIG9yZGVyIHRvCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2V0IGRldmljZSBhbmQgaW5vZGUgbnVtYmVycy4gIFNvbWUgZGF5IHdlIG1pZ2h0Ci0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemUgdGhhdCBhd2F5LCB0b28sIGZvciBkaXJlY3Rv cmllcyB3aGVyZQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfaW5vIGlzIGtub3duIHRv IGJlIHZhbGlkLiAgKi8KLSsgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNraXBfc3RhdCA9 IChJU1NFVChGVFNfTk9TVEFUKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmIERUX0lTX0tOT1dOKGRwKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmICEgRFRfTVVTVF9CRShkcCwgRFRfRElSKQotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChJU1NFVChGVFNfUEhZU0lDQUwpCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICEgRFRfTVVTVF9C RShkcCwgRFRfTE5LKSkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiAhIElTU0VUKEZUU19NT1VOVCkpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0 c19pbmZvID0gRlRTX05TT0s7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvcGFnYXRl IGRpcmVudC5kX3R5cGUgaW5mb3JtYXRpb24gYmFjawotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRvIGNhbGxlciwgd2hlbiBwb3NzaWJsZS4gICovCi0rICAgICAgICAgICAgICAgICAgICAg ICAgc2V0X3N0YXRfdHlwZSAocC0+ZnRzX3N0YXRwLCBEX1RZUEUgKGRwKSk7Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgZnRzX3NldF9zdGF0X3JlcXVpcmVkKHAsICFza2lwX3N0YXQpOwotKyAg ICAgICAgICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19p bmZvID0gZnRzX3N0YXQoc3AsIHAsIGZhbHNlKTsKLSsgICAgICAgICAgICAgICAgfQotKwotKyAg ICAgICAgICAgICAgICAvKiBXZSB3YWxrIGluIGRpcmVjdG9yeSBvcmRlciBzbyAibHMgLWYiIGRv ZXNuJ3QgZ2V0IHVwc2V0LiAqLwotKyAgICAgICAgICAgICAgICBwLT5mdHNfbGluayA9IE5VTEw7 Ci0rICAgICAgICAgICAgICAgIGlmIChoZWFkID09IE5VTEwpCi0rICAgICAgICAgICAgICAgICAg ICAgICAgaGVhZCA9IHRhaWwgPSBwOwotKyAgICAgICAgICAgICAgICBlbHNlIHsKLSsgICAgICAg ICAgICAgICAgICAgICAgICB0YWlsLT5mdHNfbGluayA9IHA7Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgdGFpbCA9IHA7Ci0rICAgICAgICAgICAgICAgIH0KLSsKLSsgICAgICAgICAgICAgICAg LyogSWYgdGhlcmUgYXJlIG1hbnkgZW50cmllcywgbm8gc29ydGluZyBmdW5jdGlvbiBoYXMgYmVl bgotKyAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIGFuZCB0aGlzIGZpbGUgc3lzdGVtIGlz IG9mIGEgdHlwZSB0aGF0IG1heSBiZQotKyAgICAgICAgICAgICAgICAgICBzbG93IHdpdGggYSBs YXJnZSBudW1iZXIgb2YgZW50cmllcywgYXJyYW5nZSB0byBzb3J0IHRoZQotKyAgICAgICAgICAg ICAgICAgICBkaXJlY3RvcnkgZW50cmllcyBvbiBpbmNyZWFzaW5nIGlub2RlIG51bWJlcnMuCi0r Ci0rICAgICAgICAgICAgICAgICAgIFRoZSBOSVRFTVMgY29tcGFyaXNvbiB1c2VzID09LCBub3Qg PiwgYmVjYXVzZSB0aGUgdGVzdAotKyAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBiZSB0cmll ZCBhdCBtb3N0IG9uY2Ugb25jZSwgYW5kIE5JVEVNUyB3aWxsIGV4Y2VlZAotKyAgICAgICAgICAg ICAgICAgICB0aGUgdGhyZXNob2xkIGFmdGVyIGl0IGlzIGluY3JlbWVudGVkIGJlbG93LiAgKi8K LSsgICAgICAgICAgICAgICAgaWYgKG5pdGVtcyA9PSBfRlRTX0lOT0RFX1NPUlRfRElSX0VOVFJJ RVNfVEhSRVNIT0xECi0rICAgICAgICAgICAgICAgICAgICAmJiAhc3AtPmZ0c19jb21wYXIpCi0r ICAgICAgICAgICAgICAgICAgc29ydF9ieV9pbm9kZSA9IGRpcmVudF9pbm9kZV9zb3J0X21heV9i ZV91c2VmdWwgKGN1ciwgZGlyX2ZkKTsKLSsKLSsgICAgICAgICAgICAgICAgKytuaXRlbXM7Ci0r ICAgICAgICAgICAgICAgIGlmIChtYXhfZW50cmllcyA8PSBuaXRlbXMpIHsKLSsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBXaGVuIHRoZXJlIGFyZSB0b28gbWFueSBkaXIgZW50cmllcywgbGVh dmUKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHNfZGlycCBvcGVuLCBzbyB0aGF0IGEg c3Vic2VxdWVudCBmdHNfcmVhZAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiB0YWtl IHVwIHdoZXJlIHdlIGxlYXZlIG9mZi4gICovCi0rICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0rICAgICAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsKLSsgICAgICAgIC8qCi0rICAg ICAgICAgKiBJZiByZWFsbG9jKCkgY2hhbmdlZCB0aGUgYWRkcmVzcyBvZiB0aGUgZmlsZSBuYW1l LCBhZGp1c3QgdGhlCi0rICAgICAgICAgKiBhZGRyZXNzZXMgZm9yIHRoZSByZXN0IG9mIHRoZSB0 cmVlIGFuZCB0aGUgZGlyIGxpc3QuCi0rICAgICAgICAgKi8KLSsgICAgICAgIGlmIChkb2FkanVz dCkKLSsgICAgICAgICAgICAgICAgZnRzX3BhZGp1c3Qoc3AsIGhlYWQpOwotKwotKyAgICAgICAg LyoKLSsgICAgICAgICAqIElmIG5vdCBjaGFuZ2luZyBkaXJlY3RvcmllcywgcmVzZXQgdGhlIGZp bGUgbmFtZSBiYWNrIHRvIG9yaWdpbmFsCi0rICAgICAgICAgKiBzdGF0ZS4KLSsgICAgICAgICAq LwotKyAgICAgICAgaWYgKElTU0VUKEZUU19OT0NIRElSKSkgewotKyAgICAgICAgICAgICAgICBp ZiAobGVuID09IHNwLT5mdHNfcGF0aGxlbiB8fCBuaXRlbXMgPT0gMCkKLSsgICAgICAgICAgICAg ICAgICAgICAgICAtLWNwOwotKyAgICAgICAgICAgICAgICAqY3AgPSAnXDAnOwotKyAgICAgICAg fQotKwotKyAgICAgICAgLyoKLSsgICAgICAgICAqIElmIGRlc2NlbmRlZCBhZnRlciBjYWxsZWQg ZnJvbSBmdHNfY2hpbGRyZW4gb3IgYWZ0ZXIgY2FsbGVkIGZyb20KLSsgICAgICAgICAqIGZ0c19y ZWFkIGFuZCBub3RoaW5nIGZvdW5kLCBnZXQgYmFjay4gIEF0IHRoZSByb290IGxldmVsIHdlIHVz ZQotKyAgICAgICAgICogdGhlIHNhdmVkIGZkOyBpZiBvbmUgb2YgZnRzX29wZW4oKSdzIGFyZ3Vt ZW50cyBpcyBhIHJlbGF0aXZlIG5hbWUKLSsgICAgICAgICAqIHRvIGFuIGVtcHR5IGRpcmVjdG9y eSwgd2Ugd2luZCB1cCBoZXJlIHdpdGggbm8gb3RoZXIgd2F5IGJhY2suICBJZgotKyAgICAgICAg ICogY2FuJ3QgZ2V0IGJhY2ssIHdlJ3JlIGRvbmUuCi0rICAgICAgICAgKi8KLSsgICAgICAgIGlm ICghY29udGludWVfcmVhZGRpciAmJiBkZXNjZW5kICYmICh0eXBlID09IEJDSElMRCB8fCAhbml0 ZW1zKSAmJgotKyAgICAgICAgICAgIChjdXItPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVMCi0r ICAgICAgICAgICAgID8gcmVzdG9yZV9pbml0aWFsX2N3ZChzcCkKLSsgICAgICAgICAgICAgOiBm dHNfc2FmZV9jaGFuZ2VkaXIoc3AsIGN1ci0+ZnRzX3BhcmVudCwgLTEsICIuLiIpKSkgewotKyAg ICAgICAgICAgICAgICBjdXItPmZ0c19pbmZvID0gRlRTX0VSUjsKLSsgICAgICAgICAgICAgICAg U0VUKEZUU19TVE9QKTsKLSsgICAgICAgICAgICAgICAgZnRzX2xmcmVlKGhlYWQpOwotKyAgICAg ICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotKyAgICAgICAgfQotKwotKyAgICAgICAgLyogSWYg ZGlkbid0IGZpbmQgYW55dGhpbmcsIHJldHVybiBOVUxMLiAqLwotKyAgICAgICAgaWYgKCFuaXRl bXMpIHsKLSsgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gQlJFQUQKLSsgICAgICAgICAgICAg ICAgICAgICYmIGN1ci0+ZnRzX2luZm8gIT0gRlRTX0ROUiAmJiBjdXItPmZ0c19pbmZvICE9IEZU U19FUlIpCi0rICAgICAgICAgICAgICAgICAgICAgICAgY3VyLT5mdHNfaW5mbyA9IEZUU19EUDsK LSsgICAgICAgICAgICAgICAgZnRzX2xmcmVlKGhlYWQpOwotKyAgICAgICAgICAgICAgICByZXR1 cm4gKE5VTEwpOwotKyAgICAgICAgfQotKwotKyAgICAgICAgaWYgKHNvcnRfYnlfaW5vZGUpIHsK LSsgICAgICAgICAgICAgICAgc3AtPmZ0c19jb21wYXIgPSBGVFNfQ09NUEFSX0NBU1QgKGZ0c19j b21wYXJlX2lubyk7Ci0rICAgICAgICAgICAgICAgIGhlYWQgPSBmdHNfc29ydCAoc3AsIGhlYWQs IG5pdGVtcyk7Ci0rICAgICAgICAgICAgICAgIHNwLT5mdHNfY29tcGFyID0gTlVMTDsKLSsgICAg ICAgIH0KLSsKLSsgICAgICAgIC8qIFNvcnQgdGhlIGVudHJpZXMuICovCi0rICAgICAgICBpZiAo c3AtPmZ0c19jb21wYXIgJiYgbml0ZW1zID4gMSkKLSsgICAgICAgICAgICAgICAgaGVhZCA9IGZ0 c19zb3J0KHNwLCBoZWFkLCBuaXRlbXMpOwotKyAgICAgICAgcmV0dXJuIChoZWFkKTsKLSt9Ci0r Ci0rI2lmIEdOVUxJQl9GVFNfREVCVUcKLSsKLStzdHJ1Y3QgZGV2aW5vIHsKLSsgIGludG1heF90 IGRldiwgaW5vOwotK307Ci0rI2RlZmluZSBQUklOVF9ERVZJTk8gIiglamQsJWpkKSIKLSsKLStz dGF0aWMgc3RydWN0IGRldmlubwotK2dldGRldmlubyAoaW50IGZkKQotK3sKLSsgIHN0cnVjdCBT VFJVQ1RfU1RBVCBzdDsKLSsgIHJldHVybiAoZmQgPT0gQVRfRkRDV0QKLSsgICAgICAgICAgPyAo c3RydWN0IGRldmlubykgeyAtMSwgMCB9Ci0rICAgICAgICAgIDogRlNUQVQgKGZkLCAmc3QpID09 IDAKLSsgICAgICAgICAgPyAoc3RydWN0IGRldmlubykgeyBzdC5zdF9kZXYsIHN0LnN0X2lubyB9 Ci0rICAgICAgICAgIDogKHN0cnVjdCBkZXZpbm8pIHsgLTEsIGVycm5vIH0pOwotK30KLSsKLSsv KiBXYWxrIC0+ZnRzX3BhcmVudCBsaW5rcyBzdGFydGluZyBhdCBFX0NVUlIsIHVudGlsIHRoZSBy b290IG9mIHRoZQotKyAgIGN1cnJlbnQgaGllcmFyY2h5LiAgVGhlcmUgc2hvdWxkIGJlIGEgZGly ZWN0b3J5IHdpdGggZGV2L2lub2RlCi0rICAgbWF0Y2hpbmcgdGhvc2Ugb2YgQUQuICBJZiBub3Qs IHByaW50IGEgbG90IG9mIGRpYWdub3N0aWNzLiAgKi8KLStzdGF0aWMgdm9pZAotK2ZpbmRfbWF0 Y2hpbmdfYW5jZXN0b3IgKEZUU0VOVFJZIGNvbnN0ICplX2N1cnIsIHN0cnVjdCBBY3RpdmVfZGly IGNvbnN0ICphZCkKLSt7Ci0rICBmb3IgKEZUU0VOVFJZIGNvbnN0ICplbnQgPSBlX2N1cnI7Ci0r ICAgICAgIGVudC0+ZnRzX2xldmVsID49IEZUU19ST09UTEVWRUw7Ci0rICAgICAgIGVudCA9IGVu dC0+ZnRzX3BhcmVudCkKLSsgICAgewotKyAgICAgIGlmIChhZC0+aW5vID09IGVudC0+ZnRzX3N0 YXRwLT5zdF9pbm8KLSsgICAgICAgICAgJiYgYWQtPmRldiA9PSBlbnQtPmZ0c19zdGF0cC0+c3Rf ZGV2KQotKyAgICAgICAgcmV0dXJuOwotKyAgICB9Ci0rICBwcmludGYgKCJFUlJPUjogdHJlZSBk aXIsICVzLCBub3QgYWN0aXZlXG4iLCBhZC0+ZnRzX2VudC0+ZnRzX2FjY3BhdGgpOwotKyAgcHJp bnRmICgiYWN0aXZlIGRpcnM6XG4iKTsKLSsgIGZvciAoRlRTRU5UUlkgY29uc3QgKmVudCA9IGVf Y3VycjsKLSsgICAgICAgZW50LT5mdHNfbGV2ZWwgPj0gRlRTX1JPT1RMRVZFTDsKLSsgICAgICAg ZW50ID0gZW50LT5mdHNfcGFyZW50KQotKyAgICBwcmludGYgKCIgICVzKCUiUFJJdU1BWCIvJSJQ Ukl1TUFYIikgdG8gJXMoJSJQUkl1TUFYIi8lIlBSSXVNQVgiKS4uLlxuIiwKLSsgICAgICAgICAg ICBhZC0+ZnRzX2VudC0+ZnRzX2FjY3BhdGgsCi0rICAgICAgICAgICAgKHVpbnRtYXhfdCkgYWQt PmRldiwKLSsgICAgICAgICAgICAodWludG1heF90KSBhZC0+aW5vLAotKyAgICAgICAgICAgIGVu dC0+ZnRzX2FjY3BhdGgsCi0rICAgICAgICAgICAgKHVpbnRtYXhfdCkgZW50LT5mdHNfc3RhdHAt PnN0X2RldiwKLSsgICAgICAgICAgICAodWludG1heF90KSBlbnQtPmZ0c19zdGF0cC0+c3RfaW5v KTsKLSt9Ci0rCi0rdm9pZAotK2Z0c19jcm9zc19jaGVjayAoRlRTT0JKIGNvbnN0ICpzcCkKLSt7 Ci0rICBpZiAoICEgSVNTRVQgKEZUU19USUdIVF9DWUNMRV9DSEVDSykpCi0rICAgIHJldHVybjsK LSsKLSsgIEZUU0VOVFJZIGNvbnN0ICplbnQgPSBzcC0+ZnRzX2N1cjsKLSsKLSsgIERwcmludGYg KCgiZnRzLWNyb3NzLWNoZWNrIGN1cj0lc1xuIiwgZW50LT5mdHNfcGF0aCkpOwotKyAgLyogTWFr ZSBzdXJlIGV2ZXJ5IHBhcmVudCBkaXIgaXMgaW4gdGhlIHRyZWUuICAqLwotKyAgZm9yIChGVFNF TlRSWSBjb25zdCAqdCA9IGVudC0+ZnRzX3BhcmVudDsKLSsgICAgICAgdC0+ZnRzX2xldmVsID49 IEZUU19ST09UTEVWRUw7Ci0rICAgICAgIHQgPSB0LT5mdHNfcGFyZW50KQotKyAgICB7Ci0rICAg ICAgc3RydWN0IEFjdGl2ZV9kaXIgYWQ7Ci0rICAgICAgYWQuaW5vID0gdC0+ZnRzX3N0YXRwLT5z dF9pbm87Ci0rICAgICAgYWQuZGV2ID0gdC0+ZnRzX3N0YXRwLT5zdF9kZXY7Ci0rICAgICAgaWYg KCAhIGhhc2hfbG9va3VwIChzcC0+ZnRzX2N5Y2xlLmh0LCAmYWQpKQotKyAgICAgICAgcHJpbnRm ICgiRVJST1I6IGFjdGl2ZSBkaXIsICVzLCBub3QgaW4gdHJlZVxuIiwgdC0+ZnRzX3BhdGgpOwot KyAgICB9Ci0rCi0rICAvKiBNYWtlIHN1cmUgZXZlcnkgZGlyIGluIHRoZSB0cmVlIGlzIGFuIGFj dGl2ZSBkaXIuCi0rICAgICBCdXQgRU5UIGlzIG5vdCBuZWNlc3NhcmlseSBhIGRpcmVjdG9yeS4g IElmIHNvLCBqdXN0IHNraXAgdGhpcyBwYXJ0LiAqLwotKyAgaWYgKGVudC0+ZnRzX3BhcmVudC0+ ZnRzX2xldmVsID49IEZUU19ST09UTEVWRUwKLSsgICAgICAmJiAoZW50LT5mdHNfaW5mbyA9PSBG VFNfRFAKLSsgICAgICAgICAgfHwgZW50LT5mdHNfaW5mbyA9PSBGVFNfRCkpCi0rICAgIGZvciAo c3RydWN0IEFjdGl2ZV9kaXIgKmFkID0gaGFzaF9nZXRfZmlyc3QgKHNwLT5mdHNfY3ljbGUuaHQp OwotKyAgICAgICAgIGFkICE9IE5VTEw7Ci0rICAgICAgICAgYWQgPSBoYXNoX2dldF9uZXh0IChz cC0+ZnRzX2N5Y2xlLmh0LCBhZCkpCi0rICAgICAgewotKyAgICAgICAgZmluZF9tYXRjaGluZ19h bmNlc3RvciAoZW50LCBhZCk7Ci0rICAgICAgfQotK30KLSsKLStzdGF0aWMgYm9vbAotK3NhbWVf ZmQgKGludCBmZDEsIGludCBmZDIpCi0rewotKyAgc3RydWN0IFNUUlVDVF9TVEFUIHNiMSwgc2Iy OwotKyAgcmV0dXJuIChGU1RBVCAoZmQxLCAmc2IxKSA9PSAwCi0rICAgICAgICAgICYmIEZTVEFU IChmZDIsICZzYjIpID09IDAKLSsgICAgICAgICAgJiYgcHNhbWVfaW5vZGUgKCZzYjEsICZzYjIp KTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQKLStmZF9yaW5nX3ByaW50IChGVFNPQkogY29uc3QgKnNw LCBGSUxFICpzdHJlYW0sIGNoYXIgY29uc3QgKm1zZykKLSt7Ci0rICBpZiAoIWZ0c19kZWJ1ZykK LSsgICAgcmV0dXJuOwotKyAgSV9yaW5nIGNvbnN0ICpmZF9yaW5nID0gJnNwLT5mdHNfZmRfcmlu ZzsKLSsgIHN0cnVjdCBkZXZpbm8gY3dkID0gZ2V0ZGV2aW5vIChzcC0+ZnRzX2N3ZF9mZCk7Ci0r ICBmcHJpbnRmIChzdHJlYW0sICI9PT0gJXMgPT09PT09PT09PSAiUFJJTlRfREVWSU5PIlxuIiwg bXNnLCBjd2QuZGV2LCBjd2QuaW5vKTsKLSsgIGlmIChpX3JpbmdfZW1wdHkgKGZkX3JpbmcpKQot KyAgICByZXR1cm47Ci0rCi0rICB1bnNpZ25lZCBpbnQgaSA9IGZkX3JpbmctPmlyX2Zyb250Owot KyAgd2hpbGUgKHRydWUpCi0rICAgIHsKLSsgICAgICBpbnQgZmQgPSBmZF9yaW5nLT5pcl9kYXRh W2ldOwotKyAgICAgIGlmIChmZCA8IDApCi0rICAgICAgICBmcHJpbnRmIChzdHJlYW0sICIldTog JWQ6XG4iLCBpLCBmZCk7Ci0rICAgICAgZWxzZQotKyAgICAgICAgewotKyAgICAgICAgICBzdHJ1 Y3QgZGV2aW5vIHdkID0gZ2V0ZGV2aW5vIChmZCk7Ci0rICAgICAgICAgIGZwcmludGYgKHN0cmVh bSwgIiV1OiAlZDogIlBSSU5UX0RFVklOTyJcbiIsIGksIGZkLCB3ZC5kZXYsIHdkLmlubyk7Ci0r ICAgICAgICB9Ci0rICAgICAgaWYgKGkgPT0gZmRfcmluZy0+aXJfYmFjaykKLSsgICAgICAgIGJy ZWFrOwotKyAgICAgIGkgPSAoaSArIElfUklOR19TSVpFIC0gMSkgJSBJX1JJTkdfU0laRTsKLSsg ICAgfQotK30KLSsKLSsvKiBFbnN1cmUgdGhhdCBlYWNoIGZpbGUgZGVzY3JpcHRvciBvbiB0aGUg ZmRfcmluZyBtYXRjaGVzIGEKLSsgICBwYXJlbnQsIGdyYW5kcGFyZW50LCBldGMuIG9mIHRoZSBj dXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgKi8KLStzdGF0aWMgdm9pZAotK2ZkX3JpbmdfY2hl Y2sgKEZUU09CSiBjb25zdCAqc3ApCi0rewotKyAgaWYgKCFmdHNfZGVidWcpCi0rICAgIHJldHVy bjsKLSsKLSsgIC8qIE1ha2UgYSB3cml0YWJsZSBjb3B5LiAgKi8KLSsgIElfcmluZyBmZF93ID0g c3AtPmZ0c19mZF9yaW5nOwotKwotKyAgaW50IGN3ZF9mZCA9IHNwLT5mdHNfY3dkX2ZkOwotKyAg Y3dkX2ZkID0gZmNudGwgKGN3ZF9mZCwgRl9EVVBGRF9DTE9FWEVDLCBTVERFUlJfRklMRU5PICsg MSk7Ci0rICBzdHJ1Y3QgZGV2aW5vIGRvdCA9IGdldGRldmlubyAoY3dkX2ZkKTsKLSsgIGZwcmlu dGYgKHN0ZGVyciwgIj09PT09IGNoZWNrID09PT09IGN3ZDogIlBSSU5UX0RFVklOTyJcbiIsCi0r ICAgICAgICAgICBkb3QuZGV2LCBkb3QuaW5vKTsKLSsgIHdoaWxlICggISBpX3JpbmdfZW1wdHkg KCZmZF93KSkKLSsgICAgewotKyAgICAgIGludCBmZCA9IGlfcmluZ19wb3AgKCZmZF93KTsKLSsg ICAgICBpZiAoMCA8PSBmZCkKLSsgICAgICAgIHsKLSsgICAgICAgICAgaW50IG9wZW5fZmxhZ3Mg PSBPX1NFQVJDSCB8IE9fQ0xPRVhFQzsKLSsgICAgICAgICAgaW50IHBhcmVudF9mZCA9IG9wZW5h dCAoY3dkX2ZkLCAiLi4iLCBvcGVuX2ZsYWdzKTsKLSsgICAgICAgICAgaWYgKHBhcmVudF9mZCA8 IDApCi0rICAgICAgICAgICAgewotKyAgICAgICAgICAgICAgLy8gV2Fybj8KLSsgICAgICAgICAg ICAgIGJyZWFrOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgICAgaWYgKCFzYW1lX2ZkIChmZCwg cGFyZW50X2ZkKSkKLSsgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aW5v IGN3ZCA9IGdldGRldmlubyAoZmQpOwotKyAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAi cmluZyAgOiAiUFJJTlRfREVWSU5PIlxuIiwgY3dkLmRldiwgY3dkLmlubyk7Ci0rICAgICAgICAg ICAgICBzdHJ1Y3QgZGV2aW5vIGMyID0gZ2V0ZGV2aW5vIChwYXJlbnRfZmQpOwotKyAgICAgICAg ICAgICAgZnByaW50ZiAoc3RkZXJyLCAicGFyZW50OiAiUFJJTlRfREVWSU5PIlxuIiwgYzIuZGV2 LCBjMi5pbm8pOwotKyAgICAgICAgICAgICAgZnRzX2Fzc2VydCAoMCk7Ci0rICAgICAgICAgICAg fQotKyAgICAgICAgICBjbG9zZSAoY3dkX2ZkKTsKLSsgICAgICAgICAgY3dkX2ZkID0gcGFyZW50 X2ZkOwotKyAgICAgICAgfQotKyAgICB9Ci0rICBjbG9zZSAoY3dkX2ZkKTsKLSt9Ci0rI2VuZGlm Ci0rCi0rc3RhdGljIHVuc2lnbmVkIHNob3J0IGludAotK2ludGVybmFsX2Z1bmN0aW9uCi0rZnRz X3N0YXQoRlRTT0JKICpzcCwgcmVnaXN0ZXIgRlRTRU5UUlkgKnAsIGJvb2wgZm9sbG93KQotK3sK LSsgICAgICAgIGlmIChJU1NFVCAoRlRTX0xPR0lDQUwpCi0rICAgICAgICAgICAgfHwgKElTU0VU IChGVFNfQ09NRk9MTE9XKSAmJiBwLT5mdHNfbGV2ZWwgPT0gRlRTX1JPT1RMRVZFTCkpCi0rICAg ICAgICAgICAgICAgIGZvbGxvdyA9IHRydWU7Ci0rCi0rICAgICAgICBzdHJ1Y3QgU1RSVUNUX1NU QVQgKnNicCA9IHAtPmZ0c19zdGF0cDsKLSsKLSsgICAgICAgIC8qCi0rICAgICAgICAgKiBJZiBk b2luZyBhIGxvZ2ljYWwgd2Fsaywgb3IgYXBwbGljYXRpb24gcmVxdWVzdGVkIEZUU19GT0xMT1cs IGRvCi0rICAgICAgICAgKiBhIHN0YXQoMikuICBJZiB0aGF0IGZhaWxzLCBjaGVjayBmb3IgYSBu b25leGlzdGVudCBzeW1saW5rLiAgSWYKLSsgICAgICAgICAqIGZhaWwsIHNldCB0aGUgZXJybm8g ZnJvbSB0aGUgc3RhdCBjYWxsLgotKyAgICAgICAgICovCi0rICAgICAgICBpbnQgZmxhZ3MgPSBm b2xsb3cgPyAwIDogQVRfU1lNTElOS19OT0ZPTExPVzsKLSsgICAgICAgIGlmIChGU1RBVEFUIChz cC0+ZnRzX2N3ZF9mZCwgcC0+ZnRzX2FjY3BhdGgsIHNicCwgZmxhZ3MpIDwgMCkKLSsgICAgICAg ICAgewotKyAgICAgICAgICAgIGlmIChmb2xsb3cgJiYgZXJybm8gPT0gRU5PRU5UCi0rICAgICAg ICAgICAgICAgICYmIDAgPD0gRlNUQVRBVCAoc3AtPmZ0c19jd2RfZmQsIHAtPmZ0c19hY2NwYXRo LCBzYnAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRfU1lNTElOS19OT0ZP TExPVykpCi0rICAgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICAgIF9fc2V0X2Vycm5vICgw KTsKLSsgICAgICAgICAgICAgICAgcmV0dXJuIEZUU19TTE5PTkU7Ci0rICAgICAgICAgICAgICB9 Ci0rCi0rICAgICAgICAgICAgcC0+ZnRzX2Vycm5vID0gZXJybm87Ci0rICAgICAgICAgICBtZW1z ZXQgKHNicCwgMCwgc2l6ZW9mICpzYnApOwotKyAgICAgICAgICAgIHJldHVybiBGVFNfTlM7Ci0r ICAgICAgICAgIH0KLSsKLSsgICAgICAgIGlmIChTX0lTRElSKHNicC0+c3RfbW9kZSkpIHsKLSsg ICAgICAgICAgICAgICAgaWYgKElTRE9UKHAtPmZ0c19uYW1lKSkgewotKyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENvbW1hbmQtbGluZSAiLiIgYW5kICIuLiIgYXJlIHJlYWwgZGlyZWN0b3Jp ZXMuICovCi0rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwLT5mdHNfbGV2ZWwgPT0g RlRTX1JPT1RMRVZFTCA/IEZUU19EIDogRlRTX0RPVCk7Ci0rICAgICAgICAgICAgICAgIH0KLSsK LSsgICAgICAgICAgICAgICAgcmV0dXJuIChGVFNfRCk7Ci0rICAgICAgICB9Ci0rICAgICAgICBp ZiAoU19JU0xOSyhzYnAtPnN0X21vZGUpKQotKyAgICAgICAgICAgICAgICByZXR1cm4gKEZUU19T TCk7Ci0rICAgICAgICBpZiAoU19JU1JFRyhzYnAtPnN0X21vZGUpKQotKyAgICAgICAgICAgICAg ICByZXR1cm4gKEZUU19GKTsKLSsgICAgICAgIHJldHVybiAoRlRTX0RFRkFVTFQpOwotK30KLSsK LStzdGF0aWMgaW50Ci0rZnRzX2NvbXBhciAodm9pZCBjb25zdCAqYSwgdm9pZCBjb25zdCAqYikK LSt7Ci0rICAvKiBDb252ZXJ0IEEgYW5kIEIgdG8gdGhlIGNvcnJlY3QgdHlwZXMsIHRvIHBhY2lm eSB0aGUgY29tcGlsZXIsIGFuZAotKyAgICAgZm9yIHBvcnRhYmlsaXR5IHRvIGJpemFycmUgaG9z dHMgd2hlcmUgInZvaWQgY29uc3QgKiIgYW5kICJGVFNFTlQKLSsgICAgIGNvbnN0ICoqIiBkaWZm ZXIgaW4gcnVudGltZSByZXByZXNlbnRhdGlvbi4gIFRoZSBjb21wYXJpc29uCi0rICAgICBmdW5j dGlvbiBjYW5ub3QgbW9kaWZ5ICphIGFuZCAqYiwgYnV0IHRoZXJlIGlzIG5vIGNvbXBpbGUtdGlt ZQotKyAgICAgY2hlY2sgZm9yIHRoaXMuICAqLwotKyAgRlRTRU5UUlkgY29uc3QgKipwYSA9IChG VFNFTlRSWSBjb25zdCAqKikgYTsKLSsgIEZUU0VOVFJZIGNvbnN0ICoqcGIgPSAoRlRTRU5UUlkg Y29uc3QgKiopIGI7Ci0rICByZXR1cm4gRlRTRU5UX0ZUUyhwYVswXSktPmZ0c19jb21wYXIgKHBh LCBwYik7Ci0rfQotKwotK3N0YXRpYyBGVFNFTlRSWSAqCi0raW50ZXJuYWxfZnVuY3Rpb24KLStm dHNfc29ydCAoRlRTT0JKICpzcCwgRlRTRU5UUlkgKmhlYWQsIHJlZ2lzdGVyIHNpemVfdCBuaXRl bXMpCi0rewotKyAgICAgICAgcmVnaXN0ZXIgRlRTRU5UUlkgKiphcCwgKnA7Ci0rCi0rICAgICAg ICAvKiBPbiBtb3N0IG1vZGVybiBob3N0cywgdm9pZCAqIGFuZCBGVFNFTlQgKiogaGF2ZSB0aGUg c2FtZQotKyAgICAgICAgICAgcnVuLXRpbWUgcmVwcmVzZW50YXRpb24sIGFuZCBvbmUgY2FuIGNv bnZlcnQgc3AtPmZ0c19jb21wYXIgdG8KLSsgICAgICAgICAgIHRoZSB0eXBlIHFzb3J0IGV4cGVj dHMgd2l0aG91dCBwcm9ibGVtLiAgVXNlIHRoZSBoZXVyaXN0aWMgdGhhdAotKyAgICAgICAgICAg dGhpcyBpcyBPSyBpZiB0aGUgdHdvIHBvaW50ZXIgdHlwZXMgYXJlIHRoZSBzYW1lIHNpemUsIGFu ZCBpZgotKyAgICAgICAgICAgY29udmVydGluZyBGVFNFTlQgKiogdG8gdWludHB0cl90IGlzIHRo ZSBzYW1lIGFzIGNvbnZlcnRpbmcKLSsgICAgICAgICAgIEZUU0VOVCAqKiB0byB2b2lkICogYW5k IHRoZW4gdG8gdWludHB0cl90LiAgVGhpcyBoZXVyaXN0aWMgaXNuJ3QKLSsgICAgICAgICAgIHZh bGlkIGluIGdlbmVyYWwgYnV0IHdlIGRvbid0IGtub3cgb2YgYW55IGNvdW50ZXJleGFtcGxlcy4g ICovCi0rICAgICAgICBGVFNFTlRSWSAqZHVtbXk7Ci0rICAgICAgICBpbnQgKCpjb21wYXJlKSAo dm9pZCBjb25zdCAqLCB2b2lkIGNvbnN0ICopID0KLSsgICAgICAgICAgKChzaXplb2YgJmR1bW15 ID09IHNpemVvZiAodm9pZCAqKQotKyAgICAgICAgICAgICYmICh1aW50cHRyX3QpICZkdW1teSA9 PSAodWludHB0cl90KSAodm9pZCAqKSAmZHVtbXkpCi0rICAgICAgICAgICA/IChpbnQgKCopICh2 b2lkIGNvbnN0ICosIHZvaWQgY29uc3QgKikpIHNwLT5mdHNfY29tcGFyCi0rICAgICAgICAgICA6 IGZ0c19jb21wYXIpOwotKwotKyAgICAgICAgLyoKLSsgICAgICAgICAqIENvbnN0cnVjdCBhbiBh cnJheSBvZiBwb2ludGVycyB0byB0aGUgc3RydWN0dXJlcyBhbmQgY2FsbCBxc29ydCgzKS4KLSsg ICAgICAgICAqIFJlYXNzZW1ibGUgdGhlIGFycmF5IGluIHRoZSBvcmRlciByZXR1cm5lZCBieSBx c29ydC4gIElmIHVuYWJsZSB0bwotKyAgICAgICAgICogc29ydCBmb3IgbWVtb3J5IHJlYXNvbnMs IHJldHVybiB0aGUgZGlyZWN0b3J5IGVudHJpZXMgaW4gdGhlaXIKLSsgICAgICAgICAqIGN1cnJl bnQgb3JkZXIuICBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBjdXJyZW50IG5lZWRzIHBs dXMKLSsgICAgICAgICAqIDQwIHNvIGRvbid0IHJlYWxsb2Mgb25lIGVudHJ5IGF0IGEgdGltZS4K LSsgICAgICAgICAqLwotKyAgICAgICAgaWYgKG5pdGVtcyA+IHNwLT5mdHNfbml0ZW1zKSB7Ci0r ICAgICAgICAgICAgICAgIHNwLT5mdHNfbml0ZW1zID0gbml0ZW1zICsgNDA7Ci0rICAgICAgICAg ICAgICAgIEZUU0VOVFJZICoqYTsKLSsgICAgICAgICAgICAgICAgaWYgKCEgKGEgPSByZWFsbG9j YXJyYXkgKHNwLT5mdHNfYXJyYXksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzcC0+ZnRzX25pdGVtcywgc2l6ZW9mICphKSkpIHsKLSsgICAgICAgICAgICAgICAg ICAgICAgICBmcmVlKHNwLT5mdHNfYXJyYXkpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIHNw LT5mdHNfYXJyYXkgPSBOVUxMOwotKyAgICAgICAgICAgICAgICAgICAgICAgIHNwLT5mdHNfbml0 ZW1zID0gMDsKLSsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGhlYWQpOwotKyAgICAg ICAgICAgICAgICB9Ci0rICAgICAgICAgICAgICAgIHNwLT5mdHNfYXJyYXkgPSBhOwotKyAgICAg ICAgfQotKyAgICAgICAgZm9yIChhcCA9IHNwLT5mdHNfYXJyYXksIHAgPSBoZWFkOyBwOyBwID0g cC0+ZnRzX2xpbmspCi0rICAgICAgICAgICAgICAgICphcCsrID0gcDsKLSsgICAgICAgIHFzb3J0 KCh2b2lkICopc3AtPmZ0c19hcnJheSwgbml0ZW1zLCBzaXplb2YoRlRTRU5UUlkgKiksIGNvbXBh cmUpOwotKyAgICAgICAgZm9yIChoZWFkID0gKihhcCA9IHNwLT5mdHNfYXJyYXkpOyAtLW5pdGVt czsgKythcCkKLSsgICAgICAgICAgICAgICAgYXBbMF0tPmZ0c19saW5rID0gYXBbMV07Ci0rICAg ICAgICBhcFswXS0+ZnRzX2xpbmsgPSBOVUxMOwotKyAgICAgICAgcmV0dXJuIChoZWFkKTsKLSt9 Ci0rCi0rc3RhdGljIEZUU0VOVFJZICoKLStpbnRlcm5hbF9mdW5jdGlvbgotK2Z0c19hbGxvYyAo RlRTT0JKICpzcCwgY29uc3QgY2hhciAqbmFtZSwgcmVnaXN0ZXIgc2l6ZV90IG5hbWVsZW4pCi0r ewotKyAgICAgICAgLyoKLSsgICAgICAgICAqIFRoZSBmaWxlIG5hbWUgaXMgYSB2YXJpYWJsZSBs ZW5ndGggYXJyYXkuICBBbGxvY2F0ZSB0aGUgRlRTRU5UCi0rICAgICAgICAgKiBzdHJ1Y3R1cmUg YW5kIHRoZSBmaWxlIG5hbWUgaW4gb25lIGNodW5rLgotKyAgICAgICAgICovCi0rICAgICAgICBz aXplX3QgbGVuID0gRkxFWFNJWkVPRihGVFNFTlQsIGZ0c19uYW1lLCBuYW1lbGVuICsgMSk7Ci0r CXJlZ2lzdGVyIEZUU0VOVFJZICpwOwotKyNpZiAhX0xJQkMKLSsgICAgICAgIHAgPSBtYWxsb2Mo bGVuKTsKLSsgICAgICAgIGlmIChwID09IE5VTEwpCi0rICAgICAgICAgICAgICAgIHJldHVybiAo TlVMTCk7Ci0rI2Vsc2UKLSsJLyoKLSsJICogRm9yIGdsaWJjLCB3ZSB1c2UgYSB3cmFwcGVyIHN0 cnVjdCB0byBwcm92aWRlIHRoZSBleHRyYSByZXF1aXJlZAotKwkgKiBmaWVsZHMgd2l0aG91dCBj aGFuZ2luZyB0aGUgRlNFTlQgbGF5b3V0LgotKwkgKi8KLSsJbGVuICs9IHNpemVvZiAoc3RydWN0 IEZUU0VOVF93cmFwcGVyKTsKLSsJc3RydWN0IEZUU0VOVF93cmFwcGVyICp3cmFwcGVyID0gbWFs bG9jKGxlbik7Ci0rCWlmICh3cmFwcGVyID09IE5VTEwpCi0rCQlyZXR1cm4gKE5VTEwpOwotKwlw ID0gJndyYXBwZXItPmVudDsKLSsgICAgICAgIHAtPmZ0c19zdGF0cCA9ICZ3cmFwcGVyLT5mdHNf c3RhdDsKLSsjZW5kaWYKLSsKLSsgICAgICAgIC8qIENvcHkgdGhlIG5hbWUgYW5kIGd1YXJhbnRl ZSBOVUwgdGVybWluYXRpb24uICovCi0rICAgICAgICBtZW1jcHkocC0+ZnRzX25hbWUsIG5hbWUs IG5hbWVsZW4pOwotKyAgICAgICAgcC0+ZnRzX25hbWVbbmFtZWxlbl0gPSAnXDAnOwotKwotKyAg ICAgICAgcC0+ZnRzX25hbWVsZW4gPSBuYW1lbGVuOwotKyAgICAgICAgRlRTRU5UX0ZUUyhwKT0g c3A7Ci0rICAgICAgICBwLT5mdHNfcGF0aCA9IHNwLT5mdHNfcGF0aDsKLSsgICAgICAgIHAtPmZ0 c19lcnJubyA9IDA7Ci0rICAgICAgICBGVFNFTlRfRElSUChwKSA9IE5VTEw7Ci0rICAgICAgICBw LT5mdHNfZmxhZ3MgPSAwOwotKyAgICAgICAgcC0+ZnRzX2luc3RyID0gRlRTX05PSU5TVFI7Ci0r ICAgICAgICBwLT5mdHNfbnVtYmVyID0gMDsKLSsgICAgICAgIHAtPmZ0c19wb2ludGVyID0gTlVM TDsKLSsgICAgICAgIHJldHVybiAocCk7Ci0rfQotKwotK3N0YXRpYyB2b2lkCi0raW50ZXJuYWxf ZnVuY3Rpb24KLStmdHNfbGZyZWUgKHJlZ2lzdGVyIEZUU0VOVFJZICpoZWFkKQotK3sKLSsgICAg ICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOwotKwotKyAgICAgICAgLyogRnJlZSBhIGxpbmtl ZCBsaXN0IG9mIHN0cnVjdHVyZXMuICovCi0rICAgICAgICByZWdpc3RlciBGVFNFTlRSWSAqcDsK LSsgICAgICAgIHdoaWxlICgocCA9IGhlYWQpKSB7Ci0rICAgICAgICAgICAgICAgIGhlYWQgPSBo ZWFkLT5mdHNfbGluazsKLSsgICAgICAgICAgICAgICAgaWYgKEZUU0VOVF9ESVJQKHApKQotKyAg ICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZGlyIChGVFNFTlRfRElSUChwKSk7Ci0rICAgICAg ICAgICAgICAgIGZyZWUoRlRTRU5UX1dSQVBQRVIocCkpOwotKyAgICAgICAgfQotKwotKyAgICAg ICAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsKLSt9Ci0rCi0rLyoKLSsgKiBBbGxvdyBlc3Nl bnRpYWxseSB1bmxpbWl0ZWQgZmlsZSBuYW1lIGxlbmd0aHM7IGZpbmQsIHJtLCBscyBzaG91bGQK LSsgKiBhbGwgd29yayBvbiBhbnkgdHJlZS4gIE1vc3Qgc3lzdGVtcyB3aWxsIGFsbG93IGNyZWF0 aW9uIG9mIGZpbGUKLSsgKiBuYW1lcyBtdWNoIGxvbmdlciB0aGFuIE1BWFBBVEhMRU4sIGV2ZW4g dGhvdWdoIHRoZSBrZXJuZWwgd29uJ3QKLSsgKiByZXNvbHZlIHRoZW0uICBBZGQgdGhlIHNpemUg KG5vdCBqdXN0IHdoYXQncyBuZWVkZWQpIHBsdXMgMjU2IGJ5dGVzCi0rICogc28gZG9uJ3QgcmVh bGxvYyB0aGUgZmlsZSBuYW1lIDIgYnl0ZXMgYXQgYSB0aW1lLgotKyAqLwotK3N0YXRpYyBib29s Ci0raW50ZXJuYWxfZnVuY3Rpb24KLStmdHNfcGFsbG9jIChGVFNPQkogKnNwLCBzaXplX3QgbW9y ZSkKLSt7Ci0rICAgICAgICBzaXplX3QgbmV3X2xlbiA9IHNwLT5mdHNfcGF0aGxlbiArIG1vcmUg KyAyNTY7Ci0rCi0rICAgICAgICAvKgotKyAgICAgICAgICogU2VlIGlmIGZ0c19wYXRobGVuIHdv dWxkIG92ZXJmbG93LgotKyAgICAgICAgICovCi0rICAgICAgICBpZiAobmV3X2xlbiA8IHNwLT5m dHNfcGF0aGxlbikgewotKyAgICAgICAgICAgICAgICBmcmVlKHNwLT5mdHNfcGF0aCk7Ci0rICAg ICAgICAgICAgICAgIHNwLT5mdHNfcGF0aCA9IE5VTEw7Ci0rICAgICAgICAgICAgICAgIF9fc2V0 X2Vycm5vIChFTkFNRVRPT0xPTkcpOwotKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0r ICAgICAgICB9Ci0rICAgICAgICBzcC0+ZnRzX3BhdGhsZW4gPSBuZXdfbGVuOwotKyAgICAgICAg Y2hhciAqcCA9IHJlYWxsb2Moc3AtPmZ0c19wYXRoLCBzcC0+ZnRzX3BhdGhsZW4pOwotKyAgICAg ICAgaWYgKHAgPT0gTlVMTCkgewotKyAgICAgICAgICAgICAgICBmcmVlKHNwLT5mdHNfcGF0aCk7 Ci0rICAgICAgICAgICAgICAgIHNwLT5mdHNfcGF0aCA9IE5VTEw7Ci0rICAgICAgICAgICAgICAg IHJldHVybiBmYWxzZTsKLSsgICAgICAgIH0KLSsgICAgICAgIHNwLT5mdHNfcGF0aCA9IHA7Ci0r ICAgICAgICByZXR1cm4gdHJ1ZTsKLSt9Ci0rCi0rLyoKLSsgKiBXaGVuIHRoZSBmaWxlIG5hbWUg aXMgcmVhbGxvYydkLCBoYXZlIHRvIGZpeCBhbGwgb2YgdGhlIHBvaW50ZXJzIGluCi0rICogIHN0 cnVjdHVyZXMgYWxyZWFkeSByZXR1cm5lZC4KLSsgKi8KLStzdGF0aWMgdm9pZAotK2ludGVybmFs X2Z1bmN0aW9uCi0rZnRzX3BhZGp1c3QgKEZUU09CSiAqc3AsIEZUU0VOVFJZICpoZWFkKQotK3sK LSsgICAgICAgIGNoYXIgKmFkZHIgPSBzcC0+ZnRzX3BhdGg7Ci0rCi0rICAgICAgICAvKiBUaGlz IGNvZGUgbG9va3MgYXQgYml0LXBhdHRlcm5zIG9mIGZyZWVkIHBvaW50ZXJzIHRvCi0rICAgICAg ICAgICByZWxvY2F0ZSB0aGVtLCBzbyBpdCByZWxpZXMgb24gdW5kZWZpbmVkIGJlaGF2aW9yLiAg SWYgdGhpcwotKyAgICAgICAgICAgdHJpY2sgZG9lcyBub3Qgd29yayBvbiB5b3VyIHBsYXRmb3Jt LCBwbGVhc2UgcmVwb3J0IGEgYnVnLiAgKi8KLSsKLSsjZGVmaW5lIEFESlVTVChwKSBkbyB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICB1aW50cHRyX3Qgb2xkX2FjY3BhdGggPSAodWludHB0cl90KSAocCktPmZ0c19hY2NwYXRoOyAg ICAgICAgICAgXAotKyAgICAgICAgaWYgKG9sZF9hY2NwYXRoICE9ICh1aW50cHRyX3QpIChwKS0+ ZnRzX25hbWUpIHsgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgKHApLT5mdHNf YWNjcGF0aCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICAgICAgICAgICAgYWRkciArIChvbGRfYWNjcGF0aCAtICh1aW50cHRyX3QpIChwKS0+ZnRzX3Bh dGgpOyAgICAgXAotKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIChwKS0+ZnRzX3BhdGggPSBh ZGRyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGls ZSAoMCkKLSsgICAgICAgIC8qIEFkanVzdCB0aGUgY3VycmVudCBzZXQgb2YgY2hpbGRyZW4uICov Ci0rICAgICAgICBmb3IgKEZUU0VOVFJZICpwID0gc3AtPmZ0c19jaGlsZDsgcDsgcCA9IHAtPmZ0 c19saW5rKQotKyAgICAgICAgICAgICAgICBBREpVU1QocCk7Ci0rCi0rICAgICAgICAvKiBBZGp1 c3QgdGhlIHJlc3Qgb2YgdGhlIHRyZWUsIGluY2x1ZGluZyB0aGUgY3VycmVudCBsZXZlbC4gKi8K LSsgICAgICAgIGZvciAoRlRTRU5UUlkgKnAgPSBoZWFkOyBwLT5mdHNfbGV2ZWwgPj0gRlRTX1JP T1RMRVZFTDspIHsKLSsgICAgICAgICAgICAgICAgQURKVVNUKHApOwotKyAgICAgICAgICAgICAg ICBwID0gcC0+ZnRzX2xpbmsgPyBwLT5mdHNfbGluayA6IHAtPmZ0c19wYXJlbnQ7Ci0rICAgICAg ICB9Ci0rfQotKwotK3N0YXRpYyBzaXplX3QKLStpbnRlcm5hbF9mdW5jdGlvbiBfR0xfQVRUUklC VVRFX1BVUkUKLStmdHNfbWF4YXJnbGVuIChjaGFyICogY29uc3QgKmFyZ3YpCi0rewotKyAgICAg ICAgc2l6ZV90IG1heDsKLSsKLSsgICAgICAgIGZvciAobWF4ID0gMDsgKmFyZ3Y7ICsrYXJndikg ewotKyAgICAgICAgICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKCphcmd2KTsKLSsgICAgICAg ICAgICAgICAgaWYgKGxlbiA+IG1heCkKLSsgICAgICAgICAgICAgICAgICAgICAgICBtYXggPSBs ZW47Ci0rICAgICAgICB9Ci0rICAgICAgICByZXR1cm4gKG1heCArIDEpOwotK30KLSsKLSsvKgot KyAqIENoYW5nZSB0byBkaXIgc3BlY2lmaWVkIGJ5IGZkIG9yIGZpbGUgbmFtZSB3aXRob3V0IGdl dHRpbmcKLSsgKiB0cmlja2VkIGJ5IHNvbWVvbmUgY2hhbmdpbmcgdGhlIHdvcmxkIG91dCBmcm9t IHVuZGVybmVhdGggdXMuCi0rICogQXNzdW1lcyBwLT5mdHNfc3RhdHAtPnN0X2RldiBhbmQgcC0+ ZnRzX3N0YXRwLT5zdF9pbm8gYXJlIGZpbGxlZCBpbi4KLSsgKiBJZiBGRCBpcyBub24tbmVnYXRp dmUsIGV4cGVjdCBpdCB0byBiZSB1c2VkIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucywKLSsg KiBhbmQgdG8gYmUgY2xvc2VkIGV2ZW50dWFsbHkuICBTbyBkb24ndCBwYXNzIGUuZy4sICdkaXJm ZChkaXJwKScgYW5kIHRoZW4KLSsgKiBkbyBjbG9zZWRpcihkaXJwKSwgYmVjYXVzZSB0aGF0IHdv dWxkIGludmFsaWRhdGUgdGhlIHNhdmVkIEZELgotKyAqIFVwb24gZmFpbHVyZSwgY2xvc2UgRkQg aW1tZWRpYXRlbHkgYW5kIHJldHVybiBub256ZXJvLgotKyAqLwotK3N0YXRpYyBpbnQKLStpbnRl cm5hbF9mdW5jdGlvbgotK2Z0c19zYWZlX2NoYW5nZWRpciAoRlRTT0JKICpzcCwgRlRTRU5UUlkg KnAsIGludCBmZCwgY2hhciBjb25zdCAqZGlyKQotK3sKLSsgICAgICAgIGZ0c19hc3NlcnQgKDAg PD0gZmQgfHwgZGlyICE9IE5VTEwpOwotKyAgICAgICAgYm9vbCBpc19kb3Rkb3QgPSBkaXIgJiYg c3RyZXEgKGRpciwgIi4uIik7Ci0rCi0rICAgICAgICAvKiBUaGlzIGNsYXVzZSBoYW5kbGVzIHRo ZSB1bnVzdWFsIGNhc2UgaW4gd2hpY2ggRlRTX05PQ0hESVIKLSsgICAgICAgICAgIGlzIHNwZWNp ZmllZCwgYWxvbmcgd2l0aCBGVFNfQ1dERkQuICBJbiB0aGF0IGNhc2UsIHRoZXJlIGlzCi0rICAg ICAgICAgICBubyBuZWVkIHRvIGNoYW5nZSBldmVuIHRoZSB2aXJ0dWFsIGN3ZCBmaWxlIGRlc2Ny aXB0b3IuCi0rICAgICAgICAgICBIb3dldmVyLCBpZiBGRCBpcyBub24tbmVnYXRpdmUsIHdlIGRv IGNsb3NlIGl0IGhlcmUuICAqLwotKyAgICAgICAgaWYgKElTU0VUIChGVFNfTk9DSERJUikpCi0r ICAgICAgICAgIHsKLSsgICAgICAgICAgICBpZiAoSVNTRVQgKEZUU19DV0RGRCkgJiYgMCA8PSBm ZCkKLSsgICAgICAgICAgICAgIGNsb3NlIChmZCk7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0r ICAgICAgICAgIH0KLSsKLSsgICAgICAgIGlmIChmZCA8IDAgJiYgaXNfZG90ZG90ICYmIElTU0VU IChGVFNfQ1dERkQpKQotKyAgICAgICAgICB7Ci0rICAgICAgICAgICAgLyogV2hlbiBwb3NzaWJs ZSwgc2tpcCB0aGUgZGlyb3BlbiBhbmQgc3Vic2VxdWVudCBmc3RhdCtkZXYvaW5vCi0rICAgICAg ICAgICAgICAgY29tcGFyaXNvbi4gIEkuZS4sIHdoZW4gY2hhbmdpbmcgdG8gcGFyZW50IGRpcmVj dG9yeQotKyAgICAgICAgICAgICAgIChjaGRpciAoIi4uIikpLCB1c2UgYSBmaWxlIGRlc2NyaXB0 b3IgZnJvbSB0aGUgcmluZyBhbmQKLSsgICAgICAgICAgICAgICBzYXZlIHRoZSBvdmVyaGVhZCBv ZiBkaXJvcGVuK2ZzdGF0LCBhcyB3ZWxsIGFzIGF2b2lkaW5nCi0rICAgICAgICAgICAgICAgZmFp bHVyZSB3aGVuIHdlIGxhY2sgIngiIGFjY2VzcyB0byB0aGUgdmlydHVhbCBjd2QuICAqLwotKyAg ICAgICAgICAgIGlmICggISBpX3JpbmdfZW1wdHkgKCZzcC0+ZnRzX2ZkX3JpbmcpKQotKyAgICAg ICAgICAgICAgewotKyAgICAgICAgICAgICAgICBpbnQgcGFyZW50X2ZkOwotKyAgICAgICAgICAg ICAgICBmZF9yaW5nX3ByaW50IChzcCwgc3RkZXJyLCAicHJlLXBvcCIpOwotKyAgICAgICAgICAg ICAgICBwYXJlbnRfZmQgPSBpX3JpbmdfcG9wICgmc3AtPmZ0c19mZF9yaW5nKTsKLSsgICAgICAg ICAgICAgICAgaWYgKDAgPD0gcGFyZW50X2ZkKQotKyAgICAgICAgICAgICAgICAgIHsKLSsgICAg ICAgICAgICAgICAgICAgIGZkID0gcGFyZW50X2ZkOwotKyAgICAgICAgICAgICAgICAgICAgZGly ID0gTlVMTDsKLSsgICAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgICB9Ci0rICAgICAg ICAgIH0KLSsKLSsgICAgICAgIGludCBuZXdmZCA9IGZkOwotKyAgICAgICAgaWYgKGZkIDwgMCAm JiAobmV3ZmQgPSBkaXJvcGVuIChzcCwgZGlyKSkgPCAwKQotKyAgICAgICAgICByZXR1cm4gLTE7 Ci0rCi0rICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGRldi9pbm9kZSBjaGVjayBpcyBuZWNlc3Nh cnkgaWYgd2UncmUgZG9pbmcgYQotKyAgICAgICAgICAgImxvZ2ljYWwiIHRyYXZlcnNhbCAodGhy b3VnaCBzeW1saW5rcywgYSBsYSBjaG93biAtTCksIGlmIHRoZQotKyAgICAgICAgICAgc3lzdGVt IGxhY2tzIE9fTk9GT0xMT1cgc3VwcG9ydCwgb3IgaWYgd2UncmUgY2hhbmdpbmcgdG8gIi4uIgot KyAgICAgICAgICAgKGJ1dCBub3QgdmlhIGEgcG9wcGVkIGZpbGUgZGVzY3JpcHRvcikuICBXaGVu IGNoYW5naW5nIHRvIHRoZQotKyAgICAgICAgICAgbmFtZSAiLi4iLCBPX05PRk9MTE9XIGNhbid0 IGhlbHAuICBJbiBnZW5lcmFsLCB3aGVuIHRoZSB0YXJnZXQgaXMKLSsgICAgICAgICAgIG5vdCAi Li4iLCBkaXJvcGVuJ3MgdXNlIG9mIE9fTk9GT0xMT1cgZW5zdXJlcyB3ZSBkb24ndCBtaXN0YWtl bmx5Ci0rICAgICAgICAgICBmb2xsb3cgYSBzeW1saW5rLCBzbyB3ZSBjYW4gYXZvaWQgdGhlIGV4 cGVuc2Ugb2YgdGhpcyBmc3RhdC4gICovCi0rICAgICAgICBpbnQgcmV0OwotKyAgICAgICAgaWYg KElTU0VUKEZUU19MT0dJQ0FMKSB8fCAhIEhBVkVfV09SS0lOR19PX05PRk9MTE9XCi0rICAgICAg ICAgICAgfHwgKGRpciAmJiBzdHJlcSAoZGlyLCAiLi4iKSkpCi0rICAgICAgICAgIHsKLSsgICAg ICAgICAgICBzdHJ1Y3QgU1RSVUNUX1NUQVQgc2I7Ci0rICAgICAgICAgICAgaWYgKEZTVEFUIChu ZXdmZCwgJnNiKSkKLSsgICAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgICAgcmV0ID0gLTE7 Ci0rICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSsgICAgICAgICAgICAgIH0KLSsgICAgICAg ICAgICBpZiAocC0+ZnRzX3N0YXRwLT5zdF9kZXYgIT0gc2Iuc3RfZGV2Ci0rICAgICAgICAgICAg ICAgIHx8IHAtPmZ0c19zdGF0cC0+c3RfaW5vICE9IHNiLnN0X2lubykKLSsgICAgICAgICAgICAg IHsKLSsgICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKEVOT0VOVCk7ICAgICAgICAgICAvKiBk aXNpbmZvcm1hdGlvbiAqLwotKyAgICAgICAgICAgICAgICByZXQgPSAtMTsKLSsgICAgICAgICAg ICAgICAgZ290byBiYWlsOwotKyAgICAgICAgICAgICAgfQotKyAgICAgICAgICB9Ci0rCi0rICAg ICAgICBpZiAoSVNTRVQoRlRTX0NXREZEKSkKLSsgICAgICAgICAgewotKyAgICAgICAgICAgIGN3 ZF9hZHZhbmNlX2ZkIChzcCwgbmV3ZmQsICEgaXNfZG90ZG90KTsKLSsgICAgICAgICAgICByZXR1 cm4gMDsKLSsgICAgICAgICAgfQotKwotKyAgICAgICAgcmV0ID0gZmNoZGlyKG5ld2ZkKTsKLSti YWlsOgotKyAgICAgICAgaWYgKGZkIDwgMCkKLSsgICAgICAgICAgewotKyAgICAgICAgICAgIGlu dCBvZXJybm8gPSBlcnJubzsKLSsgICAgICAgICAgICAodm9pZCljbG9zZShuZXdmZCk7Ci0rICAg ICAgICAgICAgX19zZXRfZXJybm8gKG9lcnJubyk7Ci0rICAgICAgICAgIH0KLSsgICAgICAgIHJl dHVybiByZXQ7Ci0rfQotZGlmZiAtLWdpdCBhL2lvL2Z0czY0LXRpbWU2NC5jIGIvaW8vZnRzNjQt dGltZTY0LmMKLWluZGV4IDI5ZjJkYmMyOGNjN2ExMWMuLjZhMTA1MzE5NGVlYzUxYmEgMTAwNjQ0 Ci0tLS0gYS9pby9mdHM2NC10aW1lNjQuYwotKysrIGIvaW8vZnRzNjQtdGltZTY0LmMKLUBAIC0z Myw1ICszMyw1IEBACi0gIyBkZWZpbmUgU1RSVUNUX1NUQVRGUyAgICAgIHN0YXRmczY0Ci0gIyBk ZWZpbmUgRlNUQVRGUyAgICAgICAgICAgIF9fZnN0YXRmczY0Ci0gCi0tIyBpbmNsdWRlICJmdHMt Y29tbW9uLmMiCi0rIyBpbmNsdWRlICJmdHMuYyIKLSAjZW5kaWYKLWRpZmYgLS1naXQgYS9pby9m dHM2NC5jIGIvaW8vZnRzNjQuYwotaW5kZXggMWVmYTA2YWIzYmVmMDY0My4uYTZmNjA3YTg3Mzgz ZjRhNyAxMDA2NDQKLS0tLSBhL2lvL2Z0czY0LmMKLSsrKyBiL2lvL2Z0czY0LmMKLUBAIC0xNiwx MSArMTYsMTEgQEAKLSAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlm IG5vdCwgc2VlCi0gICAgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0gCi0t I2RlZmluZSBGVFNfT1BFTiBfX2Z0czY0X29wZW4KLS0jZGVmaW5lIEZUU19DTE9TRSBfX2Z0czY0 X2Nsb3NlCi0tI2RlZmluZSBGVFNfUkVBRCBfX2Z0czY0X3JlYWQKLS0jZGVmaW5lIEZUU19TRVQg X19mdHM2NF9zZXQKLS0jZGVmaW5lIEZUU19DSElMRFJFTiBfX2Z0czY0X2NoaWxkcmVuCi0rI2Rl ZmluZSBGVFNfT1BFTiBmdHM2NF9vcGVuCi0rI2RlZmluZSBGVFNfQ0xPU0UgZnRzNjRfY2xvc2UK LSsjZGVmaW5lIEZUU19SRUFEIGZ0czY0X3JlYWQKLSsjZGVmaW5lIEZUU19TRVQgZnRzNjRfc2V0 Ci0rI2RlZmluZSBGVFNfQ0hJTERSRU4gZnRzNjRfY2hpbGRyZW4KLSAjZGVmaW5lIEZUU09CSiBG VFM2NAotICNkZWZpbmUgRlRTRU5UUlkgRlRTRU5UNjQKLSAjZGVmaW5lIElOT19UIGlubzY0X3QK LUBAIC0zMCwzMCArMzAsNCBAQAotICNkZWZpbmUgU1RSVUNUX1NUQVRGUyBzdGF0ZnM2NAotICNk ZWZpbmUgRlNUQVRGUyBfX2ZzdGF0ZnM2NAotIAotLSNkZWZpbmUgZnRzX29wZW4gX19yZW5hbWVf ZnRzX29wZW4KLS0jZGVmaW5lIGZ0c19jbG9zZSBfX3JlbmFtZV9mdHNfY2xvc2UKLS0jZGVmaW5l IGZ0c19yZWFkIF9fcmVuYW1lX2Z0c19yZWFkCi0tI2RlZmluZSBmdHNfc2V0IF9fcmVuYW1lX2Z0 c19zZXQKLS0jZGVmaW5lIGZ0c19jaGlsZHJlbiBfX3JlbmFtZV9mdHNfY2hpbGRyZW4KLS0KLS0j aW5jbHVkZSAiZnRzLWNvbW1vbi5jIgotLQotLSN1bmRlZiBmdHNfb3BlbgotLSN1bmRlZiBmdHNf Y2xvc2UKLS0jdW5kZWYgZnRzX3JlYWQKLS0jdW5kZWYgZnRzX3NldAotLSN1bmRlZiBmdHNfY2hp bGRyZW4KLS0KLS13ZWFrX2FsaWFzIChfX2Z0czY0X29wZW4sIGZ0czY0X29wZW4pCi0td2Vha19h bGlhcyAoX19mdHM2NF9jbG9zZSwgZnRzNjRfY2xvc2UpCi0td2Vha19hbGlhcyAoX19mdHM2NF9y ZWFkLCBmdHM2NF9yZWFkKQotLXdlYWtfYWxpYXMgKF9fZnRzNjRfc2V0LCBmdHM2NF9zZXQpCi0t d2Vha19hbGlhcyAoX19mdHM2NF9jaGlsZHJlbiwgZnRzNjRfY2hpbGRyZW4pCi0tCi0tI2lmZGVm IF9fT0ZGX1RfTUFUQ0hFU19PRkY2NF9UCi0td2Vha19hbGlhcyAoX19mdHM2NF9vcGVuLCBmdHNf b3BlbikKLS13ZWFrX2FsaWFzIChfX2Z0czY0X2Nsb3NlLCBmdHNfY2xvc2UpCi0td2Vha19hbGlh cyAoX19mdHM2NF9yZWFkLCBmdHNfcmVhZCkKLS13ZWFrX2FsaWFzIChfX2Z0czY0X3NldCwgZnRz X3NldCkKLS13ZWFrX2FsaWFzIChfX2Z0czY0X2NoaWxkcmVuLCBmdHNfY2hpbGRyZW4pCi0tI2Vu ZGlmCi0rI2luY2x1ZGUgImZ0cy5jIgotZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xp bnV4L21pcHMvbWlwczY0L242NC9mdHMuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMv bWlwczY0L242NC9mdHMuYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAw MDAwMDAuLmQwYzYyZTYxOTVlYWRjNjMKLS0tLSAvZGV2L251bGwKLSsrKyBiL3N5c2RlcHMvdW5p eC9zeXN2L2xpbnV4L21pcHMvbWlwczY0L242NC9mdHMuYwotQEAgLTAsMCArMSBAQAotKyNpbmNs dWRlIDxpby9mdHMuYz4KLWRpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBz L21pcHM2NC9uNjQvZnRzNjQuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvbWlwczY0 L242NC9mdHM2NC5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwMDAw MC4uMjQ3MmY4YmY3NTk2OGIzNgotLS0tIC9kZXYvbnVsbAotKysrIGIvc3lzZGVwcy91bml4L3N5 c3YvbGludXgvbWlwcy9taXBzNjQvbjY0L2Z0czY0LmMKLUBAIC0wLDAgKzEgQEAKLSsjaW5jbHVk ZSA8aW8vZnRzNjQuYz4KLWRpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZf NjQveDMyL2Z0cy5jIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L3gzMi9mdHMuYwot bmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMDAwMDAuLjk4MDU3M2VkNjg5 Mjg0NDEKLS0tLSAvZGV2L251bGwKLSsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82 NC94MzIvZnRzLmMKLUBAIC0wLDAgKzEgQEAKLSsjaW5jbHVkZSA8c3lzZGVwcy93b3Jkc2l6ZS02 NC9mdHMuYz4KLWRpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQveDMy L2Z0czY0LmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQveDMyL2Z0czY0LmMKLW5l dyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAwMDAwLi4yMjFkMWI1NjA4ZTg2 OTJmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQv eDMyL2Z0czY0LmMKLUBAIC0wLDAgKzEgQEAKLSsjaW5jbHVkZSA8c3lzZGVwcy93b3Jkc2l6ZS02 NC9mdHM2NC5jPgotZGlmZiAtLWdpdCBhL3N5c2RlcHMvd29yZHNpemUtNjQvZnRzLmMgYi9zeXNk ZXBzL3dvcmRzaXplLTY0L2Z0cy5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAw MDAwMDAwMDAwMC4uMTU5ZGMxZmViZTQ5ODBmNwotLS0tIC9kZXYvbnVsbAotKysrIGIvc3lzZGVw cy93b3Jkc2l6ZS02NC9mdHMuYwotQEAgLTAsMCArMSwxOSBAQAotKyNkZWZpbmUgZnRzNjRfb3Bl biBfX3JlbmFtZV9mdHM2NF9vcGVuCi0rI2RlZmluZSBmdHM2NF9jbG9zZSBfX3JlbmFtZV9mdHM2 NF9jbG9zZQotKyNkZWZpbmUgZnRzNjRfcmVhZCBfX3JlbmFtZV9mdHM2NF9yZWFkCi0rI2RlZmlu ZSBmdHM2NF9zZXQgX19yZW5hbWVfZnRzNjRfc2V0Ci0rI2RlZmluZSBmdHM2NF9jaGlsZHJlbiBf X3JlbmFtZV9mdHM2NF9jaGlsZHJlbgotKwotKyNpbmNsdWRlICIuLi8uLi9pby9mdHMuYyIKLSsK LSsjdW5kZWYgZnRzNjRfb3BlbgotKyN1bmRlZiBmdHM2NF9jbG9zZQotKyN1bmRlZiBmdHM2NF9y ZWFkCi0rI3VuZGVmIGZ0czY0X3NldAotKyN1bmRlZiBmdHM2NF9jaGlsZHJlbgotKwotK3dlYWtf YWxpYXMgKGZ0c19vcGVuLCBmdHM2NF9vcGVuKQotK3dlYWtfYWxpYXMgKGZ0c19jbG9zZSwgZnRz NjRfY2xvc2UpCi0rd2Vha19hbGlhcyAoZnRzX3JlYWQsIGZ0czY0X3JlYWQpCi0rd2Vha19hbGlh cyAoZnRzX3NldCwgZnRzNjRfc2V0KQotK3dlYWtfYWxpYXMgKGZ0c19jaGlsZHJlbiwgZnRzNjRf Y2hpbGRyZW4pCi1kaWZmIC0tZ2l0IGEvc3lzZGVwcy93b3Jkc2l6ZS02NC9mdHM2NC5jIGIvc3lz ZGVwcy93b3Jkc2l6ZS02NC9mdHM2NC5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAw MDAwMDAwMDAwMDAwMC4uZjI4NDhmYzNlNGMwODYyNQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3lz ZGVwcy93b3Jkc2l6ZS02NC9mdHM2NC5jCi1AQCAtMCwwICsxIEBACi0rLyogRGVmaW5lZCBpbiBm dHMuYy4gICovCi0tLSAKLTIuNTMuMAotCgpkaWZmIC0tZ2l0IGEvZ2xpYmMtcmgyNDU3MTgzLTIu cGF0Y2ggYi9nbGliYy1yaDI0NTcxODMtMi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggNTMzNzRiZC4uMDAwMDAwMAotLS0gYS9nbGliYy1yaDI0NTcxODMtMi5wYXRjaAorKysg L2Rldi9udWxsCkBAIC0xLDYyMjIgKzAsMCBAQAotUmV2ZXJ0ICJpbzogVXNlIGdudWxpYiBmdHMg aW1wbGVtZW50YXRpb24gKEJaIDIyOTQ0LCBCWiAyMDMzMSkiCi0KLVRoaXMgcmV2ZXJ0cyBjb21t aXQgOTkzMDNmMzg3MTc5MzMyZDY0ZTVlZTM0YTZiNThlODJhNTIzYmFlNS4KLQotUmVhc29uIGZv ciByZXZlcnQ6IFRoaXMgY2hhbmdlIGJyZWFrcyBkcmFjdXQgZHVlIHRvIHRoZSB3YXkgaXQgdXNl cwotZnRzOiA8aHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0yNDU3 MTgzPgotCi1kaWZmIC0tZ2l0IGEvU0hBUkVELUZJTEVTIGIvU0hBUkVELUZJTEVTCi1pbmRleCAx MjZhYWYwOTZkOTMzNzFjLi5iOWQ5Y2RjOWQwNGNhYjM4IDEwMDY0NAotLS0tIGEvU0hBUkVELUZJ TEVTCi0rKysgYi9TSEFSRUQtRklMRVMKLUBAIC0zNiwyMiArMzYsOCBAQCBnbnVsaWI6Ci0gICAj IE1lcmdlZCBmcm9tIGdudWxpYiAyMDI1LTEwLTI5IChnbnVsaWIgY29tbWl0IDE3OTBlZjI1ZDgp Ci0gICBpbmNsdWRlL2ludHByb3BzLmgKLSAgIGluY2x1ZGUvaW50cHJvcHMtaW50ZXJuYWwuaAot LSAgIyBNZXJnZWQgZnJvbSBnbnVsaWIgMjAyNi0wMi0xNgotLSAgaW5jbHVkZS9hc3N1cmUuaAot LSAgaW5jbHVkZS9mbGV4bWVtYmVyLmgKLS0gIGluY2x1ZGUvaGFzaC5oCi0tICBpbmNsdWRlL25l eHQtcHJpbWUuaAotLSAgaW5jbHVkZS94YWxsb2Mtb3ZlcnNpemVkLmgKLSAgICMgTWVyZ2VkIGZy b20gZ251bGliIDIwMjEtMDktMjEKLSAgIGluY2x1ZGUvcmVnZXguaAotLSAgIyBNZXJnZWQgZnJv bSBnbnVsaWIgMjAyNi0wMi0xNgotLSAgaW8vY3ljbGUtY2hlY2suYwotLSAgaW8vY3ljbGUtY2hl Y2suaAotLSAgaW8vZGV2LWluby5oCi0tICBpby9mdHMtY3ljbGUuYwotLSAgaW8vZnRzLmMKLS0g IGlvL2ktcmluZy5jCi0tICBpby9zYW1lLWlub2RlLmgKLSAgIGxvY2FsZS9wcm9ncmFtcy8zbGV2 ZWwuaAotICAgIyBNZXJnZWQgZnJvbSBnbnVsaWIgMjAxNC02LTIzCi0gICBtYWxsb2Mvb2JzdGFj ay5jCi1AQCAtNjEsOSArNDcsNyBAQCBnbnVsaWI6Ci0gICBtaXNjL2Vycm9yLmMKLSAgIG1pc2Mv ZXJyb3IuaAotICAgbWlzYy9nZXRwYXNzLmMKLS0gIG1pc2MvaGFzaC5jCi0gICBtaXNjL21rZHRl bXAuYwotLSAgbWlzYy9uZXh0LXByaW1lLmMKLSAgICMgTWVyZ2VkIGZyb20gZ251bGliIDIwMjEt MDktMjEKLSAgIG1pc2Mvc3lzL2NkZWZzLmgKLSAgIHBvc2l4L2ZubWF0Y2hfbG9vcC5jCi1kaWZm IC0tZ2l0IGEvZGlyZW50L3NjYW5kaXJhdC5jIGIvZGlyZW50L3NjYW5kaXJhdC5jCi1pbmRleCBk NDBjMDgyOGYxOWE5YjJiLi4zMWVjOTY2MmIwYjQyMTczIDEwMDY0NAotLS0tIGEvZGlyZW50L3Nj YW5kaXJhdC5jCi0rKysgYi9kaXJlbnQvc2NhbmRpcmF0LmMKLUBAIC0yMyw4ICsyMyw3IEBAIF9f c2NhbmRpcmF0IChpbnQgZGZkLCBjb25zdCBjaGFyICpkaXIsIHN0cnVjdCBkaXJlbnQgKioqbmFt ZWxpc3QsCi0gCSAgICAgaW50ICgqc2VsZWN0KSAoY29uc3Qgc3RydWN0IGRpcmVudCAqKSwKLSAJ ICAgICBpbnQgKCpjbXApIChjb25zdCBzdHJ1Y3QgZGlyZW50ICoqLCBjb25zdCBzdHJ1Y3QgZGly ZW50ICoqKSkKLSB7Ci0tICByZXR1cm4gX19zY2FuZGlyX3RhaWwgKF9fb3BlbmRpcmF0IChkZmQs IGRpciwgMCwgTlVMTCksIG5hbWVsaXN0LCBzZWxlY3QsCi0tCQkJIGNtcCk7Ci0rICByZXR1cm4g X19zY2FuZGlyX3RhaWwgKF9fb3BlbmRpcmF0IChkZmQsIGRpciksIG5hbWVsaXN0LCBzZWxlY3Qs IGNtcCk7Ci0gfQotIHdlYWtfYWxpYXMgKF9fc2NhbmRpcmF0LCBzY2FuZGlyYXQpCi0gI2VuZGlm Ci1kaWZmIC0tZ2l0IGEvZGlyZW50L3NjYW5kaXJhdDY0LmMgYi9kaXJlbnQvc2NhbmRpcmF0NjQu YwotaW5kZXggY2IxODIxMTc0ZTY5M2RjZS4uZmIwMTBmYWMyOGYyMzZjMSAxMDA2NDQKLS0tLSBh L2RpcmVudC9zY2FuZGlyYXQ2NC5jCi0rKysgYi9kaXJlbnQvc2NhbmRpcmF0NjQuYwotQEAgLTI0 LDggKzI0LDcgQEAgc2NhbmRpcmF0NjQgKGludCBkZmQsIGNvbnN0IGNoYXIgKmRpciwgc3RydWN0 IGRpcmVudDY0ICoqKm5hbWVsaXN0LAotIAkgICAgIGludCAoKnNlbGVjdCkgKGNvbnN0IHN0cnVj dCBkaXJlbnQ2NCAqKSwKLSAJICAgICBpbnQgKCpjbXApIChjb25zdCBzdHJ1Y3QgZGlyZW50NjQg KiosIGNvbnN0IHN0cnVjdCBkaXJlbnQ2NCAqKikpCi0gewotLSAgcmV0dXJuIF9fc2NhbmRpcjY0 X3RhaWwgKF9fb3BlbmRpcmF0IChkZmQsIGRpciwgMCwgTlVMTCksIG5hbWVsaXN0LCBzZWxlY3Qs Ci0tCQkJICAgY21wKTsKLSsgIHJldHVybiBfX3NjYW5kaXI2NF90YWlsIChfX29wZW5kaXJhdCAo ZGZkLCBkaXIpLCBuYW1lbGlzdCwgc2VsZWN0LCBjbXApOwotIH0KLSAKLSAjaWYgX0RJUkVOVF9N QVRDSEVTX0RJUkVOVDY0Ci1kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc3N1cmUuaCBiL2luY2x1ZGUv YXNzdXJlLmgKLWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggZWRjNzI1OTFkMTI4M2I0 YS4uMDAwMDAwMDAwMDAwMDAwMAotLS0tIGEvaW5jbHVkZS9hc3N1cmUuaAotKysrIC9kZXYvbnVs bAotQEAgLTEsNTcgKzAsMCBAQAotLS8qIFJ1bi10aW1lIGFzc2VydC1saWtlIG1hY3Jvcy4KLS0K LS0gICBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KLS0KLS0gICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQotLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0tICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKLS0gICBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotLQotLSAgIFRoaXMg ZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot LSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQotLSAgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgotLQotLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotLSAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4gICovCi0tCi0tLyogV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4gICovCi0tCi0tI2lmbmRl ZiBfR0xfQVNTVVJFX0gKLS0jZGVmaW5lIF9HTF9BU1NVUkVfSAotLQotLSNpbmNsdWRlIDxhc3Nl cnQuaD4KLS0jaW5jbHVkZSAidmVyaWZ5LmgiCi0tCi0tLyogRXZhbHVhdGUgYW4gYXNzZXJ0aW9u IEUgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIHRydWUuCi0tICAgSWYgTkRFQlVHIGlzIG5vdCBk ZWZpbmVkLCBhYm9ydCB0aGUgcHJvZ3JhbSBpZiBFIGlzIGZhbHNlLgotLSAgIElmIE5ERUJVRyBp cyBkZWZpbmVkLCB0aGUgY29tcGlsZXIgY2FuIGFzc3VtZSBFIGFuZCBiZWhhdmlvciBpcwotLSAg IHVuZGVmaW5lZCBpZiBFIGlzIGZhbHNlLCBmYWlscyB0byBldmFsdWF0ZSwgb3IgaGFzIHNpZGUg ZWZmZWN0cy4KLS0KLS0gICBVbmxpa2Ugc3RhbmRhcmQgJ2Fzc2VydCcsIHRoaXMgbWFjcm8gZXZh bHVhdGVzIEUgZXZlbiB3aGVuIE5ERUJVRwotLSAgIGlzIGRlZmluZWQsIHNvIGFzIHRvIGNhdGNo IHR5cG9zLCBhdm9pZCBzb21lIEdDQyB3YXJuaW5ncywgYW5kCi0tICAgaW1wcm92ZSBwZXJmb3Jt YW5jZSB3aGVuIEUgaXMgc2ltcGxlIGVub3VnaC4KLS0KLS0gICBBbHNvIHNlZSB0aGUgZG9jdW1l bnRhdGlvbiBmb3IgJ2Fzc3VtZScgaW4gdmVyaWZ5LmguICAqLwotLQotLSNpZmRlZiBOREVCVUcK LS0jIGRlZmluZSBhZmZpcm0oRSkgYXNzdW1lIChFKQotLSNlbHNlCi0tIyBkZWZpbmUgYWZmaXJt KEUpIGFzc2VydCAoRSkKLS0jZW5kaWYKLS0KLS0vKiBDaGVjayBFJ3MgdmFsdWUgYXQgcnVudGlt ZSwgYW5kIHJlcG9ydCBhbiBlcnJvciBhbmQgYWJvcnQgaWYgbm90LgotLSAgIEhvd2V2ZXIsIGRv IG5vdGhpbmcgaWYgTkRFQlVHIGlzIGRlZmluZWQuCi0tCi0tICAgVW5saWtlIHN0YW5kYXJkICdh c3NlcnQnLCB0aGlzIG1hY3JvIGNvbXBpbGVzIEUgZXZlbiB3aGVuIE5ERUJVRwotLSAgIGlzIGRl ZmluZWQsIHNvIGFzIHRvIGNhdGNoIHR5cG9zIGFuZCBhdm9pZCBzb21lIEdDQyB3YXJuaW5ncy4K LS0gICBVbmxpa2UgJ2FmZmlybScsIGl0IGlzIE9LIGZvciBFIHRvIHVzZSBoYXJkLXRvLW9wdGlt aXplIGZlYXR1cmVzLAotLSAgIHNpbmNlIEUgaXMgbm90IGV4ZWN1dGVkIGlmIE5ERUJVRyBpcyBk ZWZpbmVkLiAgKi8KLS0KLS0jaWZkZWYgTkRFQlVHCi0tIyBkZWZpbmUgYXNzdXJlKEUpICgodm9p ZCkgKDAgJiYgKEUpKSkKLS0jZWxzZQotLSMgZGVmaW5lIGFzc3VyZShFKSBhc3NlcnQgKEUpCi0t I2VuZGlmCi0tCi0tI2VuZGlmCi1kaWZmIC0tZ2l0IGEvaW5jbHVkZS9kaXJlbnQuaCBiL2luY2x1 ZGUvZGlyZW50LmgKLWluZGV4IDlhNGJkNWExZTM3OTY4MzguLmQ3NTY3ZjVlODY2ZTZhZDMgMTAw NjQ0Ci0tLS0gYS9pbmNsdWRlL2RpcmVudC5oCi0rKysgYi9pbmNsdWRlL2RpcmVudC5oCi1AQCAt MTYsOCArMTYsNyBAQCBzdHJ1Y3Qgc2NhbmRpcl9jYW5jZWxfc3RydWN0Ci0gCi0gLyogTm93IGRl ZmluZSB0aGUgaW50ZXJuYWwgaW50ZXJmYWNlcy4gICovCi0gZXh0ZXJuIERJUiAqX19vcGVuZGly IChjb25zdCBjaGFyICpfX25hbWUpIGF0dHJpYnV0ZV9oaWRkZW47Ci0tZXh0ZXJuIERJUiAqX19v cGVuZGlyYXQgKGludCBkZmQsIGNvbnN0IGNoYXIgKl9fbmFtLCBpbnQgZXh0cmFfZmxhZ3MsCi0t CQkJIGludCAqcG5ld19mZCkgYXR0cmlidXRlX2hpZGRlbjsKLStleHRlcm4gRElSICpfX29wZW5k aXJhdCAoaW50IGRmZCwgY29uc3QgY2hhciAqX19uYW1lKSBhdHRyaWJ1dGVfaGlkZGVuOwotIGV4 dGVybiBESVIgKl9fZmRvcGVuZGlyIChpbnQgX19mZCkgYXR0cmlidXRlX2hpZGRlbjsKLSBleHRl cm4gaW50IF9fY2xvc2VkaXIgKERJUiAqX19kaXJwKSBhdHRyaWJ1dGVfaGlkZGVuOwotIGV4dGVy biBzdHJ1Y3QgZGlyZW50ICpfX3JlYWRkaXIgKERJUiAqX19kaXJwKSBhdHRyaWJ1dGVfaGlkZGVu OwotZGlmZiAtLWdpdCBhL2luY2x1ZGUvZmxleG1lbWJlci5oIGIvaW5jbHVkZS9mbGV4bWVtYmVy LmgKLWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggYzZiYjI4NDJlYzdmZWJiMS4uMDAw MDAwMDAwMDAwMDAwMAotLS0tIGEvaW5jbHVkZS9mbGV4bWVtYmVyLmgKLSsrKyAvZGV2L251bGwK LUBAIC0xLDc3ICswLDAgQEAKLS0vKiBTaXplcyBvZiBzdHJ1Y3RzIHdpdGggZmxleGlibGUgYXJy YXkgbWVtYmVycy4KLS0KLS0gICBDb3B5cmlnaHQgMjAxNi0yMDI2IEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgotLQotLSAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJy YXJ5LgotLQotLSAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotLSAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLS0gICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLS0gICB2ZXJzaW9uIDIuMSBv ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLS0K LS0gICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLS0gICBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotLQotLSAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLS0g ICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCi0tICAg PGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLS0KLS0gICBXcml0dGVuIGJ5IFBhdWwg RWdnZXJ0LiAgKi8KLS0KLS0vKiBUaGlzIGZpbGUgdXNlcyBfQWxpZ25vZi4gICovCi0tI2lmICFf TElCQyAmJiAhX0dMX0NPTkZJR19IX0lOQ0xVREVECi0tICNlcnJvciAiUGxlYXNlIGluY2x1ZGUg Y29uZmlnLmggZmlyc3QuIgotLSNlbmRpZgotLQotLSNpbmNsdWRlIDxzdGRkZWYuaD4KLS0KLS0v KiBOb256ZXJvIG11bHRpcGxlIG9mIGFsaWdubWVudCBvZiBUWVBFLCBzdWl0YWJsZSBmb3IgRkxF WFNJWkVPRiBiZWxvdy4KLS0gICBJZiBfQWxpZ25vZiBtaWdodCBub3QgZXhpc3Qgb3IgbWlnaHQg bm90IHdvcmsgY29ycmVjdGx5IG9uCi0tICAgc3RydWN0cyB3aXRoIGZsZXhpYmxlIGFycmF5IG1l bWJlcnMsIHVzZSBhIHBlc3NpbWlzdGljIGJvdW5kIHRoYXQgaXMKLS0gICBzYWZlIGluIHByYWN0 aWNlIGV2ZW4gaWYgRkxFWElCTEVfQVJSQVlfTUVNQkVSIGlzIDEuCi0tICAgT3RoZXJ3aXNlLCB1 c2UgX0FsaWdub2YgdG8gZ2V0IGEgdGlnaHRlciBib3VuZC4gICovCi0tCi0tI2lmICFkZWZpbmVk IF9fU1REQ19WRVJTSU9OX18gfHwgX19TVERDX1ZFUlNJT05fXyA8IDIwMTExMiB8fCBkZWZpbmVk IF9BbGlnbm9mCi0tIyBkZWZpbmUgRkxFWEFMSUdOT0YodHlwZSkgKHNpemVvZiAodHlwZSkgJiB+ IChzaXplb2YgKHR5cGUpIC0gMSkpCi0tI2Vsc2UKLS0jIGRlZmluZSBGTEVYQUxJR05PRih0eXBl KSBfQWxpZ25vZiAodHlwZSkKLS0jZW5kaWYKLS0KLS0vKiBZaWVsZCBhIHByb3Blcmx5IGFsaWdu ZWQgdXBwZXIgYm91bmQgb24gdGhlIHNpemUgb2YgYSBzdHJ1Y3Qgb2YKLS0gICB0eXBlIFRZUEUg d2l0aCBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBuYW1lZCBNRU1CRVIgdGhhdCBpcwotLSAgIGZv bGxvd2VkIGJ5IE4gYnl0ZXMgb2Ygb3RoZXIgZGF0YS4gIFRoZSByZXN1bHQgaXMgc3VpdGFibGUg YXMgYW4KLS0gICBhcmd1bWVudCB0byBtYWxsb2MuICBGb3IgZXhhbXBsZToKLS0KLS0gICAgIHN0 cnVjdCBzIHsgaW50IGE7IGNoYXIgZFtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOyB9OwotLSAgICAg c3RydWN0IHMgKnAgPSBtYWxsb2MgKEZMRVhTSVpFT0YgKHN0cnVjdCBzLCBkLCBuICogc2l6ZW9m IChjaGFyKSkpOwotLQotLSAgIEZMRVhTSVpFT0YgKFRZUEUsIE1FTUJFUiwgTikgaXMgbm90IHNp bXBseSAoc2l6ZW9mIChUWVBFKSArIE4pLAotLSAgIHNpbmNlIEZMRVhJQkxFX0FSUkFZX01FTUJF UiBtYXkgYmUgMSBvbiBwcmUtQzExIHBsYXRmb3Jtcy4gIE5vciBpcwotLSAgIGl0IHNpbXBseSAo b2Zmc2V0b2YgKFRZUEUsIE1FTUJFUikgKyBOKSwgYXMgdGhhdCBtaWdodCB5aWVsZCBhIHNpemUK LS0gICB0aGF0IGNhdXNlcyBtYWxsb2MgdG8geWllbGQgYSBwb2ludGVyIHRoYXQgaXMgbm90IHBy b3Blcmx5IGFsaWduZWQKLS0gICBmb3IgVFlQRTsgZm9yIGV4YW1wbGUsIGlmIHNpemVvZiAoaW50 KSA9PSBhbGlnbm9mIChpbnQpID09IDQsCi0tICAgbWFsbG9jIChvZmZzZXRvZiAoc3RydWN0IHMs IGQpICsgMyAqIHNpemVvZiAoY2hhcikpIGlzIGVxdWl2YWxlbnQKLS0gICB0byBtYWxsb2MgKDcp IGFuZCBtaWdodCB5aWVsZCBhIHBvaW50ZXIgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0Ci0t ICAgKHdoaWNoIG1lYW5zIHRoZSBwb2ludGVyIGlzIG5vdCBwcm9wZXJseSBhbGlnbmVkIGZvciBz dHJ1Y3QgcyksCi0tICAgd2hlcmVhcyBtYWxsb2MgKEZMRVhTSVpFT0YgKHN0cnVjdCBzLCBkLCAz ICogc2l6ZW9mIChjaGFyKSkpIGlzCi0tICAgZXF1aXZhbGVudCB0byBtYWxsb2MgKDgpIGFuZCBt dXN0IHlpZWxkIGEgcG9pbnRlciB0aGF0IGlzIGEKLS0gICBtdWx0aXBsZSBvZiA0LgotLQotLSAg IFlpZWxkIGEgdmFsdWUgbGVzcyB0aGFuIE4gaWYgYW5kIG9ubHkgaWYgYXJpdGhtZXRpYyBvdmVy ZmxvdyBvY2N1cnMuICAqLwotLQotLSNkZWZpbmUgRkxFWFNJWkVPRih0eXBlLCBtZW1iZXIsIG4p IFwKLS0gICAoKG9mZnNldG9mICh0eXBlLCBtZW1iZXIpICsgRkxFWEFMSUdOT0YgKHR5cGUpIC0g MSArIChuKSkgXAotLSAgICAmIH4gKEZMRVhBTElHTk9GICh0eXBlKSAtIDEpKQotLQotLS8qIFlp ZWxkIGEgcHJvcGVybHkgYWxpZ25lZCB1cHBlciBib3VuZCBvbiB0aGUgc2l6ZSBvZiBhIHN0cnVj dCBvZgotLSAgIHR5cGUgVFlQRSB3aXRoIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIG5hbWVkIE1F TUJFUiB0aGF0IGhhcyBOCi0tICAgZWxlbWVudHMuICBUaGUgcmVzdWx0IGlzIHN1aXRhYmxlIGFz IGFuIGFyZ3VtZW50IHRvIG1hbGxvYy4KLS0gICBGb3IgZXhhbXBsZToKLS0KLS0gICAgIHN0cnVj dCBzIHsgaW50IGE7IGRvdWJsZSBkW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IH07Ci0tICAgICBz dHJ1Y3QgcyAqcCA9IG1hbGxvYyAoRkxFWE5TSVpFT0YgKHN0cnVjdCBzLCBkLCBuKSk7Ci0tICov Ci0tI2RlZmluZSBGTEVYTlNJWkVPRih0eXBlLCBtZW1iZXIsIG4pIFwKLS0gIEZMRVhTSVpFT0Yg KHR5cGUsIG1lbWJlciwgKG4pICogc2l6ZW9mICgoKHR5cGUgKikgMCktPm1lbWJlclswXSkpCi1k aWZmIC0tZ2l0IGEvaW5jbHVkZS9mdHMuaCBiL2luY2x1ZGUvZnRzLmgKLWluZGV4IDk3Mjg4NDY0 N2JkNWMyYzEuLmVhMzZhOWI5YmUyOWY4OGEgMTAwNjQ0Ci0tLS0gYS9pbmNsdWRlL2Z0cy5oCi0r KysgYi9pbmNsdWRlL2Z0cy5oCi1AQCAtMTcsMTMgKzE3LDYgQEAgdHlwZWRlZiBzdHJ1Y3QKLSAg IGludCBmdHNfbml0ZW1zOwotICAgaW50ICgqZnRzX2NvbXBhcikgKGNvbnN0IHZvaWQgKiwgY29u c3Qgdm9pZCAqKTsKLSAgIGludCBmdHNfb3B0aW9uczsKLS0gIGludCBmdHNfY3dkX2ZkOwotLSAg c3RydWN0IGhhc2hfdGFibGUgKmZ0c19sZWFmX29wdGltaXphdGlvbl93b3Jrc19odDsKLS0gIHVu aW9uIHsKLS0JICBzdHJ1Y3QgaGFzaF90YWJsZSAqaHQ7Ci0tCSAgc3RydWN0IGN5Y2xlX2NoZWNr X3N0YXRlICpzdGF0ZTsKLS0gIH0gZnRzX2N5Y2xlOwotLSAgX19JX3JpbmcgZnRzX2ZkX3Jpbmc7 Ci0gfSBGVFM2NF9USU1FNjQ7Ci0gCi0gdHlwZWRlZiBzdHJ1Y3QgX2Z0c2VudDY0X3RpbWU2NAot ZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFzaC5oIGIvaW5jbHVkZS9oYXNoLmgKLWRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAotaW5kZXggZDNjODBhZWVkZjMyYTc1Zi4uMDAwMDAwMDAwMDAwMDAwMAot LS0tIGEvaW5jbHVkZS9oYXNoLmgKLSsrKyAvZGV2L251bGwKLUBAIC0xLDMzMSArMCwwIEBACi0t LyogaGFzaCAtIGhhc2hpbmcgdGFibGUgcHJvY2Vzc2luZy4KLS0gICBDb3B5cmlnaHQgKEMpIDE5 OTgtMTk5OSwgMjAwMSwgMjAwMywgMjAwOS0yMDI2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwK LS0gICBJbmMuCi0tICAgV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQGFzY2VuZC5j b20+LCAxOTk4LgotLQotLSAgIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0tICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLS0gICBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQot LSAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0tCi0t ICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi0tICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKLS0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0tICAgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0tCi0tICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0tICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KLS0KLS0vKiBBIGdlbmVyaWMgaGFzaCB0YWJsZSBwYWNrYWdlLiAg Ki8KLS0KLS0vKiBNYWtlIHN1cmUgVVNFX09CU1RBQ0sgaXMgZGVmaW5lZCB0byAxIGlmIHlvdSB3 YW50IHRoZSBhbGxvY2F0b3IgdG8gdXNlCi0tICAgb2JzdGFja3MgaW5zdGVhZCBvZiBtYWxsb2Ms IGFuZCByZWNvbXBpbGUgJ2hhc2guYycgd2l0aCBzYW1lIHNldHRpbmcuICAqLwotLQotLSNpZm5k ZWYgSEFTSF9IXwotLSMgZGVmaW5lIEhBU0hfSF8KLS0KLS0vKiBUaGlzIGZpbGUgdXNlcyBfR0xf QVRUUklCVVRFX0RFQUxMT0MsIF9HTF9BVFRSSUJVVEVfREVQUkVDQVRFRCwKLS0gICBfR0xfQVRU UklCVVRFX01BTExPQywgX0dMX0FUVFJJQlVURV9OT0RJU0NBUkQsIF9HTF9BVFRSSUJVVEVfUFVS RSwKLS0gICBfR0xfQVRUUklCVVRFX1JFVFVSTlNfTk9OTlVMTC4gICovCi0tI2lmICFfTElCQyAm JiAhX0dMX0NPTkZJR19IX0lOQ0xVREVECi0tICNlcnJvciAiUGxlYXNlIGluY2x1ZGUgY29uZmln LmggZmlyc3QuIgotLSNlbmRpZgotLQotLSMgaW5jbHVkZSA8c3RkYm9vbC5oPgotLSMgaW5jbHVk ZSA8c3RkaW8uaD4KLS0KLS0jIGlmZGVmIF9MSUJDCi0tIyAgZGVmaW5lIF9HTF9BVFRSSUJVVEVf Tk9ESVNDQVJEICAgICAgICAgIF9fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fCi0tIyAg ZGVmaW5lIF9HTF9BVFRSSUJVVEVfTUFMTE9DICAgICAgICAgICAgIF9fYXR0cmlidXRlX21hbGxv Y19fCi0tIyAgZGVmaW5lIF9HTF9BVFRSSUJVVEVfREVBTExPQyhfX2EsIF9fYikgIF9fYXR0cl9k ZWFsbG9jIChfX2EsIF9fYikKLS0jICBkZWZpbmUgX0dMX0FUVFJJQlVURV9SRVRVUk5TX05PTk5V TEwgICAgX19yZXR1cm5zX25vbm51bGwKLS0jICBkZWZpbmUgR05VTElCX0hBU0hDT0RFX1NUUklO RzEgICAgICAgICAgMAotLSMgIGRlZmluZSBoYXNoX2dldF9uX2J1Y2tldHMgICAgICAgICAgICAg ICBfX2hhc2hfZ2V0X25fYnVja2V0cwotLSMgIGRlZmluZSBoYXNoX2dldF9uX2J1Y2tldHNfdXNl ZCAgICAgICAgICBfX2hhc2hfZ2V0X25fYnVja2V0c191c2VkCi0tIyAgZGVmaW5lIGhhc2hfZ2V0 X25fZW50cmllcyAgICAgICAgICAgICAgIF9faGFzaF9nZXRfbl9lbnRyaWVzCi0tIyAgZGVmaW5l IGhhc2hfZ2V0X21heF9idWNrZXRfbGVuZ3RoICAgICAgIF9faGFzaF9nZXRfbWF4X2J1Y2tldF9s ZW5ndGgKLS0jICBkZWZpbmUgaGFzaF90YWJsZV9vayAgICAgICAgICAgICAgICAgICAgX19oYXNo X3RhYmxlX29rCi0tIyAgZGVmaW5lIGhhc2hfcHJpbnRfc3RhdGlzdGljcyAgICAgICAgICAgIF9f aGFzaF9wcmludF9zdGF0aXN0aWNzCi0tIyAgZGVmaW5lIGhhc2hfbG9va3VwICAgICAgICAgICAg ICAgICAgICAgIF9faGFzaF9sb29rdXAKLS0jICBkZWZpbmUgaGFzaF9nZXRfZmlyc3QgICAgICAg ICAgICAgICAgICAgX19oYXNoX2dldF9maXJzdAotLSMgIGRlZmluZSBoYXNoX2dldF9uZXh0ICAg ICAgICAgICAgICAgICAgICBfX2hhc2hfZ2V0X25leHQKLS0jICBkZWZpbmUgaGFzaF9nZXRfZW50 cmllcyAgICAgICAgICAgICAgICAgX19oYXNoX2dldF9lbnRyaWVzCi0tIyAgZGVmaW5lIGhhc2hf ZG9fZm9yX2VhY2ggICAgICAgICAgICAgICAgIF9faGFzaF9kb19mb3JfZWFjaAotLSMgIGRlZmlu ZSBoYXNoX3Jlc2V0X3R1bmluZyAgICAgICAgICAgICAgICBfX2hhc2hfcmVzZXRfdHVuaW5nCi0t IyAgZGVmaW5lIGhhc2hfZnJlZSAgICAgICAgICAgICAgICAgICAgICAgIF9faGFzaF9mcmVlCi0t IyAgZGVmaW5lIGhhc2hfaW5pdGlhbGl6ZSAgICAgICAgICAgICAgICAgIF9faGFzaF9pbml0aWFs aXplCi0tIyAgZGVmaW5lIGhhc2hfeGluaXRpYWxpemUgICAgICAgICAgICAgICAgIF9faGFzaF94 aW5pdGlhbGl6ZQotLSMgIGRlZmluZSBoYXNoX2NsZWFyICAgICAgICAgICAgICAgICAgICAgICBf X2hhc2hfY2xlYXIKLS0jICBkZWZpbmUgaGFzaF9yZWhhc2ggICAgICAgICAgICAgICAgICAgICAg X19oYXNoX3JlaGFzaAotLSMgIGRlZmluZSBoYXNoX2luc2VydCAgICAgICAgICAgICAgICAgICAg ICBfX2hhc2hfaW5zZXJ0Ci0tIyAgZGVmaW5lIGhhc2hfeGluc2VydCAgICAgICAgICAgICAgICAg ICAgIF9faGFzaF94aW5zZXJ0Ci0tIyAgZGVmaW5lIGhhc2hfaW5zZXJ0X2lmX2Fic2VudCAgICAg ICAgICAgIF9faGFzaF9pbnNlcnRfaWZfYWJzZW50Ci0tIyAgZGVmaW5lIGhhc2hfcmVtb3ZlICAg ICAgICAgICAgICAgICAgICAgIF9faGFzaF9yZW1vdmUKLS0jIGVsc2UKLS0jICBkZWZpbmUgYXR0 cmlidXRlX2hpZGRlbgotLSMgZW5kaWYKLS0KLS0jIGlmZGVmIF9fY3BsdXNwbHVzCi0tZXh0ZXJu ICJDIiB7Ci0tIyBlbmRpZgotLQotLXN0cnVjdCBoYXNoX3R1bmluZwotLSAgewotLSAgICAvKiBU aGlzIHN0cnVjdHVyZSBpcyBtYWlubHkgdXNlZCBmb3IgJ2hhc2hfaW5pdGlhbGl6ZScsIHNlZSB0 aGUgYmxvY2sKLS0gICAgICAgZG9jdW1lbnRhdGlvbiBvZiAnaGFzaF9yZXNldF90dW5pbmcnIGZv ciBtb3JlIGNvbXBsZXRlIGNvbW1lbnRzLiAgKi8KLS0KLS0gICAgZmxvYXQgc2hyaW5rX3RocmVz aG9sZDsgICAgIC8qIHJhdGlvIG9mIHVzZWQgYnVja2V0cyB0byB0cmlnZ2VyIGEgc2hyaW5rICov Ci0tICAgIGZsb2F0IHNocmlua19mYWN0b3I7ICAgICAgICAvKiByYXRpbyBvZiBuZXcgc21hbGxl ciBzaXplIHRvIG9yaWdpbmFsIHNpemUgKi8KLS0gICAgZmxvYXQgZ3Jvd3RoX3RocmVzaG9sZDsg ICAgIC8qIHJhdGlvIG9mIHVzZWQgYnVja2V0cyB0byB0cmlnZ2VyIGEgZ3Jvd3RoICovCi0tICAg IGZsb2F0IGdyb3d0aF9mYWN0b3I7ICAgICAgICAvKiByYXRpbyBvZiBuZXcgYmlnZ2VyIHNpemUg dG8gb3JpZ2luYWwgc2l6ZSAqLwotLSAgICBib29sIGlzX25fYnVja2V0czsgICAgICAgICAgLyog aWYgQ0FORElEQVRFIHJlYWxseSBtZWFucyB0YWJsZSBzaXplICovCi0tICB9OwotLQotLXR5cGVk ZWYgc3RydWN0IGhhc2hfdHVuaW5nIEhhc2hfdHVuaW5nOwotLQotLXN0cnVjdCBoYXNoX3RhYmxl OwotLQotLXR5cGVkZWYgc3RydWN0IGhhc2hfdGFibGUgSGFzaF90YWJsZTsKLS0KLS0vKgotLSAq IEluZm9ybWF0aW9uIGFuZCBsb29rdXAuCi0tICovCi0tCi0tLyogVGhlIGZvbGxvd2luZyBmZXcg ZnVuY3Rpb25zIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG92ZXJhbGwgaGFzaAotLSAg IHRhYmxlIG9yZ2FuaXphdGlvbjogdGhlIG51bWJlciBvZiBlbnRyaWVzLCBudW1iZXIgb2YgYnVj a2V0cyBhbmQgbWF4aW11bQotLSAgIGxlbmd0aCBvZiBidWNrZXRzLiAgKi8KLS0KLS0vKiBSZXR1 cm4gdGhlIG51bWJlciBvZiBidWNrZXRzIGluIHRoZSBoYXNoIHRhYmxlLiAgVGhlIHRhYmxlIHNp emUsIHRoZSB0b3RhbAotLSAgIG51bWJlciBvZiBidWNrZXRzICh1c2VkIHBsdXMgdW51c2VkKSwg b3IgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNsb3RzLCBhcmUKLS0gICB0aGUgc2FtZSBxdWFudGl0 eS4gICovCi0tZXh0ZXJuIHNpemVfdCBoYXNoX2dldF9uX2J1Y2tldHMgKGNvbnN0IEhhc2hfdGFi bGUgKnRhYmxlKQotLSAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUgYXR0cmlidXRlX2hpZGRlbjsK LS0KLS0vKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzbG90cyBpbiB1c2UgKG5vbi1lbXB0eSBidWNr ZXRzKS4gICovCi0tZXh0ZXJuIHNpemVfdCBoYXNoX2dldF9uX2J1Y2tldHNfdXNlZCAoY29uc3Qg SGFzaF90YWJsZSAqdGFibGUpCi0tICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSBhdHRyaWJ1dGVf aGlkZGVuOwotLQotLS8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBlbnRyaWVzLiAgKi8K LS1leHRlcm4gc2l6ZV90IGhhc2hfZ2V0X25fZW50cmllcyAoY29uc3QgSGFzaF90YWJsZSAqdGFi bGUpCi0tICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRSBhdHRyaWJ1dGVfaGlkZGVuOwotLQotLS8q IFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0IGNoYWluIChidWNrZXQpLiAgKi8KLS1l eHRlcm4gc2l6ZV90IGhhc2hfZ2V0X21heF9idWNrZXRfbGVuZ3RoIChjb25zdCBIYXNoX3RhYmxl ICp0YWJsZSkKLS0gICAgICAgX0dMX0FUVFJJQlVURV9QVVJFIGF0dHJpYnV0ZV9oaWRkZW47Ci0t Ci0tLyogRG8gYSBtaWxkIHZhbGlkYXRpb24gb2YgYSBoYXNoIHRhYmxlLCBieSB0cmF2ZXJzaW5n IGl0IGFuZCBjaGVja2luZyB0d28KLS0gICBzdGF0aXN0aWNzLiAgKi8KLS1leHRlcm4gYm9vbCBo YXNoX3RhYmxlX29rIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKLS0gICAgICAgX0dMX0FUVFJJ QlVURV9QVVJFIGF0dHJpYnV0ZV9oaWRkZW47Ci0tCi0tZXh0ZXJuIHZvaWQgaGFzaF9wcmludF9z dGF0aXN0aWNzIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSwgRklMRSAqc3RyZWFtKQotLSAgICAg ICBhdHRyaWJ1dGVfaGlkZGVuOwotLQotLS8qIElmIEVOVFJZIG1hdGNoZXMgYW4gZW50cnkgYWxy ZWFkeSBpbiB0aGUgaGFzaCB0YWJsZSwgcmV0dXJuIHRoZQotLSAgIGVudHJ5IGZyb20gdGhlIHRh YmxlLiAgT3RoZXJ3aXNlLCByZXR1cm4gTlVMTC4gICovCi0tZXh0ZXJuIHZvaWQgKmhhc2hfbG9v a3VwIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCi0tICAgICAg IGF0dHJpYnV0ZV9oaWRkZW47Ci0tCi0tLyoKLS0gKiBXYWxraW5nLgotLSAqLwotLQotLS8qIFRo ZSBmdW5jdGlvbnMgaW4gdGhpcyBwYWdlIHRyYXZlcnNlIHRoZSBoYXNoIHRhYmxlIGFuZCBwcm9j ZXNzIHRoZQotLSAgIGNvbnRhaW5lZCBlbnRyaWVzLiAgRm9yIHRoZSB0cmF2ZXJzYWwgdG8gd29y ayBwcm9wZXJseSwgdGhlIGhhc2ggdGFibGUKLS0gICBzaG91bGQgbm90IGJlIHJlc2l6ZWQgbm9y IG1vZGlmaWVkIHdoaWxlIGFueSBwYXJ0aWN1bGFyIGVudHJ5IGlzIGJlaW5nCi0tICAgcHJvY2Vz c2VkLiAgSW4gcGFydGljdWxhciwgZW50cmllcyBzaG91bGQgbm90IGJlIGFkZGVkLCBhbmQgYW4g ZW50cnkKLS0gICBtYXkgYmUgcmVtb3ZlZCBvbmx5IGlmIHRoZXJlIGlzIG5vIHNocmluayB0aHJl c2hvbGQgYW5kIHRoZSBlbnRyeSBiZWluZwotLSAgIHJlbW92ZWQgaGFzIGFscmVhZHkgYmVlbiBw YXNzZWQgdG8gaGFzaF9nZXRfbmV4dC4gICovCi0tCi0tLyogUmV0dXJuIHRoZSBmaXJzdCBkYXRh IGluIHRoZSB0YWJsZSwgb3IgTlVMTCBpZiB0aGUgdGFibGUgaXMgZW1wdHkuICAqLwotLWV4dGVy biB2b2lkICpoYXNoX2dldF9maXJzdCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCi0tICAgICAg IF9HTF9BVFRSSUJVVEVfUFVSRSBhdHRyaWJ1dGVfaGlkZGVuOwotLQotLS8qIFJldHVybiB0aGUg dXNlciBkYXRhIGZvciB0aGUgZW50cnkgZm9sbG93aW5nIEVOVFJZLCB3aGVyZSBFTlRSWSBoYXMg YmVlbgotLSAgIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBlaXRoZXIgJ2hhc2hfZ2V0 X2ZpcnN0JyBvciAnaGFzaF9nZXRfbmV4dCcuCi0tICAgUmV0dXJuIE5VTEwgaWYgdGhlcmUgYXJl IG5vIG1vcmUgZW50cmllcy4gICovCi0tZXh0ZXJuIHZvaWQgKmhhc2hfZ2V0X25leHQgKGNvbnN0 IEhhc2hfdGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICplbnRyeSkKLS0gICAgICAgYXR0cmlidXRl X2hpZGRlbjsKLS0KLS0vKiBGaWxsIEJVRkZFUiB3aXRoIHBvaW50ZXJzIHRvIGFjdGl2ZSB1c2Vy IGVudHJpZXMgaW4gdGhlIGhhc2ggdGFibGUsIHRoZW4KLS0gICByZXR1cm4gdGhlIG51bWJlciBv ZiBwb2ludGVycyBjb3BpZWQuICBEbyBub3QgY29weSBtb3JlIHRoYW4gQlVGRkVSX1NJWkUKLS0g ICBwb2ludGVycy4gICovCi0tZXh0ZXJuIHNpemVfdCBoYXNoX2dldF9lbnRyaWVzIChjb25zdCBI YXNoX3RhYmxlICp0YWJsZSwgdm9pZCAqKmJ1ZmZlciwKLS0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBidWZmZXJfc2l6ZSkKLS0gICAgICAgYXR0cmlidXRlX2hpZGRlbjsK LS0KLS10eXBlZGVmIGJvb2wgKCpIYXNoX3Byb2Nlc3NvcikgKHZvaWQgKmVudHJ5LCB2b2lkICpw cm9jZXNzb3JfZGF0YSk7Ci0tCi0tLyogQ2FsbCBhIFBST0NFU1NPUiBmdW5jdGlvbiBmb3IgZWFj aCBlbnRyeSBvZiBhIGhhc2ggdGFibGUsIGFuZCByZXR1cm4gdGhlCi0tICAgbnVtYmVyIG9mIGVu dHJpZXMgZm9yIHdoaWNoIHRoZSBwcm9jZXNzb3IgZnVuY3Rpb24gcmV0dXJuZWQgc3VjY2Vzcy4g IEEKLS0gICBwb2ludGVyIHRvIHNvbWUgUFJPQ0VTU09SX0RBVEEgd2hpY2ggd2lsbCBiZSBtYWRl IGF2YWlsYWJsZSB0byBlYWNoIGNhbGwgdG8KLS0gICB0aGUgcHJvY2Vzc29yIGZ1bmN0aW9uLiAg VGhlIFBST0NFU1NPUiBhY2NlcHRzIHR3byBhcmd1bWVudHM6IHRoZSBmaXJzdCBpcwotLSAgIHRo ZSB1c2VyIGVudHJ5IGJlaW5nIHdhbGtlZCBpbnRvLCB0aGUgc2Vjb25kIGlzIHRoZSB2YWx1ZSBv ZiBQUk9DRVNTT1JfREFUQQotLSAgIGFzIHJlY2VpdmVkLiAgVGhlIHdhbGtpbmcgY29udGludWUg Zm9yIGFzIGxvbmcgYXMgdGhlIFBST0NFU1NPUiBmdW5jdGlvbgotLSAgIHJldHVybnMgbm9uemVy by4gIFdoZW4gaXQgcmV0dXJucyB6ZXJvLCB0aGUgd2Fsa2luZyBpcyBpbnRlcnJ1cHRlZC4gICov Ci0tZXh0ZXJuIHNpemVfdCBoYXNoX2RvX2Zvcl9lYWNoIChjb25zdCBIYXNoX3RhYmxlICp0YWJs ZSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2hfcHJvY2Vzc29yIHByb2Nl c3Nvciwgdm9pZCAqcHJvY2Vzc29yX2RhdGEpCi0tICAgICAgIGF0dHJpYnV0ZV9oaWRkZW47Ci0t Ci0tLyogUmV0dXJuIGEgaGFzaCBjb2RlIG9mIEVOVFJZLCBpbiB0aGUgcmFuZ2UgMC4uVEFCTEVf U0laRS0xLgotLSAgIFRoaXMgaGFzaCBjb2RlIGZ1bmN0aW9uIG11c3QgaGF2ZSB0aGUgcHJvcGVy dHkgdGhhdCBpZiB0aGUgY29tcGFyYXRvciBvZgotLSAgIEVOVFJZMSBhbmQgRU5UUlkyIHJldHVy bnMgdHJ1ZSwgdGhlIGhhc2hlciByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIGZvciBFTlRSWTEKLS0g ICBhbmQgZm9yIEVOVFJZMi4KLS0gICBUaGUgaGFzaCBjb2RlIGZ1bmN0aW9uIHR5cGljYWxseSBj b21wdXRlcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGFuZCBhdCB0aGUgZW5kCi0tICAgcGVyZm9ybXMg YSAlIFRBQkxFX1NJWkUgbW9kdWxvIG9wZXJhdGlvbi4gIFRoaXMgbW9kdWxvIG9wZXJhdGlvbiBp cyBwZXJmb3JtZWQKLS0gICBhcyBwYXJ0IG9mIHRoaXMgaGFzaCBjb2RlIGZ1bmN0aW9uLCBub3Qg YnkgdGhlIGNhbGxlciwgYmVjYXVzZSBpbiBzb21lIGNhc2VzCi0tICAgdGhlIHVuc2lnbmVkIGlu dGVnZXIgd2lsbCBiZSBhICdzaXplX3QnLCBpbiBvdGhlciBjYXNlcyBhbiAndWludG1heF90JyBv cgotLSAgIGV2ZW4gbGFyZ2VyLiAgKi8KLS10eXBlZGVmIHNpemVfdCAoKkhhc2hfaGFzaGVyKSAo Y29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCB0YWJsZV9zaXplKTsKLS0KLS0vKiBDb21wYXJlIHR3 byBlbnRyaWVzLCBFTlRSWTEgKGJlaW5nIGxvb2tlZCB1cCBvciBiZWluZyBpbnNlcnRlZCkgYW5k Ci0tICAgRU5UUlkyIChhbHJlYWR5IGluIHRoZSB0YWJsZSkgZm9yIGVxdWFsaXR5LiAgUmV0dXJu IHRydWUgZm9yIGVxdWFsLAotLSAgIGZhbHNlIG90aGVyd2lzZS4gICovCi0tdHlwZWRlZiBib29s ICgqSGFzaF9jb21wYXJhdG9yKSAoY29uc3Qgdm9pZCAqZW50cnkxLCBjb25zdCB2b2lkICplbnRy eTIpOwotLQotLS8qIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aGVuIGFuIEVOVFJZIGlzIHJl bW92ZWQgZnJvbSB0aGUgaGFzaCB0YWJsZS4gICovCi0tdHlwZWRlZiB2b2lkICgqSGFzaF9kYXRh X2ZyZWVyKSAodm9pZCAqZW50cnkpOwotLQotLS8qCi0tICogQWxsb2NhdGlvbiBhbmQgY2xlYW4t dXAuCi0tICovCi0tCi0tZXh0ZXJuIHZvaWQgaGFzaF9yZXNldF90dW5pbmcgKEhhc2hfdHVuaW5n ICp0dW5pbmcpCi0tICAgICAgIGF0dHJpYnV0ZV9oaWRkZW47Ci0tCi0tLyogUmVjbGFpbSBhbGwg c3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggYSBoYXNoIHRhYmxlLiAgSWYgYSBkYXRhX2ZyZWVyCi0t ICAgZnVuY3Rpb24gaGFzIGJlZW4gc3VwcGxpZWQgYnkgdGhlIHVzZXIgd2hlbiB0aGUgaGFzaCB0 YWJsZSB3YXMgY3JlYXRlZCwKLS0gICB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgaXQgdG8gdGhlIGRh dGEgb2YgZWFjaCBlbnRyeSBiZWZvcmUgZnJlZWluZyB0aGF0Ci0tICAgZW50cnkuICBUaGlzIGZ1 bmN0aW9uIHByZXNlcnZlcyBlcnJubywgbGlrZSAnZnJlZScuICAqLwotLWV4dGVybiB2b2lkIGhh c2hfZnJlZSAoSGFzaF90YWJsZSAqdGFibGUpCi0tICAgICAgIGF0dHJpYnV0ZV9oaWRkZW47Ci0t Ci0tLyogQWxsb2NhdGUgYW5kIHJldHVybiBhIG5ldyBoYXNoIHRhYmxlLCBvciBOVUxMIHVwb24g ZmFpbHVyZS4gIFRoZSBpbml0aWFsCi0tICAgbnVtYmVyIG9mIGJ1Y2tldHMgaXMgYXV0b21hdGlj YWxseSBzZWxlY3RlZCBzbyBhcyB0byBfZ3VhcmFudGVlXyB0aGF0IHlvdQotLSAgIG1heSBpbnNl cnQgYXQgbGVhc3QgQ0FORElEQVRFIGRpZmZlcmVudCB1c2VyIGVudHJpZXMgYmVmb3JlIGFueSBn cm93dGggb2YKLS0gICB0aGUgaGFzaCB0YWJsZSBzaXplIG9jY3Vycy4gIFNvLCBpZiBoYXZlIGEg cmVhc29uYWJseSB0aWdodCBhLXByaW9yaSB1cHBlcgotLSAgIGJvdW5kIG9uIHRoZSBudW1iZXIg b2YgZW50cmllcyB5b3UgaW50ZW5kIHRvIGluc2VydCBpbiB0aGUgaGFzaCB0YWJsZSwgeW91Ci0t ICAgbWF5IHNhdmUgc29tZSB0YWJsZSBtZW1vcnkgYW5kIGluc2VydGlvbiB0aW1lLCBieSBzcGVj aWZ5aW5nIGl0IGhlcmUuICBJZgotLSAgIHRoZSBJU19OX0JVQ0tFVFMgZmllbGQgb2YgdGhlIFRV TklORyBzdHJ1Y3R1cmUgaXMgdHJ1ZSwgdGhlIENBTkRJREFURQotLSAgIGFyZ3VtZW50IGhhcyBp dHMgbWVhbmluZyBjaGFuZ2VkIHRvIHRoZSB3YW50ZWQgbnVtYmVyIG9mIGJ1Y2tldHMuCi0tCi0t ICAgVFVOSU5HIHBvaW50cyB0byBhIHN0cnVjdHVyZSBvZiB1c2VyLXN1cHBsaWVkIHZhbHVlcywg aW4gY2FzZSBzb21lIGZpbmUKLS0gICB0dW5pbmcgaXMgd2FudGVkIG92ZXIgdGhlIGRlZmF1bHQg YmVoYXZpb3Igb2YgdGhlIGhhc2hlci4gIElmIFRVTklORyBpcwotLSAgIE5VTEwsIHRoZSBkZWZh dWx0IHR1bmluZyBwYXJhbWV0ZXJzIGFyZSB1c2VkIGluc3RlYWQuICBJZiBUVU5JTkcgaXMKLS0g ICBwcm92aWRlZCBidXQgdGhlIHZhbHVlcyByZXF1ZXN0ZWQgYXJlIG91dCBvZiBib3VuZHMgb3Ig bWlnaHQgY2F1c2UKLS0gICByb3VuZGluZyBlcnJvcnMsIHJldHVybiBOVUxMLgotLQotLSAgIFRo ZSB1c2VyLXN1cHBsaWVkIEhBU0hFUiBmdW5jdGlvbiwgd2hlbiBub3QgTlVMTCwgYWNjZXB0cyB0 d28KLS0gICBhcmd1bWVudHMgRU5UUlkgYW5kIFRBQkxFX1NJWkUuICBJdCBjb21wdXRlcywgYnkg aGFzaGluZyBFTlRSWSBjb250ZW50cywgYQotLSAgIHNsb3QgbnVtYmVyIGZvciB0aGF0IGVudHJ5 IHdoaWNoIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgMC4uVEFCTEVfU0laRS0xLgotLSAgIFRoaXMg c2xvdCBudW1iZXIgaXMgdGhlbiByZXR1cm5lZC4KLS0KLS0gICBUaGUgdXNlci1zdXBwbGllZCBD T01QQVJBVE9SIGZ1bmN0aW9uLCB3aGVuIG5vdCBOVUxMLCBhY2NlcHRzIHR3bwotLSAgIGFyZ3Vt ZW50cyBwb2ludGluZyB0byB1c2VyIGRhdGEsIGl0IHRoZW4gcmV0dXJucyB0cnVlIGZvciBhIHBh aXIgb2YgZW50cmllcwotLSAgIHRoYXQgY29tcGFyZSBlcXVhbCwgb3IgZmFsc2Ugb3RoZXJ3aXNl LiAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlcm5hbGx5IGNhbGxlZAotLSAgIG9uIGVudHJpZXMgd2hp Y2ggYXJlIGFscmVhZHkga25vd24gdG8gaGFzaCB0byB0aGUgc2FtZSBidWNrZXQgaW5kZXgsCi0t ICAgYnV0IHdoaWNoIGFyZSBkaXN0aW5jdCBwb2ludGVycy4KLS0KLS0gICBUaGUgdXNlci1zdXBw bGllZCBEQVRBX0ZSRUVSIGZ1bmN0aW9uLCB3aGVuIG5vdCBOVUxMLCBtYXkgYmUgbGF0ZXIgY2Fs bGVkCi0tICAgd2l0aCB0aGUgdXNlciBkYXRhIGFzIGFuIGFyZ3VtZW50LCBqdXN0IGJlZm9yZSB0 aGUgZW50cnkgY29udGFpbmluZyB0aGUKLS0gICBkYXRhIGdldHMgZnJlZWQuICBUaGlzIGhhcHBl bnMgZnJvbSB3aXRoaW4gJ2hhc2hfZnJlZScgb3IgJ2hhc2hfY2xlYXInLgotLSAgIFlvdSBzaG91 bGQgc3BlY2lmeSB0aGlzIGZ1bmN0aW9uIG9ubHkgaWYgeW91IHdhbnQgdGhlc2UgZnVuY3Rpb25z IHRvIGZyZWUKLS0gICBhbGwgb2YgeW91ciAnZGF0YScgZGF0YS4gIFRoaXMgaXMgdHlwaWNhbGx5 IHRoZSBjYXNlIHdoZW4geW91ciBkYXRhIGlzCi0tICAgc2ltcGx5IGFuIGF1eGlsaWFyeSBzdHJ1 Y3QgdGhhdCB5b3UgaGF2ZSBtYWxsb2MnZCB0byBhZ2dyZWdhdGUgc2V2ZXJhbAotLSAgIHZhbHVl cy4KLS0KLS0gICBTZXQgZXJybm8gb24gZmFpbHVyZTsgb3RoZXJ3aXNlIGVycm5vIGlzIHVuc3Bl Y2lmaWVkLiAgKi8KLS1fR0xfQVRUUklCVVRFX05PRElTQ0FSRAotLWV4dGVybiBIYXNoX3RhYmxl ICpoYXNoX2luaXRpYWxpemUgKHNpemVfdCBjYW5kaWRhdGUsCi0tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZywKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoX2hhc2hlciBoYXNoZXIsCi0tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaF9jb21wYXJhdG9yIGNvbXBhcmF0b3IsCi0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaF9kYXRhX2ZyZWVyIGRhdGFf ZnJlZXIpCi0tICBfR0xfQVRUUklCVVRFX01BTExPQyBfR0xfQVRUUklCVVRFX0RFQUxMT0MgKGhh c2hfZnJlZSwgMSkKLS0gIGF0dHJpYnV0ZV9oaWRkZW47Ci0tCi0tLyogTGlrZSBoYXNoX2luaXRp YWxpemUsIGJ1dCBpbnZva2VzIHhhbGxvY19kaWUgaW5zdGVhZCBvZiByZXR1cm5pbmcgTlVMTC4g ICovCi0tLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5IG1vZHVsZSAneGhhc2gnLiAgKi8K LS1fR0xfQVRUUklCVVRFX05PRElTQ0FSRAotLWV4dGVybiBIYXNoX3RhYmxlICpoYXNoX3hpbml0 aWFsaXplIChzaXplX3QgY2FuZGlkYXRlLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nLAotLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBIYXNoX2hhc2hlciBoYXNoZXIsCi0tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEhhc2hfY29tcGFyYXRvciBjb21wYXJhdG9yLAotLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoX2RhdGFfZnJlZXIgZGF0YV9mcmVlcikK LS0gIF9HTF9BVFRSSUJVVEVfTUFMTE9DIF9HTF9BVFRSSUJVVEVfREVBTExPQyAoaGFzaF9mcmVl LCAxKQotLSAgX0dMX0FUVFJJQlVURV9SRVRVUk5TX05PTk5VTEwKLS0gIGF0dHJpYnV0ZV9oaWRk ZW47Ci0tCi0tLyogTWFrZSBhbGwgYnVja2V0cyBlbXB0eSwgcGxhY2luZyBhbnkgY2hhaW5lZCBl bnRyaWVzIG9uIHRoZSBmcmVlIGxpc3QuCi0tICAgQXBwbHkgdGhlIHVzZXItc3BlY2lmaWVkIGZ1 bmN0aW9uIGRhdGFfZnJlZXIgKGlmIGFueSkgdG8gdGhlIGRhdGEgb2YgYW55Ci0tICAgYWZmZWN0 ZWQgZW50cmllcy4gICovCi0tZXh0ZXJuIHZvaWQgaGFzaF9jbGVhciAoSGFzaF90YWJsZSAqdGFi bGUpCi0tICBhdHRyaWJ1dGVfaGlkZGVuOzsKLS0KLS0vKgotLSAqIEluc2VydGlvbiBhbmQgZGVs ZXRpb24uCi0tICovCi0tCi0tLyogRm9yIGFuIGFscmVhZHkgZXhpc3RpbmcgaGFzaCB0YWJsZSwg Y2hhbmdlIHRoZSBudW1iZXIgb2YgYnVja2V0cyB0aHJvdWdoCi0tICAgc3BlY2lmeWluZyBDQU5E SURBVEUuICBUaGUgY29udGVudHMgb2YgdGhlIGhhc2ggdGFibGUgYXJlIHByZXNlcnZlZC4gIFRo ZQotLSAgIG5ldyBudW1iZXIgb2YgYnVja2V0cyBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHNv IGFzIHRvIF9ndWFyYW50ZWVfIHRoYXQKLS0gICB0aGUgdGFibGUgbWF5IHJlY2VpdmUgYXQgbGVh c3QgQ0FORElEQVRFIGRpZmZlcmVudCB1c2VyIGVudHJpZXMsIGluY2x1ZGluZwotLSAgIHRob3Nl IGFscmVhZHkgaW4gdGhlIHRhYmxlLCBiZWZvcmUgYW55IG90aGVyIGdyb3d0aCBvZiB0aGUgaGFz aCB0YWJsZSBzaXplCi0tICAgb2NjdXJzLiAgSWYgVFVOSU5HLT5JU19OX0JVQ0tFVFMgaXMgdHJ1 ZSwgdGhlbiBDQU5ESURBVEUgc3BlY2lmaWVzIHRoZQotLSAgIGV4YWN0IG51bWJlciBvZiBidWNr ZXRzIGRlc2lyZWQuICBSZXR1cm4gdHJ1ZSBpZmYgdGhlIHJlaGFzaCBzdWNjZWVkZWQsCi0tICAg ZmFsc2UgKHNldHRpbmcgZXJybm8pIG90aGVyd2lzZS4gICovCi0tX0dMX0FUVFJJQlVURV9OT0RJ U0NBUkQKLS1leHRlcm4gYm9vbCBoYXNoX3JlaGFzaCAoSGFzaF90YWJsZSAqdGFibGUsIHNpemVf dCBjYW5kaWRhdGUpCi0tICAgICAgIGF0dHJpYnV0ZV9oaWRkZW47Ci0tCi0tLyogSWYgRU5UUlkg bWF0Y2hlcyBhbiBlbnRyeSBhbHJlYWR5IGluIHRoZSBoYXNoIHRhYmxlLCByZXR1cm4gdGhlIHBv aW50ZXIKLS0gICB0byB0aGUgZW50cnkgZnJvbSB0aGUgdGFibGUuICBPdGhlcndpc2UsIGluc2Vy dCBFTlRSWSBhbmQgcmV0dXJuIEVOVFJZLgotLSAgIFJldHVybiBOVUxMIChzZXR0aW5nIGVycm5v KSBpZiB0aGUgc3RvcmFnZSByZXF1aXJlZCBmb3IgaW5zZXJ0aW9uCi0tICAgY2Fubm90IGJlIGFs bG9jYXRlZC4gIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9ydAotLSAgIGR1cGxp Y2F0ZSBlbnRyaWVzIG9yIGluc2VydGlvbiBvZiBOVUxMLiAgKi8KLS1fR0xfQVRUUklCVVRFX05P RElTQ0FSRAotLWV4dGVybiB2b2lkICpoYXNoX2luc2VydCAoSGFzaF90YWJsZSAqdGFibGUsIGNv bnN0IHZvaWQgKmVudHJ5KQotLSAgICAgICBhdHRyaWJ1dGVfaGlkZGVuOwotLQotLS8qIFNhbWUg YXMgaGFzaF9pbnNlcnQsIGJ1dCBpbnZva2VzIHhhbGxvY19kaWUgaW5zdGVhZCBvZiByZXR1cm5p bmcgTlVMTC4gICovCi0tLyogVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5IG1vZHVsZSAneGhh c2gnLiAgKi8KLS1leHRlcm4gdm9pZCAqaGFzaF94aW5zZXJ0IChIYXNoX3RhYmxlICp0YWJsZSwg Y29uc3Qgdm9pZCAqZW50cnkpCi0tICAgICAgIGF0dHJpYnV0ZV9oaWRkZW47Ci0tCi0tLyogSW5z ZXJ0IEVOVFJZIGludG8gaGFzaCBUQUJMRSBpZiB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIG1hdGNo aW5nIGVudHJ5LgotLQotLSAgIFJldHVybiAtMSAoc2V0dGluZyBlcnJubykgdXBvbiBtZW1vcnkg YWxsb2NhdGlvbiBmYWlsdXJlLgotLSAgIFJldHVybiAxIGlmIGluc2VydGlvbiBzdWNjZWVkZWQu Ci0tICAgUmV0dXJuIDAgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIG1hdGNoaW5nIGVudHJ5IGluIHRo ZSB0YWJsZSwKLS0gICBhbmQgaW4gdGhhdCBjYXNlLCBpZiBNQVRDSEVEX0VOVCBpcyBub24tTlVM TCwgc2V0ICpNQVRDSEVEX0VOVAotLSAgIHRvIHRoYXQgZW50cnkuCi0tCi0tICAgVGhpcyBpbnRl cmZhY2UgaXMgZWFzaWVyIHRvIHVzZSB0aGFuIGhhc2hfaW5zZXJ0IHdoZW4geW91IG11c3QKLS0g ICBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBsYXR0ZXIgdHdvIGNhc2VzLiAgTW9yZSBpbXBvcnRh bnRseSwKLS0gICBoYXNoX2luc2VydCBpcyB1bnVzYWJsZSBmb3Igc29tZSB0eXBlcyBvZiBFTlRS WSB2YWx1ZXMuICBXaGVuIHVzaW5nCi0tICAgaGFzaF9pbnNlcnQsIHRoZSBvbmx5IHdheSB0byBk aXN0aW5ndWlzaCB0aG9zZSBjYXNlcyBpcyB0byBjb21wYXJlCi0tICAgdGhlIHJldHVybiB2YWx1 ZSBhbmQgRU5UUlkuICBUaGF0IHdvcmtzIG9ubHkgd2hlbiB5b3UgY2FuIGhhdmUgdHdvCi0tICAg ZGlmZmVyZW50IEVOVFJZIHZhbHVlcyB0aGF0IHBvaW50IHRvIGRhdGEgdGhhdCBjb21wYXJlcyAi ZXF1YWwiLiAgVGh1cywKLS0gICB3aGVuIHRoZSBFTlRSWSB2YWx1ZSBpcyBhIHNpbXBsZSBzY2Fs YXIsIHlvdSBtdXN0IHVzZQotLSAgIGhhc2hfaW5zZXJ0X2lmX2Fic2VudC4gIEVOVFJZIG11c3Qg bm90IGJlIE5VTEwuICAqLwotLWV4dGVybiBpbnQgaGFzaF9pbnNlcnRfaWZfYWJzZW50IChIYXNo X3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnksCi0tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiptYXRjaGVkX2VudCkKLS0gICAgICAgYXR0cmlidXRl X2hpZGRlbjsKLS0KLS0vKiBJZiBFTlRSWSBpcyBhbHJlYWR5IGluIHRoZSB0YWJsZSwgcmVtb3Zl IGl0IGFuZCByZXR1cm4gdGhlIGp1c3QtZGVsZXRlZAotLSAgIGRhdGEgKHRoZSB1c2VyIG1heSB3 YW50IHRvIGRlYWxsb2NhdGUgaXRzIHN0b3JhZ2UpLiAgSWYgRU5UUlkgaXMgbm90IGluIHRoZQot LSAgIHRhYmxlLCBkb24ndCBtb2RpZnkgdGhlIHRhYmxlIGFuZCByZXR1cm4gTlVMTC4gICovCi0t ZXh0ZXJuIHZvaWQgKmhhc2hfcmVtb3ZlIChIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAq ZW50cnkpCi0tICAgICAgIGF0dHJpYnV0ZV9oaWRkZW47Ci0tCi0tCi0tIyBpZiBHTlVMSUJfSEFT SENPREVfU1RSSU5HMQotLS8qIEluY2x1ZGUgZGVjbGFyYXRpb25zIG9mIG1vZHVsZSAnaGFzaGNv ZGUtc3RyaW5nMScuICAqLwotLSMgIGluY2x1ZGUgImhhc2hjb2RlLXN0cmluZzEuaCIKLS0jIGVu ZGlmCi0tCi0tIyBpZmRlZiBfX2NwbHVzcGx1cwotLX0KLS0jIGVuZGlmCi0tCi0tI2VuZGlmCi1k aWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXh0LXByaW1lLmggYi9pbmNsdWRlL25leHQtcHJpbWUuaAot ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAyZWU5NjU5ODJiMDcxMTMzLi4wMDAwMDAw MDAwMDAwMDAwCi0tLS0gYS9pbmNsdWRlL25leHQtcHJpbWUuaAotKysrIC9kZXYvbnVsbAotQEAg LTEsNDcgKzAsMCBAQAotLS8qIEZpbmRpbmcgdGhlIG5leHQgcHJpbWUgPj0gYSBnaXZlbiBzbWFs bCBpbnRlZ2VyLgotLSAgIENvcHlyaWdodCAoQykgMTk5NS0yMDI2IEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgotLQotLSAgIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0tICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLS0gICBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRo ZQotLSAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0t Ci0tICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCi0tICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLS0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0tICAgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0tCi0tICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0t ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KLS0KLS0jaWZuZGVmIF9HTF9ORVhUX1BSSU1FX0gKLS0jZGVm aW5lIF9HTF9ORVhUX1BSSU1FX0gKLS0KLS0vKiBUaGlzIGZpbGUgdXNlcyBfR0xfQVRUUklCVVRF X0NPTlNULiAgKi8KLS0jaWYgIV9MSUJDICYmICFfR0xfQ09ORklHX0hfSU5DTFVERUQKLS0gI2Vy cm9yICJQbGVhc2UgaW5jbHVkZSBjb25maWcuaCBmaXJzdC4iCi0tI2VuZGlmCi0tCi0tI2luY2x1 ZGUgPHN0ZGRlZi5oPgotLQotLSNpZmRlZiBfX2NwbHVzcGx1cwotLWV4dGVybiAiQyIgewotLSNl bmRpZgotLQotLSNpZmRlZiBfTElCQwotLSMgZGVmaW5lIG5leHRfcHJpbWUgX19uZXh0X3ByaW1l Ci0tI2Vsc2UKLS0jIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCi0tI2VuZGlmCi0tCi0tLyogUm91 bmQgYSBnaXZlbiBDQU5ESURBVEUgbnVtYmVyIHVwIHRvIHRoZSBuZWFyZXN0IHByaW1lLCBhbmQg cmV0dXJuIHRoYXQKLS0gICBwcmltZS4gIFByaW1lcyBsb3dlciB0aGFuIDEwIGFyZSBtZXJlbHkg c2tpcHBlZC4gICovCi0tZXh0ZXJuIHNpemVfdCBfR0xfQVRUUklCVVRFX0NPTlNUIG5leHRfcHJp bWUgKHNpemVfdCBjYW5kaWRhdGUpCi0tICBhdHRyaWJ1dGVfaGlkZGVuOzsKLS0KLS0KLS0jaWZk ZWYgX19jcGx1c3BsdXMKLS19Ci0tI2VuZGlmCi0tCi0tI2VuZGlmIC8qIF9HTF9ORVhUX1BSSU1F X0ggKi8KLWRpZmYgLS1naXQgYS9pbmNsdWRlL3hhbGxvYy1vdmVyc2l6ZWQuaCBiL2luY2x1ZGUv eGFsbG9jLW92ZXJzaXplZC5oCi1kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IGNlY2Rh ZWM1MWVmNGUzMGIuLjAwMDAwMDAwMDAwMDAwMDAKLS0tLSBhL2luY2x1ZGUveGFsbG9jLW92ZXJz aXplZC5oCi0rKysgL2Rldi9udWxsCi1AQCAtMSw2NSArMCwwIEBACi0tLyogeGFsbG9jLW92ZXJz aXplZC5oIC0tIG1lbW9yeSBhbGxvY2F0aW9uIHNpemUgY2hlY2tpbmcKLS0KLS0gICBDb3B5cmln aHQgKEMpIDE5OTAtMjAwMCwgMjAwMy0yMDA0LCAyMDA2LTIwMjYgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCi0tCi0tICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLS0gICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotLSAgIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhl Ci0tICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLS0K LS0gICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKLS0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgotLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLS0gICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLS0KLS0gICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLS0g ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uICAqLwotLQotLSNpZm5kZWYgWEFMTE9DX09WRVJTSVpFRF9IXwotLSNk ZWZpbmUgWEFMTE9DX09WRVJTSVpFRF9IXwotLQotLSNpbmNsdWRlIDxzdGRkZWYuaD4KLS0jaW5j bHVkZSA8c3RkaW50Lmg+Ci0tCi0tLyogVHJ1ZSBpZiBOICogUyBkb2VzIG5vdCBmaXQgaW50byBi b3RoIHB0cmRpZmZfdCBhbmQgc2l6ZV90LgotLSAgIE4gYW5kIFMgc2hvdWxkIGJlIG5vbm5lZ2F0 aXZlIGFuZCBmcmVlIG9mIHNpZGUgZWZmZWN0cy4KLS0gICBUaGlzIGV4cGFuZHMgdG8gYSBjb25z dGFudCBleHByZXNzaW9uIGlmIE4gYW5kIFMgYXJlIGJvdGggY29uc3RhbnRzLgotLSAgIEJ5IGdu dWxpYiBjb252ZW50aW9uLCBTSVpFX01BWCByZXByZXNlbnRzIG92ZXJmbG93IGluIHNpemVfdAot LSAgIGNhbGN1bGF0aW9ucywgc28gdGhlIGNvbnNlcnZhdGl2ZSBzaXplX3QtYmFzZWQgZGl2aWRl bmQgdG8gdXNlIGhlcmUKLS0gICBpcyBTSVpFX01BWCAtIDEuICAqLwotLSNkZWZpbmUgX194YWxs b2Nfb3ZlcnNpemVkKG4sIHMpIFwKLS0gICgocykgIT0gMCBcCi0tICAgJiYgKFBUUkRJRkZfTUFY IDwgU0laRV9NQVggPyBQVFJESUZGX01BWCA6IFNJWkVfTUFYIC0gMSkgLyAocykgPCAobikpCi0t Ci0tLyogUmV0dXJuIDEgaWYgYW5kIG9ubHkgaWYgYW4gYXJyYXkgb2YgTiBvYmplY3RzLCBlYWNo IG9mIHNpemUgUywKLS0gICBjYW5ub3QgZXhpc3QgcmVsaWFibHkgYmVjYXVzZSBpdHMgdG90YWwg c2l6ZSBpbiBieXRlcyB3b3VsZCBleGNlZWQKLS0gICBNSU4gKFBUUkRJRkZfTUFYLCBTSVpFX01B WCAtIDEpLgotLQotLSAgIE4gYW5kIFMgc2hvdWxkIGJlIG5vbm5lZ2F0aXZlIGFuZCBmcmVlIG9m IHNpZGUgZWZmZWN0cy4KLS0KLS0gICBXYXJuaW5nOiAoeGFsbG9jX292ZXJzaXplZCAoTiwgUykg PyBOVUxMIDogbWFsbG9jIChOICogUykpIGNhbgotLSAgIG1pc2JlaGF2ZSBpZiBOIGFuZCBTIGFy ZSBib3RoIG5hcnJvd2VyIHRoYW4gcHRyZGlmZl90IGFuZCBzaXplX3QsCi0tICAgYW5kIGNhbiBi ZSByZXdyaXR0ZW4gYXMgKHhhbGxvY19vdmVyc2l6ZWQgKE4sIFMpID8gIE5VTEwKLS0gICA6IG1h bGxvYyAoTiAqIChzaXplX3QpIFMpKS4KLS0KLS0gICBUaGlzIGlzIGEgbWFjcm8sIG5vdCBhIGZ1 bmN0aW9uLCBzbyB0aGF0IGl0IHdvcmtzIGV2ZW4gaWYgYW4KLS0gICBhcmd1bWVudCBleGNlZWRz IE1BWCAoUFRSRElGRl9NQVgsIFNJWkVfTUFYKS4gICovCi0tI2lmIDcgPD0gX19HTlVDX18gJiYg IWRlZmluZWQgX19jbGFuZ19fICYmIFBUUkRJRkZfTUFYIDwgU0laRV9NQVgKLS0jIGRlZmluZSB4 YWxsb2Nfb3ZlcnNpemVkKG4sIHMpIFwKLS0gICBfX2J1aWx0aW5fbXVsX292ZXJmbG93X3AgKG4s IHMsIChwdHJkaWZmX3QpIDEpCi0tI2VsaWYgNSA8PSBfX0dOVUNfXyAmJiAhZGVmaW5lZCBfX2Ns YW5nX18gJiYgIWRlZmluZWQgX19JQ0MgXAotLSAgICAgICYmIFBUUkRJRkZfTUFYIDwgU0laRV9N QVgKLS0jIGRlZmluZSB4YWxsb2Nfb3ZlcnNpemVkKG4sIHMpIFwKLS0gICAoX19idWlsdGluX2Nv bnN0YW50X3AgKG4pICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChzKSBcCi0tICAgID8gX194YWxs b2Nfb3ZlcnNpemVkIChuLCBzKSBcCi0tICAgIDogX19leHRlbnNpb25fXyBcCi0tICAgICAgICAo eyBwdHJkaWZmX3QgX194YWxsb2NfY291bnQ7IFwKLS0gICAgICAgICAgIF9fYnVpbHRpbl9tdWxf b3ZlcmZsb3cgKG4sIHMsICZfX3hhbGxvY19jb3VudCk7IH0pKQotLQotLS8qIE90aGVyIGNvbXBp bGVycyB1c2UgaW50ZWdlciBkaXZpc2lvbjsgdGhpcyBtYXkgYmUgc2xvd2VyIGJ1dCBpcwotLSAg IG1vcmUgcG9ydGFibGUuICAqLwotLSNlbHNlCi0tIyBkZWZpbmUgeGFsbG9jX292ZXJzaXplZChu LCBzKSBfX3hhbGxvY19vdmVyc2l6ZWQgKG4sIHMpCi0tI2VuZGlmCi0tCi0tI2VuZGlmIC8qICFY QUxMT0NfT1ZFUlNJWkVEX0hfICovCi1kaWZmIC0tZ2l0IGEvaW8vTWFrZWZpbGUgYi9pby9NYWtl ZmlsZQotaW5kZXggMmE1YjRkY2I2NTRmMzM1Mi4uODBlNTA1NzhiMjlmNGQ4MCAxMDA2NDQKLS0t LSBhL2lvL01ha2VmaWxlCi0rKysgYi9pby9NYWtlZmlsZQotQEAgLTE5Nyw5ICsxOTcsNyBAQCB0 ZXN0cyA6PSBcCi0gICB0c3QtZmNudGwtbG9jay1sZnMgXAotICAgdHN0LWZzdGF0YXQgXAotICAg dHN0LWZ0cyBcCi0tICB0c3QtZnRzLWJ6MjI5NDQgXAotICAgdHN0LWZ0cy1sZnMgXAotLSAgdHN0 LWZ0cy1uZXdmbGFncyBcCi0gICB0c3QtZnR3LWJ6MjYzNTMgXAotICAgdHN0LWZ0dy1iejI4MTI2 IFwKLSAgIHRzdC1mdHctbG5rIFwKLWRpZmYgLS1naXQgYS9pby9jeWNsZS1jaGVjay5jIGIvaW8v Y3ljbGUtY2hlY2suYwotZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAzYTIwZDI4YWVj ODk3NTk1Li4wMDAwMDAwMDAwMDAwMDAwCi0tLS0gYS9pby9jeWNsZS1jaGVjay5jCi0rKysgL2Rl di9udWxsCi1AQCAtMSw4NSArMCwwIEBACi0tCi0tLyogaGVscCBkZXRlY3QgZGlyZWN0b3J5IGN5 Y2xlcyBlZmZpY2llbnRseQotLQotLSAgIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA5LTIw MjYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0tCi0tICAgVGhpcyBmaWxlIGlzIGZy ZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLS0gICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcwotLSAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyLjEgb2YgdGhlCi0tICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KLS0KLS0gICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLS0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotLSAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLS0gICBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLS0KLS0g ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKLS0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg c2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotLQotLS8qIFdyaXR0ZW4g YnkgSmltIE1leWVyaW5nICovCi0tCi0tI2luY2x1ZGUgPGNvbmZpZy5oPgotLQotLSNpbmNsdWRl ICJjeWNsZS1jaGVjay5oIgotLQotLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLS0jaW5jbHVkZSA8 c3lzL3N0YXQuaD4KLS0jaW5jbHVkZSA8c3RkaW8uaD4KLS0jaW5jbHVkZSA8c3RkbGliLmg+Ci0t Ci0tI2luY2x1ZGUgImFzc3VyZS5oIgotLQotLSNkZWZpbmUgQ0NfTUFHSUMgOTgyNzg2MgotLQot LS8qIFJldHVybiB0cnVlIGlmIEkgaXMgYSBwb3dlciBvZiAyLCBvciBpcyB6ZXJvLiAgKi8KLS0K LS1zdGF0aWMgYm9vbAotLWlzX3plcm9fb3JfcG93ZXJfb2ZfdHdvICh1aW50bWF4X3QgaSkKLS17 Ci0tICByZXR1cm4gKGkgJiAoaSAtIDEpKSA9PSAwOwotLX0KLS0KLS1JTlRFUk5BTF9ERUYgdm9p ZAotLWN5Y2xlX2NoZWNrX2luaXQgKHN0cnVjdCBjeWNsZV9jaGVja19zdGF0ZSAqc3RhdGUpCi0t ewotLSAgc3RhdGUtPmNoZGlyX2NvdW50ZXIgPSAwOwotLSAgc3RhdGUtPm1hZ2ljID0gQ0NfTUFH SUM7Ci0tfQotLQotLS8qIEluIHRyYXZlcnNpbmcgYSBkaXJlY3RvcnkgaGllcmFyY2h5LCBjYWxs IHRoaXMgZnVuY3Rpb24gb25jZSBmb3IgZWFjaAotLSAgIGRlc2NlbmRpbmcgY2hkaXIgY2FsbCwg d2l0aCBTQiBjb3JyZXNwb25kaW5nIHRvIHRoZSBjaGRpciBvcGVyYW5kLgotLSAgIElmIFNCIGNv cnJlc3BvbmRzIHRvIGEgZGlyZWN0b3J5IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBzZWVuLAotLSAg IHJldHVybiB0cnVlIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgYSBkaXJlY3RvcnkgY3ljbGUu Ci0tICAgTm90ZSB0aGF0IHRoaXMgaXMgZG9uZSAibGF6aWx5Iiwgd2hpY2ggbWVhbnMgdGhhdCBz b21lIG9mCi0tICAgdGhlIGRpcmVjdG9yaWVzIGluIHRoZSBjeWNsZSBtYXkgYmUgcHJvY2Vzc2Vk IHR3aWNlIGJlZm9yZQotLSAgIHRoZSBjeWNsZSBpcyBkZXRlY3RlZC4gICovCi0tCi0tSU5URVJO QUxfREVGIGJvb2wKLS1jeWNsZV9jaGVjayAoc3RydWN0IGN5Y2xlX2NoZWNrX3N0YXRlICpzdGF0 ZSwgc3RydWN0IFNUUlVDVF9TVEFUIGNvbnN0ICpzYikKLS17Ci0tICBhc3N1cmUgKHN0YXRlLT5t YWdpYyA9PSBDQ19NQUdJQyk7Ci0tCi0tICAvKiBJZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgZXZl ciBoYXBwZW5zIHRvIGJlIHRoZSBzYW1lCi0tICAgICBhcyB0aGUgb25lIHdlIGxhc3QgcmVjb3Jk ZWQgZm9yIHRoZSBjeWNsZSBkZXRlY3Rpb24sCi0tICAgICB0aGVuIGl0J3Mgb2J2aW91c2x5IHBh cnQgb2YgYSBjeWNsZS4gICovCi0tICBpZiAoc3RhdGUtPmNoZGlyX2NvdW50ZXIgJiYgU0FNRV9J Tk9ERSAoKnNiLCBzdGF0ZS0+ZGV2X2lubykpCi0tICAgIHJldHVybiB0cnVlOwotLQotLSAgLyog SWYgdGhlIG51bWJlciBvZiAiZGVzY2VuZGluZyIgY2hkaXIgY2FsbHMgaXMgYSBwb3dlciBvZiB0 d28sCi0tICAgICByZWNvcmQgdGhlIGRldi9pbm8gb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAg Ki8KLS0gIGlmIChpc196ZXJvX29yX3Bvd2VyX29mX3R3byAoKysoc3RhdGUtPmNoZGlyX2NvdW50 ZXIpKSkKLS0gICAgewotLSAgICAgIC8qIE9uIGFsbCBhcmNoaXRlY3R1cmVzIHRoYXQgd2Uga25v dyBhYm91dCwgaWYgdGhlIGNvdW50ZXIKLS0gICAgICAgICBvdmVyZmxvd3MgdGhlbiB0aGVyZSBp cyBhIGRpcmVjdG9yeSBjeWNsZSBoZXJlIHNvbWV3aGVyZSwKLS0gICAgICAgICBldmVuIGlmIHdl IGhhdmVuJ3QgZGV0ZWN0ZWQgaXQgeWV0LiAgVHlwaWNhbGx5IHRoaXMgaGFwcGVucwotLSAgICAg ICAgIG9ubHkgYWZ0ZXIgdGhlIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgMioqNjQgdGltZXMsIHNv IGl0J3MgYQotLSAgICAgICAgIGZhaXJseSB0aGVvcmV0aWNhbCBwb2ludC4gICovCi0tICAgICAg aWYgKHN0YXRlLT5jaGRpcl9jb3VudGVyID09IDApCi0tICAgICAgICByZXR1cm4gdHJ1ZTsKLS0K LS0gICAgICBzdGF0ZS0+ZGV2X2luby5zdF9kZXYgPSBzYi0+c3RfZGV2OwotLSAgICAgIHN0YXRl LT5kZXZfaW5vLnN0X2lubyA9IHNiLT5zdF9pbm87Ci0tICAgIH0KLS0KLS0gIHJldHVybiBmYWxz ZTsKLS19Ci1kaWZmIC0tZ2l0IGEvaW8vY3ljbGUtY2hlY2suaCBiL2lvL2N5Y2xlLWNoZWNrLmgK LWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDE1Mjk5MmNlZDUxODEyNS4uMDAwMDAw MDAwMDAwMDAwMAotLS0tIGEvaW8vY3ljbGUtY2hlY2suaAotKysrIC9kZXYvbnVsbAotQEAgLTEs NzAgKzAsMCBAQAotLQotLS8qIGhlbHAgZGV0ZWN0IGRpcmVjdG9yeSBjeWNsZXMgZWZmaWNpZW50 bHkKLS0KLS0gICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCwgMjAwNiwgMjAwOS0yMDI2IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotLQotLSAgIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3 YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0tICAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLS0g ICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMi4xIG9mIHRoZQotLSAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCi0tCi0tICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0tICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLS0gICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0tICAgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0tCi0tICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCi0tICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0 cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLS0KLS0vKiBXcml0dGVuIGJ5IEppbSBN ZXllcmluZyAqLwotLQotLSNpZm5kZWYgQ1lDTEVfQ0hFQ0tfSAotLSNkZWZpbmUgQ1lDTEVfQ0hF Q0tfSCAxCi0tCi0tI2luY2x1ZGUgPHN0ZGludC5oPgotLSNpbmNsdWRlICJkZXYtaW5vLmgiCi0t I2luY2x1ZGUgInNhbWUtaW5vZGUuaCIKLS0KLS0jaWZkZWYgX19jcGx1c3BsdXMKLS1leHRlcm4g IkMiIHsKLS0jZW5kaWYKLS0KLS0jaWYgX0xJQkMKLS0jIGRlZmluZSBjeWNsZV9jaGVja19pbml0 IF9fY3ljbGVfY2hlY2tfaW5pdAotLSMgZGVmaW5lIGN5Y2xlX2NoZWNrICAgICAgX19jeWNsZV9j aGVjawotLSMgZGVmaW5lIElOVEVSTkFMX0RFRiAgICAgc3RhdGljCi0tI2Vsc2UKLS0jIGRlZmlu ZSBJTlRFUk5BTF9ERUYKLS0jZW5kaWYKLS0KLS1zdHJ1Y3QgY3ljbGVfY2hlY2tfc3RhdGUKLS17 Ci0tICBzdHJ1Y3QgZGV2X2lubyBkZXZfaW5vOwotLSAgdWludG1heF90IGNoZGlyX2NvdW50ZXI7 Ci0tICBpbnQgbWFnaWM7Ci0tfTsKLS0KLS1JTlRFUk5BTF9ERUYgdm9pZCBjeWNsZV9jaGVja19p bml0IChzdHJ1Y3QgY3ljbGVfY2hlY2tfc3RhdGUgKnN0YXRlKTsKLS1JTlRFUk5BTF9ERUYgYm9v bCBjeWNsZV9jaGVjayAoc3RydWN0IGN5Y2xlX2NoZWNrX3N0YXRlICpzdGF0ZSwKLS0JCQkgICAg ICAgc3RydWN0IFNUUlVDVF9TVEFUIGNvbnN0ICpzYik7Ci0tCi0tI2RlZmluZSBDWUNMRV9DSEVD S19SRUZMRUNUX0NIRElSX1VQKFN0YXRlLCBTQl9kaXIsIFNCX3N1YmRpcikgXAotLSAgZG8gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0tICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLS0gICAgICAvKiBZb3UgbXVzdCBjYWxsIGN5Y2xlX2NoZWNrIGF0IGxlYXN0 IG9uY2UgYmVmb3JlIHVzaW5nIHRoaXMgbWFjcm8uICAqLyBcCi0tICAgICAgaWYgKChTdGF0ZSkt PmNoZGlyX2NvdW50ZXIgPT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgICAg IGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotLSAgICAgIGlmIChTQU1FX0lOT0RFICgoU3RhdGUpLT5kZXZfaW5vLCBTQl9zdWJkaXIpKSAg ICAgICAgICAgICBcCi0tICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgICAgICAgKFN0YXRlKS0+ZGV2X2luby5zdF9k ZXYgPSAoU0JfZGlyKS5zdF9kZXY7ICAgICAgICAgICAgXAotLSAgICAgICAgICAoU3RhdGUpLT5k ZXZfaW5vLnN0X2lubyA9IChTQl9kaXIpLnN0X2lubzsgICAgICAgICAgICBcCi0tICAgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LS0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotLSAgd2hpbGUgKDApCi0tCi0tCi0tI2lmZGVmIF9fY3BsdXNwbHVzCi0tfQot LSNlbmRpZgotLQotLSNlbmRpZgotZGlmZiAtLWdpdCBhL2lvL2Rldi1pbm8uaCBiL2lvL2Rldi1p bm8uaAotZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCA5YjE4NzhjNzlmMmVhYmFmLi4w MDAwMDAwMDAwMDAwMDAwCi0tLS0gYS9pby9kZXYtaW5vLmgKLSsrKyAvZGV2L251bGwKLUBAIC0x LDQ0ICswLDAgQEAKLS0vKiBBIHNpbXBsZSAoZGV2aWNlLCBpbm9kZSkgc3RydWN0LgotLSAgIENv cHlyaWdodCAoQykgMjAwMy0yMDI2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotLQot LSAgIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Ci0tICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLS0gICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQotLSAgIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0tCi0tICAgVGhpcyBmaWxlIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0tICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKLS0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCi0tICAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0tCi0tICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0tICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KLS0KLS0vKiBXcml0dGVuIGJ5IEppbSBNZXllcmluZywgMjAwMy4gICovCi0tCi0tI2lmbmRl ZiBERVZfSU5PX0gKLS0jZGVmaW5lIERFVl9JTk9fSCAxCi0tCi0tI2luY2x1ZGUgPHN5cy90eXBl cy5oPgotLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotLQotLSNpZmRlZiBfX2NwbHVzcGx1cwotLWV4 dGVybiAiQyIgewotLSNlbmRpZgotLQotLSNpZm5kZWYgSU5PX1QKLS0jZGVmaW5lIElOT19UIGlu b190Ci0tI2VuZGlmCi0tCi0tc3RydWN0IGRldl9pbm8KLS17Ci0tICBJTk9fVCBzdF9pbm87Ci0t ICBkZXZfdCBzdF9kZXY7Ci0tfTsKLS0KLS0KLS0jaWZkZWYgX19jcGx1c3BsdXMKLS19Ci0tI2Vu ZGlmCi0tCi0tI2VuZGlmCi1kaWZmIC0tZ2l0IGEvaW8vZnRzLWN5Y2xlLmMgYi9pby9mdHMtY3lj bGUuYwotZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCA2YmJjOWY5NDQ2MDU5NWNiLi4w MDAwMDAwMDAwMDAwMDAwCi0tLS0gYS9pby9mdHMtY3ljbGUuYwotKysrIC9kZXYvbnVsbAotQEAg LTEsMTYyICswLDAgQEAKLS0vKiBEZXRlY3QgY3ljbGVzIGluIGZpbGUgdHJlZSB3YWxrcy4KLS0K LS0gICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOS0yMDI2IEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgotLQotLSAgIFdyaXR0ZW4gYnkgSmltIE1leWVyaW5nLgotLQotLSAgIFRo aXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Ci0tICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMKLS0gICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQotLSAgIExpY2Vuc2UsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0tCi0tICAgVGhpcyBmaWxlIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0tICAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLS0g ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCi0tICAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0tCi0tICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0tICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLS0K LS0jaW5jbHVkZSAiY3ljbGUtY2hlY2suaCIKLS0jaW5jbHVkZSAiaGFzaC5oIgotLQotLSNpZm5k ZWYgRlRTX09QRU4KLS0jIGRlZmluZSBGVFNPQkogRlRTCi0tIyBkZWZpbmUgRlRTRU5UUlkgRlRT RU5UCi0tI2VuZGlmCi0tCi0tLyogVXNlIGVhY2ggb2YgdGhlc2UgdG8gbWFwIGEgZGV2aWNlL2lu b2RlIHBhaXIgdG8gYW4gRlRTRU5ULiAgKi8KLS1zdHJ1Y3QgQWN0aXZlX2RpcgotLXsKLS0gIGRl dl90IGRldjsKLS0gIElOT19UIGlubzsKLS0gIEZUU0VOVFJZICpmdHNfZW50OwotLX07Ci0tCi0t c3RhdGljIGJvb2wKLS1BRF9jb21wYXJlICh2b2lkIGNvbnN0ICp4LCB2b2lkIGNvbnN0ICp5KQot LXsKLS0gIHN0cnVjdCBBY3RpdmVfZGlyIGNvbnN0ICpheCA9IHg7Ci0tICBzdHJ1Y3QgQWN0aXZl X2RpciBjb25zdCAqYXkgPSB5OwotLSAgcmV0dXJuIGF4LT5pbm8gPT0gYXktPmlubwotLSAgICAg ICYmIGF4LT5kZXYgPT0gYXktPmRldjsKLS19Ci0tCi0tc3RhdGljIHNpemVfdAotLUFEX2hhc2gg KHZvaWQgY29uc3QgKngsIHNpemVfdCB0YWJsZV9zaXplKQotLXsKLS0gIHN0cnVjdCBBY3RpdmVf ZGlyIGNvbnN0ICpheCA9IHg7Ci0tICByZXR1cm4gKHVpbnRtYXhfdCkgYXgtPmlubyAlIHRhYmxl X3NpemU7Ci0tfQotLQotLS8qIFNldCB1cCB0aGUgY3ljbGUtZGV0ZWN0aW9uIG1hY2hpbmVyeS4g ICovCi0tCi0tc3RhdGljIGJvb2wKLS1zZXR1cF9kaXIgKEZUU09CSiAqZnRzKQotLXsKLS0gIGlm IChmdHMtPmZ0c19vcHRpb25zICYgKEZUU19USUdIVF9DWUNMRV9DSEVDSyB8IEZUU19MT0dJQ0FM KSkKLS0gICAgewotLSAgICAgIGVudW0geyBIVF9JTklUSUFMX1NJWkUgPSAzMSB9OwotLSAgICAg IGZ0cy0+ZnRzX2N5Y2xlLmh0ID0gaGFzaF9pbml0aWFsaXplIChIVF9JTklUSUFMX1NJWkUsIE5V TEwsIEFEX2hhc2gsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFEX2NvbXBhcmUsIGZyZWUpOwotLSAgICAgIGlmICghIGZ0cy0+ZnRzX2N5Y2xlLmh0KQotLSAg ICAgICAgcmV0dXJuIGZhbHNlOwotLSAgICB9Ci0tICBlbHNlCi0tICAgIHsKLS0gICAgICBmdHMt PmZ0c19jeWNsZS5zdGF0ZSA9IG1hbGxvYyAoc2l6ZW9mICpmdHMtPmZ0c19jeWNsZS5zdGF0ZSk7 Ci0tICAgICAgaWYgKCEgZnRzLT5mdHNfY3ljbGUuc3RhdGUpCi0tICAgICAgICByZXR1cm4gZmFs c2U7Ci0tICAgICAgY3ljbGVfY2hlY2tfaW5pdCAoZnRzLT5mdHNfY3ljbGUuc3RhdGUpOwotLSAg ICB9Ci0tCi0tICByZXR1cm4gdHJ1ZTsKLS19Ci0tCi0tLyogRW50ZXIgYSBkaXJlY3RvcnkgZHVy aW5nIGEgZmlsZSB0cmVlIHdhbGsuICAqLwotLQotLXN0YXRpYyBib29sCi0tZW50ZXJfZGlyIChG VFNPQkogKmZ0cywgRlRTRU5UUlkgKmVudCkKLS17Ci0tICBpZiAoZnRzLT5mdHNfb3B0aW9ucyAm IChGVFNfVElHSFRfQ1lDTEVfQ0hFQ0sgfCBGVFNfTE9HSUNBTCkpCi0tICAgIHsKLS0gICAgICBz dHJ1Y3QgQWN0aXZlX2RpciAqYWQgPSBtYWxsb2MgKHNpemVvZiAqYWQpOwotLSAgICAgIGlmICgh YWQpCi0tICAgICAgICByZXR1cm4gZmFsc2U7Ci0tCi0tICAgICAgc3RydWN0IFNUUlVDVF9TVEFU IGNvbnN0ICpzdCA9IGVudC0+ZnRzX3N0YXRwOwotLSAgICAgIGFkLT5kZXYgPSBzdC0+c3RfZGV2 OwotLSAgICAgIGFkLT5pbm8gPSBzdC0+c3RfaW5vOwotLSAgICAgIGFkLT5mdHNfZW50ID0gZW50 OwotLQotLSAgICAgIC8qIFNlZSBpZiB3ZSd2ZSBhbHJlYWR5IGVuY291bnRlcmVkIHRoaXMgZGly ZWN0b3J5LgotLSAgICAgICAgIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGZvbGxvd2luZyBzeW1saW5r cyBhcyB3ZWxsIGFzCi0tICAgICAgICAgd2l0aCBhIGNvcnJ1cHRlZCBkaXJlY3RvcnkgaGllcmFy Y2h5LiAqLwotLSAgICAgIHN0cnVjdCBBY3RpdmVfZGlyICphZF9mcm9tX3RhYmxlID0gaGFzaF9p bnNlcnQgKGZ0cy0+ZnRzX2N5Y2xlLmh0LCBhZCk7Ci0tCi0tICAgICAgaWYgKGFkX2Zyb21fdGFi bGUgIT0gYWQpCi0tICAgICAgICB7Ci0tICAgICAgICAgIGZyZWUgKGFkKTsKLS0gICAgICAgICAg aWYgKCFhZF9mcm9tX3RhYmxlKQotLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLS0KLS0gICAg ICAgICAgLyogVGhlcmUgd2FzIGFuIGVudHJ5IHdpdGggbWF0Y2hpbmcgZGV2L2lub2RlIGFscmVh ZHkgaW4gdGhlIHRhYmxlLgotLSAgICAgICAgICAgICBSZWNvcmQgdGhlIGZhY3QgdGhhdCB3ZSd2 ZSBmb3VuZCBhIGN5Y2xlLiAgKi8KLS0gICAgICAgICAgZW50LT5mdHNfY3ljbGUgPSBhZF9mcm9t X3RhYmxlLT5mdHNfZW50OwotLSAgICAgICAgICBlbnQtPmZ0c19pbmZvID0gRlRTX0RDOwotLSAg ICAgICAgfQotLSAgICB9Ci0tICBlbHNlCi0tICAgIHsKLS0gICAgICBpZiAoY3ljbGVfY2hlY2sg KGZ0cy0+ZnRzX2N5Y2xlLnN0YXRlLCBlbnQtPmZ0c19zdGF0cCkpCi0tICAgICAgICB7Ci0tICAg ICAgICAgIC8qIEZJWE1FOiBzZXR0aW5nIGZ0c19jeWNsZSBsaWtlIHRoaXMgaXNuJ3QgcHJvcGVy LgotLSAgICAgICAgICAgICBUbyBkbyB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIHJlcXVpcmVzLCB3 ZSdkIGhhdmUgdG8KLS0gICAgICAgICAgICAgZ28gYXJvdW5kIHRoZSBjeWNsZSBhZ2FpbiBhbmQg ZmluZCB0aGUgcmlnaHQgZW50cnkuCi0tICAgICAgICAgICAgIEJ1dCBubyBjYWxsZXJzIGluIGNv cmV1dGlscyB1c2UgdGhlIGZ0c19jeWNsZSBtZW1iZXIuICovCi0tICAgICAgICAgIGVudC0+ZnRz X2N5Y2xlID0gZW50OwotLSAgICAgICAgICBlbnQtPmZ0c19pbmZvID0gRlRTX0RDOwotLSAgICAg ICAgfQotLSAgICB9Ci0tCi0tICByZXR1cm4gdHJ1ZTsKLS19Ci0tCi0tLyogTGVhdmUgYSBkaXJl Y3RvcnkgZHVyaW5nIGEgZmlsZSB0cmVlIHdhbGsuICAqLwotLQotLXN0YXRpYyB2b2lkCi0tbGVh dmVfZGlyIChGVFNPQkogKmZ0cywgRlRTRU5UUlkgKmVudCkKLS17Ci0tICBzdHJ1Y3QgU1RSVUNU X1NUQVQgY29uc3QgKnN0ID0gZW50LT5mdHNfc3RhdHA7Ci0tICBpZiAoZnRzLT5mdHNfb3B0aW9u cyAmIChGVFNfVElHSFRfQ1lDTEVfQ0hFQ0sgfCBGVFNfTE9HSUNBTCkpCi0tICAgIHsKLS0gICAg ICBzdHJ1Y3QgQWN0aXZlX2RpciBvYmo7Ci0tICAgICAgb2JqLmRldiA9IHN0LT5zdF9kZXY7Ci0t ICAgICAgb2JqLmlubyA9IHN0LT5zdF9pbm87Ci0tICAgICAgdm9pZCAqZm91bmQgPSBoYXNoX3Jl bW92ZSAoZnRzLT5mdHNfY3ljbGUuaHQsICZvYmopOwotLSAgICAgIGlmICghZm91bmQpCi0tICAg ICAgICBhYm9ydCAoKTsKLS0gICAgICBmcmVlIChmb3VuZCk7Ci0tICAgIH0KLS0gIGVsc2UKLS0g ICAgewotLSAgICAgIEZUU0VOVFJZICpwYXJlbnQgPSBlbnQtPmZ0c19wYXJlbnQ7Ci0tICAgICAg aWYgKHBhcmVudCAhPSBOVUxMICYmIDAgPD0gcGFyZW50LT5mdHNfbGV2ZWwpCi0tICAgICAgICBD WUNMRV9DSEVDS19SRUZMRUNUX0NIRElSX1VQIChmdHMtPmZ0c19jeWNsZS5zdGF0ZSwKLS0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocGFyZW50LT5mdHNfc3RhdHApLCAq c3QpOwotLSAgICB9Ci0tfQotLQotLS8qIEZyZWUgYW55IG1lbW9yeSB1c2VkIGZvciBjeWNsZSBk ZXRlY3Rpb24uICAqLwotLQotLXN0YXRpYyB2b2lkCi0tZnJlZV9kaXIgKEZUU09CSiAqc3ApCi0t ewotLSAgaWYgKHNwLT5mdHNfb3B0aW9ucyAmIChGVFNfVElHSFRfQ1lDTEVfQ0hFQ0sgfCBGVFNf TE9HSUNBTCkpCi0tICAgIHsKLS0gICAgICBpZiAoc3AtPmZ0c19jeWNsZS5odCkKLS0gICAgICAg IGhhc2hfZnJlZSAoc3AtPmZ0c19jeWNsZS5odCk7Ci0tICAgIH0KLS0gIGVsc2UKLS0gICAgZnJl ZSAoc3AtPmZ0c19jeWNsZS5zdGF0ZSk7Ci0tfQotZGlmZiAtLWdpdCBhL2lvL2Z0cy5jIGIvaW8v ZnRzLmMKLWluZGV4IDM4MjVmMGFlYjRlYjE1OTQuLjI3YTE1YjExMDQzMWNlMjggMTAwNjQ0Ci0t LS0gYS9pby9mdHMuYwotKysrIGIvaW8vZnRzLmMKLUBAIC0xLDIzICsxLDI0IEBACi0tLyogVHJh dmVyc2UgYSBmaWxlIGhpZXJhcmNoeS4KLSsvKiBGaWxlIHRyZWUgdHJhdmVyc2FsIGZ1bmN0aW9u cy4KLSsgICBDb3B5cmlnaHQgKEMpIDE5OTQtMjAyNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KLSsgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KLSAKLS0g ICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K LSsgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKLSsgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCi0rICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0rICAgdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gCi0tICAgVGhp cyBmaWxlIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLS0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcwotLSAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCi0tICAgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLS0KLS0gICBUaGlzIGZpbGUgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBUaGUgR05VIEMg TGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotLSAgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0rICAgTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAKLS0gICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK LS0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSsgICBMaWNlbnNlIGFsb25nIHdp dGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCi0rICAgPGh0dHBzOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4gICovCi0gCi0gLyotCi0gICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkz LCAxOTk0Ci0tICogICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y bmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgKgotICAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotQEAgLTMxLDcgKzMyLDcgQEAKLSAgKiAgICBtYXkgYmUgdXNl ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUKLSAgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAg KgotLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRS SUJVVE9SUyAiQVMgSVMiIEFORAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gICogQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0gICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLUBAIC00NCwxMTIy ICs0NSw0NTcgQEAKLSAgKiBTVUNIIERBTUFHRS4KLSAgKi8KLSAKLS0jaW5jbHVkZSA8Y29uZmln Lmg+Ci0tCi0tI2lmIGRlZmluZWQgTElCQ19TQ0NTICYmICFkZWZpbmVkIEdDQ19MSU5UICYmICFk ZWZpbmVkIGxpbnQKLS1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZnRzLmMgICAgICAgOC42 IChCZXJrZWxleSkgOC8xNC85NCI7Ci0tI2VuZGlmCi0rI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAm JiAhZGVmaW5lZChsaW50KQotK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmdHMuYwk4LjYg KEJlcmtlbGV5KSA4LzE0Lzk0IjsKLSsjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAq LwotIAotLSNpZiBfTElCQwotLSMgaW5jbHVkZSA8ZnRzLmg+Ci0tI2Vsc2UKLS0jIGluY2x1ZGUg ImZ0c18uaCIKLS0jZW5kaWYKLS0jaWYgX0xJQkMgfHwgSEFWRV9TWVNfUEFSQU1fSAotLSMgaW5j bHVkZSA8c3lzL3BhcmFtLmg+Ci0tI2VuZGlmCi0tI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0rI2lu Y2x1ZGUgPHN5cy9wYXJhbS5oPgotKyNpbmNsdWRlIDxpbmNsdWRlL3N5cy9zdGF0Lmg+Ci0gI2lu Y2x1ZGUgPGZjbnRsLmg+Ci0rI2luY2x1ZGUgPGRpcmVudC5oPgotICNpbmNsdWRlIDxlcnJuby5o PgotLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSsjaW5jbHVkZSA8ZnRzLmg+Ci0gI2luY2x1ZGUgPHN0 ZGludC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2lu Y2x1ZGUgPHVuaXN0ZC5oPgotIAotKwotKy8qIExhcmdlc3QgYWxpZ25tZW50IHNpemUgbmVlZGVk LCBtaW51cyBvbmUuCi0rICAgVXN1YWxseSBsb25nIGRvdWJsZSBpcyB0aGUgd29yc3QgY2FzZS4g ICovCi0rI2lmbmRlZiBBTElHTkJZVEVTCi0rI2RlZmluZSBBTElHTkJZVEVTCShfX2FsaWdub2Zf XyAobG9uZyBkb3VibGUpIC0gMSkKLSsjZW5kaWYKLSsvKiBBbGlnbiBQIHRvIHRoYXQgc2l6ZS4g ICovCi0rI2lmbmRlZiBBTElHTgotKyNkZWZpbmUJQUxJR04ocCkJKCgodWludHB0cl90KSAocCkg KyBBTElHTkJZVEVTKSAmIH5BTElHTkJZVEVTKQotKyNlbmRpZgotKwotKwotIC8qIFN1cHBvcnQg Zm9yIHRoZSBMRlMgQVBJIHZlcnNpb24uICAqLwotICNpZm5kZWYgRlRTX09QRU4KLS0jIGRlZmlu ZSBGVFNfT1BFTiBmdHNfb3BlbgotLSMgZGVmaW5lIEZUU19DTE9TRSBmdHNfY2xvc2UKLS0jIGRl ZmluZSBGVFNfUkVBRCBmdHNfcmVhZAotLSMgZGVmaW5lIEZUU19TRVQgZnRzX3NldAotLSMgZGVm aW5lIEZUU19DSElMRFJFTiBmdHNfY2hpbGRyZW4KLSsjZGVmaW5lIEZUU19PUEVOIGZ0c19vcGVu Ci0rI2RlZmluZSBGVFNfQ0xPU0UgZnRzX2Nsb3NlCi0rI2RlZmluZSBGVFNfUkVBRCBmdHNfcmVh ZAotKyNkZWZpbmUgRlRTX1NFVCBmdHNfc2V0Ci0rI2RlZmluZSBGVFNfQ0hJTERSRU4gZnRzX2No aWxkcmVuCi0gIyBkZWZpbmUgRlRTT0JKIEZUUwotICMgZGVmaW5lIEZUU0VOVFJZIEZUU0VOVAot ICMgZGVmaW5lIElOT19UIGlub190Ci0gIyBkZWZpbmUgU1RSVUNUX1NUQVQgc3RhdAotKyMgZGVm aW5lIFNUQVQgX19zdGF0Ci0rIyBkZWZpbmUgTFNUQVQgX19sc3RhdAotICMgZGVmaW5lIEZTVEFU IF9fZnN0YXQKLS0jIGRlZmluZSBGU1RBVEFUIF9fZnN0YXRhdAotLSMgZGVmaW5lIFNUUlVDVF9T VEFURlMgc3RhdGZzCi0tIyBkZWZpbmUgRlNUQVRGUyBfX2ZzdGF0ZnMKLS0jZW5kaWYKLS0KLS0j aWYgISBfTElCQwotLSMgaW5jbHVkZSAiYXR0cmlidXRlLmgiCi0tIyBpbmNsdWRlICJmY250bC0t LmgiCi0tIyBpbmNsdWRlICJvcGVuYXQuaCIKLS0jIGluY2x1ZGUgIm9wZW5kaXJhdC5oIgotLSMg aW5jbHVkZSAic2FtZS1pbm9kZS5oIgotLSMgZGVmaW5lIE9QRU5ESVJBVCBvcGVuZGlyYXQKLS0j IGRlZmluZSBGVFNFTlRfV1JBUFBFUihfX3ApIF9fcAotLSMgZGVmaW5lIEZUU19DT01QQVJfQ0FT VChfX2ZuKSBfX2ZuCi0tI2Vsc2UKLS0jIGluY2x1ZGUgPHN0ZGJvb2wuaD4KLS0KLS0jIGRlZmlu ZSBpbnRlcm5hbF9mdW5jdGlvbgotLSMgZGVmaW5lIEZBTExUSFJPVUdIICAgICAgICAgICAgICAg OyBbW2ZhbGx0aHJvdWdoXV0KLS0jIGRlZmluZSBIQVZFX1NUUlVDVF9ESVJFTlRfRF9UWVBFIDEK LS0jIGRlZmluZSBHTlVMSUJfRlRTX0RFQlVHICAgICAgICAgIDAKLS0jIGlmZGVmIE9fUEFUSAot LSMgIGRlZmluZSBPX1NFQVJDSCAgICAgICAgICAgICAgICAgT19QQVRICi0tIyBlbHNlCi0tIyAg ZGVmaW5lIE9fU0VBUkNIICAgICAgICAgICAgICAgICBPX1JET05MWQotLSMgZW5kaWYKLS0jIGRl ZmluZSBIQVZFX1NZU19WRlNfSCAgICAgICAgICAgIDEKLS0jIGRlZmluZSBIQVZFX0ZTVEFURlMg ICAgICAgICAgICAgIDEKLS0jIGRlZmluZSBIQVZFX1NUUlVDVF9TVEFURlNfRl9UWVBFIDEKLS0j IGRlZmluZSBIQVZFX09QRU5BVCAgICAgICAgICAgICAgIDEKLS0jIGRlZmluZSBIQVZFX1dPUktJ TkdfT19OT0ZPTExPVyAgIDEKLS0jIGRlZmluZSBfR0xfQ01QKGEsIGIpICAgICAgICAgICAgICgo YSkgPCAoYikgPyAtMSA6IChhKSA+IChiKSkKLS0jIGRlZmluZSBPUEVORElSQVQgICAgICAgICAg ICAgICAgIF9fb3BlbmRpcmF0Ci0tCi0tc3RhdGljIGlubGluZSBib29sIG9wZW5hdF9uZWVkc19m Y2hkaXIgKHZvaWQpCi0tewotLSAgcmV0dXJuIGZhbHNlOwotLX0KLS0KLS1zdGF0aWMgaW5saW5l IGJvb2wgc3RyZXEgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKLS17Ci0tICByZXR1 cm4gc3RyY21wIChzMSwgczIpID09IDA7Ci0tfQotLSMgZGVmaW5lIHJlYWxsb2NhcnJheSAgICAg ICAgICAgICAgX19saWJjX3JlYWxsb2NhcnJheQotLSMgZGVmaW5lIGZjaGRpciAgICAgICAgICAg ICAgICAgICAgX19mY2hkaXIKLS0jIGRlZmluZSBjbG9zZSAgICAgICAgICAgICAgICAgICAgIF9f Y2xvc2UKLS0jIGRlZmluZSBjbG9zZWRpciAgICAgICAgICAgICAgICAgIF9fY2xvc2VkaXIKLS0j IGRlZmluZSBmY250bCAgICAgICAgICAgICAgICAgICAgIF9fZmNudGwKLS0jIGRlZmluZSByZWFk ZGlyICAgICAgICAgICAgICAgICAgIF9fcmVhZGRpcgotLSMgaWZuZGVmIGRpcmZkCi0tIyAgZGVm aW5lIGRpcmZkICAgICAgICAgICAgICAgICAgICBfX2RpcmZkCi0tIyBlbmRpZgotLSMgZGVmaW5l IG9wZW4gICAgICAgICAgICAgICAgICAgICAgX19vcGVuCi0tIyBkZWZpbmUgb3BlbmF0ICAgICAg ICAgICAgICAgICAgICBfX29wZW5hdAotLQotLSMgaW5jbHVkZSAiY3ljbGUtY2hlY2suYyIKLS0j IGluY2x1ZGUgImktcmluZy5jIgotLQotLXN0cnVjdCBGVFNFTlRfd3JhcHBlcgotLXsKLS0gIEZU U09CSiAqZnRzX2Z0czsgICAgICAgICAgICAgICAgLyogdGhlIGZpbGUgaGllcmFyY2h5IGl0c2Vs ZiAqLwotLSAgRElSICpmdHNfZGlycDsgICAgICAgICAgICAgICAgICAvKiBEaXIgcG9pbnRlciBm b3IgYW55IGRpcmVjdG9yeSBjb250YWluaW5nCi0tCQkJCSAgICAgbW9yZSBlbnRyaWVzIHRoYW4g d2UgcmVhZCBhdCBvbmUgdGltZS4gICovCi0tICBzdHJ1Y3QgU1RSVUNUX1NUQVQgZnRzX3N0YXQ7 Ci0tCi0tICBGVFNFTlRSWSBlbnQ7Ci0tfTsKLS0KLS0vKiBnbGliYyBoaXN0b3JpY2FseSBkZWZp bmVzIHRoZSBGVFM6OmZ0c19jb21wYXIgYXMgaGF2aW5nICd2b2lkIConLCB3aGlsZSB0aGUKLS0g ICBmdHNfb3BlbiBoYXMgYSBmdW5jdGlvbiBwb2ludCB1c2luZyAnRlRTRU5UICoqJyBhcyBhcmd1 bWVudC4gICovCi0tIyBkZWZpbmUgRlRTX0NPTVBBUl9DQVNUKF9fZm4pICgoaW50ICgqKSAodm9p ZCBjb25zdCAqLCB2b2lkIGNvbnN0ICopKV9fZm4pCi0tCi0tIyBkZWZpbmUgRlRTRU5UX1dSQVBQ RVIocCkgXAotLSAgICAoKHN0cnVjdCBGVFNFTlRfd3JhcHBlciAqKSAoKGNoYXIgKikocCkgLSBv ZmZzZXRvZihzdHJ1Y3QgRlRTRU5UX3dyYXBwZXIsIGVudCkpKQotLSNlbmRpZgotLSNkZWZpbmUg RlRTRU5UX0ZUUyhwKSAgIChGVFNFTlRfV1JBUFBFUihwKS0+ZnRzX2Z0cykKLS0jZGVmaW5lIEZU U0VOVF9ESVJQKHApICAoRlRTRU5UX1dSQVBQRVIocCktPmZ0c19kaXJwKQotLQotLSNpbmNsdWRl ICJmbGV4bWVtYmVyLmgiCi0tCi0tI2luY2x1ZGUgPGRpcmVudC5oPgotLSNpZm5kZWYgX0RfRVhB Q1RfTkFNTEVOCi0tIyBkZWZpbmUgX0RfRVhBQ1RfTkFNTEVOKGRpcmVudCkgc3RybGVuICgoZGly ZW50KS0+ZF9uYW1lKQotLSNlbmRpZgotLQotLSNpZiBIQVZFX1NUUlVDVF9ESVJFTlRfRF9UWVBF Ci0tLyogVHJ1ZSBpZiB0aGUgdHlwZSBvZiB0aGUgZGlyZWN0b3J5IGVudHJ5IEQgaXMga25vd24u ICAqLwotLSMgZGVmaW5lIERUX0lTX0tOT1dOKGQpICgoZCktPmRfdHlwZSAhPSBEVF9VTktOT1dO KQotLS8qIFRydWUgaWYgdGhlIHR5cGUgb2YgdGhlIGRpcmVjdG9yeSBlbnRyeSBEIG11c3QgYmUg VC4gICovCi0tIyBkZWZpbmUgRFRfTVVTVF9CRShkLCB0KSAoKGQpLT5kX3R5cGUgPT0gKHQpKQot LSMgZGVmaW5lIERfVFlQRShkKSAoKGQpLT5kX3R5cGUpCi0tI2Vsc2UKLS0jIGRlZmluZSBEVF9J U19LTk9XTihkKSBmYWxzZQotLSMgZGVmaW5lIERUX01VU1RfQkUoZCwgdCkgZmFsc2UKLS0jIGRl ZmluZSBEX1RZUEUoZCkgRFRfVU5LTk9XTgotLQotLSMgdW5kZWYgRFRfVU5LTk9XTgotLSMgZGVm aW5lIERUX1VOS05PV04gMAotLQotLS8qIEFueSBub256ZXJvIHZhbHVlcyB3aWxsIGRvIGhlcmUs IHNvIGxvbmcgYXMgdGhleSdyZSBkaXN0aW5jdC4KLS0gICBVbmRlZiBhbnkgZXhpc3RpbmcgbWFj cm9zIG91dCBvZiB0aGUgd2F5LiAgKi8KLS0jIHVuZGVmIERUX0JMSwotLSMgdW5kZWYgRFRfQ0hS Ci0tIyB1bmRlZiBEVF9ESVIKLS0jIHVuZGVmIERUX0ZJRk8KLS0jIHVuZGVmIERUX0xOSwotLSMg dW5kZWYgRFRfUkVHCi0tIyB1bmRlZiBEVF9TT0NLCi0tIyBkZWZpbmUgRFRfQkxLIDEKLS0jIGRl ZmluZSBEVF9DSFIgMgotLSMgZGVmaW5lIERUX0RJUiAzCi0tIyBkZWZpbmUgRFRfRklGTyA0Ci0t IyBkZWZpbmUgRFRfTE5LIDUKLS0jIGRlZmluZSBEVF9SRUcgNgotLSMgZGVmaW5lIERUX1NPQ0sg NwotLSNlbmRpZgotLQotLSNpZm5kZWYgU19JRkJMSwotLSMgZGVmaW5lIFNfSUZCTEsgMAotLSNl bmRpZgotLSNpZm5kZWYgU19JRkxOSwotLSMgZGVmaW5lIFNfSUZMTksgMAotLSNlbmRpZgotLSNp Zm5kZWYgU19JRlNPQ0sKLS0jIGRlZmluZSBTX0lGU09DSyAwCi0tI2VuZGlmCi0tCi0tZW51bQot LXsKLS0gIE5PVF9BTl9JTk9ERV9OVU1CRVIgPSAwCi0tfTsKLS0KLS0jaWZkZWYgRF9JTk9fSU5f RElSRU5UCi0tIyBkZWZpbmUgRF9JTk8oZHApIChkcCktPmRfaW5vCi0tI2Vsc2UKLS0vKiBTb21l IHN5c3RlbXMgZG9uJ3QgaGF2ZSBpbm9kZXMsIHNvIGZha2UgdGhlbSB0byBhdm9pZCBsb3RzIG9m IGlmZGVmcy4gICovCi0tIyBkZWZpbmUgRF9JTk8oZHApIE5PVF9BTl9JTk9ERV9OVU1CRVIKLS0j ZW5kaWYKLS0KLS0vKiBJZiBwb3NzaWJsZSAoc2VlIG1heF9lbnRyaWVzLCBiZWxvdyksIHJlYWQg bm8gbW9yZSB0aGFuIHRoaXMgbWFueSBkaXJlY3RvcnkKLS0gICBlbnRyaWVzIGF0IGEgdGltZS4g IFdpdGhvdXQgdGhpcyBsaW1pdCAoaS5lLiwgd2hlbiB1c2luZyBub24tTlVMTAotLSAgIGZ0c19j b21wYXIpLCBwcm9jZXNzaW5nIGEgZGlyZWN0b3J5IHdpdGggNCwwMDAsMDAwIGVudHJpZXMgcmVx dWlyZXMgfjFHaUIKLS0gICBvZiBtZW1vcnksIGFuZCBoYW5kbGluZyA2NE0gZW50cmllcyB3b3Vs ZCByZXF1aXJlIDE2R2lCIG9mIG1lbW9yeS4gICovCi0tI2lmbmRlZiBGVFNfTUFYX1JFQURESVJf RU5UUklFUwotLSMgZGVmaW5lIEZUU19NQVhfUkVBRERJUl9FTlRSSUVTIDEwMDAwMAotLSNlbmRp ZgotLQotLS8qIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gdGhpcyBtYW55IGVudHJpZXMgaW4gYSBk aXJlY3RvcnksCi0tICAgYW5kIHRoZSBjb25kaXRpb25zIG1lbnRpb25lZCBiZWxvdyBhcmUgc2F0 aXNmaWVkLCB0aGVuIHNvcnQKLS0gICB0aGUgZW50cmllcyBvbiBpbm9kZSBudW1iZXIgYmVmb3Jl IGFueSBmdXJ0aGVyIHByb2Nlc3NpbmcuICAqLwotLSNpZm5kZWYgRlRTX0lOT0RFX1NPUlRfRElS X0VOVFJJRVNfVEhSRVNIT0xECi0tIyBkZWZpbmUgRlRTX0lOT0RFX1NPUlRfRElSX0VOVFJJRVNf VEhSRVNIT0xEIDEwMDAwCi0tI2VuZGlmCi0tCi0tZW51bQotLXsKLS0gIF9GVFNfSU5PREVfU09S VF9ESVJfRU5UUklFU19USFJFU0hPTEQgPSBGVFNfSU5PREVfU09SVF9ESVJfRU5UUklFU19USFJF U0hPTEQKLS19OwotLQotLWVudW0gRnRzX3N0YXQKLS17Ci0tICBGVFNfTk9fU1RBVF9SRVFVSVJF RCA9IDEsCi0tICBGVFNfU1RBVF9SRVFVSVJFRCA9IDIKLS19OwotLQotLSNpZm5kZWYgX19zZXRf ZXJybm8KLS0jIGRlZmluZSBfX3NldF9lcnJubyhWYWwpIGVycm5vID0gKFZhbCkKLS0jZW5kaWYK LS0KLS0vKiBJZiB0aGlzIGhvc3QgcHJvdmlkZXMgdGhlIG9wZW5hdCBmdW5jdGlvbiwgdGhlbiB3 ZSBjYW4gYXZvaWQKLS0gICBhdHRlbXB0aW5nIHRvIG9wZW4gIi4iIGluIHNvbWUgaW5pdGlhbGl6 YXRpb24gY29kZSBiZWxvdy4gICovCi0tI2lmZGVmIEhBVkVfT1BFTkFUCi0tIyBkZWZpbmUgSEFW RV9PUEVOQVRfU1VQUE9SVCAxCi0tI2Vsc2UKLS0jIGRlZmluZSBIQVZFX09QRU5BVF9TVVBQT1JU IDAKLS0jZW5kaWYKLS0KLS0jaWZkZWYgTkRFQlVHCi0tIyBkZWZpbmUgZnRzX2Fzc2VydChleHBy KSAoKHZvaWQpICgwICYmIChleHByKSkpCi0tI2Vsc2UKLS0jIGRlZmluZSBmdHNfYXNzZXJ0KGV4 cHIpICAgICAgIFwKLS0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgICB7 ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgICAgIGlmICghKGV4cHIpKSAgICAgICAg ICAgIFwKLS0gICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgIFwKLS0gICAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLS0gICAgd2hpbGUgKGZhbHNlKQotICNlbmRpZgotIAotLXN0 YXRpYyBGVFNFTlRSWSAgKmZ0c19hbGxvYyAoRlRTT0JKICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90 KTsKLS1zdGF0aWMgRlRTRU5UUlkgICpmdHNfYnVpbGQgKEZUU09CSiAqLCBpbnQpOwotLXN0YXRp YyB2b2lkICAgICAgZnRzX2xmcmVlIChGVFNFTlRSWSAqKTsKLS1zdGF0aWMgdm9pZCAgICAgIGZ0 c19sb2FkIChGVFNPQkogKiwgRlRTRU5UUlkgKik7Ci0tc3RhdGljIHNpemVfdCAgICBmdHNfbWF4 YXJnbGVuIChjaGFyICogY29uc3QgKik7Ci0tc3RhdGljIHZvaWQgICAgICBmdHNfcGFkanVzdCAo RlRTT0JKICosIEZUU0VOVFJZICopOwotLXN0YXRpYyBib29sICAgICAgZnRzX3BhbGxvYyAoRlRT T0JKICosIHNpemVfdCk7Ci0tc3RhdGljIEZUU0VOVFJZICAqZnRzX3NvcnQgKEZUU09CSiAqLCBG VFNFTlRSWSAqLCBzaXplX3QpOwotLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbnQgZnRzX3N0YXQg KEZUU09CSiAqLCBGVFNFTlRSWSAqLCBib29sKTsKLStzdGF0aWMgRlRTRU5UUlkJKmZ0c19hbGxv YyAoRlRTT0JKICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKLStzdGF0aWMgRlRTRU5UUlkJKmZ0 c19idWlsZCAoRlRTT0JKICosIGludCk7Ci0rc3RhdGljIHZvaWQJIGZ0c19sZnJlZSAoRlRTRU5U UlkgKik7Ci0rc3RhdGljIHZvaWQJIGZ0c19sb2FkIChGVFNPQkogKiwgRlRTRU5UUlkgKik7Ci0r c3RhdGljIHNpemVfdAkgZnRzX21heGFyZ2xlbiAoY2hhciAqIGNvbnN0ICopOwotK3N0YXRpYyB2 b2lkCSBmdHNfcGFkanVzdCAoRlRTT0JKICosIEZUU0VOVFJZICopOwotK3N0YXRpYyBpbnQJIGZ0 c19wYWxsb2MgKEZUU09CSiAqLCBzaXplX3QpOwotK3N0YXRpYyBGVFNFTlRSWQkqZnRzX3NvcnQg KEZUU09CSiAqLCBGVFNFTlRSWSAqLCBpbnQpOwotK3N0YXRpYyB1X3Nob3J0CSBmdHNfc3RhdCAo RlRTT0JKICosIEZUU0VOVFJZICosIGludCk7Ci0gc3RhdGljIGludCAgICAgIGZ0c19zYWZlX2No YW5nZWRpciAoRlRTT0JKICosIEZUU0VOVFJZICosIGludCwgY29uc3QgY2hhciAqKTsKLSAKLS0j aW5jbHVkZSAiZnRzLWN5Y2xlLmMiCi0tCi0gI2lmbmRlZiBNQVgKLS0jIGRlZmluZSBNQVgoYSxi KSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQotLSNlbmRpZgotLQotLSNpZm5kZWYgU0laRV9NQVgK LS0jIGRlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCi0rI2RlZmluZSBNQVgoYSwgYikJKHsg X190eXBlb2ZfXyAoYSkgX2EgPSAoYSk7IFwKLSsJCQkgICBfX3R5cGVvZl9fIChiKSBfYiA9IChi KTsgXAotKwkJCSAgIF9hID4gX2IgPyBfYSA6IF9iOyB9KQotICNlbmRpZgotIAotLSNkZWZpbmUg SVNET1QoYSkgICAgICAgIChhWzBdID09ICcuJyAmJiAoIWFbMV0gfHwgKGFbMV0gPT0gJy4nICYm ICFhWzJdKSkpCi0rI2RlZmluZQlJU0RPVChhKQkoYVswXSA9PSAnLicgJiYgKCFhWzFdIHx8IChh WzFdID09ICcuJyAmJiAhYVsyXSkpKQotIAotLSNkZWZpbmUgQ0xSKG9wdCkgICAgICAgIChzcC0+ ZnRzX29wdGlvbnMgJj0gfihvcHQpKQotLSNkZWZpbmUgSVNTRVQob3B0KSAgICAgICgoc3AtPmZ0 c19vcHRpb25zICYgKG9wdCkpICE9IDApCi0tI2RlZmluZSBTRVQob3B0KSAgICAgICAgKHNwLT5m dHNfb3B0aW9ucyB8PSAob3B0KSkKLS0KLS0vKiBGSVhNRTogRlRTX05PQ0hESVIgaXMgbm93IG1p c25hbWVkLgotLSAgIENhbGwgaXQgRlRTX1VTRV9GVUxMX1JFTEFUSVZFX0ZJTEVfTkFNRVMgaW5z dGVhZC4gKi8KLS0jZGVmaW5lIEZDSERJUihzcCwgZmQpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLS0gICghSVNTRVQoRlRTX05PQ0hESVIpICYmIChJU1NFVChGVFNfQ1dERkQp ICAgICAgICAgICAgIFwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICA/IChjd2RfYWR2YW5j ZV9mZCAoKHNwKSwgKGZkKSwgdHJ1ZSksIDApIFwKLS0gICAgICAgICAgICAgICAgICAgICAgICAg ICA6IGZjaGRpciAoZmQpKSkKLSsjZGVmaW5lIENMUihvcHQpCShzcC0+ZnRzX29wdGlvbnMgJj0g fihvcHQpKQotKyNkZWZpbmUJSVNTRVQob3B0KQkoc3AtPmZ0c19vcHRpb25zICYgKG9wdCkpCi0r I2RlZmluZQlTRVQob3B0KQkoc3AtPmZ0c19vcHRpb25zIHw9IChvcHQpKQotIAotKyNkZWZpbmUJ RkNIRElSKHNwLCBmZCkJKCFJU1NFVChGVFNfTk9DSERJUikgJiYgX19mY2hkaXIoZmQpKQotIAot IC8qIGZ0c19idWlsZCBmbGFncyAqLwotLS8qIEZJWE1FOiBtYWtlIHRoaXMgYW4gZW51bSAqLwot LSNkZWZpbmUgQkNISUxEICAgICAgICAgIDEgICAgICAgICAgICAgICAvKiBmdHNfY2hpbGRyZW4g Ki8KLS0jZGVmaW5lIEJOQU1FUyAgICAgICAgICAyICAgICAgICAgICAgICAgLyogZnRzX2NoaWxk cmVuLCBuYW1lcyBvbmx5ICovCi0tI2RlZmluZSBCUkVBRCAgICAgICAgICAgMyAgICAgICAgICAg ICAgIC8qIGZ0c19yZWFkICovCi0tCi0tI2lmIEdOVUxJQl9GVFNfREVCVUcKLS0jIGluY2x1ZGUg PGludHR5cGVzLmg+Ci0tIyBpbmNsdWRlIDxzdGRpby5oPgotLWJvb2wgZnRzX2RlYnVnID0gZmFs c2U7Ci0tIyBkZWZpbmUgRHByaW50Zih4KSBkbyB7IGlmIChmdHNfZGVidWcpIHByaW50ZiB4OyB9 IHdoaWxlIChmYWxzZSkKLS1zdGF0aWMgdm9pZCBmZF9yaW5nX2NoZWNrIChGVFNPQkogY29uc3Qg Kik7Ci0tc3RhdGljIHZvaWQgZmRfcmluZ19wcmludCAoRlRTT0JKIGNvbnN0ICosIEZJTEUgKiwg Y2hhciBjb25zdCAqKTsKLS0jZWxzZQotLSMgZGVmaW5lIERwcmludGYoeCkKLS0jIGRlZmluZSBm ZF9yaW5nX2NoZWNrKHgpCi0tIyBkZWZpbmUgZmRfcmluZ19wcmludChhLCBiLCBjKQotLSNlbmRp ZgotKyNkZWZpbmUJQkNISUxECQkxCQkvKiBmdHNfY2hpbGRyZW4gKi8KLSsjZGVmaW5lCUJOQU1F UwkJMgkJLyogZnRzX2NoaWxkcmVuLCBuYW1lcyBvbmx5ICovCi0rI2RlZmluZQlCUkVBRAkJMwkJ LyogZnRzX3JlYWQgKi8KLSAKLS0jZGVmaW5lIExFQVZFX0RJUihGdHMsIEVudCwgVGFnKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgZG8gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAgIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAg ICBEcHJpbnRmICgoIiAgJXMtbGVhdmluZzogJXNcbiIsIFRhZywgKEVudCktPmZ0c19wYXRoKSk7 ICAgXAotLSAgICAgIGxlYXZlX2RpciAoRnRzLCBFbnQpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0tICAgICAgZmRfcmluZ19jaGVjayAoRnRzKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgd2hpbGUgKGZhbHNlKQot LQotLXN0YXRpYyB2b2lkCi0tZmRfcmluZ19jbGVhciAoSV9yaW5nICpmZF9yaW5nKQotLXsKLS0g IHdoaWxlICggISBpX3JpbmdfZW1wdHkgKGZkX3JpbmcpKQotLSAgICB7Ci0tICAgICAgaW50IGZk ID0gaV9yaW5nX3BvcCAoZmRfcmluZyk7Ci0tICAgICAgaWYgKDAgPD0gZmQpCi0tICAgICAgICBj bG9zZSAoZmQpOwotLSAgICB9Ci0tfQotLQotLS8qIE92ZXJsb2FkIHRoZSBmdHNfc3RhdHAtPnN0 X3NpemUgbWVtYmVyIChvdGhlcndpc2UgdW51c2VkLCB3aGVuCi0tICAgZnRzX2luZm8gaXMgRlRT X05TT0spIHRvIGluZGljYXRlIHdoZXRoZXIgZnRzX3JlYWQgc2hvdWxkIHN0YXQKLS0gICB0aGlz IGVudHJ5IG9yIG5vdC4gICovCi0tc3RhdGljIHZvaWQKLS1mdHNfc2V0X3N0YXRfcmVxdWlyZWQg KEZUU0VOVFJZICpwLCBib29sIHJlcXVpcmVkKQotK0ZUU09CSiAqCi0rRlRTX09QRU4gKGNoYXIg KiBjb25zdCAqYXJndiwgaW50IG9wdGlvbnMsCi0rCSAgaW50ICgqY29tcGFyKSAoY29uc3QgRlRT RU5UUlkgKiosIGNvbnN0IEZUU0VOVFJZICoqKSkKLSB7Ci0tICBmdHNfYXNzZXJ0IChwLT5mdHNf aW5mbyA9PSBGVFNfTlNPSyk7Ci0tICBwLT5mdHNfc3RhdHAtPnN0X3NpemUgPSAocmVxdWlyZWQK LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA/IEZUU19TVEFUX1JFUVVJUkVECi0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBGVFNfTk9fU1RBVF9SRVFVSVJFRCk7Ci0tfQotKwlGVFNP QkogKnNwOwotKwlGVFNFTlRSWSAqcCwgKnJvb3Q7Ci0rCWludCBuaXRlbXM7Ci0rCUZUU0VOVFJZ ICpwYXJlbnQgPSBOVUxMOwotKwlGVFNFTlRSWSAqdG1wOwotKwotKwkvKiBPcHRpb25zIGNoZWNr LiAqLwotKwlpZiAob3B0aW9ucyAmIH5GVFNfT1BUSU9OTUFTSykgewotKwkJX19zZXRfZXJybm8g KEVJTlZBTCk7Ci0rCQlyZXR1cm4gKE5VTEwpOwotKwl9Ci0gCi0tLyogVmlydHVhbCBmY2hkaXIu ICBBZHZhbmNlIFNQJ3Mgd29ya2luZyBkaXJlY3RvcnkgZmlsZSBkZXNjcmlwdG9yLAotLSAgIFNQ LT5mdHNfY3dkX2ZkLCB0byBGRCwgYW5kIHB1c2ggdGhlIHByZXZpb3VzIHZhbHVlIG9udG8gdGhl IGZkX3JpbmcuCi0tICAgQ0hESVJfRE9XTl9PTkUgaXMgdHJ1ZSBpZiBGRCBjb3JyZXNwb25kcyB0 byBhbiBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5Ci0tICAgb3BlbiBvbiBzcC0+ZnRzX2N3ZF9mZDsg aS5lLiwgdG8gbW92ZSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgb25lIGxldmVsCi0tICAgZG93bi4g ICovCi0tc3RhdGljIHZvaWQKLS1pbnRlcm5hbF9mdW5jdGlvbgotLWN3ZF9hZHZhbmNlX2ZkIChG VFNPQkogKnNwLCBpbnQgZmQsIGJvb2wgY2hkaXJfZG93bl9vbmUpCi0tewotLSAgaW50IG9sZCA9 IHNwLT5mdHNfY3dkX2ZkOwotLSAgZnRzX2Fzc2VydCAob2xkICE9IGZkIHx8IG9sZCA9PSBBVF9G RENXRCk7Ci0tCi0tICBpZiAoY2hkaXJfZG93bl9vbmUpCi0tICAgIHsKLS0gICAgICAvKiBQdXNo ICJvbGQiIG9udG8gdGhlIHJpbmcuCi0tICAgICAgICAgSWYgdGhlIGRpc3BsYWNlZCBmaWxlIGRl c2NyaXB0b3IgaXMgbm9uLW5lZ2F0aXZlLCBjbG9zZSBpdC4gICovCi0tICAgICAgaW50IHByZXZf ZmRfaW5fc2xvdCA9IGlfcmluZ19wdXNoICgmc3AtPmZ0c19mZF9yaW5nLCBvbGQpOwotLSAgICAg IGZkX3JpbmdfcHJpbnQgKHNwLCBzdGRlcnIsICJwb3N0LXB1c2giKTsKLS0gICAgICBpZiAoMCA8 PSBwcmV2X2ZkX2luX3Nsb3QpCi0tICAgICAgICBjbG9zZSAocHJldl9mZF9pbl9zbG90KTsgLyog aWdub3JlIGFueSBjbG9zZSBmYWlsdXJlICovCi0tICAgIH0KLS0gIGVsc2UgaWYgKCAhIElTU0VU IChGVFNfTk9DSERJUikpCi0tICAgIHsKLS0gICAgICBpZiAoMCA8PSBvbGQpCi0tICAgICAgICBj bG9zZSAob2xkKTsgLyogaWdub3JlIGFueSBjbG9zZSBmYWlsdXJlICovCi0tICAgIH0KLS0KLS0g IHNwLT5mdHNfY3dkX2ZkID0gZmQ7Ci0tfQotKwkvKiBBbGxvY2F0ZS9pbml0aWFsaXplIHRoZSBz dHJlYW0gKi8KLSsJaWYgKChzcCA9IG1hbGxvYygodV9pbnQpc2l6ZW9mKEZUU09CSikpKSA9PSBO VUxMKQotKwkJcmV0dXJuIChOVUxMKTsKLSsJbWVtc2V0KHNwLCAwLCBzaXplb2YoRlRTT0JKKSk7 Ci0rCXNwLT5mdHNfY29tcGFyID0gKGludCAoKikgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAq KSkgY29tcGFyOwotKwlzcC0+ZnRzX29wdGlvbnMgPSBvcHRpb25zOwotIAotLS8qIFJlc3RvcmUg dGhlIGluaXRpYWwsIHByZS10cmF2ZXJzYWwsICJ3b3JraW5nIGRpcmVjdG9yeSIuCi0tICAgSW4g RlRTX0NXREZEIG1vZGUsIHdlIG1lcmVseSBjYWxsIGN3ZF9hZHZhbmNlX2ZkLCBvdGhlcndpc2Us Ci0tICAgd2UgbWF5IGFjdHVhbGx5IGNoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkuCi0tICAg UmV0dXJuIDAgdXBvbiBzdWNjZXNzLiBVcG9uIGZhaWx1cmUsIHNldCBlcnJubyBhbmQgcmV0dXJu IG5vbnplcm8uICAqLwotLXN0YXRpYyBpbnQKLS1yZXN0b3JlX2luaXRpYWxfY3dkIChGVFNPQkog KnNwKQotLXsKLS0gIGludCBmYWlsID0gRkNIRElSIChzcCwgSVNTRVQgKEZUU19DV0RGRCkgPyBB VF9GRENXRCA6IHNwLT5mdHNfcmZkKTsKLS0gIGZkX3JpbmdfY2xlYXIgKCYoc3AtPmZ0c19mZF9y aW5nKSk7Ci0tICByZXR1cm4gZmFpbDsKLS19Ci0rCS8qIExvZ2ljYWwgd2Fsa3MgdHVybiBvbiBO T0NIRElSOyBzeW1ib2xpYyBsaW5rcyBhcmUgdG9vIGhhcmQuICovCi0rCWlmIChJU1NFVChGVFNf TE9HSUNBTCkpCi0rCQlTRVQoRlRTX05PQ0hESVIpOwotIAotLS8qIE9wZW4gdGhlIGRpcmVjdG9y eSBESVIgaWYgcG9zc2libGUsIGFuZCByZXR1cm4gYSBmaWxlCi0tICAgZGVzY3JpcHRvci4gIFJl dHVybiAtMSBhbmQgc2V0IGVycm5vIG9uIGZhaWx1cmUuICBJdCBkb2Vzbid0IG1hdHRlcgotLSAg IHdoZXRoZXIgdGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgcmVhZCBvciB3cml0ZSBhY2Nlc3MuICAq LwotKwkvKgotKwkgKiBTdGFydCBvdXQgd2l0aCAxSyBvZiBwYXRoIHNwYWNlLCBhbmQgZW5vdWdo LCBpbiBhbnkgY2FzZSwKLSsJICogdG8gaG9sZCB0aGUgdXNlcidzIHBhdGhzLgotKwkgKi8KLSsj aWZuZGVmIE1BWFBBVEhMRU4KLSsjZGVmaW5lIE1BWFBBVEhMRU4gMTAyNAotKyNlbmRpZgotKwlz aXplX3QgbWF4YXJnbGVuID0gZnRzX21heGFyZ2xlbihhcmd2KTsKLSsJaWYgKGZ0c19wYWxsb2Mo c3AsIE1BWChtYXhhcmdsZW4sIE1BWFBBVEhMRU4pKSkKLSsJCWdvdG8gbWVtMTsKLSsKLSsJLyog QWxsb2NhdGUvaW5pdGlhbGl6ZSByb290J3MgcGFyZW50LiAqLwotKwlpZiAoKmFyZ3YgIT0gTlVM TCkgewotKwkJaWYgKChwYXJlbnQgPSBmdHNfYWxsb2Moc3AsICIiLCAwKSkgPT0gTlVMTCkKLSsJ CQlnb3RvIG1lbTI7Ci0rCQlwYXJlbnQtPmZ0c19sZXZlbCA9IEZUU19ST09UUEFSRU5UTEVWRUw7 Ci0rCSAgfQotKwotKwkvKiBBbGxvY2F0ZS9pbml0aWFsaXplIHJvb3QocykuICovCi0rCWZvciAo cm9vdCA9IE5VTEwsIG5pdGVtcyA9IDA7ICphcmd2ICE9IE5VTEw7ICsrYXJndiwgKytuaXRlbXMp IHsKLSsJCS8qIERvbid0IGFsbG93IHplcm8tbGVuZ3RoIHBhdGhzLiAqLwotKwkJc2l6ZV90IGxl biA9IHN0cmxlbigqYXJndik7Ci0rCQlpZiAobGVuID09IDApIHsKLSsJCQlfX3NldF9lcnJubyAo RU5PRU5UKTsKLSsJCQlnb3RvIG1lbTM7Ci0rCQl9Ci0rCi0rCQlwID0gZnRzX2FsbG9jKHNwLCAq YXJndiwgbGVuKTsKLSsJCXAtPmZ0c19sZXZlbCA9IEZUU19ST09UTEVWRUw7Ci0rCQlwLT5mdHNf cGFyZW50ID0gcGFyZW50OwotKwkJcC0+ZnRzX2FjY3BhdGggPSBwLT5mdHNfbmFtZTsKLSsJCXAt PmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIHAsIElTU0VUKEZUU19DT01GT0xMT1cpKTsKLSsKLSsJ CS8qIENvbW1hbmQtbGluZSAiLiIgYW5kICIuLiIgYXJlIHJlYWwgZGlyZWN0b3JpZXMuICovCi0r CQlpZiAocC0+ZnRzX2luZm8gPT0gRlRTX0RPVCkKLSsJCQlwLT5mdHNfaW5mbyA9IEZUU19EOwot KwotKwkJLyoKLSsJCSAqIElmIGNvbXBhcmlzb24gcm91dGluZSBzdXBwbGllZCwgdHJhdmVyc2Ug aW4gc29ydGVkCi0rCQkgKiBvcmRlcjsgb3RoZXJ3aXNlIHRyYXZlcnNlIGluIHRoZSBvcmRlciBz cGVjaWZpZWQuCi0rCQkgKi8KLSsJCWlmIChjb21wYXIpIHsKLSsJCQlwLT5mdHNfbGluayA9IHJv b3Q7Ci0rCQkJcm9vdCA9IHA7Ci0rCQl9IGVsc2UgewotKwkJCXAtPmZ0c19saW5rID0gTlVMTDsK LSsJCQlpZiAocm9vdCA9PSBOVUxMKQotKwkJCQl0bXAgPSByb290ID0gcDsKLSsJCQllbHNlIHsK LSsJCQkJdG1wLT5mdHNfbGluayA9IHA7Ci0rCQkJCXRtcCA9IHA7Ci0rCQkJfQotKwkJfQotKwl9 Ci0rCWlmIChjb21wYXIgJiYgbml0ZW1zID4gMSkKLSsJCXJvb3QgPSBmdHNfc29ydChzcCwgcm9v dCwgbml0ZW1zKTsKLSAKLS1zdGF0aWMgaW50Ci0taW50ZXJuYWxfZnVuY3Rpb24KLS1kaXJvcGVu IChGVFNPQkogY29uc3QgKnNwLCBjaGFyIGNvbnN0ICpkaXIpCi0tewotLSAgaW50IG9wZW5fZmxh Z3MgPSAoT19TRUFSQ0ggfCBPX0NMT0VYRUMgfCBPX0RJUkVDVE9SWSB8IE9fTk9DVFRZIHwgT19O T05CTE9DSwotLSAgICAgICAgICAgICAgICAgICAgfCAoSVNTRVQgKEZUU19QSFlTSUNBTCkgPyBP X05PRk9MTE9XIDogMCkpOwotKwkvKgotKwkgKiBBbGxvY2F0ZSBhIGR1bW15IHBvaW50ZXIgYW5k IG1ha2UgZnRzX3JlYWQgdGhpbmsgdGhhdCB3ZSd2ZSBqdXN0Ci0rCSAqIGZpbmlzaGVkIHRoZSBu b2RlIGJlZm9yZSB0aGUgcm9vdChzKTsgc2V0IHAtPmZ0c19pbmZvIHRvIEZUU19JTklUCi0rCSAq IHNvIHRoYXQgZXZlcnl0aGluZyBhYm91dCB0aGUgImN1cnJlbnQiIG5vZGUgaXMgaWdub3JlZC4K LSsJICovCi0rCWlmICgoc3AtPmZ0c19jdXIgPSBmdHNfYWxsb2Moc3AsICIiLCAwKSkgPT0gTlVM TCkKLSsJCWdvdG8gbWVtMzsKLSsJc3AtPmZ0c19jdXItPmZ0c19saW5rID0gcm9vdDsKLSsJc3At PmZ0c19jdXItPmZ0c19pbmZvID0gRlRTX0lOSVQ7Ci0gCi0tICBpbnQgZmQgPSAoSVNTRVQgKEZU U19DV0RGRCkKLS0gICAgICAgICAgICA/IG9wZW5hdCAoc3AtPmZ0c19jd2RfZmQsIGRpciwgb3Bl bl9mbGFncykKLS0gICAgICAgICAgICA6IG9wZW4gKGRpciwgb3Blbl9mbGFncykpOwotLSAgcmV0 dXJuIGZkOwotLX0KLSsJLyoKLSsJICogSWYgdXNpbmcgY2hkaXIoMiksIGdyYWIgYSBmaWxlIGRl c2NyaXB0b3IgcG9pbnRpbmcgdG8gZG90IHRvIGVuc3VyZQotKwkgKiB0aGF0IHdlIGNhbiBnZXQg YmFjayBoZXJlOyB0aGlzIGNvdWxkIGJlIGF2b2lkZWQgZm9yIHNvbWUgcGF0aHMsCi0rCSAqIGJ1 dCBhbG1vc3QgY2VydGFpbmx5IG5vdCB3b3J0aCB0aGUgZWZmb3J0LiAgU2xhc2hlcywgc3ltYm9s aWMgbGlua3MsCi0rCSAqIGFuZCAiLi4iIGFyZSBhbGwgZmFpcmx5IG5hc3R5IHByb2JsZW1zLiAg Tm90ZSwgaWYgd2UgY2FuJ3QgZ2V0IHRoZQotKwkgKiBkZXNjcmlwdG9yIHdlIHJ1biBhbnl3YXks IGp1c3QgbW9yZSBzbG93bHkuCi0rCSAqLwotKwlpZiAoIUlTU0VUKEZUU19OT0NIRElSKQotKwkg ICAgJiYgKHNwLT5mdHNfcmZkID0gX19vcGVuKCIuIiwgT19SRE9OTFksIDApKSA8IDApCi0rCQlT RVQoRlRTX05PQ0hESVIpOwotIAotLUZUU09CSiAqCi0tRlRTX09QRU4gKGNoYXIgKiBjb25zdCAq YXJndiwKLS0gICAgICAgICAgcmVnaXN0ZXIgaW50IG9wdGlvbnMsCi0tICAgICAgICAgIGludCAo KmNvbXBhcikgKGNvbnN0IEZUU0VOVFJZICoqLCBjb25zdCBGVFNFTlRSWSAqKikpCi0tewotLSAg ICAgICAgLyogT3B0aW9ucyBjaGVjazogZ2xpYmMgYWRkZWQgb3RoZXIgZmxhZ3MgYWZ0ZXIgRlRT X05BTUVPTkxZIGFuZAotLQkgICBGVFNfU1RPUCwgYW5kIHRoZXkgYXJlIGFzc3VtZWQgdG8gYmUg cHJpdmF0ZS4gICovCi0tICAgICAgICBpZiAob3B0aW9ucyAmIH5GVFNfT1BUSU9OTUFTSwotLSNp ZiBfTElCQwotLQkgICAgfHwgb3B0aW9ucyAmIChGVFNfTkFNRU9OTFkgfCBGVFNfU1RPUCkKLS0j ZW5kaWYKLS0JICAgICkgewotLSAgICAgICAgICAgICAgICBfX3NldF9lcnJubyAoRUlOVkFMKTsK LS0gICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKLS0gICAgICAgIH0KLS0gICAgICAgIGlm ICgob3B0aW9ucyAmIEZUU19OT0NIRElSKSAmJiAob3B0aW9ucyAmIEZUU19DV0RGRCkpIHsKLS0g ICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKEVJTlZBTCk7Ci0tICAgICAgICAgICAgICAgIHJl dHVybiAoTlVMTCk7Ci0tICAgICAgICB9Ci0tI2lmICFfTElCQwotLSAgICAgICAgaWYgKCAhIChv cHRpb25zICYgKEZUU19MT0dJQ0FMIHwgRlRTX1BIWVNJQ0FMKSkpIHsKLS0gICAgICAgICAgICAg ICAgX19zZXRfZXJybm8gKEVJTlZBTCk7Ci0tICAgICAgICAgICAgICAgIHJldHVybiAoTlVMTCk7 Ci0tICAgICAgICB9Ci0tI2Vsc2UKLS0JLyogZ2xpYmMgaGlzdG9yaWNhbGx5IGZhbGxzIHRvIEZU U19QSFlTSUNBTCBpZiBubyBGVFNfUEhZU0lDQUwgb3IKLS0JICAgRlRTX0xPR0lDQUwgaXMgc3Bl Y2lmaWVkLiAgKi8KLS0gICAgICAgIGlmICghIChvcHRpb25zICYgKEZUU19QSFlTSUNBTCB8IEZU U19MT0dJQ0FMKSkpCi0tCSAgb3B0aW9ucyB8PSBGVFNfUEhZU0lDQUw7Ci0tI2VuZGlmCi0rCXJl dHVybiAoc3ApOwotIAotLSAgICAgICAgLyogQWxsb2NhdGUvaW5pdGlhbGl6ZSB0aGUgc3RyZWFt ICovCi0tICAgICAgICByZWdpc3RlciBGVFNPQkogKnNwID0gY2FsbG9jICgxLCBzaXplb2YgKnNw KTsKLS0gICAgICAgIGlmIChzcCA9PSBOVUxMKQotLSAgICAgICAgICAgICAgICByZXR1cm4gKE5V TEwpOwotLSAgICAgICAgc3AtPmZ0c19jb21wYXIgPSBGVFNfQ09NUEFSX0NBU1QoY29tcGFyKTsK LS0gICAgICAgIHNwLT5mdHNfb3B0aW9ucyA9IG9wdGlvbnM7Ci0tCi0tICAgICAgICAvKiBMb2dp Y2FsIHdhbGtzIHR1cm4gb24gTk9DSERJUjsgc3ltYm9saWMgbGlua3MgYXJlIHRvbyBoYXJkLiAq LwotLSAgICAgICAgaWYgKElTU0VUKEZUU19MT0dJQ0FMKSkgewotLSAgICAgICAgICAgICAgICBT RVQoRlRTX05PQ0hESVIpOwotLSAgICAgICAgICAgICAgICBDTFIoRlRTX0NXREZEKTsKLS0gICAg ICAgIH0KLS0KLS0gICAgICAgIC8qIEluaXRpYWxpemUgZnRzX2N3ZF9mZC4gICovCi0tICAgICAg ICBzcC0+ZnRzX2N3ZF9mZCA9IEFUX0ZEQ1dEOwotLSAgICAgICAgaWYgKCBJU1NFVChGVFNfQ1dE RkQpICYmICEgSEFWRV9PUEVOQVRfU1VQUE9SVCkKLS0gICAgICAgICAgewotLSAgICAgICAgICAg IC8qIFdoaWxlIGl0IGlzbid0IHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBvcGVuICIuIiB0aGlz Ci0tICAgICAgICAgICAgICAgZWFybHksIGRvaW5nIGl0IGhlcmUgc2F2ZXMgdXMgdGhlIHRyb3Vi bGUgb2YgZW5zdXJpbmcKLS0gICAgICAgICAgICAgICBsYXRlciAod2hlcmUgaXQnZCBiZSBtZXNz aWVyKSB0aGF0ICIuIiBjYW4gaW4gZmFjdAotLSAgICAgICAgICAgICAgIGJlIG9wZW5lZC4gIElm IG5vdCwgcmV2ZXJ0IHRvIEZUU19OT0NIRElSIG1vZGUuICAqLwotLSAgICAgICAgICAgIGludCBm ZCA9IG9wZW4gKCIuIiwgT19TRUFSQ0ggfCBPX0NMT0VYRUMpOwotLSAgICAgICAgICAgIGlmIChm ZCA8IDApCi0tICAgICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICAgIC8qIEV2ZW4gaWYgIi4i IGlzIHVucmVhZGFibGUsIGRvbid0IHJldmVydCB0byBGVFNfTk9DSERJUiBtb2RlCi0tICAgICAg ICAgICAgICAgICAgIG9uIHN5c3RlbXMgbGlrZSBMaW51eCtQUk9DX0ZTLCB3aGVyZSBvdXIgb3Bl bmF0IGVtdWxhdGlvbgotLSAgICAgICAgICAgICAgICAgICBpcyBnb29kIGVub3VnaC4gIE5vdGU6 IG9uIGEgc3lzdGVtIHRoYXQgZW11bGF0ZXMKLS0gICAgICAgICAgICAgICAgICAgb3BlbmF0IHZp YSAvcHJvYywgdGhpcyB0ZWNobmlxdWUgY2FuIHN0aWxsIGZhaWwsIGJ1dAotLSAgICAgICAgICAg ICAgICAgICBvbmx5IGluIGV4dHJlbWUgY29uZGl0aW9ucywgZS5nLiwgd2hlbiB0aGUgd29ya2lu ZwotLSAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2Fubm90IGJlIHNhdmVkIChpLmUuIHNh dmVfY3dkIGZhaWxzKSAtLQotLSAgICAgICAgICAgICAgICAgICBhbmQgdGhhdCBoYXBwZW5zIG9u IExpbnV4IG9ubHkgd2hlbiAiLiIgaXMgdW5yZWFkYWJsZQotLSAgICAgICAgICAgICAgICAgICBh bmQgdGhlIENXRCB3b3VsZCBiZSBsb25nZXIgdGhhbiBQQVRIX01BWC4KLS0gICAgICAgICAgICAg ICAgICAgRklYTUU6IG9uY2UgTGludXgga2VybmVsIG9wZW5hdCBzdXBwb3J0IGlzIHdlbGwgZXN0 YWJsaXNoZWQsCi0tICAgICAgICAgICAgICAgICAgIHJlcGxhY2UgdGhlIGFib3ZlIG9wZW4gY2Fs bCBhbmQgdGhpcyBlbnRpcmUgaWYvZWxzZSBibG9jawotLSAgICAgICAgICAgICAgICAgICB3aXRo IHRoZSBib2R5IG9mIHRoZSBpZi1ibG9jayBiZWxvdy4gICovCi0tICAgICAgICAgICAgICAgIGlm ICggb3BlbmF0X25lZWRzX2ZjaGRpciAoKSkKLS0gICAgICAgICAgICAgICAgICB7Ci0tICAgICAg ICAgICAgICAgICAgICBTRVQoRlRTX05PQ0hESVIpOwotLSAgICAgICAgICAgICAgICAgICAgQ0xS KEZUU19DV0RGRCk7Ci0tICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgfQotLSAg ICAgICAgICAgIGVsc2UKLS0gICAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAgICAgY2xvc2Ug KGZkKTsKLS0gICAgICAgICAgICAgIH0KLS0gICAgICAgICAgfQotLQotLSAgICAgICAgLyoKLS0g ICAgICAgICAqIFN0YXJ0IG91dCB3aXRoIDFLIG9mIGZpbGUgbmFtZSBzcGFjZSwgYW5kIGVub3Vn aCwgaW4gYW55IGNhc2UsCi0tICAgICAgICAgKiB0byBob2xkIHRoZSB1c2VyJ3MgZmlsZSBuYW1l cy4KLS0gICAgICAgICAqLwotLSNpZm5kZWYgTUFYUEFUSExFTgotLSMgZGVmaW5lIE1BWFBBVEhM RU4gMTAyNAotLSNlbmRpZgotLSAgICAgICAgewotLSAgICAgICAgICBzaXplX3QgbWF4YXJnbGVu ID0gZnRzX21heGFyZ2xlbihhcmd2KTsKLS0gICAgICAgICAgaWYgKCEgZnRzX3BhbGxvYyhzcCwg TUFYKG1heGFyZ2xlbiwgTUFYUEFUSExFTikpKQotLSAgICAgICAgICAgICAgICAgIGdvdG8gbWVt MTsKLS0gICAgICAgIH0KLS0KLS0gICAgICAgIC8qIEFsbG9jYXRlL2luaXRpYWxpemUgcm9vdCdz IHBhcmVudC4gKi8KLS0gICAgICAgIEZUU0VOVFJZICpwYXJlbnQgPSBOVUxMOwotLSAgICAgICAg aWYgKCphcmd2ICE9IE5VTEwpIHsKLS0gICAgICAgICAgICAgICAgaWYgKChwYXJlbnQgPSBmdHNf YWxsb2Moc3AsICIiLCAwKSkgPT0gTlVMTCkKLS0gICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IG1lbTI7Ci0tICAgICAgICAgICAgICAgIHBhcmVudC0+ZnRzX2xldmVsID0gRlRTX1JPT1RQQVJF TlRMRVZFTDsKLS0gICAgICAgICAgfQotLQotLSAgICAgICAgLyogVGhlIGNsYXNzaWMgZnRzIGlt cGxlbWVudGF0aW9uIHdvdWxkIGNhbGwgZnRzX3N0YXQgd2l0aAotLSAgICAgICAgICAgYSBuZXcg ZW50cnkgZm9yIGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBsb29wIGJlbG93LgotLSAgICAgICAgICAg SWYgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gaXMgbm90IHNwZWNpZmllZCBvciBpZiB0aGUKLS0g ICAgICAgICAgIEZUU19ERUZFUl9TVEFUIG9wdGlvbiBpcyBpbiBlZmZlY3QsIGRvbid0IHN0YXQg YW55IGVudHJ5Ci0tICAgICAgICAgICBpbiB0aGlzIGxvb3AuICBUaGlzIGlzIGFuIGF0dGVtcHQg dG8gbWluaW1pemUgdGhlIGludGVydmFsCi0tICAgICAgICAgICBiZXR3ZWVuIHRoZSBpbml0aWFs IHN0YXQvbHN0YXQvZnN0YXRhdCBhbmQgdGhlIHBvaW50IGF0IHdoaWNoCi0tICAgICAgICAgICBh IGRpcmVjdG9yeSBhcmd1bWVudCBpcyBmaXJzdCBvcGVuZWQuICBUaGlzIG1hdHRlcnMgZm9yIGFu eQotLSAgICAgICAgICAgZGlyZWN0b3J5IGNvbW1hbmQgbGluZSBhcmd1bWVudCB0aGF0IHJlc2lk ZXMgb24gYSBmaWxlIHN5c3RlbQotLSAgICAgICAgICAgd2l0aG91dCBnZW51aW5lIGktbm9kZXMu ICBJZiB5b3Ugc3BlY2lmeSBGVFNfREVGRVJfU1RBVCBhbG9uZwotLSAgICAgICAgICAgd2l0aCBh IGNvbXBhcmlzb24gZnVuY3Rpb24sIHRoYXQgZnVuY3Rpb24gbXVzdCBub3QgYWNjZXNzIGFueQot LSAgICAgICAgICAgZGF0YSB2aWEgdGhlIGZ0c19zdGF0cCBwb2ludGVyLiAgKi8KLS0gICAgICAg IGJvb2wgZGVmZXJfc3RhdCA9IChjb21wYXIgPT0gTlVMTCB8fCBJU1NFVChGVFNfREVGRVJfU1RB VCkpOwotLQotLSAgICAgICAgLyogQWxsb2NhdGUvaW5pdGlhbGl6ZSByb290KHMpLiAqLwotLSAg ICAgICAgcmVnaXN0ZXIgRlRTRU5UUlkgKnJvb3Q7Ci0tICAgICAgICByZWdpc3RlciBzaXplX3Qg bml0ZW1zOwotLSAgICAgICAgRlRTRU5UUlkgKnRtcCA9IE5VTEw7ICAgICAvKiBwYWNpZnkgZ2Nj ICovCi0tICAgICAgICBmb3IgKHJvb3QgPSBOVUxMLCBuaXRlbXMgPSAwOyAqYXJndiAhPSBOVUxM OyArK2FyZ3YsICsrbml0ZW1zKSB7Ci0tICAgICAgICAgICAgICAgIC8qICpEbyogYWxsb3cgemVy by1sZW5ndGggZmlsZSBuYW1lcy4gKi8KLS0gICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0 cmxlbigqYXJndik7Ci0tCi0tICAgICAgICAgICAgICAgIGlmICggISAob3B0aW9ucyAmIEZUU19W RVJCQVRJTSkpCi0tICAgICAgICAgICAgICAgICAgewotLSAgICAgICAgICAgICAgICAgICAgLyog SWYgdGhlcmUgYXJlIHR3byBvciBtb3JlIHRyYWlsaW5nIHNsYXNoZXMsIHRyaW0gYWxsIGJ1dCBv bmUsCi0tICAgICAgICAgICAgICAgICAgICAgICBidXQgZG9uJ3QgY2hhbmdlICIvLyIgdG8gIi8i LCBhbmQgZG8gbWFwICIvLy8iIHRvICIvIi4gICovCi0tICAgICAgICAgICAgICAgICAgICBjaGFy IGNvbnN0ICp2ID0gKmFyZ3Y7Ci0tICAgICAgICAgICAgICAgICAgICBpZiAoMiA8IGxlbiAmJiB2 W2xlbiAtIDFdID09ICcvJykKLS0gICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEgPCBsZW4g JiYgdltsZW4gLSAyXSA9PSAnLycpCi0tICAgICAgICAgICAgICAgICAgICAgICAgLS1sZW47Ci0t ICAgICAgICAgICAgICAgICAgfQotLQotLSAgICAgICAgICAgICAgICByZWdpc3RlciBGVFNFTlRS WSAqcCA9IGZ0c19hbGxvYyhzcCwgKmFyZ3YsIGxlbik7Ci0tICAgICAgICAgICAgICAgIGlmIChw ID09IE5VTEwpCi0tICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtZW0zOwotLSAgICAgICAg ICAgICAgICBwLT5mdHNfbGV2ZWwgPSBGVFNfUk9PVExFVkVMOwotLSAgICAgICAgICAgICAgICBw LT5mdHNfcGFyZW50ID0gcGFyZW50OwotLSAgICAgICAgICAgICAgICBwLT5mdHNfYWNjcGF0aCA9 IHAtPmZ0c19uYW1lOwotLSAgICAgICAgICAgICAgICAvKiBFdmVuIHdoZW4gZGVmZXJfc3RhdCBp cyB0cnVlLCBiZSBzdXJlIHRvIHN0YXQgdGhlIGZpcnN0Ci0tICAgICAgICAgICAgICAgICAgIGNv bW1hbmQgbGluZSBhcmd1bWVudCwgc2luY2UgZnRzX3JlYWQgKGF0IGxlYXN0IHdpdGgKLS0gICAg ICAgICAgICAgICAgICAgRlRTX1hERVYpIHJlcXVpcmVzIHRoYXQuICAqLwotLSAgICAgICAgICAg ICAgICBpZiAoZGVmZXJfc3RhdCAmJiByb290ICE9IE5VTEwpIHsKLS0gICAgICAgICAgICAgICAg ICAgICAgICBwLT5mdHNfaW5mbyA9IEZUU19OU09LOwotLSAgICAgICAgICAgICAgICAgICAgICAg IGZ0c19zZXRfc3RhdF9yZXF1aXJlZChwLCB0cnVlKTsKLS0gICAgICAgICAgICAgICAgfSBlbHNl IHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfaW5mbyA9IGZ0c19zdGF0KHNwLCBw LCBmYWxzZSk7Ci0tICAgICAgICAgICAgICAgIH0KLS0KLS0gICAgICAgICAgICAgICAgLyoKLS0g ICAgICAgICAgICAgICAgICogSWYgY29tcGFyaXNvbiByb3V0aW5lIHN1cHBsaWVkLCB0cmF2ZXJz ZSBpbiBzb3J0ZWQKLS0gICAgICAgICAgICAgICAgICogb3JkZXI7IG90aGVyd2lzZSB0cmF2ZXJz ZSBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkLgotLSAgICAgICAgICAgICAgICAgKi8KLS0gICAgICAg ICAgICAgICAgaWYgKGNvbXBhcikgewotLSAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19s aW5rID0gcm9vdDsKLS0gICAgICAgICAgICAgICAgICAgICAgICByb290ID0gcDsKLS0gICAgICAg ICAgICAgICAgfSBlbHNlIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfbGluayA9 IE5VTEw7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvb3QgPT0gTlVMTCkKLS0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHJvb3QgPSBwOwotLSAgICAgICAgICAg ICAgICAgICAgICAgIGVsc2UgewotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1w LT5mdHNfbGluayA9IHA7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBw OwotLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAgfQotLSAgICAg ICAgfQotLSAgICAgICAgaWYgKGNvbXBhciAmJiBuaXRlbXMgPiAxKQotLSAgICAgICAgICAgICAg ICByb290ID0gZnRzX3NvcnQoc3AsIHJvb3QsIG5pdGVtcyk7Ci0tCi0tICAgICAgICAvKgotLSAg ICAgICAgICogQWxsb2NhdGUgYSBkdW1teSBwb2ludGVyIGFuZCBtYWtlIGZ0c19yZWFkIHRoaW5r IHRoYXQgd2UndmUganVzdAotLSAgICAgICAgICogZmluaXNoZWQgdGhlIG5vZGUgYmVmb3JlIHRo ZSByb290KHMpOyBzZXQgcC0+ZnRzX2luZm8gdG8gRlRTX0lOSVQKLS0gICAgICAgICAqIHNvIHRo YXQgZXZlcnl0aGluZyBhYm91dCB0aGUgImN1cnJlbnQiIG5vZGUgaXMgaWdub3JlZC4KLS0gICAg ICAgICAqLwotLSAgICAgICAgaWYgKChzcC0+ZnRzX2N1ciA9IGZ0c19hbGxvYyhzcCwgIiIsIDAp KSA9PSBOVUxMKQotLSAgICAgICAgICAgICAgICBnb3RvIG1lbTM7Ci0tICAgICAgICBzcC0+ZnRz X2N1ci0+ZnRzX2xpbmsgPSByb290OwotLSAgICAgICAgc3AtPmZ0c19jdXItPmZ0c19pbmZvID0g RlRTX0lOSVQ7Ci0tICAgICAgICBzcC0+ZnRzX2N1ci0+ZnRzX2xldmVsID0gMTsKLS0gICAgICAg IGlmICghIHNldHVwX2RpciAoc3ApKQotLSAgICAgICAgICAgICAgICBnb3RvIG1lbTM7Ci0tCi0t ICAgICAgICAvKgotLSAgICAgICAgICogSWYgdXNpbmcgY2hkaXIoMiksIGdyYWIgYSBmaWxlIGRl c2NyaXB0b3IgcG9pbnRpbmcgdG8gZG90IHRvIGVuc3VyZQotLSAgICAgICAgICogdGhhdCB3ZSBj YW4gZ2V0IGJhY2sgaGVyZTsgdGhpcyBjb3VsZCBiZSBhdm9pZGVkIGZvciBzb21lIGZpbGUgbmFt ZXMsCi0tICAgICAgICAgKiBidXQgYWxtb3N0IGNlcnRhaW5seSBub3Qgd29ydGggdGhlIGVmZm9y dC4gIFNsYXNoZXMsIHN5bWJvbGljIGxpbmtzLAotLSAgICAgICAgICogYW5kICIuLiIgYXJlIGFs bCBmYWlybHkgbmFzdHkgcHJvYmxlbXMuICBOb3RlLCBpZiB3ZSBjYW4ndCBnZXQgdGhlCi0tICAg ICAgICAgKiBkZXNjcmlwdG9yIHdlIHJ1biBhbnl3YXksIGp1c3QgbW9yZSBzbG93bHkuCi0tICAg ICAgICAgKi8KLS0gICAgICAgIGlmICghSVNTRVQoRlRTX05PQ0hESVIpICYmICFJU1NFVChGVFNf Q1dERkQpCi0tICAgICAgICAgICAgJiYgKHNwLT5mdHNfcmZkID0gZGlyb3BlbiAoc3AsICIuIikp IDwgMCkKLS0gICAgICAgICAgICAgICAgU0VUKEZUU19OT0NIRElSKTsKLS0KLS0gICAgICAgIGlf cmluZ19pbml0ICgmc3AtPmZ0c19mZF9yaW5nLCAtMSk7Ci0tICAgICAgICByZXR1cm4gKHNwKTsK LS0KLS1tZW0zOiAgIGZ0c19sZnJlZShyb290KTsKLS0gICAgICAgIGZyZWUoRlRTRU5UX1dSQVBQ RVIocGFyZW50KSk7Ci0tbWVtMjogICBmcmVlKHNwLT5mdHNfcGF0aCk7Ci0tbWVtMTogICBmcmVl KHNwKTsKLS0gICAgICAgIHJldHVybiAoTlVMTCk7Ci0rbWVtMzoJZnRzX2xmcmVlKHJvb3QpOwot KwlmcmVlKHBhcmVudCk7Ci0rbWVtMjoJZnJlZShzcC0+ZnRzX3BhdGgpOwotK21lbTE6CWZyZWUo c3ApOwotKwlyZXR1cm4gKE5VTEwpOwotIH0KLSAKLSBzdGF0aWMgdm9pZAotLWludGVybmFsX2Z1 bmN0aW9uCi0tZnRzX2xvYWQgKEZUU09CSiAqc3AsIHJlZ2lzdGVyIEZUU0VOVFJZICpwKQotK2Z0 c19sb2FkIChGVFNPQkogKnNwLCBGVFNFTlRSWSAqcCkKLSB7Ci0tICAgICAgICAvKgotLSAgICAg ICAgICogTG9hZCB0aGUgc3RyZWFtIHN0cnVjdHVyZSBmb3IgdGhlIG5leHQgdHJhdmVyc2FsLiAg U2luY2Ugd2UgZG9uJ3QKLS0gICAgICAgICAqIGFjdHVhbGx5IGVudGVyIHRoZSBkaXJlY3Rvcnkg dW50aWwgYWZ0ZXIgdGhlIHByZW9yZGVyIHZpc2l0LCBzZXQKLS0gICAgICAgICAqIHRoZSBmdHNf YWNjcGF0aCBmaWVsZCBzcGVjaWFsbHkgc28gdGhlIGNoZGlyIGdldHMgZG9uZSB0byB0aGUgcmln aHQKLS0gICAgICAgICAqIHBsYWNlIGFuZCB0aGUgdXNlciBjYW4gYWNjZXNzIHRoZSBmaXJzdCBu b2RlLiAgRnJvbSBmdHNfb3BlbiBpdCdzCi0tICAgICAgICAgKiBrbm93biB0aGF0IHRoZSBmaWxl IG5hbWUgd2lsbCBmaXQuCi0tICAgICAgICAgKi8KLS0gICAgICAgIHJlZ2lzdGVyIHNpemVfdCBs ZW4gPSBwLT5mdHNfcGF0aGxlbiA9IHAtPmZ0c19uYW1lbGVuOwotLSAgICAgICAgbWVtbW92ZShz cC0+ZnRzX3BhdGgsIHAtPmZ0c19uYW1lLCBsZW4gKyAxKTsKLS0gICAgICAgIHJlZ2lzdGVyIGNo YXIgKmNwID0gc3RycmNocihwLT5mdHNfbmFtZSwgJy8nKTsKLS0gICAgICAgIGlmIChjcCAmJiAo Y3AgIT0gcC0+ZnRzX25hbWUgfHwgY3BbMV0pKSB7Ci0tICAgICAgICAgICAgICAgIGxlbiA9IHN0 cmxlbigrK2NwKTsKLS0gICAgICAgICAgICAgICAgbWVtbW92ZShwLT5mdHNfbmFtZSwgY3AsIGxl biArIDEpOwotLSAgICAgICAgICAgICAgICBwLT5mdHNfbmFtZWxlbiA9IGxlbjsKLS0gICAgICAg IH0KLS0gICAgICAgIHAtPmZ0c19hY2NwYXRoID0gcC0+ZnRzX3BhdGggPSBzcC0+ZnRzX3BhdGg7 Ci0rCWludCBsZW47Ci0rCWNoYXIgKmNwOwotKwotKwkvKgotKwkgKiBMb2FkIHRoZSBzdHJlYW0g c3RydWN0dXJlIGZvciB0aGUgbmV4dCB0cmF2ZXJzYWwuICBTaW5jZSB3ZSBkb24ndAotKwkgKiBh Y3R1YWxseSBlbnRlciB0aGUgZGlyZWN0b3J5IHVudGlsIGFmdGVyIHRoZSBwcmVvcmRlciB2aXNp dCwgc2V0Ci0rCSAqIHRoZSBmdHNfYWNjcGF0aCBmaWVsZCBzcGVjaWFsbHkgc28gdGhlIGNoZGly IGdldHMgZG9uZSB0byB0aGUgcmlnaHQKLSsJICogcGxhY2UgYW5kIHRoZSB1c2VyIGNhbiBhY2Nl c3MgdGhlIGZpcnN0IG5vZGUuICBGcm9tIGZ0c19vcGVuIGl0J3MKLSsJICoga25vd24gdGhhdCB0 aGUgcGF0aCB3aWxsIGZpdC4KLSsJICovCi0rCWxlbiA9IHAtPmZ0c19wYXRobGVuID0gcC0+ZnRz X25hbWVsZW47Ci0rCW1lbW1vdmUoc3AtPmZ0c19wYXRoLCBwLT5mdHNfbmFtZSwgbGVuICsgMSk7 Ci0rCWlmICgoY3AgPSBzdHJyY2hyKHAtPmZ0c19uYW1lLCAnLycpKSAmJiAoY3AgIT0gcC0+ZnRz X25hbWUgfHwgY3BbMV0pKSB7Ci0rCQlsZW4gPSBzdHJsZW4oKytjcCk7Ci0rCQltZW1tb3ZlKHAt PmZ0c19uYW1lLCBjcCwgbGVuICsgMSk7Ci0rCQlwLT5mdHNfbmFtZWxlbiA9IGxlbjsKLSsJfQot KwlwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0c19wYXRoID0gc3AtPmZ0c19wYXRoOwotKwlzcC0+ZnRz X2RldiA9IHAtPmZ0c19kZXY7Ci0gfQotIAotIGludAotIEZUU19DTE9TRSAoRlRTT0JKICpzcCkK LSB7Ci0tICAgICAgICAvKgotLSAgICAgICAgICogVGhpcyBzdGlsbCB3b3JrcyBpZiB3ZSBoYXZl bid0IHJlYWQgYW55dGhpbmcgLS0gdGhlIGR1bW15IHN0cnVjdHVyZQotLSAgICAgICAgICogcG9p bnRzIHRvIHRoZSByb290IGxpc3QsIHNvIHdlIHN0ZXAgdGhyb3VnaCB0byB0aGUgZW5kIG9mIHRo ZSByb290Ci0tICAgICAgICAgKiBsaXN0IHdoaWNoIGhhcyBhIHZhbGlkIHBhcmVudCBwb2ludGVy LgotLSAgICAgICAgICovCi0tICAgICAgICBpZiAoc3AtPmZ0c19jdXIpIHsKLS0gICAgICAgICAg ICAgICAgcmVnaXN0ZXIgRlRTRU5UUlkgKnA7Ci0tICAgICAgICAgICAgICAgIGZvciAocCA9IHNw LT5mdHNfY3VyOyBwLT5mdHNfbGV2ZWwgPj0gRlRTX1JPT1RMRVZFTDspIHsKLS0gICAgICAgICAg ICAgICAgICAgICAgICByZWdpc3RlciBGVFNFTlRSWSAqZnJlZXAgPSBwOwotLSAgICAgICAgICAg ICAgICAgICAgICAgIHAgPSBwLT5mdHNfbGluayAhPSBOVUxMID8gcC0+ZnRzX2xpbmsgOiBwLT5m dHNfcGFyZW50OwotLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoRlRTRU5UX1dSQVBQRVIo ZnJlZXApKTsKLS0gICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICBmcmVlKEZUU0VO VF9XUkFQUEVSKHApKTsKLS0gICAgICAgIH0KLS0KLS0gICAgICAgIC8qIEZyZWUgdXAgY2hpbGQg bGlua2VkIGxpc3QsIHNvcnQgYXJyYXksIGZpbGUgbmFtZSBidWZmZXIuICovCi0tICAgICAgICBp ZiAoc3AtPmZ0c19jaGlsZCkKLS0gICAgICAgICAgICAgICAgZnRzX2xmcmVlKHNwLT5mdHNfY2hp bGQpOwotLSAgICAgICAgZnJlZShzcC0+ZnRzX2FycmF5KTsKLS0gICAgICAgIGZyZWUoc3AtPmZ0 c19wYXRoKTsKLS0KLS0gICAgICAgIGludCBzYXZlZF9lcnJubyA9IDA7Ci0tICAgICAgICBpZiAo SVNTRVQoRlRTX0NXREZEKSkKLS0gICAgICAgICAgewotLSAgICAgICAgICAgIGlmICgwIDw9IHNw LT5mdHNfY3dkX2ZkKQotLSAgICAgICAgICAgICAgaWYgKGNsb3NlIChzcC0+ZnRzX2N3ZF9mZCkp Ci0tICAgICAgICAgICAgICAgIHNhdmVkX2Vycm5vID0gZXJybm87Ci0tICAgICAgICAgIH0KLS0g ICAgICAgIGVsc2UgaWYgKCFJU1NFVChGVFNfTk9DSERJUikpCi0tICAgICAgICAgIHsKLS0gICAg ICAgICAgICAvKiBSZXR1cm4gdG8gb3JpZ2luYWwgZGlyZWN0b3J5LCBzYXZlIGVycm5vIGlmIG5l Y2Vzc2FyeS4gKi8KLS0gICAgICAgICAgICBpZiAoZmNoZGlyKHNwLT5mdHNfcmZkKSkKLS0gICAg ICAgICAgICAgIHNhdmVkX2Vycm5vID0gZXJybm87Ci0tCi0tICAgICAgICAgICAgLyogSWYgY2xv c2UgZmFpbHMsIHJlY29yZCBlcnJubyBvbmx5IGlmIHNhdmVkX2Vycm5vIGlzIHplcm8sCi0tICAg ICAgICAgICAgICAgc28gdGhhdCB3ZSByZXBvcnQgdGhlIHByb2JhYmx5LW1vcmUtbWVhbmluZ2Z1 bCBmY2hkaXIgZXJybm8uICAqLwotLSAgICAgICAgICAgIGlmIChjbG9zZSAoc3AtPmZ0c19yZmQp KQotLSAgICAgICAgICAgICAgaWYgKHNhdmVkX2Vycm5vID09IDApCi0tICAgICAgICAgICAgICAg IHNhdmVkX2Vycm5vID0gZXJybm87Ci0tICAgICAgICAgIH0KLS0KLS0gICAgICAgIGZkX3Jpbmdf Y2xlYXIgKCZzcC0+ZnRzX2ZkX3JpbmcpOwotLQotLSAgICAgICAgaWYgKHNwLT5mdHNfbGVhZl9v cHRpbWl6YXRpb25fd29ya3NfaHQpCi0tICAgICAgICAgIGhhc2hfZnJlZSAoc3AtPmZ0c19sZWFm X29wdGltaXphdGlvbl93b3Jrc19odCk7Ci0tCi0tICAgICAgICBmcmVlX2RpciAoc3ApOwotLQot LSAgICAgICAgLyogRnJlZSB1cCB0aGUgc3RyZWFtIHBvaW50ZXIuICovCi0tICAgICAgICBmcmVl KHNwKTsKLS0KLS0gICAgICAgIC8qIFNldCBlcnJubyBhbmQgcmV0dXJuLiAqLwotLSAgICAgICAg aWYgKHNhdmVkX2Vycm5vKSB7Ci0tICAgICAgICAgICAgICAgIF9fc2V0X2Vycm5vIChzYXZlZF9l cnJubyk7Ci0tICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOwotLSAgICAgICAgfQotLQotLSAg ICAgICAgcmV0dXJuICgwKTsKLS19Ci0rCUZUU0VOVFJZICpmcmVlcCwgKnA7Ci0rCWludCBzYXZl ZF9lcnJubzsKLSAKLS0vKiBNaW5pbXVtIGxpbmsgY291bnQgb2YgYSB0cmFkaXRpb25hbCBVbml4 IGRpcmVjdG9yeS4gIFdoZW4gbGVhZgotLSAgIG9wdGltaXphdGlvbiBpcyBPSyBhbmQgYSBkaXJl Y3RvcnkncyBzdF9ubGluayA9PSBNSU5fRElSX05MSU5LLAotLSAgIHRoZW4gdGhlIGRpcmVjdG9y eSBoYXMgbm8gc3ViZGlyZWN0b3JpZXMuICAqLwotLWVudW0geyBNSU5fRElSX05MSU5LID0gMiB9 OwotLQotLS8qIFdoZXRoZXIgbGVhZiBvcHRpbWl6YXRpb24gaXMgT0sgZm9yIGEgZGlyZWN0b3J5 LiAgKi8KLS1lbnVtIGxlYWZfb3B0aW1pemF0aW9uCi0tICB7Ci0tICAgIC8qIHN0X25saW5rIGlz IG5vdCByZWxpYWJsZSBmb3IgdGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3Rvcmllcy4gICovCi0t ICAgIE5PX0xFQUZfT1BUSU1JWkFUSU9OLAotLQotLSAgICAvKiBzdF9ubGluayA9PSAyIG1lYW5z IHRoZSBkaXJlY3RvcnkgbGFja3Mgc3ViZGlyZWN0b3JpZXMuICAqLwotLSAgICBPS19MRUFGX09Q VElNSVpBVElPTgotLSAgfTsKLS0KLS0jaWYgKGRlZmluZWQgX19saW51eF9fIHx8IGRlZmluZWQg X19BTkRST0lEX18pIFwKLS0gICYmIEhBVkVfU1lTX1ZGU19IICYmIEhBVkVfRlNUQVRGUyAmJiBI QVZFX1NUUlVDVF9TVEFURlNfRl9UWVBFCi0tCi0tIyBpbmNsdWRlIDxzeXMvdmZzLmg+Ci0tCi0t LyogTGludXgtc3BlY2lmaWMgY29uc3RhbnRzIGZyb20gY29yZXV0aWxzJyBzcmMvZnMuaCAqLwot LSMgZGVmaW5lIFNfTUFHSUNfQUZTIDB4NTM0NjQxNEYKLS0jIGRlZmluZSBTX01BR0lDX0NJRlMg MHhGRjUzNEQ0MgotLSMgZGVmaW5lIFNfTUFHSUNfTFVTVFJFIDB4MEJEMDBCRDAKLS0jIGRlZmlu ZSBTX01BR0lDX05GUyAweDY5NjkKLS0jIGRlZmluZSBTX01BR0lDX1BST0MgMHg5RkEwCi0tIyBk ZWZpbmUgU19NQUdJQ19UTVBGUyAweDEwMjE5OTQKLS0KLS0jIGlmZGVmIEhBVkVfX19GU1dPUkRf VAotLXR5cGVkZWYgX19mc3dvcmRfdCBmc3dvcmQ7Ci0tIyBlbHNlCi0tdHlwZWRlZiBsb25nIGlu dCBmc3dvcmQ7Ci0tIyBlbmRpZgotLQotLS8qIE1hcCBhIHN0YXQuc3RfZGV2IG51bWJlciB0byBh IGZpbGUgc3lzdGVtIHR5cGUgbnVtYmVyIGZfZnR5cGUuICAqLwotLXN0cnVjdCBkZXZfdHlwZQot LXsKLS0gIGRldl90IHN0X2RldjsKLS0gIGZzd29yZCBmX3R5cGU7Ci0tfTsKLS0KLS0vKiBVc2Ug YSB0aW55IGluaXRpYWwgc2l6ZS4gIElmIGEgdHJhdmVyc2FsIGVuY291bnRlcnMgbW9yZSB0aGFu Ci0tICAgYSBmZXcgZGV2aWNlcywgdGhlIGNvc3Qgb2YgZ3Jvd2luZy9yZWhhc2hpbmcgdGhpcyB0 YWJsZSB3aWxsIGJlCi0tICAgcmVuZGVyZWQgbmVnbGlnaWJsZSBieSB0aGUgbnVtYmVyIG9mIGlu b2RlcyBwcm9jZXNzZWQuICAqLwotLWVudW0geyBERVZfVFlQRV9IVF9JTklUSUFMX1NJWkUgPSAx MyB9OwotLQotLXN0YXRpYyBzaXplX3QKLS1kZXZfdHlwZV9oYXNoICh2b2lkIGNvbnN0ICp4LCBz aXplX3QgdGFibGVfc2l6ZSkKLS17Ci0tICBzdHJ1Y3QgZGV2X3R5cGUgY29uc3QgKmF4ID0geDsK LS0gIHVpbnRtYXhfdCBkZXYgPSBheC0+c3RfZGV2OwotLSAgcmV0dXJuIGRldiAlIHRhYmxlX3Np emU7Ci0tfQotLQotLXN0YXRpYyBib29sCi0tZGV2X3R5cGVfY29tcGFyZSAodm9pZCBjb25zdCAq eCwgdm9pZCBjb25zdCAqeSkKLS17Ci0tICBzdHJ1Y3QgZGV2X3R5cGUgY29uc3QgKmF4ID0geDsK LS0gIHN0cnVjdCBkZXZfdHlwZSBjb25zdCAqYXkgPSB5OwotLSAgcmV0dXJuIGF4LT5zdF9kZXYg PT0gYXktPnN0X2RldjsKLSsJLyoKLSsJICogVGhpcyBzdGlsbCB3b3JrcyBpZiB3ZSBoYXZlbid0 IHJlYWQgYW55dGhpbmcgLS0gdGhlIGR1bW15IHN0cnVjdHVyZQotKwkgKiBwb2ludHMgdG8gdGhl IHJvb3QgbGlzdCwgc28gd2Ugc3RlcCB0aHJvdWdoIHRvIHRoZSBlbmQgb2YgdGhlIHJvb3QKLSsJ ICogbGlzdCB3aGljaCBoYXMgYSB2YWxpZCBwYXJlbnQgcG9pbnRlci4KLSsJICovCi0rCWlmIChz cC0+ZnRzX2N1cikgewotKwkJZm9yIChwID0gc3AtPmZ0c19jdXI7IHAtPmZ0c19sZXZlbCA+PSBG VFNfUk9PVExFVkVMOykgewotKwkJCWZyZWVwID0gcDsKLSsJCQlwID0gcC0+ZnRzX2xpbmsgIT0g TlVMTCA/IHAtPmZ0c19saW5rIDogcC0+ZnRzX3BhcmVudDsKLSsJCQlmcmVlKGZyZWVwKTsKLSsJ CX0KLSsJCWZyZWUocCk7Ci0rCX0KLSsKLSsJLyogRnJlZSB1cCBjaGlsZCBsaW5rZWQgbGlzdCwg c29ydCBhcnJheSwgcGF0aCBidWZmZXIuICovCi0rCWlmIChzcC0+ZnRzX2NoaWxkKQotKwkJZnRz X2xmcmVlKHNwLT5mdHNfY2hpbGQpOwotKwlmcmVlKHNwLT5mdHNfYXJyYXkpOwotKwlmcmVlKHNw LT5mdHNfcGF0aCk7Ci0rCi0rCS8qIFJldHVybiB0byBvcmlnaW5hbCBkaXJlY3RvcnksIHNhdmUg ZXJybm8gaWYgbmVjZXNzYXJ5LiAqLwotKwlpZiAoIUlTU0VUKEZUU19OT0NIRElSKSkgewotKwkJ c2F2ZWRfZXJybm8gPSBfX2ZjaGRpcihzcC0+ZnRzX3JmZCkgPyBlcnJubyA6IDA7Ci0rCQkodm9p ZClfX2Nsb3NlKHNwLT5mdHNfcmZkKTsKLSsKLSsJCS8qIFNldCBlcnJubyBhbmQgcmV0dXJuLiAq LwotKwkJaWYgKHNhdmVkX2Vycm5vICE9IDApIHsKLSsJCQkvKiBGcmVlIHVwIHRoZSBzdHJlYW0g cG9pbnRlci4gKi8KLSsJCQlmcmVlKHNwKTsKLSsJCQlfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8p OwotKwkJCXJldHVybiAoLTEpOwotKwkJfQotKwl9Ci0rCi0rCS8qIEZyZWUgdXAgdGhlIHN0cmVh bSBwb2ludGVyLiAqLwotKwlmcmVlKHNwKTsKLSsJcmV0dXJuICgwKTsKLSB9Ci0gCi0tLyogUmV0 dXJuIHRoZSBmaWxlIHN5c3RlbSB0eXBlIG9mIFAgd2l0aCBmaWxlIGRlc2NyaXB0b3IgRkQsIG9y IDAgaWYgbm90IGtub3duLgotLSAgIElmIEZEIGlzIG5lZ2F0aXZlLCBQJ3MgZmlsZSBkZXNjcmlw dG9yIGlzIHVuYXZhaWxhYmxlLgotLSAgIFRyeSB0byBjYWNoZSBrbm93biB2YWx1ZXMuICAqLwot Ky8qCi0rICogU3BlY2lhbCBjYXNlIG9mICIvIiBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIHNvIHRo YXQgc2xhc2hlcyBhcmVuJ3QKLSsgKiBhcHBlbmRlZCB3aGljaCB3b3VsZCBjYXVzZSBwYXRocyB0 byBiZSB3cml0dGVuIGFzICIuLi4uLy9mb28iLgotKyAqLwotKyNkZWZpbmUJTkFQUEVORChwKQkJ CQkJCQlcCi0rCShwLT5mdHNfcGF0aFtwLT5mdHNfcGF0aGxlbiAtIDFdID09ICcvJwkJCQlcCi0r CSAgICA/IHAtPmZ0c19wYXRobGVuIC0gMSA6IHAtPmZ0c19wYXRobGVuKQotIAotLXN0YXRpYyBm c3dvcmQKLS1maWxlc3lzdGVtX3R5cGUgKEZUU0VOVFJZIGNvbnN0ICpwLCBpbnQgZmQpCi0rRlRT RU5UUlkgKgotK0ZUU19SRUFEIChGVFNPQkogKnNwKQotIHsKLS0gIEZUU09CSiAqc3AgPSBGVFNF TlRfRlRTKHApOwotLQotLSAgLyogSWYgd2UncmUgbm90IGluIENXREZEIG1vZGUsIGRvbid0IGJv dGhlciB3aXRoIHRoaXMgb3B0aW1pemF0aW9uLAotLSAgICAgc2luY2UgdGhlIGNhbGxlciBpcyBu b3Qgc2VyaW91cyBhYm91dCBwZXJmb3JtYW5jZS4gICovCi0tICBpZiAoIUlTU0VUIChGVFNfQ1dE RkQpKQotLSAgICByZXR1cm4gMDsKLS0KLS0gIEhhc2hfdGFibGUgKmggPSBzcC0+ZnRzX2xlYWZf b3B0aW1pemF0aW9uX3dvcmtzX2h0OwotLSAgaWYgKCEgaCkKLS0gICAgaCA9IHNwLT5mdHNfbGVh Zl9vcHRpbWl6YXRpb25fd29ya3NfaHQKLS0gICAgICA9IGhhc2hfaW5pdGlhbGl6ZSAoREVWX1RZ UEVfSFRfSU5JVElBTF9TSVpFLCBOVUxMLCBkZXZfdHlwZV9oYXNoLAotLSAgICAgICAgICAgICAg ICAgICAgICAgICBkZXZfdHlwZV9jb21wYXJlLCBmcmVlKTsKLS0KLS0gIGlmIChoKQotLSAgICB7 Ci0tICAgICAgc3RydWN0IGRldl90eXBlIHRtcDsKLS0gICAgICB0bXAuc3RfZGV2ID0gcC0+ZnRz X3N0YXRwLT5zdF9kZXY7Ci0tICAgICAgc3RydWN0IGRldl90eXBlICplbnQgPSBoYXNoX2xvb2t1 cCAoaCwgJnRtcCk7Ci0tICAgICAgaWYgKGVudCkKLS0gICAgICAgIHJldHVybiBlbnQtPmZfdHlw ZTsKLS0gICAgfQotLQotLSAgLyogTG9vay11cCBmYWlsZWQuICBRdWVyeSBkaXJlY3RseSBhbmQg Y2FjaGUgdGhlIHJlc3VsdC4gICovCi0tICBzdHJ1Y3QgU1RSVUNUX1NUQVRGUyBmc19idWY7Ci0t ICBpZiAoZmQgPCAwIHx8IEZTVEFURlMgKGZkLCAmZnNfYnVmKSAhPSAwKQotLSAgICByZXR1cm4g MDsKLS0KLS0gIGlmIChoKQotLSAgICB7Ci0tICAgICAgc3RydWN0IGRldl90eXBlICp0MiA9IG1h bGxvYyAoc2l6ZW9mICp0Mik7Ci0tICAgICAgaWYgKHQyKQotLSAgICAgICAgewotLSAgICAgICAg ICB0Mi0+c3RfZGV2ID0gcC0+ZnRzX3N0YXRwLT5zdF9kZXY7Ci0tICAgICAgICAgIHQyLT5mX3R5 cGUgPSBmc19idWYuZl90eXBlOwotLQotLSAgICAgICAgICBzdHJ1Y3QgZGV2X3R5cGUgKmVudCA9 IGhhc2hfaW5zZXJ0IChoLCB0Mik7Ci0tICAgICAgICAgIGlmIChlbnQpCi0tICAgICAgICAgICAg ZnRzX2Fzc2VydCAoZW50ID09IHQyKTsKLS0gICAgICAgICAgZWxzZQotLSAgICAgICAgICAgIGZy ZWUgKHQyKTsKLS0gICAgICAgIH0KLS0gICAgfQotLQotLSAgcmV0dXJuIGZzX2J1Zi5mX3R5cGU7 Ci0tfQotKwlGVFNFTlRSWSAqcCwgKnRtcDsKLSsJaW50IGluc3RyOwotKwljaGFyICp0OwotKwlp bnQgc2F2ZWRfZXJybm87Ci0gCi0tLyogUmV0dXJuIHRydWUgaWYgc29ydGluZyBkaXJlbnRzIG9u IGlub2RlIG51bWJlcnMgaXMga25vd24gdG8gaW1wcm92ZQotLSAgIHRyYXZlcnNhbCBwZXJmb3Jt YW5jZSBmb3IgdGhlIGRpcmVjdG9yeSBQIHdpdGggZGVzY3JpcHRvciBESVJfRkQuCi0tICAgUmV0 dXJuIGZhbHNlIG90aGVyd2lzZS4gIFdoZW4gaW4gZG91YnQsIHJldHVybiB0cnVlLgotLSAgIERJ Ul9GRCBpcyBuZWdhdGl2ZSBpZiB1bmF2YWlsYWJsZS4gICovCi0tc3RhdGljIGJvb2wKLS1kaXJl bnRfaW5vZGVfc29ydF9tYXlfYmVfdXNlZnVsIChGVFNFTlRSWSBjb25zdCAqcCwgaW50IGRpcl9m ZCkKLS17Ci0tICAvKiBTa2lwIHRoZSBzb3J0IG9ubHkgaWYgd2UgY2FuIGRldGVybWluZSBlZmZp Y2llbnRseQotLSAgICAgdGhhdCBza2lwcGluZyBpdCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8u Ci0tICAgICBUaGUgY29zdCBvZiBwZXJmb3JtaW5nIGFuIHVubmVjZXNzYXJ5IHNvcnQgaXMgbmVn bGlnaWJsZSwKLS0gICAgIHdoaWxlIHRoZSBjb3N0IG9mICpub3QqIHBlcmZvcm1pbmcgaXQgY2Fu IGJlIE8oTl4yKSB3aXRoCi0tICAgICBhIHZlcnkgbGFyZ2UgY29uc3RhbnQuICAqLwotLQotLSAg c3dpdGNoIChmaWxlc3lzdGVtX3R5cGUgKHAsIGRpcl9mZCkpCi0tICAgIHsKLS0gICAgY2FzZSBT X01BR0lDX0xVU1RSRToKLS0gICAgICAvKiBPbiBMdXN0cmUsIHNvcnRpbmcgZGlyZWN0b3J5IGVu dHJpZXMgaW50ZXJmZXJlcyB3aXRoIGl0cyBhYmlsaXR5IHRvCi0tICAgICAgICAgcHJlZmV0Y2gg ZmlsZSBtZXRhZGF0YSAodmlhIHN0YXRhaGVhZCkuICBUaGlzIHdvdWxkIG1ha2UgYSBjb21tYW5k Ci0tICAgICAgICAgbGlrZSAnZHUnIGFyb3VuZCA5IHRpbWVzIHNsb3dlci4gIFNlZQotLSAgICAg ICAgIDxodHRwczovL2J1Z3MuZ251Lm9yZy84MDEwNj4uICAqLwotLSAgICBjYXNlIFNfTUFHSUNf Q0lGUzoKLS0gICAgY2FzZSBTX01BR0lDX05GUzoKLS0gICAgY2FzZSBTX01BR0lDX1RNUEZTOgot LSAgICAgIC8qIE9uIGEgZmlsZSBzeXN0ZW0gb2YgYW55IG9mIHRoZXNlIHR5cGVzLCBzb3J0aW5n Ci0tICAgICAgICAgaXMgdW5uZWNlc3NhcnksIGFuZCBoZW5jZSB3YXN0ZWZ1bC4gICovCi0tICAg ICAgcmV0dXJuIGZhbHNlOwotLQotLSAgICBkZWZhdWx0OgotLSAgICAgIHJldHVybiB0cnVlOwot LSAgICB9Ci0tfQotKwkvKiBJZiBmaW5pc2hlZCBvciB1bnJlY292ZXJhYmxlIGVycm9yLCByZXR1 cm4gTlVMTC4gKi8KLSsJaWYgKHNwLT5mdHNfY3VyID09IE5VTEwgfHwgSVNTRVQoRlRTX1NUT1Ap KQotKwkJcmV0dXJuIChOVUxMKTsKLSAKLS0vKiBHaXZlbiBhbiBGVFMgZW50cnkgUCBmb3IgYSBk aXJlY3Rvcnkgd2l0aCBkZXNjcmlwdG9yIERJUl9GRCwKLS0gICByZXR1cm4gd2hldGhlciBpdCBp cyB2YWxpZCB0byBhcHBseSBsZWFmIG9wdGltaXphdGlvbi4KLS0gICBUaGUgb3B0aW1pemF0aW9u IGlzIHZhbGlkIGlmIGEgZGlyZWN0b3J5J3Mgc3RfbmxpbmsgdmFsdWUgZXF1YWwKLS0gICB0byBN SU5fRElSX05MSU5LIG1lYW5zIHRoZSBkaXJlY3RvcnkgaGFzIG5vIHN1YmRpcmVjdG9yaWVzLgot LSAgIERJUl9GRCBpcyBuZWdhdGl2ZSBpZiB1bmF2YWlsYWJsZS4gICovCi0tc3RhdGljIGVudW0g bGVhZl9vcHRpbWl6YXRpb24KLS1sZWFmX29wdGltaXphdGlvbiAoRlRTRU5UUlkgY29uc3QgKnAs IGludCBkaXJfZmQpCi0tewotLSAgc3dpdGNoIChmaWxlc3lzdGVtX3R5cGUgKHAsIGRpcl9mZCkp Ci0tICAgIHsKLS0gICAgY2FzZSAwOgotLSAgICAgIC8qIExlYWYgb3B0aW1pemF0aW9uIGlzIHVu c2FmZSBpZiB0aGUgZmlsZSBzeXN0ZW0gdHlwZSBpcyB1bmtub3duLiAgKi8KLS0gICAgICBGQUxM VEhST1VHSDsKLS0gICAgY2FzZSBTX01BR0lDX0FGUzoKLS0gICAgICAvKiBBbHRob3VnaCBBRlMg bW91bnQgcG9pbnRzIGFyZSBub3QgY291bnRlZCBpbiBzdF9ubGluaywgdGhleQotLSAgICAgICAg IGFjdCBsaWtlIGRpcmVjdG9yaWVzLiAgU2VlIDxodHRwczovL2J1Z3MuZGViaWFuLm9yZy8xNDMx MTE+LiAgKi8KLS0gICAgICBGQUxMVEhST1VHSDsKLS0gICAgY2FzZSBTX01BR0lDX0NJRlM6Ci0t ICAgICAgLyogTGVhZiBvcHRpbWl6YXRpb24gY2F1c2VzICdmaW5kJyB0byBhYm9ydC4gIFNlZQot LSAgICAgICAgIDxodHRwczovL2xpc3RzLmdudS5vcmcvci9idWctZ251bGliLzIwMTgtMDQvbXNn MDAwMTUuaHRtbD4uICAqLwotLSAgICAgIEZBTExUSFJPVUdIOwotLSAgICBjYXNlIFNfTUFHSUNf TkZTOgotLSAgICAgIC8qIE5GUyBwcm92aWRlcyB1c2FibGUgZGlyZW50LmRfdHlwZSBidXQgbm90 IG5lY2Vzc2FyaWx5IGZvciBhbGwgZW50cmllcwotLSAgICAgICAgIG9mIGxhcmdlIGRpcmVjdG9y aWVzLCBzbyBhcyBwZXIgPGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS8xMjUyNTQ5PgotLSAg ICAgICAgIE5GUyBzaG91bGQgcmV0dXJuIHRydWUuICBIb3dldmVyIHN0X25saW5rIHZhbHVlcyBh cmUgbm90IGFjY3VyYXRlIG9uCi0tICAgICAgICAgYWxsIGltcGxlbWVudGF0aW9ucyBhcyBwZXIg PGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS8xMjk5MTY5Pi4gICovCi0tICAgICAgRkFMTFRI Uk9VR0g7Ci0tICAgIGNhc2UgU19NQUdJQ19QUk9DOgotLSAgICAgIC8qIFBlciA8aHR0cHM6Ly9i dWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz0xNDMxMTE+IC9wcm9jCi0t ICAgICAgICAgbWF5IGhhdmUgYm9ndXMgc3RhdC5zdF9ubGluayB2YWx1ZXMuICAqLwotLSAgICAg IHJldHVybiBOT19MRUFGX09QVElNSVpBVElPTjsKLS0KLS0gICAgZGVmYXVsdDoKLS0gICAgICBy ZXR1cm4gT0tfTEVBRl9PUFRJTUlaQVRJT047Ci0tICAgIH0KLS19Ci0rCS8qIFNldCBjdXJyZW50 IG5vZGUgcG9pbnRlci4gKi8KLSsJcCA9IHNwLT5mdHNfY3VyOwotIAotLSNlbHNlCi0tc3RhdGlj IGJvb2wKLS1kaXJlbnRfaW5vZGVfc29ydF9tYXlfYmVfdXNlZnVsIChfR0xfVU5VU0VEIEZUU0VO VFJZIGNvbnN0ICpwLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9VTlVT RUQgaW50IGRpcl9mZCkKLS17Ci0tICByZXR1cm4gdHJ1ZTsKLS19Ci0tc3RhdGljIGVudW0gbGVh Zl9vcHRpbWl6YXRpb24KLS1sZWFmX29wdGltaXphdGlvbiAoX0dMX1VOVVNFRCBGVFNFTlRSWSBj b25zdCAqcCwgX0dMX1VOVVNFRCBpbnQgZGlyX2ZkKQotLXsKLS0gIHJldHVybiBOT19MRUFGX09Q VElNSVpBVElPTjsKLS19Ci0tI2VuZGlmCi0rCS8qIFNhdmUgYW5kIHplcm8gb3V0IHVzZXIgaW5z dHJ1Y3Rpb25zLiAqLwotKwlpbnN0ciA9IHAtPmZ0c19pbnN0cjsKLSsJcC0+ZnRzX2luc3RyID0g RlRTX05PSU5TVFI7Ci0gCi0tLyoKLS0gKiBTcGVjaWFsIGNhc2Ugb2YgIi8iIGF0IHRoZSBlbmQg b2YgdGhlIGZpbGUgbmFtZSBzbyB0aGF0IHNsYXNoZXMgYXJlbid0Ci0tICogYXBwZW5kZWQgd2hp Y2ggd291bGQgY2F1c2UgZmlsZSBuYW1lcyB0byBiZSB3cml0dGVuIGFzICIuLi4uLy9mb28iLgot LSAqLwotLSNkZWZpbmUgTkFQUEVORChwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgICAgIChwLT5mdHNfcGF0aFtwLT5mdHNfcGF0 aGxlbiAtIDFdID09ICcvJyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAgICAgICAgICAg PyBwLT5mdHNfcGF0aGxlbiAtIDEgOiBwLT5mdHNfcGF0aGxlbikKLSsJLyogQW55IHR5cGUgb2Yg ZmlsZSBtYXkgYmUgcmUtdmlzaXRlZDsgcmUtc3RhdCBhbmQgcmUtdHVybi4gKi8KLSsJaWYgKGlu c3RyID09IEZUU19BR0FJTikgewotKwkJcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChzcCwgcCwgMCk7 Ci0rCQlyZXR1cm4gKHApOwotKwl9Ci0gCi0tRlRTRU5UUlkgKgotLUZUU19SRUFEIChGVFNPQkog KnNwKQotLXsKLS0gICAgICAgIC8qIElmIGZpbmlzaGVkIG9yIHVucmVjb3ZlcmFibGUgZXJyb3Is IHJldHVybiBOVUxMLiAqLwotLSAgICAgICAgaWYgKHNwLT5mdHNfY3VyID09IE5VTEwgfHwgSVNT RVQoRlRTX1NUT1ApKQotLSAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotLQotLSAgICAg ICAgLyogU2V0IGN1cnJlbnQgbm9kZSBwb2ludGVyLiAqLwotLSAgICAgICAgcmVnaXN0ZXIgRlRT RU5UUlkgKnAgPSBzcC0+ZnRzX2N1cjsKLS0KLS0gICAgICAgIC8qIFNhdmUgYW5kIHplcm8gb3V0 IHVzZXIgaW5zdHJ1Y3Rpb25zLiAqLwotLSAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgc2hvcnQg aW50IGluc3RyID0gcC0+ZnRzX2luc3RyOwotLSAgICAgICAgcC0+ZnRzX2luc3RyID0gRlRTX05P SU5TVFI7Ci0tCi0tICAgICAgICAvKiBBbnkgdHlwZSBvZiBmaWxlIG1heSBiZSByZS12aXNpdGVk OyByZS1zdGF0IGFuZCByZS10dXJuLiAqLwotLSAgICAgICAgaWYgKGluc3RyID09IEZUU19BR0FJ TikgewotLSAgICAgICAgICAgICAgICBwLT5mdHNfaW5mbyA9IGZ0c19zdGF0KHNwLCBwLCBmYWxz ZSk7Ci0tICAgICAgICAgICAgICAgIHJldHVybiAocCk7Ci0tICAgICAgICB9Ci0tICAgICAgICBE cHJpbnRmICgoImZ0c19yZWFkOiBwPSVzXG4iLAotLSAgICAgICAgICAgICAgICAgIHAtPmZ0c19p bmZvID09IEZUU19JTklUID8gIiIgOiBwLT5mdHNfcGF0aCkpOwotLQotLSAgICAgICAgLyoKLS0g ICAgICAgICAqIEZvbGxvd2luZyBhIHN5bWxpbmsgLS0gU0xOT05FIHRlc3QgYWxsb3dzIGFwcGxp Y2F0aW9uIHRvIHNlZQotLSAgICAgICAgICogU0xOT05FIGFuZCByZWNvdmVyLiAgSWYgaW5kaXJl Y3RpbmcgdGhyb3VnaCBhIHN5bWxpbmssIGhhdmUKLS0gICAgICAgICAqIGtlZXAgYSBwb2ludGVy IHRvIGN1cnJlbnQgbG9jYXRpb24uICBJZiB1bmFibGUgdG8gZ2V0IHRoYXQKLS0gICAgICAgICAq IHBvaW50ZXIsIGZvbGxvdyBmYWlscy4KLS0gICAgICAgICAqLwotLSAgICAgICAgaWYgKGluc3Ry ID09IEZUU19GT0xMT1cgJiYKLS0gICAgICAgICAgICAocC0+ZnRzX2luZm8gPT0gRlRTX1NMIHx8 IHAtPmZ0c19pbmZvID09IEZUU19TTE5PTkUpKSB7Ci0tICAgICAgICAgICAgICAgIHAtPmZ0c19p bmZvID0gZnRzX3N0YXQoc3AsIHAsIHRydWUpOwotLSAgICAgICAgICAgICAgICBpZiAocC0+ZnRz X2luZm8gPT0gRlRTX0QgJiYgIUlTU0VUKEZUU19OT0NIRElSKSkgewotLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmICgocC0+ZnRzX3N5bWZkID0gZGlyb3BlbiAoc3AsICIuIikpIDwgMCkgewot LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2Vycm5vID0gZXJybm87Ci0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfaW5mbyA9IEZUU19FUlI7Ci0t ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwLT5mdHNfZmxhZ3MgfD0gRlRTX1NZTUZPTExPVzsKLS0gICAgICAgICAgICAgICAg fQotLSAgICAgICAgICAgICAgICBnb3RvIGNoZWNrX2Zvcl9kaXI7Ci0tICAgICAgICB9Ci0tCi0t ICAgICAgICAvKiBEaXJlY3RvcnkgaW4gcHJlLW9yZGVyLiAqLwotLSAgICAgICAgaWYgKHAtPmZ0 c19pbmZvID09IEZUU19EKSB7Ci0tICAgICAgICAgICAgICAgIC8qIElmIHNraXBwZWQgb3IgY3Jv c3NlZCBtb3VudCBwb2ludCwgZG8gcG9zdC1vcmRlciB2aXNpdC4gKi8KLS0gICAgICAgICAgICAg ICAgaWYgKGluc3RyID09IEZUU19TS0lQIHx8Ci0tICAgICAgICAgICAgICAgICAgICAoSVNTRVQo RlRTX1hERVYpICYmIHAtPmZ0c19zdGF0cC0+c3RfZGV2ICE9IHNwLT5mdHNfZGV2KSkgewotLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChwLT5mdHNfZmxhZ3MgJiBGVFNfU1lNRk9MTE9XKQot LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpY2xvc2UocC0+ZnRzX3N5bWZk KTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3AtPmZ0c19jaGlsZCkgewotLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRzX2xmcmVlKHNwLT5mdHNfY2hpbGQpOwotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmZ0c19jaGlsZCA9IE5VTEw7Ci0tICAg ICAgICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19p bmZvID0gRlRTX0RQOwotLSAgICAgICAgICAgICAgICAgICAgICAgIExFQVZFX0RJUiAoc3AsIHAs ICIxIik7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwKTsKLS0gICAgICAgICAg ICAgICAgfQotLQotLSAgICAgICAgICAgICAgICAvKiBSZWJ1aWxkIGlmIG9ubHkgcmVhZCB0aGUg bmFtZXMgYW5kIG5vdyB0cmF2ZXJzaW5nLiAqLwotLSAgICAgICAgICAgICAgICBpZiAoc3AtPmZ0 c19jaGlsZCAhPSBOVUxMICYmIElTU0VUKEZUU19OQU1FT05MWSkpIHsKLS0gICAgICAgICAgICAg ICAgICAgICAgICBDTFIoRlRTX05BTUVPTkxZKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBm dHNfbGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmZ0 c19jaGlsZCA9IE5VTEw7Ci0tICAgICAgICAgICAgICAgIH0KLS0KLS0gICAgICAgICAgICAgICAg LyoKLS0gICAgICAgICAgICAgICAgICogQ2QgdG8gdGhlIHN1YmRpcmVjdG9yeS4KLS0gICAgICAg ICAgICAgICAgICoKLS0gICAgICAgICAgICAgICAgICogSWYgaGF2ZSBhbHJlYWR5IHJlYWQgYW5k IG5vdyBmYWlsIHRvIGNoZGlyLCB3aGFjayB0aGUgbGlzdAotLSAgICAgICAgICAgICAgICAgKiB0 byBtYWtlIHRoZSBuYW1lcyBjb21lIG91dCByaWdodCwgYW5kIHNldCB0aGUgcGFyZW50IGVycm5v Ci0tICAgICAgICAgICAgICAgICAqIHNvIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGV2ZW50dWFsbHkg Z2V0IGFuIGVycm9yIGNvbmRpdGlvbi4KLS0gICAgICAgICAgICAgICAgICogU2V0IHRoZSBGVFNf RE9OVENIRElSIGZsYWcgc28gdGhhdCB3aGVuIHdlIGxvZ2ljYWxseSBjaGFuZ2UKLS0gICAgICAg ICAgICAgICAgICogZGlyZWN0b3JpZXMgYmFjayB0byB0aGUgcGFyZW50IHdlIGRvbid0IGRvIGEg Y2hkaXIuCi0tICAgICAgICAgICAgICAgICAqCi0tICAgICAgICAgICAgICAgICAqIElmIGhhdmVu J3QgcmVhZCBkbyBzby4gIElmIHRoZSByZWFkIGZhaWxzLCBmdHNfYnVpbGQgc2V0cwotLSAgICAg ICAgICAgICAgICAgKiBGVFNfU1RPUCBvciB0aGUgZnRzX2luZm8gZmllbGQgb2YgdGhlIG5vZGUu Ci0tICAgICAgICAgICAgICAgICAqLwotLSAgICAgICAgICAgICAgICBpZiAoc3AtPmZ0c19jaGls ZCAhPSBOVUxMKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0c19zYWZlX2NoYW5n ZWRpcihzcCwgcCwgLTEsIHAtPmZ0c19hY2NwYXRoKSkgewotLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcC0+ZnRzX2Vycm5vID0gZXJybm87Ci0tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwLT5mdHNfZmxhZ3MgfD0gRlRTX0RPTlRDSERJUjsKLS0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciAocCA9IHNwLT5mdHNfY2hpbGQ7IHAgIT0gTlVMTDsKLS0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHAtPmZ0c19saW5rKQotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfYWNjcGF0aCA9Ci0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfcGFyZW50 LT5mdHNfYWNjcGF0aDsKLS0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoKHNwLT5mdHNfY2hpbGQgPSBmdHNfYnVpbGQoc3AsIEJSRUFEKSkgPT0g TlVMTCkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJU1NFVChGVFNfU1RPUCkpCi0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotLSAgICAgICAg ICAgICAgICAgICAgICAgIC8qIElmIGZ0c19idWlsZCdzIGNhbGwgdG8gZnRzX3NhZmVfY2hhbmdl ZGlyIGZhaWxlZAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgd2FzIG5v dCBhYmxlIHRvIGZjaGRpciBpbnRvIGEKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJk aXJlY3RvcnksIHRlbGwgdGhlIGNhbGxlci4gICovCi0tICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHAtPmZ0c19lcnJubyAmJiBwLT5mdHNfaW5mbyAhPSBGVFNfRE5SKQotLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2luZm8gPSBGVFNfRVJSOwotLSAgICAgICAgICAg ICAgICAgICAgICAgIExFQVZFX0RJUiAoc3AsIHAsICIyIik7Ci0tICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIChwKTsKLS0gICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICBw ID0gc3AtPmZ0c19jaGlsZDsKLS0gICAgICAgICAgICAgICAgc3AtPmZ0c19jaGlsZCA9IE5VTEw7 Ci0tICAgICAgICAgICAgICAgIGdvdG8gbmFtZTsKLS0gICAgICAgIH0KLS0KLS0gICAgICAgIC8q IE1vdmUgdG8gdGhlIG5leHQgbm9kZSBvbiB0aGlzIGxldmVsLiAqLwotLW5leHQ6IDsKLS0gICAg ICAgIHJlZ2lzdGVyIEZUU0VOVFJZICp0bXAgPSBwOwotLQotLSAgICAgICAgLyogSWYgd2UgaGF2 ZSBzbyBtYW55IGRpcmVjdG9yeSBlbnRyaWVzIHRoYXQgd2UncmUgcmVhZGluZyB0aGVtCi0tICAg ICAgICAgICBpbiBiYXRjaGVzLCBhbmQgd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBjdXJy ZW50IGJhdGNoLAotLSAgICAgICAgICAgcmVhZCBpbiBhIG5ldyBiYXRjaC4gICovCi0tICAgICAg ICBpZiAocC0+ZnRzX2xpbmsgPT0gTlVMTCAmJiBGVFNFTlRfRElSUChwLT5mdHNfcGFyZW50KSkK LS0gICAgICAgICAgewotLSAgICAgICAgICAgIHAgPSB0bXAtPmZ0c19wYXJlbnQ7Ci0tICAgICAg ICAgICAgc3AtPmZ0c19jdXIgPSBwOwotLSAgICAgICAgICAgIHNwLT5mdHNfcGF0aFtwLT5mdHNf cGF0aGxlbl0gPSAnXDAnOwotLQotLSAgICAgICAgICAgIGlmICgocCA9IGZ0c19idWlsZCAoc3As IEJSRUFEKSkgPT0gTlVMTCkKLS0gICAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAgICAgaWYg KElTU0VUKEZUU19TVE9QKSkKLS0gICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLS0gICAg ICAgICAgICAgICAgZ290byBjZF9kb3RfZG90OwotLSAgICAgICAgICAgICAgfQotLQotLSAgICAg ICAgICAgIGZyZWUoRlRTRU5UX1dSQVBQRVIodG1wKSk7Ci0tICAgICAgICAgICAgZ290byBuYW1l OwotLSAgICAgICAgICB9Ci0tCi0tICAgICAgICBpZiAoKHAgPSBwLT5mdHNfbGluaykgIT0gTlVM TCkgewotLSAgICAgICAgICAgICAgICBzcC0+ZnRzX2N1ciA9IHA7Ci0tICAgICAgICAgICAgICAg IGZyZWUoRlRTRU5UX1dSQVBQRVIodG1wKSk7Ci0tCi0tICAgICAgICAgICAgICAgIC8qCi0tICAg ICAgICAgICAgICAgICAqIElmIHJlYWNoZWQgdGhlIHRvcCwgcmV0dXJuIHRvIHRoZSBvcmlnaW5h bCBkaXJlY3RvcnkgKG9yCi0tICAgICAgICAgICAgICAgICAqIHRoZSByb290IG9mIHRoZSB0cmVl KSwgYW5kIGxvYWQgdGhlIGZpbGUgbmFtZXMgZm9yIHRoZSBuZXh0Ci0tICAgICAgICAgICAgICAg ICAqIHJvb3QuCi0tICAgICAgICAgICAgICAgICAqLwotLSAgICAgICAgICAgICAgICBpZiAocC0+ ZnRzX2xldmVsID09IEZUU19ST09UTEVWRUwpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBp ZiAocmVzdG9yZV9pbml0aWFsX2N3ZChzcCkpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNFVChGVFNfU1RPUCk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gKE5VTEwpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAg ICAgICAgICAgICBmcmVlX2RpcihzcCk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgZnRzX2xv YWQoc3AsIHApOwotLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIHNldHVwX2RpcihzcCkp IHsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfZGlyKHNwKTsKLS0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0tICAgICAgICAgICAg ICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gY2hlY2tfZm9yX2Rp cjsKLS0gICAgICAgICAgICAgICAgfQotLQotLSAgICAgICAgICAgICAgICAvKgotLSAgICAgICAg ICAgICAgICAgKiBVc2VyIG1heSBoYXZlIGNhbGxlZCBmdHNfc2V0IG9uIHRoZSBub2RlLiAgSWYg c2tpcHBlZCwKLS0gICAgICAgICAgICAgICAgICogaWdub3JlLiAgSWYgZm9sbG93ZWQsIGdldCBh IGZpbGUgZGVzY3JpcHRvciBzbyB3ZSBjYW4KLS0gICAgICAgICAgICAgICAgICogZ2V0IGJhY2sg aWYgbmVjZXNzYXJ5LgotLSAgICAgICAgICAgICAgICAgKi8KLS0gICAgICAgICAgICAgICAgaWYg KHAtPmZ0c19pbnN0ciA9PSBGVFNfU0tJUCkKLS0gICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IG5leHQ7Ci0tICAgICAgICAgICAgICAgIGlmIChwLT5mdHNfaW5zdHIgPT0gRlRTX0ZPTExPVykg ewotLSAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIHAs IHRydWUpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLT5mdHNfaW5mbyA9PSBGVFNf RCAmJiAhSVNTRVQoRlRTX05PQ0hESVIpKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoKHAtPmZ0c19zeW1mZCA9IGRpcm9wZW4gKHNwLCAiLiIpKSA8IDApIHsKLS0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZnRzX2Vycm5vID0gZXJybm87 Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19pbmZvID0g RlRTX0VSUjsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5mdHNfZmxhZ3MgfD0gRlRTX1NZ TUZPTExPVzsKLS0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAgICAgICAg ICAgICAgcC0+ZnRzX2luc3RyID0gRlRTX05PSU5TVFI7Ci0tICAgICAgICAgICAgICAgIH0KLS0K LS1uYW1lOiAgICAgICAgICAgewotLSAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNoYXIgKnQg PSBzcC0+ZnRzX3BhdGggKyBOQVBQRU5EKHAtPmZ0c19wYXJlbnQpOwotLSAgICAgICAgICAgICAg ICAgICp0KysgPSAnLyc7Ci0tICAgICAgICAgICAgICAgICAgbWVtbW92ZSh0LCBwLT5mdHNfbmFt ZSwgcC0+ZnRzX25hbWVsZW4gKyAxKTsKLS0gICAgICAgICAgICAgICAgfQotLWNoZWNrX2Zvcl9k aXI6Ci0tICAgICAgICAgICAgICAgIHNwLT5mdHNfY3VyID0gcDsKLS0gICAgICAgICAgICAgICAg aWYgKHAtPmZ0c19pbmZvID09IEZUU19OU09LKQotLSAgICAgICAgICAgICAgICAgIHsKLS0gICAg ICAgICAgICAgICAgICAgIGlmIChwLT5mdHNfc3RhdHAtPnN0X3NpemUgPT0gRlRTX1NUQVRfUkVR VUlSRUQpCi0tICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3As IHAsIGZhbHNlKTsKLS0gICAgICAgICAgICAgICAgICAgIGVsc2UKLS0gICAgICAgICAgICAgICAg ICAgICAgZnRzX2Fzc2VydCAocC0+ZnRzX3N0YXRwLT5zdF9zaXplID09IEZUU19OT19TVEFUX1JF UVVJUkVEKTsKLS0gICAgICAgICAgICAgICAgICB9Ci0tCi0tICAgICAgICAgICAgICAgIC8qIFNr aXAgZmlsZXMgd2l0aCBkaWZmZXJlbnQgZGV2aWNlIG51bWJlcnMgd2hlbiBGVFNfTU9VTlQKLS0g ICAgICAgICAgICAgICAgICAgaXMgc2V0LiAgKi8KLS0gICAgICAgICAgICAgICAgaWYgKElTU0VU IChGVFNfTU9VTlQpICYmIHAtPmZ0c19pbmZvICE9IEZUU19OUyAmJgotLSAgICAgICAgICAgICAg ICAgICAgcC0+ZnRzX2xldmVsICE9IEZUU19ST09UTEVWRUwgJiYKLS0gICAgICAgICAgICAgICAg ICAgIHAtPmZ0c19zdGF0cC0+c3RfZGV2ICE9IHNwLT5mdHNfZGV2KQotLSAgICAgICAgICAgICAg ICAgICAgICBnb3RvIG5leHQ7Ci0tCi0tICAgICAgICAgICAgICAgIGlmIChwLT5mdHNfaW5mbyA9 PSBGVFNfRCkKLS0gICAgICAgICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICAgICAgICAvKiBO b3cgdGhhdCBQLT5mdHNfc3RhdHAgaXMgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCwgaWYKLS0gICAg ICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgYSBjb21tYW5kLWxpbmUgZGlyZWN0b3J5LCByZWNv cmQgaXRzIGRldmljZQotLSAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyLCB0byBiZSB1c2Vk IGZvciBGVFNfTU9VTlQgYW5kIEZUU19YREVWLiAgKi8KLS0gICAgICAgICAgICAgICAgICAgIGlm IChwLT5mdHNfbGV2ZWwgPT0gRlRTX1JPT1RMRVZFTCkKLS0gICAgICAgICAgICAgICAgICAgICAg c3AtPmZ0c19kZXYgPSBwLT5mdHNfc3RhdHAtPnN0X2RldjsKLS0gICAgICAgICAgICAgICAgICAg IERwcmludGYgKCgiICBlbnRlcmluZzogJXNcbiIsIHAtPmZ0c19wYXRoKSk7Ci0tICAgICAgICAg ICAgICAgICAgICBpZiAoISBlbnRlcl9kaXIgKHNwLCBwKSkKLS0gICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIE5VTEw7Ci0tICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICBy ZXR1cm4gcDsKLS0gICAgICAgIH0KLS1jZF9kb3RfZG90OgotLQotLSAgICAgICAgLyogTW92ZSB1 cCB0byB0aGUgcGFyZW50IG5vZGUuICovCi0tICAgICAgICBwID0gdG1wLT5mdHNfcGFyZW50Owot LSAgICAgICAgc3AtPmZ0c19jdXIgPSBwOwotLSAgICAgICAgZnJlZShGVFNFTlRfV1JBUFBFUih0 bXApKTsKLS0KLS0gICAgICAgIGlmIChwLT5mdHNfbGV2ZWwgPT0gRlRTX1JPT1RQQVJFTlRMRVZF TCkgewotLSAgICAgICAgICAgICAgICAvKgotLSAgICAgICAgICAgICAgICAgKiBEb25lOyBmcmVl IGV2ZXJ5dGhpbmcgdXAgYW5kIHNldCBlcnJubyB0byAwIHNvIHRoZSB1c2VyCi0tICAgICAgICAg ICAgICAgICAqIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVycm9yIGFuZCBFT0YuCi0tICAgICAg ICAgICAgICAgICAqLwotLSAgICAgICAgICAgICAgICBmcmVlKEZUU0VOVF9XUkFQUEVSKHApKTsK LS0gICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKDApOwotLSAgICAgICAgICAgICAgICByZXR1 cm4gKHNwLT5mdHNfY3VyID0gTlVMTCk7Ci0tICAgICAgICB9Ci0tCi0tICAgICAgICBmdHNfYXNz ZXJ0IChwLT5mdHNfaW5mbyAhPSBGVFNfTlNPSyk7Ci0tCi0tICAgICAgICAvKiBOVUwgdGVybWlu YXRlIHRoZSBmaWxlIG5hbWUuICAqLwotLSAgICAgICAgc3AtPmZ0c19wYXRoW3AtPmZ0c19wYXRo bGVuXSA9ICdcMCc7Ci0tCi0tICAgICAgICAvKgotLSAgICAgICAgICogUmV0dXJuIHRvIHRoZSBw YXJlbnQgZGlyZWN0b3J5LiAgSWYgYXQgYSByb290IG5vZGUsIHJlc3RvcmUKLS0gICAgICAgICAq IHRoZSBpbml0aWFsIHdvcmtpbmcgZGlyZWN0b3J5LiAgSWYgd2UgY2FtZSB0aHJvdWdoIGEgc3lt bGluaywKLS0gICAgICAgICAqIGdvIGJhY2sgdGhyb3VnaCB0aGUgZmlsZSBkZXNjcmlwdG9yLiAg T3RoZXJ3aXNlLCBtb3ZlIHVwCi0tICAgICAgICAgKiBvbmUgbGV2ZWwsIHZpYSAiLi4iLgotLSAg ICAgICAgICovCi0tICAgICAgICBpZiAocC0+ZnRzX2xldmVsID09IEZUU19ST09UTEVWRUwpIHsK LS0gICAgICAgICAgICAgICAgaWYgKHJlc3RvcmVfaW5pdGlhbF9jd2Qoc3ApKSB7Ci0tICAgICAg ICAgICAgICAgICAgICAgICAgcC0+ZnRzX2Vycm5vID0gZXJybm87Ci0tICAgICAgICAgICAgICAg ICAgICAgICAgU0VUKEZUU19TVE9QKTsKLS0gICAgICAgICAgICAgICAgfQotLSAgICAgICAgfSBl bHNlIGlmIChwLT5mdHNfZmxhZ3MgJiBGVFNfU1lNRk9MTE9XKSB7Ci0tICAgICAgICAgICAgICAg IGlmIChGQ0hESVIoc3AsIHAtPmZ0c19zeW1mZCkpIHsKLS0gICAgICAgICAgICAgICAgICAgICAg ICBwLT5mdHNfZXJybm8gPSBlcnJubzsKLS0gICAgICAgICAgICAgICAgICAgICAgICBTRVQoRlRT X1NUT1ApOwotLSAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAgICAgICh2b2lkKWNsb3Nl KHAtPmZ0c19zeW1mZCk7Ci0tICAgICAgICB9IGVsc2UgaWYgKCEocC0+ZnRzX2ZsYWdzICYgRlRT X0RPTlRDSERJUikgJiYKLS0gICAgICAgICAgICAgICAgICAgZnRzX3NhZmVfY2hhbmdlZGlyKHNw LCBwLT5mdHNfcGFyZW50LCAtMSwgIi4uIikpIHsKLS0gICAgICAgICAgICAgICAgcC0+ZnRzX2Vy cm5vID0gZXJybm87Ci0tICAgICAgICAgICAgICAgIFNFVChGVFNfU1RPUCk7Ci0tICAgICAgICB9 Ci0tCi0tICAgICAgICAvKiBJZiB0aGUgZGlyZWN0b3J5IGNhdXNlcyBhIGN5Y2xlLCBwcmVzZXJ2 ZSB0aGUgRlRTX0RDIGZsYWcgYW5kIGtlZXAKLS0gICAgICAgICAgIHRoZSBjb3JyZXNwb25kaW5n IGRldi9pbm8gcGFpciBpbiB0aGUgaGFzaCB0YWJsZS4gIEl0IGlzIGdvaW5nIHRvIGJlCi0tICAg ICAgICAgICByZW1vdmVkIHdoZW4gbGVhdmluZyB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5LiAgKi8K LS0gICAgICAgIGlmIChwLT5mdHNfaW5mbyAhPSBGVFNfREMpIHsKLS0gICAgICAgICAgICAgICAg cC0+ZnRzX2luZm8gPSBwLT5mdHNfZXJybm8gPyBGVFNfRVJSIDogRlRTX0RQOwotLSAgICAgICAg ICAgICAgICBpZiAocC0+ZnRzX2Vycm5vID09IDApCi0tICAgICAgICAgICAgICAgICAgICAgICAg TEVBVkVfRElSIChzcCwgcCwgIjMiKTsKLS0gICAgICAgIH0KLS0gICAgICAgIHJldHVybiBJU1NF VChGVFNfU1RPUCkgPyBOVUxMIDogcDsKLSsJLyoKLSsJICogRm9sbG93aW5nIGEgc3ltbGluayAt LSBTTE5PTkUgdGVzdCBhbGxvd3MgYXBwbGljYXRpb24gdG8gc2VlCi0rCSAqIFNMTk9ORSBhbmQg cmVjb3Zlci4gIElmIGluZGlyZWN0aW5nIHRocm91Z2ggYSBzeW1saW5rLCBoYXZlCi0rCSAqIGtl ZXAgYSBwb2ludGVyIHRvIGN1cnJlbnQgbG9jYXRpb24uICBJZiB1bmFibGUgdG8gZ2V0IHRoYXQK LSsJICogcG9pbnRlciwgZm9sbG93IGZhaWxzLgotKwkgKi8KLSsJaWYgKGluc3RyID09IEZUU19G T0xMT1cgJiYKLSsJICAgIChwLT5mdHNfaW5mbyA9PSBGVFNfU0wgfHwgcC0+ZnRzX2luZm8gPT0g RlRTX1NMTk9ORSkpIHsKLSsJCXAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIHAsIDEpOwotKwkJ aWYgKHAtPmZ0c19pbmZvID09IEZUU19EICYmICFJU1NFVChGVFNfTk9DSERJUikpIHsKLSsJCQlp ZiAoKHAtPmZ0c19zeW1mZCA9IF9fb3BlbigiLiIsIE9fUkRPTkxZLCAwKSkgPCAwKSB7Ci0rCQkJ CXAtPmZ0c19lcnJubyA9IGVycm5vOwotKwkJCQlwLT5mdHNfaW5mbyA9IEZUU19FUlI7Ci0rCQkJ fSBlbHNlCi0rCQkJCXAtPmZ0c19mbGFncyB8PSBGVFNfU1lNRk9MTE9XOwotKwkJfQotKwkJcmV0 dXJuIChwKTsKLSsJfQotKwotKwkvKiBEaXJlY3RvcnkgaW4gcHJlLW9yZGVyLiAqLwotKwlpZiAo cC0+ZnRzX2luZm8gPT0gRlRTX0QpIHsKLSsJCS8qIElmIHNraXBwZWQgb3IgY3Jvc3NlZCBtb3Vu dCBwb2ludCwgZG8gcG9zdC1vcmRlciB2aXNpdC4gKi8KLSsJCWlmIChpbnN0ciA9PSBGVFNfU0tJ UCB8fAotKwkJICAgIChJU1NFVChGVFNfWERFVikgJiYgcC0+ZnRzX2RldiAhPSBzcC0+ZnRzX2Rl dikpIHsKLSsJCQlpZiAocC0+ZnRzX2ZsYWdzICYgRlRTX1NZTUZPTExPVykKLSsJCQkJKHZvaWQp X19jbG9zZShwLT5mdHNfc3ltZmQpOwotKwkJCWlmIChzcC0+ZnRzX2NoaWxkKSB7Ci0rCQkJCWZ0 c19sZnJlZShzcC0+ZnRzX2NoaWxkKTsKLSsJCQkJc3AtPmZ0c19jaGlsZCA9IE5VTEw7Ci0rCQkJ fQotKwkJCXAtPmZ0c19pbmZvID0gRlRTX0RQOwotKwkJCXJldHVybiAocCk7Ci0rCQl9Ci0rCi0r CQkvKiBSZWJ1aWxkIGlmIG9ubHkgcmVhZCB0aGUgbmFtZXMgYW5kIG5vdyB0cmF2ZXJzaW5nLiAq LwotKwkJaWYgKHNwLT5mdHNfY2hpbGQgIT0gTlVMTCAmJiBJU1NFVChGVFNfTkFNRU9OTFkpKSB7 Ci0rCQkJQ0xSKEZUU19OQU1FT05MWSk7Ci0rCQkJZnRzX2xmcmVlKHNwLT5mdHNfY2hpbGQpOwot KwkJCXNwLT5mdHNfY2hpbGQgPSBOVUxMOwotKwkJfQotKwotKwkJLyoKLSsJCSAqIENkIHRvIHRo ZSBzdWJkaXJlY3RvcnkuCi0rCQkgKgotKwkJICogSWYgaGF2ZSBhbHJlYWR5IHJlYWQgYW5kIG5v dyBmYWlsIHRvIGNoZGlyLCB3aGFjayB0aGUgbGlzdAotKwkJICogdG8gbWFrZSB0aGUgbmFtZXMg Y29tZSBvdXQgcmlnaHQsIGFuZCBzZXQgdGhlIHBhcmVudCBlcnJubwotKwkJICogc28gdGhlIGFw cGxpY2F0aW9uIHdpbGwgZXZlbnR1YWxseSBnZXQgYW4gZXJyb3IgY29uZGl0aW9uLgotKwkJICog U2V0IHRoZSBGVFNfRE9OVENIRElSIGZsYWcgc28gdGhhdCB3aGVuIHdlIGxvZ2ljYWxseSBjaGFu Z2UKLSsJCSAqIGRpcmVjdG9yaWVzIGJhY2sgdG8gdGhlIHBhcmVudCB3ZSBkb24ndCBkbyBhIGNo ZGlyLgotKwkJICoKLSsJCSAqIElmIGhhdmVuJ3QgcmVhZCBkbyBzby4gIElmIHRoZSByZWFkIGZh aWxzLCBmdHNfYnVpbGQgc2V0cwotKwkJICogRlRTX1NUT1Agb3IgdGhlIGZ0c19pbmZvIGZpZWxk IG9mIHRoZSBub2RlLgotKwkJICovCi0rCQlpZiAoc3AtPmZ0c19jaGlsZCAhPSBOVUxMKSB7Ci0r CQkJaWYgKGZ0c19zYWZlX2NoYW5nZWRpcihzcCwgcCwgLTEsIHAtPmZ0c19hY2NwYXRoKSkgewot KwkJCQlwLT5mdHNfZXJybm8gPSBlcnJubzsKLSsJCQkJcC0+ZnRzX2ZsYWdzIHw9IEZUU19ET05U Q0hESVI7Ci0rCQkJCWZvciAocCA9IHNwLT5mdHNfY2hpbGQ7IHAgIT0gTlVMTDsKLSsJCQkJICAg ICBwID0gcC0+ZnRzX2xpbmspCi0rCQkJCQlwLT5mdHNfYWNjcGF0aCA9Ci0rCQkJCQkgICAgcC0+ ZnRzX3BhcmVudC0+ZnRzX2FjY3BhdGg7Ci0rCQkJfQotKwkJfSBlbHNlIGlmICgoc3AtPmZ0c19j aGlsZCA9IGZ0c19idWlsZChzcCwgQlJFQUQpKSA9PSBOVUxMKSB7Ci0rCQkJaWYgKElTU0VUKEZU U19TVE9QKSkKLSsJCQkJcmV0dXJuIChOVUxMKTsKLSsJCQlyZXR1cm4gKHApOwotKwkJfQotKwkJ cCA9IHNwLT5mdHNfY2hpbGQ7Ci0rCQlzcC0+ZnRzX2NoaWxkID0gTlVMTDsKLSsJCXNwLT5mdHNf Y3VyID0gcDsKLSsJCWdvdG8gbmFtZTsKLSsJfQotKwotKwkvKiBNb3ZlIHRvIHRoZSBuZXh0IG5v ZGUgb24gdGhpcyBsZXZlbC4gKi8KLStuZXh0Ogl0bXAgPSBwOwotKwlpZiAoKHAgPSBwLT5mdHNf bGluaykgIT0gTlVMTCkgewotKwkJc3AtPmZ0c19jdXIgPSBwOwotKwkJZnJlZSh0bXApOwotKwot KwkJLyoKLSsJCSAqIElmIHJlYWNoZWQgdGhlIHRvcCwgcmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBk aXJlY3RvcnkgKG9yCi0rCQkgKiB0aGUgcm9vdCBvZiB0aGUgdHJlZSksIGFuZCBsb2FkIHRoZSBw YXRocyBmb3IgdGhlIG5leHQgcm9vdC4KLSsJCSAqLwotKwkJaWYgKHAtPmZ0c19sZXZlbCA9PSBG VFNfUk9PVExFVkVMKSB7Ci0rCQkJaWYgKEZDSERJUihzcCwgc3AtPmZ0c19yZmQpKSB7Ci0rCQkJ CVNFVChGVFNfU1RPUCk7Ci0rCQkJCXJldHVybiAoTlVMTCk7Ci0rCQkJfQotKwkJCWZ0c19sb2Fk KHNwLCBwKTsKLSsJCQlyZXR1cm4gcDsKLSsJCX0KLSsKLSsJCS8qCi0rCQkgKiBVc2VyIG1heSBo YXZlIGNhbGxlZCBmdHNfc2V0IG9uIHRoZSBub2RlLiAgSWYgc2tpcHBlZCwKLSsJCSAqIGlnbm9y ZS4gIElmIGZvbGxvd2VkLCBnZXQgYSBmaWxlIGRlc2NyaXB0b3Igc28gd2UgY2FuCi0rCQkgKiBn ZXQgYmFjayBpZiBuZWNlc3NhcnkuCi0rCQkgKi8KLSsJCWlmIChwLT5mdHNfaW5zdHIgPT0gRlRT X1NLSVApCi0rCQkJZ290byBuZXh0OwotKwkJaWYgKHAtPmZ0c19pbnN0ciA9PSBGVFNfRk9MTE9X KSB7Ci0rCQkJcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChzcCwgcCwgMSk7Ci0rCQkJaWYgKHAtPmZ0 c19pbmZvID09IEZUU19EICYmICFJU1NFVChGVFNfTk9DSERJUikpIHsKLSsJCQkJaWYgKChwLT5m dHNfc3ltZmQgPQotKwkJCQkgICAgX19vcGVuKCIuIiwgT19SRE9OTFksIDApKSA8IDApIHsKLSsJ CQkJCXAtPmZ0c19lcnJubyA9IGVycm5vOwotKwkJCQkJcC0+ZnRzX2luZm8gPSBGVFNfRVJSOwot KwkJCQl9IGVsc2UKLSsJCQkJCXAtPmZ0c19mbGFncyB8PSBGVFNfU1lNRk9MTE9XOwotKwkJCX0K LSsJCQlwLT5mdHNfaW5zdHIgPSBGVFNfTk9JTlNUUjsKLSsJCX0KLSsKLStuYW1lOgkJdCA9IHNw LT5mdHNfcGF0aCArIE5BUFBFTkQocC0+ZnRzX3BhcmVudCk7Ci0rCQkqdCsrID0gJy8nOwotKwkJ bWVtbW92ZSh0LCBwLT5mdHNfbmFtZSwgcC0+ZnRzX25hbWVsZW4gKyAxKTsKLSsJCXJldHVybiBw OwotKwl9Ci0rCi0rCS8qIE1vdmUgdXAgdG8gdGhlIHBhcmVudCBub2RlLiAqLwotKwlwID0gdG1w LT5mdHNfcGFyZW50OwotKwlzcC0+ZnRzX2N1ciA9IHA7Ci0rCWZyZWUodG1wKTsKLSsKLSsJaWYg KHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9PVFBBUkVOVExFVkVMKSB7Ci0rCQkvKgotKwkJICogRG9u ZTsgZnJlZSBldmVyeXRoaW5nIHVwIGFuZCBzZXQgZXJybm8gdG8gMCBzbyB0aGUgdXNlcgotKwkJ ICogY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gZXJyb3IgYW5kIEVPRi4KLSsJCSAqLwotKwkJZnJl ZShwKTsKLSsJCV9fc2V0X2Vycm5vICgwKTsKLSsJCXJldHVybiAoc3AtPmZ0c19jdXIgPSBOVUxM KTsKLSsJfQotKwotKwkvKiBOVUwgdGVybWluYXRlIHRoZSBwYXRobmFtZS4gKi8KLSsJc3AtPmZ0 c19wYXRoW3AtPmZ0c19wYXRobGVuXSA9ICdcMCc7Ci0rCi0rCS8qCi0rCSAqIFJldHVybiB0byB0 aGUgcGFyZW50IGRpcmVjdG9yeS4gIElmIGF0IGEgcm9vdCBub2RlIG9yIGNhbWUgdGhyb3VnaAot KwkgKiBhIHN5bWxpbmssIGdvIGJhY2sgdGhyb3VnaCB0aGUgZmlsZSBkZXNjcmlwdG9yLiAgT3Ro ZXJ3aXNlLCBjZCB1cAotKwkgKiBvbmUgZGlyZWN0b3J5LgotKwkgKi8KLSsJaWYgKHAtPmZ0c19s ZXZlbCA9PSBGVFNfUk9PVExFVkVMKSB7Ci0rCQlpZiAoRkNIRElSKHNwLCBzcC0+ZnRzX3JmZCkp IHsKLSsJCQlTRVQoRlRTX1NUT1ApOwotKwkJCXJldHVybiAoTlVMTCk7Ci0rCQl9Ci0rCX0gZWxz ZSBpZiAocC0+ZnRzX2ZsYWdzICYgRlRTX1NZTUZPTExPVykgewotKwkJaWYgKEZDSERJUihzcCwg cC0+ZnRzX3N5bWZkKSkgewotKwkJCXNhdmVkX2Vycm5vID0gZXJybm87Ci0rCQkJKHZvaWQpX19j bG9zZShwLT5mdHNfc3ltZmQpOwotKwkJCV9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7Ci0rCQkJ U0VUKEZUU19TVE9QKTsKLSsJCQlyZXR1cm4gKE5VTEwpOwotKwkJfQotKwkJKHZvaWQpX19jbG9z ZShwLT5mdHNfc3ltZmQpOwotKwl9IGVsc2UgaWYgKCEocC0+ZnRzX2ZsYWdzICYgRlRTX0RPTlRD SERJUikgJiYKLSsJCSAgIGZ0c19zYWZlX2NoYW5nZWRpcihzcCwgcC0+ZnRzX3BhcmVudCwgLTEs ICIuLiIpKSB7Ci0rCQlTRVQoRlRTX1NUT1ApOwotKwkJcmV0dXJuIChOVUxMKTsKLSsJfQotKwlw LT5mdHNfaW5mbyA9IHAtPmZ0c19lcnJubyA/IEZUU19FUlIgOiBGVFNfRFA7Ci0rCXJldHVybiBw OwotIH0KLSAKLSAvKgotQEAgLTExNzAsMTU3ICs1MDYsOTMgQEAgY2RfZG90X2RvdDoKLSAgKi8K LSAvKiBBUkdTVVNFRCAqLwotIGludAotLUZUU19TRVQgKF9HTF9VTlVTRUQgRlRTT0JKICpzcCwg RlRTRU5UUlkgKnAsIGludCBpbnN0cikKLStGVFNfU0VUIChGVFNPQkogKnNwLCBGVFNFTlRSWSAq cCwgaW50IGluc3RyKQotIHsKLS0gICAgICAgIGlmIChpbnN0ciAhPSAwICYmIGluc3RyICE9IEZU U19BR0FJTiAmJiBpbnN0ciAhPSBGVFNfRk9MTE9XICYmCi0tICAgICAgICAgICAgaW5zdHIgIT0g RlRTX05PSU5TVFIgJiYgaW5zdHIgIT0gRlRTX1NLSVApIHsKLS0gICAgICAgICAgICAgICAgX19z ZXRfZXJybm8gKEVJTlZBTCk7Ci0tICAgICAgICAgICAgICAgIHJldHVybiAoMSk7Ci0tICAgICAg ICB9Ci0tICAgICAgICBwLT5mdHNfaW5zdHIgPSBpbnN0cjsKLS0gICAgICAgIHJldHVybiAoMCk7 Ci0rCWlmIChpbnN0ciAhPSAwICYmIGluc3RyICE9IEZUU19BR0FJTiAmJiBpbnN0ciAhPSBGVFNf Rk9MTE9XICYmCi0rCSAgICBpbnN0ciAhPSBGVFNfTk9JTlNUUiAmJiBpbnN0ciAhPSBGVFNfU0tJ UCkgewotKwkJX19zZXRfZXJybm8gKEVJTlZBTCk7Ci0rCQlyZXR1cm4gKDEpOwotKwl9Ci0rCXAt PmZ0c19pbnN0ciA9IGluc3RyOwotKwlyZXR1cm4gKDApOwotIH0KLSAKLSBGVFNFTlRSWSAqCi0t RlRTX0NISUxEUkVOIChGVFNPQkogKnNwLCBpbnQgaW5zdHIpCi0rRlRTX0NISUxEUkVOKEZUU09C SiAqc3AsIGludCBpbnN0cikKLSB7Ci0tICAgICAgICBpZiAoaW5zdHIgIT0gMCAmJiBpbnN0ciAh PSBGVFNfTkFNRU9OTFkpIHsKLS0gICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKEVJTlZBTCk7 Ci0tICAgICAgICAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0tICAgICAgICB9Ci0tCi0tICAgICAg ICAvKiBTZXQgY3VycmVudCBub2RlIHBvaW50ZXIuICovCi0tICAgICAgICByZWdpc3RlciBGVFNF TlRSWSAqcCA9IHNwLT5mdHNfY3VyOwotLQotLSAgICAgICAgLyoKLS0gICAgICAgICAqIEVycm5v IHNldCB0byAwIHNvIHVzZXIgY2FuIGRpc3Rpbmd1aXNoIGVtcHR5IGRpcmVjdG9yeSBmcm9tCi0t ICAgICAgICAgKiBhbiBlcnJvci4KLS0gICAgICAgICAqLwotLSAgICAgICAgX19zZXRfZXJybm8g KDApOwotLQotLSAgICAgICAgLyogRmF0YWwgZXJyb3JzIHN0b3AgaGVyZS4gKi8KLS0gICAgICAg IGlmIChJU1NFVChGVFNfU1RPUCkpCi0tICAgICAgICAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0t Ci0tICAgICAgICAvKiBSZXR1cm4gbG9naWNhbCBoaWVyYXJjaHkgb2YgdXNlcidzIGFyZ3VtZW50 cy4gKi8KLS0gICAgICAgIGlmIChwLT5mdHNfaW5mbyA9PSBGVFNfSU5JVCkKLS0gICAgICAgICAg ICAgICAgcmV0dXJuIChwLT5mdHNfbGluayk7Ci0tCi0tICAgICAgICAvKgotLSAgICAgICAgICog SWYgbm90IGEgZGlyZWN0b3J5IGJlaW5nIHZpc2l0ZWQgaW4gcHJlLW9yZGVyLCBzdG9wIGhlcmUu ICBDb3VsZAotLSAgICAgICAgICogYWxsb3cgRlRTX0ROUiwgYXNzdW1pbmcgdGhlIHVzZXIgaGFz IGZpeGVkIHRoZSBwcm9ibGVtLCBidXQgdGhlCi0tICAgICAgICAgKiBzYW1lIGVmZmVjdCBpcyBh dmFpbGFibGUgd2l0aCBGVFNfQUdBSU4uCi0tICAgICAgICAgKi8KLS0gICAgICAgIGlmIChwLT5m dHNfaW5mbyAhPSBGVFNfRCAvKiAmJiBwLT5mdHNfaW5mbyAhPSBGVFNfRE5SICovKQotLSAgICAg ICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotLQotLSAgICAgICAgLyogRnJlZSB1cCBhbnkgcHJl dmlvdXMgY2hpbGQgbGlzdC4gKi8KLS0gICAgICAgIGlmIChzcC0+ZnRzX2NoaWxkICE9IE5VTEwp Ci0tICAgICAgICAgICAgICAgIGZ0c19sZnJlZShzcC0+ZnRzX2NoaWxkKTsKLS0KLS0gICAgICAg IGlmIChpbnN0ciA9PSBGVFNfTkFNRU9OTFkpIHsKLS0gICAgICAgICAgICAgICAgU0VUKEZUU19O QU1FT05MWSk7Ci0tICAgICAgICAgICAgICAgIGluc3RyID0gQk5BTUVTOwotLSAgICAgICAgfSBl bHNlCi0tICAgICAgICAgICAgICAgIGluc3RyID0gQkNISUxEOwotLQotLSAgICAgICAgLyoKLS0g ICAgICAgICAqIElmIHVzaW5nIGNoZGlyIG9uIGEgcmVsYXRpdmUgZmlsZSBuYW1lIGFuZCBjYWxs ZWQgQkVGT1JFIGZ0c19yZWFkCi0tICAgICAgICAgKiBkb2VzIGl0cyBjaGRpciB0byB0aGUgcm9v dCBvZiBhIHRyYXZlcnNhbCwgd2UgY2FuIGxvc2UgLS0gd2UgbmVlZCB0bwotLSAgICAgICAgICog Y2hkaXIgaW50byB0aGUgc3ViZGlyZWN0b3J5LCBhbmQgd2UgZG9uJ3Qga25vdyB3aGVyZSB0aGUg Y3VycmVudAotLSAgICAgICAgICogZGlyZWN0b3J5IGlzLCBzbyB3ZSBjYW4ndCBnZXQgYmFjayBz byB0aGF0IHRoZSB1cGNvbWluZyBjaGRpciBieQotLSAgICAgICAgICogZnRzX3JlYWQgd2lsbCB3 b3JrLgotLSAgICAgICAgICovCi0tICAgICAgICBpZiAocC0+ZnRzX2xldmVsICE9IEZUU19ST09U TEVWRUwgfHwgcC0+ZnRzX2FjY3BhdGhbMF0gPT0gJy8nIHx8Ci0tICAgICAgICAgICAgSVNTRVQo RlRTX05PQ0hESVIpKQotLSAgICAgICAgICAgICAgICByZXR1cm4gKHNwLT5mdHNfY2hpbGQgPSBm dHNfYnVpbGQoc3AsIGluc3RyKSk7Ci0tCi0tICAgICAgICBpbnQgZmQgPSBkaXJvcGVuIChzcCwg Ii4iKTsKLS0gICAgICAgIGlmIChmZCA8IDApCi0tICAgICAgICAgICAgICAgIHJldHVybiAoc3At PmZ0c19jaGlsZCA9IE5VTEwpOwotLSAgICAgICAgc3AtPmZ0c19jaGlsZCA9IGZ0c19idWlsZChz cCwgaW5zdHIpOwotLSAgICAgICAgaWYgKElTU0VUKEZUU19DV0RGRCkpCi0tICAgICAgICAgIHsK LS0gICAgICAgICAgICBjd2RfYWR2YW5jZV9mZCAoc3AsIGZkLCB0cnVlKTsKLS0gICAgICAgICAg fQotLSAgICAgICAgZWxzZQotLSAgICAgICAgICB7Ci0tICAgICAgICAgICAgaWYgKGZjaGRpcihm ZCkpCi0tICAgICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9 IGVycm5vOwotLSAgICAgICAgICAgICAgICBjbG9zZSAoZmQpOwotLSAgICAgICAgICAgICAgICBf X3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOwotLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK LS0gICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICBjbG9zZSAoZmQpOwotLSAgICAgICAgICB9 Ci0tICAgICAgICByZXR1cm4gKHNwLT5mdHNfY2hpbGQpOwotLX0KLSsJRlRTRU5UUlkgKnA7Ci0r CWludCBmZDsKLSAKLS0vKiBBIGNvbXBhcmlzb24gZnVuY3Rpb24gdG8gc29ydCBvbiBpbmNyZWFz aW5nIGlub2RlIG51bWJlci4KLS0gICBGb3Igc29tZSBmaWxlIHN5c3RlbSB0eXBlcywgc29ydGlu ZyBlaXRoZXIgd2F5IG1ha2VzIGEgaHVnZQotLSAgIHBlcmZvcm1hbmNlIGRpZmZlcmVuY2UgZm9y IGEgZGlyZWN0b3J5IHdpdGggdmVyeSBtYW55IGVudHJpZXMsCi0tICAgYnV0IHNvcnRpbmcgb24g aW5jcmVhc2luZyB2YWx1ZXMgaXMgc2xpZ2h0bHkgYmV0dGVyIHRoYW4gc29ydGluZwotLSAgIG9u IGRlY3JlYXNpbmcgdmFsdWVzLiAgVGhlIGRpZmZlcmVuY2UgaXMgaW4gdGhlIDUlIHJhbmdlLiAg Ki8KLS1zdGF0aWMgaW50Ci0tZnRzX2NvbXBhcmVfaW5vIChGVFNFTlRSWSBjb25zdCAqKmEsIEZU U0VOVFJZIGNvbnN0ICoqYikKLS17Ci0tICByZXR1cm4gX0dMX0NNUCAoYVswXS0+ZnRzX3N0YXRw LT5zdF9pbm8sIGJbMF0tPmZ0c19zdGF0cC0+c3RfaW5vKTsKLSsJaWYgKGluc3RyICE9IDAgJiYg aW5zdHIgIT0gRlRTX05BTUVPTkxZKSB7Ci0rCQlfX3NldF9lcnJubyAoRUlOVkFMKTsKLSsJCXJl dHVybiAoTlVMTCk7Ci0rCX0KLSsKLSsJLyogU2V0IGN1cnJlbnQgbm9kZSBwb2ludGVyLiAqLwot KwlwID0gc3AtPmZ0c19jdXI7Ci0rCi0rCS8qCi0rCSAqIEVycm5vIHNldCB0byAwIHNvIHVzZXIg Y2FuIGRpc3Rpbmd1aXNoIGVtcHR5IGRpcmVjdG9yeSBmcm9tCi0rCSAqIGFuIGVycm9yLgotKwkg Ki8KLSsJX19zZXRfZXJybm8gKDApOwotKwotKwkvKiBGYXRhbCBlcnJvcnMgc3RvcCBoZXJlLiAq LwotKwlpZiAoSVNTRVQoRlRTX1NUT1ApKQotKwkJcmV0dXJuIChOVUxMKTsKLSsKLSsJLyogUmV0 dXJuIGxvZ2ljYWwgaGllcmFyY2h5IG9mIHVzZXIncyBhcmd1bWVudHMuICovCi0rCWlmIChwLT5m dHNfaW5mbyA9PSBGVFNfSU5JVCkKLSsJCXJldHVybiAocC0+ZnRzX2xpbmspOwotKwotKwkvKgot KwkgKiBJZiBub3QgYSBkaXJlY3RvcnkgYmVpbmcgdmlzaXRlZCBpbiBwcmUtb3JkZXIsIHN0b3Ag aGVyZS4gIENvdWxkCi0rCSAqIGFsbG93IEZUU19ETlIsIGFzc3VtaW5nIHRoZSB1c2VyIGhhcyBm aXhlZCB0aGUgcHJvYmxlbSwgYnV0IHRoZQotKwkgKiBzYW1lIGVmZmVjdCBpcyBhdmFpbGFibGUg d2l0aCBGVFNfQUdBSU4uCi0rCSAqLwotKwlpZiAocC0+ZnRzX2luZm8gIT0gRlRTX0QgLyogJiYg cC0+ZnRzX2luZm8gIT0gRlRTX0ROUiAqLykKLSsJCXJldHVybiAoTlVMTCk7Ci0rCi0rCS8qIEZy ZWUgdXAgYW55IHByZXZpb3VzIGNoaWxkIGxpc3QuICovCi0rCWlmIChzcC0+ZnRzX2NoaWxkICE9 IE5VTEwpCi0rCQlmdHNfbGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0rCi0rCWlmIChpbnN0ciA9PSBG VFNfTkFNRU9OTFkpIHsKLSsJCVNFVChGVFNfTkFNRU9OTFkpOwotKwkJaW5zdHIgPSBCTkFNRVM7 Ci0rCX0gZWxzZQotKwkJaW5zdHIgPSBCQ0hJTEQ7Ci0rCi0rCS8qCi0rCSAqIElmIHVzaW5nIGNo ZGlyIG9uIGEgcmVsYXRpdmUgcGF0aCBhbmQgY2FsbGVkIEJFRk9SRSBmdHNfcmVhZCBkb2VzCi0r CSAqIGl0cyBjaGRpciB0byB0aGUgcm9vdCBvZiBhIHRyYXZlcnNhbCwgd2UgY2FuIGxvc2UgLS0g d2UgbmVlZCB0bwotKwkgKiBjaGRpciBpbnRvIHRoZSBzdWJkaXJlY3RvcnksIGFuZCB3ZSBkb24n dCBrbm93IHdoZXJlIHRoZSBjdXJyZW50Ci0rCSAqIGRpcmVjdG9yeSBpcywgc28gd2UgY2FuJ3Qg Z2V0IGJhY2sgc28gdGhhdCB0aGUgdXBjb21pbmcgY2hkaXIgYnkKLSsJICogZnRzX3JlYWQgd2ls bCB3b3JrLgotKwkgKi8KLSsJaWYgKHAtPmZ0c19sZXZlbCAhPSBGVFNfUk9PVExFVkVMIHx8IHAt PmZ0c19hY2NwYXRoWzBdID09ICcvJyB8fAotKwkgICAgSVNTRVQoRlRTX05PQ0hESVIpKQotKwkJ cmV0dXJuIChzcC0+ZnRzX2NoaWxkID0gZnRzX2J1aWxkKHNwLCBpbnN0cikpOwotKwotKwlpZiAo KGZkID0gX19vcGVuKCIuIiwgT19SRE9OTFksIDApKSA8IDApCi0rCQlyZXR1cm4gKE5VTEwpOwot KwlzcC0+ZnRzX2NoaWxkID0gZnRzX2J1aWxkKHNwLCBpbnN0cik7Ci0rCWlmIChfX2ZjaGRpcihm ZCkpCi0rCQlyZXR1cm4gKE5VTEwpOwotKwkodm9pZClfX2Nsb3NlKGZkKTsKLSsJcmV0dXJuIChz cC0+ZnRzX2NoaWxkKTsKLSB9Ci0gCi0tLyogTWFwIHRoZSBkaXJlbnQuZF90eXBlIHZhbHVlLCBE VFlQRSwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgc3RhdC5zdF9tb2RlCi0tICAgU19JRiogYml0IGFu ZCBzZXQgU1Quc3RfbW9kZSwgdGh1cyBjbGVhcmluZyBhbGwgb3RoZXIgYml0cyBpbiB0aGF0IGZp ZWxkLiAgKi8KLS1zdGF0aWMgdm9pZAotLXNldF9zdGF0X3R5cGUgKHN0cnVjdCBTVFJVQ1RfU1RB VCAqc3QsIHVuc2lnbmVkIGludCBkdHlwZSkKLStzdGF0aWMgaW5saW5lIGludAotK2RpcmVudF9u b3RfZGlyZWN0b3J5KGNvbnN0IHN0cnVjdCBkaXJlbnQgKmRwKQotIHsKLS0gIG1vZGVfdCB0eXBl OwotLSAgc3dpdGNoIChkdHlwZSkKLS0gICAgewotLSAgICBjYXNlIERUX0JMSzoKLS0gICAgICB0 eXBlID0gU19JRkJMSzsKLS0gICAgICBicmVhazsKLS0gICAgY2FzZSBEVF9DSFI6Ci0tICAgICAg dHlwZSA9IFNfSUZDSFI7Ci0tICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgRFRfRElSOgotLSAgICAg IHR5cGUgPSBTX0lGRElSOwotLSAgICAgIGJyZWFrOwotLSAgICBjYXNlIERUX0ZJRk86Ci0tICAg ICAgdHlwZSA9IFNfSUZJRk87Ci0tICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgRFRfTE5LOgotLSAg ICAgIHR5cGUgPSBTX0lGTE5LOwotLSAgICAgIGJyZWFrOwotLSAgICBjYXNlIERUX1JFRzoKLS0g ICAgICB0eXBlID0gU19JRlJFRzsKLS0gICAgICBicmVhazsKLS0gICAgY2FzZSBEVF9TT0NLOgot LSAgICAgIHR5cGUgPSBTX0lGU09DSzsKLS0gICAgICBicmVhazsKLS0gICAgZGVmYXVsdDoKLS0g ICAgICB0eXBlID0gMDsKLS0gICAgfQotLSAgc3QtPnN0X21vZGUgPSB0eXBlOwotKyNpZiBkZWZp bmVkIERUX0RJUiAmJiBkZWZpbmVkIF9ESVJFTlRfSEFWRV9EX1RZUEUKLSsgICAgICAgIHJldHVy biBkcC0+ZF90eXBlICE9IERUX0RJUiAmJiBkcC0+ZF90eXBlICE9IERUX1VOS05PV047Ci0rI2Vs c2UKLSsgICAgICAgIHJldHVybiAwOwotKyNlbmRpZgotIH0KLSAKLS0jZGVmaW5lIGNsb3NlZGly X2FuZF9jbGVhcihkaXJwKSAgICAgICAgICAgICAgICBcCi0tICBkbyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgICBjbG9zZWRpciAoZGlycCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0tICAgICAgZGlycCA9IE5VTEw7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLS0gIHdoaWxlICgwKQotLQotLSNkZWZpbmUgZnRzX29wZW5kaXIoZmlsZSwgUGRp cl9mZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAgICAgICBPUEVORElSQVQo KCEgSVNTRVQoRlRTX05PQ0hESVIpICYmIElTU0VUKEZUU19DV0RGRCkgICAgIFwKLS0gICAgICAg ICAgICAgICAgICAgPyBzcC0+ZnRzX2N3ZF9mZCA6IEFUX0ZEQ1dEKSwgICAgICAgICAgICAgICAg XAotLSAgICAgICAgICAgICAgICAgIGZpbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0tICAgICAgICAgICAgICAgICAgKCgoSVNTRVQoRlRTX1BIWVNJQ0FMKSAg ICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgICAgICAgICAgICAgICAgICAmJiAhIChJU1NF VChGVFNfQ09NRk9MTE9XKSAgICAgICAgICAgICAgICAgXAotLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmIGN1ci0+ZnRzX2xldmVsID09IEZUU19ST09UTEVWRUwpKSBcCi0tICAgICAgICAg ICAgICAgICAgICA/IE9fTk9GT0xMT1cgOiAwKSksICAgICAgICAgICAgICAgICAgICAgICAgIFwK LS0gICAgICAgICAgICAgICAgICBQZGlyX2ZkKQotLQotIC8qCi0gICogVGhpcyBpcyB0aGUgdHJp Y2t5IHBhcnQgLS0gZG8gbm90IGNhc3VhbGx5IGNoYW5nZSAqYW55dGhpbmcqIGluIGhlcmUuICBU aGUKLSAgKiBpZGVhIGlzIHRvIGJ1aWxkIHRoZSBsaW5rZWQgbGlzdCBvZiBlbnRyaWVzIHRoYXQg YXJlIHVzZWQgYnkgZnRzX2NoaWxkcmVuCi1AQCAtMTMzNiw4NzMgKzYwOCw1MzEgQEAgc2V0X3N0 YXRfdHlwZSAoc3RydWN0IFNUUlVDVF9TVEFUICpzdCwgdW5zaWduZWQgaW50IGR0eXBlKQotICAq IGJlZW4gZm91bmQsIGN1dHRpbmcgdGhlIHN0YXQgY2FsbHMgYnkgYWJvdXQgMi8zLgotICAqLwot IHN0YXRpYyBGVFNFTlRSWSAqCi0taW50ZXJuYWxfZnVuY3Rpb24KLS1mdHNfYnVpbGQgKHJlZ2lz dGVyIEZUU09CSiAqc3AsIGludCB0eXBlKQotK2Z0c19idWlsZCAoRlRTT0JKICpzcCwgaW50IHR5 cGUpCi0gewotLSAgICAgICAgRlRTRU5UUlkgKmN1ciA9IHNwLT5mdHNfY3VyOwotLSAgICAgICAg Ym9vbCBjb250aW51ZV9yZWFkZGlyID0gISFGVFNFTlRfRElSUChjdXIpOwotLQotLSAgICAgICAg LyogV2hlbiBjdXItPmZ0c19kaXJwIGlzIG5vbi1OVUxMLCB0aGF0IG1lYW5zIHdlIHNob3VsZAot LSAgICAgICAgICAgY29udGludWUgY2FsbGluZyByZWFkZGlyIG9uIHRoYXQgZXhpc3RpbmcgRElS KiBwb2ludGVyCi0tICAgICAgICAgICByYXRoZXIgdGhhbiBvcGVuaW5nIGEgbmV3IG9uZS4gICov Ci0tICAgICAgICBpbnQgZGlyX2ZkOwotLSAgICAgICAgaWYgKGNvbnRpbnVlX3JlYWRkaXIpCi0t ICAgICAgICAgIHsKLS0gICAgICAgICAgICBESVIgKmRwID0gRlRTRU5UX0RJUlAoY3VyKTsKLS0g ICAgICAgICAgICBkaXJfZmQgPSBkaXJmZCAoZHApOwotLSAgICAgICAgICAgIGlmIChkaXJfZmQg PCAwKQotLSAgICAgICAgICAgICAgewotLSAgICAgICAgICAgICAgICBpbnQgZGlyZmRfZXJybm8g PSBlcnJubzsKLS0gICAgICAgICAgICAgICAgY2xvc2VkaXJfYW5kX2NsZWFyIChGVFNFTlRfRElS UChjdXIpKTsKLS0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gQlJFQUQpCi0tICAgICAgICAg ICAgICAgICAgewotLSAgICAgICAgICAgICAgICAgICAgY3VyLT5mdHNfaW5mbyA9IEZUU19ETlI7 Ci0tICAgICAgICAgICAgICAgICAgICBjdXItPmZ0c19lcnJubyA9IGRpcmZkX2Vycm5vOwotLSAg ICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgICAg ICAgICAgICB9Ci0tICAgICAgICAgIH0KLS0gICAgICAgIGVsc2UKLS0gICAgICAgICAgewotLSAg ICAgICAgICAgIC8qIE9wZW4gdGhlIGRpcmVjdG9yeSBmb3IgcmVhZGluZy4gIElmIHRoaXMgZmFp bHMsIHdlJ3JlIGRvbmUuCi0tICAgICAgICAgICAgICAgSWYgYmVpbmcgY2FsbGVkIGZyb20gZnRz X3JlYWQsIHNldCB0aGUgZnRzX2luZm8gZmllbGQuICovCi0tICAgICAgICAgICAgaWYgKChGVFNF TlRfRElSUCAoY3VyKSA9IGZ0c19vcGVuZGlyKGN1ci0+ZnRzX2FjY3BhdGgsICZkaXJfZmQpKSA9 PSBOVUxMKQotLSAgICAgICAgICAgICAgewotLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBC UkVBRCkKLS0gICAgICAgICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICAgICAgICBjdXItPmZ0 c19pbmZvID0gRlRTX0ROUjsKLS0gICAgICAgICAgICAgICAgICAgIGN1ci0+ZnRzX2Vycm5vID0g ZXJybm87Ci0tICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICByZXR1cm4gTlVM TDsKLS0gICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAvKiBSYXRoZXIgdGhhbiBjYWxsaW5n IGZ0c19zdGF0IGZvciBlYWNoIGFuZCBldmVyeSBlbnRyeSBlbmNvdW50ZXJlZAotLSAgICAgICAg ICAgICAgIGluIHRoZSByZWFkZGlyIGxvb3AgKGJlbG93KSwgc3RhdCBlYWNoIGRpcmVjdG9yeSBv bmx5IHJpZ2h0IGFmdGVyCi0tICAgICAgICAgICAgICAgb3BlbmluZyBpdC4gICovCi0tICAgICAg ICAgICAgYm9vbCBzdGF0X29wdGltaXphdGlvbiA9IGN1ci0+ZnRzX2luZm8gPT0gRlRTX05TT0s7 Ci0tCi0tICAgICAgICAgICAgaWYgKHN0YXRfb3B0aW1pemF0aW9uCi0tICAgICAgICAgICAgICAg IC8qIEFsc28gcmVhZCB0aGUgc3RhdCBpbmZvIGFnYWluIGFmdGVyIG9wZW5pbmcgYSBkaXJlY3Rv cnkgdG8KLS0gICAgICAgICAgICAgICAgICAgcmV2ZWFsIGV2ZW50dWFsIGNoYW5nZXMgY2F1c2Vk IGJ5IGEgc3VibW91bnQgdHJpZ2dlcmVkIGJ5Ci0tICAgICAgICAgICAgICAgICAgIHRoZSB0cmF2 ZXJzYWwuICBCdXQgZG8gaXQgb25seSBmb3IgdXRpbGl0aWVzIHdoaWNoIHVzZQotLSAgICAgICAg ICAgICAgICAgICBGVFNfVElHSFRfQ1lDTEVfQ0hFQ0suICBUaGVyZWZvcmUsIG9ubHkgZmluZCBh bmQgZHUKLS0gICAgICAgICAgICAgICAgICAgYmVuZWZpdC9zdWZmZXIgZnJvbSB0aGlzIGZlYXR1 cmUgZm9yIG5vdy4gICovCi0tICAgICAgICAgICAgICAgIHx8IElTU0VUIChGVFNfVElHSFRfQ1lD TEVfQ0hFQ0spKQotLSAgICAgICAgICAgICAgewotLSAgICAgICAgICAgICAgICBpZiAoIXN0YXRf b3B0aW1pemF0aW9uKQotLSAgICAgICAgICAgICAgICAgIExFQVZFX0RJUiAoc3AsIGN1ciwgIjQi KTsKLS0gICAgICAgICAgICAgICAgaWYgKEZTVEFUIChkaXJfZmQsIGN1ci0+ZnRzX3N0YXRwKSAh PSAwKQotLSAgICAgICAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAgICAgICAgIGludCBmc3Rh dF9lcnJubyA9IGVycm5vOwotLSAgICAgICAgICAgICAgICAgICAgY2xvc2VkaXJfYW5kX2NsZWFy IChGVFNFTlRfRElSUChjdXIpKTsKLS0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEJS RUFEKQotLSAgICAgICAgICAgICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAg Y3VyLT5mdHNfZXJybm8gPSBmc3RhdF9lcnJubzsKLS0gICAgICAgICAgICAgICAgICAgICAgICBj dXItPmZ0c19pbmZvID0gRlRTX05TOwotLSAgICAgICAgICAgICAgICAgICAgICB9Ci0tICAgICAg ICAgICAgICAgICAgICBfX3NldF9lcnJubyAoZnN0YXRfZXJybm8pOwotLSAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAg ICBpZiAoc3RhdF9vcHRpbWl6YXRpb24pCi0tICAgICAgICAgICAgICAgICAgY3VyLT5mdHNfaW5m byA9IEZUU19EOwotLSAgICAgICAgICAgICAgICBlbHNlIGlmICghIGVudGVyX2RpciAoc3AsIGN1 cikpCi0tICAgICAgICAgICAgICAgICAgewotLSAgICAgICAgICAgICAgICAgICAgaW50IHNhdmVk X2Vycm5vID0gZXJybm87Ci0tICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcl9hbmRfY2xlYXIg KEZUU0VOVF9ESVJQKGN1cikpOwotLSAgICAgICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKHNh dmVkX2Vycm5vKTsKLS0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotLSAgICAgICAg ICAgICAgICAgIH0KLS0gICAgICAgICAgICAgIH0KLS0gICAgICAgICAgfQotLQotLSAgICAgICAg LyogTWF4aW11bSBudW1iZXIgb2YgcmVhZGRpciBlbnRyaWVzIHRvIHJlYWQgYXQgb25lIHRpbWUu ICBUaGlzCi0tICAgICAgICAgICBsaW1pdGF0aW9uIGlzIHRvIGF2b2lkIHJlYWRpbmcgbWlsbGlv bnMgb2YgZW50cmllcyBpbnRvIG1lbW9yeQotLSAgICAgICAgICAgYXQgb25jZS4gIFdoZW4gYW4g ZnRzX2NvbXBhciBmdW5jdGlvbiBpcyBzcGVjaWZpZWQsIHdlIGhhdmUgbm8KLS0gICAgICAgICAg IGNob2ljZTogd2UgbXVzdCByZWFkIGFsbCBlbnRyaWVzIGludG8gbWVtb3J5IGJlZm9yZSBjYWxs aW5nIHRoYXQKLS0gICAgICAgICAgIGZ1bmN0aW9uLiAgQnV0IHdoZW4gbm8gc3VjaCBmdW5jdGlv biBpcyBzcGVjaWZpZWQsIHdlIGNhbiByZWFkCi0tICAgICAgICAgICBlbnRyaWVzIGluIGJhdGNo ZXMgdGhhdCBhcmUgbGFyZ2UgZW5vdWdoIHRvIGhlbHAgdXMgd2l0aCBpbm9kZS0KLS0gICAgICAg ICAgIHNvcnRpbmcsIHlldCBub3Qgc28gbGFyZ2UgdGhhdCB3ZSByaXNrIGV4aGF1c3RpbmcgbWVt b3J5LiAgKi8KLS0gICAgICAgIHNpemVfdCBtYXhfZW50cmllcyA9IHNwLT5mdHNfY29tcGFyID8g U0laRV9NQVggOiBGVFNfTUFYX1JFQURESVJfRU5UUklFUzsKLS0KLS0gICAgICAgIC8qCi0tICAg ICAgICAgKiBJZiB3ZSdyZSBnb2luZyB0byBuZWVkIHRvIHN0YXQgYW55dGhpbmcgb3Igd2Ugd2Fu dCB0byBkZXNjZW5kCi0tICAgICAgICAgKiBhbmQgc3RheSBpbiB0aGUgZGlyZWN0b3J5LCBjaGRp ci4gIElmIHRoaXMgZmFpbHMgd2Uga2VlcCBnb2luZywKLS0gICAgICAgICAqIGJ1dCBzZXQgYSBm bGFnIHNvIHdlIGRvbid0IGNoZGlyIGFmdGVyIHRoZSBwb3N0LW9yZGVyIHZpc2l0LgotLSAgICAg ICAgICogV2Ugd29uJ3QgYmUgYWJsZSB0byBzdGF0IGFueXRoaW5nLCBidXQgd2UgY2FuIHN0aWxs IHJldHVybiB0aGUKLS0gICAgICAgICAqIG5hbWVzIHRoZW1zZWx2ZXMuICBOb3RlLCB0aGF0IHNp bmNlIGZ0c19yZWFkIHdvbid0IGJlIGFibGUgdG8KLS0gICAgICAgICAqIGNoZGlyIGludG8gdGhl IGRpcmVjdG9yeSwgaXQgd2lsbCBoYXZlIHRvIHJldHVybiBkaWZmZXJlbnQgZmlsZQotLSAgICAg ICAgICogbmFtZXMgdGhhbiBiZWZvcmUsIGkuZS4gImEvYiIgaW5zdGVhZCBvZiAiYiIuICBTaW5j ZSB0aGUgbm9kZQotLSAgICAgICAgICogaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGluIHByZS1v cmRlciwgaGF2ZSB0byB3YWl0IHVudGlsIHRoZQotLSAgICAgICAgICogcG9zdC1vcmRlciB2aXNp dCB0byByZXR1cm4gdGhlIGVycm9yLiAgVGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UKLS0gICAgICAg ICAqIGhlcmUsIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHN0YXQgdGhlbiBpdCdzIG5vdCBhbiBl cnJvciB0bwotLSAgICAgICAgICogbm90IGJlIGFibGUgdG8gc3RhdC4gIFRoaXMgaXMgYWxsIGZh aXJseSBuYXN0eS4gIElmIGEgcHJvZ3JhbQotLSAgICAgICAgICogbmVlZGVkIHNvcnRlZCBlbnRy aWVzIG9yIHN0YXQgaW5mb3JtYXRpb24sIHRoZXkgaGFkIGJldHRlciBiZQotLSAgICAgICAgICog Y2hlY2tpbmcgRlRTX05TIG9uIHRoZSByZXR1cm5lZCBub2Rlcy4KLS0gICAgICAgICAqLwotLSAg ICAgICAgYm9vbCBkZXNjZW5kOwotLSAgICAgICAgaWYgKGNvbnRpbnVlX3JlYWRkaXIpCi0tICAg ICAgICAgIHsKLS0gICAgICAgICAgICAvKiBXaGVuIHJlc3VtaW5nIGEgc2hvcnQgcmVhZGRpciBy dW4sIHdlIGFscmVhZHkgaGF2ZQotLSAgICAgICAgICAgICAgIHRoZSByZXF1aXJlZCBkaXJwIGFu ZCBkaXJfZmQuICAqLwotLSAgICAgICAgICAgIGRlc2NlbmQgPSB0cnVlOwotLSAgICAgICAgICB9 Ci0tICAgICAgICBlbHNlCi0tICAgICAgICAgIHsKLS0gICAgICAgICAgICAvKiBUcnkgdG8gZGVz Y2VuZCB1bmxlc3MgaXQgaXMgYSBuYW1lcy1vbmx5IGZ0c19jaGlsZHJlbiwKLS0gICAgICAgICAg ICAgICBvciB0aGUgZGlyZWN0b3J5IGlzIGtub3duIHRvIGxhY2sgc3ViZGlyZWN0b3JpZXMuICAq LwotLSAgICAgICAgICAgIGRlc2NlbmQgPSAodHlwZSAhPSBCTkFNRVMKLS0gICAgICAgICAgICAg ICAgICAgICAgICYmICEgKElTU0VUIChGVFNfTk9TVEFUKSAmJiBJU1NFVCAoRlRTX1BIWVNJQ0FM KQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgISBJU1NFVCAoRlRTX1NFRURPVCkK LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1ci0+ZnRzX3N0YXRwLT5zdF9ubGlu ayA9PSBNSU5fRElSX05MSU5LCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobGVh Zl9vcHRpbWl6YXRpb24gKGN1ciwgZGlyX2ZkKQotLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICE9IE5PX0xFQUZfT1BUSU1JWkFUSU9OKSkpOwotLSAgICAgICAgICAgIGlmIChkZXNj ZW5kIHx8IHR5cGUgPT0gQlJFQUQpCi0tICAgICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICAg IGlmIChJU1NFVChGVFNfQ1dERkQpKQotLSAgICAgICAgICAgICAgICAgIGRpcl9mZCA9IGZjbnRs IChkaXJfZmQsIEZfRFVQRkRfQ0xPRVhFQywgU1RERVJSX0ZJTEVOTyArIDEpOwotLSAgICAgICAg ICAgICAgICBpZiAoZGlyX2ZkIDwgMCB8fCBmdHNfc2FmZV9jaGFuZ2VkaXIoc3AsIGN1ciwgZGly X2ZkLCBOVUxMKSkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXNjZW5kICYmIHR5 cGUgPT0gQlJFQUQpCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXItPmZ0c19l cnJubyA9IGVycm5vOwotLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ci0+ZnRzX2ZsYWdzIHw9 IEZUU19ET05UQ0hESVI7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2VuZCA9IGZhbHNl OwotLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZGlyX2FuZF9jbGVhcihGVFNFTlRfRElS UChjdXIpKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVNTRVQoRlRTX0NXREZEKSAm JiAwIDw9IGRpcl9mZCkKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlIChk aXJfZmQpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIEZUU0VOVF9ESVJQKGN1cikgPSBOVUxM OwotLSAgICAgICAgICAgICAgICB9IGVsc2UKLS0gICAgICAgICAgICAgICAgICAgICAgICBkZXNj ZW5kID0gdHJ1ZTsKLS0gICAgICAgICAgICAgIH0KLS0gICAgICAgICAgfQotLQotLSAgICAgICAg LyoKLS0gICAgICAgICAqIEZpZ3VyZSBvdXQgdGhlIG1heCBmaWxlIG5hbWUgbGVuZ3RoIHRoYXQg Y2FuIGJlIHN0b3JlZCBpbiB0aGUKLS0gICAgICAgICAqIGN1cnJlbnQgYnVmZmVyIC0tIHRoZSBp bm5lciBsb29wIGFsbG9jYXRlcyBtb3JlIHNwYWNlIGFzIG5lY2Vzc2FyeS4KLS0gICAgICAgICAq IFdlIHJlYWxseSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoZSBtYXhsZW4gY2FsY3VsYXRpb25zIGhl cmUsIHdlCi0tICAgICAgICAgKiBjb3VsZCBkbyB0aGVtIGluIGZ0c19yZWFkIGJlZm9yZSByZXR1 cm5pbmcgdGhlIG5hbWUsIGJ1dCBpdCdzIGEKLS0gICAgICAgICAqIGxvdCBlYXNpZXIgaGVyZSBz aW5jZSB0aGUgbGVuZ3RoIGlzIHBhcnQgb2YgdGhlIGRpcmVudCBzdHJ1Y3R1cmUuCi0tICAgICAg ICAgKgotLSAgICAgICAgICogSWYgbm90IGNoYW5naW5nIGRpcmVjdG9yaWVzIHNldCBhIHBvaW50 ZXIgc28gdGhhdCBjYW4ganVzdCBhcHBlbmQKLS0gICAgICAgICAqIGVhY2ggbmV3IGNvbXBvbmVu dCBpbnRvIHRoZSBmaWxlIG5hbWUuCi0tICAgICAgICAgKi8KLS0gICAgICAgIHNpemVfdCBsZW4g PSBOQVBQRU5EKGN1cik7Ci0tICAgICAgICBjaGFyICpjcDsKLS0gICAgICAgIGlmIChJU1NFVChG VFNfTk9DSERJUikpIHsKLS0gICAgICAgICAgICAgICAgY3AgPSBzcC0+ZnRzX3BhdGggKyBsZW47 Ci0tICAgICAgICAgICAgICAgICpjcCsrID0gJy8nOwotLSAgICAgICAgfSBlbHNlIHsKLS0gICAg ICAgICAgICAgICAgLyogR0NDLCB5b3UncmUgdG9vIHZlcmJvc2UuICovCi0tICAgICAgICAgICAg ICAgIGNwID0gTlVMTDsKLS0gICAgICAgIH0KLS0gICAgICAgIGxlbisrOwotLSAgICAgICAgc2l6 ZV90IG1heGxlbiA9IHNwLT5mdHNfcGF0aGxlbiAtIGxlbjsKLS0KLS0gICAgICAgIHB0cmRpZmZf dCBsZXZlbCA9IGN1ci0+ZnRzX2xldmVsICsgMTsKLS0KLS0gICAgICAgIC8qIFJlYWQgdGhlIGRp cmVjdG9yeSwgYXR0YWNoaW5nIGVhY2ggZW50cnkgdG8gdGhlICJsaW5rIiBwb2ludGVyLiAqLwot LSAgICAgICAgYm9vbCBkb2FkanVzdCA9IGZhbHNlOwotLSAgICAgICAgcmVnaXN0ZXIgRlRTRU5U UlkgKmhlYWQgPSBOVUxMOwotLSAgICAgICAgRlRTRU5UUlkgKnRhaWwgPSBOVUxMOwotLSAgICAg ICAgcmVnaXN0ZXIgc2l6ZV90IG5pdGVtcyA9IDA7Ci0tICAgICAgICBib29sIHNvcnRfYnlfaW5v ZGUgPSBmYWxzZTsKLS0gICAgICAgIHdoaWxlIChGVFNFTlRfRElSUChjdXIpKSB7Ci0tICAgICAg ICAgICAgICAgIF9fc2V0X2Vycm5vICgwKTsKLS0gICAgICAgICAgICAgICAgc3RydWN0IGRpcmVu dCAqZHAgPSByZWFkZGlyKEZUU0VOVF9ESVJQKGN1cikpOwotLSAgICAgICAgICAgICAgICBpZiAo ZHAgPT0gTlVMTCkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgcmVhZGRpcigp cyBkbyBub3QgYWJzb3JiIEVOT0VOVCAoZGlyCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGVsZXRlZCBidXQgb3BlbikuICBUaGlzIGJ1ZyB3YXMgZml4ZWQgaW4KLS0gICAgICAgICAgICAg ICAgICAgICAgICAgICBnbGliYyAyLjMgKDIwMDIpLiAgKi8KLS0jaWYgISAoMiA8IF9fR0xJQkNf XyArICgzIDw9IF9fR0xJQkNfTUlOT1JfXykpCi0tICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGVycm5vID09IEVOT0VOVCkKLS0gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vID0gMDsK LSsJc3RydWN0IGRpcmVudCAqZHA7Ci0rCUZUU0VOVFJZICpwLCAqaGVhZDsKLSsJaW50IG5pdGVt czsKLSsJRlRTRU5UUlkgKmN1ciwgKnRhaWw7Ci0rCURJUiAqZGlycDsKLSsJdm9pZCAqb2xkYWRk cjsKLSsJaW50IGNkZXJybm8sIGRlc2NlbmQsIGxlbiwgbGV2ZWwsIG5saW5rcywgc2F2ZWRfZXJy bm8sCi0rCSAgICBub3N0YXQsIGRvYWRqdXN0OwotKwlzaXplX3QgbWF4bGVuOwotKwljaGFyICpj cDsKLSsKLSsJLyogU2V0IGN1cnJlbnQgbm9kZSBwb2ludGVyLiAqLwotKwljdXIgPSBzcC0+ZnRz X2N1cjsKLSsKLSsJLyoKLSsJICogT3BlbiB0aGUgZGlyZWN0b3J5IGZvciByZWFkaW5nLiAgSWYg dGhpcyBmYWlscywgd2UncmUgZG9uZS4KLSsJICogSWYgYmVpbmcgY2FsbGVkIGZyb20gZnRzX3Jl YWQsIHNldCB0aGUgZnRzX2luZm8gZmllbGQuCi0rCSAqLwotKyNpZiBkZWZpbmVkIEZUU19XSElU RU9VVCAmJiAwCi0rCWlmIChJU1NFVChGVFNfV0hJVEVPVVQpKQotKwkJb2ZsYWcgPSBEVEZfTk9E VVB8RFRGX1JFV0lORDsKLSsJZWxzZQotKwkJb2ZsYWcgPSBEVEZfSElERVd8RFRGX05PRFVQfERU Rl9SRVdJTkQ7Ci0rI2Vsc2UKLSsjIGRlZmluZSBfX29wZW5kaXIyKHBhdGgsIGZsYWcpIF9fb3Bl bmRpcihwYXRoKQotICNlbmRpZgotLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJubykg ewotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyLT5mdHNfZXJybm8gPSBlcnJu bzsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlJ3ZlIG5vdCByZWFk IGFueSBpdGVtcyB5ZXQsIHRyZWF0Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aGUgZXJyb3IgYXMgaWYgd2UgY2FuJ3QgYWNjZXNzIHRoZSBkaXIuICAqLwotLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3VyLT5mdHNfaW5mbyA9IChjb250aW51ZV9yZWFkZGly IHx8IG5pdGVtcykKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA/IEZUU19FUlIgOiBGVFNfRE5SOwotLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLS0g ICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcl9hbmRfY2xlYXIoRlRTRU5UX0RJUlAoY3Vy KSk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0tICAgICAgICAgICAgICAgIH0K LS0gICAgICAgICAgICAgICAgaWYgKCFJU1NFVChGVFNfU0VFRE9UKSAmJiBJU0RPVChkcC0+ZF9u YW1lKSkKLS0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLS0KLS0gICAgICAgICAg ICAgICAgc2l6ZV90IGRfbmFtZWxlbiA9IF9EX0VYQUNUX05BTUxFTiAoZHApOwotLSAgICAgICAg ICAgICAgICByZWdpc3RlciBGVFNFTlRSWSAqcCA9IGZ0c19hbGxvYyAoc3AsIGRwLT5kX25hbWUs IGRfbmFtZWxlbik7Ci0tICAgICAgICAgICAgICAgIGlmICghcCkKLS0gICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIG1lbTE7Ci0tICAgICAgICAgICAgICAgIGlmIChkX25hbWVsZW4gPj0gbWF4 bGVuKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5jbHVkZSBzcGFjZSBmb3IgTlVM ICovCi0tICAgICAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IG9sZGFkZHIgPSAodWludHB0 cl90KSBzcC0+ZnRzX3BhdGg7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgZnRzX3Bh bGxvYyhzcCwgZF9uYW1lbGVuICsgbGVuICsgMSkpIHsKLS0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBObyBtb3Jl IG1lbW9yeS4gIFNhdmUKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVycm5v LCBmcmVlIHVwIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBhbmQgdGhlCi0tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKiBzdHJ1Y3R1cmVzIGFscmVhZHkgYWxsb2NhdGVkLgotLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0tbWVtMTogOwotLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87Ci0tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmcmVlKEZUU0VOVF9XUkFQUEVSKHApKTsKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZ0c19sZnJlZShoZWFkKTsKLS0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNsb3NlZGlyX2FuZF9jbGVhcihGVFNFTlRfRElSUChjdXIpKTsKLS0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ci0+ZnRzX2luZm8gPSBGVFNfRVJSOwot LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUKEZUU19TVE9QKTsKLS0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7Ci0tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotLSAgICAgICAgICAg ICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAgICAgICAgICAvKiBEaWQgcmVhbGxvYygp IGNoYW5nZSB0aGUgcG9pbnRlcj8gKi8KLS0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xk YWRkciAhPSAodWludHB0cl90KSBzcC0+ZnRzX3BhdGgpIHsKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRvYWRqdXN0ID0gdHJ1ZTsKLS0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChJU1NFVChGVFNfTk9DSERJUikpCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNwID0gc3AtPmZ0c19wYXRoICsgbGVuOwotLSAgICAgICAgICAgICAg ICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW4gPSBzcC0+ZnRzX3Bh dGhsZW4gLSBsZW47Ci0tICAgICAgICAgICAgICAgIH0KLS0KLS0gICAgICAgICAgICAgICAgc2l6 ZV90IG5ld19sZW4gPSBsZW4gKyBkX25hbWVsZW47Ci0tICAgICAgICAgICAgICAgIGlmIChuZXdf bGVuIDwgbGVuKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgLyoKLS0gICAgICAgICAgICAg ICAgICAgICAgICAgKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCB3ZSB3b3VsZCBlbmQgdXAK LS0gICAgICAgICAgICAgICAgICAgICAgICAgKiB3aXRoIGEgZmlsZSBuYW1lIGxvbmdlciB0aGFu IFNJWkVfTUFYLCBmcmVlIHVwCi0tICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIGN1cnJl bnQgc3RydWN0dXJlIGFuZCB0aGUgc3RydWN0dXJlcyBhbHJlYWR5Ci0tICAgICAgICAgICAgICAg ICAgICAgICAgICogYWxsb2NhdGVkLCB0aGVuIGVycm9yIG91dCB3aXRoIEVOQU1FVE9PTE9ORy4K LS0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS0gICAgICAgICAgICAgICAgICAgICAgICBm cmVlKEZUU0VOVF9XUkFQUEVSKHApKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBmdHNfbGZy ZWUoaGVhZCk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VkaXJfYW5kX2NsZWFyKEZU U0VOVF9ESVJQKGN1cikpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ci0+ZnRzX2luZm8g PSBGVFNfRVJSOwotLSAgICAgICAgICAgICAgICAgICAgICAgIFNFVChGVFNfU1RPUCk7Ci0tICAg ICAgICAgICAgICAgICAgICAgICAgX19zZXRfZXJybm8gKEVOQU1FVE9PTE9ORyk7Ci0tICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKLS0gICAgICAgICAgICAgICAgfQotLSAg ICAgICAgICAgICAgICBwLT5mdHNfbGV2ZWwgPSBsZXZlbDsKLS0gICAgICAgICAgICAgICAgcC0+ ZnRzX3BhcmVudCA9IHNwLT5mdHNfY3VyOwotLSAgICAgICAgICAgICAgICBwLT5mdHNfcGF0aGxl biA9IG5ld19sZW47Ci0tCi0tICAgICAgICAgICAgICAgIC8qIFN0b3JlIGRpcmVudC5kX2lubywg aW4gY2FzZSB3ZSBuZWVkIHRvIHNvcnQKLS0gICAgICAgICAgICAgICAgICAgZW50cmllcyBiZWZv cmUgcHJvY2Vzc2luZyB0aGVtLiAgKi8KLS0gICAgICAgICAgICAgICAgcC0+ZnRzX3N0YXRwLT5z dF9pbm8gPSBEX0lOTyAoZHApOwotLQotLSAgICAgICAgICAgICAgICAvKiBCdWlsZCBhIGZpbGUg bmFtZSBmb3IgZnRzX3N0YXQgdG8gc3RhdC4gKi8KLS0gICAgICAgICAgICAgICAgaWYgKElTU0VU KEZUU19OT0NIRElSKSkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19hY2NwYXRo ID0gcC0+ZnRzX3BhdGg7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgbWVtbW92ZShjcCwgcC0+ ZnRzX25hbWUsIHAtPmZ0c19uYW1lbGVuICsgMSk7Ci0tICAgICAgICAgICAgICAgIH0gZWxzZQot LSAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19hY2NwYXRoID0gcC0+ZnRzX25hbWU7Ci0t Ci0tICAgICAgICAgICAgICAgIGlmIChzcC0+ZnRzX2NvbXBhciA9PSBOVUxMIHx8IElTU0VUKEZU U19ERUZFUl9TVEFUKSkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCB3aGF0 IGZ0c19yZWFkIHdpbGwgaGF2ZSB0byBkbyB3aXRoIHRoaXMKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICBlbnRyeS4gSW4gbWFueSBjYXNlcywgaXQgd2lsbCBzaW1wbHkgZnRzX3N0YXQgaXQs Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHdlIGNhbiB0YWtlIGFkdmFudGFnZSBv ZiBhbnkgZF90eXBlIGluZm9ybWF0aW9uCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8g b3B0aW1pemUgYXdheSB0aGUgdW5uZWNlc3Nhcnkgc3RhdCBjYWxscy4gIEkuZS4sCi0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgRlRTX05PU1RBVCBpcyBpbiBlZmZlY3QsIHdlIGRvbid0 IG5lZWQgZGV2aWNlCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVycyB1bmNvbmRp dGlvbmFsbHkgKEZUU19NT1VOVCkgYW5kIHdlJ3JlIG5vdAotLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZvbGxvd2luZyBzeW1saW5rcyAoRlRTX1BIWVNJQ0FMKSBhbmQgZF90eXBlCi0tICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGVzIHRoaXMgaXMgKm5vdCogYSBkaXJlY3Rv cnksIHRoZW4gd2Ugd29uJ3QKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIHRvIHN0 YXQgaXQgIGF0IGFsbC4gIElmIGl0ICppcyogYSBkaXJlY3RvcnksCi0tICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhlbiAoY3VycmVudGx5KSB3ZSBzdGF0IGl0IHJlZ2FyZGxlc3MsIGluIG9y ZGVyIHRvCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGRldmljZSBhbmQgaW5vZGUg bnVtYmVycy4gIFNvbWUgZGF5IHdlIG1pZ2h0Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAg b3B0aW1pemUgdGhhdCBhd2F5LCB0b28sIGZvciBkaXJlY3RvcmllcyB3aGVyZQotLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRfaW5vIGlzIGtub3duIHRvIGJlIHZhbGlkLiAgKi8KLS0gICAg ICAgICAgICAgICAgICAgICAgICBib29sIHNraXBfc3RhdCA9IChJU1NFVChGVFNfTk9TVEFUKQot LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIERUX0lTX0tOT1dO KGRwKQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEgRFRf TVVTVF9CRShkcCwgRFRfRElSKQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmIChJU1NFVChGVFNfUEhZU0lDQUwpCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHx8ICEgRFRfTVVTVF9CRShkcCwgRFRfTE5LKSkKLS0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhIElTU0VUKEZUU19NT1VO VCkpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19pbmZvID0gRlRTX05TT0s7Ci0t ICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvcGFnYXRlIGRpcmVudC5kX3R5cGUgaW5mb3Jt YXRpb24gYmFjawotLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNhbGxlciwgd2hlbiBw b3NzaWJsZS4gICovCi0tICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3N0YXRfdHlwZSAocC0+ ZnRzX3N0YXRwLCBEX1RZUEUgKGRwKSk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgZnRzX3Nl dF9zdGF0X3JlcXVpcmVkKHAsICFza2lwX3N0YXQpOwotLSAgICAgICAgICAgICAgICB9IGVsc2Ug ewotLSAgICAgICAgICAgICAgICAgICAgICAgIHAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIHAs IGZhbHNlKTsKLS0gICAgICAgICAgICAgICAgfQotLQotLSAgICAgICAgICAgICAgICAvKiBXZSB3 YWxrIGluIGRpcmVjdG9yeSBvcmRlciBzbyAibHMgLWYiIGRvZXNuJ3QgZ2V0IHVwc2V0LiAqLwot LSAgICAgICAgICAgICAgICBwLT5mdHNfbGluayA9IE5VTEw7Ci0tICAgICAgICAgICAgICAgIGlm IChoZWFkID09IE5VTEwpCi0tICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IHRhaWwgPSBw OwotLSAgICAgICAgICAgICAgICBlbHNlIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICB0YWls LT5mdHNfbGluayA9IHA7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgdGFpbCA9IHA7Ci0tICAg ICAgICAgICAgICAgIH0KLS0KLS0gICAgICAgICAgICAgICAgLyogSWYgdGhlcmUgYXJlIG1hbnkg ZW50cmllcywgbm8gc29ydGluZyBmdW5jdGlvbiBoYXMgYmVlbgotLSAgICAgICAgICAgICAgICAg ICBzcGVjaWZpZWQsIGFuZCB0aGlzIGZpbGUgc3lzdGVtIGlzIG9mIGEgdHlwZSB0aGF0IG1heSBi ZQotLSAgICAgICAgICAgICAgICAgICBzbG93IHdpdGggYSBsYXJnZSBudW1iZXIgb2YgZW50cmll cywgYXJyYW5nZSB0byBzb3J0IHRoZQotLSAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgZW50 cmllcyBvbiBpbmNyZWFzaW5nIGlub2RlIG51bWJlcnMuCi0tCi0tICAgICAgICAgICAgICAgICAg IFRoZSBOSVRFTVMgY29tcGFyaXNvbiB1c2VzID09LCBub3QgPiwgYmVjYXVzZSB0aGUgdGVzdAot LSAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBiZSB0cmllZCBhdCBtb3N0IG9uY2Ugb25jZSwg YW5kIE5JVEVNUyB3aWxsIGV4Y2VlZAotLSAgICAgICAgICAgICAgICAgICB0aGUgdGhyZXNob2xk IGFmdGVyIGl0IGlzIGluY3JlbWVudGVkIGJlbG93LiAgKi8KLS0gICAgICAgICAgICAgICAgaWYg KG5pdGVtcyA9PSBfRlRTX0lOT0RFX1NPUlRfRElSX0VOVFJJRVNfVEhSRVNIT0xECi0tICAgICAg ICAgICAgICAgICAgICAmJiAhc3AtPmZ0c19jb21wYXIpCi0tICAgICAgICAgICAgICAgICAgc29y dF9ieV9pbm9kZSA9IGRpcmVudF9pbm9kZV9zb3J0X21heV9iZV91c2VmdWwgKGN1ciwgZGlyX2Zk KTsKLS0KLS0gICAgICAgICAgICAgICAgKytuaXRlbXM7Ci0tICAgICAgICAgICAgICAgIGlmICht YXhfZW50cmllcyA8PSBuaXRlbXMpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGVu IHRoZXJlIGFyZSB0b28gbWFueSBkaXIgZW50cmllcywgbGVhdmUKLS0gICAgICAgICAgICAgICAg ICAgICAgICAgICBmdHNfZGlycCBvcGVuLCBzbyB0aGF0IGEgc3Vic2VxdWVudCBmdHNfcmVhZAot LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiB0YWtlIHVwIHdoZXJlIHdlIGxlYXZlIG9m Zi4gICovCi0tICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0tICAgICAgICAgICAgICAg IH0KLS0gICAgICAgIH0KLS0KLS0gICAgICAgIC8qCi0tICAgICAgICAgKiBJZiByZWFsbG9jKCkg Y2hhbmdlZCB0aGUgYWRkcmVzcyBvZiB0aGUgZmlsZSBuYW1lLCBhZGp1c3QgdGhlCi0tICAgICAg ICAgKiBhZGRyZXNzZXMgZm9yIHRoZSByZXN0IG9mIHRoZSB0cmVlIGFuZCB0aGUgZGlyIGxpc3Qu Ci0tICAgICAgICAgKi8KLS0gICAgICAgIGlmIChkb2FkanVzdCkKLS0gICAgICAgICAgICAgICAg ZnRzX3BhZGp1c3Qoc3AsIGhlYWQpOwotLQotLSAgICAgICAgLyoKLS0gICAgICAgICAqIElmIG5v dCBjaGFuZ2luZyBkaXJlY3RvcmllcywgcmVzZXQgdGhlIGZpbGUgbmFtZSBiYWNrIHRvIG9yaWdp bmFsCi0tICAgICAgICAgKiBzdGF0ZS4KLS0gICAgICAgICAqLwotLSAgICAgICAgaWYgKElTU0VU KEZUU19OT0NIRElSKSkgewotLSAgICAgICAgICAgICAgICBpZiAobGVuID09IHNwLT5mdHNfcGF0 aGxlbiB8fCBuaXRlbXMgPT0gMCkKLS0gICAgICAgICAgICAgICAgICAgICAgICAtLWNwOwotLSAg ICAgICAgICAgICAgICAqY3AgPSAnXDAnOwotLSAgICAgICAgfQotLQotLSAgICAgICAgLyoKLS0g ICAgICAgICAqIElmIGRlc2NlbmRlZCBhZnRlciBjYWxsZWQgZnJvbSBmdHNfY2hpbGRyZW4gb3Ig YWZ0ZXIgY2FsbGVkIGZyb20KLS0gICAgICAgICAqIGZ0c19yZWFkIGFuZCBub3RoaW5nIGZvdW5k LCBnZXQgYmFjay4gIEF0IHRoZSByb290IGxldmVsIHdlIHVzZQotLSAgICAgICAgICogdGhlIHNh dmVkIGZkOyBpZiBvbmUgb2YgZnRzX29wZW4oKSdzIGFyZ3VtZW50cyBpcyBhIHJlbGF0aXZlIG5h bWUKLS0gICAgICAgICAqIHRvIGFuIGVtcHR5IGRpcmVjdG9yeSwgd2Ugd2luZCB1cCBoZXJlIHdp dGggbm8gb3RoZXIgd2F5IGJhY2suICBJZgotLSAgICAgICAgICogY2FuJ3QgZ2V0IGJhY2ssIHdl J3JlIGRvbmUuCi0tICAgICAgICAgKi8KLS0gICAgICAgIGlmICghY29udGludWVfcmVhZGRpciAm JiBkZXNjZW5kICYmICh0eXBlID09IEJDSElMRCB8fCAhbml0ZW1zKSAmJgotLSAgICAgICAgICAg IChjdXItPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVMCi0tICAgICAgICAgICAgID8gcmVzdG9y ZV9pbml0aWFsX2N3ZChzcCkKLS0gICAgICAgICAgICAgOiBmdHNfc2FmZV9jaGFuZ2VkaXIoc3As IGN1ci0+ZnRzX3BhcmVudCwgLTEsICIuLiIpKSkgewotLSAgICAgICAgICAgICAgICBjdXItPmZ0 c19pbmZvID0gRlRTX0VSUjsKLS0gICAgICAgICAgICAgICAgU0VUKEZUU19TVE9QKTsKLS0gICAg ICAgICAgICAgICAgZnRzX2xmcmVlKGhlYWQpOwotLSAgICAgICAgICAgICAgICByZXR1cm4gKE5V TEwpOwotLSAgICAgICAgfQotLQotLSAgICAgICAgLyogSWYgZGlkbid0IGZpbmQgYW55dGhpbmcs IHJldHVybiBOVUxMLiAqLwotLSAgICAgICAgaWYgKCFuaXRlbXMpIHsKLS0gICAgICAgICAgICAg ICAgaWYgKHR5cGUgPT0gQlJFQUQKLS0gICAgICAgICAgICAgICAgICAgICYmIGN1ci0+ZnRzX2lu Zm8gIT0gRlRTX0ROUiAmJiBjdXItPmZ0c19pbmZvICE9IEZUU19FUlIpCi0tICAgICAgICAgICAg ICAgICAgICAgICAgY3VyLT5mdHNfaW5mbyA9IEZUU19EUDsKLS0gICAgICAgICAgICAgICAgZnRz X2xmcmVlKGhlYWQpOwotLSAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotLSAgICAgICAg fQotLQotLSAgICAgICAgaWYgKHNvcnRfYnlfaW5vZGUpIHsKLS0gICAgICAgICAgICAgICAgc3At PmZ0c19jb21wYXIgPSBGVFNfQ09NUEFSX0NBU1QgKGZ0c19jb21wYXJlX2lubyk7Ci0tICAgICAg ICAgICAgICAgIGhlYWQgPSBmdHNfc29ydCAoc3AsIGhlYWQsIG5pdGVtcyk7Ci0tICAgICAgICAg ICAgICAgIHNwLT5mdHNfY29tcGFyID0gTlVMTDsKLS0gICAgICAgIH0KLS0KLS0gICAgICAgIC8q IFNvcnQgdGhlIGVudHJpZXMuICovCi0tICAgICAgICBpZiAoc3AtPmZ0c19jb21wYXIgJiYgbml0 ZW1zID4gMSkKLS0gICAgICAgICAgICAgICAgaGVhZCA9IGZ0c19zb3J0KHNwLCBoZWFkLCBuaXRl bXMpOwotLSAgICAgICAgcmV0dXJuIChoZWFkKTsKLS19Ci0rICAgICAgIGlmICgoZGlycCA9IF9f b3BlbmRpcjIoY3VyLT5mdHNfYWNjcGF0aCwgb2ZsYWcpKSA9PSBOVUxMKSB7Ci0rCQlpZiAodHlw ZSA9PSBCUkVBRCkgewotKwkJCWN1ci0+ZnRzX2luZm8gPSBGVFNfRE5SOwotKwkJCWN1ci0+ZnRz X2Vycm5vID0gZXJybm87Ci0rCQl9Ci0rCQlyZXR1cm4gKE5VTEwpOwotKwl9Ci0gCi0tI2lmIEdO VUxJQl9GVFNfREVCVUcKLSsJLyoKLSsJICogTmxpbmtzIGlzIHRoZSBudW1iZXIgb2YgcG9zc2li bGUgZW50cmllcyBvZiB0eXBlIGRpcmVjdG9yeSBpbiB0aGUKLSsJICogZGlyZWN0b3J5IGlmIHdl J3JlIGNoZWF0aW5nIG9uIHN0YXQgY2FsbHMsIDAgaWYgd2UncmUgbm90IGRvaW5nCi0rCSAqIGFu eSBzdGF0IGNhbGxzIGF0IGFsbCwgLTEgaWYgd2UncmUgZG9pbmcgc3RhdHMgb24gZXZlcnl0aGlu Zy4KLSsJICovCi0rCWlmICh0eXBlID09IEJOQU1FUykgewotKwkJbmxpbmtzID0gMDsKLSsJCS8q IEJlIHF1aWV0IGFib3V0IG5vc3RhdCwgR0NDLiAqLwotKwkJbm9zdGF0ID0gMDsKLSsJfSBlbHNl IGlmIChJU1NFVChGVFNfTk9TVEFUKSAmJiBJU1NFVChGVFNfUEhZU0lDQUwpKSB7Ci0rCQlubGlu a3MgPSBjdXItPmZ0c19ubGluayAtIChJU1NFVChGVFNfU0VFRE9UKSA/IDAgOiAyKTsKLSsJCW5v c3RhdCA9IDE7Ci0rCX0gZWxzZSB7Ci0rCQlubGlua3MgPSAtMTsKLSsJCW5vc3RhdCA9IDA7Ci0r CX0KLSsKLSsjaWZkZWYgbm90ZGVmCi0rCSh2b2lkKXByaW50ZigibmxpbmtzID09ICVkIChjdXI6 ICVkKVxuIiwgbmxpbmtzLCBjdXItPmZ0c19ubGluayk7Ci0rCSh2b2lkKXByaW50ZigiTk9TVEFU ICVkIFBIWVNJQ0FMICVkIFNFRURPVCAlZFxuIiwKLSsJICAgIElTU0VUKEZUU19OT1NUQVQpLCBJ U1NFVChGVFNfUEhZU0lDQUwpLCBJU1NFVChGVFNfU0VFRE9UKSk7Ci0rI2VuZGlmCi0rCS8qCi0r CSAqIElmIHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gc3RhdCBhbnl0aGluZyBvciB3ZSB3YW50IHRv IGRlc2NlbmQKLSsJICogYW5kIHN0YXkgaW4gdGhlIGRpcmVjdG9yeSwgY2hkaXIuICBJZiB0aGlz IGZhaWxzIHdlIGtlZXAgZ29pbmcsCi0rCSAqIGJ1dCBzZXQgYSBmbGFnIHNvIHdlIGRvbid0IGNo ZGlyIGFmdGVyIHRoZSBwb3N0LW9yZGVyIHZpc2l0LgotKwkgKiBXZSB3b24ndCBiZSBhYmxlIHRv IHN0YXQgYW55dGhpbmcsIGJ1dCB3ZSBjYW4gc3RpbGwgcmV0dXJuIHRoZQotKwkgKiBuYW1lcyB0 aGVtc2VsdmVzLiAgTm90ZSwgdGhhdCBzaW5jZSBmdHNfcmVhZCB3b24ndCBiZSBhYmxlIHRvCi0r CSAqIGNoZGlyIGludG8gdGhlIGRpcmVjdG9yeSwgaXQgd2lsbCBoYXZlIHRvIHJldHVybiBkaWZm ZXJlbnQgcGF0aAotKwkgKiBuYW1lcyB0aGFuIGJlZm9yZSwgaS5lLiAiYS9iIiBpbnN0ZWFkIG9m ICJiIi4gIFNpbmNlIHRoZSBub2RlCi0rCSAqIGhhcyBhbHJlYWR5IGJlZW4gdmlzaXRlZCBpbiBw cmUtb3JkZXIsIGhhdmUgdG8gd2FpdCB1bnRpbCB0aGUKLSsJICogcG9zdC1vcmRlciB2aXNpdCB0 byByZXR1cm4gdGhlIGVycm9yLiAgVGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UKLSsJICogaGVyZSwg aWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gc3RhdCB0aGVuIGl0J3Mgbm90IGFuIGVycm9yIHRvCi0r CSAqIG5vdCBiZSBhYmxlIHRvIHN0YXQuICBUaGlzIGlzIGFsbCBmYWlybHkgbmFzdHkuICBJZiBh IHByb2dyYW0KLSsJICogbmVlZGVkIHNvcnRlZCBlbnRyaWVzIG9yIHN0YXQgaW5mb3JtYXRpb24s IHRoZXkgaGFkIGJldHRlciBiZQotKwkgKiBjaGVja2luZyBGVFNfTlMgb24gdGhlIHJldHVybmVk IG5vZGVzLgotKwkgKi8KLSsJY2RlcnJubyA9IDA7Ci0rCWlmIChubGlua3MgfHwgdHlwZSA9PSBC UkVBRCkgewotKwkJaWYgKGZ0c19zYWZlX2NoYW5nZWRpcihzcCwgY3VyLCBkaXJmZChkaXJwKSwg TlVMTCkpIHsKLSsJCQlpZiAobmxpbmtzICYmIHR5cGUgPT0gQlJFQUQpCi0rCQkJCWN1ci0+ZnRz X2Vycm5vID0gZXJybm87Ci0rCQkJY3VyLT5mdHNfZmxhZ3MgfD0gRlRTX0RPTlRDSERJUjsKLSsJ CQlkZXNjZW5kID0gMDsKLSsJCQljZGVycm5vID0gZXJybm87Ci0rCQkJKHZvaWQpX19jbG9zZWRp cihkaXJwKTsKLSsJCQlkaXJwID0gTlVMTDsKLSsJCX0gZWxzZQotKwkJCWRlc2NlbmQgPSAxOwot Kwl9IGVsc2UKLSsJCWRlc2NlbmQgPSAwOwotIAotLXN0cnVjdCBkZXZpbm8gewotLSAgaW50bWF4 X3QgZGV2LCBpbm87Ci0tfTsKLS0jZGVmaW5lIFBSSU5UX0RFVklOTyAiKCVqZCwlamQpIgotKwkv KgotKwkgKiBGaWd1cmUgb3V0IHRoZSBtYXggZmlsZSBuYW1lIGxlbmd0aCB0aGF0IGNhbiBiZSBz dG9yZWQgaW4gdGhlCi0rCSAqIGN1cnJlbnQgcGF0aCAtLSB0aGUgaW5uZXIgbG9vcCBhbGxvY2F0 ZXMgbW9yZSBwYXRoIGFzIG5lY2Vzc2FyeS4KLSsJICogV2UgcmVhbGx5IHdvdWxkbid0IGhhdmUg dG8gZG8gdGhlIG1heGxlbiBjYWxjdWxhdGlvbnMgaGVyZSwgd2UKLSsJICogY291bGQgZG8gdGhl bSBpbiBmdHNfcmVhZCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBwYXRoLCBidXQgaXQncyBhCi0rCSAq IGxvdCBlYXNpZXIgaGVyZSBzaW5jZSB0aGUgbGVuZ3RoIGlzIHBhcnQgb2YgdGhlIGRpcmVudCBz dHJ1Y3R1cmUuCi0rCSAqCi0rCSAqIElmIG5vdCBjaGFuZ2luZyBkaXJlY3RvcmllcyBzZXQgYSBw b2ludGVyIHNvIHRoYXQgY2FuIGp1c3QgYXBwZW5kCi0rCSAqIGVhY2ggbmV3IG5hbWUgaW50byB0 aGUgcGF0aC4KLSsJICovCi0rCWxlbiA9IE5BUFBFTkQoY3VyKTsKLSsJaWYgKElTU0VUKEZUU19O T0NIRElSKSkgewotKwkJY3AgPSBzcC0+ZnRzX3BhdGggKyBsZW47Ci0rCQkqY3ArKyA9ICcvJzsK LSsJfSBlbHNlIHsKLSsJCS8qIEdDQywgeW91J3JlIHRvbyB2ZXJib3NlLiAqLwotKwkJY3AgPSBO VUxMOwotKwl9Ci0rCWxlbisrOwotKwltYXhsZW4gPSBzcC0+ZnRzX3BhdGhsZW4gLSBsZW47Ci0r Ci0rCWxldmVsID0gY3VyLT5mdHNfbGV2ZWwgKyAxOwotKwotKwkvKiBSZWFkIHRoZSBkaXJlY3Rv cnksIGF0dGFjaGluZyBlYWNoIGVudHJ5IHRvIHRoZSBgbGluaycgcG9pbnRlci4gKi8KLSsJZG9h ZGp1c3QgPSAwOwotKwlmb3IgKGhlYWQgPSB0YWlsID0gTlVMTCwgbml0ZW1zID0gMDsgZGlycCAm JiAoZHAgPSBfX3JlYWRkaXIoZGlycCkpOykgewotKwkJaWYgKCFJU1NFVChGVFNfU0VFRE9UKSAm JiBJU0RPVChkcC0+ZF9uYW1lKSkKLSsJCQljb250aW51ZTsKLSsKLSsJCWlmICgocCA9IGZ0c19h bGxvYyhzcCwgZHAtPmRfbmFtZSwgX0RfRVhBQ1RfTkFNTEVOIChkcCkpKSA9PSBOVUxMKQotKwkJ CWdvdG8gbWVtMTsKLSsJCWlmIChfRF9FWEFDVF9OQU1MRU4gKGRwKSA+PSBtYXhsZW4pIHsvKiBp bmNsdWRlIHNwYWNlIGZvciBOVUwgKi8KLSsJCQlvbGRhZGRyID0gc3AtPmZ0c19wYXRoOwotKwkJ CWlmIChmdHNfcGFsbG9jKHNwLCBfRF9FWEFDVF9OQU1MRU4gKGRwKSArIGxlbiArIDEpKSB7Ci0r CQkJCS8qCi0rCQkJCSAqIE5vIG1vcmUgbWVtb3J5IGZvciBwYXRoIG9yIHN0cnVjdHVyZXMuICBT YXZlCi0rCQkJCSAqIGVycm5vLCBmcmVlIHVwIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBhbmQgdGhl Ci0rCQkJCSAqIHN0cnVjdHVyZXMgYWxyZWFkeSBhbGxvY2F0ZWQuCi0rCQkJCSAqLwotK21lbTE6 CQkJCXNhdmVkX2Vycm5vID0gZXJybm87Ci0rCQkJCWZyZWUocCk7Ci0rCQkJCWZ0c19sZnJlZSho ZWFkKTsKLSsJCQkJKHZvaWQpX19jbG9zZWRpcihkaXJwKTsKLSsJCQkJY3VyLT5mdHNfaW5mbyA9 IEZUU19FUlI7Ci0rCQkJCVNFVChGVFNfU1RPUCk7Ci0rCQkJCV9fc2V0X2Vycm5vIChzYXZlZF9l cnJubyk7Ci0rCQkJCXJldHVybiAoTlVMTCk7Ci0rCQkJfQotKwkJCS8qIERpZCByZWFsbG9jKCkg Y2hhbmdlIHRoZSBwb2ludGVyPyAqLwotKwkJCWlmIChvbGRhZGRyICE9IHNwLT5mdHNfcGF0aCkg ewotKwkJCQlkb2FkanVzdCA9IDE7Ci0rCQkJCWlmIChJU1NFVChGVFNfTk9DSERJUikpCi0rCQkJ CQljcCA9IHNwLT5mdHNfcGF0aCArIGxlbjsKLSsJCQl9Ci0rCQkJbWF4bGVuID0gc3AtPmZ0c19w YXRobGVuIC0gbGVuOwotKwkJfQotKwotKwkJaWYgKGxlbiArIF9EX0VYQUNUX05BTUxFTiAoZHAp ID49IFVTSFJUX01BWCkgewotKwkJCS8qCi0rCQkJICogSW4gYW4gRlRTRU5ULCBmdHNfcGF0aGxl biBpcyBhIHVfc2hvcnQgc28gaXQgaXMKLSsJCQkgKiBwb3NzaWJsZSB0byB3cmFwYXJvdW5kIGhl cmUuICBJZiB3ZSBkbywgZnJlZSB1cAotKwkJCSAqIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBhbmQg dGhlIHN0cnVjdHVyZXMgYWxyZWFkeQotKwkJCSAqIGFsbG9jYXRlZCwgdGhlbiBlcnJvciBvdXQg d2l0aCBFTkFNRVRPT0xPTkcuCi0rCQkJICovCi0rCQkJZnJlZShwKTsKLSsJCQlmdHNfbGZyZWUo aGVhZCk7Ci0rCQkJKHZvaWQpX19jbG9zZWRpcihkaXJwKTsKLSsJCQljdXItPmZ0c19pbmZvID0g RlRTX0VSUjsKLSsJCQlTRVQoRlRTX1NUT1ApOwotKwkJCV9fc2V0X2Vycm5vIChFTkFNRVRPT0xP TkcpOwotKwkJCXJldHVybiAoTlVMTCk7Ci0rCQl9Ci0rCQlwLT5mdHNfbGV2ZWwgPSBsZXZlbDsK LSsJCXAtPmZ0c19wYXJlbnQgPSBzcC0+ZnRzX2N1cjsKLSsJCXAtPmZ0c19wYXRobGVuID0gbGVu ICsgX0RfRVhBQ1RfTkFNTEVOIChkcCk7Ci0rCi0rI2lmIGRlZmluZWQgRlRTX1dISVRFT1VUICYm IDAKLSsJCWlmIChkcC0+ZF90eXBlID09IERUX1dIVCkKLSsJCQlwLT5mdHNfZmxhZ3MgfD0gRlRT X0lTVzsKLSsjZW5kaWYKLSAKLS1zdGF0aWMgc3RydWN0IGRldmlubwotLWdldGRldmlubyAoaW50 IGZkKQotLXsKLS0gIHN0cnVjdCBTVFJVQ1RfU1RBVCBzdDsKLS0gIHJldHVybiAoZmQgPT0gQVRf RkRDV0QKLS0gICAgICAgICAgPyAoc3RydWN0IGRldmlubykgeyAtMSwgMCB9Ci0tICAgICAgICAg IDogRlNUQVQgKGZkLCAmc3QpID09IDAKLS0gICAgICAgICAgPyAoc3RydWN0IGRldmlubykgeyBz dC5zdF9kZXYsIHN0LnN0X2lubyB9Ci0tICAgICAgICAgIDogKHN0cnVjdCBkZXZpbm8pIHsgLTEs IGVycm5vIH0pOwotLX0KLSsJCS8qIFVucmVhY2hhYmxlIGNvZGUuICBjZGVycm5vIGlzIG9ubHkg ZXZlciBzZXQgdG8gYSBub25udWxsCi0rCQkgICB2YWx1ZSBpZiBkaXJwIGlzIGNsb3NlZCBhdCB0 aGUgc2FtZSB0aW1lLiAgQnV0IHRoZW4gd2UKLSsJCSAgIGNhbm5vdCBlbnRlciB0aGlzIGxvb3Au ICAqLwotKwkJaWYgKDAgJiYgY2RlcnJubykgewotKwkJCWlmIChubGlua3MpIHsKLSsJCQkJcC0+ ZnRzX2luZm8gPSBGVFNfTlM7Ci0rCQkJCXAtPmZ0c19lcnJubyA9IGNkZXJybm87Ci0rCQkJfSBl bHNlCi0rCQkJCXAtPmZ0c19pbmZvID0gRlRTX05TT0s7Ci0rCQkJcC0+ZnRzX2FjY3BhdGggPSBj dXItPmZ0c19hY2NwYXRoOwotKwkJfSBlbHNlIGlmIChubGlua3MgPT0gMAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHx8IChub3N0YXQgJiYgZGlyZW50X25vdF9kaXJlY3RvcnkoZHApKSkg ewotKwkJCXAtPmZ0c19hY2NwYXRoID0KLSsJCQkgICAgSVNTRVQoRlRTX05PQ0hESVIpID8gcC0+ ZnRzX3BhdGggOiBwLT5mdHNfbmFtZTsKLSsJCQlwLT5mdHNfaW5mbyA9IEZUU19OU09LOwotKwkJ fSBlbHNlIHsKLSsJCQkvKiBCdWlsZCBhIGZpbGUgbmFtZSBmb3IgZnRzX3N0YXQgdG8gc3RhdC4g Ki8KLSsJCQlpZiAoSVNTRVQoRlRTX05PQ0hESVIpKSB7Ci0rCQkJCXAtPmZ0c19hY2NwYXRoID0g cC0+ZnRzX3BhdGg7Ci0rCQkJCW1lbW1vdmUoY3AsIHAtPmZ0c19uYW1lLCBwLT5mdHNfbmFtZWxl biArIDEpOwotKwkJCX0gZWxzZQotKwkJCQlwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0c19uYW1lOwot KwkJCS8qIFN0YXQgaXQuICovCi0rCQkJcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChzcCwgcCwgMCk7 Ci0rCi0rCQkJLyogRGVjcmVtZW50IGxpbmsgY291bnQgaWYgYXBwbGljYWJsZS4gKi8KLSsJCQlp ZiAobmxpbmtzID4gMCAmJiAocC0+ZnRzX2luZm8gPT0gRlRTX0QgfHwKLSsJCQkgICAgcC0+ZnRz X2luZm8gPT0gRlRTX0RDIHx8IHAtPmZ0c19pbmZvID09IEZUU19ET1QpKQotKwkJCQktLW5saW5r czsKLSsJCX0KLSsKLSsJCS8qIFdlIHdhbGsgaW4gZGlyZWN0b3J5IG9yZGVyIHNvICJscyAtZiIg ZG9lc24ndCBnZXQgdXBzZXQuICovCi0rCQlwLT5mdHNfbGluayA9IE5VTEw7Ci0rCQlpZiAoaGVh ZCA9PSBOVUxMKQotKwkJCWhlYWQgPSB0YWlsID0gcDsKLSsJCWVsc2UgewotKwkJCXRhaWwtPmZ0 c19saW5rID0gcDsKLSsJCQl0YWlsID0gcDsKLSsJCX0KLSsJCSsrbml0ZW1zOwotKwl9Ci0rCWlm IChkaXJwKQotKwkJKHZvaWQpX19jbG9zZWRpcihkaXJwKTsKLSAKLS0vKiBXYWxrIC0+ZnRzX3Bh cmVudCBsaW5rcyBzdGFydGluZyBhdCBFX0NVUlIsIHVudGlsIHRoZSByb290IG9mIHRoZQotLSAg IGN1cnJlbnQgaGllcmFyY2h5LiAgVGhlcmUgc2hvdWxkIGJlIGEgZGlyZWN0b3J5IHdpdGggZGV2 L2lub2RlCi0tICAgbWF0Y2hpbmcgdGhvc2Ugb2YgQUQuICBJZiBub3QsIHByaW50IGEgbG90IG9m IGRpYWdub3N0aWNzLiAgKi8KLS1zdGF0aWMgdm9pZAotLWZpbmRfbWF0Y2hpbmdfYW5jZXN0b3Ig KEZUU0VOVFJZIGNvbnN0ICplX2N1cnIsIHN0cnVjdCBBY3RpdmVfZGlyIGNvbnN0ICphZCkKLS17 Ci0tICBmb3IgKEZUU0VOVFJZIGNvbnN0ICplbnQgPSBlX2N1cnI7Ci0tICAgICAgIGVudC0+ZnRz X2xldmVsID49IEZUU19ST09UTEVWRUw7Ci0tICAgICAgIGVudCA9IGVudC0+ZnRzX3BhcmVudCkK LS0gICAgewotLSAgICAgIGlmIChhZC0+aW5vID09IGVudC0+ZnRzX3N0YXRwLT5zdF9pbm8KLS0g ICAgICAgICAgJiYgYWQtPmRldiA9PSBlbnQtPmZ0c19zdGF0cC0+c3RfZGV2KQotLSAgICAgICAg cmV0dXJuOwotLSAgICB9Ci0tICBwcmludGYgKCJFUlJPUjogdHJlZSBkaXIsICVzLCBub3QgYWN0 aXZlXG4iLCBhZC0+ZnRzX2VudC0+ZnRzX2FjY3BhdGgpOwotLSAgcHJpbnRmICgiYWN0aXZlIGRp cnM6XG4iKTsKLS0gIGZvciAoRlRTRU5UUlkgY29uc3QgKmVudCA9IGVfY3VycjsKLS0gICAgICAg ZW50LT5mdHNfbGV2ZWwgPj0gRlRTX1JPT1RMRVZFTDsKLS0gICAgICAgZW50ID0gZW50LT5mdHNf cGFyZW50KQotLSAgICBwcmludGYgKCIgICVzKCUiUFJJdU1BWCIvJSJQUkl1TUFYIikgdG8gJXMo JSJQUkl1TUFYIi8lIlBSSXVNQVgiKS4uLlxuIiwKLS0gICAgICAgICAgICBhZC0+ZnRzX2VudC0+ ZnRzX2FjY3BhdGgsCi0tICAgICAgICAgICAgKHVpbnRtYXhfdCkgYWQtPmRldiwKLS0gICAgICAg ICAgICAodWludG1heF90KSBhZC0+aW5vLAotLSAgICAgICAgICAgIGVudC0+ZnRzX2FjY3BhdGgs Ci0tICAgICAgICAgICAgKHVpbnRtYXhfdCkgZW50LT5mdHNfc3RhdHAtPnN0X2RldiwKLS0gICAg ICAgICAgICAodWludG1heF90KSBlbnQtPmZ0c19zdGF0cC0+c3RfaW5vKTsKLS19Ci0rCS8qCi0r CSAqIElmIHJlYWxsb2MoKSBjaGFuZ2VkIHRoZSBhZGRyZXNzIG9mIHRoZSBwYXRoLCBhZGp1c3Qg dGhlCi0rCSAqIGFkZHJlc3NlcyBmb3IgdGhlIHJlc3Qgb2YgdGhlIHRyZWUgYW5kIHRoZSBkaXIg bGlzdC4KLSsJICovCi0rCWlmIChkb2FkanVzdCkKLSsJCWZ0c19wYWRqdXN0KHNwLCBoZWFkKTsK LSAKLS12b2lkCi0tZnRzX2Nyb3NzX2NoZWNrIChGVFNPQkogY29uc3QgKnNwKQotLXsKLS0gIGlm ICggISBJU1NFVCAoRlRTX1RJR0hUX0NZQ0xFX0NIRUNLKSkKLS0gICAgcmV0dXJuOwotLQotLSAg RlRTRU5UUlkgY29uc3QgKmVudCA9IHNwLT5mdHNfY3VyOwotLQotLSAgRHByaW50ZiAoKCJmdHMt Y3Jvc3MtY2hlY2sgY3VyPSVzXG4iLCBlbnQtPmZ0c19wYXRoKSk7Ci0tICAvKiBNYWtlIHN1cmUg ZXZlcnkgcGFyZW50IGRpciBpcyBpbiB0aGUgdHJlZS4gICovCi0tICBmb3IgKEZUU0VOVFJZIGNv bnN0ICp0ID0gZW50LT5mdHNfcGFyZW50OwotLSAgICAgICB0LT5mdHNfbGV2ZWwgPj0gRlRTX1JP T1RMRVZFTDsKLS0gICAgICAgdCA9IHQtPmZ0c19wYXJlbnQpCi0tICAgIHsKLS0gICAgICBzdHJ1 Y3QgQWN0aXZlX2RpciBhZDsKLS0gICAgICBhZC5pbm8gPSB0LT5mdHNfc3RhdHAtPnN0X2lubzsK LS0gICAgICBhZC5kZXYgPSB0LT5mdHNfc3RhdHAtPnN0X2RldjsKLS0gICAgICBpZiAoICEgaGFz aF9sb29rdXAgKHNwLT5mdHNfY3ljbGUuaHQsICZhZCkpCi0tICAgICAgICBwcmludGYgKCJFUlJP UjogYWN0aXZlIGRpciwgJXMsIG5vdCBpbiB0cmVlXG4iLCB0LT5mdHNfcGF0aCk7Ci0tICAgIH0K LS0KLS0gIC8qIE1ha2Ugc3VyZSBldmVyeSBkaXIgaW4gdGhlIHRyZWUgaXMgYW4gYWN0aXZlIGRp ci4KLS0gICAgIEJ1dCBFTlQgaXMgbm90IG5lY2Vzc2FyaWx5IGEgZGlyZWN0b3J5LiAgSWYgc28s IGp1c3Qgc2tpcCB0aGlzIHBhcnQuICovCi0tICBpZiAoZW50LT5mdHNfcGFyZW50LT5mdHNfbGV2 ZWwgPj0gRlRTX1JPT1RMRVZFTAotLSAgICAgICYmIChlbnQtPmZ0c19pbmZvID09IEZUU19EUAot LSAgICAgICAgICB8fCBlbnQtPmZ0c19pbmZvID09IEZUU19EKSkKLS0gICAgZm9yIChzdHJ1Y3Qg QWN0aXZlX2RpciAqYWQgPSBoYXNoX2dldF9maXJzdCAoc3AtPmZ0c19jeWNsZS5odCk7Ci0tICAg ICAgICAgYWQgIT0gTlVMTDsKLS0gICAgICAgICBhZCA9IGhhc2hfZ2V0X25leHQgKHNwLT5mdHNf Y3ljbGUuaHQsIGFkKSkKLS0gICAgICB7Ci0tICAgICAgICBmaW5kX21hdGNoaW5nX2FuY2VzdG9y IChlbnQsIGFkKTsKLS0gICAgICB9Ci0tfQotKwkvKgotKwkgKiBJZiBub3QgY2hhbmdpbmcgZGly ZWN0b3JpZXMsIHJlc2V0IHRoZSBwYXRoIGJhY2sgdG8gb3JpZ2luYWwKLSsJICogc3RhdGUuCi0r CSAqLwotKwlpZiAoSVNTRVQoRlRTX05PQ0hESVIpKSB7Ci0rCQlpZiAobGVuID09IHNwLT5mdHNf cGF0aGxlbiB8fCBuaXRlbXMgPT0gMCkKLSsJCQktLWNwOwotKwkJKmNwID0gJ1wwJzsKLSsJfQot IAotLXN0YXRpYyBib29sCi0tc2FtZV9mZCAoaW50IGZkMSwgaW50IGZkMikKLS17Ci0tICBzdHJ1 Y3QgU1RSVUNUX1NUQVQgc2IxLCBzYjI7Ci0tICByZXR1cm4gKEZTVEFUIChmZDEsICZzYjEpID09 IDAKLS0gICAgICAgICAgJiYgRlNUQVQgKGZkMiwgJnNiMikgPT0gMAotLSAgICAgICAgICAmJiBw c2FtZV9pbm9kZSAoJnNiMSwgJnNiMikpOwotLX0KLSsJLyoKLSsJICogSWYgZGVzY2VuZGVkIGFm dGVyIGNhbGxlZCBmcm9tIGZ0c19jaGlsZHJlbiBvciBhZnRlciBjYWxsZWQgZnJvbQotKwkgKiBm dHNfcmVhZCBhbmQgbm90aGluZyBmb3VuZCwgZ2V0IGJhY2suICBBdCB0aGUgcm9vdCBsZXZlbCB3 ZSB1c2UKLSsJICogdGhlIHNhdmVkIGZkOyBpZiBvbmUgb2YgZnRzX29wZW4oKSdzIGFyZ3VtZW50 cyBpcyBhIHJlbGF0aXZlIHBhdGgKLSsJICogdG8gYW4gZW1wdHkgZGlyZWN0b3J5LCB3ZSB3aW5k IHVwIGhlcmUgd2l0aCBubyBvdGhlciB3YXkgYmFjay4gIElmCi0rCSAqIGNhbid0IGdldCBiYWNr LCB3ZSdyZSBkb25lLgotKwkgKi8KLSsJaWYgKGRlc2NlbmQgJiYgKHR5cGUgPT0gQkNISUxEIHx8 ICFuaXRlbXMpICYmCi0rCSAgICAoY3VyLT5mdHNfbGV2ZWwgPT0gRlRTX1JPT1RMRVZFTCA/Ci0r CSAgICAgRkNIRElSKHNwLCBzcC0+ZnRzX3JmZCkgOgotKwkgICAgIGZ0c19zYWZlX2NoYW5nZWRp cihzcCwgY3VyLT5mdHNfcGFyZW50LCAtMSwgIi4uIikpKSB7Ci0rCQljdXItPmZ0c19pbmZvID0g RlRTX0VSUjsKLSsJCVNFVChGVFNfU1RPUCk7Ci0rCQlmdHNfbGZyZWUoaGVhZCk7Ci0rCQlyZXR1 cm4gKE5VTEwpOwotKwl9Ci0gCi0tc3RhdGljIHZvaWQKLS1mZF9yaW5nX3ByaW50IChGVFNPQkog Y29uc3QgKnNwLCBGSUxFICpzdHJlYW0sIGNoYXIgY29uc3QgKm1zZykKLS17Ci0tICBpZiAoIWZ0 c19kZWJ1ZykKLS0gICAgcmV0dXJuOwotLSAgSV9yaW5nIGNvbnN0ICpmZF9yaW5nID0gJnNwLT5m dHNfZmRfcmluZzsKLS0gIHN0cnVjdCBkZXZpbm8gY3dkID0gZ2V0ZGV2aW5vIChzcC0+ZnRzX2N3 ZF9mZCk7Ci0tICBmcHJpbnRmIChzdHJlYW0sICI9PT0gJXMgPT09PT09PT09PSAiUFJJTlRfREVW SU5PIlxuIiwgbXNnLCBjd2QuZGV2LCBjd2QuaW5vKTsKLS0gIGlmIChpX3JpbmdfZW1wdHkgKGZk X3JpbmcpKQotLSAgICByZXR1cm47Ci0tCi0tICB1bnNpZ25lZCBpbnQgaSA9IGZkX3JpbmctPmly X2Zyb250OwotLSAgd2hpbGUgKHRydWUpCi0tICAgIHsKLS0gICAgICBpbnQgZmQgPSBmZF9yaW5n LT5pcl9kYXRhW2ldOwotLSAgICAgIGlmIChmZCA8IDApCi0tICAgICAgICBmcHJpbnRmIChzdHJl YW0sICIldTogJWQ6XG4iLCBpLCBmZCk7Ci0tICAgICAgZWxzZQotLSAgICAgICAgewotLSAgICAg ICAgICBzdHJ1Y3QgZGV2aW5vIHdkID0gZ2V0ZGV2aW5vIChmZCk7Ci0tICAgICAgICAgIGZwcmlu dGYgKHN0cmVhbSwgIiV1OiAlZDogIlBSSU5UX0RFVklOTyJcbiIsIGksIGZkLCB3ZC5kZXYsIHdk Lmlubyk7Ci0tICAgICAgICB9Ci0tICAgICAgaWYgKGkgPT0gZmRfcmluZy0+aXJfYmFjaykKLS0g ICAgICAgIGJyZWFrOwotLSAgICAgIGkgPSAoaSArIElfUklOR19TSVpFIC0gMSkgJSBJX1JJTkdf U0laRTsKLS0gICAgfQotLX0KLSsJLyogSWYgZGlkbid0IGZpbmQgYW55dGhpbmcsIHJldHVybiBO VUxMLiAqLwotKwlpZiAoIW5pdGVtcykgewotKwkJaWYgKHR5cGUgPT0gQlJFQUQpCi0rCQkJY3Vy LT5mdHNfaW5mbyA9IEZUU19EUDsKLSsJCWZ0c19sZnJlZShoZWFkKTsKLSsJCXJldHVybiAoTlVM TCk7Ci0rCX0KLSAKLS0vKiBFbnN1cmUgdGhhdCBlYWNoIGZpbGUgZGVzY3JpcHRvciBvbiB0aGUg ZmRfcmluZyBtYXRjaGVzIGEKLS0gICBwYXJlbnQsIGdyYW5kcGFyZW50LCBldGMuIG9mIHRoZSBj dXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgKi8KLS1zdGF0aWMgdm9pZAotLWZkX3JpbmdfY2hl Y2sgKEZUU09CSiBjb25zdCAqc3ApCi0tewotLSAgaWYgKCFmdHNfZGVidWcpCi0tICAgIHJldHVy bjsKLS0KLS0gIC8qIE1ha2UgYSB3cml0YWJsZSBjb3B5LiAgKi8KLS0gIElfcmluZyBmZF93ID0g c3AtPmZ0c19mZF9yaW5nOwotLQotLSAgaW50IGN3ZF9mZCA9IHNwLT5mdHNfY3dkX2ZkOwotLSAg Y3dkX2ZkID0gZmNudGwgKGN3ZF9mZCwgRl9EVVBGRF9DTE9FWEVDLCBTVERFUlJfRklMRU5PICsg MSk7Ci0tICBzdHJ1Y3QgZGV2aW5vIGRvdCA9IGdldGRldmlubyAoY3dkX2ZkKTsKLS0gIGZwcmlu dGYgKHN0ZGVyciwgIj09PT09IGNoZWNrID09PT09IGN3ZDogIlBSSU5UX0RFVklOTyJcbiIsCi0t ICAgICAgICAgICBkb3QuZGV2LCBkb3QuaW5vKTsKLS0gIHdoaWxlICggISBpX3JpbmdfZW1wdHkg KCZmZF93KSkKLS0gICAgewotLSAgICAgIGludCBmZCA9IGlfcmluZ19wb3AgKCZmZF93KTsKLS0g ICAgICBpZiAoMCA8PSBmZCkKLS0gICAgICAgIHsKLS0gICAgICAgICAgaW50IG9wZW5fZmxhZ3Mg PSBPX1NFQVJDSCB8IE9fQ0xPRVhFQzsKLS0gICAgICAgICAgaW50IHBhcmVudF9mZCA9IG9wZW5h dCAoY3dkX2ZkLCAiLi4iLCBvcGVuX2ZsYWdzKTsKLS0gICAgICAgICAgaWYgKHBhcmVudF9mZCA8 IDApCi0tICAgICAgICAgICAgewotLSAgICAgICAgICAgICAgLy8gV2Fybj8KLS0gICAgICAgICAg ICAgIGJyZWFrOwotLSAgICAgICAgICAgIH0KLS0gICAgICAgICAgaWYgKCFzYW1lX2ZkIChmZCwg cGFyZW50X2ZkKSkKLS0gICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aW5v IGN3ZCA9IGdldGRldmlubyAoZmQpOwotLSAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAi cmluZyAgOiAiUFJJTlRfREVWSU5PIlxuIiwgY3dkLmRldiwgY3dkLmlubyk7Ci0tICAgICAgICAg ICAgICBzdHJ1Y3QgZGV2aW5vIGMyID0gZ2V0ZGV2aW5vIChwYXJlbnRfZmQpOwotLSAgICAgICAg ICAgICAgZnByaW50ZiAoc3RkZXJyLCAicGFyZW50OiAiUFJJTlRfREVWSU5PIlxuIiwgYzIuZGV2 LCBjMi5pbm8pOwotLSAgICAgICAgICAgICAgZnRzX2Fzc2VydCAoMCk7Ci0tICAgICAgICAgICAg fQotLSAgICAgICAgICBjbG9zZSAoY3dkX2ZkKTsKLS0gICAgICAgICAgY3dkX2ZkID0gcGFyZW50 X2ZkOwotLSAgICAgICAgfQotLSAgICB9Ci0tICBjbG9zZSAoY3dkX2ZkKTsKLSsJLyogU29ydCB0 aGUgZW50cmllcy4gKi8KLSsJaWYgKHNwLT5mdHNfY29tcGFyICYmIG5pdGVtcyA+IDEpCi0rCQlo ZWFkID0gZnRzX3NvcnQoc3AsIGhlYWQsIG5pdGVtcyk7Ci0rCXJldHVybiAoaGVhZCk7Ci0gfQot LSNlbmRpZgotIAotLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbnQKLS1pbnRlcm5hbF9mdW5jdGlv bgotLWZ0c19zdGF0KEZUU09CSiAqc3AsIHJlZ2lzdGVyIEZUU0VOVFJZICpwLCBib29sIGZvbGxv dykKLStzdGF0aWMgdV9zaG9ydAotK2Z0c19zdGF0IChGVFNPQkogKnNwLCBGVFNFTlRSWSAqcCwg aW50IGZvbGxvdykKLSB7Ci0tICAgICAgICBpZiAoSVNTRVQgKEZUU19MT0dJQ0FMKQotLSAgICAg ICAgICAgIHx8IChJU1NFVCAoRlRTX0NPTUZPTExPVykgJiYgcC0+ZnRzX2xldmVsID09IEZUU19S T09UTEVWRUwpKQotLSAgICAgICAgICAgICAgICBmb2xsb3cgPSB0cnVlOwotLQotLSAgICAgICAg c3RydWN0IFNUUlVDVF9TVEFUICpzYnAgPSBwLT5mdHNfc3RhdHA7Ci0tCi0tICAgICAgICAvKgot LSAgICAgICAgICogSWYgZG9pbmcgYSBsb2dpY2FsIHdhbGssIG9yIGFwcGxpY2F0aW9uIHJlcXVl c3RlZCBGVFNfRk9MTE9XLCBkbwotLSAgICAgICAgICogYSBzdGF0KDIpLiAgSWYgdGhhdCBmYWls cywgY2hlY2sgZm9yIGEgbm9uZXhpc3RlbnQgc3ltbGluay4gIElmCi0tICAgICAgICAgKiBmYWls LCBzZXQgdGhlIGVycm5vIGZyb20gdGhlIHN0YXQgY2FsbC4KLS0gICAgICAgICAqLwotLSAgICAg ICAgaW50IGZsYWdzID0gZm9sbG93ID8gMCA6IEFUX1NZTUxJTktfTk9GT0xMT1c7Ci0tICAgICAg ICBpZiAoRlNUQVRBVCAoc3AtPmZ0c19jd2RfZmQsIHAtPmZ0c19hY2NwYXRoLCBzYnAsIGZsYWdz KSA8IDApCi0tICAgICAgICAgIHsKLS0gICAgICAgICAgICBpZiAoZm9sbG93ICYmIGVycm5vID09 IEVOT0VOVAotLSAgICAgICAgICAgICAgICAmJiAwIDw9IEZTVEFUQVQgKHNwLT5mdHNfY3dkX2Zk LCBwLT5mdHNfYWNjcGF0aCwgc2JwLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFUX1NZTUxJTktfTk9GT0xMT1cpKQotLSAgICAgICAgICAgICAgewotLSAgICAgICAgICAgICAg ICBfX3NldF9lcnJubyAoMCk7Ci0tICAgICAgICAgICAgICAgIHJldHVybiBGVFNfU0xOT05FOwot LSAgICAgICAgICAgICAgfQotLQotLSAgICAgICAgICAgIHAtPmZ0c19lcnJubyA9IGVycm5vOwot LSAgICAgICAgICAgbWVtc2V0IChzYnAsIDAsIHNpemVvZiAqc2JwKTsKLS0gICAgICAgICAgICBy ZXR1cm4gRlRTX05TOwotLSAgICAgICAgICB9Ci0tCi0tICAgICAgICBpZiAoU19JU0RJUihzYnAt PnN0X21vZGUpKSB7Ci0tICAgICAgICAgICAgICAgIGlmIChJU0RPVChwLT5mdHNfbmFtZSkpIHsK LS0gICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kLWxpbmUgIi4iIGFuZCAiLi4iIGFy ZSByZWFsIGRpcmVjdG9yaWVzLiAqLwotLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo cC0+ZnRzX2xldmVsID09IEZUU19ST09UTEVWRUwgPyBGVFNfRCA6IEZUU19ET1QpOwotLSAgICAg ICAgICAgICAgICB9Ci0tCi0tICAgICAgICAgICAgICAgIHJldHVybiAoRlRTX0QpOwotLSAgICAg ICAgfQotLSAgICAgICAgaWYgKFNfSVNMTksoc2JwLT5zdF9tb2RlKSkKLS0gICAgICAgICAgICAg ICAgcmV0dXJuIChGVFNfU0wpOwotLSAgICAgICAgaWYgKFNfSVNSRUcoc2JwLT5zdF9tb2RlKSkK LS0gICAgICAgICAgICAgICAgcmV0dXJuIChGVFNfRik7Ci0tICAgICAgICByZXR1cm4gKEZUU19E RUZBVUxUKTsKLS19Ci0rCUZUU0VOVFJZICp0OwotKwlkZXZfdCBkZXY7Ci0rCUlOT19UIGlubzsK LSsJc3RydWN0IFNUUlVDVF9TVEFUICpzYnAsIHNiOwotKwlpbnQgc2F2ZWRfZXJybm87Ci0rCi0r CS8qIElmIHVzZXIgbmVlZHMgc3RhdCBpbmZvLCBzdGF0IGJ1ZmZlciBhbHJlYWR5IGFsbG9jYXRl ZC4gKi8KLSsJc2JwID0gSVNTRVQoRlRTX05PU1RBVCkgPyAmc2IgOiBwLT5mdHNfc3RhdHA7Ci0r Ci0rI2lmIGRlZmluZWQgRlRTX1dISVRFT1VUICYmIDAKLSsJLyogY2hlY2sgZm9yIHdoaXRlb3V0 ICovCi0rCWlmIChwLT5mdHNfZmxhZ3MgJiBGVFNfSVNXKSB7Ci0rCQlpZiAoc2JwICE9ICZzYikg ewotKwkJCW1lbXNldChzYnAsICdcMCcsIHNpemVvZiAoKnNicCkpOwotKwkJCXNicC0+c3RfbW9k ZSA9IFNfSUZXSFQ7Ci0rCQl9Ci0rCQlyZXR1cm4gKEZUU19XKTsKLSsgICAgICAgfQotKyNlbmRp ZgotIAotLXN0YXRpYyBpbnQKLS1mdHNfY29tcGFyICh2b2lkIGNvbnN0ICphLCB2b2lkIGNvbnN0 ICpiKQotLXsKLS0gIC8qIENvbnZlcnQgQSBhbmQgQiB0byB0aGUgY29ycmVjdCB0eXBlcywgdG8g cGFjaWZ5IHRoZSBjb21waWxlciwgYW5kCi0tICAgICBmb3IgcG9ydGFiaWxpdHkgdG8gYml6YXJy ZSBob3N0cyB3aGVyZSAidm9pZCBjb25zdCAqIiBhbmQgIkZUU0VOVAotLSAgICAgY29uc3QgKioi IGRpZmZlciBpbiBydW50aW1lIHJlcHJlc2VudGF0aW9uLiAgVGhlIGNvbXBhcmlzb24KLS0gICAg IGZ1bmN0aW9uIGNhbm5vdCBtb2RpZnkgKmEgYW5kICpiLCBidXQgdGhlcmUgaXMgbm8gY29tcGls ZS10aW1lCi0tICAgICBjaGVjayBmb3IgdGhpcy4gICovCi0tICBGVFNFTlRSWSBjb25zdCAqKnBh ID0gKEZUU0VOVFJZIGNvbnN0ICoqKSBhOwotLSAgRlRTRU5UUlkgY29uc3QgKipwYiA9IChGVFNF TlRSWSBjb25zdCAqKikgYjsKLS0gIHJldHVybiBGVFNFTlRfRlRTKHBhWzBdKS0+ZnRzX2NvbXBh ciAocGEsIHBiKTsKLSsJLyoKLSsJICogSWYgZG9pbmcgYSBsb2dpY2FsIHdhbGssIG9yIGFwcGxp Y2F0aW9uIHJlcXVlc3RlZCBGVFNfRk9MTE9XLCBkbwotKwkgKiBhIHN0YXQoMikuICBJZiB0aGF0 IGZhaWxzLCBjaGVjayBmb3IgYSBub24tZXhpc3RlbnQgc3ltbGluay4gIElmCi0rCSAqIGZhaWws IHNldCB0aGUgZXJybm8gZnJvbSB0aGUgc3RhdCBjYWxsLgotKwkgKi8KLSsJaWYgKElTU0VUKEZU U19MT0dJQ0FMKSB8fCBmb2xsb3cpIHsKLSsJCWlmIChTVEFUKHAtPmZ0c19hY2NwYXRoLCBzYnAp KSB7Ci0rCQkJc2F2ZWRfZXJybm8gPSBlcnJubzsKLSsJCQlpZiAoIUxTVEFUKHAtPmZ0c19hY2Nw YXRoLCBzYnApKSB7Ci0rCQkJCV9fc2V0X2Vycm5vICgwKTsKLSsJCQkJcmV0dXJuIChGVFNfU0xO T05FKTsKLSsJCQl9Ci0rCQkJcC0+ZnRzX2Vycm5vID0gc2F2ZWRfZXJybm87Ci0rCQkJZ290byBl cnI7Ci0rCQl9Ci0rCX0gZWxzZSBpZiAoTFNUQVQocC0+ZnRzX2FjY3BhdGgsIHNicCkpIHsKLSsJ CXAtPmZ0c19lcnJubyA9IGVycm5vOwotK2VycjoJCW1lbXNldChzYnAsIDAsIHNpemVvZihzdHJ1 Y3QgU1RSVUNUX1NUQVQpKTsKLSsJCXJldHVybiAoRlRTX05TKTsKLSsJfQotKwotKwlpZiAoU19J U0RJUihzYnAtPnN0X21vZGUpKSB7Ci0rCQkvKgotKwkJICogU2V0IHRoZSBkZXZpY2UvaW5vZGUu ICBVc2VkIHRvIGZpbmQgY3ljbGVzIGFuZCBjaGVjayBmb3IKLSsJCSAqIGNyb3NzaW5nIG1vdW50 IHBvaW50cy4gIEFsc28gcmVtZW1iZXIgdGhlIGxpbmsgY291bnQsIHVzZWQKLSsJCSAqIGluIGZ0 c19idWlsZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHN0YXQgY2FsbHMuICBJdCBpcwotKwkJICog dW5kZXJzdG9vZCB0aGF0IHRoZXNlIGZpZWxkcyBhcmUgb25seSByZWZlcmVuY2VkIGlmIGZ0c19p bmZvCi0rCQkgKiBpcyBzZXQgdG8gRlRTX0QuCi0rCQkgKi8KLSsJCWRldiA9IHAtPmZ0c19kZXYg PSBzYnAtPnN0X2RldjsKLSsJCWlubyA9IHAtPmZ0c19pbm8gPSBzYnAtPnN0X2lubzsKLSsJCXAt PmZ0c19ubGluayA9IHNicC0+c3Rfbmxpbms7Ci0rCi0rCQlpZiAoSVNET1QocC0+ZnRzX25hbWUp KQotKwkJCXJldHVybiAoRlRTX0RPVCk7Ci0rCi0rCQkvKgotKwkJICogQ3ljbGUgZGV0ZWN0aW9u IGlzIGRvbmUgYnkgYnJ1dGUgZm9yY2Ugd2hlbiB0aGUgZGlyZWN0b3J5Ci0rCQkgKiBpcyBmaXJz dCBlbmNvdW50ZXJlZC4gIElmIHRoZSB0cmVlIGdldHMgZGVlcCBlbm91Z2ggb3IgdGhlCi0rCQkg KiBudW1iZXIgb2Ygc3ltYm9saWMgbGlua3MgdG8gZGlyZWN0b3JpZXMgaXMgaGlnaCBlbm91Z2gs Ci0rCQkgKiBzb21ldGhpbmcgZmFzdGVyIG1pZ2h0IGJlIHdvcnRod2hpbGUuCi0rCQkgKi8KLSsJ CWZvciAodCA9IHAtPmZ0c19wYXJlbnQ7Ci0rCQkgICAgdC0+ZnRzX2xldmVsID49IEZUU19ST09U TEVWRUw7IHQgPSB0LT5mdHNfcGFyZW50KQotKwkJCWlmIChpbm8gPT0gdC0+ZnRzX2lubyAmJiBk ZXYgPT0gdC0+ZnRzX2RldikgewotKwkJCQlwLT5mdHNfY3ljbGUgPSB0OwotKwkJCQlyZXR1cm4g KEZUU19EQyk7Ci0rCQkJfQotKwkJcmV0dXJuIChGVFNfRCk7Ci0rCX0KLSsJaWYgKFNfSVNMTkso c2JwLT5zdF9tb2RlKSkKLSsJCXJldHVybiAoRlRTX1NMKTsKLSsJaWYgKFNfSVNSRUcoc2JwLT5z dF9tb2RlKSkKLSsJCXJldHVybiAoRlRTX0YpOwotKwlyZXR1cm4gKEZUU19ERUZBVUxUKTsKLSB9 Ci0gCi0gc3RhdGljIEZUU0VOVFJZICoKLS1pbnRlcm5hbF9mdW5jdGlvbgotLWZ0c19zb3J0IChG VFNPQkogKnNwLCBGVFNFTlRSWSAqaGVhZCwgcmVnaXN0ZXIgc2l6ZV90IG5pdGVtcykKLStmdHNf c29ydCAoRlRTT0JKICpzcCwgRlRTRU5UUlkgKmhlYWQsIGludCBuaXRlbXMpCi0gewotLSAgICAg ICAgcmVnaXN0ZXIgRlRTRU5UUlkgKiphcCwgKnA7Ci0tCi0tICAgICAgICAvKiBPbiBtb3N0IG1v ZGVybiBob3N0cywgdm9pZCAqIGFuZCBGVFNFTlQgKiogaGF2ZSB0aGUgc2FtZQotLSAgICAgICAg ICAgcnVuLXRpbWUgcmVwcmVzZW50YXRpb24sIGFuZCBvbmUgY2FuIGNvbnZlcnQgc3AtPmZ0c19j b21wYXIgdG8KLS0gICAgICAgICAgIHRoZSB0eXBlIHFzb3J0IGV4cGVjdHMgd2l0aG91dCBwcm9i bGVtLiAgVXNlIHRoZSBoZXVyaXN0aWMgdGhhdAotLSAgICAgICAgICAgdGhpcyBpcyBPSyBpZiB0 aGUgdHdvIHBvaW50ZXIgdHlwZXMgYXJlIHRoZSBzYW1lIHNpemUsIGFuZCBpZgotLSAgICAgICAg ICAgY29udmVydGluZyBGVFNFTlQgKiogdG8gdWludHB0cl90IGlzIHRoZSBzYW1lIGFzIGNvbnZl cnRpbmcKLS0gICAgICAgICAgIEZUU0VOVCAqKiB0byB2b2lkICogYW5kIHRoZW4gdG8gdWludHB0 cl90LiAgVGhpcyBoZXVyaXN0aWMgaXNuJ3QKLS0gICAgICAgICAgIHZhbGlkIGluIGdlbmVyYWwg YnV0IHdlIGRvbid0IGtub3cgb2YgYW55IGNvdW50ZXJleGFtcGxlcy4gICovCi0tICAgICAgICBG VFNFTlRSWSAqZHVtbXk7Ci0tICAgICAgICBpbnQgKCpjb21wYXJlKSAodm9pZCBjb25zdCAqLCB2 b2lkIGNvbnN0ICopID0KLS0gICAgICAgICAgKChzaXplb2YgJmR1bW15ID09IHNpemVvZiAodm9p ZCAqKQotLSAgICAgICAgICAgICYmICh1aW50cHRyX3QpICZkdW1teSA9PSAodWludHB0cl90KSAo dm9pZCAqKSAmZHVtbXkpCi0tICAgICAgICAgICA/IChpbnQgKCopICh2b2lkIGNvbnN0ICosIHZv aWQgY29uc3QgKikpIHNwLT5mdHNfY29tcGFyCi0tICAgICAgICAgICA6IGZ0c19jb21wYXIpOwot LQotLSAgICAgICAgLyoKLS0gICAgICAgICAqIENvbnN0cnVjdCBhbiBhcnJheSBvZiBwb2ludGVy cyB0byB0aGUgc3RydWN0dXJlcyBhbmQgY2FsbCBxc29ydCgzKS4KLS0gICAgICAgICAqIFJlYXNz ZW1ibGUgdGhlIGFycmF5IGluIHRoZSBvcmRlciByZXR1cm5lZCBieSBxc29ydC4gIElmIHVuYWJs ZSB0bwotLSAgICAgICAgICogc29ydCBmb3IgbWVtb3J5IHJlYXNvbnMsIHJldHVybiB0aGUgZGly ZWN0b3J5IGVudHJpZXMgaW4gdGhlaXIKLS0gICAgICAgICAqIGN1cnJlbnQgb3JkZXIuICBBbGxv Y2F0ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBjdXJyZW50IG5lZWRzIHBsdXMKLS0gICAgICAgICAq IDQwIHNvIGRvbid0IHJlYWxsb2Mgb25lIGVudHJ5IGF0IGEgdGltZS4KLS0gICAgICAgICAqLwot LSAgICAgICAgaWYgKG5pdGVtcyA+IHNwLT5mdHNfbml0ZW1zKSB7Ci0tICAgICAgICAgICAgICAg IHNwLT5mdHNfbml0ZW1zID0gbml0ZW1zICsgNDA7Ci0tICAgICAgICAgICAgICAgIEZUU0VOVFJZ ICoqYTsKLS0gICAgICAgICAgICAgICAgaWYgKCEgKGEgPSByZWFsbG9jYXJyYXkgKHNwLT5mdHNf YXJyYXksCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcC0+ZnRz X25pdGVtcywgc2l6ZW9mICphKSkpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNw LT5mdHNfYXJyYXkpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIHNwLT5mdHNfYXJyYXkgPSBO VUxMOwotLSAgICAgICAgICAgICAgICAgICAgICAgIHNwLT5mdHNfbml0ZW1zID0gMDsKLS0gICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGhlYWQpOwotLSAgICAgICAgICAgICAgICB9Ci0t ICAgICAgICAgICAgICAgIHNwLT5mdHNfYXJyYXkgPSBhOwotLSAgICAgICAgfQotLSAgICAgICAg Zm9yIChhcCA9IHNwLT5mdHNfYXJyYXksIHAgPSBoZWFkOyBwOyBwID0gcC0+ZnRzX2xpbmspCi0t ICAgICAgICAgICAgICAgICphcCsrID0gcDsKLS0gICAgICAgIHFzb3J0KCh2b2lkICopc3AtPmZ0 c19hcnJheSwgbml0ZW1zLCBzaXplb2YoRlRTRU5UUlkgKiksIGNvbXBhcmUpOwotLSAgICAgICAg Zm9yIChoZWFkID0gKihhcCA9IHNwLT5mdHNfYXJyYXkpOyAtLW5pdGVtczsgKythcCkKLS0gICAg ICAgICAgICAgICAgYXBbMF0tPmZ0c19saW5rID0gYXBbMV07Ci0tICAgICAgICBhcFswXS0+ZnRz X2xpbmsgPSBOVUxMOwotLSAgICAgICAgcmV0dXJuIChoZWFkKTsKLSsJRlRTRU5UUlkgKiphcCwg KnA7Ci0rCi0rCS8qCi0rCSAqIENvbnN0cnVjdCBhbiBhcnJheSBvZiBwb2ludGVycyB0byB0aGUg c3RydWN0dXJlcyBhbmQgY2FsbCBxc29ydCgzKS4KLSsJICogUmVhc3NlbWJsZSB0aGUgYXJyYXkg aW4gdGhlIG9yZGVyIHJldHVybmVkIGJ5IHFzb3J0LiAgSWYgdW5hYmxlIHRvCi0rCSAqIHNvcnQg Zm9yIG1lbW9yeSByZWFzb25zLCByZXR1cm4gdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGluIHRoZWly Ci0rCSAqIGN1cnJlbnQgb3JkZXIuICBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBjdXJy ZW50IG5lZWRzIHBsdXMKLSsJICogNDAgc28gZG9uJ3QgcmVhbGxvYyBvbmUgZW50cnkgYXQgYSB0 aW1lLgotKwkgKi8KLSsJaWYgKG5pdGVtcyA+IHNwLT5mdHNfbml0ZW1zKSB7Ci0rCQlGVFNFTlRS WSAqKmE7Ci0rCi0rCQlzcC0+ZnRzX25pdGVtcyA9IG5pdGVtcyArIDQwOwotKwkJaWYgKChhID0g cmVhbGxvYyhzcC0+ZnRzX2FycmF5LAotKwkJICAgIChzaXplX3QpKHNwLT5mdHNfbml0ZW1zICog c2l6ZW9mKEZUU0VOVFJZICopKSkpID09IE5VTEwpIHsKLSsJCQlmcmVlKHNwLT5mdHNfYXJyYXkp OwotKwkJCXNwLT5mdHNfYXJyYXkgPSBOVUxMOwotKwkJCXNwLT5mdHNfbml0ZW1zID0gMDsKLSsJ CQlyZXR1cm4gKGhlYWQpOwotKwkJfQotKwkJc3AtPmZ0c19hcnJheSA9IGE7Ci0rCX0KLSsJZm9y IChhcCA9IHNwLT5mdHNfYXJyYXksIHAgPSBoZWFkOyBwOyBwID0gcC0+ZnRzX2xpbmspCi0rCQkq YXArKyA9IHA7Ci0rCXFzb3J0KCh2b2lkICopc3AtPmZ0c19hcnJheSwgbml0ZW1zLCBzaXplb2Yo RlRTRU5UUlkgKiksIHNwLT5mdHNfY29tcGFyKTsKLSsJZm9yIChoZWFkID0gKihhcCA9IHNwLT5m dHNfYXJyYXkpOyAtLW5pdGVtczsgKythcCkKLSsJCWFwWzBdLT5mdHNfbGluayA9IGFwWzFdOwot KwlhcFswXS0+ZnRzX2xpbmsgPSBOVUxMOwotKwlyZXR1cm4gKGhlYWQpOwotIH0KLSAKLSBzdGF0 aWMgRlRTRU5UUlkgKgotLWludGVybmFsX2Z1bmN0aW9uCi0tZnRzX2FsbG9jIChGVFNPQkogKnNw LCBjb25zdCBjaGFyICpuYW1lLCByZWdpc3RlciBzaXplX3QgbmFtZWxlbikKLStmdHNfYWxsb2Mg KEZUU09CSiAqc3AsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuKQotIHsKLS0gICAg ICAgIC8qCi0tICAgICAgICAgKiBUaGUgZmlsZSBuYW1lIGlzIGEgdmFyaWFibGUgbGVuZ3RoIGFy cmF5LiAgQWxsb2NhdGUgdGhlIEZUU0VOVAotLSAgICAgICAgICogc3RydWN0dXJlIGFuZCB0aGUg ZmlsZSBuYW1lIGluIG9uZSBjaHVuay4KLS0gICAgICAgICAqLwotLSAgICAgICAgc2l6ZV90IGxl biA9IEZMRVhTSVpFT0YoRlRTRU5ULCBmdHNfbmFtZSwgbmFtZWxlbiArIDEpOwotLQlyZWdpc3Rl ciBGVFNFTlRSWSAqcDsKLS0jaWYgIV9MSUJDCi0tICAgICAgICBwID0gbWFsbG9jKGxlbik7Ci0t ICAgICAgICBpZiAocCA9PSBOVUxMKQotLSAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOwot LSNlbHNlCi0rCUZUU0VOVFJZICpwOwotKwlzaXplX3QgbGVuOwotKwotIAkvKgotLQkgKiBGb3Ig Z2xpYmMsIHdlIHVzZSBhIHdyYXBwZXIgc3RydWN0IHRvIHByb3ZpZGUgdGhlIGV4dHJhIHJlcXVp cmVkCi0tCSAqIGZpZWxkcyB3aXRob3V0IGNoYW5naW5nIHRoZSBGU0VOVCBsYXlvdXQuCi0rCSAq IFRoZSBmaWxlIG5hbWUgaXMgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXkgYW5kIG5vIHN0YXQgc3Ry dWN0dXJlIGlzCi0rCSAqIG5lY2Vzc2FyeSBpZiB0aGUgdXNlciBoYXMgc2V0IHRoZSBub3N0YXQg Yml0LiAgQWxsb2NhdGUgdGhlIEZUU0VOVAotKwkgKiBzdHJ1Y3R1cmUsIHRoZSBmaWxlIG5hbWUg YW5kIHRoZSBzdGF0IHN0cnVjdHVyZSBpbiBvbmUgY2h1bmssIGJ1dAotKwkgKiBiZSBjYXJlZnVs IHRoYXQgdGhlIHN0YXQgc3RydWN0dXJlIGlzIHJlYXNvbmFibHkgYWxpZ25lZC4gIFNpbmNlIHRo ZQotKwkgKiBmdHNfbmFtZSBmaWVsZCBpcyBkZWNsYXJlZCB0byBiZSBvZiBzaXplIDEsIHRoZSBm dHNfbmFtZSBwb2ludGVyIGlzCi0rCSAqIG5hbWVsZW4gKyAyIGJlZm9yZSB0aGUgZmlyc3QgcG9z c2libGUgYWRkcmVzcyBvZiB0aGUgc3RhdCBzdHJ1Y3R1cmUuCi0gCSAqLwotLQlsZW4gKz0gc2l6 ZW9mIChzdHJ1Y3QgRlRTRU5UX3dyYXBwZXIpOwotLQlzdHJ1Y3QgRlRTRU5UX3dyYXBwZXIgKndy YXBwZXIgPSBtYWxsb2MobGVuKTsKLS0JaWYgKHdyYXBwZXIgPT0gTlVMTCkKLSsJbGVuID0gc2l6 ZW9mKEZUU0VOVFJZKSArIG5hbWVsZW47Ci0rCWlmICghSVNTRVQoRlRTX05PU1RBVCkpCi0rCQls ZW4gKz0gc2l6ZW9mKHN0cnVjdCBTVFJVQ1RfU1RBVCkgKyBBTElHTkJZVEVTOwotKwlpZiAoKHAg PSBtYWxsb2MobGVuKSkgPT0gTlVMTCkKLSAJCXJldHVybiAoTlVMTCk7Ci0tCXAgPSAmd3JhcHBl ci0+ZW50OwotLSAgICAgICAgcC0+ZnRzX3N0YXRwID0gJndyYXBwZXItPmZ0c19zdGF0OwotLSNl bmRpZgotIAotLSAgICAgICAgLyogQ29weSB0aGUgbmFtZSBhbmQgZ3VhcmFudGVlIE5VTCB0ZXJt aW5hdGlvbi4gKi8KLS0gICAgICAgIG1lbWNweShwLT5mdHNfbmFtZSwgbmFtZSwgbmFtZWxlbik7 Ci0tICAgICAgICBwLT5mdHNfbmFtZVtuYW1lbGVuXSA9ICdcMCc7Ci0tCi0tICAgICAgICBwLT5m dHNfbmFtZWxlbiA9IG5hbWVsZW47Ci0tICAgICAgICBGVFNFTlRfRlRTKHApPSBzcDsKLS0gICAg ICAgIHAtPmZ0c19wYXRoID0gc3AtPmZ0c19wYXRoOwotLSAgICAgICAgcC0+ZnRzX2Vycm5vID0g MDsKLS0gICAgICAgIEZUU0VOVF9ESVJQKHApID0gTlVMTDsKLS0gICAgICAgIHAtPmZ0c19mbGFn cyA9IDA7Ci0tICAgICAgICBwLT5mdHNfaW5zdHIgPSBGVFNfTk9JTlNUUjsKLS0gICAgICAgIHAt PmZ0c19udW1iZXIgPSAwOwotLSAgICAgICAgcC0+ZnRzX3BvaW50ZXIgPSBOVUxMOwotLSAgICAg ICAgcmV0dXJuIChwKTsKLSsJLyogQ29weSB0aGUgbmFtZSBhbmQgZ3VhcmFudGVlIE5VTCB0ZXJt aW5hdGlvbi4gKi8KLSsJbWVtbW92ZShwLT5mdHNfbmFtZSwgbmFtZSwgbmFtZWxlbik7Ci0rCXAt PmZ0c19uYW1lW25hbWVsZW5dID0gJ1wwJzsKLSsKLSsJaWYgKCFJU1NFVChGVFNfTk9TVEFUKSkK LSsJCXAtPmZ0c19zdGF0cCA9IChzdHJ1Y3QgU1RSVUNUX1NUQVQgKilBTElHTihwLT5mdHNfbmFt ZSArIG5hbWVsZW4gKyAyKTsKLSsJcC0+ZnRzX25hbWVsZW4gPSBuYW1lbGVuOwotKwlwLT5mdHNf cGF0aCA9IHNwLT5mdHNfcGF0aDsKLSsJcC0+ZnRzX2Vycm5vID0gMDsKLSsJcC0+ZnRzX2ZsYWdz ID0gMDsKLSsJcC0+ZnRzX2luc3RyID0gRlRTX05PSU5TVFI7Ci0rCXAtPmZ0c19udW1iZXIgPSAw OwotKwlwLT5mdHNfcG9pbnRlciA9IE5VTEw7Ci0rCXJldHVybiAocCk7Ci0gfQotIAotIHN0YXRp YyB2b2lkCi0taW50ZXJuYWxfZnVuY3Rpb24KLS1mdHNfbGZyZWUgKHJlZ2lzdGVyIEZUU0VOVFJZ ICpoZWFkKQotK2Z0c19sZnJlZSAoRlRTRU5UUlkgKmhlYWQpCi0gewotLSAgICAgICAgaW50IHNh dmVkX2Vycm5vID0gZXJybm87Ci0tCi0tICAgICAgICAvKiBGcmVlIGEgbGlua2VkIGxpc3Qgb2Yg c3RydWN0dXJlcy4gKi8KLS0gICAgICAgIHJlZ2lzdGVyIEZUU0VOVFJZICpwOwotLSAgICAgICAg d2hpbGUgKChwID0gaGVhZCkpIHsKLS0gICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQtPmZ0c19s aW5rOwotLSAgICAgICAgICAgICAgICBpZiAoRlRTRU5UX0RJUlAocCkpCi0tICAgICAgICAgICAg ICAgICAgICAgICAgY2xvc2VkaXIgKEZUU0VOVF9ESVJQKHApKTsKLS0gICAgICAgICAgICAgICAg ZnJlZShGVFNFTlRfV1JBUFBFUihwKSk7Ci0tICAgICAgICB9Ci0tCi0tICAgICAgICBfX3NldF9l cnJubyAoc2F2ZWRfZXJybm8pOwotKwlGVFNFTlRSWSAqcDsKLSsKLSsJLyogRnJlZSBhIGxpbmtl ZCBsaXN0IG9mIHN0cnVjdHVyZXMuICovCi0rCXdoaWxlICgocCA9IGhlYWQpKSB7Ci0rCQloZWFk ID0gaGVhZC0+ZnRzX2xpbms7Ci0rCQlmcmVlKHApOwotKwl9Ci0gfQotIAotIC8qCi0tICogQWxs b3cgZXNzZW50aWFsbHkgdW5saW1pdGVkIGZpbGUgbmFtZSBsZW5ndGhzOyBmaW5kLCBybSwgbHMg c2hvdWxkCi0tICogYWxsIHdvcmsgb24gYW55IHRyZWUuICBNb3N0IHN5c3RlbXMgd2lsbCBhbGxv dyBjcmVhdGlvbiBvZiBmaWxlCi0tICogbmFtZXMgbXVjaCBsb25nZXIgdGhhbiBNQVhQQVRITEVO LCBldmVuIHRob3VnaCB0aGUga2VybmVsIHdvbid0Ci0tICogcmVzb2x2ZSB0aGVtLiAgQWRkIHRo ZSBzaXplIChub3QganVzdCB3aGF0J3MgbmVlZGVkKSBwbHVzIDI1NiBieXRlcwotLSAqIHNvIGRv bid0IHJlYWxsb2MgdGhlIGZpbGUgbmFtZSAyIGJ5dGVzIGF0IGEgdGltZS4KLSsgKiBBbGxvdyBl c3NlbnRpYWxseSB1bmxpbWl0ZWQgcGF0aHM7IGZpbmQsIHJtLCBscyBzaG91bGQgYWxsIHdvcmsg b24gYW55IHRyZWUuCi0rICogTW9zdCBzeXN0ZW1zIHdpbGwgYWxsb3cgY3JlYXRpb24gb2YgcGF0 aHMgbXVjaCBsb25nZXIgdGhhbiBNQVhQQVRITEVOLCBldmVuCi0rICogdGhvdWdoIHRoZSBrZXJu ZWwgd29uJ3QgcmVzb2x2ZSB0aGVtLiAgQWRkIHRoZSBzaXplIChub3QganVzdCB3aGF0J3MgbmVl ZGVkKQotKyAqIHBsdXMgMjU2IGJ5dGVzIHNvIGRvbid0IHJlYWxsb2MgdGhlIHBhdGggMiBieXRl cyBhdCBhIHRpbWUuCi0gICovCi0tc3RhdGljIGJvb2wKLS1pbnRlcm5hbF9mdW5jdGlvbgotK3N0 YXRpYyBpbnQKLSBmdHNfcGFsbG9jIChGVFNPQkogKnNwLCBzaXplX3QgbW9yZSkKLSB7Ci0tICAg ICAgICBzaXplX3QgbmV3X2xlbiA9IHNwLT5mdHNfcGF0aGxlbiArIG1vcmUgKyAyNTY7Ci0tCi0t ICAgICAgICAvKgotLSAgICAgICAgICogU2VlIGlmIGZ0c19wYXRobGVuIHdvdWxkIG92ZXJmbG93 LgotLSAgICAgICAgICovCi0tICAgICAgICBpZiAobmV3X2xlbiA8IHNwLT5mdHNfcGF0aGxlbikg ewotLSAgICAgICAgICAgICAgICBmcmVlKHNwLT5mdHNfcGF0aCk7Ci0tICAgICAgICAgICAgICAg IHNwLT5mdHNfcGF0aCA9IE5VTEw7Ci0tICAgICAgICAgICAgICAgIF9fc2V0X2Vycm5vIChFTkFN RVRPT0xPTkcpOwotLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0tICAgICAgICB9Ci0t ICAgICAgICBzcC0+ZnRzX3BhdGhsZW4gPSBuZXdfbGVuOwotLSAgICAgICAgY2hhciAqcCA9IHJl YWxsb2Moc3AtPmZ0c19wYXRoLCBzcC0+ZnRzX3BhdGhsZW4pOwotLSAgICAgICAgaWYgKHAgPT0g TlVMTCkgewotLSAgICAgICAgICAgICAgICBmcmVlKHNwLT5mdHNfcGF0aCk7Ci0tICAgICAgICAg ICAgICAgIHNwLT5mdHNfcGF0aCA9IE5VTEw7Ci0tICAgICAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKLS0gICAgICAgIH0KLS0gICAgICAgIHNwLT5mdHNfcGF0aCA9IHA7Ci0tICAgICAgICByZXR1 cm4gdHJ1ZTsKLSsJY2hhciAqcDsKLSsKLSsJc3AtPmZ0c19wYXRobGVuICs9IG1vcmUgKyAyNTY7 Ci0rCS8qCi0rCSAqIENoZWNrIGZvciBwb3NzaWJsZSB3cmFwYXJvdW5kLiAgSW4gYW4gRlRTLCBm dHNfcGF0aGxlbiBpcwotKwkgKiBhIHNpZ25lZCBpbnQgYnV0IGluIGFuIEZUU0VOVCBpdCBpcyBh biB1bnNpZ25lZCBzaG9ydC4KLSsJICogV2UgbGltaXQgZnRzX3BhdGhsZW4gdG8gVVNIUlRfTUFY IHRvIGJlIHNhZmUgaW4gYm90aCBjYXNlcy4KLSsJICovCi0rCWlmIChzcC0+ZnRzX3BhdGhsZW4g PCAwIHx8IHNwLT5mdHNfcGF0aGxlbiA+PSBVU0hSVF9NQVgpIHsKLSsJCWZyZWUoc3AtPmZ0c19w YXRoKTsKLSsJCXNwLT5mdHNfcGF0aCA9IE5VTEw7Ci0rCQlfX3NldF9lcnJubyAoRU5BTUVUT09M T05HKTsKLSsJCXJldHVybiAoMSk7Ci0rCX0KLSsJcCA9IHJlYWxsb2Moc3AtPmZ0c19wYXRoLCBz cC0+ZnRzX3BhdGhsZW4pOwotKwlpZiAocCA9PSBOVUxMKSB7Ci0rCQlmcmVlKHNwLT5mdHNfcGF0 aCk7Ci0rCQlzcC0+ZnRzX3BhdGggPSBOVUxMOwotKwkJcmV0dXJuIDE7Ci0rCX0KLSsJc3AtPmZ0 c19wYXRoID0gcDsKLSsJcmV0dXJuIDA7Ci0gfQotIAotIC8qCi0tICogV2hlbiB0aGUgZmlsZSBu YW1lIGlzIHJlYWxsb2MnZCwgaGF2ZSB0byBmaXggYWxsIG9mIHRoZSBwb2ludGVycyBpbgotLSAq ICBzdHJ1Y3R1cmVzIGFscmVhZHkgcmV0dXJuZWQuCi0rICogV2hlbiB0aGUgcGF0aCBpcyByZWFs bG9jJ2QsIGhhdmUgdG8gZml4IGFsbCBvZiB0aGUgcG9pbnRlcnMgaW4gc3RydWN0dXJlcwotKyAq IGFscmVhZHkgcmV0dXJuZWQuCi0gICovCi0gc3RhdGljIHZvaWQKLS1pbnRlcm5hbF9mdW5jdGlv bgotIGZ0c19wYWRqdXN0IChGVFNPQkogKnNwLCBGVFNFTlRSWSAqaGVhZCkKLSB7Ci0tICAgICAg ICBjaGFyICphZGRyID0gc3AtPmZ0c19wYXRoOwotLQotLSAgICAgICAgLyogVGhpcyBjb2RlIGxv b2tzIGF0IGJpdC1wYXR0ZXJucyBvZiBmcmVlZCBwb2ludGVycyB0bwotLSAgICAgICAgICAgcmVs b2NhdGUgdGhlbSwgc28gaXQgcmVsaWVzIG9uIHVuZGVmaW5lZCBiZWhhdmlvci4gIElmIHRoaXMK LS0gICAgICAgICAgIHRyaWNrIGRvZXMgbm90IHdvcmsgb24geW91ciBwbGF0Zm9ybSwgcGxlYXNl IHJlcG9ydCBhIGJ1Zy4gICovCi0tCi0tI2RlZmluZSBBREpVU1QocCkgZG8geyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICAgICAgdWludHB0 cl90IG9sZF9hY2NwYXRoID0gKHVpbnRwdHJfdCkgKHApLT5mdHNfYWNjcGF0aDsgICAgICAgICAg IFwKLS0gICAgICAgIGlmIChvbGRfYWNjcGF0aCAhPSAodWludHB0cl90KSAocCktPmZ0c19uYW1l KSB7ICAgICAgICAgICAgICAgICBcCi0tICAgICAgICAgICAgICAgIChwKS0+ZnRzX2FjY3BhdGgg PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICAgICAgICAgICAg ICAgIGFkZHIgKyAob2xkX2FjY3BhdGggLSAodWludHB0cl90KSAocCktPmZ0c19wYXRoKTsgICAg IFwKLS0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0tICAgICAgICAocCktPmZ0c19wYXRoID0gYWRkcjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKwlGVFNFTlRSWSAqcDsK LSsJY2hhciAqYWRkciA9IHNwLT5mdHNfcGF0aDsKLSsKLSsjZGVmaW5lCUFESlVTVChwKSBkbyB7 CQkJCQkJCVwKLSsJaWYgKChwKS0+ZnRzX2FjY3BhdGggIT0gKHApLT5mdHNfbmFtZSkgewkJCVwK LSsJCShwKS0+ZnRzX2FjY3BhdGggPQkJCQkJXAotKwkJICAgIChjaGFyICopYWRkciArICgocCkt PmZ0c19hY2NwYXRoIC0gKHApLT5mdHNfcGF0aCk7CVwKLSsJfQkJCQkJCQkJXAotKwkocCktPmZ0 c19wYXRoID0gYWRkcjsJCQkJCQlcCi0gfSB3aGlsZSAoMCkKLS0gICAgICAgIC8qIEFkanVzdCB0 aGUgY3VycmVudCBzZXQgb2YgY2hpbGRyZW4uICovCi0tICAgICAgICBmb3IgKEZUU0VOVFJZICpw ID0gc3AtPmZ0c19jaGlsZDsgcDsgcCA9IHAtPmZ0c19saW5rKQotLSAgICAgICAgICAgICAgICBB REpVU1QocCk7Ci0tCi0tICAgICAgICAvKiBBZGp1c3QgdGhlIHJlc3Qgb2YgdGhlIHRyZWUsIGlu Y2x1ZGluZyB0aGUgY3VycmVudCBsZXZlbC4gKi8KLS0gICAgICAgIGZvciAoRlRTRU5UUlkgKnAg PSBoZWFkOyBwLT5mdHNfbGV2ZWwgPj0gRlRTX1JPT1RMRVZFTDspIHsKLS0gICAgICAgICAgICAg ICAgQURKVVNUKHApOwotLSAgICAgICAgICAgICAgICBwID0gcC0+ZnRzX2xpbmsgPyBwLT5mdHNf bGluayA6IHAtPmZ0c19wYXJlbnQ7Ci0tICAgICAgICB9Ci0rCS8qIEFkanVzdCB0aGUgY3VycmVu dCBzZXQgb2YgY2hpbGRyZW4uICovCi0rCWZvciAocCA9IHNwLT5mdHNfY2hpbGQ7IHA7IHAgPSBw LT5mdHNfbGluaykKLSsJCUFESlVTVChwKTsKLSsKLSsJLyogQWRqdXN0IHRoZSByZXN0IG9mIHRo ZSB0cmVlLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgbGV2ZWwuICovCi0rCWZvciAocCA9IGhlYWQ7 IHAtPmZ0c19sZXZlbCA+PSBGVFNfUk9PVExFVkVMOykgewotKwkJQURKVVNUKHApOwotKwkJcCA9 IHAtPmZ0c19saW5rID8gcC0+ZnRzX2xpbmsgOiBwLT5mdHNfcGFyZW50OwotKwl9Ci0gfQotIAot IHN0YXRpYyBzaXplX3QKLS1pbnRlcm5hbF9mdW5jdGlvbiBfR0xfQVRUUklCVVRFX1BVUkUKLSBm dHNfbWF4YXJnbGVuIChjaGFyICogY29uc3QgKmFyZ3YpCi0gewotLSAgICAgICAgc2l6ZV90IG1h eDsKLS0KLS0gICAgICAgIGZvciAobWF4ID0gMDsgKmFyZ3Y7ICsrYXJndikgewotLSAgICAgICAg ICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKCphcmd2KTsKLS0gICAgICAgICAgICAgICAgaWYg KGxlbiA+IG1heCkKLS0gICAgICAgICAgICAgICAgICAgICAgICBtYXggPSBsZW47Ci0tICAgICAg ICB9Ci0tICAgICAgICByZXR1cm4gKG1heCArIDEpOwotKwlzaXplX3QgbGVuLCBtYXg7Ci0rCi0r CWZvciAobWF4ID0gMDsgKmFyZ3Y7ICsrYXJndikKLSsJCWlmICgobGVuID0gc3RybGVuKCphcmd2 KSkgPiBtYXgpCi0rCQkJbWF4ID0gbGVuOwotKwlyZXR1cm4gKG1heCArIDEpOwotIH0KLSAKLSAv KgotLSAqIENoYW5nZSB0byBkaXIgc3BlY2lmaWVkIGJ5IGZkIG9yIGZpbGUgbmFtZSB3aXRob3V0 IGdldHRpbmcKLSsgKiBDaGFuZ2UgdG8gZGlyIHNwZWNpZmllZCBieSBmZCBvciBwLT5mdHNfYWNj cGF0aCB3aXRob3V0IGdldHRpbmcKLSAgKiB0cmlja2VkIGJ5IHNvbWVvbmUgY2hhbmdpbmcgdGhl IHdvcmxkIG91dCBmcm9tIHVuZGVybmVhdGggdXMuCi0tICogQXNzdW1lcyBwLT5mdHNfc3RhdHAt PnN0X2RldiBhbmQgcC0+ZnRzX3N0YXRwLT5zdF9pbm8gYXJlIGZpbGxlZCBpbi4KLS0gKiBJZiBG RCBpcyBub24tbmVnYXRpdmUsIGV4cGVjdCBpdCB0byBiZSB1c2VkIGFmdGVyIHRoaXMgZnVuY3Rp b24gcmV0dXJucywKLS0gKiBhbmQgdG8gYmUgY2xvc2VkIGV2ZW50dWFsbHkuICBTbyBkb24ndCBw YXNzIGUuZy4sICdkaXJmZChkaXJwKScgYW5kIHRoZW4KLS0gKiBkbyBjbG9zZWRpcihkaXJwKSwg YmVjYXVzZSB0aGF0IHdvdWxkIGludmFsaWRhdGUgdGhlIHNhdmVkIEZELgotLSAqIFVwb24gZmFp bHVyZSwgY2xvc2UgRkQgaW1tZWRpYXRlbHkgYW5kIHJldHVybiBub256ZXJvLgotKyAqIEFzc3Vt ZXMgcC0+ZnRzX2RldiBhbmQgcC0+ZnRzX2lubyBhcmUgZmlsbGVkIGluLgotICAqLwotIHN0YXRp YyBpbnQKLS1pbnRlcm5hbF9mdW5jdGlvbgotLWZ0c19zYWZlX2NoYW5nZWRpciAoRlRTT0JKICpz cCwgRlRTRU5UUlkgKnAsIGludCBmZCwgY2hhciBjb25zdCAqZGlyKQotK2Z0c19zYWZlX2NoYW5n ZWRpciAoRlRTT0JKICpzcCwgRlRTRU5UUlkgKnAsIGludCBmZCwgY29uc3QgY2hhciAqcGF0aCkK LSB7Ci0tICAgICAgICBmdHNfYXNzZXJ0ICgwIDw9IGZkIHx8IGRpciAhPSBOVUxMKTsKLS0gICAg ICAgIGJvb2wgaXNfZG90ZG90ID0gZGlyICYmIHN0cmVxIChkaXIsICIuLiIpOwotLQotLSAgICAg ICAgLyogVGhpcyBjbGF1c2UgaGFuZGxlcyB0aGUgdW51c3VhbCBjYXNlIGluIHdoaWNoIEZUU19O T0NIRElSCi0tICAgICAgICAgICBpcyBzcGVjaWZpZWQsIGFsb25nIHdpdGggRlRTX0NXREZELiAg SW4gdGhhdCBjYXNlLCB0aGVyZSBpcwotLSAgICAgICAgICAgbm8gbmVlZCB0byBjaGFuZ2UgZXZl biB0aGUgdmlydHVhbCBjd2QgZmlsZSBkZXNjcmlwdG9yLgotLSAgICAgICAgICAgSG93ZXZlciwg aWYgRkQgaXMgbm9uLW5lZ2F0aXZlLCB3ZSBkbyBjbG9zZSBpdCBoZXJlLiAgKi8KLS0gICAgICAg IGlmIChJU1NFVCAoRlRTX05PQ0hESVIpKQotLSAgICAgICAgICB7Ci0tICAgICAgICAgICAgaWYg KElTU0VUIChGVFNfQ1dERkQpICYmIDAgPD0gZmQpCi0tICAgICAgICAgICAgICBjbG9zZSAoZmQp OwotLSAgICAgICAgICAgIHJldHVybiAwOwotLSAgICAgICAgICB9Ci0tCi0tICAgICAgICBpZiAo ZmQgPCAwICYmIGlzX2RvdGRvdCAmJiBJU1NFVCAoRlRTX0NXREZEKSkKLS0gICAgICAgICAgewot LSAgICAgICAgICAgIC8qIFdoZW4gcG9zc2libGUsIHNraXAgdGhlIGRpcm9wZW4gYW5kIHN1YnNl cXVlbnQgZnN0YXQrZGV2L2lubwotLSAgICAgICAgICAgICAgIGNvbXBhcmlzb24uICBJLmUuLCB3 aGVuIGNoYW5naW5nIHRvIHBhcmVudCBkaXJlY3RvcnkKLS0gICAgICAgICAgICAgICAoY2hkaXIg KCIuLiIpKSwgdXNlIGEgZmlsZSBkZXNjcmlwdG9yIGZyb20gdGhlIHJpbmcgYW5kCi0tICAgICAg ICAgICAgICAgc2F2ZSB0aGUgb3ZlcmhlYWQgb2YgZGlyb3Blbitmc3RhdCwgYXMgd2VsbCBhcyBh dm9pZGluZwotLSAgICAgICAgICAgICAgIGZhaWx1cmUgd2hlbiB3ZSBsYWNrICJ4IiBhY2Nlc3Mg dG8gdGhlIHZpcnR1YWwgY3dkLiAgKi8KLS0gICAgICAgICAgICBpZiAoICEgaV9yaW5nX2VtcHR5 ICgmc3AtPmZ0c19mZF9yaW5nKSkKLS0gICAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAgICAg aW50IHBhcmVudF9mZDsKLS0gICAgICAgICAgICAgICAgZmRfcmluZ19wcmludCAoc3AsIHN0ZGVy ciwgInByZS1wb3AiKTsKLS0gICAgICAgICAgICAgICAgcGFyZW50X2ZkID0gaV9yaW5nX3BvcCAo JnNwLT5mdHNfZmRfcmluZyk7Ci0tICAgICAgICAgICAgICAgIGlmICgwIDw9IHBhcmVudF9mZCkK LS0gICAgICAgICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICAgICAgICBmZCA9IHBhcmVudF9m ZDsKLS0gICAgICAgICAgICAgICAgICAgIGRpciA9IE5VTEw7Ci0tICAgICAgICAgICAgICAgICAg fQotLSAgICAgICAgICAgICAgfQotLSAgICAgICAgICB9Ci0tCi0tICAgICAgICBpbnQgbmV3ZmQg PSBmZDsKLS0gICAgICAgIGlmIChmZCA8IDAgJiYgKG5ld2ZkID0gZGlyb3BlbiAoc3AsIGRpcikp IDwgMCkKLS0gICAgICAgICAgcmV0dXJuIC0xOwotLQotLSAgICAgICAgLyogVGhlIGZvbGxvd2lu ZyBkZXYvaW5vZGUgY2hlY2sgaXMgbmVjZXNzYXJ5IGlmIHdlJ3JlIGRvaW5nIGEKLS0gICAgICAg ICAgICJsb2dpY2FsIiB0cmF2ZXJzYWwgKHRocm91Z2ggc3ltbGlua3MsIGEgbGEgY2hvd24gLUwp LCBpZiB0aGUKLS0gICAgICAgICAgIHN5c3RlbSBsYWNrcyBPX05PRk9MTE9XIHN1cHBvcnQsIG9y IGlmIHdlJ3JlIGNoYW5naW5nIHRvICIuLiIKLS0gICAgICAgICAgIChidXQgbm90IHZpYSBhIHBv cHBlZCBmaWxlIGRlc2NyaXB0b3IpLiAgV2hlbiBjaGFuZ2luZyB0byB0aGUKLS0gICAgICAgICAg IG5hbWUgIi4uIiwgT19OT0ZPTExPVyBjYW4ndCBoZWxwLiAgSW4gZ2VuZXJhbCwgd2hlbiB0aGUg dGFyZ2V0IGlzCi0tICAgICAgICAgICBub3QgIi4uIiwgZGlyb3BlbidzIHVzZSBvZiBPX05PRk9M TE9XIGVuc3VyZXMgd2UgZG9uJ3QgbWlzdGFrZW5seQotLSAgICAgICAgICAgZm9sbG93IGEgc3lt bGluaywgc28gd2UgY2FuIGF2b2lkIHRoZSBleHBlbnNlIG9mIHRoaXMgZnN0YXQuICAqLwotLSAg ICAgICAgaW50IHJldDsKLS0gICAgICAgIGlmIChJU1NFVChGVFNfTE9HSUNBTCkgfHwgISBIQVZF X1dPUktJTkdfT19OT0ZPTExPVwotLSAgICAgICAgICAgIHx8IChkaXIgJiYgc3RyZXEgKGRpciwg Ii4uIikpKQotLSAgICAgICAgICB7Ci0tICAgICAgICAgICAgc3RydWN0IFNUUlVDVF9TVEFUIHNi OwotLSAgICAgICAgICAgIGlmIChGU1RBVCAobmV3ZmQsICZzYikpCi0tICAgICAgICAgICAgICB7 Ci0tICAgICAgICAgICAgICAgIHJldCA9IC0xOwotLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7 Ci0tICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAgaWYgKHAtPmZ0c19zdGF0cC0+c3RfZGV2 ICE9IHNiLnN0X2RldgotLSAgICAgICAgICAgICAgICB8fCBwLT5mdHNfc3RhdHAtPnN0X2lubyAh PSBzYi5zdF9pbm8pCi0tICAgICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICAgIF9fc2V0X2Vy cm5vIChFTk9FTlQpOyAgICAgICAgICAgLyogZGlzaW5mb3JtYXRpb24gKi8KLS0gICAgICAgICAg ICAgICAgcmV0ID0gLTE7Ci0tICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLS0gICAgICAgICAg ICAgIH0KLS0gICAgICAgICAgfQotLQotLSAgICAgICAgaWYgKElTU0VUKEZUU19DV0RGRCkpCi0t ICAgICAgICAgIHsKLS0gICAgICAgICAgICBjd2RfYWR2YW5jZV9mZCAoc3AsIG5ld2ZkLCAhIGlz X2RvdGRvdCk7Ci0tICAgICAgICAgICAgcmV0dXJuIDA7Ci0tICAgICAgICAgIH0KLS0KLS0gICAg ICAgIHJldCA9IGZjaGRpcihuZXdmZCk7Ci0rCWludCByZXQsIG9lcnJubywgbmV3ZmQ7Ci0rCXN0 cnVjdCBTVFJVQ1RfU1RBVCBzYjsKLSsKLSsJbmV3ZmQgPSBmZDsKLSsJaWYgKElTU0VUKEZUU19O T0NIRElSKSkKLSsJCXJldHVybiAoMCk7Ci0rCWlmIChmZCA8IDAgJiYgKG5ld2ZkID0gX19vcGVu KHBhdGgsIE9fUkRPTkxZLCAwKSkgPCAwKQotKwkJcmV0dXJuICgtMSk7Ci0rCWlmIChGU1RBVCAo bmV3ZmQsICZzYikpIHsKLSsJCXJldCA9IC0xOwotKwkJZ290byBiYWlsOwotKwl9Ci0rCWlmIChw LT5mdHNfZGV2ICE9IHNiLnN0X2RldiB8fCBwLT5mdHNfaW5vICE9IHNiLnN0X2lubykgewotKwkJ X19zZXRfZXJybm8gKEVOT0VOVCk7CQkvKiBkaXNpbmZvcm1hdGlvbiAqLwotKwkJcmV0ID0gLTE7 Ci0rCQlnb3RvIGJhaWw7Ci0rCX0KLSsJcmV0ID0gX19mY2hkaXIobmV3ZmQpOwotIGJhaWw6Ci0t ICAgICAgICBpZiAoZmQgPCAwKQotLSAgICAgICAgICB7Ci0tICAgICAgICAgICAgaW50IG9lcnJu byA9IGVycm5vOwotLSAgICAgICAgICAgICh2b2lkKWNsb3NlKG5ld2ZkKTsKLS0gICAgICAgICAg ICBfX3NldF9lcnJubyAob2Vycm5vKTsKLS0gICAgICAgICAgfQotLSAgICAgICAgcmV0dXJuIHJl dDsKLSsJb2Vycm5vID0gZXJybm87Ci0rCWlmIChmZCA8IDApCi0rCQkodm9pZClfX2Nsb3NlKG5l d2ZkKTsKLSsJX19zZXRfZXJybm8gKG9lcnJubyk7Ci0rCXJldHVybiAocmV0KTsKLSB9Ci1kaWZm IC0tZ2l0IGEvaW8vZnRzLmggYi9pby9mdHMuaAotaW5kZXggNTA2MzZlNmM4N2EzYTQ4ZC4uYjQ5 NmU3NWNlZWFiMGMzZSAxMDA2NDQKLS0tLSBhL2lvL2Z0cy5oCi0rKysgYi9pby9mdHMuaAotQEAg LTUyLDI5ICs1Miw3IEBACi0gCi0gI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0gI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgotLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotLSNpbmNsdWRlIDxkaXJlbnQuaD4K LS0jaW5jbHVkZSA8c3RkYm9vbC5oPgotIAotLWVudW0geyBfX0lfUklOR19TSVpFID0gNCB9Owot LQotLS8qIFdoZW4gaXJfZW1wdHkgaXMgdHJ1ZSwgdGhlIHJpbmcgaXMgZW1wdHkuCi0tICAgT3Ro ZXJ3aXNlLCBpcl9kYXRhW0IuLkZdIGFyZSBkZWZpbmVkLCB3aGVyZSBCLi5GIGlzIHRoZSBjb250 aWd1b3VzCi0tICAgcmFuZ2Ugb2YgaW5kaWNlcywgbW9kdWxvIElfUklOR19TSVpFLCBmcm9tIGJh Y2sgdG8gZnJvbnQsIGluY2x1c2l2ZS4KLS0gICBVbmRlZmluZWQgZWxlbWVudHMgb2YgaXJfZGF0 YSBhcmUgYWx3YXlzIHNldCB0byBpcl9kZWZhdWx0X3ZhbC4KLS0gICBQb3BwaW5nIGZyb20gYW4g ZW1wdHkgcmluZyBhYm9ydHMuCi0tICAgUHVzaGluZyBvbnRvIGEgZnVsbCByaW5nIHJldHVybnMg dGhlIGRpc3BsYWNlZCB2YWx1ZS4KLS0gICBBbiBlbXB0eSByaW5nIGhhcyBGPT1CIGFuZCBpcl9l bXB0eSA9PSB0cnVlLgotLSAgIEEgcmluZyB3aXRoIG9uZSBlbnRyeSBzdGlsbCBoYXMgRj09Qiwg YnV0IG5vdyBpcl9lbXB0eSA9PSBmYWxzZS4gICovCi0tc3RydWN0IF9fSV9yaW5nCi0tewotLSAg aW50IGlyX2RhdGFbX19JX1JJTkdfU0laRV07Ci0tICBpbnQgaXJfZGVmYXVsdF92YWw7Ci0tICB1 bnNpZ25lZCBpbnQgaXJfZnJvbnQ7Ci0tICB1bnNpZ25lZCBpbnQgaXJfYmFjazsKLS0gIGJvb2wg aXJfZW1wdHk7Ci0tfTsKLS10eXBlZGVmIHN0cnVjdCBfX0lfcmluZyBfX0lfcmluZzsKLSAKLSB0 eXBlZGVmIHN0cnVjdCB7Ci0gCXN0cnVjdCBfZnRzZW50ICpmdHNfY3VyOwkvKiBjdXJyZW50IG5v ZGUgKi8KLUBAIC05NSwxMDYgKzczLDExIEBAIHR5cGVkZWYgc3RydWN0IHsKLSAjZGVmaW5lCUZU U19TRUVET1QJMHgwMDIwCQkvKiByZXR1cm4gZG90IGFuZCBkb3QtZG90ICovCi0gI2RlZmluZQlG VFNfWERFVgkweDAwNDAJCS8qIGRvbid0IGNyb3NzIGRldmljZXMgKi8KLSAjZGVmaW5lIEZUU19X SElURU9VVAkweDAwODAJCS8qIHJldHVybiB3aGl0ZW91dCBpbmZvcm1hdGlvbiAqLwotLQotLSAg LyogVGhlcmUgYXJlIHR3byB3YXlzIHRvIGRldGVjdCBjeWNsZXMuCi0tICAgICBUaGUgbGF6eSB3 YXkgKHdoaWNoIHdvcmtzIG9ubHkgd2l0aCBGVFNfUEhZU0lDQUwpLAotLSAgICAgd2l0aCB3aGlj aCBvbmUgbWF5IHByb2Nlc3MgYSBkaXJlY3RvcnkgdGhhdCBpcyBhCi0tICAgICBwYXJ0IG9mIHRo ZSBjeWNsZSBzZXZlcmFsIHRpbWVzIGJlZm9yZSBkZXRlY3RpbmcgdGhlIGN5Y2xlLgotLSAgICAg VGhlICJ0aWdodCIgd2F5LCB3aGVyZWJ5IGZ0cyB1c2VzIG1vcmUgbWVtb3J5IChwcm9wb3J0aW9u YWwKLS0gICAgIHRvIG51bWJlciBvZiAiYWN0aXZlIiBkaXJlY3RvcmllcywgYWthIGRpc3RhbmNl IGZyb20gcm9vdAotLSAgICAgb2YgY3VycmVudCB0cmVlIHRvIGN1cnJlbnQgZGlyZWN0b3J5IC0t IHNlZSBhY3RpdmVfZGlyX2h0KQotLSAgICAgdG8gZGV0ZWN0IGFueSBjeWNsZSByaWdodCBhd2F5 LiAgRm9yIGV4YW1wbGUsIGR1IG11c3QgdXNlCi0tICAgICB0aGlzIG9wdGlvbiB0byBhdm9pZCBj b3VudGluZyBkaXNrIHNwYWNlIGluIGEgY3ljbGUgbXVsdGlwbGUKLS0gICAgIHRpbWVzLCBidXQg Y2hvd24gLVIgbmVlZCBub3QuCi0tICAgICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlIGNvbnN0 YW50LW1lbW9yeSBsYXp5IHdheSwgd2hlbiBwb3NzaWJsZQotLSAgICAgKHNlZSBiZWxvdykuCi0t Ci0tICAgICBIb3dldmVyLCB3aXRoIEZUU19MT0dJQ0FMICh3aGVuIGZvbGxvd2luZyBzeW1saW5r cywgZS5nLiwgY2hvd24gLUwpCi0tICAgICB1c2luZyBsYXp5IGN5Y2xlIGRldGVjdGlvbiBpcyBp bmFkZXF1YXRlLiAgRm9yIGV4YW1wbGUsIHRyYXZlcnNpbmcKLS0gICAgIGEgZGlyZWN0b3J5IGNv bnRhaW5pbmcgYSBzeW1ib2xpYyBsaW5rIHRvIGEgcGVlciBkaXJlY3RvcnksIGl0IGlzCi0tICAg ICBwb3NzaWJsZSB0byBlbmNvdW50ZXIgdGhlIHNhbWUgZGlyZWN0b3J5IHR3aWNlIGV2ZW4gdGhv dWdoIHRoZXJlCi0tICAgICBpcyBubyBjeWNsZToKLS0gICAgIGRpcgotLSAgICAgLi4uCi0tICAg ICBzbGluayAtPiBkaXIKLS0gICAgIFNvLCB3aGVuIEZUU19MT0dJQ0FMIGlzIHNlbGVjdGVkLCB3 ZSBoYXZlIHRvIHVzZSBhIGRpZmZlcmVudAotLSAgICAgbW9kZSBvZiBjeWNsZSBkZXRlY3Rpb246 IEZUU19USUdIVF9DWUNMRV9DSEVDSy4gICovCi0tI2RlZmluZSBGVFNfVElHSFRfQ1lDTEVfQ0hF Q0sJMHgwNDAwCi0tCi0tICAvKiBVc2UgdGhpcyBmbGFnIHRvIGVuYWJsZSBzZW1hbnRpY3Mgd2l0 aCB3aGljaCB0aGUgcGFyZW50Ci0tICAgICBhcHBsaWNhdGlvbiBtYXkgYmUgbWFkZSBib3RoIG1v cmUgZWZmaWNpZW50IGFuZCBtb3JlIHJvYnVzdC4KLS0gICAgIFdoZXJlYXMgdGhlIGRlZmF1bHQg aXMgdG8gdmlzaXQgZWFjaCBkaXJlY3RvcnkgaW4gYSByZWN1cnNpdmUKLS0gICAgIHRyYXZlcnNh bCAodmlhIGNoZGlyKSwgdXNpbmcgdGhpcyBmbGFnIG1ha2VzIGl0IHNvIHRoZSBpbml0aWFsCi0t ICAgICB3b3JraW5nIGRpcmVjdG9yeSBpcyBuZXZlciBjaGFuZ2VkLiAgSW5zdGVhZCwgdGhlc2Ug ZnVuY3Rpb25zCi0tICAgICBwZXJmb3JtIHRoZSB0cmF2ZXJzYWwgdmlhIGEgdmlydHVhbCB3b3Jr aW5nIGRpcmVjdG9yeSwgbWFpbnRhaW5lZAotLSAgICAgdGhyb3VnaCB0aGUgZmlsZSBkZXNjcmlw dG9yIG1lbWJlciwgZnRzX2N3ZF9mZC4gICovCi0tIyBkZWZpbmUgRlRTX0NXREZEICAgICAgICAg ICAgICAweDA4MDAKLS0KLS0gIC8qIEhpc3RvcmljYWxseSwgZm9yIGVhY2ggZGlyZWN0b3J5IHRo YXQgZnRzIGluaXRpYWxseSBlbmNvdW50ZXJzLCBpdCB3b3VsZAotLSAgICAgb3BlbiBpdCwgcmVh ZCBhbGwgZW50cmllcywgYW5kIHN0YXQgZWFjaCBlbnRyeSwgc3RvcmluZyB0aGUgcmVzdWx0cywg YW5kCi0tICAgICB0aGVuIGl0IHdvdWxkIHByb2Nlc3MgdGhlIGZpcnN0IGVudHJ5LiAgQnV0IHRo YXQgYmVoYXZpb3IgaXMgYmFkIGZvcgotLSAgICAgbG9jYWxpdHkgb2YgcmVmZXJlbmNlLCBhbmQg YWxzbyBjYXVzZXMgdHJvdWJsZSB3aXRoIGlub2RlLXNpbXVsYXRpbmcKLS0gICAgIGZpbGUgc3lz dGVtcyBsaWtlIEZBVCwgQ0lGUywgRlVTRS1iYXNlZCBvbmVzLCBldGMuLCB3aGVuIGVudHJpZXMg ZnJvbQotLSAgICAgdGhlaXIgbmFtZS9pbm9kZSBjYWNoZSBhcmUgZmx1c2hlZCB0b28gZWFybHku Ci0tICAgICBVc2UgdGhpcyBmbGFnIHRvIG1ha2UgZnRzX29wZW4gYW5kIGZ0c19yZWFkIGRlZmVy IHRoZSBzdGF0L2xzdGF0L2ZzdHN0YXQKLS0gICAgIG9mIGVhY2ggZW50cnkgdW50aWwgaXQgaXMg YWN0dWFsbHkgcHJvY2Vzc2VkLiAgSG93ZXZlciwgbm90ZSB0aGF0IGlmIHlvdQotLSAgICAgdXNl IHRoaXMgb3B0aW9uIGFuZCBhbHNvIHNwZWNpZnkgYSBjb21wYXJpc29uIGZ1bmN0aW9uLCB0aGF0 IGZ1bmN0aW9uIG1heQotLSAgICAgbm90IGV4YW1pbmUgYW55IGRhdGEgdmlhIGZ0c19zdGF0cC4g IEhvd2V2ZXIsIHdoZW4gZnRzX3N0YXRwLT5zdF9tb2RlIGlzCi0tICAgICBub256ZXJvLCB0aGUg U19JRk1UIHR5cGUgYml0cyBhcmUgdmFsaWQsIHdpdGggbWFwcGVkIGRpcmVudC5kX3R5cGUgZGF0 YS4KLS0gICAgIE9mIGNvdXJzZSwgdGhhdCBoYXBwZW5zIG9ubHkgb24gZmlsZSBzeXN0ZW1zIHRo YXQgcHJvdmlkZSB1c2VmdWwKLS0gICAgIGRpcmVudC5kX3R5cGUgZGF0YS4gICovCi0tI2RlZmlu ZSBGVFNfREVGRVJfU1RBVAkweDEwMDAKLS0KLS0gIC8qIFVzZSB0aGlzIGZsYWcgdG8gZGlzYWJs ZSBzdHJpcHBpbmcgb2YgdHJhaWxpbmcgc2xhc2hlcwotLSAgICAgZnJvbSBpbnB1dCBwYXRoIG5h bWVzIGR1cmluZyBmdHNfb3BlbiBpbml0aWFsaXphdGlvbi4gICovCi0tI2RlZmluZSBGVFNfVkVS QkFUSU0JMHgyMDAwCi0tCi0tI2RlZmluZSBGVFNfTU9VTlQgICAgICAgMHg0MDAwICAgICAgICAg IC8qIHNraXAgb3RoZXIgZGV2aWNlcyAqLwotLSNkZWZpbmUgRlRTX09QVElPTk1BU0sgIDB4N2Zm ZiAgICAgICAgICAvKiB2YWxpZCB1c2VyIG9wdGlvbiBtYXNrICovCi0rI2RlZmluZQlGVFNfT1BU SU9OTUFTSwkweDAwZmYJCS8qIHZhbGlkIHVzZXIgb3B0aW9uIG1hc2sgKi8KLSAKLSAjZGVmaW5l CUZUU19OQU1FT05MWQkweDAxMDAJCS8qIChwcml2YXRlKSBjaGlsZCBuYW1lcyBvbmx5ICovCi0g I2RlZmluZQlGVFNfU1RPUAkweDAyMDAJCS8qIChwcml2YXRlKSB1bnJlY292ZXJhYmxlIGVycm9y ICovCi0tCi0gCWludCBmdHNfb3B0aW9uczsJCS8qIGZ0c19vcGVuIG9wdGlvbnMsIGdsb2JhbCBm bGFncyAqLwotLQotLQlpbnQgZnRzX2N3ZF9mZDsgICAgICAgICAgICAgICAgIC8qIHRoZSBmaWxl IGRlc2NyaXB0b3Igb24gd2hpY2ggdGhlCi0tCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmlydHVhbCBjd2QgaXMgb3Blbiwgb3IgQVRfRkRDV0QgKi8KLS0KLS0JLyogTWFwIGEg ZGlyZWN0b3J5J3MgZGV2aWNlIG51bWJlciB0byBhIGJvb2xlYW4uICBUaGUgYm9vbGVhbiBpcwot LQkgICB0cnVlIGlmIGZvciB0aGF0IGZpbGUgc3lzdGVtICh0eXBlIGRldGVybWluZWQgYnkgYSBz aW5nbGUgZnN0YXRmcwotLQkgICBjYWxsIHBlciBGUykgc3RfbmxpbmsgY2FuIGJlIHVzZWQgdG8g Y2FsY3VsYXRlIHRoZSBudW1iZXIgb2YKLS0JICAgc3ViLWRpcmVjdG9yeSBlbnRyaWVzIGluIGEg ZGlyZWN0b3J5LgotLQkgICBVc2luZyB0aGlzIHRhYmxlIGlzIGFuIG9wdGltaXphdGlvbiB0aGF0 IHBlcm1pdHMgdXMgdG8gbG9vayB1cAotLQkgICBmaWxlIHN5c3RlbSB0eXBlIG9uIGEgcGVyLWlu b2RlIGJhc2lzIGF0IHRoZSBtaW5pbWFsIGNvc3Qgb2YKLS0JICAgY2FsbGluZyBmc3RhdGZzIG9u bHkgb25jZSBwZXIgdHJhdmVyc2VkIGRldmljZS4gICovCi0tCXN0cnVjdCBoYXNoX3RhYmxlICpm dHNfbGVhZl9vcHRpbWl6YXRpb25fd29ya3NfaHQ7Ci0tCi0tCXVuaW9uIHsKLS0JICAgICAgICAv KiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHVzZWQgaWYgRlRTX1RJR0hUX0NZQ0xFX0NIRUNLIGlz Ci0tCSAgICAgICAgICAgc3BlY2lmaWVkLiAgSXQgcmVjb3JkcyB0aGUgZGlyZWN0b3JpZXMgYmV0 d2VlbiBhIHN0YXJ0aW5nCi0tCSAgICAgICAgICAgcG9pbnQgYW5kIHRoZSBjdXJyZW50IGRpcmVj dG9yeS4gIEkuZS4sIGEgZGlyZWN0b3J5IGlzCi0tCSAgICAgICAgICAgcmVjb3JkZWQgaGVyZSBJ RkYgd2UgaGF2ZSB2aXNpdGVkIGl0IG9uY2UsIGJ1dCB3ZSBoYXZlIG5vdAotLQkgICAgICAgICAg IHlldCBjb21wbGV0ZWQgcHJvY2Vzc2luZyBvZiBhbGwgaXRzIGVudHJpZXMuICBFdmVyeSB0aW1l IHdlCi0tCSAgICAgICAgICAgdmlzaXQgYSBuZXcgZGlyZWN0b3J5LCB3ZSBhZGQgdGhhdCBkaXJl Y3RvcnkgdG8gdGhpcyBzZXQuCi0tCSAgICAgICAgICAgV2hlbiB3ZSBmaW5pc2ggd2l0aCBhIGRp cmVjdG9yeSAodXN1YWxseSBieSB2aXNpdGluZyBpdCBhCi0tCSAgICAgICAgICAgc2Vjb25kIHRp bWUpLCB3ZSByZW1vdmUgaXQgZnJvbSB0aGlzIHNldC4gIEVhY2ggZW50cnkgaW4KLS0JICAgICAg ICAgICB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIGEgZGV2aWNlL2lub2RlIHBhaXIuICBUaGlzIGRh dGEKLS0JICAgICAgICAgICBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZXRlY3QgZGlyZWN0b3J5IGN5 Y2xlcyBlZmZpY2llbnRseSBhbmQKLS0JICAgICAgICAgICBwcm9tcHRseSBldmVuIHdoZW4gdGhl IGRlcHRoIG9mIGEgaGllcmFyY2h5IGlzIGluIHRoZSB0ZW5zCi0tCSAgICAgICAgICAgb2YgdGhv dXNhbmRzLiAgKi8KLS0JICAgICAgICBzdHJ1Y3QgaGFzaF90YWJsZSAqaHQ7Ci0tCi0tCSAgICAg ICAgLyogRklYTUU6IHJlbmFtZSB0aGVzZSB0d28gbWVtYmVycyB0byBoYXZlIHRoZSBmdHNfIHBy ZWZpeCAqLwotLQkgICAgICAgIC8qIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgdXNlcyBhIGxhenkgY3lj bGUtZGV0ZWN0aW9uIGFsZ29yaXRobSwKLS0JICAgICAgICAgICBhcyBkb25lIGJ5IHJtIHZpYSBj eWNsZS1jaGVjay5jLiAgSXQncyB0aGUgZGVmYXVsdCwKLS0JICAgICAgICAgICBidXQgaXQncyBu b3QgYXBwcm9wcmlhdGUgZm9yIHByb2dyYW1zIGxpa2UgZHUuICAqLwotLQkgICAgICAgIHN0cnVj dCBjeWNsZV9jaGVja19zdGF0ZSAqc3RhdGU7Ci0tCX0gZnRzX2N5Y2xlOwotLQotLQkvKiBBIHN0 YWNrIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3JzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0tCSAgIG1v c3QtcmVjZW50bHkgdHJhdmVyc2VkIHBhcmVudCBkaXJlY3Rvcmllcy4KLS0JICAgQ3VycmVudGx5 IHVzZWQgb25seSBpbiBGVFNfQ1dERkQgbW9kZS4gICovCi0tCV9fSV9yaW5nIGZ0c19mZF9yaW5n OwotIH0gRlRTOwotIAotICNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAotQEAgLTIwOSwxMyArOTIs NiBAQCB0eXBlZGVmIHN0cnVjdCB7Ci0gCWludCBmdHNfbml0ZW1zOwkJCS8qIGVsZW1lbnRzIGlu IHRoZSBzb3J0IGFycmF5ICovCi0gCWludCAoKmZ0c19jb21wYXIpIChjb25zdCB2b2lkICosIGNv bnN0IHZvaWQgKik7IC8qIGNvbXBhcmUgZm4gKi8KLSAJaW50IGZ0c19vcHRpb25zOwkJLyogZnRz X29wZW4gb3B0aW9ucywgZ2xvYmFsIGZsYWdzICovCi0tCWludCBmdHNfY3dkX2ZkOwotLQlzdHJ1 Y3QgaGFzaF90YWJsZSAqZnRzX2xlYWZfb3B0aW1pemF0aW9uX3dvcmtzX2h0OwotLQl1bmlvbiB7 Ci0tCSAgICAgICAgc3RydWN0IGhhc2hfdGFibGUgKmh0OwotLQkgICAgICAgIHN0cnVjdCBjeWNs ZV9jaGVja19zdGF0ZSAqc3RhdGU7Ci0tCX0gZnRzX2N5Y2xlOwotLQlfX0lfcmluZyBmdHNfZmRf cmluZzsKLSB9IEZUUzY0OwotICNlbmRpZgotIAotZGlmZiAtLWdpdCBhL2lvL2Z0czY0LXRpbWU2 NC5jIGIvaW8vZnRzNjQtdGltZTY0LmMKLWluZGV4IDZhMTA1MzE5NGVlYzUxYmEuLmY5YmFkNjA1 NzI2MDVkY2IgMTAwNjQ0Ci0tLS0gYS9pby9mdHM2NC10aW1lNjQuYwotKysrIGIvaW8vZnRzNjQt dGltZTY0LmMKLUBAIC0xOSwxOSArMTksMTggQEAKLSAjaW5jbHVkZSA8dGltZS5oPgotIAotICNp ZiBfX1RJTUVTSVpFICE9IDY0Ci0tIyBkZWZpbmUgRlRTX09QRU4gICAgICAgICAgIF9fZnRzNjRf b3Blbl90aW1lNjQKLS0jIGRlZmluZSBGVFNfQ0xPU0UgICAgICAgICAgX19mdHM2NF9jbG9zZV90 aW1lNjQKLS0jIGRlZmluZSBGVFNfUkVBRCAgICAgICAgICAgX19mdHM2NF9yZWFkX3RpbWU2NAot LSMgZGVmaW5lIEZUU19TRVQgICAgICAgICAgICBfX2Z0czY0X3NldF90aW1lNjQKLS0jIGRlZmlu ZSBGVFNfQ0hJTERSRU4gICAgICAgX19mdHM2NF9jaGlsZHJlbl90aW1lNjQKLS0jIGRlZmluZSBG VFNPQkogICAgICAgICAgICAgRlRTNjRfVElNRTY0Ci0tIyBkZWZpbmUgRlRTRU5UUlkgICAgICAg ICAgIEZTVEVOVDY0X1RJTUU2NAotLSMgZGVmaW5lIElOT19UICAgICAgICAgICAgICBpbm82NF90 Ci0tIyBkZWZpbmUgU1RSVUNUX1NUQVQgICAgICAgIF9fc3RhdDY0X3Q2NAotLSMgZGVmaW5lIEZT VEFUICAgICAgICAgICAgICBfX2ZzdGF0NjRfdGltZTY0Ci0tIyBkZWZpbmUgRlNUQVRBVCAgICAg ICAgICAgIF9fZnN0YXRhdDY0X3RpbWU2NAotLSMgZGVmaW5lIFNUUlVDVF9TVEFURlMgICAgICBz dGF0ZnM2NAotLSMgZGVmaW5lIEZTVEFURlMgICAgICAgICAgICBfX2ZzdGF0ZnM2NAotKyMgZGVm aW5lIEZUU19PUEVOIF9fZnRzNjRfb3Blbl90aW1lNjQKLSsjIGRlZmluZSBGVFNfQ0xPU0UgX19m dHM2NF9jbG9zZV90aW1lNjQKLSsjIGRlZmluZSBGVFNfUkVBRCBfX2Z0czY0X3JlYWRfdGltZTY0 Ci0rIyBkZWZpbmUgRlRTX1NFVCBfX2Z0czY0X3NldF90aW1lNjQKLSsjIGRlZmluZSBGVFNfQ0hJ TERSRU4gX19mdHM2NF9jaGlsZHJlbl90aW1lNjQKLSsjIGRlZmluZSBGVFNPQkogRlRTNjRfVElN RTY0Ci0rIyBkZWZpbmUgRlRTRU5UUlkgRlNURU5UNjRfVElNRTY0Ci0rIyBkZWZpbmUgSU5PX1Qg aW5vNjRfdAotKyMgZGVmaW5lIFNUUlVDVF9TVEFUIF9fc3RhdDY0X3Q2NAotKyMgZGVmaW5lIFNU QVQgX19zdGF0NjRfdGltZTY0Ci0rIyBkZWZpbmUgTFNUQVQgX19sc3RhdDY0X3RpbWU2NAotKyMg ZGVmaW5lIEZTVEFUIF9fZnN0YXQ2NF90aW1lNjQKLSAKLSAjIGluY2x1ZGUgImZ0cy5jIgotICNl bmRpZgotZGlmZiAtLWdpdCBhL2lvL2Z0czY0LmMgYi9pby9mdHM2NC5jCi1pbmRleCBhNmY2MDdh ODczODNmNGE3Li4xNTI5MTAwMThlMjYxMDQ5IDEwMDY0NAotLS0tIGEvaW8vZnRzNjQuYwotKysr IGIvaW8vZnRzNjQuYwotQEAgLTI1LDkgKzI1LDggQEAKLSAjZGVmaW5lIEZUU0VOVFJZIEZUU0VO VDY0Ci0gI2RlZmluZSBJTk9fVCBpbm82NF90Ci0gI2RlZmluZSBTVFJVQ1RfU1RBVCBzdGF0NjQK LSsjZGVmaW5lIFNUQVQgX19zdGF0NjQKLSsjZGVmaW5lIExTVEFUIF9fbHN0YXQ2NAotICNkZWZp bmUgRlNUQVQgX19mc3RhdDY0Ci0tI2RlZmluZSBGU1RBVEFUIF9fZnN0YXRhdDY0Ci0tI2RlZmlu ZSBTVFJVQ1RfU1RBVEZTIHN0YXRmczY0Ci0tI2RlZmluZSBGU1RBVEZTIF9fZnN0YXRmczY0Ci0g Ci0gI2luY2x1ZGUgImZ0cy5jIgotZGlmZiAtLWdpdCBhL2lvL2ktcmluZy5jIGIvaW8vaS1yaW5n LmMKLWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggYjRlNDc5MDRkZDFhZjRlNS4uMDAw MDAwMDAwMDAwMDAwMAotLS0tIGEvaW8vaS1yaW5nLmMKLSsrKyAvZGV2L251bGwKLUBAIC0xLDcy ICswLDAgQEAKLS0vKiBhIHNpbXBsZSByaW5nIGJ1ZmZlcgotLSAgIENvcHlyaWdodCAoQykgMjAw NiwgMjAwOS0yMDI2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotLQotLSAgIFRoaXMg ZmlsZSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5Ci0tICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMKLS0gICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQotLSAgIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0tCi0tICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0tICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLS0gICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCi0tICAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCi0tCi0tICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0tICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLS0KLS0v KiB3cml0dGVuIGJ5IEppbSBNZXllcmluZyAqLwotLQotLSNpbmNsdWRlIDxjb25maWcuaD4KLS0j aWYgIV9MSUJDCi0tIyBpbmNsdWRlICJpLXJpbmcuaCIKLS0jIGRlZmluZSBJTlRFUk5BTF9ERUYK LS0jZWxzZQotLSMgZGVmaW5lIElfcmluZyBfX0lfcmluZwotLSMgZGVmaW5lIElfUklOR19TSVpF IF9fSV9SSU5HX1NJWkUKLS0jZW5kaWYKLS0KLS0jaW5jbHVkZSA8c3RkbGliLmg+Ci0tCi0tSU5U RVJOQUxfREVGIHZvaWQKLS1pX3JpbmdfaW5pdCAoSV9yaW5nICppciwgaW50IGRlZmF1bHRfdmFs KQotLXsKLS0gIGlyLT5pcl9lbXB0eSA9IHRydWU7Ci0tICBpci0+aXJfZnJvbnQgPSAwOwotLSAg aXItPmlyX2JhY2sgPSAwOwotLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBJX1JJTkdfU0laRTsgaSsr KQotLSAgICBpci0+aXJfZGF0YVtpXSA9IGRlZmF1bHRfdmFsOwotLSAgaXItPmlyX2RlZmF1bHRf dmFsID0gZGVmYXVsdF92YWw7Ci0tfQotLQotLUlOVEVSTkFMX0RFRiBib29sCi0taV9yaW5nX2Vt cHR5IChJX3JpbmcgY29uc3QgKmlyKQotLXsKLS0gIHJldHVybiBpci0+aXJfZW1wdHk7Ci0tfQot LQotLUlOVEVSTkFMX0RFRiBpbnQKLS1pX3JpbmdfcHVzaCAoSV9yaW5nICppciwgaW50IHZhbCkK LS17Ci0tICB1bnNpZ25lZCBpbnQgZGVzdF9pZHggPSAoaXItPmlyX2Zyb250ICsgIWlyLT5pcl9l bXB0eSkgJSBJX1JJTkdfU0laRTsKLS0gIGludCBvbGRfdmFsID0gaXItPmlyX2RhdGFbZGVzdF9p ZHhdOwotLSAgaXItPmlyX2RhdGFbZGVzdF9pZHhdID0gdmFsOwotLSAgaXItPmlyX2Zyb250ID0g ZGVzdF9pZHg7Ci0tICBpZiAoZGVzdF9pZHggPT0gaXItPmlyX2JhY2spCi0tICAgIGlyLT5pcl9i YWNrID0gKGlyLT5pcl9iYWNrICsgIWlyLT5pcl9lbXB0eSkgJSBJX1JJTkdfU0laRTsKLS0gIGly LT5pcl9lbXB0eSA9IGZhbHNlOwotLSAgcmV0dXJuIG9sZF92YWw7Ci0tfQotLQotLUlOVEVSTkFM X0RFRiBpbnQKLS1pX3JpbmdfcG9wIChJX3JpbmcgKmlyKQotLXsKLS0gIGlmIChpX3JpbmdfZW1w dHkgKGlyKSkKLS0gICAgYWJvcnQgKCk7Ci0tICBpbnQgdG9wX3ZhbCA9IGlyLT5pcl9kYXRhW2ly LT5pcl9mcm9udF07Ci0tICBpci0+aXJfZGF0YVtpci0+aXJfZnJvbnRdID0gaXItPmlyX2RlZmF1 bHRfdmFsOwotLSAgaWYgKGlyLT5pcl9mcm9udCA9PSBpci0+aXJfYmFjaykKLS0gICAgaXItPmly X2VtcHR5ID0gdHJ1ZTsKLS0gIGVsc2UKLS0gICAgaXItPmlyX2Zyb250ID0gKChpci0+aXJfZnJv bnQgKyBJX1JJTkdfU0laRSAtIDEpICUgSV9SSU5HX1NJWkUpOwotLSAgcmV0dXJuIHRvcF92YWw7 Ci0tfQotZGlmZiAtLWdpdCBhL2lvL3NhbWUtaW5vZGUuaCBiL2lvL3NhbWUtaW5vZGUuaAotZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCA0NGI2ZjNlZDg0ZTQyZThjLi4wMDAwMDAwMDAw MDAwMDAwCi0tLS0gYS9pby9zYW1lLWlub2RlLmgKLSsrKyAvZGV2L251bGwKLUBAIC0xLDEwNiAr MCwwIEBACi0tLyogRGV0ZXJtaW5lIHdoZXRoZXIgdHdvIHN0YXQgYnVmZmVycyBhcmUga25vd24g dG8gcmVmZXIgdG8gdGhlIHNhbWUgZmlsZS4KLS0KLS0gICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw MDktMjAyNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLS0KLS0gICBUaGlzIGZpbGUg aXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQot LSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzCi0tICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKLS0gICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgotLQotLSAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotLSAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQot LSAgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot LQotLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0tCi0tI2lmbmRl ZiBTQU1FX0lOT0RFX0gKLS0jZGVmaW5lIFNBTUVfSU5PREVfSCAxCi0tCi0tLyogVGhpcyBmaWxl IHVzZXMgX0dMX0lOTElORV9IRUFERVJfQkVHSU4sIF9HTF9JTkxJTkUuICAqLwotLSNpZiAhX0xJ QkMgJiYgIV9HTF9DT05GSUdfSF9JTkNMVURFRAotLSAjZXJyb3IgIlBsZWFzZSBpbmNsdWRlIGNv bmZpZy5oIGZpcnN0LiIKLS0jZW5kaWYKLS0KLS0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLS0jaWYg X0xJQkMKLS0jIGRlZmluZSBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTgotLSMgZGVmaW5lIF9HTF9J TkxJTkVfSEVBREVSX0VORAotLSMgZGVmaW5lIFNBTUVfSU5PREVfSU5MSU5FIHN0YXRpYyBpbmxp bmUKLS0jIGRlZmluZSBTX1RZUEVJU1RNTyhwKSAwCi0tI2VuZGlmCi0tCi0tX0dMX0lOTElORV9I RUFERVJfQkVHSU4KLS0jaWZuZGVmIFNBTUVfSU5PREVfSU5MSU5FCi0tIyBkZWZpbmUgU0FNRV9J Tk9ERV9JTkxJTkUgX0dMX0lOTElORQotLSNlbmRpZgotLQotLSNpZmRlZiBfX2NwbHVzcGx1cwot LWV4dGVybiAiQyIgewotLSNlbmRpZgotLQotLQotLS8qIFRydWUgaWYgQSBhbmQgQiBwb2ludCB0 byBzdHJ1Y3RzIHdpdGggc3RfZGV2IGFuZCBzdF9pbm8gbWVtYmVycwotLSAgIHRoYXQgYXJlIGtu b3duIHRvIHJlcHJlc2VudCB0aGUgc2FtZSBmaWxlLgotLQotLSAgIFVzZSB8IGFuZCBeIHRvIHNo b3J0ZW4gZ2VuZXJhdGVkIGNvZGUsIGFuZCB0byBsZXNzZW4gdGhlCi0tICAgcHJvYmFiaWxpdHkg b2Ygc2NyZXd1cHMgaWYgc3RfaW5vIGlzIGFuIGFycmF5LiAgKi8KLS0KLS0jaWYgZGVmaW5lZCBf X1ZNUyAmJiBfX0NSVExfVkVSIDwgODAyMDAwMDAKLS0jIGRlZmluZSBQU0FNRV9JTk9ERShhLCBi KSAoISAoKChhKS0+c3RfZGV2IF4gKGIpLT5zdF9kZXYpIFwKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAoKGEpLT5zdF9pbm9bMF0gXiAoYiktPnN0X2lub1swXSkgXAotLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgoYSktPnN0X2lub1sxXSBeIChiKS0+c3RfaW5v WzFdKSBcCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChhKS0+c3RfaW5vWzJd IF4gKGIpLT5zdF9pbm9bMl0pKSkKLS0jZWxpZiBkZWZpbmVkIF9XSU4zMiAmJiAhIGRlZmluZWQg X19DWUdXSU5fXwotLSAgLyogTmF0aXZlIFdpbmRvd3MuICAqLwotLSMgaWYgX0dMX1dJTkRPV1Nf U1RBVF9JTk9ERVMKLS0gIC8qIHN0YXQoKSBhbmQgZnN0YXQoKSBzZXQgc3RfZGV2IGFuZCBzdF9p bm8gdG8gMCBpZiBpbmZvcm1hdGlvbiBhYm91dAotLSAgICAgdGhlIGlub2RlIGlzIG5vdCBhdmFp bGFibGUuICAqLwotLSMgIGlmIF9HTF9XSU5ET1dTX1NUQVRfSU5PREVTID09IDIKLS0jICAgZGVm aW5lIFBTQU1FX0lOT0RFKGEsIGIpIFwKLS0gICAgICghICghICgoYSktPnN0X2RldiB8IChhKS0+ c3RfaW5vLl9nbF9pbm9bMF0gfCAoYSktPnN0X2luby5fZ2xfaW5vWzFdKSBcCi0tICAgICAgICAg fCAoKGEpLT5zdF9kZXYgXiAoYiktPnN0X2RldikgXAotLSAgICAgICAgIHwgKChhKS0+c3RfaW5v Ll9nbF9pbm9bMF0gXiAoYiktPnN0X2luby5fZ2xfaW5vWzBdKSBcCi0tICAgICAgICAgfCAoKGEp LT5zdF9pbm8uX2dsX2lub1sxXSBeIChiKS0+c3RfaW5vLl9nbF9pbm9bMV0pKSkKLS0jICBlbHNl Ci0tIyAgIGRlZmluZSBQU0FNRV9JTk9ERShhLCBiKSAoISAoISAoKGEpLT5zdF9kZXYgfCAoYSkt PnN0X2lubykgXAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChhKS0+c3Rf ZGV2IF4gKGIpLT5zdF9kZXYpIFwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICgoYSktPnN0X2lubyBeIChiKS0+c3RfaW5vKSkpCi0tIyAgZW5kaWYKLS0jIGVsc2UKLS0gIC8q IHN0YXQoKSBhbmQgZnN0YXQoKSBzZXQgc3RfaW5vIHRvIDAgYWx3YXlzLiAgKi8KLS0jICBkZWZp bmUgUFNBTUVfSU5PREUoYSwgYikgMAotLSMgZW5kaWYKLS0jZWxzZQotLSAgLyogUE9TSVguICAq LwotLSMgZGVmaW5lIFBTQU1FX0lOT0RFKGEsIGIpICghICgoKGEpLT5zdF9kZXYgXiAoYiktPnN0 X2RldikgXAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgoYSktPnN0X2lubyBe IChiKS0+c3RfaW5vKSkpCi0tI2VuZGlmCi0tCi0tLyogVHJ1ZSBpZiBzdHJ1Y3Qgb2JqZWN0cyBB IGFuZCBCIGFyZSBrbm93biB0byByZXByZXNlbnQgdGhlIHNhbWUgZmlsZS4gICovCi0tCi0tI2Rl ZmluZSBTQU1FX0lOT0RFKGEsIGIpIFBTQU1FX0lOT0RFICgmKGEpLCAmKGIpKQotLQotLS8qIFRy dWUgaWYgKkEgYW5kICpCIHJlcHJlc2VudCB0aGUgc2FtZSBmaWxlLiAgVW5saWtlIFBTQU1FX0lO T0RFLAotLSAgIGFyZ3MgYXJlIGV2YWx1YXRlZCBvbmNlIGFuZCBtdXN0IHBvaW50IHRvIHN0cnVj dCBzdGF0LAotLSAgIGFuZCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGV2ZW4gb24gUE9TSVggcGxhdGZv cm1zIHdoZXJlIGZzdGF0IGV0Yy4gZG8KLS0gICBub3QgcmV0dXJuIHVzZWZ1bCBzdF9kZXYgYW5k IHN0X2lubyB2YWx1ZXMgZm9yIHNoYXJlZCBtZW1vcnkKLS0gICBvYmplY3RzIGFuZCB0eXBlZCBt ZW1vcnkgb2JqZWN0cy4gICovCi0tCi0tU0FNRV9JTk9ERV9JTkxJTkUgYm9vbAotLXBzYW1lX2lu b2RlIChzdHJ1Y3Qgc3RhdCBjb25zdCAqYSwgc3RydWN0IHN0YXQgY29uc3QgKmIpCi0tewotLSAg cmV0dXJuICghIChTX1RZUEVJU1NITSAoYSkgfCBTX1RZUEVJU1RNTyAoYSkKLS0gICAgICAgICAg ICAgfCBTX1RZUEVJU1NITSAoYikgfCBTX1RZUEVJU1RNTyAoYikpCi0tICAgICAgICAgICYmIFBT QU1FX0lOT0RFIChhLCBiKSk7Ci0tfQotLQotLQotLSNpZmRlZiBfX2NwbHVzcGx1cwotLX0KLS0j ZW5kaWYKLS0KLS1fR0xfSU5MSU5FX0hFQURFUl9FTkQKLS0KLS0jZW5kaWYKLWRpZmYgLS1naXQg YS9pby90c3QtZnRzLWJ6MjI5NDQuYyBiL2lvL3RzdC1mdHMtYnoyMjk0NC5jCi1kZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKLWluZGV4IDdmODYwNDUyMzQ5YjNjOWUuLjAwMDAwMDAwMDAwMDAwMDAK LS0tLSBhL2lvL3RzdC1mdHMtYnoyMjk0NC5jCi0rKysgL2Rldi9udWxsCi1AQCAtMSwxMDAgKzAs MCBAQAotLS8qIENoZWNrIHRoYXQgZnRzIGRvZXMgbm90IGZhaWwgd2l0aCB2ZXJ5IGxvbmcgcGF0 aHMuCi0tICAgQ29weXJpZ2h0IChDKSAyMDI2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgotLSAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgotLQotLSAgIFRo ZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vcgotLSAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKLS0gICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLS0gICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLS0KLS0gICBUaGUgR05VIEMg TGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLS0gICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotLQotLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLS0gICBMaWNlbnNlIGFsb25n IHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCi0tICAgPGh0dHBzOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4gICovCi0tCi0tI2luY2x1ZGUgPGZ0cy5oPgotLSNpbmNsdWRlIDxl cnJuby5oPgotLSNpbmNsdWRlIDxzdGRpby5oPgotLSNpbmNsdWRlIDxzdXBwb3J0L2NoZWNrLmg+ Ci0tI2luY2x1ZGUgPHN1cHBvcnQvdGVtcF9maWxlLmg+Ci0tI2luY2x1ZGUgPHN1cHBvcnQveHVu aXN0ZC5oPgotLQotLSNkZWZpbmUgQkFTRU5BTUUgInRzdC1mdHMtYnoyMjk0NC4iCi0tCi0tZW51 bSB7IG5lc3RlZF9kZXB0aCA9IDE1MCB9OwotLXN0YXRpYyBjb25zdCBjaGFyIGRpcl9uYW1lW10g PSB7IFswIC4uLiAyNTRdID0gJ0EnLCAnXDAnIH07Ci0tCi0tc3RhdGljIHZvaWQKLS1kb19jbGVh bnVwICh2b2lkKQotLXsKLS0gIHhjaGRpciAoIi4uIik7Ci0tICBmb3IgKGludCBpID0gMDsgaSA8 IG5lc3RlZF9kZXB0aDsgaSsrKQotLSAgICB7Ci0tICAgICAgcmVtb3ZlIChkaXJfbmFtZSk7Ci0t ICAgICAgeGNoZGlyICgiLi4iKTsKLS0gICAgfQotLSAgcmVtb3ZlIChkaXJfbmFtZSk7Ci0tfQot LSNkZWZpbmUgQ0xFQU5VUF9IQU5ETEVSIGRvX2NsZWFudXAKLS0KLS1zdGF0aWMgdm9pZAotLWNo ZWNrX21rZGlyIChjb25zdCBjaGFyICpwYXRoKQotLXsKLS0gIGludCByID0gbWtkaXIgKHBhdGgs IDA3MDApOwotLSAgLyogU29tZSBmaWxlc3lzdGVtIHN1Y2ggYXMgb3ZlcmxheWZzIGRvZXMgbm90 IHN1cHBvcnQgbGFyZ2VyIHBhdGggcmVxdWlyZWQKLS0gICAgIHRvIHRyaWdnZXIgdGhlIGludGVy bmFsIGJ1ZmZlciByZWFsbG9jYXRpb24uICAqLwotLSAgaWYgKHIgIT0gMCkKLS0gICAgewotLSAg ICAgIGlmIChlcnJubyA9PSBFTkFNRVRPT0xPTkcpCi0tCUZBSUxfVU5TVVBQT1JURUQgKCJ0aGUg ZmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCIKLS0JCQkgICJsYXJnZSBw YXRoIik7Ci0tICAgICAgZWxzZQotLQlGQUlMX0VYSVQxICgibWtkaXIgKFwiJXNcIiwgMCVvKTog JW0iLCBwYXRoLCAwNzAwKTsKLS0gICAgfQotLX0KLS0KLS1pbnQKLS1kb190ZXN0ICh2b2lkKQot LXsKLS0gIGNoYXIgKnRlbXBkaXIgPSBzdXBwb3J0X2NyZWF0ZV90ZW1wX2RpcmVjdG9yeSAoQkFT RU5BTUUpOwotLSAgeGNoZGlyICh0ZW1wZGlyKTsKLS0gIGZvciAoaW50IGkgPSAwOyBpIDwgbmVz dGVkX2RlcHRoOyBpKyspCi0tICAgIHsKLS0gICAgICBjaGVja19ta2RpciAoZGlyX25hbWUpOwot LSAgICAgIHhjaGRpciAoZGlyX25hbWUpOwotLSAgICB9Ci0tCi0tICBjaGFyICpwYXRoc1tdID0g eyB0ZW1wZGlyICwgMCB9OwotLSAgRlRTICpmdHNwID0gZnRzX29wZW4gKHBhdGhzLCBGVFNfWERF ViB8IEZUU19DT01GT0xMT1cgfCBGVFNfUEhZU0lDQUwsIDApOwotLSAgVEVTVF9WRVJJRllfRVhJ VCAoZnRzcCAhPSBOVUxMKTsKLS0KLS0gIGludCBudW1fZGlycyA9IDA7Ci0tCi0tICBGVFNFTlQg KmVudDsKLS0gIHdoaWxlICgoZW50ID0gZnRzX3JlYWQoZnRzcCkpICE9IDApCi0tICAgIHsKLS0g ICAgICBzd2l0Y2ggKGVudC0+ZnRzX2luZm8pCi0tCXsKLS0JY2FzZSBGVFNfRDoKLS0JICBudW1f ZGlycysrOwotLQkgIGJyZWFrOwotLQlkZWZhdWx0OgotLQkgIGJyZWFrOwotLQl9Ci0tICAgIH0K LS0KLS0gIFRFU1RfQ09NUEFSRSAobnVtX2RpcnMsIG5lc3RlZF9kZXB0aCArIDEpOwotLSAgVEVT VF9DT01QQVJFIChlcnJubywgMCk7Ci0tCi0tICBmdHNfY2xvc2UgKGZ0c3ApOwotLQotLSAgZG9f Y2xlYW51cCAoKTsKLS0KLS0gIHJldHVybiAwOwotLX0KLS0KLS0jaW5jbHVkZSA8c3VwcG9ydC90 ZXN0LWRyaXZlci5jPgotZGlmZiAtLWdpdCBhL2lvL3RzdC1mdHMtbmV3ZmxhZ3MuYyBiL2lvL3Rz dC1mdHMtbmV3ZmxhZ3MuYwotZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCBhNDA1NjEy NjhiYjU1OTE0Li4wMDAwMDAwMDAwMDAwMDAwCi0tLS0gYS9pby90c3QtZnRzLW5ld2ZsYWdzLmMK LSsrKyAvZGV2L251bGwKLUBAIC0xLDIzNCArMCwwIEBACi0tLyogU2ltcGxlIHRlc3RzIGZvciBz b21lIGdudWxpYiBpbXBvcnRlZCBmdHMgZmVhdHVyZXMuCi0tICAgQ29weXJpZ2h0IChDKSAyMDI2 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotLSAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IHRoZSBHTlUgQyBMaWJyYXJ5LgotLQotLSAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotLSAgIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLS0gICBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLS0g ICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KLS0KLS0gICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK LS0gICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotLQot LSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKLS0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlm IG5vdCwgc2VlCi0tICAgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0tCi0t I2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGZ0cy5oPgotLSNpbmNsdWRlIDxzdGRib29s Lmg+Ci0tI2luY2x1ZGUgPHN0ZGlvLmg+Ci0tI2luY2x1ZGUgPHN0ZGxpYi5oPgotLSNpbmNsdWRl IDxmY250bC5oPgotLSNpbmNsdWRlIDxzdHJpbmcuaD4KLS0jaW5jbHVkZSA8c3VwcG9ydC9jaGVj ay5oPgotLSNpbmNsdWRlIDxzdXBwb3J0L3N1cHBvcnQuaD4KLS0jaW5jbHVkZSA8c3VwcG9ydC90 ZW1wX2ZpbGUuaD4KLS0jaW5jbHVkZSA8c3VwcG9ydC94dW5pc3RkLmg+Ci0tCi0tc3RhdGljIGNo YXIgKnRlbXBkaXI7Ci0tCi0tc3RhdGljIHZvaWQKLS1kb19wcmVwYXJlIChpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCi0tewotLSAgdGVtcGRpciA9IHN1cHBvcnRfY3JlYXRlX3RlbXBfZGlyZWN0b3J5 ICgidHN0LWZ0cy1uZXdmbGFncyIpOwotLQotLSAgLyogQ3JlYXRlIGRpcmVjdG9yeSB0cmVlOgot LSAgICAgdGVtcGRpci9kaXIKLS0gICAgIHRlbXBkaXIvZGlyL2ZpbGUKLS0gICAgIHRlbXBkaXIv ZGlyL3N5bWxpbmsgLT4gdGVtcGRpciAgIChjeWNsZSkgICovCi0tICBjaGFyICpwYXRoOwotLQot LSAgcGF0aCA9IHhhc3ByaW50ZiAoIiVzL2RpciIsIHRlbXBkaXIpOwotLSAgeG1rZGlyIChwYXRo LCAwNzc3KTsKLS0gIGFkZF90ZW1wX2ZpbGUgKHBhdGgpOwotLSAgZnJlZSAocGF0aCk7Ci0tCi0t ICBwYXRoID0geGFzcHJpbnRmICgiJXMvZGlyL2ZpbGUiLCB0ZW1wZGlyKTsKLS0gIGludCBmZCA9 IHhvcGVuIChwYXRoLCBPX0NSRUFUIHwgT19SRFdSLCAwNjY2KTsKLS0gIHhjbG9zZSAoZmQpOwot LSAgYWRkX3RlbXBfZmlsZSAocGF0aCk7Ci0tICBmcmVlIChwYXRoKTsKLS0KLS0gIHBhdGggPSB4 YXNwcmludGYgKCIlcy9kaXIvc3ltbGluayIsIHRlbXBkaXIpOwotLSAgeHN5bWxpbmsgKHRlbXBk aXIsIHBhdGgpOwotLSAgYWRkX3RlbXBfZmlsZSAocGF0aCk7Ci0tICBmcmVlIChwYXRoKTsKLS19 Ci0tI2RlZmluZSBQUkVQQVJFIGRvX3ByZXBhcmUKLS0KLS0vKiBGVFNfVElHSFRfQ1lDTEVfQ0hF Q0s6ICB3ZSB1c2UgRlRTX0xPR0lDQUwgdG8gZm9sbG93IHRoZSBzeW1saW5rIHdlCi0tICAgY3Jl YXRlZCwgY2F1c2luZyBhIGxvb3AuICBUaGUgdGlnaHQgY3ljbGUgY2hlY2tlciBzaG91bGQgY2F0 Y2ggdGhpcwotLSAgIGltbWVkaWF0ZWx5IGFuZCBlbWl0IEZUU19EQy4gICovCi0tc3RhdGljIHZv aWQKLS10ZXN0X3RpZ2h0X2N5Y2xlICh2b2lkKQotLXsKLS0gIGNoYXIgKnBhdGhzW10gPSB7IHRl bXBkaXIsIE5VTEwgfTsKLS0gIEZUUyAqZnRzID0gZnRzX29wZW4gKHBhdGhzLCBGVFNfTE9HSUNB TCB8IEZUU19USUdIVF9DWUNMRV9DSEVDSywgTlVMTCk7Ci0tICBURVNUX1ZFUklGWV9FWElUIChm dHMgIT0gTlVMTCk7Ci0tCi0tICBGVFNFTlQgKmVudDsKLS0gIGJvb2wgZm91bmRfY3ljbGUgPSBm YWxzZTsKLS0gIHdoaWxlICgoZW50ID0gZnRzX3JlYWQgKGZ0cykpICE9IE5VTEwpCi0tICAgIHsK LS0gICAgICBpZiAoZW50LT5mdHNfaW5mbyA9PSBGVFNfREMpCi0tICAgICAgICB7Ci0tICAgICAg ICAgIGZvdW5kX2N5Y2xlID0gdHJ1ZTsKLS0gICAgICAgICAgYnJlYWs7Ci0tICAgICAgICB9Ci0t ICAgIH0KLS0gIFRFU1RfVkVSSUZZIChmb3VuZF9jeWNsZSk7Ci0tICBmdHNfY2xvc2UgKGZ0cyk7 Ci0tfQotLQotLS8qIEZUU19DV0RGRDogZW5zdXJlcyB0aGF0IGZ0cyB1c2VzIHZpcnR1YWwgZmls ZSBkZXNjcmlwdG9ycyBhbmQgZG9lcyBub3QKLS0gICBhY3R1YWxseSBjaGFuZ2UgdGhlIHByb2Nl c3MncyBnbG9iYWwgd29ya2luZyBkaXJlY3RvcnkuICAqLwotLXN0YXRpYyB2b2lkCi0tdGVzdF9j d2RmZCAodm9pZCkKLS17Ci0tICBjaGFyICpwYXRoc1tdID0geyB0ZW1wZGlyLCBOVUxMIH07Ci0t ICBGVFMgKmZ0cyA9IGZ0c19vcGVuIChwYXRocywgRlRTX1BIWVNJQ0FMIHwgRlRTX0NXREZELCBO VUxMKTsKLS0gIFRFU1RfVkVSSUZZX0VYSVQgKGZ0cyAhPSBOVUxMKTsKLS0KLS0gIGNoYXIgKmN3 ZF9iZWZvcmUgPSBnZXRjd2QgKE5VTEwsIDApOwotLSAgVEVTVF9WRVJJRllfRVhJVCAoY3dkX2Jl Zm9yZSAhPSBOVUxMKTsKLS0KLS0gIEZUU0VOVCAqZW50OwotLSAgd2hpbGUgKChlbnQgPSBmdHNf cmVhZCAoZnRzKSkgIT0gTlVMTCkKLS0gICAgewotLSAgICB9Ci0tCi0tICBjaGFyICpjd2RfYWZ0 ZXIgPSBnZXRjd2QgKE5VTEwsIDApOwotLSAgVEVTVF9WRVJJRllfRVhJVCAoY3dkX2FmdGVyICE9 IE5VTEwpOwotLQotLSAgLyogSWYgRlRTX0NXREZEIHdvcmtzLCB0aGUgZ2xvYmFsIENXRCByZW1h aW5zIHVudG91Y2hlZC4gICovCi0tICBURVNUX0NPTVBBUkVfU1RSSU5HIChjd2RfYmVmb3JlLCBj d2RfYWZ0ZXIpOwotLQotLSAgZnJlZSAoY3dkX2JlZm9yZSk7Ci0tICBmcmVlIChjd2RfYWZ0ZXIp OwotLSAgZnRzX2Nsb3NlIChmdHMpOwotLX0KLS0KLS0vKiBGVFNfREVGRVJfU1RBVDogdmVyaWZp ZXMgdGhhdCBkZWZlcnJpbmcgdGhlIHN0YXQgY2FsbHMgZG9lcyBub3QgYnJlYWsKLS0gICBzdGFu ZGFyZCBwaHlzaWNhbCB0cmVlIHRyYXZlcnNhbHMuICAqLwotLXN0YXRpYyB2b2lkCi0tdGVzdF9k ZWZlcl9zdGF0ICh2b2lkKQotLXsKLS0gIGNoYXIgKnBhdGhzW10gPSB7IHRlbXBkaXIsIE5VTEwg fTsKLS0gIEZUUyAqZnRzID0gZnRzX29wZW4gKHBhdGhzLCBGVFNfUEhZU0lDQUwgfCBGVFNfREVG RVJfU1RBVCwgTlVMTCk7Ci0tICBURVNUX1ZFUklGWV9FWElUIChmdHMgIT0gTlVMTCk7Ci0tCi0t ICBGVFNFTlQgKmVudDsKLS0gIGludCBjb3VudCA9IDA7Ci0tICB3aGlsZSAoKGVudCA9IGZ0c19y ZWFkIChmdHMpKSAhPSBOVUxMKQotLSAgICB7Ci0tICAgICAgY291bnQrKzsKLS0gICAgfQotLQot LSAgLyogRXhwZWN0czoKLS0KLS0gICAgIDE6ICR0bXBkaXIKLS0gICAgIDI6ICR0bXBkaXIvZGly Ci0tICAgICAzOiAkdG1wZGlyL2Rpci9maWxlCi0tICAgICA0OiAkdG1wZGlyL2Rpci9zeW1saW5r Ci0tICAgICA1OiAkdG1wZGlyL2Rpci8KLS0gICAgIDY6ICR0bXBkaXIvICAqLwotLSAgVEVTVF9D T01QQVJFIChjb3VudCwgNik7Ci0tICBmdHNfY2xvc2UgKGZ0cyk7Ci0tfQotLQotLS8qIEZUU19N T1VOVDogdmFsaWRhdGVzIHRoYXQgdGhlIHRyYXZlcnNhbCByZWZ1c2VzIHRvIGNyb3NzIGludG8g YSBkaWZmZXJlbnQKLS0gICBmaWxlIHN5c3RlbSB3aGVuIHRoZSBmbGFnIGlzIHNldC4gQXNzdW1l cyAvcHJvYyBpcyBvbiBhIGRpZmZlcmVudCBtb3VudC4gICovCi0tc3RhdGljIHZvaWQKLS10ZXN0 X21vdW50ICh2b2lkKQotLXsKLS0gIC8qIENyZWF0ZSBhIHN5bWxpbmsgdG8gL3Byb2MsIHdoaWNo IHJlc2lkZXMgb24gYSBkaWZmZXJlbnQgbW91bnQgcG9pbnQuICovCi0tICBjaGFyICpsaW5rX3Bh dGggPSB4YXNwcmludGYgKCIlcy9tbnRfbGluayIsIHRlbXBkaXIpOwotLSAgeHN5bWxpbmsgKCIv cHJvYyIsIGxpbmtfcGF0aCk7Ci0tCi0tICAvKiBUcmF2ZXJzZSB3aXRoIEZUU19MT0dJQ0FMIHNv IGZ0cyByZXNvbHZlcyB0aGUgc3ltbGluayBhbmQgc2VlcyB0aGUKLS0gICAgIC9wcm9jIGRldmlj ZSBJRCwgYnV0IGFkZCBGVFNfTU9VTlQgdG8gZW5mb3JjZSB0aGUgYm91bmRhcnkuICovCi0tICBj aGFyICpwYXRoc1tdID0geyB0ZW1wZGlyLCBOVUxMIH07Ci0tICBGVFMgKmZ0cyA9IGZ0c19vcGVu IChwYXRocywgRlRTX0xPR0lDQUwgfCBGVFNfTU9VTlQsIE5VTEwpOwotLSAgVEVTVF9WRVJJRllf RVhJVCAoZnRzICE9IE5VTEwpOwotLQotLSAgRlRTRU5UICplbnQ7Ci0tICBib29sIGZvdW5kX21u dF9saW5rID0gZmFsc2U7Ci0tICB3aGlsZSAoKGVudCA9IGZ0c19yZWFkIChmdHMpKSAhPSBOVUxM KQotLSAgICB7Ci0tICAgICAgaWYgKHN0cmNtcCAoZW50LT5mdHNfbmFtZSwgIm1udF9saW5rIikg PT0gMCkKLS0gICAgICAgIGZvdW5kX21udF9saW5rID0gdHJ1ZTsKLS0gICAgfQotLQotLSAgLyog QmVjYXVzZSB0aGUgZGV2aWNlIElEIG9mIC9wcm9jIGRpZmZlcnMgZnJvbSB0aGUgcm9vdCB0cmF2 ZXJzYWwKLS0gICAgIGRldmljZSBJRCwgRlRTX01PVU5UIGZvcmNlcyBmdHMgdG8gc2tpcCB0aGUg ZW50cnkgZW50aXJlbHkuICovCi0tICBURVNUX1ZFUklGWSAoIWZvdW5kX21udF9saW5rKTsKLS0K LS0gIGZ0c19jbG9zZSAoZnRzKTsKLS0gIHVubGluayAobGlua19wYXRoKTsKLS0gIGZyZWUgKGxp bmtfcGF0aCk7Ci0tfQotLQotLS8qIEZUU19WRVJCQVRJTTogRW5zdXJlcyBwYXRocyBhcmUgcGFz c2VkIHRocm91Z2ggd2l0aG91dCBoYXZpbmcgdHJhaWxpbmcKLS0gICBzbGFzaGVzIHN0cmlwcGVk LiAgKi8KLS1zdGF0aWMgdm9pZAotLXRlc3RfdmVyYmF0aW0gKHZvaWQpCi0tewotLSAgY2hhciAq cGF0aF93aXRoX3NsYXNoZXMgPSB4YXNwcmludGYgKCIlcy8vLyIsIHRlbXBkaXIpOwotLSAgY2hh ciAqcGF0aHNbXSA9IHsgcGF0aF93aXRoX3NsYXNoZXMsIE5VTEwgfTsKLS0KLS0gIEZUUyAqZnRz ID0gZnRzX29wZW4gKHBhdGhzLCBGVFNfUEhZU0lDQUwgfCBGVFNfVkVSQkFUSU0sIE5VTEwpOwot LSAgVEVTVF9WRVJJRllfRVhJVCAoZnRzICE9IE5VTEwpOwotLQotLSAgRlRTRU5UICplbnQgPSBm dHNfcmVhZCAoZnRzKTsKLS0gIFRFU1RfVkVSSUZZX0VYSVQgKGVudCAhPSBOVUxMKTsKLS0KLS0g IC8qIFRoZSByZXR1cm5lZCByb290IHBhdGggc2hvdWxkIHJldGFpbiB0aGUgZXhhY3Qgc2xhc2hl cyBwYXNzZWQgdG8gaXQuICovCi0tICBURVNUX0NPTVBBUkVfU1RSSU5HIChlbnQtPmZ0c19wYXRo LCBwYXRoX3dpdGhfc2xhc2hlcyk7Ci0tCi0tICBmdHNfY2xvc2UgKGZ0cyk7Ci0tICBmcmVlIChw YXRoX3dpdGhfc2xhc2hlcyk7Ci0tfQotLQotLS8qIE1haW4gdGVzdCBkcml2ZXIgKi8KLS1zdGF0 aWMgaW50Ci0tZG9fdGVzdCAodm9pZCkKLS17Ci0tICBzdXBwb3J0X25lZWRfcHJvYyAoIkZUU19N T1VOVCB0ZXN0IHJlcXVpcmVzIC9wcm9jIik7Ci0tCi0tICB7Ci0tICAgIC8qIENoZWNrIGlmIGZ0 c19vcGVuIGRvZXMgbm90IGZhaWwgaWYgbmVpdGhlciBGVFNfTE9HSUNBTCBub3IgRlRTX1BIWVNJ Q0FMCi0tICAgICAgIGFyZSBzcGVjaWZpZWQuICAqLwotLSAgICBjaGFyICpwYXRoc1tdID0geyB0 ZW1wZGlyLCBOVUxMIH07Ci0tICAgIEZUUyAqZnRzID0gZnRzX29wZW4gKHBhdGhzLCAwLCBOVUxM KTsKLS0gICAgVEVTVF9WRVJJRllfRVhJVCAoZnRzICE9IE5VTEwpOwotLSAgICBmdHNfY2xvc2Ug KGZ0cyk7Ci0tICB9Ci0tCi0tICB7Ci0tICAgIEZUUyAqZnRzOwotLSAgICBjaGFyICpwYXRoc1td ID0geyB0ZW1wZGlyLCBOVUxMIH07Ci0tCi0tICAgIC8qIFRoZXJlIGFyZSBpbnRlcm5hbCBvbmx5 IGZsYWdzLiAgKi8KLS0gICAgZnRzID0gZnRzX29wZW4gKHBhdGhzLCBGVFNfTkFNRU9OTFksIE5V TEwpOwotLSAgICBURVNUX1ZFUklGWV9FWElUIChmdHMgPT0gTlVMTCk7Ci0tICAgIFRFU1RfQ09N UEFSRSAoZXJybm8sIEVJTlZBTCk7Ci0tCi0tICAgIGZ0cyA9IGZ0c19vcGVuIChwYXRocywgRlRT X1NUT1AsIE5VTEwpOwotLSAgICBURVNUX1ZFUklGWV9FWElUIChmdHMgPT0gTlVMTCk7Ci0tICAg IFRFU1RfQ09NUEFSRSAoZXJybm8sIEVJTlZBTCk7Ci0tICB9Ci0tCi0tICB0ZXN0X3RpZ2h0X2N5 Y2xlICgpOwotLSAgdGVzdF9jd2RmZCAoKTsKLS0gIHRlc3RfZGVmZXJfc3RhdCAoKTsKLS0gIHRl c3RfbW91bnQgKCk7Ci0tICB0ZXN0X3ZlcmJhdGltICgpOwotLQotLSAgcmV0dXJuIDA7Ci0tfQot LQotLS8qIEluY2x1ZGVzIHRoZSBnbGliYyB0ZXN0IGZyYW1ld29yayBkcml2ZXIgKi8KLS0jaW5j bHVkZSA8c3VwcG9ydC90ZXN0LWRyaXZlci5jPgotZGlmZiAtLWdpdCBhL2lvL3RzdC1mdHMuYyBi L2lvL3RzdC1mdHMuYwotaW5kZXggY2E4MjM3N2QyMGMyNmVmYi4uNDk0ZWIyOWM5YTdmZGQ5NSAx MDA2NDQKLS0tLSBhL2lvL3RzdC1mdHMuYwotKysrIGIvaW8vdHN0LWZ0cy5jCi1AQCAtMTkyLDgg KzE5Miw2IEBAIGRvX3Rlc3QgKHZvaWQpCi0gICAgICBkb24ndCB1c2UgRlRTX0xPR0lDQUwuICAq LwotICNpZm5kZWYgVFNUX0ZUU19ZMjAzOAotICAgZmxhZ3MgfD0gRlRTX0xPR0lDQUw7Ci0tI2Vs c2UKLS0gIGZsYWdzIHw9IEZUU19QSFlTSUNBTDsKLSAjZW5kaWYKLSAgIGZ0cyA9IGZ0c19vcGVu IChwYXRocywgZmxhZ3MsICZjb21wYXJlX2VudHMpOwotICAgaWYgKGZ0cyA9PSBOVUxMKQotZGlm ZiAtLWdpdCBhL21pc2MvTWFrZWZpbGUgYi9taXNjL01ha2VmaWxlCi1pbmRleCA0Mzk1MzY2ZDc0 YzEyZmNjLi5mYzQ0ZGU5OTM0OGY1Y2ViIDEwMDY0NAotLS0tIGEvbWlzYy9NYWtlZmlsZQotKysr IGIvbWlzYy9NYWtlZmlsZQotQEAgLTEyMSw3ICsxMjEsNiBAQCByb3V0aW5lcyA6PSBcCi0gICBn ZXR1c2Vyc2hlbGwgXAotICAgZ2V0eGF0dHIgXAotICAgZ3R0eSBcCi0tICBoYXNoIFwKLSAgIGhz ZWFyY2ggXAotICAgaHNlYXJjaF9yIFwKLSAgIGlmdW5jLWltcGwtbGlzdCBcCi1AQCAtMTU4LDcg KzE1Nyw2IEBAIHJvdXRpbmVzIDo9IFwKLSAgIG11bmxvY2sgXAotICAgbXVubG9ja2FsbCBcCi0g ICBtdW5tYXAgXAotLSAgbmV4dC1wcmltZSBcCi0gICBwcmVhZHYgXAotICAgcHJlYWR2MiBcCi0g ICBwcmVhZHY2NCBcCi1kaWZmIC0tZ2l0IGEvbWlzYy9oYXNoLmMgYi9taXNjL2hhc2guYwotZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCBmNzIyNzEzYThmYjAxNzk2Li4wMDAwMDAwMDAw MDAwMDAwCi0tLS0gYS9taXNjL2hhc2guYwotKysrIC9kZXYvbnVsbAotQEAgLTEsMTA0NSArMCww IEBACi0tLyogaGFzaCAtIGhhc2hpbmcgdGFibGUgcHJvY2Vzc2luZy4KLS0KLS0gICBDb3B5cmln aHQgKEMpIDE5OTgtMjAwNCwgMjAwNi0yMDA3LCAyMDA5LTIwMjYgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCi0tCi0tICAgV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcsIDE5OTIuCi0tCi0t ICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKLS0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotLSAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCi0tICAgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLS0KLS0gICBUaGlzIGZpbGUgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLS0gICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgotLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKLS0gICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLS0KLS0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLS0gICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LwotLQotLS8qIEEgZ2VuZXJpYyBoYXNoIHRhYmxlIHBhY2thZ2UuICAqLwotLQotLS8qIERlZmlu ZSBVU0VfT0JTVEFDSyB0byAxIGlmIHlvdSB3YW50IHRoZSBhbGxvY2F0b3IgdG8gdXNlIG9ic3Rh Y2tzIGluc3RlYWQKLS0gICBvZiBtYWxsb2MuICBJZiB5b3UgY2hhbmdlIFVTRV9PQlNUQUNLLCB5 b3UgaGF2ZSB0byByZWNvbXBpbGUhICAqLwotLQotLSNpbmNsdWRlIDxjb25maWcuaD4KLS0jaWZk ZWYgX0xJQkMKLS0jIGRlZmluZSBVU0VfT0JTVEFDSyAgICAgICAgICAgMAotLSMgZGVmaW5lIFRF U1RJTkcgICAgICAgICAgICAgICAwCi0tIyBpbmNsdWRlIDxzdGRiaXQuaD4KLS0jIGRlZmluZSBy b3RyX3N6KF9feCwgX19uKSAgICAgc3RkY19yb3RhdGVfcmlnaHQoX194LCBfX24pCi0tI2Vsc2UK LS0jIGluY2x1ZGUgImJpdHJvdGF0ZS5oIgotLSNlbmRpZgotLQotLSNpbmNsdWRlICJoYXNoLmgi Ci0tCi0tI2luY2x1ZGUgIm5leHQtcHJpbWUuaCIKLS0jaW5jbHVkZSAieGFsbG9jLW92ZXJzaXpl ZC5oIgotLQotLSNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxzdGRpbnQuaD4KLS0jaW5j bHVkZSA8c3RkaW8uaD4KLS0jaW5jbHVkZSA8c3RkbGliLmg+Ci0tCi0tI2lmIFVTRV9PQlNUQUNL Ci0tIyBpbmNsdWRlICJvYnN0YWNrLmgiCi0tIyBpZm5kZWYgb2JzdGFja19jaHVua19hbGxvYwot LSMgIGRlZmluZSBvYnN0YWNrX2NodW5rX2FsbG9jIG1hbGxvYwotLSMgZW5kaWYKLS0jIGlmbmRl ZiBvYnN0YWNrX2NodW5rX2ZyZWUKLS0jICBkZWZpbmUgb2JzdGFja19jaHVua19mcmVlIGZyZWUK LS0jIGVuZGlmCi0tI2VuZGlmCi0tCi0tc3RydWN0IGhhc2hfZW50cnkKLS0gIHsKLS0gICAgdm9p ZCAqZGF0YTsKLS0gICAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQ7Ci0tICAgIC8qIEludmFyaWFu dDogSWYgREFUQSBpcyBOVUxMLCB0aGlzIGVudHJ5IGlzIGFuIHVudXNlZCBidWNrZXQgaGVhZCwK LS0gICAgICAgYW5kIHRoZXJlZm9yZSBORVhUIGlzIE5VTEwgYXMgd2VsbC4gICovCi0tICB9Owot LQotLXN0cnVjdCBoYXNoX3RhYmxlCi0tICB7Ci0tICAgIC8qIFRoZSBhcnJheSBvZiBidWNrZXRz IHN0YXJ0cyBhdCBCVUNLRVQgYW5kIGV4dGVuZHMgdG8gQlVDS0VUX0xJTUlULTEsCi0tICAgICAg IGZvciBhIHBvc3NpYmlsaXR5IG9mIE5fQlVDS0VUUy4gIEFtb25nIHRob3NlLCBOX0JVQ0tFVFNf VVNFRCBidWNrZXRzCi0tICAgICAgIGFyZSBub3QgZW1wdHksIHRoZXJlIGFyZSBOX0VOVFJJRVMg YWN0aXZlIGVudHJpZXMgaW4gdGhlIHRhYmxlLiAgKi8KLS0gICAgc3RydWN0IGhhc2hfZW50cnkg KmJ1Y2tldDsKLS0gICAgc3RydWN0IGhhc2hfZW50cnkgY29uc3QgKmJ1Y2tldF9saW1pdDsKLS0g ICAgc2l6ZV90IG5fYnVja2V0czsKLS0gICAgc2l6ZV90IG5fYnVja2V0c191c2VkOwotLSAgICBz aXplX3Qgbl9lbnRyaWVzOwotLQotLSAgICAvKiBUdW5pbmcgYXJndW1lbnRzLCBrZXB0IGluIGEg cGh5c2ljYWxseSBzZXBhcmF0ZSBzdHJ1Y3R1cmUuICAqLwotLSAgICBjb25zdCBIYXNoX3R1bmlu ZyAqdHVuaW5nOwotLQotLSAgICAvKiBUaHJlZSBmdW5jdGlvbnMgYXJlIGdpdmVuIHRvICdoYXNo X2luaXRpYWxpemUnLCBzZWUgdGhlIGRvY3VtZW50YXRpb24KLS0gICAgICAgYmxvY2sgZm9yIHRo aXMgZnVuY3Rpb24uICBJbiBhIHdvcmQsIEhBU0hFUiByYW5kb21pemVzIGEgdXNlciBlbnRyeQot LSAgICAgICBpbnRvIGEgbnVtYmVyIHVwIGZyb20gMCB1cCB0byBzb21lIG1heGltdW0gbWludXMg MTsgQ09NUEFSQVRPUiByZXR1cm5zCi0tICAgICAgIHRydWUgaWYgdHdvIHVzZXIgZW50cmllcyBj b21wYXJlIGVxdWFsbHk7IGFuZCBEQVRBX0ZSRUVSIGlzIHRoZSBjbGVhbnVwCi0tICAgICAgIGZ1 bmN0aW9uIGZvciBhIHVzZXIgZW50cnkuICAqLwotLSAgICBIYXNoX2hhc2hlciBoYXNoZXI7Ci0t ICAgIEhhc2hfY29tcGFyYXRvciBjb21wYXJhdG9yOwotLSAgICBIYXNoX2RhdGFfZnJlZXIgZGF0 YV9mcmVlcjsKLS0KLS0gICAgLyogQSBsaW5rZWQgbGlzdCBvZiBmcmVlZCBzdHJ1Y3QgaGFzaF9l bnRyeSBzdHJ1Y3RzLiAgKi8KLS0gICAgc3RydWN0IGhhc2hfZW50cnkgKmZyZWVfZW50cnlfbGlz dDsKLS0KLS0jaWYgVVNFX09CU1RBQ0sKLS0gICAgLyogV2hlbmV2ZXIgb2JzdGFja3MgYXJlIHVz ZWQsIGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFsbCBvdmVyZmxvd2VkCi0tICAgICAgIGVu dHJpZXMgaW50byBhIHNpbmdsZSBzdGFjaywgc28gdGhleSBhbGwgY2FuIGJlIGZyZWVkIGluIGEg c2luZ2xlCi0tICAgICAgIG9wZXJhdGlvbi4gIEl0IGlzIG5vdCBjbGVhciBpZiB0aGUgc3BlZWR1 cCBpcyB3b3J0aCB0aGUgdHJvdWJsZS4gICovCi0tICAgIHN0cnVjdCBvYnN0YWNrIGVudHJ5X3N0 YWNrOwotLSNlbmRpZgotLSAgfTsKLS0KLS0vKiBBIGhhc2ggdGFibGUgY29udGFpbnMgbWFueSBp bnRlcm5hbCBlbnRyaWVzLCBlYWNoIGhvbGRpbmcgYSBwb2ludGVyIHRvCi0tICAgc29tZSB1c2Vy LXByb3ZpZGVkIGRhdGEgKGFsc28gY2FsbGVkIGEgdXNlciBlbnRyeSkuICBBbiBlbnRyeSBpbmRp c3RpbmN0bHkKLS0gICByZWZlcnMgdG8gYm90aCB0aGUgaW50ZXJuYWwgZW50cnkgYW5kIGl0cyBh c3NvY2lhdGVkIHVzZXIgZW50cnkuICBBIHVzZXIKLS0gICBlbnRyeSBjb250ZW50cyBtYXkgYmUg aGFzaGVkIGJ5IGEgcmFuZG9taXphdGlvbiBmdW5jdGlvbiAodGhlIGhhc2hpbmcKLS0gICBmdW5j dGlvbiwgb3IganVzdCAiaGFzaGVyIiBmb3Igc2hvcnQpIGludG8gYSBudW1iZXIgKG9yICJzbG90 IikgYmV0d2VlbiAwCi0tICAgYW5kIHRoZSBjdXJyZW50IHRhYmxlIHNpemUuICBBdCBlYWNoIHNs b3QgcG9zaXRpb24gaW4gdGhlIGhhc2ggdGFibGUsCi0tICAgc3RhcnRzIGEgbGlua2VkIGNoYWlu IG9mIGVudHJpZXMgZm9yIHdoaWNoIHRoZSB1c2VyIGRhdGEgYWxsIGhhc2ggdG8gdGhpcwotLSAg IHNsb3QuICBBIGJ1Y2tldCBpcyB0aGUgY29sbGVjdGlvbiBvZiBhbGwgZW50cmllcyBoYXNoaW5n IHRvIHRoZSBzYW1lIHNsb3QuCi0tCi0tICAgQSBnb29kICJoYXNoZXIiIGZ1bmN0aW9uIHdpbGwg ZGlzdHJpYnV0ZSBlbnRyaWVzIHJhdGhlciBldmVubHkgaW4gYnVja2V0cy4KLS0gICBJbiB0aGUg aWRlYWwgY2FzZSwgdGhlIGxlbmd0aCBvZiBlYWNoIGJ1Y2tldCBpcyByb3VnaGx5IHRoZSBudW1i ZXIgb2YKLS0gICBlbnRyaWVzIGRpdmlkZWQgYnkgdGhlIHRhYmxlIHNpemUuICBGaW5kaW5nIHRo ZSBzbG90IGZvciBhIGRhdGEgaXMgdXN1YWxseQotLSAgIGRvbmUgaW4gY29uc3RhbnQgdGltZSBi eSB0aGUgImhhc2hlciIsIGFuZCB0aGUgbGF0ZXIgZmluZGluZyBvZiBhIHByZWNpc2UKLS0gICBl bnRyeSBpcyBsaW5lYXIgaW4gdGltZSB3aXRoIHRoZSBzaXplIG9mIHRoZSBidWNrZXQuICBDb25z ZXF1ZW50bHksIGEKLS0gICBsYXJnZXIgaGFzaCB0YWJsZSBzaXplICh0aGF0IGlzLCBhIGxhcmdl ciBudW1iZXIgb2YgYnVja2V0cykgaXMgcHJvbmUgdG8KLS0gICB5aWVsZGluZyBzaG9ydGVyIGNo YWlucywgKmdpdmVuKiB0aGUgImhhc2hlciIgZnVuY3Rpb24gYmVoYXZlcyBwcm9wZXJseS4KLS0K LS0gICBMb25nIGJ1Y2tldHMgc2xvdyBkb3duIHRoZSBsb29rdXAgYWxnb3JpdGhtLiAgT25lIG1p Z2h0IHVzZSBiaWcgaGFzaCB0YWJsZQotLSAgIHNpemVzIGluIGhvcGUgdG8gcmVkdWNlIHRoZSBh dmVyYWdlIGxlbmd0aCBvZiBidWNrZXRzLCBidXQgdGhpcyBtaWdodAotLSAgIGJlY29tZSBpbm9y ZGluYXRlLCBhcyB1bnVzZWQgc2xvdHMgaW4gdGhlIGhhc2ggdGFibGUgdGFrZSBzb21lIHNwYWNl LiAgVGhlCi0tICAgYmVzdCBiZXQgaXMgdG8gbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgYSBnb29k ICJoYXNoZXIiIGZ1bmN0aW9uIChiZXdhcmUKLS0gICB0aGF0IHRob3NlIGFyZSBub3QgdGhhdCBl YXN5IHRvIHdyaXRlISA6LSksIGFuZCB0byB1c2UgYSB0YWJsZSBzaXplCi0tICAgbGFyZ2VyIHRo YW4gdGhlIGFjdHVhbCBudW1iZXIgb2YgZW50cmllcy4gICovCi0tCi0tLyogSWYgYW4gaW5zZXJ0 aW9uIG1ha2VzIHRoZSByYXRpbyBvZiBub25lbXB0eSBidWNrZXRzIHRvIHRhYmxlIHNpemUgbGFy Z2VyCi0tICAgdGhhbiB0aGUgZ3Jvd3RoIHRocmVzaG9sZCAoYSBudW1iZXIgYmV0d2VlbiAwLjAg YW5kIDEuMCksIHRoZW4gaW5jcmVhc2UKLS0gICB0aGUgdGFibGUgc2l6ZSBieSBtdWx0aXBseWlu ZyBieSB0aGUgZ3Jvd3RoIGZhY3RvciAoYSBudW1iZXIgZ3JlYXRlciB0aGFuCi0tICAgMS4wKS4g IFRoZSBncm93dGggdGhyZXNob2xkIGRlZmF1bHRzIHRvIDAuOCwgYW5kIHRoZSBncm93dGggZmFj dG9yCi0tICAgZGVmYXVsdHMgdG8gMS40MTQsIG1lYW5pbmcgdGhhdCB0aGUgdGFibGUgd2lsbCBo YXZlIGRvdWJsZWQgaXRzIHNpemUKLS0gICBldmVyeSBzZWNvbmQgdGltZSA4MCUgb2YgdGhlIGJ1 Y2tldHMgZ2V0IHVzZWQuICAqLwotLSNkZWZpbmUgREVGQVVMVF9HUk9XVEhfVEhSRVNIT0xEIDAu OGYKLS0jZGVmaW5lIERFRkFVTFRfR1JPV1RIX0ZBQ1RPUiAxLjQxNGYKLS0KLS0vKiBJZiBhIGRl bGV0aW9uIGVtcHRpZXMgYSBidWNrZXQgYW5kIGNhdXNlcyB0aGUgcmF0aW8gb2YgdXNlZCBidWNr ZXRzIHRvCi0tICAgdGFibGUgc2l6ZSB0byBiZWNvbWUgc21hbGxlciB0aGFuIHRoZSBzaHJpbmsg dGhyZXNob2xkIChhIG51bWJlciBiZXR3ZWVuCi0tICAgMC4wIGFuZCAxLjApLCB0aGVuIHNocmlu ayB0aGUgdGFibGUgYnkgbXVsdGlwbHlpbmcgYnkgdGhlIHNocmluayBmYWN0b3IgKGEKLS0gICBu dW1iZXIgZ3JlYXRlciB0aGFuIHRoZSBzaHJpbmsgdGhyZXNob2xkIGJ1dCBzbWFsbGVyIHRoYW4g MS4wKS4gIFRoZSBzaHJpbmsKLS0gICB0aHJlc2hvbGQgYW5kIGZhY3RvciBkZWZhdWx0IHRvIDAu MCBhbmQgMS4wLCBtZWFuaW5nIHRoYXQgdGhlIHRhYmxlIG5ldmVyCi0tICAgc2hyaW5rcy4gICov Ci0tI2RlZmluZSBERUZBVUxUX1NIUklOS19USFJFU0hPTEQgMC4wZgotLSNkZWZpbmUgREVGQVVM VF9TSFJJTktfRkFDVE9SIDEuMGYKLS0KLS0vKiBVc2UgdGhpcyB0byBpbml0aWFsaXplIG9yIHJl c2V0IGEgVFVOSU5HIHN0cnVjdHVyZSB0bwotLSAgIHNvbWUgc2Vuc2libGUgdmFsdWVzLiAqLwot LXN0YXRpYyBjb25zdCBIYXNoX3R1bmluZyBkZWZhdWx0X3R1bmluZyA9Ci0tICB7Ci0tICAgIERF RkFVTFRfU0hSSU5LX1RIUkVTSE9MRCwKLS0gICAgREVGQVVMVF9TSFJJTktfRkFDVE9SLAotLSAg ICBERUZBVUxUX0dST1dUSF9USFJFU0hPTEQsCi0tICAgIERFRkFVTFRfR1JPV1RIX0ZBQ1RPUiwK LS0gICAgZmFsc2UKLS0gIH07Ci0tCi0tLyogSW5mb3JtYXRpb24gYW5kIGxvb2t1cC4gICovCi0t Ci0tI2lmICFfTElCQwotLXNpemVfdAotLWhhc2hfZ2V0X25fYnVja2V0cyAoY29uc3QgSGFzaF90 YWJsZSAqdGFibGUpCi0tewotLSAgcmV0dXJuIHRhYmxlLT5uX2J1Y2tldHM7Ci0tfQotLQotLXNp emVfdAotLWhhc2hfZ2V0X25fYnVja2V0c191c2VkIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkK LS17Ci0tICByZXR1cm4gdGFibGUtPm5fYnVja2V0c191c2VkOwotLX0KLS0KLS1zaXplX3QKLS1o YXNoX2dldF9uX2VudHJpZXMgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQotLXsKLS0gIHJldHVy biB0YWJsZS0+bl9lbnRyaWVzOwotLX0KLS0KLS1zaXplX3QKLS1oYXNoX2dldF9tYXhfYnVja2V0 X2xlbmd0aCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCi0tewotLSAgc2l6ZV90IG1heF9idWNr ZXRfbGVuZ3RoID0gMDsKLS0KLS0gIGZvciAoc3RydWN0IGhhc2hfZW50cnkgY29uc3QgKmJ1Y2tl dCA9IHRhYmxlLT5idWNrZXQ7Ci0tICAgICAgIGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7 Ci0tICAgICAgIGJ1Y2tldCsrKQotLSAgICB7Ci0tICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKLS0g ICAgICAgIHsKLS0gICAgICAgICAgc3RydWN0IGhhc2hfZW50cnkgY29uc3QgKmN1cnNvciA9IGJ1 Y2tldDsKLS0gICAgICAgICAgc2l6ZV90IGJ1Y2tldF9sZW5ndGggPSAxOwotLQotLSAgICAgICAg ICB3aGlsZSAoY3Vyc29yID0gY3Vyc29yLT5uZXh0LCBjdXJzb3IpCi0tICAgICAgICAgICAgYnVj a2V0X2xlbmd0aCsrOwotLQotLSAgICAgICAgICBpZiAoYnVja2V0X2xlbmd0aCA+IG1heF9idWNr ZXRfbGVuZ3RoKQotLSAgICAgICAgICAgIG1heF9idWNrZXRfbGVuZ3RoID0gYnVja2V0X2xlbmd0 aDsKLS0gICAgICAgIH0KLS0gICAgfQotLQotLSAgcmV0dXJuIG1heF9idWNrZXRfbGVuZ3RoOwot LX0KLS0KLS1ib29sCi0taGFzaF90YWJsZV9vayAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCi0t ewotLSAgc2l6ZV90IG5fYnVja2V0c191c2VkID0gMDsKLS0gIHNpemVfdCBuX2VudHJpZXMgPSAw OwotLQotLSAgZm9yIChzdHJ1Y3QgaGFzaF9lbnRyeSBjb25zdCAqYnVja2V0ID0gdGFibGUtPmJ1 Y2tldDsKLS0gICAgICAgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsKLS0gICAgICAgYnVj a2V0KyspCi0tICAgIHsKLS0gICAgICBpZiAoYnVja2V0LT5kYXRhKQotLSAgICAgICAgewotLSAg ICAgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSBjb25zdCAqY3Vyc29yID0gYnVja2V0OwotLQotLSAg ICAgICAgICAvKiBDb3VudCBidWNrZXQgaGVhZC4gICovCi0tICAgICAgICAgIG5fYnVja2V0c191 c2VkKys7Ci0tICAgICAgICAgIG5fZW50cmllcysrOwotLQotLSAgICAgICAgICAvKiBDb3VudCBi dWNrZXQgb3ZlcmZsb3cuICAqLwotLSAgICAgICAgICB3aGlsZSAoY3Vyc29yID0gY3Vyc29yLT5u ZXh0LCBjdXJzb3IpCi0tICAgICAgICAgICAgbl9lbnRyaWVzKys7Ci0tICAgICAgICB9Ci0tICAg IH0KLS0KLS0gIGlmIChuX2J1Y2tldHNfdXNlZCA9PSB0YWJsZS0+bl9idWNrZXRzX3VzZWQgJiYg bl9lbnRyaWVzID09IHRhYmxlLT5uX2VudHJpZXMpCi0tICAgIHJldHVybiB0cnVlOwotLQotLSAg cmV0dXJuIGZhbHNlOwotLX0KLS0KLS12b2lkCi0taGFzaF9wcmludF9zdGF0aXN0aWNzIChjb25z dCBIYXNoX3RhYmxlICp0YWJsZSwgRklMRSAqc3RyZWFtKQotLXsKLS0gIHNpemVfdCBuX2VudHJp ZXMgPSBoYXNoX2dldF9uX2VudHJpZXMgKHRhYmxlKTsKLS0gIHNpemVfdCBuX2J1Y2tldHMgPSBo YXNoX2dldF9uX2J1Y2tldHMgKHRhYmxlKTsKLS0gIHNpemVfdCBuX2J1Y2tldHNfdXNlZCA9IGhh c2hfZ2V0X25fYnVja2V0c191c2VkICh0YWJsZSk7Ci0tICBzaXplX3QgbWF4X2J1Y2tldF9sZW5n dGggPSBoYXNoX2dldF9tYXhfYnVja2V0X2xlbmd0aCAodGFibGUpOwotLQotLSAgZnByaW50ZiAo c3RyZWFtLCAiIyBlbnRyaWVzOiAgICAgICAgICVsdVxuIiwgKHVuc2lnbmVkIGxvbmcgaW50KSBu X2VudHJpZXMpOwotLSAgZnByaW50ZiAoc3RyZWFtLCAiIyBidWNrZXRzOiAgICAgICAgICVsdVxu IiwgKHVuc2lnbmVkIGxvbmcgaW50KSBuX2J1Y2tldHMpOwotLSAgZnByaW50ZiAoc3RyZWFtLCAi IyBidWNrZXRzIHVzZWQ6ICAgICVsdSAoJS4yZiUlKVxuIiwKLS0gICAgICAgICAgICh1bnNpZ25l ZCBsb25nIGludCkgbl9idWNrZXRzX3VzZWQsCi0tICAgICAgICAgICAoMTAwLjAgKiBuX2J1Y2tl dHNfdXNlZCkgLyBuX2J1Y2tldHMpOwotLSAgZnByaW50ZiAoc3RyZWFtLCAibWF4IGJ1Y2tldCBs ZW5ndGg6ICVsdVxuIiwKLS0gICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgbWF4X2J1Y2tl dF9sZW5ndGgpOwotLX0KLS0jZW5kaWYKLS0KLS0vKiBIYXNoIEtFWSBhbmQgcmV0dXJuIGEgcG9p bnRlciB0byB0aGUgc2VsZWN0ZWQgYnVja2V0LgotLSAgIElmIFRBQkxFLT5oYXNoZXIgbWlzYmVo YXZlcywgYWJvcnQuICAqLwotLXN0YXRpYyBzdHJ1Y3QgaGFzaF9lbnRyeSAqCi0tc2FmZV9oYXNo ZXIgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICprZXkpCi0tewotLSAgc2l6 ZV90IG4gPSB0YWJsZS0+aGFzaGVyIChrZXksIHRhYmxlLT5uX2J1Y2tldHMpOwotLSAgaWYgKCEg KG4gPCB0YWJsZS0+bl9idWNrZXRzKSkKLS0gICAgYWJvcnQgKCk7Ci0tICByZXR1cm4gdGFibGUt PmJ1Y2tldCArIG47Ci0tfQotLQotLXZvaWQgKgotLWhhc2hfbG9va3VwIChjb25zdCBIYXNoX3Rh YmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCi0tewotLSAgc3RydWN0IGhhc2hfZW50cnkg Y29uc3QgKmJ1Y2tldCA9IHNhZmVfaGFzaGVyICh0YWJsZSwgZW50cnkpOwotLQotLSAgaWYgKGJ1 Y2tldC0+ZGF0YSA9PSBOVUxMKQotLSAgICByZXR1cm4gTlVMTDsKLS0KLS0gIGZvciAoc3RydWN0 IGhhc2hfZW50cnkgY29uc3QgKmN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJz b3ItPm5leHQpCi0tICAgIGlmIChlbnRyeSA9PSBjdXJzb3ItPmRhdGEgfHwgdGFibGUtPmNvbXBh cmF0b3IgKGVudHJ5LCBjdXJzb3ItPmRhdGEpKQotLSAgICAgIHJldHVybiBjdXJzb3ItPmRhdGE7 Ci0tCi0tICByZXR1cm4gTlVMTDsKLS19Ci0tCi0tI2lmICFfTElCQwotLS8qIFdhbGtpbmcuICAq LwotLQotLXZvaWQgKgotLWhhc2hfZ2V0X2ZpcnN0IChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkK LS17Ci0tICBpZiAodGFibGUtPm5fZW50cmllcyA9PSAwKQotLSAgICByZXR1cm4gTlVMTDsKLS0K LS0gIGZvciAoc3RydWN0IGhhc2hfZW50cnkgY29uc3QgKmJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7 IDsgYnVja2V0KyspCi0tICAgIGlmICghIChidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KSkK LS0gICAgICBhYm9ydCAoKTsKLS0gICAgZWxzZSBpZiAoYnVja2V0LT5kYXRhKQotLSAgICAgIHJl dHVybiBidWNrZXQtPmRhdGE7Ci0tfQotLQotLXZvaWQgKgotLWhhc2hfZ2V0X25leHQgKGNvbnN0 IEhhc2hfdGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICplbnRyeSkKLS17Ci0tICBzdHJ1Y3QgaGFz aF9lbnRyeSBjb25zdCAqYnVja2V0ID0gc2FmZV9oYXNoZXIgKHRhYmxlLCBlbnRyeSk7Ci0tCi0t ICAvKiBGaW5kIG5leHQgZW50cnkgaW4gdGhlIHNhbWUgYnVja2V0LiAgKi8KLS0gIHsKLS0gICAg c3RydWN0IGhhc2hfZW50cnkgY29uc3QgKmN1cnNvciA9IGJ1Y2tldDsKLS0gICAgZG8KLS0gICAg ICB7Ci0tICAgICAgICBpZiAoY3Vyc29yLT5kYXRhID09IGVudHJ5ICYmIGN1cnNvci0+bmV4dCkK LS0gICAgICAgICAgcmV0dXJuIGN1cnNvci0+bmV4dC0+ZGF0YTsKLS0gICAgICAgIGN1cnNvciA9 IGN1cnNvci0+bmV4dDsKLS0gICAgICB9Ci0tICAgIHdoaWxlIChjdXJzb3IgIT0gTlVMTCk7Ci0t ICB9Ci0tCi0tICAvKiBGaW5kIGZpcnN0IGVudHJ5IGluIGFueSBzdWJzZXF1ZW50IGJ1Y2tldC4g ICovCi0tICB3aGlsZSAoKytidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KQotLSAgICBpZiAo YnVja2V0LT5kYXRhKQotLSAgICAgIHJldHVybiBidWNrZXQtPmRhdGE7Ci0tCi0tICAvKiBOb25l IGZvdW5kLiAgKi8KLS0gIHJldHVybiBOVUxMOwotLX0KLS0KLS1zaXplX3QKLS1oYXNoX2dldF9l bnRyaWVzIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSwgdm9pZCAqKmJ1ZmZlciwKLS0gICAgICAg ICAgICAgICAgICBzaXplX3QgYnVmZmVyX3NpemUpCi0tewotLSAgc2l6ZV90IGNvdW50ZXIgPSAw OwotLQotLSAgZm9yIChzdHJ1Y3QgaGFzaF9lbnRyeSBjb25zdCAqYnVja2V0ID0gdGFibGUtPmJ1 Y2tldDsKLS0gICAgICAgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsKLS0gICAgICAgYnVj a2V0KyspCi0tICAgIHsKLS0gICAgICBpZiAoYnVja2V0LT5kYXRhKQotLSAgICAgICAgewotLSAg ICAgICAgICBmb3IgKHN0cnVjdCBoYXNoX2VudHJ5IGNvbnN0ICpjdXJzb3IgPSBidWNrZXQ7IGN1 cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQotLSAgICAgICAgICAgIHsKLS0gICAgICAgICAg ICAgIGlmIChjb3VudGVyID49IGJ1ZmZlcl9zaXplKQotLSAgICAgICAgICAgICAgICByZXR1cm4g Y291bnRlcjsKLS0gICAgICAgICAgICAgIGJ1ZmZlcltjb3VudGVyKytdID0gY3Vyc29yLT5kYXRh OwotLSAgICAgICAgICAgIH0KLS0gICAgICAgIH0KLS0gICAgfQotLQotLSAgcmV0dXJuIGNvdW50 ZXI7Ci0tfQotLQotLXNpemVfdAotLWhhc2hfZG9fZm9yX2VhY2ggKGNvbnN0IEhhc2hfdGFibGUg KnRhYmxlLCBIYXNoX3Byb2Nlc3NvciBwcm9jZXNzb3IsCi0tICAgICAgICAgICAgICAgICAgdm9p ZCAqcHJvY2Vzc29yX2RhdGEpCi0tewotLSAgc2l6ZV90IGNvdW50ZXIgPSAwOwotLQotLSAgZm9y IChzdHJ1Y3QgaGFzaF9lbnRyeSBjb25zdCAqYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsKLS0gICAg ICAgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsKLS0gICAgICAgYnVja2V0KyspCi0tICAg IHsKLS0gICAgICBpZiAoYnVja2V0LT5kYXRhKQotLSAgICAgICAgewotLSAgICAgICAgICBmb3Ig KHN0cnVjdCBoYXNoX2VudHJ5IGNvbnN0ICpjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29y ID0gY3Vyc29yLT5uZXh0KQotLSAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAgIGlmICghIHBy b2Nlc3NvciAoY3Vyc29yLT5kYXRhLCBwcm9jZXNzb3JfZGF0YSkpCi0tICAgICAgICAgICAgICAg IHJldHVybiBjb3VudGVyOwotLSAgICAgICAgICAgICAgY291bnRlcisrOwotLSAgICAgICAgICAg IH0KLS0gICAgICAgIH0KLS0gICAgfQotLQotLSAgcmV0dXJuIGNvdW50ZXI7Ci0tfQotLSNlbmRp ZgotLQotLQotLS8qIElmIHRoZSB1c2VyIHBhc3NlcyBhIE5VTEwgaGFzaGVyLCB3ZSBoYXNoIHRo ZSByYXcgcG9pbnRlci4gICovCi0tc3RhdGljIHNpemVfdAotLXJhd19oYXNoZXIgKGNvbnN0IHZv aWQgKmRhdGEsIHNpemVfdCBuKQotLXsKLS0gIC8qIFdoZW4gaGFzaGluZyB1bmlxdWUgcG9pbnRl cnMsIGl0IGlzIG9mdGVuIHRoZSBjYXNlIHRoYXQgdGhleSB3ZXJlCi0tICAgICBnZW5lcmF0ZWQg YnkgbWFsbG9jIGFuZCB0aHVzIGhhdmUgdGhlIHByb3BlcnR5IHRoYXQgdGhlIGxvdy1vcmRlcgot LSAgICAgYml0cyBhcmUgMC4gIEFzIHRoaXMgdGVuZHMgdG8gZ2l2ZSBwb29yZXIgcGVyZm9ybWFu Y2Ugd2l0aCBzbWFsbAotLSAgICAgdGFibGVzLCB3ZSByb3RhdGUgdGhlIHBvaW50ZXIgdmFsdWUg YmVmb3JlIHBlcmZvcm1pbmcgZGl2aXNpb24sCi0tICAgICBpbiBhbiBhdHRlbXB0IHRvIGltcHJv dmUgaGFzaCBxdWFsaXR5LiAgKi8KLS0gIHNpemVfdCB2YWwgPSByb3RyX3N6ICgoc2l6ZV90KSBk YXRhLCAzKTsKLS0gIHJldHVybiB2YWwgJSBuOwotLX0KLS0KLS0vKiBJZiB0aGUgdXNlciBwYXNz ZXMgYSBOVUxMIGNvbXBhcmF0b3IsIHdlIHVzZSBwb2ludGVyIGNvbXBhcmlzb24uICAqLwotLXN0 YXRpYyBib29sCi0tcmF3X2NvbXBhcmF0b3IgKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIp Ci0tewotLSAgcmV0dXJuIGEgPT0gYjsKLS19Ci0tCi0tCi0tI2lmICFfTElCQwotLS8qIEFsbG9j YXRpb24gYW5kIGNsZWFuLXVwLiAgKi8KLS0KLS12b2lkCi0taGFzaF9yZXNldF90dW5pbmcgKEhh c2hfdHVuaW5nICp0dW5pbmcpCi0tewotLSAgKnR1bmluZyA9IGRlZmF1bHRfdHVuaW5nOwotLX0K LS0jZW5kaWYKLS0KLS0vKiBGb3IgdGhlIGdpdmVuIGhhc2ggVEFCTEUsIGNoZWNrIHRoZSB1c2Vy IHN1cHBsaWVkIHR1bmluZyBzdHJ1Y3R1cmUgZm9yCi0tICAgcmVhc29uYWJsZSB2YWx1ZXMsIGFu ZCByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBubyBncm9zcyBlcnJvciB3aXRoIGl0LgotLSAgIE90 aGVyd2lzZSwgZGVmaW5pdGl2ZWx5IHJlc2V0IHRoZSBUVU5JTkcgZmllbGQgdG8gc29tZSBhY2Nl cHRhYmxlIGRlZmF1bHQKLS0gICBpbiB0aGUgaGFzaCB0YWJsZSAodGhhdCBpcywgdGhlIHVzZXIg bG9zZXMgdGhlIHJpZ2h0IG9mIGZ1cnRoZXIgbW9kaWZ5aW5nCi0tICAgdHVuaW5nIGFyZ3VtZW50 cyksIGFuZCByZXR1cm4gZmFsc2UuICAqLwotLQotLXN0YXRpYyBib29sCi0tY2hlY2tfdHVuaW5n IChIYXNoX3RhYmxlICp0YWJsZSkKLS17Ci0tICBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nID0g dGFibGUtPnR1bmluZzsKLS0gIGlmICh0dW5pbmcgPT0gJmRlZmF1bHRfdHVuaW5nKQotLSAgICBy ZXR1cm4gdHJ1ZTsKLS0KLS0gIC8qIEJlIGEgYml0IHN0cmljdGVyIHRoYW4gbWF0aGVtYXRpY3Mg d291bGQgcmVxdWlyZSwgc28gdGhhdAotLSAgICAgcm91bmRpbmcgZXJyb3JzIGluIHNpemUgY2Fs Y3VsYXRpb25zIGRvIG5vdCBjYXVzZSBhbGxvY2F0aW9ucyB0bwotLSAgICAgZmFpbCB0byBncm93 IG9yIHNocmluayBhcyB0aGV5IHNob3VsZC4gIFRoZSBzbWFsbGVzdCBhbGxvY2F0aW9uCi0tICAg ICBpcyAxMSAoZHVlIHRvIG5leHRfcHJpbWUncyBhbGdvcml0aG0pLCBzbyBhbiBlcHNpbG9uIG9m IDAuMQotLSAgICAgc2hvdWxkIGJlIGdvb2QgZW5vdWdoLiAgKi8KLS0gIGZsb2F0IGVwc2lsb24g PSAwLjFmOwotLQotLSAgaWYgKGVwc2lsb24gPCB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQKLS0g ICAgICAmJiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgPCAxIC0gZXBzaWxvbgotLSAgICAgICYm IDEgKyBlcHNpbG9uIDwgdHVuaW5nLT5ncm93dGhfZmFjdG9yCi0tICAgICAgJiYgMCA8PSB0dW5p bmctPnNocmlua190aHJlc2hvbGQKLS0gICAgICAmJiB0dW5pbmctPnNocmlua190aHJlc2hvbGQg KyBlcHNpbG9uIDwgdHVuaW5nLT5zaHJpbmtfZmFjdG9yCi0tICAgICAgJiYgdHVuaW5nLT5zaHJp bmtfZmFjdG9yIDw9IDEKLS0gICAgICAmJiB0dW5pbmctPnNocmlua190aHJlc2hvbGQgKyBlcHNp bG9uIDwgdHVuaW5nLT5ncm93dGhfdGhyZXNob2xkKQotLSAgICByZXR1cm4gdHJ1ZTsKLS0KLS0g IHRhYmxlLT50dW5pbmcgPSAmZGVmYXVsdF90dW5pbmc7Ci0tICByZXR1cm4gZmFsc2U7Ci0tfQot LQotLS8qIENvbXB1dGUgdGhlIHNpemUgb2YgdGhlIGJ1Y2tldCBhcnJheSBmb3IgdGhlIGdpdmVu IENBTkRJREFURSBhbmQKLS0gICBUVU5JTkcsIG9yIHJldHVybiAwIGlmIHRoZXJlIGlzIG5vIHBv c3NpYmxlIHdheSB0byBhbGxvY2F0ZSB0aGF0Ci0tICAgbWFueSBlbnRyaWVzLiAgKi8KLS0KLS1z dGF0aWMgc2l6ZV90IF9HTF9BVFRSSUJVVEVfUFVSRQotLWNvbXB1dGVfYnVja2V0X3NpemUgKHNp emVfdCBjYW5kaWRhdGUsIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmcpCi0tewotLSAgaWYgKCF0 dW5pbmctPmlzX25fYnVja2V0cykKLS0gICAgewotLSAgICAgIGZsb2F0IG5ld19jYW5kaWRhdGUg PSBjYW5kaWRhdGUgLyB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQ7Ci0tICAgICAgaWYgKChmbG9h dCkgU0laRV9NQVggPD0gbmV3X2NhbmRpZGF0ZSkKLS0gICAgICAgIGdvdG8gbm9tZW07Ci0tICAg ICAgY2FuZGlkYXRlID0gbmV3X2NhbmRpZGF0ZTsKLS0gICAgfQotLSAgY2FuZGlkYXRlID0gbmV4 dF9wcmltZSAoY2FuZGlkYXRlKTsKLS0gIGlmICh4YWxsb2Nfb3ZlcnNpemVkIChjYW5kaWRhdGUs IHNpemVvZiAoc3RydWN0IGhhc2hfZW50cnkgKikpKQotLSAgICBnb3RvIG5vbWVtOwotLSAgcmV0 dXJuIGNhbmRpZGF0ZTsKLS0KLS0gbm9tZW06Ci0tICBlcnJubyA9IEVOT01FTTsKLS0gIHJldHVy biAwOwotLX0KLS0KLS1IYXNoX3RhYmxlICoKLS1oYXNoX2luaXRpYWxpemUgKHNpemVfdCBjYW5k aWRhdGUsIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmcsCi0tICAgICAgICAgICAgICAgICBIYXNo X2hhc2hlciBoYXNoZXIsIEhhc2hfY29tcGFyYXRvciBjb21wYXJhdG9yLAotLSAgICAgICAgICAg ICAgICAgSGFzaF9kYXRhX2ZyZWVyIGRhdGFfZnJlZXIpCi0tewotLSAgaWYgKGhhc2hlciA9PSBO VUxMKQotLSAgICBoYXNoZXIgPSByYXdfaGFzaGVyOwotLSAgaWYgKGNvbXBhcmF0b3IgPT0gTlVM TCkKLS0gICAgY29tcGFyYXRvciA9IHJhd19jb21wYXJhdG9yOwotLQotLSAgSGFzaF90YWJsZSAq dGFibGUgPSBtYWxsb2MgKHNpemVvZiAqdGFibGUpOwotLSAgaWYgKHRhYmxlID09IE5VTEwpCi0t ICAgIHJldHVybiBOVUxMOwotLQotLSAgaWYgKCF0dW5pbmcpCi0tICAgIHR1bmluZyA9ICZkZWZh dWx0X3R1bmluZzsKLS0gIHRhYmxlLT50dW5pbmcgPSB0dW5pbmc7Ci0tICBpZiAoIWNoZWNrX3R1 bmluZyAodGFibGUpKQotLSAgICB7Ci0tICAgICAgLyogRmFpbCBpZiB0aGUgdHVuaW5nIG9wdGlv bnMgYXJlIGludmFsaWQuICBUaGlzIGlzIHRoZSBvbmx5IG9jY2FzaW9uCi0tICAgICAgICAgd2hl biB0aGUgdXNlciBnZXRzIHNvbWUgZmVlZGJhY2sgYWJvdXQgaXQuICBPbmNlIHRoZSB0YWJsZSBp cyBjcmVhdGVkLAotLSAgICAgICAgIGlmIHRoZSB1c2VyIHByb3ZpZGVzIGludmFsaWQgdHVuaW5n IG9wdGlvbnMsIHdlIHNpbGVudGx5IHJldmVydCB0bwotLSAgICAgICAgIHVzaW5nIHRoZSBkZWZh dWx0cywgYW5kIGlnbm9yZSBmdXJ0aGVyIHJlcXVlc3QgdG8gY2hhbmdlIHRoZSB0dW5pbmcKLS0g ICAgICAgICBvcHRpb25zLiAgKi8KLS0gICAgICBlcnJubyA9IEVJTlZBTDsKLS0gICAgICBnb3Rv IGZhaWw7Ci0tICAgIH0KLS0KLS0gIHRhYmxlLT5uX2J1Y2tldHMgPSBjb21wdXRlX2J1Y2tldF9z aXplIChjYW5kaWRhdGUsIHR1bmluZyk7Ci0tICBpZiAoIXRhYmxlLT5uX2J1Y2tldHMpCi0tICAg IGdvdG8gZmFpbDsKLS0KLS0gIHRhYmxlLT5idWNrZXQgPSBjYWxsb2MgKHRhYmxlLT5uX2J1Y2tl dHMsIHNpemVvZiAqdGFibGUtPmJ1Y2tldCk7Ci0tICBpZiAodGFibGUtPmJ1Y2tldCA9PSBOVUxM KQotLSAgICBnb3RvIGZhaWw7Ci0tICB0YWJsZS0+YnVja2V0X2xpbWl0ID0gdGFibGUtPmJ1Y2tl dCArIHRhYmxlLT5uX2J1Y2tldHM7Ci0tICB0YWJsZS0+bl9idWNrZXRzX3VzZWQgPSAwOwotLSAg dGFibGUtPm5fZW50cmllcyA9IDA7Ci0tCi0tICB0YWJsZS0+aGFzaGVyID0gaGFzaGVyOwotLSAg dGFibGUtPmNvbXBhcmF0b3IgPSBjb21wYXJhdG9yOwotLSAgdGFibGUtPmRhdGFfZnJlZXIgPSBk YXRhX2ZyZWVyOwotLQotLSAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IE5VTEw7Ci0tI2lmIFVT RV9PQlNUQUNLCi0tICBvYnN0YWNrX2luaXQgKCZ0YWJsZS0+ZW50cnlfc3RhY2spOwotLSNlbmRp ZgotLSAgcmV0dXJuIHRhYmxlOwotLQotLSBmYWlsOgotLSAgZnJlZSAodGFibGUpOwotLSAgcmV0 dXJuIE5VTEw7Ci0tfQotLQotLSNpZiAhX0xJQkMKLS12b2lkCi0taGFzaF9jbGVhciAoSGFzaF90 YWJsZSAqdGFibGUpCi0tewotLSAgZm9yIChzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0ID0gdGFi bGUtPmJ1Y2tldDsKLS0gICAgICAgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsKLS0gICAg ICAgYnVja2V0KyspCi0tICAgIHsKLS0gICAgICBpZiAoYnVja2V0LT5kYXRhKQotLSAgICAgICAg ewotLSAgICAgICAgICAvKiBGcmVlIHRoZSBidWNrZXQgb3ZlcmZsb3cuICAqLwotLSAgICAgICAg ICBmb3IgKHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3IgPSBidWNrZXQtPm5leHQ7IGN1cnNvcjsg KQotLSAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAgIGlmICh0YWJsZS0+ZGF0YV9mcmVlcikK LS0gICAgICAgICAgICAgICAgdGFibGUtPmRhdGFfZnJlZXIgKGN1cnNvci0+ZGF0YSk7Ci0tICAg ICAgICAgICAgICBjdXJzb3ItPmRhdGEgPSBOVUxMOwotLQotLSAgICAgICAgICAgICAgc3RydWN0 IGhhc2hfZW50cnkgKm5leHQgPSBjdXJzb3ItPm5leHQ7Ci0tICAgICAgICAgICAgICAvKiBSZWxp bmtpbmcgaXMgZG9uZSBvbmUgZW50cnkgYXQgYSB0aW1lLCBhcyBpdCBpcyB0byBiZSBleHBlY3Rl ZAotLSAgICAgICAgICAgICAgICAgdGhhdCBvdmVyZmxvd3MgYXJlIGVpdGhlciByYXJlIG9yIHNo b3J0LiAgKi8KLS0gICAgICAgICAgICAgIGN1cnNvci0+bmV4dCA9IHRhYmxlLT5mcmVlX2VudHJ5 X2xpc3Q7Ci0tICAgICAgICAgICAgICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gY3Vyc29yOwot LQotLSAgICAgICAgICAgICAgY3Vyc29yID0gbmV4dDsKLS0gICAgICAgICAgICB9Ci0tCi0tICAg ICAgICAgIC8qIEZyZWUgdGhlIGJ1Y2tldCBoZWFkLiAgKi8KLS0gICAgICAgICAgaWYgKHRhYmxl LT5kYXRhX2ZyZWVyKQotLSAgICAgICAgICAgIHRhYmxlLT5kYXRhX2ZyZWVyIChidWNrZXQtPmRh dGEpOwotLSAgICAgICAgICBidWNrZXQtPmRhdGEgPSBOVUxMOwotLSAgICAgICAgICBidWNrZXQt Pm5leHQgPSBOVUxMOwotLSAgICAgICAgfQotLSAgICB9Ci0tCi0tICB0YWJsZS0+bl9idWNrZXRz X3VzZWQgPSAwOwotLSAgdGFibGUtPm5fZW50cmllcyA9IDA7Ci0tfQotLSNlbmRpZgotLQotLXZv aWQKLS1oYXNoX2ZyZWUgKEhhc2hfdGFibGUgKnRhYmxlKQotLXsKLS0gIGludCBzYXZlZF9lcnJu byA9IGVycm5vOwotLQotLSAgLyogQ2FsbCB0aGUgdXNlciBkYXRhX2ZyZWVyIGZ1bmN0aW9uLiAg Ki8KLS0gIGlmICh0YWJsZS0+ZGF0YV9mcmVlciAmJiB0YWJsZS0+bl9lbnRyaWVzKQotLSAgICB7 Ci0tICAgICAgZm9yIChzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsK LS0gICAgICAgICAgIGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7Ci0tICAgICAgICAgICBi dWNrZXQrKykKLS0gICAgICAgIHsKLS0gICAgICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKLS0gICAg ICAgICAgICB7Ci0tICAgICAgICAgICAgICBmb3IgKHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3Ig PSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQotLSAgICAgICAgICAgICAg ICB0YWJsZS0+ZGF0YV9mcmVlciAoY3Vyc29yLT5kYXRhKTsKLS0gICAgICAgICAgICB9Ci0tICAg ICAgICB9Ci0tICAgIH0KLS0KLS0jaWYgVVNFX09CU1RBQ0sKLS0KLS0gIG9ic3RhY2tfZnJlZSAo JnRhYmxlLT5lbnRyeV9zdGFjaywgTlVMTCk7Ci0tCi0tI2Vsc2UKLS0KLS0gIC8qIEZyZWUgYWxs IGJ1Y2tldCBvdmVyZmxvd2VkIGVudHJpZXMuICAqLwotLSAgZm9yIChzdHJ1Y3QgaGFzaF9lbnRy eSAqYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsKLS0gICAgICAgYnVja2V0IDwgdGFibGUtPmJ1Y2tl dF9saW1pdDsKLS0gICAgICAgYnVja2V0KyspCi0tICAgIHsKLS0gICAgICBmb3IgKHN0cnVjdCBo YXNoX2VudHJ5ICpjdXJzb3IgPSBidWNrZXQtPm5leHQ7IGN1cnNvcjsgKQotLSAgICAgICAgewot LSAgICAgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dCA9IGN1cnNvci0+bmV4dDsKLS0gICAg ICAgICAgZnJlZSAoY3Vyc29yKTsKLS0gICAgICAgICAgY3Vyc29yID0gbmV4dDsKLS0gICAgICAg IH0KLS0gICAgfQotLQotLSAgLyogQWxzbyByZWNsYWltIHRoZSBpbnRlcm5hbCBsaXN0IG9mIHBy ZXZpb3VzbHkgZnJlZWQgZW50cmllcy4gICovCi0tICBmb3IgKHN0cnVjdCBoYXNoX2VudHJ5ICpj dXJzb3IgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OyBjdXJzb3I7ICkKLS0gICAgewotLSAgICAg IHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0ID0gY3Vyc29yLT5uZXh0OwotLSAgICAgIGZyZWUgKGN1 cnNvcik7Ci0tICAgICAgY3Vyc29yID0gbmV4dDsKLS0gICAgfQotLQotLSNlbmRpZgotLQotLSAg LyogRnJlZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBoYXNoIHRhYmxlIHN0cnVjdHVyZS4gICovCi0t ICBmcmVlICh0YWJsZS0+YnVja2V0KTsKLS0gIGZyZWUgKHRhYmxlKTsKLS0KLS0gIGVycm5vID0g c2F2ZWRfZXJybm87Ci0tfQotLQotLS8qIEluc2VydGlvbiBhbmQgZGVsZXRpb24uICAqLwotLQot LS8qIEdldCBhIG5ldyBoYXNoIGVudHJ5IGZvciBhIGJ1Y2tldCBvdmVyZmxvdywgcG9zc2libHkg YnkgcmVjeWNsaW5nIGEKLS0gICBwcmV2aW91c2x5IGZyZWVkIG9uZS4gIElmIHRoaXMgaXMgbm90 IHBvc3NpYmxlLCBhbGxvY2F0ZSBhIG5ldyBvbmUuICAqLwotLQotLXN0YXRpYyBzdHJ1Y3QgaGFz aF9lbnRyeSAqCi0tYWxsb2NhdGVfZW50cnkgKEhhc2hfdGFibGUgKnRhYmxlKQotLXsKLS0gIHN0 cnVjdCBoYXNoX2VudHJ5ICpuZXc7Ci0tCi0tICBpZiAodGFibGUtPmZyZWVfZW50cnlfbGlzdCkK LS0gICAgewotLSAgICAgIG5ldyA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7Ci0tICAgICAgdGFi bGUtPmZyZWVfZW50cnlfbGlzdCA9IG5ldy0+bmV4dDsKLS0gICAgfQotLSAgZWxzZQotLSAgICB7 Ci0tI2lmIFVTRV9PQlNUQUNLCi0tICAgICAgbmV3ID0gb2JzdGFja19hbGxvYyAoJnRhYmxlLT5l bnRyeV9zdGFjaywgc2l6ZW9mICpuZXcpOwotLSNlbHNlCi0tICAgICAgbmV3ID0gbWFsbG9jIChz aXplb2YgKm5ldyk7Ci0tI2VuZGlmCi0tICAgIH0KLS0KLS0gIHJldHVybiBuZXc7Ci0tfQotLQot LS8qIEZyZWUgYSBoYXNoIGVudHJ5IHdoaWNoIHdhcyBwYXJ0IG9mIHNvbWUgYnVja2V0IG92ZXJm bG93LAotLSAgIHNhdmluZyBpdCBmb3IgbGF0ZXIgcmVjeWNsaW5nLiAgKi8KLS0KLS1zdGF0aWMg dm9pZAotLWZyZWVfZW50cnkgKEhhc2hfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgaGFzaF9lbnRyeSAq ZW50cnkpCi0tewotLSAgZW50cnktPmRhdGEgPSBOVUxMOwotLSAgZW50cnktPm5leHQgPSB0YWJs ZS0+ZnJlZV9lbnRyeV9saXN0OwotLSAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IGVudHJ5Owot LX0KLS0KLS0vKiBUaGlzIHByaXZhdGUgZnVuY3Rpb24gaXMgdXNlZCB0byBoZWxwIHdpdGggaW5z ZXJ0aW9uIGFuZCBkZWxldGlvbi4gIFdoZW4KLS0gICBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGlu IHRoZSB0YWJsZSwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY29ycmVzcG9uZGluZwotLSAgIHVz ZXIgZGF0YSBhbmQgc2V0ICpCVUNLRVRfSEVBRCB0byB0aGUgaGVhZCBvZiB0aGUgc2VsZWN0ZWQg YnVja2V0LgotLSAgIE90aGVyd2lzZSwgcmV0dXJuIE5VTEwuICBXaGVuIERFTEVURSBpcyB0cnVl IGFuZCBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGluCi0tICAgdGhlIHRhYmxlLCB1bmxpbmsgdGhl IG1hdGNoaW5nIGVudHJ5LiAgKi8KLS0KLS1zdGF0aWMgdm9pZCAqCi0tZmluZF9lbnRyeSAoSGFz aF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5LAotLSAgICAgICAgICAgIHN0cnVjdCBo YXNoX2VudHJ5ICoqYnVja2V0X2hlYWQsIGJvb2wgZGVsZXRlKQotLXsKLS0gIHN0cnVjdCBoYXNo X2VudHJ5ICpidWNrZXQgPSBzYWZlX2hhc2hlciAodGFibGUsIGVudHJ5KTsKLS0KLS0gICpidWNr ZXRfaGVhZCA9IGJ1Y2tldDsKLS0KLS0gIC8qIFRlc3QgZm9yIGVtcHR5IGJ1Y2tldC4gICovCi0t ICBpZiAoYnVja2V0LT5kYXRhID09IE5VTEwpCi0tICAgIHJldHVybiBOVUxMOwotLQotLSAgLyog U2VlIGlmIHRoZSBlbnRyeSBpcyB0aGUgZmlyc3QgaW4gdGhlIGJ1Y2tldC4gICovCi0tICBpZiAo ZW50cnkgPT0gYnVja2V0LT5kYXRhIHx8IHRhYmxlLT5jb21wYXJhdG9yIChlbnRyeSwgYnVja2V0 LT5kYXRhKSkKLS0gICAgewotLSAgICAgIHZvaWQgKmRhdGEgPSBidWNrZXQtPmRhdGE7Ci0tCi0t ICAgICAgaWYgKGRlbGV0ZSkKLS0gICAgICAgIHsKLS0gICAgICAgICAgaWYgKGJ1Y2tldC0+bmV4 dCkKLS0gICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4 dCA9IGJ1Y2tldC0+bmV4dDsKLS0KLS0gICAgICAgICAgICAgIC8qIEJ1bXAgdGhlIGZpcnN0IG92 ZXJmbG93IGVudHJ5IGludG8gdGhlIGJ1Y2tldCBoZWFkLCB0aGVuIHNhdmUKLS0gICAgICAgICAg ICAgICAgIHRoZSBwcmV2aW91cyBmaXJzdCBvdmVyZmxvdyBlbnRyeSBmb3IgbGF0ZXIgcmVjeWNs aW5nLiAgKi8KLS0gICAgICAgICAgICAgICpidWNrZXQgPSAqbmV4dDsKLS0gICAgICAgICAgICAg IGZyZWVfZW50cnkgKHRhYmxlLCBuZXh0KTsKLS0gICAgICAgICAgICB9Ci0tICAgICAgICAgIGVs c2UKLS0gICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICBidWNrZXQtPmRhdGEgPSBOVUxMOwot LSAgICAgICAgICAgIH0KLS0gICAgICAgIH0KLS0KLS0gICAgICByZXR1cm4gZGF0YTsKLS0gICAg fQotLQotLSAgLyogU2NhbiB0aGUgYnVja2V0IG92ZXJmbG93LiAgKi8KLS0gIGZvciAoc3RydWN0 IGhhc2hfZW50cnkgKmN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yLT5uZXh0OyBjdXJzb3IgPSBjdXJz b3ItPm5leHQpCi0tICAgIHsKLS0gICAgICBpZiAoZW50cnkgPT0gY3Vyc29yLT5uZXh0LT5kYXRh Ci0tICAgICAgICAgIHx8IHRhYmxlLT5jb21wYXJhdG9yIChlbnRyeSwgY3Vyc29yLT5uZXh0LT5k YXRhKSkKLS0gICAgICAgIHsKLS0gICAgICAgICAgdm9pZCAqZGF0YSA9IGN1cnNvci0+bmV4dC0+ ZGF0YTsKLS0KLS0gICAgICAgICAgaWYgKGRlbGV0ZSkKLS0gICAgICAgICAgICB7Ci0tICAgICAg ICAgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dCA9IGN1cnNvci0+bmV4dDsKLS0KLS0gICAg ICAgICAgICAgIC8qIFVubGluayB0aGUgZW50cnkgdG8gZGVsZXRlLCB0aGVuIHNhdmUgdGhlIGZy ZWVkIGVudHJ5IGZvciBsYXRlcgotLSAgICAgICAgICAgICAgICAgcmVjeWNsaW5nLiAgKi8KLS0g ICAgICAgICAgICAgIGN1cnNvci0+bmV4dCA9IG5leHQtPm5leHQ7Ci0tICAgICAgICAgICAgICBm cmVlX2VudHJ5ICh0YWJsZSwgbmV4dCk7Ci0tICAgICAgICAgICAgfQotLQotLSAgICAgICAgICBy ZXR1cm4gZGF0YTsKLS0gICAgICAgIH0KLS0gICAgfQotLQotLSAgLyogTm8gZW50cnkgZm91bmQu ICAqLwotLSAgcmV0dXJuIE5VTEw7Ci0tfQotLQotLS8qIEludGVybmFsIGhlbHBlciwgdG8gbW92 ZSBlbnRyaWVzIGZyb20gU1JDIHRvIERTVC4gIEJvdGggdGFibGVzIG11c3QKLS0gICBzaGFyZSB0 aGUgc2FtZSBmcmVlIGVudHJ5IGxpc3QuICBJZiBTQUZFLCBvbmx5IG1vdmUgb3ZlcmZsb3cKLS0g ICBlbnRyaWVzLCBzYXZpbmcgYnVja2V0IGhlYWRzIGZvciBsYXRlciwgc28gdGhhdCBubyBhbGxv Y2F0aW9ucyB3aWxsCi0tICAgb2NjdXIuICBSZXR1cm4gZmFsc2UgKHNldHRpbmcgZXJybm8pIGlm IHRoZSBmcmVlIGVudHJ5IGxpc3QgaXMKLS0gICBleGhhdXN0ZWQgYW5kIGFuIGFsbG9jYXRpb24g ZmFpbHMuICAqLwotLQotLXN0YXRpYyBib29sCi0tdHJhbnNmZXJfZW50cmllcyAoSGFzaF90YWJs ZSAqZHN0LCBIYXNoX3RhYmxlICpzcmMsIGJvb2wgc2FmZSkKLS17Ci0tICBmb3IgKHN0cnVjdCBo YXNoX2VudHJ5ICpidWNrZXQgPSBzcmMtPmJ1Y2tldDsgYnVja2V0IDwgc3JjLT5idWNrZXRfbGlt aXQ7IGJ1Y2tldCsrKQotLSAgICBpZiAoYnVja2V0LT5kYXRhKQotLSAgICAgIHsKLS0gICAgICAg IHZvaWQgKmRhdGE7Ci0tICAgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3X2J1Y2tldDsKLS0K LS0gICAgICAgIC8qIFdpdGhpbiBlYWNoIGJ1Y2tldCwgdHJhbnNmZXIgb3ZlcmZsb3cgZW50cmll cyBmaXJzdCBhbmQKLS0gICAgICAgICAgIHRoZW4gdGhlIGJ1Y2tldCBoZWFkLCB0byBtaW5pbWl6 ZSBtZW1vcnkgcHJlc3N1cmUuICBBZnRlcgotLSAgICAgICAgICAgYWxsLCB0aGUgb25seSB0aW1l IHdlIG1pZ2h0IGFsbG9jYXRlIGlzIHdoZW4gbW92aW5nIHRoZQotLSAgICAgICAgICAgYnVja2V0 IGhlYWQsIGJ1dCBtb3Zpbmcgb3ZlcmZsb3cgZW50cmllcyBmaXJzdCBtYXkgY3JlYXRlCi0tICAg ICAgICAgICBmcmVlIGVudHJpZXMgdGhhdCBjYW4gYmUgcmVjeWNsZWQgYnkgdGhlIHRpbWUgd2Ug ZmluYWxseQotLSAgICAgICAgICAgZ2V0IHRvIHRoZSBidWNrZXQgaGVhZC4gICovCi0tICAgICAg ICBmb3IgKHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3IgPSBidWNrZXQtPm5leHQ7IGN1cnNvcjsg KQotLSAgICAgICAgICB7Ci0tICAgICAgICAgICAgZGF0YSA9IGN1cnNvci0+ZGF0YTsKLS0gICAg ICAgICAgICBuZXdfYnVja2V0ID0gc2FmZV9oYXNoZXIgKGRzdCwgZGF0YSk7Ci0tCi0tICAgICAg ICAgICAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQgPSBjdXJzb3ItPm5leHQ7Ci0tCi0tICAgICAg ICAgICAgaWYgKG5ld19idWNrZXQtPmRhdGEpCi0tICAgICAgICAgICAgICB7Ci0tICAgICAgICAg ICAgICAgIC8qIE1lcmVseSByZWxpbmsgYW4gZXhpc3RpbmcgZW50cnksIHdoZW4gbW92aW5nIGZy b20gYQotLSAgICAgICAgICAgICAgICAgICBidWNrZXQgb3ZlcmZsb3cgaW50byBhIGJ1Y2tldCBv dmVyZmxvdy4gICovCi0tICAgICAgICAgICAgICAgIGN1cnNvci0+bmV4dCA9IG5ld19idWNrZXQt Pm5leHQ7Ci0tICAgICAgICAgICAgICAgIG5ld19idWNrZXQtPm5leHQgPSBjdXJzb3I7Ci0tICAg ICAgICAgICAgICB9Ci0tICAgICAgICAgICAgZWxzZQotLSAgICAgICAgICAgICAgewotLSAgICAg ICAgICAgICAgICAvKiBGcmVlIGFuIGV4aXN0aW5nIGVudHJ5LCB3aGVuIG1vdmluZyBmcm9tIGEg YnVja2V0Ci0tICAgICAgICAgICAgICAgICAgIG92ZXJmbG93IGludG8gYSBidWNrZXQgaGVhZGVy LiAgKi8KLS0gICAgICAgICAgICAgICAgbmV3X2J1Y2tldC0+ZGF0YSA9IGRhdGE7Ci0tICAgICAg ICAgICAgICAgIGRzdC0+bl9idWNrZXRzX3VzZWQrKzsKLS0gICAgICAgICAgICAgICAgZnJlZV9l bnRyeSAoZHN0LCBjdXJzb3IpOwotLSAgICAgICAgICAgICAgfQotLQotLSAgICAgICAgICAgIGN1 cnNvciA9IG5leHQ7Ci0tICAgICAgICAgIH0KLS0gICAgICAgIC8qIE5vdyBtb3ZlIHRoZSBidWNr ZXQgaGVhZC4gIEJlIHN1cmUgdGhhdCBpZiB3ZSBmYWlsIGR1ZSB0bwotLSAgICAgICAgICAgYWxs b2NhdGlvbiBmYWlsdXJlIHRoYXQgdGhlIHNyYyB0YWJsZSBpcyBpbiBhIGNvbnNpc3RlbnQKLS0g ICAgICAgICAgIHN0YXRlLiAgKi8KLS0gICAgICAgIGRhdGEgPSBidWNrZXQtPmRhdGE7Ci0tICAg ICAgICBidWNrZXQtPm5leHQgPSBOVUxMOwotLSAgICAgICAgaWYgKCFzYWZlKQotLSAgICAgICAg ICB7Ci0tICAgICAgICAgICAgbmV3X2J1Y2tldCA9IHNhZmVfaGFzaGVyIChkc3QsIGRhdGEpOwot LQotLSAgICAgICAgICAgIGlmIChuZXdfYnVja2V0LT5kYXRhKQotLSAgICAgICAgICAgICAgewot LSAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBvciByZWN5Y2xlIGFuIGVudHJ5LCB3aGVuIG1v dmluZyBmcm9tIGEgYnVja2V0Ci0tICAgICAgICAgICAgICAgICAgIGhlYWRlciBpbnRvIGEgYnVj a2V0IG92ZXJmbG93LiAgKi8KLS0gICAgICAgICAgICAgICAgc3RydWN0IGhhc2hfZW50cnkgKm5l d19lbnRyeSA9IGFsbG9jYXRlX2VudHJ5IChkc3QpOwotLQotLSAgICAgICAgICAgICAgICBpZiAo bmV3X2VudHJ5ID09IE5VTEwpCi0tICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotLQot LSAgICAgICAgICAgICAgICBuZXdfZW50cnktPmRhdGEgPSBkYXRhOwotLSAgICAgICAgICAgICAg ICBuZXdfZW50cnktPm5leHQgPSBuZXdfYnVja2V0LT5uZXh0OwotLSAgICAgICAgICAgICAgICBu ZXdfYnVja2V0LT5uZXh0ID0gbmV3X2VudHJ5OwotLSAgICAgICAgICAgICAgfQotLSAgICAgICAg ICAgIGVsc2UKLS0gICAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAgICAgLyogTW92ZSBmcm9t IG9uZSBidWNrZXQgaGVhZGVyIHRvIGFub3RoZXIuICAqLwotLSAgICAgICAgICAgICAgICBuZXdf YnVja2V0LT5kYXRhID0gZGF0YTsKLS0gICAgICAgICAgICAgICAgZHN0LT5uX2J1Y2tldHNfdXNl ZCsrOwotLSAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgIGJ1Y2tldC0+ZGF0YSA9IE5VTEw7 Ci0tICAgICAgICAgICAgc3JjLT5uX2J1Y2tldHNfdXNlZC0tOwotLSAgICAgICAgICB9Ci0tICAg ICAgfQotLSAgcmV0dXJuIHRydWU7Ci0tfQotLQotLWJvb2wKLS1oYXNoX3JlaGFzaCAoSGFzaF90 YWJsZSAqdGFibGUsIHNpemVfdCBjYW5kaWRhdGUpCi0tewotLSAgc2l6ZV90IG5ld19zaXplID0g Y29tcHV0ZV9idWNrZXRfc2l6ZSAoY2FuZGlkYXRlLCB0YWJsZS0+dHVuaW5nKTsKLS0KLS0gIGlm ICghbmV3X3NpemUpCi0tICAgIHJldHVybiBmYWxzZTsKLS0gIGlmIChuZXdfc2l6ZSA9PSB0YWJs ZS0+bl9idWNrZXRzKQotLSAgICByZXR1cm4gdHJ1ZTsKLS0KLS0gIEhhc2hfdGFibGUgc3RvcmFn ZTsKLS0gIEhhc2hfdGFibGUgKm5ld190YWJsZSA9ICZzdG9yYWdlOwotLSAgbmV3X3RhYmxlLT5i dWNrZXQgPSBjYWxsb2MgKG5ld19zaXplLCBzaXplb2YgKm5ld190YWJsZS0+YnVja2V0KTsKLS0g IGlmIChuZXdfdGFibGUtPmJ1Y2tldCA9PSBOVUxMKQotLSAgICByZXR1cm4gZmFsc2U7Ci0tICBu ZXdfdGFibGUtPm5fYnVja2V0cyA9IG5ld19zaXplOwotLSAgbmV3X3RhYmxlLT5idWNrZXRfbGlt aXQgPSBuZXdfdGFibGUtPmJ1Y2tldCArIG5ld19zaXplOwotLSAgbmV3X3RhYmxlLT5uX2J1Y2tl dHNfdXNlZCA9IDA7Ci0tICBuZXdfdGFibGUtPm5fZW50cmllcyA9IDA7Ci0tICBuZXdfdGFibGUt PnR1bmluZyA9IHRhYmxlLT50dW5pbmc7Ci0tICBuZXdfdGFibGUtPmhhc2hlciA9IHRhYmxlLT5o YXNoZXI7Ci0tICBuZXdfdGFibGUtPmNvbXBhcmF0b3IgPSB0YWJsZS0+Y29tcGFyYXRvcjsKLS0g IG5ld190YWJsZS0+ZGF0YV9mcmVlciA9IHRhYmxlLT5kYXRhX2ZyZWVyOwotLQotLSAgLyogSW4g b3JkZXIgZm9yIHRoZSB0cmFuc2ZlciB0byBzdWNjZXNzZnVsbHkgY29tcGxldGUsIHdlIG5lZWQK LS0gICAgIGFkZGl0aW9uYWwgb3ZlcmZsb3cgZW50cmllcyB3aGVuIGRpc3RpbmN0IGJ1Y2tldHMg aW4gdGhlIG9sZAotLSAgICAgdGFibGUgY29sbGlkZSBpbnRvIGEgY29tbW9uIGJ1Y2tldCBpbiB0 aGUgbmV3IHRhYmxlLiAgVGhlIHdvcnN0Ci0tICAgICBjYXNlIHBvc3NpYmxlIGlzIGEgaGFzaGVy IHRoYXQgZ2l2ZXMgYSBnb29kIHNwcmVhZCB3aXRoIHRoZSBvbGQKLS0gICAgIHNpemUsIGJ1dCBy ZXR1cm5zIGEgY29uc3RhbnQgd2l0aCB0aGUgbmV3IHNpemU7IGlmIHdlIHdlcmUgdG8KLS0gICAg IGd1YXJhbnRlZSB0YWJsZS0+bl9idWNrZXRzX3VzZWQtMSBmcmVlIGVudHJpZXMgaW4gYWR2YW5j ZSwgdGhlbgotLSAgICAgdGhlIHRyYW5zZmVyIHdvdWxkIGJlIGd1YXJhbnRlZWQgdG8gbm90IGFs bG9jYXRlIG1lbW9yeS4KLS0gICAgIEhvd2V2ZXIsIGZvciBsYXJnZSB0YWJsZXMsIGEgZ3VhcmFu dGVlIG9mIG5vIGZ1cnRoZXIgYWxsb2NhdGlvbgotLSAgICAgaW50cm9kdWNlcyBhIGxvdCBvZiBl eHRyYSBtZW1vcnkgcHJlc3N1cmUsIGFsbCBmb3IgYW4gdW5saWtlbHkKLS0gICAgIGNvcm5lciBj YXNlIChtb3N0IHJlaGFzaGVzIHJlZHVjZSwgcmF0aGVyIHRoYW4gaW5jcmVhc2UsIHRoZQotLSAg ICAgbnVtYmVyIG9mIG92ZXJmbG93IGVudHJpZXMgbmVlZGVkKS4gIFNvLCB3ZSBpbnN0ZWFkIGVu c3VyZSB0aGF0Ci0tICAgICB0aGUgdHJhbnNmZXIgcHJvY2VzcyBjYW4gYmUgcmV2ZXJzZWQgaWYg d2UgaGl0IGEgbWVtb3J5Ci0tICAgICBhbGxvY2F0aW9uIGZhaWx1cmUgbWlkLXRyYW5zZmVyLiAg Ki8KLS0KLS0gIC8qIE1lcmVseSByZXVzZSB0aGUgZXh0cmEgb2xkIHNwYWNlIGludG8gdGhlIG5l dyB0YWJsZS4gICovCi0tI2lmIFVTRV9PQlNUQUNLCi0tICBuZXdfdGFibGUtPmVudHJ5X3N0YWNr ID0gdGFibGUtPmVudHJ5X3N0YWNrOwotLSNlbmRpZgotLSAgbmV3X3RhYmxlLT5mcmVlX2VudHJ5 X2xpc3QgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OwotLQotLSAgaWYgKHRyYW5zZmVyX2VudHJp ZXMgKG5ld190YWJsZSwgdGFibGUsIGZhbHNlKSkKLS0gICAgewotLSAgICAgIC8qIEVudHJpZXMg dHJhbnNmZXJyZWQgc3VjY2Vzc2Z1bGx5OyB0aWUgdXAgdGhlIGxvb3NlIGVuZHMuICAqLwotLSAg ICAgIGZyZWUgKHRhYmxlLT5idWNrZXQpOwotLSAgICAgIHRhYmxlLT5idWNrZXQgPSBuZXdfdGFi bGUtPmJ1Y2tldDsKLS0gICAgICB0YWJsZS0+YnVja2V0X2xpbWl0ID0gbmV3X3RhYmxlLT5idWNr ZXRfbGltaXQ7Ci0tICAgICAgdGFibGUtPm5fYnVja2V0cyA9IG5ld190YWJsZS0+bl9idWNrZXRz OwotLSAgICAgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZCA9IG5ld190YWJsZS0+bl9idWNrZXRzX3Vz ZWQ7Ci0tICAgICAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IG5ld190YWJsZS0+ZnJlZV9lbnRy eV9saXN0OwotLSAgICAgIC8qIHRhYmxlLT5uX2VudHJpZXMgYW5kIHRhYmxlLT5lbnRyeV9zdGFj ayBhbHJlYWR5IGhvbGQgdGhlaXIgdmFsdWUuICAqLwotLSAgICAgIHJldHVybiB0cnVlOwotLSAg ICB9Ci0tCi0tICAvKiBXZSd2ZSBhbGxvY2F0ZWQgbmV3X3RhYmxlLT5idWNrZXQgKGFuZCBwb3Nz aWJseSBzb21lIGVudHJpZXMpLAotLSAgICAgZXhoYXVzdGVkIHRoZSBmcmVlIGxpc3QsIGFuZCBt b3ZlZCBzb21lIGJ1dCBub3QgYWxsIGVudHJpZXMgaW50bwotLSAgICAgbmV3X3RhYmxlLiAgV2Ug bXVzdCB1bmRvIHRoZSBwYXJ0aWFsIG1vdmUgYmVmb3JlIHJldHVybmluZwotLSAgICAgZmFpbHVy ZS4gIFRoZSBvbmx5IHdheSB0byBnZXQgaW50byB0aGlzIHNpdHVhdGlvbiBpcyBpZiBuZXdfdGFi bGUKLS0gICAgIHVzZXMgZmV3ZXIgYnVja2V0cyB0aGFuIHRoZSBvbGQgdGFibGUsIHNvIHdlIHdp bGwgcmVjbGFpbSBzb21lCi0tICAgICBmcmVlIGVudHJpZXMgYXMgb3ZlcmZsb3dzIGluIHRoZSBu ZXcgdGFibGUgYXJlIHB1dCBiYWNrIGludG8KLS0gICAgIGRpc3RpbmN0IGJ1Y2tldHMgaW4gdGhl IG9sZCB0YWJsZS4KLS0KLS0gICAgIFRoZXJlIGFyZSBzb21lIHBhdGhvbG9naWNhbCBjYXNlcyB3 aGVyZSBhIHNpbmdsZSBwYXNzIHRocm91Z2ggdGhlCi0tICAgICB0YWJsZSByZXF1aXJlcyBtb3Jl IGludGVybWVkaWF0ZSBvdmVyZmxvdyBlbnRyaWVzIHRoYW4gdXNpbmcgdHdvCi0tICAgICBwYXNz ZXMuICBUd28gcGFzc2VzIGdpdmUgd29yc2UgY2FjaGUgcGVyZm9ybWFuY2UgYW5kIHRha2VzCi0t ICAgICBsb25nZXIsIGJ1dCBhdCB0aGlzIHBvaW50LCB3ZSdyZSBhbHJlYWR5IG91dCBvZiBtZW1v cnksIHNvIHNsb3cKLS0gICAgIGFuZCBzYWZlIGlzIGJldHRlciB0aGFuIGZhaWx1cmUuICAqLwot LSAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87Ci0tICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0g bmV3X3RhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7Ci0tICBpZiAoISAodHJhbnNmZXJfZW50cmllcyAo dGFibGUsIG5ld190YWJsZSwgdHJ1ZSkKLS0gICAgICAgICAmJiB0cmFuc2Zlcl9lbnRyaWVzICh0 YWJsZSwgbmV3X3RhYmxlLCBmYWxzZSkpKQotLSAgICBhYm9ydCAoKTsKLS0gIC8qIHRhYmxlLT5u X2VudHJpZXMgYWxyZWFkeSBob2xkcyBpdHMgdmFsdWUuICAqLwotLSAgZnJlZSAobmV3X3RhYmxl LT5idWNrZXQpOwotLSAgZXJybm8gPSBzYXZlZF9lcnJubzsKLS0gIHJldHVybiBmYWxzZTsKLS19 Ci0tCi0taW50Ci0taGFzaF9pbnNlcnRfaWZfYWJzZW50IChIYXNoX3RhYmxlICp0YWJsZSwgdm9p ZCBjb25zdCAqZW50cnksCi0tICAgICAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICoqbWF0 Y2hlZF9lbnQpCi0tewotLQotLSAgLyogVGhlIGNhbGxlciBjYW5ub3QgaW5zZXJ0IGEgTlVMTCBl bnRyeSwgc2luY2UgaGFzaF9sb29rdXAgcmV0dXJucyBOVUxMCi0tICAgICB0byBpbmRpY2F0ZSAi bm90IGZvdW5kIiwgYW5kIGZpbmRfZW50cnkgdXNlcyAiYnVja2V0LT5kYXRhID09IE5VTEwiCi0t ICAgICB0byBpbmRpY2F0ZSBhbiBlbXB0eSBidWNrZXQuICAqLwotLSAgaWYgKCEgZW50cnkpCi0t ICAgIGFib3J0ICgpOwotLQotLSAgLyogSWYgdGhlcmUncyBhIG1hdGNoaW5nIGVudHJ5IGFscmVh ZHkgaW4gdGhlIHRhYmxlLCByZXR1cm4gdGhhdC4gICovCi0tICBzdHJ1Y3QgaGFzaF9lbnRyeSAq YnVja2V0OwotLSAgdm9pZCAqZGF0YSA9IGZpbmRfZW50cnkgKHRhYmxlLCBlbnRyeSwgJmJ1Y2tl dCwgZmFsc2UpOwotLSAgaWYgKGRhdGEgIT0gTlVMTCkKLS0gICAgewotLSAgICAgIGlmIChtYXRj aGVkX2VudCkKLS0gICAgICAgICptYXRjaGVkX2VudCA9IGRhdGE7Ci0tICAgICAgcmV0dXJuIDA7 Ci0tICAgIH0KLS0KLS0gIC8qIElmIHRoZSBncm93dGggdGhyZXNob2xkIG9mIHRoZSBidWNrZXRz IGluIHVzZSBoYXMgYmVlbiByZWFjaGVkLCBpbmNyZWFzZQotLSAgICAgdGhlIHRhYmxlIHNpemUg YW5kIHJlaGFzaC4gIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gY2hlY2tpbmcgdGhlIG51bWJlciBvZgot LSAgICAgZW50cmllczogIGlmIHRoZSBoYXNoaW5nIGZ1bmN0aW9uIGlzIGlsbC1jb25kaXRpb25l ZCwgcmVoYXNoaW5nIGlzIG5vdAotLSAgICAgbGlrZWx5IHRvIGltcHJvdmUgaXQuICAqLwotLQot LSAgaWYgKHRhYmxlLT5uX2J1Y2tldHNfdXNlZAotLSAgICAgID4gdGFibGUtPnR1bmluZy0+Z3Jv d3RoX3RocmVzaG9sZCAqIHRhYmxlLT5uX2J1Y2tldHMpCi0tICAgIHsKLS0gICAgICAvKiBDaGVj ayBtb3JlIGZ1bGx5LCBiZWZvcmUgc3RhcnRpbmcgcmVhbCB3b3JrLiAgSWYgdHVuaW5nIGFyZ3Vt ZW50cwotLSAgICAgICAgIGJlY2FtZSBpbnZhbGlkLCB0aGUgc2Vjb25kIGNoZWNrIHdpbGwgcmVs eSBvbiBwcm9wZXIgZGVmYXVsdHMuICAqLwotLSAgICAgIGNoZWNrX3R1bmluZyAodGFibGUpOwot LSAgICAgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKLS0gICAgICAgICAgPiB0YWJsZS0+dHVu aW5nLT5ncm93dGhfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKLS0gICAgICAgIHsKLS0g ICAgICAgICAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZyA9IHRhYmxlLT50dW5pbmc7Ci0tICAg ICAgICAgIGZsb2F0IGNhbmRpZGF0ZSA9Ci0tICAgICAgICAgICAgKHR1bmluZy0+aXNfbl9idWNr ZXRzCi0tICAgICAgICAgICAgID8gKHRhYmxlLT5uX2J1Y2tldHMgKiB0dW5pbmctPmdyb3d0aF9m YWN0b3IpCi0tICAgICAgICAgICAgIDogKHRhYmxlLT5uX2J1Y2tldHMgKiB0dW5pbmctPmdyb3d0 aF9mYWN0b3IKLS0gICAgICAgICAgICAgICAgKiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQpKTsK LS0KLS0gICAgICAgICAgaWYgKChmbG9hdCkgU0laRV9NQVggPD0gY2FuZGlkYXRlKQotLSAgICAg ICAgICAgIHsKLS0gICAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOwotLSAgICAgICAgICAgICAg cmV0dXJuIC0xOwotLSAgICAgICAgICAgIH0KLS0KLS0gICAgICAgICAgLyogSWYgdGhlIHJlaGFz aCBmYWlscywgYXJyYW5nZSB0byByZXR1cm4gTlVMTC4gICovCi0tICAgICAgICAgIGlmICghaGFz aF9yZWhhc2ggKHRhYmxlLCBjYW5kaWRhdGUpKQotLSAgICAgICAgICAgIHJldHVybiAtMTsKLS0K LS0gICAgICAgICAgLyogVXBkYXRlIHRoZSBidWNrZXQgd2UgYXJlIGludGVyZXN0ZWQgaW4uICAq LwotLSAgICAgICAgICBpZiAoZmluZF9lbnRyeSAodGFibGUsIGVudHJ5LCAmYnVja2V0LCBmYWxz ZSkgIT0gTlVMTCkKLS0gICAgICAgICAgICBhYm9ydCAoKTsKLS0gICAgICAgIH0KLS0gICAgfQot LQotLSAgLyogRU5UUlkgaXMgbm90IG1hdGNoZWQsIGl0IHNob3VsZCBiZSBpbnNlcnRlZC4gICov Ci0tCi0tICBpZiAoYnVja2V0LT5kYXRhKQotLSAgICB7Ci0tICAgICAgc3RydWN0IGhhc2hfZW50 cnkgKm5ld19lbnRyeSA9IGFsbG9jYXRlX2VudHJ5ICh0YWJsZSk7Ci0tCi0tICAgICAgaWYgKG5l d19lbnRyeSA9PSBOVUxMKQotLSAgICAgICAgcmV0dXJuIC0xOwotLQotLSAgICAgIC8qIEFkZCBF TlRSWSBpbiB0aGUgb3ZlcmZsb3cgb2YgdGhlIGJ1Y2tldC4gICovCi0tCi0tICAgICAgbmV3X2Vu dHJ5LT5kYXRhID0gKHZvaWQgKikgZW50cnk7Ci0tICAgICAgbmV3X2VudHJ5LT5uZXh0ID0gYnVj a2V0LT5uZXh0OwotLSAgICAgIGJ1Y2tldC0+bmV4dCA9IG5ld19lbnRyeTsKLS0gICAgICB0YWJs ZS0+bl9lbnRyaWVzKys7Ci0tICAgICAgcmV0dXJuIDE7Ci0tICAgIH0KLS0KLS0gIC8qIEFkZCBF TlRSWSByaWdodCBpbiB0aGUgYnVja2V0IGhlYWQuICAqLwotLQotLSAgYnVja2V0LT5kYXRhID0g KHZvaWQgKikgZW50cnk7Ci0tICB0YWJsZS0+bl9lbnRyaWVzKys7Ci0tICB0YWJsZS0+bl9idWNr ZXRzX3VzZWQrKzsKLS0KLS0gIHJldHVybiAxOwotLX0KLS0KLS12b2lkICoKLS1oYXNoX2luc2Vy dCAoSGFzaF90YWJsZSAqdGFibGUsIHZvaWQgY29uc3QgKmVudHJ5KQotLXsKLS0gIHZvaWQgY29u c3QgKm1hdGNoZWRfZW50OwotLSAgaW50IGVyciA9IGhhc2hfaW5zZXJ0X2lmX2Fic2VudCAodGFi bGUsIGVudHJ5LCAmbWF0Y2hlZF9lbnQpOwotLSAgcmV0dXJuIChlcnIgPT0gLTEKLS0gICAgICAg ICAgPyBOVUxMCi0tICAgICAgICAgIDogKHZvaWQgKikgKGVyciA9PSAwID8gbWF0Y2hlZF9lbnQg OiBlbnRyeSkpOwotLX0KLS0KLS12b2lkICoKLS1oYXNoX3JlbW92ZSAoSGFzaF90YWJsZSAqdGFi bGUsIGNvbnN0IHZvaWQgKmVudHJ5KQotLXsKLS0gIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7 Ci0tICB2b2lkICpkYXRhID0gZmluZF9lbnRyeSAodGFibGUsIGVudHJ5LCAmYnVja2V0LCB0cnVl KTsKLS0gIGlmICghZGF0YSkKLS0gICAgcmV0dXJuIE5VTEw7Ci0tCi0tICB0YWJsZS0+bl9lbnRy aWVzLS07Ci0tICBpZiAoIWJ1Y2tldC0+ZGF0YSkKLS0gICAgewotLSAgICAgIHRhYmxlLT5uX2J1 Y2tldHNfdXNlZC0tOwotLQotLSAgICAgIC8qIElmIHRoZSBzaHJpbmsgdGhyZXNob2xkIG9mIHRo ZSBidWNrZXRzIGluIHVzZSBoYXMgYmVlbiByZWFjaGVkLAotLSAgICAgICAgIHJlaGFzaCBpbnRv IGEgc21hbGxlciB0YWJsZS4gICovCi0tCi0tICAgICAgaWYgKHRhYmxlLT5uX2J1Y2tldHNfdXNl ZAotLSAgICAgICAgICA8IHRhYmxlLT50dW5pbmctPnNocmlua190aHJlc2hvbGQgKiB0YWJsZS0+ bl9idWNrZXRzKQotLSAgICAgICAgewotLSAgICAgICAgICAvKiBDaGVjayBtb3JlIGZ1bGx5LCBi ZWZvcmUgc3RhcnRpbmcgcmVhbCB3b3JrLiAgSWYgdHVuaW5nIGFyZ3VtZW50cwotLSAgICAgICAg ICAgICBiZWNhbWUgaW52YWxpZCwgdGhlIHNlY29uZCBjaGVjayB3aWxsIHJlbHkgb24gcHJvcGVy IGRlZmF1bHRzLiAgKi8KLS0gICAgICAgICAgY2hlY2tfdHVuaW5nICh0YWJsZSk7Ci0tICAgICAg ICAgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKLS0gICAgICAgICAgICAgIDwgdGFibGUtPnR1 bmluZy0+c2hyaW5rX3RocmVzaG9sZCAqIHRhYmxlLT5uX2J1Y2tldHMpCi0tICAgICAgICAgICAg ewotLSAgICAgICAgICAgICAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZyA9IHRhYmxlLT50dW5p bmc7Ci0tICAgICAgICAgICAgICBzaXplX3QgY2FuZGlkYXRlID0KLS0gICAgICAgICAgICAgICAg KHR1bmluZy0+aXNfbl9idWNrZXRzCi0tICAgICAgICAgICAgICAgICA/IHRhYmxlLT5uX2J1Y2tl dHMgKiB0dW5pbmctPnNocmlua19mYWN0b3IKLS0gICAgICAgICAgICAgICAgIDogKHRhYmxlLT5u X2J1Y2tldHMgKiB0dW5pbmctPnNocmlua19mYWN0b3IKLS0gICAgICAgICAgICAgICAgICAgICog dHVuaW5nLT5ncm93dGhfdGhyZXNob2xkKSk7Ci0tCi0tICAgICAgICAgICAgICBpZiAoIWhhc2hf cmVoYXNoICh0YWJsZSwgY2FuZGlkYXRlKSkKLS0gICAgICAgICAgICAgICAgewotLSAgICAgICAg ICAgICAgICAgIC8qIEZhaWx1cmUgdG8gYWxsb2NhdGUgbWVtb3J5IGluIGFuIGF0dGVtcHQgdG8K LS0gICAgICAgICAgICAgICAgICAgICBzaHJpbmsgdGhlIHRhYmxlIGlzIG5vdCBmYXRhbC4gIEJ1 dCBzaW5jZSBtZW1vcnkKLS0gICAgICAgICAgICAgICAgICAgICBpcyBsb3csIHdlIGNhbiBhdCBs ZWFzdCBiZSBraW5kIGFuZCBmcmVlIGFueQotLSAgICAgICAgICAgICAgICAgICAgIHNwYXJlIGVu dHJpZXMsIHJhdGhlciB0aGFuIGtlZXBpbmcgdGhlbSB0aWVkIHVwCi0tICAgICAgICAgICAgICAg ICAgICAgaW4gdGhlIGZyZWUgZW50cnkgbGlzdC4gICovCi0tI2lmICEgVVNFX09CU1RBQ0sKLS0g ICAgICAgICAgICAgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yID0gdGFibGUtPmZyZWVf ZW50cnlfbGlzdDsKLS0gICAgICAgICAgICAgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dDsK LS0gICAgICAgICAgICAgICAgICB3aGlsZSAoY3Vyc29yKQotLSAgICAgICAgICAgICAgICAgICAg ewotLSAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gY3Vyc29yLT5uZXh0OwotLSAgICAgICAg ICAgICAgICAgICAgICBmcmVlIChjdXJzb3IpOwotLSAgICAgICAgICAgICAgICAgICAgICBjdXJz b3IgPSBuZXh0OwotLSAgICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgIHRh YmxlLT5mcmVlX2VudHJ5X2xpc3QgPSBOVUxMOwotLSNlbmRpZgotLSAgICAgICAgICAgICAgICB9 Ci0tICAgICAgICAgICAgfQotLSAgICAgICAgfQotLSAgICB9Ci0tCi0tICByZXR1cm4gZGF0YTsK LS19Ci0tCi0tLyogVGVzdGluZy4gICovCi0tCi0tI2lmIFRFU1RJTkcKLS0KLS12b2lkCi0taGFz aF9wcmludCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCi0tewotLSAgZm9yIChzdHJ1Y3QgaGFz aF9lbnRyeSAqYnVja2V0ID0gKHN0cnVjdCBoYXNoX2VudHJ5ICopIHRhYmxlLT5idWNrZXQ7Ci0t ICAgICAgIGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7Ci0tICAgICAgIGJ1Y2tldCsrKQot LSAgICB7Ci0tICAgICAgaWYgKGJ1Y2tldCkKLS0gICAgICAgIHByaW50ZiAoIiVsdTpcbiIsICh1 bnNpZ25lZCBsb25nIGludCkgKGJ1Y2tldCAtIHRhYmxlLT5idWNrZXQpKTsKLS0KLS0gICAgICBm b3IgKHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0g Y3Vyc29yLT5uZXh0KQotLSAgICAgICAgewotLSAgICAgICAgICBjaGFyIGNvbnN0ICpzID0gY3Vy c29yLT5kYXRhOwotLSAgICAgICAgICAvKiBGSVhNRSAqLwotLSAgICAgICAgICBpZiAocykKLS0g ICAgICAgICAgICBwcmludGYgKCIgICVzXG4iLCBzKTsKLS0gICAgICAgIH0KLS0gICAgfQotLX0K LS0KLS0jZW5kaWYgLyogVEVTVElORyAqLwotZGlmZiAtLWdpdCBhL21pc2MvbmV4dC1wcmltZS5j IGIvbWlzYy9uZXh0LXByaW1lLmMKLWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggNjJm YmY5NGE0N2NhZjE3NC4uMDAwMDAwMDAwMDAwMDAwMAotLS0tIGEvbWlzYy9uZXh0LXByaW1lLmMK LSsrKyAvZGV2L251bGwKLUBAIC0xLDY0ICswLDAgQEAKLS0vKiBGaW5kaW5nIHRoZSBuZXh0IHBy aW1lID49IGEgZ2l2ZW4gc21hbGwgaW50ZWdlci4KLS0gICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAy NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLS0KLS0gICBUaGlzIGZpbGUgaXMgZnJl ZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotLSAgIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzCi0tICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIuMSBvZiB0aGUKLS0gICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgotLQotLSAgIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotLSAgIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotLQotLSAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQotLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0tCi0tI2luY2x1ZGUgPGNv bmZpZy5oPgotLSNpZmRlZiBfTElCQwotLSMgaW5jbHVkZSA8c3RkYm9vbC5oPgotLSNlbmRpZgot LQotLS8qIFNwZWNpZmljYXRpb24uICAqLwotLSNpbmNsdWRlICJuZXh0LXByaW1lLmgiCi0tCi0t I2luY2x1ZGUgPHN0ZGludC5oPiAvKiBmb3IgU0laRV9NQVggKi8KLS0KLS0vKiBSZXR1cm4gdHJ1 ZSBpZiBDQU5ESURBVEUgaXMgYSBwcmltZSBudW1iZXIgb3IgMS4KLS0gICBDQU5ESURBVEUgc2hv dWxkIGJlIGFuIG9kZCBudW1iZXIgPj0gMS4gICovCi0tc3RhdGljIGJvb2wgX0dMX0FUVFJJQlVU RV9DT05TVAotLWlzX3ByaW1lIChzaXplX3QgY2FuZGlkYXRlKQotLXsKLS0gIHNpemVfdCBkaXZp c29yID0gMzsKLS0gIHNpemVfdCBzcXVhcmUgPSBkaXZpc29yICogZGl2aXNvcjsKLS0KLS0gIGZv ciAoOzspCi0tICAgIHsKLS0gICAgICBpZiAoc3F1YXJlID4gY2FuZGlkYXRlKQotLSAgICAgICAg cmV0dXJuIHRydWU7Ci0tICAgICAgaWYgKChjYW5kaWRhdGUgJSBkaXZpc29yKSA9PSAwKQotLSAg ICAgICAgcmV0dXJuIGZhbHNlOwotLSAgICAgIC8qIEluY3JlbWVudCBkaXZpc29yIGJ5IDIuICAq LwotLSAgICAgIGRpdmlzb3IrKzsKLS0gICAgICBzcXVhcmUgKz0gNCAqIGRpdmlzb3I7Ci0tICAg ICAgZGl2aXNvcisrOwotLSAgICB9Ci0tfQotLQotLXNpemVfdCBfR0xfQVRUUklCVVRFX0NPTlNU Ci0tbmV4dF9wcmltZSAoc2l6ZV90IGNhbmRpZGF0ZSkKLS17Ci0tI2lmICFkZWZpbmVkIElOX0xJ QkdFVFRFWFRMSUIKLS0gIC8qIFNraXAgc21hbGwgcHJpbWVzLiAgKi8KLS0gIGlmIChjYW5kaWRh dGUgPCAxMCkKLS0gICAgY2FuZGlkYXRlID0gMTA7Ci0tI2VuZGlmCi0tCi0tICAvKiBNYWtlIGl0 IGRlZmluaXRlbHkgb2RkLiAgKi8KLS0gIGNhbmRpZGF0ZSB8PSAxOwotLQotLSAgd2hpbGUgKFNJ WkVfTUFYICE9IGNhbmRpZGF0ZSAmJiAhaXNfcHJpbWUgKGNhbmRpZGF0ZSkpCi0tICAgIGNhbmRp ZGF0ZSArPSAyOwotLQotLSAgcmV0dXJuIGNhbmRpZGF0ZTsKLS19Ci1kaWZmIC0tZ2l0IGEvc3lz ZGVwcy9tYWNoL2h1cmQvb3BlbmRpci5jIGIvc3lzZGVwcy9tYWNoL2h1cmQvb3BlbmRpci5jCi1p bmRleCBlNjEwMjM2YTU4M2Q2NTQ3Li5lZTAwNWNjMzcxNjlmNDFmIDEwMDY0NAotLS0tIGEvc3lz ZGVwcy9tYWNoL2h1cmQvb3BlbmRpci5jCi0rKysgYi9zeXNkZXBzL21hY2gvaHVyZC9vcGVuZGly LmMKLUBAIC02NiwxNSArNjYsMTQgQEAgX2h1cmRfZmRfb3BlbmRpciAoc3RydWN0IGh1cmRfZmQg KmQpCi0gCi0gCi0gRElSICoKLS1fX29wZW5kaXJhdCAoaW50IGRmZCwgY29uc3QgY2hhciAqbmFt ZSwgaW50IGV4dHJhX2ZsYWdzLCBpbnQgKnBuZXdfZmQpCi0rX19vcGVuZGlyYXQgKGludCBkZmQs IGNvbnN0IGNoYXIgKm5hbWUpCi0gewotICAgaWYgKG5hbWVbMF0gPT0gJ1wwJykKLSAgICAgLyog UE9TSVguMS0xOTkwIHNheXMgYW4gZW1wdHkgbmFtZSBnZXRzIEVOT0VOVDsKLSAgICAgICAgYnV0 IGBvcGVuJyBtaWdodCBsaWtlIGl0IGZpbmUuICAqLwotICAgICByZXR1cm4gX19odXJkX2ZhaWwg KEVOT0VOVCksIE5VTEw7Ci0gCi0tICBpbnQgZmxhZ3MgPSBPX1JET05MWSB8IE9fTk9OQkxPQ0sg fCBPX0RJUkVDVE9SWSB8IE9fQ0xPRVhFQwotLSAgICB8IGV4dHJhX2ZsYWdzOwotKyAgaW50IGZs YWdzID0gT19SRE9OTFkgfCBPX05PTkJMT0NLIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUM7Ci0g ICBpbnQgZmQ7Ci0gI2lmIElTX0lOIChydGxkKQotICAgYXNzZXJ0IChkZmQgPT0gQVRfRkRDV0Qp OwotQEAgLTg5LDggKzg4LDYgQEAgX19vcGVuZGlyYXQgKGludCBkZmQsIGNvbnN0IGNoYXIgKm5h bWUsIGludCBleHRyYV9mbGFncywgaW50ICpwbmV3X2ZkKQotICAgRElSICpkaXJwID0gX2h1cmRf ZmRfb3BlbmRpciAoX2h1cmRfZmRfZ2V0IChmZCkpOwotICAgaWYgKGRpcnAgPT0gTlVMTCkKLSAg ICAgX19jbG9zZSAoZmQpOwotLSAgZWxzZSBpZiAocG5ld19mZCAhPSBOVUxMKQotLSAgICAqcG5l d19mZCA9IGZkOwotIAotICAgcmV0dXJuIGRpcnA7Ci0gfQotZGlmZiAtLWdpdCBhL3N5c2RlcHMv dW5peC9zeXN2L2xpbnV4L29wZW5kaXIuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L29wZW5k aXIuYwotaW5kZXggOWM0MWE4ZmYzZTc4YmE1Ny4uY2VhYWVmZTJiYmJkNzRhNyAxMDA2NDQKLS0t LSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L29wZW5kaXIuYwotKysrIGIvc3lzZGVwcy91bml4 L3N5c3YvbGludXgvb3BlbmRpci5jCi1AQCAtNjYsMjQgKzY2LDEyIEBAIG9wZW5kaXJfdGFpbCAo aW50IGZkKQotIAotICNpZiBJU19JTiAobGliYykKLSBESVIgKgotLV9fb3BlbmRpcmF0IChpbnQg ZGZkLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZXh0cmFfZmxhZ3MsIGludCAqcG5ld19mZCkKLStf X29wZW5kaXJhdCAoaW50IGRmZCwgY29uc3QgY2hhciAqbmFtZSkKLSB7Ci0gICBpZiAoX19nbGli Y191bmxpa2VseSAoaW52YWxpZF9uYW1lIChuYW1lKSkpCi0gICAgIHJldHVybiBOVUxMOwotIAot LSAgaW50IG9wZW5fb2ZsYWdzID0gb3BlbmRpcl9vZmxhZ3MgfCBleHRyYV9mbGFnczsKLS0gIGlu dCBuZXdfZmQgPSBfX29wZW5hdF9ub2NhbmNlbCAoZGZkLCBuYW1lLCBvcGVuX29mbGFncyk7Ci0t ICBpZiAobmV3X2ZkIDwgMCkKLS0gICAgcmV0dXJuIE5VTEw7Ci0tICBESVIgKmRpcnAgPSBvcGVu ZGlyX3RhaWwgKG5ld19mZCk7Ci0tICBpZiAoZGlycCA9PSBOVUxMKQotLSAgICB7Ci0tICAgICAg X19jbG9zZV9ub2NhbmNlbF9ub3N0YXR1cyAobmV3X2ZkKTsKLS0gICAgICByZXR1cm4gTlVMTDsK LS0gICAgfQotLSAgZWxzZSBpZiAocG5ld19mZCAhPSBOVUxMKQotLSAgICAqcG5ld19mZCA9IG5l d19mZDsKLS0gIHJldHVybiBkaXJwOwotKyAgcmV0dXJuIG9wZW5kaXJfdGFpbCAoX19vcGVuYXRf bm9jYW5jZWwgKGRmZCwgbmFtZSwgb3BlbmRpcl9vZmxhZ3MpKTsKLSB9Ci0gI2VuZGlmCi0gCi0t LSAKLTIuNTMuMAotCgpkaWZmIC0tZ2l0IGEvZ2xpYmMuc3BlYyBiL2dsaWJjLnNwZWMKaW5kZXgg MzI2YzgwOS4uNzcxYzY3OSAxMDA2NDQKLS0tIGEvZ2xpYmMuc3BlYworKysgYi9nbGliYy5zcGVj CkBAIC0xLDQgKzEsNCBAQAotJWdsb2JhbCBnbGliY3NyY2RpciBnbGliYy0yLjQ0LjkwMDAtOTUt ZzUzZTVmMDJhNmIKKyVnbG9iYWwgZ2xpYmNzcmNkaXIgZ2xpYmMtMi40NC45MDAwLTIwMS1nMDRh Mzk5NTY1MAogJWdsb2JhbCBnbGliY3ZlcnNpb24gMi40NC45MDAwCiAjIFByZS1yZWxlYXNlIHRh cmJhbGxzIGFyZSBwdWxsZWQgaW4gZnJvbSBnaXQgdXNpbmcgYSBjb21tYW5kIHRoYXQgaXMKICMg ZWZmZWN0aXZlbHk6CkBAIC0xNTIsNyArMTUyLDcgQEAgVmVyc2lvbjogJXtnbGliY3ZlcnNpb259 CiAjIC0gSXQgYWxsb3dzIHVzaW5nIHRoZSBSZWxlYXNlIG51bWJlciB3aXRob3V0IHRoZSAlJWRp c3QgdGFnIGluIHRoZSBkZXBlbmRlbmN5CiAjICAgZ2VuZXJhdG9yIHRvIG1ha2UgdGhlIGdlbmVy YXRlZCByZXF1aXJlcyBpbnRlcmNoYW5nZWFibGUgYmV0d2VlbiBSYXdoaWRlCiAjICAgYW5kIEVM TiAoLmVsbllZIDwgLmZjWFgpLgotJWdsb2JhbCBiYXNlcmVsZWFzZSAyCislZ2xvYmFsIGJhc2Vy ZWxlYXNlIDMKIFJlbGVhc2U6ICV7YmFzZXJlbGVhc2V9JXs/ZGlzdH0KIAogIyBMaWNlbnNlczoK QEAgLTQwMSw4ICs0MDEsNiBAQCBycG0uZGVmaW5lKCJfX2RlYnVnX2luc3RhbGxfcG9zdCBiYXNo ICIgLi4gd3JhcHBlcgogUGF0Y2gxMzogZ2xpYmMtZmVkb3JhLWxvY2FsZWRhdGEtcmg2MTkwOC5w YXRjaAogUGF0Y2gxNzogZ2xpYmMtY3MtcGF0aC5wYXRjaAogUGF0Y2gxODogZ2xpYmMtcmgyNDI2 ODI1LnBhdGNoCi1QYXRjaDE5OiBnbGliYy1yaDI0NTcxODMtMS5wYXRjaAotUGF0Y2gyMDogZ2xp YmMtcmgyNDU3MTgzLTIucGF0Y2gKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIENvbnRpbnVl ZCBsaXN0IG9mIGNvcmUgImdsaWJjIiBwYWNrYWdlIGluZm9ybWF0aW9uOgpAQCAtMjQ3OSw2ICsy NDc3LDExOSBAQCB1cGRhdGVfZ2NvbnZfbW9kdWxlc19jYWNoZSAoKQogJWVuZGlmCiAKICVjaGFu Z2Vsb2cKKyogVGh1IFNlcCAyNCAyMDI2IEZyw6lkw6lyaWMgQsOpcmF0IDxmYmVyYXRAcmVkaGF0 LmNvbT4gLSAyLjQ0LjkwMDAtMworLSBBdXRvLXN5bmMgd2l0aCB1cHN0cmVhbSBicmFuY2ggbWFz dGVyLAorICBjb21taXQgMDRhMzk5NTY1MGVjMTgxZTk4Yjc2OGZlZjU5ZjFhZDIyOGE4N2JlNToK Ky0gYWR2aXNvcmllczogZml4IHRhZyBmb3IgQ1ZFIGluIFNBLTIwMjYtMDAyMyAoUm9sZiBFaWtl IEJlZXIpCistIFVwZGF0ZSBDVlNTdjMuMSBzY29yZSBmb3IgR0xJQkMtU0EtMjAyNi0wMDIyIChD YXJsb3MgTydEb25lbGwpCistIFB1Ymxpc2ggQ1ZFLTIwMjYtOTU4MTggYWR2aXNvcnkgKENhcmxv cyBPJ0RvbmVsbCkKKy0gUHVibGlzaCBDVkUtMjAyNi04NjgwNSBhZHZpc29yeSAoQ2FybG9zIE8n RG9uZWxsKQorLSBlbGY6IEZpeCBsZC5zbyBTSUdTRUdWIGluIHRyYWNlIG1vZGUgd2l0aCB1bnJl c29sdmVkIFRMUyBzeW1ib2xzIChCWiAzNDUzMikgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKKy0gbnB0 bDogUmV0cnkgU0lHU0VUWElEIGRlbGl2ZXJ5IG9uIEVBR0FJTiBpbiBzZXR4aWQgKGJ1ZyAyMTEw OCkgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKKy0gbWF0aDogU3luYyB0Z2FtbWEgd2l0aCBDT1JFLU1B VEggKEFkaGVtZXJ2YWwgWmFuZWxsYSkKKy0gbWF0aDogU3luYyBleHAxMG0xZiB3aXRoIENPUkUt TUFUSCAoQWRoZW1lcnZhbCBaYW5lbGxhKQorLSBtYXRoOiBTeW5jIGFjb3NmIHdpdGggQ09SRS1N QVRIIChBZGhlbWVydmFsIFphbmVsbGEpCistIG1hdGg6IFN5bmMgbGdhbW1hIHdpdGggQ09SRS1N QVRIIChBZGhlbWVydmFsIFphbmVsbGEpCistIEZpeCBkX3RfZm10IGFuZCBkYXRlX2ZtdCBpbiBl bl9TRSBbQlogIzM0NjM1XSAoTWlrZSBGQUJJQU4pCistIHN0ZGxpYjogRG9uJ3QgY2FsbCBjbGVh cmVudiBmcm9tIF9fbGliY19zZXRlbnZfZnJlZW1lbSAoTWFyayBXaWVsYWFyZCkKKy0gUHVibGlz aCBDVkUtMjAyNi04Njc0IGFkdmlzb3J5IChBZGhlbWVydmFsIFphbmVsbGEpCistIG1hbGxvYzog SW1wcm92ZSBjYWxsb2MgW0JaICMzNDU4Ml0gKFdpbGNvIERpamtzdHJhKQorLSB4ODYtNjQ6IExp bmsgdHN0LXNoc3RrLWxlZ2FjeS0xe2YsZ30gd2l0aCAtV2wsLS1uby1hcy1uZWVkZWQgKEguSi4g THUpCistIFJldmVydCAibGludXg6IEFkZCBfX2xpYmNfcHJvY21hcHNfaXRlcmF0ZSIgKEFkaGVt ZXJ2YWwgWmFuZWxsYSkKKy0gUmV2ZXJ0ICJsaW51eDogVXNlIF9fbGliY19wcm9jbWFwc19pdGVy YXRlIG9uIF9fcmVhZG9ubHlfYXJlYV9mYWxsYmFjayIgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKKy0g UmV2ZXJ0ICJucHRsOiBVc2UgX19saWJjX3Byb2NtYXBzX2l0ZXJhdGUgb24gcHRocmVhZF9nZXRh dHRyX25wIiAoQWRoZW1lcnZhbCBaYW5lbGxhKQorLSBSZXZlcnQgIm5wdGw6IEZhbGwgYmFjayB0 byBBVF9FWEVDRk4gb24gX19wdGhyZWFkX21haW5fc3RhY2sgd2l0aG91dCAvcHJvYyIgKEFkaGVt ZXJ2YWwgWmFuZWxsYSkKKy0gUmV2ZXJ0ICJucHRsOiBBY2NvdW50IGZvciB0aGUgc3RhY2sgZ3Vh cmQgZ2FwIG9uIHB0aHJlYWRfZ2V0YXR0cl9ucCAoQlogMzQ2MzcpIiAoQWRoZW1lcnZhbCBaYW5l bGxhKQorLSBNYXJrIHN3YXBjb250ZXh0IHJldHVybnNfdHdpY2UgYnkgZGVmYXVsdCBbQlogIzIz MTMwXSAoU3RpYW4gSGFsc2V0aCkKKy0gbGliaW86IHZhbGlkYXRlIHRoZSB3aWRlIHZ0YWJsZSB2 aWEgYSBib3VuZHMtY2hlY2tlZCBpbmRleCAoQWxlc3NhbmRybyBTY2hpbm8pCistIHJlc29sdjog Rml4IGFzc2VydGlvbiBmYWlsdXJlIG9uIHNlYXJjaCBsaXN0IHRydW5jYXRpb24gW0JaIDMxMDI2 LCBDVkUtMjAyNi04Njc0XSAoQWRoZW1lcnZhbCBaYW5lbGxhKQorLSBucHRsOiBBY2NvdW50IGZv ciB0aGUgc3RhY2sgZ3VhcmQgZ2FwIG9uIHB0aHJlYWRfZ2V0YXR0cl9ucCAoQlogMzQ2MzcpIChB ZGhlbWVydmFsIFphbmVsbGEpCistIG5wdGw6IEZhbGwgYmFjayB0byBBVF9FWEVDRk4gb24gX19w dGhyZWFkX21haW5fc3RhY2sgd2l0aG91dCAvcHJvYyAoQWRoZW1lcnZhbCBaYW5lbGxhKQorLSBu cHRsOiBVc2UgX19saWJjX3Byb2NtYXBzX2l0ZXJhdGUgb24gcHRocmVhZF9nZXRhdHRyX25wIChB ZGhlbWVydmFsIFphbmVsbGEpCistIGxpbnV4OiBVc2UgX19saWJjX3Byb2NtYXBzX2l0ZXJhdGUg b24gX19yZWFkb25seV9hcmVhX2ZhbGxiYWNrIChBZGhlbWVydmFsIFphbmVsbGEpCistIGxpbnV4 OiBBZGQgX19saWJjX3Byb2NtYXBzX2l0ZXJhdGUgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKKy0gbGlu dXg6IEFkZCBidWZmZXIgYXJndW1lbnQgYW5kIGxpbmUgdHJ1bmNhdGlvbiB0byBfX2xpYmNfcHJv Y3V0aWxzX3JlYWRfZmlsZSAoQWRoZW1lcnZhbCBaYW5lbGxhKQorLSBQdWJsaXNoIENWRS0yMDI2 LTgwNDg5IGFkdmlzb3J5IChDYXJsb3MgTydEb25lbGwpCistIFB1Ymxpc2ggQ1ZFLTIwMjYtNzcx MTcgYWR2aXNvcnkgKENhcmxvcyBPJ0RvbmVsbCkKKy0gUHVibGlzaCBDVkUtMjAyNi0xOTU0MiBh ZHZpc29yeSAoQWRoZW1lcnZhbCBaYW5lbGxhKQorLSBQdWJsaXNoIENWRS0yMDI2LTE5NDk5IGFk dmlzb3J5IChBZGhlbWVydmFsIFphbmVsbGEpCistIG1hdGg6IFVwZGF0ZSB0YW5oIGZyb20gQ09S RS1NQVRIIChyZXZpc2lvbiBkYmQzNzdhOSkgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKKy0gaW86IFJl amVjdCBhbiBlbXB0eSBwYXRoIGxpc3Qgb24gZnRzX29wZW4gW0JaICMyNTQzNF0gW0JaICMzNDYx MF0gKEFkaGVtZXJ2YWwgWmFuZWxsYSkKKy0gbWFsbG9jOiBSZWplY3QgdGhlIHRvcCBjaHVuayBp biBtZW0yY2h1bmtfY2hlY2sgKE1hZ251cyBMaW5kaG9sbSkKKy0gYWFyY2g2NDogQWRkIE1URSBt b2RlIHR1bmFibGUgKFl1cnkgS2hydXN0YWxldikKKy0gZWxmOiBEbyBub3QgbG9hZCBjYWNoZSBl eHRlbnNpb25zIGZyb20gYW4gb2xkLWZvcm1hdCBsZC5zby5jYWNoZSBbQlogIzM0NjAwXSAoU2hh bWlsIEFiZHVsYWV2KQorLSBQdWJsaXNoIENWRS0yMDI2LTg5MDkyIGFkdmlzb3J5IChTaWRkaGVz aCBQb3lhcmVrYXIpCistIHg4NjogU2V0IEFWWDEwIGFjdGl2ZSBvbmx5IGlmIFhNTS9ZTU0vWk1N IGFyZSBzdXBwb3J0ZWQgKEguSi4gTHUpCistIHRpbWU6IGhhbmRsZSBeIGFuZCAjIG1vZGlmaWVy cyB3aXRoICVaIGluIHdjc2Z0aW1lIChidWcgMzQ2MTEpIChBbmRyZWFzIFNjaHdhYikKKy0geDg2 OiBEZXRlY3QgQVBYX05DSV9ORERfTkYgKEguSi4gTHUpCistIG1hdGg6IGxldCBhcmNoaXRlY3R1 cmVzIHNpZ25hbCB1bmRlcmZsb3cgYWZ0ZXIgbmFycm93aW5nIChNYXR0IFR1cm5lcikKKy0gbG9j YWxlOiBmaXggbWVtb3J5IGxlYWtzIGluIHdyaXRlX2xvY2FsZXMgYW5kIHdyaXRlX2NoYXJtYXBz IChSdXNsYW4gVmFsaXlldikKKy0gbWF0aDogU2V0IGVycm5vIHRvIEVSQU5HRSBmb3IgbG9nYiAo Ky0wKSBbQlogIzY3OTNdIChTaGFtaWwgQWJkdWxhZXYpCistIGFscGhhOiBVc2UgYSBjb21kYXQg Z3JvdXAgZm9yIHRoZSBzaGFyZWQgZGl2aWRlLWJ5LXplcm8gaGFuZGxlciBbQlogIzIwNTQzXSAo TWF0dCBUdXJuZXIpCistIG5wdGw6IFNraXAgcHJldHR5LXByaW50ZXIgdGVzdHMgd2l0aG91dCBw eXRob24zIFtCWiAjMzQ1MDddIChIZW1hbnRoIEt1bWFyIE0gRCkKKy0gUmVjb3JkIENWRS0yMDI2 LTE4Mzc0IGZpeCAoRmxvcmlhbiBXZWltZXIpCistIGxpYmlvOiBBZGQgdGVzdCBmb3IgZm9wZW4g d2l0aCBhbiBlbXB0eSAiLCBjY3M9IiB2YWx1ZSBbQlogIzM0NTc0XSAoU2hhbWlsIEFiZHVsYWV2 KQorLSBsaWJpbzogRml4IENWRS0yMDI2LTE4Mzc0IGhlYXAgYnVmZmVyIG92ZXJmbG93IGluIGNj cz0gaGFuZGxpbmcgKERvbmdreXVuIFNvbikKKy0gZ2V0cnVzYWdlOiBBZGQgc21va2UgdGVzdCBm b3IgZ2V0cnVzYWdlIChPbmRyZWogTWFyZWspCistIHBvd2VycGM6IFJlc3RvcmUgTlVMTCBjaGVj ayBvbiBfcnRsZF9nbG9iYWxfcm8gaW4gSU5JVF9BUkNIIFtCWiAjMzQ1MDNdIChNaWNoYWVsIFBm ZWlmcm90aCkKKy0gc3RkaW8tY29tbW9uOiBTa2lwIHRoZSBhIGFuZCBBIGNvbnZlcnNpb25zIGZv ciB0aGUgSUJNIGV4dGVuZGVkIGZvcm1hdCAoTWF0dCBUdXJuZXIpCistIHN0ZGlvLWNvbW1vbjog SGFuZGxlIHN1Ym5vcm1hbCB2YWx1ZXMgaW4gdGhlIHByaW50ZiBmb3JtYXQgdGVzdHMgKE1hdHQg VHVybmVyKQorLSBzdGRpby1jb21tb246IEFkZCBwcmludGYgZm9ybWF0IHRlc3RzIGZvciB0aGUg YSBhbmQgQSBjb252ZXJzaW9ucyAoTWF0dCBUdXJuZXIpCistIHN0ZGlvLWNvbW1vbjogQWRkIHBy aW50ZiBmb3JtYXQgdGVzdHMgZm9yIHRoZSBiIGFuZCBCIGNvbnZlcnNpb25zIChNYXR0IFR1cm5l cikKKy0gc3RkaW8tY29tbW9uOiBWZXJpZnkgcHJpbnRmIGZvcm1hdCB0ZXN0cyB3aXRoIFB5dGhv biByYXRoZXIgdGhhbiBBV0sgKE1hdHQgVHVybmVyKQorLSBodXJkOiBNYWtlIF9fZmlsZV9uYW1l X2xvb2t1cF9hdCBhcHBseSB1cG1hc2sgZm9yIE9fVE1QRklMRSAoQlogMzQ0OTMpIChTYW11ZWwg VGhpYmF1bHQpCistIGh1cmQ6IE1ha2UgcmVhZGxpbmthdCBjaGVjayBib2d1cyBsZW5ndGggcmV0 dXJuZWQgYnkgdHJhbnNsYXRvciAoQlogMzQ1MDQpIChTYW11ZWwgVGhpYmF1bHQpCistIGh1cmQ6 IEZpeCBzZXRyZXVpZC9zZXRyZWdpZCBzZXR0aW5nIHNhdmVkIElEIHRvIG5ldyBlZmZlY3RpdmUg SUQgKEJaIDM0NTA1KSAoU2FtdWVsIFRoaWJhdWx0KQorLSBzdGRsaWIsIHdjc21iczogQWRkIG1p c3NpbmcgX19ub25udWxsIHRvIHN0cnRvKi93Y3N0byogW0JaICMzMzA1M10gKFNoYW1pbCBBYmR1 bGFldikKKy0gZWxmOiBPcGVuIHRoZSBub3JtYWxpemVkICRPUklHSU4gcnBhdGggaW4gQVRfU0VD VVJFIHByb2dyYW1zIChCWiAzNDM2MCkgKEFkaGVtZXJ2YWwgWmFuZWxsYSkKKy0gdGVzdDogRml4 IHRzdC1wZXJzb25hbGl0eSAoWXVyeSBLaHJ1c3RhbGV2KQorLSBtYW51YWw6IGFkanVzdCByZWZl cmVuY2UgdG8gbWFuLXBhZ2VzIGZvbGxvd2luZyBwcm9jKDUpIHNwbGl0LXVwIChDb2xsaW4gRnVu aykKKy0gVXBkYXRlcyB1ZHAuaCBmcm9tIExpbnV4IDYuMTkgdG8gbmV0aW5ldC91ZHAuaCAoSmlh eXVhbiBDaGVuKQorLSBucHRsOiBUZXN0IGNhc2UgZm9yIGJ1ZyAzNDU0NiAoRmxvcmlhbiBXZWlt ZXIpCistIG5wdGw6IFVzZSBGQUlMX1VOU1VQUE9SVEVEIGluIGluaXRfdHBwX3Rlc3QgaW4gdHN0 LXRwcC5oIChGbG9yaWFuIFdlaW1lcikKKy0gbnB0bDogUmV2ZXJ0IFRQUCB1cGRhdGVzIG9uIHB0 aHJlYWRfbXV0ZXhfKmxvY2sgZmFpbHVyZSAoYnVnIDM0NTQ2KSAoRmxvcmlhbiBXZWltZXIpCist IG5wdGw6IEZpeCB0ZXN0IGVycm9yIHJlcG9ydGluZyBpbiBDSEVDS19UUFBfUFJJT1JJVFkgaW4g dHN0LXRwcC5oIChGbG9yaWFuIFdlaW1lcikKKy0gbnB0bDogUmV2ZXJ0IHJvYnVzdCBsaXN0IGhl YWQgb24gcHRocmVhZF9tdXRleF90aW1lZGxvY2sgZmFpbHVyZSAoYnVnIDM0NTQyKSAoRmxvcmlh biBXZWltZXIpCistIG5wdGw6IFRyZWF0IG5lZ2F0aXZlIHRpbWVzIGFzIHRpbWVkIG91dCBpbiBQ SSBmdXRleCBsb2NraW5nIChidWcgMzQ1NDMpIChGbG9yaWFuIFdlaW1lcikKKy0gc3RkaW8tY29t bW9uOiBLZWVwIHRyYWlsaW5nIHplcm9zIHdoZXJlICUjZyByb3VuZHMgaW50byBhIG5ldyBkZWNh ZGUgKEJaIDM0NTc4KSAoTWF0dCBUdXJuZXIpCistIHN0ZGlvLWNvbW1vbjogSXRlcmF0ZSBvdmVy IHRoZSBodWdlIHdpZHRoIGZvciBvbmUgcHJpbnRmIGZ1bmN0aW9uIG9ubHkgKE1hdHQgVHVybmVy KQorLSBlbGY6IFJlbW92ZSBkZWFkIGxfbmVlZF90bHNfaW5pdCBzdGF0aWMtVExTIGluaXQgcGF0 aCAoQWRoZW1lcnZhbCBaYW5lbGxhKQorLSBlbGY6IFJlbW92ZSBfX2Noa19mYWlsIGZyb20gZGwt bWluaW1hbC5jIChBZGhlbWVydmFsIFphbmVsbGEpCistIGVsZjogQWxsb3cgUlBBVEgvUlVOUEFU SCBmb3Igc3RhdGljLXBpZSAoQlogMzMzMjYpIChBZGhlbWVydmFsIFphbmVsbGEpCistIEZpeCBh c3NlcnQgZHVyaW5nIHN0YXRpYyBzdGFydHVwIChCWiAzMzMyNikgKEFkaGVtZXJ2YWwgWmFuZWxs YSkKKy0gVXNlIF9kbF93cml0ZXYgb24gX19saWJjX21lc3NhZ2VfaW1wbCAoQWRoZW1lcnZhbCBa YW5lbGxhKQorLSBucHRsOiBBZGQgX19yYWlzZV9kaXJlY3QgKEFkaGVtZXJ2YWwgWmFuZWxsYSkK Ky0gdHN0LWJhY2t0cmFjZTU6IHNwbGl0IGxvbmcgbGluZSAoU2FtdWVsIFRoaWJhdWx0KQorLSB0 c3QtYmFja3RyYWNlNTogRml4IG9uIGh1cmQgKFNhbXVlbCBUaGliYXVsdCkKKy0gZmNudGw6IGRy b3Agbm9ubnVsbCBhdHRyaWJ1dGUgZm9yIG9wZW5hdCwgb3BlbmF0MidzIHBhdGggYXJndW1lbnQg W0JaICMzNDMxM10gKFNhbSBKYW1lcykKKy0gaW86IGRyb3Agbm9ubnVsbCBhdHRyaWJ1dGUgZm9y IGZjaG1vZGF0LCBmYWNjZXNzYXQsIGZjaG93bmF0J3MgcGF0aCBhcmd1bWVudCBbQlogIzM0MzEz XSAoU2FtIEphbWVzKQorLSBodXJkOiBNb3ZlIFNJTkdMRV9USFJFQURfUCAvIFJUTERfU0lOR0xF X1RIUkVBRF9QIHRvIHNpbmdsZS10aHJlYWQuaCAoU2FtdWVsIFRoaWJhdWx0KQorLSBzdGRsaWI6 IG1lcmdlIHNvbWUgdGVzdHMgZnJvbSBnbnVsaWIgKENvbGxpbiBGdW5rKQorLSBucHRsOiBQcm9w YWdhdGUgRURFQURMSyBmcm9tIEZVVEVYX0xPQ0tfUEkgZm9yIGVycnJvci1jaGVja2luZyBtdXRl eGVzIChNb3JpdHogS2xhbW1sZXIpCistIGFkdmlzb3JpZXM6IGZpeCB0eXBvIGluIFJFQURNRSAo Um9sZiBFaWtlIEJlZXIpCistIFVzZSBfX2F0dHJpYnV0ZV9vcHRpbWl6YXRpb25fYmFycmllcl9f IGZvciB0aGUgcmVtYWluaW5nIG5vY2xvbmUgdXNlcnMgKE1hdHQgVHVybmVyKQorLSBpbzogRG8g bm90IGFsaWFzIGZ0cyBhbmQgZnRzNjQgd2hlbiBpbm9kZSB0eXBlcyBkaWZmZXIgKE1hZ251cyBM aW5kaG9sbSkKKy0gVXNlIEZBSUxfVU5TVVBQT1JURUQgbW9yZSAoU2FtIEphbWVzKQorLSBpY29u dmRhdGE6IFRlc3QgY2FzZSBmb3IgYnVnIDM0NTU2LCBidWcgMzQ1NjggKEZsb3JpYW4gV2VpbWVy KQorLSBpY29udmRhdGE6IEVVQ19KSVNYMDIxMyBkZWNvZGluZyBsYWNrcyBwZW5kaW5nIGNoYXJh Y3RlciByZXNldCAoQ1ZFLTIwMjYtODA0ODkpIChGbG9yaWFuIFdlaW1lcikKKy0gaWNvbnZkYXRh OiBTSElGVF9KSVNYMDIxMyBkZWNvZGluZyBsYWNrcyBwZW5kaW5nIGNoYXJhY3RlciByZXNldCAo Q1ZFLTIwMjYtNzcxMTcpIChGbG9yaWFuIFdlaW1lcikKKy0gbG9jYWxlZGF0YTogYm5fQkQsIGJu X0lOOiB1c2UgZnVsbCBHcmVnb3JpYW4gbW9udGggbmFtZXMgZm9yIGFibW9uIChBemhhcnVsIEhh cXVlKQorLSBtYW51YWw6IEZpeCBzb21lIHR5cG9zIGluIHRoZSBMb3ctTGV2ZWwgSW5wdXQvT3V0 cHV0IGNoYXB0ZXIgKENvbGxpbiBGdW5rKQorLSB4ODY6IFVwZGF0ZSBBVlgxMCBzdXBwb3J0IChI LkouIEx1KQorLSBEb2N1bWVudCBDVkUtMjAyNi0xODM3NCBhbmQgbmV3IENWU1MgdGFnIChTaWRk aGVzaCBQb3lhcmVrYXIpCistIGFhcmNoNjQ6IEFkZCBtZW1vcnkgY2xvYmJlciB0byBwa2V5X3dy aXRlIChZdXJ5IEtocnVzdGFsZXYpCistIHN0ZGxpYjogRml4IHJpZ2h0LWp1c3RpZmljYXRpb24g aW4gc3RyZm1vbiAoYnVnIDM0NTEwLCBDVkUtMjAyNi0xOTQ5OSkgKEZsb3JpYW4gV2VpbWVyKQor LSBodXJkOiBTZXQgX1RJTUVfQklUUz0zMiBmb3IgaW5zdGFsbGVkIHByb2dyYW1zIG9uIGkzODYv SHVyZCAoU2FtdWVsIFRoaWJhdWx0KQorLSBBZGQgY2hlY2stc3ltYm9sLXZlcnNpb24uYXdrIChI LkouIEx1KQorLSBMb29uZ0FyY2g6IEFkZCBzdGFuZGFyZCBzZWFyY2ggcGF0aHMgZm9yIDMyLWJp dCAobWVuZ3FpbmdnYW5nKQorLSBMb29uZ0FyY2g6IFN1cHBvcnQgcG9pbnRlciBndWFyZCBvbiBM b29uZ0FyY2gzMiAobWVuZ3FpbmdnYW5nKQorLSBodXJkOiBXYXJuIGFib3V0IHNldHRpbmcgX1RJ TUVfQklUUz02NCBvbiBpMzg2IEdOVSBIdXJkIChTYW11ZWwgVGhpYmF1bHQpCistIG1hdGg6IFVw ZGF0ZSB0YW5oIGZyb20gQ09SRS1NQVRIIChyZXZpc2lvbiBiYjM5ZTRmYSkgKEFkaGVtZXJ2YWwg WmFuZWxsYSkKKy0gdGVzdHM6IGVsZjogRml4IGZsYWt5IHRocCB0ZXN0cyAoWXVyeSBLaHJ1c3Rh bGV2KQorLSBSZW1vdmUgYXBwbGllZCBvciByZWR1bmRhbnQgcGF0Y2hlczoKKyAgLSBnbGliYy1y aDI0NTcxODMtMS5wYXRjaAorICAtIGdsaWJjLXJoMjQ1NzE4My0yLnBhdGNoCisKICogVHVlIFNl cCAwMSAyMDI2IEZsb3JpYW4gV2VpbWVyICA8ZndlaW1lckByZWRoYXQuY29tPiAtIDIuNDQuOTAw MC0yCiAtIEZhaWwgdGhlIGJ1aWxkIGlmIHRoZXJlIGFyZSB1bmV4cGVjdGVkIHRlc3QgZmFpbHVy ZXMgKCMyNDQ5NjA4KQogCgpkaWZmIC0tZ2l0IGEvc291cmNlcyBiL3NvdXJjZXMKaW5kZXggMGE1 ZTg3ZC4uZTMxODc4ZiAxMDA2NDQKLS0tIGEvc291cmNlcworKysgYi9zb3VyY2VzCkBAIC0xICsx IEBACi1TSEE1MTIgKGdsaWJjLTIuNDQuOTAwMC05NS1nNTNlNWYwMmE2Yi50YXIueHopID0gYjZm YTQzYzdmMzcyY2Q3ZWZhODEzODgwYjc2MTk4MThlMWZiNTEwMmEwYmY3ZGM4NzlmNGQ2MGJlOWQx ZTllMWFiY2E0ZjQyZWNiNzA5OTAyMzI5Y2E4YjBhYzBhOGUwNzZkODlmN2JiMmVhNzcxZDY4NjFl YjBkNTQxYzU4MmQKK1NIQTUxMiAoZ2xpYmMtMi40NC45MDAwLTIwMS1nMDRhMzk5NTY1MC50YXIu eHopID0gYmI0ZDI1Mjc1YzYwNzFiZTlhMDE2MzUwMGJiNzhlMjdlYTEwM2ZhODcwNDY2MGY1MTgx NWQzZDFlMWIwZGQ5OGY4MGQ2OTIwYzc1MWI3MzJkN2VkMGE3YTA4NDI2NjhhNzVjY2ViYjBlMzc3 MDNhMTdhM2I4MDcxOTU3ZTFiMTYK