From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 108711 invoked by alias); 5 Mar 2015 10:16:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 107985 invoked by uid 89); 5 Mar 2015 10:16:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=1.5 required=5.0 tests=AWL,BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,KAM_FROM_URIBL_PCCC,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-pd0-f180.google.com Received: from mail-pd0-f180.google.com (HELO mail-pd0-f180.google.com) (209.85.192.180) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 05 Mar 2015 10:16:12 +0000 Received: by pdbfl12 with SMTP id fl12so34039651pdb.9 for ; Thu, 05 Mar 2015 02:16:10 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.70.47.70 with SMTP id b6mr14440105pdn.136.1425550570580; Thu, 05 Mar 2015 02:16:10 -0800 (PST) Received: by 10.66.101.9 with HTTP; Thu, 5 Mar 2015 02:16:10 -0800 (PST) Date: Thu, 05 Mar 2015 10:16:00 -0000 Message-ID: Subject: [PATCH] [AVX512F] Add scatter support for vectorizer From: Petr Murzin To: "gcc-patches@gcc.gnu.org" , Uros Bizjak Cc: Kirill Yukhin Content-Type: multipart/mixed; boundary=089e0158c9665ee338051087db1f X-SW-Source: 2015-03/txt/msg00276.txt.bz2 --089e0158c9665ee338051087db1f Content-Type: text/plain; charset=UTF-8 Content-length: 2296 Hello, This patch adds scatter support for vectorizer (for AVX512F instructions). Please have a look. Is it ok for stage 1? 2015-03-05 Andrey Turetskiy * config/i386/i386-builtin-types.def (VOID_PFLOAT_HI_V8DI_V16SF_INT): New. (VOID_PDOUBLE_QI_V16SI_V8DF_INT): Ditto. (VOID_PINT_HI_V8DI_V16SI_INT): Ditto. (VOID_PLONGLONG_QI_V16SI_V8DI_INT): Ditto. * config/i386/i386.c (ix86_builtins): Add IX86_BUILTIN_SCATTERALTSIV8DF, IX86_BUILTIN_SCATTERALTDIV16SF, IX86_BUILTIN_SCATTERALTSIV8DI, IX86_BUILTIN_SCATTERALTDIV16SI. (ix86_init_mmx_sse_builtins): Define __builtin_ia32_scatteraltsiv8df, __builtin_ia32_scatteraltdiv8sf, __builtin_ia32_scatteraltsiv8di, __builtin_ia32_scatteraltdiv8si. (ix86_expand_builtin): Handle IX86_BUILTIN_SCATTERALTSIV8DF, IX86_BUILTIN_SCATTERALTDIV16SF, IX86_BUILTIN_SCATTERALTSIV8DI, IX86_BUILTIN_SCATTERALTDIV16SI. (ix86_vectorize_builtin_scatter): New. (ix86_initialize_bounds): (TARGET_VECTORIZE_BUILTIN_SCATTER): Ditto. * doc/tm.texi.in (TARGET_VECTORIZE_BUILTIN_SCATTER): Ditto. * doc/tm.texi: Regenerate. * target.def: Add scatter builtin. * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Add new checkings for STMT_VINFO_SCATTER_P. (vect_check_gather): Rename to ... (vect_check_gather_scatter): this and enhance number of arguments. (vect_analyze_data_ref_access): Update comment and returnable values. (vect_analyze_data_refs): Add maybe_scatter and new checking for it accordingly. * tree-vectorizer.h (STMT_VINFO_SCATTER_P(S)): Define. (vect_check_gather): Rename to ... (vect_check_gather_scatter): this. * tree-vect-stmts.c: Ditto. (vectorizable_store): Add checkings for STMT_VINFO_SCATTER_P. 2015-03-05 Andrey Turetskiy testsuite/ * gcc.target/i386/avx512f-scatter-1.c: New. * gcc.target/i386/avx512f-scatter-2.c: Ditto. * gcc.target/i386/avx512f-scatter-3.c: Ditto. * gcc.target/i386/avx512f-scatter-4.c: Ditto. * gcc.target/i386/avx512f-scatter-5.c: Ditto. Thanks, Petr --089e0158c9665ee338051087db1f Content-Type: application/octet-stream; name=scatter_patch Content-Disposition: attachment; filename=scatter_patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_i6vzxv6h0 Content-length: 52216 Y29tbWl0IGM2NTgzMzk2MjUyMTg1YzZmZGViYTI0ODdjNTg5MjUwNWY0MjI3 ZTQKQXV0aG9yOiBBbmRyZXkgVHVyZXRza2l5IDxhbmRyZXkudHVyZXRza2l5 QGludGVsLmNvbT4KRGF0ZTogICBUdWUgT2N0IDggMTg6Mjc6NTYgMjAxMyAr MDQwMAoKICAgIFtBVlg1MTJGXSBBZGQgc2NhdHRlciBzdXBwb3J0IGZvciB2 ZWN0b3JpemVyCgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYt YnVpbHRpbi10eXBlcy5kZWYgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni1idWls dGluLXR5cGVzLmRlZgppbmRleCA4NjRkMGVhLi45MmE4NThiIDEwMDY0NAot LS0gYS9nY2MvY29uZmlnL2kzODYvaTM4Ni1idWlsdGluLXR5cGVzLmRlZgor KysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni1idWlsdGluLXR5cGVzLmRlZgpA QCAtMTE3MSw2ICsxMTcxLDEwIEBAIERFRl9GVU5DVElPTl9UWVBFIChWT0lE LCBQSU5ULCBRSSwgVjhESSwgVjhTSSwgSU5UKQogREVGX0ZVTkNUSU9OX1RZ UEUgKFZPSUQsIFBJTlQsIFFJLCBWNERJLCBWNFNJLCBJTlQpCiBERUZfRlVO Q1RJT05fVFlQRSAoVk9JRCwgUElOVCwgUUksIFYyREksIFY0U0ksIElOVCkK IERFRl9GVU5DVElPTl9UWVBFIChWT0lELCBQTE9OR0xPTkcsIFFJLCBWOERJ LCBWOERJLCBJTlQpCitERUZfRlVOQ1RJT05fVFlQRSAoVk9JRCwgUEZMT0FU LCBISSwgVjhESSwgVjE2U0YsIElOVCkKK0RFRl9GVU5DVElPTl9UWVBFIChW T0lELCBQRE9VQkxFLCBRSSwgVjE2U0ksIFY4REYsIElOVCkKK0RFRl9GVU5D VElPTl9UWVBFIChWT0lELCBQSU5ULCBISSwgVjhESSwgVjE2U0ksIElOVCkK K0RFRl9GVU5DVElPTl9UWVBFIChWT0lELCBQTE9OR0xPTkcsIFFJLCBWMTZT SSwgVjhESSwgSU5UKQogCiBERUZfRlVOQ1RJT05fVFlQRSAoVk9JRCwgUUks IFY4U0ksIFBDSU5UNjQsIElOVCwgSU5UKQogREVGX0ZVTkNUSU9OX1RZUEUg KFZPSUQsIFBMT05HTE9ORywgUUksIFY0REksIFY0REksIElOVCkKZGlmZiAt LWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmMgYi9nY2MvY29uZmlnL2kz ODYvaTM4Ni5jCmluZGV4IGFiOGYwM2EuLjVkOTNmMjIgMTAwNjQ0Ci0tLSBh L2djYy9jb25maWcvaTM4Ni9pMzg2LmMKKysrIGIvZ2NjL2NvbmZpZy9pMzg2 L2kzODYuYwpAQCAtMzAyMjAsNiArMzAyMjAsMTAgQEAgZW51bSBpeDg2X2J1 aWx0aW5zCiAgIElYODZfQlVJTFRJTl9HQVRIRVIzU0lWMTZTSSwKICAgSVg4 Nl9CVUlMVElOX0dBVEhFUjNTSVY4REYsCiAgIElYODZfQlVJTFRJTl9HQVRI RVIzU0lWOERJLAorICBJWDg2X0JVSUxUSU5fU0NBVFRFUkFMVFNJVjhERiwK KyAgSVg4Nl9CVUlMVElOX1NDQVRURVJBTFRESVYxNlNGLAorICBJWDg2X0JV SUxUSU5fU0NBVFRFUkFMVFNJVjhESSwKKyAgSVg4Nl9CVUlMVElOX1NDQVRU RVJBTFRESVYxNlNJLAogICBJWDg2X0JVSUxUSU5fU0NBVFRFUkRJVjE2U0Ys CiAgIElYODZfQlVJTFRJTl9TQ0FUVEVSRElWMTZTSSwKICAgSVg4Nl9CVUlM VElOX1NDQVRURVJESVY4REYsCkBAIC0zNDAyMSw2ICszNDAyNSwyMSBAQCBp eDg2X2luaXRfbW14X3NzZV9idWlsdGlucyAodm9pZCkKICAgZGVmX2J1aWx0 aW4gKE9QVElPTl9NQVNLX0lTQV9BVlg1MTJWTCwgIl9fYnVpbHRpbl9pYTMy X3NjYXR0ZXJkaXYyZGkiLAogCSAgICAgICBWT0lEX0ZUWVBFX1BMT05HTE9O R19RSV9WMkRJX1YyRElfSU5ULAogCSAgICAgICBJWDg2X0JVSUxUSU5fU0NB VFRFUkRJVjJESSk7CisgIGRlZl9idWlsdGluIChPUFRJT05fTUFTS19JU0Ff QVZYNTEyRiwgIl9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJhbHRzaXY4ZGYgIiwK KwkgICAgICAgVk9JRF9GVFlQRV9QRE9VQkxFX1FJX1YxNlNJX1Y4REZfSU5U LAorCSAgICAgICBJWDg2X0JVSUxUSU5fU0NBVFRFUkFMVFNJVjhERik7CisK KyAgZGVmX2J1aWx0aW4gKE9QVElPTl9NQVNLX0lTQV9BVlg1MTJGLCAiX19i dWlsdGluX2lhMzJfc2NhdHRlcmFsdGRpdjhzZiAiLAorCSAgICAgICBWT0lE X0ZUWVBFX1BGTE9BVF9ISV9WOERJX1YxNlNGX0lOVCwKKwkgICAgICAgSVg4 Nl9CVUlMVElOX1NDQVRURVJBTFRESVYxNlNGKTsKKworICBkZWZfYnVpbHRp biAoT1BUSU9OX01BU0tfSVNBX0FWWDUxMkYsICJfX2J1aWx0aW5faWEzMl9z Y2F0dGVyYWx0c2l2OGRpICIsCisJICAgICAgIFZPSURfRlRZUEVfUExPTkdM T05HX1FJX1YxNlNJX1Y4RElfSU5ULAorCSAgICAgICBJWDg2X0JVSUxUSU5f U0NBVFRFUkFMVFNJVjhESSk7CisKKyAgZGVmX2J1aWx0aW4gKE9QVElPTl9N QVNLX0lTQV9BVlg1MTJGLCAiX19idWlsdGluX2lhMzJfc2NhdHRlcmFsdGRp djhzaSAiLAorCSAgICAgICBWT0lEX0ZUWVBFX1BJTlRfSElfVjhESV9WMTZT SV9JTlQsCisJICAgICAgIElYODZfQlVJTFRJTl9TQ0FUVEVSQUxURElWMTZT SSk7CiAKICAgLyogQVZYNTEyUEYgKi8KICAgZGVmX2J1aWx0aW4gKE9QVElP Tl9NQVNLX0lTQV9BVlg1MTJQRiwgIl9fYnVpbHRpbl9pYTMyX2dhdGhlcnBm ZHBkIiwKQEAgLTM5Njk0LDYgKzM5NzEzLDE4IEBAIGFkZGNhcnJ5eDoKICAg ICBjYXNlIElYODZfQlVJTFRJTl9HQVRIRVJQRkRQRDoKICAgICAgIGljb2Rl ID0gQ09ERV9GT1JfYXZ4NTEycGZfZ2F0aGVycGZ2OHNpZGY7CiAgICAgICBn b3RvIHZlY19wcmVmZXRjaF9nZW47CisgICAgY2FzZSBJWDg2X0JVSUxUSU5f U0NBVFRFUkFMVFNJVjhERjoKKyAgICAgIGljb2RlID0gQ09ERV9GT1JfYXZ4 NTEyZl9zY2F0dGVyc2l2OGRmOworICAgICAgZ290byBzY2F0dGVyX2dlbjsK KyAgICBjYXNlIElYODZfQlVJTFRJTl9TQ0FUVEVSQUxURElWMTZTRjoKKyAg ICAgIGljb2RlID0gQ09ERV9GT1JfYXZ4NTEyZl9zY2F0dGVyZGl2MTZzZjsK KyAgICAgIGdvdG8gc2NhdHRlcl9nZW47CisgICAgY2FzZSBJWDg2X0JVSUxU SU5fU0NBVFRFUkFMVFNJVjhESToKKyAgICAgIGljb2RlID0gQ09ERV9GT1Jf YXZ4NTEyZl9zY2F0dGVyc2l2OGRpOworICAgICAgZ290byBzY2F0dGVyX2dl bjsKKyAgICBjYXNlIElYODZfQlVJTFRJTl9TQ0FUVEVSQUxURElWMTZTSToK KyAgICAgIGljb2RlID0gQ09ERV9GT1JfYXZ4NTEyZl9zY2F0dGVyZGl2MTZz aTsKKyAgICAgIGdvdG8gc2NhdHRlcl9nZW47CiAgICAgY2FzZSBJWDg2X0JV SUxUSU5fR0FUSEVSUEZEUFM6CiAgICAgICBpY29kZSA9IENPREVfRk9SX2F2 eDUxMnBmX2dhdGhlcnBmdjE2c2lzZjsKICAgICAgIGdvdG8gdmVjX3ByZWZl dGNoX2dlbjsKQEAgLTM5OTU0LDYgKzM5OTg1LDM2IEBAIGFkZGNhcnJ5eDoK ICAgICAgIG1vZGUzID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzNdLm1v ZGU7CiAgICAgICBtb2RlNCA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFs0 XS5tb2RlOwogCisgICAgICAvKiBTY2F0dGVyIGluc3RydWN0aW9uIHN0b3Jl cyBvcGVyYW5kIG9wMyB0byBtZW1vcnkgd2l0aAorCSBpbmRpY2VzIGZyb20g b3AyIGFuZCBzY2FsZSBmcm9tIG9wNCB1bmRlciB3cml0ZW1hc2sgb3AxLgor CSBJZiBpbmRleCBvcGVyYW5kIG9wMiBoYXMgbW9yZSBlbGVtZW50cyB0aGVu IHNvdXJjZSBvcGVyYW5kCisJIG9wMyBvbmUgbmVlZCB0byB1c2Ugb25seSBp dHMgbG93IGhhbGYuIEFuZCB2aWNlIHZlcnNhLiAgKi8KKyAgICAgIHN3aXRj aCAoZmNvZGUpCisJeworCWNhc2UgSVg4Nl9CVUlMVElOX1NDQVRURVJBTFRT SVY4REY6CisJY2FzZSBJWDg2X0JVSUxUSU5fU0NBVFRFUkFMVFNJVjhESToK KwkgIGhhbGYgPSBnZW5fcmVnX3J0eCAoVjhTSW1vZGUpOworCSAgaWYgKCFu b25pbW1lZGlhdGVfb3BlcmFuZCAob3AyLCBWMTZTSW1vZGUpKQorCSAgICBv cDIgPSBjb3B5X3RvX21vZGVfcmVnIChWMTZTSW1vZGUsIG9wMik7CisJICBl bWl0X2luc24gKGdlbl92ZWNfZXh0cmFjdF9sb192MTZzaSAoaGFsZiwgb3Ay KSk7CisJICBvcDIgPSBoYWxmOworCSAgYnJlYWs7CisJY2FzZSBJWDg2X0JV SUxUSU5fU0NBVFRFUkFMVERJVjE2U0Y6CisJY2FzZSBJWDg2X0JVSUxUSU5f U0NBVFRFUkFMVERJVjE2U0k6CisJICBoYWxmID0gZ2VuX3JlZ19ydHggKG1v ZGUzKTsKKwkgIGlmIChtb2RlMyA9PSBWOFNGbW9kZSkKKwkgICAgZ2VuID0g Z2VuX3ZlY19leHRyYWN0X2xvX3YxNnNmOworCSAgZWxzZQorCSAgICBnZW4g PSBnZW5fdmVjX2V4dHJhY3RfbG9fdjE2c2k7CisJICBpZiAoIW5vbmltbWVk aWF0ZV9vcGVyYW5kIChvcDMsIEdFVF9NT0RFIChvcDMpKSkKKwkgICAgb3Az ID0gY29weV90b19tb2RlX3JlZyAoR0VUX01PREUgKG9wMyksIG9wMyk7CisJ ICBlbWl0X2luc24gKGdlbiAoaGFsZiwgb3AzKSk7CisJICBvcDMgPSBoYWxm OworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGJyZWFrOworCX0KKwogICAg ICAgLyogRm9yY2UgbWVtb3J5IG9wZXJhbmQgb25seSB3aXRoIGJhc2UgcmVn aXN0ZXIgaGVyZS4gIEJ1dCB3ZQogCSBkb24ndCB3YW50IHRvIGRvIGl0IG9u IG1lbW9yeSBvcGVyYW5kIGZvciBvdGhlciBidWlsdGluCiAJIGZ1bmN0aW9u cy4gICovCkBAIC00MTAyMyw2ICs0MTA4NCw2MiBAQCBpeDg2X3ZlY3Rvcml6 ZV9idWlsdGluX2dhdGhlciAoY29uc3RfdHJlZSBtZW1fdmVjdHlwZSwKICAg cmV0dXJuIGl4ODZfZ2V0X2J1aWx0aW4gKGNvZGUpOwogfQogCisvKiBSZXR1 cm5zIGEgZGVjbCBvZiBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBzY2F0 dGVyIHN0b3JlIHdpdGgKKyAgIHJlZ2lzdGVyIHR5cGUgVkVDVFlQRSBhbmQg aW5kZXggdHlwZSBJTkRFWF9UWVBFIGFuZCBTQ0FMRS4KKyAgIFJldHVybiBO VUxMX1RSRUUgaWYgaXQgaXMgbm90IGF2YWlsYWJsZS4gICovCisKK3N0YXRp YyB0cmVlCitpeDg2X3ZlY3Rvcml6ZV9idWlsdGluX3NjYXR0ZXIgKGNvbnN0 X3RyZWUgdmVjdHlwZSwKKwkJCQljb25zdF90cmVlIGluZGV4X3R5cGUsIGlu dCBzY2FsZSkKK3sKKyAgYm9vbCBzaTsKKyAgZW51bSBpeDg2X2J1aWx0aW5z IGNvZGU7CisKKyAgaWYgKCEgVEFSR0VUX0FWWDUxMkYpCisgICAgcmV0dXJu IE5VTExfVFJFRTsKKworICBpZiAoKFRSRUVfQ09ERSAoaW5kZXhfdHlwZSkg IT0gSU5URUdFUl9UWVBFCisgICAgICAgJiYgIVBPSU5URVJfVFlQRV9QIChp bmRleF90eXBlKSkKKyAgICAgIHx8IChUWVBFX01PREUgKGluZGV4X3R5cGUp ICE9IFNJbW9kZQorCSAgJiYgVFlQRV9NT0RFIChpbmRleF90eXBlKSAhPSBE SW1vZGUpKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisKKyAgaWYgKFRZUEVf UFJFQ0lTSU9OIChpbmRleF90eXBlKSA+IFBPSU5URVJfU0laRSkKKyAgICBy ZXR1cm4gTlVMTF9UUkVFOworCisgIC8qIHYqc2NhdHRlciogaW5zbiBzaWdu IGV4dGVuZHMgaW5kZXggdG8gcG9pbnRlciBtb2RlLiAgKi8KKyAgaWYgKFRZ UEVfUFJFQ0lTSU9OIChpbmRleF90eXBlKSA8IFBPSU5URVJfU0laRQorICAg ICAgJiYgVFlQRV9VTlNJR05FRCAoaW5kZXhfdHlwZSkpCisgICAgcmV0dXJu IE5VTExfVFJFRTsKKworICAvKiBTY2FsZSBjYW4gYmUgMSwgMiwgNCBvciA4 LiAgKi8KKyAgaWYgKHNjYWxlIDw9IDAKKyAgICAgIHx8IHNjYWxlID4gOAor ICAgICAgfHwgKHNjYWxlICYgKHNjYWxlIC0gMSkpICE9IDApCisgICAgcmV0 dXJuIE5VTExfVFJFRTsKKworICBzaSA9IFRZUEVfTU9ERSAoaW5kZXhfdHlw ZSkgPT0gU0ltb2RlOworICBzd2l0Y2ggKFRZUEVfTU9ERSAodmVjdHlwZSkp CisgICAgeworICAgIGNhc2UgVjhERm1vZGU6CisgICAgICBjb2RlID0gc2kg PyBJWDg2X0JVSUxUSU5fU0NBVFRFUkFMVFNJVjhERiA6IElYODZfQlVJTFRJ Tl9TQ0FUVEVSRElWOERGOworICAgICAgYnJlYWs7CisgICAgY2FzZSBWOERJ bW9kZToKKyAgICAgIGNvZGUgPSBzaSA/IElYODZfQlVJTFRJTl9TQ0FUVEVS QUxUU0lWOERJIDogSVg4Nl9CVUlMVElOX1NDQVRURVJESVY4REk7CisgICAg ICBicmVhazsKKyAgICBjYXNlIFYxNlNGbW9kZToKKyAgICAgIGNvZGUgPSBz aSA/IElYODZfQlVJTFRJTl9TQ0FUVEVSU0lWMTZTRiA6IElYODZfQlVJTFRJ Tl9TQ0FUVEVSQUxURElWMTZTRjsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug VjE2U0ltb2RlOgorICAgICAgY29kZSA9IHNpID8gSVg4Nl9CVUlMVElOX1ND QVRURVJTSVYxNlNJIDogSVg4Nl9CVUlMVElOX1NDQVRURVJBTFRESVYxNlNJ OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBO VUxMX1RSRUU7CisgICAgfQorCisgIHJldHVybiBpeDg2X2J1aWx0aW5zW2Nv ZGVdOworfQorCiAvKiBSZXR1cm5zIGEgY29kZSBmb3IgYSB0YXJnZXQtc3Bl Y2lmaWMgYnVpbHRpbiB0aGF0IGltcGxlbWVudHMKICAgIHJlY2lwcm9jYWwg b2YgdGhlIGZ1bmN0aW9uLCBvciBOVUxMX1RSRUUgaWYgbm90IGF2YWlsYWJs ZS4gICovCiAKQEAgLTUxNzg1LDYgKzUxOTAyLDkgQEAgaXg4Nl9pbml0aWFs aXplX2JvdW5kcyAodHJlZSB2YXIsIHRyZWUgbGIsIHRyZWUgdWIsIHRyZWUg KnN0bXRzKQogI3VuZGVmIFRBUkdFVF9WRUNUT1JJWkVfQlVJTFRJTl9HQVRI RVIKICNkZWZpbmUgVEFSR0VUX1ZFQ1RPUklaRV9CVUlMVElOX0dBVEhFUiBp eDg2X3ZlY3Rvcml6ZV9idWlsdGluX2dhdGhlcgogCisjdW5kZWYgVEFSR0VU X1ZFQ1RPUklaRV9CVUlMVElOX1NDQVRURVIKKyNkZWZpbmUgVEFSR0VUX1ZF Q1RPUklaRV9CVUlMVElOX1NDQVRURVIgaXg4Nl92ZWN0b3JpemVfYnVpbHRp bl9zY2F0dGVyCisKICN1bmRlZiBUQVJHRVRfQlVJTFRJTl9SRUNJUFJPQ0FM CiAjZGVmaW5lIFRBUkdFVF9CVUlMVElOX1JFQ0lQUk9DQUwgaXg4Nl9idWls dGluX3JlY2lwcm9jYWwKIApkaWZmIC0tZ2l0IGEvZ2NjL2RvYy90bS50ZXhp IGIvZ2NjL2RvYy90bS50ZXhpCmluZGV4IDZjNWJmYWIuLjQxYTY4NWIgMTAw NjQ0Ci0tLSBhL2djYy9kb2MvdG0udGV4aQorKysgYi9nY2MvZG9jL3RtLnRl eGkKQEAgLTU3MzYsNiArNTczNiwxMyBAQCBpbiB2ZWN0b3JpemVkIGxvb3Bz IGluIGN1cnJlbnQgZnVuY3Rpb24sIG9yIG5vbi1uZWdhdGl2ZSBudW1iZXIg aWYgaXQgaXMKIHVzYWJsZS4gIEluIHRoYXQgY2FzZSwgdGhlIHNtYWxsZXIg dGhlIG51bWJlciBpcywgdGhlIG1vcmUgZGVzaXJhYmxlIGl0IGlzCiB0byB1 c2UgaXQuCiBAZW5kIGRlZnR5cGVmbgorQGRlZnR5cGVmbiB7VGFyZ2V0IEhv b2t9IHRyZWUgVEFSR0VUX1ZFQ1RPUklaRV9CVUlMVElOX1NDQVRURVIgKGNv bnN0X3RyZWUgQHZhcnt2ZWN0eXBlfSwgY29uc3RfdHJlZSBAdmFye2luZGV4 X3R5cGV9LCBpbnQgQHZhcntzY2FsZX0pCitUYXJnZXQgYnVpbHRpbiB0aGF0 IGltcGxlbWVudHMgdmVjdG9yIHNjYXR0ZXIgb3BlcmF0aW9uLiAgQHZhcnt2 ZWN0eXBlfQoraXMgdGhlIHZlY3RvciB0eXBlIG9mIHRoZSBzdG9yZSBhbmQg QHZhcntpbmRleF90eXBlfSBpcyBzY2FsYXIgdHlwZSBvZgordGhlIGluZGV4 LCBzY2FsZWQgYnkgQHZhcntzY2FsZX0uCitUaGUgZGVmYXVsdCBpcyBAY29k ZXtOVUxMX1RSRUV9IHdoaWNoIG1lYW5zIHRvIG5vdCB2ZWN0b3JpemUgc2Nh dHRlcgorc3RvcmVzLgorQGVuZCBkZWZ0eXBlZm4KIAogQG5vZGUgQW5jaG9y ZWQgQWRkcmVzc2VzCiBAc2VjdGlvbiBBbmNob3JlZCBBZGRyZXNzZXMKZGlm ZiAtLWdpdCBhL2djYy9kb2MvdG0udGV4aS5pbiBiL2djYy9kb2MvdG0udGV4 aS5pbgppbmRleCA4ZDZkZmJjLi4xMWZlMmMyIDEwMDY0NAotLS0gYS9nY2Mv ZG9jL3RtLnRleGkuaW4KKysrIGIvZ2NjL2RvYy90bS50ZXhpLmluCkBAIC00 MjQ2LDYgKzQyNDYsMTMgQEAgYWRkcmVzczsgIGJ1dCBvZnRlbiBhIG1hY2hp bmUtZGVwZW5kZW50IHN0cmF0ZWd5IGNhbiBnZW5lcmF0ZSBiZXR0ZXIgY29k ZS4KIEBob29rIFRBUkdFVF9TSU1EX0NMT05FX0FESlVTVAogCiBAaG9vayBU QVJHRVRfU0lNRF9DTE9ORV9VU0FCTEUKK0Bob29rIFRBUkdFVF9WRUNUT1JJ WkVfQlVJTFRJTl9TQ0FUVEVSCitUYXJnZXQgYnVpbHRpbiB0aGF0IGltcGxl bWVudHMgdmVjdG9yIHNjYXR0ZXIgb3BlcmF0aW9uLiAgQHZhcnt2ZWN0eXBl fQoraXMgdGhlIHZlY3RvciB0eXBlIG9mIHRoZSBzdG9yZSBhbmQgQHZhcntp bmRleF90eXBlfSBpcyBzY2FsYXIgdHlwZSBvZgordGhlIGluZGV4LCBzY2Fs ZWQgYnkgQHZhcntzY2FsZX0uCitUaGUgZGVmYXVsdCBpcyBAY29kZXtOVUxM X1RSRUV9IHdoaWNoIG1lYW5zIHRvIG5vdCB2ZWN0b3JpemUgc2NhdHRlcgor c3RvcmVzLgorQGVuZCBkZWZ0eXBlZm4KIAogQG5vZGUgQW5jaG9yZWQgQWRk cmVzc2VzCiBAc2VjdGlvbiBBbmNob3JlZCBBZGRyZXNzZXMKZGlmZiAtLWdp dCBhL2djYy90YXJnZXQuZGVmIGIvZ2NjL3RhcmdldC5kZWYKaW5kZXggYTAw MTgxYS4uYjJjNzBlYyAxMDA2NDQKLS0tIGEvZ2NjL3RhcmdldC5kZWYKKysr IGIvZ2NjL3RhcmdldC5kZWYKQEAgLTE4MDEsNiArMTgwMSwxNCBAQCBsb2Fk cy4iLAogIChjb25zdF90cmVlIG1lbV92ZWN0eXBlLCBjb25zdF90cmVlIGlu ZGV4X3R5cGUsIGludCBzY2FsZSksCiAgTlVMTCkKIAorLyogVGFyZ2V0IGJ1 aWx0aW4gdGhhdCBpbXBsZW1lbnRzIHZlY3RvciBzY2F0dGVyIG9wZXJhdGlv bi4gICovCitERUZIT09LCisoYnVpbHRpbl9zY2F0dGVyLAorICIiLAorIHRy ZWUsCisgKGNvbnN0X3RyZWUgdmVjdHlwZSwgY29uc3RfdHJlZSBpbmRleF90 eXBlLCBpbnQgc2NhbGUpLAorIE5VTEwpCisKIC8qIFRhcmdldCBmdW5jdGlv biB0byBpbml0aWFsaXplIHRoZSBjb3N0IG1vZGVsIGZvciBhIGxvb3Agb3Ig YmxvY2suICAqLwogREVGSE9PSwogKGluaXRfY29zdCwKZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtc2NhdHRl ci0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJm LXNjYXR0ZXItMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjc2MzE4NDkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLXNjYXR0ZXItMS5jCkBAIC0wLDAg KzEsMjE2IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCBhdng1MTJmIH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLU8zIC1tYXZ4NTEyZiAtREFWWDUxMkYiIH0gKi8KKworI2luY2x1 ZGUgImF2eDUxMmYtY2hlY2suaCIKKworI2RlZmluZSBOIDEwMjQKK2Zsb2F0 IHZmMVtOXSwgdmYyWzIqTisxNl07Citkb3VibGUgdmQxW05dLCB2ZDJbMipO KzE2XTsKK2ludCB2aTFbTl0sIHZpMlsyKk4rMTZdLCBrW05dOworbG9uZyB2 bDFbTl0sIHZsMlsyKk4rMTZdLCBsW05dOworCitfX2F0dHJpYnV0ZV9fKChu b2lubGluZSwgbm9jbG9uZSkpIHZvaWQKK2YxICh2b2lkKQoreworICBpbnQg aTsKKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB2ZjJba1tpXV0g PSB2ZjFbaV07Cit9CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Ns b25lKSkgdm9pZAorZjIgKHZvaWQpCit7CisgIGludCBpOworICBmb3IgKGkg PSAwOyBpIDwgTjsgaSsrKQorICAgIHZpMltrW2ldXSA9IHZpMVtpXTsKK30K KworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vY2xvbmUpKSB2b2lkCitm MyAoaW50IHgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgTjsg aSsrKQorICAgIHZmMltrW2ldICsgeF0gPSB2ZjFbaV07Cit9CisKK19fYXR0 cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkgdm9pZAorZjQgKGludCB4 KQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAg ICB2aTJba1tpXSArIHhdID0gdmkxW2ldOworfQorCitfX2F0dHJpYnV0ZV9f KChub2lubGluZSwgbm9jbG9uZSkpIHZvaWQKK2Y1ICh2b2lkKQoreworICBp bnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB2ZDJba1tp XV0gPSB2ZDFbaV07Cit9CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBu b2Nsb25lKSkgdm9pZAorZjYgKHZvaWQpCit7CisgIGludCBpOworICBmb3Ig KGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHZsMltrW2ldXSA9IHZsMVtpXTsK K30KKworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vY2xvbmUpKSB2b2lk CitmNyAoaW50IHgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwg TjsgaSsrKQorICAgIHZkMltrW2ldICsgeF0gPSB2ZDFbaV07Cit9CisKK19f YXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkgdm9pZAorZjggKGlu dCB4KQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykK KyAgICB2bDJba1tpXSArIHhdID0gdmwxW2ldOworfQorCitfX2F0dHJpYnV0 ZV9fKChub2lubGluZSwgbm9jbG9uZSkpIHZvaWQKK2Y5ICh2b2lkKQorewor ICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB2ZjJb bFtpXV0gPSB2ZjFbaV07Cit9CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5l LCBub2Nsb25lKSkgdm9pZAorZjEwICh2b2lkKQoreworICBpbnQgaTsKKyAg Zm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB2aTJbbFtpXV0gPSB2aTFb aV07Cit9CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkg dm9pZAorZjExIChsb25nIHgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAw OyBpIDwgTjsgaSsrKQorICAgIHZmMltsW2ldICsgeF0gPSB2ZjFbaV07Cit9 CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkgdm9pZAor ZjEyIChsb25nIHgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwg TjsgaSsrKQorICAgIHZpMltsW2ldICsgeF0gPSB2aTFbaV07Cit9CisKK19f YXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkgdm9pZAorZjEzICh2 b2lkKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykK KyAgICB2ZDJbbFtpXV0gPSB2ZDFbaV07Cit9CisKK19fYXR0cmlidXRlX18o KG5vaW5saW5lLCBub2Nsb25lKSkgdm9pZAorZjE0ICh2b2lkKQoreworICBp bnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB2bDJbbFtp XV0gPSB2bDFbaV07Cit9CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBu b2Nsb25lKSkgdm9pZAorZjE1IChsb25nIHgpCit7CisgIGludCBpOworICBm b3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHZkMltsW2ldICsgeF0gPSB2 ZDFbaV07Cit9CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25l KSkgdm9pZAorZjE2IChsb25nIHgpCit7CisgIGludCBpOworICBmb3IgKGkg PSAwOyBpIDwgTjsgaSsrKQorICAgIHZsMltsW2ldICsgeF0gPSB2bDFbaV07 Cit9CisKK3N0YXRpYyB2b2lkCithdng1MTJmX3Rlc3QgKHZvaWQpCit7Cisg IGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgewor ICAgICAgYXNtICgiIik7CisgICAgICB2ZjFbaV0gPSAxNy4wZiArIGk7Cisg ICAgICB2ZDFbaV0gPSAxOS4wICsgaTsKKyAgICAgIHZpMVtpXSA9IDIxICsg aTsKKyAgICAgIHZsMVtpXSA9IDIzTCArIGk7CisgICAgfQorICBmb3IgKGkg PSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgIGFzbSAoIiIpOworICAg ICAga1tpXSA9IChpICUgMikgPyAoTiAvIDIgKyBpKSA6IChOIC8gMiAtIGkg LyAyKTsKKyAgICAgIGxbaV0gPSAyICogaSArIGkgJSAyOworICAgIH0KKwor ICBmMSAoKTsKKyAgZjIgKCk7CisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKysp CisgICAgaWYgKHZmMlsoaSAlIDIpID8gKE4gLyAyICsgaSkgOiAoTiAvIDIg LSBpIC8gMildICE9IGkgKyAxNworCXx8IHZpMlsoaSAlIDIpID8gKE4gLyAy ICsgaSkgOiAoTiAvIDIgLSBpIC8gMildICE9IGkgKyAyMSkKKyAgICAgIGFi b3J0ICgpOworCisgIGYzICgxMik7CisgIGY0ICgxNCk7CisgIGZvciAoaSA9 IDA7IGkgPCBOOyBpKyspCisgICAgaWYgKHZmMlsoKGkgJSAyKSA/IChOIC8g MiArIGkpIDogKE4gLyAyIC0gaSAvIDIpKSArIDEyXSAhPSBpICsgMTcKKwl8 fCB2aTJbKChpICUgMikgPyAoTiAvIDIgKyBpKSA6IChOIC8gMiAtIGkgLyAy KSkgKyAxNF0gIT0gaSArIDIxKQorICAgICAgYWJvcnQgKCk7CisKKyAgZjUg KCk7CisgIGY2ICgpOworICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAg IGlmICh2ZDJbKGkgJSAyKSA/IChOIC8gMiArIGkpIDogKE4gLyAyIC0gaSAv IDIpXSAhPSBpICsgMTkKKwl8fCB2bDJbKGkgJSAyKSA/IChOIC8gMiArIGkp IDogKE4gLyAyIC0gaSAvIDIpXSAhPSBpICsgMjMpCisgICAgICBhYm9ydCAo KTsKKworICBmNyAoNyk7CisgIGY4ICg5KTsKKyAgZm9yIChpID0gMDsgaSA8 IE47IGkrKykKKyAgICBpZiAodmQyWygoaSAlIDIpID8gKE4gLyAyICsgaSkg OiAoTiAvIDIgLSBpIC8gMikpICsgN10gIT0gaSArIDE5CisJfHwgdmwyWygo aSAlIDIpID8gKE4gLyAyICsgaSkgOiAoTiAvIDIgLSBpIC8gMikpICsgOV0g IT0gaSArIDIzKQorICAgICAgYWJvcnQgKCk7CisKKyAgZjkgKCk7CisgIGYx MCAoKTsKKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICBpZiAodmYy WzIgKiBpICsgaSAlIDJdICE9IGkgKyAxNworCXx8IHZpMlsyICogaSArIGkg JSAyXSAhPSBpICsgMjEpCisgICAgICBhYm9ydCAoKTsKKworICBmMTEgKDIp OworICBmMTIgKDQpOworICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAg IGlmICh2ZjJbMiAqIGkgKyBpICUgMiArIDJdICE9IGkgKyAxNworCXx8IHZp MlsyICogaSArIGkgJSAyICsgNF0gIT0gaSArIDIxKQorICAgICAgYWJvcnQg KCk7CisKKyAgZjEzICgpOworICBmMTQgKCk7CisgIGZvciAoaSA9IDA7IGkg PCBOOyBpKyspCisgICAgaWYgKHZkMlsyICogaSArIGkgJSAyXSAhPSBpICsg MTkKKwl8fCB2bDJbMiAqIGkgKyBpICUgMl0gIT0gaSArIDIzKQorICAgICAg YWJvcnQgKCk7CisKKyAgZjE1ICgxMyk7CisgIGYxNiAoMTUpOworICBmb3Ig KGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIGlmICh2ZDJbMiAqIGkgKyBpICUg MiArIDEzXSAhPSBpICsgMTkKKwl8fCB2bDJbMiAqIGkgKyBpICUgMiArIDE1 XSAhPSBpICsgMjMpCisgICAgICBhYm9ydCAoKTsKK30KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtc2NhdHRl ci0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJm LXNjYXR0ZXItMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjZmODFjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLXNjYXR0ZXItMi5jCkBAIC0wLDAg KzEsNyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLU8zIC1tYXZ4NTEyZiAtREFWWDUxMkYgLWZkdW1wLXRyZWUtdmVj dC1kZXRhaWxzIiB9ICovCisKKyNpbmNsdWRlICJhdng1MTJmLXNjYXR0ZXIt MS5jIgorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMg Im5vdGU6IHZlY3Rvcml6ZWQgMSBsb29wcyBpbiBmdW5jdGlvbiIgMTYgInZl Y3QiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1w ICJ2ZWN0IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L2F2eDUxMmYtc2NhdHRlci0zLmMgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLXNjYXR0ZXItMy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYWJhYjYKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9h dng1MTJmLXNjYXR0ZXItMy5jCkBAIC0wLDAgKzEsMjE1IEBACisvKiB7IGRn LWRvIHJ1biB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCBhdng1MTJmIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8zIC1tYXZ4NTEy ZiAtREFWWDUxMkYiIH0gKi8KKworI2luY2x1ZGUgImF2eDUxMmYtY2hlY2su aCIKKworI2RlZmluZSBOIDEwMjQKK2Zsb2F0IHZmMVtOXSwgdmYyWzIqTisx Nl07Citkb3VibGUgdmQxW05dLCB2ZDJbMipOKzE2XTsKK2ludCBrW05dOwor bG9uZyBsW05dOworc2hvcnQgblsyKk4rMTZdOworCitfX2F0dHJpYnV0ZV9f KChub2lubGluZSwgbm9jbG9uZSkpIHZvaWQKK2YxICh2b2lkKQoreworICBp bnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB2ZjJba1tp XV0gPSB2ZjFbaV07Cit9CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBu b2Nsb25lKSkgdm9pZAorZjIgKHZvaWQpCit7CisgIGludCBpOworICBmb3Ig KGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIG5ba1tpXV0gPSAoaW50KSB2ZjFb aV07Cit9CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkg dm9pZAorZjMgKGludCB4KQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsg aSA8IE47IGkrKykKKyAgICB2ZjJba1tpXSArIHhdID0gdmYxW2ldOworfQor CitfX2F0dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpIHZvaWQKK2Y0 IChpbnQgeCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBOOyBp KyspCisgICAgbltrW2ldICsgeF0gPSAoaW50KSB2ZjFbaV07Cit9CisKK19f YXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkgdm9pZAorZjUgKHZv aWQpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQor ICAgIHZkMltrW2ldXSA9IHZkMVtpXTsKK30KKworX19hdHRyaWJ1dGVfXygo bm9pbmxpbmUsIG5vY2xvbmUpKSB2b2lkCitmNiAodm9pZCkKK3sKKyAgaW50 IGk7CisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgbltrW2ldXSA9 IChpbnQpIHZkMVtpXTsKK30KKworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUs IG5vY2xvbmUpKSB2b2lkCitmNyAoaW50IHgpCit7CisgIGludCBpOworICBm b3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHZkMltrW2ldICsgeF0gPSB2 ZDFbaV07Cit9CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25l KSkgdm9pZAorZjggKGludCB4KQoreworICBpbnQgaTsKKyAgZm9yIChpID0g MDsgaSA8IE47IGkrKykKKyAgICBuW2tbaV0gKyB4XSA9IHZkMVtpXTsKK30K KworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vY2xvbmUpKSB2b2lkCitm OSAodm9pZCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBOOyBp KyspCisgICAgdmYyW2xbaV1dID0gdmYxW2ldOworfQorCitfX2F0dHJpYnV0 ZV9fKChub2lubGluZSwgbm9jbG9uZSkpIHZvaWQKK2YxMCAodm9pZCkKK3sK KyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgblts W2ldXSA9IChpbnQpIHZmMVtpXTsKK30KKworX19hdHRyaWJ1dGVfXygobm9p bmxpbmUsIG5vY2xvbmUpKSB2b2lkCitmMTEgKGxvbmcgeCkKK3sKKyAgaW50 IGk7CisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgdmYyW2xbaV0g KyB4XSA9IHZmMVtpXTsKK30KKworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUs IG5vY2xvbmUpKSB2b2lkCitmMTIgKGxvbmcgeCkKK3sKKyAgaW50IGk7Cisg IGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgbltsW2ldICsgeF0gPSAo aW50KSB2ZjFbaV07Cit9CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBu b2Nsb25lKSkgdm9pZAorZjEzICh2b2lkKQoreworICBpbnQgaTsKKyAgZm9y IChpID0gMDsgaSA8IE47IGkrKykKKyAgICB2ZDJbbFtpXV0gPSB2ZDFbaV07 Cit9CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkgdm9p ZAorZjE0ICh2b2lkKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8 IE47IGkrKykKKyAgICBuW2xbaV1dID0gKGludCkgdmQxW2ldOworfQorCitf X2F0dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpIHZvaWQKK2YxNSAo bG9uZyB4KQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IE47IGkr KykKKyAgICB2ZDJbbFtpXSArIHhdID0gdmQxW2ldOworfQorCitfX2F0dHJp YnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpIHZvaWQKK2YxNiAobG9uZyB4 KQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAg ICBuW2xbaV0gKyB4XSA9IChpbnQpIHZkMVtpXTsKK30KKworc3RhdGljIHZv aWQKK2F2eDUxMmZfdGVzdCAodm9pZCkKK3sKKyAgaW50IGk7CisKKyAgZm9y IChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICBhc20gKCIiKTsK KyAgICAgIHZmMVtpXSA9IDE3LjBmICsgaTsKKyAgICAgIHZkMVtpXSA9IDE5 LjAgKyBpOworICAgIH0KKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAg ICB7CisgICAgICBhc20gKCIiKTsKKyAgICAgIGtbaV0gPSAoaSAlIDIpID8g KE4gLyAyICsgaSkgOiAoTiAvIDIgLSBpIC8gMik7CisgICAgICBsW2ldID0g MiAqIGkgKyBpICUgMjsKKyAgICB9CisKKyAgZjEgKCk7CisgIGYyICgpOwor ICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIGlmICh2ZjJbKGkgJSAy KSA/IChOIC8gMiArIGkpIDogKE4gLyAyIC0gaSAvIDIpXSAhPSBpICsgMTcK Kwl8fCBuWyhpICUgMikgPyAoTiAvIDIgKyBpKSA6IChOIC8gMiAtIGkgLyAy KV0gIT0gaSArIDE3KQorICAgICAgYWJvcnQgKCk7CisKKyAgZjMgKDEyKTsK KyAgZjQgKDE0KTsKKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICBp ZiAodmYyWygoaSAlIDIpID8gKE4gLyAyICsgaSkgOiAoTiAvIDIgLSBpIC8g MikpICsgMTJdICE9IGkgKyAxNworCXx8IG5bKChpICUgMikgPyAoTiAvIDIg KyBpKSA6IChOIC8gMiAtIGkgLyAyKSkgKyAxNF0gIT0gaSArIDE3KQorICAg ICAgYWJvcnQgKCk7CisKKyAgZjUgKCk7CisgIGY2ICgpOworICBmb3IgKGkg PSAwOyBpIDwgTjsgaSsrKQorICAgIGlmICh2ZDJbKGkgJSAyKSA/IChOIC8g MiArIGkpIDogKE4gLyAyIC0gaSAvIDIpXSAhPSBpICsgMTkKKwl8fCBuWyhp ICUgMikgPyAoTiAvIDIgKyBpKSA6IChOIC8gMiAtIGkgLyAyKV0gIT0gaSAr IDE5KQorICAgICAgYWJvcnQgKCk7CisKKyAgZjcgKDcpOworICBmOCAoOSk7 CisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgaWYgKHZkMlsoKGkg JSAyKSA/IChOIC8gMiArIGkpIDogKE4gLyAyIC0gaSAvIDIpKSArIDddICE9 IGkgKyAxOQorCXx8IG5bKChpICUgMikgPyAoTiAvIDIgKyBpKSA6IChOIC8g MiAtIGkgLyAyKSkgKyA5XSAhPSBpICsgMTkpCisgICAgICBhYm9ydCAoKTsK KworICBmOSAoKTsKKyAgZjEwICgpOworICBmb3IgKGkgPSAwOyBpIDwgTjsg aSsrKQorICAgIGlmICh2ZjJbMiAqIGkgKyBpICUgMl0gIT0gaSArIDE3CisJ fHwgblsyICogaSArIGkgJSAyXSAhPSBpICsgMTcpCisgICAgICBhYm9ydCAo KTsKKworICBmMTEgKDIpOworICBmMTIgKDQpOworICBmb3IgKGkgPSAwOyBp IDwgTjsgaSsrKQorICAgIGlmICh2ZjJbMiAqIGkgKyBpICUgMiArIDJdICE9 IGkgKyAxNworCXx8IG5bMiAqIGkgKyBpICUgMiArIDRdICE9IGkgKyAxNykK KyAgICAgIGFib3J0ICgpOworCisgIGYxMyAoKTsKKyAgZjE0ICgpOworICBm b3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIGlmICh2ZDJbMiAqIGkgKyBp ICUgMl0gIT0gaSArIDE5CisJfHwgblsyICogaSArIGkgJSAyXSAhPSBpICsg MTkpCisgICAgICBhYm9ydCAoKTsKKworICBmMTUgKDEzKTsKKyAgZjE2ICgx NSk7CisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgaWYgKHZkMlsy ICogaSArIGkgJSAyICsgMTNdICE9IGkgKyAxOQorCXx8IG5bMiAqIGkgKyBp ICUgMiArIDE1XSAhPSBpICsgMTkpCisgICAgICBhYm9ydCAoKTsKK30KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUx MmYtc2NhdHRlci00LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9hdng1MTJmLXNjYXR0ZXItNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmRjY2JkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLXNjYXR0ZXItNC5j CkBAIC0wLDAgKzEsMzQgQEAKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsg ZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGF2eDUxMmYgfSAqLworLyog eyBkZy1vcHRpb25zICItTzMgLW1hdng1MTJmIC1EQVZYNTEyRiIgfSAqLwor CisjaW5jbHVkZSAiYXZ4NTEyZi1jaGVjay5oIgorCisjZGVmaW5lIE4gMTAy NAoraW50IGFbTl0sIGJbTl07CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5l LCBub2Nsb25lKSkgdm9pZAorZm9vIChmbG9hdCAqX19yZXN0cmljdCBwLCBm bG9hdCAqX19yZXN0cmljdCBxLAorICAgICBpbnQgczEsIGludCBzMiwgaW50 IHMzKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IChOIC8gOCk7 IGkrKykKKyAgICBwW2FbaV0gKiBzMSArIGJbaV0gKiBzMiArIHMzXSA9IHFb aV07Cit9CisKK3N0YXRpYyB2b2lkCithdng1MTJmX3Rlc3QgKHZvaWQpCit7 CisgIGludCBpOworICBmbG9hdCBjW05dLCBkW05dOworICBmb3IgKGkgPSAw OyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgIGFbaV0gPSAoaSAqIDcpICYg KE4gLyA4IC0gMSk7CisgICAgICBiW2ldID0gKGkgKiAxMykgJiAoTiAvIDgg LSAxKTsKKyAgICAgIGNbaV0gPSAxNzkuMTMgKyBpOworICAgIH0KKyAgZm9v IChkLCBjLCAzLCAyLCA0KTsKKyAgZm9yIChpID0gMDsgaSA8IChOIC8gOCk7 IGkrKykKKyAgICBpZiAoZFthW2ldICogMyArIGJbaV0gKiAyICsgNF0gIT0g KGZsb2F0KSAoMTc5LjEzICsgaSkpCisgICAgICBhYm9ydCAoKTsKK30KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUx MmYtc2NhdHRlci01LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9hdng1MTJmLXNjYXR0ZXItNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmY4MGM5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLXNjYXR0ZXItNS5j CkBAIC0wLDAgKzEsNiBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8zIC1tYXZ4NTEyZiAtREFWWDUxMkYiIH0gKi8K KworI2luY2x1ZGUgImF2eDUxMmYtc2NhdHRlci00LmMiCisKKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlciAic2NhdHRlclxbXlxuXF0qem1tIiB9 IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmMg Yi9nY2MvdHJlZS12ZWN0LWRhdGEtcmVmcy5jCmluZGV4IGZmZTgzZTIuLjcx NjIxZjUgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmMK KysrIGIvZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuYwpAQCAtMjk0LDcgKzI5 NCw5IEBAIHZlY3RfYW5hbHl6ZV9kYXRhX3JlZl9kZXBlbmRlbmNlIChzdHJ1 Y3QgZGF0YV9kZXBlbmRlbmNlX3JlbGF0aW9uICpkZHIsCiAJfQogCiAgICAg ICBpZiAoU1RNVF9WSU5GT19HQVRIRVJfUCAoc3RtdGluZm9fYSkKLQkgIHx8 IFNUTVRfVklORk9fR0FUSEVSX1AgKHN0bXRpbmZvX2IpKQorCSAgfHwgU1RN VF9WSU5GT19HQVRIRVJfUCAoc3RtdGluZm9fYikKKwkgIHx8IFNUTVRfVklO Rk9fU0NBVFRFUl9QIChzdG10aW5mb19hKQorCSAgfHwgU1RNVF9WSU5GT19T Q0FUVEVSX1AgKHN0bXRpbmZvX2IpKQogCXsKIAkgIGlmIChkdW1wX2VuYWJs ZWRfcCAoKSkKIAkgICAgewpAQCAtMzQyLDcgKzM0NCw5IEBAIHZlY3RfYW5h bHl6ZV9kYXRhX3JlZl9kZXBlbmRlbmNlIChzdHJ1Y3QgZGF0YV9kZXBlbmRl bmNlX3JlbGF0aW9uICpkZHIsCiAJfQogCiAgICAgICBpZiAoU1RNVF9WSU5G T19HQVRIRVJfUCAoc3RtdGluZm9fYSkKLQkgIHx8IFNUTVRfVklORk9fR0FU SEVSX1AgKHN0bXRpbmZvX2IpKQorCSAgfHwgU1RNVF9WSU5GT19HQVRIRVJf UCAoc3RtdGluZm9fYikKKwkgIHx8IFNUTVRfVklORk9fU0NBVFRFUl9QIChz dG10aW5mb19hKQorCSAgfHwgU1RNVF9WSU5GT19TQ0FUVEVSX1AgKHN0bXRp bmZvX2IpKQogCXsKIAkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkKIAkgICAg ewpAQCAtMjMxOSw3ICsyMzIzLDggQEAgdmVjdF9hbmFseXplX2RhdGFfcmVm X2FjY2VzcyAoc3RydWN0IGRhdGFfcmVmZXJlbmNlICpkcikKICAgICAgIHJl dHVybiBmYWxzZTsKICAgICB9CiAKLSAgLyogQWxsb3cgaW52YXJpYW50IGxv YWRzIGluIG5vdCBuZXN0ZWQgbG9vcHMuICAqLworICAvKiBBbGxvdyBpbnZh cmlhbnQgbG9hZHMgYW5kIHN0b3JlcyBpbiBsb29wcy4gIEludmFyaWFudCBz dG9yZXMKKyAgICAgYXJlIGFsbG93ZWQgb25seSBpZiB0aGV5IGFyZSBzY2F0 dGVyIHN0b3Jlcy4gICovCiAgIGlmIChsb29wX3ZpbmZvICYmIGludGVnZXJf emVyb3AgKHN0ZXApKQogICAgIHsKICAgICAgIEdST1VQX0ZJUlNUX0VMRU1F TlQgKHZpbmZvX2Zvcl9zdG10IChzdG10KSkgPSBOVUxMOwpAQCAtMjMzMCw3 ICsyMzM1LDcgQEAgdmVjdF9hbmFseXplX2RhdGFfcmVmX2FjY2VzcyAoc3Ry dWN0IGRhdGFfcmVmZXJlbmNlICpkcikKIAkJCSAgICAgInplcm8gc3RlcCBp biBpbm5lciBsb29wIG9mIG5lc3RcbiIpOwogCSAgcmV0dXJuIGZhbHNlOwog CX0KLSAgICAgIHJldHVybiBEUl9JU19SRUFEIChkcik7CisgICAgICByZXR1 cm4gRFJfSVNfUkVBRCAoZHIpIHx8IFNUTVRfVklORk9fU0NBVFRFUl9QIChz dG10X2luZm8pOwogICAgIH0KIAogICBpZiAobG9vcCAmJiBuZXN0ZWRfaW5f dmVjdF9sb29wX3AgKGxvb3AsIHN0bXQpKQpAQCAtMjM0NiwxMCArMjM1MSw3 IEBAIHZlY3RfYW5hbHl6ZV9kYXRhX3JlZl9hY2Nlc3MgKHN0cnVjdCBkYXRh X3JlZmVyZW5jZSAqZHIpCiAJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAJ ICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24s CiAJICAgICAgICAgICAgICAgICAgICAgInplcm8gc3RlcCBpbiBvdXRlciBs b29wLlxuIik7Ci0JICBpZiAoRFJfSVNfUkVBRCAoZHIpKQotICAJICAgIHJl dHVybiB0cnVlOwotCSAgZWxzZQotCSAgICByZXR1cm4gZmFsc2U7CisJICBy ZXR1cm4gRFJfSVNfUkVBRCAoZHIpIHx8IFNUTVRfVklORk9fU0NBVFRFUl9Q IChzdG10X2luZm8pOwogCX0KICAgICB9CiAKQEAgLTI5NzgsMTIgKzI5ODAs MTIgQEAgdmVjdF9wcnVuZV9ydW50aW1lX2FsaWFzX3Rlc3RfbGlzdCAobG9v cF92ZWNfaW5mbyBsb29wX3ZpbmZvKQogICByZXR1cm4gdHJ1ZTsKIH0KIAot LyogQ2hlY2sgd2hldGhlciBhIG5vbi1hZmZpbmUgcmVhZCBpbiBzdG10IGlz IHN1aXRhYmxlIGZvciBnYXRoZXIgbG9hZAotICAgYW5kIGlmIHNvLCByZXR1 cm4gYSBidWlsdGluIGRlY2wgZm9yIHRoYXQgb3BlcmF0aW9uLiAgKi8KKy8q IENoZWNrIHdoZXRoZXIgYSBub24tYWZmaW5lIHJlYWQgb3Igd3JpdGUgaW4g c3RtdCBpcyBzdWl0YWJsZSBmb3IgZ2F0aGVyIGxvYWQKKyAgIG9yIHNjYXR0 ZXIgc3RvcmUgYW5kIGlmIHNvLCByZXR1cm4gYSBidWlsdGluIGRlY2wgZm9y IHRoYXQgb3BlcmF0aW9uLiAgKi8KIAogdHJlZQotdmVjdF9jaGVja19nYXRo ZXIgKGdpbXBsZSBzdG10LCBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIHRy ZWUgKmJhc2VwLAotCQkgICB0cmVlICpvZmZwLCBpbnQgKnNjYWxlcCkKK3Zl Y3RfY2hlY2tfZ2F0aGVyX3NjYXR0ZXIgKGdpbXBsZSBzdG10LCBsb29wX3Zl Y19pbmZvIGxvb3BfdmluZm8sIHRyZWUgKmJhc2VwLAorCQkJICAgdHJlZSAq b2ZmcCwgaW50ICpzY2FsZXAsIGJvb2wgaXNfbG9hZCkKIHsKICAgSE9TVF9X SURFX0lOVCBzY2FsZSA9IDEsIHBiaXRwb3MsIHBiaXRzaXplOwogICBzdHJ1 Y3QgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAobG9vcF92aW5mbyk7 CkBAIC0zMDEyLDcgKzMwMTQsNyBAQCB2ZWN0X2NoZWNrX2dhdGhlciAoZ2lt cGxlIHN0bXQsIGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSAqYmFz ZXAsCiAJYmFzZSA9IFRSRUVfT1BFUkFORCAoZ2ltcGxlX2Fzc2lnbl9yaHMx IChkZWZfc3RtdCksIDApOwogICAgIH0KIAotICAvKiBUaGUgZ2F0aGVyIGJ1 aWx0aW5zIG5lZWQgYWRkcmVzcyBvZiB0aGUgZm9ybQorICAvKiBUaGUgZ2F0 aGVyIGFuZCBzY2F0dGVyIGJ1aWx0aW5zIG5lZWQgYWRkcmVzcyBvZiB0aGUg Zm9ybQogICAgICBsb29wX2ludmFyaWFudCArIHZlY3RvciAqIHsxLCAyLCA0 LCA4fQogICAgICBvcgogICAgICBsb29wX2ludmFyaWFudCArIHNpZ25fZXh0 ZW5kICh2ZWN0b3IpICogeyAxLCAyLCA0LCA4IH0uCkBAIC0zMTc1LDggKzMx NzcsMTMgQEAgdmVjdF9jaGVja19nYXRoZXIgKGdpbXBsZSBzdG10LCBsb29w X3ZlY19pbmZvIGxvb3BfdmluZm8sIHRyZWUgKmJhc2VwLAogICBpZiAob2Zm dHlwZSA9PSBOVUxMX1RSRUUpCiAgICAgb2ZmdHlwZSA9IFRSRUVfVFlQRSAo b2ZmKTsKIAotICBkZWNsID0gdGFyZ2V0bS52ZWN0b3JpemUuYnVpbHRpbl9n YXRoZXIgKFNUTVRfVklORk9fVkVDVFlQRSAoc3RtdF9pbmZvKSwKLQkJCQkJ ICAgb2ZmdHlwZSwgc2NhbGUpOworICBpZiAoaXNfbG9hZCkKKyAgICBkZWNs ID0gdGFyZ2V0bS52ZWN0b3JpemUuYnVpbHRpbl9nYXRoZXIgKFNUTVRfVklO Rk9fVkVDVFlQRSAoc3RtdF9pbmZvKSwKKwkJCQkJICAgICBvZmZ0eXBlLCBz Y2FsZSk7CisgIGVsc2UKKyAgICBkZWNsID0gdGFyZ2V0bS52ZWN0b3JpemUu YnVpbHRpbl9zY2F0dGVyIChTVE1UX1ZJTkZPX1ZFQ1RZUEUgKHN0bXRfaW5m byksCisJCQkJCSAgICAgIG9mZnR5cGUsIHNjYWxlKTsKKwogICBpZiAoZGVj bCA9PSBOVUxMX1RSRUUpCiAgICAgcmV0dXJuIE5VTExfVFJFRTsKIApAQCAt MzMyNSw3ICszMzMyLDcgQEAgdmVjdF9hbmFseXplX2RhdGFfcmVmcyAobG9v cF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogICAgICAgZ2ltcGxlIHN0bXQ7CiAg ICAgICBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbzsKICAgICAgIHRyZWUgYmFz ZSwgb2Zmc2V0LCBpbml0OwotICAgICAgYm9vbCBnYXRoZXIgPSBmYWxzZTsK KyAgICAgIGJvb2wgZ2F0aGVyID0gZmFsc2UsIHNjYXR0ZXIgPSBmYWxzZTsK ICAgICAgIGJvb2wgc2ltZF9sYW5lX2FjY2VzcyA9IGZhbHNlOwogICAgICAg aW50IHZmOwogCkBAIC0zMzY0LDE4ICszMzcxLDIyIEBAIGFnYWluOgogCSAg ICA9IERSX0lTX1JFQUQgKGRyKQogCSAgICAgICYmICFUUkVFX1RISVNfVk9M QVRJTEUgKERSX1JFRiAoZHIpKQogCSAgICAgICYmIHRhcmdldG0udmVjdG9y aXplLmJ1aWx0aW5fZ2F0aGVyICE9IE5VTEw7CisJICBib29sIG1heWJlX3Nj YXR0ZXIKKwkgICAgPSBEUl9JU19XUklURSAoZHIpCisJICAgICAgJiYgIVRS RUVfVEhJU19WT0xBVElMRSAoRFJfUkVGIChkcikpCisJICAgICAgJiYgdGFy Z2V0bS52ZWN0b3JpemUuYnVpbHRpbl9zY2F0dGVyICE9IE5VTEw7CiAJICBi b29sIG1heWJlX3NpbWRfbGFuZV9hY2Nlc3MKIAkgICAgPSBsb29wX3ZpbmZv ICYmIGxvb3AtPnNpbWR1aWQ7CiAKLQkgIC8qIElmIHRhcmdldCBzdXBwb3J0 cyB2ZWN0b3IgZ2F0aGVyIGxvYWRzLCBvciBpZiB0aGlzIG1pZ2h0IGJlCi0J ICAgICBhIFNJTUQgbGFuZSBhY2Nlc3MsIHNlZSBpZiB0aGV5IGNhbid0IGJl IHVzZWQuICAqLworCSAgLyogSWYgdGFyZ2V0IHN1cHBvcnRzIHZlY3RvciBn YXRoZXIgbG9hZHMgb3Igc2NhdHRlciBzdG9yZXMsIG9yIGlmCisJICAgICB0 aGlzIG1pZ2h0IGJlIGEgU0lNRCBsYW5lIGFjY2Vzcywgc2VlIGlmIHRoZXkg Y2FuJ3QgYmUgdXNlZC4gICovCiAJICBpZiAobG9vcF92aW5mbwotCSAgICAg ICYmIChtYXliZV9nYXRoZXIgfHwgbWF5YmVfc2ltZF9sYW5lX2FjY2VzcykK KwkgICAgICAmJiAobWF5YmVfZ2F0aGVyIHx8IG1heWJlX3NjYXR0ZXIgfHwg bWF5YmVfc2ltZF9sYW5lX2FjY2VzcykKIAkgICAgICAmJiAhbmVzdGVkX2lu X3ZlY3RfbG9vcF9wIChsb29wLCBzdG10KSkKIAkgICAgewogCSAgICAgIHN0 cnVjdCBkYXRhX3JlZmVyZW5jZSAqbmV3ZHIKIAkJPSBjcmVhdGVfZGF0YV9y ZWYgKE5VTEwsIGxvb3BfY29udGFpbmluZ19zdG10IChzdG10KSwKLQkJCQkg ICBEUl9SRUYgKGRyKSwgc3RtdCwgdHJ1ZSk7CisJCQkJICAgRFJfUkVGIChk ciksIHN0bXQsIG1heWJlX3NjYXR0ZXIgPyBmYWxzZSA6IHRydWUpOwogCSAg ICAgIGdjY19hc3NlcnQgKG5ld2RyICE9IE5VTEwgJiYgRFJfUkVGIChuZXdk cikpOwogCSAgICAgIGlmIChEUl9CQVNFX0FERFJFU1MgKG5ld2RyKQogCQkg ICYmIERSX09GRlNFVCAobmV3ZHIpCkBAIC0zNDI4LDE3ICszNDM5LDE4IEBA IGFnYWluOgogCQkJICAgIH0KIAkJCX0KIAkJICAgIH0KLQkJICBpZiAoIXNp bWRfbGFuZV9hY2Nlc3MgJiYgbWF5YmVfZ2F0aGVyKQorCQkgIGlmICghc2lt ZF9sYW5lX2FjY2VzcyAmJiAobWF5YmVfZ2F0aGVyIHx8IG1heWJlX3NjYXR0 ZXIpKQogCQkgICAgewogCQkgICAgICBkciA9IG5ld2RyOwotCQkgICAgICBn YXRoZXIgPSB0cnVlOworCQkgICAgICBnYXRoZXIgPSBEUl9JU19SRUFEIChk cik7CisJCSAgICAgIHNjYXR0ZXIgPSBEUl9JU19XUklURSAoZHIpOwogCQkg ICAgfQogCQl9Ci0JICAgICAgaWYgKCFnYXRoZXIgJiYgIXNpbWRfbGFuZV9h Y2Nlc3MpCisJICAgICAgaWYgKCFnYXRoZXIgJiYgIXNjYXR0ZXIgJiYgIXNp bWRfbGFuZV9hY2Nlc3MpCiAJCWZyZWVfZGF0YV9yZWYgKG5ld2RyKTsKIAkg ICAgfQogCi0JICBpZiAoIWdhdGhlciAmJiAhc2ltZF9sYW5lX2FjY2VzcykK KwkgIGlmICghZ2F0aGVyICYmICFzY2F0dGVyICYmICFzaW1kX2xhbmVfYWNj ZXNzKQogCSAgICB7CiAJICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQog CQl7CkBAIC0zNDY2LDcgKzM0NzgsNyBAQCBhZ2FpbjoKICAgICAgICAgICBp ZiAoYmJfdmluZm8pCiAJICAgIGJyZWFrOwogCi0JICBpZiAoZ2F0aGVyIHx8 IHNpbWRfbGFuZV9hY2Nlc3MpCisJICBpZiAoZ2F0aGVyIHx8IHNjYXR0ZXIg fHwgc2ltZF9sYW5lX2FjY2VzcykKIAkgICAgZnJlZV9kYXRhX3JlZiAoZHIp OwogCSAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0zNTAxLDcgKzM1 MTMsNyBAQCBhZ2FpbjoKICAgICAgICAgICBpZiAoYmJfdmluZm8pCiAJICAg IGJyZWFrOwogCi0JICBpZiAoZ2F0aGVyIHx8IHNpbWRfbGFuZV9hY2Nlc3Mp CisJICBpZiAoZ2F0aGVyIHx8IHNjYXR0ZXIgfHwgc2ltZF9sYW5lX2FjY2Vz cykKIAkgICAgZnJlZV9kYXRhX3JlZiAoZHIpOwogICAgICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgICAgfQpAQCAtMzUyMSw3ICszNTMzLDcgQEAgYWdh aW46CiAgICAgICAgICAgaWYgKGJiX3ZpbmZvKQogCSAgICBicmVhazsKIAot CSAgaWYgKGdhdGhlciB8fCBzaW1kX2xhbmVfYWNjZXNzKQorCSAgaWYgKGdh dGhlciB8fCBzY2F0dGVyIHx8IHNpbWRfbGFuZV9hY2Nlc3MpCiAJICAgIGZy ZWVfZGF0YV9yZWYgKGRyKTsKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAJ fQpAQCAtMzU0Niw3ICszNTU4LDcgQEAgYWdhaW46CiAJICBpZiAoYmJfdmlu Zm8pCiAJICAgIGJyZWFrOwogCi0JICBpZiAoZ2F0aGVyIHx8IHNpbWRfbGFu ZV9hY2Nlc3MpCisJICBpZiAoZ2F0aGVyIHx8IHNjYXR0ZXIgfHwgc2ltZF9s YW5lX2FjY2VzcykKIAkgICAgZnJlZV9kYXRhX3JlZiAoZHIpOwogCSAgcmV0 dXJuIGZhbHNlOwogCX0KQEAgLTM2ODQsNyArMzY5Niw3IEBAIGFnYWluOgog ICAgICAgICAgIGlmIChiYl92aW5mbykKIAkgICAgYnJlYWs7CiAKLQkgIGlm IChnYXRoZXIgfHwgc2ltZF9sYW5lX2FjY2VzcykKKwkgIGlmIChnYXRoZXIg fHwgc2NhdHRlciB8fCBzaW1kX2xhbmVfYWNjZXNzKQogCSAgICBmcmVlX2Rh dGFfcmVmIChkcik7CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg ICB9CkBAIC0zNzE3LDcgKzM3MjksNyBAQCBhZ2FpbjoKICAgICAgICAgICBp ZiAoYmJfdmluZm8pCiAJICAgIGJyZWFrOwogCi0JICBpZiAoZ2F0aGVyIHx8 IHNpbWRfbGFuZV9hY2Nlc3MpCisJICBpZiAoZ2F0aGVyIHx8IHNjYXR0ZXIg fHwgc2ltZF9sYW5lX2FjY2VzcykKIAkgICAgewogCSAgICAgIFNUTVRfVklO Rk9fREFUQV9SRUYgKHN0bXRfaW5mbykgPSBOVUxMOwogCSAgICAgIGlmIChn YXRoZXIpCkBAIC0zNzQ0LDExICszNzU2LDM2IEBAIGFnYWluOgogICAgICAg aWYgKHZmID4gKm1pbl92ZikKIAkqbWluX3ZmID0gdmY7CiAKLSAgICAgIGlm IChnYXRoZXIpCisgICAgICBpZiAoc2NhdHRlcikKKwl7CisJICB0cmVlIG9m ZjsKKworCSAgc2NhdHRlciA9IDAgIT0gdmVjdF9jaGVja19nYXRoZXJfc2Nh dHRlciAoc3RtdCwgbG9vcF92aW5mbywgTlVMTCwgJm9mZiwgTlVMTCwgZmFs c2UpOworCSAgaWYgKHNjYXR0ZXIKKwkgICAgICAmJiBnZXRfdmVjdHlwZV9m b3Jfc2NhbGFyX3R5cGUgKFRSRUVfVFlQRSAob2ZmKSkgPT0gTlVMTF9UUkVF KQorCSAgICBzY2F0dGVyID0gZmFsc2U7CisJICBpZiAoIXNjYXR0ZXIpCisJ ICAgIHsKKwkgICAgICBTVE1UX1ZJTkZPX0RBVEFfUkVGIChzdG10X2luZm8p ID0gTlVMTDsKKwkgICAgICBmcmVlX2RhdGFfcmVmIChkcik7CisJICAgICAg aWYgKGR1bXBfZW5hYmxlZF9wICgpKQorCQl7CisJCSAgZHVtcF9wcmludGZf bG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVjdF9sb2NhdGlvbiwg CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgdmVj dG9yaXplZDogbm90IHN1aXRhYmxlIGZvciBzY2F0dGVyICIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0b3JlICIpOworCQkgIGR1 bXBfZ2ltcGxlX3N0bXQgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCBUREZf U0xJTSwgc3RtdCwgMCk7CisJCX0KKwkgICAgICByZXR1cm4gZmFsc2U7CisJ ICAgIH0KKworCSAgZGF0YXJlZnNbaV0gPSBkcjsKKwkgIFNUTVRfVklORk9f U0NBVFRFUl9QIChzdG10X2luZm8pID0gdHJ1ZTsKKwl9CisgICAgICBlbHNl IGlmIChnYXRoZXIpCiAJewogCSAgdHJlZSBvZmY7CiAKLQkgIGdhdGhlciA9 IDAgIT0gdmVjdF9jaGVja19nYXRoZXIgKHN0bXQsIGxvb3BfdmluZm8sIE5V TEwsICZvZmYsIE5VTEwpOworCSAgZ2F0aGVyID0gMCAhPSB2ZWN0X2NoZWNr X2dhdGhlcl9zY2F0dGVyIChzdG10LCBsb29wX3ZpbmZvLCBOVUxMLCAmb2Zm LCBOVUxMLCB0cnVlKTsKIAkgIGlmIChnYXRoZXIKIAkgICAgICAmJiBnZXRf dmVjdHlwZV9mb3Jfc2NhbGFyX3R5cGUgKFRSRUVfVFlQRSAob2ZmKSkgPT0g TlVMTF9UUkVFKQogCSAgICBnYXRoZXIgPSBmYWxzZTsKZGlmZiAtLWdpdCBh L2djYy90cmVlLXZlY3Qtc3RtdHMuYyBiL2djYy90cmVlLXZlY3Qtc3RtdHMu YwppbmRleCBhYTlkNDNmLi4xNDU4NTI4IDEwMDY0NAotLS0gYS9nY2MvdHJl ZS12ZWN0LXN0bXRzLmMKKysrIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jCkBA IC04NDAsMTIgKzg0MCwyNyBAQCB2ZWN0X21hcmtfc3RtdHNfdG9fYmVfdmVj dG9yaXplZCAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvKQogICAgICAgaWYg KFNUTVRfVklORk9fR0FUSEVSX1AgKHN0bXRfdmluZm8pKQogCXsKIAkgIHRy ZWUgb2ZmOwotCSAgdHJlZSBkZWNsID0gdmVjdF9jaGVja19nYXRoZXIgKHN0 bXQsIGxvb3BfdmluZm8sIE5VTEwsICZvZmYsIE5VTEwpOworCSAgdHJlZSBk ZWNsID0gdmVjdF9jaGVja19nYXRoZXJfc2NhdHRlciAoc3RtdCwgbG9vcF92 aW5mbywgTlVMTCwgJm9mZiwgTlVMTCwgdHJ1ZSk7CiAJICBnY2NfYXNzZXJ0 IChkZWNsKTsKIAkgIGlmICghcHJvY2Vzc191c2UgKHN0bXQsIG9mZiwgbG9v cF92aW5mbywgbGl2ZV9wLCByZWxldmFudCwKIAkJCSAgICAmd29ya2xpc3Qs IHRydWUpKQogCSAgICByZXR1cm4gZmFsc2U7CiAJfQorCisgICAgICBpZiAo U1RNVF9WSU5GT19TQ0FUVEVSX1AgKHN0bXRfdmluZm8pKQorCXsKKwkgIHRy ZWUgb2ZmOworCSAgdHJlZSBkZWNsID0gdmVjdF9jaGVja19nYXRoZXJfc2Nh dHRlciAoc3RtdCwgbG9vcF92aW5mbywgTlVMTCwgJm9mZiwgTlVMTCwgZmFs c2UpOworCSAgZ2NjX2Fzc2VydCAoZGVjbCk7CisJICBpZiAoIXByb2Nlc3Nf dXNlIChzdG10LCBvZmYsIGxvb3BfdmluZm8sIGxpdmVfcCwgcmVsZXZhbnQs CisJCQkgICAgJndvcmtsaXN0LCB0cnVlKQorCSAgICAgIHx8ICFwcm9jZXNz X3VzZSAoc3RtdCwgZ2ltcGxlX2Fzc2lnbl9yaHMxIChzdG10KSwgbG9vcF92 aW5mbywgbGl2ZV9wLAorCQkJICAgICAgIHJlbGV2YW50LCAmd29ya2xpc3Qs IHRydWUpKQorCSAgICB7CisJICAgICAgd29ya2xpc3QucmVsZWFzZSAoKTsK KwkgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKwl9CiAgICAgfSAvKiB3 aGlsZSB3b3JrbGlzdCAqLwogCiAgIHJldHVybiB0cnVlOwpAQCAtMTgzNSw4 ICsxODUwLDggQEAgdmVjdG9yaXphYmxlX21hc2tfbG9hZF9zdG9yZSAoZ2lt cGxlIHN0bXQsIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksCiAgICAgewog ICAgICAgZ2ltcGxlIGRlZl9zdG10OwogICAgICAgdHJlZSBkZWY7Ci0gICAg ICBnYXRoZXJfZGVjbCA9IHZlY3RfY2hlY2tfZ2F0aGVyIChzdG10LCBsb29w X3ZpbmZvLCAmZ2F0aGVyX2Jhc2UsCi0JCQkJICAgICAgICZnYXRoZXJfb2Zm LCAmZ2F0aGVyX3NjYWxlKTsKKyAgICAgIGdhdGhlcl9kZWNsID0gdmVjdF9j aGVja19nYXRoZXJfc2NhdHRlciAoc3RtdCwgbG9vcF92aW5mbywgJmdhdGhl cl9iYXNlLAorCQkJCSAgICAgICAmZ2F0aGVyX29mZiwgJmdhdGhlcl9zY2Fs ZSwgdHJ1ZSk7CiAgICAgICBnY2NfYXNzZXJ0IChnYXRoZXJfZGVjbCk7CiAg ICAgICBpZiAoIXZlY3RfaXNfc2ltcGxlX3VzZV8xIChnYXRoZXJfb2ZmLCBO VUxMLCBsb29wX3ZpbmZvLCBOVUxMLAogCQkJCSAmZGVmX3N0bXQsICZkZWYs ICZnYXRoZXJfZHQsCkBAIC01MDM0LDYgKzUwNDksMTIgQEAgdmVjdG9yaXph YmxlX3N0b3JlIChnaW1wbGUgc3RtdCwgZ2ltcGxlX3N0bXRfaXRlcmF0b3Ig KmdzaSwgZ2ltcGxlICp2ZWNfc3RtdCwKICAgdW5zaWduZWQgaW50IHZlY19u dW07CiAgIGJiX3ZlY19pbmZvIGJiX3ZpbmZvID0gU1RNVF9WSU5GT19CQl9W SU5GTyAoc3RtdF9pbmZvKTsKICAgdHJlZSBhZ2dyX3R5cGU7CisgIHRyZWUg c2NhdHRlcl9iYXNlID0gTlVMTF9UUkVFLCBzY2F0dGVyX29mZiA9IE5VTExf VFJFRTsKKyAgdHJlZSBzY2F0dGVyX29mZl92ZWN0eXBlID0gTlVMTF9UUkVF LCBzY2F0dGVyX2RlY2wgPSBOVUxMX1RSRUU7CisgIGludCBzY2F0dGVyX3Nj YWxlID0gMTsKKyAgZW51bSB2ZWN0X2RlZl90eXBlIHNjYXR0ZXJfaWR4X2R0 ID0gdmVjdF91bmtub3duX2RlZl90eXBlOworICBlbnVtIHZlY3RfZGVmX3R5 cGUgc2NhdHRlcl9zcmNfZHQgPSB2ZWN0X3Vua25vd25fZGVmX3R5cGU7Cisg IGdpbXBsZSBuZXdfc3RtdDsKIAogICBpZiAobG9vcF92aW5mbykKICAgICBs b29wID0gTE9PUF9WSU5GT19MT09QIChsb29wX3ZpbmZvKTsKQEAgLTUxNzMs NiArNTE5NCwzMiBAQCB2ZWN0b3JpemFibGVfc3RvcmUgKGdpbXBsZSBzdG10 LCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLCBnaW1wbGUgKnZlY19zdG10 LAogICAgICAgICB9CiAgICAgfQogCisgIGlmIChTVE1UX1ZJTkZPX1NDQVRU RVJfUCAoc3RtdF9pbmZvKSkKKyAgICB7CisgICAgICBnaW1wbGUgZGVmX3N0 bXQ7CisgICAgICB0cmVlIGRlZjsKKyAgICAgIHNjYXR0ZXJfZGVjbCA9IHZl Y3RfY2hlY2tfZ2F0aGVyX3NjYXR0ZXIgKHN0bXQsIGxvb3BfdmluZm8sICZz Y2F0dGVyX2Jhc2UsCisJCQkJCQkmc2NhdHRlcl9vZmYsICZzY2F0dGVyX3Nj YWxlLCBmYWxzZSk7CisgICAgICBnY2NfYXNzZXJ0IChzY2F0dGVyX2RlY2wp OworICAgICAgaWYgKCF2ZWN0X2lzX3NpbXBsZV91c2VfMSAoc2NhdHRlcl9v ZmYsIE5VTEwsIGxvb3BfdmluZm8sIGJiX3ZpbmZvLAorCQkJCSAmZGVmX3N0 bXQsICZkZWYsICZzY2F0dGVyX2lkeF9kdCwKKwkJCQkgJnNjYXR0ZXJfb2Zm X3ZlY3R5cGUpKQorCXsKKwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkKKwkg ICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwg dmVjdF9sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg InNjYXR0ZXIgaW5kZXggdXNlIG5vdCBzaW1wbGUuIik7CisJICByZXR1cm4g ZmFsc2U7CisJfQorICAgICAgaWYgKCF2ZWN0X2lzX3NpbXBsZV91c2UgKGdp bXBsZV9hc3NpZ25fcmhzMSAoc3RtdCksIE5VTEwsIGxvb3BfdmluZm8sIGJi X3ZpbmZvLAorCQkJICAgICAgICZkZWZfc3RtdCwgJmRlZiwgJnNjYXR0ZXJf c3JjX2R0KSkKKwl7CisJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCisJICAg IGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZl Y3RfbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJz Y2F0dGVyIHNvdXJjZSB1c2Ugbm90IHNpbXBsZS4iKTsKKwkgIHJldHVybiBm YWxzZTsKKwl9CisgICAgfQorCiAgIGlmICghdmVjX3N0bXQpIC8qIHRyYW5z Zm9ybWF0aW9uIG5vdCByZXF1aXJlZC4gICovCiAgICAgewogICAgICAgU1RN VF9WSU5GT19UWVBFIChzdG10X2luZm8pID0gc3RvcmVfdmVjX2luZm9fdHlw ZTsKQEAgLTUxODUsNiArNTIzMiwxNTAgQEAgdmVjdG9yaXphYmxlX3N0b3Jl IChnaW1wbGUgc3RtdCwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwgZ2lt cGxlICp2ZWNfc3RtdCwKIAogICBlbnN1cmVfYmFzZV9hbGlnbiAoc3RtdF9p bmZvLCBkcik7CiAKKyAgaWYgKFNUTVRfVklORk9fU0NBVFRFUl9QIChzdG10 X2luZm8pKQorICAgIHsKKyAgICAgIHRyZWUgdmVjX29wcm5kMCA9IE5VTExf VFJFRSwgdmVjX29wcm5kMSA9IE5VTExfVFJFRSwgb3AsIHNyYzsKKyAgICAg IHRyZWUgYXJnbGlzdCA9IFRZUEVfQVJHX1RZUEVTIChUUkVFX1RZUEUgKHNj YXR0ZXJfZGVjbCkpOworICAgICAgdHJlZSByZXR0eXBlLCBzcmN0eXBlLCBw dHJ0eXBlLCBpZHh0eXBlLCBtYXNrdHlwZSwgc2NhbGV0eXBlOworICAgICAg dHJlZSBwdHIsIG1hc2ssIHZhciwgc2NhbGUsIHBlcm1fbWFzayA9IE5VTExf VFJFRTsKKyAgICAgIGVkZ2UgcGUgPSBsb29wX3ByZWhlYWRlcl9lZGdlIChs b29wKTsKKyAgICAgIGdpbXBsZV9zZXEgc2VxOworICAgICAgYmFzaWNfYmxv Y2sgbmV3X2JiOworICAgICAgZW51bSB7IE5BUlJPVywgTk9ORSwgV0lERU4g fSBtb2RpZmllcjsKKyAgICAgIGludCBzY2F0dGVyX29mZl9udW5pdHMgPSBU WVBFX1ZFQ1RPUl9TVUJQQVJUUyAoc2NhdHRlcl9vZmZfdmVjdHlwZSk7CisK KyAgICAgIGlmIChudW5pdHMgPT0gc2NhdHRlcl9vZmZfbnVuaXRzKQorCW1v ZGlmaWVyID0gTk9ORTsKKyAgICAgIGVsc2UgaWYgKG51bml0cyA9PSBzY2F0 dGVyX29mZl9udW5pdHMgLyAyKQorCXsKKwkgIHVuc2lnbmVkIGNoYXIgKnNl bCA9IFhBTExPQ0FWRUMgKHVuc2lnbmVkIGNoYXIsIHNjYXR0ZXJfb2ZmX251 bml0cyk7CisJICBtb2RpZmllciA9IFdJREVOOworCisJICBmb3IgKGkgPSAw OyBpIDwgKHVuc2lnbmVkIGludCkgc2NhdHRlcl9vZmZfbnVuaXRzOyArK2kp CisJICAgIHNlbFtpXSA9IGkgfCBudW5pdHM7CisKKwkgIHBlcm1fbWFzayA9 IHZlY3RfZ2VuX3Blcm1fbWFza19jaGVja2VkIChzY2F0dGVyX29mZl92ZWN0 eXBlLCBzZWwpOworCSAgZ2NjX2Fzc2VydCAocGVybV9tYXNrICE9IE5VTExf VFJFRSk7CisJfQorICAgICAgZWxzZSBpZiAobnVuaXRzID09IHNjYXR0ZXJf b2ZmX251bml0cyAqIDIpCisJeworCSAgdW5zaWduZWQgY2hhciAqc2VsID0g WEFMTE9DQVZFQyAodW5zaWduZWQgY2hhciwgbnVuaXRzKTsKKwkgIG1vZGlm aWVyID0gTkFSUk9XOworCisJICBmb3IgKGkgPSAwOyBpIDwgKHVuc2lnbmVk IGludCkgbnVuaXRzOyArK2kpCisJICAgIHNlbFtpXSA9IGkgfCBzY2F0dGVy X29mZl9udW5pdHM7CisKKwkgIHBlcm1fbWFzayA9IHZlY3RfZ2VuX3Blcm1f bWFza19jaGVja2VkICh2ZWN0eXBlLCBzZWwpOworCSAgZ2NjX2Fzc2VydCAo cGVybV9tYXNrICE9IE5VTExfVFJFRSk7CisJICBuY29waWVzICo9IDI7CisJ fQorICAgICAgZWxzZQorCWdjY191bnJlYWNoYWJsZSAoKTsKKworICAgICAg cmV0dHlwZSA9IFRSRUVfVFlQRSAoVFJFRV9UWVBFIChzY2F0dGVyX2RlY2wp KTsKKyAgICAgIHB0cnR5cGUgPSBUUkVFX1ZBTFVFIChhcmdsaXN0KTsgYXJn bGlzdCA9IFRSRUVfQ0hBSU4gKGFyZ2xpc3QpOworICAgICAgbWFza3R5cGUg PSBUUkVFX1ZBTFVFIChhcmdsaXN0KTsgYXJnbGlzdCA9IFRSRUVfQ0hBSU4g KGFyZ2xpc3QpOworICAgICAgaWR4dHlwZSA9IFRSRUVfVkFMVUUgKGFyZ2xp c3QpOyBhcmdsaXN0ID0gVFJFRV9DSEFJTiAoYXJnbGlzdCk7CisgICAgICBz cmN0eXBlID0gVFJFRV9WQUxVRSAoYXJnbGlzdCk7IGFyZ2xpc3QgPSBUUkVF X0NIQUlOIChhcmdsaXN0KTsKKyAgICAgIHNjYWxldHlwZSA9IFRSRUVfVkFM VUUgKGFyZ2xpc3QpOworCisgICAgICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChU UkVFX0NPREUgKG1hc2t0eXBlKSA9PSBJTlRFR0VSX1RZUEUKKwkJCSAgICYm IFRSRUVfQ09ERSAocmV0dHlwZSkgPT0gVk9JRF9UWVBFKTsKKworICAgICAg cHRyID0gZm9sZF9jb252ZXJ0IChwdHJ0eXBlLCBzY2F0dGVyX2Jhc2UpOwor ICAgICAgaWYgKCFpc19naW1wbGVfbWluX2ludmFyaWFudCAocHRyKSkKKwl7 CisJICBwdHIgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAocHRyLCAmc2VxLCB0 cnVlLCBOVUxMX1RSRUUpOworCSAgbmV3X2JiID0gZ3NpX2luc2VydF9zZXFf b25fZWRnZV9pbW1lZGlhdGUgKHBlLCBzZXEpOworCSAgZ2NjX2Fzc2VydCAo IW5ld19iYik7CisJfQorCisgICAgICAvKiBDdXJyZW50bHkgd2Ugc3VwcG9y dCBvbmx5IHVuY29uZGl0aW9uYWwgc2NhdHRlciBzdG9yZXMsCisJIHNvIG1h c2sgc2hvdWxkIGJlIGFsbCBvbmVzLiAgKi8KKyAgICAgIG1hc2sgPSBidWls ZF9pbnRfY3N0IChtYXNrdHlwZSwgLTEpOworICAgICAgbWFzayA9IHZlY3Rf aW5pdF92ZWN0b3IgKHN0bXQsIG1hc2ssIG1hc2t0eXBlLCBOVUxMKTsKKwor ICAgICAgc2NhbGUgPSBidWlsZF9pbnRfY3N0IChzY2FsZXR5cGUsIHNjYXR0 ZXJfc2NhbGUpOworCisgICAgICBwcmV2X3N0bXRfaW5mbyA9IE5VTEw7Cisg ICAgICBmb3IgKGogPSAwOyBqIDwgbmNvcGllczsgKytqKQorCXsKKwkgIGlm IChqID09IDApCisJICAgIHsKKwkgICAgICBzcmMgPSB2ZWNfb3BybmQxCisJ CT0gdmVjdF9nZXRfdmVjX2RlZl9mb3Jfb3BlcmFuZCAoZ2ltcGxlX2Fzc2ln bl9yaHMxIChzdG10KSwgc3RtdCwgTlVMTCk7CisJICAgICAgb3AgPSB2ZWNf b3BybmQwCisJCT0gdmVjdF9nZXRfdmVjX2RlZl9mb3Jfb3BlcmFuZCAoc2Nh dHRlcl9vZmYsIHN0bXQsIE5VTEwpOworCSAgICB9CisJICBlbHNlIGlmICht b2RpZmllciAhPSBOT05FICYmIChqICYgMSkpCisJICAgIHsKKwkgICAgICBp ZiAobW9kaWZpZXIgPT0gV0lERU4pCisJCXsKKwkJICBzcmMgPSB2ZWNfb3By bmQxCisJCSAgICA9IHZlY3RfZ2V0X3ZlY19kZWZfZm9yX3N0bXRfY29weSAo c2NhdHRlcl9zcmNfZHQsIHZlY19vcHJuZDEpOworCQkgIG9wID0gcGVybXV0 ZV92ZWNfZWxlbWVudHMgKHZlY19vcHJuZDAsIHZlY19vcHJuZDAsIHBlcm1f bWFzaywKKwkJCQkJICAgICBzdG10LCBnc2kpOworCQl9CisJICAgICAgZWxz ZSBpZiAobW9kaWZpZXIgPT0gTkFSUk9XKQorCQl7CisJCSAgc3JjID0gcGVy bXV0ZV92ZWNfZWxlbWVudHMgKHZlY19vcHJuZDEsIHZlY19vcHJuZDEsIHBl cm1fbWFzaywKKwkJCQkJICAgICAgc3RtdCwgZ3NpKTsKKwkJICBvcCA9IHZl Y19vcHJuZDAKKwkJICAgID0gdmVjdF9nZXRfdmVjX2RlZl9mb3Jfc3RtdF9j b3B5IChzY2F0dGVyX2lkeF9kdCwgdmVjX29wcm5kMCk7CisJCX0KKwkgICAg ICBlbHNlCisJCWdjY191bnJlYWNoYWJsZSAoKTsKKwkgICAgfQorCSAgZWxz ZQorCSAgICB7CisJICAgICAgc3JjID0gdmVjX29wcm5kMQorCQk9IHZlY3Rf Z2V0X3ZlY19kZWZfZm9yX3N0bXRfY29weSAoc2NhdHRlcl9zcmNfZHQsIHZl Y19vcHJuZDEpOworCSAgICAgIG9wID0gdmVjX29wcm5kMAorCQk9IHZlY3Rf Z2V0X3ZlY19kZWZfZm9yX3N0bXRfY29weSAoc2NhdHRlcl9pZHhfZHQsIHZl Y19vcHJuZDApOworCSAgICB9CisKKwkgIGlmICghdXNlbGVzc190eXBlX2Nv bnZlcnNpb25fcCAoc3JjdHlwZSwgVFJFRV9UWVBFIChzcmMpKSkKKwkgICAg eworCSAgICAgIGdjY19hc3NlcnQgKFRZUEVfVkVDVE9SX1NVQlBBUlRTIChU UkVFX1RZUEUgKHNyYykpCisJCQkgID09IFRZUEVfVkVDVE9SX1NVQlBBUlRT IChzcmN0eXBlKSk7CisJICAgICAgdmFyID0gdmVjdF9nZXRfbmV3X3ZlY3Rf dmFyIChzcmN0eXBlLCB2ZWN0X3NpbXBsZV92YXIsIE5VTEwpOworCSAgICAg IHZhciA9IG1ha2Vfc3NhX25hbWUgKHZhciwgTlVMTCk7CisJICAgICAgc3Jj ID0gYnVpbGQxIChWSUVXX0NPTlZFUlRfRVhQUiwgc3JjdHlwZSwgc3JjKTsK KwkgICAgICBuZXdfc3RtdAorCQk9IGdpbXBsZV9idWlsZF9hc3NpZ24gKHZh ciwgVklFV19DT05WRVJUX0VYUFIsCisJCQkJCQlzcmMsIE5VTExfVFJFRSk7 CisJICAgICAgdmVjdF9maW5pc2hfc3RtdF9nZW5lcmF0aW9uIChzdG10LCBu ZXdfc3RtdCwgZ3NpKTsKKwkgICAgICBzcmMgPSB2YXI7CisJICAgIH0KKwor CSAgaWYgKCF1c2VsZXNzX3R5cGVfY29udmVyc2lvbl9wIChpZHh0eXBlLCBU UkVFX1RZUEUgKG9wKSkpCisJICAgIHsKKwkgICAgICBnY2NfYXNzZXJ0IChU WVBFX1ZFQ1RPUl9TVUJQQVJUUyAoVFJFRV9UWVBFIChvcCkpCisJCQkgID09 IFRZUEVfVkVDVE9SX1NVQlBBUlRTIChpZHh0eXBlKSk7CisJICAgICAgdmFy ID0gdmVjdF9nZXRfbmV3X3ZlY3RfdmFyIChpZHh0eXBlLCB2ZWN0X3NpbXBs ZV92YXIsIE5VTEwpOworCSAgICAgIHZhciA9IG1ha2Vfc3NhX25hbWUgKHZh ciwgTlVMTCk7CisJICAgICAgb3AgPSBidWlsZDEgKFZJRVdfQ09OVkVSVF9F WFBSLCBpZHh0eXBlLCBvcCk7CisJICAgICAgbmV3X3N0bXQKKwkJPSBnaW1w bGVfYnVpbGRfYXNzaWduICh2YXIsIFZJRVdfQ09OVkVSVF9FWFBSLAorCQkJ CQkJb3AsIE5VTExfVFJFRSk7CisJICAgICAgdmVjdF9maW5pc2hfc3RtdF9n ZW5lcmF0aW9uIChzdG10LCBuZXdfc3RtdCwgZ3NpKTsKKwkgICAgICBvcCA9 IHZhcjsKKwkgICAgfQorCisJICBuZXdfc3RtdAorCSAgICA9IGdpbXBsZV9i dWlsZF9jYWxsIChzY2F0dGVyX2RlY2wsIDUsIHB0ciwgbWFzaywgb3AsIHNy Yywgc2NhbGUpOworCisJICB2ZWN0X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24g KHN0bXQsIG5ld19zdG10LCBnc2kpOworCisJICBpZiAocHJldl9zdG10X2lu Zm8gPT0gTlVMTCkKKwkgICAgU1RNVF9WSU5GT19WRUNfU1RNVCAoc3RtdF9p bmZvKSA9ICp2ZWNfc3RtdCA9IG5ld19zdG10OworCSAgZWxzZQorCSAgICBT VE1UX1ZJTkZPX1JFTEFURURfU1RNVCAocHJldl9zdG10X2luZm8pID0gbmV3 X3N0bXQ7CisJICBwcmV2X3N0bXRfaW5mbyA9IHZpbmZvX2Zvcl9zdG10IChu ZXdfc3RtdCk7CisJfQorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAg IGlmIChncm91cGVkX3N0b3JlKQogICAgIHsKICAgICAgIGZpcnN0X2RyID0g U1RNVF9WSU5GT19EQVRBX1JFRiAodmluZm9fZm9yX3N0bXQgKGZpcnN0X3N0 bXQpKTsKQEAgLTUyOTIsOCArNTQ4Myw2IEBAIHZlY3Rvcml6YWJsZV9zdG9y ZSAoZ2ltcGxlIHN0bXQsIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksIGdp bXBsZSAqdmVjX3N0bXQsCiAgIHByZXZfc3RtdF9pbmZvID0gTlVMTDsKICAg Zm9yIChqID0gMDsgaiA8IG5jb3BpZXM7IGorKykKICAgICB7Ci0gICAgICBn aW1wbGUgbmV3X3N0bXQ7Ci0KICAgICAgIGlmIChqID09IDApCiAJewogICAg ICAgICAgIGlmIChzbHApCkBAIC01NTU3LDEwICs1NzQ2LDEyIEBAIHBlcm11 dGVfdmVjX2VsZW1lbnRzICh0cmVlIHgsIHRyZWUgeSwgdHJlZSBtYXNrX3Zl YywgZ2ltcGxlIHN0bXQsCiB7CiAgIHRyZWUgdmVjdHlwZSA9IFRSRUVfVFlQ RSAoeCk7CiAgIHRyZWUgcGVybV9kZXN0LCBkYXRhX3JlZjsKKyAgdHJlZSBz Y2FsYXJfZGVzdCA9IFRSRUVfQ09ERSAoZ2ltcGxlX2Fzc2lnbl9saHMgKHN0 bXQpKSA9PSBTU0FfTkFNRQorCQkgICAgID8gZ2ltcGxlX2Fzc2lnbl9saHMg KHN0bXQpIDogeDsKICAgZ2ltcGxlIHBlcm1fc3RtdDsKIAotICBwZXJtX2Rl c3QgPSB2ZWN0X2NyZWF0ZV9kZXN0aW5hdGlvbl92YXIgKGdpbXBsZV9nZXRf bGhzIChzdG10KSwgdmVjdHlwZSk7Ci0gIGRhdGFfcmVmID0gbWFrZV9zc2Ff bmFtZSAocGVybV9kZXN0KTsKKyAgcGVybV9kZXN0ID0gdmVjdF9jcmVhdGVf ZGVzdGluYXRpb25fdmFyIChzY2FsYXJfZGVzdCwgdmVjdHlwZSk7CisgIGRh dGFfcmVmID0gbWFrZV9zc2FfbmFtZSAocGVybV9kZXN0LCBOVUxMKTsKIAog ICAvKiBHZW5lcmF0ZSB0aGUgcGVybXV0ZSBzdGF0ZW1lbnQuICAqLwogICBw ZXJtX3N0bXQgPSBnaW1wbGVfYnVpbGRfYXNzaWduIChkYXRhX3JlZiwgVkVD X1BFUk1fRVhQUiwgeCwgeSwgbWFza192ZWMpOwpAQCAtNTgxOCw4ICs2MDA5 LDggQEAgdmVjdG9yaXphYmxlX2xvYWQgKGdpbXBsZSBzdG10LCBnaW1wbGVf c3RtdF9pdGVyYXRvciAqZ3NpLCBnaW1wbGUgKnZlY19zdG10LAogICAgIHsK ICAgICAgIGdpbXBsZSBkZWZfc3RtdDsKICAgICAgIHRyZWUgZGVmOwotICAg ICAgZ2F0aGVyX2RlY2wgPSB2ZWN0X2NoZWNrX2dhdGhlciAoc3RtdCwgbG9v cF92aW5mbywgJmdhdGhlcl9iYXNlLAotCQkJCSAgICAgICAmZ2F0aGVyX29m ZiwgJmdhdGhlcl9zY2FsZSk7CisgICAgICBnYXRoZXJfZGVjbCA9IHZlY3Rf Y2hlY2tfZ2F0aGVyX3NjYXR0ZXIgKHN0bXQsIGxvb3BfdmluZm8sICZnYXRo ZXJfYmFzZSwKKwkJCQkJICAgICAgICZnYXRoZXJfb2ZmLCAmZ2F0aGVyX3Nj YWxlLCB0cnVlKTsKICAgICAgIGdjY19hc3NlcnQgKGdhdGhlcl9kZWNsKTsK ICAgICAgIGlmICghdmVjdF9pc19zaW1wbGVfdXNlXzEgKGdhdGhlcl9vZmYs IE5VTEwsIGxvb3BfdmluZm8sIGJiX3ZpbmZvLAogCQkJCSAmZGVmX3N0bXQs ICZkZWYsICZnYXRoZXJfZHQsCmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0 b3JpemVyLmggYi9nY2MvdHJlZS12ZWN0b3JpemVyLmgKaW5kZXggMGVkZTYy My4uYjVlZjlkNSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdG9yaXplci5o CisrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuaApAQCAtNjUwLDYgKzY1MCw5 IEBAIHR5cGVkZWYgc3RydWN0IF9zdG10X3ZlY19pbmZvIHsKICAgYm9vbCBn YXRoZXJfcDsKICAgYm9vbCBzdHJpZGVfbG9hZF9wOwogCisgIC8qIEZvciBz dG9yZXMgb25seSwgdHJ1ZSBpZiB0aGlzIGlzIGEgc2NhdHRlciBzdG9yZS4g ICovCisgIGJvb2wgc2NhdHRlcl9wOworCiAgIC8qIEZvciBib3RoIGxvYWRz IGFuZCBzdG9yZXMuICAqLwogICBib29sIHNpbWRfbGFuZV9hY2Nlc3NfcDsK IH0gKnN0bXRfdmVjX2luZm87CkBAIC02NjcsNiArNjcwLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgX3N0bXRfdmVjX2luZm8gewogI2RlZmluZSBTVE1UX1ZJTkZP X0RBVEFfUkVGKFMpICAgICAgICAgICAgIChTKS0+ZGF0YV9yZWZfaW5mbwog I2RlZmluZSBTVE1UX1ZJTkZPX0dBVEhFUl9QKFMpCQkgICAoUyktPmdhdGhl cl9wCiAjZGVmaW5lIFNUTVRfVklORk9fU1RSSURFX0xPQURfUChTKQkgICAo UyktPnN0cmlkZV9sb2FkX3AKKyNkZWZpbmUgU1RNVF9WSU5GT19TQ0FUVEVS X1AoUykJCSAgIChTKS0+c2NhdHRlcl9wCiAjZGVmaW5lIFNUTVRfVklORk9f U0lNRF9MQU5FX0FDQ0VTU19QKFMpICAgKFMpLT5zaW1kX2xhbmVfYWNjZXNz X3AKIAogI2RlZmluZSBTVE1UX1ZJTkZPX0RSX0JBU0VfQUREUkVTUyhTKSAg ICAgIChTKS0+ZHJfYmFzZV9hZGRyZXNzCkBAIC0xMDU4LDEwICsxMDYyLDEx IEBAIGV4dGVybiBib29sIHZlY3RfYW5hbHl6ZV9kYXRhX3JlZnNfYWxpZ25t ZW50IChsb29wX3ZlY19pbmZvLCBiYl92ZWNfaW5mbyk7CiBleHRlcm4gYm9v bCB2ZWN0X3ZlcmlmeV9kYXRhcmVmc19hbGlnbm1lbnQgKGxvb3BfdmVjX2lu Zm8sIGJiX3ZlY19pbmZvKTsKIGV4dGVybiBib29sIHZlY3RfYW5hbHl6ZV9k YXRhX3JlZl9hY2Nlc3NlcyAobG9vcF92ZWNfaW5mbywgYmJfdmVjX2luZm8p OwogZXh0ZXJuIGJvb2wgdmVjdF9wcnVuZV9ydW50aW1lX2FsaWFzX3Rlc3Rf bGlzdCAobG9vcF92ZWNfaW5mbyk7Ci1leHRlcm4gdHJlZSB2ZWN0X2NoZWNr X2dhdGhlciAoZ2ltcGxlLCBsb29wX3ZlY19pbmZvLCB0cmVlICosIHRyZWUg KiwKLQkJCSAgICAgICBpbnQgKik7CitleHRlcm4gdHJlZSB2ZWN0X2NoZWNr X2dhdGhlcl9zY2F0dGVyIChnaW1wbGUsIGxvb3BfdmVjX2luZm8sIHRyZWUg KiwKKwkJCQkgICAgICAgdHJlZSAqLCBpbnQgKiwgYm9vbCk7CiBleHRlcm4g Ym9vbCB2ZWN0X2FuYWx5emVfZGF0YV9yZWZzIChsb29wX3ZlY19pbmZvLCBi Yl92ZWNfaW5mbywgaW50ICosCi0JCQkJICAgIHVuc2lnbmVkICopOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqKTsK K2V4dGVybiBib29sIHZlY3RfYW5hbHl6ZV9kYXRhX3JlZnMgKGxvb3BfdmVj X2luZm8sIGJiX3ZlY19pbmZvLCBpbnQgKik7CiBleHRlcm4gdHJlZSB2ZWN0 X2NyZWF0ZV9kYXRhX3JlZl9wdHIgKGdpbXBsZSwgdHJlZSwgc3RydWN0IGxv b3AgKiwgdHJlZSwKIAkJCQkgICAgICB0cmVlICosIGdpbXBsZV9zdG10X2l0 ZXJhdG9yICosCiAJCQkJICAgICAgZ2ltcGxlICosIGJvb2wsIGJvb2wgKiwK --089e0158c9665ee338051087db1f--