Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1t4RTO-000YUX-Rv for pgsql-hackers@arkaria.postgresql.org; Fri, 25 Oct 2024 21:03:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1t4RTN-003YTz-2F for pgsql-hackers@arkaria.postgresql.org; Fri, 25 Oct 2024 21:03:53 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1t4RTM-003YT5-Io for pgsql-hackers@lists.postgresql.org; Fri, 25 Oct 2024 21:03:53 +0000 Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1t4RTF-002yPc-Rh for pgsql-hackers@lists.postgresql.org; Fri, 25 Oct 2024 21:03:52 +0000 Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-539fbbadf83so3415923e87.0 for ; Fri, 25 Oct 2024 14:03:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729890225; x=1730495025; 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=wgJC7GTv74rXbi1vpUHcj3QYSjny6khvYGQiTQ0Kt84=; b=ZQzJ4QR2Ip0mHIpYDMH8YWkE9l2808zuy0ml0p2I83Sv3gb/vXZfAaGOBjc70fO7uX EYiXqjSCP088DedOhdkZIGShahGE7lQaQjjvzs2jGpkSKQEfd92zjpfH8J/nWoTlF8lG 4XBHUmknFlM0pJfH2OzAhJw78aojIBNlPzti9wviSGoODn/wUSfp1YtSkALcXzChPm6i gShDnKqTOS4EPOcBCIP6dqaAjhS+CrvjZJcqyEp4roy39hrJeKWWdGxARYj6LXFaScN2 PveAGDVkJ8kTiK5rva3DHubVMlbbTiJ6mLIH86UxgQl2BIQEyrlh7VbUEVWZlNuLjZId AQrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729890225; x=1730495025; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=wgJC7GTv74rXbi1vpUHcj3QYSjny6khvYGQiTQ0Kt84=; b=tfFEU+y/P3EsnajUQiDiQevmiNKWzFOABDMtarJVLpFAACvxxm98xEGvcfYQ+Y6i3u XdpUxhWAqnnWuxzvBlMbPKqscR2ZmY52ctv44bySMRVuMmaqWV/7CghkhKL+qIPyOTML UNwaLFkxhACfH7nDzL+9eJ2U6VMifkMuiO1w+hPngbwaukDcHhHFo3xCfUmkUCEmvD5f PSAvmC9203SGPGDigrSx6kVdkYGd44dJh+SbSdSi+J5t3PZKCJN8UuYUV7ylgsgZTs6g oXluwsvrAN10K+YyyXB5nkwcNH6hMDm9T8mwGbbK/TSSYlLcm3Ppo3UtXSO4nukvjI9t 7iDQ== X-Forwarded-Encrypted: i=1; AJvYcCXDL0C+Xz8pUEWmmYOy3VotPA4gA9ONWoTa5fayOPlZqzpbbEaMcQQyQlURfAQSpORXOJaqnUf7TvKb21Um@lists.postgresql.org X-Gm-Message-State: AOJu0YyqWq1FSKgp//tZByUwa8jtpsq/KGizMIyuyI7yd56VZJ2HDQXL IBPKN6EyWHGDqNzACpSGVQCuOuiTDcAeCEZOOeTw++2FuAuW4hGa9q/FmMCzZ28lrX88KXIf3Bg iGUSuqeoUG+aGN9uxjHstbC4gsf0= X-Google-Smtp-Source: AGHT+IEh4NUGCbKu3O8MRh0r1QzcqHXqPzwjn0PKcxg1SO8Saj0xoDaXzsA3g0VKZs/0ifntLnSiehlxGGmZ3G53zn0= X-Received: by 2002:a2e:812:0:b0:2fb:c20:dbc5 with SMTP id 38308e7fff4ca-2fcbe066007mr2991401fa.29.1729890224263; Fri, 25 Oct 2024 14:03:44 -0700 (PDT) MIME-Version: 1.0 References: <20240129172858.ccb6c77c3be95a295e2b2b44@sraoss.co.jp> <04bf425ad1b15a4daefe96c478a5253b@oss.nttdata.com> <20240206191937.72eaf0ccc20cfea37944b422@sraoss.co.jp> <76da9fcc-93c5-4053-872e-12932a95356d@uni-muenster.de> <6eac5b45-7f45-4c7a-aae1-e90db8be2e08@uni-muenster.de> <3d6b5885-16a1-475d-b56f-41701c48d9d4@uni-muenster.de> <63595e8f-a245-4335-aa22-7e449a70e210@oss.nttdata.com> In-Reply-To: <63595e8f-a245-4335-aa22-7e449a70e210@oss.nttdata.com> From: Kirill Reshke Date: Sat, 26 Oct 2024 02:03:32 +0500 Message-ID: Subject: Re: Change COPY ... ON_ERROR ignore to ON_ERROR ignore_row To: Fujii Masao Cc: jian he , Jim Jones , "David G. Johnston" , Yugo NAGATA , torikoshia , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000051748906255374cf" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000051748906255374cf Content-Type: text/plain; charset="UTF-8" Hi! On Mon, 21 Oct 2024 at 17:39, Fujii Masao wrote: > > > > On 2024/10/21 18:30, Kirill Reshke wrote: > > v4 no longer applies. It now conflicts with > > e7834a1a251d4a28245377f383ff20a657ba8262. > > Also, there were review comments. > > > > So, I decided to rebase. > > Thanks for the patch! Here are my review comments: > > I noticed that on_error=set_to_null does not trigger NOTICE messages for rows > and columns with errors. It's "unexpected" thing for columns to be silently > replaced with NULL due to on_error=set_to_null. So, similar to on_error=ignore, > there should be NOTICE messages indicating which input records had columns > set to NULL because of data type incompatibility. Without these messages, > users might not realize that some columns were set to NULL. Nice catch. That is a feature introduced by f5a227895e178bf528b18f82bbe554435fb3e64f. > > How should on_error=set_to_null behave when reject_limit is set? It seems > intuitive to trigger an error if the number of rows with columns' data type > issues exceeds reject_limit, similar to on_error=ignore. This is open to discussion. Ok, let's discuss. My first suggestion was: when the REJECT LIMIT is set to some non-zero number and the number of row NULL replacements exceeds the limit, is it OK to fail. Because there WAS errors, and we should not tolerate more than $limit errors . I do find this behavior to be consistent. But what if we don't set a REJECT LIMIT, it is sane to do all replacements, as if REJECT LIMIT is inf. But our REJECT LIMIT is zero (not set). So, we ignore zero REJECT LIMIT if set_to_null is set. But while I was trying to implement that, I realized that I don't understand v4 of this patch. My misunderstanding is about `t_on_error_null` tests. We are allowed to insert a NULL value for the first column of t_on_error_null using COPY ON_ERROR SET_TO_NULL. Why do we do that? My thought is we should try to execute InputFunctionCallSafe with NULL value (i mean, here [1]) for the column after we failed to insert the input value. And, if this second call is successful, we do replacement, otherwise we count the row as erroneous. > > psql's tab-completion should be updated to include SET_TO_NULL. Agreed. > > > An error_action value of > stop means fail the command, while > ignore means discard the input row and continue with the next one. > + set_to_null means the input value will be set to null and continue with the next one. > > How about merging these two descriptions to one and updating it to the following? > > ------------------- > An error_action value of stop means fail the command, ignore means discard the input > row and continue with the next one, and set_to_null means replace columns with invalid > input values with NULL and move to the next row. > ------------------- > Hm, good catch. Applied almost as you suggested. I did tweak this "replace columns with invalid input values with " into "replace columns containing erroneous input values with". Is that OK? > The ignore option is applicable only for COPY FROM > > This should be "... ignore and set_to_null options are ..."? Sure! > Regards, > > -- > Fujii Masao > Advanced Computing Technology Center > Research and Development Headquarters > NTT DATA CORPORATION > Here I sent v6 where review comments, except set_to_null vs reject limit, were addressed. No new tests added yet, as some details are unclear... [1] https://github.com/postgresql-cfbot/postgresql/compare/cf/4810~1...cf/4810#diff-98d8bfd706468f77f8b0d5d0797e3dba3ffaaa88438143ef4cf7fedecaa56827R964 -- Best regards, Kirill Reshke --00000000000051748906255374cf Content-Type: application/octet-stream; name="v6-0001-on_error-set_to_null.patch" Content-Disposition: attachment; filename="v6-0001-on_error-set_to_null.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m2p7xc3b0 RnJvbSA4NWE2MmJlYjI0OGNmMDUzZGQwZTA1YjAxZGY3NTcyZGZmNzc2NmRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMTIgU2VwIDIwMjQgMTc6MDc6MDIgKzA4MDAKU3ViamVjdDogW1BBVENIIHY2 XSBvbl9lcnJvciBzZXRfdG9fbnVsbAoKZXh0ZW50ICJvbl9lcnJvciBhY3Rpb24iLCBpbnRyb2R1 Y2UgbmV3IG9wdGlvbjogb25fZXJyb3Igc2V0X3RvX251bGwuCgpEdWUgdG8gY3VycmVudCBncmFt bWFyLCB3ZSBjYW5ub3QgdXNlICJvbl9lcnJvciBudWxsIiwKc28gSSBjaG9vc2Ugb25fZXJyb3Ig c2V0X3RvX251bGwuCgphbnkgZGF0YSB0eXBlIGNvbnZlcnNpb24gZXJyb3JzIHdoaWxlIHRoZSBD T1BZIEZST00gcHJvY2VzcyB3aWxsIHNldCB0aGF0IGNvbHVtbiB2YWx1ZSB0byBiZSBOVUxMLgp0 aGlzIHdpbGwgb25seSB3b3JrIHdpdGggQ09QWSBGUk9NIGFuZCBub24tYmluYXJ5IGZvcm1hdC4K Ckhvd2V2ZXIgdGhpcyB3aWxsIHJlc3BlY3QgdGhlIG5vdC1udWxsIGNvbnN0cmFpbnQsIG1lYW5p bmcsIGlmIHlvdSBhY3R1YWxseSBjb252ZXJ0ZWQgZXJyb3IgdG8gbnVsbCwKYnV0IHRoZSBjb2x1 bW4gaGFzIG5vdC1udWxsIGNvbnN0cmFpbnQsIG5vdC1udWxsIGNvbnN0cmFpbnQgdmlvbGF0aW9u IEVSUk9SIHdpbGwgYmUgcmFpc2VkLgoKZGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9D QUtGUXV3YXd5MWU2WVI0Uz1qK3k3cFhxZ19EdzFXQlZyZ3ZmPUJQM2QxX2FTZmVfK1FAbWFpbC5n bWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbCAgICAgICAgICAgfCAgNyAr Ky0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMgICAgICAgICAgfCAxMiArKysrLS0tCiBz cmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jICAgICAgfCAgOSArKy0tLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jIHwgMTEgKysrKysrCiBzcmMvYmluL3BzcWwvdGFi LWNvbXBsZXRlLmluLmMgICAgICAgfCAgMiArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5o ICAgICAgICAgIHwgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQgIHwg NTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29w eTIuc3FsICAgICAgIHwgNDQgKysrKysrKysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5n ZWQsIDEyMyBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcmVmL2NvcHkuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY29weS5zZ21sCmluZGV4 IDgzOTQ0MDJmMDk2Li5kY2JmYTE3YTNjZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9j b3B5LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKQEAgLTM5NCwxMiArMzk0 LDEzIEBAIENPUFkgeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwv cmVwbGFjZWFibGU+IFsgKCA8cmVwbGFjZWFibGUKICAgICAgIFNwZWNpZmllcyBob3cgdG8gYmVo YXZlIHdoZW4gZW5jb3VudGVyaW5nIGFuIGVycm9yIGNvbnZlcnRpbmcgYSBjb2x1bW4ncwogICAg ICAgaW5wdXQgdmFsdWUgaW50byBpdHMgZGF0YSB0eXBlLgogICAgICAgQW4gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPmVycm9yX2FjdGlvbjwvcmVwbGFjZWFibGU+IHZhbHVlIG9mCi0g ICAgICA8bGl0ZXJhbD5zdG9wPC9saXRlcmFsPiBtZWFucyBmYWlsIHRoZSBjb21tYW5kLCB3aGls ZQotICAgICAgPGxpdGVyYWw+aWdub3JlPC9saXRlcmFsPiBtZWFucyBkaXNjYXJkIHRoZSBpbnB1 dCByb3cgYW5kIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgb25lLgorICAgICAgPGxpdGVyYWw+c3Rv cDwvbGl0ZXJhbD4gbWVhbnMgZmFpbCB0aGUgY29tbWFuZCwKKyAgICAgIDxsaXRlcmFsPmlnbm9y ZTwvbGl0ZXJhbD4gbWVhbnMgZGlzY2FyZCB0aGUgaW5wdXQgcm93IGFuZCBjb250aW51ZSB3aXRo IHRoZSBuZXh0IG9uZSwgYW5kCisgICAgICA8bGl0ZXJhbD5zZXRfdG9fbnVsbDwvbGl0ZXJhbD4g bWVhbnMgcmVwbGFjZSBjb2x1bW5zIGNvbnRhaW5pbmcgZXJyb25lb3VzIGlucHV0IHZhbHVlcyB3 aXRoIDxsaXRlcmFsPm51bGw8L2xpdGVyYWw+IGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHJvdy4KICAg ICAgIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPnN0b3A8L2xpdGVyYWw+LgogICAgICA8L3BhcmE+ CiAgICAgIDxwYXJhPgotICAgICAgVGhlIDxsaXRlcmFsPmlnbm9yZTwvbGl0ZXJhbD4gb3B0aW9u IGlzIGFwcGxpY2FibGUgb25seSBmb3IgPGNvbW1hbmQ+Q09QWSBGUk9NPC9jb21tYW5kPgorICAg ICAgVGhlIDxsaXRlcmFsPmlnbm9yZTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPnNldF90b19udWxs PC9saXRlcmFsPiBvcHRpb25zIGFyZSBhcHBsaWNhYmxlIG9ubHkgZm9yIDxjb21tYW5kPkNPUFkg RlJPTTwvY29tbWFuZD4KICAgICAgIHdoZW4gdGhlIDxsaXRlcmFsPkZPUk1BVDwvbGl0ZXJhbD4g aXMgPGxpdGVyYWw+dGV4dDwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+Y3N2PC9saXRlcmFsPi4KICAg ICAgPC9wYXJhPgogICAgICA8cGFyYT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NvcHkuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwppbmRleCAzNDg1YmE4NjYzZi4u MzA0MDIyY2Q4NjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKQEAgLTQwMywxMiArNDAzLDE0IEBAIGRlZkdl dENvcHlPbkVycm9yQ2hvaWNlKERlZkVsZW0gKmRlZiwgUGFyc2VTdGF0ZSAqcHN0YXRlLCBib29s IGlzX2Zyb20pCiAJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGRlZi0+bG9jYXRpb24p KSk7CiAKIAkvKgotCSAqIEFsbG93ICJzdG9wIiwgb3IgImlnbm9yZSIgdmFsdWVzLgorCSAqIEFs bG93ICJzdG9wIiwgImlnbm9yZSIsICJzZXRfdG9fbnVsbCIgdmFsdWVzLgogCSAqLwogCWlmIChw Z19zdHJjYXNlY21wKHN2YWwsICJzdG9wIikgPT0gMCkKIAkJcmV0dXJuIENPUFlfT05fRVJST1Jf U1RPUDsKIAlpZiAocGdfc3RyY2FzZWNtcChzdmFsLCAiaWdub3JlIikgPT0gMCkKIAkJcmV0dXJu IENPUFlfT05fRVJST1JfSUdOT1JFOworCWlmIChwZ19zdHJjYXNlY21wKHN2YWwsICJzZXRfdG9f bnVsbCIpID09IDApCisJCXJldHVybiBDT1BZX09OX0VSUk9SX05VTEw7CiAKIAllcmVwb3J0KEVS Uk9SLAogCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCkBAIC05 MDQsMTMgKzkwNiwxMyBAQCBQcm9jZXNzQ29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAog CQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJvbmx5IE9O X0VSUk9SIFNUT1AgaXMgYWxsb3dlZCBpbiBCSU5BUlkgbW9kZSIpKSk7CiAKLQlpZiAob3B0c19v dXQtPnJlamVjdF9saW1pdCAmJiAhb3B0c19vdXQtPm9uX2Vycm9yKQorCWlmIChvcHRzX291dC0+ cmVqZWN0X2xpbWl0ICYmICEob3B0c19vdXQtPm9uX2Vycm9yID09IENPUFlfT05fRVJST1JfTlVM TCB8fCBvcHRzX291dC0+b25fZXJyb3IgPT0gQ09QWV9PTl9FUlJPUl9JR05PUkUpKQogCQllcmVw b3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAogCQkvKi0gdHJhbnNsYXRvcjogZmlyc3QgYW5kIHNlY29uZCAlcyBhcmUgdGhlIG5hbWVzIG9m IENPUFkgb3B0aW9uLCBlLmcuCi0JCSAqIE9OX0VSUk9SLCB0aGlyZCBpcyB0aGUgdmFsdWUgb2Yg dGhlIENPUFkgb3B0aW9uLCBlLmcuIElHTk9SRSAqLwotCQkJCSBlcnJtc2coIkNPUFkgJXMgcmVx dWlyZXMgJXMgdG8gYmUgc2V0IHRvICVzIiwKLQkJCQkJCSJSRUpFQ1RfTElNSVQiLCAiT05fRVJS T1IiLCAiSUdOT1JFIikpKTsKKwkJICogT05fRVJST1IsIHRoaXJkIGlzIHRoZSB2YWx1ZSBvZiB0 aGUgQ09QWSBvcHRpb24sIGUuZy4gSUdOT1JFIG9yIFNFVF9UT19OVUxMICovCisJCQkJIGVycm1z ZygiQ09QWSAlcyByZXF1aXJlcyAlcyB0byBiZSBzZXQgdG8gJXMgb3IgJXMiLAorCQkJCQkJIlJF SkVDVF9MSU1JVCIsICJPTl9FUlJPUiIsICJJR05PUkUiLCAiU0VUX1RPX05VTEwiKSkpOwogfQog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKaW5kZXggMDdjYmQ1ZDIyYjguLmRkZTMwOTg5MDA5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTEzMjEsNyArMTMyMSw3IEBAIENvcHlGcm9t KENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCS8qIERvbmUsIGNsZWFuIHVwICovCiAJZXJyb3JfY29u dGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogCi0JaWYgKGNzdGF0ZS0+b3B0cy5v bl9lcnJvciAhPSBDT1BZX09OX0VSUk9SX1NUT1AgJiYKKwlpZiAoY3N0YXRlLT5vcHRzLm9uX2Vy cm9yID09IENPUFlfT05fRVJST1JfSUdOT1JFICYmCiAJCWNzdGF0ZS0+bnVtX2Vycm9ycyA+IDAg JiYKIAkJY3N0YXRlLT5vcHRzLmxvZ192ZXJib3NpdHkgPj0gQ09QWV9MT0dfVkVSQk9TSVRZX0RF RkFVTFQpCiAJCWVyZXBvcnQoTk9USUNFLApAQCAtMTQ3NCwxMCArMTQ3NCwxMSBAQCBCZWdpbkNv cHlGcm9tKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJY3N0YXRlLT5lc2NvbnRleHQtPmVycm9yX29j Y3VycmVkID0gZmFsc2U7CiAKIAkJLyoKLQkJICogQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBD T1BZX09OX0VSUk9SX0lHTk9SRS4gV2UnbGwgYWRkIG90aGVyCi0JCSAqIG9wdGlvbnMgbGF0ZXIK KwkJICogQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBDT1BZX09OX0VSUk9SX0lHTk9SRSwgQ09Q WV9PTl9FUlJPUl9OVUxMLgorCQkgKiBXZSdsbCBhZGQgb3RoZXIgb3B0aW9ucyBsYXRlcgogCQkg Ki8KLQkJaWYgKGNzdGF0ZS0+b3B0cy5vbl9lcnJvciA9PSBDT1BZX09OX0VSUk9SX0lHTk9SRSkK KwkJaWYgKGNzdGF0ZS0+b3B0cy5vbl9lcnJvciA9PSBDT1BZX09OX0VSUk9SX0lHTk9SRSB8fAor CQkJY3N0YXRlLT5vcHRzLm9uX2Vycm9yID09IENPUFlfT05fRVJST1JfTlVMTCkKIAkJCWNzdGF0 ZS0+ZXNjb250ZXh0LT5kZXRhaWxzX3dhbnRlZCA9IGZhbHNlOwogCX0KIAllbHNlCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKaW5kZXggNjU0ZmVjYjFiMTQuLjhhYjQyZGJjZWVlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCkBAIC05NjEsNiArOTYxLDE3IEBAIE5l eHRDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LAog CQkJewogCQkJCUFzc2VydChjc3RhdGUtPm9wdHMub25fZXJyb3IgIT0gQ09QWV9PTl9FUlJPUl9T VE9QKTsKIAorCQkJCWlmIChjc3RhdGUtPm9wdHMub25fZXJyb3IgPT0gQ09QWV9PTl9FUlJPUl9O VUxMKQorCQkJCXsKKwkJCQkJdmFsdWVzW21dID0gKERhdHVtKSAwOworCQkJCQludWxsc1ttXSA9 IHRydWU7CisJCQkJCS8qCisJCQkJCSAqIHNldCBlcnJvcl9vY2N1cnJlZCB0byBmYWxzZSwgc28g bmV4dAorCQkJCQkgKiBJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUgY2FsbCBiZWhhdmUgc2FuZS4KKwkJ CQkJKi8KKwkJCQkJY3N0YXRlLT5lc2NvbnRleHQtPmVycm9yX29jY3VycmVkID0gZmFsc2U7CisJ CQkJCWNvbnRpbnVlOworCQkJCX0KIAkJCQljc3RhdGUtPm51bV9lcnJvcnMrKzsKIAogCQkJCWlm IChjc3RhdGUtPm9wdHMubG9nX3ZlcmJvc2l0eSA9PSBDT1BZX0xPR19WRVJCT1NJVFlfVkVSQk9T RSkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYyBiL3NyYy9iaW4v cHNxbC90YWItY29tcGxldGUuaW4uYwppbmRleCAxYmUwMDU2YWY3My4uMzM2NTJiNzlmNjIgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYworKysgYi9zcmMvYmluL3Bz cWwvdGFiLWNvbXBsZXRlLmluLmMKQEAgLTMyMzUsNyArMzIzNSw3IEBAIG1hdGNoX3ByZXZpb3Vz X3dvcmRzKGludCBwYXR0ZXJuX2lkLAogCQlDT01QTEVURV9XSVRIKCJGT1JNQVQiLCAiRlJFRVpF IiwgIkRFTElNSVRFUiIsICJOVUxMIiwKIAkJCQkJICAiSEVBREVSIiwgIlFVT1RFIiwgIkVTQ0FQ RSIsICJGT1JDRV9RVU9URSIsCiAJCQkJCSAgIkZPUkNFX05PVF9OVUxMIiwgIkZPUkNFX05VTEwi LCAiRU5DT0RJTkciLCAiREVGQVVMVCIsCi0JCQkJCSAgIk9OX0VSUk9SIiwgIkxPR19WRVJCT1NJ VFkiKTsKKwkJCQkJICAiT05fRVJST1IiLCAiU0VUX1RPX05VTEwiLCAiTE9HX1ZFUkJPU0lUWSIp OwogCiAJLyogQ29tcGxldGUgQ09QWSA8c3RoPiBGUk9NfFRPIGZpbGVuYW1lIFdJVEggKEZPUk1B VCAqLwogCWVsc2UgaWYgKE1hdGNoZXMoIkNPUFl8XFxjb3B5IiwgTWF0Y2hBbnksICJGUk9NfFRP IiwgTWF0Y2hBbnksICJXSVRIIiwgIigiLCAiRk9STUFUIikpCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jb21tYW5kcy9jb3B5LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKaW5kZXgg NDAwMmE3ZjUzODIuLjA1MWNhMTJkMTA3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9jb3B5LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCkBAIC0zOCw2ICszOCw3 IEBAIHR5cGVkZWYgZW51bSBDb3B5T25FcnJvckNob2ljZQogewogCUNPUFlfT05fRVJST1JfU1RP UCA9IDAsCQkvKiBpbW1lZGlhdGVseSB0aHJvdyBlcnJvcnMsIGRlZmF1bHQgKi8KIAlDT1BZX09O X0VSUk9SX0lHTk9SRSwJCS8qIGlnbm9yZSBlcnJvcnMgKi8KKwlDT1BZX09OX0VSUk9SX05VTEws CQkJLyogc2V0IGVycm9yIGZpZWxkIHRvIG51bGwgKi8KIH0gQ29weU9uRXJyb3JDaG9pY2U7CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkyLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0CmluZGV4IDY0ZWEzM2FlYWU4Li41NWVj ZTE4ZjliZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQKQEAgLTgxLDYgKzgxLDEw IEBAIENPUFkgeCBmcm9tIHN0ZGluIChvbl9lcnJvciBpZ25vcmUsIG9uX2Vycm9yIGlnbm9yZSk7 CiBFUlJPUjogIGNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zCiBMSU5FIDE6IENPUFkg eCBmcm9tIHN0ZGluIChvbl9lcnJvciBpZ25vcmUsIG9uX2Vycm9yIGlnbm9yZSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0NPUFkgeCBmcm9tIHN0ZGlu IChvbl9lcnJvciBzZXRfdG9fbnVsbCwgb25fZXJyb3Igc2V0X3RvX251bGwpOworRVJST1I6ICBj b25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucworTElORSAxOiBDT1BZIHggZnJvbSBzdGRp biAob25fZXJyb3Igc2V0X3RvX251bGwsIG9uX2Vycm9yIHNldF90b19udWwuLi4KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiBDT1BZIHggZnJvbSBz dGRpbiAobG9nX3ZlcmJvc2l0eSBkZWZhdWx0LCBsb2dfdmVyYm9zaXR5IHZlcmJvc2UpOwogRVJS T1I6ICBjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucwogTElORSAxOiBDT1BZIHggZnJv bSBzdGRpbiAobG9nX3ZlcmJvc2l0eSBkZWZhdWx0LCBsb2dfdmVyYm9zaXR5IHZlcmIuLi4KQEAg LTkyLDYgKzk2LDggQEAgQ09QWSB4IGZyb20gc3RkaW4gKGZvcm1hdCBCSU5BUlksIG51bGwgJ3gn KTsKIEVSUk9SOiAgY2Fubm90IHNwZWNpZnkgTlVMTCBpbiBCSU5BUlkgbW9kZQogQ09QWSB4IGZy b20gc3RkaW4gKGZvcm1hdCBCSU5BUlksIG9uX2Vycm9yIGlnbm9yZSk7CiBFUlJPUjogIG9ubHkg T05fRVJST1IgU1RPUCBpcyBhbGxvd2VkIGluIEJJTkFSWSBtb2RlCitDT1BZIHggZnJvbSBzdGRp biAoZm9ybWF0IEJJTkFSWSwgb25fZXJyb3Igc2V0X3RvX251bGwpOworRVJST1I6ICBvbmx5IE9O X0VSUk9SIFNUT1AgaXMgYWxsb3dlZCBpbiBCSU5BUlkgbW9kZQogQ09QWSB4IGZyb20gc3RkaW4g KG9uX2Vycm9yIHVuc3VwcG9ydGVkKTsKIEVSUk9SOiAgQ09QWSBPTl9FUlJPUiAidW5zdXBwb3J0 ZWQiIG5vdCByZWNvZ25pemVkCiBMSU5FIDE6IENPUFkgeCBmcm9tIHN0ZGluIChvbl9lcnJvciB1 bnN1cHBvcnRlZCk7CkBAIC0xMjQsNiArMTMwLDEwIEBAIENPUFkgeCB0byBzdGRvdXQgKGZvcm1h dCBCSU5BUlksIG9uX2Vycm9yIHVuc3VwcG9ydGVkKTsKIEVSUk9SOiAgQ09QWSBPTl9FUlJPUiBj YW5ub3QgYmUgdXNlZCB3aXRoIENPUFkgVE8KIExJTkUgMTogQ09QWSB4IHRvIHN0ZG91dCAoZm9y bWF0IEJJTkFSWSwgb25fZXJyb3IgdW5zdXBwb3J0ZWQpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCitDT1BZIHggdG8gc3RkaW4gKG9uX2Vycm9yIHNldF90b19u dWxsKTsKK0VSUk9SOiAgQ09QWSBPTl9FUlJPUiBjYW5ub3QgYmUgdXNlZCB3aXRoIENPUFkgVE8K K0xJTkUgMTogQ09QWSB4IHRvIHN0ZGluIChvbl9lcnJvciBzZXRfdG9fbnVsbCk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgXgogQ09QWSB4IGZyb20gc3RkaW4gKGxvZ192ZXJib3NpdHkgdW5z dXBwb3J0ZWQpOwogRVJST1I6ICBDT1BZIExPR19WRVJCT1NJVFkgInVuc3VwcG9ydGVkIiBub3Qg cmVjb2duaXplZAogTElORSAxOiBDT1BZIHggZnJvbSBzdGRpbiAobG9nX3ZlcmJvc2l0eSB1bnN1 cHBvcnRlZCk7CkBAIC03NjksNiArNzc5LDI0IEBAIENPTlRFWFQ6ICBDT1BZIGNoZWNrX2lnbl9l cnIKIE5PVElDRTogIHNraXBwaW5nIHJvdyBkdWUgdG8gZGF0YSB0eXBlIGluY29tcGF0aWJpbGl0 eSBhdCBsaW5lIDggZm9yIGNvbHVtbiAiayI6ICJhIgogQ09OVEVYVDogIENPUFkgY2hlY2tfaWdu X2VycgogTk9USUNFOiAgNiByb3dzIHdlcmUgc2tpcHBlZCBkdWUgdG8gZGF0YSB0eXBlIGluY29t cGF0aWJpbGl0eQorY3JlYXRlIGRvbWFpbiBkX2ludF9ub3RfbnVsbCBhcyBpbnQgbm90IG51bGwg Y2hlY2sodmFsdWUgPiAwKTsKK0NSRUFURSBUQUJMRSB0X29uX2Vycm9yX251bGwgKGEgZF9pbnRf bm90X251bGwsIGMgaW50IG5vdCBudWxsLCBiIGludCk7CistLWZhaWwKK0NPUFkgdF9vbl9lcnJv cl9udWxsIEZST00gU1RESU4gV0lUSCAob25fZXJyb3Igc2V0X3RvX251bGwpOworRVJST1I6ICBu dWxsIHZhbHVlIGluIGNvbHVtbiAiYyIgb2YgcmVsYXRpb24gInRfb25fZXJyb3JfbnVsbCIgdmlv bGF0ZXMgbm90LW51bGwgY29uc3RyYWludAorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMg KDExLCBudWxsLCAxMikuCitDT05URVhUOiAgQ09QWSB0X29uX2Vycm9yX251bGwsIGxpbmUgMTog IjExCWEJMTIiCistLW9rCitDT1BZIHRfb25fZXJyb3JfbnVsbCBGUk9NIFNURElOIFdJVEggKG9u X2Vycm9yIHNldF90b19udWxsKTsKK3NlbGVjdCAqIGZyb20gdF9vbl9lcnJvcl9udWxsOworIGEg fCBjICB8IGIgIAorLS0tKy0tLS0rLS0tLQorICAgfCAxMSB8IDEzCisgICB8IDExIHwgMTQKKygy IHJvd3MpCisKK2Ryb3AgdGFibGUgdF9vbl9lcnJvcl9udWxsOworZHJvcCBkb21haW4gZF9pbnRf bm90X251bGw7CiAtLSB0ZXN0cyBmb3Igb25fZXJyb3Igb3B0aW9uIHdpdGggbG9nX3ZlcmJvc2l0 eSBhbmQgbnVsbCBjb25zdHJhaW50IHZpYSBkb21haW4KIENSRUFURSBET01BSU4gZGNoZWNrX2ln bl9lcnIyIHZhcmNoYXIoMTUpIE5PVCBOVUxMOwogQ1JFQVRFIFRBQkxFIGNoZWNrX2lnbl9lcnIy IChuIGludCwgbSBpbnRbXSwgayBpbnQsIGwgZGNoZWNrX2lnbl9lcnIyKTsKQEAgLTgxMyw2ICs4 NDEsMjggQEAgRVJST1I6ICBza2lwcGVkIG1vcmUgdGhhbiBSRUpFQ1RfTElNSVQgKDMpIHJvd3Mg ZHVlIHRvIGRhdGEgdHlwZSBpbmNvbXBhdGliaWxpdHkKIENPTlRFWFQ6ICBDT1BZIGNoZWNrX2ln bl9lcnIsIGxpbmUgNSwgY29sdW1uIG46ICIiCiBDT1BZIGNoZWNrX2lnbl9lcnIgRlJPTSBTVERJ TiBXSVRIIChvbl9lcnJvciBpZ25vcmUsIHJlamVjdF9saW1pdCA0KTsKIE5PVElDRTogIDQgcm93 cyB3ZXJlIHNraXBwZWQgZHVlIHRvIGRhdGEgdHlwZSBpbmNvbXBhdGliaWxpdHkKKy0tIHRlc3Rz IGZvciBvbl9lcnJvciBzZXRfdG9fbnVsbCBvcHRpb24KK3RydW5jYXRlIGNoZWNrX2lnbl9lcnI7 CitDT1BZIGNoZWNrX2lnbl9lcnIgRlJPTSBTVERJTiBXSVRIIChvbl9lcnJvciBzZXRfdG9fbnVs bCk7CitccHNldCBudWxsIE5VTEwKK1NFTEVDVCAqIEZST00gY2hlY2tfaWduX2VycjsKKyAgbiAg IHwgIG0gIHwgIGsgICAKKy0tLS0tLSstLS0tLSstLS0tLS0KKyAgICAxIHwgezF9IHwgTlVMTAor ICAgIDIgfCB7Mn0gfCAgICAxCisgICAgMyB8IHszfSB8ICAgIDIKKyAgICA0IHwgezR9IHwgTlVM TAorIE5VTEwgfCB7NX0gfCBOVUxMCisoNSByb3dzKQorCistLXNob3VsZCBmYWlsLgorQ09QWSBj aGVja19pZ25fZXJyIEZST00gU1RESU4gV0lUSCAoZGVsaW1pdGVyICcsJywgb25fZXJyb3Igc2V0 X3RvX251bGwpOworRVJST1I6ICBtaXNzaW5nIGRhdGEgZm9yIGNvbHVtbiAiayIKK0NPTlRFWFQ6 ICBDT1BZIGNoZWNrX2lnbl9lcnIsIGxpbmUgMSwgY29sdW1uIG06ICIiCistLXNob3VsZCBmYWls LgorQ09QWSBjaGVja19pZ25fZXJyIEZST00gU1RESU4gV0lUSCAoZGVsaW1pdGVyICcsJywgb25f ZXJyb3Igc2V0X3RvX251bGwpOworRVJST1I6ICBleHRyYSBkYXRhIGFmdGVyIGxhc3QgZXhwZWN0 ZWQgY29sdW1uCitDT05URVhUOiAgQ09QWSBjaGVja19pZ25fZXJyLCBsaW5lIDE6ICIxLHsxfSwx LDEiCiAtLSBjbGVhbiB1cAogRFJPUCBUQUJMRSBmb3JjZXRlc3Q7CiBEUk9QIFRBQkxFIHZpc3Rl c3Q7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5Mi5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9jb3B5Mi5zcWwKaW5kZXggNDUyNzM1NTdjZTAuLjhkOTc0ZjRkOWE5IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5Mi5zcWwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY29weTIuc3FsCkBAIC02NywxMiArNjcsMTQgQEAgQ09QWSB4IGZyb20gc3Rk aW4gKGZvcmNlX251bGwgKGEpLCBmb3JjZV9udWxsIChiKSk7CiBDT1BZIHggZnJvbSBzdGRpbiAo Y29udmVydF9zZWxlY3RpdmVseSAoYSksIGNvbnZlcnRfc2VsZWN0aXZlbHkgKGIpKTsKIENPUFkg eCBmcm9tIHN0ZGluIChlbmNvZGluZyAnc3FsX2FzY2lpJywgZW5jb2RpbmcgJ3NxbF9hc2NpaScp OwogQ09QWSB4IGZyb20gc3RkaW4gKG9uX2Vycm9yIGlnbm9yZSwgb25fZXJyb3IgaWdub3JlKTsK K0NPUFkgeCBmcm9tIHN0ZGluIChvbl9lcnJvciBzZXRfdG9fbnVsbCwgb25fZXJyb3Igc2V0X3Rv X251bGwpOwogQ09QWSB4IGZyb20gc3RkaW4gKGxvZ192ZXJib3NpdHkgZGVmYXVsdCwgbG9nX3Zl cmJvc2l0eSB2ZXJib3NlKTsKIAogLS0gaW5jb3JyZWN0IG9wdGlvbnMKIENPUFkgeCBmcm9tIHN0 ZGluIChmb3JtYXQgQklOQVJZLCBkZWxpbWl0ZXIgJywnKTsKIENPUFkgeCBmcm9tIHN0ZGluIChm b3JtYXQgQklOQVJZLCBudWxsICd4Jyk7CiBDT1BZIHggZnJvbSBzdGRpbiAoZm9ybWF0IEJJTkFS WSwgb25fZXJyb3IgaWdub3JlKTsKK0NPUFkgeCBmcm9tIHN0ZGluIChmb3JtYXQgQklOQVJZLCBv bl9lcnJvciBzZXRfdG9fbnVsbCk7CiBDT1BZIHggZnJvbSBzdGRpbiAob25fZXJyb3IgdW5zdXBw b3J0ZWQpOwogQ09QWSB4IGZyb20gc3RkaW4gKGZvcm1hdCBURVhULCBmb3JjZV9xdW90ZShhKSk7 CiBDT1BZIHggZnJvbSBzdGRpbiAoZm9ybWF0IFRFWFQsIGZvcmNlX3F1b3RlICopOwpAQCAtODcs NiArODksNyBAQCBDT1BZIHggZnJvbSBzdGRpbiAoZm9ybWF0IFRFWFQsIGZvcmNlX251bGwgKik7 CiBDT1BZIHggdG8gc3Rkb3V0IChmb3JtYXQgQ1NWLCBmb3JjZV9udWxsKGEpKTsKIENPUFkgeCB0 byBzdGRvdXQgKGZvcm1hdCBDU1YsIGZvcmNlX251bGwgKik7CiBDT1BZIHggdG8gc3Rkb3V0IChm b3JtYXQgQklOQVJZLCBvbl9lcnJvciB1bnN1cHBvcnRlZCk7CitDT1BZIHggdG8gc3RkaW4gKG9u X2Vycm9yIHNldF90b19udWxsKTsKIENPUFkgeCBmcm9tIHN0ZGluIChsb2dfdmVyYm9zaXR5IHVu c3VwcG9ydGVkKTsKIENPUFkgeCBmcm9tIHN0ZGluIHdpdGggKHJlamVjdF9saW1pdCAxKTsKIENP UFkgeCBmcm9tIHN0ZGluIHdpdGggKG9uX2Vycm9yIGlnbm9yZSwgcmVqZWN0X2xpbWl0IDApOwpA QCAtNTM0LDYgKzUzNywyNCBAQCBhCXsyfQkyCiA4CXs4fQk4CiBcLgogCitjcmVhdGUgZG9tYWlu IGRfaW50X25vdF9udWxsIGFzIGludCBub3QgbnVsbCBjaGVjayh2YWx1ZSA+IDApOworQ1JFQVRF IFRBQkxFIHRfb25fZXJyb3JfbnVsbCAoYSBkX2ludF9ub3RfbnVsbCwgYyBpbnQgbm90IG51bGws IGIgaW50KTsKKworLS1mYWlsCitDT1BZIHRfb25fZXJyb3JfbnVsbCBGUk9NIFNURElOIFdJVEgg KG9uX2Vycm9yIHNldF90b19udWxsKTsKKzExCWEJMTIKK1wuCisKKy0tb2sKK0NPUFkgdF9vbl9l cnJvcl9udWxsIEZST00gU1RESU4gV0lUSCAob25fZXJyb3Igc2V0X3RvX251bGwpOworLTEJMTEJ MTMKK2EJMTEJMTQKK1wuCisKK3NlbGVjdCAqIGZyb20gdF9vbl9lcnJvcl9udWxsOworZHJvcCB0 YWJsZSB0X29uX2Vycm9yX251bGw7Citkcm9wIGRvbWFpbiBkX2ludF9ub3RfbnVsbDsKKwogLS0g dGVzdHMgZm9yIG9uX2Vycm9yIG9wdGlvbiB3aXRoIGxvZ192ZXJib3NpdHkgYW5kIG51bGwgY29u c3RyYWludCB2aWEgZG9tYWluCiBDUkVBVEUgRE9NQUlOIGRjaGVja19pZ25fZXJyMiB2YXJjaGFy KDE1KSBOT1QgTlVMTDsKIENSRUFURSBUQUJMRSBjaGVja19pZ25fZXJyMiAobiBpbnQsIG0gaW50 W10sIGsgaW50LCBsIGRjaGVja19pZ25fZXJyMik7CkBAIC01ODgsNiArNjA5LDI5IEBAIGEJezd9 CTcKIDEwCXsxMH0JMTAKIFwuCiAKKy0tIHRlc3RzIGZvciBvbl9lcnJvciBzZXRfdG9fbnVsbCBv cHRpb24KK3RydW5jYXRlIGNoZWNrX2lnbl9lcnI7CitDT1BZIGNoZWNrX2lnbl9lcnIgRlJPTSBT VERJTiBXSVRIIChvbl9lcnJvciBzZXRfdG9fbnVsbCk7CisxCXsxfQlhCisyCXsyfQkxCiszCXsz fQkyCis0CXs0fQliCithCXs1fQljCitcLgorCitccHNldCBudWxsIE5VTEwKK1NFTEVDVCAqIEZS T00gY2hlY2tfaWduX2VycjsKKworLS1zaG91bGQgZmFpbC4KK0NPUFkgY2hlY2tfaWduX2VyciBG Uk9NIFNURElOIFdJVEggKGRlbGltaXRlciAnLCcsIG9uX2Vycm9yIHNldF90b19udWxsKTsKKzEs CitcLgorCistLXNob3VsZCBmYWlsLgorQ09QWSBjaGVja19pZ25fZXJyIEZST00gU1RESU4gV0lU SCAoZGVsaW1pdGVyICcsJywgb25fZXJyb3Igc2V0X3RvX251bGwpOworMSx7MX0sMSwxCitcLgor CiAtLSBjbGVhbiB1cAogRFJPUCBUQUJMRSBmb3JjZXRlc3Q7CiBEUk9QIFRBQkxFIHZpc3Rlc3Q7 Ci0tIAoyLjM0LjEKCg== --00000000000051748906255374cf--