From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32651 invoked by alias); 11 Nov 2014 15:09:10 -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 32636 invoked by uid 89); 11 Nov 2014 15:09:09 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.2 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail2-relais-roc.national.inria.fr Received: from mail2-relais-roc.national.inria.fr (HELO mail2-relais-roc.national.inria.fr) (192.134.164.83) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Tue, 11 Nov 2014 15:09:05 +0000 Received: from stedding.saclay.inria.fr (HELO stedding) ([193.55.250.194]) by mail2-relais-roc.national.inria.fr with ESMTP/TLS/AES128-SHA; 11 Nov 2014 16:09:01 +0100 Received: from glisse (helo=localhost) by stedding with local-esmtp (Exim 4.84) (envelope-from ) id 1XoD41-0005yJ-7t; Tue, 11 Nov 2014 16:09:01 +0100 Date: Tue, 11 Nov 2014 15:11:00 -0000 From: Marc Glisse To: gcc-patches@gcc.gnu.org cc: ubizjak@gmail.com Subject: [x86, merge] Replace builtins with vector extensions Message-ID: User-Agent: Alpine 2.02 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-102622583-1415718541=:22919" X-SW-Source: 2014-11/txt/msg01018.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-102622583-1415718541=:22919 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII Content-length: 2816 Hello, here is the combined patch+ChangeLog. I'll run a last regtest just before committing. Ok for trunk? 2014-11-12 Marc Glisse gcc/ * config/i386/xmmintrin.h (_mm_add_ps, _mm_sub_ps, _mm_mul_ps, _mm_div_ps, _mm_store_ss, _mm_cvtss_f32): Use vector extensions instead of builtins. * config/i386/emmintrin.h (__v2du, __v4su, __v8hu, __v16qu): New typedefs. (_mm_sqrt_sd): Fix comment. (_mm_add_epi8, _mm_add_epi16, _mm_add_epi32, _mm_add_epi64, _mm_sub_epi8, _mm_sub_epi16, _mm_sub_epi32, _mm_sub_epi64, _mm_mullo_epi16, _mm_cmpeq_epi8, _mm_cmpeq_epi16, _mm_cmpeq_epi32, _mm_cmplt_epi8, _mm_cmplt_epi16, _mm_cmplt_epi32, _mm_cmpgt_epi8, _mm_cmpgt_epi16, _mm_cmpgt_epi32, _mm_and_si128, _mm_or_si128, _mm_xor_si128, _mm_store_sd, _mm_cvtsd_f64, _mm_storeh_pd, _mm_cvtsi128_si64, _mm_cvtsi128_si64x, _mm_add_pd, _mm_sub_pd, _mm_mul_pd, _mm_div_pd, _mm_storel_epi64, _mm_movepi64_pi64): Use vector extensions instead of builtins. * config/i386/smmintrin.h (_mm_cmpeq_epi64, _mm_cmpgt_epi64, _mm_mullo_epi32): Likewise. * config/i386/avxintrin.h (__v4du, __v8su, __v16hu, __v32qu): New typedefs. (_mm256_add_pd, _mm256_add_ps, _mm256_div_pd, _mm256_div_ps, _mm256_mul_pd, _mm256_mul_ps, _mm256_sub_pd, _mm256_sub_ps): Use vector extensions instead of builtins. * config/i386/avx2intrin.h (_mm256_cmpeq_epi8, _mm256_cmpeq_epi16, _mm256_cmpeq_epi32, _mm256_cmpeq_epi64, _mm256_cmpgt_epi8, _mm256_cmpgt_epi16, _mm256_cmpgt_epi32, _mm256_cmpgt_epi64, _mm256_and_si256, _mm256_or_si256, _mm256_xor_si256, _mm256_add_epi8, _mm256_add_epi16, _mm256_add_epi32, _mm256_add_epi64, _mm256_mullo_epi16, _mm256_mullo_epi32, _mm256_sub_epi8, _mm256_sub_epi16, _mm256_sub_epi32, _mm256_sub_epi64): Likewise. * config/i386/avx512fintrin.h (__v8du, __v16su, __v32hu, __v64qu): New typedefs. (_mm512_or_si512, _mm512_or_epi32, _mm512_or_epi64, _mm512_xor_si512, _mm512_xor_epi32, _mm512_xor_epi64, _mm512_and_si512, _mm512_and_epi32, _mm512_and_epi64, _mm512_mullo_epi32, _mm512_add_epi64, _mm512_sub_epi64, _mm512_add_epi32, _mm512_sub_epi32, _mm512_add_pd, _mm512_add_ps, _mm512_sub_pd, _mm512_sub_ps, _mm512_mul_pd, _mm512_mul_ps, _mm512_div_pd, _mm512_div_ps): Use vector extensions instead of builtins. * config/i386/avx512bwintrin.h (_mm512_mullo_epi16, _mm512_add_epi8, _mm512_sub_epi8, _mm512_sub_epi16, _mm512_add_epi16): Likewise. * config/i386/avx512dqintrin.h (_mm512_mullo_epi64): Likewise. * config/i386/avx512vldqintrin.h (_mm256_mullo_epi64, _mm_mullo_epi64): Likewise. gcc/testsuite/ * gcc.target/i386/intrinsics_opt-1.c: New testcase. * gcc.target/i386/intrinsics_opt-2.c: Likewise. * gcc.target/i386/intrinsics_opt-3.c: Likewise. * gcc.target/i386/intrinsics_opt-4.c: Likewise. -- Marc Glisse --8323329-102622583-1415718541=:22919 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=p11 Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: inline; filename=p11 Content-length: 55132 ZGlmZiAtcnUgLU4gLXggLnN2biB0cnVuay9nY2MvY29uZmlnL2kzODYvYXZ4 MmludHJpbi5oIGludHJpbi9nY2MvY29uZmlnL2kzODYvYXZ4MmludHJpbi5o DQotLS0gdHJ1bmsvZ2NjL2NvbmZpZy9pMzg2L2F2eDJpbnRyaW4uaAkyMDE0 LTA0LTAxIDA3OjM0OjA2LjMzNTg3ODg2MCArMDIwMA0KKysrIGludHJpbi9n Y2MvY29uZmlnL2kzODYvYXZ4MmludHJpbi5oCTIwMTQtMTEtMTAgMjE6NTY6 MzcuMDQwNzE5ODEwICswMTAwDQpAQCAtMTA0LDI4ICsxMDQsMjggQEANCiBf X2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21tMjU2X2FkZF9lcGk4IChfX20y NTZpIF9fQSwgX19tMjU2aSBfX0IpDQogew0KLSAgcmV0dXJuIChfX20yNTZp KV9fYnVpbHRpbl9pYTMyX3BhZGRiMjU2ICgoX192MzJxaSlfX0EsIChfX3Yz MnFpKV9fQik7DQorICByZXR1cm4gKF9fbTI1NmkpICgoX192MzJxdSlfX0Eg KyAoX192MzJxdSlfX0IpOw0KIH0NCiANCiBleHRlcm4gX19pbmxpbmUgX19t MjU2aQ0KIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW0yNTZfYWRkX2Vw aTE2IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpDQogew0KLSAgcmV0dXJu IChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhZGR3MjU2ICgoX192MTZoaSlf X0EsIChfX3YxNmhpKV9fQik7DQorICByZXR1cm4gKF9fbTI1NmkpICgoX192 MTZodSlfX0EgKyAoX192MTZodSlfX0IpOw0KIH0NCiANCiBleHRlcm4gX19p bmxpbmUgX19tMjU2aQ0KIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVf XywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW0y NTZfYWRkX2VwaTMyIChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpDQogew0K LSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhZGRkMjU2ICgo X192OHNpKV9fQSwgKF9fdjhzaSlfX0IpOw0KKyAgcmV0dXJuIChfX20yNTZp KSAoKF9fdjhzdSlfX0EgKyAoX192OHN1KV9fQik7DQogfQ0KIA0KIGV4dGVy biBfX2lubGluZSBfX20yNTZpDQogX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lu bGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0K IF9tbTI1Nl9hZGRfZXBpNjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikN CiB7DQotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGFkZHEy NTYgKChfX3Y0ZGkpX19BLCAoX192NGRpKV9fQik7DQorICByZXR1cm4gKF9f bTI1NmkpICgoX192NGR1KV9fQSArIChfX3Y0ZHUpX19CKTsNCiB9DQogDQog ZXh0ZXJuIF9faW5saW5lIF9fbTI1NmkNCkBAIC0xNzgsNyArMTc4LDcgQEAN CiBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21tMjU2X2FuZF9zaTI1NiAo X19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQ0KIHsNCi0gIHJldHVybiAoX19t MjU2aSkgX19idWlsdGluX2lhMzJfYW5kc2kyNTYgKChfX3Y0ZGkpX19BLCAo X192NGRpKV9fQik7DQorICByZXR1cm4gKF9fbTI1NmkpICgoX192NGR1KV9f QSAmIChfX3Y0ZHUpX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9f bTI1NmkNCkBAIC0yMzAsNTkgKzIzMCw1NiBAQA0KIF9fYXR0cmlidXRlX18g KChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkNCiBfbW0yNTZfY21wZXFfZXBpOCAoX19tMjU2aSBfX0EsIF9f bTI1NmkgX19CKQ0KIHsNCi0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5f aWEzMl9wY21wZXFiMjU2ICgoX192MzJxaSlfX0EsIChfX3YzMnFpKV9fQik7 DQorICByZXR1cm4gKF9fbTI1NmkpICgoX192MzJxaSlfX0EgPT0gKF9fdjMy cWkpX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTI1NmkNCiBf X2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21tMjU2X2NtcGVxX2VwaTE2IChf X20yNTZpIF9fQSwgX19tMjU2aSBfX0IpDQogew0KLSAgcmV0dXJuIChfX20y NTZpKV9fYnVpbHRpbl9pYTMyX3BjbXBlcXcyNTYgKChfX3YxNmhpKV9fQSwg KF9fdjE2aGkpX19CKTsNCisgIHJldHVybiAoX19tMjU2aSkgKChfX3YxNmhp KV9fQSA9PSAoX192MTZoaSlfX0IpOw0KIH0NCiANCiBleHRlcm4gX19pbmxp bmUgX19tMjU2aQ0KIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywg X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW0yNTZf Y21wZXFfZXBpMzIgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikNCiB7DQot ICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGNtcGVxZDI1NiAo KF9fdjhzaSlfX0EsIChfX3Y4c2kpX19CKTsNCisgIHJldHVybiAoX19tMjU2 aSkgKChfX3Y4c2kpX19BID09IChfX3Y4c2kpX19CKTsNCiB9DQogDQogZXh0 ZXJuIF9faW5saW5lIF9fbTI1NmkNCiBfX2F0dHJpYnV0ZV9fICgoX19nbnVf aW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp DQogX21tMjU2X2NtcGVxX2VwaTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBf X0IpDQogew0KLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Bj bXBlcXEyNTYgKChfX3Y0ZGkpX19BLCAoX192NGRpKV9fQik7DQorICByZXR1 cm4gKF9fbTI1NmkpICgoX192NGRpKV9fQSA9PSAoX192NGRpKV9fQik7DQog fQ0KIA0KIGV4dGVybiBfX2lubGluZSBfX20yNTZpDQogX19hdHRyaWJ1dGVf XyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQ0KIF9tbTI1Nl9jbXBndF9lcGk4IChfX20yNTZpIF9fQSwg X19tMjU2aSBfX0IpDQogew0KLSAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRp bl9pYTMyX3BjbXBndGIyNTYgKChfX3YzMnFpKV9fQSwNCi0JCQkJCSAgICAg KF9fdjMycWkpX19CKTsNCisgIHJldHVybiAoX19tMjU2aSkgKChfX3YzMnFp KV9fQSA+IChfX3YzMnFpKV9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGlu ZSBfX20yNTZpDQogX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbTI1Nl9j bXBndF9lcGkxNiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQ0KIHsNCi0g IHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wY21wZ3R3MjU2ICgo X192MTZoaSlfX0EsDQotCQkJCQkgICAgIChfX3YxNmhpKV9fQik7DQorICBy ZXR1cm4gKF9fbTI1NmkpICgoX192MTZoaSlfX0EgPiAoX192MTZoaSlfX0Ip Ow0KIH0NCiANCiBleHRlcm4gX19pbmxpbmUgX19tMjU2aQ0KIF9fYXR0cmli dXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9f YXJ0aWZpY2lhbF9fKSkNCiBfbW0yNTZfY21wZ3RfZXBpMzIgKF9fbTI1Nmkg X19BLCBfX20yNTZpIF9fQikNCiB7DQotICByZXR1cm4gKF9fbTI1NmkpX19i dWlsdGluX2lhMzJfcGNtcGd0ZDI1NiAoKF9fdjhzaSlfX0EsDQotCQkJCQkg ICAgIChfX3Y4c2kpX19CKTsNCisgIHJldHVybiAoX19tMjU2aSkgKChfX3Y4 c2kpX19BID4gKF9fdjhzaSlfX0IpOw0KIH0NCiANCiBleHRlcm4gX19pbmxp bmUgX19tMjU2aQ0KIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywg X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW0yNTZf Y21wZ3RfZXBpNjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikNCiB7DQot ICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGNtcGd0cTI1NiAo KF9fdjRkaSlfX0EsIChfX3Y0ZGkpX19CKTsNCisgIHJldHVybiAoX19tMjU2 aSkgKChfX3Y0ZGkpX19BID4gKF9fdjRkaSlfX0IpOw0KIH0NCiANCiBleHRl cm4gX19pbmxpbmUgX19tMjU2aQ0KQEAgLTU1NSwxNCArNTUyLDE0IEBADQog X19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbTI1Nl9tdWxsb19lcGkxNiAo X19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQ0KIHsNCi0gIHJldHVybiAoX19t MjU2aSlfX2J1aWx0aW5faWEzMl9wbXVsbHcyNTYgKChfX3YxNmhpKV9fQSwg KF9fdjE2aGkpX19CKTsNCisgIHJldHVybiAoX19tMjU2aSkgKChfX3YxNmh1 KV9fQSAqIChfX3YxNmh1KV9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGlu ZSBfX20yNTZpDQogX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbTI1Nl9t dWxsb19lcGkzMiAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQ0KIHsNCi0g IHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbXVsbGQyNTYgKChf X3Y4c2kpX19BLCAoX192OHNpKV9fQik7DQorICByZXR1cm4gKF9fbTI1Nmkp ICgoX192OHN1KV9fQSAqIChfX3Y4c3UpX19CKTsNCiB9DQogDQogZXh0ZXJu IF9faW5saW5lIF9fbTI1NmkNCkBAIC01NzYsNyArNTczLDcgQEANCiBfX2F0 dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpDQogX21tMjU2X29yX3NpMjU2IChfX20yNTZp IF9fQSwgX19tMjU2aSBfX0IpDQogew0KLSAgcmV0dXJuIChfX20yNTZpKV9f YnVpbHRpbl9pYTMyX3BvcjI1NiAoKF9fdjRkaSlfX0EsIChfX3Y0ZGkpX19C KTsNCisgIHJldHVybiAoX19tMjU2aSkgKChfX3Y0ZHUpX19BIHwgKF9fdjRk dSlfX0IpOw0KIH0NCiANCiBleHRlcm4gX19pbmxpbmUgX19tMjU2aQ0KQEAg LTc4NSwyOCArNzgyLDI4IEBADQogX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lu bGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0K IF9tbTI1Nl9zdWJfZXBpOCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQ0K IHsNCi0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3ViYjI1 NiAoKF9fdjMycWkpX19BLCAoX192MzJxaSlfX0IpOw0KKyAgcmV0dXJuIChf X20yNTZpKSAoKF9fdjMycXUpX19BIC0gKF9fdjMycXUpX19CKTsNCiB9DQog DQogZXh0ZXJuIF9faW5saW5lIF9fbTI1NmkNCiBfX2F0dHJpYnV0ZV9fICgo X19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpDQogX21tMjU2X3N1Yl9lcGkxNiAoX19tMjU2aSBfX0EsIF9fbTI1 NmkgX19CKQ0KIHsNCi0gIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEz Ml9wc3VidzI1NiAoKF9fdjE2aGkpX19BLCAoX192MTZoaSlfX0IpOw0KKyAg cmV0dXJuIChfX20yNTZpKSAoKF9fdjE2aHUpX19BIC0gKF9fdjE2aHUpX19C KTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTI1NmkNCiBfX2F0dHJp YnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpDQogX21tMjU2X3N1Yl9lcGkzMiAoX19tMjU2aSBf X0EsIF9fbTI1NmkgX19CKQ0KIHsNCi0gIHJldHVybiAoX19tMjU2aSlfX2J1 aWx0aW5faWEzMl9wc3ViZDI1NiAoKF9fdjhzaSlfX0EsIChfX3Y4c2kpX19C KTsNCisgIHJldHVybiAoX19tMjU2aSkgKChfX3Y4c3UpX19BIC0gKF9fdjhz dSlfX0IpOw0KIH0NCiANCiBleHRlcm4gX19pbmxpbmUgX19tMjU2aQ0KIF9f YXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW0yNTZfc3ViX2VwaTY0IChfX20y NTZpIF9fQSwgX19tMjU2aSBfX0IpDQogew0KLSAgcmV0dXJuIChfX20yNTZp KV9fYnVpbHRpbl9pYTMyX3BzdWJxMjU2ICgoX192NGRpKV9fQSwgKF9fdjRk aSlfX0IpOw0KKyAgcmV0dXJuIChfX20yNTZpKSAoKF9fdjRkdSlfX0EgLSAo X192NGR1KV9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSBfX20yNTZp DQpAQCAtODk3LDcgKzg5NCw3IEBADQogX19hdHRyaWJ1dGVfXyAoKF9fZ251 X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQ0KIF9tbTI1Nl94b3Jfc2kyNTYgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9f QikNCiB7DQotICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHhv cjI1NiAoKF9fdjRkaSlfX0EsIChfX3Y0ZGkpX19CKTsNCisgIHJldHVybiAo X19tMjU2aSkgKChfX3Y0ZHUpX19BIF4gKF9fdjRkdSlfX0IpOw0KIH0NCiAN CiBleHRlcm4gX19pbmxpbmUgX19tMjU2aQ0KZGlmZiAtcnUgLU4gLXggLnN2 biB0cnVuay9nY2MvY29uZmlnL2kzODYvYXZ4NTEyYndpbnRyaW4uaCBpbnRy aW4vZ2NjL2NvbmZpZy9pMzg2L2F2eDUxMmJ3aW50cmluLmgNCi0tLSB0cnVu ay9nY2MvY29uZmlnL2kzODYvYXZ4NTEyYndpbnRyaW4uaAkyMDE0LTExLTAy IDIzOjIwOjQ3Ljc1NDg3NjE4NSArMDEwMA0KKysrIGludHJpbi9nY2MvY29u ZmlnL2kzODYvYXZ4NTEyYndpbnRyaW4uaAkyMDE0LTExLTA4IDA3OjA2OjUz Ljg5Njk4NDQyNiArMDEwMA0KQEAgLTQ2NCwxMSArNDY0LDcgQEANCiBfX2F0 dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpDQogX21tNTEyX211bGxvX2VwaTE2IChfX201 MTJpIF9fQSwgX19tNTEyaSBfX0IpDQogew0KLSAgcmV0dXJuIChfX201MTJp KSBfX2J1aWx0aW5faWEzMl9wbXVsbHc1MTJfbWFzayAoKF9fdjMyaGkpIF9f QSwNCi0JCQkJCQkgIChfX3YzMmhpKSBfX0IsDQotCQkJCQkJICAoX192MzJo aSkNCi0JCQkJCQkgIF9tbTUxMl9zZXR6ZXJvX2hpICgpLA0KLQkJCQkJCSAg KF9fbW1hc2szMikgLTEpOw0KKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjMy aHUpIF9fQSAqIChfX3YzMmh1KSBfX0IpOw0KIH0NCiANCiBleHRlcm4gX19p bmxpbmUgX19tNTEyaQ0KQEAgLTY3MywxMSArNjY5LDcgQEANCiBfX2F0dHJp YnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpDQogX21tNTEyX2FkZF9lcGk4IChfX201MTJpIF9f QSwgX19tNTEyaSBfX0IpDQogew0KLSAgcmV0dXJuIChfX201MTJpKSBfX2J1 aWx0aW5faWEzMl9wYWRkYjUxMl9tYXNrICgoX192NjRxaSkgX19BLA0KLQkJ CQkJCSAoX192NjRxaSkgX19CLA0KLQkJCQkJCSAoX192NjRxaSkNCi0JCQkJ CQkgX21tNTEyX3NldHplcm9fcWkgKCksDQotCQkJCQkJIChfX21tYXNrNjQp IC0xKTsNCisgIHJldHVybiAoX19tNTEyaSkgKChfX3Y2NHF1KSBfX0EgKyAo X192NjRxdSkgX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTUx MmkNCkBAIC03MDYsMTEgKzY5OCw3IEBADQogX19hdHRyaWJ1dGVfXyAoKF9f Z251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFs X18pKQ0KIF9tbTUxMl9zdWJfZXBpOCAoX19tNTEyaSBfX0EsIF9fbTUxMmkg X19CKQ0KIHsNCi0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJf cHN1YmI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwNCi0JCQkJCQkgKF9fdjY0 cWkpIF9fQiwNCi0JCQkJCQkgKF9fdjY0cWkpDQotCQkJCQkJIF9tbTUxMl9z ZXR6ZXJvX3FpICgpLA0KLQkJCQkJCSAoX19tbWFzazY0KSAtMSk7DQorICBy ZXR1cm4gKF9fbTUxMmkpICgoX192NjRxdSkgX19BIC0gKF9fdjY0cXUpIF9f Qik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSBfX201MTJpDQpAQCAtOTA0 LDExICs4OTIsNyBAQA0KIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVf XywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW01 MTJfc3ViX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpDQogew0K LSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidzUxMl9t YXNrICgoX192MzJoaSkgX19BLA0KLQkJCQkJCSAoX192MzJoaSkgX19CLA0K LQkJCQkJCSAoX192MzJoaSkNCi0JCQkJCQkgX21tNTEyX3NldHplcm9faGkg KCksDQotCQkJCQkJIChfX21tYXNrMzIpIC0xKTsNCisgIHJldHVybiAoX19t NTEyaSkgKChfX3YzMmh1KSBfX0EgLSAoX192MzJodSkgX19CKTsNCiB9DQog DQogZXh0ZXJuIF9faW5saW5lIF9fbTUxMmkNCkBAIC0xMDAzLDExICs5ODcs NyBAQA0KIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW01MTJfYWRkX2Vw aTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpDQogew0KLSAgcmV0dXJu IChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdzUxMl9tYXNrICgoX192 MzJoaSkgX19BLA0KLQkJCQkJCSAoX192MzJoaSkgX19CLA0KLQkJCQkJCSAo X192MzJoaSkNCi0JCQkJCQkgX21tNTEyX3NldHplcm9faGkgKCksDQotCQkJ CQkJIChfX21tYXNrMzIpIC0xKTsNCisgIHJldHVybiAoX19tNTEyaSkgKChf X3YzMmh1KSBfX0EgKyAoX192MzJodSkgX19CKTsNCiB9DQogDQogZXh0ZXJu IF9faW5saW5lIF9fbTUxMmkNCmRpZmYgLXJ1IC1OIC14IC5zdm4gdHJ1bmsv Z2NjL2NvbmZpZy9pMzg2L2F2eDUxMmRxaW50cmluLmggaW50cmluL2djYy9j b25maWcvaTM4Ni9hdng1MTJkcWludHJpbi5oDQotLS0gdHJ1bmsvZ2NjL2Nv bmZpZy9pMzg2L2F2eDUxMmRxaW50cmluLmgJMjAxNC0xMS0wMiAyMzoyMDo0 Ny43NTQ4NzYxODUgKzAxMDANCisrKyBpbnRyaW4vZ2NjL2NvbmZpZy9pMzg2 L2F2eDUxMmRxaW50cmluLmgJMjAxNC0xMS0wOCAwNzowMjo1Ni42MjM4NjA1 NDkgKzAxMDANCkBAIC0yMjUsMTEgKzIyNSw3IEBADQogX19hdHRyaWJ1dGVf XyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQ0KIF9tbTUxMl9tdWxsb19lcGk2NCAoX19tNTEyaSBfX0Es IF9fbTUxMmkgX19CKQ0KIHsNCi0gIHJldHVybiAoX19tNTEyaSkgX19idWls dGluX2lhMzJfcG11bGxxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwNCi0JCQkJ CQkgIChfX3Y4ZGkpIF9fQiwNCi0JCQkJCQkgIChfX3Y4ZGkpDQotCQkJCQkJ ICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwNCi0JCQkJCQkgIChfX21tYXNr OCkgLTEpOw0KKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjhkdSkgX19BICog KF9fdjhkdSkgX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTUx MmkNCmRpZmYgLXJ1IC1OIC14IC5zdm4gdHJ1bmsvZ2NjL2NvbmZpZy9pMzg2 L2F2eDUxMmZpbnRyaW4uaCBpbnRyaW4vZ2NjL2NvbmZpZy9pMzg2L2F2eDUx MmZpbnRyaW4uaA0KLS0tIHRydW5rL2djYy9jb25maWcvaTM4Ni9hdng1MTJm aW50cmluLmgJMjAxNC0wOC0yMyAxMzoxODoxMS45MTUwOTY2OTYgKzAyMDAN CisrKyBpbnRyaW4vZ2NjL2NvbmZpZy9pMzg2L2F2eDUxMmZpbnRyaW4uaAky MDE0LTExLTA5IDEzOjIzOjU0LjA5NTM4ODA5OCArMDEwMA0KQEAgLTM4LDkg KzM4LDEzIEBADQogdHlwZWRlZiBkb3VibGUgX192OGRmIF9fYXR0cmlidXRl X18gKChfX3ZlY3Rvcl9zaXplX18gKDY0KSkpOw0KIHR5cGVkZWYgZmxvYXQg X192MTZzZiBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICg2NCkp KTsNCiB0eXBlZGVmIGxvbmcgbG9uZyBfX3Y4ZGkgX19hdHRyaWJ1dGVfXyAo KF9fdmVjdG9yX3NpemVfXyAoNjQpKSk7DQordHlwZWRlZiB1bnNpZ25lZCBs b25nIGxvbmcgX192OGR1IF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXpl X18gKDY0KSkpOw0KIHR5cGVkZWYgaW50IF9fdjE2c2kgX19hdHRyaWJ1dGVf XyAoKF9fdmVjdG9yX3NpemVfXyAoNjQpKSk7DQordHlwZWRlZiB1bnNpZ25l ZCBpbnQgX192MTZzdSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9f ICg2NCkpKTsNCiB0eXBlZGVmIHNob3J0IF9fdjMyaGkgX19hdHRyaWJ1dGVf XyAoKF9fdmVjdG9yX3NpemVfXyAoNjQpKSk7DQordHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCBfX3YzMmh1IF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXpl X18gKDY0KSkpOw0KIHR5cGVkZWYgY2hhciBfX3Y2NHFpIF9fYXR0cmlidXRl X18gKChfX3ZlY3Rvcl9zaXplX18gKDY0KSkpOw0KK3R5cGVkZWYgdW5zaWdu ZWQgY2hhciBfX3Y2NHF1IF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXpl X18gKDY0KSkpOw0KIA0KIC8qIFRoZSBJbnRlbCBBUEkgaXMgZmxleGlibGUg ZW5vdWdoIHRoYXQgd2UgbXVzdCBhbGxvdyBhbGlhc2luZyB3aXRoIG90aGVy DQogICAgdmVjdG9yIHR5cGVzLCBhbmQgdGhlaXIgc2NhbGFyIGNvbXBvbmVu dHMuICAqLw0KQEAgLTUxNSwxMSArNTE5LDcgQEANCiBfX2F0dHJpYnV0ZV9f ICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpDQogX21tNTEyX211bGxvX2VwaTMyIChfX201MTJpIF9fQSwg X19tNTEyaSBfX0IpDQogew0KLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0 aW5faWEzMl9wbXVsbGQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwNCi0JCQkJ CQkgIChfX3YxNnNpKSBfX0IsDQotCQkJCQkJICAoX192MTZzaSkNCi0JCQkJ CQkgIF9tbTUxMl91bmRlZmluZWRfc2k1MTIgKCksDQotCQkJCQkJICAoX19t bWFzazE2KSAtMSk7DQorICByZXR1cm4gKF9fbTUxMmkpICgoX192MTZzdSkg X19BICogKF9fdjE2c3UpIF9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGlu ZSBfX201MTJpDQpAQCAtNjQyLDExICs2NDIsNyBAQA0KIF9fYXR0cmlidXRl X18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkNCiBfbW01MTJfYWRkX2VwaTY0IChfX201MTJpIF9fQSwg X19tNTEyaSBfX0IpDQogew0KLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0 aW5faWEzMl9wYWRkcTUxMl9tYXNrICgoX192OGRpKSBfX0EsDQotCQkJCQkJ IChfX3Y4ZGkpIF9fQiwNCi0JCQkJCQkgKF9fdjhkaSkNCi0JCQkJCQkgX21t NTEyX3VuZGVmaW5lZF9zaTUxMiAoKSwNCi0JCQkJCQkgKF9fbW1hc2s4KSAt MSk7DQorICByZXR1cm4gKF9fbTUxMmkpICgoX192OGR1KSBfX0EgKyAoX192 OGR1KSBfX0IpOw0KIH0NCiANCiBleHRlcm4gX19pbmxpbmUgX19tNTEyaQ0K QEAgLTY3NCwxMSArNjcwLDcgQEANCiBfX2F0dHJpYnV0ZV9fICgoX19nbnVf aW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp DQogX21tNTEyX3N1Yl9lcGk2NCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19C KQ0KIHsNCi0gIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1 YnE1MTJfbWFzayAoKF9fdjhkaSkgX19BLA0KLQkJCQkJCSAoX192OGRpKSBf X0IsDQotCQkJCQkJIChfX3Y4ZGkpDQotCQkJCQkJIF9tbTUxMl91bmRlZmlu ZWRfcGQgKCksDQotCQkJCQkJIChfX21tYXNrOCkgLTEpOw0KKyAgcmV0dXJu IChfX201MTJpKSAoKF9fdjhkdSkgX19BIC0gKF9fdjhkdSkgX19CKTsNCiB9 DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTUxMmkNCkBAIC04MDIsMTEgKzc5 NCw3IEBADQogX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fs d2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbTUxMl9hZGRf ZXBpMzIgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikNCiB7DQotICByZXR1 cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRkNTEyX21hc2sgKChf X3YxNnNpKSBfX0EsDQotCQkJCQkJIChfX3YxNnNpKSBfX0IsDQotCQkJCQkJ IChfX3YxNnNpKQ0KLQkJCQkJCSBfbW01MTJfdW5kZWZpbmVkX3NpNTEyICgp LA0KLQkJCQkJCSAoX19tbWFzazE2KSAtMSk7DQorICByZXR1cm4gKF9fbTUx MmkpICgoX192MTZzdSkgX19BICsgKF9fdjE2c3UpIF9fQik7DQogfQ0KIA0K IGV4dGVybiBfX2lubGluZSBfX201MTJpDQpAQCAtODY1LDExICs4NTMsNyBA QA0KIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW01MTJfc3ViX2VwaTMy IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpDQogew0KLSAgcmV0dXJuIChf X201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3ViZDUxMl9tYXNrICgoX192MTZz aSkgX19BLA0KLQkJCQkJCSAoX192MTZzaSkgX19CLA0KLQkJCQkJCSAoX192 MTZzaSkNCi0JCQkJCQkgX21tNTEyX3VuZGVmaW5lZF9zaTUxMiAoKSwNCi0J CQkJCQkgKF9fbW1hc2sxNikgLTEpOw0KKyAgcmV0dXJuIChfX201MTJpKSAo KF9fdjE2c3UpIF9fQSAtIChfX3YxNnN1KSBfX0IpOw0KIH0NCiANCiBleHRl cm4gX19pbmxpbmUgX19tNTEyaQ0KQEAgLTY3OTcsMjIgKzY3ODEsMTQgQEAN CiBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21tNTEyX29yX3NpNTEyIChf X201MTJpIF9fQSwgX19tNTEyaSBfX0IpDQogew0KLSAgcmV0dXJuIChfX201 MTJpKSBfX2J1aWx0aW5faWEzMl9wb3JkNTEyX21hc2sgKChfX3YxNnNpKSBf X0EsDQotCQkJCQkJKF9fdjE2c2kpIF9fQiwNCi0JCQkJCQkoX192MTZzaSkN Ci0JCQkJCQlfbW01MTJfdW5kZWZpbmVkX3NpNTEyICgpLA0KLQkJCQkJCShf X21tYXNrMTYpIC0xKTsNCisgIHJldHVybiAoX19tNTEyaSkgKChfX3YxNnN1 KSBfX0EgfCAoX192MTZzdSkgX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5s aW5lIF9fbTUxMmkNCiBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18s IF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21tNTEy X29yX2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpDQogew0KLSAg cmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wb3JkNTEyX21hc2sg KChfX3YxNnNpKSBfX0EsDQotCQkJCQkJKF9fdjE2c2kpIF9fQiwNCi0JCQkJ CQkoX192MTZzaSkNCi0JCQkJCQlfbW01MTJfdW5kZWZpbmVkX3NpNTEyICgp LA0KLQkJCQkJCShfX21tYXNrMTYpIC0xKTsNCisgIHJldHVybiAoX19tNTEy aSkgKChfX3YxNnN1KSBfX0EgfCAoX192MTZzdSkgX19CKTsNCiB9DQogDQog ZXh0ZXJuIF9faW5saW5lIF9fbTUxMmkNCkBAIC02ODQwLDExICs2ODE2LDcg QEANCiBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21tNTEyX29yX2VwaTY0 IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpDQogew0KLSAgcmV0dXJuIChf X201MTJpKSBfX2J1aWx0aW5faWEzMl9wb3JxNTEyX21hc2sgKChfX3Y4ZGkp IF9fQSwNCi0JCQkJCQkoX192OGRpKSBfX0IsDQotCQkJCQkJKF9fdjhkaSkN Ci0JCQkJCQlfbW01MTJfdW5kZWZpbmVkX3NpNTEyICgpLA0KLQkJCQkJCShf X21tYXNrOCkgLTEpOw0KKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjhkdSkg X19BIHwgKF9fdjhkdSkgX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5l IF9fbTUxMmkNCkBAIC02ODcyLDIyICs2ODQ0LDE0IEBADQogX19hdHRyaWJ1 dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQ0KIF9tbTUxMl94b3Jfc2k1MTIgKF9fbTUxMmkgX19B LCBfX201MTJpIF9fQikNCiB7DQotICByZXR1cm4gKF9fbTUxMmkpIF9fYnVp bHRpbl9pYTMyX3B4b3JkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsDQotCQkJ CQkJIChfX3YxNnNpKSBfX0IsDQotCQkJCQkJIChfX3YxNnNpKQ0KLQkJCQkJ CSBfbW01MTJfdW5kZWZpbmVkX3NpNTEyICgpLA0KLQkJCQkJCSAoX19tbWFz azE2KSAtMSk7DQorICByZXR1cm4gKF9fbTUxMmkpICgoX192MTZzdSkgX19B IF4gKF9fdjE2c3UpIF9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSBf X201MTJpDQogX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fs d2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbTUxMl94b3Jf ZXBpMzIgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikNCiB7DQotICByZXR1 cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3B4b3JkNTEyX21hc2sgKChf X3YxNnNpKSBfX0EsDQotCQkJCQkJIChfX3YxNnNpKSBfX0IsDQotCQkJCQkJ IChfX3YxNnNpKQ0KLQkJCQkJCSBfbW01MTJfdW5kZWZpbmVkX3NpNTEyICgp LA0KLQkJCQkJCSAoX19tbWFzazE2KSAtMSk7DQorICByZXR1cm4gKF9fbTUx MmkpICgoX192MTZzdSkgX19BIF4gKF9fdjE2c3UpIF9fQik7DQogfQ0KIA0K IGV4dGVybiBfX2lubGluZSBfX201MTJpDQpAQCAtNjkxNSwxMSArNjg3OSw3 IEBADQogX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbTUxMl94b3JfZXBp NjQgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikNCiB7DQotICByZXR1cm4g KF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3B4b3JxNTEyX21hc2sgKChfX3Y4 ZGkpIF9fQSwNCi0JCQkJCQkgKF9fdjhkaSkgX19CLA0KLQkJCQkJCSAoX192 OGRpKQ0KLQkJCQkJCSBfbW01MTJfdW5kZWZpbmVkX3NpNTEyICgpLA0KLQkJ CQkJCSAoX19tbWFzazgpIC0xKTsNCisgIHJldHVybiAoX19tNTEyaSkgKChf X3Y4ZHUpIF9fQSBeIChfX3Y4ZHUpIF9fQik7DQogfQ0KIA0KIGV4dGVybiBf X2lubGluZSBfX201MTJpDQpAQCAtNzEyOCwyMiArNzA4OCwxNCBAQA0KIF9f YXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW01MTJfYW5kX3NpNTEyIChfX201 MTJpIF9fQSwgX19tNTEyaSBfX0IpDQogew0KLSAgcmV0dXJuIChfX201MTJp KSBfX2J1aWx0aW5faWEzMl9wYW5kZDUxMl9tYXNrICgoX192MTZzaSkgX19B LA0KLQkJCQkJCSAoX192MTZzaSkgX19CLA0KLQkJCQkJCSAoX192MTZzaSkN Ci0JCQkJCQkgX21tNTEyX3VuZGVmaW5lZF9zaTUxMiAoKSwNCi0JCQkJCQkg KF9fbW1hc2sxNikgLTEpOw0KKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjE2 c3UpIF9fQSAmIChfX3YxNnN1KSBfX0IpOw0KIH0NCiANCiBleHRlcm4gX19p bmxpbmUgX19tNTEyaQ0KIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVf XywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW01 MTJfYW5kX2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpDQogew0K LSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYW5kZDUxMl9t YXNrICgoX192MTZzaSkgX19BLA0KLQkJCQkJCSAoX192MTZzaSkgX19CLA0K LQkJCQkJCSAoX192MTZzaSkNCi0JCQkJCQkgX21tNTEyX3VuZGVmaW5lZF9z aTUxMiAoKSwNCi0JCQkJCQkgKF9fbW1hc2sxNikgLTEpOw0KKyAgcmV0dXJu IChfX201MTJpKSAoKF9fdjE2c3UpIF9fQSAmIChfX3YxNnN1KSBfX0IpOw0K IH0NCiANCiBleHRlcm4gX19pbmxpbmUgX19tNTEyaQ0KQEAgLTcxNzEsMTEg KzcxMjMsNyBAQA0KIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywg X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW01MTJf YW5kX2VwaTY0IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpDQogew0KLSAg cmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYW5kcTUxMl9tYXNr ICgoX192OGRpKSBfX0EsDQotCQkJCQkJIChfX3Y4ZGkpIF9fQiwNCi0JCQkJ CQkgKF9fdjhkaSkNCi0JCQkJCQkgX21tNTEyX3VuZGVmaW5lZF9zaTUxMiAo KSwNCi0JCQkJCQkgKF9fbW1hc2s4KSAtMSk7DQorICByZXR1cm4gKF9fbTUx MmkpICgoX192OGR1KSBfX0EgJiAoX192OGR1KSBfX0IpOw0KIH0NCiANCiBl eHRlcm4gX19pbmxpbmUgX19tNTEyaQ0KQEAgLTEwNzQ5LDEyICsxMDY5Nyw3 IEBADQogX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbTUxMl9hZGRfcGQg KF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikNCiB7DQotICByZXR1cm4gKF9f bTUxMmQpIF9fYnVpbHRpbl9pYTMyX2FkZHBkNTEyX21hc2sgKChfX3Y4ZGYp IF9fQSwNCi0JCQkJCQkgKF9fdjhkZikgX19CLA0KLQkJCQkJCSAoX192OGRm KQ0KLQkJCQkJCSBfbW01MTJfdW5kZWZpbmVkX3BkICgpLA0KLQkJCQkJCSAo X19tbWFzazgpIC0xLA0KLQkJCQkJCSBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJ T04pOw0KKyAgcmV0dXJuIChfX201MTJkKSAoKF9fdjhkZilfX0EgKyAoX192 OGRmKV9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSBfX201MTJkDQpA QCAtMTA3ODQsMTIgKzEwNzI3LDcgQEANCiBfX2F0dHJpYnV0ZV9fICgoX19n bnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpDQogX21tNTEyX2FkZF9wcyAoX19tNTEyIF9fQSwgX19tNTEyIF9fQikN CiB7DQotICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfYWRkcHM1 MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwNCi0JCQkJCQkoX192MTZzZikgX19C LA0KLQkJCQkJCShfX3YxNnNmKQ0KLQkJCQkJCV9tbTUxMl91bmRlZmluZWRf cHMgKCksDQotCQkJCQkJKF9fbW1hc2sxNikgLTEsDQotCQkJCQkJX01NX0ZS T1VORF9DVVJfRElSRUNUSU9OKTsNCisgIHJldHVybiAoX19tNTEyKSAoKF9f djE2c2YpX19BICsgKF9fdjE2c2YpX19CKTsNCiB9DQogDQogZXh0ZXJuIF9f aW5saW5lIF9fbTUxMg0KQEAgLTEwODE5LDEyICsxMDc1Nyw3IEBADQogX19h dHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQ0KIF9tbTUxMl9zdWJfcGQgKF9fbTUxMmQg X19BLCBfX201MTJkIF9fQikNCiB7DQotICByZXR1cm4gKF9fbTUxMmQpIF9f YnVpbHRpbl9pYTMyX3N1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwNCi0J CQkJCQkgKF9fdjhkZikgX19CLA0KLQkJCQkJCSAoX192OGRmKQ0KLQkJCQkJ CSBfbW01MTJfdW5kZWZpbmVkX3BkICgpLA0KLQkJCQkJCSAoX19tbWFzazgp IC0xLA0KLQkJCQkJCSBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOw0KKyAg cmV0dXJuIChfX201MTJkKSAoKF9fdjhkZilfX0EgLSAoX192OGRmKV9fQik7 DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSBfX201MTJkDQpAQCAtMTA4NTQs MTIgKzEwNzg3LDcgQEANCiBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5l X18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21t NTEyX3N1Yl9wcyAoX19tNTEyIF9fQSwgX19tNTEyIF9fQikNCiB7DQotICBy ZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfc3VicHM1MTJfbWFzayAo KF9fdjE2c2YpIF9fQSwNCi0JCQkJCQkoX192MTZzZikgX19CLA0KLQkJCQkJ CShfX3YxNnNmKQ0KLQkJCQkJCV9tbTUxMl91bmRlZmluZWRfcHMgKCksDQot CQkJCQkJKF9fbW1hc2sxNikgLTEsDQotCQkJCQkJX01NX0ZST1VORF9DVVJf RElSRUNUSU9OKTsNCisgIHJldHVybiAoX19tNTEyKSAoKF9fdjE2c2YpX19B IC0gKF9fdjE2c2YpX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9f bTUxMg0KQEAgLTEwODg5LDEyICsxMDgxNyw3IEBADQogX19hdHRyaWJ1dGVf XyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQ0KIF9tbTUxMl9tdWxfcGQgKF9fbTUxMmQgX19BLCBfX201 MTJkIF9fQikNCiB7DQotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9p YTMyX211bHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwNCi0JCQkJCQkgKF9f djhkZikgX19CLA0KLQkJCQkJCSAoX192OGRmKQ0KLQkJCQkJCSBfbW01MTJf dW5kZWZpbmVkX3BkICgpLA0KLQkJCQkJCSAoX19tbWFzazgpIC0xLA0KLQkJ CQkJCSBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOw0KKyAgcmV0dXJuIChf X201MTJkKSAoKF9fdjhkZilfX0EgKiAoX192OGRmKV9fQik7DQogfQ0KIA0K IGV4dGVybiBfX2lubGluZSBfX201MTJkDQpAQCAtMTA5MjQsMTIgKzEwODQ3 LDcgQEANCiBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21tNTEyX211bF9w cyAoX19tNTEyIF9fQSwgX19tNTEyIF9fQikNCiB7DQotICByZXR1cm4gKF9f bTUxMikgX19idWlsdGluX2lhMzJfbXVscHM1MTJfbWFzayAoKF9fdjE2c2Yp IF9fQSwNCi0JCQkJCQkoX192MTZzZikgX19CLA0KLQkJCQkJCShfX3YxNnNm KQ0KLQkJCQkJCV9tbTUxMl91bmRlZmluZWRfcHMgKCksDQotCQkJCQkJKF9f bW1hc2sxNikgLTEsDQotCQkJCQkJX01NX0ZST1VORF9DVVJfRElSRUNUSU9O KTsNCisgIHJldHVybiAoX19tNTEyKSAoKF9fdjE2c2YpX19BICogKF9fdjE2 c2YpX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTUxMg0KQEAg LTEwOTU5LDEyICsxMDg3Nyw3IEBADQogX19hdHRyaWJ1dGVfXyAoKF9fZ251 X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQ0KIF9tbTUxMl9kaXZfcGQgKF9fbTUxMmQgX19NLCBfX201MTJkIF9fVikN CiB7DQotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2RpdnBk NTEyX21hc2sgKChfX3Y4ZGYpIF9fTSwNCi0JCQkJCQkgKF9fdjhkZikgX19W LA0KLQkJCQkJCSAoX192OGRmKQ0KLQkJCQkJCSBfbW01MTJfdW5kZWZpbmVk X3BkICgpLA0KLQkJCQkJCSAoX19tbWFzazgpIC0xLA0KLQkJCQkJCSBfTU1f RlJPVU5EX0NVUl9ESVJFQ1RJT04pOw0KKyAgcmV0dXJuIChfX201MTJkKSAo KF9fdjhkZilfX00gLyAoX192OGRmKV9fVik7DQogfQ0KIA0KIGV4dGVybiBf X2lubGluZSBfX201MTJkDQpAQCAtMTA5OTQsMTIgKzEwOTA3LDcgQEANCiBf X2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21tNTEyX2Rpdl9wcyAoX19tNTEy IF9fQSwgX19tNTEyIF9fQikNCiB7DQotICByZXR1cm4gKF9fbTUxMikgX19i dWlsdGluX2lhMzJfZGl2cHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwNCi0J CQkJCQkoX192MTZzZikgX19CLA0KLQkJCQkJCShfX3YxNnNmKQ0KLQkJCQkJ CV9tbTUxMl91bmRlZmluZWRfcHMgKCksDQotCQkJCQkJKF9fbW1hc2sxNikg LTEsDQotCQkJCQkJX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsNCisgIHJl dHVybiAoX19tNTEyKSAoKF9fdjE2c2YpX19BIC8gKF9fdjE2c2YpX19CKTsN CiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTUxMg0KZGlmZiAtcnUgLU4g LXggLnN2biB0cnVuay9nY2MvY29uZmlnL2kzODYvYXZ4NTEydmxkcWludHJp bi5oIGludHJpbi9nY2MvY29uZmlnL2kzODYvYXZ4NTEydmxkcWludHJpbi5o DQotLS0gdHJ1bmsvZ2NjL2NvbmZpZy9pMzg2L2F2eDUxMnZsZHFpbnRyaW4u aAkyMDE0LTExLTEwIDEzOjA5OjM0LjcyNzU4OTgzNSArMDEwMA0KKysrIGlu dHJpbi9nY2MvY29uZmlnL2kzODYvYXZ4NTEydmxkcWludHJpbi5oCTIwMTQt MTEtMTEgMTU6MzA6MzIuMDkwMTU1Njc5ICswMTAwDQpAQCAtNTQ0LDExICs1 NDQsNyBAQA0KIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW0yNTZfbXVs bG9fZXBpNjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikNCiB7DQotICBy ZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxscTI1Nl9tYXNr ICgoX192NGRpKSBfX0EsDQotCQkJCQkJICAoX192NGRpKSBfX0IsDQotCQkJ CQkJICAoX192NGRpKQ0KLQkJCQkJCSAgX21tMjU2X3NldHplcm9fc2kyNTYg KCksDQotCQkJCQkJICAoX19tbWFzazgpIC0xKTsNCisgIHJldHVybiAoX19t MjU2aSkgKChfX3Y0ZHUpIF9fQSAqIChfX3Y0ZHUpIF9fQik7DQogfQ0KIA0K IGV4dGVybiBfX2lubGluZSBfX20yNTZpDQpAQCAtNTc3LDExICs1NzMsNyBA QA0KIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW1fbXVsbG9fZXBpNjQg KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikNCiB7DQotICByZXR1cm4gKF9f bTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxscTEyOF9tYXNrICgoX192MmRp KSBfX0EsDQotCQkJCQkJICAoX192MmRpKSBfX0IsDQotCQkJCQkJICAoX192 MmRpKQ0KLQkJCQkJCSAgX21tX3NldHplcm9fZGkgKCksDQotCQkJCQkJICAo X19tbWFzazgpIC0xKTsNCisgIHJldHVybiAoX19tMTI4aSkgKChfX3YyZHUp IF9fQSAqIChfX3YyZHUpIF9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGlu ZSBfX20xMjhpDQpkaWZmIC1ydSAtTiAteCAuc3ZuIHRydW5rL2djYy9jb25m aWcvaTM4Ni9hdnhpbnRyaW4uaCBpbnRyaW4vZ2NjL2NvbmZpZy9pMzg2L2F2 eGludHJpbi5oDQotLS0gdHJ1bmsvZ2NjL2NvbmZpZy9pMzg2L2F2eGludHJp bi5oCTIwMTQtMDQtMDEgMDc6MzQ6MDYuMzM5ODc5MDEyICswMjAwDQorKysg aW50cmluL2djYy9jb25maWcvaTM4Ni9hdnhpbnRyaW4uaAkyMDE0LTExLTA4 IDA2OjU1OjQ1LjYxNTI5MjQzOCArMDEwMA0KQEAgLTQxLDkgKzQxLDEzIEBA DQogdHlwZWRlZiBkb3VibGUgX192NGRmIF9fYXR0cmlidXRlX18gKChfX3Zl Y3Rvcl9zaXplX18gKDMyKSkpOw0KIHR5cGVkZWYgZmxvYXQgX192OHNmIF9f YXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDMyKSkpOw0KIHR5cGVk ZWYgbG9uZyBsb25nIF9fdjRkaSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jf c2l6ZV9fICgzMikpKTsNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBf X3Y0ZHUgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7 DQogdHlwZWRlZiBpbnQgX192OHNpIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rv cl9zaXplX18gKDMyKSkpOw0KK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fdjhz dSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsNCiB0 eXBlZGVmIHNob3J0IF9fdjE2aGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9y X3NpemVfXyAoMzIpKSk7DQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Yx Nmh1IF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDMyKSkpOw0K IHR5cGVkZWYgY2hhciBfX3YzMnFpIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rv cl9zaXplX18gKDMyKSkpOw0KK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3Yz MnF1IF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDMyKSkpOw0K IA0KIC8qIFRoZSBJbnRlbCBBUEkgaXMgZmxleGlibGUgZW5vdWdoIHRoYXQg d2UgbXVzdCBhbGxvdyBhbGlhc2luZyB3aXRoIG90aGVyDQogICAgdmVjdG9y IHR5cGVzLCBhbmQgdGhlaXIgc2NhbGFyIGNvbXBvbmVudHMuICAqLw0KQEAg LTEyNCwxMyArMTI4LDEzIEBADQogZXh0ZXJuIF9faW5saW5lIF9fbTI1NmQg X19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21tMjU2X2FkZF9wZCAoX19tMjU2 ZCBfX0EsIF9fbTI1NmQgX19CKQ0KIHsNCi0gIHJldHVybiAoX19tMjU2ZCkg X19idWlsdGluX2lhMzJfYWRkcGQyNTYgKChfX3Y0ZGYpX19BLCAoX192NGRm KV9fQik7DQorICByZXR1cm4gKF9fbTI1NmQpICgoX192NGRmKV9fQSArIChf X3Y0ZGYpX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTI1NiBf X2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW0yNTZfYWRkX3BzIChfX20yNTYg X19BLCBfX20yNTYgX19CKQ0KIHsNCi0gIHJldHVybiAoX19tMjU2KSBfX2J1 aWx0aW5faWEzMl9hZGRwczI1NiAoKF9fdjhzZilfX0EsIChfX3Y4c2YpX19C KTsNCisgIHJldHVybiAoX19tMjU2KSAoKF9fdjhzZilfX0EgKyAoX192OHNm KV9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSBfX20yNTZkIF9fYXR0 cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQ0KQEAgLTIxOCwxMyArMjIyLDEzIEBADQogZXh0 ZXJuIF9faW5saW5lIF9fbTI1NmQgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5s aW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQog X21tMjU2X2Rpdl9wZCAoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKQ0KIHsN Ci0gIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfZGl2cGQyNTYg KChfX3Y0ZGYpX19BLCAoX192NGRmKV9fQik7DQorICByZXR1cm4gKF9fbTI1 NmQpICgoX192NGRmKV9fQSAvIChfX3Y0ZGYpX19CKTsNCiB9DQogDQogZXh0 ZXJuIF9faW5saW5lIF9fbTI1NiBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxp bmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBf bW0yNTZfZGl2X3BzIChfX20yNTYgX19BLCBfX20yNTYgX19CKQ0KIHsNCi0g IHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9kaXZwczI1NiAoKF9f djhzZilfX0EsIChfX3Y4c2YpX19CKTsNCisgIHJldHVybiAoX19tMjU2KSAo KF9fdjhzZilfX0EgLyAoX192OHNmKV9fQik7DQogfQ0KIA0KIC8qIERvdCBw cm9kdWN0IGluc3RydWN0aW9ucyB3aXRoIG1hc2stZGVmaW5lZCBzdW1taW5n IGFuZCB6ZXJvaW5nIHBhcnRzDQpAQCAtMjk1LDEzICsyOTksMTMgQEANCiBl eHRlcm4gX19pbmxpbmUgX19tMjU2ZCBfX2F0dHJpYnV0ZV9fKChfX2dudV9p bmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkN CiBfbW0yNTZfbXVsX3BkIChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpDQog ew0KLSAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9tdWxwZDI1 NiAoKF9fdjRkZilfX0EsIChfX3Y0ZGYpX19CKTsNCisgIHJldHVybiAoX19t MjU2ZCkgKChfX3Y0ZGYpX19BICogKF9fdjRkZilfX0IpOw0KIH0NCiANCiBl eHRlcm4gX19pbmxpbmUgX19tMjU2IF9fYXR0cmlidXRlX18oKF9fZ251X2lu bGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0K IF9tbTI1Nl9tdWxfcHMgKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpDQogew0K LSAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX211bHBzMjU2ICgo X192OHNmKV9fQSwgKF9fdjhzZilfX0IpOw0KKyAgcmV0dXJuIChfX20yNTYp ICgoX192OHNmKV9fQSAqIChfX3Y4c2YpX19CKTsNCiB9DQogDQogZXh0ZXJu IF9faW5saW5lIF9fbTI1NmQgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5l X18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQpAQCAt MzQzLDEzICszNDcsMTMgQEANCiBleHRlcm4gX19pbmxpbmUgX19tMjU2ZCBf X2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW0yNTZfc3ViX3BkIChfX20yNTZk IF9fQSwgX19tMjU2ZCBfX0IpDQogew0KLSAgcmV0dXJuIChfX20yNTZkKSBf X2J1aWx0aW5faWEzMl9zdWJwZDI1NiAoKF9fdjRkZilfX0EsIChfX3Y0ZGYp X19CKTsNCisgIHJldHVybiAoX19tMjU2ZCkgKChfX3Y0ZGYpX19BIC0gKF9f djRkZilfX0IpOw0KIH0NCiANCiBleHRlcm4gX19pbmxpbmUgX19tMjU2IF9f YXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQ0KIF9tbTI1Nl9zdWJfcHMgKF9fbTI1NiBf X0EsIF9fbTI1NiBfX0IpDQogew0KLSAgcmV0dXJuIChfX20yNTYpIF9fYnVp bHRpbl9pYTMyX3N1YnBzMjU2ICgoX192OHNmKV9fQSwgKF9fdjhzZilfX0Ip Ow0KKyAgcmV0dXJuIChfX20yNTYpICgoX192OHNmKV9fQSAtIChfX3Y4c2Yp X19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTI1NmQgX19hdHRy aWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpDQpkaWZmIC1ydSAtTiAteCAuc3ZuIHRydW5rL2dj Yy9jb25maWcvaTM4Ni9lbW1pbnRyaW4uaCBpbnRyaW4vZ2NjL2NvbmZpZy9p Mzg2L2VtbWludHJpbi5oDQotLS0gdHJ1bmsvZ2NjL2NvbmZpZy9pMzg2L2Vt bWludHJpbi5oCTIwMTQtMDQtMDEgMDc6MzQ6MDYuMzM1ODc4ODYwICswMjAw DQorKysgaW50cmluL2djYy9jb25maWcvaTM4Ni9lbW1pbnRyaW4uaAkyMDE0 LTExLTA5IDEzOjQzOjQyLjIxMzE1NzIyOSArMDEwMA0KQEAgLTM5LDkgKzM5 LDEzIEBADQogLyogU1NFMiAqLw0KIHR5cGVkZWYgZG91YmxlIF9fdjJkZiBf X2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikpKTsNCiB0eXBl ZGVmIGxvbmcgbG9uZyBfX3YyZGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9y X3NpemVfXyAoMTYpKSk7DQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcg X192MmR1IF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkp Ow0KIHR5cGVkZWYgaW50IF9fdjRzaSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0 b3Jfc2l6ZV9fICgxNikpKTsNCit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Y0 c3UgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMTYpKSk7DQog dHlwZWRlZiBzaG9ydCBfX3Y4aGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9y X3NpemVfXyAoMTYpKSk7DQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Y4 aHUgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMTYpKSk7DQog dHlwZWRlZiBjaGFyIF9fdjE2cWkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9y X3NpemVfXyAoMTYpKSk7DQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdjE2 cXUgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMTYpKSk7DQog DQogLyogVGhlIEludGVsIEFQSSBpcyBmbGV4aWJsZSBlbm91Z2ggdGhhdCB3 ZSBtdXN0IGFsbG93IGFsaWFzaW5nIHdpdGggb3RoZXINCiAgICB2ZWN0b3Ig dHlwZXMsIGFuZCB0aGVpciBzY2FsYXIgY29tcG9uZW50cy4gICovDQpAQCAt MTY4LDEzICsxNzIsMTMgQEANCiBleHRlcm4gX19pbmxpbmUgdm9pZCBfX2F0 dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW1fc3RvcmVfc2QgKGRvdWJsZSAqX19Q LCBfX20xMjhkIF9fQSkNCiB7DQotICAqX19QID0gX19idWlsdGluX2lhMzJf dmVjX2V4dF92MmRmIChfX0EsIDApOw0KKyAgKl9fUCA9ICgoX192MmRmKV9f QSlbMF07DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSBkb3VibGUgX19hdHRy aWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpDQogX21tX2N2dHNkX2Y2NCAoX19tMTI4ZCBfX0Ep DQogew0KLSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3ZlY19leHRfdjJkZiAo X19BLCAwKTsNCisgIHJldHVybiAoKF9fdjJkZilfX0EpWzBdOw0KIH0NCiAN CiBleHRlcm4gX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2dudV9p bmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkN CkBAIC0xODcsNyArMTkxLDcgQEANCiBleHRlcm4gX19pbmxpbmUgdm9pZCBf X2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW1fc3RvcmVoX3BkIChkb3VibGUg Kl9fUCwgX19tMTI4ZCBfX0EpDQogew0KLSAgKl9fUCA9IF9fYnVpbHRpbl9p YTMyX3ZlY19leHRfdjJkZiAoX19BLCAxKTsNCisgICpfX1AgPSAoKF9fdjJk ZilfX0EpWzFdOw0KIH0NCiANCiAvKiBTdG9yZSB0aGUgbG93ZXIgRFBGUCB2 YWx1ZSBhY3Jvc3MgdHdvIHdvcmRzLg0KQEAgLTIyMiwyMSArMjI2LDIxIEBA DQogZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChf X2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkNCiBfbW1fY3Z0c2kxMjhfc2k2NCAoX19tMTI4aSBfX0EpDQogew0K LSAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3ZlY19leHRfdjJkaSAoKF9fdjJk aSlfX0EsIDApOw0KKyAgcmV0dXJuICgoX192MmRpKV9fQSlbMF07DQogfQ0K IA0KIC8qIE1pY3Jvc29mdCBpbnRyaW5zaWMuICAqLw0KIGV4dGVybiBfX2lu bGluZSBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18s IF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21tX2N2 dHNpMTI4X3NpNjR4IChfX20xMjhpIF9fQSkNCiB7DQotICByZXR1cm4gX19i dWlsdGluX2lhMzJfdmVjX2V4dF92MmRpICgoX192MmRpKV9fQSwgMCk7DQor ICByZXR1cm4gKChfX3YyZGkpX19BKVswXTsNCiB9DQogI2VuZGlmDQogDQog ZXh0ZXJuIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19nbnVf aW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp DQogX21tX2FkZF9wZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQ0KIHsN Ci0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9hZGRwZCAoKF9f djJkZilfX0EsIChfX3YyZGYpX19CKTsNCisgIHJldHVybiAoX19tMTI4ZCkg KChfX3YyZGYpX19BICsgKF9fdjJkZilfX0IpOw0KIH0NCiANCiBleHRlcm4g X19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVf XywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCkBAIC0y NDgsNyArMjUyLDcgQEANCiBleHRlcm4gX19pbmxpbmUgX19tMTI4ZCBfX2F0 dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW1fc3ViX3BkIChfX20xMjhkIF9fQSwg X19tMTI4ZCBfX0IpDQogew0KLSAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRp bl9pYTMyX3N1YnBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOw0KKyAg cmV0dXJuIChfX20xMjhkKSAoKF9fdjJkZilfX0EgLSAoX192MmRmKV9fQik7 DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRl X18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQ0KQEAgLTI2MCw3ICsyNjQsNyBAQA0KIGV4dGVybiBfX2lu bGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbV9tdWxf cGQgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikNCiB7DQotICByZXR1cm4g KF9fbTEyOGQpX19idWlsdGluX2lhMzJfbXVscGQgKChfX3YyZGYpX19BLCAo X192MmRmKV9fQik7DQorICByZXR1cm4gKF9fbTEyOGQpICgoX192MmRmKV9f QSAqIChfX3YyZGYpX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9f bTEyOGQgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQpAQCAtMjcyLDcgKzI3Niw3 IEBADQogZXh0ZXJuIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygo X19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpDQogX21tX2Rpdl9wZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19C KQ0KIHsNCi0gIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9kaXZw ZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsNCisgIHJldHVybiAoX19t MTI4ZCkgKChfX3YyZGYpX19BIC8gKF9fdjJkZilfX0IpOw0KIH0NCiANCiBl eHRlcm4gX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2dudV9p bmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkN CkBAIC0yODcsNyArMjkxLDcgQEANCiAgIHJldHVybiAoX19tMTI4ZClfX2J1 aWx0aW5faWEzMl9zcXJ0cGQgKChfX3YyZGYpX19BKTsNCiB9DQogDQotLyog UmV0dXJuIHBhaXIge3NxcnQgKEFbMCksIEJbMV19LiAgKi8NCisvKiBSZXR1 cm4gcGFpciB7c3FydCAoQlswXSksIEFbMV19LiAgKi8NCiBleHRlcm4gX19p bmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywg X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW1fc3Fy dF9zZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQ0KIHsNCkBAIC03MTUs MTMgKzcxOSwxMyBAQA0KIGV4dGVybiBfX2lubGluZSB2b2lkIF9fYXR0cmli dXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQ0KIF9tbV9zdG9yZWxfZXBpNjQgKF9fbTEyOGkgKl9f UCwgX19tMTI4aSBfX0IpDQogew0KLSAgKihsb25nIGxvbmcgKilfX1AgPSBf X2J1aWx0aW5faWEzMl92ZWNfZXh0X3YyZGkgKChfX3YyZGkpX19CLCAwKTsN CisgICoobG9uZyBsb25nICopX19QID0gKChfX3YyZGkpX19CKVswXTsNCiB9 DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9f Z251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFs X18pKQ0KIF9tbV9tb3ZlcGk2NF9waTY0IChfX20xMjhpIF9fQikNCiB7DQot ICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl92ZWNfZXh0X3YyZGkg KChfX3YyZGkpX19CLCAwKTsNCisgIHJldHVybiAoX19tNjQpICgoX192MmRp KV9fQilbMF07DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSBfX20xMjhpIF9f YXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQ0KQEAgLTEwMDYsMjUgKzEwMTAsMjUgQEAN CiBleHRlcm4gX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2du dV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkNCiBfbW1fYWRkX2VwaTggKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikN CiB7DQotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFkZGIx MjggKChfX3YxNnFpKV9fQSwgKF9fdjE2cWkpX19CKTsNCisgIHJldHVybiAo X19tMTI4aSkgKChfX3YxNnF1KV9fQSArIChfX3YxNnF1KV9fQik7DQogfQ0K IA0KIGV4dGVybiBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9f Z251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFs X18pKQ0KIF9tbV9hZGRfZXBpMTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9f QikNCiB7DQotICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFk ZHcxMjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7DQorICByZXR1cm4g KF9fbTEyOGkpICgoX192OGh1KV9fQSArIChfX3Y4aHUpX19CKTsNCiB9DQog DQogZXh0ZXJuIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19n bnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpDQogX21tX2FkZF9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19C KQ0KIHsNCi0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWRk ZDEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsNCisgIHJldHVybiAo X19tMTI4aSkgKChfX3Y0c3UpX19BICsgKF9fdjRzdSlfX0IpOw0KIH0NCiAN CiBleHRlcm4gX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2du dV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkNCiBfbW1fYWRkX2VwaTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0Ip DQogew0KLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhZGRx MTI4ICgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOw0KKyAgcmV0dXJuIChf X20xMjhpKSAoKF9fdjJkdSlfX0EgKyAoX192MmR1KV9fQik7DQogfQ0KIA0K IGV4dGVybiBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fZ251 X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQ0KQEAgLTEwNTQsMjUgKzEwNTgsMjUgQEANCiBleHRlcm4gX19pbmxpbmUg X19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW1fc3ViX2VwaTgg KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikNCiB7DQotICByZXR1cm4gKF9f bTEyOGkpX19idWlsdGluX2lhMzJfcHN1YmIxMjggKChfX3YxNnFpKV9fQSwg KF9fdjE2cWkpX19CKTsNCisgIHJldHVybiAoX19tMTI4aSkgKChfX3YxNnF1 KV9fQSAtIChfX3YxNnF1KV9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGlu ZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fs d2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbV9zdWJfZXBp MTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikNCiB7DQotICByZXR1cm4g KF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHN1YncxMjggKChfX3Y4aGkpX19B LCAoX192OGhpKV9fQik7DQorICByZXR1cm4gKF9fbTEyOGkpICgoX192OGh1 KV9fQSAtIChfX3Y4aHUpX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5l IF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21tX3N1Yl9lcGkz MiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQ0KIHsNCi0gIHJldHVybiAo X19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3ViZDEyOCAoKF9fdjRzaSlfX0Es IChfX3Y0c2kpX19CKTsNCisgIHJldHVybiAoX19tMTI4aSkgKChfX3Y0c3Up X19BIC0gKF9fdjRzdSlfX0IpOw0KIH0NCiANCiBleHRlcm4gX19pbmxpbmUg X19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW1fc3ViX2VwaTY0 IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpDQogew0KLSAgcmV0dXJuIChf X20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzdWJxMTI4ICgoX192MmRpKV9fQSwg KF9fdjJkaSlfX0IpOw0KKyAgcmV0dXJuIChfX20xMjhpKSAoKF9fdjJkdSlf X0EgLSAoX192MmR1KV9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSBf X20xMjhpIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KQEAgLTExMTQsNyArMTEx OCw3IEBADQogZXh0ZXJuIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVf XygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpDQogX21tX211bGxvX2VwaTE2IChfX20xMjhpIF9fQSwgX19t MTI4aSBfX0IpDQogew0KLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9p YTMyX3BtdWxsdzEyOCAoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsNCisg IHJldHVybiAoX19tMTI4aSkgKChfX3Y4aHUpX19BICogKF9fdjhodSlfX0Ip Ow0KIH0NCiANCiBleHRlcm4gX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVf XygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpDQpAQCAtMTI0Nyw3ICsxMjUxLDcgQEANCiBleHRlcm4gX19p bmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywg X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW1fYW5k X3NpMTI4IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpDQogew0KLSAgcmV0 dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhbmQxMjggKChfX3YyZGkp X19BLCAoX192MmRpKV9fQik7DQorICByZXR1cm4gKF9fbTEyOGkpICgoX192 MmR1KV9fQSAmIChfX3YyZHUpX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5s aW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9f YWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQpAQCAtMTI1OSw2 NyArMTI2Myw2NyBAQA0KIGV4dGVybiBfX2lubGluZSBfX20xMjhpIF9fYXR0 cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQ0KIF9tbV9vcl9zaTEyOCAoX19tMTI4aSBfX0Es IF9fbTEyOGkgX19CKQ0KIHsNCi0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0 aW5faWEzMl9wb3IxMjggKChfX3YyZGkpX19BLCAoX192MmRpKV9fQik7DQor ICByZXR1cm4gKF9fbTEyOGkpICgoX192MmR1KV9fQSB8IChfX3YyZHUpX19C KTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1 dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpDQogX21tX3hvcl9zaTEyOCAoX19tMTI4aSBfX0EsIF9f bTEyOGkgX19CKQ0KIHsNCi0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5f aWEzMl9weG9yMTI4ICgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOw0KKyAg cmV0dXJuIChfX20xMjhpKSAoKF9fdjJkdSlfX0EgXiAoX192MmR1KV9fQik7 DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRl X18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQ0KIF9tbV9jbXBlcV9lcGk4IChfX20xMjhpIF9fQSwgX19t MTI4aSBfX0IpDQogew0KLSAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9p YTMyX3BjbXBlcWIxMjggKChfX3YxNnFpKV9fQSwgKF9fdjE2cWkpX19CKTsN CisgIHJldHVybiAoX19tMTI4aSkgKChfX3YxNnFpKV9fQSA9PSAoX192MTZx aSlfX0IpOw0KIH0NCiANCiBleHRlcm4gX19pbmxpbmUgX19tMTI4aSBfX2F0 dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkNCiBfbW1fY21wZXFfZXBpMTYgKF9fbTEyOGkg X19BLCBfX20xMjhpIF9fQikNCiB7DQotICByZXR1cm4gKF9fbTEyOGkpX19i dWlsdGluX2lhMzJfcGNtcGVxdzEyOCAoKF9fdjhoaSlfX0EsIChfX3Y4aGkp X19CKTsNCisgIHJldHVybiAoX19tMTI4aSkgKChfX3Y4aGkpX19BID09IChf X3Y4aGkpX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTEyOGkg X19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpDQogX21tX2NtcGVxX2VwaTMyIChfX20x MjhpIF9fQSwgX19tMTI4aSBfX0IpDQogew0KLSAgcmV0dXJuIChfX20xMjhp KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWQxMjggKChfX3Y0c2kpX19BLCAoX192 NHNpKV9fQik7DQorICByZXR1cm4gKF9fbTEyOGkpICgoX192NHNpKV9fQSA9 PSAoX192NHNpKV9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSBfX20x MjhpIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbV9jbXBsdF9lcGk4IChf X20xMjhpIF9fQSwgX19tMTI4aSBfX0IpDQogew0KLSAgcmV0dXJuIChfX20x MjhpKV9fYnVpbHRpbl9pYTMyX3BjbXBndGIxMjggKChfX3YxNnFpKV9fQiwg KF9fdjE2cWkpX19BKTsNCisgIHJldHVybiAoX19tMTI4aSkgKChfX3YxNnFp KV9fQSA8IChfX3YxNnFpKV9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGlu ZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fs d2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbV9jbXBsdF9l cGkxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQ0KIHsNCi0gIHJldHVy biAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wY21wZ3R3MTI4ICgoX192OGhp KV9fQiwgKF9fdjhoaSlfX0EpOw0KKyAgcmV0dXJuIChfX20xMjhpKSAoKF9f djhoaSlfX0EgPCAoX192OGhpKV9fQik7DQogfQ0KIA0KIGV4dGVybiBfX2lu bGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbV9jbXBs dF9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQ0KIHsNCi0gIHJl dHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wY21wZ3RkMTI4ICgoX192 NHNpKV9fQiwgKF9fdjRzaSlfX0EpOw0KKyAgcmV0dXJuIChfX20xMjhpKSAo KF9fdjRzaSlfX0EgPCAoX192NHNpKV9fQik7DQogfQ0KIA0KIGV4dGVybiBf X2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9f LCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbV9j bXBndF9lcGk4IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpDQogew0KLSAg cmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BjbXBndGIxMjggKChf X3YxNnFpKV9fQSwgKF9fdjE2cWkpX19CKTsNCisgIHJldHVybiAoX19tMTI4 aSkgKChfX3YxNnFpKV9fQSA+IChfX3YxNnFpKV9fQik7DQogfQ0KIA0KIGV4 dGVybiBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fZ251X2lu bGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0K IF9tbV9jbXBndF9lcGkxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQ0K IHsNCi0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wY21wZ3R3 MTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOw0KKyAgcmV0dXJuIChf X20xMjhpKSAoKF9fdjhoaSlfX0EgPiAoX192OGhpKV9fQik7DQogfQ0KIA0K IGV4dGVybiBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fZ251 X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQ0KIF9tbV9jbXBndF9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19C KQ0KIHsNCi0gIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wY21w Z3RkMTI4ICgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IpOw0KKyAgcmV0dXJu IChfX20xMjhpKSAoKF9fdjRzaSlfX0EgPiAoX192NHNpKV9fQik7DQogfQ0K IA0KICNpZmRlZiBfX09QVElNSVpFX18NCmRpZmYgLXJ1IC1OIC14IC5zdm4g dHJ1bmsvZ2NjL2NvbmZpZy9pMzg2L3NtbWludHJpbi5oIGludHJpbi9nY2Mv Y29uZmlnL2kzODYvc21taW50cmluLmgNCi0tLSB0cnVuay9nY2MvY29uZmln L2kzODYvc21taW50cmluLmgJMjAxNC0wMS0wMyAxMTozOTowMS4xNTk5MDc2 NzYgKzAxMDANCisrKyBpbnRyaW4vZ2NjL2NvbmZpZy9pMzg2L3NtbWludHJp bi5oCTIwMTQtMTEtMDkgMTM6NDU6MDEuMzAwMTk0OTIxICswMTAwDQpAQCAt MjY3LDcgKzI2Nyw3IEBADQogZXh0ZXJuIF9faW5saW5lIF9fbTEyOGkgX19h dHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpDQogX21tX2NtcGVxX2VwaTY0IChfX20xMjhp IF9fWCwgX19tMTI4aSBfX1kpDQogew0KLSAgcmV0dXJuIChfX20xMjhpKSBf X2J1aWx0aW5faWEzMl9wY21wZXFxICgoX192MmRpKV9fWCwgKF9fdjJkaSlf X1kpOw0KKyAgcmV0dXJuIChfX20xMjhpKSAoKF9fdjJkaSlfX1ggPT0gKF9f djJkaSlfX1kpOw0KIH0NCiANCiAvKiAgTWluL21heCBwYWNrZWQgaW50ZWdl ciBpbnN0cnVjdGlvbnMuICAqLw0KQEAgLTMyNSw3ICszMjUsNyBAQA0KIGV4 dGVybiBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fZ251X2lu bGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0K IF9tbV9tdWxsb19lcGkzMiAoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQ0K IHsNCi0gIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bGxk MTI4ICgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOw0KKyAgcmV0dXJuIChf X20xMjhpKSAoKF9fdjRzdSlfX1ggKiAoX192NHN1KV9fWSk7DQogfQ0KIA0K IC8qIFBhY2tlZCBpbnRlZ2VyIDMyLWJpdCBtdWx0aXBsaWNhdGlvbiBvZiAy IHBhaXJzIG9mIG9wZXJhbmRzDQpAQCAtNzk1LDcgKzc5NSw3IEBADQogZXh0 ZXJuIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5s aW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQog X21tX2NtcGd0X2VwaTY0IChfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpDQog ew0KLSAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wY21wZ3Rx ICgoX192MmRpKV9fWCwgKF9fdjJkaSlfX1kpOw0KKyAgcmV0dXJuIChfX20x MjhpKSAoKF9fdjJkaSlfX1ggPiAoX192MmRpKV9fWSk7DQogfQ0KIA0KICNp ZmRlZiBfX0RJU0FCTEVfU1NFNF8yX18NCmRpZmYgLXJ1IC1OIC14IC5zdm4g dHJ1bmsvZ2NjL2NvbmZpZy9pMzg2L3htbWludHJpbi5oIGludHJpbi9nY2Mv Y29uZmlnL2kzODYveG1taW50cmluLmgNCi0tLSB0cnVuay9nY2MvY29uZmln L2kzODYveG1taW50cmluLmgJMjAxNC0wNi0yOSAyMDoxMjozMy42NzU5NDkw MjMgKzAyMDANCisrKyBpbnRyaW4vZ2NjL2NvbmZpZy9pMzg2L3htbWludHJp bi5oCTIwMTQtMTAtMTcgMTk6NTM6MDYuNzExNDE2NDU1ICswMjAwDQpAQCAt MTgwLDI1ICsxODAsMjUgQEANCiBleHRlcm4gX19pbmxpbmUgX19tMTI4IF9f YXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQ0KIF9tbV9hZGRfcHMgKF9fbTEyOCBfX0Es IF9fbTEyOCBfX0IpDQogew0KLSAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRp bl9pYTMyX2FkZHBzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOw0KKyAg cmV0dXJuIChfX20xMjgpICgoX192NHNmKV9fQSArIChfX3Y0c2YpX19CKTsN CiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9f KChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkNCiBfbW1fc3ViX3BzIChfX20xMjggX19BLCBfX20xMjggX19C KQ0KIHsNCi0gIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zdWJw cyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsNCisgIHJldHVybiAoX19t MTI4KSAoKF9fdjRzZilfX0EgLSAoX192NHNmKV9fQik7DQogfQ0KIA0KIGV4 dGVybiBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19nbnVfaW5s aW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpDQog X21tX211bF9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikNCiB7DQotICBy ZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbXVscHMgKChfX3Y0c2Yp X19BLCAoX192NHNmKV9fQik7DQorICByZXR1cm4gKF9fbTEyOCkgKChfX3Y0 c2YpX19BICogKF9fdjRzZilfX0IpOw0KIH0NCiANCiBleHRlcm4gX19pbmxp bmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fs d2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0KIF9tbV9kaXZfcHMg KF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpDQogew0KLSAgcmV0dXJuIChfX20x MjgpIF9fYnVpbHRpbl9pYTMyX2RpdnBzICgoX192NHNmKV9fQSwgKF9fdjRz ZilfX0IpOw0KKyAgcmV0dXJuIChfX20xMjgpICgoX192NHNmKV9fQSAvIChf X3Y0c2YpX19CKTsNCiB9DQogDQogZXh0ZXJuIF9faW5saW5lIF9fbTEyOCBf X2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkNCkBAIC05NTcsMTMgKzk1NywxMyBAQA0K IGV4dGVybiBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fZ251X2lu bGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQ0K IF9tbV9zdG9yZV9zcyAoZmxvYXQgKl9fUCwgX19tMTI4IF9fQSkNCiB7DQot ICAqX19QID0gX19idWlsdGluX2lhMzJfdmVjX2V4dF92NHNmICgoX192NHNm KV9fQSwgMCk7DQorICAqX19QID0gKChfX3Y0c2YpX19BKVswXTsNCiB9DQog DQogZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fZ251 X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQ0KIF9tbV9jdnRzc19mMzIgKF9fbTEyOCBfX0EpDQogew0KLSAgcmV0dXJu IF9fYnVpbHRpbl9pYTMyX3ZlY19leHRfdjRzZiAoKF9fdjRzZilfX0EsIDAp Ow0KKyAgcmV0dXJuICgoX192NHNmKV9fQSlbMF07DQogfQ0KIA0KIC8qIFN0 b3JlIGZvdXIgU1BGUCB2YWx1ZXMuICBUaGUgYWRkcmVzcyBtdXN0IGJlIDE2 LWJ5dGUgYWxpZ25lZC4gICovDQpkaWZmIC1ydSAtTiAteCAuc3ZuIHRydW5r L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludHJpbnNpY3Nfb3B0 LTEuYyBpbnRyaW4vZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50 cmluc2ljc19vcHQtMS5jDQotLS0gdHJ1bmsvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvaW50cmluc2ljc19vcHQtMS5jCTE5NzAtMDEtMDEgMDE6 MDA6MDAuMDAwMDAwMDAwICswMTAwDQorKysgaW50cmluL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L2ludHJpbnNpY3Nfb3B0LTEuYwkyMDE0LTEw LTEwIDE0OjA3OjA2Ljk4MzM0ODA4MSArMDIwMA0KQEAgLTAsMCArMSwxMSBA QA0KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQorLyogeyBkZy1vcHRpb25z ICItTzIgLW1mbWEiIH0gKi8NCisNCisjaW5jbHVkZSA8ZW1taW50cmluLmg+ DQorDQorX19tMTI4ZCBteWZtYShfX20xMjhkIHgsIF9fbTEyOGQgeSwgX19t MTI4ZCB6KXsNCisgIF9fbTEyOGQgbSA9IF9tbV9tdWxfcGQgKHgsIHkpOw0K KyAgcmV0dXJuIF9tbV9hZGRfcGQgKG0sIHopOw0KK30NCisNCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZmbWFkZCIgfSB9ICovDQpkaWZm IC1ydSAtTiAteCAuc3ZuIHRydW5rL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2ludHJpbnNpY3Nfb3B0LTIuYyBpbnRyaW4vZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvaW50cmluc2ljc19vcHQtMi5jDQotLS0gdHJ1 bmsvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50cmluc2ljc19v cHQtMi5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwDQor KysgaW50cmluL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludHJp bnNpY3Nfb3B0LTIuYwkyMDE0LTEwLTEwIDE0OjA3OjA2Ljk4MzM0ODA4MSAr MDIwMA0KQEAgLTAsMCArMSwxNiBAQA0KKy8qIHsgZGctZG8gY29tcGlsZSB9 ICovDQorLyogeyBkZy1vcHRpb25zICItTyAtZmZhc3QtbWF0aCAtbXNzZTIg LWZkdW1wLXRyZWUtb3B0aW1pemVkIiB9ICovDQorDQorI2luY2x1ZGUgPGVt bWludHJpbi5oPg0KKw0KK2ludCBmKF9fbTEyOGQgeCl7DQorICB4ID0gX21t X3N1Yl9wZCAoeCwgeCk7DQorICB4ID0gX21tX211bF9wZCAoeCwgeCk7DQor ICBkb3VibGUgciA9IDQyOw0KKyAgX21tX3N0b3JlaF9wZCAoJnIsIHgpOw0K KyAgaW50IHogPSByID09IDA7DQorICByZXR1cm4gX19idWlsdGluX2NvbnN0 YW50X3AgKHopICYmIHo7DQorfQ0KKw0KKy8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAicmV0dXJuIDE7IiAib3B0aW1pemVkIiB9IH0gKi8NCisv KiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAgIm9wdGltaXplZCIg fSB9ICovDQpkaWZmIC1ydSAtTiAteCAuc3ZuIHRydW5rL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L2ludHJpbnNpY3Nfb3B0LTMuYyBpbnRyaW4v Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50cmluc2ljc19vcHQt My5jDQotLS0gdHJ1bmsvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv aW50cmluc2ljc19vcHQtMy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwDQorKysgaW50cmluL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2ludHJpbnNpY3Nfb3B0LTMuYwkyMDE0LTEwLTEyIDIyOjI4OjQ2 LjYwMzcwNTU1OCArMDIwMA0KQEAgLTAsMCArMSwxMyBAQA0KKy8qIHsgZGct ZG8gY29tcGlsZSB9ICovDQorLyogeyBkZy1vcHRpb25zICItTyAtbXNzZTIi IH0gKi8NCisNCisjaW5jbHVkZSA8ZW1taW50cmluLmg+DQorDQorZG91Ymxl IGYoKXsNCisgIF9fbTEyOGQgeCA9IF9tbV9zZXQxX3BkICgwLik7DQorICBk b3VibGUgciA9IDQyOw0KKyAgX21tX3N0b3JlaF9wZCAoJnIsIHgpOw0KKyAg cmV0dXJuIHI7DQorfQ0KKw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci1ub3QgInVucGNraHBkIiB9IH0gKi8NCmRpZmYgLXJ1IC1OIC14IC5z dm4gdHJ1bmsvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50cmlu c2ljc19vcHQtNC5jIGludHJpbi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9pbnRyaW5zaWNzX29wdC00LmMNCi0tLSB0cnVuay9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRyaW5zaWNzX29wdC00LmMJMTk3MC0w MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDANCisrKyBpbnRyaW4vZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50cmluc2ljc19vcHQtNC5j CTIwMTQtMTAtMTIgMjI6Mjg6NTIuNjk5OTMxOTg4ICswMjAwDQpAQCAtMCww ICsxLDEyIEBADQorLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCisvKiB7IGRn LW9wdGlvbnMgIi1PIC1mZmFzdC1tYXRoIC1tc3NlMiIgfSAqLw0KKw0KKyNp bmNsdWRlIDxlbW1pbnRyaW4uaD4NCisNCitfX20xMjhkIGYoX19tMTI4ZCB4 LCBfX20xMjhkIHksIF9fbTEyOGQgeil7DQorICB5ID0gX21tX2FkZF9wZCAo eCwgeSk7DQorICB5ID0gX21tX2FkZF9wZCAoeiwgeSk7DQorICByZXR1cm4g X21tX3N1Yl9wZCAoeSwgeCk7DQorfQ0KKw0KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci1ub3QgInN1YnBkIiB9IH0gKi8NCg== --8323329-102622583-1415718541=:22919--