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 1voK1j-001KbQ-02 for pgpool-hackers@arkaria.postgresql.org; Fri, 06 Feb 2026 11:29:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1voK1g-003ZDx-2K for pgpool-hackers@arkaria.postgresql.org; Fri, 06 Feb 2026 11:29:28 +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 1voK1g-003ZDp-15 for pgpool-hackers@lists.postgresql.org; Fri, 06 Feb 2026 11:29:28 +0000 Received: from mail-yx1-xb132.google.com ([2607:f8b0:4864:20::b132]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1voK1c-00000001Lxa-3yTX for pgpool-hackers@lists.postgresql.org; Fri, 06 Feb 2026 11:29:27 +0000 Received: by mail-yx1-xb132.google.com with SMTP id 956f58d0204a3-649d200ac43so1670175d50.0 for ; Fri, 06 Feb 2026 03:29:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770377362; cv=none; d=google.com; s=arc-20240605; b=ArKyHcal7VvouQ6FUV1WWJE2jKhDaVBRgRDs386NUD5+m3DmeRCTboG459+JHWkYf1 beO6+Y4Z7avSkY7GF6rSpd4F1jqBoq+BMqAupqWAaagvh91eGRaMg/+3uQbCG2uLT+Mv ICFQtZu+8olcb/IWNBLtrKsce6NdtojwerXCgwIePx7EYh9bzffXfMB83S7sekxAKW1G 5lwZ86sDwzBOr0GMV5qWA12luc7v2Opl8Cdr7twzIfRQIwvkP7KY7bEu/fn7WjOH8dhs glQCFQ61a8A1CawbuknS7iJrmT6aWifLS4gKvmy+mMMtjas2njv9zVcYenFteaENZjZc 2t9w== 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=Hq0fgl6P2qrkkMfZy+VlhybFv4GWC6b8ihWEVsjuRKA=; fh=m3oiE62fRN5J1XaE+5vpHZRIgCyFefxVI0mFw3d8yxA=; b=L9KmWbEKm4BAmT4c2vjfNbNYoOrm32DB9pYWuhPIT508FuQAizF/erSHV9bzYI5tHR /sM0oR+OWNJJCajxXH/q0V78Noc62YSzRVWf0VJQidRQbDMDNGq28dQV1EH81x1Lww+f feojAdIcyuq/p0rCZ55O/Qrui5+N3Yrn4fC78davIAaVrar/PiukraVesXauaC2bv14N rTPxytViVp6q9Yi7ENXb7Wh06NRGVXWtzKdkI3V/fch5d2/TFvwn266ck95OMfVpNpT8 6aa3h4tvFZI74Sd7kwlRPqH+7BLgf9jnwF3+2eV5FnbH8YvDkg/qxdQifI7whYUBrB4c pEoQ==; 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=1770377362; x=1770982162; 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=Hq0fgl6P2qrkkMfZy+VlhybFv4GWC6b8ihWEVsjuRKA=; b=IAO7vnnWRiFKdl8IIYv5Xvo6twScCIExk650O2NrrmUGbphvIPCBINmLsdzvkce5at FrRB7CHQjfOXaTLei6WktOJwVp03kB4yZkTPhsWqvLp7DXc6gGxSTCIBWrLeUPCJeLp/ D1wZZBGLupjvLwNa23r4o7BorAR5baXw8vpKpmtki88U7AlXyyirIPz48qRGG8TWKVid 4sTkcrwhiiUsKfTkVKqf92A5NohT/BqACG4lILksgwXWyweINBQ2NTPKnT4w6OzgTgxj Gesd2QUnD4eNcq60K3zU+ZI0TzZPpG41IOp1ImmH7s3nSHURxUli6wjpeptlrd7wIa0G 8vYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770377362; x=1770982162; 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=Hq0fgl6P2qrkkMfZy+VlhybFv4GWC6b8ihWEVsjuRKA=; b=EteKMdRFkZgJDYRNf04Jn4eCHTQqfWU8VXKGkRmjtoCYI55nszEE3yqQoOjl3EWHSW R2zjmk+xlPfFoWllUhTRrfmbkn6Iu2fdIt+YJ605Ck+dc7XrKF0ZnxU6s6n7RV846OfG ZywBvcrlF2sik6l2q97mKvFPpULRrWpc2NCc2LwqDyYV23VspNxz8XeFXtja3EX6kCoe Q+eRDEv+LSDTMh3iEPnkN+XM3KkmZhJZbcVhHdZ9+R3Xg3tqD7MBreGkvadaFvPb/l6v IpKA++2J7XhrihPrp9mQx98RdMr8moDuv8w/X1eD0Kn48RFpy0KMGsgKDR1KX5SwQGuB n/Vw== X-Gm-Message-State: AOJu0YwwB77PfrtDhYk8TvT7udCBubNdh/mumqNSWwLFNn9Npy6n/kRr YYwUUs/LfhcS0rYEAU4Eo5+L4wp4sTSuNjDBfIZrPh0Ol4bcd9PISqo8Ti8CHp4TnSw3bsosc2v ++PLVtbkDOclfKzk8nCf2DwINSb1ttO5fBtn0qqIRansVw6HjTQo35tdXMQ== X-Gm-Gg: AZuq6aKR4tWDFaTWqPCmtuZZxLBaEXhuQXyk292OU+fKIvMmMuYlzONJbBKa1I1QdTO s+o48Ef4UhaMveFirz+W820NX+3hc3Dh3bJ232/WGrlgZpeV8Lg4b5wCidvegFl0XOmkuKAxH2z q5QQYY4SQA2pnl+ZIrlXDuAvZZx8o/3CCmGp6jWJS/zoZ3yR1jmmBjrmMqCmszY5usxhSBIriK7 PIzAVjPug6lUOf26xlnTHHZES8gEKLA5sSNzmoQxAJ0kIGMQ6hsg8iuAILmFhaZQS0GCrCzFvmM MZRJ2wWcjr4NFmXCGUxTTZMmTDteoDrOGBDToz/GpoFgQewWBGAIggiJZIiyl4ITuhSkdLZehJG GcMVEJfMw4qf5u7mt5yXfiK7xWByAqD7oUoeS5BqzJpYO+Lr9x7ei9MjL1czF X-Received: by 2002:a53:e94e:0:b0:649:b226:5511 with SMTP id 956f58d0204a3-649f1f52e71mr1609680d50.58.1770377361939; Fri, 06 Feb 2026 03:29:21 -0800 (PST) MIME-Version: 1.0 References: <20260130.170950.551399957723794225.ishii@postgresql.org> <20260203.164353.362943818466117773.ishii@postgresql.org> <20260204.082343.1732190257543250666.ishii@postgresql.org> In-Reply-To: <20260204.082343.1732190257543250666.ishii@postgresql.org> From: Nadav Shatz Date: Fri, 6 Feb 2026 13:29:10 +0200 X-Gm-Features: AZwV_Qj2qWgRFoqf3uLvuHYUphskLVxSXrQ9Wr7wXuAyTQ9zQdp1hlLPIC5e9V0 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="000000000000c79ec0064a261908" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c79ec0064a261908 Content-Type: multipart/alternative; boundary="000000000000c79ebf064a261906" --000000000000c79ebf064a261906 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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 changes an= d > new > >> naming. > > > > I still think "memory_map" is too generic. Anything put on memory for > > data mapping could be called "memory map". I recommend to change the > > 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: 200= 0) > > - 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 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 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 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 UPDATE is > 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 > --=20 Nadav Shatz Tailor Brands | CTO --000000000000c79ebf064a261906 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi=C2=A0Tatsuo,

Thank you for all the g= reat comments and questions! I took under consideration all of them either = adding=C2=A0support/tests or detailing the limitations in the docs.

Let me know what you=C2=A0think of the latest patch attac= hed here

On Wed, Feb 4, 2026 at 1:23=E2=80=AFAM = Tatsuo Ishii <ishii@postgresql.o= rg> wrote:
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.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 m= emory for
> data mapping could be called "memory map". I recommend to ch= ange the
> name to more feature specific one: What about replacing "memory_m= ap"
> with "track_table_mutation"? It's a little bit longer na= me 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: 20= 00)
> - 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: 204= 8)
> - 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.=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 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 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 UPDATE is
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
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--000000000000c79ebf064a261906-- --000000000000c79ec0064a261908 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_mlasynom0 RnJvbSA0MDNjMGIwM2UwNTBkZDNhOTgyODBkNDkwOGYwYzgyNzM1YmIxOTQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogVHVlLCA2IEphbiAyMDI2IDEyOjQxOjUwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gRmVh dHVyZTogYWRkIGluLW1lbW9yeSB0YWJsZSB0cmFja2luZyB0byBwcmV2ZW50IHN0YWxlIHJlYWRz CiBmcm9tIHJlcGxpY2FzCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFp bjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpJbXBsZW1l bnQgInRyYWNrIHRhYmxlIG11dGF0aW9uIiBmZWF0dXJlIHRoYXQgdHJhY2tzIHJlY2VudGx5LXdy aXR0ZW4gZGF0YWJhc2UKdGFibGVzIGluIHNoYXJlZCBtZW1vcnkgdG8gcHJldmVudCBzdGFsZSBy ZWFkcyBkdXJpbmcgcmVwbGljYXRpb24gbGFnLgpXaGVuIGEgd3JpdGUgKElOU0VSVC9VUERBVEUv REVMRVRFL1RSVU5DQVRFL01FUkdFKSBvY2N1cnMgb24gYSB0YWJsZSwgdGhhdCB0YWJsZQppcyBt YXJrZWQgYXMgInN0YWxlIiBmb3IgYSBjb25maWd1cmFibGUgVFRMIHBlcmlvZC4gQW55IFNFTEVD VCBvbiBhIHN0YWxlCnRhYmxlIHdpdGhpbiB0aGUgVFRMIHdpbmRvdyBpcyByb3V0ZWQgdG8gcHJp bWFyeSBpbnN0ZWFkIG9mIHJlcGxpY2EuCgpLZXkgZmVhdHVyZXM6Ci0gU2hhcmVkIG1lbW9yeSBo YXNoIHRhYmxlIGZvciB0cmFja2luZyB0YWJsZSBtdXRhdGlvbnMgd2l0aCBUVEwKLSBRdWVyeSBw YXJzZSBjYWNoZSB3aXRoIExSVSBldmljdGlvbiBmb3IgcGVyZm9ybWFuY2UKLSBDb2xkIHN0YXJ0 IHByb3RlY3Rpb24gKHJvdXRlcyBhbGwgcXVlcmllcyB0byBwcmltYXJ5IGluaXRpYWxseSkKLSBB dXRvbWF0aWMgVFRMIGNhbGN1bGF0aW9uOiByZXBsaWNhdGlvbl9kZWxheSDDlyBjb25maWd1cmFi bGUgZmFjdG9yCi0gUGVyLXRhYmxlIHN0YWxlbmVzcyB0cmFja2luZyB3aXRoIG1pY3Jvc2Vjb25k IHByZWNpc2lvbgotIFdJVEggY2xhdXNlIChDVEUpIHN1cHBvcnQgZm9yIGRhdGEtbW9kaWZ5aW5n IENURXMKLSBXYXRjaGRvZyBpbnRlZ3JhdGlvbjogZ2xvYmFsIGNvbGQgc3RhcnQgb24gbGVhZGVy IGNoYW5nZQoKVHJhY2tlZCBzdGF0ZW1lbnQgdHlwZXM6Ci0gSU5TRVJULCBVUERBVEUsIERFTEVU RSAoaW5jbHVkaW5nIFJFVFVSTklORykKLSBUUlVOQ0FURSAoaW5jbHVkaW5nIG11bHRpcGxlIHRh YmxlcykKLSBNRVJHRSAoUG9zdGdyZVNRTCAxNSspCi0gV0lUSCBjbGF1c2VzIGNvbnRhaW5pbmcg SU5TRVJUL1VQREFURS9ERUxFVEUKCk5ldyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6Ci0gdHJh Y2tfdGFibGVfbXV0YXRpb25fZW5hYmxlZDogRW5hYmxlL2Rpc2FibGUgdGhlIGZlYXR1cmUgKGRl ZmF1bHQ6IG9mZikKLSB0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yOiBUVEwgbXVsdGlw bGllciBmb3IgcmVwbGljYXRpb24gZGVsYXkgKGRlZmF1bHQ6IDUuMCkKLSB0cmFja190YWJsZV9t dXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uOiBDb2xkIHN0YXJ0IHBlcmlvZCBpbiBtcyAoZGVm YXVsdDogMjAwMCkKLSB0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzOiBIYXNoIGJ1 Y2tldHMgZm9yIHRhYmxlIG1hcCAoZGVmYXVsdDogMTAyNCkKLSB0cmFja190YWJsZV9tdXRhdGlv bl90YWJsZV9zaXplOiBNYXggdHJhY2tlZCB0YWJsZXMgKGRlZmF1bHQ6IDIwNDgpCi0gdHJhY2tf dGFibGVfbXV0YXRpb25fcXVlcnlfYnVja2V0czogSGFzaCBidWNrZXRzIGZvciBxdWVyeSBjYWNo ZSAoZGVmYXVsdDogMjA0OCkKLSB0cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNo ZV9zaXplOiBNYXggY2FjaGVkIHF1ZXJpZXMgKGRlZmF1bHQ6IDEwMDAwKQoKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvYWRiYWxhbmNl LnNnbWwKaW5kZXggZWUxOWZhYmViYWIyMjEwY2Q0YWJlNTlhNzExYTAzNmFjMGFjODk0My4uZjIz NDEzNDAzMDViODlkOTBkOGY4M2Y3NDhlOTk1ZjVjZjhkZjEyMyAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL2xvYWRiYWxhbmNlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xvYWRiYWxhbmNlLnNn bWwKQEAgLTExOTMsNCArMTE5MywyNzMgQEAgZG1sX2FkYXB0aXZlX29iamVjdF9yZWxhdGlvbnNo aXBfbGlzdCA9ICd0YWJsZV8xOnRhYmxlXzInCiAKICAgPC92YXJpYWJsZWxpc3Q+CiAgPC9zZWN0 Mj4KKworIDxzZWN0MiBpZD0icnVudGltZS1jb25maWctdGFibGUtbXV0YXRpb24tbWFwIj4KKyAg PHRpdGxlPlRhYmxlIE11dGF0aW9uIE1hcCBDb25maWd1cmF0aW9uIChMYWdsZXNzIFJlcGxpY2Eg UmVhZHMpPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRoZXNlIHBhcmFtZXRlcnMgY29uZmlndXJl IHRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlLCB3aGljaCB0cmFja3MgcmVjZW50bHkg d3JpdHRlbiB0YWJsZXMKKyAgIHRvIHByZXZlbnQgc3RhbGUgcmVhZHMgZnJvbSByZXBsaWNhIG5v ZGVzIGR1cmluZyByZXBsaWNhdGlvbiBsYWcuIFRoaXMgaW1wbGVtZW50cyB0aGUKKyAgICJsYWds ZXNzIiBhcmNoaXRlY3R1cmUgcGF0dGVybiBmb3IgZGlzdHJpYnV0ZWQgc3lzdGVtcyB3aXRoIHJl YWQgcmVwbGljYXMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gYSB0YWJsZSBpcyBt b2RpZmllZCAoSU5TRVJUL1VQREFURS9ERUxFVEUpLCBpdCBpcyBtYXJrZWQgYXMgInN0YWxlIiBm b3IgYSBUVEwgcGVyaW9kCisgICAoPGxpdGVyYWw+cmVwbGljYXRpb25fZGVsYXkgKiB0cmFja190 YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yPC9saXRlcmFsPikuIEFueSBTRUxFQ1QgcXVlcmllcyBv biBzdGFsZSB0YWJsZXMgYXJlIHJvdXRlZAorICAgdG8gdGhlIHByaW1hcnkgbm9kZSBpbnN0ZWFk IG9mIHJlcGxpY2FzLCBlbnN1cmluZyByZWFkLWFmdGVyLXdyaXRlIGNvbnNpc3RlbmN5LgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGlzIGZlYXR1cmUgcmVxdWlyZXMgPHhyZWYgbGlua2Vu ZD0iZ3VjLXJlcGxpY2F0aW9uLWRlbGF5LXNvdXJjZS1jbWQiPiB0byBiZSBjb25maWd1cmVkCisg ICBmb3IgbW9uaXRvcmluZyByZXBsaWNhdGlvbiBkZWxheSBmcm9tIHJlcGxpY2FzLgorICA8L3Bh cmE+CisKKyAgPHdhcm5pbmc+CisgICA8cGFyYT4KKyAgICBFbmFibGluZyB0aGUgdHJhY2sgdGFi bGUgbXV0YXRpb24gZmVhdHVyZSBpbmNyZWFzZXMgc2hhcmVkIG1lbW9yeSBjb25zdW1wdGlvbi4g V2l0aCBkZWZhdWx0IHNldHRpbmdzLAorICAgIHRoZSBmZWF0dXJlIHJlcXVpcmVzIGFwcHJveGlt YXRlbHkgNi40IE1CIG9mIHNoYXJlZCBtZW1vcnkgKDAuMSBNQiBmb3IgdGFibGUgdHJhY2tpbmcg KyA2LjMgTUIgZm9yIHF1ZXJ5IGNhY2hlKS4KKyAgICBNZW1vcnkgdXNhZ2Ugc2NhbGVzIHdpdGgg Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOgorICAgPC9wYXJhPgorICAgPGl0ZW1pemVkbGlzdD4K KyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgVGFibGUgdHJhY2tpbmc6IDxsaXRl cmFsPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUgKiA0MCBieXRlczwvbGl0ZXJhbD4g KGRlZmF1bHQ6IDIwNDggKiA0MCA9IH44MCBLQikKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0 ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFF1ZXJ5IGNhY2hlOiA8bGl0 ZXJhbD50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplICogNjQwIGJ5 dGVzPC9saXRlcmFsPiAoZGVmYXVsdDogMTAwMDAgKiA2NDAgPSB+Ni4zIE1CKQorICAgICA8L3Bh cmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICAgPHBhcmE+CisgICAg Rm9yIGhpZ2gtdHJhZmZpYyBzeXN0ZW1zIHdpdGggbGFyZ2UgY2FjaGUgc2l6ZXMgKGUuZy4sIDxs aXRlcmFsPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemUgPSAxMDAw MDA8L2xpdGVyYWw+KSwKKyAgICBtZW1vcnkgdXNhZ2UgY2FuIHJlYWNoIDY0IE1CIG9yIG1vcmUu IENvbnNpZGVyIHlvdXIgc3lzdGVtJ3MgYXZhaWxhYmxlIHNoYXJlZCBtZW1vcnkgd2hlbiBlbmFi bGluZyB0aGlzIGZlYXR1cmUuCisgICA8L3BhcmE+CisgIDwvd2FybmluZz4KKworICA8dmFyaWFi bGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24t ZW5hYmxlZCIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl9lbmFibGVkIj4KKyAgICA8 dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9lbmFibGVkPC92YXJuYW1lPiAoPHR5 cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFy bmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9lbmFibGVkPC92YXJuYW1lPiBjb25maWd1cmF0aW9u IHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBFbmFibGVzIGluLW1lbW9yeSB0cmFja2lu ZyBvZiByZWNlbnRseSB3cml0dGVuIHRhYmxlcy4gV2hlbiBlbmFibGVkLCB0YWJsZXMgYXJlIG1h cmtlZAorICAgICAgYXMgc3RhbGUgYWZ0ZXIgd3JpdGUgb3BlcmF0aW9ucywgYW5kIHJlYWRzIGFy ZSByb3V0ZWQgdG8gcHJpbWFyeSB1bnRpbCB0aGUgVFRMIGV4cGlyZXMuCisgICAgIDwvcGFyYT4K KyAgICAgPHBhcmE+CisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgY2hhbmdlZCBieSByZWxv YWRpbmcgdGhlIDxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gY29uZmlndXJhdGlvbnMuCisgICAg ICBEZWZhdWx0IGlzIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4uCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1 Yy10cmFjay10YWJsZS1tdXRhdGlvbi10dGwtZmFjdG9yIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxl X211dGF0aW9uX3R0bF9mYWN0b3IiPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211 dGF0aW9uX3R0bF9mYWN0b3I8L3Zhcm5hbWU+ICg8dHlwZT5mbG9hdGluZyBwb2ludDwvdHlwZT4p CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFja190YWJsZV9t dXRhdGlvbl90dGxfZmFjdG9yPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJp bWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAg ICAgPHBhcmE+CisgICAgICBNdWx0aXBsaWVyIGZvciBjYWxjdWxhdGluZyB0aGUgVFRMOiA8bGl0 ZXJhbD5UVEwgPSByZXBsaWNhdGlvbl9kZWxheSAqIHRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9m YWN0b3I8L2xpdGVyYWw+LgorICAgICAgSGlnaGVyIHZhbHVlcyBwcm92aWRlIG1vcmUgc2FmZXR5 IG1hcmdpbiBidXQgbWF5IHJlZHVjZSByZWFkIHJlcGxpY2EgdXRpbGl6YXRpb24uCisgICAgIDwv cGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBWYWxpZCByYW5nZTogMS4wLTEwMC4wLiBEZWZhdWx0 IGlzIDxsaXRlcmFsPjUuMDwvbGl0ZXJhbD4uCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUg Y2hhbmdlZCBieSByZWxvYWRpbmcgdGhlIDxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gY29uZmln dXJhdGlvbnMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi1jb2xk LXN0YXJ0LWR1cmF0aW9uIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3Rh cnRfZHVyYXRpb24iPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX2Nv bGRfc3RhcnRfZHVyYXRpb248L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAg PGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9u X2NvbGRfc3RhcnRfZHVyYXRpb248L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9w cmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgor ICAgICA8cGFyYT4KKyAgICAgIER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0byByb3V0ZSBhbGwg cXVlcmllcyB0byBwcmltYXJ5IGFmdGVyIGEgY2hpbGQgcHJvY2VzcyBzdGFydHMuCisgICAgICBU aGlzIHByZXZlbnRzIHN0YWxlIHJlYWRzIHdoZW4gYSBuZXcgY29ubmVjdGlvbiBpcyBlc3RhYmxp c2hlZCBiZWZvcmUgdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uCisgICAgICBpcyBwb3B1bGF0ZWQg d2l0aCByZWNlbnQgd3JpdGUgaGlzdG9yeS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAg ICAgIFdoZW4gd2F0Y2hkb2cgaXMgZW5hYmxlZCBhbmQgdGhlIGxvY2FsIG5vZGUgYmVjb21lcyB0 aGUgbGVhZGVyLCBQZ3Bvb2wtSUkgYWxzbyB0cmlnZ2VycyBhCisgICAgICBnbG9iYWwgY29sZCBz dGFydCBmb3IgdGhpcyBkdXJhdGlvbiB0byBhdm9pZCBzdGFsZSByZWFkcyBhZnRlciBsZWFkZXJz aGlwIGNoYW5nZXMuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBWYWxpZCByYW5n ZTogMC02MDAwMCBtcy4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4yMDAwPC9saXRlcmFsPiAoMiBzZWNv bmRzKS4KKyAgICAgIFNldCB0byAwIHRvIGRpc2FibGUgY29sZCBzdGFydCBiZWhhdmlvci4KKyAg ICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIGJ5IHJlbG9hZGluZyB0aGUgPHByb2R1 Y3RuYW1lPlBncG9vbC1JSTwvPiBjb25maWd1cmF0aW9ucy4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3Vj LXRyYWNrLXRhYmxlLW11dGF0aW9uLXRhYmxlLWJ1Y2tldHMiIHhyZWZsYWJlbD0idHJhY2tfdGFi bGVfbXV0YXRpb25fdGFibGVfYnVja2V0cyI+CisgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tfdGFi bGVfbXV0YXRpb25fdGFibGVfYnVja2V0czwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+ KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVf bXV0YXRpb25fdGFibGVfYnVja2V0czwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8 L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+ CisgICAgIDxwYXJhPgorICAgICAgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdGhlIHRyYWNr IHRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUuCisgICAgICBIaWdoZXIgdmFsdWVzIHJlZHVjZSBo YXNoIGNvbGxpc2lvbnMgYW5kIGltcHJvdmUgbG9va3VwIHBlcmZvcm1hbmNlLgorICAgICA8L3Bh cmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDY0LTY1NTM2LiBEZWZhdWx0IGlz IDxsaXRlcmFsPjEwMjQ8L2xpdGVyYWw+LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkg YmUgc2V0IGF0IHNlcnZlciBzdGFydC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+Cisg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXRyYWNrLXRhYmxl LW11dGF0aW9uLXRhYmxlLXNpemUiIHhyZWZsYWJlbD0idHJhY2tfdGFibGVfbXV0YXRpb25fdGFi bGVfc2l6ZSI+CisgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVf c2l6ZTwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgor ICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZTwv dmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0 ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTWF4 aW11bSBudW1iZXIgb2YgdGFibGVzIHRoYXQgY2FuIGJlIHRyYWNrZWQgc2ltdWx0YW5lb3VzbHkg aW4gdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uLgorICAgICAgV2hlbiBmdWxsLCBvbGRlc3QgZW50 cmllcyBhcmUgZXZpY3RlZCB1c2luZyBhIHNpbXBsZSBldmljdGlvbiBzdHJhdGVneS4KKyAgICAg PC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdlOiAxMjgtMTMxMDcyLiBEZWZh dWx0IGlzIDxsaXRlcmFsPjIwNDg8L2xpdGVyYWw+LgorICAgICAgTWVtb3J5IHVzYWdlOiBhcHBy b3hpbWF0ZWx5IDQwIGJ5dGVzIHBlciBlbnRyeS4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBv bmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10 YWJsZS1tdXRhdGlvbi1xdWVyeS1idWNrZXRzIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211dGF0 aW9uX3F1ZXJ5X2J1Y2tldHMiPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0 aW9uX3F1ZXJ5X2J1Y2tldHM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAg PGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9u X3F1ZXJ5X2J1Y2tldHM8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5 PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8 cGFyYT4KKyAgICAgIE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRoZSBxdWVyeSBwYXJzZSBj YWNoZS4gVGhlIGNhY2hlIHN0b3JlcyBub3JtYWxpemVkCisgICAgICBxdWVyeSBzdHJpbmdzIG1h cHBlZCB0byB0aGVpciB0YWJsZSBkZXBlbmRlbmNpZXMgdG8gYXZvaWQgcmVwZWF0ZWQgcGFyc2lu Zy4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdlOiA2NC02NTUz Ni4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4yMDQ4PC9saXRlcmFsPi4KKyAgICAgIFRoaXMgcGFyYW1l dGVyIGNhbiBvbmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1 Yy10cmFjay10YWJsZS1tdXRhdGlvbi1xdWVyeS1wYXJzZS1jYWNoZS1zaXplIiB4cmVmbGFiZWw9 InRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemUiPgorICAgIDx0ZXJt Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemU8L3Zh cm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxw cmltYXJ5Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3Np emU8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2lu ZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAg IE1heGltdW0gbnVtYmVyIG9mIHF1ZXJ5IHBhcnNlIHJlc3VsdHMgdG8gY2FjaGUuIFVzZXMgTFJV IGV2aWN0aW9uIHdoZW4gZnVsbC4KKyAgICAgIExhcmdlciBjYWNoZXMgcmVkdWNlIHBhcnNpbmcg b3ZlcmhlYWQgYnV0IGNvbnN1bWUgbW9yZSBzaGFyZWQgbWVtb3J5LgorICAgICA8L3BhcmE+Cisg ICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDEwMC0xMDAwMDAwLiBEZWZhdWx0IGlzIDxs aXRlcmFsPjEwMDAwPC9saXRlcmFsPi4KKyAgICAgIE1lbW9yeSB1c2FnZTogYXBwcm94aW1hdGVs eSA2NDAgYnl0ZXMgcGVyIGVudHJ5ICh+Ni4zIE1CIGZvciBkZWZhdWx0LCB+NjQgTUIgZm9yIDEw MDAwMCBlbnRyaWVzKS4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBhdCBz ZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyAgPHNlY3QzIGlkPSJydW50aW1lLWNvbmZp Zy10cmFjay10YWJsZS1tdXRhdGlvbi1leGFtcGxlIj4KKyAgIDx0aXRsZT5UcmFjayBUYWJsZSBN dXRhdGlvbiBDb25maWd1cmF0aW9uIEV4YW1wbGU8L3RpdGxlPgorICAgPHBhcmE+CisgICAgVG8g ZW5hYmxlIHRyYWNrIHRhYmxlIG11dGF0aW9uIHdpdGggcmVwbGljYXRpb24gZGVsYXkgbW9uaXRv cmluZzoKKyAgIDwvcGFyYT4KKyAgIDxwcm9ncmFtbGlzdGluZz4KKyMgRW5hYmxlIHRyYWNrIHRh YmxlIG11dGF0aW9uIGZlYXR1cmUKK3RyYWNrX3RhYmxlX211dGF0aW9uX2VuYWJsZWQgPSBvbgor dHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciA9IDUuMAordHJhY2tfdGFibGVfbXV0YXRp b25fY29sZF9zdGFydF9kdXJhdGlvbiA9IDIwMDAKKworIyBDb25maWd1cmUgZXh0ZXJuYWwgcmVw bGljYXRpb24gZGVsYXkgbW9uaXRvcmluZworcmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZCA9 ICcvcGF0aC90by9nZXQtcmVwbGljYXRpb24tZGVsYXkuc2gnCityZXBsaWNhdGlvbl9kZWxheV9z b3VyY2VfdGltZW91dCA9IDEwCisKKyMgQWRqdXN0IGNhY2hlIHNpemVzIGJhc2VkIG9uIHdvcmts b2FkIChpbmNyZWFzZXMgbWVtb3J5IHVzYWdlKQordHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVf c2l6ZSA9IDQwOTYgICAgICAjIFRyYWNrIHVwIHRvIDQwOTYgdGFibGVzICh+MTYwIEtCKQordHJh Y2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZSA9IDUwMDAwICAjIENhY2hl IDUwayBxdWVyaWVzICh+MzEgTUIpCisgICA8L3Byb2dyYW1saXN0aW5nPgorICAgPHBhcmE+Cisg ICAgVG90YWwgc2hhcmVkIG1lbW9yeSByZXF1aXJlZCBmb3IgYWJvdmUgY29uZmlndXJhdGlvbjog YXBwcm94aW1hdGVseSAzMS4yIE1CICgzMSBNQiBxdWVyeSBjYWNoZSArIDAuMiBNQiB0YWJsZSBt YXAgKyBvdmVyaGVhZCkuCisgICAgRGVmYXVsdCBjb25maWd1cmF0aW9uICgxMDAwMCBxdWVyeSBj YWNoZSBlbnRyaWVzLCAyMDQ4IHRhYmxlcykgcmVxdWlyZXMgYXBwcm94aW1hdGVseSA2LjQgTUIu CisgICA8L3BhcmE+CisgIDwvc2VjdDM+CisKKyAgPHNlY3QzIGlkPSJydW50aW1lLWNvbmZpZy10 cmFjay10YWJsZS1tdXRhdGlvbi1saW1pdGF0aW9ucyI+CisgICA8dGl0bGU+TGltaXRhdGlvbnM8 L3RpdGxlPgorICAgPHBhcmE+CisgICAgVGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUg aGFzIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbjoKKyAgIDwvcGFyYT4KKyAgIDxpdGVtaXplZGxp c3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPlBSRVBBUkU8 L2xpdGVyYWw+IHN0YXRlbWVudHMgYXJlIG5vdCB0cmFja2VkLiBXaGVuIGEgcHJlcGFyZWQgc3Rh dGVtZW50CisgICAgICBjb250YWluaW5nIGRhdGEgbW9kaWZpY2F0aW9uIGlzIGV4ZWN1dGVkLCB0 aGUgdGFibGUgbXV0YXRpb24gaXMgbm90IHJlY29yZGVkLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICAgPHBhcmE+CisgICAgSWYgeW91ciBhcHBs aWNhdGlvbiB1c2VzIHByZXBhcmVkIHN0YXRlbWVudHMgYW5kIHJlcXVpcmVzIHJlYWQtYWZ0ZXIt d3JpdGUgY29uc2lzdGVuY3ksCisgICAgY29uc2lkZXIgdXNpbmcgZXhwbGljaXQgdHJhbnNhY3Rp b24gcm91dGluZyBvciB0aGUgPGxpdGVyYWw+LypOTyBMT0FEIEJBTEFOQ0UqLzwvbGl0ZXJhbD4K KyAgICBjb21tZW50IGRpcmVjdGl2ZSBmb3IgYWZmZWN0ZWQgcXVlcmllcy4KKyAgIDwvcGFyYT4K KyAgIDxwYXJhPgorICAgIFRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IHR5cGVzIDxlbXBoYXNpcz5h cmU8L2VtcGhhc2lzPiB0cmFja2VkIGFuZCB3aWxsIG1hcmsgdGFibGVzIGFzIHN0YWxlOgorICAg PC9wYXJhPgorICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgor ICAgICAgPGxpdGVyYWw+SU5TRVJUPC9saXRlcmFsPiwgPGxpdGVyYWw+VVBEQVRFPC9saXRlcmFs PiwgPGxpdGVyYWw+REVMRVRFPC9saXRlcmFsPgorICAgICAgc3RhdGVtZW50cyAoaW5jbHVkaW5n IHRob3NlIHdpdGggPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRlcmFsPiBjbGF1c2VzKS4KKyAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIDxsaXRlcmFsPlRSVU5DQVRFPC9saXRlcmFsPiBzdGF0ZW1lbnRzIChpbmNsdWRpbmcgbXVs dGlwbGUgdGFibGVzKS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3Rp dGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPk1FUkdFPC9saXRlcmFsPiBzdGF0ZW1l bnRzIChQb3N0Z3JlU1FMIDE1KykuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5XSVRIPC9saXRlcmFsPiBj bGF1c2VzIGNvbnRhaW5pbmcgZGF0YSBtb2RpZmljYXRpb25zIChDb21tb24gVGFibGUgRXhwcmVz c2lvbnMKKyAgICAgIHdpdGggPGxpdGVyYWw+SU5TRVJUPC9saXRlcmFsPiwgPGxpdGVyYWw+VVBE QVRFPC9saXRlcmFsPiwgb3IgPGxpdGVyYWw+REVMRVRFPC9saXRlcmFsPikuCisgICAgICBGb3Ig ZXhhbXBsZSwgPGxpdGVyYWw+V0lUSCBkZWxldGVkIEFTIChERUxFVEUgRlJPTSB0MSBSRVRVUk5J TkcgKikgU0VMRUNUICogRlJPTSBkZWxldGVkPC9saXRlcmFsPgorICAgICAgd2lsbCBwcm9wZXJs eSBtYXJrIHRhYmxlIDxsaXRlcmFsPnQxPC9saXRlcmFsPiBhcyBzdGFsZS4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgIDxwYXJhPgorICAgIDxl bXBoYXNpcz5UcmFuc2FjdGlvbiBSb2xsYmFjayBCZWhhdmlvcjo8L2VtcGhhc2lzPiBUYWJsZXMg YXJlIG1hcmtlZCBhcyBzdGFsZSB3aGVuIHRoZQorICAgIDxsaXRlcmFsPklOU0VSVDwvbGl0ZXJh bD4sIDxsaXRlcmFsPlVQREFURTwvbGl0ZXJhbD4sIG9yIDxsaXRlcmFsPkRFTEVURTwvbGl0ZXJh bD4gY29tbWFuZAorICAgIGNvbXBsZXRlcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBlbmNs b3NpbmcgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9yIHJvbGxlZCBiYWNrLgorICAgIFRoaXMg bWVhbnMgdGhhdCBpZiBhIHRyYW5zYWN0aW9uIGlzIHJvbGxlZCBiYWNrLCB0aGUgdGFibGUgcmVt YWlucyBtYXJrZWQgYXMgc3RhbGUgdW50aWwKKyAgICB0aGUgVFRMIGV4cGlyZXMsIGV2ZW4gdGhv dWdoIG5vIGFjdHVhbCBkYXRhIG1vZGlmaWNhdGlvbiBvY2N1cnJlZC4gVGhpcyBpcyBieSBkZXNp Z246CisgICAgdGhlIGZlYXR1cmUgZXJycyBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uIGJ5IHJvdXRp bmcgbW9yZSBxdWVyaWVzIHRvIHRoZSBwcmltYXJ5IHJhdGhlcgorICAgIHRoYW4gcmlza2luZyBz dGFsZSByZWFkcy4gVGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGNvbnNlcnZhdGl2ZSBh cHByb2FjaCBpcyBtaW5pbWFsCisgICAgY29tcGFyZWQgdG8gdGhlIHNhZmV0eSBiZW5lZml0IG9m IGF2b2lkaW5nIHN0YWxlIHJlYWRzLgorICAgPC9wYXJhPgorICA8L3NlY3QzPgorCisgPC9zZWN0 Mj4KKwogPC9zZWN0MT4KZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmls ZS5hbQppbmRleCA0Njc4YWI1MzA1NWU4MjhhMzdiNjQ3NzgwMTY0MGFmZjE3ZmY4NGE3Li4zOTU4 OGFmNThkZWJhMDQ1ZGZmYzAxYWU5MzIxMTViOGE5ZGJmY2YyIDEwMDY0NAotLS0gYS9zcmMvTWFr ZWZpbGUuYW0KKysrIGIvc3JjL01ha2VmaWxlLmFtCkBAIC0zNSw2ICszNSw3IEBAIHBncG9vbF9T T1VSQ0VTID0gbWFpbi9tYWluLmMgXAogCXJld3JpdGUvcG9vbF90aW1lc3RhbXAuYyBcCiAJcmV3 cml0ZS9wb29sX2xvYmouYyBcCiAJdXRpbHMvcG9vbF9zZWxlY3Rfd2Fsa2VyLmMgXAorCXV0aWxz L3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYyBcCiAJdXRpbHMvc3RybGNweS5jIFwKIAl1dGls cy9wc3ByaW50Zi5jIFwKIAl1dGlscy9wb29sX3BhcmFtcy5jIFwKZGlmZiAtLWdpdCBhL3NyYy9j b25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMgYi9zcmMvY29uZmlnL3Bvb2xfY29uZmlnX3Zh cmlhYmxlcy5jCmluZGV4IDY4YWJiN2Y0MWNiOTZkODU2YzgyNGExNDg4NDI3NDhiZmI3YTRkMTIu LjdiNDg4MjY5YWVkMjdjYmQ2MjliZWQ0MmM1ZGI4OWYyN2MxNzNmOWYgMTAwNjQ0Ci0tLSBhL3Ny Yy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMKKysrIGIvc3JjL2NvbmZpZy9wb29sX2Nv bmZpZ192YXJpYWJsZXMuYwpAQCAtNzgzLDYgKzc4MywxNiBAQCBzdGF0aWMgc3RydWN0IGNvbmZp Z19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAK Kwl7CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25fZW5hYmxlZCIsIENGR0NYVF9SRUxPQUQsIExP QURfQkFMQU5DRV9DT05GSUcsCisJCQkiRW5hYmxlIGluLW1lbW9yeSB0cmFja2luZyBvZiByZWNl bnRseSB3cml0dGVuIHRhYmxlcyB0byBhdm9pZCBzdGFsZSByZWFkcyBmcm9tIHJlcGxpY2FzIiwK KwkJCUNPTkZJR19WQVJfVFlQRV9CT09MLCBmYWxzZSwgMAorCQl9LAorCQkmZ19wb29sX2NvbmZp Zy50cmFja190YWJsZV9tdXRhdGlvbl9lbmFibGVkLAorCQlmYWxzZSwKKwkJTlVMTCwgTlVMTCwg TlVMTAorCX0sCisKIAl7CiAJCXsiYXV0b19mYWlsYmFjayIsIENGR0NYVF9SRUxPQUQsIEZBSUxP VkVSX0NPTkZJRywKIAkJCSJFbmFibGVzIG5vZGVzIGF1dG9tYXRpY2FsbHkgcmVhdHRhY2gsIHdo ZW4gZGV0YWNoZWQgbm9kZSBjb250aW51ZSBzdHJlYW1pbmcgcmVwbGljYXRpb24uIiwKQEAgLTE3 NTcsNiArMTc2NywxNyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19pbnRfYXJyYXkgQ29uZmlndXJl TmFtZXNJbnRBcnJheVtdID0KIAogc3RhdGljIHN0cnVjdCBjb25maWdfZG91YmxlIENvbmZpZ3Vy ZU5hbWVzRG91YmxlW10gPQogeworCXsKKwkJeyJ0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFj dG9yIiwgQ0ZHQ1hUX1JFTE9BRCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJCSJUVEwgbXVsdGlw bGllciBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24gKFRUTCA9IHJlcGxpY2F0aW9uX2RlbGF5ICog ZmFjdG9yKSIsCisJCQlDT05GSUdfVkFSX1RZUEVfRE9VQkxFLCBmYWxzZSwgMAorCQl9LAorCQkm Z19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yLAorCQk1LjAsCQkJ CQkvKiBib290IHZhbHVlOiA1eCByZXBsaWNhdGlvbiBkZWxheSAqLworCQkxLjAsIDEwMC4wLAkJ CQkvKiBtaW4sIG1heCAqLworCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwogCS8qIEVuZC1vZi1s aXN0IG1hcmtlciAqLwogCUVNUFRZX0NPTkZJR19ET1VCTEUKIH07CkBAIC0yMzU1LDYgKzIzNzYs NjEgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50W10gPQogCQlO VUxMLCBOVUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJ0cmFja190YWJsZV9tdXRhdGlvbl9jb2xk X3N0YXJ0X2R1cmF0aW9uIiwgQ0ZHQ1hUX1JFTE9BRCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJ CSJEdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdG8gZm9yY2UgcXVlcmllcyB0byBwcmltYXJ5IGFm dGVyIGNoaWxkIHByb2Nlc3Mgc3RhcnRzLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxz ZSwgR1VDX1VOSVRfTVMKKwkJfSwKKwkJJmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRp b25fY29sZF9zdGFydF9kdXJhdGlvbiwKKwkJMjAwMCwJCQkJCS8qIDIgc2Vjb25kcyAqLworCQkw LCA2MDAwMCwJCQkJLyogMCB0byA2MCBzZWNvbmRzICovCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9 LAorCisJeworCQl7InRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMiLCBDRkdDWFRf SU5JVCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJCSJOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZv ciB0cmFjayB0YWJsZSBtdXRhdGlvbi4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2Us IDAKKwkJfSwKKwkJJmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVj a2V0cywKKwkJMTAyNCwKKwkJNjQsIDY1NTM2LAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwor CXsKKwkJeyJ0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplIiwgQ0ZHQ1hUX0lOSVQsIExP QURfQkFMQU5DRV9DT05GSUcsCisJCQkiTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiB0cmFj ayB0YWJsZSBtdXRhdGlvbi4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIDAKKwkJ fSwKKwkJJmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSwKKwkJ MjA0OCwKKwkJMTI4LCAxMzEwNzIsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7 InRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHMiLCBDRkdDWFRfSU5JVCwgTE9BRF9C QUxBTkNFX0NPTkZJRywKKwkJCSJOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciBxdWVyeSBwYXJz ZSBjYWNoZS4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIDAKKwkJfSwKKwkJJmdf cG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfYnVja2V0cywKKwkJMjA0OCwK KwkJNjQsIDY1NTM2LAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsKKwkJeyJ0cmFja190 YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplIiwgQ0ZHQ1hUX0lOSVQsIExPQURf QkFMQU5DRV9DT05GSUcsCisJCQkiTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiBxdWVyeSBw YXJzZSBjYWNoZS4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIDAKKwkJfSwKKwkJ JmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6 ZSwKKwkJMTAwMDAsCisJCTEwMCwgMTAwMDAwMCwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisK IAkvKiBFbmQtb2YtbGlzdCBtYXJrZXIgKi8KIAlFTVBUWV9DT05GSUdfSU5UCiB9OwpkaWZmIC0t Z2l0IGEvc3JjL2NvbnRleHQvcG9vbF9xdWVyeV9jb250ZXh0LmMgYi9zcmMvY29udGV4dC9wb29s X3F1ZXJ5X2NvbnRleHQuYwppbmRleCA3Y2Y5ODEzZWI3ZDU4Njc4YmM4NmEwYWFhMzhiZDNjNjQ0 NWI2Njg3Li41YzFhMmQzNmQ4MTBkNWI5OTU5YTEyNjA1MTM4ZTExNDkyMzFjOGFiIDEwMDY0NAot LS0gYS9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuYworKysgYi9zcmMvY29udGV4dC9w b29sX3F1ZXJ5X2NvbnRleHQuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgInV0aWxzL3N0 YXRpc3RpY3MuaCIKICNpbmNsdWRlICJ1dGlscy9wb29sX3NlbGVjdF93YWxrZXIuaCIKICNpbmNs dWRlICJ1dGlscy9wb29sX3N0cmVhbS5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfdHJhY2tfdGFi bGVfbXV0YXRpb24uaCIKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0Lmgi CiAjaW5jbHVkZSAiY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuaCIKICNpbmNsdWRlICJwYXJz ZXIvbm9kZXMuaCIKQEAgLTIwMTAsNiArMjAxMSwxOSBAQCB3aGVyZV90b19zZW5kX21haW5fcmVw bGljYShQT09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBOb2Rl CiAJaWYgKGRlc3QgPT0gUE9PTF9QUklNQVJZKQogCXsKIAkJcG9vbF9zZXRfbm9kZV90b19iZV9z ZW50KHF1ZXJ5X2NvbnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CisKKwkJLyoKKwkJICogUmVzb2x2 ZSB0YWJsZSBhbmQgZGF0YWJhc2UgT0lEcyBub3cgdG8gcG9wdWxhdGUgcmVsY2FjaGUuCisJCSAq IFRoaXMgYXZvaWRzIHBvdGVudGlhbCBoYW5ncyBpbiBDb21tYW5kQ29tcGxldGUgd2hlcmUgd2Ug c2hvdWxkbid0CisJCSAqIGJlIHJ1bm5pbmcgbmV3IHF1ZXJpZXMgYWdhaW5zdCB0aGUgYmFja2Vu ZC4KKwkJICovCisJCWlmIChwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fZW5hYmxl ZCAmJgorCQkJKElzQShub2RlLCBJbnNlcnRTdG10KSB8fCBJc0Eobm9kZSwgVXBkYXRlU3RtdCkg fHwgSXNBKG5vZGUsIERlbGV0ZVN0bXQpKSkKKwkJeworCQkJaW50ICpvaWRzOworCQkJcG9vbF9l eHRyYWN0X3RhYmxlX29pZHMobm9kZSwgJm9pZHMpOworCQkJcG9vbF90cmFja190YWJsZV9tdXRh dGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisJCX0KIAl9CiAJLyogU2hvdWxkIGJlIHNlbnQgdG8g Ym90aCBwcmltYXJ5IGFuZCBzdGFuZGJ5PyAqLwogCWVsc2UgaWYgKGRlc3QgPT0gUE9PTF9CT1RI KQpAQCAtMjEzOSw2ICsyMTUzLDEwNyBAQCB3aGVyZV90b19zZW5kX21haW5fcmVwbGljYShQT09M X1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBOb2RlCiAJCQkJewog CQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwgUFJJTUFSWV9OT0RF X0lEKTsKIAkJCQl9CisJCQkJLyoKKwkJCQkgKiBDaGVjayB0cmFjayB0YWJsZSBtdXRhdGlvbiBm b3IgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMuCisJCQkJICogSWYgaW4gY29sZCBzdGFydCBvciBh bnkgdGFibGUgd2FzIHJlY2VudGx5IHdyaXR0ZW4sCisJCQkJICogcm91dGUgdG8gcHJpbWFyeSB0 byBhdm9pZCBzdGFsZSByZWFkcy4KKwkJCQkgKi8KKwkJCQllbHNlIGlmIChwb29sX2NvbmZpZy0+ dHJhY2tfdGFibGVfbXV0YXRpb25fZW5hYmxlZCkKKwkJCQl7CisJCQkJCWJvb2wJCWZvcmNlX3By aW1hcnkgPSBmYWxzZTsKKworCQkJCQkvKiBEdXJpbmcgY29sZCBzdGFydCwgcm91dGUgZXZlcnl0 aGluZyB0byBwcmltYXJ5ICovCisJCQkJCWlmIChwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2lu X2NvbGRfc3RhcnQoKSkKKwkJCQkJeworCQkJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCShl cnJtc2coImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSBtdXRh dGlvbiBjb2xkIHN0YXJ0IiksCisJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9uID0gUFJJ TUFSWSBmb3IgcXVlcnk9IFwiJXNcIiIsIHF1ZXJ5KSkpOworCQkJCQkJZm9yY2VfcHJpbWFyeSA9 IHRydWU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCS8qIEV4dHJhY3QgdGFibGUg b2lkcyBhbmQgY2hlY2sgaWYgYW55IGFyZSBzdGFsZSAqLworCQkJCQlTZWxlY3RDb250ZXh0IGN0 eDsKKwkJCQkJaW50CQkJZGJvaWQ7CisJCQkJCWludAkJCW51bV9vaWRzOworCQkJCQlpbnQJCQlp OworCisJCQkJCW1lbXNldCgmY3R4LCAwLCBzaXplb2YoY3R4KSk7CisJCQkJCW51bV9vaWRzID0g cG9vbF9leHRyYWN0X3RhYmxlX29pZHNfZnJvbV9zZWxlY3Rfc3RtdChub2RlLCAmY3R4KTsKKwkJ CQkJaWYgKG51bV9vaWRzID4gMCkKKwkJCQkJeworCQkJCQkJZGJvaWQgPSBwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX2dldF9kYXRhYmFzZV9vaWQoKTsKKworCQkJCQkJaWYgKGRib2lkIDw9IDAp CisJCQkJCQl7CisJCQkJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCQkoZXJybXNnKCJjb3Vs ZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgZGF0YWJhc2Ugb2lkIHdhcyB1bmF2YWlsYWJsZSIp LAorCQkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24gPSBQUklNQVJZIGZvciBxdWVyeT0g XCIlc1wiIiwgcXVlcnkpKSk7CisJCQkJCQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQkJCQl9 CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJZm9yIChpID0gMDsgaSA8IG51bV9vaWRzOyBp KyspCisJCQkJCQkJeworCQkJCQkJCQlpZiAocG9vbF90cmFja190YWJsZV9tdXRhdGlvbl90YWJs ZV9pc19zdGFsZShjdHgudGFibGVfb2lkc1tpXSwgZGJvaWQpKQorCQkJCQkJCQl7CisJCQkJCQkJ CQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQkJCQkJKGVycm1zZygiY291bGQgbm90IGxvYWQgYmFs YW5jZSBiZWNhdXNlIHRhYmxlIFwiJXNcIiB3YXMgcmVjZW50bHkgd3JpdHRlbiIsCisJCQkJCQkJ CQkJCQkJY3R4LnRhYmxlX25hbWVzW2ldKSwKKwkJCQkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGlu YXRpb24gPSBQUklNQVJZIGZvciBxdWVyeT0gXCIlc1wiIiwgcXVlcnkpKSk7CisJCQkJCQkJCQlm b3JjZV9wcmltYXJ5ID0gdHJ1ZTsKKwkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQl9CisJCQkJCQkJ fQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJCWlmIChmb3JjZV9wcmltYXJ5KQorCQkJ CQl7CisJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwgUFJJTUFS WV9OT0RFX0lEKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8qIFByb2NlZWQg d2l0aCBsb2FkIGJhbGFuY2luZyAqLworCQkJCQkJaWYgKHBvb2xfY29uZmlnLT5zdGF0ZW1lbnRf bGV2ZWxfbG9hZF9iYWxhbmNlKQorCQkJCQkJeworCQkJCQkJCXNlc3Npb25fY29udGV4dC0+bG9h ZF9iYWxhbmNlX25vZGVfaWQgPSBzZWxlY3RfbG9hZF9iYWxhbmNpbmdfbm9kZSgpOworCQkJCQkJ fQorCisJCQkJCQkvKgorCQkJCQkJICogQXMgc3RyZWFtaW5nIHJlcGxpY2F0aW9uIGRlbGF5IGlz IHRvbyBtdWNoLCBpZgorCQkJCQkJICogcHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkgaXMgdHJ1 ZSB0aGVuIGVsZWN0IG5ldyBsb2FkCisJCQkJCQkgKiBiYWxhbmNlIG5vZGUgd2hpY2ggaXMgbG93 ZXN0IGRlbGF5ZWQsIGZhbHNlIHRoZW4gc2VuZAorCQkJCQkJICogdG8gdGhlIHByaW1hcnkuCisJ CQkJCQkgKi8KKwkJCQkJCWlmIChTVFJFQU0gJiYgY2hlY2tfcmVwbGljYXRpb25fZGVsYXkoc2Vz c2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCkpCisJCQkJCQl7CisJCQkJCQkJZXJl cG9ydChERUJVRzEsCisJCQkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJl Y2F1c2Ugb2YgdG9vIG11Y2ggcmVwbGljYXRpb24gZGVsYXkiKSwKKwkJCQkJCQkJCSBlcnJkZXRh aWwoImRlc3RpbmF0aW9uID0gJWQgZm9yIHF1ZXJ5PSBcIiVzXCIiLCBkZXN0LCBxdWVyeSkpKTsK KworCQkJCQkJCWlmIChwb29sX2NvbmZpZy0+cHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkpCisJ CQkJCQkJeworCQkJCQkJCQlpbnQJCQluZXdfbG9hZF9iYWxhbmNpbmdfbm9kZSA9IHNlbGVjdF9s b2FkX2JhbGFuY2luZ19ub2RlKCk7CisKKwkJCQkJCQkJc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2Jh bGFuY2Vfbm9kZV9pZCA9IG5ld19sb2FkX2JhbGFuY2luZ19ub2RlOworCQkJCQkJCQlzZXNzaW9u X2NvbnRleHQtPnF1ZXJ5X2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0gc2Vzc2lvbl9j b250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZDsKKwkJCQkJCQkJcG9vbF9zZXRfbm9kZV90b19i ZV9zZW50KHF1ZXJ5X2NvbnRleHQsIHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dC0+bG9h ZF9iYWxhbmNlX25vZGVfaWQpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJ CQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwgUFJJTUFSWV9OT0RF X0lEKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJc2Vz c2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCA9IHNlc3Np b25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQ7CisJCQkJCQkJcG9vbF9zZXRfbm9kZV90 b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsCisJCQkJCQkJCQkJCQkJIHNlc3Npb25fY29udGV4dC0+ cXVlcnlfY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQpOworCQkJCQkJfQorCQkJCQl9CisJ CQkJfQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCWlmIChwb29sX2NvbmZpZy0+c3RhdGVtZW50X2xl dmVsX2xvYWRfYmFsYW5jZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvb2wuaCBiL3NyYy9p bmNsdWRlL3Bvb2wuaAppbmRleCBlYTZmODdlMTIwYWY4NjZiOGVkM2ExNTc5MGQ5ZDhhOGUwMDlm ZTkxLi43MTY4YzFhZWE4Nzc4NTZiNTk3OGRlMzMyYWQ2MzYzMjVlYjljMzBjIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9wb29sLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9vbC5oCkBAIC00MjQsNyAr NDI0LDcgQEAgdHlwZWRlZiBlbnVtCiAjZGVmaW5lIE1pbih4LCB5KQkJKCh4KSA8ICh5KSA/ICh4 KSA6ICh5KSkKIAogCi0jZGVmaW5lIE1BWF9OVU1fU0VNQVBIT1JFUwkJOAorI2RlZmluZSBNQVhf TlVNX1NFTUFQSE9SRVMJCTEwCiAjZGVmaW5lIENPTk5fQ09VTlRFUl9TRU0JCTAKICNkZWZpbmUg UkVRVUVTVF9JTkZPX1NFTQkJMQogI2RlZmluZSBRVUVSWV9DQUNIRV9TVEFUU19TRU0JMgpAQCAt NDM0LDYgKzQzNCw4IEBAIHR5cGVkZWYgZW51bQogI2RlZmluZSBGT0xMT1dfUFJJTUFSWV9TRU0J CTYKICNkZWZpbmUgTUFJTl9FWElUX0hBTkRMRVJfU0VNCTcJLyogdXNlZCBpbiBleGl0X2hhbmRl ciBpbiBwZ3Bvb2wgbWFpbgogCQkJCQkJCQkJICogcHJvY2VzcyAqLworI2RlZmluZSBUUkFDS19U QUJMRV9NVVRBVElPTl9UQUJMRV9TRU0JOAorI2RlZmluZSBUUkFDS19UQUJMRV9NVVRBVElPTl9R VUVSWV9TRU0JOQogI2RlZmluZSBNQVhfUkVRVUVTVF9RVUVVRV9TSVpFCTEwCiAKICNkZWZpbmUg TUFYX1NFQ19XQUlUX0ZPUl9DTFVTVEVSX1RSQU5TQUNUSU9OIDEwIC8qIHRpbWUgaW4gc2Vjb25k cyB0byBrZWVwCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oIGIvc3JjL2lu Y2x1ZGUvcG9vbF9jb25maWcuaAppbmRleCA3NDFkZTZjYzVmYzMzNjhmODEzZDZiNmVmYTY4ZWI3 ZjhhNzk1MDZiLi5kMzEwOTIyZjFhOTMyY2QzNDJmNzFmNTc0YjhiMmRiMDgxNzk5NTdjIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvb2xf Y29uZmlnLmgKQEAgLTM2NSw2ICszNjUsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QKIAkJCQkJCQkJCSAq IHJlcGxpY2F0aW9uIGNoZWNrICovCiAJY2hhcgkgICAqcmVwbGljYXRpb25fZGVsYXlfc291cmNl X2NtZDsJLyogZXh0ZXJuYWwgY29tbWFuZCBmb3IgcmVwbGljYXRpb24gZGVsYXkgKi8KIAlpbnQJ CQlyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfdGltZW91dDsJLyogdGltZW91dCBmb3IgZXh0ZXJu YWwgY29tbWFuZCBpbiBzZWNvbmRzICovCisKKwkvKiBUcmFjayB0YWJsZSBtdXRhdGlvbiBjb25m aWd1cmF0aW9uIGZvciB0cmFja2luZyByZWNlbnRseSB3cml0dGVuIHRhYmxlcyAqLworCWJvb2wJ CXRyYWNrX3RhYmxlX211dGF0aW9uX2VuYWJsZWQ7CQkJLyogRW5hYmxlIGluLW1lbW9yeSB0YWJs ZSB0cmFja2luZyAqLworCWRvdWJsZQkJdHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjsJ CS8qIFRUTCBtdWx0aXBsaWVyIGZvciByZXBsaWNhdGlvbiBkZWxheSAqLworCWludAkJCXRyYWNr X3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb247CS8qIENvbGQgc3RhcnQgZHVyYXRp b24gaW4gbXMgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzOwkv KiBOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciB0YWJsZSBtYXAgKi8KKwlpbnQJCQl0cmFja190 YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplOwkJLyogTWF4IGVudHJpZXMgaW4gdGFibGUgbWFwICov CisJaW50CQkJdHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfYnVja2V0czsJLyogTnVtYmVyIG9m IGhhc2ggYnVja2V0cyBmb3IgcXVlcnkgY2FjaGUgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRh dGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplOwkvKiBNYXggZW50cmllcyBpbiBxdWVyeSBwYXJz ZSBjYWNoZSAqLworCiAJY2hhcgkgICAqZmFpbG92ZXJfY29tbWFuZDsJLyogZXhlY3V0ZSBjb21t YW5kIHdoZW4gZmFpbG92ZXIgaGFwcGVucyAqLwogCWNoYXIJICAgKmZvbGxvd19wcmltYXJ5X2Nv bW1hbmQ7IC8qIGV4ZWN1dGUgY29tbWFuZCB3aGVuIGZhaWxvdmVyIGlzCiAJCQkJCQkJCQkJICog ZW5kZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVf bXV0YXRpb24uaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24u aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi41Y2Q1ZDRlZjQwOTY0NWZlNzdlM2JiMDIyMzllMTQwNDU2ZGUwNTU0Ci0t LSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRh dGlvbi5oCkBAIC0wLDAgKzEsMjM3IEBACisvKiAtKi1wZ3NxbC1jLSotICovCisvKgorICogcGdw b29sOiBhIGxhbmd1YWdlIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gcG9vbCBzZXJ2ZXIgZm9yIFBv c3RncmVTUUwKKyAqIHdyaXR0ZW4gYnkgVGF0c3VvIElzaGlpCisgKgorICogQ29weXJpZ2h0IChj KSAyMDAzLTIwMjYJUGdQb29sIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIFBlcm1p c3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUg YW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVl IGlzIGhlcmVieQorICogZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhcHBlYXIgaW4gYWxsCisgKiBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbgorICogbm90aWNlIGFwcGVhciBpbiBzdXBw b3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIHRoZQorICogYXV0aG9y IG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCisg KiBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4g cHJpb3IKKyAqIHBlcm1pc3Npb24uIFRoZSBhdXRob3IgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25z IGFib3V0IHRoZQorICogc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBv c2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGll ZCB3YXJyYW50eS4KKyAqCisgKiBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmg6IEluLW1lbW9y eSB0cmFja2luZyBvZiByZWNlbnRseSB3cml0dGVuIHRhYmxlcworICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRvIGF2b2lkIHN0YWxlIHJlYWRzIGZyb20gcmVwbGljYXMgZHVyaW5nIHJl cGxpY2F0aW9uIGxhZworICovCisKKyNpZm5kZWYgUE9PTF9UUkFDS19UQUJMRV9NVVRBVElPTl9I CisjZGVmaW5lIFBPT0xfVFJBQ0tfVEFCTEVfTVVUQVRJT05fSAorCisjaW5jbHVkZSAicG9vbC5o IgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKy8qCisgKiBNYXhpbXVtIHRhYmxlIG5hbWUgbGVu Z3RoIGluY2x1ZGluZyBzY2hlbWE6ICJzY2hlbWEiLiJ0YWJsZSIKKyAqIFVzaW5nIE5BTUVEQVRB TEVOICogMiArIDQgZm9yIHF1b3RlcyBhbmQgZG90CisgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVf TVVUQVRJT05fVEFCTEVfTkFNRV9MRU4JKE5BTUVEQVRBTEVOICogMiArIDQpCisKKy8qCisgKiBN YXhpbXVtIG51bWJlciBvZiB0YWJsZXMgd2UgdHJhY2sgcGVyIHF1ZXJ5CisgKi8KKyNkZWZpbmUg VFJBQ0tfVEFCTEVfTVVUQVRJT05fTUFYX1RBQkxFU19QRVJfUVVFUlkJOAorCisvKgorICogSW52 YWxpZCBpbmRleCBtYXJrZXIgZm9yIGxpbmtlZCBsaXN0cworICovCisjZGVmaW5lIFRSQUNLX1RB QkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgJKC0xKQorCisvKgorICogRGVmYXVsdCBUVEwgaW4g bWljcm9zZWNvbmRzICgxMDBtcykgdXNlZCB3aGVuIHJlcGxpY2F0aW9uIGRlbGF5IGlzIHVua25v d24KKyAqLworI2RlZmluZSBUUkFDS19UQUJMRV9NVVRBVElPTl9ERUZBVUxUX1RUTF9VUwkoMTAw ICogMTAwMCkKKworLyoKKyAqIEVudHJ5IGluIHRoZSB0YWJsZSBtdXRhdGlvbiBoYXNoIHRhYmxl IChrZXllZCBieSB0YWJsZS9kYXRhYmFzZSBvaWRzKQorICovCit0eXBlZGVmIHN0cnVjdCBUcmFj a1RhYmxlTXV0YXRpb25FbnRyeQoreworCWludAkJCXRhYmxlX29pZDsJCQkJLyogVGFibGUgb2lk ICovCisJaW50CQkJZGJvaWQ7CQkJCQkvKiBEYXRhYmFzZSBvaWQgKi8KKwlzdHJ1Y3QgdGltZXZh bCBsYXN0X3dyaXRlX3RpbWU7CQkvKiBXaGVuIHRoZSB0YWJsZSB3YXMgbGFzdCB3cml0dGVuICov CisJdWludDMyCQloYXNoOwkJCQkJLyogUHJlLWNvbXB1dGVkIGhhc2ggdmFsdWUgKi8KKwlpbnQJ CQluZXh0OwkJCQkJLyogTmV4dCBlbnRyeSBpbiBjb2xsaXNpb24gY2hhaW4gKC0xIGlmIG5vbmUp ICovCisJYm9vbAkJaW5fdXNlOwkJCQkJLyogSXMgdGhpcyBlbnRyeSBpbiB1c2U/ICovCit9IFRy YWNrVGFibGVNdXRhdGlvbkVudHJ5OworCisvKgorICogSGVhZGVyIGZvciB0aGUgdGFibGUgbXV0 YXRpb24gaGFzaCB0YWJsZSBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK3R5cGVkZWYgc3RydWN0IFRy YWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZQoreworCWludAkJCW51bV9idWNrZXRzOwkJLyogTnVt YmVyIG9mIGhhc2ggYnVja2V0cyAqLworCWludAkJCW1heF9lbnRyaWVzOwkJLyogTWF4aW11bSBl bnRyaWVzIGFsbG93ZWQgKi8KKwlpbnQJCQludW1fZW50cmllczsJCS8qIEN1cnJlbnQgbnVtYmVy IG9mIGVudHJpZXMgKi8KKwlpbnQJCQlmcmVlX2xpc3RfaGVhZDsJCS8qIEhlYWQgb2YgZnJlZSBl bnRyeSBsaXN0ICovCisJLyogRmxleGlibGUgYXJyYXkgbWVtYmVycyBmb2xsb3cgaW4gc2hhcmVk IG1lbW9yeToKKwkgKiBpbnQgYnVja2V0c1tudW1fYnVja2V0c107CisJICogVHJhY2tUYWJsZU11 dGF0aW9uRW50cnkgZW50cmllc1ttYXhfZW50cmllc107CisJICovCit9IFRyYWNrVGFibGVNdXRh dGlvbkhhc2hUYWJsZTsKKworLyoKKyAqIEVudHJ5IGluIHRoZSBxdWVyeSBwYXJzZSBjYWNoZQor ICovCit0eXBlZGVmIHN0cnVjdCBRdWVyeVBhcnNlRW50cnkKK3sKKwl1aW50NjQJCXF1ZXJ5X2hh c2g7CQkJLyogSGFzaCBvZiBub3JtYWxpemVkIHF1ZXJ5ICovCisJYm9vbAkJaXNfd3JpdGU7CQkJ LyogVHJ1ZSBpZiBJTlNFUlQvVVBEQVRFL0RFTEVURSAqLworCWludAkJCW51bV90YWJsZXM7CQkJ LyogTnVtYmVyIG9mIHRhYmxlcyBpbiBxdWVyeSAqLworCWNoYXIJCXRhYmxlX25hbWVzW1RSQUNL X1RBQkxFX01VVEFUSU9OX01BWF9UQUJMRVNfUEVSX1FVRVJZXVtUUkFDS19UQUJMRV9NVVRBVElP Tl9UQUJMRV9OQU1FX0xFTl07CisJaW50CQkJbmV4dDsJCQkJLyogTmV4dCBlbnRyeSBpbiBjb2xs aXNpb24gY2hhaW4gKi8KKwlpbnQJCQlscnVfcHJldjsJCQkvKiBQcmV2aW91cyBpbiBMUlUgbGlz dCAqLworCWludAkJCWxydV9uZXh0OwkJCS8qIE5leHQgaW4gTFJVIGxpc3QgKi8KKwlib29sCQlp bl91c2U7CQkJCS8qIElzIHRoaXMgZW50cnkgaW4gdXNlPyAqLworfSBRdWVyeVBhcnNlRW50cnk7 CisKKy8qCisgKiBIZWFkZXIgZm9yIHRoZSBxdWVyeSBwYXJzZSBjYWNoZSBpbiBzaGFyZWQgbWVt b3J5CisgKi8KK3R5cGVkZWYgc3RydWN0IFF1ZXJ5UGFyc2VDYWNoZQoreworCWludAkJCW51bV9i dWNrZXRzOwkJLyogTnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqLworCWludAkJCW1heF9lbnRyaWVz OwkJLyogTWF4aW11bSBlbnRyaWVzIGFsbG93ZWQgKi8KKwlpbnQJCQludW1fZW50cmllczsJCS8q IEN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMgKi8KKwlpbnQJCQlmcmVlX2xpc3RfaGVhZDsJCS8q IEhlYWQgb2YgZnJlZSBlbnRyeSBsaXN0ICovCisJaW50CQkJbHJ1X2hlYWQ7CQkJLyogTW9zdCBy ZWNlbnRseSB1c2VkICovCisJaW50CQkJbHJ1X3RhaWw7CQkJLyogTGVhc3QgcmVjZW50bHkgdXNl ZCAqLworCS8qIEZsZXhpYmxlIGFycmF5IG1lbWJlcnMgZm9sbG93IGluIHNoYXJlZCBtZW1vcnk6 CisJICogaW50IGJ1Y2tldHNbbnVtX2J1Y2tldHNdOworCSAqIFF1ZXJ5UGFyc2VFbnRyeSBlbnRy aWVzW21heF9lbnRyaWVzXTsKKwkgKi8KK30gUXVlcnlQYXJzZUNhY2hlOworCisvKgorICogR2xv YmFsIHN0YXRlIGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlCisgKi8KK3R5cGVkZWYg c3RydWN0IFRyYWNrVGFibGVNdXRhdGlvblN0YXRlCit7CisJYm9vbAkJaW5pdGlhbGl6ZWQ7CQkJ LyogSGFzIHNoYXJlZCBtZW1vcnkgYmVlbiBpbml0aWFsaXplZD8gKi8KKwl1aW50NjQJCWN1cnJl bnRfdHRsX3VzOwkJCS8qIEN1cnJlbnQgVFRMIGluIG1pY3Jvc2Vjb25kcyAqLworCXN0cnVjdCB0 aW1ldmFsIHR0bF9sYXN0X3VwZGF0ZWQ7CS8qIFdoZW4gVFRMIHdhcyBsYXN0IHVwZGF0ZWQgKi8K KwlzdHJ1Y3QgdGltZXZhbCBsYXN0X2NsZWFudXBfdGltZTsJLyogV2hlbiBsYXN0IGV4cGlyZWQg Y2xlYW51cCByYW4gKi8KKwlzdHJ1Y3QgdGltZXZhbCBnbG9iYWxfY29sZF9zdGFydF91bnRpbDsJ LyogR2xvYmFsIGNvbGQgc3RhcnQgZW5kIHRpbWUgKi8KKwl2b2xhdGlsZSB1aW50MzIgc3RhdHNf cXVlcmllc19jaGVja2VkOwkvKiBOdW1iZXIgb2YgcXVlcmllcyBjaGVja2VkICovCisJdm9sYXRp bGUgdWludDMyIHN0YXRzX2ZvcmNlZF9wcmltYXJ5OwkJLyogUXVlcmllcyBmb3JjZWQgdG8gcHJp bWFyeSAqLworCXZvbGF0aWxlIHVpbnQzMiBzdGF0c19hbGxvd2VkX3JlcGxpY2E7CS8qIFF1ZXJp ZXMgYWxsb3dlZCB0byByZXBsaWNhICovCit9IFRyYWNrVGFibGVNdXRhdGlvblN0YXRlOworCisv KgorICogTWFpbiBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBjb250YWluaW5nIGFsbCBjb21wb25l bnRzCisgKi8KK3R5cGVkZWYgc3RydWN0IFRyYWNrVGFibGVNdXRhdGlvblNobWVtCit7CisJVHJh Y2tUYWJsZU11dGF0aW9uU3RhdGUJc3RhdGU7CisJVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxl CSp0YWJsZV9tYXA7CisJUXVlcnlQYXJzZUNhY2hlCQkqcXVlcnlfY2FjaGU7Cit9IFRyYWNrVGFi bGVNdXRhdGlvblNobWVtOworCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBQdWJsaWMgQVBJIGZ1 bmN0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBJbml0aWFsaXplIHNo YXJlZCBtZW1vcnkgc3RydWN0dXJlcyBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24uCisgKiBDYWxs ZWQgZnJvbSBwZ3Bvb2xfbWFpbi5jIGFmdGVyIHBvb2xfaW5pdF9wb29sX2luZm8oKS4KKyAqLwor ZXh0ZXJuIHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9pbml0KHZvaWQpOworCisvKgor ICogSW5pdGlhbGl6ZSBwZXItY2hpbGQgcHJvY2VzcyBzdGF0ZSBmb3IgdHJhY2sgdGFibGUgbXV0 YXRpb24uCisgKiBDYWxsZWQgZnJvbSBjaGlsZC5jIHdoZW4gYSBuZXcgY2hpbGQgcHJvY2VzcyBz dGFydHMuCisgKiBTZXRzIHVwIGNvbGQgc3RhcnQgdHJhY2tpbmcuCisgKi8KK2V4dGVybiB2b2lk IHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fY2hpbGRfaW5pdCh2b2lkKTsKKworLyoKKyAqIENo ZWNrIGlmIHRoZSBjaGlsZCBwcm9jZXNzIGlzIGluIGNvbGQgc3RhcnQgcGVyaW9kLgorICogRHVy aW5nIGNvbGQgc3RhcnQsIGFsbCBxdWVyaWVzIGFyZSByb3V0ZWQgdG8gcHJpbWFyeS4KKyAqIFJl dHVybnMgdHJ1ZSBpZiBpbiBjb2xkIHN0YXJ0LCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2V4dGVy biBib29sIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25faW5fY29sZF9zdGFydCh2b2lkKTsKKwor LyoKKyAqIFRyaWdnZXIgYSBnbG9iYWwgY29sZCBzdGFydCBwZXJpb2QgZm9yIGFsbCBwcm9jZXNz ZXMuCisgKiBVc2VkIGFmdGVyIHdhdGNoZG9nIGxlYWRlciBjaGFuZ2UgdG8gYXZvaWQgc3RhbGUg cmVhZHMuCisgKi8KK2V4dGVybiB2b2lkIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdHJpZ2dl cl9nbG9iYWxfY29sZF9zdGFydCh2b2lkKTsKKworLyoKKyAqIEdldCBvaWQgb2YgY3VycmVudCBk YXRhYmFzZS4KKyAqLworZXh0ZXJuIGludCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dldF9k YXRhYmFzZV9vaWQodm9pZCk7CisKKy8qCisgKiBDaGVjayBpZiBhIHRhYmxlIHdhcyByZWNlbnRs eSB3cml0dGVuIHRvIChpcyAic3RhbGUiKS4KKyAqIElmIHN0YWxlLCByZWFkcyBmcm9tIHRoaXMg dGFibGUgc2hvdWxkIGdvIHRvIHByaW1hcnkuCisgKiBSZXR1cm5zIHRydWUgaWYgdGFibGUgaXMg c3RhbGUgKHJlY2VudGx5IHdyaXR0ZW4pLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2V4dGVybiBi b29sIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfaXNfc3RhbGUoaW50IHRhYmxlX29p ZCwgaW50IGRib2lkKTsKKworLyoKKyAqIE1hcmsgdGFibGVzIGFzIHJlY2VudGx5IHdyaXR0ZW4u CisgKiBDYWxsZWQgYWZ0ZXIgSU5TRVJUL1VQREFURS9ERUxFVEUgcXVlcmllcyBjb21wbGV0ZS4K KyAqIHRhYmxlX29pZHM6IGFycmF5IG9mIHRhYmxlIG9pZHMKKyAqIG51bV90YWJsZXM6IG51bWJl ciBvZiB0YWJsZXMgaW4gYXJyYXkKKyAqIGRib2lkOiBkYXRhYmFzZSBvaWQKKyAqLworZXh0ZXJu IHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlc193cml0dGVuKGNvbnN0 IGludCAqdGFibGVfb2lkcywgaW50IG51bV90YWJsZXMsIGludCBkYm9pZCk7CisKKy8qCisgKiBD b252ZW5pZW5jZSBmdW5jdGlvbiB0byBtYXJrIGEgc2luZ2xlIHRhYmxlIGFzIHdyaXR0ZW4uCisg KiB0YWJsZV9vaWQ6IHRhYmxlIG9pZAorICogZGJvaWQ6IGRhdGFiYXNlIG9pZAorICovCitleHRl cm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVfd3JpdHRlbihpbnQg dGFibGVfb2lkLCBpbnQgZGJvaWQpOworCisvKgorICogVXBkYXRlIHRoZSBUVEwgYmFzZWQgb24g Y3VycmVudCByZXBsaWNhdGlvbiBkZWxheS4KKyAqIENhbGxlZCBmcm9tIHBvb2xfd29ya2VyX2No aWxkLmMgd2hlbiByZXBsaWNhdGlvbiBkZWxheSBpcyB1cGRhdGVkLgorICogZGVsYXlfdXM6IHJl cGxpY2F0aW9uIGRlbGF5IGluIG1pY3Jvc2Vjb25kcworICovCitleHRlcm4gdm9pZCBwb29sX3Ry YWNrX3RhYmxlX211dGF0aW9uX3VwZGF0ZV90dGwodWludDY0IGRlbGF5X3VzKTsKKworLyoKKyAq IExvb2sgdXAgY2FjaGVkIHBhcnNlIHJlc3VsdCBmb3IgYSBxdWVyeS4KKyAqIGhhc2g6IGhhc2gg b2Ygbm9ybWFsaXplZCBxdWVyeQorICogaXNfd3JpdGU6IG91dHB1dCAtIHRydWUgaWYgcXVlcnkg aXMgYSB3cml0ZQorICogdGFibGVfbmFtZXM6IG91dHB1dCAtIGFycmF5IHRvIGZpbGwgd2l0aCB0 YWJsZSBuYW1lcworICogbnVtX3RhYmxlczogb3V0cHV0IC0gbnVtYmVyIG9mIHRhYmxlcyBmb3Vu ZAorICogUmV0dXJucyB0cnVlIGlmIGZvdW5kIGluIGNhY2hlLCBmYWxzZSBvdGhlcndpc2UuCisg Ki8KK2V4dGVybiBib29sIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2NhY2hlZF9wYXJz ZSh1aW50NjQgaGFzaCwgYm9vbCAqaXNfd3JpdGUsCisJCQkJCQkJCQkJCSBjaGFyIHRhYmxlX25h bWVzW11bVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfTkFNRV9MRU5dLAorCQkJCQkJCQkJCQkg aW50ICpudW1fdGFibGVzKTsKKworLyoKKyAqIENhY2hlIGEgcGFyc2UgcmVzdWx0IGZvciBhIHF1 ZXJ5LgorICogaGFzaDogaGFzaCBvZiBub3JtYWxpemVkIHF1ZXJ5CisgKiBpc193cml0ZTogdHJ1 ZSBpZiBxdWVyeSBpcyBhIHdyaXRlCisgKiB0YWJsZV9uYW1lczogYXJyYXkgb2YgdGFibGUgbmFt ZXMKKyAqIG51bV90YWJsZXM6IG51bWJlciBvZiB0YWJsZXMKKyAqLworZXh0ZXJuIHZvaWQgcG9v bF90cmFja190YWJsZV9tdXRhdGlvbl9jYWNoZV9wYXJzZSh1aW50NjQgaGFzaCwgYm9vbCBpc193 cml0ZSwKKwkJCQkJCQkJCQljb25zdCBjaGFyIHRhYmxlX25hbWVzW11bVFJBQ0tfVEFCTEVfTVVU QVRJT05fVEFCTEVfTkFNRV9MRU5dLAorCQkJCQkJCQkJCWludCBudW1fdGFibGVzKTsKKworLyoK KyAqIE5vcm1hbGl6ZSBhIHF1ZXJ5IGFuZCBjb21wdXRlIGl0cyBoYXNoLgorICogU3RyaXBzIGNv bW1lbnRzLCBub3JtYWxpemVzIHdoaXRlc3BhY2UgYW5kIGxpdGVyYWxzLgorICogcXVlcnk6IGlu cHV0IFNRTCBxdWVyeSBzdHJpbmcKKyAqIFJldHVybnM6IDY0LWJpdCBoYXNoIG9mIG5vcm1hbGl6 ZWQgcXVlcnkKKyAqLworZXh0ZXJuIHVpbnQ2NCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX25v cm1hbGl6ZV9hbmRfaGFzaChjb25zdCBjaGFyICpxdWVyeSk7CisKKy8qCisgKiBDYWxjdWxhdGUg cmVxdWlyZWQgc2hhcmVkIG1lbW9yeSBzaXplIGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbi4KKyAq LworZXh0ZXJuIFNpemUgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbV9zaXplKHZvaWQp OworCisjZW5kaWYgLyogUE9PTF9UUkFDS19UQUJMRV9NVVRBVElPTl9IICovCmRpZmYgLS1naXQg YS9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jIGIvc3JjL21haW4vcGdwb29sX21haW4uYwppbmRleCBm YTA1ZTE1ZTdhYzQzNWUwNzIyOTgwNjNmOTE4YzcwYWE0ZTU2ODBjLi4zMDJhZjY0ZDA1MTJhMmY1 ZGFlOTVjN2MzNjFjM2YxOGJhNzBiMDM2IDEwMDY0NAotLS0gYS9zcmMvbWFpbi9wZ3Bvb2xfbWFp bi5jCisrKyBiL3NyYy9tYWluL3BncG9vbF9tYWluLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNs dWRlICJhdXRoL3Bvb2xfcGFzc3dkLmgiCiAjaW5jbHVkZSAiYXV0aC9wb29sX2hiYS5oIgogI2lu Y2x1ZGUgInF1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvcG9v bF90cmFja190YWJsZV9tdXRhdGlvbi5oIgogI2luY2x1ZGUgIndhdGNoZG9nL3dkX2ludGVybmFs X2NvbW1hbmRzLmgiCiAjaW5jbHVkZSAid2F0Y2hkb2cvd2RfbGlmZWNoZWNrLmgiCiAjaW5jbHVk ZSAid2F0Y2hkb2cvd2F0Y2hkb2cuaCIKQEAgLTE0ODUsMTEgKzE0ODYsMTQgQEAgc2lndXNyMV9p bnRlcnJ1cHRfcHJvY2Vzc29yKHZvaWQpCiAKIAlpZiAodXNlcjFTaWduYWxTbG90LT5zaWduYWxG bGFnc1tTSUdfV0FUQ0hET0dfU1RBVEVfQ0hBTkdFRF0pCiAJeworCQlXRF9TVEFURVMJd2Rfc3Rh dGU7CisKIAkJZXJlcG9ydChMT0csCiAJCQkJKGVycm1zZygiUGdwb29sLUlJIHBhcmVudCBwcm9j ZXNzIHJlY2VpdmVkIHdhdGNoZG9nIHN0YXRlIGNoYW5nZSBzaWduYWwgZnJvbSB3YXRjaGRvZyIp KSk7CiAKIAkJdXNlcjFTaWduYWxTbG90LT5zaWduYWxGbGFnc1tTSUdfV0FUQ0hET0dfU1RBVEVf Q0hBTkdFRF0gPSBmYWxzZTsKLQkJaWYgKHdkX2ludGVybmFsX2dldF93YXRjaGRvZ19sb2NhbF9u b2RlX3N0YXRlKCkgPT0gV0RfU1RBTkRCWSkKKwkJd2Rfc3RhdGUgPSB3ZF9pbnRlcm5hbF9nZXRf d2F0Y2hkb2dfbG9jYWxfbm9kZV9zdGF0ZSgpOworCQlpZiAod2Rfc3RhdGUgPT0gV0RfU1RBTkRC WSkKIAkJewogCQkJZXJlcG9ydChMT0csCiAJCQkJCShlcnJtc2coIndlIGhhdmUgam9pbmVkIHRo ZSB3YXRjaGRvZyBjbHVzdGVyIGFzIFNUQU5EQlkgbm9kZSIpLApAQCAtMTUwMyw2ICsxNTA3LDEw IEBAIHNpZ3VzcjFfaW50ZXJydXB0X3Byb2Nlc3Nvcih2b2lkKQogCQkJICovCiAJCQlwb29sX3Jl bGVhc2VfZm9sbG93X3ByaW1hcnlfbG9jayh0cnVlKTsKIAkJfQorCQllbHNlIGlmICh3ZF9zdGF0 ZSA9PSBXRF9DT09SRElOQVRPUiAmJiBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25f ZW5hYmxlZCkKKwkJeworCQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl90cmlnZ2VyX2dsb2Jh bF9jb2xkX3N0YXJ0KCk7CisJCX0KIAl9CiAJaWYgKHVzZXIxU2lnbmFsU2xvdC0+c2lnbmFsRmxh Z3NbU0lHX0ZBSUxPVkVSX0lOVEVSUlVQVF0pCiAJewpAQCAtMzA2OCw2ICszMDc2LDEyIEBAIGlu aXRpYWxpemVfc2hhcmVkX21lbV9vYmplY3RzKGJvb2wgY2xlYXJfbWVtY2FjaGVfb2lkbWFwcykK IAkJZWxvZyhERUJVRzEsICJ3YXRjaGRvZzogJXp1IGJ5dGVzIHJlcXVlc3RlZCBmb3Igc2hhcmVk IG1lbW9yeSIsIE1BWEFMSUdOKHdkX2lwY19nZXRfc2hhcmVkX21lbV9zaXplKCkpKTsKIAl9CiAK KwlpZiAocG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX2VuYWJsZWQpCisJeworCQlz aXplICs9IE1BWEFMSUdOKHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6ZSgpKTsK KwkJZWxvZyhERUJVRzEsICJ0cmFja190YWJsZV9tdXRhdGlvbjogJXp1IGJ5dGVzIHJlcXVlc3Rl ZCBmb3Igc2hhcmVkIG1lbW9yeSIsIE1BWEFMSUdOKHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25f c2htZW1fc2l6ZSgpKSk7CisJfQorCiAJaW5pdGlhbGl6ZV9zaGFyZWRfbWVtb3J5X21haW5fc2Vn bWVudChzaXplKTsKIAogCS8qIE1vdmUgdGhlIGJhY2tlbmQgZGVzY3JpcHRvcnMgdG8gc2hhcmVk IG1lbW9yeSAqLwpAQCAtMzE4NCw2ICszMTk4LDEyIEBAIGluaXRpYWxpemVfc2hhcmVkX21lbV9v YmplY3RzKGJvb2wgY2xlYXJfbWVtY2FjaGVfb2lkbWFwcykKIAkJd2RfaXBjX2luaXRpYWxpemVf ZGF0YSgpOwogCX0KIAorCS8qIEluaXRpYWxpemUgdHJhY2sgdGFibGUgbXV0YXRpb24gZm9yIHRy YWNraW5nIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzICovCisJaWYgKHBvb2xfY29uZmlnLT50cmFj a190YWJsZV9tdXRhdGlvbl9lbmFibGVkKQorCXsKKwkJcG9vbF90cmFja190YWJsZV9tdXRhdGlv bl9pbml0KCk7CisJfQorCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvQ29tbWFu ZENvbXBsZXRlLmMgYi9zcmMvcHJvdG9jb2wvQ29tbWFuZENvbXBsZXRlLmMKaW5kZXggYTNiOGYw ZWExOTRmZmVjYzc5ZTU4NTY2YmU4MDU2MmE0NmViNzVhYi4uOGZlZTkzODFmZjQ1NjI3MmMzOTIw YWEyZmNkMTg3ODliYzc2NmQ3MCAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvY29sL0NvbW1hbmRDb21w bGV0ZS5jCisrKyBiL3NyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxldGUuYwpAQCAtMzgsNiArMzgs OCBAQAogI2luY2x1ZGUgInV0aWxzL3BhbGxvYy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJlYW0uaCIKKyNpbmNsdWRlICJ1dGlscy9wb29s X3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF9zZWxlY3Rfd2Fs a2VyLmgiCiAKIHN0YXRpYyBpbnQJZXh0cmFjdF9udHVwbGVzKGNoYXIgKm1lc3NhZ2UpOwogc3Rh dGljIFBPT0xfU1RBVFVTIGhhbmRsZV9taXNtYXRjaF90dXBsZXMoUE9PTF9DT05ORUNUSU9OICpm cm9udGVuZCwgUE9PTF9DT05ORUNUSU9OX1BPT0wgKmJhY2tlbmQsIGNoYXIgKnBhY2tldCwgaW50 IHBhY2tldGxlbiwgYm9vbCBjb21tYW5kX2NvbXBsZXRlKTsKQEAgLTQ2LDYgKzQ4LDcgQEAgc3Rh dGljIGludAlmb3J3YXJkX2VtcHR5X3F1ZXJ5KFBPT0xfQ09OTkVDVElPTiAqZnJvbnRlbmQsIGNo YXIgKnBhY2tldCwgaW50IHBhY2sKIHN0YXRpYyBpbnQJZm9yd2FyZF9wYWNrZXRfdG9fZnJvbnRl bmQoUE9PTF9DT05ORUNUSU9OICpmcm9udGVuZCwgY2hhciBraW5kLCBjaGFyICpwYWNrZXQsIGlu dCBwYWNrZXRsZW4pOwogc3RhdGljIHZvaWQgcHJvY2Vzc19jbGVhcl9jYWNoZShQT09MX0NPTk5F Q1RJT05fUE9PTCAqYmFja2VuZCk7CiBzdGF0aWMgYm9vbCBjaGVja19hbHRlcl9yb2xlX3N0YXRl bWVudChBbHRlclJvbGVTdG10ICpzdG10KTsKK3N0YXRpYyB2b2lkIHRyYWNrX2N0ZV9tdXRhdGlv bnMoV2l0aENsYXVzZSAqd2l0aENsYXVzZSwgaW50IGRib2lkKTsKIAogUE9PTF9TVEFUVVMKIENv bW1hbmRDb21wbGV0ZShQT09MX0NPTk5FQ1RJT04gKmZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05f UE9PTCAqYmFja2VuZCwgYm9vbCBjb21tYW5kX2NvbXBsZXRlKQpAQCAtMzA0LDYgKzMwNywxMTMg QEAgaGFuZGxlX3F1ZXJ5X2NvbnRleHQoUE9PTF9DT05ORUNUSU9OX1BPT0wgKmJhY2tlbmQpCiAK IAlub2RlID0gc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0LT5wYXJzZV90cmVlOwogCisJ LyoKKwkgKiBUcmFjayB0YWJsZSB3cml0ZXMgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1 cmUuCisJICogTWFyayB0YWJsZXMgYXMgd3JpdHRlbiB3aGVuIElOU0VSVC9VUERBVEUvREVMRVRF IGNvbXBsZXRlcy4KKwkgKi8KKwlpZiAocG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9u X2VuYWJsZWQgJiYgbm9kZSAhPSBOVUxMKQorCXsKKwkJY2hhcgkgICAqdGFibGVfbmFtZSA9IE5V TEw7CisJCWludAkJCXRhYmxlX29pZCA9IDA7CisJCWludAkJCWRib2lkID0gMDsKKworCQlpZiAo SXNBKG5vZGUsIEluc2VydFN0bXQpKQorCQl7CisJCQlJbnNlcnRTdG10ICpzdG10ID0gKEluc2Vy dFN0bXQgKikgbm9kZTsKKwkJCWlmIChzdG10LT5yZWxhdGlvbiAhPSBOVUxMKQorCQkJCXRhYmxl X25hbWUgPSBtYWtlX3RhYmxlX25hbWVfZnJvbV9yYW5nZXZhcihzdG10LT5yZWxhdGlvbik7CisJ CQkvKiBUcmFjayBDVEVzIHdpdGggZGF0YSBtb2RpZmljYXRpb25zIGluIFdJVEggY2xhdXNlICov CisJCQlpZiAoc3RtdC0+d2l0aENsYXVzZSAhPSBOVUxMKQorCQkJeworCQkJCWRib2lkID0gcG9v bF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisJCQkJdHJhY2tfY3Rl X211dGF0aW9ucyhzdG10LT53aXRoQ2xhdXNlLCBkYm9pZCk7CisJCQl9CisJCX0KKwkJZWxzZSBp ZiAoSXNBKG5vZGUsIFVwZGF0ZVN0bXQpKQorCQl7CisJCQlVcGRhdGVTdG10ICpzdG10ID0gKFVw ZGF0ZVN0bXQgKikgbm9kZTsKKwkJCWlmIChzdG10LT5yZWxhdGlvbiAhPSBOVUxMKQorCQkJCXRh YmxlX25hbWUgPSBtYWtlX3RhYmxlX25hbWVfZnJvbV9yYW5nZXZhcihzdG10LT5yZWxhdGlvbik7 CisJCQkvKiBUcmFjayBDVEVzIHdpdGggZGF0YSBtb2RpZmljYXRpb25zIGluIFdJVEggY2xhdXNl ICovCisJCQlpZiAoc3RtdC0+d2l0aENsYXVzZSAhPSBOVUxMKQorCQkJeworCQkJCWRib2lkID0g cG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisJCQkJdHJhY2tf Y3RlX211dGF0aW9ucyhzdG10LT53aXRoQ2xhdXNlLCBkYm9pZCk7CisJCQl9CisJCX0KKwkJZWxz ZSBpZiAoSXNBKG5vZGUsIERlbGV0ZVN0bXQpKQorCQl7CisJCQlEZWxldGVTdG10ICpzdG10ID0g KERlbGV0ZVN0bXQgKikgbm9kZTsKKwkJCWlmIChzdG10LT5yZWxhdGlvbiAhPSBOVUxMKQorCQkJ CXRhYmxlX25hbWUgPSBtYWtlX3RhYmxlX25hbWVfZnJvbV9yYW5nZXZhcihzdG10LT5yZWxhdGlv bik7CisJCQkvKiBUcmFjayBDVEVzIHdpdGggZGF0YSBtb2RpZmljYXRpb25zIGluIFdJVEggY2xh dXNlICovCisJCQlpZiAoc3RtdC0+d2l0aENsYXVzZSAhPSBOVUxMKQorCQkJeworCQkJCWRib2lk ID0gcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisJCQkJdHJh Y2tfY3RlX211dGF0aW9ucyhzdG10LT53aXRoQ2xhdXNlLCBkYm9pZCk7CisJCQl9CisJCX0KKwkJ ZWxzZSBpZiAoSXNBKG5vZGUsIFNlbGVjdFN0bXQpKQorCQl7CisJCQkvKiBTRUxFQ1QgaXRzZWxm IGRvZXNuJ3QgbW9kaWZ5IHRhYmxlcywgYnV0IFdJVEggY2xhdXNlIG1pZ2h0ICovCisJCQlTZWxl Y3RTdG10ICpzdG10ID0gKFNlbGVjdFN0bXQgKikgbm9kZTsKKwkJCWlmIChzdG10LT53aXRoQ2xh dXNlICE9IE5VTEwpCisJCQl7CisJCQkJZGJvaWQgPSBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9u X2dldF9kYXRhYmFzZV9vaWQoKTsKKwkJCQl0cmFja19jdGVfbXV0YXRpb25zKHN0bXQtPndpdGhD bGF1c2UsIGRib2lkKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChJc0Eobm9kZSwgVHJ1bmNhdGVT dG10KSkKKwkJeworCQkJLyogVFJVTkNBVEUgY2FuIGFmZmVjdCBtdWx0aXBsZSB0YWJsZXMgKi8K KwkJCVRydW5jYXRlU3RtdCAqc3RtdCA9IChUcnVuY2F0ZVN0bXQgKikgbm9kZTsKKwkJCUxpc3RD ZWxsICAgKmNlbGw7CisKKwkJCWRib2lkID0gcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRf ZGF0YWJhc2Vfb2lkKCk7CisJCQlpZiAoZGJvaWQgPiAwKQorCQkJeworCQkJCWZvcmVhY2goY2Vs bCwgc3RtdC0+cmVsYXRpb25zKQorCQkJCXsKKwkJCQkJUmFuZ2VWYXIgICAqcnYgPSAoUmFuZ2VW YXIgKikgbGZpcnN0KGNlbGwpOworCQkJCQlpZiAocnYgIT0gTlVMTCkKKwkJCQkJeworCQkJCQkJ dGFibGVfbmFtZSA9IG1ha2VfdGFibGVfbmFtZV9mcm9tX3JhbmdldmFyKHJ2KTsKKwkJCQkJCWlm ICh0YWJsZV9uYW1lICE9IE5VTEwpCisJCQkJCQl7CisJCQkJCQkJdGFibGVfb2lkID0gcG9vbF90 YWJsZV9uYW1lX3RvX29pZCh0YWJsZV9uYW1lKTsKKwkJCQkJCQlpZiAodGFibGVfb2lkID4gMCkK KwkJCQkJCQl7CisJCQkJCQkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fbWFya190YWJsZV93 cml0dGVuKHRhYmxlX29pZCwgZGJvaWQpOworCQkJCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJCQkJ CQkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogbWFya2VkIHRhYmxlIFwiJXNcIiBh cyB3cml0dGVuIChUUlVOQ0FURSkiLCB0YWJsZV9uYW1lKSkpOworCQkJCQkJCX0KKwkJCQkJCX0K KwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCS8qIEFscmVhZHkgaGFuZGxlZCBhbGwgdGFibGVzLCBz a2lwIHRoZSBjb21tb24gcGF0aCAqLworCQkJdGFibGVfbmFtZSA9IE5VTEw7CisJCX0KKwkJZWxz ZSBpZiAoSXNBKG5vZGUsIE1lcmdlU3RtdCkpCisJCXsKKwkJCU1lcmdlU3RtdCAgKnN0bXQgPSAo TWVyZ2VTdG10ICopIG5vZGU7CisJCQlpZiAoc3RtdC0+cmVsYXRpb24gIT0gTlVMTCkKKwkJCQl0 YWJsZV9uYW1lID0gbWFrZV90YWJsZV9uYW1lX2Zyb21fcmFuZ2V2YXIoc3RtdC0+cmVsYXRpb24p OworCQl9CisKKwkJaWYgKHRhYmxlX25hbWUgIT0gTlVMTCkKKwkJeworCQkJdGFibGVfb2lkID0g cG9vbF90YWJsZV9uYW1lX3RvX29pZCh0YWJsZV9uYW1lKTsKKwkJCWRib2lkID0gcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisJCQlpZiAodGFibGVfb2lkID4g MCAmJiBkYm9pZCA+IDApCisJCQl7CisJCQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJr X3RhYmxlX3dyaXR0ZW4odGFibGVfb2lkLCBkYm9pZCk7CisJCQkJZXJlcG9ydChERUJVRzEsCisJ CQkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogbWFya2VkIHRhYmxlIFwiJXNcIiBh cyB3cml0dGVuIiwgdGFibGVfbmFtZSkpKTsKKwkJCX0KKwkJfQorCX0KKwogCWlmIChJc0Eobm9k ZSwgUHJlcGFyZVN0bXQpKQogCXsKIAkJaWYgKHNlc3Npb25fY29udGV4dC0+dW5jb21wbGV0ZWRf bWVzc2FnZSkKQEAgLTUzMSw2ICs2NDEsODUgQEAgY2hlY2tfYWx0ZXJfcm9sZV9zdGF0ZW1lbnQo QWx0ZXJSb2xlU3RtdCAqc3RtdCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBUcmFjayB0 YWJsZSBtdXRhdGlvbnMgaW4gV0lUSCBjbGF1c2UgQ1RFcy4KKyAqIEl0ZXJhdGVzIHRocm91Z2gg Q1RFcyBhbmQgbWFya3MgdGFibGVzIGFzIHdyaXR0ZW4gZm9yIGFueSBETUwgb3BlcmF0aW9ucy4K KyAqLworc3RhdGljIHZvaWQKK3RyYWNrX2N0ZV9tdXRhdGlvbnMoV2l0aENsYXVzZSAqd2l0aENs YXVzZSwgaW50IGRib2lkKQoreworCUxpc3RDZWxsICAgKmNlbGw7CisJY2hhcgkgICAqdGFibGVf bmFtZTsKKwlpbnQJCQl0YWJsZV9vaWQ7CisKKwlpZiAod2l0aENsYXVzZSA9PSBOVUxMIHx8IGRi b2lkIDw9IDApCisJCXJldHVybjsKKworCWZvcmVhY2goY2VsbCwgd2l0aENsYXVzZS0+Y3RlcykK Kwl7CisJCUNvbW1vblRhYmxlRXhwciAqY3RlID0gKENvbW1vblRhYmxlRXhwciAqKSBsZmlyc3Qo Y2VsbCk7CisKKwkJaWYgKGN0ZSA9PSBOVUxMIHx8IGN0ZS0+Y3RlcXVlcnkgPT0gTlVMTCkKKwkJ CWNvbnRpbnVlOworCisJCS8qIENoZWNrIHdoYXQgdHlwZSBvZiBzdGF0ZW1lbnQgdGhlIENURSBj b250YWlucyAqLworCQlpZiAoSXNBKGN0ZS0+Y3RlcXVlcnksIEluc2VydFN0bXQpKQorCQl7CisJ CQlJbnNlcnRTdG10ICpzdG10ID0gKEluc2VydFN0bXQgKikgY3RlLT5jdGVxdWVyeTsKKwkJCWlm IChzdG10LT5yZWxhdGlvbiAhPSBOVUxMKQorCQkJeworCQkJCXRhYmxlX25hbWUgPSBtYWtlX3Rh YmxlX25hbWVfZnJvbV9yYW5nZXZhcihzdG10LT5yZWxhdGlvbik7CisJCQkJaWYgKHRhYmxlX25h bWUgIT0gTlVMTCkKKwkJCQl7CisJCQkJCXRhYmxlX29pZCA9IHBvb2xfdGFibGVfbmFtZV90b19v aWQodGFibGVfbmFtZSk7CisJCQkJCWlmICh0YWJsZV9vaWQgPiAwKQorCQkJCQl7CisJCQkJCQlw b29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVfd3JpdHRlbih0YWJsZV9vaWQsIGRi b2lkKTsKKwkJCQkJCWVyZXBvcnQoREVCVUcxLAorCQkJCQkJCQkoZXJybXNnKCJ0cmFja190YWJs ZV9tdXRhdGlvbjogbWFya2VkIHRhYmxlIFwiJXNcIiBhcyB3cml0dGVuIChDVEUgSU5TRVJUKSIs IHRhYmxlX25hbWUpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoSXNB KGN0ZS0+Y3RlcXVlcnksIFVwZGF0ZVN0bXQpKQorCQl7CisJCQlVcGRhdGVTdG10ICpzdG10ID0g KFVwZGF0ZVN0bXQgKikgY3RlLT5jdGVxdWVyeTsKKwkJCWlmIChzdG10LT5yZWxhdGlvbiAhPSBO VUxMKQorCQkJeworCQkJCXRhYmxlX25hbWUgPSBtYWtlX3RhYmxlX25hbWVfZnJvbV9yYW5nZXZh cihzdG10LT5yZWxhdGlvbik7CisJCQkJaWYgKHRhYmxlX25hbWUgIT0gTlVMTCkKKwkJCQl7CisJ CQkJCXRhYmxlX29pZCA9IHBvb2xfdGFibGVfbmFtZV90b19vaWQodGFibGVfbmFtZSk7CisJCQkJ CWlmICh0YWJsZV9vaWQgPiAwKQorCQkJCQl7CisJCQkJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0 aW9uX21hcmtfdGFibGVfd3JpdHRlbih0YWJsZV9vaWQsIGRib2lkKTsKKwkJCQkJCWVyZXBvcnQo REVCVUcxLAorCQkJCQkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogbWFya2VkIHRh YmxlIFwiJXNcIiBhcyB3cml0dGVuIChDVEUgVVBEQVRFKSIsIHRhYmxlX25hbWUpKSk7CisJCQkJ CX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoSXNBKGN0ZS0+Y3RlcXVlcnksIERlbGV0 ZVN0bXQpKQorCQl7CisJCQlEZWxldGVTdG10ICpzdG10ID0gKERlbGV0ZVN0bXQgKikgY3RlLT5j dGVxdWVyeTsKKwkJCWlmIChzdG10LT5yZWxhdGlvbiAhPSBOVUxMKQorCQkJeworCQkJCXRhYmxl X25hbWUgPSBtYWtlX3RhYmxlX25hbWVfZnJvbV9yYW5nZXZhcihzdG10LT5yZWxhdGlvbik7CisJ CQkJaWYgKHRhYmxlX25hbWUgIT0gTlVMTCkKKwkJCQl7CisJCQkJCXRhYmxlX29pZCA9IHBvb2xf dGFibGVfbmFtZV90b19vaWQodGFibGVfbmFtZSk7CisJCQkJCWlmICh0YWJsZV9vaWQgPiAwKQor CQkJCQl7CisJCQkJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVfd3JpdHRl bih0YWJsZV9vaWQsIGRib2lkKTsKKwkJCQkJCWVyZXBvcnQoREVCVUcxLAorCQkJCQkJCQkoZXJy bXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogbWFya2VkIHRhYmxlIFwiJXNcIiBhcyB3cml0dGVu IChDVEUgREVMRVRFKSIsIHRhYmxlX25hbWUpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0K Kwl9Cit9CisKIC8qCiAgKiBFeHRyYWN0IHRoZSBudW1iZXIgb2YgdHVwbGVzIGZyb20gQ29tbWFu ZENvbXBsZXRlIG1lc3NhZ2UKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvY29sL2NoaWxkLmMg Yi9zcmMvcHJvdG9jb2wvY2hpbGQuYwppbmRleCBjMzRmMDU3MjgxYmU2MmZlYWYzOWRiMWJiNjA1 MDYyZjU2ZGMzOThjLi5jODNmYjExY2MyNmVkMDVjOGFiMjA1N2Y1ZTdmMTY3ZmMwMzhhMWZiIDEw MDY0NAotLS0gYS9zcmMvcHJvdG9jb2wvY2hpbGQuYworKysgYi9zcmMvcHJvdG9jb2wvY2hpbGQu YwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgInV0aWxzL2Vsb2cuaCIKICNpbmNsdWRlICJ1 dGlscy9wc19zdGF0dXMuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKyNpbmNsdWRl ICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCiAKICNpbmNsdWRlICJjb250ZXh0 L3Bvb2xfcHJvY2Vzc19jb250ZXh0LmgiCiAjaW5jbHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25f Y29udGV4dC5oIgpAQCAtMjEzLDYgKzIxNCwxMiBAQCBkb19jaGlsZChpbnQgKmZkcykKIAkvKiBJ bml0aWFsaXplIHBlciBwcm9jZXNzIGNvbnRleHQgKi8KIAlwb29sX2luaXRfcHJvY2Vzc19jb250 ZXh0KCk7CiAKKwkvKiBJbml0aWFsaXplIHRyYWNrIHRhYmxlIG11dGF0aW9uIGNoaWxkIHN0YXRl IGZvciBjb2xkIHN0YXJ0IHRyYWNraW5nICovCisJaWYgKHBvb2xfY29uZmlnLT50cmFja190YWJs ZV9tdXRhdGlvbl9lbmFibGVkKQorCXsKKwkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9jaGls ZF9pbml0KCk7CisJfQorCiAJLyogaW5pdGlhbGl6ZSBjb25uZWN0aW9uIHBvb2wgKi8KIAlpZiAo cG9vbF9pbml0X2NwKCkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5z YW1wbGUtc3RyZWFtIGIvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtCmluZGV4 IDQ1NGZkYjllNWQxZmQ2NTQzN2I2YTY3ZjEyYWI2MjY1OGVhMDhmNDkuLjBiZDU5YTAzZDdjNjlj MGZhMjdhN2Q5MDQwZjQ0MTUxYWRlMzQ0ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9zYW1wbGUvcGdwb29s LmNvbmYuc2FtcGxlLXN0cmVhbQorKysgYi9zcmMvc2FtcGxlL3BncG9vbC5jb25mLnNhbXBsZS1z dHJlYW0KQEAgLTQ5OSw2ICs0OTksNTEgQEAgYmFja2VuZF9jbHVzdGVyaW5nX21vZGUgPSBzdHJl YW1pbmdfcmVwbGljYXRpb24KICNzdGF0ZW1lbnRfbGV2ZWxfbG9hZF9iYWxhbmNlID0gb2ZmCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRW5hYmxlcyBzdGF0ZW1lbnQgbGV2 ZWwgbG9hZCBiYWxhbmNpbmcKIAorIyAtIFRyYWNrIFRhYmxlIE11dGF0aW9uIChMYWdsZXNzIFJl YWQgUmVwbGljYSkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdBUk5J Tkc6IEVuYWJsaW5nIHRoaXMgZmVhdHVyZSBpbmNyZWFzZXMgc2hhcmVkIG1lbW9yeSB1c2FnZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERlZmF1bHQgc2V0dGluZ3MgcmVx dWlyZSB+Ni40IE1CIHNoYXJlZCBtZW1vcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyAoMC4xIE1CIHRhYmxlIHRyYWNraW5nICsgNi4zIE1CIHF1ZXJ5IGNhY2hlKQorCisj dHJhY2tfdGFibGVfbXV0YXRpb25fZW5hYmxlZCA9IG9mZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIEVuYWJsZSBpbi1tZW1vcnkgdHJhY2tpbmcgb2YgcmVjZW50bHkgd3Jp dHRlbiB0YWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0byBwcmV2 ZW50IHN0YWxlIHJlYWRzIGZyb20gcmVwbGljYXMgZHVyaW5nIHJlcGxpY2F0aW9uIGxhZworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVsb2Fk KQorCisjdHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciA9IDUuMAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjIFRUTCBtdWx0aXBsaWVyOiBUVEwgPSByZXBsaWNhdGlv bl9kZWxheSAqIGZhY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhp Z2hlciB2YWx1ZXMgcHJvdmlkZSBtb3JlIHNhZmV0eSBtYXJnaW4KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMS4wLTEwMC4wIChkZWZhdWx0OiA1LjApCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZWxvYWQp CisKKyN0cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uID0gMjAwMAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIER1cmF0aW9uIGluIG1pbGxpc2Vjb25k cyB0byByb3V0ZSBhbGwgcXVlcmllcyB0byBwcmltYXJ5CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgYWZ0ZXIgY2hpbGQgcHJvY2VzcyBzdGFydHMgKGNvbGQgc3RhcnQgcGVy aW9kKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiAwLTYwMDAw IG1zIChkZWZhdWx0OiAyMDAwIG1zID0gMiBzZWNvbmRzKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIFNldCB0byAwIHRvIGRpc2FibGUgY29sZCBzdGFydCBiZWhhdmlvcgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVs b2FkKQorCisjdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cyA9IDEwMjQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZv ciB0cmFjayB0YWJsZSBtdXRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIEhpZ2hlciB2YWx1ZXMgcmVkdWNlIGhhc2ggY29sbGlzaW9ucworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiA2NC02NTUzNiAoZGVmYXVsdDogMTAyNCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3Rh cnQpCisKKyN0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplID0gMjA0OAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1heGltdW0gbnVtYmVyIG9mIHRhYmxlcyB0byB0 cmFjayBzaW11bHRhbmVvdXNseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IFJhbmdlOiAxMjgtMTMxMDcyIChkZWZhdWx0OiAyMDQ4KQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKworI3RyYWNrX3RhYmxl X211dGF0aW9uX3F1ZXJ5X2J1Y2tldHMgPSAyMDQ4CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgcXVlcnkgcGFyc2UgY2FjaGUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogNjQtNjU1MzYgKGRl ZmF1bHQ6IDIwNDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5n ZSByZXF1aXJlcyByZXN0YXJ0KQorCisjdHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2Vf Y2FjaGVfc2l6ZSA9IDEwMDAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg TWF4aW11bSBudW1iZXIgb2YgcXVlcnkgcGFyc2UgcmVzdWx0cyB0byBjYWNoZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiAxMDAtMTAwMDAwMCAoZGVmYXVsdDog MTAwMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWVtb3J5IHVzYWdl OiB+NjQwIGJ5dGVzIHBlciBlbnRyeSAofjYuMyBNQiBkZWZhdWx0LCB+NjQgTUIgZm9yIDEwMDAw MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVz IHJlc3RhcnQpCisKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgU1RSRUFNSU5HIFJFUExJQ0FU SU9OIE1PREUKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9zdHJlYW1p bmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYyBiL3NyYy9zdHJlYW1pbmdfcmVwbGlj YXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYwppbmRleCAzMTFiNjM4NjU4ZTY2ZWJiNTYxNjJhZDlm YTQzOTIzMTViMmRmNjRlLi4yZmM0YWZmZmRhZDE0OGZiZDAyNmQ5Nzk4NDEwMjdlNDU1YmE4MDhi IDEwMDY0NAotLS0gYS9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxk LmMKKysrIGIvc3JjL3N0cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jCkBA IC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAidXRpbHMvcG9vbF9pcC5oIgogI2luY2x1ZGUgInV0 aWxzL3BzX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0aWxzL3Bvb2xfc3RyZWFtLmgiCisjaW5jbHVk ZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oIgogCiAjaW5jbHVkZSAiY29udGV4 dC9wb29sX3Byb2Nlc3NfY29udGV4dC5oIgogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9zZXNzaW9u X2NvbnRleHQuaCIKQEAgLTY5NSw2ICs2OTYsNyBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1lX2xh Z193aXRoX2NtZCh2b2lkKQogCWRvdWJsZQkJZGVsYXlfbXM7CiAJdWludDY0CQlkZWxheTsKIAl1 aW50NjQJCWRlbGF5X3RocmVzaG9sZF9ieV90aW1lOworCXVpbnQ2NAkJbWF4X2RlbGF5X3VzID0g MDsJLyogVHJhY2sgbWF4aW11bSBkZWxheSBmb3IgdGFibGUgbXV0YXRpb24gbWFwICovCiAJaW50 CQkJdG9rZW5fY291bnQgPSAwOwogCWludAkJCXByaW1hcnlfbm9kZV9pZDsKIAlpbnQJCQlzYXZl X2Vycm5vOwpAQCAtMTAwMyw2ICsxMDA1LDEwIEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFn X3dpdGhfY21kKHZvaWQpCiAJCQlia2luZm8tPnN0YW5kYnlfZGVsYXkgPSBkZWxheTsKIAkJCWJr aW5mby0+c3RhbmRieV9kZWxheV9ieV90aW1lID0gdHJ1ZTsKIAorCQkJLyogVHJhY2sgbWF4aW11 bSBkZWxheSBmb3IgdGFibGUgbXV0YXRpb24gbWFwIFRUTCBjYWxjdWxhdGlvbiAqLworCQkJaWYg KGRlbGF5ID4gbWF4X2RlbGF5X3VzKQorCQkJCW1heF9kZWxheV91cyA9IGRlbGF5OworCiAJCQkv KgogCQkJICogTG9nIGRlbGF5IGlmIG5lY2Vzc2FyeS4gdGhyZXNob2xkIGlzIGluIG1pbGxpc2Vj b25kcywgY29udmVydAogCQkJICogdG8gbWljcm9zZWNvbmRzLgpAQCAtMTAyMSw2ICsxMDI3LDEw IEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnX3dpdGhfY21kKHZvaWQpCiAJCQl0b2tlbiA9 IHN0cnRva19yKE5VTEwsICIgXHRcbiIsICZzYXZlcHRyKTsKIAkJfQogCisJCS8qIFVwZGF0ZSB0 cmFjayB0YWJsZSBtdXRhdGlvbiBUVEwgYmFzZWQgb24gbWF4aW11bSBvYnNlcnZlZCBkZWxheSAq LworCQlpZiAocG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX2VuYWJsZWQgJiYgbWF4 X2RlbGF5X3VzID4gMCkKKwkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdXBkYXRlX3R0bCht YXhfZGVsYXlfdXMpOworCiAJfQogCVBHX0NBVENIKCk7CiAJewpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzc2lvbi90ZXN0cy8wNDIudHJhY2tfdGFibGVfbXV0YXRpb24vdGVzdC5zaCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQyLnRyYWNrX3RhYmxlX211dGF0aW9uL3Rlc3Quc2gK bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uY2UwZjdlNDY0MDlmYTRiYTEzZTcxNGM2ZTk3YWJiNTlmNWFlZjgzNgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQyLnRyYWNrX3RhYmxl X211dGF0aW9uL3Rlc3Quc2gKQEAgLTAsMCArMSwyOTIgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gK KyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisjIHRlc3Qgc2NyaXB0IGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0 dXJlIChpbi1tZW1vcnkgdGFibGUgdHJhY2tpbmcpLgorIyBUZXN0cyByb3V0aW5nIG9mIHF1ZXJp ZXMgYmFzZWQgb24gcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMuCisjCitzb3VyY2UgJFRFU1RMSUJT CitURVNURElSPXRlc3RkaXIKK1BTUUw9JFBHQklOL3BzcWwKK1BTUUxPUFRTPSItYSAtcSAtWCIK K1BHUE9PTEJJTj0kUEdQT09MX0lOU1RBTExfRElSL2JpbgorZXhwb3J0IFBHREFUQUJBU0U9dGVz dAorCisjIE9ubHkgcnVuIGluIHN0cmVhbWluZyByZXBsaWNhdGlvbiBtb2RlIHNpbmNlIHRoYXQn cyB0aGUgdGFyZ2V0IHVzZSBjYXNlCitmb3IgbW9kZSBpbiBzCitkbworICAgIHJtIC1mciAkVEVT VERJUgorICAgIG1rZGlyICRURVNURElSCisgICAgY2QgJFRFU1RESVIKKworICAgICMgQ3JlYXRl IHRlc3QgZW52aXJvbm1lbnQgd2l0aCAyIG5vZGVzCisgICAgZWNobyAtbiAiY3JlYXRpbmcgdGVz dCBlbnZpcm9ubWVudC4uLiIKKyAgICAkUEdQT09MX1NFVFVQIC1tICRtb2RlIC1uIDIgfHwgZXhp dCAxCisgICAgZWNobyAiZG9uZS4iCisKKyAgICBzb3VyY2UgLi9iYXNocmMucG9ydHMKKworICAg ICMgQ29uZmlndXJlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUKKyAgICBlY2hvICJ0cmFj a190YWJsZV9tdXRhdGlvbl9lbmFibGVkID0gb24iID4+IGV0Yy9wZ3Bvb2wuY29uZgorICAgIGVj aG8gInRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3IgPSA1LjAiID4+IGV0Yy9wZ3Bvb2wu Y29uZgorICAgIGVjaG8gInRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24g PSAyMDAwIiA+PiBldGMvcGdwb29sLmNvbmYKKworICAgICMgRW5hYmxlIGxvYWQgYmFsYW5jaW5n IGV4cGxpY2l0bHkKKyAgICBlY2hvICJsb2FkX2JhbGFuY2VfbW9kZSA9IG9uIiA+PiBldGMvcGdw b29sLmNvbmYKKworICAgICMgQ29uZmlndXJlIHdlaWdodHMgc28gd2UgY2FuIGRpc3Rpbmd1aXNo IHJvdXRpbmcKKyAgICAjIEJhY2tlbmQgMCAocHJpbWFyeSkgd2VpZ2h0PTAsIEJhY2tlbmQgMSAo c3RhbmRieSkgd2VpZ2h0PTEKKyAgICAjIFRoaXMgbWVhbnMgbG9hZCBiYWxhbmNlZCBxdWVyaWVz IGdvIHRvIG5vZGUgMSBieSBkZWZhdWx0CisgICAgZWNobyAiYmFja2VuZF93ZWlnaHQwID0gMCIg Pj4gZXRjL3BncG9vbC5jb25mCisgICAgZWNobyAiYmFja2VuZF93ZWlnaHQxID0gMSIgPj4gZXRj L3BncG9vbC5jb25mCisKKyAgICAjIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nIHRvIHNlZSByb3V0aW5n IGRlY2lzaW9ucworICAgIGVjaG8gImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiID4+IGV0Yy9w Z3Bvb2wuY29uZgorCisgICAgLi9zdGFydGFsbAorCisgICAgZXhwb3J0IFBHUE9SVD0kUEdQT09M X1BPUlQKKworICAgIHdhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyAgICAjIENyZWF0ZSB0ZXN0 IHRhYmxlcworICAgICRQU1FMIHRlc3QgPDxFT0YKK0NSRUFURSBUQUJMRSB0MShpIElOVEVHRVIp OworQ1JFQVRFIFRBQkxFIHQyKGkgSU5URUdFUik7CitDUkVBVEUgVEFCTEUgdDMoaSBJTlRFR0VS KTsKK0VPRgorCisgICAgZWNobyAiPT09IFRlc3QgMTogQ29sZCBTdGFydCBSb3V0aW5nID09PSIK KyAgICAjIER1cmluZyBjb2xkIHN0YXJ0LCBhbGwgcXVlcmllcyBzaG91bGQgZ28gdG8gcHJpbWFy eQorICAgICMgUmVzdGFydCBwZ3Bvb2wgdG8gdHJpZ2dlciBjb2xkIHN0YXJ0CisgICAgLi9zaHV0 ZG93bmFsbAorICAgIC4vc3RhcnRhbGwKKyAgICB3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisg ICAgIyBJbW1lZGlhdGVseSBxdWVyeSAtIHNob3VsZCBnbyB0byBwcmltYXJ5IGR1ZSB0byBjb2xk IHN0YXJ0CisgICAgJFBTUUwgdGVzdCAtYyAiU0VMRUNUICdjb2xkX3N0YXJ0X3Rlc3QnIGFzIG1h cmtlciwgKiBGUk9NIHQxOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBDaGVjayBsb2cgZm9y IGNvbGQgc3RhcnQgbWVzc2FnZSAodXNlIC1hIHRvIGhhbmRsZSBiaW5hcnkgbG9nIGZpbGVzKQor ICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBvZiB0cmFj ayB0YWJsZSBtdXRhdGlvbiBjb2xkIHN0YXJ0IiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAg ICBlY2hvICJUZXN0IDEgUEFTU0VEOiBDb2xkIHN0YXJ0IHJvdXRpbmcgd29ya3MiCisgICAgZWxz ZQorICAgICAgICBlY2hvICJUZXN0IDEgRkFJTEVEOiBDb2xkIHN0YXJ0IHJvdXRpbmcgbm90IGRl dGVjdGVkIgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisK KyAgICBlY2hvICI9PT0gVGVzdCAyOiBXYWl0IGZvciBjb2xkIHN0YXJ0IHRvIGVuZCA9PT0iCisg ICAgIyBXYWl0IGZvciBjb2xkIHN0YXJ0IHBlcmlvZCB0byBlbmQgKDIgc2Vjb25kcykKKyAgICBz bGVlcCAzCisKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAg ICAjIE5vdyBhIGNsZWFuIHRhYmxlIHF1ZXJ5IHNob3VsZCBsb2FkIGJhbGFuY2UgKGdvIHRvIG5v ZGUgMSkKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2FmdGVyX2NvbGRfc3RhcnQnIGFzIG1h cmtlciwgKiBGUk9NIHQzOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBBZnRlciBjb2xkIHN0 YXJ0LCBxdWVyaWVzIHRvIGNsZWFuIHRhYmxlcyBzaG91bGQgbG9hZCBiYWxhbmNlCisgICAgIyBD aGVjayB0aGF0IGl0IGRpZCBOT1QgZ2V0IGZvcmNlZCB0byBwcmltYXJ5IGR1ZSB0byB0cmFjayB0 YWJsZSBtdXRhdGlvbgorICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2Ug YmVjYXVzZSBvZiB0cmFjayB0YWJsZSBtdXRhdGlvbiBjb2xkIHN0YXJ0IiBsb2cvcGdwb29sLmxv ZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDIgRkFJTEVEOiBTdGlsbCBpbiBjb2xkIHN0YXJ0 IGFmdGVyIHdhaXRpbmciCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisg ICAgZmkKKyAgICBlY2hvICJUZXN0IDIgUEFTU0VEOiBDb2xkIHN0YXJ0IGVuZGVkIGNvcnJlY3Rs eSIKKworICAgIGVjaG8gIj09PSBUZXN0IDM6IFdyaXRlLXRoZW4tUmVhZCBSb3V0aW5nID09PSIK KyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFdyaXRl IHRvIHQxIGFuZCB0aGVuIHJlYWQgLSB1c2Ugc2luZ2xlIGNvbm5lY3Rpb24gdG8gZW5zdXJlIHNh bWUgc2Vzc2lvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK0lOU0VSVCBJTlRPIHQxIFZBTFVFUyAo MSk7CitTRUxFQ1QgJ3dyaXRlX3JlYWRfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdDE7CitFT0YK KworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAg MC41CisKKyAgICAjIENoZWNrIGxvZyBmb3IgdGFibGUgc3RhbGVuZXNzIG1lc3NhZ2UKKyAgICBp ZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyBy ZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0 IDMgUEFTU0VEOiBXcml0ZS10aGVuLXJlYWQgcm91dGluZyB3b3JrcyIKKyAgICBlbHNlCisgICAg ICAgIGVjaG8gIlRlc3QgMyBGQUlMRUQ6IFRhYmxlIHN0YWxlbmVzcyBub3QgZGV0ZWN0ZWQgYWZ0 ZXIgd3JpdGUiCisgICAgICAgICMgU2hvdyByZWxldmFudCBsb2cgZW50cmllcyBmb3IgZGVidWdn aW5nCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9uIiBsb2cvcGdwb29s LmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisg ICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDQ6IENsZWFuIFRhYmxlIFN0aWxsIExvYWQgQmFs YW5jZXMgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKwor ICAgICMgUmVhZCBmcm9tIHQyIChuZXZlciB3cml0dGVuIHRvKSAtIHNob3VsZCBsb2FkIGJhbGFu Y2UKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2NsZWFuX3RhYmxlX3Rlc3QnIGFzIG1hcmtl ciwgKiBGUk9NIHQyOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBTaG91bGQgTk9UIHNlZSB0 cmFjayB0YWJsZSBtdXRhdGlvbiBibG9ja2luZyBtZXNzYWdlIGZvciB0MgorICAgIGlmIGdyZXAg LWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qdDIuKndhcyByZWNl bnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDQg RkFJTEVEOiBDbGVhbiB0YWJsZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgc3RhbGUiCisgICAgICAg IC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBlY2hvICJUZXN0IDQg UEFTU0VEOiBDbGVhbiB0YWJsZXMgc3RpbGwgbG9hZCBiYWxhbmNlIgorCisgICAgZWNobyAiPT09 IFRlc3QgNTogVVBEQVRFIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENsZWFyIHRo ZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFVwZGF0ZSB0MiBhbmQgdGhlbiBy ZWFkIC0gdXNlIHNpbmdsZSBjb25uZWN0aW9uCisgICAgJFBTUUwgdGVzdCA8PEVPRgorVVBEQVRF IHQyIFNFVCBpID0gOTk5IFdIRVJFIGkgPSAwOworU0VMRUNUICd1cGRhdGVfdGVzdCcgYXMgbWFy a2VyLCAqIEZST00gdDI7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBp cyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3Qg bG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdw b29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDUgUEFTU0VEOiBVUERBVEUgbWFya3Mg dGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDUgRkFJTEVEOiBV UERBVEUgZGlkIG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICAuL3NodXRkb3duYWxs CisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA2OiBERUxFVEUg TWFya3MgVGFibGUgYXMgU3RhbGUgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9n L3BncG9vbC5sb2cKKworICAgICMgRGVsZXRlIGZyb20gdDMgYW5kIHRoZW4gcmVhZCAtIHVzZSBz aW5nbGUgY29ubmVjdGlvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK0RFTEVURSBGUk9NIHQzIFdI RVJFIGkgPSAwOworU0VMRUNUICdkZWxldGVfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdDM7CitF T0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xl ZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1 c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAg ICAgICBlY2hvICJUZXN0IDYgUEFTU0VEOiBERUxFVEUgbWFya3MgdGFibGUgYXMgc3RhbGUiCisg ICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDYgRkFJTEVEOiBERUxFVEUgZGlkIG5vdCBtYXJr IHRhYmxlIGFzIHN0YWxlIgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQor ICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA3OiBUUlVOQ0FURSBNYXJrcyBUYWJsZSBhcyBT dGFsZSA9PT0iCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisg ICAgIyBDcmVhdGUgYSBmcmVzaCB0YWJsZSBmb3IgVFJVTkNBVEUgdGVzdAorICAgICRQU1FMIHRl c3QgLWMgIkNSRUFURSBUQUJMRSB0X3RydW5jYXRlKGkgSU5URUdFUik7IiA+IC9kZXYvbnVsbCAy PiYxCisgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJUIElOVE8gdF90cnVuY2F0ZSBWQUxVRVMgKDEp LCAoMiksICgzKTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgV2FpdCBmb3IgYW55IFRUTCB0 byBleHBpcmUKKyAgICBzbGVlcCAzCisKKyAgICAjIENsZWFyIHRoZSBsb2cgYWdhaW4KKyAgICA+ IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFRydW5jYXRlIGFuZCB0aGVuIHJlYWQgLSB1c2Ugc2lu Z2xlIGNvbm5lY3Rpb24KKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitUUlVOQ0FURSB0X3RydW5jYXRl OworU0VMRUNUICd0cnVuY2F0ZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0X3RydW5jYXRlOwor RU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNs ZWVwIDAuNQorCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNh dXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAg ICAgICAgZWNobyAiVGVzdCA3IFBBU1NFRDogVFJVTkNBVEUgbWFya3MgdGFibGUgYXMgc3RhbGUi CisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDcgRkFJTEVEOiBUUlVOQ0FURSBkaWQgbm90 IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211 dGF0aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwK KyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDg6IFdJVEggQ2xh dXNlIChDVEUgd2l0aCBERUxFVEUpIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENs ZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIENyZWF0ZSBhIGZyZXNo IHRhYmxlIGZvciBXSVRIIHRlc3QKKyAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9j dGUoaSBJTlRFR0VSKTsiID4gL2Rldi9udWxsIDI+JjEKKyAgICAkUFNRTCB0ZXN0IC1jICJJTlNF UlQgSU5UTyB0X2N0ZSBWQUxVRVMgKDEpLCAoMiksICgzKTsiID4gL2Rldi9udWxsIDI+JjEKKwor ICAgICMgV2FpdCBmb3IgYW55IFRUTCB0byBleHBpcmUKKyAgICBzbGVlcCAzCisKKyAgICAjIENs ZWFyIHRoZSBsb2cgYWdhaW4KKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFVzZSBXSVRI IGNsYXVzZSB3aXRoIERFTEVURSwgdGhlbiByZWFkIGZyb20gdGhlIHRhYmxlCisgICAgJFBTUUwg dGVzdCA8PEVPRgorV0lUSCBkZWxldGVkIEFTIChERUxFVEUgRlJPTSB0X2N0ZSBXSEVSRSBpID0g MSBSRVRVUk5JTkcgKikKK1NFTEVDVCAqIEZST00gZGVsZXRlZDsKK1NFTEVDVCAnY3RlX3Rlc3Qn IGFzIG1hcmtlciwgKiBGUk9NIHRfY3RlOworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVu c3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNsZWVwIDAuNQorCisgICAgaWYgZ3JlcCAtYSAtcSAi Y291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRl biIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA4IFBBU1NFRDogV0lU SCBjbGF1c2UgKENURSkgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQorICAgICAgICBl Y2hvICJUZXN0IDggRkFJTEVEOiBXSVRIIGNsYXVzZSAoQ1RFKSBkaWQgbm90IG1hcmsgdGFibGUg YXMgc3RhbGUiCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9uIiBsb2cv cGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhp dCAxCisgICAgZmkKKworICAgICMgVGVzdCA5OiBNRVJHRSAoUG9zdGdyZVNRTCAxNSsgb25seSkK KyAgICBQR19NQUpPUl9WRVJTSU9OPSQoJFBTUUwgLXQgLWMgIlNFTEVDVCBzdWJzdHJpbmcodmVy c2lvbigpIGZyb20gJ1Bvc3RncmVTUUwgKFswLTldKyknKTsiIHwgdHIgLWQgJyAnKQorICAgIGlm IFsgIiRQR19NQUpPUl9WRVJTSU9OIiAtZ2UgMTUgXSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAg ICBlY2hvICI9PT0gVGVzdCA5OiBNRVJHRSBNYXJrcyBUYWJsZSBhcyBTdGFsZSAoUG9zdGdyZVNR TCAkUEdfTUFKT1JfVkVSU0lPTikgPT09IgorICAgICAgICAjIENsZWFyIHRoZSBsb2cKKyAgICAg ICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgICAgICMgQ3JlYXRlIHRhYmxlcyBmb3IgTUVSR0Ug dGVzdAorICAgICAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9tZXJnZV90YXJnZXQo aWQgSU5URUdFUiBQUklNQVJZIEtFWSwgdmFsIFRFWFQpOyIgPiAvZGV2L251bGwgMj4mMQorICAg ICAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9tZXJnZV9zb3VyY2UoaWQgSU5URUdF UiwgdmFsIFRFWFQpOyIgPiAvZGV2L251bGwgMj4mMQorICAgICAgICAkUFNRTCB0ZXN0IC1jICJJ TlNFUlQgSU5UTyB0X21lcmdlX3RhcmdldCBWQUxVRVMgKDEsICdvbGQnKTsiID4gL2Rldi9udWxs IDI+JjEKKyAgICAgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJUIElOVE8gdF9tZXJnZV9zb3VyY2Ug VkFMVUVTICgxLCAnbmV3JyksICgyLCAnaW5zZXJ0Jyk7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAg ICAgICAgIyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAgICAgICBzbGVlcCAzCisKKyAg ICAgICAgIyBDbGVhciB0aGUgbG9nIGFnYWluCisgICAgICAgID4gbG9nL3BncG9vbC5sb2cKKwor ICAgICAgICAjIFVzZSBNRVJHRSwgdGhlbiByZWFkIGZyb20gdGhlIHRhcmdldCB0YWJsZQorICAg ICAgICAkUFNRTCB0ZXN0IDw8RU9GCitNRVJHRSBJTlRPIHRfbWVyZ2VfdGFyZ2V0IHQKK1VTSU5H IHRfbWVyZ2Vfc291cmNlIHMgT04gdC5pZCA9IHMuaWQKK1dIRU4gTUFUQ0hFRCBUSEVOIFVQREFU RSBTRVQgdmFsID0gcy52YWwKK1dIRU4gTk9UIE1BVENIRUQgVEhFTiBJTlNFUlQgVkFMVUVTIChz LmlkLCBzLnZhbCk7CitTRUxFQ1QgJ21lcmdlX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHRfbWVy Z2VfdGFyZ2V0OworRU9GCisKKyAgICAgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlz IGZsdXNoZWQKKyAgICAgICAgc2xlZXAgMC41CisKKyAgICAgICAgaWYgZ3JlcCAtYSAtcSAiY291 bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIg bG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIlRlc3QgOSBQQVNTRUQ6IE1F UkdFIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hv ICJUZXN0IDkgRkFJTEVEOiBNRVJHRSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAg ICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9vbC5sb2cg fCB0YWlsIC0yMAorICAgICAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICAgICAgZXhpdCAx CisgICAgICAgIGZpCisgICAgZWxzZQorICAgICAgICBlY2hvICI9PT0gVGVzdCA5OiBNRVJHRSBz a2lwcGVkIChyZXF1aXJlcyBQb3N0Z3JlU1FMIDE1KywgaGF2ZSAkUEdfTUFKT1JfVkVSU0lPTikg PT09IgorICAgIGZpCisKKyAgICBlY2hvICIiCisgICAgZWNobyAiPT09IEFsbCBUcmFjayBUYWJs ZSBNdXRhdGlvbiBUZXN0cyBQQVNTRUQgPT09IgorCisgICAgLi9zaHV0ZG93bmFsbAorCisgICAg Y2QgLi4KK2RvbmUKKworZXhpdCAwCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rl c3RzLzA0My50cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy8uZ2l0aWdub3JlIGIvc3JjL3Rl c3QvcmVncmVzc2lvbi90ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvLmdp dGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi5mY2I5M2QyN2E3ZTdlOGE1ZWZlNmVhY2ZiMGY4OGY2ZjNjOGJj NzY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDMudHJh Y2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKK2xl YWRlcgorc3RhbmRieQorKi5waWQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVz dHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL2xlYWRlci5jb25mIGIvc3JjL3Rl c3QvcmVncmVzc2lvbi90ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvbGVh ZGVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTc2NDYwMGVlYmU0N2M3NTBiOWZkM2QzZDMzNTA1NDgwZDgx YjhmNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRy YWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL2xlYWRlci5jb25mCkBAIC0wLDAgKzEsMjUgQEAK KyMgbGVhZGVyIHdhdGNoZG9nIGNvbmZpZyBmb3IgdHJhY2tfdGFibGVfbXV0YXRpb24gd2F0Y2hk b2cgdGVzdAordXNlX3dhdGNoZG9nID0gb24KK3dkX2ludGVydmFsID0gMQord2RfcHJpb3JpdHkg PSAyCisKK2hvc3RuYW1lMCA9ICdsb2NhbGhvc3QnCit3ZF9wb3J0MCA9IDIxMDA0CitwZ3Bvb2xf cG9ydDAgPSAxMTAwMAoraG9zdG5hbWUxID0gJ2xvY2FsaG9zdCcKK3dkX3BvcnQxID0gMjExMDQK K3BncG9vbF9wb3J0MSA9IDExMTAwCisKK2hlYXJ0YmVhdF9ob3N0bmFtZTAgPSAnbG9jYWxob3N0 JworaGVhcnRiZWF0X3BvcnQwID0gMjEwMDUKK2hlYXJ0YmVhdF9ob3N0bmFtZTEgPSAnbG9jYWxo b3N0JworaGVhcnRiZWF0X3BvcnQxID0gMjExMDUKKworZW5hYmxlX2NvbnNlbnN1c193aXRoX2hh bGZfdm90ZXMgPSBvbgorCisjIEVuYWJsZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlCit0 cmFja190YWJsZV9tdXRhdGlvbl9lbmFibGVkID0gb24KK3RyYWNrX3RhYmxlX211dGF0aW9uX2Nv bGRfc3RhcnRfZHVyYXRpb24gPSAyMDAwCisKKyMgRW5hYmxlIGRlYnVnIGxvZ2dpbmcgdG8gc2Vl IGZlYXR1cmUgbWVzc2FnZXMKK2xvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNo ZG9nL3N0YW5kYnkuY29uZiBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3Rh YmxlX211dGF0aW9uX3dhdGNoZG9nL3N0YW5kYnkuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMmE1Nzg0Y2Q5 YWUzYjZhOTQ5OTk3NGE2YzEwYTgxMzQ2OWI3ODFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvcmVncmVzc2lvbi90ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvc3Rh bmRieS5jb25mCkBAIC0wLDAgKzEsMjcgQEAKKyMgc3RhbmRieSB3YXRjaGRvZyBjb25maWcgZm9y IHRyYWNrX3RhYmxlX211dGF0aW9uIHdhdGNoZG9nIHRlc3QKK3BvcnQgPSAxMTEwMAorcGNwX3Bv cnQgPSAxMTEwNQordXNlX3dhdGNoZG9nID0gb24KK3dkX2ludGVydmFsID0gMQord2RfcHJpb3Jp dHkgPSAxCisKK2hvc3RuYW1lMCA9ICdsb2NhbGhvc3QnCit3ZF9wb3J0MCA9IDIxMDA0CitwZ3Bv b2xfcG9ydDAgPSAxMTAwMAoraG9zdG5hbWUxID0gJ2xvY2FsaG9zdCcKK3dkX3BvcnQxID0gMjEx MDQKK3BncG9vbF9wb3J0MSA9IDExMTAwCisKK2hlYXJ0YmVhdF9ob3N0bmFtZTAgPSAnbG9jYWxo b3N0JworaGVhcnRiZWF0X3BvcnQwID0gMjEwMDUKK2hlYXJ0YmVhdF9ob3N0bmFtZTEgPSAnbG9j YWxob3N0JworaGVhcnRiZWF0X3BvcnQxID0gMjExMDUKKworZW5hYmxlX2NvbnNlbnN1c193aXRo X2hhbGZfdm90ZXMgPSBvbgorCisjIEVuYWJsZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJl Cit0cmFja190YWJsZV9tdXRhdGlvbl9lbmFibGVkID0gb24KK3RyYWNrX3RhYmxlX211dGF0aW9u X2NvbGRfc3RhcnRfZHVyYXRpb24gPSAyMDAwCisKKyMgRW5hYmxlIGRlYnVnIGxvZ2dpbmcgdG8g c2VlIGZlYXR1cmUgbWVzc2FnZXMKK2xvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dh dGNoZG9nL3Rlc3Quc2ggYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0My50cmFja190YWJs ZV9tdXRhdGlvbl93YXRjaGRvZy90ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1MmE2ZTZhYTM3N2ZlMGM1 NDI0NDk3NWU2MDY2NDgxMDFjOThjZjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzaW9uL3Rlc3RzLzA0My50cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy90ZXN0LnNoCkBA IC0wLDAgKzEsMTc5IEBACisjIS91c3IvYmluL2VudiBiYXNoCisjLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB0ZXN0 IHNjcmlwdCBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24gZ2xvYmFsIGNvbGQgc3RhcnQgb24gd2F0 Y2hkb2cgbGVhZGVyIGNoYW5nZS4KKyMgVGVzdHMgdGhhdCB3aGVuIHRoZSB3YXRjaGRvZyBsZWFk ZXIgY2hhbmdlcywgdGhlIG5ldyBsZWFkZXIgdHJpZ2dlcnMKKyMgYSBnbG9iYWwgY29sZCBzdGFy dCB0byBmb3JjZSBhbGwgcXVlcmllcyB0byBwcmltYXJ5LgorIworc291cmNlICRURVNUTElCUwor TEVBREVSX0RJUj1sZWFkZXIKK1NUQU5EQllfRElSPXN0YW5kYnkKK1BTUUw9JFBHQklOL3BzcWwK K3N1Y2Nlc3NfY291bnQ9MAorCitybSAtZnIgJExFQURFUl9ESVIKK3JtIC1mciAkU1RBTkRCWV9E SVIKKworbWtkaXIgJExFQURFUl9ESVIKK21rZGlyICRTVEFOREJZX0RJUgorCisjIGRpciBpbiBs ZWFkZXIgZGlyZWN0b3J5CitjZCAkTEVBREVSX0RJUgorCisjIGNyZWF0ZSBsZWFkZXIgZW52aXJv bm1lbnQgd2l0aCBzdHJlYW1pbmcgcmVwbGljYXRpb24KK2VjaG8gLW4gImNyZWF0aW5nIGxlYWRl ciBwZ3Bvb2wuLi4iCiskUEdQT09MX1NFVFVQIC1tIHMgLW4gMiAtcCAxMTAwMCB8fCBleGl0IDEK K2VjaG8gImxlYWRlciBzZXR1cCBkb25lLiIKKworIyBjb3B5IHRoZSBjb25maWd1cmF0aW9ucyB0 byBzdGFuZGJ5CitjcCAtciBldGMgLi4vJFNUQU5EQllfRElSLworCitzb3VyY2UgLi9iYXNocmMu cG9ydHMKK2NhdCAuLi9sZWFkZXIuY29uZiA+PiBldGMvcGdwb29sLmNvbmYKK2VjaG8gMCA+IGV0 Yy9wZ3Bvb2xfbm9kZV9pZAorCisuL3N0YXJ0YWxsCit3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAor CisjIGJhY2sgdG8gdGVzdCByb290IGRpcgorY2QgLi4KKworIyBjcmVhdGUgc3RhbmRieSBlbnZp cm9ubWVudAorbWtkaXIgJFNUQU5EQllfRElSL2xvZworZWNobyAtbiAiY3JlYXRpbmcgc3RhbmRi eSBwZ3Bvb2wuLi4iCitjYXQgc3RhbmRieS5jb25mID4+ICRTVEFOREJZX0RJUi9ldGMvcGdwb29s LmNvbmYKKyMgc2luY2Ugd2UgYXJlIHVzaW5nIHRoZSBzYW1lIHBncG9vbC1JSSBjb25mIGFzIG9m IGxlYWRlciwgY2hhbmdlIHRoZSBwaWQgZmlsZSBwYXRoCitlY2hvICJwaWRfZmlsZV9uYW1lID0g JyRQV0QvcGdwb29sMi5waWQnIiA+PiAkU1RBTkRCWV9ESVIvZXRjL3BncG9vbC5jb25mCitlY2hv IDEgPiAkU1RBTkRCWV9ESVIvZXRjL3BncG9vbF9ub2RlX2lkCisjIHN0YXJ0IHRoZSBzdGFuZGJ5 IHBncG9vbC1JSSBieSBoYW5kCiskUEdQT09MX0lOU1RBTExfRElSL2Jpbi9wZ3Bvb2wgLUQgLW4g LWYgJFNUQU5EQllfRElSL2V0Yy9wZ3Bvb2wuY29uZiAtRiAkU1RBTkRCWV9ESVIvZXRjL3BjcC5j b25mIC1hICRTVEFOREJZX0RJUi9ldGMvcG9vbF9oYmEuY29uZiA+ICRTVEFOREJZX0RJUi9sb2cv cGdwb29sLmxvZyAyPiYxICYKKworIyBUZXN0IDE6IENoZWNrIGlmIGxlYWRlciBwZ3Bvb2wtSUkg c3RhcnRlZCBjb3JyZWN0bHkKK2VjaG8gIj09PSBUZXN0IDE6IFdhaXRpbmcgZm9yIHRoZSBwZ3Bv b2wgbGVhZGVyLi4uID09PSIKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWdy ZXAgIkkgYW0gdGhlIGNsdXN0ZXIgbGVhZGVyIG5vZGUuIFN0YXJ0aW5nIGVzY2FsYXRpb24gcHJv Y2VzcyIgJExFQURFUl9ESVIvbG9nL3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlmIFsg JD8gPSAwIF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkK KwkJZWNobyAiVGVzdCAxIFBBU1NFRDogTGVhZGVyIGJyb3VnaHQgdXAgc3VjY2Vzc2Z1bGx5LiIK KwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10gJGkgdGltZXMiCisJc2xlZXAgMgorZG9uZQor CitpZiBbICRzdWNjZXNzX2NvdW50IC1sdCAxIF07IHRoZW4KKwllY2hvICJUZXN0IDEgRkFJTEVE OiBMZWFkZXIgZGlkIG5vdCBzdGFydCIKKwkkUEdQT09MX0lOU1RBTExfRElSL2Jpbi9wZ3Bvb2wg LWYgJFNUQU5EQllfRElSL2V0Yy9wZ3Bvb2wuY29uZiAtbSBmIHN0b3AgMj4vZGV2L251bGwKKwlj ZCAkTEVBREVSX0RJUiAmJiAuL3NodXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgMjog Q2hlY2sgaWYgc3RhbmRieSBoYXMgc3VjY2Vzc2Z1bGx5IGpvaW5lZAorZWNobyAiPT09IFRlc3Qg MjogV2FpdGluZyBmb3IgdGhlIHN0YW5kYnkgdG8gam9pbiBjbHVzdGVyLi4uID09PSIKK2ZvciBp IGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWdyZXAgInN1Y2Nlc3NmdWxseSBqb2luZWQg dGhlIHdhdGNoZG9nIGNsdXN0ZXIgYXMgc3RhbmRieSBub2RlIiAkU1RBTkRCWV9ESVIvbG9nL3Bn cG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlmIFsgJD8gPSAwIF07IHRoZW4KKwkJc3VjY2Vz c19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwkJZWNobyAiVGVzdCAyIFBBU1NFRDog U3RhbmRieSBzdWNjZXNzZnVsbHkgY29ubmVjdGVkLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltj aGVja10gJGkgdGltZXMiCisJc2xlZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1s dCAyIF07IHRoZW4KKwllY2hvICJUZXN0IDIgRkFJTEVEOiBTdGFuZGJ5IGRpZCBub3Qgam9pbiBj bHVzdGVyIgorCSRQR1BPT0xfSU5TVEFMTF9ESVIvYmluL3BncG9vbCAtZiAkU1RBTkRCWV9ESVIv ZXRjL3BncG9vbC5jb25mIC1tIGYgc3RvcCAyPi9kZXYvbnVsbAorCWNkICRMRUFERVJfRElSICYm IC4vc2h1dGRvd25hbGwKKwlleGl0IDEKK2ZpCisKKyMgVGVzdCAzOiBWZXJpZnkgdHJhY2tfdGFi bGVfbXV0YXRpb24gaXMgZW5hYmxlZCBhbmQgd29ya2luZyBvbiBsZWFkZXIKK2VjaG8gIj09PSBU ZXN0IDM6IFZlcmlmeSB0cmFja190YWJsZV9tdXRhdGlvbiBpcyBlbmFibGVkID09PSIKK2lmIGdy ZXAgLWEgInRyYWNrX3RhYmxlX211dGF0aW9uOiBpbml0aWFsaXplZCIgJExFQURFUl9ESVIvbG9n L3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorCXN1Y2Nlc3NfY291bnQ9JCgoIHN1 Y2Nlc3NfY291bnQgKyAxICkpCisJZWNobyAiVGVzdCAzIFBBU1NFRDogdHJhY2tfdGFibGVfbXV0 YXRpb24gaW5pdGlhbGl6ZWQgb24gbGVhZGVyIgorZWxzZQorCWVjaG8gIlRlc3QgMyBGQUlMRUQ6 IHRyYWNrX3RhYmxlX211dGF0aW9uIG5vdCBpbml0aWFsaXplZCBvbiBsZWFkZXIiCisJJFBHUE9P TF9JTlNUQUxMX0RJUi9iaW4vcGdwb29sIC1mICRTVEFOREJZX0RJUi9ldGMvcGdwb29sLmNvbmYg LW0gZiBzdG9wIDI+L2Rldi9udWxsCisJY2QgJExFQURFUl9ESVIgJiYgLi9zaHV0ZG93bmFsbAor CWV4aXQgMQorZmkKKworIyBUZXN0IDQ6IFN0b3AgbGVhZGVyIHBncG9vbCBhbmQgdHJpZ2dlciBm YWlsb3ZlcgorZWNobyAiPT09IFRlc3QgNDogVHJpZ2dlcmluZyBsZWFkZXIgZmFpbG92ZXIuLi4g PT09IgorJFBHUE9PTF9JTlNUQUxMX0RJUi9iaW4vcGdwb29sIC1mICRMRUFERVJfRElSL2V0Yy9w Z3Bvb2wuY29uZiAtbSBmIHN0b3AKKworZWNobyAiQ2hlY2tpbmcgaWYgdGhlIFN0YW5kYnkgcGdw b29sLUlJIGRldGVjdGVkIHRoZSBsZWFkZXIgc2h1dGRvd24uLi4iCitmb3IgaSBpbiAxIDIgMyA0 IDUgNiA3IDggOSAxMAorZG8KKwlncmVwIC1hICIgaXMgc2h1dHRpbmcgZG93biIgJFNUQU5EQllf RElSL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVu CisJCXN1Y2Nlc3NfY291bnQ9JCgoIHN1Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8gIlRlc3Qg NCBQQVNTRUQ6IExlYWRlciBzaHV0ZG93biBkZXRlY3RlZC4iCisJCWJyZWFrCisJZmkKKwllY2hv ICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVwIDIKK2RvbmUKKworaWYgWyAkc3VjY2Vzc19jb3Vu dCAtbHQgNCBdOyB0aGVuCisJZWNobyAiVGVzdCA0IEZBSUxFRDogTGVhZGVyIHNodXRkb3duIG5v dCBkZXRlY3RlZCIKKwkkUEdQT09MX0lOU1RBTExfRElSL2Jpbi9wZ3Bvb2wgLWYgJFNUQU5EQllf RElSL2V0Yy9wZ3Bvb2wuY29uZiAtbSBmIHN0b3AgMj4vZGV2L251bGwKKwljZCAkTEVBREVSX0RJ UiAmJiAuL3NodXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgNTogVmVyaWZ5IHN0YW5k YnkgYmVjb21lcyBuZXcgbGVhZGVyCitlY2hvICI9PT0gVGVzdCA1OiBDaGVja2luZyBpZiBzdGFu ZGJ5IHRha2VzIG92ZXIgYXMgbGVhZGVyLi4uID09PSIKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcg OCA5IDEwCitkbworCWdyZXAgLWEgIkkgYW0gdGhlIGNsdXN0ZXIgbGVhZGVyIG5vZGUuIFN0YXJ0 aW5nIGVzY2FsYXRpb24gcHJvY2VzcyIgJFNUQU5EQllfRElSL2xvZy9wZ3Bvb2wubG9nID4gL2Rl di9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJCXN1Y2Nlc3NfY291bnQ9JCgoIHN1 Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8gIlRlc3QgNSBQQVNTRUQ6IFN0YW5kYnkgYmVjYW1l IHRoZSBuZXcgbGVhZGVyLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10gJGkgdGltZXMi CisJc2xlZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1sdCA1IF07IHRoZW4KKwll Y2hvICJUZXN0IDUgRkFJTEVEOiBTdGFuZGJ5IGRpZCBub3QgYmVjb21lIGxlYWRlciIKKwkkUEdQ T09MX0lOU1RBTExfRElSL2Jpbi9wZ3Bvb2wgLWYgJFNUQU5EQllfRElSL2V0Yy9wZ3Bvb2wuY29u ZiAtbSBmIHN0b3AgMj4vZGV2L251bGwKKwljZCAkTEVBREVSX0RJUiAmJiAuL3NodXRkb3duYWxs CisJZXhpdCAxCitmaQorCisjIFRlc3QgNjogVmVyaWZ5IGdsb2JhbCBjb2xkIHN0YXJ0IHdhcyB0 cmlnZ2VyZWQgb24gbmV3IGxlYWRlcgorZWNobyAiPT09IFRlc3QgNjogQ2hlY2tpbmcgaWYgZ2xv YmFsIGNvbGQgc3RhcnQgd2FzIHRyaWdnZXJlZC4uLiA9PT0iCisjIFRoZSBuZXcgbGVhZGVyIHNo b3VsZCB0cmlnZ2VyIGdsb2JhbCBjb2xkIHN0YXJ0IHdoZW4gaXQgYmVjb21lcyBjb29yZGluYXRv cgorIyBMb29rIGZvciB0aGUgbG9nIG1lc3NhZ2UgdGhhdCBpbmRpY2F0ZXMgZ2xvYmFsIGNvbGQg c3RhcnQgd2FzIHRyaWdnZXJlZAorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJ Z3JlcCAtYSAidHJhY2tfdGFibGVfbXV0YXRpb246IGVudGVyaW5nIGdsb2JhbCBjb2xkIHN0YXJ0 IiAkU1RBTkRCWV9ESVIvbG9nL3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlmIFsgJD8g PSAwIF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwkJ ZWNobyAiVGVzdCA2IFBBU1NFRDogR2xvYmFsIGNvbGQgc3RhcnQgdHJpZ2dlcmVkIG9uIG5ldyBs ZWFkZXIuIgorCQlicmVhaworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAy Citkb25lCisKKyMgQ2xlYW51cAorJFBHUE9PTF9JTlNUQUxMX0RJUi9iaW4vcGdwb29sIC1mICRT VEFOREJZX0RJUi9ldGMvcGdwb29sLmNvbmYgLW0gZiBzdG9wIDI+L2Rldi9udWxsCitjZCAkTEVB REVSX0RJUgorLi9zaHV0ZG93bmFsbAorCitlY2hvICIiCitlY2hvICIkc3VjY2Vzc19jb3VudCBv dXQgb2YgNiBzdWNjZXNzZnVsIgorCitpZiB0ZXN0ICRzdWNjZXNzX2NvdW50IC1lcSA2Cit0aGVu CisJZWNobyAiPT09IEFsbCBUcmFjayBUYWJsZSBNdXRhdGlvbiBXYXRjaGRvZyBUZXN0cyBQQVNT RUQgPT09IgorCWV4aXQgMAorZmkKKworZXhpdCAxCmRpZmYgLS1naXQgYS9zcmMvdXRpbHMvcG9v bF90cmFja190YWJsZV9tdXRhdGlvbi5jIGIvc3JjL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0 YXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi5kOWFjNWQzMTY2OWQ2ZDM1MGM3ZjU2NWU3MGExZjM1YmM2OTE3 NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRp b24uYwpAQCAtMCwwICsxLDExODggQEAKKy8qIC0qLXBnc3FsLWMtKi0gKi8KKy8qCisgKiBwZ3Bv b2w6IGEgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgY29ubmVjdGlvbiBwb29sIHNlcnZlciBmb3IgUG9z dGdyZVNRTAorICogd3JpdHRlbiBieSBUYXRzdW8gSXNoaWkKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMDMtMjAyNglQZ1Bvb2wgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogUGVybWlz c2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBh bmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUg aXMgaGVyZWJ5CisgKiBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFwcGVhciBpbiBhbGwKKyAqIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uCisgKiBub3RpY2UgYXBwZWFyIGluIHN1cHBv cnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgdGhlCisgKiBhdXRob3Ig bm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KKyAq IGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBw cmlvcgorICogcGVybWlzc2lvbi4gVGhlIGF1dGhvciBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMg YWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9z ZS4gIEl0IGlzIHByb3ZpZGVkICJhcworICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVk IHdhcnJhbnR5LgorICoKKyAqIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYzogSW4tbWVtb3J5 IHRyYWNraW5nIG9mIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzCisgKiAgICAgICAgICAgICAgICAg ICAgdG8gYXZvaWQgc3RhbGUgcmVhZHMgZnJvbSByZXBsaWNhcyBkdXJpbmcgcmVwbGljYXRpb24g bGFnCisgKgorICogQmFzZWQgb24gdGhlICJsYWdsZXNzIiBhcmNoaXRlY3R1cmUgZnJvbSBUYWls b3IgQnJhbmRzOgorICogaHR0cHM6Ly9tZWRpdW0uY29tL3RhaWxvci10ZWNoL3VzaW5nLWRhdGFi YXNlLXJlYWQtcmVwbGljYXMtaW4tZGlzdHJpYnV0ZWQtc3lzdGVtcy1kODBlYWY2YmJmOGEKKyAq LworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8 c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgInBvb2wuaCIKKyNp bmNsdWRlICJwb29sX2NvbmZpZy5oIgorI2luY2x1ZGUgImNvbnRleHQvcG9vbF9zZXNzaW9uX2Nv bnRleHQuaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCisj aW5jbHVkZSAidXRpbHMvZWxvZy5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfaXBjLmgiCisjaW5j bHVkZSAidXRpbHMvcGFsbG9jLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF9yZWxjYWNoZS5oIgor CisjZGVmaW5lIERBVEFCQVNFX1RPX09JRF9RVUVSWSAiU0VMRUNUIG9pZCBGUk9NIHBnX2NhdGFs b2cucGdfZGF0YWJhc2UgV0hFUkUgZGF0bmFtZSA9ICclcyciCisKKy8qIC0tLS0tLS0tLS0tLS0t LS0KKyAqIExvY2FsIHZhcmlhYmxlcworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIFBv aW50ZXIgdG8gc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBUcmFja1RhYmxlTXV0 YXRpb25TaG1lbSAqdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gPSBOVUxMOworCisvKiBQZXIt cHJvY2VzcyBjb2xkIHN0YXJ0IHRyYWNraW5nIChub3QgaW4gc2hhcmVkIG1lbW9yeSkgKi8KK3N0 YXRpYyBzdHJ1Y3QgdGltZXZhbCBwcm9jZXNzX3N0YXJ0X3RpbWU7CitzdGF0aWMgYm9vbCBjb2xk X3N0YXJ0X2luaXRpYWxpemVkID0gZmFsc2U7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIEhl bHBlciBtYWNyb3MgZm9yIGFjY2Vzc2luZyBmbGV4aWJsZSBhcnJheXMgaW4gc2hhcmVkIG1lbW9y eQorICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIEdldCBwb2ludGVyIHRvIGJ1Y2tldCBh cnJheSBpbiB0YWJsZSBtYXAgKi8KKyNkZWZpbmUgVEFCTEVfTUFQX0JVQ0tFVFMobWFwKSBcCisJ KChpbnQgKikoKGNoYXIgKikobWFwKSArIHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFi bGUpKSkKKworLyogR2V0IHBvaW50ZXIgdG8gZW50cnkgYXJyYXkgaW4gdGFibGUgbWFwICovCisj ZGVmaW5lIFRBQkxFX01BUF9FTlRSSUVTKG1hcCkgXAorCSgoVHJhY2tUYWJsZU11dGF0aW9uRW50 cnkgKikoKGNoYXIgKikobWFwKSArIHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUp ICsgXAorCQkJCQkJCShtYXApLT5udW1fYnVja2V0cyAqIHNpemVvZihpbnQpKSkKKworLyogR2V0 IHBvaW50ZXIgdG8gYnVja2V0IGFycmF5IGluIHF1ZXJ5IGNhY2hlICovCisjZGVmaW5lIFFVRVJZ X0NBQ0hFX0JVQ0tFVFMoY2FjaGUpIFwKKwkoKGludCAqKSgoY2hhciAqKShjYWNoZSkgKyBzaXpl b2YoUXVlcnlQYXJzZUNhY2hlKSkpCisKKy8qIEdldCBwb2ludGVyIHRvIGVudHJ5IGFycmF5IGlu IHF1ZXJ5IGNhY2hlICovCisjZGVmaW5lIFFVRVJZX0NBQ0hFX0VOVFJJRVMoY2FjaGUpIFwKKwko KFF1ZXJ5UGFyc2VFbnRyeSAqKSgoY2hhciAqKShjYWNoZSkgKyBzaXplb2YoUXVlcnlQYXJzZUNh Y2hlKSArIFwKKwkJCQkJCSAoY2FjaGUpLT5udW1fYnVja2V0cyAqIHNpemVvZihpbnQpKSkKKwor LyogLS0tLS0tLS0tLS0tLS0tLQorICogU2VtYXBob3JlIGxvY2sgaGVscGVycworICogLS0tLS0t LS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbWFwX2xvY2sodm9p ZCkKK3sKKwlwb29sX3NlbWFwaG9yZV9sb2NrKFRSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX1NF TSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbWFwX3VubG9jayh2b2lkKQorewor CXBvb2xfc2VtYXBob3JlX3VubG9jayhUUkFDS19UQUJMRV9NVVRBVElPTl9UQUJMRV9TRU0pOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3F1ZXJ5X2NhY2hlX2xvY2sodm9pZCkKK3sKKwlwb29s X3NlbWFwaG9yZV9sb2NrKFRSQUNLX1RBQkxFX01VVEFUSU9OX1FVRVJZX1NFTSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZAorcXVlcnlfY2FjaGVfdW5sb2NrKHZvaWQpCit7CisJcG9vbF9zZW1h cGhvcmVfdW5sb2NrKFRSQUNLX1RBQkxFX01VVEFUSU9OX1FVRVJZX1NFTSk7Cit9CisKKy8qIC0t LS0tLS0tLS0tLS0tLS0KKyAqIEhhc2ggZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworLyoKKyAqIEZOVi0xYSBoYXNoIGZvciB0YWJsZS9kYXRhYmFzZSBvaWQgcGFpcgorICov CitzdGF0aWMgdWludDMyCitmbnYxYV9oYXNoX3RhYmxlX2tleShpbnQgdGFibGVfb2lkLCBpbnQg ZGJvaWQpCit7CisJdWludDMyIGhhc2ggPSAyMTY2MTM2MjYxdTsgIC8qIEZOViBvZmZzZXQgYmFz aXMgKi8KKwl1aW50MzIgZGF0YVsyXTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpieXRlczsKKwlz aXplX3QgaTsKKworCWRhdGFbMF0gPSAodWludDMyKSB0YWJsZV9vaWQ7CisJZGF0YVsxXSA9ICh1 aW50MzIpIGRib2lkOworCWJ5dGVzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgZGF0YTsKKwor CWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGF0YSk7IGkrKykKKwl7CisJCWhhc2ggXj0gYnl0ZXNb aV07CisJCWhhc2ggKj0gMTY3Nzc2MTl1OyAgLyogRk5WIHByaW1lICovCisJfQorCisJcmV0dXJu IGhhc2g7Cit9CisKKy8qCisgKiBGTlYtMWEgaGFzaCBmb3IgNjQtYml0IHZhbHVlCisgKi8KK3N0 YXRpYyB1aW50NjQKK2ZudjFhX2hhc2hfNjQoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKQor eworCXVpbnQ2NCBoYXNoID0gMTQ2OTU5ODEwMzkzNDY2NTYwMzdVTEw7ICAvKiBGTlYgb2Zmc2V0 IGJhc2lzIGZvciA2NC1iaXQgKi8KKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47 IGkrKykKKwl7CisJCWhhc2ggXj0gKHVpbnQ4KXN0cltpXTsKKwkJaGFzaCAqPSAxMDk5NTExNjI4 MjExVUxMOyAgLyogRk5WIHByaW1lIGZvciA2NC1iaXQgKi8KKwl9CisKKwlyZXR1cm4gaGFzaDsK K30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogVGltZSB1dGlsaXRpZXMKKyAqIC0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisvKgorICogR2V0IGVsYXBzZWQgdGltZSBpbiBtaWNyb3NlY29uZHMg YmV0d2VlbiB0d28gdGltZXZhbHMKKyAqLworc3RhdGljIGludDY0CitlbGFwc2VkX3VzKHN0cnVj dCB0aW1ldmFsICpzdGFydCwgc3RydWN0IHRpbWV2YWwgKmVuZCkKK3sKKwlyZXR1cm4gKChpbnQ2 NCkoZW5kLT50dl9zZWMgLSBzdGFydC0+dHZfc2VjKSAqIDEwMDAwMDApICsKKwkJICAgKGVuZC0+ dHZfdXNlYyAtIHN0YXJ0LT50dl91c2VjKTsKK30KKworLyoKKyAqIEdldCBjdXJyZW50IHRpbWUK KyAqLworc3RhdGljIHZvaWQKK2dldF9jdXJyZW50X3RpbWUoc3RydWN0IHRpbWV2YWwgKnR2KQor eworCWdldHRpbWVvZmRheSh0diwgTlVMTCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAq IERhdGFiYXNlIG9pZCBsb29rdXAKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMg aW50Cit0cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkX2ludGVybmFsKHZvaWQp Cit7CisJaW50CQkJb2lkID0gMDsKKwlzdGF0aWMgUE9PTF9SRUxDQUNIRSAqcmVsY2FjaGU7CisJ UE9PTF9DT05ORUNUSU9OX1BPT0wgKmJhY2tlbmQ7CisJUE9PTF9TRVNTSU9OX0NPTlRFWFQgKnNl c3Npb25fY29udGV4dDsKKworCS8qIFNhZmV0eSBjaGVjazogbXVzdCBoYXZlIHNobWVtIGluaXRp YWxpemVkICovCisJaWYgKHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwpCisJCXJl dHVybiBvaWQ7CisKKwlzZXNzaW9uX2NvbnRleHQgPSBwb29sX2dldF9zZXNzaW9uX2NvbnRleHQo ZmFsc2UpOworCWlmIChzZXNzaW9uX2NvbnRleHQgPT0gTlVMTCkKKwkJcmV0dXJuIG9pZDsKKwor CS8qIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcXVlcnkgY29udGV4dCAqLworCWlmIChzZXNzaW9u X2NvbnRleHQtPnF1ZXJ5X2NvbnRleHQgPT0gTlVMTCkKKwkJcmV0dXJuIG9pZDsKKworCWJhY2tl bmQgPSBzZXNzaW9uX2NvbnRleHQtPmJhY2tlbmQ7CisJaWYgKGJhY2tlbmQgPT0gTlVMTCB8fCBN QUlOX0NPTk5FQ1RJT04oYmFja2VuZCkgPT0gTlVMTCB8fCBNQUlOX0NPTk5FQ1RJT04oYmFja2Vu ZCktPnNwID09IE5VTEwpCisJCXJldHVybiBvaWQ7CisKKwkvKiBFbnN1cmUgZGF0YWJhc2UgbmFt ZSBpcyB2YWxpZCAqLworCWlmIChNQUlOX0NPTk5FQ1RJT04oYmFja2VuZCktPnNwLT5kYXRhYmFz ZSA9PSBOVUxMKQorCQlyZXR1cm4gb2lkOworCisJaWYgKCFyZWxjYWNoZSkKKwl7CisJCXJlbGNh Y2hlID0gcG9vbF9jcmVhdGVfcmVsY2FjaGUocG9vbF9jb25maWctPnJlbGNhY2hlX3NpemUsCisJ CQkJCQkJCQkJREFUQUJBU0VfVE9fT0lEX1FVRVJZLAorCQkJCQkJCQkJCWludF9yZWdpc3Rlcl9m dW5jLAorCQkJCQkJCQkJCWludF91bnJlZ2lzdGVyX2Z1bmMsCisJCQkJCQkJCQkJZmFsc2UpOwor CQlpZiAocmVsY2FjaGUgPT0gTlVMTCkKKwkJeworCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJt c2coInRyYWNrX3RhYmxlX211dGF0aW9uOiBlcnJvciBjcmVhdGluZyByZWxjYWNoZSB3aGlsZSBn ZXR0aW5nIGRhdGFiYXNlIE9JRCIpKSk7CisJCQlyZXR1cm4gb2lkOworCQl9CisJfQorCisJb2lk ID0gKGludCkgKGludHB0cl90KSBwb29sX3NlYXJjaF9yZWxjYWNoZShyZWxjYWNoZSwgYmFja2Vu ZCwKKwkJCQkJCQkJCQkJCU1BSU5fQ09OTkVDVElPTihiYWNrZW5kKS0+c3AtPmRhdGFiYXNlKTsK KwlyZXR1cm4gb2lkOworfQorCitpbnQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2Rh dGFiYXNlX29pZCh2b2lkKQoreworCXJldHVybiB0cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0 YWJhc2Vfb2lkX2ludGVybmFsKCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIFRhYmxl IG11dGF0aW9uIGhhc2ggdGFibGUgb3BlcmF0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLQorICov CisKKy8qCisgKiBJbml0aWFsaXplIHRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUKKyAqLworc3Rh dGljIHZvaWQKK3RhYmxlX21hcF9pbml0KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFw LCBpbnQgbnVtX2J1Y2tldHMsIGludCBtYXhfZW50cmllcykKK3sKKwlpbnQgKmJ1Y2tldHM7CisJ VHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7CisJaW50IGk7CisKKwltYXAtPm51bV9i dWNrZXRzID0gbnVtX2J1Y2tldHM7CisJbWFwLT5tYXhfZW50cmllcyA9IG1heF9lbnRyaWVzOwor CW1hcC0+bnVtX2VudHJpZXMgPSAwOworCW1hcC0+ZnJlZV9saXN0X2hlYWQgPSAwOworCisJYnVj a2V0cyA9IFRBQkxFX01BUF9CVUNLRVRTKG1hcCk7CisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRS SUVTKG1hcCk7CisKKwkvKiBJbml0aWFsaXplIGFsbCBidWNrZXRzIHRvIGVtcHR5ICovCisJZm9y IChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspCisJCWJ1Y2tldHNbaV0gPSBUUkFDS19UQUJM RV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJLyogSW5pdGlhbGl6ZSBmcmVlIGxpc3QgLSBj aGFpbiBhbGwgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfZW50cmllczsgaSsrKQor CXsKKwkJZW50cmllc1tpXS5pbl91c2UgPSBmYWxzZTsKKwkJZW50cmllc1tpXS5uZXh0ID0gKGkg PCBtYXhfZW50cmllcyAtIDEpID8gaSArIDEgOiBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElE X0lOREVYOworCX0KKworCWVyZXBvcnQoREVCVUcxLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVf bXV0YXRpb246IGluaXRpYWxpemVkIHRhYmxlIG1hcCB3aXRoICVkIGJ1Y2tldHMsICVkIG1heCBl bnRyaWVzIiwKKwkJCQkJbnVtX2J1Y2tldHMsIG1heF9lbnRyaWVzKSkpOworfQorCisvKgorICog QWxsb2NhdGUgYW4gZW50cnkgZnJvbSB0aGUgZnJlZSBsaXN0CisgKi8KK3N0YXRpYyBpbnQKK3Rh YmxlX21hcF9hbGxvY19lbnRyeShUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcCkKK3sK KwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1h cCk7CisJaW50IGlkeDsKKworCWlmIChtYXAtPmZyZWVfbGlzdF9oZWFkID09IFRSQUNLX1RBQkxF X01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJCXJldHVybiBUUkFDS19UQUJMRV9NVVRBVElPTl9J TlZBTElEX0lOREVYOworCisJaWR4ID0gbWFwLT5mcmVlX2xpc3RfaGVhZDsKKwltYXAtPmZyZWVf bGlzdF9oZWFkID0gZW50cmllc1tpZHhdLm5leHQ7CisJZW50cmllc1tpZHhdLmluX3VzZSA9IHRy dWU7CisJZW50cmllc1tpZHhdLm5leHQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lO REVYOworCW1hcC0+bnVtX2VudHJpZXMrKzsKKworCXJldHVybiBpZHg7Cit9CisKKy8qCisgKiBG cmVlIGFuIGVudHJ5IGJhY2sgdG8gdGhlIGZyZWUgbGlzdAorICovCitzdGF0aWMgdm9pZAordGFi bGVfbWFwX2ZyZWVfZW50cnkoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICptYXAsIGludCBp ZHgpCit7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXMgPSBUQUJMRV9NQVBfRU5U UklFUyhtYXApOworCisJZW50cmllc1tpZHhdLmluX3VzZSA9IGZhbHNlOworCWVudHJpZXNbaWR4 XS5uZXh0ID0gbWFwLT5mcmVlX2xpc3RfaGVhZDsKKwltYXAtPmZyZWVfbGlzdF9oZWFkID0gaWR4 OworCW1hcC0+bnVtX2VudHJpZXMtLTsKK30KKworLyoKKyAqIExvb2sgdXAgYSB0YWJsZSBpbiB0 aGUgaGFzaCB0YWJsZQorICogUmV0dXJucyBlbnRyeSBpbmRleCBvciBUUkFDS19UQUJMRV9NVVRB VElPTl9JTlZBTElEX0lOREVYIGlmIG5vdCBmb3VuZAorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBs b2NrIGhlbGQKKyAqLworc3RhdGljIGludAordGFibGVfbWFwX2xvb2t1cChUcmFja1RhYmxlTXV0 YXRpb25IYXNoVGFibGUgKm1hcCwgaW50IHRhYmxlX29pZCwgaW50IGRib2lkLCB1aW50MzIgaGFz aCkKK3sKKwlpbnQgKmJ1Y2tldHMgPSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApOworCVRyYWNrVGFi bGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwlpbnQg YnVja2V0ID0gaGFzaCAlIG1hcC0+bnVtX2J1Y2tldHM7CisJaW50IGlkeCA9IGJ1Y2tldHNbYnVj a2V0XTsKKworCXdoaWxlIChpZHggIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRF WCkKKwl7CisJCWlmIChlbnRyaWVzW2lkeF0uaGFzaCA9PSBoYXNoICYmCisJCQllbnRyaWVzW2lk eF0udGFibGVfb2lkID09IHRhYmxlX29pZCAmJgorCQkJZW50cmllc1tpZHhdLmRib2lkID09IGRi b2lkKQorCQl7CisJCQlyZXR1cm4gaWR4OworCQl9CisJCWlkeCA9IGVudHJpZXNbaWR4XS5uZXh0 OworCX0KKworCXJldHVybiBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworfQor CisvKgorICogSW5zZXJ0IG9yIHVwZGF0ZSBhIHRhYmxlIGVudHJ5CisgKiBNdXN0IGJlIGNhbGxl ZCB3aXRoIGxvY2sgaGVsZAorICovCitzdGF0aWMgdm9pZAordGFibGVfbWFwX2luc2VydChUcmFj a1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcCwgaW50IHRhYmxlX29pZCwgaW50IGRib2lkLAor CQkJCSB1aW50MzIgaGFzaCwgc3RydWN0IHRpbWV2YWwgKndyaXRlX3RpbWUpCit7CisJaW50ICpi dWNrZXRzID0gVEFCTEVfTUFQX0JVQ0tFVFMobWFwKTsKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRy eSAqZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisJaW50IGJ1Y2tldCA9IGhhc2gg JSBtYXAtPm51bV9idWNrZXRzOworCWludCBpZHg7CisKKwkvKiBDaGVjayBpZiBlbnRyeSBhbHJl YWR5IGV4aXN0cyAqLworCWlkeCA9IHRhYmxlX21hcF9sb29rdXAobWFwLCB0YWJsZV9vaWQsIGRi b2lkLCBoYXNoKTsKKwlpZiAoaWR4ICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5E RVgpCisJeworCQkvKiBVcGRhdGUgZXhpc3RpbmcgZW50cnkgKi8KKwkJZW50cmllc1tpZHhdLmxh c3Rfd3JpdGVfdGltZSA9ICp3cml0ZV90aW1lOworCQlyZXR1cm47CisJfQorCisJLyogQWxsb2Nh dGUgbmV3IGVudHJ5ICovCisJaWR4ID0gdGFibGVfbWFwX2FsbG9jX2VudHJ5KG1hcCk7CisJaWYg KGlkeCA9PSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJaW50IGI7 CisJCS8qIFRhYmxlIGlzIGZ1bGwgLSBldmljdCBhbiBlbnRyeSAqLworCQkvKiBGb3Igc2ltcGxp Y2l0eSwganVzdCB1c2UgdGhlIGZpcnN0IGVudHJ5IGluIGZpcnN0IG5vbi1lbXB0eSBidWNrZXQg Ki8KKwkJZm9yIChiID0gMDsgYiA8IG1hcC0+bnVtX2J1Y2tldHM7IGIrKykKKwkJeworCQkJaWYg KGJ1Y2tldHNbYl0gIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJCXsK KwkJCQlpbnQgdmljdGltID0gYnVja2V0c1tiXTsKKwkJCQlidWNrZXRzW2JdID0gZW50cmllc1t2 aWN0aW1dLm5leHQ7CisJCQkJdGFibGVfbWFwX2ZyZWVfZW50cnkobWFwLCB2aWN0aW0pOworCQkJ CWlkeCA9IHRhYmxlX21hcF9hbGxvY19lbnRyeShtYXApOworCQkJCWJyZWFrOworCQkJfQorCQl9 CisKKwkJaWYgKGlkeCA9PSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCQl7 CisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9u OiBmYWlsZWQgdG8gYWxsb2NhdGUgZW50cnkgZm9yIHRhYmxlIG9pZCAlZCAoZGJvaWQgJWQpIiwK KwkJCQkJCQl0YWJsZV9vaWQsIGRib2lkKSkpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyog SW5pdGlhbGl6ZSBuZXcgZW50cnkgKi8KKwllbnRyaWVzW2lkeF0udGFibGVfb2lkID0gdGFibGVf b2lkOworCWVudHJpZXNbaWR4XS5kYm9pZCA9IGRib2lkOworCWVudHJpZXNbaWR4XS5oYXNoID0g aGFzaDsKKwllbnRyaWVzW2lkeF0ubGFzdF93cml0ZV90aW1lID0gKndyaXRlX3RpbWU7CisKKwkv KiBJbnNlcnQgYXQgaGVhZCBvZiBidWNrZXQgY2hhaW4gKi8KKwllbnRyaWVzW2lkeF0ubmV4dCA9 IGJ1Y2tldHNbYnVja2V0XTsKKwlidWNrZXRzW2J1Y2tldF0gPSBpZHg7CisKKwllcmVwb3J0KERF QlVHMiwKKwkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiBtYXJrZWQgdGFibGUgb2lk ICVkIChkYm9pZCAlZCkgYXMgd3JpdHRlbiIsCisJCQkJCXRhYmxlX29pZCwgZGJvaWQpKSk7Cit9 CisKKy8qCisgKiBSZW1vdmUgZXhwaXJlZCBlbnRyaWVzIGZyb20gdGhlIHRhYmxlIG1hcAorICog TXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQKKyAqLworc3RhdGljIHZvaWQKK3RhYmxlX21h cF9jbGVhbnVwX2V4cGlyZWQoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICptYXAsIHVpbnQ2 NCB0dGxfdXMpCit7CisJaW50ICpidWNrZXRzID0gVEFCTEVfTUFQX0JVQ0tFVFMobWFwKTsKKwlU cmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7 CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludCByZW1vdmVkID0gMDsKKwlpbnQgYjsKKworCWdl dF9jdXJyZW50X3RpbWUoJm5vdyk7CisKKwlmb3IgKGIgPSAwOyBiIDwgbWFwLT5udW1fYnVja2V0 czsgYisrKQorCXsKKwkJaW50ICpwcmV2X3B0ciA9ICZidWNrZXRzW2JdOworCQlpbnQgaWR4ID0g YnVja2V0c1tiXTsKKworCQl3aGlsZSAoaWR4ICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFM SURfSU5ERVgpCisJCXsKKwkJCWludDY0IGVsYXBzZWQgPSBlbGFwc2VkX3VzKCZlbnRyaWVzW2lk eF0ubGFzdF93cml0ZV90aW1lLCAmbm93KTsKKworCQkJaWYgKGVsYXBzZWQgPiAoaW50NjQpdHRs X3VzKQorCQkJeworCQkJCS8qIEVudHJ5IGhhcyBleHBpcmVkIC0gcmVtb3ZlIGl0ICovCisJCQkJ aW50IG5leHQgPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwkJCQkqcHJldl9wdHIgPSBuZXh0OworCQkJ CXRhYmxlX21hcF9mcmVlX2VudHJ5KG1hcCwgaWR4KTsKKwkJCQlpZHggPSBuZXh0OworCQkJCXJl bW92ZWQrKzsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwcmV2X3B0ciA9ICZlbnRyaWVzW2lk eF0ubmV4dDsKKwkJCQlpZHggPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwkJCX0KKwkJfQorCX0KKwor CWlmIChyZW1vdmVkID4gMCkKKwl7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2coInRy YWNrX3RhYmxlX211dGF0aW9uOiBjbGVhbmVkIHVwICVkIGV4cGlyZWQgdGFibGUgZW50cmllcyIs IHJlbW92ZWQpKSk7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBRdWVyeSBwYXJz ZSBjYWNoZSBvcGVyYXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIElu aXRpYWxpemUgcXVlcnkgcGFyc2UgY2FjaGUKKyAqLworc3RhdGljIHZvaWQKK3F1ZXJ5X2NhY2hl X2luaXQoUXVlcnlQYXJzZUNhY2hlICpjYWNoZSwgaW50IG51bV9idWNrZXRzLCBpbnQgbWF4X2Vu dHJpZXMpCit7CisJaW50ICpidWNrZXRzOworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50cmllczsKKwlp bnQgaTsKKworCWNhY2hlLT5udW1fYnVja2V0cyA9IG51bV9idWNrZXRzOworCWNhY2hlLT5tYXhf ZW50cmllcyA9IG1heF9lbnRyaWVzOworCWNhY2hlLT5udW1fZW50cmllcyA9IDA7CisJY2FjaGUt PmZyZWVfbGlzdF9oZWFkID0gMDsKKwljYWNoZS0+bHJ1X2hlYWQgPSBUUkFDS19UQUJMRV9NVVRB VElPTl9JTlZBTElEX0lOREVYOworCWNhY2hlLT5scnVfdGFpbCA9IFRSQUNLX1RBQkxFX01VVEFU SU9OX0lOVkFMSURfSU5ERVg7CisKKwlidWNrZXRzID0gUVVFUllfQ0FDSEVfQlVDS0VUUyhjYWNo ZSk7CisJZW50cmllcyA9IFFVRVJZX0NBQ0hFX0VOVFJJRVMoY2FjaGUpOworCisJLyogSW5pdGlh bGl6ZSBhbGwgYnVja2V0cyB0byBlbXB0eSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0 czsgaSsrKQorCQlidWNrZXRzW2ldID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRF WDsKKworCS8qIEluaXRpYWxpemUgZnJlZSBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IG1heF9l bnRyaWVzOyBpKyspCisJeworCQllbnRyaWVzW2ldLmluX3VzZSA9IGZhbHNlOworCQllbnRyaWVz W2ldLm5leHQgPSAoaSA8IG1heF9lbnRyaWVzIC0gMSkgPyBpICsgMSA6IFRSQUNLX1RBQkxFX01V VEFUSU9OX0lOVkFMSURfSU5ERVg7CisJCWVudHJpZXNbaV0ubHJ1X3ByZXYgPSBUUkFDS19UQUJM RV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCQllbnRyaWVzW2ldLmxydV9uZXh0ID0gVFJBQ0tf VEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKwl9CisKKwllcmVwb3J0KERFQlVHMSwKKwkJ CShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiBpbml0aWFsaXplZCBxdWVyeSBjYWNoZSB3 aXRoICVkIGJ1Y2tldHMsICVkIG1heCBlbnRyaWVzIiwKKwkJCQkJbnVtX2J1Y2tldHMsIG1heF9l bnRyaWVzKSkpOworfQorCisvKgorICogTW92ZSBlbnRyeSB0byBmcm9udCBvZiBMUlUgbGlzdCAo bW9zdCByZWNlbnRseSB1c2VkKQorICovCitzdGF0aWMgdm9pZAorcXVlcnlfY2FjaGVfbHJ1X3Rv dWNoKFF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGUsIGludCBpZHgpCit7CisJUXVlcnlQYXJzZUVudHJ5 ICplbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisKKwkvKiBBbHJlYWR5IGF0 IGhlYWQ/ICovCisJaWYgKGNhY2hlLT5scnVfaGVhZCA9PSBpZHgpCisJCXJldHVybjsKKworCS8q IFJlbW92ZSBmcm9tIGN1cnJlbnQgcG9zaXRpb24gKi8KKwlpZiAoZW50cmllc1tpZHhdLmxydV9w cmV2ICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJCWVudHJpZXNbZW50 cmllc1tpZHhdLmxydV9wcmV2XS5scnVfbmV4dCA9IGVudHJpZXNbaWR4XS5scnVfbmV4dDsKKwlp ZiAoZW50cmllc1tpZHhdLmxydV9uZXh0ICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURf SU5ERVgpCisJCWVudHJpZXNbZW50cmllc1tpZHhdLmxydV9uZXh0XS5scnVfcHJldiA9IGVudHJp ZXNbaWR4XS5scnVfcHJldjsKKwlpZiAoY2FjaGUtPmxydV90YWlsID09IGlkeCkKKwkJY2FjaGUt PmxydV90YWlsID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCisJLyogSW5zZXJ0IGF0IGhlYWQg Ki8KKwllbnRyaWVzW2lkeF0ubHJ1X3ByZXYgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElE X0lOREVYOworCWVudHJpZXNbaWR4XS5scnVfbmV4dCA9IGNhY2hlLT5scnVfaGVhZDsKKwlpZiAo Y2FjaGUtPmxydV9oZWFkICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJ CWVudHJpZXNbY2FjaGUtPmxydV9oZWFkXS5scnVfcHJldiA9IGlkeDsKKwljYWNoZS0+bHJ1X2hl YWQgPSBpZHg7CisJaWYgKGNhY2hlLT5scnVfdGFpbCA9PSBUUkFDS19UQUJMRV9NVVRBVElPTl9J TlZBTElEX0lOREVYKQorCQljYWNoZS0+bHJ1X3RhaWwgPSBpZHg7Cit9CisKKy8qCisgKiBBZGQg ZW50cnkgdG8gTFJVIGxpc3QgKGF0IGhlYWQpCisgKi8KK3N0YXRpYyB2b2lkCitxdWVyeV9jYWNo ZV9scnVfYWRkKFF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGUsIGludCBpZHgpCit7CisJUXVlcnlQYXJz ZUVudHJ5ICplbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisKKwllbnRyaWVz W2lkeF0ubHJ1X3ByZXYgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCWVu dHJpZXNbaWR4XS5scnVfbmV4dCA9IGNhY2hlLT5scnVfaGVhZDsKKworCWlmIChjYWNoZS0+bHJ1 X2hlYWQgIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tj YWNoZS0+bHJ1X2hlYWRdLmxydV9wcmV2ID0gaWR4OworCisJY2FjaGUtPmxydV9oZWFkID0gaWR4 OworCisJaWYgKGNhY2hlLT5scnVfdGFpbCA9PSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElE X0lOREVYKQorCQljYWNoZS0+bHJ1X3RhaWwgPSBpZHg7Cit9CisKKy8qCisgKiBSZW1vdmUgZW50 cnkgZnJvbSBMUlUgbGlzdAorICovCitzdGF0aWMgdm9pZAorcXVlcnlfY2FjaGVfbHJ1X3JlbW92 ZShRdWVyeVBhcnNlQ2FjaGUgKmNhY2hlLCBpbnQgaWR4KQoreworCVF1ZXJ5UGFyc2VFbnRyeSAq ZW50cmllcyA9IFFVRVJZX0NBQ0hFX0VOVFJJRVMoY2FjaGUpOworCisJaWYgKGVudHJpZXNbaWR4 XS5scnVfcHJldiAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCQllbnRy aWVzW2VudHJpZXNbaWR4XS5scnVfcHJldl0ubHJ1X25leHQgPSBlbnRyaWVzW2lkeF0ubHJ1X25l eHQ7CisJZWxzZQorCQljYWNoZS0+bHJ1X2hlYWQgPSBlbnRyaWVzW2lkeF0ubHJ1X25leHQ7CisK KwlpZiAoZW50cmllc1tpZHhdLmxydV9uZXh0ICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFM SURfSU5ERVgpCisJCWVudHJpZXNbZW50cmllc1tpZHhdLmxydV9uZXh0XS5scnVfcHJldiA9IGVu dHJpZXNbaWR4XS5scnVfcHJldjsKKwllbHNlCisJCWNhY2hlLT5scnVfdGFpbCA9IGVudHJpZXNb aWR4XS5scnVfcHJldjsKKworCWVudHJpZXNbaWR4XS5scnVfcHJldiA9IFRSQUNLX1RBQkxFX01V VEFUSU9OX0lOVkFMSURfSU5ERVg7CisJZW50cmllc1tpZHhdLmxydV9uZXh0ID0gVFJBQ0tfVEFC TEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKK30KKworLyoKKyAqIEFsbG9jYXRlIGVudHJ5IGZy b20gZnJlZSBsaXN0LCBldmljdGluZyBMUlUgaWYgbmVjZXNzYXJ5CisgKi8KK3N0YXRpYyBpbnQK K3F1ZXJ5X2NhY2hlX2FsbG9jX2VudHJ5KFF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGUpCit7CisJUXVl cnlQYXJzZUVudHJ5ICplbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisJaW50 ICpidWNrZXRzID0gUVVFUllfQ0FDSEVfQlVDS0VUUyhjYWNoZSk7CisJaW50IGlkeDsKKworCWlm IChjYWNoZS0+ZnJlZV9saXN0X2hlYWQgIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9J TkRFWCkKKwl7CisJCWlkeCA9IGNhY2hlLT5mcmVlX2xpc3RfaGVhZDsKKwkJY2FjaGUtPmZyZWVf bGlzdF9oZWFkID0gZW50cmllc1tpZHhdLm5leHQ7CisJCWVudHJpZXNbaWR4XS5pbl91c2UgPSB0 cnVlOworCQllbnRyaWVzW2lkeF0ubmV4dCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURf SU5ERVg7CisJCWNhY2hlLT5udW1fZW50cmllcysrOworCQlyZXR1cm4gaWR4OworCX0KKworCS8q IE5vIGZyZWUgZW50cmllcyAtIGV2aWN0IExSVSAqLworCWlmIChjYWNoZS0+bHJ1X3RhaWwgPT0g VFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJcmV0dXJuIFRSQUNLX1RBQkxF X01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisKKwlpZHggPSBjYWNoZS0+bHJ1X3RhaWw7CisKKwkv KiBSZW1vdmUgZnJvbSBoYXNoIGJ1Y2tldCAqLworCWludCBidWNrZXQgPSBlbnRyaWVzW2lkeF0u cXVlcnlfaGFzaCAlIGNhY2hlLT5udW1fYnVja2V0czsKKwlpbnQgKnByZXZfcHRyID0gJmJ1Y2tl dHNbYnVja2V0XTsKKwlpbnQgY3VyciA9IGJ1Y2tldHNbYnVja2V0XTsKKworCXdoaWxlIChjdXJy ICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJeworCQlpZiAoY3VyciA9 PSBpZHgpCisJCXsKKwkJCSpwcmV2X3B0ciA9IGVudHJpZXNbY3Vycl0ubmV4dDsKKwkJCWJyZWFr OworCQl9CisJCXByZXZfcHRyID0gJmVudHJpZXNbY3Vycl0ubmV4dDsKKwkJY3VyciA9IGVudHJp ZXNbY3Vycl0ubmV4dDsKKwl9CisKKwkvKiBSZW1vdmUgZnJvbSBMUlUgbGlzdCAqLworCXF1ZXJ5 X2NhY2hlX2xydV9yZW1vdmUoY2FjaGUsIGlkeCk7CisKKwkvKiBSZWluaXRpYWxpemUgZW50cnkg Ki8KKwllbnRyaWVzW2lkeF0uaW5fdXNlID0gdHJ1ZTsKKwllbnRyaWVzW2lkeF0ubmV4dCA9IFRS QUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisKKwlyZXR1cm4gaWR4OworfQorCisv KgorICogTG9vayB1cCBhIHF1ZXJ5IGluIHRoZSBjYWNoZQorICovCitzdGF0aWMgaW50CitxdWVy eV9jYWNoZV9sb29rdXAoUXVlcnlQYXJzZUNhY2hlICpjYWNoZSwgdWludDY0IGhhc2gpCit7CisJ aW50ICpidWNrZXRzID0gUVVFUllfQ0FDSEVfQlVDS0VUUyhjYWNoZSk7CisJUXVlcnlQYXJzZUVu dHJ5ICplbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisJaW50IGJ1Y2tldCA9 IGhhc2ggJSBjYWNoZS0+bnVtX2J1Y2tldHM7CisJaW50IGlkeCA9IGJ1Y2tldHNbYnVja2V0XTsK KworCXdoaWxlIChpZHggIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwl7 CisJCWlmIChlbnRyaWVzW2lkeF0ucXVlcnlfaGFzaCA9PSBoYXNoKQorCQkJcmV0dXJuIGlkeDsK KwkJaWR4ID0gZW50cmllc1tpZHhdLm5leHQ7CisJfQorCisJcmV0dXJuIFRSQUNLX1RBQkxFX01V VEFUSU9OX0lOVkFMSURfSU5ERVg7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIFF1ZXJ5 IG5vcm1hbGl6YXRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogU2ltcGxl IHF1ZXJ5IG5vcm1hbGl6YXRpb246CisgKiAtIFN0cmlwIGNvbW1lbnRzICgtLSBzdHlsZSBhbmQg Qy1zdHlsZSBibG9jayBjb21tZW50cykKKyAqIC0gQ29sbGFwc2Ugd2hpdGVzcGFjZQorICogLSBD b252ZXJ0IHRvIGxvd2VyY2FzZSAoZXhjZXB0IGluc2lkZSBzdHJpbmdzKQorICogLSBSZXBsYWNl IGxpdGVyYWwgdmFsdWVzIHdpdGggcGxhY2Vob2xkZXJzCisgKgorICogVGhpcyBpcyBhIHNpbXBs aWZpZWQgdmVyc2lvbiAtIHBncG9vbDIgYWxyZWFkeSBkb2VzIHRoaXMgZWxzZXdoZXJlLAorICog YnV0IHdlIG5lZWQgYSBzdGFuZGFsb25lIHZlcnNpb24gZm9yIHRoZSB0cmFjayB0YWJsZSBtdXRh dGlvbiBmZWF0dXJlLgorICovCitzdGF0aWMgc2l6ZV90Citub3JtYWxpemVfcXVlcnkoY29uc3Qg Y2hhciAqcXVlcnksIGNoYXIgKm91dHB1dCwgc2l6ZV90IG91dHB1dF9zaXplKQoreworCWNvbnN0 IGNoYXIgKnNyYyA9IHF1ZXJ5OworCWNoYXIgKmRzdCA9IG91dHB1dDsKKwljaGFyICpkc3RfZW5k ID0gb3V0cHV0ICsgb3V0cHV0X3NpemUgLSAxOworCWJvb2wgaW5fc3RyaW5nID0gZmFsc2U7CisJ Y2hhciBzdHJpbmdfY2hhciA9IDA7CisJYm9vbCBsYXN0X3dhc19zcGFjZSA9IHRydWU7ICAvKiBT dGFydCB0cnVlIHRvIHNraXAgbGVhZGluZyBzcGFjZSAqLworCisJd2hpbGUgKCpzcmMgJiYgZHN0 IDwgZHN0X2VuZCkKKwl7CisJCS8qIEhhbmRsZSBzdHJpbmcgbGl0ZXJhbHMgKi8KKwkJaWYgKGlu X3N0cmluZykKKwkJeworCQkJaWYgKCpzcmMgPT0gc3RyaW5nX2NoYXIpCisJCQl7CisJCQkJaWYg KCooc3JjICsgMSkgPT0gc3RyaW5nX2NoYXIpCisJCQkJeworCQkJCQkvKiBFc2NhcGVkIHF1b3Rl ICovCisJCQkJCXNyYyArPSAyOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaW5fc3RyaW5n ID0gZmFsc2U7CisJCQkJKmRzdCsrID0gJyQnOyAgLyogUmVwbGFjZSBzdHJpbmcgY29udGVudCB3 aXRoIHBsYWNlaG9sZGVyICovCisJCQl9CisJCQlzcmMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisK KwkJLyogQ2hlY2sgZm9yIHN0cmluZyBzdGFydCAqLworCQlpZiAoKnNyYyA9PSAnXCcnIHx8ICpz cmMgPT0gJyInKQorCQl7CisJCQlpbl9zdHJpbmcgPSB0cnVlOworCQkJc3RyaW5nX2NoYXIgPSAq c3JjOworCQkJc3JjKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEhhbmRsZSBzaW5nbGUt bGluZSBjb21tZW50cyAqLworCQlpZiAoKnNyYyA9PSAnLScgJiYgKihzcmMgKyAxKSA9PSAnLScp CisJCXsKKwkJCXdoaWxlICgqc3JjICYmICpzcmMgIT0gJ1xuJykKKwkJCQlzcmMrKzsKKwkJCWNv bnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIG11bHRpLWxpbmUgY29tbWVudHMgKi8KKwkJaWYg KCpzcmMgPT0gJy8nICYmICooc3JjICsgMSkgPT0gJyonKQorCQl7CisJCQlzcmMgKz0gMjsKKwkJ CXdoaWxlICgqc3JjICYmICEoKnNyYyA9PSAnKicgJiYgKihzcmMgKyAxKSA9PSAnLycpKQorCQkJ CXNyYysrOworCQkJaWYgKCpzcmMpCisJCQkJc3JjICs9IDI7CisJCQljb250aW51ZTsKKwkJfQor CisJCS8qIEhhbmRsZSB3aGl0ZXNwYWNlICovCisJCWlmICgqc3JjID09ICcgJyB8fCAqc3JjID09 ICdcdCcgfHwgKnNyYyA9PSAnXG4nIHx8ICpzcmMgPT0gJ1xyJykKKwkJeworCQkJaWYgKCFsYXN0 X3dhc19zcGFjZSkKKwkJCXsKKwkJCQkqZHN0KysgPSAnICc7CisJCQkJbGFzdF93YXNfc3BhY2Ug PSB0cnVlOworCQkJfQorCQkJc3JjKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEhhbmRs ZSBudW1iZXJzIC0gcmVwbGFjZSB3aXRoIHBsYWNlaG9sZGVyICovCisJCWlmICgoKnNyYyA+PSAn MCcgJiYgKnNyYyA8PSAnOScpIHx8CisJCQkoKnNyYyA9PSAnLicgJiYgKihzcmMgKyAxKSA+PSAn MCcgJiYgKihzcmMgKyAxKSA8PSAnOScpKQorCQl7CisJCQl3aGlsZSAoKnNyYyAmJiAoKCpzcmMg Pj0gJzAnICYmICpzcmMgPD0gJzknKSB8fCAqc3JjID09ICcuJykpCisJCQkJc3JjKys7CisJCQlp ZiAoIWxhc3Rfd2FzX3NwYWNlICYmIGRzdCA+IG91dHB1dCAmJiAqKGRzdCAtIDEpICE9ICckJykK KwkJCQkqZHN0KysgPSAnJCc7CisJCQlsYXN0X3dhc19zcGFjZSA9IGZhbHNlOworCQkJY29udGlu dWU7CisJCX0KKworCQkvKiBSZWd1bGFyIGNoYXJhY3RlciAtIGNvbnZlcnQgdG8gbG93ZXJjYXNl ICovCisJCWlmICgqc3JjID49ICdBJyAmJiAqc3JjIDw9ICdaJykKKwkJCSpkc3QrKyA9ICpzcmMg KyAzMjsKKwkJZWxzZQorCQkJKmRzdCsrID0gKnNyYzsKKworCQlsYXN0X3dhc19zcGFjZSA9IGZh bHNlOworCQlzcmMrKzsKKwl9CisKKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKwlpZiAo ZHN0ID4gb3V0cHV0ICYmICooZHN0IC0gMSkgPT0gJyAnKQorCQlkc3QtLTsKKworCSpkc3QgPSAn XDAnOworCXJldHVybiBkc3QgLSBvdXRwdXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAq IFB1YmxpYyBBUEkgaW1wbGVtZW50YXRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitT aXplCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtX3NpemUodm9pZCkKK3sKKwlTaXpl IHNpemUgPSAwOworCWludCB0YWJsZV9idWNrZXRzID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxl X211dGF0aW9uX3RhYmxlX2J1Y2tldHM7CisJaW50IHRhYmxlX3NpemUgPSBwb29sX2NvbmZpZy0+ dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZTsKKwlpbnQgcXVlcnlfYnVja2V0cyA9IHBv b2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzOworCWludCBxdWVy eV9jYWNoZV9zaXplID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3Bh cnNlX2NhY2hlX3NpemU7CisKKwkvKiBNYWluIHN0cnVjdHVyZSAqLworCXNpemUgKz0gc2l6ZW9m KFRyYWNrVGFibGVNdXRhdGlvblNobWVtKTsKKworCS8qIFRhYmxlIG11dGF0aW9uIGhhc2ggdGFi bGUgKi8KKwlzaXplICs9IHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUpOworCXNp emUgKz0gdGFibGVfYnVja2V0cyAqIHNpemVvZihpbnQpOyAgLyogYnVja2V0cyBhcnJheSAqLwor CXNpemUgKz0gdGFibGVfc2l6ZSAqIHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25FbnRyeSk7ICAv KiBlbnRyaWVzIGFycmF5ICovCisKKwkvKiBRdWVyeSBwYXJzZSBjYWNoZSAqLworCXNpemUgKz0g c2l6ZW9mKFF1ZXJ5UGFyc2VDYWNoZSk7CisJc2l6ZSArPSBxdWVyeV9idWNrZXRzICogc2l6ZW9m KGludCk7ICAvKiBidWNrZXRzIGFycmF5ICovCisJc2l6ZSArPSBxdWVyeV9jYWNoZV9zaXplICog c2l6ZW9mKFF1ZXJ5UGFyc2VFbnRyeSk7ICAvKiBlbnRyaWVzIGFycmF5ICovCisKKwlyZXR1cm4g c2l6ZTsKK30KKwordm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9pbml0KHZvaWQpCit7 CisjaWZuZGVmIFBPT0xfUFJJVkFURQorCVNpemUgc2htZW1fc2l6ZTsKKwljaGFyICpzaG1lbV9w dHI7CisKKwlpZiAoIXBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl9lbmFibGVkKQor CXsKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246 IGZlYXR1cmUgZGlzYWJsZWQiKSkpOworCQlyZXR1cm47CisJfQorCisJc2htZW1fc2l6ZSA9IHBv b2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6ZSgpOworCisJLyoKKwkgKiBBbGxvY2F0 ZSBmcm9tIHRoZSBtYWluIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4KKwkgKiBNZW1vcnkgaXMgYWxy ZWFkeSB6ZXJvZWQgYnkgaW5pdGlhbGl6ZV9zaGFyZWRfbWVtb3J5X21haW5fc2VnbWVudCgpLgor CSAqLworCXNobWVtX3B0ciA9IHBvb2xfc2hhcmVkX21lbW9yeV9zZWdtZW50X2dldF9jaHVuayhz aG1lbV9zaXplKTsKKwlpZiAoc2htZW1fcHRyID09IE5VTEwpCisJeworCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiBmYWlsZWQgdG8gYWxsb2NhdGUg JXp1IGJ5dGVzIG9mIHNoYXJlZCBtZW1vcnkiLAorCQkJCQkJc2htZW1fc2l6ZSkpKTsKKwkJcmV0 dXJuOworCX0KKworCS8qIFNldCB1cCBwb2ludGVycyB0byBzdHJ1Y3R1cmVzIHdpdGhpbiBzaGFy ZWQgbWVtb3J5ICovCisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gPSAoVHJhY2tUYWJsZU11 dGF0aW9uU2htZW0gKilzaG1lbV9wdHI7CisJc2htZW1fcHRyICs9IHNpemVvZihUcmFja1RhYmxl TXV0YXRpb25TaG1lbSk7CisKKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFw ID0gKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqKXNobWVtX3B0cjsKKwlzaG1lbV9wdHIg Kz0gc2l6ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSk7CisJc2htZW1fcHRyICs9IHBv b2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzICogc2l6ZW9mKGlu dCk7CisJc2htZW1fcHRyICs9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJs ZV9zaXplICogc2l6ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkVudHJ5KTsKKworCXRyYWNrX3RhYmxl X211dGF0aW9uX3NobWVtLT5xdWVyeV9jYWNoZSA9IChRdWVyeVBhcnNlQ2FjaGUgKilzaG1lbV9w dHI7CisKKwkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KKwl0YWJsZV9tYXBfaW5pdCh0cmFj a190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFwLAorCQkJCSAgIHBvb2xfY29uZmlnLT50 cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzLAorCQkJCSAgIHBvb2xfY29uZmlnLT50 cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplKTsKKworCXF1ZXJ5X2NhY2hlX2luaXQodHJh Y2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnF1ZXJ5X2NhY2hlLAorCQkJCQkgcG9vbF9jb25maWct PnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHMsCisJCQkJCSBwb29sX2NvbmZpZy0+ dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZSk7CisKKwkvKiBJbml0 aWFsaXplIGdsb2JhbCBzdGF0ZSAqLworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0 ZS5pbml0aWFsaXplZCA9IHRydWU7CisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRl LmN1cnJlbnRfdHRsX3VzID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVM7CisJ Z2V0X2N1cnJlbnRfdGltZSgmdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLnR0bF9s YXN0X3VwZGF0ZWQpOworCWdldF9jdXJyZW50X3RpbWUoJnRyYWNrX3RhYmxlX211dGF0aW9uX3No bWVtLT5zdGF0ZS5sYXN0X2NsZWFudXBfdGltZSk7CisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2ht ZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsLnR2X3NlYyA9IDA7CisJdHJhY2tfdGFi bGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsLnR2X3VzZWMg PSAwOworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5zdGF0c19xdWVyaWVzX2No ZWNrZWQgPSAwOworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5zdGF0c19mb3Jj ZWRfcHJpbWFyeSA9IDA7CisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLnN0YXRz X2FsbG93ZWRfcmVwbGljYSA9IDA7CisKKwllcmVwb3J0KExPRywKKwkJCShlcnJtc2coInRyYWNr X3RhYmxlX211dGF0aW9uOiBpbml0aWFsaXplZCB3aXRoICV6dSBieXRlcyBzaGFyZWQgbWVtb3J5 IiwKKwkJCQkJc2htZW1fc2l6ZSkpKTsKKyNlbmRpZgorfQorCit2b2lkCitwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX2NoaWxkX2luaXQodm9pZCkKK3sKKwlpZiAoIXBvb2xfY29uZmlnLT50cmFj a190YWJsZV9tdXRhdGlvbl9lbmFibGVkIHx8IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09 IE5VTEwpCisJCXJldHVybjsKKworCWdldF9jdXJyZW50X3RpbWUoJnByb2Nlc3Nfc3RhcnRfdGlt ZSk7CisJY29sZF9zdGFydF9pbml0aWFsaXplZCA9IHRydWU7CisKKwllcmVwb3J0KERFQlVHMSwK KwkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiBjaGlsZCBpbml0aWFsaXplZCwgY29s ZCBzdGFydCBwZXJpb2QgJWQgbXMiLAorCQkJCQlwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0 YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbikpKTsKK30KKworYm9vbAorcG9vbF90cmFja190YWJs ZV9tdXRhdGlvbl9pbl9jb2xkX3N0YXJ0KHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgbm93Owor CWludDY0IGVsYXBzZWRfbXM7CisKKwlpZiAoIXBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRh dGlvbl9lbmFibGVkIHx8IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwpCisJCXJl dHVybiBmYWxzZTsKKworCWlmIChwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fY29s ZF9zdGFydF9kdXJhdGlvbiA8PSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlnZXRfY3VycmVudF90 aW1lKCZub3cpOworCisJLyogQ2hlY2sgZm9yIHdhdGNoZG9nLXRyaWdnZXJlZCBnbG9iYWwgY29s ZCBzdGFydCBmaXJzdCAqLworCWlmICh0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUu Z2xvYmFsX2NvbGRfc3RhcnRfdW50aWwudHZfc2VjICE9IDAgJiYKKwkJZWxhcHNlZF91cygmbm93 LCAmdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3Vu dGlsKSA+IDApCisJeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiBDaGVjayBwZXItcHJvY2Vz cyBjb2xkIHN0YXJ0ICovCisJaWYgKCFjb2xkX3N0YXJ0X2luaXRpYWxpemVkKQorCQlyZXR1cm4g ZmFsc2U7CisKKwllbGFwc2VkX21zID0gZWxhcHNlZF91cygmcHJvY2Vzc19zdGFydF90aW1lLCAm bm93KSAvIDEwMDA7CisKKwlpZiAoZWxhcHNlZF9tcyA8IHBvb2xfY29uZmlnLT50cmFja190YWJs ZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uKQorCXsKKwkJZXJlcG9ydChERUJVRzIsCisJ CQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246IGluIGNvbGQgc3RhcnQgKCVsZC8lZCBt cykiLAorCQkJCQkJKGxvbmcpZWxhcHNlZF9tcywgcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211 dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24pKSk7CisJCXJldHVybiB0cnVlOworCX0KKworCXJl dHVybiBmYWxzZTsKK30KKwordm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl90cmlnZ2Vy X2dsb2JhbF9jb2xkX3N0YXJ0KHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludCBk dXJhdGlvbl9tczsKKworCWlmICghcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX2Vu YWJsZWQgfHwgdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuOwor CisJZHVyYXRpb25fbXMgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9z dGFydF9kdXJhdGlvbjsKKwlpZiAoZHVyYXRpb25fbXMgPD0gMCkKKwkJcmV0dXJuOworCisJZ2V0 X2N1cnJlbnRfdGltZSgmbm93KTsKKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUu Z2xvYmFsX2NvbGRfc3RhcnRfdW50aWwgPSBub3c7CisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2ht ZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsLnR2X3NlYyArPSBkdXJhdGlvbl9tcyAv IDEwMDA7CisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0 YXJ0X3VudGlsLnR2X3VzZWMgKz0gKGR1cmF0aW9uX21zICUgMTAwMCkgKiAxMDAwOworCWlmICh0 cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuZ2xvYmFsX2NvbGRfc3RhcnRfdW50aWwu dHZfdXNlYyA+PSAxMDAwMDAwKQorCXsKKwkJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0 YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsLnR2X3NlYyArPQorCQkJdHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsLnR2X3VzZWMgLyAxMDAw MDAwOworCQl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuZ2xvYmFsX2NvbGRfc3Rh cnRfdW50aWwudHZfdXNlYyAlPQorCQkJMTAwMDAwMDsKKwl9CisKKwllcmVwb3J0KExPRywKKwkJ CShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiBlbnRlcmluZyBnbG9iYWwgY29sZCBzdGFy dCBmb3IgJWQgbXMiLAorCQkJCQlkdXJhdGlvbl9tcykpKTsKK30KKworYm9vbAorcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl90YWJsZV9pc19zdGFsZShpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQp Cit7CisJVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICptYXA7CisJc3RydWN0IHRpbWV2YWwg bm93OworCXVpbnQ2NCB0dGxfdXM7CisJdWludDMyIGhhc2g7CisJaW50IGlkeDsKKwlib29sIGlz X3N0YWxlID0gZmFsc2U7CisKKwlpZiAoIXBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlv bl9lbmFibGVkIHx8IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwpCisJCXJldHVy biBmYWxzZTsKKworCWlmICh0YWJsZV9vaWQgPD0gMCB8fCBkYm9pZCA8PSAwKQorCXsKKwkJaXNf c3RhbGUgPSB0cnVlOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwltYXAgPSB0cmFja190 YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFwOworCWhhc2ggPSBmbnYxYV9oYXNoX3RhYmxl X2tleSh0YWJsZV9vaWQsIGRib2lkKTsKKworCXRhYmxlX21hcF9sb2NrKCk7CisKKwlpZHggPSB0 YWJsZV9tYXBfbG9va3VwKG1hcCwgdGFibGVfb2lkLCBkYm9pZCwgaGFzaCk7CisJaWYgKGlkeCAh PSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJVHJhY2tUYWJsZU11 dGF0aW9uRW50cnkgKmVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCQlnZXRfY3Vy cmVudF90aW1lKCZub3cpOworCQl0dGxfdXMgPSB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+ c3RhdGUuY3VycmVudF90dGxfdXM7CisKKwkJaW50NjQgZWxhcHNlZCA9IGVsYXBzZWRfdXMoJmVu dHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUsICZub3cpOworCQlpc19zdGFsZSA9IChlbGFwc2Vk IDwgKGludDY0KXR0bF91cyk7CisKKwkJZXJlcG9ydChERUJVRzIsCisJCQkJKGVycm1zZygidHJh Y2tfdGFibGVfbXV0YXRpb246IHRhYmxlIG9pZCAlZCAoZGJvaWQgJWQpIGVsYXBzZWQ9JWxkIHVz LCB0dGw9JWx1IHVzLCBzdGFsZT0lZCIsCisJCQkJCQl0YWJsZV9vaWQsIGRib2lkLCAobG9uZyll bGFwc2VkLCAodW5zaWduZWQgbG9uZyl0dGxfdXMsIGlzX3N0YWxlKSkpOworCX0KKworCXRhYmxl X21hcF91bmxvY2soKTsKKwordXBkYXRlX3N0YXRzOgorCS8qIFVwZGF0ZSBzdGF0aXN0aWNzIC0g c2tpcCBpZiBzaG1lbSBub3QgYXZhaWxhYmxlICovCisJaWYgKHRyYWNrX3RhYmxlX211dGF0aW9u X3NobWVtICE9IE5VTEwpCisJeworCQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmdHJhY2tfdGFibGVf bXV0YXRpb25fc2htZW0tPnN0YXRlLnN0YXRzX3F1ZXJpZXNfY2hlY2tlZCwgMSk7CisJCWlmIChp c19zdGFsZSkKKwkJCV9fc3luY19mZXRjaF9hbmRfYWRkKCZ0cmFja190YWJsZV9tdXRhdGlvbl9z aG1lbS0+c3RhdGUuc3RhdHNfZm9yY2VkX3ByaW1hcnksIDEpOworCQllbHNlCisJCQlfX3N5bmNf ZmV0Y2hfYW5kX2FkZCgmdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLnN0YXRzX2Fs bG93ZWRfcmVwbGljYSwgMSk7CisJfQorCisJcmV0dXJuIGlzX3N0YWxlOworfQorCit2b2lkCitw b29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVzX3dyaXR0ZW4oY29uc3QgaW50ICp0 YWJsZV9vaWRzLCBpbnQgbnVtX3RhYmxlcywgaW50IGRib2lkKQoreworCVRyYWNrVGFibGVNdXRh dGlvbkhhc2hUYWJsZSAqbWFwOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQgaTsKKworCWlm ICghcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX2VuYWJsZWQgfHwgdHJhY2tfdGFi bGVfbXV0YXRpb25fc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKG51bV90YWJsZXMg PD0gMCB8fCB0YWJsZV9vaWRzID09IE5VTEwgfHwgZGJvaWQgPD0gMCkKKwkJcmV0dXJuOworCisJ bWFwID0gdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnRhYmxlX21hcDsKKwlnZXRfY3VycmVu dF90aW1lKCZub3cpOworCisJdGFibGVfbWFwX2xvY2soKTsKKworCS8qIFBlcmlvZGljYWxseSBj bGVhbiB1cCBleHBpcmVkIGVudHJpZXMgKi8KKwlpZiAobWFwLT5udW1fZW50cmllcyA+IG1hcC0+ bWF4X2VudHJpZXMgKiAzIC8gNCkKKwl7CisJCS8qIExpbWl0IGNsZWFudXAgZnJlcXVlbmN5IHRv IGF2b2lkIE8oTikgc2NhbiBvbiBldmVyeSB3cml0ZSAqLworCQkvKiAxMDBtcyBpbnRlcnZhbCAq LworCQlpZiAoZWxhcHNlZF91cygmdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLmxh c3RfY2xlYW51cF90aW1lLCAmbm93KSA+IDEwMDAwMCkKKwkJeworCQkJdGFibGVfbWFwX2NsZWFu dXBfZXhwaXJlZChtYXAsIHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5jdXJyZW50 X3R0bF91cyk7CisJCQl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUubGFzdF9jbGVh bnVwX3RpbWUgPSBub3c7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3RhYmxlczsg aSsrKQorCXsKKwkJdWludDMyIGhhc2g7CisJCWludCB0YWJsZV9vaWQgPSB0YWJsZV9vaWRzW2ld OworCisJCWlmICh0YWJsZV9vaWQgPiAwKQorCQl7CisJCQloYXNoID0gZm52MWFfaGFzaF90YWJs ZV9rZXkodGFibGVfb2lkLCBkYm9pZCk7CisJCQl0YWJsZV9tYXBfaW5zZXJ0KG1hcCwgdGFibGVf b2lkLCBkYm9pZCwgaGFzaCwgJm5vdyk7CisJCX0KKwl9CisKKwl0YWJsZV9tYXBfdW5sb2NrKCk7 Cit9CisKKy8qCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBtYXJrIGEgc2luZ2xlIHRhYmxl IGFzIHdyaXR0ZW4KKyAqLwordm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3Rh YmxlX3dyaXR0ZW4oaW50IHRhYmxlX29pZCwgaW50IGRib2lkKQoreworCWlmICh0YWJsZV9vaWQg PiAwICYmIGRib2lkID4gMCkKKwl7CisJCWNvbnN0IGludCB0YWJsZXNbMV0gPSB7IHRhYmxlX29p ZCB9OworCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVzX3dyaXR0ZW4odGFi bGVzLCAxLCBkYm9pZCk7CisJfQorfQorCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9u X3VwZGF0ZV90dGwodWludDY0IGRlbGF5X3VzKQoreworCXVpbnQ2NCBuZXdfdHRsOworCisJaWYg KCFwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fZW5hYmxlZCB8fCB0cmFja190YWJs ZV9tdXRhdGlvbl9zaG1lbSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBDYWxjdWxhdGUgbmV3 IFRUTDogZGVsYXkgKiBmYWN0b3IsIHdpdGggbWluaW11bSBvZiBkZWZhdWx0IFRUTCAqLworCW5l d190dGwgPSAodWludDY0KShkZWxheV91cyAqIHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRh dGlvbl90dGxfZmFjdG9yKTsKKwlpZiAobmV3X3R0bCA8IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RF RkFVTFRfVFRMX1VTKQorCQluZXdfdHRsID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9U VExfVVM7CisKKwkvKiBNYXhpbXVtIFRUTCBvZiAxIGhvdXIgKi8KKwlpZiAobmV3X3R0bCA+IDM2 MDBVTEwgKiAxMDAwMDAwVUxMKQorCQluZXdfdHRsID0gMzYwMFVMTCAqIDEwMDAwMDBVTEw7CisK Kwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuY3VycmVudF90dGxfdXMgPSBuZXdf dHRsOworCWdldF9jdXJyZW50X3RpbWUoJnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0 ZS50dGxfbGFzdF91cGRhdGVkKTsKKworCWVyZXBvcnQoREVCVUcxLAorCQkJKGVycm1zZygidHJh Y2tfdGFibGVfbXV0YXRpb246IHVwZGF0ZWQgVFRMIHRvICVsdSB1cyAoZGVsYXk9JWx1IHVzLCBm YWN0b3I9JS4xZikiLAorCQkJCQkodW5zaWduZWQgbG9uZyluZXdfdHRsLCAodW5zaWduZWQgbG9u ZylkZWxheV91cywKKwkJCQkJcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9m YWN0b3IpKSk7Cit9CisKK2Jvb2wKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2NhY2hl ZF9wYXJzZSh1aW50NjQgaGFzaCwgYm9vbCAqaXNfd3JpdGUsCisJCQkJCQkJCSBjaGFyIHRhYmxl X25hbWVzW11bVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfTkFNRV9MRU5dLAorCQkJCQkJCQkg aW50ICpudW1fdGFibGVzKQoreworCVF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGU7CisJaW50IGlkeDsK Kwlib29sIGZvdW5kID0gZmFsc2U7CisKKwlpZiAoIXBvb2xfY29uZmlnLT50cmFja190YWJsZV9t dXRhdGlvbl9lbmFibGVkIHx8IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwpCisJ CXJldHVybiBmYWxzZTsKKworCWNhY2hlID0gdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnF1 ZXJ5X2NhY2hlOworCisJcXVlcnlfY2FjaGVfbG9jaygpOworCisJaWR4ID0gcXVlcnlfY2FjaGVf bG9va3VwKGNhY2hlLCBoYXNoKTsKKwlpZiAoaWR4ICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lO VkFMSURfSU5ERVgpCisJeworCQlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNI RV9FTlRSSUVTKGNhY2hlKTsKKwkJaW50IGk7CisKKwkJKmlzX3dyaXRlID0gZW50cmllc1tpZHhd LmlzX3dyaXRlOworCQkqbnVtX3RhYmxlcyA9IGVudHJpZXNbaWR4XS5udW1fdGFibGVzOworCisJ CWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzW2lkeF0ubnVtX3RhYmxlcyAmJiBpIDwgVFJBQ0tfVEFC TEVfTVVUQVRJT05fTUFYX1RBQkxFU19QRVJfUVVFUlk7IGkrKykKKwkJeworCQkJc3RybGNweSh0 YWJsZV9uYW1lc1tpXSwgZW50cmllc1tpZHhdLnRhYmxlX25hbWVzW2ldLCBUUkFDS19UQUJMRV9N VVRBVElPTl9UQUJMRV9OQU1FX0xFTik7CisJCX0KKworCQkvKiBNb3ZlIHRvIGZyb250IG9mIExS VSAqLworCQlxdWVyeV9jYWNoZV9scnVfdG91Y2goY2FjaGUsIGlkeCk7CisJCWZvdW5kID0gdHJ1 ZTsKKwl9CisKKwlxdWVyeV9jYWNoZV91bmxvY2soKTsKKworCXJldHVybiBmb3VuZDsKK30KKwor dm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9jYWNoZV9wYXJzZSh1aW50NjQgaGFzaCwg Ym9vbCBpc193cml0ZSwKKwkJCQkJCQljb25zdCBjaGFyIHRhYmxlX25hbWVzW11bVFJBQ0tfVEFC TEVfTVVUQVRJT05fVEFCTEVfTkFNRV9MRU5dLAorCQkJCQkJCWludCBudW1fdGFibGVzKQorewor CVF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGU7CisJaW50ICpidWNrZXRzOworCVF1ZXJ5UGFyc2VFbnRy eSAqZW50cmllczsKKwlpbnQgaWR4OworCWludCBidWNrZXQ7CisKKwlpZiAoIXBvb2xfY29uZmln LT50cmFja190YWJsZV9tdXRhdGlvbl9lbmFibGVkIHx8IHRyYWNrX3RhYmxlX211dGF0aW9uX3No bWVtID09IE5VTEwpCisJCXJldHVybjsKKworCWNhY2hlID0gdHJhY2tfdGFibGVfbXV0YXRpb25f c2htZW0tPnF1ZXJ5X2NhY2hlOworCisJcXVlcnlfY2FjaGVfbG9jaygpOworCisJLyogQ2hlY2sg aWYgYWxyZWFkeSBleGlzdHMgKi8KKwlpZHggPSBxdWVyeV9jYWNoZV9sb29rdXAoY2FjaGUsIGhh c2gpOworCWlmIChpZHggIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwl7 CisJCXF1ZXJ5X2NhY2hlX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJLyogQWxsb2NhdGUg bmV3IGVudHJ5IChtYXkgZXZpY3QgTFJVKSAqLworCWlkeCA9IHF1ZXJ5X2NhY2hlX2FsbG9jX2Vu dHJ5KGNhY2hlKTsKKwlpZiAoaWR4ID09IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5E RVgpCisJeworCQlxdWVyeV9jYWNoZV91bmxvY2soKTsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJ CShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiBmYWlsZWQgdG8gYWxsb2NhdGUgcXVlcnkg Y2FjaGUgZW50cnkiKSkpOworCQlyZXR1cm47CisJfQorCisJZW50cmllcyA9IFFVRVJZX0NBQ0hF X0VOVFJJRVMoY2FjaGUpOworCWJ1Y2tldHMgPSBRVUVSWV9DQUNIRV9CVUNLRVRTKGNhY2hlKTsK KworCS8qIEZpbGwgaW4gZW50cnkgKi8KKwllbnRyaWVzW2lkeF0ucXVlcnlfaGFzaCA9IGhhc2g7 CisJZW50cmllc1tpZHhdLmlzX3dyaXRlID0gaXNfd3JpdGU7CisJZW50cmllc1tpZHhdLm51bV90 YWJsZXMgPSAobnVtX3RhYmxlcyA+IFRSQUNLX1RBQkxFX01VVEFUSU9OX01BWF9UQUJMRVNfUEVS X1FVRVJZKSA/CisJCQkJCQkJICBUUkFDS19UQUJMRV9NVVRBVElPTl9NQVhfVEFCTEVTX1BFUl9R VUVSWSA6IG51bV90YWJsZXM7CisKKwl7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgZW50 cmllc1tpZHhdLm51bV90YWJsZXM7IGkrKykKKwkJeworCQkJc3RybGNweShlbnRyaWVzW2lkeF0u dGFibGVfbmFtZXNbaV0sIHRhYmxlX25hbWVzW2ldLCBUUkFDS19UQUJMRV9NVVRBVElPTl9UQUJM RV9OQU1FX0xFTik7CisJCX0KKwl9CisKKwkvKiBJbnNlcnQgaW50byBoYXNoIGJ1Y2tldCAqLwor CWJ1Y2tldCA9IGhhc2ggJSBjYWNoZS0+bnVtX2J1Y2tldHM7CisJZW50cmllc1tpZHhdLm5leHQg PSBidWNrZXRzW2J1Y2tldF07CisJYnVja2V0c1tidWNrZXRdID0gaWR4OworCisJLyogQWRkIHRv IExSVSBsaXN0ICovCisJcXVlcnlfY2FjaGVfbHJ1X2FkZChjYWNoZSwgaWR4KTsKKworCXF1ZXJ5 X2NhY2hlX3VubG9jaygpOworfQorCit1aW50NjQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25f bm9ybWFsaXplX2FuZF9oYXNoKGNvbnN0IGNoYXIgKnF1ZXJ5KQoreworCWNoYXIgbm9ybWFsaXpl ZFs4MTkyXTsKKwlzaXplX3QgbGVuOworCisJaWYgKHF1ZXJ5ID09IE5VTEwgfHwgcXVlcnlbMF0g PT0gJ1wwJykKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBub3JtYWxpemVfcXVlcnkocXVlcnksIG5v cm1hbGl6ZWQsIHNpemVvZihub3JtYWxpemVkKSk7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4g MDsKKworCXJldHVybiBmbnYxYV9oYXNoXzY0KG5vcm1hbGl6ZWQsIGxlbik7Cit9Ci0tIAoyLjUy LjAKCg== --000000000000c79ec0064a261908--