From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5330 invoked by alias); 14 Aug 2007 11:02:53 -0000 Received: (qmail 4745 invoked by uid 22791); 14 Aug 2007 11:02:07 -0000 X-Spam-Check-By: sourceware.org Received: from fencepost.gnu.org (HELO fencepost.gnu.org) (140.186.70.10) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 14 Aug 2007 11:01:48 +0000 Received: from monty-python.gnu.org ([199.232.76.173]) by fencepost.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IKuD5-0008PK-4X for gcc-patches@gnu.org; Tue, 14 Aug 2007 07:05:15 -0400 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1IKu9c-0002PL-Mp for gcc-patches@gnu.org; Tue, 14 Aug 2007 07:01:45 -0400 Received: from mtagate7.de.ibm.com ([195.212.29.156]) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1IKu9b-0002OJ-6d for gcc-patches@gnu.org; Tue, 14 Aug 2007 07:01:40 -0400 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate7.de.ibm.com (8.13.8/8.13.8) with ESMTP id l7EB1aQF498342 for ; Tue, 14 Aug 2007 11:01:36 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v8.4) with ESMTP id l7EB1ZMi2261240 for ; Tue, 14 Aug 2007 13:01:35 +0200 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id l7EB1Zsq024966 for ; Tue, 14 Aug 2007 13:01:35 +0200 Received: from d12mc102.megacenter.de.ibm.com (d12mc102.megacenter.de.ibm.com [9.149.167.114]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id l7EB1ZgS024963 for ; Tue, 14 Aug 2007 13:01:35 +0200 Subject: [PATCH] [4.3 projects] Verctorizer - versioning for alias To: gcc-patches@gnu.org X-Mailer: Lotus Notes Release 7.0 HF144 February 01, 2006 Message-ID: From: Victor Kaplansky Date: Tue, 14 Aug 2007 11:02:00 -0000 MIME-Version: 1.0 Content-type: multipart/mixed; Boundary="0__=4DBBF9A4DFA39AE88f9e8a93df938690918c4DBBF9A4DFA39AE8" Content-Disposition: inline X-Detected-Kernel: Linux 2.0.3x (2) X-IsSubscribed: yes 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 X-SW-Source: 2007-08/txt/msg00846.txt.bz2 --0__=4DBBF9A4DFA39AE88f9e8a93df938690918c4DBBF9A4DFA39AE8 Content-type: text/plain; charset=US-ASCII Content-length: 3093 Often it is impossible to alias analysis to prove dependency or independency. In such cases vectorizer is bound to be conservative. However in many cases at run-time we can validate the independence by testing that data reference ranges are not overlapped. This patch enhances the vectorizer by introducing run-time checks and loop versioning to take advantage of vectorized loop in case when data reference independence can be proved at run-time. The number of added data reference test can be controlled by "vect-max-version-for-alias-checks" parameter. The value of 0 will disable the versioning for alias. Then maximum number of checks produced for versioning for alignment can now be controlled by "vect-max-version-for-alignment-checks". Bootstrapped and regtested on ppc64 and x86_64. Bootstrapped with vectorization enabled on x86_64. Okay for mainline? 2007-08-14 Victor Kaplansky ChangeLog: * tree-vectorizer.c (new_loop_vec_info): Initialize new field. (destroy_loop_vec_info): Add call to VEC_free. * tree-vectorizer.h (may_alias_ddrs): Define. (LOOP_VINFO_MAY_ALIAS_DDRS): Define. * tree-vect-analyze.c (vect_analyze_data_ref_dependence): Change reporting to dump. (vect_is_duplicate_ddr): New. (vect_mark_for_runtime_alias_test): New. (vect_analyze_data_ref_dependences) Add call to vect_mark_for_runtime_alias_test. (vect_enhance_data_refs_alignment): Define local variable vect_versioning_for_alias_required, don't perform versioning for alignment if versioning for alias is required. (vect_enhance_data_refs_alignment): Use PARAM_VECT_MAX_VERSION_FOR_ALIGNMENT_CHECKS instead of PARAM_VECT_MAX_VERSION_CHECKS. * tree-vect-transform.c (vect_create_cond_for_alias_checks): New. (vect_transform_loop): Add call to vect_create_cond_for_alias_checks. * params.def (PARAM_VECT_MAX_VERSION_FOR_ALIGNMENT_CHECKS): Rename. (PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS): Define. testsuite/ChangeLog: * gcc.dg/vect/vect-vfa-01.c: New. * gcc.dg/vect/vect-vfa-02.c: New. * gcc.dg/vect/vect-vfa-03.c: New. * gcc.dg/vect/vect-102a.c, gcc.dg/vect/vect-51.c, gcc.dg/vect/pr29145.c, gcc.dg/vect/vect-43.c, gcc.dg/vect/vect-61.c, gcc.dg/vect/vect-53.c, gcc.dg/vect/vect-45.c, gcc.dg/vect/vect-101.c, gcc.dg/vect/vect-37.c, gcc.dg/vect/vect-79.c, gcc.dg/vect/vect-102.c, gcc.dg/vect/vect-dv-2.c, gcc.dg/vect/vect-57.c, gcc.dg/vect/vect-49.c, gfortran.dg/vect/pr19049.f90: Rename to start with prefix no-vfa-. * gcc.dg/vect/vect.exp: Disable versioning for alias when test starts with no-vfa-. * gfortran.dg/vect/vect.exp: Likewise. (See attached file: vfa.txt) --0__=4DBBF9A4DFA39AE88f9e8a93df938690918c4DBBF9A4DFA39AE8 Content-type: text/plain; name="vfa.txt" Content-Disposition: attachment; filename="vfa.txt" Content-transfer-encoding: base64 Content-length: 92509 SW5kZXg6IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXZmYS0wMS5jDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtdmZhLTAxLmMJKHJldmlzaW9uIDApDQorKysgdGVzdHN1aXRl L2djYy5kZy92ZWN0L3ZlY3QtdmZhLTAxLmMJKHJldmlzaW9uIDApDQpAQCAt MCwwICsxLDM5IEBADQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9pbnQgfSAqLw0KKw0KKyNpbmNsdWRlIDxzdGRhcmcuaD4NCisj aW5jbHVkZSAidHJlZS12ZWN0LmgiDQorDQorI2RlZmluZSBOIDE2DQoraW50 IHJlc3VsdFtOXSA9IHsxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTks IDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyN307DQoraW50IFhbTl0g PSB7MTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIw LCAyMSwgMjIsIDIzLCAyNCwgMjV9Ow0KK2ludCBZW05dID0ge307DQorIA0K K3ZvaWQNCitmb28gKGludCAqaW4sIGludCAqb3V0KQ0KK3sgIA0KKyAgaW50 IGk7DQorICANCisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQorICAgIG91 dFtpXSA9IGluW2ldICsgMjsNCit9DQorDQoraW50DQorbWFpbiAodm9pZCkN Cit7IA0KKyAgaW50IGk7DQorDQorICBjaGVja192ZWN0ICgpOw0KKw0KKyAg Zm9vIChYLCBZKTsNCisgIA0KKyAgLyogY2hlY2sgcmVzdWx0czogICovDQor ICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAgICAgaWYg KFlbaV0gIT0gcmVzdWx0W2ldKQ0KKwlhYm9ydCAoKTsNCisgICAgfQ0KKyAg cmV0dXJuIDA7DQorfSANCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgfSB9 ICovDQorLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0 IiB9IH0gKi8NCkluZGV4OiB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC12 ZmEtMDIuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LXZmYS0wMi5jCShyZXZpc2lvbiAwKQ0KKysr IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXZmYS0wMi5jCShyZXZpc2lv biAwKQ0KQEAgLTAsMCArMSw0NyBAQA0KKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCisNCisjaW5jbHVkZSA8c3Rk YXJnLmg+DQorI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KKw0KKyNkZWZpbmUg TiAxNg0KK2ludCByZXN1bHRZW05dID0gezEyLCAxMywgMTQsIDE1LCAxNiwg MTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3fTsN CitpbnQgcmVzdWx0WltOXSA9IHsxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAx OSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOH07DQoraW50 IFhbTl0gPSB7MTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwg MTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjV9Ow0KK2ludCBZW05dID0ge307 DQoraW50IFpbTl0gPSB7fTsNCisgDQordm9pZA0KK2ZvbyAoaW50ICppbiwg aW50ICpvdXQxLCBpbnQgKm91dDIpDQorew0KKyAgaW50IGk7DQorDQorICBm b3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAgICAgb3V0MVtp XSA9IGluW2ldICsgMjsNCisgICAgICBvdXQyW2ldID0gaW5baV0gKyAzOw0K KyAgICB9DQorfQ0KKw0KK2ludA0KK21haW4gKHZvaWQpDQoreyANCisgIGlu dCBpOw0KKw0KKyAgY2hlY2tfdmVjdCAoKTsNCisNCisgIGZvbyAoWCwgWSwg Wik7DQorICANCisgIC8qIGNoZWNrIHJlc3VsdHM6ICAqLw0KKyAgZm9yIChp ID0gMDsgaSA8IE47IGkrKykNCisgICAgew0KKyAgICAgIGlmIChZW2ldICE9 IHJlc3VsdFlbaV0pDQorCWFib3J0ICgpOw0KKw0KKyAgICAgIGlmIChaW2ld ICE9IHJlc3VsdFpbaV0pDQorCWFib3J0ICgpOw0KKyAgICB9DQorICByZXR1 cm4gMDsNCit9IA0KKw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiB9IH0gKi8N CisvKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0g fSAqLw0KSW5kZXg6IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXZmYS0w My5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtdmZhLTAzLmMJKHJldmlzaW9uIDApDQorKysgdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtdmZhLTAzLmMJKHJldmlzaW9uIDAp DQpAQCAtMCwwICsxLDU4IEBADQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2 ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KKw0KKyNpbmNsdWRlIDxzdGRhcmcu aD4NCisjaW5jbHVkZSAidHJlZS12ZWN0LmgiDQorDQorI2RlZmluZSBOIDE2 DQorc3RydWN0IFMNCit7DQorICB1bnNpZ25lZCBzaG9ydCBhOw0KKyAgdW5z aWduZWQgc2hvcnQgYjsNCit9Ow0KKw0KK3N0cnVjdCBTIHJlc3VsdFtOXSA9 IHsxMiwgMTMsIDEzLCAxNCwgMTQsIDE1LCAxNSwgMTYsIDE2LCAxNywgMTcs IDE4LA0KKyAgICAgICAgICAgICAgICAgICAgICAxOCwgMTksIDE5LCAyMCwg MjAsIDIxLCAyMSwgMjIsIDIyLCAyMywgMjMsIDI0LA0KKwkJICAgICAgMjQs IDI1LCAyNSwgMjYsIDI2LCAyNywgMjcsIDI4fTsNCitzdHJ1Y3QgUyBYW05d ID0gezEwLCAxMCwgMTEsIDExLCAxMiwgMTIsIDEzLCAxMywgMTQsIDE0LCAx NSwgMTUsIDE2LA0KKyAgICAgICAgICAgICAgICAgMTYsIDE3LCAxNywgMTgs IDE4LCAxOSwgMTksIDIwLCAyMCwgMjEsIDIxLCAyMiwgMjIsDQorCQkgMjMs IDIzLCAyNCwgMjQsIDI1LCAyNX07DQorc3RydWN0IFMgWVtOXSA9IHt9Ow0K KyANCit2b2lkDQorZm9vIChzdHJ1Y3QgUyAqIGluLCBzdHJ1Y3QgUyAqIG91 dCkNCit7DQorICBpbnQgaTsNCisNCisgIGZvciAoaSA9IDA7IGkgPCBOOyBp KyspDQorICAgIHsNCisgICAgICBvdXRbaV0uYSA9IGluW2ldLmEgKyAyOw0K KyAgICAgIG91dFtpXS5iID0gaW5baV0uYiArIDM7DQorICAgIH0NCit9DQor DQoraW50DQorbWFpbiAodm9pZCkNCit7IA0KKyAgaW50IGk7DQorDQorICBj aGVja192ZWN0ICgpOw0KKw0KKyAgZm9vIChYLCBZKTsNCisgIA0KKyAgLyog Y2hlY2sgcmVzdWx0czogICovDQorICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsr KQ0KKyAgICB7DQorICAgICAgaWYgKFlbaV0uYSAhPSByZXN1bHRbaV0uYSkN CisJYWJvcnQgKCk7DQorDQorICAgICAgaWYgKFlbaV0uYiAhPSByZXN1bHRb aV0uYikNCisJYWJvcnQgKCk7DQorDQorICAgIH0NCisgIHJldHVybiAwOw0K K30gDQorDQorLyogTmVlZHMgaW50ZXJsZWF2aW5nIHN1cHBvcnQuICAqLw0K Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9y aXplZCAxIGxvb3BzIiAxICJ2ZWN0IiB7IHRhcmdldCB7IHZlY3RfaW50ZXJs ZWF2ZSAmJiB2ZWN0X2V4dHJhY3RfZXZlbl9vZGQgfSB9IH0gfSAqLw0KKy8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXpl ZCAxIGxvb3BzIiAwICJ2ZWN0IiB7IHhmYWlsICB7IHZlY3RfaW50ZXJsZWF2 ZSAmJiB2ZWN0X2V4dHJhY3RfZXZlbl9vZGQgfSB9IH0gfSAqLw0KKy8qIHsg ZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9ICovDQpJ bmRleDogdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QuZXhwDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gdGVzdHN1aXRlL2djYy5kZy92ZWN0L3Zl Y3QuZXhwCShyZXZpc2lvbiAxMjczMTYpDQorKysgdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QuZXhwCSh3b3JraW5nIGNvcHkpDQpAQCAtMTEzLDYgKzEx MywxMiBAQA0KIGdsb2JhbCBTQVZFRF9ERUZBVUxUX1ZFQ1RDRkxBR1MNCiBz ZXQgU0FWRURfREVGQVVMVF9WRUNUQ0ZMQUdTICRERUZBVUxUX1ZFQ1RDRkxB R1MNCiANCisjIC0tcGFyYW0gdmVjdC1tYXgtdmVyc2lvbi1mb3ItYWxpYXMt Y2hlY2tzPTAgdGVzdHMNCitzZXQgREVGQVVMVF9WRUNUQ0ZMQUdTICRTQVZF RF9ERUZBVUxUX1ZFQ1RDRkxBR1MNCitsYXBwZW5kIERFRkFVTFRfVkVDVENG TEFHUyAiLS1wYXJhbSIgInZlY3QtbWF4LXZlcnNpb24tZm9yLWFsaWFzLWNo ZWNrcz0wIg0KK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWlu ICRzcmNkaXIvJHN1YmRpci9uby12ZmEtKi5cW2NTXF1dXSAgXA0KKwkiIiAk REVGQVVMVF9WRUNUQ0ZMQUdTDQorDQogIyAtZmZhc3QtbWF0aCB0ZXN0cw0K IHNldCBERUZBVUxUX1ZFQ1RDRkxBR1MgJFNBVkVEX0RFRkFVTFRfVkVDVENG TEFHUw0KIGxhcHBlbmQgREVGQVVMVF9WRUNUQ0ZMQUdTICItZmZhc3QtbWF0 aCINCkluZGV4OiB0ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvdmVjdC92ZWN0LmV4 cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRlc3RzdWl0ZS9nZm9y dHJhbi5kZy92ZWN0L3ZlY3QuZXhwCShyZXZpc2lvbiAxMjczMTYpDQorKysg dGVzdHN1aXRlL2dmb3J0cmFuLmRnL3ZlY3QvdmVjdC5leHAJKHdvcmtpbmcg Y29weSkNCkBAIC05MCw4ICs5MCwxOSBAQA0KIGRnLWluaXQNCiANCiAjIE1h aW4gbG9vcC4NCi1nZm9ydHJhbi1kZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAt bm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5cW2ZGXF17LDkwLDk1LDAz fSBdXSAkREVGQVVMVF9WRUNUQ0ZMQUdTDQorZ2ZvcnRyYW4tZGctcnVudGVz dCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyL3Zl Y3QtKi5cW2ZGXF17LDkwLDk1LDAzfSBdXSAkREVGQVVMVF9WRUNUQ0ZMQUdT DQorZ2ZvcnRyYW4tZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxh aW4gJHNyY2Rpci8kc3ViZGlyL3ByLSouXFtmRlxdeyw5MCw5NSwwM30gXV0g JERFRkFVTFRfVkVDVENGTEFHUw0KIA0KKyMjIyMgVGVzdHMgd2l0aCBzcGVj aWFsIG9wdGlvbnMNCitnbG9iYWwgU0FWRURfREVGQVVMVF9WRUNUQ0ZMQUdT DQorc2V0IFNBVkVEX0RFRkFVTFRfVkVDVENGTEFHUyAkREVGQVVMVF9WRUNU Q0ZMQUdTDQorDQorIyAtLXBhcmFtIHZlY3QtbWF4LXZlcnNpb24tZm9yLWFs aWFzLWNoZWNrcz0wIHRlc3RzDQorc2V0IERFRkFVTFRfVkVDVENGTEFHUyAk U0FWRURfREVGQVVMVF9WRUNUQ0ZMQUdTDQorbGFwcGVuZCBERUZBVUxUX1ZF Q1RDRkxBR1MgIi0tcGFyYW0iICJ2ZWN0LW1heC12ZXJzaW9uLWZvci1hbGlh cy1jaGVja3M9MCINCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21w bGFpbiAkc3JjZGlyLyRzdWJkaXIvbm8tdmZhLSouXFtmRlxdeyw5MCw5NSww M30gXV0gIFwNCisgICAgICAgICIiICRERUZBVUxUX1ZFQ1RDRkxBR1MNCisN CiAjIENsZWFuIHVwLg0KIHNldCBkZy1kby13aGF0LWRlZmF1bHQgJHtzYXZl LWRnLWRvLXdoYXQtZGVmYXVsdH0NCiANCkluZGV4OiB0cmVlLXZlY3Rvcml6 ZXIuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRyZWUtdmVjdG9y aXplci5jCShyZXZpc2lvbiAxMjczMTYpDQorKysgdHJlZS12ZWN0b3JpemVy LmMJKHdvcmtpbmcgY29weSkNCkBAIC0xNDE0LDkgKzE0MTQsMTIgQEANCiAg IExPT1BfVklORk9fREFUQVJFRlMgKHJlcykgPSBWRUNfYWxsb2MgKGRhdGFf cmVmZXJlbmNlX3AsIGhlYXAsIDEwKTsNCiAgIExPT1BfVklORk9fRERSUyAo cmVzKSA9IFZFQ19hbGxvYyAoZGRyX3AsIGhlYXAsIDEwICogMTApOw0KICAg TE9PUF9WSU5GT19VTkFMSUdORURfRFIgKHJlcykgPSBOVUxMOw0KLSAgTE9P UF9WSU5GT19NQVlfTUlTQUxJR05fU1RNVFMgKHJlcykNCi0gICAgPSBWRUNf YWxsb2MgKHRyZWUsIGhlYXAsIFBBUkFNX1ZBTFVFIChQQVJBTV9WRUNUX01B WF9WRVJTSU9OX0NIRUNLUykpOw0KKyAgTE9PUF9WSU5GT19NQVlfTUlTQUxJ R05fU1RNVFMgKHJlcykgPQ0KKyAgICBWRUNfYWxsb2MgKHRyZWUsIGhlYXAs IFBBUkFNX1ZBTFVFIChQQVJBTV9WRUNUX01BWF9WRVJTSU9OX0ZPUl9BTElH Tk1FTlRfQ0hFQ0tTKSk7DQorICBMT09QX1ZJTkZPX01BWV9BTElBU19ERFJT IChyZXMpID0NCisgICAgVkVDX2FsbG9jIChkZHJfcCwgaGVhcCwgUEFSQU1f VkFMVUUgKFBBUkFNX1ZFQ1RfTUFYX1ZFUlNJT05fRk9SX0FMSUFTX0NIRUNL UykpOw0KIA0KKw0KICAgcmV0dXJuIHJlczsNCiB9DQogDQpAQCAtMTQ5NSw2 ICsxNDk4LDcgQEANCiAgIGZyZWVfZGF0YV9yZWZzIChMT09QX1ZJTkZPX0RB VEFSRUZTIChsb29wX3ZpbmZvKSk7DQogICBmcmVlX2RlcGVuZGVuY2VfcmVs YXRpb25zIChMT09QX1ZJTkZPX0REUlMgKGxvb3BfdmluZm8pKTsNCiAgIFZF Q19mcmVlICh0cmVlLCBoZWFwLCBMT09QX1ZJTkZPX01BWV9NSVNBTElHTl9T VE1UUyAobG9vcF92aW5mbykpOw0KKyAgVkVDX2ZyZWUgKGRkcl9wLCBoZWFw LCBMT09QX1ZJTkZPX01BWV9BTElBU19ERFJTIChsb29wX3ZpbmZvKSk7DQog DQogICBmcmVlIChsb29wX3ZpbmZvKTsNCiAgIGxvb3AtPmF1eCA9IE5VTEw7 DQpJbmRleDogdHJlZS12ZWN0b3JpemVyLmgNCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCi0tLSB0cmVlLXZlY3Rvcml6ZXIuaAkocmV2aXNpb24gMTI3MzE2 KQ0KKysrIHRyZWUtdmVjdG9yaXplci5oCSh3b3JraW5nIGNvcHkpDQpAQCAt MTMzLDYgKzEzMywxMCBAQA0KICAgLyogQWxsIGRhdGEgZGVwZW5kZW5jZXMg aW4gdGhlIGxvb3AuICAqLw0KICAgVkVDIChkZHJfcCwgaGVhcCkgKmRkcnM7 DQogDQorICAvKiBEYXRhIERlcGVuZGVuY2UgUmVsYXRpb25zIGRlZmluaW5n IGFkZHJlc3MgcmFuZ2VzIHRoYXQgYXJlIGNhbmRpZGF0ZXMNCisgICAgIGZv ciBhIHJ1bi10aW1lIGFsaWFzaW5nIGNoZWNrLiAgKi8NCisgIFZFQyAoZGRy X3AsIGhlYXApICptYXlfYWxpYXNfZGRyczsNCisNCiAgIC8qIFN0YXRlbWVu dHMgaW4gdGhlIGxvb3AgdGhhdCBoYXZlIGRhdGEgcmVmZXJlbmNlcyB0aGF0 IGFyZSBjYW5kaWRhdGVzIGZvciBhDQogICAgICBydW50aW1lIChsb29wIHZl cnNpb25pbmcpIG1pc2FsaWdubWVudCBjaGVjay4gICovDQogICBWRUModHJl ZSxoZWFwKSAqbWF5X21pc2FsaWduX3N0bXRzOw0KQEAgLTE1Nyw2ICsxNjEs NyBAQA0KICNkZWZpbmUgTE9PUF9WSU5GT19VTkFMSUdORURfRFIoTCkgICAg KEwpLT51bmFsaWduZWRfZHINCiAjZGVmaW5lIExPT1BfVklORk9fTUFZX01J U0FMSUdOX1NUTVRTKEwpIChMKS0+bWF5X21pc2FsaWduX3N0bXRzDQogI2Rl ZmluZSBMT09QX1ZJTkZPX0xPQyhMKSAgICAgICAgICAgICAoTCktPmxvb3Bf bGluZV9udW1iZXINCisjZGVmaW5lIExPT1BfVklORk9fTUFZX0FMSUFTX0RE UlMoTCkgIChMKS0+bWF5X2FsaWFzX2RkcnMNCiANCiAjZGVmaW5lIE5JVEVS U19LTk9XTl9QKG4pICAgICAgICAgICAgICAgICAgICAgXA0KIChob3N0X2lu dGVnZXJwICgobiksMCkgICAgICAgICAgICAgICAgICAgICAgICBcDQpJbmRl eDogdHJlZS12ZWN0LWFuYWx5emUuYw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIHRyZWUtdmVjdC1hbmFseXplLmMJKHJldmlzaW9uIDEyNzMxNikN CisrKyB0cmVlLXZlY3QtYW5hbHl6ZS5jCSh3b3JraW5nIGNvcHkpDQpAQCAt MTAzOSwxMCArMTAzOSwxMCBAQA0KICAgDQogICBpZiAoRERSX0FSRV9ERVBF TkRFTlQgKGRkcikgPT0gY2hyZWNfZG9udF9rbm93KQ0KICAgICB7DQotICAg ICAgaWYgKHZlY3RfcHJpbnRfZHVtcF9pbmZvIChSRVBPUlRfVU5WRUNUT1JJ WkVEX0xPT1BTKSkNCisgICAgICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8g KFJFUE9SVF9EUl9ERVRBSUxTKSkNCiAgICAgICAgIHsNCiAgICAgICAgICAg ZnByaW50ZiAodmVjdF9kdW1wLA0KLSAgICAgICAgICAgICAgICAgICAibm90 IHZlY3Rvcml6ZWQ6IGNhbid0IGRldGVybWluZSBkZXBlbmRlbmNlIGJldHdl ZW4gIik7DQorICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uaW5nIGZvciBh bGlhcyByZXF1aXJlZDogY2FuJ3QgZGV0ZXJtaW5lIGRlcGVuZGVuY2UgYmV0 d2VlbiAiKTsNCiAgICAgICAgICAgcHJpbnRfZ2VuZXJpY19leHByICh2ZWN0 X2R1bXAsIERSX1JFRiAoZHJhKSwgVERGX1NMSU0pOw0KICAgICAgICAgICBm cHJpbnRmICh2ZWN0X2R1bXAsICIgYW5kICIpOw0KICAgICAgICAgICBwcmlu dF9nZW5lcmljX2V4cHIgKHZlY3RfZHVtcCwgRFJfUkVGIChkcmIpLCBUREZf U0xJTSk7DQpAQCAtMTA1Miw5ICsxMDUyLDkgQEANCiANCiAgIGlmIChERFJf TlVNX0RJU1RfVkVDVFMgKGRkcikgPT0gMCkNCiAgICAgew0KLSAgICAgIGlm ICh2ZWN0X3ByaW50X2R1bXBfaW5mbyAoUkVQT1JUX1VOVkVDVE9SSVpFRF9M T09QUykpDQorICAgICAgaWYgKHZlY3RfcHJpbnRfZHVtcF9pbmZvIChSRVBP UlRfRFJfREVUQUlMUykpDQogICAgICAgICB7DQotICAgICAgICAgIGZwcmlu dGYgKHZlY3RfZHVtcCwgIm5vdCB2ZWN0b3JpemVkOiBiYWQgZGlzdCB2ZWN0 b3IgZm9yICIpOw0KKyAgICAgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICJ2 ZXJzaW9uaW5nIGZvciBhbGlhcyByZXF1aXJlZDogYmFkIGRpc3QgdmVjdG9y IGZvciAiKTsNCiAgICAgICAgICAgcHJpbnRfZ2VuZXJpY19leHByICh2ZWN0 X2R1bXAsIERSX1JFRiAoZHJhKSwgVERGX1NMSU0pOw0KICAgICAgICAgICBm cHJpbnRmICh2ZWN0X2R1bXAsICIgYW5kICIpOw0KICAgICAgICAgICBwcmlu dF9nZW5lcmljX2V4cHIgKHZlY3RfZHVtcCwgRFJfUkVGIChkcmIpLCBUREZf U0xJTSk7DQpAQCAtMTEwOCwxMCArMTEwOCwxMCBAQA0KIAkgIGNvbnRpbnVl Ow0KIAl9DQogDQotICAgICAgaWYgKHZlY3RfcHJpbnRfZHVtcF9pbmZvIChS RVBPUlRfVU5WRUNUT1JJWkVEX0xPT1BTKSkNCisgICAgICBpZiAodmVjdF9w cmludF9kdW1wX2luZm8gKFJFUE9SVF9EUl9ERVRBSUxTKSkNCiAJew0KIAkg IGZwcmludGYgKHZlY3RfZHVtcCwNCi0JCSAgICJub3QgdmVjdG9yaXplZDog cG9zc2libGUgZGVwZW5kZW5jZSBiZXR3ZWVuIGRhdGEtcmVmcyAiKTsNCisJ CSAgICJ2ZXJzaW9uaW5nIGZvciBhbGlhcyByZXF1aXJlZDogcG9zc2libGUg ZGVwZW5kZW5jZSBiZXR3ZWVuIGRhdGEtcmVmcyAiKTsNCiAJICBwcmludF9n ZW5lcmljX2V4cHIgKHZlY3RfZHVtcCwgRFJfUkVGIChkcmEpLCBUREZfU0xJ TSk7DQogCSAgZnByaW50ZiAodmVjdF9kdW1wLCAiIGFuZCAiKTsNCiAJICBw cmludF9nZW5lcmljX2V4cHIgKHZlY3RfZHVtcCwgRFJfUkVGIChkcmIpLCBU REZfU0xJTSk7DQpAQCAtMTEyMyw3ICsxMTIzLDc2IEBADQogICByZXR1cm4g ZmFsc2U7DQogfQ0KIA0KKy8qIFJldHVybiBUUlVFIGlmIEREUl9ORVcgaXMg YWxyZWFkeSBmb3VuZCBpbiBNQVlfQUxJQVNfRERSUyBsaXN0LiAgKi8NCitz dGF0aWMgYm9vbA0KK3ZlY3RfaXNfZHVwbGljYXRlX2RkciAoVkVDIChkZHJf cCwgaGVhcCkgKiBtYXlfYWxpYXNfZGRycywgZGRyX3AgZGRyX25ldykNCit7 DQorICB1bnNpZ25lZCBpOw0KKyAgZGRyX3AgZGRyOw0KIA0KKyAgZm9yIChp ID0gMDsgVkVDX2l0ZXJhdGUgKGRkcl9wLCBtYXlfYWxpYXNfZGRycywgaSwg ZGRyKTsgaSsrKQ0KKyAgICB7DQorICAgICAgdHJlZSBkcmVmX0FfaSwgZHJl Zl9CX2ksIGRyZWZfQV9qLCBkcmVmX0JfajsNCisNCisgICAgICBkcmVmX0Ff aSA9IERSX1JFRiAoRERSX0EgKGRkcikpOw0KKyAgICAgIGRyZWZfQl9pID0g RFJfUkVGIChERFJfQiAoZGRyKSk7DQorICAgICAgZHJlZl9BX2ogPSBEUl9S RUYgKEREUl9BIChkZHJfbmV3KSk7DQorICAgICAgZHJlZl9CX2ogPSBEUl9S RUYgKEREUl9CIChkZHJfbmV3KSk7DQorDQorICAgICAgaWYgKChvcGVyYW5k X2VxdWFsX3AgKGRyZWZfQV9pLCBkcmVmX0FfaiwgMCkNCisJICAgJiYgb3Bl cmFuZF9lcXVhbF9wIChkcmVmX0JfaSwgZHJlZl9CX2osIDApKQ0KKwkgIHx8 IChvcGVyYW5kX2VxdWFsX3AgKGRyZWZfQV9pLCBkcmVmX0JfaiwgMCkNCisJ ICAgICAgJiYgb3BlcmFuZF9lcXVhbF9wIChkcmVmX0JfaSwgZHJlZl9BX2os IDApKSkNCisJew0KKwkgIGlmICh2ZWN0X3ByaW50X2R1bXBfaW5mbyAoUkVQ T1JUX0RSX0RFVEFJTFMpKQ0KKwkgICAgew0KKwkgICAgICBmcHJpbnRmICh2 ZWN0X2R1bXAsICJmb3VuZCBzYW1lIHBhaXIgb2YgZGF0YSByZWZlcmVuY2Vz ICIpOw0KKwkgICAgICBwcmludF9nZW5lcmljX2V4cHIgKHZlY3RfZHVtcCwg ZHJlZl9BX2ksIFRERl9TTElNKTsNCisJICAgICAgZnByaW50ZiAodmVjdF9k dW1wLCAiIGFuZCAiKTsNCisJICAgICAgcHJpbnRfZ2VuZXJpY19leHByICh2 ZWN0X2R1bXAsIGRyZWZfQl9pLCBUREZfU0xJTSk7DQorCSAgICB9DQorCSAg cmV0dXJuIHRydWU7DQorCX0NCisgICAgfQ0KKyAgcmV0dXJuIGZhbHNlOw0K K30NCisNCisvKiBTYXZlIEREUiBpbiBMT09QX1ZJTkZPIGxpc3Qgb2YgZGRy cyB0aGF0IG1heSBhbGlhcyBhbmQgbmVlZCB0byBiZQ0KKyAgIHRlc3RlZCBh dCBydW4tdGltZS4gIFJldHVybnMgZmFsc2UgaWYgbnVtYmVyIG9mIHJ1bi10 aW1lIGNoZWNrcw0KKyAgIGlzZXJ0ZWQgYnkgdmVjdG9yaXplciBpcyBncmVh dGVyIHRoYW4gbWF4aW11bSBkZWZpbmVkIGJ5DQorICAgUEFSQU1fVkVDVF9N QVhfVkVSU0lPTl9GT1JfQUxJQVNfQ0hFQ0tTLiAgKi8NCitzdGF0aWMgYm9v bA0KK3ZlY3RfbWFya19mb3JfcnVudGltZV9hbGlhc190ZXN0IChkZHJfcCBk ZHIsIGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbykNCit7DQorICBpZiAodmVj dF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9EUl9ERVRBSUxTKSkNCisgICAg ew0KKyAgICAgIGZwcmludGYgKHZlY3RfZHVtcCwgIm1hcmsgZm9yIHJ1bi10 aW1lIGFsaWFzaW5nIHRlc3QgYmV0d2VlbiAiKTsNCisgICAgICBwcmludF9n ZW5lcmljX2V4cHIgKHZlY3RfZHVtcCwgRFJfUkVGIChERFJfQSAoZGRyKSks IFRERl9TTElNKTsNCisgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICIgYW5k ICIpOw0KKyAgICAgIHByaW50X2dlbmVyaWNfZXhwciAodmVjdF9kdW1wLCBE Ul9SRUYgKEREUl9CIChkZHIpKSwgVERGX1NMSU0pOw0KKyAgICB9DQorDQor ICAvKiBEbyBub3QgYWRkIHRvIHRoZSBsaXN0IGR1cGxpY2F0ZSBkZHJzLiAg Ki8NCisgIGlmICh2ZWN0X2lzX2R1cGxpY2F0ZV9kZHIgKExPT1BfVklORk9f TUFZX0FMSUFTX0REUlMgKGxvb3BfdmluZm8pLCBkZHIpKQ0KKyAgICByZXR1 cm4gdHJ1ZTsNCisNCisgIGlmIChWRUNfbGVuZ3RoIChkZHJfcCwgTE9PUF9W SU5GT19NQVlfQUxJQVNfRERSUyAobG9vcF92aW5mbykpDQorICAgICAgPj0g KHVuc2lnbmVkKSBQQVJBTV9WQUxVRSAoUEFSQU1fVkVDVF9NQVhfVkVSU0lP Tl9GT1JfQUxJQVNfQ0hFQ0tTKSkNCisgICAgew0KKyAgICAgIGlmICh2ZWN0 X3ByaW50X2R1bXBfaW5mbyAoUkVQT1JUX0RSX0RFVEFJTFMpKQ0KKwl7DQor CSAgZnByaW50ZiAodmVjdF9kdW1wLA0KKwkJICAgImRpc2FibGUgdmVyc2lv bmluZyBmb3IgYWxpYXMgLSBtYXggbnVtYmVyIG9mIGdlbmVyYXRlZCBjaGVj a3MgZXhlZWRlZC4iKTsNCisJfQ0KKw0KKyAgICAgIFZFQ190cnVuY2F0ZSAo ZGRyX3AsIExPT1BfVklORk9fTUFZX0FMSUFTX0REUlMgKGxvb3BfdmluZm8p LCAwKTsNCisNCisgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisgIFZF Q19zYWZlX3B1c2ggKGRkcl9wLCBoZWFwLCBMT09QX1ZJTkZPX01BWV9BTElB U19ERFJTIChsb29wX3ZpbmZvKSwgZGRyKTsNCisgIHJldHVybiB0cnVlOw0K K30NCisNCiAvKiBGdW5jdGlvbiB2ZWN0X2FuYWx5emVfZGF0YV9yZWZfZGVw ZW5kZW5jZXMuDQogICAgICAgICAgIA0KICAgIEV4YW1pbmUgYWxsIHRoZSBk YXRhIHJlZmVyZW5jZXMgaW4gdGhlIGxvb3AsIGFuZCBtYWtlIHN1cmUgdGhl cmUgZG8gbm90DQpAQCAtMTEzMyw3ICsxMjAyLDcgQEANCiB2ZWN0X2FuYWx5 emVfZGF0YV9yZWZfZGVwZW5kZW5jZXMgKGxvb3BfdmVjX2luZm8gbG9vcF92 aW5mbykNCiB7DQogICB1bnNpZ25lZCBpbnQgaTsNCi0gIFZFQyAoZGRyX3As IGhlYXApICpkZHJzID0gTE9PUF9WSU5GT19ERFJTIChsb29wX3ZpbmZvKTsN CisgIFZFQyAoZGRyX3AsIGhlYXApICogZGRycyA9IExPT1BfVklORk9fRERS UyAobG9vcF92aW5mbyk7DQogICBzdHJ1Y3QgZGF0YV9kZXBlbmRlbmNlX3Jl bGF0aW9uICpkZHI7DQogDQogICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8g KFJFUE9SVF9ERVRBSUxTKSkgDQpAQCAtMTE0MSw3ICsxMjEwLDExIEBADQog ICAgICANCiAgIGZvciAoaSA9IDA7IFZFQ19pdGVyYXRlIChkZHJfcCwgZGRy cywgaSwgZGRyKTsgaSsrKQ0KICAgICBpZiAodmVjdF9hbmFseXplX2RhdGFf cmVmX2RlcGVuZGVuY2UgKGRkciwgbG9vcF92aW5mbykpDQorICAgICAgew0K KwkvKiBBZGQgdG8gbGlzdCBvZiBkZHJzIHRoYXQgbmVlZCB0byBiZSB0ZXN0 ZWQgYXQgcnVuLXRpbWUuICAqLw0KKwlpZiAoIXZlY3RfbWFya19mb3JfcnVu dGltZV9hbGlhc190ZXN0IChkZHIsIGxvb3BfdmluZm8pKQ0KICAgICAgIHJl dHVybiBmYWxzZTsNCisgICAgICB9DQogDQogICByZXR1cm4gdHJ1ZTsNCiB9 DQpAQCAtMTU1NCw2ICsxNjI3LDcgQEANCiAgIGJvb2wgc3RhdDsNCiAgIHRy ZWUgc3RtdDsNCiAgIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvOw0KKyAgaW50 IHZlY3RfdmVyc2lvbmluZ19mb3JfYWxpYXNfcmVxdWlyZWQ7DQogDQogICBp ZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRBSUxTKSkNCiAg ICAgZnByaW50ZiAodmVjdF9kdW1wLCAiPT09IHZlY3RfZW5oYW5jZV9kYXRh X3JlZnNfYWxpZ25tZW50ID09PSIpOw0KQEAgLTE2MTksOSArMTY5MywxNSBA QA0KIAl9DQogICAgIH0NCiANCi0gIC8qIE9mdGVuIHBlZWxpbmcgZm9yIGFs aWdubWVudCB3aWxsIHJlcXVpcmUgcGVlbGluZyBmb3IgbG9vcC1ib3VuZCwg d2hpY2ggaW4gDQotICAgICB0dXJuIHJlcXVpcmVzIHRoYXQgd2Uga25vdyBo b3cgdG8gYWRqdXN0IHRoZSBsb29wIGl2cyBhZnRlciB0aGUgbG9vcC4gICov DQotICBpZiAoIXZlY3RfY2FuX2FkdmFuY2VfaXZzX3AgKGxvb3BfdmluZm8p DQorICB2ZWN0X3ZlcnNpb25pbmdfZm9yX2FsaWFzX3JlcXVpcmVkID0NCisg ICAgKFZFQ19sZW5ndGggKGRkcl9wLCBMT09QX1ZJTkZPX01BWV9BTElBU19E RFJTIChsb29wX3ZpbmZvKSkgPiAwKTsNCisNCisgIC8qIFRlbXBvcmFyaWx5 LCBpZiB2ZXJzaW9uaW5nIGZvciBhbGlhcyBpcyByZXF1aXJlZCwgd2UgZGlz YWJsZSBwZWVsaW5nDQorICAgICB1bnRpbCB3ZSBzdXBwb3J0IHBlZWxpbmcg YW5kIHZlcnNpb25pbmcuICBPZnRlbiBwZWVsaW5nIGZvciBhbGlnbm1lbnQN CisgICAgIHdpbGwgcmVxdWlyZSBwZWVsaW5nIGZvciBsb29wLWJvdW5kLCB3 aGljaCBpbiB0dXJuIHJlcXVpcmVzIHRoYXQgd2UNCisgICAgIGtub3cgaG93 IHRvIGFkanVzdCB0aGUgbG9vcCBpdnMgYWZ0ZXIgdGhlIGxvb3AuICAqLw0K KyAgaWYgKHZlY3RfdmVyc2lvbmluZ19mb3JfYWxpYXNfcmVxdWlyZWQNCisg ICAgICAgfHwgIXZlY3RfY2FuX2FkdmFuY2VfaXZzX3AgKGxvb3BfdmluZm8p DQogICAgICAgfHwgIXNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCAobG9v cCwgc2luZ2xlX2V4aXQgKGxvb3ApKSkNCiAgICAgZG9fcGVlbGluZyA9IGZh bHNlOw0KIA0KQEAgLTE3NDksNyArMTgyOSw3IEBADQogICAgICAgICAgICAg ICBpZiAoa25vd25fYWxpZ25tZW50X2Zvcl9hY2Nlc3NfcCAoZHIpDQogICAg ICAgICAgICAgICAgICAgfHwgVkVDX2xlbmd0aCAodHJlZSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMT09QX1ZJTkZPX01BWV9NSVNB TElHTl9TVE1UUyAobG9vcF92aW5mbykpDQotICAgICAgICAgICAgICAgICAg ICAgPj0gKHVuc2lnbmVkKSBQQVJBTV9WQUxVRSAoUEFSQU1fVkVDVF9NQVhf VkVSU0lPTl9DSEVDS1MpKQ0KKyAgICAgICAgICAgICAgICAgICAgID49ICh1 bnNpZ25lZCkgUEFSQU1fVkFMVUUgKFBBUkFNX1ZFQ1RfTUFYX1ZFUlNJT05f Rk9SX0FMSUdOTUVOVF9DSEVDS1MpKQ0KICAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICAgZG9fdmVyc2lvbmluZyA9IGZhbHNlOw0KICAg ICAgICAgICAgICAgICAgIGJyZWFrOw0KSW5kZXg6IHRyZWUtdmVjdC10cmFu c2Zvcm0uYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRyZWUtdmVj dC10cmFuc2Zvcm0uYwkocmV2aXNpb24gMTI3MzE2KQ0KKysrIHRyZWUtdmVj dC10cmFuc2Zvcm0uYwkod29ya2luZyBjb3B5KQ0KQEAgLTU4MDUsNyArNTgw NSwxMTEgQEANCiAgICAgICAgICAgICAgICAgIGFuZF90bXBfbmFtZSwgcHRy c2l6ZV96ZXJvKTsNCiB9DQogDQorLyogRnVuY3Rpb24gdmVjdF9jcmVhdGVf Y29uZF9mb3JfYWxpYXNfY2hlY2tzLg0KIA0KKyAgIENyZWF0ZSBhIGNvbmRp dGlvbmFsIGV4cHJlc3Npb24gdGhhdCByZXByZXNlbnRzIHRoZSBydW4tdGlt ZSBjaGVja3MgZm9yDQorICAgb3ZlcmxhcHBpbmcgb2YgYWRyZXNzIHJhbmdl cyByZXByZXNlbnRlZCBieSBhIGxpc3Qgb2YgZGF0YSByZWZlcmVuY2VzDQor ICAgcmVsYXRpb25zIHBhc3NlZCBhcyBpbnB1dC4NCisNCisgICBJbnB1dDoN CisgICBDT05EX0VYUFIgIC0gaW5wdXQgY29uZGl0aW9uYWwgZXhwcmVzc2lv bi4gIE5ldyBjb25kaXRpb25zIHdpbGwgYmUgY2hhaW5lZA0KKyAgICAgICAg ICAgICAgICBsb2dpY2FsIGFuZCBvcGVyYXRpb24uDQorICAgTE9PUF9WSU5G TyAtIGZpZWxkcyBvZiB0aGUgbG9vcCBpbmZvcm1hdGlvbiBhcmUgdXNlZC4N CisgICAgICAgICAgICAgICAgTE9PUF9WSU5GT19NQVlfQUxJQVNfU1RNVFMg Y29udGFpbnMgdGhlIGxpc3Qgb2YgZGRycyB0byBiZQ0KKwkJY2hlY2tlZC4N CisNCisgICBPdXRwdXQ6DQorICAgQ09ORF9FWFBSIC0gY29uZGl0aW9uYWwg ZXhwcmVzc2lvbi4NCisgICBDT05EX0VYUFJfU1RNVF9MSVNUIC0gc3RhdGVt ZW50cyBuZWVkZWQgdG8gY29uc3RydWN0IHRoZSBjb25kaXRpb25hbA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLg0KKyAgIFRoZSBy ZXR1cm5lZCB2YWx1ZSBpcyB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB0 byBiZSB1c2VkIGluIHRoZSBpZg0KKyAgIHN0YXRlbWVudCB0aGF0IGNvbnRy b2xzIHdoaWNoIHZlcnNpb24gb2YgdGhlIGxvb3AgZ2V0cyBleGVjdXRlZCBh dCBydW50aW1lLg0KKyovDQorDQorc3RhdGljIHZvaWQNCit2ZWN0X2NyZWF0 ZV9jb25kX2Zvcl9hbGlhc19jaGVja3MgKGxvb3BfdmVjX2luZm8gbG9vcF92 aW5mbywNCisJCQkJICAgdHJlZSAqIGNvbmRfZXhwciwNCisJCQkJICAgdHJl ZSAqIGNvbmRfZXhwcl9zdG10X2xpc3QpDQorew0KKyAgVkVDIChkZHJfcCwg aGVhcCkgKiBtYXlfYWxpYXNfZGRycyA9DQorICAgIExPT1BfVklORk9fTUFZ X0FMSUFTX0REUlMgKGxvb3BfdmluZm8pOw0KKyAgdHJlZSB2ZWN0X2ZhY3Rv ciA9DQorICAgIGJ1aWxkX2ludF9jc3QgKGludGVnZXJfdHlwZV9ub2RlLCBM T09QX1ZJTkZPX1ZFQ1RfRkFDVE9SIChsb29wX3ZpbmZvKSk7DQorDQorICBk ZHJfcCBkZHI7DQorICB1bnNpZ25lZCBpbnQgaTsNCisgIHRyZWUgcGFydF9j b25kX2V4cHI7DQorDQorICAvKiBDcmVhdGUgZXhwcmVzc2lvbg0KKyAgICAg KChzdG9yZV9wdHJfMCArIHN0b3JlX3NlZ21lbnRfbGVuZ3RoXzApIDwgbG9h ZF9wdHJfMCkNCisgICAgIHx8IChsb2FkX3B0cl8wICsgbG9hZF9zZWdtZW50 X2xlbmd0aF8wKSA8IHN0b3JlX3B0cl8wKSkNCisgICAgICYmICAgICAgICAg DQorICAgICAuLi4NCisgICAgICYmDQorICAgICAoKHN0b3JlX3B0cl9uICsg c3RvcmVfc2VnbWVudF9sZW5ndGhfbikgPCBsb2FkX3B0cl9uKQ0KKyAgICAg fHwgKGxvYWRfcHRyX24gKyBsb2FkX3NlZ21lbnRfbGVuZ3RoX24pIDwgc3Rv cmVfcHRyX24pKSAgKi8NCisNCisgIGlmIChWRUNfZW1wdHkgKGRkcl9wLCBt YXlfYWxpYXNfZGRycykpDQorICAgIHJldHVybjsNCisNCisgIGZvciAoaSA9 IDA7IFZFQ19pdGVyYXRlIChkZHJfcCwgbWF5X2FsaWFzX2RkcnMsIGksIGRk cik7IGkrKykNCisgICAgew0KKyAgICAgIHRyZWUgc3RtdF9hID0gRFJfU1RN VCAoRERSX0EgKGRkcikpOw0KKyAgICAgIHRyZWUgc3RtdF9iID0gRFJfU1RN VCAoRERSX0IgKGRkcikpOw0KKw0KKyAgICAgIHRyZWUgYWRkcl9iYXNlX2E7 DQorICAgICAgdHJlZSBhZGRyX2Jhc2VfYjsNCisNCisgICAgICB0cmVlIHN0 ZXBfYSA9IERSX1NURVAgKEREUl9BIChkZHIpKTsNCisgICAgICB0cmVlIHNl Z21lbnRfbGVuZ3RoX2EgPQ0KKwlmb2xkX2J1aWxkMiAoTVVMVF9FWFBSLCBp bnRlZ2VyX3R5cGVfbm9kZSwgc3RlcF9hLCB2ZWN0X2ZhY3Rvcik7DQorDQor ICAgICAgdHJlZSBzdGVwX2IgPSBEUl9TVEVQIChERFJfQiAoZGRyKSk7DQor ICAgICAgdHJlZSBzZWdtZW50X2xlbmd0aF9iID0NCisJZm9sZF9idWlsZDIg KE1VTFRfRVhQUiwgaW50ZWdlcl90eXBlX25vZGUsIHN0ZXBfYiwgdmVjdF9m YWN0b3IpOw0KKw0KKw0KKyAgICAgIGlmICh2ZWN0X3ByaW50X2R1bXBfaW5m byAoUkVQT1JUX0RSX0RFVEFJTFMpKQ0KKwl7DQorCSAgZnByaW50ZiAodmVj dF9kdW1wLA0KKwkJICAgImNyZWF0ZSBydW50aW1lIGNoZWNrIGZvciBkYXRh IHJlZmVyZW5jZXMgIik7DQorCSAgcHJpbnRfZ2VuZXJpY19leHByICh2ZWN0 X2R1bXAsIERSX1JFRiAoRERSX0EgKGRkcikpLCBUREZfU0xJTSk7DQorCSAg ZnByaW50ZiAodmVjdF9kdW1wLCAiIGFuZCAiKTsNCisJICBwcmludF9nZW5l cmljX2V4cHIgKHZlY3RfZHVtcCwgRFJfUkVGIChERFJfQiAoZGRyKSksIFRE Rl9TTElNKTsNCisJfQ0KKw0KKyAgICAgIGFkZHJfYmFzZV9hID0NCisgICAg ICAgIHZlY3RfY3JlYXRlX2FkZHJfYmFzZV9mb3JfdmVjdG9yX3JlZiAoc3Rt dF9hLCBjb25kX2V4cHJfc3RtdF9saXN0LA0KKwkJCQkJICAgICAgTlVMTF9U UkVFKTsNCisgICAgICBhZGRyX2Jhc2VfYiA9DQorICAgICAgICB2ZWN0X2Ny ZWF0ZV9hZGRyX2Jhc2VfZm9yX3ZlY3Rvcl9yZWYgKHN0bXRfYiwgY29uZF9l eHByX3N0bXRfbGlzdCwNCisJCQkJCSAgICAgIE5VTExfVFJFRSk7DQorDQor ICAgICAgcGFydF9jb25kX2V4cHIgPSANCisgICAgICAJZm9sZF9idWlsZDIg KFRSVVRIX09SX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLA0KKwkgIGZvbGRf YnVpbGQyIChMVF9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwNCisJICAgIGZv bGRfYnVpbGQyIChQTFVTX0VYUFIsIHB0cl90eXBlX25vZGUsDQorCSAgICAg IGFkZHJfYmFzZV9hLA0KKwkgICAgICBzZWdtZW50X2xlbmd0aF9hKSwNCisJ ICAgIGFkZHJfYmFzZV9iKSwNCisJICBmb2xkX2J1aWxkMiAoTFRfRVhQUiwg Ym9vbGVhbl90eXBlX25vZGUsDQorCSAgICBmb2xkX2J1aWxkMiAoUExVU19F WFBSLCBwdHJfdHlwZV9ub2RlLA0KKwkgICAgICBhZGRyX2Jhc2VfYiwNCisJ ICAgICAgc2VnbWVudF9sZW5ndGhfYiksDQorCSAgICBhZGRyX2Jhc2VfYSkp Ow0KKyAgICAgIA0KKyAgICAgIGlmICgqY29uZF9leHByKQ0KKwkqY29uZF9l eHByID0gZm9sZF9idWlsZDIgKFRSVVRIX0FORF9FWFBSLCBib29sZWFuX3R5 cGVfbm9kZSwNCisJCQkgICAgICAgICAgKmNvbmRfZXhwciwgcGFydF9jb25k X2V4cHIpOw0KKyAgICAgIGVsc2UNCisJKmNvbmRfZXhwciA9IHBhcnRfY29u ZF9leHByOw0KKyAgICB9DQorICAgIGlmICh2ZWN0X3ByaW50X2R1bXBfaW5m byAoUkVQT1JUX1ZFQ1RPUklaRURfTE9PUFMpKQ0KKyAgICAgIGZwcmludGYg KHZlY3RfZHVtcCwgImNyZWF0ZWQgJXUgdmVyc2lvbmluZyBmb3IgYWxpYXMg Y2hlY2tzLlxuIiwNCisgICAgICAgICAgICAgICBWRUNfbGVuZ3RoIChkZHJf cCwgbWF5X2FsaWFzX2RkcnMpKTsNCisNCit9DQorDQogLyogRnVuY3Rpb24g dmVjdF90cmFuc2Zvcm1fbG9vcC4NCiANCiAgICBUaGUgYW5hbHlzaXMgcGhh c2UgaGFzIGRldGVybWluZWQgdGhhdCB0aGUgbG9vcCBpcyB2ZWN0b3JpemFi bGUuDQpAQCAtNTgyNywxNiArNTkzMSwyMSBAQA0KICAgaWYgKHZlY3RfcHJp bnRfZHVtcF9pbmZvIChSRVBPUlRfREVUQUlMUykpDQogICAgIGZwcmludGYg KHZlY3RfZHVtcCwgIj09PSB2ZWNfdHJhbnNmb3JtX2xvb3AgPT09Iik7DQog DQotICAvKiBJZiB0aGUgbG9vcCBoYXMgZGF0YSByZWZlcmVuY2VzIHRoYXQg bWF5IG9yIG1heSBub3QgYmUgYWxpZ25lZCB0aGVuDQorICAvKiBJZiB0aGUg bG9vcCBoYXMgZGF0YSByZWZlcmVuY2VzIHRoYXQgbWF5IG9yIG1heSBub3Qg YmUgYWxpZ25lZCBvci9hbmQNCisgICAgIGhhcyBkYXRhIHJlZmVyZW5jZSBy ZWxhdGlvbnMgd2hvc2UgaW5kZXBlbmRlbmNlIHdhcyBub3QgcHJvdmVuIHRo ZW4NCiAgICAgIHR3byB2ZXJzaW9ucyBvZiB0aGUgbG9vcCBuZWVkIHRvIGJl IGdlbmVyYXRlZCwgb25lIHdoaWNoIGlzIHZlY3Rvcml6ZWQNCiAgICAgIGFu ZCBvbmUgd2hpY2ggaXNuJ3QuICBBIHRlc3QgaXMgdGhlbiBnZW5lcmF0ZWQg dG8gY29udHJvbCB3aGljaCBvZiB0aGUNCiAgICAgIGxvb3BzIGlzIGV4ZWN1 dGVkLiAgVGhlIHRlc3QgY2hlY2tzIGZvciB0aGUgYWxpZ25tZW50IG9mIGFs bCBvZiB0aGUNCi0gICAgIGRhdGEgcmVmZXJlbmNlcyB0aGF0IG1heSBvciBt YXkgbm90IGJlIGFsaWduZWQuICovDQorICAgICBkYXRhIHJlZmVyZW5jZXMg dGhhdCBtYXkgb3IgbWF5IG5vdCBiZSBhbGlnbmVkLiAgQW4gYWRkaXRpb25h bA0KKyAgICAgc2VxdWVuY2Ugb2YgcnVudGltZSB0ZXN0cyBpcyBnZW5lcmF0 ZWQgZm9yIGVhY2ggcGFpcnMgb2YgRERScyB3aG9zZQ0KKyAgICAgaW5kZXBl bmRlbmNlIHdhcyBub3QgcHJvdmVuLiAgVGhlIHZlY3RvcmlzZWQgdmVyc2lv biBvZiBsb29wIGlzIA0KKyAgICAgZXhlY3V0ZWQgb25seSBpZiBib3RoIGFs aWFzIGFuZCBhbGlnbm1lbnQgdGVzdHMgYXJlIHBhc3NlZC4gICovDQogDQot ICBpZiAoVkVDX2xlbmd0aCAodHJlZSwgTE9PUF9WSU5GT19NQVlfTUlTQUxJ R05fU1RNVFMgKGxvb3BfdmluZm8pKSkNCisgIGlmIChWRUNfbGVuZ3RoICh0 cmVlLCBMT09QX1ZJTkZPX01BWV9NSVNBTElHTl9TVE1UUyAobG9vcF92aW5m bykpDQorICAgICAgfHwgVkVDX2xlbmd0aCAoZGRyX3AsIExPT1BfVklORk9f TUFZX0FMSUFTX0REUlMgKGxvb3BfdmluZm8pKSkNCiAgICAgew0KICAgICAg IHN0cnVjdCBsb29wICpubG9vcDsNCi0gICAgICB0cmVlIGNvbmRfZXhwcjsN CisgICAgICB0cmVlIGNvbmRfZXhwciA9IE5VTExfVFJFRTsNCiAgICAgICB0 cmVlIGNvbmRfZXhwcl9zdG10X2xpc3QgPSBOVUxMX1RSRUU7DQogICAgICAg YmFzaWNfYmxvY2sgY29uZGl0aW9uX2JiOw0KICAgICAgIGJsb2NrX3N0bXRf aXRlcmF0b3IgY29uZF9leHBfYnNpOw0KQEAgLTU4NDUsOSArNTk1NCwyMyBA QA0KICAgICAgIGVkZ2UgbmV3X2V4aXRfZSwgZTsNCiAgICAgICB0cmVlIG9y aWdfcGhpLCBuZXdfcGhpLCBhcmc7DQogICAgICAgdW5zaWduZWQgcHJvYiA9 IDQgKiBSRUdfQlJfUFJPQl9CQVNFIC8gNTsNCisgICAgICB0cmVlIGdpbXBs aWZ5X3N0bXRfbGlzdDsNCiANCi0gICAgICBjb25kX2V4cHIgPSB2ZWN0X2Ny ZWF0ZV9jb25kX2Zvcl9hbGlnbl9jaGVja3MgKGxvb3BfdmluZm8sDQorICAg ICAgaWYgKFZFQ19sZW5ndGggKHRyZWUsIExPT1BfVklORk9fTUFZX01JU0FM SUdOX1NUTVRTIChsb29wX3ZpbmZvKSkpDQorCWNvbmRfZXhwciA9DQorCSAg dmVjdF9jcmVhdGVfY29uZF9mb3JfYWxpZ25fY2hlY2tzIChsb29wX3ZpbmZv LCAmY29uZF9leHByX3N0bXRfbGlzdCk7DQorDQorICAgICAgaWYgKFZFQ19s ZW5ndGggKGRkcl9wLCBMT09QX1ZJTkZPX01BWV9BTElBU19ERFJTIChsb29w X3ZpbmZvKSkpDQorCXZlY3RfY3JlYXRlX2NvbmRfZm9yX2FsaWFzX2NoZWNr cyAobG9vcF92aW5mbywgJmNvbmRfZXhwciwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25kX2V4 cHJfc3RtdF9saXN0KTsNCisNCisgICAgICBjb25kX2V4cHIgPQ0KKyAgICAg ICAgZm9sZF9idWlsZDIgKE5FX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLCBj b25kX2V4cHIsIGludGVnZXJfemVyb19ub2RlKTsNCisgICAgICBjb25kX2V4 cHIgPQ0KKyAgICAgICAgZm9yY2VfZ2ltcGxlX29wZXJhbmQgKGNvbmRfZXhw ciwgJmdpbXBsaWZ5X3N0bXRfbGlzdCwgdHJ1ZSwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMX1RSRUUpOw0KKyAgICAgIGFwcGVuZF90 b19zdGF0ZW1lbnRfbGlzdCAoZ2ltcGxpZnlfc3RtdF9saXN0LCAmY29uZF9l eHByX3N0bXRfbGlzdCk7DQorDQogICAgICAgaW5pdGlhbGl6ZV9vcmlnaW5h bF9jb3B5X3RhYmxlcyAoKTsNCiAgICAgICBubG9vcCA9IGxvb3BfdmVyc2lv biAobG9vcCwgY29uZF9leHByLCAmY29uZGl0aW9uX2JiLA0KIAkJCSAgICBw cm9iLCBwcm9iLCBSRUdfQlJfUFJPQl9CQVNFIC0gcHJvYiwgdHJ1ZSk7DQpJ bmRleDogcGFyYW1zLmRlZg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IHBhcmFtcy5kZWYJKHJldmlzaW9uIDEyNzMxNikNCisrKyBwYXJhbXMuZGVm CSh3b3JraW5nIGNvcHkpDQpAQCAtNDg1LDExICs0ODUsMTYgQEANCiAJICJX aGVuIHNldCB0byAxLCB1c2UgZXhwZW5zaXZlIG1ldGhvZHMgdG8gZWxpbWlu YXRlIGFsbCByZWR1bmRhbnQgY29uc3RyYWludHMiLA0KIAkgMCwgMCwgMSkN CiANCi1ERUZQQVJBTShQQVJBTV9WRUNUX01BWF9WRVJTSU9OX0NIRUNLUywN Ci0gICAgICAgICAidmVjdC1tYXgtdmVyc2lvbi1jaGVja3MiLA0KLSAgICAg ICAgICJCb3VuZCBvbiBudW1iZXIgb2YgcnVudGltZSBjaGVja3MgaW5zZXJ0 ZWQgYnkgdGhlIHZlY3Rvcml6ZXIncyBsb29wIHZlcnNpb25pbmciLA0KK0RF RlBBUkFNKFBBUkFNX1ZFQ1RfTUFYX1ZFUlNJT05fRk9SX0FMSUdOTUVOVF9D SEVDS1MsDQorICAgICAgICAgInZlY3QtbWF4LXZlcnNpb24tZm9yLWFsaWdu bWVudC1jaGVja3MiLA0KKyAgICAgICAgICJCb3VuZCBvbiBudW1iZXIgb2Yg cnVudGltZSBjaGVja3MgaW5zZXJ0ZWQgYnkgdGhlIHZlY3Rvcml6ZXIncyBs b29wIHZlcnNpb25pbmcgZm9yIGFsaWdubWVudCBjaGVjayIsDQogICAgICAg ICAgNiwgMCwgMCkNCiANCitERUZQQVJBTShQQVJBTV9WRUNUX01BWF9WRVJT SU9OX0ZPUl9BTElBU19DSEVDS1MsDQorICAgICAgICAgInZlY3QtbWF4LXZl cnNpb24tZm9yLWFsaWFzLWNoZWNrcyIsDQorICAgICAgICAgIkJvdW5kIG9u IG51bWJlciBvZiBydW50aW1lIGNoZWNrcyBpbnNlcnRlZCBieSB0aGUgdmVj dG9yaXplcidzIGxvb3AgdmVyc2lvbmluZyBmb3IgYWxpYXMgY2hlY2siLA0K KyAgICAgICAgIDEwLCAwLCAwKQ0KKw0KIERFRlBBUkFNKFBBUkFNX01BWF9D U0VMSUJfTUVNT1JZX0xPQ0FUSU9OUywNCiAJICJtYXgtY3NlbGliLW1lbW9y eS1sb2NhdGlvbnMiLA0KIAkgIlRoZSBtYXhpbXVtIG1lbW9yeSBsb2NhdGlv bnMgcmVjb3JkZWQgYnkgY3NlbGliIiwNCkluZGV4OiB0ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNTMuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC9uby12ZmEtdmVjdC01 My5jCShyZXZpc2lvbiAwKQ0KKysrIHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC9u by12ZmEtdmVjdC01My5jCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw2MiBA QA0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZmxv YXQgfSAqLw0KKw0KKyNpbmNsdWRlIDxzdGRhcmcuaD4NCisjaW5jbHVkZSAi dHJlZS12ZWN0LmgiDQorDQorI2RlZmluZSBOIDI1Ng0KKw0KK3ZvaWQgYmFy IChjb25zdCBmbG9hdCAqcGEsIGNvbnN0IGZsb2F0ICpwYiwgY29uc3QgZmxv YXQgKnBjKSANCit7DQorICBpbnQgaTsNCisNCisgIC8qIGNoZWNrIHJlc3Vs dHM6ICAqLw0KKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykNCisgICAgew0K KyAgICAgIGlmIChwYVtpXSAhPSAocGJbaV0gKiBwY1tpXSkpDQorCWFib3J0 ICgpOw0KKyAgICB9DQorDQorICByZXR1cm47DQorfQ0KKw0KKy8qIFVuYWxp Z25lZCBwb2ludGVyIHJlYWQgYWNjZXNzZXMsIGFsaWduZWQgcG9pbnRlciB3 cml0ZSBhY2Nlc3MuDQorICAgVGhlIGxvb3AgYm91bmQgaXMgdW5rbm93bi4N CisgICBDYW4ndCBwcm92ZSB0aGF0IHRoZSBwb2ludGVycyBkb24ndCBhbGlh cy4NCisgICB2ZWN0LTQ5LmMgaXMgc2ltaWxhciB0byB0aGlzIG9uZSB3aXRo IG9uZSBkaWZmZXJlbmNlOg0KKyAgICAgICAgdGhlIGxvb3AgYm91bmQgaXMg a25vd24uDQorICAgdmVjdC01Mi5jIGlzIHNpbWlsYXIgdG8gdGhpcyBvbmUg d2l0aCBvbmUgZGlmZmVyZW5jZToNCisgICAgICAgIGFsaWFzaW5nIGlzIG5v dCBhIHByb2JsZW0uICAqLw0KKw0KK2ludA0KK21haW4xIChpbnQgbiwgZmxv YXQgKnBiLCBmbG9hdCAqcGMpDQorew0KKyAgZmxvYXQgcGFbTl0gX19hdHRy aWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDE2KSkpOw0KKyAgaW50IGk7DQorDQor ICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQ0KKyAgICB7DQorICAgICAgcGFb aV0gPSBwYltpXSAqIHBjW2ldOw0KKyAgICB9DQorDQorICBiYXIgKHBhLHBi LHBjKTsNCisNCisgIHJldHVybiAwOw0KK30NCisNCitpbnQgbWFpbiAodm9p ZCkNCit7DQorICBpbnQgaTsNCisgIGZsb2F0IGFbTl0gX19hdHRyaWJ1dGVf XyAoKF9fYWxpZ25lZF9fKDE2KSkpOw0KKyAgZmxvYXQgYltOKzFdIF9fYXR0 cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9IHswLDMsNiw5LDEyLDE1 LDE4LDIxLDI0LDI3LDMwLDMzLDM2LDM5LDQyLDQ1LDQ4LDUxLDU0LDU3LDYw fTsNCisgIGZsb2F0IGNbTisxXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVk X18oMTYpKSkgPSB7MCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywx NCwxNSwxNiwxNywxOCwxOSwyMH07DQorDQorICBjaGVja192ZWN0ICgpOw0K Kw0KKyAgbWFpbjEgKE4sJmJbMV0sYyk7DQorICBtYWluMSAoTiwmYlsxXSwm Y1sxXSk7DQorDQorICByZXR1cm4gMDsNCit9DQorDQorLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMi IDEgInZlY3QiIHsgeGZhaWwgKi0qLSogfSB9IH0gKi8NCisvKiB7IGRnLWZp bmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0gfSAqLw0KSW5kZXg6 IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LTEwMmEuYw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KLS0tIHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LTEwMmEuYwkocmV2aXNpb24gMTI3MzE2KQ0KKysrIHRlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LTEwMmEuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEsNTcg KzAsMCBAQA0KLS8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZl Y3RfaW50IH0gKi8NCi0NCi0jaW5jbHVkZSA8c3RkbGliLmg+DQotI2luY2x1 ZGUgPHN0ZGFyZy5oPg0KLSNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCi0NCi0j ZGVmaW5lIE4gOQ0KLQ0KLXN0cnVjdCBleHRyYWN0aW9uDQotew0KLSAgaW50 IGFbTl07DQotICBpbnQgYltOXTsNCi19Ow0KLQ0KLXN0YXRpYyBpbnQgYVtO XSA9IHsxLDIsMyw0LDUsNiw3LDgsOX07DQotc3RhdGljIGludCBiW05dID0g ezIsMyw0LDUsNiw3LDgsOSw5fTsNCi12b2xhdGlsZSBpbnQgZm9vOw0KLQ0K LWludCBtYWluMSAoaW50IHgsIGludCB5KSB7DQotICBpbnQgaTsNCi0gIHN0 cnVjdCBleHRyYWN0aW9uICpwOw0KLSAgcCA9IChzdHJ1Y3QgZXh0cmFjdGlv biAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGV4dHJhY3Rpb24pKTsNCi0N Ci0gIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQotICAgIHsNCi0gICAgICAg cC0+YVtpXSA9IGFbaV07DQotICAgICAgIGlmIChmb28gPT0gMTM1KQ0KLQkg YWJvcnQgKCk7IC8qIHRvIGF2b2lkIHZlY3Rvcml6YXRpb24gICovDQotICAg IH0NCi0NCi0gIC8qIE5vdCB2ZWN0b3JpemFibGU6IGRpc3RhbmNlIDEuICAq Lw0KLSAgZm9yIChpID0gMDsgaSA8IE4gLSAxOyBpKyspDQotICAgIHsNCi0g ICAgICAgcC0+YVt4ICsgaV0gPSBwLT5hW3ggKyBpICsgMV07DQotICAgIH0N Ci0NCi0gIC8qIGNoZWNrIHJlc3VsdHM6ICovDQotICBmb3IgKGkgPSAwOyBp IDwgTjsgaSsrKQ0KLSAgICB7DQotICAgICAgIGlmIChwLT5hW2ldICE9IGJb aV0pDQotICAgICAgICAgYWJvcnQoKTsNCi0gICAgfQ0KLSAgcmV0dXJuIDA7 DQotfQ0KLQ0KLWludCBtYWluICh2b2lkKQ0KLXsgDQotICBjaGVja192ZWN0 ICgpOw0KLQ0KLSAgZm9vID0gMDsNCi0gIHJldHVybiBtYWluMSAoMCwgTik7 DQotfQ0KLQ0KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAidmVjdG9yaXplZCAxIGxvb3BzIiAwICJ2ZWN0IiB9IH0gKi8NCi0vKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInBvc3NpYmxlIGRl cGVuZGVuY2UgYmV0d2VlbiBkYXRhLXJlZnMiIDEgInZlY3QiIH0gfSAqLw0K LS8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9 ICovDQotDQpJbmRleDogdGVzdHN1aXRlL2djYy5kZy92ZWN0L25vLXZmYS12 ZWN0LTQ1LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNDUuYwkocmV2aXNpb24gMCkN CisrKyB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNDUuYwko cmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNTkgQEANCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Zsb2F0IH0gKi8NCisNCisjaW5j bHVkZSA8c3RkYXJnLmg+DQorI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KKw0K KyNkZWZpbmUgTiAyNTYNCisNCit2b2lkIGJhciAoY29uc3QgZmxvYXQgKnBh LCBjb25zdCBmbG9hdCAqcGIsIGNvbnN0IGZsb2F0ICpwYykgDQorew0KKyAg aW50IGk7DQorDQorICAvKiBjaGVjayByZXN1bHRzOiAgKi8NCisgIGZvciAo aSA9IDA7IGkgPCBOOyBpKyspDQorICAgIHsNCisgICAgICBpZiAocGFbaV0g IT0gKHBiW2ldICogcGNbaV0pKQ0KKwlhYm9ydCAoKTsNCisgICAgfQ0KKw0K KyAgcmV0dXJuOw0KK30NCisNCisvKiBVbmFsaWduZWQgcG9pbnRlciBhY2Nl c3Nlcywgd2l0aCB1bmtub3duIGFsaWdubWVudC4NCisgICBUaGUgbG9vcCBi b3VuZCBpcyBrbm93biBhbmQgZGl2aXNpYmxlIGJ5IHRoZSB2ZWN0b3JpemF0 aW9uIGZhY3Rvci4NCisgICBDYW4ndCBwcm92ZSB0aGF0IHRoZSBwb2ludGVy cyBkb24ndCBhbGlhcy4NCisgICB2ZWN0LTUxLmMgaXMgc2ltaWxhciB0byB0 aGlzIG9uZSB3aXRoIG9uZSBkaWZmZXJlbmNlOg0KKyAgICAgICAgdGhlIGxv b3AgYm91bmQgaXMgdW5rbm93bi4NCisgICB2ZWN0LTQ0LmMgaXMgc2ltaWxh ciB0byB0aGlzIG9uZSB3aXRoIG9uZSBkaWZmZXJlbmNlOg0KKyAgICAgICAg QWxpYXNpbmcgaXMgbm90IGEgcHJvYmxlbS4gICovDQorDQoraW50DQorbWFp bjEgKGZsb2F0ICpwYSwgZmxvYXQgKnBiLCBmbG9hdCAqcGMpDQorew0KKyAg aW50IGk7DQorDQorICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7 DQorICAgICAgcGFbaV0gPSBwYltpXSAqIHBjW2ldOw0KKyAgICB9DQorDQor ICBiYXIgKHBhLHBiLHBjKTsNCisNCisgIHJldHVybiAwOw0KK30NCisNCitp bnQgbWFpbiAodm9pZCkNCit7DQorICBpbnQgaTsNCisgIGZsb2F0IGFbTl07 DQorICBmbG9hdCBiW05dID0gezAsMyw2LDksMTIsMTUsMTgsMjEsMjQsMjcs MzAsMzMsMzYsMzksNDIsNDUsNDgsNTEsNTQsNTd9Ow0KKyAgZmxvYXQgY1tO XSA9IHswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2 LDE3LDE4LDE5fTsNCisNCisgIGNoZWNrX3ZlY3QgKCk7DQorDQorICBtYWlu MSAoYSxiLGMpOw0KKyAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3Bz IiAxICJ2ZWN0IiB7IHhmYWlsICotKi0qIH0gfSB9ICovDQorLyogeyBkZy1m aW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8NCkluZGV4 OiB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtMzcuYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRlc3RzdWl0ZS9nY2MuZGcvdmVj dC9uby12ZmEtdmVjdC0zNy5jCShyZXZpc2lvbiAwKQ0KKysrIHRlc3RzdWl0 ZS9nY2MuZGcvdmVjdC9uby12ZmEtdmVjdC0zNy5jCShyZXZpc2lvbiAwKQ0K QEAgLTAsMCArMSw2MSBAQA0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfaW50IH0gKi8NCisNCisjaW5jbHVkZSA8c3RkYXJnLmg+ DQorI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KKw0KKyNkZWZpbmUgTiAxNg0K K2NoYXIgeFtOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSk7 DQorIA0KK2ludCBtYWluMSAoY2hhciAqeSkNCit7ICANCisgIHN0cnVjdCB7 DQorICAgIGNoYXIgKnA7DQorICAgIGNoYXIgKnE7DQorICB9IHM7DQorICBj aGFyIGNiW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9 IHswLDMsNiw5LDEyLDE1LDE4LDIxLDI0LDI3LDMwLDMzLDM2LDM5LDQyLDQ1 fTsNCisgIGludCBpOw0KKw0KKyAgLyogTm90IHZlY3Rvcml6ZWQgLSBjYW4n dCBhbnRpYWxpYXMgdGhlIHBvaW50ZXIgcy5wIGZyb20gdGhlIGFycmF5IGNi LiAgKi8NCisgIHMucCA9IHk7DQorICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsr KQ0KKyAgICB7DQorICAgICAgcy5wW2ldID0gY2JbaV07DQorICAgIH0NCisN CisgIC8qIGNoZWNrIHJlc3VsdHM6ICAqLw0KKyAgZm9yIChpID0gMDsgaSA8 IE47IGkrKykNCisgICAgew0KKyAgICAgIGlmIChzLnBbaV0gIT0gY2JbaV0p DQorICAgICAgICBhYm9ydCAoKTsNCisgICAgfQ0KKw0KKyAgLyogTm90IHZl Y3Rvcml6ZWQgLSBjYW4ndCBhbnRpYWxpYXMgdGhlIHBvaW50ZXIgcy5wIGZy b20gdGhlIHBvaW50ZXIgcy5xLiAgKi8NCisgIHMucSA9IGNiOw0KKyAgZm9y IChpID0gMDsgaSA8IE47IGkrKykNCisgICAgew0KKyAgICAgIHMucFtpXSA9 IHMucVtpXTsNCisgICAgfQ0KKw0KKyAgLyogY2hlY2sgcmVzdWx0czogICov DQorICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAgICAg aWYgKHMucFtpXSAhPSBzLnFbaV0pDQorICAgICAgICBhYm9ydCAoKTsNCisg ICAgfQ0KKw0KKyAgcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtYWluICh2b2lk KQ0KK3sgDQorICBjaGVja192ZWN0ICgpOw0KKyAgDQorICByZXR1cm4gbWFp bjEgKHgpOw0KK30gDQorDQorLyogQ3VycmVudGx5IHRoZSBsb29wcyBmYWls IHRvIHZlY3Rvcml6ZSBkdWUgdG8gYWxpYXNpbmcgcHJvYmxlbXMuDQorICAg SWYvd2hlbiB0aGUgYWxpYXNpbmcgcHJvYmxlbXMgYXJlIHJlc29sdmVkLCB1 bmFsaWdubWVudCBtYXkNCisgICBwcmV2ZW50IHZlY3Rvcml6YXRpb24gb24g c29tZSB0YXJnZXRzLiAgKi8NCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMiBsb29wcyIgMSAidmVjdCIgeyB4 ZmFpbCAqLSotKiB9IH0gfSAqLw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAiY2FuJ3QgZGV0ZXJtaW5lIGRlcGVuZGVuY2UgYmV0 d2VlbiIgMiAidmVjdCIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7IGNsZWFu dXAtdHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8NCkluZGV4OiB0ZXN0c3VpdGUv Z2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNzkuYw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC9uby12ZmEtdmVj dC03OS5jCShyZXZpc2lvbiAwKQ0KKysrIHRlc3RzdWl0ZS9nY2MuZGcvdmVj dC9uby12ZmEtdmVjdC03OS5jCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw1 MCBAQA0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf ZmxvYXQgfSAqLw0KKw0KKyNpbmNsdWRlIDxzdGRhcmcuaD4NCisjaW5jbHVk ZSAidHJlZS12ZWN0LmgiDQorDQorI2RlZmluZSBOIDE2DQorDQorZmxvYXQg ZmFbTl0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDE2KSkpOw0KK2Zs b2F0IGZiW04rNF0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDE2KSkp ID0gezAuMCwgMS4wLCAyLjAsIDMuMCwgNC4wLCA1LjAsIDcuMCwgOS4wLCAx MC4wLCAxMS4wLCAxMi4wLCAxMy4wLCAxNC4wLCAxNS4wLCAxNi4wLCAxNy4w LCAxOC4wLCAxOS4wfTsNCitmbG9hdCBmY1tOXSBfX2F0dHJpYnV0ZV9fICgo X19hbGlnbmVkX18oMTYpKSkgPSB7MC41LCAxLjUsIDIuNSwgMy41LCA0LjUs IDUuNSwgNy41LCA5LjUsIDEwLjUsIDExLjUsIDEyLjUsIDEzLjUsIDE0LjUs IDE1LjV9Ow0KKw0KKy8qIExpa2UgdmVjdC04MC5jIGJ1dCB0aGUgcG9pbnRl cnMgYXJlIG5vdCBhbm5vdGF0ZWQgYXMgcmVzdHJpY3RlZCwNCisgICBhbmQg dGhlcmVmb3JlIGNhbid0IGJlIGFudGlhbGlhc2VkLiAgKi8NCisNCitpbnQN CittYWluMSAoZmxvYXQgKnBhLCBmbG9hdCAqcGIsIGZsb2F0ICpwYykNCit7 DQorICBpbnQgaTsNCisgIGZsb2F0ICpxID0gcGIgKyA0Ow0KKw0KKyAgZm9y IChpID0gMDsgaSA8IE47IGkrKykNCisgICAgew0KKyAgICAgIHBhW2ldID0g cVtpXSAqIHBjW2ldOw0KKyAgICB9DQorDQorICBmb3IgKGkgPSAwOyBpIDwg TjsgaSsrKQ0KKyAgICB7DQorICAgICAgaWYgKHBhW2ldICE9IHFbaV0gKiBw Y1tpXSkNCisJYWJvcnQoKTsNCisgICAgfQ0KKyAgDQorICByZXR1cm4gMDsN Cit9DQorDQorDQoraW50IG1haW4gKHZvaWQpDQoreyANCisgIGNoZWNrX3Zl Y3QgKCk7DQorDQorICBtYWluMSAoZmEsIGZiLCBmYyk7DQorDQorICByZXR1 cm4gMDsJDQorfQ0KKw0KKy8qIEN1cnJlbnRseSB0aGUgbG9vcHMgZmFpbCB0 byB2ZWN0b3JpemUgZHVlIHRvIGFsaWFzaW5nIHByb2JsZW1zLg0KKyAgSWYv d2hlbiB0aGUgYWxpYXNpbmcgcHJvYmxlbXMgYXJlIHJlc29sdmVkLCB1bmFs aWdubWVudCBtYXkNCisgIHByZXZlbnQgdmVjdG9yaXphdGlvbiBvbiBzb21l IHRhcmdldHMuICAqLw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiAgeyB4ZmFp bCAqLSotKiB9IH0gfSAqLw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiY2FuJ3QgZGV0ZXJtaW5lIGRlcGVuZGVuY2UgYmV0d2Vl biIgMSAidmVjdCIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7IGNsZWFudXAt dHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8NCkluZGV4OiB0ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC01MS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtNTEuYwkocmV2aXNpb24g MTI3MzE2KQ0KKysrIHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LTUxLmMJ KHdvcmtpbmcgY29weSkNCkBAIC0xLDU5ICswLDAgQEANCi0vKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Zsb2F0IH0gKi8NCi0NCi0j aW5jbHVkZSA8c3RkYXJnLmg+DQotI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0K LQ0KLSNkZWZpbmUgTiAyNTYNCi0NCi12b2lkIGJhciAoY29uc3QgZmxvYXQg KnBhLCBjb25zdCBmbG9hdCAqcGIsIGNvbnN0IGZsb2F0ICpwYykgDQotew0K LSAgaW50IGk7DQotDQotICAvKiBjaGVjayByZXN1bHRzOiAgKi8NCi0gIGZv ciAoaSA9IDA7IGkgPCBOOyBpKyspDQotICAgIHsNCi0gICAgICBpZiAocGFb aV0gIT0gKHBiW2ldICogcGNbaV0pKQ0KLQlhYm9ydCAoKTsNCi0gICAgfQ0K LQ0KLSAgcmV0dXJuOw0KLX0NCi0NCi0vKiBVbmFsaWduZWQgcG9pbnRlciBh Y2Nlc3Nlcywgd2l0aCB1bmtub3duIGFsaWdubWVudC4NCi0gICBUaGUgbG9v cCBib3VuZCBpcyB1bmtub3duLg0KLSAgIENhbid0IHByb3ZlIHRoYXQgdGhl IHBvaW50ZXJzIGRvbid0IGFsaWFzLg0KLSAgIHZlY3QtNDUuYyBpcyBzaW1p bGFyIHRvIHRoaXMgb25lIHdpdGggb25lIGRpZmZlcmVuY2U6DQotICAgICAg ICB0aGUgbG9vcCBib3VuZCBpcyBrbm93bi4NCi0gICB2ZWN0LTUwLmMgaXMg c2ltaWxhciB0byB0aGlzIG9uZSB3aXRoIG9uZSBkaWZmZXJlbmNlOg0KLSAg ICAgICAgQWxpYXNpbmcgaXMgbm90IGEgcHJvYmxlbS4gICovDQotDQotaW50 DQotbWFpbjEgKGludCBuLCBmbG9hdCAqcGEsIGZsb2F0ICpwYiwgZmxvYXQg KnBjKQ0KLXsNCi0gIGludCBpOw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IG47 IGkrKykNCi0gICAgew0KLSAgICAgIHBhW2ldID0gcGJbaV0gKiBwY1tpXTsN Ci0gICAgfQ0KLQ0KLSAgYmFyIChwYSxwYixwYyk7DQotDQotICByZXR1cm4g MDsNCi19DQotDQotaW50IG1haW4gKHZvaWQpDQotew0KLSAgaW50IGk7DQot ICBmbG9hdCBhW05dOw0KLSAgZmxvYXQgYltOXSA9IHswLDMsNiw5LDEyLDE1 LDE4LDIxLDI0LDI3LDMwLDMzLDM2LDM5LDQyLDQ1LDQ4LDUxLDU0LDU3fTsN Ci0gIGZsb2F0IGNbTl0gPSB7MCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwx MiwxMywxNCwxNSwxNiwxNywxOCwxOX07DQotDQotICBjaGVja192ZWN0ICgp Ow0KLQ0KLSAgbWFpbjEgKE4sYSxiLGMpOw0KLSAgcmV0dXJuIDA7DQotfQ0K LQ0KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVj dG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiB7IHhmYWlsICotKi0qIH0gfSB9 ICovDQotLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0 IiB9IH0gKi8NCkluZGV4OiB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvcHIyOTE0 NS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ByMjkxNDUuYwkocmV2aXNpb24gMTI3MzE2KQ0KKysrIHRl c3RzdWl0ZS9nY2MuZGcvdmVjdC9wcjI5MTQ1LmMJKHdvcmtpbmcgY29weSkN CkBAIC0xLDQ4ICswLDAgQEANCi0vKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZl LXRhcmdldCB2ZWN0X2ludCB9ICovDQotDQotI2luY2x1ZGUgPHN0ZGFyZy5o Pg0KLSNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCi0NCi12b2lkIHdpdGhfcmVz dHJpY3QoaW50ICogX19yZXN0cmljdCBwKQ0KLXsNCi0gIGludCBpOw0KLSAg aW50ICpxID0gcCAtIDI7DQotDQotICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsg KytpKSB7DQotICAgIHBbaV0gPSBxW2ldOw0KLSAgfQ0KLX0NCi0NCi12b2lk IHdpdGhvdXRfcmVzdHJpY3QoaW50ICogcCkNCi17DQotICBpbnQgaTsNCi0g IGludCAqcSA9IHAgLSAyOw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IDEwMDA7 ICsraSkgew0KLSAgICBwW2ldID0gcVtpXTsNCi0gIH0NCi19DQotDQotaW50 IG1haW4odm9pZCkNCi17DQotICBpbnQgaTsNCi0gIGludCBhWzEwMDJdOw0K LSAgaW50IGJbMTAwMl07DQotDQotICBmb3IgKGkgPSAwOyBpIDwgMTAwMjsg KytpKSB7DQotICAgIGFbaV0gPSBiW2ldID0gaTsNCi0gIH0NCi0NCi0gIHdp dGhfcmVzdHJpY3QoYSArIDIpOw0KLSAgd2l0aG91dF9yZXN0cmljdChiICsg Mik7DQotDQotICBmb3IgKGkgPSAwOyBpIDwgMTAwMjsgKytpKSB7DQotICAg IGlmIChhW2ldICE9IGJbaV0pDQotICAgICAgYWJvcnQoKTsNCi0gIH0NCi0g IHJldHVybiAwOw0KLX0NCi0NCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMCBsb29wcyIgMiAidmVjdCIgIH0g fSAqLw0KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi dmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiAgfSB9ICovDQotLyogeyBk Zy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8NCklu ZGV4OiB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtMTAyYS5j DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdGVzdHN1aXRlL2djYy5k Zy92ZWN0L25vLXZmYS12ZWN0LTEwMmEuYwkocmV2aXNpb24gMCkNCisrKyB0 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtMTAyYS5jCShyZXZp c2lvbiAwKQ0KQEAgLTAsMCArMSw1NyBAQA0KKy8qIHsgZGctcmVxdWlyZS1l ZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCisNCisjaW5jbHVkZSA8 c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlICJ0 cmVlLXZlY3QuaCINCisNCisjZGVmaW5lIE4gOQ0KKw0KK3N0cnVjdCBleHRy YWN0aW9uDQorew0KKyAgaW50IGFbTl07DQorICBpbnQgYltOXTsNCit9Ow0K Kw0KK3N0YXRpYyBpbnQgYVtOXSA9IHsxLDIsMyw0LDUsNiw3LDgsOX07DQor c3RhdGljIGludCBiW05dID0gezIsMyw0LDUsNiw3LDgsOSw5fTsNCit2b2xh dGlsZSBpbnQgZm9vOw0KKw0KK2ludCBtYWluMSAoaW50IHgsIGludCB5KSB7 DQorICBpbnQgaTsNCisgIHN0cnVjdCBleHRyYWN0aW9uICpwOw0KKyAgcCA9 IChzdHJ1Y3QgZXh0cmFjdGlvbiAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0 IGV4dHJhY3Rpb24pKTsNCisNCisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKysp DQorICAgIHsNCisgICAgICAgcC0+YVtpXSA9IGFbaV07DQorICAgICAgIGlm IChmb28gPT0gMTM1KQ0KKwkgYWJvcnQgKCk7IC8qIHRvIGF2b2lkIHZlY3Rv cml6YXRpb24gICovDQorICAgIH0NCisNCisgIC8qIE5vdCB2ZWN0b3JpemFi bGU6IGRpc3RhbmNlIDEuICAqLw0KKyAgZm9yIChpID0gMDsgaSA8IE4gLSAx OyBpKyspDQorICAgIHsNCisgICAgICAgcC0+YVt4ICsgaV0gPSBwLT5hW3gg KyBpICsgMV07DQorICAgIH0NCisNCisgIC8qIGNoZWNrIHJlc3VsdHM6ICov DQorICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAgICAg IGlmIChwLT5hW2ldICE9IGJbaV0pDQorICAgICAgICAgYWJvcnQoKTsNCisg ICAgfQ0KKyAgcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtYWluICh2b2lkKQ0K K3sgDQorICBjaGVja192ZWN0ICgpOw0KKw0KKyAgZm9vID0gMDsNCisgIHJl dHVybiBtYWluMSAoMCwgTik7DQorfQ0KKw0KKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAwICJ2 ZWN0IiB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgInBvc3NpYmxlIGRlcGVuZGVuY2UgYmV0d2VlbiBkYXRhLXJlZnMi IDEgInZlY3QiIH0gfSAqLw0KKy8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRy ZWUtZHVtcCAidmVjdCIgfSB9ICovDQorDQpJbmRleDogdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtNDMuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K LS0tIHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LTQzLmMJKHJldmlzaW9u IDEyNzMxNikNCisrKyB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC00My5j CSh3b3JraW5nIGNvcHkpDQpAQCAtMSw3OCArMCwwIEBADQotLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9mbG9hdCB9ICovDQotDQot I2luY2x1ZGUgPHN0ZGFyZy5oPg0KLSNpbmNsdWRlICJ0cmVlLXZlY3QuaCIN Ci0NCi0jZGVmaW5lIE4gMjU2DQotDQotdm9pZCBiYXIgKGZsb2F0ICpwYSwg ZmxvYXQgKnBiLCBmbG9hdCAqcGMpIA0KLXsNCi0gIGludCBpOw0KLQ0KLSAg LyogY2hlY2sgcmVzdWx0czogICovDQotICBmb3IgKGkgPSAwOyBpIDwgTjsg aSsrKQ0KLSAgICB7DQotICAgICAgaWYgKHBhW2ldICE9IChwYltpXSAqIHBj W2ldKSkNCi0JYWJvcnQgKCk7DQotICAgIH0NCi0NCi0gIHJldHVybjsNCi19 DQotDQotDQotaW50DQotbWFpbjEgKGZsb2F0ICpwYSkNCi17DQotICBpbnQg aTsNCi0gIGZsb2F0IHBiW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRf XygxNikpKSA9IHswLDMsNiw5LDEyLDE1LDE4LDIxLDI0LDI3LDMwLDMzLDM2 LDM5LDQyLDQ1LDQ4LDUxLDU0LDU3fTsNCi0gIGZsb2F0IHBjW05dIF9fYXR0 cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9IHswLDEsMiwzLDQsNSw2 LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5fTsNCi0NCi0g LyogTm90IHZlY3Rvcml6YWJsZTogcGEgbWF5IGFsaWFzIHBiIGFuZC9vciBw Yywgc2luY2UgdGhlaXIgYWRkcmVzc2VzIGVzY2FwZS4gICovDQotICBmb3Ig KGkgPSAwOyBpIDwgTjsgaSsrKQ0KLSAgICB7DQotICAgICAgcGFbaV0gPSBw YltpXSAqIHBjW2ldOw0KLSAgICB9DQotDQotICBiYXIgKHBhLHBiLHBjKTsN Ci0NCi0gIHJldHVybiAwOw0KLX0NCi0NCi1pbnQNCi1tYWluMiAoZmxvYXQg KiBwYSkNCi17DQotICBpbnQgaTsNCi0gIGZsb2F0IHBiW05dID0gezAsMyw2 LDksMTIsMTUsMTgsMjEsMjQsMjcsMzAsMzMsMzYsMzksNDIsNDUsNDgsNTEs NTQsNTd9Ow0KLSAgZmxvYXQgcGNbTl0gPSB7MCwxLDIsMyw0LDUsNiw3LDgs OSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOX07DQotDQotICAvKiBW ZWN0b3JpemFibGU6IHBiIGFuZCBwYyBhZGRyZXNzZXMgZG8gbm90IGVzY2Fw ZS4gICovDQotICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KLSAgICB7DQot ICAgICAgcGFbaV0gPSBwYltpXSAqIHBjW2ldOw0KLSAgICB9ICAgDQotICAN Ci0gIC8qIGNoZWNrIHJlc3VsdHM6ICAqLw0KLSAgZm9yIChpID0gMDsgaSA8 IE47IGkrKykNCi0gICAgew0KLSAgICAgIGlmIChwYVtpXSAhPSAocGJbaV0g KiBwY1tpXSkpDQotICAgICAgICBhYm9ydCAoKTsNCi0gICAgfQ0KLSAgDQot ICByZXR1cm4gMDsNCi19DQotDQotaW50IG1haW4gKHZvaWQpDQotew0KLSAg aW50IGk7DQotICBmbG9hdCBhW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWdu ZWRfXygxNikpKTsNCi0NCi0gIGNoZWNrX3ZlY3QgKCk7DQotDQotICBtYWlu MSAoYSk7DQotICBtYWluMiAoYSk7DQotICByZXR1cm4gMDsNCi19DQotDQot LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3Jp emVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAqLw0KLS8qICB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIkFsaWdubWVudCBvZiBhY2Nlc3Mg Zm9yY2VkIHVzaW5nIHZlcnNpb25pbmciIDEgInZlY3QiIHsgdGFyZ2V0IHZl Y3Rfbm9fYWxpZ24gfSB9IH0gKi8NCi0vKiB7IGRnLWZpbmFsIHsgY2xlYW51 cC10cmVlLWR1bXAgInZlY3QiIH0gfSAqLw0KSW5kZXg6IHRlc3RzdWl0ZS9n Y2MuZGcvdmVjdC9uby12ZmEtdmVjdC0xMDEuYw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC9uby12ZmEtdmVj dC0xMDEuYwkocmV2aXNpb24gMCkNCisrKyB0ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3Qvbm8tdmZhLXZlY3QtMTAxLmMJKHJldmlzaW9uIDApDQpAQCAtMCwwICsx LDQ5IEBADQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVj dF9pbnQgfSAqLw0KKw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVk ZSA8c3RkYXJnLmg+DQorI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KKw0KKyNk ZWZpbmUgTiA5DQorDQorc3RydWN0IGV4dHJhY3Rpb24NCit7DQorICBpbnQg YVtOXTsNCisgIGludCBiW05dOw0KK307DQorDQorc3RhdGljIGludCBhW05d ID0gezEsMiwzLDQsNSw2LDcsOCw5fTsNCitzdGF0aWMgaW50IGJbTl0gPSB7 MiwzLDQsNSw2LDcsOCw5LDB9Ow0KKw0KK2ludCBtYWluMSAoaW50IHgsIGlu dCB5KSB7DQorICBpbnQgaTsNCisgIHN0cnVjdCBleHRyYWN0aW9uICpwOw0K KyAgcCA9IChzdHJ1Y3QgZXh0cmFjdGlvbiAqKSBtYWxsb2MgKHNpemVvZiAo c3RydWN0IGV4dHJhY3Rpb24pKTsNCisNCisgIC8qIE5vdCB2ZWN0b3JpemFi bGU6IGRpZmZlcmVudCB1bmtub3duIG9mZnNldC4gICovDQorICBmb3IgKGkg PSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAgICAgKigoaW50ICopcCAr IHggKyBpKSA9IGFbaV07DQorICAgICAgKigoaW50ICopcCArIHkgKyBpKSA9 IGJbaV07DQorICAgIH0NCisNCisgIC8qIGNoZWNrIHJlc3VsdHM6ICovDQor ICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAgICAgIGlm IChwLT5hW2ldICE9IGFbaV0gfHwgcC0+YltpXSAhPSBiW2ldKQ0KKyAgICAg ICAgIGFib3J0KCk7DQorICAgIH0NCisgIHJldHVybiAwOw0KK30NCisNCitp bnQgbWFpbiAodm9pZCkNCit7IA0KKyAgY2hlY2tfdmVjdCAoKTsNCisNCisg IHJldHVybiBtYWluMSAoMCwgTik7DQorfQ0KKw0KKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAw ICJ2ZWN0IiB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgImNhbid0IGRldGVybWluZSBkZXBlbmRlbmNlIiAxICJ2ZWN0 IiB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAg InZlY3QiIH0gfSAqLw0KKw0KSW5kZXg6IHRlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LTYxLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC02MS5jCShyZXZpc2lvbiAxMjczMTYp DQorKysgdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtNjEuYwkod29ya2lu ZyBjb3B5KQ0KQEAgLTEsNjQgKzAsMCBAQA0KLS8qIHsgZGctcmVxdWlyZS1l ZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCi0vKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Zsb2F0IH0gKi8NCi0NCi0jaW5j bHVkZSA8c3RkYXJnLmg+DQotI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KLQ0K LSNkZWZpbmUgTiAyNTYNCi0NCi12b2lkIGJhciAoZmxvYXQgKnBhLCBmbG9h dCAqcGIsIGZsb2F0ICpwYykNCi17DQotICBpbnQgaTsNCi0NCi0gIC8qIGNo ZWNrIHJlc3VsdHM6ICAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE4vMjsgaSsr KQ0KLSAgICB7DQotICAgICAgaWYgKHBhW2ldICE9IChwYltpKzFdICogcGNb aSsxXSkpDQotCWFib3J0ICgpOw0KLSAgICB9DQotDQotICByZXR1cm47DQot fQ0KLQ0KLS8qIFVuYWxpZ25lZCBwb2ludGVyIHJlYWQgYWNjZXNzZXMgd2l0 aCBrbm93biBhbGlnbm1lbnQsDQotICAgYW5kIGFuIHVuYWxpZ25lZCB3cml0 ZSBhY2Nlc3Mgd2l0aCB1bmtub3duIGFsaWdubWVudC4NCi0gICBUaGUgbG9v cCBib3VuZCBpcyBpdW5rbm93bi4NCi0gICBDYW4ndCBwcm92ZSB0aGF0IHRo ZSBwb2ludGVycyBkb24ndCBhbGlhcy4NCi0gICB2ZWN0LTU3LmMgaXMgc2lt aWxhciB0byB0aGlzIG9uZSB3aXRoIG9uZSBkaWZmZXJlbmNlOg0KLSAgICAg ICAgdGhlIGxvb3AgYm91bmQgaXMga25vd24uDQotICAgdmVjdC02MC5jIGlz IHNpbWlsYXIgdG8gdGhpcyBvbmUgd2l0aCB0d28gZGlmZmVyZW5jZXM6DQot ICAgICAgICBhbGlhc2luZyBpcyBub3QgYSBwcm9ibGVtLCBhbmQgdGhlIHdy aXRlIGFjY2VzcyBpcyB1bmFsaWduZWQuICAqLw0KLQ0KLWludA0KLW1haW4x IChpbnQgbiAsIGZsb2F0ICpwYSkNCi17DQotICBpbnQgaTsNCi0gIGZsb2F0 IGJbTl0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDE2KSkpID0gezAs Myw2LDksMTIsMTUsMTgsMjEsMjQsMjcsMzAsMzMsMzYsMzksNDIsNDUsNDgs NTEsNTQsNTd9Ow0KLSAgZmxvYXQgY1tOXSBfX2F0dHJpYnV0ZV9fICgoX19h bGlnbmVkX18oMTYpKSkgPSB7MCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwx MiwxMywxNCwxNSwxNiwxNywxOCwxOX07DQotICBmbG9hdCAqcGIgPSBiOw0K LSAgZmxvYXQgKnBjID0gYzsNCi0NCi0gIGZvciAoaSA9IDA7IGkgPCBuLzI7 IGkrKykNCi0gICAgew0KLSAgICAgIHBhW2ldID0gcGJbaSsxXSAqIHBjW2kr MV07DQotICAgIH0NCi0NCi0gIGJhciAocGEscGIscGMpOw0KLQ0KLSAgcmV0 dXJuIDA7DQotfQ0KLQ0KLWludCBtYWluICh2b2lkKQ0KLXsNCi0gIGludCBp Ow0KLSAgaW50IG49TjsNCi0gIGZsb2F0IGFbTl0gX19hdHRyaWJ1dGVfXyAo KF9fYWxpZ25lZF9fKDE2KSkpOw0KLQ0KLSAgY2hlY2tfdmVjdCAoKTsNCi0g IG1haW4xIChuLGEpOw0KLQ0KLSAgcmV0dXJuIDA7DQotfQ0KLQ0KLS8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAx IGxvb3BzIiAxICJ2ZWN0IiB7IHhmYWlsICotKi0qIH0gfSB9ICovDQotLyog eyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8N CkluZGV4OiB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC01My5jDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtNTMuYwkocmV2aXNpb24gMTI3MzE2KQ0KKysrIHRlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LTUzLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDYy ICswLDAgQEANCi0vKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2 ZWN0X2Zsb2F0IH0gKi8NCi0NCi0jaW5jbHVkZSA8c3RkYXJnLmg+DQotI2lu Y2x1ZGUgInRyZWUtdmVjdC5oIg0KLQ0KLSNkZWZpbmUgTiAyNTYNCi0NCi12 b2lkIGJhciAoY29uc3QgZmxvYXQgKnBhLCBjb25zdCBmbG9hdCAqcGIsIGNv bnN0IGZsb2F0ICpwYykgDQotew0KLSAgaW50IGk7DQotDQotICAvKiBjaGVj ayByZXN1bHRzOiAgKi8NCi0gIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQot ICAgIHsNCi0gICAgICBpZiAocGFbaV0gIT0gKHBiW2ldICogcGNbaV0pKQ0K LQlhYm9ydCAoKTsNCi0gICAgfQ0KLQ0KLSAgcmV0dXJuOw0KLX0NCi0NCi0v KiBVbmFsaWduZWQgcG9pbnRlciByZWFkIGFjY2Vzc2VzLCBhbGlnbmVkIHBv aW50ZXIgd3JpdGUgYWNjZXNzLg0KLSAgIFRoZSBsb29wIGJvdW5kIGlzIHVu a25vd24uDQotICAgQ2FuJ3QgcHJvdmUgdGhhdCB0aGUgcG9pbnRlcnMgZG9u J3QgYWxpYXMuDQotICAgdmVjdC00OS5jIGlzIHNpbWlsYXIgdG8gdGhpcyBv bmUgd2l0aCBvbmUgZGlmZmVyZW5jZToNCi0gICAgICAgIHRoZSBsb29wIGJv dW5kIGlzIGtub3duLg0KLSAgIHZlY3QtNTIuYyBpcyBzaW1pbGFyIHRvIHRo aXMgb25lIHdpdGggb25lIGRpZmZlcmVuY2U6DQotICAgICAgICBhbGlhc2lu ZyBpcyBub3QgYSBwcm9ibGVtLiAgKi8NCi0NCi1pbnQNCi1tYWluMSAoaW50 IG4sIGZsb2F0ICpwYiwgZmxvYXQgKnBjKQ0KLXsNCi0gIGZsb2F0IHBhW05d IF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKTsNCi0gIGludCBp Ow0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykNCi0gICAgew0KLSAg ICAgIHBhW2ldID0gcGJbaV0gKiBwY1tpXTsNCi0gICAgfQ0KLQ0KLSAgYmFy IChwYSxwYixwYyk7DQotDQotICByZXR1cm4gMDsNCi19DQotDQotaW50IG1h aW4gKHZvaWQpDQotew0KLSAgaW50IGk7DQotICBmbG9hdCBhW05dIF9fYXR0 cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKTsNCi0gIGZsb2F0IGJbTisx XSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSkgPSB7MCwzLDYs OSwxMiwxNSwxOCwyMSwyNCwyNywzMCwzMywzNiwzOSw0Miw0NSw0OCw1MSw1 NCw1Nyw2MH07DQotICBmbG9hdCBjW04rMV0gX19hdHRyaWJ1dGVfXyAoKF9f YWxpZ25lZF9fKDE2KSkpID0gezAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEs MTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjB9Ow0KLQ0KLSAgY2hlY2tfdmVj dCAoKTsNCi0NCi0gIG1haW4xIChOLCZiWzFdLGMpOw0KLSAgbWFpbjEgKE4s JmJbMV0sJmNbMV0pOw0KLQ0KLSAgcmV0dXJuIDA7DQotfQ0KLQ0KLS8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAx IGxvb3BzIiAxICJ2ZWN0IiB7IHhmYWlsICotKi0qIH0gfSB9ICovDQotLyog eyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8N CkluZGV4OiB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtMTAy LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3Qvbm8tdmZhLXZlY3QtMTAyLmMJKHJldmlzaW9uIDApDQorKysg dGVzdHN1aXRlL2djYy5kZy92ZWN0L25vLXZmYS12ZWN0LTEwMi5jCShyZXZp c2lvbiAwKQ0KQEAgLTAsMCArMSw1NyBAQA0KKy8qIHsgZGctcmVxdWlyZS1l ZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCisNCisjaW5jbHVkZSA8 c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlICJ0 cmVlLXZlY3QuaCINCisNCisjZGVmaW5lIE4gOQ0KKw0KK3N0cnVjdCBleHRy YWN0aW9uDQorew0KKyAgaW50IGFbTl07DQorICBpbnQgYltOXTsNCit9Ow0K Kw0KK3N0YXRpYyBpbnQgYVtOXSA9IHsxLDIsMyw0LDUsNiw3LDgsOX07DQor c3RhdGljIGludCBiW05dID0gezIsMyw0LDUsNiw3LDgsOSw5fTsNCit2b2xh dGlsZSBpbnQgZm9vOw0KKw0KK2ludCBtYWluMSAoaW50IHgsIGludCB5KSB7 DQorICBpbnQgaTsNCisgIHN0cnVjdCBleHRyYWN0aW9uICpwOw0KKyAgcCA9 IChzdHJ1Y3QgZXh0cmFjdGlvbiAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0 IGV4dHJhY3Rpb24pKTsNCisNCisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKysp DQorICAgIHsNCisgICAgICAgcC0+YVtpXSA9IGFbaV07DQorICAgICAgIGlm IChmb28gPT0gMTM1KQ0KKwkgYWJvcnQgKCk7IC8qIHRvIGF2b2lkIHZlY3Rv cml6YXRpb24gICovDQorICAgIH0NCisNCisgIC8qIE5vdCB2ZWN0b3JpemFi bGU6IGRpc3RhbmNlIDEuICAqLw0KKyAgZm9yIChpID0gMDsgaSA8IE4gLSAx OyBpKyspDQorICAgIHsNCisgICAgICAgKigoaW50ICopcCArIHggKyBpKSA9 ICooKGludCAqKXAgKyB4ICsgaSArIDEpOw0KKyAgICB9DQorDQorICAvKiBj aGVjayByZXN1bHRzOiAqLw0KKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykN CisgICAgew0KKyAgICAgICBpZiAocC0+YVtpXSAhPSBiW2ldKQ0KKyAgICAg ICAgIGFib3J0KCk7DQorICAgIH0NCisgIHJldHVybiAwOw0KK30NCisNCitp bnQgbWFpbiAodm9pZCkNCit7IA0KKyAgY2hlY2tfdmVjdCAoKTsNCisNCisg IGZvbyA9IDA7DQorICByZXR1cm4gbWFpbjEgKDAsIE4pOw0KK30NCisNCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6 ZWQgMSBsb29wcyIgMCAidmVjdCIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJwb3NzaWJsZSBkZXBlbmRlbmNlIGJl dHdlZW4gZGF0YS1yZWZzIiAxICJ2ZWN0IiB9IH0gKi8NCisvKiB7IGRnLWZp bmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0gfSAqLw0KKw0KSW5k ZXg6IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LTQ1LmMNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NCi0tLSB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC00NS5jCShyZXZpc2lvbiAxMjczMTYpDQorKysgdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtNDUuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEsNTkgKzAs MCBAQA0KLS8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf ZmxvYXQgfSAqLw0KLQ0KLSNpbmNsdWRlIDxzdGRhcmcuaD4NCi0jaW5jbHVk ZSAidHJlZS12ZWN0LmgiDQotDQotI2RlZmluZSBOIDI1Ng0KLQ0KLXZvaWQg YmFyIChjb25zdCBmbG9hdCAqcGEsIGNvbnN0IGZsb2F0ICpwYiwgY29uc3Qg ZmxvYXQgKnBjKSANCi17DQotICBpbnQgaTsNCi0NCi0gIC8qIGNoZWNrIHJl c3VsdHM6ICAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE47IGkrKykNCi0gICAg ew0KLSAgICAgIGlmIChwYVtpXSAhPSAocGJbaV0gKiBwY1tpXSkpDQotCWFi b3J0ICgpOw0KLSAgICB9DQotDQotICByZXR1cm47DQotfQ0KLQ0KLS8qIFVu YWxpZ25lZCBwb2ludGVyIGFjY2Vzc2VzLCB3aXRoIHVua25vd24gYWxpZ25t ZW50Lg0KLSAgIFRoZSBsb29wIGJvdW5kIGlzIGtub3duIGFuZCBkaXZpc2li bGUgYnkgdGhlIHZlY3Rvcml6YXRpb24gZmFjdG9yLg0KLSAgIENhbid0IHBy b3ZlIHRoYXQgdGhlIHBvaW50ZXJzIGRvbid0IGFsaWFzLg0KLSAgIHZlY3Qt NTEuYyBpcyBzaW1pbGFyIHRvIHRoaXMgb25lIHdpdGggb25lIGRpZmZlcmVu Y2U6DQotICAgICAgICB0aGUgbG9vcCBib3VuZCBpcyB1bmtub3duLg0KLSAg IHZlY3QtNDQuYyBpcyBzaW1pbGFyIHRvIHRoaXMgb25lIHdpdGggb25lIGRp ZmZlcmVuY2U6DQotICAgICAgICBBbGlhc2luZyBpcyBub3QgYSBwcm9ibGVt LiAgKi8NCi0NCi1pbnQNCi1tYWluMSAoZmxvYXQgKnBhLCBmbG9hdCAqcGIs IGZsb2F0ICpwYykNCi17DQotICBpbnQgaTsNCi0NCi0gIGZvciAoaSA9IDA7 IGkgPCBOOyBpKyspDQotICAgIHsNCi0gICAgICBwYVtpXSA9IHBiW2ldICog cGNbaV07DQotICAgIH0NCi0NCi0gIGJhciAocGEscGIscGMpOw0KLQ0KLSAg cmV0dXJuIDA7DQotfQ0KLQ0KLWludCBtYWluICh2b2lkKQ0KLXsNCi0gIGlu dCBpOw0KLSAgZmxvYXQgYVtOXTsNCi0gIGZsb2F0IGJbTl0gPSB7MCwzLDYs OSwxMiwxNSwxOCwyMSwyNCwyNywzMCwzMywzNiwzOSw0Miw0NSw0OCw1MSw1 NCw1N307DQotICBmbG9hdCBjW05dID0gezAsMSwyLDMsNCw1LDYsNyw4LDks MTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTl9Ow0KLQ0KLSAgY2hlY2tf dmVjdCAoKTsNCi0NCi0gIG1haW4xIChhLGIsYyk7DQotICByZXR1cm4gMDsN Ci19DQotDQotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIHsgeGZhaWwgKi0qLSog fSB9IH0gKi8NCi0vKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAg InZlY3QiIH0gfSAqLw0KSW5kZXg6IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LTEwMS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtMTAxLmMJKHJldmlzaW9uIDEyNzMxNikN CisrKyB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC0xMDEuYwkod29ya2lu ZyBjb3B5KQ0KQEAgLTEsNDkgKzAsMCBAQA0KLS8qIHsgZGctcmVxdWlyZS1l ZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCi0NCi0jaW5jbHVkZSA8 c3RkbGliLmg+DQotI2luY2x1ZGUgPHN0ZGFyZy5oPg0KLSNpbmNsdWRlICJ0 cmVlLXZlY3QuaCINCi0NCi0jZGVmaW5lIE4gOQ0KLQ0KLXN0cnVjdCBleHRy YWN0aW9uDQotew0KLSAgaW50IGFbTl07DQotICBpbnQgYltOXTsNCi19Ow0K LQ0KLXN0YXRpYyBpbnQgYVtOXSA9IHsxLDIsMyw0LDUsNiw3LDgsOX07DQot c3RhdGljIGludCBiW05dID0gezIsMyw0LDUsNiw3LDgsOSwwfTsNCi0NCi1p bnQgbWFpbjEgKGludCB4LCBpbnQgeSkgew0KLSAgaW50IGk7DQotICBzdHJ1 Y3QgZXh0cmFjdGlvbiAqcDsNCi0gIHAgPSAoc3RydWN0IGV4dHJhY3Rpb24g KikgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBleHRyYWN0aW9uKSk7DQotDQot ICAvKiBOb3QgdmVjdG9yaXphYmxlOiBkaWZmZXJlbnQgdW5rbm93biBvZmZz ZXQuICAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE47IGkrKykNCi0gICAgew0K LSAgICAgICooKGludCAqKXAgKyB4ICsgaSkgPSBhW2ldOw0KLSAgICAgICoo KGludCAqKXAgKyB5ICsgaSkgPSBiW2ldOw0KLSAgICB9DQotDQotICAvKiBj aGVjayByZXN1bHRzOiAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE47IGkrKykN Ci0gICAgew0KLSAgICAgICBpZiAocC0+YVtpXSAhPSBhW2ldIHx8IHAtPmJb aV0gIT0gYltpXSkNCi0gICAgICAgICBhYm9ydCgpOw0KLSAgICB9DQotICBy ZXR1cm4gMDsNCi19DQotDQotaW50IG1haW4gKHZvaWQpDQoteyANCi0gIGNo ZWNrX3ZlY3QgKCk7DQotDQotICByZXR1cm4gbWFpbjEgKDAsIE4pOw0KLX0N Ci0NCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZl Y3Rvcml6ZWQgMSBsb29wcyIgMCAidmVjdCIgfSB9ICovDQotLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJjYW4ndCBkZXRlcm1pbmUg ZGVwZW5kZW5jZSIgMSAidmVjdCIgfSB9ICovDQotLyogeyBkZy1maW5hbCB7 IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8NCi0NCkluZGV4OiB0 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNTcuYw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC9u by12ZmEtdmVjdC01Ny5jCShyZXZpc2lvbiAwKQ0KKysrIHRlc3RzdWl0ZS9n Y2MuZGcvdmVjdC9uby12ZmEtdmVjdC01Ny5jCShyZXZpc2lvbiAwKQ0KQEAg LTAsMCArMSw2MiBAQA0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFy Z2V0IHZlY3RfZmxvYXQgfSAqLw0KKw0KKyNpbmNsdWRlIDxzdGRhcmcuaD4N CisjaW5jbHVkZSAidHJlZS12ZWN0LmgiDQorDQorI2RlZmluZSBOIDI1Ng0K Kw0KK3ZvaWQgYmFyIChmbG9hdCAqcGEsIGZsb2F0ICpwYiwgZmxvYXQgKnBj KQ0KK3sNCisgIGludCBpOw0KKw0KKyAgLyogY2hlY2sgcmVzdWx0czogICov DQorICBmb3IgKGkgPSAwOyBpIDwgTi8yOyBpKyspDQorICAgIHsNCisgICAg ICBpZiAocGFbaV0gIT0gKHBiW2krMV0gKiBwY1tpKzFdKSkNCisgICAgICAg IGFib3J0ICgpOw0KKyAgICB9DQorDQorICByZXR1cm47DQorfQ0KKw0KKy8q IFVuYWxpZ25lZCBwb2ludGVyIHJlYWQgYWNjZXNzZXMgd2l0aCBrbm93biBh bGlnbm1lbnQsDQorICAgYW5kIGFuIHVuYWxpZ25lZCB3cml0ZSBhY2Nlc3Mg d2l0aCB1bmtub3duIGFsaWdubWVudC4NCisgICBUaGUgbG9vcCBib3VuZCBp cyBrbm93biBhbmQgZGl2aXNpYmxlIGJ5IHRoZSB2ZWN0b3JpemF0aW9uIGZh Y3Rvci4NCisgICBDYW4ndCBwcm92ZSB0aGF0IHRoZSBwb2ludGVycyBkb24n dCBhbGlhcy4NCisgICB2ZWN0LTYxLmMgaXMgc2ltaWxhciB0byB0aGlzIG9u ZSB3aXRoIG9uZSBkaWZmZXJlbmNlOg0KKyAgICAgICAgdGhlIGxvb3AgYm91 bmQgaXMgdW5rbm93bi4NCisgICB2ZWN0LTU2LmMgaXMgc2ltaWxhciB0byB0 aGlzIG9uZSB3aXRoIHR3byBkaWZmZXJlbmNlczoNCisgICAgICAgIGFsaWFz aW5nIGlzIGEgcHJvYmxlbSwgYW5kIHRoZSB3cml0ZSBhY2Nlc3MgaXMgYWxp Z25lZC4gICovDQorDQoraW50DQorbWFpbjEgKGZsb2F0ICpwYSkNCit7DQor ICBpbnQgaTsNCisgIGZsb2F0IGJbTl0gX19hdHRyaWJ1dGVfXyAoKF9fYWxp Z25lZF9fKDE2KSkpID0gezAsMyw2LDksMTIsMTUsMTgsMjEsMjQsMjcsMzAs MzMsMzYsMzksNDIsNDUsNDgsNTEsNTQsNTd9Ow0KKyAgZmxvYXQgY1tOXSBf X2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSkgPSB7MCwxLDIsMyw0 LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOX07DQor ICBmbG9hdCAqcGIgPSBiOw0KKyAgZmxvYXQgKnBjID0gYzsNCisNCisgIGZv ciAoaSA9IDA7IGkgPCBOLzI7IGkrKykNCisgICAgew0KKyAgICAgIHBhW2ld ID0gcGJbaSsxXSAqIHBjW2krMV07DQorICAgIH0NCisNCisgIGJhciAocGEs IHBiLCBwYyk7DQorDQorICByZXR1cm4gMDsNCit9DQorDQoraW50IG1haW4g KHZvaWQpDQorew0KKyAgaW50IGk7DQorICBmbG9hdCBhW05dIF9fYXR0cmli dXRlX18gKChfX2FsaWduZWRfXygxNikpKTsNCisNCisgIGNoZWNrX3ZlY3Qg KCk7DQorICBtYWluMSAoYSk7DQorDQorICByZXR1cm4gMDsNCit9DQorDQor LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3Jp emVkIDEgbG9vcHMiIDEgInZlY3QiIHsgeGZhaWwgKi0qLSogfSB9IH0gKi8N CisvKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0g fSAqLw0KSW5kZXg6IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LTM3LmMN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC0zNy5jCShyZXZpc2lvbiAxMjczMTYpDQorKysgdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtMzcuYwkod29ya2luZyBjb3B5KQ0KQEAg LTEsNjEgKzAsMCBAQA0KLS8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFy Z2V0IHZlY3RfaW50IH0gKi8NCi0NCi0jaW5jbHVkZSA8c3RkYXJnLmg+DQot I2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KLQ0KLSNkZWZpbmUgTiAxNg0KLWNo YXIgeFtOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSk7DQot IA0KLWludCBtYWluMSAoY2hhciAqeSkNCi17ICANCi0gIHN0cnVjdCB7DQot ICAgIGNoYXIgKnA7DQotICAgIGNoYXIgKnE7DQotICB9IHM7DQotICBjaGFy IGNiW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9IHsw LDMsNiw5LDEyLDE1LDE4LDIxLDI0LDI3LDMwLDMzLDM2LDM5LDQyLDQ1fTsN Ci0gIGludCBpOw0KLQ0KLSAgLyogTm90IHZlY3Rvcml6ZWQgLSBjYW4ndCBh bnRpYWxpYXMgdGhlIHBvaW50ZXIgcy5wIGZyb20gdGhlIGFycmF5IGNiLiAg Ki8NCi0gIHMucCA9IHk7DQotICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0K LSAgICB7DQotICAgICAgcy5wW2ldID0gY2JbaV07DQotICAgIH0NCi0NCi0g IC8qIGNoZWNrIHJlc3VsdHM6ICAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE47 IGkrKykNCi0gICAgew0KLSAgICAgIGlmIChzLnBbaV0gIT0gY2JbaV0pDQot ICAgICAgICBhYm9ydCAoKTsNCi0gICAgfQ0KLQ0KLSAgLyogTm90IHZlY3Rv cml6ZWQgLSBjYW4ndCBhbnRpYWxpYXMgdGhlIHBvaW50ZXIgcy5wIGZyb20g dGhlIHBvaW50ZXIgcy5xLiAgKi8NCi0gIHMucSA9IGNiOw0KLSAgZm9yIChp ID0gMDsgaSA8IE47IGkrKykNCi0gICAgew0KLSAgICAgIHMucFtpXSA9IHMu cVtpXTsNCi0gICAgfQ0KLQ0KLSAgLyogY2hlY2sgcmVzdWx0czogICovDQot ICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KLSAgICB7DQotICAgICAgaWYg KHMucFtpXSAhPSBzLnFbaV0pDQotICAgICAgICBhYm9ydCAoKTsNCi0gICAg fQ0KLQ0KLSAgcmV0dXJuIDA7DQotfQ0KLQ0KLWludCBtYWluICh2b2lkKQ0K LXsgDQotICBjaGVja192ZWN0ICgpOw0KLSAgDQotICByZXR1cm4gbWFpbjEg KHgpOw0KLX0gDQotDQotLyogQ3VycmVudGx5IHRoZSBsb29wcyBmYWlsIHRv IHZlY3Rvcml6ZSBkdWUgdG8gYWxpYXNpbmcgcHJvYmxlbXMuDQotICAgSWYv d2hlbiB0aGUgYWxpYXNpbmcgcHJvYmxlbXMgYXJlIHJlc29sdmVkLCB1bmFs aWdubWVudCBtYXkNCi0gICBwcmV2ZW50IHZlY3Rvcml6YXRpb24gb24gc29t ZSB0YXJnZXRzLiAgKi8NCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgInZlY3Rvcml6ZWQgMiBsb29wcyIgMSAidmVjdCIgeyB4ZmFp bCAqLSotKiB9IH0gfSAqLw0KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiY2FuJ3QgZGV0ZXJtaW5lIGRlcGVuZGVuY2UgYmV0d2Vl biIgMiAidmVjdCIgfSB9ICovDQotLyogeyBkZy1maW5hbCB7IGNsZWFudXAt dHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8NCkluZGV4OiB0ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC03OS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtNzkuYwkocmV2aXNpb24g MTI3MzE2KQ0KKysrIHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LTc5LmMJ KHdvcmtpbmcgY29weSkNCkBAIC0xLDUwICswLDAgQEANCi0vKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Zsb2F0IH0gKi8NCi0NCi0j aW5jbHVkZSA8c3RkYXJnLmg+DQotI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0K LQ0KLSNkZWZpbmUgTiAxNg0KLQ0KLWZsb2F0IGZhW05dIF9fYXR0cmlidXRl X18gKChfX2FsaWduZWRfXygxNikpKTsNCi1mbG9hdCBmYltOKzRdIF9fYXR0 cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9IHswLjAsIDEuMCwgMi4w LCAzLjAsIDQuMCwgNS4wLCA3LjAsIDkuMCwgMTAuMCwgMTEuMCwgMTIuMCwg MTMuMCwgMTQuMCwgMTUuMCwgMTYuMCwgMTcuMCwgMTguMCwgMTkuMH07DQot ZmxvYXQgZmNbTl0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDE2KSkp ID0gezAuNSwgMS41LCAyLjUsIDMuNSwgNC41LCA1LjUsIDcuNSwgOS41LCAx MC41LCAxMS41LCAxMi41LCAxMy41LCAxNC41LCAxNS41fTsNCi0NCi0vKiBM aWtlIHZlY3QtODAuYyBidXQgdGhlIHBvaW50ZXJzIGFyZSBub3QgYW5ub3Rh dGVkIGFzIHJlc3RyaWN0ZWQsDQotICAgYW5kIHRoZXJlZm9yZSBjYW4ndCBi ZSBhbnRpYWxpYXNlZC4gICovDQotDQotaW50DQotbWFpbjEgKGZsb2F0ICpw YSwgZmxvYXQgKnBiLCBmbG9hdCAqcGMpDQotew0KLSAgaW50IGk7DQotICBm bG9hdCAqcSA9IHBiICsgNDsNCi0NCi0gIGZvciAoaSA9IDA7IGkgPCBOOyBp KyspDQotICAgIHsNCi0gICAgICBwYVtpXSA9IHFbaV0gKiBwY1tpXTsNCi0g ICAgfQ0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IE47IGkrKykNCi0gICAgew0K LSAgICAgIGlmIChwYVtpXSAhPSBxW2ldICogcGNbaV0pDQotCWFib3J0KCk7 DQotICAgIH0NCi0gIA0KLSAgcmV0dXJuIDA7DQotfQ0KLQ0KLQ0KLWludCBt YWluICh2b2lkKQ0KLXsgDQotICBjaGVja192ZWN0ICgpOw0KLQ0KLSAgbWFp bjEgKGZhLCBmYiwgZmMpOw0KLQ0KLSAgcmV0dXJuIDA7CQ0KLX0NCi0NCi0v KiBDdXJyZW50bHkgdGhlIGxvb3BzIGZhaWwgdG8gdmVjdG9yaXplIGR1ZSB0 byBhbGlhc2luZyBwcm9ibGVtcy4NCi0gIElmL3doZW4gdGhlIGFsaWFzaW5n IHByb2JsZW1zIGFyZSByZXNvbHZlZCwgdW5hbGlnbm1lbnQgbWF5DQotICBw cmV2ZW50IHZlY3Rvcml6YXRpb24gb24gc29tZSB0YXJnZXRzLiAgKi8NCi0v KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6 ZWQgMSBsb29wcyIgMSAidmVjdCIgIHsgeGZhaWwgKi0qLSogfSB9IH0gKi8N Ci0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImNhbid0 IGRldGVybWluZSBkZXBlbmRlbmNlIGJldHdlZW4iIDEgInZlY3QiIH0gfSAq Lw0KLS8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIg fSB9ICovDQpJbmRleDogdGVzdHN1aXRlL2djYy5kZy92ZWN0L25vLXZmYS12 ZWN0LTQ5LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNDkuYwkocmV2aXNpb24gMCkN CisrKyB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNDkuYwko cmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNjEgQEANCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Zsb2F0IH0gKi8NCisNCisjaW5j bHVkZSA8c3RkYXJnLmg+DQorI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KKw0K KyNkZWZpbmUgTiAyNTYNCisNCit2b2lkIGJhciAoZmxvYXQgKnBhLCBmbG9h dCAqcGIsIGZsb2F0ICpwYykgDQorew0KKyAgaW50IGk7DQorDQorICAvKiBj aGVjayByZXN1bHRzOiAgKi8NCisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKysp DQorICAgIHsNCisgICAgICBpZiAocGFbaV0gIT0gKHBiW2ldICogcGNbaV0p KQ0KKwlhYm9ydCAoKTsNCisgICAgfQ0KKw0KKyAgcmV0dXJuOw0KK30NCisN CisvKiBVbmFsaWduZWQgcG9pbnRlciByZWFkIGFjY2Vzc2VzLCBhbGlnbmVk IHBvaW50ZXIgd3JpdGUgYWNjZXNzLg0KKyAgIFRoZSBsb29wIGJvdW5kIGlz IGtub3duIGFuZCBkaXZpc2libGUgYnkgdGhlIHZlY3Rvcml6YXRpb24gZmFj dG9yLg0KKyAgIENhbid0IHByb3ZlIHRoYXQgdGhlIHBvaW50ZXJzIGRvbid0 IGFsaWFzLg0KKyAgIHZlY3QtNTMuYyBpcyBzaW1pbGFyIHRvIHRoaXMgb25l IHdpdGggb25lIGRpZmZlcmVuY2U6DQorICAgICAgICB0aGUgbG9vcCBib3Vu ZCBpcyB1bmtub3duLg0KKyAgIHZlY3QtNDguYyBpcyBzaW1pbGFyIHRvIHRo aXMgb25lIHdpdGggb25lIGRpZmZlcmVuY2U6DQorICAgICAgICBhbGlhc2lu ZyBpcyBub3QgYSBwcm9ibGVtLiAgKi8NCisNCitpbnQNCittYWluMSAoZmxv YXQgKnBiLCBmbG9hdCAqcGMpDQorew0KKyAgZmxvYXQgcGFbTl0gX19hdHRy aWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDE2KSkpOw0KKyAgaW50IGk7DQorDQor ICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAgICAgcGFb aV0gPSBwYltpXSAqIHBjW2ldOw0KKyAgICB9DQorDQorICBiYXIgKHBhLHBi LHBjKTsNCisNCisgIHJldHVybiAwOw0KK30NCisNCitpbnQgbWFpbiAodm9p ZCkNCit7DQorICBpbnQgaTsNCisgIGZsb2F0IGJbTisxXSBfX2F0dHJpYnV0 ZV9fICgoX19hbGlnbmVkX18oMTYpKSkgPSB7MCwzLDYsOSwxMiwxNSwxOCwy MSwyNCwyNywzMCwzMywzNiwzOSw0Miw0NSw0OCw1MSw1NCw1Nyw2MH07DQor ICBmbG9hdCBjW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikp KSA9IHswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2 LDE3LDE4LDE5fTsNCisNCisgIGNoZWNrX3ZlY3QgKCk7DQorDQorICBtYWlu MSAoYixjKTsNCisgIG1haW4xICgmYlsxXSxjKTsNCisNCisgIHJldHVybiAw Ow0KK30NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgeyB4ZmFpbCAqLSot KiB9IH0gfSAqLw0KKy8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVt cCAidmVjdCIgfSB9ICovDQpJbmRleDogdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtMTAyLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC0xMDIuYwkocmV2aXNpb24gMTI3MzE2 KQ0KKysrIHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LTEwMi5jCSh3b3Jr aW5nIGNvcHkpDQpAQCAtMSw1NyArMCwwIEBADQotLyogeyBkZy1yZXF1aXJl LWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KLQ0KLSNpbmNsdWRl IDxzdGRsaWIuaD4NCi0jaW5jbHVkZSA8c3RkYXJnLmg+DQotI2luY2x1ZGUg InRyZWUtdmVjdC5oIg0KLQ0KLSNkZWZpbmUgTiA5DQotDQotc3RydWN0IGV4 dHJhY3Rpb24NCi17DQotICBpbnQgYVtOXTsNCi0gIGludCBiW05dOw0KLX07 DQotDQotc3RhdGljIGludCBhW05dID0gezEsMiwzLDQsNSw2LDcsOCw5fTsN Ci1zdGF0aWMgaW50IGJbTl0gPSB7MiwzLDQsNSw2LDcsOCw5LDl9Ow0KLXZv bGF0aWxlIGludCBmb287DQotDQotaW50IG1haW4xIChpbnQgeCwgaW50IHkp IHsNCi0gIGludCBpOw0KLSAgc3RydWN0IGV4dHJhY3Rpb24gKnA7DQotICBw ID0gKHN0cnVjdCBleHRyYWN0aW9uICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1 Y3QgZXh0cmFjdGlvbikpOw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IE47IGkr KykNCi0gICAgew0KLSAgICAgICBwLT5hW2ldID0gYVtpXTsNCi0gICAgICAg aWYgKGZvbyA9PSAxMzUpDQotCSBhYm9ydCAoKTsgLyogdG8gYXZvaWQgdmVj dG9yaXphdGlvbiAgKi8NCi0gICAgfQ0KLQ0KLSAgLyogTm90IHZlY3Rvcml6 YWJsZTogZGlzdGFuY2UgMS4gICovDQotICBmb3IgKGkgPSAwOyBpIDwgTiAt IDE7IGkrKykNCi0gICAgew0KLSAgICAgICAqKChpbnQgKilwICsgeCArIGkp ID0gKigoaW50ICopcCArIHggKyBpICsgMSk7DQotICAgIH0NCi0NCi0gIC8q IGNoZWNrIHJlc3VsdHM6ICovDQotICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsr KQ0KLSAgICB7DQotICAgICAgIGlmIChwLT5hW2ldICE9IGJbaV0pDQotICAg ICAgICAgYWJvcnQoKTsNCi0gICAgfQ0KLSAgcmV0dXJuIDA7DQotfQ0KLQ0K LWludCBtYWluICh2b2lkKQ0KLXsgDQotICBjaGVja192ZWN0ICgpOw0KLQ0K LSAgZm9vID0gMDsNCi0gIHJldHVybiBtYWluMSAoMCwgTik7DQotfQ0KLQ0K LS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9y aXplZCAxIGxvb3BzIiAwICJ2ZWN0IiB9IH0gKi8NCi0vKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInBvc3NpYmxlIGRlcGVuZGVuY2Ug YmV0d2VlbiBkYXRhLXJlZnMiIDEgInZlY3QiIH0gfSAqLw0KLS8qIHsgZGct ZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9ICovDQotDQpJ bmRleDogdGVzdHN1aXRlL2djYy5kZy92ZWN0L25vLXZmYS12ZWN0LTUxLmMN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0ZXN0c3VpdGUvZ2NjLmRn L3ZlY3Qvbm8tdmZhLXZlY3QtNTEuYwkocmV2aXNpb24gMCkNCisrKyB0ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNTEuYwkocmV2aXNpb24g MCkNCkBAIC0wLDAgKzEsNTkgQEANCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0 aXZlLXRhcmdldCB2ZWN0X2Zsb2F0IH0gKi8NCisNCisjaW5jbHVkZSA8c3Rk YXJnLmg+DQorI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KKw0KKyNkZWZpbmUg TiAyNTYNCisNCit2b2lkIGJhciAoY29uc3QgZmxvYXQgKnBhLCBjb25zdCBm bG9hdCAqcGIsIGNvbnN0IGZsb2F0ICpwYykgDQorew0KKyAgaW50IGk7DQor DQorICAvKiBjaGVjayByZXN1bHRzOiAgKi8NCisgIGZvciAoaSA9IDA7IGkg PCBOOyBpKyspDQorICAgIHsNCisgICAgICBpZiAocGFbaV0gIT0gKHBiW2ld ICogcGNbaV0pKQ0KKwlhYm9ydCAoKTsNCisgICAgfQ0KKw0KKyAgcmV0dXJu Ow0KK30NCisNCisvKiBVbmFsaWduZWQgcG9pbnRlciBhY2Nlc3Nlcywgd2l0 aCB1bmtub3duIGFsaWdubWVudC4NCisgICBUaGUgbG9vcCBib3VuZCBpcyB1 bmtub3duLg0KKyAgIENhbid0IHByb3ZlIHRoYXQgdGhlIHBvaW50ZXJzIGRv bid0IGFsaWFzLg0KKyAgIHZlY3QtNDUuYyBpcyBzaW1pbGFyIHRvIHRoaXMg b25lIHdpdGggb25lIGRpZmZlcmVuY2U6DQorICAgICAgICB0aGUgbG9vcCBi b3VuZCBpcyBrbm93bi4NCisgICB2ZWN0LTUwLmMgaXMgc2ltaWxhciB0byB0 aGlzIG9uZSB3aXRoIG9uZSBkaWZmZXJlbmNlOg0KKyAgICAgICAgQWxpYXNp bmcgaXMgbm90IGEgcHJvYmxlbS4gICovDQorDQoraW50DQorbWFpbjEgKGlu dCBuLCBmbG9hdCAqcGEsIGZsb2F0ICpwYiwgZmxvYXQgKnBjKQ0KK3sNCisg IGludCBpOw0KKw0KKyAgZm9yIChpID0gMDsgaSA8IG47IGkrKykNCisgICAg ew0KKyAgICAgIHBhW2ldID0gcGJbaV0gKiBwY1tpXTsNCisgICAgfQ0KKw0K KyAgYmFyIChwYSxwYixwYyk7DQorDQorICByZXR1cm4gMDsNCit9DQorDQor aW50IG1haW4gKHZvaWQpDQorew0KKyAgaW50IGk7DQorICBmbG9hdCBhW05d Ow0KKyAgZmxvYXQgYltOXSA9IHswLDMsNiw5LDEyLDE1LDE4LDIxLDI0LDI3 LDMwLDMzLDM2LDM5LDQyLDQ1LDQ4LDUxLDU0LDU3fTsNCisgIGZsb2F0IGNb Tl0gPSB7MCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwx NiwxNywxOCwxOX07DQorDQorICBjaGVja192ZWN0ICgpOw0KKw0KKyAgbWFp bjEgKE4sYSxiLGMpOw0KKyAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxv b3BzIiAxICJ2ZWN0IiB7IHhmYWlsICotKi0qIH0gfSB9ICovDQorLyogeyBk Zy1maW5hbCB7IGNsZWFudXAtdHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8NCklu ZGV4OiB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXByMjkxNDUuYw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRlc3RzdWl0ZS9nY2MuZGcv dmVjdC9uby12ZmEtcHIyOTE0NS5jCShyZXZpc2lvbiAwKQ0KKysrIHRlc3Rz dWl0ZS9nY2MuZGcvdmVjdC9uby12ZmEtcHIyOTE0NS5jCShyZXZpc2lvbiAw KQ0KQEAgLTAsMCArMSw0OCBAQA0KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCisNCisjaW5jbHVkZSA8c3RkYXJn Lmg+DQorI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KKw0KK3ZvaWQgd2l0aF9y ZXN0cmljdChpbnQgKiBfX3Jlc3RyaWN0IHApDQorew0KKyAgaW50IGk7DQor ICBpbnQgKnEgPSBwIC0gMjsNCisNCisgIGZvciAoaSA9IDA7IGkgPCAxMDAw OyArK2kpIHsNCisgICAgcFtpXSA9IHFbaV07DQorICB9DQorfQ0KKw0KK3Zv aWQgd2l0aG91dF9yZXN0cmljdChpbnQgKiBwKQ0KK3sNCisgIGludCBpOw0K KyAgaW50ICpxID0gcCAtIDI7DQorDQorICBmb3IgKGkgPSAwOyBpIDwgMTAw MDsgKytpKSB7DQorICAgIHBbaV0gPSBxW2ldOw0KKyAgfQ0KK30NCisNCitp bnQgbWFpbih2b2lkKQ0KK3sNCisgIGludCBpOw0KKyAgaW50IGFbMTAwMl07 DQorICBpbnQgYlsxMDAyXTsNCisNCisgIGZvciAoaSA9IDA7IGkgPCAxMDAy OyArK2kpIHsNCisgICAgYVtpXSA9IGJbaV0gPSBpOw0KKyAgfQ0KKw0KKyAg d2l0aF9yZXN0cmljdChhICsgMik7DQorICB3aXRob3V0X3Jlc3RyaWN0KGIg KyAyKTsNCisNCisgIGZvciAoaSA9IDA7IGkgPCAxMDAyOyArK2kpIHsNCisg ICAgaWYgKGFbaV0gIT0gYltpXSkNCisgICAgICBhYm9ydCgpOw0KKyAgfQ0K KyAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAwIGxvb3BzIiAyICJ2ZWN0IiAg fSB9ICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiICB9IH0gKi8NCisvKiB7 IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0gfSAqLw0K SW5kZXg6IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWR2LTIuYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LWR2LTIuYwkocmV2aXNpb24gMTI3MzE2KQ0KKysrIHRlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWR2LTIuYwkod29ya2luZyBjb3B5KQ0KQEAg LTEsNzcgKzAsMCBAQA0KLS8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFy Z2V0IHZlY3RfaW50IH0gKi8NCi0NCi0jaW5jbHVkZSA8c3RkYXJnLmg+DQot I2luY2x1ZGUgPHNpZ25hbC5oPg0KLSNpbmNsdWRlICJ0cmVlLXZlY3QuaCIN Ci0NCi0jZGVmaW5lIE4gNjQNCi0jZGVmaW5lIE1BWCA0Mg0KLQ0KLWV4dGVy biB2b2lkIGFib3J0KHZvaWQpOyANCi0NCi1pbnQgbWFpbiAoKQ0KLXsgIA0K LSAgaW50IEFbTl07DQotICBpbnQgQltOXTsNCi0gIGludCBDW05dOw0KLSAg aW50IERbTl07DQotDQotICBpbnQgaSwgajsNCi0NCi0gIGNoZWNrX3ZlY3Qg KCk7DQotDQotICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KLSAgICB7DQot ICAgICAgQVtpXSA9IGk7DQotICAgICAgQltpXSA9IGk7DQotICAgICAgQ1tp XSA9IGk7DQotICAgICAgRFtpXSA9IGk7DQotICAgIH0NCi0NCi0gIC8qIFZl Y3Rvcml6YWJsZSAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE4tMjA7IGkrKykN Ci0gICAgew0KLSAgICAgIEFbaV0gPSBBW2krMjBdOw0KLSAgICB9DQotDQot ICAvKiBjaGVjayByZXN1bHRzOiAgKi8NCi0gIGZvciAoaSA9IDA7IGkgPCBO LTIwOyBpKyspDQotICAgIHsNCi0gICAgICBpZiAoQVtpXSAhPSBEW2krMjBd KQ0KLQlhYm9ydCAoKTsNCi0gICAgfQ0KLQ0KLSAgLyogVmVjdG9yaXphYmxl ICovDQotICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykNCi0gICAgew0KLSAg ICAgIEJbaV0gPSBCW2ldICsgNTsNCi0gICAgfQ0KLQ0KLSAgLyogY2hlY2sg cmVzdWx0czogICovDQotICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykNCi0g ICAgew0KLSAgICAgIGlmIChCW2ldICE9IENbaV0gKyA1KQ0KLQlhYm9ydCAo KTsNCi0gICAgfQ0KLQ0KLSAgLyogTm90IHZlY3Rvcml6YWJsZSAqLw0KLSAg Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykNCi0gICAgew0KLSAgICAgIENbaV0g PSBDW2krM107DQotICAgIH0NCi0NCi0gIC8qIGNoZWNrIHJlc3VsdHM6ICAq Lw0KLSAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykNCi0gICAgew0KLSAgICAg IGlmIChDW2ldICE9IERbaSszXSkNCi0JYWJvcnQgKCk7DQotICAgIH0NCi0N Ci0gIHJldHVybiAwOw0KLX0NCi0NCi0NCi0vKiBUaGUgaW5pdGlhbGl6YXRp b24gaW5kdWN0aW9uIGxvb3AgKHdpdGggYWxpZ25lZCBhY2Nlc3MpIGlzIGFs c28gdmVjdG9yaXplZC4gICovDQotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDMgbG9vcHMiIDEgInZlY3QiIH0g fSAqLw0KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi YWNjZXNzZXMgaGF2ZSB0aGUgc2FtZSBhbGlnbm1lbnQuIiAyICJ2ZWN0IiB9 IH0gKi8NCi0vKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZl Y3QiIH0gfSAqLw0KSW5kZXg6IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC9uby12 ZmEtdmVjdC00My5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdGVz dHN1aXRlL2djYy5kZy92ZWN0L25vLXZmYS12ZWN0LTQzLmMJKHJldmlzaW9u IDApDQorKysgdGVzdHN1aXRlL2djYy5kZy92ZWN0L25vLXZmYS12ZWN0LTQz LmMJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDc4IEBADQorLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9mbG9hdCB9ICovDQorDQor I2luY2x1ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCIN CisNCisjZGVmaW5lIE4gMjU2DQorDQordm9pZCBiYXIgKGZsb2F0ICpwYSwg ZmxvYXQgKnBiLCBmbG9hdCAqcGMpIA0KK3sNCisgIGludCBpOw0KKw0KKyAg LyogY2hlY2sgcmVzdWx0czogICovDQorICBmb3IgKGkgPSAwOyBpIDwgTjsg aSsrKQ0KKyAgICB7DQorICAgICAgaWYgKHBhW2ldICE9IChwYltpXSAqIHBj W2ldKSkNCisJYWJvcnQgKCk7DQorICAgIH0NCisNCisgIHJldHVybjsNCit9 DQorDQorDQoraW50DQorbWFpbjEgKGZsb2F0ICpwYSkNCit7DQorICBpbnQg aTsNCisgIGZsb2F0IHBiW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRf XygxNikpKSA9IHswLDMsNiw5LDEyLDE1LDE4LDIxLDI0LDI3LDMwLDMzLDM2 LDM5LDQyLDQ1LDQ4LDUxLDU0LDU3fTsNCisgIGZsb2F0IHBjW05dIF9fYXR0 cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9IHswLDEsMiwzLDQsNSw2 LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5fTsNCisNCisg LyogTm90IHZlY3Rvcml6YWJsZTogcGEgbWF5IGFsaWFzIHBiIGFuZC9vciBw Yywgc2luY2UgdGhlaXIgYWRkcmVzc2VzIGVzY2FwZS4gICovDQorICBmb3Ig KGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7DQorICAgICAgcGFbaV0gPSBw YltpXSAqIHBjW2ldOw0KKyAgICB9DQorDQorICBiYXIgKHBhLHBiLHBjKTsN CisNCisgIHJldHVybiAwOw0KK30NCisNCitpbnQNCittYWluMiAoZmxvYXQg KiBwYSkNCit7DQorICBpbnQgaTsNCisgIGZsb2F0IHBiW05dID0gezAsMyw2 LDksMTIsMTUsMTgsMjEsMjQsMjcsMzAsMzMsMzYsMzksNDIsNDUsNDgsNTEs NTQsNTd9Ow0KKyAgZmxvYXQgcGNbTl0gPSB7MCwxLDIsMyw0LDUsNiw3LDgs OSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOX07DQorDQorICAvKiBW ZWN0b3JpemFibGU6IHBiIGFuZCBwYyBhZGRyZXNzZXMgZG8gbm90IGVzY2Fw ZS4gICovDQorICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KKyAgICB7DQor ICAgICAgcGFbaV0gPSBwYltpXSAqIHBjW2ldOw0KKyAgICB9ICAgDQorICAN CisgIC8qIGNoZWNrIHJlc3VsdHM6ICAqLw0KKyAgZm9yIChpID0gMDsgaSA8 IE47IGkrKykNCisgICAgew0KKyAgICAgIGlmIChwYVtpXSAhPSAocGJbaV0g KiBwY1tpXSkpDQorICAgICAgICBhYm9ydCAoKTsNCisgICAgfQ0KKyAgDQor ICByZXR1cm4gMDsNCit9DQorDQoraW50IG1haW4gKHZvaWQpDQorew0KKyAg aW50IGk7DQorICBmbG9hdCBhW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWdu ZWRfXygxNikpKTsNCisNCisgIGNoZWNrX3ZlY3QgKCk7DQorDQorICBtYWlu MSAoYSk7DQorICBtYWluMiAoYSk7DQorICByZXR1cm4gMDsNCit9DQorDQor LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3Jp emVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAqLw0KKy8qICB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIkFsaWdubWVudCBvZiBhY2Nlc3Mg Zm9yY2VkIHVzaW5nIHZlcnNpb25pbmciIDEgInZlY3QiIHsgdGFyZ2V0IHZl Y3Rfbm9fYWxpZ24gfSB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsgY2xlYW51 cC10cmVlLWR1bXAgInZlY3QiIH0gfSAqLw0KSW5kZXg6IHRlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LTU3LmMNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC01Ny5jCShyZXZpc2lv biAxMjczMTYpDQorKysgdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtNTcu Ywkod29ya2luZyBjb3B5KQ0KQEAgLTEsNjIgKzAsMCBAQA0KLS8qIHsgZGct cmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZmxvYXQgfSAqLw0KLQ0K LSNpbmNsdWRlIDxzdGRhcmcuaD4NCi0jaW5jbHVkZSAidHJlZS12ZWN0Lmgi DQotDQotI2RlZmluZSBOIDI1Ng0KLQ0KLXZvaWQgYmFyIChmbG9hdCAqcGEs IGZsb2F0ICpwYiwgZmxvYXQgKnBjKQ0KLXsNCi0gIGludCBpOw0KLQ0KLSAg LyogY2hlY2sgcmVzdWx0czogICovDQotICBmb3IgKGkgPSAwOyBpIDwgTi8y OyBpKyspDQotICAgIHsNCi0gICAgICBpZiAocGFbaV0gIT0gKHBiW2krMV0g KiBwY1tpKzFdKSkNCi0gICAgICAgIGFib3J0ICgpOw0KLSAgICB9DQotDQot ICByZXR1cm47DQotfQ0KLQ0KLS8qIFVuYWxpZ25lZCBwb2ludGVyIHJlYWQg YWNjZXNzZXMgd2l0aCBrbm93biBhbGlnbm1lbnQsDQotICAgYW5kIGFuIHVu YWxpZ25lZCB3cml0ZSBhY2Nlc3Mgd2l0aCB1bmtub3duIGFsaWdubWVudC4N Ci0gICBUaGUgbG9vcCBib3VuZCBpcyBrbm93biBhbmQgZGl2aXNpYmxlIGJ5 IHRoZSB2ZWN0b3JpemF0aW9uIGZhY3Rvci4NCi0gICBDYW4ndCBwcm92ZSB0 aGF0IHRoZSBwb2ludGVycyBkb24ndCBhbGlhcy4NCi0gICB2ZWN0LTYxLmMg aXMgc2ltaWxhciB0byB0aGlzIG9uZSB3aXRoIG9uZSBkaWZmZXJlbmNlOg0K LSAgICAgICAgdGhlIGxvb3AgYm91bmQgaXMgdW5rbm93bi4NCi0gICB2ZWN0 LTU2LmMgaXMgc2ltaWxhciB0byB0aGlzIG9uZSB3aXRoIHR3byBkaWZmZXJl bmNlczoNCi0gICAgICAgIGFsaWFzaW5nIGlzIGEgcHJvYmxlbSwgYW5kIHRo ZSB3cml0ZSBhY2Nlc3MgaXMgYWxpZ25lZC4gICovDQotDQotaW50DQotbWFp bjEgKGZsb2F0ICpwYSkNCi17DQotICBpbnQgaTsNCi0gIGZsb2F0IGJbTl0g X19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDE2KSkpID0gezAsMyw2LDks MTIsMTUsMTgsMjEsMjQsMjcsMzAsMzMsMzYsMzksNDIsNDUsNDgsNTEsNTQs NTd9Ow0KLSAgZmxvYXQgY1tOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVk X18oMTYpKSkgPSB7MCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywx NCwxNSwxNiwxNywxOCwxOX07DQotICBmbG9hdCAqcGIgPSBiOw0KLSAgZmxv YXQgKnBjID0gYzsNCi0NCi0gIGZvciAoaSA9IDA7IGkgPCBOLzI7IGkrKykN Ci0gICAgew0KLSAgICAgIHBhW2ldID0gcGJbaSsxXSAqIHBjW2krMV07DQot ICAgIH0NCi0NCi0gIGJhciAocGEsIHBiLCBwYyk7DQotDQotICByZXR1cm4g MDsNCi19DQotDQotaW50IG1haW4gKHZvaWQpDQotew0KLSAgaW50IGk7DQot ICBmbG9hdCBhW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikp KTsNCi0NCi0gIGNoZWNrX3ZlY3QgKCk7DQotICBtYWluMSAoYSk7DQotDQot ICByZXR1cm4gMDsNCi19DQotDQotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIHsg eGZhaWwgKi0qLSogfSB9IH0gKi8NCi0vKiB7IGRnLWZpbmFsIHsgY2xlYW51 cC10cmVlLWR1bXAgInZlY3QiIH0gfSAqLw0KSW5kZXg6IHRlc3RzdWl0ZS9n Y2MuZGcvdmVjdC9uby12ZmEtdmVjdC1kdi0yLmMNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCi0tLSB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZl Y3QtZHYtMi5jCShyZXZpc2lvbiAwKQ0KKysrIHRlc3RzdWl0ZS9nY2MuZGcv dmVjdC9uby12ZmEtdmVjdC1kdi0yLmMJKHJldmlzaW9uIDApDQpAQCAtMCww ICsxLDc3IEBADQorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQg dmVjdF9pbnQgfSAqLw0KKw0KKyNpbmNsdWRlIDxzdGRhcmcuaD4NCisjaW5j bHVkZSA8c2lnbmFsLmg+DQorI2luY2x1ZGUgInRyZWUtdmVjdC5oIg0KKw0K KyNkZWZpbmUgTiA2NA0KKyNkZWZpbmUgTUFYIDQyDQorDQorZXh0ZXJuIHZv aWQgYWJvcnQodm9pZCk7IA0KKw0KK2ludCBtYWluICgpDQoreyAgDQorICBp bnQgQVtOXTsNCisgIGludCBCW05dOw0KKyAgaW50IENbTl07DQorICBpbnQg RFtOXTsNCisNCisgIGludCBpLCBqOw0KKw0KKyAgY2hlY2tfdmVjdCAoKTsN CisNCisgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspDQorICAgIHsNCisgICAg ICBBW2ldID0gaTsNCisgICAgICBCW2ldID0gaTsNCisgICAgICBDW2ldID0g aTsNCisgICAgICBEW2ldID0gaTsNCisgICAgfQ0KKw0KKyAgLyogVmVjdG9y aXphYmxlICovDQorICBmb3IgKGkgPSAwOyBpIDwgTi0yMDsgaSsrKQ0KKyAg ICB7DQorICAgICAgQVtpXSA9IEFbaSsyMF07DQorICAgIH0NCisNCisgIC8q IGNoZWNrIHJlc3VsdHM6ICAqLw0KKyAgZm9yIChpID0gMDsgaSA8IE4tMjA7 IGkrKykNCisgICAgew0KKyAgICAgIGlmIChBW2ldICE9IERbaSsyMF0pDQor CWFib3J0ICgpOw0KKyAgICB9DQorDQorICAvKiBWZWN0b3JpemFibGUgKi8N CisgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQ0KKyAgICB7DQorICAgICAg QltpXSA9IEJbaV0gKyA1Ow0KKyAgICB9DQorDQorICAvKiBjaGVjayByZXN1 bHRzOiAgKi8NCisgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQ0KKyAgICB7 DQorICAgICAgaWYgKEJbaV0gIT0gQ1tpXSArIDUpDQorCWFib3J0ICgpOw0K KyAgICB9DQorDQorICAvKiBOb3QgdmVjdG9yaXphYmxlICovDQorICBmb3Ig KGkgPSAwOyBpIDwgNDsgaSsrKQ0KKyAgICB7DQorICAgICAgQ1tpXSA9IENb aSszXTsNCisgICAgfQ0KKw0KKyAgLyogY2hlY2sgcmVzdWx0czogICovDQor ICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQ0KKyAgICB7DQorICAgICAgaWYg KENbaV0gIT0gRFtpKzNdKQ0KKwlhYm9ydCAoKTsNCisgICAgfQ0KKw0KKyAg cmV0dXJuIDA7DQorfQ0KKw0KKw0KKy8qIFRoZSBpbml0aWFsaXphdGlvbiBp bmR1Y3Rpb24gbG9vcCAod2l0aCBhbGlnbmVkIGFjY2VzcykgaXMgYWxzbyB2 ZWN0b3JpemVkLiAgKi8NCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgInZlY3Rvcml6ZWQgMyBsb29wcyIgMSAidmVjdCIgfSB9ICov DQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJhY2Nl c3NlcyBoYXZlIHRoZSBzYW1lIGFsaWdubWVudC4iIDIgInZlY3QiIH0gfSAq Lw0KKy8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIg fSB9ICovDQpJbmRleDogdGVzdHN1aXRlL2djYy5kZy92ZWN0L25vLXZmYS12 ZWN0LTYxLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNjEuYwkocmV2aXNpb24gMCkN CisrKyB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvbm8tdmZhLXZlY3QtNjEuYwko cmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNjQgQEANCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQorLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9mbG9hdCB9ICovDQorDQor I2luY2x1ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCIN CisNCisjZGVmaW5lIE4gMjU2DQorDQordm9pZCBiYXIgKGZsb2F0ICpwYSwg ZmxvYXQgKnBiLCBmbG9hdCAqcGMpDQorew0KKyAgaW50IGk7DQorDQorICAv KiBjaGVjayByZXN1bHRzOiAgKi8NCisgIGZvciAoaSA9IDA7IGkgPCBOLzI7 IGkrKykNCisgICAgew0KKyAgICAgIGlmIChwYVtpXSAhPSAocGJbaSsxXSAq IHBjW2krMV0pKQ0KKwlhYm9ydCAoKTsNCisgICAgfQ0KKw0KKyAgcmV0dXJu Ow0KK30NCisNCisvKiBVbmFsaWduZWQgcG9pbnRlciByZWFkIGFjY2Vzc2Vz IHdpdGgga25vd24gYWxpZ25tZW50LA0KKyAgIGFuZCBhbiB1bmFsaWduZWQg d3JpdGUgYWNjZXNzIHdpdGggdW5rbm93biBhbGlnbm1lbnQuDQorICAgVGhl IGxvb3AgYm91bmQgaXMgaXVua25vd24uDQorICAgQ2FuJ3QgcHJvdmUgdGhh dCB0aGUgcG9pbnRlcnMgZG9uJ3QgYWxpYXMuDQorICAgdmVjdC01Ny5jIGlz IHNpbWlsYXIgdG8gdGhpcyBvbmUgd2l0aCBvbmUgZGlmZmVyZW5jZToNCisg ICAgICAgIHRoZSBsb29wIGJvdW5kIGlzIGtub3duLg0KKyAgIHZlY3QtNjAu YyBpcyBzaW1pbGFyIHRvIHRoaXMgb25lIHdpdGggdHdvIGRpZmZlcmVuY2Vz Og0KKyAgICAgICAgYWxpYXNpbmcgaXMgbm90IGEgcHJvYmxlbSwgYW5kIHRo ZSB3cml0ZSBhY2Nlc3MgaXMgdW5hbGlnbmVkLiAgKi8NCisNCitpbnQNCitt YWluMSAoaW50IG4gLCBmbG9hdCAqcGEpDQorew0KKyAgaW50IGk7DQorICBm bG9hdCBiW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXygxNikpKSA9 IHswLDMsNiw5LDEyLDE1LDE4LDIxLDI0LDI3LDMwLDMzLDM2LDM5LDQyLDQ1 LDQ4LDUxLDU0LDU3fTsNCisgIGZsb2F0IGNbTl0gX19hdHRyaWJ1dGVfXyAo KF9fYWxpZ25lZF9fKDE2KSkpID0gezAsMSwyLDMsNCw1LDYsNyw4LDksMTAs MTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTl9Ow0KKyAgZmxvYXQgKnBiID0g YjsNCisgIGZsb2F0ICpwYyA9IGM7DQorDQorICBmb3IgKGkgPSAwOyBpIDwg bi8yOyBpKyspDQorICAgIHsNCisgICAgICBwYVtpXSA9IHBiW2krMV0gKiBw Y1tpKzFdOw0KKyAgICB9DQorDQorICBiYXIgKHBhLHBiLHBjKTsNCisNCisg IHJldHVybiAwOw0KK30NCisNCitpbnQgbWFpbiAodm9pZCkNCit7DQorICBp bnQgaTsNCisgIGludCBuPU47DQorICBmbG9hdCBhW05dIF9fYXR0cmlidXRl X18gKChfX2FsaWduZWRfXygxNikpKTsNCisNCisgIGNoZWNrX3ZlY3QgKCk7 DQorICBtYWluMSAobixhKTsNCisNCisgIHJldHVybiAwOw0KK30NCisNCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6 ZWQgMSBsb29wcyIgMSAidmVjdCIgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLw0K Ky8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9 ICovDQpJbmRleDogdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtNDkuYw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LTQ5LmMJKHJldmlzaW9uIDEyNzMxNikNCisrKyB0ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC00OS5jCSh3b3JraW5nIGNvcHkpDQpAQCAt MSw2MSArMCwwIEBADQotLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9mbG9hdCB9ICovDQotDQotI2luY2x1ZGUgPHN0ZGFyZy5oPg0K LSNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCi0NCi0jZGVmaW5lIE4gMjU2DQot DQotdm9pZCBiYXIgKGZsb2F0ICpwYSwgZmxvYXQgKnBiLCBmbG9hdCAqcGMp IA0KLXsNCi0gIGludCBpOw0KLQ0KLSAgLyogY2hlY2sgcmVzdWx0czogICov DQotICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQ0KLSAgICB7DQotICAgICAg aWYgKHBhW2ldICE9IChwYltpXSAqIHBjW2ldKSkNCi0JYWJvcnQgKCk7DQot ICAgIH0NCi0NCi0gIHJldHVybjsNCi19DQotDQotLyogVW5hbGlnbmVkIHBv aW50ZXIgcmVhZCBhY2Nlc3NlcywgYWxpZ25lZCBwb2ludGVyIHdyaXRlIGFj Y2Vzcy4NCi0gICBUaGUgbG9vcCBib3VuZCBpcyBrbm93biBhbmQgZGl2aXNp YmxlIGJ5IHRoZSB2ZWN0b3JpemF0aW9uIGZhY3Rvci4NCi0gICBDYW4ndCBw cm92ZSB0aGF0IHRoZSBwb2ludGVycyBkb24ndCBhbGlhcy4NCi0gICB2ZWN0 LTUzLmMgaXMgc2ltaWxhciB0byB0aGlzIG9uZSB3aXRoIG9uZSBkaWZmZXJl bmNlOg0KLSAgICAgICAgdGhlIGxvb3AgYm91bmQgaXMgdW5rbm93bi4NCi0g ICB2ZWN0LTQ4LmMgaXMgc2ltaWxhciB0byB0aGlzIG9uZSB3aXRoIG9uZSBk aWZmZXJlbmNlOg0KLSAgICAgICAgYWxpYXNpbmcgaXMgbm90IGEgcHJvYmxl bS4gICovDQotDQotaW50DQotbWFpbjEgKGZsb2F0ICpwYiwgZmxvYXQgKnBj KQ0KLXsNCi0gIGZsb2F0IHBhW05dIF9fYXR0cmlidXRlX18gKChfX2FsaWdu ZWRfXygxNikpKTsNCi0gIGludCBpOw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8 IE47IGkrKykNCi0gICAgew0KLSAgICAgIHBhW2ldID0gcGJbaV0gKiBwY1tp XTsNCi0gICAgfQ0KLQ0KLSAgYmFyIChwYSxwYixwYyk7DQotDQotICByZXR1 cm4gMDsNCi19DQotDQotaW50IG1haW4gKHZvaWQpDQotew0KLSAgaW50IGk7 DQotICBmbG9hdCBiW04rMV0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9f KDE2KSkpID0gezAsMyw2LDksMTIsMTUsMTgsMjEsMjQsMjcsMzAsMzMsMzYs MzksNDIsNDUsNDgsNTEsNTQsNTcsNjB9Ow0KLSAgZmxvYXQgY1tOXSBfX2F0 dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oMTYpKSkgPSB7MCwxLDIsMyw0LDUs Niw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOX07DQotDQot ICBjaGVja192ZWN0ICgpOw0KLQ0KLSAgbWFpbjEgKGIsYyk7DQotICBtYWlu MSAoJmJbMV0sYyk7DQotDQotICByZXR1cm4gMDsNCi19DQotDQotLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEg bG9vcHMiIDEgInZlY3QiIHsgeGZhaWwgKi0qLSogfSB9IH0gKi8NCi0vKiB7 IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0gfSAqLw0K SW5kZXg6IHRlc3RzdWl0ZS9nZm9ydHJhbi5kZy92ZWN0L3ByMTkwNDkuZjkw DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL3ZlY3QvcHIxOTA0OS5mOTAJKHJldmlzaW9uIDEyNzMxNikNCisr KyB0ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvdmVjdC9wcjE5MDQ5LmY5MAkod29y a2luZyBjb3B5KQ0KQEAgLTEsMjQgKzAsMCBAQA0KLSEgeyBkZy1kbyBjb21w aWxlIH0NCi0hIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf ZmxvYXQgfQ0KLQ0KLXN1YnJvdXRpbmUgczExMSAobnRpbWVzLGxkLG4sY3Rp bWUsZHRpbWUsYSxiLGMsZCxlLGFhLGJiLGNjKSANCi0hICAgICBsaW5lYXIg ZGVwZW5kZW5jZSB0ZXN0aW5nDQotISAgICAgbm8gZGVwZW5kZW5jZSAtIHZl Y3Rvcml6YWJsZQ0KLSEgICAgIGJ1dCBub3QgY29uc2VjdXRpdmUgYWNjZXNz DQotDQotICAgICAgaW50ZWdlciBudGltZXMsIGxkLCBuLCBpLCBubA0KLSAg ICAgIHJlYWwgYShuKSwgYihuKSwgYyhuKSwgZChuKSwgZShuKSwgYWEobGQs biksIGJiKGxkLG4pLCBjYyhsZCxuKQ0KLSAgICAgIHJlYWwgdDEsIHQyLCBz ZWNvbmQsIGNoa3N1bSwgY3RpbWUsIGR0aW1lLCBjczFkDQotICAgICAgZG8g MSBubCA9IDEsMipudGltZXMNCi0gICAgICBkbyAxMCBpID0gMixuLDINCi0g ICAgICAgICBhKGkpID0gYShpLTEpICsgYihpKQ0KLSAgMTAgIGNvbnRpbnVl DQotICAgICAgY2FsbCBkdW1teShsZCxuLGEsYixjLGQsZSxhYSxiYixjYywx LikNCi0gIDEgICBjb250aW51ZQ0KLSAgICAgIHJldHVybg0KLSAgICAgIGVu ZA0KLQ0KLSEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2 ZWN0b3JpemVkIDEgbG9vcHMiIDAgInZlY3QiIH0gfQ0KLSEgeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJjb21wbGljYXRlZCBhY2Nlc3Mg cGF0dGVybiIgMSAidmVjdCIgfSB9DQotISB7IGRnLWZpbmFsIHsgY2xlYW51 cC10cmVlLWR1bXAgInZlY3QiIH0gfQ0KLQ0KSW5kZXg6IHRlc3RzdWl0ZS9n Zm9ydHJhbi5kZy92ZWN0L25vLXZmYS1wcjE5MDQ5LmY5MA0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KLS0tIHRlc3RzdWl0ZS9nZm9ydHJhbi5kZy92ZWN0 L25vLXZmYS1wcjE5MDQ5LmY5MAkocmV2aXNpb24gMCkNCisrKyB0ZXN0c3Vp dGUvZ2ZvcnRyYW4uZGcvdmVjdC9uby12ZmEtcHIxOTA0OS5mOTAJKHJldmlz aW9uIDApDQpAQCAtMCwwICsxLDI0IEBADQorISB7IGRnLWRvIGNvbXBpbGUg fQ0KKyEgeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9mbG9h dCB9DQorDQorc3Vicm91dGluZSBzMTExIChudGltZXMsbGQsbixjdGltZSxk dGltZSxhLGIsYyxkLGUsYWEsYmIsY2MpIA0KKyEgICAgIGxpbmVhciBkZXBl bmRlbmNlIHRlc3RpbmcNCishICAgICBubyBkZXBlbmRlbmNlIC0gdmVjdG9y aXphYmxlDQorISAgICAgYnV0IG5vdCBjb25zZWN1dGl2ZSBhY2Nlc3MNCisN CisgICAgICBpbnRlZ2VyIG50aW1lcywgbGQsIG4sIGksIG5sDQorICAgICAg cmVhbCBhKG4pLCBiKG4pLCBjKG4pLCBkKG4pLCBlKG4pLCBhYShsZCxuKSwg YmIobGQsbiksIGNjKGxkLG4pDQorICAgICAgcmVhbCB0MSwgdDIsIHNlY29u ZCwgY2hrc3VtLCBjdGltZSwgZHRpbWUsIGNzMWQNCisgICAgICBkbyAxIG5s ID0gMSwyKm50aW1lcw0KKyAgICAgIGRvIDEwIGkgPSAyLG4sMg0KKyAgICAg ICAgIGEoaSkgPSBhKGktMSkgKyBiKGkpDQorICAxMCAgY29udGludWUNCisg ICAgICBjYWxsIGR1bW15KGxkLG4sYSxiLGMsZCxlLGFhLGJiLGNjLDEuKQ0K KyAgMSAgIGNvbnRpbnVlDQorICAgICAgcmV0dXJuDQorICAgICAgZW5kDQor DQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rv cml6ZWQgMSBsb29wcyIgMCAidmVjdCIgfSB9DQorISB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgImNvbXBsaWNhdGVkIGFjY2VzcyBwYXR0 ZXJuIiAxICJ2ZWN0IiB9IH0NCishIHsgZGctZmluYWwgeyBjbGVhbnVwLXRy ZWUtZHVtcCAidmVjdCIgfSB9DQorDQo= --0__=4DBBF9A4DFA39AE88f9e8a93df938690918c4DBBF9A4DFA39AE8--