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 1vqFIt-007J5R-2P for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Feb 2026 18:51:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vqFIr-005A3v-2X for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Feb 2026 18:51:10 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vqFIr-005A3g-0w for pgsql-hackers@lists.postgresql.org; Wed, 11 Feb 2026 18:51:10 +0000 Received: from mail-oo1-xc2d.google.com ([2607:f8b0:4864:20::c2d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vqFIm-00000000CC7-1SMH for pgsql-hackers@lists.postgresql.org; Wed, 11 Feb 2026 18:51:09 +0000 Received: by mail-oo1-xc2d.google.com with SMTP id 006d021491bc7-66f747175d8so1264032eaf.0 for ; Wed, 11 Feb 2026 10:51:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770835861; cv=none; d=google.com; s=arc-20240605; b=EV3/HbGFxU3Zzcb2L65i2d2RKYmYHYGA3aRK0sMnjfvM4Wa0hgs0682TW5ZQ5P3DpC ZcXBQvTJHQkWB6zoC1PDOYw8VAAXgpH5dXXFGaD4URz72rZSFjqCGbkJSS6I3KZwrxf1 r1OZB5nge5E+9FVm1DgkZFmf9iV68E3KZDWEoER31M2my/NXnxpRZrxITxtGMRUqmOjB 1s7LuO5iaL5FMGH8CGW7xOxIug5Ie6bUMqWqCtwTfkvGd0LvZ658Ozwb9+oGReCAlMp8 s+xQgoMQXGAL+uIc7FxRhM9sF3hE1saKM0CSYMB/S46th/cuf6N/cyuAJqVH4MMf2Tmt Rt0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=tYg/Vu9keG4lPDeEh4pE1iXPtzGOCG3twnZVmvQbHOg=; fh=qau0P7ny56wCSSjdZJ6KwctdnQX8zRgSOYLlT23xjRY=; b=gDJwR+RYo86iTBXx8sHvFhB0ftD1Cp3I8UAUZSyUnm9HfYtWyHO67D/qHESr6BonFQ fDW6L+oe2iLlau4wKap/4AUjNx3RVTjuTS3RAlBRupmCPMAjjhwJifpZx5sSSQbyHCI4 +MG9OkY6DJ7jRtSvEkgkpk9q/BiIPF8TYnrVSSZUeq30NSbyRb+0HwTJEiGBqLAlSQno /orJP3xHHVDr89Jhf4nuBw1RMbg8vJmjisw9tssRbaX5Jr0PJKN0lSp+NYwqLcy3AkIT A0jlSZD/ewsy88sLDzMkSJr4Y88RuoRCejEeYaLlHYFMfRZmzYgdTfPF4UEoVQrlfN5D cAgA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20230601.gappssmtp.com; s=20230601; t=1770835861; x=1771440661; 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=tYg/Vu9keG4lPDeEh4pE1iXPtzGOCG3twnZVmvQbHOg=; b=MmtxyodJableQKejnLC97Q8n7FZHSPosNZEj6qwRHpYnMoowenvsFtSHL2p8b7Dx4P KiFf7FetkZjrN7g35m1hqEXj2tgmWT0CYPQmh9qEemYER1T0Ek/RRTNzxVY3fgODAyrT UTCHLX8Kvj83gdLm2yLZxCQmOPe1EveujZPE4MrTT0baf0jruTyeoPyW6/ZwHfA0HCtM jt3vxsMr6KnIwWCVV2UQ6Lk2wQTBrRnOZTYp5k8c8jvclGGcC0evVrdF4j5QifxJIguP lZHuLIzWd6cz4TXOwnreD/t7jgWUoFgAy64jWHEbkyjrubSqbnUwgzvmxRa6a3rw9GXl fDPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770835861; x=1771440661; 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=tYg/Vu9keG4lPDeEh4pE1iXPtzGOCG3twnZVmvQbHOg=; b=fwWwsNYCBZ8lAlnCvQtQVGYdRfzXOhGvd/D6OwyHKWjQ6bZVMukvUc/0j+e270dtO1 Zo9ZwmqogX0L7Ux3uAbF+kZUqy684ZT+vi3bknj1Np1MDxZSjXQOJGgZTuP66JFioldj Pg5RWAhZjDeVqBWwRAM0ETjbCvFgQpOrsudcynsBtb4lGohOIWRZ2wz3GfRMEHO4a2Sv jnSfDctgn/5lbJkEN541vhl6/wnrJ6lf0oVNmSOpiuNQ0xqEHhGzu2PNebizBbg2L/Jd HjrICVKRo8+ljzpZ9ZW5u4pVeif85qOdgc63KJeZbQRr80p6sfGm3mTkh8AyIy6y7otQ gAJw== X-Gm-Message-State: AOJu0YzIkv8F7tjPZ1O9n3sLCdZskvqpBX9BvQvc7v0tmCqhemrfCXTA mgSP3i/t4x11TtzuRpKiYXEANdkaan4blzqh/Gv8uP9+LhPKQS08wDJJsxDZGvRxPN2QGDqr3uW b9Ad9KiUvbPU025cu/A9E+SFAXfPbcAW8Jmc+EpGzDw== X-Gm-Gg: AZuq6aIxNf/8TocXqwsRwQAkl4Seg9Ws1mRs1DhxqHH7QdqwOstzYrGGIiHQxJkusRs b7AkaBua9THMo+DTqvEgrFAx2zDS76xO3ZiKWe4gywNrnDRue5UljygF0IuVwCa8qLCZYeuFEK4 1MjkKFVATNIFDdGxCG2bY9P2pZ+RkfyZWDzCwwl7s4oEU37KmKKH6vxWWbHQzN7jCVNgWYAj0s9 DTPPRyrtOw5pVDTj08zMGAnTg9y9yKX7TIlyMKoyAyNevhw1oVRFNkvwA6QrBTgvxzcJiDcSCdz /b+fmZ10z0vZm5I= X-Received: by 2002:a05:6820:184b:b0:65d:88b:c00d with SMTP id 006d021491bc7-6759b2eda1cmr76956eaf.66.1770835861277; Wed, 11 Feb 2026 10:51:01 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Paul A Jungwirth Date: Wed, 11 Feb 2026 10:50:49 -0800 X-Gm-Features: AZwV_Qg6EZji_bZJKWwFV0ExufB6LcjeYM25M8exKYiUXOjWrj1aaZEjz7lePsM Message-ID: Subject: Re: domain for WITHOUT OVERLAPS To: jian he Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000077fe7c064a90dada" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000077fe7c064a90dada Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Dec 28, 2025 at 11:18=E2=80=AFPM jian he wrote: > > > Is there any performance concern about adding this lookup? > > From what I can tell we don't use TYPECACHE_DOMAIN_BASE_INFO very > > often, so it is probably okay. > > We can get here in the executor from ExecEvalWholeRowVar, but that > > seems acceptable to me. > > > > > hi. > > To make WITHOUT OVERLAPS work with domains, ExecWithoutOverlapsNotEmpty r= equires > the base type=E2=80=99s typtype. I do not see a viable alternative approa= ch. > > We can cache the base type's typtype in TypeCacheEntry->domainBaseTyptype= . Okay. > > > > Also testing a range over a domain (in WITHOUT OVERLAPS position) would= be good. > > > I do not think we need extensive foreign key=E2=80=93related tests, becau= se > check_exclusion_or_unique_constraint is only invoked for data changes on = the > primary key side. So, I kept only a single foreign key=E2=80=93related te= st. The foreign key code also uses the column type, so there are still interesting feature combinations here that should be tested rather than just assuming they work. > The attached patch should address all of your comments. > I think you will like attached regress tests. A lot of the issues I mentioned before don't look addressed to me. What do you think of the v4 patch attached here? It includes a few more FK tests. Some other details I changed: +-- +-- tests for range over domain, multirange over a domain, custom range type over +-- domain, custom multi range type over domain. +-- +CREATE DOMAIN int4_d as integer check (value <> 10); +CREATE TYPE int4_d_range as range (subtype =3D int4_d); +CREATE DOMAIN int4multirange_d as int4multirange check (value <> '{[10,11)= }'); +CREATE DOMAIN int4range_d AS int4range CHECK (VALUE <> '[10,11)'); +CREATE DOMAIN textrange2_d AS textrange2 CHECK (VALUE <> '[c,d)'); +CREATE DOMAIN textrange2_dd AS textrange2_d; +CREATE DOMAIN textmultirange2_d AS textmultirange2 CHECK (VALUE <> '{[c,d)= }'); This comment still doesn't match the types created below it. In my v4 patch I've added a comment before each CREATE TYPE/DOMAIN line. Also let's define these in the same order that we test them below. +-- It is a range type rather than a domain type; however, the range type= =E2=80=99s +-- subtype is a domain type. +CREATE TABLE temporal_rng4 ( + id int4range_d, + valid_at int4_d_range, + CONSTRAINT temporal_rng4_pk PRIMARY KEY(id, valid_at WITHOUT OVERLAPS) +); +INSERT INTO temporal_rng4 VALUES ('[1,2)', '[10,11)'); --error +INSERT INTO temporal_rng4 VALUES ('[10,11)', '[1,2)'); --error +INSERT INTO temporal_rng4 VALUES ('[1,11)', '[9,10)'); --error +INSERT INTO temporal_rng4 VALUES ('[1,2)', '[1,13)'), ('[1,2)', '[2,5)'); --error +DROP TABLE temporal_rng4; We need to test a case that succeeds, not just cases that fail. Also the last case doesn't violate the domain; it just conflicts with a prior row. That's a good test too, but let's clarify. The point is to test WITHOUT OVERLAPS, but several of these lines are testing the id column, not the valid_at column. I made the id columns be just regular int4range. Likewise with the scenarios below. Yours, --=20 Paul ~{:-) pj@illuminatedcomputing.com --00000000000077fe7c064a90dada Content-Type: application/octet-stream; name="v4-0001-Add-support-for-domain-types-in-WITHOUT-OVERLAPS.patch" Content-Disposition: attachment; filename="v4-0001-Add-support-for-domain-types-in-WITHOUT-OVERLAPS.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlidwcf70 RnJvbSA3ZDA1MDRhNDA2NGRmNTgyYjk0MWFhMjUzOTEyMzA2ZjE3MTE0ZmZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMjkgRGVjIDIwMjUgMTU6MTU6MjMgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 XSBBZGQgc3VwcG9ydCBmb3IgZG9tYWluIHR5cGVzIGluIFdJVEhPVVQgT1ZFUkxBUFMKClRoaXMg Y29tbWl0IGFsbG93cyBkb21haW4gdHlwZXMgdG8gd29yayB3aXRoIHRoZSBXSVRIT1VUIE9WRVJM QVBTIGNvbnN0cmFpbnQuCkRvbWFpbnMgb3ZlciByYW5nZSB0eXBlcyBhbmQgZG9tYWlucyBvdmVy IG11bHRpcmFuZ2UgdHlwZXMgYXJlIGJvdGggc3VwcG9ydGVkLgpVc2VyLWRlZmluZWQgcmFuZ2Ug dHlwZXMgd2hvc2Ugc3VidHlwZSBpcyBhIGRvbWFpbiBhcmUgYWxzbyBzdXBwb3J0ZWQuCgpjb21t aXRmZXN0OiBodHRwczovL2NvbW1pdGZlc3QucG9zdGdyZXNxbC5vcmcvcGF0Y2gvNjI4MQpkaXNj dXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBQ0p1ZnhHb0FtTl8waUo9aGpURzB2R3BPU095 eS12WXlmRSstcTBBV3hycTJfcDVYUUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAgICAgICB8ICAxMCArLQogc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlX3V0aWxjbWQuYyAgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3R5cGNhY2hlLmMgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy90 eXBjYWNoZS5oICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIC4uLi9yZWdyZXNzL2V4cGVjdGVk L3dpdGhvdXRfb3ZlcmxhcHMub3V0ICAgICB8IDE3OCArKysrKysrKysrKysrKysrKy0KIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3dpdGhvdXRfb3ZlcmxhcHMuc3FsICAgICB8IDE1MiArKysrKysrKysr KysrKy0KIDYgZmlsZXMgY2hhbmdlZCwgMzQxIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCA2YWUwZjk1OTU5Mi4uZDNlNWVk OTJkMWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC03NTIsMTMgKzc1Miwx OSBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRpb24gaGVhcCwg UmVsYXRpb24gaW5kZXgsCiAKIAkJaWYgKCFpc251bGxbaW5kbmtleWF0dHMgLSAxXSkKIAkJewor CQkJY2hhciAJCXR5cHR5cGU7CiAJCQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3IoaGVhcCk7CiAJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRl c2MsIGF0dG5vIC0gMSk7Ci0JCQlUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUgPSBsb29rdXBfdHlw ZV9jYWNoZShhdHQtPmF0dHR5cGlkLCAwKTsKKwkJCVR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSA9 IGxvb2t1cF90eXBlX2NhY2hlKGF0dC0+YXR0dHlwaWQsIFRZUEVDQUNIRV9ET01BSU5fQkFTRV9J TkZPKTsKKworCQkJaWYgKE9pZElzVmFsaWQodHlwY2FjaGUtPmRvbWFpbkJhc2VUeXBlKSkKKwkJ CQl0eXB0eXBlID0gdHlwY2FjaGUtPmRvbWFpbkJhc2VUeXB0eXBlOworCQkJZWxzZQorCQkJCXR5 cHR5cGUgPSB0eXBjYWNoZS0+dHlwdHlwZTsKIAogCQkJRXhlY1dpdGhvdXRPdmVybGFwc05vdEVt cHR5KGhlYXAsIGF0dC0+YXR0bmFtZSwKIAkJCQkJCQkJCQl2YWx1ZXNbaW5kbmtleWF0dHMgLSAx XSwKLQkJCQkJCQkJCQl0eXBjYWNoZS0+dHlwdHlwZSwgYXR0LT5hdHR0eXBpZCk7CisJCQkJCQkJ CQkJdHlwdHlwZSwgYXR0LT5hdHR0eXBpZCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf dXRpbGNtZC5jCmluZGV4IGI1ZjRjNzI0NTlkLi44ZDVmOWE3ODUyNSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfdXRpbGNtZC5jCkBAIC0yNzk5LDYgKzI3OTksOCBAQCB0cmFuc2Zvcm1JbmRleENvbnN0 cmFpbnQoQ29uc3RyYWludCAqY29uc3RyYWludCwgQ3JlYXRlU3RtdENvbnRleHQgKmN4dCkKIAkJ CQkJaWYgKCFPaWRJc1ZhbGlkKHR5cGlkKSAmJiBjb2x1bW4pCiAJCQkJCQl0eXBpZCA9IHR5cGVu YW1lVHlwZUlkKE5VTEwsIGNvbHVtbi0+dHlwZU5hbWUpOwogCisJCQkJCXR5cGlkID0gZ2V0QmFz ZVR5cGUodHlwaWQpOworCiAJCQkJCWlmICghT2lkSXNWYWxpZCh0eXBpZCkgfHwgISh0eXBlX2lz X3JhbmdlKHR5cGlkKSB8fCB0eXBlX2lzX211bHRpcmFuZ2UodHlwaWQpKSkKIAkJCQkJCWVyZXBv cnQoRVJST1IsCiAJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvdHlwY2FjaGUuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL3R5cGNhY2hlLmMKaW5kZXggZGM0YjFhNTY0MTQuLjVmNGM4YjkwMjI0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS90eXBjYWNoZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2NhY2hlL3R5cGNhY2hlLmMKQEAgLTk0NCw2ICs5NDQsOCBAQCBsb29r dXBfdHlwZV9jYWNoZShPaWQgdHlwZV9pZCwgaW50IGZsYWdzKQogCQl0eXBlbnRyeS0+ZG9tYWlu QmFzZVR5cG1vZCA9IC0xOwogCQl0eXBlbnRyeS0+ZG9tYWluQmFzZVR5cGUgPQogCQkJZ2V0QmFz ZVR5cGVBbmRUeXBtb2QodHlwZV9pZCwgJnR5cGVudHJ5LT5kb21haW5CYXNlVHlwbW9kKTsKKwkJ dHlwZW50cnktPmRvbWFpbkJhc2VUeXB0eXBlID0KKwkJCWdldF90eXB0eXBlKHR5cGVudHJ5LT5k b21haW5CYXNlVHlwZSk7CiAJfQogCWlmICgoZmxhZ3MgJiBUWVBFQ0FDSEVfRE9NQUlOX0NPTlNU Ul9JTkZPKSAmJgogCQkodHlwZW50cnktPmZsYWdzICYgVENGTEFHU19DSEVDS0VEX0RPTUFJTl9D T05TVFJBSU5UUykgPT0gMCAmJgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvdHlwY2Fj aGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3R5cGNhY2hlLmgKaW5kZXggMGUzOTQ1YWEyNDQuLjQw NzA4NjIxYWZlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy90eXBjYWNoZS5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL3R5cGNhY2hlLmgKQEAgLTEwOSwxMSArMTA5LDEyIEBAIHR5cGVk ZWYgc3RydWN0IFR5cGVDYWNoZUVudHJ5CiAJc3RydWN0IFR5cGVDYWNoZUVudHJ5ICpybmd0eXBl OyAvKiBtdWx0aXJhbmdlJ3MgcmFuZ2UgdW5kZXJseWluZyB0eXBlICovCiAKIAkvKgotCSAqIERv bWFpbidzIGJhc2UgdHlwZSBhbmQgdHlwbW9kIGlmIGl0J3MgYSBkb21haW4gdHlwZS4gIFplcm9l cyBpZiBub3QKLQkgKiBkb21haW4sIG9yIGlmIGluZm9ybWF0aW9uIGhhc24ndCBiZWVuIHJlcXVl c3RlZC4KKwkgKiBEb21haW4ncyBiYXNlIHR5cGUsIHR5cG1vZCwgYW5kIHR5cHR5cGUgaWYgaXQn cyBhIGRvbWFpbiB0eXBlLgorCSAqIFplcm9lcyBpZiBub3QgZG9tYWluLCBvciBpZiBpbmZvcm1h dGlvbiBoYXNuJ3QgYmVlbiByZXF1ZXN0ZWQuCiAJICovCiAJT2lkCQkJZG9tYWluQmFzZVR5cGU7 CiAJaW50MzIJCWRvbWFpbkJhc2VUeXBtb2Q7CisJY2hhcgkJZG9tYWluQmFzZVR5cHR5cGU7CiAK IAkvKgogCSAqIERvbWFpbiBjb25zdHJhaW50IGRhdGEgaWYgaXQncyBhIGRvbWFpbiB0eXBlLiAg TlVMTCBpZiBub3QgZG9tYWluLCBvcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC93aXRob3V0X292ZXJsYXBzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2l0 aG91dF9vdmVybGFwcy5vdXQKaW5kZXggMDZmNmZkMmM4YzUuLjBlMThlOWRmYjQ0IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpdGhvdXRfb3ZlcmxhcHMub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2l0aG91dF9vdmVybGFwcy5vdXQKQEAgLTE2Miw3 ICsxNjIsMTc5IEBAIENSRUFURSBUQUJMRSB0ZW1wb3JhbF9ybmczICgKICk7CiBBTFRFUiBUQUJM RSB0ZW1wb3JhbF9ybmczIERST1AgQ09OU1RSQUlOVCB0ZW1wb3JhbF9ybmczX3BrOwogRFJPUCBU QUJMRSB0ZW1wb3JhbF9ybmczOwotRFJPUCBUWVBFIHRleHRyYW5nZTI7CistLQorLS0gdGVzdCBQ UklNQVJZIEtFWSBhbmQgVU5JUVVFIGNvbnN0cmFpbnQgaW50ZXJhY3Rpb24gd2l0aCBkb21haW5z OgorLS0KK0NSRUFURSBET01BSU4gaW50NF9kIGFzIGludGVnZXIgY2hlY2sgKHZhbHVlIDw+IDEw KTsKKy0tIHJhbmdlIG92ZXIgZG9tYWluOgorQ1JFQVRFIFRZUEUgaW50NF9kX3JhbmdlIGFzIHJh bmdlIChzdWJ0eXBlID0gaW50NF9kKTsKKy0tIGRvbWFpbiBvdmVyIGJ1aWx0LWluIHJhbmdlOgor Q1JFQVRFIERPTUFJTiBpbnQ0cmFuZ2VfZCBBUyBpbnQ0cmFuZ2UgQ0hFQ0sgKFZBTFVFIDw+ICdb MTAsMTEpJyk7CistLSBkb21haW4gb3ZlciBjdXN0b20gcmFuZ2UgKG5vdCB0ZXN0ZWQgZGlyZWN0 bHkpOgorQ1JFQVRFIERPTUFJTiB0ZXh0cmFuZ2UyX2QgQVMgdGV4dHJhbmdlMiBDSEVDSyAoVkFM VUUgPD4gJ1tjLGQpJyk7CistLSBkb21haW4gb3ZlciBkb21haW4gb3ZlciBjdXN0b20gcmFuZ2U6 CitDUkVBVEUgRE9NQUlOIHRleHRyYW5nZTJfZGQgQVMgdGV4dHJhbmdlMl9kOworLS0gZG9tYWlu IG92ZXIgYnVpbHQtaW4gbXVsdGlyYW5nZToKK0NSRUFURSBET01BSU4gaW50NG11bHRpcmFuZ2Vf ZCBhcyBpbnQ0bXVsdGlyYW5nZSBjaGVjayAodmFsdWUgPD4gJ3tbMTAsMTEpfScpOworLS0gZG9t YWluIG92ZXIgY3VzdG9tIG11bHRpcmFuZ2U6CitDUkVBVEUgRE9NQUlOIHRleHRtdWx0aXJhbmdl Ml9kIEFTIHRleHRtdWx0aXJhbmdlMiBDSEVDSyAoVkFMVUUgPD4gJ3tbYyxkKX0nKTsKKy0tIFdl IGFsc28gdGVzdCBhIG11bHRpcmFuZ2Ugb3ZlciBhIGRvbWFpbiBzdWJ0eXBlIChiZWxvdykuCist LSBXZSBjYW4ndCB0ZXN0IGEgbXVsdGlyYW5nZSB3aG9zZSByYW5nZXR5cGUgaXMgYSBkb21haW4s CistLSBiZWNhdXNlIGRlZmluaW5nIGEgZG9tYWluIG9uIGEgcmFuZ2V0eXBlIGRvZXNuJ3QgY3Jl YXRlIGEgbmV3IG11bHRpcmFuZ2V0eXBlCistLSAob3IgbmV3IHJhbmdlIGNvbnN0cnVjdG9ycywg cGdfcmFuZ2UgZW50cnksIGV0Yy4pLgorLS0gVGhlIHJhbmdlJ3Mgc3VidHlwZSBpcyBhIGRvbWFp bjoKK0NSRUFURSBUQUJMRSB0ZW1wb3JhbF9ybmc0ICgKKyAgaWQgaW50NHJhbmdlLAorICB2YWxp ZF9hdCBpbnQ0X2RfcmFuZ2UsCisgIENPTlNUUkFJTlQgdGVtcG9yYWxfcm5nNF9wayBQUklNQVJZ IEtFWShpZCwgdmFsaWRfYXQgV0lUSE9VVCBPVkVSTEFQUykKKyk7CitJTlNFUlQgSU5UTyB0ZW1w b3JhbF9ybmc0IFZBTFVFUyAoJ1sxLDExKScsICdbOSwxMCknKTsgLS0gc3RhcnQgYm91bmQgdmlv bGF0ZXMgZG9tYWluCitFUlJPUjogIHZhbHVlIGZvciBkb21haW4gaW50NF9kIHZpb2xhdGVzIGNo ZWNrIGNvbnN0cmFpbnQgImludDRfZF9jaGVjayIKK0xJTkUgMTogSU5TRVJUIElOVE8gdGVtcG9y YWxfcm5nNCBWQUxVRVMgKCdbMSwxMSknLCAnWzksMTApJyk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorSU5TRVJUIElOVE8gdGVtcG9yYWxf cm5nNCBWQUxVRVMgKCdbMSwyKScsICdbMTAsMTEpJyk7IC0tIGVuZCBib3VuZCB2aW9sYXRlcyBk b21haW4KK0VSUk9SOiAgdmFsdWUgZm9yIGRvbWFpbiBpbnQ0X2QgdmlvbGF0ZXMgY2hlY2sgY29u c3RyYWludCAiaW50NF9kX2NoZWNrIgorTElORSAxOiBJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0 IFZBTFVFUyAoJ1sxLDIpJywgJ1sxMCwxMSknKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFM VUVTICgnWzEsMiknLCAnWzEsMTMpJyksICgnWzEsMiknLCAnWzIsNSknKTsgLS0gbm90IHVuaXF1 ZQorRVJST1I6ICBjb25mbGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMgZXhjbHVzaW9uIGNvbnN0 cmFpbnQgInRlbXBvcmFsX3JuZzRfcGsiCitERVRBSUw6ICBLZXkgKGlkLCB2YWxpZF9hdCk9KFsx LDIpLCBbMiw1KSkgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcga2V5IChpZCwgdmFsaWRfYXQpPShb MSwyKSwgWzEsMTMpKS4KK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEsMikn LCAnWzEsMTMpJyksICgnWzEsMiknLCAnWzIwLDIzKScpOyAtLSBva2F5CitJTlNFUlQgSU5UTyB0 ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sxLDIpJywgJ1szMCwpJyk7IC0tIG51bGwgYm91bmQgaXMg b2theQorRFJPUCBUQUJMRSB0ZW1wb3JhbF9ybmc0OworLS0gVGhlIGRvbWFpbiBpcyBvdmVyIGEg YnVpbHQtaW4gcmFuZ2UgdHlwZToKK0NSRUFURSBUQUJMRSB0ZW1wb3JhbF9ybmc0ICgKKyAgaWQg aW50NHJhbmdlLAorICB2YWxpZF9hdCBpbnQ0cmFuZ2VfZCwKKyAgQ09OU1RSQUlOVCB0ZW1wb3Jh bF9ybmc0X3BrIFVOSVFVRSAoaWQsIHZhbGlkX2F0IFdJVEhPVVQgT1ZFUkxBUFMpCispOworSU5T RVJUIElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdbMSwyKScsICdbMTAsMTEpJyk7IC0tIHZp b2xhdGVzIGRvbWFpbgorRVJST1I6ICB2YWx1ZSBmb3IgZG9tYWluIGludDRyYW5nZV9kIHZpb2xh dGVzIGNoZWNrIGNvbnN0cmFpbnQgImludDRyYW5nZV9kX2NoZWNrIgorSU5TRVJUIElOVE8gdGVt cG9yYWxfcm5nNCBWQUxVRVMgKCdbMSwyKScsICdbMSwxMyknKSwgKCdbMSwyKScsICdbMiwxMykn KTsgLS0gbm90IHVuaXF1ZQorRVJST1I6ICBjb25mbGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMg ZXhjbHVzaW9uIGNvbnN0cmFpbnQgInRlbXBvcmFsX3JuZzRfcGsiCitERVRBSUw6ICBLZXkgKGlk LCB2YWxpZF9hdCk9KFsxLDIpLCBbMiwxMykpIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGtleSAo aWQsIHZhbGlkX2F0KT0oWzEsMiksIFsxLDEzKSkuCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0 IFZBTFVFUyAoJ1sxLDIpJywgJ1sxLDEzKScpLCAoJ1sxLDIpJywgJ1syMCwyMyknKTsgLS0gb2th eQorRFJPUCBUQUJMRSB0ZW1wb3JhbF9ybmc0OworLS0gVGhlIGRvbWFpbiBpcyBvdmVyIGFub3Ro ZXIgZG9tYWluIHdoaWNoIGlzIG92ZXIgYSB1c2VyLWRlZmluZWQgcmFuZ2UgdHlwZToKK0NSRUFU RSBUQUJMRSB0ZW1wb3JhbF9ybmc0ICgKKyAgaWQgaW50NHJhbmdlLAorICB2YWxpZF9hdCB0ZXh0 cmFuZ2UyX2RkLAorICBDT05TVFJBSU5UIHRlbXBvcmFsX3JuZzRfcGsgVU5JUVVFIChpZCwgdmFs aWRfYXQgV0lUSE9VVCBPVkVSTEFQUykKKyk7CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZB TFVFUyAoJ1sxLDIpJywgTlVMTCksIChOVUxMLCAnWzEsMiknKTsKK0lOU0VSVCBJTlRPIHRlbXBv cmFsX3JuZzQgVkFMVUVTICgnWzEsMiknLCAnW2MsZCknKTsgLS0gdmlvbGF0ZXMgZG9tYWluCitF UlJPUjogIHZhbHVlIGZvciBkb21haW4gdGV4dHJhbmdlMl9kZCB2aW9sYXRlcyBjaGVjayBjb25z dHJhaW50ICJ0ZXh0cmFuZ2UyX2RfY2hlY2siCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZB TFVFUyAoJ1sxLDIpJywgJ1thLGQpJyk7IC0tIG9rYXkKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3Ju ZzQgVkFMVUVTICgnWzEsMiknLCAnW2IsYyknKTsgLS0gbm90IHVuaXF1ZQorRVJST1I6ICBjb25m bGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMgZXhjbHVzaW9uIGNvbnN0cmFpbnQgInRlbXBvcmFs X3JuZzRfcGsiCitERVRBSUw6ICBLZXkgKGlkLCB2YWxpZF9hdCk9KFsxLDIpLCBbYixjKSkgY29u ZmxpY3RzIHdpdGggZXhpc3Rpbmcga2V5IChpZCwgdmFsaWRfYXQpPShbMSwyKSwgW2EsZCkpLgor SU5TRVJUIElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdbMiwzKScsICdbQixDKScpLCAoJ1sy LDMpJywgJ1tBLEMpJyk7IC0tIG5vdCB1bmlxdWUKK0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZh bHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBjb25zdHJhaW50ICJ0ZW1wb3JhbF9ybmc0X3BrIgorREVU QUlMOiAgS2V5IChpZCwgdmFsaWRfYXQpPShbMiwzKSwgW0EsQykpIGNvbmZsaWN0cyB3aXRoIGV4 aXN0aW5nIGtleSAoaWQsIHZhbGlkX2F0KT0oWzIsMyksIFtCLEMpKS4KKy0tIEl0IGlzIGEgbXVs dGlyYW5nZSB0eXBlIHJhdGhlciB0aGFuIGEgZG9tYWluIHR5cGU7IGhvd2V2ZXIsIHRoZSBtdWx0 aXJhbmdlCistLSB0eXBl4oCZcyBzdWJ0eXBlIGlzIGEgZG9tYWluIHR5cGUuCitDUkVBVEUgVEFC TEUgdGVtcG9yYWxfbWx0cm5nNCAoCisgIGlkICBpbnQ0cmFuZ2UsCisgIHZhbGlkX2F0IGludDRf ZF9tdWx0aXJhbmdlLAorICBDT05TVFJBSU5UIHRlbXBvcmFsX21sdHJuZzRfcGsgUFJJTUFSWSBL RVkgKGlkLCB2YWxpZF9hdCBXSVRIT1VUIE9WRVJMQVBTKQorKTsKK0lOU0VSVCBJTlRPIHRlbXBv cmFsX21sdHJuZzQgVkFMVUVTICgnWzEsMiknLCAne1sxMCwxMSl9Jyk7IC0tIHZpb2xhdGVzIGRv bWFpbgorRVJST1I6ICB2YWx1ZSBmb3IgZG9tYWluIGludDRfZCB2aW9sYXRlcyBjaGVjayBjb25z dHJhaW50ICJpbnQ0X2RfY2hlY2siCitMSU5FIDE6IElOU0VSVCBJTlRPIHRlbXBvcmFsX21sdHJu ZzQgVkFMVUVTICgnWzEsMiknLCAne1sxMCwxMSl9Jyk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9t bHRybmc0IFZBTFVFUyAoJ1sxLDIpJywgJ3tbMSwxMyl9JyksICgnWzEsMiknLCAne1syLDEzKX0n KTsgLS0gbm90IHVuaXF1ZQorRVJST1I6ICBjb25mbGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMg ZXhjbHVzaW9uIGNvbnN0cmFpbnQgInRlbXBvcmFsX21sdHJuZzRfcGsiCitERVRBSUw6ICBLZXkg KGlkLCB2YWxpZF9hdCk9KFsxLDIpLCB7WzIsMTMpfSkgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcg a2V5IChpZCwgdmFsaWRfYXQpPShbMSwyKSwge1sxLDEzKX0pLgorSU5TRVJUIElOVE8gdGVtcG9y YWxfbWx0cm5nNCBWQUxVRVMgKCdbMSwyKScsICd7WzEsMTMpfScpLCAoJ1sxLDIpJywgJ3tbMjAs MjMpfScpOyAtLSBva2F5CitEUk9QIFRBQkxFIHRlbXBvcmFsX21sdHJuZzQ7CistLSBUaGUgZG9t YWluIGlzIG92ZXIgYSBidWlsdC1pbiBtdWx0aXJhbmdlIHR5cGUuCitDUkVBVEUgVEFCTEUgdGVt cG9yYWxfbWx0cm5nNCAoCisgIGlkICBpbnQ0cmFuZ2UsCisgIHZhbGlkX2F0IGludDRtdWx0aXJh bmdlX2QsCisgIENPTlNUUkFJTlQgdGVtcG9yYWxfbWx0cm5nNF9wayBQUklNQVJZIEtFWSAoaWQs IHZhbGlkX2F0IFdJVEhPVVQgT1ZFUkxBUFMpCispOworSU5TRVJUIElOVE8gdGVtcG9yYWxfbWx0 cm5nNCBWQUxVRVMgKCdbMSwyKScsICd7WzEwLDExKX0nKTsgLS0gdmlvbGF0ZXMgZG9tYWluCitF UlJPUjogIHZhbHVlIGZvciBkb21haW4gaW50NG11bHRpcmFuZ2VfZCB2aW9sYXRlcyBjaGVjayBj b25zdHJhaW50ICJpbnQ0bXVsdGlyYW5nZV9kX2NoZWNrIgorSU5TRVJUIElOVE8gdGVtcG9yYWxf bWx0cm5nNCBWQUxVRVMgKCdbMSwyKScsICd7WzEsMTMpfScpLCAoJ1sxLDIpJywgJ3tbMiwxMyl9 Jyk7IC0tIG5vdCB1bmlxdWUKK0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVz IGV4Y2x1c2lvbiBjb25zdHJhaW50ICJ0ZW1wb3JhbF9tbHRybmc0X3BrIgorREVUQUlMOiAgS2V5 IChpZCwgdmFsaWRfYXQpPShbMSwyKSwge1syLDEzKX0pIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5n IGtleSAoaWQsIHZhbGlkX2F0KT0oWzEsMiksIHtbMSwxMyl9KS4KK0lOU0VSVCBJTlRPIHRlbXBv cmFsX21sdHJuZzQgVkFMVUVTICgnWzEsMiknLCAne1sxLDEzKX0nKSwgKCdbMSwyKScsICd7WzIw LDIzKX0nKTsgLS0gb2theQorRFJPUCBUQUJMRSB0ZW1wb3JhbF9tbHRybmc0OworLS0gVGhlIGRv bWFpbiBpcyBvdmVyIGEgdXNlci1kZWZpbmVkIG11bHRpcmFuZ2UgdHlwZS4KK0NSRUFURSBUQUJM RSB0ZW1wb3JhbF9tbHRybmc0ICgKKyAgaWQgaW50NHJhbmdlLAorICB2YWxpZF9hdCB0ZXh0bXVs dGlyYW5nZTJfZCwKKyAgQ09OU1RSQUlOVCB0ZW1wb3JhbF9tbHRybmc0X3BrIFBSSU1BUlkgS0VZ IChpZCwgdmFsaWRfYXQgV0lUSE9VVCBPVkVSTEFQUykKKyk7CitJTlNFUlQgSU5UTyB0ZW1wb3Jh bF9tbHRybmc0IFZBTFVFUyAoJ1sxLDIpJywgJ3tbYyxkKX0nKTsgLS0gdmlvbGF0ZXMgZG9tYWlu CitFUlJPUjogIHZhbHVlIGZvciBkb21haW4gdGV4dG11bHRpcmFuZ2UyX2QgdmlvbGF0ZXMgY2hl Y2sgY29uc3RyYWludCAidGV4dG11bHRpcmFuZ2UyX2RfY2hlY2siCitJTlNFUlQgSU5UTyB0ZW1w b3JhbF9tbHRybmc0IFZBTFVFUyAoJ1sxLDIpJywgJ3tbYSxnKX0nKTsgLS0gb2theQorSU5TRVJU IElOVE8gdGVtcG9yYWxfbWx0cm5nNCBWQUxVRVMgKCdbMSwyKScsICd7W2IsYyl9Jyk7IC0tIG5v dCB1bmlxdWUKK0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lv biBjb25zdHJhaW50ICJ0ZW1wb3JhbF9tbHRybmc0X3BrIgorREVUQUlMOiAgS2V5IChpZCwgdmFs aWRfYXQpPShbMSwyKSwge1tiLGMpfSkgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcga2V5IChpZCwg dmFsaWRfYXQpPShbMSwyKSwge1thLGcpfSkuCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9tbHRybmc0 IFZBTFVFUyAoJ1syLDMpJywgJ3tbQixDKX0nKSwgKCdbMiwzKScsICd7W0EsQyl9Jyk7IC0tIG5v dCB1bmlxdWUKK0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lv biBjb25zdHJhaW50ICJ0ZW1wb3JhbF9tbHRybmc0X3BrIgorREVUQUlMOiAgS2V5IChpZCwgdmFs aWRfYXQpPShbMiwzKSwge1tBLEMpfSkgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcga2V5IChpZCwg dmFsaWRfYXQpPShbMiwzKSwge1tCLEMpfSkuCistLSB0ZXN0IGZvcmVpZ24ga2V5IGludGVyYWN0 aW9ucyB3aXRoIGRvbWFpbnM6CistLSBkb21haW4gcmVmZXJlbmNlcyBkb21haW46CitVUERBVEUg dGVtcG9yYWxfbWx0cm5nNCBTRVQgdmFsaWRfYXQgPSAne1thLGcpfSc7IC0tIHJlc2V0CitDUkVB VEUgVEFCTEUgdGVtcG9yYWxfbWx0cm5nZmsgKAorICBwYXJlbnRfaWQgaW50NHJhbmdlLAorICBp ZCBpbnQ0cmFuZ2UsCisgIHZhbGlkX2F0IHRleHRtdWx0aXJhbmdlMl9kLAorICBDT05TVFJBSU5U IHRlbXBvcmFsX21sdHJuZ2ZrX2ZrCisgICAgRk9SRUlHTiBLRVkgKHBhcmVudF9pZCwgUEVSSU9E IHZhbGlkX2F0KQorICAgIFJFRkVSRU5DRVMgdGVtcG9yYWxfbWx0cm5nNAorKTsKK0lOU0VSVCBJ TlRPIHRlbXBvcmFsX21sdHJuZ2ZrIFZBTFVFUyAoJ1sxLDIpJywgJ1syLDMpJywgJ3tbZCxlKX0n KTsKK1VQREFURSB0ZW1wb3JhbF9tbHRybmc0IFNFVCB2YWxpZF9hdCA9ICd7W2MsZCl9JzsgLS0g dmlvbGF0ZXMgZG9tYWluCitFUlJPUjogIHZhbHVlIGZvciBkb21haW4gdGV4dG11bHRpcmFuZ2Uy X2QgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidGV4dG11bHRpcmFuZ2UyX2RfY2hlY2siCitV UERBVEUgdGVtcG9yYWxfbWx0cm5nNCBTRVQgdmFsaWRfYXQgPSAne1thLGgpfSc7IC0tIG9rYXkK K1VQREFURSB0ZW1wb3JhbF9tbHRybmc0IFNFVCB2YWxpZF9hdCA9ICd7W2YsZyl9JzsgLS0gdmlv bGF0ZXMgcmVmZXJlbmNlCitFUlJPUjogIHVwZGF0ZSBvciBkZWxldGUgb24gdGFibGUgInRlbXBv cmFsX21sdHJuZzQiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgInRlbXBvcmFsX21s dHJuZ2ZrX2ZrIiBvbiB0YWJsZSAidGVtcG9yYWxfbWx0cm5nZmsiCitERVRBSUw6ICBLZXkgKGlk LCB2YWxpZF9hdCk9KFsxLDIpLCB7W2EsaCl9KSBpcyBzdGlsbCByZWZlcmVuY2VkIGZyb20gdGFi bGUgInRlbXBvcmFsX21sdHJuZ2ZrIi4KK0RST1AgVEFCTEUgdGVtcG9yYWxfbWx0cm5nZms7Cist LSBub24tZG9tYWluIHJlZmVyZW5jZXMgZG9tYWluOgorVVBEQVRFIHRlbXBvcmFsX21sdHJuZzQg U0VUIHZhbGlkX2F0ID0gJ3tbYSxnKX0nOyAtLSByZXNldAorQ1JFQVRFIFRBQkxFIHRlbXBvcmFs X21sdHJuZ2ZrICgKKyAgcGFyZW50X2lkIGludDRyYW5nZSwKKyAgaWQgaW50NHJhbmdlLAorICB2 YWxpZF9hdCB0ZXh0bXVsdGlyYW5nZTIsCisgIENPTlNUUkFJTlQgdGVtcG9yYWxfbWx0cm5nZmtf ZmsKKyAgICBGT1JFSUdOIEtFWSAocGFyZW50X2lkLCBQRVJJT0QgdmFsaWRfYXQpCisgICAgUkVG RVJFTkNFUyB0ZW1wb3JhbF9tbHRybmc0CispOworSU5TRVJUIElOVE8gdGVtcG9yYWxfbWx0cm5n ZmsgVkFMVUVTICgnWzEsMiknLCAnWzIsMyknLCAne1tkLGUpfScpOworVVBEQVRFIHRlbXBvcmFs X21sdHJuZzQgU0VUIHZhbGlkX2F0ID0gJ3tbYyxkKX0nOyAtLSB2aW9sYXRlcyBkb21haW4KK0VS Uk9SOiAgdmFsdWUgZm9yIGRvbWFpbiB0ZXh0bXVsdGlyYW5nZTJfZCB2aW9sYXRlcyBjaGVjayBj b25zdHJhaW50ICJ0ZXh0bXVsdGlyYW5nZTJfZF9jaGVjayIKK1VQREFURSB0ZW1wb3JhbF9tbHRy bmc0IFNFVCB2YWxpZF9hdCA9ICd7W2EsaCl9JzsgLS0gb2theQorVVBEQVRFIHRlbXBvcmFsX21s dHJuZzQgU0VUIHZhbGlkX2F0ID0gJ3tbZixnKX0nOyAtLSB2aW9sYXRlcyByZWZlcmVuY2UKK0VS Uk9SOiAgdXBkYXRlIG9yIGRlbGV0ZSBvbiB0YWJsZSAidGVtcG9yYWxfbWx0cm5nNCIgdmlvbGF0 ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAidGVtcG9yYWxfbWx0cm5nZmtfZmsiIG9uIHRhYmxl ICJ0ZW1wb3JhbF9tbHRybmdmayIKK0RFVEFJTDogIEtleSAoaWQsIHZhbGlkX2F0KT0oWzEsMiks IHtbYSxoKX0pIGlzIHN0aWxsIHJlZmVyZW5jZWQgZnJvbSB0YWJsZSAidGVtcG9yYWxfbWx0cm5n ZmsiLgorRFJPUCBUQUJMRSB0ZW1wb3JhbF9tbHRybmdmazsKKy0tIGRvbWFpbiByZWZlcmVuY2Vz IG5vbi1kb21haW46CitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfbWx0cm5nMyAoCisgIGlkIGludDRy YW5nZSwKKyAgdmFsaWRfYXQgdGV4dG11bHRpcmFuZ2UyCispOworSU5TRVJUIElOVE8gdGVtcG9y YWxfbWx0cm5nMyBWQUxVRVMgKCdbMSwyKScsICd7W2EsZyl9Jyk7CitDUkVBVEUgVEFCTEUgdGVt cG9yYWxfbWx0cm5nZmsgKAorICBpZCBpbnQ0cmFuZ2UsCisgIHBhcmVudF9pZCBpbnQ0cmFuZ2Us CisgIHZhbGlkX2F0IHRleHRtdWx0aXJhbmdlMl9kLAorICBDT05TVFJBSU5UIHRlbXBvcmFsX21s dHJuZ2ZrX2ZrCisgICAgRk9SRUlHTiBLRVkgKHBhcmVudF9pZCwgUEVSSU9EIHZhbGlkX2F0KQor ICAgIFJFRkVSRU5DRVMgdGVtcG9yYWxfbWx0cm5nNAorKTsKK0lOU0VSVCBJTlRPIHRlbXBvcmFs X21sdHJuZ2ZrIFZBTFVFUyAoJ1sxLDIpJywgJ1sxLDIpJywgJ3tbZCxlKX0nKTsKK1VQREFURSB0 ZW1wb3JhbF9tbHRybmc0IFNFVCB2YWxpZF9hdCA9ICd7W2MsZCl9JzsgLS0gdmlvbGF0ZXMgZG9t YWluCitFUlJPUjogIHZhbHVlIGZvciBkb21haW4gdGV4dG11bHRpcmFuZ2UyX2QgdmlvbGF0ZXMg Y2hlY2sgY29uc3RyYWludCAidGV4dG11bHRpcmFuZ2UyX2RfY2hlY2siCitVUERBVEUgdGVtcG9y YWxfbWx0cm5nNCBTRVQgdmFsaWRfYXQgPSAne1thLGgpfSc7IC0tIG9rYXkKK1VQREFURSB0ZW1w b3JhbF9tbHRybmc0IFNFVCB2YWxpZF9hdCA9ICd7W2YsZyl9JzsgLS0gdmlvbGF0ZXMgcmVmZXJl bmNlCitFUlJPUjogIHVwZGF0ZSBvciBkZWxldGUgb24gdGFibGUgInRlbXBvcmFsX21sdHJuZzQi IHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgInRlbXBvcmFsX21sdHJuZ2ZrX2ZrIiBv biB0YWJsZSAidGVtcG9yYWxfbWx0cm5nZmsiCitERVRBSUw6ICBLZXkgKGlkLCB2YWxpZF9hdCk9 KFsxLDIpLCB7W2EsaCl9KSBpcyBzdGlsbCByZWZlcmVuY2VkIGZyb20gdGFibGUgInRlbXBvcmFs X21sdHJuZ2ZrIi4KK0RST1AgVEFCTEUgdGVtcG9yYWxfbWx0cm5nMywgdGVtcG9yYWxfbWx0cm5n Zms7CitEUk9QIFRBQkxFIHRlbXBvcmFsX21sdHJuZzQsIHRlbXBvcmFsX3JuZzQ7CiAtLSBQSyB3 aXRoIG9uZSBjb2x1bW4gcGx1cyBhIG11bHRpcmFuZ2U6CiBDUkVBVEUgVEFCTEUgdGVtcG9yYWxf bWx0cm5nICgKICAgaWQgaW50NHJhbmdlLApAQCAtMzAxLDcgKzQ3Myw2IEBAIFNFTEVDVCBwZ19n ZXRfaW5kZXhkZWYoY29uaW5kaWQsIDAsIHRydWUpIEZST00gcGdfY29uc3RyYWludCBXSEVSRSBj b25uYW1lID0gJ3RlCiAKIERST1AgVEFCTEUgdGVtcG9yYWxfcm5nMzsKIC0tIFVOSVFVRSB3aXRo IGEgY3VzdG9tIHJhbmdlIHR5cGU6Ci1DUkVBVEUgVFlQRSB0ZXh0cmFuZ2UyIEFTIHJhbmdlIChz dWJ0eXBlPXRleHQsIGNvbGxhdGlvbj0iQyIpOwogQ1JFQVRFIFRBQkxFIHRlbXBvcmFsX3JuZzMg KAogICBpZCBpbnQ0cmFuZ2UsCiAgIHZhbGlkX2F0IHRleHRyYW5nZTIsCkBAIC0zMDksNiArNDgw LDkgQEAgQ1JFQVRFIFRBQkxFIHRlbXBvcmFsX3JuZzMgKAogKTsKIEFMVEVSIFRBQkxFIHRlbXBv cmFsX3JuZzMgRFJPUCBDT05TVFJBSU5UIHRlbXBvcmFsX3JuZzNfdXE7CiBEUk9QIFRBQkxFIHRl bXBvcmFsX3JuZzM7CitEUk9QIFRZUEUgaW50NF9kX3JhbmdlOworRFJPUCBET01BSU4gaW50NHJh bmdlX2QsIHRleHRyYW5nZTJfZGQsIHRleHRyYW5nZTJfZCwKKyAgICAgICAgICAgIHRleHRtdWx0 aXJhbmdlMl9kLCBpbnQ0bXVsdGlyYW5nZV9kLCBpbnQ0X2Q7CiBEUk9QIFRZUEUgdGV4dHJhbmdl MjsKIC0tCiAtLSB0ZXN0IEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC93aXRob3V0X292ZXJsYXBzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3dpdGhvdXRfb3ZlcmxhcHMuc3FsCmluZGV4IDc3YmU2OTUzNTc1Li5jMzBjZWYxY2Yy ZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2l0aG91dF9vdmVybGFwcy5zcWwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2l0aG91dF9vdmVybGFwcy5zcWwKQEAgLTEwMCw3 ICsxMDAsMTUzIEBAIENSRUFURSBUQUJMRSB0ZW1wb3JhbF9ybmczICgKICk7CiBBTFRFUiBUQUJM RSB0ZW1wb3JhbF9ybmczIERST1AgQ09OU1RSQUlOVCB0ZW1wb3JhbF9ybmczX3BrOwogRFJPUCBU QUJMRSB0ZW1wb3JhbF9ybmczOwotRFJPUCBUWVBFIHRleHRyYW5nZTI7CisKKy0tCistLSB0ZXN0 IFBSSU1BUlkgS0VZIGFuZCBVTklRVUUgY29uc3RyYWludCBpbnRlcmFjdGlvbiB3aXRoIGRvbWFp bnM6CistLQorQ1JFQVRFIERPTUFJTiBpbnQ0X2QgYXMgaW50ZWdlciBjaGVjayAodmFsdWUgPD4g MTApOworLS0gcmFuZ2Ugb3ZlciBkb21haW46CitDUkVBVEUgVFlQRSBpbnQ0X2RfcmFuZ2UgYXMg cmFuZ2UgKHN1YnR5cGUgPSBpbnQ0X2QpOworLS0gZG9tYWluIG92ZXIgYnVpbHQtaW4gcmFuZ2U6 CitDUkVBVEUgRE9NQUlOIGludDRyYW5nZV9kIEFTIGludDRyYW5nZSBDSEVDSyAoVkFMVUUgPD4g J1sxMCwxMSknKTsKKy0tIGRvbWFpbiBvdmVyIGN1c3RvbSByYW5nZSAobm90IHRlc3RlZCBkaXJl Y3RseSk6CitDUkVBVEUgRE9NQUlOIHRleHRyYW5nZTJfZCBBUyB0ZXh0cmFuZ2UyIENIRUNLIChW QUxVRSA8PiAnW2MsZCknKTsKKy0tIGRvbWFpbiBvdmVyIGRvbWFpbiBvdmVyIGN1c3RvbSByYW5n ZToKK0NSRUFURSBET01BSU4gdGV4dHJhbmdlMl9kZCBBUyB0ZXh0cmFuZ2UyX2Q7CistLSBkb21h aW4gb3ZlciBidWlsdC1pbiBtdWx0aXJhbmdlOgorQ1JFQVRFIERPTUFJTiBpbnQ0bXVsdGlyYW5n ZV9kIGFzIGludDRtdWx0aXJhbmdlIGNoZWNrICh2YWx1ZSA8PiAne1sxMCwxMSl9Jyk7CistLSBk b21haW4gb3ZlciBjdXN0b20gbXVsdGlyYW5nZToKK0NSRUFURSBET01BSU4gdGV4dG11bHRpcmFu Z2UyX2QgQVMgdGV4dG11bHRpcmFuZ2UyIENIRUNLIChWQUxVRSA8PiAne1tjLGQpfScpOworLS0g V2UgYWxzbyB0ZXN0IGEgbXVsdGlyYW5nZSBvdmVyIGEgZG9tYWluIHN1YnR5cGUgKGJlbG93KS4K Ky0tIFdlIGNhbid0IHRlc3QgYSBtdWx0aXJhbmdlIHdob3NlIHJhbmdldHlwZSBpcyBhIGRvbWFp biwKKy0tIGJlY2F1c2UgZGVmaW5pbmcgYSBkb21haW4gb24gYSByYW5nZXR5cGUgZG9lc24ndCBj cmVhdGUgYSBuZXcgbXVsdGlyYW5nZXR5cGUKKy0tIChvciBuZXcgcmFuZ2UgY29uc3RydWN0b3Jz LCBwZ19yYW5nZSBlbnRyeSwgZXRjLikuCisKKy0tIFRoZSByYW5nZSdzIHN1YnR5cGUgaXMgYSBk b21haW46CitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcm5nNCAoCisgIGlkIGludDRyYW5nZSwKKyAg dmFsaWRfYXQgaW50NF9kX3JhbmdlLAorICBDT05TVFJBSU5UIHRlbXBvcmFsX3JuZzRfcGsgUFJJ TUFSWSBLRVkoaWQsIHZhbGlkX2F0IFdJVEhPVVQgT1ZFUkxBUFMpCispOworSU5TRVJUIElOVE8g dGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdbMSwxMSknLCAnWzksMTApJyk7IC0tIHN0YXJ0IGJvdW5k IHZpb2xhdGVzIGRvbWFpbgorSU5TRVJUIElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdbMSwy KScsICdbMTAsMTEpJyk7IC0tIGVuZCBib3VuZCB2aW9sYXRlcyBkb21haW4KK0lOU0VSVCBJTlRP IHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEsMiknLCAnWzEsMTMpJyksICgnWzEsMiknLCAnWzIs NSknKTsgLS0gbm90IHVuaXF1ZQorSU5TRVJUIElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdb MSwyKScsICdbMSwxMyknKSwgKCdbMSwyKScsICdbMjAsMjMpJyk7IC0tIG9rYXkKK0lOU0VSVCBJ TlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEsMiknLCAnWzMwLCknKTsgLS0gbnVsbCBib3Vu ZCBpcyBva2F5CitEUk9QIFRBQkxFIHRlbXBvcmFsX3JuZzQ7CisKKy0tIFRoZSBkb21haW4gaXMg b3ZlciBhIGJ1aWx0LWluIHJhbmdlIHR5cGU6CitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcm5nNCAo CisgIGlkIGludDRyYW5nZSwKKyAgdmFsaWRfYXQgaW50NHJhbmdlX2QsCisgIENPTlNUUkFJTlQg dGVtcG9yYWxfcm5nNF9wayBVTklRVUUgKGlkLCB2YWxpZF9hdCBXSVRIT1VUIE9WRVJMQVBTKQor KTsKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEsMiknLCAnWzEwLDExKScp OyAtLSB2aW9sYXRlcyBkb21haW4KK0lOU0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgn WzEsMiknLCAnWzEsMTMpJyksICgnWzEsMiknLCAnWzIsMTMpJyk7IC0tIG5vdCB1bmlxdWUKK0lO U0VSVCBJTlRPIHRlbXBvcmFsX3JuZzQgVkFMVUVTICgnWzEsMiknLCAnWzEsMTMpJyksICgnWzEs MiknLCAnWzIwLDIzKScpOyAtLSBva2F5CitEUk9QIFRBQkxFIHRlbXBvcmFsX3JuZzQ7CisKKy0t IFRoZSBkb21haW4gaXMgb3ZlciBhbm90aGVyIGRvbWFpbiB3aGljaCBpcyBvdmVyIGEgdXNlci1k ZWZpbmVkIHJhbmdlIHR5cGU6CitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcm5nNCAoCisgIGlkIGlu dDRyYW5nZSwKKyAgdmFsaWRfYXQgdGV4dHJhbmdlMl9kZCwKKyAgQ09OU1RSQUlOVCB0ZW1wb3Jh bF9ybmc0X3BrIFVOSVFVRSAoaWQsIHZhbGlkX2F0IFdJVEhPVVQgT1ZFUkxBUFMpCispOworSU5T RVJUIElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMgKCdbMSwyKScsIE5VTEwpLCAoTlVMTCwgJ1sx LDIpJyk7CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZBTFVFUyAoJ1sxLDIpJywgJ1tjLGQp Jyk7IC0tIHZpb2xhdGVzIGRvbWFpbgorSU5TRVJUIElOVE8gdGVtcG9yYWxfcm5nNCBWQUxVRVMg KCdbMSwyKScsICdbYSxkKScpOyAtLSBva2F5CitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9ybmc0IFZB TFVFUyAoJ1sxLDIpJywgJ1tiLGMpJyk7IC0tIG5vdCB1bmlxdWUKK0lOU0VSVCBJTlRPIHRlbXBv cmFsX3JuZzQgVkFMVUVTICgnWzIsMyknLCAnW0IsQyknKSwgKCdbMiwzKScsICdbQSxDKScpOyAt LSBub3QgdW5pcXVlCisKKy0tIEl0IGlzIGEgbXVsdGlyYW5nZSB0eXBlIHJhdGhlciB0aGFuIGEg ZG9tYWluIHR5cGU7IGhvd2V2ZXIsIHRoZSBtdWx0aXJhbmdlCistLSB0eXBl4oCZcyBzdWJ0eXBl IGlzIGEgZG9tYWluIHR5cGUuCitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfbWx0cm5nNCAoCisgIGlk ICBpbnQ0cmFuZ2UsCisgIHZhbGlkX2F0IGludDRfZF9tdWx0aXJhbmdlLAorICBDT05TVFJBSU5U IHRlbXBvcmFsX21sdHJuZzRfcGsgUFJJTUFSWSBLRVkgKGlkLCB2YWxpZF9hdCBXSVRIT1VUIE9W RVJMQVBTKQorKTsKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX21sdHJuZzQgVkFMVUVTICgnWzEsMikn LCAne1sxMCwxMSl9Jyk7IC0tIHZpb2xhdGVzIGRvbWFpbgorSU5TRVJUIElOVE8gdGVtcG9yYWxf bWx0cm5nNCBWQUxVRVMgKCdbMSwyKScsICd7WzEsMTMpfScpLCAoJ1sxLDIpJywgJ3tbMiwxMyl9 Jyk7IC0tIG5vdCB1bmlxdWUKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX21sdHJuZzQgVkFMVUVTICgn WzEsMiknLCAne1sxLDEzKX0nKSwgKCdbMSwyKScsICd7WzIwLDIzKX0nKTsgLS0gb2theQorRFJP UCBUQUJMRSB0ZW1wb3JhbF9tbHRybmc0OworCistLSBUaGUgZG9tYWluIGlzIG92ZXIgYSBidWls dC1pbiBtdWx0aXJhbmdlIHR5cGUuCitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfbWx0cm5nNCAoCisg IGlkICBpbnQ0cmFuZ2UsCisgIHZhbGlkX2F0IGludDRtdWx0aXJhbmdlX2QsCisgIENPTlNUUkFJ TlQgdGVtcG9yYWxfbWx0cm5nNF9wayBQUklNQVJZIEtFWSAoaWQsIHZhbGlkX2F0IFdJVEhPVVQg T1ZFUkxBUFMpCispOworSU5TRVJUIElOVE8gdGVtcG9yYWxfbWx0cm5nNCBWQUxVRVMgKCdbMSwy KScsICd7WzEwLDExKX0nKTsgLS0gdmlvbGF0ZXMgZG9tYWluCitJTlNFUlQgSU5UTyB0ZW1wb3Jh bF9tbHRybmc0IFZBTFVFUyAoJ1sxLDIpJywgJ3tbMSwxMyl9JyksICgnWzEsMiknLCAne1syLDEz KX0nKTsgLS0gbm90IHVuaXF1ZQorSU5TRVJUIElOVE8gdGVtcG9yYWxfbWx0cm5nNCBWQUxVRVMg KCdbMSwyKScsICd7WzEsMTMpfScpLCAoJ1sxLDIpJywgJ3tbMjAsMjMpfScpOyAtLSBva2F5CitE Uk9QIFRBQkxFIHRlbXBvcmFsX21sdHJuZzQ7CisKKy0tIFRoZSBkb21haW4gaXMgb3ZlciBhIHVz ZXItZGVmaW5lZCBtdWx0aXJhbmdlIHR5cGUuCitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfbWx0cm5n NCAoCisgIGlkIGludDRyYW5nZSwKKyAgdmFsaWRfYXQgdGV4dG11bHRpcmFuZ2UyX2QsCisgIENP TlNUUkFJTlQgdGVtcG9yYWxfbWx0cm5nNF9wayBQUklNQVJZIEtFWSAoaWQsIHZhbGlkX2F0IFdJ VEhPVVQgT1ZFUkxBUFMpCispOworSU5TRVJUIElOVE8gdGVtcG9yYWxfbWx0cm5nNCBWQUxVRVMg KCdbMSwyKScsICd7W2MsZCl9Jyk7IC0tIHZpb2xhdGVzIGRvbWFpbgorSU5TRVJUIElOVE8gdGVt cG9yYWxfbWx0cm5nNCBWQUxVRVMgKCdbMSwyKScsICd7W2EsZyl9Jyk7IC0tIG9rYXkKK0lOU0VS VCBJTlRPIHRlbXBvcmFsX21sdHJuZzQgVkFMVUVTICgnWzEsMiknLCAne1tiLGMpfScpOyAtLSBu b3QgdW5pcXVlCitJTlNFUlQgSU5UTyB0ZW1wb3JhbF9tbHRybmc0IFZBTFVFUyAoJ1syLDMpJywg J3tbQixDKX0nKSwgKCdbMiwzKScsICd7W0EsQyl9Jyk7IC0tIG5vdCB1bmlxdWUKKworLS0gdGVz dCBmb3JlaWduIGtleSBpbnRlcmFjdGlvbnMgd2l0aCBkb21haW5zOgorCistLSBkb21haW4gcmVm ZXJlbmNlcyBkb21haW46CitVUERBVEUgdGVtcG9yYWxfbWx0cm5nNCBTRVQgdmFsaWRfYXQgPSAn e1thLGcpfSc7IC0tIHJlc2V0CitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfbWx0cm5nZmsgKAorICBw YXJlbnRfaWQgaW50NHJhbmdlLAorICBpZCBpbnQ0cmFuZ2UsCisgIHZhbGlkX2F0IHRleHRtdWx0 aXJhbmdlMl9kLAorICBDT05TVFJBSU5UIHRlbXBvcmFsX21sdHJuZ2ZrX2ZrCisgICAgRk9SRUlH TiBLRVkgKHBhcmVudF9pZCwgUEVSSU9EIHZhbGlkX2F0KQorICAgIFJFRkVSRU5DRVMgdGVtcG9y YWxfbWx0cm5nNAorKTsKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX21sdHJuZ2ZrIFZBTFVFUyAoJ1sx LDIpJywgJ1syLDMpJywgJ3tbZCxlKX0nKTsKK1VQREFURSB0ZW1wb3JhbF9tbHRybmc0IFNFVCB2 YWxpZF9hdCA9ICd7W2MsZCl9JzsgLS0gdmlvbGF0ZXMgZG9tYWluCitVUERBVEUgdGVtcG9yYWxf bWx0cm5nNCBTRVQgdmFsaWRfYXQgPSAne1thLGgpfSc7IC0tIG9rYXkKK1VQREFURSB0ZW1wb3Jh bF9tbHRybmc0IFNFVCB2YWxpZF9hdCA9ICd7W2YsZyl9JzsgLS0gdmlvbGF0ZXMgcmVmZXJlbmNl CitEUk9QIFRBQkxFIHRlbXBvcmFsX21sdHJuZ2ZrOworCistLSBub24tZG9tYWluIHJlZmVyZW5j ZXMgZG9tYWluOgorVVBEQVRFIHRlbXBvcmFsX21sdHJuZzQgU0VUIHZhbGlkX2F0ID0gJ3tbYSxn KX0nOyAtLSByZXNldAorQ1JFQVRFIFRBQkxFIHRlbXBvcmFsX21sdHJuZ2ZrICgKKyAgcGFyZW50 X2lkIGludDRyYW5nZSwKKyAgaWQgaW50NHJhbmdlLAorICB2YWxpZF9hdCB0ZXh0bXVsdGlyYW5n ZTIsCisgIENPTlNUUkFJTlQgdGVtcG9yYWxfbWx0cm5nZmtfZmsKKyAgICBGT1JFSUdOIEtFWSAo cGFyZW50X2lkLCBQRVJJT0QgdmFsaWRfYXQpCisgICAgUkVGRVJFTkNFUyB0ZW1wb3JhbF9tbHRy bmc0CispOworSU5TRVJUIElOVE8gdGVtcG9yYWxfbWx0cm5nZmsgVkFMVUVTICgnWzEsMiknLCAn WzIsMyknLCAne1tkLGUpfScpOworVVBEQVRFIHRlbXBvcmFsX21sdHJuZzQgU0VUIHZhbGlkX2F0 ID0gJ3tbYyxkKX0nOyAtLSB2aW9sYXRlcyBkb21haW4KK1VQREFURSB0ZW1wb3JhbF9tbHRybmc0 IFNFVCB2YWxpZF9hdCA9ICd7W2EsaCl9JzsgLS0gb2theQorVVBEQVRFIHRlbXBvcmFsX21sdHJu ZzQgU0VUIHZhbGlkX2F0ID0gJ3tbZixnKX0nOyAtLSB2aW9sYXRlcyByZWZlcmVuY2UKK0RST1Ag VEFCTEUgdGVtcG9yYWxfbWx0cm5nZms7CisKKy0tIGRvbWFpbiByZWZlcmVuY2VzIG5vbi1kb21h aW46CitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfbWx0cm5nMyAoCisgIGlkIGludDRyYW5nZSwKKyAg dmFsaWRfYXQgdGV4dG11bHRpcmFuZ2UyCispOworSU5TRVJUIElOVE8gdGVtcG9yYWxfbWx0cm5n MyBWQUxVRVMgKCdbMSwyKScsICd7W2EsZyl9Jyk7CitDUkVBVEUgVEFCTEUgdGVtcG9yYWxfbWx0 cm5nZmsgKAorICBpZCBpbnQ0cmFuZ2UsCisgIHBhcmVudF9pZCBpbnQ0cmFuZ2UsCisgIHZhbGlk X2F0IHRleHRtdWx0aXJhbmdlMl9kLAorICBDT05TVFJBSU5UIHRlbXBvcmFsX21sdHJuZ2ZrX2Zr CisgICAgRk9SRUlHTiBLRVkgKHBhcmVudF9pZCwgUEVSSU9EIHZhbGlkX2F0KQorICAgIFJFRkVS RU5DRVMgdGVtcG9yYWxfbWx0cm5nNAorKTsKK0lOU0VSVCBJTlRPIHRlbXBvcmFsX21sdHJuZ2Zr IFZBTFVFUyAoJ1sxLDIpJywgJ1sxLDIpJywgJ3tbZCxlKX0nKTsKK1VQREFURSB0ZW1wb3JhbF9t bHRybmc0IFNFVCB2YWxpZF9hdCA9ICd7W2MsZCl9JzsgLS0gdmlvbGF0ZXMgZG9tYWluCitVUERB VEUgdGVtcG9yYWxfbWx0cm5nNCBTRVQgdmFsaWRfYXQgPSAne1thLGgpfSc7IC0tIG9rYXkKK1VQ REFURSB0ZW1wb3JhbF9tbHRybmc0IFNFVCB2YWxpZF9hdCA9ICd7W2YsZyl9JzsgLS0gdmlvbGF0 ZXMgcmVmZXJlbmNlCitEUk9QIFRBQkxFIHRlbXBvcmFsX21sdHJuZzMsIHRlbXBvcmFsX21sdHJu Z2ZrOworCitEUk9QIFRBQkxFIHRlbXBvcmFsX21sdHJuZzQsIHRlbXBvcmFsX3JuZzQ7CiAKIC0t IFBLIHdpdGggb25lIGNvbHVtbiBwbHVzIGEgbXVsdGlyYW5nZToKIENSRUFURSBUQUJMRSB0ZW1w b3JhbF9tbHRybmcgKApAQCAtMTcwLDcgKzMxNiw2IEBAIFNFTEVDVCBwZ19nZXRfaW5kZXhkZWYo Y29uaW5kaWQsIDAsIHRydWUpIEZST00gcGdfY29uc3RyYWludCBXSEVSRSBjb25uYW1lID0gJ3Rl CiBEUk9QIFRBQkxFIHRlbXBvcmFsX3JuZzM7CiAKIC0tIFVOSVFVRSB3aXRoIGEgY3VzdG9tIHJh bmdlIHR5cGU6Ci1DUkVBVEUgVFlQRSB0ZXh0cmFuZ2UyIEFTIHJhbmdlIChzdWJ0eXBlPXRleHQs IGNvbGxhdGlvbj0iQyIpOwogQ1JFQVRFIFRBQkxFIHRlbXBvcmFsX3JuZzMgKAogICBpZCBpbnQ0 cmFuZ2UsCiAgIHZhbGlkX2F0IHRleHRyYW5nZTIsCkBAIC0xNzgsNiArMzIzLDkgQEAgQ1JFQVRF IFRBQkxFIHRlbXBvcmFsX3JuZzMgKAogKTsKIEFMVEVSIFRBQkxFIHRlbXBvcmFsX3JuZzMgRFJP UCBDT05TVFJBSU5UIHRlbXBvcmFsX3JuZzNfdXE7CiBEUk9QIFRBQkxFIHRlbXBvcmFsX3JuZzM7 CitEUk9QIFRZUEUgaW50NF9kX3JhbmdlOworRFJPUCBET01BSU4gaW50NHJhbmdlX2QsIHRleHRy YW5nZTJfZGQsIHRleHRyYW5nZTJfZCwKKyAgICAgICAgICAgIHRleHRtdWx0aXJhbmdlMl9kLCBp bnQ0bXVsdGlyYW5nZV9kLCBpbnQ0X2Q7CiBEUk9QIFRZUEUgdGV4dHJhbmdlMjsKIAogLS0KLS0g CjIuNDUuMAoK --00000000000077fe7c064a90dada--