Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nQbP2-0006DM-4B for pgsql-hackers@arkaria.postgresql.org; Sat, 05 Mar 2022 20:53:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nQbP0-0002Qd-OA for pgsql-hackers@arkaria.postgresql.org; Sat, 05 Mar 2022 20:53:22 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nQbP0-0002QT-2l for pgsql-hackers@lists.postgresql.org; Sat, 05 Mar 2022 20:53:22 +0000 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nQbOw-0003wQ-Kg for pgsql-hackers@lists.postgresql.org; Sat, 05 Mar 2022 20:53:20 +0000 Received: by mail-pj1-x1035.google.com with SMTP id ev16-20020a17090aead000b001bc3835fea8so10914165pjb.0 for ; Sat, 05 Mar 2022 12:53:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20210112.gappssmtp.com; s=20210112; h=message-id:date:mime-version:user-agent:subject:content-language:to :references:from:in-reply-to; bh=ldmX3Zlh/b04dMaCztNKAsQPtgIwAtSr6mczq0QKbe8=; b=hUOfgMLYJtasXrUgkVVXazM7ybJbvQrAJBuwzzkJhTaCS5greV4VBcBr9hjEMTUarU +LPHCQKht9gEF3gZFumXSk7qGDVIm3v33BV5XLPoyi38QGHBmyxp34UVUl45dWl6g/sp 6ycFQl3jH2MLN80rP/eAieQ/1Ixq4fDjC/mG+NwKScnkNI7TXIX2msdXnyDi6r+YVXCR yITLCpucaVIEvrTHNfTU7r6DbPSH1I1DjC/YV6MMNHNDt6UkB5mAcImAFtQI6aSCMuM/ T3NiehMGOU9knSedS0rMd9sFIesrJIyfkM+W7J5EUnhMTBN3RrQ8WnkdkX1P/GWiFKpA VpkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:references:from:in-reply-to; bh=ldmX3Zlh/b04dMaCztNKAsQPtgIwAtSr6mczq0QKbe8=; b=VGWJ4R8BKfJhmRaU1Al47/p0Y0jxHi14n3rmF4u1WNdke3Wd44tEZlUu72txLU5fOD CU/BYBykwmmbijOXrdvPvp+9BtYH89BbINRbenM5UdZWXhdHYO7aoVaL7aksJbCl8lPe Cf63Fb2VZYrwfk4wklr0tIBCzQA5mf6DHctcm7XYP9Zi9RSHIeRawPSXoSo1/USTB4PS 1Y9xDLjqe9w7/Vb0l4trr1RxtaykutZD6/QFsnp8lHd/UwWEYF9kz77bX+3w/Lt2KlFa OQkp2b+go6+nHzVnfBoSGs2U3uLciU4BbkVdeKwwF8rdrINMCgs9CqJg9o84NKRXVxIK 8mUg== X-Gm-Message-State: AOAM532FX29aEsCqVN2xZO8HuWFsd3Bm3roy8WWTonei8VWs2Xm46mgu Ahvg+AgNjq+dJudyv5VwKyjiew== X-Google-Smtp-Source: ABdhPJx7yc9a1pObIdAJOzBAbkmDLkhGHUiCedO10u8KszO8JF7S40YZ95cU1T+vcBuJKnX+dV+ERg== X-Received: by 2002:a17:90b:3a91:b0:1bf:261e:7773 with SMTP id om17-20020a17090b3a9100b001bf261e7773mr10382344pjb.155.1646513597085; Sat, 05 Mar 2022 12:53:17 -0800 (PST) Received: from [192.168.2.139] ([50.53.98.191]) by smtp.googlemail.com with ESMTPSA id z2-20020a17090a170200b001bf2d530d64sm5573580pjd.2.2022.03.05.12.53.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 05 Mar 2022 12:53:16 -0800 (PST) Content-Type: multipart/mixed; boundary="------------NzdMeJqR7AeKVn3e6kXv3Psm" Message-ID: <42454377-d914-0e22-37da-1b63ce3b9f9d@illuminatedcomputing.com> Date: Sat, 5 Mar 2022 12:53:15 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: range_agg with multirange inputs Content-Language: en-US To: Chapman Flack , pgsql-hackers@lists.postgresql.org References: <007ef255-35ef-fd26-679c-f97e7a7f30c2@illuminatedcomputing.com> <007ef255-35ef-fd26-679c-f97e7a7f30c2@illuminatedcomputing.com> <164592443404.882.11296254043197567171.pgcf@coridan.postgresql.org> <6556b959-f839-aee2-4b4b-0b5107c0db11@illuminatedcomputing.com> <621E912C.3020307@anastigmatix.net> From: Paul Jungwirth In-Reply-To: <621E912C.3020307@anastigmatix.net> 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. --------------NzdMeJqR7AeKVn3e6kXv3Psm Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 3/1/22 13:33, Chapman Flack wrote: > I think the 4 lines should suffice, but it looks like this patch was > generated from a rebase of the old one (with three lines) that ended up > putting the new 'range_agg' entry ahead of 'max' in func.sgml, which > position is now baked into the 4 lines of context. :) You're right, my last rebase messed up the docs. Here it is fixed. Sorry about that! > I would not change them to actual Assert, which would blow up the whole > process on failure. If it's a genuine "not expected to happen" case, > maybe changing it to elog (or ereport with errmsg_internal) would save > a little workload for translators. I like the elog solution. I've changed them in both places. > I did a small double-take seeing the C range_agg_finalfn being shared > by the SQL range_agg_finalfn and multirange_agg_finalfn. I infer that > the reason it works is get_fn_expr_rettype works equally well with > either parameter type. > > Do you think it would be worth adding a comment at the C function > explaining that? In a quick query I just did, I found no other aggregate > final functions sharing a C function that way, so this could be the first. I see 13 other shared finalfns (using select array_agg(aggfnoid::regproc) as procs, array_agg(aggtransfn) as transfns, aggfinalfn from pg_aggregate where aggfinalfn is distinct from 0 group by aggfinalfn having count(*) > 1;) but a comment can't hurt! Added. Thanks, -- Paul ~{:-) pj@illuminatedcomputing.com --------------NzdMeJqR7AeKVn3e6kXv3Psm Content-Type: text/x-patch; charset=UTF-8; name="v3-0001-Add-range_agg-with-multirange-inputs.patch" Content-Disposition: attachment; filename="v3-0001-Add-range_agg-with-multirange-inputs.patch" Content-Transfer-Encoding: base64 RnJvbSAxZTdhOTY2NjhiMGFkMzQxZDI5MjgxMDU1OTI3YWQ2OTNjNjU2ODQzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWlu YXRlZGNvbXB1dGluZy5jb20+CkRhdGU6IEZyaSwgMTAgRGVjIDIwMjEgMTY6MDQ6NTcgLTA4 MDAKU3ViamVjdDogW1BBVENIIHYzXSBBZGQgcmFuZ2VfYWdnIHdpdGggbXVsdGlyYW5nZSBp bnB1dHMKCi0tLQogZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCAgICAgICAgICAgICAgICAgICAg ICAgIHwgIDQ1ICsrKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbXVsdGlyYW5nZXR5 cGVzLmMgICAgICAgfCAgNjYgKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X2FnZ3JlZ2F0ZS5kYXQgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdCAgICAgICAgICAgICAgIHwgIDExICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL211bHRpcmFuZ2V0eXBlcy5vdXQgfCAxMDAgKysrKysrKysrKysrKysrKysrCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHkub3V0ICAgICAgfCAgIDEgKwog c3JjL3Rlc3QvcmVncmVzcy9zcWwvbXVsdGlyYW5nZXR5cGVzLnNxbCAgICAgIHwgIDIxICsr KysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL29wcl9zYW5pdHkuc3FsICAgICAgICAgICB8ICAg MSArCiA4IGZpbGVzIGNoYW5nZWQsIDI0NCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwv ZnVuYy5zZ21sCmluZGV4IGRmM2NkNTk4N2IuLmZiMTk2M2E2ODcgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAt MjAwMTIsOCArMjAwMTIsMjMgQEAgU0VMRUNUIE5VTExJRih2YWx1ZSwgJyhub25lKScpIC4u LgogICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICAgIDxlbnRyeT5ObzwvZW50cnk+CiAg ICAgICA8L3Jvdz4KIAorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190 YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5k ZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cmFuZ2VfYWdnPC9wcmltYXJ5PgorICAgICAg ICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnJhbmdlX2FnZzwvZnVuY3Rpb24+ ICggPHBhcmFtZXRlcj52YWx1ZTwvcGFyYW1ldGVyPgorICAgICAgICAgPHR5cGU+YW55bXVs dGlyYW5nZTwvdHlwZT4gKQorICAgICAgICA8cmV0dXJudmFsdWU+YW55bXVsdGlyYW5nZTwv cmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBD b21wdXRlcyB0aGUgdW5pb24gb2YgdGhlIG5vbi1udWxsIGlucHV0IHZhbHVlcy4KKyAgICAg ICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+Tm88L2VudHJ5PgorICAgICAgPC9y b3c+CisKICAgICAgIDxyb3c+CiAgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50 cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KICAgICAgICAgPGluZGV4dGVybT4K ICAgICAgICAgIDxwcmltYXJ5PnJhbmdlX2ludGVyc2VjdF9hZ2c8L3ByaW1hcnk+CkBAIC0y MDAyNyw4ICsyMDA0MiwzOCBAQCBTRUxFQ1QgTlVMTElGKHZhbHVlLCAnKG5vbmUpJykgLi4u CiAgICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgICAgPGVudHJ5Pk5vPC9lbnRyeT4KICAg ICAgIDwvcm93PgogCisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3Rh YmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRl eHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5yYW5nZV9pbnRlcnNlY3RfYWdnPC9wcmltYXJ5 PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnJhbmdlX2ludGVy c2VjdF9hZ2c8L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4KKyAg ICAgICAgIDx0eXBlPmFueW11bHRpcmFuZ2U8L3R5cGU+ICkKKyAgICAgICAgPHJldHVybnZh bHVlPmFueW11bHRpcmFuZ2U8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICAgQ29tcHV0ZXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgbm9u LW51bGwgaW5wdXQgdmFsdWVzLgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgIDxl bnRyeT5ObzwvZW50cnk+CisgICAgICA8L3Jvdz4KKworICAgICAgPHJvdz4KKyAgICAgICA8 ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1 cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cmFuZ2VfaW50 ZXJzZWN0X2FnZzwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxm dW5jdGlvbj5yYW5nZV9pbnRlcnNlY3RfYWdnPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVyPnZh bHVlPC9wYXJhbWV0ZXI+CisgICAgICAgICA8dHlwZT5hbnltdWx0aXJhbmdlPC90eXBlPiAp CisgICAgICAgIDxyZXR1cm52YWx1ZT5hbnltdWx0aXJhbmdlPC9yZXR1cm52YWx1ZT4KKyAg ICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIENvbXB1dGVzIHRoZSBpbnRl cnNlY3Rpb24gb2YgdGhlIG5vbi1udWxsIGlucHV0IHZhbHVlcy4KKyAgICAgICA8L3BhcmE+ PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+Tm88L2VudHJ5PgorICAgICAgPC9yb3c+CisKICAg ICAgIDxyb3c+CiAgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJh IHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KICAgICAgICAgPGluZGV4dGVybT4KICAgICAgICAg IDxwcmltYXJ5PnN0cmluZ19hZ2c8L3ByaW1hcnk+CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvbXVsdGlyYW5nZXR5cGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv bXVsdGlyYW5nZXR5cGVzLmMKaW5kZXggYzQ3NGIyNDQzMS4uNWE0YzAwNDU3YSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L211bHRpcmFuZ2V0eXBlcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0aXJhbmdldHlwZXMuYwpAQCAtMTM0Niw5ICsxMzQ2 LDkgQEAgcmFuZ2VfYWdnX3RyYW5zZm4oUEdfRlVOQ1RJT05fQVJHUykKIAlybmd0eXBvaWQg PSBnZXRfZm5fZXhwcl9hcmd0eXBlKGZjaW5mby0+ZmxpbmZvLCAxKTsKIAlpZiAoIXR5cGVf aXNfcmFuZ2Uocm5ndHlwb2lkKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShF UlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKLQkJCQkgZXJybXNnKCJyYW5nZV9hZ2cgbXVz dCBiZSBjYWxsZWQgd2l0aCBhIHJhbmdlIikpKTsKKwkJCQkgZXJybXNnKCJyYW5nZV9hZ2cg bXVzdCBiZSBjYWxsZWQgd2l0aCBhIHJhbmdlIG9yIG11bHRpcmFuZ2UiKSkpOwogCiAJaWYg KFBHX0FSR0lTTlVMTCgwKSkKIAkJc3RhdGUgPSBpbml0QXJyYXlSZXN1bHQocm5ndHlwb2lk LCBhZ2dDb250ZXh0LCBmYWxzZSk7CiAJZWxzZQpAQCAtMTM2Miw4ICsxMzYyLDEwIEBAIHJh bmdlX2FnZ190cmFuc2ZuKFBHX0ZVTkNUSU9OX0FSR1MpCiB9CiAKIC8qCiAgKiByYW5nZV9h Z2dfZmluYWxmbjogdXNlIG91ciBpbnRlcm5hbCBhcnJheSB0byBtZXJnZSB0b3VjaGluZyBy YW5nZXMuCisgKgorICogU2hhcmVkIGJ5IHJhbmdlX2FnZyhhbnlyYW5nZSkgYW5kIHJhbmdl X2FnZyhhbnltdWx0aXJhbmdlKS4KICAqLwogRGF0dW0KIHJhbmdlX2FnZ19maW5hbGZuKFBH X0ZVTkNUSU9OX0FSR1MpCiB7CkBAIC0xMzk3LDggKzEzOTksNjYgQEAgcmFuZ2VfYWdnX2Zp bmFsZm4oUEdfRlVOQ1RJT05fQVJHUykKIAogCVBHX1JFVFVSTl9NVUxUSVJBTkdFX1AobWFr ZV9tdWx0aXJhbmdlKG1sdHJuZ3R5cG9pZCwgdHlwY2FjaGUtPnJuZ3R5cGUsIHJhbmdlX2Nv dW50LCByYW5nZXMpKTsKIH0KIAorLyoKKyAqIG11bHRpcmFuZ2VfYWdnX3RyYW5zZm46IGNv bWJpbmUgYWRqYWNlbnQvb3ZlcmxhcHBpbmcgbXVsdGlyYW5nZXMuCisgKgorICogQWxsIHdl IGRvIGhlcmUgaXMgZ2F0aGVyIHRoZSBpbnB1dCBtdWx0aXJhbmdlcycgcmFuZ2VzIGludG8g YW4gYXJyYXkKKyAqIHNvIHRoYXQgdGhlIGZpbmFsZm4gY2FuIHNvcnQgYW5kIGNvbWJpbmUg dGhlbS4KKyAqLworRGF0dW0KK211bHRpcmFuZ2VfYWdnX3RyYW5zZm4oUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlNZW1vcnlDb250ZXh0IGFnZ0NvbnRleHQ7CisJT2lkCQkJbWx0cm5ndHlw b2lkOworCVR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZTsKKwlUeXBlQ2FjaGVFbnRyeSAqcm5n dHlwY2FjaGU7CisJQXJyYXlCdWlsZFN0YXRlICpzdGF0ZTsKKwlNdWx0aXJhbmdlVHlwZSAq Y3VycmVudDsKKwlpbnQzMgkJcmFuZ2VfY291bnQ7CisJUmFuZ2VUeXBlICoqcmFuZ2VzOwor CWludDMyCQlpOworCisJaWYgKCFBZ2dDaGVja0NhbGxDb250ZXh0KGZjaW5mbywgJmFnZ0Nv bnRleHQpKQorCQllbG9nKEVSUk9SLCAibXVsdGlyYW5nZV9hZ2dfdHJhbnNmbiBjYWxsZWQg aW4gbm9uLWFnZ3JlZ2F0ZSBjb250ZXh0Iik7CisKKwltbHRybmd0eXBvaWQgPSBnZXRfZm5f ZXhwcl9hcmd0eXBlKGZjaW5mby0+ZmxpbmZvLCAxKTsKKwlpZiAoIXR5cGVfaXNfbXVsdGly YW5nZShtbHRybmd0eXBvaWQpKQorCQllbG9nKEVSUk9SLCAicmFuZ2VfYWdnIG11c3QgYmUg Y2FsbGVkIHdpdGggYSByYW5nZSBvciBtdWx0aXJhbmdlIik7CisKKwl0eXBjYWNoZSA9IG11 bHRpcmFuZ2VfZ2V0X3R5cGNhY2hlKGZjaW5mbywgbWx0cm5ndHlwb2lkKTsKKwlybmd0eXBj YWNoZSA9IHR5cGNhY2hlLT5ybmd0eXBlOworCisJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJ c3RhdGUgPSBpbml0QXJyYXlSZXN1bHQocm5ndHlwY2FjaGUtPnR5cGVfaWQsIGFnZ0NvbnRl eHQsIGZhbHNlKTsKKwllbHNlCisJCXN0YXRlID0gKEFycmF5QnVpbGRTdGF0ZSAqKSBQR19H RVRBUkdfUE9JTlRFUigwKTsKKworCS8qIHNraXAgTlVMTHMgKi8KKwlpZiAoIVBHX0FSR0lT TlVMTCgxKSkKKwl7CisJCWN1cnJlbnQgPSBQR19HRVRBUkdfTVVMVElSQU5HRV9QKDEpOwor CQltdWx0aXJhbmdlX2Rlc2VyaWFsaXplKHJuZ3R5cGNhY2hlLCBjdXJyZW50LCAmcmFuZ2Vf Y291bnQsICZyYW5nZXMpOworCQlpZiAocmFuZ2VfY291bnQgPT0gMCkKKwkJeworCQkJLyoK KwkJCSAqIEFkZCBhbiBlbXB0eSByYW5nZSBzbyB3ZSBnZXQgYW4gZW1wdHkgcmVzdWx0IChu b3QgYSBudWxsIHJlc3VsdCkuCisJCQkgKi8KKwkJCWFjY3VtQXJyYXlSZXN1bHQoc3RhdGUs CisJCQkJCQkJIFJhbmdlVHlwZVBHZXREYXR1bShtYWtlX2VtcHR5X3JhbmdlKHJuZ3R5cGNh Y2hlKSksCisJCQkJCQkJIGZhbHNlLCBybmd0eXBjYWNoZS0+dHlwZV9pZCwgYWdnQ29udGV4 dCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlmb3IgKGkgPSAwOyBpIDwgcmFuZ2VfY291bnQ7 IGkrKykKKwkJCQlhY2N1bUFycmF5UmVzdWx0KHN0YXRlLCBSYW5nZVR5cGVQR2V0RGF0dW0o cmFuZ2VzW2ldKSwgZmFsc2UsIHJuZ3R5cGNhY2hlLT50eXBlX2lkLCBhZ2dDb250ZXh0KTsK KwkJfQorCX0KKworCVBHX1JFVFVSTl9QT0lOVEVSKHN0YXRlKTsKK30KKwogRGF0dW0KIG11 bHRpcmFuZ2VfaW50ZXJzZWN0X2FnZ190cmFuc2ZuKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJ TWVtb3J5Q29udGV4dCBhZ2dDb250ZXh0OwpAQCAtMTQxNSwxMSArMTQ3NSw5IEBAIG11bHRp cmFuZ2VfaW50ZXJzZWN0X2FnZ190cmFuc2ZuKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWVsb2co RVJST1IsICJtdWx0aXJhbmdlX2ludGVyc2VjdF9hZ2dfdHJhbnNmbiBjYWxsZWQgaW4gbm9u LWFnZ3JlZ2F0ZSBjb250ZXh0Iik7CiAKIAltbHRybmd0eXBvaWQgPSBnZXRfZm5fZXhwcl9h cmd0eXBlKGZjaW5mby0+ZmxpbmZvLCAxKTsKIAlpZiAoIXR5cGVfaXNfbXVsdGlyYW5nZSht bHRybmd0eXBvaWQpKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVf REFUQVRZUEVfTUlTTUFUQ0gpLAotCQkJCSBlcnJtc2coInJhbmdlX2ludGVyc2VjdF9hZ2cg bXVzdCBiZSBjYWxsZWQgd2l0aCBhIG11bHRpcmFuZ2UiKSkpOworCQllbG9nKEVSUk9SLCAi cmFuZ2VfYWdnIG11c3QgYmUgY2FsbGVkIHdpdGggYSByYW5nZSBvciBtdWx0aXJhbmdlIik7 CiAKIAl0eXBjYWNoZSA9IG11bHRpcmFuZ2VfZ2V0X3R5cGNhY2hlKGZjaW5mbywgbWx0cm5n dHlwb2lkKTsKIAogCS8qIHN0cmljdG5lc3MgZW5zdXJlcyB0aGVzZSBhcmUgbm9uLW51bGwg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYWdncmVnYXRlLmRhdCBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYWdncmVnYXRlLmRhdAppbmRleCAyODQzZjRiNDE1 Li4xNWI0ZTY0NjFhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FnZ3Jl Z2F0ZS5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hZ2dyZWdhdGUuZGF0CkBA IC01NjIsOCArNTYyLDExIEBACiAgIGFnZ3RyYW5zdHlwZSA9PiAnYW55bXVsdGlyYW5nZScg fSwKIHsgYWdnZm5vaWQgPT4gJ3JhbmdlX2FnZyhhbnlyYW5nZSknLCBhZ2d0cmFuc2ZuID0+ ICdyYW5nZV9hZ2dfdHJhbnNmbicsCiAgIGFnZ2ZpbmFsZm4gPT4gJ3JhbmdlX2FnZ19maW5h bGZuJywgYWdnZmluYWxleHRyYSA9PiAndCcsCiAgIGFnZ3RyYW5zdHlwZSA9PiAnaW50ZXJu YWwnIH0sCit7IGFnZ2Zub2lkID0+ICdyYW5nZV9hZ2coYW55bXVsdGlyYW5nZSknLCBhZ2d0 cmFuc2ZuID0+ICdtdWx0aXJhbmdlX2FnZ190cmFuc2ZuJywKKyAgYWdnZmluYWxmbiA9PiAn bXVsdGlyYW5nZV9hZ2dfZmluYWxmbicsIGFnZ2ZpbmFsZXh0cmEgPT4gJ3QnLAorICBhZ2d0 cmFuc3R5cGUgPT4gJ2ludGVybmFsJyB9LAogCiAjIGpzb24KIHsgYWdnZm5vaWQgPT4gJ2pz b25fYWdnJywgYWdndHJhbnNmbiA9PiAnanNvbl9hZ2dfdHJhbnNmbicsCiAgIGFnZ2ZpbmFs Zm4gPT4gJ2pzb25fYWdnX2ZpbmFsZm4nLCBhZ2d0cmFuc3R5cGUgPT4gJ2ludGVybmFsJyB9 LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggYmY4ODg1ODE3MS4uMWYwZGEwMGEy NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMDYxMSw4ICsxMDYxMSwxOSBA QAogeyBvaWQgPT4gJzQzMDEnLCBkZXNjciA9PiAnY29tYmluZSBhZ2dyZWdhdGUgaW5wdXQg aW50byBhIG11bHRpcmFuZ2UnLAogICBwcm9uYW1lID0+ICdyYW5nZV9hZ2cnLCBwcm9raW5k ID0+ICdhJywgcHJvaXNzdHJpY3QgPT4gJ2YnLAogICBwcm9yZXR0eXBlID0+ICdhbnltdWx0 aXJhbmdlJywgcHJvYXJndHlwZXMgPT4gJ2FueXJhbmdlJywKICAgcHJvc3JjID0+ICdhZ2dy ZWdhdGVfZHVtbXknIH0sCit7IG9pZCA9PiAnODAwMCcsIGRlc2NyID0+ICdhZ2dyZWdhdGUg dHJhbnNpdGlvbiBmdW5jdGlvbicsCisgIHByb25hbWUgPT4gJ211bHRpcmFuZ2VfYWdnX3Ry YW5zZm4nLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywK KyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIGFueW11bHRpcmFuZ2UnLCBwcm9zcmMgPT4g J211bHRpcmFuZ2VfYWdnX3RyYW5zZm4nIH0sCit7IG9pZCA9PiAnODAwMScsIGRlc2NyID0+ ICdhZ2dyZWdhdGUgZmluYWwgZnVuY3Rpb24nLAorICBwcm9uYW1lID0+ICdtdWx0aXJhbmdl X2FnZ19maW5hbGZuJywgcHJvaXNzdHJpY3QgPT4gJ2YnLAorICBwcm9yZXR0eXBlID0+ICdh bnltdWx0aXJhbmdlJywgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIGFueW11bHRpcmFuZ2Un LAorICBwcm9zcmMgPT4gJ3JhbmdlX2FnZ19maW5hbGZuJyB9LAoreyBvaWQgPT4gJzgwMDIn LCBkZXNjciA9PiAnY29tYmluZSBhZ2dyZWdhdGUgaW5wdXQgaW50byBhIG11bHRpcmFuZ2Un LAorICBwcm9uYW1lID0+ICdyYW5nZV9hZ2cnLCBwcm9raW5kID0+ICdhJywgcHJvaXNzdHJp Y3QgPT4gJ2YnLAorICBwcm9yZXR0eXBlID0+ICdhbnltdWx0aXJhbmdlJywgcHJvYXJndHlw ZXMgPT4gJ2FueW11bHRpcmFuZ2UnLAorICBwcm9zcmMgPT4gJ2FnZ3JlZ2F0ZV9kdW1teScg fSwKIHsgb2lkID0+ICc0Mzg4JywgZGVzY3IgPT4gJ3JhbmdlIGFnZ3JlZ2F0ZSBieSBpbnRl cnNlY3RpbmcnLAogICBwcm9uYW1lID0+ICdtdWx0aXJhbmdlX2ludGVyc2VjdF9hZ2dfdHJh bnNmbicsIHByb3JldHR5cGUgPT4gJ2FueW11bHRpcmFuZ2UnLAogICBwcm9hcmd0eXBlcyA9 PiAnYW55bXVsdGlyYW5nZSBhbnltdWx0aXJhbmdlJywKICAgcHJvc3JjID0+ICdtdWx0aXJh bmdlX2ludGVyc2VjdF9hZ2dfdHJhbnNmbicgfSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvbXVsdGlyYW5nZXR5cGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvbXVsdGlyYW5nZXR5cGVzLm91dAppbmRleCBiZGUzZjI0OGE3Li5hYzJlYjg0 YzNhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL211bHRpcmFuZ2V0 eXBlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tdWx0aXJhbmdldHlw ZXMub3V0CkBAIC0yNzgzLDggKzI3ODMsNzIgQEAgRlJPTSAgICAoVkFMVUVTCiAtLS0tLS0t LS0tLS0tLS0KICB7W2EsZl0sW2csail9CiAoMSByb3cpCiAKKy0tIHJhbmdlX2FnZyB3aXRo IG11bHRpcmFuZ2UgaW5wdXRzCitzZWxlY3QgcmFuZ2VfYWdnKG5tcikgZnJvbSBudW1tdWx0 aXJhbmdlX3Rlc3Q7CisgcmFuZ2VfYWdnIAorLS0tLS0tLS0tLS0KKyB7KCwpfQorKDEgcm93 KQorCitzZWxlY3QgcmFuZ2VfYWdnKG5tcikgZnJvbSBudW1tdWx0aXJhbmdlX3Rlc3Qgd2hl cmUgZmFsc2U7CisgcmFuZ2VfYWdnIAorLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworc2Vs ZWN0IHJhbmdlX2FnZyhudWxsOjpudW1tdWx0aXJhbmdlKSBmcm9tIG51bW11bHRpcmFuZ2Vf dGVzdDsKKyByYW5nZV9hZ2cgCistLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitzZWxlY3Qg cmFuZ2VfYWdnKG5tcikgZnJvbSAodmFsdWVzICgne30nOjpudW1tdWx0aXJhbmdlKSkgdChu bXIpOworIHJhbmdlX2FnZyAKKy0tLS0tLS0tLS0tCisge30KKygxIHJvdykKKworc2VsZWN0 IHJhbmdlX2FnZyhubXIpIGZyb20gKHZhbHVlcyAoJ3t9Jzo6bnVtbXVsdGlyYW5nZSksICgn e30nOjpudW1tdWx0aXJhbmdlKSkgdChubXIpOworIHJhbmdlX2FnZyAKKy0tLS0tLS0tLS0t Cisge30KKygxIHJvdykKKworc2VsZWN0IHJhbmdlX2FnZyhubXIpIGZyb20gKHZhbHVlcyAo J3tbMSwyXX0nOjpudW1tdWx0aXJhbmdlKSkgdChubXIpOworIHJhbmdlX2FnZyAKKy0tLS0t LS0tLS0tCisge1sxLDJdfQorKDEgcm93KQorCitzZWxlY3QgcmFuZ2VfYWdnKG5tcikgZnJv bSAodmFsdWVzICgne1sxLDJdLCBbNSw2XX0nOjpudW1tdWx0aXJhbmdlKSkgdChubXIpOwor ICAgcmFuZ2VfYWdnICAgCistLS0tLS0tLS0tLS0tLS0KKyB7WzEsMl0sWzUsNl19CisoMSBy b3cpCisKK3NlbGVjdCByYW5nZV9hZ2cobm1yKSBmcm9tICh2YWx1ZXMgKCd7WzEsMl0sIFsy LDNdfSc6Om51bW11bHRpcmFuZ2UpKSB0KG5tcik7CisgcmFuZ2VfYWdnIAorLS0tLS0tLS0t LS0KKyB7WzEsM119CisoMSByb3cpCisKK3NlbGVjdCByYW5nZV9hZ2cobm1yKSBmcm9tICh2 YWx1ZXMgKCd7WzEsMl19Jzo6bnVtbXVsdGlyYW5nZSksICgne1s1LDZdfSc6Om51bW11bHRp cmFuZ2UpKSB0KG5tcik7CisgICByYW5nZV9hZ2cgICAKKy0tLS0tLS0tLS0tLS0tLQorIHtb MSwyXSxbNSw2XX0KKygxIHJvdykKKworc2VsZWN0IHJhbmdlX2FnZyhubXIpIGZyb20gKHZh bHVlcyAoJ3tbMSwyXX0nOjpudW1tdWx0aXJhbmdlKSwgKCd7WzIsM119Jzo6bnVtbXVsdGly YW5nZSkpIHQobm1yKTsKKyByYW5nZV9hZ2cgCistLS0tLS0tLS0tLQorIHtbMSwzXX0KKygx IHJvdykKKworLS0KKy0tIHJhbmdlX2ludGVyc2VjdF9hZ2cgZnVuY3Rpb24KKy0tCiBzZWxl Y3QgcmFuZ2VfaW50ZXJzZWN0X2FnZyhubXIpIGZyb20gbnVtbXVsdGlyYW5nZV90ZXN0Owog IHJhbmdlX2ludGVyc2VjdF9hZ2cgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICB7fQpAQCAt Mjc5NSwxNSArMjg1OSw1MSBAQCBzZWxlY3QgcmFuZ2VfaW50ZXJzZWN0X2FnZyhubXIpIGZy b20gbnVtbXVsdGlyYW5nZV90ZXN0IHdoZXJlIGZhbHNlOwogLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgCiAoMSByb3cpCiAKK3NlbGVjdCByYW5nZV9pbnRlcnNlY3RfYWdnKG51bGw6Om51 bW11bHRpcmFuZ2UpIGZyb20gbnVtbXVsdGlyYW5nZV90ZXN0OworIHJhbmdlX2ludGVyc2Vj dF9hZ2cgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworc2VsZWN0IHJh bmdlX2ludGVyc2VjdF9hZ2cobm1yKSBmcm9tICh2YWx1ZXMgKCd7WzEsM119Jzo6bnVtbXVs dGlyYW5nZSksICgne1s2LDEyXX0nOjpudW1tdWx0aXJhbmdlKSkgdChubXIpOworIHJhbmdl X2ludGVyc2VjdF9hZ2cgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7fQorKDEgcm93KQor CitzZWxlY3QgcmFuZ2VfaW50ZXJzZWN0X2FnZyhubXIpIGZyb20gKHZhbHVlcyAoJ3tbMSw2 XX0nOjpudW1tdWx0aXJhbmdlKSwgKCd7WzMsMTJdfSc6Om51bW11bHRpcmFuZ2UpKSB0KG5t cik7CisgcmFuZ2VfaW50ZXJzZWN0X2FnZyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHtb Myw2XX0KKygxIHJvdykKKworc2VsZWN0IHJhbmdlX2ludGVyc2VjdF9hZ2cobm1yKSBmcm9t ICh2YWx1ZXMgKCd7WzEsNl0sIFsxMCwxMl19Jzo6bnVtbXVsdGlyYW5nZSksICgne1s0LDE0 XX0nOjpudW1tdWx0aXJhbmdlKSkgdChubXIpOworIHJhbmdlX2ludGVyc2VjdF9hZ2cgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7WzQsNl0sWzEwLDEyXX0KKygxIHJvdykKKwogLS0g dGVzdCB3aXRoIGp1c3Qgb25lIGlucHV0Ogorc2VsZWN0IHJhbmdlX2ludGVyc2VjdF9hZ2co bm1yKSBmcm9tICh2YWx1ZXMgKCd7fSc6Om51bW11bHRpcmFuZ2UpKSB0KG5tcik7CisgcmFu Z2VfaW50ZXJzZWN0X2FnZyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHt9CisoMSByb3cp CisKIHNlbGVjdCByYW5nZV9pbnRlcnNlY3RfYWdnKG5tcikgZnJvbSAodmFsdWVzICgne1sx LDJdfSc6Om51bW11bHRpcmFuZ2UpKSB0KG5tcik7CiAgcmFuZ2VfaW50ZXJzZWN0X2FnZyAK IC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHtbMSwyXX0KICgxIHJvdykKIAorc2VsZWN0IHJh bmdlX2ludGVyc2VjdF9hZ2cobm1yKSBmcm9tICh2YWx1ZXMgKCd7WzEsNl0sIFsxMCwxMl19 Jzo6bnVtbXVsdGlyYW5nZSkpIHQobm1yKTsKKyByYW5nZV9pbnRlcnNlY3RfYWdnIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisge1sxLDZdLFsxMCwxMl19CisoMSByb3cpCisKIHNlbGVj dCByYW5nZV9pbnRlcnNlY3RfYWdnKG5tcikgZnJvbSBudW1tdWx0aXJhbmdlX3Rlc3Qgd2hl cmUgbm1yIEA+IDQuMDsKICByYW5nZV9pbnRlcnNlY3RfYWdnIAogLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAge1szLDUpfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9vcHJfc2FuaXR5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0 eS5vdXQKaW5kZXggNGNlNmMwMzliNC4uMDQ2ZDIwMDZkNSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9vcHJfc2FuaXR5Lm91dAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL29wcl9zYW5pdHkub3V0CkBAIC0xOTIsOCArMTkyLDkgQEAgV0hFUkUg cDEub2lkICE9IHAyLm9pZCBBTkQKICAgICBwMS5wcm9zcmMgTk9UIExJS0UgRSdyYW5nZVxc X2NvbnN0cnVjdG9yXycgQU5ECiAgICAgcDIucHJvc3JjIE5PVCBMSUtFIEUncmFuZ2VcXF9j b25zdHJ1Y3Rvcl8nIEFORAogICAgIHAxLnByb3NyYyBOT1QgTElLRSBFJ211bHRpcmFuZ2Vc XF9jb25zdHJ1Y3Rvcl8nIEFORAogICAgIHAyLnByb3NyYyBOT1QgTElLRSBFJ211bHRpcmFu Z2VcXF9jb25zdHJ1Y3Rvcl8nIEFORAorICAgIHAyLnByb3NyYyBOT1QgTElLRSBFJ3Jhbmdl XFxfYWdnXFxfZmluYWxmbicgQU5ECiAgICAgKHAxLnByb2FyZ3R5cGVzWzFdIDwgcDIucHJv YXJndHlwZXNbMV0pCiBPUkRFUiBCWSAxLCAyOwogICAgICAgICAgcHJvYXJndHlwZXMgICAg ICAgICB8ICAgICAgIHByb2FyZ3R5cGVzICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9tdWx0aXJhbmdldHlwZXMuc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvbXVsdGlyYW5nZXR5cGVzLnNxbAppbmRleCBkZjFlZGI0ZDMxLi4xYWJjYWVkZGI1 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9tdWx0aXJhbmdldHlwZXMuc3Fs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL211bHRpcmFuZ2V0eXBlcy5zcWwKQEAgLTU3 MSwxMiArNTcxLDMzIEBAIEZST00gICAgKFZBTFVFUwogICAgICAgICAgICgnW2csaCknOjp0 ZXh0cmFuZ2UpLAogICAgICAgICAgICgnW2gsaiknOjp0ZXh0cmFuZ2UpCiAgICAgICAgICkg dChyKTsKIAorLS0gcmFuZ2VfYWdnIHdpdGggbXVsdGlyYW5nZSBpbnB1dHMKK3NlbGVjdCBy YW5nZV9hZ2cobm1yKSBmcm9tIG51bW11bHRpcmFuZ2VfdGVzdDsKK3NlbGVjdCByYW5nZV9h Z2cobm1yKSBmcm9tIG51bW11bHRpcmFuZ2VfdGVzdCB3aGVyZSBmYWxzZTsKK3NlbGVjdCBy YW5nZV9hZ2cobnVsbDo6bnVtbXVsdGlyYW5nZSkgZnJvbSBudW1tdWx0aXJhbmdlX3Rlc3Q7 CitzZWxlY3QgcmFuZ2VfYWdnKG5tcikgZnJvbSAodmFsdWVzICgne30nOjpudW1tdWx0aXJh bmdlKSkgdChubXIpOworc2VsZWN0IHJhbmdlX2FnZyhubXIpIGZyb20gKHZhbHVlcyAoJ3t9 Jzo6bnVtbXVsdGlyYW5nZSksICgne30nOjpudW1tdWx0aXJhbmdlKSkgdChubXIpOworc2Vs ZWN0IHJhbmdlX2FnZyhubXIpIGZyb20gKHZhbHVlcyAoJ3tbMSwyXX0nOjpudW1tdWx0aXJh bmdlKSkgdChubXIpOworc2VsZWN0IHJhbmdlX2FnZyhubXIpIGZyb20gKHZhbHVlcyAoJ3tb MSwyXSwgWzUsNl19Jzo6bnVtbXVsdGlyYW5nZSkpIHQobm1yKTsKK3NlbGVjdCByYW5nZV9h Z2cobm1yKSBmcm9tICh2YWx1ZXMgKCd7WzEsMl0sIFsyLDNdfSc6Om51bW11bHRpcmFuZ2Up KSB0KG5tcik7CitzZWxlY3QgcmFuZ2VfYWdnKG5tcikgZnJvbSAodmFsdWVzICgne1sxLDJd fSc6Om51bW11bHRpcmFuZ2UpLCAoJ3tbNSw2XX0nOjpudW1tdWx0aXJhbmdlKSkgdChubXIp Oworc2VsZWN0IHJhbmdlX2FnZyhubXIpIGZyb20gKHZhbHVlcyAoJ3tbMSwyXX0nOjpudW1t dWx0aXJhbmdlKSwgKCd7WzIsM119Jzo6bnVtbXVsdGlyYW5nZSkpIHQobm1yKTsKKworLS0K Ky0tIHJhbmdlX2ludGVyc2VjdF9hZ2cgZnVuY3Rpb24KKy0tCiBzZWxlY3QgcmFuZ2VfaW50 ZXJzZWN0X2FnZyhubXIpIGZyb20gbnVtbXVsdGlyYW5nZV90ZXN0Owogc2VsZWN0IHJhbmdl X2ludGVyc2VjdF9hZ2cobm1yKSBmcm9tIG51bW11bHRpcmFuZ2VfdGVzdCB3aGVyZSBmYWxz ZTsKK3NlbGVjdCByYW5nZV9pbnRlcnNlY3RfYWdnKG51bGw6Om51bW11bHRpcmFuZ2UpIGZy b20gbnVtbXVsdGlyYW5nZV90ZXN0Oworc2VsZWN0IHJhbmdlX2ludGVyc2VjdF9hZ2cobm1y KSBmcm9tICh2YWx1ZXMgKCd7WzEsM119Jzo6bnVtbXVsdGlyYW5nZSksICgne1s2LDEyXX0n OjpudW1tdWx0aXJhbmdlKSkgdChubXIpOworc2VsZWN0IHJhbmdlX2ludGVyc2VjdF9hZ2co bm1yKSBmcm9tICh2YWx1ZXMgKCd7WzEsNl19Jzo6bnVtbXVsdGlyYW5nZSksICgne1szLDEy XX0nOjpudW1tdWx0aXJhbmdlKSkgdChubXIpOworc2VsZWN0IHJhbmdlX2ludGVyc2VjdF9h Z2cobm1yKSBmcm9tICh2YWx1ZXMgKCd7WzEsNl0sIFsxMCwxMl19Jzo6bnVtbXVsdGlyYW5n ZSksICgne1s0LDE0XX0nOjpudW1tdWx0aXJhbmdlKSkgdChubXIpOwogLS0gdGVzdCB3aXRo IGp1c3Qgb25lIGlucHV0Ogorc2VsZWN0IHJhbmdlX2ludGVyc2VjdF9hZ2cobm1yKSBmcm9t ICh2YWx1ZXMgKCd7fSc6Om51bW11bHRpcmFuZ2UpKSB0KG5tcik7CiBzZWxlY3QgcmFuZ2Vf aW50ZXJzZWN0X2FnZyhubXIpIGZyb20gKHZhbHVlcyAoJ3tbMSwyXX0nOjpudW1tdWx0aXJh bmdlKSkgdChubXIpOworc2VsZWN0IHJhbmdlX2ludGVyc2VjdF9hZ2cobm1yKSBmcm9tICh2 YWx1ZXMgKCd7WzEsNl0sIFsxMCwxMl19Jzo6bnVtbXVsdGlyYW5nZSkpIHQobm1yKTsKIHNl bGVjdCByYW5nZV9pbnRlcnNlY3RfYWdnKG5tcikgZnJvbSBudW1tdWx0aXJhbmdlX3Rlc3Qg d2hlcmUgbm1yIEA+IDQuMDsKIAogY3JlYXRlIHRhYmxlIG51bW11bHRpcmFuZ2VfdGVzdDIo bm1yIG51bW11bHRpcmFuZ2UpOwogY3JlYXRlIGluZGV4IG51bW11bHRpcmFuZ2VfdGVzdDJf aGFzaF9pZHggb24gbnVtbXVsdGlyYW5nZV90ZXN0MiB1c2luZyBoYXNoIChubXIpOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvb3ByX3Nhbml0eS5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9vcHJfc2FuaXR5LnNxbAppbmRleCAyYjI5Mjg1MWUzLi5iYmNmZmRh MjI4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9vcHJfc2FuaXR5LnNxbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9vcHJfc2FuaXR5LnNxbApAQCAtMTUyLDggKzE1 Miw5IEBAIFdIRVJFIHAxLm9pZCAhPSBwMi5vaWQgQU5ECiAgICAgcDEucHJvc3JjIE5PVCBM SUtFIEUncmFuZ2VcXF9jb25zdHJ1Y3Rvcl8nIEFORAogICAgIHAyLnByb3NyYyBOT1QgTElL RSBFJ3JhbmdlXFxfY29uc3RydWN0b3JfJyBBTkQKICAgICBwMS5wcm9zcmMgTk9UIExJS0Ug RSdtdWx0aXJhbmdlXFxfY29uc3RydWN0b3JfJyBBTkQKICAgICBwMi5wcm9zcmMgTk9UIExJ S0UgRSdtdWx0aXJhbmdlXFxfY29uc3RydWN0b3JfJyBBTkQKKyAgICBwMi5wcm9zcmMgTk9U IExJS0UgRSdyYW5nZVxcX2FnZ1xcX2ZpbmFsZm4nIEFORAogICAgIChwMS5wcm9hcmd0eXBl c1sxXSA8IHAyLnByb2FyZ3R5cGVzWzFdKQogT1JERVIgQlkgMSwgMjsKIAogU0VMRUNUIERJ U1RJTkNUIHAxLnByb2FyZ3R5cGVzWzJdOjpyZWd0eXBlLCBwMi5wcm9hcmd0eXBlc1syXTo6 cmVndHlwZQotLSAKMi4yNS4xCgo= --------------NzdMeJqR7AeKVn3e6kXv3Psm--