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 1vYQlV-003JzS-0L for pgsql-docs@arkaria.postgresql.org; Wed, 24 Dec 2025 15:27:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vYQlT-004xyz-0w for pgsql-docs@arkaria.postgresql.org; Wed, 24 Dec 2025 15:27:04 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vYQlS-004xyr-2x for pgsql-docs@lists.postgresql.org; Wed, 24 Dec 2025 15:27:03 +0000 Received: from mail-yw1-x1135.google.com ([2607:f8b0:4864:20::1135]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vYQlR-002PkF-2F for pgsql-docs@lists.postgresql.org; Wed, 24 Dec 2025 15:27:02 +0000 Received: by mail-yw1-x1135.google.com with SMTP id 00721157ae682-78fb6c7874cso50390997b3.0 for ; Wed, 24 Dec 2025 07:27:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766590020; x=1767194820; 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=O4wQ3TuyaSXjgBpe0Kc/kOHsyK94CBHa4jsrMtJKugA=; b=EnWTtzIsr2ls2t0u3PMOfaJMhGrT8ph/O3Ssu0qMiuEzpK0Spp/21ua2Hkh95a0GRa bwtrLSrgfjn/WkhUe8xJhKIzYQPDr7AcNpQAuMgF3lFJqu8fZ0fcI8Ijod1Z9gvlKZmQ cJ+1AR5/wOv31316cLCp0G0Ol/nobwzsv6sMqvnhp/V7IdwDn0q5G0Pb1vbqTntqiPc3 zu8jNpqGDCbAo0d2zjk7i+4PGIE3GtpAhLsE71TKDP878jfGQkf3UJNCZSfhXcNX4wfi hA4M8gzS8+9JUkDsNJvhIG8vWGlZAYG3Bba1cTJVLK3dUrkpsIesZvuwIKru+S3yHHC8 WesQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766590020; x=1767194820; 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=O4wQ3TuyaSXjgBpe0Kc/kOHsyK94CBHa4jsrMtJKugA=; b=pNshBdaKoXQtcR2liaqD5Q3CTTbzFwt2bL/ZcwZ2VKlhDzgml+KWu/9F9a8myotXwu cm45D64lQUQ8qqOxz5pQoQthI3raoMRs4girCuOcw052H6Ufy1AuOMyV9SIrCR9zR5t+ 68VPD4YuX4te0TxOtgNb+L6Xw94XQhr3N3g96tq8nASITQsesMSoXV6kH8g0I6zFReX/ Z5BrBlV+V8MuHlu9uMTwq5yJ4d/aur+Ec7cFXStp1d4kO2B2Ept1yPbAODZNXLKQqRfw CHdN6R0qbiLB6hQPpoyvAvNKLxvzDuiFJTwBN0zHbpa6IAcfcTrFq6iSIv44Bwa05rba 4WGg== X-Gm-Message-State: AOJu0YzP47HIGFs8I4kubMNY/hq+8lkF4per0Ugkbtdi8IiGaG29goPa 0g5NDHUvMMzI9/gRBx2sRZduqe9FYJnIIlsym5BPmNINfeM03CSZUFUHbOA/NfpXFhfu+bGMpM+ w0sBFGXuJPGQawiv9jCEJcWgbD3ypC0o= X-Gm-Gg: AY/fxX5VwtL66iZOvQEEvCyK2TJM6j/P3/O94t5NWAlhl1wiW0D6yJDk4esAnrJOI20 mDIGhuV2FXB9qEJGLCaJw1+yjheLpyKgFsJ913QHqCJVvIQ+CQPppnStpFv5ypmq+4Xi+3ib/2e hJL6exo12tNASC+ysIevPcipMeuO4WYet13jvrmaVhZ5YO7K9hGPyYP7wtBdTRkVxAdufs+k7vG rHPsDSpkv2D4tauJ5wQQOHAdLU2AOsUqvQvY8Grqt0+Mlp2D3Se5YzBfzuEANkrRe7RsA+TyNaH zjwhvE11xMMLUypA1VCB X-Google-Smtp-Source: AGHT+IEiXdIFVp6bJgen4PjwgOMQV8Hy8Ugv8YSOvxhOpweBPLcwoRvR+o1QGjBtGQDqceV3MFCE7Z2+vSSrNWwnNvk= X-Received: by 2002:a05:690c:6d13:b0:78c:69fe:eb21 with SMTP id 00721157ae682-78fb3f136b8mr152536827b3.17.1766590019909; Wed, 24 Dec 2025 07:26:59 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Bernice Southey Date: Wed, 24 Dec 2025 15:26:23 +0000 X-Gm-Features: AQt7F2opzQUZ-i0DJ-5rB6qKrVqwHkTIpKNTpYJhCWahfdq0ovU7z8DTBpCqDfc Message-ID: Subject: Re: More guidance on ctid To: Bruce Momjian Cc: pgsql-docs@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000099f1950646b44a6e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000099f1950646b44a6e Content-Type: text/plain; charset="UTF-8" > Okay, let's give it another 12 hours and I will apply it tomorrow, > thanks. I had a new thought. Perhaps the root problem is trying to put too many things into one example. We can use the two examples to show different things. I've kept batching - with skip lock, limit and ctid - in DELETE. Other than switching out skip lock for order by, this is much the same as currently, but with all the existing update explanatory text moved here. Skip lock makes ctid safe, and this is a good use of it. I've used UPDATE to show how to prevent deadlocks with order by, for update, and an immutable key. This meant explaining why an immutable key matters, conveniently ruling out ctid without even mentioning it. I think this now covers how to order by and limit with update and delete, how and why to batch, how to safely avoid deadlocks, how to use for update (with and without skip lock) and when and when not to use ctid. But if you don't like this approach, I'm still happy if you go with your patch. I expect my patch needs quite a bit more work, even if you do like it. Thanks, Bernice --00000000000099f1950646b44a6e Content-Type: text/x-patch; charset="US-ASCII"; name="v3-rework-update-and-delete-self-join-examples.patch" Content-Disposition: attachment; filename="v3-rework-update-and-delete-self-join-examples.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjk5p3yv0 RnJvbSBhMThhYjc1OTgxM2ZkZmUzMDI0MTIzMWRhNDFmYjhjYjhhOTdiZTY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCZXJuaWNlIFNvdXRoZXkgPGJlcm5pY2Uuc291dGhleUBnbWFp bC5jb20+CkRhdGU6IFdlZCwgMjQgRGVjIDIwMjUgMTU6MTM6MDAgKzAwMDAKU3ViamVjdDogW1BB VENIXSByZXdvcmsgdXBkYXRlIGFuZCBkZWxldGUgc2VsZi1qb2luIGV4YW1wbGVzCgotLS0KIGRv Yy9zcmMvc2dtbC9kZGwuc2dtbCAgICAgICAgfCAgMiArLQogZG9jL3NyYy9zZ21sL3JlZi9kZWxl dGUuc2dtbCB8IDMzICsrKysrKysrKysrKysrKysrKy0tLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3Vw ZGF0ZS5zZ21sIHwgNTEgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAzIGZp bGVzIGNoYW5nZWQsIDQ4IGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9kZGwuc2dtbCBiL2RvYy9zcmMvc2dtbC9kZGwuc2dtbAppbmRleCBj ZWEyOGMwMGY4YS4uOTA3MGFhYTVhN2MgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9kZGwuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvZGRsLnNnbWwKQEAgLTE1NTgsNyArMTU1OCw3IEBAIENSRUFU RSBUQUJMRSBjaXJjbGVzICgKICAgICAgIGxvY2F0ZSB0aGUgcm93IHZlcnNpb24gdmVyeSBxdWlj a2x5LCBhIHJvdydzCiAgICAgICA8c3RydWN0ZmllbGQ+Y3RpZDwvc3RydWN0ZmllbGQ+IHdpbGwg Y2hhbmdlIGlmIGl0IGlzCiAgICAgICB1cGRhdGVkIG9yIG1vdmVkIGJ5IDxjb21tYW5kPlZBQ1VV TSBGVUxMPC9jb21tYW5kPi4gIFRoZXJlZm9yZQotICAgICAgPHN0cnVjdGZpZWxkPmN0aWQ8L3N0 cnVjdGZpZWxkPiBpcyB1c2VsZXNzIGFzIGEgbG9uZy10ZXJtIHJvdworICAgICAgPHN0cnVjdGZp ZWxkPmN0aWQ8L3N0cnVjdGZpZWxkPiBzaG91bGQgbm90IGJlIHVzZWQgYXMgYSByb3cKICAgICAg IGlkZW50aWZpZXIuICBBIHByaW1hcnkga2V5IHNob3VsZCBiZSB1c2VkIHRvIGlkZW50aWZ5IGxv Z2ljYWwgcm93cy4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvcmVmL2RlbGV0ZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9kZWxldGUuc2dt bAppbmRleCA1YjUyZjc3ZTI4Zi4uNmE1MTJiNmJiYWEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvZGVsZXRlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9kZWxldGUuc2dtbApAQCAt MzA2LDIzICszMDYsNDIgQEAgREVMRVRFIEZST00gdGFza3MgV0hFUkUgQ1VSUkVOVCBPRiBjX3Rh c2tzOwogPC9wcm9ncmFtbGlzdGluZz4KICAgPC9wYXJhPgogCi0gIDxwYXJhPgotICAgV2hpbGUg dGhlcmUgaXMgbm8gPGxpdGVyYWw+TElNSVQ8L2xpdGVyYWw+IGNsYXVzZQotICAgZm9yIDxjb21t YW5kPkRFTEVURTwvY29tbWFuZD4sIGl0IGlzIHBvc3NpYmxlIHRvIGdldCBhIHNpbWlsYXIgZWZm ZWN0Ci0gICB1c2luZyB0aGUgc2FtZSBtZXRob2QgZGVzY3JpYmVkIGluIDxsaW5rIGxpbmtlbmQ9 InVwZGF0ZS1saW1pdCI+dGhlCi0gICBkb2N1bWVudGF0aW9uIG9mIDxjb21tYW5kPlVQREFURTwv Y29tbWFuZD48L2xpbms+OgorICA8cGFyYSBpZD0iZGVsZXRlLWxpbWl0Ij4KKyAgIERlbGV0ZXMg YW5kIHVwZGF0ZXMgYWZmZWN0aW5nIG1hbnkgcm93cyBjYW4gaGF2ZSBuZWdhdGl2ZSBlZmZlY3Rz IG9uIHN5c3RlbQorICAgcGVyZm9ybWFuY2UsIHN1Y2ggYXMgdGFibGUgYmxvYXQsIGluY3JlYXNl ZCByZXBsaWNhIGxhZywgYW5kIGluY3JlYXNlZAorICAgbG9jayBjb250ZW50aW9uLiAgSW4gc3Vj aCBzaXR1YXRpb25zIGl0IGNhbiBtYWtlIHNlbnNlIHRvIHBlcmZvcm0gdGhlCisgICBvcGVyYXRp b24gaW4gc21hbGxlciBiYXRjaGVzLCBwb3NzaWJseSB3aXRoIGEgPGNvbW1hbmQ+VkFDVVVNPC9j b21tYW5kPgorICAgb3BlcmF0aW9uIG9uIHRoZSB0YWJsZSBiZXR3ZWVuIGJhdGNoZXMuICBXaGls ZSB0aGVyZSBpcyBubyA8bGl0ZXJhbD5MSU1JVAorICAgPC9saXRlcmFsPiBjbGF1c2UgZm9yIDxj b21tYW5kPkRFTEVURTwvY29tbWFuZD4sIGl0IGlzIHBvc3NpYmxlIHRvIGdldCBhCisgICBzaW1p bGFyIGVmZmVjdCB0aHJvdWdoIHRoZSB1c2Ugb2YgYSA8bGluayBsaW5rZW5kPSJxdWVyaWVzLXdp dGgiPkNvbW1vbgorICAgVGFibGUgRXhwcmVzc2lvbjwvbGluaz4gYW5kIGEgc2VsZi1qb2luLiAg QSByZWxhdGVkIGV4YW1wbGUgZm9yIDxsaXRlcmFsPgorICAgT1JERVIgQlk8L2xpdGVyYWw+IGlz IGRlc2NyaWJlZCBpbiA8bGluayBsaW5rZW5kPSJ1cGRhdGUtb3JkZXItYnkiPnRoZQorICAgZG9j dW1lbnRhdGlvbiBvZiA8Y29tbWFuZD5VUERBVEU8L2NvbW1hbmQ+PC9saW5rPi4gIFdpdGggdGhl IHN0YW5kYXJkCisgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHRhYmxl IGFjY2VzcyBtZXRob2QsIGEgc2VsZi1qb2luIG9uCisgICB0aGUgc3lzdGVtIGNvbHVtbiA8bGlu ayBsaW5rZW5kPSJkZGwtc3lzdGVtLWNvbHVtbnMtY3RpZCI+Y3RpZDwvbGluaz4gaXMKKyAgIHZl cnkgZWZmaWNpZW50OgogPHByb2dyYW1saXN0aW5nPgogV0lUSCBkZWxldGVfYmF0Y2ggQVMgKAog ICBTRUxFQ1QgbC5jdGlkIEZST00gdXNlcl9sb2dzIEFTIGwKICAgICBXSEVSRSBsLnN0YXR1cyA9 ICdhcmNoaXZlZCcKLSAgICBPUkRFUiBCWSBsLmNyZWF0aW9uX2RhdGUKLSAgICBGT1IgVVBEQVRF CisgICAgRk9SIFVQREFURSBTS0lQIExPQ0tFRAogICAgIExJTUlUIDEwMDAwCiApCiBERUxFVEUg RlJPTSB1c2VyX2xvZ3MgQVMgZGwKICAgVVNJTkcgZGVsZXRlX2JhdGNoIEFTIGRlbAogICBXSEVS RSBkbC5jdGlkID0gZGVsLmN0aWQ7CiA8L3Byb2dyYW1saXN0aW5nPgorICAgVGhpcyBjb21tYW5k IHdpbGwgbmVlZCB0byBiZSByZXBlYXRlZCB1bnRpbCBubyByb3dzIHJlbWFpbiB0byBiZSBkZWxl dGVkLgorICAgVXNlIG9mIDxsaXRlcmFsPkZPUiBVUERBVEU8L2xpdGVyYWw+IHdpdGggPGxpdGVy YWw+U0tJUCBMT0NLRUQ8L2xpdGVyYWw+CisgICBwcmV2ZW50cyBkZWFkbG9ja3MgZnJvbSBvY2N1 cnJpbmcgaWYgYW5vdGhlciBjb21tYW5kIGhhcyBsb2NrZWQgdGhlIHNhbWUKKyAgIHJvd3MgaW4g YSBkaWZmZXJlbnQgb3JkZXIuIEhvd2V2ZXIgYW4gaW5kZXBlbmRlbnQgY2hlY2sgZm9yIHJlbWFp bmluZyByb3dzCisgICB3aXRob3V0IDxsaXRlcmFsPlNLSVAgTE9DS0VEPC9saXRlcmFsPiB3aWxs IGJlIG5lZWRlZCB0byBlbnN1cmUgdGhhdCBubworICAgbWF0Y2hpbmcgcm93cyB3ZXJlIG92ZXJs b29rZWQuICA8bGl0ZXJhbD5PUkRFUiBCWTwvbGl0ZXJhbD4gY2FuIGJlIGFkZGVkIHRvCisgICBw cmlvcml0aXplIHdoaWNoIHJvd3Mgd2lsbCBiZSBkZWxldGVkLiAgPHN0cnVjdGZpZWxkPmN0aWQ8 L3N0cnVjdGZpZWxkPiBpcyAKKyAgIHNhZmUgaGVyZSBiZWNhdXNlIDxsaXRlcmFsPkZPUiBVUERB VEU8L2xpdGVyYWw+IHdpdGggPGxpdGVyYWw+U0tJUCBMT0NLRUQgaW4KKyAgIDwvbGl0ZXJhbD4g PGxpbmsgbGlua2VuZD0ieGFjdC1yZWFkLWNvbW1pdHRlZCI+UmVhZCBDb21taXR0ZWQ8L2xpbms+ IG1vZGUKKyAgIGd1YXJhbnRlZXMgdGhlIHJvd3MgaW4gdGhlIDxsaXRlcmFsPkRFTEVURTwvbGl0 ZXJhbD4gYXJlIHRoZSBzYW1lIHJvd3MKKyAgIHJldHVybmVkIGJ5IHRoZSA8bGl0ZXJhbD5TRUxF Q1Q8L2xpdGVyYWw+LiAKICAgPC9wYXJhPgogIDwvcmVmc2VjdDE+CiAKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9yZWYvdXBkYXRlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3VwZGF0ZS5zZ21s CmluZGV4IDQwY2NhMDYzOTQ2Li4yNGE4MTRiYzYzMyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L3JlZi91cGRhdGUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3VwZGF0ZS5zZ21sCkBAIC00 NzcsNDEgKzQ3NywzMiBAQCBVUERBVEUgZmlsbXMgU0VUIGtpbmQgPSAnRHJhbWF0aWMnIFdIRVJF IENVUlJFTlQgT0YgY19maWxtczsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgIDwvcGFyYT4KIAotICA8 cGFyYSBpZD0idXBkYXRlLWxpbWl0Ij4KLSAgIFVwZGF0ZXMgYWZmZWN0aW5nIG1hbnkgcm93cyBj YW4gaGF2ZSBuZWdhdGl2ZSBlZmZlY3RzIG9uIHN5c3RlbQotICAgcGVyZm9ybWFuY2UsIHN1Y2gg YXMgdGFibGUgYmxvYXQsIGluY3JlYXNlZCByZXBsaWNhIGxhZywgYW5kIGluY3JlYXNlZAotICAg bG9jayBjb250ZW50aW9uLiAgSW4gc3VjaCBzaXR1YXRpb25zIGl0IGNhbiBtYWtlIHNlbnNlIHRv IHBlcmZvcm0gdGhlCi0gICBvcGVyYXRpb24gaW4gc21hbGxlciBiYXRjaGVzLCBwb3NzaWJseSB3 aXRoIGEgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPgotICAgb3BlcmF0aW9uIG9uIHRoZSB0YWJs ZSBiZXR3ZWVuIGJhdGNoZXMuICBXaGlsZSB0aGVyZSBpcwotICAgbm8gPGxpdGVyYWw+TElNSVQ8 L2xpdGVyYWw+IGNsYXVzZSBmb3IgPGNvbW1hbmQ+VVBEQVRFPC9jb21tYW5kPiwgaXQgaXMKLSAg IHBvc3NpYmxlIHRvIGdldCBhIHNpbWlsYXIgZWZmZWN0IHRocm91Z2ggdGhlIHVzZSBvZgorICA8 cGFyYSBpZD0idXBkYXRlLW9yZGVyLWJ5Ij4KKyAgIFVwZGF0aW5nIG9yIGRlbGV0aW5nIG11bHRp cGxlIHJvd3MgaW4gdGhlIHNhbWUgdGFibGUgYXQgdGhlIHNhbWUgdGltZSBvZnRlbgorICAgY2F1 c2VzIGRlYWRsb2Nrcy4gVGhpcyBjYW4gYmUgc29sdmVkIGJ5IGxvY2tpbmcgdGhlIHJvd3MgaW4g YSBjb25zaXN0ZW50CisgICBvcmRlci4gV2hpbGUgdGhlcmUgaXMgbm8gPGxpdGVyYWw+T1JERVIg Qlk8L2xpdGVyYWw+IGNsYXVzZSBmb3IgPGxpdGVyYWw+CisgICBVUERBVEU8L2xpdGVyYWw+LCBp dCBpcyBwb3NzaWJsZSB0byBnZXQgYSBzaW1pbGFyIGVmZmVjdCB0aHJvdWdoIHRoZSB1c2Ugb2YK ICAgIGEgPGxpbmsgbGlua2VuZD0icXVlcmllcy13aXRoIj5Db21tb24gVGFibGUgRXhwcmVzc2lv bjwvbGluaz4gYW5kIGEKLSAgIHNlbGYtam9pbi4gIFdpdGggdGhlIHN0YW5kYXJkIDxwcm9kdWN0 bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4KLSAgIHRhYmxlIGFjY2VzcyBtZXRob2QsIGEg c2VsZi1qb2luIG9uIHRoZSBzeXN0ZW0KLSAgIGNvbHVtbiA8bGluayBsaW5rZW5kPSJkZGwtc3lz dGVtLWNvbHVtbnMtY3RpZCI+Y3RpZDwvbGluaz4gaXMgdmVyeQotICAgZWZmaWNpZW50OgorICAg c2VsZi1qb2luLiAgQSByZWxhdGVkIGV4YW1wbGUgZm9yIDxsaXRlcmFsPkxJTUlUPC9saXRlcmFs PiBpcyBkZXNjcmliZWQgaW4KKyAgIDxsaW5rIGxpbmtlbmQ9ImRlbGV0ZS1saW1pdCI+IHRoZSBk b2N1bWVudGF0aW9uIG9mIDxjb21tYW5kPkRFTEVURTwvY29tbWFuZD4KKyAgIDwvbGluaz46CiA8 cHJvZ3JhbWxpc3Rpbmc+Ci1XSVRIIGV4Y2VlZGVkX21heF9yZXRyaWVzIEFTICgKLSAgU0VMRUNU IHcuY3RpZCBGUk9NIHdvcmtfaXRlbSBBUyB3Ci0gICAgV0hFUkUgdy5zdGF0dXMgPSAnYWN0aXZl JyBBTkQgdy5udW1fcmV0cmllcyAmZ3Q7IDEwCi0gICAgT1JERVIgQlkgdy5yZXRyeV90aW1lc3Rh bXAKK1dJVEggbG9ja19qb2JzIEFTICgKKyAgU0VMRUNUIGlkIEZST00gam9icworICAgIEpPSU4g Y29tcGxldGVfam9icyBVU0lORyAoaWQpCisgICAgT1JERVIgQlkgaWQKICAgICBGT1IgVVBEQVRF Ci0gICAgTElNSVQgNTAwMAogKQotVVBEQVRFIHdvcmtfaXRlbSBTRVQgc3RhdHVzID0gJ2ZhaWxl ZCcKLSAgRlJPTSBleGNlZWRlZF9tYXhfcmV0cmllcyBBUyBlbXIKLSAgV0hFUkUgd29ya19pdGVt LmN0aWQgPSBlbXIuY3RpZDsKK1VQREFURSBqb2JzIGogU0VUIHN0YXR1cyA9IGwuc3RhdHVzIAor ICBGUk9NIGxvY2tfam9icyBBUyBsCisgIFdIRVJFIGouaWQgPSBsLmlkOwogPC9wcm9ncmFtbGlz dGluZz4KLSAgIFRoaXMgY29tbWFuZCB3aWxsIG5lZWQgdG8gYmUgcmVwZWF0ZWQgdW50aWwgbm8g cm93cyByZW1haW4gdG8gYmUgdXBkYXRlZC4KLSAgIFVzZSBvZiBhbiA8bGl0ZXJhbD5PUkRFUiBC WTwvbGl0ZXJhbD4gY2xhdXNlIGFsbG93cyB0aGUgY29tbWFuZCB0bwotICAgcHJpb3JpdGl6ZSB3 aGljaCByb3dzIHdpbGwgYmUgdXBkYXRlZDsgaXQgY2FuIGFsc28gcHJldmVudCBkZWFkbG9jawot ICAgd2l0aCBvdGhlciB1cGRhdGUgb3BlcmF0aW9ucyBpZiB0aGV5IHVzZSB0aGUgc2FtZSBvcmRl cmluZy4KLSAgIElmIGxvY2sgY29udGVudGlvbiBpcyBhIGNvbmNlcm4sIHRoZW4gPGxpdGVyYWw+ U0tJUCBMT0NLRUQ8L2xpdGVyYWw+Ci0gICBjYW4gYmUgYWRkZWQgdG8gdGhlIDxhY3JvbnltPkNU RTwvYWNyb255bT4gdG8gcHJldmVudCBtdWx0aXBsZSBjb21tYW5kcwotICAgZnJvbSB1cGRhdGlu ZyB0aGUgc2FtZSByb3cuICBIb3dldmVyLCB0aGVuIGEKLSAgIGZpbmFsIDxjb21tYW5kPlVQREFU RTwvY29tbWFuZD4gd2l0aG91dCA8bGl0ZXJhbD5TS0lQIExPQ0tFRDwvbGl0ZXJhbD4KLSAgIG9y IDxsaXRlcmFsPkxJTUlUPC9saXRlcmFsPiB3aWxsIGJlIG5lZWRlZCB0byBlbnN1cmUgdGhhdCBu byBtYXRjaGluZwotICAgcm93cyB3ZXJlIG92ZXJsb29rZWQuCisgICBVc2Ugb2YgPGxpdGVyYWw+ Rk9SIFVQREFURTwvbGl0ZXJhbD4gcHJldmVudHMgbG9jayBjb250ZW50aW9uIHdpdGggb3RoZXIK KyAgIHVwZGF0ZSBvcGVyYXRpb25zIGlmIHRoZXkgdXNlIHRoZSBzYW1lIG9yZGVyaW5nLiBJbiA8 bGluayBsaW5rZW5kPQorICAgInhhY3QtcmVhZC1jb21taXR0ZWQiPlJlYWQgQ29tbWl0dGVkPC9s aW5rPiBtb2RlIGl0J3MgdmVyeSBpbXBvcnRhbnQgdG8gdXNlCisgICBhbiBpbW11dGFibGUgY29s dW1uIG9yIChjb2x1bW5zKSBmb3IgdGhlIHNlbGYtam9pbiB0byBndWFyYW50ZWUgdGhlIHJvd3Mg aW4KKyAgIHRoZSA8bGl0ZXJhbD5VUERBVEU8L2xpdGVyYWw+IGFyZSB0aGUgc2FtZSByb3dzIHJl dHVybmVkIGJ5IHRoZSA8bGl0ZXJhbD4KKyAgIFNFTEVDVDwvbGl0ZXJhbD4uCiAgIDwvcGFyYT4K ICA8L3JlZnNlY3QxPgogCi0tIAoyLjQzLjAKCg== --00000000000099f1950646b44a6e--