Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nAX3l-0001Eo-C3 for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Jan 2022 13:01:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nAX3k-000754-1T for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Jan 2022 13:01:00 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nAX3j-00074t-As for pgsql-hackers@lists.postgresql.org; Thu, 20 Jan 2022 13:00:59 +0000 Received: from mail-ua1-x92c.google.com ([2607:f8b0:4864:20::92c]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nAX3f-0007oT-PU for pgsql-hackers@postgresql.org; Thu, 20 Jan 2022 13:00:58 +0000 Received: by mail-ua1-x92c.google.com with SMTP id b16so10677476uaq.4 for ; Thu, 20 Jan 2022 05:00:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=XAMgpmVgYmVL8LSeLwKJBxhoxTiQxbtiBpNiEQ4TQ+s=; b=fe5p+uqWJUcJbxu3CZx3Vu7k3Rb/CcSHmLoH0WZDqhhpZfxDuvOZlAE0ie9SCb56vg Su1XIAvUjgGQKDvn8Pdm4IO1/hAuFu5FHPxgR241NMwau3Cq3w9g3hZSLc+LLY+pGKtM vUXLun/cE9TercjMTsRW8KYouJODlz4uj9f/4KOdmtoimggII9jHnuYI3tlVfsfjUabP 3+rmMgi5JrjyZorc1QfndZNz7dK6v/QJlQdOm07Vb749KDeY6jSwoElRkwB/BaBaDzsL 3Uj33jAAl8aMXxe9GnsOLfJK/3QYU3mkpdNx8fAeQ33PQSVXIpGTfP0jTD3eHPzdNIO2 31Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=XAMgpmVgYmVL8LSeLwKJBxhoxTiQxbtiBpNiEQ4TQ+s=; b=ox65+qHlywfYruXOxZOgUcdGWVSqfojNyhTthqUzhE5qFySZAQxN/72Kly6I2aFO2q 9VVHkNWYRuLK8hT8SlBlCBXoxyPi6hJnNBqpwBNrzmogjQtOUigtg0pRPRMcspr3u4ar 46uxIDUog51ABF5/Rcj/gfARsB8tN9Q4XNDlJUUKEamTgfL11YzN6XgTeWlHJltiB1LL ALRWRZ7BOliu00Mejv8lC3q0BW01N8KTgGh9ipWhcOxlydaFwU8pESSYea0jD4OjDuOQ DyGSu60lpuiiyuowT5RhShflOmdpzx4piu9BqJOxGEkWeGE9nbchJ0ZT/hCEwErzrnBc Cqjw== X-Gm-Message-State: AOAM530uFvg7S1FUXUS9hFA3h0hj6ojr7u1l20ZmWC8G9px8U/i9fLR5 OOM9wAQ+3aOPK9BO2UwR11Lb0BgFdW8K9BHpWDQ= X-Google-Smtp-Source: ABdhPJwf/hc5NOEQyd3HGOdVnqOaeX5/UQfvJeh8xtaXbbhkB4k2sG8SVpnKtJFLoBEpCFFmJnD0L5phvs1BL6GdBYU= X-Received: by 2002:a67:e194:: with SMTP id e20mr5573441vsl.1.1642683654946; Thu, 20 Jan 2022 05:00:54 -0800 (PST) MIME-Version: 1.0 References: <20211115162641.dmo6l32fklh64gnw@localhost> In-Reply-To: From: Dipesh Pandit Date: Thu, 20 Jan 2022 18:30:43 +0530 Message-ID: Subject: Re: refactoring basebackup.c To: Robert Haas Cc: Jeevan Ladhe , tushar , Dmitry Dolgov <9erthalion6@gmail.com>, Mark Dilger , "pgsql-hackers@postgresql.org" Content-Type: multipart/mixed; boundary="000000000000bb842d05d603178e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000bb842d05d603178e Content-Type: multipart/alternative; boundary="000000000000bb842a05d603178c" --000000000000bb842a05d603178c Content-Type: text/plain; charset="UTF-8" Hi, Thanks for the feedback, I have incorporated the suggestions and updated a new patch v2. > I spent some time thinking about test coverage for the server-side > backup code today and came up with the attached (v12-0003). It does an > end-to-end test that exercises server-side backup and server-side > compression and then untars the backup and validity-checks it using > pg_verifybackup. In addition to being good test coverage for these > patches, it also plugs a gap in the test coverage of pg_verifybackup, > which currently has no test case that untars a tar-format backup and > then verifies the result. I couldn't figure out a way to do that back > at the time I was working on pg_verifybackup, because I didn't think > we had any existing precedent for using 'tar' from a TAP test. But it > was pointed out to me that we do, so I used that as the model for this > test. It should be easy to generalize this test case to test lz4 and > zstd as well, I think. But I guess we'll still need something > different to test what your patch is doing. I tried to add the test coverage for server side gzip compression with plain format backup using pg_verifybackup. I have modified the test to use a flag specific to plain format. If this flag is set then it takes a plain format backup (with server compression enabled) and verifies this using pg_verifybackup. I have updated (v2-0002) for the test coverage. > It's going to need some documentation changes, too. yes, I am working on it. Note: Before applying the patches, please apply Robert's v12 version of the patches 0001, 0002 and 0003. Thanks, Dipesh --000000000000bb842a05d603178c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Thanks = for the feedback, I have incorporated the suggestions and
updated= a new patch v2.

> I spent some time thinking a= bout test coverage for the server-side
> backup code today and came up with the attached (v12-0003). It does an=
> end-to-end test that exercises server-side backup and server-side
> compression and then untars the backup and validity-checks it using > pg_verifybackup. In addition to being good test coverage for these
> patches, it also plugs a gap in the test coverage of pg_verifybackup,<= br>> which currently has no test case that untars a tar-format backup an= d
> then verifies the result. I couldn't figure out a way to do that b= ack
> at the time I was working on pg_verifybackup, because I didn't thi= nk
> we had any existing precedent for using 'tar' from a TAP test.= But it
> was pointed out to me that we do, so I used that as the mod= el for this
> test. It should be easy to generalize this test case to test lz4 and > zstd as well, I think. But I guess we'll still need something
> different to test what your patch is doing.

I= tried to add the test coverage for server side gzip compression with
=
plain format backup using pg_verifybackup. I have modified the test
to use a flag specific to plain format. If this flag is set then it= takes a
plain format backup (with server compression enabled= ) and verifies
this using pg_verifybackup. I have updated (v2= -0002) for the test
coverage.

&g= t; It's going to need some documentation changes, too.
yes, I= am working on it.

Note: Before applying the patch= es, please apply Robert's v12 version
of the patches 0001, 0002 and = 0003.

Thanks,
Dipesh
--000000000000bb842a05d603178c-- --000000000000bb842d05d603178e Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-Support-for-extracting-gzip-compressed-archive.patch" Content-Disposition: attachment; filename="v2-0001-Support-for-extracting-gzip-compressed-archive.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kymz7tay0 RnJvbSA4MjZhMWNiYjYzOWFmYjdlMTBhMjA5NTVkM2VjNjRiMWJhYjFmYTgwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEaXBlc2ggUGFuZGl0IDxkaXBlc2gucGFuZGl0QGVudGVycHJp c2VkYi5jb20+CkRhdGU6IFRodSwgMjAgSmFuIDIwMjIgMTY6Mzg6MzYgKzA1MzAKU3ViamVjdDog W1BBVENIIDEvMl0gU3VwcG9ydCBmb3IgZXh0cmFjdGluZyBnemlwIGNvbXByZXNzZWQgYXJjaGl2 ZQoKcGdfYmFzZWJhY2t1cCBjYW4gc3VwcG9ydCBzZXJ2ZXIgc2lkZSBjb21wcmVzc2lvbiB1c2lu ZyBnemlwLiBJbgpvcmRlciB0byBzdXBwb3J0IHBsYWluIGZvcm1hdCBiYWNrdXAgd2l0aCBvcHRp b24gJy1GcCcgd2UgbmVlZCB0bwphZGQgc3VwcG9ydCBmb3IgZGVjb21wcmVzc2luZyB0aGUgY29t cHJlc3NlZCBibG9ja3MgYXQgY2xpZW50LiBUaGlzCnBhdGNoIGFkZHJlc3NlcyB0aGUgZXh0cmFj dGlvbiBvZiBnemlwIGNvbXByZXNzZWQgYmxvY2tzIGF0IGNsaWVudC4KLS0tCiBzcmMvYmluL3Bn X2Jhc2ViYWNrdXAvTWFrZWZpbGUgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ19iYXNlYmFj a3VwL2Jic3RyZWFtZXIuaCAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfYmFzZWJhY2t1cC9iYnN0 cmVhbWVyX2ZpbGUuYyB8IDE4MiAtLS0tLS0tLS0tLS0tLS0KIHNyYy9iaW4vcGdfYmFzZWJhY2t1 cC9iYnN0cmVhbWVyX2d6aXAuYyB8IDM3NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Jhc2ViYWNrdXAuYyAgIHwgIDQzICsrKy0KIDUg ZmlsZXMgY2hhbmdlZCwgNDE5IGluc2VydGlvbnMoKyksIDE4NSBkZWxldGlvbnMoLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvYmJzdHJlYW1lcl9nemlwLmMKCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvTWFrZWZpbGUgYi9zcmMvYmluL3BnX2Jh c2ViYWNrdXAvTWFrZWZpbGUKaW5kZXggNWIxODg1MS4uNzhkOTZjNiAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19iYXNlYmFja3VwL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9N YWtlZmlsZQpAQCAtMzgsNiArMzgsNyBAQCBPQkpTID0gXAogQkJPQkpTID0gXAogCXBnX2Jhc2Vi YWNrdXAubyBcCiAJYmJzdHJlYW1lcl9maWxlLm8gXAorCWJic3RyZWFtZXJfZ3ppcC5vIFwKIAli YnN0cmVhbWVyX2luamVjdC5vIFwKIAliYnN0cmVhbWVyX3Rhci5vCiAKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfYmFzZWJhY2t1cC9iYnN0cmVhbWVyLmggYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAv YmJzdHJlYW1lci5oCmluZGV4IGZjODhiNTAuLjI3MGIwZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfYmFzZWJhY2t1cC9iYnN0cmVhbWVyLmgKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL2Ji c3RyZWFtZXIuaApAQCAtMjA1LDYgKzIwNSw3IEBAIGV4dGVybiBiYnN0cmVhbWVyICpiYnN0cmVh bWVyX2V4dHJhY3Rvcl9uZXcoY29uc3QgY2hhciAqYmFzZXBhdGgsCiAJCQkJCQkJCQkJCWNvbnN0 IGNoYXIgKigqbGlua19tYXApIChjb25zdCBjaGFyICopLAogCQkJCQkJCQkJCQl2b2lkICgqcmVw b3J0X291dHB1dF9maWxlKSAoY29uc3QgY2hhciAqKSk7CiAKK2V4dGVybiBiYnN0cmVhbWVyICpi YnN0cmVhbWVyX2d6aXBfZXh0cmFjdG9yX25ldyhiYnN0cmVhbWVyICpuZXh0KTsKIGV4dGVybiBi YnN0cmVhbWVyICpiYnN0cmVhbWVyX3Rhcl9wYXJzZXJfbmV3KGJic3RyZWFtZXIgKm5leHQpOwog ZXh0ZXJuIGJic3RyZWFtZXIgKmJic3RyZWFtZXJfdGFyX3Rlcm1pbmF0b3JfbmV3KGJic3RyZWFt ZXIgKm5leHQpOwogZXh0ZXJuIGJic3RyZWFtZXIgKmJic3RyZWFtZXJfdGFyX2FyY2hpdmVyX25l dyhiYnN0cmVhbWVyICpuZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9i YnN0cmVhbWVyX2ZpbGUuYyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9iYnN0cmVhbWVyX2ZpbGUu YwppbmRleCA3N2NhMjIyLi5kNzIxZjg3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2Jhc2ViYWNr dXAvYmJzdHJlYW1lcl9maWxlLmMKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL2Jic3RyZWFt ZXJfZmlsZS5jCkBAIC0xMSwxMCArMTEsNiBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIK IAotI2lmZGVmIEhBVkVfTElCWgotI2luY2x1ZGUgPHpsaWIuaD4KLSNlbmRpZgotCiAjaW5jbHVk ZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlICJiYnN0cmVhbWVyLmgiCkBAIC0zMCwxNSArMjYsNiBA QCB0eXBlZGVmIHN0cnVjdCBiYnN0cmVhbWVyX3BsYWluX3dyaXRlcgogCWJvb2wJCXNob3VsZF9j bG9zZV9maWxlOwogfSBiYnN0cmVhbWVyX3BsYWluX3dyaXRlcjsKIAotI2lmZGVmIEhBVkVfTElC WgotdHlwZWRlZiBzdHJ1Y3QgYmJzdHJlYW1lcl9nemlwX3dyaXRlcgotewotCWJic3RyZWFtZXIJ YmFzZTsKLQljaGFyCSAgICpwYXRobmFtZTsKLQlnekZpbGUJCWd6ZmlsZTsKLX0JCQliYnN0cmVh bWVyX2d6aXBfd3JpdGVyOwotI2VuZGlmCi0KIHR5cGVkZWYgc3RydWN0IGJic3RyZWFtZXJfZXh0 cmFjdG9yCiB7CiAJYmJzdHJlYW1lcgliYXNlOwpAQCAtNjIsMjIgKzQ5LDYgQEAgY29uc3QgYmJz dHJlYW1lcl9vcHMgYmJzdHJlYW1lcl9wbGFpbl93cml0ZXJfb3BzID0gewogCS5mcmVlID0gYmJz dHJlYW1lcl9wbGFpbl93cml0ZXJfZnJlZQogfTsKIAotI2lmZGVmIEhBVkVfTElCWgotc3RhdGlj IHZvaWQgYmJzdHJlYW1lcl9nemlwX3dyaXRlcl9jb250ZW50KGJic3RyZWFtZXIgKnN0cmVhbWVy LAotCQkJCQkJCQkJCSAgIGJic3RyZWFtZXJfbWVtYmVyICptZW1iZXIsCi0JCQkJCQkJCQkJICAg Y29uc3QgY2hhciAqZGF0YSwgaW50IGxlbiwKLQkJCQkJCQkJCQkgICBiYnN0cmVhbWVyX2FyY2hp dmVfY29udGV4dCBjb250ZXh0KTsKLXN0YXRpYyB2b2lkIGJic3RyZWFtZXJfZ3ppcF93cml0ZXJf ZmluYWxpemUoYmJzdHJlYW1lciAqc3RyZWFtZXIpOwotc3RhdGljIHZvaWQgYmJzdHJlYW1lcl9n emlwX3dyaXRlcl9mcmVlKGJic3RyZWFtZXIgKnN0cmVhbWVyKTsKLXN0YXRpYyBjb25zdCBjaGFy ICpnZXRfZ3pfZXJyb3IoZ3pGaWxlIGd6Zik7Ci0KLWNvbnN0IGJic3RyZWFtZXJfb3BzIGJic3Ry ZWFtZXJfZ3ppcF93cml0ZXJfb3BzID0gewotCS5jb250ZW50ID0gYmJzdHJlYW1lcl9nemlwX3dy aXRlcl9jb250ZW50LAotCS5maW5hbGl6ZSA9IGJic3RyZWFtZXJfZ3ppcF93cml0ZXJfZmluYWxp emUsCi0JLmZyZWUgPSBiYnN0cmVhbWVyX2d6aXBfd3JpdGVyX2ZyZWUKLX07Ci0jZW5kaWYKLQog c3RhdGljIHZvaWQgYmJzdHJlYW1lcl9leHRyYWN0b3JfY29udGVudChiYnN0cmVhbWVyICpzdHJl YW1lciwKIAkJCQkJCQkJCQkgYmJzdHJlYW1lcl9tZW1iZXIgKm1lbWJlciwKIAkJCQkJCQkJCQkg Y29uc3QgY2hhciAqZGF0YSwgaW50IGxlbiwKQEAgLTE5NiwxNTkgKzE2Nyw2IEBAIGJic3RyZWFt ZXJfcGxhaW5fd3JpdGVyX2ZyZWUoYmJzdHJlYW1lciAqc3RyZWFtZXIpCiB9CiAKIC8qCi0gKiBD cmVhdGUgYSBiYnN0cmVhbWVyIHRoYXQganVzdCBjb21wcmVzc2VzIGRhdGEgdXNpbmcgZ3ppcCwg YW5kIHRoZW4gd3JpdGVzCi0gKiBpdCB0byBhIGZpbGUuCi0gKgotICogQXMgaW4gdGhlIGNhc2Ug b2YgYmJzdHJlYW1lcl9wbGFpbl93cml0ZXJfbmV3LCBwYXRobmFtZSBpcyBhbHdheXMgdXNlZAot ICogZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlczsgaWYgZmlsZSBpcyBOVUxMLCBpdCBpcyBh bHNvIHRoZSBvcGVuZWQgYW5kCi0gKiBjbG9zZWQgc28gdGhhdCB0aGUgZGF0YSBtYXkgYmUgd3Jp dHRlbiB0aGVyZS4KLSAqLwotYmJzdHJlYW1lciAqCi1iYnN0cmVhbWVyX2d6aXBfd3JpdGVyX25l dyhjaGFyICpwYXRobmFtZSwgRklMRSAqZmlsZSwgaW50IGNvbXByZXNzbGV2ZWwpCi17Ci0jaWZk ZWYgSEFWRV9MSUJaCi0JYmJzdHJlYW1lcl9nemlwX3dyaXRlciAqc3RyZWFtZXI7Ci0KLQlzdHJl YW1lciA9IHBhbGxvYzAoc2l6ZW9mKGJic3RyZWFtZXJfZ3ppcF93cml0ZXIpKTsKLQkqKChjb25z dCBiYnN0cmVhbWVyX29wcyAqKikgJnN0cmVhbWVyLT5iYXNlLmJic19vcHMpID0KLQkJJmJic3Ry ZWFtZXJfZ3ppcF93cml0ZXJfb3BzOwotCi0Jc3RyZWFtZXItPnBhdGhuYW1lID0gcHN0cmR1cChw YXRobmFtZSk7Ci0KLQlpZiAoZmlsZSA9PSBOVUxMKQotCXsKLQkJc3RyZWFtZXItPmd6ZmlsZSA9 IGd6b3BlbihwYXRobmFtZSwgIndiIik7Ci0JCWlmIChzdHJlYW1lci0+Z3pmaWxlID09IE5VTEwp Ci0JCXsKLQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0ZSBjb21wcmVzc2VkIGZpbGUg XCIlc1wiOiAlbSIsCi0JCQkJCQkgcGF0aG5hbWUpOwotCQkJZXhpdCgxKTsKLQkJfQotCX0KLQll bHNlCi0JewotCQlpbnQJCQlmZCA9IGR1cChmaWxlbm8oZmlsZSkpOwotCi0JCWlmIChmZCA8IDAp Ci0JCXsKLQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGR1cGxpY2F0ZSBzdGRvdXQ6ICVtIik7 Ci0JCQlleGl0KDEpOwotCQl9Ci0KLQkJc3RyZWFtZXItPmd6ZmlsZSA9IGd6ZG9wZW4oZmQsICJ3 YiIpOwotCQlpZiAoc3RyZWFtZXItPmd6ZmlsZSA9PSBOVUxMKQotCQl7Ci0JCQlwZ19sb2dfZXJy b3IoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlOiAlbSIpOwotCQkJZXhpdCgxKTsKLQkJfQot CX0KLQotCWlmIChnenNldHBhcmFtcyhzdHJlYW1lci0+Z3pmaWxlLCBjb21wcmVzc2xldmVsLAot CQkJCQlaX0RFRkFVTFRfU1RSQVRFR1kpICE9IFpfT0spCi0JewotCQlwZ19sb2dfZXJyb3IoImNv dWxkIG5vdCBzZXQgY29tcHJlc3Npb24gbGV2ZWwgJWQ6ICVzIiwKLQkJCQkJIGNvbXByZXNzbGV2 ZWwsIGdldF9nel9lcnJvcihzdHJlYW1lci0+Z3pmaWxlKSk7Ci0JCWV4aXQoMSk7Ci0JfQotCi0J cmV0dXJuICZzdHJlYW1lci0+YmFzZTsKLSNlbHNlCi0JcGdfbG9nX2Vycm9yKCJ0aGlzIGJ1aWxk IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24iKTsKLQlleGl0KDEpOwotI2VuZGlmCi19Ci0K LSNpZmRlZiBIQVZFX0xJQloKLS8qCi0gKiBXcml0ZSBhcmNoaXZlIGNvbnRlbnQgdG8gZ3ppcCBm aWxlLgotICovCi1zdGF0aWMgdm9pZAotYmJzdHJlYW1lcl9nemlwX3dyaXRlcl9jb250ZW50KGJi c3RyZWFtZXIgKnN0cmVhbWVyLAotCQkJCQkJCSAgIGJic3RyZWFtZXJfbWVtYmVyICptZW1iZXIs IGNvbnN0IGNoYXIgKmRhdGEsCi0JCQkJCQkJICAgaW50IGxlbiwgYmJzdHJlYW1lcl9hcmNoaXZl X2NvbnRleHQgY29udGV4dCkKLXsKLQliYnN0cmVhbWVyX2d6aXBfd3JpdGVyICpteXN0cmVhbWVy OwotCi0JbXlzdHJlYW1lciA9IChiYnN0cmVhbWVyX2d6aXBfd3JpdGVyICopIHN0cmVhbWVyOwot Ci0JaWYgKGxlbiA9PSAwKQotCQlyZXR1cm47Ci0KLQllcnJubyA9IDA7Ci0JaWYgKGd6d3JpdGUo bXlzdHJlYW1lci0+Z3pmaWxlLCBkYXRhLCBsZW4pICE9IGxlbikKLQl7Ci0JCS8qIGlmIHdyaXRl IGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KLQkJ aWYgKGVycm5vID09IDApCi0JCQllcnJubyA9IEVOT1NQQzsKLQkJcGdfbG9nX2Vycm9yKCJjb3Vs ZCBub3Qgd3JpdGUgdG8gY29tcHJlc3NlZCBmaWxlIFwiJXNcIjogJXMiLAotCQkJCQkgbXlzdHJl YW1lci0+cGF0aG5hbWUsIGdldF9nel9lcnJvcihteXN0cmVhbWVyLT5nemZpbGUpKTsKLQkJZXhp dCgxKTsKLQl9Ci19Ci0KLS8qCi0gKiBFbmQtb2YtYXJjaGl2ZSBwcm9jZXNzaW5nIHdoZW4gd3Jp dGluZyB0byBhIGd6aXAgZmlsZSBjb25zaXN0cyBvZiBqdXN0Ci0gKiBjYWxsaW5nIGd6Y2xvc2Uu Ci0gKgotICogSXQgbWFrZXMgbm8gZGlmZmVyZW5jZSB3aGV0aGVyIHdlIG9wZW5lZCB0aGUgZmls ZSBvciB0aGUgY2FsbGVyIGRpZCBpdCwKLSAqIGJlY2F1c2UgbGlieiBwcm92aWRlcyBubyB3YXkg b2YgYXZvaWRpbmcgYSBjbG9zZSBvbiB0aGUgdW5kZXJsaW5nIGZpbGUKLSAqIGhhbmRsZS4gTm90 aWNlLCBob3dldmVyLCB0aGF0IGJic3RyZWFtZXJfZ3ppcF93cml0ZXJfbmV3KCkgdXNlcyBkdXAo KSB0bwotICogd29yayBhcm91bmQgdGhpcyBpc3N1ZSwgc28gdGhhdCB0aGUgYmVoYXZpb3IgZnJv bSB0aGUgY2FsbGVyJ3Mgdmlld3BvaW50Ci0gKiBpcyB0aGUgc2FtZSBhcyBmb3IgYmJzdHJlYW1l cl9wbGFpbl93cml0ZXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1iYnN0cmVhbWVyX2d6aXBfd3JpdGVy X2ZpbmFsaXplKGJic3RyZWFtZXIgKnN0cmVhbWVyKQotewotCWJic3RyZWFtZXJfZ3ppcF93cml0 ZXIgKm15c3RyZWFtZXI7Ci0KLQlteXN0cmVhbWVyID0gKGJic3RyZWFtZXJfZ3ppcF93cml0ZXIg Kikgc3RyZWFtZXI7Ci0KLQllcnJubyA9IDA7CQkJCQkvKiBpbiBjYXNlIGd6Y2xvc2UoKSBkb2Vz bid0IHNldCBpdCAqLwotCWlmIChnemNsb3NlKG15c3RyZWFtZXItPmd6ZmlsZSkgIT0gMCkKLQl7 Ci0JCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNsb3NlIGNvbXByZXNzZWQgZmlsZSBcIiVzXCI6 ICVtIiwKLQkJCQkJIG15c3RyZWFtZXItPnBhdGhuYW1lKTsKLQkJZXhpdCgxKTsKLQl9Ci0KLQlt eXN0cmVhbWVyLT5nemZpbGUgPSBOVUxMOwotfQotCi0vKgotICogRnJlZSBtZW1vcnkgYXNzb2Np YXRlZCB3aXRoIHRoaXMgYmJzdHJlYW1lci4KLSAqLwotc3RhdGljIHZvaWQKLWJic3RyZWFtZXJf Z3ppcF93cml0ZXJfZnJlZShiYnN0cmVhbWVyICpzdHJlYW1lcikKLXsKLQliYnN0cmVhbWVyX2d6 aXBfd3JpdGVyICpteXN0cmVhbWVyOwotCi0JbXlzdHJlYW1lciA9IChiYnN0cmVhbWVyX2d6aXBf d3JpdGVyICopIHN0cmVhbWVyOwotCi0JQXNzZXJ0KG15c3RyZWFtZXItPmJhc2UuYmJzX25leHQg PT0gTlVMTCk7Ci0JQXNzZXJ0KG15c3RyZWFtZXItPmd6ZmlsZSA9PSBOVUxMKTsKLQotCXBmcmVl KG15c3RyZWFtZXItPnBhdGhuYW1lKTsKLQlwZnJlZShteXN0cmVhbWVyKTsKLX0KLQotLyoKLSAq IEhlbHBlciBmdW5jdGlvbiBmb3IgbGlieiBlcnJvciByZXBvcnRpbmcuCi0gKi8KLXN0YXRpYyBj b25zdCBjaGFyICoKLWdldF9nel9lcnJvcihnekZpbGUgZ3pmKQotewotCWludAkJCWVycm51bTsK LQljb25zdCBjaGFyICplcnJtc2c7Ci0KLQllcnJtc2cgPSBnemVycm9yKGd6ZiwgJmVycm51bSk7 Ci0JaWYgKGVycm51bSA9PSBaX0VSUk5PKQotCQlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOwotCWVs c2UKLQkJcmV0dXJuIGVycm1zZzsKLX0KLSNlbmRpZgotCi0vKgogICogQ3JlYXRlIGEgYmJzdHJl YW1lciB0aGF0IGV4dHJhY3RzIGFuIGFyY2hpdmUuCiAgKgogICogQWxsIHBhdGhuYW1lcyBpbiB0 aGUgYXJjaGl2ZSBhcmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gYmFzZXBhdGguCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvYmJzdHJlYW1lcl9nemlwLmMgYi9zcmMvYmluL3Bn X2Jhc2ViYWNrdXAvYmJzdHJlYW1lcl9nemlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYzE0NGE3MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1 cC9iYnN0cmVhbWVyX2d6aXAuYwpAQCAtMCwwICsxLDM3NyBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogYmJzdHJlYW1lcl9nemlwLmMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJ REVOVElGSUNBVElPTgorICoJCSAgc3JjL2Jpbi9wZ19iYXNlYmFja3VwL2Jic3RyZWFtZXJfZ3pp cC5jCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIK KworI2lmZGVmIEhBVkVfTElCWgorI2luY2x1ZGUgPHpsaWIuaD4KKyNlbmRpZgorCisjaW5jbHVk ZSAiYmJzdHJlYW1lci5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCisjaW5jbHVkZSAi Y29tbW9uL2ZpbGVfcGVybS5oIgorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKworI2lmZGVm IEhBVkVfTElCWgordHlwZWRlZiBzdHJ1Y3QgYmJzdHJlYW1lcl9nemlwX3dyaXRlcgoreworCWJi c3RyZWFtZXIJYmFzZTsKKwljaGFyCSAgICpwYXRobmFtZTsKKwlnekZpbGUJCWd6ZmlsZTsKK30J CQliYnN0cmVhbWVyX2d6aXBfd3JpdGVyOworCit0eXBlZGVmIHN0cnVjdCBiYnN0cmVhbWVyX2d6 aXBfZXh0cmFjdG9yCit7CisJYmJzdHJlYW1lcgliYXNlOworCXpfc3RyZWFtCXpzdHJlYW07CisJ c2l6ZV90CQlieXRlc193cml0dGVuOworfSBiYnN0cmVhbWVyX2d6aXBfZXh0cmFjdG9yOworCitz dGF0aWMgdm9pZCBiYnN0cmVhbWVyX2d6aXBfd3JpdGVyX2NvbnRlbnQoYmJzdHJlYW1lciAqc3Ry ZWFtZXIsCisJCQkJCQkJCQkJICAgYmJzdHJlYW1lcl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJCQkJ CQkgICBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuLAorCQkJCQkJCQkJCSAgIGJic3RyZWFtZXJf YXJjaGl2ZV9jb250ZXh0IGNvbnRleHQpOworc3RhdGljIHZvaWQgYmJzdHJlYW1lcl9nemlwX3dy aXRlcl9maW5hbGl6ZShiYnN0cmVhbWVyICpzdHJlYW1lcik7CitzdGF0aWMgdm9pZCBiYnN0cmVh bWVyX2d6aXBfd3JpdGVyX2ZyZWUoYmJzdHJlYW1lciAqc3RyZWFtZXIpOworc3RhdGljIGNvbnN0 IGNoYXIgKmdldF9nel9lcnJvcihnekZpbGUgZ3pmKTsKKworY29uc3QgYmJzdHJlYW1lcl9vcHMg YmJzdHJlYW1lcl9nemlwX3dyaXRlcl9vcHMgPSB7CisJLmNvbnRlbnQgPSBiYnN0cmVhbWVyX2d6 aXBfd3JpdGVyX2NvbnRlbnQsCisJLmZpbmFsaXplID0gYmJzdHJlYW1lcl9nemlwX3dyaXRlcl9m aW5hbGl6ZSwKKwkuZnJlZSA9IGJic3RyZWFtZXJfZ3ppcF93cml0ZXJfZnJlZQorfTsKKworc3Rh dGljIHZvaWQgYmJzdHJlYW1lcl9nemlwX2V4dHJhY3Rvcl9jb250ZW50KGJic3RyZWFtZXIgKnN0 cmVhbWVyLAorCQkJCQkJCQkJCQkgIGJic3RyZWFtZXJfbWVtYmVyICptZW1iZXIsCisJCQkJCQkJ CQkJCSAgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbiwKKwkJCQkJCQkJCQkJICBiYnN0cmVhbWVy X2FyY2hpdmVfY29udGV4dCBjb250ZXh0KTsKK3N0YXRpYyB2b2lkIGJic3RyZWFtZXJfZ3ppcF9l eHRyYWN0b3JfZmluYWxpemUoYmJzdHJlYW1lciAqc3RyZWFtZXIpOworc3RhdGljIHZvaWQgYmJz dHJlYW1lcl9nemlwX2V4dHJhY3Rvcl9mcmVlKGJic3RyZWFtZXIgKnN0cmVhbWVyKTsKK3N0YXRp YyB2b2lkICpnemlwX3BhbGxvYyh2b2lkICpvcGFxdWUsIHVuc2lnbmVkIGl0ZW1zLCB1bnNpZ25l ZCBzaXplKTsKK3N0YXRpYyB2b2lkIGd6aXBfcGZyZWUodm9pZCAqb3BhcXVlLCB2b2lkICphZGRy ZXNzKTsKKworY29uc3QgYmJzdHJlYW1lcl9vcHMgYmJzdHJlYW1lcl9nemlwX2V4dHJhY3Rvcl9v cHMgPSB7CisJLmNvbnRlbnQgPSBiYnN0cmVhbWVyX2d6aXBfZXh0cmFjdG9yX2NvbnRlbnQsCisJ LmZpbmFsaXplID0gYmJzdHJlYW1lcl9nemlwX2V4dHJhY3Rvcl9maW5hbGl6ZSwKKwkuZnJlZSA9 IGJic3RyZWFtZXJfZ3ppcF9leHRyYWN0b3JfZnJlZQorfTsKKyNlbmRpZgorCisvKgorICogQ3Jl YXRlIGEgYmJzdHJlYW1lciB0aGF0IGp1c3QgY29tcHJlc3NlcyBkYXRhIHVzaW5nIGd6aXAsIGFu ZCB0aGVuIHdyaXRlcworICogaXQgdG8gYSBmaWxlLgorICoKKyAqIEFzIGluIHRoZSBjYXNlIG9m IGJic3RyZWFtZXJfcGxhaW5fd3JpdGVyX25ldywgcGF0aG5hbWUgaXMgYWx3YXlzIHVzZWQKKyAq IGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXM7IGlmIGZpbGUgaXMgTlVMTCwgaXQgaXMgYWxz byB0aGUgb3BlbmVkIGFuZAorICogY2xvc2VkIHNvIHRoYXQgdGhlIGRhdGEgbWF5IGJlIHdyaXR0 ZW4gdGhlcmUuCisgKi8KK2Jic3RyZWFtZXIgKgorYmJzdHJlYW1lcl9nemlwX3dyaXRlcl9uZXco Y2hhciAqcGF0aG5hbWUsIEZJTEUgKmZpbGUsIGludCBjb21wcmVzc2xldmVsKQoreworI2lmZGVm IEhBVkVfTElCWgorCWJic3RyZWFtZXJfZ3ppcF93cml0ZXIgKnN0cmVhbWVyOworCisJc3RyZWFt ZXIgPSBwYWxsb2MwKHNpemVvZihiYnN0cmVhbWVyX2d6aXBfd3JpdGVyKSk7CisJKigoY29uc3Qg YmJzdHJlYW1lcl9vcHMgKiopICZzdHJlYW1lci0+YmFzZS5iYnNfb3BzKSA9CisJCSZiYnN0cmVh bWVyX2d6aXBfd3JpdGVyX29wczsKKworCXN0cmVhbWVyLT5wYXRobmFtZSA9IHBzdHJkdXAocGF0 aG5hbWUpOworCisJaWYgKGZpbGUgPT0gTlVMTCkKKwl7CisJCXN0cmVhbWVyLT5nemZpbGUgPSBn em9wZW4ocGF0aG5hbWUsICJ3YiIpOworCQlpZiAoc3RyZWFtZXItPmd6ZmlsZSA9PSBOVUxMKQor CQl7CisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgY29tcHJlc3NlZCBmaWxlIFwi JXNcIjogJW0iLAorCQkJCQkJIHBhdGhuYW1lKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJZWxz ZQorCXsKKwkJaW50CQkJZmQgPSBkdXAoZmlsZW5vKGZpbGUpKTsKKworCQlpZiAoZmQgPCAwKQor CQl7CisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBkdXBsaWNhdGUgc3Rkb3V0OiAlbSIpOwor CQkJZXhpdCgxKTsKKwkJfQorCisJCXN0cmVhbWVyLT5nemZpbGUgPSBnemRvcGVuKGZkLCAid2Ii KTsKKwkJaWYgKHN0cmVhbWVyLT5nemZpbGUgPT0gTlVMTCkKKwkJeworCQkJcGdfbG9nX2Vycm9y KCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZTogJW0iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9 CisKKwlpZiAoZ3pzZXRwYXJhbXMoc3RyZWFtZXItPmd6ZmlsZSwgY29tcHJlc3NsZXZlbCwKKwkJ CQkJWl9ERUZBVUxUX1NUUkFURUdZKSAhPSBaX09LKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJjb3Vs ZCBub3Qgc2V0IGNvbXByZXNzaW9uIGxldmVsICVkOiAlcyIsCisJCQkJCSBjb21wcmVzc2xldmVs LCBnZXRfZ3pfZXJyb3Ioc3RyZWFtZXItPmd6ZmlsZSkpOworCQlleGl0KDEpOworCX0KKworCXJl dHVybiAmc3RyZWFtZXItPmJhc2U7CisjZWxzZQorCXBnX2xvZ19lcnJvcigidGhpcyBidWlsZCBk b2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIik7CisJZXhpdCgxKTsKKyNlbmRpZgorfQorCisj aWZkZWYgSEFWRV9MSUJaCisvKgorICogV3JpdGUgYXJjaGl2ZSBjb250ZW50IHRvIGd6aXAgZmls ZS4KKyAqLworc3RhdGljIHZvaWQKK2Jic3RyZWFtZXJfZ3ppcF93cml0ZXJfY29udGVudChiYnN0 cmVhbWVyICpzdHJlYW1lciwKKwkJCQkJCQkgICBiYnN0cmVhbWVyX21lbWJlciAqbWVtYmVyLCBj b25zdCBjaGFyICpkYXRhLAorCQkJCQkJCSAgIGludCBsZW4sIGJic3RyZWFtZXJfYXJjaGl2ZV9j b250ZXh0IGNvbnRleHQpCit7CisJYmJzdHJlYW1lcl9nemlwX3dyaXRlciAqbXlzdHJlYW1lcjsK KworCW15c3RyZWFtZXIgPSAoYmJzdHJlYW1lcl9nemlwX3dyaXRlciAqKSBzdHJlYW1lcjsKKwor CWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuOworCisJZXJybm8gPSAwOworCWlmIChnendyaXRlKG15 c3RyZWFtZXItPmd6ZmlsZSwgZGF0YSwgbGVuKSAhPSBsZW4pCisJeworCQkvKiBpZiB3cml0ZSBk aWRuJ3Qgc2V0IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBpcyBubyBkaXNrIHNwYWNlICovCisJCWlm IChlcnJubyA9PSAwKQorCQkJZXJybm8gPSBFTk9TUEM7CisJCXBnX2xvZ19lcnJvcigiY291bGQg bm90IHdyaXRlIHRvIGNvbXByZXNzZWQgZmlsZSBcIiVzXCI6ICVzIiwKKwkJCQkJIG15c3RyZWFt ZXItPnBhdGhuYW1lLCBnZXRfZ3pfZXJyb3IobXlzdHJlYW1lci0+Z3pmaWxlKSk7CisJCWV4aXQo MSk7CisJfQorfQorCisvKgorICogRW5kLW9mLWFyY2hpdmUgcHJvY2Vzc2luZyB3aGVuIHdyaXRp bmcgdG8gYSBnemlwIGZpbGUgY29uc2lzdHMgb2YganVzdAorICogY2FsbGluZyBnemNsb3NlLgor ICoKKyAqIEl0IG1ha2VzIG5vIGRpZmZlcmVuY2Ugd2hldGhlciB3ZSBvcGVuZWQgdGhlIGZpbGUg b3IgdGhlIGNhbGxlciBkaWQgaXQsCisgKiBiZWNhdXNlIGxpYnogcHJvdmlkZXMgbm8gd2F5IG9m IGF2b2lkaW5nIGEgY2xvc2Ugb24gdGhlIHVuZGVybGluZyBmaWxlCisgKiBoYW5kbGUuIE5vdGlj ZSwgaG93ZXZlciwgdGhhdCBiYnN0cmVhbWVyX2d6aXBfd3JpdGVyX25ldygpIHVzZXMgZHVwKCkg dG8KKyAqIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUsIHNvIHRoYXQgdGhlIGJlaGF2aW9yIGZyb20g dGhlIGNhbGxlcidzIHZpZXdwb2ludAorICogaXMgdGhlIHNhbWUgYXMgZm9yIGJic3RyZWFtZXJf cGxhaW5fd3JpdGVyLgorICovCitzdGF0aWMgdm9pZAorYmJzdHJlYW1lcl9nemlwX3dyaXRlcl9m aW5hbGl6ZShiYnN0cmVhbWVyICpzdHJlYW1lcikKK3sKKwliYnN0cmVhbWVyX2d6aXBfd3JpdGVy ICpteXN0cmVhbWVyOworCisJbXlzdHJlYW1lciA9IChiYnN0cmVhbWVyX2d6aXBfd3JpdGVyICop IHN0cmVhbWVyOworCisJZXJybm8gPSAwOwkJCQkJLyogaW4gY2FzZSBnemNsb3NlKCkgZG9lc24n dCBzZXQgaXQgKi8KKwlpZiAoZ3pjbG9zZShteXN0cmVhbWVyLT5nemZpbGUpICE9IDApCisJewor CQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2VkIGZpbGUgXCIlc1wiOiAl bSIsCisJCQkJCSBteXN0cmVhbWVyLT5wYXRobmFtZSk7CisJCWV4aXQoMSk7CisJfQorCisJbXlz dHJlYW1lci0+Z3pmaWxlID0gTlVMTDsKK30KKworLyoKKyAqIEZyZWUgbWVtb3J5IGFzc29jaWF0 ZWQgd2l0aCB0aGlzIGJic3RyZWFtZXIuCisgKi8KK3N0YXRpYyB2b2lkCitiYnN0cmVhbWVyX2d6 aXBfd3JpdGVyX2ZyZWUoYmJzdHJlYW1lciAqc3RyZWFtZXIpCit7CisJYmJzdHJlYW1lcl9nemlw X3dyaXRlciAqbXlzdHJlYW1lcjsKKworCW15c3RyZWFtZXIgPSAoYmJzdHJlYW1lcl9nemlwX3dy aXRlciAqKSBzdHJlYW1lcjsKKworCUFzc2VydChteXN0cmVhbWVyLT5iYXNlLmJic19uZXh0ID09 IE5VTEwpOworCUFzc2VydChteXN0cmVhbWVyLT5nemZpbGUgPT0gTlVMTCk7CisKKwlwZnJlZSht eXN0cmVhbWVyLT5wYXRobmFtZSk7CisJcGZyZWUobXlzdHJlYW1lcik7Cit9CisKKy8qCisgKiBI ZWxwZXIgZnVuY3Rpb24gZm9yIGxpYnogZXJyb3IgcmVwb3J0aW5nLgorICovCitzdGF0aWMgY29u c3QgY2hhciAqCitnZXRfZ3pfZXJyb3IoZ3pGaWxlIGd6ZikKK3sKKwlpbnQJCQllcnJudW07CisJ Y29uc3QgY2hhciAqZXJybXNnOworCisJZXJybXNnID0gZ3plcnJvcihnemYsICZlcnJudW0pOwor CWlmIChlcnJudW0gPT0gWl9FUlJOTykKKwkJcmV0dXJuIHN0cmVycm9yKGVycm5vKTsKKwllbHNl CisJCXJldHVybiBlcnJtc2c7Cit9CisjZW5kaWYKKworLyoKKyAqIENyZWF0ZSBhIG5ldyBiYXNl IGJhY2t1cCBzdHJlYW1lciB0aGF0IHBlcmZvcm1zIGRlY29tcHJlc3Npb24gb2YgZ3ppcAorICog Y29tcHJlc3NlZCBibG9ja3MuCisgKi8KK2Jic3RyZWFtZXIgKgorYmJzdHJlYW1lcl9nemlwX2V4 dHJhY3Rvcl9uZXcoYmJzdHJlYW1lciAqbmV4dCkKK3sKKyNpZmRlZiBIQVZFX0xJQloKKwliYnN0 cmVhbWVyX2d6aXBfZXh0cmFjdG9yCSpzdHJlYW1lcjsKKwl6X3N0cmVhbSAqenM7CisKKwlBc3Nl cnQobmV4dCAhPSBOVUxMKTsKKworCXN0cmVhbWVyID0gcGFsbG9jMChzaXplb2YoYmJzdHJlYW1l cl9nemlwX2V4dHJhY3RvcikpOworCSooKGNvbnN0IGJic3RyZWFtZXJfb3BzICoqKSAmc3RyZWFt ZXItPmJhc2UuYmJzX29wcykgPQorCQkmYmJzdHJlYW1lcl9nemlwX2V4dHJhY3Rvcl9vcHM7CisK KwlzdHJlYW1lci0+YmFzZS5iYnNfbmV4dCA9IG5leHQ7CisJaW5pdFN0cmluZ0luZm8oJnN0cmVh bWVyLT5iYXNlLmJic19idWZmZXIpOworCisJLyogSW5pdGlhbGl6ZSBpbnRlcm5hbCBzdHJlYW0g c3RhdGUgZm9yIGRlY29tcHJlc3Npb24gKi8KKwl6cyA9ICZzdHJlYW1lci0+enN0cmVhbTsKKwl6 cy0+emFsbG9jID0gZ3ppcF9wYWxsb2M7CisJenMtPnpmcmVlID0gZ3ppcF9wZnJlZTsKKwl6cy0+ bmV4dF9vdXQgPSAodWludDggKikgc3RyZWFtZXItPmJhc2UuYmJzX2J1ZmZlci5kYXRhOworCXpz LT5hdmFpbF9vdXQgPSBzdHJlYW1lci0+YmFzZS5iYnNfYnVmZmVyLm1heGxlbjsKKworCS8qCisJ ICogRGF0YSBjb21wcmVzc2lvbiB3YXMgaW5pdGlhbGl6ZWQgdXNpbmcgZGVmbGF0ZUluaXQyIHRv IHJlcXVlc3QgYSBnemlwCisJICogaGVhZGVyLiBTaW1pbGFybHksIHdlIGFyZSB1c2luZyBpbmZs YXRlSW5pdDIgdG8gaW5pdGlhbGl6ZSBkYXRhCisJICogZGVjb21wcmVzc2lvbi4KKwkgKgorCSAq IFBlciB0aGUgZG9jdW1lbnRhdGlvbiBvZiBpbmZsYXRlSW5pdDIsIHRoZSBzZWNvbmQgYXJndW1l bnQgaXMKKwkgKiAid2luZG93Qml0cyIgYW5kIGl0J3MgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRo YW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlCisJICogcHJvdmlkZWQgd2hpbGUgY29tcHJlc3Npbmcg dGhlIGRhdGEsIHNvIHdlIGFyZSB1c2luZyB0aGUgbWF4aW11bQorCSAqIHBvc3NpYmxlIHZhbHVl IGZvciBzYWZldHkuCisJICovCisJaWYgKGluZmxhdGVJbml0Mih6cywgMTUgKyAxNikgIT0gWl9P SykKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJlc3Npb24g bGlicmFyeSIpOworCQlleGl0KDEpOworCisJfQorCisJcmV0dXJuICZzdHJlYW1lci0+YmFzZTsK KyNlbHNlCisJcGdfbG9nX2Vycm9yKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJl c3Npb24iKTsKKwlleGl0KDEpOworI2VuZGlmCit9CisKKyNpZmRlZiBIQVZFX0xJQloKKy8qCisg KiBEZWNvbXByZXNzIHRoZSBpbnB1dCBkYXRhIHRvIG91dHB1dCBidWZmZXIgdW50aWwgd2UgcmFu IG91dCBvZiB0aGUgaW5wdXQKKyAqIGRhdGEuIEVhY2ggdGltZSB0aGUgb3V0cHV0IGJ1ZmZlciBp cyBmdWxsIGludm9rZSBiYnN0cmVhbWVyX2NvbnRlbnQgdG8gcGFzcworICogb24gdGhlIGRlY29t cHJlc3NlZCBkYXRhIHRvIG5leHQgc3RyZWFtZXIuCisgKi8KK3N0YXRpYyB2b2lkCitiYnN0cmVh bWVyX2d6aXBfZXh0cmFjdG9yX2NvbnRlbnQoYmJzdHJlYW1lciAqc3RyZWFtZXIsCisJCQkJCQkJ CSAgYmJzdHJlYW1lcl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJCQkJICBjb25zdCBjaGFyICpkYXRh LCBpbnQgbGVuLAorCQkJCQkJCQkgIGJic3RyZWFtZXJfYXJjaGl2ZV9jb250ZXh0IGNvbnRleHQp Cit7CisJYmJzdHJlYW1lcl9nemlwX2V4dHJhY3RvciAqbXlzdHJlYW1lciA9IChiYnN0cmVhbWVy X2d6aXBfZXh0cmFjdG9yICopIHN0cmVhbWVyOworCXpfc3RyZWFtICp6cyA9ICZteXN0cmVhbWVy LT56c3RyZWFtOworCisKKwl6cy0+bmV4dF9pbiA9ICh1aW50OCAqKSBkYXRhOworCXpzLT5hdmFp bF9pbiA9IGxlbjsKKworCS8qIFByb2Nlc3MgdGhlIGN1cnJlbnQgY2h1bmsgKi8KKwl3aGlsZSAo enMtPmF2YWlsX2luID4gMCkKKwl7CisJCWludCByZXM7CisKKwkJQXNzZXJ0KG15c3RyZWFtZXIt PmJ5dGVzX3dyaXR0ZW4gPCBteXN0cmVhbWVyLT5iYXNlLmJic19idWZmZXIubWF4bGVuKTsKKwor CQl6cy0+bmV4dF9vdXQgPSAodWludDggKikKKwkJCW15c3RyZWFtZXItPmJhc2UuYmJzX2J1ZmZl ci5kYXRhICsgbXlzdHJlYW1lci0+Ynl0ZXNfd3JpdHRlbjsKKwkJenMtPmF2YWlsX291dCA9IG15 c3RyZWFtZXItPmJhc2UuYmJzX2J1ZmZlci5tYXhsZW4gLSBteXN0cmVhbWVyLT5ieXRlc193cml0 dGVuOworCisJCS8qCisJCSAqIERlY29tcHJlc3NlcyBkYXRhIHN0YXJ0aW5nIGF0IHpzLT5uZXh0 X2luIGFuZCB1cGRhdGUgenMtPm5leHRfaW4KKwkJICogYW5kIHpzLT5hdmFpbF9pbiwgZ2VuZXJh dGUgb3V0cHV0IGRhdGEgc3RhcnRpbmcgYXQgenMtPm5leHRfb3V0CisJCSAqIGFuZCB1cGRhdGUg enMtPm5leHRfb3V0IGFuZCB6cy0+YXZhaWxfb3V0IGFjY29yZGluZ2x5LgorCQkgKi8KKwkJcmVz ID0gaW5mbGF0ZSh6cywgWl9OT19GTFVTSCk7CisKKwkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FUlJP UikKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGRlY29tcHJlc3MgZGF0YTogJXMiLCB6cy0+ bXNnKTsKKworCQlteXN0cmVhbWVyLT5ieXRlc193cml0dGVuID0gbXlzdHJlYW1lci0+YmFzZS5i YnNfYnVmZmVyLm1heGxlbiAtIHpzLT5hdmFpbF9vdXQ7CisKKwkJLyogSWYgb3V0cHV0IGJ1ZmZl ciBpcyBmdWxsIHRoZW4gcGFzcyBvbiB0aGUgY29udGVudCB0byBuZXh0IHN0cmVhbWVyICovCisJ CWlmIChteXN0cmVhbWVyLT5ieXRlc193cml0dGVuID49IG15c3RyZWFtZXItPmJhc2UuYmJzX2J1 ZmZlci5tYXhsZW4pCisJCXsKKwkJCWJic3RyZWFtZXJfY29udGVudChteXN0cmVhbWVyLT5iYXNl LmJic19uZXh0LCBtZW1iZXIsCisJCQkJCQkJICAgbXlzdHJlYW1lci0+YmFzZS5iYnNfYnVmZmVy LmRhdGEsCisJCQkJCQkJICAgbXlzdHJlYW1lci0+YmFzZS5iYnNfYnVmZmVyLm1heGxlbiwgY29u dGV4dCk7CisJCQlteXN0cmVhbWVyLT5ieXRlc193cml0dGVuID0gMDsKKwkJfQorCX0KK30KKwor LyoKKyAqIEVuZC1vZi1zdHJlYW0gcHJvY2Vzc2luZy4KKyAqLworc3RhdGljIHZvaWQKK2Jic3Ry ZWFtZXJfZ3ppcF9leHRyYWN0b3JfZmluYWxpemUoYmJzdHJlYW1lciAqc3RyZWFtZXIpCit7CisJ YmJzdHJlYW1lcl9nemlwX2V4dHJhY3RvciAqbXlzdHJlYW1lciA9IChiYnN0cmVhbWVyX2d6aXBf ZXh0cmFjdG9yICopIHN0cmVhbWVyOworCisJLyoKKwkgKiBFbmQgb2YgdGhlIHN0cmVhbSwgaWYg dGhlcmUgaXMgc29tZSBwZW5kaW5nIGRhdGEgaW4gb3V0cHV0IGJ1ZmZlcnMgdGhlbgorCSAqIHdl IG11c3QgZm9yd2FyZCBpdCB0byBuZXh0IHN0cmVhbWVyLgorCSAqLworCWJic3RyZWFtZXJfY29u dGVudChteXN0cmVhbWVyLT5iYXNlLmJic19uZXh0LCBOVUxMLAorCQkJCQkgICBteXN0cmVhbWVy LT5iYXNlLmJic19idWZmZXIuZGF0YSwKKwkJCQkJICAgbXlzdHJlYW1lci0+YmFzZS5iYnNfYnVm ZmVyLm1heGxlbiwKKwkJCQkJICAgQkJTVFJFQU1FUl9VTktOT1dOKTsKKworCWJic3RyZWFtZXJf ZmluYWxpemUobXlzdHJlYW1lci0+YmFzZS5iYnNfbmV4dCk7Cit9CisKKy8qCisgKiBGcmVlIG1l bW9yeS4KKyAqLworc3RhdGljIHZvaWQKK2Jic3RyZWFtZXJfZ3ppcF9leHRyYWN0b3JfZnJlZShi YnN0cmVhbWVyICpzdHJlYW1lcikKK3sKKwliYnN0cmVhbWVyX2d6aXBfZXh0cmFjdG9yICpteXN0 cmVhbWVyID0gKGJic3RyZWFtZXJfZ3ppcF9leHRyYWN0b3IgKikgc3RyZWFtZXI7CisKKwliYnN0 cmVhbWVyX2ZyZWUobXlzdHJlYW1lci0+YmFzZS5iYnNfbmV4dCk7CisJcGZyZWUobXlzdHJlYW1l ci0+YmFzZS5iYnNfYnVmZmVyLmRhdGEpOworCXBmcmVlKHN0cmVhbWVyKTsKK30KKworLyoKKyAq IFdyYXBwZXIgZnVuY3Rpb24gdG8gYWRqdXN0IHRoZSBzaWduYXR1cmUgb2YgcGFsbG9jIHRvIG1h dGNoIHdoYXQgbGliegorICogZXhwZWN0cy4KKyAqLworc3RhdGljIHZvaWQgKgorZ3ppcF9wYWxs b2Modm9pZCAqb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywgdW5zaWduZWQgc2l6ZSkKK3sKKwlyZXR1 cm4gcGFsbG9jKGl0ZW1zICogc2l6ZSk7Cit9CisKKy8qCisgKiBXcmFwcGVyIGZ1bmN0aW9uIHRv IGFkanVzdCB0aGUgc2lnbmF0dXJlIG9mIHBmcmVlIHRvIG1hdGNoIHdoYXQgbGliegorICogZXhw ZWN0cy4KKyAqLworc3RhdGljIHZvaWQKK2d6aXBfcGZyZWUodm9pZCAqb3BhcXVlLCB2b2lkICph ZGRyZXNzKQoreworCXBmcmVlKGFkZHJlc3MpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5jIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3Vw L3BnX2Jhc2ViYWNrdXAuYwppbmRleCA2ZWU0OWE1Li5kNDNlYjRiIDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5jCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJh Y2t1cC9wZ19iYXNlYmFja3VwLmMKQEAgLTExMSw2ICsxMTEsMTIgQEAgdHlwZWRlZiBlbnVtCiAJ U1RSRUFNX1dBTAogfSBJbmNsdWRlV2FsOwogCit0eXBlZGVmIGVudW0KK3sKKwlCQUNLVVBfQ09N UFJFU1NJT05fTk9ORSwKKwlCQUNLVVBfQ09NUFJFU1NJT05fR1pJUAorfSBjb21wcmVzc2lvbl90 eXBlOworCiAvKiBHbG9iYWwgb3B0aW9ucyAqLwogc3RhdGljIGNoYXIgKmJhc2VkaXIgPSBOVUxM Owogc3RhdGljIFRhYmxlc3BhY2VMaXN0IHRhYmxlc3BhY2VfZGlycyA9IHtOVUxMLCBOVUxMfTsK QEAgLTE3Myw2ICsxNzksMTAgQEAgc3RhdGljIGludAloYXNfeGxvZ2VuZHB0ciA9IDA7CiBzdGF0 aWMgdm9sYXRpbGUgTE9ORyBoYXNfeGxvZ2VuZHB0ciA9IDA7CiAjZW5kaWYKIAorLyogU2VydmVy IHNpZGUgY29tcHJlc3Npb24gbWV0aG9kIGFuZCBjb21wcmVzc2lvbiBsZXZlbCAqLworc3RhdGlj IGNvbXByZXNzaW9uX3R5cGUJc2VydmVyX2NvbXByZXNzaW9uX3R5cGUgPSBCQUNLVVBfQ09NUFJF U1NJT05fTk9ORTsKK3N0YXRpYyBpbnQJCQkJc2VydmVyX2NvbXByZXNzaW9uX2xldmVsID0gMDsK KwogLyogQ29udGVudHMgb2YgY29uZmlndXJhdGlvbiBmaWxlIHRvIGJlIGdlbmVyYXRlZCAqLwog c3RhdGljIFBRRXhwQnVmZmVyIHJlY292ZXJ5Y29uZmNvbnRlbnRzID0gTlVMTDsKIApAQCAtMTAw Miw3ICsxMDEyLDggQEAgQ3JlYXRlQmFja3VwU3RyZWFtZXIoY2hhciAqYXJjaGl2ZV9uYW1lLCBj aGFyICpzcGNsb2NhdGlvbiwKIAliYnN0cmVhbWVyICpzdHJlYW1lcjsKIAliYnN0cmVhbWVyICpt YW5pZmVzdF9pbmplY3Rfc3RyZWFtZXIgPSBOVUxMOwogCWJvb2wJCWluamVjdF9tYW5pZmVzdDsK LQlib29sCQlpc190YXI7CisJYm9vbAkJaXNfdGFyLAorCQkJCWlzX3Rhcl9nejsKIAlib29sCQlt dXN0X3BhcnNlX2FyY2hpdmU7CiAJaW50CQkJYXJjaGl2ZV9uYW1lX2xlbiA9IHN0cmxlbihhcmNo aXZlX25hbWUpOwogCkBAIC0xMDE3LDYgKzEwMjgsMTAgQEAgQ3JlYXRlQmFja3VwU3RyZWFtZXIo Y2hhciAqYXJjaGl2ZV9uYW1lLCBjaGFyICpzcGNsb2NhdGlvbiwKIAlpc190YXIgPSAoYXJjaGl2 ZV9uYW1lX2xlbiA+IDQgJiYKIAkJCSAgc3RyY21wKGFyY2hpdmVfbmFtZSArIGFyY2hpdmVfbmFt ZV9sZW4gLSA0LCAiLnRhciIpID09IDApOwogCisJLyogSXMgdGhpcyBhIGd6aXAgYXJjaGl2ZT8g Ki8KKwlpc190YXJfZ3ogPSAoYXJjaGl2ZV9uYW1lX2xlbiA+IDggJiYKKwkJCQkgc3RyY21wKGFy Y2hpdmVfbmFtZSArIGFyY2hpdmVfbmFtZV9sZW4gLSAzLCAiLmd6IikgPT0gMCk7CisKIAkvKgog CSAqIFdlIGhhdmUgdG8gcGFyc2UgdGhlIGFyY2hpdmUgaWYgKDEpIHdlJ3JlIHN1cHBvc2UgdG8g ZXh0cmFjdCBpdCwgb3IgaWYKIAkgKiAoMikgd2UgbmVlZCB0byBpbmplY3QgYmFja3VwX21hbmlm ZXN0IG9yIHJlY292ZXJ5IGNvbmZpZ3VyYXRpb24gaW50byBpdC4KQEAgLTEwMjUsOCArMTA0MCw4 IEBAIENyZWF0ZUJhY2t1cFN0cmVhbWVyKGNoYXIgKmFyY2hpdmVfbmFtZSwgY2hhciAqc3BjbG9j YXRpb24sCiAJbXVzdF9wYXJzZV9hcmNoaXZlID0gKGZvcm1hdCA9PSAncCcgfHwgaW5qZWN0X21h bmlmZXN0IHx8CiAJCShzcGNsb2NhdGlvbiA9PSBOVUxMICYmIHdyaXRlcmVjb3Zlcnljb25mKSk7 CiAKLQkvKiBBdCBwcmVzZW50LCB3ZSBvbmx5IGtub3cgaG93IHRvIHBhcnNlIHRhciBhcmNoaXZl cy4gKi8KLQlpZiAobXVzdF9wYXJzZV9hcmNoaXZlICYmICFpc190YXIpCisJLyogQXQgcHJlc2Vu dCwgd2Ugb25seSBrbm93IGhvdyB0byBwYXJzZSB0YXIgYW5kIGd6aXAgYXJjaGl2ZXMuICovCisJ aWYgKG11c3RfcGFyc2VfYXJjaGl2ZSAmJiAhaXNfdGFyICYmICFpc190YXJfZ3opCiAJewogCQlw Z19sb2dfZXJyb3IoInVuYWJsZSB0byBwYXJzZSBhcmNoaXZlOiAlcyIsIGFyY2hpdmVfbmFtZSk7 CiAJCXBnX2xvZ19pbmZvKCJvbmx5IHRhciBhcmNoaXZlcyBjYW4gYmUgcGFyc2VkIik7CkBAIC0x MTM2LDYgKzExNTEsMTMgQEAgQ3JlYXRlQmFja3VwU3RyZWFtZXIoY2hhciAqYXJjaGl2ZV9uYW1l LCBjaGFyICpzcGNsb2NhdGlvbiwKIAllbHNlIGlmIChleHBlY3RfdW50ZXJtaW5hdGVkX3RhcmZp bGUpCiAJCXN0cmVhbWVyID0gYmJzdHJlYW1lcl90YXJfdGVybWluYXRvcl9uZXcoc3RyZWFtZXIp OwogCisJLyoKKwkgKiBFeHRyYWN0IHRoZSBnemlwIGNvbXByZXNzZWQgYXJjaGl2ZSB1c2luZyBh IGd6aXAgZXh0cmFjdG9yIGFuZCB0aGVuCisJICogZm9yd2FyZCBpdCB0byBuZXh0IHN0cmVhbWVy LgorCSAqLworCWlmIChmb3JtYXQgPT0gJ3AnICYmIHNlcnZlcl9jb21wcmVzc2lvbl90eXBlID09 IEJBQ0tVUF9DT01QUkVTU0lPTl9HWklQKQorCQlzdHJlYW1lciA9IGJic3RyZWFtZXJfZ3ppcF9l eHRyYWN0b3JfbmV3KHN0cmVhbWVyKTsKKwogCS8qIFJldHVybiB0aGUgcmVzdWx0cy4gKi8KIAkq bWFuaWZlc3RfaW5qZWN0X3N0cmVhbWVyX3AgPSBtYW5pZmVzdF9pbmplY3Rfc3RyZWFtZXI7CiAJ cmV0dXJuIHN0cmVhbWVyOwpAQCAtMjQ0OCw2ICsyNDcwLDIxIEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQlleGl0KDEpOwogCX0KIAorCWlmIChzZXJ2ZXJfY29tcHJlc3Npb24gIT0g TlVMTCkKKwl7CisJCWlmIChzdHJjbXAoc2VydmVyX2NvbXByZXNzaW9uLCAiZ3ppcCIpID09IDAp CisJCQlzZXJ2ZXJfY29tcHJlc3Npb25fdHlwZSA9IEJBQ0tVUF9DT01QUkVTU0lPTl9HWklQOwor CQllbHNlIGlmIChzdHJsZW4oc2VydmVyX2NvbXByZXNzaW9uKSA9PSA1ICYmCisJCQkJc3RybmNt cChzZXJ2ZXJfY29tcHJlc3Npb24sICJnemlwIiwgNCkgPT0gMCAmJgorCQkJCXNlcnZlcl9jb21w cmVzc2lvbls0XSA+PSAnMScgJiYgc2VydmVyX2NvbXByZXNzaW9uWzRdIDw9ICc5JykKKwkJewor CQkJc2VydmVyX2NvbXByZXNzaW9uX3R5cGUgPSBCQUNLVVBfQ09NUFJFU1NJT05fR1pJUDsKKwkJ CXNlcnZlcl9jb21wcmVzc2lvbl9sZXZlbCA9IHNlcnZlcl9jb21wcmVzc2lvbls0XSAtICcwJzsK KwkJfQorCX0KKwllbHNlCisJCXNlcnZlcl9jb21wcmVzc2lvbl90eXBlID0gQkFDS1VQX0NPTVBS RVNTSU9OX05PTkU7CisKIAkvKgogCSAqIENvbXByZXNzaW9uIGRvZXNuJ3QgbWFrZSBzZW5zZSB1 bmxlc3MgdGFyIGZvcm1hdCBpcyBpbiB1c2UuCiAJICovCi0tIAoxLjguMy4xCgo= --000000000000bb842d05d603178e Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0002-Test-plain-format-server-compressed-gzip-backup.patch" Content-Disposition: attachment; filename="v2-0002-Test-plain-format-server-compressed-gzip-backup.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kymz8e0i1 RnJvbSBiNTRmNDA3MjFmZWRiNTY2Y2QyMTIwNjFmZDJhMTBmZTUwYzMxYTVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEaXBlc2ggUGFuZGl0IDxkaXBlc2gucGFuZGl0QGVudGVycHJp c2VkYi5jb20+CkRhdGU6IFRodSwgMjAgSmFuIDIwMjIgMTc6NDQ6NTIgKzA1MzAKU3ViamVjdDog W1BBVENIIDIvMl0gVGVzdCBwbGFpbiBmb3JtYXQgc2VydmVyIGNvbXByZXNzZWQgZ3ppcCBiYWNr dXAKCi0tLQogc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMDhfdW50YXIucGwgfCAxMTEgKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNzQgaW5zZXJ0 aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCiBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHNy Yy9iaW4vcGdfdmVyaWZ5YmFja3VwL3QvMDA4X3VudGFyLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ192ZXJpZnliYWNrdXAvdC8wMDhfdW50YXIucGwgYi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1 cC90LzAwOF91bnRhci5wbApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDg1 OTQ2Y2YuLjA4ODVjNWMKLS0tIGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMDhfdW50YXIu cGwKKysrIGIvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMDhfdW50YXIucGwKQEAgLTExLDcg KzExLDcgQEAgdXNlIENvbmZpZzsKIHVzZSBGaWxlOjpQYXRoIHF3KHJtdHJlZSk7CiB1c2UgUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKLXVz ZSBUZXN0OjpNb3JlIHRlc3RzID0+IDY7Cit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAxMDsKIAog bXkgJHByaW1hcnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnknKTsK ICRwcmltYXJ5LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gMSk7CkBAIC0zNSw2ICszNSwxMiBA QCBteSBAdGVzdF9jb25maWd1cmF0aW9uID0gKAogCQknZGVjb21wcmVzc19wcm9ncmFtJyA9PiAk RU5WeydHWklQX1BST0dSQU0nfSwKIAkJJ2RlY29tcHJlc3NfZmxhZ3MnID0+IFsgJy1kJyBdLAog CQknZW5hYmxlZCcgPT4gY2hlY2tfcGdfY29uZmlnKCIjZGVmaW5lIEhBVkVfTElCWiAxIikKKwl9 LAorCXsKKwkJJ2NvbXByZXNzaW9uX21ldGhvZCcgPT4gJ2d6aXAnLAorCQknYmFja3VwX2ZsYWdz JyA9PiBbJy0tc2VydmVyLWNvbXByZXNzJywgJ2d6aXAnLCAnLUZwJ10sCisJCSdwbGFpbl9mb3Jt YXQnID0+IDEsCisJCSdlbmFibGVkJyA9PiBjaGVja19wZ19jb25maWcoIiNkZWZpbmUgSEFWRV9M SUJaIDEiKSwKIAl9CiApOwogCkBAIC01MSw1NCArNTcsODUgQEAgZm9yIG15ICR0YyAoQHRlc3Rf Y29uZmlndXJhdGlvbikKIAogCQkjIFRha2UgYSBzZXJ2ZXItc2lkZSBiYWNrdXAuCiAJCW15IEBi YWNrdXAgPSAoCi0JCQkncGdfYmFzZWJhY2t1cCcsICctLW5vLXN5bmMnLCAnLWNmYXN0JywgJy0t dGFyZ2V0JywKLQkJCSJzZXJ2ZXI6JGJhY2t1cF9wYXRoIiwgJy1YZmV0Y2gnCisJCQkncGdfYmFz ZWJhY2t1cCcsICctLW5vLXN5bmMnLCAnLWNmYXN0JywgJy1YZmV0Y2gnCiAJCSk7CisKKwkJaWYg KCEgJHRjLT57J3BsYWluX2Zvcm1hdCd9KQorCQl7CisJCQlwdXNoIEBiYWNrdXAsICctLXRhcmdl dCcsICJzZXJ2ZXI6JGJhY2t1cF9wYXRoIjsKKwkJfQorCQllbHNlCisJCXsKKwkJCSMgVGFyZ2V0 IGNhbm5vdCBiZSB1c2VkIHdpdGggcGxhaW4gZm9ybWF0IGJhY2t1cC4KKwkJCXB1c2ggQGJhY2t1 cCwgJy1EJywgIiRiYWNrdXBfcGF0aCI7CisKKwkJCSMgTWFrZSBzdXJlIHRoYXQgYmFja3VwIGRp cmVjdG9yeSBpcyBlbXB0eS4KKwkJCXJtdHJlZSgkYmFja3VwX3BhdGgpOworCQl9CisKIAkJcHVz aCBAYmFja3VwLCBAeyR0Yy0+eydiYWNrdXBfZmxhZ3MnfX07CiAJCSRwcmltYXJ5LT5jb21tYW5k X29rKFxAYmFja3VwLAogCQkJCQkJCSAic2VydmVyIHNpZGUgYmFja3VwLCBjb21wcmVzc2lvbiAk bWV0aG9kIik7CiAKIAotCQkjIFZlcmlmeSB0aGF0IHRoZSB3ZSBnb3QgdGhlIGZpbGVzIHdlIGV4 cGVjdGVkLgotCQlteSAkYmFja3VwX2ZpbGVzID0gam9pbignLCcsCi0JCQlzb3J0IGdyZXAgeyAk XyBuZSAnLicgJiYgJF8gbmUgJy4uJyB9IHNsdXJwX2RpcigkYmFja3VwX3BhdGgpKTsKLQkJbXkg JGV4cGVjdGVkX2JhY2t1cF9maWxlcyA9IGpvaW4oJywnLAotCQkJc29ydCAoJ2JhY2t1cF9tYW5p ZmVzdCcsICR0Yy0+eydiYWNrdXBfYXJjaGl2ZSd9KSk7Ci0JCWlzKCRiYWNrdXBfZmlsZXMsJGV4 cGVjdGVkX2JhY2t1cF9maWxlcywKLQkJCSJmb3VuZCBleHBlY3RlZCBiYWNrdXAgZmlsZXMsIGNv bXByZXNzaW9uICRtZXRob2QiKTsKLQotCQkjIERlY29tcHJlc3MuCi0JCWlmIChleGlzdHMgJHRj LT57J2RlY29tcHJlc3NfcHJvZ3JhbSd9KQorCQlpZiAoISAkdGMtPnsncGxhaW5fZm9ybWF0J30p CiAJCXsKLQkJCW15IEBkZWNvbXByZXNzID0gKCR0Yy0+eydkZWNvbXByZXNzX3Byb2dyYW0nfSk7 Ci0JCQlwdXNoIEBkZWNvbXByZXNzLCBAeyR0Yy0+eydkZWNvbXByZXNzX2ZsYWdzJ319Ci0JCQkJ aWYgJHRjLT57J2RlY29tcHJlc3NfZmxhZ3MnfTsKLQkJCXB1c2ggQGRlY29tcHJlc3MsICRiYWNr dXBfcGF0aCAuICcvJyAuICR0Yy0+eydiYWNrdXBfYXJjaGl2ZSd9OwotCQkJc3lzdGVtX29yX2Jh aWwoQGRlY29tcHJlc3MpOwotCQl9CisJCQkjIFZlcmlmeSB0aGF0IHRoZSB3ZSBnb3QgdGhlIGZp bGVzIHdlIGV4cGVjdGVkLgorCQkJbXkgJGJhY2t1cF9maWxlcyA9IGpvaW4oJywnLAorCQkJCXNv cnQgZ3JlcCB7ICRfIG5lICcuJyAmJiAkXyBuZSAnLi4nIH0gc2x1cnBfZGlyKCRiYWNrdXBfcGF0 aCkpOworCQkJbXkgJGV4cGVjdGVkX2JhY2t1cF9maWxlcyA9IGpvaW4oJywnLAorCQkJCXNvcnQg KCdiYWNrdXBfbWFuaWZlc3QnLCAkdGMtPnsnYmFja3VwX2FyY2hpdmUnfSkpOworCQkJaXMoJGJh Y2t1cF9maWxlcywkZXhwZWN0ZWRfYmFja3VwX2ZpbGVzLAorCQkJCSJmb3VuZCBleHBlY3RlZCBi YWNrdXAgZmlsZXMsIGNvbXByZXNzaW9uICRtZXRob2QiKTsKKworCQkJIyBEZWNvbXByZXNzLgor CQkJaWYgKGV4aXN0cyAkdGMtPnsnZGVjb21wcmVzc19wcm9ncmFtJ30pCisJCQl7CisJCQkJbXkg QGRlY29tcHJlc3MgPSAoJHRjLT57J2RlY29tcHJlc3NfcHJvZ3JhbSd9KTsKKwkJCQlwdXNoIEBk ZWNvbXByZXNzLCBAeyR0Yy0+eydkZWNvbXByZXNzX2ZsYWdzJ319CisJCQkJCWlmICR0Yy0+eydk ZWNvbXByZXNzX2ZsYWdzJ307CisJCQkJcHVzaCBAZGVjb21wcmVzcywgJGJhY2t1cF9wYXRoIC4g Jy8nIC4gJHRjLT57J2JhY2t1cF9hcmNoaXZlJ307CisJCQkJc3lzdGVtX29yX2JhaWwoQGRlY29t cHJlc3MpOworCQkJfQorCisJCQlTS0lQOiB7CisJCQkJbXkgJHRhciA9ICRFTlZ7VEFSfTsKKwkJ CQkjIGRvbid0IGNoZWNrIGZvciBhIHdvcmtpbmcgdGFyIGhlcmUsIHRvIGFjY29tbW9kYXRlIHZh cmlvdXMgb2RkCisJCQkJIyBjYXNlcyBzdWNoIGFzIEFJWC4gSWYgdGFyIGRvZXNuJ3Qgd29yayB0 aGUgaW5pdF9mcm9tX2JhY2t1cCBiZWxvdworCQkJCSMgd2lsbCBmYWlsLgorCQkJCXNraXAgIm5v IHRhciBwcm9ncmFtIGF2YWlsYWJsZSIsIDEKKwkJCQkJaWYgKCFkZWZpbmVkICR0YXIgfHwgJHRh ciBlcSAnJyk7CiAKLQkJU0tJUDogewotCQkJbXkgJHRhciA9ICRFTlZ7VEFSfTsKLQkJCSMgZG9u J3QgY2hlY2sgZm9yIGEgd29ya2luZyB0YXIgaGVyZSwgdG8gYWNjb21vZGF0ZSB2YXJpb3VzIG9k ZAotCQkJIyBjYXNlcyBzdWNoIGFzIEFJWC4gSWYgdGFyIGRvZXNuJ3Qgd29yayB0aGUgaW5pdF9m cm9tX2JhY2t1cCBiZWxvdwotCQkJIyB3aWxsIGZhaWwuCi0JCQlza2lwICJubyB0YXIgcHJvZ3Jh bSBhdmFpbGFibGUiLCAxCi0JCQkJaWYgKCFkZWZpbmVkICR0YXIgfHwgJHRhciBlcSAnJyk7CisJ CQkJIyBVbnRhci4KKwkJCQlta2RpcigkZXh0cmFjdF9wYXRoKTsKKwkJCQlzeXN0ZW1fb3JfYmFp bCgkdGFyLCAneGYnLCAkYmFja3VwX3BhdGggLiAnL2Jhc2UudGFyJywKKwkJCQkJJy1DJywgJGV4 dHJhY3RfcGF0aCk7CiAKLQkJCSMgVW50YXIuCi0JCQlta2RpcigkZXh0cmFjdF9wYXRoKTsKLQkJ CXN5c3RlbV9vcl9iYWlsKCR0YXIsICd4ZicsICRiYWNrdXBfcGF0aCAuICcvYmFzZS50YXInLAot CQkJCSctQycsICRleHRyYWN0X3BhdGgpOworCQkJCSMgVmVyaWZ5LgorCQkJCSRwcmltYXJ5LT5j b21tYW5kX29rKFsgJ3BnX3ZlcmlmeWJhY2t1cCcsICctbicsCisJCQkJCQknLW0nLCAiJGJhY2t1 cF9wYXRoL2JhY2t1cF9tYW5pZmVzdCIsICctZScsICRleHRyYWN0X3BhdGggXSwKKwkJCQkJICAg ICJ2ZXJpZnkgYmFja3VwLCBjb21wcmVzc2lvbiAkbWV0aG9kIik7CisJCQl9CiAKLQkJCSMgVmVy aWZ5LgorCQkJIyBDbGVhbnVwLgorCQkJdW5saW5rKCRiYWNrdXBfcGF0aCAuICcvYmFja3VwX21h bmlmZXN0Jyk7CisJCQl1bmxpbmsoJGJhY2t1cF9wYXRoIC4gJy9iYXNlLnRhcicpOworCQkJcm10 cmVlKCRleHRyYWN0X3BhdGgpOworCQl9CisJCWVsc2UKKwkJeworCQkJIyBWZXJpZnkgdGhhdCB0 aGUgd2UgZ290IHRoZSBmaWxlcyB3ZSBleHBlY3RlZC4KKwkJCW9rICgtZiAiJGJhY2t1cF9wYXRo L1BHX1ZFUlNJT04iLCAiYmFja3VwIHdpdGggcGxhaW4gZm9ybWF0IGNyZWF0ZWQiKTsKKwkJCW9r ICgtZiAiJGJhY2t1cF9wYXRoL2JhY2t1cF9tYW5pZmVzdCIsICJiYWNrdXAgbWFuaWZlc3QgaW5j bHVkZWQiKTsKKworCQkJIyBWZXJpZnkgcGxhaW4gZm9ybWF0IGJhY2t1cCB3aXRoIHNlcnZlciBj b21wcmVzc2lvbgogCQkJJHByaW1hcnktPmNvbW1hbmRfb2soWyAncGdfdmVyaWZ5YmFja3VwJywg Jy1uJywKLQkJCQknLW0nLCAiJGJhY2t1cF9wYXRoL2JhY2t1cF9tYW5pZmVzdCIsICctZScsICRl eHRyYWN0X3BhdGggXSwKLQkJCQkidmVyaWZ5IGJhY2t1cCwgY29tcHJlc3Npb24gJG1ldGhvZCIp OworCQkJCQknLW0nLCAiJGJhY2t1cF9wYXRoL2JhY2t1cF9tYW5pZmVzdCIsICctZScsICRiYWNr dXBfcGF0aCBdLAorCQkJCQkidmVyaWZ5IHBsYWluIGZvcm1hdCBiYWNrdXAsIGNvbXByZXNzaW9u ICRtZXRob2QiKTsKKworCQkJIyBDbGVhbnVwLgorCQkJcm10cmVlKCRiYWNrdXBfcGF0aCk7CiAJ CX0KIAotCQkjIENsZWFudXAuCi0JCXVubGluaygkYmFja3VwX3BhdGggLiAnL2JhY2t1cF9tYW5p ZmVzdCcpOwotCQl1bmxpbmsoJGJhY2t1cF9wYXRoIC4gJy9iYXNlLnRhcicpOwotCQlybXRyZWUo JGV4dHJhY3RfcGF0aCk7CiAJfQogfQotLSAKMS44LjMuMQoK --000000000000bb842d05d603178e--