From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-relay-2.sys.kth.se (smtp-relay-2.sys.kth.se [IPv6:2001:6b0:1:1200:250:56ff:fead:963e]) by sourceware.org (Postfix) with ESMTPS id 8B9E53858409; Mon, 29 Nov 2021 20:03:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8B9E53858409 Received: from exdb5.ug.kth.se (exdb5.ug.kth.se [192.168.32.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp-relay-2.sys.kth.se (Postfix) with ESMTPS id 4J2x9V6pPyzPMfB; Mon, 29 Nov 2021 21:03:10 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp-relay-2.sys.kth.se 4J2x9V6pPyzPMfB Received: from exdb6.ug.kth.se (192.168.32.61) by exdb5.ug.kth.se (192.168.32.60) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.14; Mon, 29 Nov 2021 21:03:10 +0100 Received: from exdb6.ug.kth.se ([192.168.32.61]) by exdb6.ug.kth.se ([192.168.32.61]) with mapi id 15.02.0986.014; Mon, 29 Nov 2021 21:03:10 +0100 From: Petter Tomner To: "gcc-patches@gcc.gnu.org" , "jit@gcc.gnu.org" Subject: [PATCH] jit: Add support for global rvalue initialization and ctors Thread-Topic: [PATCH] jit: Add support for global rvalue initialization and ctors Thread-Index: AQHX5Vuu9//2bIWgFE2G8blT/CeNBQ== Date: Mon, 29 Nov 2021 20:03:09 +0000 Message-ID: <1d9576bd20cb472da2fe014af22e9551@kth.se> Accept-Language: sv-SE, en-US Content-Language: sv-SE X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [192.168.32.250] Content-Type: multipart/mixed; boundary="_002_1d9576bd20cb472da2fe014af22e9551kthse_" MIME-Version: 1.0 X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP, T_FILL_THIS_FORM_SHORT autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: jit@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Jit mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Nov 2021 20:03:21 -0000 --_002_1d9576bd20cb472da2fe014af22e9551kthse_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi! I have wrapped up the patch than adds support for initialization of global = variables=20 with rvalues aswell as rvalue constructors for structs, arrays and unions. New entrypoints are: gcc_jit_global_set_initializer_rvalue Which sets the initial value of a global to a rvalue. And: gcc_jit_context_new_array_constructor gcc_jit_context_new_struct_constructor gcc_jit_context_new_union_constructor Those three makes a constructor with a rvalue that e.g. can be assigned to = a local or returned from a function, or most importantly used to set the initial value of globa= l variables=20 with gcc_jit_global_set_initializer_rvalue. If no fields are specified for a struct or union to the constructors, defin= ition order is assumed. There can be gaps in the fields specified to the struct constructor, but th= ey need to be in order. For pointer arithmetic to work with setting DECL_INITIAL, alot of folding i= s added. make check-jit runs fine on gnu-linux-x64 Debian. Regards,= --_002_1d9576bd20cb472da2fe014af22e9551kthse_ Content-Type: text/x-patch; name="0001-Add-suport-for-global-rvalue-initialization-and-cons.patch" Content-Description: 0001-Add-suport-for-global-rvalue-initialization-and-cons.patch Content-Disposition: attachment; filename="0001-Add-suport-for-global-rvalue-initialization-and-cons.patch"; size=151745; creation-date="Mon, 29 Nov 2021 19:53:56 GMT"; modification-date="Mon, 29 Nov 2021 19:53:56 GMT" Content-Transfer-Encoding: base64 RnJvbSAzNzdhNGY3YzA3NGI2ZmNlYTgzZDFjN2E5N2Y5NDI0NWMzOTk0OGEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXR0ZXIgVG9tbmVyIDx0b21uZXJAa3RoLnNlPgpEYXRlOiBN b24sIDI5IE5vdiAyMDIxIDIwOjI3OjI4ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gQWRkIHN1cG9y dCBmb3IgZ2xvYmFsIHJ2YWx1ZSBpbml0aWFsaXphdGlvbiBhbmQgY29uc3RydWN0b3JzCgpUaGlz IHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgaW5pdGlhbGl6YXRpb24gb2YgZ2xvYmFsIHZhcmlhYmxl cwp3aXRoIHJ2YWx1ZXMgYW5kIGNyZWF0aW5nIGNvbnN0cnVjdG9ycyBmb3IgYXJyYXksIHN0cnVj dCBhbmQKdW5pb24gdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgYXMgcnZhbHVlcy4KClNpZ25lZC1v ZmYtYnk6CjIwMjEtMTEtMjkJUGV0dGVyIFRvbW5lcgk8dG9tbmVyQGt0aC5zZT4KCmdjYy9qaXQv CgkqIGppdC1wbGF5YmFjay5jIDogRm9sZGluZyBhbmQgc2V0dGluZyBpbnRpdGlhbAoJKGdsb2Jh bF9uZXdfZGVjbCkgOiBIYW5kbGUgY29uc3QgZ2xvYmFsIGdlbmVyYXRpb24KCShuZXdfZ2xvYmFs KSA6IE5ldyBmbGFnCgkoZ2xvYmFsX3NldF9pbml0X3J2YWx1ZSkgOiBOZXcKCShuZXdfY3Rvcikg OiBOZXcKCShuZXdfZ2xvYmFsX2luaXRpYWxpemVkKSA6IEZsYWcKCShhc190cnV0aF92YWx1ZSkg OiBGb2xkCgkobmV3X3VuYXJ5X29wKSA6IEZvbGQKCShuZXdfYmluYXJ5X29wKSA6IEZvbGQKCShu ZXdfY29tcGFyaXNvbikgOiBGb2xkCgkobmV3X2FycmF5X2FjY2VzcykgOiBGb2xkCgkobmV3X2Rl cmVmZXJlbmNlKSA6IEZvbGQKCShnZXRfYWRkcmVzcykgOiBGb2xkCgkqIGppdC1wbGF5YmFjay5o IDoKCShnbG9iYWxfc2V0X2luaXRfcnZhbHVlKSA6IE5ldwoJKG5ld19jdG9yKSA6IE5ldwoJKiBq aXQtcmVjb3JkaW5nLmMgOiBOZXcgY2xhc3NlcwoJKiBqaXQtcmVjb3JkaW5nLmggOgoJKG5ld19n bG9iYWxfaW5pdF9ydmFsdWUpIDogTmV3CgkobmV3X2N0b3IpIDogTmV3CgkoY3RvcikgOiBOZXcs IGluaGVyaXRzIHJ2YWx1ZQoJKGdsb2JhbF9pbml0X3J2YWx1ZSkgOiBOZXcsIGluaGVyaXRzIG1l bWVudG8KCSh0eXBlOjppc191bmlvbikgOiBOZXcKCSogbGliZ2Njaml0KysuaCA6IE5ldyBlbnRy eXBvaW50cywgc2VlIEMtaGVhZGVyCgkqIGxpYmdjY2ppdC5jIDogU2VlIC5oCgkqIGxpYmdjY2pp dC5oIDogTmV3IGVudHJ5cG9pbnRzCgkoZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1 Y3RvcikgOiBOZXcKCShnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcikgOiBO ZXcKCShnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX2NvbnN0cnVjdG9yKSA6IE5ldwoJKGdjY19q aXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUpIDogTmV3CgkoTElCR0NDSklUX0hBVkVf Q1RPUlMpIDogTmV3IGZldXR1cmUgbWFjcm8KCSogbGliZ2Njaml0Lm1hcCA6IE5ldyBlbnRyeXBv aW50cyBhZGRlZCB0byBBQkkgMTYKCmdjYy90ZXN0c3VpdGUvCgkqIGppdC5kZy9hbGwtbm9uLWZh aWxpbmctdGVzdHMuaDogQWRkZWQgdHdvIHRlc3RzCgkqIGppdC5kZy90ZXN0LWVycm9yLWN0b3It YXJyYXktd3JvbmctdHlwZS5jOiBOZXcKCSogaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qt dG9vLWJpZy5jOiBOZXcKCSogaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctZmll bGQtbmFtZS5jOiBOZXcKCSogaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctdHlw ZS5jOiBOZXcKCSogaml0LmRiL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctdHlwZTIuYwoJ KiBqaXQuZGcvdGVzdC1lcnJvci1jdG9yLXVuaW9uLXdyb25nLWZpZWxkLW5hbWUuYzogTmV3Cgkq IGppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1hbGxyZWFkeS1pbml0LmM6IE5ldwoJKiBqaXQuZGcv dGVzdC1lcnJvci1nbG9iYWwtY29tbW9uLXNlY3Rpb24uYzogTmV3CgkqIGppdC5kZy90ZXN0LWVy cm9yLWdsb2JhbC1pbml0LXRvby1zbWFsbC1hcnJheS5jOiBOZXcKCSogaml0LmRnL3Rlc3QtZXJy b3ItZ2xvYmFsLWx2YWx1ZS1pbml0LmM6IE5ldwoJKiBqaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwt bm9uY29uc3QtaW5pdC5jOiBOZXcKCSogaml0LmRnL3Rlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmM6 IE5ldwoJKiBqaXQuZGcvdGVzdC1sb2NhbC1pbml0LXJ2YWx1ZS5jOiBOZXcKCmdjYy9qaXQvZG9j cy90b3BpY3MvCgkqIGV4cHJlc3Npb25zLnJzdCA6IFVwZGF0ZWQgZG9jcwotLS0KIGdjYy9qaXQv ZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0ICAgICAgICAgICB8ICAxNzIgKysKIGdjYy9qaXQv aml0LWNvbW1vbi5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKwogZ2NjL2ppdC9q aXQtcGxheWJhY2suYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI2NyArKy0KIGdjYy9qaXQv aml0LXBsYXliYWNrLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKy0KIGdjYy9qaXQv aml0LXJlY29yZGluZy5jICAgICAgICAgICAgICAgICAgICAgICB8ICA0NjkgKysrKy0KIGdjYy9q aXQvaml0LXJlY29yZGluZy5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgOTQgKwogZ2NjL2pp dC9saWJnY2NqaXQrKy5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5MCArCiBnY2Mvaml0 L2xpYmdjY2ppdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzkxICsrKystCiBnY2Mv aml0L2xpYmdjY2ppdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTUwICsrCiBnY2Mv aml0L2xpYmdjY2ppdC5tYXAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIGdjYy90 ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oICB8ICAgMTQgKwogLi4uL2pp dC5kZy90ZXN0LWVycm9yLWN0b3ItYXJyYXktd3JvbmctdHlwZS5jIHwgICA1NCArCiAuLi4vaml0 LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3QtdG9vLWJpZy5jICAgfCAgIDg2ICsKIC4uLi90ZXN0 LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLWZpZWxkLW5hbWUuYyB8ICAgODUgKwogLi4uL3Rlc3Qt ZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctdHlwZS5jICAgICAgIHwgICA3OCArCiAuLi4vdGVzdC1l cnJvci1jdG9yLXN0cnVjdC13cm9uZy10eXBlMi5jICAgICAgfCAgIDc3ICsKIC4uLi90ZXN0LWVy cm9yLWN0b3ItdW5pb24td3JvbmctZmllbGQtbmFtZS5jICB8ICAgNzYgKwogLi4uL2ppdC5kZy90 ZXN0LWVycm9yLWdsb2JhbC1hbGxyZWFkeS1pbml0LmMgIHwgICA0NiArCiAuLi4vaml0LmRnL3Rl c3QtZXJyb3ItZ2xvYmFsLWNvbW1vbi1zZWN0aW9uLmMgfCAgIDU0ICsKIC4uLi90ZXN0LWVycm9y LWdsb2JhbC1pbml0LXRvby1zbWFsbC1hcnJheS5jICB8ICAgNjUgKwogLi4uL2ppdC5kZy90ZXN0 LWVycm9yLWdsb2JhbC1sdmFsdWUtaW5pdC5jICAgIHwgICA2MCArCiAuLi4vaml0LmRnL3Rlc3Qt ZXJyb3ItZ2xvYmFsLW5vbmNvbnN0LWluaXQuYyAgfCAgIDgwICsKIC4uLi9qaXQuZGcvdGVzdC1n bG9iYWwtaW5pdC1ydmFsdWUuYyAgICAgICAgICB8IDE1MjYgKysrKysrKysrKysrKysrKysKIGdj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYyB8ICA2MTQgKysrKysr KwogMjQgZmlsZXMgY2hhbmdlZCwgNDU1MCBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3It YXJyYXktd3JvbmctdHlwZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC10b28tYmlnLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLWZpZWxkLW5h bWUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3It Y3Rvci1zdHJ1Y3Qtd3JvbmctdHlwZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy10eXBlMi5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLXVuaW9uLXdyb25n LWZpZWxkLW5hbWUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rl c3QtZXJyb3ItZ2xvYmFsLWFsbHJlYWR5LWluaXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWNvbW1vbi1zZWN0aW9uLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1pbml0 LXRvby1zbWFsbC1hcnJheS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1lcnJvci1nbG9iYWwtbHZhbHVlLWluaXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLW5vbmNvbnN0LWluaXQuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZ2xvYmFsLWluaXQtcnZh bHVlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWxvY2Fs LWluaXQtcnZhbHVlLmMKCmRpZmYgLS1naXQgYS9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Np b25zLnJzdCBiL2djYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0CmluZGV4IDM5NjI1 OWVmMDdlLi5lZTQwZTkyYmJmOSAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9leHBy ZXNzaW9ucy5yc3QKKysrIGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QKQEAg LTEyNiw2ICsxMjYsMTQ2IEBAIFNpbXBsZSBleHByZXNzaW9ucwogICAgdW5kZXJseWluZyBzdHJp bmcsIHNvIGl0IGlzIHZhbGlkIHRvIHBhc3MgaW4gYSBwb2ludGVyIHRvIGFuIG9uLXN0YWNrCiAg ICBidWZmZXIuCiAKK0NvbnN0cnVjdG9yIGV4cHJlc3Npb25zCisqKioqKioqKioqKioqKioqKioq KioqKgorCisgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBtYWtlIGNvbnN0cnVjdG9ycyBmb3Ig YXJyYXksIHN0cnVjdCBhbmQgdW5pb24KKyAgIHR5cGVzLgorCisgICBUaGUgY29uc3RydWN0b3Ig cnZhbHVlIGNhbiBiZSB1c2VkIGZvciBhc3NpZ25tZW50IHRvIGxvY2Fscy4KKyAgIEl0IGNhbiBi ZSB1c2VkIHRvIGluaXRpYWxpemUgZ2xvYmFsIHZhcmlhYmxlcyB3aXRoCisgICA6ZnVuYzpgZ2Nj X2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZWAuIEl0IGNhbiBhbHNvIGJlIHVzZWQg YXMgYQorICAgdGVtcG9yYXJ5IHZhbHVlIGZvciBmdW5jdGlvbiBjYWxscyBhbmQgcmV0dXJuIHZh bHVlcywgYnV0IGl0cyBhZGRyZXNzCisgICBjYW4ndCBiZSB0YWtlbi4KKworICAgTm90ZSB0aGF0 IGFycmF5cyBpbiBsaWJnY2NqaXQgZG9lcyBub3QgY29sbGFwc2UgdG8gcG9pbnRlcnMgbGlrZSBp bgorICAgQy4gSS5lLiBpZiBhbiBhcnJheSBjb25zdHJ1Y3RvciBpcyB1c2VkIGFzIGUuZy4gYSBy ZXR1cm4gdmFsdWUsIHRoZSB3aG9sZQorICAgYXJyYXkgd291bGQgYmUgcmV0dXJuZWQgYnkgdmFs dWUgLSBhcnJheSBjb25zdHJ1Y3RvcnMgY2FuIGJlIGFzc2lnbmVkIHRvCisgICBhcnJheSB2YXJp YWJsZXMuCisKKyAgIFRoZSBjb25zdHJ1Y3RvciBjYW4gY29udGFpbiBuZXN0ZWQgY29uc3RydWN0 b3JzLgorCisgICBOb3RlIHRoYXQgYSBzdHJpbmcgbGl0ZXJhbCBydmFsdWUgY2FuJ3QgYmUgdXNl ZCB0byBjb25zdHJ1Y3QgYSBjaGFyIGFycmF5LgorICAgSXQgbmVlZCBvbmUgcnZhbHVlIGZvciBl YWNoIGNoYXIuCisKKyAgIFRoZXNlIGVudHJ5cG9pbnRzIHdlcmUgYWRkZWQgaW4gOnJlZjpgTElC R0NDSklUX0FCSV8xNmA7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5zZSB1c2luZzoK KworICAgLi4gY29kZS1ibG9jazo6IGMKKyAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0NUT1JT CisKKy4uIGZ1bmN0aW9uOjogZ2NjX2ppdF9ydmFsdWUgKlwKKwkgICAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsXAorCQkJCQkJ ICAgICBnY2Nfaml0X2xvY2F0aW9uICpsb2MsXAorCQkJCQkJICAgICBnY2Nfaml0X3R5cGUgKnR5 cGUsXAorCQkJCQkJICAgICBzaXplX3QgYXJyX2xlbmd0aCxcCisJCQkJCQkgICAgIGdjY19qaXRf cnZhbHVlICoqdmFsdWVzKQorCisgICBDcmVhdGUgYSBjb25zdHJ1Y3RvciBmb3IgYW4gYXJyYXkg YXMgYSBydmFsdWUuCisKKyAgIFJldHVybnMgTlVMTCBvbiBlcnJvci4KKworICAgYGB0eXBlYGAg c3BlY2lmaWVzIHdoYXQgdGhlIGNvbnN0cnVjdG9yIHdpbGwgYnVpbGQgYW5kIGhhcyB0byBiZQor ICAgYW4gYXJyYXkuCisKKyAgIGBgYXJyX2xlbmd0aGBgIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9m IGVsZW1lbnRzIGluIGBgdmFsdWVzYGAgYW5kCisgICBpdCBjYW4ndCBoYXZlIG1vcmUgZWxlbWVu dHMgdGhhbiB0aGUgYXJyYXkgdHlwZS4KKworICAgRWFjaCB2YWx1ZSBpbiBgYHZhbHVlc2BgIHNl dHMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIGFycmF5LgorICAgSWYgdGhlIGFycmF5 IHR5cGUgaXRzZWxmIGhhcyBtb3JlIGVsZW1lbnRzIHRoYW4gYGB2YWx1ZXNgYCwgdGhlCisgICBs ZWZ0LW92ZXIgZWxlbWVudHMgd2lsbCBiZSB6ZXJvZWQuCisKKyAgIEVhY2ggdmFsdWUgaW4gYGB2 YWx1ZXNgYCBuZWVkIHRvIGJlIHRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUgYXMgdGhlCisgICBh cnJheSB0eXBlJ3MgZWxlbWVudCB0eXBlLgorCisgICBJZiBgYGFycl9sZW5ndGhgYCBpcyAwLCB0 aGUgYGB2YWx1ZXNgYCBwYXJhbWV0ZXIgd2lsbCBiZQorICAgaWdub3JlZCBhbmQgemVybyBpbml0 aWFsaXphdGlvbiB3aWxsIGJlIHVzZWQuCisKKyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQg aW4gOnJlZjpgTElCR0NDSklUX0FCSV8xNmA7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVz ZW5zZSB1c2luZzoKKworICAgLi4gY29kZS1ibG9jazo6IGMKKyAgICAgI2lmZGVmIExJQkdDQ0pJ VF9IQVZFX0NUT1JTCisKKy4uIGZ1bmN0aW9uOjogZ2NjX2ppdF9ydmFsdWUgKlwKKwkgICAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvciAoZ2NjX2ppdF9jb250ZXh0ICpj dHh0LFwKKwkJCQkJCSAgICAgIGdjY19qaXRfbG9jYXRpb24gKmxvYyxcCisJCQkJCQkgICAgICBn Y2Nfaml0X3R5cGUgKnR5cGUsXAorCQkJCQkJICAgICAgc2l6ZV90IGFycl9sZW5ndGgsXAorCQkJ CQkJICAgICAgZ2NjX2ppdF9maWVsZCAqKmZpZWxkcyxcCisJCQkJCQkgICAgICBnY2Nfaml0X3J2 YWx1ZSAqKnZhbHVlKQorCisKKyAgIENyZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBhbiBzdHJ1Y3Qg YXMgYSBydmFsdWUuCisKKyAgIFJldHVybnMgTlVMTCBvbiBlcnJvci4gVGhlIHR3byBwYXJhbWV0 ZXIgYXJyYXlzIGFyZSBjb3BpZWQgYW5kCisgICBkbyBub3QgaGF2ZSB0byBvdXRsaXZlIHRoZSBj b250ZXh0LgorCisgICBgYHR5cGVgYCBzcGVjaWZpZXMgd2hhdCB0aGUgY29uc3RydWN0b3Igd2ls bCBidWlsZCBhbmQgaGFzIHRvIGJlCisgICBhIHN0cnVjdC4KKworICAgYGBhcnJfbGVuZ3RoYGAg c3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYGB2YWx1ZXNgYC4KKworICAgYGBm aWVsZHNgYCBuZWVkIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIGBgdmFsdWVzYGAsIG9yIGJl IE5VTEwuCisKKyAgIElmIGBgZmllbGRzYGAgaXMgbnVsbCwgdGhlIHZhbHVlcyBhcmUgYXBwbGll ZCBpbiBkZWZpbml0aW9uIG9yZGVyLgorCisgICBPdGhlcndpc2UsIGVhY2ggZmllbGQgaW4gYGBm aWVsZHNgYCBzcGVjaWZpZXMgd2hpY2ggZmllbGQgaW4gdGhlIHN0cnVjdCB0bworICAgc2V0IHRv IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIGBgdmFsdWVzYGAuIGBgZmllbGRzYGAgYW5kIGBg dmFsdWVzYGAKKyAgIGFyZSBwYWlyZWQgYnkgaW5kZXguCisKKyAgIFRoZSBmaWVsZHMgaW4gYGBm aWVsZHNgYCBoYXZlIHRvIGJlIGluIGRlZmluaXRpb24gb3JkZXIsIGJ1dCB0aGVyZQorICAgY2Fu IGJlIGdhcHMuIEFueSBmaWVsZCBpbiB0aGUgc3RydWN0IHRoYXQgaXMgbm90IHNwZWNpZmllZCBp bgorICAgYGBmaWVsZHNgYCB3aWxsIGJlIHplcm9lZC4KKworICAgVGhlIGZpZWxkcyBpbiBgYGZp ZWxkc2BgIG5lZWQgdG8gYmUgdGhlIHNhbWUgb2JqZWN0cyB0aGF0IHdlcmUgdXNlZAorICAgdG8g Y3JlYXRlIHRoZSBzdHJ1Y3QuCisKKyAgIEVhY2ggdmFsdWUgaGFzIHRvIGhhdmUgaGF2ZSB0aGUg c2FtZSB1bnF1YWxpZmllZCB0eXBlIGFzIHRoZSBmaWVsZAorICAgaXQgaXMgYXBwbGllZCB0by4K KworICAgQSBOVUxMIHZhbHVlIGVsZW1lbnQgIGluIGBgdmFsdWVzYGAgaXMgYSBzaG9ydGhhbmQg Zm9yIHplcm8gaW5pdGlhbGl6YXRpb24KKyAgIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkLgor CisgICBJZiBgYGFycl9sZW5ndGhgYCBpcyAwLCB0aGUgYXJyYXkgcGFyYW1ldGVycyB3aWxsIGJl CisgICBpZ25vcmVkIGFuZCB6ZXJvIGluaXRpYWxpemF0aW9uIHdpbGwgYmUgdXNlZC4KKworICAg VGhpcyBlbnRyeXBvaW50IHdhcyBhZGRlZCBpbiA6cmVmOmBMSUJHQ0NKSVRfQUJJXzE2YDsgeW91 IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbnNlIHVzaW5nOgorCisgICAuLiBjb2RlLWJsb2Nr OjogYworICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ1RPUlMKKworLi4gZnVuY3Rpb246OiBn Y2Nfaml0X3J2YWx1ZSAqXAorCSAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25fY29uc3Ry dWN0b3IgKGdjY19qaXRfY29udGV4dCAqY3R4dCxcCisJCQkJCQkgICAgIGdjY19qaXRfbG9jYXRp b24gKmxvYyxcCisJCQkJCQkgICAgIGdjY19qaXRfdHlwZSAqdHlwZSxcCisJCQkJCQkgICAgIGdj Y19qaXRfZmllbGQgKmZpZWxkLFwKKwkJCQkJCSAgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlKQor CisgICBDcmVhdGUgYSBjb25zdHJ1Y3RvciBmb3IgYW4gdW5pb24gYXMgYSBydmFsdWUuCisKKyAg IFJldHVybnMgTlVMTCBvbiBlcnJvci4KKworICAgYGB0eXBlYGAgc3BlY2lmaWVzIHdoYXQgdGhl IGNvbnN0cnVjdG9yIHdpbGwgYnVpbGQgYW5kIGhhcyB0byBiZQorICAgYW4gdW5pb24uCisKKyAg IGBgZmllbGRgYCBzcGVjaWZpZXMgd2hpY2ggZmllbGQgdG8gc2V0LiBJZiBpdCBpcyBOVUxMLCB0 aGUgZmlyc3QKKyAgIGZpZWxkIGluIHRoZSB1bmlvbiB3aWxsIGJlIHNldC5gYGZpZWxkYGAgbmVl ZCB0byBiZSB0aGUgc2FtZSBvYmplY3QKKyAgIHRoYXQgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUg dW5pb24uCisKKyAgIGBgdmFsdWVgYCBzcGVjaWZpZXMgd2hhdCB2YWx1ZSB0byBzZXQgdGhlIGNv cnJlc3BvbmRpbmcgZmllbGQgdG8uCisgICBJZiBgYHZhbHVlYGAgaXMgTlVMTCwgemVybyBpbml0 aWFsaXphdGlvbiB3aWxsIGJlIHVzZWQuCisKKyAgIEVhY2ggdmFsdWUgaGFzIHRvIGhhdmUgaGF2 ZSB0aGUgc2FtZSB1bnF1YWxpZmllZCB0eXBlIGFzIHRoZSBmaWVsZAorICAgaXQgaXMgYXBwbGll ZCB0by4KKworICAgVGhpcyBlbnRyeXBvaW50IHdhcyBhZGRlZCBpbiA6cmVmOmBMSUJHQ0NKSVRf QUJJXzE2YDsgeW91IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbnNlIHVzaW5nOgorCisgICAu LiBjb2RlLWJsb2NrOjogYworICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ1RPUlMKKwogVmVj dG9yIGV4cHJlc3Npb25zCiAqKioqKioqKioqKioqKioqKioKIApAQCAtNjAzLDYgKzc0MywzOCBA QCBHbG9iYWwgdmFyaWFibGVzCiAKICAgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9nY2Nfaml0 X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXIKIAorLi4gZnVuY3Rpb246OiBnY2Nfaml0X2x2YWx1ZSAq XAorCSAgICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGdjY19qaXRf bHZhbHVlICpnbG9iYWwsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2NjX2ppdF9ydmFsdWUgKmluaXRfdmFsdWUpCisKKyAgIFNldCB0aGUgaW5pdGlhbCB2 YWx1ZSBvZiBhIGdsb2JhbCB3aXRoIGFuIHJ2YWx1ZS4KKworICAgVGhlIHJ2YWx1ZSBuZWVkIHRv IGJlIGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgaS5lLiBubyBmdW5jdGlvbiBjYWxscy4KKworICAg VGhlIGdsb2JhbCBjYW4ndCBoYXZlIHRoZSBgYGtpbmRgYCA6cmVmOmBHQ0NfSklUX0dMT0JBTF9J TVBPUlRFRGAuCisKKyAgIEFzIGEgbm9uLWNvbXByZWhlbnNpdmUgZXhhbXBsZSBpdCBpcyBPSyB0 byBkbyB0aGUgZXF1aXZhbGVudCBvZjoKKworICAgLi4gY29kZS1ibG9jazo6IGMKKworICAgICAg IGludCBmb28gPSAzICogMjsgLyogcnZhbHVlIGZyb20gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5h cnlfb3AuICAqLworICAgICAgIGludCBhcnJbXSA9IHsxLDIsMyw0fTsgLyogcnZhbHVlIGZyb20g Z2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3Rvci4gICovCisgICAgICAgaW50ICpiYXIgPSAm YXJyWzJdICsgMTsgLyogcnZhbHVlIGZyb20gbmVzdGVkICJnZXQgYWRkcmVzcyIgb2YgImFycmF5 IGFjY2VzcyIuICAqLworICAgICAgIGNvbnN0IGludCBiYXogPSAzOyAvKiBydmFsdWUgZnJvbSBn Y2Nfaml0X2NvbnRleHRfcnZhbHVlX2Zyb21faW50LiAgKi8KKyAgICAgICBpbnQgYm96ID0gYmF6 OyAvKiBydmFsdWUgZnJvbSBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUuICAqLworCisgICBVc2Ug dG9nZXRoZXIgd2l0aCA6cmVmOmBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yYCB0bwor ICAgaW5pdGlhbGl6ZSBzdHJ1Y3RzLCB1bmlvbnMgYW5kIGFycmF5cy4KKworICAgT24gc3VjY2Vz cywgcmV0dXJucyB0aGUgYGBnbG9iYWxgYCBwYXJhbWV0ZXIgdW5jaGFuZ2VkLiBPdGhlcndpc2Us IGBgTlVMTGBgLgorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdD Q0pJVF9BQklfMTZgOyB5b3UgY2FuIHRlc3QgZm9yIGl0cworICAgcHJlc2VuY2UgdXNpbmc6CisK KyAgIC4uIGNvZGUtYmxvY2s6OiBjCisKKyAgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DVE9S UworCiBXb3JraW5nIHdpdGggcG9pbnRlcnMsIHN0cnVjdHMgYW5kIHVuaW9ucwogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9q aXQtY29tbW9uLmggYi9nY2Mvaml0L2ppdC1jb21tb24uaAppbmRleCBmODhlNjc1NWIwMC4uMmU3 MjNjMzhkNzggMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LWNvbW1vbi5oCisrKyBiL2djYy9qaXQv aml0LWNvbW1vbi5oCkBAIC0yMDIsNiArMjAyLDE1IEBAIGVudW0gaW5uZXJfYm9vbF9vcHRpb24K ICAgTlVNX0lOTkVSX0JPT0xfT1BUSU9OUwogfTsKIAorLyogRmxhZ3MgZm9yIGdsb2JhbCB2YXJp YWJsZXMgY2xhc3MuICBGb3Igd2hlbiB0aGUgcGxheWJhY2sgb2YgdGhlCisgICBnbG9iYWwgbmVl ZCB0byBrbm93IHdoYXQgd2lsbCBoYXBwZW4gdG8gaXQgbGF0ZXIuICAqLworZW51bSBnbG9iYWxf dmFyX2ZsYWdzCit7CisgIEdMT0JBTF9WQVJfRkxBR1NfTk9ORSA9IDAsCisgIEdMT0JBTF9WQVJf RkxBR1NfV0lMTF9CRV9SVkFMX0lOSVQgPSAxLAorICBHTE9CQUxfVkFSX0ZMQUdTX1dJTExfQkVf QkxPQl9JTklUID0gMiwKK307CisKIH0gLy8gbmFtZXNwYWNlIGdjYzo6aml0CiAKIH0gLy8gbmFt ZXNwYWNlIGdjYwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suYyBiL2djYy9qaXQv aml0LXBsYXliYWNrLmMKaW5kZXggYjQxMmVhZTZhYTguLmVmNTlmYTk0MmQ3IDEwMDY0NAotLS0g YS9nY2Mvaml0L2ppdC1wbGF5YmFjay5jCisrKyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmMKQEAg LTk3LDYgKzk3LDQzIEBAIG5hbWVzcGFjZSBqaXQgewogIFBsYXliYWNrLgogICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCiAKKy8qIEZvbGQgYSByZWFkb25seSBub24tdm9sYXRpbGUgdmFyaWFibGUgd2l0aCBhbiBp bml0aWFsIGNvbnN0YW50IHZhbHVlLAorICAgdG8gdGhhdCB2YWx1ZS4KKworICAgT3RoZXJ3aXNl IHJldHVybiB0aGUgYXJndW1lbnQgdW5jaGFuZ2VkLgorCisgICBUaGlzIGZvbGQgaXMgbmVlZGVk IGZvciBzZXR0aW5nIGEgdmFyaWFibGUncyBERUNMX0lOSVRJQUwgdG8gdGhlIHZhbHVlCisgICBv ZiBhIGNvbnN0IHZhcmlhYmxlLiAgVGhlIGMtZnJvbnRlbmQgZG9lcyB0aGlzIGluIGl0cyBvd24g c3BlY2lhbAorICAgZm9sZCAoKSwgc28gd2UgbGlmdCB0aGlzIHBhcnQgb3V0IGFuZCBkbyBpdCBl eHBsaWNpdGx5IHdoZXJlIHRoZXJlIGlzIGEKKyAgIHBvdGVudGlhbCBmb3IgdmFyaWFibGVzIHRv IGJlIHVzZWQgYXMgcnZhbHVlcy4gICovCitzdGF0aWMgdHJlZQorZm9sZF9jb25zdF92YXIgKHRy ZWUgbm9kZSkKK3sKKyAgLyogU2VlIGNfZnVsbHlfZm9sZF9pbnRlcm5hbCBpbiBjLWZvbGQuYyBh bmQgZGVjbF9jb25zdGFudF92YWx1ZV8xCisgICAgIGluIGMtdHlwZWNrLmMuICAqLworICBpZiAo VkFSX1AgKG5vZGUpCisgICAgICAmJiBUUkVFX1JFQURPTkxZIChub2RlKQorICAgICAgJiYgIVRS RUVfVEhJU19WT0xBVElMRSAobm9kZSkKKyAgICAgICYmIERFQ0xfSU5JVElBTCAobm9kZSkgIT0g TlVMTF9UUkVFCisgICAgICAvKiAiVGhpcyBpcyBpbnZhbGlkIGlmIGluaXRpYWwgdmFsdWUgaXMg bm90IGNvbnN0YW50LgorCSAgSWYgaXQgaGFzIGVpdGhlciBhIGZ1bmN0aW9uIGNhbGwsIGEgbWVt b3J5IHJlZmVyZW5jZSwKKwkgIG9yIGEgdmFyaWFibGUsIHRoZW4gcmUtZXZhbHVhdGluZyBpdCBj b3VsZCBnaXZlIGRpZmZlcmVudAorCSAgcmVzdWx0cy4iICAqLworICAgICAgJiYgVFJFRV9DT05T VEFOVCAoREVDTF9JTklUSUFMIChub2RlKSkpCisgICAgeworICAgICAgdHJlZSByZXQgPSBERUNM X0lOSVRJQUwgKG5vZGUpOworICAgICAgLyogIkF2b2lkIHVud2FudGVkIHRyZWUgc2hhcmluZyBi ZXR3ZWVuIHRoZSBpbml0aWFsaXplciBhbmQgY3VycmVudAorCSAgZnVuY3Rpb24ncyBib2R5IHdo ZXJlIHRoZSB0cmVlIGNhbiBiZSBtb2RpZmllZCBlLmcuIGJ5IHRoZQorCSAgZ2ltcGxpZmllci4i ICAqLworICAgICAgaWYgKFRSRUVfU1RBVElDIChub2RlKSkKKwlyZXQgPSB1bnNoYXJlX2V4cHIg KHJldCk7CisKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgIHJldHVybiBub2RlOworfQor CiAvKiBCdWlsZCBhIFNUUklOR19DU1QgdHJlZSBmb3IgU1RSLCBvciByZXR1cm4gTlVMTCBpZiBp dCBpcyBOVUxMLgogICAgVGhlIFRSRUVfVFlQRSBpcyBub3QgaW5pdGlhbGl6ZWQuICAqLwogCkBA IC01MzcsMTUgKzU3NCwyOCBAQCBwbGF5YmFjazo6Y29udGV4dDo6CiBnbG9iYWxfbmV3X2RlY2wg KGxvY2F0aW9uICpsb2MsCiAJCSBlbnVtIGdjY19qaXRfZ2xvYmFsX2tpbmQga2luZCwKIAkJIHR5 cGUgKnR5cGUsCi0JCSBjb25zdCBjaGFyICpuYW1lKQorCQkgY29uc3QgY2hhciAqbmFtZSwKKwkJ IGVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncykKIHsKICAgZ2NjX2Fzc2VydCAodHlwZSk7CiAg IGdjY19hc3NlcnQgKG5hbWUpOworCisgIHRyZWUgdHlwZV90cmVlID0gdHlwZS0+YXNfdHJlZSAo KTsKKwogICB0cmVlIGlubmVyID0gYnVpbGRfZGVjbCAoVU5LTk9XTl9MT0NBVElPTiwgVkFSX0RF Q0wsCiAJCQkgICBnZXRfaWRlbnRpZmllciAobmFtZSksCi0JCQkgICB0eXBlLT5hc190cmVlICgp KTsKKwkJCSAgIHR5cGVfdHJlZSk7CisKICAgVFJFRV9QVUJMSUMgKGlubmVyKSA9IChraW5kICE9 IEdDQ19KSVRfR0xPQkFMX0lOVEVSTkFMKTsKLSAgREVDTF9DT01NT04gKGlubmVyKSA9IDE7CisK KworICBpbnQgd2lsbF9iZV9pbml0ID0gZmxhZ3MgJiAoR0xPQkFMX1ZBUl9GTEFHU19XSUxMX0JF X1JWQUxfSU5JVCB8CisJCQkgICAgICBHTE9CQUxfVkFSX0ZMQUdTX1dJTExfQkVfQkxPQl9JTklU KTsKKworICAvKiBBIFZBUl9ERUNMIHdpdGggREVDTF9JTklUSUFMIHdpbGwgbm90IGVuZCB1cCBp biAuY29tbW9uIHNlY3Rpb24uICAqLworICBpZiAoIXdpbGxfYmVfaW5pdCkKKyAgICBERUNMX0NP TU1PTiAoaW5uZXIpID0gMTsKKwogICBzd2l0Y2ggKGtpbmQpCiAgICAgewogICAgIGRlZmF1bHQ6 CkBAIC01NjQsNiArNjE0LDkgQEAgZ2xvYmFsX25ld19kZWNsIChsb2NhdGlvbiAqbG9jLAogICAg ICAgYnJlYWs7CiAgICAgfQogCisgIGlmIChUWVBFX1JFQURPTkxZICh0eXBlX3RyZWUpKQorICAg IFRSRUVfUkVBRE9OTFkgKGlubmVyKSA9IDE7CisKICAgaWYgKGxvYykKICAgICBzZXRfdHJlZV9s b2NhdGlvbiAoaW5uZXIsIGxvYyk7CiAKQEAgLTU4OCwxMyArNjQxLDE2NSBAQCBwbGF5YmFjazo6 Y29udGV4dDo6CiBuZXdfZ2xvYmFsIChsb2NhdGlvbiAqbG9jLAogCSAgICBlbnVtIGdjY19qaXRf Z2xvYmFsX2tpbmQga2luZCwKIAkgICAgdHlwZSAqdHlwZSwKLQkgICAgY29uc3QgY2hhciAqbmFt ZSkKKwkgICAgY29uc3QgY2hhciAqbmFtZSwKKwkgICAgZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZs YWdzKQogewotICB0cmVlIGlubmVyID0gZ2xvYmFsX25ld19kZWNsIChsb2MsIGtpbmQsIHR5cGUs IG5hbWUpOworICB0cmVlIGlubmVyID0KKyAgICBnbG9iYWxfbmV3X2RlY2wgKGxvYywga2luZCwg dHlwZSwgbmFtZSwgZmxhZ3MpOwogCiAgIHJldHVybiBnbG9iYWxfZmluYWxpemVfbHZhbHVlIChp bm5lcik7CiB9CiAKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgdXNhZ2Ugd2l0aCB3YWxrX3RyZWUg aW4gZ2xvYmFsX3NldF9pbml0X3J2YWx1ZS4KKyAgIElmIHRoZSB0cmVlIGNvbnRhaW5zIGEgREVD TF9WQVIgd2l0aG91dCBERUNMX0lOSVRJQUwgc2V0LCBpdCB3aWxsIGJlCisgICByZXR1cm5lZC4K KworICAgT3RoZXJ3aXNlLCByZXR1cm5zIE5VTExfVFJFRS4gICovCitzdGF0aWMgdHJlZQordmFs aWRhdGVfdmFyX2hhc19pbml0ICh0cmVlICp0cCwgaW50ICp3YWxrX3N1YnRyZWUsIHZvaWQgKmRh dGEpCit7CisgICh2b2lkKSBkYXRhOworICAodm9pZCkgd2Fsa19zdWJ0cmVlOworCisgIGlmIChW QVJfUCAoKnRwKSAmJiBERUNMX0lOSVRJQUwgKCp0cCkgPT0gTlVMTF9UUkVFKQorICAgIHJldHVy biAqdHA7CisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKK3ZvaWQKK3BsYXliYWNrOjpjb250ZXh0 OjoKK2dsb2JhbF9zZXRfaW5pdF9ydmFsdWUgKGx2YWx1ZSogdmFyaWFibGUsCisJCQlydmFsdWUq IGluaXQpCit7CisgIHRyZWUgaW5uZXIgPSB2YXJpYWJsZS0+YXNfdHJlZSAoKTsKKworICAvKiBX ZSBuZWVkIHRvIGZvbGQgYWxsIGV4cHJlc3Npb25zIGFzIG11Y2ggYXMgcG9zc2libGUuICBUaGUg Y29kZQorICAgICBmb3IgYSBERUNMX0lOSVRJQUwgb25seSBoYW5kbGVzIHNvbWUgb3BlcmF0aW9u cywKKyAgICAgZXRjIGFkZGl0aW9uLCBtaW51cywgJ2FkZHJlc3Mgb2YnLiAgU2VlIG91dHB1dF9h ZGRyZXNzZWRfY29uc3RhbnRzICgpCisgICAgIGluIHZhcmFzbS5jLiAgKi8KKyAgdHJlZSBpbml0 X3RyZWUgPSBpbml0LT5hc190cmVlICgpOworICB0cmVlIGZvbGRlZCA9IGZvbGRfY29uc3RfdmFy IChpbml0X3RyZWUpOworCisgIC8qIEZpbmQgYW55IFZBUl9ERUNMIHdpdGhvdXQgREVDTF9JTklU SUFMIHNldC4KKyAgICAgQXNzdW1lIHRoYXQgYW55IC4uLl9DU1QgaXMgT0sgdG8gc2F2ZSBzb21l IENQVS4KKyAgICAgSGFuZGxlIENPTlNUUlVDVE9ScyBleHBsaWNpdGx5IHRvIGF2b2lkIHRyZWUg d2Fsa3MKKyAgICAgb24gYXJyYXkgaW5pdHMgY29uc2lzdGluZyBvZiBvbmx5IC4uLl9DU1RzLiAg Ki8KKyAgdHJlZSBzaW5uZXIgPSBOVUxMX1RSRUU7CisKKyAgaWYgKFRSRUVfQ09ERSAoZm9sZGVk KSA9PSBDT05TVFJVQ1RPUikKKyAgICB7CisgICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGlk eDsKKyAgICAgIHRyZWUgZWx0OworICAgICAgRk9SX0VBQ0hfQ09OU1RSVUNUT1JfVkFMVUUgKENP TlNUUlVDVE9SX0VMVFMgKGZvbGRlZCksIGlkeCwgZWx0KQorCXsKKwkgIGlmICghQ09OU1RBTlRf Q0xBU1NfUCAoZWx0KSkKKwkgICAgc2lubmVyID0gd2Fsa190cmVlICgmZWx0LCB2YWxpZGF0ZV92 YXJfaGFzX2luaXQsIE5VTEwsIE5VTEwpOworCSAgaWYgKHNpbm5lciAhPSBOVUxMX1RSRUUpCisJ ICAgIGJyZWFrOworCX0KKyAgICB9CisgIGVsc2UgaWYgKCFDT05TVEFOVF9DTEFTU19QIChmb2xk ZWQpKQorICAgIHNpbm5lciA9IHdhbGtfdHJlZSAoJmZvbGRlZCwgdmFsaWRhdGVfdmFyX2hhc19p bml0LCBOVUxMLCBOVUxMKTsKKworICBpZiAoc2lubmVyICE9IE5VTExfVFJFRSkKKyAgICB7Cisg ICAgICB0cmVlIG5hbWUgPSBERUNMX05BTUUgKGlubmVyKTsKKyAgICAgIHRyZWUgcnZuYW1lID0g REVDTF9OQU1FIChzaW5uZXIpOworICAgICAgYWRkX2Vycm9yIChOVUxMLAorCQkgImNhbid0IGlu aXRpYWxpemUgJXMgd2l0aCAlcyBzaW5jZSBpdCBoYXMgbm8gIgorCQkgImluaXRpYWwgdmFsdWUg c2V0IiwKKwkJIG5hbWUgIT0gTlVMTF9UUkVFID8gSURFTlRJRklFUl9QT0lOVEVSIChuYW1lKSA6 IE5VTEwsCisJCSBydm5hbWUgIT0gTlVMTF9UUkVFID8gSURFTlRJRklFUl9QT0lOVEVSIChydm5h bWUpIDogTlVMTCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmICghVFJFRV9DT05TVEFO VCAoZm9sZGVkKSkKKyAgICB7CisgICAgICB0cmVlIG5hbWUgPSBERUNMX05BTUUgKGlubmVyKTsK KworICAgICAgYWRkX2Vycm9yIChOVUxMLAorCQkgImluaXQgcnZhbHVlIGZvciB0aGUgZ2xvYmFs IHZhcmlhYmxlICVzIGRvZXMgbm90IHNlZW0iCisJCSAiIHRvIGJlIGNvbnN0YW50IiwKKwkJIG5h bWUgIT0gTlVMTF9UUkVFID8gSURFTlRJRklFUl9QT0lOVEVSIChuYW1lKSA6IE5VTEwpOworICAg ICAgcmV0dXJuOworICAgIH0KKworICBERUNMX0lOSVRJQUwgKGlubmVyKSA9IGZvbGRlZDsKK30K KworcGxheWJhY2s6OnJ2YWx1ZSAqCitwbGF5YmFjazo6Y29udGV4dDo6CituZXdfY3RvciAobG9j YXRpb24gKmxvYywKKwkgIHR5cGUgKnR5cGUsCisJICBjb25zdCBhdXRvX3ZlYzxmaWVsZCo+ICpm aWVsZHMsCisJICBjb25zdCBhdXRvX3ZlYzxydmFsdWUqPiAqcnZhbHVlcykKK3sKKyAgdHJlZSB0 eXBlX3RyZWUgPSB0eXBlLT5hc190cmVlICgpOworCisgIC8qIEhhbmRsZSBlbXB0eSBjdG9ycyBm aXJzdC4gIEkuZS4gc2V0IGV2ZXJ5dGhpbmcgdG8gMC4gICovCisgIGlmIChydmFsdWVzLT5sZW5n dGggKCkgPT0gMCkKKyAgICByZXR1cm4gbmV3IHJ2YWx1ZSAodGhpcywgYnVpbGRfY29uc3RydWN0 b3IgKHR5cGVfdHJlZSwgTlVMTCkpOworCisgIC8qIEhhbmRsZSBhcnJheXMgKGFuZCByZXR1cm4p LiAgKi8KKyAgaWYgKFRSRUVfQ09ERSAodHlwZV90cmVlKSA9PSBBUlJBWV9UWVBFKQorICAgIHsK KyAgICAgIGludCBuID0gcnZhbHVlcy0+bGVuZ3RoICgpOworICAgICAgLyogVGhlIHZlYyBmb3Ig dGhlIGNvbnN0cnVjdG9yIG5vZGUuICAqLworICAgICAgdmVjPGNvbnN0cnVjdG9yX2VsdCwgdmFf Z2M+ICp2ID0gTlVMTDsKKyAgICAgIHZlY19hbGxvYyAodiwgbik7CisKKyAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgbjsgaSsrKQorCXsKKwkgIHJ2YWx1ZSAqcnYgPSAoKnJ2YWx1ZXMpW2ldOwor CSAgLyogbnVsbCBydmFsdWVzIGluZGljYXRlIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHpl cm9lZC4gICovCisJICBpZiAocnYpCisJICAgIENPTlNUUlVDVE9SX0FQUEVORF9FTFQgKHYsCisJ CQkJICAgIGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9ub2RlLCBpKSwKKwkJCQkgICAgcnYtPmFz X3RyZWUgKCkpOworCSAgZWxzZQorCSAgICBDT05TVFJVQ1RPUl9BUFBFTkRfRUxUICh2LAorCQkJ CSAgICBidWlsZF9pbnRfY3N0IChzaXplX3R5cGVfbm9kZSwgaSksCisJCQkJICAgIGJ1aWxkX3pl cm9fY3N0IChUUkVFX1RZUEUgKHR5cGVfdHJlZSkpKTsKKwl9CisKKyAgICAgIHRyZWUgY3RvciA9 IGJ1aWxkX2NvbnN0cnVjdG9yICh0eXBlX3RyZWUsIHYpOworCisgICAgICBpZiAobG9jKQorCXNl dF90cmVlX2xvY2F0aW9uIChjdG9yLCBsb2MpOworCisgICAgICByZXR1cm4gbmV3IHJ2YWx1ZSAo dGhpcywgY3Rvcik7CisgICAgfQorCisgIC8qIEhhbmRsZSBzdHJ1Y3RzIGFuZCB1bmlvbnMuICAq LworICBpbnQgbiA9IGZpZWxkcy0+bGVuZ3RoICgpOworCisgIC8qIFRoZSB2ZWMgZm9yIHRoZSBj b25zdHJ1Y3RvciBub2RlLiAgKi8KKyAgdmVjPGNvbnN0cnVjdG9yX2VsdCwgdmFfZ2M+ICp2ID0g TlVMTDsKKyAgdmVjX2FsbG9jICh2LCBuKTsKKworICAvKiBJdGVyYXRlIG92ZXIgdGhlIGZpZWxk cywgYnVpbGRpbmcgaW5pdGlhbGl6YXRpb25zLiAgKi8KKyAgZm9yIChpbnQgaSA9IDA7aSA8IG47 IGkrKykKKyAgICB7CisgICAgICB0cmVlIGZpZWxkID0gKCpmaWVsZHMpW2ldLT5hc190cmVlICgp OworICAgICAgcnZhbHVlICpydiA9ICgqcnZhbHVlcylbaV07CisgICAgICAvKiBJZiB0aGUgdmFs dWUgaXMgTlVMTCwgaXQgbWVhbnMgd2Ugc2hvdWxkIHplcm8gdGhlIGZpZWxkLiAgKi8KKyAgICAg IGlmIChydikKKwlDT05TVFJVQ1RPUl9BUFBFTkRfRUxUICh2LCBmaWVsZCwgcnYtPmFzX3RyZWUg KCkpOworICAgICAgZWxzZQorCXsKKwkgIHRyZWUgemVyb19jc3QgPSBidWlsZF96ZXJvX2NzdCAo VFJFRV9UWVBFIChmaWVsZCkpOworCSAgQ09OU1RSVUNUT1JfQVBQRU5EX0VMVCAodiwgZmllbGQs IHplcm9fY3N0KTsKKwl9CisgICAgfQorCisgIHRyZWUgY3RvciA9IGJ1aWxkX2NvbnN0cnVjdG9y ICh0eXBlX3RyZWUsIHYpOworCisgIGlmIChsb2MpCisgICAgc2V0X3RyZWVfbG9jYXRpb24gKGN0 b3IsIGxvYyk7CisKKyAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGJ1aWxkX2NvbnN0cnVjdG9y ICh0eXBlX3RyZWUsIHYpKTsKK30KKwogLyogRmlsbCAnY29uc3RydWN0b3JfZWxlbWVudHMnIHdp dGggdGhlIG1lbW9yeSBjb250ZW50IG9mCiAgICAnaW5pdGlhbGl6ZXInLiAgRWFjaCBlbGVtZW50 IG9mIHRoZSBpbml0aWFsaXplciBpcyBvZiB0aGUgc2l6ZSBvZgogICAgdHlwZSBULiAgSW4gdXNl IGJ5IG5ld19nbG9iYWxfaW5pdGlhbGl6ZWQuKi8KQEAgLTYyOCw5ICs4MzMsMTAgQEAgbmV3X2ds b2JhbF9pbml0aWFsaXplZCAobG9jYXRpb24gKmxvYywKICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBlbGVtZW50X3NpemUsCiAJCQlzaXplX3QgaW5pdGlhbGl6ZXJfbnVtX2VsZW0sCiAJ CQljb25zdCB2b2lkICppbml0aWFsaXplciwKLQkJCWNvbnN0IGNoYXIgKm5hbWUpCisJCQljb25z dCBjaGFyICpuYW1lLAorCQkJZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzKQogewotICB0cmVl IGlubmVyID0gZ2xvYmFsX25ld19kZWNsIChsb2MsIGtpbmQsIHR5cGUsIG5hbWUpOworICB0cmVl IGlubmVyID0gZ2xvYmFsX25ld19kZWNsIChsb2MsIGtpbmQsIHR5cGUsIG5hbWUsIGZsYWdzKTsK IAogICB2ZWM8Y29uc3RydWN0b3JfZWx0LCB2YV9nYz4gKmNvbnN0cnVjdG9yX2VsZW1lbnRzID0g TlVMTDsKIApAQCAtODMwLDcgKzEwMzYsOCBAQCBhc190cnV0aF92YWx1ZSAodHJlZSBleHByLCBs b2NhdGlvbiAqbG9jKQogICBpZiAobG9jKQogICAgIHNldF90cmVlX2xvY2F0aW9uICh0eXBlZF96 ZXJvLCBsb2MpOwogCi0gIGV4cHIgPSBidWlsZDIgKE5FX0VYUFIsIGludGVnZXJfdHlwZV9ub2Rl LCBleHByLCB0eXBlZF96ZXJvKTsKKyAgZXhwciA9IGZvbGRfYnVpbGQyX2xvYyAoVU5LTk9XTl9M T0NBVElPTiwKKyAgICBORV9FWFBSLCBpbnRlZ2VyX3R5cGVfbm9kZSwgZXhwciwgdHlwZWRfemVy byk7CiAgIGlmIChsb2MpCiAgICAgc2V0X3RyZWVfbG9jYXRpb24gKGV4cHIsIGxvYyk7CiAKQEAg LTg2Niw2ICsxMDczLDggQEAgbmV3X3VuYXJ5X29wIChsb2NhdGlvbiAqbG9jLAogICBnY2NfYXNz ZXJ0IChhKTsKIAogICB0cmVlIG5vZGUgPSBhLT5hc190cmVlICgpOworICBub2RlID0gZm9sZF9j b25zdF92YXIgKG5vZGUpOworCiAgIHRyZWUgaW5uZXJfcmVzdWx0ID0gTlVMTDsKIAogICBzd2l0 Y2ggKG9wKQpAQCAtODk3LDYgKzExMDYsMTAgQEAgbmV3X3VuYXJ5X29wIChsb2NhdGlvbiAqbG9j LAogICBpbm5lcl9yZXN1bHQgPSBidWlsZDEgKGlubmVyX29wLAogCQkJIHJlc3VsdF90eXBlLT5h c190cmVlICgpLAogCQkJIG5vZGUpOworCisgIC8qIFRyeSB0byBmb2xkLiAgKi8KKyAgaW5uZXJf cmVzdWx0ID0gZm9sZCAoaW5uZXJfcmVzdWx0KTsKKwogICBpZiAobG9jKQogICAgIHNldF90cmVl X2xvY2F0aW9uIChpbm5lcl9yZXN1bHQsIGxvYyk7CiAKQEAgLTkyMSw3ICsxMTM0LDEwIEBAIG5l d19iaW5hcnlfb3AgKGxvY2F0aW9uICpsb2MsCiAgIGdjY19hc3NlcnQgKGIpOwogCiAgIHRyZWUg bm9kZV9hID0gYS0+YXNfdHJlZSAoKTsKKyAgbm9kZV9hID0gZm9sZF9jb25zdF92YXIgKG5vZGVf YSk7CisKICAgdHJlZSBub2RlX2IgPSBiLT5hc190cmVlICgpOworICBub2RlX2IgPSBmb2xkX2Nv bnN0X3ZhciAobm9kZV9iKTsKIAogICBzd2l0Y2ggKG9wKQogICAgIHsKQEAgLTk5MSw2ICsxMjA3 LDEwIEBAIG5ld19iaW5hcnlfb3AgKGxvY2F0aW9uICpsb2MsCiAJCQkgICAgcmVzdWx0X3R5cGUt PmFzX3RyZWUgKCksCiAJCQkgICAgbm9kZV9hLAogCQkJICAgIG5vZGVfYik7CisKKyAgLyogVHJ5 IHRvIGZvbGQgdGhlIGV4cHJlc3Npb24uICAqLworICBpbm5lcl9leHByID0gZm9sZCAoaW5uZXJf ZXhwcik7CisKICAgaWYgKGxvYykKICAgICBzZXRfdHJlZV9sb2NhdGlvbiAoaW5uZXJfZXhwciwg bG9jKTsKIApAQCAtMTAzOCwxMCArMTI1OCwxOSBAQCBuZXdfY29tcGFyaXNvbiAobG9jYXRpb24g KmxvYywKICAgICAgIGJyZWFrOwogICAgIH0KIAorICB0cmVlIG5vZGVfYSA9IGEtPmFzX3RyZWUg KCk7CisgIG5vZGVfYSA9IGZvbGRfY29uc3RfdmFyIChub2RlX2EpOworICB0cmVlIG5vZGVfYiA9 IGItPmFzX3RyZWUgKCk7CisgIG5vZGVfYiA9IGZvbGRfY29uc3RfdmFyIChub2RlX2IpOworCiAg IHRyZWUgaW5uZXJfZXhwciA9IGJ1aWxkMiAoaW5uZXJfb3AsCiAJCQkgICAgYm9vbGVhbl90eXBl X25vZGUsCi0JCQkgICAgYS0+YXNfdHJlZSAoKSwKLQkJCSAgICBiLT5hc190cmVlICgpKTsKKwkJ CSAgICBub2RlX2EsCisJCQkgICAgbm9kZV9iKTsKKworICAvKiBUcnkgdG8gZm9sZC4gICovCisg IGlubmVyX2V4cHIgPSBmb2xkIChpbm5lcl9leHByKTsKKwogICBpZiAobG9jKQogICAgIHNldF90 cmVlX2xvY2F0aW9uIChpbm5lcl9leHByLCBsb2MpOwogICByZXR1cm4gbmV3IHJ2YWx1ZSAodGhp cywgaW5uZXJfZXhwcik7CkBAIC0xMTQxLDYgKzEzNzAsOCBAQCBwbGF5YmFjazo6Y29udGV4dDo6 YnVpbGRfY2FzdCAocGxheWJhY2s6OmxvY2F0aW9uICpsb2MsCiAKICAgICAgT25seSBzb21lIGtp bmRzIG9mIGNhc3QgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQgaGVyZS4gICovCiAgIHRyZWUgdF9l eHByID0gZXhwci0+YXNfdHJlZSAoKTsKKyAgdF9leHByID0gZm9sZF9jb25zdF92YXIgKHRfZXhw cik7CisKICAgdHJlZSB0X2RzdF90eXBlID0gdHlwZV8tPmFzX3RyZWUgKCk7CiAgIHRyZWUgdF9y ZXQgPSBOVUxMOwogICB0X3JldCA9IHRhcmdldG0uY29udmVydF90b190eXBlICh0X2RzdF90eXBl LCB0X2V4cHIpOwpAQCAtMTIxOSw3ICsxNDUwLDEwIEBAIG5ld19hcnJheV9hY2Nlc3MgKGxvY2F0 aW9uICpsb2MsCiAgICAgICAgYy1mYW1pbHkvYy1jb21tb24uYzogcG9pbnRlcl9pbnRfc3VtCiAg ICovCiAgIHRyZWUgdF9wdHIgPSBwdHItPmFzX3RyZWUgKCk7CisgIHRfcHRyID0gZm9sZF9jb25z dF92YXIgKHRfcHRyKTsKICAgdHJlZSB0X2luZGV4ID0gaW5kZXgtPmFzX3RyZWUgKCk7CisgIHRf aW5kZXggPSBmb2xkX2NvbnN0X3ZhciAodF9pbmRleCk7CisKICAgdHJlZSB0X3R5cGVfcHRyID0g VFJFRV9UWVBFICh0X3B0cik7CiAgIHRyZWUgdF90eXBlX3N0YXJfcHRyID0gVFJFRV9UWVBFICh0 X3R5cGVfcHRyKTsKIApAQCAtMTIyNyw2ICsxNDYxLDcgQEAgbmV3X2FycmF5X2FjY2VzcyAobG9j YXRpb24gKmxvYywKICAgICB7CiAgICAgICB0cmVlIHRfcmVzdWx0ID0gYnVpbGQ0IChBUlJBWV9S RUYsIHRfdHlwZV9zdGFyX3B0ciwgdF9wdHIsIHRfaW5kZXgsCiAJCQkgICAgICBOVUxMX1RSRUUs IE5VTExfVFJFRSk7CisgICAgICB0X3Jlc3VsdCA9IGZvbGQgKHRfcmVzdWx0KTsKICAgICAgIGlm IChsb2MpCiAJc2V0X3RyZWVfbG9jYXRpb24gKHRfcmVzdWx0LCBsb2MpOwogICAgICAgcmV0dXJu IG5ldyBsdmFsdWUgKHRoaXMsIHRfcmVzdWx0KTsKQEAgLTEyMzYsMTIgKzE0NzEsMTQgQEAgbmV3 X2FycmF5X2FjY2VzcyAobG9jYXRpb24gKmxvYywKICAgICAgIC8qIENvbnZlcnQgaW5kZXggdG8g YW4gb2Zmc2V0IGluIGJ5dGVzLiAgKi8KICAgICAgIHRyZWUgdF9zaXplb2YgPSBzaXplX2luX2J5 dGVzICh0X3R5cGVfc3Rhcl9wdHIpOwogICAgICAgdF9pbmRleCA9IGZvbGRfYnVpbGQxIChDT05W RVJUX0VYUFIsIHNpemV0eXBlLCB0X2luZGV4KTsKLSAgICAgIHRyZWUgdF9vZmZzZXQgPSBidWls ZDIgKE1VTFRfRVhQUiwgc2l6ZXR5cGUsIHRfaW5kZXgsIHRfc2l6ZW9mKTsKKyAgICAgIHRyZWUg dF9vZmZzZXQgPSBmb2xkX2J1aWxkMl9sb2MgKFVOS05PV05fTE9DQVRJT04sCisJTVVMVF9FWFBS LCBzaXpldHlwZSwgdF9pbmRleCwgdF9zaXplb2YpOwogCiAgICAgICAvKiBMb2NhdGUgKHB0ciAr IG9mZnNldCkuICAqLwotICAgICAgdHJlZSB0X2FkZHJlc3MgPSBidWlsZDIgKFBPSU5URVJfUExV U19FWFBSLCB0X3R5cGVfcHRyLCB0X3B0ciwgdF9vZmZzZXQpOworICAgICAgdHJlZSB0X2FkZHJl c3MgPSBmb2xkX2J1aWxkMl9sb2MgKFVOS05PV05fTE9DQVRJT04sCisJUE9JTlRFUl9QTFVTX0VY UFIsIHRfdHlwZV9wdHIsIHRfcHRyLCB0X29mZnNldCk7CiAKLSAgICAgIHRyZWUgdF9pbmRpcmVj dGlvbiA9IGJ1aWxkMSAoSU5ESVJFQ1RfUkVGLCB0X3R5cGVfc3Rhcl9wdHIsIHRfYWRkcmVzcyk7 CisgICAgICB0cmVlIHRfaW5kaXJlY3Rpb24gPSBmb2xkX2J1aWxkMSAoSU5ESVJFQ1RfUkVGLCB0 X3R5cGVfc3Rhcl9wdHIsIHRfYWRkcmVzcyk7CiAgICAgICBpZiAobG9jKQogCXsKIAkgIHNldF90 cmVlX2xvY2F0aW9uICh0X3NpemVvZiwgbG9jKTsKQEAgLTEyODksNyArMTUyNiw3IEBAIG5ld19k ZXJlZmVyZW5jZSAodHJlZSBwdHIsCiAgIGdjY19hc3NlcnQgKHB0cik7CiAKICAgdHJlZSB0eXBl ID0gVFJFRV9UWVBFIChUUkVFX1RZUEUocHRyKSk7Ci0gIHRyZWUgZGF0dW0gPSBidWlsZDEgKElO RElSRUNUX1JFRiwgdHlwZSwgcHRyKTsKKyAgdHJlZSBkYXR1bSA9IGZvbGRfYnVpbGQxIChJTkRJ UkVDVF9SRUYsIHR5cGUsIHB0cik7CiAgIGlmIChsb2MpCiAgICAgc2V0X3RyZWVfbG9jYXRpb24g KGRhdHVtLCBsb2MpOwogICByZXR1cm4gZGF0dW07CkBAIC0xNDQzLDcgKzE2ODAsNyBAQCBnZXRf YWRkcmVzcyAobG9jYXRpb24gKmxvYykKICAgdHJlZSB0X2x2YWx1ZSA9IGFzX3RyZWUgKCk7CiAg IHRyZWUgdF90aGlzdHlwZSA9IFRSRUVfVFlQRSAodF9sdmFsdWUpOwogICB0cmVlIHRfcHRydHlw ZSA9IGJ1aWxkX3BvaW50ZXJfdHlwZSAodF90aGlzdHlwZSk7Ci0gIHRyZWUgcHRyID0gYnVpbGQx IChBRERSX0VYUFIsIHRfcHRydHlwZSwgdF9sdmFsdWUpOworICB0cmVlIHB0ciA9IGZvbGRfYnVp bGQxIChBRERSX0VYUFIsIHRfcHRydHlwZSwgdF9sdmFsdWUpOwogICBpZiAobG9jKQogICAgIGdl dF9jb250ZXh0ICgpLT5zZXRfdHJlZV9sb2NhdGlvbiAocHRyLCBsb2MpOwogICBpZiAobWFya19h ZGRyZXNzYWJsZSAobG9jKSkKZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXBsYXliYWNrLmggYi9n Y2Mvaml0L2ppdC1wbGF5YmFjay5oCmluZGV4IGY2NzBjOWU4MWRmLi4wZGI5YjZmYjUzYiAxMDA2 NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suaAorKysgYi9nY2Mvaml0L2ppdC1wbGF5YmFj ay5oCkBAIC0xMDksNyArMTA5LDggQEAgcHVibGljOgogICBuZXdfZ2xvYmFsIChsb2NhdGlvbiAq bG9jLAogCSAgICAgIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBraW5kLAogCSAgICAgIHR5cGUg KnR5cGUsCi0JICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisJICAgICAgY29uc3QgY2hhciAqbmFt ZSwKKwkgICAgICBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpOwogCiAgIGx2YWx1ZSAqCiAg IG5ld19nbG9iYWxfaW5pdGlhbGl6ZWQgKGxvY2F0aW9uICpsb2MsCkBAIC0xMTgsNyArMTE5LDE5 IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1lbnRfc2l6 ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluaXRpYWxpemVyX251bV9lbGVt LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbml0aWFsaXplciwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisJCQkgIGNvbnN0IGNo YXIgKm5hbWUsCisJCQkgIGVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncyk7CisKKyAgcnZhbHVl ICoKKyAgbmV3X2N0b3IgKGxvY2F0aW9uICpsb2csCisJICAgIHR5cGUgKnR5cGUsCisJICAgIGNv bnN0IGF1dG9fdmVjPGZpZWxkKj4gKmZpZWxkcywKKwkgICAgY29uc3QgYXV0b192ZWM8cnZhbHVl Kj4gKnJ2YWx1ZXMpOworCisKKyAgdm9pZAorICBnbG9iYWxfc2V0X2luaXRfcnZhbHVlIChsdmFs dWUqIHZhcmlhYmxlLAorCQkJICBydmFsdWUqIGluaXQpOwogCiAgIHRlbXBsYXRlIDx0eXBlbmFt ZSBIT1NUX1RZUEU+CiAgIHJ2YWx1ZSAqCkBAIC0yODYsNyArMjk5LDggQEAgcHJpdmF0ZToKICAg Z2xvYmFsX25ld19kZWNsIChsb2NhdGlvbiAqbG9jLAogICAgICAgICAgICAgICAgICAgIGVudW0g Z2NjX2ppdF9nbG9iYWxfa2luZCBraW5kLAogICAgICAgICAgICAgICAgICAgIHR5cGUgKnR5cGUs Ci0gICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisJCSAgIGNvbnN0IGNoYXIg Km5hbWUsCisJCSAgIGVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncyk7CiAgIGx2YWx1ZSAqCiAg IGdsb2JhbF9maW5hbGl6ZV9sdmFsdWUgKHRyZWUgaW5uZXIpOwogCmRpZmYgLS1naXQgYS9nY2Mv aml0L2ppdC1yZWNvcmRpbmcuYyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5jCmluZGV4IDExN2Zm NzAxMTRjLi44Njk2MDM0NDBiNyAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmMK KysrIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmMKQEAgLTEwNjIsNiArMTA2MiwxOCBAQCByZWNv cmRpbmc6OmNvbnRleHQ6Om5ld19nbG9iYWwgKHJlY29yZGluZzo6bG9jYXRpb24gKmxvYywKICAg cmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZAorcmVjb3JkaW5nOjpjb250ZXh0OjpuZXdfZ2xvYmFs X2luaXRfcnZhbHVlIChsdmFsdWUgKnZhcmlhYmxlLAorCQkJCQkgICAgcnZhbHVlICppbml0KQor eworICByZWNvcmRpbmc6Omdsb2JhbF9pbml0X3J2YWx1ZSAqb2JqID0KKyAgICBuZXcgcmVjb3Jk aW5nOjpnbG9iYWxfaW5pdF9ydmFsdWUgKHRoaXMsIHZhcmlhYmxlLCBpbml0KTsKKyAgcmVjb3Jk IChvYmopOworCisgIGdsb2JhbCAqZ2JsID0gKGdsb2JhbCAqKSB2YXJpYWJsZTsKKyAgZ2JsLT5z ZXRfcnZhbHVlX2luaXQgKGluaXQpOyAvKiBOZWVkZWQgYnkgdGhlIGdsb2JhbCBmb3Igd3JpdGUg ZHVtcC4gICovCit9CisKIC8qIENyZWF0ZSBhIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfc3Ry aW5nX2xpdGVyYWwgaW5zdGFuY2UgYW5kIGFkZCBpdAogICAgdG8gdGhpcyBjb250ZXh0J3MgbGlz dCBvZiBtZW1lbnRvcy4KIApAQCAtMTA5NCw2ICsxMTA2LDcyIEBAIHJlY29yZGluZzo6Y29udGV4 dDo6bmV3X3J2YWx1ZV9mcm9tX3ZlY3RvciAobG9jYXRpb24gKmxvYywKICAgcmV0dXJuIHJlc3Vs dDsKIH0KIAorcmVjb3JkaW5nOjpydmFsdWUgKgorcmVjb3JkaW5nOjpjb250ZXh0OjpuZXdfY3Rv ciAocmVjb3JkaW5nOjpsb2NhdGlvbiAqbG9jLAorCQkJICAgICAgcmVjb3JkaW5nOjp0eXBlICp0 eXBlLAorCQkJICAgICAgaW50IGFycl9sZW5ndGgsCisJCQkgICAgICBmaWVsZCAqKmZpZWxkcywK KwkJCSAgICAgIHJ2YWx1ZSAqKnZhbHVlcykKK3sKKyAgcmVjb3JkaW5nOjpjdG9yICpyZXN1bHQg PSBuZXcgY3RvciAodGhpcywgbG9jLCB0eXBlKTsKKworICAvKiBTaG9ydCBjdXQgZm9yIHplcm8g aW5pdC4gICovCisgIGlmICghYXJyX2xlbmd0aCkKKyAgICB7CisgICAgICByZWNvcmQgKHJlc3Vs dCk7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICBib29sIGlzX3N0cnVjdF9vcl91 bmlvbiA9IHR5cGUtPmlzX3N0cnVjdCAoKSB8fCB0eXBlLT5pc191bmlvbiAoKTsKKworICAvKiBX ZSBuZWVkIHRvIGNvcHkgZmllbGRzIGFuZCB2YWx1ZXMgaW50byByZXN1bHQncyBhdXRvX3ZlYzpz LgorICAgICBCb3RoIGZvciBzdHJ1Y3RzIGFuZCB1bmlvbnMgYW5kIG9ubHkgdmFsdWVzIGZvciBh cnJheXMuICAqLworICBpZiAodHlwZS0+aXNfYXJyYXkgKCkgIT0gTlVMTCkKKyAgICB7CisgICAg ICByZXN1bHQtPm1fdmFsdWVzLnJlc2VydmUgKGFycl9sZW5ndGgsIGZhbHNlKTsKKworICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBhcnJfbGVuZ3RoOyBpKyspCisJcmVzdWx0LT5tX3ZhbHVlcy5x dWlja19wdXNoICh2YWx1ZXNbaV0pOworICAgIH0KKyAgZWxzZSBpZiAoaXNfc3RydWN0X29yX3Vu aW9uICYmIGZpZWxkcykKKyAgICB7CisgICAgICAvKiBjdG9yIHZhbHVlcyBhcmUgcGFpcmVkIHdp dGggdXNlciBzcGVjaWZpZWQgZmllbGRzLiAgKi8KKworICAgICAgcmVzdWx0LT5tX3ZhbHVlcy5y ZXNlcnZlIChhcnJfbGVuZ3RoLCBmYWxzZSk7CisgICAgICByZXN1bHQtPm1fZmllbGRzLnJlc2Vy dmUgKGFycl9sZW5ndGgsIGZhbHNlKTsKKworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJf bGVuZ3RoOyBpKyspCisJeworCSAgcmVzdWx0LT5tX3ZhbHVlcy5xdWlja19wdXNoICh2YWx1ZXNb aV0pOworCSAgcmVzdWx0LT5tX2ZpZWxkcy5xdWlja19wdXNoIChmaWVsZHNbaV0pOworCX0KKyAg ICB9CisgIGVsc2UgaWYgKGlzX3N0cnVjdF9vcl91bmlvbiAmJiAhZmllbGRzKQorICAgIHsKKyAg ICAgIC8qIGN0b3IgdmFsdWVzIGFyZSBpbiBkZWZpbml0aW9uIG9yZGVyIG9uZSBieSBvbmUsCisJ IHNvIHRha2UgdGhlIGZpZWxkcyBmcm9tIHRoZSB0eXBlIG9iamVjdC4gICovCisKKyAgICAgIHJl c3VsdC0+bV92YWx1ZXMucmVzZXJ2ZSAoYXJyX2xlbmd0aCwgZmFsc2UpOworICAgICAgcmVzdWx0 LT5tX2ZpZWxkcy5yZXNlcnZlIChhcnJfbGVuZ3RoLCBmYWxzZSk7CisKKyAgICAgIGNvbXBvdW5k X3R5cGUgKmN0ID0gcmVpbnRlcnByZXRfY2FzdDxjb21wb3VuZF90eXBlICo+KHR5cGUpOworICAg ICAgcmVjb3JkaW5nOjpmaWVsZHMgKmZpZWxkcyA9IGN0LT5nZXRfZmllbGRzICgpOworCisgICAg ICAvKiBUaGUgZW50cnkgcG9pbnQgY2hlY2tzIHRoYXQgYXJyX2xlbmd0aCBpcyBub3QgZ3JlYXRl ciB0aGFuCisJIHRoZSBhbW91bnQgb2YgZmllbGRzIGluICdmaWVsZHMnLiAgKi8KKyAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgYXJyX2xlbmd0aDsgaSsrKQorCXsKKwkgIHJlc3VsdC0+bV92YWx1 ZXMucXVpY2tfcHVzaCAodmFsdWVzW2ldKTsKKwkgIHJlc3VsdC0+bV9maWVsZHMucXVpY2tfcHVz aCAoZmllbGRzLT5nZXRfZmllbGQgKGkpKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgZ2NjX3Vu cmVhY2hhYmxlICgpOworCisgIHJlY29yZCAocmVzdWx0KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30K KwogLyogQ3JlYXRlIGEgcmVjb3JkaW5nOjp1bmFyeV9vcCBpbnN0YW5jZSBhbmQgYWRkIGl0IHRv IHRoaXMgY29udGV4dCdzCiAgICBsaXN0IG9mIG1lbWVudG9zLgogCkBAIC00NTU2LDExICs0NjM0 LDEzIEBAIHJlY29yZGluZzo6Z2xvYmFsOjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpCiAJCQkJ IG1faW5pdGlhbGl6ZXJfbnVtX2J5dGVzCiAJCQkJIC8gbV90eXBlLT5kZXJlZmVyZW5jZSAoKS0+ Z2V0X3NpemUgKCksCiAJCQkJIG1faW5pdGlhbGl6ZXIsCi0JCQkJIHBsYXliYWNrX3N0cmluZyAo bV9uYW1lKSkKKwkJCQkgcGxheWJhY2tfc3RyaW5nIChtX25hbWUpLAorCQkJCSBmbGFncykKICAg ICA6IHItPm5ld19nbG9iYWwgKHBsYXliYWNrX2xvY2F0aW9uIChyLCBtX2xvYyksCiAJCSAgICAg bV9raW5kLAogCQkgICAgIG1fdHlwZS0+cGxheWJhY2tfdHlwZSAoKSwKLQkJICAgICBwbGF5YmFj a19zdHJpbmcgKG1fbmFtZSkpKTsKKwkJICAgICBwbGF5YmFja19zdHJpbmcgKG1fbmFtZSksCisJ CSAgICAgZmxhZ3MpKTsKIH0KIAogLyogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRp b24gb2YKQEAgLTQ2MDksMjEgKzQ2ODksMzAgQEAgcmVjb3JkaW5nOjpnbG9iYWw6OndyaXRlX3Rv X2R1bXAgKGR1bXAgJmQpCiAJICAgbV90eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpLAogCSAgIGdl dF9kZWJ1Z19zdHJpbmcgKCkpOwogCi0gIGlmICghbV9pbml0aWFsaXplcikKKyAgaWYgKCFtX2lu aXRpYWxpemVyICYmICFtX3J2YWx1ZV9pbml0KQogICAgIHsKICAgICAgIGQud3JpdGUgKCI7XG4i KTsKLSAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgZC53cml0ZSAoIj1cbiAgeyAiKTsKLSAgY29u c3QgdW5zaWduZWQgY2hhciAqcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopbV9pbml0aWFsaXpl cjsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luaXRpYWxpemVyX251bV9ieXRlczsgaSsr KQorICBlbHNlIGlmIChtX2luaXRpYWxpemVyKQogICAgIHsKLSAgICAgIGQud3JpdGUgKCIweCV4 LCAiLCBwW2ldKTsKLSAgICAgIGlmIChpICYmICEoaSAlIDY0KSkKLQlkLndyaXRlICgiXG4gICAg Iik7CisgICAgICBkLndyaXRlICgiPVxuICB7ICIpOworICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopbV9pbml0aWFsaXplcjsKKyAgICAgIGZvciAo c2l6ZV90IGkgPSAwOyBpIDwgbV9pbml0aWFsaXplcl9udW1fYnl0ZXM7IGkrKykKKwl7CisJICBk LndyaXRlICgiMHgleCwgIiwgcFtpXSk7CisJICBpZiAoaSAmJiAhKGkgJSA2NCkpCisJICAgIGQu d3JpdGUgKCJcbiAgICAiKTsKKwl9CisgICAgICBkLndyaXRlICgifTtcbiIpOwogICAgIH0KLSAg ZC53cml0ZSAoIn07XG4iKTsKKyAgZWxzZSBpZiAobV9ydmFsdWVfaW5pdCkKKyAgICB7CisgICAg ICBkLndyaXRlICgiID0gIik7CisgICAgICBkLndyaXRlIChtX3J2YWx1ZV9pbml0LT5nZXRfZGVi dWdfc3RyaW5nICgpKTsKKyAgICAgIGQud3JpdGUgKCI7XG4iKTsKKyAgICB9CisKKyAgcmV0dXJu OwogfQogCiAvKiBBIHRhYmxlIG9mIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCB2YWx1ZXMgZXhw cmVzc2VkIGluIHN0cmluZwpAQCAtNTA3MCw2ICs1MTU5LDIwMSBAQCByZWNvcmRpbmc6Om1lbWVu dG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX3ZlY3Rvcjo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNl ciAmcikKIAkgICBlbGVtZW50c19pZCk7CiB9CiAKK3ZvaWQKK3JlY29yZGluZzo6Y3Rvcjo6dmlz aXRfY2hpbGRyZW4gKHJ2YWx1ZV92aXNpdG9yICp2KQoreworICBmb3IgKHVuc2lnbmVkIGludCBp ID0gMDsgaSA8IG1fdmFsdWVzLmxlbmd0aCAoKTsgaSsrKQorICAgIHYtPnZpc2l0IChtX3ZhbHVl c1tpXSk7Cit9CisKK3JlY29yZGluZzo6c3RyaW5nICoKK3JlY29yZGluZzo6Y3Rvcjo6bWFrZV9k ZWJ1Z19zdHJpbmcgKCkKK3sKKyAgLy9NYWtlIGEgY29tcG91bmQgbGl0ZXJhbC1pc2gKKyAgcHJl dHR5X3ByaW50ZXIgcHA7CisKKyAgcHBfc3RyaW5nICgmcHAsICIoIik7CisgIHBwX3N0cmluZyAo JnBwLCBtX3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworICBwcF9zdHJpbmcgKCZwcCwgIikg eyIpOworCisgIGludCBmaWVsZF9uID0gbV9maWVsZHMubGVuZ3RoICgpOworICBpbnQgdmFsdWVz X24gPSBtX3ZhbHVlcy5sZW5ndGggKCk7CisKKyAgaWYgKCFmaWVsZF9uICYmICF2YWx1ZXNfbikK KyAgICA7CisgIGVsc2UgaWYgKCFmaWVsZF9uICYmIHZhbHVlc19uKQorICAgIHsKKyAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzX247IGkrKykKKwl7CisJICBpZiAobV92YWx1ZXNbaV0p CisJICAgIHBwX3N0cmluZyAoJnBwLCBtX3ZhbHVlc1tpXS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7 CisJICBlbHNlCisJICAgIHBwX3N0cmluZyAoJnBwLCAiMCIpOworCSAgaWYgKGkgKyAxICE9IHZh bHVlc19uKQorCSAgICBwcF9zdHJpbmcgKCZwcCwgIiwgIik7CisJfQorICAgIH0KKyAgZWxzZSBp ZiAoZmllbGRfbiAmJiB2YWx1ZXNfbikKKyAgICB7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IHZhbHVlc19uOyBpKyspCisJeworCSAgcHBfc3RyaW5nICgmcHAsICIuIik7CisJICBwcF9zdHJp bmcgKCZwcCwgbV9maWVsZHNbaV0tPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCSAgcHBfc3RyaW5n ICgmcHAsICI9Iik7CisJICBpZiAobV92YWx1ZXNbaV0pCisJICAgIHBwX3N0cmluZyAoJnBwLCBt X3ZhbHVlc1tpXS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisJICBlbHNlCisJICAgIHBwX3N0cmlu ZyAoJnBwLCAiMCIpOworCSAgaWYgKGkgKyAxICE9IHZhbHVlc19uKQorCSAgICBwcF9zdHJpbmcg KCZwcCwgIiwgIik7CisJfQorICAgIH0KKyAgLyogbV9maWVsZHMgYXJlIG5ldmVyIHBvcHVsYXRl ZCB3aXRoIG1fdmFsdWVzIGVtcHR5LiAgKi8KKworICBwcF9zdHJpbmcgKCZwcCwgIn0iKTsKKwor ICByZXR1cm4gbmV3X3N0cmluZyAocHBfZm9ybWF0dGVkX3RleHQgKCZwcCkpOworfQorCit2b2lk CityZWNvcmRpbmc6OmN0b3I6OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCit7Cisg IGNvbnN0IGNoYXIgKmlkID0gci5tYWtlX2lkZW50aWZpZXIgKHRoaXMsICJydmFsdWUiKTsKKyAg dHlwZSAqdHlwZSA9IGdldF90eXBlICgpOworCisgIHIud3JpdGUgKCIgIGdjY19qaXRfcnZhbHVl IColcztcbiIsIGlkKTsKKyAgci53cml0ZSAoIiAge1xuIik7IC8qIE9wZW4gc2NvcGUgZm9yIGxv Y2Fscy4gICovCisKKyAgaWYgKHR5cGUtPmlzX3VuaW9uICgpKQorICAgIHsKKyAgICAgIGlmICht X3ZhbHVlcy5sZW5ndGggKCkgPT0gMCkKKwlyLndyaXRlICgiICAgIGdjY19qaXRfcnZhbHVlICp2 YWx1ZSA9IE5VTEw7XG4iKTsKKyAgICAgIGVsc2UKKwlyLndyaXRlICgiICAgIGdjY19qaXRfcnZh bHVlICp2YWx1ZSA9ICVzO1xuIiwKKwkJIHIuZ2V0X2lkZW50aWZpZXIgKG1fdmFsdWVzWzBdKSk7 CisKKyAgICAgIGlmIChtX2ZpZWxkcy5sZW5ndGggKCkgPT0gMCkKKwlyLndyaXRlICgiICAgIGdj Y19qaXRfZmllbGQgKmZpZWxkID0gTlVMTDtcbiIpOworICAgICAgZWxzZQorCXIud3JpdGUgKCIg ICAgZ2NjX2ppdF9maWVsZCAqZmllbGQgPSAlcztcbiIsCisJCSByLmdldF9pZGVudGlmaWVyICht X2ZpZWxkc1swXSkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFdyaXRlIHRoZSBh cnJheSBvZiB2YWx1ZXMuICAqLworICAgICAgaWYgKG1fdmFsdWVzLmxlbmd0aCAoKSA9PSAwKQor CXIud3JpdGUgKCIgICAgZ2NjX2ppdF9ydmFsdWUgKip2YWx1ZXMgPSBOVUxMO1xuIik7CisgICAg ICBlbHNlCisJeworCSAgci53cml0ZSAoIiAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVzW10gPSB7 XG4iKTsKKwkgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5sZW5ndGggKCk7IGkr KykKKwkgICAgci53cml0ZSAoIiAgICAgICAgJXMsXG4iLCByLmdldF9pZGVudGlmaWVyIChtX3Zh bHVlc1tpXSkpOworCSAgci53cml0ZSAoIiAgICAgIH07XG4iKTsKKwl9CisgICAgICAvKiBXcml0 ZSB0aGUgYXJyYXkgb2YgZmllbGRzLiAgKi8KKyAgICAgIGlmIChtX2ZpZWxkcy5sZW5ndGggKCkg PT0gMCkKKwlyLndyaXRlICgiICAgIGdjY19qaXRfZmllbGQgKipmaWVsZHMgPSBOVUxMO1xuIik7 CisgICAgICBlbHNlCisJeworCSAgci53cml0ZSAoIiAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNb XSA9IHtcbiIpOworCSAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZmllbGRzLmxlbmd0aCAo KTsgaSsrKQorCSAgICByLndyaXRlICgiICAgICAgICAlcyxcbiIsIHIuZ2V0X2lkZW50aWZpZXIg KG1fZmllbGRzW2ldKSk7CisJICByLndyaXRlICgiICAgICAgfTtcbiIpOworCX0KKyAgICB9Cisg IGlmICh0eXBlLT5pc19hcnJheSAoKSkKKyAgICByLndyaXRlICgKKyIgICAgJXMgPVxuIgorIiAg ICAgIGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3IgKCVzLFxuIgorIiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLCAvKiBnY2Nfaml0X2xv Y2F0aW9uICpsb2MgKi9cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAlcywgLyogZ2NjX2ppdF90eXBlICp0eXBlICovXG4iCisiICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWksIC8qIGludCBhcnJfbGVuZ3RoICovXG4i CisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKTtc biIsCisJICAgaWQsCisJICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorCSAg IHIuZ2V0X2lkZW50aWZpZXIgKG1fbG9jKSwKKwkgICByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUg KGdldF90eXBlICgpKSwKKwkgICBtX3ZhbHVlcy5sZW5ndGggKCkpOworICBlbHNlIGlmICh0eXBl LT5pc19zdHJ1Y3QgKCkpCisgICAgci53cml0ZSAoCisiICAgICVzID1cbiIKKyIgICAgICBnY2Nf aml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvciAoJXMsXG4iCisiICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLCAvKiBsb2MgKi9cbiIKKyIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXMsIC8qIGdjY19qaXRf dHlwZSAqdHlwZSAqL1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAlaSwgLyogaW50IGFycl9sZW5ndGggKi9cbiIKKyIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzLFxuIgorIiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpO1xuIiwKKwkgICBpZCwKKwkgICBy LmdldF9pZGVudGlmaWVyIChnZXRfY29udGV4dCAoKSksCisJICAgci5nZXRfaWRlbnRpZmllciAo bV9sb2MpLAorCSAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfdHlwZSAoZ2V0X3R5cGUgKCkpLAorCSAg IG1fdmFsdWVzLmxlbmd0aCAoKSk7CisgIGVsc2UgaWYgKHR5cGUtPmlzX3VuaW9uICgpKQorICAg IHIud3JpdGUgKAorIiAgICAlcyA9XG4iCisiICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld191bmlv bl9jb25zdHJ1Y3RvciAoJXMsXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJXMsIC8qIGxvYyAqL1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKnR5cGUgKi9cbiIKKyIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiIKKyIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSk7XG4iLAorCSAg IGlkLAorCSAgIHIuZ2V0X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKwkgICByLmdldF9p ZGVudGlmaWVyIChtX2xvYyksCisJICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChnZXRfdHlw ZSAoKSkpOworICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxlICgpOworCisgIHIud3JpdGUgKCIg IH1cbiIpOyAvKiBDbG9zZSBzY29wZSBmb3IgbG9jYWxzLiAgKi8KK30KKwordm9pZAorcmVjb3Jk aW5nOjpjdG9yOjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpCit7CisgIGF1dG9fdmVjPHBsYXli YWNrOjpydmFsdWUgKj4gcGxheWJhY2tfdmFsdWVzOworICBhdXRvX3ZlYzxwbGF5YmFjazo6Zmll bGQgKj4gcGxheWJhY2tfZmllbGRzOworCisgIGludCBuID0gbV92YWx1ZXMubGVuZ3RoICgpOwor CisgIHR5cGUgKnR5cGUgPSBnZXRfdHlwZSAoKTsKKworICAvKiBIYW5kbGUgYXJyYXlzLCBhbmQg cmV0dXJuLiAgKi8KKyAgaWYgKHR5cGUtPmlzX2FycmF5ICgpKQorICAgIHsKKyAgICAgIHBsYXli YWNrX3ZhbHVlcy5yZXNlcnZlIChuLCBmYWxzZSk7CisKKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgbjsgaSsrKQorCXsKKwkgIC8qIG51bGwgbV92YWx1ZXMgZWxlbWVudCBpbmRpY2F0ZXMgemVy byBjdG9yLiAgKi8KKwkgIHBsYXliYWNrX3ZhbHVlcy5xdWlja19wdXNoIChtX3ZhbHVlc1tpXSA/ CisJCQkJICAgICAgbV92YWx1ZXNbaV0tPnBsYXliYWNrX3J2YWx1ZSAoKSA6CisJCQkJICAgICAg TlVMTCk7CisJfQorICAgICAgc2V0X3BsYXliYWNrX29iaiAoci0+bmV3X2N0b3IgKHBsYXliYWNr X2xvY2F0aW9uIChyLCBtX2xvYyksCisJCQkJICAgICBnZXRfdHlwZSAoKS0+cGxheWJhY2tfdHlw ZSAoKSwKKwkJCQkgICAgIE5VTEwsCisJCQkJICAgICAmcGxheWJhY2tfdmFsdWVzKSk7CisgICAg ICByZXR1cm47CisgICAgfQorICAvKiAuLi4gZWxzZSBoYW5kbGUgdW5pb25zIGFuZCBzdHJ1Y3Rz LiAgKi8KKworICBwbGF5YmFja192YWx1ZXMucmVzZXJ2ZSAobiwgZmFsc2UpOworICBwbGF5YmFj a19maWVsZHMucmVzZXJ2ZSAobiwgZmFsc2UpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg aSsrKQorICAgIHsKKyAgICAgIC8qIG51bGwgbV92YWx1ZXMgZWxlbWVudCBpbmRpY2F0ZXMgemVy byBjdG9yLiAgKi8KKyAgICAgIHBsYXliYWNrX3ZhbHVlcy5xdWlja19wdXNoIChtX3ZhbHVlc1tp XSA/CisJCQkJICAgIG1fdmFsdWVzW2ldLT5wbGF5YmFja19ydmFsdWUgKCkgOgorCQkJCSAgICBO VUxMKTsKKyAgICAgIHBsYXliYWNrX2ZpZWxkcy5xdWlja19wdXNoIChtX2ZpZWxkc1tpXS0+cGxh eWJhY2tfZmllbGQgKCkpOworICAgIH0KKworICBzZXRfcGxheWJhY2tfb2JqIChyLT5uZXdfY3Rv ciAocGxheWJhY2tfbG9jYXRpb24gKHIsIG1fbG9jKSwKKwkJCQkgZ2V0X3R5cGUgKCktPnBsYXli YWNrX3R5cGUgKCksCisJCQkJICZwbGF5YmFja19maWVsZHMsCisJCQkJICZwbGF5YmFja192YWx1 ZXMpKTsKK30KKwogLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIGNsYXNzIGdjYzo6aml0OjpyZWNv cmRpbmc6OnVuYXJ5X29wLiAgKi8KIAogLyogSW1wbGVtZW50YXRpb24gb2YgcHVyZSB2aXJ0dWFs IGhvb2sgcmVjb3JkaW5nOjptZW1lbnRvOjpyZXBsYXlfaW50bwpAQCAtNzAzNCw2ICs3MzE4LDE2 NyBAQCByZWNvcmRpbmc6OnRvcF9sZXZlbF9hc206OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVj ZXIgJnIpCiAJICAgbV9hc21fc3RtdHMtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOwogfQogCit2b2lk CityZWNvcmRpbmc6Omdsb2JhbF9pbml0X3J2YWx1ZTo6cmVwbGF5X2ludG8gKHJlcGxheWVyICpy KQoreworICByLT5nbG9iYWxfc2V0X2luaXRfcnZhbHVlIChtX3ZhcmlhYmxlLT5wbGF5YmFja19s dmFsdWUgKCksCisJCQkgICAgIG1faW5pdC0+cGxheWJhY2tfcnZhbHVlICgpKTsKK30KKwordm9p ZAorcmVjb3JkaW5nOjpnbG9iYWxfaW5pdF9ydmFsdWU6OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJv ZHVjZXIgJnIpCit7CisgIHIud3JpdGUgKAorICAgICIgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0 aWFsaXplcl9ydmFsdWUgKCVzLCAvKiBsdmFsdWUgKmdsb2JhbCAqL1xuIgorICAgICIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzKTsvKiBydmFsdWUgKmluaXQgKi9c biIsCisgICAgci5nZXRfaWRlbnRpZmllciAobV92YXJpYWJsZSksCisgICAgci5nZXRfaWRlbnRp Zmllcl9hc19ydmFsdWUgKG1faW5pdCkpOworfQorCit2b2lkCityZWNvcmRpbmc6Omdsb2JhbF9p bml0X3J2YWx1ZTo6d3JpdGVfdG9fZHVtcCAoZHVtcCAmZCkKK3sKKyAgZC53cml0ZSAoIiVzO1xu IiwgZ2V0X2RlYnVnX3N0cmluZyAoKSk7Cit9CisKK3JlY29yZGluZzo6c3RyaW5nICoKK3JlY29y ZGluZzo6Z2xvYmFsX2luaXRfcnZhbHVlOjptYWtlX2RlYnVnX3N0cmluZyAoKQoreworICAgIHJl dHVybiBzdHJpbmc6OmZyb21fcHJpbnRmIChtX2N0eHQsICIlcyA9ICVzIiwKKyAgICAgIG1fdmFy aWFibGUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisgICAgICBtX2luaXQtPmdldF9kZWJ1Z19zdHJp bmcgKCkpOworfQorCitlbnVtIHN0cmlwX2ZsYWdzIHsKKyAgU1RSSVBfRkxBR19OT05FLAorICBT VFJJUF9GTEFHX0FSUiwKKyAgU1RSSVBfRkxBR19WRUMKK307CisKKy8qIFN0cmlwcyB0eXBlIGRv d24gdG8gYXJyYXksIHZlY3RvciBvciBiYXNlIHR5cGUgKHdoaWNoZXZlciBjb21lcyBmaXJzdCkK KworICAgQWxzbyBzYXZlcyAncHRyX2RlcHRoJyBhbmQgc2V0cyAnZmxhZ3MnIGZvciBhcnJheSBv ciB2ZWN0b3IgdHlwZXMuICAqLworc3RhdGljCityZWNvcmRpbmc6OnR5cGUgKgorc3RyaXBfYW5k X2NvdW50IChyZWNvcmRpbmc6OnR5cGUgKnR5cGVfdG9fc3RyaXAsCisJCSBpbnQgJnB0cl9kZXB0 aCwKKwkJIHN0cmlwX2ZsYWdzICZmbGFncykKK3sKKyAgcmVjb3JkaW5nOjp0eXBlICp0ID0gdHlw ZV90b19zdHJpcDsKKworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBpZiAoIXQpCisJZ2Nj X3VucmVhY2hhYmxlICgpOyAvKiBTaG91bGQgb25seSBoYXBwZW4gb24gY29ycnVwdCBpbnB1dC4g ICovCisKKyAgICAgIHJlY29yZGluZzo6dHlwZSAqcG9pbnRlZF90b190eXBlID0gdC0+aXNfcG9p bnRlciAoKTsKKyAgICAgIGlmIChwb2ludGVkX3RvX3R5cGUgIT0gTlVMTCkKKwl7CisJICBwdHJf ZGVwdGgrKzsKKwkgIHQgPSBwb2ludGVkX3RvX3R5cGU7CisJICBjb250aW51ZTsKKwl9CisKKyAg ICAgIHJlY29yZGluZzo6dHlwZSAqYXJyYXlfZWwgPSB0LT5pc19hcnJheSAoKTsKKyAgICAgIGlm IChhcnJheV9lbCAhPSBOVUxMKQorCXsKKwkgIGZsYWdzID0gU1RSSVBfRkxBR19BUlI7CisJICBi cmVhazsKKwl9CisKKyAgICAgIHJlY29yZGluZzo6dHlwZSAqdmVjID0gdC0+ZHluX2Nhc3RfdmVj dG9yX3R5cGUgKCk7CisgICAgICBpZiAodmVjICE9IE5VTEwpCisJeworCSAgZmxhZ3MgPSBTVFJJ UF9GTEFHX1ZFQzsKKwkgIGJyZWFrOworCX0KKworICAgICAgLyogdW5xdWFsaWZpZWQgKCkgcmV0 dXJucyAndGhpcycgb24gYmFzZSB0eXBlcy4gICovCisgICAgICByZWNvcmRpbmc6OnR5cGUgKm5l eHQgPSB0LT51bnF1YWxpZmllZCAoKTsKKyAgICAgIGlmIChuZXh0ID09IHQpCisJeworCSAgYnJl YWs7CisJfQorICAgICAgdCA9IG5leHQ7CisgICAgfQorCisgIHJldHVybiB0OworfQorCisvKiBT dHJpcCBxdWFsaWZpZXJzIGFuZCBjb3VudCBwb2ludGVyIGRlcHRoLCByZXR1cm5pbmcgdHJ1ZQor ICAgaWYgdGhlIHR5cGVzJyBiYXNlIHR5cGUgYW5kIHBvaW50ZXIgZGVwdGggYXJlCisgICB0aGUg c2FtZSwgb3RoZXJ3aXNlIGZhbHNlLgorCisgICBGb3IgYXJyYXkgYW5kIHZlY3RvciB0eXBlcyB0 aGUgbnVtYmVyIG9mIGVsZW1lbnQgYWxzbworICAgaGFzIHRvIG1hdGNoLgorCisgICBEbyBub3Qg Y2FsbCB0aGlzIGRpcmVjdGx5LiAgQ2FsbCAndHlwZXNfa2luZGFfc2FtZScuICAqLworYm9vbAor dHlwZXNfa2luZGFfc2FtZV9pbnRlcm5hbCAocmVjb3JkaW5nOjp0eXBlICphLCByZWNvcmRpbmc6 OnR5cGUgKmIpCit7CisgIGludCBwdHJfZGVwdGhfYSA9IDA7CisgIGludCBwdHJfZGVwdGhfYiA9 IDA7CisgIHJlY29yZGluZzo6dHlwZSAqYmFzZV9hOworICByZWNvcmRpbmc6OnR5cGUgKmJhc2Vf YjsKKworICBzdHJpcF9mbGFncyBmbGFnc19hID0gU1RSSVBfRkxBR19OT05FOworICBzdHJpcF9m bGFncyBmbGFnc19iID0gU1RSSVBfRkxBR19OT05FOworCisgIGJhc2VfYSA9IHN0cmlwX2FuZF9j b3VudCAoYSwgcHRyX2RlcHRoX2EsIGZsYWdzX2EpOworICBiYXNlX2IgPSBzdHJpcF9hbmRfY291 bnQgKGIsIHB0cl9kZXB0aF9iLCBmbGFnc19iKTsKKworICBpZiAocHRyX2RlcHRoX2EgIT0gcHRy X2RlcHRoX2IpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmIChiYXNlX2EgPT0gYmFzZV9iKQor ICAgIHJldHVybiB0cnVlOworCisgIGlmIChmbGFnc19hICE9IGZsYWdzX2IpCisgICAgcmV0dXJu IGZhbHNlOworCisgIC8qIElmIHRoZSAiYmFzZSB0eXBlIiBpcyBhbiBhcnJheSBvciB2ZWN0b3Ig d2UgbWlnaHQgbmVlZCB0bworICAgICBjaGVjayBkZWVwZXIuICAqLworICBpZiAoZmxhZ3NfYSA9 PSBTVFJJUF9GTEFHX0FSUikKKyAgICB7CisgICAgICByZWNvcmRpbmc6OmFycmF5X3R5cGUgKmFy cl9hID0KKwlzdGF0aWNfY2FzdDxyZWNvcmRpbmc6OmFycmF5X3R5cGUqPiAoYmFzZV9hKTsKKyAg ICAgIHJlY29yZGluZzo6YXJyYXlfdHlwZSAqYXJyX2IgPQorCXN0YXRpY19jYXN0PHJlY29yZGlu Zzo6YXJyYXlfdHlwZSo+IChiYXNlX2IpOworCisgICAgICBpZiAoYXJyX2EtPm51bV9lbGVtZW50 cyAoKSAhPSBhcnJfYi0+bnVtX2VsZW1lbnRzICgpKQorCXJldHVybiBmYWxzZTsKKworICAgICAg LyogaXNfYXJyYXkgcmV0dXJucyBlbGVtZW50IHR5cGUuICAqLworICAgICAgcmVjb3JkaW5nOjp0 eXBlICplbF9hID0gYXJyX2EtPmlzX2FycmF5ICgpOworICAgICAgcmVjb3JkaW5nOjp0eXBlICpl bF9iID0gYXJyX2ItPmlzX2FycmF5ICgpOworCisgICAgICBpZiAoZWxfYSA9PSBlbF9iKQorCXJl dHVybiB0cnVlOworCisgICAgICByZXR1cm4gdHlwZXNfa2luZGFfc2FtZV9pbnRlcm5hbCAoZWxf YSwgZWxfYik7CisgICAgfQorICBpZiAoZmxhZ3NfYSA9PSBTVFJJUF9GTEFHX1ZFQykKKyAgICB7 CisgICAgICByZWNvcmRpbmc6OnZlY3Rvcl90eXBlICphcnJfYSA9CisJc3RhdGljX2Nhc3Q8cmVj b3JkaW5nOjp2ZWN0b3JfdHlwZSo+IChiYXNlX2EpOworICAgICAgcmVjb3JkaW5nOjp2ZWN0b3Jf dHlwZSAqYXJyX2IgPQorCXN0YXRpY19jYXN0PHJlY29yZGluZzo6dmVjdG9yX3R5cGUqPiAoYmFz ZV9iKTsKKworICAgICAgaWYgKGFycl9hLT5nZXRfbnVtX3VuaXRzICgpICE9IGFycl9iLT5nZXRf bnVtX3VuaXRzICgpKQorCXJldHVybiBmYWxzZTsKKworICAgICAgcmVjb3JkaW5nOjp0eXBlICpl bF9hID0gYXJyX2EtPmdldF9lbGVtZW50X3R5cGUgKCk7CisgICAgICByZWNvcmRpbmc6OnR5cGUg KmVsX2IgPSBhcnJfYi0+Z2V0X2VsZW1lbnRfdHlwZSAoKTsKKworICAgICAgaWYgKGVsX2EgPT0g ZWxfYikKKwlyZXR1cm4gdHJ1ZTsKKworICAgICAgcmV0dXJuIHR5cGVzX2tpbmRhX3NhbWVfaW50 ZXJuYWwgKGVsX2EsIGVsX2IpOworICAgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8g bmFtZXNwYWNlIGdjYzo6aml0CiAKIH0gLy8gbmFtZXNwYWNlIGdjYwpkaWZmIC0tZ2l0IGEvZ2Nj L2ppdC9qaXQtcmVjb3JkaW5nLmggYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaAppbmRleCA0YTk5 NGZlNzA5NC4uZjJmMWUzNDYxYjEgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXJlY29yZGluZy5o CisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5oCkBAIC0xNDksNiArMTQ5LDE3IEBAIHB1Ymxp YzoKIAkgICAgICB0eXBlICp0eXBlLAogCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOwogCisgIHJ2 YWx1ZSAqCisgIG5ld19jdG9yIChsb2NhdGlvbiAqbG9jLAorCSAgICB0eXBlICp0eXBlLAorCSAg ICBpbnQgYXJyX2xlbmd0aCwKKwkgICAgZmllbGQgKipmaWVsZHMsCisJICAgIHJ2YWx1ZSAqKnZh bHVlcyk7CisKKyAgdm9pZAorICBuZXdfZ2xvYmFsX2luaXRfcnZhbHVlIChsdmFsdWUgKnZhcmlh YmxlLAorCQkJICBydmFsdWUgKmluaXQpOworCiAgIHRlbXBsYXRlIDx0eXBlbmFtZSBIT1NUX1RZ UEU+CiAgIHJ2YWx1ZSAqCiAgIG5ld19ydmFsdWVfZnJvbV9jb25zdCAodHlwZSAqdHlwZSwKQEAg LTU0Nyw2ICs1NTgsNyBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgdHlwZSAqaXNfcG9pbnRlciAoKSA9 IDA7CiAgIHZpcnR1YWwgdHlwZSAqaXNfYXJyYXkgKCkgPSAwOwogICB2aXJ0dWFsIHN0cnVjdF8g KmlzX3N0cnVjdCAoKSB7IHJldHVybiBOVUxMOyB9CisgIHZpcnR1YWwgYm9vbCBpc191bmlvbiAo KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICB2aXJ0dWFsIGJvb2wgaXNfdm9pZCAoKSBjb25z dCB7IHJldHVybiBmYWxzZTsgfQogICB2aXJ0dWFsIHZlY3Rvcl90eXBlICppc192ZWN0b3IgKCkg eyByZXR1cm4gTlVMTDsgfQogICB2aXJ0dWFsIGJvb2wgaGFzX2tub3duX3NpemUgKCkgY29uc3Qg eyByZXR1cm4gdHJ1ZTsgfQpAQCAtOTk2LDYgKzEwMDgsOCBAQCBwdWJsaWM6CiAKICAgdm9pZCBy ZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpIEZJTkFMIE9WRVJSSURFOwogCisgIHZpcnR1YWwgYm9v bCBpc191bmlvbiAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKIHBy aXZhdGU6CiAgIHN0cmluZyAqIG1ha2VfZGVidWdfc3RyaW5nICgpIEZJTkFMIE9WRVJSSURFOwog ICB2b2lkIHdyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpIEZJTkFMIE9WRVJSSURFOwpA QCAtMTM5Myw2ICsxNDA3LDIzIEBAIHB1YmxpYzoKICAgICBtX2luaXRpYWxpemVyX251bV9ieXRl cyA9IG51bV9ieXRlczsKICAgfQogCisgIHZvaWQgc2V0X2ZsYWdzIChpbnQgZmxhZ19maWVsZHMp CisgIHsKKyAgICBmbGFncyA9IChlbnVtIGdsb2JhbF92YXJfZmxhZ3MpKGZsYWdzIHwgZmxhZ19m aWVsZHMpOworICB9CisgIC8qIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGZsYWdzIGluIHRo ZSBhcmd1bWVudCBpcyBzZXQuICAqLworICBib29sIHRlc3RfZmxhZ3NfYW55b2YgKGludCBmbGFn X2ZpZWxkcykgY29uc3QKKyAgeworICAgIHJldHVybiBmbGFncyAmIGZsYWdfZmllbGRzOworICB9 CisKKyAgZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIGdldF9raW5kICgpIGNvbnN0CisgIHsKKyAg ICByZXR1cm4gbV9raW5kOworICB9CisKKyAgdm9pZCBzZXRfcnZhbHVlX2luaXQgKHJ2YWx1ZSAq dmFsKSB7IG1fcnZhbHVlX2luaXQgPSB2YWw7IH0KKwogcHJpdmF0ZToKICAgc3RyaW5nICogbWFr ZV9kZWJ1Z19zdHJpbmcgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9uYW1lOyB9CiAgIHRl bXBsYXRlIDx0eXBlbmFtZSBUPgpAQCAtMTQwNSw4ICsxNDM2LDEwIEBAIHByaXZhdGU6CiAKIHBy aXZhdGU6CiAgIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBtX2tpbmQ7CisgIGVudW0gZ2xvYmFs X3Zhcl9mbGFncyBmbGFncyA9IEdMT0JBTF9WQVJfRkxBR1NfTk9ORTsKICAgc3RyaW5nICptX25h bWU7CiAgIHZvaWQgKm1faW5pdGlhbGl6ZXI7CisgIHJ2YWx1ZSAqbV9ydmFsdWVfaW5pdCA9IG51 bGxwdHI7IC8qIE9ubHkgbmVlZGVkIGZvciB3cml0ZV9kdW1wLiAgKi8KICAgc2l6ZV90IG1faW5p dGlhbGl6ZXJfbnVtX2J5dGVzOwogfTsKIApAQCAtMTQ5MSw2ICsxNTI0LDMyIEBAIHByaXZhdGU6 CiAgIGF1dG9fdmVjPHJ2YWx1ZSAqPiBtX2VsZW1lbnRzOwogfTsKIAorY2xhc3MgY3RvciA6IHB1 YmxpYyBydmFsdWUKK3sKK3B1YmxpYzoKKyAgY3RvciAoY29udGV4dCAqY3R4dCwKKwlsb2NhdGlv biAqbG9jLAorCXR5cGUgKnR5cGUpCisgIDogcnZhbHVlIChjdHh0LCBsb2MsIHR5cGUpCisgIHsg fQorCisgIHZvaWQgcmVwbGF5X2ludG8gKHJlcGxheWVyICpyKSBGSU5BTCBPVkVSUklERTsKKwor ICB2b2lkIHZpc2l0X2NoaWxkcmVuIChydmFsdWVfdmlzaXRvciAqKSBGSU5BTCBPVkVSUklERTsK KworcHJpdmF0ZToKKyAgc3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgRklOQUwgT1ZFUlJJ REU7CisgIHZvaWQgd3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgRklOQUwgT1ZFUlJJ REU7CisgIGVudW0gcHJlY2VkZW5jZSBnZXRfcHJlY2VkZW5jZSAoKSBjb25zdCBGSU5BTCBPVkVS UklERQorICB7CisgICAgcmV0dXJuIFBSRUNFREVOQ0VfUFJJTUFSWTsKKyAgfQorCitwdWJsaWM6 CisgIGF1dG9fdmVjPGZpZWxkICo+IG1fZmllbGRzOworICBhdXRvX3ZlYzxydmFsdWUgKj4gbV92 YWx1ZXM7Cit9OworCiBjbGFzcyB1bmFyeV9vcCA6IHB1YmxpYyBydmFsdWUKIHsKIHB1YmxpYzoK QEAgLTIzMzQsNiArMjM5MywyNCBAQCBwcml2YXRlOgogICBzdHJpbmcgKm1fYXNtX3N0bXRzOwog fTsKIAorY2xhc3MgZ2xvYmFsX2luaXRfcnZhbHVlIDogcHVibGljIG1lbWVudG8KK3sKK3B1Ymxp YzoKKyAgZ2xvYmFsX2luaXRfcnZhbHVlIChjb250ZXh0ICpjdHh0LCBsdmFsdWUgKnZhcmlhYmxl LCBydmFsdWUgKmluaXQpIDoKKyAgICBtZW1lbnRvIChjdHh0KSwgbV92YXJpYWJsZSAodmFyaWFi bGUpLCBtX2luaXQgKGluaXQpIHt9OworCisgIHZvaWQgd3JpdGVfdG9fZHVtcCAoZHVtcCAmZCkg RklOQUwgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgIHZvaWQgcmVwbGF5X2ludG8gKHJlcGxheWVy ICpyKSBGSU5BTCBPVkVSUklERTsKKyAgc3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgRklO QUwgT1ZFUlJJREU7CisgIHZvaWQgd3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgRklO QUwgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgIGx2YWx1ZSAqbV92YXJpYWJsZTsKKyAgcnZhbHVl ICptX2luaXQ7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBnY2M6OmppdDo6cmVjb3JkaW5nCiAKIC8q IENyZWF0ZSBhIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgaW5z dGFuY2UgYW5kIGFkZApAQCAtMjM1Myw2ICsyNDMwLDIzIEBAIHJlY29yZGluZzo6Y29udGV4dDo6 bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IChyZWNvcmRpbmc6OnR5cGUgKnR5cGUsCiAgIHJldHVybiBy ZXN1bHQ7CiB9CiAKKy8qIERvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gIENhbGwgdHlwZXNfa2lu ZGFfc2FtZS4gICovCitib29sCit0eXBlc19raW5kYV9zYW1lX2ludGVybmFsIChyZWNvcmRpbmc6 OnR5cGUgKmEsCisJCQkgICByZWNvcmRpbmc6OnR5cGUgKmIpOworCisvKiBTdHJpcCBhbGwgcXVh bGlmaWVycyBhbmQgY291bnQgcG9pbnRlciBkZXB0aCwgcmV0dXJuaW5nIHRydWUKKyAgIGlmIHRo ZSB0eXBlcyBhbmQgcG9pbnRlciBkZXB0aCBhcmUgdGhlIHNhbWUsIG90aGVyd2lzZSBmYWxzZS4K KworICAgRm9yIGFycmF5IGFuZCB2ZWN0b3IgdHlwZXMgdGhlIG51bWJlciBvZiBlbGVtZW50IGFs c28KKyAgIGhhcyB0byBtYXRjaCwgYXN3ZWxsIGFzIHRoZSBlbGVtZW50IHR5cGVzIHRoZW1zZWxm LiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAordHlwZXNfa2luZGFfc2FtZSAocmVjb3JkaW5nOjp0 eXBlICphLCByZWNvcmRpbmc6OnR5cGUgKmIpCit7CisgIC8qIEhhbmRsZSB0cml2aWFsIGNhc2Ug aGVyZSwgdG8gYWxsb3cgZm9yIGlubGluaW5nLiAgKi8KKyAgcmV0dXJuIGEgPT0gYiB8fCB0eXBl c19raW5kYV9zYW1lX2ludGVybmFsIChhLCBiKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgZ2NjOjpq aXQKIAogfSAvLyBuYW1lc3BhY2UgZ2NjCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdCsr LmggYi9nY2Mvaml0L2xpYmdjY2ppdCsrLmgKaW5kZXggODI4MzFmZjVkYTAuLjI1NDE0NjIwYWZi IDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdCsrLmgKKysrIGIvZ2NjL2ppdC9saWJnY2Nq aXQrKy5oCkBAIC0xOTcsNiArMTk3LDIwIEBAIG5hbWVzcGFjZSBnY2NqaXQKICAgICBydmFsdWUg bmV3X3J2YWx1ZSAodHlwZSB2ZWN0b3JfdHlwZSwKIAkJICAgICAgIHN0ZDo6dmVjdG9yPHJ2YWx1 ZT4gZWxlbWVudHMpIGNvbnN0OwogCisgICAgcnZhbHVlIG5ld19zdHJ1Y3RfY3RvciAodHlwZSB0 eXBlXywKKwkJCSAgICBzdGQ6OnZlY3RvcjxmaWVsZD4gJmZpZWxkcywKKwkJCSAgICBzdGQ6OnZl Y3RvcjxydmFsdWU+ICZ2YWx1ZXMsCisJCQkgICAgbG9jYXRpb24gbG9jID0gbG9jYXRpb24gKCkp OworCisgICAgcnZhbHVlIG5ld19hcnJheV9jdG9yICh0eXBlIHR5cGVfLAorCQkJICAgc3RkOjp2 ZWN0b3I8cnZhbHVlPiAmdmFsdWVzLAorCQkJICAgbG9jYXRpb24gbG9jID0gbG9jYXRpb24gKCkp OworCisgICAgcnZhbHVlIG5ld191bmlvbl9jdG9yICh0eXBlIHR5cGVfLAorCQkJICAgZmllbGQg ZmllbGQsCisJCQkgICBydmFsdWUgdmFsdWUsCisJCQkgICBsb2NhdGlvbiBsb2MgPSBsb2NhdGlv biAoKSk7CisKICAgICAvKiBHZW5lcmljIHVuYXJ5IG9wZXJhdGlvbnMuLi4gICovCiAgICAgcnZh bHVlIG5ld191bmFyeV9vcCAoZW51bSBnY2Nfaml0X3VuYXJ5X29wIG9wLAogCQkJIHR5cGUgcmVz dWx0X3R5cGUsCkBAIC01MDAsNiArNTE0LDcgQEAgbmFtZXNwYWNlIGdjY2ppdAogCiAgICAgcnZh bHVlIGdldF9hZGRyZXNzIChsb2NhdGlvbiBsb2MgPSBsb2NhdGlvbiAoKSk7CiAgICAgbHZhbHVl IHNldF9pbml0aWFsaXplciAoY29uc3Qgdm9pZCAqYmxvYiwgc2l6ZV90IG51bV9ieXRlcyk7Cisg ICAgbHZhbHVlIHNldF9pbml0aWFsaXplcl9ydmFsdWUgKHJ2YWx1ZSBpbml0X3ZhbHVlKTsKICAg fTsKIAogICBjbGFzcyBwYXJhbSA6IHB1YmxpYyBsdmFsdWUKQEAgLTE4MzEsNiArMTg0Niw4MSBA QCBsdmFsdWU6OnNldF9pbml0aWFsaXplciAoY29uc3Qgdm9pZCAqYmxvYiwgc2l6ZV90IG51bV9i eXRlcykKICAgcmV0dXJuICp0aGlzOwogfQogCitpbmxpbmUgbHZhbHVlCitsdmFsdWU6OnNldF9p bml0aWFsaXplcl9ydmFsdWUgKHJ2YWx1ZSBpbml0X3ZhbHVlKQoreworICByZXR1cm4gbHZhbHVl IChnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgKKwkJICAgZ2V0X2lubmVy X2x2YWx1ZSAoKSwKKwkJICAgaW5pdF92YWx1ZS5nZXRfaW5uZXJfcnZhbHVlICgpKSk7Cit9CisK K2lubGluZSBydmFsdWUKK2NvbnRleHQ6Om5ld19zdHJ1Y3RfY3RvciAodHlwZSB0eXBlXywKKwkJ CSAgc3RkOjp2ZWN0b3I8ZmllbGQ+ICZmaWVsZHMsCisJCQkgIHN0ZDo6dmVjdG9yPHJ2YWx1ZT4g JnZhbHVlcywKKwkJCSAgbG9jYXRpb24gbG9jKQoreworICBmaWVsZCAqcGZpZWxkcyA9IG51bGxw dHI7CisgIGlmIChmaWVsZHMuc2l6ZSAoKSkKKyAgICBwZmllbGRzID0gJmZpZWxkc1swXTsKKwor ICBnY2Nfaml0X2ZpZWxkICoqZmllbGRzX2FyciA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxnY2Nf aml0X2ZpZWxkICoqPiAocGZpZWxkcyk7CisKKyAgcnZhbHVlICpwdmFsdWVzID0gbnVsbHB0cjsK KyAgaWYgKHZhbHVlcy5zaXplICgpKQorICAgIHB2YWx1ZXMgPSAmdmFsdWVzWzBdOworCisgIGdj Y19qaXRfcnZhbHVlICoqdmFsdWVzX2FyciA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxnY2Nfaml0 X3J2YWx1ZSAqKj4gKHB2YWx1ZXMpOworCisgIHJldHVybiBydmFsdWUgKAorCSAgIGdjY19qaXRf Y29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yICgKKwkgICAgIG1faW5uZXJfY3R4dCwKKwkg ICAgIGxvYy5nZXRfaW5uZXJfbG9jYXRpb24gKCksCisJICAgICB0eXBlXy5nZXRfaW5uZXJfdHlw ZSAoKSwKKwkgICAgIChpbnQpdmFsdWVzLnNpemUgKCksCisJICAgICBmaWVsZHNfYXJyLAorCSAg ICAgdmFsdWVzX2FycikpOworfQorCitpbmxpbmUgcnZhbHVlCitjb250ZXh0OjpuZXdfYXJyYXlf Y3RvciAodHlwZSB0eXBlXywKKwkJCSBzdGQ6OnZlY3RvcjxydmFsdWU+ICZ2YWx1ZXMsCisJCQkg bG9jYXRpb24gbG9jKQoreworICBydmFsdWUgKnB2YWx1ZXMgPSBudWxscHRyOworICBpZiAodmFs dWVzLnNpemUgKCkpCisgICAgcHZhbHVlcyA9ICZ2YWx1ZXNbMF07CisKKyAgZ2NjX2ppdF9ydmFs dWUgKip2YWx1ZXNfYXJyID0KKyAgICByZWludGVycHJldF9jYXN0PGdjY19qaXRfcnZhbHVlICoq PiAocHZhbHVlcyk7CisKKyAgcmV0dXJuIHJ2YWx1ZSAoCisJICAgZ2NjX2ppdF9jb250ZXh0X25l d19hcnJheV9jb25zdHJ1Y3RvciAoCisJICAgICBtX2lubmVyX2N0eHQsCisJICAgICBsb2MuZ2V0 X2lubmVyX2xvY2F0aW9uICgpLAorCSAgICAgdHlwZV8uZ2V0X2lubmVyX3R5cGUgKCksCisJICAg ICAoaW50KXZhbHVlcy5zaXplICgpLAorCSAgICAgdmFsdWVzX2FycikpOworfQorCitpbmxpbmUg cnZhbHVlCitjb250ZXh0OjpuZXdfdW5pb25fY3RvciAodHlwZSB0eXBlXywKKwkJCSBmaWVsZCBm aWVsZCwKKwkJCSBydmFsdWUgdmFsdWUsCisJCQkgbG9jYXRpb24gbG9jKQoreworICByZXR1cm4g cnZhbHVlICgKKwkgICBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX2NvbnN0cnVjdG9yICgKKwkg ICAgIG1faW5uZXJfY3R4dCwKKwkgICAgIGxvYy5nZXRfaW5uZXJfbG9jYXRpb24gKCksCisJICAg ICB0eXBlXy5nZXRfaW5uZXJfdHlwZSAoKSwKKwkgICAgIGZpZWxkLmdldF9pbm5lcl9maWVsZCAo KSwKKwkgICAgIHZhbHVlLmdldF9pbm5lcl9ydmFsdWUgKCkpKTsKK30KKworCiAvLyBjbGFzcyBw YXJhbSA6IHB1YmxpYyBsdmFsdWUKIGlubGluZSBwYXJhbTo6cGFyYW0gKCkgOiBsdmFsdWUgKCkg e30KIGlubGluZSBwYXJhbTo6cGFyYW0gKGdjY19qaXRfcGFyYW0gKmlubmVyKQpkaWZmIC0tZ2l0 IGEvZ2NjL2ppdC9saWJnY2NqaXQuYyBiL2djYy9qaXQvbGliZ2Njaml0LmMKaW5kZXggNWQwNTFl NDNlMWUuLmVlYjBiZWZiZWMzIDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5jCisrKyBi L2djYy9qaXQvbGliZ2Njaml0LmMKQEAgLTEzODYsNiArMTM4NiwzNzkgQEAgZ2NjX2ppdF9jb250 ZXh0X25ld19nbG9iYWwgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKICAgcmV0dXJuIChnY2Nfaml0 X2x2YWx1ZSAqKWN0eHQtPm5ld19nbG9iYWwgKGxvYywga2luZCwgdHlwZSwgbmFtZSk7CiB9CiAK K2V4dGVybiBnY2Nfaml0X3J2YWx1ZSAqCitnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25z dHJ1Y3RvciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCQlnY2Nfaml0X2xvY2F0aW9uICps b2MsCisJCQkJCWdjY19qaXRfdHlwZSAqdHlwZSwKKwkJCQkJaW50IGFycl9sZW5ndGgsCisJCQkJ CWdjY19qaXRfZmllbGQgKipmaWVsZHMsCisJCQkJCWdjY19qaXRfcnZhbHVlICoqdmFsdWVzKQor eworICB1c2luZyBuYW1lc3BhY2UgZ2NjOjpqaXQ6OnJlY29yZGluZzsKKworICBSRVRVUk5fTlVM TF9JRl9GQUlMIChjdHh0LCBOVUxMLCBsb2MsICJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19G VU5DIChjdHh0LT5nZXRfbG9nZ2VyICgpKTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTCAodHlwZSwg Y3R4dCwgbG9jLCAiTlVMTCB0eXBlIik7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYx ICh0eXBlLT5pc19zdHJ1Y3QgKCksCisJCQkgICAgICAgY3R4dCwgbG9jLAorCQkJICAgICAgICJj b25zdHJ1Y3RvciB0eXBlIGlzIG5vdCBhIHN0cnVjdDogJXMiLAorCQkJICAgICAgIHR5cGUtPmdl dF9kZWJ1Z19zdHJpbmcgKCkpOworCisgIGNvbXBvdW5kX3R5cGUgKmN0ID0gcmVpbnRlcnByZXRf Y2FzdDxjb21wb3VuZF90eXBlICo+KHR5cGUpOworICBnY2M6OmppdDo6cmVjb3JkaW5nOjpmaWVs ZHMgKmZpZWxkc19zdHJ1Y3QgPSBjdC0+Z2V0X2ZpZWxkcyAoKTsKKyAgaW50IG5fZmllbGRzID0g ZmllbGRzX3N0cnVjdC0+bGVuZ3RoICgpOworCisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRG MSAoY3QtPmhhc19rbm93bl9zaXplICgpLAorCQkJICAgICAgIGN0eHQsIGxvYywKKwkJCSAgICAg ICAic3RydWN0IGNhbid0IGJlIG9wYXF1ZTogJXMiLAorCQkJICAgICAgIHR5cGUtPmdldF9kZWJ1 Z19zdHJpbmcgKCkpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjEgKG5fZmllbGRzLAor CQkJICAgICAgIGN0eHQsIGxvYywKKwkJCSAgICAgICAibm8gZmllbGRzIGluIHN0cnVjdDogJXMi LAorCQkJICAgICAgIHR5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisgIC8qIElmIHRoZXJl IGlzIG5vIGFycmF5IGlucHV0IHdlIGp1c3Qgc2hvcnQgY2lyY3VpdCB0byB6ZXJvIHRoZSBzdHJ1 Y3QuICAqLworICBpZiAoIWFycl9sZW5ndGgpCisgICAgcmV0dXJuIChnY2Nfaml0X3J2YWx1ZSAq KWN0eHQtPm5ld19jdG9yIChsb2MsIHR5cGUsIDAsIE5VTEwsIE5VTEwpOworCisgIFJFVFVSTl9O VUxMX0lGX0ZBSUwgKG5fZmllbGRzID49IGFycl9sZW5ndGgsCisJCSAgICAgICBjdHh0LCBsb2Ms CisJCSAgICAgICAibW9yZSB2YWx1ZXMgaW4gY29uc3RydWN0b3IgdGhhbiBmaWVsZHMgaW4gIgor CQkgICAgICAgInRhcmdldCBzdHJ1Y3QiKTsKKworICAvKiBJdCBpcyBPSyBpZiBmaWVsZHMgYXJl IG51bGwgaGVyZSwgaW5kaWNhdGluZyBkZWZpbml0b24gb3JkZXIsCisgICAgIGJ1dCB0aGVyZSBo YXMgdG8gYmUgYSB2YWx1ZXMgYXJyYXkuICAqLworICBSRVRVUk5fTlVMTF9JRl9GQUlMICh2YWx1 ZXMsCisJCSAgICAgICBjdHh0LCBsb2MsCisJCSAgICAgICAiJ3ZhbHVlcycgTlVMTCB3aXRoIG5v bi16ZXJvICdhcnJfbGVuZ3RoJyIpOworCisgIGludCBpZHggPSAwOyAvKiBSdW5uZXIgaW5kZXgg Zm9yIGZpZWxkcyBpbiB0aGUgdHlwZSBvYmplY3QuICAqLworCisgIGZvciAoaW50IGkgPSAwOyBp IDwgYXJyX2xlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIGdjYzo6aml0OjpyZWNvcmRpbmc6OnJ2 YWx1ZSAqcnYgPSB2YWx1ZXNbaV07CisKKyAgICAgIC8qIHJ2IGthbiBiZSBOVUxMLCB3aGljaCB3 b3VsZCBpbmRpY2F0ZSB6ZXJvIGluaXQgZm9yIHRoZSBmaWVsZC4gICovCisgICAgICBnY2M6Ompp dDo6cmVjb3JkaW5nOjp0eXBlICpydl90eXBlID0gcnYgPyBydi0+Z2V0X3R5cGUgKCkgOiBudWxs cHRyOworCisgICAgICAvKiBJZiBmaWVsZHMgYXJlIHNwZWNpZmllZCB3ZSBuZWVkIHRvIGNoZWNr IHRoYXQgdGhleSBhcmUgaW4KKwkgZGVmaW5pdGlvbiBvcmRlci4gICovCisgICAgICBpZiAoZmll bGRzKQorCXsKKwkgIGdjYzo6aml0OjpyZWNvcmRpbmc6OmZpZWxkICpmID0gZmllbGRzW2ldOwor CisJICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjEgKAorCSAgICBmLAorCSAgICBjdHh0LCBs b2MsCisJICAgICJOVUxMIGZpZWxkIGluICdmaWVsZHMnLCBhdCBpbmRleCAlZCIsIGkpOworCisJ ICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjIgKAorCSAgICBmLT5nZXRfY29udGFpbmVyICgp ID09CisJICAgIHN0YXRpY19jYXN0PGdjYzo6aml0OjpyZWNvcmRpbmc6OnR5cGUqPih0eXBlKSwK KwkgICAgY3R4dCwgbG9jLAorCSAgICAiZmllbGQgYXQgaW5kZXggJWQsIHdhcyBub3QgdXNlZCB3 aGVuIGNyZWF0aW5nICIKKwkgICAgInRoZSBzdHJ1Y3QgKCVzKSIsCisJICAgIGksCisJICAgIGYt PmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisJICAvKiBGaWVsZHMgaW4gdGhlIGNvbnN0cnVjdG9y IG5lZWQgdG8gYmUgaW4gc3RydWN0IGRlZmluaXRpb24KKwkgICAgIG9yZGVyLCBidXQgdGhlcmUg Y2FuIGJlIGdhcHMuICAqLworCSAgaW50IGo7CisJICBmb3IgKGogPSBpZHg7IGogPCBuX2ZpZWxk czsgaisrKQorCSAgICB7CisJICAgICAgZmllbGQgKmZzID0gZmllbGRzX3N0cnVjdC0+Z2V0X2Zp ZWxkIChqKTsKKwkgICAgICBpZiAoZnMgPT0gZikKKwkJeworCQkgIGlkeCA9IGo7IC8qIEFkdmFu Y2UgcnVubmVyIGluZGV4IGZvciBuZXh0IGl0ZXJhdGlvbi4gICovCisJCSAgYnJlYWs7CisJCX0K KwkgICAgfQorCisJICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjMgKAorCSAgICBqICE9IG5f ZmllbGRzLAorCSAgICBjdHh0LCBsb2MsCisJICAgICJmaWVsZCBhdCBpbmRleCAlZCBpbiAnZmll bGRzJyBpcyBub3QgaW4gZGVmaW5pdGlvbiBvcmRlciAiCisJICAgICIoc3RydWN0OiAlcykgKGN0 b3IgZmllbGQ6ICVzKSIsCisJICAgIGksCisJICAgIHR5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCks CisJICAgIGYtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisJICAvKiBDaGVjayB0aGF0IHRoZSBz cGVjaWZpZWQgZmllbGQgaGFzIHRoZSBzYW1lIHR5cGUgYXMgdGhlCisJICAgICB2YWx1ZSwgdW5s ZXNzIHRoZSB2YWx1ZSBpcyBudWxsIChhIHplcm8gdmFsdWUgaW5pdCkuICAqLworCSAgUkVUVVJO X05VTExfSUZfRkFJTF9QUklOVEYzICgKKwkgICAgIXJ2IHx8IGdjYzo6aml0Ojp0eXBlc19raW5k YV9zYW1lIChydl90eXBlLAorCQkJCQkgICAgICAgZi0+Z2V0X3R5cGUgKCkpLAorCSAgICBjdHh0 LCBsb2MsCisJICAgICJ2YWx1ZSBhbmQgZmllbGQgbm90IHRoZSBzYW1lIHVucXVhbGlmaWVkIHR5 cGUsIGF0IGluZGV4ICVkIgorCSAgICAiIChmaWVsZCB0eXBlOiAlcykodmFsdWUgdHlwZTogJXMp IiwKKwkgICAgaSwKKwkgICAgZi0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJ ICAgIHJ2X3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCX0KKworICAgICAgLyogSWYgbm8g ZmllbGRzIGFyZSBzcGVjaWZpZWQsIGNoZWNrIHRoYXQgdGhlIHZhbHVlIGhhcyB0aGUgc2FtZSB0 eXBlCisJIGFzIHRoZSBmaWVsZCBpbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RydWN0LiAgKi8K KyAgICAgIGlmIChydiAmJiAhZmllbGRzKQorCXsKKwkgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJ TlRGMyAoCisJICAgIGdjYzo6aml0Ojp0eXBlc19raW5kYV9zYW1lIChydl90eXBlLAorCQkJCQlm aWVsZHNfc3RydWN0LT4KKwkJCQkJICBnZXRfZmllbGQgKGkpLT5nZXRfdHlwZSAoKSksCisJICAg IGN0eHQsIGxvYywKKwkgICAgInZhbHVlIGFuZCBmaWVsZCBub3QgdGhlIHNhbWUgdW5xdWFsaWZp ZWQgdHlwZSwgYXQgaW5kZXggJWQiCisJICAgICIgKGZpZWxkIHR5cGU6ICVzKSh2YWx1ZSB0eXBl OiAlcykiLAorCSAgICBpLAorCSAgICBmaWVsZHNfc3RydWN0LT5nZXRfZmllbGQgKGkpLT5nZXRf dHlwZSAoKS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkgICAgcnZfdHlwZS0+Z2V0X2RlYnVnX3N0 cmluZyAoKSk7CisJfQorCisgICAgICBpZiAocnYpCisJeworCSAgUkVUVVJOX05VTExfSUZfRkFJ TF9QUklOVEYxICgKKwkgICAgIXJ2X3R5cGUtPmlzX3ZvaWQgKCksCisJICAgIGN0eHQsIGxvYywK KwkgICAgImNhbid0IGNvbnN0cnVjdCB0aGUgdm9pZCB0eXBlLCBhdCBpbmRleCAlZCIsIGkpOwor CX0KKyAgICB9CisKKyAgcmV0dXJuIChnY2Nfaml0X3J2YWx1ZSAqKWN0eHQtPm5ld19jdG9yICgK KyAgICBsb2MsCisgICAgdHlwZSwKKyAgICBhcnJfbGVuZ3RoLAorICAgIHJlaW50ZXJwcmV0X2Nh c3Q8Z2NjOjpqaXQ6OnJlY29yZGluZzo6ZmllbGQqKj4oZmllbGRzKSwKKyAgICByZWludGVycHJl dF9jYXN0PGdjYzo6aml0OjpyZWNvcmRpbmc6OnJ2YWx1ZSoqPih2YWx1ZXMpKTsKK30KKworZXh0 ZXJuIGdjY19qaXRfcnZhbHVlICoKK2djY19qaXRfY29udGV4dF9uZXdfdW5pb25fY29uc3RydWN0 b3IgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJCQkgICAgICAgZ2NjX2ppdF9sb2NhdGlvbiAq bG9jLAorCQkJCSAgICAgICBnY2Nfaml0X3R5cGUgKnR5cGUsCisJCQkJICAgICAgIGdjY19qaXRf ZmllbGQgKmZpZWxkLAorCQkJCSAgICAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWUpCit7CisgIHVz aW5nIG5hbWVzcGFjZSBnY2M6OmppdDo6cmVjb3JkaW5nOworCisgIFJFVFVSTl9OVUxMX0lGX0ZB SUwgKGN0eHQsIE5VTEwsIGxvYywgIk5VTEwgY29udGV4dCIpOworICBKSVRfTE9HX0ZVTkMgKGN0 eHQtPmdldF9sb2dnZXIgKCkpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMICh0eXBlLCBjdHh0LCBs b2MsICJOVUxMIHR5cGUiKTsKKworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjEgKHR5cGUt PmlzX3VuaW9uICgpLAorCQkJICAgICAgIGN0eHQsIGxvYywKKwkJCSAgICAgICAiY29uc3RydWN0 b3IgdHlwZSBpcyBub3QgYW4gdW5pb246ICVzIiwKKwkJCSAgICAgICB0eXBlLT5nZXRfZGVidWdf c3RyaW5nICgpKTsKKworICBjb21wb3VuZF90eXBlICpjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29t cG91bmRfdHlwZSAqPih0eXBlKTsKKyAgZ2NjOjpqaXQ6OnJlY29yZGluZzo6ZmllbGRzICpmaWVs ZHNfdW5pb24gPSBjdC0+Z2V0X2ZpZWxkcyAoKTsKKyAgaW50IG5fZmllbGRzID0gZmllbGRzX3Vu aW9uLT5sZW5ndGggKCk7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYxIChjdC0+aGFz X2tub3duX3NpemUgKCksCisJCQkgICAgICAgY3R4dCwgbG9jLAorCQkJICAgICAgICJ1bmlvbiBj YW4ndCBiZSBvcGFxdWU6ICVzIiwKKwkJCSAgICAgICB0eXBlLT5nZXRfZGVidWdfc3RyaW5nICgp KTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYxIChuX2ZpZWxkcywKKwkJCSAgICAgICBj dHh0LCBsb2MsCisJCQkgICAgICAgIm5vIGZpZWxkcyBpbiB1bmlvbjogJXMiLAorCQkJICAgICAg IHR5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisgIC8qIElmIHZhbHVlIGlzIE5VTEwgd2Ug YXJlIGp1c3Qgc3VwcG9zZWQgdG8gemVybyB0aGUgd2hvbGUgdW5pb24uICAqLworICBpZiAoIXZh bHVlKQorICAgIHJldHVybiAoZ2NjX2ppdF9ydmFsdWUgKiljdHh0LT5uZXdfY3RvciAobG9jLCB0 eXBlLCAwLCBOVUxMLCBOVUxMKTsKKworICBnY2M6OmppdDo6cmVjb3JkaW5nOjp0eXBlICpydl90 eXBlID0gdmFsdWUtPmdldF90eXBlICgpOworCisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKAorICAg ICFydl90eXBlLT5pc192b2lkICgpLAorICAgIGN0eHQsIGxvYywKKyAgICAiY2FuJ3QgY29uc3Ry dWN0IHRoZSB2b2lkIHR5cGUiKTsKKworICBpZiAoZmllbGQpCisgICAgeworICAgICAgUkVUVVJO X05VTExfSUZfRkFJTF9QUklOVEYxICgKKwlmaWVsZC0+Z2V0X2NvbnRhaW5lciAoKSA9PQorCXN0 YXRpY19jYXN0PGdjYzo6aml0OjpyZWNvcmRpbmc6OnR5cGUqPih0eXBlKSwKKwljdHh0LCBsb2Ms CisJImZpZWxkIHdhcyBub3QgdXNlZCB3aGVuIGNyZWF0aW5nICIKKwkidGhlIHVuaW9uICglcyki LAorCWZpZWxkLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKworICAgICAgUkVUVVJOX05VTExfSUZf RkFJTF9QUklOVEYyICgKKwlnY2M6OmppdDo6dHlwZXNfa2luZGFfc2FtZSAocnZfdHlwZSwKKwkJ CQkgICAgZmllbGQtPmdldF90eXBlICgpKSwKKwljdHh0LCBsb2MsCisJInZhbHVlIGFuZCBmaWVs ZCBhcmUgbm90IHRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUiCisJIiAoZmllbGQgdHlwZTogJXMp KHZhbHVlIHR5cGU6ICVzKSIsCisJZmllbGQtPmdldF90eXBlICgpLT5nZXRfZGVidWdfc3RyaW5n ICgpLAorCXJ2X3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworICAgIH0KKyAgLyogSWYgbm8g ZmllbGQgaXMgc3BlY2lmaWVkLCBjaGVjayB0aGF0IHRoZSB2YWx1ZSBoYXMgdGhlIHNhbWUgdHlw ZQorICAgICBhcyB0aGUgZmlyc3QgZmllbGQgaW4gdGhlIGRlZmluaXRpb24gb2YgdGhlIHVuaW9u LiAgKi8KKyAgaWYgKCFmaWVsZCkKKyAgICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjIgKAor ICAgICAgZ2NjOjpqaXQ6OnR5cGVzX2tpbmRhX3NhbWUgKHJ2X3R5cGUsCisJCQkJICBmaWVsZHNf dW5pb24tPgorCQkJCSAgICBnZXRfZmllbGQgKDApLT5nZXRfdHlwZSAoKSksCisgICAgICBjdHh0 LCBsb2MsCisgICAgICAidmFsdWUgYW5kIGZpcnN0IHVuaW9uIGZpZWxkIG5vdCB0aGUgc2FtZSB1 bnF1YWxpZmllZCB0eXBlIgorICAgICAgIiAoZmllbGQgdHlwZTogJXMpKHZhbHVlIHR5cGU6ICVz KSIsCisgICAgICBmaWVsZHNfdW5pb24tPmdldF9maWVsZCAoMCktPmdldF90eXBlICgpLT5nZXRf ZGVidWdfc3RyaW5nICgpLAorICAgICAgcnZfdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisK KworICByZXR1cm4gKGdjY19qaXRfcnZhbHVlICopY3R4dC0+bmV3X2N0b3IgKAorICAgIGxvYywK KyAgICB0eXBlLAorICAgIDEsCisgICAgLyogQSBOVUxMIGZpZWxkcyBhcnJheSB0ZWxscyBuZXdf Y3RvciB0byB0YWtlIGZpZWxkcyBmcm9tIHRoZSB0eXBlIG9iai4gICovCisgICAgcmVpbnRlcnBy ZXRfY2FzdDxnY2M6OmppdDo6cmVjb3JkaW5nOjpmaWVsZCoqPihmaWVsZCA/ICZmaWVsZCA6IE5V TEwpLAorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NjOjpqaXQ6OnJlY29yZGluZzo6cnZhbHVlKio+ KCZ2YWx1ZSkpOworfQorCitleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0 X25ld19hcnJheV9jb25zdHJ1Y3RvciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCSAgICAg ICBnY2Nfaml0X2xvY2F0aW9uICpsb2MsCisJCQkJICAgICAgIGdjY19qaXRfdHlwZSAqdHlwZSwK KwkJCQkgICAgICAgaW50IGFycl9sZW5ndGgsCisJCQkJICAgICAgIGdjY19qaXRfcnZhbHVlICoq dmFsdWVzKQoreworICB1c2luZyBuYW1lc3BhY2UgZ2NjOjpqaXQ6OnJlY29yZGluZzsKKworICBS RVRVUk5fTlVMTF9JRl9GQUlMIChjdHh0LCBOVUxMLCBsb2MsICJOVUxMIGNvbnRleHQiKTsKKyAg SklUX0xPR19GVU5DIChjdHh0LT5nZXRfbG9nZ2VyICgpKTsKKyAgUkVUVVJOX05VTExfSUZfRkFJ TCAodHlwZSwgY3R4dCwgbG9jLCAiTlVMTCB0eXBlIik7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJ TCAodHlwZS0+aXNfYXJyYXkgKCkgIT0gTlVMTCwKKwkJICAgICAgIGN0eHQsIGxvYywKKwkJICAg ICAgICJjb25zdHJ1Y3RvciB0eXBlIG5vdCBhbiBhcnJheSIpOworCisgIGlmICghYXJyX2xlbmd0 aCkKKyAgICB2YWx1ZXMgPSBOVUxMOworCisgIGlmIChhcnJfbGVuZ3RoKQorICAgIHsKKyAgICAg IFJFVFVSTl9OVUxMX0lGX0ZBSUwgKAorCXZhbHVlcywKKwljdHh0LCBsb2MsCisJIid2YWx1ZXMn IE5VTEwgd2l0aCBub24temVybyAnYXJyX2xlbmd0aCciKTsKKworICAgICAgZ2NjOjpqaXQ6OnJl Y29yZGluZzo6YXJyYXlfdHlwZSAqYXJyX3R5cGUgPQorCXJlaW50ZXJwcmV0X2Nhc3Q8Z2NjOjpq aXQ6OnJlY29yZGluZzo6YXJyYXlfdHlwZSo+KHR5cGUpOworICAgICAgaW50IG5fZWwgPSBhcnJf dHlwZS0+bnVtX2VsZW1lbnRzICgpOworCisgICAgICBSRVRVUk5fTlVMTF9JRl9GQUlMICgKKwlu X2VsID49IGFycl9sZW5ndGgsCisJY3R4dCwgbG9jLAorCSJhcnJheSBjb25zdHJ1Y3RvciBoYXMg bW9yZSB2YWx1ZXMgdGhhbiB0aGUgYXJyYXkgdHlwZSdzIGxlbmd0aCIpOworCisgICAgICAvKiBG b3IgYXJyYXlzLCBhbGwgdmFsdWVzIG5lZWQgdG8gYmUgdGhlIHNhbWUgYmFzZSB0eXBlLiAgKi8K KyAgICAgIGdjYzo6aml0OjpyZWNvcmRpbmc6OnR5cGUgKnR5cGUwID0gTlVMTDsKKyAgICAgIGlu dCBpID0gMDsKKyAgICAgIC8qIEZpbmQgZmlyc3Qgbm9uLW51bGwgdmFsdWUuICAqLworICAgICAg Zm9yICg7aSA8IGFycl9sZW5ndGg7IGkrKykKKwl7CisJICBpZiAodmFsdWVzW2ldKQorCSAgICBi cmVhazsKKwl9CisKKyAgICAgIGlmIChpIDwgYXJyX2xlbmd0aCkgLyogQWxsIHZhbHVlcyBtaWdo dCBiZSBudWxsIGFuZCBpID09IGFycl9sZW5ndGguICAqLworCXR5cGUwID0gdmFsdWVzW2ldLT5n ZXRfdHlwZSAoKTsKKworICAgICAgLyogSWYgd2UgZ290IGEgdHlwZTAsIGNoZWNrIHRoYXQgYWxs IG90aGVyIHZhbHVlcyBoYXZlCisJIHRoZSBzYW1lIHR5cGUuICAqLworICAgICAgZm9yICg7IGkg PCBhcnJfbGVuZ3RoOyBpKyspCisJeworCSAgaWYgKHZhbHVlc1tpXSkKKwkgICAgUkVUVVJOX05V TExfSUZfRkFJTF9QUklOVEYzICgKKwkgICAgICBnY2M6OmppdDo6dHlwZXNfa2luZGFfc2FtZSAo dHlwZTAsCisJCQkJCSAgdmFsdWVzW2ldLT5nZXRfdHlwZSAoKSksCisJICAgICAgY3R4dCwgbG9j LAorCSAgICAgICJ2YWx1ZSB0eXBlIGF0IGluZGV4ICVkIGRpZmZlciBmcm9tIGZpcnN0IHZhbHVl IHR5cGUiCisJICAgICAgIiAoZmlyc3QgdHlwZTogJXMpKGRpZmZlcmVudCB0eXBlOiAlcykiLAor CSAgICAgIGksCisJICAgICAgdHlwZTAtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJICAgICAgdmFs dWVzW2ldLT5nZXRfdHlwZSAoKS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisJfQorCisgICAgICAv KiBDb21wYXJlIHR5cGUwIHdpdGggdGhlIGVsZW1lbnQgdHlwZSBzcGVjaWZpZWQgaW4gdGhlCisJ IHR5cGUgb2YgdGhlIGFycmF5LiAgKi8KKyAgICAgIGlmICh0eXBlMCkKKwl7CisJICBnY2M6Ompp dDo6cmVjb3JkaW5nOjp0eXBlICplbF90eXBlID0KKwkgICAgdHlwZS0+aXNfYXJyYXkgKCk7CisK KwkgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMiAoCisJICAgIGdjYzo6aml0Ojp0eXBlc19r aW5kYV9zYW1lICh0eXBlMCwgZWxfdHlwZSksCisJICAgIGN0eHQsIGxvYywKKwkgICAgImFycmF5 IGVsZW1lbnQgdmFsdWUgdHlwZXMgZGlmZmVyIGZyb20gdHlwZXMgaW4gJ3ZhbHVlcyciCisJICAg ICIgKGVsZW1lbnQgdHlwZTogJXMpKCd2YWx1ZXMnIHR5cGU6ICVzKSIsCisJICAgIGVsX3R5cGUt PmdldF9kZWJ1Z19zdHJpbmcgKCksCisJICAgIHR5cGUwLT5nZXRfZGVidWdfc3RyaW5nICgpKTsK Kwl9CisgICAgfQorCisgIHJldHVybiAoZ2NjX2ppdF9ydmFsdWUgKiljdHh0LT5uZXdfY3RvciAo CisgICAgbG9jLAorICAgIHR5cGUsCisgICAgYXJyX2xlbmd0aCwKKyAgICBOVUxMLAorICAgIHJl aW50ZXJwcmV0X2Nhc3Q8Z2NjOjpqaXQ6OnJlY29yZGluZzo6cnZhbHVlKio+KHZhbHVlcykpOwor fQorCisvKiBQdWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQu aC4gICovCisKK2V4dGVybiBnY2Nfaml0X2x2YWx1ZSAqCitnY2Nfaml0X2dsb2JhbF9zZXRfaW5p dGlhbGl6ZXJfcnZhbHVlIChnY2Nfaml0X2x2YWx1ZSAqZ2xvYmFsLAorCQkJCSAgICAgICBnY2Nf aml0X3J2YWx1ZSAqaW5pdF9ydmFsdWUpCit7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKGdsb2Jh bCwgTlVMTCwgTlVMTCwiTlVMTCBnbG9iYWwiKTsKKworICBnY2M6OmppdDo6cmVjb3JkaW5nOjpj b250ZXh0ICpjdHh0ID0gZ2xvYmFsLT5nZXRfY29udGV4dCAoKTsKKyAgUkVUVVJOX05VTExfSUZf RkFJTCAoY3R4dCwgTlVMTCwgTlVMTCwiTlVMTCBjb250ZXh0Iik7CisgIEpJVF9MT0dfRlVOQyAo Y3R4dC0+Z2V0X2xvZ2dlciAoKSk7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKGluaXRfcnZhbHVl LCBjdHh0LCBOVUxMLCJOVUxMIGluaXRfcnZhbHVlIik7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJ TF9QUklOVEYxIChnbG9iYWwtPmlzX2dsb2JhbCAoKSwKKwkJCSAgICAgICBjdHh0LCBOVUxMLAor CQkJICAgICAgICJsdmFsdWUgXCIlc1wiIG5vdCBhIGdsb2JhbCIsCisJCQkgICAgICAgZ2xvYmFs LT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKworICBnY2M6OmppdDo6cmVjb3JkaW5nOjpnbG9iYWwg KmdibCA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxnY2M6OmppdDo6cmVjb3JkaW5nOjpnbG9iYWwg Kj4gKGdsb2JhbCk7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYxIChnYmwtPmdldF9r aW5kICgpICE9CisJCQkgICAgICAgR0NDX0pJVF9HTE9CQUxfSU1QT1JURUQsCisJCQkgICAgICAg Y3R4dCwgTlVMTCwKKwkJCSAgICAgICAiY2FuJ3QgaW5pdGlhbGl6ZSBcIiVzXCIsIGl0IGlzIGlt cG9ydGVkIiwKKwkJCSAgICAgICBnbG9iYWwtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisgIFJF VFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGNCAoZ2NjOjpqaXQ6OnR5cGVzX2tpbmRhX3NhbWUgKAor CQkJCSBnbG9iYWwtPmdldF90eXBlICgpLAorCQkJCSBpbml0X3J2YWx1ZS0+Z2V0X3R5cGUgKCkp LAorCQkJICAgICAgIGN0eHQsIE5VTEwsCisJCQkgICAgICAgIm1pc21hdGNoaW5nIHR5cGVzOiIK KwkJCSAgICAgICAiIGluaXRpYWxpemluZyAlcyAodHlwZTogJXMpIHdpdGggJXMgKHR5cGU6ICVz KSIsCisJCQkgICAgICAgZ2xvYmFsLT5nZXRfZGVidWdfc3RyaW5nICgpLAorCQkJICAgICAgIGds b2JhbC0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJCQkgICAgICAgaW5pdF9y dmFsdWUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJCQkgICAgICAgaW5pdF9ydmFsdWUtPmdldF90 eXBlICgpLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKworICAvKiBDaGVjayB0aGF0IHRoZXJlIGFy ZSBubyBpbml0aWFsaXplcnMgc2V0IGZvciB0aGUgZ2xvYmFsIHlldC4gICovCisgIFJFVFVSTl9O VUxMX0lGX0ZBSUxfUFJJTlRGMSAoIWdibC0+dGVzdF9mbGFnc19hbnlvZiAoCisJCQkJICBnY2M6 OmppdDo6R0xPQkFMX1ZBUl9GTEFHU19XSUxMX0JFX1JWQUxfSU5JVCB8CisJCQkJICBnY2M6Ompp dDo6R0xPQkFMX1ZBUl9GTEFHU19XSUxMX0JFX0JMT0JfSU5JVCksCisJCQkgICAgICAgY3R4dCwg TlVMTCwKKwkJCSAgICAgICAiZ2xvYmFsIHZhcmlhYmxlIGFsbHJlYWR5IGluaXRpYWxpemVkOiAl cyIsCisJCQkgICAgICAgZ2xvYmFsLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKworICAvKiBUaGUg Z2xvYmFsIG5lZWQgdG8ga25vdyBkdXJpbmcgcGxheWJhY2sgdGhhdCBpdCB3aWxsIGJlCisgICAg IGluaXRpYWxpemVkLiAgKi8KKyAgZ2JsLT5zZXRfZmxhZ3MgKGdjYzo6aml0OjpHTE9CQUxfVkFS X0ZMQUdTX1dJTExfQkVfUlZBTF9JTklUKTsKKworICBjdHh0LT5uZXdfZ2xvYmFsX2luaXRfcnZh bHVlIChnbG9iYWwsIGluaXRfcnZhbHVlKTsKKworICByZXR1cm4gZ2xvYmFsOworfQorCiAvKiBQ dWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4KIAogICAg QWZ0ZXIgZXJyb3ItY2hlY2tpbmcsIHRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSB0aGUKQEAgLTE0 MTksOCArMTc5MiwyMiBAQCBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXIgKGdjY19qaXRf bHZhbHVlICpnbG9iYWwsCiAgICAgIiBnbG9iYWwgXCIlc1wiIGhhcyBzaXplICV6dSB3aGVyZWFz IGluaXRpYWxpemVyIGhhcyBzaXplICV6dSIsCiAgICAgZ2xvYmFsLT5nZXRfZGVidWdfc3RyaW5n ICgpLCBsdmFsdWVfc2l6ZSwgbnVtX2J5dGVzKTsKIAotICByZWludGVycHJldF9jYXN0IDxnY2M6 OmppdDo6cmVjb3JkaW5nOjpnbG9iYWwgKj4gKGdsb2JhbCkKLSAgICAtPnNldF9pbml0aWFsaXpl ciAoYmxvYiwgbnVtX2J5dGVzKTsKKyAgLyogQ2hlY2sgdGhhdCB0aGUgcnZhbHVlIGluaXRpYWxp emVyIGlzIG5vdCBzZXQgZm9yIHRoaXMgZ2xvYmFsLgorICAgICBOb3RlIHRoYXQgd2UgZG8gbm90 IGNoZWNrIGlmIHRoaXMgYmxvYiB0eXBlIGluaXRpYWxpemVyIGlzCisgICAgIGFsbHJlYWR5IHNl dCwgc2luY2UgdGhhdCBjaGVjayB3YXMgbm90IHByZXNlbnQgd2hlbiB0aGUgZW50cnlwb2ludAor ICAgICB3YXMgaW5pdGlhbGx5IHdyaXR0ZW4uICAqLworICBnY2M6OmppdDo6cmVjb3JkaW5nOjpn bG9iYWwgKmdibCA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxnY2M6OmppdDo6cmVjb3JkaW5nOjpn bG9iYWwgKj4gKGdsb2JhbCk7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAoIWdibC0+ dGVzdF9mbGFnc19hbnlvZiAoCisJCQkJICBnY2M6OmppdDo6R0xPQkFMX1ZBUl9GTEFHU19XSUxM X0JFX1JWQUxfSU5JVCksCisJCQkgICAgICAgTlVMTCwgTlVMTCwKKwkJCSAgICAgICAiZ2xvYmFs IHZhcmlhYmxlIGFsbHJlYWR5IGluaXRpYWxpemVkOiAlcyIsCisJCQkgICAgICAgZ2xvYmFsLT5n ZXRfZGVidWdfc3RyaW5nICgpKTsKKworICBnYmwtPnNldF9pbml0aWFsaXplciAoYmxvYiwgbnVt X2J5dGVzKTsKKyAgLyogVGhlIGdsb2JhbCBuZWVkIHRvIGtub3cgZHVyaW5nIHBsYXliYWNrIHRo YXQgaXQgd2lsbCBiZQorICAgICBpbml0aWFsaXplZC4gICovCisgIGdibC0+c2V0X2ZsYWdzIChn Y2M6OmppdDo6R0xPQkFMX1ZBUl9GTEFHU19XSUxMX0JFX0JMT0JfSU5JVCk7CiAKICAgcmV0dXJu IGdsb2JhbDsKIH0KZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmggYi9nY2Mvaml0L2xp YmdjY2ppdC5oCmluZGV4IGExYzk0MzZjNTQ1Li42YWI2NTJhNWI1YyAxMDA2NDQKLS0tIGEvZ2Nj L2ppdC9saWJnY2NqaXQuaAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5oCkBAIC04MTIsNiArODEy LDE1NiBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0 LAogCQkJICAgIGdjY19qaXRfdHlwZSAqdHlwZSwKIAkJCSAgICBjb25zdCBjaGFyICpuYW1lKTsK IAorI2RlZmluZSBMSUJHQ0NKSVRfSEFWRV9DVE9SUworCisvKiBDcmVhdGUgYSBjb25zdHJ1Y3Rv ciBmb3IgYW4gc3RydWN0IGFzIGEgcnZhbHVlLgorCisgICBSZXR1cm5zIE5VTEwgb24gZXJyb3Iu ICBUaGUgdHdvIHBhcmFtZXRlciBhcnJheXMgYXJlIGNvcGllZCBhbmQKKyAgIGRvIG5vdCBoYXZl IHRvIG91dGxpdmUgdGhlIGNvbnRleHQuCisKKyAgIGB0eXBlYCBzcGVjaWZpZXMgd2hhdCB0aGUg Y29uc3RydWN0b3Igd2lsbCBidWlsZCBhbmQgaGFzIHRvIGJlCisgICBhIHN0cnVjdC4KKworICAg YGFycl9sZW5ndGhgIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGB2YWx1ZXNg LgorCisgICBgZmllbGRzYCBuZWVkIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIGB2YWx1ZXNg LCBvciBiZSBOVUxMLgorCisgICBJZiBgZmllbGRzYCBpcyBudWxsLCB0aGUgdmFsdWVzIGFyZSBh cHBsaWVkIGluIGRlZmluaXRpb24gb3JkZXIuCisKKyAgIE90aGVyd2lzZSwgZWFjaCBmaWVsZCBp biBgZmllbGRzYCBzcGVjaWZpZXMgd2hpY2ggZmllbGQgaW4gdGhlIHN0cnVjdCB0bworICAgc2V0 IHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIGB2YWx1ZXNgLiAgYGZpZWxkc2AgYW5kIGB2 YWx1ZXNgCisgICBhcmUgcGFpcmVkIGJ5IGluZGV4LgorCisgICBFYWNoIHZhbHVlIGhhcyB0byBo YXZlIGhhdmUgdGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZSBhcyB0aGUgZmllbGQKKyAgIGl0IGlz IGFwcGxpZWQgdG8uCisKKyAgIEEgTlVMTCB2YWx1ZSBlbGVtZW50ICBpbiBgdmFsdWVzYCBpcyBh IHNob3J0aGFuZCBmb3IgemVybyBpbml0aWFsaXphdGlvbgorICAgb2YgdGhlIGNvcnJlc3BvbmRp bmcgZmllbGQuCisKKyAgIFRoZSBmaWVsZHMgaW4gYGZpZWxkc2AgaGF2ZSB0byBiZSBpbiBkZWZp bml0aW9uIG9yZGVyLCBidXQgdGhlcmUKKyAgIGNhbiBiZSBnYXBzLiAgQW55IGZpZWxkIGluIHRo ZSBzdHJ1Y3QgdGhhdCBpcyBub3Qgc3BlY2lmaWVkIGluCisgICBgZmllbGRzYCB3aWxsIGJlIHpl cm9lZC4KKworICAgVGhlIGZpZWxkcyBpbiBgZmllbGRzYCBuZWVkIHRvIGJlIHRoZSBzYW1lIG9i amVjdHMgdGhhdCB3ZXJlIHVzZWQKKyAgIHRvIGNyZWF0ZSB0aGUgc3RydWN0LgorCisgICBJZiBg YXJyX2xlbmd0aGAgaXMgMCwgdGhlIGFycmF5IHBhcmFtZXRlcnMgd2lsbCBiZQorICAgaWdub3Jl ZCBhbmQgemVybyBpbml0aWFsaXphdGlvbiB3aWxsIGJlIHVzZWQuCisKKyAgIFRoZSBjb25zdHJ1 Y3RvciBydmFsdWUgY2FuIGJlIHVzZWQgZm9yIGFzc2lnbm1lbnQgdG8gbG9jYWxzLgorICAgSXQg Y2FuIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBnbG9iYWwgdmFyaWFibGVzIHdpdGgKKyAgIGdjY19q aXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUuICBJdCBjYW4gYWxzbyBiZSB1c2VkIGFz IGEKKyAgIHRlbXBvcmFyeSB2YWx1ZSBmb3IgZnVuY3Rpb24gY2FsbHMgYW5kIHJldHVybiB2YWx1 ZXMuCisKKyAgIFRoZSBjb25zdHJ1Y3RvciBjYW4gY29udGFpbiBuZXN0ZWQgY29uc3RydWN0b3Jz LgorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIExJQkdDQ0pJVF9BQklfMTY7IHlv dSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5zZSB1c2luZzoKKyAgICNpZmRlZiBMSUJHQ0NK SVRfSEFWRV9DVE9SUworKi8KKworZXh0ZXJuIGdjY19qaXRfcnZhbHVlICoKK2djY19qaXRfY29u dGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCQkJ CWdjY19qaXRfbG9jYXRpb24gKmxvYywKKwkJCQkJZ2NjX2ppdF90eXBlICp0eXBlLAorCQkJCQlp bnQgYXJyX2xlbmd0aCwKKwkJCQkJZ2NjX2ppdF9maWVsZCAqKmZpZWxkcywKKwkJCQkJZ2NjX2pp dF9ydmFsdWUgKip2YWx1ZXMpOworCisvKiBDcmVhdGUgYSBjb25zdHJ1Y3RvciBmb3IgYW4gdW5p b24gYXMgYSBydmFsdWUuCisKKyAgIFJldHVybnMgTlVMTCBvbiBlcnJvci4KKworICAgYHR5cGVg IHNwZWNpZmllcyB3aGF0IHRoZSBjb25zdHJ1Y3RvciB3aWxsIGJ1aWxkIGFuZCBoYXMgdG8gYmUK KyAgIGFuIHVuaW9uLgorCisgICBgZmllbGRgIHNwZWNpZmllcyB3aGljaCBmaWVsZCB0byBzZXQu ICBJZiBpdCBpcyBOVUxMLCB0aGUgZmlyc3QKKyAgIGZpZWxkIGluIHRoZSB1bmlvbiB3aWxsIGJl IHNldC4gIGBmaWVsZGAgbmVlZCB0byBiZSB0aGUgc2FtZQorICAgb2JqZWN0IHRoYXQgd2VyZSB1 c2VkIHRvIGNyZWF0ZSB0aGUgdW5pb24uCisKKyAgIGB2YWx1ZWAgc3BlY2lmaWVzIHdoYXQgdmFs dWUgdG8gc2V0IHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIHRvLgorICAgSWYgYHZhbHVlYCBpcyBO VUxMLCB6ZXJvIGluaXRpYWxpemF0aW9uIHdpbGwgYmUgdXNlZC4KKworICAgRWFjaCB2YWx1ZSBo YXMgdG8gaGF2ZSBoYXZlIHRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUgYXMgdGhlIGZpZWxkCisg ICBpdCBpcyBhcHBsaWVkIHRvLgorCisgICBgZmllbGRgIG5lZWQgdG8gYmUgdGhlIHNhbWUgb2Jq ZWN0cyB0aGF0IHdlcmUgdXNlZAorICAgdG8gY3JlYXRlIHRoZSB1bmlvbi4KKworICAgVGhlIGNv bnN0cnVjdG9yIHJ2YWx1ZSBjYW4gYmUgdXNlZCBmb3IgYXNzaWdubWVudCB0byBsb2NhbHMuCisg ICBJdCBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXplIGdsb2JhbCB2YXJpYWJsZXMgd2l0aAorICAg Z2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZS4gIEl0IGNhbiBhbHNvIGJlIHVz ZWQgYXMgYQorICAgdGVtcG9yYXJ5IHZhbHVlIGZvciBmdW5jdGlvbiBjYWxscyBhbmQgcmV0dXJu IHZhbHVlcy4KKworICAgVGhlIGNvbnN0cnVjdG9yIGNhbiBjb250YWluIG5lc3RlZCBjb25zdHJ1 Y3RvcnMuCisKKyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8x NjsgeW91IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbnNlIHVzaW5nOgorICAgI2lmZGVmIExJ QkdDQ0pJVF9IQVZFX0NUT1JTCisqLworCitleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2pp dF9jb250ZXh0X25ld191bmlvbl9jb25zdHJ1Y3RvciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAor CQkJCSAgICAgICBnY2Nfaml0X2xvY2F0aW9uICpsb2MsCisJCQkJICAgICAgIGdjY19qaXRfdHlw ZSAqdHlwZSwKKwkJCQkgICAgICAgZ2NjX2ppdF9maWVsZCAqZmllbGQsCisJCQkJICAgICAgIGdj Y19qaXRfcnZhbHVlICp2YWx1ZSk7CisKKy8qIENyZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBhbiBh cnJheSBhcyBhIHJ2YWx1ZS4KKworICAgUmV0dXJucyBOVUxMIG9uIGVycm9yLgorCisgICBgdHlw ZWAgc3BlY2lmaWVzIHdoYXQgdGhlIGNvbnN0cnVjdG9yIHdpbGwgYnVpbGQgYW5kIGhhcyB0byBi ZQorICAgYW4gYXJyYXkuCisKKyAgIGBhcnJfbGVuZ3RoYCBzcGVjaWZpZXMgdGhlIG51bWJlciBv ZiBlbGVtZW50cyBpbiBgdmFsdWVzYCBhbmQKKyAgIGl0IGNhbid0IGhhdmUgbW9yZSBlbGVtZW50 cyB0aGFuIHRoZSBhcnJheSB0eXBlLgorCisgICBFYWNoIHZhbHVlIGluIGB2YWx1ZXNgIHNldHMg dGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIGFycmF5LgorICAgSWYgdGhlIGFycmF5IHR5 cGUgaXRzZWxmIGhhcyBtb3JlIGVsZW1lbnRzIHRoYW4gYHZhbHVlc2AsIHRoZQorICAgbGVmdC1v dmVyIGVsZW1lbnRzIHdpbGwgYmUgemVyb2VkLgorCisgICBFYWNoIHZhbHVlIGluIGB2YWx1ZXNg IG5lZWQgdG8gYmUgdGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZSBhcyB0aGUKKyAgIGFycmF5IHR5 cGUncyBlbGVtZW50IHR5cGUuCisKKyAgIElmIGBhcnJfbGVuZ3RoYCBpcyAwLCB0aGUgYHZhbHVl c2AgcGFyYW1ldGVyIHdpbGwgYmUKKyAgIGlnbm9yZWQgYW5kIHplcm8gaW5pdGlhbGl6YXRpb24g d2lsbCBiZSB1c2VkLgorCisgICBOb3RlIHRoYXQgYSBzdHJpbmcgbGl0ZXJhbCBydmFsdWUgY2Fu J3QgYmUgdXNlZCB0byBjb25zdHJ1Y3QgYSBjaGFyCisgICBhcnJheS4gIEl0IG5lZWRzIG9uZSBy dmFsdWUgZm9yIGVhY2ggY2hhci4KKworICAgVGhpcyBlbnRyeXBvaW50IHdhcyBhZGRlZCBpbiBM SUJHQ0NKSVRfQUJJXzE2OyB5b3UgY2FuIHRlc3QgZm9yIGl0cworICAgcHJlc2Vuc2UgdXNpbmc6 CisgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ1RPUlMKKyovCisKK2V4dGVybiBnY2Nfaml0X3J2 YWx1ZSAqCitnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yIChnY2Nfaml0X2Nv bnRleHQgKmN0eHQsCisJCQkJICAgICAgIGdjY19qaXRfbG9jYXRpb24gKmxvYywKKwkJCQkgICAg ICAgZ2NjX2ppdF90eXBlICp0eXBlLAorCQkJCSAgICAgICBpbnQgYXJyX2xlbmd0aCwKKwkJCQkg ICAgICAgZ2NjX2ppdF9ydmFsdWUgKip2YWx1ZXMpOworCisvKiBTZXQgdGhlIGluaXRpYWwgdmFs dWUgb2YgYSBnbG9iYWwgb2YgYW55IHR5cGUgd2l0aCBhbiBydmFsdWUuCisKKyAgIFRoZSBydmFs dWUgbmVlZCB0byBiZSBhIGNvbnN0YW50IGV4cHJlc3Npb24sIGUuZy4gbm8gZnVuY3Rpb24gY2Fs bHMuCisKKyAgIFRoZSBnbG9iYWwgY2FuJ3QgaGF2ZSB0aGUgJ2tpbmQnIEdDQ19KSVRfR0xPQkFM X0lNUE9SVEVELgorCisgICBVc2UgdG9nZXRoZXIgd2l0aCBnY2Nfaml0X2NvbnRleHRfbmV3X2Nv bnN0cnVjdG9yICgpIHRvCisgICBpbml0aWFsaXplIHN0cnVjdHMsIHVuaW9ucyBhbmQgYXJyYXlz LgorCisgICBPbiBzdWNjZXNzLCByZXR1cm5zIHRoZSAnZ2xvYmFsJyBwYXJhbWV0ZXIgdW5jaGFu Z2VkLiAgT3RoZXJ3aXNlLCBOVUxMLgorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGlu IExJQkdDQ0pJVF9BQklfMTY7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5jZSB1c2lu ZzoKKyAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0NUT1JTCisqLworCitleHRlcm4gZ2NjX2pp dF9sdmFsdWUgKgorZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZ2NjX2pp dF9sdmFsdWUgKmdsb2JhbCwKKwkJCQkgICAgICAgZ2NjX2ppdF9ydmFsdWUgKmluaXRfdmFsdWUp OworCiAjZGVmaW5lIExJQkdDQ0pJVF9IQVZFX2djY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXpl cgogCiAvKiBTZXQgYW4gaW5pdGlhbCB2YWx1ZSBmb3IgYSBnbG9iYWwsIHdoaWNoIG11c3QgYmUg YW4gYXJyYXkgb2YKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0Lm1hcCBiL2djYy9qaXQv bGliZ2Njaml0Lm1hcAppbmRleCA2NGU3OTA5NDllOC4uYzhhYmQ4OTA4YTIgMTAwNjQ0Ci0tLSBh L2djYy9qaXQvbGliZ2Njaml0Lm1hcAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKQEAgLTIw OCwxMSArMjA4LDE1IEBAIExJQkdDQ0pJVF9BQklfMTUgewogCiBMSUJHQ0NKSVRfQUJJXzE2IHsK ICAgZ2xvYmFsOgorICAgIGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3I7Cisg ICAgZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3I7CisgICAgZ2NjX2ppdF9j b250ZXh0X25ld191bmlvbl9jb25zdHJ1Y3RvcjsKICAgICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9y ZXR1cm5fdHlwZTsKICAgICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbV9jb3VudDsKICAgICBn Y2Nfaml0X2Z1bmN0aW9uX3R5cGVfZ2V0X3JldHVybl90eXBlOwogICAgIGdjY19qaXRfZnVuY3Rp b25fdHlwZV9nZXRfcGFyYW1fY291bnQ7CiAgICAgZ2NjX2ppdF9mdW5jdGlvbl90eXBlX2dldF9w YXJhbV90eXBlOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWU7CiAg ICAgZ2NjX2ppdF90eXBlX3VucXVhbGlmaWVkOwogICAgIGdjY19qaXRfdHlwZV9keW5jYXN0X2Fy cmF5OwogICAgIGdjY19qaXRfdHlwZV9pc19ib29sOwpAQCAtMjI2LDMgKzIzMCw0IEBAIExJQkdD Q0pJVF9BQklfMTYgewogICAgIGdjY19qaXRfdHlwZV9pc19zdHJ1Y3Q7CiAgICAgZ2NjX2ppdF9z dHJ1Y3RfZ2V0X2ZpZWxkX2NvdW50OwogfSBMSUJHQ0NKSVRfQUJJXzE1OworCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCBiL2djYy90ZXN0 c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCmluZGV4IGE3ZmRkZjk2ZGI4Li41 NmEzZWIzY2Q4ZSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWls aW5nLXRlc3RzLmgKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRl c3RzLmgKQEAgLTE4MSw2ICsxODEsMTMgQEAKICN1bmRlZiBjcmVhdGVfY29kZQogI3VuZGVmIHZl cmlmeV9jb2RlCiAKKy8qIHRlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmMgKi8KKyNkZWZpbmUgY3Jl YXRlX2NvZGUgY3JlYXRlX2NvZGVfZ2xvYmFsX2luaXRfcnZhbHVlCisjZGVmaW5lIHZlcmlmeV9j b2RlIHZlcmlmeV9jb2RlX2dsb2JhbF9pbml0X3J2YWx1ZQorI2luY2x1ZGUgInRlc3QtZ2xvYmFs LWluaXQtcnZhbHVlLmMiCisjdW5kZWYgY3JlYXRlX2NvZGUKKyN1bmRlZiB2ZXJpZnlfY29kZQor CiAvKiB0ZXN0LWdsb2JhbC1zZXQtaW5pdGlhbGl6ZXIuYyAqLwogI2RlZmluZSBjcmVhdGVfY29k ZSBjcmVhdGVfY29kZV9nbG9iYWxfc2V0X2luaXRpYWxpemVyCiAjZGVmaW5lIHZlcmlmeV9jb2Rl IHZlcmlmeV9jb2RlX2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXIKQEAgLTIwMiw2ICsyMDksMTMgQEAK ICN1bmRlZiBjcmVhdGVfY29kZQogI3VuZGVmIHZlcmlmeV9jb2RlCiAKKy8qIHRlc3QtbG9jYWwt aW5pdC1ydmFsdWUuYyAqLworI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9sb2NhbF9p bml0X3J2YWx1ZQorI2RlZmluZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV9sb2NhbF9pbml0X3J2 YWx1ZQorI2luY2x1ZGUgInRlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYyIKKyN1bmRlZiBjcmVhdGVf Y29kZQorI3VuZGVmIHZlcmlmeV9jb2RlCisKIC8qIHRlc3QtbG9uZy1uYW1lcy5jICovCiAjZGVm aW5lIGNyZWF0ZV9jb2RlIGNyZWF0ZV9jb2RlX2xvbmdfbmFtZXMKICNkZWZpbmUgdmVyaWZ5X2Nv ZGUgdmVyaWZ5X2NvZGVfbG9uZ19uYW1lcwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1lcnJvci1jdG9yLWFycmF5LXdyb25nLXR5cGUuYyBiL2djYy90ZXN0c3VpdGUvaml0 LmRnL3Rlc3QtZXJyb3ItY3Rvci1hcnJheS13cm9uZy10eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFjZTgzYjJlZDZjCi0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLWFycmF5LXdyb25nLXR5cGUuYwpAQCAt MCwwICsxLDU0IEBACisvKgorCisgIFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdn ZXJlZCB3aGVuIHdlIGJ1aWxkIGEgY3RvcgorICBmb3IgYW4gYXJyYXkgdHlwZSwgYnV0IGhhcyB0 aGUgdHlwZSB3cm9uZyBvbiBhbiBlbGVtZW50LgorCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+ CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUg Imhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwg dm9pZCAqdXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0gZ2NjX2ppdF9j b250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9JTlQpOworICBnY2Nfaml0 X3R5cGUgKmZsb2F0X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAg R0NDX0pJVF9UWVBFX0ZMT0FUKTsKKworICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0KKyAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsIDAsIGludF90eXBlLCAxMCk7CisK KyAgZ2NjX2ppdF9ydmFsdWUgKmZydiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f ZG91YmxlIChjdHh0LAorCQkJCQkJCQlmbG9hdF90eXBlLAorCQkJCQkJCQkxMik7CisKKyAgZ2Nj X2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9y CisgICAgKGN0eHQsIDAsCisgICAgIGFycl90eXBlLAorICAgICAxLAorICAgICAmZnJ2KTsKKwor ICBDSEVDS19WQUxVRSAoY3RvciwgTlVMTCk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nf aml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIC8qIEVuc3Vy ZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5nIGEgYm9ndXMK KyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0LCBOVUxMKTsKKwor ICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBlbWl0dGVkLiAq LworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmlyc3RfZXJyb3Ig KGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3Rvcjog YXJyYXkgZWxlbWVudCAiCisJCSAgICAgICJ2YWx1ZSB0eXBlcyBkaWZmZXIgZnJvbSB0eXBlcyBp biAndmFsdWVzJyAoZWxlbWVudCAiCisJCSAgICAgICJ0eXBlOiBpbnQpKCd2YWx1ZXMnIHR5cGU6 IGZsb2F0KSIpOworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmly c3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25z dHJ1Y3RvcjogYXJyYXkgZWxlbWVudCAiCisJCSAgICAgICJ2YWx1ZSB0eXBlcyBkaWZmZXIgZnJv bSB0eXBlcyBpbiAndmFsdWVzJyAoZWxlbWVudCAiCisJCSAgICAgICJ0eXBlOiBpbnQpKCd2YWx1 ZXMnIHR5cGU6IGZsb2F0KSIpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC1lcnJvci1jdG9yLXN0cnVjdC10b28tYmlnLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWVycm9yLWN0b3Itc3RydWN0LXRvby1iaWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uY2JhMzQ5MDY1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXRvby1iaWcuYwpAQCAtMCwwICsxLDg2 IEBACisvKgorCisgIFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3aGVu IHdlIGJ1aWxkIGEgY3RvcgorICBmb3IgYW4gc3RydWN0IHR5cGUsIGJ1dCBoYXZlIHRvbyBtYW55 IGZpZWxkcy4KKworKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQK K2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sK KyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4 dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKworICBnY2Nfaml0X2ZpZWxkICpiMSA9IGdjY19q aXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgMCwKKwkJCQkJCSBpbnRfdHlwZSwK KwkJCQkJCSAiYSIpOworICBnY2Nfaml0X2ZpZWxkICpiMiA9IGdjY19qaXRfY29udGV4dF9uZXdf ZmllbGQgKGN0eHQsCisJCQkJCQkgMCwKKwkJCQkJCSBpbnRfdHlwZSwKKwkJCQkJCSAiYiIpOwor ICBnY2Nfaml0X2ZpZWxkICpiMyA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJ CQkJCQkgMCwKKwkJCQkJCSBpbnRfdHlwZSwKKwkJCQkJCSAiYyIpOworICBnY2Nfaml0X2ZpZWxk ICpmaWVsZHNfYltdID0ge2IxLCBiMiwgYjN9OworCisgIGdjY19qaXRfdHlwZSAqc3RydWN0X2Jh cl90eXBlID0KKyAgICBnY2Nfaml0X3N0cnVjdF9hc190eXBlICgKKyAgICAgIGdjY19qaXRfY29u dGV4dF9uZXdfc3RydWN0X3R5cGUgKGN0eHQsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgICJi YXIiLAorCQkJCSAgICAgICAzLAorCQkJCSAgICAgICBmaWVsZHNfYikpOworCisgIGdjY19qaXRf ZmllbGQgKmIxMSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgIDAs CisJCQkJCQkgIGludF90eXBlLAorCQkJCQkJICAiYSIpOworICBnY2Nfaml0X2ZpZWxkICpiMjIg PSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAwLAorCQkJCQkJICBp bnRfdHlwZSwKKwkJCQkJCSAgImIiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjMzID0gZ2NjX2ppdF9j b250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgMCwKKwkJCQkJCSAgaW50X3R5cGUsCisJ CQkJCQkgICJjIik7CisgIGdjY19qaXRfZmllbGQgKmI0NCA9IGdjY19qaXRfY29udGV4dF9uZXdf ZmllbGQgKGN0eHQsCisJCQkJCQkgIDAsCisJCQkJCQkgIGludF90eXBlLAorCQkJCQkJICAiYyIp OworCisgIGdjY19qaXRfZmllbGQgKmZpZWxkc19jdG9yW10gPSB7YjExLCBiMjIsIGIzMywgYjQ0 fTsKKyAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1tdID0gezAsMCwwLDB9OworCisgIGdjY19qaXRf cnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKyAg ICAoY3R4dCwgMCwKKyAgICAgc3RydWN0X2Jhcl90eXBlLAorICAgICA0LAorICAgICBmaWVsZHNf Y3RvciwKKyAgICAgdmFsdWVzKTsKKworICBDSEVDS19WQUxVRSAoY3RvciwgTlVMTCk7Cit9CisK K3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0 ICpyZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRz IHRoZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19W QUxVRSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJv ciBtZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRf Y29udGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0 X25ld19zdHJ1Y3RfY29uc3RydWN0b3I6IG1vcmUgdmFsdWVzIGluICIKKwkJICAgICAgImNvbnN0 cnVjdG9yIHRoYW4gZmllbGRzIGluIHRhcmdldCBzdHJ1Y3QiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZB TFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2Nj X2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3I6IG1vcmUgdmFsdWVzIGluICIKKwkJ ICAgICAgImNvbnN0cnVjdG9yIHRoYW4gZmllbGRzIGluIHRhcmdldCBzdHJ1Y3QiKTsKK30KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3Jv bmctZmllbGQtbmFtZS5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0 cnVjdC13cm9uZy1maWVsZC1uYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjM0NjZiY2RmY2VhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy1maWVsZC1uYW1lLmMKQEAgLTAsMCArMSw4 NSBAQAorLyoKKworICBUZXN0IHRoYXQgdGhlIHByb3BlciBlcnJvciBpcyB0cmlnZ2VyZWQgd2hl biB3ZSBidWlsZCBhIGN0b3IKKyAgZm9yIGFuIHN0cnVjdCB0eXBlLCBidXQgaGFzIHRoZSBuYW1l IHdyb25nIG9uIGEgZmllbGQuCisKKyovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl IDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisjaW5jbHVkZSAiaGFybmVzcy5o IgorCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2Vy X2RhdGEpCit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0 X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0lOVCk7CisKKyAgZ2NjX2ppdF9maWVsZCAq YjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkg aW50X3R5cGUsCisJCQkJCQkgImEiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjIgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJ CQkgImIiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjMgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxk IChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImMiKTsKKyAgZ2Nj X2ppdF9maWVsZCAqYjQgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJ IDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImQiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjUg PSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50 X3R5cGUsCisJCQkJCQkgImQiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRzX2JbXSA9IHtiMSwg YjIsIGIzLCBiNCwgYjV9OworCisgIGdjY19qaXRfdHlwZSAqc3RydWN0X2Jhcl90eXBlID0KKyAg ICBnY2Nfaml0X3N0cnVjdF9hc190eXBlICgKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfc3Ry dWN0X3R5cGUgKGN0eHQsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgICJiYXIiLAorCQkJCSAg ICAgICA1LAorCQkJCSAgICAgICBmaWVsZHNfYikpOworCisKKyAgZ2NjX2ppdF9maWVsZCAqYjQ0 ID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgMCwKKwkJCQkJCSAg aW50X3R5cGUsCisJCQkJCQkgICJkIik7CisKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRzX2N0b3Jb XSA9IHtiMSwgYjIsIGI0NCwgYjV9OworICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVzW10gPSB7MCww LDAsMH07CisKKyAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0 cnVjdF9jb25zdHJ1Y3RvcgorICAgIChjdHh0LCAwLAorICAgICBzdHJ1Y3RfYmFyX3R5cGUsCisg ICAgIDQsCisgICAgIGZpZWxkc19jdG9yLAorICAgICB2YWx1ZXMpOworCisgIENIRUNLX1ZBTFVF IChjdG9yLCBOVUxMKTsKK30KKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAq Y3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgLyogRW5zdXJlIHRoYXQgdGhlIGJh ZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhlIEFQSSBnaXZpbmcgYSBib2d1cworICAgICByZXN1bHQg YmFjay4gICovCisgIENIRUNLX1ZBTFVFIChyZXN1bHQsIE5VTEwpOworCisgIC8qIFZlcmlmeSB0 aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2FzIGVtaXR0ZWQuICovCisgIENIRUNLX1NU UklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9maXJzdF9lcnJvciAoY3R4dCksCisJCSAg ICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcjogZmllbGQgYXQgaW5k ZXggIgorCQkgICAgICAiMiwgd2FzICIKKwkJICAgICAgIm5vdCB1c2VkIHdoZW4gY3JlYXRpbmcg dGhlIHN0cnVjdCAoZCkiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRf Z2V0X2xhc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1 Y3RfY29uc3RydWN0b3I6IGZpZWxkIGF0IGluZGV4ICIKKwkJICAgICAgIjIsIHdhcyAiCisJCSAg ICAgICJub3QgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBzdHJ1Y3QgKGQpIik7Cit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLXR5 cGUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3Jvbmct dHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZTE0NzZlNDAx NAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rv ci1zdHJ1Y3Qtd3JvbmctdHlwZS5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisKKyAgVGVzdCB0aGF0 IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4gd2UgYnVpbGQgYSBjdG9yCisgIGZv ciBhbiBzdHJ1Y3QgdHlwZSwgYnV0IGhhcyB0aGUgdHlwZSB3cm9uZyBvbiBhIGZpZWxkLgorCisq LworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUg ImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUg KGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5 cGUgKmludF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19K SVRfVFlQRV9JTlQpOworICBnY2Nfaml0X3R5cGUgKmZsb2F0X3R5cGUgPSBnY2Nfaml0X2NvbnRl eHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0ZMT0FUKTsKKworICBnY2Nfaml0 X2ZpZWxkICpiMSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgMCwK KwkJCQkJCSBpbnRfdHlwZSwKKwkJCQkJCSAiYSIpOworICBnY2Nfaml0X2ZpZWxkICpiMiA9IGdj Y19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgMCwKKwkJCQkJCSBpbnRfdHlw ZSwKKwkJCQkJCSAiYiIpOworICBnY2Nfaml0X2ZpZWxkICpiMyA9IGdjY19qaXRfY29udGV4dF9u ZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgMCwKKwkJCQkJCSBpbnRfdHlwZSwKKwkJCQkJCSAiYyIp OworICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNfYltdID0ge2IxLCBiMiwgYjN9OworCisgIGdjY19q aXRfdHlwZSAqc3RydWN0X2Jhcl90eXBlID0KKyAgICBnY2Nfaml0X3N0cnVjdF9hc190eXBlICgK KyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X3R5cGUgKGN0eHQsCisJCQkJICAgICAg IDAsCisJCQkJICAgICAgICJiYXIiLAorCQkJCSAgICAgICAzLAorCQkJCSAgICAgICBmaWVsZHNf YikpOworICBnY2Nfaml0X3J2YWx1ZSAqZnJ2ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVf ZnJvbV9kb3VibGUgKGN0eHQsCisJCQkJCQkJCWZsb2F0X3R5cGUsCisJCQkJCQkJCTEyKTsKKwor ICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNfY3RvcltdID0ge2IyfTsKKyAgZ2NjX2ppdF9ydmFsdWUg KnZhbHVlc1tdID0ge2Zydn07CisKKyAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcgorICAgIChjdHh0LCAwLAorICAgICBzdHJ1Y3Rf YmFyX3R5cGUsCisgICAgIDEsCisgICAgIGZpZWxkc19jdG9yLAorICAgICB2YWx1ZXMpOworCisg IENIRUNLX1ZBTFVFIChjdG9yLCBOVUxMKTsKK30KKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19q aXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgLyogRW5zdXJl IHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhlIEFQSSBnaXZpbmcgYSBib2d1cwor ICAgICByZXN1bHQgYmFjay4gICovCisgIENIRUNLX1ZBTFVFIChyZXN1bHQsIE5VTEwpOworCisg IC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2FzIGVtaXR0ZWQuICov CisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9maXJzdF9lcnJvciAo Y3R4dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3Rvcjog dmFsdWUgYW5kICIKKwkJICAgICAgImZpZWxkIG5vdCAiCisJCSAgICAgICJ0aGUgc2FtZSB1bnF1 YWxpZmllZCB0eXBlLCAiCisJCSAgICAgICJhdCBpbmRleCAwIChmaWVsZCB0eXBlOiBpbnQpKHZh bHVlIHR5cGU6IGZsb2F0KSIpOworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4 dF9nZXRfbGFzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X3N0 cnVjdF9jb25zdHJ1Y3RvcjogdmFsdWUgYW5kICIKKwkJICAgICAgImZpZWxkIG5vdCAiCisJCSAg ICAgICJ0aGUgc2FtZSB1bnF1YWxpZmllZCB0eXBlLCAiCisJCSAgICAgICJhdCBpbmRleCAwIChm aWVsZCB0eXBlOiBpbnQpKHZhbHVlIHR5cGU6IGZsb2F0KSIpOworfQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy10eXBlMi5jIGIv Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy10eXBlMi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lMWYxNTViNDJhZgotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1 Y3Qtd3JvbmctdHlwZTIuYwpAQCAtMCwwICsxLDc3IEBACisvKgorCisgIFRlc3QgdGhhdCB0aGUg cHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3aGVuIHdlIGJ1aWxkIGEgY3RvcgorICBmb3IgYW4g c3RydWN0IHR5cGUsIGJ1dCBoYXMgdGhlIHR5cGUgd3Jvbmcgb24gYSBmaWVsZC4KKworICBMaWtl IHRlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctdHlwZS5jLCBidXQgd2l0aCBpbXBsaWNpdCBm aWVsZHMuCisKKyovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgor CisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitj cmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7Cisg IGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQs CisgICAgR0NDX0pJVF9UWVBFX0lOVCk7CisgIGdjY19qaXRfdHlwZSAqZmxvYXRfdHlwZSA9IGdj Y19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfRkxPQVQpOwor CisgIGdjY19qaXRfZmllbGQgKmIxID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwK KwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJhIik7CisgIGdjY19qaXRfZmll bGQgKmIyID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJ CQkJIGludF90eXBlLAorCQkJCQkJICJiIik7CisgIGdjY19qaXRfZmllbGQgKmIzID0gZ2NjX2pp dF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAor CQkJCQkJICJjIik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkc19iW10gPSB7YjEsIGIyLCBiM307 CisKKyAgZ2NjX2ppdF90eXBlICpzdHJ1Y3RfYmFyX3R5cGUgPQorICAgIGdjY19qaXRfc3RydWN0 X2FzX3R5cGUgKAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfdHlwZSAoY3R4dCwK KwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgImJhciIsCisJCQkJICAgICAgIDMsCisJCQkJICAg ICAgIGZpZWxkc19iKSk7CisgIGdjY19qaXRfcnZhbHVlICpmcnYgPSBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2RvdWJsZSAoY3R4dCwKKwkJCQkJCQkJZmxvYXRfdHlwZSwKKwkJCQkJ CQkJMTIpOworCisgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19z dHJ1Y3RfY29uc3RydWN0b3IKKyAgICAoY3R4dCwgMCwKKyAgICAgc3RydWN0X2Jhcl90eXBlLAor ICAgICAxLAorICAgICAwLAorICAgICAmZnJ2KTsKKworICBDSEVDS19WQUxVRSAoY3RvciwgTlVM TCk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19q aXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdl IHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLwor ICBDSEVDS19WQUxVRSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29y cmVjdCBlcnJvciBtZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUg KGdjY19qaXRfY29udGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2pp dF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3I6IHZhbHVlIGFuZCAiCisJCSAgICAgICJm aWVsZCBub3QgIgorCQkgICAgICAidGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZSwgIgorCQkgICAg ICAiYXQgaW5kZXggMCAoZmllbGQgdHlwZTogaW50KSh2YWx1ZSB0eXBlOiBmbG9hdCkiKTsKKyAg Q0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3IgKGN0eHQp LAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3I6IHZhbHVl IGFuZCAiCisJCSAgICAgICJmaWVsZCBub3QgIgorCQkgICAgICAidGhlIHNhbWUgdW5xdWFsaWZp ZWQgdHlwZSwgIgorCQkgICAgICAiYXQgaW5kZXggMCAoZmllbGQgdHlwZTogaW50KSh2YWx1ZSB0 eXBlOiBmbG9hdCkiKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt ZXJyb3ItY3Rvci11bmlvbi13cm9uZy1maWVsZC1uYW1lLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LWVycm9yLWN0b3ItdW5pb24td3JvbmctZmllbGQtbmFtZS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNTAyMzU5OTQ4MgotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci11bmlvbi13cm9uZy1maWVsZC1u YW1lLmMKQEAgLTAsMCArMSw3NiBAQAorLyoKKworICBUZXN0IHRoYXQgdGhlIHByb3BlciBlcnJv ciBpcyB0cmlnZ2VyZWQgd2hlbiB3ZSBidWlsZCBhIGN0b3IKKyAgZm9yIGFuIHVuaW9uIHR5cGUs IGJ1dCBkb24ndCBwcm92aWRlIGEgY29ycmVjdCBmaWVsZC4KKworKi8KKworI2luY2x1ZGUgPHN0 ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNp bmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQg KmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdj Y19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKyAg Z2NjX2ppdF90eXBlICpmbG9hdF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0 LAorICAgIEdDQ19KSVRfVFlQRV9GTE9BVCk7CisgIGdjY19qaXRfdHlwZSAqZG91YmxlX3R5cGUg PSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0RPVUJM RSk7CisKKyAgZ2NjX2ppdF9maWVsZCAqYjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChj dHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImEiKTsKKyAgZ2NjX2pp dF9maWVsZCAqYjIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAs CisJCQkJCQkgZmxvYXRfdHlwZSwKKwkJCQkJCSAiYiIpOworICBnY2Nfaml0X2ZpZWxkICpiMyA9 IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgMCwKKwkJCQkJCSBkb3Vi bGVfdHlwZSwKKwkJCQkJCSAiYyIpOworICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNfYltdID0ge2Ix LCBiMiwgYjN9OworCisgIGdjY19qaXRfdHlwZSAqdW5pb25fYmFyX3R5cGUgPQorICAgICAgZ2Nj X2ppdF9jb250ZXh0X25ld191bmlvbl90eXBlIChjdHh0LAorCQkJCSAgICAgIDAsCisJCQkJICAg ICAgImJhciIsCisJCQkJICAgICAgMywKKwkJCQkgICAgICBmaWVsZHNfYik7CisKKyAgZ2NjX2pp dF9maWVsZCAqYjMzID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAg MCwKKwkJCQkJCSAgZG91YmxlX3R5cGUsCisJCQkJCQkgICJjIik7CisKKyAgZ2NjX2ppdF9ydmFs dWUgKnZhbCA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9kb3VibGUgKGN0 eHQsIGRvdWJsZV90eXBlLCAxKTsKKworICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRf Y29udGV4dF9uZXdfdW5pb25fY29uc3RydWN0b3IKKyAgICAoY3R4dCwgMCwKKyAgICAgdW5pb25f YmFyX3R5cGUsCisgICAgIGIzMywKKyAgICAgdmFsKTsKKworICBDSEVDS19WQUxVRSAoY3Rvciwg TlVMTCk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdj Y19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVz YWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAq LworICBDSEVDS19WQUxVRSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUg Y29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFM VUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2Nj X2ppdF9jb250ZXh0X25ld191bmlvbl9jb25zdHJ1Y3RvcjogZmllbGQgIgorCQkgICAgICAid2Fz IG5vdCB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIHVuaW9uIChjKSIpOworICBDSEVDS19TVFJJTkdf VkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfbGFzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJn Y2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX2NvbnN0cnVjdG9yOiBmaWVsZCAiCisJCSAgICAgICJ3 YXMgbm90IHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgdW5pb24gKGMpIik7Cit9CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1hbGxyZWFkeS1pbml0LmMg Yi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1hbGxyZWFkeS1pbml0LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdlYWYxODIwMjlkCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtYWxs cmVhZHktaW5pdC5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisKKyAgVGVzdCB0aGF0IHdlIGNhbid0 IHNldCB0aGUgaW5pdGlhbGl6ZXIgb24gYSBnbG9iYWwgdHdpY2UuCisKKyovCisKKyNpbmNsdWRl IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0Lmgi CisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250 ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUg PSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworCisg IGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAg IGN0eHQsIE5VTEwsCisgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgaW50X3R5cGUs CisgICAgImdsb2JhbF9sdmFsdWVpbml0X2ludF8wIik7CisKKyAgZ2NjX2ppdF9nbG9iYWxfc2V0 X2luaXRpYWxpemVyX3J2YWx1ZSAoCisgICAgYmFyLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMSkpOworICBnY2Nfaml0X2dsb2JhbF9z ZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgKKyAgICBiYXIsCisgICAgZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAxKSk7Cit9CisKK3ZvaWQKK3Zlcmlm eV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7 CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2 aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0 LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdh cyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRf Zmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxp emVyX3J2YWx1ZTogZ2xvYmFsIHZhcmlhYmxlICIKKwkJICAgICAgImFsbHJlYWR5IGluaXRpYWxp emVkOiBnbG9iYWxfbHZhbHVlaW5pdF9pbnRfMCIpOworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdj Y19qaXRfY29udGV4dF9nZXRfbGFzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2ds b2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlOiBnbG9iYWwgdmFyaWFibGUgIgorCQkgICAgICAi YWxscmVhZHkgaW5pdGlhbGl6ZWQ6IGdsb2JhbF9sdmFsdWVpbml0X2ludF8wIik7Cit9CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1jb21tb24tc2Vj dGlvbi5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtY29tbW9uLXNl Y3Rpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDJkOWIyMWZm OGIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWds b2JhbC1jb21tb24tc2VjdGlvbi5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisKKyAgVGVzdCB0aGF0 IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4gd2UgaW5pdGlhbGl6ZQorICBhIGds b2JhbCB3aXRoIGEgZ2xvYmFsIHRoYXQgaGFzIG5vIERFQ0xfSU5JVElBTCAoYW5kIGlzIG1hcmtl ZAorICBERUNMX0NPTU1PTihOT0RFKSA9IDEpLgorCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+ CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUg Imhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwg dm9pZCAqdXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0gZ2NjX2ppdF9j b250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9JTlQpOworCisgIC8qIGNv bnN0IGludCBmb287CisgICAgIGludCBiYXIgPSBmb287CisgICAqLworICBnY2Nfaml0X2x2YWx1 ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICBjdHh0LCBOVUxMLAor ICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3Qg KGludF90eXBlKSwKKyAgICAiZ2xvYmFsX2NvbnN0X2ludF8wIik7CisgIGdjY19qaXRfbHZhbHVl ICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgIGN0eHQsIE5VTEwsCisg ICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgaW50X3R5cGUsCisgICAgImdsb2JhbF9s dmFsdWVpbml0X2ludF8wIik7CisgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUgKGJhciwKKwkJCQkJIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZm9vKSk7Cit9CisKK3Zv aWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpy ZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRo ZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxV RSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBt ZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29u dGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiY2FuJ3QgaW5pdGlhbGl6ZSBn bG9iYWxfbHZhbHVlaW5pdF9pbnRfMCAiCisJCSAgICAgICJ3aXRoIGdsb2JhbF9jb25zdF9pbnRf MCBzaW5jZSBpdCBoYXMgbm8gIgorCQkgICAgICAiaW5pdGlhbCB2YWx1ZSBzZXQiKTsKKyAgQ0hF Q0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3IgKGN0eHQpLAor CQkgICAgICAiY2FuJ3QgaW5pdGlhbGl6ZSBnbG9iYWxfbHZhbHVlaW5pdF9pbnRfMCAiCisJCSAg ICAgICJ3aXRoIGdsb2JhbF9jb25zdF9pbnRfMCBzaW5jZSBpdCBoYXMgbm8gIgorCQkgICAgICAi aW5pdGlhbCB2YWx1ZSBzZXQiKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRn L3Rlc3QtZXJyb3ItZ2xvYmFsLWluaXQtdG9vLXNtYWxsLWFycmF5LmMgYi9nY2MvdGVzdHN1aXRl L2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1pbml0LXRvby1zbWFsbC1hcnJheS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNGNhMTM2ZjU1NAotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWluaXQtdG9vLXNt YWxsLWFycmF5LmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKworICBUZXN0IHRoYXQgdGhlIHByb3Bl ciBlcnJvciBpcyB0cmlnZ2VyZWQgd2hlbiB3ZSBpbml0aWFsaXplCisgIGEgZ2xvYmFsIHdpdGgg YW5vdGhlciBub24tY29uc3QgZ2xvYmFsJ3MgcnZhbHVlLgorCisgIFVzaW5nIGdjY19qaXRfZ2xv YmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUoKQorCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+ CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUg Imhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwg dm9pZCAqdXNlcl9kYXRhKQoreyAvKiBmbG9hdCBmb29bMV0gPSB7MSwyfTsgKi8KKworICBnY2Nf aml0X3R5cGUgKmZsb2F0X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisg ICAgR0NDX0pJVF9UWVBFX0ZMT0FUKTsKKyAgZ2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdjY19q aXRfY29udGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwKKwkJCQkJCQkgICAwLAorCQkJCQkJCSAg IGZsb2F0X3R5cGUsCisJCQkJCQkJICAgMSk7CisgIGdjY19qaXRfcnZhbHVlICpydmFsXzEgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgY3R4dCwgZmxvYXRfdHlw ZSwgMSk7CisgIGdjY19qaXRfcnZhbHVlICpydmFsXzIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2ludCAoCisgICAgY3R4dCwgZmxvYXRfdHlwZSwgMik7CisKKyAgZ2NjX2ppdF9y dmFsdWUgKnZhbHVlc1tdID0ge3J2YWxfMSwgcnZhbF8yfTsKKworICBnY2Nfaml0X3J2YWx1ZSAq Y3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3IgKGN0eHQsCisJCQkJ CQkJCTAsCisJCQkJCQkJCWFycl90eXBlLAorCQkJCQkJCQkyLAorCQkJCQkJCQl2YWx1ZXMpOwor ICBpZiAoIWN0b3IpCisgICAgcmV0dXJuOworCisgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgIGN0eHQsIE5VTEwsCisgICAgR0NDX0pJVF9H TE9CQUxfRVhQT1JURUQsCisgICAgYXJyX3R5cGUsCisgICAgImdsb2JhbF9mbG9hdGFycl8xMiIp OworICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOwor fQorCit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jl c3VsdCAqcmVzdWx0KQoreworICAvKiBFbnN1cmUgdGhhdCB0aGUgYmFkIEFQSSB1c2FnZSBwcmV2 ZW50cyB0aGUgQVBJIGdpdmluZyBhIGJvZ3VzCisgICAgIHJlc3VsdCBiYWNrLiAgKi8KKyAgQ0hF Q0tfVkFMVUUgKHJlc3VsdCwgTlVMTCk7CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlIGNvcnJlY3Qg ZXJyb3IgbWVzc2FnZSB3YXMgZW1pdHRlZC4gKi8KKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nf aml0X2NvbnRleHRfZ2V0X2ZpcnN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImdjY19qaXRfY29u dGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3I6ICIKKwkJICAgICAgImFycmF5IGNvbnN0cnVjdG9y IGhhcyIKKwkJICAgICAgIiBtb3JlIHZhbHVlcyB0aGFuIHRoZSBhcnJheSB0eXBlJ3MgbGVuZ3Ro Iik7CisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9sYXN0X2Vycm9y IChjdHh0KSwKKwkJICAgICAgImdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3I6 ICIKKwkJICAgICAgImFycmF5IGNvbnN0cnVjdG9yIGhhcyIKKwkJICAgICAgIiBtb3JlIHZhbHVl cyB0aGFuIHRoZSBhcnJheSB0eXBlJ3MgbGVuZ3RoIik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1sdmFsdWUtaW5pdC5jIGIvZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtbHZhbHVlLWluaXQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDkzYjgwN2U4ZDAKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1sdmFsdWUtaW5pdC5jCkBA IC0wLDAgKzEsNjAgQEAKKy8qCisKKyAgVGVzdCB0aGF0IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJp Z2dlcmVkIHdoZW4gd2UgaW5pdGlhbGl6ZQorICBhIGdsb2JhbCB3aXRoIGFub3RoZXIgbm9uLWNv bnN0IGdsb2JhbCdzIHJ2YWx1ZS4KKworICBVc2luZyBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlh bGl6ZXJfcnZhbHVlKCkKKworKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0 ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisK K3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0 YSkKK3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlw ZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKworICBnY2Nfaml0X2x2YWx1ZSAqZm9v OworICB7IC8qIGludCBiYXI7ICovCisgICAgZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xv YmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK KyAgICAgIGludF90eXBlLAorICAgICAgImdsb2JhbF9sdmFsdWVpbml0X2ludDEiKTsKKyAgICBn Y2Nfaml0X3J2YWx1ZSAqcnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50 ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5p dGlhbGl6ZXJfcnZhbHVlIChmb28sCisgICAgICBydmFsKTsKKyAgfQorICB7IC8qIGludCBmb28g PSBiYXI7ICovCisKKyAgICBnY2Nfaml0X2x2YWx1ZSAqYmFyID0gIGdjY19qaXRfY29udGV4dF9u ZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBP UlRFRCwKKyAgICAgIGludF90eXBlLAorICAgICAgImdsb2JhbF9sdmFsdWVpbml0X2ludDIiKTsK KyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChiYXIsCisJCQkJCSAg IGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZm9vKSk7CisgIH0KK30KKwordm9pZAordmVyaWZ5 X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sK KyAgLyogRW5zdXJlIHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhlIEFQSSBnaXZp bmcgYSBib2d1cworICAgICByZXN1bHQgYmFjay4gICovCisgIENIRUNLX1ZBTFVFIChyZXN1bHQs IE5VTEwpOworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2Fz IGVtaXR0ZWQuICovCisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9m aXJzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJpbml0IHJ2YWx1ZSBmb3IgdGhlIGdsb2JhbCB2 YXJpYWJsZSAiCisJCSAgICAgICJnbG9iYWxfbHZhbHVlaW5pdF9pbnQyIGRvZXMgbm90IHNlZW0g dG8gYmUgY29uc3RhbnQiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRf Z2V0X2xhc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiaW5pdCBydmFsdWUgZm9yIHRoZSBnbG9i YWwgdmFyaWFibGUgIgorCQkgICAgICAiZ2xvYmFsX2x2YWx1ZWluaXRfaW50MiBkb2VzIG5vdCBz ZWVtIHRvIGJlIGNvbnN0YW50Iik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LWVycm9yLWdsb2JhbC1ub25jb25zdC1pbml0LmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LWVycm9yLWdsb2JhbC1ub25jb25zdC1pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmEzYmE0YjU5NDU2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtbm9uY29uc3QtaW5pdC5jCkBAIC0wLDAg KzEsODAgQEAKKy8qCisKKyAgVGVzdCB0aGF0IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVk IHdoZW4gd2UgaW5pdGlhbGl6ZQorICBhIGdsb2JhbCB3aXRoIGEgZnVuY3Rpb24gY2FsbC4KKwor ICBVc2luZyBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlKCkKKworKi8KKwor I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJn Y2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nf aml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2ppdF90eXBlICpp bnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZ UEVfSU5UKTsKKworICBnY2Nfaml0X2Z1bmN0aW9uICpmbl9pbnRfMzsKKyAgeyAvKiBpbnQgZm9v ICgpIHsgaW50IGxvY2FsID0gMzsgcmV0dXJuIGxvY2FsO30gKi8KKyAgICBmbl9pbnRfMyA9Cisg ICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJ CSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBpbnRfdHlwZSwKKwkJCQkg ICAgImZuX2ludF8zIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisgICAg Z2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm5faW50 XzMsICJzdGFydCIpOworICAgIGdjY19qaXRfbHZhbHVlICpsb2NhbCA9IGdjY19qaXRfZnVuY3Rp b25fbmV3X2xvY2FsIChmbl9pbnRfMywKKwkJCQkJCQkwLAorCQkJCQkJCWludF90eXBlLAorCQkJ CQkJCSJsb2NhbCIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0 X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworCisgICAg Z2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoYmxvY2ssIDAsIGxvY2FsLCBydmFsKTsKKwor ICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJ CSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShsb2NhbCkpOworCisgIH0KKworICB7IC8qIGlu dCBiYXIgPSBmb28oKTsgKi8KKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbCA9CisgICAgICBnY2Nf aml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsCisJCQkJMCwKKwkJCQlmbl9pbnRfMywKKwkJCQkw LDApOworCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2ds b2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQs CisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfbm9uY29uc3RfaW50Iik7CisgICAgZ2Nj X2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbCk7Cisg IH0KK30KKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2pp dF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgLyogRW5zdXJlIHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2Ug cHJldmVudHMgdGhlIEFQSSBnaXZpbmcgYSBib2d1cworICAgICByZXN1bHQgYmFjay4gICovCisg IENIRUNLX1ZBTFVFIChyZXN1bHQsIE5VTEwpOworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjb3Jy ZWN0IGVycm9yIG1lc3NhZ2Ugd2FzIGVtaXR0ZWQuICovCisgIENIRUNLX1NUUklOR19WQUxVRSAo Z2NjX2ppdF9jb250ZXh0X2dldF9maXJzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJpbml0IHJ2 YWx1ZSBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZSAiCisJCSAgICAgICJnbG9iYWxfbm9uY29uc3Rf aW50IGRvZXMgbm90IHNlZW0gdG8gYmUgY29uc3RhbnQiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVF IChnY2Nfaml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiaW5pdCBy dmFsdWUgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGUgIgorCQkgICAgICAiZ2xvYmFsX25vbmNvbnN0 X2ludCBkb2VzIG5vdCBzZWVtIHRvIGJlIGNvbnN0YW50Iik7Cit9CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWdsb2JhbC1pbml0LXJ2YWx1ZS5jIGIvZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvdGVzdC1nbG9iYWwtaW5pdC1ydmFsdWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNmUxOTRlYTMyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2ppdC5kZy90ZXN0LWdsb2JhbC1pbml0LXJ2YWx1ZS5jCkBAIC0wLDAgKzEsMTUyNiBA QAorLyogVGhpcyB0ZXN0Y2FzZSBjaGVja3MgdGhhdCBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlh bGl6ZXJfcnZhbHVlKCkgd29ya3MKKyAgIHdpdGggcnZhbHVlcywgZXNwZWNpYWxseSB3aXRoIGdj Y19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IoKSBmb3IKKyAgIHN0cnVjdCwgdW5pb25zIGFu ZCBhcnJheXMuICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor CisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitj cmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7Cisg IGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQs CisgICAgR0NDX0pJVF9UWVBFX0lOVCk7CisgIGdjY19qaXRfdHlwZSAqc2hvcnRfdHlwZSA9IGdj Y19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfU0hPUlQpOwor ICBnY2Nfaml0X3R5cGUgKnBpbnRfdHlwZSA9IGdjY19qaXRfdHlwZV9nZXRfcG9pbnRlciAoaW50 X3R5cGUpOworICBnY2Nfaml0X3R5cGUgKmRvdWJsZV90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dl dF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9ET1VCTEUpOworICBnY2Nfaml0X3R5cGUg KmZsb2F0X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJ VF9UWVBFX0ZMT0FUKTsKKyAgZ2NjX2ppdF90eXBlICpib29sX3R5cGUgPSBnY2Nfaml0X2NvbnRl eHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0JPT0wpOworICBnY2Nfaml0X3R5 cGUgKmNoYXJfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0Nf SklUX1RZUEVfQ0hBUik7CisgIGdjY19qaXRfdHlwZSAqY3BjaGFyX3R5cGUgPSBnY2Nfaml0X2Nv bnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0NPTlNUX0NIQVJfUFRSKTsK KyAgZ2NjX2ppdF90eXBlICpzaXplX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0 eHQsCisgICAgR0NDX0pJVF9UWVBFX1NJWkVfVCk7CisKKyAgLyogTWFrZSBhIHN0cnVjdDogc3Ry dWN0IGZpIHsgZmxvYXQgZjsgaW50IGk7fSAqLworICBnY2Nfaml0X2ZpZWxkICpmaV9mID0gZ2Nj X2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgIDAsCisJCQkJCQkgICBmbG9h dF90eXBlLAorCQkJCQkJICAgImYiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZmlfaSA9IGdjY19qaXRf Y29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAwLAorCQkJCQkJICAgaW50X3R5cGUs CisJCQkJCQkgICAiaSIpOworICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9mLCBmaV9p fTsKKworICBnY2Nfaml0X3R5cGUgKnN0cnVjdF9maV90eXBlID0KKyAgICBnY2Nfaml0X3N0cnVj dF9hc190eXBlICgKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X3R5cGUgKGN0eHQs CisJCQkJICAgICAgIDAsCisJCQkJICAgICAgICJmaSIsCisJCQkJICAgICAgIDIsCisJCQkJICAg ICAgIGZpZWxkcykpOworCisgIC8qIE1ha2UgYSBzdHJ1Y3Q6CisKKyAgICAgc3RydWN0IGJhciB7 CisgICAgICAgaW50IGlpOworICAgICAgIHN0cnVjdCBmaSBmaTsKKyAgICAgICBmbG9hdCBmZjsK KyAgICAgfQorICAqLworICBnY2Nfaml0X2ZpZWxkICpiYXJfZmYgPSBnY2Nfaml0X2NvbnRleHRf bmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAwLAorCQkJCQkJICAgICBmbG9hdF90eXBlLAor CQkJCQkJICAgICAiZmYiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYmFyX2lpID0gZ2NjX2ppdF9jb250 ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgICAgMCwKKwkJCQkJCSAgICAgaW50X3R5cGUs CisJCQkJCQkgICAgICJpaSIpOworICBnY2Nfaml0X2ZpZWxkICpiYXJfZmkgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAwLAorCQkJCQkJICAgICBzdHJ1Y3Rf ZmlfdHlwZSwKKwkJCQkJCSAgICAgImZpIik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkczJbXSA9 IHtiYXJfZmYsIGJhcl9maSwgYmFyX2lpfTsKKworICBnY2Nfaml0X3R5cGUgKnN0cnVjdF9iYXJf dHlwZSA9CisgICAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlwZSAoCisgICAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X3N0cnVjdF90eXBlIChjdHh0LAorCQkJCSAgICAgICAwLAorCQkJCSAgICAgICAiYmFy IiwKKwkJCQkgICAgICAgMywKKwkJCQkgICAgICAgZmllbGRzMikpOworCisgIC8qIE1ha2UgYW4g dW5pb246CisKKyAgICAgdW5pb24gdWJhciB7CisgICAgICAgZmxvYXQgZmY7CisgICAgICAgaW50 IGlpOworICAgICB9OworICAqLworICBnY2Nfaml0X2ZpZWxkICp1YmFyX2ZmID0gZ2NjX2ppdF9j b250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgICAgIDAsCisJCQkJCQkgICAgICBmbG9h dF90eXBlLAorCQkJCQkJICAgICAgImZmIik7CisgIGdjY19qaXRfZmllbGQgKnViYXJfaWkgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAgMCwKKwkJCQkJCSAg ICAgIGludF90eXBlLAorCQkJCQkJICAgICAgImlpIik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxk czNbXSA9IHt1YmFyX2ZmLCB1YmFyX2lpfTsKKworICBnY2Nfaml0X3R5cGUgKnViYXIgPSBnY2Nf aml0X2NvbnRleHRfbmV3X3VuaW9uX3R5cGUgKGN0eHQsCisJCQkJCQkgICAgICAgMCwKKwkJCQkJ CSAgICAgICAidWJhciIsCisJCQkJCQkgICAgICAgMiwKKwkJCQkJCSAgICAgICBmaWVsZHMzKTsK KworICB7IC8qIHN0cnVjdCBiYXIgYmFyID0gey5mZj0xLCAuZmk9ey5mPTIsIC5pPTN9LCAuaWk9 NH07CisgICAgICAgSS5lLiBuZXN0ZWQgY3RvcnMgYW5kIHdpdGggZmllbGRzIHNwZWNpZmllZAor ICAgICAqLworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ds b2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQs CisgICAgICBzdHJ1Y3RfYmFyX3R5cGUsCisgICAgICAiZ2xvYmFsX3N0cnVjdF9iYXJfMTIzNF8x Iik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19qaXRf cnZhbHVlICppdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAg ICAgY3R4dCwgaW50X3R5cGUsIDMpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHsg ZnZhbCwgaXZhbH07CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzW10gPSB7ZmlfZiwgZmlfaX07 CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0 X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAg ICAgICAyLAorICAgICAgIGZpZWxkcywKKyAgICAgICB2YWxzKTsKKworICAgIGl2YWwgPSBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwg NCk7CisgICAgZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAg ICAgIGN0eHQsIGZsb2F0X3R5cGUsIDEpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHMyW10g PSB7ZnZhbCwgY3RvciwgaXZhbH07CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzMltdID0ge2Jh cl9mZiwgYmFyX2ZpLCBiYXJfaWl9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3JfYmFyID0g Z2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKyAgICAgIChjdHh0LCAwLAor ICAgICAgIHN0cnVjdF9iYXJfdHlwZSwKKyAgICAgICAzLAorICAgICAgIGZpZWxkczIsCisgICAg ICAgdmFsczIpOworCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAo YmFyLCBjdG9yX2Jhcik7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgYmFyIGJhciA9IHsxLCB7MiwgM30s IDR9OworICAgICAgIEkuZS4gbmVzdGVkIGN0b3JzIGFuZCBmaWVsZHMgaW1wbGljaXQgaW4gZGVm aW5pdGlvbiBvcmRlciAoZmllbGRzPU5VTEwpCisgICAgICovCisgICAgZ2NjX2ppdF9sdmFsdWUg KmJhciA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisg ICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHN0cnVjdF9iYXJfdHlwZSwKKyAg ICAgICJnbG9iYWxfc3RydWN0X2Jhcl8xMjM0XzIiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpm dmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwg ZmxvYXRfdHlwZSwgMik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKml2YWwgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyBmdmFsLCBpdmFsfTsKKworICAgIGdjY19qaXRf cnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKyAg ICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgIDIsCisgICAgICAg MCwKKyAgICAgICB2YWxzKTsKKworICAgIGl2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgNCk7CisgICAgZnZhbCA9IGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUs IDEpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHMyW10gPSB7ZnZhbCwgY3RvciwgaXZhbH07 CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3Rvcl9iYXIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0 cnVjdF9jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2Jhcl90eXBl LAorICAgICAgIDMsCisgICAgICAgMCwKKyAgICAgICB2YWxzMik7CisKKyAgICBnY2Nfaml0X2ds b2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChiYXIsIGN0b3JfYmFyKTsKKyAgfQorICB7IC8q IHN0cnVjdCBmaSBmb28gPSB7LmY9MiwgLmk9M307ICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZv byA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAg ICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAg Imdsb2JhbF9zdHJ1Y3RfZmlfMjNfMSIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmZ2YWwgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9hdF90 eXBlLCAyKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqaXZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKworICAgIGdjY19q aXRfcnZhbHVlICp2YWxzW10gPSB7IGZ2YWwsIGl2YWx9OworICAgIGdjY19qaXRfZmllbGQgKmZp ZWxkc1tdID0ge2ZpX2YsIGZpX2l9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nf aml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAg ICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAgMiwKKyAgICAgICBmaWVsZHMsCisgICAgICAgdmFs cyk7CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0 b3IpOworICB9CisgIHsgLyogc3RydWN0IGZpIGZvbyA9IHsyLCAzfTsgKi8KKyAgICBnY2Nfaml0 X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwg TlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgc3RydWN0X2ZpX3R5 cGUsCisgICAgICAiZ2xvYmFsX3N0cnVjdF9maV8yM18yIik7CisKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0 eHQsIGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVlICppdmFsID0gZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOwor CisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHsgZnZhbCwgaXZhbH07CisKKyAgICBnY2Nf aml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9y CisgICAgICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAyLAorICAg ICAgIDAsCisgICAgICAgdmFscyk7CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6 ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogc3RydWN0IGZpIGZvbyA9IHsuaT0w LCAuZj0wfTsgKG51bGwgaW5pdCkgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gZ2NjX2pp dF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRf R0xPQkFMX0VYUE9SVEVELAorICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAiZ2xvYmFsX3N0 cnVjdF9maV8wMF8xIik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyAwLCAwfTsK KyAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9mLCBmaV9pfTsKKworICAgIGdjY19q aXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IK KyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgIDIsCisgICAg ICAgZmllbGRzLAorICAgICAgIHZhbHMpOworCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRp YWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIHN0cnVjdCBmaSBmb28gPSB7 MCwgMH07IChudWxsIGZpZWxkcywgbnVsbCBlbGVtZW50cyBpbiB2YWx1ZXMpICovCisgICAgZ2Nj X2ppdF9sdmFsdWUgKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0 eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHN0cnVjdF9m aV90eXBlLAorICAgICAgImdsb2JhbF9zdHJ1Y3RfZmlfMDBfMiIpOworCisgICAgZ2NjX2ppdF9y dmFsdWUgKnZhbHNbXSA9IHsgMCwgMH07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdj Y19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAg ICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAyLAorICAgICAgIDAsCisgICAgICAgdmFscyk7 CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3Ip OworICB9CisgIHsgLyogc3RydWN0IGZpIGZvbyA9IHsuaSA9IDB9IChudWxsIGluaXQpOworCisg ICAgICAgTnVsbCBpbml0IHZhbHVlcy4gKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19K SVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAiZ2xvYmFs X3N0cnVjdF9maV8wXzEiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10gPSB7MH07Cisg ICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzW10gPSB7ZmlfaX07CisKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yCisgICAgICAo Y3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAxLAorICAgICAgIGZpZWxk cywKKyAgICAgICB2YWxzKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZh bHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogc3RydWN0IGZpIGZvbyA9IHswfTsKKworICAg ICAgIE51bGwgaW5pdCB2YWx1ZXMuICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9IGdjY19q aXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklU X0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgImdsb2JhbF9z dHJ1Y3RfZmlfMF8yIik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0gezB9OworCisg ICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25z dHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAg MSwKKyAgICAgICAwLAorICAgICAgIHZhbHMpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0 aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9vID0g e307IChudWxsIGluaXQpCisKKyAgICAgICBOdWxsIGZpZWxkcyBhbmQgdmFsdWVzLiAqLworICAg IGdjY19qaXRfbHZhbHVlICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAg ICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBzdHJ1 Y3RfZmlfdHlwZSwKKyAgICAgICJnbG9iYWxfc3RydWN0X2ZpXzYiKTsKKworICAgIGdjY19qaXRf cnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKyAg ICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgIDAsCisgICAgICAg MCwKKyAgICAgICAwKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVl IChmb28sIGN0b3IpOworICB9CisgIHsgLyogc3RydWN0IGZpIGZvbyA9IHsyICogMiwgM307ICov CisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgK KyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAg IHN0cnVjdF9maV90eXBlLAorICAgICAgImdsb2JhbF9zdHJ1Y3RfZmlfMyIpOworCisgICAgZ2Nj X2ppdF9ydmFsdWUgKmZ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAo CisgICAgICBjdHh0LCBmbG9hdF90eXBlLCAyKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqZnZhbDIg PSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9h dF90eXBlLCAyKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqaXZhbCA9IGdjY19qaXRfY29udGV4dF9u ZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nf aml0X3J2YWx1ZSAqcnZhbF9tdWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAoY3R4 dCwgMCwKKyAgICAgIEdDQ19KSVRfQklOQVJZX09QX01VTFQsCisgICAgICBmbG9hdF90eXBlLAor ICAgICAgZnZhbCwKKyAgICAgIGZ2YWwyKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10g PSB7IHJ2YWxfbXVsLCBpdmFsfTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9m LCBmaV9pfTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25l d19zdHJ1Y3RfY29uc3RydWN0b3IKKyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90 eXBlLAorICAgICAgIDIsCisgICAgICAgZmllbGRzLAorICAgICAgIHZhbHMpOworCisgICAgZ2Nj X2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7 IC8qIHVuaW9uIHViYXIgZm9vID0gey5mZiA9IDN9OyAqLworICAgICBnY2Nfaml0X2x2YWx1ZSAq Zm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAg ICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgdWJhciwKKyAgICAgICJnbG9iYWxf dW5pb25fdWZvb19mZjMiKTsKKworICAgICBnY2Nfaml0X3J2YWx1ZSAqZnZhbCA9IGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgICBjdHh0LCBmbG9hdF90eXBlLCAz KTsKKworICAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfdW5p b25fY29uc3RydWN0b3IgKAorICAgICAgIGN0eHQsCisgICAgICAgMCwKKyAgICAgICB1YmFyLAor ICAgICAgIHViYXJfZmYsCisgICAgICAgZnZhbCk7CisKKyAgICAgZ2NjX2ppdF9nbG9iYWxfc2V0 X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIHVuaW9uIHViYXIg Zm9vID0gey5paSA9IDJ9OyAqLworICAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9j b250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xP QkFMX0VYUE9SVEVELAorICAgICAgdWJhciwKKyAgICAgICJnbG9iYWxfdW5pb25fdWZvb19paTIi KTsKKworICAgICBnY2Nfaml0X3J2YWx1ZSAqaXZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21faW50ICgKKyAgICAgICBjdHh0LCBpbnRfdHlwZSwgMik7CisKKyAgICAgZ2NjX2pp dF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX2NvbnN0cnVjdG9yICgK KyAgICAgICBjdHh0LAorICAgICAgIDAsCisgICAgICAgdWJhciwKKyAgICAgICB1YmFyX2lpLAor ICAgICAgIGl2YWwpOworCisgICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiB1bmlvbiB1YmFyIGZvbyA9IHsxLjFmfTsgc2hv dWxkIGluaXQgZmlyc3QgZmllbGQgICovCisgICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSBnY2Nf aml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJ VF9HTE9CQUxfRVhQT1JURUQsCisgICAgICB1YmFyLAorICAgICAgImdsb2JhbF91bmlvbl91Zm9v X2ZmMWMxIik7CisKKyAgICAgZ2NjX2ppdF9ydmFsdWUgKmZ2YWwgPSBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2RvdWJsZSAoCisgICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMS4xKTsK KworICAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25f Y29uc3RydWN0b3IgKAorICAgICAgIGN0eHQsCisgICAgICAgMCwKKyAgICAgICB1YmFyLAorICAg ICAgIDAsCisgICAgICAgZnZhbCk7CisKKyAgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxp emVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIHVuaW9uIHViYXIgZm9vID0gKHVu aW9uIHViYXIpe307ICovCisgICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxf RVhQT1JURUQsCisgICAgICB1YmFyLAorICAgICAgImdsb2JhbF91bmlvbl91Zm9vXzAiKTsKKwor ICAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25fY29u c3RydWN0b3IgKAorICAgICAgIGN0eHQsCisgICAgICAgMCwKKyAgICAgICB1YmFyLAorICAgICAg IDAsCisgICAgICAgMCk7CisKKyAgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2 YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIGludCBmb28gPSAzOyAqLworICAgIGdjY19q aXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAor ICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19K SVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisgICAgICAiZ2xvYmFsX2ludDFf MyIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAg ICAgIHJ2YWwpOworICB9CisgIHsgLyogY29uc3Qgdm9sYXRpbGUgaW50IGZvbyA9IDM7ICovCisg ICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmZv byA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAg ICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBnY2Nfaml0X3R5cGVfZ2V0X2NvbnN0 IChnY2Nfaml0X3R5cGVfZ2V0X3ZvbGF0aWxlIChpbnRfdHlwZSkpLAorICAgICAgImdsb2JhbF9j dmludDFfMyIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZv bywKKyAgICAgIHJ2YWwpOworICB9CisgIHsgLyogVHJ5IHRoZSBhYm92ZSwgYnV0IHdpdGggb3Bw b3NpdGUgb3JkZXIgb2YgZ2xvYmFsIGFuZCBsaXRlcmFsIGNhbGxzICovCisgICAgZ2NjX2ppdF9s dmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBO VUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAg ICAgICJnbG9iYWxfaW50Ml8zIik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7 CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorICAgICAg cnZhbCk7CisgIH0KKyAgeyAvKiBpbnQgZm9vID0gMyAqICgzICsgMykgKi8KKyAgICBnY2Nfaml0 X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQs IE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGludF90eXBlLAor ICAgICAgImdsb2JhbF9pbnQzXzE4Iik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzXzAgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlw ZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzXzEgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2pp dF9ydmFsdWUgKnJ2YWwzXzIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAo CisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfcGx1 cyA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJ VF9CSU5BUllfT1BfUExVUywKKyAgICAgIGludF90eXBlLAorICAgICAgcnZhbDNfMCwKKyAgICAg IHJ2YWwzXzEpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX211bCA9IGdjY19qaXRfY29udGV4 dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfTVVMVCwK KyAgICAgIGludF90eXBlLAorICAgICAgcnZhbF9wbHVzLAorICAgICAgcnZhbDNfMik7CisKKyAg ICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sCisgICAgICBydmFs X211bCk7CisgIH0KKyAgeyAvKiBpbnQgZm9vID0gfigtKCgoKCgyIHwgOCkgJiAxNSkgXiAwKSA8 PCAzID4+IDIgLSAxKSAvIDIpKTsgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19q aXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklU X0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGludF90eXBlLAorICAgICAgImdsb2JhbF9pbnRfYWxv dG9mb3BlcmF0b3JzIik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMCA9IGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAyKTsKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDgpOworICAgIGdjY19qaXRfcnZhbHVlICpy dmFsXzIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgMTUpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzMgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMCk7Cisg ICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfNCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAq cnZhbF81ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4 dCwgaW50X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzYgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMSk7Cisg ICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfNyA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAyKTsKKworICAgIGdjY19qaXRfcnZhbHVl ICpydmFsX29yID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKGN0eHQsIDAsCisgICAg ICBHQ0NfSklUX0JJTkFSWV9PUF9CSVRXSVNFX09SLAorICAgICAgaW50X3R5cGUsCisgICAgICBy dmFsXzAsCisgICAgICBydmFsXzEpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2FuZCA9IGdj Y19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5B UllfT1BfQklUV0lTRV9BTkQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgIHJ2YWxfb3IsCisgICAg ICBydmFsXzIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX3hvciA9IGdjY19qaXRfY29udGV4 dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfQklUV0lT RV9YT1IsCisgICAgICBpbnRfdHlwZSwKKyAgICAgIHJ2YWxfYW5kLAorICAgICAgcnZhbF8zKTsK KyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9sc2ggPSBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFy eV9vcCAoY3R4dCwgMCwKKyAgICAgIEdDQ19KSVRfQklOQVJZX09QX0xTSElGVCwKKyAgICAgIGlu dF90eXBlLAorICAgICAgcnZhbF94b3IsCisgICAgICBydmFsXzQpOworICAgIGdjY19qaXRfcnZh bHVlICpydmFsX3JzaCA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAor ICAgICAgR0NDX0pJVF9CSU5BUllfT1BfUlNISUZULAorICAgICAgaW50X3R5cGUsCisgICAgICBy dmFsX2xzaCwKKyAgICAgIHJ2YWxfNSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfbWluID0g Z2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJ TkFSWV9PUF9NSU5VUywKKyAgICAgIGludF90eXBlLAorICAgICAgcnZhbF9yc2gsCisgICAgICBy dmFsXzYpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2RpdiA9IGdjY19qaXRfY29udGV4dF9u ZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfRElWSURFLAor ICAgICAgaW50X3R5cGUsCisgICAgICBydmFsX21pbiwKKyAgICAgIHJ2YWxfNyk7CisgICAgZ2Nj X2ppdF9ydmFsdWUgKnJ2YWxfdW1pbiA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X3VuYXJ5X29wIChj dHh0LCAwLAorICAgICAgR0NDX0pJVF9VTkFSWV9PUF9NSU5VUywKKyAgICAgIGludF90eXBlLAor ICAgICAgcnZhbF9kaXYpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX25lZyA9ICBnY2Nfaml0 X2NvbnRleHRfbmV3X3VuYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9VTkFSWV9PUF9C SVRXSVNFX05FR0FURSwKKyAgICAgIGludF90eXBlLAorICAgICAgcnZhbF91bWluKTsKKworICAg IGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWxf bmVnKTsKKyAgfQorICB7IC8qIGludCBmb28gPSAzOyBpbnQgKnBmb28gPSAmZm9vOyAqLworICAg IGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAg ICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50 X3R5cGUsCisgICAgICAiZ2xvYmFsX2ludDRfMyIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFs ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50 X3R5cGUsIDMpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZv bywKKyAgICAgIHJ2YWwpOworCisgICAgZ2NjX2ppdF9sdmFsdWUgKnBmb28gPSAgZ2NjX2ppdF9j b250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xP QkFMX0VYUE9SVEVELAorICAgICAgcGludF90eXBlLAorICAgICAgImdsb2JhbF9waW50NSIpOwor ICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKHBmb28sCisgICAgICBn Y2Nfaml0X2x2YWx1ZV9nZXRfYWRkcmVzcyAoZm9vLCAwKSk7CisgIH0KKyAgeyAvKiBpbnQgZm9v ID0gMzsgaW50ICpwZm9vID0gJmZvbyArIDE7ICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9 ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAg R0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxf aW50Nl8zIik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2pp dF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbCk7CisKKyAg ICBnY2Nfaml0X2x2YWx1ZSAqcGZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisg ICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBw aW50X3R5cGUsCisgICAgICAiZ2xvYmFsX3BpbnQ3Iik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0 X2luaXRpYWxpemVyX3J2YWx1ZSAocGZvbywKKyAgICAgIGdjY19qaXRfbHZhbHVlX2dldF9hZGRy ZXNzICgKKwlnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2FjY2VzcygKKwkgIGN0eHQsCisJICAw LAorCSAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3MoZm9vLCAwKSwKKwkgIGdjY19qaXRfY29u dGV4dF9vbmUoY3R4dCwgaW50X3R5cGUpKSwKKwkwKSk7CisgIH0KKyAgeyAvKiBkb3VibGUgZm9v ID0gMzsgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZG91YmxlMSA9ICBnY2Nfaml0X2NvbnRleHRf bmV3X2dsb2JhbCAoCisJY3R4dCwgTlVMTCwKKwlHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKwlk b3VibGVfdHlwZSwKKwkiZ2xvYmFsX2RvdWJsZTFfMyIpOworICAgIGdjY19qaXRfcnZhbHVlICpy dmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwg ZG91YmxlX3R5cGUsIDMpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUgKGRvdWJsZTEsCisgICAgICBydmFsKTsKKyAgfQorICB7IC8qIGRvdWJsZSBmb28gPSAzICog MyArIDMgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZG91YmxlMSA9ICBnY2Nfaml0X2NvbnRleHRf bmV3X2dsb2JhbCAoCisJY3R4dCwgTlVMTCwKKwlHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKwlk b3VibGVfdHlwZSwKKwkiZ2xvYmFsX2RvdWJsZTJfMTIiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAq cnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQs IGRvdWJsZV90eXBlLCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9tdWwgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAoY3R4dCwgMCwKKyAgICAgIEdDQ19KSVRfQklOQVJZX09Q X01VTFQsCisgICAgICBkb3VibGVfdHlwZSwKKyAgICAgIHJ2YWwsCisgICAgICBydmFsKTsKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9wbHVzID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlf b3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorICAgICAgZG91Ymxl X3R5cGUsCisgICAgICBydmFsX211bCwKKyAgICAgIHJ2YWwpOworICAgIGdjY19qaXRfZ2xvYmFs X3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGRvdWJsZTEsCisgICAgICBydmFsX3BsdXMpOworICB9 CisgIHsgLyogYm9vbCBmb28gPSAzICsgMyA8PSA2OyAqLworICAgIGdjY19qaXRfbHZhbHVlICpm b28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAg ICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgYm9vbF90eXBlLAorICAgICAgImds b2JhbF9ib29sMV8xIik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzXzAgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7Cisg ICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzXzEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUg KnJ2YWw2ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4 dCwgaW50X3R5cGUsIDYpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX3BsdXMgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAoY3R4dCwKKyAgICAgIDAsCisgICAgICBHQ0NfSklUX0JJ TkFSWV9PUF9QTFVTLAorICAgICAgaW50X3R5cGUsCisgICAgICBydmFsM18wLAorICAgICAgcnZh bDNfMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfbGUgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X2NvbXBhcmlzb24gKGN0eHQsCisgICAgICAwLAorICAgICAgR0NDX0pJVF9DT01QQVJJU09OX0xF LAorICAgICAgcnZhbF9wbHVzLAorICAgICAgcnZhbDYpOworCisgICAgZ2NjX2ppdF9nbG9iYWxf c2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbF9sZSk7CisgIH0KKyAgZ2Nj X2ppdF9sdmFsdWUgKmdsb2JhbF9pbnRhcnJfMTIzNDsKKyAgeyAvKiBpbnQgZm9vW10gPSB7MSwy LDMsNH07ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0gZ2NjX2ppdF9jb250ZXh0 X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJCQkJCQkgICAgIGludF90 eXBlLAorCQkJCQkJCSAgICAgNCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMSA9IGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAx KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZh bHVlICpydmFsXzMgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAg ICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfNCA9IGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCA0 KTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHtydmFsXzEsIHJ2YWxfMiwgcnZh bF8zLCBydmFsXzR9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkJCQkgIDAsCisJCQkJCQkJCSAg YXJyX3R5cGUsCisJCQkJCQkJCSAgNCwKKwkJCQkJCQkJICB2YWx1ZXMpOworICAgIGdsb2JhbF9p bnRhcnJfMTIzNCA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5V TEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGFycl90eXBlLAorICAg ICAgImdsb2JhbF9pbnRhcnJfMTIzNCIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFs aXplcl9ydmFsdWUgKGdsb2JhbF9pbnRhcnJfMTIzNCwgY3Rvcik7CisgIH0KKyAgeyAvKiBmbG9h dCBmb29bNF0gPSB7MSwyfTsgKi8KKworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBnY2Nf aml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJCQkJ CSAgICAgZmxvYXRfdHlwZSwKKwkJCQkJCQkgICAgIDQpOworICAgIGdjY19qaXRfcnZhbHVlICpy dmFsXzEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBmbG9hdF90eXBlLCAxKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMik7 CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVzW10gPSB7cnZhbF8xLCBydmFsXzJ9OworCisg ICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0 cnVjdG9yIChjdHh0LAorCQkJCQkJCQkgIDAsCisJCQkJCQkJCSAgYXJyX3R5cGUsCisJCQkJCQkJ CSAgMiwKKwkJCQkJCQkJICB2YWx1ZXMpOworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19K SVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgYXJyX3R5cGUsCisgICAgICAiZ2xvYmFsX2Zsb2F0 YXJyXzEyIik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9v LCBjdG9yKTsKKyAgfQorICB7IC8qIGZsb2F0IGZvb1s0XSA9IHsxLDJ9OworICAgICAgIFdpdGgg ZGlmZmVyZW50IGFycmF5IG9iamVjdHMgb2Ygc2FtZSBzaXplIGFuZCB0eXBlLiAqLworCisgICAg Z2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfdHlwZSAo Y3R4dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAgICBmbG9hdF90eXBlLAorCQkJCQkJCSAg ICAgNCk7CisgICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZTEgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAgMCwKKwkJCQkJCQkgICAgICBmbG9hdF90 eXBlLAorCQkJCQkJCSAgICAgIDQpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzEgPSBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9hdF90eXBl LCAxKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMik7CisKKyAgICBnY2Nf aml0X3J2YWx1ZSAqdmFsdWVzW10gPSB7cnZhbF8xLCBydmFsXzJ9OworCisgICAgZ2NjX2ppdF9y dmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yIChjdHh0 LAorCQkJCQkJCQkgIDAsCisJCQkJCQkJCSAgYXJyX3R5cGUxLAorCQkJCQkJCQkgIDIsCisJCQkJ CQkJCSAgdmFsdWVzKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4 dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9F WFBPUlRFRCwKKyAgICAgIGFycl90eXBlLAorICAgICAgImdsb2JhbF9mbG9hdGFycl8xMl8yIik7 CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsK KyAgfQorICB7IC8qIGZsb2F0IGZvb1s0XSA9IHsxLDIsMH07IChudWxsIGluaXQpICovCisKKyAg ICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBl IChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJCQkJCQkgICAgIGZsb2F0X3R5cGUsCisJCQkJCQkJ ICAgICA0KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMSk7CisgICAgZ2Nj X2ppdF9ydmFsdWUgKnJ2YWxfMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50 ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZh bHVlc1tdID0ge3J2YWxfMSwgcnZhbF8yLCAwfTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9y ID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJCQkJ ICAwLAorCQkJCQkJCQkgIGFycl90eXBlLAorCQkJCQkJCQkgIDIsCisJCQkJCQkJCSAgdmFsdWVz KTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFs ICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAg ICAgIGFycl90eXBlLAorICAgICAgImdsb2JhbF9mbG9hdGFycl8xMjAiKTsKKyAgICBnY2Nfaml0 X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyog ZmxvYXQgZm9vWzRdID0ge307IChudWxsIGluaXQpICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFy cl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAg ICAgMCwKKwkJCQkJCQkgICAgIGZsb2F0X3R5cGUsCisJCQkJCQkJICAgICA0KTsKKworICAgIGdj Y19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3Rv ciAoY3R4dCwKKwkJCQkJCQkJICAwLAorCQkJCQkJCQkgIGFycl90eXBlLAorCQkJCQkJCQkgIDAs CisJCQkJCQkJCSAgMCk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRl eHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxf RVhQT1JURUQsCisgICAgICBhcnJfdHlwZSwKKyAgICAgICJnbG9iYWxfZmxvYXRhcnJfMDAwMCIp OworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7 CisgIH0KKyAgeyAvKiBmbG9hdCBmb29bNF0gPSB7TlVMTCAsIE5VTEwsIDMsIE5VTEwsIDUsIDZ9 OyAobnVsbCBpbml0KSAqLworCisgICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdjY19qaXRf Y29udGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAg ICBmbG9hdF90eXBlLAorCQkJCQkJCSAgICAgOCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwz ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxv YXRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWw1ID0gZ2NjX2ppdF9jb250ZXh0 X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgNSk7CisgICAg Z2NjX2ppdF9ydmFsdWUgKnJ2YWw2ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9p bnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgNik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAq dmFsdWVzW10gPSB7MCwgMCwgcnZhbDMsIDAsIHJ2YWw1LCBydmFsNiwgMCB9OworCisgICAgZ2Nj X2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9y IChjdHh0LAorCQkJCQkJCQkgIDAsCisJCQkJCQkJCSAgYXJyX3R5cGUsCisJCQkJCQkJCSAgNywK KwkJCQkJCQkJICB2YWx1ZXMpOworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9j b250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xP QkFMX0VYUE9SVEVELAorICAgICAgYXJyX3R5cGUsCisgICAgICAiZ2xvYmFsX2Zsb2F0YXJyXzAw MzA1NjAwIik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9v LCBjdG9yKTsKKyAgfQorICB7IC8qIGludCAqZm9vWzRdID0gezAsICZnbG9iYWxfaW50YXJyXzEy MzRbMV0sIDB9OyAqLworCisgICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdjY19qaXRfY29u dGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAgICBw aW50X3R5cGUsCisJCQkJCQkJICAgICA0KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8xID0g Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5 cGUsIDEpOworICAgIGdjY19qaXRfbHZhbHVlICphcnJfYWNjZXNzID0gZ2NjX2ppdF9jb250ZXh0 X25ld19hcnJheV9hY2Nlc3MgKAorICAgICAgY3R4dCwKKyAgICAgIDAsCisgICAgICBnY2Nfaml0 X2x2YWx1ZV9hc19ydmFsdWUgKGdsb2JhbF9pbnRhcnJfMTIzNCksCisgICAgICBydmFsXzEpOwor ICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzIgPSBnY2Nfaml0X2x2YWx1ZV9nZXRfYWRkcmVzcyAo YXJyX2FjY2VzcywgMCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMyA9IGdjY19qaXRfY29u dGV4dF9udWxsIChjdHh0LCBwaW50X3R5cGUpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVl c1tdID0gezAsIHJ2YWxfMiwgcnZhbF8zfTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0g Z2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJCQkJICAw LAorCQkJCQkJCQkgIGFycl90eXBlLAorCQkJCQkJCQkgIDIsCisJCQkJCQkJCSAgdmFsdWVzKTsK KyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgK KyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAg IGFycl90eXBlLAorICAgICAgImdsb2JhbF9waW50YXJyX3gyeHgiKTsKKyAgICBnY2Nfaml0X2ds b2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogY2hh ciBmb29bNF0gPSB7J3EnLCd3JywnZScsMH07ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFycl90 eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAg MCwKKwkJCQkJCQkgICAgIGNoYXJfdHlwZSwKKwkJCQkJCQkgICAgIDQpOworCisKKyAgICBnY2Nf aml0X3J2YWx1ZSAqcnZhbHNbXSA9IHsKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21faW50ICggY3R4dCwgY2hhcl90eXBlLCAncScpLAorICAgICAgZ2NjX2ppdF9jb250ZXh0 X25ld19ydmFsdWVfZnJvbV9pbnQgKCBjdHh0LCBjaGFyX3R5cGUsICd3JyksCisgICAgICBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoIGN0eHQsIGNoYXJfdHlwZSwgJ2UnKSwK KyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICggY3R4dCwgY2hhcl90 eXBlLCAwKQorICAgIH07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29u dGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3IgKGN0eHQsCisJCQkJCQkJCSAgMCwKKwkJCQkJCQkJ ICBhcnJfdHlwZSwKKwkJCQkJCQkJICA0LAorCQkJCQkJCQkgIHJ2YWxzKTsKKyAgICBnY2Nfaml0 X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQs IE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGFycl90eXBlLAor ICAgICAgImdsb2JhbF9jaGFyYXJyX3F3ZSIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0 aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBpbnQgZm9vWzJdWzJdID0g e3sxLDJ9LHszLDR9fTsgKi8KKworICAgIGdjY19qaXRfdHlwZSAqcm93X3R5cGUgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJCQkJCSAg ICAgaW50X3R5cGUsCisJCQkJCQkJICAgICAyKTsKKworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5 cGUgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAw LAorCQkJCQkJCSAgICAgcm93X3R5cGUsCisJCQkJCQkJICAgICAyKTsKKyAgICBnY2Nfaml0X3J2 YWx1ZSAqcnZhbHNfcm93MFtdID0geworICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVf ZnJvbV9pbnQgKCBjdHh0LCBpbnRfdHlwZSwgMSksCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X3J2YWx1ZV9mcm9tX2ludCAoIGN0eHQsIGludF90eXBlLCAyKQorICAgIH07CisgICAgZ2NjX2pp dF9ydmFsdWUgKnJ2YWxzX3JvdzFbXSA9IHsKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21faW50ICggY3R4dCwgaW50X3R5cGUsIDMpLAorICAgICAgZ2NjX2ppdF9jb250ZXh0 X25ld19ydmFsdWVfZnJvbV9pbnQgKCBjdHh0LCBpbnRfdHlwZSwgNCkKKyAgICB9OworCisgICAg Z2NjX2ppdF9ydmFsdWUgKmN0b3Jfcm93MCA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Fy cmF5X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkgICAgIDAsCisJCQkJCSAgICAgcm93X3R5cGUs CisJCQkJCSAgICAgMiwKKwkJCQkJICAgICBydmFsc19yb3cwKTsKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqY3Rvcl9yb3cxID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfY29uc3RydWN0 b3IgKGN0eHQsCisJCQkJCSAgICAgMCwKKwkJCQkJICAgICByb3dfdHlwZSwKKwkJCQkJICAgICAy LAorCQkJCQkgICAgIHJ2YWxzX3JvdzEpOworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yc19yb3db XSA9IHtjdG9yX3JvdzAsIGN0b3Jfcm93MX07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3Rvcl9h cnIgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvciAoY3R4dCwK KwkJCQkJICAgICAwLAorCQkJCQkgICAgIGFycl90eXBlLAorCQkJCQkgICAgIDIsCisJCQkJCSAg ICAgY3RvcnNfcm93KTsKKworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250 ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFM X0VYUE9SVEVELAorICAgICAgYXJyX3R5cGUsCisgICAgICAiZ2xvYmFsX2ludDJ4Mm1hdHJpeF8x MjM0Iik7CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28s IGN0b3JfYXJyKTsKKyAgfQorICB7IC8qIGNvbnN0IGNoYXIgKmZvb1s0XSA9IHsicXdlIiwgImFz ZCJ9OyAqLworCisgICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdjY19qaXRfY29udGV4dF9u ZXdfYXJyYXlfdHlwZSAoY3R4dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAgICBjcGNoYXJf dHlwZSwKKwkJCQkJCQkgICAgIDQpOworCisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbHNbXSA9 IHsKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfc3RyaW5nX2xpdGVyYWwgKGN0eHQsICJxd2Ui KSwKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfc3RyaW5nX2xpdGVyYWwgKGN0eHQsICJhc2Qi KQorICAgIH07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9u ZXdfYXJyYXlfY29uc3RydWN0b3IgKGN0eHQsCisJCQkJCQkJCSAgMCwKKwkJCQkJCQkJICBhcnJf dHlwZSwKKwkJCQkJCQkJICAyLAorCQkJCQkJCQkgIHJ2YWxzKTsKKyAgICBnY2Nfaml0X2x2YWx1 ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEws CisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGFycl90eXBlLAorICAgICAg Imdsb2JhbF9jcGNoYXJhcnJfcXdlX2FzZCIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0 aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBjb25zdCBpbnQgZm9vID0g MzsKKyAgICAgICBpbnQgYmFyID0gZm9vOworICAgICAqLworICAgIGdjY19qaXRfbHZhbHVlICpm b28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAg ICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25z dCAoaW50X3R5cGUpLAorICAgICAgImdsb2JhbF9jb25zdF9pbnRfMyIpOworICAgIGdjY19qaXRf cnZhbHVlICpydmFsMyA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAg ICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6 ZXJfcnZhbHVlIChmb28sCisJcnZhbDMpOworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19K SVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisgICAgICAiZ2xvYmFsX2x2YWx1 ZWluaXRfaW50XzMiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVl IChiYXIsCisJCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZm9vKSk7CisgIH0KKyAg eyAvKiBpbnQgZm9vID0gMyAqIDI7CisgICAgICAgaW50IGFycltdID0gezEsMiwzLDR9OworICAg ICAgIGludCAqYmFyID0gJmFyclsyXSArIDEKKworICAgICAgIEV4YW1wbGUgaW4gdGhlIGRvY3Mu CisgICAgICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0gZ2NjX2ppdF9jb250ZXh0 X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJCQkJCQkgICAgIGludF90 eXBlLAorCQkJCQkJCSAgICAgNCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMSA9IGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAx KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZh bHVlICpydmFsXzMgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAg ICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfNCA9IGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCA0 KTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHtydmFsXzEsIHJ2YWxfMiwgcnZh bF8zLCBydmFsXzR9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkJCQkgIDAsCisJCQkJCQkJCSAg YXJyX3R5cGUsCisJCQkJCQkJCSAgNCwKKwkJCQkJCQkJICB2YWx1ZXMpOworICAgIGdjY19qaXRf bHZhbHVlICpnbG9iYWxfaW50YXJyXzEyMzQgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19n bG9iYWwgKGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKwkJCQkg IGFycl90eXBlLAorCQkJCSAgImdsb2JhbF9pbnRhcnJfMTIzNF8yIik7CisKKyAgICBnY2Nfaml0 X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChnbG9iYWxfaW50YXJyXzEyMzQsIGN0b3Ip OworCisgICAgZ2NjX2ppdF9sdmFsdWUgKmJhciA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X2dsb2JhbCAoY3R4dCwgTlVMTCwKKwkJCQkgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorCQkJ CSAgaW50X3R5cGUsCisJCQkJICAiZ2xvYmFsX2ludF82Iik7CisgICAgZ2NjX2ppdF9nbG9iYWxf c2V0X2luaXRpYWxpemVyX3J2YWx1ZQorICAgICAgKGJhciwKKyAgICAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X2JpbmFyeV9vcAorCSAoY3R4dCwgMCwgR0NDX0pJVF9CSU5BUllfT1BfTVVMVCwKKwkg IGludF90eXBlLAorCSAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQs IGludF90eXBlLCAzKSwKKwkgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChj dHh0LCBpbnRfdHlwZSwgMikpKTsKKworICAgIGdjY19qaXRfbHZhbHVlICpwZm9vID0KKyAgICAg IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsIChjdHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9H TE9CQUxfRVhQT1JURUQsCisJCQkJICBnY2Nfaml0X3R5cGVfZ2V0X3BvaW50ZXIgKGludF90eXBl KSwKKwkJCQkgICJnbG9iYWxfcGludF80Iik7CisgICAgLyogaW50ICpiYXIgPSAmYXJyWzJdICsg MTsKKworICAgICAgIEluIHByYWN0aWNlIHdlIGNvdWxkIGp1c3QgZG8gJmZvb1szXQorICAgICAg IGJ1dCBqdXN0IHByb3ZlIGZvbGRpbmcgdGhpcyB3b3Jrcy4gKi8KKyAgICBnY2Nfaml0X2dsb2Jh bF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgKKyAgICAgICBwZm9vLAorICAgICAgIGdjY19qaXRf bHZhbHVlX2dldF9hZGRyZXNzICgKKwkgZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9hY2Nlc3Mg KAorCSAgIGN0eHQsIDAsCisJICAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3MgKAorCSAgICAg Z2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9hY2Nlc3MgKAorCSAgICAgICBjdHh0LCAwLAorCSAg ICAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGdsb2JhbF9pbnRhcnJfMTIzNCksCisJICAg ICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwg MikpLAorCSAgICAgICAwKSwKKwkgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2lu dCAoY3R4dCwgaW50X3R5cGUsIDEpKSwKKwkgICAwKSk7CisgIH0KKyAgeyAvKiAgc3RhdGljIGlu dCBiYXIgPSAxMTsKKwlpbnQgZm9vICgpIHsgcmV0dXJuIGJhcjsgfSAqLworCisgICAgZ2NjX2pp dF9sdmFsdWUgKmJhciA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0 LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfSU5URVJOQUwsCisgICAgICBpbnRfdHlwZSwK KyAgICAgICJnbG9iYWxfc3RhdGljX2ludF8xMSIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFs MSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGlu dF90eXBlLCAxMSk7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAo YmFyLAorCXJ2YWwxKTsKKworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuMTEgPQorICAgICAgZ2Nj X2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgR0ND X0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgaW50X3R5cGUsCisJCQkJICAgICJmbl9p bnRfMTEiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAwKTsKKyAgICBnY2Nfaml0 X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmbjExLCAic3RhcnQi KTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAw LAorCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShiYXIpKTsKKyAgfQorICB7IC8qIHN0 YXRpYyBjb25zdCBpbnQgY2JhciA9IDExOworICAgICAgIGludCBjZm9vICgpIHsgcmV0dXJuIGNi YXI7IH0gKi8KKworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25l d19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0lOVEVS TkFMLAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAoaW50X3R5cGUpLAorICAgICAgImds b2JhbF9zdGF0aWNfY2ludF8xMSIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsMSA9IGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAx MSk7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoYmFyLAorCXJ2 YWwxKTsKKworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuMTEgPQorICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgR0NDX0pJVF9GVU5D VElPTl9FWFBPUlRFRCwKKwkJCQkgICAgaW50X3R5cGUsCisJCQkJICAgICJmbl9jaW50XzExIiwK KwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9ibG9jayAq YmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm4xMSwgInN0YXJ0Iik7CisKKyAg ICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJCQkJICAgMCwKKwkJCQkg ICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoYmFyKSk7CisgIH0KKyAgeyAvKiBzdGF0aWMgY29u c3QgaW50IGNiYXIgPSAxMjsKKyAgICAgICBjb25zdCBpbnQqIGNmb28gKCkgeyByZXR1cm4gJmNi YXI7IH0gKi8KKworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25l d19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0lOVEVS TkFMLAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAoaW50X3R5cGUpLAorICAgICAgImds b2JhbF9zdGF0aWNfY2ludF8xMiIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsMSA9IGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAx Mik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoYmFyLAorCXJ2 YWwxKTsKKworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuMTEgPQorICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgR0NDX0pJVF9GVU5D VElPTl9FWFBPUlRFRCwKKwkJCQkgICAgZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyKGludF90eXBl KSwKKwkJCQkgICAgImZuX2NpbnRfMTIiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAg ICAwKTsKKworICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdf YmxvY2sgKGZuMTEsICJzdGFydCIpOworCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1 cm4gKGJsb2NrLAorCQkJCSAgIDAsCisJCQkJICAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3Mg KGJhciwgMCkpOworICB9CisgIHsgLyogY29uc3QgaW50IGZvbyA9IDM7CisgICAgICAgc2hvcnQg YmFyID0gKHNob3J0KWZvbzsKKworICAgICAgIEFzc3VyZSBjYXN0cyBmb2xkCisgICAgICovCisg ICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisg ICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBn Y2Nfaml0X3R5cGVfZ2V0X2NvbnN0IChpbnRfdHlwZSksCisgICAgICAiZ2xvYmFsX2NvbnN0X2lu dF80Iik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzID0gZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRf Z2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKwlydmFsMyk7CisgICAgZ2NjX2pp dF9sdmFsdWUgKmJhciA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0 LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBzaG9ydF90eXBl LAorICAgICAgImdsb2JhbF9sdmFsdWVpbml0X3Nob3J0XzMiKTsKKyAgICBnY2Nfaml0X2dsb2Jh bF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgKKyAgICAgIGJhciwKKyAgICAgIGdjY19qaXRfY29u dGV4dF9uZXdfY2FzdCggY3R4dCwgMCwKKwkJCQlnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGZv byksCisJCQkJc2hvcnRfdHlwZSkpOworICB9CisgIHsgLyogY29uc3QgaW50IGZvbyA9IDM7Cisg ICAgICAgY29uc3QgaW50IGNvbnN0ICpiYXIgPSAmZm9vOyAqLworICAgIGdjY19qaXRfbHZhbHVl ICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwK KyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9j b25zdCAoaW50X3R5cGUpLAorICAgICAgImdsb2JhbF9jb25zdF9pbnRfNiIpOworICAgIGdjY19q aXRfcnZhbHVlICpydmFsMyA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgK KyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlh bGl6ZXJfcnZhbHVlIChmb28sCisJcnZhbDMpOworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAg Z2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdD Q19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAoCisJ Z2NjX2ppdF90eXBlX2dldF9wb2ludGVyICgKKwkgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKAor CSAgICBpbnRfdHlwZSkpKSwKKyAgICAgICJnbG9iYWxfbHZhbHVlaW5pdF9jcGNpbnRfMyIpOwor ICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKAorICAgICAgYmFyLAor ICAgICAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3MgKGZvbywgMCkpOworICB9CisgIHsgLyog Y29uc3QgaW50IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg2NCkpKSBmb28gPSAzOworICAgICAg IGludCBiYXIgPSBmb287CisKKyAgICAgICBBc3N1cmUgYWxpZ25lbWVudCBkb2VzIG5vdCBtYWtl IHRoZSBjb25zdGFudCAibWlzcyIKKyAgICAgICBvciBzb21ldGhpbmcgc3RyYW5nZS4KKyAgICAg Ki8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFs ICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAg ICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKGdjY19qaXRfdHlwZV9nZXRfYWxpZ25lZCAoaW50 X3R5cGUsIDY0KSksCisgICAgICAiZ2xvYmFsX2NvbnN0X2ludF83Iik7CisgICAgZ2NjX2ppdF9y dmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAg ICBjdHh0LCBpbnRfdHlwZSwgNCk7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVy X3J2YWx1ZSAoZm9vLAorCXJ2YWwpOworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2NjX2pp dF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRf R0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisgICAgICAiZ2xvYmFsX2x2YWx1ZWlu aXRfaW50XzQiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChi YXIsCisJCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZm9vKSk7CisgIH0KKyAgewor ICAgIC8qIHVuaW9uIHVwaW50c2l6ZSB7IHNpemVfdCBzOyBpbnQgKnAgfSB1ID0gey5zID0gMHhF RUVGQkVFRn07ICovCisgICAgZ2NjX2ppdF9maWVsZCAqZjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIHNpemVfdHlwZSwKKwkJCQkJCSAg ICJzIik7CisgICAgZ2NjX2ppdF9maWVsZCAqZjIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxk IChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIHBpbnRfdHlwZSwKKwkJCQkJCSAgICJwIik7 CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzMVtdID0ge2YxLCBmMn07CisKKyAgICBnY2Nfaml0 X3R5cGUgKnViYXIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX3R5cGUgKGN0eHQsCisJCQkJ CQkJIDAsCisJCQkJCQkJICJ1cGludHNpemUiLAorCQkJCQkJCSAyLAorCQkJCQkJCSBmaWVsZHMx KTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFs ICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAg ICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKHViYXIpLAorICAgICAgImdsb2JhbF9jb25zdF91 cGludHNpemVfMSIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbCA9IGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21fbG9uZyAoCisgICAgICBjdHh0LCBzaXplX3R5cGUsIDB4RUVFRkJF RUYpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0 X25ld191bmlvbl9jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJICAgICAwLAorCQkJCQkgICAgIHVi YXIsCisJCQkJCSAgICAgZjEsCisJCQkJCSAgICAgdmFsKTsKKworICAgIGdjY19qaXRfZ2xvYmFs X3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KK30KKworc3RydWN0IGZp IHsKKyAgZmxvYXQgZjsKKyAgaW50IGk7Cit9OworCitzdHJ1Y3QgYmFyMSB7CisgIGZsb2F0IGZm OworICBzdHJ1Y3QgZmkgZmk7CisgIGludCBpaTsKK307CisKK3VuaW9uIHViYXIxIHsKKyAgZmxv YXQgZmY7CisgIGludCBpaTsKK307CisKK3VuaW9uIHVwaW50c2l6ZSB7CisgIHNpemVfdCBzOwor ICBpbnQgKnA7Cit9OworCitpbnQgdGVzdF9hbGlnbmVkNjRfd29ya3NfaW5fbGlua2VyXzEgX19h dHRyaWJ1dGVfXyAoKGFsaWduZWQgKDY0KSkpID0gMDsKK2ludCB0ZXN0X2FsaWduZWQ2NF93b3Jr c19pbl9saW5rZXJfMiBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNjQpKSkgPSAwOworCit2b2lk Cit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVz dWx0KQoreworICBDSEVDS19OT05fTlVMTCAocmVzdWx0KTsKKworICBnY2Nfaml0X2NvbnRleHRf ZHVtcF90b19maWxlKGN0eHQsICIuL2R1bXAuYyIsIDEpOworCisgIHsKKyAgICBzdHJ1Y3QgZmkg KmZpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0cnVjdF9m aV8yM18xIik7CisKKyAgICBDSEVDS19WQUxVRSAoZmktPmYsIDIpOworICAgIENIRUNLX1ZBTFVF IChmaS0+aSwgMyk7CisgIH0KKyAgeworICAgIHN0cnVjdCBmaSAqZmkgPSBnY2Nfaml0X3Jlc3Vs dF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfc3RydWN0X2ZpXzIzXzIiKTsKKworICAgIENI RUNLX1ZBTFVFIChmaS0+ZiwgMik7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5pLCAzKTsKKyAgfQor ICB7CisgICAgc3RydWN0IGZpICpmaSA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3Vs dCwgImdsb2JhbF9zdHJ1Y3RfZmlfMyIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5mLCAyICog Mik7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5pLCAzKTsKKyAgfQorICB7CisgICAgc3RydWN0IGZp ICpmaSA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3Rf ZmlfMDBfMSIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5mLCAwKTsKKyAgICBDSEVDS19WQUxV RSAoZmktPmksIDApOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmkgKmZpID0gZ2NjX2ppdF9yZXN1 bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0cnVjdF9maV8wMF8yIik7CisKKyAgICBD SEVDS19WQUxVRSAoZmktPmYsIDApOworICAgIENIRUNLX1ZBTFVFIChmaS0+aSwgMCk7CisgIH0K KyAgeworICAgIHN0cnVjdCBmaSAqZmkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1 bHQsICJnbG9iYWxfc3RydWN0X2ZpXzBfMSIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5mLCAw KTsKKyAgICBDSEVDS19WQUxVRSAoZmktPmksIDApOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmkg KmZpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0cnVjdF9m aV8wXzIiKTsKKworICAgIENIRUNLX1ZBTFVFIChmaS0+ZiwgMCk7CisgICAgQ0hFQ0tfVkFMVUUg KGZpLT5pLCAwKTsKKyAgfQorICB7CisgICAgc3RydWN0IGZpICpmaSA9IGdjY19qaXRfcmVzdWx0 X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfZmlfNiIpOworCisgICAgQ0hFQ0tf VkFMVUUgKGZpLT5mLCAwKTsKKyAgICBDSEVDS19WQUxVRSAoZmktPmksIDApOworICB9CisgIHsK KyAgICBzdHJ1Y3QgYmFyMSAqYmFyID0KKyAgICAgIGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwg KHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfYmFyXzEyMzRfMSIpOworCisgICAgQ0hFQ0tfVkFMVUUg KGJhci0+ZmYsIDEpOworICAgIENIRUNLX1ZBTFVFIChiYXItPmZpLmYsIDIpOworICAgIENIRUNL X1ZBTFVFIChiYXItPmZpLmksIDMpOworICAgIENIRUNLX1ZBTFVFIChiYXItPmlpLCA0KTsKKyAg fQorICB7CisgICAgc3RydWN0IGJhcjEgKmJhciA9CisgICAgICBnY2Nfaml0X3Jlc3VsdF9nZXRf Z2xvYmFsIChyZXN1bHQsICJnbG9iYWxfc3RydWN0X2Jhcl8xMjM0XzIiKTsKKworICAgIENIRUNL X1ZBTFVFIChiYXItPmZmLCAxKTsKKyAgICBDSEVDS19WQUxVRSAoYmFyLT5maS5mLCAyKTsKKyAg ICBDSEVDS19WQUxVRSAoYmFyLT5maS5pLCAzKTsKKyAgICBDSEVDS19WQUxVRSAoYmFyLT5paSwg NCk7CisgIH0KKyAgeworICAgIHVuaW9uIHViYXIxICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRf Z2xvYmFsIChyZXN1bHQsCisJCQkJCQkgICJnbG9iYWxfdW5pb25fdWZvb19mZjMiKTsKKyAgICBD SEVDS19WQUxVRSAoZm9vLT5mZiwgMyk7CisgIH0KKyAgeworICAgIHVuaW9uIHViYXIxICpmb28g PSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsCisJCQkJCQkgICJnbG9iYWxfdW5p b25fdWZvb19paTIiKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vLT5paSwgMik7CisgIH0KKyAgewor ICAgIHVuaW9uIHViYXIxICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQs CisJCQkJCQkgICJnbG9iYWxfdW5pb25fdWZvb18wIik7CisgICAgQ0hFQ0tfVkFMVUUgKGZvby0+ aWksIDApOworICB9CisgIHsKKyAgICB1bmlvbiB1YmFyMSAqZm9vID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2dsb2JhbCAocmVzdWx0LAorCQkJCQkJICAiZ2xvYmFsX3VuaW9uX3Vmb29fZmYxYzEiKTsK KyAgICBDSEVDS19WQUxVRSAoZm9vLT5mZiwgMS4xZik7CisgIH0KKworICB7CisgICAgaW50ICpm b28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfaW50MV8zIik7 CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMyk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0g Z2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2N2aW50MV8zIik7CisK KyAgICBDSEVDS19WQUxVRSAoKmZvbywgMyk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0gZ2Nj X2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2ludDJfMyIpOworCisgICAg Q0hFQ0tfVkFMVUUgKCpmb28sIDMpOworICB9CisgIHsKKyAgICBpbnQgKmZvbyA9IGdjY19qaXRf cmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9pbnQzXzE4Iik7CisKKyAgICBDSEVD S19WQUxVRSAoKmZvbywgMTgpOworICB9CisgIHsKKyAgICBpbnQgKmZvbyA9IGdjY19qaXRfcmVz dWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9pbnRfYWxvdG9mb3BlcmF0b3JzIik7CisK KyAgICBDSEVDS19WQUxVRSAoKmZvbywgfigtKCgoKCgoMiB8IDgpICYgMTUpIF4gMCkgPDwgMyA+ PiAyKSAtIDEpIC8gMikpKTsKKyAgfQorICB7CisgICAgaW50ICpmb28gPSBnY2Nfaml0X3Jlc3Vs dF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfaW50NF8zIik7CisgICAgaW50ICoqcGZvbyA9 IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9waW50NSIpOworCisg ICAgQ0hFQ0tfVkFMVUUgKCpmb28sIDMpOworICAgIENIRUNLX1ZBTFVFIChmb28sICpwZm9vKTsK KyAgICBDSEVDS19WQUxVRSAoKipwZm9vLCAzKTsKKyAgfQorICB7CisgICAgaW50ICpmb28gPSBn Y2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfaW50Nl8zIik7CisgICAg aW50ICoqcGZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9w aW50NyIpOworCisgICAgQ0hFQ0tfVkFMVUUgKCpmb28sIDMpOworICAgIENIRUNLX1ZBTFVFIChm b28gKyAxLCAqcGZvbyk7CisgICAgQ0hFQ0tfVkFMVUUgKCooKnBmb28gLSAxKSwgMyk7CisgIH0K KyAgeworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAi Z2xvYmFsX2x2YWx1ZWluaXRfaW50XzMiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAzKTsK KyAgfQorICB7CisgICAgZG91YmxlICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChy ZXN1bHQsICJnbG9iYWxfZG91YmxlMV8zIik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMyk7 CisgIH0KKyAgeworICAgIGRvdWJsZSAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAo cmVzdWx0LCAiZ2xvYmFsX2RvdWJsZTJfMTIiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAx Mik7CisgIH0KKyAgeworICAgIF9Cb29sICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFs IChyZXN1bHQsICJnbG9iYWxfYm9vbDFfMSIpOworCisgICAgQ0hFQ0tfVkFMVUUgKCpmb28sIDEp OworICB9CisgIHsKKyAgICBpbnQgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJl c3VsdCwgImdsb2JhbF9pbnRhcnJfMTIzNCIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZvb1swXSwg MSk7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1sxXSwgMik7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1sy XSwgMyk7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1szXSwgNCk7CisgIH0KKyAgeworICAgIGZsb2F0 ICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfZmxvYXRh cnJfMTIiKTsKKworICAgIENIRUNLX1ZBTFVFIChmb29bMF0sIDEpOworICAgIENIRUNLX1ZBTFVF IChmb29bMV0sIDIpOworICAgIENIRUNLX1ZBTFVFIChmb29bMl0sIDApOworICAgIENIRUNLX1ZB TFVFIChmb29bM10sIDApOworICB9CisgIHsKKyAgICBmbG9hdCAqZm9vID0gZ2NjX2ppdF9yZXN1 bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2Zsb2F0YXJyXzEyXzIiKTsKKworICAgIENI RUNLX1ZBTFVFIChmb29bMF0sIDEpOworICAgIENIRUNLX1ZBTFVFIChmb29bMV0sIDIpOworICAg IENIRUNLX1ZBTFVFIChmb29bMl0sIDApOworICAgIENIRUNLX1ZBTFVFIChmb29bM10sIDApOwor ICB9CisgIHsKKyAgICBmbG9hdCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVz dWx0LCAiZ2xvYmFsX2Zsb2F0YXJyXzEyMCIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZvb1swXSwg MSk7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1sxXSwgMik7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1sy XSwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1szXSwgMCk7CisgIH0KKyAgeworICAgIGZsb2F0 ICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfZmxvYXRh cnJfMDAwMCIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZvb1swXSwgMCk7CisgICAgQ0hFQ0tfVkFM VUUgKGZvb1sxXSwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1syXSwgMCk7CisgICAgQ0hFQ0tf VkFMVUUgKGZvb1szXSwgMCk7CisgIH0KKyAgeworICAgIGZsb2F0ICpmb28gPSBnY2Nfaml0X3Jl c3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfZmxvYXRhcnJfMDAzMDU2MDAiKTsKKwor ICAgIGZsb2F0IGtleVtdID0gezAsMCwzLDAsNSw2LDAsMH07CisKKyAgICBDSEVDS19WQUxVRSAo bWVtY21wIChmb28sIGtleSwgc2l6ZW9mIGtleSksIDApOworICB9CisgIHsKKyAgICBpbnQgKipm b28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfcGludGFycl94 Mnh4Iik7CisKKyAgICBDSEVDS19WQUxVRSAoZm9vWzBdLCAwKTsKKyAgICBDSEVDS19WQUxVRSAo KmZvb1sxXSwgMik7CisgIH0KKyAgeworICAgIGNoYXIgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dl dF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9jaGFyYXJyX3F3ZSIpOworICAgIGNvbnN0IGNoYXIg KmtleSA9ICJxd2UiOworICAgIENIRUNLX1ZBTFVFIChzdHJjbXAgKGZvbywga2V5KSwgMCk7Cisg IH0KKyAgeworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0 LCAiZ2xvYmFsX2ludDJ4Mm1hdHJpeF8xMjM0Iik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IDQ7IGkrKykKKyAgICAgIENIRUNLX1ZBTFVFIChmb29baV0sIGkgKyAxKTsKKyAgfQorICB7Cisg ICAgY29uc3QgY2hhciAqKmZvbyA9CisgICAgICBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChy ZXN1bHQsICJnbG9iYWxfY3BjaGFyYXJyX3F3ZV9hc2QiKTsKKworICAgIENIRUNLX1ZBTFVFIChz dHJjbXAgKGZvb1swXSwgInF3ZSIpLCAwKTsKKyAgICBDSEVDS19WQUxVRSAoc3RyY21wIChmb29b MV0sICJhc2QiKSwgMCk7CisgIH0KKyAgeworICAgIGludCAqKnBpbnQgPQorICAgICAgZ2NjX2pp dF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3BpbnRfNCIpOworICAgIGludCAq Zm9vID0KKyAgICAgIGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9p bnRfNiIpOworICAgIENIRUNLX1ZBTFVFICgqKnBpbnQsIDQpOworICAgIENIRUNLX1ZBTFVFICgq Zm9vLCA2KTsKKyAgfQorICB7CisgICAgaW50ICgqZm4pKHZvaWQpID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKHJlc3VsdCwgImZuX2ludF8xMSIpOworICAgIENIRUNLX1ZBTFVFIChmbiAoKSwg MTEpOworICB9CisgIHsKKyAgICBpbnQgKCpmbikodm9pZCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRf Y29kZSAocmVzdWx0LCAiZm5fY2ludF8xMSIpOworICAgIENIRUNLX1ZBTFVFIChmbiAoKSwgMTEp OworICB9CisgIHsKKyAgICBzaG9ydCAqZm9vID0KKyAgICAgIGdjY19qaXRfcmVzdWx0X2dldF9j b2RlIChyZXN1bHQsICJnbG9iYWxfbHZhbHVlaW5pdF9zaG9ydF8zIik7CisgICAgQ0hFQ0tfVkFM VUUgKCpmb28sIDMpOworICB9CisgIHsKKyAgICBpbnQgKipmb28gPQorICAgICAgZ2NjX2ppdF9y ZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImdsb2JhbF9sdmFsdWVpbml0X2NwY2ludF8zIik7Cisg ICAgQ0hFQ0tfVkFMVUUgKCoqZm9vLCAzKTsKKyAgfQorICB7CisgICAgaW50ICpmb28gPQorICAg ICAgZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImdsb2JhbF9sdmFsdWVpbml0X2lu dF80Iik7CisgICAgQ0hFQ0tfVkFMVUUgKCpmb28sIDQpOworCisgICAgaW50ICpiYXIgPQorICAg ICAgZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImdsb2JhbF9jb25zdF9pbnRfNyIp OworICAgIENIRUNLX1ZBTFVFICgqYmFyLCA0KTsKKyAgICAvKiBUaGUgbGlua2VyIGRvZXMgbm90 IGhhdmUgdG8gc3VwcG9ydCB1cCB0byA2NCBhbGlnbm1lbnQsIHNvIHRlc3QgdGhhdAorICAgICAg IGl0IGRvZXMgYmVmb3JlIHRlc3RpbmcgdGhhdCBpdCB3b3JrcyBpbiBsaWJnY2NqaXQuICovCisg ICAgaWYgKChzaXplX3QpICZ0ZXN0X2FsaWduZWQ2NF93b3Jrc19pbl9saW5rZXJfMSAlIDY0ID09 IDAgJiYKKwkoc2l6ZV90KSAmdGVzdF9hbGlnbmVkNjRfd29ya3NfaW5fbGlua2VyXzIgJSA2NCA9 PSAwKQorICAgICAgQ0hFQ0tfVkFMVUUgKChzaXplX3QpIGJhciAlIDY0LCAwKTsgLyogX19hdHRy aWJ1dGVfXyAoKGFsaWduZWQgKDY0KSkpICovCisgIH0KKyAgeworICAgIHVuaW9uIHVwaW50c2l6 ZSAqZm9vID0KKyAgICAgIGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJnbG9iYWxf Y29uc3RfdXBpbnRzaXplXzEiKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vLT5wLCAodm9pZCopMHhF RUVGQkVFRik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt bG9jYWwtaW5pdC1ydmFsdWUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtbG9jYWwtaW5p dC1ydmFsdWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGRjYzc3 MTM3OWIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWxvY2Fs LWluaXQtcnZhbHVlLmMKQEAgLTAsMCArMSw2MTQgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu Y2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKworLyogVGhpcyB0ZXN0 Y2FzZSBjaGVja3MgdGhhdCBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yKCkgd29ya3MK KyAgIHdpdGggbG9jYWxzLiBUZXN0cyB0aGF0IGNvbnN0cnVjdG9ycyBjYW4gYmUgdXNlZCBhcyBy ZXR1cm4KKyAgIHZhbHVlcyBvciBmdW5jdGlvbiBjYWxsIHZhbHVlcy4gVGVzdCB0aGF0IGNvbnN0 cnVjdG9ycyBjYW4gaGF2ZSBzaWRlCisgICBlZmZlY3RzIGFuZCBiZSBhc3NpZ25lZCB0byBsb2Nh bHMuCisgKi8KKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9p ZCAqdXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0gZ2NjX2ppdF9jb250 ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9JTlQpOworICBnY2Nfaml0X3R5 cGUgKnBpbnRfdHlwZSA9IGdjY19qaXRfdHlwZV9nZXRfcG9pbnRlciAoaW50X3R5cGUpOworICBn Y2Nfaml0X3R5cGUgKmRvdWJsZV90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0 LAorICAgIEdDQ19KSVRfVFlQRV9ET1VCTEUpOworICBnY2Nfaml0X3R5cGUgKmZsb2F0X3R5cGUg PSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0ZMT0FU KTsKKyAgZ2NjX2ppdF90eXBlICpib29sX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUg KGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0JPT0wpOworICBnY2Nfaml0X3R5cGUgKmNoYXJfdHlw ZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfQ0hB Uik7CisgIGdjY19qaXRfdHlwZSAqc2l6ZV90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBl IChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9TSVpFX1QpOworICBnY2Nfaml0X3R5cGUgKnZvaWRw dHJfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZ UEVfVk9JRF9QVFIpOworICBnY2Nfaml0X3R5cGUgKnZvaWRfdHlwZSA9IGdjY19qaXRfY29udGV4 dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfVk9JRCk7CisKKyAgLyogTWFrZSBh IHN0cnVjdDogc3RydWN0IGZpIHsgZmxvYXQgZjsgaW50IGk7fSAqLworICBnY2Nfaml0X2ZpZWxk ICpmaV9mID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJ CQkJIGZsb2F0X3R5cGUsCisJCQkJCQkgImYiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZmlfaSA9IGdj Y19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgMCwKKwkJCQkJCSBpbnRfdHlw ZSwKKwkJCQkJCSAiaSIpOworICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9mLCBmaV9p fTsKKworICBnY2Nfaml0X3R5cGUgKnN0cnVjdF9maV90eXBlID0KKyAgICBnY2Nfaml0X3N0cnVj dF9hc190eXBlICgKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X3R5cGUgKGN0eHQs CisJCQkJICAgICAgIDAsCisJCQkJICAgICAgICJmaSIsCisJCQkJICAgICAgIDIsCisJCQkJICAg ICAgIGZpZWxkcykpOworCisgIC8qIE1ha2UgYSBzdHJ1Y3Q6CisKKyAgICAgc3RydWN0IGJhciB7 CisgICAgICAgaW50IGlpOworICAgICAgIGludCBhcnJbNTBdOworICAgICAgIGZsb2F0IGZmOwor ICAgICAgIGNoYXIgY2M7CisgICAgIH0KKyAgKi8KKyAgZ2NjX2ppdF9maWVsZCAqYmFyX2ZmID0g Z2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkgIDAsCisJCQkJICBmbG9hdF90 eXBlLAorCQkJCSAgImZmIik7CisgIGdjY19qaXRfZmllbGQgKmJhcl9paSA9IGdjY19qaXRfY29u dGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJICAwLAorCQkJCSAgaW50X3R5cGUsCisJCQkJICAi aWkiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYmFyX2NjID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVs ZCAoY3R4dCwKKwkJCQkgIDAsCisJCQkJICBjaGFyX3R5cGUsCisJCQkJICAiY2MiKTsKKyAgZ2Nj X2ppdF90eXBlICppbnQ1MGFycl90eXBlID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5 X3R5cGUgKGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAgIGludF90eXBlLAorCQkJCSAgICA1MCk7 CisgIGdjY19qaXRfZmllbGQgKmJhcl9maSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0 eHQsCisJCQkJCQkgMCwKKwkJCQkJCSBpbnQ1MGFycl90eXBlLAorCQkJCQkJICJhcnIiKTsKKyAg Z2NjX2ppdF9maWVsZCAqZmllbGRzMltdID0ge2Jhcl9mZiwgYmFyX2ZpLCBiYXJfaWksIGJhcl9j Y307CisKKyAgZ2NjX2ppdF90eXBlICpzdHJ1Y3RfYmFyX3R5cGUgPQorICAgIGdjY19qaXRfc3Ry dWN0X2FzX3R5cGUgKAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfdHlwZSAoY3R4 dCwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgImJhciIsCisJCQkJICAgICAgIDQsCisJCQkJ ICAgICAgIGZpZWxkczIpKTsKKworICAvKiBNYWtlIGFuIHVuaW9uOgorCisgICAgIHVuaW9uIHVi YXIgeworICAgICAgIGZsb2F0IGZmOworICAgICAgIGludCBpaTsKKyAgICAgfTsKKyAgKi8KKyAg Z2NjX2ppdF9maWVsZCAqdWJhcl9mZiA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQs CisJCQkJCQkgICAgICAwLAorCQkJCQkJICAgICAgZmxvYXRfdHlwZSwKKwkJCQkJCSAgICAgICJm ZiIpOworICBnY2Nfaml0X2ZpZWxkICp1YmFyX2lpID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVs ZCAoY3R4dCwKKwkJCQkJCSAgICAgIDAsCisJCQkJCQkgICAgICBpbnRfdHlwZSwKKwkJCQkJCSAg ICAgICJpaSIpOworICBnY2Nfaml0X2ZpZWxkICpmaWVsZHMzW10gPSB7dWJhcl9mZiwgdWJhcl9p aX07CisgIGdjY19qaXRfdHlwZSAqdWJhciA9IGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25fdHlw ZSAoY3R4dCwKKwkJCQkJCSAgICAgICAwLAorCQkJCQkJICAgICAgICJ1YmFyIiwKKwkJCQkJCSAg ICAgICAyLAorCQkJCQkJICAgICAgIGZpZWxkczMpOworCisgICh2b2lkKSB1YmFyOworICAodm9p ZCkgc3RydWN0X2Jhcl90eXBlOworICAodm9pZCkgc3RydWN0X2ZpX3R5cGU7CisgICh2b2lkKSBi b29sX3R5cGU7CisgICh2b2lkKSBkb3VibGVfdHlwZTsKKyAgKHZvaWQpIHBpbnRfdHlwZTsKKyAg KHZvaWQpIHZvaWRwdHJfdHlwZTsKKyAgKHZvaWQpIHNpemVfdHlwZTsKKworICBnY2Nfaml0X2Z1 bmN0aW9uICpmbl9pbnRfMzsKKyAgeyAvKiBpbnQgZm9vICgpIHsgaW50IGxvY2FsID0gMzsgcmV0 dXJuIGxvY2FsO30gKi8KKyAgICBmbl9pbnRfMyA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VY UE9SVEVELAorCQkJCSAgICBpbnRfdHlwZSwKKwkJCQkgICAgImZuX2ludF8zIiwKKwkJCQkgICAg MCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBn Y2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm5faW50XzMsICJzdGFydCIpOworICAgIGdjY19q aXRfbHZhbHVlICpsb2NhbCA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmbl9pbnRfMywK KwkJCQkJCQkwLAorCQkJCQkJCWludF90eXBlLAorCQkJCQkJCSJsb2NhbCIpOworICAgIGdjY19q aXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAor ICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworCisgICAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdu bWVudCAoYmxvY2ssIDAsIGxvY2FsLCBydmFsKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dp dGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2 YWx1ZShsb2NhbCkpOworICB9CisgIHsgLyogc3RydWN0IGZpIGZvbygpIHsgcmV0dXJuIChzdHJ1 Y3QgZmkpezEsMn07fSAqLworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuID0KKyAgICAgIGdjY19q aXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAgIEdDQ19K SVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIHN0cnVjdF9maV90eXBlLAorCQkJCSAgICAi Zm5fZmlfMV8yIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisgICAgZ2Nj X2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm4sICJzdGFy dCIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfZjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9hdF90eXBlLCAxKTsKKyAgICBnY2Nf aml0X3J2YWx1ZSAqcnZhbF9pMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50 ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAyKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWxz W10gPSB7IHJ2YWxfZjEsIHJ2YWxfaTJ9OworICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0g e2ZpX2YsIGZpX2l9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0 X2ZpX3R5cGUsCisgICAgICAgMiwKKyAgICAgICBmaWVsZHMsCisgICAgICAgdmFscyk7CisKKyAg ICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJCQkJICAgMCwKKwkJCQkg ICBjdG9yKTsKKyAgfQorICB7IC8qCisgICAgICAgc3RydWN0IGZpIGZvbygpCisgICAgICAgewor CSBzdHJ1Y3QgZmkgbG9jYWwgPSB7MSwyfTsKKwkgbG9jYWwgPSAoc3RydWN0IGZpKXs1LDZ9Owor CSByZXR1cm4gbG9jYWw7CisgICAgICAgfQorICAgICAqLworICAgIGdjY19qaXRfZnVuY3Rpb24g KmZuID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAg IDAsCisJCQkJICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIHN0cnVjdF9m aV90eXBlLAorCQkJCSAgICAiZm5fZmlfNV82IiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJ CQkgICAgMCk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmxvY2FsID0gZ2NjX2ppdF9mdW5jdGlvbl9u ZXdfbG9jYWwgKGZuLAorCQkJCQkJCTAsCisJCQkJCQkJc3RydWN0X2ZpX3R5cGUsCisJCQkJCQkJ ImxvY2FsIik7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25l d19ibG9jayAoZm4sICJzdGFydCIpOworCisgICAgeworICAgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2 YWxfZjEgPQorCWdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBmbG9h dF90eXBlLCAxKTsKKyAgICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2kyID0KKwlnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIDIpOworCisgICAgICBn Y2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyBydmFsX2YxLCBydmFsX2kyfTsKKyAgICAgIGdjY19q aXRfZmllbGQgKmZpZWxkc1tdID0ge2ZpX2YsIGZpX2l9OworCisgICAgICBnY2Nfaml0X3J2YWx1 ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yCisJKGN0eHQs IDAsCisJIHN0cnVjdF9maV90eXBlLAorCSAyLAorCSBmaWVsZHMsCisJIHZhbHMpOworICAgICAg Z2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoYmxvY2ssIDAsIGxvY2FsLCBjdG9yKTsKKyAg ICB9CisgICAgeworICAgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfZjEgPQorCWdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBmbG9hdF90eXBlLCA1KTsKKyAgICAgIGdj Y19qaXRfcnZhbHVlICpydmFsX2kyID0KKwlnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X2ludCAoY3R4dCwgaW50X3R5cGUsIDYpOworCisgICAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1td ID0geyBydmFsX2YxLCBydmFsX2kyfTsKKyAgICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0g e2ZpX2YsIGZpX2l9OworCisgICAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29u dGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yCisJKGN0eHQsIDAsCisJIHN0cnVjdF9maV90eXBl LAorCSAyLAorCSBmaWVsZHMsCisJIHZhbHMpOworICAgICAgZ2NjX2ppdF9ibG9ja19hZGRfYXNz aWdubWVudCAoYmxvY2ssIDAsIGxvY2FsLCBjdG9yKTsKKyAgICB9CisKKyAgICBnY2Nfaml0X2Js b2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJCQkJICAgMCwKKwkJCQkgICBnY2Nfaml0X2x2 YWx1ZV9hc19ydmFsdWUobG9jYWwpKTsKKyAgfQorICB7IC8qIHN0cnVjdCBmaSBmb28oKSB7IHN0 cnVjdCBmaSBsb2NhbCA9IHsxLCBmbl9pbnRfMygpfTsKKwkJCSByZXR1cm4gbG9jYWw7fQorCisg ICAgICAgVGhlIGN0b3IgaGFzIGEgc2lkZSBlZmZlY3QgKGZ1bmNjYWxsKSAqLworICAgIGdjY19q aXRfZnVuY3Rpb24gKmZuID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0 eHQsCisJCQkJICAgIDAsCisJCQkJICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJ ICAgIHN0cnVjdF9maV90eXBlLAorCQkJCSAgICAiZm5fZmlfMV8zIiwKKwkJCQkgICAgMCwKKwkJ CQkgICAgMCwKKwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmxvY2FsID0gZ2NjX2pp dF9mdW5jdGlvbl9uZXdfbG9jYWwgKGZuLAorCQkJCQkJCTAsCisJCQkJCQkJc3RydWN0X2ZpX3R5 cGUsCisJCQkJCQkJImxvY2FsIik7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0 X2Z1bmN0aW9uX25ld19ibG9jayAoZm4sICJzdGFydCIpOworCisgICAgeworICAgICAgZ2NjX2pp dF9ydmFsdWUgKnJ2YWxfZjEgPQorCWdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50 IChjdHh0LCBmbG9hdF90eXBlLCAxKTsKKyAgICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2kyID0K KwlnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIDAsIGZuX2ludF8zLCAwLCAwKTsKKwor ICAgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHsgcnZhbF9mMSwgcnZhbF9pMn07CisgICAg ICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9mLCBmaV9pfTsKKworICAgICAgZ2NjX2pp dF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3Rvcgor CShjdHh0LCAwLAorCSBzdHJ1Y3RfZmlfdHlwZSwKKwkgMiwKKwkgZmllbGRzLAorCSB2YWxzKTsK KyAgICAgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLCBsb2NhbCwgY3Rv cik7CisgICAgfQorCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAor CQkJCSAgIDAsCisJCQkJICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlKGxvY2FsKSk7CisgIH0K KyAgeyAvKiBzdHJ1Y3QgZmkgZm9vKGZpKSB7IHJldHVybiBmaTt9CisgICAgICAgc3RydWN0IGZp IGJhcigpIHsgcmV0dXJuIGZvbygoc3RydWN0IGZpKXszLCA0fSk7IH0KKyAgICAgKi8KKworICAg IGdjY19qaXRfcGFyYW0gKmZpX3BhcmFtID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcGFy YW0gKGN0eHQsIDAsIHN0cnVjdF9maV90eXBlLCAiZmkiKTsKKworICAgIGdjY19qaXRfZnVuY3Rp b24gKmZuMCA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJ CSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBzdHJ1 Y3RfZmlfdHlwZSwKKwkJCQkgICAgImZuX2ZpX3hfeCIsCisJCQkJICAgIDEsCisJCQkJICAgICZm aV9wYXJhbSwKKwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2swID0gZ2NjX2pp dF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuMCwgInN0YXJ0Iik7CisgICAgZ2NjX2ppdF9ibG9ja19l bmRfd2l0aF9yZXR1cm4gKGJsb2NrMCwKKwkJCQkgICAwLAorCQkJCSAgIGdjY19qaXRfcGFyYW1f YXNfcnZhbHVlICgKKwkJCQkgICAgIGdjY19qaXRfZnVuY3Rpb25fZ2V0X3BhcmFtIChmbjAsIDAp KSk7CisKKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9CisgICAgICBnY2Nfaml0X2NvbnRleHRf bmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9O X0VYUE9SVEVELAorCQkJCSAgICBzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkgICAgImZuX2ZpXzNfNCIs CisJCQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRfYmxvY2sg KmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuLCAic3RhcnQiKTsKKworICAg IGdjY19qaXRfcnZhbHVlICpydmFsX2YxID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUg KnJ2YWxfaTIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBj dHh0LCBpbnRfdHlwZSwgNCk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyBydmFs X2YxLCBydmFsX2kyfTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9mLCBmaV9p fTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1 Y3RfY29uc3RydWN0b3IKKyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBlLAor ICAgICAgIDIsCisgICAgICAgZmllbGRzLAorICAgICAgIHZhbHMpOworCisgICAgZ2NjX2ppdF9y dmFsdWUgKmNhbGwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIDAsIGZuMCwgMSwg JmN0b3IpOworCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAorCQkJ CSAgIDAsCisJCQkJICAgY2FsbCk7CisgIH0KKyAgeyAvKgorICAgICAgIHZvaWQgZm9vKHN0cnVj dCBiYXIgKmIpIHsgKmIgPSAoc3RydWN0IGJhcikgey5hcnIgPSB7MSwyfTsgfQorICAgICAqLwor CisgICAgZ2NjX2ppdF9wYXJhbSAqcGFyYW0gPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19w YXJhbSAoY3R4dCwgMCwKKwkJCQkgZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyIChzdHJ1Y3RfYmFy X3R5cGUpLAorCQkJCSAiYiIpOworCisKKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9CisgICAg ICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAg ICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICB2b2lkX3R5cGUsCisJCQkJICAg ICJmbl9wYmFyXzEyIiwKKwkJCQkgICAgMSwKKwkJCQkgICAgJnBhcmFtLAorCQkJCSAgICAwKTsK KyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChm biwgInN0YXJ0Iik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9pMSA9IGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAxKTsKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9pMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAyKTsKKworICAgIGdjY19qaXRfcnZhbHVl ICphcnJfdmFsc1tdID0geyBydmFsX2kxLCBydmFsX2kyfTsKKworICAgIGdjY19qaXRfcnZhbHVl ICphcnJfY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3IKKyAgICAg IChjdHh0LCAwLAorICAgICAgIGludDUwYXJyX3R5cGUsCisgICAgICAgMiwKKyAgICAgICBhcnJf dmFscyk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqc3RyX2N0b3IgPSBnY2Nfaml0X2NvbnRleHRf bmV3X3N0cnVjdF9jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsCisgICAgICAgMCwKKyAgICAgICBz dHJ1Y3RfYmFyX3R5cGUsCisgICAgICAgMSwKKyAgICAgICAmYmFyX2ZpLAorICAgICAgICZhcnJf Y3Rvcik7CisKKyAgICBnY2Nfaml0X3BhcmFtICpwMCA9IGdjY19qaXRfZnVuY3Rpb25fZ2V0X3Bh cmFtIChmbiwgMCk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmx2MCA9ICBnY2Nfaml0X3BhcmFtX2Fz X2x2YWx1ZSAocDApOworICAgIGdjY19qaXRfbHZhbHVlICpkZXJlZiA9CisgICAgICBnY2Nfaml0 X3J2YWx1ZV9kZXJlZmVyZW5jZSAoZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChsdjApLCAwKTsK KworICAgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLAorCQkJCSAgZGVy ZWYsCisJCQkJICBzdHJfY3Rvcik7CisKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3ZvaWRf cmV0dXJuIChibG9jaywgMCk7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgYmFyIGZvbygpIHsgc3RydWN0 IGJhciBsb2NhbCA9IHt9OworCQkJICByZXR1cm4gbG9jYWw7fQorICAgICAqLworICAgIGdjY19q aXRfZnVuY3Rpb24gKmZuID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0 eHQsCisJCQkJICAgIDAsCisJCQkJICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJ ICAgIHN0cnVjdF9iYXJfdHlwZSwKKwkJCQkgICAgImZuX2Jhcl8wcyIsCisJCQkJICAgIDAsCisJ CQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRfbHZhbHVlICpsb2NhbCA9CisgICAg ICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm4sCisJCQkJICAwLAorCQkJCSAgc3RydWN0 X2Jhcl90eXBlLAorCQkJCSAgImxvY2FsIik7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBn Y2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm4sICJzdGFydCIpOworCisgICAgZ2NjX2ppdF9y dmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcgorCShj dHh0LCAwLAorCSBzdHJ1Y3RfYmFyX3R5cGUsCisJIDAsCisJIDAsCisJIDApOworICAgIGdjY19q aXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLCBsb2NhbCwgY3Rvcik7CisKKyAgICBn Y2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJCQkJICAgMCwKKwkJCQkgICBn Y2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUobG9jYWwpKTsKKyAgfQorICB7IC8qIHN0cnVjdCBiYXIg Zm9vKCkgeyBzdHJ1Y3QgYmFyIGxvY2FsOworCQkJICBsb2NhbC5hcnIgPSAoaW50IFs1MF0pezEs MiwzLDQsNSw2fTsKKwkJCSAgcmV0dXJuIGxvY2FsO30KKyAgICAgKi8KKyAgICBnY2Nfaml0X2Z1 bmN0aW9uICpmbiA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAor CQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBz dHJ1Y3RfYmFyX3R5cGUsCisJCQkJICAgICJmbl9iYXJfMTIzcyIsCisJCQkJICAgIDAsCisJCQkJ ICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRfbHZhbHVlICpsb2NhbCA9CisgICAgICBn Y2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm4sCisJCQkJICAwLAorCQkJCSAgc3RydWN0X2Jh cl90eXBlLAorCQkJCSAgImxvY2FsIik7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nf aml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm4sICJzdGFydCIpOworCisgICAgZ2NjX2ppdF9ydmFs dWUgKnZhbHVlc1s2XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgICAg dmFsdWVzW2ldID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGlu dF90eXBlLCBpICsgMSk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29u dGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3IKKwkoY3R4dCwgMCwKKwkgaW50NTBhcnJfdHlwZSwK KwkgNiwKKwkgdmFsdWVzKTsKKworICAgIGdjY19qaXRfbHZhbHVlICphcnJfbHYgPSBnY2Nfaml0 X2x2YWx1ZV9hY2Nlc3NfZmllbGQgKGxvY2FsLAorCQkJCQkJCSAgMCwKKwkJCQkJCQkgIGJhcl9m aSk7CisgICAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoYmxvY2ssIDAsIGFycl9sdiwg Y3Rvcik7CisKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJCQkJ ICAgMCwKKwkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUobG9jYWwpKTsKKyAgfQorICB7 IC8qIGludFs1MF0gZm9vKCkgeyBpbnQgYXJyWzUwXTsKKwkJICAgICAgIGFyciA9IChpbnQgWzUw XSl7MSwyLDMsNCw1LDZ9OworCQkgICAgICAgcmV0dXJuIGFycjt9CisKKyAgICAgICBOLkI6IE5v dCBhIHR5cG8sIHJldHVybmluZyBhbiBhcnJheS4KKyAgICAgKi8KKyAgICBnY2Nfaml0X2Z1bmN0 aW9uICpmbiA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJ CSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBpbnQ1 MGFycl90eXBlLAorCQkJCSAgICAiZm5faW50NTBhcnJfMTIzcyIsCisJCQkJICAgIDAsCisJCQkJ ICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRfbHZhbHVlICpsb2NhbCA9CisgICAgICBn Y2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm4sCisJCQkJICAwLAorCQkJCSAgaW50NTBhcnJf dHlwZSwKKwkJCQkgICJsb2NhbCIpOworICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2pp dF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuLCAic3RhcnQiKTsKKworICAgIGdjY19qaXRfcnZhbHVl ICp2YWx1ZXNbNl07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICAgIHZh bHVlc1tpXSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRf dHlwZSwgaSArIDEpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yICgKKwkgY3R4dCwKKwkgMCwKKwkgaW50NTBhcnJfdHlw ZSwKKwkgNiwKKwkgdmFsdWVzKTsKKworICAgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQg KGJsb2NrLCAwLCBsb2NhbCwgY3Rvcik7CisKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3Jl dHVybiAoYmxvY2ssCisJCQkJICAgMCwKKwkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUo bG9jYWwpKTsKKyAgfQorfQorCitzdHJ1Y3QgZmkyIHsKKyAgZmxvYXQgZjsKKyAgaW50IGk7Cit9 OworCitzdHJ1Y3QgYmFyMiB7CisgIGZsb2F0IGZmOworICBpbnQgYXJyWzUwXTsKKyAgaW50IGlp OworICBjaGFyIGM7Cit9OworCit1bmlvbiB1YmFyMiB7CisgIGZsb2F0IGZmOworICBpbnQgaWk7 Cit9OworCitzdHJ1Y3QgaW50NTBhcnIgeworICBpbnQgYXJyWzUwXTsKK307CisKK3ZvaWQgX19h dHRyaWJ1dGVfXygob3B0aW1pemUoMCkpKQorc2NyYW1ibGVfc3RhY2sodm9pZCkKKyAgeworICAg IGNoYXIgKnAgPSBhbGxvY2EoMTAwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsr KQorICAgICAgKnArKyA9IDB4RjA7CisgICAgYXNtKCIiKTsgLyogTWFyayBmb3Igc2lkZS1lZmZl Y3QgKi8KKyAgfQorCit2b2lkIF9fYXR0cmlidXRlX18oKG9wdGltaXplKDApKSkKK3NjcmFtYmxl X2FyciAoY2hhciAqYXJyLCBpbnQgbGVuKQoreworICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsg aSsrKQorICAgICphcnIrKyA9IGk7CisgIGFzbSgiIik7IC8qIE1hcmsgZm9yIHNpZGUtZWZmZWN0 ICovCit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19q aXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIENIRUNLX05PTl9OVUxMIChyZXN1bHQpOworCisgIHsK KyAgICBzdHJ1Y3QgZmkyICgqZm4pICh2b2lkKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChy ZXN1bHQsICJmbl9maV8xXzIiKTsKKyAgICBzY3JhbWJsZV9zdGFjayAoKTsKKyAgICBzdHJ1Y3Qg ZmkyIGZpID0gZm4gKCk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLmYsIDEpOworICAgIENIRUNLX1ZB TFVFIChmaS5pLCAyKTsKKyAgfQorICB7CisgICAgc3RydWN0IGZpMiAoKmZuKSAodm9pZCkgPSBn Y2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZm5fZmlfNV82Iik7CisgICAgc3RydWN0 IGZpMiBmaSA9IGZuICgpOworICAgIENIRUNLX1ZBTFVFIChmaS5mLCA1KTsKKyAgICBDSEVDS19W QUxVRSAoZmkuaSwgNik7CisgIH0KKyAgeworICAgIHN0cnVjdCBmaTIgKCpmbikgKHZvaWQpID0g Z2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImZuX2ZpXzFfMyIpOworICAgIHN0cnVj dCBmaTIgZmkgPSBmbiAoKTsKKyAgICBDSEVDS19WQUxVRSAoZmkuZiwgMSk7CisgICAgQ0hFQ0tf VkFMVUUgKGZpLmksIDMpOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmkyICgqZm4pICh2b2lkKSA9 IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJmbl9maV8zXzQiKTsKKyAgICBzdHJ1 Y3QgZmkyIGZpID0gZm4gKCk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLmYsIDMpOworICAgIENIRUNL X1ZBTFVFIChmaS5pLCA0KTsKKyAgfQorICB7CisgICAgc2NyYW1ibGVfc3RhY2soKTsKKyAgICBz dHJ1Y3QgYmFyMiAoKmZuKSAodm9pZCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0 LCAiZm5fYmFyXzBzIik7CisgICAgc3RydWN0IGJhcjIgYmFyID0gZm4gKCk7CisgICAgc3RydWN0 IGJhcjIga2V5ID0ge307CisKKyAgICBDSEVDS19WQUxVRSAoYmFyLmZmLCAwKTsKKyAgICBDSEVD S19WQUxVRSAoYmFyLmlpLCAwKTsKKyAgICBDSEVDS19WQUxVRSAobWVtY21wICgmYmFyLmFyciwg JmtleS5hcnIsIHNpemVvZiAoa2V5LmFycikpLCAwKTsKKyAgfQorICB7CisKKyAgICB2b2lkICgq Zm4pIChzdHJ1Y3QgYmFyMiAqKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJm bl9wYmFyXzEyIik7CisKKyAgICBzdHJ1Y3QgYmFyMiBiYXIgPSAoc3RydWN0IGJhcjIpIHt9Owor CisgICAgc2NyYW1ibGVfYXJyICgoY2hhciopJmJhciwgc2l6ZW9mIGJhcik7CisgICAgc2NyYW1i bGVfc3RhY2soKTsKKworICAgIGZuICgmYmFyKTsKKworICAgIHN0cnVjdCBiYXIyIGtleSA9IHsu YXJyID0gezEsMn19OworICAgIF9fYnVpbHRpbl9jbGVhcl9wYWRkaW5nICgma2V5KTsKKworICAg IENIRUNLX1ZBTFVFIChtZW1jbXAgKCZiYXIsICZrZXksIHNpemVvZiAoa2V5KSksIDApOworICB9 CisgIHsKKyAgICBzY3JhbWJsZV9zdGFjaygpOworICAgIHN0cnVjdCBiYXIyICgqZm4pICh2b2lk KSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJmbl9iYXJfMTIzcyIpOworICAg IHN0cnVjdCBiYXIyIGJhciA9IGZuICgpOworICAgIHN0cnVjdCBiYXIyIGtleSA9IHsuYXJyID0g ezEsMiwzLDQsNSw2fSB9OworCisgICAgQ0hFQ0tfVkFMVUUgKG1lbWNtcCAoJmJhci5hcnIsICZr ZXkuYXJyLCBzaXplb2YgKGtleS5hcnIpKSwgMCk7CisgIH0KKyAgeworICAgIHNjcmFtYmxlX3N0 YWNrICgpOworICAgIC8qIFRoaXMgaXMgYWJpdCBzaGFkeS4gTGV0cyBqdXN0IHByZXRlbmQgdGhh dCBhcnJheSByZXR1cm5zIMOgIGxhIEZvcnRyYW4KKyAgICAgICBpcyB0aGUgc2FtZSB0aGluZyBh cyByZXR1cm5pbmcgYSBzdHJ1Y3Qgd2l0aCBhbiBhcnJheSBpbiBpdCBpbiBDLiAqLworICAgIHN0 cnVjdCBpbnQ1MGFyciAoKmZuKSAodm9pZCkgPQorICAgICAgZ2NjX2ppdF9yZXN1bHRfZ2V0X2Nv ZGUgKHJlc3VsdCwgImZuX2ludDUwYXJyXzEyM3MiKTsKKyAgICBzdHJ1Y3QgaW50NTBhcnIgYW5z ID0gZm4gKCk7CisgICAgaW50IGtleVs1MF0gPSB7MSwyLDMsNCw1LDZ9OworCisgICAgQ0hFQ0tf VkFMVUUgKG1lbWNtcCAoYW5zLmFyciwga2V5LCBzaXplb2YgKGtleSkpLCAwKTsKKyAgfQorfQot LSAKMi4zMC4yCgo= --_002_1d9576bd20cb472da2fe014af22e9551kthse_--