Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lU497-0000Ug-Hp for pgsql-hackers@arkaria.postgresql.org; Wed, 07 Apr 2021 09:06:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lU496-0006tV-GP for pgsql-hackers@arkaria.postgresql.org; Wed, 07 Apr 2021 09:06:44 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lU495-0006tO-LU for pgsql-hackers@lists.postgresql.org; Wed, 07 Apr 2021 09:06:44 +0000 Received: from smtp-fw-4101.amazon.com ([72.21.198.25]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lU48v-0008Eq-24 for pgsql-hackers@postgresql.org; Wed, 07 Apr 2021 09:06:42 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1617786393; x=1649322393; h=to:cc:references:from:message-id:date:mime-version: in-reply-to:subject; bh=9fJpQ5wSMBbAArW3p6qRDJHoceEL+I+TV0DGOhDU16g=; b=Y40UbOgcwOhUbzU4JS9NqdyPdxkRG4El2TURtS3IgEDpu2H6dSOzqzzr D0cWnsTOHEZ1RsALy+kqetUWK2aWBopxpr6AXxplwbcoRZlZCzPEdzwM3 cek3SWoVJWAyWNaLenOG8FC8ystiu14ImWdeV57c6Wo/unSrms41mdu9i k=; X-Amazon-filename: v16-0001-Allow-logical-decoding-on-standby.patch, v16-0005-Doc-changes-describing-details-about-logical-dec.patch, v16-0004-New-TAP-test-for-logical-decoding-on-standby.patch, v16-0003-Handle-logical-slot-conflicts-on-standby.patch, v16-0002-Add-info-in-WAL-records-in-preparation-for-logic.patch X-IronPort-AV: E=Sophos;i="5.82,203,1613433600"; d="scan'208,223";a="99949447" Subject: Re: Minimal logical decoding on standbys Received: from iad12-co-svc-p1-lb1-vlan2.amazon.com (HELO email-inbound-relay-1d-5dd976cd.us-east-1.amazon.com) ([10.43.8.2]) by smtp-border-fw-out-4101.iad4.amazon.com with ESMTP; 07 Apr 2021 09:06:23 +0000 Received: from EX13D03EUC003.ant.amazon.com (iad12-ws-svc-p26-lb9-vlan3.iad.amazon.com [10.40.163.38]) by email-inbound-relay-1d-5dd976cd.us-east-1.amazon.com (Postfix) with ESMTPS id 309E1A1965; Wed, 7 Apr 2021 09:06:20 +0000 (UTC) Received: from 38f9d36c4abb.ant.amazon.com (10.43.160.48) by EX13D03EUC003.ant.amazon.com (10.43.164.192) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 7 Apr 2021 09:06:16 +0000 To: Andres Freund CC: , Alvaro Herrera , tushar , "[pgdg] Robert Haas" , Amit Khandekar , Rahila Syed , pgsql-hackers References: <96644a03-0b4d-e0a6-2124-0bc37e5b54fb@amazon.com> <842d60ce-99e6-f35e-8c92-0cd49381326e@amazon.com> <6b9168e5-6a29-7fda-8903-cd50563fa84c@amazon.com> <20210406180231.qsnkyrgrm7gtxb73@alap3.anarazel.de> From: "Drouvot, Bertrand" Message-ID: Date: Wed, 7 Apr 2021 11:06:11 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: <20210406180231.qsnkyrgrm7gtxb73@alap3.anarazel.de> Content-Type: multipart/mixed; boundary="------------C4FC6AF2A8522BE3AE2F182D" Content-Language: en-US X-Originating-IP: [10.43.160.48] X-ClientProxiedBy: EX13D15UWB002.ant.amazon.com (10.43.161.9) To EX13D03EUC003.ant.amazon.com (10.43.164.192) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --------------C4FC6AF2A8522BE3AE2F182D Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Hi Andres, On 4/6/21 8:02 PM, Andres Freund wrote: > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you can confirm the sender and know the content is safe. > > > > Hi, > > On 2021-04-06 14:30:29 +0200, Drouvot, Bertrand wrote: >> From 827295f74aff9c627ee722f541a6c7cc6d4133cf Mon Sep 17 00:00:00 2001 >> From: bdrouvotAWS >> Date: Tue, 6 Apr 2021 11:59:23 +0000 >> Subject: [PATCH v15 1/5] Allow logical decoding on standby. >> >> Allow a logical slot to be created on standby. Restrict its usage >> or its creation if wal_level on primary is less than logical. >> During slot creation, it's restart_lsn is set to the last replayed >> LSN. Effectively, a logical slot creation on standby waits for an >> xl_running_xact record to arrive from primary. Conflicting slots >> would be handled in next commits. >> >> Andres Freund and Amit Khandekar. > I think more people have worked on this by now... > > Does this strike you as an accurate description? > > Author: Andres Freund (in an older version), Amit Khandekar, Bertrand Drouvot > Reviewed-By: Bertrand Drouvot, Andres Freund, Robert Haas > >> --- a/src/backend/replication/logical/logical.c >> +++ b/src/backend/replication/logical/logical.c >> @@ -119,23 +119,22 @@ CheckLogicalDecodingRequirements(void) >> (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), >> errmsg("logical decoding requires a database connection"))); >> >> - /* ---- >> - * TODO: We got to change that someday soon... >> - * >> - * There's basically three things missing to allow this: >> - * 1) We need to be able to correctly and quickly identify the timeline a >> - * LSN belongs to >> - * 2) We need to force hot_standby_feedback to be enabled at all times so >> - * the primary cannot remove rows we need. >> - * 3) support dropping replication slots referring to a database, in >> - * dbase_redo. There can't be any active ones due to HS recovery >> - * conflicts, so that should be relatively easy. >> - * ---- >> - */ >> if (RecoveryInProgress()) >> - ereport(ERROR, >> - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), >> - errmsg("logical decoding cannot be used while in recovery"))); > Maybe I am just missing something right now, and maybe I'm being a bit > overly pedantic, but I don't immediately see how 0001 is correct without > 0002 and 0003? I think it'd be better to first introduce the conflict > information, then check for conflicts, and only after that allow > decoding on standbys? > > >> diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c >> index 6f8810e149..6a21cba362 100644 >> --- a/src/backend/access/transam/xlog.c >> +++ b/src/backend/access/transam/xlog.c >> @@ -5080,6 +5080,17 @@ LocalProcessControlFile(bool reset) >> ReadControlFile(); >> } >> >> +/* >> + * Get the wal_level from the control file. For a standby, this value should be >> + * considered as its active wal_level, because it may be different from what >> + * was originally configured on standby. >> + */ >> +WalLevel >> +GetActiveWalLevel(void) >> +{ >> + return ControlFile->wal_level; >> +} >> + > This strikes me as error-prone - there's nothing in the function name > that this should mainly (only?) be used during recovery... > > >> + if (SlotIsPhysical(slot)) >> + restart_lsn = GetRedoRecPtr(); >> + else if (RecoveryInProgress()) >> + { >> + restart_lsn = GetXLogReplayRecPtr(NULL); >> + /* >> + * Replay pointer may point one past the end of the record. If that >> + * is a XLOG page boundary, it will not be a valid LSN for the >> + * start of a record, so bump it up past the page header. >> + */ >> + if (!XRecOffIsValid(restart_lsn)) >> + { >> + if (restart_lsn % XLOG_BLCKSZ != 0) >> + elog(ERROR, "invalid replay pointer"); >> + >> + /* For the first page of a segment file, it's a long header */ >> + if (XLogSegmentOffset(restart_lsn, wal_segment_size) == 0) >> + restart_lsn += SizeOfXLogLongPHD; >> + else >> + restart_lsn += SizeOfXLogShortPHD; >> + } >> + } > This seems like a layering violation to me. I don't think stuff like > this should be outside of xlog[reader].c, and definitely not in > ReplicationSlotReserveWal(). > > Relevant discussion (which totally escaped my mind): > https://postgr.es/m/CAJ3gD9csOr0LoYoMK9NnfBk0RZmvHXcJAFWFd2EuL%3DNOfz7PVA%40mail.gmail.com > > >> + else >> + restart_lsn = GetXLogInsertRecPtr(); >> + >> + SpinLockAcquire(&slot->mutex); >> + slot->data.restart_lsn = restart_lsn; >> + SpinLockRelease(&slot->mutex); >> + >> if (!RecoveryInProgress() && SlotIsLogical(slot)) >> { >> XLogRecPtr flushptr; >> >> - /* start at current insert position */ >> - restart_lsn = GetXLogInsertRecPtr(); >> - SpinLockAcquire(&slot->mutex); >> - slot->data.restart_lsn = restart_lsn; >> - SpinLockRelease(&slot->mutex); >> - >> /* make sure we have enough information to start */ >> flushptr = LogStandbySnapshot(); >> >> /* and make sure it's fsynced to disk */ >> XLogFlush(flushptr); >> } >> - else >> - { >> - restart_lsn = GetRedoRecPtr(); >> - SpinLockAcquire(&slot->mutex); >> - slot->data.restart_lsn = restart_lsn; >> - SpinLockRelease(&slot->mutex); >> - } >> >> /* prevent WAL removal as fast as possible */ >> ReplicationSlotsComputeRequiredLSN(); > I think I'd move the LogStandbySnapshot() piece out of the entire > loop. There's no reason for logging multiple ones if we then just end up > failing because of the XLogGetLastRemovedSegno() check. > > >> diff --git a/src/include/access/heapam_xlog.h b/src/include/access/heapam_xlog.h >> index 178d49710a..6c4c26c2fe 100644 >> --- a/src/include/access/heapam_xlog.h >> +++ b/src/include/access/heapam_xlog.h >> @@ -239,6 +239,7 @@ typedef struct xl_heap_update >> */ >> typedef struct xl_heap_clean >> { >> + bool onCatalogTable; >> TransactionId latestRemovedXid; >> uint16 nredirected; >> uint16 ndead; >> @@ -254,6 +255,7 @@ typedef struct xl_heap_clean >> */ >> typedef struct xl_heap_cleanup_info >> { >> + bool onCatalogTable; >> RelFileNode node; >> TransactionId latestRemovedXid; >> } xl_heap_cleanup_info; >> @@ -334,6 +336,7 @@ typedef struct xl_heap_freeze_tuple >> */ >> typedef struct xl_heap_freeze_page >> { >> + bool onCatalogTable; >> TransactionId cutoff_xid; >> uint16 ntuples; >> } xl_heap_freeze_page; >> @@ -348,6 +351,7 @@ typedef struct xl_heap_freeze_page >> */ >> typedef struct xl_heap_visible >> { >> + bool onCatalogTable; >> TransactionId cutoff_xid; >> uint8 flags; >> } xl_heap_visible; > Reminder to self: This needs a WAL version bump. > >> diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h >> index 9a3a03e520..3405070d63 100644 >> --- a/src/include/utils/rel.h >> +++ b/src/include/utils/rel.h >> @@ -16,6 +16,7 @@ >> >> #include "access/tupdesc.h" >> #include "access/xlog.h" >> +#include "catalog/catalog.h" >> #include "catalog/pg_class.h" >> #include "catalog/pg_index.h" >> #include "catalog/pg_publication.h" > Not clear why this is in this patch? > > > >> diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c >> index 5ba776e789..03c5dbea48 100644 >> --- a/src/backend/postmaster/pgstat.c >> +++ b/src/backend/postmaster/pgstat.c >> @@ -2928,6 +2928,24 @@ pgstat_send_archiver(const char *xlog, bool failed) >> pgstat_send(&msg, sizeof(msg)); >> } >> >> +/* ---------- >> + * pgstat_send_droplogicalslot() - >> + * >> + * Tell the collector about a logical slot being dropped >> + * due to conflict. >> + * ---------- >> + */ >> +void >> +pgstat_send_droplogicalslot(Oid dbOid) >> +{ >> + PgStat_MsgRecoveryConflict msg; >> + >> + pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_RECOVERYCONFLICT); >> + msg.m_databaseid = dbOid; >> + msg.m_reason = PROCSIG_RECOVERY_CONFLICT_LOGICALSLOT; >> + pgstat_send(&msg, sizeof(msg)); >> +} > Why do we have this in adition to pgstat_report_replslot_drop()? ISTM > that we should instead add a reason parameter to > pgstat_report_replslot_drop()? > > >> +/* >> + * Resolve recovery conflicts with logical slots. >> + * >> + * When xid is valid, it means that rows older than xid might have been >> + * removed. > I don't think the past tense is correct - the rows better not be removed > yet on the standby, otherwise we'd potentially do something random in > decoding. > > >> diff --git a/src/test/recovery/t/024_standby_logical_decoding_xmins.pl b/src/test/recovery/t/024_standby_logical_decoding_xmins.pl >> new file mode 100644 >> index 0000000000..d654d79526 >> --- /dev/null >> +++ b/src/test/recovery/t/024_standby_logical_decoding_xmins.pl >> @@ -0,0 +1,272 @@ >> +# logical decoding on a standby : ensure xmins are appropriately updated >> + >> +use strict; >> +use warnings; >> + >> +use PostgresNode; >> +use TestLib; >> +use Test::More tests => 23; >> +use RecursiveCopy; >> +use File::Copy; >> +use Time::HiRes qw(usleep); > Several of these don't actually seem to be used? > > >> +######################## >> +# Initialize master node >> +######################## > (I'll rename these to primary/replica) > > >> +$node_master->init(allows_streaming => 1, has_archiving => 1); >> +$node_master->append_conf('postgresql.conf', q{ >> +wal_level = 'logical' >> +max_replication_slots = 4 >> +max_wal_senders = 4 >> +log_min_messages = 'debug2' >> +log_error_verbosity = verbose >> +# very promptly terminate conflicting backends >> +max_standby_streaming_delay = '2s' >> +}); > Why is this done on the primary, rather than on the standby? > > >> +################################ >> +# Catalog xmins should advance after standby logical slot fetches the changes. >> +################################ >> + >> +# Ideally we'd just hold catalog_xmin, but since hs_feedback currently uses the slot, >> +# we hold down xmin. > I don't know what that means. > > >> +$node_master->safe_psql('postgres', qq[CREATE TABLE catalog_increase_1();]); >> +$node_master->safe_psql('postgres', 'CREATE TABLE test_table(id serial primary key, blah text)'); >> +for my $i (0 .. 2000) >> +{ >> + $node_master->safe_psql('postgres', qq[INSERT INTO test_table(blah) VALUES ('entry $i')]); >> +} > Forking 2000 psql processes is pretty expensive, especially on slower > machines. What is this supposed to test? > > >> +($ret, $stdout, $stderr) = $node_standby->psql('postgres', >> + qq[SELECT data FROM pg_logical_slot_get_changes('$standby_slotname', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'include-timestamp', '0')]); >> +is($ret, 0, 'replay of big series succeeded'); >> +isnt($stdout, '', 'replayed some rows'); > Nothing is being replayed... > > > >> +###################### >> +# Upstream oldestXid should not go past downstream catalog_xmin >> +###################### >> + >> +# First burn some xids on the master in another DB, so we push the master's >> +# nextXid ahead. >> +foreach my $i (1 .. 100) >> +{ >> + $node_master->safe_psql('postgres', 'SELECT txid_current()'); >> +} >> + >> +# Force vacuum freeze on the master and ensure its oldestXmin doesn't advance >> +# past our needed xmin. The only way we have visibility into that is to force >> +# a checkpoint. >> +$node_master->safe_psql('postgres', "UPDATE pg_database SET datallowconn = true WHERE datname = 'template0'"); >> +foreach my $dbname ('template1', 'postgres', 'postgres', 'template0') >> +{ >> + $node_master->safe_psql($dbname, 'VACUUM FREEZE'); >> +} >> +$node_master->safe_psql('postgres', 'CHECKPOINT'); >> +IPC::Run::run(['pg_controldata', $node_master->data_dir()], '>', \$stdout) >> + or die "pg_controldata failed with $?"; >> +my @checkpoint = split('\n', $stdout); >> +my $oldestXid = ''; >> +foreach my $line (@checkpoint) >> +{ >> + if ($line =~ qr/^Latest checkpoint's oldestXID:\s+(\d+)/) >> + { >> + $oldestXid = $1; >> + } >> +} >> +die 'no oldestXID found in checkpoint' unless $oldestXid; >> + >> +cmp_ok($oldestXid, "<=", $node_standby->slot($standby_slotname)->{'catalog_xmin'}, >> + 'upstream oldestXid not past downstream catalog_xmin with hs_feedback on'); >> + >> +$node_master->safe_psql('postgres', >> + "UPDATE pg_database SET datallowconn = false WHERE datname = 'template0'"); >> + > I am thinking of removing this test. It doesn't seem to test anything > really related to the issue at hand, and seems complicated (needing to > update datallowcon, manually triggering checkpoints, parsing > pg_controldata output). > > >> +# Fetch xmin columns from slot's pg_replication_slots row, after waiting for >> +# given boolean condition to be true to ensure we've reached a quiescent state >> +sub wait_for_xmins >> +{ >> + my ($node, $slotname, $check_expr) = @_; >> + >> + $node->poll_query_until( >> + 'postgres', qq[ >> + SELECT $check_expr >> + FROM pg_catalog.pg_replication_slots >> + WHERE slot_name = '$slotname'; >> + ]) or die "Timed out waiting for slot xmins to advance"; >> +} >> + >> +# Verify that pg_stat_database_conflicts.confl_logicalslot has been updated >> +sub check_confl_logicalslot >> +{ >> + ok( $node_standby->poll_query_until( >> + 'postgres', >> + "select (confl_logicalslot = 2) from pg_stat_database_conflicts where datname = 'testdb'", 't'), >> + 'confl_logicalslot updated') or die "Timed out waiting confl_logicalslot to be updated"; >> +} >> + > Given that this hardcodes a specific number of conflicting slots etc, > there doesn't seem much point in making this a function... > > >> +# Acquire one of the standby logical slots created by create_logical_slots() >> +sub make_slot_active >> +{ >> + my $slot_user_handle; >> + >> + # make sure activeslot is in use >> + print "starting pg_recvlogical\n"; >> + $slot_user_handle = IPC::Run::start(['pg_recvlogical', '-d', $node_standby->connstr('testdb'), '-S', 'activeslot', '-f', '-', '--no-loop', '--start'], '>', \$stdout, '2>', \$stderr); >> + >> + while (!$node_standby->slot('activeslot')->{'active_pid'}) >> + { >> + usleep(100_000); >> + print "waiting for slot to become active\n"; >> + } >> + return $slot_user_handle; >> +} > It's a bad idea to not have timeouts in things like this - if there's a > problem, it'll lead to the test never returning. Things like > poll_query_until() have timeouts to deal with this, but this doesn't. > > >> +# Check if all the slots on standby are dropped. These include the 'activeslot' >> +# that was acquired by make_slot_active(), and the non-active 'dropslot'. >> +sub check_slots_dropped >> +{ >> + my ($slot_user_handle) = @_; >> + my $return; >> + >> + is($node_standby->slot('dropslot')->{'slot_type'}, '', 'dropslot on standby dropped'); >> + is($node_standby->slot('activeslot')->{'slot_type'}, '', 'activeslot on standby dropped'); >> + >> + # our client should've terminated in response to the walsender error >> + eval { >> + $slot_user_handle->finish; >> + }; >> + $return = $?; >> + cmp_ok($return, "!=", 0, "pg_recvlogical exited non-zero\n"); >> + if ($return) { >> + like($stderr, qr/conflict with recovery/, 'recvlogical recovery conflict'); >> + like($stderr, qr/must be dropped/, 'recvlogical error detail'); >> + } > Why do we need to use eval{} for things like checking if a program > finished? > > >> @@ -297,6 +297,24 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU >> may consume changes from a slot at any given time. >> >> >> + >> + A logical replication slot can also be created on a hot standby. To prevent >> + VACUUM from removing required rows from the system >> + catalogs, hot_standby_feedback should be set on the >> + standby. In spite of that, if any required rows get removed, the slot gets >> + dropped. Existing logical slots on standby also get dropped if wal_level >> + on primary is reduced to less than 'logical'. >> + > I think this should add that it's very advisable to use a physical slot > between primary and standby. Otherwise hot_standby_feedback will work, > but only while the connection is alive - as soon as it breaks, a node > gets restarted, ... > > Greetings, > > Andres Freund Thanks for your feedback!, I'll look at it. But prior to that, I am sharing v16 (a rebase of v15 needed due to 8523492d4e). Bertrand --------------C4FC6AF2A8522BE3AE2F182D Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="v16-0001-Allow-logical-decoding-on-standby.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v16-0001-Allow-logical-decoding-on-standby.patch" RnJvbSA5NDc1NWQzY2Y2YzczMGJhM2IxN2ZlY2QzMjhiMDdiZWI0YmFlZTY2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCZXJ0cmFuZCBEcm91dm90IDxiZHJvdXZvdEBhbWF6 b24uY29tPgpEYXRlOiBXZWQsIDcgQXByIDIwMjEgMDc6NDQ6MTcgKzAwMDAKU3ViamVjdDog W1BBVENIIHYxNiAxLzVdIEFsbG93IGxvZ2ljYWwgZGVjb2Rpbmcgb24gc3RhbmRieS4KCkFs bG93IGEgbG9naWNhbCBzbG90IHRvIGJlIGNyZWF0ZWQgb24gc3RhbmRieS4gUmVzdHJpY3Qg aXRzIHVzYWdlCm9yIGl0cyBjcmVhdGlvbiBpZiB3YWxfbGV2ZWwgb24gcHJpbWFyeSBpcyBs ZXNzIHRoYW4gbG9naWNhbC4KRHVyaW5nIHNsb3QgY3JlYXRpb24sIGl0J3MgcmVzdGFydF9s c24gaXMgc2V0IHRvIHRoZSBsYXN0IHJlcGxheWVkCkxTTi4gRWZmZWN0aXZlbHksIGEgbG9n aWNhbCBzbG90IGNyZWF0aW9uIG9uIHN0YW5kYnkgd2FpdHMgZm9yIGFuCnhsX3J1bm5pbmdf eGFjdCByZWNvcmQgdG8gYXJyaXZlIGZyb20gcHJpbWFyeS4gQ29uZmxpY3Rpbmcgc2xvdHMK d291bGQgYmUgaGFuZGxlZCBpbiBuZXh0IGNvbW1pdHMuCgpBbmRyZXMgRnJldW5kIGFuZCBB bWl0IEtoYW5kZWthci4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMg ICAgICAgICB8IDExICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYyAgfCAyMiArKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbG9naWNhbC5jIHwgMzcgKysrKysrKysrKystLS0tLS0tLS0KIHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAgICAgICAgIHwgNTggKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMgICAg ICAgfCAxMCArKystLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggICAgICAgICAgICAg ICAgIHwgIDEgKwogNiBmaWxlcyBjaGFuZ2VkLCA5OSBpbnNlcnRpb25zKCspLCA0MCBkZWxl dGlvbnMoLSkKICAgNS42JSBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS8KICA0NS43JSBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsLwogIDQ3LjclIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uLwoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCBjMWQ0NDE1 YTQzLi5iMzM1YTI2MmUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC01 MDgwLDYgKzUwODAsMTcgQEAgTG9jYWxQcm9jZXNzQ29udHJvbEZpbGUoYm9vbCByZXNldCkK IAlSZWFkQ29udHJvbEZpbGUoKTsKIH0KIAorLyoKKyAqIEdldCB0aGUgd2FsX2xldmVsIGZy b20gdGhlIGNvbnRyb2wgZmlsZS4gRm9yIGEgc3RhbmRieSwgdGhpcyB2YWx1ZSBzaG91bGQg YmUKKyAqIGNvbnNpZGVyZWQgYXMgaXRzIGFjdGl2ZSB3YWxfbGV2ZWwsIGJlY2F1c2UgaXQg bWF5IGJlIGRpZmZlcmVudCBmcm9tIHdoYXQKKyAqIHdhcyBvcmlnaW5hbGx5IGNvbmZpZ3Vy ZWQgb24gc3RhbmRieS4KKyAqLworV2FsTGV2ZWwKK0dldEFjdGl2ZVdhbExldmVsKHZvaWQp Cit7CisJcmV0dXJuIENvbnRyb2xGaWxlLT53YWxfbGV2ZWw7Cit9CisKIC8qCiAgKiBJbml0 aWFsaXphdGlvbiBvZiBzaGFyZWQgbWVtb3J5IGZvciBYTE9HCiAgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCmluZGV4IDlhYWI3MTM2ODQuLjBkMTgy YWMyMTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVj b2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpA QCAtMjE1LDExICsyMTUsMzEgQEAgRGVjb2RlWExvZ09wKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogCQkJICogY2FuIHJlc3RhcnQgZnJv bSB0aGVyZS4KIAkJCSAqLwogCQkJYnJlYWs7CisJCWNhc2UgWExPR19QQVJBTUVURVJfQ0hB TkdFOgorCQl7CisJCQl4bF9wYXJhbWV0ZXJfY2hhbmdlICp4bHJlYyA9CisJCQkJKHhsX3Bh cmFtZXRlcl9jaGFuZ2UgKikgWExvZ1JlY0dldERhdGEoYnVmLT5yZWNvcmQpOworCisJCQkv KgorCQkJICogSWYgd2FsX2xldmVsIG9uIHByaW1hcnkgaXMgcmVkdWNlZCB0byBsZXNzIHRo YW4gbG9naWNhbCwgdGhlbiB3ZQorCQkJICogd2FudCB0byBwcmV2ZW50IGV4aXN0aW5nIGxv Z2ljYWwgc2xvdHMgZnJvbSBiZWluZyB1c2VkLgorCQkJICogRXhpc3RpbmcgbG9naWNhbCBz bG90cyBvbiBzdGFuZGJ5IGdldCBkcm9wcGVkIHdoZW4gdGhpcyBXQUwKKwkJCSAqIHJlY29y ZCBpcyByZXBsYXllZDsgYW5kIGZ1cnRoZXIsIHNsb3QgY3JlYXRpb24gZmFpbHMgd2hlbiB0 aGUKKwkJCSAqIHdhbCBsZXZlbCBpcyBub3Qgc3VmZmljaWVudDsgYnV0IGFsbCB0aGVzZSBv cGVyYXRpb25zIGFyZSBub3QKKwkJCSAqIHN5bmNocm9uaXplZCwgc28gYSBsb2dpY2FsIHNs b3QgbWF5IGNyZWVwIGluIHdoaWxlIHRoZSB3YWxfbGV2ZWwKKwkJCSAqIGlzIGJlaW5nIHJl ZHVjZWQuIEhlbmNlIHRoaXMgZXh0cmEgY2hlY2suCisJCQkgKi8KKwkJCWlmICh4bHJlYy0+ d2FsX2xldmVsIDwgV0FMX0xFVkVMX0xPR0lDQUwpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUp LAorCQkJCQkJIGVycm1zZygibG9naWNhbCBkZWNvZGluZyBvbiBzdGFuZGJ5IHJlcXVpcmVz ICIKKwkJCQkJCQkJIndhbF9sZXZlbCA+PSBsb2dpY2FsIG9uIG1hc3RlciIpKSk7CisJCQli cmVhazsKKwkJfQogCQljYXNlIFhMT0dfTk9PUDoKIAkJY2FzZSBYTE9HX05FWFRPSUQ6CiAJ CWNhc2UgWExPR19TV0lUQ0g6CiAJCWNhc2UgWExPR19CQUNLVVBfRU5EOgotCQljYXNlIFhM T0dfUEFSQU1FVEVSX0NIQU5HRToKIAkJY2FzZSBYTE9HX1JFU1RPUkVfUE9JTlQ6CiAJCWNh c2UgWExPR19GUFdfQ0hBTkdFOgogCQljYXNlIFhMT0dfRlBJX0ZPUl9ISU5UOgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwppbmRleCAyZjY4MDM2Mzdi Li5jNmQxMWMwNzBmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xv Z2ljYWwuYwpAQCAtMTE5LDIzICsxMTksMjIgQEAgQ2hlY2tMb2dpY2FsRGVjb2RpbmdSZXF1 aXJlbWVudHModm9pZCkKIAkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJF UkVRVUlTSVRFX1NUQVRFKSwKIAkJCQkgZXJybXNnKCJsb2dpY2FsIGRlY29kaW5nIHJlcXVp cmVzIGEgZGF0YWJhc2UgY29ubmVjdGlvbiIpKSk7CiAKLQkvKiAtLS0tCi0JICogVE9ETzog V2UgZ290IHRvIGNoYW5nZSB0aGF0IHNvbWVkYXkgc29vbi4uLgotCSAqCi0JICogVGhlcmUn cyBiYXNpY2FsbHkgdGhyZWUgdGhpbmdzIG1pc3NpbmcgdG8gYWxsb3cgdGhpczoKLQkgKiAx KSBXZSBuZWVkIHRvIGJlIGFibGUgdG8gY29ycmVjdGx5IGFuZCBxdWlja2x5IGlkZW50aWZ5 IHRoZSB0aW1lbGluZSBhCi0JICoJICBMU04gYmVsb25ncyB0bwotCSAqIDIpIFdlIG5lZWQg dG8gZm9yY2UgaG90X3N0YW5kYnlfZmVlZGJhY2sgdG8gYmUgZW5hYmxlZCBhdCBhbGwgdGlt ZXMgc28KLQkgKgkgIHRoZSBwcmltYXJ5IGNhbm5vdCByZW1vdmUgcm93cyB3ZSBuZWVkLgot CSAqIDMpIHN1cHBvcnQgZHJvcHBpbmcgcmVwbGljYXRpb24gc2xvdHMgcmVmZXJyaW5nIHRv IGEgZGF0YWJhc2UsIGluCi0JICoJICBkYmFzZV9yZWRvLiBUaGVyZSBjYW4ndCBiZSBhbnkg YWN0aXZlIG9uZXMgZHVlIHRvIEhTIHJlY292ZXJ5Ci0JICoJICBjb25mbGljdHMsIHNvIHRo YXQgc2hvdWxkIGJlIHJlbGF0aXZlbHkgZWFzeS4KLQkgKiAtLS0tCi0JICovCiAJaWYgKFJl Y292ZXJ5SW5Qcm9ncmVzcygpKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkgZXJybXNnKCJsb2dpY2FsIGRl Y29kaW5nIGNhbm5vdCBiZSB1c2VkIHdoaWxlIGluIHJlY292ZXJ5IikpKTsKKwl7CisJCS8q CisJCSAqIFRoaXMgY2hlY2sgbWF5IGhhdmUgcmFjZSBjb25kaXRpb25zLCBidXQgd2hlbmV2 ZXIKKwkJICogWExPR19QQVJBTUVURVJfQ0hBTkdFIGluZGljYXRlcyB0aGF0IHdhbF9sZXZl bCBoYXMgY2hhbmdlZCwgd2UKKwkJICogdmVyaWZ5IHRoYXQgdGhlcmUgYXJlIG5vIGV4aXN0 aW5nIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdHMuIEFuZCB0bworCQkgKiBhdm9pZCByYWNl cyBhcm91bmQgY3JlYXRpbmcgYSBuZXcgc2xvdCwKKwkJICogQ2hlY2tMb2dpY2FsRGVjb2Rp bmdSZXF1aXJlbWVudHMoKSBpcyBjYWxsZWQgb25jZSBiZWZvcmUgY3JlYXRpbmcKKwkJICog dGhlIHNsb3QsIGFuZCBvbmNlIHdoZW4gbG9naWNhbCBkZWNvZGluZyBpcyBpbml0aWFsbHkg c3RhcnRpbmcgdXAuCisJCSAqLworCQlpZiAoR2V0QWN0aXZlV2FsTGV2ZWwoKSA8IFdBTF9M RVZFTF9MT0dJQ0FMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImxv Z2ljYWwgZGVjb2Rpbmcgb24gc3RhbmRieSByZXF1aXJlcyAiCisJCQkJCQkJIndhbF9sZXZl bCA+PSBsb2dpY2FsIG9uIG1hc3RlciIpKSk7CisJfQogfQogCiAvKgpAQCAtMzMwLDYgKzMy OSwxMiBAQCBDcmVhdGVJbml0RGVjb2RpbmdDb250ZXh0KGNvbnN0IGNoYXIgKnBsdWdpbiwK IAlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHg7CiAJTWVtb3J5Q29udGV4dCBvbGRfY29u dGV4dDsKIAorCS8qCisJICogT24gc3RhbmRieSwgdGhpcyBjaGVjayBpcyBhbHNvIHJlcXVp cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSBzbG90LiBDaGVjaworCSAqIHRoZSBjb21tZW50cyBp biB0aGlzIGZ1bmN0aW9uLgorCSAqLworCUNoZWNrTG9naWNhbERlY29kaW5nUmVxdWlyZW1l bnRzKCk7CisKIAkvKiBzaG9ydGVyIGxpbmVzLi4uICovCiAJc2xvdCA9IE15UmVwbGljYXRp b25TbG90OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKaW5kZXggNzVhMDg3YzJmOS4uMmVj NzEyNzk0NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwpAQCAtMTEwNSwzNyArMTEwNSw1 NyBAQCBSZXBsaWNhdGlvblNsb3RSZXNlcnZlV2FsKHZvaWQpCiAJCS8qCiAJCSAqIEZvciBs b2dpY2FsIHNsb3RzIGxvZyBhIHN0YW5kYnkgc25hcHNob3QgYW5kIHN0YXJ0IGxvZ2ljYWwg ZGVjb2RpbmcKIAkJICogYXQgZXhhY3RseSB0aGF0IHBvc2l0aW9uLiBUaGF0IGFsbG93cyB0 aGUgc2xvdCB0byBzdGFydCB1cCBtb3JlCi0JCSAqIHF1aWNrbHkuCisJCSAqIHF1aWNrbHku IEJ1dCBvbiBhIHN0YW5kYnkgd2UgY2Fubm90IGRvIFdBTCB3cml0ZXMsIHNvIGp1c3QgdXNl IHRoZQorCQkgKiByZXBsYXkgcG9pbnRlcjsgZWZmZWN0aXZlbHksIGFuIGF0dGVtcHQgdG8g Y3JlYXRlIGEgbG9naWNhbCBzbG90IG9uCisJCSAqIHN0YW5kYnkgd2lsbCBjYXVzZSBpdCB0 byB3YWl0IGZvciBhbiB4bF9ydW5uaW5nX3hhY3QgcmVjb3JkIHRvIGJlCisJCSAqIGxvZ2dl ZCBpbmRlcGVuZGVudGx5IG9uIHRoZSBwcmltYXJ5LCBzbyB0aGF0IGEgc25hcHNob3QgY2Fu IGJlIGJ1aWx0CisJCSAqIHVzaW5nIHRoZSByZWNvcmQuCiAJCSAqCi0JCSAqIFRoYXQncyBu b3QgbmVlZGVkIChvciBpbmRlZWQgaGVscGZ1bCkgZm9yIHBoeXNpY2FsIHNsb3RzIGFzIHRo ZXknbGwKLQkJICogc3RhcnQgcmVwbGF5IGF0IHRoZSBsYXN0IGxvZ2dlZCBjaGVja3BvaW50 IGFueXdheS4gSW5zdGVhZCByZXR1cm4KLQkJICogdGhlIGxvY2F0aW9uIG9mIHRoZSBsYXN0 IHJlZG8gTFNOLiBXaGlsZSB0aGF0IHNsaWdodGx5IGluY3JlYXNlcwotCQkgKiB0aGUgY2hh bmNlIHRoYXQgd2UgaGF2ZSB0byByZXRyeSwgaXQncyB3aGVyZSBhIGJhc2UgYmFja3VwIGhh cyB0bwotCQkgKiBzdGFydCByZXBsYXkgYXQuCisJCSAqIE5vbmUgb2YgdGhpcyBpcyBuZWVk ZWQgKG9yIGluZGVlZCBoZWxwZnVsKSBmb3IgcGh5c2ljYWwgc2xvdHMgYXMKKwkJICogdGhl eSdsbCBzdGFydCByZXBsYXkgYXQgdGhlIGxhc3QgbG9nZ2VkIGNoZWNrcG9pbnQgYW55d2F5 LiBJbnN0ZWFkCisJCSAqIHJldHVybiB0aGUgbG9jYXRpb24gb2YgdGhlIGxhc3QgcmVkbyBM U04uIFdoaWxlIHRoYXQgc2xpZ2h0bHkKKwkJICogaW5jcmVhc2VzIHRoZSBjaGFuY2UgdGhh dCB3ZSBoYXZlIHRvIHJldHJ5LCBpdCdzIHdoZXJlIGEgYmFzZSBiYWNrdXAKKwkJICogaGFz IHRvIHN0YXJ0IHJlcGxheSBhdC4KIAkJICovCisJCWlmIChTbG90SXNQaHlzaWNhbChzbG90 KSkKKwkJCXJlc3RhcnRfbHNuID0gR2V0UmVkb1JlY1B0cigpOworCQllbHNlIGlmIChSZWNv dmVyeUluUHJvZ3Jlc3MoKSkKKwkJeworCQkJcmVzdGFydF9sc24gPSBHZXRYTG9nUmVwbGF5 UmVjUHRyKE5VTEwpOworCQkJLyoKKwkJCSAqIFJlcGxheSBwb2ludGVyIG1heSBwb2ludCBv bmUgcGFzdCB0aGUgZW5kIG9mIHRoZSByZWNvcmQuIElmIHRoYXQKKwkJCSAqIGlzIGEgWExP RyBwYWdlIGJvdW5kYXJ5LCBpdCB3aWxsIG5vdCBiZSBhIHZhbGlkIExTTiBmb3IgdGhlCisJ CQkgKiBzdGFydCBvZiBhIHJlY29yZCwgc28gYnVtcCBpdCB1cCBwYXN0IHRoZSBwYWdlIGhl YWRlci4KKwkJCSAqLworCQkJaWYgKCFYUmVjT2ZmSXNWYWxpZChyZXN0YXJ0X2xzbikpCisJ CQl7CisJCQkJaWYgKHJlc3RhcnRfbHNuICUgWExPR19CTENLU1ogIT0gMCkKKwkJCQkJZWxv ZyhFUlJPUiwgImludmFsaWQgcmVwbGF5IHBvaW50ZXIiKTsKKworCQkJCS8qIEZvciB0aGUg Zmlyc3QgcGFnZSBvZiBhIHNlZ21lbnQgZmlsZSwgaXQncyBhIGxvbmcgaGVhZGVyICovCisJ CQkJaWYgKFhMb2dTZWdtZW50T2Zmc2V0KHJlc3RhcnRfbHNuLCB3YWxfc2VnbWVudF9zaXpl KSA9PSAwKQorCQkJCQlyZXN0YXJ0X2xzbiArPSBTaXplT2ZYTG9nTG9uZ1BIRDsKKwkJCQll bHNlCisJCQkJCXJlc3RhcnRfbHNuICs9IFNpemVPZlhMb2dTaG9ydFBIRDsKKwkJCX0KKwkJ fQorCQllbHNlCisJCQlyZXN0YXJ0X2xzbiA9IEdldFhMb2dJbnNlcnRSZWNQdHIoKTsKKwor CQlTcGluTG9ja0FjcXVpcmUoJnNsb3QtPm11dGV4KTsKKwkJc2xvdC0+ZGF0YS5yZXN0YXJ0 X2xzbiA9IHJlc3RhcnRfbHNuOworCQlTcGluTG9ja1JlbGVhc2UoJnNsb3QtPm11dGV4KTsK KwogCQlpZiAoIVJlY292ZXJ5SW5Qcm9ncmVzcygpICYmIFNsb3RJc0xvZ2ljYWwoc2xvdCkp CiAJCXsKIAkJCVhMb2dSZWNQdHIJZmx1c2hwdHI7CiAKLQkJCS8qIHN0YXJ0IGF0IGN1cnJl bnQgaW5zZXJ0IHBvc2l0aW9uICovCi0JCQlyZXN0YXJ0X2xzbiA9IEdldFhMb2dJbnNlcnRS ZWNQdHIoKTsKLQkJCVNwaW5Mb2NrQWNxdWlyZSgmc2xvdC0+bXV0ZXgpOwotCQkJc2xvdC0+ ZGF0YS5yZXN0YXJ0X2xzbiA9IHJlc3RhcnRfbHNuOwotCQkJU3BpbkxvY2tSZWxlYXNlKCZz bG90LT5tdXRleCk7Ci0KIAkJCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBpbmZvcm1h dGlvbiB0byBzdGFydCAqLwogCQkJZmx1c2hwdHIgPSBMb2dTdGFuZGJ5U25hcHNob3QoKTsK IAogCQkJLyogYW5kIG1ha2Ugc3VyZSBpdCdzIGZzeW5jZWQgdG8gZGlzayAqLwogCQkJWExv Z0ZsdXNoKGZsdXNocHRyKTsKIAkJfQotCQllbHNlCi0JCXsKLQkJCXJlc3RhcnRfbHNuID0g R2V0UmVkb1JlY1B0cigpOwotCQkJU3BpbkxvY2tBY3F1aXJlKCZzbG90LT5tdXRleCk7Ci0J CQlzbG90LT5kYXRhLnJlc3RhcnRfbHNuID0gcmVzdGFydF9sc247Ci0JCQlTcGluTG9ja1Jl bGVhc2UoJnNsb3QtPm11dGV4KTsKLQkJfQogCiAJCS8qIHByZXZlbnQgV0FMIHJlbW92YWwg YXMgZmFzdCBhcyBwb3NzaWJsZSAqLwogCQlSZXBsaWNhdGlvblNsb3RzQ29tcHV0ZVJlcXVp cmVkTFNOKCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5k ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCmluZGV4IDRiZjhh MThlMDEuLjUxMmVmN2MxY2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3dhbHNlbmRlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5j CkBAIC0yODY1LDEwICsyODY1LDEyIEBAIFhMb2dTZW5kTG9naWNhbCh2b2lkKQogCSAqIElm IGZpcnN0IHRpbWUgdGhyb3VnaCBpbiB0aGlzIHNlc3Npb24sIGluaXRpYWxpemUgZmx1c2hQ dHIuICBPdGhlcndpc2UsCiAJICogd2Ugb25seSBuZWVkIHRvIHVwZGF0ZSBmbHVzaFB0ciBp ZiBFbmRSZWNQdHIgaXMgcGFzdCBpdC4KIAkgKi8KLQlpZiAoZmx1c2hQdHIgPT0gSW52YWxp ZFhMb2dSZWNQdHIpCi0JCWZsdXNoUHRyID0gR2V0Rmx1c2hSZWNQdHIoKTsKLQllbHNlIGlm IChsb2dpY2FsX2RlY29kaW5nX2N0eC0+cmVhZGVyLT5FbmRSZWNQdHIgPj0gZmx1c2hQdHIp Ci0JCWZsdXNoUHRyID0gR2V0Rmx1c2hSZWNQdHIoKTsKKwlpZiAoZmx1c2hQdHIgPT0gSW52 YWxpZFhMb2dSZWNQdHIgfHwKKwkJbG9naWNhbF9kZWNvZGluZ19jdHgtPnJlYWRlci0+RW5k UmVjUHRyID49IGZsdXNoUHRyKQorCXsKKwkJZmx1c2hQdHIgPSAoYW1fY2FzY2FkaW5nX3dh bHNlbmRlciA/CisJCQkJCUdldFN0YW5kYnlGbHVzaFJlY1B0cigpIDogR2V0Rmx1c2hSZWNQ dHIoKSk7CisJfQogCiAJLyogSWYgRW5kUmVjUHRyIGlzIHN0aWxsIHBhc3Qgb3VyIGZsdXNo UHRyLCBpdCBtZWFucyB3ZSBjYXVnaHQgdXAuICovCiAJaWYgKGxvZ2ljYWxfZGVjb2Rpbmdf Y3R4LT5yZWFkZXItPkVuZFJlY1B0ciA+PSBmbHVzaFB0cikKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy94bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCmluZGV4 IDc3MTg3YzEyYmUuLjA2YmNkMmZjNTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vz cy94bG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaApAQCAtMzMzLDYgKzMz Myw3IEBAIGV4dGVybiBTaXplIFhMT0dTaG1lbVNpemUodm9pZCk7CiBleHRlcm4gdm9pZCBY TE9HU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQm9vdFN0cmFwWExPRyh2b2lkKTsK IGV4dGVybiB2b2lkIExvY2FsUHJvY2Vzc0NvbnRyb2xGaWxlKGJvb2wgcmVzZXQpOworZXh0 ZXJuIFdhbExldmVsIEdldEFjdGl2ZVdhbExldmVsKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3Rh cnR1cFhMT0codm9pZCk7CiBleHRlcm4gdm9pZCBTaHV0ZG93blhMT0coaW50IGNvZGUsIERh dHVtIGFyZyk7CiBleHRlcm4gdm9pZCBJbml0WExPR0FjY2Vzcyh2b2lkKTsKLS0gCjIuMTYu NgoK --------------C4FC6AF2A8522BE3AE2F182D Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="v16-0005-Doc-changes-describing-details-about-logical-dec.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v16-0005-Doc-changes-describing-details-about-logical-dec.pa"; filename*1="tch" RnJvbSBiZDg5OGE2YzU1NmI1YzY3NDI3MjFkY2VjNmQ1Mzc4ZTNmMzE2ZmZkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCZXJ0cmFuZCBEcm91dm90IDxiZHJvdXZvdEBhbWF6 b24uY29tPgpEYXRlOiBXZWQsIDcgQXByIDIwMjEgMDg6MzY6MzIgKzAwMDAKU3ViamVjdDog W1BBVENIIHYxNiA1LzVdIERvYyBjaGFuZ2VzIGRlc2NyaWJpbmcgZGV0YWlscyBhYm91dCBs b2dpY2FsCiBkZWNvZGluZy4KCi0tLQogZG9jL3NyYy9zZ21sL2xvZ2ljYWxkZWNvZGluZy5z Z21sIHwgMTggKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTggaW5zZXJ0 aW9ucygrKQogMTAwLjAlIGRvYy9zcmMvc2dtbC8KCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvbG9naWNhbGRlY29kaW5nLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbGRlY29kaW5n LnNnbWwKaW5kZXggNWQwNDljZGM2OC4uMGY1MDVmNzYxNSAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL2xvZ2ljYWxkZWNvZGluZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9sb2dpY2Fs ZGVjb2Rpbmcuc2dtbApAQCAtMjk3LDYgKzI5NywyNCBAQCBwb3N0Z3Jlcz0jIHNlbGVjdCAq IGZyb20gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3QnLCBO VUxMLCBOVQogICAgICBtYXkgY29uc3VtZSBjaGFuZ2VzIGZyb20gYSBzbG90IGF0IGFueSBn aXZlbiB0aW1lLgogICAgIDwvcGFyYT4KIAorICAgIDxwYXJhPgorICAgICBBIGxvZ2ljYWwg cmVwbGljYXRpb24gc2xvdCBjYW4gYWxzbyBiZSBjcmVhdGVkIG9uIGEgaG90IHN0YW5kYnku IFRvIHByZXZlbnQKKyAgICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBmcm9tIHJlbW92 aW5nIHJlcXVpcmVkIHJvd3MgZnJvbSB0aGUgc3lzdGVtCisgICAgIGNhdGFsb2dzLCA8dmFy bmFtZT5ob3Rfc3RhbmRieV9mZWVkYmFjazwvdmFybmFtZT4gc2hvdWxkIGJlIHNldCBvbiB0 aGUKKyAgICAgc3RhbmRieS4gSW4gc3BpdGUgb2YgdGhhdCwgaWYgYW55IHJlcXVpcmVkIHJv d3MgZ2V0IHJlbW92ZWQsIHRoZSBzbG90IGdldHMKKyAgICAgZHJvcHBlZC4gRXhpc3Rpbmcg bG9naWNhbCBzbG90cyBvbiBzdGFuZGJ5IGFsc28gZ2V0IGRyb3BwZWQgaWYgd2FsX2xldmVs CisgICAgIG9uIHByaW1hcnkgaXMgcmVkdWNlZCB0byBsZXNzIHRoYW4gJ2xvZ2ljYWwnLgor ICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICBGb3IgYSBsb2dpY2FsIHNsb3QgdG8g YmUgY3JlYXRlZCwgaXQgYnVpbGRzIGEgaGlzdG9yaWMgc25hcHNob3QsIGZvciB3aGljaAor ICAgICBpbmZvcm1hdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRyYW5zYWN0 aW9ucyBpcyBlc3NlbnRpYWwuIE9uCisgICAgIHByaW1hcnksIHRoaXMgaW5mb3JtYXRpb24g aXMgYXZhaWxhYmxlLCBidXQgb24gc3RhbmRieSwgdGhpcyBpbmZvcm1hdGlvbgorICAgICBo YXMgdG8gYmUgb2J0YWluZWQgZnJvbSBwcmltYXJ5LiBTbywgc2xvdCBjcmVhdGlvbiBtYXkg d2FpdCBmb3Igc29tZQorICAgICBhY3Rpdml0eSB0byBoYXBwZW4gb24gdGhlIHByaW1hcnku IElmIHRoZSBwcmltYXJ5IGlzIGlkbGUsIGNyZWF0aW5nIGEKKyAgICAgbG9naWNhbCBzbG90 IG9uIHN0YW5kYnkgbWF5IHRha2UgYSBub3RpY2VhYmxlIHRpbWUuCisgICAgPC9wYXJhPgor CiAgICAgPGNhdXRpb24+CiAgICAgIDxwYXJhPgogICAgICAgUmVwbGljYXRpb24gc2xvdHMg cGVyc2lzdCBhY3Jvc3MgY3Jhc2hlcyBhbmQga25vdyBub3RoaW5nIGFib3V0IHRoZSBzdGF0 ZQotLSAKMi4xNi42Cgo= --------------C4FC6AF2A8522BE3AE2F182D Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="v16-0004-New-TAP-test-for-logical-decoding-on-standby.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v16-0004-New-TAP-test-for-logical-decoding-on-standby.patch" RnJvbSA1YTVlMGNkYjM5NzViYTM1NWYwZTdiNWU1YTc3MWJjODc2Y2M2ZDMyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCZXJ0cmFuZCBEcm91dm90IDxiZHJvdXZvdEBhbWF6 b24uY29tPgpEYXRlOiBXZWQsIDcgQXByIDIwMjEgMDg6MzU6NDIgKzAwMDAKU3ViamVjdDog W1BBVENIIHYxNiA0LzVdIE5ldyBUQVAgdGVzdCBmb3IgbG9naWNhbCBkZWNvZGluZyBvbiBz dGFuZGJ5LgoKVGhpcyB0ZXN0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQ3JhaWcgUmlu Z2VyLCB0aGVuCmV4dGVuZGVkL21vZGlmaWVkIGJ5IG1lLCB0byB0ZXN0IHZhcmlvdXMgc2xv dCBjb25mbGljdCBzY2VuYXJpb3MuCgpBdXRob3JzOiBDcmFpZyBSaW5nZXIsIEFtaXQgS2hh bmRla2FyLgotLS0KIHNyYy90ZXN0L3BlcmwvUG9zdGdyZXNOb2RlLnBtICAgICAgICAgICAg ICAgICAgICAgIHwgIDM3ICsrKwogLi4uL3QvMDI0X3N0YW5kYnlfbG9naWNhbF9kZWNvZGlu Z194bWlucy5wbCAgICAgICAgfCAyNzIgKysrKysrKysrKysrKysrKysrKysrCiAuLi4vdC8w MjVfc3RhbmRieV9sb2dpY2FsX2RlY29kaW5nX2NvbmZsaWN0cy5wbCAgICB8IDIyOCArKysr KysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1MzcgaW5zZXJ0aW9ucygrKQogICA1 LjglIHNyYy90ZXN0L3BlcmwvCiAgOTQuMSUgc3JjL3Rlc3QvcmVjb3ZlcnkvdC8KCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9wZXJsL1Bvc3RncmVzTm9kZS5wbSBiL3NyYy90ZXN0L3Blcmwv UG9zdGdyZXNOb2RlLnBtCmluZGV4IDU5ODkwNmFkNjQuLmY5OGJlZTIyNTYgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZXNOb2RlLnBtCisrKyBiL3NyYy90ZXN0L3Blcmwv UG9zdGdyZXNOb2RlLnBtCkBAIC0yNTMyLDYgKzI1MzIsNDMgQEAgc3ViIHBnX3JlY3Zsb2dp Y2FsX3VwdG8KIAogPXBvZAogCis9aXRlbSAkbm9kZS0+Y3JlYXRlX2xvZ2ljYWxfc2xvdF9v bl9zdGFuZGJ5KHNlbGYsIG1hc3Rlciwgc2xvdF9uYW1lLCBkYm5hbWUpCisKK0NyZWF0ZSBs b2dpY2FsIHJlcGxpY2F0aW9uIHNsb3Qgb24gZ2l2ZW4gc3RhbmRieQorCis9Y3V0CisKK3N1 YiBjcmVhdGVfbG9naWNhbF9zbG90X29uX3N0YW5kYnkKK3sKKwlteSAoJHNlbGYsICRtYXN0 ZXIsICRzbG90X25hbWUsICRkYm5hbWUpID0gQF87CisJbXkgKCRzdGRvdXQsICRzdGRlcnIp OworCisJbXkgJGhhbmRsZTsKKworCSRoYW5kbGUgPSBJUEM6OlJ1bjo6c3RhcnQoWydwZ19y ZWN2bG9naWNhbCcsICctZCcsICRzZWxmLT5jb25uc3RyKCRkYm5hbWUpLCAnLVAnLCAndGVz dF9kZWNvZGluZycsICctUycsICRzbG90X25hbWUsICctLWNyZWF0ZS1zbG90J10sICc+Jywg XCRzdGRvdXQsICcyPicsIFwkc3RkZXJyKTsKKworCSMgT25jZSBzbG90IHJlc3RhcnRfbHNu IGlzIGNyZWF0ZWQsIHRoZSBzdGFuZGJ5IGxvb2tzIGZvciB4bF9ydW5uaW5nX3hhY3RzCisJ IyBXQUwgcmVjb3JkIGZyb20gdGhlIHJlc3RhcnRfbHNuIG9ud2FyZHMuIFNvIGZpcnN0bHks IHdhaXQgdW50aWwgdGhlIHNsb3QKKwkjIHJlc3RhcnRfbHNuIGlzIGV2YWx1YXRlZC4KKwor CSRzZWxmLT5wb2xsX3F1ZXJ5X3VudGlsKAorCQkncG9zdGdyZXMnLCBxcVsKKwkJU0VMRUNU IHJlc3RhcnRfbHNuIElTIE5PVCBOVUxMCisJCUZST00gcGdfY2F0YWxvZy5wZ19yZXBsaWNh dGlvbl9zbG90cyBXSEVSRSBzbG90X25hbWUgPSAnJHNsb3RfbmFtZScKKwldKSBvciBkaWUg InRpbWVkIG91dCB3YWl0aW5nIGZvciBsb2dpY2FsIHNsb3QgdG8gY2FsY3VsYXRlIGl0cyBy ZXN0YXJ0X2xzbiI7CisKKwkjIE5vdyBhcnJhbmdlIGZvciB0aGUgeGxfcnVubmluZ194YWN0 cyByZWNvcmQgZm9yIHdoaWNoIHBnX3JlY3Zsb2dpY2FsCisJIyBpcyB3YWl0aW5nLgorCSRt YXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ0hFQ0tQT0lOVCcpOworCisJJGhhbmRs ZS0+ZmluaXNoKCk7CisKKwlpcygkc2VsZi0+c2xvdCgkc2xvdF9uYW1lKS0+eydzbG90X3R5 cGUnfSwgJ2xvZ2ljYWwnLCAkc2xvdF9uYW1lIC4gJyBvbiBzdGFuZGJ5IGNyZWF0ZWQnKQor CQlvciBkaWUgImNvdWxkIG5vdCBjcmVhdGUgc2xvdCIgLiAkc2xvdF9uYW1lOworfQorCis9 cG9kCisKID1iYWNrCiAKID1jdXQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3Qv MDI0X3N0YW5kYnlfbG9naWNhbF9kZWNvZGluZ194bWlucy5wbCBiL3NyYy90ZXN0L3JlY292 ZXJ5L3QvMDI0X3N0YW5kYnlfbG9naWNhbF9kZWNvZGluZ194bWlucy5wbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kNjU0ZDc5NTI2Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjRfc3RhbmRieV9sb2dpY2FsX2RlY29kaW5n X3htaW5zLnBsCkBAIC0wLDAgKzEsMjcyIEBACisjIGxvZ2ljYWwgZGVjb2Rpbmcgb24gYSBz dGFuZGJ5IDogZW5zdXJlIHhtaW5zIGFyZSBhcHByb3ByaWF0ZWx5IHVwZGF0ZWQKKwordXNl IHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIFBvc3RncmVzTm9kZTsKK3VzZSBUZXN0 TGliOwordXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMjM7Cit1c2UgUmVjdXJzaXZlQ29weTsK K3VzZSBGaWxlOjpDb3B5OwordXNlIFRpbWU6OkhpUmVzIHF3KHVzbGVlcCk7CisKK215ICgk c3RkaW4sICRzdGRvdXQsICRzdGRlcnIsICRyZXQsICRoYW5kbGUsICRzbG90KTsKKworbXkg JG5vZGVfbWFzdGVyID0gZ2V0X25ld19ub2RlKCdtYXN0ZXInKTsKK215ICRub2RlX3N0YW5k YnkgPSBnZXRfbmV3X25vZGUoJ3N0YW5kYnknKTsKKworIyBOYW1lIGZvciB0aGUgcGh5c2lj YWwgc2xvdCBvbiBtYXN0ZXIKK215ICRtYXN0ZXJfc2xvdG5hbWUgPSAnbWFzdGVyX3BoeXNp Y2FsJzsKKyMgTmFtZSBmb3IgdGhlIGxvZ2ljYWwgc2xvdCBvbiBzdGFuZGJ5CitteSAkc3Rh bmRieV9zbG90bmFtZSA9ICdzdGFuZGJ5X2xvZ2ljYWwnOworCisjIEZldGNoIHhtaW4gY29s dW1ucyBmcm9tIHNsb3QncyBwZ19yZXBsaWNhdGlvbl9zbG90cyByb3csIGFmdGVyIHdhaXRp bmcgZm9yCisjIGdpdmVuIGJvb2xlYW4gY29uZGl0aW9uIHRvIGJlIHRydWUgdG8gZW5zdXJl IHdlJ3ZlIHJlYWNoZWQgYSBxdWllc2NlbnQgc3RhdGUKK3N1YiB3YWl0X2Zvcl94bWlucwor eworCW15ICgkbm9kZSwgJHNsb3RuYW1lLCAkY2hlY2tfZXhwcikgPSBAXzsKKworCSRub2Rl LT5wb2xsX3F1ZXJ5X3VudGlsKAorCQkncG9zdGdyZXMnLCBxcVsKKwkJU0VMRUNUICRjaGVj a19leHByCisJCUZST00gcGdfY2F0YWxvZy5wZ19yZXBsaWNhdGlvbl9zbG90cworCQlXSEVS RSBzbG90X25hbWUgPSAnJHNsb3RuYW1lJzsKKwldKSBvciBkaWUgIlRpbWVkIG91dCB3YWl0 aW5nIGZvciBzbG90IHhtaW5zIHRvIGFkdmFuY2UiOworfQorCisKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworIyBJbml0aWFsaXplIG1hc3RlciBub2RlCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKworJG5vZGVfbWFzdGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gMSwg aGFzX2FyY2hpdmluZyA9PiAxKTsKKyRub2RlX21hc3Rlci0+YXBwZW5kX2NvbmYoJ3Bvc3Rn cmVzcWwuY29uZicsIHF7Cit3YWxfbGV2ZWwgPSAnbG9naWNhbCcKK21heF9yZXBsaWNhdGlv bl9zbG90cyA9IDQKK21heF93YWxfc2VuZGVycyA9IDQKK2xvZ19taW5fbWVzc2FnZXMgPSAn ZGVidWcyJworbG9nX2Vycm9yX3ZlcmJvc2l0eSA9IHZlcmJvc2UKKyMgdmVyeSBwcm9tcHRs eSB0ZXJtaW5hdGUgY29uZmxpY3RpbmcgYmFja2VuZHMKK21heF9zdGFuZGJ5X3N0cmVhbWlu Z19kZWxheSA9ICcycycKK30pOworJG5vZGVfbWFzdGVyLT5kdW1wX2luZm87Ciskbm9kZV9t YXN0ZXItPnN0YXJ0OworCiskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx cVtTRUxFQ1QgKiBGUk9NIHBnX2NyZWF0ZV9waHlzaWNhbF9yZXBsaWNhdGlvbl9zbG90KCck bWFzdGVyX3Nsb3RuYW1lJyk7XSk7CitteSAkYmFja3VwX25hbWUgPSAnYjEnOworJG5vZGVf bWFzdGVyLT5iYWNrdXAoJGJhY2t1cF9uYW1lKTsKKworIyBBZnRlciBzbG90IGNyZWF0aW9u LCB4bWlucyBtdXN0IGJlIG51bGwKKyRzbG90ID0gJG5vZGVfbWFzdGVyLT5zbG90KCRtYXN0 ZXJfc2xvdG5hbWUpOworaXMoJHNsb3QtPnsneG1pbid9LCAnJywgInhtaW4gbnVsbCIpOwor aXMoJHNsb3QtPnsnY2F0YWxvZ194bWluJ30sICcnLCAiY2F0YWxvZ194bWluIG51bGwiKTsK KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSW5pdGlhbGl6ZSBzbGF2ZSBub2RlCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiskbm9kZV9zdGFuZGJ5LT5pbml0X2Zyb21fYmFj a3VwKAorCSRub2RlX21hc3RlciwgJGJhY2t1cF9uYW1lLAorCWhhc19zdHJlYW1pbmcgPT4g MSwKKwloYXNfcmVzdG9yaW5nID0+IDEpOworJG5vZGVfc3RhbmRieS0+YXBwZW5kX2NvbmYo J3Bvc3RncmVzcWwuY29uZicsCisJcXFbcHJpbWFyeV9zbG90X25hbWUgPSAnJG1hc3Rlcl9z bG90bmFtZSddKTsKKyRub2RlX3N0YW5kYnktPnN0YXJ0OworJG5vZGVfbWFzdGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCRub2RlX3N0YW5kYnksICdyZXBsYXknLCAkbm9kZV9tYXN0ZXItPmxz bignZmx1c2gnKSk7CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMg eG1pbi9jYXRhbG9nX3htaW4gdmVyaWZpY2F0aW9uIGJlZm9yZSBhbmQgYWZ0ZXIgc3RhbmRi eS1sb2dpY2FsLXNsb3QgY3JlYXRpb24uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworCisjIFdpdGggaG90X3N0YW5kYnlfZmVlZGJhY2sgb2ZmLCB4bWluIGFuZCBjYXRh bG9nX3htaW4gbXVzdCBzdGlsbCBiZSBudWxsCiskc2xvdCA9ICRub2RlX21hc3Rlci0+c2xv dCgkbWFzdGVyX3Nsb3RuYW1lKTsKK2lzKCRzbG90LT57J3htaW4nfSwgJycsICJ4bWluIG51 bGwgYWZ0ZXIgc3RhbmRieSBqb2luIik7Citpcygkc2xvdC0+eydjYXRhbG9nX3htaW4nfSwg JycsICJjYXRhbG9nX3htaW4gbnVsbCBhZnRlciBzdGFuZGJ5IGpvaW4iKTsKKworJG5vZGVf c3RhbmRieS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicscVsKK2hvdF9zdGFuZGJ5 X2ZlZWRiYWNrID0gb24KKyMgc2VuZCBzdGF0dXMgcmFwaWRseSBzbyB3ZSBwcm9tcHRseSBh ZHZhbmNlIHhtaW4gb24gbWFzdGVyCit3YWxfcmVjZWl2ZXJfc3RhdHVzX2ludGVydmFsID0g MQorXSk7Ciskbm9kZV9zdGFuZGJ5LT5yZXN0YXJ0OworCisjIGVuc3VyZSB3YWxyZWNlaXZl ciBmZWVkYmFjayBzZW50IGJ5IHdhaXRpbmcgZm9yIGV4cGVjdGVkIHhtaW4gYW5kCisjIGNh dGFsb2dfeG1pbiBvbiBtYXN0ZXIuIFdpdGggaG90X3N0YW5kYnlfZmVlZGJhY2sgb24sIHht aW4gc2hvdWxkIGFkdmFuY2UsCisjIGJ1dCBjYXRhbG9nX3htaW4gc2hvdWxkIHN0aWxsIHJl bWFpbiBOVUxMIHNpbmNlIHRoZXJlIGlzIG5vIGxvZ2ljYWwgc2xvdC4KK3dhaXRfZm9yX3ht aW5zKCRub2RlX21hc3RlciwgJG1hc3Rlcl9zbG90bmFtZSwgInhtaW4gSVMgTk9UIE5VTEwg QU5EIGNhdGFsb2dfeG1pbiBJUyBOVUxMIik7CisKKyMgQ3JlYXRlIG5ldyBzbG90cyBvbiB0 aGUgc3RhbmRieSwgaWdub3JpbmcgdGhlIG9uZXMgb24gdGhlIG1hc3RlciBjb21wbGV0ZWx5 LgorIworIyBUaGlzIG11c3Qgc3VjY2VlZCBzaW5jZSB3ZSBrbm93IHdlIGhhdmUgYSBjYXRh bG9nX3htaW4gcmVzZXJ2YXRpb24uIFdlCisjIG1pZ2h0J3ZlIGFscmVhZHkgc2VudCBob3Qg c3RhbmRieSBmZWVkYmFjayB0byBhZHZhbmNlIG91ciBwaHlzaWNhbCBzbG90J3MKKyMgY2F0 YWxvZ194bWluIGJ1dCBub3QgcmVjZWl2ZWQgdGhlIGNvcnJlc3BvbmRpbmcgeGxvZyBmb3Ig dGhlIGNhdGFsb2cgeG1pbgorIyBhZHZhbmNlLCBpbiB3aGljaCBjYXNlIHdlJ2xsIGNyZWF0 ZSBhIHNsb3QgdGhhdCBpc24ndCB1c2FibGUuIFRoZSBjYWxsaW5nCisjIGFwcGxpY2F0aW9u IGNhbiBwcmV2ZW50IHRoaXMgYnkgY3JlYXRpbmcgYSB0ZW1wb3Jhcnkgc2xvdCBvbiB0aGUg bWFzdGVyIHRvCisjIGxvY2sgaW4gaXRzIGNhdGFsb2dfeG1pbi4gRm9yIGEgdHJ1bHkgcmFj ZS1mcmVlIHNvbHV0aW9uIHdlJ2QgbmVlZAorIyBtYXN0ZXItdG8tc3RhbmRieSBob3Rfc3Rh bmRieV9mZWVkYmFjayByZXBsaWVzLgorIworIyBJbiB0aGlzIGNhc2UgaXQgd29uJ3QgcmFj ZSBiZWNhdXNlIHRoZXJlJ3Mgbm8gY29uY3VycmVudCBhY3Rpdml0eSBvbiB0aGUKKyMgbWFz dGVyLgorIworJG5vZGVfc3RhbmRieS0+Y3JlYXRlX2xvZ2ljYWxfc2xvdF9vbl9zdGFuZGJ5 KCRub2RlX21hc3RlciwgJHN0YW5kYnlfc2xvdG5hbWUsICdwb3N0Z3JlcycpOworCiskbm9k ZV9tYXN0ZXItPndhaXRfZm9yX2NhdGNodXAoJG5vZGVfc3RhbmRieSwgJ3JlcGxheScsICRu b2RlX21hc3Rlci0+bHNuKCdmbHVzaCcpKTsKKworIyBOb3cgdGhhdCBzbG90IGlzIGNyZWF0 ZWQgb24gc3RhbmRieSwgeG1pbiBhbmQgY2F0YWxvZ194bWluIHNob3VsZCBiZSBub24gTlVM TAorIyBvbiBib3RoIG1hc3RlciBhbmQgc3RhbmRieS4gQnV0IG9uIG1hc3RlciwgdGhlIHht aW5zIHdpbGwgYmUgdXBkYXRlZCBvbmx5CisjIGFmdGVyIGhvdCBzdGFuZGJ5IGZlZWRiYWNr IGlzIHJlY2VpdmVkLgord2FpdF9mb3JfeG1pbnMoJG5vZGVfbWFzdGVyLCAkbWFzdGVyX3Ns b3RuYW1lLCAieG1pbiBJUyBOT1QgTlVMTCBBTkQgY2F0YWxvZ194bWluIElTIE5PVCBOVUxM Iik7CisKKyRzbG90ID0gJG5vZGVfc3RhbmRieS0+c2xvdCgkc3RhbmRieV9zbG90bmFtZSk7 Citpcygkc2xvdC0+eyd4bWluJ30sICcnLCAibG9naWNhbCB4bWluIG51bGwiKTsKK2lzbnQo JHNsb3QtPnsnY2F0YWxvZ194bWluJ30sICcnLCAibG9naWNhbCBjYXRhbG9nX3htaW4gbm90 IG51bGwiKTsKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTdGFu ZGJ5IGxvZ2ljYWwgc2xvdCBzaG91bGQgYmUgYWJsZSB0byBmZXRjaCB0aGUgdGFibGUgY2hh bmdlcyBldmVuIHdoZW4gdGhlCisjIHRhYmxlIGlzIGRyb3BwZWQuCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworCiskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAnQ1JFQVRFIFRBQkxFIHRlc3RfdGFibGUoaWQgc2VyaWFsIHByaW1hcnkga2V5LCBi bGFoIHRleHQpJyk7Ciskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxW0lO U0VSVCBJTlRPIHRlc3RfdGFibGUoYmxhaCkgdmFsdWVzICgnaXR3b3JrcycpXSk7Ciskbm9k ZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnRFJPUCBUQUJMRSB0ZXN0X3RhYmxl Jyk7Ciskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnVkFDVVVNJyk7CisK KyRub2RlX21hc3Rlci0+d2FpdF9mb3JfY2F0Y2h1cCgkbm9kZV9zdGFuZGJ5LCAncmVwbGF5 JywgJG5vZGVfbWFzdGVyLT5sc24oJ2ZsdXNoJykpOworCisjIFNob3VsZCBzaG93IHRoZSBp bnNlcnRzIGV2ZW4gd2hlbiB0aGUgdGFibGUgaXMgZHJvcHBlZCBvbiBtYXN0ZXIKKygkcmV0 LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlX3N0YW5kYnktPnBzcWwoJ3Bvc3RncmVzJywg cXFbU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJyRzdGFu ZGJ5X3Nsb3RuYW1lJywgTlVMTCwgTlVMTCwgJ2luY2x1ZGUteGlkcycsICcwJywgJ3NraXAt ZW1wdHkteGFjdHMnLCAnMScsICdpbmNsdWRlLXRpbWVzdGFtcCcsICcwJyldKTsKK2lzKCRz dGRlcnIsICcnLCAnc3RkZXJyIGlzIGVtcHR5Jyk7CitpcygkcmV0LCAwLCAncmVwbGF5IGZy b20gc2xvdCBzdWNjZWVkZWQnKQorCW9yIGRpZSAnY2Fubm90IGNvbnRpbnVlIGlmIHNsb3Qg cmVwbGF5IGZhaWxzJzsKK2lzKCRzdGRvdXQsIHF7QkVHSU4KK3RhYmxlIHB1YmxpYy50ZXN0 X3RhYmxlOiBJTlNFUlQ6IGlkW2ludGVnZXJdOjEgYmxhaFt0ZXh0XTonaXR3b3JrcycKK0NP TU1JVH0sICdyZXBsYXkgcmVzdWx0cyBtYXRjaCcpOworCiskbm9kZV9tYXN0ZXItPndhaXRf Zm9yX2NhdGNodXAoJG5vZGVfc3RhbmRieSwgJ3JlcGxheScsICRub2RlX21hc3Rlci0+bHNu KCdmbHVzaCcpKTsKKworJHNsb3QgPSAkbm9kZV9tYXN0ZXItPnNsb3QoJG1hc3Rlcl9zbG90 bmFtZSk7Citpc250KCRzbG90LT57J3htaW4nfSwgJycsICJwaHlzaWNhbCB4bWluIG5vdCBu dWxsIik7CitteSAkc2F2ZWRfcGh5c2ljYWxfY2F0YWxvZ194bWluID0gJHNsb3QtPnsnY2F0 YWxvZ194bWluJ307Citpc250KCRzYXZlZF9waHlzaWNhbF9jYXRhbG9nX3htaW4sICcnLCAi cGh5c2ljYWwgY2F0YWxvZ194bWluIG5vdCBudWxsIik7CisKKyRzbG90ID0gJG5vZGVfc3Rh bmRieS0+c2xvdCgkc3RhbmRieV9zbG90bmFtZSk7Citpcygkc2xvdC0+eyd4bWluJ30sICcn LCAibG9naWNhbCB4bWluIG51bGwiKTsKK215ICRzYXZlZF9sb2dpY2FsX2NhdGFsb2dfeG1p biA9ICRzbG90LT57J2NhdGFsb2dfeG1pbid9OworaXNudCgkc2F2ZWRfbG9naWNhbF9jYXRh bG9nX3htaW4sICcnLCAibG9naWNhbCBjYXRhbG9nX3htaW4gbm90IG51bGwiKTsKKworCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDYXRhbG9nIHhtaW5zIHNob3Vs ZCBhZHZhbmNlIGFmdGVyIHN0YW5kYnkgbG9naWNhbCBzbG90IGZldGNoZXMgdGhlIGNoYW5n ZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIElkZWFsbHkgd2Un ZCBqdXN0IGhvbGQgY2F0YWxvZ194bWluLCBidXQgc2luY2UgaHNfZmVlZGJhY2sgY3VycmVu dGx5IHVzZXMgdGhlIHNsb3QsCisjIHdlIGhvbGQgZG93biB4bWluLgorJG5vZGVfbWFzdGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFbQ1JFQVRFIFRBQkxFIGNhdGFsb2dfaW5jcmVh c2VfMSgpO10pOworJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFU RSBUQUJMRSB0ZXN0X3RhYmxlKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgYmxhaCB0ZXh0KScp OworZm9yIG15ICRpICgwIC4uIDIwMDApCit7CisgICAgJG5vZGVfbWFzdGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXFbSU5TRVJUIElOVE8gdGVzdF90YWJsZShibGFoKSBWQUxVRVMg KCdlbnRyeSAkaScpXSk7Cit9Ciskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxcVtDUkVBVEUgVEFCTEUgY2F0YWxvZ19pbmNyZWFzZV8yKCk7XSk7Ciskbm9kZV9tYXN0 ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnVkFDVVVNJyk7CisKKyRub2RlX21hc3Rlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkbm9kZV9zdGFuZGJ5LCAncmVwbGF5JywgJG5vZGVfbWFzdGVy LT5sc24oJ2ZsdXNoJykpOworCitjbXBfb2soJG5vZGVfc3RhbmRieS0+c2xvdCgkc3RhbmRi eV9zbG90bmFtZSktPnsnY2F0YWxvZ194bWluJ30sICI9PSIsCisJICAgJHNhdmVkX2xvZ2lj YWxfY2F0YWxvZ194bWluLAorCSAgICJsb2dpY2FsIHNsb3QgY2F0YWxvZ194bWluIGhhc24n dCBhZHZhbmNlZCBiZWZvcmUgZ2V0X2NoYW5nZXMiKTsKKworKCRyZXQsICRzdGRvdXQsICRz dGRlcnIpID0gJG5vZGVfc3RhbmRieS0+cHNxbCgncG9zdGdyZXMnLAorCXFxW1NFTEVDVCBk YXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCckc3RhbmRieV9zbG90bmFt ZScsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3Rz JywgJzEnLCAnaW5jbHVkZS10aW1lc3RhbXAnLCAnMCcpXSk7CitpcygkcmV0LCAwLCAncmVw bGF5IG9mIGJpZyBzZXJpZXMgc3VjY2VlZGVkJyk7Citpc250KCRzdGRvdXQsICcnLCAncmVw bGF5ZWQgc29tZSByb3dzJyk7CisKKyRub2RlX21hc3Rlci0+d2FpdF9mb3JfY2F0Y2h1cCgk bm9kZV9zdGFuZGJ5LCAncmVwbGF5JywgJG5vZGVfbWFzdGVyLT5sc24oJ2ZsdXNoJykpOwor CisjIGxvZ2ljYWwgc2xvdCBjYXRhbG9nX3htaW4gb24gc2xhdmUgc2hvdWxkIGFkdmFuY2Ug YWZ0ZXIgcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzCit3YWl0X2Zvcl94bWlucygkbm9k ZV9zdGFuZGJ5LCAkc3RhbmRieV9zbG90bmFtZSwKKwkJCSAgICJjYXRhbG9nX3htaW46OnZh cmNoYXI6OmludCA+ICR7c2F2ZWRfbG9naWNhbF9jYXRhbG9nX3htaW59Iik7Ciskc2xvdCA9 ICRub2RlX3N0YW5kYnktPnNsb3QoJHN0YW5kYnlfc2xvdG5hbWUpOworbXkgJG5ld19sb2dp Y2FsX2NhdGFsb2dfeG1pbiA9ICRzbG90LT57J2NhdGFsb2dfeG1pbid9OworaXMoJHNsb3Qt PnsneG1pbid9LCAnJywgImxvZ2ljYWwgeG1pbiBudWxsIik7CisKKyMgaG90IHN0YW5kYnkg ZmVlZGJhY2sgc2hvdWxkIGFkdmFuY2UgbWFzdGVyJ3MgcGh5cyBjYXRhbG9nX3htaW4gbm93 IHRoYXQgdGhlCisjIHN0YW5kYnkncyBzbG90IGRvZXNuJ3QgaG9sZCBpdCBkb3duIGFzIGZh ci4KKyMgQnV0IG1hc3RlcidzIHBoeXMgY2F0YWxvZ194bWluIHNob3VsZCBub3QgZ28gcGFz dCB0aGUgc2xhdmUncyBsb2dpY2FsIHNsb3QncworIyBjYXRhbG9nX3htaW4sIGV2ZW4gd2hp bGUgbWFzdGVyJ3MgcGh5cyB4bWluIGFkdmFuY2VzLgorIworIyBGaXJzdCwgbWFrZSBzdXJl IG1hc3RlcidzIHhtaW4gaXMgYWR2YW5jZWQuIFRoaXMgaGFwcGVucyBvbiBob3Qgc3RhbmRi eQorIyBmZWVkYmFjay4gU28gdGhpcyBjaGVjayBmb3IgbWFzdGVyJ3MgeG1pbiBhZHZhbmNl IGFsc28gbWFrZXMgc3VyZSBob3Qgc3RhbmRieQorIyBmZWVkYmFjayBoYXMgcmVhY2hlZCB0 aGUgbWFzdGVyLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgdGhlIHN1YnNlcXVlbnQKKyMgY2F0 YWxvZ194bWluIHRlc3QuCitteSAkdGVtcF9waHlzX3htaW4gPSAkbm9kZV9tYXN0ZXItPnNs b3QoJG1hc3Rlcl9zbG90bmFtZSktPnsneG1pbid9OworJG5vZGVfbWFzdGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCB0eGlkX2N1cnJlbnQoKScpOword2FpdF9mb3JfeG1p bnMoJG5vZGVfbWFzdGVyLCAkbWFzdGVyX3Nsb3RuYW1lLAorCQkJICAgInhtaW46OnZhcmNo YXI6OmludCA+ICR7dGVtcF9waHlzX3htaW59Iik7Ciskc2xvdCA9ICRub2RlX21hc3Rlci0+ c2xvdCgkbWFzdGVyX3Nsb3RuYW1lKTsKKyMgTm93IGNoZWNrIHRoYXQgdGhlIG1hc3Rlcidz IHBoeXMgY2F0YWxvZ194bWluIGhhcyBhZHZhbmNlZCBidXQgbm90IGJleW9uZAorIyBzdGFu ZGJ5J3MgbG9naWNhbCBjYXRhbG9nX3htaW4KK2NtcF9vaygkc2xvdC0+eydjYXRhbG9nX3ht aW4nfSwgIj4iLCAkc2F2ZWRfcGh5c2ljYWxfY2F0YWxvZ194bWluLAorCSd1cHN0cmVhbSBw aHlzaWNhbCBzbG90IGNhdGFsb2dfeG1pbiBoYXMgYWR2YW5jZWQgd2l0aCBoc19mZWVkYmFj ayBvbicpOworY21wX29rKCRzbG90LT57J2NhdGFsb2dfeG1pbid9LCAiPT0iLCAkbmV3X2xv Z2ljYWxfY2F0YWxvZ194bWluLAorCSd1cHN0cmVhbSBwaHlzaWNhbCBzbG90IGNhdGFsb2df eG1pbiBub3QgcGFzdCBkb3duc3RyZWFtIGNhdGFsb2dfeG1pbiB3aXRoIGhzX2ZlZWRiYWNr IG9uJyk7CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBVcHN0cmVhbSBvbGRlc3RY aWQgc2hvdWxkIG5vdCBnbyBwYXN0IGRvd25zdHJlYW0gY2F0YWxvZ194bWluCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisKKyMgRmlyc3QgYnVybiBzb21lIHhpZHMgb24gdGhlIG1hc3Rl ciBpbiBhbm90aGVyIERCLCBzbyB3ZSBwdXNoIHRoZSBtYXN0ZXIncworIyBuZXh0WGlkIGFo ZWFkLgorZm9yZWFjaCBteSAkaSAoMSAuLiAxMDApCit7CisJJG5vZGVfbWFzdGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCB0eGlkX2N1cnJlbnQoKScpOworfQorCisjIEZv cmNlIHZhY3V1bSBmcmVlemUgb24gdGhlIG1hc3RlciBhbmQgZW5zdXJlIGl0cyBvbGRlc3RY bWluIGRvZXNuJ3QgYWR2YW5jZQorIyBwYXN0IG91ciBuZWVkZWQgeG1pbi4gVGhlIG9ubHkg d2F5IHdlIGhhdmUgdmlzaWJpbGl0eSBpbnRvIHRoYXQgaXMgdG8gZm9yY2UKKyMgYSBjaGVj a3BvaW50LgorJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlVQREFURSBw Z19kYXRhYmFzZSBTRVQgZGF0YWxsb3djb25uID0gdHJ1ZSBXSEVSRSBkYXRuYW1lID0gJ3Rl bXBsYXRlMCciKTsKK2ZvcmVhY2ggbXkgJGRibmFtZSAoJ3RlbXBsYXRlMScsICdwb3N0Z3Jl cycsICdwb3N0Z3JlcycsICd0ZW1wbGF0ZTAnKQoreworCSRub2RlX21hc3Rlci0+c2FmZV9w c3FsKCRkYm5hbWUsICdWQUNVVU0gRlJFRVpFJyk7Cit9Ciskbm9kZV9tYXN0ZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAnQ0hFQ0tQT0lOVCcpOworSVBDOjpSdW46OnJ1bihbJ3BnX2Nv bnRyb2xkYXRhJywgJG5vZGVfbWFzdGVyLT5kYXRhX2RpcigpXSwgJz4nLCBcJHN0ZG91dCkK KwlvciBkaWUgInBnX2NvbnRyb2xkYXRhIGZhaWxlZCB3aXRoICQ/IjsKK215IEBjaGVja3Bv aW50ID0gc3BsaXQoJ1xuJywgJHN0ZG91dCk7CitteSAkb2xkZXN0WGlkID0gJyc7Citmb3Jl YWNoIG15ICRsaW5lIChAY2hlY2twb2ludCkKK3sKKwlpZiAoJGxpbmUgPX4gcXIvXkxhdGVz dCBjaGVja3BvaW50J3Mgb2xkZXN0WElEOlxzKyhcZCspLykKKwl7CisJCSRvbGRlc3RYaWQg PSAkMTsKKwl9Cit9CitkaWUgJ25vIG9sZGVzdFhJRCBmb3VuZCBpbiBjaGVja3BvaW50JyB1 bmxlc3MgJG9sZGVzdFhpZDsKKworY21wX29rKCRvbGRlc3RYaWQsICI8PSIsICRub2RlX3N0 YW5kYnktPnNsb3QoJHN0YW5kYnlfc2xvdG5hbWUpLT57J2NhdGFsb2dfeG1pbid9LAorCSAg ICd1cHN0cmVhbSBvbGRlc3RYaWQgbm90IHBhc3QgZG93bnN0cmVhbSBjYXRhbG9nX3htaW4g d2l0aCBoc19mZWVkYmFjayBvbicpOworCiskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJVUERBVEUgcGdfZGF0YWJhc2UgU0VUIGRhdGFsbG93Y29ubiA9IGZhbHNl IFdIRVJFIGRhdG5hbWUgPSAndGVtcGxhdGUwJyIpOworCisKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERyb3Agc2xvdAorIyBNYWtl IHN1cmUgc3RhbmRieSBzbG90cyBhcmUgZHJvcHBhYmxlLCBhbmQgcHJvcGVybHkgY2xlYXIg dGhlIHVwc3RyZWFtJ3MgeG1pbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKworaXMoJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICdTSE9XIGhvdF9zdGFuZGJ5X2ZlZWRiYWNrJyksICdvbicsICdoc19mZWVkYmFj ayBpcyBvbicpOworCiskbm9kZV9zdGFuZGJ5LT5wc3FsKCdwb3N0Z3JlcycsIHFxW1NFTEVD VCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJyRzdGFuZGJ5X3Nsb3RuYW1lJyldKTsKKwor aXMoJG5vZGVfc3RhbmRieS0+c2xvdCgkc3RhbmRieV9zbG90bmFtZSktPnsnc2xvdF90eXBl J30sICcnLCAnc2xvdCBvbiBzdGFuZGJ5IGRyb3BwZWQgbWFudWFsbHknKTsKKworIyBlbnN1 cmUgd2FscmVjZWl2ZXIgZmVlZGJhY2sgc2VudCBieSB3YWl0aW5nIGZvciBleHBlY3RlZCB4 bWluIGFuZAorIyBjYXRhbG9nX3htaW4gb24gbWFzdGVyLiBjYXRhbG9nX3htaW4gc2hvdWxk IGJlY29tZSBOVUxMIGJlY2F1c2Ugd2UgZHJvcHBlZAorIyB0aGUgbG9naWNhbCBzbG90Lgor d2FpdF9mb3JfeG1pbnMoJG5vZGVfbWFzdGVyLCAkbWFzdGVyX3Nsb3RuYW1lLAorCQkJICAg InhtaW4gSVMgTk9UIE5VTEwgQU5EIGNhdGFsb2dfeG1pbiBJUyBOVUxMIik7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzAyNV9zdGFuZGJ5X2xvZ2ljYWxfZGVjb2Rpbmdf Y29uZmxpY3RzLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjVfc3RhbmRieV9sb2dpY2Fs X2RlY29kaW5nX2NvbmZsaWN0cy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi40MjZhNDEyYjFmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVjb3Zl cnkvdC8wMjVfc3RhbmRieV9sb2dpY2FsX2RlY29kaW5nX2NvbmZsaWN0cy5wbApAQCAtMCww ICsxLDIyOCBAQAorIyBsb2dpY2FsIGRlY29kaW5nIG9uIGEgc3RhbmRieSA6IHRlc3QgY29u ZmxpY3QgcmVjb3Zlcnk7IGFuZCBvdGhlciB0ZXN0cyB0aGF0CisjIHZlcmlmeSBzbG90cyBn ZXQgZHJvcHBlZCBhcyBleHBlY3RlZC4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsK KwordXNlIFBvc3RncmVzTm9kZTsKK3VzZSBUZXN0TGliOwordXNlIFRlc3Q6Ok1vcmUgdGVz dHMgPT4gMjY7Cit1c2UgUmVjdXJzaXZlQ29weTsKK3VzZSBGaWxlOjpDb3B5OwordXNlIFRp bWU6OkhpUmVzIHF3KHVzbGVlcCk7CisKK215ICgkc3RkaW4sICRzdGRvdXQsICRzdGRlcnIs ICRyZXQsICRoYW5kbGUsICRzbG90KTsKKworbXkgJG5vZGVfbWFzdGVyID0gZ2V0X25ld19u b2RlKCdtYXN0ZXInKTsKK215ICRub2RlX3N0YW5kYnkgPSBnZXRfbmV3X25vZGUoJ3N0YW5k YnknKTsKKworIyBOYW1lIGZvciB0aGUgcGh5c2ljYWwgc2xvdCBvbiBtYXN0ZXIKK215ICRt YXN0ZXJfc2xvdG5hbWUgPSAnbWFzdGVyX3BoeXNpY2FsJzsKKworIyBGZXRjaCB4bWluIGNv bHVtbnMgZnJvbSBzbG90J3MgcGdfcmVwbGljYXRpb25fc2xvdHMgcm93LCBhZnRlciB3YWl0 aW5nIGZvcgorIyBnaXZlbiBib29sZWFuIGNvbmRpdGlvbiB0byBiZSB0cnVlIHRvIGVuc3Vy ZSB3ZSd2ZSByZWFjaGVkIGEgcXVpZXNjZW50IHN0YXRlCitzdWIgd2FpdF9mb3JfeG1pbnMK K3sKKwlteSAoJG5vZGUsICRzbG90bmFtZSwgJGNoZWNrX2V4cHIpID0gQF87CisKKwkkbm9k ZS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywgcXFbCisJCVNFTEVDVCAkY2hl Y2tfZXhwcgorCQlGUk9NIHBnX2NhdGFsb2cucGdfcmVwbGljYXRpb25fc2xvdHMKKwkJV0hF UkUgc2xvdF9uYW1lID0gJyRzbG90bmFtZSc7CisJXSkgb3IgZGllICJUaW1lZCBvdXQgd2Fp dGluZyBmb3Igc2xvdCB4bWlucyB0byBhZHZhbmNlIjsKK30KKworIyBWZXJpZnkgdGhhdCBw Z19zdGF0X2RhdGFiYXNlX2NvbmZsaWN0cy5jb25mbF9sb2dpY2Fsc2xvdCBoYXMgYmVlbiB1 cGRhdGVkCitzdWIgY2hlY2tfY29uZmxfbG9naWNhbHNsb3QKK3sKKwlvayggJG5vZGVfc3Rh bmRieS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywKKwkJInNlbGVjdCAoY29u ZmxfbG9naWNhbHNsb3QgPSAyKSBmcm9tIHBnX3N0YXRfZGF0YWJhc2VfY29uZmxpY3RzIHdo ZXJlIGRhdG5hbWUgPSAndGVzdGRiJyIsICd0JyksCisJCSdjb25mbF9sb2dpY2Fsc2xvdCB1 cGRhdGVkJykgb3IgZGllICJUaW1lZCBvdXQgd2FpdGluZyBjb25mbF9sb2dpY2Fsc2xvdCB0 byBiZSB1cGRhdGVkIjsKK30KKworIyBDcmVhdGUgdGhlIHJlcXVpcmVkIGxvZ2ljYWwgc2xv dHMgb24gc3RhbmRieS4KK3N1YiBjcmVhdGVfbG9naWNhbF9zbG90cworeworCSRub2RlX3N0 YW5kYnktPmNyZWF0ZV9sb2dpY2FsX3Nsb3Rfb25fc3RhbmRieSgkbm9kZV9tYXN0ZXIsICdk cm9wc2xvdCcsICd0ZXN0ZGInKTsKKwkkbm9kZV9zdGFuZGJ5LT5jcmVhdGVfbG9naWNhbF9z bG90X29uX3N0YW5kYnkoJG5vZGVfbWFzdGVyLCAnYWN0aXZlc2xvdCcsICd0ZXN0ZGInKTsK K30KKworIyBBY3F1aXJlIG9uZSBvZiB0aGUgc3RhbmRieSBsb2dpY2FsIHNsb3RzIGNyZWF0 ZWQgYnkgY3JlYXRlX2xvZ2ljYWxfc2xvdHMoKQorc3ViIG1ha2Vfc2xvdF9hY3RpdmUKK3sK KwlteSAkc2xvdF91c2VyX2hhbmRsZTsKKworCSMgbWFrZSBzdXJlIGFjdGl2ZXNsb3QgaXMg aW4gdXNlCisJcHJpbnQgInN0YXJ0aW5nIHBnX3JlY3Zsb2dpY2FsXG4iOworCSRzbG90X3Vz ZXJfaGFuZGxlID0gSVBDOjpSdW46OnN0YXJ0KFsncGdfcmVjdmxvZ2ljYWwnLCAnLWQnLCAk bm9kZV9zdGFuZGJ5LT5jb25uc3RyKCd0ZXN0ZGInKSwgJy1TJywgJ2FjdGl2ZXNsb3QnLCAn LWYnLCAnLScsICctLW5vLWxvb3AnLCAnLS1zdGFydCddLCAnPicsIFwkc3Rkb3V0LCAnMj4n LCBcJHN0ZGVycik7CisKKwl3aGlsZSAoISRub2RlX3N0YW5kYnktPnNsb3QoJ2FjdGl2ZXNs b3QnKS0+eydhY3RpdmVfcGlkJ30pCisJeworCQl1c2xlZXAoMTAwXzAwMCk7CisJCXByaW50 ICJ3YWl0aW5nIGZvciBzbG90IHRvIGJlY29tZSBhY3RpdmVcbiI7CisJfQorCXJldHVybiAk c2xvdF91c2VyX2hhbmRsZTsKK30KKworIyBDaGVjayBpZiBhbGwgdGhlIHNsb3RzIG9uIHN0 YW5kYnkgYXJlIGRyb3BwZWQuIFRoZXNlIGluY2x1ZGUgdGhlICdhY3RpdmVzbG90JworIyB0 aGF0IHdhcyBhY3F1aXJlZCBieSBtYWtlX3Nsb3RfYWN0aXZlKCksIGFuZCB0aGUgbm9uLWFj dGl2ZSAnZHJvcHNsb3QnLgorc3ViIGNoZWNrX3Nsb3RzX2Ryb3BwZWQKK3sKKwlteSAoJHNs b3RfdXNlcl9oYW5kbGUpID0gQF87CisJbXkgJHJldHVybjsKKworCWlzKCRub2RlX3N0YW5k YnktPnNsb3QoJ2Ryb3BzbG90JyktPnsnc2xvdF90eXBlJ30sICcnLCAnZHJvcHNsb3Qgb24g c3RhbmRieSBkcm9wcGVkJyk7CisJaXMoJG5vZGVfc3RhbmRieS0+c2xvdCgnYWN0aXZlc2xv dCcpLT57J3Nsb3RfdHlwZSd9LCAnJywgJ2FjdGl2ZXNsb3Qgb24gc3RhbmRieSBkcm9wcGVk Jyk7CisKKwkjIG91ciBjbGllbnQgc2hvdWxkJ3ZlIHRlcm1pbmF0ZWQgaW4gcmVzcG9uc2Ug dG8gdGhlIHdhbHNlbmRlciBlcnJvcgorCWV2YWwgeworCQkkc2xvdF91c2VyX2hhbmRsZS0+ ZmluaXNoOworCX07CisJJHJldHVybiA9ICQ/OworCWNtcF9vaygkcmV0dXJuLCAiIT0iLCAw LCAicGdfcmVjdmxvZ2ljYWwgZXhpdGVkIG5vbi16ZXJvXG4iKTsKKwlpZiAoJHJldHVybikg eworCQlsaWtlKCRzdGRlcnIsIHFyL2NvbmZsaWN0IHdpdGggcmVjb3ZlcnkvLCAncmVjdmxv Z2ljYWwgcmVjb3ZlcnkgY29uZmxpY3QnKTsKKwkJbGlrZSgkc3RkZXJyLCBxci9tdXN0IGJl IGRyb3BwZWQvLCAncmVjdmxvZ2ljYWwgZXJyb3IgZGV0YWlsJyk7CisJfQorCisJcmV0dXJu IDA7Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEluaXRpYWxpemUgbWFz dGVyIG5vZGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiskbm9kZV9tYXN0ZXItPmlu aXQoYWxsb3dzX3N0cmVhbWluZyA9PiAxLCBoYXNfYXJjaGl2aW5nID0+IDEpOworJG5vZGVf bWFzdGVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXsKK3dhbF9sZXZlbCA9 ICdsb2dpY2FsJworbWF4X3JlcGxpY2F0aW9uX3Nsb3RzID0gNAorbWF4X3dhbF9zZW5kZXJz ID0gNAorbG9nX21pbl9tZXNzYWdlcyA9ICdkZWJ1ZzInCitsb2dfZXJyb3JfdmVyYm9zaXR5 ID0gdmVyYm9zZQorIyBzZW5kIHN0YXR1cyByYXBpZGx5IHNvIHdlIHByb21wdGx5IGFkdmFu Y2UgeG1pbiBvbiBtYXN0ZXIKK3dhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwgPSAxCisj IHZlcnkgcHJvbXB0bHkgdGVybWluYXRlIGNvbmZsaWN0aW5nIGJhY2tlbmRzCittYXhfc3Rh bmRieV9zdHJlYW1pbmdfZGVsYXkgPSAnMnMnCit9KTsKKyRub2RlX21hc3Rlci0+ZHVtcF9p bmZvOworJG5vZGVfbWFzdGVyLT5zdGFydDsKKworJG5vZGVfbWFzdGVyLT5wc3FsKCdwb3N0 Z3JlcycsIHFbQ1JFQVRFIERBVEFCQVNFIHRlc3RkYl0pOworCiskbm9kZV9tYXN0ZXItPnNh ZmVfcHNxbCgndGVzdGRiJywgcXFbU0VMRUNUICogRlJPTSBwZ19jcmVhdGVfcGh5c2ljYWxf cmVwbGljYXRpb25fc2xvdCgnJG1hc3Rlcl9zbG90bmFtZScpO10pOworbXkgJGJhY2t1cF9u YW1lID0gJ2IxJzsKKyRub2RlX21hc3Rlci0+YmFja3VwKCRiYWNrdXBfbmFtZSk7CisKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEluaXRpYWxpemUgc2xhdmUgbm9kZQorIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKworJG5vZGVfc3RhbmRieS0+aW5pdF9mcm9tX2JhY2t1cCgK Kwkkbm9kZV9tYXN0ZXIsICRiYWNrdXBfbmFtZSwKKwloYXNfc3RyZWFtaW5nID0+IDEsCisJ aGFzX3Jlc3RvcmluZyA9PiAxKTsKKyRub2RlX3N0YW5kYnktPmFwcGVuZF9jb25mKCdwb3N0 Z3Jlc3FsLmNvbmYnLAorCXFxW3ByaW1hcnlfc2xvdF9uYW1lID0gJyRtYXN0ZXJfc2xvdG5h bWUnXSk7Ciskbm9kZV9zdGFuZGJ5LT5zdGFydDsKKyRub2RlX21hc3Rlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgkbm9kZV9zdGFuZGJ5LCAncmVwbGF5JywgJG5vZGVfbWFzdGVyLT5sc24oJ2Zs dXNoJykpOworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisjIFJlY292ZXJ5IGNvbmZsaWN0OiBEcm9wIGNvbmZsaWN0aW5nIHNsb3Rz LCBpbmNsdWRpbmcgaW4tdXNlIHNsb3RzCisjIFNjZW5hcmlvIDEgOiBob3Rfc3RhbmRieV9m ZWVkYmFjayBvZmYKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisKK2NyZWF0ZV9sb2dpY2FsX3Nsb3RzKCk7CisKKyMgT25lIHdheSB0byBy ZXByb2R1Y2UgcmVjb3ZlcnkgY29uZmxpY3QgaXMgdG8gcnVuIFZBQ1VVTSBGVUxMIHdpdGgK KyMgaG90X3N0YW5kYnlfZmVlZGJhY2sgdHVybmVkIG9mZiBvbiBzbGF2ZS4KKyRub2RlX3N0 YW5kYnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLHFbCitob3Rfc3RhbmRieV9m ZWVkYmFjayA9IG9mZgorXSk7Ciskbm9kZV9zdGFuZGJ5LT5yZXN0YXJ0OworIyBlbnN1cmUg d2FscmVjZWl2ZXIgZmVlZGJhY2sgb2ZmIGJ5IHdhaXRpbmcgZm9yIGV4cGVjdGVkIHhtaW4g YW5kCisjIGNhdGFsb2dfeG1pbiBvbiBtYXN0ZXIuIEJvdGggc2hvdWxkIGJlIE5VTEwgc2lu Y2UgaHNfZmVlZGJhY2sgaXMgb2ZmCit3YWl0X2Zvcl94bWlucygkbm9kZV9tYXN0ZXIsICRt YXN0ZXJfc2xvdG5hbWUsCisJCQkgICAieG1pbiBJUyBOVUxMIEFORCBjYXRhbG9nX3htaW4g SVMgTlVMTCIpOworCiskaGFuZGxlID0gbWFrZV9zbG90X2FjdGl2ZSgpOworCisjIFRoaXMg c2hvdWxkIHRyaWdnZXIgdGhlIGNvbmZsaWN0Ciskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgn dGVzdGRiJywgJ1ZBQ1VVTSBGVUxMJyk7CisKKyRub2RlX21hc3Rlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkbm9kZV9zdGFuZGJ5LCAncmVwbGF5JywgJG5vZGVfbWFzdGVyLT5sc24oJ2ZsdXNo JykpOworCitjaGVja19zbG90c19kcm9wcGVkKCRoYW5kbGUpOworCitjaGVja19jb25mbF9s b2dpY2Fsc2xvdCgpOworCisjIFR1cm4gaG90X3N0YW5kYnlfZmVlZGJhY2sgYmFjayBvbgor JG5vZGVfc3RhbmRieS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicscVsKK2hvdF9z dGFuZGJ5X2ZlZWRiYWNrID0gb24KK10pOworJG5vZGVfc3RhbmRieS0+cmVzdGFydDsKKwor IyBlbnN1cmUgd2FscmVjZWl2ZXIgZmVlZGJhY2sgc2VudCBieSB3YWl0aW5nIGZvciBleHBl Y3RlZCB4bWluIGFuZAorIyBjYXRhbG9nX3htaW4gb24gbWFzdGVyLiBXaXRoIGhvdF9zdGFu ZGJ5X2ZlZWRiYWNrIG9uLCB4bWluIHNob3VsZCBhZHZhbmNlLAorIyBidXQgY2F0YWxvZ194 bWluIHNob3VsZCBzdGlsbCByZW1haW4gTlVMTCBzaW5jZSB0aGVyZSBpcyBubyBsb2dpY2Fs IHNsb3QuCit3YWl0X2Zvcl94bWlucygkbm9kZV9tYXN0ZXIsICRtYXN0ZXJfc2xvdG5hbWUs CisJCQkgICAieG1pbiBJUyBOT1QgTlVMTCBBTkQgY2F0YWxvZ194bWluIElTIE5VTEwiKTsK KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KyMgUmVjb3ZlcnkgY29uZmxpY3Q6IERyb3AgY29uZmxpY3Rpbmcgc2xvdHMsIGluY2x1ZGlu ZyBpbi11c2Ugc2xvdHMKKyMgU2NlbmFyaW8gMiA6IGluY29ycmVjdCB3YWxfbGV2ZWwgYXQg bWFzdGVyCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworCitjcmVhdGVfbG9naWNhbF9zbG90cygpOworCiskaGFuZGxlID0gbWFrZV9zbG90 X2FjdGl2ZSgpOworCisjIE1ha2UgbWFzdGVyIHdhbF9sZXZlbCByZXBsaWNhLiBUaGlzIHdp bGwgdHJpZ2dlciBzbG90IGNvbmZsaWN0LgorJG5vZGVfbWFzdGVyLT5hcHBlbmRfY29uZign cG9zdGdyZXNxbC5jb25mJyxxWword2FsX2xldmVsID0gJ3JlcGxpY2EnCitdKTsKKyRub2Rl X21hc3Rlci0+cmVzdGFydDsKKworJG5vZGVfbWFzdGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRu b2RlX3N0YW5kYnksICdyZXBsYXknLCAkbm9kZV9tYXN0ZXItPmxzbignZmx1c2gnKSk7CisK K2NoZWNrX3Nsb3RzX2Ryb3BwZWQoJGhhbmRsZSk7CisKK2NoZWNrX2NvbmZsX2xvZ2ljYWxz bG90KCk7CisKKyMgUmVzdG9yZSBtYXN0ZXIgd2FsX2xldmVsCiskbm9kZV9tYXN0ZXItPmFw cGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLHFbCit3YWxfbGV2ZWwgPSAnbG9naWNhbCcK K10pOworJG5vZGVfbWFzdGVyLT5yZXN0YXJ0OworJG5vZGVfbWFzdGVyLT53YWl0X2Zvcl9j YXRjaHVwKCRub2RlX3N0YW5kYnksICdyZXBsYXknLCAkbm9kZV9tYXN0ZXItPmxzbignZmx1 c2gnKSk7CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKyMgRFJPUCBEQVRBQkFTRSBzaG91bGQgZHJvcHMgaXQncyBzbG90cywgaW5j bHVkaW5nIGFjdGl2ZSBzbG90cy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisKK2NyZWF0ZV9sb2dpY2FsX3Nsb3RzKCk7CiskaGFuZGxl ID0gbWFrZV9zbG90X2FjdGl2ZSgpOworIyBDcmVhdGUgYSBzbG90IG9uIGEgZGF0YWJhc2Ug dGhhdCB3b3VsZCBub3QgYmUgZHJvcHBlZC4gVGhpcyBzbG90IHNob3VsZCBub3QKKyMgZ2V0 IGRyb3BwZWQuCiskbm9kZV9zdGFuZGJ5LT5jcmVhdGVfbG9naWNhbF9zbG90X29uX3N0YW5k YnkoJG5vZGVfbWFzdGVyLCAnb3RoZXJzbG90JywgJ3Bvc3RncmVzJyk7CisKKyMgZHJvcGRi IG9uIHRoZSBtYXN0ZXIgdG8gdmVyaWZ5IHNsb3RzIGFyZSBkcm9wcGVkIG9uIHN0YW5kYnkK KyRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFbRFJPUCBEQVRBQkFTRSB0 ZXN0ZGJdKTsKKworJG5vZGVfbWFzdGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRub2RlX3N0YW5k YnksICdyZXBsYXknLCAkbm9kZV9tYXN0ZXItPmxzbignZmx1c2gnKSk7CisKK2lzKCRub2Rl X3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFbU0VMRUNUIEVYSVNUUyhTRUxF Q1QgMSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIGRhdG5hbWUgPSAndGVzdGRiJyldKSwgJ2Yn LAorCSdkYXRhYmFzZSBkcm9wcGVkIG9uIHN0YW5kYnknKTsKKworY2hlY2tfc2xvdHNfZHJv cHBlZCgkaGFuZGxlKTsKKworaXMoJG5vZGVfc3RhbmRieS0+c2xvdCgnb3RoZXJzbG90Jykt Pnsnc2xvdF90eXBlJ30sICdsb2dpY2FsJywKKwknb3RoZXJzbG90IG9uIHN0YW5kYnkgbm90 IGRyb3BwZWQnKTsKKworIyBDbGVhbnVwIDogbWFudWFsbHkgZHJvcCB0aGUgc2xvdCB0aGF0 IHdhcyBub3QgZHJvcHBlZC4KKyRub2RlX3N0YW5kYnktPnBzcWwoJ3Bvc3RncmVzJywgcVtT RUxFQ1QgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90KCdvdGhlcnNsb3QnKV0pOwotLSAKMi4x Ni42Cgo= --------------C4FC6AF2A8522BE3AE2F182D Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="v16-0003-Handle-logical-slot-conflicts-on-standby.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v16-0003-Handle-logical-slot-conflicts-on-standby.patch" RnJvbSBjZjIzMTFiYzA5Y2FlZjk5NmZlYmNkZmEzZWFiNTU4YjRhNDhmZDg4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCZXJ0cmFuZCBEcm91dm90IDxiZHJvdXZvdEBhbWF6 b24uY29tPgpEYXRlOiBXZWQsIDcgQXByIDIwMjEgMDg6MzQ6MDIgKzAwMDAKU3ViamVjdDog W1BBVENIIHYxNiAzLzVdIEhhbmRsZSBsb2dpY2FsIHNsb3QgY29uZmxpY3RzIG9uIHN0YW5k YnkuCgpEdXJpbmcgV0FMIHJlcGxheSBvbiBzdGFuZGJ5LCB3aGVuIHNsb3QgY29uZmxpY3Qg aXMgaWRlbnRpZmllZCwKZHJvcCBzdWNoIHNsb3RzLiBBbHNvIGRvIHRoZSBzYW1lIHRoaW5n IGlmIHdhbF9sZXZlbCBvbiBtYXN0ZXIKaXMgcmVkdWNlZCB0byBiZWxvdyBsb2dpY2FsIGFu ZCB0aGVyZSBhcmUgZXhpc3RpbmcgbG9naWNhbCBzbG90cwpvbiBzdGFuZGJ5LiBJbnRyb2R1 Y2UgYSBuZXcgUHJvY1NpZ25hbFJlYXNvbiB2YWx1ZSBmb3Igc2xvdApjb25mbGljdCByZWNv dmVyeS4gQXJyYW5nZSBmb3IgYSBuZXcgcGdfc3RhdF9nZXRfYWN0aXZpdHkgZmllbGQ6CmNv bmZsX2xvZ2ljYWxzbG90LgoKQW1pdCBLaGFuZGVrYXIsIHJldmlld2VkIGJ5IEFuZHJlcyBG cmV1bmQuCi0tLQogZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCAgICAgICAgIHwgIDEw ICsrCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jICAgfCAgIDQgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jICB8ICAgMyArLQogc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHhsb2cuYyAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdp c3Qvc3BneGxvZy5jICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMgICAgfCAgMTQgKysrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwg fCAgIDMgKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdzdGF0LmMgICAgICB8ICAyMiAr KysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jICAgICAgIHwgMTgzICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9wcm9jYXJyYXkuYyAgfCAgIDQgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3Np Z25hbC5jIHwgICAzICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyAgICB8 ICAxMSArKy0KIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICB8ICAyMiAr KysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMgIHwgIDE2ICsrKwog c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgIHwgICA1ICsKIHNyYy9pbmNs dWRlL3Bnc3RhdC5oICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9zbG90LmggICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9j c2lnbmFsLmggICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oICAg ICAgICB8ICAgNCArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgIHwg ICAzICstCiAyMSBmaWxlcyBjaGFuZ2VkLCAzMTQgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRp b25zKC0pCiAgIDQuNyUgc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvCiAgIDYuMSUgc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vCiAgIDUuOSUgc3JjL2JhY2tlbmQvYWNjZXNzLwogICA0 LjklIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvCiAgNDkuMSUgc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vCiAgIDYuNSUgc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvCiAgIDguMSUgc3JjL2Jh Y2tlbmQvdGNvcC8KICAgMy4xJSBzcmMvYmFja2VuZC91dGlscy9hZHQvCiAgIDYuNSUgc3Jj L2luY2x1ZGUvCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCBi L2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKaW5kZXggNTYwMTg3NDVjOC4uODUwY2M5 N2IxYiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCkBAIC0zOTg1LDYgKzM5ODUsMTYgQEAgU0VM RUNUIHBpZCwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50IEZST00gcGdfc3RhdF9hY3Rp dml0eSBXSEVSRSB3YWl0X2V2ZW50IGkKICAgICAgICBkZWFkbG9ja3MKICAgICAgIDwvcGFy YT48L2VudHJ5PgogICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJv bGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9u Ij4KKyAgICAgICA8c3RydWN0ZmllbGQ+Y29uZmxfbG9naWNhbHNsb3Q8L3N0cnVjdGZpZWxk PiA8dHlwZT5iaWdpbnQ8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAg ICAgICBOdW1iZXIgb2YgcXVlcmllcyBpbiB0aGlzIGRhdGFiYXNlIHRoYXQgaGF2ZSBiZWVu IGNhbmNlbGVkIGR1ZSB0bworICAgICAgIGxvZ2ljYWwgc2xvdHMKKyAgICAgIDwvcGFyYT48 L2VudHJ5PgorICAgICA8L3Jvdz4KICAgICA8L3Rib2R5PgogICAgPC90Z3JvdXA+CiAgIDwv dGFibGU+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYwppbmRleCA0NmFlZTZmMmE5 Li41OTYzZTYzOWQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 eGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R4bG9nLmMKQEAgLTE5 NSw3ICsxOTUsOCBAQCBnaXN0UmVkb0RlbGV0ZVJlY29yZChYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCkKIAogCQlYTG9nUmVjR2V0QmxvY2tUYWcocmVjb3JkLCAwLCAmcm5vZGUsIE5VTEws IE5VTEwpOwogCi0JCVJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFNuYXBzaG90KHhsZGF0 YS0+bGF0ZXN0UmVtb3ZlZFhpZCwgcm5vZGUpOworCQlSZXNvbHZlUmVjb3ZlcnlDb25mbGlj dFdpdGhTbmFwc2hvdCh4bGRhdGEtPmxhdGVzdFJlbW92ZWRYaWQsCisJCQkJCQkJCQkJCXhs ZGF0YS0+b25DYXRhbG9nVGFibGUsIHJub2RlKTsKIAl9CiAKIAlpZiAoWExvZ1JlYWRCdWZm ZXJGb3JSZWRvKHJlY29yZCwgMCwgJmJ1ZmZlcikgPT0gQkxLX05FRURTX1JFRE8pCkBAIC0z OTUsNiArMzk2LDcgQEAgZ2lzdFJlZG9QYWdlUmV1c2UoWExvZ1JlYWRlclN0YXRlICpyZWNv cmQpCiAJICovCiAJaWYgKEluSG90U3RhbmRieSkKIAkJUmVzb2x2ZVJlY292ZXJ5Q29uZmxp Y3RXaXRoU25hcHNob3RGdWxsWGlkKHhscmVjLT5sYXRlc3RSZW1vdmVkRnVsbFhpZCwKKwkJ CQkJCQkJCQkJCSAgIHhscmVjLT5vbkNhdGFsb2dUYWJsZSwKIAkJCQkJCQkJCQkJCSAgIHhs cmVjLT5ub2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaF94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYwppbmRl eCBhZjM1YTk5MWZjLi5mOTFkNGMzNmUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoX3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo X3hsb2cuYwpAQCAtMTAwMiw3ICsxMDAyLDggQEAgaGFzaF94bG9nX3ZhY3V1bV9vbmVfcGFn ZShYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJUmVsRmlsZU5vZGUgcm5vZGU7CiAKIAkJ WExvZ1JlY0dldEJsb2NrVGFnKHJlY29yZCwgMCwgJnJub2RlLCBOVUxMLCBOVUxMKTsKLQkJ UmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoU25hcHNob3QoeGxkYXRhLT5sYXRlc3RSZW1v dmVkWGlkLCBybm9kZSk7CisJCVJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFNuYXBzaG90 KHhsZGF0YS0+bGF0ZXN0UmVtb3ZlZFhpZCwKKwkJCQkJCQkJCQkJeGxkYXRhLT5vbkNhdGFs b2dUYWJsZSwgcm5vZGUpOwogCX0KIAogCWFjdGlvbiA9IFhMb2dSZWFkQnVmZmVyRm9yUmVk b0V4dGVuZGVkKHJlY29yZCwgMCwgUkJNX05PUk1BTCwgdHJ1ZSwgJmJ1ZmZlcik7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbS5jCmluZGV4IDEwMDkwMTExN2UuLjY1N2M1MjU4ODQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCkBAIC04NDUxLDcgKzg0NTEsOCBAQCBoZWFw X3hsb2dfcHJ1bmUoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJICogbm8gcXVlcmllcyBy dW5uaW5nIGZvciB3aGljaCB0aGUgcmVtb3ZlZCB0dXBsZXMgYXJlIHN0aWxsIHZpc2libGUu CiAJICovCiAJaWYgKEluSG90U3RhbmRieSkKLQkJUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RX aXRoU25hcHNob3QoeGxyZWMtPmxhdGVzdFJlbW92ZWRYaWQsIHJub2RlKTsKKwkJUmVzb2x2 ZVJlY292ZXJ5Q29uZmxpY3RXaXRoU25hcHNob3QoeGxyZWMtPmxhdGVzdFJlbW92ZWRYaWQs CisJCQkJCQkJCQkJCXhscmVjLT5vbkNhdGFsb2dUYWJsZSwgcm5vZGUpOwogCiAJLyoKIAkg KiBJZiB3ZSBoYXZlIGEgZnVsbC1wYWdlIGltYWdlLCByZXN0b3JlIGl0ICh1c2luZyBhIGNs ZWFudXAgbG9jaykgYW5kCkBAIC04NjIxLDcgKzg2MjIsOSBAQCBoZWFwX3hsb2dfdmlzaWJs ZShYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkgKiByYXRoZXIgdGhhbiBraWxsaW5nIHRo ZSB0cmFuc2FjdGlvbiBvdXRyaWdodC4KIAkgKi8KIAlpZiAoSW5Ib3RTdGFuZGJ5KQotCQlS ZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhTbmFwc2hvdCh4bHJlYy0+Y3V0b2ZmX3hpZCwg cm5vZGUpOworCQlSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhTbmFwc2hvdCh4bHJlYy0+ Y3V0b2ZmX3hpZCwKKwkJCQkJCQkJCQkJeGxyZWMtPm9uQ2F0YWxvZ1RhYmxlLAorCQkJCQkJ CQkJCQlybm9kZSk7CiAKIAkvKgogCSAqIFJlYWQgdGhlIGhlYXAgcGFnZSwgaWYgaXQgc3Rp bGwgZXhpc3RzLiBJZiB0aGUgaGVhcCBmaWxlIGhhcyBkcm9wcGVkIG9yCkBAIC04NzU4LDcg Kzg3NjEsOCBAQCBoZWFwX3hsb2dfZnJlZXplX3BhZ2UoWExvZ1JlYWRlclN0YXRlICpyZWNv cmQpCiAJCVRyYW5zYWN0aW9uSWRSZXRyZWF0KGxhdGVzdFJlbW92ZWRYaWQpOwogCiAJCVhM b2dSZWNHZXRCbG9ja1RhZyhyZWNvcmQsIDAsICZybm9kZSwgTlVMTCwgTlVMTCk7Ci0JCVJl c29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFNuYXBzaG90KGxhdGVzdFJlbW92ZWRYaWQsIHJu b2RlKTsKKwkJUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoU25hcHNob3QobGF0ZXN0UmVt b3ZlZFhpZCwKKwkJCQkJCQkJCQkJeGxyZWMtPm9uQ2F0YWxvZ1RhYmxlLCBybm9kZSk7CiAJ fQogCiAJaWYgKFhMb2dSZWFkQnVmZmVyRm9yUmVkbyhyZWNvcmQsIDAsICZidWZmZXIpID09 IEJMS19ORUVEU19SRURPKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnR4bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYwppbmRl eCAxNzc5YjZiYTQ3Li4zNmVlMzEzNDI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHhsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHhsb2cuYwpAQCAtNjY5LDcgKzY2OSw4IEBAIGJ0cmVlX3hsb2dfZGVsZXRlKFhMb2dSZWFk ZXJTdGF0ZSAqcmVjb3JkKQogCiAJCVhMb2dSZWNHZXRCbG9ja1RhZyhyZWNvcmQsIDAsICZy bm9kZSwgTlVMTCwgTlVMTCk7CiAKLQkJUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoU25h cHNob3QoeGxyZWMtPmxhdGVzdFJlbW92ZWRYaWQsIHJub2RlKTsKKwkJUmVzb2x2ZVJlY292 ZXJ5Q29uZmxpY3RXaXRoU25hcHNob3QoeGxyZWMtPmxhdGVzdFJlbW92ZWRYaWQsCisJCQkJ CQkJCQkJCXhscmVjLT5vbkNhdGFsb2dUYWJsZSwgcm5vZGUpOwogCX0KIAogCS8qCkBAIC0x MDA3LDYgKzEwMDgsNyBAQCBidHJlZV94bG9nX3JldXNlX3BhZ2UoWExvZ1JlYWRlclN0YXRl ICpyZWNvcmQpCiAKIAlpZiAoSW5Ib3RTdGFuZGJ5KQogCQlSZXNvbHZlUmVjb3ZlcnlDb25m bGljdFdpdGhTbmFwc2hvdEZ1bGxYaWQoeGxyZWMtPmxhdGVzdFJlbW92ZWRGdWxsWGlkLAor CQkJCQkJCQkJCQkJICAgeGxyZWMtPm9uQ2F0YWxvZ1RhYmxlLAogCQkJCQkJCQkJCQkJICAg eGxyZWMtPm5vZGUpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Bn aXN0L3NwZ3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BneGxvZy5jCmlu ZGV4IDNkZmQyYWEzMTcuLmFkZDRkYTRlNzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zcGdpc3Qvc3BneGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BneGxvZy5jCkBAIC04ODEsNiArODgxLDcgQEAgc3BnUmVkb1ZhY3V1bVJlZGlyZWN0KFhM b2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCiAJCQlYTG9nUmVjR2V0QmxvY2tUYWcocmVjb3Jk LCAwLCAmbm9kZSwgTlVMTCwgTlVMTCk7CiAJCQlSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdp dGhTbmFwc2hvdCh4bGRhdGEtPm5ld2VzdFJlZGlyZWN0WGlkLAorCQkJCQkJCQkJCQkJeGxk YXRhLT5vbkNhdGFsb2dUYWJsZSwKIAkJCQkJCQkJCQkJCW5vZGUpOwogCQl9CiAJfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IGIzMzVhMjYyZTMuLjkwYzg2YjIxOWYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTEwMzY5LDYgKzEwMzY5LDIw IEBAIHhsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJLyogVXBkYXRlIG91 ciBjb3B5IG9mIHRoZSBwYXJhbWV0ZXJzIGluIHBnX2NvbnRyb2wgKi8KIAkJbWVtY3B5KCZ4 bHJlYywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKHhsX3BhcmFtZXRlcl9jaGFu Z2UpKTsKIAorCQkvKgorCQkgKiBEcm9wIGxvZ2ljYWwgc2xvdHMgaWYgd2UgYXJlIGluIGhv dCBzdGFuZGJ5IGFuZCB0aGUgcHJpbWFyeSBkb2VzIG5vdAorCQkgKiBoYXZlIGEgV0FMIGxl dmVsIHN1ZmZpY2llbnQgZm9yIGxvZ2ljYWwgZGVjb2RpbmcuIE5vIG5lZWQgdG8gc2VhcmNo CisJCSAqIGZvciBwb3RlbnRpYWxseSBjb25mbGljdGluZyBsb2dpY2FsbHkgc2xvdHMgaWYg c3RhbmRieSBpcyBydW5uaW5nCisJCSAqIHdpdGggd2FsX2xldmVsIGxvd2VyIHRoYW4gbG9n aWNhbCwgYmVjYXVzZSBpbiB0aGF0IGNhc2UsIHdlIHdvdWxkCisJCSAqIGhhdmUgZWl0aGVy IGRpc2FsbG93ZWQgY3JlYXRpb24gb2YgbG9naWNhbCBzbG90cyBvciBkcm9wcGVkIGV4aXN0 aW5nCisJCSAqIG9uZXMuCisJCSAqLworCQlpZiAoSW5SZWNvdmVyeSAmJiBJbkhvdFN0YW5k YnkgJiYKKwkJCXhscmVjLndhbF9sZXZlbCA8IFdBTF9MRVZFTF9MT0dJQ0FMICYmCisJCQl3 YWxfbGV2ZWwgPj0gV0FMX0xFVkVMX0xPR0lDQUwpCisJCQlSZXNvbHZlUmVjb3ZlcnlDb25m bGljdFdpdGhMb2dpY2FsU2xvdHMoSW52YWxpZE9pZCwgSW52YWxpZFRyYW5zYWN0aW9uSWQs CisJCQkJZ2V0dGV4dF9ub29wKCJMb2dpY2FsIGRlY29kaW5nIG9uIHN0YW5kYnkgcmVxdWly ZXMgd2FsX2xldmVsID49IGxvZ2ljYWwgb24gbWFzdGVyLiIpKTsKKwogCQlMV0xvY2tBY3F1 aXJlKENvbnRyb2xGaWxlTG9jaywgTFdfRVhDTFVTSVZFKTsKIAkJQ29udHJvbEZpbGUtPk1h eENvbm5lY3Rpb25zID0geGxyZWMuTWF4Q29ubmVjdGlvbnM7CiAJCUNvbnRyb2xGaWxlLT5t YXhfd29ya2VyX3Byb2Nlc3NlcyA9IHhscmVjLm1heF93b3JrZXJfcHJvY2Vzc2VzOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IDVmMjU0MWQzMTYuLjM3NDAw N2RmOWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNx bAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKQEAgLTEwMTUs NyArMTAxNSw4IEBAIENSRUFURSBWSUVXIHBnX3N0YXRfZGF0YWJhc2VfY29uZmxpY3RzIEFT CiAgICAgICAgICAgICBwZ19zdGF0X2dldF9kYl9jb25mbGljdF9sb2NrKEQub2lkKSBBUyBj b25mbF9sb2NrLAogICAgICAgICAgICAgcGdfc3RhdF9nZXRfZGJfY29uZmxpY3Rfc25hcHNo b3QoRC5vaWQpIEFTIGNvbmZsX3NuYXBzaG90LAogICAgICAgICAgICAgcGdfc3RhdF9nZXRf ZGJfY29uZmxpY3RfYnVmZmVycGluKEQub2lkKSBBUyBjb25mbF9idWZmZXJwaW4sCi0gICAg ICAgICAgICBwZ19zdGF0X2dldF9kYl9jb25mbGljdF9zdGFydHVwX2RlYWRsb2NrKEQub2lk KSBBUyBjb25mbF9kZWFkbG9jaworICAgICAgICAgICAgcGdfc3RhdF9nZXRfZGJfY29uZmxp Y3Rfc3RhcnR1cF9kZWFkbG9jayhELm9pZCkgQVMgY29uZmxfZGVhZGxvY2ssCisgICAgICAg ICAgICBwZ19zdGF0X2dldF9kYl9jb25mbGljdF9sb2dpY2Fsc2xvdChELm9pZCkgQVMgY29u ZmxfbG9naWNhbHNsb3QKICAgICBGUk9NIHBnX2RhdGFiYXNlIEQ7CiAKIENSRUFURSBWSUVX IHBnX3N0YXRfdXNlcl9mdW5jdGlvbnMgQVMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcGdzdGF0LmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bnc3RhdC5jCmlu ZGV4IDViYTc3NmU3ODkuLjAzYzVkYmVhNDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcGdzdGF0LmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ3N0YXQu YwpAQCAtMjkyOCw2ICsyOTI4LDI0IEBAIHBnc3RhdF9zZW5kX2FyY2hpdmVyKGNvbnN0IGNo YXIgKnhsb2csIGJvb2wgZmFpbGVkKQogCXBnc3RhdF9zZW5kKCZtc2csIHNpemVvZihtc2cp KTsKIH0KIAorLyogLS0tLS0tLS0tLQorICogcGdzdGF0X3NlbmRfZHJvcGxvZ2ljYWxzbG90 KCkgLQorICoKKyAqCVRlbGwgdGhlIGNvbGxlY3RvciBhYm91dCBhIGxvZ2ljYWwgc2xvdCBi ZWluZyBkcm9wcGVkCisgKglkdWUgdG8gY29uZmxpY3QuCisgKiAtLS0tLS0tLS0tCisgKi8K K3ZvaWQKK3Bnc3RhdF9zZW5kX2Ryb3Bsb2dpY2Fsc2xvdChPaWQgZGJPaWQpCit7CisJUGdT dGF0X01zZ1JlY292ZXJ5Q29uZmxpY3QgbXNnOworCisJcGdzdGF0X3NldGhlYWRlcigmbXNn Lm1faGRyLCBQR1NUQVRfTVRZUEVfUkVDT1ZFUllDT05GTElDVCk7CisJbXNnLm1fZGF0YWJh c2VpZCA9IGRiT2lkOworCW1zZy5tX3JlYXNvbiA9IFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJ Q1RfTE9HSUNBTFNMT1Q7CisJcGdzdGF0X3NlbmQoJm1zZywgc2l6ZW9mKG1zZykpOworfQor CiAvKiAtLS0tLS0tLS0tCiAgKiBwZ3N0YXRfc2VuZF9iZ3dyaXRlcigpIC0KICAqCkBAIC0z NDAyLDYgKzM0MjAsNyBAQCByZXNldF9kYmVudHJ5X2NvdW50ZXJzKFBnU3RhdF9TdGF0REJF bnRyeSAqZGJlbnRyeSkKIAlkYmVudHJ5LT5uX2NvbmZsaWN0X3RhYmxlc3BhY2UgPSAwOwog CWRiZW50cnktPm5fY29uZmxpY3RfbG9jayA9IDA7CiAJZGJlbnRyeS0+bl9jb25mbGljdF9z bmFwc2hvdCA9IDA7CisJZGJlbnRyeS0+bl9jb25mbGljdF9sb2dpY2Fsc2xvdCA9IDA7CiAJ ZGJlbnRyeS0+bl9jb25mbGljdF9idWZmZXJwaW4gPSAwOwogCWRiZW50cnktPm5fY29uZmxp Y3Rfc3RhcnR1cF9kZWFkbG9jayA9IDA7CiAJZGJlbnRyeS0+bl90ZW1wX2ZpbGVzID0gMDsK QEAgLTUyOTAsNiArNTMwOSw5IEBAIHBnc3RhdF9yZWN2X3JlY292ZXJ5Y29uZmxpY3QoUGdT dGF0X01zZ1JlY292ZXJ5Q29uZmxpY3QgKm1zZywgaW50IGxlbikKIAkJY2FzZSBQUk9DU0lH X1JFQ09WRVJZX0NPTkZMSUNUX1NOQVBTSE9UOgogCQkJZGJlbnRyeS0+bl9jb25mbGljdF9z bmFwc2hvdCsrOwogCQkJYnJlYWs7CisJCWNhc2UgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElD VF9MT0dJQ0FMU0xPVDoKKwkJCWRiZW50cnktPm5fY29uZmxpY3RfbG9naWNhbHNsb3QrKzsK KwkJCWJyZWFrOwogCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElO OgogCQkJZGJlbnRyeS0+bl9jb25mbGljdF9idWZmZXJwaW4rKzsKIAkJCWJyZWFrOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vc2xvdC5jCmluZGV4IDJlYzcxMjc5NDcuLjQ5NDVkZDFhNGYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9zbG90LmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJwZ3N0 YXQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9mZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAidXRp bHMvYnVpbHRpbnMuaCIKQEAgLTEwMyw2ICsxMDQsNyBAQCBzdGF0aWMgaW50IFJlcGxpY2F0 aW9uU2xvdEFjcXVpcmVJbnRlcm5hbChSZXBsaWNhdGlvblNsb3QgKnNsb3QsCiAJCQkJCQkJ CQkJICBjb25zdCBjaGFyICpuYW1lLCBTbG90QWNxdWlyZUJlaGF2aW9yIGJlaGF2aW9yKTsK IHN0YXRpYyB2b2lkIFJlcGxpY2F0aW9uU2xvdERyb3BBY3F1aXJlZCh2b2lkKTsKIHN0YXRp YyB2b2lkIFJlcGxpY2F0aW9uU2xvdERyb3BQdHIoUmVwbGljYXRpb25TbG90ICpzbG90KTsK K3N0YXRpYyB2b2lkIFJlcGxpY2F0aW9uU2xvdERyb3BDb25mbGljdGluZyhSZXBsaWNhdGlv blNsb3QgKnNsb3QpOwogCiAvKiBpbnRlcm5hbCBwZXJzaXN0ZW5jeSBmdW5jdGlvbnMgKi8K IHN0YXRpYyB2b2lkIFJlc3RvcmVTbG90RnJvbURpc2soY29uc3QgY2hhciAqbmFtZSk7CkBA IC03MTksNiArNzIxLDcwIEBAIFJlcGxpY2F0aW9uU2xvdERyb3BQdHIoUmVwbGljYXRpb25T bG90ICpzbG90KQogCUxXTG9ja1JlbGVhc2UoUmVwbGljYXRpb25TbG90QWxsb2NhdGlvbkxv Y2spOwogfQogCisvKgorICogUGVybWFuZW50bHkgZHJvcCBhIGNvbmZsaWN0aW5nIHJlcGxp Y2F0aW9uIHNsb3QuIElmIGl0J3MgYWxyZWFkeSBhY3RpdmUgYnkKKyAqIGFub3RoZXIgYmFj a2VuZCwgc2VuZCBpdCBhIHJlY292ZXJ5IGNvbmZsaWN0IHNpZ25hbCwgYW5kIHRoZW4gdHJ5 IGFnYWluLgorICovCitzdGF0aWMgdm9pZAorUmVwbGljYXRpb25TbG90RHJvcENvbmZsaWN0 aW5nKFJlcGxpY2F0aW9uU2xvdCAqc2xvdCkKK3sKKwlwaWRfdAkJYWN0aXZlX3BpZDsKKwlQ R1BST0MJICAgKnByb2M7CisJVmlydHVhbFRyYW5zYWN0aW9uSWQJdnhpZDsKKwlib29sIGlu aXRpYWxseV9ub3RfYWN0aXZlOworCisJQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVl cCgmc2xvdC0+YWN0aXZlX2N2KTsKKwlpbml0aWFsbHlfbm90X2FjdGl2ZSA9IHRydWU7CisJ d2hpbGUgKDEpCisJeworCQlTcGluTG9ja0FjcXVpcmUoJnNsb3QtPm11dGV4KTsKKwkJYWN0 aXZlX3BpZCA9IHNsb3QtPmFjdGl2ZV9waWQ7CisJCWlmIChhY3RpdmVfcGlkID09IDApCisJ CQlhY3RpdmVfcGlkID0gc2xvdC0+YWN0aXZlX3BpZCA9IE15UHJvY1BpZDsKKwkJU3Bpbkxv Y2tSZWxlYXNlKCZzbG90LT5tdXRleCk7CisKKwkJLyogRHJvcCB0aGUgYWNxdWlyZWQgc2xv dCwgdW5sZXNzIGl0IGlzIGFjcXVpcmVkIGJ5IGFub3RoZXIgYmFja2VuZCAqLworCQlpZiAo YWN0aXZlX3BpZCA9PSBNeVByb2NQaWQpCisJCXsKKwkJCWVsb2coREVCVUcxLCAiYWNxdWly ZWQgY29uZmxpY3Rpbmcgc2xvdCwgbm93IGRyb3BwaW5nIGl0Iik7CisJCQlpZiAoaW5pdGlh bGx5X25vdF9hY3RpdmUpCisJCQkJcGdzdGF0X3NlbmRfZHJvcGxvZ2ljYWxzbG90KHNsb3Qt PmRhdGEuZGF0YWJhc2UpOworCQkJUmVwbGljYXRpb25TbG90RHJvcFB0cihzbG90KTsKKwkJ CWJyZWFrOworCQl9CisKKwkJLyogc2xvdCB3YXMgYWN0aXZlICovCisJCWluaXRpYWxseV9u b3RfYWN0aXZlID0gZmFsc2U7CisKKwkJLyogU2VuZCB0aGUgb3RoZXIgYmFja2VuZCwgYSBj b25mbGljdCByZWNvdmVyeSBzaWduYWwgKi8KKwkJU2V0SW52YWxpZFZpcnR1YWxUcmFuc2Fj dGlvbklkKHZ4aWQpOworCQlMV0xvY2tBY3F1aXJlKFByb2NBcnJheUxvY2ssIExXX1NIQVJF RCk7CisJCXByb2MgPSBCYWNrZW5kUGlkR2V0UHJvY1dpdGhMb2NrKGFjdGl2ZV9waWQpOwor CQlpZiAocHJvYykKKwkJCUdFVF9WWElEX0ZST01fUEdQUk9DKHZ4aWQsICpwcm9jKTsKKwkJ TFdMb2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKKworCQkvKgorCQkgKiBJZiBjb2luY2lk ZW50bHkgdGhhdCBwcm9jZXNzIGZpbmlzaGVkLCBzb21lIG90aGVyIGJhY2tlbmQgbWF5CisJ CSAqIGFjcXVpcmUgdGhlIHNsb3QgYWdhaW4uIFNvIHN0YXJ0IG92ZXIgYWdhaW4uCisJCSAq IE5vdGU6IEV2ZW4gaWYgdnhpZC5sb2NhbFRyYW5zYWN0aW9uSWQgaXMgaW52YWxpZCwgd2Ug bmVlZCB0byBjYW5jZWwKKwkJICogdGhhdCBiYWNrZW5kLCBiZWNhdXNlIHRoZXJlIGlzIG5v IG90aGVyIHdheSB0byBtYWtlIGl0IHJlbGVhc2UgdGhlCisJCSAqIHNsb3QuIFNvIGRvbid0 IGJvdGhlciB0byB2YWxpZGF0ZSB2eGlkLmxvY2FsVHJhbnNhY3Rpb25JZC4KKwkJICovCisJ CWlmICh2eGlkLmJhY2tlbmRJZCA9PSBJbnZhbGlkQmFja2VuZElkKQorCQkJY29udGludWU7 CisKKwkJZWxvZyhERUJVRzEsICJjYW5jZWxsaW5nIHBpZCAlZCAoYmFja2VuZElkOiAlZCkg Zm9yIHJlbGVhc2luZyBzbG90IiwKKwkJCQkJIGFjdGl2ZV9waWQsIHZ4aWQuYmFja2VuZElk KTsKKworCQlDYW5jZWxWaXJ0dWFsVHJhbnNhY3Rpb24odnhpZCwgUFJPQ1NJR19SRUNPVkVS WV9DT05GTElDVF9MT0dJQ0FMU0xPVCk7CisJCUNvbmRpdGlvblZhcmlhYmxlU2xlZXAoJnNs b3QtPmFjdGl2ZV9jdiwKKwkJCQkJCQkgICBXQUlUX0VWRU5UX1JFUExJQ0FUSU9OX1NMT1Rf RFJPUCk7CisJfQorCisJQ29uZGl0aW9uVmFyaWFibGVDYW5jZWxTbGVlcCgpOworfQorCiAv KgogICogU2VyaWFsaXplIHRoZSBjdXJyZW50bHkgYWNxdWlyZWQgc2xvdCdzIHN0YXRlIGZy b20gbWVtb3J5IHRvIGRpc2ssIHRoZXJlYnkKICAqIGd1YXJhbnRlZWluZyB0aGUgY3VycmVu dCBzdGF0ZSB3aWxsIHN1cnZpdmUgYSBjcmFzaC4KQEAgLTExNzMsNiArMTIzOSwxMjMgQEAg UmVwbGljYXRpb25TbG90UmVzZXJ2ZVdhbCh2b2lkKQogCX0KIH0KIAorLyoKKyAqIFJlc29s dmUgcmVjb3ZlcnkgY29uZmxpY3RzIHdpdGggbG9naWNhbCBzbG90cy4KKyAqCisgKiBXaGVu IHhpZCBpcyB2YWxpZCwgaXQgbWVhbnMgdGhhdCByb3dzIG9sZGVyIHRoYW4geGlkIG1pZ2h0 IGhhdmUgYmVlbgorICogcmVtb3ZlZC4gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZHJvcCBzbG90 cyB0aGF0IGRlcGVuZCBvbiBzZWVpbmcgdGhvc2Ugcm93cy4KKyAqIFdoZW4geGlkIGlzIGlu dmFsaWQsIGRyb3AgYWxsIGxvZ2ljYWwgc2xvdHMuIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB0 aGUKKyAqIG1hc3RlciB3YWxfbGV2ZWwgaXMgc2V0IGJhY2sgdG8gcmVwbGljYSwgc28gZXhp c3RpbmcgbG9naWNhbCBzbG90cyBuZWVkIHRvCisgKiBiZSBkcm9wcGVkLiBBbHNvLCB3aGVu IHhpZCBpcyBpbnZhbGlkLCBhIGNvbW1vbiAnY29uZmxpY3RfcmVhc29uJyBpcworICogcHJv dmlkZWQgZm9yIHRoZSBlcnJvciBkZXRhaWw7IG90aGVyd2lzZSBpdCBpcyBOVUxMLCBpbiB3 aGljaCBjYXNlIGl0IGlzCisgKiBjb25zdHJ1Y3RlZCBvdXQgb2YgdGhlIHhpZCB2YWx1ZS4K KyAqLwordm9pZAorUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9naWNhbFNsb3RzKE9p ZCBkYm9pZCwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkJCQkJY2hhciAqY29uZmxpY3Rf cmVhc29uKQoreworCWludAkJCWk7CisJYm9vbAkJZm91bmRfY29uZmxpY3QgPSBmYWxzZTsK KworCUFzc2VydChtYXhfcmVwbGljYXRpb25fc2xvdHMgPj0gMCk7CisKKwlpZiAobWF4X3Jl cGxpY2F0aW9uX3Nsb3RzID09IDApCisJCXJldHVybjsKKworcmVzdGFydDoKKwlpZiAoZm91 bmRfY29uZmxpY3QpCisJeworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQlmb3VuZF9j b25mbGljdCA9IGZhbHNlOworCX0KKworCUxXTG9ja0FjcXVpcmUoUmVwbGljYXRpb25TbG90 Q29udHJvbExvY2ssIExXX1NIQVJFRCk7CisJZm9yIChpID0gMDsgaSA8IG1heF9yZXBsaWNh dGlvbl9zbG90czsgaSsrKQorCXsKKwkJUmVwbGljYXRpb25TbG90ICpzOworCisJCXMgPSAm UmVwbGljYXRpb25TbG90Q3RsLT5yZXBsaWNhdGlvbl9zbG90c1tpXTsKKworCQkvKiBjYW5u b3QgY2hhbmdlIHdoaWxlIFJlcGxpY2F0aW9uU2xvdEN0bExvY2sgaXMgaGVsZCAqLworCQlp ZiAoIXMtPmluX3VzZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFdlIGFyZSBvbmx5IGRlYWxp bmcgd2l0aCAqbG9naWNhbCogc2xvdCBjb25mbGljdHMuICovCisJCWlmICghU2xvdElzTG9n aWNhbChzKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIEludmFsaWQgeGlkIG1lYW5zIGNhbGxl ciBpcyBhc2tpbmcgdG8gZHJvcCBhbGwgbG9naWNhbCBzbG90cyAqLworCQlpZiAoIVRyYW5z YWN0aW9uSWRJc1ZhbGlkKHhpZCkpCisJCQlmb3VuZF9jb25mbGljdCA9IHRydWU7CisJCWVs c2UKKwkJeworCQkJVHJhbnNhY3Rpb25JZCBzbG90X3htaW47CisJCQlUcmFuc2FjdGlvbklk IHNsb3RfY2F0YWxvZ194bWluOworCQkJU3RyaW5nSW5mb0RhdGEJY29uZmxpY3Rfc3RyLCBj b25mbGljdF94bWluczsKKwkJCWNoYXIJICAgKmNvbmZsaWN0X3NlbnRlbmNlID0KKwkJCQln ZXR0ZXh0X25vb3AoIlNsb3QgY29uZmxpY3RlZCB3aXRoIHhpZCBob3Jpem9uIHdoaWNoIHdh cyBiZWluZyBpbmNyZWFzZWQgdG8iKTsKKworCQkJLyogbm90IG91ciBkYXRhYmFzZSwgc2tp cCAqLworCQkJaWYgKHMtPmRhdGEuZGF0YWJhc2UgIT0gSW52YWxpZE9pZCAmJiBzLT5kYXRh LmRhdGFiYXNlICE9IGRib2lkKQorCQkJCWNvbnRpbnVlOworCisJCQlTcGluTG9ja0FjcXVp cmUoJnMtPm11dGV4KTsKKwkJCXNsb3RfeG1pbiA9IHMtPmRhdGEueG1pbjsKKwkJCXNsb3Rf Y2F0YWxvZ194bWluID0gcy0+ZGF0YS5jYXRhbG9nX3htaW47CisJCQlTcGluTG9ja1JlbGVh c2UoJnMtPm11dGV4KTsKKworCQkJLyoKKwkJCSAqIEJ1aWxkIHRoZSBjb25mbGljdF9zdHIg d2hpY2ggd2lsbCBsb29rIGxpa2UgOgorCQkJICogIlNsb3QgY29uZmxpY3RlZCB3aXRoIHhp ZCBob3Jpem9uIHdoaWNoIHdhcyBiZWluZyBpbmNyZWFzZWQKKwkJCSAqIHRvIDkwMTIgKHNs b3QgeG1pbjogMTIzNCwgc2xvdCBjYXRhbG9nX3htaW46IDU2NzgpLiIKKwkJCSAqLworCQkJ aW5pdFN0cmluZ0luZm8oJmNvbmZsaWN0X3htaW5zKTsKKwkJCWlmIChUcmFuc2FjdGlvbklk SXNWYWxpZChzbG90X3htaW4pICYmCisJCQkJVHJhbnNhY3Rpb25JZFByZWNlZGVzT3JFcXVh bHMoc2xvdF94bWluLCB4aWQpKQorCQkJeworCQkJCWFwcGVuZFN0cmluZ0luZm8oJmNvbmZs aWN0X3htaW5zLCAic2xvdCB4bWluOiAlZCIsIHNsb3RfeG1pbik7CisJCQl9CisJCQlpZiAo VHJhbnNhY3Rpb25JZElzVmFsaWQoc2xvdF9jYXRhbG9nX3htaW4pICYmCisJCQkJVHJhbnNh Y3Rpb25JZFByZWNlZGVzT3JFcXVhbHMoc2xvdF9jYXRhbG9nX3htaW4sIHhpZCkpCisJCQkJ YXBwZW5kU3RyaW5nSW5mbygmY29uZmxpY3RfeG1pbnMsICIlc3Nsb3QgY2F0YWxvZ194bWlu OiAlZCIsCisJCQkJCQkJCSBjb25mbGljdF94bWlucy5sZW4gPiAwID8gIiwgIiA6ICIiLAor CQkJCQkJCQkgc2xvdF9jYXRhbG9nX3htaW4pOworCisJCQlpZiAoY29uZmxpY3RfeG1pbnMu bGVuID4gMCkKKwkJCXsKKwkJCQlpbml0U3RyaW5nSW5mbygmY29uZmxpY3Rfc3RyKTsKKwkJ CQlhcHBlbmRTdHJpbmdJbmZvKCZjb25mbGljdF9zdHIsICIlcyAlZCAoJXMpLiIsCisJCQkJ CQkJCSBjb25mbGljdF9zZW50ZW5jZSwgeGlkLCBjb25mbGljdF94bWlucy5kYXRhKTsKKwkJ CQlmb3VuZF9jb25mbGljdCA9IHRydWU7CisJCQkJY29uZmxpY3RfcmVhc29uID0gY29uZmxp Y3Rfc3RyLmRhdGE7CisJCQl9CisJCX0KKworCQlpZiAoZm91bmRfY29uZmxpY3QpCisJCXsK KwkJCU5hbWVEYXRhCXNsb3RuYW1lOworCisJCQlTcGluTG9ja0FjcXVpcmUoJnMtPm11dGV4 KTsKKwkJCXNsb3RuYW1lID0gcy0+ZGF0YS5uYW1lOworCQkJU3BpbkxvY2tSZWxlYXNlKCZz LT5tdXRleCk7CisKKwkJCS8qIFJlcGxpY2F0aW9uU2xvdERyb3BDb25mbGljdGluZygpIHdp bGwgYWNxdWlyZSB0aGUgbG9jayBiZWxvdyAqLworCQkJTFdMb2NrUmVsZWFzZShSZXBsaWNh dGlvblNsb3RDb250cm9sTG9jayk7CisKKwkJCVJlcGxpY2F0aW9uU2xvdERyb3BDb25mbGlj dGluZyhzKTsKKworCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJtc2coImRyb3BwZWQgY29u ZmxpY3Rpbmcgc2xvdCAlcyIsIE5hbWVTdHIoc2xvdG5hbWUpKSwKKwkJCQkJIGVycmRldGFp bCgiJXMiLCBjb25mbGljdF9yZWFzb24pKSk7CisKKwkJCS8qIFdlIHJlbGVhc2VkIHRoZSBs b2NrIGFib3ZlOyBzbyByZS1zY2FuIHRoZSBzbG90cy4gKi8KKwkJCWdvdG8gcmVzdGFydDsK KwkJfQorCX0KKworCUxXTG9ja1JlbGVhc2UoUmVwbGljYXRpb25TbG90Q29udHJvbExvY2sp OworfQorCiAvKgogICogTWFyayBhbnkgc2xvdCB0aGF0IHBvaW50cyB0byBhbiBMU04gb2xk ZXIgdGhhbiB0aGUgZ2l2ZW4gc2VnbWVudAogICogYXMgaW52YWxpZDsgaXQgcmVxdWlyZXMg V0FMIHRoYXQncyBhYm91dCB0byBiZSByZW1vdmVkLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w cm9jYXJyYXkuYwppbmRleCBiZjc3NjI4NmRlLi40NzhmYzRiNzdiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpAQCAtMzM3Nyw2ICszMzc3LDEwIEBAIFNpZ25hbFZp cnR1YWxUcmFuc2FjdGlvbihWaXJ0dWFsVHJhbnNhY3Rpb25JZCB2eGlkLCBQcm9jU2lnbmFs UmVhc29uIHNpZ21vZGUsCiAKIAkJR0VUX1ZYSURfRlJPTV9QR1BST0MocHJvY3Z4aWQsICpw cm9jKTsKIAorCQkvKgorCQkgKiBOb3RlOiB2eGlkLmxvY2FsVHJhbnNhY3Rpb25JZCBjYW4g YmUgaW52YWxpZCwgd2hpY2ggbWVhbnMgdGhlCisJCSAqIHJlcXVlc3QgaXMgdG8gc2lnbmFs IHRoZSBwaWQgdGhhdCBpcyBub3QgcnVubmluZyBhIHRyYW5zYWN0aW9uLgorCQkgKi8KIAkJ aWYgKHByb2N2eGlkLmJhY2tlbmRJZCA9PSB2eGlkLmJhY2tlbmRJZCAmJgogCQkJcHJvY3Z4 aWQubG9jYWxUcmFuc2FjdGlvbklkID09IHZ4aWQubG9jYWxUcmFuc2FjdGlvbklkKQogCQl7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXggZWFjNjg5NTE0MS4u YTNmYTZiZGMwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3Np Z25hbC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAt NjczLDYgKzY3Myw5IEBAIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdT KQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9TTkFQ U0hPVCkpCiAJCVJlY292ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQoUFJPQ1NJR19SRUNPVkVSWV9D T05GTElDVF9TTkFQU0hPVCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUkVD T1ZFUllfQ09ORkxJQ1RfTE9HSUNBTFNMT1QpKQorCQlSZWNvdmVyeUNvbmZsaWN0SW50ZXJy dXB0KFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfTE9HSUNBTFNMT1QpOworCiAJaWYgKENo ZWNrUHJvY1NpZ25hbChQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX1NUQVJUVVBfREVBRExP Q0spKQogCQlSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFBST0NTSUdfUkVDT1ZFUllfQ09O RkxJQ1RfU1RBUlRVUF9ERUFETE9DSyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3N0YW5kYnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnku YwppbmRleCAxNDY1ZWU0NGExLi5kMTU1YTFkZTIwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv c3RhbmRieS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNl cnQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNp bmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3Iu aCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2Mu aCIKQEAgLTQ0MCw3ICs0NDEsOCBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0 dWFsWElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxpc3QsCiB9CiAKIHZvaWQKLVJl c29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFNuYXBzaG90KFRyYW5zYWN0aW9uSWQgbGF0ZXN0 UmVtb3ZlZFhpZCwgUmVsRmlsZU5vZGUgbm9kZSkKK1Jlc29sdmVSZWNvdmVyeUNvbmZsaWN0 V2l0aFNuYXBzaG90KFRyYW5zYWN0aW9uSWQgbGF0ZXN0UmVtb3ZlZFhpZCwKKwkJCQkJCQkJ CWJvb2wgb25DYXRhbG9nVGFibGUsIFJlbEZpbGVOb2RlIG5vZGUpCiB7CiAJVmlydHVhbFRy YW5zYWN0aW9uSWQgKmJhY2tlbmRzOwogCkBAIC00NjUsNiArNDY3LDkgQEAgUmVzb2x2ZVJl Y292ZXJ5Q29uZmxpY3RXaXRoU25hcHNob3QoVHJhbnNhY3Rpb25JZCBsYXRlc3RSZW1vdmVk WGlkLCBSZWxGaWxlTm9kZQogCQkJCQkJCQkJCSAgIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJ Q1RfU05BUFNIT1QsCiAJCQkJCQkJCQkJICAgV0FJVF9FVkVOVF9SRUNPVkVSWV9DT05GTElD VF9TTkFQU0hPVCwKIAkJCQkJCQkJCQkgICB0cnVlKTsKKworCWlmIChvbkNhdGFsb2dUYWJs ZSkKKwkJUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9naWNhbFNsb3RzKG5vZGUuZGJO b2RlLCBsYXRlc3RSZW1vdmVkWGlkLCBOVUxMKTsKIH0KIAogLyoKQEAgLTQ3Myw3ICs0Nzgs NyBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhTbmFwc2hvdChUcmFuc2FjdGlvbklk IGxhdGVzdFJlbW92ZWRYaWQsIFJlbEZpbGVOb2RlCiAgKi8KIHZvaWQKIFJlc29sdmVSZWNv dmVyeUNvbmZsaWN0V2l0aFNuYXBzaG90RnVsbFhpZChGdWxsVHJhbnNhY3Rpb25JZCBsYXRl c3RSZW1vdmVkRnVsbFhpZCwKLQkJCQkJCQkJCQkgICBSZWxGaWxlTm9kZSBub2RlKQorCQkJ CQkJCQkJCSAgIGJvb2wgb25DYXRhbG9nVGFibGUsIFJlbEZpbGVOb2RlIG5vZGUpCiB7CiAJ LyoKIAkgKiBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhTbmFwc2hvdCBvcGVyYXRlcyBv biAzMi1iaXQgVHJhbnNhY3Rpb25JZHMsCkBAIC00OTEsNyArNDk2LDcgQEAgUmVzb2x2ZVJl Y292ZXJ5Q29uZmxpY3RXaXRoU25hcHNob3RGdWxsWGlkKEZ1bGxUcmFuc2FjdGlvbklkIGxh dGVzdFJlbW92ZWRGdWxsWGkKIAkJVHJhbnNhY3Rpb25JZCBsYXRlc3RSZW1vdmVkWGlkOwog CiAJCWxhdGVzdFJlbW92ZWRYaWQgPSBYaWRGcm9tRnVsbFRyYW5zYWN0aW9uSWQobGF0ZXN0 UmVtb3ZlZEZ1bGxYaWQpOwotCQlSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhTbmFwc2hv dChsYXRlc3RSZW1vdmVkWGlkLCBub2RlKTsKKwkJUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RX aXRoU25hcHNob3QobGF0ZXN0UmVtb3ZlZFhpZCwgb25DYXRhbG9nVGFibGUsIG5vZGUpOwog CX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3Jj L2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDMzMGVjNWIwMjguLmM1ZWRiN2Y0Zjcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFj a2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTI0NDEsNiArMjQ0MSw5IEBAIGVycmRldGFpbF9y ZWNvdmVyeV9jb25mbGljdCh2b2lkKQogCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJ Q1RfU05BUFNIT1Q6CiAJCQllcnJkZXRhaWwoIlVzZXIgcXVlcnkgbWlnaHQgaGF2ZSBuZWVk ZWQgdG8gc2VlIHJvdyB2ZXJzaW9ucyB0aGF0IG11c3QgYmUgcmVtb3ZlZC4iKTsKIAkJCWJy ZWFrOworCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfTE9HSUNBTFNMT1Q6CisJ CQllcnJkZXRhaWwoIlVzZXIgd2FzIHVzaW5nIHRoZSBsb2dpY2FsIHNsb3QgdGhhdCBtdXN0 IGJlIGRyb3BwZWQuIik7CisJCQlicmVhazsKIAkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZX0NP TkZMSUNUX1NUQVJUVVBfREVBRExPQ0s6CiAJCQllcnJkZXRhaWwoIlVzZXIgdHJhbnNhY3Rp b24gY2F1c2VkIGJ1ZmZlciBkZWFkbG9jayB3aXRoIHJlY292ZXJ5LiIpOwogCQkJYnJlYWs7 CkBAIC0zMDExLDYgKzMwMTQsMjUgQEAgUmVjb3ZlcnlDb25mbGljdEludGVycnVwdChQcm9j U2lnbmFsUmVhc29uIHJlYXNvbikKIAkJCWNhc2UgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElD VF9MT0NLOgogCQkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX1RBQkxFU1BBQ0U6 CiAJCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfU05BUFNIT1Q6CisJCQljYXNl IFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfTE9HSUNBTFNMT1Q6CisJCQkJLyoKKwkJCQkg KiBGb3IgY29uZmxpY3RzIHRoYXQgcmVxdWlyZSBhIGxvZ2ljYWwgc2xvdCB0byBiZSBkcm9w cGVkLCB0aGUKKwkJCQkgKiByZXF1aXJlbWVudCBpcyBmb3IgdGhlIHNpZ25hbCByZWNlaXZl ciB0byByZWxlYXNlIHRoZSBzbG90LAorCQkJCSAqIHNvIHRoYXQgaXQgY291bGQgYmUgZHJv cHBlZCBieSB0aGUgc2lnbmFsIHNlbmRlci4gU28gZm9yCisJCQkJICogbm9ybWFsIGJhY2tl bmRzLCB0aGUgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIGFib3J0ZWQsIGp1c3QKKwkJCQkgKiBs aWtlIGZvciBvdGhlciByZWNvdmVyeSBjb25mbGljdHMuIEJ1dCBpZiBpdCdzIHdhbHNlbmRl ciBvbgorCQkJCSAqIHN0YW5kYnksIHRoZW4gaXQgaGFzIHRvIGJlIGtpbGxlZCBzbyBhcyB0 byByZWxlYXNlIGFuCisJCQkJICogYWNxdWlyZWQgbG9naWNhbCBzbG90LgorCQkJCSAqLwor CQkJCWlmIChhbV9jYXNjYWRpbmdfd2Fsc2VuZGVyICYmCisJCQkJCXJlYXNvbiA9PSBQUk9D U0lHX1JFQ09WRVJZX0NPTkZMSUNUX0xPR0lDQUxTTE9UICYmCisJCQkJCU15UmVwbGljYXRp b25TbG90ICYmIFNsb3RJc0xvZ2ljYWwoTXlSZXBsaWNhdGlvblNsb3QpKQorCQkJCXsKKwkJ CQkJUmVjb3ZlcnlDb25mbGljdFBlbmRpbmcgPSB0cnVlOworCQkJCQlRdWVyeUNhbmNlbFBl bmRpbmcgPSB0cnVlOworCQkJCQlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1ZTsKKwkJCQkJYnJl YWs7CisJCQkJfQogCiAJCQkJLyoKIAkJCQkgKiBJZiB3ZSBhcmVuJ3QgaW4gYSB0cmFuc2Fj dGlvbiBhbnkgbG9uZ2VyIHRoZW4gaWdub3JlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0 ZnVuY3MuYwppbmRleCA5ZmZiY2E2ODVjLi5mZTdmMzEwNWYyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcGdzdGF0ZnVuY3MuYwpAQCAtMTQ5NCw2ICsxNDk0LDIxIEBAIHBnX3N0YXRfZ2V0 X2RiX2NvbmZsaWN0X3NuYXBzaG90KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX0lO VDY0KHJlc3VsdCk7CiB9CiAKK0RhdHVtCitwZ19zdGF0X2dldF9kYl9jb25mbGljdF9sb2dp Y2Fsc2xvdChQR19GVU5DVElPTl9BUkdTKQoreworCU9pZAkJCWRiaWQgPSBQR19HRVRBUkdf T0lEKDApOworCWludDY0CQlyZXN1bHQ7CisJUGdTdGF0X1N0YXREQkVudHJ5ICpkYmVudHJ5 OworCisJaWYgKChkYmVudHJ5ID0gcGdzdGF0X2ZldGNoX3N0YXRfZGJlbnRyeShkYmlkKSkg PT0gTlVMTCkKKwkJcmVzdWx0ID0gMDsKKwllbHNlCisJCXJlc3VsdCA9IChpbnQ2NCkgKGRi ZW50cnktPm5fY29uZmxpY3RfbG9naWNhbHNsb3QpOworCisJUEdfUkVUVVJOX0lOVDY0KHJl c3VsdCk7Cit9CisKIERhdHVtCiBwZ19zdGF0X2dldF9kYl9jb25mbGljdF9idWZmZXJwaW4o UEdfRlVOQ1RJT05fQVJHUykKIHsKQEAgLTE1MzcsNiArMTU1Miw3IEBAIHBnX3N0YXRfZ2V0 X2RiX2NvbmZsaWN0X2FsbChQR19GVU5DVElPTl9BUkdTKQogCQlyZXN1bHQgPSAoaW50NjQp IChkYmVudHJ5LT5uX2NvbmZsaWN0X3RhYmxlc3BhY2UgKwogCQkJCQkJICBkYmVudHJ5LT5u X2NvbmZsaWN0X2xvY2sgKwogCQkJCQkJICBkYmVudHJ5LT5uX2NvbmZsaWN0X3NuYXBzaG90 ICsKKwkJCQkJCSAgZGJlbnRyeS0+bl9jb25mbGljdF9sb2dpY2Fsc2xvdCArCiAJCQkJCQkg IGRiZW50cnktPm5fY29uZmxpY3RfYnVmZmVycGluICsKIAkJCQkJCSAgZGJlbnRyeS0+bl9j b25mbGljdF9zdGFydHVwX2RlYWRsb2NrKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK aW5kZXggNDMwOWZhNDBkZC4uM2FmZTU0Mjg2NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CkBAIC01NDMyLDYgKzU0MzIsMTEgQEAKICAgcHJvbmFtZSA9PiAncGdfc3RhdF9nZXRf ZGJfY29uZmxpY3Rfc25hcHNob3QnLCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHByb3BhcmFs bGVsID0+ICdyJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsIHByb2FyZ3R5cGVzID0+ICdvaWQn LAogICBwcm9zcmMgPT4gJ3BnX3N0YXRfZ2V0X2RiX2NvbmZsaWN0X3NuYXBzaG90JyB9LAor eyBvaWQgPT4gJzQ1NDQnLAorICBkZXNjciA9PiAnc3RhdGlzdGljczogcmVjb3ZlcnkgY29u ZmxpY3RzIGluIGRhdGFiYXNlIGNhdXNlZCBieSBsb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3Qn LAorICBwcm9uYW1lID0+ICdwZ19zdGF0X2dldF9kYl9jb25mbGljdF9sb2dpY2Fsc2xvdCcs IHByb3ZvbGF0aWxlID0+ICdzJywKKyAgcHJvcGFyYWxsZWwgPT4gJ3InLCBwcm9yZXR0eXBl ID0+ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4gJ29pZCcsCisgIHByb3NyYyA9PiAncGdfc3Rh dF9nZXRfZGJfY29uZmxpY3RfbG9naWNhbHNsb3QnIH0sCiB7IG9pZCA9PiAnMzA2OCcsCiAg IGRlc2NyID0+ICdzdGF0aXN0aWNzOiByZWNvdmVyeSBjb25mbGljdHMgaW4gZGF0YWJhc2Ug Y2F1c2VkIGJ5IHNoYXJlZCBidWZmZXIgcGluJywKICAgcHJvbmFtZSA9PiAncGdfc3RhdF9n ZXRfZGJfY29uZmxpY3RfYnVmZmVycGluJywgcHJvdm9sYXRpbGUgPT4gJ3MnLApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcGdzdGF0LmggYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaAppbmRl eCA3Y2QxMzc1MDZlLi4xOWQxM2NhYWI1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wZ3N0 YXQuaAorKysgYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaApAQCAtNzE5LDYgKzcxOSw3IEBAIHR5 cGVkZWYgc3RydWN0IFBnU3RhdF9TdGF0REJFbnRyeQogCVBnU3RhdF9Db3VudGVyIG5fY29u ZmxpY3RfdGFibGVzcGFjZTsKIAlQZ1N0YXRfQ291bnRlciBuX2NvbmZsaWN0X2xvY2s7CiAJ UGdTdGF0X0NvdW50ZXIgbl9jb25mbGljdF9zbmFwc2hvdDsKKwlQZ1N0YXRfQ291bnRlciBu X2NvbmZsaWN0X2xvZ2ljYWxzbG90OwogCVBnU3RhdF9Db3VudGVyIG5fY29uZmxpY3RfYnVm ZmVycGluOwogCVBnU3RhdF9Db3VudGVyIG5fY29uZmxpY3Rfc3RhcnR1cF9kZWFkbG9jazsK IAlQZ1N0YXRfQ291bnRlciBuX3RlbXBfZmlsZXM7CkBAIC0xMDY0LDYgKzEwNjUsNyBAQCBl eHRlcm4gdm9pZCBwZ3N0YXRfdHdvcGhhc2VfcG9zdGFib3J0KFRyYW5zYWN0aW9uSWQgeGlk LCB1aW50MTYgaW5mbywKIAkJCQkJCQkJCSAgdm9pZCAqcmVjZGF0YSwgdWludDMyIGxlbik7 CiAKIGV4dGVybiB2b2lkIHBnc3RhdF9zZW5kX2FyY2hpdmVyKGNvbnN0IGNoYXIgKnhsb2cs IGJvb2wgZmFpbGVkKTsKK2V4dGVybiB2b2lkIHBnc3RhdF9zZW5kX2Ryb3Bsb2dpY2Fsc2xv dChPaWQgZGJPaWQpOwogZXh0ZXJuIHZvaWQgcGdzdGF0X3NlbmRfYmd3cml0ZXIodm9pZCk7 CiBleHRlcm4gdm9pZCBwZ3N0YXRfcmVwb3J0X3dhbCh2b2lkKTsKIGV4dGVybiBib29sIHBn c3RhdF9zZW5kX3dhbChib29sIGZvcmNlKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Nsb3QuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaAppbmRl eCAxYWQ1ZTZjNTBkLi5iNmU1ZmZmZjc5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9zbG90LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCkBA IC0yMzIsNCArMjMyLDYgQEAgZXh0ZXJuIHZvaWQgQ2hlY2tQb2ludFJlcGxpY2F0aW9uU2xv dHModm9pZCk7CiAKIGV4dGVybiB2b2lkIENoZWNrU2xvdFJlcXVpcmVtZW50cyh2b2lkKTsK IAorZXh0ZXJuIHZvaWQgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9naWNhbFNsb3Rz KE9pZCBkYm9pZCwgVHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgKnJlYXNvbik7CisKICNlbmRp ZgkJCQkJCQkvKiBTTE9UX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJvY3NpZ25hbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKaW5kZXgg ZWVjMTg2YmUyZS4uZjg2YjA3MGRiYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgK QEAgLTQxLDYgKzQxLDcgQEAgdHlwZWRlZiBlbnVtCiAJUFJPQ1NJR19SRUNPVkVSWV9DT05G TElDVF9UQUJMRVNQQUNFLAogCVBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfTE9DSywKIAlQ Uk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX1NOQVBTSE9ULAorCVBST0NTSUdfUkVDT1ZFUllf Q09ORkxJQ1RfTE9HSUNBTFNMT1QsCiAJUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9CVUZG RVJQSU4sCiAJUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9TVEFSVFVQX0RFQURMT0NLLAog CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnkuaCBiL3NyYy9pbmNs dWRlL3N0b3JhZ2Uvc3RhbmRieS5oCmluZGV4IDM4ZmQ4NWE0MzEuLjNiYTE4ODIyMTYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2Uvc3RhbmRieS5oCkBAIC0zMCw5ICszMCw5IEBAIGV4dGVybiB2b2lkIElu aXRSZWNvdmVyeVRyYW5zYWN0aW9uRW52aXJvbm1lbnQodm9pZCk7CiBleHRlcm4gdm9pZCBT aHV0ZG93blJlY292ZXJ5VHJhbnNhY3Rpb25FbnZpcm9ubWVudCh2b2lkKTsKIAogZXh0ZXJu IHZvaWQgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoU25hcHNob3QoVHJhbnNhY3Rpb25J ZCBsYXRlc3RSZW1vdmVkWGlkLAotCQkJCQkJCQkJCQkJUmVsRmlsZU5vZGUgbm9kZSk7CisJ CQkJCQkJCQkJCQlib29sIG9uQ2F0YWxvZ1RhYmxlLCBSZWxGaWxlTm9kZSBub2RlKTsKIGV4 dGVybiB2b2lkIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFNuYXBzaG90RnVsbFhpZChG dWxsVHJhbnNhY3Rpb25JZCBsYXRlc3RSZW1vdmVkRnVsbFhpZCwKLQkJCQkJCQkJCQkJCQkg ICBSZWxGaWxlTm9kZSBub2RlKTsKKwkJCQkJCQkJCQkJCQkgICBib29sIG9uQ2F0YWxvZ1Rh YmxlLCBSZWxGaWxlTm9kZSBub2RlKTsKIGV4dGVybiB2b2lkIFJlc29sdmVSZWNvdmVyeUNv bmZsaWN0V2l0aFRhYmxlc3BhY2UoT2lkIHRzaWQpOwogZXh0ZXJuIHZvaWQgUmVzb2x2ZVJl Y292ZXJ5Q29uZmxpY3RXaXRoRGF0YWJhc2UoT2lkIGRiaWQpOwogCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IDliNTlhN2I0YTUuLjU5MTNkYzk2YjkgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CkBAIC0xODcwLDcgKzE4NzAsOCBAQCBw Z19zdGF0X2RhdGFiYXNlX2NvbmZsaWN0c3wgU0VMRUNUIGQub2lkIEFTIGRhdGlkLAogICAg IHBnX3N0YXRfZ2V0X2RiX2NvbmZsaWN0X2xvY2soZC5vaWQpIEFTIGNvbmZsX2xvY2ssCiAg ICAgcGdfc3RhdF9nZXRfZGJfY29uZmxpY3Rfc25hcHNob3QoZC5vaWQpIEFTIGNvbmZsX3Nu YXBzaG90LAogICAgIHBnX3N0YXRfZ2V0X2RiX2NvbmZsaWN0X2J1ZmZlcnBpbihkLm9pZCkg QVMgY29uZmxfYnVmZmVycGluLAotICAgIHBnX3N0YXRfZ2V0X2RiX2NvbmZsaWN0X3N0YXJ0 dXBfZGVhZGxvY2soZC5vaWQpIEFTIGNvbmZsX2RlYWRsb2NrCisgICAgcGdfc3RhdF9nZXRf ZGJfY29uZmxpY3Rfc3RhcnR1cF9kZWFkbG9jayhkLm9pZCkgQVMgY29uZmxfZGVhZGxvY2ss CisgICAgcGdfc3RhdF9nZXRfZGJfY29uZmxpY3RfbG9naWNhbHNsb3QoZC5vaWQpIEFTIGNv bmZsX2xvZ2ljYWxzbG90CiAgICBGUk9NIHBnX2RhdGFiYXNlIGQ7CiBwZ19zdGF0X2dzc2Fw aXwgU0VMRUNUIHMucGlkLAogICAgIHMuZ3NzX2F1dGggQVMgZ3NzX2F1dGhlbnRpY2F0ZWQs Ci0tIAoyLjE2LjYKCg== --------------C4FC6AF2A8522BE3AE2F182D Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="v16-0002-Add-info-in-WAL-records-in-preparation-for-logic.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v16-0002-Add-info-in-WAL-records-in-preparation-for-logic.pa"; filename*1="tch" RnJvbSBmZWIxNGZkZTZjNDRmZjQwNWU1MGNiMWIxMDc1OGZkMzViYjM2ZWMzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCZXJ0cmFuZCBEcm91dm90IDxiZHJvdXZvdEBhbWF6 b24uY29tPgpEYXRlOiBXZWQsIDcgQXByIDIwMjEgMDg6Mjk6MzkgKzAwMDAKU3ViamVjdDog W1BBVENIIHYxNiAyLzVdIEFkZCBpbmZvIGluIFdBTCByZWNvcmRzIGluIHByZXBhcmF0aW9u IGZvciBsb2dpY2FsCiBzbG90IGNvbmZsaWN0IGhhbmRsaW5nLgoKV2hlbiBhIFdBTCByZXBs YXkgb24gc3RhbmRieSBpbmRpY2F0ZXMgdGhhdCBhIGNhdGFsb2cgdGFibGUgdHVwbGUgaXMK dG8gYmUgZGVsZXRlZCBieSBhbiB4aWQgdGhhdCBpcyBncmVhdGVyIHRoYW4gYSBsb2dpY2Fs IHNsb3QncwpjYXRhbG9nX3htaW4sIHRoZW4gdGhhdCBtZWFucyB0aGUgc2xvdCdzIGNhdGFs b2dfeG1pbiBjb25mbGljdHMgd2l0aAp0aGUgeGlkLCBhbmQgd2UgbmVlZCB0byBoYW5kbGUg dGhlIGNvbmZsaWN0LiAgV2hpbGUgc3Vic2VxdWVudCBjb21taXRzCndpbGwgZG8gdGhlIGFj dHVhbCBjb25mbGljdCBoYW5kbGluZywgdGhpcyBjb21taXQgYWRkcyBhIG5ldyBmaWVsZApv bkNhdGFsb2dUYWJsZSBpbiBzdWNoIFdBTCByZWNvcmRzLCB0aGF0IGlzIHRydWUgZm9yIGNh dGFsb2cgdGFibGVzLApzbyBhcyB0byBhcnJhbmdlIGZvciBjb25mbGljdCBoYW5kbGluZy4K CkFuZHJlcyBGcmV1bmQuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAg ICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RidWlsZC5jICAg ICB8ICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0dXRpbC5jICAgICAgfCAg NCArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jICAgICAgfCAgNCAr KystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMgICAgfCAgMiArKwog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgIHwgIDQgKysrLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvcHJ1bmVoZWFwLmMgICAgIHwgIDEgKwogc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jIHwgIDIgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cGFnZS5jICAgICB8IDEyICsrKysrKysrKy0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYyAgIHwgIDggKysrKysrKysKIHNyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5jICAgICB8IDE2ICsrKysrKysrKysrKysrKysK IHNyYy9pbmNsdWRlL2FjY2Vzcy9naXN0X3ByaXZhdGUuaCAgICAgICB8ICA2ICsrKy0tLQog c3JjL2luY2x1ZGUvYWNjZXNzL2dpc3R4bG9nLmggICAgICAgICAgIHwgIDMgKystCiBzcmMv aW5jbHVkZS9hY2Nlc3MvaGFzaF94bG9nLmggICAgICAgICAgfCAgMSArCiBzcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtX3hsb2cuaCAgICAgICAgfCAgNSArKysrLQogc3JjL2luY2x1ZGUv YWNjZXNzL25idHhsb2cuaCAgICAgICAgICAgIHwgIDIgKysKIHNyYy9pbmNsdWRlL2FjY2Vz cy9zcGd4bG9nLmggICAgICAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2xzeXNj YWNoZS5oICAgICAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAg ICAgICAgICAgICB8ICA5ICsrKysrKysrKwogMTkgZmlsZXMgY2hhbmdlZCwgNzAgaW5zZXJ0 aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCiAgMTcuNiUgc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvCiAgMTIuOSUgc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvCiAgMTQuMiUgc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS8KICAgOC43JSBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0Lwog ICA3LjklIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlLwogIDE5LjIlIHNyYy9pbmNsdWRlL2Fj Y2Vzcy8KICAxNi4zJSBzcmMvaW5jbHVkZS91dGlscy8KCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 LmMKaW5kZXggMDY4M2Y0MmMyNS4uYjZlNjM0MGMzYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dp c3QuYwpAQCAtMzQ4LDcgKzM0OCw3IEBAIGdpc3RwbGFjZXRvcGFnZShSZWxhdGlvbiByZWws IFNpemUgZnJlZXNwYWNlLCBHSVNUU1RBVEUgKmdpc3RzdGF0ZSwKIAkJZm9yICg7IHB0cjsg cHRyID0gcHRyLT5uZXh0KQogCQl7CiAJCQkvKiBBbGxvY2F0ZSBuZXcgcGFnZSAqLwotCQkJ cHRyLT5idWZmZXIgPSBnaXN0TmV3QnVmZmVyKHJlbCk7CisJCQlwdHItPmJ1ZmZlciA9IGdp c3ROZXdCdWZmZXIoaGVhcFJlbCwgcmVsKTsKIAkJCUdJU1RJbml0QnVmZmVyKHB0ci0+YnVm ZmVyLCAoaXNfbGVhZikgPyBGX0xFQUYgOiAwKTsKIAkJCXB0ci0+cGFnZSA9IEJ1ZmZlckdl dFBhZ2UocHRyLT5idWZmZXIpOwogCQkJcHRyLT5ibG9jay5ibGtubyA9IEJ1ZmZlckdldEJs b2NrTnVtYmVyKHB0ci0+YnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3RidWlsZC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGJ1aWxk LmMKaW5kZXggMTA1NGY2ZjFmMi4uOGIwNjRmMzJhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2dpc3QvZ2lzdGJ1aWxkLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdGJ1aWxkLmMKQEAgLTI5MCw3ICsyOTAsNyBAQCBnaXN0YnVpbGQoUmVsYXRpb24g aGVhcCwgUmVsYXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZvKQogCQlQYWdlCQlw YWdlOwogCiAJCS8qIGluaXRpYWxpemUgdGhlIHJvb3QgcGFnZSAqLwotCQlidWZmZXIgPSBn aXN0TmV3QnVmZmVyKGluZGV4KTsKKwkJYnVmZmVyID0gZ2lzdE5ld0J1ZmZlcihoZWFwLCBp bmRleCk7CiAJCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXIpID09IEdJU1Rf Uk9PVF9CTEtOTyk7CiAJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0dXRpbC5jCmluZGV4IDhkY2Q1M2M0NTcuLjhiYTYxNzhhNWYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0aWwuYwpAQCAtODIxLDcgKzgyMSw3IEBA IGdpc3RjaGVja3BhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogICogQ2FsbGVyIGlz IHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIHBhZ2UgYnkgY2FsbGluZyBHSVNU SW5pdEJ1ZmZlcgogICovCiBCdWZmZXIKLWdpc3ROZXdCdWZmZXIoUmVsYXRpb24gcikKK2dp c3ROZXdCdWZmZXIoUmVsYXRpb24gaGVhcFJlbCwgUmVsYXRpb24gcikKIHsKIAlCdWZmZXIJ CWJ1ZmZlcjsKIAlib29sCQluZWVkTG9jazsKQEAgLTg2NSw3ICs4NjUsNyBAQCBnaXN0TmV3 QnVmZmVyKFJlbGF0aW9uIHIpCiAJCQkJICogcGFnZSdzIGRlbGV0ZVhpZC4KIAkJCQkgKi8K IAkJCQlpZiAoWExvZ1N0YW5kYnlJbmZvQWN0aXZlKCkgJiYgUmVsYXRpb25OZWVkc1dBTChy KSkKLQkJCQkJZ2lzdFhMb2dQYWdlUmV1c2UociwgYmxrbm8sIEdpc3RQYWdlR2V0RGVsZXRl WGlkKHBhZ2UpKTsKKwkJCQkJZ2lzdFhMb2dQYWdlUmV1c2UoaGVhcFJlbCwgciwgYmxrbm8s IEdpc3RQYWdlR2V0RGVsZXRlWGlkKHBhZ2UpKTsKIAogCQkJCXJldHVybiBidWZmZXI7CiAJ CQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYwppbmRleCA2NDY0Y2I5MjgxLi40 NmFlZTZmMmE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxv Zy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R4bG9nLmMKQEAgLTU5Niw3 ICs1OTYsOCBAQCBnaXN0WExvZ0Fzc2lnbkxTTih2b2lkKQogICogV3JpdGUgWExPRyByZWNv cmQgYWJvdXQgcmV1c2Ugb2YgYSBkZWxldGVkIHBhZ2UuCiAgKi8KIHZvaWQKLWdpc3RYTG9n UGFnZVJldXNlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIEZ1bGxUcmFuc2Fj dGlvbklkIGxhdGVzdFJlbW92ZWRYaWQpCitnaXN0WExvZ1BhZ2VSZXVzZShSZWxhdGlvbiBo ZWFwUmVsLCBSZWxhdGlvbiByZWwsCisJCQkJICBCbG9ja051bWJlciBibGtubywgRnVsbFRy YW5zYWN0aW9uSWQgbGF0ZXN0UmVtb3ZlZFhpZCkKIHsKIAlnaXN0eGxvZ1BhZ2VSZXVzZSB4 bHJlY19yZXVzZTsKIApAQCAtNjA3LDYgKzYwOCw3IEBAIGdpc3RYTG9nUGFnZVJldXNlKFJl bGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIEZ1bGxUcmFuc2FjdGlvbklkIGxhdGVz dFJlbW92CiAJICovCiAKIAkvKiBYTE9HIHN0dWZmICovCisJeGxyZWNfcmV1c2Uub25DYXRh bG9nVGFibGUgPSBSZWxhdGlvbklzQWNjZXNzaWJsZUluTG9naWNhbERlY29kaW5nKGhlYXBS ZWwpOwogCXhscmVjX3JldXNlLm5vZGUgPSByZWwtPnJkX25vZGU7CiAJeGxyZWNfcmV1c2Uu YmxvY2sgPSBibGtubzsKIAl4bHJlY19yZXVzZS5sYXRlc3RSZW1vdmVkRnVsbFhpZCA9IGxh dGVzdFJlbW92ZWRYaWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoaW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMKaW5k ZXggZDI1NGEwMGI2YS4uNTcxMTk1MmZjNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaGluc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2hpbnNlcnQuYwpAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2hhc2gu aCIKICNpbmNsdWRlICJhY2Nlc3MvaGFzaF94bG9nLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9j YXRhbG9nLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9i dWZfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKQEAgLTM5OCw2 ICszOTksNyBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlv biBocmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAkJCXhsX2hhc2hfdmFjdXVt X29uZV9wYWdlIHhscmVjOwogCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKKwkJCXhscmVjLm9u Q2F0YWxvZ1RhYmxlID0gUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyho cmVsKTsKIAkJCXhscmVjLmxhdGVzdFJlbW92ZWRYaWQgPSBsYXRlc3RSZW1vdmVkWGlkOwog CQkJeGxyZWMubnR1cGxlcyA9IG5kZWxldGFibGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtLmMKaW5kZXggOWNiYzE2MWQ3YS4uMTAwOTAxMTE3ZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtLmMKQEAgLTc5NzMsNiArNzk3Myw3IEBAIGxvZ19oZWFwX2ZyZWV6ZShSZWxh dGlvbiByZWxuLCBCdWZmZXIgYnVmZmVyLCBUcmFuc2FjdGlvbklkIGN1dG9mZl94aWQsCiAJ Lyogbm9yIHdoZW4gdGhlcmUgYXJlIG5vIHR1cGxlcyB0byBmcmVlemUgKi8KIAlBc3NlcnQo bnR1cGxlcyA+IDApOwogCisJeGxyZWMub25DYXRhbG9nVGFibGUgPSBSZWxhdGlvbklzQWNj ZXNzaWJsZUluTG9naWNhbERlY29kaW5nKHJlbG4pOwogCXhscmVjLmN1dG9mZl94aWQgPSBj dXRvZmZfeGlkOwogCXhscmVjLm50dXBsZXMgPSBudHVwbGVzOwogCkBAIC04MDAzLDcgKzgw MDQsNyBAQCBsb2dfaGVhcF9mcmVlemUoUmVsYXRpb24gcmVsbiwgQnVmZmVyIGJ1ZmZlciwg VHJhbnNhY3Rpb25JZCBjdXRvZmZfeGlkLAogICogaGVhcF9idWZmZXIsIGlmIG5lY2Vzc2Fy eS4KICAqLwogWExvZ1JlY1B0cgotbG9nX2hlYXBfdmlzaWJsZShSZWxGaWxlTm9kZSBybm9k ZSwgQnVmZmVyIGhlYXBfYnVmZmVyLCBCdWZmZXIgdm1fYnVmZmVyLAorbG9nX2hlYXBfdmlz aWJsZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBoZWFwX2J1ZmZlciwgQnVmZmVyIHZtX2J1ZmZl ciwKIAkJCQkgVHJhbnNhY3Rpb25JZCBjdXRvZmZfeGlkLCB1aW50OCB2bWZsYWdzKQogewog CXhsX2hlYXBfdmlzaWJsZSB4bHJlYzsKQEAgLTgwMTMsNiArODAxNCw3IEBAIGxvZ19oZWFw X3Zpc2libGUoUmVsRmlsZU5vZGUgcm5vZGUsIEJ1ZmZlciBoZWFwX2J1ZmZlciwgQnVmZmVy IHZtX2J1ZmZlciwKIAlBc3NlcnQoQnVmZmVySXNWYWxpZChoZWFwX2J1ZmZlcikpOwogCUFz c2VydChCdWZmZXJJc1ZhbGlkKHZtX2J1ZmZlcikpOwogCisJeGxyZWMub25DYXRhbG9nVGFi bGUgPSBSZWxhdGlvbklzQWNjZXNzaWJsZUluTG9naWNhbERlY29kaW5nKHJlbCk7CiAJeGxy ZWMuY3V0b2ZmX3hpZCA9IGN1dG9mZl94aWQ7CiAJeGxyZWMuZmxhZ3MgPSB2bWZsYWdzOwog CVhMb2dCZWdpbkluc2VydCgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvcHJ1bmVoZWFwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9wcnVuZWhlYXAuYwpp bmRleCBmNzU1MDJjYTJjLi5iN2Q4NzdmNzc2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9wcnVuZWhlYXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9w cnVuZWhlYXAuYwpAQCAtMzIzLDYgKzMyMyw3IEBAIGhlYXBfcGFnZV9wcnVuZShSZWxhdGlv biByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKIAkJCXhscmVjLmxhdGVzdFJlbW92ZWRYaWQg PSBwcnN0YXRlLmxhdGVzdFJlbW92ZWRYaWQ7CiAJCQl4bHJlYy5ucmVkaXJlY3RlZCA9IHBy c3RhdGUubnJlZGlyZWN0ZWQ7CiAJCQl4bHJlYy5uZGVhZCA9IHByc3RhdGUubmRlYWQ7CisJ CQl4bHJlYy5vbkNhdGFsb2dUYWJsZSA9IFJlbGF0aW9uSXNBY2Nlc3NpYmxlSW5Mb2dpY2Fs RGVjb2RpbmcocmVsYXRpb24pOwogCiAJCQlYTG9nQmVnaW5JbnNlcnQoKTsKIAkJCVhMb2dS ZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBTaXplT2ZIZWFwUHJ1bmUpOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCmluZGV4IGUxOThkZjY1ZDguLjZl ODlhMDhjNTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxp dHltYXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMK QEAgLTI4Miw3ICsyODIsNyBAQCB2aXNpYmlsaXR5bWFwX3NldChSZWxhdGlvbiByZWwsIEJs b2NrTnVtYmVyIGhlYXBCbGssIEJ1ZmZlciBoZWFwQnVmLAogCQkJaWYgKFhMb2dSZWNQdHJJ c0ludmFsaWQocmVjcHRyKSkKIAkJCXsKIAkJCQlBc3NlcnQoIUluUmVjb3ZlcnkpOwotCQkJ CXJlY3B0ciA9IGxvZ19oZWFwX3Zpc2libGUocmVsLT5yZF9ub2RlLCBoZWFwQnVmLCB2bUJ1 ZiwKKwkJCQlyZWNwdHIgPSBsb2dfaGVhcF92aXNpYmxlKHJlbCwgaGVhcEJ1Ziwgdm1CdWYs CiAJCQkJCQkJCQkJICBjdXRvZmZfeGlkLCBmbGFncyk7CiAKIAkJCQkvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwppbmRleCBlZjQ4Njc5Y2MyLi5lYmQzNTUyMWI1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwpAQCAtMzYsNiArMzYsNyBAQAog I2luY2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMu aCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2Nh Y2hlLmgiCiAKIHN0YXRpYyBCVE1ldGFQYWdlRGF0YSAqX2J0X2dldG1ldGEoUmVsYXRpb24g cmVsLCBCdWZmZXIgbWV0YWJ1Zik7CiBzdGF0aWMgdm9pZCBfYnRfbG9nX3JldXNlX3BhZ2Uo UmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywKQEAgLTQzLDcgKzQ0LDggQEAgc3Rh dGljIHZvaWQgX2J0X2xvZ19yZXVzZV9wYWdlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIg Ymxrbm8sCiBzdGF0aWMgdm9pZCBfYnRfZGVsaXRlbXNfZGVsZXRlKFJlbGF0aW9uIHJlbCwg QnVmZmVyIGJ1ZiwKIAkJCQkJCQkJVHJhbnNhY3Rpb25JZCBsYXRlc3RSZW1vdmVkWGlkLAog CQkJCQkJCQlPZmZzZXROdW1iZXIgKmRlbGV0YWJsZSwgaW50IG5kZWxldGFibGUsCi0JCQkJ CQkJCUJUVmFjdXVtUG9zdGluZyAqdXBkYXRhYmxlLCBpbnQgbnVwZGF0YWJsZSk7CisJCQkJ CQkJCUJUVmFjdXVtUG9zdGluZyAqdXBkYXRhYmxlLCBpbnQgbnVwZGF0YWJsZSwKKwkJCQkJ CQkJUmVsYXRpb24gaGVhcFJlbCk7CiBzdGF0aWMgY2hhciAqX2J0X2RlbGl0ZW1zX3VwZGF0 ZShCVFZhY3V1bVBvc3RpbmcgKnVwZGF0YWJsZSwgaW50IG51cGRhdGFibGUsCiAJCQkJCQkJ CSBPZmZzZXROdW1iZXIgKnVwZGF0ZWRvZmZzZXRzLAogCQkJCQkJCQkgU2l6ZSAqdXBkYXRl ZGJ1ZmxlbiwgYm9vbCBuZWVkc3dhbCk7CkBAIC04MzYsNiArODM4LDcgQEAgX2J0X2xvZ19y ZXVzZV9wYWdlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIEZ1bGxUcmFuc2Fj dGlvbklkIHNhZmV4aWQpCiAJICovCiAKIAkvKiBYTE9HIHN0dWZmICovCisJeGxyZWNfcmV1 c2Uub25DYXRhbG9nVGFibGUgPSBnZXRfcmVsX2xvZ2ljYWxfY2F0YWxvZyhyZWwtPnJkX2lu ZGV4LT5pbmRyZWxpZCk7CiAJeGxyZWNfcmV1c2Uubm9kZSA9IHJlbC0+cmRfbm9kZTsKIAl4 bHJlY19yZXVzZS5ibG9jayA9IGJsa25vOwogCXhscmVjX3JldXNlLmxhdGVzdFJlbW92ZWRG dWxsWGlkID0gc2FmZXhpZDsKQEAgLTEyOTYsNyArMTI5OSw4IEBAIF9idF9kZWxpdGVtc192 YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogc3RhdGljIHZvaWQKIF9idF9kZWxp dGVtc19kZWxldGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBUcmFuc2FjdGlvbklkIGxh dGVzdFJlbW92ZWRYaWQsCiAJCQkJCU9mZnNldE51bWJlciAqZGVsZXRhYmxlLCBpbnQgbmRl bGV0YWJsZSwKLQkJCQkJQlRWYWN1dW1Qb3N0aW5nICp1cGRhdGFibGUsIGludCBudXBkYXRh YmxlKQorCQkJCQlCVFZhY3V1bVBvc3RpbmcgKnVwZGF0YWJsZSwgaW50IG51cGRhdGFibGUs CisJCQkJCVJlbGF0aW9uIGhlYXBSZWwpCiB7CiAJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmKTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwpAQCAtMTM1OCw2ICsxMzYyLDggQEAg X2J0X2RlbGl0ZW1zX2RlbGV0ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsIFRyYW5zYWN0 aW9uSWQgbGF0ZXN0UmVtb3ZlZFhpZCwKIAkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2J0 cmVlX2RlbGV0ZSB4bHJlY19kZWxldGU7CiAKKwkJeGxyZWNfZGVsZXRlLm9uQ2F0YWxvZ1Rh YmxlID0KKwkJCVJlbGF0aW9uSXNBY2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcoaGVhcFJl bCk7CiAJCXhscmVjX2RlbGV0ZS5sYXRlc3RSZW1vdmVkWGlkID0gbGF0ZXN0UmVtb3ZlZFhp ZDsKIAkJeGxyZWNfZGVsZXRlLm5kZWxldGVkID0gbmRlbGV0YWJsZTsKIAkJeGxyZWNfZGVs ZXRlLm51cGRhdGVkID0gbnVwZGF0YWJsZTsKQEAgLTE2ODUsNyArMTY5MSw3IEBAIF9idF9k ZWxpdGVtc19kZWxldGVfY2hlY2soUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBSZWxhdGlv biBoZWFwUmVsLAogCiAJLyogUGh5c2ljYWxseSBkZWxldGUgdHVwbGVzIChvciBUSURzKSB1 c2luZyBkZWxldGFibGUgKG9yIHVwZGF0YWJsZSkgKi8KIAlfYnRfZGVsaXRlbXNfZGVsZXRl KHJlbCwgYnVmLCBsYXRlc3RSZW1vdmVkWGlkLCBkZWxldGFibGUsIG5kZWxldGFibGUsCi0J CQkJCQl1cGRhdGFibGUsIG51cGRhdGFibGUpOworCQkJCQkJdXBkYXRhYmxlLCBudXBkYXRh YmxlLCBoZWFwUmVsKTsKIAogCS8qIGJlIHRpZHkgKi8KIAlmb3IgKGludCBpID0gMDsgaSA8 IG51cGRhdGFibGU7IGkrKykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdp c3Qvc3BndmFjdXVtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5j CmluZGV4IDc2ZmIwMzc0YzQuLjMxODY4ODVkMTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Nw Z2lzdC9zcGd2YWN1dW0uYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2Uv aW5kZXhmc20uaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJ1dGls cy9zbmFwbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAKIAogLyogRW50 cnkgaW4gcGVuZGluZy1saXN0IG9mIFRJRHMgd2UgbmVlZCB0byByZXZpc2l0ICovCkBAIC01 MDMsNiArNTA0LDEzIEBAIHZhY3V1bVJlZGlyZWN0QW5kUGxhY2Vob2xkZXIoUmVsYXRpb24g aW5kZXgsIEJ1ZmZlciBidWZmZXIpCiAJc3BneGxvZ1ZhY3V1bVJlZGlyZWN0IHhscmVjOwog CUdsb2JhbFZpc1N0YXRlICp2aXN0ZXN0OwogCisJLyoKKwkgKiBUaGVyZSBpcyBubyBjaGFu Y2Ugb2YgZW5kbGVzcyByZWN1cnNpb24gZXZlbiB3aGVuIHdlIGFyZSBkb2luZyBjYXRhbG9n CisJICogYWNjZXNlcyBoZXJlOyBiZWNhdXNlLCBzcGdpc3QgaXMgbmV2ZXIgdXNlZCBmb3Ig Y2F0YWxvZ3MuIENoZWNrCisJICogY29tbWVudHMgaW4gUmVsYXRpb25Jc0FjY2Vzc2libGVJ bkxvZ2ljYWxEZWNvZGluZygpLgorCSAqLworCXhscmVjLm9uQ2F0YWxvZ1RhYmxlID0gZ2V0 X3JlbF9sb2dpY2FsX2NhdGFsb2coaW5kZXgtPnJkX2luZGV4LT5pbmRyZWxpZCk7CisKIAl4 bHJlYy5uVG9QbGFjZWhvbGRlciA9IDA7CiAJeGxyZWMubmV3ZXN0UmVkaXJlY3RYaWQgPSBJ bnZhbGlkVHJhbnNhY3Rpb25JZDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvbHN5c2NhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUu YwppbmRleCA2YmJhNWY4ZWM0Li45MGZhNWRmYzdjIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNo ZS9sc3lzY2FjaGUuYwpAQCAtMTgsNyArMTgsOSBAQAogI2luY2x1ZGUgImFjY2Vzcy9oYXNo LmgiCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vz cy9uYnRyZWUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJib290 c3RyYXAvYm9vdHN0cmFwLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9jYXRhbG9nLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbW9wLmgiCkBAIC0yMDYyLDYgKzIwNjQsMjAgQEAg Z2V0X3JlbF9wZXJzaXN0ZW5jZShPaWQgcmVsaWQpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAor Ym9vbAorZ2V0X3JlbF9sb2dpY2FsX2NhdGFsb2coT2lkIHJlbGlkKQoreworCWJvb2wJcmVz OworCVJlbGF0aW9uIHJlbDsKKworCS8qIGFzc3VtZSBwcmV2aW91c2x5IGxvY2tlZCAqLwor CXJlbCA9IHRhYmxlX29wZW4ocmVsaWQsIE5vTG9jayk7CisJcmVzID0gUmVsYXRpb25Jc0Fj Y2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhyZWwpOworCXRhYmxlX2Nsb3NlKHJlbCwgTm9M b2NrKTsKKworCXJldHVybiByZXM7Cit9CisKIAogLyoJCQkJLS0tLS0tLS0tLSBUUkFOU0ZP Uk0gQ0FDSEUgLS0tLS0tLS0tLQkJCQkJCSAqLwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvZ2lzdF9wcml2YXRlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2 YXRlLmgKaW5kZXggNTUzZDM2NGUyZC4uYTBmNDAxNTU1NiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9n aXN0X3ByaXZhdGUuaApAQCAtNDQwLDggKzQ0MCw4IEBAIGV4dGVybiBYTG9nUmVjUHRyIGdp c3RYTG9nUGFnZURlbGV0ZShCdWZmZXIgYnVmZmVyLAogCQkJCQkJCQkJIEZ1bGxUcmFuc2Fj dGlvbklkIHhpZCwgQnVmZmVyIHBhcmVudEJ1ZmZlciwKIAkJCQkJCQkJCSBPZmZzZXROdW1i ZXIgZG93bmxpbmtPZmZzZXQpOwogCi1leHRlcm4gdm9pZCBnaXN0WExvZ1BhZ2VSZXVzZShS ZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGJsa25vLAotCQkJCQkJCSAgRnVsbFRyYW5zYWN0 aW9uSWQgbGF0ZXN0UmVtb3ZlZFhpZCk7CitleHRlcm4gdm9pZCBnaXN0WExvZ1BhZ2VSZXVz ZShSZWxhdGlvbiBoZWFwUmVsLCBSZWxhdGlvbiByZWwsCisJCQkJICBCbG9ja051bWJlciBi bGtubywgRnVsbFRyYW5zYWN0aW9uSWQgbGF0ZXN0UmVtb3ZlZFhpZCk7CiAKIGV4dGVybiBY TG9nUmVjUHRyIGdpc3RYTG9nVXBkYXRlKEJ1ZmZlciBidWZmZXIsCiAJCQkJCQkJCSBPZmZz ZXROdW1iZXIgKnRvZGVsZXRlLCBpbnQgbnRvZGVsZXRlLApAQCAtNDg1LDcgKzQ4NSw3IEBA IGV4dGVybiBib29sIGdpc3Rwcm9wZXJ0eShPaWQgaW5kZXhfb2lkLCBpbnQgYXR0bm8sCiBl eHRlcm4gYm9vbCBnaXN0Zml0cGFnZShJbmRleFR1cGxlICppdHZlYywgaW50IGxlbik7CiBl eHRlcm4gYm9vbCBnaXN0bm9zcGFjZShQYWdlIHBhZ2UsIEluZGV4VHVwbGUgKml0dmVjLCBp bnQgbGVuLCBPZmZzZXROdW1iZXIgdG9kZWxldGUsIFNpemUgZnJlZXNwYWNlKTsKIGV4dGVy biB2b2lkIGdpc3RjaGVja3BhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKTsKLWV4dGVy biBCdWZmZXIgZ2lzdE5ld0J1ZmZlcihSZWxhdGlvbiByKTsKK2V4dGVybiBCdWZmZXIgZ2lz dE5ld0J1ZmZlcihSZWxhdGlvbiBoZWFwUmVsLCBSZWxhdGlvbiByKTsKIGV4dGVybiBib29s IGdpc3RQYWdlUmVjeWNsYWJsZShQYWdlIHBhZ2UpOwogZXh0ZXJuIHZvaWQgZ2lzdGZpbGxi dWZmZXIoUGFnZSBwYWdlLCBJbmRleFR1cGxlICppdHVwLCBpbnQgbGVuLAogCQkJCQkJICAg T2Zmc2V0TnVtYmVyIG9mZik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lz dHhsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxvZy5oCmluZGV4IGZkNTE0NGYy NTguLjczOTk5ZGRjNzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxv Zy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxvZy5oCkBAIC00OSw5ICs0OSw5 IEBAIHR5cGVkZWYgc3RydWN0IGdpc3R4bG9nUGFnZVVwZGF0ZQogICovCiB0eXBlZGVmIHN0 cnVjdCBnaXN0eGxvZ0RlbGV0ZQogeworCWJvb2wJCW9uQ2F0YWxvZ1RhYmxlOwogCVRyYW5z YWN0aW9uSWQgbGF0ZXN0UmVtb3ZlZFhpZDsKIAl1aW50MTYJCW50b2RlbGV0ZTsJCS8qIG51 bWJlciBvZiBkZWxldGVkIG9mZnNldHMgKi8KLQogCS8qCiAJICogSW4gcGF5bG9hZCBvZiBi bGsgMCA6IHRvZGVsZXRlIE9mZnNldE51bWJlcnMKIAkgKi8KQEAgLTk3LDYgKzk3LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgZ2lzdHhsb2dQYWdlRGVsZXRlCiAgKi8KIHR5cGVkZWYgc3RydWN0 IGdpc3R4bG9nUGFnZVJldXNlCiB7CisJYm9vbAkJb25DYXRhbG9nVGFibGU7CiAJUmVsRmls ZU5vZGUgbm9kZTsKIAlCbG9ja051bWJlciBibG9jazsKIAlGdWxsVHJhbnNhY3Rpb25JZCBs YXRlc3RSZW1vdmVkRnVsbFhpZDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9o YXNoX3hsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoX3hsb2cuaAppbmRleCA0MzUz YTMyZGJiLi45NGMzMjkyYzFlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFz aF94bG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2hfeGxvZy5oCkBAIC0yNTAs NiArMjUwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfaGFzaF9pbml0X2JpdG1hcF9wYWdlCiAg Ki8KIHR5cGVkZWYgc3RydWN0IHhsX2hhc2hfdmFjdXVtX29uZV9wYWdlCiB7CisJYm9vbAkJ b25DYXRhbG9nVGFibGU7CiAJVHJhbnNhY3Rpb25JZCBsYXRlc3RSZW1vdmVkWGlkOwogCWlu dAkJCW50dXBsZXM7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1f eGxvZy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nLmgKaW5kZXggMjdkYjQ4 MTg0ZS4uZWJhNDhiMGFlZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bV94bG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nLmgKQEAgLTI0 Miw2ICsyNDIsNyBAQCB0eXBlZGVmIHN0cnVjdCB4bF9oZWFwX3VwZGF0ZQogICovCiB0eXBl ZGVmIHN0cnVjdCB4bF9oZWFwX3BydW5lCiB7CisJYm9vbCAgICAgIG9uQ2F0YWxvZ1RhYmxl OwogCVRyYW5zYWN0aW9uSWQgbGF0ZXN0UmVtb3ZlZFhpZDsKIAl1aW50MTYJCW5yZWRpcmVj dGVkOwogCXVpbnQxNgkJbmRlYWQ7CkBAIC0zMzgsNiArMzM5LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgeGxfaGVhcF9mcmVlemVfdHVwbGUKICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGxfaGVhcF9m cmVlemVfcGFnZQogeworCWJvb2wJCW9uQ2F0YWxvZ1RhYmxlOwogCVRyYW5zYWN0aW9uSWQg Y3V0b2ZmX3hpZDsKIAl1aW50MTYJCW50dXBsZXM7CiB9IHhsX2hlYXBfZnJlZXplX3BhZ2U7 CkBAIC0zNTIsNiArMzU0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfaGVhcF9mcmVlemVfcGFn ZQogICovCiB0eXBlZGVmIHN0cnVjdCB4bF9oZWFwX3Zpc2libGUKIHsKKwlib29sCQlvbkNh dGFsb2dUYWJsZTsKIAlUcmFuc2FjdGlvbklkIGN1dG9mZl94aWQ7CiAJdWludDgJCWZsYWdz OwogfSB4bF9oZWFwX3Zpc2libGU7CkBAIC00MTMsNyArNDE2LDcgQEAgZXh0ZXJuIGJvb2wg aGVhcF9wcmVwYXJlX2ZyZWV6ZV90dXBsZShIZWFwVHVwbGVIZWFkZXIgdHVwbGUsCiAJCQkJ CQkJCQkgIGJvb2wgKnRvdGFsbHlfZnJvemVuKTsKIGV4dGVybiB2b2lkIGhlYXBfZXhlY3V0 ZV9mcmVlemVfdHVwbGUoSGVhcFR1cGxlSGVhZGVyIHR1cGxlLAogCQkJCQkJCQkJICB4bF9o ZWFwX2ZyZWV6ZV90dXBsZSAqeGxyZWNfdHApOwotZXh0ZXJuIFhMb2dSZWNQdHIgbG9nX2hl YXBfdmlzaWJsZShSZWxGaWxlTm9kZSBybm9kZSwgQnVmZmVyIGhlYXBfYnVmZmVyLAorZXh0 ZXJuIFhMb2dSZWNQdHIgbG9nX2hlYXBfdmlzaWJsZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBo ZWFwX2J1ZmZlciwKIAkJCQkJCQkJICAgQnVmZmVyIHZtX2J1ZmZlciwgVHJhbnNhY3Rpb25J ZCBjdXRvZmZfeGlkLCB1aW50OCBmbGFncyk7CiAKICNlbmRpZgkJCQkJCQkvKiBIRUFQQU1f WExPR19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL25idHhsb2cuaAppbmRleCAwZjc3MzE4NTZiLi5iMTVhYTQ3 ZjFiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9uYnR4bG9nLmgKQEAgLTE4NSw2ICsxODUsNyBAQCB0eXBlZGVm IHN0cnVjdCB4bF9idHJlZV9kZWR1cAogICovCiB0eXBlZGVmIHN0cnVjdCB4bF9idHJlZV9y ZXVzZV9wYWdlCiB7CisJYm9vbCAgICAgICAgb25DYXRhbG9nVGFibGU7CiAJUmVsRmlsZU5v ZGUgbm9kZTsKIAlCbG9ja051bWJlciBibG9jazsKIAlGdWxsVHJhbnNhY3Rpb25JZCBsYXRl c3RSZW1vdmVkRnVsbFhpZDsKQEAgLTIzMiw2ICsyMzMsNyBAQCB0eXBlZGVmIHN0cnVjdCB4 bF9idHJlZV92YWN1dW0KIAogdHlwZWRlZiBzdHJ1Y3QgeGxfYnRyZWVfZGVsZXRlCiB7CisJ Ym9vbAkJb25DYXRhbG9nVGFibGU7CiAJVHJhbnNhY3Rpb25JZCBsYXRlc3RSZW1vdmVkWGlk OwogCXVpbnQxNgkJbmRlbGV0ZWQ7CiAJdWludDE2CQludXBkYXRlZDsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGd4bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3Bn eGxvZy5oCmluZGV4IDY5NDA1YjU3NTAuLjA2YjkxZjRkMDQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9zcGd4bG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ3hs b2cuaApAQCAtMjM3LDYgKzIzNyw3IEBAIHR5cGVkZWYgc3RydWN0IHNwZ3hsb2dWYWN1dW1S b290CiAKIHR5cGVkZWYgc3RydWN0IHNwZ3hsb2dWYWN1dW1SZWRpcmVjdAogeworCWJvb2wJ CW9uQ2F0YWxvZ1RhYmxlOwogCXVpbnQxNgkJblRvUGxhY2Vob2xkZXI7IC8qIG51bWJlciBv ZiByZWRpcmVjdHMgdG8gbWFrZSBwbGFjZWhvbGRlcnMgKi8KIAlPZmZzZXROdW1iZXIgZmly c3RQbGFjZWhvbGRlcjsJLyogZmlyc3QgcGxhY2Vob2xkZXIgdHVwbGUgdG8gcmVtb3ZlICov CiAJVHJhbnNhY3Rpb25JZCBuZXdlc3RSZWRpcmVjdFhpZDsJLyogbmV3ZXN0IFhJRCBvZiBy ZW1vdmVkIHJlZGlyZWN0cyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvbHN5 c2NhY2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaAppbmRleCA3Nzg3MWFh ZWZjLi5lMmE1ZWZlZDMwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2Fj aGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaApAQCAtMTM5LDYgKzEz OSw3IEBAIGV4dGVybiBjaGFyIGdldF9yZWxfcmVsa2luZChPaWQgcmVsaWQpOwogZXh0ZXJu IGJvb2wgZ2V0X3JlbF9yZWxpc3BhcnRpdGlvbihPaWQgcmVsaWQpOwogZXh0ZXJuIE9pZAln ZXRfcmVsX3RhYmxlc3BhY2UoT2lkIHJlbGlkKTsKIGV4dGVybiBjaGFyIGdldF9yZWxfcGVy c2lzdGVuY2UoT2lkIHJlbGlkKTsKK2V4dGVybiBib29sIGdldF9yZWxfbG9naWNhbF9jYXRh bG9nKE9pZCByZWxpZCk7CiBleHRlcm4gT2lkCWdldF90cmFuc2Zvcm1fZnJvbXNxbChPaWQg dHlwaWQsIE9pZCBsYW5naWQsIExpc3QgKnRyZnR5cGVzKTsKIGV4dGVybiBPaWQJZ2V0X3Ry YW5zZm9ybV90b3NxbChPaWQgdHlwaWQsIE9pZCBsYW5naWQsIExpc3QgKnRyZnR5cGVzKTsK IGV4dGVybiBib29sIGdldF90eXBpc2RlZmluZWQoT2lkIHR5cGlkKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKaW5k ZXggOWEzYTAzZTUyMC4uMzQwNTA3MGQ2MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTE2LDYgKzE2LDcg QEAKIAogI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hs b2cuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmRleC5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfcHVibGljYXRpb24uaCIKQEAgLTM0NSw2ICszNDYsOSBAQCB0eXBlZGVm IHN0cnVjdCBTdGRSZE9wdGlvbnMKICAqIFJlbGF0aW9uSXNVc2VkQXNDYXRhbG9nVGFibGUK ICAqCQlSZXR1cm5zIHdoZXRoZXIgdGhlIHJlbGF0aW9uIHNob3VsZCBiZSB0cmVhdGVkIGFz IGEgY2F0YWxvZyB0YWJsZQogICoJCWZyb20gdGhlIHBvdiBvZiBsb2dpY2FsIGRlY29kaW5n LiAgTm90ZSBtdWx0aXBsZSBldmFsIG9mIGFyZ3VtZW50IQorICoJCVRoaXMgZGVmaW5pdGlv biBzaG91bGQgbm90IGludm9rZSBhbnl0aGluZyB0aGF0IHBlcmZvcm1zIGNhdGFsb2cKKyAq CQlhY2Nlc3M7IG90aGVyd2lzZSBpdCBtYXkgY2F1c2UgaW5maW5pdGUgcmVjdXJzaW9uLiBD aGVjayB0aGUgY29tbWVudHMKKyAqCQlpbiBSZWxhdGlvbklzQWNjZXNzaWJsZUluTG9naWNh bERlY29kaW5nKCkgZm9yIGRldGFpbHMuCiAgKi8KICNkZWZpbmUgUmVsYXRpb25Jc1VzZWRB c0NhdGFsb2dUYWJsZShyZWxhdGlvbikJXAogCSgocmVsYXRpb24pLT5yZF9vcHRpb25zICYm IFwKQEAgLTYyMiw2ICs2MjYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgVmlld09wdGlvbnMKICAq IFJlbGF0aW9uSXNBY2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcKICAqCQlUcnVlIGlmIHdl IG5lZWQgdG8gbG9nIGVub3VnaCBpbmZvcm1hdGlvbiB0byBoYXZlIGFjY2VzcyB2aWEKICAq CQlkZWNvZGluZyBzbmFwc2hvdC4KKyAqCQlUaGlzIGRlZmluaXRpb24gc2hvdWxkIG5vdCBp bnZva2UgYW55dGhpbmcgdGhhdCBwZXJmb3JtcyBjYXRhbG9nCisgKgkJYWNjZXNzLiBPdGhl cndpc2UsIGUuZy4gbG9nZ2luZyBhIFdBTCBlbnRyeSBmb3IgY2F0YWxvZyByZWxhdGlvbiBt YXkKKyAqCQlpbnZva2UgdGhpcyBmdW5jdGlvbiwgd2hpY2ggd2lsbCBpbiB0dXJuIGRvIGNh dGFsb2cgYWNjZXNzLCB3aGljaCBtYXkKKyAqCQlpbiB0dXJuIGNhdXNlIGFub3RoZXIgc2lt aWxhciBXQUwgZW50cnkgdG8gYmUgbG9nZ2VkLCBsZWFkaW5nIHRvCisgKgkJaW5maW5pdGUg cmVjdXJzaW9uLgogICovCiAjZGVmaW5lIFJlbGF0aW9uSXNBY2Nlc3NpYmxlSW5Mb2dpY2Fs RGVjb2RpbmcocmVsYXRpb24pIFwKIAkoWExvZ0xvZ2ljYWxJbmZvQWN0aXZlKCkgJiYgXAot LSAKMi4xNi42Cgo= --------------C4FC6AF2A8522BE3AE2F182D--