Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vqSdl-00BDn8-1D for pgpool-hackers@arkaria.postgresql.org; Thu, 12 Feb 2026 09:05:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vqSdk-007bqe-27 for pgpool-hackers@arkaria.postgresql.org; Thu, 12 Feb 2026 09:05:37 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vqSdk-007bqW-0q for pgpool-hackers@lists.postgresql.org; Thu, 12 Feb 2026 09:05:37 +0000 Received: from mail-yw1-x1133.google.com ([2607:f8b0:4864:20::1133]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vqSdh-00000000Huo-2q9e for pgpool-hackers@lists.postgresql.org; Thu, 12 Feb 2026 09:05:36 +0000 Received: by mail-yw1-x1133.google.com with SMTP id 00721157ae682-7946a1f2430so58352177b3.1 for ; Thu, 12 Feb 2026 01:05:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770887132; cv=none; d=google.com; s=arc-20240605; b=dv/eyBOUZbNPSKaJWF8ba6l9MKBjt+dBjFQNhApgOqcNXkGODxeCmJoxAioezFCTZY +B51Batmuy6XcsofmFC0C0n55DGYnmXOrz7RazZrQOmibuiqYRiZ3DknaQuE3p3sZe12 Cw/xwiwaayP3BSiKZ5W/0Udo0rXSgQjp9XvdFGNJNiQOkq6/tCAR4Bg4DM8b6rIZBoVy lBigxQsi5/MbGpxBSNMlND7jC2p9bqk4HM1LINngP9Vii2viMDFQxEW/044nXITHFNnA qo7zB8U2sh9Tpka8IiOmWYW116JHRjdY3coO1aWt1I80ZnjpkSJzUjRud1Kra452HSME kmHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=BxxdSYKJzQemwNcupT52rFbhZKISuqaHtvlccDe9VWY=; fh=m3oiE62fRN5J1XaE+5vpHZRIgCyFefxVI0mFw3d8yxA=; b=QvRJKn90Uk9K4nN5wDWLvWxdTv1EzyJgHTJgF5MUTUvrOJeznfj5Nq+O48yj+7Y+IO 2p63XtojDkHkRkQBT2AYUqQ+PCuU4Sf3dOCxZQFhXtWClK5oBYvonsmqjscFHVzUvBVS SIkXdl84Xz9rrzzKrgAyNINlbqD11sP7y3hoH9u+IeExOG3NhHKdNOklrLMJ3XHfq8Db r2pkSIEjp+r/NoWBDP167g0+qrgoUOIyVlJRDSzDfm9ayC/XogfNTP0Le5r5qE0E6nlV 9UAzBAkjSOzRFLh+dEwXXy+3KLPcUC54oYKGzK8/rhTWbKcqzfekdCgSJvryPZ1Y7A4r mWDw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tailorbrands.com; s=google; t=1770887132; x=1771491932; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=BxxdSYKJzQemwNcupT52rFbhZKISuqaHtvlccDe9VWY=; b=hkysHSnPJeA981kgVphXx7Qps10Pop6AtVw2eX8VRi97qbdM5Z14mJW4Dj6PfTxstn /EommULcuSABULksWWMNueDDBIVD/RfdS6kJuT3Qq+DwliW2c+BpaSEFy34olmAJgRY/ xBluAIf9yN3dwLOa31/dc1WyckzT3fJ0yZ1f46xdTUEtqCaD1Kx8q4WL7sdnoF5wBjQU /ngxTxbBbOf6u+qrM2tWHpKe0AVGd1/F2Er0oxcI0vNq8w4rD0bnIZ4n6vmWrbgi3FoK o9PatRVrOKIOQj1mlulMlt6vpVyaO105Q7DlB9SfCMe+DgWcjxOROdj+YDnjNt6tjOFC Ybwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770887132; x=1771491932; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=BxxdSYKJzQemwNcupT52rFbhZKISuqaHtvlccDe9VWY=; b=I+SrkiT+ykmCQkzGUi+UVHTH0ZsOT3CPuaa00fYa/4+nVB/y9eKgPzU/80Gj5mtAro hvRTndvsjOVQmzMirua+9iJa/w5UWF4CzTW0Y24d7l8533FtvZtWLQuNYyG7iFaDi6a8 pYw89LKASaAkcbK/TV3iWV8Tfs6IFGYkZ5EfoHn8h4FYodhIdcMm/wq5jIex/fZeRqKq 4TppORos3rpVQNfTQuPF1oP3+nxktB7IFiqSfuwVMCz2RlTyN2nsYctJUzQ5pc8zx8ti S55JJbfu0jV7BA5UFxBqGxBI+9Rp+6py1Nsf+gURoYf6X+hC2ZK+Wua1cZVZ/+HSTyqh KzxQ== X-Gm-Message-State: AOJu0YzyhEIo6rZkzRpYMLqSGdZj2fhI8W8obCtJ8f3zWmcA7O6GZkvw Qu/bA3MZ8ad19j7PEYanqwLauGxFMZRiGo3Aqttl46wntjJxltc4REvCF0ofSPyA+EjKPNDz8mt ygIOJF9De/wMhXGMLHOuLLQ5og92yW123zMGFhpCDEA== X-Gm-Gg: AZuq6aLkphrCWaCKv11uU8N8of0Xt8mr2bT0dbvxeZpzy+RLniV3SqfjgXncUmuhBBF UJm5ZN6hmIe6+PQxAIRxU9n9EzyLPBc/zfhn95vNF9qgVSM6Wrqi8n00s7P/N/tnM9pcuGBf3/4 VKX78Gj1M9enHmYVAbx62FnvissQ2+jSrP/UrxYLJz5sQAQek9AbXF0m94HXveIAZwyGgLHpiQh uzAVkbomm3SQx+aaNlA5vr1nFZ106fiCcCV0o52/GNQz+0Ei5yh/gyMZmXkML7xV4Fcw+5LkqvG 1z1HSOlmXksQqZXKDGv3jwdhMU0QfD8YVo2yzpnF1b6DpwRNXXIcdhrz2Y6uotmrBBfPPA1MGMv GrTxIGAJcvnP0ZeXWUqVoIcWH4qk7RnNHJupv X-Received: by 2002:a05:690e:251a:20b0:64a:cdc9:164e with SMTP id 956f58d0204a3-64bbaa13900mr1355770d50.2.1770887131566; Thu, 12 Feb 2026 01:05:31 -0800 (PST) MIME-Version: 1.0 References: <20260204.082343.1732190257543250666.ishii@postgresql.org> <20260211.192845.1888610184173239311.ishii@postgresql.org> In-Reply-To: <20260211.192845.1888610184173239311.ishii@postgresql.org> From: Nadav Shatz Date: Thu, 12 Feb 2026 11:05:19 +0200 X-Gm-Features: AZwV_QgQh8olpZgMJzb_968IXCLD7JZlcWAVhapdLsdHlU7hTZitMSyWoXRaGXM Message-ID: Subject: Re: Proposal: Recent mutated table tracking in memory To: Tatsuo Ishii Cc: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000006a98c6064a9cca7b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006a98c6064a9cca7b Content-Type: multipart/alternative; boundary="0000000000006a98c0064a9cca79" --0000000000006a98c0064a9cca79 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Tatsuo, Thank you for the careful review. You raised an important concern. I've addressed it in the updated patch =E2=80=94 here's the explanation: The attack scenario you describe is now handled. In the updated patch, writes inside explicit transactions are only flushed to the shared-memory table map at COMMIT time. If the transaction is rolled back, the table is never marked as stale. So the attack pattern: BEGIN; UPDATE t1 SET i =3D 1 WHERE FALSE; ROLLBACK; has zero effect on the shared-memory table map. The dml_adaptive_global mode piggybacks on the existing dml_adaptive per-transaction write list (transaction_temp_write_list). On COMMIT, the accumulated table names are resolved to OIDs and flushed to shared memory. On ROLLBACK, the list is simply discarded (the existing dml_adaptive behavior). For autocommit statements (outside explicit transactions), tables are marked immediately =E2=80=94 but in that case the write is committed, so th= is is correct. Regression test included. Test 042 now includes: - Test 10: verifies that BEGIN; INSERT; ROLLBACK; SELECT does NOT route the SELECT to primary - Test 11: verifies that BEGIN; INSERT; COMMIT; SELECT DOES route the SELECT to primary Additional context on the threat model: 1. This feature requires disable_load_balance_on_write =3D 'dml_adaptive_global' =E2=80=94 it is opt-in, not enabled by default. Opera= tors who enable it accept documented trade-offs (additional shared memory, TTL-based staleness window). 2. An attacker who can connect and execute SQL against pgpool already has the ability to cause far more damage (DROP TABLE, mass DELETEs, resource exhaustion via expensive queries, connection flooding, etc.). The table-marking via committed writes is a minor concern compared to those vectors. Authentication, connection limits, and network security are the appropriate defenses at that layer. 3. Even in the worst case (an attacker commits real writes in a loop), the impact is bounded: the stale marking is temporary (TTL-based, typically a few seconds), and only affects load-balancing decisions =E2=80=94 it does= n't cause data loss or correctness issues. 4. The existing dml_adaptive mode has analogous behavior: within a transaction, a write to table T causes all reads of T to go to primary for the remainder of that transaction. The only difference is scope =E2=80=94 dml_adaptive_global extends this across sessions with a TTL. Thanks! On Wed, Feb 11, 2026 at 12:28=E2=80=AFPM Tatsuo Ishii wrote: > > Hi Tatsuo, > > > > After reading more about disable_load_balance_on_write=3Ddml_adaptive i > came > > to the thought that this feature is actually an "extension" of that sin= ce > > it covers "global" and not just per transaction behavior. in any case i > > think it makes more sense that it sits under > > the disable_load_balance_on_write and not as a standalone for clarity. > > > > I'm attaching below an updated patch with these adjustments. > > > > Please let me know what you think. > > I worry about the transactional behavior with the patch: > > + This means that if a transaction is rolled back, the table remains > marked as stale until > + the TTL expires, even though no actual data modification occurred. > This is by design: > > This allows attackers to issue simple command continuously to > effectively disable load balance (and increase the load of primary) in > whole system: > > BEGIN; > UPDATE t1 SET i =3D 1 WHERE FALSE; > ROLLBACK; > > I think if the patch allows that, we cannot accept the patch. > > Best regards, > -- > Tatsuo Ishii > SRA OSS K.K. > English: http://www.sraoss.co.jp/index_en/ > Japanese:http://www.sraoss.co.jp > > > On Fri, Feb 6, 2026 at 1:29=E2=80=AFPM Nadav Shatz > wrote: > > > >> Hi Tatsuo, > >> > >> Thank you for all the great comments and questions! I took under > >> consideration all of them either adding support/tests or detailing the > >> limitations in the docs. > >> > >> Let me know what you think of the latest patch attached here > >> > >> On Wed, Feb 4, 2026 at 1:23=E2=80=AFAM Tatsuo Ishii > wrote: > >> > >>> From: Tatsuo Ishii > >>> Subject: Re: Proposal: Recent mutated table tracking in memory > >>> Date: Tue, 03 Feb 2026 16:43:53 +0900 (JST) > >>> Message-ID: <20260203.164353.362943818466117773.ishii@postgresql.org> > >>> > >>> > Hi Nadav, > >>> > > >>> > Thank you for updating the patch! > >>> > > >>> >> Thank you for the comments! > >>> >> > >>> >> I agree with all of them. Let me know what you think of the change= s > >>> and new > >>> >> naming. > >>> > > >>> > I still think "memory_map" is too generic. Anything put on memory f= or > >>> > data mapping could be called "memory map". I recommend to change th= e > >>> > name to more feature specific one: What about replacing "memory_map= " > >>> > with "track_table_mutation"? It's a little bit longer name but it > >>> > clearly represents the feature. Any better ideas are welcome. > >>> > > >>> > - memory_map_enabled: Enable/disable the feature (default: off) > >>> > - memory_map_ttl_factor: TTL multiplier for replication delay > (default: > >>> 5.0) > >>> > - memory_map_cold_start_duration: Cold start period in ms (default: > >>> 2000) > >>> > - memory_map_table_buckets: Hash buckets for table map (default: > 1024) > >>> > - memory_map_table_size: Max tracked tables (default: 2048) > >>> > - memory_map_query_buckets: Hash buckets for query cache (default: > 2048) > >>> > - memory_map_query_cache_size: Max cached queries (default: 10000) > >>> > > >>> > Also I feel memory_map_query_cache_size is confusing because there'= s > >>> > already "query cache" feature in pgpool. Can we change it somethin= g > >>> > like "query_parse_cache_size"? > >>> > > >>> > Review comments: > >>> > > >>> > (1) Why the regression test is 45? Shouldn't it be 42? (the last > >>> > feature test is 041.external_replication_delay). > >>> > > >>> > (2) You enhance the patch to deal with leader watch changing. That'= s > >>> > good. However, I don't see a test case for it in test.sh. > >>> > > >>> > (3) It seems the patch does not support TRUNCATE, MERGE, PREPARE an= d > >>> > WITH + updating. If so, it should be noted in the docs as a > limitation > >>> > of the feature. > >>> > >>> (4) It seems the patch does not consider transactions. If an UPDATE i= s > >>> performed in a transaction and the transaction gets rollbacked, load > >>> balance is disabled despite that fact that the table modification did > >>> not happen. > >>> > >>> Best regards, > >>> -- > >>> Tatsuo Ishii > >>> SRA OSS K.K. > >>> English: http://www.sraoss.co.jp/index_en/ > >>> Japanese:http://www.sraoss.co.jp > >>> > >> > >> > >> -- > >> Nadav Shatz > >> Tailor Brands | CTO > >> > > > > > > -- > > Nadav Shatz > > Tailor Brands | CTO > --=20 Nadav Shatz Tailor Brands | CTO --0000000000006a98c0064a9cca79 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
=C2=A0Hi Tatsuo,

=C2=A0 Thank you for the careful r= eview. You raised an important concern. I've addressed it in the update= d patch =E2=80=94 here's the explanation:

=C2=A0 The attack scen= ario you describe is now handled. In the updated patch, writes inside expli= cit transactions are only flushed to the shared-memory table map at COMMIT = time. If the transaction is rolled back, the table is never marked as stale= . So the attack pattern:

=C2=A0 BEGIN;
=C2=A0 UPDATE t1 SET i =3D= 1 WHERE FALSE;
=C2=A0 ROLLBACK;

=C2=A0 has zero effect on the sh= ared-memory table map. The dml_adaptive_global mode piggybacks on the exist= ing dml_adaptive per-transaction write list (transaction_temp_write_list). = On COMMIT, the accumulated table names are resolved to OIDs and flushed to = shared memory. On ROLLBACK,
=C2=A0 the list is simply discarded (the exi= sting dml_adaptive behavior).

=C2=A0 For autocommit statements (outs= ide explicit transactions), tables are marked immediately =E2=80=94 but in = that case the write is committed, so this is correct.

=C2=A0 Regress= ion test included. Test 042 now includes:
=C2=A0 - Test 10: verifies tha= t BEGIN; INSERT; ROLLBACK; SELECT does NOT route the SELECT to primary
= =C2=A0 - Test 11: verifies that BEGIN; INSERT; COMMIT; SELECT DOES route th= e SELECT to primary

=C2=A0 Additional context on the threat model:
=C2=A0 1. This feature requires disable_load_balance_on_write =3D = 9;dml_adaptive_global' =E2=80=94 it is opt-in, not enabled by default. = Operators who enable it accept documented trade-offs (additional shared mem= ory, TTL-based staleness window).
=C2=A0 2. An attacker who can connect = and execute SQL against pgpool already has the ability to cause far more da= mage (DROP TABLE, mass DELETEs, resource exhaustion via expensive queries, = connection flooding, etc.). The table-marking via committed writes is a min= or concern compared to
=C2=A0 those vectors. Authentication, connection = limits, and network security are the appropriate defenses at that layer.=C2=A0 3. Even in the worst case (an attacker commits real writes in a loo= p), the impact is bounded: the stale marking is temporary (TTL-based, typic= ally a few seconds), and only affects load-balancing decisions =E2=80=94 it= doesn't cause data loss or correctness issues.
=C2=A0 4. The existi= ng dml_adaptive mode has analogous behavior: within a transaction, a write = to table T causes all reads of T to go to primary for the remainder of that= transaction. The only difference is scope =E2=80=94 dml_adaptive_global ex= tends this across sessions with a TTL.

Thanks!

On Wed, Feb 11, 2026 at 12:28=E2=80=AFPM Tatsuo Ishii <= ;ishii@postgresql.org> wrote= :
> Hi Tatsuo= ,
>
> After reading more about disable_load_balance_on_write=3Ddml_adaptive = i came
> to the thought that this feature is actually an "extension" = of that since
> it covers "global" and not just per transaction behavior. in= any case i
> think it makes more sense that it sits under
> the disable_load_balance_on_write and not as a standalone for clarity.=
>
> I'm attaching below an updated patch with these adjustments.
>
> Please let me know what you think.

I worry about the transactional behavior with the patch:

+=C2=A0 =C2=A0 This means that if a transaction is rolled back, the table r= emains marked as stale until
+=C2=A0 =C2=A0 the TTL expires, even though no actual data modification occ= urred. This is by design:

This allows attackers to issue simple command continuously to
effectively disable load balance (and increase the load of primary) in
whole system:

BEGIN;
UPDATE t1 SET i =3D 1 WHERE FALSE;
ROLLBACK;

I think if the patch allows that, we cannot accept the patch.

Best regards,
--
Tatsuo Ishii
SRA OSS K.K.
English: http://www.sraoss.co.jp/index_en/
Japanese:http://www.sraoss.co.jp

> On Fri, Feb 6, 2026 at 1:29=E2=80=AFPM Nadav Shatz <nadav@tailorbrands.com>= wrote:
>
>> Hi Tatsuo,
>>
>> Thank you for all the great comments and questions! I took under >> consideration all of them either adding support/tests or detailing= the
>> limitations in the docs.
>>
>> Let me know what you think of the latest patch attached here
>>
>> On Wed, Feb 4, 2026 at 1:23=E2=80=AFAM Tatsuo Ishii <ishii@postgresql.org>= ; wrote:
>>
>>> From: Tatsuo Ishii <ishii@postgresql.org>
>>> Subject: Re: Proposal: Recent mutated table tracking in memory=
>>> Date: Tue, 03 Feb 2026 16:43:53 +0900 (JST)
>>> Message-ID: <20260203.164353.362943818466= 117773.ishii@postgresql.org>
>>>
>>> > Hi Nadav,
>>> >
>>> > Thank you for updating the patch!
>>> >
>>> >> Thank you for the comments!
>>> >>
>>> >> I agree with all of them. Let me know what you think = of the changes
>>> and new
>>> >> naming.
>>> >
>>> > I still think "memory_map" is too generic. Anyt= hing put on memory for
>>> > data mapping could be called "memory map". I re= commend to change the
>>> > name to more feature specific one: What about replacing &= quot;memory_map"
>>> > with "track_table_mutation"? It's a little = bit longer name but it
>>> > clearly represents the feature. Any better ideas are welc= ome.
>>> >
>>> > - memory_map_enabled: Enable/disable the feature (default= : off)
>>> > - memory_map_ttl_factor: TTL multiplier for replication d= elay (default:
>>> 5.0)
>>> > - memory_map_cold_start_duration: Cold start period in ms= (default:
>>> 2000)
>>> > - memory_map_table_buckets: Hash buckets for table map (d= efault: 1024)
>>> > - memory_map_table_size: Max tracked tables (default: 204= 8)
>>> > - memory_map_query_buckets: Hash buckets for query cache = (default: 2048)
>>> > - memory_map_query_cache_size: Max cached queries (defaul= t: 10000)
>>> >
>>> > Also I feel memory_map_query_cache_size is confusing beca= use there's
>>> > already "query cache" feature in pgpool.=C2=A0 = Can we change it something
>>> > like "query_parse_cache_size"?
>>> >
>>> > Review comments:
>>> >
>>> > (1) Why the regression test is 45? Shouldn't it be 42= ? (the last
>>> > feature test is 041.external_replication_delay).
>>> >
>>> > (2) You enhance the patch to deal with leader watch chang= ing. That's
>>> > good. However, I don't see a test case for it in test= .sh.
>>> >
>>> > (3) It seems the patch does not support TRUNCATE, MERGE, = PREPARE and
>>> > WITH + updating. If so, it should be noted in the docs as= a limitation
>>> > of the feature.
>>>
>>> (4) It seems the patch does not consider transactions. If an U= PDATE is
>>> performed in a transaction and the transaction gets rollbacked= , load
>>> balance is disabled despite that fact that the table modificat= ion did
>>> not happen.
>>>
>>> Best regards,
>>> --
>>> Tatsuo Ishii
>>> SRA OSS K.K.
>>> English: http://www.sraoss.co.jp/index_en/
>>> Japanese:http://www.sraoss.co.jp
>>>
>>
>>
>> --
>> Nadav Shatz
>> Tailor Brands | CTO
>>
>
>
> --
> Nadav Shatz
> Tailor Brands | CTO


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--0000000000006a98c0064a9cca79-- --0000000000006a98c6064a9cca7b Content-Type: application/octet-stream; name="table_track.patch" Content-Disposition: attachment; filename="table_track.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlj8fy9u0 RnJvbSBhZDZhY2FkZjQ2NjE4NzVjNTZhZThlNWU5MDFmMTZmYWZiNWU3OGEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogVHVlLCA2IEphbiAyMDI2IDEyOjQxOjUwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gRmVh dHVyZTogYWRkIGluLW1lbW9yeSB0YWJsZSB0cmFja2luZyB0byBwcmV2ZW50IHN0YWxlIHJlYWRz CiBmcm9tIHJlcGxpY2FzCgpJbnRyb2R1Y2VzICdkbWxfYWRhcHRpdmVfZ2xvYmFsJyBhcyBhIG5l dyB2YWx1ZSBmb3IgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUuClRoaXMgbW9kZSBpcyBh IHN1cGVyc2V0IG9mIGRtbF9hZGFwdGl2ZTogaXQgcGVyZm9ybXMgcGVyLXRyYW5zYWN0aW9uIGxv Y2FsIHRyYWNraW5nCkFORCBjcm9zcy1zZXNzaW9uIHNoYXJlZC1tZW1vcnkgdHJhY2tpbmcgb2Yg cmVjZW50bHkgd3JpdHRlbiB0YWJsZXMsIHJvdXRpbmcgcmVhZHMKdG8gcHJpbWFyeSB1bnRpbCBh IFRUTCAoYmFzZWQgb24gbWVhc3VyZWQgcmVwbGljYXRpb24gZGVsYXkpIGV4cGlyZXMuCgpTdWIt cGFyYW1ldGVycyAodHJhY2tfdGFibGVfbXV0YXRpb25fKikgY29udHJvbCBUVEwgZmFjdG9yLCBj b2xkIHN0YXJ0IGR1cmF0aW9uLApoYXNoIHRhYmxlIHNpemluZywgYW5kIHF1ZXJ5IHBhcnNlIGNh Y2hlIHNpemluZy4KCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dtbCBi L2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCmluZGV4IGVlMTlmYWJlYmFiMjIxMGNkNGFi ZTU5YTcxMWEwMzZhYzBhYzg5NDMuLjc0MTYyZWYyZjgxZjM4ODc5YzU1MjQzOGVlOTMyMWRmZGUz NGE0YmUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCkBAIC0xMTA4LDYgKzExMDgsMTggQEAgYXBwX25h bWVfcmVkaXJlY3RfcHJlZmVyZW5jZV9saXN0ICZndDsgZGF0YWJhc2VfcmVkaXJlY3RfcHJlZmVy ZW5jZV9saXN0ICZndDsgdXMKIAkJRGVwZW5kZW50IGZ1bmN0aW9ucywgdHJpZ2dlcnMsIGFuZCB2 aWV3cyBvbiB0aGUgdGFibGVzIGNhbiBiZSBjb25maWd1cmVkCiAJCXVzaW5nIDx4cmVmIGxpbmtl bmQ9Imd1Yy1kbWwtYWRhcHRpdmUtb2JqZWN0LXJlbGF0aW9uc2hpcC1saXN0Ij4KICAgICAgPC9w YXJhPgorCisgICAgIDxwYXJhPgorCQlJZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gPHZhcm5h bWU+ZG1sX2FkYXB0aXZlX2dsb2JhbDwvdmFybmFtZT4sCisJCTxwcm9kdWN0bmFtZT5QZ3Bvb2wt SUk8Lz4gYmVoYXZlcyBsaWtlIDx2YXJuYW1lPmRtbF9hZGFwdGl2ZTwvdmFybmFtZT4KKwkJKHBl ci10cmFuc2FjdGlvbiB3cml0ZSB0cmFja2luZykgYW5kIGFkZGl0aW9uYWxseSB1c2VzIHNoYXJl ZCBtZW1vcnkgdG8gdHJhY2sKKwkJcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMgYWNyb3NzIGFsbCBz ZXNzaW9ucyBjbHVzdGVyLXdpZGUuIFdoZW4gYSB0YWJsZSBpcworCQl3cml0dGVuIGluIGFueSBz ZXNzaW9uLCBzdWJzZXF1ZW50IHJlYWRzIG9mIHRoYXQgdGFibGUgZnJvbSBhbnkgc2Vzc2lvbiBh cmUKKwkJcm91dGVkIHRvIHByaW1hcnkgdW50aWwgYSBUVEwgKGJhc2VkIG9uIG1lYXN1cmVkIHJl cGxpY2F0aW9uIGRlbGF5KSBleHBpcmVzLgorCQlUaGlzIHByZXZlbnRzIHN0YWxlIHJlYWRzIGFm dGVyIHdyaXRlcyBldmVuIGFjcm9zcyBkaWZmZXJlbnQgY29ubmVjdGlvbnMuCisJCVNlZSA8eHJl ZiBsaW5rZW5kPSJydW50aW1lLWNvbmZpZy10cmFjay10YWJsZS1tdXRhdGlvbiI+IGZvciB0aGUg c3ViLXBhcmFtZXRlcnMKKwkJdGhhdCBjb250cm9sIHRoZSBzaGFyZWQtbWVtb3J5IHRyYWNraW5n IGJlaGF2aW9yLgorICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVu dHJ5PgogCkBAIC0xMTkzLDQgKzEyMDUsMjU1IEBAIGRtbF9hZGFwdGl2ZV9vYmplY3RfcmVsYXRp b25zaGlwX2xpc3QgPSAndGFibGVfMTp0YWJsZV8yJwogCiAgIDwvdmFyaWFibGVsaXN0PgogIDwv c2VjdDI+CisKKyA8c2VjdDIgaWQ9InJ1bnRpbWUtY29uZmlnLXRhYmxlLW11dGF0aW9uLW1hcCI+ CisgIDx0aXRsZT5UYWJsZSBNdXRhdGlvbiBNYXAgQ29uZmlndXJhdGlvbiAoTGFnbGVzcyBSZXBs aWNhIFJlYWRzKTwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUaGVzZSBwYXJhbWV0ZXJzIGNvbmZp Z3VyZSB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZSwgd2hpY2ggaXMgYWN0aXZhdGVk IGJ5IHNldHRpbmcKKyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1kaXNhYmxlLWxvYWQtYmFsYW5jZS1v bi13cml0ZSI+IHRvIDxsaXRlcmFsPmRtbF9hZGFwdGl2ZV9nbG9iYWw8L2xpdGVyYWw+LgorICAg VGhlIGZlYXR1cmUgdHJhY2tzIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzIHRvIHByZXZlbnQgc3Rh bGUgcmVhZHMgZnJvbSByZXBsaWNhIG5vZGVzIGR1cmluZworICAgcmVwbGljYXRpb24gbGFnLCBp bXBsZW1lbnRpbmcgdGhlICJsYWdsZXNzIiBhcmNoaXRlY3R1cmUgcGF0dGVybiBmb3IgZGlzdHJp YnV0ZWQgc3lzdGVtcworICAgd2l0aCByZWFkIHJlcGxpY2FzLgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBXaGVuIGEgdGFibGUgaXMgbW9kaWZpZWQgKElOU0VSVC9VUERBVEUvREVMRVRFKSwg aXQgaXMgbWFya2VkIGFzICJzdGFsZSIgZm9yIGEgVFRMIHBlcmlvZAorICAgKDxsaXRlcmFsPnJl cGxpY2F0aW9uX2RlbGF5ICogdHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjwvbGl0ZXJh bD4pLiBBbnkgU0VMRUNUIHF1ZXJpZXMgb24gc3RhbGUgdGFibGVzIGFyZSByb3V0ZWQKKyAgIHRv IHRoZSBwcmltYXJ5IG5vZGUgaW5zdGVhZCBvZiByZXBsaWNhcywgZW5zdXJpbmcgcmVhZC1hZnRl ci13cml0ZSBjb25zaXN0ZW5jeS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhpcyBmZWF0 dXJlIHJlcXVpcmVzIDx4cmVmIGxpbmtlbmQ9Imd1Yy1yZXBsaWNhdGlvbi1kZWxheS1zb3VyY2Ut Y21kIj4gdG8gYmUgY29uZmlndXJlZAorICAgZm9yIG1vbml0b3JpbmcgcmVwbGljYXRpb24gZGVs YXkgZnJvbSByZXBsaWNhcy4KKyAgPC9wYXJhPgorCisgIDx3YXJuaW5nPgorICAgPHBhcmE+Cisg ICAgRW5hYmxpbmcgPGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2dsb2JhbDwvbGl0ZXJhbD4gaW5jcmVh c2VzIHNoYXJlZCBtZW1vcnkgY29uc3VtcHRpb24uIFdpdGggZGVmYXVsdCBzZXR0aW5ncywKKyAg ICB0aGUgZmVhdHVyZSByZXF1aXJlcyBhcHByb3hpbWF0ZWx5IDYuNCBNQiBvZiBzaGFyZWQgbWVt b3J5ICgwLjEgTUIgZm9yIHRhYmxlIHRyYWNraW5nICsgNi4zIE1CIGZvciBxdWVyeSBjYWNoZSku CisgICAgTWVtb3J5IHVzYWdlIHNjYWxlcyB3aXRoIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczoK KyAgIDwvcGFyYT4KKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFy YT4KKyAgICAgIFRhYmxlIHRyYWNraW5nOiA8bGl0ZXJhbD50cmFja190YWJsZV9tdXRhdGlvbl90 YWJsZV9zaXplICogNDAgYnl0ZXM8L2xpdGVyYWw+IChkZWZhdWx0OiAyMDQ4ICogNDAgPSB+ODAg S0IpCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICBRdWVyeSBjYWNoZTogPGxpdGVyYWw+dHJhY2tfdGFibGVfbXV0YXRpb25f cXVlcnlfcGFyc2VfY2FjaGVfc2l6ZSAqIDY0MCBieXRlczwvbGl0ZXJhbD4gKGRlZmF1bHQ6IDEw MDAwICogNjQwID0gfjYuMyBNQikKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L2l0ZW1pemVkbGlzdD4KKyAgIDxwYXJhPgorICAgIEZvciBoaWdoLXRyYWZmaWMgc3lzdGVtcyB3 aXRoIGxhcmdlIGNhY2hlIHNpemVzIChlLmcuLCA8bGl0ZXJhbD50cmFja190YWJsZV9tdXRhdGlv bl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplID0gMTAwMDAwPC9saXRlcmFsPiksCisgICAgbWVtb3J5 IHVzYWdlIGNhbiByZWFjaCA2NCBNQiBvciBtb3JlLiBDb25zaWRlciB5b3VyIHN5c3RlbSdzIGF2 YWlsYWJsZSBzaGFyZWQgbWVtb3J5IHdoZW4gdXNpbmcgPGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2ds b2JhbDwvbGl0ZXJhbD4uCisgICA8L3BhcmE+CisgIDwvd2FybmluZz4KKworICA8dmFyaWFibGVs aXN0PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tdHRs LWZhY3RvciIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yIj4KKyAg ICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yPC92YXJuYW1l PiAoPHR5cGU+ZmxvYXRpbmcgcG9pbnQ8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAg PHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjwvdmFybmFt ZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgor ICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTXVsdGlwbGll ciBmb3IgY2FsY3VsYXRpbmcgdGhlIFRUTDogPGxpdGVyYWw+VFRMID0gcmVwbGljYXRpb25fZGVs YXkgKiB0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yPC9saXRlcmFsPi4KKyAgICAgIEhp Z2hlciB2YWx1ZXMgcHJvdmlkZSBtb3JlIHNhZmV0eSBtYXJnaW4gYnV0IG1heSByZWR1Y2UgcmVh ZCByZXBsaWNhIHV0aWxpemF0aW9uLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAg VmFsaWQgcmFuZ2U6IDEuMC0xMDAuMC4gRGVmYXVsdCBpcyA8bGl0ZXJhbD41LjA8L2xpdGVyYWw+ LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgcmVsb2FkaW5nIHRoZSA8 cHJvZHVjdG5hbWU+UGdwb29sLUlJPC8+IGNvbmZpZ3VyYXRpb25zLgorICAgICA8L3BhcmE+Cisg ICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlk PSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tY29sZC1zdGFydC1kdXJhdGlvbiIgeHJlZmxhYmVs PSJ0cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uIj4KKyAgICA8dGVybT48 dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uPC92YXJuYW1l PiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFy eT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uPC92YXJu YW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+ CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBEdXJhdGlv biBpbiBtaWxsaXNlY29uZHMgdG8gcm91dGUgYWxsIHF1ZXJpZXMgdG8gcHJpbWFyeSBhZnRlciBh IGNoaWxkIHByb2Nlc3Mgc3RhcnRzLgorICAgICAgVGhpcyBwcmV2ZW50cyBzdGFsZSByZWFkcyB3 aGVuIGEgbmV3IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYmVmb3JlIHRoZSB0cmFjayB0YWJs ZSBtdXRhdGlvbgorICAgICAgaXMgcG9wdWxhdGVkIHdpdGggcmVjZW50IHdyaXRlIGhpc3Rvcnku CisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBXaGVuIHdhdGNoZG9nIGlzIGVuYWJs ZWQgYW5kIHRoZSBsb2NhbCBub2RlIGJlY29tZXMgdGhlIGxlYWRlciwgUGdwb29sLUlJIGFsc28g dHJpZ2dlcnMgYQorICAgICAgZ2xvYmFsIGNvbGQgc3RhcnQgZm9yIHRoaXMgZHVyYXRpb24gdG8g YXZvaWQgc3RhbGUgcmVhZHMgYWZ0ZXIgbGVhZGVyc2hpcCBjaGFuZ2VzLgorICAgICA8L3BhcmE+ CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDAtNjAwMDAgbXMuIERlZmF1bHQgaXMg PGxpdGVyYWw+MjAwMDwvbGl0ZXJhbD4gKDIgc2Vjb25kcykuCisgICAgICBTZXQgdG8gMCB0byBk aXNhYmxlIGNvbGQgc3RhcnQgYmVoYXZpb3IuCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUg Y2hhbmdlZCBieSByZWxvYWRpbmcgdGhlIDxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gY29uZmln dXJhdGlvbnMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi10YWJs ZS1idWNrZXRzIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMi PgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM8 L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAg IDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM8L3Zh cm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVy bT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE51bWJl ciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBoYXNoIHRhYmxl LgorICAgICAgSGlnaGVyIHZhbHVlcyByZWR1Y2UgaGFzaCBjb2xsaXNpb25zIGFuZCBpbXByb3Zl IGxvb2t1cCBwZXJmb3JtYW5jZS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZh bGlkIHJhbmdlOiA2NC02NTUzNi4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4xMDI0PC9saXRlcmFsPi4K KyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi10YWJsZS1zaXplIiB4cmVm bGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUiPgorICAgIDx0ZXJtPjx2YXJu YW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemU8L3Zhcm5hbWU+ICg8dHlwZT5pbnRl Z2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRy YWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemU8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFy YW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE1heGltdW0gbnVtYmVyIG9mIHRhYmxlcyB0aGF0 IGNhbiBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5IGluIHRoZSB0cmFjayB0YWJsZSBtdXRhdGlv bi4KKyAgICAgIFdoZW4gZnVsbCwgb2xkZXN0IGVudHJpZXMgYXJlIGV2aWN0ZWQgdXNpbmcgYSBz aW1wbGUgZXZpY3Rpb24gc3RyYXRlZ3kuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAg ICBWYWxpZCByYW5nZTogMTI4LTEzMTA3Mi4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4yMDQ4PC9saXRl cmFsPi4KKyAgICAgIE1lbW9yeSB1c2FnZTogYXBwcm94aW1hdGVseSA0MCBieXRlcyBwZXIgZW50 cnkuCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgYXQgc2VydmVyIHN0YXJ0 LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisg ICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tcXVlcnktYnVja2V0 cyIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzIj4KKyAgICA8 dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzPC92YXJuYW1l PiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFy eT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzPC92YXJuYW1lPiBj b25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAg PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBOdW1iZXIgb2YgaGFz aCBidWNrZXRzIGZvciB0aGUgcXVlcnkgcGFyc2UgY2FjaGUuIFRoZSBjYWNoZSBzdG9yZXMgbm9y bWFsaXplZAorICAgICAgcXVlcnkgc3RyaW5ncyBtYXBwZWQgdG8gdGhlaXIgdGFibGUgZGVwZW5k ZW5jaWVzIHRvIGF2b2lkIHJlcGVhdGVkIHBhcnNpbmcuCisgICAgIDwvcGFyYT4KKyAgICAgPHBh cmE+CisgICAgICBWYWxpZCByYW5nZTogNjQtNjU1MzYuIERlZmF1bHQgaXMgPGxpdGVyYWw+MjA0 ODwvbGl0ZXJhbD4uCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgYXQgc2Vy dmVyIHN0YXJ0LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tcXVl cnktcGFyc2UtY2FjaGUtc2l6ZSIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl9xdWVy eV9wYXJzZV9jYWNoZV9zaXplIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRh dGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlw ZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFja190YWJs ZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplPC92YXJuYW1lPiBjb25maWd1cmF0aW9u IHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYXhpbXVtIG51bWJlciBvZiBxdWVyeSBw YXJzZSByZXN1bHRzIHRvIGNhY2hlLiBVc2VzIExSVSBldmljdGlvbiB3aGVuIGZ1bGwuCisgICAg ICBMYXJnZXIgY2FjaGVzIHJlZHVjZSBwYXJzaW5nIG92ZXJoZWFkIGJ1dCBjb25zdW1lIG1vcmUg c2hhcmVkIG1lbW9yeS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJh bmdlOiAxMDAtMTAwMDAwMC4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4xMDAwMDwvbGl0ZXJhbD4uCisg ICAgICBNZW1vcnkgdXNhZ2U6IGFwcHJveGltYXRlbHkgNjQwIGJ5dGVzIHBlciBlbnRyeSAofjYu MyBNQiBmb3IgZGVmYXVsdCwgfjY0IE1CIGZvciAxMDAwMDAgZW50cmllcykuCisgICAgICBUaGlz IHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgYXQgc2VydmVyIHN0YXJ0LgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0 PgorCisgIDxzZWN0MyBpZD0icnVudGltZS1jb25maWctdHJhY2stdGFibGUtbXV0YXRpb24tZXhh bXBsZSI+CisgICA8dGl0bGU+VHJhY2sgVGFibGUgTXV0YXRpb24gQ29uZmlndXJhdGlvbiBFeGFt cGxlPC90aXRsZT4KKyAgIDxwYXJhPgorICAgIFRvIGVuYWJsZSB0cmFjayB0YWJsZSBtdXRhdGlv biB3aXRoIHJlcGxpY2F0aW9uIGRlbGF5IG1vbml0b3Jpbmc6CisgICA8L3BhcmE+CisgICA8cHJv Z3JhbWxpc3Rpbmc+CisjIEVuYWJsZSBkbWxfYWRhcHRpdmVfZ2xvYmFsIG1vZGUgKGluY2x1ZGVz IHRyYWNrIHRhYmxlIG11dGF0aW9uKQorZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPSAn ZG1sX2FkYXB0aXZlX2dsb2JhbCcKK3RyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3IgPSA1 LjAKK3RyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24gPSAyMDAwCisKKyMg Q29uZmlndXJlIGV4dGVybmFsIHJlcGxpY2F0aW9uIGRlbGF5IG1vbml0b3JpbmcKK3JlcGxpY2F0 aW9uX2RlbGF5X3NvdXJjZV9jbWQgPSAnL3BhdGgvdG8vZ2V0LXJlcGxpY2F0aW9uLWRlbGF5LnNo JworcmVwbGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQgPSAxMAorCisjIEFkanVzdCBjYWNo ZSBzaXplcyBiYXNlZCBvbiB3b3JrbG9hZCAoaW5jcmVhc2VzIG1lbW9yeSB1c2FnZSkKK3RyYWNr X3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUgPSA0MDk2ICAgICAgIyBUcmFjayB1cCB0byA0MDk2 IHRhYmxlcyAofjE2MCBLQikKK3RyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hl X3NpemUgPSA1MDAwMCAgIyBDYWNoZSA1MGsgcXVlcmllcyAofjMxIE1CKQorICAgPC9wcm9ncmFt bGlzdGluZz4KKyAgIDxwYXJhPgorICAgIFRvdGFsIHNoYXJlZCBtZW1vcnkgcmVxdWlyZWQgZm9y IGFib3ZlIGNvbmZpZ3VyYXRpb246IGFwcHJveGltYXRlbHkgMzEuMiBNQiAoMzEgTUIgcXVlcnkg Y2FjaGUgKyAwLjIgTUIgdGFibGUgbWFwICsgb3ZlcmhlYWQpLgorICAgIERlZmF1bHQgY29uZmln dXJhdGlvbiAoMTAwMDAgcXVlcnkgY2FjaGUgZW50cmllcywgMjA0OCB0YWJsZXMpIHJlcXVpcmVz IGFwcHJveGltYXRlbHkgNi40IE1CLgorICAgPC9wYXJhPgorICA8L3NlY3QzPgorCisgIDxzZWN0 MyBpZD0icnVudGltZS1jb25maWctdHJhY2stdGFibGUtbXV0YXRpb24tbGltaXRhdGlvbnMiPgor ICAgPHRpdGxlPkxpbWl0YXRpb25zPC90aXRsZT4KKyAgIDxwYXJhPgorICAgIFRoZSB0cmFjayB0 YWJsZSBtdXRhdGlvbiBmZWF0dXJlIGhhcyB0aGUgZm9sbG93aW5nIGxpbWl0YXRpb246CisgICA8 L3BhcmE+CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICA8bGl0ZXJhbD5QUkVQQVJFPC9saXRlcmFsPiBzdGF0ZW1lbnRzIGFyZSBub3QgdHJhY2tl ZC4gV2hlbiBhIHByZXBhcmVkIHN0YXRlbWVudAorICAgICAgY29udGFpbmluZyBkYXRhIG1vZGlm aWNhdGlvbiBpcyBleGVjdXRlZCwgdGhlIHRhYmxlIG11dGF0aW9uIGlzIG5vdCByZWNvcmRlZC4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgIDxw YXJhPgorICAgIElmIHlvdXIgYXBwbGljYXRpb24gdXNlcyBwcmVwYXJlZCBzdGF0ZW1lbnRzIGFu ZCByZXF1aXJlcyByZWFkLWFmdGVyLXdyaXRlIGNvbnNpc3RlbmN5LAorICAgIGNvbnNpZGVyIHVz aW5nIGV4cGxpY2l0IHRyYW5zYWN0aW9uIHJvdXRpbmcgb3IgdGhlIDxsaXRlcmFsPi8qTk8gTE9B RCBCQUxBTkNFKi88L2xpdGVyYWw+CisgICAgY29tbWVudCBkaXJlY3RpdmUgZm9yIGFmZmVjdGVk IHF1ZXJpZXMuCisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgICBUaGUgZm9sbG93aW5nIHN0YXRl bWVudCB0eXBlcyA8ZW1waGFzaXM+YXJlPC9lbXBoYXNpcz4gdHJhY2tlZCBhbmQgd2lsbCBtYXJr IHRhYmxlcyBhcyBzdGFsZToKKyAgIDwvcGFyYT4KKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPklOU0VSVDwvbGl0ZXJhbD4sIDxs aXRlcmFsPlVQREFURTwvbGl0ZXJhbD4sIDxsaXRlcmFsPkRFTEVURTwvbGl0ZXJhbD4KKyAgICAg IHN0YXRlbWVudHMgKGluY2x1ZGluZyB0aG9zZSB3aXRoIDxsaXRlcmFsPlJFVFVSTklORzwvbGl0 ZXJhbD4gY2xhdXNlcykuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0 aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5UUlVOQ0FURTwvbGl0ZXJhbD4gc3Rh dGVtZW50cyAoaW5jbHVkaW5nIG11bHRpcGxlIHRhYmxlcykuCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5N RVJHRTwvbGl0ZXJhbD4gc3RhdGVtZW50cyAoUG9zdGdyZVNRTCAxNSspLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxp dGVyYWw+V0lUSDwvbGl0ZXJhbD4gY2xhdXNlcyBjb250YWluaW5nIGRhdGEgbW9kaWZpY2F0aW9u cyAoQ29tbW9uIFRhYmxlIEV4cHJlc3Npb25zCisgICAgICB3aXRoIDxsaXRlcmFsPklOU0VSVDwv bGl0ZXJhbD4sIDxsaXRlcmFsPlVQREFURTwvbGl0ZXJhbD4sIG9yIDxsaXRlcmFsPkRFTEVURTwv bGl0ZXJhbD4pLgorICAgICAgRm9yIGV4YW1wbGUsIDxsaXRlcmFsPldJVEggZGVsZXRlZCBBUyAo REVMRVRFIEZST00gdDEgUkVUVVJOSU5HICopIFNFTEVDVCAqIEZST00gZGVsZXRlZDwvbGl0ZXJh bD4KKyAgICAgIHdpbGwgcHJvcGVybHkgbWFyayB0YWJsZSA8bGl0ZXJhbD50MTwvbGl0ZXJhbD4g YXMgc3RhbGUuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxp c3Q+CisgICA8cGFyYT4KKyAgICA8ZW1waGFzaXM+VHJhbnNhY3Rpb24gUm9sbGJhY2sgQmVoYXZp b3I6PC9lbXBoYXNpcz4gV2l0aGluIGV4cGxpY2l0IHRyYW5zYWN0aW9ucywgdGFibGVzCisgICAg YXJlIG9ubHkgbWFya2VkIGFzIHN0YWxlIGluIHNoYXJlZCBtZW1vcnkgd2hlbiB0aGUgdHJhbnNh Y3Rpb24gaXMgY29tbWl0dGVkLiBJZiB0aGUKKyAgICB0cmFuc2FjdGlvbiBpcyByb2xsZWQgYmFj aywgbm8gdGFibGVzIGFyZSBtYXJrZWQsIHNpbmNlIG5vIGFjdHVhbCBkYXRhIG1vZGlmaWNhdGlv bgorICAgIG9jY3VycmVkIG9uIHJlcGxpY2FzLiBUaGlzIHByZXZlbnRzIHJvbGxlZC1iYWNrIHRy YW5zYWN0aW9ucyBmcm9tIHVubmVjZXNzYXJpbHkKKyAgICBkaXNhYmxpbmcgbG9hZCBiYWxhbmNp bmcuIEZvciBhdXRvY29tbWl0IHN0YXRlbWVudHMgKG91dHNpZGUgZXhwbGljaXQgdHJhbnNhY3Rp b25zKSwKKyAgICB0YWJsZXMgYXJlIG1hcmtlZCBpbW1lZGlhdGVseSB1cG9uIGNvbW1hbmQgY29t cGxldGlvbi4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0Mz4KKworIDwvc2VjdDI+CisKIDwvc2VjdDE+ CmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KaW5kZXggNDY3 OGFiNTMwNTVlODI4YTM3YjY0Nzc4MDE2NDBhZmYxN2ZmODRhNy4uMzk1ODhhZjU4ZGViYTA0NWRm ZmMwMWFlOTMyMTE1YjhhOWRiZmNmMiAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKyBi L3NyYy9NYWtlZmlsZS5hbQpAQCAtMzUsNiArMzUsNyBAQCBwZ3Bvb2xfU09VUkNFUyA9IG1haW4v bWFpbi5jIFwKIAlyZXdyaXRlL3Bvb2xfdGltZXN0YW1wLmMgXAogCXJld3JpdGUvcG9vbF9sb2Jq LmMgXAogCXV0aWxzL3Bvb2xfc2VsZWN0X3dhbGtlci5jIFwKKwl1dGlscy9wb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uLmMgXAogCXV0aWxzL3N0cmxjcHkuYyBcCiAJdXRpbHMvcHNwcmludGYuYyBc CiAJdXRpbHMvcG9vbF9wYXJhbXMuYyBcCmRpZmYgLS1naXQgYS9zcmMvY29uZmlnL3Bvb2xfY29u ZmlnX3ZhcmlhYmxlcy5jIGIvc3JjL2NvbmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMuYwppbmRl eCA2OGFiYjdmNDFjYjk2ZDg1NmM4MjRhMTQ4ODQyNzQ4YmZiN2E0ZDEyLi42MjNkODc1MTY3N2Zk NmYzOWQwZTEyZjBlM2U4OTkxNzE4OTBmNmUwIDEwMDY0NAotLS0gYS9zcmMvY29uZmlnL3Bvb2xf Y29uZmlnX3ZhcmlhYmxlcy5jCisrKyBiL3NyYy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVz LmMKQEAgLTI5MCw2ICsyOTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19lbnVtX2Vu dHJ5IGRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlX29wdGlvbnNbXSA9CiAJeyJ0cmFuc190 cmFuc2FjdGlvbiIsIERMQk9XX1RSQU5TX1RSQU5TQUNUSU9OLCBmYWxzZX0sCiAJeyJhbHdheXMi LCBETEJPV19BTFdBWVMsIGZhbHNlfSwKIAl7ImRtbF9hZGFwdGl2ZSIsIERMQk9XX0RNTF9BREFQ VElWRSwgZmFsc2V9LAorCXsiZG1sX2FkYXB0aXZlX2dsb2JhbCIsIERMQk9XX0RNTF9BREFQVElW RV9HTE9CQUwsIGZhbHNlfSwKIAl7TlVMTCwgMCwgZmFsc2V9CiB9OwogCkBAIC0xNzU3LDYgKzE3 NTgsMTcgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50X2FycmF5IENvbmZpZ3VyZU5hbWVzSW50 QXJyYXlbXSA9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2RvdWJsZSBDb25maWd1cmVOYW1lc0Rv dWJsZVtdID0KIHsKKwl7CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciIsIENG R0NYVF9SRUxPQUQsIExPQURfQkFMQU5DRV9DT05GSUcsCisJCQkiVFRMIG11bHRpcGxpZXIgZm9y IHRyYWNrIHRhYmxlIG11dGF0aW9uIChUVEwgPSByZXBsaWNhdGlvbl9kZWxheSAqIGZhY3Rvciki LAorCQkJQ09ORklHX1ZBUl9UWVBFX0RPVUJMRSwgZmFsc2UsIDAKKwkJfSwKKwkJJmdfcG9vbF9j b25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciwKKwkJNS4wLAkJCQkJLyogYm9v dCB2YWx1ZTogNXggcmVwbGljYXRpb24gZGVsYXkgKi8KKwkJMS4wLCAxMDAuMCwJCQkJLyogbWlu LCBtYXggKi8KKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAkvKiBFbmQtb2YtbGlzdCBtYXJr ZXIgKi8KIAlFTVBUWV9DT05GSUdfRE9VQkxFCiB9OwpAQCAtMjM1NSw2ICsyMzY3LDYxIEBAIHN0 YXRpYyBzdHJ1Y3QgY29uZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVM TCwgTlVMTAogCX0sCiAKKwl7CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9k dXJhdGlvbiIsIENGR0NYVF9SRUxPQUQsIExPQURfQkFMQU5DRV9DT05GSUcsCisJCQkiRHVyYXRp b24gaW4gbWlsbGlzZWNvbmRzIHRvIGZvcmNlIHF1ZXJpZXMgdG8gcHJpbWFyeSBhZnRlciBjaGls ZCBwcm9jZXNzIHN0YXJ0cy4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIEdVQ19V TklUX01TCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRf c3RhcnRfZHVyYXRpb24sCisJCTIwMDAsCQkJCQkvKiAyIHNlY29uZHMgKi8KKwkJMCwgNjAwMDAs CQkJCS8qIDAgdG8gNjAgc2Vjb25kcyAqLworCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsK KwkJeyJ0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzIiwgQ0ZHQ1hUX0lOSVQsIExP QURfQkFMQU5DRV9DT05GSUcsCisJCQkiTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdHJhY2sg dGFibGUgbXV0YXRpb24uIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0s CisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMsCisJ CTEwMjQsCisJCTY0LCA2NTUzNiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsi dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSIsIENGR0NYVF9JTklULCBMT0FEX0JBTEFO Q0VfQ09ORklHLAorCQkJIk1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdHJhY2sgdGFibGUg bXV0YXRpb24uIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZn X3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUsCisJCTIwNDgsCisJ CTEyOCwgMTMxMDcyLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsKKwkJeyJ0cmFja190 YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzIiwgQ0ZHQ1hUX0lOSVQsIExPQURfQkFMQU5DRV9D T05GSUcsCisJCQkiTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgcXVlcnkgcGFyc2UgY2FjaGUu IiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29u ZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHMsCisJCTIwNDgsCisJCTY0LCA2 NTUzNiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsidHJhY2tfdGFibGVfbXV0 YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZSIsIENGR0NYVF9JTklULCBMT0FEX0JBTEFOQ0Vf Q09ORklHLAorCQkJIk1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gcXVlcnkgcGFyc2UgY2Fj aGUuIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xf Y29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemUsCisJCTEw MDAwLAorCQkxMDAsIDEwMDAwMDAsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJLyogRW5k LW9mLWxpc3QgbWFya2VyICovCiAJRU1QVFlfQ09ORklHX0lOVAogfTsKZGlmZiAtLWdpdCBhL3Ny Yy9jb250ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5jIGIvc3JjL2NvbnRleHQvcG9vbF9xdWVyeV9j b250ZXh0LmMKaW5kZXggN2NmOTgxM2ViN2Q1ODY3OGJjODZhMGFhYTM4YmQzYzY0NDViNjY4Ny4u YWExMjMyMjJlY2NhYTg1MDVmOTg0ZGJlMzIyNDk1OGZjNzk0MjRjOCAxMDA2NDQKLS0tIGEvc3Jj L2NvbnRleHQvcG9vbF9xdWVyeV9jb250ZXh0LmMKKysrIGIvc3JjL2NvbnRleHQvcG9vbF9xdWVy eV9jb250ZXh0LmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJ1dGlscy9zdGF0aXN0aWNz LmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zZWxlY3Rfd2Fsa2VyLmgiCiAjaW5jbHVkZSAidXRp bHMvcG9vbF9zdHJlYW0uaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0 aW9uLmgiCiAjaW5jbHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgogI2luY2x1 ZGUgImNvbnRleHQvcG9vbF9xdWVyeV9jb250ZXh0LmgiCiAjaW5jbHVkZSAicGFyc2VyL25vZGVz LmgiCkBAIC0xODI4LDcgKzE4MjksNyBAQCBpc19pbl9saXN0KGNoYXIgKm5hbWUsIExpc3QgKmxp c3QpCiBzdGF0aWMgYm9vbAogaXNfc2VsZWN0X29iamVjdF9pbl90ZW1wX3dyaXRlX2xpc3QoTm9k ZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIHsKLQlpZiAobm9kZSA9PSBOVUxMIHx8IHBvb2xfY29u ZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkUp CisJaWYgKG5vZGUgPT0gTlVMTCB8fCAhRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmln LT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJCXJldHVybiBmYWxzZTsKIAogCWlm IChJc0Eobm9kZSwgUmFuZ2VWYXIpKQpAQCAtMTgzNiw3ICsxODM3LDcgQEAgaXNfc2VsZWN0X29i amVjdF9pbl90ZW1wX3dyaXRlX2xpc3QoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIAkJUmFu Z2VWYXIgICAqcmd2ID0gKFJhbmdlVmFyICopIG5vZGU7CiAJCVBPT0xfU0VTU0lPTl9DT05URVhU ICpzZXNzaW9uX2NvbnRleHQgPSBwb29sX2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpOwogCi0J CWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1df RE1MX0FEQVBUSVZFICYmIHNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24pCisJCWlm IChETEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNl X29uX3dyaXRlKSAmJiBzZXNzaW9uX2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uKQogCQl7CiAJ CQllcmVwb3J0KERFQlVHMSwKIAkJCQkJKGVycm1zZygiaXNfc2VsZWN0X29iamVjdF9pbl90ZW1w X3dyaXRlX2xpc3Q6IFwiJXNcIiwgZm91bmQgcmVsYXRpb24gXCIlc1wiIiwgKGNoYXIgKikgY29u dGV4dCwgcmd2LT5yZWxuYW1lKSkpOwpAQCAtMTg4MCw3ICsxODgxLDcgQEAgc3RhdGljIGNoYXIg KmdldF9hc3NvY2lhdGVkX29iamVjdF9mcm9tX2RtbF9hZGFwdGl2ZV9yZWxhdGlvbnMKIHZvaWQK IGNoZWNrX29iamVjdF9yZWxhdGlvbnNoaXBfbGlzdChjaGFyICpuYW1lLCBib29sIGlzX2Z1bmNf bmFtZSkKIHsKLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRl ID09IERMQk9XX0RNTF9BREFQVElWRSAmJiBwb29sX2NvbmZpZy0+cGFyc2VkX2RtbF9hZGFwdGl2 ZV9vYmplY3RfcmVsYXRpb25zaGlwX2xpc3QpCisJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRShw b29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpICYmIHBvb2xfY29uZmln LT5wYXJzZWRfZG1sX2FkYXB0aXZlX29iamVjdF9yZWxhdGlvbnNoaXBfbGlzdCkKIAl7CiAJCVBP T0xfU0VTU0lPTl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQgPSBwb29sX2dldF9zZXNzaW9uX2Nv bnRleHQoZmFsc2UpOwogCkBAIC0xOTQ0LDcgKzE5NDUsNyBAQCBhZGRfb2JqZWN0X2ludG9fdGVt cF93cml0ZV9saXN0KE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCiBzdGF0aWMgdm9pZAogZG1s X2FkYXB0aXZlKE5vZGUgKm5vZGUsIGNoYXIgKnF1ZXJ5KQogewotCWlmIChwb29sX2NvbmZpZy0+ ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFKQorCWlm IChETEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNl X29uX3dyaXRlKSkKIAl7CiAJCS8qIFNldC9VbnNldCB0cmFuc2FjdGlvbiBzdGF0dXMgZmxhZ3Mg Ki8KIAkJaWYgKElzQShub2RlLCBUcmFuc2FjdGlvblN0bXQpKQpAQCAtMTk2Myw2ICsxOTY0LDM0 IEBAIGRtbF9hZGFwdGl2ZShOb2RlICpub2RlLCBjaGFyICpxdWVyeSkKIAkJCX0KIAkJCWVsc2Ug aWYgKGlzX2NvbW1pdF9vcl9yb2xsYmFja19xdWVyeShub2RlKSkKIAkJCXsKKwkJCQkvKgorCQkJ CSAqIEZvciBkbWxfYWRhcHRpdmVfZ2xvYmFsOiBvbiBDT01NSVQsIGZsdXNoIHRoZSBhY2N1bXVs YXRlZAorCQkJCSAqIHRhYmxlIHdyaXRlcyB0byBzaGFyZWQgbWVtb3J5LiBPbiBST0xMQkFDSywg c2tpcCDigJQgdGhlCisJCQkJICogd3JpdGVzIG5ldmVyIGNvbW1pdHRlZCBzbyBubyBzdGFsZS1y ZWFkIHJpc2sgZXhpc3RzLgorCQkJCSAqIFRoaXMgcHJldmVudHMgYXR0YWNrZXJzIGZyb20gcG9s bHV0aW5nIHRoZSB0YWJsZSBtYXAgd2l0aAorCQkJCSAqIHJvbGxlZC1iYWNrIHRyYW5zYWN0aW9u cy4KKwkJCQkgKi8KKwkJCQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29u X3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgJiYKKwkJCQkJaXNfY29tbWl0X3F1 ZXJ5KG5vZGUpICYmCisJCQkJCXNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0 ZV9saXN0ICE9IE5JTCkKKwkJCQl7CisJCQkJCUxpc3RDZWxsICAgKmNlbGw7CisJCQkJCWludAkJ CWRib2lkOworCisJCQkJCWRib2lkID0gcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0 YWJhc2Vfb2lkKCk7CisJCQkJCWlmIChkYm9pZCA+IDApCisJCQkJCXsKKwkJCQkJCWZvcmVhY2go Y2VsbCwgc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QpCisJCQkJ CQl7CisJCQkJCQkJY2hhcgkgICAqdGFibGVfbmFtZSA9IChjaGFyICopIGxmaXJzdChjZWxsKTsK KwkJCQkJCQlpbnQJCQl0YWJsZV9vaWQgPSBwb29sX3RhYmxlX25hbWVfdG9fb2lkKHRhYmxlX25h bWUpOworCisJCQkJCQkJaWYgKHRhYmxlX29pZCA+IDApCisJCQkJCQkJCXBvb2xfdHJhY2tfdGFi bGVfbXV0YXRpb25fbWFya190YWJsZV93cml0dGVuKHRhYmxlX29pZCwgZGJvaWQpOworCQkJCQkJ fQorCQkJCQl9CisJCQkJfQorCiAJCQkJc2Vzc2lvbl9jb250ZXh0LT5pc19pbl90cmFuc2FjdGlv biA9IGZhbHNlOwogCiAJCQkJaWYgKHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93 cml0ZV9saXN0ICE9IE5JTCkKQEAgLTIwMTAsNiArMjAzOSwxOCBAQCB3aGVyZV90b19zZW5kX21h aW5fcmVwbGljYShQT09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5 LCBOb2RlCiAJaWYgKGRlc3QgPT0gUE9PTF9QUklNQVJZKQogCXsKIAkJcG9vbF9zZXRfbm9kZV90 b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CisKKwkJLyoKKwkJICog UmVzb2x2ZSB0YWJsZSBhbmQgZGF0YWJhc2UgT0lEcyBub3cgdG8gcG9wdWxhdGUgcmVsY2FjaGUu CisJCSAqIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBoYW5ncyBpbiBDb21tYW5kQ29tcGxldGUgd2hl cmUgd2Ugc2hvdWxkbid0CisJCSAqIGJlIHJ1bm5pbmcgbmV3IHF1ZXJpZXMgYWdhaW5zdCB0aGUg YmFja2VuZC4KKwkJICovCisJCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vf b25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwkJeworCQkJaW50ICpvaWRz OworCQkJcG9vbF9leHRyYWN0X3RhYmxlX29pZHMobm9kZSwgJm9pZHMpOworCQkJcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisJCX0KIAl9CiAJLyogU2hvdWxk IGJlIHNlbnQgdG8gYm90aCBwcmltYXJ5IGFuZCBzdGFuZGJ5PyAqLwogCWVsc2UgaWYgKGRlc3Qg PT0gUE9PTF9CT1RIKQpAQCAtMjEzOSw2ICsyMTgwLDEwNyBAQCB3aGVyZV90b19zZW5kX21haW5f cmVwbGljYShQT09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBO b2RlCiAJCQkJewogCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwg UFJJTUFSWV9OT0RFX0lEKTsKIAkJCQl9CisJCQkJLyoKKwkJCQkgKiBDaGVjayB0cmFjayB0YWJs ZSBtdXRhdGlvbiBmb3IgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMuCisJCQkJICogSWYgaW4gY29s ZCBzdGFydCBvciBhbnkgdGFibGUgd2FzIHJlY2VudGx5IHdyaXR0ZW4sCisJCQkJICogcm91dGUg dG8gcHJpbWFyeSB0byBhdm9pZCBzdGFsZSByZWFkcy4KKwkJCQkgKi8KKwkJCQllbHNlIGlmIChw b29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FE QVBUSVZFX0dMT0JBTCkKKwkJCQl7CisJCQkJCWJvb2wJCWZvcmNlX3ByaW1hcnkgPSBmYWxzZTsK KworCQkJCQkvKiBEdXJpbmcgY29sZCBzdGFydCwgcm91dGUgZXZlcnl0aGluZyB0byBwcmltYXJ5 ICovCisJCQkJCWlmIChwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2luX2NvbGRfc3RhcnQoKSkK KwkJCQkJeworCQkJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCShlcnJtc2coImNvdWxkIG5v dCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSBtdXRhdGlvbiBjb2xkIHN0YXJ0 IiksCisJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9uID0gUFJJTUFSWSBmb3IgcXVlcnk9 IFwiJXNcIiIsIHF1ZXJ5KSkpOworCQkJCQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQkJCX0K KwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCS8qIEV4dHJhY3QgdGFibGUgb2lkcyBhbmQgY2hlY2sg aWYgYW55IGFyZSBzdGFsZSAqLworCQkJCQlTZWxlY3RDb250ZXh0IGN0eDsKKwkJCQkJaW50CQkJ ZGJvaWQ7CisJCQkJCWludAkJCW51bV9vaWRzOworCQkJCQlpbnQJCQlpOworCisJCQkJCW1lbXNl dCgmY3R4LCAwLCBzaXplb2YoY3R4KSk7CisJCQkJCW51bV9vaWRzID0gcG9vbF9leHRyYWN0X3Rh YmxlX29pZHNfZnJvbV9zZWxlY3Rfc3RtdChub2RlLCAmY3R4KTsKKwkJCQkJaWYgKG51bV9vaWRz ID4gMCkKKwkJCQkJeworCQkJCQkJZGJvaWQgPSBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dl dF9kYXRhYmFzZV9vaWQoKTsKKworCQkJCQkJaWYgKGRib2lkIDw9IDApCisJCQkJCQl7CisJCQkJ CQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCBiYWxh bmNlIGJlY2F1c2UgZGF0YWJhc2Ugb2lkIHdhcyB1bmF2YWlsYWJsZSIpLAorCQkJCQkJCQkJIGVy cmRldGFpbCgiZGVzdGluYXRpb24gPSBQUklNQVJZIGZvciBxdWVyeT0gXCIlc1wiIiwgcXVlcnkp KSk7CisJCQkJCQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQkJCQl9CisJCQkJCQllbHNlCisJ CQkJCQl7CisJCQkJCQkJZm9yIChpID0gMDsgaSA8IG51bV9vaWRzOyBpKyspCisJCQkJCQkJewor CQkJCQkJCQlpZiAocG9vbF90cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9pc19zdGFsZShjdHgu dGFibGVfb2lkc1tpXSwgZGJvaWQpKQorCQkJCQkJCQl7CisJCQkJCQkJCQllcmVwb3J0KERFQlVH MSwKKwkJCQkJCQkJCQkJKGVycm1zZygiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRh YmxlIFwiJXNcIiB3YXMgcmVjZW50bHkgd3JpdHRlbiIsCisJCQkJCQkJCQkJCQkJY3R4LnRhYmxl X25hbWVzW2ldKSwKKwkJCQkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24gPSBQUklNQVJZ IGZvciBxdWVyeT0gXCIlc1wiIiwgcXVlcnkpKSk7CisJCQkJCQkJCQlmb3JjZV9wcmltYXJ5ID0g dHJ1ZTsKKwkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJ CQl9CisJCQkJfQorCisJCQkJCWlmIChmb3JjZV9wcmltYXJ5KQorCQkJCQl7CisJCQkJCQlwb29s X3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwgUFJJTUFSWV9OT0RFX0lEKTsKKwkJ CQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8qIFByb2NlZWQgd2l0aCBsb2FkIGJhbGFu Y2luZyAqLworCQkJCQkJaWYgKHBvb2xfY29uZmlnLT5zdGF0ZW1lbnRfbGV2ZWxfbG9hZF9iYWxh bmNlKQorCQkJCQkJeworCQkJCQkJCXNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVf aWQgPSBzZWxlY3RfbG9hZF9iYWxhbmNpbmdfbm9kZSgpOworCQkJCQkJfQorCisJCQkJCQkvKgor CQkJCQkJICogQXMgc3RyZWFtaW5nIHJlcGxpY2F0aW9uIGRlbGF5IGlzIHRvbyBtdWNoLCBpZgor CQkJCQkJICogcHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkgaXMgdHJ1ZSB0aGVuIGVsZWN0IG5l dyBsb2FkCisJCQkJCQkgKiBiYWxhbmNlIG5vZGUgd2hpY2ggaXMgbG93ZXN0IGRlbGF5ZWQsIGZh bHNlIHRoZW4gc2VuZAorCQkJCQkJICogdG8gdGhlIHByaW1hcnkuCisJCQkJCQkgKi8KKwkJCQkJ CWlmIChTVFJFQU0gJiYgY2hlY2tfcmVwbGljYXRpb25fZGVsYXkoc2Vzc2lvbl9jb250ZXh0LT5s b2FkX2JhbGFuY2Vfbm9kZV9pZCkpCisJCQkJCQl7CisJCQkJCQkJZXJlcG9ydChERUJVRzEsCisJ CQkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2Ugb2YgdG9vIG11 Y2ggcmVwbGljYXRpb24gZGVsYXkiKSwKKwkJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9u ID0gJWQgZm9yIHF1ZXJ5PSBcIiVzXCIiLCBkZXN0LCBxdWVyeSkpKTsKKworCQkJCQkJCWlmIChw b29sX2NvbmZpZy0+cHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkpCisJCQkJCQkJeworCQkJCQkJ CQlpbnQJCQluZXdfbG9hZF9iYWxhbmNpbmdfbm9kZSA9IHNlbGVjdF9sb2FkX2JhbGFuY2luZ19u b2RlKCk7CisKKwkJCQkJCQkJc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCA9 IG5ld19sb2FkX2JhbGFuY2luZ19ub2RlOworCQkJCQkJCQlzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5 X2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0gc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2Jh bGFuY2Vfbm9kZV9pZDsKKwkJCQkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2Nv bnRleHQsIHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVf aWQpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlwb29sX3NldF9u b2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwgUFJJTUFSWV9OT0RFX0lEKTsKKwkJCQkJCQl9 CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJc2Vzc2lvbl9jb250ZXh0LT5x dWVyeV9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCA9IHNlc3Npb25fY29udGV4dC0+bG9h ZF9iYWxhbmNlX25vZGVfaWQ7CisJCQkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5 X2NvbnRleHQsCisJCQkJCQkJCQkJCQkJIHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dC0+ bG9hZF9iYWxhbmNlX25vZGVfaWQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQogCQkJCWVsc2UK IAkJCQl7CiAJCQkJCWlmIChwb29sX2NvbmZpZy0+c3RhdGVtZW50X2xldmVsX2xvYWRfYmFsYW5j ZSkKZGlmZiAtLWdpdCBhL3NyYy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMgYi9zcmMv Y29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5jCmluZGV4IGRlZDQxYzdmYzY0Y2ViYTFkMWZh ZmQ2ZjRhOWYxMGE3NTA4NzIzNzQuLmE5NTk2NTYxYTdlMDI2NWU5MjhiOTU3YTI3NjZmNDZmYjRl OWViYWEgMTAwNjQ0Ci0tLSBhL3NyYy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMKKysr IGIvc3JjL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYwpAQCAtNTMyLDcgKzUzMiw3IEBA IGR1bXBfc2VudF9tZXNzYWdlKGNoYXIgKmNhbGxlciwgUE9PTF9TRU5UX01FU1NBR0UgKm0pCiBz dGF0aWMgdm9pZAogZG1sX2FkYXB0aXZlX2luaXQodm9pZCkKIHsKLQlpZiAocG9vbF9jb25maWct PmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSkKKwlp ZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5j ZV9vbl93cml0ZSkpCiAJewogCQlzZXNzaW9uX2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uID0g ZmFsc2U7CiAJCXNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ID0g TklMOwpAQCAtNTQyLDcgKzU0Miw3IEBAIGRtbF9hZGFwdGl2ZV9pbml0KHZvaWQpCiBzdGF0aWMg dm9pZAogZG1sX2FkYXB0aXZlX2Rlc3Ryb3kodm9pZCkKIHsKLQlpZiAocG9vbF9jb25maWctPmRp c2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSAmJiBzZXNz aW9uX2NvbnRleHQpCisJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRShwb29sX2NvbmZpZy0+ZGlz YWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpICYmIHNlc3Npb25fY29udGV4dCkKIAl7CiAJCWlm IChzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfbGlzdCAhPSBOSUwpCiAJ CQlsaXN0X2ZyZWVfZGVlcChzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVf bGlzdCk7CkBAIC03MzgsMTAgKzczOCwxMCBAQCB2b2lkCiBwb29sX3NldF93cml0aW5nX3RyYW5z YWN0aW9uKHZvaWQpCiB7CiAJLyoKLQkgKiBJZiBkaXNhYmxlX3RyYW5zYWN0aW9uX29uX3dyaXRl IGlzICdvZmYnIG9yICdkbWxfYWRhcHRpdmUnLCB0aGVuIG5ldmVyCi0JICogdHVybiBvbiB3cml0 aW5nIHRyYW5zYWN0aW9uIGZsYWcuCisJICogSWYgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3Jp dGUgaXMgJ29mZicgb3IgJ2RtbF9hZGFwdGl2ZScgb3IKKwkgKiAnZG1sX2FkYXB0aXZlX2dsb2Jh bCcsIHRoZW4gbmV2ZXIgdHVybiBvbiB3cml0aW5nIHRyYW5zYWN0aW9uIGZsYWcuCiAJICovCi0J aWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19P RkYgJiYgcG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9X X0RNTF9BREFQVElWRSkKKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29u X3dyaXRlICE9IERMQk9XX09GRiAmJiAhRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmln LT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJewogCQlwb29sX2dldF9zZXNzaW9u X2NvbnRleHQoZmFsc2UpLT53cml0aW5nX3RyYW5zYWN0aW9uID0gdHJ1ZTsKIAkJZXJlcG9ydChE RUJVRzUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb29sLmggYi9zcmMvaW5jbHVkZS9wb29s LmgKaW5kZXggZWE2Zjg3ZTEyMGFmODY2YjhlZDNhMTU3OTBkOWQ4YThlMDA5ZmU5MS4uNzE2OGMx YWVhODc3ODU2YjU5NzhkZTMzMmFkNjM2MzI1ZWI5YzMwYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcG9vbC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvb2wuaApAQCAtNDI0LDcgKzQyNCw3IEBAIHR5 cGVkZWYgZW51bQogI2RlZmluZSBNaW4oeCwgeSkJCSgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCiAK IAotI2RlZmluZSBNQVhfTlVNX1NFTUFQSE9SRVMJCTgKKyNkZWZpbmUgTUFYX05VTV9TRU1BUEhP UkVTCQkxMAogI2RlZmluZSBDT05OX0NPVU5URVJfU0VNCQkwCiAjZGVmaW5lIFJFUVVFU1RfSU5G T19TRU0JCTEKICNkZWZpbmUgUVVFUllfQ0FDSEVfU1RBVFNfU0VNCTIKQEAgLTQzNCw2ICs0MzQs OCBAQCB0eXBlZGVmIGVudW0KICNkZWZpbmUgRk9MTE9XX1BSSU1BUllfU0VNCQk2CiAjZGVmaW5l IE1BSU5fRVhJVF9IQU5ETEVSX1NFTQk3CS8qIHVzZWQgaW4gZXhpdF9oYW5kZXIgaW4gcGdwb29s IG1haW4KIAkJCQkJCQkJCSAqIHByb2Nlc3MgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJ T05fVEFCTEVfU0VNCTgKKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fUVVFUllfU0VNCTkK ICNkZWZpbmUgTUFYX1JFUVVFU1RfUVVFVUVfU0laRQkxMAogCiAjZGVmaW5lIE1BWF9TRUNfV0FJ VF9GT1JfQ0xVU1RFUl9UUkFOU0FDVElPTiAxMCAvKiB0aW1lIGluIHNlY29uZHMgdG8ga2VlcApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaCBiL3NyYy9pbmNsdWRlL3Bvb2xf Y29uZmlnLmgKaW5kZXggNzQxZGU2Y2M1ZmMzMzY4ZjgxM2Q2YjZlZmE2OGViN2Y4YTc5NTA2Yi4u ODc5OGI4NmViMzYyMGFiMzZiZTczM2JiNjBiYmI4NDY0YjAwNjNjOCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcG9vbF9jb25maWcuaAorKysgYi9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oCkBA IC0xMDUsOSArMTA1LDEzIEBAIHR5cGVkZWYgZW51bSBETEJPV19PUFRJT04KIAlETEJPV19UUkFO U0FDVElPTiwKIAlETEJPV19UUkFOU19UUkFOU0FDVElPTiwKIAlETEJPV19BTFdBWVMsCi0JRExC T1dfRE1MX0FEQVBUSVZFCisJRExCT1dfRE1MX0FEQVBUSVZFLAorCURMQk9XX0RNTF9BREFQVElW RV9HTE9CQUwKIH0gRExCT1dfT1BUSU9OOwogCisjZGVmaW5lIERMQk9XX0lTX0RNTF9BREFQVElW RShvcHQpIFwKKwkoKG9wdCkgPT0gRExCT1dfRE1MX0FEQVBUSVZFIHx8IChvcHQpID09IERMQk9X X0RNTF9BREFQVElWRV9HTE9CQUwpCisKIHR5cGVkZWYgZW51bSBSRUxRVEFSR0VUX09QVElPTgog ewogCVJFTFFUQVJHRVRfUFJJTUFSWSA9IDEsCkBAIC0zNjUsNiArMzY5LDE1IEBAIHR5cGVkZWYg c3RydWN0CiAJCQkJCQkJCQkgKiByZXBsaWNhdGlvbiBjaGVjayAqLwogCWNoYXIJICAgKnJlcGxp Y2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQ7CS8qIGV4dGVybmFsIGNvbW1hbmQgZm9yIHJlcGxpY2F0 aW9uIGRlbGF5ICovCiAJaW50CQkJcmVwbGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQ7CS8q IHRpbWVvdXQgZm9yIGV4dGVybmFsIGNvbW1hbmQgaW4gc2Vjb25kcyAqLworCisJLyogVHJhY2sg dGFibGUgbXV0YXRpb24gY29uZmlndXJhdGlvbiBmb3IgdHJhY2tpbmcgcmVjZW50bHkgd3JpdHRl biB0YWJsZXMgKi8KKwlkb3VibGUJCXRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3I7CQkv KiBUVEwgbXVsdGlwbGllciBmb3IgcmVwbGljYXRpb24gZGVsYXkgKi8KKwlpbnQJCQl0cmFja190 YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uOwkvKiBDb2xkIHN0YXJ0IGR1cmF0aW9u IGluIG1zICovCisJaW50CQkJdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czsJLyog TnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdGFibGUgbWFwICovCisJaW50CQkJdHJhY2tfdGFi bGVfbXV0YXRpb25fdGFibGVfc2l6ZTsJCS8qIE1heCBlbnRyaWVzIGluIHRhYmxlIG1hcCAqLwor CWludAkJCXRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHM7CS8qIE51bWJlciBvZiBo YXNoIGJ1Y2tldHMgZm9yIHF1ZXJ5IGNhY2hlICovCisJaW50CQkJdHJhY2tfdGFibGVfbXV0YXRp b25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZTsJLyogTWF4IGVudHJpZXMgaW4gcXVlcnkgcGFyc2Ug Y2FjaGUgKi8KKwogCWNoYXIJICAgKmZhaWxvdmVyX2NvbW1hbmQ7CS8qIGV4ZWN1dGUgY29tbWFu ZCB3aGVuIGZhaWxvdmVyIGhhcHBlbnMgKi8KIAljaGFyCSAgICpmb2xsb3dfcHJpbWFyeV9jb21t YW5kOyAvKiBleGVjdXRlIGNvbW1hbmQgd2hlbiBmYWlsb3ZlciBpcwogCQkJCQkJCQkJCSAqIGVu ZGVkICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211 dGF0aW9uLmggYi9zcmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uNWNkNWQ0ZWY0MDk2NDVmZTc3ZTNiYjAyMjM5ZTE0MDQ1NmRlMDU1NAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRp b24uaApAQCAtMCwwICsxLDIzNyBAQAorLyogLSotcGdzcWwtYy0qLSAqLworLyoKKyAqIHBncG9v bDogYSBsYW5ndWFnZSBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHBvb2wgc2VydmVyIGZvciBQb3N0 Z3JlU1FMCisgKiB3cml0dGVuIGJ5IFRhdHN1byBJc2hpaQorICoKKyAqIENvcHlyaWdodCAoYykg MjAwMy0yMDI2CVBnUG9vbCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBQZXJtaXNz aW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFu ZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBp cyBoZXJlYnkKKyAqIGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYXBwZWFyIGluIGFsbAorICogY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24KKyAqIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9y dGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiB0aGUKKyAqIGF1dGhvciBu b3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworICog ZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHBy aW9yCisgKiBwZXJtaXNzaW9uLiBUaGUgYXV0aG9yIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBh Ym91dCB0aGUKKyAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3Nl LiAgSXQgaXMgcHJvdmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQg d2FycmFudHkuCisgKgorICogcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oOiBJbi1tZW1vcnkg dHJhY2tpbmcgb2YgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMKKyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0byBhdm9pZCBzdGFsZSByZWFkcyBmcm9tIHJlcGxpY2FzIGR1cmluZyByZXBs aWNhdGlvbiBsYWcKKyAqLworCisjaWZuZGVmIFBPT0xfVFJBQ0tfVEFCTEVfTVVUQVRJT05fSAor I2RlZmluZSBQT09MX1RSQUNLX1RBQkxFX01VVEFUSU9OX0gKKworI2luY2x1ZGUgInBvb2wuaCIK KyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisvKgorICogTWF4aW11bSB0YWJsZSBuYW1lIGxlbmd0 aCBpbmNsdWRpbmcgc2NoZW1hOiAic2NoZW1hIi4idGFibGUiCisgKiBVc2luZyBOQU1FREFUQUxF TiAqIDIgKyA0IGZvciBxdW90ZXMgYW5kIGRvdAorICovCisjZGVmaW5lIFRSQUNLX1RBQkxFX01V VEFUSU9OX1RBQkxFX05BTUVfTEVOCShOQU1FREFUQUxFTiAqIDIgKyA0KQorCisvKgorICogTWF4 aW11bSBudW1iZXIgb2YgdGFibGVzIHdlIHRyYWNrIHBlciBxdWVyeQorICovCisjZGVmaW5lIFRS QUNLX1RBQkxFX01VVEFUSU9OX01BWF9UQUJMRVNfUEVSX1FVRVJZCTgKKworLyoKKyAqIEludmFs aWQgaW5kZXggbWFya2VyIGZvciBsaW5rZWQgbGlzdHMKKyAqLworI2RlZmluZSBUUkFDS19UQUJM RV9NVVRBVElPTl9JTlZBTElEX0lOREVYCSgtMSkKKworLyoKKyAqIERlZmF1bHQgVFRMIGluIG1p Y3Jvc2Vjb25kcyAoMTAwbXMpIHVzZWQgd2hlbiByZXBsaWNhdGlvbiBkZWxheSBpcyB1bmtub3du CisgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVMJKDEwMCAq IDEwMDApCisKKy8qCisgKiBFbnRyeSBpbiB0aGUgdGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSAo a2V5ZWQgYnkgdGFibGUvZGF0YWJhc2Ugb2lkcykKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHJhY2tU YWJsZU11dGF0aW9uRW50cnkKK3sKKwlpbnQJCQl0YWJsZV9vaWQ7CQkJCS8qIFRhYmxlIG9pZCAq LworCWludAkJCWRib2lkOwkJCQkJLyogRGF0YWJhc2Ugb2lkICovCisJc3RydWN0IHRpbWV2YWwg bGFzdF93cml0ZV90aW1lOwkJLyogV2hlbiB0aGUgdGFibGUgd2FzIGxhc3Qgd3JpdHRlbiAqLwor CXVpbnQzMgkJaGFzaDsJCQkJCS8qIFByZS1jb21wdXRlZCBoYXNoIHZhbHVlICovCisJaW50CQkJ bmV4dDsJCQkJCS8qIE5leHQgZW50cnkgaW4gY29sbGlzaW9uIGNoYWluICgtMSBpZiBub25lKSAq LworCWJvb2wJCWluX3VzZTsJCQkJCS8qIElzIHRoaXMgZW50cnkgaW4gdXNlPyAqLworfSBUcmFj a1RhYmxlTXV0YXRpb25FbnRyeTsKKworLyoKKyAqIEhlYWRlciBmb3IgdGhlIHRhYmxlIG11dGF0 aW9uIGhhc2ggdGFibGUgaW4gc2hhcmVkIG1lbW9yeQorICovCit0eXBlZGVmIHN0cnVjdCBUcmFj a1RhYmxlTXV0YXRpb25IYXNoVGFibGUKK3sKKwlpbnQJCQludW1fYnVja2V0czsJCS8qIE51bWJl ciBvZiBoYXNoIGJ1Y2tldHMgKi8KKwlpbnQJCQltYXhfZW50cmllczsJCS8qIE1heGltdW0gZW50 cmllcyBhbGxvd2VkICovCisJaW50CQkJbnVtX2VudHJpZXM7CQkvKiBDdXJyZW50IG51bWJlciBv ZiBlbnRyaWVzICovCisJaW50CQkJZnJlZV9saXN0X2hlYWQ7CQkvKiBIZWFkIG9mIGZyZWUgZW50 cnkgbGlzdCAqLworCS8qIEZsZXhpYmxlIGFycmF5IG1lbWJlcnMgZm9sbG93IGluIHNoYXJlZCBt ZW1vcnk6CisJICogaW50IGJ1Y2tldHNbbnVtX2J1Y2tldHNdOworCSAqIFRyYWNrVGFibGVNdXRh dGlvbkVudHJ5IGVudHJpZXNbbWF4X2VudHJpZXNdOworCSAqLworfSBUcmFja1RhYmxlTXV0YXRp b25IYXNoVGFibGU7CisKKy8qCisgKiBFbnRyeSBpbiB0aGUgcXVlcnkgcGFyc2UgY2FjaGUKKyAq LwordHlwZWRlZiBzdHJ1Y3QgUXVlcnlQYXJzZUVudHJ5Cit7CisJdWludDY0CQlxdWVyeV9oYXNo OwkJCS8qIEhhc2ggb2Ygbm9ybWFsaXplZCBxdWVyeSAqLworCWJvb2wJCWlzX3dyaXRlOwkJCS8q IFRydWUgaWYgSU5TRVJUL1VQREFURS9ERUxFVEUgKi8KKwlpbnQJCQludW1fdGFibGVzOwkJCS8q IE51bWJlciBvZiB0YWJsZXMgaW4gcXVlcnkgKi8KKwljaGFyCQl0YWJsZV9uYW1lc1tUUkFDS19U QUJMRV9NVVRBVElPTl9NQVhfVEFCTEVTX1BFUl9RVUVSWV1bVFJBQ0tfVEFCTEVfTVVUQVRJT05f VEFCTEVfTkFNRV9MRU5dOworCWludAkJCW5leHQ7CQkJCS8qIE5leHQgZW50cnkgaW4gY29sbGlz aW9uIGNoYWluICovCisJaW50CQkJbHJ1X3ByZXY7CQkJLyogUHJldmlvdXMgaW4gTFJVIGxpc3Qg Ki8KKwlpbnQJCQlscnVfbmV4dDsJCQkvKiBOZXh0IGluIExSVSBsaXN0ICovCisJYm9vbAkJaW5f dXNlOwkJCQkvKiBJcyB0aGlzIGVudHJ5IGluIHVzZT8gKi8KK30gUXVlcnlQYXJzZUVudHJ5Owor CisvKgorICogSGVhZGVyIGZvciB0aGUgcXVlcnkgcGFyc2UgY2FjaGUgaW4gc2hhcmVkIG1lbW9y eQorICovCit0eXBlZGVmIHN0cnVjdCBRdWVyeVBhcnNlQ2FjaGUKK3sKKwlpbnQJCQludW1fYnVj a2V0czsJCS8qIE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi8KKwlpbnQJCQltYXhfZW50cmllczsJ CS8qIE1heGltdW0gZW50cmllcyBhbGxvd2VkICovCisJaW50CQkJbnVtX2VudHJpZXM7CQkvKiBD dXJyZW50IG51bWJlciBvZiBlbnRyaWVzICovCisJaW50CQkJZnJlZV9saXN0X2hlYWQ7CQkvKiBI ZWFkIG9mIGZyZWUgZW50cnkgbGlzdCAqLworCWludAkJCWxydV9oZWFkOwkJCS8qIE1vc3QgcmVj ZW50bHkgdXNlZCAqLworCWludAkJCWxydV90YWlsOwkJCS8qIExlYXN0IHJlY2VudGx5IHVzZWQg Ki8KKwkvKiBGbGV4aWJsZSBhcnJheSBtZW1iZXJzIGZvbGxvdyBpbiBzaGFyZWQgbWVtb3J5Ogor CSAqIGludCBidWNrZXRzW251bV9idWNrZXRzXTsKKwkgKiBRdWVyeVBhcnNlRW50cnkgZW50cmll c1ttYXhfZW50cmllc107CisJICovCit9IFF1ZXJ5UGFyc2VDYWNoZTsKKworLyoKKyAqIEdsb2Jh bCBzdGF0ZSBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZQorICovCit0eXBlZGVmIHN0 cnVjdCBUcmFja1RhYmxlTXV0YXRpb25TdGF0ZQoreworCWJvb2wJCWluaXRpYWxpemVkOwkJCS8q IEhhcyBzaGFyZWQgbWVtb3J5IGJlZW4gaW5pdGlhbGl6ZWQ/ICovCisJdWludDY0CQljdXJyZW50 X3R0bF91czsJCQkvKiBDdXJyZW50IFRUTCBpbiBtaWNyb3NlY29uZHMgKi8KKwlzdHJ1Y3QgdGlt ZXZhbCB0dGxfbGFzdF91cGRhdGVkOwkvKiBXaGVuIFRUTCB3YXMgbGFzdCB1cGRhdGVkICovCisJ c3RydWN0IHRpbWV2YWwgbGFzdF9jbGVhbnVwX3RpbWU7CS8qIFdoZW4gbGFzdCBleHBpcmVkIGNs ZWFudXAgcmFuICovCisJc3RydWN0IHRpbWV2YWwgZ2xvYmFsX2NvbGRfc3RhcnRfdW50aWw7CS8q IEdsb2JhbCBjb2xkIHN0YXJ0IGVuZCB0aW1lICovCisJdm9sYXRpbGUgdWludDMyIHN0YXRzX3F1 ZXJpZXNfY2hlY2tlZDsJLyogTnVtYmVyIG9mIHF1ZXJpZXMgY2hlY2tlZCAqLworCXZvbGF0aWxl IHVpbnQzMiBzdGF0c19mb3JjZWRfcHJpbWFyeTsJCS8qIFF1ZXJpZXMgZm9yY2VkIHRvIHByaW1h cnkgKi8KKwl2b2xhdGlsZSB1aW50MzIgc3RhdHNfYWxsb3dlZF9yZXBsaWNhOwkvKiBRdWVyaWVz IGFsbG93ZWQgdG8gcmVwbGljYSAqLworfSBUcmFja1RhYmxlTXV0YXRpb25TdGF0ZTsKKworLyoK KyAqIE1haW4gc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwgY29tcG9uZW50 cworICovCit0eXBlZGVmIHN0cnVjdCBUcmFja1RhYmxlTXV0YXRpb25TaG1lbQoreworCVRyYWNr VGFibGVNdXRhdGlvblN0YXRlCXN0YXRlOworCVRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZQkq dGFibGVfbWFwOworCVF1ZXJ5UGFyc2VDYWNoZQkJKnF1ZXJ5X2NhY2hlOworfSBUcmFja1RhYmxl TXV0YXRpb25TaG1lbTsKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogUHVibGljIEFQSSBmdW5j dGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogSW5pdGlhbGl6ZSBzaGFy ZWQgbWVtb3J5IHN0cnVjdHVyZXMgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uLgorICogQ2FsbGVk IGZyb20gcGdwb29sX21haW4uYyBhZnRlciBwb29sX2luaXRfcG9vbF9pbmZvKCkuCisgKi8KK2V4 dGVybiB2b2lkIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25faW5pdCh2b2lkKTsKKworLyoKKyAq IEluaXRpYWxpemUgcGVyLWNoaWxkIHByb2Nlc3Mgc3RhdGUgZm9yIHRyYWNrIHRhYmxlIG11dGF0 aW9uLgorICogQ2FsbGVkIGZyb20gY2hpbGQuYyB3aGVuIGEgbmV3IGNoaWxkIHByb2Nlc3Mgc3Rh cnRzLgorICogU2V0cyB1cCBjb2xkIHN0YXJ0IHRyYWNraW5nLgorICovCitleHRlcm4gdm9pZCBw b29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2NoaWxkX2luaXQodm9pZCk7CisKKy8qCisgKiBDaGVj ayBpZiB0aGUgY2hpbGQgcHJvY2VzcyBpcyBpbiBjb2xkIHN0YXJ0IHBlcmlvZC4KKyAqIER1cmlu ZyBjb2xkIHN0YXJ0LCBhbGwgcXVlcmllcyBhcmUgcm91dGVkIHRvIHByaW1hcnkuCisgKiBSZXR1 cm5zIHRydWUgaWYgaW4gY29sZCBzdGFydCwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitleHRlcm4g Ym9vbCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2luX2NvbGRfc3RhcnQodm9pZCk7CisKKy8q CisgKiBUcmlnZ2VyIGEgZ2xvYmFsIGNvbGQgc3RhcnQgcGVyaW9kIGZvciBhbGwgcHJvY2Vzc2Vz LgorICogVXNlZCBhZnRlciB3YXRjaGRvZyBsZWFkZXIgY2hhbmdlIHRvIGF2b2lkIHN0YWxlIHJl YWRzLgorICovCitleHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3RyaWdnZXJf Z2xvYmFsX2NvbGRfc3RhcnQodm9pZCk7CisKKy8qCisgKiBHZXQgb2lkIG9mIGN1cnJlbnQgZGF0 YWJhc2UuCisgKi8KK2V4dGVybiBpbnQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0 YWJhc2Vfb2lkKHZvaWQpOworCisvKgorICogQ2hlY2sgaWYgYSB0YWJsZSB3YXMgcmVjZW50bHkg d3JpdHRlbiB0byAoaXMgInN0YWxlIikuCisgKiBJZiBzdGFsZSwgcmVhZHMgZnJvbSB0aGlzIHRh YmxlIHNob3VsZCBnbyB0byBwcmltYXJ5LgorICogUmV0dXJucyB0cnVlIGlmIHRhYmxlIGlzIHN0 YWxlIChyZWNlbnRseSB3cml0dGVuKSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitleHRlcm4gYm9v bCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2lzX3N0YWxlKGludCB0YWJsZV9vaWQs IGludCBkYm9pZCk7CisKKy8qCisgKiBNYXJrIHRhYmxlcyBhcyByZWNlbnRseSB3cml0dGVuLgor ICogQ2FsbGVkIGFmdGVyIElOU0VSVC9VUERBVEUvREVMRVRFIHF1ZXJpZXMgY29tcGxldGUuCisg KiB0YWJsZV9vaWRzOiBhcnJheSBvZiB0YWJsZSBvaWRzCisgKiBudW1fdGFibGVzOiBudW1iZXIg b2YgdGFibGVzIGluIGFycmF5CisgKiBkYm9pZDogZGF0YWJhc2Ugb2lkCisgKi8KK2V4dGVybiB2 b2lkIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fbWFya190YWJsZXNfd3JpdHRlbihjb25zdCBp bnQgKnRhYmxlX29pZHMsIGludCBudW1fdGFibGVzLCBpbnQgZGJvaWQpOworCisvKgorICogQ29u dmVuaWVuY2UgZnVuY3Rpb24gdG8gbWFyayBhIHNpbmdsZSB0YWJsZSBhcyB3cml0dGVuLgorICog dGFibGVfb2lkOiB0YWJsZSBvaWQKKyAqIGRib2lkOiBkYXRhYmFzZSBvaWQKKyAqLworZXh0ZXJu IHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlX3dyaXR0ZW4oaW50IHRh YmxlX29pZCwgaW50IGRib2lkKTsKKworLyoKKyAqIFVwZGF0ZSB0aGUgVFRMIGJhc2VkIG9uIGN1 cnJlbnQgcmVwbGljYXRpb24gZGVsYXkuCisgKiBDYWxsZWQgZnJvbSBwb29sX3dvcmtlcl9jaGls ZC5jIHdoZW4gcmVwbGljYXRpb24gZGVsYXkgaXMgdXBkYXRlZC4KKyAqIGRlbGF5X3VzOiByZXBs aWNhdGlvbiBkZWxheSBpbiBtaWNyb3NlY29uZHMKKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl91cGRhdGVfdHRsKHVpbnQ2NCBkZWxheV91cyk7CisKKy8qCisgKiBM b29rIHVwIGNhY2hlZCBwYXJzZSByZXN1bHQgZm9yIGEgcXVlcnkuCisgKiBoYXNoOiBoYXNoIG9m IG5vcm1hbGl6ZWQgcXVlcnkKKyAqIGlzX3dyaXRlOiBvdXRwdXQgLSB0cnVlIGlmIHF1ZXJ5IGlz IGEgd3JpdGUKKyAqIHRhYmxlX25hbWVzOiBvdXRwdXQgLSBhcnJheSB0byBmaWxsIHdpdGggdGFi bGUgbmFtZXMKKyAqIG51bV90YWJsZXM6IG91dHB1dCAtIG51bWJlciBvZiB0YWJsZXMgZm91bmQK KyAqIFJldHVybnMgdHJ1ZSBpZiBmb3VuZCBpbiBjYWNoZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICov CitleHRlcm4gYm9vbCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dldF9jYWNoZWRfcGFyc2Uo dWludDY0IGhhc2gsIGJvb2wgKmlzX3dyaXRlLAorCQkJCQkJCQkJCQkgY2hhciB0YWJsZV9uYW1l c1tdW1RSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX05BTUVfTEVOXSwKKwkJCQkJCQkJCQkJIGlu dCAqbnVtX3RhYmxlcyk7CisKKy8qCisgKiBDYWNoZSBhIHBhcnNlIHJlc3VsdCBmb3IgYSBxdWVy eS4KKyAqIGhhc2g6IGhhc2ggb2Ygbm9ybWFsaXplZCBxdWVyeQorICogaXNfd3JpdGU6IHRydWUg aWYgcXVlcnkgaXMgYSB3cml0ZQorICogdGFibGVfbmFtZXM6IGFycmF5IG9mIHRhYmxlIG5hbWVz CisgKiBudW1fdGFibGVzOiBudW1iZXIgb2YgdGFibGVzCisgKi8KK2V4dGVybiB2b2lkIHBvb2xf dHJhY2tfdGFibGVfbXV0YXRpb25fY2FjaGVfcGFyc2UodWludDY0IGhhc2gsIGJvb2wgaXNfd3Jp dGUsCisJCQkJCQkJCQkJY29uc3QgY2hhciB0YWJsZV9uYW1lc1tdW1RSQUNLX1RBQkxFX01VVEFU SU9OX1RBQkxFX05BTUVfTEVOXSwKKwkJCQkJCQkJCQlpbnQgbnVtX3RhYmxlcyk7CisKKy8qCisg KiBOb3JtYWxpemUgYSBxdWVyeSBhbmQgY29tcHV0ZSBpdHMgaGFzaC4KKyAqIFN0cmlwcyBjb21t ZW50cywgbm9ybWFsaXplcyB3aGl0ZXNwYWNlIGFuZCBsaXRlcmFscy4KKyAqIHF1ZXJ5OiBpbnB1 dCBTUUwgcXVlcnkgc3RyaW5nCisgKiBSZXR1cm5zOiA2NC1iaXQgaGFzaCBvZiBub3JtYWxpemVk IHF1ZXJ5CisgKi8KK2V4dGVybiB1aW50NjQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9ub3Jt YWxpemVfYW5kX2hhc2goY29uc3QgY2hhciAqcXVlcnkpOworCisvKgorICogQ2FsY3VsYXRlIHJl cXVpcmVkIHNoYXJlZCBtZW1vcnkgc2l6ZSBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24uCisgKi8K K2V4dGVybiBTaXplIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6ZSh2b2lkKTsK KworI2VuZGlmIC8qIFBPT0xfVFJBQ0tfVEFCTEVfTVVUQVRJT05fSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL21haW4vcGdwb29sX21haW4uYyBiL3NyYy9tYWluL3BncG9vbF9tYWluLmMKaW5kZXggZmEw NWUxNWU3YWM0MzVlMDcyMjk4MDYzZjkxOGM3MGFhNGU1NjgwYy4uYjg4YjA0NzhjYjE1MGY4OWJk OWI2YjhhYjM4ZGIwZDY5MTJmZGRkMCAxMDA2NDQKLS0tIGEvc3JjL21haW4vcGdwb29sX21haW4u YworKysgYi9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVk ZSAiYXV0aC9wb29sX3Bhc3N3ZC5oIgogI2luY2x1ZGUgImF1dGgvcG9vbF9oYmEuaCIKICNpbmNs dWRlICJxdWVyeV9jYWNoZS9wb29sX21lbXFjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xf dHJhY2tfdGFibGVfbXV0YXRpb24uaCIKICNpbmNsdWRlICJ3YXRjaGRvZy93ZF9pbnRlcm5hbF9j b21tYW5kcy5oIgogI2luY2x1ZGUgIndhdGNoZG9nL3dkX2xpZmVjaGVjay5oIgogI2luY2x1ZGUg IndhdGNoZG9nL3dhdGNoZG9nLmgiCkBAIC0xNDg1LDExICsxNDg2LDE0IEBAIHNpZ3VzcjFfaW50 ZXJydXB0X3Byb2Nlc3Nvcih2b2lkKQogCiAJaWYgKHVzZXIxU2lnbmFsU2xvdC0+c2lnbmFsRmxh Z3NbU0lHX1dBVENIRE9HX1NUQVRFX0NIQU5HRURdKQogCXsKKwkJV0RfU1RBVEVTCXdkX3N0YXRl OworCiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJtc2coIlBncG9vbC1JSSBwYXJlbnQgcHJvY2Vz cyByZWNlaXZlZCB3YXRjaGRvZyBzdGF0ZSBjaGFuZ2Ugc2lnbmFsIGZyb20gd2F0Y2hkb2ciKSkp OwogCiAJCXVzZXIxU2lnbmFsU2xvdC0+c2lnbmFsRmxhZ3NbU0lHX1dBVENIRE9HX1NUQVRFX0NI QU5HRURdID0gZmFsc2U7Ci0JCWlmICh3ZF9pbnRlcm5hbF9nZXRfd2F0Y2hkb2dfbG9jYWxfbm9k ZV9zdGF0ZSgpID09IFdEX1NUQU5EQlkpCisJCXdkX3N0YXRlID0gd2RfaW50ZXJuYWxfZ2V0X3dh dGNoZG9nX2xvY2FsX25vZGVfc3RhdGUoKTsKKwkJaWYgKHdkX3N0YXRlID09IFdEX1NUQU5EQlkp CiAJCXsKIAkJCWVyZXBvcnQoTE9HLAogCQkJCQkoZXJybXNnKCJ3ZSBoYXZlIGpvaW5lZCB0aGUg d2F0Y2hkb2cgY2x1c3RlciBhcyBTVEFOREJZIG5vZGUiKSwKQEAgLTE1MDMsNiArMTUwNywxMCBA QCBzaWd1c3IxX2ludGVycnVwdF9wcm9jZXNzb3Iodm9pZCkKIAkJCSAqLwogCQkJcG9vbF9yZWxl YXNlX2ZvbGxvd19wcmltYXJ5X2xvY2sodHJ1ZSk7CiAJCX0KKwkJZWxzZSBpZiAod2Rfc3RhdGUg PT0gV0RfQ09PUkRJTkFUT1IgJiYgcG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29u X3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJCXsKKwkJCXBvb2xfdHJhY2tf dGFibGVfbXV0YXRpb25fdHJpZ2dlcl9nbG9iYWxfY29sZF9zdGFydCgpOworCQl9CiAJfQogCWlm ICh1c2VyMVNpZ25hbFNsb3QtPnNpZ25hbEZsYWdzW1NJR19GQUlMT1ZFUl9JTlRFUlJVUFRdKQog CXsKQEAgLTMwNjgsNiArMzA3NiwxMiBAQCBpbml0aWFsaXplX3NoYXJlZF9tZW1fb2JqZWN0cyhi b29sIGNsZWFyX21lbWNhY2hlX29pZG1hcHMpCiAJCWVsb2coREVCVUcxLCAid2F0Y2hkb2c6ICV6 dSBieXRlcyByZXF1ZXN0ZWQgZm9yIHNoYXJlZCBtZW1vcnkiLCBNQVhBTElHTih3ZF9pcGNfZ2V0 X3NoYXJlZF9tZW1fc2l6ZSgpKSk7CiAJfQogCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xv YWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCXsKKwkJ c2l6ZSArPSBNQVhBTElHTihwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtX3NpemUoKSk7 CisJCWVsb2coREVCVUcxLCAidHJhY2tfdGFibGVfbXV0YXRpb246ICV6dSBieXRlcyByZXF1ZXN0 ZWQgZm9yIHNoYXJlZCBtZW1vcnkiLCBNQVhBTElHTihwb29sX3RyYWNrX3RhYmxlX211dGF0aW9u X3NobWVtX3NpemUoKSkpOworCX0KKwogCWluaXRpYWxpemVfc2hhcmVkX21lbW9yeV9tYWluX3Nl Z21lbnQoc2l6ZSk7CiAKIAkvKiBNb3ZlIHRoZSBiYWNrZW5kIGRlc2NyaXB0b3JzIHRvIHNoYXJl ZCBtZW1vcnkgKi8KQEAgLTMxODQsNiArMzE5OCwxMiBAQCBpbml0aWFsaXplX3NoYXJlZF9tZW1f b2JqZWN0cyhib29sIGNsZWFyX21lbWNhY2hlX29pZG1hcHMpCiAJCXdkX2lwY19pbml0aWFsaXpl X2RhdGEoKTsKIAl9CiAKKwkvKiBJbml0aWFsaXplIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZvciB0 cmFja2luZyByZWNlbnRseSB3cml0dGVuIHRhYmxlcyAqLworCWlmIChwb29sX2NvbmZpZy0+ZGlz YWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkK Kwl7CisJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25faW5pdCgpOworCX0KKwogfQogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL3Byb3RvY29sL0NvbW1hbmRDb21wbGV0ZS5jIGIvc3JjL3Byb3RvY29s L0NvbW1hbmRDb21wbGV0ZS5jCmluZGV4IGEzYjhmMGVhMTk0ZmZlY2M3OWU1ODU2NmJlODA1NjJh NDZlYjc1YWIuLmIxNWRiNTMyNDg0MzNjYjMxMTIyNDYyNzRlZDc3MWI3OWFiZTEzOTIgMTAwNjQ0 Ci0tLSBhL3NyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxldGUuYworKysgYi9zcmMvcHJvdG9jb2wv Q29tbWFuZENvbXBsZXRlLmMKQEAgLTM4LDYgKzM4LDggQEAKICNpbmNsdWRlICJ1dGlscy9wYWxs b2MuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Bvb2xf c3RyZWFtLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oIgor I2luY2x1ZGUgInF1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmgiCiAKIHN0YXRpYyBpbnQJZXh0 cmFjdF9udHVwbGVzKGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIFBPT0xfU1RBVFVTIGhhbmRsZV9t aXNtYXRjaF90dXBsZXMoUE9PTF9DT05ORUNUSU9OICpmcm9udGVuZCwgUE9PTF9DT05ORUNUSU9O X1BPT0wgKmJhY2tlbmQsIGNoYXIgKnBhY2tldCwgaW50IHBhY2tldGxlbiwgYm9vbCBjb21tYW5k X2NvbXBsZXRlKTsKQEAgLTMwNCw2ICszMDYsMjkgQEAgaGFuZGxlX3F1ZXJ5X2NvbnRleHQoUE9P TF9DT05ORUNUSU9OX1BPT0wgKmJhY2tlbmQpCiAKIAlub2RlID0gc2Vzc2lvbl9jb250ZXh0LT5x dWVyeV9jb250ZXh0LT5wYXJzZV90cmVlOwogCisJLyoKKwkgKiBUcmFjayB0YWJsZSB3cml0ZXMg Zm9yIGRtbF9hZGFwdGl2ZV9nbG9iYWwgZmVhdHVyZS4KKwkgKiBGb3IgYXV0b2NvbW1pdCBzdGF0 ZW1lbnRzIChub3QgaW4gZXhwbGljaXQgdHJhbnNhY3Rpb24pLCBtYXJrIHRhYmxlcworCSAqIGlt bWVkaWF0ZWx5LiBGb3IgZXhwbGljaXQgdHJhbnNhY3Rpb25zLCBtYXJraW5nIGlzIGRlZmVycmVk IHRvIENPTU1JVAorCSAqIGluIGRtbF9hZGFwdGl2ZSgpIHNvIHRoYXQgUk9MTEJBQ0tlZCB3cml0 ZXMgZG9uJ3QgcG9sbHV0ZSB0aGUgc2hhcmVkCisJICogbWVtb3J5IHRhYmxlIG1hcC4KKwkgKi8K KwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9X X0RNTF9BREFQVElWRV9HTE9CQUwgJiYKKwkJbm9kZSAhPSBOVUxMICYmICFzZXNzaW9uX2NvbnRl eHQtPmlzX2luX3RyYW5zYWN0aW9uKQorCXsKKwkJaW50CQkgICAqb2lkczsKKwkJaW50CQkJbnVt X29pZHM7CisKKwkJbnVtX29pZHMgPSBwb29sX2V4dHJhY3RfdGFibGVfb2lkcyhub2RlLCAmb2lk cyk7CisJCWlmIChudW1fb2lkcyA+IDApCisJCXsKKwkJCWludAkJCWRib2lkID0gcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisKKwkJCWlmIChkYm9pZCA+IDAp CisJCQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlc193cml0dGVuKG9pZHMs IG51bV9vaWRzLCBkYm9pZCk7CisJCX0KKwl9CisKIAlpZiAoSXNBKG5vZGUsIFByZXBhcmVTdG10 KSkKIAl7CiAJCWlmIChzZXNzaW9uX2NvbnRleHQtPnVuY29tcGxldGVkX21lc3NhZ2UpCmRpZmYg LS1naXQgYS9zcmMvcHJvdG9jb2wvY2hpbGQuYyBiL3NyYy9wcm90b2NvbC9jaGlsZC5jCmluZGV4 IGMzNGYwNTcyODFiZTYyZmVhZjM5ZGIxYmI2MDUwNjJmNTZkYzM5OGMuLmQ1M2Y1NzE0MjE5Njhi ZDc4OWQwYjU1Zjk3ZTBhMWViNjhhODEzZTUgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90b2NvbC9jaGls ZC5jCisrKyBiL3NyYy9wcm90b2NvbC9jaGlsZC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVk ZSAidXRpbHMvZWxvZy5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgogI2luY2x1ZGUg InV0aWxzL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0 YXRpb24uaCIKIAogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9wcm9jZXNzX2NvbnRleHQuaCIKICNp bmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmgiCkBAIC0yMTMsNiArMjE0LDEy IEBAIGRvX2NoaWxkKGludCAqZmRzKQogCS8qIEluaXRpYWxpemUgcGVyIHByb2Nlc3MgY29udGV4 dCAqLwogCXBvb2xfaW5pdF9wcm9jZXNzX2NvbnRleHQoKTsKIAorCS8qIEluaXRpYWxpemUgdHJh Y2sgdGFibGUgbXV0YXRpb24gY2hpbGQgc3RhdGUgZm9yIGNvbGQgc3RhcnQgdHJhY2tpbmcgKi8K KwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9X X0RNTF9BREFQVElWRV9HTE9CQUwpCisJeworCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2No aWxkX2luaXQoKTsKKwl9CisKIAkvKiBpbml0aWFsaXplIGNvbm5lY3Rpb24gcG9vbCAqLwogCWlm IChwb29sX2luaXRfY3AoKSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvcG9vbF9wcm90 b19tb2R1bGVzLmMgYi9zcmMvcHJvdG9jb2wvcG9vbF9wcm90b19tb2R1bGVzLmMKaW5kZXggNDdi NWM4Zjk4YTViNGM5MmQ2NzU4NDBlZWE4OGY3ZTAzYmIxOGI0Yy4uNzVmYzc1MDg0ODBkNzlhYWNj MjgxZGQ1ZTYyNGY5ZTM0YTk5ODgzMyAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvY29sL3Bvb2xfcHJv dG9fbW9kdWxlcy5jCisrKyBiL3NyYy9wcm90b2NvbC9wb29sX3Byb3RvX21vZHVsZXMuYwpAQCAt MTQ2MSw3ICsxNDYxLDcgQEAgUGFyc2UoUE9PTF9DT05ORUNUSU9OICpmcm9udGVuZCwgUE9PTF9D T05ORUNUSU9OX1BPT0wgKmJhY2tlbmQsCiAJCXBvb2xfd2hlcmVfdG9fc2VuZChxdWVyeV9jb250 ZXh0LCBxdWVyeV9jb250ZXh0LT5vcmlnaW5hbF9xdWVyeSwKIAkJCQkJCSAgIHF1ZXJ5X2NvbnRl eHQtPnBhcnNlX3RyZWUpOwogCi0JCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFu Y2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmIHN0cmxlbihuYW1lKSAhPSAwKQor CQlpZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFs YW5jZV9vbl93cml0ZSkgJiYgc3RybGVuKG5hbWUpICE9IDApCiAJCQlwb29sX3NldGFsbF9ub2Rl X3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCk7CiAKIAkJaWYgKFJFUExJQ0FUSU9OKQpAQCAtMTgw NCw3ICsxODA0LDcgQEAgQmluZChQT09MX0NPTk5FQ1RJT04gKmZyb250ZW5kLCBQT09MX0NPTk5F Q1RJT05fUE9PTCAqYmFja2VuZCwKIAkJCXJldHVybiBQT09MX0VORDsKIAl9CiAKLQlpZiAocG9v bF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQ VElWRSAmJgorCWlmIChETEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWctPmRpc2FibGVf bG9hZF9iYWxhbmNlX29uX3dyaXRlKSAmJgogCQlUU1RBVEUoYmFja2VuZCwgTUFJTl9SRVBMSUNB ID8gUFJJTUFSWV9OT0RFX0lEIDogUkVBTF9NQUlOX05PREVfSUQpID09ICdUJykKIAl7CiAJCXBv b2xfd2hlcmVfdG9fc2VuZChxdWVyeV9jb250ZXh0LCBxdWVyeV9jb250ZXh0LT5vcmlnaW5hbF9x dWVyeSwKZGlmZiAtLWdpdCBhL3NyYy9xdWVyeV9jYWNoZS9wb29sX21lbXFjYWNoZS5jIGIvc3Jj L3F1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmMKaW5kZXggZjM4ZjcxMTQ2OTU3NjM0MmNlNTk0 NjliMDg1Yzk3MzY1MTE2MDA0Yy4uZGNhOTMzMzRlOWU0N2JiNzk3ODA2NGVkZWNlNWNhMGU0MDAy MWNlMyAxMDA2NDQKLS0tIGEvc3JjL3F1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmMKKysrIGIv c3JjL3F1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmMKQEAgLTEzMDUsNiArMTMwNSwxMiBAQCBw b29sX2V4dHJhY3RfdGFibGVfb2lkcyhOb2RlICpub2RlLCBpbnQgKipvaWRzcCkKIAkJfQogCQly ZXR1cm4gbnVtX29pZHM7CiAJfQorCWVsc2UgaWYgKElzQShub2RlLCBNZXJnZVN0bXQpKQorCXsK KwkJTWVyZ2VTdG10ICAqc3RtdCA9IChNZXJnZVN0bXQgKikgbm9kZTsKKworCQl0YWJsZSA9IG1h a2VfdGFibGVfbmFtZV9mcm9tX3JhbmdldmFyKHN0bXQtPnJlbGF0aW9uKTsKKwl9CiAJZWxzZSBp ZiAoSXNBKG5vZGUsIEV4cGxhaW5TdG10KSkKIAl7CiAJCUxpc3RDZWxsICAgKmNlbGw7CmRpZmYg LS1naXQgYS9zcmMvc2FtcGxlL3BncG9vbC5jb25mLnNhbXBsZS1zdHJlYW0gYi9zcmMvc2FtcGxl L3BncG9vbC5jb25mLnNhbXBsZS1zdHJlYW0KaW5kZXggNDU0ZmRiOWU1ZDFmZDY1NDM3YjZhNjdm MTJhYjYyNjU4ZWEwOGY0OS4uZGU5OWE3YTk3YmE0YTFhMDNjYjNkNTU4OWQ1NWVhNjFjYjZlNTFm YSAxMDA2NDQKLS0tIGEvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtCisrKyBi L3NyYy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbQpAQCAtNDc4LDYgKzQ3OCwxNCBA QCBiYWNrZW5kX2NsdXN0ZXJpbmdfbW9kZSA9IHN0cmVhbWluZ19yZXBsaWNhdGlvbgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBtb2RpZmllZCB3aXRoaW4gdGhlIGN1 cnJlbnQgZXhwbGljaXQgdHJhbnNhY3Rpb24gd2lsbAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjICAgICBub3QgYmUgbG9hZCBiYWxhbmNlZCB1bnRpbCB0aGUgZW5kIG9mIHRo ZSB0cmFuc2FjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRtbF9hZGFwdGl2ZV9nbG9iYWw6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIFN1cGVyc2V0IG9mIGRtbF9h ZGFwdGl2ZS4gSW4gYWRkaXRpb24gdG8gcGVyLXRyYW5zYWN0aW9uCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgICAgIHRyYWNraW5nLCB1c2VzIHNoYXJlZCBtZW1vcnkgdG8g dHJhY2sgcmVjZW50bHkgd3JpdHRlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjICAgICB0YWJsZXMgYWNyb3NzIGFsbCBzZXNzaW9ucy4gUmVhZHMgZnJvbSByZWNlbnRseSB3 cml0dGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIHRhYmxlcyBh cmUgcm91dGVkIHRvIHByaW1hcnkgdW50aWwgYSBUVEwgKGJhc2VkIG9uCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgICAgIHJlcGxpY2F0aW9uIGRlbGF5KSBleHBpcmVzLiBS ZXF1aXJlcyBhZGRpdGlvbmFsIHNoYXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjICAgICBtZW1vcnkuIFNlZSB0cmFja190YWJsZV9tdXRhdGlvbl8qIHBhcmFtZXRlcnMg YmVsb3cuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHdheXM6CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgICAgIGlmIGEgd3JpdGUgcXVlcnkgaXMgaXNzdWVkLCByZWFkIHF1ZXJp ZXMgd2lsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3QgYmUg bG9hZCBiYWxhbmNlZCB1bnRpbCB0aGUgc2Vzc2lvbiBlbmRzLgpAQCAtNDk5LDYgKzUwNyw0NiBA QCBiYWNrZW5kX2NsdXN0ZXJpbmdfbW9kZSA9IHN0cmVhbWluZ19yZXBsaWNhdGlvbgogI3N0YXRl bWVudF9sZXZlbF9sb2FkX2JhbGFuY2UgPSBvZmYKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBFbmFibGVzIHN0YXRlbWVudCBsZXZlbCBsb2FkIGJhbGFuY2luZwogCisjIC0g VHJhY2sgVGFibGUgTXV0YXRpb24gKHVzZWQgYnkgZG1sX2FkYXB0aXZlX2dsb2JhbCkgLQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdBUk5JTkc6IGRtbF9hZGFwdGl2ZV9n bG9iYWwgaW5jcmVhc2VzIHNoYXJlZCBtZW1vcnkgdXNhZ2UKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBEZWZhdWx0IHNldHRpbmdzIHJlcXVpcmUgfjYuNCBNQiBzaGFyZWQg bWVtb3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKDAuMSBNQiB0YWJs ZSB0cmFja2luZyArIDYuMyBNQiBxdWVyeSBjYWNoZSkKKworI3RyYWNrX3RhYmxlX211dGF0aW9u X3R0bF9mYWN0b3IgPSA1LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBU VEwgbXVsdGlwbGllcjogVFRMID0gcmVwbGljYXRpb25fZGVsYXkgKiBmYWN0b3IKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIaWdoZXIgdmFsdWVzIHByb3ZpZGUgbW9yZSBz YWZldHkgbWFyZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6 IDEuMC0xMDAuMCAoZGVmYXVsdDogNS4wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVsb2FkKQorCisjdHJhY2tfdGFibGVfbXV0YXRpb25f Y29sZF9zdGFydF9kdXJhdGlvbiA9IDIwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyBEdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdG8gcm91dGUgYWxsIHF1ZXJpZXMgdG8g cHJpbWFyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFmdGVyIGNoaWxk IHByb2Nlc3Mgc3RhcnRzIChjb2xkIHN0YXJ0IHBlcmlvZCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBSYW5nZTogMC02MDAwMCBtcyAoZGVmYXVsdDogMjAwMCBtcyA9IDIg c2Vjb25kcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTZXQgdG8gMCB0 byBkaXNhYmxlIGNvbGQgc3RhcnQgYmVoYXZpb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlbG9hZCkKKworI3RyYWNrX3RhYmxlX211dGF0 aW9uX3RhYmxlX2J1Y2tldHMgPSAxMDI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIaWdoZXIgdmFsdWVzIHJlZHVjZSBo YXNoIGNvbGxpc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5n ZTogNjQtNjU1MzYgKGRlZmF1bHQ6IDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQorCisjdHJhY2tfdGFibGVfbXV0YXRp b25fdGFibGVfc2l6ZSA9IDIwNDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBNYXhpbXVtIG51bWJlciBvZiB0YWJsZXMgdG8gdHJhY2sgc2ltdWx0YW5lb3VzbHkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMTI4LTEzMTA3MiAoZGVmYXVs dDogMjA0OCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJl cXVpcmVzIHJlc3RhcnQpCisKKyN0cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzID0g MjA0OAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE51bWJlciBvZiBoYXNo IGJ1Y2tldHMgZm9yIHF1ZXJ5IHBhcnNlIGNhY2hlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgUmFuZ2U6IDY0LTY1NTM2IChkZWZhdWx0OiAyMDQ4KQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKworI3Ry YWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemUgPSAxMDAwMAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1heGltdW0gbnVtYmVyIG9mIHF1ZXJ5IHBh cnNlIHJlc3VsdHMgdG8gY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBSYW5nZTogMTAwLTEwMDAwMDAgKGRlZmF1bHQ6IDEwMDAwKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIE1lbW9yeSB1c2FnZTogfjY0MCBieXRlcyBwZXIgZW50cnkgKH42 LjMgTUIgZGVmYXVsdCwgfjY0IE1CIGZvciAxMDAwMDApCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQorCiAjLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAjIFNUUkVBTUlORyBSRVBMSUNBVElPTiBNT0RFCiAjLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2Vy X2NoaWxkLmMgYi9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmMK aW5kZXggMzExYjYzODY1OGU2NmViYjU2MTYyYWQ5ZmE0MzkyMzE1YjJkZjY0ZS4uMzQ3Zjg4YTg4 Njg4MzA5YjI5ODMxMWEyODJmZTFjMWVmMmFhMGY3MyAxMDA2NDQKLS0tIGEvc3JjL3N0cmVhbWlu Z19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jCisrKyBiL3NyYy9zdHJlYW1pbmdfcmVw bGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYwpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUg InV0aWxzL3Bvb2xfaXAuaCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIKICNpbmNsdWRl ICJ1dGlscy9wb29sX3N0cmVhbS5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfdHJhY2tfdGFibGVf bXV0YXRpb24uaCIKIAogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9wcm9jZXNzX2NvbnRleHQuaCIK ICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmgiCkBAIC02OTUsNiArNjk2 LDcgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWdfd2l0aF9jbWQodm9pZCkKIAlkb3VibGUJ CWRlbGF5X21zOwogCXVpbnQ2NAkJZGVsYXk7CiAJdWludDY0CQlkZWxheV90aHJlc2hvbGRfYnlf dGltZTsKKwl1aW50NjQJCW1heF9kZWxheV91cyA9IDA7CS8qIFRyYWNrIG1heGltdW0gZGVsYXkg Zm9yIHRhYmxlIG11dGF0aW9uIG1hcCAqLwogCWludAkJCXRva2VuX2NvdW50ID0gMDsKIAlpbnQJ CQlwcmltYXJ5X25vZGVfaWQ7CiAJaW50CQkJc2F2ZV9lcnJubzsKQEAgLTEwMDMsNiArMTAwNSwx MCBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1lX2xhZ193aXRoX2NtZCh2b2lkKQogCQkJYmtpbmZv LT5zdGFuZGJ5X2RlbGF5ID0gZGVsYXk7CiAJCQlia2luZm8tPnN0YW5kYnlfZGVsYXlfYnlfdGlt ZSA9IHRydWU7CiAKKwkJCS8qIFRyYWNrIG1heGltdW0gZGVsYXkgZm9yIHRhYmxlIG11dGF0aW9u IG1hcCBUVEwgY2FsY3VsYXRpb24gKi8KKwkJCWlmIChkZWxheSA+IG1heF9kZWxheV91cykKKwkJ CQltYXhfZGVsYXlfdXMgPSBkZWxheTsKKwogCQkJLyoKIAkJCSAqIExvZyBkZWxheSBpZiBuZWNl c3NhcnkuIHRocmVzaG9sZCBpcyBpbiBtaWxsaXNlY29uZHMsIGNvbnZlcnQKIAkJCSAqIHRvIG1p Y3Jvc2Vjb25kcy4KQEAgLTEwMjEsNiArMTAyNywxMCBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1l X2xhZ193aXRoX2NtZCh2b2lkKQogCQkJdG9rZW4gPSBzdHJ0b2tfcihOVUxMLCAiIFx0XG4iLCAm c2F2ZXB0cik7CiAJCX0KIAorCQkvKiBVcGRhdGUgdHJhY2sgdGFibGUgbXV0YXRpb24gVFRMIGJh c2VkIG9uIG1heGltdW0gb2JzZXJ2ZWQgZGVsYXkgKi8KKwkJaWYgKHBvb2xfY29uZmlnLT5kaXNh YmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMICYm IG1heF9kZWxheV91cyA+IDApCisJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3VwZGF0ZV90 dGwobWF4X2RlbGF5X3VzKTsKKwogCX0KIAlQR19DQVRDSCgpOwogCXsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQyLnRyYWNrX3RhYmxlX211dGF0aW9uL3Rlc3Quc2gg Yi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0Mi50cmFja190YWJsZV9tdXRhdGlvbi90ZXN0 LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLmVkZTU2YmQxOTY4NzExZmMxNWY0NTc4NGM2OTU4ZTEyYTRlNGU1ODkK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0Mi50cmFja190 YWJsZV9tdXRhdGlvbi90ZXN0LnNoCkBAIC0wLDAgKzEsMzUyIEBACisjIS91c3IvYmluL2VudiBi YXNoCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIyB0ZXN0IHNjcmlwdCBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24g ZmVhdHVyZSAoaW4tbWVtb3J5IHRhYmxlIHRyYWNraW5nKS4KKyMgVGVzdHMgcm91dGluZyBvZiBx dWVyaWVzIGJhc2VkIG9uIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzLgorIworc291cmNlICRURVNU TElCUworVEVTVERJUj10ZXN0ZGlyCitQU1FMPSRQR0JJTi9wc3FsCitQU1FMT1BUUz0iLWEgLXEg LVgiCitQR1BPT0xCSU49JFBHUE9PTF9JTlNUQUxMX0RJUi9iaW4KK2V4cG9ydCBQR0RBVEFCQVNF PXRlc3QKKworIyBPbmx5IHJ1biBpbiBzdHJlYW1pbmcgcmVwbGljYXRpb24gbW9kZSBzaW5jZSB0 aGF0J3MgdGhlIHRhcmdldCB1c2UgY2FzZQorZm9yIG1vZGUgaW4gcworZG8KKyAgICBybSAtZnIg JFRFU1RESVIKKyAgICBta2RpciAkVEVTVERJUgorICAgIGNkICRURVNURElSCisKKyAgICAjIENy ZWF0ZSB0ZXN0IGVudmlyb25tZW50IHdpdGggMiBub2RlcworICAgIGVjaG8gLW4gImNyZWF0aW5n IHRlc3QgZW52aXJvbm1lbnQuLi4iCisgICAgJFBHUE9PTF9TRVRVUCAtbSAkbW9kZSAtbiAyIHx8 IGV4aXQgMQorICAgIGVjaG8gImRvbmUuIgorCisgICAgc291cmNlIC4vYmFzaHJjLnBvcnRzCisK KyAgICAjIENvbmZpZ3VyZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlIHZpYSBkbWxfYWRh cHRpdmVfZ2xvYmFsCisgICAgZWNobyAiZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPSAn ZG1sX2FkYXB0aXZlX2dsb2JhbCciID4+IGV0Yy9wZ3Bvb2wuY29uZgorICAgIGVjaG8gInRyYWNr X3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3IgPSA1LjAiID4+IGV0Yy9wZ3Bvb2wuY29uZgorICAg IGVjaG8gInRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24gPSAyMDAwIiA+ PiBldGMvcGdwb29sLmNvbmYKKworICAgICMgRW5hYmxlIGxvYWQgYmFsYW5jaW5nIGV4cGxpY2l0 bHkKKyAgICBlY2hvICJsb2FkX2JhbGFuY2VfbW9kZSA9IG9uIiA+PiBldGMvcGdwb29sLmNvbmYK KworICAgICMgQ29uZmlndXJlIHdlaWdodHMgc28gd2UgY2FuIGRpc3Rpbmd1aXNoIHJvdXRpbmcK KyAgICAjIEJhY2tlbmQgMCAocHJpbWFyeSkgd2VpZ2h0PTAsIEJhY2tlbmQgMSAoc3RhbmRieSkg d2VpZ2h0PTEKKyAgICAjIFRoaXMgbWVhbnMgbG9hZCBiYWxhbmNlZCBxdWVyaWVzIGdvIHRvIG5v ZGUgMSBieSBkZWZhdWx0CisgICAgZWNobyAiYmFja2VuZF93ZWlnaHQwID0gMCIgPj4gZXRjL3Bn cG9vbC5jb25mCisgICAgZWNobyAiYmFja2VuZF93ZWlnaHQxID0gMSIgPj4gZXRjL3BncG9vbC5j b25mCisKKyAgICAjIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nIHRvIHNlZSByb3V0aW5nIGRlY2lzaW9u cworICAgIGVjaG8gImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiID4+IGV0Yy9wZ3Bvb2wuY29u ZgorCisgICAgLi9zdGFydGFsbAorCisgICAgZXhwb3J0IFBHUE9SVD0kUEdQT09MX1BPUlQKKwor ICAgIHdhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyAgICAjIENyZWF0ZSB0ZXN0IHRhYmxlcwor ICAgICRQU1FMIHRlc3QgPDxFT0YKK0NSRUFURSBUQUJMRSB0MShpIElOVEVHRVIpOworQ1JFQVRF IFRBQkxFIHQyKGkgSU5URUdFUik7CitDUkVBVEUgVEFCTEUgdDMoaSBJTlRFR0VSKTsKK0VPRgor CisgICAgZWNobyAiPT09IFRlc3QgMTogQ29sZCBTdGFydCBSb3V0aW5nID09PSIKKyAgICAjIER1 cmluZyBjb2xkIHN0YXJ0LCBhbGwgcXVlcmllcyBzaG91bGQgZ28gdG8gcHJpbWFyeQorICAgICMg UmVzdGFydCBwZ3Bvb2wgdG8gdHJpZ2dlciBjb2xkIHN0YXJ0CisgICAgLi9zaHV0ZG93bmFsbAor ICAgIC4vc3RhcnRhbGwKKyAgICB3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisgICAgIyBJbW1l ZGlhdGVseSBxdWVyeSAtIHNob3VsZCBnbyB0byBwcmltYXJ5IGR1ZSB0byBjb2xkIHN0YXJ0Cisg ICAgJFBTUUwgdGVzdCAtYyAiU0VMRUNUICdjb2xkX3N0YXJ0X3Rlc3QnIGFzIG1hcmtlciwgKiBG Uk9NIHQxOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBDaGVjayBsb2cgZm9yIGNvbGQgc3Rh cnQgbWVzc2FnZSAodXNlIC1hIHRvIGhhbmRsZSBiaW5hcnkgbG9nIGZpbGVzKQorICAgIGlmIGdy ZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSBt dXRhdGlvbiBjb2xkIHN0YXJ0IiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJU ZXN0IDEgUEFTU0VEOiBDb2xkIHN0YXJ0IHJvdXRpbmcgd29ya3MiCisgICAgZWxzZQorICAgICAg ICBlY2hvICJUZXN0IDEgRkFJTEVEOiBDb2xkIHN0YXJ0IHJvdXRpbmcgbm90IGRldGVjdGVkIgor ICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hv ICI9PT0gVGVzdCAyOiBXYWl0IGZvciBjb2xkIHN0YXJ0IHRvIGVuZCA9PT0iCisgICAgIyBXYWl0 IGZvciBjb2xkIHN0YXJ0IHBlcmlvZCB0byBlbmQgKDIgc2Vjb25kcykKKyAgICBzbGVlcCAzCisK KyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIE5vdyBh IGNsZWFuIHRhYmxlIHF1ZXJ5IHNob3VsZCBsb2FkIGJhbGFuY2UgKGdvIHRvIG5vZGUgMSkKKyAg ICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2FmdGVyX2NvbGRfc3RhcnQnIGFzIG1hcmtlciwgKiBG Uk9NIHQzOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBBZnRlciBjb2xkIHN0YXJ0LCBxdWVy aWVzIHRvIGNsZWFuIHRhYmxlcyBzaG91bGQgbG9hZCBiYWxhbmNlCisgICAgIyBDaGVjayB0aGF0 IGl0IGRpZCBOT1QgZ2V0IGZvcmNlZCB0byBwcmltYXJ5IGR1ZSB0byB0cmFjayB0YWJsZSBtdXRh dGlvbgorICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBv ZiB0cmFjayB0YWJsZSBtdXRhdGlvbiBjb2xkIHN0YXJ0IiBsb2cvcGdwb29sLmxvZzsgdGhlbgor ICAgICAgICBlY2hvICJUZXN0IDIgRkFJTEVEOiBTdGlsbCBpbiBjb2xkIHN0YXJ0IGFmdGVyIHdh aXRpbmciCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAg ICBlY2hvICJUZXN0IDIgUEFTU0VEOiBDb2xkIHN0YXJ0IGVuZGVkIGNvcnJlY3RseSIKKworICAg IGVjaG8gIj09PSBUZXN0IDM6IFdyaXRlLXRoZW4tUmVhZCBSb3V0aW5nID09PSIKKyAgICAjIENs ZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFdyaXRlIHRvIHQxIGFu ZCB0aGVuIHJlYWQgLSB1c2Ugc2luZ2xlIGNvbm5lY3Rpb24gdG8gZW5zdXJlIHNhbWUgc2Vzc2lv bgorICAgICRQU1FMIHRlc3QgPDxFT0YKK0lOU0VSVCBJTlRPIHQxIFZBTFVFUyAoMSk7CitTRUxF Q1QgJ3dyaXRlX3JlYWRfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdDE7CitFT0YKKworICAgICMg U21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAg ICAjIENoZWNrIGxvZyBmb3IgdGFibGUgc3RhbGVuZXNzIG1lc3NhZ2UKKyAgICBpZiBncmVwIC1h IC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3 cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDMgUEFTU0VE OiBXcml0ZS10aGVuLXJlYWQgcm91dGluZyB3b3JrcyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8g IlRlc3QgMyBGQUlMRUQ6IFRhYmxlIHN0YWxlbmVzcyBub3QgZGV0ZWN0ZWQgYWZ0ZXIgd3JpdGUi CisgICAgICAgICMgU2hvdyByZWxldmFudCBsb2cgZW50cmllcyBmb3IgZGVidWdnaW5nCisgICAg ICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRh aWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKwor ICAgIGVjaG8gIj09PSBUZXN0IDQ6IENsZWFuIFRhYmxlIFN0aWxsIExvYWQgQmFsYW5jZXMgPT09 IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgUmVh ZCBmcm9tIHQyIChuZXZlciB3cml0dGVuIHRvKSAtIHNob3VsZCBsb2FkIGJhbGFuY2UKKyAgICAk UFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2NsZWFuX3RhYmxlX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9N IHQyOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBTaG91bGQgTk9UIHNlZSB0cmFjayB0YWJs ZSBtdXRhdGlvbiBibG9ja2luZyBtZXNzYWdlIGZvciB0MgorICAgIGlmIGdyZXAgLWEgLXEgImNv dWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qdDIuKndhcyByZWNlbnRseSB3cml0 dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDQgRkFJTEVEOiBD bGVhbiB0YWJsZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgc3RhbGUiCisgICAgICAgIC4vc2h1dGRv d25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBlY2hvICJUZXN0IDQgUEFTU0VEOiBD bGVhbiB0YWJsZXMgc3RpbGwgbG9hZCBiYWxhbmNlIgorCisgICAgZWNobyAiPT09IFRlc3QgNTog VVBEQVRFIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAg ICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFVwZGF0ZSB0MiBhbmQgdGhlbiByZWFkIC0gdXNl IHNpbmdsZSBjb25uZWN0aW9uCisgICAgJFBTUUwgdGVzdCA8PEVPRgorVVBEQVRFIHQyIFNFVCBp ID0gOTk5IFdIRVJFIGkgPSAwOworU0VMRUNUICd1cGRhdGVfdGVzdCcgYXMgbWFya2VyLCAqIEZS T00gdDI7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVk CisgICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxh bmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsg dGhlbgorICAgICAgICBlY2hvICJUZXN0IDUgUEFTU0VEOiBVUERBVEUgbWFya3MgdGFibGUgYXMg c3RhbGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDUgRkFJTEVEOiBVUERBVEUgZGlk IG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAg IGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA2OiBERUxFVEUgTWFya3MgVGFi bGUgYXMgU3RhbGUgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5s b2cKKworICAgICMgRGVsZXRlIGZyb20gdDMgYW5kIHRoZW4gcmVhZCAtIHVzZSBzaW5nbGUgY29u bmVjdGlvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK0RFTEVURSBGUk9NIHQzIFdIRVJFIGkgPSAw OworU0VMRUNUICdkZWxldGVfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdDM7CitFT0YKKworICAg ICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisK KyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUu KndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hv ICJUZXN0IDYgUEFTU0VEOiBERUxFVEUgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQor ICAgICAgICBlY2hvICJUZXN0IDYgRkFJTEVEOiBERUxFVEUgZGlkIG5vdCBtYXJrIHRhYmxlIGFz IHN0YWxlIgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisK KyAgICBlY2hvICI9PT0gVGVzdCA3OiBUUlVOQ0FURSBNYXJrcyBUYWJsZSBhcyBTdGFsZSA9PT0i CisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBDcmVh dGUgYSBmcmVzaCB0YWJsZSBmb3IgVFJVTkNBVEUgdGVzdAorICAgICRQU1FMIHRlc3QgLWMgIkNS RUFURSBUQUJMRSB0X3RydW5jYXRlKGkgSU5URUdFUik7IiA+IC9kZXYvbnVsbCAyPiYxCisgICAg JFBTUUwgdGVzdCAtYyAiSU5TRVJUIElOVE8gdF90cnVuY2F0ZSBWQUxVRVMgKDEpLCAoMiksICgz KTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgV2FpdCBmb3IgYW55IFRUTCB0byBleHBpcmUK KyAgICBzbGVlcCAzCisKKyAgICAjIENsZWFyIHRoZSBsb2cgYWdhaW4KKyAgICA+IGxvZy9wZ3Bv b2wubG9nCisKKyAgICAjIFRydW5jYXRlIGFuZCB0aGVuIHJlYWQgLSB1c2Ugc2luZ2xlIGNvbm5l Y3Rpb24KKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitUUlVOQ0FURSB0X3RydW5jYXRlOworU0VMRUNU ICd0cnVuY2F0ZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0X3RydW5jYXRlOworRU9GCisKKyAg ICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNsZWVwIDAuNQor CisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxl Lip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNo byAiVGVzdCA3IFBBU1NFRDogVFJVTkNBVEUgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxz ZQorICAgICAgICBlY2hvICJUZXN0IDcgRkFJTEVEOiBUUlVOQ0FURSBkaWQgbm90IG1hcmsgdGFi bGUgYXMgc3RhbGUiCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9uIiBs b2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAg ZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDg6IFdJVEggQ2xhdXNlIChDVEUg d2l0aCBERUxFVEUpIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENsZWFyIHRoZSBs b2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIENyZWF0ZSBhIGZyZXNoIHRhYmxlIGZv ciBXSVRIIHRlc3QKKyAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9jdGUoaSBJTlRF R0VSKTsiID4gL2Rldi9udWxsIDI+JjEKKyAgICAkUFNRTCB0ZXN0IC1jICJJTlNFUlQgSU5UTyB0 X2N0ZSBWQUxVRVMgKDEpLCAoMiksICgzKTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgV2Fp dCBmb3IgYW55IFRUTCB0byBleHBpcmUKKyAgICBzbGVlcCAzCisKKyAgICAjIENsZWFyIHRoZSBs b2cgYWdhaW4KKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFVzZSBXSVRIIGNsYXVzZSB3 aXRoIERFTEVURSwgdGhlbiByZWFkIGZyb20gdGhlIHRhYmxlCisgICAgJFBTUUwgdGVzdCA8PEVP RgorV0lUSCBkZWxldGVkIEFTIChERUxFVEUgRlJPTSB0X2N0ZSBXSEVSRSBpID0gMSBSRVRVUk5J TkcgKikKK1NFTEVDVCAqIEZST00gZGVsZXRlZDsKK1NFTEVDVCAnY3RlX3Rlc3QnIGFzIG1hcmtl ciwgKiBGUk9NIHRfY3RlOworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cg aXMgZmx1c2hlZAorICAgIHNsZWVwIDAuNQorCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90 IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3Bn cG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA4IFBBU1NFRDogV0lUSCBjbGF1c2Ug KENURSkgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0 IDggRkFJTEVEOiBXSVRIIGNsYXVzZSAoQ1RFKSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUi CisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9uIiBsb2cvcGdwb29sLmxv ZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAg ZmkKKworICAgICMgVGVzdCA5OiBNRVJHRSAoUG9zdGdyZVNRTCAxNSsgb25seSkKKyAgICBQR19N QUpPUl9WRVJTSU9OPSQoJFBTUUwgLXQgLWMgIlNFTEVDVCBzdWJzdHJpbmcodmVyc2lvbigpIGZy b20gJ1Bvc3RncmVTUUwgKFswLTldKyknKTsiIHwgdHIgLWQgJyAnKQorICAgIGlmIFsgIiRQR19N QUpPUl9WRVJTSU9OIiAtZ2UgMTUgXSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICI9 PT0gVGVzdCA5OiBNRVJHRSBNYXJrcyBUYWJsZSBhcyBTdGFsZSAoUG9zdGdyZVNRTCAkUEdfTUFK T1JfVkVSU0lPTikgPT09IgorICAgICAgICAjIENsZWFyIHRoZSBsb2cKKyAgICAgICAgPiBsb2cv cGdwb29sLmxvZworCisgICAgICAgICMgQ3JlYXRlIHRhYmxlcyBmb3IgTUVSR0UgdGVzdAorICAg ICAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9tZXJnZV90YXJnZXQoaWQgSU5URUdF UiBQUklNQVJZIEtFWSwgdmFsIFRFWFQpOyIgPiAvZGV2L251bGwgMj4mMQorICAgICAgICAkUFNR TCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9tZXJnZV9zb3VyY2UoaWQgSU5URUdFUiwgdmFsIFRF WFQpOyIgPiAvZGV2L251bGwgMj4mMQorICAgICAgICAkUFNRTCB0ZXN0IC1jICJJTlNFUlQgSU5U TyB0X21lcmdlX3RhcmdldCBWQUxVRVMgKDEsICdvbGQnKTsiID4gL2Rldi9udWxsIDI+JjEKKyAg ICAgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJUIElOVE8gdF9tZXJnZV9zb3VyY2UgVkFMVUVTICgx LCAnbmV3JyksICgyLCAnaW5zZXJ0Jyk7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAgICAgIyBX YWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAgICAgICBzbGVlcCAzCisKKyAgICAgICAgIyBD bGVhciB0aGUgbG9nIGFnYWluCisgICAgICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICAgICAj IFVzZSBNRVJHRSwgdGhlbiByZWFkIGZyb20gdGhlIHRhcmdldCB0YWJsZQorICAgICAgICAkUFNR TCB0ZXN0IDw8RU9GCitNRVJHRSBJTlRPIHRfbWVyZ2VfdGFyZ2V0IHQKK1VTSU5HIHRfbWVyZ2Vf c291cmNlIHMgT04gdC5pZCA9IHMuaWQKK1dIRU4gTUFUQ0hFRCBUSEVOIFVQREFURSBTRVQgdmFs ID0gcy52YWwKK1dIRU4gTk9UIE1BVENIRUQgVEhFTiBJTlNFUlQgVkFMVUVTIChzLmlkLCBzLnZh bCk7CitTRUxFQ1QgJ21lcmdlX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHRfbWVyZ2VfdGFyZ2V0 OworRU9GCisKKyAgICAgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQK KyAgICAgICAgc2xlZXAgMC41CisKKyAgICAgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxv YWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9v bC5sb2c7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIlRlc3QgOSBQQVNTRUQ6IE1FUkdFIG1hcmtz IHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICJUZXN0IDkg RkFJTEVEOiBNRVJHRSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAgICAgICBn cmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9vbC5sb2cgfCB0YWlsIC0y MAorICAgICAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICAgICAgZXhpdCAxCisgICAgICAg IGZpCisgICAgZWxzZQorICAgICAgICBlY2hvICI9PT0gVGVzdCA5OiBNRVJHRSBza2lwcGVkIChy ZXF1aXJlcyBQb3N0Z3JlU1FMIDE1KywgaGF2ZSAkUEdfTUFKT1JfVkVSU0lPTikgPT09IgorICAg IGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCAxMDogUk9MTEJBQ0sgRG9lcyBOT1QgTWFyayBUYWJs ZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDcmVhdGUgYSBmcmVzaCB0YWJsZSBmb3Igcm9sbGJhY2sg dGVzdAorICAgICRQU1FMIHRlc3QgLWMgIkNSRUFURSBUQUJMRSB0X3JvbGxiYWNrKGkgSU5URUdF Uik7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFdhaXQgZm9yIGFueSBUVEwgdG8gZXhwaXJl CisgICAgc2xlZXAgMworCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxv ZworCisgICAgIyBXcml0ZSBpbnNpZGUgYSB0cmFuc2FjdGlvbiwgdGhlbiByb2xsYmFjaworICAg ICRQU1FMIHRlc3QgPDxFT0YKK0JFR0lOOworSU5TRVJUIElOVE8gdF9yb2xsYmFjayBWQUxVRVMg KDEpOworUk9MTEJBQ0s7CitTRUxFQ1QgJ3JvbGxiYWNrX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9N IHRfcm9sbGJhY2s7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBm bHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICAjIFNob3VsZCBOT1Qgc2VlIHRfcm9sbGJhY2sg bWFya2VkIGFzIHN0YWxlIHNpbmNlIHRoZSB3cml0ZSB3YXMgcm9sbGVkIGJhY2sKKyAgICBpZiBn cmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKnRfcm9sbGJh Y2suKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBl Y2hvICJUZXN0IDEwIEZBSUxFRDogUm9sbGVkLWJhY2sgd3JpdGUgaW5jb3JyZWN0bHkgbWFya2Vk IHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlv biIgbG9nL3BncG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAuL3NodXRkb3duYWxsCisgICAg ICAgIGV4aXQgMQorICAgIGZpCisgICAgZWNobyAiVGVzdCAxMCBQQVNTRUQ6IFJPTExCQUNLIGRv ZXMgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisKKyAgICBlY2hvICI9PT0gVGVzdCAxMTogQ09N TUlUIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENyZWF0ZSBhIGZyZXNoIHRhYmxl IGZvciBjb21taXQgdGVzdAorICAgICRQU1FMIHRlc3QgLWMgIkNSRUFURSBUQUJMRSB0X2NvbW1p dChpIElOVEVHRVIpOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBXYWl0IGZvciBhbnkgVFRM IHRvIGV4cGlyZQorICAgIHNsZWVwIDMKKworICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9n L3BncG9vbC5sb2cKKworICAgICMgV3JpdGUgaW5zaWRlIGEgdHJhbnNhY3Rpb24sIHRoZW4gY29t bWl0LCB0aGVuIHJlYWQKKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitCRUdJTjsKK0lOU0VSVCBJTlRP IHRfY29tbWl0IFZBTFVFUyAoMSk7CitDT01NSVQ7CitTRUxFQ1QgJ2NvbW1pdF90ZXN0JyBhcyBt YXJrZXIsICogRlJPTSB0X2NvbW1pdDsKK0VPRgorCisgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1 cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAgIGlmIGdyZXAgLWEgLXEgImNv dWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4i IGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgMTEgUEFTU0VEOiBDT01N SVQgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDEx IEZBSUxFRDogQ29tbWl0dGVkIHdyaXRlIGRpZCBub3QgbWFyayB0YWJsZSBhcyBzdGFsZSIKKyAg ICAgICAgZ3JlcCAtYSAtaSAidHJhY2tfdGFibGVfbXV0YXRpb24iIGxvZy9wZ3Bvb2wubG9nIHwg dGFpbCAtMjAKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQor CisgICAgZWNobyAiIgorICAgIGVjaG8gIj09PSBBbGwgVHJhY2sgVGFibGUgTXV0YXRpb24gVGVz dHMgUEFTU0VEID09PSIKKworICAgIC4vc2h1dGRvd25hbGwKKworICAgIGNkIC4uCitkb25lCisK K2V4aXQgMApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDMudHJhY2tf dGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvLmdpdGlnbm9yZSBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24v dGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nLy5naXRpZ25vcmUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uZmNiOTNkMjdhN2U3ZThhNWVmZTZlYWNmYjBmODhmNmYzYzhiYzc2NQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0 aW9uX3dhdGNoZG9nLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACitsZWFkZXIKK3N0YW5kYnkK KyoucGlkCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0My50cmFja190 YWJsZV9tdXRhdGlvbl93YXRjaGRvZy9sZWFkZXIuY29uZiBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24v dGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL2xlYWRlci5jb25mCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAuLjk0NWNmZjk4NjBkMDM1N2ZiYjBlM2U5YTU2NDMxMjRkOTE2YmQ5YzMKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0My50cmFja190YWJsZV9tdXRh dGlvbl93YXRjaGRvZy9sZWFkZXIuY29uZgpAQCAtMCwwICsxLDI1IEBACisjIGxlYWRlciB3YXRj aGRvZyBjb25maWcgZm9yIHRyYWNrX3RhYmxlX211dGF0aW9uIHdhdGNoZG9nIHRlc3QKK3VzZV93 YXRjaGRvZyA9IG9uCit3ZF9pbnRlcnZhbCA9IDEKK3dkX3ByaW9yaXR5ID0gMgorCitob3N0bmFt ZTAgPSAnbG9jYWxob3N0Jword2RfcG9ydDAgPSAyMTAwNAorcGdwb29sX3BvcnQwID0gMTEwMDAK K2hvc3RuYW1lMSA9ICdsb2NhbGhvc3QnCit3ZF9wb3J0MSA9IDIxMTA0CitwZ3Bvb2xfcG9ydDEg PSAxMTEwMAorCitoZWFydGJlYXRfaG9zdG5hbWUwID0gJ2xvY2FsaG9zdCcKK2hlYXJ0YmVhdF9w b3J0MCA9IDIxMDA1CitoZWFydGJlYXRfaG9zdG5hbWUxID0gJ2xvY2FsaG9zdCcKK2hlYXJ0YmVh dF9wb3J0MSA9IDIxMTA1CisKK2VuYWJsZV9jb25zZW5zdXNfd2l0aF9oYWxmX3ZvdGVzID0gb24K KworIyBFbmFibGUgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZSB2aWEgZG1sX2FkYXB0aXZl X2dsb2JhbAorZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPSAnZG1sX2FkYXB0aXZlX2ds b2JhbCcKK3RyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24gPSAyMDAwCisK KyMgRW5hYmxlIGRlYnVnIGxvZ2dpbmcgdG8gc2VlIGZlYXR1cmUgbWVzc2FnZXMKK2xvZ19taW5f bWVzc2FnZXMgPSBkZWJ1ZzEKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMv MDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL3N0YW5kYnkuY29uZiBiL3NyYy90ZXN0 L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL3N0YW5k YnkuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi5hMTFjM2RmY2E0MjdjZjZiMjQ2NDUxZDA2N2MzMGIwMjU1Yjlj NGNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDMudHJh Y2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvc3RhbmRieS5jb25mCkBAIC0wLDAgKzEsMjcgQEAK KyMgc3RhbmRieSB3YXRjaGRvZyBjb25maWcgZm9yIHRyYWNrX3RhYmxlX211dGF0aW9uIHdhdGNo ZG9nIHRlc3QKK3BvcnQgPSAxMTEwMAorcGNwX3BvcnQgPSAxMTEwNQordXNlX3dhdGNoZG9nID0g b24KK3dkX2ludGVydmFsID0gMQord2RfcHJpb3JpdHkgPSAxCisKK2hvc3RuYW1lMCA9ICdsb2Nh bGhvc3QnCit3ZF9wb3J0MCA9IDIxMDA0CitwZ3Bvb2xfcG9ydDAgPSAxMTAwMAoraG9zdG5hbWUx ID0gJ2xvY2FsaG9zdCcKK3dkX3BvcnQxID0gMjExMDQKK3BncG9vbF9wb3J0MSA9IDExMTAwCisK K2hlYXJ0YmVhdF9ob3N0bmFtZTAgPSAnbG9jYWxob3N0JworaGVhcnRiZWF0X3BvcnQwID0gMjEw MDUKK2hlYXJ0YmVhdF9ob3N0bmFtZTEgPSAnbG9jYWxob3N0JworaGVhcnRiZWF0X3BvcnQxID0g MjExMDUKKworZW5hYmxlX2NvbnNlbnN1c193aXRoX2hhbGZfdm90ZXMgPSBvbgorCisjIEVuYWJs ZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlIHZpYSBkbWxfYWRhcHRpdmVfZ2xvYmFsCitk aXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9ICdkbWxfYWRhcHRpdmVfZ2xvYmFsJwordHJh Y2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbiA9IDIwMDAKKworIyBFbmFibGUg ZGVidWcgbG9nZ2luZyB0byBzZWUgZmVhdHVyZSBtZXNzYWdlcworbG9nX21pbl9tZXNzYWdlcyA9 IGRlYnVnMQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDMudHJhY2tf dGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvdGVzdC5zaCBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVz dHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL3Rlc3Quc2gKbmV3IGZpbGUgbW9k ZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u NzUyYTZlNmFhMzc3ZmUwYzU0MjQ0OTc1ZTYwNjY0ODEwMWM5OGNmOAotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dh dGNoZG9nL3Rlc3Quc2gKQEAgLTAsMCArMSwxNzkgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKyMt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisjIHRlc3Qgc2NyaXB0IGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbiBnbG9iYWwg Y29sZCBzdGFydCBvbiB3YXRjaGRvZyBsZWFkZXIgY2hhbmdlLgorIyBUZXN0cyB0aGF0IHdoZW4g dGhlIHdhdGNoZG9nIGxlYWRlciBjaGFuZ2VzLCB0aGUgbmV3IGxlYWRlciB0cmlnZ2VycworIyBh IGdsb2JhbCBjb2xkIHN0YXJ0IHRvIGZvcmNlIGFsbCBxdWVyaWVzIHRvIHByaW1hcnkuCisjCitz b3VyY2UgJFRFU1RMSUJTCitMRUFERVJfRElSPWxlYWRlcgorU1RBTkRCWV9ESVI9c3RhbmRieQor UFNRTD0kUEdCSU4vcHNxbAorc3VjY2Vzc19jb3VudD0wCisKK3JtIC1mciAkTEVBREVSX0RJUgor cm0gLWZyICRTVEFOREJZX0RJUgorCitta2RpciAkTEVBREVSX0RJUgorbWtkaXIgJFNUQU5EQllf RElSCisKKyMgZGlyIGluIGxlYWRlciBkaXJlY3RvcnkKK2NkICRMRUFERVJfRElSCisKKyMgY3Jl YXRlIGxlYWRlciBlbnZpcm9ubWVudCB3aXRoIHN0cmVhbWluZyByZXBsaWNhdGlvbgorZWNobyAt biAiY3JlYXRpbmcgbGVhZGVyIHBncG9vbC4uLiIKKyRQR1BPT0xfU0VUVVAgLW0gcyAtbiAyIC1w IDExMDAwIHx8IGV4aXQgMQorZWNobyAibGVhZGVyIHNldHVwIGRvbmUuIgorCisjIGNvcHkgdGhl IGNvbmZpZ3VyYXRpb25zIHRvIHN0YW5kYnkKK2NwIC1yIGV0YyAuLi8kU1RBTkRCWV9ESVIvCisK K3NvdXJjZSAuL2Jhc2hyYy5wb3J0cworY2F0IC4uL2xlYWRlci5jb25mID4+IGV0Yy9wZ3Bvb2wu Y29uZgorZWNobyAwID4gZXRjL3BncG9vbF9ub2RlX2lkCisKKy4vc3RhcnRhbGwKK3dhaXRfZm9y X3BncG9vbF9zdGFydHVwCisKKyMgYmFjayB0byB0ZXN0IHJvb3QgZGlyCitjZCAuLgorCisjIGNy ZWF0ZSBzdGFuZGJ5IGVudmlyb25tZW50Citta2RpciAkU1RBTkRCWV9ESVIvbG9nCitlY2hvIC1u ICJjcmVhdGluZyBzdGFuZGJ5IHBncG9vbC4uLiIKK2NhdCBzdGFuZGJ5LmNvbmYgPj4gJFNUQU5E QllfRElSL2V0Yy9wZ3Bvb2wuY29uZgorIyBzaW5jZSB3ZSBhcmUgdXNpbmcgdGhlIHNhbWUgcGdw b29sLUlJIGNvbmYgYXMgb2YgbGVhZGVyLCBjaGFuZ2UgdGhlIHBpZCBmaWxlIHBhdGgKK2VjaG8g InBpZF9maWxlX25hbWUgPSAnJFBXRC9wZ3Bvb2wyLnBpZCciID4+ICRTVEFOREJZX0RJUi9ldGMv cGdwb29sLmNvbmYKK2VjaG8gMSA+ICRTVEFOREJZX0RJUi9ldGMvcGdwb29sX25vZGVfaWQKKyMg c3RhcnQgdGhlIHN0YW5kYnkgcGdwb29sLUlJIGJ5IGhhbmQKKyRQR1BPT0xfSU5TVEFMTF9ESVIv YmluL3BncG9vbCAtRCAtbiAtZiAkU1RBTkRCWV9ESVIvZXRjL3BncG9vbC5jb25mIC1GICRTVEFO REJZX0RJUi9ldGMvcGNwLmNvbmYgLWEgJFNUQU5EQllfRElSL2V0Yy9wb29sX2hiYS5jb25mID4g JFNUQU5EQllfRElSL2xvZy9wZ3Bvb2wubG9nIDI+JjEgJgorCisjIFRlc3QgMTogQ2hlY2sgaWYg bGVhZGVyIHBncG9vbC1JSSBzdGFydGVkIGNvcnJlY3RseQorZWNobyAiPT09IFRlc3QgMTogV2Fp dGluZyBmb3IgdGhlIHBncG9vbCBsZWFkZXIuLi4gPT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYg NyA4IDkgMTAKK2RvCisJZ3JlcCAiSSBhbSB0aGUgY2x1c3RlciBsZWFkZXIgbm9kZS4gU3RhcnRp bmcgZXNjYWxhdGlvbiBwcm9jZXNzIiAkTEVBREVSX0RJUi9sb2cvcGdwb29sLmxvZyA+IC9kZXYv bnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2NvdW50PSQoKCBzdWNj ZXNzX2NvdW50ICsgMSApKQorCQllY2hvICJUZXN0IDEgUEFTU0VEOiBMZWFkZXIgYnJvdWdodCB1 cCBzdWNjZXNzZnVsbHkuIgorCQlicmVhaworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIK KwlzbGVlcCAyCitkb25lCisKK2lmIFsgJHN1Y2Nlc3NfY291bnQgLWx0IDEgXTsgdGhlbgorCWVj aG8gIlRlc3QgMSBGQUlMRUQ6IExlYWRlciBkaWQgbm90IHN0YXJ0IgorCSRQR1BPT0xfSU5TVEFM TF9ESVIvYmluL3BncG9vbCAtZiAkU1RBTkRCWV9ESVIvZXRjL3BncG9vbC5jb25mIC1tIGYgc3Rv cCAyPi9kZXYvbnVsbAorCWNkICRMRUFERVJfRElSICYmIC4vc2h1dGRvd25hbGwKKwlleGl0IDEK K2ZpCisKKyMgVGVzdCAyOiBDaGVjayBpZiBzdGFuZGJ5IGhhcyBzdWNjZXNzZnVsbHkgam9pbmVk CitlY2hvICI9PT0gVGVzdCAyOiBXYWl0aW5nIGZvciB0aGUgc3RhbmRieSB0byBqb2luIGNsdXN0 ZXIuLi4gPT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAic3Vj Y2Vzc2Z1bGx5IGpvaW5lZCB0aGUgd2F0Y2hkb2cgY2x1c3RlciBhcyBzdGFuZGJ5IG5vZGUiICRT VEFOREJZX0RJUi9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9IDAg XTsgdGhlbgorCQlzdWNjZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCQllY2hv ICJUZXN0IDIgUEFTU0VEOiBTdGFuZGJ5IHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQuIgorCQlicmVh aworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisKK2lmIFsg JHN1Y2Nlc3NfY291bnQgLWx0IDIgXTsgdGhlbgorCWVjaG8gIlRlc3QgMiBGQUlMRUQ6IFN0YW5k YnkgZGlkIG5vdCBqb2luIGNsdXN0ZXIiCisJJFBHUE9PTF9JTlNUQUxMX0RJUi9iaW4vcGdwb29s IC1mICRTVEFOREJZX0RJUi9ldGMvcGdwb29sLmNvbmYgLW0gZiBzdG9wIDI+L2Rldi9udWxsCisJ Y2QgJExFQURFUl9ESVIgJiYgLi9zaHV0ZG93bmFsbAorCWV4aXQgMQorZmkKKworIyBUZXN0IDM6 IFZlcmlmeSB0cmFja190YWJsZV9tdXRhdGlvbiBpcyBlbmFibGVkIGFuZCB3b3JraW5nIG9uIGxl YWRlcgorZWNobyAiPT09IFRlc3QgMzogVmVyaWZ5IHRyYWNrX3RhYmxlX211dGF0aW9uIGlzIGVu YWJsZWQgPT09IgoraWYgZ3JlcCAtYSAidHJhY2tfdGFibGVfbXV0YXRpb246IGluaXRpYWxpemVk IiAkTEVBREVSX0RJUi9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisJc3Vj Y2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwllY2hvICJUZXN0IDMgUEFTU0VE OiB0cmFja190YWJsZV9tdXRhdGlvbiBpbml0aWFsaXplZCBvbiBsZWFkZXIiCitlbHNlCisJZWNo byAiVGVzdCAzIEZBSUxFRDogdHJhY2tfdGFibGVfbXV0YXRpb24gbm90IGluaXRpYWxpemVkIG9u IGxlYWRlciIKKwkkUEdQT09MX0lOU1RBTExfRElSL2Jpbi9wZ3Bvb2wgLWYgJFNUQU5EQllfRElS L2V0Yy9wZ3Bvb2wuY29uZiAtbSBmIHN0b3AgMj4vZGV2L251bGwKKwljZCAkTEVBREVSX0RJUiAm JiAuL3NodXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgNDogU3RvcCBsZWFkZXIgcGdw b29sIGFuZCB0cmlnZ2VyIGZhaWxvdmVyCitlY2hvICI9PT0gVGVzdCA0OiBUcmlnZ2VyaW5nIGxl YWRlciBmYWlsb3Zlci4uLiA9PT0iCiskUEdQT09MX0lOU1RBTExfRElSL2Jpbi9wZ3Bvb2wgLWYg JExFQURFUl9ESVIvZXRjL3BncG9vbC5jb25mIC1tIGYgc3RvcAorCitlY2hvICJDaGVja2luZyBp ZiB0aGUgU3RhbmRieSBwZ3Bvb2wtSUkgZGV0ZWN0ZWQgdGhlIGxlYWRlciBzaHV0ZG93bi4uLiIK K2ZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWdyZXAgLWEgIiBpcyBzaHV0dGlu ZyBkb3duIiAkU1RBTkRCWV9ESVIvbG9nL3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlm IFsgJD8gPSAwIF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEg KSkKKwkJZWNobyAiVGVzdCA0IFBBU1NFRDogTGVhZGVyIHNodXRkb3duIGRldGVjdGVkLiIKKwkJ YnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10gJGkgdGltZXMiCisJc2xlZXAgMgorZG9uZQorCitp ZiBbICRzdWNjZXNzX2NvdW50IC1sdCA0IF07IHRoZW4KKwllY2hvICJUZXN0IDQgRkFJTEVEOiBM ZWFkZXIgc2h1dGRvd24gbm90IGRldGVjdGVkIgorCSRQR1BPT0xfSU5TVEFMTF9ESVIvYmluL3Bn cG9vbCAtZiAkU1RBTkRCWV9ESVIvZXRjL3BncG9vbC5jb25mIC1tIGYgc3RvcCAyPi9kZXYvbnVs bAorCWNkICRMRUFERVJfRElSICYmIC4vc2h1dGRvd25hbGwKKwlleGl0IDEKK2ZpCisKKyMgVGVz dCA1OiBWZXJpZnkgc3RhbmRieSBiZWNvbWVzIG5ldyBsZWFkZXIKK2VjaG8gIj09PSBUZXN0IDU6 IENoZWNraW5nIGlmIHN0YW5kYnkgdGFrZXMgb3ZlciBhcyBsZWFkZXIuLi4gPT09IgorZm9yIGkg aW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAtYSAiSSBhbSB0aGUgY2x1c3RlciBs ZWFkZXIgbm9kZS4gU3RhcnRpbmcgZXNjYWxhdGlvbiBwcm9jZXNzIiAkU1RBTkRCWV9ESVIvbG9n L3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlmIFsgJD8gPSAwIF07IHRoZW4KKwkJc3Vj Y2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwkJZWNobyAiVGVzdCA1IFBBU1NF RDogU3RhbmRieSBiZWNhbWUgdGhlIG5ldyBsZWFkZXIuIgorCQlicmVhaworCWZpCisJZWNobyAi W2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisKK2lmIFsgJHN1Y2Nlc3NfY291bnQg LWx0IDUgXTsgdGhlbgorCWVjaG8gIlRlc3QgNSBGQUlMRUQ6IFN0YW5kYnkgZGlkIG5vdCBiZWNv bWUgbGVhZGVyIgorCSRQR1BPT0xfSU5TVEFMTF9ESVIvYmluL3BncG9vbCAtZiAkU1RBTkRCWV9E SVIvZXRjL3BncG9vbC5jb25mIC1tIGYgc3RvcCAyPi9kZXYvbnVsbAorCWNkICRMRUFERVJfRElS ICYmIC4vc2h1dGRvd25hbGwKKwlleGl0IDEKK2ZpCisKKyMgVGVzdCA2OiBWZXJpZnkgZ2xvYmFs IGNvbGQgc3RhcnQgd2FzIHRyaWdnZXJlZCBvbiBuZXcgbGVhZGVyCitlY2hvICI9PT0gVGVzdCA2 OiBDaGVja2luZyBpZiBnbG9iYWwgY29sZCBzdGFydCB3YXMgdHJpZ2dlcmVkLi4uID09PSIKKyMg VGhlIG5ldyBsZWFkZXIgc2hvdWxkIHRyaWdnZXIgZ2xvYmFsIGNvbGQgc3RhcnQgd2hlbiBpdCBi ZWNvbWVzIGNvb3JkaW5hdG9yCisjIExvb2sgZm9yIHRoZSBsb2cgbWVzc2FnZSB0aGF0IGluZGlj YXRlcyBnbG9iYWwgY29sZCBzdGFydCB3YXMgdHJpZ2dlcmVkCitmb3IgaSBpbiAxIDIgMyA0IDUg NiA3IDggOSAxMAorZG8KKwlncmVwIC1hICJ0cmFja190YWJsZV9tdXRhdGlvbjogZW50ZXJpbmcg Z2xvYmFsIGNvbGQgc3RhcnQiICRTVEFOREJZX0RJUi9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVs bCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2NvdW50PSQoKCBzdWNjZXNz X2NvdW50ICsgMSApKQorCQllY2hvICJUZXN0IDYgUEFTU0VEOiBHbG9iYWwgY29sZCBzdGFydCB0 cmlnZ2VyZWQgb24gbmV3IGxlYWRlci4iCisJCWJyZWFrCisJZmkKKwllY2hvICJbY2hlY2tdICRp IHRpbWVzIgorCXNsZWVwIDIKK2RvbmUKKworIyBDbGVhbnVwCiskUEdQT09MX0lOU1RBTExfRElS L2Jpbi9wZ3Bvb2wgLWYgJFNUQU5EQllfRElSL2V0Yy9wZ3Bvb2wuY29uZiAtbSBmIHN0b3AgMj4v ZGV2L251bGwKK2NkICRMRUFERVJfRElSCisuL3NodXRkb3duYWxsCisKK2VjaG8gIiIKK2VjaG8g IiRzdWNjZXNzX2NvdW50IG91dCBvZiA2IHN1Y2Nlc3NmdWwiCisKK2lmIHRlc3QgJHN1Y2Nlc3Nf Y291bnQgLWVxIDYKK3RoZW4KKwllY2hvICI9PT0gQWxsIFRyYWNrIFRhYmxlIE11dGF0aW9uIFdh dGNoZG9nIFRlc3RzIFBBU1NFRCA9PT0iCisJZXhpdCAwCitmaQorCitleGl0IDEKZGlmZiAtLWdp dCBhL3NyYy91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmMgYi9zcmMvdXRpbHMvcG9v bF90cmFja190YWJsZV9tdXRhdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3ZDRmMDM4MGQ0M2EyMzdmNTE4 YzYwY2RkNzNhYmEyZmY1MWI3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdXRpbHMvcG9vbF90 cmFja190YWJsZV9tdXRhdGlvbi5jCkBAIC0wLDAgKzEsMTE4OCBAQAorLyogLSotcGdzcWwtYy0q LSAqLworLyoKKyAqIHBncG9vbDogYSBsYW5ndWFnZSBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHBv b2wgc2VydmVyIGZvciBQb3N0Z3JlU1FMCisgKiB3cml0dGVuIGJ5IFRhdHN1byBJc2hpaQorICoK KyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDI2CVBnUG9vbCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0 ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3Nl IGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKKyAqIGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorICogY29waWVzIGFuZCB0aGF0 IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24KKyAqIG5vdGlj ZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBv ZiB0aGUKKyAqIGF1dGhvciBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkg cGVydGFpbmluZyB0bworICogZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNw ZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLiBUaGUgYXV0aG9yIG1ha2VzIG5v IHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdh cmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBl eHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogcG9vbF90cmFja190YWJsZV9tdXRh dGlvbi5jOiBJbi1tZW1vcnkgdHJhY2tpbmcgb2YgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMKKyAq ICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBzdGFsZSByZWFkcyBmcm9tIHJlcGxpY2FzIGR1 cmluZyByZXBsaWNhdGlvbiBsYWcKKyAqCisgKiBCYXNlZCBvbiB0aGUgImxhZ2xlc3MiIGFyY2hp dGVjdHVyZSBmcm9tIFRhaWxvciBCcmFuZHM6CisgKiBodHRwczovL21lZGl1bS5jb20vdGFpbG9y LXRlY2gvdXNpbmctZGF0YWJhc2UtcmVhZC1yZXBsaWNhcy1pbi1kaXN0cmlidXRlZC1zeXN0ZW1z LWQ4MGVhZjZiYmY4YQorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRs aWIuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5j bHVkZSAicG9vbC5oIgorI2luY2x1ZGUgInBvb2xfY29uZmlnLmgiCisjaW5jbHVkZSAiY29udGV4 dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfdHJhY2tfdGFi bGVfbXV0YXRpb24uaCIKKyNpbmNsdWRlICJ1dGlscy9lbG9nLmgiCisjaW5jbHVkZSAidXRpbHMv cG9vbF9pcGMuaCIKKyNpbmNsdWRlICJ1dGlscy9wYWxsb2MuaCIKKyNpbmNsdWRlICJ1dGlscy9w b29sX3JlbGNhY2hlLmgiCisKKyNkZWZpbmUgREFUQUJBU0VfVE9fT0lEX1FVRVJZICJTRUxFQ1Qg b2lkIEZST00gcGdfY2F0YWxvZy5wZ19kYXRhYmFzZSBXSEVSRSBkYXRuYW1lID0gJyVzJyIKKwor LyogLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzCisgKiAtLS0tLS0tLS0tLS0t LS0tCisgKi8KKworLyogUG9pbnRlciB0byBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSAqLworc3Rh dGljIFRyYWNrVGFibGVNdXRhdGlvblNobWVtICp0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbSA9 IE5VTEw7CisKKy8qIFBlci1wcm9jZXNzIGNvbGQgc3RhcnQgdHJhY2tpbmcgKG5vdCBpbiBzaGFy ZWQgbWVtb3J5KSAqLworc3RhdGljIHN0cnVjdCB0aW1ldmFsIHByb2Nlc3Nfc3RhcnRfdGltZTsK K3N0YXRpYyBib29sIGNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworLyogLS0tLS0t LS0tLS0tLS0tLQorICogSGVscGVyIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGZsZXhpYmxlIGFycmF5 cyBpbiBzaGFyZWQgbWVtb3J5CisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogR2V0IHBv aW50ZXIgdG8gYnVja2V0IGFycmF5IGluIHRhYmxlIG1hcCAqLworI2RlZmluZSBUQUJMRV9NQVBf QlVDS0VUUyhtYXApIFwKKwkoKGludCAqKSgoY2hhciAqKShtYXApICsgc2l6ZW9mKFRyYWNrVGFi bGVNdXRhdGlvbkhhc2hUYWJsZSkpKQorCisvKiBHZXQgcG9pbnRlciB0byBlbnRyeSBhcnJheSBp biB0YWJsZSBtYXAgKi8KKyNkZWZpbmUgVEFCTEVfTUFQX0VOVFJJRVMobWFwKSBcCisJKChUcmFj a1RhYmxlTXV0YXRpb25FbnRyeSAqKSgoY2hhciAqKShtYXApICsgc2l6ZW9mKFRyYWNrVGFibGVN dXRhdGlvbkhhc2hUYWJsZSkgKyBcCisJCQkJCQkJKG1hcCktPm51bV9idWNrZXRzICogc2l6ZW9m KGludCkpKQorCisvKiBHZXQgcG9pbnRlciB0byBidWNrZXQgYXJyYXkgaW4gcXVlcnkgY2FjaGUg Ki8KKyNkZWZpbmUgUVVFUllfQ0FDSEVfQlVDS0VUUyhjYWNoZSkgXAorCSgoaW50ICopKChjaGFy ICopKGNhY2hlKSArIHNpemVvZihRdWVyeVBhcnNlQ2FjaGUpKSkKKworLyogR2V0IHBvaW50ZXIg dG8gZW50cnkgYXJyYXkgaW4gcXVlcnkgY2FjaGUgKi8KKyNkZWZpbmUgUVVFUllfQ0FDSEVfRU5U UklFUyhjYWNoZSkgXAorCSgoUXVlcnlQYXJzZUVudHJ5ICopKChjaGFyICopKGNhY2hlKSArIHNp emVvZihRdWVyeVBhcnNlQ2FjaGUpICsgXAorCQkJCQkJIChjYWNoZSktPm51bV9idWNrZXRzICog c2l6ZW9mKGludCkpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBTZW1hcGhvcmUgbG9jayBo ZWxwZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkCit0 YWJsZV9tYXBfbG9jayh2b2lkKQoreworCXBvb2xfc2VtYXBob3JlX2xvY2soVFJBQ0tfVEFCTEVf TVVUQVRJT05fVEFCTEVfU0VNKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9tYXBf dW5sb2NrKHZvaWQpCit7CisJcG9vbF9zZW1hcGhvcmVfdW5sb2NrKFRSQUNLX1RBQkxFX01VVEFU SU9OX1RBQkxFX1NFTSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcXVlcnlfY2FjaGVfbG9j ayh2b2lkKQoreworCXBvb2xfc2VtYXBob3JlX2xvY2soVFJBQ0tfVEFCTEVfTVVUQVRJT05fUVVF UllfU0VNKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitxdWVyeV9jYWNoZV91bmxvY2sodm9p ZCkKK3sKKwlwb29sX3NlbWFwaG9yZV91bmxvY2soVFJBQ0tfVEFCTEVfTVVUQVRJT05fUVVFUllf U0VNKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogSGFzaCBmdW5jdGlvbnMKKyAqIC0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogRk5WLTFhIGhhc2ggZm9yIHRhYmxlL2RhdGFi YXNlIG9pZCBwYWlyCisgKi8KK3N0YXRpYyB1aW50MzIKK2ZudjFhX2hhc2hfdGFibGVfa2V5KGlu dCB0YWJsZV9vaWQsIGludCBkYm9pZCkKK3sKKwl1aW50MzIgaGFzaCA9IDIxNjYxMzYyNjF1OyAg LyogRk5WIG9mZnNldCBiYXNpcyAqLworCXVpbnQzMiBkYXRhWzJdOworCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmJ5dGVzOworCXNpemVfdCBpOworCisJZGF0YVswXSA9ICh1aW50MzIpIHRhYmxlX29p ZDsKKwlkYXRhWzFdID0gKHVpbnQzMikgZGJvaWQ7CisJYnl0ZXMgPSAoY29uc3QgdW5zaWduZWQg Y2hhciAqKSBkYXRhOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihkYXRhKTsgaSsrKQorCXsK KwkJaGFzaCBePSBieXRlc1tpXTsKKwkJaGFzaCAqPSAxNjc3NzYxOXU7ICAvKiBGTlYgcHJpbWUg Ki8KKwl9CisKKwlyZXR1cm4gaGFzaDsKK30KKworLyoKKyAqIEZOVi0xYSBoYXNoIGZvciA2NC1i aXQgdmFsdWUKKyAqLworc3RhdGljIHVpbnQ2NAorZm52MWFfaGFzaF82NChjb25zdCBjaGFyICpz dHIsIHNpemVfdCBsZW4pCit7CisJdWludDY0IGhhc2ggPSAxNDY5NTk4MTAzOTM0NjY1NjAzN1VM TDsgIC8qIEZOViBvZmZzZXQgYmFzaXMgZm9yIDY0LWJpdCAqLworCXNpemVfdCBpOworCisJZm9y IChpID0gMDsgaSA8IGxlbjsgaSsrKQorCXsKKwkJaGFzaCBePSAodWludDgpc3RyW2ldOworCQlo YXNoICo9IDEwOTk1MTE2MjgyMTFVTEw7ICAvKiBGTlYgcHJpbWUgZm9yIDY0LWJpdCAqLworCX0K KworCXJldHVybiBoYXNoOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBUaW1lIHV0aWxp dGllcworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBHZXQgZWxhcHNlZCB0aW1l IGluIG1pY3Jvc2Vjb25kcyBiZXR3ZWVuIHR3byB0aW1ldmFscworICovCitzdGF0aWMgaW50NjQK K2VsYXBzZWRfdXMoc3RydWN0IHRpbWV2YWwgKnN0YXJ0LCBzdHJ1Y3QgdGltZXZhbCAqZW5kKQor eworCXJldHVybiAoKGludDY0KShlbmQtPnR2X3NlYyAtIHN0YXJ0LT50dl9zZWMpICogMTAwMDAw MCkgKworCQkgICAoZW5kLT50dl91c2VjIC0gc3RhcnQtPnR2X3VzZWMpOworfQorCisvKgorICog R2V0IGN1cnJlbnQgdGltZQorICovCitzdGF0aWMgdm9pZAorZ2V0X2N1cnJlbnRfdGltZShzdHJ1 Y3QgdGltZXZhbCAqdHYpCit7CisJZ2V0dGltZW9mZGF5KHR2LCBOVUxMKTsKK30KKworLyogLS0t LS0tLS0tLS0tLS0tLQorICogRGF0YWJhc2Ugb2lkIGxvb2t1cAorICogLS0tLS0tLS0tLS0tLS0t LQorICovCisKK3N0YXRpYyBpbnQKK3RyYWNrX3RhYmxlX211dGF0aW9uX2dldF9kYXRhYmFzZV9v aWRfaW50ZXJuYWwodm9pZCkKK3sKKwlpbnQJCQlvaWQgPSAwOworCXN0YXRpYyBQT09MX1JFTENB Q0hFICpyZWxjYWNoZTsKKwlQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFja2VuZDsKKwlQT09MX1NF U1NJT05fQ09OVEVYVCAqc2Vzc2lvbl9jb250ZXh0OworCisJLyogU2FmZXR5IGNoZWNrOiBtdXN0 IGhhdmUgc2htZW0gaW5pdGlhbGl6ZWQgKi8KKwlpZiAodHJhY2tfdGFibGVfbXV0YXRpb25fc2ht ZW0gPT0gTlVMTCkKKwkJcmV0dXJuIG9pZDsKKworCXNlc3Npb25fY29udGV4dCA9IHBvb2xfZ2V0 X3Nlc3Npb25fY29udGV4dChmYWxzZSk7CisJaWYgKHNlc3Npb25fY29udGV4dCA9PSBOVUxMKQor CQlyZXR1cm4gb2lkOworCisJLyogRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCBxdWVyeSBjb250ZXh0 ICovCisJaWYgKHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dCA9PSBOVUxMKQorCQlyZXR1 cm4gb2lkOworCisJYmFja2VuZCA9IHNlc3Npb25fY29udGV4dC0+YmFja2VuZDsKKwlpZiAoYmFj a2VuZCA9PSBOVUxMIHx8IE1BSU5fQ09OTkVDVElPTihiYWNrZW5kKSA9PSBOVUxMIHx8IE1BSU5f Q09OTkVDVElPTihiYWNrZW5kKS0+c3AgPT0gTlVMTCkKKwkJcmV0dXJuIG9pZDsKKworCS8qIEVu c3VyZSBkYXRhYmFzZSBuYW1lIGlzIHZhbGlkICovCisJaWYgKE1BSU5fQ09OTkVDVElPTihiYWNr ZW5kKS0+c3AtPmRhdGFiYXNlID09IE5VTEwpCisJCXJldHVybiBvaWQ7CisKKwlpZiAoIXJlbGNh Y2hlKQorCXsKKwkJcmVsY2FjaGUgPSBwb29sX2NyZWF0ZV9yZWxjYWNoZShwb29sX2NvbmZpZy0+ cmVsY2FjaGVfc2l6ZSwKKwkJCQkJCQkJCQlEQVRBQkFTRV9UT19PSURfUVVFUlksCisJCQkJCQkJ CQkJaW50X3JlZ2lzdGVyX2Z1bmMsCisJCQkJCQkJCQkJaW50X3VucmVnaXN0ZXJfZnVuYywKKwkJ CQkJCQkJCQlmYWxzZSk7CisJCWlmIChyZWxjYWNoZSA9PSBOVUxMKQorCQl7CisJCQllcmVwb3J0 KExPRywKKwkJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246IGVycm9yIGNyZWF0aW5n IHJlbGNhY2hlIHdoaWxlIGdldHRpbmcgZGF0YWJhc2UgT0lEIikpKTsKKwkJCXJldHVybiBvaWQ7 CisJCX0KKwl9CisKKwlvaWQgPSAoaW50KSAoaW50cHRyX3QpIHBvb2xfc2VhcmNoX3JlbGNhY2hl KHJlbGNhY2hlLCBiYWNrZW5kLAorCQkJCQkJCQkJCQkJTUFJTl9DT05ORUNUSU9OKGJhY2tlbmQp LT5zcC0+ZGF0YWJhc2UpOworCXJldHVybiBvaWQ7Cit9CisKK2ludAorcG9vbF90cmFja190YWJs ZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKHZvaWQpCit7CisJcmV0dXJuIHRyYWNrX3RhYmxl X211dGF0aW9uX2dldF9kYXRhYmFzZV9vaWRfaW50ZXJuYWwoKTsKK30KKworLyogLS0tLS0tLS0t LS0tLS0tLQorICogVGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSBvcGVyYXRpb25zCisgKiAtLS0t LS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEluaXRpYWxpemUgdGFibGUgbXV0YXRpb24gaGFz aCB0YWJsZQorICovCitzdGF0aWMgdm9pZAordGFibGVfbWFwX2luaXQoVHJhY2tUYWJsZU11dGF0 aW9uSGFzaFRhYmxlICptYXAsIGludCBudW1fYnVja2V0cywgaW50IG1heF9lbnRyaWVzKQorewor CWludCAqYnVja2V0czsKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllczsKKwlpbnQg aTsKKworCW1hcC0+bnVtX2J1Y2tldHMgPSBudW1fYnVja2V0czsKKwltYXAtPm1heF9lbnRyaWVz ID0gbWF4X2VudHJpZXM7CisJbWFwLT5udW1fZW50cmllcyA9IDA7CisJbWFwLT5mcmVlX2xpc3Rf aGVhZCA9IDA7CisKKwlidWNrZXRzID0gVEFCTEVfTUFQX0JVQ0tFVFMobWFwKTsKKwllbnRyaWVz ID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKworCS8qIEluaXRpYWxpemUgYWxsIGJ1Y2tldHMg dG8gZW1wdHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykKKwkJYnVja2V0 c1tpXSA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisKKwkvKiBJbml0aWFs aXplIGZyZWUgbGlzdCAtIGNoYWluIGFsbCBlbnRyaWVzICovCisJZm9yIChpID0gMDsgaSA8IG1h eF9lbnRyaWVzOyBpKyspCisJeworCQllbnRyaWVzW2ldLmluX3VzZSA9IGZhbHNlOworCQllbnRy aWVzW2ldLm5leHQgPSAoaSA8IG1heF9lbnRyaWVzIC0gMSkgPyBpICsgMSA6IFRSQUNLX1RBQkxF X01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJfQorCisJZXJlcG9ydChERUJVRzEsCisJCQkoZXJy bXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogaW5pdGlhbGl6ZWQgdGFibGUgbWFwIHdpdGggJWQg YnVja2V0cywgJWQgbWF4IGVudHJpZXMiLAorCQkJCQludW1fYnVja2V0cywgbWF4X2VudHJpZXMp KSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbiBlbnRyeSBmcm9tIHRoZSBmcmVlIGxpc3QKKyAq Lworc3RhdGljIGludAordGFibGVfbWFwX2FsbG9jX2VudHJ5KFRyYWNrVGFibGVNdXRhdGlvbkhh c2hUYWJsZSAqbWFwKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzID0gVEFC TEVfTUFQX0VOVFJJRVMobWFwKTsKKwlpbnQgaWR4OworCisJaWYgKG1hcC0+ZnJlZV9saXN0X2hl YWQgPT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJcmV0dXJuIFRSQUNL X1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisKKwlpZHggPSBtYXAtPmZyZWVfbGlzdF9o ZWFkOworCW1hcC0+ZnJlZV9saXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwllbnRyaWVz W2lkeF0uaW5fdXNlID0gdHJ1ZTsKKwllbnRyaWVzW2lkeF0ubmV4dCA9IFRSQUNLX1RBQkxFX01V VEFUSU9OX0lOVkFMSURfSU5ERVg7CisJbWFwLT5udW1fZW50cmllcysrOworCisJcmV0dXJuIGlk eDsKK30KKworLyoKKyAqIEZyZWUgYW4gZW50cnkgYmFjayB0byB0aGUgZnJlZSBsaXN0CisgKi8K K3N0YXRpYyB2b2lkCit0YWJsZV9tYXBfZnJlZV9lbnRyeShUcmFja1RhYmxlTXV0YXRpb25IYXNo VGFibGUgKm1hcCwgaW50IGlkeCkKK3sKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmll cyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisKKwllbnRyaWVzW2lkeF0uaW5fdXNlID0gZmFs c2U7CisJZW50cmllc1tpZHhdLm5leHQgPSBtYXAtPmZyZWVfbGlzdF9oZWFkOworCW1hcC0+ZnJl ZV9saXN0X2hlYWQgPSBpZHg7CisJbWFwLT5udW1fZW50cmllcy0tOworfQorCisvKgorICogTG9v ayB1cCBhIHRhYmxlIGluIHRoZSBoYXNoIHRhYmxlCisgKiBSZXR1cm5zIGVudHJ5IGluZGV4IG9y IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVggaWYgbm90IGZvdW5kCisgKiBNdXN0 IGJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZAorICovCitzdGF0aWMgaW50Cit0YWJsZV9tYXBfbG9v a3VwKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLCBpbnQgdGFibGVfb2lkLCBpbnQg ZGJvaWQsIHVpbnQzMiBoYXNoKQoreworCWludCAqYnVja2V0cyA9IFRBQkxFX01BUF9CVUNLRVRT KG1hcCk7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXMgPSBUQUJMRV9NQVBfRU5U UklFUyhtYXApOworCWludCBidWNrZXQgPSBoYXNoICUgbWFwLT5udW1fYnVja2V0czsKKwlpbnQg aWR4ID0gYnVja2V0c1tidWNrZXRdOworCisJd2hpbGUgKGlkeCAhPSBUUkFDS19UQUJMRV9NVVRB VElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJaWYgKGVudHJpZXNbaWR4XS5oYXNoID09IGhhc2gg JiYKKwkJCWVudHJpZXNbaWR4XS50YWJsZV9vaWQgPT0gdGFibGVfb2lkICYmCisJCQllbnRyaWVz W2lkeF0uZGJvaWQgPT0gZGJvaWQpCisJCXsKKwkJCXJldHVybiBpZHg7CisJCX0KKwkJaWR4ID0g ZW50cmllc1tpZHhdLm5leHQ7CisJfQorCisJcmV0dXJuIFRSQUNLX1RBQkxFX01VVEFUSU9OX0lO VkFMSURfSU5ERVg7Cit9CisKKy8qCisgKiBJbnNlcnQgb3IgdXBkYXRlIGEgdGFibGUgZW50cnkK KyAqIE11c3QgYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkCisgKi8KK3N0YXRpYyB2b2lkCit0YWJs ZV9tYXBfaW5zZXJ0KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLCBpbnQgdGFibGVf b2lkLCBpbnQgZGJvaWQsCisJCQkJIHVpbnQzMiBoYXNoLCBzdHJ1Y3QgdGltZXZhbCAqd3JpdGVf dGltZSkKK3sKKwlpbnQgKmJ1Y2tldHMgPSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApOworCVRyYWNr VGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwlp bnQgYnVja2V0ID0gaGFzaCAlIG1hcC0+bnVtX2J1Y2tldHM7CisJaW50IGlkeDsKKworCS8qIENo ZWNrIGlmIGVudHJ5IGFscmVhZHkgZXhpc3RzICovCisJaWR4ID0gdGFibGVfbWFwX2xvb2t1cCht YXAsIHRhYmxlX29pZCwgZGJvaWQsIGhhc2gpOworCWlmIChpZHggIT0gVFJBQ0tfVEFCTEVfTVVU QVRJT05fSU5WQUxJRF9JTkRFWCkKKwl7CisJCS8qIFVwZGF0ZSBleGlzdGluZyBlbnRyeSAqLwor CQllbnRyaWVzW2lkeF0ubGFzdF93cml0ZV90aW1lID0gKndyaXRlX3RpbWU7CisJCXJldHVybjsK Kwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgZW50cnkgKi8KKwlpZHggPSB0YWJsZV9tYXBfYWxsb2Nf ZW50cnkobWFwKTsKKwlpZiAoaWR4ID09IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5E RVgpCisJeworCQlpbnQgYjsKKwkJLyogVGFibGUgaXMgZnVsbCAtIGV2aWN0IGFuIGVudHJ5ICov CisJCS8qIEZvciBzaW1wbGljaXR5LCBqdXN0IHVzZSB0aGUgZmlyc3QgZW50cnkgaW4gZmlyc3Qg bm9uLWVtcHR5IGJ1Y2tldCAqLworCQlmb3IgKGIgPSAwOyBiIDwgbWFwLT5udW1fYnVja2V0czsg YisrKQorCQl7CisJCQlpZiAoYnVja2V0c1tiXSAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZB TElEX0lOREVYKQorCQkJeworCQkJCWludCB2aWN0aW0gPSBidWNrZXRzW2JdOworCQkJCWJ1Y2tl dHNbYl0gPSBlbnRyaWVzW3ZpY3RpbV0ubmV4dDsKKwkJCQl0YWJsZV9tYXBfZnJlZV9lbnRyeSht YXAsIHZpY3RpbSk7CisJCQkJaWR4ID0gdGFibGVfbWFwX2FsbG9jX2VudHJ5KG1hcCk7CisJCQkJ YnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaWR4ID09IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lO VkFMSURfSU5ERVgpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJKGVycm1zZygidHJh Y2tfdGFibGVfbXV0YXRpb246IGZhaWxlZCB0byBhbGxvY2F0ZSBlbnRyeSBmb3IgdGFibGUgb2lk ICVkIChkYm9pZCAlZCkiLAorCQkJCQkJCXRhYmxlX29pZCwgZGJvaWQpKSk7CisJCQlyZXR1cm47 CisJCX0KKwl9CisKKwkvKiBJbml0aWFsaXplIG5ldyBlbnRyeSAqLworCWVudHJpZXNbaWR4XS50 YWJsZV9vaWQgPSB0YWJsZV9vaWQ7CisJZW50cmllc1tpZHhdLmRib2lkID0gZGJvaWQ7CisJZW50 cmllc1tpZHhdLmhhc2ggPSBoYXNoOworCWVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUgPSAq d3JpdGVfdGltZTsKKworCS8qIEluc2VydCBhdCBoZWFkIG9mIGJ1Y2tldCBjaGFpbiAqLworCWVu dHJpZXNbaWR4XS5uZXh0ID0gYnVja2V0c1tidWNrZXRdOworCWJ1Y2tldHNbYnVja2V0XSA9IGlk eDsKKworCWVyZXBvcnQoREVCVUcyLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246 IG1hcmtlZCB0YWJsZSBvaWQgJWQgKGRib2lkICVkKSBhcyB3cml0dGVuIiwKKwkJCQkJdGFibGVf b2lkLCBkYm9pZCkpKTsKK30KKworLyoKKyAqIFJlbW92ZSBleHBpcmVkIGVudHJpZXMgZnJvbSB0 aGUgdGFibGUgbWFwCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZAorICovCitzdGF0 aWMgdm9pZAordGFibGVfbWFwX2NsZWFudXBfZXhwaXJlZChUcmFja1RhYmxlTXV0YXRpb25IYXNo VGFibGUgKm1hcCwgdWludDY0IHR0bF91cykKK3sKKwlpbnQgKmJ1Y2tldHMgPSBUQUJMRV9NQVBf QlVDS0VUUyhtYXApOworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzID0gVEFCTEVf TUFQX0VOVFJJRVMobWFwKTsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50IHJlbW92ZWQgPSAw OworCWludCBiOworCisJZ2V0X2N1cnJlbnRfdGltZSgmbm93KTsKKworCWZvciAoYiA9IDA7IGIg PCBtYXAtPm51bV9idWNrZXRzOyBiKyspCisJeworCQlpbnQgKnByZXZfcHRyID0gJmJ1Y2tldHNb Yl07CisJCWludCBpZHggPSBidWNrZXRzW2JdOworCisJCXdoaWxlIChpZHggIT0gVFJBQ0tfVEFC TEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJeworCQkJaW50NjQgZWxhcHNlZCA9IGVsYXBz ZWRfdXMoJmVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUsICZub3cpOworCisJCQlpZiAoZWxh cHNlZCA+IChpbnQ2NCl0dGxfdXMpCisJCQl7CisJCQkJLyogRW50cnkgaGFzIGV4cGlyZWQgLSBy ZW1vdmUgaXQgKi8KKwkJCQlpbnQgbmV4dCA9IGVudHJpZXNbaWR4XS5uZXh0OworCQkJCSpwcmV2 X3B0ciA9IG5leHQ7CisJCQkJdGFibGVfbWFwX2ZyZWVfZW50cnkobWFwLCBpZHgpOworCQkJCWlk eCA9IG5leHQ7CisJCQkJcmVtb3ZlZCsrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXByZXZf cHRyID0gJmVudHJpZXNbaWR4XS5uZXh0OworCQkJCWlkeCA9IGVudHJpZXNbaWR4XS5uZXh0Owor CQkJfQorCQl9CisJfQorCisJaWYgKHJlbW92ZWQgPiAwKQorCXsKKwkJZXJlcG9ydChERUJVRzEs CisJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246IGNsZWFuZWQgdXAgJWQgZXhwaXJl ZCB0YWJsZSBlbnRyaWVzIiwgcmVtb3ZlZCkpKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t LS0KKyAqIFF1ZXJ5IHBhcnNlIGNhY2hlIG9wZXJhdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisvKgorICogSW5pdGlhbGl6ZSBxdWVyeSBwYXJzZSBjYWNoZQorICovCitzdGF0aWMg dm9pZAorcXVlcnlfY2FjaGVfaW5pdChRdWVyeVBhcnNlQ2FjaGUgKmNhY2hlLCBpbnQgbnVtX2J1 Y2tldHMsIGludCBtYXhfZW50cmllcykKK3sKKwlpbnQgKmJ1Y2tldHM7CisJUXVlcnlQYXJzZUVu dHJ5ICplbnRyaWVzOworCWludCBpOworCisJY2FjaGUtPm51bV9idWNrZXRzID0gbnVtX2J1Y2tl dHM7CisJY2FjaGUtPm1heF9lbnRyaWVzID0gbWF4X2VudHJpZXM7CisJY2FjaGUtPm51bV9lbnRy aWVzID0gMDsKKwljYWNoZS0+ZnJlZV9saXN0X2hlYWQgPSAwOworCWNhY2hlLT5scnVfaGVhZCA9 IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJY2FjaGUtPmxydV90YWlsID0g VFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKworCWJ1Y2tldHMgPSBRVUVSWV9D QUNIRV9CVUNLRVRTKGNhY2hlKTsKKwllbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5UUklFUyhjYWNo ZSk7CisKKwkvKiBJbml0aWFsaXplIGFsbCBidWNrZXRzIHRvIGVtcHR5ICovCisJZm9yIChpID0g MDsgaSA8IG51bV9idWNrZXRzOyBpKyspCisJCWJ1Y2tldHNbaV0gPSBUUkFDS19UQUJMRV9NVVRB VElPTl9JTlZBTElEX0lOREVYOworCisJLyogSW5pdGlhbGl6ZSBmcmVlIGxpc3QgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgbWF4X2VudHJpZXM7IGkrKykKKwl7CisJCWVudHJpZXNbaV0uaW5fdXNlID0g ZmFsc2U7CisJCWVudHJpZXNbaV0ubmV4dCA9IChpIDwgbWF4X2VudHJpZXMgLSAxKSA/IGkgKyAx IDogVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKwkJZW50cmllc1tpXS5scnVf cHJldiA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJCWVudHJpZXNbaV0u bHJ1X25leHQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCX0KKworCWVy ZXBvcnQoREVCVUcxLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246IGluaXRpYWxp emVkIHF1ZXJ5IGNhY2hlIHdpdGggJWQgYnVja2V0cywgJWQgbWF4IGVudHJpZXMiLAorCQkJCQlu dW1fYnVja2V0cywgbWF4X2VudHJpZXMpKSk7Cit9CisKKy8qCisgKiBNb3ZlIGVudHJ5IHRvIGZy b250IG9mIExSVSBsaXN0IChtb3N0IHJlY2VudGx5IHVzZWQpCisgKi8KK3N0YXRpYyB2b2lkCitx dWVyeV9jYWNoZV9scnVfdG91Y2goUXVlcnlQYXJzZUNhY2hlICpjYWNoZSwgaW50IGlkeCkKK3sK KwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsK KworCS8qIEFscmVhZHkgYXQgaGVhZD8gKi8KKwlpZiAoY2FjaGUtPmxydV9oZWFkID09IGlkeCkK KwkJcmV0dXJuOworCisJLyogUmVtb3ZlIGZyb20gY3VycmVudCBwb3NpdGlvbiAqLworCWlmIChl bnRyaWVzW2lkeF0ubHJ1X3ByZXYgIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRF WCkKKwkJZW50cmllc1tlbnRyaWVzW2lkeF0ubHJ1X3ByZXZdLmxydV9uZXh0ID0gZW50cmllc1tp ZHhdLmxydV9uZXh0OworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X25leHQgIT0gVFJBQ0tfVEFCTEVf TVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tlbnRyaWVzW2lkeF0ubHJ1X25leHRd LmxydV9wcmV2ID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCWlmIChjYWNoZS0+bHJ1X3RhaWwg PT0gaWR4KQorCQljYWNoZS0+bHJ1X3RhaWwgPSBlbnRyaWVzW2lkeF0ubHJ1X3ByZXY7CisKKwkv KiBJbnNlcnQgYXQgaGVhZCAqLworCWVudHJpZXNbaWR4XS5scnVfcHJldiA9IFRSQUNLX1RBQkxF X01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJZW50cmllc1tpZHhdLmxydV9uZXh0ID0gY2FjaGUt PmxydV9oZWFkOworCWlmIChjYWNoZS0+bHJ1X2hlYWQgIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05f SU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tjYWNoZS0+bHJ1X2hlYWRdLmxydV9wcmV2ID0gaWR4 OworCWNhY2hlLT5scnVfaGVhZCA9IGlkeDsKKwlpZiAoY2FjaGUtPmxydV90YWlsID09IFRSQUNL X1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJCWNhY2hlLT5scnVfdGFpbCA9IGlkeDsK K30KKworLyoKKyAqIEFkZCBlbnRyeSB0byBMUlUgbGlzdCAoYXQgaGVhZCkKKyAqLworc3RhdGlj IHZvaWQKK3F1ZXJ5X2NhY2hlX2xydV9hZGQoUXVlcnlQYXJzZUNhY2hlICpjYWNoZSwgaW50IGlk eCkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNIRV9FTlRSSUVTKGNh Y2hlKTsKKworCWVudHJpZXNbaWR4XS5scnVfcHJldiA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lO VkFMSURfSU5ERVg7CisJZW50cmllc1tpZHhdLmxydV9uZXh0ID0gY2FjaGUtPmxydV9oZWFkOwor CisJaWYgKGNhY2hlLT5scnVfaGVhZCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lO REVYKQorCQllbnRyaWVzW2NhY2hlLT5scnVfaGVhZF0ubHJ1X3ByZXYgPSBpZHg7CisKKwljYWNo ZS0+bHJ1X2hlYWQgPSBpZHg7CisKKwlpZiAoY2FjaGUtPmxydV90YWlsID09IFRSQUNLX1RBQkxF X01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJCWNhY2hlLT5scnVfdGFpbCA9IGlkeDsKK30KKwor LyoKKyAqIFJlbW92ZSBlbnRyeSBmcm9tIExSVSBsaXN0CisgKi8KK3N0YXRpYyB2b2lkCitxdWVy eV9jYWNoZV9scnVfcmVtb3ZlKFF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGUsIGludCBpZHgpCit7CisJ UXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisK KwlpZiAoZW50cmllc1tpZHhdLmxydV9wcmV2ICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFM SURfSU5ERVgpCisJCWVudHJpZXNbZW50cmllc1tpZHhdLmxydV9wcmV2XS5scnVfbmV4dCA9IGVu dHJpZXNbaWR4XS5scnVfbmV4dDsKKwllbHNlCisJCWNhY2hlLT5scnVfaGVhZCA9IGVudHJpZXNb aWR4XS5scnVfbmV4dDsKKworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X25leHQgIT0gVFJBQ0tfVEFC TEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tlbnRyaWVzW2lkeF0ubHJ1X25l eHRdLmxydV9wcmV2ID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCWVsc2UKKwkJY2FjaGUtPmxy dV90YWlsID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCisJZW50cmllc1tpZHhdLmxydV9wcmV2 ID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKwllbnRyaWVzW2lkeF0ubHJ1 X25leHQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworfQorCisvKgorICog QWxsb2NhdGUgZW50cnkgZnJvbSBmcmVlIGxpc3QsIGV2aWN0aW5nIExSVSBpZiBuZWNlc3NhcnkK KyAqLworc3RhdGljIGludAorcXVlcnlfY2FjaGVfYWxsb2NfZW50cnkoUXVlcnlQYXJzZUNhY2hl ICpjYWNoZSkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNIRV9FTlRS SUVTKGNhY2hlKTsKKwlpbnQgKmJ1Y2tldHMgPSBRVUVSWV9DQUNIRV9CVUNLRVRTKGNhY2hlKTsK KwlpbnQgaWR4OworCisJaWYgKGNhY2hlLT5mcmVlX2xpc3RfaGVhZCAhPSBUUkFDS19UQUJMRV9N VVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJaWR4ID0gY2FjaGUtPmZyZWVfbGlzdF9oZWFk OworCQljYWNoZS0+ZnJlZV9saXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwkJZW50cmll c1tpZHhdLmluX3VzZSA9IHRydWU7CisJCWVudHJpZXNbaWR4XS5uZXh0ID0gVFJBQ0tfVEFCTEVf TVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKwkJY2FjaGUtPm51bV9lbnRyaWVzKys7CisJCXJldHVy biBpZHg7CisJfQorCisJLyogTm8gZnJlZSBlbnRyaWVzIC0gZXZpY3QgTFJVICovCisJaWYgKGNh Y2hlLT5scnVfdGFpbCA9PSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCQly ZXR1cm4gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKworCWlkeCA9IGNhY2hl LT5scnVfdGFpbDsKKworCS8qIFJlbW92ZSBmcm9tIGhhc2ggYnVja2V0ICovCisJaW50IGJ1Y2tl dCA9IGVudHJpZXNbaWR4XS5xdWVyeV9oYXNoICUgY2FjaGUtPm51bV9idWNrZXRzOworCWludCAq cHJldl9wdHIgPSAmYnVja2V0c1tidWNrZXRdOworCWludCBjdXJyID0gYnVja2V0c1tidWNrZXRd OworCisJd2hpbGUgKGN1cnIgIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkK Kwl7CisJCWlmIChjdXJyID09IGlkeCkKKwkJeworCQkJKnByZXZfcHRyID0gZW50cmllc1tjdXJy XS5uZXh0OworCQkJYnJlYWs7CisJCX0KKwkJcHJldl9wdHIgPSAmZW50cmllc1tjdXJyXS5uZXh0 OworCQljdXJyID0gZW50cmllc1tjdXJyXS5uZXh0OworCX0KKworCS8qIFJlbW92ZSBmcm9tIExS VSBsaXN0ICovCisJcXVlcnlfY2FjaGVfbHJ1X3JlbW92ZShjYWNoZSwgaWR4KTsKKworCS8qIFJl aW5pdGlhbGl6ZSBlbnRyeSAqLworCWVudHJpZXNbaWR4XS5pbl91c2UgPSB0cnVlOworCWVudHJp ZXNbaWR4XS5uZXh0ID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKworCXJl dHVybiBpZHg7Cit9CisKKy8qCisgKiBMb29rIHVwIGEgcXVlcnkgaW4gdGhlIGNhY2hlCisgKi8K K3N0YXRpYyBpbnQKK3F1ZXJ5X2NhY2hlX2xvb2t1cChRdWVyeVBhcnNlQ2FjaGUgKmNhY2hlLCB1 aW50NjQgaGFzaCkKK3sKKwlpbnQgKmJ1Y2tldHMgPSBRVUVSWV9DQUNIRV9CVUNLRVRTKGNhY2hl KTsKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNIRV9FTlRSSUVTKGNhY2hl KTsKKwlpbnQgYnVja2V0ID0gaGFzaCAlIGNhY2hlLT5udW1fYnVja2V0czsKKwlpbnQgaWR4ID0g YnVja2V0c1tidWNrZXRdOworCisJd2hpbGUgKGlkeCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9J TlZBTElEX0lOREVYKQorCXsKKwkJaWYgKGVudHJpZXNbaWR4XS5xdWVyeV9oYXNoID09IGhhc2gp CisJCQlyZXR1cm4gaWR4OworCQlpZHggPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwl9CisKKwlyZXR1 cm4gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKK30KKworLyogLS0tLS0tLS0t LS0tLS0tLQorICogUXVlcnkgbm9ybWFsaXphdGlvbgorICogLS0tLS0tLS0tLS0tLS0tLQorICov CisKKy8qCisgKiBTaW1wbGUgcXVlcnkgbm9ybWFsaXphdGlvbjoKKyAqIC0gU3RyaXAgY29tbWVu dHMgKC0tIHN0eWxlIGFuZCBDLXN0eWxlIGJsb2NrIGNvbW1lbnRzKQorICogLSBDb2xsYXBzZSB3 aGl0ZXNwYWNlCisgKiAtIENvbnZlcnQgdG8gbG93ZXJjYXNlIChleGNlcHQgaW5zaWRlIHN0cmlu Z3MpCisgKiAtIFJlcGxhY2UgbGl0ZXJhbCB2YWx1ZXMgd2l0aCBwbGFjZWhvbGRlcnMKKyAqCisg KiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIC0gcGdwb29sMiBhbHJlYWR5IGRvZXMgdGhp cyBlbHNld2hlcmUsCisgKiBidXQgd2UgbmVlZCBhIHN0YW5kYWxvbmUgdmVyc2lvbiBmb3IgdGhl IHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUuCisgKi8KK3N0YXRpYyBzaXplX3QKK25vcm1h bGl6ZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeSwgY2hhciAqb3V0cHV0LCBzaXplX3Qgb3V0cHV0 X3NpemUpCit7CisJY29uc3QgY2hhciAqc3JjID0gcXVlcnk7CisJY2hhciAqZHN0ID0gb3V0cHV0 OworCWNoYXIgKmRzdF9lbmQgPSBvdXRwdXQgKyBvdXRwdXRfc2l6ZSAtIDE7CisJYm9vbCBpbl9z dHJpbmcgPSBmYWxzZTsKKwljaGFyIHN0cmluZ19jaGFyID0gMDsKKwlib29sIGxhc3Rfd2FzX3Nw YWNlID0gdHJ1ZTsgIC8qIFN0YXJ0IHRydWUgdG8gc2tpcCBsZWFkaW5nIHNwYWNlICovCisKKwl3 aGlsZSAoKnNyYyAmJiBkc3QgPCBkc3RfZW5kKQorCXsKKwkJLyogSGFuZGxlIHN0cmluZyBsaXRl cmFscyAqLworCQlpZiAoaW5fc3RyaW5nKQorCQl7CisJCQlpZiAoKnNyYyA9PSBzdHJpbmdfY2hh cikKKwkJCXsKKwkJCQlpZiAoKihzcmMgKyAxKSA9PSBzdHJpbmdfY2hhcikKKwkJCQl7CisJCQkJ CS8qIEVzY2FwZWQgcXVvdGUgKi8KKwkJCQkJc3JjICs9IDI7CisJCQkJCWNvbnRpbnVlOworCQkJ CX0KKwkJCQlpbl9zdHJpbmcgPSBmYWxzZTsKKwkJCQkqZHN0KysgPSAnJCc7ICAvKiBSZXBsYWNl IHN0cmluZyBjb250ZW50IHdpdGggcGxhY2Vob2xkZXIgKi8KKwkJCX0KKwkJCXNyYysrOworCQkJ Y29udGludWU7CisJCX0KKworCQkvKiBDaGVjayBmb3Igc3RyaW5nIHN0YXJ0ICovCisJCWlmICgq c3JjID09ICdcJycgfHwgKnNyYyA9PSAnIicpCisJCXsKKwkJCWluX3N0cmluZyA9IHRydWU7CisJ CQlzdHJpbmdfY2hhciA9ICpzcmM7CisJCQlzcmMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ LyogSGFuZGxlIHNpbmdsZS1saW5lIGNvbW1lbnRzICovCisJCWlmICgqc3JjID09ICctJyAmJiAq KHNyYyArIDEpID09ICctJykKKwkJeworCQkJd2hpbGUgKCpzcmMgJiYgKnNyYyAhPSAnXG4nKQor CQkJCXNyYysrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBIYW5kbGUgbXVsdGktbGluZSBj b21tZW50cyAqLworCQlpZiAoKnNyYyA9PSAnLycgJiYgKihzcmMgKyAxKSA9PSAnKicpCisJCXsK KwkJCXNyYyArPSAyOworCQkJd2hpbGUgKCpzcmMgJiYgISgqc3JjID09ICcqJyAmJiAqKHNyYyAr IDEpID09ICcvJykpCisJCQkJc3JjKys7CisJCQlpZiAoKnNyYykKKwkJCQlzcmMgKz0gMjsKKwkJ CWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIHdoaXRlc3BhY2UgKi8KKwkJaWYgKCpzcmMg PT0gJyAnIHx8ICpzcmMgPT0gJ1x0JyB8fCAqc3JjID09ICdcbicgfHwgKnNyYyA9PSAnXHInKQor CQl7CisJCQlpZiAoIWxhc3Rfd2FzX3NwYWNlKQorCQkJeworCQkJCSpkc3QrKyA9ICcgJzsKKwkJ CQlsYXN0X3dhc19zcGFjZSA9IHRydWU7CisJCQl9CisJCQlzcmMrKzsKKwkJCWNvbnRpbnVlOwor CQl9CisKKwkJLyogSGFuZGxlIG51bWJlcnMgLSByZXBsYWNlIHdpdGggcGxhY2Vob2xkZXIgKi8K KwkJaWYgKCgqc3JjID49ICcwJyAmJiAqc3JjIDw9ICc5JykgfHwKKwkJCSgqc3JjID09ICcuJyAm JiAqKHNyYyArIDEpID49ICcwJyAmJiAqKHNyYyArIDEpIDw9ICc5JykpCisJCXsKKwkJCXdoaWxl ICgqc3JjICYmICgoKnNyYyA+PSAnMCcgJiYgKnNyYyA8PSAnOScpIHx8ICpzcmMgPT0gJy4nKSkK KwkJCQlzcmMrKzsKKwkJCWlmICghbGFzdF93YXNfc3BhY2UgJiYgZHN0ID4gb3V0cHV0ICYmICoo ZHN0IC0gMSkgIT0gJyQnKQorCQkJCSpkc3QrKyA9ICckJzsKKwkJCWxhc3Rfd2FzX3NwYWNlID0g ZmFsc2U7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFJlZ3VsYXIgY2hhcmFjdGVyIC0gY29u dmVydCB0byBsb3dlcmNhc2UgKi8KKwkJaWYgKCpzcmMgPj0gJ0EnICYmICpzcmMgPD0gJ1onKQor CQkJKmRzdCsrID0gKnNyYyArIDMyOworCQllbHNlCisJCQkqZHN0KysgPSAqc3JjOworCisJCWxh c3Rfd2FzX3NwYWNlID0gZmFsc2U7CisJCXNyYysrOworCX0KKworCS8qIFJlbW92ZSB0cmFpbGlu ZyBzcGFjZSAqLworCWlmIChkc3QgPiBvdXRwdXQgJiYgKihkc3QgLSAxKSA9PSAnICcpCisJCWRz dC0tOworCisJKmRzdCA9ICdcMCc7CisJcmV0dXJuIGRzdCAtIG91dHB1dDsKK30KKworLyogLS0t LS0tLS0tLS0tLS0tLQorICogUHVibGljIEFQSSBpbXBsZW1lbnRhdGlvbgorICogLS0tLS0tLS0t LS0tLS0tLQorICovCisKK1NpemUKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6 ZSh2b2lkKQoreworCVNpemUgc2l6ZSA9IDA7CisJaW50IHRhYmxlX2J1Y2tldHMgPSBwb29sX2Nv bmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czsKKwlpbnQgdGFibGVfc2l6 ZSA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplOworCWludCBx dWVyeV9idWNrZXRzID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1 Y2tldHM7CisJaW50IHF1ZXJ5X2NhY2hlX3NpemUgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVf bXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZTsKKworCS8qIE1haW4gc3RydWN0dXJlICov CisJc2l6ZSArPSBzaXplb2YoVHJhY2tUYWJsZU11dGF0aW9uU2htZW0pOworCisJLyogVGFibGUg bXV0YXRpb24gaGFzaCB0YWJsZSAqLworCXNpemUgKz0gc2l6ZW9mKFRyYWNrVGFibGVNdXRhdGlv bkhhc2hUYWJsZSk7CisJc2l6ZSArPSB0YWJsZV9idWNrZXRzICogc2l6ZW9mKGludCk7ICAvKiBi dWNrZXRzIGFycmF5ICovCisJc2l6ZSArPSB0YWJsZV9zaXplICogc2l6ZW9mKFRyYWNrVGFibGVN dXRhdGlvbkVudHJ5KTsgIC8qIGVudHJpZXMgYXJyYXkgKi8KKworCS8qIFF1ZXJ5IHBhcnNlIGNh Y2hlICovCisJc2l6ZSArPSBzaXplb2YoUXVlcnlQYXJzZUNhY2hlKTsKKwlzaXplICs9IHF1ZXJ5 X2J1Y2tldHMgKiBzaXplb2YoaW50KTsgIC8qIGJ1Y2tldHMgYXJyYXkgKi8KKwlzaXplICs9IHF1 ZXJ5X2NhY2hlX3NpemUgKiBzaXplb2YoUXVlcnlQYXJzZUVudHJ5KTsgIC8qIGVudHJpZXMgYXJy YXkgKi8KKworCXJldHVybiBzaXplOworfQorCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0 aW9uX2luaXQodm9pZCkKK3sKKyNpZm5kZWYgUE9PTF9QUklWQVRFCisJU2l6ZSBzaG1lbV9zaXpl OworCWNoYXIgKnNobWVtX3B0cjsKKworCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2Jh bGFuY2Vfb25fd3JpdGUgIT0gRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwl7CisJCWVyZXBv cnQoREVCVUcxLAorCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiBmZWF0dXJlIGRp c2FibGVkIikpKTsKKwkJcmV0dXJuOworCX0KKworCXNobWVtX3NpemUgPSBwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX3NobWVtX3NpemUoKTsKKworCS8qCisJICogQWxsb2NhdGUgZnJvbSB0aGUg bWFpbiBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuCisJICogTWVtb3J5IGlzIGFscmVhZHkgemVyb2Vk IGJ5IGluaXRpYWxpemVfc2hhcmVkX21lbW9yeV9tYWluX3NlZ21lbnQoKS4KKwkgKi8KKwlzaG1l bV9wdHIgPSBwb29sX3NoYXJlZF9tZW1vcnlfc2VnbWVudF9nZXRfY2h1bmsoc2htZW1fc2l6ZSk7 CisJaWYgKHNobWVtX3B0ciA9PSBOVUxMKQorCXsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy bXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogZmFpbGVkIHRvIGFsbG9jYXRlICV6dSBieXRlcyBv ZiBzaGFyZWQgbWVtb3J5IiwKKwkJCQkJCXNobWVtX3NpemUpKSk7CisJCXJldHVybjsKKwl9CisK KwkvKiBTZXQgdXAgcG9pbnRlcnMgdG8gc3RydWN0dXJlcyB3aXRoaW4gc2hhcmVkIG1lbW9yeSAq LworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID0gKFRyYWNrVGFibGVNdXRhdGlvblNobWVt ICopc2htZW1fcHRyOworCXNobWVtX3B0ciArPSBzaXplb2YoVHJhY2tUYWJsZU11dGF0aW9uU2ht ZW0pOworCisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnRhYmxlX21hcCA9IChUcmFja1Rh YmxlTXV0YXRpb25IYXNoVGFibGUgKilzaG1lbV9wdHI7CisJc2htZW1fcHRyICs9IHNpemVvZihU cmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUpOworCXNobWVtX3B0ciArPSBwb29sX2NvbmZpZy0+ dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cyAqIHNpemVvZihpbnQpOworCXNobWVt X3B0ciArPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSAqIHNp emVvZihUcmFja1RhYmxlTXV0YXRpb25FbnRyeSk7CisKKwl0cmFja190YWJsZV9tdXRhdGlvbl9z aG1lbS0+cXVlcnlfY2FjaGUgPSAoUXVlcnlQYXJzZUNhY2hlICopc2htZW1fcHRyOworCisJLyog SW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCisJdGFibGVfbWFwX2luaXQodHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW0tPnRhYmxlX21hcCwKKwkJCQkgICBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVf bXV0YXRpb25fdGFibGVfYnVja2V0cywKKwkJCQkgICBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVf bXV0YXRpb25fdGFibGVfc2l6ZSk7CisKKwlxdWVyeV9jYWNoZV9pbml0KHRyYWNrX3RhYmxlX211 dGF0aW9uX3NobWVtLT5xdWVyeV9jYWNoZSwKKwkJCQkJIHBvb2xfY29uZmlnLT50cmFja190YWJs ZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzLAorCQkJCQkgcG9vbF9jb25maWctPnRyYWNrX3RhYmxl X211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemUpOworCisJLyogSW5pdGlhbGl6ZSBnbG9i YWwgc3RhdGUgKi8KKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuaW5pdGlhbGl6 ZWQgPSB0cnVlOworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5jdXJyZW50X3R0 bF91cyA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RFRkFVTFRfVFRMX1VTOworCWdldF9jdXJyZW50 X3RpbWUoJnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS50dGxfbGFzdF91cGRhdGVk KTsKKwlnZXRfY3VycmVudF90aW1lKCZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUu bGFzdF9jbGVhbnVwX3RpbWUpOworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5n bG9iYWxfY29sZF9zdGFydF91bnRpbC50dl9zZWMgPSAwOworCXRyYWNrX3RhYmxlX211dGF0aW9u X3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl91c2VjID0gMDsKKwl0cmFj a190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuc3RhdHNfcXVlcmllc19jaGVja2VkID0gMDsK Kwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuc3RhdHNfZm9yY2VkX3ByaW1hcnkg PSAwOworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5zdGF0c19hbGxvd2VkX3Jl cGxpY2EgPSAwOworCisJZXJlcG9ydChMT0csCisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRh dGlvbjogaW5pdGlhbGl6ZWQgd2l0aCAlenUgYnl0ZXMgc2hhcmVkIG1lbW9yeSIsCisJCQkJCXNo bWVtX3NpemUpKSk7CisjZW5kaWYKK30KKwordm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlv bl9jaGlsZF9pbml0KHZvaWQpCit7CisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFs YW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMIHx8IHRyYWNrX3RhYmxl X211dGF0aW9uX3NobWVtID09IE5VTEwpCisJCXJldHVybjsKKworCWdldF9jdXJyZW50X3RpbWUo JnByb2Nlc3Nfc3RhcnRfdGltZSk7CisJY29sZF9zdGFydF9pbml0aWFsaXplZCA9IHRydWU7CisK KwllcmVwb3J0KERFQlVHMSwKKwkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiBjaGls ZCBpbml0aWFsaXplZCwgY29sZCBzdGFydCBwZXJpb2QgJWQgbXMiLAorCQkJCQlwb29sX2NvbmZp Zy0+dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbikpKTsKK30KKworYm9v bAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9pbl9jb2xkX3N0YXJ0KHZvaWQpCit7CisJc3Ry dWN0IHRpbWV2YWwgbm93OworCWludDY0IGVsYXBzZWRfbXM7CisKKwlpZiAocG9vbF9jb25maWct PmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9XX0RNTF9BREFQVElWRV9HTE9C QUwgfHwgdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNl OworCisJaWYgKHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1 cmF0aW9uIDw9IDApCisJCXJldHVybiBmYWxzZTsKKworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7 CisKKwkvKiBDaGVjayBmb3Igd2F0Y2hkb2ctdHJpZ2dlcmVkIGdsb2JhbCBjb2xkIHN0YXJ0IGZp cnN0ICovCisJaWYgKHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29s ZF9zdGFydF91bnRpbC50dl9zZWMgIT0gMCAmJgorCQllbGFwc2VkX3VzKCZub3csICZ0cmFja190 YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuZ2xvYmFsX2NvbGRfc3RhcnRfdW50aWwpID4gMCkK Kwl7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qIENoZWNrIHBlci1wcm9jZXNzIGNvbGQgc3Rh cnQgKi8KKwlpZiAoIWNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQpCisJCXJldHVybiBmYWxzZTsKKwor CWVsYXBzZWRfbXMgPSBlbGFwc2VkX3VzKCZwcm9jZXNzX3N0YXJ0X3RpbWUsICZub3cpIC8gMTAw MDsKKworCWlmIChlbGFwc2VkX21zIDwgcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9u X2NvbGRfc3RhcnRfZHVyYXRpb24pCisJeworCQllcmVwb3J0KERFQlVHMiwKKwkJCQkoZXJybXNn KCJ0cmFja190YWJsZV9tdXRhdGlvbjogaW4gY29sZCBzdGFydCAoJWxkLyVkIG1zKSIsCisJCQkJ CQkobG9uZyllbGFwc2VkX21zLCBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fY29s ZF9zdGFydF9kdXJhdGlvbikpKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNl OworfQorCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3RyaWdnZXJfZ2xvYmFsX2Nv bGRfc3RhcnQodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50IGR1cmF0aW9uX21z OworCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBE TEJPV19ETUxfQURBUFRJVkVfR0xPQkFMIHx8IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09 IE5VTEwpCisJCXJldHVybjsKKworCWR1cmF0aW9uX21zID0gcG9vbF9jb25maWctPnRyYWNrX3Rh YmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb247CisJaWYgKGR1cmF0aW9uX21zIDw9IDAp CisJCXJldHVybjsKKworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisJdHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsID0gbm93OworCXRyYWNr X3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl9z ZWMgKz0gZHVyYXRpb25fbXMgLyAxMDAwOworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5z dGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl91c2VjICs9IChkdXJhdGlvbl9tcyAlIDEw MDApICogMTAwMDsKKwlpZiAodHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLmdsb2Jh bF9jb2xkX3N0YXJ0X3VudGlsLnR2X3VzZWMgPj0gMTAwMDAwMCkKKwl7CisJCXRyYWNrX3RhYmxl X211dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl9zZWMgKz0K KwkJCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91 bnRpbC50dl91c2VjIC8gMTAwMDAwMDsKKwkJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0 YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsLnR2X3VzZWMgJT0KKwkJCTEwMDAwMDA7CisJfQor CisJZXJlcG9ydChMT0csCisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogZW50ZXJp bmcgZ2xvYmFsIGNvbGQgc3RhcnQgZm9yICVkIG1zIiwKKwkJCQkJZHVyYXRpb25fbXMpKSk7Cit9 CisKK2Jvb2wKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfaXNfc3RhbGUoaW50IHRh YmxlX29pZCwgaW50IGRib2lkKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFw OworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwl1aW50NjQgdHRsX3VzOworCXVpbnQzMiBoYXNoOwor CWludCBpZHg7CisJYm9vbCBpc19zdGFsZSA9IGZhbHNlOworCisJaWYgKHBvb2xfY29uZmlnLT5k aXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFM IHx8IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsK KworCWlmICh0YWJsZV9vaWQgPD0gMCB8fCBkYm9pZCA8PSAwKQorCXsKKwkJaXNfc3RhbGUgPSB0 cnVlOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwltYXAgPSB0cmFja190YWJsZV9tdXRh dGlvbl9zaG1lbS0+dGFibGVfbWFwOworCWhhc2ggPSBmbnYxYV9oYXNoX3RhYmxlX2tleSh0YWJs ZV9vaWQsIGRib2lkKTsKKworCXRhYmxlX21hcF9sb2NrKCk7CisKKwlpZHggPSB0YWJsZV9tYXBf bG9va3VwKG1hcCwgdGFibGVfb2lkLCBkYm9pZCwgaGFzaCk7CisJaWYgKGlkeCAhPSBUUkFDS19U QUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJVHJhY2tUYWJsZU11dGF0aW9uRW50 cnkgKmVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCQlnZXRfY3VycmVudF90aW1l KCZub3cpOworCQl0dGxfdXMgPSB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuY3Vy cmVudF90dGxfdXM7CisKKwkJaW50NjQgZWxhcHNlZCA9IGVsYXBzZWRfdXMoJmVudHJpZXNbaWR4 XS5sYXN0X3dyaXRlX3RpbWUsICZub3cpOworCQlpc19zdGFsZSA9IChlbGFwc2VkIDwgKGludDY0 KXR0bF91cyk7CisKKwkJZXJlcG9ydChERUJVRzIsCisJCQkJKGVycm1zZygidHJhY2tfdGFibGVf bXV0YXRpb246IHRhYmxlIG9pZCAlZCAoZGJvaWQgJWQpIGVsYXBzZWQ9JWxkIHVzLCB0dGw9JWx1 IHVzLCBzdGFsZT0lZCIsCisJCQkJCQl0YWJsZV9vaWQsIGRib2lkLCAobG9uZyllbGFwc2VkLCAo dW5zaWduZWQgbG9uZyl0dGxfdXMsIGlzX3N0YWxlKSkpOworCX0KKworCXRhYmxlX21hcF91bmxv Y2soKTsKKwordXBkYXRlX3N0YXRzOgorCS8qIFVwZGF0ZSBzdGF0aXN0aWNzIC0gc2tpcCBpZiBz aG1lbSBub3QgYXZhaWxhYmxlICovCisJaWYgKHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtICE9 IE5VTEwpCisJeworCQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmdHJhY2tfdGFibGVfbXV0YXRpb25f c2htZW0tPnN0YXRlLnN0YXRzX3F1ZXJpZXNfY2hlY2tlZCwgMSk7CisJCWlmIChpc19zdGFsZSkK KwkJCV9fc3luY19mZXRjaF9hbmRfYWRkKCZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3Rh dGUuc3RhdHNfZm9yY2VkX3ByaW1hcnksIDEpOworCQllbHNlCisJCQlfX3N5bmNfZmV0Y2hfYW5k X2FkZCgmdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLnN0YXRzX2FsbG93ZWRfcmVw bGljYSwgMSk7CisJfQorCisJcmV0dXJuIGlzX3N0YWxlOworfQorCit2b2lkCitwb29sX3RyYWNr X3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVzX3dyaXR0ZW4oY29uc3QgaW50ICp0YWJsZV9vaWRz LCBpbnQgbnVtX3RhYmxlcywgaW50IGRib2lkKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkhhc2hU YWJsZSAqbWFwOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQgaTsKKworCWlmIChwb29sX2Nv bmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gRExCT1dfRE1MX0FEQVBUSVZF X0dMT0JBTCB8fCB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbSA9PSBOVUxMKQorCQlyZXR1cm47 CisKKwlpZiAobnVtX3RhYmxlcyA8PSAwIHx8IHRhYmxlX29pZHMgPT0gTlVMTCB8fCBkYm9pZCA8 PSAwKQorCQlyZXR1cm47CisKKwltYXAgPSB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFi bGVfbWFwOworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisKKwl0YWJsZV9tYXBfbG9jaygpOwor CisJLyogUGVyaW9kaWNhbGx5IGNsZWFuIHVwIGV4cGlyZWQgZW50cmllcyAqLworCWlmIChtYXAt Pm51bV9lbnRyaWVzID4gbWFwLT5tYXhfZW50cmllcyAqIDMgLyA0KQorCXsKKwkJLyogTGltaXQg Y2xlYW51cCBmcmVxdWVuY3kgdG8gYXZvaWQgTyhOKSBzY2FuIG9uIGV2ZXJ5IHdyaXRlICovCisJ CS8qIDEwMG1zIGludGVydmFsICovCisJCWlmIChlbGFwc2VkX3VzKCZ0cmFja190YWJsZV9tdXRh dGlvbl9zaG1lbS0+c3RhdGUubGFzdF9jbGVhbnVwX3RpbWUsICZub3cpID4gMTAwMDAwKQorCQl7 CisJCQl0YWJsZV9tYXBfY2xlYW51cF9leHBpcmVkKG1hcCwgdHJhY2tfdGFibGVfbXV0YXRpb25f c2htZW0tPnN0YXRlLmN1cnJlbnRfdHRsX3VzKTsKKwkJCXRyYWNrX3RhYmxlX211dGF0aW9uX3No bWVtLT5zdGF0ZS5sYXN0X2NsZWFudXBfdGltZSA9IG5vdzsKKwkJfQorCX0KKworCWZvciAoaSA9 IDA7IGkgPCBudW1fdGFibGVzOyBpKyspCisJeworCQl1aW50MzIgaGFzaDsKKwkJaW50IHRhYmxl X29pZCA9IHRhYmxlX29pZHNbaV07CisKKwkJaWYgKHRhYmxlX29pZCA+IDApCisJCXsKKwkJCWhh c2ggPSBmbnYxYV9oYXNoX3RhYmxlX2tleSh0YWJsZV9vaWQsIGRib2lkKTsKKwkJCXRhYmxlX21h cF9pbnNlcnQobWFwLCB0YWJsZV9vaWQsIGRib2lkLCBoYXNoLCAmbm93KTsKKwkJfQorCX0KKwor CXRhYmxlX21hcF91bmxvY2soKTsKK30KKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRv IG1hcmsgYSBzaW5nbGUgdGFibGUgYXMgd3JpdHRlbgorICovCit2b2lkCitwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX21hcmtfdGFibGVfd3JpdHRlbihpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQp Cit7CisJaWYgKHRhYmxlX29pZCA+IDAgJiYgZGJvaWQgPiAwKQorCXsKKwkJY29uc3QgaW50IHRh Ymxlc1sxXSA9IHsgdGFibGVfb2lkIH07CisJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fbWFy a190YWJsZXNfd3JpdHRlbih0YWJsZXMsIDEsIGRib2lkKTsKKwl9Cit9CisKK3ZvaWQKK3Bvb2xf dHJhY2tfdGFibGVfbXV0YXRpb25fdXBkYXRlX3R0bCh1aW50NjQgZGVsYXlfdXMpCit7CisJdWlu dDY0IG5ld190dGw7CisKKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29u X3dyaXRlICE9IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgfHwgdHJhY2tfdGFibGVfbXV0YXRp b25fc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogQ2FsY3VsYXRlIG5ldyBUVEw6IGRl bGF5ICogZmFjdG9yLCB3aXRoIG1pbmltdW0gb2YgZGVmYXVsdCBUVEwgKi8KKwluZXdfdHRsID0g KHVpbnQ2NCkoZGVsYXlfdXMgKiBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdHRs X2ZhY3Rvcik7CisJaWYgKG5ld190dGwgPCBUUkFDS19UQUJMRV9NVVRBVElPTl9ERUZBVUxUX1RU TF9VUykKKwkJbmV3X3R0bCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RFRkFVTFRfVFRMX1VTOwor CisJLyogTWF4aW11bSBUVEwgb2YgMSBob3VyICovCisJaWYgKG5ld190dGwgPiAzNjAwVUxMICog MTAwMDAwMFVMTCkKKwkJbmV3X3R0bCA9IDM2MDBVTEwgKiAxMDAwMDAwVUxMOworCisJdHJhY2tf dGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLmN1cnJlbnRfdHRsX3VzID0gbmV3X3R0bDsKKwln ZXRfY3VycmVudF90aW1lKCZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUudHRsX2xh c3RfdXBkYXRlZCk7CisKKwllcmVwb3J0KERFQlVHMSwKKwkJCShlcnJtc2coInRyYWNrX3RhYmxl X211dGF0aW9uOiB1cGRhdGVkIFRUTCB0byAlbHUgdXMgKGRlbGF5PSVsdSB1cywgZmFjdG9yPSUu MWYpIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpbmV3X3R0bCwgKHVuc2lnbmVkIGxvbmcpZGVsYXlf dXMsCisJCQkJCXBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yKSkp OworfQorCitib29sCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dldF9jYWNoZWRfcGFyc2Uo dWludDY0IGhhc2gsIGJvb2wgKmlzX3dyaXRlLAorCQkJCQkJCQkgY2hhciB0YWJsZV9uYW1lc1td W1RSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX05BTUVfTEVOXSwKKwkJCQkJCQkJIGludCAqbnVt X3RhYmxlcykKK3sKKwlRdWVyeVBhcnNlQ2FjaGUgKmNhY2hlOworCWludCBpZHg7CisJYm9vbCBm b3VuZCA9IGZhbHNlOworCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9v bl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMIHx8IHRyYWNrX3RhYmxlX211dGF0 aW9uX3NobWVtID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCWNhY2hlID0gdHJhY2tfdGFi bGVfbXV0YXRpb25fc2htZW0tPnF1ZXJ5X2NhY2hlOworCisJcXVlcnlfY2FjaGVfbG9jaygpOwor CisJaWR4ID0gcXVlcnlfY2FjaGVfbG9va3VwKGNhY2hlLCBoYXNoKTsKKwlpZiAoaWR4ICE9IFRS QUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJeworCQlRdWVyeVBhcnNlRW50cnkg KmVudHJpZXMgPSBRVUVSWV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsKKwkJaW50IGk7CisKKwkJKmlz X3dyaXRlID0gZW50cmllc1tpZHhdLmlzX3dyaXRlOworCQkqbnVtX3RhYmxlcyA9IGVudHJpZXNb aWR4XS5udW1fdGFibGVzOworCisJCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzW2lkeF0ubnVtX3Rh YmxlcyAmJiBpIDwgVFJBQ0tfVEFCTEVfTVVUQVRJT05fTUFYX1RBQkxFU19QRVJfUVVFUlk7IGkr KykKKwkJeworCQkJc3RybGNweSh0YWJsZV9uYW1lc1tpXSwgZW50cmllc1tpZHhdLnRhYmxlX25h bWVzW2ldLCBUUkFDS19UQUJMRV9NVVRBVElPTl9UQUJMRV9OQU1FX0xFTik7CisJCX0KKworCQkv KiBNb3ZlIHRvIGZyb250IG9mIExSVSAqLworCQlxdWVyeV9jYWNoZV9scnVfdG91Y2goY2FjaGUs IGlkeCk7CisJCWZvdW5kID0gdHJ1ZTsKKwl9CisKKwlxdWVyeV9jYWNoZV91bmxvY2soKTsKKwor CXJldHVybiBmb3VuZDsKK30KKwordm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9jYWNo ZV9wYXJzZSh1aW50NjQgaGFzaCwgYm9vbCBpc193cml0ZSwKKwkJCQkJCQljb25zdCBjaGFyIHRh YmxlX25hbWVzW11bVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfTkFNRV9MRU5dLAorCQkJCQkJ CWludCBudW1fdGFibGVzKQoreworCVF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGU7CisJaW50ICpidWNr ZXRzOworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50cmllczsKKwlpbnQgaWR4OworCWludCBidWNrZXQ7 CisKKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERM Qk9XX0RNTF9BREFQVElWRV9HTE9CQUwgfHwgdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gPT0g TlVMTCkKKwkJcmV0dXJuOworCisJY2FjaGUgPSB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+ cXVlcnlfY2FjaGU7CisKKwlxdWVyeV9jYWNoZV9sb2NrKCk7CisKKwkvKiBDaGVjayBpZiBhbHJl YWR5IGV4aXN0cyAqLworCWlkeCA9IHF1ZXJ5X2NhY2hlX2xvb2t1cChjYWNoZSwgaGFzaCk7CisJ aWYgKGlkeCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJcXVl cnlfY2FjaGVfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgZW50 cnkgKG1heSBldmljdCBMUlUpICovCisJaWR4ID0gcXVlcnlfY2FjaGVfYWxsb2NfZW50cnkoY2Fj aGUpOworCWlmIChpZHggPT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwl7 CisJCXF1ZXJ5X2NhY2hlX3VubG9jaygpOworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycm1z ZygidHJhY2tfdGFibGVfbXV0YXRpb246IGZhaWxlZCB0byBhbGxvY2F0ZSBxdWVyeSBjYWNoZSBl bnRyeSIpKSk7CisJCXJldHVybjsKKwl9CisKKwllbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5UUklF UyhjYWNoZSk7CisJYnVja2V0cyA9IFFVRVJZX0NBQ0hFX0JVQ0tFVFMoY2FjaGUpOworCisJLyog RmlsbCBpbiBlbnRyeSAqLworCWVudHJpZXNbaWR4XS5xdWVyeV9oYXNoID0gaGFzaDsKKwllbnRy aWVzW2lkeF0uaXNfd3JpdGUgPSBpc193cml0ZTsKKwllbnRyaWVzW2lkeF0ubnVtX3RhYmxlcyA9 IChudW1fdGFibGVzID4gVFJBQ0tfVEFCTEVfTVVUQVRJT05fTUFYX1RBQkxFU19QRVJfUVVFUlkp ID8KKwkJCQkJCQkgIFRSQUNLX1RBQkxFX01VVEFUSU9OX01BWF9UQUJMRVNfUEVSX1FVRVJZIDog bnVtX3RhYmxlczsKKworCXsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzW2lk eF0ubnVtX3RhYmxlczsgaSsrKQorCQl7CisJCQlzdHJsY3B5KGVudHJpZXNbaWR4XS50YWJsZV9u YW1lc1tpXSwgdGFibGVfbmFtZXNbaV0sIFRSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX05BTUVf TEVOKTsKKwkJfQorCX0KKworCS8qIEluc2VydCBpbnRvIGhhc2ggYnVja2V0ICovCisJYnVja2V0 ID0gaGFzaCAlIGNhY2hlLT5udW1fYnVja2V0czsKKwllbnRyaWVzW2lkeF0ubmV4dCA9IGJ1Y2tl dHNbYnVja2V0XTsKKwlidWNrZXRzW2J1Y2tldF0gPSBpZHg7CisKKwkvKiBBZGQgdG8gTFJVIGxp c3QgKi8KKwlxdWVyeV9jYWNoZV9scnVfYWRkKGNhY2hlLCBpZHgpOworCisJcXVlcnlfY2FjaGVf dW5sb2NrKCk7Cit9CisKK3VpbnQ2NAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9ub3JtYWxp emVfYW5kX2hhc2goY29uc3QgY2hhciAqcXVlcnkpCit7CisJY2hhciBub3JtYWxpemVkWzgxOTJd OworCXNpemVfdCBsZW47CisKKwlpZiAocXVlcnkgPT0gTlVMTCB8fCBxdWVyeVswXSA9PSAnXDAn KQorCQlyZXR1cm4gMDsKKworCWxlbiA9IG5vcm1hbGl6ZV9xdWVyeShxdWVyeSwgbm9ybWFsaXpl ZCwgc2l6ZW9mKG5vcm1hbGl6ZWQpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCisJ cmV0dXJuIGZudjFhX2hhc2hfNjQobm9ybWFsaXplZCwgbGVuKTsKK30KLS0gCjIuNTIuMAoK --0000000000006a98c6064a9cca7b--