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 1wRCCM-002Ab3-0Q for pgpool-hackers@arkaria.postgresql.org; Sun, 24 May 2026 17:01:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wRCCI-00H5F2-0g for pgpool-hackers@arkaria.postgresql.org; Sun, 24 May 2026 17:01:07 +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 1wRCCH-00H5Et-2f for pgpool-hackers@lists.postgresql.org; Sun, 24 May 2026 17:01:06 +0000 Received: from mail-yw1-x1131.google.com ([2607:f8b0:4864:20::1131]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wRCCF-00000001Dlq-1X2P for pgpool-hackers@lists.postgresql.org; Sun, 24 May 2026 17:01:06 +0000 Received: by mail-yw1-x1131.google.com with SMTP id 00721157ae682-7bdaa68cf81so81588037b3.3 for ; Sun, 24 May 2026 10:01:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779642061; cv=none; d=google.com; s=arc-20240605; b=D6/Kzhdjb8b+cmMkG+jbsjHjrn3yKw3HseF8hTLt6s68CtXO9Gbtskx5AQZrNfRbtw Xk69uNRBrZ+9sOnUayfaQzQO3ppW9K3KJxQNRBJIKLDNfgMmtgzc6+LbnHVPePPHPZOL WyjI0H9Pntegnp387kIyhJuJKsMK2zjC9ouNNOty5SqE/ciPs9VI7YsiD9RKnKN9UzgX nJeDKsvkK8tfyMD3u1ExYzDNMbUuc0LpESAOxK9vyouRelj7oMiYf1Q06I1UlL2wt8IY cVZOPAZgAnqZDsMnvE2i+hokJicqEjYG5conUICy6+bla6tK0P9SSUqyLpB/XJ4V0Epn ng6A== 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=a5HGqERyiLglQiqxk0pv753BAw6VPtkLK9LurFqa3xA=; fh=m3oiE62fRN5J1XaE+5vpHZRIgCyFefxVI0mFw3d8yxA=; b=h1/N+9llUkNrVWOml7pQHr41tHbnMUd8OG71+4Qh438vyBXLWNNoFWGaEV7y4Z9OrW qgXOhSYiVtQl1ErXH1nCvnkKBzLBbO9yqsLMNMbbuvsVOFUkikikJkl0gYh1gEAnICKN uiJhl3aSFUutjgUOS2/pPa4vTTBnpJ6XflmRJPHmQw2yu+qRgR4RgmF4LLKD9n2JoHEC u9ezE/gGjLwzsbfQR3ivueu05YBfxWT0GkCpXhHAcew+Itk33cg7pWzSSsXjW6YBknq1 jglPEVvsYs0ZkF/AgkvoQWUyX3oK+aNUPrAWpOgqlEBTVsR5LAsWEq8HFvLjUiGJTSXD GOiQ==; 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=1779642061; x=1780246861; 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=a5HGqERyiLglQiqxk0pv753BAw6VPtkLK9LurFqa3xA=; b=bHsHXAyjY5GLK6KjEaioh62YWBQITli6Fexi1D0dOOrvkLjVSaB/Q7P0MrXqYRoBtr 7N3vZP7sRnOJVUjcxjfm96dLfjGYJrzesyCUNYAplbsvDLRecWPvsXJMFXt1MMa+QZW1 A4bDYjL3+28xvVzLb8/BTbKKQ6UWlisY4MuhjLyaQK017c/gREtd6D7AxuGNkpDAeQO3 EhfLUSYeUEeE+yRw+YclVez6P65bMEA9Qfhx9lKK4gu2UHQNRG4/a07Ds/QY3aD1v9ea VkwCW5wS3YzstaGnCTNx9wXEGTMeVfXQPu/TWlvY6N91zva8Kp09uPXwUin9zjTDhlb6 QCGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779642061; x=1780246861; 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=a5HGqERyiLglQiqxk0pv753BAw6VPtkLK9LurFqa3xA=; b=o5KHLblSerqFZ38xeUSSGetNWqSbhCSI1F8gouDpY3PZ/7ZcCmWUcKUMXROZSwuBkQ clquDb3ZM0xN8NM31NAAlG5FgW5056CLaTCyf9Ipvya0B5vkO2NAPLzcrKpoy8TwP9bg SFxBYASlSST1OzaPv5fgzsgzSzsGieU/dlx/HpCn25vdj2xAvYWr0A3y/7TZlxHs6On2 kKMSU2K+BAsL6cvBoyr42xCR1S2ae4hB2y+gyQnLp27KZQ2+KhTQG6LPYxtKvT96zxOa azWWyAYSgcH85TJrfUOlPs3sYBe6zTwR2ljCIVpWTLlRf5K9h6OWd0WVlPj7uesUZkBe G2CA== X-Gm-Message-State: AOJu0Yxobyi5ahcsYF6F/5V5G3qhZtV2suw/55taC4I+bjEAwSvFfV7G nUxkDvP0IJP/2aqPDl9DwJwlrPt1lRA0ikaMmKNpmfphHDLOR0vauW78IY03TsoseZBmvx9SGbA oyBi/wQAK5ptpuhJB8JNIEIly8QaGyxEIMzLJ1SH2bqv+r3NpUur+JWMG2G1vxTk= X-Gm-Gg: Acq92OGUC6b3shEozvTUj1VdKfTMEdW32jKuZGRHjv8LOtQjM4Uiwh+T5SZpSQEo/I5 Dn33Zjv3qm9Oc+o0Tj4LvJ9WgEg+zxGt+9jWWTYsCfZ/DMkt33Hjg9llmA6plukbpo06F4JtGmw nKaQt7Ch8K6MQT1h9Fjxr1paLqtwaJsDszPBkwRL9T5dC3Sn/mQJ9vr/R/m0NOoORFZdWPhKvwC bcmIRD3knv/TZ5qBg6kZ6fge+WzTp0xvtvRrvHXLEND4JXmC2VG2gXRto3FUwxZ9zhrfH2onhdg wkvnL/oNmRZ/3NURpMgLrPTA5QDi6/ElwwqfbCETU3bBnTsw24MpxWKSKkgMc5Aa5tOot2HVTiy QlnY6yo9iQK/mjDNqg7T5K+X2iEGmUI7+DaCvT4UY0rvRP3snHDiKNxAHpLZesfVwfZ74 X-Received: by 2002:a05:690c:350a:b0:78f:bc2b:83f5 with SMTP id 00721157ae682-7d338a74076mr143006587b3.20.1779642060265; Sun, 24 May 2026 10:01:00 -0700 (PDT) MIME-Version: 1.0 References: <20260520.132810.1024114140609315185.ishii@postgresql.org> <20260521.185044.504532841722447976.ishii@postgresql.org> <20260523.201816.2108820434774242495.ishii@postgresql.org> In-Reply-To: <20260523.201816.2108820434774242495.ishii@postgresql.org> From: Nadav Shatz Date: Sun, 24 May 2026 20:00:47 +0300 X-Gm-Features: AVHnY4LTtpdzPdPacHqIhqbBHMjKrUaNZFcDaNjfP_5ldbIcGgH7EscpvpJEVrI 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="000000000000d51d2e065293349a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d51d2e065293349a Content-Type: multipart/alternative; boundary="000000000000d51d2e0652933498" --000000000000d51d2e0652933498 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Tatsuo, Your really_writing_transaction approach is the right fix -- it addresses the root cause across all DLBOW modes, not just ours. Thanks for digging into it. I applied your v1 patch and rebased our feature on top. Attaching both patches separately so they can land independently in the order you prefer: v5-0001-Fix-disable_load_balance_on_write-and-query-cache.patch -- your patch unchanged (just rebased to apply cleanly on current master without our feature underneath). v5-0002-Feature-load-balancing-control-by-table-tracking.patch -- our feature, on top of your fix. Changes in v5-0002 vs v4: - Dropped pool_has_dml_adaptive_write_in_transaction() helper and the matching pool_has_dml_table_oids() exposure. The cache fetch guards in pool_proto_modules.c now correctly use pool_is_really_writing_transaction() from your patch, so the helper became redundant. - Kept the MAIN_REPLICA gate in CommandComplete.c for the autocommit mark-stale branch. dml_adaptive_global is only meaningful in streaming replication mode (matches the routing logic in where_to_send_main_replica), and gating prevents the hang we saw in native_replication where the autocommit branch could run while an explicit transaction was actually in flight on the backend. I tried to run 006.memqcache with the mutation against the combined branch but local master is currently broken (commit 2ae004a48 as you noted), so the standby setup fails before reaching the jdbctest part. Both patches build cleanly and our 043.track_table_mutation passes on an earlier base. Will retest once master is unbroken. Thanks! On Sat, May 23, 2026 at 2:18=E2=80=AFPM Tatsuo Ishii = wrote: > > I think you are talking about the logic to judge whether we are in an > > explicite transaction or not here. Current dml_adaptive checks > > supplied query is a transaction starting command like BEGIN. IMO this > > is fundamentaly wrong because the command may fail by various reasons. > > The correct way is checking transaction state by using TSTATE > > macro. Note that the macro can only be used at leat one ready for > > query response returned from backend (simple query protocol case), or > > command complete response is returned from backend (extended query > > protocol case). > > > >> In native replication and snapshot isolation modes, > >> dml_adaptive() is never called (it lives inside > >> where_to_send_main_replica), so is_in_transaction is never set > >> to true even inside an explicit BEGIN/COMMIT block. That meant > >> every DML in those modes was treated as autocommit by the > >> write-tracking code, triggering > >> pool_track_table_mutation_get_database_oid() =E2=80=95 which does a > >> relcache do_query =E2=80=95 while a transaction was actually in flight > >> on the backend connection. The do_query conflicts with the > >> in-flight transaction and hangs the session. > > > > Assuming "a transaction was actually in flight" means a transaction > > was open (explicit transaction), not really. do_query can be called > > inside or outside of an explicit transaction. > > > > Anyway, I found dml_adaptive is completely broken (it brings wrong > > results if query cache enabled). Unless there are users for the > > feature, maybe we should remove dml_adaptive entirely? > > It appears that other options of disable_load_balance_on_write are all > broken too, except "transaction". I don't want to discard all of them, > so I come up with attached patch. > > The query cache relies on is_writing_transaction of session context to > judge whether cache can be safely used. However, > disable_load_balance_on_write overrides it to true when it should not, > and vice versa for its own purpose. To fix this, a new session context > variable "really_writing_transaction" is introduced. It is almost same > as existing writing_transaction, but it faithfully tracks whether a > writing query appears in an explicit transaction. The query cache uses > it instead of writing_transaction variable. > > Currently, master branch is broken because of commit 2ae004a48. If > you want to try the patch, I recommend to checkout 48e1d6d3c, then > apply the patch. > > 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 --000000000000d51d2e0652933498 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Tatsuo,

Your really_writing_transact= ion approach is the right fix -- it
addresses the root cause across all = DLBOW modes, not just ours.
Thanks for digging into it.

I applied= your v1 patch and rebased our feature on top.=C2=A0 Attaching
both patc= hes separately so they can land independently in the
order you prefer:
=C2=A0 v5-0001-Fix-disable_load_balance_on_write-and-query-cache.patc= h
=C2=A0 =C2=A0 -- your patch unchanged (just rebased to apply cleanly o= n
=C2=A0 =C2=A0 =C2=A0 =C2=A0current master without our feature undernea= th).

=C2=A0 v5-0002-Feature-load-balancing-control-by-table-tracking= .patch
=C2=A0 =C2=A0 -- our feature, on top of your fix.

Changes = in v5-0002 vs v4:

- Dropped pool_has_dml_adaptive_write_in_transacti= on() helper and
=C2=A0 the matching pool_has_dml_table_oids() exposure.= =C2=A0 The cache
=C2=A0 fetch guards in pool_proto_modules.c now correct= ly use
=C2=A0 pool_is_really_writing_transaction() from your patch, so t= he
=C2=A0 helper became redundant.

- Kept the MAIN_REPLICA gate i= n CommandComplete.c for the
=C2=A0 autocommit mark-stale branch. =C2=A0d= ml_adaptive_global is only
=C2=A0 meaningful in streaming replication mo= de (matches the routing
=C2=A0 logic in where_to_send_main_replica), and= gating prevents the
=C2=A0 hang we saw in native_replication where the = autocommit branch
=C2=A0 could run while an explicit transaction was act= ually in flight
=C2=A0 on the backend.

I tried to run 006.memqcac= he with the mutation against the
combined branch but local master is cur= rently broken (commit
2ae004a48 as you noted), so the standby setup fail= s before
reaching the jdbctest part.=C2=A0 Both patches build cleanly an= d our
043.track_table_mutation passes on an earlier base.=C2=A0 Will ret= est
once master is unbroken.

Thanks!

O= n Sat, May 23, 2026 at 2:18=E2=80=AFPM Tatsuo Ishii <ishii@postgresql.org> wrote:
> I think you are talking about= the logic to judge whether we are in an
> explicite transaction or not here. Current dml_adaptive checks
> supplied query is a transaction starting command like BEGIN. IMO this<= br> > is fundamentaly wrong because the command may fail by various reasons.=
> The correct way is checking transaction state by using TSTATE
> macro. Note that the macro can only be used at leat one ready for
> query response returned from backend (simple query protocol case), or<= br> > command complete response is returned from backend (extended query
> protocol case).
>
>> In native replication and snapshot isolation modes,
>> dml_adaptive() is never called (it lives inside
>> where_to_send_main_replica), so is_in_transaction is never set
>> to true even inside an explicit BEGIN/COMMIT block.=C2=A0 That mea= nt
>> every DML in those modes was treated as autocommit by the
>> write-tracking code, triggering
>> pool_track_table_mutation_get_database_oid() =E2=80=95 which does = a
>> relcache do_query =E2=80=95 while a transaction was actually in fl= ight
>> on the backend connection.=C2=A0 The do_query conflicts with the >> in-flight transaction and hangs the session.
>
> Assuming "a transaction was actually in flight" means a tran= saction
> was open (explicit transaction), not really. do_query can be called > inside or outside of an explicit transaction.
>
> Anyway, I found dml_adaptive is completely broken (it brings wrong
> results if query cache enabled). Unless there are users for the
> feature, maybe we should remove dml_adaptive entirely?

It appears that other options of disable_load_balance_on_write are all
broken too, except "transaction". I don't want to discard all= of them,
so I come up with attached patch.

The query cache relies on is_writing_transaction of session context to
judge whether cache can be safely used. However,
disable_load_balance_on_write overrides it to true when it should not,
and vice versa for its own purpose. To fix this, a new session context
variable "really_writing_transaction" is introduced. It is almost= same
as existing writing_transaction, but it faithfully tracks whether a
writing query appears in an explicit transaction. The query cache uses
it instead of writing_transaction variable.

Currently, master branch is broken because of commit 2ae004a48.=C2=A0 If you want to try the patch, I recommend to checkout 48e1d6d3c, then
apply the patch.

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
--000000000000d51d2e0652933498-- --000000000000d51d2e065293349a Content-Type: application/octet-stream; name="v5-0001-Fix-disable_load_balance_on_write-and-query-cache.patch" Content-Disposition: attachment; filename="v5-0001-Fix-disable_load_balance_on_write-and-query-cache.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpk0xas90 RnJvbSA3ZjlhM2JjYjEzZjMwYjBjZWZmZDE0NDhmMGZhYzk4YTlhNmU3MTNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBTdW4sIDI0IE1heSAyMDI2IDE5OjI1OjEwICswMzAwClN1YmplY3Q6IFtQQVRDSCB2NSAx LzJdIEZpeCBkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSBhbmQgcXVlcnkgY2FjaGUuCgpU aGUgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgYWNjZXB0cyBmb3Igb3B0aW9uczoKCnRy YW5zYWN0aW9uICh0aGUgZGVmYXVsdCkKdHJhbnNfdHJhbnNhY3Rpb24KZG1sX2FkYXB0aXZlCmFs d2F5cwoKSXQgYXBwZWFyZWQgdGhhdCBleGNlcHQgInRyYW5zYWN0aW9uIiwgYWxsIG90aGVyIG9w dGlvbnMgYnJlYWsgcXVlcnkKY2FjaGUgZmVhdHVyZS4gU29tZXRpbWVzIGEgcXVlcnkgcmVzdWx0 IGlzIGNhY2hlZCBldmVuIHRoZXJlJ3MgYSB3cml0ZQpxdWVyeSBpbiBhIHRyYW5zYWN0aW9uLCBz b21ldGltZXMgcXVlcnkgaXMgbm90IGNhY2hlZCBldmVuIHdoZW4gaXQKc2hvdWxkIGJlLgoKVGhl IHF1ZXJ5IGNhY2hlIHJlbGllcyBvbiBpc193cml0aW5nX3RyYW5zYWN0aW9uIG9mIHNlc3Npb24g Y29udGV4dCB0bwpqdWRnZSB3aGV0aGVyIGNhY2hlIGNhbiBiZSBzYWZlbHkgdXNlZC4gSG93ZXZl ciwKZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgb3ZlcnJpZGVzIGl0IHRvIHRydWUgd2hl biBpdCBzaG91bGQgbm90LAphbmQgdmljZSB2ZXJzYSBmb3IgaXRzIG93biBwdXJwb3NlLiBUbyBm aXggdGhpcyBuZXcgc2Vzc2lvbiBjb250ZXh0CnZhcmlhYmxlICJyZWFsbHlfd3JpdGluZ190cmFu c2FjdGlvbiIgaXMgaW50cm9kdWNlZC4gSXQgaXMgYWxtb3N0IHNhbWUKYXMgZXhpc3Rpbmcgd3Jp dGluZ190cmFuc2FjdGlvbiwgYnV0IGl0IGZhaXRoZnVsbHkgdHJhY2tzIHdoZXRoZXIgYQp3cml0 aW5nIHF1ZXJ5IGFwcGVhcnMgaW4gYW4gZXhwbGljaXQgdHJhbnNhY3Rpb24uIFRoZSBxdWVyeSBj YWNoZSB1c2VzCml0IGluc3RlYWQgb2Ygd3JpdGluZ190cmFuc2FjdGlvbiB2YXJpYWJsZS4KCkF1 dGhvcjogVGF0c3VvIElzaGlpIDxpc2hpaUBwb3N0Z3Jlc3FsLm9yZz4KRGlzY3Vzc2lvbjoKQmFj a3BhdGNoLXRocm91Z2g6IHY0LjMKLS0tCiBzcmMvY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4 dC5jICAgICAgICAgfCAyMiArKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9jb250 ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmggfCAxOSArKysrKysrKysrKysrKysrKystCiBzcmMv cHJvdG9jb2wvQ29tbWFuZENvbXBsZXRlLmMgICAgICAgICAgICAgfCAgMSArCiBzcmMvcHJvdG9j b2wvcG9vbF9wcm9jZXNzX3F1ZXJ5LmMgICAgICAgICAgfCAgMSArCiBzcmMvcHJvdG9jb2wvcG9v bF9wcm90b19tb2R1bGVzLmMgICAgICAgICAgfCAxNyArKysrKysrKysrKysrLS0tLQogNSBmaWxl cyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMgYi9zcmMvY29udGV4dC9wb29sX3Nl c3Npb25fY29udGV4dC5jCmluZGV4IGRlZDQxYzdmYy4uYTg3Y2NlMTY0IDEwMDY0NAotLS0gYS9z cmMvY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5jCisrKyBiL3NyYy9jb250ZXh0L3Bvb2xf c2Vzc2lvbl9jb250ZXh0LmMKQEAgLTEyNSw2ICsxMjUsNyBAQCBwb29sX2luaXRfc2Vzc2lvbl9j b250ZXh0KFBPT0xfQ09OTkVDVElPTiAqZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICpi YWNrZQogCiAJLyogV2UgZG9uJ3QgaGF2ZSBhIHdyaXRlIHF1ZXJ5IGluIHRoaXMgdHJhbnNhY3Rp b24geWV0ICovCiAJcG9vbF91bnNldF93cml0aW5nX3RyYW5zYWN0aW9uKCk7CisJcG9vbF91bnNl dF9yZWFsbHlfd3JpdGluZ190cmFuc2FjdGlvbigpOwogCiAJLyogRXJyb3IgZG9lc24ndCBvY2N1 ciBpbiB0aGlzIHRyYW5zYWN0aW9uIHlldCAqLwogCXBvb2xfdW5zZXRfZmFpbGVkX3RyYW5zYWN0 aW9uKCk7CkBAIC03MzEsNiArNzMyLDEyIEBAIHBvb2xfdW5zZXRfd3JpdGluZ190cmFuc2FjdGlv bih2b2lkKQogCX0KIH0KIAordm9pZAorcG9vbF91bnNldF9yZWFsbHlfd3JpdGluZ190cmFuc2Fj dGlvbih2b2lkKQoreworCXBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSktPnJlYWxseV93 cml0aW5nX3RyYW5zYWN0aW9uID0gZmFsc2U7Cit9CisKIC8qCiAgKiBXZSBoYXZlIGEgd3JpdGUg cXVlcnkgaW4gdGhpcyB0cmFuc2FjdGlvbi4KICAqLwpAQCAtNzQ5LDYgKzc1NiwxMiBAQCBwb29s X3NldF93cml0aW5nX3RyYW5zYWN0aW9uKHZvaWQpCiAJfQogfQogCit2b2lkCitwb29sX3NldF9y ZWFsbHlfd3JpdGluZ190cmFuc2FjdGlvbih2b2lkKQoreworCXBvb2xfZ2V0X3Nlc3Npb25fY29u dGV4dChmYWxzZSktPnJlYWxseV93cml0aW5nX3RyYW5zYWN0aW9uID0gdHJ1ZTsKK30KKwogLyoK ICAqIERvIHdlIGhhdmUgYSB3cml0ZSBxdWVyeSBpbiB0aGlzIHRyYW5zYWN0aW9uPwogICovCkBA IC03NTgsNiArNzcxLDE1IEBAIHBvb2xfaXNfd3JpdGluZ190cmFuc2FjdGlvbih2b2lkKQogCXJl dHVybiBwb29sX2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpLT53cml0aW5nX3RyYW5zYWN0aW9u OwogfQogCisvKgorICogRG8gd2UgcmVhbGx5IGhhdmUgYSB3cml0ZSBxdWVyeSBpbiB0aGlzIHRy YW5zYWN0aW9uPworICovCitib29sCitwb29sX2lzX3JlYWxseV93cml0aW5nX3RyYW5zYWN0aW9u KHZvaWQpCit7CisJcmV0dXJuIHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSktPnJlYWxs eV93cml0aW5nX3RyYW5zYWN0aW9uOworfQorCiAvKgogICogRXJyb3IgZG9lc24ndCBvY2N1ciBp biB0aGlzIHRyYW5zYWN0aW9uIHlldC4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29u dGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIGIvc3JjL2luY2x1ZGUvY29udGV4dC9wb29sX3Nl c3Npb25fY29udGV4dC5oCmluZGV4IGViYTU2OTgyYi4uYTUwOThlMTZhIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmgKKysrIGIvc3JjL2luY2x1 ZGUvY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oCkBAIC0yMDksOSArMjA5LDIzIEBAIHR5 cGVkZWYgc3RydWN0CiAJLyogSWYgdHJ1ZSwgdGhlIGNvbW1hbmQgaW4gcHJvZ3Jlc3MgaGFzIGZp bmlzaGVkIHN1Y2Nlc3NmdWxseS4gKi8KIAlib29sCQljb21tYW5kX3N1Y2Nlc3M7CiAKLQkvKiBJ ZiB0cnVlLCB3cml0ZSBxdWVyeSBoYXMgYmVlbiBhcHBlYXJlZCBpbiB0aGlzIHRyYW5zYWN0aW9u ICovCisJLyoKKwkgKiBJZiB0cnVlLCB3cml0ZSBxdWVyeSBoYXMgYmVlbiBhcHBlYXJlZCBpbiB0 aGlzIHRyYW5zYWN0aW9uLiAgTm90ZSB0aGF0CisJICogdGhlIGZsYWcgbWF5IG5vdCBiZSB0dXJu ZWQgb2ZmIGV2ZW4gaWYgYSB0cmFuc2FjdGlvbiBpcyBzdGFydGVkIG9yCisJICogY29tbWl0dGVk IGlmIGRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlIGlzIG90aGVyIHRoYW4gInRyYW5zYWN0 aW9uIi4KKwkgKiBBbHNvIGlmIGRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlIGlzICJkbWxf YWRhcHRpdmUiLCB0aGUgZmxhZyBpcworCSAqIG5ldmVyIGJlIHR1cm5lZCBvbi4KKwkgKi8KIAli b29sCQl3cml0aW5nX3RyYW5zYWN0aW9uOwogCisJLyoKKwkgKiBVbmxpa2UgIndyaXRpbmdfdHJh bnNhY3Rpb24iLCB0aGlzIGZsYWcgaXMgdHVybmVkIG9uIHdoZW5ldmVyIHdyaXRpbmcKKwkgKiBx dWVyeSBpcyBpc3N1ZWQgaW4gYW4gZXhwbGljaXQgdHJhbnNhY3Rpb24sIGFuZCBpcyB0dXJuZWQg b2ZmIHdoZW4gdGhlCisJICogdHJhbnNhY3Rpb24gaXMgY2xvc2VkLiBPZiBjb3Vyc2UgdHVybmVk IG9mZiB3aGVuIG5ldyB0cmFuc2FjdGlvbgorCSAqIHN0YXJ0cy4gVGhpcyBmbGFnIGlzIHJlZmVy ZW5jZWQgYnkgcXVlcnkgY2FjaGUuCisJICovCisJYm9vbAkJcmVhbGx5X3dyaXRpbmdfdHJhbnNh Y3Rpb247CisKIAkvKiBJZiB0cnVlLCBlcnJvciBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9u ICovCiAJYm9vbAkJZmFpbGVkX3RyYW5zYWN0aW9uOwogCkBAIC0zODQsOCArMzk4LDExIEBAIGV4 dGVybiB2b2lkIHBvb2xfc2V0X3NlbnRfbWVzc2FnZV9zdGF0ZShQT09MX1NFTlRfTUVTU0FHRSAq bWVzc2FnZSk7CiBleHRlcm4gdm9pZCBwb29sX3phcF9xdWVyeV9jb250ZXh0X2luX3NlbnRfbWVz c2FnZXMoUE9PTF9RVUVSWV9DT05URVhUICpxdWVyeV9jb250ZXh0KTsKIGV4dGVybiBQT09MX1NF TlRfTUVTU0FHRSAqcG9vbF9nZXRfc2VudF9tZXNzYWdlX2J5X3F1ZXJ5X2NvbnRleHQoUE9PTF9R VUVSWV9DT05URVhUICpxdWVyeV9jb250ZXh0KTsKIGV4dGVybiB2b2lkIHBvb2xfdW5zZXRfd3Jp dGluZ190cmFuc2FjdGlvbih2b2lkKTsKK2V4dGVybiB2b2lkIHBvb2xfdW5zZXRfcmVhbGx5X3dy aXRpbmdfdHJhbnNhY3Rpb24odm9pZCk7CiBleHRlcm4gdm9pZCBwb29sX3NldF93cml0aW5nX3Ry YW5zYWN0aW9uKHZvaWQpOworZXh0ZXJuIHZvaWQgcG9vbF9zZXRfcmVhbGx5X3dyaXRpbmdfdHJh bnNhY3Rpb24odm9pZCk7CiBleHRlcm4gYm9vbCBwb29sX2lzX3dyaXRpbmdfdHJhbnNhY3Rpb24o dm9pZCk7CitleHRlcm4gYm9vbCBwb29sX2lzX3JlYWxseV93cml0aW5nX3RyYW5zYWN0aW9uKHZv aWQpOwogZXh0ZXJuIHZvaWQgcG9vbF91bnNldF9mYWlsZWRfdHJhbnNhY3Rpb24odm9pZCk7CiBl eHRlcm4gdm9pZCBwb29sX3NldF9mYWlsZWRfdHJhbnNhY3Rpb24odm9pZCk7CiBleHRlcm4gYm9v bCBwb29sX2lzX2ZhaWxlZF90cmFuc2FjdGlvbih2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9wcm90 b2NvbC9Db21tYW5kQ29tcGxldGUuYyBiL3NyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxldGUuYwpp bmRleCBhM2I4ZjBlYTEuLjFmNjNhMGU4ZCAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvY29sL0NvbW1h bmRDb21wbGV0ZS5jCisrKyBiL3NyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxldGUuYwpAQCAtMzcw LDYgKzM3MCw3IEBAIGhhbmRsZV9xdWVyeV9jb250ZXh0KFBPT0xfQ09OTkVDVElPTl9QT09MICpi YWNrZW5kKQogCiAJCQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dy aXRlICE9IERMQk9XX1RSQU5TX1RSQU5TQUNUSU9OKQogCQkJCXBvb2xfdW5zZXRfd3JpdGluZ190 cmFuc2FjdGlvbigpOworCQkJcG9vbF91bnNldF9yZWFsbHlfd3JpdGluZ190cmFuc2FjdGlvbigp OwogCiAJCQlwb29sX3Vuc2V0X2ZhaWxlZF90cmFuc2FjdGlvbigpOwogCQkJcG9vbF91bnNldF90 cmFuc2FjdGlvbl9pc29sYXRpb24oKTsKZGlmZiAtLWdpdCBhL3NyYy9wcm90b2NvbC9wb29sX3By b2Nlc3NfcXVlcnkuYyBiL3NyYy9wcm90b2NvbC9wb29sX3Byb2Nlc3NfcXVlcnkuYwppbmRleCBk YWNhYTlkNWEuLmZkYzhkOTdlMCAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvY29sL3Bvb2xfcHJvY2Vz c19xdWVyeS5jCisrKyBiL3NyYy9wcm90b2NvbC9wb29sX3Byb2Nlc3NfcXVlcnkuYwpAQCAtNDE4 Nyw2ICs0MTg3LDcgQEAgc3RhcnRfaW50ZXJuYWxfdHJhbnNhY3Rpb24oUE9PTF9DT05ORUNUSU9O ICpmcm9udGVuZCwgUE9PTF9DT05ORUNUSU9OX1BPT0wgKmJhY2sKIAkJCQkvKiBNYXJrIHRoYXQg d2Ugc3RhcnRlZCBuZXcgdHJhbnNhY3Rpb24gKi8KIAkJCQlJTlRFUk5BTF9UUkFOU0FDVElPTl9T VEFSVEVEKGJhY2tlbmQsIGkpID0gdHJ1ZTsKIAkJCQlwb29sX3Vuc2V0X3dyaXRpbmdfdHJhbnNh Y3Rpb24oKTsKKwkJCQlwb29sX3Vuc2V0X3JlYWxseV93cml0aW5nX3RyYW5zYWN0aW9uKCk7CiAJ CQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvcG9vbF9wcm90b19tb2R1bGVz LmMgYi9zcmMvcHJvdG9jb2wvcG9vbF9wcm90b19tb2R1bGVzLmMKaW5kZXggNjVlZDE5MGVmLi44 NmZiNWY4YTggMTAwNjQ0Ci0tLSBhL3NyYy9wcm90b2NvbC9wb29sX3Byb3RvX21vZHVsZXMuYwor KysgYi9zcmMvcHJvdG9jb2wvcG9vbF9wcm90b19tb2R1bGVzLmMKQEAgLTI3MCw3ICsyNzAsNyBA QCBTaW1wbGVRdWVyeShQT09MX0NPTk5FQ1RJT04gKmZyb250ZW5kLAogCSAqIHF1ZXJ5IGNhY2hl LgogCSAqLwogCWlmIChwb29sX2NvbmZpZy0+bWVtb3J5X2NhY2hlX2VuYWJsZWQgJiYgaXNfbGlr ZWx5X3NlbGVjdCAmJgotCQkhcG9vbF9pc193cml0aW5nX3RyYW5zYWN0aW9uKCkgJiYKKwkJIXBv b2xfaXNfcmVhbGx5X3dyaXRpbmdfdHJhbnNhY3Rpb24oKSAmJgogCQlUU1RBVEUoYmFja2VuZCwg TUFJTl9SRVBMSUNBID8gUFJJTUFSWV9OT0RFX0lEIDogUkVBTF9NQUlOX05PREVfSUQpICE9ICdF JyAmJgogCQkhcXVlcnlfY2FjaGVfZGlzYWJsZWQoKSkKIAl7CkBAIC0xMDI5LDcgKzEwMjksNyBA QCBFeGVjdXRlKFBPT0xfQ09OTkVDVElPTiAqZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09M ICpiYWNrZW5kLAogCSAqIG1lc3NhZ2UgaGFzIDAgcm93IGFyZ3VtZW50LCB3ZSBtYXliZSBhYmxl IHRvIHVzZSBjYWNoZS4gSWYKIAkgKiBwYXJ0aWFsX2ZldGNoIGlzIHRydWUsIGNhbm5vdCB1c2Ug Y2FjaGUuCiAJICovCi0JaWYgKHBvb2xfY29uZmlnLT5tZW1vcnlfY2FjaGVfZW5hYmxlZCAmJiAh cG9vbF9pc193cml0aW5nX3RyYW5zYWN0aW9uKCkgJiYKKwlpZiAocG9vbF9jb25maWctPm1lbW9y eV9jYWNoZV9lbmFibGVkICYmICFwb29sX2lzX3JlYWxseV93cml0aW5nX3RyYW5zYWN0aW9uKCkg JiYKIAkJKFRTVEFURShiYWNrZW5kLCBNQUlOX1JFUExJQ0EgPyBQUklNQVJZX05PREVfSUQgOiBS RUFMX01BSU5fTk9ERV9JRCkgIT0gJ0UnKQogCQkmJiBwb29sX2lzX2xpa2VseV9zZWxlY3QocXVl cnkpICYmICFxdWVyeV9jYWNoZV9kaXNhYmxlZCgpICYmCiAJCShxdWVyeV9jb250ZXh0LT5hdEVu ZCB8fCBudW1fcm93cyA9PSAwKSAmJgpAQCAtMTI3Niw2ICsxMjc2LDggQEAgRXhlY3V0ZShQT09M X0NPTk5FQ1RJT04gKmZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFja2VuZCwKIAkJ CQlpZiAoIXBvb2xfaXNfdHJhbnNhY3Rpb25fcmVhZF9vbmx5KG5vZGUpKQogCQkJCXsKIAkJCQkJ cG9vbF9zZXRfd3JpdGluZ190cmFuc2FjdGlvbigpOworCQkJCQlpZiAoVFNUQVRFKGJhY2tlbmQs IE1BSU5fUkVQTElDQSA/IFBSSU1BUllfTk9ERV9JRCA6IFJFQUxfTUFJTl9OT0RFX0lEKSA9PSAn VCcpCisJCQkJCQlwb29sX3NldF9yZWFsbHlfd3JpdGluZ190cmFuc2FjdGlvbigpOwogCQkJCX0K IAkJCX0KIAkJfQpAQCAtNDc0NSw3ICs0NzQ3LDcgQEAgcG9vbF9hdF9jb21tYW5kX3N1Y2Nlc3Mo UE9PTF9DT05ORUNUSU9OICpmcm9udGVuZCwgUE9PTF9DT05ORUNUSU9OX1BPT0wgKmJhY2tlbmQK IAl7CiAJCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0g RExCT1dfVFJBTlNfVFJBTlNBQ1RJT04pCiAJCQlwb29sX3Vuc2V0X3dyaXRpbmdfdHJhbnNhY3Rp b24oKTsKLQorCQlwb29sX3Vuc2V0X3JlYWxseV93cml0aW5nX3RyYW5zYWN0aW9uKCk7CiAJCXBv b2xfdW5zZXRfZmFpbGVkX3RyYW5zYWN0aW9uKCk7CiAJCXBvb2xfdW5zZXRfdHJhbnNhY3Rpb25f aXNvbGF0aW9uKCk7CiAJfQpAQCAtNDc1OSw3ICs0NzYxLDcgQEAgcG9vbF9hdF9jb21tYW5kX3N1 Y2Nlc3MoUE9PTF9DT05ORUNUSU9OICpmcm9udGVuZCwgUE9PTF9DT05ORUNUSU9OX1BPT0wgKmJh Y2tlbmQKIAl7CiAJCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3Jp dGUgIT0gRExCT1dfVFJBTlNfVFJBTlNBQ1RJT04pCiAJCQlwb29sX3Vuc2V0X3dyaXRpbmdfdHJh bnNhY3Rpb24oKTsKLQorCQlwb29sX3Vuc2V0X3JlYWxseV93cml0aW5nX3RyYW5zYWN0aW9uKCk7 CiAJCXBvb2xfdW5zZXRfZmFpbGVkX3RyYW5zYWN0aW9uKCk7CiAJCXBvb2xfdW5zZXRfdHJhbnNh Y3Rpb25faXNvbGF0aW9uKCk7CiAJfQpAQCAtNDgwNCw2ICs0ODA2LDEzIEBAIHBvb2xfYXRfY29t bWFuZF9zdWNjZXNzKFBPT0xfQ09OTkVDVElPTiAqZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9Q T09MICpiYWNrZW5kCiAJCQkJCQkoZXJybXNnKCJub3QgU0VUIFRSQU5TQUNUSU9OIFJFQUQgT05M WSIpKSk7CiAKIAkJCQlwb29sX3NldF93cml0aW5nX3RyYW5zYWN0aW9uKCk7CisKKwkJCQkvKgor CQkJCSAqIEluIGNhc2UgaW4gdHJhbnNhY3Rpb24sIHdlIG5lZWQgdG8KKwkJCQkgKiByZWFsbHlf d3JpdGluZ190cmFuc2FjdGlvbiBzbyB0aGF0IHF1ZXJ5IGNhY2hlIGlzIGRpc2FibGVkLgorCQkJ CSAqLworCQkJCWlmIChUU1RBVEUoYmFja2VuZCwgTUFJTl9SRVBMSUNBID8gUFJJTUFSWV9OT0RF X0lEIDogUkVBTF9NQUlOX05PREVfSUQpID09ICdUJykKKwkJCQkJcG9vbF9zZXRfcmVhbGx5X3dy aXRpbmdfdHJhbnNhY3Rpb24oKTsKIAkJCX0KIAkJfQogCi0tIAoyLjU0LjAKCg== --000000000000d51d2e065293349a Content-Type: application/octet-stream; name="v5-0002-Feature-load-balancing-control-by-table-tracking.patch" Content-Disposition: attachment; filename="v5-0002-Feature-load-balancing-control-by-table-tracking.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpk0xasd1 RnJvbSA4ZjZmNzMxOTM0OTI1Yzc5NWFiODgwYWJjNjRiZjI3OTZhNTExYzg5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogU3VuLCAxOSBBcHIgMjAyNiAxNzoxMDoyNCArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjUg Mi8yXSBGZWF0dXJlOiBsb2FkIGJhbGFuY2luZyBjb250cm9sIGJ5IHRhYmxlIHRyYWNraW5nLgoK UHJldmVudCByb3V0aW5nIG9mIHJlYWQgb25seSBxdWVyaWVzIHRvIHN0YW5kYnkgaWYgcmVwbGlj YXRpb24gZGVsYXkKb2YgdGFibGVzIHVzZWQgaW4gdGhlIHF1ZXJ5IGV4Y2VlZHMgY2VydGFpbiBh bW91bnQgb2YgdmFsdWUKY29sbGVjdGVkIGJ5IHN0cmVhbWluZyByZXBsaWNhdGlvbiBwcm9jZXNz LiBUbyBlbmFibGUgdGhpcyBmZWF0dXJlLApzZXQgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3Jp dGUgdG8gZG1sX2FkYXB0aXZlX2dsb2JhbC4KCkluIHRoaXMgbW9kZSwgd2hlbiB0YWJsZXMgYXJl IG1vZGlmaWVkIGJ5CklOU0VSVC9VUERBVEUvREVMRVRFL1RSVU5DQVRFL01FUkdFL2RhdGEgbW9k aWZpY2F0aW9uIFdJVEgsIGZvcgpjZXJ0YWluIHBlb3Jpb2QgU0VMRUNUcyB1c2luZyB0aGUgdGFi bGVzIGFyZSBub3QgbG9hZCBiYWxhbmNlZDoKaS5lLiByb3V0ZWQgdG8gdGhlIHByaW1hcnkgUG9z dGdyZVNRTCBzZXJ2ZXIgdG8gYXZvaWQgdGhlIGRhdGEKc3RhbGVuZXNzIGJ5IHJlcGxpY2F0aW9u IGRlbGF5LgoKVW5saWtlIGRtbF9hZGFwdGl2ZSBtb2RlLCBhbnkgdGFibGUgbW9kaWZpY2F0aW9u cyBkZWNyaWJlZCBhYm92ZSBhcmUKZGV0ZWN0ZWQgZXZlbiB0aGV5IGhhcHBuIGluIG90aGVyIHNl c3Npb25zIChpbiBkbWxfYWRhcHRpdmUsIHRhYmxlCm1vZGlmaWNhdGlvbnMgYXJlIG9ubHkgZGV0 ZWN0ZWQgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24pLiBOb3RlLApob3dldmVyLCB5b3UgY2Fubm90 IHVzZSBkbWxfYWRhcHRpdmVfb2JqZWN0X3JlbGF0aW9uc2hpcF9saXN0IHRvIHRyYWNrCmRlcGVu ZGVuY3kgYW1vbmcgdGFibGUgYW5kIG90aGVyIG9iamVjdHMuCgpCZXNpZGVzIGRtbF9hZGFwdGl2 ZV9nbG9iYWwsIHRoZXJlIGFyZSBzb21lIHR1bmluZyBrbm9icyBmb3IgdGhlCmZlYXR1cmU6Cgot IHRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3IKICBQYXJhbWV0ZXIgdG8gY2FsY3VsYXRl IFRUTCBvZiBlYWNoIHRyYWNraW5nIGRhdGEuCgotIHRyYWNrX3RhYmxlX211dGF0aW9uX21heF9z dGFsZW5lc3MKICBNYXhpbXVtIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0aGF0IGEgc2luZ2xl IHRhYmxlIGVudHJ5IGNhbgogIGNvbnRpbnVvdXNseSBmb3JjZSBxdWVyaWVzIHRvIHByaW1hcnku CgotIHRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24KICBEdXJhdGlvbiBp biBtaWxsaXNlY29uZHMgdG8gcm91dGUgYWxsIHF1ZXJpZXMgdG8gcHJpbWFyeSBhZnRlciBhCiAg Y2hpbGQgcHJvY2VzcyBzdGFydHMuCgotIHRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tl dHMKICBOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24g aGFzaCB0YWJsZS4KCi0gdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZQogIE1heGltdW0g bnVtYmVyIG9mIHRhYmxlcyB0aGF0IGNhbiBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5IGluIHRo ZQogIHRyYWNrIHRhYmxlIG11dGF0aW9uLgoKQXV0aG9yOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFp bG9yYnJhbmRzLmNvbT4KUmV2aWV3ZWQtYnk6IFRhdHN1byBJc2hpaSA8aXNoaWlAcG9zdGdyZXNx bC5vcmc+CkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQv ZmxhdC8yMDI2MDQwNy4xODEwMDkuMTc2MjIwNDAzMzA3NDE2NDg0MS5pc2hpaSU0MHBvc3RncmVz cWwub3JnIzU4YzEzOWMxYTdmOGQ1NTYyODY1OTIxZDA3MzM2NjdiCi0tLQogZG9jL3NyYy9zZ21s L2xvYWRiYWxhbmNlLnNnbWwgICAgICAgICAgICAgICAgIHwgMjg4ICsrKysrKwogc3JjL01ha2Vm aWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9jb25maWcv cG9vbF9jb25maWdfdmFyaWFibGVzLmMgICAgICAgICAgICB8ICA2NSArKwogc3JjL2NvbnRleHQv cG9vbF9xdWVyeV9jb250ZXh0LmMgICAgICAgICAgICAgIHwgMjQyICsrKystCiBzcmMvY29udGV4 dC9wb29sX3Nlc3Npb25fY29udGV4dC5jICAgICAgICAgICAgfCAgMTUgKy0KIHNyYy9pbmNsdWRl L3Bvb2wuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUv cG9vbF9jb25maWcuaCAgICAgICAgICAgICAgICAgICAgIHwgIDI0ICstCiBzcmMvaW5jbHVkZS91 dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmggfCAxNjcgKysrKwogc3JjL21haW4vcGdw b29sX21haW4uYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI5ICstCiBzcmMvcHJvdG9jb2wv Q29tbWFuZENvbXBsZXRlLmMgICAgICAgICAgICAgICAgfCAgMzYgKwogc3JjL3Byb3RvY29sL2No aWxkLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICsKIHNyYy9wcm90b2NvbC9wb29s X3Byb3RvX21vZHVsZXMuYyAgICAgICAgICAgICB8ICAgNiArLQogc3JjL3NhbXBsZS9wZ3Bvb2wu Y29uZi5zYW1wbGUtc3RyZWFtICAgICAgICAgIHwgIDQ1ICsKIHNyYy9zdHJlYW1pbmdfcmVwbGlj YXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYyB8ICAyNCArCiBzcmMvdGVzdC9yZWdyZXNzaW9uL2xp YnMuc2ggICAgICAgICAgICAgICAgICAgfCAgIDIgKwogLi4uL3Rlc3RzLzA0My50cmFja190YWJs ZV9tdXRhdGlvbi90ZXN0LnNoICAgIHwgMzU0ICsrKysrKysKIC4uLi8wNDQudHJhY2tfdGFibGVf bXV0YXRpb25fd2F0Y2hkb2cvdGVzdC5zaCB8IDE4NCArKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL3V0aWxzL3Bvb2xfdHJhY2tf dGFibGVfbXV0YXRpb24uYyAgICAgICAgIHwgOTAyICsrKysrKysrKysrKysrKysrKwogMTkgZmls ZXMgY2hhbmdlZCwgMjM3NCBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgK IGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0My50cmFja190 YWJsZV9tdXRhdGlvbi90ZXN0LnNoCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL3Rlc3QvcmVncmVz c2lvbi90ZXN0cy8wNDQudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvdGVzdC5zaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmMKCmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9s b2FkYmFsYW5jZS5zZ21sCmluZGV4IDllMWU3YjM5Yi4uZDRmYmNmMWE1IDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbG9hZGJhbGFu Y2Uuc2dtbApAQCAtMTExMCw2ICsxMTEwLDE4IEBAIGFwcF9uYW1lX3JlZGlyZWN0X3ByZWZlcmVu Y2VfbGlzdCAmZ3Q7IGRhdGFiYXNlX3JlZGlyZWN0X3ByZWZlcmVuY2VfbGlzdCAmZ3Q7IHVzCiAJ CURlcGVuZGVudCBmdW5jdGlvbnMsIHRyaWdnZXJzLCBhbmQgdmlld3Mgb24gdGhlIHRhYmxlcyBj YW4gYmUgY29uZmlndXJlZAogCQl1c2luZyA8eHJlZiBsaW5rZW5kPSJndWMtZG1sLWFkYXB0aXZl LW9iamVjdC1yZWxhdGlvbnNoaXAtbGlzdCI+CiAgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4K KwkJSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IHRvIDx2YXJuYW1lPmRtbF9hZGFwdGl2ZV9nbG9i YWw8L3Zhcm5hbWU+LAorCQk8cHJvZHVjdG5hbWU+UGdwb29sLUlJPC8+IGJlaGF2ZXMgbGlrZSA8 dmFybmFtZT5kbWxfYWRhcHRpdmU8L3Zhcm5hbWU+CisJCShwZXItdHJhbnNhY3Rpb24gd3JpdGUg dHJhY2tpbmcpIGFuZCBhZGRpdGlvbmFsbHkgdXNlcyBzaGFyZWQgbWVtb3J5IHRvIHRyYWNrCisJ CXJlY2VudGx5IHdyaXR0ZW4gdGFibGVzIGFjcm9zcyBhbGwgc2Vzc2lvbnMgY2x1c3Rlci13aWRl LiBXaGVuIGEgdGFibGUgaXMKKwkJd3JpdHRlbiBpbiBhbnkgc2Vzc2lvbiwgc3Vic2VxdWVudCBy ZWFkcyBvZiB0aGF0IHRhYmxlIGZyb20gYW55IHNlc3Npb24gYXJlCisJCXJvdXRlZCB0byBwcmlt YXJ5IHVudGlsIGEgVFRMIChiYXNlZCBvbiBtZWFzdXJlZCByZXBsaWNhdGlvbiBkZWxheSkgZXhw aXJlcy4KKwkJVGhpcyBwcmV2ZW50cyBzdGFsZSByZWFkcyBhZnRlciB3cml0ZXMgZXZlbiBhY3Jv c3MgZGlmZmVyZW50IGNvbm5lY3Rpb25zLgorCQlTZWUgPHhyZWYgbGlua2VuZD0icnVudGltZS1j b25maWctdGFibGUtbXV0YXRpb24tbWFwIj4gZm9yIHRoZSBzdWItcGFyYW1ldGVycworCQl0aGF0 IGNvbnRyb2wgdGhlIHNoYXJlZC1tZW1vcnkgdHJhY2tpbmcgYmVoYXZpb3IuCisgICAgIDwvcGFy YT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKQEAgLTExOTUsNCArMTIw NywyODAgQEAgZG1sX2FkYXB0aXZlX29iamVjdF9yZWxhdGlvbnNoaXBfbGlzdCA9ICd0YWJsZV8x OnRhYmxlXzInCiAKICAgPC92YXJpYWJsZWxpc3Q+CiAgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0i cnVudGltZS1jb25maWctdGFibGUtbXV0YXRpb24tbWFwIj4KKyAgPHRpdGxlPlRhYmxlIE11dGF0 aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgIDxwYXJhPgorICAgVGhlc2Ug cGFyYW1ldGVycyBjb25maWd1cmUgdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUsIHdo aWNoIGlzIGFjdGl2YXRlZCBieSBzZXR0aW5nCisgICA8eHJlZiBsaW5rZW5kPSJndWMtZGlzYWJs ZS1sb2FkLWJhbGFuY2Utb24td3JpdGUiPiB0byA8bGl0ZXJhbD5kbWxfYWRhcHRpdmVfZ2xvYmFs PC9saXRlcmFsPi4KKyAgIFRoZSBmZWF0dXJlIHRyYWNrcyByZWNlbnRseSB3cml0dGVuIHRhYmxl cyB0byBwcmV2ZW50IHN0YWxlIHJlYWRzIGZyb20gcmVwbGljYSBub2RlcyBkdXJpbmcKKyAgIHJl cGxpY2F0aW9uIGxhZy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2hlbiBhIHRhYmxlIGlz IG1vZGlmaWVkIChJTlNFUlQvVVBEQVRFL0RFTEVURSksIGl0IGlzIG1hcmtlZCBhcyAic3RhbGUi IGZvciBhIFRUTCBwZXJpb2QKKyAgICg8bGl0ZXJhbD5yZXBsaWNhdGlvbl9kZWxheSAqIHRyYWNr X3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3I8L2xpdGVyYWw+KS4gQW55IFNFTEVDVCBxdWVyaWVz IG9uIHN0YWxlIHRhYmxlcyBhcmUgcm91dGVkCisgICB0byB0aGUgcHJpbWFyeSBub2RlIGluc3Rl YWQgb2YgcmVwbGljYXMsIGVuc3VyaW5nIHJlYWQtYWZ0ZXItd3JpdGUgY29uc2lzdGVuY3kuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoaXMgZmVhdHVyZSByZXF1aXJlcyB0aW1lLWJhc2Vk IHJlcGxpY2F0aW9uIGRlbGF5IG1vbml0b3JpbmcuIFRoaXMgY2FuIGJlIHByb3ZpZGVkIGJ5IGVp dGhlcgorICAgPHhyZWYgbGlua2VuZD0iZ3VjLXJlcGxpY2F0aW9uLWRlbGF5LXNvdXJjZS1jbWQi PiAoZXh0ZXJuYWwgY29tbWFuZCBtb2RlKSBvciBieSBzZXR0aW5nCisgICA8eHJlZiBsaW5rZW5k PSJndWMtZGVsYXktdGhyZXNob2xkLWJ5LXRpbWUiPiAod2hpY2ggdXNlcyA8bGl0ZXJhbD5wZ19z dGF0X3JlcGxpY2F0aW9uLnJlcGxheV9sYWc8L2xpdGVyYWw+CisgICBmcm9tIFBvc3RncmVTUUwg MTArKS4gSWYgbmVpdGhlciBpcyBjb25maWd1cmVkLCB0aGUgVFRMIHJlbWFpbnMgYXQgaXRzIGRl ZmF1bHQgbWluaW11bSB2YWx1ZQorICAgKDEwMCBtaWxsaXNlY29uZHMpIGFuZCBpcyBuZXZlciB1 cGRhdGVkIGJhc2VkIG9uIGFjdHVhbCByZXBsaWNhdGlvbiBkZWxheSwgd2hpY2ggbWF5IHJlc3Vs dAorICAgaW4gc3Vib3B0aW1hbCByb3V0aW5nIGRlY2lzaW9ucy4KKyAgPC9wYXJhPgorCisgIDx3 YXJuaW5nPgorICAgPHBhcmE+CisgICAgRW5hYmxpbmcgPGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2ds b2JhbDwvbGl0ZXJhbD4gaW5jcmVhc2VzIHNoYXJlZCBtZW1vcnkgY29uc3VtcHRpb24uIFdpdGgg ZGVmYXVsdCBzZXR0aW5ncywKKyAgICB0aGUgZmVhdHVyZSByZXF1aXJlcyBhcHByb3hpbWF0ZWx5 IDgwIEtCIG9mIHNoYXJlZCBtZW1vcnkgZm9yIHRhYmxlIHRyYWNraW5nOgorICAgIDxsaXRlcmFs PnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUgKiA0MCBieXRlczwvbGl0ZXJhbD4gKGRl ZmF1bHQ6IDIwNDggKiA0MCA9IH44MCBLQikuCisgICA8L3BhcmE+CisgIDwvd2FybmluZz4KKwor ICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUt bXV0YXRpb24tdHRsLWZhY3RvciIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl90dGxf ZmFjdG9yIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFj dG9yPC92YXJuYW1lPiAoPHR5cGU+ZmxvYXRpbmcgcG9pbnQ8L3R5cGU+KQorICAgICA8aW5kZXh0 ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2Zh Y3RvcjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwv aW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAg ICAgTXVsdGlwbGllciBmb3IgY2FsY3VsYXRpbmcgdGhlIFRUTDogPGxpdGVyYWw+VFRMID0gcmVw bGljYXRpb25fZGVsYXkgKiB0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yPC9saXRlcmFs Pi4KKyAgICAgIEhpZ2hlciB2YWx1ZXMgcHJvdmlkZSBtb3JlIHNhZmV0eSBtYXJnaW4gYnV0IG1h eSByZWR1Y2UgcmVhZCByZXBsaWNhIHV0aWxpemF0aW9uLgorICAgICA8L3BhcmE+CisgICAgIDxw YXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDEuMC0xMDAuMC4gRGVmYXVsdCBpcyA8bGl0ZXJhbD41 LjA8L2xpdGVyYWw+LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgcmVs b2FkaW5nIHRoZSA8cHJvZHVjdG5hbWU+UGdwb29sLUlJPC8+IGNvbmZpZ3VyYXRpb25zLgorICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFy bGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tbWF4LXN0YWxlbmVzcyIgeHJl ZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzIj4KKyAgICA8dGVybT48 dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzPC92YXJuYW1lPiAoPHR5 cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFy bmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzPC92YXJuYW1lPiBjb25maWd1 cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJt PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYXhpbXVtIGR1cmF0aW9uIGlu IG1pbGxpc2Vjb25kcyB0aGF0IGEgc2luZ2xlIHRhYmxlIGVudHJ5IGNhbiBjb250aW51b3VzbHkg Zm9yY2UgcXVlcmllcyB0byBwcmltYXJ5LAorICAgICAgbWVhc3VyZWQgZnJvbSB3aGVuIHRoZSB0 YWJsZSB3YXMgZmlyc3QgbWFya2VkIHN0YWxlLiBXaGVuIHRoaXMgY2FwIGlzIHJlYWNoZWQsIHRo ZSBlbnRyeSBpcyBleHBpcmVkCisgICAgICByZWdhcmRsZXNzIG9mIHJlY2VudCB3cml0ZXMuIElm IHRoZSB0YWJsZSBpcyB3cml0dGVuIHRvIGFnYWluIGFmdGVyIGV4cGlyeSwgYSBmcmVzaCB0cmFj a2luZyBlbnRyeQorICAgICAgaXMgY3JlYXRlZC4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4K KyAgICAgIFRoaXMgcGFyYW1ldGVyIGJvdW5kcyB0aGUgY3Jvc3Mtc2Vzc2lvbiBpbXBhY3Qgb2Yg dGFibGUgbXV0YXRpb24gdHJhY2tpbmcuIEV2ZW4gaWYgYSB0YWJsZSBpcyB3cml0dGVuCisgICAg ICB0byBpbiBhIHRpZ2h0IGxvb3AsIGl0cyBlZmZlY3Qgb24gb3RoZXIgc2Vzc2lvbnMnIGxvYWQg YmFsYW5jaW5nIGlzIGxpbWl0ZWQgdG8gdGhpcyBkdXJhdGlvbi4gRm9yCisgICAgICBsZWdpdGlt YXRlbHkgYnVzeSB0YWJsZXMsIHRoZSBnYXAgYmV0d2VlbiBmb3JjZWQgZXhwaXJ5IGFuZCB0aGUg bmV4dCB3cml0ZSByZS1tYXJraW5nIHRoZSB0YWJsZSBpcworICAgICAgbmVnbGlnaWJsZSAodHlw aWNhbGx5IG1pbGxpc2Vjb25kcykuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBT ZXQgdG8gMCB0byBkaXNhYmxlIHRoZSBjYXAgKG5vdCByZWNvbW1lbmRlZCBmb3IgcHJvZHVjdGlv bikuCisgICAgICBWYWxpZCByYW5nZTogMC0zNjAwMDAwIG1zLiBEZWZhdWx0IGlzIDxsaXRlcmFs PjYwMDAwPC9saXRlcmFsPiAoNjAgc2Vjb25kcykuCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4g YmUgY2hhbmdlZCBieSByZWxvYWRpbmcgdGhlIDxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gY29u ZmlndXJhdGlvbnMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi1j b2xkLXN0YXJ0LWR1cmF0aW9uIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRf c3RhcnRfZHVyYXRpb24iPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9u X2NvbGRfc3RhcnRfZHVyYXRpb248L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAg ICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0 aW9uX2NvbGRfc3RhcnRfZHVyYXRpb248L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVy PC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVt PgorICAgICA8cGFyYT4KKyAgICAgIER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0byByb3V0ZSBh bGwgcXVlcmllcyB0byBwcmltYXJ5IGFmdGVyIGEgY2hpbGQgcHJvY2VzcyBzdGFydHMuCisgICAg ICBUaGlzIHByZXZlbnRzIHN0YWxlIHJlYWRzIHdoZW4gYSBuZXcgY29ubmVjdGlvbiBpcyBlc3Rh Ymxpc2hlZCBiZWZvcmUgdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uCisgICAgICBpcyBwb3B1bGF0 ZWQgd2l0aCByZWNlbnQgd3JpdGUgaGlzdG9yeS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4K KyAgICAgIFdoZW4gd2F0Y2hkb2cgaXMgZW5hYmxlZCBhbmQgdGhlIGxvY2FsIG5vZGUgYmVjb21l cyB0aGUgbGVhZGVyLCBQZ3Bvb2wtSUkgYWxzbyB0cmlnZ2VycyBhCisgICAgICBnbG9iYWwgY29s ZCBzdGFydCBmb3IgdGhpcyBkdXJhdGlvbiB0byBhdm9pZCBzdGFsZSByZWFkcyBhZnRlciBsZWFk ZXJzaGlwIGNoYW5nZXMuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBWYWxpZCBy YW5nZTogMC02MDAwMCBtcy4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4yMDAwPC9saXRlcmFsPiAoMiBz ZWNvbmRzKS4KKyAgICAgIFNldCB0byAwIHRvIGRpc2FibGUgY29sZCBzdGFydCBiZWhhdmlvci4K KyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIGJ5IHJlbG9hZGluZyB0aGUgPHBy b2R1Y3RuYW1lPlBncG9vbC1JSTwvPiBjb25maWd1cmF0aW9ucy4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0i Z3VjLXRyYWNrLXRhYmxlLW11dGF0aW9uLXRhYmxlLWJ1Y2tldHMiIHhyZWZsYWJlbD0idHJhY2tf dGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cyI+CisgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tf dGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5 cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFi bGVfbXV0YXRpb25fdGFibGVfYnVja2V0czwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0 ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0 ZW0+CisgICAgIDxwYXJhPgorICAgICAgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdGhlIHRy YWNrIHRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUuCisgICAgICBIaWdoZXIgdmFsdWVzIHJlZHVj ZSBoYXNoIGNvbGxpc2lvbnMgYW5kIGltcHJvdmUgbG9va3VwIHBlcmZvcm1hbmNlLgorICAgICA8 L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDY0LTY1NTM2LiBEZWZhdWx0 IGlzIDxsaXRlcmFsPjEwMjQ8L2xpdGVyYWw+LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9u bHkgYmUgc2V0IGF0IHNlcnZlciBzdGFydC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXRyYWNrLXRh YmxlLW11dGF0aW9uLXRhYmxlLXNpemUiIHhyZWZsYWJlbD0idHJhY2tfdGFibGVfbXV0YXRpb25f dGFibGVfc2l6ZSI+CisgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFi bGVfc2l6ZTwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJt PgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6 ZTwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5k ZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAg TWF4aW11bSBudW1iZXIgb2YgdGFibGVzIHRoYXQgY2FuIGJlIHRyYWNrZWQgc2ltdWx0YW5lb3Vz bHkgaW4gdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uLgorICAgICAgV2hlbiBmdWxsLCBvbGRlc3Qg ZW50cmllcyBhcmUgZXZpY3RlZCB1c2luZyBhIHNpbXBsZSBldmljdGlvbiBzdHJhdGVneS4KKyAg ICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdlOiAxMjgtMTMxMDcyLiBE ZWZhdWx0IGlzIDxsaXRlcmFsPjIwNDg8L2xpdGVyYWw+LgorICAgICAgTWVtb3J5IHVzYWdlOiBh cHByb3hpbWF0ZWx5IDQwIGJ5dGVzIHBlciBlbnRyeS4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNh biBvbmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3Rp dGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyAgPHNlY3Qz IGlkPSJydW50aW1lLWNvbmZpZy10cmFjay10YWJsZS1tdXRhdGlvbi1leGFtcGxlIj4KKyAgIDx0 aXRsZT5UcmFjayBUYWJsZSBNdXRhdGlvbiBDb25maWd1cmF0aW9uIEV4YW1wbGU8L3RpdGxlPgor ICAgPHBhcmE+CisgICAgVG8gZW5hYmxlIHRyYWNrIHRhYmxlIG11dGF0aW9uIHdpdGggcmVwbGlj YXRpb24gZGVsYXkgbW9uaXRvcmluZzoKKyAgIDwvcGFyYT4KKyAgIDxwcm9ncmFtbGlzdGluZz4K KyMgRW5hYmxlIGRtbF9hZGFwdGl2ZV9nbG9iYWwgbW9kZSAoaW5jbHVkZXMgdHJhY2sgdGFibGUg bXV0YXRpb24pCitkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9ICdkbWxfYWRhcHRpdmVf Z2xvYmFsJwordHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciA9IDUuMAordHJhY2tfdGFi bGVfbXV0YXRpb25fbWF4X3N0YWxlbmVzcyA9IDYwMDAwCit0cmFja190YWJsZV9tdXRhdGlvbl9j b2xkX3N0YXJ0X2R1cmF0aW9uID0gMjAwMAorCisjIE9wdGlvbiBBOiBVc2UgZXh0ZXJuYWwgY29t bWFuZCBmb3IgcmVwbGljYXRpb24gZGVsYXkKK3JlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQg PSAnL3BhdGgvdG8vZ2V0LXJlcGxpY2F0aW9uLWRlbGF5LnNoJworcmVwbGljYXRpb25fZGVsYXlf c291cmNlX3RpbWVvdXQgPSAxMAorCisjIE9wdGlvbiBCOiBVc2UgcGdfc3RhdF9yZXBsaWNhdGlv biByZXBsYXlfbGFnIChQRyAxMCspCisjIGRlbGF5X3RocmVzaG9sZF9ieV90aW1lID0gMTAwMAor CisjIEFkanVzdCB0YWJsZSBtYXAgc2l6ZSBiYXNlZCBvbiB3b3JrbG9hZAordHJhY2tfdGFibGVf bXV0YXRpb25fdGFibGVfc2l6ZSA9IDQwOTYKKyAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICA8cGFy YT4KKyAgICBTaGFyZWQgbWVtb3J5IHJlcXVpcmVkIGZvciBhYm92ZSBjb25maWd1cmF0aW9uOiBh cHByb3hpbWF0ZWx5IDE2MCBLQiBmb3IgdGhlIHRhYmxlIG1hcC4KKyAgICBEZWZhdWx0IGNvbmZp Z3VyYXRpb24gKDIwNDggdGFibGVzKSByZXF1aXJlcyBhcHByb3hpbWF0ZWx5IDgwIEtCLgorICAg PC9wYXJhPgorICA8L3NlY3QzPgorCisgIDxzZWN0MyBpZD0icnVudGltZS1jb25maWctdHJhY2st dGFibGUtbXV0YXRpb24tbGltaXRhdGlvbnMiPgorICAgPHRpdGxlPkxpbWl0YXRpb25zPC90aXRs ZT4KKyAgIDxwYXJhPgorICAgIFRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlIGhhcyB0 aGUgZm9sbG93aW5nIGxpbWl0YXRpb25zOgorICAgPC9wYXJhPgorICAgPGl0ZW1pemVkbGlzdD4K KyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+UFJFUEFSRTwvbGl0 ZXJhbD4gc3RhdGVtZW50cyBhcmUgbm90IHRyYWNrZWQuIFdoZW4gYSBwcmVwYXJlZCBzdGF0ZW1l bnQKKyAgICAgIGNvbnRhaW5pbmcgZGF0YSBtb2RpZmljYXRpb24gaXMgZXhlY3V0ZWQsIHRoZSB0 YWJsZSBtdXRhdGlvbiBpcyBub3QgcmVjb3JkZWQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3Rp dGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBBIG1heGltdW0gb2YgMTI4 IHRhYmxlcyBjYW4gYmUgdHJhY2tlZCBwZXIgU0VMRUNUIHF1ZXJ5IGZvciBzdGFsZW5lc3MgY2hl Y2tpbmcuCisgICAgICBUaGlzIGxpbWl0IGlzIHNoYXJlZCB3aXRoIHRoZSBxdWVyeSBjYWNoZSBz dWJzeXN0ZW0KKyAgICAgICg8bGl0ZXJhbD5QT09MX01BWF9TRUxFQ1RfT0lEUzwvbGl0ZXJhbD4p LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICAg PHBhcmE+CisgICAgSWYgeW91ciBhcHBsaWNhdGlvbiB1c2VzIHByZXBhcmVkIHN0YXRlbWVudHMg YW5kIHJlcXVpcmVzIHJlYWQtYWZ0ZXItd3JpdGUgY29uc2lzdGVuY3ksCisgICAgY29uc2lkZXIg dXNpbmcgZXhwbGljaXQgdHJhbnNhY3Rpb24gcm91dGluZyBvciB0aGUgPGxpdGVyYWw+LypOTyBM T0FEIEJBTEFOQ0UqLzwvbGl0ZXJhbD4KKyAgICBjb21tZW50IGRpcmVjdGl2ZSBmb3IgYWZmZWN0 ZWQgcXVlcmllcy4KKyAgIDwvcGFyYT4KKyAgIDxwYXJhPgorICAgIFRoZSBmb2xsb3dpbmcgc3Rh dGVtZW50IHR5cGVzIDxlbXBoYXNpcz5hcmU8L2VtcGhhc2lzPiB0cmFja2VkIGFuZCB3aWxsIG1h cmsgdGFibGVzIGFzIHN0YWxlOgorICAgPC9wYXJhPgorICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8 bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+SU5TRVJUPC9saXRlcmFsPiwg PGxpdGVyYWw+VVBEQVRFPC9saXRlcmFsPiwgPGxpdGVyYWw+REVMRVRFPC9saXRlcmFsPgorICAg ICAgc3RhdGVtZW50cyAoaW5jbHVkaW5nIHRob3NlIHdpdGggPGxpdGVyYWw+UkVUVVJOSU5HPC9s aXRlcmFsPiBjbGF1c2VzKS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPlRSVU5DQVRFPC9saXRlcmFsPiBz dGF0ZW1lbnRzIChpbmNsdWRpbmcgbXVsdGlwbGUgdGFibGVzKS4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFs Pk1FUkdFPC9saXRlcmFsPiBzdGF0ZW1lbnRzIChQb3N0Z3JlU1FMIDE1KykuCisgICAgIDwvcGFy YT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8 bGl0ZXJhbD5XSVRIPC9saXRlcmFsPiBjbGF1c2VzIGNvbnRhaW5pbmcgZGF0YSBtb2RpZmljYXRp b25zIChDb21tb24gVGFibGUgRXhwcmVzc2lvbnMKKyAgICAgIHdpdGggPGxpdGVyYWw+SU5TRVJU PC9saXRlcmFsPiwgPGxpdGVyYWw+VVBEQVRFPC9saXRlcmFsPiwgb3IgPGxpdGVyYWw+REVMRVRF PC9saXRlcmFsPikuCisgICAgICBGb3IgZXhhbXBsZSwgPGxpdGVyYWw+V0lUSCBkZWxldGVkIEFT IChERUxFVEUgRlJPTSB0MSBSRVRVUk5JTkcgKikgU0VMRUNUICogRlJPTSBkZWxldGVkPC9saXRl cmFsPgorICAgICAgd2lsbCBwcm9wZXJseSBtYXJrIHRhYmxlIDxsaXRlcmFsPnQxPC9saXRlcmFs PiBhcyBzdGFsZS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVk bGlzdD4KKyAgIDxwYXJhPgorICAgIDxlbXBoYXNpcz5UcmFuc2FjdGlvbiBSb2xsYmFjayBCZWhh dmlvcjo8L2VtcGhhc2lzPiBXaXRoaW4gZXhwbGljaXQgdHJhbnNhY3Rpb25zLCB0YWJsZXMKKyAg ICBhcmUgb25seSBtYXJrZWQgYXMgc3RhbGUgaW4gc2hhcmVkIG1lbW9yeSB3aGVuIHRoZSB0cmFu c2FjdGlvbiBpcyBjb21taXR0ZWQuIElmIHRoZQorICAgIHRyYW5zYWN0aW9uIGlzIHJvbGxlZCBi YWNrLCBubyB0YWJsZXMgYXJlIG1hcmtlZCwgc2luY2Ugbm8gYWN0dWFsIGRhdGEgbW9kaWZpY2F0 aW9uCisgICAgb2NjdXJyZWQgb24gcmVwbGljYXMuIFRoaXMgcHJldmVudHMgcm9sbGVkLWJhY2sg dHJhbnNhY3Rpb25zIGZyb20gdW5uZWNlc3NhcmlseQorICAgIGRpc2FibGluZyBsb2FkIGJhbGFu Y2luZy4gRm9yIGF1dG9jb21taXQgc3RhdGVtZW50cyAob3V0c2lkZSBleHBsaWNpdCB0cmFuc2Fj dGlvbnMpLAorICAgIHRhYmxlcyBhcmUgbWFya2VkIGltbWVkaWF0ZWx5IHVwb24gY29tbWFuZCBj b21wbGV0aW9uLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICA8ZW1waGFzaXM+Q3Jvc3Mt U2Vzc2lvbiBJbXBhY3QgYW5kIFNhZmV0eSBCb3VuZHM6PC9lbXBoYXNpcz4KKyAgICBVbmxpa2Ug PGxpdGVyYWw+ZG1sX2FkYXB0aXZlPC9saXRlcmFsPiAod2hpY2ggb25seSBhZmZlY3RzIHRoZSBz ZXNzaW9uIHRoYXQgaXNzdWVkIHRoZSB3cml0ZSksCisgICAgPGxpdGVyYWw+ZG1sX2FkYXB0aXZl X2dsb2JhbDwvbGl0ZXJhbD4gYWZmZWN0cyBhbGwgc2Vzc2lvbnMgcmVhZGluZyB0aGUgc2FtZSB0 YWJsZSBpbiB0aGUgc2FtZSBkYXRhYmFzZS4KKyAgICBUaGUgZm9sbG93aW5nIHNhZmV0eSBtZWNo YW5pc21zIGJvdW5kIHRoaXMgY3Jvc3Mtc2Vzc2lvbiBpbXBhY3Q6CisgICA8L3BhcmE+CisgICA8 aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8ZW1waGFz aXM+TWF4aW11bSBzdGFsZW5lc3MgY2FwOjwvZW1waGFzaXM+IFRoZSA8eHJlZiBsaW5rZW5kPSJn dWMtdHJhY2stdGFibGUtbXV0YXRpb24tbWF4LXN0YWxlbmVzcyI+CisgICAgICBwYXJhbWV0ZXIg KGRlZmF1bHQ6IDYwIHNlY29uZHMpIGxpbWl0cyBob3cgbG9uZyBhbnkgc2luZ2xlIHRhYmxlIGVu dHJ5IGNhbiBjb250aW51b3VzbHkgZm9yY2UgcHJpbWFyeQorICAgICAgcm91dGluZy4gRXZlbiB1 bmRlciBzdXN0YWluZWQgd3JpdGVzLCB0aGUgZW50cnkgZXhwaXJlcyBhZnRlciB0aGlzIHBlcmlv ZCBhbmQgaXMgb25seSByZW5ld2VkIGJ5CisgICAgICBzdWJzZXF1ZW50IGNvbW1pdHRlZCB3cml0 ZXMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICA8ZW1waGFzaXM+RGF0YWJhc2UgaXNvbGF0aW9uOjwvZW1waGFzaXM+IFRh YmxlIHN0YWxlbmVzcyB0cmFja2luZyBpcyBzY29wZWQgYnkgZGF0YWJhc2UgT0lELiBXcml0ZXMK KyAgICAgIGluIG9uZSBkYXRhYmFzZSBuZXZlciBhZmZlY3QgbG9hZCBiYWxhbmNpbmcgZGVjaXNp b25zIGZvciBzZXNzaW9ucyBjb25uZWN0ZWQgdG8gYSBkaWZmZXJlbnQgZGF0YWJhc2UuCisgICAg ICBJbiBtdWx0aS10ZW5hbnQgZGVwbG95bWVudHMgd2hlcmUgdGVuYW50cyB1c2Ugc2VwYXJhdGUg ZGF0YWJhc2VzLCBvbmUgdGVuYW50J3Mgd3JpdGUgYWN0aXZpdHkgY2Fubm90CisgICAgICBpbmZs dWVuY2UgYW5vdGhlciB0ZW5hbnQncyBxdWVyeSByb3V0aW5nLgorICAgICA8L3BhcmE+CisgICAg PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGVtcGhhc2lz PkNvbW1pdHRlZCB3cml0ZXMgb25seTo8L2VtcGhhc2lzPiBPbmx5IGNvbW1pdHRlZCB0cmFuc2Fj dGlvbnMgbWFyayB0YWJsZXMgYXMgc3RhbGUuCisgICAgICBSb2xsZWQtYmFjayB0cmFuc2FjdGlv bnMgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHNoYXJlZCB0cmFja2luZyBzdGF0ZS4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAg IDxlbXBoYXNpcz5Cb3VuZGVkIHRhYmxlIG1hcCBzaXplOjwvZW1waGFzaXM+IFRoZSBzaGFyZWQg bWVtb3J5IHRhYmxlIG1hcCBoYXMgYSBmaXhlZCBtYXhpbXVtIHNpemUKKyAgICAgICg8eHJlZiBs aW5rZW5kPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tdGFibGUtc2l6ZSI+KS4gQXQgbW9zdCB0 aGlzIG1hbnkgdGFibGVzIGNhbiBiZSBtYXJrZWQgc3RhbGUKKyAgICAgIHNpbXVsdGFuZW91c2x5 LCBwcm92aWRpbmcgYSBuYXR1cmFsIGNlaWxpbmcgb24gdGhlIGZlYXR1cmUncyBpbXBhY3QuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CisgIDwvc2Vj dDM+CisKKyA8L3NlY3QyPgorCiA8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFt IGIvc3JjL01ha2VmaWxlLmFtCmluZGV4IDQ2NzhhYjUzMC4uMzk1ODhhZjU4IDEwMDY0NAotLS0g YS9zcmMvTWFrZWZpbGUuYW0KKysrIGIvc3JjL01ha2VmaWxlLmFtCkBAIC0zNSw2ICszNSw3IEBA IHBncG9vbF9TT1VSQ0VTID0gbWFpbi9tYWluLmMgXAogCXJld3JpdGUvcG9vbF90aW1lc3RhbXAu YyBcCiAJcmV3cml0ZS9wb29sX2xvYmouYyBcCiAJdXRpbHMvcG9vbF9zZWxlY3Rfd2Fsa2VyLmMg XAorCXV0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYyBcCiAJdXRpbHMvc3RybGNweS5j IFwKIAl1dGlscy9wc3ByaW50Zi5jIFwKIAl1dGlscy9wb29sX3BhcmFtcy5jIFwKZGlmZiAtLWdp dCBhL3NyYy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMgYi9zcmMvY29uZmlnL3Bvb2xf Y29uZmlnX3ZhcmlhYmxlcy5jCmluZGV4IGY0YzczYjJhYS4uNTg3ZTAxY2IyIDEwMDY0NAotLS0g YS9zcmMvY29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jCisrKyBiL3NyYy9jb25maWcvcG9v bF9jb25maWdfdmFyaWFibGVzLmMKQEAgLTI5MCw2ICsyOTAsNyBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IGNvbmZpZ19lbnVtX2VudHJ5IGRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlX29wdGlv bnNbXSA9CiAJeyJ0cmFuc190cmFuc2FjdGlvbiIsIERMQk9XX1RSQU5TX1RSQU5TQUNUSU9OLCBm YWxzZX0sCiAJeyJhbHdheXMiLCBETEJPV19BTFdBWVMsIGZhbHNlfSwKIAl7ImRtbF9hZGFwdGl2 ZSIsIERMQk9XX0RNTF9BREFQVElWRSwgZmFsc2V9LAorCXsiZG1sX2FkYXB0aXZlX2dsb2JhbCIs IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwsIGZhbHNlfSwKIAl7TlVMTCwgMCwgZmFsc2V9CiB9 OwogCkBAIC0xNzc3LDYgKzE3NzgsMTkgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50X2FycmF5 IENvbmZpZ3VyZU5hbWVzSW50QXJyYXlbXSA9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2RvdWJs ZSBDb25maWd1cmVOYW1lc0RvdWJsZVtdID0KIHsKKwl7CisJCXsidHJhY2tfdGFibGVfbXV0YXRp b25fdHRsX2ZhY3RvciIsCisJCQlDRkdDWFRfUkVMT0FELCBMT0FEX0JBTEFOQ0VfQ09ORklHLAor CQkJIlRUTCBtdWx0aXBsaWVyIGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbiAiCisJCQkiKFRUTCA9 IHJlcGxpY2F0aW9uX2RlbGF5ICogZmFjdG9yKSIsCisJCQlDT05GSUdfVkFSX1RZUEVfRE9VQkxF LCBmYWxzZSwgMAorCQl9LAorCQkmZ19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl90 dGxfZmFjdG9yLAorCQk1LjAsCQkJCQkvKiBib290IHZhbHVlOiA1eCByZXBsaWNhdGlvbiBkZWxh eSAqLworCQkxLjAsIDEwMC4wLAkJCQkvKiBtaW4sIG1heCAqLworCQlOVUxMLCBOVUxMLCBOVUxM CisJfSwKKwogCS8qIEVuZC1vZi1saXN0IG1hcmtlciAqLwogCUVNUFRZX0NPTkZJR19ET1VCTEUK IH07CkBAIC0yMzk3LDYgKzI0MTEsNTcgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50IENvbmZp Z3VyZU5hbWVzSW50W10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJ0cmFj a190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzIiwKKwkJCUNGR0NYVF9SRUxPQUQsIExPQURf QkFMQU5DRV9DT05GSUcsCisJCQkiTWF4aW11bSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdGhh dCBhICIKKwkJCSJ0YWJsZSBjYW4gYmUgbWFya2VkIHN0YWxlIGZyb20gaXRzIGZpcnN0ICIKKwkJ CSJ3cml0ZS4gMCBkaXNhYmxlcyB0aGUgY2FwLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBm YWxzZSwgR1VDX1VOSVRfTVMKKwkJfSwKKwkJJmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0 YXRpb25fbWF4X3N0YWxlbmVzcywKKwkJNjAwMDAsCQkJCQkvKiA2MCBzZWNvbmRzICovCisJCTAs IDM2MDAwMDAsCQkJCS8qIDAgdG8gMSBob3VyICovCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAor CisJeworCQl7InRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24iLAorCQkJ Q0ZHQ1hUX1JFTE9BRCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJCSJEdXJhdGlvbiBpbiBtaWxs aXNlY29uZHMgdG8gZm9yY2UgcXVlcmllcyAiCisJCQkidG8gcHJpbWFyeSBhZnRlciBjaGlsZCBw cm9jZXNzIHN0YXJ0cy4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIEdVQ19VTklU X01TCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3Rh cnRfZHVyYXRpb24sCisJCTIwMDAsCQkJCQkvKiAyIHNlY29uZHMgKi8KKwkJMCwgNjAwMDAsCQkJ CS8qIDAgdG8gNjAgc2Vjb25kcyAqLworCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsKKwkJ eyJ0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzIiwKKwkJCUNGR0NYVF9JTklULCBM T0FEX0JBTEFOQ0VfQ09ORklHLAorCQkJIk51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRyYWNr IHRhYmxlIG11dGF0aW9uLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9 LAorCQkmZ19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzLAor CQkxMDI0LAorCQk2NCwgNjU1MzYsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7 InRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUiLAorCQkJQ0ZHQ1hUX0lOSVQsIExPQURf QkFMQU5DRV9DT05GSUcsCisJCQkiTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiB0cmFjayB0 YWJsZSBtdXRhdGlvbi4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIDAKKwkJfSwK KwkJJmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSwKKwkJMjA0 OCwKKwkJMTI4LCAxMzEwNzIsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJLyogRW5kLW9m LWxpc3QgbWFya2VyICovCiAJRU1QVFlfQ09ORklHX0lOVAogfTsKZGlmZiAtLWdpdCBhL3NyYy9j b250ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5jIGIvc3JjL2NvbnRleHQvcG9vbF9xdWVyeV9jb250 ZXh0LmMKaW5kZXggZmJhZGQyMDg4Li5iYzAyNTZjMGIgMTAwNjQ0Ci0tLSBhL3NyYy9jb250ZXh0 L3Bvb2xfcXVlcnlfY29udGV4dC5jCisrKyBiL3NyYy9jb250ZXh0L3Bvb2xfcXVlcnlfY29udGV4 dC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAidXRpbHMvc3RhdGlzdGljcy5oIgogI2lu Y2x1ZGUgInV0aWxzL3Bvb2xfc2VsZWN0X3dhbGtlci5oIgogI2luY2x1ZGUgInV0aWxzL3Bvb2xf c3RyZWFtLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oIgog I2luY2x1ZGUgImNvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuaCIKICNpbmNsdWRlICJjb250 ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5oIgogI2luY2x1ZGUgInBhcnNlci9ub2Rlcy5oIgpAQCAt MTgyOCwyMCArMTgyOSwyNiBAQCBpc19pbl9saXN0KGNoYXIgKm5hbWUsIExpc3QgKmxpc3QpCiBz dGF0aWMgYm9vbAogaXNfc2VsZWN0X29iamVjdF9pbl90ZW1wX3dyaXRlX2xpc3QoTm9kZSAqbm9k ZSwgdm9pZCAqY29udGV4dCkKIHsKLQlpZiAobm9kZSA9PSBOVUxMIHx8IHBvb2xfY29uZmlnLT5k aXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkUpCisJaWYg KG5vZGUgPT0gTlVMTCB8fAorCQkhRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmlnLT5k aXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmIChJ c0Eobm9kZSwgUmFuZ2VWYXIpKQogCXsKIAkJUmFuZ2VWYXIgICAqcmd2ID0gKFJhbmdlVmFyICop IG5vZGU7Ci0JCVBPT0xfU0VTU0lPTl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQgPSBwb29sX2dl dF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpOworCQlQT09MX1NFU1NJT05fQ09OVEVYVCAqc2Vzc2lv bl9jb250ZXh0OwogCi0JCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25f d3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmIHNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJh bnNhY3Rpb24pCisJCXNlc3Npb25fY29udGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChm YWxzZSk7CisKKwkJaWYgKHNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24pCiAJCXsK IAkJCWVyZXBvcnQoREVCVUcxLAotCQkJCQkoZXJybXNnKCJpc19zZWxlY3Rfb2JqZWN0X2luX3Rl bXBfd3JpdGVfbGlzdDogXCIlc1wiLCBmb3VuZCByZWxhdGlvbiBcIiVzXCIiLCAoY2hhciAqKSBj b250ZXh0LCByZ3YtPnJlbG5hbWUpKSk7CisJCQkJCShlcnJtc2coImlzX3NlbGVjdF9vYmplY3Rf aW5fdGVtcF93cml0ZV9saXN0OiIKKwkJCQkJCQkiIFwiJXNcIiwgZm91bmQgcmVsYXRpb24gXCIl c1wiIiwKKwkJCQkJCQkoY2hhciAqKSBjb250ZXh0LCByZ3YtPnJlbG5hbWUpKSk7CiAKLQkJCXJl dHVybiBpc19pbl9saXN0KHJndi0+cmVsbmFtZSwgc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlv bl90ZW1wX3dyaXRlX2xpc3QpOworCQkJcmV0dXJuIGlzX2luX2xpc3Qocmd2LT5yZWxuYW1lLAor CQkJCQkJCSAgc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QpOwog CQl9CiAJfQogCkBAIC0xODgwLDE1ICsxODg3LDIyIEBAIHN0YXRpYyBjaGFyICpnZXRfYXNzb2Np YXRlZF9vYmplY3RfZnJvbV9kbWxfYWRhcHRpdmVfcmVsYXRpb25zCiB2b2lkCiBjaGVja19vYmpl Y3RfcmVsYXRpb25zaGlwX2xpc3QoY2hhciAqbmFtZSwgYm9vbCBpc19mdW5jX25hbWUpCiB7Ci0J aWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19E TUxfQURBUFRJVkUgJiYgcG9vbF9jb25maWctPnBhcnNlZF9kbWxfYWRhcHRpdmVfb2JqZWN0X3Jl bGF0aW9uc2hpcF9saXN0KQorCWJvb2wJCWlzX2FkYXB0aXZlOworCisJaXNfYWRhcHRpdmUgPQor CQkocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCSBETEJP V19ETUxfQURBUFRJVkUpOworCisJaWYgKGlzX2FkYXB0aXZlICYmCisJCXBvb2xfY29uZmlnLT5w YXJzZWRfZG1sX2FkYXB0aXZlX29iamVjdF9yZWxhdGlvbnNoaXBfbGlzdCkKIAl7CiAJCVBPT0xf U0VTU0lPTl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQgPSBwb29sX2dldF9zZXNzaW9uX2NvbnRl eHQoZmFsc2UpOwogCiAJCWlmIChzZXNzaW9uX2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uKQog CQl7CiAJCQljaGFyCSAgICpyaWdodF90b2tlbiA9Ci0JCQkJZ2V0X2Fzc29jaWF0ZWRfb2JqZWN0 X2Zyb21fZG1sX2FkYXB0aXZlX3JlbGF0aW9ucwotCQkJCShuYW1lLCBpc19mdW5jX25hbWUgPyBP QkpFQ1RfVFlQRV9GVU5DVElPTiA6IE9CSkVDVF9UWVBFX1JFTEFUSU9OKTsKKwkJCWdldF9hc3Nv Y2lhdGVkX29iamVjdF9mcm9tX2RtbF9hZGFwdGl2ZV9yZWxhdGlvbnMKKwkJCShuYW1lLCBpc19m dW5jX25hbWUgPyBPQkpFQ1RfVFlQRV9GVU5DVElPTiA6IE9CSkVDVF9UWVBFX1JFTEFUSU9OKTsK IAogCQkJaWYgKHJpZ2h0X3Rva2VuKQogCQkJewpAQCAtMTk0Nyw3ICsxOTYxLDcgQEAgYWRkX29i amVjdF9pbnRvX3RlbXBfd3JpdGVfbGlzdChOb2RlICpub2RlLCB2b2lkICpjb250ZXh0KQogc3Rh dGljIHZvaWQKIGRtbF9hZGFwdGl2ZShOb2RlICpub2RlLCBjaGFyICpxdWVyeSkKIHsKLQlpZiAo cG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9B REFQVElWRSkKKwlpZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmlnLT5kaXNhYmxl X2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJewogCQkvKiBTZXQvVW5zZXQgdHJhbnNhY3Rpb24g c3RhdHVzIGZsYWdzICovCiAJCWlmIChJc0Eobm9kZSwgVHJhbnNhY3Rpb25TdG10KSkKQEAgLTE5 NjYsNiArMTk4MCw0NSBAQCBkbWxfYWRhcHRpdmUoTm9kZSAqbm9kZSwgY2hhciAqcXVlcnkpCiAJ CQl9CiAJCQllbHNlIGlmIChpc19jb21taXRfb3Jfcm9sbGJhY2tfcXVlcnkobm9kZSkpCiAJCQl7 CisJCQkJLyoKKwkJCQkgKiBGb3IgZG1sX2FkYXB0aXZlX2dsb2JhbDogb24gQ09NTUlULCBmbHVz aCB0aGUgYWNjdW11bGF0ZWQKKwkJCQkgKiB0YWJsZSB3cml0ZXMgdG8gc2hhcmVkIG1lbW9yeS4g IE9uIFJPTExCQUNLLCBza2lwIC0tIHRoZQorCQkJCSAqIHdyaXRlcyBuZXZlciBjb21taXR0ZWQg c28gbm8gc3RhbGUtcmVhZCByaXNrIGV4aXN0cy4gIFRoaXMKKwkJCQkgKiBwcmV2ZW50cyBwb2xs dXRpbmcgdGhlIHRhYmxlIG1hcCB3aXRoIHJvbGxlZC1iYWNrCisJCQkJICogdHJhbnNhY3Rpb25z LgorCQkJCSAqLworCQkJCWludAkJCWRsYm93ID0KKwkJCQlwb29sX2NvbmZpZy0+ZGlzYWJsZV9s b2FkX2JhbGFuY2Vfb25fd3JpdGU7CisJCQkJTGlzdAkgICAqd2xpc3QgPQorCQkJCXNlc3Npb25f Y29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0OworCisJCQkJaWYgKGRsYm93ID09 IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgJiYKKwkJCQkJaXNfY29tbWl0X3F1ZXJ5KG5vZGUp ICYmCisJCQkJCXdsaXN0ICE9IE5JTCkKKwkJCQl7CisJCQkJCUxpc3RDZWxsICAgKmNlbGw7CisJ CQkJCWludAkJCWRib2lkOworCisJCQkJCWRib2lkID0KKwkJCQkJCXBvb2xfdHJhY2tfdGFibGVf bXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZCgpOworCQkJCQlpZiAoZGJvaWQgPiAwKQorCQkJCQl7 CisJCQkJCQlmb3JlYWNoKGNlbGwsIHdsaXN0KQorCQkJCQkJeworCQkJCQkJCWNoYXIJICAgKnRu YW1lOworCQkJCQkJCWludAkJCXRvaWQ7CisKKwkJCQkJCQl0bmFtZSA9IChjaGFyICopIGxmaXJz dChjZWxsKTsKKwkJCQkJCQl0b2lkID0KKwkJCQkJCQkJcG9vbF90YWJsZV9uYW1lX3RvX29pZCh0 bmFtZSk7CisKKwkJCQkJCQlpZiAodG9pZCA+IDApCisJCQkJCQkJCXBvb2xfdHJhY2tfdGFibGVf bXV0YXRpb25fbWFya190YWJsZV93cml0dGVuKAorCQkJCQkJCQkJCQkJCQkJCQkJCSB0b2lkLCBk Ym9pZCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisKIAkJCQlzZXNzaW9uX2NvbnRleHQtPmlz X2luX3RyYW5zYWN0aW9uID0gZmFsc2U7CiAKIAkJCQlpZiAoc2Vzc2lvbl9jb250ZXh0LT50cmFu c2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QgIT0gTklMKQpAQCAtMjAwOCw3ICsyMDYxLDcgQEAgd2hl cmVfdG9fc2VuZF9tYWluX3JlcGxpY2EoUE9PTF9RVUVSWV9DT05URVhUICpxdWVyeV9jb250ZXh0 LCBjaGFyICpxdWVyeSwgTm9kZQogCXNlc3Npb25fY29udGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25f Y29udGV4dChmYWxzZSk7CiAJYmFja2VuZCA9IHNlc3Npb25fY29udGV4dC0+YmFja2VuZDsKIAot CS8qIAorCS8qCiAJICogQ29sbGVjdC9kaXNjYXJkIGluZm9ybWF0aW9uIGZvciBkaXNhYmxlX2xv YWRfYmFsYW5jZV9vbl93cml0ZSA9CiAJICogZG1sX2FkYXB0aXZlIGNhc2UuCiAJICovCkBAIC0y MDIyLDYgKzIwNzUsMjAgQEAgd2hlcmVfdG9fc2VuZF9tYWluX3JlcGxpY2EoUE9PTF9RVUVSWV9D T05URVhUICpxdWVyeV9jb250ZXh0LCBjaGFyICpxdWVyeSwgTm9kZQogCWlmIChkZXN0ID09IFBP T0xfUFJJTUFSWSkKIAl7CiAJCXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0 LCBQUklNQVJZX05PREVfSUQpOworCisJCS8qCisJCSAqIFJlc29sdmUgdGFibGUgYW5kIGRhdGFi YXNlIE9JRHMgbm93IHRvIHBvcHVsYXRlIHJlbGNhY2hlLiBUaGlzCisJCSAqIGF2b2lkcyBwb3Rl bnRpYWwgaGFuZ3MgaW4gQ29tbWFuZENvbXBsZXRlIHdoZXJlIHdlIHNob3VsZG4ndCBiZQorCQkg KiBydW5uaW5nIG5ldyBxdWVyaWVzIGFnYWluc3QgdGhlIGJhY2tlbmQuCisJCSAqLworCQlpZiAo cG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCQlETEJPV19E TUxfQURBUFRJVkVfR0xPQkFMKQorCQl7CisJCQlpbnQJCSAgICpvaWRzOworCisJCQlwb29sX2V4 dHJhY3RfdGFibGVfb2lkcyhub2RlLCAmb2lkcyk7CisJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0 aW9uX2dldF9kYXRhYmFzZV9vaWQoKTsKKwkJfQogCX0KIAkvKiBTaG91bGQgYmUgc2VudCB0byBi b3RoIHByaW1hcnkgYW5kIHN0YW5kYnk/ICovCiAJZWxzZSBpZiAoZGVzdCA9PSBQT09MX0JPVEgp CkBAIC0yMTQ5LDYgKzIyMTYsMTUzIEBAIHdoZXJlX3RvX3NlbmRfbWFpbl9yZXBsaWNhKFBPT0xf UVVFUllfQ09OVEVYVCAqcXVlcnlfY29udGV4dCwgY2hhciAqcXVlcnksIE5vZGUKIAkJCQl7CiAJ CQkJCXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0LCBQUklNQVJZX05PREVf SUQpOwogCQkJCX0KKworCQkJCS8qCisJCQkJICogQ2hlY2sgdHJhY2sgdGFibGUgbXV0YXRpb24g Zm9yIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzLiAgSWYKKwkJCQkgKiBpbiBjb2xkIHN0YXJ0IG9y IGFueSB0YWJsZSB3YXMgcmVjZW50bHkgd3JpdHRlbiwgcm91dGUgdG8KKwkJCQkgKiBwcmltYXJ5 IHRvIGF2b2lkIHN0YWxlIHJlYWRzLgorCQkJCSAqLworCQkJCWVsc2UgaWYgKHBvb2xfY29uZmln LT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PQorCQkJCQkJIERMQk9XX0RNTF9BREFQ VElWRV9HTE9CQUwpCisJCQkJeworCQkJCQlib29sCQlmb3JjZV9wcmltYXJ5ID0gZmFsc2U7CisJ CQkJCWludAkJCWxiX25vZGU7CisJCQkJCVBPT0xfUVVFUllfQ09OVEVYVCAqcWN0eCA9CisJCQkJ CXNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dDsKKworCQkJCQlpZiAocG9vbF90cmFja190 YWJsZV9tdXRhdGlvbl9pbl9jb2xkX3N0YXJ0KCkpCisJCQkJCXsKKwkJCQkJCWVyZXBvcnQoREVC VUcxLAorCQkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIgorCQkJCQkJCQkJ CSIgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSIKKwkJCQkJCQkJCQkiIG11dGF0aW9uIGNvbGQgc3Rh cnQiKSwKKwkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24gPSBQUklNQVJZIgorCQkJCQkJ CQkJCSAgICIgZm9yIHF1ZXJ5PSBcIiVzXCIiLAorCQkJCQkJCQkJCSAgIHF1ZXJ5KSkpOworCQkJ CQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJ CQlTZWxlY3RDb250ZXh0IGN0eDsKKwkJCQkJCWludAkJCWRib2lkOworCQkJCQkJaW50CQkJbnVt X29pZHM7CisJCQkJCQlpbnQJCQlpOworCisJCQkJCQltZW1zZXQoJmN0eCwgMCwgc2l6ZW9mKGN0 eCkpOworCQkJCQkJbnVtX29pZHMgPQorCQkJCQkJCXBvb2xfZXh0cmFjdF90YWJsZV9vaWRzX2Zy b21fc2VsZWN0X3N0bXQoCisJCQkJCQkJCQkJCQkJCQkJCSBub2RlLCAmY3R4KTsKKwkJCQkJCWlm IChudW1fb2lkcyA+IDApCisJCQkJCQl7CisJCQkJCQkJZGJvaWQgPQorCQkJCQkJCQlwb29sX3Ry YWNrX3RhYmxlX211dGF0aW9uX2dldF9kYXRhYmFzZV9vaWQoKTsKKworCQkJCQkJCWlmIChkYm9p ZCA8PSAwKQorCQkJCQkJCXsKKwkJCQkJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCQkJKGVy cm1zZygiY291bGQgbm90IGxvYWQiCisJCQkJCQkJCQkJCQkiIGJhbGFuY2UgYmVjYXVzZSIKKwkJ CQkJCQkJCQkJCSIgZGF0YWJhc2Ugb2lkIHdhcyIKKwkJCQkJCQkJCQkJCSIgdW5hdmFpbGFibGUi KSwKKwkJCQkJCQkJCQkgZXJyZGV0YWlsKCJkZXN0aW5hdGlvbiIKKwkJCQkJCQkJCQkJCSAgICIg PSBQUklNQVJZIGZvciIKKwkJCQkJCQkJCQkJCSAgICIgcXVlcnk9IFwiJXNcIiIsCisJCQkJCQkJ CQkJCQkgICBxdWVyeSkpKTsKKwkJCQkJCQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQkJCQkJ fQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCWZvciAoaSA9IDA7IGkgPCBudW1fb2lk czsgaSsrKQorCQkJCQkJCQl7CisJCQkJCQkJCQlib29sCQlzdGFsZTsKKworCQkJCQkJCQkJc3Rh bGUgPQorCQkJCQkJCQkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfaXNfc3RhbGUo CisJCQkJCQkJCQkJCQkJCQkJCQkJCSBjdHgudGFibGVfb2lkc1tpXSwKKwkJCQkJCQkJCQkJCQkJ CQkJCQkJIGRib2lkKTsKKwkJCQkJCQkJCWlmIChzdGFsZSkKKwkJCQkJCQkJCXsKKwkJCQkJCQkJ CQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBsb2FkIgor CQkJCQkJCQkJCQkJCQkiIGJhbGFuY2UgYmVjYXVzZSIKKwkJCQkJCQkJCQkJCQkJIiB0YWJsZSBc IiVzXCIgd2FzIgorCQkJCQkJCQkJCQkJCQkiIHJlY2VudGx5IHdyaXR0ZW4iLAorCQkJCQkJCQkJ CQkJCQljdHgudGFibGVfbmFtZXNbaV0pLAorCQkJCQkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGlu YXRpb24iCisJCQkJCQkJCQkJCQkJCSAgICIgPSBQUklNQVJZIGZvciIKKwkJCQkJCQkJCQkJCQkJ ICAgIiBxdWVyeT0gXCIlc1wiIiwKKwkJCQkJCQkJCQkJCQkJICAgcXVlcnkpKSk7CisJCQkJCQkJ CQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCQl9CisJ CQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlpZiAoZm9yY2VfcHJp bWFyeSkKKwkJCQkJeworCQkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KAorCQkJCQkJCQkJ CQkJIHF1ZXJ5X2NvbnRleHQsCisJCQkJCQkJCQkJCQkgUFJJTUFSWV9OT0RFX0lEKTsKKwkJCQkJ fQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWlmIChwb29sX2NvbmZpZy0+c3RhdGVtZW50X2xl dmVsX2xvYWRfYmFsYW5jZSkKKwkJCQkJCXsKKwkJCQkJCQlzZXNzaW9uX2NvbnRleHQtPmxvYWRf YmFsYW5jZV9ub2RlX2lkID0KKwkJCQkJCQkJc2VsZWN0X2xvYWRfYmFsYW5jaW5nX25vZGUoKTsK KwkJCQkJCX0KKworCQkJCQkJLyoKKwkJCQkJCSAqIElmIHJlcGxpY2F0aW9uIGRlbGF5IGlzIHRv byBtdWNoLCBhbmQKKwkJCQkJCSAqIHByZWZlcl9sb3dlcl9kZWxheV9zdGFuZGJ5IGlzIHRydWUg dGhlbiBlbGVjdCB0aGUKKwkJCQkJCSAqIGxvd2VzdC1kZWxheWVkIG5vZGUsIG90aGVyd2lzZSBz ZW5kIHRvIHByaW1hcnkuCisJCQkJCQkgKi8KKwkJCQkJCWxiX25vZGUgPQorCQkJCQkJCXNlc3Np b25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQ7CisJCQkJCQlpZiAoU1RSRUFNICYmCisJ CQkJCQkJY2hlY2tfcmVwbGljYXRpb25fZGVsYXkobGJfbm9kZSkpCisJCQkJCQl7CisJCQkJCQkJ ZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCIKKwkJCQkJ CQkJCQkJIiBiYWxhbmNlIGJlY2F1c2Ugb2YiCisJCQkJCQkJCQkJCSIgdG9vIG11Y2ggcmVwbGlj YXRpb24iCisJCQkJCQkJCQkJCSIgZGVsYXkiKSwKKwkJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3Rp bmF0aW9uIgorCQkJCQkJCQkJCQkgICAiID0gJWQgZm9yIgorCQkJCQkJCQkJCQkgICAiIHF1ZXJ5 PSBcIiVzXCIiLAorCQkJCQkJCQkJCQkgICBkZXN0LCBxdWVyeSkpKTsKKworCQkJCQkJCWlmIChw b29sX2NvbmZpZy0+cHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkpCisJCQkJCQkJeworCQkJCQkJ CQlsYl9ub2RlID0KKwkJCQkJCQkJCXNlbGVjdF9sb2FkX2JhbGFuY2luZ19ub2RlKCk7CisJCQkJ CQkJCXNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgPQorCQkJCQkJCQkJbGJf bm9kZTsKKwkJCQkJCQkJcWN0eC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgPQorCQkJCQkJCQkJbGJf bm9kZTsKKwkJCQkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KAorCQkJCQkJCQkJCQkJCQkg cXVlcnlfY29udGV4dCwKKwkJCQkJCQkJCQkJCQkJIGxiX25vZGUpOworCQkJCQkJCX0KKwkJCQkJ CQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQoCisJCQkJ CQkJCQkJCQkJCSBxdWVyeV9jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkgUFJJTUFSWV9OT0RFX0lE KTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcWN0eC0+ bG9hZF9iYWxhbmNlX25vZGVfaWQgPQorCQkJCQkJCQlzZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFs YW5jZV9ub2RlX2lkOworCQkJCQkJCXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudCgKKwkJCQkJCQkJ CQkJCQkgcXVlcnlfY29udGV4dCwKKwkJCQkJCQkJCQkJCQkgcWN0eC0+bG9hZF9iYWxhbmNlX25v ZGVfaWQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCWlm IChwb29sX2NvbmZpZy0+c3RhdGVtZW50X2xldmVsX2xvYWRfYmFsYW5jZSkKQEAgLTIxNjksNyAr MjM4Myw4IEBAIHdoZXJlX3RvX3NlbmRfbWFpbl9yZXBsaWNhKFBPT0xfUVVFUllfQ09OVEVYVCAq cXVlcnlfY29udGV4dCwgY2hhciAqcXVlcnksIE5vZGUKIAkJCQkJCQkJIGVycmRldGFpbCgiZGVz dGluYXRpb24gPSAlZCBmb3IgcXVlcnk9IFwiJXNcIiIsIGRlc3QsIHF1ZXJ5KSkpOwogCiAJCQkJ CQkvKgotCQkJCQkJICogSWYgcHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkgaXMgb24sIGNob29z ZSBsb3dlciBkZWxheSBzdGFuZGJ5LgorCQkJCQkJICogSWYgcHJlZmVyX2xvd2VyX2RlbGF5X3N0 YW5kYnkgaXMgb24sIGNob29zZSBsb3dlcgorCQkJCQkJICogZGVsYXkgc3RhbmRieS4KIAkJCQkJ CSAqLwogCQkJCQkJaWYgKHBvb2xfY29uZmlnLT5wcmVmZXJfbG93ZXJfZGVsYXlfc3RhbmRieSkK IAkJCQkJCXsKQEAgLTIxNzksNyArMjM5NCw4IEBAIHdoZXJlX3RvX3NlbmRfbWFpbl9yZXBsaWNh KFBPT0xfUVVFUllfQ09OVEVYVCAqcXVlcnlfY29udGV4dCwgY2hhciAqcXVlcnksIE5vZGUKIAkJ CQkJCQlzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5X2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lk ID0gc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZDsKIAkJCQkJCQlwb29sX3Nl dF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwgc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9j b250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCk7CiAJCQkJCQl9Ci0JCQkJCQllbHNlCS8qIGRl bGF5IGlzIHRvbyBtdWNoLiBwcmVmZXIgdG8gc2VuZCB0byBwcmltYXJ5ICovCisJCQkJCQllbHNl CS8qIGRlbGF5IGlzIHRvbyBtdWNoLiBwcmVmZXIgdG8gc2VuZCB0bworCQkJCQkJCQkgKiBwcmlt YXJ5ICovCiAJCQkJCQl7CiAJCQkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2Nv bnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CiAJCQkJCQl9CkBAIC0yMTg5LDcgKzI0MDUsNyBAQCB3 aGVyZV90b19zZW5kX21haW5fcmVwbGljYShQT09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRl eHQsIGNoYXIgKnF1ZXJ5LCBOb2RlCiAJCQkJCSAqIE5vdCBzdHJlYW1pbmcgcmVwbGljYXRpb24g bW9kZSwgb3IgZGVsYXlfdGhyZXNob2xkIGlzIDAKIAkJCQkJICogb3IgcmVwbGljYXRpb24gZGVs YXkgaXMgc21hbGwgZW5vdWdoLgogCQkJCQkgKi8KLQkJCQkJZWxzZQkKKwkJCQkJZWxzZQogCQkJ CQl7CiAJCQkJCQlzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5X2NvbnRleHQtPmxvYWRfYmFsYW5jZV9u b2RlX2lkID0gc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZDsKIAkJCQkJCXBv b2xfc2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0LApkaWZmIC0tZ2l0IGEvc3JjL2Nv bnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYyBiL3NyYy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9j b250ZXh0LmMKaW5kZXggYTg3Y2NlMTY0Li40YzQxMWZmNTEgMTAwNjQ0Ci0tLSBhL3NyYy9jb250 ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMKKysrIGIvc3JjL2NvbnRleHQvcG9vbF9zZXNzaW9u X2NvbnRleHQuYwpAQCAtNTMzLDcgKzUzMyw3IEBAIGR1bXBfc2VudF9tZXNzYWdlKGNoYXIgKmNh bGxlciwgUE9PTF9TRU5UX01FU1NBR0UgKm0pCiBzdGF0aWMgdm9pZAogZG1sX2FkYXB0aXZlX2lu aXQodm9pZCkKIHsKLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dy aXRlID09IERMQk9XX0RNTF9BREFQVElWRSkKKwlpZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBv b2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJewogCQlzZXNzaW9u X2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uID0gZmFsc2U7CiAJCXNlc3Npb25fY29udGV4dC0+ dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ID0gTklMOwpAQCAtNTQzLDcgKzU0Myw5IEBAIGRt bF9hZGFwdGl2ZV9pbml0KHZvaWQpCiBzdGF0aWMgdm9pZAogZG1sX2FkYXB0aXZlX2Rlc3Ryb3ko dm9pZCkKIHsKLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRl ID09IERMQk9XX0RNTF9BREFQVElWRSAmJiBzZXNzaW9uX2NvbnRleHQpCisJaWYgKERMQk9XX0lT X0RNTF9BREFQVElWRSgKKwkJCQkJCQkgIHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5j ZV9vbl93cml0ZSkgJiYKKwkJc2Vzc2lvbl9jb250ZXh0KQogCXsKIAkJaWYgKHNlc3Npb25fY29u dGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ICE9IE5JTCkKIAkJCWxpc3RfZnJlZV9k ZWVwKHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0KTsKQEAgLTc0 NSwxMCArNzQ3LDEzIEBAIHZvaWQKIHBvb2xfc2V0X3dyaXRpbmdfdHJhbnNhY3Rpb24odm9pZCkK IHsKIAkvKgotCSAqIElmIGRpc2FibGVfdHJhbnNhY3Rpb25fb25fd3JpdGUgaXMgJ29mZicgb3Ig J2RtbF9hZGFwdGl2ZScsIHRoZW4gbmV2ZXIKLQkgKiB0dXJuIG9uIHdyaXRpbmcgdHJhbnNhY3Rp b24gZmxhZy4KKwkgKiBJZiBkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSBpcyAnb2ZmJyBv ciAnZG1sX2FkYXB0aXZlJyBvcgorCSAqICdkbWxfYWRhcHRpdmVfZ2xvYmFsJywgdGhlbiBuZXZl ciB0dXJuIG9uIHdyaXRpbmcgdHJhbnNhY3Rpb24gZmxhZy4KIAkgKi8KLQlpZiAocG9vbF9jb25m aWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9XX09GRiAmJiBwb29sX2Nv bmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gRExCT1dfRE1MX0FEQVBUSVZF KQorCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0KKwkJ RExCT1dfT0ZGICYmCisJCSFETEJPV19JU19ETUxfQURBUFRJVkUoCisJCQkJCQkJICAgcG9vbF9j b25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSkKIAl7CiAJCXBvb2xfZ2V0X3Nl c3Npb25fY29udGV4dChmYWxzZSktPndyaXRpbmdfdHJhbnNhY3Rpb24gPSB0cnVlOwogCQllcmVw b3J0KERFQlVHNSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvb2wuaCBiL3NyYy9pbmNsdWRl L3Bvb2wuaAppbmRleCBmZWE1NzQ0ZjMuLjU0OWFlZDMwZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcG9vbC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvb2wuaApAQCAtNDI0LDcgKzQyNCw3IEBAIHR5 cGVkZWYgZW51bQogI2RlZmluZSBNaW4oeCwgeSkJCSgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCiAK IAotI2RlZmluZSBNQVhfTlVNX1NFTUFQSE9SRVMJCTgKKyNkZWZpbmUgTUFYX05VTV9TRU1BUEhP UkVTCQk5CiAjZGVmaW5lIENPTk5fQ09VTlRFUl9TRU0JCTAKICNkZWZpbmUgUkVRVUVTVF9JTkZP X1NFTQkJMQogI2RlZmluZSBRVUVSWV9DQUNIRV9TVEFUU19TRU0JMgpAQCAtNDM0LDYgKzQzNCw3 IEBAIHR5cGVkZWYgZW51bQogI2RlZmluZSBGT0xMT1dfUFJJTUFSWV9TRU0JCTYKICNkZWZpbmUg TUFJTl9FWElUX0hBTkRMRVJfU0VNCTcJLyogdXNlZCBpbiBleGl0X2hhbmRlciBpbiBwZ3Bvb2wg bWFpbgogCQkJCQkJCQkJICogcHJvY2VzcyAqLworI2RlZmluZSBUUkFDS19UQUJMRV9NVVRBVElP Tl9UQUJMRV9TRU0JOAogI2RlZmluZSBNQVhfUkVRVUVTVF9RVUVVRV9TSVpFCTEwCiAKICNkZWZp bmUgTUFYX1NFQ19XQUlUX0ZPUl9DTFVTVEVSX1RSQU5TQUNUSU9OIDEwIC8qIHRpbWUgaW4gc2Vj b25kcyB0byBrZWVwCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oIGIvc3Jj L2luY2x1ZGUvcG9vbF9jb25maWcuaAppbmRleCA5YTM5N2QxNjYuLmI4YWJhZGQ1MCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaAorKysgYi9zcmMvaW5jbHVkZS9wb29sX2Nv bmZpZy5oCkBAIC0xMDUsOSArMTA1LDEzIEBAIHR5cGVkZWYgZW51bSBETEJPV19PUFRJT04KIAlE TEJPV19UUkFOU0FDVElPTiwKIAlETEJPV19UUkFOU19UUkFOU0FDVElPTiwKIAlETEJPV19BTFdB WVMsCi0JRExCT1dfRE1MX0FEQVBUSVZFCisJRExCT1dfRE1MX0FEQVBUSVZFLAorCURMQk9XX0RN TF9BREFQVElWRV9HTE9CQUwKIH0gRExCT1dfT1BUSU9OOwogCisjZGVmaW5lIERMQk9XX0lTX0RN TF9BREFQVElWRShvcHQpIFwKKwkoKG9wdCkgPT0gRExCT1dfRE1MX0FEQVBUSVZFIHx8IChvcHQp ID09IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisKIHR5cGVkZWYgZW51bSBSRUxRVEFSR0VU X09QVElPTgogewogCVJFTFFUQVJHRVRfUFJJTUFSWSA9IDEsCkBAIC0zNjMsOCArMzY3LDIyIEBA IHR5cGVkZWYgc3RydWN0CiAJY2hhcgkgICAqc3JfY2hlY2tfcGFzc3dvcmQ7CS8qIHBhc3N3b3Jk IGZvciBzcl9jaGVja191c2VyICovCiAJY2hhcgkgICAqc3JfY2hlY2tfZGF0YWJhc2U7CS8qIFBv c3RncmVTUUwgZGF0YWJhc2UgbmFtZSBmb3Igc3RyZWFtaW5nCiAJCQkJCQkJCQkgKiByZXBsaWNh dGlvbiBjaGVjayAqLwotCWNoYXIJICAgKnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQ7CS8q IGV4dGVybmFsIGNvbW1hbmQgZm9yIHJlcGxpY2F0aW9uIGRlbGF5ICovCi0JaW50CQkJcmVwbGlj YXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQ7CS8qIHRpbWVvdXQgZm9yIGV4dGVybmFsIGNvbW1h bmQgaW4gc2Vjb25kcyAqLworCWNoYXIJICAgKnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQ7 CS8qIGV4dGVybmFsIGNvbW1hbmQgZm9yCisJCQkJCQkJCQkJCQkgKiByZXBsaWNhdGlvbiBkZWxh eSAqLworCWludAkJCXJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0OwkvKiB0aW1lb3V0 IGZvciBleHRlcm5hbAorCQkJCQkJCQkJCQkJCSAqIGNvbW1hbmQgaW4gc2Vjb25kcyAqLworCisJ LyogVHJhY2sgdGFibGUgbXV0YXRpb24gY29uZmlndXJhdGlvbiAqLworCWRvdWJsZQkJdHJhY2tf dGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjsJLyogVFRMIG11bHRpcGxpZXIgZm9yCisJCQkJCQkJ CQkJCQkJICogcmVwbGljYXRpb24gZGVsYXkgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlv bl9tYXhfc3RhbGVuZXNzOyAvKiBtYXggc3RhbGVuZXNzIGR1cmF0aW9uCisJCQkJCQkJCQkJCQkJ ICogbXMgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9u OwkvKiBjb2xkIHN0YXJ0IGR1cmF0aW9uCisJCQkJCQkJCQkJCQkJCQkgKiBtcyAqLworCWludAkJ CXRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM7IC8qIGhhc2ggYnVja2V0cyBmb3Ig dGFibGUKKwkJCQkJCQkJCQkJCQkgKiBtYXAgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlv bl90YWJsZV9zaXplOwkvKiBtYXggdGFibGUgbWFwIGVudHJpZXMgKi8KKwogCWNoYXIJICAgKmZh aWxvdmVyX2NvbW1hbmQ7CS8qIGV4ZWN1dGUgY29tbWFuZCB3aGVuIGZhaWxvdmVyIGhhcHBlbnMg Ki8KIAljaGFyCSAgICpmb2xsb3dfcHJpbWFyeV9jb21tYW5kOyAvKiBleGVjdXRlIGNvbW1hbmQg d2hlbiBmYWlsb3ZlciBpcwogCQkJCQkJCQkJCSAqIGVuZGVkICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmggYi9zcmMvaW5jbHVkZS91 dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwLi5kZmJhYzY2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS91 dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qIC0q LXBnc3FsLWMtKi0gKi8KKy8qCisgKiBwZ3Bvb2w6IGEgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgY29u bmVjdGlvbiBwb29sIHNlcnZlciBmb3IgUG9zdGdyZVNRTAorICogd3JpdHRlbiBieSBUYXRzdW8g SXNoaWkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAyNglQZ1Bvb2wgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5k IGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBh bnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CisgKiBncmFudGVkLCBwcm92aWRl ZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKKyAqIGNvcGll cyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u CisgKiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQg dGhlIG5hbWUgb2YgdGhlCisgKiBhdXRob3Igbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Ig cHVibGljaXR5IHBlcnRhaW5pbmcgdG8KKyAqIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUg d2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorICogcGVybWlzc2lvbi4gVGhlIGF1dGhv ciBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0eSBvZiB0 aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcworICogaXMi IHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIHBvb2xfdHJhY2tf dGFibGVfbXV0YXRpb24uaDogSW4tbWVtb3J5IHRyYWNraW5nIG9mCisgKiAgIHJlY2VudGx5IHdy aXR0ZW4gdGFibGVzIHRvIHByZXZlbnQgc3RhbGUgcmVhZHMuCisgKi8KKworI2lmbmRlZiBQT09M X1RSQUNLX1RBQkxFX01VVEFUSU9OX0gKKyNkZWZpbmUgUE9PTF9UUkFDS19UQUJMRV9NVVRBVElP Tl9ICisKKyNpbmNsdWRlICJwb29sLmgiCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworLyoKKyAq IEludmFsaWQgaW5kZXggbWFya2VyIGZvciBsaW5rZWQgbGlzdHMKKyAqLworI2RlZmluZSBUUkFD S19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYCSgtMSkKKworLyoKKyAqIERlZmF1bHQgVFRM IGluIG1pY3Jvc2Vjb25kcyAoMTAwbXMpIHVzZWQgd2hlbiByZXBsaWNhdGlvbiBkZWxheSBpcyB1 bmtub3duCisgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVMJ KDEwMCAqIDEwMDApCisKKy8qCisgKiBFbnRyeSBpbiB0aGUgdGFibGUgbXV0YXRpb24gaGFzaCB0 YWJsZSAoa2V5ZWQgYnkgdGFibGUvZGF0YWJhc2Ugb2lkcykKKyAqLwordHlwZWRlZiBzdHJ1Y3Qg VHJhY2tUYWJsZU11dGF0aW9uRW50cnkKK3sKKwlpbnQJCQl0YWJsZV9vaWQ7CQkvKiBUYWJsZSBv aWQgKi8KKwlpbnQJCQlkYm9pZDsJCQkvKiBEYXRhYmFzZSBvaWQgKi8KKwlzdHJ1Y3QgdGltZXZh bCBmaXJzdF93cml0ZV90aW1lOwkvKiBXaGVuIHRoZSBlbnRyeSB3YXMgZmlyc3QgY3JlYXRlZCAq LworCXN0cnVjdCB0aW1ldmFsIGxhc3Rfd3JpdGVfdGltZTsgLyogV2hlbiB0aGUgdGFibGUgd2Fz IGxhc3Qgd3JpdHRlbiAqLworCXVpbnQzMgkJaGFzaDsJCQkvKiBQcmUtY29tcHV0ZWQgaGFzaCB2 YWx1ZSAqLworCWludAkJCW5leHQ7CQkJLyogTmV4dCBpbiBjb2xsaXNpb24gY2hhaW4gKi8KKwli b29sCQlpbl91c2U7CQkJLyogSXMgdGhpcyBlbnRyeSBpbiB1c2U/ICovCit9IFRyYWNrVGFibGVN dXRhdGlvbkVudHJ5OworCisvKgorICogSGVhZGVyIGZvciB0aGUgdGFibGUgbXV0YXRpb24gaGFz aCB0YWJsZSBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK3R5cGVkZWYgc3RydWN0IFRyYWNrVGFibGVN dXRhdGlvbkhhc2hUYWJsZQoreworCWludAkJCW51bV9idWNrZXRzOwkvKiBOdW1iZXIgb2YgaGFz aCBidWNrZXRzICovCisJaW50CQkJbWF4X2VudHJpZXM7CS8qIE1heGltdW0gZW50cmllcyBhbGxv d2VkICovCisJaW50CQkJbnVtX2VudHJpZXM7CS8qIEN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMg Ki8KKwlpbnQJCQlmcmVlX2xpc3RfaGVhZDsgLyogSGVhZCBvZiBmcmVlIGVudHJ5IGxpc3QgKi8K KworCS8qCisJICogRmxleGlibGUgYXJyYXkgbWVtYmVycyBmb2xsb3cgaW4gc2hhcmVkIG1lbW9y eTogaW50CisJICogYnVja2V0c1tudW1fYnVja2V0c107IFRyYWNrVGFibGVNdXRhdGlvbkVudHJ5 IGVudHJpZXNbbWF4X2VudHJpZXNdOworCSAqLworfSBUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFi bGU7CisKKy8qCisgKiBHbG9iYWwgc3RhdGUgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1 cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUKK3sKKwlib29s CQlpbml0aWFsaXplZDsJLyogU2htZW0gaW5pdGlhbGl6ZWQ/ICovCisJdWludDY0CQljdXJyZW50 X3R0bF91czsgLyogQ3VycmVudCBUVEwgaW4gbWljcm9zZWNvbmRzICovCisJc3RydWN0IHRpbWV2 YWwgdHRsX2xhc3RfdXBkYXRlZDsJLyogV2hlbiBUVEwgd2FzIGxhc3QgdXBkYXRlZCAqLworCXN0 cnVjdCB0aW1ldmFsIGxhc3RfY2xlYW51cF90aW1lOwkvKiBXaGVuIGxhc3QgZXhwaXJlZCBjbGVh bnVwIHJhbiAqLworCXN0cnVjdCB0aW1ldmFsIGdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsOyAvKiBH bG9iYWwgY29sZCBzdGFydCBlbmQgdGltZSAqLworCXVpbnQzMgkJc3RhdHNfcXVlcmllc19jaGVj a2VkOwkvKiBRdWVyaWVzIGNoZWNrZWQgKi8KKwl1aW50MzIJCXN0YXRzX2ZvcmNlZF9wcmltYXJ5 OwkvKiBGb3JjZWQgdG8gcHJpbWFyeSAqLworCXVpbnQzMgkJc3RhdHNfYWxsb3dlZF9yZXBsaWNh OwkvKiBBbGxvd2VkIHRvIHJlcGxpY2EgKi8KK30gVHJhY2tUYWJsZU11dGF0aW9uU3RhdGU7CisK Ky8qCisgKiBNYWluIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIGNvbnRhaW5pbmcgYWxsIGNvbXBv bmVudHMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHJhY2tUYWJsZU11dGF0aW9uU2htZW0KK3sKKwlU cmFja1RhYmxlTXV0YXRpb25TdGF0ZSBzdGF0ZTsKKwlUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFi bGUgKnRhYmxlX21hcDsKK30gVHJhY2tUYWJsZU11dGF0aW9uU2htZW07CisKKy8qIC0tLS0tLS0t LS0tLS0tLS0KKyAqIFB1YmxpYyBBUEkgZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGZvciB0cmFj ayB0YWJsZSBtdXRhdGlvbi4KKyAqIENhbGxlZCBmcm9tIHBncG9vbF9tYWluLmMgYWZ0ZXIgcG9v bF9pbml0X3Bvb2xfaW5mbygpLgorICovCitleHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211 dGF0aW9uX2luaXQodm9pZCk7CisKKy8qCisgKiBJbml0aWFsaXplIHBlci1jaGlsZCBwcm9jZXNz IHN0YXRlIGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbi4KKyAqIENhbGxlZCBmcm9tIGNoaWxkLmMg d2hlbiBhIG5ldyBjaGlsZCBwcm9jZXNzIHN0YXJ0cy4KKyAqIFNldHMgdXAgY29sZCBzdGFydCB0 cmFja2luZy4KKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9jaGls ZF9pbml0KHZvaWQpOworCisvKgorICogQ2hlY2sgaWYgdGhlIGNoaWxkIHByb2Nlc3MgaXMgaW4g Y29sZCBzdGFydCBwZXJpb2QuCisgKiBEdXJpbmcgY29sZCBzdGFydCwgYWxsIHF1ZXJpZXMgYXJl IHJvdXRlZCB0byBwcmltYXJ5LgorICogUmV0dXJucyB0cnVlIGlmIGluIGNvbGQgc3RhcnQsIGZh bHNlIG90aGVyd2lzZS4KKyAqLworZXh0ZXJuIGJvb2wgcG9vbF90cmFja190YWJsZV9tdXRhdGlv bl9pbl9jb2xkX3N0YXJ0KHZvaWQpOworCisvKgorICogVHJpZ2dlciBhIGdsb2JhbCBjb2xkIHN0 YXJ0IHBlcmlvZCBmb3IgYWxsIHByb2Nlc3Nlcy4KKyAqIFVzZWQgYWZ0ZXIgd2F0Y2hkb2cgbGVh ZGVyIGNoYW5nZSB0byBhdm9pZCBzdGFsZSByZWFkcy4KKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90 cmFja190YWJsZV9tdXRhdGlvbl90cmlnZ2VyX2dsb2JhbF9jb2xkX3N0YXJ0KHZvaWQpOworCisv KgorICogR2V0IG9pZCBvZiBjdXJyZW50IGRhdGFiYXNlLgorICovCitleHRlcm4gaW50CXBvb2xf dHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZCh2b2lkKTsKKworLyoKKyAqIENo ZWNrIGlmIGEgdGFibGUgd2FzIHJlY2VudGx5IHdyaXR0ZW4gdG8gKGlzICJzdGFsZSIpLgorICog SWYgc3RhbGUsIHJlYWRzIGZyb20gdGhpcyB0YWJsZSBzaG91bGQgZ28gdG8gcHJpbWFyeS4KKyAq IFJldHVybnMgdHJ1ZSBpZiB0YWJsZSBpcyBzdGFsZSAocmVjZW50bHkgd3JpdHRlbiksIGZhbHNl IG90aGVyd2lzZS4KKyAqLworZXh0ZXJuIGJvb2wgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl90 YWJsZV9pc19zdGFsZSgKKwkJCQkJCQkJCQkJCQkgaW50IHRhYmxlX29pZCwgaW50IGRib2lkKTsK KworLyoKKyAqIE1hcmsgdGFibGVzIGFzIHJlY2VudGx5IHdyaXR0ZW4uCisgKiBDYWxsZWQgYWZ0 ZXIgSU5TRVJUL1VQREFURS9ERUxFVEUgcXVlcmllcyBjb21wbGV0ZS4KKyAqIHRhYmxlX29pZHM6 IGFycmF5IG9mIHRhYmxlIG9pZHMKKyAqIG51bV90YWJsZXM6IG51bWJlciBvZiB0YWJsZXMgaW4g YXJyYXkKKyAqIGRib2lkOiBkYXRhYmFzZSBvaWQKKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlc193cml0dGVuKAorCQkJCQkJCQkJCQkJCQkgIGNv bnN0IGludCAqdGFibGVfb2lkcywgaW50IG51bV90YWJsZXMsIGludCBkYm9pZCk7CisKKy8qCisg KiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBtYXJrIGEgc2luZ2xlIHRhYmxlIGFzIHdyaXR0ZW4u CisgKiB0YWJsZV9vaWQ6IHRhYmxlIG9pZAorICogZGJvaWQ6IGRhdGFiYXNlIG9pZAorICovCitl eHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVfd3JpdHRlbigK KwkJCQkJCQkJCQkJCQkJIGludCB0YWJsZV9vaWQsIGludCBkYm9pZCk7CisKKy8qCisgKiBVcGRh dGUgdGhlIFRUTCBiYXNlZCBvbiBjdXJyZW50IHJlcGxpY2F0aW9uIGRlbGF5LgorICogQ2FsbGVk IGZyb20gcG9vbF93b3JrZXJfY2hpbGQuYyB3aGVuIHJlcGxpY2F0aW9uIGRlbGF5IGlzIHVwZGF0 ZWQuCisgKiBkZWxheV91czogcmVwbGljYXRpb24gZGVsYXkgaW4gbWljcm9zZWNvbmRzCisgKi8K K2V4dGVybiB2b2lkIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdXBkYXRlX3R0bCh1aW50NjQg ZGVsYXlfdXMpOworCisvKgorICogQ2FsY3VsYXRlIHJlcXVpcmVkIHNoYXJlZCBtZW1vcnkgc2l6 ZSBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24uCisgKi8KK2V4dGVybiBTaXplIHBvb2xfdHJhY2tf dGFibGVfbXV0YXRpb25fc2htZW1fc2l6ZSh2b2lkKTsKKworI2VuZGlmCQkJCQkJCS8qIFBPT0xf VFJBQ0tfVEFCTEVfTVVUQVRJT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vcGdwb29sX21h aW4uYyBiL3NyYy9tYWluL3BncG9vbF9tYWluLmMKaW5kZXggZGJmMWJmZDE0Li5mMTZlMGY1NzYg MTAwNjQ0Ci0tLSBhL3NyYy9tYWluL3BncG9vbF9tYWluLmMKKysrIGIvc3JjL21haW4vcGdwb29s X21haW4uYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgImF1dGgvcG9vbF9wYXNzd2QuaCIK ICNpbmNsdWRlICJhdXRoL3Bvb2xfaGJhLmgiCiAjaW5jbHVkZSAicXVlcnlfY2FjaGUvcG9vbF9t ZW1xY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgi CiAjaW5jbHVkZSAid2F0Y2hkb2cvd2RfaW50ZXJuYWxfY29tbWFuZHMuaCIKICNpbmNsdWRlICJ3 YXRjaGRvZy93ZF9saWZlY2hlY2suaCIKICNpbmNsdWRlICJ3YXRjaGRvZy93YXRjaGRvZy5oIgpA QCAtMTUwMSwxMSArMTUwMiwxNCBAQCBzaWd1c3IxX2ludGVycnVwdF9wcm9jZXNzb3Iodm9pZCkK IAogCWlmICh1c2VyMVNpZ25hbFNsb3QtPnNpZ25hbEZsYWdzW1NJR19XQVRDSERPR19TVEFURV9D SEFOR0VEXSkKIAl7CisJCVdEX1NUQVRFUwl3ZF9zdGF0ZTsKKwogCQllcmVwb3J0KExPRywKIAkJ CQkoZXJybXNnKCJQZ3Bvb2wtSUkgcGFyZW50IHByb2Nlc3MgcmVjZWl2ZWQgd2F0Y2hkb2cgc3Rh dGUgY2hhbmdlIHNpZ25hbCBmcm9tIHdhdGNoZG9nIikpKTsKIAogCQl1c2VyMVNpZ25hbFNsb3Qt PnNpZ25hbEZsYWdzW1NJR19XQVRDSERPR19TVEFURV9DSEFOR0VEXSA9IGZhbHNlOwotCQlpZiAo d2RfaW50ZXJuYWxfZ2V0X3dhdGNoZG9nX2xvY2FsX25vZGVfc3RhdGUoKSA9PSBXRF9TVEFOREJZ KQorCQl3ZF9zdGF0ZSA9IHdkX2ludGVybmFsX2dldF93YXRjaGRvZ19sb2NhbF9ub2RlX3N0YXRl KCk7CisJCWlmICh3ZF9zdGF0ZSA9PSBXRF9TVEFOREJZKQogCQl7CiAJCQllcmVwb3J0KExPRywK IAkJCQkJKGVycm1zZygid2UgaGF2ZSBqb2luZWQgdGhlIHdhdGNoZG9nIGNsdXN0ZXIgYXMgU1RB TkRCWSBub2RlIiksCkBAIC0xNTE5LDYgKzE1MjMsMTIgQEAgc2lndXNyMV9pbnRlcnJ1cHRfcHJv Y2Vzc29yKHZvaWQpCiAJCQkgKi8KIAkJCXBvb2xfcmVsZWFzZV9mb2xsb3dfcHJpbWFyeV9sb2Nr KHRydWUpOwogCQl9CisJCWVsc2UgaWYgKHdkX3N0YXRlID09IFdEX0NPT1JESU5BVE9SICYmCisJ CQkJIHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PQorCQkJCSBE TEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCQl7CisJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0 aW9uX3RyaWdnZXJfZ2xvYmFsX2NvbGRfc3RhcnQoKTsKKwkJfQogCX0KIAlpZiAodXNlcjFTaWdu YWxTbG90LT5zaWduYWxGbGFnc1tTSUdfRkFJTE9WRVJfSU5URVJSVVBUXSkKIAl7CkBAIC0zMDg0 LDYgKzMwOTQsMTYgQEAgaW5pdGlhbGl6ZV9zaGFyZWRfbWVtX29iamVjdHMoYm9vbCBjbGVhcl9t ZW1jYWNoZV9vaWRtYXBzKQogCQllbG9nKERFQlVHMSwgIndhdGNoZG9nOiAlenUgYnl0ZXMgcmVx dWVzdGVkIGZvciBzaGFyZWQgbWVtb3J5IiwgTUFYQUxJR04od2RfaXBjX2dldF9zaGFyZWRfbWVt X3NpemUoKSkpOwogCX0KIAorCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vf b25fd3JpdGUgPT0KKwkJRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwl7CisJCXNpemUgKz0g TUFYQUxJR04ocG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbV9zaXplKCkpOworCQllbG9n KERFQlVHMSwKKwkJCSAidHJhY2tfdGFibGVfbXV0YXRpb246ICV6dSBieXRlcyByZXF1ZXN0ZWQi CisJCQkgIiBmb3Igc2hhcmVkIG1lbW9yeSIsCisJCQkgTUFYQUxJR04ocG9vbF90cmFja190YWJs ZV9tdXRhdGlvbl9zaG1lbV9zaXplKCkpKTsKKwl9CisKIAlpbml0aWFsaXplX3NoYXJlZF9tZW1v cnlfbWFpbl9zZWdtZW50KHNpemUpOwogCiAJLyogTW92ZSB0aGUgYmFja2VuZCBkZXNjcmlwdG9y cyB0byBzaGFyZWQgbWVtb3J5ICovCkBAIC0zMjAyLDYgKzMyMjIsMTMgQEAgaW5pdGlhbGl6ZV9z aGFyZWRfbWVtX29iamVjdHMoYm9vbCBjbGVhcl9tZW1jYWNoZV9vaWRtYXBzKQogCiAJLyogaW5p dGlhbGl6ZSBwY3Agd29ya2VyIGNoaWxkIHBpZHMgKi8KIAltZW1zZXQoUmVxX2luZm8tPnBjcF93 b3JrZXJfcGlkcywgMCwgc2l6ZW9mKFJlcV9pbmZvLT5wY3Bfd29ya2VyX3BpZHMpKTsKKworCS8q IEluaXRpYWxpemUgdHJhY2sgdGFibGUgbXV0YXRpb24gZm9yIHJlY2VudGx5IHdyaXR0ZW4gdGFi bGVzICovCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9 PQorCQlETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCXsKKwkJcG9vbF90cmFja190YWJsZV9t dXRhdGlvbl9pbml0KCk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvY29sL0Nv bW1hbmRDb21wbGV0ZS5jIGIvc3JjL3Byb3RvY29sL0NvbW1hbmRDb21wbGV0ZS5jCmluZGV4IDFm NjNhMGU4ZC4uMWFmM2E4MThiIDEwMDY0NAotLS0gYS9zcmMvcHJvdG9jb2wvQ29tbWFuZENvbXBs ZXRlLmMKKysrIGIvc3JjL3Byb3RvY29sL0NvbW1hbmRDb21wbGV0ZS5jCkBAIC0zOCw2ICszOCw4 IEBACiAjaW5jbHVkZSAidXRpbHMvcGFsbG9jLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMu aCIKICNpbmNsdWRlICJ1dGlscy9wb29sX3N0cmVhbS5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xf dHJhY2tfdGFibGVfbXV0YXRpb24uaCIKKyNpbmNsdWRlICJxdWVyeV9jYWNoZS9wb29sX21lbXFj YWNoZS5oIgogCiBzdGF0aWMgaW50CWV4dHJhY3RfbnR1cGxlcyhjaGFyICptZXNzYWdlKTsKIHN0 YXRpYyBQT09MX1NUQVRVUyBoYW5kbGVfbWlzbWF0Y2hfdHVwbGVzKFBPT0xfQ09OTkVDVElPTiAq ZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICpiYWNrZW5kLCBjaGFyICpwYWNrZXQsIGlu dCBwYWNrZXRsZW4sIGJvb2wgY29tbWFuZF9jb21wbGV0ZSk7CkBAIC0zMDQsNiArMzA2LDQwIEBA IGhhbmRsZV9xdWVyeV9jb250ZXh0KFBPT0xfQ09OTkVDVElPTl9QT09MICpiYWNrZW5kKQogCiAJ bm9kZSA9IHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dC0+cGFyc2VfdHJlZTsKIAorCS8q CisJICogVHJhY2sgdGFibGUgd3JpdGVzIGZvciBkbWxfYWRhcHRpdmVfZ2xvYmFsIGZlYXR1cmUu ICBPbmx5IG1lYW5pbmdmdWwgaW4KKwkgKiBzdHJlYW1pbmcgcmVwbGljYXRpb24gbW9kZSAoTUFJ Tl9SRVBMSUNBKSwgd2hlcmUgZG1sX2FkYXB0aXZlKCkgdHJhY2tzCisJICogdGhlIGluLXRyYW5z YWN0aW9uIHN0YXRlLiAgRm9yIG90aGVyIGNsdXN0ZXIgbW9kZXMgdGhlIGluX3RyYW5zYWN0aW9u CisJICogZmxhZyBpcyBuZXZlciBzZXQsIHNvIHRyaWdnZXJpbmcgdGhpcyBoZXJlIHdoaWxlIGFj dHVhbGx5IGluc2lkZSBhCisJICogYmFja2VuZCB0cmFuc2FjdGlvbiB3b3VsZCBjYXVzZSBhIHJl bGNhY2hlIGRvX3F1ZXJ5IHRoYXQgY29uZmxpY3RzIHdpdGgKKwkgKiB0aGUgaW4tZmxpZ2h0IHRy YW5zYWN0aW9uIGFuZCBoYW5ncyB0aGUgc2Vzc2lvbi4KKwkgKgorCSAqIEZvciBhdXRvY29tbWl0 IHN0YXRlbWVudHMgKG5vdCBpbiBleHBsaWNpdCB0cmFuc2FjdGlvbiksIG1hcmsgdGFibGVzCisJ ICogaW1tZWRpYXRlbHkuICBGb3IgZXhwbGljaXQgdHJhbnNhY3Rpb25zLCBtYXJraW5nIGlzIGRl ZmVycmVkIHRvIENPTU1JVAorCSAqIGluIGRtbF9hZGFwdGl2ZSgpIHNvIHRoYXQgUk9MTEJBQ0tl ZCB3cml0ZXMgZG9uJ3QgcG9sbHV0ZSB0aGUgc2hhcmVkCisJICogbWVtb3J5IHRhYmxlIG1hcC4K KwkgKi8KKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09 CisJCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgJiYKKwkJTUFJTl9SRVBMSUNBICYmCisJCW5v ZGUgIT0gTlVMTCAmJgorCQkhc2Vzc2lvbl9jb250ZXh0LT5pc19pbl90cmFuc2FjdGlvbikKKwl7 CisJCWludAkJICAgKm9pZHM7CisJCWludAkJCW51bV9vaWRzOworCisJCW51bV9vaWRzID0gcG9v bF9leHRyYWN0X3RhYmxlX29pZHMobm9kZSwgJm9pZHMpOworCQlpZiAobnVtX29pZHMgPiAwKQor CQl7CisJCQlpbnQJCQlkYm9pZDsKKworCQkJZGJvaWQgPSBwb29sX3RyYWNrX3RhYmxlX211dGF0 aW9uX2dldF9kYXRhYmFzZV9vaWQoKTsKKwkJCWlmIChkYm9pZCA+IDApCisJCQkJcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlc193cml0dGVuKAorCQkJCQkJCQkJCQkJCQkJICBv aWRzLCBudW1fb2lkcywgZGJvaWQpOworCQl9CisJfQorCiAJaWYgKElzQShub2RlLCBQcmVwYXJl U3RtdCkpCiAJewogCQlpZiAoc2Vzc2lvbl9jb250ZXh0LT51bmNvbXBsZXRlZF9tZXNzYWdlKQpk aWZmIC0tZ2l0IGEvc3JjL3Byb3RvY29sL2NoaWxkLmMgYi9zcmMvcHJvdG9jb2wvY2hpbGQuYwpp bmRleCA3NjE4NzZmNTMuLjRhNTI3Yzg0YyAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvY29sL2NoaWxk LmMKKysrIGIvc3JjL3Byb3RvY29sL2NoaWxkLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRl ICJ1dGlscy9lbG9nLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCiAjaW5jbHVkZSAi dXRpbHMvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRh dGlvbi5oIgogCiAjaW5jbHVkZSAiY29udGV4dC9wb29sX3Byb2Nlc3NfY29udGV4dC5oIgogI2lu Y2x1ZGUgImNvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuaCIKQEAgLTIxMyw2ICsyMTQsMTMg QEAgZG9fY2hpbGQoaW50ICpmZHMpCiAJLyogSW5pdGlhbGl6ZSBwZXIgcHJvY2VzcyBjb250ZXh0 ICovCiAJcG9vbF9pbml0X3Byb2Nlc3NfY29udGV4dCgpOwogCisJLyogSW5pdGlhbGl6ZSB0cmFj ayB0YWJsZSBtdXRhdGlvbiBjaGlsZCBzdGF0ZSBmb3IgY29sZCBzdGFydCB0cmFja2luZyAqLwor CWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJRExC T1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwl7CisJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25f Y2hpbGRfaW5pdCgpOworCX0KKwogCS8qIGluaXRpYWxpemUgY29ubmVjdGlvbiBwb29sICovCiAJ aWYgKHBvb2xfaW5pdF9jcCgpKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9wcm90b2NvbC9wb29sX3By b3RvX21vZHVsZXMuYyBiL3NyYy9wcm90b2NvbC9wb29sX3Byb3RvX21vZHVsZXMuYwppbmRleCA4 NmZiNWY4YTguLjljMjkwNTE0NyAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvY29sL3Bvb2xfcHJvdG9f bW9kdWxlcy5jCisrKyBiL3NyYy9wcm90b2NvbC9wb29sX3Byb3RvX21vZHVsZXMuYwpAQCAtMTQ2 OCw3ICsxNDY4LDkgQEAgUGFyc2UoUE9PTF9DT05ORUNUSU9OICpmcm9udGVuZCwgUE9PTF9DT05O RUNUSU9OX1BPT0wgKmJhY2tlbmQsCiAJCXBvb2xfd2hlcmVfdG9fc2VuZChxdWVyeV9jb250ZXh0 LCBxdWVyeV9jb250ZXh0LT5vcmlnaW5hbF9xdWVyeSwKIAkJCQkJCSAgIHF1ZXJ5X2NvbnRleHQt PnBhcnNlX3RyZWUpOwogCi0JCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vf b25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmIHN0cmxlbihuYW1lKSAhPSAwKQorCQlp ZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKAorCQkJCQkJCQkgIHBvb2xfY29uZmlnLT5kaXNhYmxl X2xvYWRfYmFsYW5jZV9vbl93cml0ZSkKKwkJCSYmIHN0cmxlbihuYW1lKSAhPSAwKQogCQkJcG9v bF9zZXRhbGxfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQpOwogCiAJCWlmIChSRVBMSUNB VElPTikKQEAgLTE4MTEsNyArMTgxMyw3IEBAIEJpbmQoUE9PTF9DT05ORUNUSU9OICpmcm9udGVu ZCwgUE9PTF9DT05ORUNUSU9OX1BPT0wgKmJhY2tlbmQsCiAJCQlyZXR1cm4gUE9PTF9FTkQ7CiAJ fQogCi0JaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PSBE TEJPV19ETUxfQURBUFRJVkUgJiYKKwlpZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29u ZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkgJiYKIAkJVFNUQVRFKGJhY2tlbmQs IE1BSU5fUkVQTElDQSA/IFBSSU1BUllfTk9ERV9JRCA6IFJFQUxfTUFJTl9OT0RFX0lEKSA9PSAn VCcpCiAJewogCQlwb29sX3doZXJlX3RvX3NlbmQocXVlcnlfY29udGV4dCwgcXVlcnlfY29udGV4 dC0+b3JpZ2luYWxfcXVlcnksCmRpZmYgLS1naXQgYS9zcmMvc2FtcGxlL3BncG9vbC5jb25mLnNh bXBsZS1zdHJlYW0gYi9zcmMvc2FtcGxlL3BncG9vbC5jb25mLnNhbXBsZS1zdHJlYW0KaW5kZXgg MWFjOTgyOTA3Li5jZTliOTJkYTAgMTAwNjQ0Ci0tLSBhL3NyYy9zYW1wbGUvcGdwb29sLmNvbmYu c2FtcGxlLXN0cmVhbQorKysgYi9zcmMvc2FtcGxlL3BncG9vbC5jb25mLnNhbXBsZS1zdHJlYW0K QEAgLTQ3OCw2ICs0NzgsMTQgQEAgYmFja2VuZF9jbHVzdGVyaW5nX21vZGUgPSBzdHJlYW1pbmdf cmVwbGljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbW9k aWZpZWQgd2l0aGluIHRoZSBjdXJyZW50IGV4cGxpY2l0IHRyYW5zYWN0aW9uIHdpbGwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm90IGJlIGxvYWQgYmFsYW5jZWQg dW50aWwgdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkbWxf YWRhcHRpdmVfZ2xvYmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAg ICBTdXBlcnNldCBvZiBkbWxfYWRhcHRpdmUuIEluIGFkZGl0aW9uIHRvIHBlci10cmFuc2FjdGlv bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICB0cmFja2luZywgdXNl cyBzaGFyZWQgbWVtb3J5IHRvIHRyYWNrIHJlY2VudGx5IHdyaXR0ZW4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyAgICAgdGFibGVzIGFjcm9zcyBhbGwgc2Vzc2lvbnMuIFJl YWRzIGZyb20gcmVjZW50bHkgd3JpdHRlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjICAgICB0YWJsZXMgYXJlIHJvdXRlZCB0byBwcmltYXJ5IHVudGlsIGEgVFRMIChiYXNl ZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICByZXBsaWNhdGlv biBkZWxheSkgZXhwaXJlcy4gUmVxdWlyZXMgYWRkaXRpb25hbCBzaGFyZWQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbWVtb3J5LiBTZWUgdHJhY2tfdGFibGVfbXV0 YXRpb25fKiBwYXJhbWV0ZXJzIGJlbG93LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWx3YXlzOgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBpZiBhIHdyaXRlIHF1ZXJ5IGlz IGlzc3VlZCwgcmVhZCBxdWVyaWVzIHdpbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyAgICAgbm90IGJlIGxvYWQgYmFsYW5jZWQgdW50aWwgdGhlIHNlc3Npb24gZW5kcy4K QEAgLTQ5OSw2ICs1MDcsNDMgQEAgYmFja2VuZF9jbHVzdGVyaW5nX21vZGUgPSBzdHJlYW1pbmdf cmVwbGljYXRpb24KICNzdGF0ZW1lbnRfbGV2ZWxfbG9hZF9iYWxhbmNlID0gb2ZmCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRW5hYmxlcyBzdGF0ZW1lbnQgbGV2ZWwgbG9h ZCBiYWxhbmNpbmcKIAorIyAtIFRyYWNrIFRhYmxlIE11dGF0aW9uICh1c2VkIGJ5IGRtbF9hZGFw dGl2ZV9nbG9iYWwpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXQVJO SU5HOiBkbWxfYWRhcHRpdmVfZ2xvYmFsIGluY3JlYXNlcyBzaGFyZWQgbWVtb3J5IHVzYWdlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRGVmYXVsdCBzZXR0aW5ncyByZXF1 aXJlIH44MCBLQiBzaGFyZWQgbWVtb3J5IGZvciB0YWJsZSB0cmFja2luZworCisjdHJhY2tfdGFi bGVfbXV0YXRpb25fdHRsX2ZhY3RvciA9IDUuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIFRUTCBtdWx0aXBsaWVyOiBUVEwgPSByZXBsaWNhdGlvbl9kZWxheSAqIGZhY3Rv cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhpZ2hlciB2YWx1ZXMgcHJv dmlkZSBtb3JlIHNhZmV0eSBtYXJnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBSYW5nZTogMS4wLTEwMC4wIChkZWZhdWx0OiA1LjApCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZWxvYWQpCisKKyN0cmFja190YWJs ZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzID0gNjAwMDAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBNYXhpbXVtIGR1cmF0aW9uIChtcykgYSB0YWJsZSBjYW4gYmUgbWFya2Vk IHN0YWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZnJvbSBpdHMgZmly c3Qgd3JpdGUuIEJvdW5kcyBjcm9zcy1zZXNzaW9uIGltcGFjdDoKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIyBldmVuIHVuZGVyIGNvbnRpbnVvdXMgd3JpdGVzLCBzdGFsZW5l c3MgZXhwaXJlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFmdGVyIHRo aXMgcGVyaW9kIGFuZCBpcyBvbmx5IHJlbmV3ZWQgYnkgbmV3IHdyaXRlcy4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyAwIGRpc2FibGVzIHRoZSBjYXAuIFJhbmdlOiAwLTM2 MDAwMDAgKGRlZmF1bHQ6IDYwMDAwID0gNjBzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVsb2FkKQorCisjdHJhY2tfdGFibGVfbXV0YXRp b25fY29sZF9zdGFydF9kdXJhdGlvbiA9IDIwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBEdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdG8gcm91dGUgYWxsIHF1ZXJpZXMg dG8gcHJpbWFyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFmdGVyIGNo aWxkIHByb2Nlc3Mgc3RhcnRzIChjb2xkIHN0YXJ0IHBlcmlvZCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMC02MDAwMCBtcyAoZGVmYXVsdDogMjAwMCBtcyA9 IDIgc2Vjb25kcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTZXQgdG8g MCB0byBkaXNhYmxlIGNvbGQgc3RhcnQgYmVoYXZpb3IKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlbG9hZCkKKworI3RyYWNrX3RhYmxlX211 dGF0aW9uX3RhYmxlX2J1Y2tldHMgPSAxMDI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIaWdoZXIgdmFsdWVzIHJlZHVj ZSBoYXNoIGNvbGxpc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBS YW5nZTogNjQtNjU1MzYgKGRlZmF1bHQ6IDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQorCisjdHJhY2tfdGFibGVfbXV0 YXRpb25fdGFibGVfc2l6ZSA9IDIwNDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBNYXhpbXVtIG51bWJlciBvZiB0YWJsZXMgdG8gdHJhY2sgc2ltdWx0YW5lb3VzbHkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMTI4LTEzMTA3MiAoZGVm YXVsdDogMjA0OCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdl IHJlcXVpcmVzIHJlc3RhcnQpCisKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBTVFJFQU1J TkcgUkVQTElDQVRJT04gTU9ERQogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEv c3JjL3N0cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jIGIvc3JjL3N0cmVh bWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jCmluZGV4IDMxMWI2Mzg2NS4uY2Rk NTcwMzk2IDEwMDY0NAotLS0gYS9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2Vy X2NoaWxkLmMKKysrIGIvc3JjL3N0cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGls ZC5jCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAidXRpbHMvcG9vbF9pcC5oIgogI2luY2x1 ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0aWxzL3Bvb2xfc3RyZWFtLmgiCisj aW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oIgogCiAjaW5jbHVkZSAi Y29udGV4dC9wb29sX3Byb2Nlc3NfY29udGV4dC5oIgogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9z ZXNzaW9uX2NvbnRleHQuaCIKQEAgLTQxOSw2ICs0MjAsNyBAQCBjaGVja19yZXBsaWNhdGlvbl90 aW1lX2xhZyh2b2lkKQogCUJhY2tlbmRJbmZvICpia2luZm87CiAJdWludDY0CQlsYWc7CiAJdWlu dDY0CQlkZWxheV90aHJlc2hvbGRfYnlfdGltZTsKKwl1aW50NjQJCW1heF9kZWxheV91cyA9IDA7 CiAJRXJyb3JDb250ZXh0Q2FsbGJhY2sgY2FsbGJhY2s7CiAJaW50CQkJYWN0aXZlX3N0YW5kYnlf bm9kZTsKIAlib29sCQlyZXBsaWNhdGlvbl9kZWxheV9ieV90aW1lOwpAQCAtNjQzLDYgKzY0NSwx MCBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1lX2xhZyh2b2lkKQogCQkJCQkJCQkJCQkJCSAqIHNl Y29uZHMgdG8gbWljcm8KIAkJCQkJCQkJCQkJCQkgKiBzZWNvbmRzICovCiAKKwkJCQkvKiBUcmFj ayBtYXggZGVsYXkgZm9yIG11dGF0aW9uIFRUTCAqLworCQkJCWlmIChsYWcgPiBtYXhfZGVsYXlf dXMpCisJCQkJCW1heF9kZWxheV91cyA9IGxhZzsKKwogCQkJCS8qIExvZyBkZWxheSBpZiBuZWNl c3NhcnkgKi8KIAkJCQlpZiAoKHBvb2xfY29uZmlnLT5sb2dfc3RhbmRieV9kZWxheSA9PSBMU0Rf QUxXQVlTICYmIGxhZyA+IDApIHx8CiAJCQkJCShwb29sX2NvbmZpZy0+bG9nX3N0YW5kYnlfZGVs YXkgPT0gTFNEX09WRVJfVEhSRVNIT0xEICYmCkBAIC02NjgsNiArNjc0LDEzIEBAIGNoZWNrX3Jl cGxpY2F0aW9uX3RpbWVfbGFnKHZvaWQpCiAJCX0KIAl9CiAKKwkvKgorCSAqIFVwZGF0ZSB0cmFj ayB0YWJsZSBtdXRhdGlvbiBUVEwgZnJvbSB0aGUgbWF4IG9ic2VydmVkIHRpbWUtYmFzZWQKKwkg KiByZXBsaWNhdGlvbiBkZWxheS4KKwkgKi8KKwlpZiAocmVwbGljYXRpb25fZGVsYXlfYnlfdGlt ZSAmJiBtYXhfZGVsYXlfdXMgPiAwKQorCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3VwZGF0 ZV90dGwobWF4X2RlbGF5X3VzKTsKKwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBjYWxsYmFjay5w cmV2aW91czsKIH0KIApAQCAtNjk1LDYgKzcwOCw3IEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVf bGFnX3dpdGhfY21kKHZvaWQpCiAJZG91YmxlCQlkZWxheV9tczsKIAl1aW50NjQJCWRlbGF5Owog CXVpbnQ2NAkJZGVsYXlfdGhyZXNob2xkX2J5X3RpbWU7CisJdWludDY0CQltYXhfZGVsYXlfdXMg PSAwOwkvKiBUcmFjayBtYXggZGVsYXkgZm9yIG11dGF0aW9uIG1hcCAqLwogCWludAkJCXRva2Vu X2NvdW50ID0gMDsKIAlpbnQJCQlwcmltYXJ5X25vZGVfaWQ7CiAJaW50CQkJc2F2ZV9lcnJubzsK QEAgLTEwMDMsNiArMTAxNywxMCBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1lX2xhZ193aXRoX2Nt ZCh2b2lkKQogCQkJYmtpbmZvLT5zdGFuZGJ5X2RlbGF5ID0gZGVsYXk7CiAJCQlia2luZm8tPnN0 YW5kYnlfZGVsYXlfYnlfdGltZSA9IHRydWU7CiAKKwkJCS8qIFRyYWNrIG1heGltdW0gZGVsYXkg Zm9yIHRhYmxlIG11dGF0aW9uIG1hcCBUVEwgY2FsY3VsYXRpb24gKi8KKwkJCWlmIChkZWxheSA+ IG1heF9kZWxheV91cykKKwkJCQltYXhfZGVsYXlfdXMgPSBkZWxheTsKKwogCQkJLyoKIAkJCSAq IExvZyBkZWxheSBpZiBuZWNlc3NhcnkuIHRocmVzaG9sZCBpcyBpbiBtaWxsaXNlY29uZHMsIGNv bnZlcnQKIAkJCSAqIHRvIG1pY3Jvc2Vjb25kcy4KQEAgLTEwMjEsNiArMTAzOSwxMiBAQCBjaGVj a19yZXBsaWNhdGlvbl90aW1lX2xhZ193aXRoX2NtZCh2b2lkKQogCQkJdG9rZW4gPSBzdHJ0b2tf cihOVUxMLCAiIFx0XG4iLCAmc2F2ZXB0cik7CiAJCX0KIAorCQkvKiBVcGRhdGUgdGFibGUgbXV0 YXRpb24gVFRMIGJhc2VkIG9uIG1heCBvYnNlcnZlZCBkZWxheSAqLworCQlpZiAocG9vbF9jb25m aWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCQlETEJPV19ETUxfQURBUFRJ VkVfR0xPQkFMICYmCisJCQltYXhfZGVsYXlfdXMgPiAwKQorCQkJcG9vbF90cmFja190YWJsZV9t dXRhdGlvbl91cGRhdGVfdHRsKG1heF9kZWxheV91cyk7CisKIAl9CiAJUEdfQ0FUQ0goKTsKIAl7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzaW9uL2xpYnMuc2ggYi9zcmMvdGVzdC9yZWdy ZXNzaW9uL2xpYnMuc2gKaW5kZXggN2M1YTBjMTgyLi4xYzhhZTM5MmQgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5zaAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL2xpYnMu c2gKQEAgLTQyLDYgKzQyLDggQEAgZnVuY3Rpb24gd2FpdF9mb3JfZmFpbG92ZXJfZG9uZSB7CiBm dW5jdGlvbiBjbGVhbl9hbGwgewogCXBncmVwIHBncG9vbCB8IHhhcmdzIGtpbGwgLTkgPiAvZGV2 L251bGwgMj4mMQogCXBncmVwIHBvc3RncmVzIHwgeGFyZ3Mga2lsbCAtOSA+IC9kZXYvbnVsbCAy PiYxCisJIyBDbGVhbiB1cCBsZWFrZWQgU3lzViBJUEMgcmVzb3VyY2VzIGxlZnQgYmVoaW5kIGJ5 IGtpbGwgLTkKKwlpcGNybSAtLWFsbCAyPi9kZXYvbnVsbCB8fCB0cnVlCiAJcm0gLWYgJFBHU09D S0VUX0RJUi8ucy5QR1NRTC4qCiAJbmV0c3RhdCAtdCAtcCAyPi9kZXYvbnVsbHxncmVwIHBncG9v bAogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDMudHJhY2tfdGFi bGVfbXV0YXRpb24vdGVzdC5zaCBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNr X3RhYmxlX211dGF0aW9uL3Rlc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw MDAwLi44YjRkZDE3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rl c3RzLzA0My50cmFja190YWJsZV9tdXRhdGlvbi90ZXN0LnNoCkBAIC0wLDAgKzEsMzU0IEBACisj IS91c3IvYmluL2VudiBiYXNoCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB0ZXN0IHNjcmlwdCBmb3IgdHJhY2sg dGFibGUgbXV0YXRpb24gZmVhdHVyZSAoaW4tbWVtb3J5IHRhYmxlIHRyYWNraW5nKS4KKyMgVGVz dHMgcm91dGluZyBvZiBxdWVyaWVzIGJhc2VkIG9uIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzLgor Iworc291cmNlICRURVNUTElCUworVEVTVERJUj10ZXN0ZGlyCitQU1FMPSRQR0JJTi9wc3FsCitQ U1FMT1BUUz0iLWEgLXEgLVgiCitQR1BPT0xCSU49JFBHUE9PTF9JTlNUQUxMX0RJUi9iaW4KK2V4 cG9ydCBQR0RBVEFCQVNFPXRlc3QKKworIyBPbmx5IHJ1biBpbiBzdHJlYW1pbmcgcmVwbGljYXRp b24gbW9kZSBzaW5jZSB0aGF0J3MgdGhlIHRhcmdldCB1c2UgY2FzZQorZm9yIG1vZGUgaW4gcwor ZG8KKyAgICBybSAtZnIgJFRFU1RESVIKKyAgICBta2RpciAkVEVTVERJUgorICAgIGNkICRURVNU RElSCisKKyAgICAjIENyZWF0ZSB0ZXN0IGVudmlyb25tZW50IHdpdGggMiBub2RlcworICAgIGVj aG8gLW4gImNyZWF0aW5nIHRlc3QgZW52aXJvbm1lbnQuLi4iCisgICAgJFBHUE9PTF9TRVRVUCAt bSAkbW9kZSAtbiAyIHx8IGV4aXQgMQorICAgIGVjaG8gImRvbmUuIgorCisgICAgc291cmNlIC4v YmFzaHJjLnBvcnRzCisKKyAgICAjIENvbmZpZ3VyZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0 dXJlIHZpYSBkbWxfYWRhcHRpdmVfZ2xvYmFsCisgICAgZWNobyAiZGlzYWJsZV9sb2FkX2JhbGFu Y2Vfb25fd3JpdGUgPSAnZG1sX2FkYXB0aXZlX2dsb2JhbCciID4+IGV0Yy9wZ3Bvb2wuY29uZgor ICAgIGVjaG8gInRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3IgPSA1LjAiID4+IGV0Yy9w Z3Bvb2wuY29uZgorICAgIGVjaG8gInRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVy YXRpb24gPSAxMDAwMCIgPj4gZXRjL3BncG9vbC5jb25mCisKKyAgICAjIEVuYWJsZSBsb2FkIGJh bGFuY2luZyBleHBsaWNpdGx5CisgICAgZWNobyAibG9hZF9iYWxhbmNlX21vZGUgPSBvbiIgPj4g ZXRjL3BncG9vbC5jb25mCisKKyAgICAjIENvbmZpZ3VyZSB3ZWlnaHRzIHNvIHdlIGNhbiBkaXN0 aW5ndWlzaCByb3V0aW5nCisgICAgIyBCYWNrZW5kIDAgKHByaW1hcnkpIHdlaWdodD0wLCBCYWNr ZW5kIDEgKHN0YW5kYnkpIHdlaWdodD0xCisgICAgIyBUaGlzIG1lYW5zIGxvYWQgYmFsYW5jZWQg cXVlcmllcyBnbyB0byBub2RlIDEgYnkgZGVmYXVsdAorICAgIGVjaG8gImJhY2tlbmRfd2VpZ2h0 MCA9IDAiID4+IGV0Yy9wZ3Bvb2wuY29uZgorICAgIGVjaG8gImJhY2tlbmRfd2VpZ2h0MSA9IDEi ID4+IGV0Yy9wZ3Bvb2wuY29uZgorCisgICAgIyBFbmFibGUgZGVidWcgbG9nZ2luZyB0byBzZWUg cm91dGluZyBkZWNpc2lvbnMKKyAgICBlY2hvICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIiA+ PiBldGMvcGdwb29sLmNvbmYKKworICAgIC4vc3RhcnRhbGwKKworICAgIGV4cG9ydCBQR1BPUlQ9 JFBHUE9PTF9QT1JUCisgICAgZXhwb3J0IFBHSE9TVD1sb2NhbGhvc3QKKworICAgIHdhaXRfZm9y X3BncG9vbF9zdGFydHVwCisKKyAgICAjIENyZWF0ZSB0ZXN0IHRhYmxlcworICAgICRQU1FMIHRl c3QgPDxFT0YKK0NSRUFURSBUQUJMRSB0MShpIElOVEVHRVIpOworQ1JFQVRFIFRBQkxFIHQyKGkg SU5URUdFUik7CitDUkVBVEUgVEFCTEUgdDMoaSBJTlRFR0VSKTsKK0VPRgorCisgICAgZWNobyAi PT09IFRlc3QgMTogQ29sZCBTdGFydCBSb3V0aW5nID09PSIKKyAgICAjIER1cmluZyBjb2xkIHN0 YXJ0LCBhbGwgcXVlcmllcyBzaG91bGQgZ28gdG8gcHJpbWFyeQorICAgICMgUmVzdGFydCBwZ3Bv b2wgdG8gdHJpZ2dlciBjb2xkIHN0YXJ0CisgICAgLi9zaHV0ZG93bmFsbAorICAgIC4vc3RhcnRh bGwKKyAgICB3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisgICAgIyBJbW1lZGlhdGVseSBxdWVy eSAtIHNob3VsZCBnbyB0byBwcmltYXJ5IGR1ZSB0byBjb2xkIHN0YXJ0CisgICAgJFBTUUwgdGVz dCAtYyAiU0VMRUNUICdjb2xkX3N0YXJ0X3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQxOyIgPiAv ZGV2L251bGwgMj4mMQorCisgICAgIyBDaGVjayBsb2cgZm9yIGNvbGQgc3RhcnQgbWVzc2FnZSAo dXNlIC1hIHRvIGhhbmRsZSBiaW5hcnkgbG9nIGZpbGVzKQorICAgIGlmIGdyZXAgLWEgLXEgImNv dWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSBtdXRhdGlvbiBjb2xk IHN0YXJ0IiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDEgUEFTU0VE OiBDb2xkIHN0YXJ0IHJvdXRpbmcgd29ya3MiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0 IDEgRkFJTEVEOiBDb2xkIHN0YXJ0IHJvdXRpbmcgbm90IGRldGVjdGVkIgorICAgICAgICAuL3No dXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCAy OiBXYWl0IGZvciBjb2xkIHN0YXJ0IHRvIGVuZCA9PT0iCisgICAgIyBXYWl0IGZvciBjb2xkIHN0 YXJ0IHBlcmlvZCB0byBlbmQgKDEwIHNlY29uZHMpLgorICAgICMgVXNlIGdlbmVyb3VzIG1hcmdp biB0byBhdm9pZCBmbGFraW5lc3MgdW5kZXIgbG9hZCAoZS5nLiBmdWxsIHJlZ3Jlc3Npb24gc3Vp dGUpLgorICAgIHNsZWVwIDEyCisKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bv b2wubG9nCisKKyAgICAjIE5vdyBhIGNsZWFuIHRhYmxlIHF1ZXJ5IHNob3VsZCBsb2FkIGJhbGFu Y2UgKGdvIHRvIG5vZGUgMSkKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2FmdGVyX2NvbGRf c3RhcnQnIGFzIG1hcmtlciwgKiBGUk9NIHQzOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBB ZnRlciBjb2xkIHN0YXJ0LCBxdWVyaWVzIHRvIGNsZWFuIHRhYmxlcyBzaG91bGQgbG9hZCBiYWxh bmNlCisgICAgIyBDaGVjayB0aGF0IGl0IGRpZCBOT1QgZ2V0IGZvcmNlZCB0byBwcmltYXJ5IGR1 ZSB0byB0cmFjayB0YWJsZSBtdXRhdGlvbgorICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBs b2FkIGJhbGFuY2UgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSBtdXRhdGlvbiBjb2xkIHN0YXJ0IiBs b2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDIgRkFJTEVEOiBTdGlsbCBp biBjb2xkIHN0YXJ0IGFmdGVyIHdhaXRpbmciCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAg ICAgZXhpdCAxCisgICAgZmkKKyAgICBlY2hvICJUZXN0IDIgUEFTU0VEOiBDb2xkIHN0YXJ0IGVu ZGVkIGNvcnJlY3RseSIKKworICAgIGVjaG8gIj09PSBUZXN0IDM6IFdyaXRlLXRoZW4tUmVhZCBS b3V0aW5nID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisK KyAgICAjIFdyaXRlIHRvIHQxIGFuZCB0aGVuIHJlYWQgLSB1c2Ugc2luZ2xlIGNvbm5lY3Rpb24g dG8gZW5zdXJlIHNhbWUgc2Vzc2lvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK0lOU0VSVCBJTlRP IHQxIFZBTFVFUyAoMSk7CitTRUxFQ1QgJ3dyaXRlX3JlYWRfdGVzdCcgYXMgbWFya2VyLCAqIEZS T00gdDE7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVk CisgICAgc2xlZXAgMC41CisKKyAgICAjIENoZWNrIGxvZyBmb3IgdGFibGUgc3RhbGVuZXNzIG1l c3NhZ2UKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2Ug dGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAg ICBlY2hvICJUZXN0IDMgUEFTU0VEOiBXcml0ZS10aGVuLXJlYWQgcm91dGluZyB3b3JrcyIKKyAg ICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3QgMyBGQUlMRUQ6IFRhYmxlIHN0YWxlbmVzcyBub3Qg ZGV0ZWN0ZWQgYWZ0ZXIgd3JpdGUiCisgICAgICAgICMgU2hvdyByZWxldmFudCBsb2cgZW50cmll cyBmb3IgZGVidWdnaW5nCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9u IiBsb2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAg ICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDQ6IENsZWFuIFRhYmxlIFN0 aWxsIExvYWQgQmFsYW5jZXMgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3Bn cG9vbC5sb2cKKworICAgICMgUmVhZCBmcm9tIHQyIChuZXZlciB3cml0dGVuIHRvKSAtIHNob3Vs ZCBsb2FkIGJhbGFuY2UKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2NsZWFuX3RhYmxlX3Rl c3QnIGFzIG1hcmtlciwgKiBGUk9NIHQyOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBTaG91 bGQgTk9UIHNlZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBibG9ja2luZyBtZXNzYWdlIGZvciB0Mgor ICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4q dDIuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBl Y2hvICJUZXN0IDQgRkFJTEVEOiBDbGVhbiB0YWJsZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgc3Rh bGUiCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBl Y2hvICJUZXN0IDQgUEFTU0VEOiBDbGVhbiB0YWJsZXMgc3RpbGwgbG9hZCBiYWxhbmNlIgorCisg ICAgZWNobyAiPT09IFRlc3QgNTogVVBEQVRFIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAg ICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFVwZGF0ZSB0 MiBhbmQgdGhlbiByZWFkIC0gdXNlIHNpbmdsZSBjb25uZWN0aW9uCisgICAgJFBTUUwgdGVzdCA8 PEVPRgorVVBEQVRFIHQyIFNFVCBpID0gOTk5IFdIRVJFIGkgPSAwOworU0VMRUNUICd1cGRhdGVf dGVzdCcgYXMgbWFya2VyLCAqIEZST00gdDI7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8g ZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1x ICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0 dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDUgUEFTU0VEOiBV UERBVEUgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0 IDUgRkFJTEVEOiBVUERBVEUgZGlkIG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICAu L3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVz dCA2OiBERUxFVEUgTWFya3MgVGFibGUgYXMgU3RhbGUgPT09IgorICAgICMgQ2xlYXIgdGhlIGxv ZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgRGVsZXRlIGZyb20gdDMgYW5kIHRoZW4g cmVhZCAtIHVzZSBzaW5nbGUgY29ubmVjdGlvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK0RFTEVU RSBGUk9NIHQzIFdIRVJFIGkgPSAwOworU0VMRUNUICdkZWxldGVfdGVzdCcgYXMgbWFya2VyLCAq IEZST00gdDM7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVz aGVkCisgICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBi YWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxv ZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDYgUEFTU0VEOiBERUxFVEUgbWFya3MgdGFibGUg YXMgc3RhbGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDYgRkFJTEVEOiBERUxFVEUg ZGlkIG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAg ICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA3OiBUUlVOQ0FURSBNYXJr cyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdw b29sLmxvZworCisgICAgIyBDcmVhdGUgYSBmcmVzaCB0YWJsZSBmb3IgVFJVTkNBVEUgdGVzdAor ICAgICRQU1FMIHRlc3QgLWMgIkNSRUFURSBUQUJMRSB0X3RydW5jYXRlKGkgSU5URUdFUik7IiA+ IC9kZXYvbnVsbCAyPiYxCisgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJUIElOVE8gdF90cnVuY2F0 ZSBWQUxVRVMgKDEpLCAoMiksICgzKTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgV2FpdCBm b3IgYW55IFRUTCB0byBleHBpcmUKKyAgICBzbGVlcCAzCisKKyAgICAjIENsZWFyIHRoZSBsb2cg YWdhaW4KKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFRydW5jYXRlIGFuZCB0aGVuIHJl YWQgLSB1c2Ugc2luZ2xlIGNvbm5lY3Rpb24KKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitUUlVOQ0FU RSB0X3RydW5jYXRlOworU0VMRUNUICd0cnVuY2F0ZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0 X3RydW5jYXRlOworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1 c2hlZAorICAgIHNsZWVwIDAuNQorCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQg YmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5s b2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA3IFBBU1NFRDogVFJVTkNBVEUgbWFya3MgdGFi bGUgYXMgc3RhbGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDcgRkFJTEVEOiBUUlVO Q0FURSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIGdyZXAgLWEgLWkgInRy YWNrX3RhYmxlX211dGF0aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4v c2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0 IDg6IFdJVEggQ2xhdXNlIChDVEUgd2l0aCBERUxFVEUpIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09 PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIENy ZWF0ZSBhIGZyZXNoIHRhYmxlIGZvciBXSVRIIHRlc3QKKyAgICAkUFNRTCB0ZXN0IC1jICJDUkVB VEUgVEFCTEUgdF9jdGUoaSBJTlRFR0VSKTsiID4gL2Rldi9udWxsIDI+JjEKKyAgICAkUFNRTCB0 ZXN0IC1jICJJTlNFUlQgSU5UTyB0X2N0ZSBWQUxVRVMgKDEpLCAoMiksICgzKTsiID4gL2Rldi9u dWxsIDI+JjEKKworICAgICMgV2FpdCBmb3IgYW55IFRUTCB0byBleHBpcmUKKyAgICBzbGVlcCAz CisKKyAgICAjIENsZWFyIHRoZSBsb2cgYWdhaW4KKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAg ICAjIFVzZSBXSVRIIGNsYXVzZSB3aXRoIERFTEVURSwgdGhlbiByZWFkIGZyb20gdGhlIHRhYmxl CisgICAgJFBTUUwgdGVzdCA8PEVPRgorV0lUSCBkZWxldGVkIEFTIChERUxFVEUgRlJPTSB0X2N0 ZSBXSEVSRSBpID0gMSBSRVRVUk5JTkcgKikKK1NFTEVDVCAqIEZST00gZGVsZXRlZDsKK1NFTEVD VCAnY3RlX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHRfY3RlOworRU9GCisKKyAgICAjIFNtYWxs IGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNsZWVwIDAuNQorCisgICAgaWYg Z3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVj ZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA4 IFBBU1NFRDogV0lUSCBjbGF1c2UgKENURSkgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxz ZQorICAgICAgICBlY2hvICJUZXN0IDggRkFJTEVEOiBXSVRIIGNsYXVzZSAoQ1RFKSBkaWQgbm90 IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211 dGF0aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwK KyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgICMgVGVzdCA5OiBNRVJHRSAoUG9zdGdyZVNR TCAxNSsgb25seSkKKyAgICBQR19NQUpPUl9WRVJTSU9OPSQoJFBTUUwgLXQgLWMgIlNFTEVDVCBz dWJzdHJpbmcodmVyc2lvbigpIGZyb20gJ1Bvc3RncmVTUUwgKFswLTldKyknKTsiIHwgdHIgLWQg JyAnKQorICAgIGlmIFsgIiRQR19NQUpPUl9WRVJTSU9OIiAtZ2UgMTUgXSAyPi9kZXYvbnVsbDsg dGhlbgorICAgICAgICBlY2hvICI9PT0gVGVzdCA5OiBNRVJHRSBNYXJrcyBUYWJsZSBhcyBTdGFs ZSAoUG9zdGdyZVNRTCAkUEdfTUFKT1JfVkVSU0lPTikgPT09IgorICAgICAgICAjIENsZWFyIHRo ZSBsb2cKKyAgICAgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgICAgICMgQ3JlYXRlIHRhYmxl cyBmb3IgTUVSR0UgdGVzdAorICAgICAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9t ZXJnZV90YXJnZXQoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgdmFsIFRFWFQpOyIgPiAvZGV2L251 bGwgMj4mMQorICAgICAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9tZXJnZV9zb3Vy Y2UoaWQgSU5URUdFUiwgdmFsIFRFWFQpOyIgPiAvZGV2L251bGwgMj4mMQorICAgICAgICAkUFNR TCB0ZXN0IC1jICJJTlNFUlQgSU5UTyB0X21lcmdlX3RhcmdldCBWQUxVRVMgKDEsICdvbGQnKTsi ID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJUIElOVE8gdF9t ZXJnZV9zb3VyY2UgVkFMVUVTICgxLCAnbmV3JyksICgyLCAnaW5zZXJ0Jyk7IiA+IC9kZXYvbnVs bCAyPiYxCisKKyAgICAgICAgIyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAgICAgICBz bGVlcCAzCisKKyAgICAgICAgIyBDbGVhciB0aGUgbG9nIGFnYWluCisgICAgICAgID4gbG9nL3Bn cG9vbC5sb2cKKworICAgICAgICAjIFVzZSBNRVJHRSwgdGhlbiByZWFkIGZyb20gdGhlIHRhcmdl dCB0YWJsZQorICAgICAgICAkUFNRTCB0ZXN0IDw8RU9GCitNRVJHRSBJTlRPIHRfbWVyZ2VfdGFy Z2V0IHQKK1VTSU5HIHRfbWVyZ2Vfc291cmNlIHMgT04gdC5pZCA9IHMuaWQKK1dIRU4gTUFUQ0hF RCBUSEVOIFVQREFURSBTRVQgdmFsID0gcy52YWwKK1dIRU4gTk9UIE1BVENIRUQgVEhFTiBJTlNF UlQgVkFMVUVTIChzLmlkLCBzLnZhbCk7CitTRUxFQ1QgJ21lcmdlX3Rlc3QnIGFzIG1hcmtlciwg KiBGUk9NIHRfbWVyZ2VfdGFyZ2V0OworRU9GCisKKyAgICAgICAgIyBTbWFsbCBkZWxheSB0byBl bnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICAgICAgc2xlZXAgMC41CisKKyAgICAgICAgaWYgZ3Jl cCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50 bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIlRlc3Qg OSBQQVNTRUQ6IE1FUkdFIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBlbHNlCisgICAg ICAgICAgICBlY2hvICJUZXN0IDkgRkFJTEVEOiBNRVJHRSBkaWQgbm90IG1hcmsgdGFibGUgYXMg c3RhbGUiCisgICAgICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9n L3BncG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAg ICAgICAgZXhpdCAxCisgICAgICAgIGZpCisgICAgZWxzZQorICAgICAgICBlY2hvICI9PT0gVGVz dCA5OiBNRVJHRSBza2lwcGVkIChyZXF1aXJlcyBQb3N0Z3JlU1FMIDE1KywgaGF2ZSAkUEdfTUFK T1JfVkVSU0lPTikgPT09IgorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCAxMDogUk9MTEJB Q0sgRG9lcyBOT1QgTWFyayBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDcmVhdGUgYSBmcmVz aCB0YWJsZSBmb3Igcm9sbGJhY2sgdGVzdAorICAgICRQU1FMIHRlc3QgLWMgIkNSRUFURSBUQUJM RSB0X3JvbGxiYWNrKGkgSU5URUdFUik7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFdhaXQg Zm9yIGFueSBUVEwgdG8gZXhwaXJlCisgICAgc2xlZXAgMworCisgICAgIyBDbGVhciB0aGUgbG9n CisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBXcml0ZSBpbnNpZGUgYSB0cmFuc2FjdGlv biwgdGhlbiByb2xsYmFjaworICAgICRQU1FMIHRlc3QgPDxFT0YKK0JFR0lOOworSU5TRVJUIElO VE8gdF9yb2xsYmFjayBWQUxVRVMgKDEpOworUk9MTEJBQ0s7CitTRUxFQ1QgJ3JvbGxiYWNrX3Rl c3QnIGFzIG1hcmtlciwgKiBGUk9NIHRfcm9sbGJhY2s7CitFT0YKKworICAgICMgU21hbGwgZGVs YXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICAjIFNob3Vs ZCBOT1Qgc2VlIHRfcm9sbGJhY2sgbWFya2VkIGFzIHN0YWxlIHNpbmNlIHRoZSB3cml0ZSB3YXMg cm9sbGVkIGJhY2sKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJl Y2F1c2UgdGFibGUuKnRfcm9sbGJhY2suKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29s LmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDEwIEZBSUxFRDogUm9sbGVkLWJhY2sgd3Jp dGUgaW5jb3JyZWN0bHkgbWFya2VkIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBncmVwIC1hIC1p ICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAg ICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZWNobyAiVGVzdCAx MCBQQVNTRUQ6IFJPTExCQUNLIGRvZXMgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisKKyAgICBl Y2hvICI9PT0gVGVzdCAxMTogQ09NTUlUIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAj IENyZWF0ZSBhIGZyZXNoIHRhYmxlIGZvciBjb21taXQgdGVzdAorICAgICRQU1FMIHRlc3QgLWMg IkNSRUFURSBUQUJMRSB0X2NvbW1pdChpIElOVEVHRVIpOyIgPiAvZGV2L251bGwgMj4mMQorCisg ICAgIyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAgIHNsZWVwIDMKKworICAgICMgQ2xl YXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgV3JpdGUgaW5zaWRlIGEg dHJhbnNhY3Rpb24sIHRoZW4gY29tbWl0LCB0aGVuIHJlYWQKKyAgICAkUFNRTCB0ZXN0IDw8RU9G CitCRUdJTjsKK0lOU0VSVCBJTlRPIHRfY29tbWl0IFZBTFVFUyAoMSk7CitDT01NSVQ7CitTRUxF Q1QgJ2NvbW1pdF90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0X2NvbW1pdDsKK0VPRgorCisgICAg IyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKwor ICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4q d2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8g IlRlc3QgMTEgUEFTU0VEOiBDT01NSVQgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQor ICAgICAgICBlY2hvICJUZXN0IDExIEZBSUxFRDogQ29tbWl0dGVkIHdyaXRlIGRpZCBub3QgbWFy ayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgZ3JlcCAtYSAtaSAidHJhY2tfdGFibGVfbXV0YXRp b24iIGxvZy9wZ3Bvb2wubG9nIHwgdGFpbCAtMjAKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAg ICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiIgorICAgIGVjaG8gIj09PSBBbGwgVHJh Y2sgVGFibGUgTXV0YXRpb24gVGVzdHMgUEFTU0VEID09PSIKKworICAgIC4vc2h1dGRvd25hbGwK KworICAgIGNkIC4uCitkb25lCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz c2lvbi90ZXN0cy8wNDQudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvdGVzdC5zaCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQ0LnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9n L3Rlc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwLi5jNTBjMjEzZDYK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0NC50cmFja190 YWJsZV9tdXRhdGlvbl93YXRjaGRvZy90ZXN0LnNoCkBAIC0wLDAgKzEsMTg0IEBACisjIS91c3Iv YmluL2VudiBiYXNoCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IHNjcmlwdCBmb3IgdHJhY2sgdGFibGUg bXV0YXRpb24gZ2xvYmFsIGNvbGQgc3RhcnQKKyMgb24gd2F0Y2hkb2cgbGVhZGVyIGNoYW5nZS4K KyMKKyMgVXNlcyAkV0FUQ0hET0dfU0VUVVAgdG8gY3JlYXRlIGEgMi1ub2RlIHdhdGNoZG9nIGNs dXN0ZXIsCisjIHRoZW4gdmVyaWZpZXMgdGhhdCB3aGVuIHRoZSBsZWFkZXIgaXMgc3RvcHBlZCB0 aGUgbmV3CisjIGxlYWRlciB0cmlnZ2VycyBhIGdsb2JhbCBjb2xkIHN0YXJ0LgorIy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KK3NvdXJjZSAkVEVTVExJQlMKK1RFU1RESVI9dGVzdGRpcgorUFNRTD0kUEdCSU4vcHNxbAor c3VjY2Vzc19jb3VudD0wCisKK2Rpcj1gcHdkYAorcm0gLWZyICRURVNURElSCitta2RpciAkVEVT VERJUgorY2QgJFRFU1RESVIKKworIyBDcmVhdGUgMi1ub2RlIHdhdGNoZG9nIGNsdXN0ZXIKKyRX QVRDSERPR19TRVRVUCAtd24gMiB8fCBleGl0IDEKKworIyBFbnN1cmUgcGVyLW5vZGUgc2NyaXB0 cyBhcmUgZXhlY3V0YWJsZQorIyAoc2VkIC1pIGluIHdhdGNoZG9nX3NldHVwIGNhbiBzdHJpcCBw ZXJtaXNzaW9ucykKK2NobW9kIDc1NSBwZ3Bvb2wqL3N0YXJ0YWxsIHBncG9vbCovc2h1dGRvd25h bGwKKworIyBBcHBlbmQgdHJhY2tfdGFibGVfbXV0YXRpb24gY29uZmlnIHRvIGJvdGggbm9kZXMK K2ZvciBpIGluIDAgMQorZG8KKwljYXQgPj4gcGdwb29sJHtpfS9ldGMvcGdwb29sLmNvbmYgPDxF T0YKK2Rpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID0gJ2RtbF9hZGFwdGl2ZV9nbG9iYWwn Cit0cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uID0gMjAwMAorZW5hYmxl X2NvbnNlbnN1c193aXRoX2hhbGZfdm90ZXMgPSBvbgorbG9nX21pbl9tZXNzYWdlcyA9IGRlYnVn MQorRU9GCitkb25lCisKKy4vc3RhcnRhbGwKK2V4cG9ydCBQQ1BQQVNTRklMRT0kZGlyLyRURVNU RElSL3BncG9vbDAvcGNwcGFzcworCisjIFdhaXQgZm9yIHdhdGNoZG9nIGxpZmVjaGVjayBvbiBu b2RlIDAKK2VjaG8gLW4gIndhaXRpbmcgZm9yIHdhdGNoZG9nIG5vZGUgMCBzdGFydGluZyB1cC4u LiIKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWdyZXAgImxpZmVjaGVjayBz dGFydGVkIiBcCisJCXBncG9vbDAvbG9nL3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlm IFsgJD8gPSAwIF07IHRoZW4KKwkJYnJlYWsKKwlmaQorCXNsZWVwIDIKK2RvbmUKK2VjaG8gImRv bmUuIgorCisjIFRlc3QgMTogVmVyaWZ5IGxlYWRlciBjYW1lIHVwCitlY2hvICI9PT0gVGVzdCAx OiBXYWl0aW5nIGZvciB0aGUgcGdwb29sIGxlYWRlci4uLiA9PT0iCitmb3IgaSBpbiAxIDIgMyA0 IDUgNiA3IDggOSAxMAorZG8KKwlncmVwICJJIGFtIHRoZSBjbHVzdGVyIGxlYWRlciBub2RlIiBc CisJCXBncG9vbDAvbG9nL3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlmIFsgJD8gPSAw IF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwkJZWNo byAiVGVzdCAxIFBBU1NFRDogTGVhZGVyIGJyb3VnaHQgdXAuIgorCQlicmVhaworCWZpCisJZWNo byAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisKK2lmIFsgJHN1Y2Nlc3NfY291 bnQgLWx0IDEgXTsgdGhlbgorCWVjaG8gIlRlc3QgMSBGQUlMRUQ6IExlYWRlciBkaWQgbm90IHN0 YXJ0IgorCS4vc2h1dGRvd25hbGwKKwlleGl0IDEKK2ZpCisKKyMgVGVzdCAyOiBWZXJpZnkgc3Rh bmRieSBqb2luZWQgY2x1c3RlcgorZWNobyAiPT09IFRlc3QgMjogV2FpdGluZyBmb3Igc3RhbmRi eSB0byBqb2luLi4uID09PSIKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWdy ZXAgInN1Y2Nlc3NmdWxseSBqb2luZWQgdGhlIHdhdGNoZG9nIGNsdXN0ZXIiIFwKKwkJcGdwb29s MS9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgor CQlzdWNjZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCQllY2hvICJUZXN0IDIg UEFTU0VEOiBTdGFuZGJ5IGpvaW5lZC4iCisJCWJyZWFrCisJZmkKKwllY2hvICJbY2hlY2tdICRp IHRpbWVzIgorCXNsZWVwIDIKK2RvbmUKKworaWYgWyAkc3VjY2Vzc19jb3VudCAtbHQgMiBdOyB0 aGVuCisJZWNobyAiVGVzdCAyIEZBSUxFRDogU3RhbmRieSBkaWQgbm90IGpvaW4iCisJLi9zaHV0 ZG93bmFsbAorCWV4aXQgMQorZmkKKworIyBUZXN0IDM6IFZlcmlmeSB0cmFja190YWJsZV9tdXRh dGlvbiBpbml0aWFsaXplZAorZWNobyAiPT09IFRlc3QgMzogVmVyaWZ5IGZlYXR1cmUgaW5pdGlh bGl6ZWQgPT09IgoraWYgZ3JlcCAtYSAidHJhY2tfdGFibGVfbXV0YXRpb246IGluaXRpYWxpemVk IiBcCisJcGdwb29sMC9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisJc3Vj Y2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwllY2hvICJUZXN0IDMgUEFTU0VE OiBGZWF0dXJlIGluaXRpYWxpemVkLiIKK2Vsc2UKKwllY2hvICJUZXN0IDMgRkFJTEVEOiBGZWF0 dXJlIG5vdCBpbml0aWFsaXplZCIKKwkuL3NodXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRl c3QgNDogU3RvcCBsZWFkZXIgKHBncG9vbDApIHRvIHRyaWdnZXIgZmFpbG92ZXIKK2VjaG8gIj09 PSBUZXN0IDQ6IFN0b3BwaW5nIGxlYWRlci4uLiA9PT0iCitjZCBwZ3Bvb2wwCitzb3VyY2UgLi9i YXNocmMucG9ydHMKKyRQR1BPT0xfSU5TVEFMTF9ESVIvYmluL3BncG9vbCBcCisJLWYgZXRjL3Bn cG9vbC5jb25mIC1tIGYgc3RvcAorY2QgLi4KKworZWNobyAiQ2hlY2tpbmcgc3RhbmRieSBkZXRl Y3RlZCBzaHV0ZG93bi4uLiIKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWdy ZXAgLWEgImlzIHNodXR0aW5nIGRvd24iIFwKKwkJcGdwb29sMS9sb2cvcGdwb29sLmxvZyA+IC9k ZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2NvdW50PSQoKCBz dWNjZXNzX2NvdW50ICsgMSApKQorCQllY2hvICJUZXN0IDQgUEFTU0VEOiBTaHV0ZG93biBkZXRl Y3RlZC4iCisJCWJyZWFrCisJZmkKKwllY2hvICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVwIDIK K2RvbmUKKworaWYgWyAkc3VjY2Vzc19jb3VudCAtbHQgNCBdOyB0aGVuCisJZWNobyAiVGVzdCA0 IEZBSUxFRDogU2h1dGRvd24gbm90IGRldGVjdGVkIgorCS4vc2h1dGRvd25hbGwKKwlleGl0IDEK K2ZpCisKKyMgVGVzdCA1OiBWZXJpZnkgc3RhbmRieSBiZWNhbWUgbmV3IGxlYWRlcgorZWNobyAi PT09IFRlc3QgNTogQ2hlY2tpbmcgc3RhbmRieSB0YWtlcyBvdmVyLi4uID09PSIKK2ZvciBpIGlu IDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWdyZXAgLWEgIkkgYW0gdGhlIGNsdXN0ZXIgbGVh ZGVyIG5vZGUiIFwKKwkJcGdwb29sMS9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJ aWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsg MSApKQorCQllY2hvICJUZXN0IDUgUEFTU0VEOiBTdGFuZGJ5IGJlY2FtZSBsZWFkZXIuIgorCQli cmVhaworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisKK2lm IFsgJHN1Y2Nlc3NfY291bnQgLWx0IDUgXTsgdGhlbgorCWVjaG8gIlRlc3QgNSBGQUlMRUQ6IFN0 YW5kYnkgZGlkIG5vdCBiZWNvbWUgbGVhZGVyIgorCS4vc2h1dGRvd25hbGwKKwlleGl0IDEKK2Zp CisKKyMgVGVzdCA2OiBWZXJpZnkgZ2xvYmFsIGNvbGQgc3RhcnQgd2FzIHRyaWdnZXJlZAorZWNo byAiPT09IFRlc3QgNjogQ2hlY2tpbmcgZ2xvYmFsIGNvbGQgc3RhcnQuLi4gPT09IgorZm9yIGkg aW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAtYSAidHJhY2tfdGFibGVfbXV0YXRp b246IGdsb2JhbCBjb2xkIHN0YXJ0IiBcCisJCXBncG9vbDEvbG9nL3BncG9vbC5sb2cgPiAvZGV2 L251bGwgMj4mMQorCWlmIFsgJD8gPSAwIF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3Vj Y2Vzc19jb3VudCArIDEgKSkKKwkJZWNobyAiVGVzdCA2IFBBU1NFRDogR2xvYmFsIGNvbGQgc3Rh cnQgdHJpZ2dlcmVkLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10gJGkgdGltZXMiCisJ c2xlZXAgMgorZG9uZQorCisjIENsZWFudXAKKy4vc2h1dGRvd25hbGwKKworZWNobyAiIgorZWNo byAiJHN1Y2Nlc3NfY291bnQgb3V0IG9mIDYgc3VjY2Vzc2Z1bCIKKworaWYgdGVzdCAkc3VjY2Vz c19jb3VudCAtZXEgNgordGhlbgorCWVjaG8gIj09PSBBbGwgV2F0Y2hkb2cgVGVzdHMgUEFTU0VE ID09PSIKKwlleGl0IDAKK2ZpCisKK2V4aXQgMQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCA5MzkyMDA5NjUuLjQ2N2VjMTE0YyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTUx OSw2ICs1MTksMTAgQEAgVGFibGVMaWtlQ2xhdXNlCiBUYWJsZVNhbXBsZUNsYXVzZQogVGFyZ2V0 RW50cnkKIFRva2VuaXplZExpbmUKK1RyYWNrVGFibGVNdXRhdGlvbkVudHJ5CitUcmFja1RhYmxl TXV0YXRpb25IYXNoVGFibGUKK1RyYWNrVGFibGVNdXRhdGlvblNobWVtCitUcmFja1RhYmxlTXV0 YXRpb25TdGF0ZQogVHJhbnNhY3Rpb25JZAogVHJhbnNhY3Rpb25TdG10CiBUcmFuc2FjdGlvblN0 bXRLaW5kCmRpZmYgLS1naXQgYS9zcmMvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5j IGIvc3JjL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAuLmU3NzcxZTdiZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy91 dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmMKQEAgLTAsMCArMSw5MDIgQEAKKy8qIC0q LXBnc3FsLWMtKi0gKi8KKy8qCisgKiBwZ3Bvb2w6IGEgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgY29u bmVjdGlvbiBwb29sIHNlcnZlciBmb3IgUG9zdGdyZVNRTAorICogd3JpdHRlbiBieSBUYXRzdW8g SXNoaWkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAyNglQZ1Bvb2wgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5k IGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBh bnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CisgKiBncmFudGVkLCBwcm92aWRl ZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKKyAqIGNvcGll cyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u CisgKiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQg dGhlIG5hbWUgb2YgdGhlCisgKiBhdXRob3Igbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Ig cHVibGljaXR5IHBlcnRhaW5pbmcgdG8KKyAqIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUg d2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorICogcGVybWlzc2lvbi4gVGhlIGF1dGhv ciBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0eSBvZiB0 aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcworICogaXMi IHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIHBvb2xfdHJhY2tf dGFibGVfbXV0YXRpb24uYzogSW4tbWVtb3J5IHRyYWNraW5nIG9mIHJlY2VudGx5CisgKiAgIHdy aXR0ZW4gdGFibGVzIHRvIHByZXZlbnQgc3RhbGUgcmVhZHMgZnJvbSByZXBsaWNhcy4KKyAqCisg KiBCYXNlZCBvbiB0aGUgImxhZ2xlc3MiIGFyY2hpdGVjdHVyZSBmcm9tIFRhaWxvciBCcmFuZHMu CisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1 ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJwb29sLmgi CisjaW5jbHVkZSAicG9vbF9jb25maWcuaCIKKyNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lv bl9jb250ZXh0LmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5o IgorI2luY2x1ZGUgInV0aWxzL2Vsb2cuaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX2lwYy5oIgor I2luY2x1ZGUgInV0aWxzL3BhbGxvYy5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfcmVsY2FjaGUu aCIKKworI2RlZmluZSBEQVRBQkFTRV9UT19PSURfUVVFUlkgXAorCSJTRUxFQ1Qgb2lkIEZST00g cGdfY2F0YWxvZy5wZ19kYXRhYmFzZSIgXAorCSIgV0hFUkUgZGF0bmFtZSA9ICclcyciCisKKy8q CisgKiBIZWxwZXIgbWFjcm86IHRydWUgd2hlbiB0aGUgZmVhdHVyZSBpcyBub3QgYWN0aXZlLgor ICovCisjZGVmaW5lIFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVEKCkgXAorCShwb29sX2Nv bmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gXAorCSBETEJPV19ETUxfQURB UFRJVkVfR0xPQkFMIHx8IFwKKwkgdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gPT0gTlVMTCkK KworLyogLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzCisgKiAtLS0tLS0tLS0t LS0tLS0tCisgKi8KKworLyogUG9pbnRlciB0byBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSAqLwor c3RhdGljIFRyYWNrVGFibGVNdXRhdGlvblNobWVtICp0cmFja190YWJsZV9tdXRhdGlvbl9zaG1l bSA9IE5VTEw7CisKKy8qIFBlci1wcm9jZXNzIGNvbGQgc3RhcnQgdHJhY2tpbmcgKG5vdCBpbiBz aGFyZWQgbWVtb3J5KSAqLworc3RhdGljIHN0cnVjdCB0aW1ldmFsIHByb2Nlc3Nfc3RhcnRfdGlt ZTsKK3N0YXRpYyBib29sIGNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworLyogLS0t LS0tLS0tLS0tLS0tLQorICogSGVscGVyIG1hY3JvcyBmb3IgZmxleGlibGUgYXJyYXlzIGluIHNo YXJlZCBtZW1vcnkKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiBHZXQgcG9pbnRlciB0 byBidWNrZXQgYXJyYXkgaW4gdGFibGUgbWFwICovCisjZGVmaW5lIFRBQkxFX01BUF9CVUNLRVRT KG1hcCkgXAorCSgoaW50ICopKChjaGFyICopKG1hcCkgKyBcCisJCXNpemVvZihUcmFja1RhYmxl TXV0YXRpb25IYXNoVGFibGUpKSkKKworLyogR2V0IHBvaW50ZXIgdG8gZW50cnkgYXJyYXkgaW4g dGFibGUgbWFwICovCisjZGVmaW5lIFRBQkxFX01BUF9FTlRSSUVTKG1hcCkgXAorCSgoVHJhY2tU YWJsZU11dGF0aW9uRW50cnkgKikoKGNoYXIgKikobWFwKSArIFwKKwkJc2l6ZW9mKFRyYWNrVGFi bGVNdXRhdGlvbkhhc2hUYWJsZSkgKyBcCisJCShtYXApLT5udW1fYnVja2V0cyAqIHNpemVvZihp bnQpKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogU2VtYXBob3JlIGxvY2sgaGVscGVycwor ICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbWFw X2xvY2sodm9pZCkKK3sKKwlwb29sX3NlbWFwaG9yZV9sb2NrKFRSQUNLX1RBQkxFX01VVEFUSU9O X1RBQkxFX1NFTSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbWFwX3VubG9jayh2 b2lkKQoreworCXBvb2xfc2VtYXBob3JlX3VubG9jayhUUkFDS19UQUJMRV9NVVRBVElPTl9UQUJM RV9TRU0pOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBIYXNoIGZ1bmN0aW9ucworICog LS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBGTlYtMWEgaGFzaCBmb3IgdGFibGUvZGF0 YWJhc2Ugb2lkIHBhaXIKKyAqLworc3RhdGljIHVpbnQzMgorZm52MWFfaGFzaF90YWJsZV9rZXko aW50IHRhYmxlX29pZCwgaW50IGRib2lkKQoreworCXVpbnQzMgkJaGFzaCA9IDIxNjYxMzYyNjF1 OyAvKiBGTlYgb2Zmc2V0IGJhc2lzICovCisJdWludDMyCQlkYXRhWzJdOworCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmJ5dGVzOworCXNpemVfdAkJaTsKKworCWRhdGFbMF0gPSAodWludDMyKSB0YWJs ZV9vaWQ7CisJZGF0YVsxXSA9ICh1aW50MzIpIGRib2lkOworCWJ5dGVzID0gKGNvbnN0IHVuc2ln bmVkIGNoYXIgKikgZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGF0YSk7IGkrKykK Kwl7CisJCWhhc2ggXj0gYnl0ZXNbaV07CisJCWhhc2ggKj0gMTY3Nzc2MTl1OwkJLyogRk5WIHBy aW1lICovCisJfQorCisJcmV0dXJuIGhhc2g7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAq IFRpbWUgdXRpbGl0aWVzCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEdldCBl bGFwc2VkIHRpbWUgaW4gbWljcm9zZWNvbmRzIGJldHdlZW4gdHdvIHRpbWV2YWxzCisgKi8KK3N0 YXRpYyBpbnQ2NAorZWxhcHNlZF91cyhzdHJ1Y3QgdGltZXZhbCAqc3RhcnQsIHN0cnVjdCB0aW1l dmFsICplbmQpCit7CisJcmV0dXJuICgoaW50NjQpIChlbmQtPnR2X3NlYyAtIHN0YXJ0LT50dl9z ZWMpICogMTAwMDAwMCkKKwkJKyAoZW5kLT50dl91c2VjIC0gc3RhcnQtPnR2X3VzZWMpOworfQor CisvKgorICogR2V0IGN1cnJlbnQgdGltZQorICovCitzdGF0aWMgdm9pZAorZ2V0X2N1cnJlbnRf dGltZShzdHJ1Y3QgdGltZXZhbCAqdHYpCit7CisJZ2V0dGltZW9mZGF5KHR2LCBOVUxMKTsKK30K KworLyogLS0tLS0tLS0tLS0tLS0tLQorICogRGF0YWJhc2Ugb2lkIGxvb2t1cAorICogLS0tLS0t LS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBpbnQKK3RyYWNrX3RhYmxlX211dGF0aW9uX2dldF9k YXRhYmFzZV9vaWRfaW50ZXJuYWwodm9pZCkKK3sKKwlpbnQJCQlvaWQgPSAwOworCXN0YXRpYyBQ T09MX1JFTENBQ0hFICpyZWxjYWNoZTsKKwlQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFja2VuZDsK KwlQT09MX1NFU1NJT05fQ09OVEVYVCAqc2Vzc2lvbl9jb250ZXh0OworCisJLyogU2FmZXR5IGNo ZWNrOiBtdXN0IGhhdmUgc2htZW0gaW5pdGlhbGl6ZWQgKi8KKwlpZiAodHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuIG9pZDsKKworCXNlc3Npb25fY29udGV4dCA9 IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSk7CisJaWYgKHNlc3Npb25fY29udGV4dCA9 PSBOVUxMKQorCQlyZXR1cm4gb2lkOworCisJYmFja2VuZCA9IHNlc3Npb25fY29udGV4dC0+YmFj a2VuZDsKKwlpZiAoYmFja2VuZCA9PSBOVUxMIHx8CisJCU1BSU5fQ09OTkVDVElPTihiYWNrZW5k KSA9PSBOVUxMIHx8CisJCU1BSU5fQ09OTkVDVElPTihiYWNrZW5kKS0+c3AgPT0gTlVMTCkKKwkJ cmV0dXJuIG9pZDsKKworCS8qIEVuc3VyZSBkYXRhYmFzZSBuYW1lIGlzIHZhbGlkICovCisJaWYg KE1BSU5fQ09OTkVDVElPTihiYWNrZW5kKS0+c3AtPmRhdGFiYXNlID09IE5VTEwpCisJCXJldHVy biBvaWQ7CisKKwlpZiAoIXJlbGNhY2hlKQorCXsKKwkJcmVsY2FjaGUgPSBwb29sX2NyZWF0ZV9y ZWxjYWNoZSgKKwkJCQkJCQkJCQlwb29sX2NvbmZpZy0+cmVsY2FjaGVfc2l6ZSwKKwkJCQkJCQkJ CQlEQVRBQkFTRV9UT19PSURfUVVFUlksCisJCQkJCQkJCQkJaW50X3JlZ2lzdGVyX2Z1bmMsCisJ CQkJCQkJCQkJaW50X3VucmVnaXN0ZXJfZnVuYywKKwkJCQkJCQkJCQlmYWxzZSk7CisJCWlmIChy ZWxjYWNoZSA9PSBOVUxMKQorCQl7CisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVycm1zZygidHJh Y2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJCQkiZXJyb3IgY3JlYXRpbmcgcmVsY2FjaGUiKSkp OworCQkJcmV0dXJuIG9pZDsKKwkJfQorCX0KKworCW9pZCA9IChpbnQpIChpbnRwdHJfdCkgcG9v bF9zZWFyY2hfcmVsY2FjaGUoCisJCQkJCQkJCQkJCQlyZWxjYWNoZSwgYmFja2VuZCwKKwkJCQkJ CQkJCQkJCU1BSU5fQ09OTkVDVElPTihiYWNrZW5kKS0+c3AtPmRhdGFiYXNlKTsKKwlyZXR1cm4g b2lkOworfQorCitpbnQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2RhdGFiYXNlX29p ZCh2b2lkKQoreworCXJldHVybiB0cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lk X2ludGVybmFsKCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIFRhYmxlIG11dGF0aW9u IGhhc2ggdGFibGUgb3BlcmF0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisg KiBJbml0aWFsaXplIHRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUKKyAqLworc3RhdGljIHZvaWQK K3RhYmxlX21hcF9pbml0KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLAorCQkJICAg aW50IG51bV9idWNrZXRzLCBpbnQgbWF4X2VudHJpZXMpCit7CisJaW50CQkgICAqYnVja2V0czsK KwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllczsKKwlpbnQJCQlpOworCWludAkJCWlu dmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJbWFwLT5udW1f YnVja2V0cyA9IG51bV9idWNrZXRzOworCW1hcC0+bWF4X2VudHJpZXMgPSBtYXhfZW50cmllczsK KwltYXAtPm51bV9lbnRyaWVzID0gMDsKKwltYXAtPmZyZWVfbGlzdF9oZWFkID0gMDsKKworCWJ1 Y2tldHMgPSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApOworCWVudHJpZXMgPSBUQUJMRV9NQVBfRU5U UklFUyhtYXApOworCisJLyogSW5pdGlhbGl6ZSBhbGwgYnVja2V0cyB0byBlbXB0eSAqLworCWZv ciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKQorCQlidWNrZXRzW2ldID0gaW52YWxpZDsK KworCS8qIEluaXRpYWxpemUgZnJlZSBsaXN0IC0gY2hhaW4gYWxsIGVudHJpZXMgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgbWF4X2VudHJpZXM7IGkrKykKKwl7CisJCWVudHJpZXNbaV0uaW5fdXNlID0g ZmFsc2U7CisJCWVudHJpZXNbaV0ubmV4dCA9IChpIDwgbWF4X2VudHJpZXMgLSAxKSA/CisJCQlp ICsgMSA6IGludmFsaWQ7CisJfQorCisJZXJlcG9ydChERUJVRzEsCisJCQkoZXJybXNnKCJ0cmFj a190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkidGFibGUgbWFwIGluaXQgJWQgYnVja2V0cywgIgor CQkJCQkiJWQgbWF4IGVudHJpZXMiLAorCQkJCQludW1fYnVja2V0cywgbWF4X2VudHJpZXMpKSk7 Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbiBlbnRyeSBmcm9tIHRoZSBmcmVlIGxpc3QKKyAqLwor c3RhdGljIGludAordGFibGVfbWFwX2FsbG9jX2VudHJ5KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hU YWJsZSAqbWFwKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzOworCWludAkJ CWlkeDsKKwlpbnQJCQlpbnZhbGlkID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRF WDsKKworCWVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCisJaWYgKG1hcC0+ZnJl ZV9saXN0X2hlYWQgPT0gaW52YWxpZCkKKwkJcmV0dXJuIGludmFsaWQ7CisKKwlpZHggPSBtYXAt PmZyZWVfbGlzdF9oZWFkOworCW1hcC0+ZnJlZV9saXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0ubmV4 dDsKKwllbnRyaWVzW2lkeF0uaW5fdXNlID0gdHJ1ZTsKKwllbnRyaWVzW2lkeF0ubmV4dCA9IGlu dmFsaWQ7CisJbWFwLT5udW1fZW50cmllcysrOworCisJcmV0dXJuIGlkeDsKK30KKworLyoKKyAq IEZyZWUgYW4gZW50cnkgYmFjayB0byB0aGUgZnJlZSBsaXN0CisgKi8KK3N0YXRpYyB2b2lkCit0 YWJsZV9tYXBfZnJlZV9lbnRyeShUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcCwKKwkJ CQkJIGludCBpZHgpCit7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7CisKKwll bnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKworCWVudHJpZXNbaWR4XS5pbl91c2Ug PSBmYWxzZTsKKwllbnRyaWVzW2lkeF0ubmV4dCA9IG1hcC0+ZnJlZV9saXN0X2hlYWQ7CisJbWFw LT5mcmVlX2xpc3RfaGVhZCA9IGlkeDsKKwltYXAtPm51bV9lbnRyaWVzLS07Cit9CisKKy8qCisg KiBMb29rIHVwIGEgdGFibGUgaW4gdGhlIGhhc2ggdGFibGUuCisgKiBSZXR1cm5zIGVudHJ5IGlu ZGV4IG9yIElOVkFMSURfSU5ERVggaWYgbm90IGZvdW5kLgorICogTXVzdCBiZSBjYWxsZWQgd2l0 aCBsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQKK3RhYmxlX21hcF9sb29rdXAoVHJhY2tUYWJs ZU11dGF0aW9uSGFzaFRhYmxlICptYXAsCisJCQkJIGludCB0YWJsZV9vaWQsIGludCBkYm9pZCwK KwkJCQkgdWludDMyIGhhc2gpCit7CisJaW50CQkgICAqYnVja2V0cyA9IFRBQkxFX01BUF9CVUNL RVRTKG1hcCk7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7CisJaW50CQkJYnVj a2V0ID0gaGFzaCAlIG1hcC0+bnVtX2J1Y2tldHM7CisJaW50CQkJaWR4ID0gYnVja2V0c1tidWNr ZXRdOworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVY OworCisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisKKwl3aGlsZSAoaWR4ICE9 IGludmFsaWQpCisJeworCQlpZiAoZW50cmllc1tpZHhdLmhhc2ggPT0gaGFzaCAmJgorCQkJZW50 cmllc1tpZHhdLnRhYmxlX29pZCA9PSB0YWJsZV9vaWQgJiYKKwkJCWVudHJpZXNbaWR4XS5kYm9p ZCA9PSBkYm9pZCkKKwkJeworCQkJcmV0dXJuIGlkeDsKKwkJfQorCQlpZHggPSBlbnRyaWVzW2lk eF0ubmV4dDsKKwl9CisKKwlyZXR1cm4gaW52YWxpZDsKK30KKworLyoKKyAqIEluc2VydCBvciB1 cGRhdGUgYSB0YWJsZSBlbnRyeS4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkLgor ICovCitzdGF0aWMgdm9pZAordGFibGVfbWFwX2luc2VydChUcmFja1RhYmxlTXV0YXRpb25IYXNo VGFibGUgKm1hcCwKKwkJCQkgaW50IHRhYmxlX29pZCwgaW50IGRib2lkLAorCQkJCSB1aW50MzIg aGFzaCwKKwkJCQkgc3RydWN0IHRpbWV2YWwgKndyaXRlX3RpbWUpCit7CisJaW50CQkgICAqYnVj a2V0cyA9IFRBQkxFX01BUF9CVUNLRVRTKG1hcCk7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkg KmVudHJpZXM7CisJaW50CQkJYnVja2V0ID0gaGFzaCAlIG1hcC0+bnVtX2J1Y2tldHM7CisJaW50 CQkJaWR4OworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lO REVYOworCisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisKKwkvKiBDaGVjayBp ZiBlbnRyeSBhbHJlYWR5IGV4aXN0cyAqLworCWlkeCA9IHRhYmxlX21hcF9sb29rdXAobWFwLCB0 YWJsZV9vaWQsIGRib2lkLCBoYXNoKTsKKwlpZiAoaWR4ICE9IGludmFsaWQpCisJeworCQkvKiBV cGRhdGUgbGFzdCB3cml0ZSB0aW1lOyBrZWVwIGZpcnN0X3dyaXRlX3RpbWUgKi8KKwkJZW50cmll c1tpZHhdLmxhc3Rfd3JpdGVfdGltZSA9ICp3cml0ZV90aW1lOworCQlyZXR1cm47CisJfQorCisJ LyogQWxsb2NhdGUgbmV3IGVudHJ5ICovCisJaWR4ID0gdGFibGVfbWFwX2FsbG9jX2VudHJ5KG1h cCk7CisJaWYgKGlkeCA9PSBpbnZhbGlkKQorCXsKKwkJaW50CQkJYjsKKworCQkvKiBUYWJsZSBp cyBmdWxsIC0gZXZpY3QgZmlyc3Qgbm9uLWVtcHR5IGJ1Y2tldCAqLworCQlmb3IgKGIgPSAwOyBi IDwgbWFwLT5udW1fYnVja2V0czsgYisrKQorCQl7CisJCQlpZiAoYnVja2V0c1tiXSAhPSBpbnZh bGlkKQorCQkJeworCQkJCWludAkJCXZpY3RpbSA9IGJ1Y2tldHNbYl07CisKKwkJCQlidWNrZXRz W2JdID0gZW50cmllc1t2aWN0aW1dLm5leHQ7CisJCQkJdGFibGVfbWFwX2ZyZWVfZW50cnkobWFw LCB2aWN0aW0pOworCQkJCWlkeCA9IHRhYmxlX21hcF9hbGxvY19lbnRyeShtYXApOworCQkJCWJy ZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGlkeCA9PSBpbnZhbGlkKQorCQl7CisJCQllcmVwb3J0 KFdBUk5JTkcsCisJCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJCQkJ ImZhaWxlZCB0byBhbGxvY2F0ZSBlbnRyeSAiCisJCQkJCQkJImZvciBvaWQgJWQgKGRib2lkICVk KSIsCisJCQkJCQkJdGFibGVfb2lkLCBkYm9pZCkpKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwor CS8qIEluaXRpYWxpemUgbmV3IGVudHJ5ICovCisJZW50cmllc1tpZHhdLnRhYmxlX29pZCA9IHRh YmxlX29pZDsKKwllbnRyaWVzW2lkeF0uZGJvaWQgPSBkYm9pZDsKKwllbnRyaWVzW2lkeF0uaGFz aCA9IGhhc2g7CisJZW50cmllc1tpZHhdLmZpcnN0X3dyaXRlX3RpbWUgPSAqd3JpdGVfdGltZTsK KwllbnRyaWVzW2lkeF0ubGFzdF93cml0ZV90aW1lID0gKndyaXRlX3RpbWU7CisKKwkvKiBJbnNl cnQgYXQgaGVhZCBvZiBidWNrZXQgY2hhaW4gKi8KKwllbnRyaWVzW2lkeF0ubmV4dCA9IGJ1Y2tl dHNbYnVja2V0XTsKKwlidWNrZXRzW2J1Y2tldF0gPSBpZHg7CisKKwllcmVwb3J0KERFQlVHMiwK KwkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJCSJtYXJrZWQgb2lkICVk IChkYm9pZCAlZCkgd3JpdHRlbiIsCisJCQkJCXRhYmxlX29pZCwgZGJvaWQpKSk7Cit9CisKKy8q CisgKiBSZW1vdmUgZXhwaXJlZCBlbnRyaWVzIGZyb20gdGhlIHRhYmxlIG1hcC4KKyAqIE11c3Qg YmUgY2FsbGVkIHdpdGggbG9jayBoZWxkLgorICovCitzdGF0aWMgdm9pZAordGFibGVfbWFwX2Ns ZWFudXBfZXhwaXJlZCgKKwkJCQkJCSAgVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICptYXAs IHVpbnQ2NCB0dGxfdXMpCit7CisJaW50CQkgICAqYnVja2V0cyA9IFRBQkxFX01BUF9CVUNLRVRT KG1hcCk7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7CisJc3RydWN0IHRpbWV2 YWwgbm93OworCWludDY0CQltYXhfc3RhbGVfdXM7CisJaW50CQkJcmVtb3ZlZCA9IDA7CisJaW50 CQkJYjsKKwlpbnQJCQlpbnZhbGlkID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRF WDsKKworCWVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCWdldF9jdXJyZW50X3Rp bWUoJm5vdyk7CisKKwltYXhfc3RhbGVfdXMgPSAoaW50NjQpIHBvb2xfY29uZmlnCisJCS0+dHJh Y2tfdGFibGVfbXV0YXRpb25fbWF4X3N0YWxlbmVzcyAqIDEwMDBMTDsKKworCWZvciAoYiA9IDA7 IGIgPCBtYXAtPm51bV9idWNrZXRzOyBiKyspCisJeworCQlpbnQJCSAgICpwcmV2X3B0ciA9ICZi dWNrZXRzW2JdOworCQlpbnQJCQlpZHggPSBidWNrZXRzW2JdOworCisJCXdoaWxlIChpZHggIT0g aW52YWxpZCkKKwkJeworCQkJaW50NjQJCWFnZTsKKwkJCWludDY0CQl0b3RhbF9hZ2U7CisJCQli b29sCQlleHBpcmVkOworCisJCQlhZ2UgPSBlbGFwc2VkX3VzKAorCQkJCQkJCSAmZW50cmllc1tp ZHhdLmxhc3Rfd3JpdGVfdGltZSwgJm5vdyk7CisJCQlleHBpcmVkID0gKGFnZSA+IChpbnQ2NCkg dHRsX3VzKTsKKworCQkJLyoKKwkJCSAqIEFsc28gZXZpY3QgZW50cmllcyB0aGF0IGV4Y2VlZCBt YXhfc3RhbGVuZXNzIGZyb20gZmlyc3Qgd3JpdGUuCisJCQkgKi8KKwkJCWlmICghZXhwaXJlZCAm JiBtYXhfc3RhbGVfdXMgPiAwKQorCQkJeworCQkJCXRvdGFsX2FnZSA9IGVsYXBzZWRfdXMoCisJ CQkJCQkJCQkgICAmZW50cmllc1tpZHhdLmZpcnN0X3dyaXRlX3RpbWUsCisJCQkJCQkJCQkgICAm bm93KTsKKwkJCQlleHBpcmVkID0gKHRvdGFsX2FnZSA+PSBtYXhfc3RhbGVfdXMpOworCQkJfQor CisJCQlpZiAoZXhwaXJlZCkKKwkJCXsKKwkJCQkvKiBFbnRyeSBoYXMgZXhwaXJlZCAtIHJlbW92 ZSBpdCAqLworCQkJCWludAkJCW5leHQgPSBlbnRyaWVzW2lkeF0ubmV4dDsKKworCQkJCSpwcmV2 X3B0ciA9IG5leHQ7CisJCQkJdGFibGVfbWFwX2ZyZWVfZW50cnkobWFwLCBpZHgpOworCQkJCWlk eCA9IG5leHQ7CisJCQkJcmVtb3ZlZCsrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXByZXZf cHRyID0gJmVudHJpZXNbaWR4XS5uZXh0OworCQkJCWlkeCA9IGVudHJpZXNbaWR4XS5uZXh0Owor CQkJfQorCQl9CisJfQorCisJaWYgKHJlbW92ZWQgPiAwKQorCXsKKwkJZXJlcG9ydChERUJVRzEs CisJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJCSJjbGVhbmVkIHVw ICVkIGV4cGlyZWQgZW50cmllcyIsCisJCQkJCQlyZW1vdmVkKSkpOworCX0KK30KKworCisvKiAt LS0tLS0tLS0tLS0tLS0tCisgKiBQdWJsaWMgQVBJIGltcGxlbWVudGF0aW9uCisgKiAtLS0tLS0t LS0tLS0tLS0tCisgKi8KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgdG90YWwgc2hhcmVkIG1lbW9y eSBzaXplIHJlcXVpcmVkCisgKiBmb3IgdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUu CisgKi8KK1NpemUKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6ZSh2b2lkKQor eworCVNpemUJCXNpemUgPSAwOworCWludAkJCXRibF9ia3Q7CisJaW50CQkJdGJsX3N6OworCisJ dGJsX2JrdCA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRz OworCXRibF9zeiA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXpl OworCisJLyogTWFpbiBzdHJ1Y3R1cmUgKi8KKwlzaXplICs9IHNpemVvZihUcmFja1RhYmxlTXV0 YXRpb25TaG1lbSk7CisKKwkvKiBUYWJsZSBtdXRhdGlvbiBoYXNoIHRhYmxlICovCisJc2l6ZSAr PSBzaXplb2YoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlKTsKKwlzaXplICs9IHRibF9ia3Qg KiBzaXplb2YoaW50KTsKKwlzaXplICs9IHRibF9zeiAqIHNpemVvZihUcmFja1RhYmxlTXV0YXRp b25FbnRyeSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVk IG1lbW9yeSBzdHJ1Y3R1cmVzIGZvciB0aGUKKyAqIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1 cmUuICBBbGxvY2F0ZXMgYW5kIHNldHMKKyAqIHVwIHRoZSB0YWJsZSBtYXAgYW5kIHBhcnNlIGNh Y2hlIGluIHNoYXJlZCBtZW1vcnkuCisgKiBDYWxsZWQgb25jZSBmcm9tIHBncG9vbCBtYWluIHBy b2Nlc3MgYXQgc3RhcnR1cC4KKyAqLwordm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9p bml0KHZvaWQpCit7CisjaWZuZGVmIFBPT0xfUFJJVkFURQorCVNpemUJCXNobWVtX3NpemU7CisJ Y2hhcgkgICAqc2htZW1fcHRyOworCVRyYWNrVGFibGVNdXRhdGlvblN0YXRlICpzdDsKKwlpbnQJ CQl0YmxfYmt0OworCWludAkJCXRibF9zejsKKworCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9s b2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0KKwkJRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwl7 CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAi CisJCQkJCQkiZmVhdHVyZSBkaXNhYmxlZCIpKSk7CisJCXJldHVybjsKKwl9CisKKwl0YmxfYmt0 ID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM7CisJdGJs X3N6ID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemU7CisKKwlz aG1lbV9zaXplID0gcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbV9zaXplKCk7CisKKwkv KgorCSAqIEFsbG9jYXRlIGZyb20gdGhlIG1haW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50LiBNZW1v cnkgaXMgemVyb2VkIGJ5CisJICogaW5pdGlhbGl6ZV9zaGFyZWRfbWVtb3J5X21haW5fc2VnbWVu dCgpLgorCSAqLworCXNobWVtX3B0ciA9IHBvb2xfc2hhcmVkX21lbW9yeV9zZWdtZW50X2dldF9j aHVuaygKKwkJCQkJCQkJCQkJCQkgc2htZW1fc2l6ZSk7CisJaWYgKHNobWVtX3B0ciA9PSBOVUxM KQorCXsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlv bjogIgorCQkJCQkJImZhaWxlZCB0byBhbGxvY2F0ZSAlenUgYnl0ZXMiLAorCQkJCQkJc2htZW1f c2l6ZSkpKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFNldCB1cCBwb2ludGVycyB3aXRoaW4gc2hh cmVkIG1lbW9yeSAqLworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID0KKwkJKFRyYWNrVGFi bGVNdXRhdGlvblNobWVtICopIHNobWVtX3B0cjsKKwlzaG1lbV9wdHIgKz0gc2l6ZW9mKFRyYWNr VGFibGVNdXRhdGlvblNobWVtKTsKKworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT50YWJs ZV9tYXAgPQorCQkoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICopIHNobWVtX3B0cjsKKwor CS8qIEluaXRpYWxpemUgdGFibGUgbWFwICovCisJdGFibGVfbWFwX2luaXQoCisJCQkJICAgdHJh Y2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnRhYmxlX21hcCwKKwkJCQkgICB0YmxfYmt0LCB0Ymxf c3opOworCisJLyogSW5pdGlhbGl6ZSBnbG9iYWwgc3RhdGUgKi8KKwlzdCA9ICZ0cmFja190YWJs ZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGU7CisJc3QtPmluaXRpYWxpemVkID0gdHJ1ZTsKKwlzdC0+ Y3VycmVudF90dGxfdXMgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9ERUZBVUxUX1RUTF9VUzsKKwln ZXRfY3VycmVudF90aW1lKCZzdC0+dHRsX2xhc3RfdXBkYXRlZCk7CisJZ2V0X2N1cnJlbnRfdGlt ZSgmc3QtPmxhc3RfY2xlYW51cF90aW1lKTsKKwlzdC0+Z2xvYmFsX2NvbGRfc3RhcnRfdW50aWwu dHZfc2VjID0gMDsKKwlzdC0+Z2xvYmFsX2NvbGRfc3RhcnRfdW50aWwudHZfdXNlYyA9IDA7CisJ c3QtPnN0YXRzX3F1ZXJpZXNfY2hlY2tlZCA9IDA7CisJc3QtPnN0YXRzX2ZvcmNlZF9wcmltYXJ5 ID0gMDsKKwlzdC0+c3RhdHNfYWxsb3dlZF9yZXBsaWNhID0gMDsKKworCWVyZXBvcnQoTE9HLAor CQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJImluaXRpYWxpemVkIHdp dGggJXp1IGJ5dGVzIHNobWVtIiwKKwkJCQkJc2htZW1fc2l6ZSkpKTsKKyNlbmRpZgorfQorCisv KgorICogSW5pdGlhbGl6ZSBwZXItY2hpbGQgcHJvY2VzcyBzdGF0ZS4KKyAqIFJlY29yZHMgdGhl IHByb2Nlc3Mgc3RhcnQgdGltZSBmb3IgY29sZCBzdGFydAorICogcGVyaW9kIHRyYWNraW5nLiAg Q2FsbGVkIHdoZW4gYSBjaGlsZCBwcm9jZXNzIHN0YXJ0cy4KKyAqLwordm9pZAorcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl9jaGlsZF9pbml0KHZvaWQpCit7CisJaW50CQkJZHVyOworCisJaWYg KFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVEKCkpCisJCXJldHVybjsKKworCWdldF9jdXJy ZW50X3RpbWUoJnByb2Nlc3Nfc3RhcnRfdGltZSk7CisJY29sZF9zdGFydF9pbml0aWFsaXplZCA9 IHRydWU7CisJZHVyID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3Rh cnRfZHVyYXRpb247CisKKwllcmVwb3J0KERFQlVHMSwKKwkJCShlcnJtc2coInRyYWNrX3RhYmxl X211dGF0aW9uOiAiCisJCQkJCSJjaGlsZCBpbml0LCBjb2xkIHN0YXJ0ICVkIG1zIiwKKwkJCQkJ ZHVyKSkpOworfQorCisvKgorICogQ2hlY2sgaWYgdGhlIHByb2Nlc3MgaXMgaW4gY29sZCBzdGFy dCBwZXJpb2QuCisgKiBEdXJpbmcgY29sZCBzdGFydCwgYWxsIHF1ZXJpZXMgYXJlIHJvdXRlZCB0 bworICogcHJpbWFyeSB0byBhdm9pZCBzdGFsZSByZWFkcy4gIENoZWNrcyBib3RoCisgKiBwZXIt cHJvY2VzcyBhbmQgZ2xvYmFsICh3YXRjaGRvZykgY29sZCBzdGFydC4KKyAqLworYm9vbAorcG9v bF90cmFja190YWJsZV9tdXRhdGlvbl9pbl9jb2xkX3N0YXJ0KHZvaWQpCit7CisJc3RydWN0IHRp bWV2YWwgbm93OworCWludDY0CQllbGFwc2VkX21zOworCWludAkJCWR1cjsKKwlUcmFja1RhYmxl TXV0YXRpb25TdGF0ZSAqc3Q7CisKKwlpZiAoVFJBQ0tfVEFCTEVfTVVUQVRJT05fRElTQUJMRUQo KSkKKwkJcmV0dXJuIGZhbHNlOworCisJZHVyID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211 dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb247CisJaWYgKGR1ciA8PSAwKQorCQlyZXR1cm4gZmFs c2U7CisKKwlnZXRfY3VycmVudF90aW1lKCZub3cpOworCXN0ID0gJnRyYWNrX3RhYmxlX211dGF0 aW9uX3NobWVtLT5zdGF0ZTsKKworCS8qIENoZWNrIHdhdGNoZG9nLXRyaWdnZXJlZCBnbG9iYWwg Y29sZCBzdGFydCAqLworCWlmIChzdC0+Z2xvYmFsX2NvbGRfc3RhcnRfdW50aWwudHZfc2VjICE9 IDAgJiYKKwkJZWxhcHNlZF91cygmbm93LAorCQkJCSAgICZzdC0+Z2xvYmFsX2NvbGRfc3RhcnRf dW50aWwpID4gMCkKKwl7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qIENoZWNrIHBlci1wcm9j ZXNzIGNvbGQgc3RhcnQgKi8KKwlpZiAoIWNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQpCisJCXJldHVy biBmYWxzZTsKKworCWVsYXBzZWRfbXMgPSBlbGFwc2VkX3VzKCZwcm9jZXNzX3N0YXJ0X3RpbWUs ICZub3cpIC8gMTAwMDsKKworCWlmIChlbGFwc2VkX21zIDwgZHVyKQorCXsKKwkJZXJlcG9ydChE RUJVRzIsCisJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJCSJjb2xk IHN0YXJ0ICglbGQvJWQgbXMpIiwKKwkJCQkJCShsb25nKSBlbGFwc2VkX21zLCBkdXIpKSk7CisJ CXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIFRyaWdnZXIg YSBnbG9iYWwgY29sZCBzdGFydCBmb3IgYWxsIHByb2Nlc3Nlcy4KKyAqIFNldHMgdGhlIGNvbGQg c3RhcnQgZW5kIHRpbWUgaW4gc2hhcmVkIG1lbW9yeS4KKyAqIENhbGxlZCBhZnRlciB3YXRjaGRv ZyBsZWFkZXIgY2hhbmdlIHRvIGZvcmNlIGFsbAorICogcXVlcmllcyB0byBwcmltYXJ5IGR1cmlu ZyB0aGUgdHJhbnNpdGlvbi4KKyAqLwordm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl90 cmlnZ2VyX2dsb2JhbF9jb2xkX3N0YXJ0KHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgbm93Owor CXN0cnVjdCB0aW1ldmFsICp1bnRpbDsKKwlpbnQJCQlkdXI7CisKKwlpZiAoVFJBQ0tfVEFCTEVf TVVUQVRJT05fRElTQUJMRUQoKSkKKwkJcmV0dXJuOworCisJZHVyID0gcG9vbF9jb25maWctPnRy YWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb247CisJaWYgKGR1ciA8PSAwKQor CQlyZXR1cm47CisKKwlnZXRfY3VycmVudF90aW1lKCZub3cpOworCXVudGlsID0gJnRyYWNrX3Rh YmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZQorCQkuZ2xvYmFsX2NvbGRfc3RhcnRfdW50aWw7CisJ KnVudGlsID0gbm93OworCXVudGlsLT50dl9zZWMgKz0gZHVyIC8gMTAwMDsKKwl1bnRpbC0+dHZf dXNlYyArPSAoZHVyICUgMTAwMCkgKiAxMDAwOworCWlmICh1bnRpbC0+dHZfdXNlYyA+PSAxMDAw MDAwKQorCXsKKwkJdW50aWwtPnR2X3NlYyArPSB1bnRpbC0+dHZfdXNlYyAvIDEwMDAwMDA7CisJ CXVudGlsLT50dl91c2VjICU9IDEwMDAwMDA7CisJfQorCisJZXJlcG9ydChMT0csCisJCQkoZXJy bXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkiZ2xvYmFsIGNvbGQgc3RhcnQgZm9y ICVkIG1zIiwKKwkJCQkJZHVyKSkpOworfQorCisvKgorICogQ2hlY2sgaWYgYSB0YWJsZSB3YXMg cmVjZW50bHkgd3JpdHRlbiAoaXMgInN0YWxlIikuCisgKiBSZXR1cm5zIHRydWUgaWYgcmVhZHMg c2hvdWxkIGdvIHRvIHByaW1hcnkgYmVjYXVzZQorICogdGhlIHRhYmxlIHdhcyB3cml0dGVuIHdp dGhpbiB0aGUgY3VycmVudCBUVEwgd2luZG93LgorICovCitib29sCitwb29sX3RyYWNrX3RhYmxl X211dGF0aW9uX3RhYmxlX2lzX3N0YWxlKAorCQkJCQkJCQkJCSBpbnQgdGFibGVfb2lkLCBpbnQg ZGJvaWQpCit7CisJVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICptYXA7CisJc3RydWN0IHRp bWV2YWwgbm93OworCXVpbnQ2NAkJdHRsX3VzOworCXVpbnQzMgkJaGFzaDsKKwlpbnQJCQlpZHg7 CisJYm9vbAkJaXNfc3RhbGUgPSBmYWxzZTsKKworCWlmIChUUkFDS19UQUJMRV9NVVRBVElPTl9E SVNBQkxFRCgpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAodGFibGVfb2lkIDw9IDAgfHwgZGJv aWQgPD0gMCkKKwl7CisJCWlzX3N0YWxlID0gdHJ1ZTsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJ fQorCisJbWFwID0gdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnRhYmxlX21hcDsKKwloYXNo ID0gZm52MWFfaGFzaF90YWJsZV9rZXkodGFibGVfb2lkLCBkYm9pZCk7CisKKwl0YWJsZV9tYXBf bG9jaygpOworCisJaWR4ID0gdGFibGVfbWFwX2xvb2t1cChtYXAsIHRhYmxlX29pZCwgZGJvaWQs IGhhc2gpOworCWlmIChpZHggIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkK Kwl7CisJCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzOworCQlpbnQ2NAkJYWdlOwor CQlpbnQ2NAkJdG90YWxfYWdlOworCQlpbnQ2NAkJbWF4X3N0YWxlX3VzOworCisJCWVudHJpZXMg PSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCQlnZXRfY3VycmVudF90aW1lKCZub3cpOworCQl0 dGxfdXMgPSB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUKKwkJCS5jdXJyZW50X3R0 bF91czsKKworCQlhZ2UgPSBlbGFwc2VkX3VzKAorCQkJCQkJICZlbnRyaWVzW2lkeF0ubGFzdF93 cml0ZV90aW1lLCAmbm93KTsKKwkJaXNfc3RhbGUgPSAoYWdlIDwgKGludDY0KSB0dGxfdXMpOwor CisJCS8qCisJCSAqIEVuZm9yY2UgbWF4X3N0YWxlbmVzcyBoYXJkIGNhcDogbm8gZW50cnkgY2Fu IGZvcmNlIHByaW1hcnkgcm91dGluZworCQkgKiBsb25nZXIgdGhhbiBtYXhfc3RhbGVuZXNzIGZy b20gaXRzIGZpcnN0IHdyaXRlLgorCQkgKi8KKwkJaWYgKGlzX3N0YWxlKQorCQl7CisJCQltYXhf c3RhbGVfdXMgPSAoaW50NjQpIHBvb2xfY29uZmlnCisJCQkJLT50cmFja190YWJsZV9tdXRhdGlv bl9tYXhfc3RhbGVuZXNzCisJCQkJKiAxMDAwTEw7CisJCQlpZiAobWF4X3N0YWxlX3VzID4gMCkK KwkJCXsKKwkJCQl0b3RhbF9hZ2UgPSBlbGFwc2VkX3VzKAorCQkJCQkJCQkJICAgJmVudHJpZXNb aWR4XS5maXJzdF93cml0ZV90aW1lLAorCQkJCQkJCQkJICAgJm5vdyk7CisJCQkJaWYgKHRvdGFs X2FnZSA+PSBtYXhfc3RhbGVfdXMpCisJCQkJCWlzX3N0YWxlID0gZmFsc2U7CisJCQl9CisJCX0K KworCQllcmVwb3J0KERFQlVHMiwKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjog IgorCQkJCQkJIm9pZCAlZCBkYm9pZCAlZCAiCisJCQkJCQkiZWxhcHNlZD0lbGQgdHRsPSVsdSBz dGFsZT0lZCIsCisJCQkJCQl0YWJsZV9vaWQsIGRib2lkLAorCQkJCQkJKGxvbmcpIGFnZSwKKwkJ CQkJCSh1bnNpZ25lZCBsb25nKSB0dGxfdXMsCisJCQkJCQlpc19zdGFsZSkpKTsKKwl9CisKKwl0 YWJsZV9tYXBfdW5sb2NrKCk7CisKK3VwZGF0ZV9zdGF0czoKKwkvKiBVcGRhdGUgc3RhdGlzdGlj cyB1c2luZyBzZW1hcGhvcmUgKi8KKwlpZiAodHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gIT0g TlVMTCkKKwl7CisJCVRyYWNrVGFibGVNdXRhdGlvblN0YXRlICpzdDsKKworCQl0YWJsZV9tYXBf bG9jaygpOworCQlzdCA9ICZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGU7CisJCXN0 LT5zdGF0c19xdWVyaWVzX2NoZWNrZWQrKzsKKwkJaWYgKGlzX3N0YWxlKQorCQkJc3QtPnN0YXRz X2ZvcmNlZF9wcmltYXJ5Kys7CisJCWVsc2UKKwkJCXN0LT5zdGF0c19hbGxvd2VkX3JlcGxpY2Er KzsKKwkJdGFibGVfbWFwX3VubG9jaygpOworCX0KKworCXJldHVybiBpc19zdGFsZTsKK30KKwor LyoKKyAqIE1hcmsgbXVsdGlwbGUgdGFibGVzIGFzIHJlY2VudGx5IHdyaXR0ZW4uCisgKiBDYWxs ZWQgYWZ0ZXIgRE1MIHF1ZXJpZXMgY29tcGxldGUgdG8gcmVjb3JkCisgKiB3aGljaCB0YWJsZXMg d2VyZSBtb2RpZmllZC4KKyAqLwordm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJr X3RhYmxlc193cml0dGVuKAorCQkJCQkJCQkJCQkgIGNvbnN0IGludCAqdGFibGVfb2lkcywgaW50 IG51bV90YWJsZXMsIGludCBkYm9pZCkKK3sKKwlUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUg Km1hcDsKKwlUcmFja1RhYmxlTXV0YXRpb25TdGF0ZSAqc3Q7CisJc3RydWN0IHRpbWV2YWwgbm93 OworCWludAkJCWk7CisKKwlpZiAoVFJBQ0tfVEFCTEVfTVVUQVRJT05fRElTQUJMRUQoKSkKKwkJ cmV0dXJuOworCisJaWYgKG51bV90YWJsZXMgPD0gMCB8fCB0YWJsZV9vaWRzID09IE5VTEwgfHwK KwkJZGJvaWQgPD0gMCkKKwkJcmV0dXJuOworCisJbWFwID0gdHJhY2tfdGFibGVfbXV0YXRpb25f c2htZW0tPnRhYmxlX21hcDsKKwlzdCA9ICZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3Rh dGU7CisJZ2V0X2N1cnJlbnRfdGltZSgmbm93KTsKKworCXRhYmxlX21hcF9sb2NrKCk7CisKKwkv KiBQZXJpb2RpY2FsbHkgY2xlYW4gdXAgZXhwaXJlZCBlbnRyaWVzICovCisJaWYgKG1hcC0+bnVt X2VudHJpZXMgPiBtYXAtPm1heF9lbnRyaWVzICogMyAvIDQpCisJeworCQlpbnQ2NAkJc2luY2Vf Y2xlYW51cDsKKworCQlzaW5jZV9jbGVhbnVwID0gZWxhcHNlZF91cygKKwkJCQkJCQkJICAgJnN0 LT5sYXN0X2NsZWFudXBfdGltZSwgJm5vdyk7CisJCS8qIDEwMG1zIGludGVydmFsICovCisJCWlm IChzaW5jZV9jbGVhbnVwID4gMTAwMDAwKQorCQl7CisJCQl0YWJsZV9tYXBfY2xlYW51cF9leHBp cmVkKAorCQkJCQkJCQkJICBtYXAsIHN0LT5jdXJyZW50X3R0bF91cyk7CisJCQlzdC0+bGFzdF9j bGVhbnVwX3RpbWUgPSBub3c7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3RhYmxl czsgaSsrKQorCXsKKwkJdWludDMyCQloYXNoOworCQlpbnQJCQl0YWJsZV9vaWQgPSB0YWJsZV9v aWRzW2ldOworCisJCWlmICh0YWJsZV9vaWQgPiAwKQorCQl7CisJCQloYXNoID0gZm52MWFfaGFz aF90YWJsZV9rZXkoCisJCQkJCQkJCQkJdGFibGVfb2lkLCBkYm9pZCk7CisJCQl0YWJsZV9tYXBf aW5zZXJ0KG1hcCwgdGFibGVfb2lkLAorCQkJCQkJCSBkYm9pZCwgaGFzaCwgJm5vdyk7CisJCX0K Kwl9CisKKwl0YWJsZV9tYXBfdW5sb2NrKCk7Cit9CisKKy8qCisgKiBNYXJrIGEgc2luZ2xlIHRh YmxlIGFzIHJlY2VudGx5IHdyaXR0ZW4uCisgKi8KK3ZvaWQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0 YXRpb25fbWFya190YWJsZV93cml0dGVuKAorCQkJCQkJCQkJCQkgaW50IHRhYmxlX29pZCwgaW50 IGRib2lkKQoreworCWlmICh0YWJsZV9vaWQgPiAwICYmIGRib2lkID4gMCkKKwl7CisJCWNvbnN0 IGludAl0YWJsZXNbMV0gPSB7dGFibGVfb2lkfTsKKworCQlwb29sX3RyYWNrX3RhYmxlX211dGF0 aW9uX21hcmtfdGFibGVzX3dyaXR0ZW4oCisJCQkJCQkJCQkJCQkJICB0YWJsZXMsIDEsIGRib2lk KTsKKwl9Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIHN0YWxlbmVzcyBUVEwgYmFzZWQgb24gb2Jz ZXJ2ZWQKKyAqIHJlcGxpY2F0aW9uIGRlbGF5LiAgTmV3IFRUTCA9IGRlbGF5ICogZmFjdG9yLAor ICogY2xhbXBlZCB0byBbZGVmYXVsdF90dGwsIDEgaG91cl0uCisgKi8KK3ZvaWQKK3Bvb2xfdHJh Y2tfdGFibGVfbXV0YXRpb25fdXBkYXRlX3R0bCh1aW50NjQgZGVsYXlfdXMpCit7CisJdWludDY0 CQluZXdfdHRsOworCWRvdWJsZQkJZmFjdG9yOworCVRyYWNrVGFibGVNdXRhdGlvblN0YXRlICpz dDsKKworCWlmIChUUkFDS19UQUJMRV9NVVRBVElPTl9ESVNBQkxFRCgpKQorCQlyZXR1cm47CisK KwlmYWN0b3IgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjsK KwluZXdfdHRsID0gKHVpbnQ2NCkgKGRlbGF5X3VzICogZmFjdG9yKTsKKwlpZiAobmV3X3R0bCA8 IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RFRkFVTFRfVFRMX1VTKQorCQluZXdfdHRsID0gVFJBQ0tf VEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVM7CisKKwkvKiBNYXhpbXVtIFRUTCBvZiAxIGhv dXIgKi8KKwlpZiAobmV3X3R0bCA+IDM2MDBVTEwgKiAxMDAwMDAwVUxMKQorCQluZXdfdHRsID0g MzYwMFVMTCAqIDEwMDAwMDBVTEw7CisKKwlzdCA9ICZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1l bS0+c3RhdGU7CisJc3QtPmN1cnJlbnRfdHRsX3VzID0gbmV3X3R0bDsKKwlnZXRfY3VycmVudF90 aW1lKCZzdC0+dHRsX2xhc3RfdXBkYXRlZCk7CisKKwllcmVwb3J0KERFQlVHMSwKKwkJCShlcnJt c2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJCSJUVEw9JWx1IHVzIChkZWxheT0lbHUg ZmFjdG9yPSUuMWYpIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpIG5ld190dGwsCisJCQkJCSh1bnNp Z25lZCBsb25nKSBkZWxheV91cywKKwkJCQkJZmFjdG9yKSkpOworfQotLSAKMi41NC4wCgo= --000000000000d51d2e065293349a--