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 1wDFqb-002maq-2O for pgsql-bugs@arkaria.postgresql.org; Thu, 16 Apr 2026 06:05: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 1wDFqa-004Awb-0B for pgsql-bugs@arkaria.postgresql.org; Thu, 16 Apr 2026 06:05: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 1wDFqZ-004AwT-1X for pgsql-bugs@lists.postgresql.org; Thu, 16 Apr 2026 06:05:03 +0000 Received: from mail-oo1-xc36.google.com ([2607:f8b0:4864:20::c36]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wDFqX-00000001Gfo-1VmD for pgsql-bugs@lists.postgresql.org; Thu, 16 Apr 2026 06:05:02 +0000 Received: by mail-oo1-xc36.google.com with SMTP id 006d021491bc7-67e09232daeso4451813eaf.2 for ; Wed, 15 Apr 2026 23:05:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776319501; cv=none; d=google.com; s=arc-20240605; b=C8n750JgH6/hsueJMzOtN3sjRhNLFWLpSiwAEGzpWwh2awLbk+4vr/zXJ+l4fqazxm Lv6kG8Zr4D6YW6Hwof39p1fVOJGTjXfrviT8qGydEaGYeeefzLvV9lU4SN1uovEhxcdH rB12fWkGiaVmy1ursMiRXxHbZb8YfLHn0JnmosOAi2XpVu6B4URevRirvw6Fd9CDi3Ds nvcERk6TWKkeLVgNamFhm1u9rW8s03/CQyCXi8n63pWf2mVFMxb6XvXxfeF6tSpLGsBN TnwvmUUITlY/0jwx1jjnfspatdTd8aGQJ0XTY2GerzMGVrpKjmy/gFc5ZsH5ReTuowmK hxBw== 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=+iEgf3L9qpsGR4+2cQUB8Q4A6BsozundP06W+LL5uX0=; fh=DWVJp4+cfzpDmxl38+Dn4RATgEs/0C4x9OiwfSeevW4=; b=RT5AzScSF4NYsyRI4W/5Ckcd5G2iTkSLea3f0DN++E0Dhhl/jWxefnE1ALBeljyaGo figkDAdsk0BeR+VQ4wP+qbXpCaIUkxDT1Y8qCUfPGojfAlZ2xWh5rbEzit2cPAlDhmiR 8+Zf5iTPyq6lWmD6pC/vFWWjreL0ujMVWtEbbuWwvPDdsPpnX3UWLvSMia5Run5WMCxA L5vnRYthd417zO8GVpxUC7LJRpe8LQOajlbImbj7iFKj98XEEDigWvjLXU59kOCSfLO3 nAgKfXFsX2kQtNoASpjeKDAwwtlcfZoMautCC5+ijF9GYat7brrQJ2Jmg1v+TgRXdYk+ IdkQ==; 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=gmail.com; s=20251104; t=1776319501; x=1776924301; 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=+iEgf3L9qpsGR4+2cQUB8Q4A6BsozundP06W+LL5uX0=; b=EIETikIK0MqO9MlgOUgSIo80H8Q0W3zSwejKyeHTcAsNjHwZYhisVkT3YHdHygRlSQ 74f8VHPdm7/mp4BmeMzefOrTE/dJo3dYzwO/pzzU95BW4JoBWGCxr29Sr73ioqJdJ9SH rg48jcnzUu2K7EmrP880pAoh3S35j5x/xtD6/cz3cGb1P4P+jm4ceb9+ahPzRygZxFg/ y2q8SFwdCl2QK6IcI2xBg1FNcA3A7VBBumUrE6pnww/IZLGKhhVnrnRXfn2DoiW6byQj iPDhI+cTDtHJRtdnKJRx9XGDgyEGFz3b8KYeUG865nq1AuzeVRu6aLfTOVp6nsMYHQ98 +hag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776319501; x=1776924301; 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=+iEgf3L9qpsGR4+2cQUB8Q4A6BsozundP06W+LL5uX0=; b=fp41QG3S3vxryZ3Wt74zre+upJDlmPypHGT+FxCCW2y1NqsF1s0ipP/F2VIWJRP9L+ wtvNgGCCeFKNXm20MXAW2H5hooz93b9JCBEhBDbmniyEU7yHCGOiIowceygJZSO2sqpj gVT6LtRxeNT1dR4iEjyU3qZPY3JlChNK2zz1bFyIyW1Wfmhx1IizyZ0U19+hDD/2LZ+s KYXUGBadsGpGLIwl1Xv2jgjzZUbndqBYiFt664NQYeoN6mHYIk07FSwkxB+d6BUV5VJt juxTw8fEIaYQT7W2qhrQq6RD6MY8fA+PXISudAhKfnXa8tn0IIX6HZa1hzzc/wIGyQG2 oRXw== X-Forwarded-Encrypted: i=1; AFNElJ/rdeI5/ewbdYg5ujwuAKjwZdN3DYcoYh6tqAk0Y8YxTMBfJCsdsANZXpbFLD/FpqEJAzl0SmAoNHL/@lists.postgresql.org X-Gm-Message-State: AOJu0Yygz6KBt29LMSg7JdXCSpOcXfxAKnuH6sxTuevwv+XdN33j2Xct K66e1U7jfCsLXeQcxz00UFIsllF6IU+/1uJv6lXs+g7qWm6XPgcZB/MOhZtnurg/w8t6FjsgI99 O6tNPQA8cmyoRDMjaOKXRGcRT2WYMxjg= X-Gm-Gg: AeBDiesWSpl0Qjfy5/78pplre4h9hG9tHjiEC2ArMwC8u2xm2cT4XlLPH29O5HQI4sf jQMzRnqVCeDD30gVEAu4ALTY1kD5/PzUBCCZc+/pK36O/mRwAgwPxI9B1B5Q2NZfPg3CszcXBUd dUwIn5OXjMr37JhpDGgdhFNzRkwpN/VG1Vvn5zNh8dli0ZVqg3oQcqYcMV/ue8f0iv1VE47tX3l zpXyRp6JZRg6LD0yeKSD0BxCkzoQg5CVhM6uF9ivzG7zvFqtGtE2GBP7tQfTzSDo3+sKknLH0ix TyT1iUW2SQ== X-Received: by 2002:a05:6820:818d:b0:67e:36e9:79ac with SMTP id 006d021491bc7-68be691ba11mr11533675eaf.27.1776319500999; Wed, 15 Apr 2026 23:05:00 -0700 (PDT) MIME-Version: 1.0 References: <19418-591ba1f29862ef5b@postgresql.org> <2abdb464-27f5-4759-bb0b-f09ab5b5ceab@postgresfriends.org> <501040.1772433449@sss.pgh.pa.us> In-Reply-To: From: Richard Guo Date: Thu, 16 Apr 2026 15:04:49 +0900 X-Gm-Features: AQROBzAqi_hzaD_WGFRcGnF7llribMAwBOVApiAf4iX1iJd2a-GTTo6zmgP5mZk Message-ID: Subject: Re: BUG #19418: SQL/JSON JSON_VALUE() does not conform to ISO/IEC 9075-2:2023(E) 6.34 To: Tom Lane Cc: Vik Fearing , lukas.eder@gmail.com, pgsql-bugs@lists.postgresql.org, =?UTF-8?Q?=C3=81lvaro_Herrera?= Content-Type: multipart/mixed; boundary="000000000000dd8937064f8d9c47" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dd8937064f8d9c47 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 3, 2026 at 11:32=E2=80=AFPM Richard Guo wrote: > On Tue, Mar 3, 2026 at 10:03=E2=80=AFAM Richard Guo wrote: > > That is a good point I hadn't considered. So I think the ideal fix is > > to have the parser preserve the user's original JSON_ARRAY(query) > > syntax as much as possible, and then defer the JSON_ARRAYAGG rewrite > > trick to the planner, perhaps during expression preprocessing. > I tried hacking on this idea to see how it would look in practice, and > here is what I got. After a second look at this approach, I don't like it very much. It manually constructed the new querytree, including Aggref, RangeTblEntry, and JsonConstructorExpr nodes, during planning, bypassing parse analysis entirely. This is essentially repeating the parser's work by hand in the planner, which is fragile and prone to failing to handle all cases correctly. Maybe a simpler way is to keep the JSON_ARRAYAGG rewrite trick in the parser, as the current master does, but wrap the result in a COALESCE to handle the empty-set case. We can preserve a copy of the user's original subquery in a new field of JsonConstructorExpr, and then ruleutils.c can use this field to deparse the original JSON_ARRAY(SELECT ...) syntax for view definitions. You may think this would introduce extra transform work, but it wouldn't: the current master already transforms the original subquery to validate the single-column constraint, then throws the result away. We simply keep it instead. I tried this idea and ended up with the attached. - Richard --000000000000dd8937064f8d9c47 Content-Type: application/octet-stream; name="v4-0001-Fix-JSON_ARRAY-query-empty-set-handling-and-view-.patch" Content-Disposition: attachment; filename="v4-0001-Fix-JSON_ARRAY-query-empty-set-handling-and-view-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo12r8z10 RnJvbSAyODgzZDQ3YWMwY2NkMGYxNGU4ZmIxZjg0ZDMzNGI2ZTMzMzFhNWM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAyIE1hciAyMDI2IDEyOjExOjAwICswOTAwClN1YmplY3Q6IFtQQVRDSCB2NF0g Rml4IEpTT05fQVJSQVkocXVlcnkpIGVtcHR5IHNldCBoYW5kbGluZyBhbmQgdmlldwogZGVwYXJz aW5nCgpBY2NvcmRpbmcgdG8gdGhlIFNRTC9KU09OIHN0YW5kYXJkLCBKU09OX0FSUkFZKHF1ZXJ5 KSBtdXN0IHJldHVybiBhbgplbXB0eSBKU09OIGFycmF5ICgnW10nKSB3aGVuIHRoZSBzdWJxdWVy eSByZXR1cm5zIHplcm8gcm93cy4KClByZXZpb3VzbHksIHRoZSBwYXJzZXIgcmV3cm90ZSBKU09O X0FSUkFZKHF1ZXJ5KSBpbnRvIGEgSlNPTl9BUlJBWUFHRwphZ2dyZWdhdGUgZnVuY3Rpb24uICBC ZWNhdXNlIHRoaXMgYWdncmVnYXRlIGV2YWx1YXRlcyB0byBOVUxMIG92ZXIgYW4KZW1wdHkgc2V0 IHdpdGhvdXQgYSBHUk9VUCBCWSBjbGF1c2UsIHRoZSBjb25zdHJ1Y3RvciBlcnJvbmVvdXNseQpy ZXR1cm5lZCBOVUxMLiAgQWRkaXRpb25hbGx5LCB0aGlzIHByZW1hdHVyZSByZXdyaXRlIGJha2Vk IHBoeXNpY2FsCmltcGxlbWVudGF0aW9uIGRldGFpbHMgaW50byB0aGUgY2F0YWxvZywgcHJldmVu dGluZyBydWxldXRpbHMuYyBmcm9tCmRlcGFyc2luZyB0aGUgb3JpZ2luYWwgc3ludGF4IGZvciB2 aWV3cy4KClRoaXMgcGF0Y2ggcmVzb2x2ZXMgYm90aCBpc3N1ZXMgYnkgaW50cm9kdWNpbmcgYSBu ZXcKSlNDVE9SX0pTT05fQVJSQVlfUVVFUlkgY29uc3RydWN0b3IgdHlwZS4gIFRoZSBwYXJzZXIg YnVpbGRzIHRoZQpleGVjdXRhYmxlIGZvcm0gLS0tIGEgQ09BTEVTQ0Utd3JhcHBlZCBKU09OX0FS UkFZQUdHIHN1YnF1ZXJ5IC0tLSBmcm9tCnJhdyBwYXJzZSBub2RlcyB2aWEgdHJhbnNmb3JtRXhw clJlY3Vyc2UsIGFuZCBzdG9yZXMgaXQgaW4gdGhlIGZ1bmMKZmllbGQuICBUaGUgb3JpZ2luYWwg dHJhbnNmb3JtZWQgUXVlcnkgaXMga2VwdCBpbiBhIG5ldyBvcmlnX3F1ZXJ5CmZpZWxkIHNvIHRo YXQgcnVsZXV0aWxzLmMgY2FuIGRlcGFyc2UgdGhlIG9yaWdpbmFsIHN5bnRheCBmb3Igdmlld3Mu CkR1cmluZyBwbGFubmluZywgZXZhbF9jb25zdF9leHByZXNzaW9ucyByZXBsYWNlcyB0aGUgbm9k ZSB3aXRoIHRoZQpwcmUtYnVpbHQgZnVuYyBleHByZXNzaW9uLgotLS0KIGRvYy9zcmMvc2dtbC9m dW5jL2Z1bmMtanNvbi5zZ21sICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL25vZGVzL25vZGVG dW5jcy5jICAgICAgICAgfCAgMTEgKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1 c2VzLmMgIHwgIDE1ICsrKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgICAgICAg fCAxMTEgKysrKysrKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jICAgICB8ICAxNSArKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAg ICAgICAgIHwgIDE0ICsrLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQg fCAxMTMgKysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Nx bGpzb24uc3FsICAgICAgfCAgNDkgKysrKysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgMzA0IGlu c2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9m dW5jL2Z1bmMtanNvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1qc29uLnNnbWwKaW5k ZXggNGNkMzM4ZmU2ZTMuLjNkOTdlMmI1Mzc1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVu Yy9mdW5jLWpzb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWpzb24uc2dtbApA QCAtNjIwLDcgKzYyMCw4IEBACiAgICAgICAgICB3aGljaCBtdXN0IGJlIGEgU0VMRUNUIHF1ZXJ5 IHJldHVybmluZyBhIHNpbmdsZSBjb2x1bW4uIElmCiAgICAgICAgICA8bGl0ZXJhbD5BQlNFTlQg T04gTlVMTDwvbGl0ZXJhbD4gaXMgc3BlY2lmaWVkLCBOVUxMIHZhbHVlcyBhcmUgaWdub3JlZC4K ICAgICAgICAgIFRoaXMgaXMgYWx3YXlzIHRoZSBjYXNlIGlmIGEKLSAgICAgICAgIDxyZXBsYWNl YWJsZT5xdWVyeV9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gaXMgdXNlZC4KKyAgICAgICAgIDxy ZXBsYWNlYWJsZT5xdWVyeV9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gaXMgdXNlZC4gSWYgdGhl IHF1ZXJ5IHJldHVybnMKKyAgICAgICAgIG5vIHJvd3MsIGFuIGVtcHR5IEpTT04gYXJyYXkgaXMg cmV0dXJuZWQuCiAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPHBhcmE+CiAgICAgICAgICA8bGl0 ZXJhbD5qc29uX2FycmF5KDEsdHJ1ZSxqc29uICd7ImEiOm51bGx9Jyk8L2xpdGVyYWw+CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVz L25vZGVGdW5jcy5jCmluZGV4IGMwYjg4MGVjMjMzLi5jY2EwYTZjMGE2NCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9k ZUZ1bmNzLmMKQEAgLTEwMDIsOCArMTAwMiwxNiBAQCBleHByQ29sbGF0aW9uKGNvbnN0IE5vZGUg KmV4cHIpCiAJCQl7CiAJCQkJY29uc3QgSnNvbkNvbnN0cnVjdG9yRXhwciAqY3RvciA9IChjb25z dCBKc29uQ29uc3RydWN0b3JFeHByICopIGV4cHI7CiAKKwkJCQkvKgorCQkJCSAqIENvbGxhdGlv biBjb21lcyBmcm9tIGNvZXJjaW9uIGlmIHByZXNlbnQsIG90aGVyd2lzZSBmcm9tCisJCQkJICog ZnVuYy4gIFRoZSBmdW5jIGZhbGxiYWNrIGlzIG5lZWRlZCBpbiBjYXNlcyB3aGVyZSBmdW5jCisJ CQkJICogYWxyZWFkeSBwcm9kdWNlcyB0aGUgZmluYWwgb3V0cHV0IHR5cGUgYW5kIG5vIGNvZXJj aW9uIGlzCisJCQkJICogbmVlZGVkIChjZi4gdGhlIEpTQ1RPUl9KU09OX0FSUkFZX1FVRVJZIGNh c2UpLgorCQkJCSAqLwogCQkJCWlmIChjdG9yLT5jb2VyY2lvbikKIAkJCQkJY29sbCA9IGV4cHJD b2xsYXRpb24oKE5vZGUgKikgY3Rvci0+Y29lcmNpb24pOworCQkJCWVsc2UgaWYgKGN0b3ItPmZ1 bmMpCisJCQkJCWNvbGwgPSBleHByQ29sbGF0aW9uKChOb2RlICopIGN0b3ItPmZ1bmMpOwogCQkJ CWVsc2UKIAkJCQkJY29sbCA9IEludmFsaWRPaWQ7CiAJCQl9CkBAIC0xMjY0LDggKzEyNzIsMTEg QEAgZXhwclNldENvbGxhdGlvbihOb2RlICpleHByLCBPaWQgY29sbGF0aW9uKQogCQkJewogCQkJ CUpzb25Db25zdHJ1Y3RvckV4cHIgKmN0b3IgPSAoSnNvbkNvbnN0cnVjdG9yRXhwciAqKSBleHBy OwogCisJCQkJLyogU2VlIGNvbW1lbnQgaW4gZXhwckNvbGxhdGlvbigpICovCiAJCQkJaWYgKGN0 b3ItPmNvZXJjaW9uKQogCQkJCQlleHByU2V0Q29sbGF0aW9uKChOb2RlICopIGN0b3ItPmNvZXJj aW9uLCBjb2xsYXRpb24pOworCQkJCWVsc2UgaWYgKGN0b3ItPmZ1bmMpCisJCQkJCWV4cHJTZXRD b2xsYXRpb24oKE5vZGUgKikgY3Rvci0+ZnVuYywgY29sbGF0aW9uKTsKIAkJCQllbHNlCiAJCQkJ CUFzc2VydCghT2lkSXNWYWxpZChjb2xsYXRpb24pKTsgLyogcmVzdWx0IGlzIGFsd2F5cyBhCiAJ CQkJCQkJCQkJCQkJICoganNvbltiXSB0eXBlICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1 c2VzLmMKaW5kZXggZmNmNmQ3ZmZmMmEuLmNkODYzMTFiYjBiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvY2xhdXNlcy5jCkBAIC0zMjQ0LDcgKzMyNDQsNiBAQCBldmFsX2NvbnN0X2V4cHJlc3Np b25zX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9Ci0KIAkJY2Fz ZSBUX0pzb25WYWx1ZUV4cHI6CiAJCQl7CiAJCQkJSnNvblZhbHVlRXhwciAqanZlID0gKEpzb25W YWx1ZUV4cHIgKikgbm9kZTsKQEAgLTMyNjgsNyArMzI2NywyMSBAQCBldmFsX2NvbnN0X2V4cHJl c3Npb25zX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQkJCQkJCQkJCSAgKEV4cHIgKikgZm9ybWF0 dGVkX2V4cHIsCiAJCQkJCQkJCQkJCQkgIGNvcHlPYmplY3QoanZlLT5mb3JtYXQpKTsKIAkJCX0K KwkJY2FzZSBUX0pzb25Db25zdHJ1Y3RvckV4cHI6CisJCQl7CisJCQkJSnNvbkNvbnN0cnVjdG9y RXhwciAqamNlID0gKEpzb25Db25zdHJ1Y3RvckV4cHIgKikgbm9kZTsKIAorCQkJCS8qCisJCQkJ ICogSlNDVE9SX0pTT05fQVJSQVlfUVVFUlkgY2FycmllcyBhIHByZS1idWlsdCBleGVjdXRhYmxl IGZvcm0KKwkJCQkgKiBpbiBpdHMgZnVuYyBmaWVsZCAoYSBDT0FMRVNDRS13cmFwcGVkIEpTT05f QVJSQVlBR0cKKwkJCQkgKiBzdWJxdWVyeSwgY29uc3RydWN0ZWQgZHVyaW5nIHBhcnNlIGFuYWx5 c2lzKS4gIFJlcGxhY2UgdGhlCisJCQkJICogbm9kZSB3aXRoIHRoYXQgZXhwcmVzc2lvbiBhbmQg Y29udGludWUgc2ltcGxpZnlpbmcuCisJCQkJICovCisJCQkJaWYgKGpjZS0+dHlwZSA9PSBKU0NU T1JfSlNPTl9BUlJBWV9RVUVSWSkKKwkJCQkJcmV0dXJuIGV2YWxfY29uc3RfZXhwcmVzc2lvbnNf bXV0YXRvcigoTm9kZSAqKSBqY2UtPmZ1bmMsCisJCQkJCQkJCQkJCQkJCSAgY29udGV4dCk7CisJ CQl9CisJCQlicmVhazsKIAkJY2FzZSBUX1N1YlBsYW46CiAJCWNhc2UgVF9BbHRlcm5hdGl2ZVN1 YlBsYW46CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgYi9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IGY1MzVmM2I5MzUxLi5jM2M3YWEy OTcyMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYworKysgYi9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCkBAIC0zNzkyLDI0ICszNzkyLDUzIEBAIHRy YW5zZm9ybUpzb25PYmplY3RDb25zdHJ1Y3RvcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25PYmpl Y3RDb25zdHJ1Y3RvciAqY3RvcikKIH0KIAogLyoKLSAqIFRyYW5zZm9ybSBKU09OX0FSUkFZKHF1 ZXJ5IFtGT1JNQVRdIFtSRVRVUk5JTkddIFtPTiBOVUxMXSkgaW50bwotICogIChTRUxFQ1QgIEpT T05fQVJSQVlBR0coYSAgW0ZPUk1BVF0gW1JFVFVSTklOR10gW09OIE5VTExdKSBGUk9NIChxdWVy eSkgcShhKSkKKyAqIFRyYW5zZm9ybSBKU09OX0FSUkFZKHN1YnF1ZXJ5KSBjb25zdHJ1Y3Rvci4K KyAqCisgKiBKU09OX0FSUkFZKHN1YnF1ZXJ5KSBpcyB0cmFuc2Zvcm1lZCBpbnRvIGEgSnNvbkNv bnN0cnVjdG9yRXhwciBub2RlIG9mIHR5cGUKKyAqIEpTQ1RPUl9KU09OX0FSUkFZX1FVRVJZLiAg VGhlIG5vZGUgY2FycmllczoKKyAqCisgKiAgLSBmdW5jOiB0aGUgZXhlY3V0YWJsZSBmb3JtLCB3 aGljaCBpcyBhIENPQUxFU0NFIGV4cHJlc3Npb24gd3JhcHBpbmcgYQorICogICAgSlNPTl9BUlJB WUFHRyBzdWJxdWVyeToKKyAqCisgKiAgICAgICAgQ09BTEVTQ0UoKFNFTEVDVCBKU09OX0FSUkFZ QUdHKGEpIEZST00gKHN1YnF1ZXJ5KSBxKGEpKSwgJ1tdJykKKyAqCisgKiAgICBUaGUgQ09BTEVT Q0UgZW5zdXJlcyB0aGF0IGFuIGVtcHR5IHJlc3VsdCBzZXQgcHJvZHVjZXMgJ1tdJyByYXRoZXIg dGhhbgorICogICAgTlVMTCwgcGVyIHRoZSBTUUwvSlNPTiBzdGFuZGFyZC4KKyAqCisgKiAgLSBv cmlnX3F1ZXJ5OiB0aGUgdHJhbnNmb3JtZWQgUXVlcnkgb2YgdGhlIHVzZXIncyBvcmlnaW5hbCBz dWJxdWVyeSwgc28KKyAqICAgIHRoYXQgcnVsZXV0aWxzLmMgY2FuIGRlcGFyc2UgdGhlIG9yaWdp bmFsIEpTT05fQVJSQVkoU0VMRUNUIC4uLikgc3ludGF4CisgKiAgICBmb3IgdmlldyBkZWZpbml0 aW9ucy4KICAqLwogc3RhdGljIE5vZGUgKgogdHJhbnNmb3JtSnNvbkFycmF5UXVlcnlDb25zdHJ1 Y3RvcihQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCSAgIEpzb25BcnJheVF1ZXJ5Q29uc3Ry dWN0b3IgKmN0b3IpCiB7Ci0JU3ViTGluayAgICAqc3VibGluayA9IG1ha2VOb2RlKFN1Ykxpbmsp OwotCVNlbGVjdFN0bXQgKnNlbGVjdCA9IG1ha2VOb2RlKFNlbGVjdFN0bXQpOwotCVJhbmdlU3Vi c2VsZWN0ICpyYW5nZSA9IG1ha2VOb2RlKFJhbmdlU3Vic2VsZWN0KTsKLQlBbGlhcwkgICAqYWxp YXMgPSBtYWtlTm9kZShBbGlhcyk7Ci0JUmVzVGFyZ2V0ICAqdGFyZ2V0ID0gbWFrZU5vZGUoUmVz VGFyZ2V0KTsKLQlKc29uQXJyYXlBZ2cgKmFnZyA9IG1ha2VOb2RlKEpzb25BcnJheUFnZyk7Ci0J Q29sdW1uUmVmICAqY29scmVmID0gbWFrZU5vZGUoQ29sdW1uUmVmKTsKIAlRdWVyeQkgICAqcXVl cnk7CiAJUGFyc2VTdGF0ZSAqcXBzdGF0ZTsKKwlTdWJMaW5rICAgICpzdWJsaW5rOworCVNlbGVj dFN0bXQgKnNlbGVjdDsKKwlSYW5nZVN1YnNlbGVjdCAqcmFuZ2U7CisJQWxpYXMJICAgKmFsaWFz OworCVJlc1RhcmdldCAgKnRhcmdldDsKKwlKc29uQXJyYXlBZ2cgKmFnZzsKKwlDb2x1bW5SZWYg ICpjb2xyZWY7CisJTm9kZQkgICAqZXhlY19leHByOworCUNvYWxlc2NlRXhwciAqY29hbGVzY2U7 CisJQ29uc3QJICAgKmVtcHR5X2NvbnN0OworCU9pZAkJCXJlc3VsdF90eXBlOworCU9pZAkJCXR5 cGlucHV0OworCU9pZAkJCXR5cGlvcGFyYW07CisJaW50MTYJCXR5cGxlbjsKKwlib29sCQl0eXBi eXZhbDsKKwlKc29uUmV0dXJuaW5nICpyZXR1cm5pbmc7CisJTGlzdAkgICAqYXJnczsKKwlOb2Rl CSAgICpyZXN1bHQ7CiAKLQkvKiBUcmFuc2Zvcm0gcXVlcnkgb25seSBmb3IgY291bnRpbmcgdGFy Z2V0IGxpc3QgZW50cmllcy4gKi8KKwkvKgorCSAqIFRyYW5zZm9ybSBhIGNvcHkgb2YgdGhlIHN1 YnF1ZXJ5IHRvIHZhbGlkYXRlIHRoZSBzaW5nbGUtY29sdW1uCisJICogY29uc3RyYWludCBhbmQg dG8gb2J0YWluIHRoZSB0cmFuc2Zvcm1lZCBRdWVyeSBmb3IgZGVwYXJzaW5nLiAgVGhpcworCSAq IHVzZXMgYSBwcml2YXRlIFBhcnNlU3RhdGUgc28gaXQgZG9lc24ndCBhZmZlY3QgdGhlIG1haW4g cGFyc2UgY29udGV4dC4KKwkgKi8KIAlxcHN0YXRlID0gbWFrZV9wYXJzZXN0YXRlKHBzdGF0ZSk7 CiAKIAlxdWVyeSA9IHRyYW5zZm9ybVN0bXQocXBzdGF0ZSwgY29weU9iamVjdChjdG9yLT5xdWVy eSkpOwpAQCAtMzgyMiwxNCArMzg1MSwyMCBAQCB0cmFuc2Zvcm1Kc29uQXJyYXlRdWVyeUNvbnN0 cnVjdG9yKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAogCWZyZWVfcGFyc2VzdGF0ZShxcHN0YXRlKTsK IAorCS8qCisJICogQnVpbGQgdGhlIGV4ZWN1dGFibGUgZm9ybSBieSBjb25zdHJ1Y3RpbmcgcXVl cnk6CisJICoKKwkgKiAoU0VMRUNUIEpTT05fQVJSQVlBR0coYSBbRk9STUFUXSBbUkVUVVJOSU5H XSkgRlJPTSAoc3VicXVlcnkpIHEoYSkpCisJICoKKwkgKiAuLi4gdXNpbmcgcmF3IHBhcnNlIHRy ZWUgbm9kZXMsIHRoZW4gdHJhbnNmb3JtaW5nIHZpYQorCSAqIHRyYW5zZm9ybUV4cHJSZWN1cnNl LgorCSAqLworCWNvbHJlZiA9IG1ha2VOb2RlKENvbHVtblJlZik7CiAJY29scmVmLT5maWVsZHMg PSBsaXN0X21ha2UyKG1ha2VTdHJpbmcocHN0cmR1cCgicSIpKSwKIAkJCQkJCQkJbWFrZVN0cmlu Zyhwc3RyZHVwKCJhIikpKTsKIAljb2xyZWYtPmxvY2F0aW9uID0gY3Rvci0+bG9jYXRpb247CiAK LQkvKgotCSAqIE5vIGZvcm1hdHRpbmcgbmVjZXNzYXJ5LCBzbyBzZXQgZm9ybWF0dGVkX2V4cHIg dG8gYmUgdGhlIHNhbWUgYXMKLQkgKiByYXdfZXhwci4KLQkgKi8KKwlhZ2cgPSBtYWtlTm9kZShK c29uQXJyYXlBZ2cpOwogCWFnZy0+YXJnID0gbWFrZUpzb25WYWx1ZUV4cHIoKEV4cHIgKikgY29s cmVmLCAoRXhwciAqKSBjb2xyZWYsCiAJCQkJCQkJCSBjdG9yLT5mb3JtYXQpOwogCWFnZy0+YWJz ZW50X29uX251bGwgPSBjdG9yLT5hYnNlbnRfb25fbnVsbDsKQEAgLTM4MzgsMjEgKzM4NzMsMjYg QEAgdHJhbnNmb3JtSnNvbkFycmF5UXVlcnlDb25zdHJ1Y3RvcihQYXJzZVN0YXRlICpwc3RhdGUs CiAJYWdnLT5jb25zdHJ1Y3Rvci0+b3V0cHV0ID0gY3Rvci0+b3V0cHV0OwogCWFnZy0+Y29uc3Ry dWN0b3ItPmxvY2F0aW9uID0gY3Rvci0+bG9jYXRpb247CiAKKwl0YXJnZXQgPSBtYWtlTm9kZShS ZXNUYXJnZXQpOwogCXRhcmdldC0+bmFtZSA9IE5VTEw7CiAJdGFyZ2V0LT5pbmRpcmVjdGlvbiA9 IE5JTDsKIAl0YXJnZXQtPnZhbCA9IChOb2RlICopIGFnZzsKIAl0YXJnZXQtPmxvY2F0aW9uID0g Y3Rvci0+bG9jYXRpb247CiAKKwlhbGlhcyA9IG1ha2VOb2RlKEFsaWFzKTsKIAlhbGlhcy0+YWxp YXNuYW1lID0gcHN0cmR1cCgicSIpOwogCWFsaWFzLT5jb2xuYW1lcyA9IGxpc3RfbWFrZTEobWFr ZVN0cmluZyhwc3RyZHVwKCJhIikpKTsKIAorCXJhbmdlID0gbWFrZU5vZGUoUmFuZ2VTdWJzZWxl Y3QpOwogCXJhbmdlLT5sYXRlcmFsID0gZmFsc2U7CiAJcmFuZ2UtPnN1YnF1ZXJ5ID0gY3Rvci0+ cXVlcnk7CiAJcmFuZ2UtPmFsaWFzID0gYWxpYXM7CiAKKwlzZWxlY3QgPSBtYWtlTm9kZShTZWxl Y3RTdG10KTsKIAlzZWxlY3QtPnRhcmdldExpc3QgPSBsaXN0X21ha2UxKHRhcmdldCk7CiAJc2Vs ZWN0LT5mcm9tQ2xhdXNlID0gbGlzdF9tYWtlMShyYW5nZSk7CiAKKwlzdWJsaW5rID0gbWFrZU5v ZGUoU3ViTGluayk7CiAJc3VibGluay0+c3ViTGlua1R5cGUgPSBFWFBSX1NVQkxJTks7CiAJc3Vi bGluay0+c3ViTGlua0lkID0gMDsKIAlzdWJsaW5rLT50ZXN0ZXhwciA9IE5VTEw7CkBAIC0zODYw LDcgKzM5MDAsNDggQEAgdHJhbnNmb3JtSnNvbkFycmF5UXVlcnlDb25zdHJ1Y3RvcihQYXJzZVN0 YXRlICpwc3RhdGUsCiAJc3VibGluay0+c3Vic2VsZWN0ID0gKE5vZGUgKikgc2VsZWN0OwogCXN1 YmxpbmstPmxvY2F0aW9uID0gY3Rvci0+bG9jYXRpb247CiAKLQlyZXR1cm4gdHJhbnNmb3JtRXhw clJlY3Vyc2UocHN0YXRlLCAoTm9kZSAqKSBzdWJsaW5rKTsKKwlleGVjX2V4cHIgPSB0cmFuc2Zv cm1FeHByUmVjdXJzZShwc3RhdGUsIChOb2RlICopIHN1YmxpbmspOworCisJLyoKKwkgKiBXcmFw IGluIENPQUxFU0NFIHNvIHRoYXQgYW4gZW1wdHkgcmVzdWx0IHNldCBwcm9kdWNlcyAnW10nIHJh dGhlciB0aGFuCisJICogTlVMTC4gIFRoZSBlbXB0eS1hcnJheSBjb25zdGFudCBpcyBjcmVhdGVk IGluIHRoZSBvdXRwdXQgdHlwZSBzbyB0aGF0CisJICogdGhlIENPQUxFU0NFIGFyZ3VtZW50cyBo YXZlIGNvbnNpc3RlbnQgdHlwZXMuCisJICovCisJcmVzdWx0X3R5cGUgPSBleHByVHlwZShleGVj X2V4cHIpOworCWdldFR5cGVJbnB1dEluZm8ocmVzdWx0X3R5cGUsICZ0eXBpbnB1dCwgJnR5cGlv cGFyYW0pOworCWdldF90eXBsZW5ieXZhbChyZXN1bHRfdHlwZSwgJnR5cGxlbiwgJnR5cGJ5dmFs KTsKKworCWVtcHR5X2NvbnN0ID0gbWFrZUNvbnN0KHJlc3VsdF90eXBlLAorCQkJCQkJCS0xLAor CQkJCQkJCWV4cHJDb2xsYXRpb24oZXhlY19leHByKSwKKwkJCQkJCQkoaW50KSB0eXBsZW4sCisJ CQkJCQkJT2lkSW5wdXRGdW5jdGlvbkNhbGwodHlwaW5wdXQsICJbXSIsCisJCQkJCQkJCQkJCQkg dHlwaW9wYXJhbSwgLTEpLAorCQkJCQkJCWZhbHNlLAorCQkJCQkJCXR5cGJ5dmFsKTsKKworCWNv YWxlc2NlID0gbWFrZU5vZGUoQ29hbGVzY2VFeHByKTsKKwljb2FsZXNjZS0+Y29hbGVzY2V0eXBl ID0gcmVzdWx0X3R5cGU7CisJY29hbGVzY2UtPmNvYWxlc2NlY29sbGlkID0gZXhwckNvbGxhdGlv bihleGVjX2V4cHIpOworCWNvYWxlc2NlLT5hcmdzID0gbGlzdF9tYWtlMihleGVjX2V4cHIsIGVt cHR5X2NvbnN0KTsKKwljb2FsZXNjZS0+bG9jYXRpb24gPSBjdG9yLT5sb2NhdGlvbjsKKworCS8q CisJICogQnVpbGQgdGhlIEpTQ1RPUl9KU09OX0FSUkFZX1FVRVJZIG5vZGUuICBUaGUgQ09BTEVT Q0UgZ29lcyBpbiBmdW5jIGFzCisJICogdGhlIGV4ZWN1dGFibGUgZm9ybTsgZHVyaW5nIHBsYW5u aW5nLCBldmFsX2NvbnN0X2V4cHJlc3Npb25zIHJlcGxhY2VzCisJICogdGhlIGVudGlyZSBub2Rl IHdpdGggZnVuYy4gIFRoZSB0cmFuc2Zvcm1lZCBRdWVyeSBpcyBzdG9yZWQgaW4KKwkgKiBvcmln X3F1ZXJ5IHNvIHRoYXQgcnVsZXV0aWxzLmMgY2FuIGRlcGFyc2UgdGhlIG9yaWdpbmFsIHN5bnRh eC4KKwkgKi8KKwlhcmdzID0gbGlzdF9tYWtlMShsaW5pdGlhbF9ub2RlKFRhcmdldEVudHJ5LCBx dWVyeS0+dGFyZ2V0TGlzdCktPmV4cHIpOworCXJldHVybmluZyA9IHRyYW5zZm9ybUpzb25Db25z dHJ1Y3Rvck91dHB1dChwc3RhdGUsIGN0b3ItPm91dHB1dCwgYXJncyk7CisKKwlyZXN1bHQgPSBt YWtlSnNvbkNvbnN0cnVjdG9yRXhwcihwc3RhdGUsIEpTQ1RPUl9KU09OX0FSUkFZX1FVRVJZLAor CQkJCQkJCQkJIE5JTCwgKEV4cHIgKikgY29hbGVzY2UsIHJldHVybmluZywKKwkJCQkJCQkJCSBm YWxzZSwgY3Rvci0+YWJzZW50X29uX251bGwsCisJCQkJCQkJCQkgY3Rvci0+bG9jYXRpb24pOwor CSgoSnNvbkNvbnN0cnVjdG9yRXhwciAqKSByZXN1bHQpLT5vcmlnX3F1ZXJ5ID0gKE5vZGUgKikg cXVlcnk7CisKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGls cy5jCmluZGV4IDA5MGU4Y2MyOGMxLi4yZGRkNzAzNzJiMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxl dXRpbHMuYwpAQCAtMTIyODEsNiArMTIyODEsMjEgQEAgZ2V0X2pzb25fY29uc3RydWN0b3IoSnNv bkNvbnN0cnVjdG9yRXhwciAqY3RvciwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCQlnZXRf anNvbl9hZ2dfY29uc3RydWN0b3IoY3RvciwgY29udGV4dCwgIkpTT05fQVJSQVlBR0ciLCBmYWxz ZSk7CiAJCXJldHVybjsKIAl9CisJZWxzZSBpZiAoY3Rvci0+dHlwZSA9PSBKU0NUT1JfSlNPTl9B UlJBWV9RVUVSWSkKKwl7CisJCVF1ZXJ5CSAgICpxdWVyeSA9IGNhc3ROb2RlKFF1ZXJ5LCBjdG9y LT5vcmlnX3F1ZXJ5KTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIkpTT05fQVJSQVkoIik7 CisKKwkJZ2V0X3F1ZXJ5X2RlZihxdWVyeSwgYnVmLCBjb250ZXh0LT5uYW1lc3BhY2VzLCBOVUxM LCBmYWxzZSwKKwkJCQkJICBjb250ZXh0LT5wcmV0dHlGbGFncywgY29udGV4dC0+d3JhcENvbHVt biwKKwkJCQkJICBjb250ZXh0LT5pbmRlbnRMZXZlbCk7CisKKwkJZ2V0X2pzb25fY29uc3RydWN0 b3Jfb3B0aW9ucyhjdG9yLCBidWYpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7 CisKKwkJcmV0dXJuOworCX0KIAogCXN3aXRjaCAoY3Rvci0+dHlwZSkKIAl7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1u b2Rlcy5oCmluZGV4IDZkZmM5NDZjMjBiLi4wYzY5ZTMxZGE1NCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVz LmgKQEAgLTE3MTUsMTIgKzE3MTUsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvblZhbHVlRXhwcgog dHlwZWRlZiBlbnVtIEpzb25Db25zdHJ1Y3RvclR5cGUKIHsKIAlKU0NUT1JfSlNPTl9PQkpFQ1Qg PSAxLAotCUpTQ1RPUl9KU09OX0FSUkFZID0gMiwKLQlKU0NUT1JfSlNPTl9PQkpFQ1RBR0cgPSAz LAotCUpTQ1RPUl9KU09OX0FSUkFZQUdHID0gNCwKLQlKU0NUT1JfSlNPTl9QQVJTRSA9IDUsCi0J SlNDVE9SX0pTT05fU0NBTEFSID0gNiwKLQlKU0NUT1JfSlNPTl9TRVJJQUxJWkUgPSA3LAorCUpT Q1RPUl9KU09OX0FSUkFZLAorCUpTQ1RPUl9KU09OX0FSUkFZX1FVRVJZLAorCUpTQ1RPUl9KU09O X09CSkVDVEFHRywKKwlKU0NUT1JfSlNPTl9BUlJBWUFHRywKKwlKU0NUT1JfSlNPTl9QQVJTRSwK KwlKU0NUT1JfSlNPTl9TQ0FMQVIsCisJSlNDVE9SX0pTT05fU0VSSUFMSVpFLAogfSBKc29uQ29u c3RydWN0b3JUeXBlOwogCiAvKgpAQCAtMTczNSw2ICsxNzM2LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg SnNvbkNvbnN0cnVjdG9yRXhwcgogCUV4cHIJICAgKmZ1bmM7CQkJLyogdW5kZXJseWluZyBqc29u W2JdX3h4eCgpIGZ1bmN0aW9uIGNhbGwgKi8KIAlFeHByCSAgICpjb2VyY2lvbjsJCS8qIGNvZXJj aW9uIHRvIFJFVFVSTklORyB0eXBlICovCiAJSnNvblJldHVybmluZyAqcmV0dXJuaW5nOwkvKiBS RVRVUk5JTkcgY2xhdXNlICovCisJTm9kZQkgICAqb3JpZ19xdWVyeTsJCS8qIEpTT05fQVJSQVkg cXVlcnkgZm9yIGRlcGFyc2luZzsgbm90IHdhbGtlZCAqLwogCWJvb2wJCWFic2VudF9vbl9udWxs OyAvKiBBQlNFTlQgT04gTlVMTD8gKi8KIAlib29sCQl1bmlxdWU7CQkJLyogV0lUSCBVTklRVUUg S0VZUz8gKEpTT05fT0JKRUNUW0FHR10gb25seSkgKi8KIAlQYXJzZUxvYwlsb2NhdGlvbjsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0CmluZGV4IGYzYmU2OTgzOGJmLi5hMTQ5MzZh NGU2ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uLm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0CkBAIC03MjQsNiArNzI0 LDcgQEAgU0VMRUNUIEpTT05fQVJSQVkoSlNPTl9BUlJBWSgneyAiYSIgOiAxMjMgfScgRk9STUFU IEpTT04gUkVUVVJOSU5HIHRleHQpIEZPUk1BVAogIFtbeyAiYSIgOiAxMjMgfV1dCiAoMSByb3cp CiAKKy0tIEpTT05fQVJSQVkoc3VicXVlcnkpCiBTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBG Uk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkpOwogIGpzb25fYXJyYXkg CiAtLS0tLS0tLS0tLS0KQEAgLTc1Nyw2ICs3NTgsMzEgQEAgU0VMRUNUIEpTT05fQVJSQVkoV0lU SCB4IEFTIChTRUxFQ1QgMSkgVkFMVUVTIChUUlVFKSk7CiAgW3RydWVdCiAoMSByb3cpCiAKKy0t IEpTT05fQVJSQVkoc3VicXVlcnkpIHdpdGggZW1wdHkgcmVzdWx0IHNldAorU0VMRUNUIEpTT05f QVJSQVkoU0VMRUNUIDEgV0hFUkUgRkFMU0UpOworIGpzb25fYXJyYXkgCistLS0tLS0tLS0tLS0K KyBbXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMg KDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkgV0hFUkUgaSA+IDQpOworIGpzb25fYXJyYXkg CistLS0tLS0tLS0tLS0KKyBbXQorKDEgcm93KQorCistLSBKU09OX0FSUkFZKHN1YnF1ZXJ5KSB3 aXRoIGEgY29ycmVsYXRlZCBzdWJxdWVyeSBpbiB0aGUgV0hFUkUgY2xhdXNlCitTRUxFQ1QgKiBG Uk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSB0MShhKQorV0hFUkUgSlNPTl9BUlJB WSgKKyAgICBTRUxFQ1QgYiBGUk9NIChWQUxVRVMgKDEpLCAoMiksICgzKSkgdDIoYikgV0hFUkUg YiA9IHQxLmEKKyAgICBSRVRVUk5JTkcganNvbmIKKykgPSAnW10nOjpqc29uYjsKKyBhIAorLS0t CisgIAorIDQKKygyIHJvd3MpCisKIC0tIFNob3VsZCBmYWlsCiBTRUxFQ1QgSlNPTl9BUlJBWShT RUxFQ1QgRlJPTSAoVkFMVUVTICgxKSkgZm9vKGkpKTsKIEVSUk9SOiAgc3VicXVlcnkgbXVzdCBy ZXR1cm4gb25seSBvbmUgY29sdW1uCkBAIC0xMDkzLDcgKzExMTksNyBAQCBTRUxFQ1QgSlNPTl9B UlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkg UkVUVVJOSU5HCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFJlc3VsdAotICAgT3V0cHV0 OiAoSW5pdFBsYW4gZXhwcl8xKS5jb2wxCisgICBPdXRwdXQ6IENPQUxFU0NFKChJbml0UGxhbiBl eHByXzEpLmNvbDEsICdbXSc6Ompzb25iKQogICAgSW5pdFBsYW4gZXhwcl8xCiAgICAgIC0+ICBB Z2dyZWdhdGUKICAgICAgICAgICAgT3V0cHV0OiBKU09OX0FSUkFZQUdHKCIqVkFMVUVTKiIuY29s dW1uMSBSRVRVUk5JTkcganNvbmIpCkBAIC0xMTA1LDkgKzExMzEsODggQEAgQ1JFQVRFIFZJRVcg anNvbl9hcnJheV9zdWJxdWVyeV92aWV3IEFTCiBTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBG Uk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkgUkVUVVJOSU5HIGpzb25i KTsKIFxzdiBqc29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXcKIENSRUFURSBPUiBSRVBMQUNFIFZJRVcg cHVibGljLmpzb25fYXJyYXlfc3VicXVlcnlfdmlldyBBUwotIFNFTEVDVCAoIFNFTEVDVCBKU09O X0FSUkFZQUdHKHEuYSBSRVRVUk5JTkcganNvbmIpIEFTICJqc29uX2FycmF5YWdnIgotICAgICAg ICAgICBGUk9NICggU0VMRUNUIGZvby5pCi0gICAgICAgICAgICAgICAgICAgRlJPTSAoIFZBTFVF UyAoMSksICgyKSwgKE5VTEw6OmludGVnZXIpLCAoNCkpIGZvbyhpKSkgcShhKSkgQVMgImpzb25f YXJyYXkiCisgU0VMRUNUIEpTT05fQVJSQVkoIFNFTEVDVCBmb28uaQorICAgICAgICAgICBGUk9N ICggVkFMVUVTICgxKSwgKDIpLCAoTlVMTDo6aW50ZWdlciksICg0KSkgZm9vKGkpIFJFVFVSTklO RyBqc29uYikgQVMgImpzb25fYXJyYXkiCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwg KDQpKSBmb28oaSkgT1JERVIgQlkgaSBMSU1JVCAzIFJFVFVSTklORyBqc29uYik7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorICAgT3V0cHV0OiBDT0FMRVNDRSgoSW5pdFBs YW4gZXhwcl8xKS5jb2wxLCAnW10nOjpqc29uYikKKyAgIEluaXRQbGFuIGV4cHJfMQorICAgICAt PiAgQWdncmVnYXRlCisgICAgICAgICAgIE91dHB1dDogSlNPTl9BUlJBWUFHRygiKlZBTFVFUyoi LmNvbHVtbjEgUkVUVVJOSU5HIGpzb25iKQorICAgICAgICAgICAtPiAgTGltaXQKKyAgICAgICAg ICAgICAgICAgT3V0cHV0OiAiKlZBTFVFUyoiLmNvbHVtbjEKKyAgICAgICAgICAgICAgICAgLT4g IFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiAiKlZBTFVFUyoiLmNvbHVtbjEK KyAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6ICIqVkFMVUVTKiIuY29sdW1uMQorICAg ICAgICAgICAgICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6ICIqVkFMVUVTKiIuY29sdW1uMQorKDEyIHJv d3MpCisKK0NSRUFURSBPUiBSRVBMQUNFIFZJRVcganNvbl9hcnJheV9zdWJxdWVyeV92aWV3IEFT CitTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxM KSwgKDQpKSBmb28oaSkgT1JERVIgQlkgaSBMSU1JVCAzIFJFVFVSTklORyBqc29uYik7Citcc3Yg anNvbl9hcnJheV9zdWJxdWVyeV92aWV3CitDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy5q c29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXcgQVMKKyBTRUxFQ1QgSlNPTl9BUlJBWSggU0VMRUNUIGZv by5pCisgICAgICAgICAgIEZST00gKCBWQUxVRVMgKDEpLCAoMiksIChOVUxMOjppbnRlZ2VyKSwg KDQpKSBmb28oaSkKKyAgICAgICAgICBPUkRFUiBCWSBmb28uaQorICAgICAgICAgTElNSVQgMyBS RVRVUk5JTkcganNvbmIpIEFTICJqc29uX2FycmF5IgorRFJPUCBWSUVXIGpzb25fYXJyYXlfc3Vi cXVlcnlfdmlldzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g KFZBTFVFUyAoMSksICgyKSwgKE5VTEwpLCAoNCkpIHQxKGEpCitXSEVSRSBKU09OX0FSUkFZKAor ICAgIFNFTEVDVCBiIEZST00gKFZBTFVFUyAoMSksICgyKSwgKDMpKSB0MihiKSBXSEVSRSBiID0g dDEuYQorICAgIFJFVFVSTklORyBqc29uYgorKSA9ICdbXSc6Ompzb25iOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorICAgT3V0cHV0 OiAiKlZBTFVFUyoiLmNvbHVtbjEKKyAgIEZpbHRlcjogKENPQUxFU0NFKChTdWJQbGFuIGV4cHJf MSksICdbXSc6Ompzb25iKSA9ICdbXSc6Ompzb25iKQorICAgU3ViUGxhbiBleHByXzEKKyAgICAg LT4gIEFnZ3JlZ2F0ZQorICAgICAgICAgICBPdXRwdXQ6IEpTT05fQVJSQVlBR0coIipWQUxVRVMq XzEiLmNvbHVtbjEgUkVUVVJOSU5HIGpzb25iKQorICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4g b24gIipWQUxVRVMqXzEiCisgICAgICAgICAgICAgICAgIE91dHB1dDogIipWQUxVRVMqXzEiLmNv bHVtbjEKKyAgICAgICAgICAgICAgICAgRmlsdGVyOiAoIipWQUxVRVMqXzEiLmNvbHVtbjEgPSAi KlZBTFVFUyoiLmNvbHVtbjEpCisoOSByb3dzKQorCitDUkVBVEUgVklFVyBqc29uX2FycmF5X3N1 YnF1ZXJ5X3ZpZXcgQVMKK1NFTEVDVCAqIEZST00gKFZBTFVFUyAoMSksICgyKSwgKE5VTEwpLCAo NCkpIHQxKGEpCitXSEVSRSBKU09OX0FSUkFZKAorICAgIFNFTEVDVCBiIEZST00gKFZBTFVFUyAo MSksICgyKSwgKDMpKSB0MihiKSBXSEVSRSBiID0gdDEuYQorICAgIFJFVFVSTklORyBqc29uYgor KSA9ICdbXSc6Ompzb25iOworXHN2IGpzb25fYXJyYXlfc3VicXVlcnlfdmlldworQ1JFQVRFIE9S IFJFUExBQ0UgVklFVyBwdWJsaWMuanNvbl9hcnJheV9zdWJxdWVyeV92aWV3IEFTCisgU0VMRUNU IGEKKyAgIEZST00gKCBWQUxVRVMgKDEpLCAoMiksIChOVUxMOjppbnRlZ2VyKSwgKDQpKSB0MShh KQorICBXSEVSRSBKU09OX0FSUkFZKCBTRUxFQ1QgdDIuYgorICAgICAgICAgICBGUk9NICggVkFM VUVTICgxKSwgKDIpLCAoMykpIHQyKGIpCisgICAgICAgICAgV0hFUkUgdDIuYiA9IHQxLmEgUkVU VVJOSU5HIGpzb25iKSA9ICdbXSc6Ompzb25iCitEUk9QIFZJRVcganNvbl9hcnJheV9zdWJxdWVy eV92aWV3OworLS0gSlNPTl9BUlJBWShzdWJxdWVyeSkgd2l0aCBSRVRVUk5JTkcgdGV4dAorRVhQ TEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJP TSAoVkFMVUVTICgxKSwgKDIpLCAoTlVMTCksICg0KSkgZm9vKGkpIFJFVFVSTklORyB0ZXh0KTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorICAgT3V0cHV0OiBDT0FMRVNDRSgo SW5pdFBsYW4gZXhwcl8xKS5jb2wxLCAnW10nOjp0ZXh0KQorICAgSW5pdFBsYW4gZXhwcl8xCisg ICAgIC0+ICBBZ2dyZWdhdGUKKyAgICAgICAgICAgT3V0cHV0OiBKU09OX0FSUkFZQUdHKCIqVkFM VUVTKiIuY29sdW1uMSBSRVRVUk5JTkcgdGV4dCkKKyAgICAgICAgICAgLT4gIFZhbHVlcyBTY2Fu IG9uICIqVkFMVUVTKiIKKyAgICAgICAgICAgICAgICAgT3V0cHV0OiAiKlZBTFVFUyoiLmNvbHVt bjEKKyg3IHJvd3MpCisKK0NSRUFURSBWSUVXIGpzb25fYXJyYXlfc3VicXVlcnlfdmlldyBBUwor U0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTICgxKSwgKDIpLCAoTlVMTCks ICg0KSkgZm9vKGkpIFJFVFVSTklORyB0ZXh0KTsKK1xzdiBqc29uX2FycmF5X3N1YnF1ZXJ5X3Zp ZXcKK0NSRUFURSBPUiBSRVBMQUNFIFZJRVcgcHVibGljLmpzb25fYXJyYXlfc3VicXVlcnlfdmll dyBBUworIFNFTEVDVCBKU09OX0FSUkFZKCBTRUxFQ1QgZm9vLmkKKyAgICAgICAgICAgRlJPTSAo IFZBTFVFUyAoMSksICgyKSwgKE5VTEw6OmludGVnZXIpLCAoNCkpIGZvbyhpKSBSRVRVUk5JTkcg dGV4dCkgQVMgImpzb25fYXJyYXkiCiBEUk9QIFZJRVcganNvbl9hcnJheV9zdWJxdWVyeV92aWV3 OwogLS0gVGVzdCBtdXRhYmlsaXR5IG9mIEpTT05fT0JKRUNUQUdHLCBKU09OX0FSUkFZQUdHLCBK U09OX0FSUkFZLCBKU09OX09CSkVDVAogY3JlYXRlIHR5cGUgY29tcDEgYXMgKGEgaW50LCBiIGRh dGUpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uLnNxbAppbmRleCA1YjJjNDY2MTU1Ni4uMDBlY2Y2MTYx YmYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3FsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3FsCkBAIC0xOTMsNiArMTkzLDcgQEAgU0VMRUNU IEpTT05fQVJSQVkoSlNPTl9BUlJBWSgneyAiYSIgOiAxMjMgfScgUkVUVVJOSU5HIHRleHQpKTsK IFNFTEVDVCBKU09OX0FSUkFZKEpTT05fQVJSQVkoJ3sgImEiIDogMTIzIH0nIEZPUk1BVCBKU09O IFJFVFVSTklORyB0ZXh0KSk7CiBTRUxFQ1QgSlNPTl9BUlJBWShKU09OX0FSUkFZKCd7ICJhIiA6 IDEyMyB9JyBGT1JNQVQgSlNPTiBSRVRVUk5JTkcgdGV4dCkgRk9STUFUIEpTT04pOwogCistLSBK U09OX0FSUkFZKHN1YnF1ZXJ5KQogU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFM VUVTICgxKSwgKDIpLCAoTlVMTCksICg0KSkgZm9vKGkpKTsKIFNFTEVDVCBKU09OX0FSUkFZKFNF TEVDVCBpIEZST00gKFZBTFVFUyAoTlVMTDo6aW50W10pLCAoJ3sxLDJ9JyksIChOVUxMKSwgKE5V TEwpLCAoJ3szLDR9JyksIChOVUxMKSkgZm9vKGkpKTsKIFNFTEVDVCBKU09OX0FSUkFZKFNFTEVD VCBpIEZST00gKFZBTFVFUyAoTlVMTDo6aW50W10pLCAoJ3sxLDJ9JyksIChOVUxMKSwgKE5VTEwp LCAoJ3szLDR9JyksIChOVUxMKSkgZm9vKGkpIFJFVFVSTklORyBqc29uYik7CkBAIC0yMDEsNiAr MjAyLDE3IEBAIFNFTEVDVCBKU09OX0FSUkFZKFNFTEVDVCBpIEZST00gKFZBTFVFUyAoTlVMTDo6 aW50W10pLCAoJ3sxLDJ9JyksIChOVUxMKSwgKE5VTEwpCiBTRUxFQ1QgSlNPTl9BUlJBWShTRUxF Q1QgaSBGUk9NIChWQUxVRVMgKDMpLCAoMSksIChOVUxMKSwgKDIpKSBmb28oaSkgT1JERVIgQlkg aSk7CiBTRUxFQ1QgSlNPTl9BUlJBWShXSVRIIHggQVMgKFNFTEVDVCAxKSBWQUxVRVMgKFRSVUUp KTsKIAorLS0gSlNPTl9BUlJBWShzdWJxdWVyeSkgd2l0aCBlbXB0eSByZXN1bHQgc2V0CitTRUxF Q1QgSlNPTl9BUlJBWShTRUxFQ1QgMSBXSEVSRSBGQUxTRSk7CitTRUxFQ1QgSlNPTl9BUlJBWShT RUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkgV0hFUkUg aSA+IDQpOworCistLSBKU09OX0FSUkFZKHN1YnF1ZXJ5KSB3aXRoIGEgY29ycmVsYXRlZCBzdWJx dWVyeSBpbiB0aGUgV0hFUkUgY2xhdXNlCitTRUxFQ1QgKiBGUk9NIChWQUxVRVMgKDEpLCAoMiks IChOVUxMKSwgKDQpKSB0MShhKQorV0hFUkUgSlNPTl9BUlJBWSgKKyAgICBTRUxFQ1QgYiBGUk9N IChWQUxVRVMgKDEpLCAoMiksICgzKSkgdDIoYikgV0hFUkUgYiA9IHQxLmEKKyAgICBSRVRVUk5J TkcganNvbmIKKykgPSAnW10nOjpqc29uYjsKKwogLS0gU2hvdWxkIGZhaWwKIFNFTEVDVCBKU09O X0FSUkFZKFNFTEVDVCBGUk9NIChWQUxVRVMgKDEpKSBmb28oaSkpOwogU0VMRUNUIEpTT05fQVJS QVkoU0VMRUNUIGksIGkgRlJPTSAoVkFMVUVTICgxKSkgZm9vKGkpKTsKQEAgLTM4NCw2ICszOTYs NDMgQEAgU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTICgxKSwgKDIpLCAo TlVMTCksICg0KSkgZm9vKGkpIFJFVFVSTklORwogCiBcc3YganNvbl9hcnJheV9zdWJxdWVyeV92 aWV3CiAKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBKU09OX0FSUkFZKFNF TEVDVCBpIEZST00gKFZBTFVFUyAoMSksICgyKSwgKE5VTEwpLCAoNCkpIGZvbyhpKSBPUkRFUiBC WSBpIExJTUlUIDMgUkVUVVJOSU5HIGpzb25iKTsKKworQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBq c29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXcgQVMKK1NFTEVDVCBKU09OX0FSUkFZKFNFTEVDVCBpIEZS T00gKFZBTFVFUyAoMSksICgyKSwgKE5VTEwpLCAoNCkpIGZvbyhpKSBPUkRFUiBCWSBpIExJTUlU IDMgUkVUVVJOSU5HIGpzb25iKTsKKworXHN2IGpzb25fYXJyYXlfc3VicXVlcnlfdmlldworCitE Uk9QIFZJRVcganNvbl9hcnJheV9zdWJxdWVyeV92aWV3OworCitFWFBMQUlOIChWRVJCT1NFLCBD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSB0 MShhKQorV0hFUkUgSlNPTl9BUlJBWSgKKyAgICBTRUxFQ1QgYiBGUk9NIChWQUxVRVMgKDEpLCAo MiksICgzKSkgdDIoYikgV0hFUkUgYiA9IHQxLmEKKyAgICBSRVRVUk5JTkcganNvbmIKKykgPSAn W10nOjpqc29uYjsKKworQ1JFQVRFIFZJRVcganNvbl9hcnJheV9zdWJxdWVyeV92aWV3IEFTCitT RUxFQ1QgKiBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSB0MShhKQorV0hFUkUg SlNPTl9BUlJBWSgKKyAgICBTRUxFQ1QgYiBGUk9NIChWQUxVRVMgKDEpLCAoMiksICgzKSkgdDIo YikgV0hFUkUgYiA9IHQxLmEKKyAgICBSRVRVUk5JTkcganNvbmIKKykgPSAnW10nOjpqc29uYjsK KworXHN2IGpzb25fYXJyYXlfc3VicXVlcnlfdmlldworCitEUk9QIFZJRVcganNvbl9hcnJheV9z dWJxdWVyeV92aWV3OworCistLSBKU09OX0FSUkFZKHN1YnF1ZXJ5KSB3aXRoIFJFVFVSTklORyB0 ZXh0CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgSlNPTl9BUlJBWShTRUxF Q1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkgUkVUVVJOSU5H IHRleHQpOworCitDUkVBVEUgVklFVyBqc29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXcgQVMKK1NFTEVD VCBKU09OX0FSUkFZKFNFTEVDVCBpIEZST00gKFZBTFVFUyAoMSksICgyKSwgKE5VTEwpLCAoNCkp IGZvbyhpKSBSRVRVUk5JTkcgdGV4dCk7CisKK1xzdiBqc29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXcK KwogRFJPUCBWSUVXIGpzb25fYXJyYXlfc3VicXVlcnlfdmlldzsKIAogLS0gVGVzdCBtdXRhYmls aXR5IG9mIEpTT05fT0JKRUNUQUdHLCBKU09OX0FSUkFZQUdHLCBKU09OX0FSUkFZLCBKU09OX09C SkVDVAotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --000000000000dd8937064f8d9c47--