Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w2pM8-000dup-2t for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 11:46:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2pM7-00A24y-1k for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 11:46:31 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w2pM7-00A24q-0E for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 11:46:31 +0000 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2pM3-00000000vFO-20gr for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 11:46:30 +0000 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-35ba2ae4df3so2152696a91.2 for ; Wed, 18 Mar 2026 04:46:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773834386; cv=none; d=google.com; s=arc-20240605; b=aIPJdlTRSLL29O1q5+nHzk9qyJjLDVNX0J56bhnZUC5ThPKmU/ePJwCRRlCETSzPHQ JK8+SeZZKh5u64REWLCGI7PdNTMaLQ6beiO5acpDv+AjYkFdqaUld2QbhEicvOQhNbY6 PlxAosj8pPRp7FozcT7W0eUucj1mXLMeuHnL8fTBYAFCfy6feHA8xw5bqAa9E3UZb8l0 ilUxyxDXy6pMofzk2x86HdpnxIsyiahwG5Xs96TXhhpQYRTxyLNcLSRWNt15+5rjtVK3 RDxDq2uz27xHGkS93Gk66N9M+4tlYEWjEGXZ/rDU0kQ6ak5CLFN/1OgOwb/z9b7/aXRb FIsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=N5lUSOjuVUGWaKBrw3GSmI0j+qZPq00gJ05d9I/K+G8=; fh=MofRZ1XWToOgoijSZ09MVrwe+7c1cePNDAkjBGmtxDo=; b=EBqlIF+ybr1R2QnqeQa33ssaVXg3436Qy20kHItfJznpmXsxjzXVpJkVlpRh7kJyYG tGOByCwL6nJU4ygGQnnHTkDoHYJxwrlmXUKUMQ8A7h5ks15JkFPX0QLIympJ3nuptT+r JxG2Ex2FEGBkWsJsQJsgD/Uzc0ZCStya0qlDitcqbtU+w8QUEhbXiS+SRe4benDGh54a 3ObYwKHKPLrPxSkFp41aZGblmbVCNwclG4wA8xt4bs3YzcRtBUxrOU++suuzFonWqGaW os5jXLTxtOXYZVki4fjVMtgzpm+F4ztvAgg1kvyg5OJY7QMmO7ufE/hvzJB9wTR0hSxK nwfg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773834386; x=1774439186; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=N5lUSOjuVUGWaKBrw3GSmI0j+qZPq00gJ05d9I/K+G8=; b=QB2pf8MblHFpB7J5LJObJFjzDG5OVzyhYTX4pbvNEaLJFgWGLxWwwEjSkYj0opeWnT 3l6iH5UoRG9/DovOr/Fvu8JkMv4dL17i9JFl9a+jaLGFsEHmmXS4dCZj5Fi2BVdRGbQg +FahCIeP1IxynJgJNCor+BrRC8L9mWAm/FXfmHi6/UXolFMj3oAzcvUoeOyHLoHfv199 epZZjVjozakTKTlyL1+Z6T2NGkgbfpL/k3WB7chY7eERWqz7o2g0nlR0Zx6c5BdMjQO/ s0940e/V4ctK3Bre7vFO/El3AU1LiSJi3ZdTH8fzstL8phj3F7XmEvozCtwtr/F0Pf55 1MMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773834386; x=1774439186; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=N5lUSOjuVUGWaKBrw3GSmI0j+qZPq00gJ05d9I/K+G8=; b=lpoNd1ZOtx8CPtiGNuXt+pql9raZOqsDH3I+BncPnSeMj6uY02VNpWfexhdlDmO8o8 Cc7hmAMLq6mXGafJu3U8ZrZGgVCNCqf+Mi4DCV6hnU+4t7chZ8BtW+v62gk8K/B/+CZV YjqUjP26lZ/k1qQMPYPA6+IcnYVMGKK6TE2dSK167aDwNBNd6rIGXjD0XPqc9KJedG8b b9BzGk8fwxPsdXomqNE8S/5+BdwVISoGu/9NVayCxK5fgX92M03WM/iOHvbiZEMYfXn8 hVGe7xwnPWJzyNMmSZSfvAtfO6y6dM2l+acu7zb228GjoUF83efv/AEarvUfk7+dtaWK O/YQ== X-Forwarded-Encrypted: i=1; AJvYcCWGQNnHVR3Fgqe6wsruZbN/3jwyXrKebkFJODo68qg+r1ICQNck7xsyPUDRA0g3079r0CI5hjI+skhWTdol@lists.postgresql.org X-Gm-Message-State: AOJu0YxVJu4iyjE2uVl7fUDbUzkTO21aafINDiCXHqBZj1hVeFJESQ2I fL3J+l8EF4NP2ndCACvWM2Cok2Eap+D9WTItNoBTxr+AO46AnAxltfF2vskzZbeLmVLG4HYSw3Y bVARCg9rP2y7Kb/Xw30U3CAaoNyHo9HA= X-Gm-Gg: ATEYQzwWjTP2MBAuDjynai7ERt9TQnnhNRKILy8O+gODWkFNn/reG+zexSMsNCZPfvt cJz99PAuEgj/rQFK4qoA2RfA5Za+DT5NqNNbWrFbEZYtHfQwL1ezgYSXdO4/rIjq1cUATDETrCz j6P+siPuMe7DDhreN4d+KFRc6/kBK5jDf+cgOf2kK9O+QNn8RqvT5ZhQN6V7kMNSZ1dT5TPBXiT oC57N9EBxgUcUBpOcSudP1/HkDi6CM5pBtValVqfUFIdLWhE14x3SMHA/6f4EUC62oebtyy3CWe tPl8QtQidw== X-Received: by 2002:a17:902:e841:b0:2ae:abe9:b391 with SMTP id d9443c01a7336-2b06e3bd58amr37816885ad.24.1773834385424; Wed, 18 Mar 2026 04:46:25 -0700 (PDT) MIME-Version: 1.0 References: <72973471-8946-40c7-8b2d-8f95540d90e2@dunslane.net> <401bf08a-c8f1-48e2-9a30-78deaa9fa7c5@dunslane.net> In-Reply-To: <401bf08a-c8f1-48e2-9a30-78deaa9fa7c5@dunslane.net> From: Amul Sul Date: Wed, 18 Mar 2026 17:15:47 +0530 X-Gm-Features: AaiRm50fUilOg-bKFxTaEikZACVGWwd6dRDS9UZwQdh7grVNj9JUvc-AwyLdxRk Message-ID: Subject: Re: pg_waldump: support decoding of WAL inside tarfile To: Andrew Dunstan Cc: Robert Haas , Chao Li , Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000006f20d1064d4b0036" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006f20d1064d4b0036 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Mar 11, 2026 at 10:38=E2=80=AFPM Andrew Dunstan wrote: > > > On 2026-03-09 Mo 8:26 AM, Amul Sul wrote: > > On Sat, Mar 7, 2026 at 3:51=E2=80=AFAM Andrew Dunstan wrote: > > On 2026-03-04 We 4:50 PM, Andrew Dunstan wrote: > > On 2026-03-04 We 7:52 AM, Amul Sul wrote: > > On Wed, Mar 4, 2026 at 6:07=E2=80=AFAM Andrew Dunstan wrote: > > On 2026-03-02 Mo 8:00 AM, Amul Sul wrote: > > On Wed, Feb 18, 2026 at 12:28=E2=80=AFPM Amul Sul wrot= e: > > On Tue, Feb 10, 2026 at 3:06=E2=80=AFPM Amul Sul wrote= : > > On Wed, Feb 4, 2026 at 6:39=E2=80=AFPM Amul Sul wrote: > > On Wed, Jan 28, 2026 at 2:41=E2=80=AFAM Robert Haas wrote: > > On Tue, Jan 27, 2026 at 7:07=E2=80=AFAM Amul Sul wrote= : > > In the attached version, I am using the WAL segment name as the hash > key, which is much more straightforward. I have rewritten > read_archive_wal_page(), and it looks much cleaner than before. The > logic to discard irrelevant WAL files is still within > get_archive_wal_entry. I added an explanation for setting cur_wal to > NULL, which is now handled in the separate function I mentioned > previously. > > Kindly have a look at the attached version; let me know if you are > still not happy with the current approach for filtering/discarding > irrelevant WAL segments. It isn't much different from the previous > version, but I have tried to keep it in a separate routine for better > code readability, with comments to make it easier to understand. I > also added a comment for ArchivedWALFile. > > I feel like the division of labor between get_archive_wal_entry() and > read_archive_wal_page() is odd. I noticed this in the last version, > too, and it still seems to be the case. get_archive_wal_entry() first > calls ArchivedWAL_lookup(). If that finds an entry, it just returns. > If it doesn't, it loops until an entry for the requested file shows up > and then returns it. Then control returns to read_archive_wal_page() > which loops some more until we have all the data we need for the > requested file. But it seems odd to me to have two separate loops > here. I think that the first loop is going to call read_archive_file() > until we find the beginning of the file that we care about and then > the second one is going to call read_archive_file() some more until we > have read enough of it to satisfy the request. It feels odd to me to > do it that way, as if we told somebody to first wait until 9 o'clock > and then wait another 30 minutes, instead of just telling them to wait > until 9:30. I realize it's not quite the same thing, because apart > from calling read_archive_file(), the two loops do different things, > but I still think it looks odd. > > + /* > + * Ignore if the timeline is different or the current segment is not > + * the desired one. > + */ > + XLogFromFileName(entry->fname, &curSegTimeline, &curSegNo, WalSegSz); > + if (privateInfo->timeline !=3D curSegTimeline || > + privateInfo->startSegNo > curSegNo || > + privateInfo->endSegNo < curSegNo || > + segno > curSegNo) > + { > + free_archive_wal_entry(entry->fname, privateInfo); > + continue; > + } > > The comment doesn't match the code. If it did, the test would be > (privateInfo->timeline !=3D curSegTimeline || segno !=3D curSegno). But > instead the segno test is > rather than !=3D, and the checks against > startSegNo and endSegNo aren't explained at all. I think I understand > why the segno test uses > rather than !=3D, but it's the point of the > comment to explain things like that, rather than leaving the reader to > guess. And I don't know why we also need to test startSegNo and > endSegNo. > > I also wonder what the point is of doing XLogFromFileName() on the > fname provided by the caller and then again on entry->fname. Couldn't > you just compare the strings? > > Again, the division of labor is really odd here. It's the job of > astreamer_waldump_content() to skip things that aren't WAL files at > all, but it's the job of get_archive_wal_entry() to skip things that > are WAL files but not the one we want. I disagree with putting those > checks in completely separate parts of the code. > > Keeping the timeline and segment start-end range checks inside the > archive streamer creates a circular dependency that cannot be resolved > without a 'dirty hack'. We must read the first available WAL file page > to determine the wal_segment_size before it can calculate the target > segment range. Moving the checks inside the streamer would make it > impossible to process that initial file, as the necessary filtering > parameters -- would still be unknown which would need to be skipped > for the first read somehow. What if later we realized that the first > WAL file which was allowed to be streamed by skipping that check is > irrelevant and doesn't fall under the start-end segment range? > > Please have a look at the attached version, specifically patch 0005. > In astreamer_waldump_content(), I have moved the WAL file filtration > check from get_archive_wal_entry(). This check will be skipped during > the initial read in init_archive_reader(), which instead performs it > explicitly once it determines the WAL segment size and the start/end > segments. > > To access the WAL segment size inside astreamer_waldump_content(), I > have moved the WAL segment size variable into the XLogDumpPrivate > structure in the separate 0004 patch. > > Attached is an updated version including the aforesaid changes. It > includes a new refactoring patch (0001) that moves the logic for > identifying tar archives and their compression types from > pg_basebackup and pg_verifybackup into a separate-reusable function, > per a suggestion from Euler [1]. Additionally, I have added a test > for the contrecord decoding to the main patch (now 0006). > > 1]http://postgr.es/m/3c8e7b02-2152-495a-a0b6-e37cf9286a70@app.fastmail.co= m > > Rebased against the latest master, fixed typos in code comments, and > replaced palloc0 with palloc0_object. > > Hi Amul. > > > I think this looks in pretty good shape. > > Thank you very much for looking at the patch. > > Attached are patches for a few things I think could be fixed. They are > mostly self-explanatory. The TAP test fix is the only sane way I could > come up with stopping the skip code you had from reporting a wildly > inaccurate number of tests skipped. The sane way to do this from a > Test::More perspective is a subtest, but unfortunately meson does not > like subtest output, which is why we don't use it elsewhere, so the only > way I could come up with was to split this out into a separate test. Of > course, we might just say we don't care about the misreport, in which > case we could just live with things as they are. > > I agree that the reported skip number was incorrect, and I have > corrected it in the attached patch. I haven't applied your patch for > the TAP test improvements yet because I wanted to double-check it > first with you; the patch as it stood created duplicate tests already > present in 001_basic.pl. To avoid this duplication, I have added a > loop that performs tests for both plain and tar WAL directory inputs, > similar to the approach used in pg_verifybackup for different > compression type tests (e.g., 008_untar.pl, 010_client_untar.pl). I > don't have any objection to doing so if you feel the duplication is > acceptable, but I feel that using a loop for the tests in 001_basic.pl > is a bit tidier. Let me know your thoughts. > > I will take a look. > > I'm ok, with doing it this way. It's just a bit fragile - if we add a > test the number will be wrong. But maybe it's not worth worrying about. > > Everything else looks fairly good. The attached fixes a few relatively > minor issues in v15. The main one is that it stops allocating/freeing a > buffer every time we call read_archive_file() and instead adds a > reusable buffer. It also adds back wal-directory as an undocumented > alias of wal-path, to avoid breaking legacy scripts unnecessarily, and > adds constness to the fname argument of pg_tar_compress_algorithm, as > well as fixing some indentation and grammar issues. > > All in all I think we're in good shape. > > Thanks for the review. I have incorporated your suggested changes, > with one exception: I have skipped the buffer reallocation code in > read_archive_file(). Since we only handle two specific read sizes -- > XLOG_BLCKSZ and READ_CHUNK_SIZE (128 KB, we defined in > archive_waldump.c) -- dynamic reallocation seems unnecessary. Instead, > I moved the allocation to init_archive_reader(), which now initializes > a buffer at READ_CHUNK_SIZE. I also added an assertion in > read_archive_file() to ensure that no read request exceeds this > allocated capacity. > > Kindly have a look at the attached version and let me know your thoughts. > > > Looks pretty good. I have squashed them into three patches I think are co= mmittable. Also attached is a diff showing what's changed - mainly this: > > . --follow + tar archive rejected (pg_waldump.c) =E2=80=94 new validation= prevents a confusing pg_fatal when combining --follow with a tar archive > . error messages split (archive_waldump.c) =E2=80=94 the single "could no= t read file" error is now two distinct messages: "WAL segment is too short"= (truncated file) vs "unexpected end of archive" (archive EOF) - Fixes an i= ssue raised in review > . hash table cleanup (archive_waldump.c) =E2=80=94 free_archive_reader no= w iterates and frees all remaining hash entries and destroys the table > The final squashed version looks good to me, thank you. But, I would like to propose splitting the 0001 patch into two separate commits: a preparatory refactoring of the pg_waldump code and a standalone commit that moves the tar archive detection and compression logic to a common location, as the latter is an independent improvement to the existing codebase. Additionally, since the test file refactoring was only kept separate to facilitate the review and has already been reviewed, I suggest merging those changes into the main feature patch i.e. 0002. All other elements should remain in a single preparatory refactoring patch for pg_waldump. Attached is the version that includes the proposed split. No additional changes to 0002 and 0003 patches. Regards, Amul --0000000000006f20d1064d4b0036 Content-Type: application/x-patch; name="v18-0001-Move-tar-detection-and-compression-logic-to-comm.patch" Content-Disposition: attachment; filename="v18-0001-Move-tar-detection-and-compression-logic-to-comm.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmvyp9hn0 RnJvbSA5M2IwODE4Y2UxYjQ0NjE5YTM3YjljNTYyNGViMGM3NzkyYTMwZWRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbXVsIFN1bCA8c3VsYW11bEBnbWFpbC5jb20+CkRhdGU6IFR1 ZSwgMTcgRmViIDIwMjYgMTQ6NTE6MTEgKzA1MzAKU3ViamVjdDogW1BBVENIIHYxOCAxLzRdIE1v dmUgdGFyIGRldGVjdGlvbiBhbmQgY29tcHJlc3Npb24gbG9naWMgdG8gY29tbW9uLgoKQ29uc29s aWRhdGUgdGFyIGFyY2hpdmUgaWRlbnRpZmljYXRpb24gYW5kIGNvbXByZXNzaW9uLXR5cGUgZGV0 ZWN0aW9uCmxvZ2ljIGludG8gYSBzaGFyZWQgbG9jYXRpb24uIEN1cnJlbnRseSB1c2VkIGJ5IHBn X2Jhc2ViYWNrdXAgYW5kCnBnX3ZlcmlmeWJhY2t1cCwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFs c28gcmVxdWlyZWQgZm9yIHVwY29taW5nCnBnX3dhbGR1bXAgZW5oYW5jZW1lbnRzLgoKVGhpcyBj aGFuZ2UgcHJvbW90ZXMgY29kZSByZXVzZSBhbmQgc2ltcGxpZmllcyBtYWludGVuYW5jZSBhY3Jv c3MKZnJvbnRlbmQgdG9vbHMuCgpBdXRob3I6IEFtdWwgU3VsIDxzdWxhbXVsQGdtYWlsLmNvbT4K UmV2aWV3ZWQtYnk6IFJvYmVydCBIYWFzIDxyb2JlcnRtaGFhc0BnbWFpbC5jb20+ClJldmlld2Vk LWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdl ZC1ieTogQW5kcmV3IER1bnN0YW4gPGFuZHJld0BkdW5zbGFuZS5uZXQ+CmRpc2N1c3Npb246IGh0 dHBzOi8vcG9zdGdyLmVzL20vQ0FBSl9iOTRicWRXTjNoMkotUHp6elEyTnBid2N0NVpRSGdnbl9R b1lHaEMycm4tPVdRQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3Bn X2Jhc2ViYWNrdXAuYyAgICAgfCAzNiArKysrKysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9w Z192ZXJpZnliYWNrdXAvcGdfdmVyaWZ5YmFja3VwLmMgfCAxMiArLS0tLS0tLQogc3JjL2NvbW1v bi9jb21wcmVzc2lvbi5jICAgICAgICAgICAgICAgICAgfCAzMCArKysrKysrKysrKysrKysrKysr CiBzcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaCAgICAgICAgICB8ICAyICsrCiA0IGZp bGVzIGNoYW5nZWQsIDQ0IGluc2VydGlvbnMoKyksIDM2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19iYXNlYmFja3VwLmMgYi9zcmMvYmluL3BnX2Jh c2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5jCmluZGV4IGZhMTY5YThkNjQyLi5jMWE0NjcyYWE2ZiAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Jhc2ViYWNrdXAuYworKysgYi9z cmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5jCkBAIC0xMDcwLDEyICsxMDcwLDkg QEAgQ3JlYXRlQmFja3VwU3RyZWFtZXIoY2hhciAqYXJjaGl2ZV9uYW1lLCBjaGFyICpzcGNsb2Nh dGlvbiwKIAlhc3RyZWFtZXIgICptYW5pZmVzdF9pbmplY3Rfc3RyZWFtZXIgPSBOVUxMOwogCWJv b2wJCWluamVjdF9tYW5pZmVzdDsKIAlib29sCQlpc190YXIsCi0JCQkJaXNfdGFyX2d6LAotCQkJ CWlzX3Rhcl9sejQsCi0JCQkJaXNfdGFyX3pzdGQsCiAJCQkJaXNfY29tcHJlc3NlZF90YXI7CisJ cGdfY29tcHJlc3NfYWxnb3JpdGhtIGNvbXByZXNzZWRfdGFyX2FsZ29yaXRobTsKIAlib29sCQlt dXN0X3BhcnNlX2FyY2hpdmU7Ci0JaW50CQkJYXJjaGl2ZV9uYW1lX2xlbiA9IHN0cmxlbihhcmNo aXZlX25hbWUpOwogCiAJLyoKIAkgKiBOb3JtYWxseSwgd2UgZW1pdCB0aGUgYmFja3VwIG1hbmlm ZXN0IGFzIGEgc2VwYXJhdGUgZmlsZSwgYnV0IHdoZW4KQEAgLTEwODQsMjQgKzEwODEsMTMgQEAg Q3JlYXRlQmFja3VwU3RyZWFtZXIoY2hhciAqYXJjaGl2ZV9uYW1lLCBjaGFyICpzcGNsb2NhdGlv biwKIAkgKi8KIAlpbmplY3RfbWFuaWZlc3QgPSAoZm9ybWF0ID09ICd0JyAmJiBzdHJjbXAoYmFz ZWRpciwgIi0iKSA9PSAwICYmIG1hbmlmZXN0KTsKIAotCS8qIElzIHRoaXMgYSB0YXIgYXJjaGl2 ZT8gKi8KLQlpc190YXIgPSAoYXJjaGl2ZV9uYW1lX2xlbiA+IDQgJiYKLQkJCSAgc3RyY21wKGFy Y2hpdmVfbmFtZSArIGFyY2hpdmVfbmFtZV9sZW4gLSA0LCAiLnRhciIpID09IDApOwotCi0JLyog SXMgdGhpcyBhIC50YXIuZ3ogYXJjaGl2ZT8gKi8KLQlpc190YXJfZ3ogPSAoYXJjaGl2ZV9uYW1l X2xlbiA+IDcgJiYKLQkJCQkgc3RyY21wKGFyY2hpdmVfbmFtZSArIGFyY2hpdmVfbmFtZV9sZW4g LSA3LCAiLnRhci5neiIpID09IDApOwotCi0JLyogSXMgdGhpcyBhIC50YXIubHo0IGFyY2hpdmU/ ICovCi0JaXNfdGFyX2x6NCA9IChhcmNoaXZlX25hbWVfbGVuID4gOCAmJgotCQkJCSAgc3RyY21w KGFyY2hpdmVfbmFtZSArIGFyY2hpdmVfbmFtZV9sZW4gLSA4LCAiLnRhci5sejQiKSA9PSAwKTsK LQotCS8qIElzIHRoaXMgYSAudGFyLnpzdCBhcmNoaXZlPyAqLwotCWlzX3Rhcl96c3RkID0gKGFy Y2hpdmVfbmFtZV9sZW4gPiA4ICYmCi0JCQkJICAgc3RyY21wKGFyY2hpdmVfbmFtZSArIGFyY2hp dmVfbmFtZV9sZW4gLSA4LCAiLnRhci56c3QiKSA9PSAwKTsKKwkvKiBDaGVjayB3aGV0aGVyIGl0 IGlzIGEgdGFyIGFyY2hpdmUgYW5kIGl0cyBjb21wcmVzc2lvbiB0eXBlICovCisJaXNfdGFyID0g cGFyc2VfdGFyX2NvbXByZXNzX2FsZ29yaXRobShhcmNoaXZlX25hbWUsCisJCQkJCQkJCQkJICAm Y29tcHJlc3NlZF90YXJfYWxnb3JpdGhtKTsKIAogCS8qIElzIHRoaXMgYW55IGtpbmQgb2YgY29t cHJlc3NlZCB0YXI/ICovCi0JaXNfY29tcHJlc3NlZF90YXIgPSBpc190YXJfZ3ogfHwgaXNfdGFy X2x6NCB8fCBpc190YXJfenN0ZDsKKwlpc19jb21wcmVzc2VkX3RhciA9IChpc190YXIgJiYKKwkJ CQkJCSBjb21wcmVzc2VkX3Rhcl9hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSk7CiAK IAkvKgogCSAqIEluamVjdGluZyB0aGUgbWFuaWZlc3QgaW50byBhIGNvbXByZXNzZWQgdGFyIGZp bGUgd291bGQgYmUgcG9zc2libGUgaWYKQEAgLTExMjgsNyArMTExNCw3IEBAIENyZWF0ZUJhY2t1 cFN0cmVhbWVyKGNoYXIgKmFyY2hpdmVfbmFtZSwgY2hhciAqc3BjbG9jYXRpb24sCiAJCQkJCQkg IChzcGNsb2NhdGlvbiA9PSBOVUxMICYmIHdyaXRlcmVjb3Zlcnljb25mKSk7CiAKIAkvKiBBdCBw cmVzZW50LCB3ZSBvbmx5IGtub3cgaG93IHRvIHBhcnNlIHRhciBhcmNoaXZlcy4gKi8KLQlpZiAo bXVzdF9wYXJzZV9hcmNoaXZlICYmICFpc190YXIgJiYgIWlzX2NvbXByZXNzZWRfdGFyKQorCWlm IChtdXN0X3BhcnNlX2FyY2hpdmUgJiYgIWlzX3RhcikKIAl7CiAJCXBnX2xvZ19lcnJvcigiY2Fu bm90IHBhcnNlIGFyY2hpdmUgXCIlc1wiIiwgYXJjaGl2ZV9uYW1lKTsKIAkJcGdfbG9nX2Vycm9y X2RldGFpbCgiT25seSB0YXIgYXJjaGl2ZXMgY2FuIGJlIHBhcnNlZC4iKTsKQEAgLTEyNjMsMTMg KzEyNDksMTMgQEAgQ3JlYXRlQmFja3VwU3RyZWFtZXIoY2hhciAqYXJjaGl2ZV9uYW1lLCBjaGFy ICpzcGNsb2NhdGlvbiwKIAkgKiBJZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGEgc2VydmVyIGNv bXByZXNzZWQgYXJjaGl2ZSBhbG9uZyB3aXRoCiAJICogYXJjaGl2ZSBleHRyYWN0aW9uIGF0IGNs aWVudCB0aGVuIHdlIG5lZWQgdG8gZGVjb21wcmVzcyBpdC4KIAkgKi8KLQlpZiAoZm9ybWF0ID09 ICdwJykKKwlpZiAoZm9ybWF0ID09ICdwJyAmJiBpc19jb21wcmVzc2VkX3RhcikKIAl7Ci0JCWlm IChpc190YXJfZ3opCisJCWlmIChjb21wcmVzc2VkX3Rhcl9hbGdvcml0aG0gPT0gUEdfQ09NUFJF U1NJT05fR1pJUCkKIAkJCXN0cmVhbWVyID0gYXN0cmVhbWVyX2d6aXBfZGVjb21wcmVzc29yX25l dyhzdHJlYW1lcik7Ci0JCWVsc2UgaWYgKGlzX3Rhcl9sejQpCisJCWVsc2UgaWYgKGNvbXByZXNz ZWRfdGFyX2FsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9MWjQpCiAJCQlzdHJlYW1lciA9IGFz dHJlYW1lcl9sejRfZGVjb21wcmVzc29yX25ldyhzdHJlYW1lcik7Ci0JCWVsc2UgaWYgKGlzX3Rh cl96c3RkKQorCQllbHNlIGlmIChjb21wcmVzc2VkX3Rhcl9hbGdvcml0aG0gPT0gUEdfQ09NUFJF U1NJT05fWlNURCkKIAkJCXN0cmVhbWVyID0gYXN0cmVhbWVyX3pzdGRfZGVjb21wcmVzc29yX25l dyhzdHJlYW1lcik7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9w Z192ZXJpZnliYWNrdXAuYyBiL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3BnX3ZlcmlmeWJhY2t1 cC5jCmluZGV4IGNiYzk0NDczODRmLi4zMWY2MDZjNDViMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z192ZXJpZnliYWNrdXAvcGdfdmVyaWZ5YmFja3VwLmMKKysrIGIvc3JjL2Jpbi9wZ192ZXJpZnli YWNrdXAvcGdfdmVyaWZ5YmFja3VwLmMKQEAgLTk0MSwxNyArOTQxLDcgQEAgcHJlY2hlY2tfdGFy X2JhY2t1cF9maWxlKHZlcmlmaWVyX2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnJlbHBhdGgsCiAJ fQogCiAJLyogTm93LCBjaGVjayB0aGUgY29tcHJlc3Npb24gdHlwZSBvZiB0aGUgdGFyICovCi0J aWYgKHN0cmNtcChzdWZmaXgsICIudGFyIikgPT0gMCkKLQkJY29tcHJlc3NfYWxnb3JpdGhtID0g UEdfQ09NUFJFU1NJT05fTk9ORTsKLQllbHNlIGlmIChzdHJjbXAoc3VmZml4LCAiLnRneiIpID09 IDApCi0JCWNvbXByZXNzX2FsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7Ci0JZWxzZSBp ZiAoc3RyY21wKHN1ZmZpeCwgIi50YXIuZ3oiKSA9PSAwKQotCQljb21wcmVzc19hbGdvcml0aG0g PSBQR19DT01QUkVTU0lPTl9HWklQOwotCWVsc2UgaWYgKHN0cmNtcChzdWZmaXgsICIudGFyLmx6 NCIpID09IDApCi0JCWNvbXByZXNzX2FsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0xaNDsKLQll bHNlIGlmIChzdHJjbXAoc3VmZml4LCAiLnRhci56c3QiKSA9PSAwKQotCQljb21wcmVzc19hbGdv cml0aG0gPSBQR19DT01QUkVTU0lPTl9aU1REOwotCWVsc2UKKwlpZiAoIXBhcnNlX3Rhcl9jb21w cmVzc19hbGdvcml0aG0oc3VmZml4LCAmY29tcHJlc3NfYWxnb3JpdGhtKSkKIAl7CiAJCXJlcG9y dF9iYWNrdXBfZXJyb3IoY29udGV4dCwKIAkJCQkJCQkiZmlsZSBcIiVzXCIgaXMgbm90IGV4cGVj dGVkIGluIGEgdGFyIGZvcm1hdCBiYWNrdXAiLApkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9jb21w cmVzc2lvbi5jIGIvc3JjL2NvbW1vbi9jb21wcmVzc2lvbi5jCmluZGV4IDkyY2Q0ZWM3YTBkLi5m YjI3NTAxZDI5NyAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi9jb21wcmVzc2lvbi5jCisrKyBiL3Ny Yy9jb21tb24vY29tcHJlc3Npb24uYwpAQCAtNDEsNiArNDEsMzYgQEAgc3RhdGljIGludAlleHBl Y3RfaW50ZWdlcl92YWx1ZShjaGFyICprZXl3b3JkLCBjaGFyICp2YWx1ZSwKIHN0YXRpYyBib29s IGV4cGVjdF9ib29sZWFuX3ZhbHVlKGNoYXIgKmtleXdvcmQsIGNoYXIgKnZhbHVlLAogCQkJCQkJ CQkgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiAqcmVzdWx0KTsKIAorLyoKKyAqIExvb2sgdXAg YSBjb21wcmVzc2lvbiBhbGdvcml0aG0gYnkgYXJjaGl2ZSBmaWxlIGV4dGVuc2lvbi4gUmV0dXJu cyB0cnVlIGFuZAorICogc2V0cyAqYWxnb3JpdGhtIGlmIHRoZSBuYW1lIGlzIHJlY29nbml6ZWQu IE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorICovCitib29sCitwYXJzZV90YXJfY29tcHJlc3Nf YWxnb3JpdGhtKGNvbnN0IGNoYXIgKmZuYW1lLCBwZ19jb21wcmVzc19hbGdvcml0aG0gKmFsZ29y aXRobSkKK3sKKwlpbnQJCQlmbmFtZV9sZW4gPSBzdHJsZW4oZm5hbWUpOworCisJaWYgKGZuYW1l X2xlbiA+PSA0ICYmCisJCXN0cmNtcChmbmFtZSArIGZuYW1lX2xlbiAtIDQsICIudGFyIikgPT0g MCkKKwkJKmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7CisJZWxzZSBpZiAoZm5hbWVf bGVuID49IDQgJiYKKwkJCSBzdHJjbXAoZm5hbWUgKyBmbmFtZV9sZW4gLSA0LCAiLnRneiIpID09 IDApCisJCSphbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOworCWVsc2UgaWYgKGZuYW1l X2xlbiA+PSA3ICYmCisJCQkgc3RyY21wKGZuYW1lICsgZm5hbWVfbGVuIC0gNywgIi50YXIuZ3oi KSA9PSAwKQorCQkqYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKKwllbHNlIGlmIChm bmFtZV9sZW4gPj0gOCAmJgorCQkJIHN0cmNtcChmbmFtZSArIGZuYW1lX2xlbiAtIDgsICIudGFy Lmx6NCIpID09IDApCisJCSphbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9MWjQ7CisJZWxzZSBp ZiAoZm5hbWVfbGVuID49IDggJiYKKwkJCSBzdHJjbXAoZm5hbWUgKyBmbmFtZV9sZW4gLSA4LCAi LnRhci56c3QiKSA9PSAwKQorCQkqYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fWlNURDsKKwll bHNlCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCiAvKgogICogTG9vayB1 cCBhIGNvbXByZXNzaW9uIGFsZ29yaXRobSBieSBuYW1lLiBSZXR1cm5zIHRydWUgYW5kIHNldHMg KmFsZ29yaXRobQogICogaWYgdGhlIG5hbWUgaXMgcmVjb2duaXplZC4gT3RoZXJ3aXNlIHJldHVy bnMgZmFsc2UuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaCBi L3NyYy9pbmNsdWRlL2NvbW1vbi9jb21wcmVzc2lvbi5oCmluZGV4IDZjNzQ1YjkwMDY2Li5mOTlj NzQ3Y2RkMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbW9uL2NvbXByZXNzaW9uLmgKKysr IGIvc3JjL2luY2x1ZGUvY29tbW9uL2NvbXByZXNzaW9uLmgKQEAgLTQxLDYgKzQxLDggQEAgdHlw ZWRlZiBzdHJ1Y3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbgogCiBleHRlcm4gdm9pZCBwYXJz ZV9jb21wcmVzc19vcHRpb25zKGNvbnN0IGNoYXIgKm9wdGlvbiwgY2hhciAqKmFsZ29yaXRobSwK IAkJCQkJCQkJICAgY2hhciAqKmRldGFpbCk7CitleHRlcm4gYm9vbCBwYXJzZV90YXJfY29tcHJl c3NfYWxnb3JpdGhtKGNvbnN0IGNoYXIgKmZuYW1lLAorCQkJCQkJCQkJCSBwZ19jb21wcmVzc19h bGdvcml0aG0gKmFsZ29yaXRobSk7CiBleHRlcm4gYm9vbCBwYXJzZV9jb21wcmVzc19hbGdvcml0 aG0oY2hhciAqbmFtZSwgcGdfY29tcHJlc3NfYWxnb3JpdGhtICphbGdvcml0aG0pOwogZXh0ZXJu IGNvbnN0IGNoYXIgKmdldF9jb21wcmVzc19hbGdvcml0aG1fbmFtZShwZ19jb21wcmVzc19hbGdv cml0aG0gYWxnb3JpdGhtKTsKIAotLSAKMi40Ny4xCgo= --0000000000006f20d1064d4b0036 Content-Type: application/x-patch; name="v18-0002-pg_waldump-Preparatory-refactoring-for-tar-archi.patch" Content-Disposition: attachment; filename="v18-0002-pg_waldump-Preparatory-refactoring-for-tar-archi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmvypecp1 RnJvbSAzNzkwMzI1Y2UxMzE2ZDc0NWU0NTMwODFkYzM4MWYwNWI2OGFkMDM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbXVsIFN1bCA8c3VsYW11bEBnbWFpbC5jb20+CkRhdGU6IFRo dSwgMjIgSmFuIDIwMjYgMTA6Mjg6MzIgKzA1MzAKU3ViamVjdDogW1BBVENIIHYxOCAyLzRdIHBn X3dhbGR1bXA6IFByZXBhcmF0b3J5IHJlZmFjdG9yaW5nIGZvciB0YXIgYXJjaGl2ZQogV0FMIGRl Y29kaW5nLgoKU2V2ZXJhbCByZWZhY3RvcmluZyBzdGVwcyBpbiBwcmVwYXJhdGlvbiBmb3IgYWRk aW5nIHRhciBhcmNoaXZlIFdBTApkZWNvZGluZyBzdXBwb3J0IHRvIHBnX3dhbGR1bXA6CgotIE1v dmUgWExvZ0R1bXBQcml2YXRlIGFuZCByZWxhdGVkIGRlY2xhcmF0aW9ucyBpbnRvIGEgbmV3IHBn X3dhbGR1bXAuaAogIGhlYWRlciwgYWxsb3dpbmcgYSBzZWNvbmQgc291cmNlIGZpbGUgdG8gc2hh cmUgdGhlbS4KCi0gRmFjdG9yIG91dCByZXF1aXJlZF9yZWFkX2xlbigpIHNvIHRoZSByZWFkLXNp emUgY2FsY3VsYXRpb24gY2FuIGJlCiAgcmV1c2VkIGZvciBib3RoIHJlZ3VsYXIgV0FMIGZpbGVz IGFuZCB0YXItYXJjaGl2ZWQgV0FMLgoKLSBNb3ZlIHRoZSBXQUwgc2VnbWVudCBzaXplIHZhcmlh YmxlIGludG8gWExvZ0R1bXBQcml2YXRlIGFuZCByZW5hbWUgaXQKICB0byBzZWdzaXplLCBtYWtp bmcgaXQgYWNjZXNzaWJsZSB0byB0aGUgYXJjaGl2ZSBzdHJlYW1lciBjb2RlLgoKQXV0aG9yOiBB bXVsIFN1bCA8c3VsYW11bEBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBSb2JlcnQgSGFhcyA8cm9i ZXJ0bWhhYXNAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogSmFrdWIgV2FydGFrIDxqYWt1Yi53YXJ0 YWtAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IEFuZHJldyBEdW5zdGFuIDxhbmRyZXdA ZHVuc2xhbmUubmV0PgpkaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBQUpfYjk0YnFk V04zaDJKLVB6enpRMk5wYndjdDVaUUhnZ25fUW9ZR2hDMnJuLT1XUUBtYWlsLmdtYWlsLmNvbQot LS0KIHNyYy9iaW4vcGdfd2FsZHVtcC9wZ193YWxkdW1wLmMgfCA3OCArKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0KIHNyYy9iaW4vcGdfd2FsZHVtcC9wZ193YWxkdW1wLmggfCAyNiAr KysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA3MCBpbnNlcnRpb25zKCspLCAzNCBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3dhbGR1bXAvcGdfd2FsZHVtcC5o CgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dhbGR1bXAuYyBiL3NyYy9iaW4v cGdfd2FsZHVtcC9wZ193YWxkdW1wLmMKaW5kZXggZjM0NDYzODVkNmEuLjVkMzFiMTVkYmQ4IDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvcGdfd2FsZHVtcC5jCisrKyBiL3NyYy9iaW4v cGdfd2FsZHVtcC9wZ193YWxkdW1wLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb21t b24vbG9nZ2luZy5oIgogI2luY2x1ZGUgImNvbW1vbi9yZWxwYXRoLmgiCiAjaW5jbHVkZSAiZ2V0 b3B0X2xvbmcuaCIKKyNpbmNsdWRlICJwZ193YWxkdW1wLmgiCiAjaW5jbHVkZSAicm1ncmRlc2Mu aCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKIApAQCAtNDMsMTQgKzQ0LDYgQEAgc3Rh dGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCB0aW1lX3RvX3N0b3AgPSBmYWxzZTsKIAogc3RhdGlj IGNvbnN0IFJlbEZpbGVMb2NhdG9yIGVtcHR5UmVsRmlsZUxvY2F0b3IgPSB7MCwgMCwgMH07CiAK LXR5cGVkZWYgc3RydWN0IFhMb2dEdW1wUHJpdmF0ZQotewotCVRpbWVMaW5lSUQJdGltZWxpbmU7 Ci0JWExvZ1JlY1B0cglzdGFydHB0cjsKLQlYTG9nUmVjUHRyCWVuZHB0cjsKLQlib29sCQllbmRw dHJfcmVhY2hlZDsKLX0gWExvZ0R1bXBQcml2YXRlOwotCiB0eXBlZGVmIHN0cnVjdCBYTG9nRHVt cENvbmZpZwogewogCS8qIGRpc3BsYXkgb3B0aW9ucyAqLwpAQCAtMzMzLDYgKzMyNiwzMiBAQCBp ZGVudGlmeV90YXJnZXRfZGlyZWN0b3J5KGNoYXIgKmRpcmVjdG9yeSwgY2hhciAqZm5hbWUsIGlu dCAqV2FsU2VnU3opCiAJcmV0dXJuIE5VTEw7CQkJCS8qIG5vdCByZWFjaGVkICovCiB9CiAKKy8q CisgKiBSZXR1cm5zIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIGJlIHJlYWQuIFJl dHVybnMgLTEgaWYgdGhlIGVuZAorICogcG9pbnQgaGFzIGFscmVhZHkgYmVlbiByZWFjaGVkLgor ICovCitzdGF0aWMgaW5saW5lIGludAorcmVxdWlyZWRfcmVhZF9sZW4oWExvZ0R1bXBQcml2YXRl ICpwcml2YXRlLCBYTG9nUmVjUHRyIHRhcmdldFBhZ2VQdHIsCisJCQkJICBpbnQgcmVxTGVuKQor eworCWludAkJCWNvdW50ID0gWExPR19CTENLU1o7CisKKwlpZiAoWExvZ1JlY1B0cklzVmFsaWQo cHJpdmF0ZS0+ZW5kcHRyKSkKKwl7CisJCWlmICh0YXJnZXRQYWdlUHRyICsgWExPR19CTENLU1og PD0gcHJpdmF0ZS0+ZW5kcHRyKQorCQkJY291bnQgPSBYTE9HX0JMQ0tTWjsKKwkJZWxzZSBpZiAo dGFyZ2V0UGFnZVB0ciArIHJlcUxlbiA8PSBwcml2YXRlLT5lbmRwdHIpCisJCQljb3VudCA9IHBy aXZhdGUtPmVuZHB0ciAtIHRhcmdldFBhZ2VQdHI7CisJCWVsc2UKKwkJeworCQkJcHJpdmF0ZS0+ ZW5kcHRyX3JlYWNoZWQgPSB0cnVlOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJu IGNvdW50OworfQorCiAvKiBwZ193YWxkdW1wJ3MgWExvZ1JlYWRlclJvdXRpbmUtPnNlZ21lbnRf b3BlbiBjYWxsYmFjayAqLwogc3RhdGljIHZvaWQKIFdBTER1bXBPcGVuU2VnbWVudChYTG9nUmVh ZGVyU3RhdGUgKnN0YXRlLCBYTG9nU2VnTm8gbmV4dFNlZ05vLApAQCAtMzkwLDIxICs0MDksMTIg QEAgV0FMRHVtcFJlYWRQYWdlKFhMb2dSZWFkZXJTdGF0ZSAqc3RhdGUsIFhMb2dSZWNQdHIgdGFy Z2V0UGFnZVB0ciwgaW50IHJlcUxlbiwKIAkJCQlYTG9nUmVjUHRyIHRhcmdldFB0ciwgY2hhciAq cmVhZEJ1ZmYpCiB7CiAJWExvZ0R1bXBQcml2YXRlICpwcml2YXRlID0gc3RhdGUtPnByaXZhdGVf ZGF0YTsKLQlpbnQJCQljb3VudCA9IFhMT0dfQkxDS1NaOworCWludAkJCWNvdW50ID0gcmVxdWly ZWRfcmVhZF9sZW4ocHJpdmF0ZSwgdGFyZ2V0UGFnZVB0ciwgcmVxTGVuKTsKIAlXQUxSZWFkRXJy b3IgZXJyaW5mbzsKIAotCWlmIChYTG9nUmVjUHRySXNWYWxpZChwcml2YXRlLT5lbmRwdHIpKQot CXsKLQkJaWYgKHRhcmdldFBhZ2VQdHIgKyBYTE9HX0JMQ0tTWiA8PSBwcml2YXRlLT5lbmRwdHIp Ci0JCQljb3VudCA9IFhMT0dfQkxDS1NaOwotCQllbHNlIGlmICh0YXJnZXRQYWdlUHRyICsgcmVx TGVuIDw9IHByaXZhdGUtPmVuZHB0cikKLQkJCWNvdW50ID0gcHJpdmF0ZS0+ZW5kcHRyIC0gdGFy Z2V0UGFnZVB0cjsKLQkJZWxzZQotCQl7Ci0JCQlwcml2YXRlLT5lbmRwdHJfcmVhY2hlZCA9IHRy dWU7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9CisJLyogQmFpbCBvdXQgaWYgdGhlIGNvdW50IHRv IGJlIHJlYWQgaXMgbm90IHZhbGlkICovCisJaWYgKGNvdW50IDwgMCkKKwkJcmV0dXJuIC0xOwog CiAJaWYgKCFXQUxSZWFkKHN0YXRlLCByZWFkQnVmZiwgdGFyZ2V0UGFnZVB0ciwgY291bnQsIHBy aXZhdGUtPnRpbWVsaW5lLAogCQkJCSAmZXJyaW5mbykpCkBAIC04MDEsNyArODExLDYgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJWExvZ1JlY1B0cglmaXJzdF9yZWNvcmQ7CiAJY2hh cgkgICAqd2FsZGlyID0gTlVMTDsKIAljaGFyCSAgICplcnJvcm1zZzsKLQlpbnQJCQlXYWxTZWdT ejsKIAogCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gewogCQl7ImJrcC1k ZXRhaWxzIiwgbm9fYXJndW1lbnQsIE5VTEwsICdiJ30sCkBAIC04NTUsNiArODY0LDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJbWVtc2V0KCZzdGF0cywgMCwgc2l6ZW9mKFhMb2dT dGF0cykpOwogCiAJcHJpdmF0ZS50aW1lbGluZSA9IDE7CisJcHJpdmF0ZS5zZWdzaXplID0gMDsK IAlwcml2YXRlLnN0YXJ0cHRyID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJcHJpdmF0ZS5lbmRwdHIg PSBJbnZhbGlkWExvZ1JlY1B0cjsKIAlwcml2YXRlLmVuZHB0cl9yZWFjaGVkID0gZmFsc2U7CkBA IC0xMTI4LDE4ICsxMTM4LDE4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCXBn X2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIHdhbGRpcik7CiAJ CX0KIAotCQl3YWxkaXIgPSBpZGVudGlmeV90YXJnZXRfZGlyZWN0b3J5KHdhbGRpciwgZm5hbWUs ICZXYWxTZWdTeik7CisJCXdhbGRpciA9IGlkZW50aWZ5X3RhcmdldF9kaXJlY3Rvcnkod2FsZGly LCBmbmFtZSwgJnByaXZhdGUuc2Vnc2l6ZSk7CiAJCWZkID0gb3Blbl9maWxlX2luX2RpcmVjdG9y eSh3YWxkaXIsIGZuYW1lKTsKIAkJaWYgKGZkIDwgMCkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg b3BlbiBmaWxlIFwiJXNcIiIsIGZuYW1lKTsKIAkJY2xvc2UoZmQpOwogCiAJCS8qIHBhcnNlIHBv c2l0aW9uIGZyb20gZmlsZSAqLwotCQlYTG9nRnJvbUZpbGVOYW1lKGZuYW1lLCAmcHJpdmF0ZS50 aW1lbGluZSwgJnNlZ25vLCBXYWxTZWdTeik7CisJCVhMb2dGcm9tRmlsZU5hbWUoZm5hbWUsICZw cml2YXRlLnRpbWVsaW5lLCAmc2Vnbm8sIHByaXZhdGUuc2Vnc2l6ZSk7CiAKIAkJaWYgKCFYTG9n UmVjUHRySXNWYWxpZChwcml2YXRlLnN0YXJ0cHRyKSkKLQkJCVhMb2dTZWdOb09mZnNldFRvUmVj UHRyKHNlZ25vLCAwLCBXYWxTZWdTeiwgcHJpdmF0ZS5zdGFydHB0cik7Ci0JCWVsc2UgaWYgKCFY TEJ5dGVJblNlZyhwcml2YXRlLnN0YXJ0cHRyLCBzZWdubywgV2FsU2VnU3opKQorCQkJWExvZ1Nl Z05vT2Zmc2V0VG9SZWNQdHIoc2Vnbm8sIDAsIHByaXZhdGUuc2Vnc2l6ZSwgcHJpdmF0ZS5zdGFy dHB0cik7CisJCWVsc2UgaWYgKCFYTEJ5dGVJblNlZyhwcml2YXRlLnN0YXJ0cHRyLCBzZWdubywg cHJpdmF0ZS5zZWdzaXplKSkKIAkJewogCQkJcGdfbG9nX2Vycm9yKCJzdGFydCBXQUwgbG9jYXRp b24gJVgvJTA4WCBpcyBub3QgaW5zaWRlIGZpbGUgXCIlc1wiIiwKIAkJCQkJCSBMU05fRk9STUFU X0FSR1MocHJpdmF0ZS5zdGFydHB0ciksCkBAIC0xMTQ5LDcgKzExNTksNyBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAogCQkvKiBubyBzZWNvbmQgZmlsZSBzcGVjaWZpZWQsIHNldCBl bmQgcG9zaXRpb24gKi8KIAkJaWYgKCEob3B0aW5kICsgMSA8IGFyZ2MpICYmICFYTG9nUmVjUHRy SXNWYWxpZChwcml2YXRlLmVuZHB0cikpCi0JCQlYTG9nU2VnTm9PZmZzZXRUb1JlY1B0cihzZWdu byArIDEsIDAsIFdhbFNlZ1N6LCBwcml2YXRlLmVuZHB0cik7CisJCQlYTG9nU2VnTm9PZmZzZXRU b1JlY1B0cihzZWdubyArIDEsIDAsIHByaXZhdGUuc2Vnc2l6ZSwgcHJpdmF0ZS5lbmRwdHIpOwog CiAJCS8qIHBhcnNlIEVORFNFRyBpZiBwYXNzZWQgKi8KIAkJaWYgKG9wdGluZCArIDEgPCBhcmdj KQpAQCAtMTE2NSwxNCArMTE3NSwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ CWNsb3NlKGZkKTsKIAogCQkJLyogcGFyc2UgcG9zaXRpb24gZnJvbSBmaWxlICovCi0JCQlYTG9n RnJvbUZpbGVOYW1lKGZuYW1lLCAmcHJpdmF0ZS50aW1lbGluZSwgJmVuZHNlZ25vLCBXYWxTZWdT eik7CisJCQlYTG9nRnJvbUZpbGVOYW1lKGZuYW1lLCAmcHJpdmF0ZS50aW1lbGluZSwgJmVuZHNl Z25vLCBwcml2YXRlLnNlZ3NpemUpOwogCiAJCQlpZiAoZW5kc2Vnbm8gPCBzZWdubykKIAkJCQlw Z19mYXRhbCgiRU5EU0VHICVzIGlzIGJlZm9yZSBTVEFSVFNFRyAlcyIsCiAJCQkJCQkgYXJndltv cHRpbmQgKyAxXSwgYXJndltvcHRpbmRdKTsKIAogCQkJaWYgKCFYTG9nUmVjUHRySXNWYWxpZChw cml2YXRlLmVuZHB0cikpCi0JCQkJWExvZ1NlZ05vT2Zmc2V0VG9SZWNQdHIoZW5kc2Vnbm8gKyAx LCAwLCBXYWxTZWdTeiwKKwkJCQlYTG9nU2VnTm9PZmZzZXRUb1JlY1B0cihlbmRzZWdubyArIDEs IDAsIHByaXZhdGUuc2Vnc2l6ZSwKIAkJCQkJCQkJCQlwcml2YXRlLmVuZHB0cik7CiAKIAkJCS8q IHNldCBzZWdubyB0byBlbmRzZWdubyBmb3IgY2hlY2sgb2YgLS1lbmQgKi8KQEAgLTExODAsOCAr MTE5MCw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAKIAotCQlpZiAoIVhM Qnl0ZUluU2VnKHByaXZhdGUuZW5kcHRyLCBzZWdubywgV2FsU2VnU3opICYmCi0JCQlwcml2YXRl LmVuZHB0ciAhPSAoc2Vnbm8gKyAxKSAqIFdhbFNlZ1N6KQorCQlpZiAoIVhMQnl0ZUluU2VnKHBy aXZhdGUuZW5kcHRyLCBzZWdubywgcHJpdmF0ZS5zZWdzaXplKSAmJgorCQkJcHJpdmF0ZS5lbmRw dHIgIT0gKHNlZ25vICsgMSkgKiBwcml2YXRlLnNlZ3NpemUpCiAJCXsKIAkJCXBnX2xvZ19lcnJv cigiZW5kIFdBTCBsb2NhdGlvbiAlWC8lMDhYIGlzIG5vdCBpbnNpZGUgZmlsZSBcIiVzXCIiLAog CQkJCQkJIExTTl9GT1JNQVRfQVJHUyhwcml2YXRlLmVuZHB0ciksCkBAIC0xMTkwLDcgKzEyMDAs NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQogCX0KIAllbHNlCi0JCXdhbGRp ciA9IGlkZW50aWZ5X3RhcmdldF9kaXJlY3Rvcnkod2FsZGlyLCBOVUxMLCAmV2FsU2VnU3opOwor CQl3YWxkaXIgPSBpZGVudGlmeV90YXJnZXRfZGlyZWN0b3J5KHdhbGRpciwgTlVMTCwgJnByaXZh dGUuc2Vnc2l6ZSk7CiAKIAkvKiB3ZSBkb24ndCBrbm93IHdoYXQgdG8gcHJpbnQgKi8KIAlpZiAo IVhMb2dSZWNQdHJJc1ZhbGlkKHByaXZhdGUuc3RhcnRwdHIpKQpAQCAtMTIwMyw3ICsxMjEzLDcg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAkvKiB3ZSBoYXZlIGV2ZXJ5dGhpbmcg d2UgbmVlZCwgc3RhcnQgcmVhZGluZyAqLwogCXhsb2dyZWFkZXJfc3RhdGUgPQotCQlYTG9nUmVh ZGVyQWxsb2NhdGUoV2FsU2VnU3osIHdhbGRpciwKKwkJWExvZ1JlYWRlckFsbG9jYXRlKHByaXZh dGUuc2Vnc2l6ZSwgd2FsZGlyLAogCQkJCQkJICAgWExfUk9VVElORSgucGFnZV9yZWFkID0gV0FM RHVtcFJlYWRQYWdlLAogCQkJCQkJCQkJICAuc2VnbWVudF9vcGVuID0gV0FMRHVtcE9wZW5TZWdt ZW50LAogCQkJCQkJCQkJICAuc2VnbWVudF9jbG9zZSA9IFdBTER1bXBDbG9zZVNlZ21lbnQpLApA QCAtMTIyNCw3ICsxMjM0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogYSBz ZWdtZW50IChlLmcuIHdlIHdlcmUgdXNlZCBpbiBmaWxlIG1vZGUpLgogCSAqLwogCWlmIChmaXJz dF9yZWNvcmQgIT0gcHJpdmF0ZS5zdGFydHB0ciAmJgotCQlYTG9nU2VnbWVudE9mZnNldChwcml2 YXRlLnN0YXJ0cHRyLCBXYWxTZWdTeikgIT0gMCkKKwkJWExvZ1NlZ21lbnRPZmZzZXQocHJpdmF0 ZS5zdGFydHB0ciwgcHJpdmF0ZS5zZWdzaXplKSAhPSAwKQogCQlwZ19sb2dfaW5mbyhuZ2V0dGV4 dCgiZmlyc3QgcmVjb3JkIGlzIGFmdGVyICVYLyUwOFgsIGF0ICVYLyUwOFgsIHNraXBwaW5nIG92 ZXIgJXUgYnl0ZSIsCiAJCQkJCQkJICJmaXJzdCByZWNvcmQgaXMgYWZ0ZXIgJVgvJTA4WCwgYXQg JVgvJTA4WCwgc2tpcHBpbmcgb3ZlciAldSBieXRlcyIsCiAJCQkJCQkJIChmaXJzdF9yZWNvcmQg LSBwcml2YXRlLnN0YXJ0cHRyKSksCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvcGdf d2FsZHVtcC5oIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dhbGR1bXAuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDEzYjA1MTUwNmYKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmluL3BnX3dhbGR1bXAvcGdfd2FsZHVtcC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX3dhbGR1bXAuaCAtIGRlY29kZSBhbmQgZGlzcGxheSBX QUwKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCQkgIHNyYy9iaW4vcGdfd2FsZHVt cC9wZ193YWxkdW1wLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX1dBTERV TVBfSAorI2RlZmluZSBQR19XQUxEVU1QX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5o IgorCisvKiBDb250YWlucyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGRyaXZlIFdBTCBk ZWNvZGluZyAqLwordHlwZWRlZiBzdHJ1Y3QgWExvZ0R1bXBQcml2YXRlCit7CisJVGltZUxpbmVJ RAl0aW1lbGluZTsKKwlpbnQJCQlzZWdzaXplOworCVhMb2dSZWNQdHIJc3RhcnRwdHI7CisJWExv Z1JlY1B0cgllbmRwdHI7CisJYm9vbAkJZW5kcHRyX3JlYWNoZWQ7Cit9IFhMb2dEdW1wUHJpdmF0 ZTsKKworI2VuZGlmCQkJCQkJCS8qIFBHX1dBTERVTVBfSCAqLwotLSAKMi40Ny4xCgo= --0000000000006f20d1064d4b0036 Content-Type: application/x-patch; name="v18-0003-pg_waldump-Add-support-for-reading-WAL-from-tar-.patch" Content-Disposition: attachment; filename="v18-0003-pg_waldump-Add-support-for-reading-WAL-from-tar-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmvypjdh2 RnJvbSA5NDgxNmQ3NzY3ZTE4NjkxZDI1ODIwNDkwZTFhMDc5YmE5MDgxM2NkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbXVsIFN1bCA8c3VsYW11bEBnbWFpbC5jb20+CkRhdGU6IFdl ZCwgMTggRmViIDIwMjYgMTE6MDc6NTcgKzA1MzAKU3ViamVjdDogW1BBVENIIHYxOCAzLzRdIHBn X3dhbGR1bXA6IEFkZCBzdXBwb3J0IGZvciByZWFkaW5nIFdBTCBmcm9tIHRhcgogYXJjaGl2ZXMK CnBnX3dhbGR1bXAgY2FuIG5vdyBhY2NlcHQgdGhlIHBhdGggdG8gYSB0YXIgYXJjaGl2ZSAob3B0 aW9uYWxseQpjb21wcmVzc2VkIHdpdGggZ3ppcCwgbHo0LCBvciB6c3RkKSBjb250YWluaW5nIFdB TCBmaWxlcyBhbmQgZGVjb2RlCnRoZW0uICBUaGlzIHdhcyBhZGRlZCBwcmltYXJpbHkgZm9yIHBn X3ZlcmlmeWJhY2t1cCwgd2hpY2ggcHJldmlvdXNseQpoYWQgdG8gc2tpcCBXQUwgcGFyc2luZyBm b3IgdGFyLWZvcm1hdCBiYWNrdXBzLgoKVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGV4aXN0 aW5nIGFyY2hpdmUgc3RyZWFtZXIgaW5mcmFzdHJ1Y3R1cmUKd2l0aCBhIGhhc2ggdGFibGUgdG8g dHJhY2sgV0FMIHNlZ21lbnRzIHJlYWQgZnJvbSB0aGUgYXJjaGl2ZS4gIElmIFdBTApmaWxlcyB3 aXRoaW4gdGhlIGFyY2hpdmUgYXJlIG5vdCBpbiBzZXF1ZW50aWFsIG9yZGVyLCBvdXQtb2Ytb3Jk ZXIKc2VnbWVudHMgYXJlIHdyaXR0ZW4gdG8gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IChjcmVhdGVk IHZpYSBta2R0ZW1wIHVuZGVyCiRUTVBESVIgb3IgdGhlIGFyY2hpdmUncyBkaXJlY3RvcnkpIGFu ZCByZWFkIGJhY2sgd2hlbiBuZWVkZWQuICBBbgphdGV4aXQgY2FsbGJhY2sgZW5zdXJlcyB0aGUg dGVtcG9yYXJ5IGRpcmVjdG9yeSBpcyBjbGVhbmVkIHVwLgoKVGhlIC0tZm9sbG93IG9wdGlvbiBp cyBub3Qgc3VwcG9ydGVkIHdoZW4gcmVhZGluZyBmcm9tIGEgdGFyIGFyY2hpdmUuCgpBdXRob3I6 IEFtdWwgU3VsIDxzdWxhbXVsQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFJvYmVydCBIYWFzIDxy b2JlcnRtaGFhc0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndh cnRha0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogQW5kcmV3IER1bnN0YW4gPGFuZHJl d0BkdW5zbGFuZS5uZXQ+CmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FBSl9iOTRi cWRXTjNoMkotUHp6elEyTnBid2N0NVpRSGdnbl9Rb1lHaEMycm4tPVdRQG1haWwuZ21haWwuY29t Ci0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ193YWxkdW1wLnNnbWwgICAgIHwgIDIzICstCiBzcmMv YmluL3BnX3dhbGR1bXAvTWFrZWZpbGUgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iaW4vcGdfd2Fs ZHVtcC9hcmNoaXZlX3dhbGR1bXAuYyB8IDgyMyArKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9iaW4vcGdfd2FsZHVtcC9tZXNvbi5idWlsZCAgICAgICB8ICAgNCArLQogc3JjL2Jpbi9w Z193YWxkdW1wL3BnX3dhbGR1bXAuYyAgICAgIHwgMjg2ICsrKysrKysrLS0KIHNyYy9iaW4vcGdf d2FsZHVtcC9wZ193YWxkdW1wLmggICAgICB8ICA0OCArKwogc3JjL2Jpbi9wZ193YWxkdW1wL3Qv MDAxX2Jhc2ljLnBsICAgIHwgMjQyICsrKysrKy0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgfCAgIDQgKwogOCBmaWxlcyBjaGFuZ2VkLCAxMzExIGluc2VydGlvbnMoKyks IDEyNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3dhbGR1bXAv YXJjaGl2ZV93YWxkdW1wLmMKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3dhbGR1 bXAuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfd2FsZHVtcC5zZ21sCmluZGV4IGQxNzE1ZmY1 MTI0Li45YmJiNGJkNTc3MiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ193YWxkdW1w LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ193YWxkdW1wLnNnbWwKQEAgLTE0MSwxMyAr MTQxLDIxIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPHRlcm0+PG9wdGlvbj4t LXBhdGg9PHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAg ICAgIDxsaXN0aXRlbT4KICAgICAgICA8cGFyYT4KLSAgICAgICAgU3BlY2lmaWVzIGEgZGlyZWN0 b3J5IHRvIHNlYXJjaCBmb3IgV0FMIHNlZ21lbnQgZmlsZXMgb3IgYQotICAgICAgICBkaXJlY3Rv cnkgd2l0aCBhIDxsaXRlcmFsPnBnX3dhbDwvbGl0ZXJhbD4gc3ViZGlyZWN0b3J5IHRoYXQKKyAg ICAgICAgU3BlY2lmaWVzIGEgdGFyIGFyY2hpdmUgb3IgYSBkaXJlY3RvcnkgdG8gc2VhcmNoIGZv ciBXQUwgc2VnbWVudCBmaWxlcworICAgICAgICBvciBhIGRpcmVjdG9yeSB3aXRoIGEgPGxpdGVy YWw+cGdfd2FsPC9saXRlcmFsPiBzdWJkaXJlY3RvcnkgdGhhdAogICAgICAgICBjb250YWlucyBz dWNoIGZpbGVzLiAgVGhlIGRlZmF1bHQgaXMgdG8gc2VhcmNoIGluIHRoZSBjdXJyZW50CiAgICAg ICAgIGRpcmVjdG9yeSwgdGhlIDxsaXRlcmFsPnBnX3dhbDwvbGl0ZXJhbD4gc3ViZGlyZWN0b3J5 IG9mIHRoZQogICAgICAgICBjdXJyZW50IGRpcmVjdG9yeSwgYW5kIHRoZSA8bGl0ZXJhbD5wZ193 YWw8L2xpdGVyYWw+IHN1YmRpcmVjdG9yeQogICAgICAgICBvZiA8ZW52YXI+UEdEQVRBPC9lbnZh cj4uCiAgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBJZiBhIHRhciBhcmNo aXZlIGlzIHByb3ZpZGVkIGFuZCBpdHMgV0FMIHNlZ21lbnQgZmlsZXMgYXJlIG5vdCBpbgorICAg ICAgICBzZXF1ZW50aWFsIG9yZGVyLCB0aG9zZSBmaWxlcyB3aWxsIGJlIHdyaXR0ZW4gdG8gYSB0 ZW1wb3JhcnkgZGlyZWN0b3J5CisgICAgICAgIG5hbWVkIHN0YXJ0aW5nIHdpdGggPGZpbGVuYW1l PndhbGR1bXBfdG1wPC9maWxlbmFtZT4uIFRoaXMgZGlyZWN0b3J5IHdpbGwgYmUKKyAgICAgICAg Y3JlYXRlZCBpbnNpZGUgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlIDxlbnZhcj5UTVBE SVI8L2VudmFyPgorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBpdCBpcyBzZXQ7IG90 aGVyd2lzZSwgaXQgd2lsbCBiZSBjcmVhdGVkIHdpdGhpbgorICAgICAgICB0aGUgc2FtZSBkaXJl Y3RvcnkgYXMgdGhlIHRhciBhcmNoaXZlLgorICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0 ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCkBAIC0zODMsNiArMzkxLDE3IEBAIFBvc3RncmVT UUwgZG9jdW1lbnRhdGlvbgogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxlbnZhcj5UTVBESVI8 L2VudmFyPjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgRGlyZWN0 b3J5IGluIHdoaWNoIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZXMgd2hlbiByZWFkaW5nIFdBTCBm cm9tIGEKKyAgICAgIHRhciBhcmNoaXZlIHdpdGggb3V0LW9mLW9yZGVyIHNlZ21lbnQgZmlsZXMu IElmIG5vdCBzZXQsIHRoZSB0ZW1wb3JhcnkKKyAgICAgIGRpcmVjdG9yeSBpcyBjcmVhdGVkIHdp dGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIHRhciBhcmNoaXZlLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgogICA8L3ZhcmlhYmxlbGlzdD4K ICA8L3JlZnNlY3QxPgogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvTWFrZWZpbGUg Yi9zcmMvYmluL3BnX3dhbGR1bXAvTWFrZWZpbGUKaW5kZXggNGMxZWU2NDk1MDEuLmFhYmI4NzU2 NmEyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jp bi9wZ193YWxkdW1wL01ha2VmaWxlCkBAIC0zLDYgKzMsOSBAQAogUEdGSUxFREVTQyA9ICJwZ193 YWxkdW1wIC0gZGVjb2RlIGFuZCBkaXNwbGF5IFdBTCIKIFBHQVBQSUNPTj13aW4zMgogCisjIG1h a2UgdGhlc2UgYXZhaWxhYmxlIHRvIFRBUCB0ZXN0IHNjcmlwdHMKK2V4cG9ydCBUQVIKKwogc3Vi ZGlyID0gc3JjL2Jpbi9wZ193YWxkdW1wCiB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgogaW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbApAQCAtMTAsMTMgKzEzLDE1IEBA IGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIE9CSlMgPSBcCiAJ JChSTUdSREVTQ09CSlMpIFwKIAkkKFdJTjMyUkVTKSBcCisJYXJjaGl2ZV93YWxkdW1wLm8gXAog CWNvbXBhdC5vIFwKIAlwZ193YWxkdW1wLm8gXAogCXJtZ3JkZXNjLm8gXAogCXhsb2dyZWFkZXIu byBcCiAJeGxvZ3N0YXRzLm8KIAotb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLURGUk9OVEVORCAkKENQ UEZMQUdTKQorb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLURGUk9OVEVORCAtSSQobGlicHFfc3JjZGly KSAkKENQUEZMQUdTKQorTERGTEFHU19JTlRFUk5BTCArPSAtTCQodG9wX2J1aWxkZGlyKS9zcmMv ZmVfdXRpbHMgLWxwZ2ZldXRpbHMKIAogUk1HUkRFU0NTT1VSQ0VTID0gJChzb3J0ICQobm90ZGly ICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvKmRl c2MqLmMpKSkKIFJNR1JERVNDT0JKUyA9ICQocGF0c3Vic3QgJS5jLCUubywkKFJNR1JERVNDU09V UkNFUykpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvYXJjaGl2ZV93YWxkdW1wLmMg Yi9zcmMvYmluL3BnX3dhbGR1bXAvYXJjaGl2ZV93YWxkdW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM5M2UwMmVjZThiCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2Jpbi9wZ193YWxkdW1wL2FyY2hpdmVfd2FsZHVtcC5jCkBAIC0wLDAgKzEsODIzIEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBhcmNoaXZlX3dhbGR1bXAuYworICoJCUEgZ2VuZXJpYyBm YWNpbGl0eSBmb3IgcmVhZGluZyBXQUwgZGF0YSBmcm9tIHRhciBhcmNoaXZlcyB2aWEgYXJjaGl2 ZQorICoJCXN0cmVhbWVyLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAyNiwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgor ICoJCXNyYy9iaW4vcGdfd2FsZHVtcC9hcmNoaXZlX3dhbGR1bXAuYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSA8dW5p c3RkLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImNv bW1vbi9maWxlX3Blcm0uaCIKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAi Y29tbW9uL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zaW1wbGVfbGlzdC5oIgorI2lu Y2x1ZGUgInBnX3dhbGR1bXAuaCIKKworLyoKKyAqIEhvdyBtYW55IGJ5dGVzIHNob3VsZCB3ZSB0 cnkgdG8gcmVhZCBmcm9tIGEgZmlsZSBhdCBvbmNlPworICovCisjZGVmaW5lIFJFQURfQ0hVTktf U0laRQkJCQkoMTI4ICogMTAyNCkKKworLyogVGVtcG9yYXJ5IGV4cG9ydGVkIFdBTCBmaWxlIGRp cmVjdG9yeSAqLworY2hhcgkgICAqVG1wV2FsU2VnRGlyID0gTlVMTDsKKworLyoKKyAqIENoZWNr IGlmIHRoZSBzdGFydCBzZWdtZW50IG51bWJlciBpcyB6ZXJvOyB0aGlzIGluZGljYXRlcyBhIHJl cXVlc3QgdG8gcmVhZAorICogYW55IFdBTCBmaWxlLgorICovCisjZGVmaW5lIFJFQURfQU5ZX1dB TChwcml2YXRlSW5mbykJKChwcml2YXRlSW5mbyktPnN0YXJ0X3NlZ25vID09IDApCisKKy8qCisg KiBIYXNoIGVudHJ5IHJlcHJlc2VudGluZyBhIFdBTCBzZWdtZW50IHJldHJpZXZlZCBmcm9tIHRo ZSBhcmNoaXZlLgorICoKKyAqIFdoaWxlIFdBTCBzZWdtZW50cyBhcmUgdHlwaWNhbGx5IHJlYWQg c2VxdWVudGlhbGx5LCBpbmRpdmlkdWFsIGVudHJpZXMKKyAqIG1haW50YWluIHRoZWlyIG93biBi dWZmZXJzIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6CisgKgorICogMS4gQm91bmRhcnkgSGFu ZGxpbmc6IFRoZSBhcmNoaXZlIHN0cmVhbWVyIHByb3ZpZGVzIGEgY29udGludW91cyBieXRlCisg KiBzdHJlYW0uIEEgc2luZ2xlIHN0cmVhbWluZyBjaHVuayBtYXkgY29udGFpbiB0aGUgZW5kIG9m IG9uZSBXQUwgc2VnbWVudAorICogYW5kIHRoZSBzdGFydCBvZiB0aGUgbmV4dC4gU2VwYXJhdGUg YnVmZmVycyBhbGxvdyB1cyB0byBlYXNpbHkKKyAqIHBhcnRpdGlvbiBhbmQgdHJhY2sgdGhlc2Ug Ynl0ZXMgYnkgdGhlaXIgcmVzcGVjdGl2ZSBzZWdtZW50cy4KKyAqCisgKiAyLiBPdXQtb2YtT3Jk ZXIgU3VwcG9ydDogRGVkaWNhdGVkIGJ1ZmZlcnMgc2ltcGxpZnkgbG9naWMgaWYgc2VnbWVudHMK KyAqIGFyZSBldmVyIGFyY2hpdmVkIG9yIHJldHJpZXZlZCBvdXQgb2Ygc2VxdWVuY2UuCisgKgor ICogVG8gbWluaW1pemUgdGhlIG1lbW9yeSBmb290cHJpbnQsIGVudHJpZXMgYW5kIHRoZWlyIGFz c29jaWF0ZWQgYnVmZmVycyBhcmUKKyAqIGZyZWVkIGltbWVkaWF0ZWx5IG9uY2UgY29uc3VtZWQu IFNpbmNlIHBnX3dhbGR1bXAgZG9lcyBub3QgcmVxdWVzdCB0aGUgc2FtZQorICogYnl0ZXMgdHdp Y2UsIGEgc2VnbWVudCBpcyBkaXNjYXJkZWQgYXMgc29vbiBhcyBwZ193YWxkdW1wIG1vdmVzIHBh c3QgaXQuCisgKi8KK3R5cGVkZWYgc3RydWN0IEFyY2hpdmVkV0FMRmlsZQoreworCXVpbnQzMgkJ c3RhdHVzOwkJCS8qIGhhc2ggc3RhdHVzICovCisJY29uc3QgY2hhciAqZm5hbWU7CQkJLyogaGFz aCBrZXk6IFdBTCBzZWdtZW50IG5hbWUgKi8KKworCVN0cmluZ0luZm8JYnVmOwkJCS8qIGhvbGRz IFdBTCBieXRlcyByZWFkIGZyb20gYXJjaGl2ZSAqLworCWJvb2wJCXNwaWxsZWQ7CQkvKiB0cnVl IGlmIHRoZSBXQUwgZGF0YSB3YXMgc3BpbGxlZCB0byBhCisJCQkJCQkJCSAqIHRlbXBvcmFyeSBm aWxlICovCisKKwlpbnQJCQlyZWFkX2xlbjsJCS8qIHRvdGFsIGJ5dGVzIG9mIGEgV0FMIHJlYWQg ZnJvbSBhcmNoaXZlICovCit9IEFyY2hpdmVkV0FMRmlsZTsKKworc3RhdGljIHVpbnQzMiBoYXNo X3N0cmluZ19wb2ludGVyKGNvbnN0IGNoYXIgKnMpOworI2RlZmluZSBTSF9QUkVGSVgJCQkJQXJj aGl2ZWRXQUwKKyNkZWZpbmUgU0hfRUxFTUVOVF9UWVBFCQkJQXJjaGl2ZWRXQUxGaWxlCisjZGVm aW5lIFNIX0tFWV9UWVBFCQkJCWNvbnN0IGNoYXIgKgorI2RlZmluZSBTSF9LRVkJCQkJCWZuYW1l CisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpCWhhc2hfc3RyaW5nX3BvaW50ZXIoa2V5KQor I2RlZmluZSBTSF9FUVVBTCh0YiwgYSwgYikJCShzdHJjbXAoYSwgYikgPT0gMCkKKyNkZWZpbmUg U0hfU0NPUEUJCQkJc3RhdGljIGlubGluZQorI2RlZmluZSBTSF9SQVdfQUxMT0NBVE9SCQlwZ19t YWxsb2MwCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNkZWZpbmUgU0hfREVGSU5FCisjaW5jbHVkZSAi bGliL3NpbXBsZWhhc2guaCIKKwordHlwZWRlZiBzdHJ1Y3QgYXN0cmVhbWVyX3dhbGR1bXAKK3sK Kwlhc3RyZWFtZXIJYmFzZTsKKwlYTG9nRHVtcFByaXZhdGUgKnByaXZhdGVJbmZvOworfSBhc3Ry ZWFtZXJfd2FsZHVtcDsKKworc3RhdGljIEFyY2hpdmVkV0FMRmlsZSAqZ2V0X2FyY2hpdmVfd2Fs X2VudHJ5KGNvbnN0IGNoYXIgKmZuYW1lLAorCQkJCQkJCQkJCQkgIFhMb2dEdW1wUHJpdmF0ZSAq cHJpdmF0ZUluZm8sCisJCQkJCQkJCQkJCSAgaW50IFdhbFNlZ1N6KTsKK3N0YXRpYyBpbnQJcmVh ZF9hcmNoaXZlX2ZpbGUoWExvZ0R1bXBQcml2YXRlICpwcml2YXRlSW5mbywgU2l6ZSBjb3VudCk7 CitzdGF0aWMgdm9pZCBzZXR1cF90bXB3YWxfZGlyKGNvbnN0IGNoYXIgKndhbGRpcik7CitzdGF0 aWMgdm9pZCBjbGVhbnVwX3RtcHdhbF9kaXJfYXRleGl0KHZvaWQpOworCitzdGF0aWMgRklMRSAq cHJlcGFyZV90bXBfd3JpdGUoY29uc3QgY2hhciAqZm5hbWUpOworc3RhdGljIHZvaWQgcGVyZm9y bV90bXBfd3JpdGUoY29uc3QgY2hhciAqZm5hbWUsIFN0cmluZ0luZm8gYnVmLCBGSUxFICpmaWxl KTsKKworc3RhdGljIGFzdHJlYW1lciAqYXN0cmVhbWVyX3dhbGR1bXBfbmV3KFhMb2dEdW1wUHJp dmF0ZSAqcHJpdmF0ZUluZm8pOworc3RhdGljIHZvaWQgYXN0cmVhbWVyX3dhbGR1bXBfY29udGVu dChhc3RyZWFtZXIgKnN0cmVhbWVyLAorCQkJCQkJCQkJICBhc3RyZWFtZXJfbWVtYmVyICptZW1i ZXIsCisJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4sCisJCQkJCQkJCQkgIGFz dHJlYW1lcl9hcmNoaXZlX2NvbnRleHQgY29udGV4dCk7CitzdGF0aWMgdm9pZCBhc3RyZWFtZXJf d2FsZHVtcF9maW5hbGl6ZShhc3RyZWFtZXIgKnN0cmVhbWVyKTsKK3N0YXRpYyB2b2lkIGFzdHJl YW1lcl93YWxkdW1wX2ZyZWUoYXN0cmVhbWVyICpzdHJlYW1lcik7CisKK3N0YXRpYyBib29sIG1l bWJlcl9pc193YWxfZmlsZShhc3RyZWFtZXJfd2FsZHVtcCAqbXlzdHJlYW1lciwKKwkJCQkJCQkg ICBhc3RyZWFtZXJfbWVtYmVyICptZW1iZXIsCisJCQkJCQkJICAgY2hhciAqKmZuYW1lKTsKKwor c3RhdGljIGNvbnN0IGFzdHJlYW1lcl9vcHMgYXN0cmVhbWVyX3dhbGR1bXBfb3BzID0geworCS5j b250ZW50ID0gYXN0cmVhbWVyX3dhbGR1bXBfY29udGVudCwKKwkuZmluYWxpemUgPSBhc3RyZWFt ZXJfd2FsZHVtcF9maW5hbGl6ZSwKKwkuZnJlZSA9IGFzdHJlYW1lcl93YWxkdW1wX2ZyZWUKK307 CisKKy8qCisgKiBJbml0aWFsaXplcyB0aGUgdGFyIGFyY2hpdmUgcmVhZGVyLCBjcmVhdGVzIGEg aGFzaCB0YWJsZSBmb3IgV0FMIGVudHJpZXMsCisgKiBjaGVja3MgZm9yIGV4aXN0aW5nIHZhbGlk IFdBTCBzZWdtZW50cyBpbiB0aGUgYXJjaGl2ZSBmaWxlIGFuZCByZXRyaWV2ZXMgdGhlCisgKiBz ZWdtZW50IHNpemUsIGFuZCBzZXRzIHVwIGZpbHRlcnMgZm9yIHJlbGV2YW50IGVudHJpZXMuIEl0 IGFsc28gY29uZmlndXJlcyBhCisgKiB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBvdXQtb2Ytb3Jk ZXIgV0FMIGRhdGEgYW5kIHJlZ2lzdGVycyBhbiBleGl0IGNhbGxiYWNrCisgKiB0byBjbGVhbiB1 cCB0ZW1wb3JhcnkgZmlsZXMuCisgKi8KK3ZvaWQKK2luaXRfYXJjaGl2ZV9yZWFkZXIoWExvZ0R1 bXBQcml2YXRlICpwcml2YXRlSW5mbywgY29uc3QgY2hhciAqd2FsZGlyLAorCQkJCQlpbnQgKldh bFNlZ1N6LCBwZ19jb21wcmVzc19hbGdvcml0aG0gY29tcHJlc3Npb24pCit7CisJaW50CQkJZmQ7 CisJYXN0cmVhbWVyICAqc3RyZWFtZXI7CisJQXJjaGl2ZWRXQUxGaWxlICplbnRyeSA9IE5VTEw7 CisJWExvZ0xvbmdQYWdlSGVhZGVyIGxvbmdoZHI7CisJWExvZ1NlZ05vCXNlZ25vOworCVRpbWVM aW5lSUQJdGltZWxpbmU7CisKKwkvKiBPcGVuIHRhciBhcmNoaXZlIGFuZCBzdG9yZSBpdHMgZmls ZSBkZXNjcmlwdG9yICovCisJZmQgPSBvcGVuX2ZpbGVfaW5fZGlyZWN0b3J5KHdhbGRpciwgcHJp dmF0ZUluZm8tPmFyY2hpdmVfbmFtZSk7CisKKwlpZiAoZmQgPCAwKQorCQlwZ19mYXRhbCgiY291 bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIiLCBwcml2YXRlSW5mby0+YXJjaGl2ZV9uYW1lKTsKKwor CXByaXZhdGVJbmZvLT5hcmNoaXZlX2ZkID0gZmQ7CisKKwlzdHJlYW1lciA9IGFzdHJlYW1lcl93 YWxkdW1wX25ldyhwcml2YXRlSW5mbyk7CisKKwkvKiBXZSBtdXN0IGZpcnN0IHBhcnNlIHRoZSB0 YXIgYXJjaGl2ZS4gKi8KKwlzdHJlYW1lciA9IGFzdHJlYW1lcl90YXJfcGFyc2VyX25ldyhzdHJl YW1lcik7CisKKwkvKiBJZiB0aGUgYXJjaGl2ZSBpcyBjb21wcmVzc2VkLCBkZWNvbXByZXNzIGJl Zm9yZSBwYXJzaW5nLiAqLworCWlmIChjb21wcmVzc2lvbiA9PSBQR19DT01QUkVTU0lPTl9HWklQ KQorCQlzdHJlYW1lciA9IGFzdHJlYW1lcl9nemlwX2RlY29tcHJlc3Nvcl9uZXcoc3RyZWFtZXIp OworCWVsc2UgaWYgKGNvbXByZXNzaW9uID09IFBHX0NPTVBSRVNTSU9OX0xaNCkKKwkJc3RyZWFt ZXIgPSBhc3RyZWFtZXJfbHo0X2RlY29tcHJlc3Nvcl9uZXcoc3RyZWFtZXIpOworCWVsc2UgaWYg KGNvbXByZXNzaW9uID09IFBHX0NPTVBSRVNTSU9OX1pTVEQpCisJCXN0cmVhbWVyID0gYXN0cmVh bWVyX3pzdGRfZGVjb21wcmVzc29yX25ldyhzdHJlYW1lcik7CisKKwlwcml2YXRlSW5mby0+YXJj aGl2ZV9zdHJlYW1lciA9IHN0cmVhbWVyOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhIGJ1ZmZlciBm b3IgcmVhZGluZyB0aGUgYXJjaGl2ZSBmaWxlIHRvIGZhY2lsaXRhdGUgY29udGVudAorCSAqIGRl Y29kaW5nOyByZWFkIHJlcXVlc3RzIG11c3Qgbm90IGV4Y2VlZCB0aGUgYWxsb2NhdGVkIGJ1ZmZl ciBzaXplLgorCSAqLworCXByaXZhdGVJbmZvLT5hcmNoaXZlX3JlYWRfYnVmID0gcGdfbWFsbG9j KFJFQURfQ0hVTktfU0laRSk7CisJcHJpdmF0ZUluZm8tPmFyY2hpdmVfcmVhZF9idWZfc2l6ZSA9 IFJFQURfQ0hVTktfU0laRTsKKworCS8qCisJICogSGFzaCB0YWJsZSBzdG9yaW5nIFdBTCBlbnRy aWVzIHJlYWQgZnJvbSB0aGUgYXJjaGl2ZSB3aXRoIGFuIGFyYml0cmFyeQorCSAqIGluaXRpYWwg c2l6ZQorCSAqLworCXByaXZhdGVJbmZvLT5hcmNoaXZlX3dhbF9odGFiID0gQXJjaGl2ZWRXQUxf Y3JlYXRlKDgsIE5VTEwpOworCisJLyoKKwkgKiBWZXJpZnkgdGhhdCB0aGUgYXJjaGl2ZSBjb250 YWlucyB2YWxpZCBXQUwgZmlsZXMgYW5kIGZldGNoIFdBTCBzZWdtZW50CisJICogc2l6ZQorCSAq LworCXdoaWxlIChlbnRyeSA9PSBOVUxMIHx8IGVudHJ5LT5idWYtPmxlbiA8IFhMT0dfQkxDS1Na KQorCXsKKwkJaWYgKHJlYWRfYXJjaGl2ZV9maWxlKHByaXZhdGVJbmZvLCBYTE9HX0JMQ0tTWikg PT0gMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgZmluZCBXQUwgaW4gYXJjaGl2ZSBcIiVzXCIi LAorCQkJCQkgcHJpdmF0ZUluZm8tPmFyY2hpdmVfbmFtZSk7CisKKwkJZW50cnkgPSBwcml2YXRl SW5mby0+Y3VyX2ZpbGU7CisJfQorCisJLyogU2V0IFdhbFNlZ1N6IGlmIFdBTCBkYXRhIGlzIHN1 Y2Nlc3NmdWxseSByZWFkICovCisJbG9uZ2hkciA9IChYTG9nTG9uZ1BhZ2VIZWFkZXIpIGVudHJ5 LT5idWYtPmRhdGE7CisKKwlpZiAoIUlzVmFsaWRXYWxTZWdTaXplKGxvbmdoZHItPnhscF9zZWdf c2l6ZSkpCisJeworCQlwZ19sb2dfZXJyb3IobmdldHRleHQoImludmFsaWQgV0FMIHNlZ21lbnQg c2l6ZSBpbiBXQUwgZmlsZSBmcm9tIGFyY2hpdmUgXCIlc1wiICglZCBieXRlKSIsCisJCQkJCQkJ ICAiaW52YWxpZCBXQUwgc2VnbWVudCBzaXplIGluIFdBTCBmaWxlIGZyb20gYXJjaGl2ZSBcIiVz XCIgKCVkIGJ5dGVzKSIsCisJCQkJCQkJICBsb25naGRyLT54bHBfc2VnX3NpemUpLAorCQkJCQkg cHJpdmF0ZUluZm8tPmFyY2hpdmVfbmFtZSwgbG9uZ2hkci0+eGxwX3NlZ19zaXplKTsKKwkJcGdf bG9nX2Vycm9yX2RldGFpbCgiVGhlIFdBTCBzZWdtZW50IHNpemUgbXVzdCBiZSBhIHBvd2VyIG9m IHR3byBiZXR3ZWVuIDEgTUIgYW5kIDEgR0IuIik7CisJCWV4aXQoMSk7CisJfQorCisJKldhbFNl Z1N6ID0gbG9uZ2hkci0+eGxwX3NlZ19zaXplOworCisJLyoKKwkgKiBXaXRoIHRoZSBXQUwgc2Vn bWVudCBzaXplIGF2YWlsYWJsZSwgd2UgY2FuIG5vdyBpbml0aWFsaXplIHRoZQorCSAqIGRlcGVu ZGVudCBzdGFydCBhbmQgZW5kIHNlZ21lbnQgbnVtYmVycy4KKwkgKi8KKwlBc3NlcnQoIVhMb2dS ZWNQdHJJc0ludmFsaWQocHJpdmF0ZUluZm8tPnN0YXJ0cHRyKSk7CisJWExCeXRlVG9TZWcocHJp dmF0ZUluZm8tPnN0YXJ0cHRyLCBwcml2YXRlSW5mby0+c3RhcnRfc2Vnbm8sICpXYWxTZWdTeik7 CisKKwlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQocHJpdmF0ZUluZm8tPmVuZHB0cikpCisJCVhM Qnl0ZVRvU2VnKHByaXZhdGVJbmZvLT5lbmRwdHIsIHByaXZhdGVJbmZvLT5lbmRfc2Vnbm8sICpX YWxTZWdTeik7CisKKwkvKgorCSAqIFRoaXMgV0FMIHJlY29yZCB3YXMgZmV0Y2hlZCBiZWZvcmUg dGhlIGZpbHRlcmluZyBwYXJhbWV0ZXJzCisJICogKHN0YXJ0X3NlZ25vIGFuZCBlbmRfc2Vnbm8p IHdlcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFBlcmZvcm0gdGhlCisJICogcmVsZXZhbmNlIGNoZWNr IGFnYWluc3QgdGhlIHVzZXItcHJvdmlkZWQgcmFuZ2Ugbm93OyBpZiB0aGUgV0FMIGZhbGxzCisJ ICogb3V0c2lkZSB0aGlzIHJhbmdlLCByZW1vdmUgaXQgZnJvbSB0aGUgaGFzaCB0YWJsZS4gU3Vi c2VxdWVudCBXQUwgd2lsbAorCSAqIGJlIGZpbHRlcmVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGFy Y2hpdmVkIHN0cmVhbWVyIHVzaW5nIHRoZSB1cGRhdGVkCisJICogc3RhcnRfc2Vnbm8gYW5kIGVu ZF9zZWdubyB2YWx1ZXMuCisJICovCisJWExvZ0Zyb21GaWxlTmFtZShlbnRyeS0+Zm5hbWUsICZ0 aW1lbGluZSwgJnNlZ25vLCBwcml2YXRlSW5mby0+c2Vnc2l6ZSk7CisJaWYgKHByaXZhdGVJbmZv LT50aW1lbGluZSAhPSB0aW1lbGluZSB8fAorCQlwcml2YXRlSW5mby0+c3RhcnRfc2Vnbm8gPiBz ZWdubyB8fAorCQlwcml2YXRlSW5mby0+ZW5kX3NlZ25vIDwgc2Vnbm8pCisJCWZyZWVfYXJjaGl2 ZV93YWxfZW50cnkoZW50cnktPmZuYW1lLCBwcml2YXRlSW5mbyk7CisKKwkvKgorCSAqIFNldHVw IHRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gc3RvcmUgV0FMIHNlZ21lbnRzIGFuZCBzZXQgdXAgYW4g ZXhpdAorCSAqIGNhbGxiYWNrIHRvIHJlbW92ZSBpdCB1cG9uIGNvbXBsZXRpb24uCisJICovCisJ c2V0dXBfdG1wd2FsX2Rpcih3YWxkaXIpOworCWF0ZXhpdChjbGVhbnVwX3RtcHdhbF9kaXJfYXRl eGl0KTsKK30KKworLyoKKyAqIFJlbGVhc2UgdGhlIGFyY2hpdmUgc3RyZWFtZXIgY2hhaW4gYW5k IGNsb3NlIHRoZSBhcmNoaXZlIGZpbGUuCisgKi8KK3ZvaWQKK2ZyZWVfYXJjaGl2ZV9yZWFkZXIo WExvZ0R1bXBQcml2YXRlICpwcml2YXRlSW5mbykKK3sKKwkvKgorCSAqIE5COiBOb3JtYWxseSwg YXN0cmVhbWVyX2ZpbmFsaXplKCkgaXMgY2FsbGVkIGJlZm9yZSBhc3RyZWFtZXJfZnJlZSgpIHRv CisJICogZmx1c2ggYW55IHJlbWFpbmluZyBidWZmZXJlZCBkYXRhIG9yIHRvIGVuc3VyZSB0aGUg ZW5kIG9mIHRoZSB0YXIKKwkgKiBhcmNoaXZlIGlzIHJlYWNoZWQuIEhvd2V2ZXIsIHdoZW4gZGVj b2RpbmcgYSBXQUwgZmlsZSwgb25jZSB3ZSBoaXQgdGhlCisJICogZW5kIExTTiwgYW55IHJlbWFp bmluZyBXQUwgZGF0YSBpbiB0aGUgYnVmZmVyIG9yIHRoZSB0YXIgYXJjaGl2ZSdzCisJICogdW5y ZWFjaGVkIGVuZCBjYW4gYmUgc2FmZWx5IGlnbm9yZWQuCisJICovCisJYXN0cmVhbWVyX2ZyZWUo cHJpdmF0ZUluZm8tPmFyY2hpdmVfc3RyZWFtZXIpOworCisJLyogRnJlZSBhbnkgcmVtYWluaW5n IGhhc2ggdGFibGUgZW50cmllcyBhbmQgdGhlaXIgYnVmZmVycy4gKi8KKwlpZiAocHJpdmF0ZUlu Zm8tPmFyY2hpdmVfd2FsX2h0YWIgIT0gTlVMTCkKKwl7CisJCUFyY2hpdmVkV0FMX2l0ZXJhdG9y IGl0ZXI7CisJCUFyY2hpdmVkV0FMRmlsZSAqZW50cnk7CisKKwkJQXJjaGl2ZWRXQUxfc3RhcnRf aXRlcmF0ZShwcml2YXRlSW5mby0+YXJjaGl2ZV93YWxfaHRhYiwgJml0ZXIpOworCQl3aGlsZSAo KGVudHJ5ID0gQXJjaGl2ZWRXQUxfaXRlcmF0ZShwcml2YXRlSW5mby0+YXJjaGl2ZV93YWxfaHRh YiwKKwkJCQkJCQkJCQkJJml0ZXIpKSAhPSBOVUxMKQorCQl7CisJCQlpZiAoZW50cnktPmJ1ZiAh PSBOVUxMKQorCQkJCWRlc3Ryb3lTdHJpbmdJbmZvKGVudHJ5LT5idWYpOworCQl9CisJCUFyY2hp dmVkV0FMX2Rlc3Ryb3kocHJpdmF0ZUluZm8tPmFyY2hpdmVfd2FsX2h0YWIpOworCQlwcml2YXRl SW5mby0+YXJjaGl2ZV93YWxfaHRhYiA9IE5VTEw7CisJfQorCisJLyogRnJlZSB0aGUgcmV1c2Fi bGUgcmVhZCBidWZmZXIuICovCisJaWYgKHByaXZhdGVJbmZvLT5hcmNoaXZlX3JlYWRfYnVmICE9 IE5VTEwpCisJeworCQlwZ19mcmVlKHByaXZhdGVJbmZvLT5hcmNoaXZlX3JlYWRfYnVmKTsKKwkJ cHJpdmF0ZUluZm8tPmFyY2hpdmVfcmVhZF9idWYgPSBOVUxMOworCX0KKworCS8qIENsb3NlIHRo ZSBmaWxlLiAqLworCWlmIChjbG9zZShwcml2YXRlSW5mby0+YXJjaGl2ZV9mZCkgIT0gMCkKKwkJ cGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY2xvc2UgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJIHBy aXZhdGVJbmZvLT5hcmNoaXZlX25hbWUpOworfQorCisvKgorICogQ29waWVzIFdBTCBkYXRhIGZy b20gYXN0cmVhbWVyIHRvIHJlYWRCdWZmOyBpZiB1bmF2YWlsYWJsZSwgZmV0Y2hlcyBtb3JlCisg KiBmcm9tIHRoZSB0YXIgYXJjaGl2ZSB2aWEgYXN0cmVhbWVyLgorICovCitpbnQKK3JlYWRfYXJj aGl2ZV93YWxfcGFnZShYTG9nRHVtcFByaXZhdGUgKnByaXZhdGVJbmZvLCBYTG9nUmVjUHRyIHRh cmdldFBhZ2VQdHIsCisJCQkJCSAgU2l6ZSBjb3VudCwgY2hhciAqcmVhZEJ1ZmYsIGludCBXYWxT ZWdTeikKK3sKKwljaGFyCSAgICpwID0gcmVhZEJ1ZmY7CisJU2l6ZQkJbmJ5dGVzID0gY291bnQ7 CisJWExvZ1JlY1B0cglyZWNwdHIgPSB0YXJnZXRQYWdlUHRyOworCVhMb2dTZWdObwlzZWdubzsK KwljaGFyCQlmbmFtZVtNQVhGTkFNRUxFTl07CisJQXJjaGl2ZWRXQUxGaWxlICplbnRyeTsKKwor CS8qIElkZW50aWZ5IHRoZSBzZWdtZW50IGFuZCBsb2NhdGUgaXRzIGVudHJ5IGluIHRoZSBhcmNo aXZlIGhhc2ggKi8KKwlYTEJ5dGVUb1NlZyh0YXJnZXRQYWdlUHRyLCBzZWdubywgV2FsU2VnU3op OworCVhMb2dGaWxlTmFtZShmbmFtZSwgcHJpdmF0ZUluZm8tPnRpbWVsaW5lLCBzZWdubywgV2Fs U2VnU3opOworCWVudHJ5ID0gZ2V0X2FyY2hpdmVfd2FsX2VudHJ5KGZuYW1lLCBwcml2YXRlSW5m bywgV2FsU2VnU3opOworCisJd2hpbGUgKG5ieXRlcyA+IDApCisJeworCQljaGFyCSAgICpidWYg PSBlbnRyeS0+YnVmLT5kYXRhOworCQlpbnQJCQlidWZMZW4gPSBlbnRyeS0+YnVmLT5sZW47CisJ CVhMb2dSZWNQdHIJZW5kUHRyOworCQlYTG9nUmVjUHRyCXN0YXJ0UHRyOworCisJCS8qIENhbGN1 bGF0ZSB0aGUgTFNOIHJhbmdlIGN1cnJlbnRseSByZXNpZGluZyBpbiB0aGUgYnVmZmVyICovCisJ CVhMb2dTZWdOb09mZnNldFRvUmVjUHRyKHNlZ25vLCBlbnRyeS0+cmVhZF9sZW4sIFdhbFNlZ1N6 LCBlbmRQdHIpOworCQlzdGFydFB0ciA9IGVuZFB0ciAtIGJ1ZkxlbjsKKworCQkvKgorCQkgKiBD b3B5IHRoZSByZXF1ZXN0ZWQgV0FMIHJlY29yZCBpZiBpdCBleGlzdHMgaW4gdGhlIGJ1ZmZlci4K KwkJICovCisJCWlmIChidWZMZW4gPiAwICYmIHN0YXJ0UHRyIDw9IHJlY3B0ciAmJiByZWNwdHIg PCBlbmRQdHIpCisJCXsKKwkJCWludAkJCWNvcHlCeXRlczsKKwkJCWludAkJCW9mZnNldCA9IHJl Y3B0ciAtIHN0YXJ0UHRyOworCisJCQkvKgorCQkJICogR2l2ZW4gc3RhcnRQdHIgPD0gcmVjcHRy IDwgZW5kUHRyIGFuZCBhIHRvdGFsIGJ1ZmZlciBzaXplCisJCQkgKiAnYnVmTGVuJywgdGhlIG9m ZnNldCAocmVjcHRyIC0gc3RhcnRQdHIpIHdpbGwgYWx3YXlzIGJlIGxlc3MKKwkJCSAqIHRoYW4g J2J1ZkxlbicuCisJCQkgKi8KKwkJCUFzc2VydChvZmZzZXQgPCBidWZMZW4pOworCisJCQljb3B5 Qnl0ZXMgPSBNaW4obmJ5dGVzLCBidWZMZW4gLSBvZmZzZXQpOworCQkJbWVtY3B5KHAsIGJ1ZiAr IG9mZnNldCwgY29weUJ5dGVzKTsKKworCQkJLyogVXBkYXRlIHN0YXRlIGZvciByZWFkICovCisJ CQlyZWNwdHIgKz0gY29weUJ5dGVzOworCQkJbmJ5dGVzIC09IGNvcHlCeXRlczsKKwkJCXAgKz0g Y29weUJ5dGVzOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEJlZm9yZSBzdGFydGlu ZyB0aGUgYWN0dWFsIGRlY29kaW5nIGxvb3AsIHBnX3dhbGR1bXAgdHJpZXMgdG8KKwkJCSAqIGxv Y2F0ZSB0aGUgZmlyc3QgdmFsaWQgcmVjb3JkIGZyb20gdGhlIHVzZXItc3BlY2lmaWVkIHN0YXJ0 CisJCQkgKiBwb3NpdGlvbiwgd2hpY2ggbWlnaHQgbm90IGJlIHRoZSBzdGFydCBvZiBhIFdBTCBy ZWNvcmQgYW5kCisJCQkgKiBjb3VsZCBmYWxsIGluIHRoZSBtaWRkbGUgb2YgYSByZWNvcmQgdGhh dCBzcGFucyBtdWx0aXBsZSBwYWdlcy4KKwkJCSAqIENvbnNlcXVlbnRseSwgdGhlIHZhbGlkIHN0 YXJ0IHBvc2l0aW9uIHRoZSBkZWNvZGVyIGlzIGxvb2tpbmcKKwkJCSAqIGZvciBjb3VsZCBiZSBm YXIgYXdheSBmcm9tIHRoYXQgaW5pdGlhbCBwb3NpdGlvbi4KKwkJCSAqCisJCQkgKiBUaGlzIG1h eSBpbnZvbHZlIHJlYWRpbmcgYWNyb3NzIG11bHRpcGxlIHBhZ2VzLCBhbmQgdGhpcworCQkJICog cHJlLXJlYWRpbmcgZmV0Y2hlcyBkYXRhIGluIG11bHRpcGxlIHJvdW5kcyBmcm9tIHRoZSBhcmNo aXZlCisJCQkgKiBzdHJlYW1lcjsgbm9ybWFsbHksIHdlIHdvdWxkIHRocm93IGF3YXkgZXhpc3Rp bmcgYnVmZmVyCisJCQkgKiBjb250ZW50cyB0byBmZXRjaCB0aGUgbmV4dCBzZXQgb2YgZGF0YSwg YnV0IHRoYXQgZXhpc3RpbmcgZGF0YQorCQkJICogbWlnaHQgYmUgbmVlZGVkIG9uY2UgdGhlIG1h aW4gbG9vcCBzdGFydHMuIEJlY2F1c2UgcHJldmlvdXNseQorCQkJICogcmVhZCBkYXRhIGNhbm5v dCBiZSByZS1yZWFkIGJ5IHRoZSBhcmNoaXZlIHN0cmVhbWVyLCB3ZSBkZWxheQorCQkJICogcmVz ZXR0aW5nIHRoZSBidWZmZXIgdW50aWwgdGhlIG1haW4gZGVjb2RpbmcgbG9vcCBpcyBlbnRlcmVk LgorCQkJICoKKwkJCSAqIE9uY2UgcGdfd2FsZHVtcCBoYXMgZW50ZXJlZCB0aGUgbWFpbiBsb29w LCBpdCBtYXkgcmUtcmVhZCB0aGUKKwkJCSAqIGN1cnJlbnRseSBhY3RpdmUgcGFnZSwgYnV0IG5l dmVyIGFuIG9sZGVyIG9uZTsgdGhlcmVmb3JlLCBhbnkKKwkJCSAqIGZ1bGx5IGNvbnN1bWVkIFdB TCBkYXRhIHByZWNlZGluZyB0aGUgY3VycmVudCBwYWdlIGNhbiB0aGVuIGJlCisJCQkgKiBzYWZl bHkgZGlzY2FyZGVkLgorCQkJICovCisJCQlpZiAocHJpdmF0ZUluZm8tPmRlY29kaW5nX3N0YXJ0 ZWQpCisJCQl7CisJCQkJcmVzZXRTdHJpbmdJbmZvKGVudHJ5LT5idWYpOworCisJCQkJLyoKKwkJ CQkgKiBQdXNoIGJhY2sgdGhlIHBhcnRpYWwgcGFnZSBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdl IHRvIHRoZQorCQkJCSAqIGJ1ZmZlciwgZW5zdXJpbmcgaXQgcmVtYWlucyBmdWxsIHBhZ2UgYXZh aWxhYmxlIGZvcgorCQkJCSAqIHJlLXJlYWRpbmcgaWYgcmVxdWVzdGVkLgorCQkJCSAqLworCQkJ CWlmIChwID4gcmVhZEJ1ZmYpCisJCQkJeworCQkJCQlBc3NlcnQoKGNvdW50IC0gbmJ5dGVzKSA+ IDApOworCQkJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGVudHJ5LT5idWYsIHJlYWRCdWZmLCBj b3VudCAtIG5ieXRlcyk7CisJCQkJfQorCQkJfQorCisJCQkvKgorCQkJICogTm93LCBmZXRjaCBt b3JlIGRhdGEuICBSYWlzZSBhbiBlcnJvciBpZiB0aGUgYXJjaGl2ZQorCQkJICogc3RyZWFtZXIg aGFzIG1vdmVkIHBhc3Qgb3VyIHNlZ21lbnQgKG1lYW5pbmcgdGhlIFdBTCBmaWxlCisJCQkgKiBp biB0aGUgYXJjaGl2ZSBpcyBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQpIG9yIGlmIHJlYWRpbmcgdGhl CisJCQkgKiBhcmNoaXZlIHJlYWNoZWQgRU9GLgorCQkJICovCisJCQlpZiAocHJpdmF0ZUluZm8t PmN1cl9maWxlICE9IGVudHJ5KQorCQkJCXBnX2ZhdGFsKCJXQUwgc2VnbWVudCBcIiVzXCIgaW4g YXJjaGl2ZSBcIiVzXCIgaXMgdG9vIHNob3J0OiByZWFkICVsbGQgb2YgJWxsZCBieXRlcyIsCisJ CQkJCQkgZm5hbWUsIHByaXZhdGVJbmZvLT5hcmNoaXZlX25hbWUsCisJCQkJCQkgKGxvbmcgbG9u ZyBpbnQpIChjb3VudCAtIG5ieXRlcyksCisJCQkJCQkgKGxvbmcgbG9uZyBpbnQpIGNvdW50KTsK KwkJCWlmIChyZWFkX2FyY2hpdmVfZmlsZShwcml2YXRlSW5mbywgUkVBRF9DSFVOS19TSVpFKSA9 PSAwKQorCQkJCXBnX2ZhdGFsKCJ1bmV4cGVjdGVkIGVuZCBvZiBhcmNoaXZlIFwiJXNcIiB3aGls ZSByZWFkaW5nIFwiJXNcIjogcmVhZCAlbGxkIG9mICVsbGQgYnl0ZXMiLAorCQkJCQkJIHByaXZh dGVJbmZvLT5hcmNoaXZlX25hbWUsIGZuYW1lLAorCQkJCQkJIChsb25nIGxvbmcgaW50KSAoY291 bnQgLSBuYnl0ZXMpLAorCQkJCQkJIChsb25nIGxvbmcgaW50KSBjb3VudCk7CisJCX0KKwl9CisK KwkvKgorCSAqIFNob3VsZCBoYXZlIHN1Y2Nlc3NmdWxseSByZWFkIGFsbCB0aGUgcmVxdWVzdGVk IGJ5dGVzIG9yIHJlcG9ydGVkIGEKKwkgKiBmYWlsdXJlIGJlZm9yZSB0aGlzIHBvaW50LgorCSAq LworCUFzc2VydChuYnl0ZXMgPT0gMCk7CisKKwkvKgorCSAqIE5COiBXZSByZXR1cm4gdGhlIGZp eGVkIHZhbHVlIHByb3ZpZGVkIGFzIGlucHV0LiBXZSBjb3VsZCByZXR1cm4gYQorCSAqIGJvb2xl YW4gc2luY2Ugd2UgZWl0aGVyIHN1Y2Nlc3NmdWxseSByZWFkIHRoZSBXQUwgcGFnZSBvciByYWlz ZSBhbgorCSAqIGVycm9yLCBidXQgdGhlIGNhbGxlciBleHBlY3RzIHRoaXMgdmFsdWUgdG8gYmUg cmV0dXJuZWQuIFRoZSByb3V0aW5lCisJICogdGhhdCByZWFkcyBXQUwgcGFnZXMgZnJvbSB0aGUg cGh5c2ljYWwgV0FMIGZpbGUgZm9sbG93cyB0aGUgc2FtZQorCSAqIGNvbnZlbnRpb24uCisJICov CisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogQ2xlYXJzIHRoZSBidWZmZXIgb2YgYSBXQUwg ZW50cnkgdGhhdCBpcyBiZWluZyBpZ25vcmVkLiAgVGhpcyBmcmVlcyB1cCBtZW1vcnkKKyAqIGFu ZCBwcmV2ZW50cyB0aGUgYWNjdW11bGF0aW9uIG9mIGlycmVsZXZhbnQgV0FMIGRhdGEuICBBZGRp dGlvbmFsbHksCisgKiBjb25kaXRpb25hbGx5IHNldHRpbmcgY3VyX2ZpbGUgd2l0aGluIHByaXZh dGVJbmZvIHRvIE5VTEwgZW5zdXJlcyB0aGUKKyAqIGFyY2hpdmUgc3RyZWFtZXIgc2tpcHMgdW5u ZWNlc3NhcnkgY29weSBvcGVyYXRpb25zLgorICovCit2b2lkCitmcmVlX2FyY2hpdmVfd2FsX2Vu dHJ5KGNvbnN0IGNoYXIgKmZuYW1lLCBYTG9nRHVtcFByaXZhdGUgKnByaXZhdGVJbmZvKQorewor CUFyY2hpdmVkV0FMRmlsZSAqZW50cnk7CisKKwllbnRyeSA9IEFyY2hpdmVkV0FMX2xvb2t1cChw cml2YXRlSW5mby0+YXJjaGl2ZV93YWxfaHRhYiwgZm5hbWUpOworCisJaWYgKGVudHJ5ID09IE5V TEwpCisJCXJldHVybjsKKworCS8qIERlc3Ryb3kgdGhlIGJ1ZmZlciAqLworCWRlc3Ryb3lTdHJp bmdJbmZvKGVudHJ5LT5idWYpOworCWVudHJ5LT5idWYgPSBOVUxMOworCisJLyogUmVtb3ZlIHRl bXBvcmFyeSBmaWxlIGlmIGFueSAqLworCWlmIChlbnRyeS0+c3BpbGxlZCkKKwl7CisJCWNoYXIJ CWZwYXRoW01BWFBHUEFUSF07CisKKwkJc25wcmludGYoZnBhdGgsIE1BWFBHUEFUSCwgIiVzLyVz IiwgVG1wV2FsU2VnRGlyLCBmbmFtZSk7CisKKwkJaWYgKHVubGluayhmcGF0aCkgPT0gMCkKKwkJ CXBnX2xvZ19kZWJ1ZygicmVtb3ZlZCBmaWxlIFwiJXNcIiIsIGZwYXRoKTsKKwl9CisKKwkvKiBT ZXQgY3VyX2ZpbGUgdG8gTlVMTCBpZiBpdCBtYXRjaGVzIHRoZSBlbnRyeSBiZWluZyBpZ25vcmVk ICovCisJaWYgKHByaXZhdGVJbmZvLT5jdXJfZmlsZSA9PSBlbnRyeSkKKwkJcHJpdmF0ZUluZm8t PmN1cl9maWxlID0gTlVMTDsKKworCUFyY2hpdmVkV0FMX2RlbGV0ZV9pdGVtKHByaXZhdGVJbmZv LT5hcmNoaXZlX3dhbF9odGFiLCBlbnRyeSk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBhcmNo aXZlZCBXQUwgZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZSBpZiBpdCBleGlzdHMuICBPdGhlcndp c2UsCisgKiBpdCBpbnZva2VzIHRoZSByb3V0aW5lIHRvIHJlYWQgdGhlIGFyY2hpdmVkIGZpbGUs IHdoaWNoIHRoZW4gcG9wdWxhdGVzIHRoZQorICogZW50cnkgaW4gdGhlIGhhc2ggdGFibGUgaWYg dGhhdCBXQUwgZXhpc3RzIGluIHRoZSBhcmNoaXZlLgorICogSWYgdGhlIGFyY2hpdmUgc3RyZWFt ZXIgaGFwcGVucyB0byBiZSByZWFkaW5nIGEKKyAqIFdBTCBmcm9tIGFyY2hpdmUgZmlsZSB0aGF0 IGlzIG5vdCBjdXJyZW50bHkgbmVlZGVkLCB0aGF0IFdBTCBkYXRhIGlzIHdyaXR0ZW4KKyAqIHRv IGEgdGVtcG9yYXJ5IGZpbGUuCisgKi8KK3N0YXRpYyBBcmNoaXZlZFdBTEZpbGUgKgorZ2V0X2Fy Y2hpdmVfd2FsX2VudHJ5KGNvbnN0IGNoYXIgKmZuYW1lLCBYTG9nRHVtcFByaXZhdGUgKnByaXZh dGVJbmZvLAorCQkJCQkgIGludCBXYWxTZWdTeikKK3sKKwlBcmNoaXZlZFdBTEZpbGUgKmVudHJ5 ID0gTlVMTDsKKwlGSUxFCSAgICp3cml0ZV9mcCA9IE5VTEw7CisKKwkvKiBTZWFyY2ggaGFzaCB0 YWJsZSAqLworCWVudHJ5ID0gQXJjaGl2ZWRXQUxfbG9va3VwKHByaXZhdGVJbmZvLT5hcmNoaXZl X3dhbF9odGFiLCBmbmFtZSk7CisKKwlpZiAoZW50cnkgIT0gTlVMTCkKKwkJcmV0dXJuIGVudHJ5 OworCisJLyoKKwkgKiBUaGUgcmVxdWVzdGVkIFdBTCBlbnRyeSBoYXMgbm90IGJlZW4gcmVhZCBm cm9tIHRoZSBhcmNoaXZlIHlldDsgaW52b2tlCisJICogdGhlIGFyY2hpdmUgc3RyZWFtZXIgdG8g cmVhZCBpdC4KKwkgKi8KKwl3aGlsZSAoMSkKKwl7CisJCS8qCisJCSAqIFRoZSBXQUwgZmlsZSBl bnRyeSBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkIG1heSBjaGFuZ2UgZHVyaW5nCisJCSAqIGFy Y2hpdmUgc3RyZWFtZXIgZXhlY3V0aW9uLiBUaGVyZWZvcmUsIG1haW50YWluIGEgbG9jYWwgdmFy aWFibGUgdG8KKwkJICogcmVmZXJlbmNlIHRoZSBwcmV2aW91cyBlbnRyeSwgZW5zdXJpbmcgdGhh dCBhbnkgcmVtYWluaW5nIGRhdGEgaW4KKwkJICogaXRzIGJ1ZmZlciBpcyBzdWNjZXNzZnVsbHkg Zmx1c2hlZCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgYmVmb3JlCisJCSAqIHN3aXRjaGluZyB0byB0 aGUgbmV4dCBXQUwgZW50cnkuCisJCSAqLworCQllbnRyeSA9IHByaXZhdGVJbmZvLT5jdXJfZmls ZTsKKworCQkvKiBGZXRjaCBtb3JlIGRhdGEgKi8KKwkJaWYgKGVudHJ5ID09IE5VTEwgfHwgZW50 cnktPmJ1Zi0+bGVuID09IDApCisJCXsKKwkJCWlmIChyZWFkX2FyY2hpdmVfZmlsZShwcml2YXRl SW5mbywgUkVBRF9DSFVOS19TSVpFKSA9PSAwKQorCQkJCWJyZWFrOwkJCS8qIGFyY2hpdmUgZmls ZSBlbmRlZCAqLworCQl9CisKKwkJLyoKKwkJICogQXJjaGl2ZWQgc3RyZWFtZXIgaXMgcmVhZGlu ZyBhIG5vbi1XQUwgZmlsZSBvciBhbiBpcnJlbGV2YW50IFdBTAorCQkgKiBmaWxlLgorCQkgKi8K KwkJaWYgKGVudHJ5ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKiBGb3VuZCB0aGUgcmVx dWlyZWQgZW50cnkgKi8KKwkJaWYgKHN0cmNtcChmbmFtZSwgZW50cnktPmZuYW1lKSA9PSAwKQor CQkJcmV0dXJuIGVudHJ5OworCisJCS8qCisJCSAqIEFyY2hpdmUgc3RyZWFtZXIgaXMgY3VycmVu dGx5IHJlYWRpbmcgYSBmaWxlIHRoYXQgaXNuJ3QgdGhlIG9uZQorCQkgKiBhc2tlZCBmb3IsIGJ1 dCBpdCdzIHJlcXVpcmVkIGluIHRoZSBmdXR1cmUuIEl0IHNob3VsZCBiZSB3cml0dGVuIHRvCisJ CSAqIGEgdGVtcG9yYXJ5IGxvY2F0aW9uIGZvciByZXRyaWV2YWwgd2hlbiBuZWVkZWQuCisJCSAq LworCisJCS8qIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5 IGV4aXN0ICovCisJCWlmICghZW50cnktPnNwaWxsZWQpCisJCXsKKwkJCXdyaXRlX2ZwID0gcHJl cGFyZV90bXBfd3JpdGUoZW50cnktPmZuYW1lKTsKKwkJCWVudHJ5LT5zcGlsbGVkID0gdHJ1ZTsK KwkJfQorCisJCS8qIEZsdXNoIGRhdGEgZnJvbSB0aGUgYnVmZmVyIHRvIHRoZSBmaWxlICovCisJ CXBlcmZvcm1fdG1wX3dyaXRlKGVudHJ5LT5mbmFtZSwgZW50cnktPmJ1Ziwgd3JpdGVfZnApOwor CQlyZXNldFN0cmluZ0luZm8oZW50cnktPmJ1Zik7CisKKwkJLyoKKwkJICogVGhlIGNoYW5nZSBp biB0aGUgY3VycmVudCBzZWdtZW50IGVudHJ5IGluZGljYXRlcyB0aGF0IHRoZSByZWFkaW5nCisJ CSAqIG9mIHRoaXMgZmlsZSBoYXMgZW5kZWQuCisJCSAqLworCQlpZiAoZW50cnkgIT0gcHJpdmF0 ZUluZm8tPmN1cl9maWxlICYmIHdyaXRlX2ZwICE9IE5VTEwpCisJCXsKKwkJCWZjbG9zZSh3cml0 ZV9mcCk7CisJCQl3cml0ZV9mcCA9IE5VTEw7CisJCX0KKwl9CisKKwkvKiBSZXF1ZXN0ZWQgV0FM IHNlZ21lbnQgbm90IGZvdW5kICovCisJcGdfZmF0YWwoImNvdWxkIG5vdCBmaW5kIFdBTCBcIiVz XCIgaW4gYXJjaGl2ZSBcIiVzXCIiLAorCQkJIGZuYW1lLCBwcml2YXRlSW5mby0+YXJjaGl2ZV9u YW1lKTsKK30KKworLyoKKyAqIFJlYWRzIHRoZSBhcmNoaXZlIGZpbGUgYW5kIHBhc3NlcyBpdCB0 byB0aGUgYXJjaGl2ZSBzdHJlYW1lciBmb3IKKyAqIGRlY29tcHJlc3Npb24uCisgKi8KK3N0YXRp YyBpbnQKK3JlYWRfYXJjaGl2ZV9maWxlKFhMb2dEdW1wUHJpdmF0ZSAqcHJpdmF0ZUluZm8sIFNp emUgY291bnQpCit7CisJaW50CQkJcmM7CisKKwkvKiBUaGUgcmVhZCByZXF1ZXN0IG11c3Qgbm90 IGV4Y2VlZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzaXplLiAqLworCUFzc2VydChwcml2YXRlSW5m by0+YXJjaGl2ZV9yZWFkX2J1Zl9zaXplID49IGNvdW50KTsKKworCXJjID0gcmVhZChwcml2YXRl SW5mby0+YXJjaGl2ZV9mZCwgcHJpdmF0ZUluZm8tPmFyY2hpdmVfcmVhZF9idWYsIGNvdW50KTsK KwlpZiAocmMgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVt IiwKKwkJCQkgcHJpdmF0ZUluZm8tPmFyY2hpdmVfbmFtZSk7CisKKwkvKgorCSAqIERlY29tcHJl c3MgKGlmIHJlcXVpcmVkKSwgYW5kIHRoZW4gcGFyc2UgdGhlIHByZXZpb3VzbHkgcmVhZCBjb250 ZW50cworCSAqIG9mIHRoZSB0YXIgZmlsZS4KKwkgKi8KKwlpZiAocmMgPiAwKQorCQlhc3RyZWFt ZXJfY29udGVudChwcml2YXRlSW5mby0+YXJjaGl2ZV9zdHJlYW1lciwgTlVMTCwKKwkJCQkJCSAg cHJpdmF0ZUluZm8tPmFyY2hpdmVfcmVhZF9idWYsIHJjLAorCQkJCQkJICBBU1RSRUFNRVJfVU5L Tk9XTik7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBTZXQgdXAgYSB0ZW1wb3JhcnkgZGly ZWN0b3J5IHRvIHRlbXBvcmFyaWx5IHN0b3JlIFdBTCBzZWdtZW50cy4KKyAqLworc3RhdGljIHZv aWQKK3NldHVwX3RtcHdhbF9kaXIoY29uc3QgY2hhciAqd2FsZGlyKQoreworCWNoYXIJICAgKnRl bXBsYXRlOworCisJLyoKKwkgKiBVc2UgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlIFRN UERJUiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgaXQncworCSAqIG5vdCBzZXQsIHVzZSB0aGUg cHJvdmlkZWQgV0FMIGRpcmVjdG9yeSB0byBleHRyYWN0IFdBTCBmaWxlCisJICogdGVtcG9yYXJp bHkuCisJICovCisJdGVtcGxhdGUgPSBwc3ByaW50ZigiJXMvd2FsZHVtcF90bXAtWFhYWFhYIiwK KwkJCQkJCWdldGVudigiVE1QRElSIikgPyBnZXRlbnYoIlRNUERJUiIpIDogd2FsZGlyKTsKKwlU bXBXYWxTZWdEaXIgPSBta2R0ZW1wKHRlbXBsYXRlKTsKKworCWlmIChUbXBXYWxTZWdEaXIgPT0g TlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJXNcIjogJW0i LCB0ZW1wbGF0ZSk7CisKKwljYW5vbmljYWxpemVfcGF0aChUbXBXYWxTZWdEaXIpOworCisJcGdf bG9nX2RlYnVnKCJjcmVhdGVkIGRpcmVjdG9yeSBcIiVzXCIiLCBUbXBXYWxTZWdEaXIpOworfQor CisvKgorICogUmVtb3ZlIHRlbXBvcmFyeSBkaXJlY3RvcnkgYXQgZXhpdCwgaWYgYW55LgorICov CitzdGF0aWMgdm9pZAorY2xlYW51cF90bXB3YWxfZGlyX2F0ZXhpdCh2b2lkKQoreworCXJtdHJl ZShUbXBXYWxTZWdEaXIsIHRydWUpOworfQorCisvKgorICogQ3JlYXRlIGFuIGVtcHR5IHBsYWNl aG9sZGVyIGZpbGUgYW5kIHJldHVybiBpdHMgaGFuZGxlLgorICovCitzdGF0aWMgRklMRSAqCitw cmVwYXJlX3RtcF93cml0ZShjb25zdCBjaGFyICpmbmFtZSkKK3sKKwljaGFyCQlmcGF0aFtNQVhQ R1BBVEhdOworCUZJTEUJICAgKmZpbGU7CisKKwlzbnByaW50ZihmcGF0aCwgTUFYUEdQQVRILCAi JXMvJXMiLCBUbXBXYWxTZWdEaXIsIGZuYW1lKTsKKworCS8qIENyZWF0ZSBhbiBlbXB0eSBwbGFj ZWhvbGRlciAqLworCWZpbGUgPSBmb3BlbihmcGF0aCwgUEdfQklOQVJZX1cpOworCWlmIChmaWxl ID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgXCIlc1wiOiAlbSIs IGZwYXRoKTsKKworI2lmbmRlZiBXSU4zMgorCWlmIChjaG1vZChmcGF0aCwgcGdfZmlsZV9jcmVh dGVfbW9kZSkpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgc2V0IHBlcm1pc3Npb25zIG9uIGZpbGUg XCIlc1wiOiAlbSIsCisJCQkJIGZwYXRoKTsKKyNlbmRpZgorCisJcGdfbG9nX2RlYnVnKCJzcGls bGluZyB0byB0ZW1wb3JhcnkgZmlsZSBcIiVzXCIiLCBmcGF0aCk7CisKKwlyZXR1cm4gZmlsZTsK K30KKworLyoKKyAqIFdyaXRlIGJ1ZmZlciBkYXRhIHRvIHRoZSBnaXZlbiBmaWxlIGhhbmRsZS4K KyAqLworc3RhdGljIHZvaWQKK3BlcmZvcm1fdG1wX3dyaXRlKGNvbnN0IGNoYXIgKmZuYW1lLCBT dHJpbmdJbmZvIGJ1ZiwgRklMRSAqZmlsZSkKK3sKKwlBc3NlcnQoZmlsZSk7CisKKwllcnJubyA9 IDA7CisJaWYgKGJ1Zi0+bGVuID4gMCAmJiBmd3JpdGUoYnVmLT5kYXRhLCBidWYtPmxlbiwgMSwg ZmlsZSkgIT0gMSkKKwl7CisJCS8qCisJCSAqIElmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFz c3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UKKwkJICovCisJCWlmIChlcnJubyA9PSAwKQor CQkJZXJybm8gPSBFTk9TUEM7CisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBc IiVzXCI6ICVtIiwgZm5hbWUpOworCX0KK30KKworLyoKKyAqIENyZWF0ZSBhbiBhc3RyZWFtZXIg dGhhdCBjYW4gcmVhZCBXQUwgZnJvbSB0YXIgZmlsZS4KKyAqLworc3RhdGljIGFzdHJlYW1lciAq Cithc3RyZWFtZXJfd2FsZHVtcF9uZXcoWExvZ0R1bXBQcml2YXRlICpwcml2YXRlSW5mbykKK3sK Kwlhc3RyZWFtZXJfd2FsZHVtcCAqc3RyZWFtZXI7CisKKwlzdHJlYW1lciA9IHBhbGxvYzBfb2Jq ZWN0KGFzdHJlYW1lcl93YWxkdW1wKTsKKwkqKChjb25zdCBhc3RyZWFtZXJfb3BzICoqKSAmc3Ry ZWFtZXItPmJhc2UuYmJzX29wcykgPQorCQkmYXN0cmVhbWVyX3dhbGR1bXBfb3BzOworCisJc3Ry ZWFtZXItPnByaXZhdGVJbmZvID0gcHJpdmF0ZUluZm87CisKKwlyZXR1cm4gJnN0cmVhbWVyLT5i YXNlOworfQorCisvKgorICogTWFpbiBlbnRyeSBwb2ludCBvZiB0aGUgYXJjaGl2ZSBzdHJlYW1l ciBmb3IgcmVhZGluZyBXQUwgZGF0YSBmcm9tIGEgdGFyCisgKiBmaWxlLiBJZiBhIG1lbWJlciBp cyBpZGVudGlmaWVkIGFzIGEgdmFsaWQgV0FMIGZpbGUsIGEgaGFzaCBlbnRyeSBpcyBjcmVhdGVk CisgKiBmb3IgaXQsIGFuZCBpdHMgY29udGVudHMgYXJlIGNvcGllZCBpbnRvIHRoYXQgZW50cnkn cyBidWZmZXIsIG1ha2luZyB0aGVtCisgKiBhY2Nlc3NpYmxlIHRvIHRoZSBkZWNvZGluZyByb3V0 aW5lLgorICovCitzdGF0aWMgdm9pZAorYXN0cmVhbWVyX3dhbGR1bXBfY29udGVudChhc3RyZWFt ZXIgKnN0cmVhbWVyLCBhc3RyZWFtZXJfbWVtYmVyICptZW1iZXIsCisJCQkJCQkgIGNvbnN0IGNo YXIgKmRhdGEsIGludCBsZW4sCisJCQkJCQkgIGFzdHJlYW1lcl9hcmNoaXZlX2NvbnRleHQgY29u dGV4dCkKK3sKKwlhc3RyZWFtZXJfd2FsZHVtcCAqbXlzdHJlYW1lciA9IChhc3RyZWFtZXJfd2Fs ZHVtcCAqKSBzdHJlYW1lcjsKKwlYTG9nRHVtcFByaXZhdGUgKnByaXZhdGVJbmZvID0gbXlzdHJl YW1lci0+cHJpdmF0ZUluZm87CisKKwlBc3NlcnQoY29udGV4dCAhPSBBU1RSRUFNRVJfVU5LTk9X Tik7CisKKwlzd2l0Y2ggKGNvbnRleHQpCisJeworCQljYXNlIEFTVFJFQU1FUl9NRU1CRVJfSEVB REVSOgorCQkJeworCQkJCWNoYXIJICAgKmZuYW1lID0gTlVMTDsKKwkJCQlBcmNoaXZlZFdBTEZp bGUgKmVudHJ5OworCQkJCWJvb2wJCWZvdW5kOworCisJCQkJcGdfbG9nX2RlYnVnKCJyZWFkaW5n IFwiJXNcIiIsIG1lbWJlci0+cGF0aG5hbWUpOworCisJCQkJaWYgKCFtZW1iZXJfaXNfd2FsX2Zp bGUobXlzdHJlYW1lciwgbWVtYmVyLCAmZm5hbWUpKQorCQkJCQlicmVhazsKKworCQkJCS8qCisJ CQkJICogRnVydGhlciBjaGVja3MgYXJlIHNraXBwZWQgaWYgYW55IFdBTCBmaWxlIGNhbiBiZSBy ZWFkLgorCQkJCSAqIFRoaXMgdHlwaWNhbGx5IG9jY3VycyBkdXJpbmcgaW5pdGlhbCB2ZXJpZmlj YXRpb24uCisJCQkJICovCisJCQkJaWYgKCFSRUFEX0FOWV9XQUwocHJpdmF0ZUluZm8pKQorCQkJ CXsKKwkJCQkJWExvZ1NlZ05vCXNlZ25vOworCQkJCQlUaW1lTGluZUlECXRpbWVsaW5lOworCisJ CQkJCS8qCisJCQkJCSAqIFNraXAgdGhlIHNlZ21lbnQgaWYgdGhlIHRpbWVsaW5lIGRvZXMgbm90 IG1hdGNoLCBpZiBpdAorCQkJCQkgKiBmYWxscyBvdXRzaWRlIHRoZSBjYWxsZXItc3BlY2lmaWVk IHJhbmdlLgorCQkJCQkgKi8KKwkJCQkJWExvZ0Zyb21GaWxlTmFtZShmbmFtZSwgJnRpbWVsaW5l LCAmc2Vnbm8sIHByaXZhdGVJbmZvLT5zZWdzaXplKTsKKwkJCQkJaWYgKHByaXZhdGVJbmZvLT50 aW1lbGluZSAhPSB0aW1lbGluZSB8fAorCQkJCQkJcHJpdmF0ZUluZm8tPnN0YXJ0X3NlZ25vID4g c2Vnbm8gfHwKKwkJCQkJCXByaXZhdGVJbmZvLT5lbmRfc2Vnbm8gPCBzZWdubykKKwkJCQkJewor CQkJCQkJcGZyZWUoZm5hbWUpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQll bnRyeSA9IEFyY2hpdmVkV0FMX2luc2VydChwcml2YXRlSW5mby0+YXJjaGl2ZV93YWxfaHRhYiwK KwkJCQkJCQkJCQkgICBmbmFtZSwgJmZvdW5kKTsKKworCQkJCS8qCisJCQkJICogU2hvdWxkbid0 IGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMsIHNpbXBseSBpZ25vcmUgdGhlCisJCQkJICogZHVwbGlj YXRlIFdBTCBmaWxlLgorCQkJCSAqLworCQkJCWlmIChmb3VuZCkKKwkJCQl7CisJCQkJCXBnX2xv Z193YXJuaW5nKCJpZ25vcmluZyBkdXBsaWNhdGUgV0FMIFwiJXNcIiBmb3VuZCBpbiBhcmNoaXZl IFwiJXNcIiIsCisJCQkJCQkJCSAgIG1lbWJlci0+cGF0aG5hbWUsIHByaXZhdGVJbmZvLT5hcmNo aXZlX25hbWUpOworCQkJCQlwZnJlZShmbmFtZSk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJ CWVudHJ5LT5idWYgPSBtYWtlU3RyaW5nSW5mbygpOworCQkJCWVudHJ5LT5zcGlsbGVkID0gZmFs c2U7CisJCQkJZW50cnktPnJlYWRfbGVuID0gMDsKKwkJCQlwcml2YXRlSW5mby0+Y3VyX2ZpbGUg PSBlbnRyeTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgQVNUUkVBTUVSX01FTUJFUl9DT05U RU5UUzoKKwkJCWlmIChwcml2YXRlSW5mby0+Y3VyX2ZpbGUpCisJCQl7CisJCQkJYXBwZW5kQmlu YXJ5U3RyaW5nSW5mbyhwcml2YXRlSW5mby0+Y3VyX2ZpbGUtPmJ1ZiwgZGF0YSwgbGVuKTsKKwkJ CQlwcml2YXRlSW5mby0+Y3VyX2ZpbGUtPnJlYWRfbGVuICs9IGxlbjsKKwkJCX0KKwkJCWJyZWFr OworCisJCWNhc2UgQVNUUkVBTUVSX01FTUJFUl9UUkFJTEVSOgorCQkJcHJpdmF0ZUluZm8tPmN1 cl9maWxlID0gTlVMTDsKKwkJCWJyZWFrOworCisJCWNhc2UgQVNUUkVBTUVSX0FSQ0hJVkVfVFJB SUxFUjoKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBTaG91bGRuJ3QgaGFwcGVuLiAq LworCQkJcGdfZmF0YWwoInVuZXhwZWN0ZWQgc3RhdGUgd2hpbGUgcGFyc2luZyB0YXIgZmlsZSIp OworCX0KK30KKworLyoKKyAqIEVuZC1vZi1zdHJlYW0gcHJvY2Vzc2luZyBmb3IgYW4gYXN0cmVh bWVyX3dhbGR1bXAgc3RyZWFtLgorICovCitzdGF0aWMgdm9pZAorYXN0cmVhbWVyX3dhbGR1bXBf ZmluYWxpemUoYXN0cmVhbWVyICpzdHJlYW1lcikKK3sKKwlBc3NlcnQoc3RyZWFtZXItPmJic19u ZXh0ID09IE5VTEwpOworfQorCisvKgorICogRnJlZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGFu IGFzdHJlYW1lcl93YWxkdW1wIHN0cmVhbS4KKyAqLworc3RhdGljIHZvaWQKK2FzdHJlYW1lcl93 YWxkdW1wX2ZyZWUoYXN0cmVhbWVyICpzdHJlYW1lcikKK3sKKwlBc3NlcnQoc3RyZWFtZXItPmJi c19uZXh0ID09IE5VTEwpOworCXBmcmVlKHN0cmVhbWVyKTsKK30KKworLyoKKyAqIFJldHVybnMg dHJ1ZSBpZiB0aGUgYXJjaGl2ZSBtZW1iZXIgbmFtZSBtYXRjaGVzIHRoZSBXQUwgbmFtaW5nIGZv cm1hdC4gSWYKKyAqIHN1Y2Nlc3NmdWwsIGl0IGFsc28gb3V0cHV0cyB0aGUgV0FMIHNlZ21lbnQg bmFtZS4KKyAqLworc3RhdGljIGJvb2wKK21lbWJlcl9pc193YWxfZmlsZShhc3RyZWFtZXJfd2Fs ZHVtcCAqbXlzdHJlYW1lciwgYXN0cmVhbWVyX21lbWJlciAqbWVtYmVyLAorCQkJCSAgIGNoYXIg KipmbmFtZSkKK3sKKwlpbnQJCQlwYXRobGVuOworCWNoYXIJCXBhdGhuYW1lW01BWFBHUEFUSF07 CisJY2hhcgkgICAqZmlsZW5hbWU7CisKKwkvKiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIG5v cm1hbCBmaWxlcy4gKi8KKwlpZiAobWVtYmVyLT5pc19kaXJlY3RvcnkgfHwgbWVtYmVyLT5pc19s aW5rKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoc3RybGVuKG1lbWJlci0+cGF0aG5hbWUpIDwg WExPR19GTkFNRV9MRU4pCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogRm9yIGEgY29ycmVj dCBjb21wYXJpc29uLCB3ZSBtdXN0IHJlbW92ZSBhbnkgJy4nIG9yICcuLicgY29tcG9uZW50cwor CSAqIGZyb20gdGhlIG1lbWJlciBwYXRobmFtZS4gU2ltaWxhciB0byBtZW1iZXJfdmVyaWZ5X2hl YWRlcigpLCB3ZSBwcmVwZW5kCisJICogJy4vJyB0byB0aGUgcGF0aCBzbyB0aGF0IGNhbm9uaWNh bGl6ZV9wYXRoKCkgY2FuIHByb3Blcmx5IHJlc29sdmUgYW5kCisJICogc3RyaXAgdGhlc2UgcmVm ZXJlbmNlcyBmcm9tIHRoZSB0YXIgbWVtYmVyIG5hbWUKKwkgKi8KKwlzbnByaW50ZihwYXRobmFt ZSwgTUFYUEdQQVRILCAiLi8lcyIsIG1lbWJlci0+cGF0aG5hbWUpOworCWNhbm9uaWNhbGl6ZV9w YXRoKHBhdGhuYW1lKTsKKwlwYXRobGVuID0gc3RybGVuKHBhdGhuYW1lKTsKKworCS8qIFdBTCBm aWxlcyBmcm9tIHRoZSB0b3AtbGV2ZWwgb3IgcGdfd2FsIGRpcmVjdG9yeSB3aWxsIGJlIGRlY29k ZWQgKi8KKwlpZiAocGF0aGxlbiA+IFhMT0dfRk5BTUVfTEVOICYmCisJCXN0cm5jbXAocGF0aG5h bWUsIFhMT0dESVIsIHN0cmxlbihYTE9HRElSKSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJ LyogV0FMIGZpbGUgY291bGQgYmUgd2l0aCBmdWxsIHBhdGggKi8KKwlmaWxlbmFtZSA9IHBhdGhu YW1lICsgKHBhdGhsZW4gLSBYTE9HX0ZOQU1FX0xFTik7CisJaWYgKCFJc1hMb2dGaWxlTmFtZShm aWxlbmFtZSkpCisJCXJldHVybiBmYWxzZTsKKworCSpmbmFtZSA9IHBuc3RyZHVwKGZpbGVuYW1l LCBYTE9HX0ZOQU1FX0xFTik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEhlbHBlciBm dW5jdGlvbiBmb3IgZmlsZW1hcCBoYXNoIHRhYmxlLgorICovCitzdGF0aWMgdWludDMyCitoYXNo X3N0cmluZ19wb2ludGVyKGNvbnN0IGNoYXIgKnMpCit7CisJdW5zaWduZWQgY2hhciAqc3MgPSAo dW5zaWduZWQgY2hhciAqKSBzOworCisJcmV0dXJuIGhhc2hfYnl0ZXMoc3MsIHN0cmxlbihzKSk7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmlu L3BnX3dhbGR1bXAvbWVzb24uYnVpbGQKaW5kZXggNjMzYTk4NzRiYjUuLjUyOTZmMjFiODJjIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9w Z193YWxkdW1wL21lc29uLmJ1aWxkCkBAIC0xLDYgKzEsNyBAQAogIyBDb3B5cmlnaHQgKGMpIDIw MjItMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKIAogcGdfd2FsZHVt cF9zb3VyY2VzID0gZmlsZXMoCisgICdhcmNoaXZlX3dhbGR1bXAuYycsCiAgICdjb21wYXQuYycs CiAgICdwZ193YWxkdW1wLmMnLAogICAncm1ncmRlc2MuYycsCkBAIC0xOCw3ICsxOSw3IEBAIGVu ZGlmCiAKIHBnX3dhbGR1bXAgPSBleGVjdXRhYmxlKCdwZ193YWxkdW1wJywKICAgcGdfd2FsZHVt cF9zb3VyY2VzLAotICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsejQsIHpzdGRdLAor ICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgbHo0LCB6c3RkXSwKICAgY19h cmdzOiBbJy1ERlJPTlRFTkQnXSwgIyBuZWVkZWQgZm9yIHhsb2dyZWFkZXIgZXQgYWwKICAga3dh cmdzOiBkZWZhdWx0X2Jpbl9hcmdzLAogKQpAQCAtMjksNiArMzAsNyBAQCB0ZXN0cyArPSB7CiAg ICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAogICAnYmQnOiBtZXNvbi5jdXJyZW50 X2J1aWxkX2RpcigpLAogICAndGFwJzogeworICAgICdlbnYnOiB7J1RBUic6IHRhci5mb3VuZCgp ID8gdGFyLmZ1bGxfcGF0aCgpIDogJyd9LAogICAgICd0ZXN0cyc6IFsKICAgICAgICd0LzAwMV9i YXNpYy5wbCcsCiAgICAgICAndC8wMDJfc2F2ZV9mdWxscGFnZS5wbCcsCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX3dhbGR1bXAvcGdfd2FsZHVtcC5jIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dh bGR1bXAuYwppbmRleCA1ZDMxYjE1ZGJkOC4uYjEzY2VkYWEzZTcgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfd2FsZHVtcC9wZ193YWxkdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dh bGR1bXAuYwpAQCAtMTc2LDcgKzE3Niw3IEBAIHNwbGl0X3BhdGgoY29uc3QgY2hhciAqcGF0aCwg Y2hhciAqKmRpciwgY2hhciAqKmZuYW1lKQogICoKICAqIHJldHVybiBhIHJlYWQgb25seSBmZAog ICovCi1zdGF0aWMgaW50CitpbnQKIG9wZW5fZmlsZV9pbl9kaXJlY3RvcnkoY29uc3QgY2hhciAq ZGlyZWN0b3J5LCBjb25zdCBjaGFyICpmbmFtZSkKIHsKIAlpbnQJCQlmZCA9IC0xOwpAQCAtNDQw LDYgKzQ0MCwxMDMgQEAgV0FMRHVtcFJlYWRQYWdlKFhMb2dSZWFkZXJTdGF0ZSAqc3RhdGUsIFhM b2dSZWNQdHIgdGFyZ2V0UGFnZVB0ciwgaW50IHJlcUxlbiwKIAlyZXR1cm4gY291bnQ7CiB9CiAK Ky8qCisgKiBwZ193YWxkdW1wJ3MgWExvZ1JlYWRlclJvdXRpbmUtPnNlZ21lbnRfb3BlbiBjYWxs YmFjayB0byBzdXBwb3J0IGR1bXBpbmcgV0FMCisgKiBmaWxlcyBmcm9tIHRhciBhcmNoaXZlcy4K KyAqLworc3RhdGljIHZvaWQKK1RhcldBTER1bXBPcGVuU2VnbWVudChYTG9nUmVhZGVyU3RhdGUg KnN0YXRlLCBYTG9nU2VnTm8gbmV4dFNlZ05vLAorCQkJCQkgIFRpbWVMaW5lSUQgKnRsaV9wKQor eworCS8qIE5vIGFjdGlvbiBuZWVkZWQgKi8KK30KKworLyoKKyAqIHBnX3dhbGR1bXAncyBYTG9n UmVhZGVyUm91dGluZS0+c2VnbWVudF9jbG9zZSBjYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQK K1RhcldBTER1bXBDbG9zZVNlZ21lbnQoWExvZ1JlYWRlclN0YXRlICpzdGF0ZSkKK3sKKwkvKiBO byBhY3Rpb24gbmVlZGVkICovCit9CisKKy8qCisgKiBwZ193YWxkdW1wJ3MgWExvZ1JlYWRlclJv dXRpbmUtPnBhZ2VfcmVhZCBjYWxsYmFjayB0byBzdXBwb3J0IGR1bXBpbmcgV0FMCisgKiBmaWxl cyBmcm9tIHRhciBhcmNoaXZlcy4KKyAqLworc3RhdGljIGludAorVGFyV0FMRHVtcFJlYWRQYWdl KFhMb2dSZWFkZXJTdGF0ZSAqc3RhdGUsIFhMb2dSZWNQdHIgdGFyZ2V0UGFnZVB0ciwgaW50IHJl cUxlbiwKKwkJCQkgICBYTG9nUmVjUHRyIHRhcmdldFB0ciwgY2hhciAqcmVhZEJ1ZmYpCit7CisJ WExvZ0R1bXBQcml2YXRlICpwcml2YXRlID0gc3RhdGUtPnByaXZhdGVfZGF0YTsKKwlpbnQJCQlj b3VudCA9IHJlcXVpcmVkX3JlYWRfbGVuKHByaXZhdGUsIHRhcmdldFBhZ2VQdHIsIHJlcUxlbik7 CisJaW50CQkJV2FsU2VnU3ogPSBzdGF0ZS0+c2VnY3h0LndzX3NlZ3NpemU7CisJWExvZ1NlZ05v CWN1clNlZ05vOworCisJLyogQmFpbCBvdXQgaWYgdGhlIGNvdW50IHRvIGJlIHJlYWQgaXMgbm90 IHZhbGlkICovCisJaWYgKGNvdW50IDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBJZiB0 aGUgdGFyZ2V0IHBhZ2UgaXMgaW4gYSBkaWZmZXJlbnQgc2VnbWVudCwgZnJlZSB0aGUgYnVmZmVy IGFuZC9vcgorCSAqIHRlbXBvcmFyeSBmaWxlIGRpc2sgc3BhY2Ugb2NjdXBpZWQgYnkgdGhlIHBy ZXZpb3VzIHNlZ21lbnQncyBkYXRhLgorCSAqIFNpbmNlIHBnX3dhbGR1bXAgbmV2ZXIgcmVxdWVz dHMgdGhlIHNhbWUgV0FMIGJ5dGVzIHR3aWNlLCBtb3ZpbmcgdG8gYQorCSAqIG5ldyBzZWdtZW50 IGltcGxpZXMgdGhlIHByZXZpb3VzIGJ1ZmZlcidzIGRhdGEgYW5kIHRoYXQgc2VnbWVudCB3aWxs CisJICogbm90IGJlIG5lZWRlZCBhZ2Fpbi4KKwkgKgorCSAqIEFmdGVyd2FyZCwgY2hlY2sgZm9y IHRoZSBuZXh0IHJlcXVpcmVkIFdBTCBzZWdtZW50J3MgcGh5c2ljYWwgZXhpc3RlbmNlCisJICog aW4gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgZmlyc3QgYmVmb3JlIGludm9raW5nIHRoZSBhcmNo aXZlIHN0cmVhbWVyLgorCSAqLworCWN1clNlZ05vID0gc3RhdGUtPnNlZy53c19zZWdubzsKKwlp ZiAoIVhMQnl0ZUluU2VnKHRhcmdldFBhZ2VQdHIsIGN1clNlZ05vLCBXYWxTZWdTeikpCisJewor CQljaGFyCQlmbmFtZVtNQVhGTkFNRUxFTl07CisJCVhMb2dTZWdObwluZXh0U2VnTm87CisKKwkJ LyoKKwkJICogQ2FsY3VsYXRlIHRoZSBuZXh0IFdBTCBzZWdtZW50IHRvIGJlIGRlY29kZWQgZnJv bSB0aGUgZ2l2ZW4gcGFnZQorCQkgKiBwb2ludGVyCisJCSAqLworCQlYTEJ5dGVUb1NlZyh0YXJn ZXRQYWdlUHRyLCBuZXh0U2VnTm8sIFdhbFNlZ1N6KTsKKwkJc3RhdGUtPnNlZy53c190bGkgPSBw cml2YXRlLT50aW1lbGluZTsKKwkJc3RhdGUtPnNlZy53c19zZWdubyA9IG5leHRTZWdObzsKKwor CQkvKiBDbG9zZSB0aGUgV0FMIHNlZ21lbnQgZmlsZSBpZiBpdCBpcyBjdXJyZW50bHkgb3BlbiAq LworCQlpZiAoc3RhdGUtPnNlZy53c19maWxlID49IDApCisJCXsKKwkJCWNsb3NlKHN0YXRlLT5z ZWcud3NfZmlsZSk7CisJCQlzdGF0ZS0+c2VnLndzX2ZpbGUgPSAtMTsKKwkJfQorCisJCS8qCisJ CSAqIElmIGluIHByZS1yZWFkaW5nIG1vZGUgKHByaW9yIHRvIGFjdHVhbCBkZWNvZGluZyksIGRv IG5vdCBkZWxldGUKKwkJICogYW55IGVudHJpZXMgdGhhdCBtaWdodCBiZSByZXF1ZXN0ZWQgYWdh aW4gb25jZSB0aGUgZGVjb2RpbmcgbG9vcAorCQkgKiBzdGFydHMuIEZvciBtb3JlIGRldGFpbHMs IHNlZSB0aGUgY29tbWVudHMgaW4KKwkJICogcmVhZF9hcmNoaXZlX3dhbF9wYWdlKCkuCisJCSAq LworCQlpZiAocHJpdmF0ZS0+ZGVjb2Rpbmdfc3RhcnRlZCAmJiBjdXJTZWdObyA8IG5leHRTZWdO bykKKwkJeworCQkJWExvZ0ZpbGVOYW1lKGZuYW1lLCBzdGF0ZS0+c2VnLndzX3RsaSwgY3VyU2Vn Tm8sIFdhbFNlZ1N6KTsKKwkJCWZyZWVfYXJjaGl2ZV93YWxfZW50cnkoZm5hbWUsIHByaXZhdGUp OworCQl9CisKKwkJLyoKKwkJICogSWYgdGhlIG5leHQgc2VnbWVudCBleGlzdHMsIG9wZW4gaXQg YW5kIGNvbnRpbnVlIHJlYWRpbmcgZnJvbSB0aGVyZQorCQkgKi8KKwkJWExvZ0ZpbGVOYW1lKGZu YW1lLCBzdGF0ZS0+c2VnLndzX3RsaSwgbmV4dFNlZ05vLCBXYWxTZWdTeik7CisJCXN0YXRlLT5z ZWcud3NfZmlsZSA9IG9wZW5fZmlsZV9pbl9kaXJlY3RvcnkoVG1wV2FsU2VnRGlyLCBmbmFtZSk7 CisJfQorCisJLyogQ29udGludWUgcmVhZGluZyBmcm9tIHRoZSBvcGVuIFdBTCBzZWdtZW50LCBp ZiBhbnkgKi8KKwlpZiAoc3RhdGUtPnNlZy53c19maWxlID49IDApCisJCXJldHVybiBXQUxEdW1w UmVhZFBhZ2Uoc3RhdGUsIHRhcmdldFBhZ2VQdHIsIGNvdW50LCB0YXJnZXRQdHIsCisJCQkJCQkJ ICAgcmVhZEJ1ZmYpOworCisJLyogT3RoZXJ3aXNlLCByZWFkIHRoZSBXQUwgcGFnZSBmcm9tIHRo ZSBhcmNoaXZlIHN0cmVhbWVyICovCisJcmV0dXJuIHJlYWRfYXJjaGl2ZV93YWxfcGFnZShwcml2 YXRlLCB0YXJnZXRQYWdlUHRyLCBjb3VudCwgcmVhZEJ1ZmYsCisJCQkJCQkJCSBXYWxTZWdTeik7 Cit9CisKIC8qCiAgKiBCb29sZWFuIHRvIHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBXQUwgcmVj b3JkIG1hdGNoZXMgYSBzcGVjaWZpYyByZWxhdGlvbgogICogYW5kIG9wdGlvbmFsbHkgYmxvY2su CkBAIC03NzcsOCArODc0LDggQEAgdXNhZ2Uodm9pZCkKIAlwcmludGYoXygiICAtRiwgLS1mb3Jr PUZPUksgICAgICAgIG9ubHkgc2hvdyByZWNvcmRzIHRoYXQgbW9kaWZ5IGJsb2NrcyBpbiBmb3Jr IEZPUks7XG4iCiAJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCBuYW1lcyBhcmUg bWFpbiwgZnNtLCB2bSwgaW5pdFxuIikpOwogCXByaW50ZihfKCIgIC1uLCAtLWxpbWl0PU4gICAg ICAgICAgbnVtYmVyIG9mIHJlY29yZHMgdG8gZGlzcGxheVxuIikpOwotCXByaW50ZihfKCIgIC1w LCAtLXBhdGg9UEFUSCAgICAgICAgZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgV0FMIHNlZ21l bnQgZmlsZXMgb3IgYVxuIgotCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5 IHdpdGggYSAuL3BnX3dhbCB0aGF0IGNvbnRhaW5zIHN1Y2ggZmlsZXNcbiIKKwlwcmludGYoXygi ICAtcCwgLS1wYXRoPVBBVEggICAgICAgIGEgdGFyIGFyY2hpdmUgb3IgYSBkaXJlY3RvcnkgaW4g d2hpY2ggdG8gZmluZCBXQUwgc2VnbWVudCBmaWxlcyBvclxuIgorCQkJICIgICAgICAgICAgICAg ICAgICAgICAgICAgYSBkaXJlY3Rvcnkgd2l0aCBhIC4vcGdfd2FsIHRoYXQgY29udGFpbnMgc3Vj aCBmaWxlc1xuIgogCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQ6IGN1cnJl bnQgZGlyZWN0b3J5LCAuL3BnX3dhbCwgJFBHREFUQS9wZ193YWwpXG4iKSk7CiAJcHJpbnRmKF8o IiAgLXEsIC0tcXVpZXQgICAgICAgICAgICBkbyBub3QgcHJpbnQgYW55IG91dHB1dCwgZXhjZXB0 IGZvciBlcnJvcnNcbiIpKTsKIAlwcmludGYoXygiICAtciwgLS1ybWdyPVJNR1IgICAgICAgIG9u bHkgc2hvdyByZWNvcmRzIGdlbmVyYXRlZCBieSByZXNvdXJjZSBtYW5hZ2VyIFJNR1I7XG4iCkBA IC04MTAsNyArOTA3LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJWExvZ1JlY29y ZCAqcmVjb3JkOwogCVhMb2dSZWNQdHIJZmlyc3RfcmVjb3JkOwogCWNoYXIJICAgKndhbGRpciA9 IE5VTEw7CisJY2hhcgkgICAqd2FscGF0aCA9IE5VTEw7CiAJY2hhcgkgICAqZXJyb3Jtc2c7CisJ cGdfY29tcHJlc3NfYWxnb3JpdGhtIGNvbXByZXNzaW9uID0gUEdfQ09NUFJFU1NJT05fTk9ORTsK IAogCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gewogCQl7ImJrcC1kZXRh aWxzIiwgbm9fYXJndW1lbnQsIE5VTEwsICdiJ30sCkBAIC04NjgsNiArOTY3LDEwIEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXByaXZhdGUuc3RhcnRwdHIgPSBJbnZhbGlkWExvZ1Jl Y1B0cjsKIAlwcml2YXRlLmVuZHB0ciA9IEludmFsaWRYTG9nUmVjUHRyOwogCXByaXZhdGUuZW5k cHRyX3JlYWNoZWQgPSBmYWxzZTsKKwlwcml2YXRlLmRlY29kaW5nX3N0YXJ0ZWQgPSBmYWxzZTsK Kwlwcml2YXRlLmFyY2hpdmVfbmFtZSA9IE5VTEw7CisJcHJpdmF0ZS5zdGFydF9zZWdubyA9IDA7 CisJcHJpdmF0ZS5lbmRfc2Vnbm8gPSBVSU5UNjRfTUFYOwogCiAJY29uZmlnLnF1aWV0ID0gZmFs c2U7CiAJY29uZmlnLmJrcF9kZXRhaWxzID0gZmFsc2U7CkBAIC05NDMsNyArMTA0Niw3IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgJ3An OgotCQkJCXdhbGRpciA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCXdhbHBhdGggPSBwZ19zdHJk dXAob3B0YXJnKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ3EnOgogCQkJCWNvbmZpZy5xdWlldCA9 IHRydWU7CkBAIC0xMTA3LDEyICsxMjEwLDIxIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQlnb3RvIGJhZF9hcmd1bWVudDsKIAl9CiAKLQlpZiAod2FsZGlyICE9IE5VTEwpCisJaWYg KHdhbHBhdGggIT0gTlVMTCkKIAl7CisJCS8qIHZhbGlkYXRlIHBhdGggcG9pbnRzIHRvIHRhciBh cmNoaXZlICovCisJCWlmIChwYXJzZV90YXJfY29tcHJlc3NfYWxnb3JpdGhtKHdhbHBhdGgsICZj b21wcmVzc2lvbikpCisJCXsKKwkJCWNoYXIJICAgKmZuYW1lID0gTlVMTDsKKworCQkJc3BsaXRf cGF0aCh3YWxwYXRoLCAmd2FsZGlyLCAmZm5hbWUpOworCisJCQlwcml2YXRlLmFyY2hpdmVfbmFt ZSA9IGZuYW1lOworCQl9CiAJCS8qIHZhbGlkYXRlIHBhdGggcG9pbnRzIHRvIGRpcmVjdG9yeSAq LwotCQlpZiAoIXZlcmlmeV9kaXJlY3Rvcnkod2FsZGlyKSkKKwkJZWxzZSBpZiAoIXZlcmlmeV9k aXJlY3Rvcnkod2FscGF0aCkpCiAJCXsKLQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9wZW4g ZGlyZWN0b3J5IFwiJXNcIjogJW0iLCB3YWxkaXIpOworCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBu b3Qgb3BlbiBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIHdhbHBhdGgpOwogCQkJZ290byBiYWRfYXJn dW1lbnQ7CiAJCX0KIAl9CkBAIC0xMTI4LDYgKzEyNDAsMTcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJCWludAkJCWZkOwogCQlYTG9nU2VnTm8Jc2Vnbm87CiAKKwkJLyoKKwkJICog SWYgYSB0YXIgYXJjaGl2ZSBpcyBwYXNzZWQgdXNpbmcgdGhlIC0tcGF0aCBvcHRpb24sIGFsbCBv dGhlcgorCQkgKiBhcmd1bWVudHMgYmVjb21lIHVubmVjZXNzYXJ5LgorCQkgKi8KKwkJaWYgKHBy aXZhdGUuYXJjaGl2ZV9uYW1lKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoInVubmVjZXNzYXJ5IGNv bW1hbmQtbGluZSBhcmd1bWVudHMgc3BlY2lmaWVkIHdpdGggdGFyIGFyY2hpdmUgKGZpcnN0IGlz IFwiJXNcIikiLAorCQkJCQkJIGFyZ3Zbb3B0aW5kXSk7CisJCQlnb3RvIGJhZF9hcmd1bWVudDsK KwkJfQorCiAJCXNwbGl0X3BhdGgoYXJndltvcHRpbmRdLCAmZGlyZWN0b3J5LCAmZm5hbWUpOwog CiAJCWlmICh3YWxkaXIgPT0gTlVMTCAmJiBkaXJlY3RvcnkgIT0gTlVMTCkKQEAgLTExMzgsNjkg KzEyNjEsNzUgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgd2FsZGlyKTsKIAkJfQogCi0JCXdh bGRpciA9IGlkZW50aWZ5X3RhcmdldF9kaXJlY3Rvcnkod2FsZGlyLCBmbmFtZSwgJnByaXZhdGUu c2Vnc2l6ZSk7Ci0JCWZkID0gb3Blbl9maWxlX2luX2RpcmVjdG9yeSh3YWxkaXIsIGZuYW1lKTsK LQkJaWYgKGZkIDwgMCkKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiIs IGZuYW1lKTsKLQkJY2xvc2UoZmQpOwotCi0JCS8qIHBhcnNlIHBvc2l0aW9uIGZyb20gZmlsZSAq LwotCQlYTG9nRnJvbUZpbGVOYW1lKGZuYW1lLCAmcHJpdmF0ZS50aW1lbGluZSwgJnNlZ25vLCBw cml2YXRlLnNlZ3NpemUpOwotCi0JCWlmICghWExvZ1JlY1B0cklzVmFsaWQocHJpdmF0ZS5zdGFy dHB0cikpCi0JCQlYTG9nU2VnTm9PZmZzZXRUb1JlY1B0cihzZWdubywgMCwgcHJpdmF0ZS5zZWdz aXplLCBwcml2YXRlLnN0YXJ0cHRyKTsKLQkJZWxzZSBpZiAoIVhMQnl0ZUluU2VnKHByaXZhdGUu c3RhcnRwdHIsIHNlZ25vLCBwcml2YXRlLnNlZ3NpemUpKQorCQlpZiAoZm5hbWUgIT0gTlVMTCAm JiBwYXJzZV90YXJfY29tcHJlc3NfYWxnb3JpdGhtKGZuYW1lLCAmY29tcHJlc3Npb24pKQogCQl7 Ci0JCQlwZ19sb2dfZXJyb3IoInN0YXJ0IFdBTCBsb2NhdGlvbiAlWC8lMDhYIGlzIG5vdCBpbnNp ZGUgZmlsZSBcIiVzXCIiLAotCQkJCQkJIExTTl9GT1JNQVRfQVJHUyhwcml2YXRlLnN0YXJ0cHRy KSwKLQkJCQkJCSBmbmFtZSk7Ci0JCQlnb3RvIGJhZF9hcmd1bWVudDsKKwkJCXByaXZhdGUuYXJj aGl2ZV9uYW1lID0gZm5hbWU7CiAJCX0KLQotCQkvKiBubyBzZWNvbmQgZmlsZSBzcGVjaWZpZWQs IHNldCBlbmQgcG9zaXRpb24gKi8KLQkJaWYgKCEob3B0aW5kICsgMSA8IGFyZ2MpICYmICFYTG9n UmVjUHRySXNWYWxpZChwcml2YXRlLmVuZHB0cikpCi0JCQlYTG9nU2VnTm9PZmZzZXRUb1JlY1B0 cihzZWdubyArIDEsIDAsIHByaXZhdGUuc2Vnc2l6ZSwgcHJpdmF0ZS5lbmRwdHIpOwotCi0JCS8q IHBhcnNlIEVORFNFRyBpZiBwYXNzZWQgKi8KLQkJaWYgKG9wdGluZCArIDEgPCBhcmdjKQorCQll bHNlCiAJCXsKLQkJCVhMb2dTZWdObwllbmRzZWdubzsKLQotCQkJLyogaWdub3JlIGRpcmVjdG9y eSwgYWxyZWFkeSBoYXZlIHRoYXQgKi8KLQkJCXNwbGl0X3BhdGgoYXJndltvcHRpbmQgKyAxXSwg JmRpcmVjdG9yeSwgJmZuYW1lKTsKLQorCQkJd2FsZGlyID0gaWRlbnRpZnlfdGFyZ2V0X2RpcmVj dG9yeSh3YWxkaXIsIGZuYW1lLCAmcHJpdmF0ZS5zZWdzaXplKTsKIAkJCWZkID0gb3Blbl9maWxl X2luX2RpcmVjdG9yeSh3YWxkaXIsIGZuYW1lKTsKIAkJCWlmIChmZCA8IDApCiAJCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIiwgZm5hbWUpOwogCQkJY2xvc2UoZmQpOwog CiAJCQkvKiBwYXJzZSBwb3NpdGlvbiBmcm9tIGZpbGUgKi8KLQkJCVhMb2dGcm9tRmlsZU5hbWUo Zm5hbWUsICZwcml2YXRlLnRpbWVsaW5lLCAmZW5kc2Vnbm8sIHByaXZhdGUuc2Vnc2l6ZSk7CisJ CQlYTG9nRnJvbUZpbGVOYW1lKGZuYW1lLCAmcHJpdmF0ZS50aW1lbGluZSwgJnNlZ25vLCBwcml2 YXRlLnNlZ3NpemUpOwogCi0JCQlpZiAoZW5kc2Vnbm8gPCBzZWdubykKLQkJCQlwZ19mYXRhbCgi RU5EU0VHICVzIGlzIGJlZm9yZSBTVEFSVFNFRyAlcyIsCi0JCQkJCQkgYXJndltvcHRpbmQgKyAx XSwgYXJndltvcHRpbmRdKTsKKwkJCWlmICghWExvZ1JlY1B0cklzVmFsaWQocHJpdmF0ZS5zdGFy dHB0cikpCisJCQkJWExvZ1NlZ05vT2Zmc2V0VG9SZWNQdHIoc2Vnbm8sIDAsIHByaXZhdGUuc2Vn c2l6ZSwgcHJpdmF0ZS5zdGFydHB0cik7CisJCQllbHNlIGlmICghWExCeXRlSW5TZWcocHJpdmF0 ZS5zdGFydHB0ciwgc2Vnbm8sIHByaXZhdGUuc2Vnc2l6ZSkpCisJCQl7CisJCQkJcGdfbG9nX2Vy cm9yKCJzdGFydCBXQUwgbG9jYXRpb24gJVgvJTA4WCBpcyBub3QgaW5zaWRlIGZpbGUgXCIlc1wi IiwKKwkJCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKHByaXZhdGUuc3RhcnRwdHIpLAorCQkJCQkJCSBm bmFtZSk7CisJCQkJZ290byBiYWRfYXJndW1lbnQ7CisJCQl9CiAKLQkJCWlmICghWExvZ1JlY1B0 cklzVmFsaWQocHJpdmF0ZS5lbmRwdHIpKQotCQkJCVhMb2dTZWdOb09mZnNldFRvUmVjUHRyKGVu ZHNlZ25vICsgMSwgMCwgcHJpdmF0ZS5zZWdzaXplLAotCQkJCQkJCQkJCXByaXZhdGUuZW5kcHRy KTsKKwkJCS8qIG5vIHNlY29uZCBmaWxlIHNwZWNpZmllZCwgc2V0IGVuZCBwb3NpdGlvbiAqLwor CQkJaWYgKCEob3B0aW5kICsgMSA8IGFyZ2MpICYmICFYTG9nUmVjUHRySXNWYWxpZChwcml2YXRl LmVuZHB0cikpCisJCQkJWExvZ1NlZ05vT2Zmc2V0VG9SZWNQdHIoc2Vnbm8gKyAxLCAwLCBwcml2 YXRlLnNlZ3NpemUsIHByaXZhdGUuZW5kcHRyKTsKIAotCQkJLyogc2V0IHNlZ25vIHRvIGVuZHNl Z25vIGZvciBjaGVjayBvZiAtLWVuZCAqLwotCQkJc2Vnbm8gPSBlbmRzZWdubzsKLQkJfQorCQkJ LyogcGFyc2UgRU5EU0VHIGlmIHBhc3NlZCAqLworCQkJaWYgKG9wdGluZCArIDEgPCBhcmdjKQor CQkJeworCQkJCVhMb2dTZWdObwllbmRzZWdubzsKIAorCQkJCS8qIGlnbm9yZSBkaXJlY3Rvcnks IGFscmVhZHkgaGF2ZSB0aGF0ICovCisJCQkJc3BsaXRfcGF0aChhcmd2W29wdGluZCArIDFdLCAm ZGlyZWN0b3J5LCAmZm5hbWUpOwogCi0JCWlmICghWExCeXRlSW5TZWcocHJpdmF0ZS5lbmRwdHIs IHNlZ25vLCBwcml2YXRlLnNlZ3NpemUpICYmCi0JCQlwcml2YXRlLmVuZHB0ciAhPSAoc2Vnbm8g KyAxKSAqIHByaXZhdGUuc2Vnc2l6ZSkKLQkJewotCQkJcGdfbG9nX2Vycm9yKCJlbmQgV0FMIGxv Y2F0aW9uICVYLyUwOFggaXMgbm90IGluc2lkZSBmaWxlIFwiJXNcIiIsCi0JCQkJCQkgTFNOX0ZP Uk1BVF9BUkdTKHByaXZhdGUuZW5kcHRyKSwKLQkJCQkJCSBhcmd2W2FyZ2MgLSAxXSk7Ci0JCQln b3RvIGJhZF9hcmd1bWVudDsKKwkJCQlmZCA9IG9wZW5fZmlsZV9pbl9kaXJlY3Rvcnkod2FsZGly LCBmbmFtZSk7CisJCQkJaWYgKGZkIDwgMCkKKwkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVu IGZpbGUgXCIlc1wiIiwgZm5hbWUpOworCQkJCWNsb3NlKGZkKTsKKworCQkJCS8qIHBhcnNlIHBv c2l0aW9uIGZyb20gZmlsZSAqLworCQkJCVhMb2dGcm9tRmlsZU5hbWUoZm5hbWUsICZwcml2YXRl LnRpbWVsaW5lLCAmZW5kc2Vnbm8sIHByaXZhdGUuc2Vnc2l6ZSk7CisKKwkJCQlpZiAoZW5kc2Vn bm8gPCBzZWdubykKKwkJCQkJcGdfZmF0YWwoIkVORFNFRyAlcyBpcyBiZWZvcmUgU1RBUlRTRUcg JXMiLAorCQkJCQkJCSBhcmd2W29wdGluZCArIDFdLCBhcmd2W29wdGluZF0pOworCisJCQkJaWYg KCFYTG9nUmVjUHRySXNWYWxpZChwcml2YXRlLmVuZHB0cikpCisJCQkJCVhMb2dTZWdOb09mZnNl dFRvUmVjUHRyKGVuZHNlZ25vICsgMSwgMCwgcHJpdmF0ZS5zZWdzaXplLAorCQkJCQkJCQkJCQlw cml2YXRlLmVuZHB0cik7CisKKwkJCQkvKiBzZXQgc2Vnbm8gdG8gZW5kc2Vnbm8gZm9yIGNoZWNr IG9mIC0tZW5kICovCisJCQkJc2Vnbm8gPSBlbmRzZWdubzsKKwkJCX0KKworCQkJaWYgKCFYTEJ5 dGVJblNlZyhwcml2YXRlLmVuZHB0ciwgc2Vnbm8sIHByaXZhdGUuc2Vnc2l6ZSkgJiYKKwkJCQlw cml2YXRlLmVuZHB0ciAhPSAoc2Vnbm8gKyAxKSAqIHByaXZhdGUuc2Vnc2l6ZSkKKwkJCXsKKwkJ CQlwZ19sb2dfZXJyb3IoImVuZCBXQUwgbG9jYXRpb24gJVgvJTA4WCBpcyBub3QgaW5zaWRlIGZp bGUgXCIlc1wiIiwKKwkJCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKHByaXZhdGUuZW5kcHRyKSwKKwkJ CQkJCQkgYXJndlthcmdjIC0gMV0pOworCQkJCWdvdG8gYmFkX2FyZ3VtZW50OworCQkJfQogCQl9 CiAJfQotCWVsc2UKLQkJd2FsZGlyID0gaWRlbnRpZnlfdGFyZ2V0X2RpcmVjdG9yeSh3YWxkaXIs IE5VTEwsICZwcml2YXRlLnNlZ3NpemUpOworCWVsc2UgaWYgKCFwcml2YXRlLmFyY2hpdmVfbmFt ZSkKKwkJd2FsZGlyID0gaWRlbnRpZnlfdGFyZ2V0X2RpcmVjdG9yeSh3YWxwYXRoLCBOVUxMLCAm cHJpdmF0ZS5zZWdzaXplKTsKIAogCS8qIHdlIGRvbid0IGtub3cgd2hhdCB0byBwcmludCAqLwog CWlmICghWExvZ1JlY1B0cklzVmFsaWQocHJpdmF0ZS5zdGFydHB0cikpCkBAIC0xMjA5LDE1ICsx MzM4LDQ2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlnb3RvIGJhZF9hcmd1bWVu dDsKIAl9CiAKKwkvKiAtLWZvbGxvdyBpcyBub3Qgc3VwcG9ydGVkIHdpdGggdGFyIGFyY2hpdmVz ICovCisJaWYgKGNvbmZpZy5mb2xsb3cgJiYgcHJpdmF0ZS5hcmNoaXZlX25hbWUpCisJeworCQlw Z19sb2dfZXJyb3IoIi0tZm9sbG93IGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiByZWFkaW5nIGZyb20g YSB0YXIgYXJjaGl2ZSIpOworCQlnb3RvIGJhZF9hcmd1bWVudDsKKwl9CisKIAkvKiBkb25lIHdp dGggYXJndW1lbnQgcGFyc2luZywgZG8gdGhlIGFjdHVhbCB3b3JrICovCiAKIAkvKiB3ZSBoYXZl IGV2ZXJ5dGhpbmcgd2UgbmVlZCwgc3RhcnQgcmVhZGluZyAqLwotCXhsb2dyZWFkZXJfc3RhdGUg PQotCQlYTG9nUmVhZGVyQWxsb2NhdGUocHJpdmF0ZS5zZWdzaXplLCB3YWxkaXIsCi0JCQkJCQkg ICBYTF9ST1VUSU5FKC5wYWdlX3JlYWQgPSBXQUxEdW1wUmVhZFBhZ2UsCi0JCQkJCQkJCQkgIC5z ZWdtZW50X29wZW4gPSBXQUxEdW1wT3BlblNlZ21lbnQsCi0JCQkJCQkJCQkgIC5zZWdtZW50X2Ns b3NlID0gV0FMRHVtcENsb3NlU2VnbWVudCksCi0JCQkJCQkgICAmcHJpdmF0ZSk7CisJaWYgKHBy aXZhdGUuYXJjaGl2ZV9uYW1lKQorCXsKKwkJLyoKKwkJICogQSBOVUxMIFdBTCBkaXJlY3Rvcnkg aW5kaWNhdGVzIHRoYXQgdGhlIGFyY2hpdmUgZmlsZSBpcyBsb2NhdGVkIGluCisJCSAqIHRoZSBj dXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoZSBwZ193YWxkdW1wIGV4ZWN1dGlvbgorCQkg Ki8KKwkJaWYgKHdhbGRpciA9PSBOVUxMKQorCQkJd2FsZGlyID0gcGdfc3RyZHVwKCIuIik7CisK KwkJLyogU2V0IHVwIGZvciByZWFkaW5nIHRhciBmaWxlICovCisJCWluaXRfYXJjaGl2ZV9yZWFk ZXIoJnByaXZhdGUsIHdhbGRpciwgJnByaXZhdGUuc2Vnc2l6ZSwgY29tcHJlc3Npb24pOworCisJ CS8qIFJvdXRpbmUgdG8gZGVjb2RlIFdBTCBmaWxlcyBpbiB0YXIgYXJjaGl2ZSAqLworCQl4bG9n cmVhZGVyX3N0YXRlID0KKwkJCVhMb2dSZWFkZXJBbGxvY2F0ZShwcml2YXRlLnNlZ3NpemUsIHdh bGRpciwKKwkJCQkJCQkgICBYTF9ST1VUSU5FKC5wYWdlX3JlYWQgPSBUYXJXQUxEdW1wUmVhZFBh Z2UsCisJCQkJCQkJCQkJICAuc2VnbWVudF9vcGVuID0gVGFyV0FMRHVtcE9wZW5TZWdtZW50LAor CQkJCQkJCQkJCSAgLnNlZ21lbnRfY2xvc2UgPSBUYXJXQUxEdW1wQ2xvc2VTZWdtZW50KSwKKwkJ CQkJCQkgICAmcHJpdmF0ZSk7CisJfQorCWVsc2UKKwl7CisJCXhsb2dyZWFkZXJfc3RhdGUgPQor CQkJWExvZ1JlYWRlckFsbG9jYXRlKHByaXZhdGUuc2Vnc2l6ZSwgd2FsZGlyLAorCQkJCQkJCSAg IFhMX1JPVVRJTkUoLnBhZ2VfcmVhZCA9IFdBTER1bXBSZWFkUGFnZSwKKwkJCQkJCQkJCQkgIC5z ZWdtZW50X29wZW4gPSBXQUxEdW1wT3BlblNlZ21lbnQsCisJCQkJCQkJCQkJICAuc2VnbWVudF9j bG9zZSA9IFdBTER1bXBDbG9zZVNlZ21lbnQpLAorCQkJCQkJCSAgICZwcml2YXRlKTsKKwl9CisK IAlpZiAoIXhsb2dyZWFkZXJfc3RhdGUpCiAJCXBnX2ZhdGFsKCJvdXQgb2YgbWVtb3J5IHdoaWxl IGFsbG9jYXRpbmcgYSBXQUwgcmVhZGluZyBwcm9jZXNzb3IiKTsKIApAQCAtMTI0NSw2ICsxNDA1 LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYgKGNvbmZpZy5zdGF0cyA9PSB0 cnVlICYmICFjb25maWcucXVpZXQpCiAJCXN0YXRzLnN0YXJ0cHRyID0gZmlyc3RfcmVjb3JkOwog CisJLyogRmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIGRlY29kaW5nIGxvb3AgaGFzIGJlZW4gZW50 ZXJlZCAqLworCXByaXZhdGUuZGVjb2Rpbmdfc3RhcnRlZCA9IHRydWU7CisKIAlmb3IgKDs7KQog CXsKIAkJaWYgKHRpbWVfdG9fc3RvcCkKQEAgLTEzMjYsNiArMTQ4OSw5IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCiAJWExvZ1JlYWRlckZyZWUoeGxvZ3JlYWRlcl9zdGF0ZSk7CiAK KwlpZiAocHJpdmF0ZS5hcmNoaXZlX25hbWUpCisJCWZyZWVfYXJjaGl2ZV9yZWFkZXIoJnByaXZh dGUpOworCiAJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKIAogYmFkX2FyZ3VtZW50OgpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dhbGR1bXAuaCBiL3NyYy9iaW4vcGdfd2FsZHVtcC9w Z193YWxkdW1wLmgKaW5kZXggMDEzYjA1MTUwNmYuLjEwOTczOTBkNTc1IDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX3dhbGR1bXAvcGdfd2FsZHVtcC5oCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9w Z193YWxkdW1wLmgKQEAgLTEyLDYgKzEyLDE0IEBACiAjZGVmaW5lIFBHX1dBTERVTVBfSAogCiAj aW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvYXN0cmVhbWVy LmgiCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0cnVjdCBBcmNoaXZlZFdBTEZpbGU7 CitzdHJ1Y3QgQXJjaGl2ZWRXQUxfaGFzaDsKKworLyogVGVtcG9yYXJ5IGRpcmVjdG9yeSAqLwor ZXh0ZXJuIGNoYXIgKlRtcFdhbFNlZ0RpcjsKIAogLyogQ29udGFpbnMgdGhlIG5lY2Vzc2FyeSBp bmZvcm1hdGlvbiB0byBkcml2ZSBXQUwgZGVjb2RpbmcgKi8KIHR5cGVkZWYgc3RydWN0IFhMb2dE dW1wUHJpdmF0ZQpAQCAtMjEsNiArMjksNDYgQEAgdHlwZWRlZiBzdHJ1Y3QgWExvZ0R1bXBQcml2 YXRlCiAJWExvZ1JlY1B0cglzdGFydHB0cjsKIAlYTG9nUmVjUHRyCWVuZHB0cjsKIAlib29sCQll bmRwdHJfcmVhY2hlZDsKKwlib29sCQlkZWNvZGluZ19zdGFydGVkOworCisJLyogRmllbGRzIHJl cXVpcmVkIHRvIHJlYWQgV0FMIGZyb20gYXJjaGl2ZSAqLworCWNoYXIJICAgKmFyY2hpdmVfbmFt ZTsJLyogVGFyIGFyY2hpdmUgbmFtZSAqLworCWludAkJCWFyY2hpdmVfZmQ7CQkvKiBGaWxlIGRl c2NyaXB0b3IgZm9yIHRoZSBvcGVuIHRhciBmaWxlICovCisKKwlhc3RyZWFtZXIgICphcmNoaXZl X3N0cmVhbWVyOworCWNoYXIJICAgKmFyY2hpdmVfcmVhZF9idWY7CS8qIFJldXNhYmxlIHJlYWQg YnVmZmVyIGZvciBhcmNoaXZlIEkvTyAqLworCVNpemUJCWFyY2hpdmVfcmVhZF9idWZfc2l6ZTsK KworCS8qIFdoYXQgdGhlIGFyY2hpdmUgc3RyZWFtZXIgaXMgY3VycmVudGx5IHJlYWRpbmcgKi8K KwlzdHJ1Y3QgQXJjaGl2ZWRXQUxGaWxlICpjdXJfZmlsZTsKKworCS8qCisJICogSGFzaCB0YWJs ZSBvZiBhbGwgV0FMIGZpbGVzIHRoYXQgdGhlIGFyY2hpdmUgc3RyZWFtIGhhcyByZWFkLCBpbmNs dWRpbmcKKwkgKiB0aGUgb25lIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4KKwkgKi8KKwlzdHJ1Y3Qg QXJjaGl2ZWRXQUxfaGFzaCAqYXJjaGl2ZV93YWxfaHRhYjsKKworCS8qCisJICogQWx0aG91Z2gg dGhlc2UgdmFsdWVzIGNhbiBiZSBlYXNpbHkgZGVyaXZlZCBmcm9tIHN0YXJ0cHRyIGFuZCBlbmRw dHIsCisJICogZG9pbmcgc28gcmVwZWF0ZWRseSBmb3IgZWFjaCBhcmNoaXZlZCBtZW1iZXIgd291 bGQgYmUgaW5lZmZpY2llbnQsIGFzCisJICogaXQgd291bGQgaW52b2x2ZSByZWNhbGN1bGF0aW5n IGFuZCBmaWx0ZXJpbmcgb3V0IGlycmVsZXZhbnQgV0FMCisJICogc2VnbWVudHMuCisJICovCisJ WExvZ1NlZ05vCXN0YXJ0X3NlZ25vOworCVhMb2dTZWdObwllbmRfc2Vnbm87CiB9IFhMb2dEdW1w UHJpdmF0ZTsKIAorZXh0ZXJuIGludAlvcGVuX2ZpbGVfaW5fZGlyZWN0b3J5KGNvbnN0IGNoYXIg KmRpcmVjdG9yeSwgY29uc3QgY2hhciAqZm5hbWUpOworCitleHRlcm4gdm9pZCBpbml0X2FyY2hp dmVfcmVhZGVyKFhMb2dEdW1wUHJpdmF0ZSAqcHJpdmF0ZUluZm8sCisJCQkJCQkJCWNvbnN0IGNo YXIgKndhbGRpciwgaW50ICpXYWxTZWdTeiwKKwkJCQkJCQkJcGdfY29tcHJlc3NfYWxnb3JpdGht IGNvbXByZXNzaW9uKTsKK2V4dGVybiB2b2lkIGZyZWVfYXJjaGl2ZV9yZWFkZXIoWExvZ0R1bXBQ cml2YXRlICpwcml2YXRlSW5mbyk7CitleHRlcm4gaW50CXJlYWRfYXJjaGl2ZV93YWxfcGFnZShY TG9nRHVtcFByaXZhdGUgKnByaXZhdGVJbmZvLAorCQkJCQkJCQkgIFhMb2dSZWNQdHIgdGFyZ2V0 UGFnZVB0ciwKKwkJCQkJCQkJICBTaXplIGNvdW50LCBjaGFyICpyZWFkQnVmZiwKKwkJCQkJCQkJ ICBpbnQgV2FsU2VnU3opOworZXh0ZXJuIHZvaWQgZnJlZV9hcmNoaXZlX3dhbF9lbnRyeShjb25z dCBjaGFyICpmbmFtZSwKKwkJCQkJCQkJICAgWExvZ0R1bXBQcml2YXRlICpwcml2YXRlSW5mbyk7 CisKICNlbmRpZgkJCQkJCQkvKiBQR19XQUxEVU1QX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfd2FsZHVtcC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdfd2FsZHVtcC90LzAwMV9iYXNp Yy5wbAppbmRleCA1ZGI1ZDIwMTM2Zi4uNjk2MGJkNDZiYTQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfd2FsZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3BnX3dhbGR1bXAvdC8wMDFf YmFzaWMucGwKQEAgLTMsOSArMywxMyBAQAogCiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzIEZB VEFMID0+ICdhbGwnOwordXNlIEN3ZDsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwog dXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7Cit1c2UgTGlzdDo6 VXRpbCBxdyhzaHVmZmxlKTsKKworbXkgJHRhciA9ICRFTlZ7VEFSfTsKIAogcHJvZ3JhbV9oZWxw X29rKCdwZ193YWxkdW1wJyk7CiBwcm9ncmFtX3ZlcnNpb25fb2soJ3BnX3dhbGR1bXAnKTsKQEAg LTE2Miw2ICsxNjYsNDIgQEAgQ1JFQVRFIFRBQkxFU1BBQ0UgdHMxIExPQ0FUSU9OICckdGJsc3Bj X3BhdGgnOwogRFJPUCBUQUJMRVNQQUNFIHRzMTsKIH0pOwogCisjIFRlc3Q6IERlY29kZSBhIGNv bnRpbnVhdGlvbiByZWNvcmQgKGNvbnRyZWNvcmQpIHRoYXQgc3BhbnMgbXVsdGlwbGUgV0FMCisj IHNlZ21lbnRzLgorIworIyBOb3cgY29uc3VtZSBhbGwgcmVtYWluaW5nIHJvb20gaW4gdGhlIGN1 cnJlbnQgV0FMIHNlZ21lbnQsIGxlYXZpbmcKKyMgc3BhY2UgZW5vdWdoIG9ubHkgZm9yIHRoZSBz dGFydCBvZiBhIGxhcmdpc2ggcmVjb3JkLgorJG5vZGUtPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMn LCBxeworRE8gJCQKK0RFQ0xBUkUKKyAgICB3YWxfc2Vnc2l6ZSBpbnQgOj0gc2V0dGluZzo6aW50 IEZST00gcGdfc2V0dGluZ3MgV0hFUkUgbmFtZSA9ICd3YWxfc2VnbWVudF9zaXplJzsKKyAgICBy ZW1haW4gaW50OworICAgIGl0ZXJzICBpbnQgOj0gMDsKK0JFR0lOCisgICAgTE9PUAorICAgICAg ICBJTlNFUlQgaW50byB0MShiKQorICAgICAgICBzZWxlY3QgcmVwZWF0KGVuY29kZShzaGEyNTYo Zzo6dGV4dDo6Ynl0ZWEpLCAnaGV4JyksIChyYW5kb20oKSAqIDE1ICsgMSk6OmludCkKKyAgICAg ICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIGc7CisKKyAgICAgICAgcmVtYWluIDo9IHdh bF9zZWdzaXplIC0gKHBnX2N1cnJlbnRfd2FsX2luc2VydF9sc24oKSAtICcwLzAnKSAlIHdhbF9z ZWdzaXplOworICAgICAgICBJRiByZW1haW4gPCAyICogc2V0dGluZzo6aW50IGZyb20gcGdfc2V0 dGluZ3Mgd2hlcmUgbmFtZSA9ICdibG9ja19zaXplJyBUSEVOCisgICAgICAgICAgICBSQUlTRSBs b2cgJ2V4aXRpbmcgYWZ0ZXIgJSBpdGVyYXRpb25zLCAlIGJ5dGVzIHRvIGVuZCBvZiBXQUwgc2Vn bWVudCcsIGl0ZXJzLCByZW1haW47CisgICAgICAgICAgICBFWElUOworICAgICAgICBFTkQgSUY7 CisgICAgICAgIGl0ZXJzIDo9IGl0ZXJzICsgMTsKKyAgICBFTkQgTE9PUDsKK0VORAorJCQ7Cit9 KTsKKworbXkgJGNvbnRyZWNvcmRfbHNuID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSdTRUxFQ1QgcGdfY3VycmVudF93YWxfaW5zZXJ0X2xzbigpJyk7CisjIEdlbmVyYXRlIGNvbnRy ZWNvcmQgcmVjb3JkCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXF7U0VMRUNUIHBn X2xvZ2ljYWxfZW1pdF9tZXNzYWdlKHRydWUsICd0ZXN0IDAyNicsIHJlcGVhdCgneHl6eHonLCAx MjM0NTYpKX0KKyk7CisKIG15ICgkZW5kX2xzbiwgJGVuZF93YWxmaWxlKSA9IHNwbGl0IC9cfC8s CiAgICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAlxe1NFTEVDVCBwZ19jdXJyZW50X3dh bF9pbnNlcnRfbHNuKCksIHBnX3dhbGZpbGVfbmFtZShwZ19jdXJyZW50X3dhbF9pbnNlcnRfbHNu KCkpfQpAQCAtMTk4LDI4ICsyMzgsNiBAQCBjb21tYW5kX2xpa2UoCiAJXSwKIAlxci8uLywKIAkn cnVucyB3aXRoIHN0YXJ0IGFuZCBlbmQgc2VnbWVudCBzcGVjaWZpZWQnKTsKLWNvbW1hbmRfZmFp bHNfbGlrZSgKLQlbICdwZ193YWxkdW1wJywgJy0tcGF0aCcgPT4gJG5vZGUtPmRhdGFfZGlyIF0s Ci0JcXIvZXJyb3I6IG5vIHN0YXJ0IFdBTCBsb2NhdGlvbiBnaXZlbi8sCi0JJ3BhdGggb3B0aW9u IHJlcXVpcmVzIHN0YXJ0IGxvY2F0aW9uJyk7Ci1jb21tYW5kX2xpa2UoCi0JWwotCQkncGdfd2Fs ZHVtcCcsCi0JCSctLXBhdGgnID0+ICRub2RlLT5kYXRhX2RpciwKLQkJJy0tc3RhcnQnID0+ICRz dGFydF9sc24sCi0JCSctLWVuZCcgPT4gJGVuZF9sc24sCi0JXSwKLQlxci8uLywKLQkncnVucyB3 aXRoIHBhdGggb3B0aW9uIGFuZCBzdGFydCBhbmQgZW5kIGxvY2F0aW9ucycpOwotY29tbWFuZF9m YWlsc19saWtlKAotCVsKLQkJJ3BnX3dhbGR1bXAnLAotCQknLS1wYXRoJyA9PiAkbm9kZS0+ZGF0 YV9kaXIsCi0JCSctLXN0YXJ0JyA9PiAkc3RhcnRfbHNuLAotCV0sCi0JcXIvZXJyb3I6IGVycm9y IGluIFdBTCByZWNvcmQgYXQvLAotCSdmYWxsaW5nIG9mZiB0aGUgZW5kIG9mIHRoZSBXQUwgcmVz dWx0cyBpbiBhbiBlcnJvcicpOwotCiBjb21tYW5kX2xpa2UoCiAJWwogCQkncGdfd2FsZHVtcCcs ICctLXF1aWV0JywKQEAgLTIyNywyMiArMjQ1LDE2IEBAIGNvbW1hbmRfbGlrZSgKIAldLAogCXFy L14kLywKIAknbm8gb3V0cHV0IHdpdGggLS1xdWlldCBvcHRpb24nKTsKLWNvbW1hbmRfZmFpbHNf bGlrZSgKLQlbCi0JCSdwZ193YWxkdW1wJywgJy0tcXVpZXQnLAotCQknLS1wYXRoJyA9PiAkbm9k ZS0+ZGF0YV9kaXIsCi0JCSctLXN0YXJ0JyA9PiAkc3RhcnRfbHNuCi0JXSwKLQlxci9lcnJvcjog ZXJyb3IgaW4gV0FMIHJlY29yZCBhdC8sCi0JJ2Vycm9ycyBhcmUgc2hvd24gd2l0aCAtLXF1aWV0 Jyk7Ci0KIAogIyBUZXN0IGZvcjogRGlzcGxheSBhIG1lc3NhZ2UgdGhhdCB3ZSdyZSBza2lwcGlu ZyBkYXRhIGlmIGBmcm9tYAogIyB3YXNuJ3QgYSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiBhIHJl Y29yZC4KK3N1YiB0ZXN0X3BnX3dhbGR1bXBfc2tpcF9ieXRlcwogeworCW15ICgkcGF0aCwgJHN0 YXJ0bHNuLCAkZW5kbHNuKSA9IEBfOworCiAJIyBDb25zdHJ1Y3QgYSBuZXcgTFNOIHRoYXQgaXMg b25lIGJ5dGUgcGFzdCB0aGUgb3JpZ2luYWwKIAkjIHN0YXJ0X2xzbi4KLQlteSAoJHBhcnQxLCAk cGFydDIpID0gc3BsaXQgcXJ7L30sICRzdGFydF9sc247CisJbXkgKCRwYXJ0MSwgJHBhcnQyKSA9 IHNwbGl0IHFyey99LCAkc3RhcnRsc247CiAJbXkgJGxzbjIgPSBoZXggJHBhcnQyOwogCSRsc24y Kys7CiAJbXkgJG5ld19zdGFydCA9IHNwcmludGYoIiVzLyVYIiwgJHBhcnQxLCAkbHNuMik7CkBA IC0yNTIsNyArMjY0LDggQEAgY29tbWFuZF9mYWlsc19saWtlKAogCW15ICRyZXN1bHQgPSBJUEM6 OlJ1bjo6cnVuIFsKIAkJJ3BnX3dhbGR1bXAnLAogCQknLS1zdGFydCcgPT4gJG5ld19zdGFydCwK LQkJJG5vZGUtPmRhdGFfZGlyIC4gJy9wZ193YWwvJyAuICRzdGFydF93YWxmaWxlCisJCSctLWVu ZCcgPT4gJGVuZGxzbiwKKwkJJy0tcGF0aCcgPT4gJHBhdGgsCiAJICBdLAogCSAgJz4nID0+IFwk c3Rkb3V0LAogCSAgJzI+JyA9PiBcJHN0ZGVycjsKQEAgLTI2NiwxNSArMjc5LDE1IEBAIGNvbW1h bmRfZmFpbHNfbGlrZSgKIHN1YiB0ZXN0X3BnX3dhbGR1bXAKIHsKIAlsb2NhbCAkVGVzdDo6QnVp bGRlcjo6TGV2ZWwgPSAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgKyAxOwotCW15IEBvcHRzID0gQF87 CisJbXkgKCRwYXRoLCAkc3RhcnRsc24sICRlbmRsc24sIEBvcHRzKSA9IEBfOwogCiAJbXkgKCRz dGRvdXQsICRzdGRlcnIpOwogCiAJbXkgJHJlc3VsdCA9IElQQzo6UnVuOjpydW4gWwogCQkncGdf d2FsZHVtcCcsCi0JCSctLXBhdGgnID0+ICRub2RlLT5kYXRhX2RpciwKLQkJJy0tc3RhcnQnID0+ ICRzdGFydF9sc24sCi0JCSctLWVuZCcgPT4gJGVuZF9sc24sCisJCSctLXN0YXJ0JyA9PiAkc3Rh cnRsc24sCisJCSctLWVuZCcgPT4gJGVuZGxzbiwKKwkJJy0tcGF0aCcgPT4gJHBhdGgsCiAJCUBv cHRzCiAJICBdLAogCSAgJz4nID0+IFwkc3Rkb3V0LApAQCAtMjg2LDQwICsyOTksMTQ1IEBAIHN1 YiB0ZXN0X3BnX3dhbGR1bXAKIAlyZXR1cm4gQGxpbmVzOwogfQogCi1teSBAbGluZXM7CisjIENy ZWF0ZSBhIHRhciBhcmNoaXZlLCBzb3J0aW5nIHRoZSBmaWxlIG9yZGVyCitzdWIgZ2VuZXJhdGVf YXJjaGl2ZQoreworCW15ICgkYXJjaGl2ZSwgJGRpcmVjdG9yeSwgJGNvbXByZXNzaW9uX2ZsYWdz KSA9IEBfOwogCi1AbGluZXMgPSB0ZXN0X3BnX3dhbGR1bXA7Ci1pcyhncmVwKCEvXnJtZ3I6IFx3 LywgQGxpbmVzKSwgMCwgJ2FsbCBvdXRwdXQgbGluZXMgYXJlIHJtZ3IgbGluZXMnKTsKKwlteSBA ZmlsZXM7CisJb3BlbmRpciBteSAkZGgsICRkaXJlY3Rvcnkgb3IgZGllICJvcGVuZGlyOiAkISI7 CisJd2hpbGUgKG15ICRlbnRyeSA9IHJlYWRkaXIgJGRoKSB7CisJCSMgU2tpcCAnLicgYW5kICcu LicKKwkJbmV4dCBpZiAkZW50cnkgZXEgJy4nIHx8ICRlbnRyeSBlcSAnLi4nOworCQlwdXNoIEBm aWxlcywgJGVudHJ5OworCX0KKwljbG9zZWRpciAkZGg7CiAKLUBsaW5lcyA9IHRlc3RfcGdfd2Fs ZHVtcCgnLS1saW1pdCcgPT4gNik7Ci1pcyhAbGluZXMsIDYsICdsaW1pdCBvcHRpb24gb2JzZXJ2 ZWQnKTsKKwlAZmlsZXMgPSBzaHVmZmxlIEBmaWxlczsKIAotQGxpbmVzID0gdGVzdF9wZ193YWxk dW1wKCctLWZ1bGxwYWdlJyk7Ci1pcyhncmVwKCEvXnJtZ3I6LipcYkZQV1xiLywgQGxpbmVzKSwg MCwgJ2FsbCBvdXRwdXQgbGluZXMgYXJlIEZQVycpOworCSMgbW92ZSBpbnRvIHRoZSBXQUwgZGly ZWN0b3J5IGJlZm9yZSBhcmNoaXZpbmcgZmlsZXMKKwlteSAkY3dkID0gZ2V0Y3dkOworCWNoZGly KCRkaXJlY3RvcnkpIHx8IGRpZSAiY2hkaXI6ICQhIjsKKwljb21tYW5kX29rKFskdGFyLCAkY29t cHJlc3Npb25fZmxhZ3MsICRhcmNoaXZlLCBAZmlsZXNdKTsKKwljaGRpcigkY3dkKSB8fCBkaWUg ImNoZGlyOiAkISI7Cit9CiAKLUBsaW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgnLS1zdGF0cycpOwot bGlrZSgkbGluZXNbMF0sIHFyL1dBTCBzdGF0aXN0aWNzLywgInN0YXRpc3RpY3Mgb24gc3Rkb3V0 Iik7Ci1pcyhncmVwKC9ecm1ncjovLCBAbGluZXMpLCAwLCAnbm8gcm1nciBsaW5lcyBvdXRwdXQn KTsKK215ICR0bXBfZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBkaXJfc2hvcnQo KTsKIAotQGxpbmVzID0gdGVzdF9wZ193YWxkdW1wKCctLXN0YXRzPXJlY29yZCcpOwotbGlrZSgk bGluZXNbMF0sIHFyL1dBTCBzdGF0aXN0aWNzLywgInN0YXRpc3RpY3Mgb24gc3Rkb3V0Iik7Ci1p cyhncmVwKC9ecm1ncjovLCBAbGluZXMpLCAwLCAnbm8gcm1nciBsaW5lcyBvdXRwdXQnKTsKK215 IEBzY2VuYXJpb3MgPSAoCisJeworCQkncGF0aCcgPT4gJG5vZGUtPmRhdGFfZGlyLAorCQknaXNf YXJjaGl2ZScgPT4gMCwKKwkJJ2VuYWJsZWQnID0+IDEKKwl9LAorCXsKKwkJJ3BhdGgnID0+ICIk dG1wX2Rpci9wZ193YWwudGFyIiwKKwkJJ2NvbXByZXNzaW9uX21ldGhvZCcgPT4gJ25vbmUnLAor CQknY29tcHJlc3Npb25fZmxhZ3MnID0+ICctY2YnLAorCQknaXNfYXJjaGl2ZScgPT4gMSwKKwkJ J2VuYWJsZWQnID0+IDEKKwl9LAorCXsKKwkJJ3BhdGgnID0+ICIkdG1wX2Rpci9wZ193YWwudGFy Lmd6IiwKKwkJJ2NvbXByZXNzaW9uX21ldGhvZCcgPT4gJ2d6aXAnLAorCQknY29tcHJlc3Npb25f ZmxhZ3MnID0+ICctY3pmJywKKwkJJ2lzX2FyY2hpdmUnID0+IDEsCisJCSdlbmFibGVkJyA9PiBj aGVja19wZ19jb25maWcoIiNkZWZpbmUgSEFWRV9MSUJaIDEiKQorCX0pOwogCi1AbGluZXMgPSB0 ZXN0X3BnX3dhbGR1bXAoJy0tcm1ncicgPT4gJ0J0cmVlJyk7Ci1pcyhncmVwKCEvXnJtZ3I6IEJ0 cmVlLywgQGxpbmVzKSwgMCwgJ29ubHkgQnRyZWUgbGluZXMnKTsKK2ZvciBteSAkc2NlbmFyaW8g KEBzY2VuYXJpb3MpCit7CisJbXkgJHBhdGggPSAkc2NlbmFyaW8tPnsncGF0aCd9OwogCi1AbGlu ZXMgPSB0ZXN0X3BnX3dhbGR1bXAoJy0tZm9yaycgPT4gJ2luaXQnKTsKLWlzKGdyZXAoIS9mb3Jr IGluaXQvLCBAbGluZXMpLCAwLCAnb25seSBpbml0IGZvcmsgbGluZXMnKTsKKwlTS0lQOgorCXsK KwkJc2tpcCAidGFyIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSIsIDU2CisJCSAgaWYgIWRlZmlu ZWQgJHRhciAmJiAkc2NlbmFyaW8tPnsnaXNfYXJjaGl2ZSd9OworCQlza2lwICIkc2NlbmFyaW8t PnsnY29tcHJlc3Npb25fbWV0aG9kJ30gY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCBieSB0aGlz IGJ1aWxkIiwgNTYKKwkJICBpZiAhJHNjZW5hcmlvLT57J2VuYWJsZWQnfSAmJiAkc2NlbmFyaW8t PnsnaXNfYXJjaGl2ZSd9OwogCi1AbGluZXMgPSB0ZXN0X3BnX3dhbGR1bXAoCi0JJy0tcmVsYXRp b24nID0+ICIkZGVmYXVsdF90c19vaWQvJHBvc3RncmVzX2RiX29pZC8kcmVsX3QxX29pZCIpOwot aXMoZ3JlcCghL3JlbCAkZGVmYXVsdF90c19vaWRcLyRwb3N0Z3Jlc19kYl9vaWRcLyRyZWxfdDFf b2lkLywgQGxpbmVzKSwKLQkwLCAnb25seSBsaW5lcyBmb3Igc2VsZWN0ZWQgcmVsYXRpb24nKTsK KwkJICAjIGNyZWF0ZSBwZ193YWwgYXJjaGl2ZQorCQkgIGlmICgkc2NlbmFyaW8tPnsnaXNfYXJj aGl2ZSd9KQorCQkgIHsKKwkJCSAgZ2VuZXJhdGVfYXJjaGl2ZSgkcGF0aCwKKwkJCQkgICRub2Rl LT5kYXRhX2RpciAuICcvcGdfd2FsJywKKwkJCQkgICRzY2VuYXJpby0+eydjb21wcmVzc2lvbl9m bGFncyd9KTsKKwkJICB9CiAKLUBsaW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgKLQknLS1yZWxhdGlv bicgPT4gIiRkZWZhdWx0X3RzX29pZC8kcG9zdGdyZXNfZGJfb2lkLyRyZWxfaTFhX29pZCIsCi0J Jy0tYmxvY2snID0+IDEpOwotaXMoZ3JlcCghL1xiYmxrIDFcYi8sIEBsaW5lcyksIDAsICdvbmx5 IGxpbmVzIGZvciBzZWxlY3RlZCBibG9jaycpOworCQljb21tYW5kX2ZhaWxzX2xpa2UoCisJCQlb ICdwZ193YWxkdW1wJywgJy0tcGF0aCcgPT4gJHBhdGggXSwKKwkJCXFyL2Vycm9yOiBubyBzdGFy dCBXQUwgbG9jYXRpb24gZ2l2ZW4vLAorCQkJJ3BhdGggb3B0aW9uIHJlcXVpcmVzIHN0YXJ0IGxv Y2F0aW9uJyk7CisJCWNvbW1hbmRfbGlrZSgKKwkJCVsKKwkJCQkncGdfd2FsZHVtcCcsCisJCQkJ Jy0tcGF0aCcgPT4gJHBhdGgsCisJCQkJJy0tc3RhcnQnID0+ICRzdGFydF9sc24sCisJCQkJJy0t ZW5kJyA9PiAkZW5kX2xzbiwKKwkJCV0sCisJCQlxci8uLywKKwkJCSdydW5zIHdpdGggcGF0aCBv cHRpb24gYW5kIHN0YXJ0IGFuZCBlbmQgbG9jYXRpb25zJyk7CisJCWNvbW1hbmRfZmFpbHNfbGlr ZSgKKwkJCVsKKwkJCQkncGdfd2FsZHVtcCcsCisJCQkJJy0tcGF0aCcgPT4gJHBhdGgsCisJCQkJ Jy0tc3RhcnQnID0+ICRzdGFydF9sc24sCisJCQldLAorCQkJcXIvZXJyb3I6IGVycm9yIGluIFdB TCByZWNvcmQgYXQvLAorCQkJJ2ZhbGxpbmcgb2ZmIHRoZSBlbmQgb2YgdGhlIFdBTCByZXN1bHRz IGluIGFuIGVycm9yJyk7CiAKKwkJY29tbWFuZF9mYWlsc19saWtlKAorCQkJWworCQkJCSdwZ193 YWxkdW1wJywgJy0tcXVpZXQnLAorCQkJCSctLXBhdGgnID0+ICRwYXRoLAorCQkJCSctLXN0YXJ0 JyA9PiAkc3RhcnRfbHNuCisJCQldLAorCQkJcXIvZXJyb3I6IGVycm9yIGluIFdBTCByZWNvcmQg YXQvLAorCQkJJ2Vycm9ycyBhcmUgc2hvd24gd2l0aCAtLXF1aWV0Jyk7CisKKwkJdGVzdF9wZ193 YWxkdW1wX3NraXBfYnl0ZXMoJHBhdGgsICRzdGFydF9sc24sICRlbmRfbHNuKTsKKworCQlteSBA bGluZXMgPSB0ZXN0X3BnX3dhbGR1bXAoJHBhdGgsICRzdGFydF9sc24sICRlbmRfbHNuKTsKKwkJ aXMoZ3JlcCghL15ybWdyOiBcdy8sIEBsaW5lcyksIDAsICdhbGwgb3V0cHV0IGxpbmVzIGFyZSBy bWdyIGxpbmVzJyk7CisKKwkJQGxpbmVzID0gdGVzdF9wZ193YWxkdW1wKCRwYXRoLCAkY29udHJl Y29yZF9sc24sICRlbmRfbHNuKTsKKwkJaXMoZ3JlcCghL15ybWdyOiBcdy8sIEBsaW5lcyksIDAs ICdhbGwgb3V0cHV0IGxpbmVzIGFyZSBybWdyIGxpbmVzJyk7CisKKwkJdGVzdF9wZ193YWxkdW1w X3NraXBfYnl0ZXMoJHBhdGgsICRjb250cmVjb3JkX2xzbiwgJGVuZF9sc24pOworCisJCUBsaW5l cyA9IHRlc3RfcGdfd2FsZHVtcCgkcGF0aCwgJHN0YXJ0X2xzbiwgJGVuZF9sc24sICctLWxpbWl0 JyA9PiA2KTsKKwkJaXMoQGxpbmVzLCA2LCAnbGltaXQgb3B0aW9uIG9ic2VydmVkJyk7CisKKwkJ QGxpbmVzID0gdGVzdF9wZ193YWxkdW1wKCRwYXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xzbiwgJy0t ZnVsbHBhZ2UnKTsKKwkJaXMoZ3JlcCghL15ybWdyOi4qXGJGUFdcYi8sIEBsaW5lcyksIDAsICdh bGwgb3V0cHV0IGxpbmVzIGFyZSBGUFcnKTsKKworCQlAbGluZXMgPSB0ZXN0X3BnX3dhbGR1bXAo JHBhdGgsICRzdGFydF9sc24sICRlbmRfbHNuLCAnLS1zdGF0cycpOworCQlsaWtlKCRsaW5lc1sw XSwgcXIvV0FMIHN0YXRpc3RpY3MvLCAic3RhdGlzdGljcyBvbiBzdGRvdXQiKTsKKwkJaXMoZ3Jl cCgvXnJtZ3I6LywgQGxpbmVzKSwgMCwgJ25vIHJtZ3IgbGluZXMgb3V0cHV0Jyk7CisKKwkJQGxp bmVzID0gdGVzdF9wZ193YWxkdW1wKCRwYXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xzbiwgJy0tc3Rh dHM9cmVjb3JkJyk7CisJCWxpa2UoJGxpbmVzWzBdLCBxci9XQUwgc3RhdGlzdGljcy8sICJzdGF0 aXN0aWNzIG9uIHN0ZG91dCIpOworCQlpcyhncmVwKC9ecm1ncjovLCBAbGluZXMpLCAwLCAnbm8g cm1nciBsaW5lcyBvdXRwdXQnKTsKKworCQlAbGluZXMgPSB0ZXN0X3BnX3dhbGR1bXAoJHBhdGgs ICRzdGFydF9sc24sICRlbmRfbHNuLCAnLS1ybWdyJyA9PiAnQnRyZWUnKTsKKwkJaXMoZ3JlcCgh L15ybWdyOiBCdHJlZS8sIEBsaW5lcyksIDAsICdvbmx5IEJ0cmVlIGxpbmVzJyk7CisKKwkJQGxp bmVzID0gdGVzdF9wZ193YWxkdW1wKCRwYXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xzbiwgJy0tZm9y aycgPT4gJ2luaXQnKTsKKwkJaXMoZ3JlcCghL2ZvcmsgaW5pdC8sIEBsaW5lcyksIDAsICdvbmx5 IGluaXQgZm9yayBsaW5lcycpOworCisJCUBsaW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgkcGF0aCwg JHN0YXJ0X2xzbiwgJGVuZF9sc24sCisJCQknLS1yZWxhdGlvbicgPT4gIiRkZWZhdWx0X3RzX29p ZC8kcG9zdGdyZXNfZGJfb2lkLyRyZWxfdDFfb2lkIik7CisJCWlzKGdyZXAoIS9yZWwgJGRlZmF1 bHRfdHNfb2lkXC8kcG9zdGdyZXNfZGJfb2lkXC8kcmVsX3QxX29pZC8sIEBsaW5lcyksCisJCQkw LCAnb25seSBsaW5lcyBmb3Igc2VsZWN0ZWQgcmVsYXRpb24nKTsKKworCQlAbGluZXMgPSB0ZXN0 X3BnX3dhbGR1bXAoJHBhdGgsICRzdGFydF9sc24sICRlbmRfbHNuLAorCQkJJy0tcmVsYXRpb24n ID0+ICIkZGVmYXVsdF90c19vaWQvJHBvc3RncmVzX2RiX29pZC8kcmVsX2kxYV9vaWQiLAorCQkJ Jy0tYmxvY2snID0+IDEpOworCQlpcyhncmVwKCEvXGJibGsgMVxiLywgQGxpbmVzKSwgMCwgJ29u bHkgbGluZXMgZm9yIHNlbGVjdGVkIGJsb2NrJyk7CisKKwkJIyBDbGVhbnVwLgorCQl1bmxpbmsg JHBhdGggaWYgJHNjZW5hcmlvLT57J2lzX2FyY2hpdmUnfTsKKwl9Cit9CiAKIGRvbmVfdGVzdGlu ZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA1MmY4NjAzYTdiZS4uNDk2MWMzMDI0 YWYgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xNDcsNiArMTQ3LDkgQEAgQXJjaGl2 ZU9wdHMKIEFyY2hpdmVTaHV0ZG93bkNCCiBBcmNoaXZlU3RhcnR1cENCCiBBcmNoaXZlU3RyZWFt U3RhdGUKK0FyY2hpdmVkV0FMRmlsZQorQXJjaGl2ZWRXQUxfaGFzaAorQXJjaGl2ZWRXQUxfaXRl cmF0b3IKIEFyY2hpdmVyT3V0cHV0CiBBcmNoaXZlclN0YWdlCiBBcnJheUFuYWx5emVFeHRyYURh dGEKQEAgLTM1NDAsNiArMzU0Myw3IEBAIGFzdHJlYW1lcl9yZWNvdmVyeV9pbmplY3RvcgogYXN0 cmVhbWVyX3Rhcl9hcmNoaXZlcgogYXN0cmVhbWVyX3Rhcl9wYXJzZXIKIGFzdHJlYW1lcl92ZXJp ZnkKK2FzdHJlYW1lcl93YWxkdW1wCiBhc3RyZWFtZXJfenN0ZF9mcmFtZQogYXV0aF9wYXNzd29y ZF9ob29rX3R5cAogYXV0b3ZhY190YWJsZQotLSAKMi40Ny4xCgo= --0000000000006f20d1064d4b0036 Content-Type: application/x-patch; name="v18-0004-pg_verifybackup-Enable-WAL-parsing-for-tar-forma.patch" Content-Disposition: attachment; filename="v18-0004-pg_verifybackup-Enable-WAL-parsing-for-tar-forma.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmvypt0d3 RnJvbSBiM2U3OTQ5OTU5Y2NhMGQzYzUyNThjNjNjMTcyNzAyNzk0ZjgwNTFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5lLm5ldD4K RGF0ZTogV2VkLCAxMSBNYXIgMjAyNiAxMToyNjozNiAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjE4 IDQvNF0gcGdfdmVyaWZ5YmFja3VwOiBFbmFibGUgV0FMIHBhcnNpbmcgZm9yIHRhci1mb3JtYXQK IGJhY2t1cHMKCk5vdyB0aGF0IHBnX3dhbGR1bXAgc3VwcG9ydHMgcmVhZGluZyBXQUwgZnJvbSB0 YXIgYXJjaGl2ZXMsIHJlbW92ZSB0aGUKcmVzdHJpY3Rpb24gdGhhdCBmb3JjZWQgLS1uby1wYXJz ZS13YWwgZm9yIHRhci1mb3JtYXQgYmFja3Vwcy4KCnBnX3ZlcmlmeWJhY2t1cCBub3cgYXV0b21h dGljYWxseSBsb2NhdGVzIHRoZSBXQUwgYXJjaGl2ZTogaXQgbG9va3MgZm9yCmEgc2VwYXJhdGUg cGdfd2FsLnRhciBmaXJzdCwgdGhlbiBmYWxscyBiYWNrIHRvIHRoZSBtYWluIGJhc2UudGFyLiAg QQpuZXcgLS13YWwtcGF0aCBvcHRpb24gKHJlcGxhY2luZyB0aGUgb2xkIC0td2FsLWRpcmVjdG9y eSwgd2hpY2ggaXMga2VwdAphcyBhIHNpbGVudCBhbGlhcykgYWNjZXB0cyBlaXRoZXIgYSBkaXJl Y3Rvcnkgb3IgYSB0YXIgYXJjaGl2ZSBwYXRoLgoKVGhlIGRlZmF1bHQgV0FMIGRpcmVjdG9yeSBw cmVwYXJhdGlvbiBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgYmFja3VwCmZvcm1hdCBpcyBrbm93biwg c2luY2UgdGFyLWZvcm1hdCBiYWNrdXBzIHJlc29sdmUgdGhlIFdBTCBwYXRoCmRpZmZlcmVudGx5 IGZyb20gcGxhaW4tZm9ybWF0IG9uZXMuCgpBdXRob3I6IEFtdWwgU3VsIDxzdWxhbXVsQGdtYWls LmNvbT4KUmV2aWV3ZWQtYnk6IFJvYmVydCBIYWFzIDxyb2JlcnRtaGFhc0BnbWFpbC5jb20+ClJl dmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRlcnByaXNlZGIuY29tPgpS ZXZpZXdlZC1ieTogQW5kcmV3IER1bnN0YW4gPGFuZHJld0BkdW5zbGFuZS5uZXQ+CmRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FBSl9iOTRicWRXTjNoMkotUHp6elEyTnBid2N0NVpR SGdnbl9Rb1lHaEMycm4tPVdRQG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9w Z192ZXJpZnliYWNrdXAuc2dtbCAgICAgICAgIHwgMTQgKystCiBzcmMvYmluL3BnX3ZlcmlmeWJh Y2t1cC9wZ192ZXJpZnliYWNrdXAuYyAgICAgfCA4OSArKysrKysrKysrKystLS0tLS0tCiBzcmMv YmluL3BnX3ZlcmlmeWJhY2t1cC90LzAwMl9hbGdvcml0aG0ucGwgICAgfCAgNCAtCiBzcmMvYmlu L3BnX3ZlcmlmeWJhY2t1cC90LzAwM19jb3JydXB0aW9uLnBsICAgfCAgNCArLQogc3JjL2Jpbi9w Z192ZXJpZnliYWNrdXAvdC8wMDdfd2FsLnBsICAgICAgICAgIHwgMjAgKysrKy0KIHNyYy9iaW4v cGdfdmVyaWZ5YmFja3VwL3QvMDA4X3VudGFyLnBsICAgICAgICB8ICA1ICstCiBzcmMvYmluL3Bn X3ZlcmlmeWJhY2t1cC90LzAxMF9jbGllbnRfdW50YXIucGwgfCAgNSArLQogNyBmaWxlcyBjaGFu Z2VkLCA4NSBpbnNlcnRpb25zKCspLCA1NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcmVmL3BnX3ZlcmlmeWJhY2t1cC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ192 ZXJpZnliYWNrdXAuc2dtbAppbmRleCA2MWMxMjk3NWU0YS4uMTY5NWNmZTkxYzggMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfdmVyaWZ5YmFja3VwLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL3JlZi9wZ192ZXJpZnliYWNrdXAuc2dtbApAQCAtMzYsMTAgKzM2LDcgQEAgUG9zdGdyZVNR TCBkb2N1bWVudGF0aW9uCiAgICA8bGl0ZXJhbD5iYWNrdXBfbWFuaWZlc3Q8L2xpdGVyYWw+IGdl bmVyYXRlZCBieSB0aGUgc2VydmVyIGF0IHRoZSB0aW1lCiAgICBvZiB0aGUgYmFja3VwLiBUaGUg YmFja3VwIG1heSBiZSBzdG9yZWQgZWl0aGVyIGluIHRoZSAicGxhaW4iIG9yIHRoZSAidGFyIgog ICAgZm9ybWF0OyB0aGlzIGluY2x1ZGVzIHRhci1mb3JtYXQgYmFja3VwcyBjb21wcmVzc2VkIHdp dGggYW55IGFsZ29yaXRobQotICAgc3VwcG9ydGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19iYXNlYmFj a3VwPC9hcHBsaWNhdGlvbj4uIEhvd2V2ZXIsIGF0IHByZXNlbnQsCi0gICA8bGl0ZXJhbD5XQUw8 L2xpdGVyYWw+IHZlcmlmaWNhdGlvbiBpcyBzdXBwb3J0ZWQgb25seSBmb3IgcGxhaW4tZm9ybWF0 Ci0gICBiYWNrdXBzLiBUaGVyZWZvcmUsIGlmIHRoZSBiYWNrdXAgaXMgc3RvcmVkIGluIHRhci1m b3JtYXQsIHRoZQotICAgPGxpdGVyYWw+LW4sIC0tbm8tcGFyc2Utd2FsPC9saXRlcmFsPiBvcHRp b24gc2hvdWxkIGJlIHVzZWQuCisgICBzdXBwb3J0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2Jhc2Vi YWNrdXA8L2FwcGxpY2F0aW9uPi4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtMjYxLDEyICsy NTgsMTMgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICAgICAgPHZhcmxpc3RlbnRyeT4K ICAgICAgIDx0ZXJtPjxvcHRpb24+LXcgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBh dGg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KLSAgICAgIDx0ZXJtPjxvcHRpb24+LS13 YWwtZGlyZWN0b3J5PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXRoPC9yZXBsYWNl YWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0td2FsLXBhdGg9PHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdGg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwv dGVybT4KICAgICAgIDxsaXN0aXRlbT4KICAgICAgICA8cGFyYT4KLSAgICAgICAgVHJ5IHRvIHBh cnNlIFdBTCBmaWxlcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksIHJhdGhlciB0 aGFuCi0gICAgICAgIGluIDxsaXRlcmFsPnBnX3dhbDwvbGl0ZXJhbD4uIFRoaXMgbWF5IGJlIHVz ZWZ1bCBpZiB0aGUgYmFja3VwIGlzCi0gICAgICAgIHN0b3JlZCBpbiBhIHNlcGFyYXRlIGxvY2F0 aW9uIGZyb20gdGhlIFdBTCBhcmNoaXZlLgorICAgICAgICBUcnkgdG8gcGFyc2UgV0FMIGZpbGVz IHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBvciB0YXIKKyAgICAgICAgYXJjaGl2 ZSwgcmF0aGVyIHRoYW4gaW4gPGxpdGVyYWw+cGdfd2FsPC9saXRlcmFsPi4gVGhpcyBtYXkgYmUK KyAgICAgICAgdXNlZnVsIGlmIHRoZSBiYWNrdXAgaXMgc3RvcmVkIGluIGEgc2VwYXJhdGUgbG9j YXRpb24gZnJvbSB0aGUgV0FMCisgICAgICAgIGFyY2hpdmUuCiAgICAgICAgPC9wYXJhPgogICAg ICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX3ZlcmlmeWJhY2t1cC9wZ192ZXJpZnliYWNrdXAuYyBiL3NyYy9iaW4vcGdfdmVyaWZ5YmFj a3VwL3BnX3ZlcmlmeWJhY2t1cC5jCmluZGV4IDMxZjYwNmM0NWIxLi5kYjc5ZGQzOTEwMyAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGdfdmVyaWZ5YmFja3VwLmMKKysrIGIv c3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvcGdfdmVyaWZ5YmFja3VwLmMKQEAgLTc0LDcgKzc0LDkg QEAgcGdfbm9yZXR1cm4gc3RhdGljIHZvaWQgcmVwb3J0X21hbmlmZXN0X2Vycm9yKEpzb25NYW5p ZmVzdFBhcnNlQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpmbXQs Li4uKQogCQkJcGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKIAotc3RhdGljIHZvaWQgdmVyaWZ5 X3Rhcl9iYWNrdXAodmVyaWZpZXJfY29udGV4dCAqY29udGV4dCwgRElSICpkaXIpOworc3RhdGlj IHZvaWQgdmVyaWZ5X3Rhcl9iYWNrdXAodmVyaWZpZXJfY29udGV4dCAqY29udGV4dCwgRElSICpk aXIsCisJCQkJCQkJICBjaGFyICoqYmFzZV9hcmNoaXZlX3BhdGgsCisJCQkJCQkJICBjaGFyICoq d2FsX2FyY2hpdmVfcGF0aCk7CiBzdGF0aWMgdm9pZCB2ZXJpZnlfcGxhaW5fYmFja3VwX2RpcmVj dG9yeSh2ZXJpZmllcl9jb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJCSAgY2hhciAqcmVscGF0 aCwgY2hhciAqZnVsbHBhdGgsCiAJCQkJCQkJCQkJICBESVIgKmRpcik7CkBAIC04Myw3ICs4NSw5 IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9wbGFpbl9iYWNrdXBfZmlsZSh2ZXJpZmllcl9jb250ZXh0 ICpjb250ZXh0LCBjaGFyICpyZWxwYXRoLAogc3RhdGljIHZvaWQgdmVyaWZ5X2NvbnRyb2xfZmls ZShjb25zdCBjaGFyICpjb250cm9scGF0aCwKIAkJCQkJCQkJdWludDY0IG1hbmlmZXN0X3N5c3Rl bV9pZGVudGlmaWVyKTsKIHN0YXRpYyB2b2lkIHByZWNoZWNrX3Rhcl9iYWNrdXBfZmlsZSh2ZXJp Zmllcl9jb250ZXh0ICpjb250ZXh0LCBjaGFyICpyZWxwYXRoLAotCQkJCQkJCQkJIGNoYXIgKmZ1 bGxwYXRoLCBTaW1wbGVQdHJMaXN0ICp0YXJmaWxlcyk7CisJCQkJCQkJCQkgY2hhciAqZnVsbHBh dGgsIFNpbXBsZVB0ckxpc3QgKnRhcmZpbGVzLAorCQkJCQkJCQkJIGNoYXIgKipiYXNlX2FyY2hp dmVfcGF0aCwKKwkJCQkJCQkJCSBjaGFyICoqd2FsX2FyY2hpdmVfcGF0aCk7CiBzdGF0aWMgdm9p ZCB2ZXJpZnlfdGFyX2ZpbGUodmVyaWZpZXJfY29udGV4dCAqY29udGV4dCwgY2hhciAqcmVscGF0 aCwKIAkJCQkJCQljaGFyICpmdWxscGF0aCwgYXN0cmVhbWVyICpzdHJlYW1lcik7CiBzdGF0aWMg dm9pZCByZXBvcnRfZXh0cmFfYmFja3VwX2ZpbGVzKHZlcmlmaWVyX2NvbnRleHQgKmNvbnRleHQp OwpAQCAtOTMsNyArOTcsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfZmlsZV9jaGVja3N1bSh2ZXJp Zmllcl9jb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkgdWludDggKmJ1ZmZlcik7CiBzdGF0aWMg dm9pZCBwYXJzZV9yZXF1aXJlZF93YWwodmVyaWZpZXJfY29udGV4dCAqY29udGV4dCwKIAkJCQkJ CQkgICBjaGFyICpwZ193YWxkdW1wX3BhdGgsCi0JCQkJCQkJICAgY2hhciAqd2FsX2RpcmVjdG9y eSk7CisJCQkJCQkJICAgY2hhciAqd2FsX3BhdGgpOwogc3RhdGljIGFzdHJlYW1lciAqY3JlYXRl X2FyY2hpdmVfdmVyaWZpZXIodmVyaWZpZXJfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQkg IGNoYXIgKmFyY2hpdmVfbmFtZSwKIAkJCQkJCQkJCQkgIE9pZCB0YmxzcGNfb2lkLApAQCAtMTI2 LDcgKzEzMCw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7InByb2dyZXNzIiwg bm9fYXJndW1lbnQsIE5VTEwsICdQJ30sCiAJCXsicXVpZXQiLCBub19hcmd1bWVudCwgTlVMTCwg J3EnfSwKIAkJeyJza2lwLWNoZWNrc3VtcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncyd9LAotCQl7 IndhbC1kaXJlY3RvcnkiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3cnfSwKKwkJeyJ3YWwt cGF0aCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAndyd9LAorCQl7IndhbC1kaXJlY3Rvcnki LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3cnfSwJLyogZGVwcmVjYXRlZCAqLwogCQl7TlVM TCwgMCwgTlVMTCwgMH0KIAl9OwogCkBAIC0xMzUsNyArMTQwLDkgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJY2hhcgkgICAqbWFuaWZlc3RfcGF0aCA9IE5VTEw7CiAJYm9vbAkJbm9f cGFyc2Vfd2FsID0gZmFsc2U7CiAJYm9vbAkJcXVpZXQgPSBmYWxzZTsKLQljaGFyCSAgICp3YWxf ZGlyZWN0b3J5ID0gTlVMTDsKKwljaGFyCSAgICp3YWxfcGF0aCA9IE5VTEw7CisJY2hhcgkgICAq YmFzZV9hcmNoaXZlX3BhdGggPSBOVUxMOworCWNoYXIJICAgKndhbF9hcmNoaXZlX3BhdGggPSBO VUxMOwogCWNoYXIJICAgKnBnX3dhbGR1bXBfcGF0aCA9IE5VTEw7CiAJRElSCQkgICAqZGlyOwog CkBAIC0yMjEsOCArMjI4LDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJY29u dGV4dC5za2lwX2NoZWNrc3VtcyA9IHRydWU7CiAJCQkJYnJlYWs7CiAJCQljYXNlICd3JzoKLQkJ CQl3YWxfZGlyZWN0b3J5ID0gcHN0cmR1cChvcHRhcmcpOwotCQkJCWNhbm9uaWNhbGl6ZV9wYXRo KHdhbF9kaXJlY3RvcnkpOworCQkJCXdhbF9wYXRoID0gcHN0cmR1cChvcHRhcmcpOworCQkJCWNh bm9uaWNhbGl6ZV9wYXRoKHdhbF9wYXRoKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJ LyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCkBAIC0yODUsMTAg KzI5Miw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQltYW5pZmVzdF9wYXRoID0g cHNwcmludGYoIiVzL2JhY2t1cF9tYW5pZmVzdCIsCiAJCQkJCQkJCSBjb250ZXh0LmJhY2t1cF9k aXJlY3RvcnkpOwogCi0JLyogQnkgZGVmYXVsdCwgbG9vayBmb3IgdGhlIFdBTCBpbiB0aGUgYmFj a3VwIGRpcmVjdG9yeSwgdG9vLiAqLwotCWlmICh3YWxfZGlyZWN0b3J5ID09IE5VTEwpCi0JCXdh bF9kaXJlY3RvcnkgPSBwc3ByaW50ZigiJXMvcGdfd2FsIiwgY29udGV4dC5iYWNrdXBfZGlyZWN0 b3J5KTsKLQogCS8qCiAJICogVHJ5IHRvIHJlYWQgdGhlIG1hbmlmZXN0LiBXZSB0cmVhdCBhbnkg ZXJyb3JzIGVuY291bnRlcmVkIHdoaWxlIHBhcnNpbmcKIAkgKiB0aGUgbWFuaWZlc3QgYXMgZmF0 YWw7IHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBtdWNoIHBvaW50IGluIHRyeWluZyB0bwpAQCAt MzMxLDE3ICszMzQsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJcGZyZWUocGF0 aCk7CiAJfQogCi0JLyoKLQkgKiBYWFg6IEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBjb25zaWRl ciBlbmhhbmNpbmcgcGdfd2FsZHVtcCB0byByZWFkIFdBTAotCSAqIGZpbGVzIGZyb20gYW4gYXJj aGl2ZS4KLQkgKi8KLQlpZiAoIW5vX3BhcnNlX3dhbCAmJiBjb250ZXh0LmZvcm1hdCA9PSAndCcp Ci0JewotCQlwZ19sb2dfZXJyb3IoInBnX3dhbGR1bXAgY2Fubm90IHJlYWQgdGFyIGZpbGVzIik7 Ci0JCXBnX2xvZ19lcnJvcl9oaW50KCJZb3UgbXVzdCB1c2UgLW4vLS1uby1wYXJzZS13YWwgd2hl biB2ZXJpZnlpbmcgYSB0YXItZm9ybWF0IGJhY2t1cC4iKTsKLQkJZXhpdCgxKTsKLQl9Ci0KIAkv KgogCSAqIFBlcmZvcm0gdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2YgdmVyaWZpY2F0aW9uIGFwcHJv cHJpYXRlIGJhc2VkIG9uIHRoZQogCSAqIGJhY2t1cCBmb3JtYXQuIFRoaXMgd2lsbCBjbG9zZSAn ZGlyJy4KQEAgLTM1MCw3ICszNDIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ dmVyaWZ5X3BsYWluX2JhY2t1cF9kaXJlY3RvcnkoJmNvbnRleHQsIE5VTEwsIGNvbnRleHQuYmFj a3VwX2RpcmVjdG9yeSwKIAkJCQkJCQkJCSAgZGlyKTsKIAllbHNlCi0JCXZlcmlmeV90YXJfYmFj a3VwKCZjb250ZXh0LCBkaXIpOworCQl2ZXJpZnlfdGFyX2JhY2t1cCgmY29udGV4dCwgZGlyLCAm YmFzZV9hcmNoaXZlX3BhdGgsICZ3YWxfYXJjaGl2ZV9wYXRoKTsKIAogCS8qCiAJICogVGhlICJt YXRjaGVkIiBmbGFnIHNob3VsZCBub3cgYmUgc2V0IG9uIGV2ZXJ5IGVudHJ5IGluIHRoZSBoYXNo IHRhYmxlLgpAQCAtMzY4LDEyICszNjAsMzUgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJaWYgKGNvbnRleHQuZm9ybWF0ID09ICdwJyAmJiAhY29udGV4dC5za2lwX2NoZWNrc3VtcykK IAkJdmVyaWZ5X2JhY2t1cF9jaGVja3N1bXMoJmNvbnRleHQpOwogCisJLyoKKwkgKiBCeSBkZWZh dWx0LCBXQUwgZmlsZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGZvdW5kIGluIHRoZSBiYWNrdXAgZGly ZWN0b3J5CisJICogZm9yIHBsYWluLWZvcm1hdCBiYWNrdXBzLiBJbiB0aGUgY2FzZSBvZiB0YXIt Zm9ybWF0IGJhY2t1cHMsIGlmIGEKKwkgKiBzZXBhcmF0ZSBXQUwgYXJjaGl2ZSBpcyBub3QgZm91 bmQsIHRoZSBXQUwgZmlsZXMgYXJlIG1vc3QgbGlrZWx5CisJICogaW5jbHVkZWQgd2l0aGluIHRo ZSBtYWluIGRhdGEgZGlyZWN0b3J5IGFyY2hpdmUuCisJICovCisJaWYgKHdhbF9wYXRoID09IE5V TEwpCisJeworCQlpZiAoY29udGV4dC5mb3JtYXQgPT0gJ3AnKQorCQkJd2FsX3BhdGggPSBwc3By aW50ZigiJXMvcGdfd2FsIiwgY29udGV4dC5iYWNrdXBfZGlyZWN0b3J5KTsKKwkJZWxzZSBpZiAo d2FsX2FyY2hpdmVfcGF0aCkKKwkJCXdhbF9wYXRoID0gd2FsX2FyY2hpdmVfcGF0aDsKKwkJZWxz ZSBpZiAoYmFzZV9hcmNoaXZlX3BhdGgpCisJCQl3YWxfcGF0aCA9IGJhc2VfYXJjaGl2ZV9wYXRo OworCQllbHNlCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiV0FMIGFyY2hpdmUgbm90IGZvdW5kIik7 CisJCQlwZ19sb2dfZXJyb3JfaGludCgiU3BlY2lmeSB0aGUgY29ycmVjdCBwYXRoIHVzaW5nIHRo ZSBvcHRpb24gLXcvLS13YWwtcGF0aC4gICIKKwkJCQkJCQkgICJPciB5b3UgbXVzdCB1c2UgLW4v LS1uby1wYXJzZS13YWwgd2hlbiB2ZXJpZnlpbmcgYSB0YXItZm9ybWF0IGJhY2t1cC4iKTsKKwkJ CWV4aXQoMSk7CisJCX0KKwl9CisKIAkvKgogCSAqIFRyeSB0byBwYXJzZSB0aGUgcmVxdWlyZWQg cmFuZ2VzIG9mIFdBTCByZWNvcmRzLCB1bmxlc3Mgd2Ugd2VyZSB0b2xkCiAJICogbm90IHRvIGRv IHNvLgogCSAqLwogCWlmICghbm9fcGFyc2Vfd2FsKQotCQlwYXJzZV9yZXF1aXJlZF93YWwoJmNv bnRleHQsIHBnX3dhbGR1bXBfcGF0aCwgd2FsX2RpcmVjdG9yeSk7CisJCXBhcnNlX3JlcXVpcmVk X3dhbCgmY29udGV4dCwgcGdfd2FsZHVtcF9wYXRoLCB3YWxfcGF0aCk7CiAKIAkvKgogCSAqIElm IGV2ZXJ5dGhpbmcgbG9va3MgT0ssIHRlbGwgdGhlIHVzZXIgdGhpcywgdW5sZXNzIHdlIHdlcmUg YXNrZWQgdG8KQEAgLTc4Nyw3ICs4MDIsOCBAQCB2ZXJpZnlfY29udHJvbF9maWxlKGNvbnN0IGNo YXIgKmNvbnRyb2xwYXRoLCB1aW50NjQgbWFuaWZlc3Rfc3lzdGVtX2lkZW50aWZpZXIpCiAgKiBj bG9zZSB3aGVuIHdlJ3JlIGRvbmUgd2l0aCBpdC4KICAqLwogc3RhdGljIHZvaWQKLXZlcmlmeV90 YXJfYmFja3VwKHZlcmlmaWVyX2NvbnRleHQgKmNvbnRleHQsIERJUiAqZGlyKQordmVyaWZ5X3Rh cl9iYWNrdXAodmVyaWZpZXJfY29udGV4dCAqY29udGV4dCwgRElSICpkaXIsIGNoYXIgKipiYXNl X2FyY2hpdmVfcGF0aCwKKwkJCQkgIGNoYXIgKip3YWxfYXJjaGl2ZV9wYXRoKQogewogCXN0cnVj dCBkaXJlbnQgKmRpcmVudDsKIAlTaW1wbGVQdHJMaXN0IHRhcmZpbGVzID0ge05VTEwsIE5VTEx9 OwpAQCAtODE2LDcgKzgzMiw4IEBAIHZlcmlmeV90YXJfYmFja3VwKHZlcmlmaWVyX2NvbnRleHQg KmNvbnRleHQsIERJUiAqZGlyKQogCQkJY2hhcgkgICAqZnVsbHBhdGg7CiAKIAkJCWZ1bGxwYXRo ID0gcHNwcmludGYoIiVzLyVzIiwgY29udGV4dC0+YmFja3VwX2RpcmVjdG9yeSwgZmlsZW5hbWUp OwotCQkJcHJlY2hlY2tfdGFyX2JhY2t1cF9maWxlKGNvbnRleHQsIGZpbGVuYW1lLCBmdWxscGF0 aCwgJnRhcmZpbGVzKTsKKwkJCXByZWNoZWNrX3Rhcl9iYWNrdXBfZmlsZShjb250ZXh0LCBmaWxl bmFtZSwgZnVsbHBhdGgsICZ0YXJmaWxlcywKKwkJCQkJCQkJCSBiYXNlX2FyY2hpdmVfcGF0aCwg d2FsX2FyY2hpdmVfcGF0aCk7CiAJCQlwZnJlZShmdWxscGF0aCk7CiAJCX0KIAl9CkBAIC04NzUs MTEgKzg5MiwxMyBAQCB2ZXJpZnlfdGFyX2JhY2t1cCh2ZXJpZmllcl9jb250ZXh0ICpjb250ZXh0 LCBESVIgKmRpcikKICAqCiAgKiBUaGUgYXJndW1lbnRzIHRvIHRoaXMgZnVuY3Rpb24gYXJlIG1v c3RseSB0aGUgc2FtZSBhcyB0aGUKICAqIHZlcmlmeV9wbGFpbl9iYWNrdXBfZmlsZS4gVGhlIGFk ZGl0aW9uYWwgYXJndW1lbnQgb3V0cHV0cyBhIGxpc3Qgb2YgdmFsaWQKLSAqIHRhciBmaWxlcy4K KyAqIHRhciBmaWxlcywgYWxvbmcgd2l0aCB0aGUgZnVsbCBwYXRocyB0byB0aGUgbWFpbiBhcmNo aXZlIGFuZCB0aGUgV0FMCisgKiBkaXJlY3RvcnkgYXJjaGl2ZS4KICAqLwogc3RhdGljIHZvaWQK IHByZWNoZWNrX3Rhcl9iYWNrdXBfZmlsZSh2ZXJpZmllcl9jb250ZXh0ICpjb250ZXh0LCBjaGFy ICpyZWxwYXRoLAotCQkJCQkJIGNoYXIgKmZ1bGxwYXRoLCBTaW1wbGVQdHJMaXN0ICp0YXJmaWxl cykKKwkJCQkJCSBjaGFyICpmdWxscGF0aCwgU2ltcGxlUHRyTGlzdCAqdGFyZmlsZXMsCisJCQkJ CQkgY2hhciAqKmJhc2VfYXJjaGl2ZV9wYXRoLCBjaGFyICoqd2FsX2FyY2hpdmVfcGF0aCkKIHsK IAlzdHJ1Y3Qgc3RhdCBzYjsKIAlPaWQJCQl0YmxzcGNfb2lkID0gSW52YWxpZE9pZDsKQEAgLTkx OCw5ICs5MzcsMTcgQEAgcHJlY2hlY2tfdGFyX2JhY2t1cF9maWxlKHZlcmlmaWVyX2NvbnRleHQg KmNvbnRleHQsIGNoYXIgKnJlbHBhdGgsCiAJICogZXh0ZW5zaW9uIHN1Y2ggYXMgLmd6LCAubHo0 LCBvciAuenN0LgogCSAqLwogCWlmIChzdHJuY21wKCJiYXNlIiwgcmVscGF0aCwgNCkgPT0gMCkK Kwl7CiAJCXN1ZmZpeCA9IHJlbHBhdGggKyA0OworCisJCSpiYXNlX2FyY2hpdmVfcGF0aCA9IHBz dHJkdXAoZnVsbHBhdGgpOworCX0KIAllbHNlIGlmIChzdHJuY21wKCJwZ193YWwiLCByZWxwYXRo LCA2KSA9PSAwKQorCXsKIAkJc3VmZml4ID0gcmVscGF0aCArIDY7CisKKwkJKndhbF9hcmNoaXZl X3BhdGggPSBwc3RyZHVwKGZ1bGxwYXRoKTsKKwl9CiAJZWxzZQogCXsKIAkJLyogRXhwZWN0ZWQg YSA8dGFibGVzcGFjZW9pZD4udGFyIGZpbGUgaGVyZS4gKi8KQEAgLTExODgsNyArMTIxNSw3IEBA IHZlcmlmeV9maWxlX2NoZWNrc3VtKHZlcmlmaWVyX2NvbnRleHQgKmNvbnRleHQsIG1hbmlmZXN0 X2ZpbGUgKm0sCiAgKi8KIHN0YXRpYyB2b2lkCiBwYXJzZV9yZXF1aXJlZF93YWwodmVyaWZpZXJf Y29udGV4dCAqY29udGV4dCwgY2hhciAqcGdfd2FsZHVtcF9wYXRoLAotCQkJCSAgIGNoYXIgKndh bF9kaXJlY3RvcnkpCisJCQkJICAgY2hhciAqd2FsX3BhdGgpCiB7CiAJbWFuaWZlc3RfZGF0YSAq bWFuaWZlc3QgPSBjb250ZXh0LT5tYW5pZmVzdDsKIAltYW5pZmVzdF93YWxfcmFuZ2UgKnRoaXNf d2FsX3JhbmdlID0gbWFuaWZlc3QtPmZpcnN0X3dhbF9yYW5nZTsKQEAgLTExOTgsNyArMTIyNSw3 IEBAIHBhcnNlX3JlcXVpcmVkX3dhbCh2ZXJpZmllcl9jb250ZXh0ICpjb250ZXh0LCBjaGFyICpw Z193YWxkdW1wX3BhdGgsCiAJCWNoYXIJICAgKnBnX3dhbGR1bXBfY21kOwogCiAJCXBnX3dhbGR1 bXBfY21kID0gcHNwcmludGYoIlwiJXNcIiAtLXF1aWV0IC0tcGF0aD1cIiVzXCIgLS10aW1lbGlu ZT0ldSAtLXN0YXJ0PSVYLyUwOFggLS1lbmQ9JVgvJTA4WFxuIiwKLQkJCQkJCQkJICBwZ193YWxk dW1wX3BhdGgsIHdhbF9kaXJlY3RvcnksIHRoaXNfd2FsX3JhbmdlLT50bGksCisJCQkJCQkJCSAg cGdfd2FsZHVtcF9wYXRoLCB3YWxfcGF0aCwgdGhpc193YWxfcmFuZ2UtPnRsaSwKIAkJCQkJCQkJ ICBMU05fRk9STUFUX0FSR1ModGhpc193YWxfcmFuZ2UtPnN0YXJ0X2xzbiksCiAJCQkJCQkJCSAg TFNOX0ZPUk1BVF9BUkdTKHRoaXNfd2FsX3JhbmdlLT5lbmRfbHNuKSk7CiAJCWZmbHVzaChOVUxM KTsKQEAgLTEzNjYsNyArMTM5Myw3IEBAIHVzYWdlKHZvaWQpCiAJcHJpbnRmKF8oIiAgLVAsIC0t cHJvZ3Jlc3MgICAgICAgICAgICAgIHNob3cgcHJvZ3Jlc3MgaW5mb3JtYXRpb25cbiIpKTsKIAlw cmludGYoXygiICAtcSwgLS1xdWlldCAgICAgICAgICAgICAgICAgZG8gbm90IHByaW50IGFueSBv dXRwdXQsIGV4Y2VwdCBmb3IgZXJyb3JzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXMsIC0tc2tpcC1j aGVja3N1bXMgICAgICAgIHNraXAgY2hlY2tzdW0gdmVyaWZpY2F0aW9uXG4iKSk7Ci0JcHJpbnRm KF8oIiAgLXcsIC0td2FsLWRpcmVjdG9yeT1QQVRIICAgIHVzZSBzcGVjaWZpZWQgcGF0aCBmb3Ig V0FMIGZpbGVzXG4iKSk7CisJcHJpbnRmKF8oIiAgLXcsIC0td2FsLXBhdGg9UEFUSCAgICAgICAg IHVzZSBzcGVjaWZpZWQgcGF0aCBmb3IgV0FMIGZpbGVzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYs IC0tdmVyc2lvbiAgICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVu IGV4aXRcbiIpKTsKIAlwcmludGYoXygiICAtPywgLS1oZWxwICAgICAgICAgICAgICAgICAgc2hv dyB0aGlzIGhlbHAsIHRoZW4gZXhpdFxuIikpOwogCXByaW50ZihfKCJcblJlcG9ydCBidWdzIHRv IDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ192 ZXJpZnliYWNrdXAvdC8wMDJfYWxnb3JpdGhtLnBsIGIvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAv dC8wMDJfYWxnb3JpdGhtLnBsCmluZGV4IDA1NTYxOTFlYzlkLi5lZGM1MTVkNTkwNCAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMDJfYWxnb3JpdGhtLnBsCisrKyBiL3Ny Yy9iaW4vcGdfdmVyaWZ5YmFja3VwL3QvMDAyX2FsZ29yaXRobS5wbApAQCAtMzAsMTAgKzMwLDYg QEAgc3ViIHRlc3RfY2hlY2tzdW1zCiAJewogCQkjIEFkZCBzd2l0Y2ggdG8gZ2V0IGEgdGFyLWZv cm1hdCBiYWNrdXAKIAkJcHVzaCBAYmFja3VwLCAoJy0tZm9ybWF0JyA9PiAndGFyJyk7Ci0KLQkJ IyBBZGQgc3dpdGNoIHRvIHNraXAgV0FMIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgbm90IHlldCBz dXBwb3J0ZWQgZm9yCi0JCSMgdGFyLWZvcm1hdCBiYWNrdXBzCi0JCXB1c2ggQHZlcmlmeSwgKCct LW5vLXBhcnNlLXdhbCcpOwogCX0KIAogCSMgQSBiYWNrdXAgd2l0aCBhIGJvZ3VzIGFsZ29yaXRo bSBzaG91bGQgZmFpbC4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3QvMDAz X2NvcnJ1cHRpb24ucGwgYi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90LzAwM19jb3JydXB0aW9u LnBsCmluZGV4IGIxZDY1YjhhYTBmLi44ODJkNzVkOWRjMiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z192ZXJpZnliYWNrdXAvdC8wMDNfY29ycnVwdGlvbi5wbAorKysgYi9zcmMvYmluL3BnX3Zlcmlm eWJhY2t1cC90LzAwM19jb3JydXB0aW9uLnBsCkBAIC0xOTMsMTAgKzE5Myw4IEBAIGZvciBteSAk c2NlbmFyaW8gKEBzY2VuYXJpbykKIAkJCWNvbW1hbmRfb2soWyAkdGFyLCAnLWNmJyA9PiAiJHRh cl9iYWNrdXBfcGF0aC9iYXNlLnRhciIsICcuJyBdKTsKIAkJCWNoZGlyKCRjd2QpIHx8IGRpZSAi Y2hkaXI6ICQhIjsKIAotCQkJIyBOb3cgY2hlY2sgdGhhdCB0aGUgYmFja3VwIG5vIGxvbmdlciB2 ZXJpZmllcy4gV2UgbXVzdCB1c2UgLW4KLQkJCSMgaGVyZSwgYmVjYXVzZSBwZ193YWxkdW1wIGNh bid0IHlldCByZWFkIFdBTCBmcm9tIGEgdGFyZmlsZS4KIAkJCWNvbW1hbmRfZmFpbHNfbGlrZSgK LQkJCQlbICdwZ192ZXJpZnliYWNrdXAnLCAnLS1uby1wYXJzZS13YWwnLCAkdGFyX2JhY2t1cF9w YXRoIF0sCisJCQkJWyAncGdfdmVyaWZ5YmFja3VwJywgJHRhcl9iYWNrdXBfcGF0aCBdLAogCQkJ CSRzY2VuYXJpby0+eydmYWlsc19saWtlJ30sCiAJCQkJImNvcnJ1cHQgYmFja3VwIGZhaWxzIHZl cmlmaWNhdGlvbjogJG5hbWUiKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNr dXAvdC8wMDdfd2FsLnBsIGIvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMDdfd2FsLnBsCmlu ZGV4IDc5MDg3YTFmNmJlLi4wZTAzNzdiZmFjYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ192ZXJp ZnliYWNrdXAvdC8wMDdfd2FsLnBsCisrKyBiL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3QvMDA3 X3dhbC5wbApAQCAtNDIsMTAgKzQyLDEwIEBAIGNvbW1hbmRfb2soWyAncGdfdmVyaWZ5YmFja3Vw JywgJy0tbm8tcGFyc2Utd2FsJywgJGJhY2t1cF9wYXRoIF0sCiBjb21tYW5kX29rKAogCVsKIAkJ J3BnX3ZlcmlmeWJhY2t1cCcsCi0JCSctLXdhbC1kaXJlY3RvcnknID0+ICRyZWxvY2F0ZWRfcGdf d2FsLAorCQknLS13YWwtcGF0aCcgPT4gJHJlbG9jYXRlZF9wZ193YWwsCiAJCSRiYWNrdXBfcGF0 aAogCV0sCi0JJy0td2FsLWRpcmVjdG9yeSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IFdBTCBkaXJl Y3RvcnknKTsKKwknLS13YWwtcGF0aCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IFdBTCBkaXJlY3Rv cnknKTsKIAogIyBNb3ZlIGRpcmVjdG9yeSBiYWNrIHRvIG9yaWdpbmFsIGxvY2F0aW9uLgogcmVu YW1lKCRyZWxvY2F0ZWRfcGdfd2FsLCAkb3JpZ2luYWxfcGdfd2FsKSB8fCBkaWUgInJlbmFtZSBw Z193YWwgYmFjazogJCEiOwpAQCAtOTAsNCArOTAsMjAgQEAgY29tbWFuZF9vaygKIAlbICdwZ192 ZXJpZnliYWNrdXAnLCAkYmFja3VwX3BhdGgyIF0sCiAJJ3ZhbGlkIGJhc2UgYmFja3VwIHdpdGgg dGltZWxpbmUgPiAxJyk7CiAKKyMgVGVzdCBXQUwgdmVyaWZpY2F0aW9uIGZvciBhIHRhci1mb3Jt YXQgYmFja3VwIHdpdGggYSBzZXBhcmF0ZSBwZ193YWwudGFyLAorIyBhcyBwcm9kdWNlZCBieSBw Z19iYXNlYmFja3VwIC0tZm9ybWF0PXRhciAtLXdhbC1tZXRob2Q9c3RyZWFtLgorbXkgJGJhY2t1 cF9wYXRoMyA9ICRwcmltYXJ5LT5iYWNrdXBfZGlyIC4gJy90ZXN0X3Rhcl93YWwnOworJHByaW1h cnktPmNvbW1hbmRfb2soCisJWworCQkncGdfYmFzZWJhY2t1cCcsCisJCSctLXBnZGF0YScgPT4g JGJhY2t1cF9wYXRoMywKKwkJJy0tbm8tc3luYycsCisJCSctLWZvcm1hdCcgPT4gJ3RhcicsCisJ CSctLWNoZWNrcG9pbnQnID0+ICdmYXN0JworCV0sCisJInRhciBiYWNrdXAgd2l0aCBzZXBhcmF0 ZSBwZ193YWwudGFyIik7Citjb21tYW5kX29rKAorCVsgJ3BnX3ZlcmlmeWJhY2t1cCcsICRiYWNr dXBfcGF0aDMgXSwKKwknV0FMIHZlcmlmaWNhdGlvbiBzdWNjZWVkcyB3aXRoIHNlcGFyYXRlIHBn X3dhbC50YXInKTsKKwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Zl cmlmeWJhY2t1cC90LzAwOF91bnRhci5wbCBiL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3QvMDA4 X3VudGFyLnBsCmluZGV4IGFlNjdhZTg1YTMxLi4xNjFjMDhjMTkwZCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMDhfdW50YXIucGwKKysrIGIvc3JjL2Jpbi9wZ192ZXJp ZnliYWNrdXAvdC8wMDhfdW50YXIucGwKQEAgLTQ3LDcgKzQ3LDYgQEAgbXkgJHRzb2lkID0gJHBy aW1hcnktPnNhZmVfcHNxbCgKIAkJU0VMRUNUIG9pZCBGUk9NIHBnX3RhYmxlc3BhY2UgV0hFUkUg c3BjbmFtZSA9ICdyZWdyZXNzX3RzMScpKTsKIAogbXkgJGJhY2t1cF9wYXRoID0gJHByaW1hcnkt PmJhY2t1cF9kaXIgLiAnL3NlcnZlci1iYWNrdXAnOwotbXkgJGV4dHJhY3RfcGF0aCA9ICRwcmlt YXJ5LT5iYWNrdXBfZGlyIC4gJy9leHRyYWN0ZWQtYmFja3VwJzsKIAogbXkgQHRlc3RfY29uZmln dXJhdGlvbiA9ICgKIAl7CkBAIC0xMjMsMTQgKzEyMiwxMiBAQCBmb3IgbXkgJHRjIChAdGVzdF9j b25maWd1cmF0aW9uKQogCQkjIFZlcmlmeSB0YXIgYmFja3VwLgogCQkkcHJpbWFyeS0+Y29tbWFu ZF9vaygKIAkJCVsKLQkJCQkncGdfdmVyaWZ5YmFja3VwJywgJy0tbm8tcGFyc2Utd2FsJywKLQkJ CQknLS1leGl0LW9uLWVycm9yJywgJGJhY2t1cF9wYXRoLAorCQkJCSdwZ192ZXJpZnliYWNrdXAn LCAnLS1leGl0LW9uLWVycm9yJywgJGJhY2t1cF9wYXRoLAogCQkJXSwKIAkJCSJ2ZXJpZnkgYmFj a3VwLCBjb21wcmVzc2lvbiAkbWV0aG9kIik7CiAKIAkJIyBDbGVhbnVwLgogCQlybXRyZWUoJGJh Y2t1cF9wYXRoKTsKLQkJcm10cmVlKCRleHRyYWN0X3BhdGgpOwogCX0KIH0KIApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMTBfY2xpZW50X3VudGFyLnBsIGIvc3JjL2Jp bi9wZ192ZXJpZnliYWNrdXAvdC8wMTBfY2xpZW50X3VudGFyLnBsCmluZGV4IDFhYzdiNWRiNzVh Li45NjcwZmJlNGZkYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMTBf Y2xpZW50X3VudGFyLnBsCisrKyBiL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3QvMDEwX2NsaWVu dF91bnRhci5wbApAQCAtMzIsNyArMzIsNiBAQCBwcmludCAkamYgJGp1bmtfZGF0YTsKIGNsb3Nl ICRqZjsKIAogbXkgJGJhY2t1cF9wYXRoID0gJHByaW1hcnktPmJhY2t1cF9kaXIgLiAnL2NsaWVu dC1iYWNrdXAnOwotbXkgJGV4dHJhY3RfcGF0aCA9ICRwcmltYXJ5LT5iYWNrdXBfZGlyIC4gJy9l eHRyYWN0ZWQtYmFja3VwJzsKIAogbXkgQHRlc3RfY29uZmlndXJhdGlvbiA9ICgKIAl7CkBAIC0x MzcsMTMgKzEzNiwxMSBAQCBmb3IgbXkgJHRjIChAdGVzdF9jb25maWd1cmF0aW9uKQogCQkjIFZl cmlmeSB0YXIgYmFja3VwLgogCQkkcHJpbWFyeS0+Y29tbWFuZF9vaygKIAkJCVsKLQkJCQkncGdf dmVyaWZ5YmFja3VwJywgJy0tbm8tcGFyc2Utd2FsJywKLQkJCQknLS1leGl0LW9uLWVycm9yJywg JGJhY2t1cF9wYXRoLAorCQkJCSdwZ192ZXJpZnliYWNrdXAnLCAnLS1leGl0LW9uLWVycm9yJywg JGJhY2t1cF9wYXRoLAogCQkJXSwKIAkJCSJ2ZXJpZnkgYmFja3VwLCBjb21wcmVzc2lvbiAkbWV0 aG9kIik7CiAKIAkJIyBDbGVhbnVwLgotCQlybXRyZWUoJGV4dHJhY3RfcGF0aCk7CiAJCXJtdHJl ZSgkYmFja3VwX3BhdGgpOwogCX0KIH0KLS0gCjIuNDcuMQoK --0000000000006f20d1064d4b0036--