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.94.2) (envelope-from ) id 1swHrs-002teF-K2 for pgsql-hackers@arkaria.postgresql.org; Thu, 03 Oct 2024 09:11:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1swHrr-00C6ZB-Fm for pgsql-hackers@arkaria.postgresql.org; Thu, 03 Oct 2024 09:11:27 +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.94.2) (envelope-from ) id 1swHrr-00C6Z2-1x for pgsql-hackers@lists.postgresql.org; Thu, 03 Oct 2024 09:11:27 +0000 Received: from crimson.ash.relay.mailchannels.net ([23.83.222.44]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1swHrl-002KEv-KN for pgsql-hackers@postgresql.org; Thu, 03 Oct 2024 09:11:26 +0000 X-Sender-Id: hostingeremail|x-authuser|david@pgbackrest.org Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 69A441A4B67 for ; Thu, 3 Oct 2024 09:11:19 +0000 (UTC) Received: from nl-srv-smtpout1.hostinger.io (trex-0.trex.outbound.svc.cluster.local [100.99.145.32]) (Authenticated sender: hostingeremail) by relay.mailchannels.net (Postfix) with ESMTPA id AA9681A6768 for ; Thu, 3 Oct 2024 09:11:18 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1727946679; a=rsa-sha256; cv=none; b=ytMRZ5KbhqXA0cuz/lbQ/YtGcuYCRdMieWClyFi5XDpIGnPoaIoI0B6x5jSSmQhJnrOuDm 6GDk4xdfkNSlBk2+6g8m5xx7emKq3QBWXIz1Czongfg/AQwmFabtwyxgEMJ9BVvtzvn3l0 eSwcJxwTvp3YW6eYidfzbmuuYeFeSRHZeaH9EC0gMt52//hQlxOmrRiXFg5i4R/Wzq3ASk nOTmkK50LMaeDoJXC+TKz+iVffo3kx8ta1TYi8WcCBkR5dFN9O6RsoJWRgjZmXsxj63vCV 6/+pKgOoEJj8Plhy+xK8gBpm3j6RRHkswh+6CrFIpqnO/QpLawDWINrdc0onIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1727946679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references:dkim-signature; bh=fGFhS4Zggl1eUILn65AS4hW6CIOmPWnjRSq3483fdWw=; b=O5L9EG9CAFX/GzN+pBl/uFyYRuDO9sh8RwuzQn0AZ0V0Ef3YC0ZeMB/bc1dne0jQaWu8rB yB8to39QClPNvxu9pXzZ0pSf3JL8B8tJPELcSNTptlpr+zDTfj6LZL6WphWBMnX6D/Z5DD pQQPl1EbB8r9ZIsWKTvroBeL34k1GlmrdRi/1n5pnsRfMFNX+C4J57D6m3pE20FX9MBfYQ uAp+ICB8+IBoTXR5SydjOoQr5Ee93FjIeaj1xAJo2GsJ3xPxJTmJy6ClyiA7IidKSXR+O+ DsOhTMLEneDz6e8NhF2uo9WF+4YBZvDmU9whb9UgSJlvNadbf5AEkAhi+GZABw== ARC-Authentication-Results: i=1; rspamd-784544597-cg2hl; auth=pass smtp.auth=hostingeremail smtp.mailfrom=david@pgbackrest.org X-Sender-Id: hostingeremail|x-authuser|david@pgbackrest.org X-MC-Relay: Neutral X-MailChannels-SenderId: hostingeremail|x-authuser|david@pgbackrest.org X-MailChannels-Auth-Id: hostingeremail X-Reaction-Scare: 377ad74853cb1a20_1727946679317_3814013750 X-MC-Loop-Signature: 1727946679317:3480115128 X-MC-Ingress-Time: 1727946679317 Received: from nl-srv-smtpout1.hostinger.io (nl-srv-smtpout1.hostinger.io [145.14.150.87]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.99.145.32 (trex/7.0.2); Thu, 03 Oct 2024 09:11:19 +0000 Content-Type: multipart/mixed; boundary="------------40GKlGaTbOlVCLo0eIXrNrr0" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgbackrest.org; s=hostingermail1; t=1727946676; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=fGFhS4Zggl1eUILn65AS4hW6CIOmPWnjRSq3483fdWw=; b=KIoeui8wlCwPQjXIE8J1Qrf+4XvF2q7l4vFPP3GB5Ho2zZhBTyXvcsNMdx9UJEqrelHvHy +7deNOOcr8dVNiCOWzGUpet66R8oNq6Cr7sNm39ooaQaOW8vRe6BCoCmmYaoiYouMjSGtq w9qKG9PUZhLwliMy4P9i5y8n8Wa225vOfMKAUFFPgZACUItabuZqWr9s/9oM0nIAwrIgPS IN7h5j0X2BTxW1AGZjEb3GrKjnjqj3a0e2jpTgJLZPCXXIfg4QGPSggLPDP96zMLcKUvOw 8OsPyPbzThuWwCKxbqmQCvSy6J6cks0xGJrOUqr5u3oGCvJ3HGTZZlksV42ueQ== Message-ID: <1248c005-b693-494a-8d7a-68bc7d482679@pgbackrest.org> MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Return pg_control from pg_backup_stop(). To: Michael Paquier Cc: Pg Hackers References: <83f5295e-082d-432c-92a4-365707bd2296@pgbackrest.org> Content-Language: en-US From: David Steele In-Reply-To: Date: Thu, 03 Oct 2024 09:11:14 +0000 (UTC) X-CM-Envelope: MS4xfEw4KxIvOVGrKeb/FZ42jGzlCNIkCsp/lQApa6FhQRtmjHcn7xkamN3iqttyuweVes7xSfup4o2xLMhd5hCwWkMg/eycXimOtefOj6Zj+L5gWNcB/wwT DR0EA7rhkBHc18GIiMFvvvOVaw14jMgio3LsmLshV1wL9C4mJ84ITTEXuXnDOLKVoGu1+oXOTZoLWBNVq9IDJFJQ4mVbX6xjevb2FZEnUg5kY9AC4tulpBVB X-CM-Analysis: v=2.4 cv=b6rg4cGx c=1 sm=1 tr=0 ts=66fe5fb4 a=90q5jM3B3ZMtdruoK7kaEA==:117 a=90q5jM3B3ZMtdruoK7kaEA==:17 a=r77TgQKjGQsHNAKrUKIA:9 a=huipzp3RbK1Pr57xfzIA:9 a=QEXdDO2ut3YA:10 a=1wDIiH70AAAA:8 a=JohDp9xLRQvFQJ1YrgkA:9 a=B2y7HmGcmWMA:10 a=ujshm9o0-4VQCRsr5oQA:9 a=uCsh6WI2SJRHIg0NT2Eg:22 X-AuthUser: david@pgbackrest.org List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------40GKlGaTbOlVCLo0eIXrNrr0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 10/3/24 07:45, Michael Paquier wrote: > On Wed, Oct 02, 2024 at 09:03:27AM +0000, David Steele wrote: >> On 10/2/24 10:11, Michael Paquier wrote: > >> I can definitely see us making other updates to pg_control so I would rather >> keep this logic centralized, even though it is not too complicated at this >> point. Still, even 8 lines of code (as it is now) seems better not to >> duplicate. > > I was wondering if the field update should be hidden behind a macro > that uses an offsetof() on ControlFileData, with the name of the field > and a pointer to the value to update to. If you include the CRC32 > calculation in that, that makes for less chunks of code when updating > one field of the control file. > > The full CRC calculation could also be hidden inside a macro, as there > are a couple of places where we do the same things, like pg_rewind.c, > etc. This seems to be a different case than pg_rewind, especially since we need a ControlFileLock. I think that is a bit much to do in a macro, so I split the functionality out into a function instead. This simplifies the logic in basebackup.c but has little impact elsewhere. >>> We're talking about a 8kB file which has a size of 512B >>> (PG_CONTROL_MAX_SAFE_SIZE) to avoid such issues. So I'm not sure to >>> see your point here? >> >> Even at 512B it is possible to see tears in pg_control and they happen in >> the build farm right now. In fact, this thread [1] trying to fix the problem >> was what got me thinking about alternate solutions to preventing tears in >> pg_control. Thomas' proposed fixes have not been committed to my knowledge >> so the problem remains, but would be fixed by this commit. > > Ah, right. That rings a bell. Thomas has done some work with > c558e6fd92ff and 63a582222c6b. And we're still not taking the > ControlFileLock while copying it over.. It looks like we should do it > separately, and backpatch. That's not something for this thread to > worry about. I'd be happy to adapt patch 01 to be back-patched (without the new flag) if we decide it is a good idea. Just locking and making a copy of pg_control is easy enough, but if we accept the backup_control_file() function for new versions then we could keep that for the back patch to reduce churn between versions. >>> Perhaps existing >>> backup solutions are good enough risk vs reward is not worth it? >> >> I'm not sure I see the risk here. Saving out pg_control is optional so no >> changes to current software is required. Of course they miss the benefit of >> the protection against tears and missing backup_label, but that is a choice. >> >> Again, optional, but if I was able to manage these saves using the psql >> interface in the TAP tests then I'd say it would be pretty easy for anyone >> with a normal connection to Postgres. Also, we require users to treat >> tabelspace_map and backup_label as binary so not too big a change here. > > Maintenance cost for a limited user impact overall. With incremental > backups being a thing in v18 only available through the replication > protocol, the SQL functions have less advantages these days. My point > would be to see this thread as a two-step process: > 1) Update the flag in the control file when sending it across in > replication stream. > 2) Do the SQL function thing with the bytea for the control file, if > necessary. OK, I have split the patch into two parts along these lines. > 1) is something that has more value than 2), IMO, because there is no > need for a manual step when a backup is taken by the replication > protocol. Well, custom backup solutions that rely on the replication > protocol to copy the data would need to make sure that they have a > backup_label, but that's something they should do anyway and what this > patch wants to protect users from. The SQL part is optional IMO. It > can be done, but it has less impact overall and makes backups more > complicated by requiring the manual copy of the control file. I don't think having incremental backup in pg_basebackup means alternate backup solutions are going away or that we should deprecate the SQL interface. If nothing else, third-party solutions need a way to get an untorn copy of pg_control and in general I think the new flag will be universally useful. Regards, -David --------------40GKlGaTbOlVCLo0eIXrNrr0 Content-Type: text/plain; charset=UTF-8; name="pgcontrol-flag-v3-01-basebackup.patch" Content-Disposition: attachment; filename="pgcontrol-flag-v3-01-basebackup.patch" Content-Transfer-Encoding: base64 RnJvbSA3N2RmMmM3NzliNTdkZGU5MGY4MWQ1MjQ0YjU1ZTRkMGQ2NDQxMzdkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBTdGVlbGUgPGRhdmlkQHBnbWFzdGVycy5u ZXQ+CkRhdGU6IFRodSwgMyBPY3QgMjAyNCAwODo0MTo0NSArMDAwMApTdWJqZWN0OiBBZGQg cGdfY29udHJvbCBmbGFnIHRvIHByZXZlbnQgcmVjb3Zlcnkgd2l0aG91dCBiYWNrdXBfbGFi ZWwuCgpIYXJkZW4gcmVjb3ZlcnkgYnkgYWRkaW5nIGEgZmxhZyB0byBwZ19jb250cm9sIHRv IGluZGljYXRlIHRoYXQgYmFja3VwX2xhYmVsIGlzCnJlcXVpcmVkLiBUaGlzIHByZXZlbnRz IHRoZSB1c2VyIGZyb20gZGVsZXRpbmcgYmFja3VwX2xhYmVsIHJlc3VsdGluZyBpbiBhbgpp bmNvbnNpc3RlbnQgcmVjb3ZlcnkuCgpBbm90aGVyIGFkdmFudGFnZSBpcyB0aGF0IHRoZSBj b3B5IG9mIHBnX2NvbnRyb2wgdXNlZCBieSBwZ19iYXNlYmFja3VwIGlzCmd1YXJhbnRlZWQg bm90IHRvIGJlIHRvcm4uCgpUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbGltaXRlZCB0byBwZ19i YXNlYmFja3VwIChvciBhbnkgc29mdHdhcmUgY29tZm9ydGFibGUKd2l0aCBtb2RpZnlpbmcg cGdfY29udHJvbCkuCgpDb250cm9sIGFuZCBjYXRhbG9nIHZlcnNpb24gYnVtcHMgYXJlIHJl cXVpcmVkLgotLS0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAgICAgICAgICAg IHwgIDUgKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAg IHwgMjMgKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dyZWNvdmVyeS5jIHwgMTAgKysrKysrKysrLQogc3JjL2JhY2tlbmQvYmFja3Vw L2Jhc2ViYWNrdXAuYyAgICAgICAgICAgfCAxNSArKysrKystLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcGdfY29udHJvbGRhdGEuYyAgIHwgIDcgKysrKystLQogc3JjL2Jp bi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jICAgfCAgMiArKwogc3JjL2Jpbi9w Z19yZXNldHdhbC9wZ19yZXNldHdhbC5jICAgICAgICAgfCAgMSArCiBzcmMvYmluL3BnX3Jl d2luZC9wZ19yZXdpbmQuYyAgICAgICAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vz cy94bG9nLmggICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19jb250cm9sLmggICAgICAgICAgfCAgNCArKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0ICAgICAgICAgICB8ICA2ICsrKy0tLQogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8w MDJfYXJjaGl2aW5nLnBsICAgICAgfCAyMCArKysrKysrKysrKysrKysrKysrKwogMTIgZmls ZXMgY2hhbmdlZCwgODAgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwK aW5kZXggN2I0ZmJiNTA0Ny4uNzg2MjY5YjkyMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L2Z1bmMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0yNzg5OSw2ICsy Nzg5OSwxMSBAQCBhY2wgICAgICB8IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289 ci9wb3N0Z3Jlc30KICAgICAgICA8ZW50cnk+PHR5cGU+Ym9vbGVhbjwvdHlwZT48L2VudHJ5 PgogICAgICAgPC9yb3c+CiAKKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PjxzdHJ1Y3Rm aWVsZD5iYWNrdXBfbGFiZWxfcmVxdWlyZWQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisgICAg ICAgPGVudHJ5Pjx0eXBlPmJvb2xlYW48L3R5cGU+PC9lbnRyeT4KKyAgICAgIDwvcm93Pgor CiAgICAgIDwvdGJvZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxlPgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDkxMDJjOGQ3NzIuLjc5MDY1YjU1ZWYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTk0MTIsNiArOTQxMiwyOSBAQCBkb19w Z19hYm9ydF9iYWNrdXAoaW50IGNvZGUsIERhdHVtIGFyZykKIAl9CiB9CiAKKy8qCisgKiBD cmVhdGUgYSBjb25zaXN0ZW50IGNvcHkgb2YgY29udHJvbCBkYXRhIHRvIGJlIHVzZWQgZm9y IGJhY2t1cCBhbmQgdXBkYXRlIGl0CisgKiB0byByZXF1aXJlIGEgYmFja3VwIGxhYmVsIGZv ciByZWNvdmVyeS4gQWxzbyByZWNhbGN1bGF0ZSB0aGUgQ1JDLgorICovCit2b2lkCitiYWNr dXBfY29udHJvbF9maWxlKHVpbnQ4X3QgKmNvbnRyb2xGaWxlKQoreworCUNvbnRyb2xGaWxl RGF0YSAqY29udHJvbERhdGEgPSAoKENvbnRyb2xGaWxlRGF0YSAqKWNvbnRyb2xGaWxlKTsK KworCW1lbXNldChjb250cm9sRmlsZSArIHNpemVvZihDb250cm9sRmlsZURhdGEpLCAwLAor CQkgICBQR19DT05UUk9MX0ZJTEVfU0laRSAtIHNpemVvZihDb250cm9sRmlsZURhdGEpKTsK KworCUxXTG9ja0FjcXVpcmUoQ29udHJvbEZpbGVMb2NrLCBMV19TSEFSRUQpOworCW1lbWNw eShjb250cm9sRmlsZSwgQ29udHJvbEZpbGUsIHNpemVvZihDb250cm9sRmlsZURhdGEpKTsK KwlMV0xvY2tSZWxlYXNlKENvbnRyb2xGaWxlTG9jayk7CisKKwljb250cm9sRGF0YS0+YmFj a3VwTGFiZWxSZXF1aXJlZCA9IHRydWU7CisKKwlJTklUX0NSQzMyQyhjb250cm9sRGF0YS0+ Y3JjKTsKKwlDT01QX0NSQzMyQyhjb250cm9sRGF0YS0+Y3JjLCBjb250cm9sRmlsZSwgb2Zm c2V0b2YoQ29udHJvbEZpbGVEYXRhLCBjcmMpKTsKKwlGSU5fQ1JDMzJDKGNvbnRyb2xEYXRh LT5jcmMpOworfQorCiAvKgogICogUmVnaXN0ZXIgYSBoYW5kbGVyIHRoYXQgd2lsbCB3YXJu IGFib3V0IHVudGVybWluYXRlZCBiYWNrdXBzIGF0IGVuZCBvZgogICogc2Vzc2lvbiwgdW5s ZXNzIHRoaXMgaGFzIGFscmVhZHkgYmVlbiBkb25lLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRleCAzMjBiMTRhZGQxLi4xOTNiN2UyMDQ1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpAQCAtNzA0 LDcgKzcwNCwxNCBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9s RmlsZSwgYm9vbCAqd2FzU2h1dGRvd25fcHRyLAogCX0KIAllbHNlCiAJewotCQkvKiBObyBi YWNrdXBfbGFiZWwgZmlsZSBoYXMgYmVlbiBmb3VuZCBpZiB3ZSBhcmUgaGVyZS4gKi8KKwkJ LyoKKwkJICogTm8gYmFja3VwX2xhYmVsIGZpbGUgaGFzIGJlZW4gZm91bmQgaWYgd2UgYXJl IGhlcmUuIEVycm9yIGlmIHRoZQorCQkgKiBjb250cm9sIGZpbGUgcmVxdWlyZXMgYmFja3Vw X2xhYmVsLgorCQkgKi8KKwkJaWYgKENvbnRyb2xGaWxlLT5iYWNrdXBMYWJlbFJlcXVpcmVk KQorCQkJZXJlcG9ydChGQVRBTCwKKwkJCQkJKGVycm1zZygiY291bGQgbm90IGZpbmQgYmFj a3VwX2xhYmVsIHJlcXVpcmVkIGZvciByZWNvdmVyeSIpLAorCQkJCQkgZXJyaGludCgiYmFj a3VwX2xhYmVsIG11c3QgYmUgcHJlc2VudCBmb3IgcmVjb3ZlcnkgdG8gc3VjY2VlZCIpKSk7 CiAKIAkJLyoKIAkJICogSWYgdGFibGVzcGFjZV9tYXAgZmlsZSBpcyBwcmVzZW50IHdpdGhv dXQgYmFja3VwX2xhYmVsIGZpbGUsIHRoZXJlCkBAIC05NzcsNiArOTg0LDcgQEAgSW5pdFdh bFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndhc1NodXRk b3duX3B0ciwKIAkJewogCQkJQ29udHJvbEZpbGUtPmJhY2t1cFN0YXJ0UG9pbnQgPSBjaGVj a1BvaW50LnJlZG87CiAJCQlDb250cm9sRmlsZS0+YmFja3VwRW5kUmVxdWlyZWQgPSBiYWNr dXBFbmRSZXF1aXJlZDsKKwkJCUNvbnRyb2xGaWxlLT5iYWNrdXBMYWJlbFJlcXVpcmVkID0g ZmFsc2U7CiAKIAkJCWlmIChiYWNrdXBGcm9tU3RhbmRieSkKIAkJCXsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMgYi9zcmMvYmFja2VuZC9iYWNrdXAv YmFzZWJhY2t1cC5jCmluZGV4IDE0ZTViYTcyZTkuLmNlN2ZkNzZlNDggMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMKKysrIGIvc3JjL2JhY2tlbmQvYmFj a3VwL2Jhc2ViYWNrdXAuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImJhY2t1cC9i YXNlYmFja3VwX2luY3JlbWVudGFsLmgiCiAjaW5jbHVkZSAiYmFja3VwL2Jhc2ViYWNrdXBf c2luay5oIgogI2luY2x1ZGUgImJhY2t1cC9iYXNlYmFja3VwX3RhcmdldC5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdGFibGVz cGFjZV9kLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAiY29t bW9uL2NvbXByZXNzaW9uLmgiCkBAIC0zMjUsOSArMzI2LDkgQEAgcGVyZm9ybV9iYXNlX2Jh Y2t1cChiYXNlYmFja3VwX29wdGlvbnMgKm9wdCwgYmJzaW5rICpzaW5rLAogCiAJCQlpZiAo dGktPnBhdGggPT0gTlVMTCkKIAkJCXsKLQkJCQlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOwogCQkJ CWJvb2wJCXNlbmR0YmxzcGNsaW5rcyA9IHRydWU7CiAJCQkJY2hhcgkgICAqYmFja3VwX2xh YmVsOworCQkJCXVpbnQ4X3QgY29udHJvbEZpbGVbUEdfQ09OVFJPTF9GSUxFX1NJWkVdOwog CiAJCQkJYmJzaW5rX2JlZ2luX2FyY2hpdmUoc2luaywgImJhc2UudGFyIik7CiAKQEAgLTM1 MCwxNCArMzUxLDEwIEBAIHBlcmZvcm1fYmFzZV9iYWNrdXAoYmFzZWJhY2t1cF9vcHRpb25z ICpvcHQsIGJic2luayAqc2luaywKIAkJCQkJCXNlbmR0YmxzcGNsaW5rcywgJm1hbmlmZXN0 LCBJbnZhbGlkT2lkLCBpYik7CiAKIAkJCQkvKiAuLi4gYW5kIHBnX2NvbnRyb2wgYWZ0ZXIg ZXZlcnl0aGluZyBlbHNlLiAqLwotCQkJCWlmIChsc3RhdChYTE9HX0NPTlRST0xfRklMRSwg JnN0YXRidWYpICE9IDApCi0JCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycmNvZGVf Zm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCQkJIGVycm1zZygiY291bGQgbm90IHN0YXQgZmls ZSBcIiVzXCI6ICVtIiwKLQkJCQkJCQkJCVhMT0dfQ09OVFJPTF9GSUxFKSkpOwotCQkJCXNl bmRGaWxlKHNpbmssIFhMT0dfQ09OVFJPTF9GSUxFLCBYTE9HX0NPTlRST0xfRklMRSwgJnN0 YXRidWYsCi0JCQkJCQkgZmFsc2UsIEludmFsaWRPaWQsIEludmFsaWRPaWQsCi0JCQkJCQkg SW52YWxpZFJlbEZpbGVOdW1iZXIsIDAsICZtYW5pZmVzdCwgMCwgTlVMTCwgMCk7CisJCQkJ YmFja3VwX2NvbnRyb2xfZmlsZShjb250cm9sRmlsZSk7CisJCQkJc2VuZEZpbGVXaXRoQ29u dGVudChzaW5rLCBYTE9HX0NPTlRST0xfRklMRSwKKwkJCQkJCQkJCShjaGFyICopY29udHJv bEZpbGUsIFBHX0NPTlRST0xfRklMRV9TSVpFLAorCQkJCQkJCQkJJm1hbmlmZXN0KTsKIAkJ CX0KIAkJCWVsc2UKIAkJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cGdfY29udHJvbGRhdGEuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcGdfY29udHJvbGRh dGEuYwppbmRleCA5OGM5MzJkYzdiLi45ZWFmM2Y4YjlmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL3BnX2NvbnRyb2xkYXRhLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wZ19jb250cm9sZGF0YS5jCkBAIC0xNjIsOCArMTYyLDggQEAgcGdfY29udHJv bF9jaGVja3BvaW50KFBHX0ZVTkNUSU9OX0FSR1MpCiBEYXR1bQogcGdfY29udHJvbF9yZWNv dmVyeShQR19GVU5DVElPTl9BUkdTKQogewotCURhdHVtCQl2YWx1ZXNbNV07Ci0JYm9vbAkJ bnVsbHNbNV07CisJRGF0dW0JCXZhbHVlc1s2XTsKKwlib29sCQludWxsc1s2XTsKIAlUdXBs ZURlc2MJdHVwZGVzYzsKIAlIZWFwVHVwbGUJaHR1cDsKIAlDb250cm9sRmlsZURhdGEgKkNv bnRyb2xGaWxlOwpAQCAtMTk1LDYgKzE5NSw5IEBAIHBnX2NvbnRyb2xfcmVjb3ZlcnkoUEdf RlVOQ1RJT05fQVJHUykKIAl2YWx1ZXNbNF0gPSBCb29sR2V0RGF0dW0oQ29udHJvbEZpbGUt PmJhY2t1cEVuZFJlcXVpcmVkKTsKIAludWxsc1s0XSA9IGZhbHNlOwogCisJdmFsdWVzWzVd ID0gQm9vbEdldERhdHVtKENvbnRyb2xGaWxlLT5iYWNrdXBMYWJlbFJlcXVpcmVkKTsKKwlu dWxsc1s1XSA9IGZhbHNlOworCiAJaHR1cCA9IGhlYXBfZm9ybV90dXBsZSh0dXBkZXNjLCB2 YWx1ZXMsIG51bGxzKTsKIAogCVBHX1JFVFVSTl9EQVRVTShIZWFwVHVwbGVHZXREYXR1bSho dHVwKSk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xk YXRhLmMgYi9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMKaW5kZXgg OTNhMDVkODBjYS4uOGNjMjk5MDRjNiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19jb250cm9s ZGF0YS9wZ19jb250cm9sZGF0YS5jCisrKyBiL3NyYy9iaW4vcGdfY29udHJvbGRhdGEvcGdf Y29udHJvbGRhdGEuYwpAQCAtMjgzLDYgKzI4Myw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAkJICAgTFNOX0ZPUk1BVF9BUkdTKENvbnRyb2xGaWxlLT5iYWNrdXBFbmRQ b2ludCkpOwogCXByaW50ZihfKCJFbmQtb2YtYmFja3VwIHJlY29yZCByZXF1aXJlZDogICAg ICAgICVzXG4iKSwKIAkJICAgQ29udHJvbEZpbGUtPmJhY2t1cEVuZFJlcXVpcmVkID8gXygi eWVzIikgOiBfKCJubyIpKTsKKwlwcmludGYoXygiQmFja3VwIGxhYmVsIHJlcXVpcmVkOiAg ICAgICAgICAgICAgICAlc1xuIiksCisJCSAgIENvbnRyb2xGaWxlLT5iYWNrdXBMYWJlbFJl cXVpcmVkID8gXygieWVzIikgOiBfKCJubyIpKTsKIAlwcmludGYoXygid2FsX2xldmVsIHNl dHRpbmc6ICAgICAgICAgICAgICAgICAgICAlc1xuIiksCiAJCSAgIHdhbF9sZXZlbF9zdHIo Q29udHJvbEZpbGUtPndhbF9sZXZlbCkpOwogCXByaW50ZihfKCJ3YWxfbG9nX2hpbnRzIHNl dHRpbmc6ICAgICAgICAgICAgICAgICVzXG4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf cmVzZXR3YWwvcGdfcmVzZXR3YWwuYyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3 YWwuYwppbmRleCBlOWRjYjVhNmQ4Li43MDU2NzUyY2ZmIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMKKysrIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC9w Z19yZXNldHdhbC5jCkBAIC04NzUsNiArODc1LDcgQEAgUmV3cml0ZUNvbnRyb2xGaWxlKHZv aWQpCiAJQ29udHJvbEZpbGUuYmFja3VwU3RhcnRQb2ludCA9IDA7CiAJQ29udHJvbEZpbGUu YmFja3VwRW5kUG9pbnQgPSAwOwogCUNvbnRyb2xGaWxlLmJhY2t1cEVuZFJlcXVpcmVkID0g ZmFsc2U7CisJQ29udHJvbEZpbGUuYmFja3VwTGFiZWxSZXF1aXJlZCA9IGZhbHNlOwogCiAJ LyoKIAkgKiBGb3JjZSB0aGUgZGVmYXVsdHMgZm9yIG1heF8qIHNldHRpbmdzLiBUaGUgdmFs dWVzIGRvbid0IHJlYWxseSBtYXR0ZXIKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmV3aW5k L3BnX3Jld2luZC5jIGIvc3JjL2Jpbi9wZ19yZXdpbmQvcGdfcmV3aW5kLmMKaW5kZXggOTYw OTE2YTFlOC4uNzlhNDRiNzBlZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXdpbmQvcGdf cmV3aW5kLmMKKysrIGIvc3JjL2Jpbi9wZ19yZXdpbmQvcGdfcmV3aW5kLmMKQEAgLTcyMiw2 ICs3MjIsNyBAQCBwZXJmb3JtX3Jld2luZChmaWxlbWFwX3QgKmZpbGVtYXAsIHJld2luZF9z b3VyY2UgKnNvdXJjZSwKIAlDb250cm9sRmlsZV9uZXcubWluUmVjb3ZlcnlQb2ludCA9IGVu ZHJlYzsKIAlDb250cm9sRmlsZV9uZXcubWluUmVjb3ZlcnlQb2ludFRMSSA9IGVuZHRsaTsK IAlDb250cm9sRmlsZV9uZXcuc3RhdGUgPSBEQl9JTl9BUkNISVZFX1JFQ09WRVJZOworCUNv bnRyb2xGaWxlX25ldy5iYWNrdXBMYWJlbFJlcXVpcmVkID0gdHJ1ZTsKIAlpZiAoIWRyeV9y dW4pCiAJCXVwZGF0ZV9jb250cm9sZmlsZShkYXRhZGlyX3RhcmdldCwgJkNvbnRyb2xGaWxl X25ldywgZG9fc3luYyk7CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxv Zy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAppbmRleCAzNGFkNDZjMDY3Li45ZDVk OGVkNDNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKQEAgLTI5NSw2ICsyOTUsNyBAQCBleHRlcm4gdm9p ZCBkb19wZ19iYWNrdXBfc3RhcnQoY29uc3QgY2hhciAqYmFja3VwaWRzdHIsIGJvb2wgZmFz dCwKIAkJCQkJCQkgICBTdHJpbmdJbmZvIHRibHNwY21hcGZpbGUpOwogZXh0ZXJuIHZvaWQg ZG9fcGdfYmFja3VwX3N0b3AoQmFja3VwU3RhdGUgKnN0YXRlLCBib29sIHdhaXRmb3JhcmNo aXZlKTsKIGV4dGVybiB2b2lkIGRvX3BnX2Fib3J0X2JhY2t1cChpbnQgY29kZSwgRGF0dW0g YXJnKTsKK2V4dGVybiB2b2lkIGJhY2t1cF9jb250cm9sX2ZpbGUodWludDhfdCAqY29udHJv bEZpbGUpOwogZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfcGVyc2lzdGVudF9hYm9ydF9iYWNrdXBf aGFuZGxlcih2b2lkKTsKIGV4dGVybiBTZXNzaW9uQmFja3VwU3RhdGUgZ2V0X2JhY2t1cF9z dGF0dXModm9pZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29u dHJvbC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKaW5kZXggZTgwZmY4 ZTQxNC4uYjQ3MWE5YjAyZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19j b250cm9sLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKQEAgLTE2 NCwxMiArMTY0LDE2IEBAIHR5cGVkZWYgc3RydWN0IENvbnRyb2xGaWxlRGF0YQogCSAqIElm IGJhY2t1cEVuZFJlcXVpcmVkIGlzIHRydWUsIHdlIGtub3cgZm9yIHN1cmUgdGhhdCB3ZSdy ZSByZXN0b3JpbmcKIAkgKiBmcm9tIGEgYmFja3VwLCBhbmQgbXVzdCBzZWUgYSBiYWNrdXAt ZW5kIHJlY29yZCBiZWZvcmUgd2UgY2FuIHNhZmVseQogCSAqIHN0YXJ0IHVwLgorCSAqCisJ ICogSWYgYmFja3VwTGFiZWxSZXF1aXJlZCBpcyB0cnVlLCB0aGVuIGEgYmFja3VwX2xhYmVs IGZpbGUgbXVzdCBiZQorCSAqIHByZXNlbnQgaW4gb3JkZXIgZm9yIHJlY292ZXJ5IHRvIHN1 Y2NlZWQuCiAJICovCiAJWExvZ1JlY1B0cgltaW5SZWNvdmVyeVBvaW50OwogCVRpbWVMaW5l SUQJbWluUmVjb3ZlcnlQb2ludFRMSTsKIAlYTG9nUmVjUHRyCWJhY2t1cFN0YXJ0UG9pbnQ7 CiAJWExvZ1JlY1B0cgliYWNrdXBFbmRQb2ludDsKIAlib29sCQliYWNrdXBFbmRSZXF1aXJl ZDsKKwlib29sCQliYWNrdXBMYWJlbFJlcXVpcmVkOwogCiAJLyoKIAkgKiBQYXJhbWV0ZXIg c2V0dGluZ3MgdGhhdCBkZXRlcm1pbmUgaWYgdGhlIFdBTCBjYW4gYmUgdXNlZCBmb3IgYXJj aGl2YWwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDc3ZjU0YTc5ZTYuLjdjYzU0 MjFlYTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysr IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTIxMTksOSArMTIxMTks OSBAQAogeyBvaWQgPT4gJzM0NDMnLAogICBkZXNjciA9PiAncGdfY29udHJvbGRhdGEgcmVj b3Zlcnkgc3RhdGUgaW5mb3JtYXRpb24gYXMgYSBmdW5jdGlvbicsCiAgIHByb25hbWUgPT4g J3BnX2NvbnRyb2xfcmVjb3ZlcnknLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3JldHR5cGUg PT4gJ3JlY29yZCcsCi0gIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9hbGxhcmd0eXBlcyA9PiAn e3BnX2xzbixpbnQ0LHBnX2xzbixwZ19sc24sYm9vbH0nLAotICBwcm9hcmdtb2RlcyA9PiAn e28sbyxvLG8sb30nLAotICBwcm9hcmduYW1lcyA9PiAne21pbl9yZWNvdmVyeV9lbmRfbHNu LG1pbl9yZWNvdmVyeV9lbmRfdGltZWxpbmUsYmFja3VwX3N0YXJ0X2xzbixiYWNrdXBfZW5k X2xzbixlbmRfb2ZfYmFja3VwX3JlY29yZF9yZXF1aXJlZH0nLAorICBwcm9hcmd0eXBlcyA9 PiAnJywgcHJvYWxsYXJndHlwZXMgPT4gJ3twZ19sc24saW50NCxwZ19sc24scGdfbHNuLGJv b2wsYm9vbH0nLAorICBwcm9hcmdtb2RlcyA9PiAne28sbyxvLG8sbyxvfScsCisgIHByb2Fy Z25hbWVzID0+ICd7bWluX3JlY292ZXJ5X2VuZF9sc24sbWluX3JlY292ZXJ5X2VuZF90aW1l bGluZSxiYWNrdXBfc3RhcnRfbHNuLGJhY2t1cF9lbmRfbHNuLGVuZF9vZl9iYWNrdXBfcmVj b3JkX3JlcXVpcmVkLGJhY2t1cF9sYWJlbF9yZXF1aXJlZH0nLAogICBwcm9zcmMgPT4gJ3Bn X2NvbnRyb2xfcmVjb3ZlcnknIH0sCiAKIHsgb2lkID0+ICczNDQ0JywKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlY292ZXJ5L3QvMDAyX2FyY2hpdmluZy5wbCBiL3NyYy90ZXN0L3JlY292 ZXJ5L3QvMDAyX2FyY2hpdmluZy5wbAppbmRleCBiYzQ0NzMzMGUxLi40NjJmMWRjZjBkIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS90LzAwMl9hcmNoaXZpbmcucGwKKysrIGIv c3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMDJfYXJjaGl2aW5nLnBsCkBAIC00MSw2ICs0MSwyNiBA QCAkbm9kZV9zdGFuZGJ5LT5hcHBlbmRfY29uZigKIGFyY2hpdmVfY2xlYW51cF9jb21tYW5k ID0gJ2VjaG8gYXJjaGl2ZV9jbGVhbnVwX2RvbmUgPiAkYXJjaGl2ZV9jbGVhbnVwX2NvbW1h bmRfZmlsZScKIHJlY292ZXJ5X2VuZF9jb21tYW5kID0gJ2VjaG8gcmVjb3ZlcnlfZW5kZWRf ZG9uZSA+ICRyZWNvdmVyeV9lbmRfY29tbWFuZF9maWxlJwogKSk7CisKKyMgUmVuYW1lIGJh Y2t1cF9sYWJlbCB0byB2ZXJpZnkgdGhhdCByZWNvdmVyeSB3aWxsIG5vdCBzdGFydCB3aXRo b3V0IGl0CityZW5hbWUoIiRkYXRhX2Rpci9iYWNrdXBfbGFiZWwiLCAiJGRhdGFfZGlyL2Jh Y2t1cF9sYWJlbC50bXAiKQorICBvciBCQUlMX09VVCAiY291bGQgbm90IG1vdmUgJGRhdGFf ZGlyL2JhY2t1cF9sYWJlbCI7CisKK215ICRyZXMgPSBydW5fbG9nKAorCVsKKwkJJ3BnX2N0 bCcsICctRCcsICRub2RlX3N0YW5kYnktPmRhdGFfZGlyLCAnLWwnLAorCQkkbm9kZV9zdGFu ZGJ5LT5sb2dmaWxlLCAnc3RhcnQnCisJXSk7CitvayghJHJlcywgJ2ludmFsaWQgcmVjb3Zl cnkgc3RhcnR1cCBmYWlscycpOworCitteSAkbG9nZmlsZSA9IHNsdXJwX2ZpbGUoJG5vZGVf c3RhbmRieS0+bG9nZmlsZSgpKTsKK29rKCRsb2dmaWxlID1+IHFyL2NvdWxkIG5vdCBmaW5k IGJhY2t1cF9sYWJlbCByZXF1aXJlZCBmb3IgcmVjb3ZlcnkvLAorCSdjb3VsZCBub3QgZmlu ZCBiYWNrdXBfbGFiZWwgcmVxdWlyZWQgZm9yIHJlY292ZXJ5Jyk7CisKKyMgUmVzdG9yZSBi YWNrdXBfbGFiZWwgc28gcmVjb3ZlcnkgcHJvY2VlZHMgbm9ybWFsbHkKK3JlbmFtZSgiJGRh dGFfZGlyL2JhY2t1cF9sYWJlbC50bXAiLCAiJGRhdGFfZGlyL2JhY2t1cF9sYWJlbCIpCisg IG9yIEJBSUxfT1VUICJjb3VsZCBub3QgbW92ZSAkZGF0YV9kaXIvYmFja3VwX2xhYmVsIjsK KwogJG5vZGVfc3RhbmRieS0+c3RhcnQ7CiAKICMgQ3JlYXRlIHNvbWUgY29udGVudCBvbiBw cmltYXJ5Ci0tIAoyLjM0LjEKCg== --------------40GKlGaTbOlVCLo0eIXrNrr0 Content-Type: text/plain; charset=UTF-8; name="pgcontrol-flag-v3-02-sql.patch" Content-Disposition: attachment; filename="pgcontrol-flag-v3-02-sql.patch" Content-Transfer-Encoding: base64 RnJvbSBkYmE1YTJhNTdlNTQ3MjY4MmE5YmU2ZDRiYWRmMWU4MTI3NzY4NjEwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBTdGVlbGUgPGRhdmlkQHBnbWFzdGVycy5u ZXQ+CkRhdGU6IFRodSwgMyBPY3QgMjAyNCAwODo0MTo0NSArMDAwMApTdWJqZWN0OiBSZXR1 cm4gcGdfY29udHJvbCBmcm9tIHBnX2JhY2t1cF9zdG9wKCkuCgpIYXJkZW4gcmVjb3Zlcnkg YnkgcmV0dXJuaW5nIGEgY29weSBvZiBwZ19jb250cm9sIGZyb20gcGdfYmFja3VwX3N0b3Ao KSB0aGF0IGhhcwphIGZsYWcgc2V0IHRvIHByZXZlbnQgcmVjb3ZlcnkgaWYgdGhlIGJhY2t1 cF9sYWJlbCBmaWxlIGlzIG1pc3NpbmcuIEluc3RlYWQgb2YKYmFja3VwIHNvZnR3YXJlIGNv cHlpbmcgcGdfY29udHJvbCBmcm9tIFBHREFUQSwgaXQgc3RvcmVzIGFuIHVwZGF0ZWQgdmVy c2lvbgp0aGF0IGlzIHJldHVybmVkIGZyb20gcGdfYmFja3VwX3N0b3AoKS4gVGhpcyBpcyBi ZXR0ZXIgZm9yIHRoZSBmb2xsb3dpbmcKcmVhc29uczoKCiogVGhlIHVzZXIgY2FuIG5vIGxv bmdlciByZW1vdmUgYmFja3VwX2xhYmVsIGFuZCBnZXQgd2hhdCBsb29rcyBsaWtlIGEKc3Vj Y2Vzc2Z1bCByZWNvdmVyeSAod2hpbGUgYWxtb3N0IGNlcnRhaW5seSBjYXVzaW5nIGNvcnJ1 cHRpb24pLiBJZiBiYWNrdXBfbGFiZWwKaXMgcmVtb3ZlZCB0aGUgY2x1c3RlciB3aWxsIG5v dCBzdGFydC4gVGhlIHVzZXIgbWF5IHRyeSBwZ19yZXNldHdhbCwgYnV0IHRoYXQKdG9vbCBt YWtlcyBpdCBwcmV0dHkgY2xlYXIgdGhhdCBjb3JydXB0aW9uIHdpbGwgcmVzdWx0IGZyb20g aXRzIHVzZS4KCiogV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBiYWNrdXAgc29mdHdh cmUgc2VlaW5nIGEgdG9ybiBjb3B5IG9mIHBnX2NvbnRyb2wsCnNpbmNlIFBvc3RncmVzIGNh biBzYWZlbHkgcmVhZCBpdCBvdXQgb2YgbWVtb3J5IGFuZCBwcm92aWRlIGEgdmFsaWQgY29w eSB2aWEKcGdfYmFja3VwX3N0b3AoKS4gVGhpcyBzb2x2ZXMgdG9ybiByZWFkcyB3aXRob3V0 IG5lZWRpbmcgdG8gd3JpdGUgcGdfY29udHJvbCB2aWEKYSB0ZW1wIGZpbGUsIHdoaWNoIG1h eSBhZmZlY3QgcGVyZm9ybWFuY2Ugb24gYSBzdGFuZGJ5LgoKKiBGb3IgYmFja3VwIGZyb20g c3RhbmRieSwgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaW5zdHJ1Y3QgdGhlIGJhY2t1cCBzb2Z0 d2FyZSB0bwpjb3B5IHBnX2NvbnRyb2wgbGFzdC4gSW4gZmFjdCB0aGUgYmFja3VwIHNvZnR3 YXJlIHNob3VsZCBub3QgY29weSBwZ19jb250cm9sIGZyb20KUEdEQVRBIGF0IGFsbC4KClRo ZXNlIGNoYW5nZXMgaGF2ZSBubyBpbXBhY3Qgb24gY3VycmVudCBiYWNrdXAgc29mdHdhcmUg YW5kIHRoZXkgYXJlIGZyZWUgdG8gdXNlCnRoZSBwZ19jb250cm9sIGF2YWlsYWJsZSBmcm9t IHBnX3N0b3BfYmFja3VwKCkgb3IgY29udGludWUgdG8gdXNlIHBnX2NvbnRyb2wgZnJvbQpQ R0RBVEEuIE9mIGNvdXJzZSB0aGV5IHdpbGwgbWlzcyB0aGUgYmVuZWZpdHMgb2YgZ2V0dGlu ZyBhIGNvbnNpc3RlbnQgY29weSBvZgpwZ19jb250cm9sIGFuZCB0aGUgYmFja3VwX2xhYmVs IGNoZWNraW5nLCBidXQgd2lsbCBiZSBubyB3b3JzZSBvZmYgdGhhbiBiZWZvcmUuCgpDYXRh bG9nIHZlcnNpb24gYnVtcCBpcyByZXF1aXJlZC4KLS0tCiBkb2Mvc3JjL3NnbWwvYmFja3Vw LnNnbWwgICAgICAgICAgICAgICAgICAgIHwgMTggKysrKystCiBkb2Mvc3JjL3NnbWwvZnVu Yy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2dmdW5jcy5jICAgICAgfCAxNyArKysrLS0KIHNyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwgICAgfCAgMiArLQogc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICB8ICA0ICstCiBzcmMvdGVzdC9yZWNvdmVy eS90LzA0Ml9sb3dfbGV2ZWxfYmFja3VwLnBsIHwgNjcgKysrKysrKysrKysrKysrKysrKyst CiA2IGZpbGVzIGNoYW5nZWQsIDk4IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9iYWNrdXAuc2dtbCBiL2RvYy9zcmMvc2dtbC9i YWNrdXAuc2dtbAppbmRleCBlNGU0YzU2Y2YxLi4yZmNmMTgxMTIxIDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvYmFja3VwLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2JhY2t1cC5zZ21s CkBAIC0xMDIxLDkgKzEwMjEsMTIgQEAgU0VMRUNUICogRlJPTSBwZ19iYWNrdXBfc3RvcCh3 YWl0X2Zvcl9hcmNoaXZlID0+IHRydWUpOwogICAgICB2YWx1ZXMuIFRoZSBzZWNvbmQgb2Yg dGhlc2UgZmllbGRzIHNob3VsZCBiZSB3cml0dGVuIHRvIGEgZmlsZSBuYW1lZAogICAgICA8 ZmlsZW5hbWU+YmFja3VwX2xhYmVsPC9maWxlbmFtZT4gaW4gdGhlIHJvb3QgZGlyZWN0b3J5 IG9mIHRoZSBiYWNrdXAuIFRoZQogICAgICB0aGlyZCBmaWVsZCBzaG91bGQgYmUgd3JpdHRl biB0byBhIGZpbGUgbmFtZWQKLSAgICAgPGZpbGVuYW1lPnRhYmxlc3BhY2VfbWFwPC9maWxl bmFtZT4gdW5sZXNzIHRoZSBmaWVsZCBpcyBlbXB0eS4gVGhlc2UgZmlsZXMgYXJlCisgICAg IDxmaWxlbmFtZT50YWJsZXNwYWNlX21hcDwvZmlsZW5hbWU+IHVubGVzcyB0aGUgZmllbGQg aXMgZW1wdHkuIFRoZSBmb3VydGgKKyAgICAgZmllbGQgc2hvdWxkIGJlIHdyaXR0ZW4gaW50 byBhIGZpbGUgbmFtZWQKKyAgICAgPGZpbGVuYW1lPmdsb2JhbC9wZ19jb250cm9sPC9maWxl bmFtZT4gKG92ZXJ3cml0aW5nIHRoZSBleGlzdGluZyBmaWxlIHdoZW4KKyAgICAgcHJlc2Vu dCkuIFRoZXNlIGZpbGVzIGFyZQogICAgICB2aXRhbCB0byB0aGUgYmFja3VwIHdvcmtpbmcg YW5kIG11c3QgYmUgd3JpdHRlbiBieXRlIGZvciBieXRlIHdpdGhvdXQKLSAgICAgbW9kaWZp Y2F0aW9uLCB3aGljaCBtYXkgcmVxdWlyZSBvcGVuaW5nIHRoZSBmaWxlIGluIGJpbmFyeSBt b2RlLgorICAgICBtb2RpZmljYXRpb24sIHdoaWNoIHdpbGwgcmVxdWlyZSBvcGVuaW5nIHRo ZSBmaWxlIGluIGJpbmFyeSBtb2RlLgogICAgIDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAg ICA8bGlzdGl0ZW0+CkBAIC0xMDk1LDcgKzEwOTgsMTYgQEAgU0VMRUNUICogRlJPTSBwZ19i YWNrdXBfc3RvcCh3YWl0X2Zvcl9hcmNoaXZlID0+IHRydWUpOwogICAgPC9wYXJhPgogCiAg ICA8cGFyYT4KLSAgICBZb3Ugc2hvdWxkLCBob3dldmVyLCBvbWl0IGZyb20gdGhlIGJhY2t1 cCB0aGUgZmlsZXMgd2l0aGluIHRoZQorICAgIFlvdSBzaG91bGQgZXhjbHVkZSA8ZmlsZW5h bWU+Z2xvYmFsL3BnX2NvbnRyb2w8L2ZpbGVuYW1lPiBmcm9tIHlvdXIgYmFja3VwCisgICAg YW5kIHB1dCB0aGUgY29udGVudHMgb2YgdGhlIDxwYXJhbWV0ZXI+Y29udHJvbGZpbGU8L3Bh cmFtZXRlcj4gY29sdW1uCisgICAgcmV0dXJuZWQgZnJvbSA8ZnVuY3Rpb24+cGdfYmFja3Vw X3N0b3A8L2Z1bmN0aW9uPiBpbiB5b3VyIGJhY2t1cCBhdAorICAgIDxmaWxlbmFtZT5nbG9i YWwvcGdfY29udHJvbDwvZmlsZW5hbWU+LiBUaGlzIHZlcnNpb24gb2YgcGdfY29udHJvbCBj b250YWlucworICAgIHNhZmVndWFyZHMgYWdhaW5zdCByZWNvdmVyeSB3aXRob3V0IGJhY2t1 cF9sYWJlbCBwcmVzZW50IGFuZCBpcyBndWFyYW50ZWVkCisgICAgbm90IHRvIGJlIHRvcm4u CisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFlvdSBzaG91bGQgYWxzbyBvbWl0IGZy b20gdGhlIGJhY2t1cCB0aGUgZmlsZXMgd2l0aGluIHRoZQogICAgIGNsdXN0ZXIncyA8Zmls ZW5hbWU+cGdfd2FsLzwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeS4gIFRoaXMKICAgICBzbGln aHQgYWRqdXN0bWVudCBpcyB3b3J0aHdoaWxlIGJlY2F1c2UgaXQgcmVkdWNlcyB0aGUgcmlz awogICAgIG9mIG1pc3Rha2VzIHdoZW4gcmVzdG9yaW5nLiAgVGhpcyBpcyBlYXN5IHRvIGFy cmFuZ2UgaWYKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3Jj L3NnbWwvZnVuYy5zZ21sCmluZGV4IDc4NjI2OWI5MjAuLjA5MjA0ZGI3Y2QgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dt bApAQCAtMjg1ODEsOCArMjg1ODEsOSBAQCBMT0c6ICBHcmFuZCB0b3RhbDogMTY1MTkyMCBi eXRlcyBpbiAyMDEgYmxvY2tzOyA2MjIzNjAgZnJlZSAoODggY2h1bmtzKTsgMTAyOTU2MAog ICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBpcyBhIHNpbmdsZSByZWNvcmQu CiAgICAgICAgIFRoZSA8cGFyYW1ldGVyPmxzbjwvcGFyYW1ldGVyPiBjb2x1bW4gaG9sZHMg dGhlIGJhY2t1cCdzIGVuZGluZwogICAgICAgICB3cml0ZS1haGVhZCBsb2cgbG9jYXRpb24g KHdoaWNoIGFnYWluIGNhbiBiZSBpZ25vcmVkKS4gIFRoZSBzZWNvbmQKLSAgICAgICAgY29s dW1uIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBiYWNrdXAgbGFiZWwgZmlsZSwgYW5k IHRoZSB0aGlyZAotICAgICAgICBjb2x1bW4gcmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhl IHRhYmxlc3BhY2UgbWFwIGZpbGUuICBUaGVzZSBtdXN0IGJlCisgICAgICAgIGNvbHVtbiBy ZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgYmFja3VwIGxhYmVsIGZpbGUsIHRoZSB0aGly ZCBjb2x1bW4KKyAgICAgICAgcmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlc3Bh Y2UgbWFwIGZpbGUsIGFuZCB0aGUgZm91cnRoIGNvbHVtbgorICAgICAgICByZXR1cm5zIHRo ZSBjb250ZW50cyBvZiBwZ19jb250cm9sLiAgVGhlc2UgbXVzdCBiZQogICAgICAgICBzdG9y ZWQgYXMgcGFydCBvZiB0aGUgYmFja3VwIGFuZCBhcmUgcmVxdWlyZWQgYXMgcGFydCBvZiB0 aGUgcmVzdG9yZQogICAgICAgICBwcm9jZXNzLgogICAgICAgIDwvcGFyYT4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMKaW5kZXggM2UzZDJiYjYxOC4uYTdkN2Mx YmNiZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNz LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMKQEAgLTEx NSw5ICsxMTUsMTEgQEAgcGdfYmFja3VwX3N0YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCiAgKgog ICogVGhlIGJhY2t1cF9sYWJlbCBjb250YWlucyB0aGUgdXNlci1zdXBwbGllZCBsYWJlbCBz dHJpbmcgKHR5cGljYWxseSB0aGlzCiAgKiB3b3VsZCBiZSB1c2VkIHRvIHRlbGwgd2hlcmUg dGhlIGJhY2t1cCBkdW1wIHdpbGwgYmUgc3RvcmVkKSwgdGhlIHN0YXJ0aW5nCi0gKiB0aW1l LCBzdGFydGluZyBXQUwgbG9jYXRpb24gZm9yIHRoZSBkdW1wIGFuZCBzbyBvbi4gIEl0IGlz IHRoZSBjYWxsZXIncwotICogcmVzcG9uc2liaWxpdHkgdG8gd3JpdGUgdGhlIGJhY2t1cF9s YWJlbCBhbmQgdGFibGVzcGFjZV9tYXAgZmlsZXMgaW4gdGhlCi0gKiBkYXRhIGZvbGRlciB0 aGF0IHdpbGwgYmUgcmVzdG9yZWQgZnJvbSB0aGlzIGJhY2t1cC4KKyAqIHRpbWUsIHN0YXJ0 aW5nIFdBTCBsb2NhdGlvbiBmb3IgdGhlIGR1bXAgYW5kIHNvIG9uLiAgVGhlIHBnX2NvbnRy b2wgZmlsZQorICogY29udGFpbnMgYSBjb25zaXN0ZW50IGNvcHkgb2YgcGdfY29udHJvbCB0 aGF0IGFsc28gaGFzIGEgc2FmZWd1YXJkIGFnYWluc3QKKyAqIGJlaW5nIHVzZWQgd2l0aG91 dCBiYWNrdXBfbGFiZWwuICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8g d3JpdGUKKyAqIHRoZSBiYWNrdXBfbGFiZWwsIHBnX2NvbnRyb2wsIGFuZCB0YWJsZXNwYWNl X21hcCBmaWxlcyBpbiB0aGUgZGF0YSBmb2xkZXIKKyAqIHRoYXQgd2lsbCBiZSByZXN0b3Jl ZCBmcm9tIHRoaXMgYmFja3VwLgogICoKICAqIFBlcm1pc3Npb24gY2hlY2tpbmcgZm9yIHRo aXMgZnVuY3Rpb24gaXMgbWFuYWdlZCB0aHJvdWdoIHRoZSBub3JtYWwKICAqIEdSQU5UIHN5 c3RlbS4KQEAgLTEyNSwxMiArMTI3LDEzIEBAIHBnX2JhY2t1cF9zdGFydChQR19GVU5DVElP Tl9BUkdTKQogRGF0dW0KIHBnX2JhY2t1cF9zdG9wKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0j ZGVmaW5lIFBHX0JBQ0tVUF9TVE9QX1YyX0NPTFMgMworI2RlZmluZSBQR19CQUNLVVBfU1RP UF9WMl9DT0xTIDQKIAlUdXBsZURlc2MJdHVwZGVzYzsKIAlEYXR1bQkJdmFsdWVzW1BHX0JB Q0tVUF9TVE9QX1YyX0NPTFNdID0gezB9OwogCWJvb2wJCW51bGxzW1BHX0JBQ0tVUF9TVE9Q X1YyX0NPTFNdID0gezB9OwogCWJvb2wJCXdhaXRmb3JhcmNoaXZlID0gUEdfR0VUQVJHX0JP T0woMCk7CiAJY2hhcgkgICAqYmFja3VwX2xhYmVsOworCWJ5dGVhCSAgICpwZ19jb250cm9s X2J5dGVhOwogCVNlc3Npb25CYWNrdXBTdGF0ZSBzdGF0dXMgPSBnZXRfYmFja3VwX3N0YXR1 cygpOwogCiAJLyogSW5pdGlhbGl6ZSBhdHRyaWJ1dGVzIGluZm9ybWF0aW9uIGluIHRoZSB0 dXBsZSBkZXNjcmlwdG9yICovCkBAIC0xNTIsOSArMTU1LDE1IEBAIHBnX2JhY2t1cF9zdG9w KFBHX0ZVTkNUSU9OX0FSR1MpCiAJLyogQnVpbGQgdGhlIGNvbnRlbnRzIG9mIGJhY2t1cF9s YWJlbCAqLwogCWJhY2t1cF9sYWJlbCA9IGJ1aWxkX2JhY2t1cF9jb250ZW50KGJhY2t1cF9z dGF0ZSwgZmFsc2UpOwogCisJLyogQnVpbGQgdGhlIGNvbnRlbnRzIG9mIHBnX2NvbnRyb2wg Ki8KKwlwZ19jb250cm9sX2J5dGVhID0gKGJ5dGVhICopIHBhbGxvYyhQR19DT05UUk9MX0ZJ TEVfU0laRSArIFZBUkhEUlNaKTsKKwlTRVRfVkFSU0laRShwZ19jb250cm9sX2J5dGVhLCBQ R19DT05UUk9MX0ZJTEVfU0laRSArIFZBUkhEUlNaKTsKKwliYWNrdXBfY29udHJvbF9maWxl KCh1aW50OF90ICopVkFSREFUQShwZ19jb250cm9sX2J5dGVhKSk7CisKIAl2YWx1ZXNbMF0g PSBMU05HZXREYXR1bShiYWNrdXBfc3RhdGUtPnN0b3Bwb2ludCk7CiAJdmFsdWVzWzFdID0g Q1N0cmluZ0dldFRleHREYXR1bShiYWNrdXBfbGFiZWwpOwogCXZhbHVlc1syXSA9IENTdHJp bmdHZXRUZXh0RGF0dW0odGFibGVzcGFjZV9tYXAtPmRhdGEpOworCXZhbHVlc1szXSA9IFBv aW50ZXJHZXREYXR1bShwZ19jb250cm9sX2J5dGVhKTsKIAogCS8qIERlYWxsb2NhdGUgYmFj a3VwLXJlbGF0ZWQgdmFyaWFibGVzICovCiAJcGZyZWUoYmFja3VwX2xhYmVsKTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwgYi9zcmMv YmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCmluZGV4IGIwZDBkZTA1MWUu Ljc1OGY5MGIyYzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1 bmN0aW9ucy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25z LnNxbApAQCAtMzkwLDcgKzM5MCw3IEBAIENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OCiAK IENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHBnX2JhY2t1cF9zdG9wICgKICAgICAgICAg d2FpdF9mb3JfYXJjaGl2ZSBib29sZWFuIERFRkFVTFQgdHJ1ZSwgT1VUIGxzbiBwZ19sc24s Ci0gICAgICAgIE9VVCBsYWJlbGZpbGUgdGV4dCwgT1VUIHNwY21hcGZpbGUgdGV4dCkKKyAg ICAgICAgT1VUIGxhYmVsZmlsZSB0ZXh0LCBPVVQgc3BjbWFwZmlsZSB0ZXh0LCBPVVQgY29u dHJvbGZpbGUgYnl0ZWEpCiAgIFJFVFVSTlMgcmVjb3JkIFNUUklDVCBWT0xBVElMRSBMQU5H VUFHRSBpbnRlcm5hbCBhcyAncGdfYmFja3VwX3N0b3AnCiAgIFBBUkFMTEVMIFJFU1RSSUNU RUQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDdjYzU0MjFlYTEuLmVhOTMy NDFlZWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysr IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtNjU2OSw4ICs2NTY5LDgg QEAKIHsgb2lkID0+ICcyNzM5JywgZGVzY3IgPT4gJ2ZpbmlzaCB0YWtpbmcgYW4gb25saW5l IGJhY2t1cCcsCiAgIHByb25hbWUgPT4gJ3BnX2JhY2t1cF9zdG9wJywgcHJvdm9sYXRpbGUg PT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAncicsCiAgIHByb3JldHR5cGUgPT4gJ3JlY29yZCcs IHByb2FyZ3R5cGVzID0+ICdib29sJywKLSAgcHJvYWxsYXJndHlwZXMgPT4gJ3tib29sLHBn X2xzbix0ZXh0LHRleHR9JywgcHJvYXJnbW9kZXMgPT4gJ3tpLG8sbyxvfScsCi0gIHByb2Fy Z25hbWVzID0+ICd7d2FpdF9mb3JfYXJjaGl2ZSxsc24sbGFiZWxmaWxlLHNwY21hcGZpbGV9 JywKKyAgcHJvYWxsYXJndHlwZXMgPT4gJ3tib29sLHBnX2xzbix0ZXh0LHRleHQsYnl0ZWF9 JywgcHJvYXJnbW9kZXMgPT4gJ3tpLG8sbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3t3 YWl0X2Zvcl9hcmNoaXZlLGxzbixsYWJlbGZpbGUsc3BjbWFwZmlsZSxjb250cm9sZmlsZX0n LAogICBwcm9zcmMgPT4gJ3BnX2JhY2t1cF9zdG9wJyB9LAogeyBvaWQgPT4gJzM0MzYnLCBk ZXNjciA9PiAncHJvbW90ZSBzdGFuZGJ5IHNlcnZlcicsCiAgIHByb25hbWUgPT4gJ3BnX3By b21vdGUnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDJfbG93X2xldmVsX2JhY2t1cC5wbCBi L3NyYy90ZXN0L3JlY292ZXJ5L3QvMDQyX2xvd19sZXZlbF9iYWNrdXAucGwKaW5kZXggNjFk MjMxODdlMC4uYmQzYTk5OTYwZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8w NDJfbG93X2xldmVsX2JhY2t1cC5wbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzA0Ml9s b3dfbGV2ZWxfYmFja3VwLnBsCkBAIC0xMyw2ICsxMyw0MiBAQCB1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0 OjpNb3JlOwogCisjIERlY29kZSBoZXggdG8gYmluYXJ5CitzdWIgZGVjb2RlX2hleAorewor CW15ICgkZW5jb2RlZCkgPSBAXzsKKwlteSAkZGVjb2RlZDsKKworCSRlbmNvZGVkID1+IHMv XlxzK3xccyskLy9nOworCisJZm9yIChteSAkaWR4ID0gMDsgJGlkeCA8IGxlbmd0aCgkZW5j b2RlZCk7ICRpZHggKz0gMikKKwl7CisJCSRkZWNvZGVkIC49IHBhY2soJ0MnLCBoZXgoc3Vi c3RyKCRlbmNvZGVkLCAkaWR4LCAyKSkpOworCX0KKworCXJldHVybiAkZGVjb2RlZDsKK30K KworIyBHZXQgYmFja3VwX2xhYmVsL3BnX2NvbnRyb2wgZnJvbSBwZ19zdG9wX2JhY2t1cCgp CitzdWIgc3RvcF9iYWNrdXBfcmVzdWx0Cit7CisJbXkgKCRwc3FsKSA9IEBfOworCisJbXkg JGVuY29kZWQgPSAkcHNxbC0+cXVlcnlfc2FmZSgKKwkJInNlbGVjdCBlbmNvZGUobGFiZWxm aWxlOjpieXRlYSwgJ2hleCcpIHx8ICcsJyB8fCAiIC4KKwkJIiAgICAgICBlbmNvZGUoY29u dHJvbGZpbGUsICdoZXgnKSIgLgorCQkiICBmcm9tIHBnX2JhY2t1cF9zdG9wKCkiKTsKKwor CW15IEByZXN1bHQ7CisKKyAgICBmb3JlYWNoIG15ICRjb2x1bW4gKHNwbGl0KCcsJywgJGVu Y29kZWQpKQorCXsKKwkJcHVzaChAcmVzdWx0LCBkZWNvZGVfaGV4KCRjb2x1bW4pKTsKKwl9 CisKKwlyZXR1cm4gQHJlc3VsdDsKK30KKwogIyBTdGFydCBwcmltYXJ5IG5vZGUgd2l0aCBh cmNoaXZpbmcuCiBteSAkbm9kZV9wcmltYXJ5ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl ci0+bmV3KCdwcmltYXJ5Jyk7CiAkbm9kZV9wcmltYXJ5LT5pbml0KGhhc19hcmNoaXZpbmcg PT4gMSwgYWxsb3dzX3N0cmVhbWluZyA9PiAxKTsKQEAgLTgwLDggKzExNiw3IEBAIG15ICRz dG9wX3NlZ21lbnRfbmFtZSA9ICRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMn LAogCSdTRUxFQ1QgcGdfd2FsZmlsZV9uYW1lKHBnX2N1cnJlbnRfd2FsX2xzbigpKScpOwog CiAjIFN0b3AgYmFja3VwIGFuZCBnZXQgYmFja3VwX2xhYmVsLCB0aGUgbGFzdCBzZWdtZW50 IGlzIGFyY2hpdmVkLgotbXkgJGJhY2t1cF9sYWJlbCA9Ci0gICRwc3FsLT5xdWVyeV9zYWZl KCJzZWxlY3QgbGFiZWxmaWxlIGZyb20gcGdfYmFja3VwX3N0b3AoKSIpOworKG15ICRiYWNr dXBfbGFiZWwsIG15ICRwZ19jb250cm9sKSA9IHN0b3BfYmFja3VwX3Jlc3VsdCgkcHNxbCk7 CiAKICRwc3FsLT5xdWl0OwogCkBAIC0xMTgsMTAgKzE1MywzNiBAQCBvayggJG5vZGVfcmVw bGljYS0+bG9nX2NvbnRhaW5zKAogJG5vZGVfcmVwbGljYS0+dGVhcmRvd25fbm9kZTsKICRu b2RlX3JlcGxpY2EtPmNsZWFuX25vZGU7CiAKKyMgU2F2ZSBvbmx5IHBnX2NvbnRyb2wgaW50 byB0aGUgYmFja3VwIHRvIGRlbW9uc3RyYXRlIHRoYXQgcGdfY29udHJvbCByZXR1cm5lZAor IyBmcm9tIHBnX3N0b3BfYmFja3VwKCkgd2lsbCBvbmx5IHBlcmZvcm0gcmVjb3Zlcnkgd2hl biBiYWNrdXBfbGFiZWwgaXMgcHJlc2VudC4KK29wZW4obXkgJGZoLCAiPiIsICIkYmFja3Vw X2Rpci9nbG9iYWwvcGdfY29udHJvbCIpCisgIG9yIGRpZSAiY291bGQgbm90IG9wZW4gcGdf Y29udHJvbCI7CitiaW5tb2RlKCRmaCk7CitzeXN3cml0ZSgkZmgsICRwZ19jb250cm9sKTsK K2Nsb3NlKCRmaCk7CisKKyRub2RlX3JlcGxpY2EgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyLT5uZXcoJ3JlcGxpY2FfZmFpbDInKTsKKyRub2RlX3JlcGxpY2EtPmluaXRfZnJvbV9i YWNrdXAoJG5vZGVfcHJpbWFyeSwgJGJhY2t1cF9uYW1lLAorCWhhc19yZXN0b3JpbmcgPT4g MSk7CisKK215ICRyZXMgPSBydW5fbG9nKAorCVsKKwkJJ3BnX2N0bCcsICctRCcsICRub2Rl X3JlcGxpY2EtPmRhdGFfZGlyLCAnLWwnLAorCQkkbm9kZV9yZXBsaWNhLT5sb2dmaWxlLCAn c3RhcnQnCisJXSk7CitvayghJHJlcywgJ2ludmFsaWQgcmVjb3Zlcnkgc3RhcnR1cCBmYWls cycpOworCitteSAkbG9nZmlsZSA9IHNsdXJwX2ZpbGUoJG5vZGVfcmVwbGljYS0+bG9nZmls ZSgpKTsKK29rKCRsb2dmaWxlID1+IHFyL2NvdWxkIG5vdCBmaW5kIGJhY2t1cF9sYWJlbCBy ZXF1aXJlZCBmb3IgcmVjb3ZlcnkvLAorCSdjb3VsZCBub3QgZmluZCBiYWNrdXBfbGFiZWwg cmVxdWlyZWQgZm9yIHJlY292ZXJ5Jyk7CisKKyRub2RlX3JlcGxpY2EtPnRlYXJkb3duX25v ZGU7Ciskbm9kZV9yZXBsaWNhLT5jbGVhbl9ub2RlOworCiAjIFNhdmUgYmFja3VwX2xhYmVs IGludG8gdGhlIGJhY2t1cCBkaXJlY3RvcnkgYW5kIHJlY292ZXIgdXNpbmcgdGhlIHByaW1h cnkncwogIyBhcmNoaXZlLiAgVGhpcyB0aW1lIHJlY292ZXJ5IHdpbGwgc3VjY2VlZCBhbmQg dGhlIGNhbmFyeSB0YWJsZSB3aWxsIGJlCiAjIHByZXNlbnQuCi1vcGVuIG15ICRmaCwgIj4+ IiwgIiRiYWNrdXBfZGlyL2JhY2t1cF9sYWJlbCIKK29wZW4gJGZoLCAiPj4iLCAiJGJhY2t1 cF9kaXIvYmFja3VwX2xhYmVsIgogICBvciBkaWUgImNvdWxkIG5vdCBvcGVuIGJhY2t1cF9s YWJlbCI7CiAjIEJpbmFyeSBtb2RlIGlzIHJlcXVpcmVkIGZvciBXaW5kb3dzLCBhcyB0aGUg YmFja3VwX2xhYmVsIHBhcnNpbmcgaXMgbm90CiAjIGFibGUgdG8gY29wZSB3aXRoIENSTEZz LgotLSAKMi4zNC4xCgo= --------------40GKlGaTbOlVCLo0eIXrNrr0--