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 1u0ywY-00Bg8t-7O for pgsql-hackers@arkaria.postgresql.org; Sat, 05 Apr 2025 08:31:58 +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 1u0ywV-00AllJ-S9 for pgsql-hackers@arkaria.postgresql.org; Sat, 05 Apr 2025 08:31:55 +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 1u0ywV-00AllB-Cv for pgsql-hackers@lists.postgresql.org; Sat, 05 Apr 2025 08:31:55 +0000 Received: from mail-vk1-xa2c.google.com ([2607:f8b0:4864:20::a2c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u0ywS-003VeA-2I for pgsql-hackers@lists.postgresql.org; Sat, 05 Apr 2025 08:31:55 +0000 Received: by mail-vk1-xa2c.google.com with SMTP id 71dfb90a1353d-523f721bc63so3313165e0c.0 for ; Sat, 05 Apr 2025 01:31:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743841911; x=1744446711; 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=qaFfuHRHurjX+voysbLGcWU82/DN76BFUC0j9I6jr6o=; b=D3nZY/uBn6PozgRr4mtuSBK/S+MsKmOroRtSQJ103Lhoa8njpqBlVTgQljxf7fDCvX Tg5+zxpWMpykeojCaVi5EfgFCyIvx/R9JkTZqAQSTXIQa/KJCoKEfeiSS+u2Tr0dPtxd fCDEaf1GcFICgNzZoZl49iXkhFsMKZGBXclUsFNxQJv6RZV58AqOxhHpHbwV7CHO6Z9L +MRqEe7CdSZ8OcLzNzqpX/mKmvdt7BlTUV28me7vTB6UUSGs4jW0qTgUpZRjYyU2DWk9 35sKLjmwInju2fk0ZZQoUaihnU5BUq+26+MPzICGrtVa/wsDc1HYeyNoh+byJXOTnswr v1oA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743841911; x=1744446711; 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=qaFfuHRHurjX+voysbLGcWU82/DN76BFUC0j9I6jr6o=; b=auEKs1YMZP7ZfXej+IQd+W7UoKv4FdhU398JpqH6VEaDXD11AnFUhyUUTifBkBBnk6 nIbG5ZnR30sXKT78h1iBHkQaGb8z05MKjSldq2fFr7r9to6N5/09MofQVKpKaVbBcj3r MGfRB5laW1GFkSIpyWqfxXpxr+NIssetTcvK47Balh9T95LrzTLjwWDlzWC7Ha0AqEgl tTlUIYma+Hwo4r3m83kmjFZ3ikPVSxw+WkAsdoZZCCGhpXVaDNdQe9FX4FeKYyjzYlK+ UO+2oLcU1Pwt0f53a/F98ZnFaBDBnK5knkZeG5a0Z3ZfMtl/4kZRx8KvX8VaJzSqfOsU ECDQ== X-Forwarded-Encrypted: i=1; AJvYcCXDuLHcLVyrASYImAcX0n3tsseaMkYegSk2vmbWhrsBJ1wyeEQEZVxeZWKvppB2aCKgP+0KcNxKI/tAqtCO@lists.postgresql.org X-Gm-Message-State: AOJu0YwEMEUjllep+dlvhzGBQDyDLqFGpr6KbGj0Lc17ecTNKUhhSAIv 20oOFXNSaHiNegMwrhng38JPx4kg4LKBOu1NzbnHW2xkUaLYciIB3V5XglHmn+05L6Sp/fGCbYB O4CUb+CRw/aNGDqPghSKHemCzgy6Q7YB4 X-Gm-Gg: ASbGncu0a1vCWNZj0etdF79nVixyPXOaVviHIw0xKj+UB36uy6CNdmxEFAHHi84RbVp 3Ha2PoUL6e8/S7GVg84FGUmqYXq9CvTrSCvDoDtZxBkg324d34jYM5ibpyiWuaWgKcTpLAn/uQV mQJTnbj58T83wT24elKBtBL6HAlqEcx08YmqFN3uQLxCz3ksVPliHfLJaKYWqqaARLjjWe X-Google-Smtp-Source: AGHT+IHfRpybBVt+w7h7XAoQ9F5FsSBsr3jevj/FGRxQIBuVKQjGdWWFUQ2VjjS+glsmwIL3MSHnJ383/heyMEQejQc= X-Received: by 2002:a05:6122:390a:b0:524:2fe0:3898 with SMTP id 71dfb90a1353d-52756b4cbdemr8459022e0c.5.1743841910869; Sat, 05 Apr 2025 01:31:50 -0700 (PDT) MIME-Version: 1.0 References: <90dc6e9d-9348-485a-b27c-7b1637f06c2e@uni-muenster.de> In-Reply-To: From: jian he Date: Sat, 5 Apr 2025 16:31:14 +0800 X-Gm-Features: ATxdqUEC7V7lJy5SxW0vPnfmnhwmKMBOCD8KIrH8GA0YJ24EZ6uoImN7gNM-ypM Message-ID: Subject: Re: Change COPY ... ON_ERROR ignore to ON_ERROR ignore_row To: Masahiko Sawada Cc: vignesh C , Jim Jones , Kirill Reshke , Fujii Masao , "David G. Johnston" , Yugo NAGATA , torikoshia , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000a4cdae063203d507" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a4cdae063203d507 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Apr 5, 2025 at 5:33=E2=80=AFAM Masahiko Sawada wrote: > > On Fri, Apr 4, 2025 at 4:55=E2=80=AFAM jian he wrote: > > > > On Tue, Mar 25, 2025 at 2:31=E2=80=AFPM vignesh C = wrote: > > > > > > 2) Here in error we say column c1 violates not-null constraint and in > > > the context we show column c2, should the context also display c2 > > > column: > > > postgres=3D# create table t3(c1 int not null, c2 int, check (c1 > 10)= ); > > > CREATE TABLE > > > postgres=3D# COPY t3 FROM STDIN WITH (on_error set_to_null); > > > Enter data to be copied followed by a newline. > > > End with a backslash and a period on a line by itself, or an EOF sign= al. > > > >> a b > > > >> \. > > > ERROR: null value in column "c1" of relation "t3" violates not-null = constraint > > > DETAIL: Failing row contains (null, null). > > > CONTEXT: COPY t3, line 1, column c2: "b" > > > > > > > It took me a while to figure out why. > > with the attached, now the error message becomes: > > > > ERROR: null value in column "c1" of relation "t3" violates not-null co= nstraint > > DETAIL: Failing row contains (null, null). > > CONTEXT: COPY t3, line 1: "a,b" > > > > while at it, > > (on_error set_to_null, log_verbosity verbose) > > error message CONTEXT will only emit out relation name, > > this aligns with (on_error ignore, log_verbosity verbose). > > > > one of the message out example: > > +NOTICE: column "b" was set to null due to data type incompatibility a= t line 2 > > +CONTEXT: COPY t_on_error_null > > > > > > > > > 3) typo becomen should be become: > > > null will becomen reserved to non-reserved > > fixed. > > > > > 4) There is a whitespace error while applying patch > > > Applying: COPY (on_error set_to_null) > > > .git/rebase-apply/patch:39: trailing whitespace. > > > a NOTICE message indicating the number of ro= ws > > > warning: 1 line adds whitespace errors. > > fixed. > > I've reviewed the v15 patch and here are some comments: > > How about renaming the new option value to 'set_null"? The 'to' in the > value name seems redundant to me. > > --- > + COPY_ON_ERROR_NULL, /* set error field to nul= l */ > > I think it's better to rename COPY_ON_ERROR_SET_TO_NULL (or > COPY_ON_ERROR_SET_NULL if we change the option value name) for > consistency with the value name. > > --- > + else if (cstate->opts.on_error =3D=3D COPY_ON_ERROR_NULL= ) > + ereport(NOTICE, > + errmsg_plural("invalid values > in %" PRIu64 " row was replaced with null", > + > "invalid values in %" PRIu64 " rows were replaced with null", > + > cstate->num_errors, > + > cstate->num_errors)); > > How about adding "due to data type incompatibility" at the end of the mes= sage? > > --- > + ereport(NOTICE, > + errmsg("column > \"%s\" was set to null due to data type incompatibility at line %" > PRIu64 "", > + > cstate->cur_attname, > + > cstate->cur_lineno)); > > Similar to the IGNORE case, we can show the data in question in the messa= ge. > > --- > + else > + ereport(ERROR, > + > errcode(ERRCODE_NOT_NULL_VIOLATION), > + errmsg("domain %s does > not allow null values", format_type_be(typioparams[m])), > + errdatatype(typioparams[m]))= ; > > If domain data type is the sole case where not to accept NULL, can we > check it beforehand to avoid calling the second > InputFunctionCallSafe() for non-domain data types? Also, if we want to > end up with an error when setting NULL to a domain type with NOT NULL, > I think we don't need to try to handle a soft error by passing > econtext to InputFunctionCallSafe(). > please check attached, hope i have addressed all the points you've mentione= d. > If domain data type is the sole case where not to accept NULL, can we > check it beforehand to avoid calling the second > InputFunctionCallSafe() for non-domain data types? I doubt it. we have InputFunctionCallSafe(FmgrInfo *flinfo, char *str, Oid typioparam, int32 typmod, fmNodePtr escontext, Datum *result) { LOCAL_FCINFO(fcinfo, 3); if (str =3D=3D NULL && flinfo->fn_strict) { *result =3D (Datum) 0; /* just return null result */ return true; } } Most of the non-domain type input functions are strict. see query result: select proname, pt.typname, proisstrict,pt.typtype from pg_type pt join pg_proc pp on pp.oid =3D pt.typinput where pt.typtype <> 'd' and pt.typtype <> 'p' and proisstrict is false; so the second InputFunctionCallSafe will be faster for non-domain types. before CopyFromTextLikeOneRow we don't know if this type is domain_with_constraint or not. Beforehand, we can conditionally call DomainHasConstraints to find out. but DomainHasConstraints is expensive, which may carry extra performance issues for non-domain types. but the second InputFunctionCallSafe call will not be a big issue for domain_with_constraint, because the first time domain_in call already cached related structs. --000000000000a4cdae063203d507 Content-Type: text/x-patch; charset="US-ASCII"; name="v16-0001-COPY-on_error-set_null.patch" Content-Disposition: attachment; filename="v16-0001-COPY-on_error-set_null.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m93yf8zj0 RnJvbSBmNmNkMzM2MjNmMTJkOGYxMDVhZjRlODQ3NzI2ODY3ZTZlZDUzYTZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFNhdCwgNSBBcHIgMjAyNSAxNjozMDoxMCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjE2 IDEvMV0gQ09QWSAob25fZXJyb3Igc2V0X251bGwpCgpFeHRlbnQgIm9uX2Vycm9yIGFjdGlvbiIs IGludHJvZHVjZSBuZXcgb3B0aW9uOiAgb25fZXJyb3Igc2V0X251bGwuCgpDdXJyZW50IGdyYW1t YXIgbWFrZXMgdXMgdW5hYmxlIHRvIHVzZSAib25fZXJyb3IgbnVsbCIuIGlmIHdlIGRpZCBpdCwg dGhlbiBpbgphbGwgdGhlIENPUFkgY29tbWFuZCBvcHRpb25zJ3MgdmFsdWUsIG51bGwgd2lsbCBi ZWNvbWUgcmVzZXJ2ZWQgdG8gbm9uLXJlc2VydmVkCndvcmRzLiAgc28gd2UgY2hvb3NlICJvbl9l cnJvciBzZXRfbnVsbCIuCgpBbnkgZGF0YSB0eXBlIGNvbnZlcnNpb24gZXJyb3JzIGR1cmluZyB0 aGUgQ09QWSBGUk9NIHByb2Nlc3Mgd2lsbCByZXN1bHQgaW4gdGhlCmFmZmVjdGVkIGNvbHVtbiBi ZWluZyBzZXQgdG8gTlVMTC4gVGhpcyBvbmx5IGFwcGxpZXMgd2hlbiB1c2luZyB0aGUgbm9uLWJp bmFyeQpmb3JtYXQgZm9yIENPUFkgRlJPTS4KCkhvd2V2ZXIsIHRoZSBub3QtbnVsbCBjb25zdHJh aW50IHdpbGwgc3RpbGwgYmUgZW5mb3JjZWQuCklmIGEgY29sdW1uIGhhcyBhIG5vdC1udWxsIGNv bnN0cmFpbnQsIHN1Y2Nlc3NmdWwgKG9uX2Vycm9yIHNldF9udWxsKQphY3Rpb24gd2lsbCBjYXVz ZSBub3QtbnVsbCBjb25zdHJhaW50IHZpb2xhdGlvbi4KVGhpcyBhbHNvIGFwcGxpZXMgdG8gY29s dW1uIHR5cGUgaXMgZG9tYWluIHdpdGggbm90LW51bGwgY29uc3RyYWludC4KCkEgcmVncmVzc2lv biB0ZXN0IGZvciBhIGRvbWFpbiB3aXRoIGEgbm90LW51bGwgY29uc3RyYWludCBoYXMgYmVlbiBh ZGRlZC4KCkF1dGhvcjogSmlhbiBIZSA8amlhbi51bml2ZXJzYWxpdHlAZ21haWwuY29tPgpBdXRo b3I6IEtpcmlsbCBSZXNoa2UgPHJlc2hrZWtpcmlsbEBnbWFpbC5jb20+CgpSZXZpZXdlZC1ieToK RnVqaWkgTWFzYW8gPG1hc2FvLmZ1amlpQG9zcy5udHRkYXRhLmNvbT4KSmltIEpvbmVzIDxqaW0u am9uZXNAdW5pLW11ZW5zdGVyLmRlPgoiRGF2aWQgRy4gSm9obnN0b24iIDxkYXZpZC5nLmpvaG5z dG9uQGdtYWlsLmNvbT4KWXVnbyBOQUdBVEEgPG5hZ2F0YUBzcmFvc3MuY28uanA+CnRvcmlrb3No aWEgPHRvcmlrb3NoaWFAb3NzLm50dGRhdGEuY29tPgpNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5t c2hrQGdtYWlsLmNvbT4KCmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FLRlF1d2F3 eTFlNllSNFM9ait5N3BYcWdfRHcxV0JWcmd2Zj1CUDNkMV9hU2ZlXytRQG1haWwuZ21haWwuY29t Ci0tLQogZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwgICAgICAgICAgIHwgMzYgKysrKysrKysr Ky0tLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMgICAgICAgICAgfCAgNiArKy0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgICAgICB8IDI5ICsrKysrKysrLS0tLS0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYyB8IDY1ICsrKysrKysrKysrKysrKysr KysrKysrKysrKy0KIHNyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYyAgICAgICB8ICAyICst CiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmggICAgICAgICAgfCAgMSArCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NvcHkyLm91dCAgfCA2MCArKysrKysrKysrKysrKysrKysrKysrKysr CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5Mi5zcWwgICAgICAgfCA0NiArKysrKysrKysrKysr KysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCAyMTkgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwgYi9kb2Mvc3JjL3Nn bWwvcmVmL2NvcHkuc2dtbAppbmRleCBkNjg1OTI3NmJlZC4uZGIxMTI4NjdmYTAgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9yZWYvY29weS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY29w eS5zZ21sCkBAIC0zOTQsMjMgKzM5NCwzNiBAQCBDT1BZIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICggPHJlcGxhY2VhYmxlCiAgICAg ICBTcGVjaWZpZXMgaG93IHRvIGJlaGF2ZSB3aGVuIGVuY291bnRlcmluZyBhbiBlcnJvciBjb252 ZXJ0aW5nIGEgY29sdW1uJ3MKICAgICAgIGlucHV0IHZhbHVlIGludG8gaXRzIGRhdGEgdHlwZS4K ICAgICAgIEFuIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5lcnJvcl9hY3Rpb248L3Jl cGxhY2VhYmxlPiB2YWx1ZSBvZgotICAgICAgPGxpdGVyYWw+c3RvcDwvbGl0ZXJhbD4gbWVhbnMg ZmFpbCB0aGUgY29tbWFuZCwgd2hpbGUKLSAgICAgIDxsaXRlcmFsPmlnbm9yZTwvbGl0ZXJhbD4g bWVhbnMgZGlzY2FyZCB0aGUgaW5wdXQgcm93IGFuZCBjb250aW51ZSB3aXRoIHRoZSBuZXh0IG9u ZS4KKyAgICAgIDxsaXRlcmFsPnN0b3A8L2xpdGVyYWw+IG1lYW5zIGZhaWwgdGhlIGNvbW1hbmQs CisgICAgICA8bGl0ZXJhbD5pZ25vcmU8L2xpdGVyYWw+IG1lYW5zIGRpc2NhcmQgdGhlIGlucHV0 IHJvdyBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dCBvbmUsCisgICAgICBhbmQgPGxpdGVyYWw+ c2V0X251bGw8L2xpdGVyYWw+IG1lYW5zIHJlcGxhY2UgY29sdW1ucyBjb250YWluaW5nIGludmFs aWQKKyAgICAgIGlucHV0IHZhbHVlcyB3aXRoIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IGFuZCBt b3ZlIHRvIHRoZSBuZXh0IGZpZWxkLgogICAgICAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+c3Rv cDwvbGl0ZXJhbD4uCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+Ci0gICAgICBUaGUgPGxpdGVy YWw+aWdub3JlPC9saXRlcmFsPiBvcHRpb24gaXMgYXBwbGljYWJsZSBvbmx5IGZvciA8Y29tbWFu ZD5DT1BZIEZST008L2NvbW1hbmQ+CisgICAgICBUaGUgPGxpdGVyYWw+aWdub3JlPC9saXRlcmFs PiBhbmQgPGxpdGVyYWw+c2V0X251bGw8L2xpdGVyYWw+CisgICAgICBvcHRpb25zIGFyZSBhcHBs aWNhYmxlIG9ubHkgZm9yIDxjb21tYW5kPkNPUFkgRlJPTTwvY29tbWFuZD4KICAgICAgIHdoZW4g dGhlIDxsaXRlcmFsPkZPUk1BVDwvbGl0ZXJhbD4gaXMgPGxpdGVyYWw+dGV4dDwvbGl0ZXJhbD4g b3IgPGxpdGVyYWw+Y3N2PC9saXRlcmFsPi4KICAgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAg ICAgRm9yIDxsaXRlcmFsPmlnbm9yZTwvbGl0ZXJhbD4gb3B0aW9uLCBhIDxsaXRlcmFsPk5PVElD RTwvbGl0ZXJhbD4gbWVzc2FnZQorICAgICAgY29udGFpbmluZyB0aGUgaWdub3JlZCByb3cgY291 bnQgaXMgZW1pdHRlZCBhdCB0aGUgZW5kIG9mIHRoZSA8Y29tbWFuZD5DT1BZCisgICAgICBGUk9N PC9jb21tYW5kPiBpZiBhdCBsZWFzdCBvbmUgcm93IHdhcyBkaXNjYXJkZWQuCisgICAgICBGb3Ig PGxpdGVyYWw+c2V0X251bGw8L2xpdGVyYWw+IG9wdGlvbiwKKyAgICAgIGEgPGxpdGVyYWw+Tk9U SUNFPC9saXRlcmFsPiBtZXNzYWdlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiByb3dzCisgICAg ICB3aGVyZSBpbnZhbGlkIGlucHV0IHZhbHVlcyB3ZXJlIHJlcGxhY2VkIHdpdGggbnVsbCBpcyBl bWl0dGVkCisgICAgICBhdCB0aGUgZW5kIG9mIHRoZSA8Y29tbWFuZD5DT1BZIEZST008L2NvbW1h bmQ+IGlmIGF0IGxlYXN0IG9uZSByb3cgd2FzIHJlcGxhY2VkLgorICAgICA8L3BhcmE+CiAgICAg IDxwYXJhPgotICAgICAgQSA8bGl0ZXJhbD5OT1RJQ0U8L2xpdGVyYWw+IG1lc3NhZ2UgY29udGFp bmluZyB0aGUgaWdub3JlZCByb3cgY291bnQgaXMKLSAgICAgIGVtaXR0ZWQgYXQgdGhlIGVuZCBv ZiB0aGUgPGNvbW1hbmQ+Q09QWSBGUk9NPC9jb21tYW5kPiBpZiBhdCBsZWFzdCBvbmUKLSAgICAg IHJvdyB3YXMgZGlzY2FyZGVkLiBXaGVuIDxsaXRlcmFsPkxPR19WRVJCT1NJVFk8L2xpdGVyYWw+ IG9wdGlvbiBpcyBzZXQgdG8KLSAgICAgIDxsaXRlcmFsPnZlcmJvc2U8L2xpdGVyYWw+LCBhIDxs aXRlcmFsPk5PVElDRTwvbGl0ZXJhbD4gbWVzc2FnZQorICAgICAgV2hlbiA8bGl0ZXJhbD5MT0df VkVSQk9TSVRZPC9saXRlcmFsPiBvcHRpb24gaXMgc2V0IHRvIDxsaXRlcmFsPnZlcmJvc2U8L2xp dGVyYWw+LAorICAgICAgZm9yIDxsaXRlcmFsPmlnbm9yZTwvbGl0ZXJhbD4gb3B0aW9uLCBhIDxs aXRlcmFsPk5PVElDRTwvbGl0ZXJhbD4gbWVzc2FnZQogICAgICAgY29udGFpbmluZyB0aGUgbGlu ZSBvZiB0aGUgaW5wdXQgZmlsZSBhbmQgdGhlIGNvbHVtbiBuYW1lIHdob3NlIGlucHV0Ci0gICAg ICBjb252ZXJzaW9uIGhhcyBmYWlsZWQgaXMgZW1pdHRlZCBmb3IgZWFjaCBkaXNjYXJkZWQgcm93 LgotICAgICAgV2hlbiBpdCBpcyBzZXQgdG8gPGxpdGVyYWw+c2lsZW50PC9saXRlcmFsPiwgbm8g bWVzc2FnZSBpcyBlbWl0dGVkCi0gICAgICByZWdhcmRpbmcgaWdub3JlZCByb3dzLgorICAgICAg Y29udmVyc2lvbiBoYXMgZmFpbGVkIGlzIGVtaXR0ZWQgZm9yIGVhY2ggZGlzY2FyZGVkIHJvdzsK KyAgICAgIGZvciA8bGl0ZXJhbD5zZXRfbnVsbDwvbGl0ZXJhbD4gb3B0aW9uLCBhIDxsaXRlcmFs Pk5PVElDRTwvbGl0ZXJhbD4KKyAgICAgIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgbGluZSBvZiB0 aGUgaW5wdXQgZmlsZSBhbmQgdGhlIGNvbHVtbiBuYW1lIHdoZXJlCisgICAgICB2YWx1ZSB3YXMg cmVwbGFjZWQgd2l0aCA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBmb3IgZWFjaCBpbnB1dCBjb252 ZXJzaW9uCisgICAgICBmYWlsdXJlLgorICAgICAgV2hlbiBpdCBpcyBzZXQgdG8gPGxpdGVyYWw+ c2lsZW50PC9saXRlcmFsPiwgbm8gbWVzc2FnZSBpcyBlbWl0dGVkIHJlZ2FyZGluZyBpbnB1dCBj b252ZXJzaW9uIGZhaWxlZCByb3dzLgogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAg IDwvdmFybGlzdGVudHJ5PgpAQCAtNDU4LDcgKzQ3MSw4IEBAIENPUFkgeyA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKCA8cmVwbGFjZWFi bGUKICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgIFRoaXMgaXMgY3VycmVudGx5IHVz ZWQgaW4gPGNvbW1hbmQ+Q09QWSBGUk9NPC9jb21tYW5kPiBjb21tYW5kIHdoZW4KLSAgICAgIDxs aXRlcmFsPk9OX0VSUk9SPC9saXRlcmFsPiBvcHRpb24gaXMgc2V0IHRvIDxsaXRlcmFsPmlnbm9y ZTwvbGl0ZXJhbD4uCisgICAgICA8bGl0ZXJhbD5PTl9FUlJPUjwvbGl0ZXJhbD4gb3B0aW9uIGlz IHNldCB0byA8bGl0ZXJhbD5pZ25vcmU8L2xpdGVyYWw+CisgICAgICBvciA8bGl0ZXJhbD5zZXRf bnVsbDwvbGl0ZXJhbD4uCiAgICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFy bGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weS5jCmluZGV4IDc0YWU0MmIxOWE3Li5mOTYzZDBlNTFmZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NvcHkuYwpAQCAtNDAzLDEyICs0MDMsMTQgQEAgZGVmR2V0Q29weU9uRXJyb3JD aG9pY2UoRGVmRWxlbSAqZGVmLCBQYXJzZVN0YXRlICpwc3RhdGUsIGJvb2wgaXNfZnJvbSkKIAkJ CQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZGVmLT5sb2NhdGlvbikpKTsKIAogCS8qCi0J ICogQWxsb3cgInN0b3AiLCBvciAiaWdub3JlIiB2YWx1ZXMuCisJICogQWxsb3cgInN0b3AiLCAi aWdub3JlIiwgInNldF9udWxsIiB2YWx1ZXMuCiAJICovCiAJaWYgKHBnX3N0cmNhc2VjbXAoc3Zh bCwgInN0b3AiKSA9PSAwKQogCQlyZXR1cm4gQ09QWV9PTl9FUlJPUl9TVE9QOwogCWlmIChwZ19z dHJjYXNlY21wKHN2YWwsICJpZ25vcmUiKSA9PSAwKQogCQlyZXR1cm4gQ09QWV9PTl9FUlJPUl9J R05PUkU7CisJaWYgKHBnX3N0cmNhc2VjbXAoc3ZhbCwgInNldF9udWxsIikgPT0gMCkKKwkJcmV0 dXJuIENPUFlfT05fRVJST1JfU0VUX05VTEw7CiAKIAllcmVwb3J0KEVSUk9SLAogCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCkBAIC05MTgsNyArOTIwLDcgQEAg UHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29kZShFUlJD T0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJIGVycm1zZygib25seSBPTl9FUlJPUiBTVE9QIGlzIGFs bG93ZWQgaW4gQklOQVJZIG1vZGUiKSkpOwogCi0JaWYgKG9wdHNfb3V0LT5yZWplY3RfbGltaXQg JiYgIW9wdHNfb3V0LT5vbl9lcnJvcikKKwlpZiAob3B0c19vdXQtPnJlamVjdF9saW1pdCAmJiBv cHRzX291dC0+b25fZXJyb3IgIT0gQ09QWV9PTl9FUlJPUl9JR05PUkUpCiAJCWVyZXBvcnQoRVJS T1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJCS8q LSB0cmFuc2xhdG9yOiBmaXJzdCBhbmQgc2Vjb25kICVzIGFyZSB0aGUgbmFtZXMgb2YgQ09QWSBv cHRpb24sIGUuZy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4IGZiYmJjMDlhOTdiLi5kNGE5 MWI2OGFjMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCkBAIC0xNDY3LDE0ICsxNDY3LDIyIEBA IENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCS8qIERvbmUsIGNsZWFuIHVwICovCiAJ ZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogCi0JaWYgKGNzdGF0 ZS0+b3B0cy5vbl9lcnJvciAhPSBDT1BZX09OX0VSUk9SX1NUT1AgJiYKLQkJY3N0YXRlLT5udW1f ZXJyb3JzID4gMCAmJgorCWlmIChjc3RhdGUtPm51bV9lcnJvcnMgPiAwICYmCiAJCWNzdGF0ZS0+ b3B0cy5sb2dfdmVyYm9zaXR5ID49IENPUFlfTE9HX1ZFUkJPU0lUWV9ERUZBVUxUKQotCQllcmVw b3J0KE5PVElDRSwKLQkJCQllcnJtc2dfcGx1cmFsKCIlIiBQUkl1NjQgIiByb3cgd2FzIHNraXBw ZWQgZHVlIHRvIGRhdGEgdHlwZSBpbmNvbXBhdGliaWxpdHkiLAotCQkJCQkJCSAgIiUiIFBSSXU2 NCAiIHJvd3Mgd2VyZSBza2lwcGVkIGR1ZSB0byBkYXRhIHR5cGUgaW5jb21wYXRpYmlsaXR5IiwK LQkJCQkJCQkgIGNzdGF0ZS0+bnVtX2Vycm9ycywKLQkJCQkJCQkgIGNzdGF0ZS0+bnVtX2Vycm9y cykpOworCXsKKwkJaWYgKGNzdGF0ZS0+b3B0cy5vbl9lcnJvciA9PSBDT1BZX09OX0VSUk9SX0lH Tk9SRSkKKwkJCWVyZXBvcnQoTk9USUNFLAorCQkJCQllcnJtc2dfcGx1cmFsKCIlIiBQUkl1NjQg IiByb3cgd2FzIHNraXBwZWQgZHVlIHRvIGRhdGEgdHlwZSBpbmNvbXBhdGliaWxpdHkiLAorCQkJ CQkJCQkgICIlIiBQUkl1NjQgIiByb3dzIHdlcmUgc2tpcHBlZCBkdWUgdG8gZGF0YSB0eXBlIGlu Y29tcGF0aWJpbGl0eSIsCisJCQkJCQkJCSAgY3N0YXRlLT5udW1fZXJyb3JzLAorCQkJCQkJCQkg IGNzdGF0ZS0+bnVtX2Vycm9ycykpOworCQllbHNlIGlmIChjc3RhdGUtPm9wdHMub25fZXJyb3Ig PT0gQ09QWV9PTl9FUlJPUl9TRVRfTlVMTCkKKwkJCWVyZXBvcnQoTk9USUNFLAorCQkJCQllcnJt c2dfcGx1cmFsKCJpbnZhbGlkIHZhbHVlcyBpbiAlIiBQUkl1NjQgIiByb3cgd2FzIHJlcGxhY2Vk IHdpdGggbnVsbCBkdWUgdG8gZGF0YSB0eXBlIGluY29tcGF0aWJpbGl0eSIsCisJCQkJCQkJCSAg ImludmFsaWQgdmFsdWVzIGluICUiIFBSSXU2NCAiIHJvd3Mgd2VyZSByZXBsYWNlZCB3aXRoIG51 bGwgZHVlIHRvIGRhdGEgdHlwZSBpbmNvbXBhdGliaWxpdHkiLAorCQkJCQkJCQkgIGNzdGF0ZS0+ bnVtX2Vycm9ycywKKwkJCQkJCQkJICBjc3RhdGUtPm51bV9lcnJvcnMpKTsKKwl9CiAKIAlpZiAo YmlzdGF0ZSAhPSBOVUxMKQogCQlGcmVlQnVsa0luc2VydFN0YXRlKGJpc3RhdGUpOwpAQCAtMTYy MiwxMCArMTYzMCwxMSBAQCBCZWdpbkNvcHlGcm9tKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJY3N0 YXRlLT5lc2NvbnRleHQtPmVycm9yX29jY3VycmVkID0gZmFsc2U7CiAKIAkJLyoKLQkJICogQ3Vy cmVudGx5IHdlIG9ubHkgc3VwcG9ydCBDT1BZX09OX0VSUk9SX0lHTk9SRS4gV2UnbGwgYWRkIG90 aGVyCi0JCSAqIG9wdGlvbnMgbGF0ZXIKKwkJICogQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBD T1BZX09OX0VSUk9SX0lHTk9SRSwgQ09QWV9PTl9FUlJPUl9TRVRfTlVMTC4KKwkJICogV2UnbGwg YWRkIG90aGVyIG9wdGlvbnMgbGF0ZXIKIAkJICovCi0JCWlmIChjc3RhdGUtPm9wdHMub25fZXJy b3IgPT0gQ09QWV9PTl9FUlJPUl9JR05PUkUpCisJCWlmIChjc3RhdGUtPm9wdHMub25fZXJyb3Ig PT0gQ09QWV9PTl9FUlJPUl9JR05PUkUgfHwKKwkJCWNzdGF0ZS0+b3B0cy5vbl9lcnJvciA9PSBD T1BZX09OX0VSUk9SX1NFVF9OVUxMKQogCQkJY3N0YXRlLT5lc2NvbnRleHQtPmRldGFpbHNfd2Fu dGVkID0gZmFsc2U7CiAJfQogCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NvcHlmcm9tcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYwpp bmRleCBmNWZjMzQ2ZTIwMS4uNzllNzI2NzAxYWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvcHlmcm9tcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJv bXBhcnNlLmMKQEAgLTk0Nyw2ICs5NDcsNyBAQCBDb3B5RnJvbVRleHRMaWtlT25lUm93KENvcHlG cm9tU3RhdGUgY3N0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCiAJaW50CQkJZmxkY3Q7CiAJ aW50CQkJZmllbGRubzsKIAljaGFyCSAgICpzdHJpbmc7CisJYm9vbAkJY3VycmVudF9yb3dfZXJy b25lb3VzID0gZmFsc2U7CiAKIAl0dXBEZXNjID0gUmVsYXRpb25HZXREZXNjcihjc3RhdGUtPnJl bCk7CiAJYXR0cl9jb3VudCA9IGxpc3RfbGVuZ3RoKGNzdGF0ZS0+YXR0bnVtbGlzdCk7CkBAIC0x MDI0LDcgKzEwMjUsOCBAQCBDb3B5RnJvbVRleHRMaWtlT25lUm93KENvcHlGcm9tU3RhdGUgY3N0 YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCiAJCX0KIAogCQkvKgotCQkgKiBJZiBPTl9FUlJP UiBpcyBzcGVjaWZpZWQgd2l0aCBJR05PUkUsIHNraXAgcm93cyB3aXRoIHNvZnQgZXJyb3JzCisJ CSAqIElmIE9OX0VSUk9SIGlzIHNwZWNpZmllZCB3aXRoIElHTk9SRSwgc2tpcCByb3dzIHdpdGgg c29mdCBlcnJvcnMuCisJCSAqIElmIE9OX0VSUk9SIGlzIHNwZWNpZmllZCB3aXRoIHNldF9udWxs LCB0cnkgdG8gcmVwbGFjZSB3aXRoIG51bGwuCiAJCSAqLwogCQllbHNlIGlmICghSW5wdXRGdW5j dGlvbkNhbGxTYWZlKCZpbl9mdW5jdGlvbnNbbV0sCiAJCQkJCQkJCQkJc3RyaW5nLApAQCAtMTAz NSw5ICsxMDM3LDY1IEBAIENvcHlGcm9tVGV4dExpa2VPbmVSb3coQ29weUZyb21TdGF0ZSBjc3Rh dGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwKIAkJewogCQkJQXNzZXJ0KGNzdGF0ZS0+b3B0cy5v bl9lcnJvciAhPSBDT1BZX09OX0VSUk9SX1NUT1ApOwogCisJCQlpZiAoY3N0YXRlLT5vcHRzLm9u X2Vycm9yID09IENPUFlfT05fRVJST1JfU0VUX05VTEwpCisJCQl7CisJCQkJLyoKKwkJCQkgKiB3 ZSB1c2UgaXQgdG8gY291bnQgbnVtYmVyIG9mIHJvd3MgKG5vdCBmaWVsZHMhKSB0aGF0CisJCQkJ ICogc3VjY2Vzc2Z1bGx5IGFwcGxpZWQgb25fZXJyb3Igc2V0X251bGwuCisJCQkJKi8KKwkJCQlp ZiAoIWN1cnJlbnRfcm93X2Vycm9uZW91cykKKwkJCQkJY3VycmVudF9yb3dfZXJyb25lb3VzID0g dHJ1ZTsKKworCQkJCS8qCisJCQkJICogd2hlbiBjb2x1bW4gdHlwZSBpcyBkb21haW4gd2l0aCBu b3QtbnVsbCBjb25zdHJhaW50LCB3ZSBuZWVkCisJCQkJICogYW5vdGhlciBJbnB1dEZ1bmN0aW9u Q2FsbFNhZmUgdG8gZXJyb3Igb3V0IGRvbWFpbiBjb25zdHJhaW50CisJCQkJICogdmlvbGF0aW9u LgorCQkJCSovCisJCQkJY3N0YXRlLT5lc2NvbnRleHQtPmVycm9yX29jY3VycmVkID0gZmFsc2U7 CisJCQkJaWYgKElucHV0RnVuY3Rpb25DYWxsU2FmZSgmaW5fZnVuY3Rpb25zW21dLAorCQkJCQkJ CQkJCSAgTlVMTCwKKwkJCQkJCQkJCQkgIHR5cGlvcGFyYW1zW21dLAorCQkJCQkJCQkJCSAgYXR0 LT5hdHR0eXBtb2QsCisJCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJCSAgJnZhbHVlc1ttXSkp CisJCQkJeworCQkJCQludWxsc1ttXSA9IHRydWU7CisJCQkJCXZhbHVlc1ttXSA9IChEYXR1bSkg MDsKKworCQkJCQlpZiAoY3N0YXRlLT5vcHRzLmxvZ192ZXJib3NpdHkgPT0gQ09QWV9MT0dfVkVS Qk9TSVRZX1ZFUkJPU0UpCisJCQkJCXsKKwkJCQkJCWNoYXIJICAgKmF0dHZhbDsKKworCQkJCQkJ LyoKKwkJCQkJCSAqIFNpbmNlIHdlIGVtaXQgbGluZSBudW1iZXIgYW5kIGNvbHVtbiBpbmZvIGlu IHRoZSBiZWxvdworCQkJCQkJICogbm90aWNlIG1lc3NhZ2UsIHdlIHN1cHByZXNzIGVycm9yIGNv bnRleHQgaW5mb3JtYXRpb24gb3RoZXIKKwkJCQkJCSAqIHRoYW4gdGhlIHJlbGF0aW9uIG5hbWUu CisJCQkJCQkqLworCQkJCQkJQXNzZXJ0KCFjc3RhdGUtPnJlbG5hbWVfb25seSk7CisJCQkJCQlB c3NlcnQoY3N0YXRlLT5jdXJfYXR0dmFsKTsKKworCQkJCQkJY3N0YXRlLT5yZWxuYW1lX29ubHkg PSB0cnVlOworCQkJCQkJYXR0dmFsID0gQ29weUxpbWl0UHJpbnRvdXRMZW5ndGgoY3N0YXRlLT5j dXJfYXR0dmFsKTsKKwkJCQkJCWVyZXBvcnQoTk9USUNFLAorCQkJCQkJCQllcnJtc2coInNldHRp bmcgdG8gbnVsbCBkdWUgdG8gZGF0YSB0eXBlIGluY29tcGF0aWJpbGl0eSBhdCBsaW5lICUiIFBS SXU2NCAiIGZvciBjb2x1bW4gXCIlc1wiOiBcIiVzXCIiLAorCQkJCQkJCQkJCWNzdGF0ZS0+Y3Vy X2xpbmVubywKKwkJCQkJCQkJCQljc3RhdGUtPmN1cl9hdHRuYW1lLAorCQkJCQkJCQkJCWF0dHZh bCkpOworCQkJCQkJcGZyZWUoYXR0dmFsKTsKKworCQkJCQkJLyogcmVzZXQgcmVsbmFtZV9vbmx5 ICovCisJCQkJCQljc3RhdGUtPnJlbG5hbWVfb25seSA9IGZhbHNlOworCQkJCQl9CisKKwkJCQkJ Y3N0YXRlLT5jdXJfYXR0bmFtZSA9IE5VTEw7CisKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJ fQogCQkJY3N0YXRlLT5udW1fZXJyb3JzKys7CiAKLQkJCWlmIChjc3RhdGUtPm9wdHMubG9nX3Zl cmJvc2l0eSA9PSBDT1BZX0xPR19WRVJCT1NJVFlfVkVSQk9TRSkKKwkJCWlmIChjc3RhdGUtPm9w dHMubG9nX3ZlcmJvc2l0eSA9PSBDT1BZX0xPR19WRVJCT1NJVFlfVkVSQk9TRSAmJgorCQkJCWNz dGF0ZS0+b3B0cy5vbl9lcnJvciA9PSBDT1BZX09OX0VSUk9SX0lHTk9SRSkKIAkJCXsKIAkJCQkv KgogCQkJCSAqIFNpbmNlIHdlIGVtaXQgbGluZSBudW1iZXIgYW5kIGNvbHVtbiBpbmZvIGluIHRo ZSBiZWxvdwpAQCAtMTA3Niw2ICsxMTM0LDkgQEAgQ29weUZyb21UZXh0TGlrZU9uZVJvdyhDb3B5 RnJvbVN0YXRlIGNzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LAogCQljc3RhdGUtPmN1cl9h dHR2YWwgPSBOVUxMOwogCX0KIAorCWlmIChjdXJyZW50X3Jvd19lcnJvbmVvdXMpCisJCWNzdGF0 ZS0+bnVtX2Vycm9ycysrOworCiAJQXNzZXJ0KGZpZWxkbm8gPT0gYXR0cl9jb3VudCk7CiAKIAly ZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYyBi L3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYwppbmRleCBjOTE2YjkyOTlhOC4uOGU2ZjQ5 MzA5MTkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYworKysgYi9z cmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKQEAgLTMyOTEsNyArMzI5MSw3IEBAIG1hdGNo X3ByZXZpb3VzX3dvcmRzKGludCBwYXR0ZXJuX2lkLAogCiAJLyogQ29tcGxldGUgQ09QWSA8c3Ro PiBGUk9NIGZpbGVuYW1lIFdJVEggKE9OX0VSUk9SICovCiAJZWxzZSBpZiAoTWF0Y2hlcygiQ09Q WXxcXGNvcHkiLCBNYXRjaEFueSwgIkZST018VE8iLCBNYXRjaEFueSwgIldJVEgiLCAiKCIsICJP Tl9FUlJPUiIpKQotCQlDT01QTEVURV9XSVRIKCJzdG9wIiwgImlnbm9yZSIpOworCQlDT01QTEVU RV9XSVRIKCJzdG9wIiwgImlnbm9yZSIsICJzZXRfbnVsbCIpOwogCiAJLyogQ29tcGxldGUgQ09Q WSA8c3RoPiBGUk9NIGZpbGVuYW1lIFdJVEggKExPR19WRVJCT1NJVFkgKi8KIAllbHNlIGlmIChN YXRjaGVzKCJDT1BZfFxcY29weSIsIE1hdGNoQW55LCAiRlJPTXxUTyIsIE1hdGNoQW55LCAiV0lU SCIsICIoIiwgIkxPR19WRVJCT1NJVFkiKSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2NvcHkuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaAppbmRleCAwNmRmZGZlZjcy MS4uOTM1ZDIxZWU3N2EgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaAor KysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKQEAgLTM4LDYgKzM4LDcgQEAgdHlwZWRl ZiBlbnVtIENvcHlPbkVycm9yQ2hvaWNlCiB7CiAJQ09QWV9PTl9FUlJPUl9TVE9QID0gMCwJCS8q IGltbWVkaWF0ZWx5IHRocm93IGVycm9ycywgZGVmYXVsdCAqLwogCUNPUFlfT05fRVJST1JfSUdO T1JFLAkJLyogaWdub3JlIGVycm9ycyAqLworCUNPUFlfT05fRVJST1JfU0VUX05VTEwsCQkvKiBz ZXQgZXJyb3IgZmllbGQgdG8gbnVsbCAqLwogfSBDb3B5T25FcnJvckNob2ljZTsKIAogLyoKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQKaW5kZXggNjRlYTMzYWVhZTguLjkxZmEyMDg3Y2Vm IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkyLm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkyLm91dApAQCAtODEsNiArODEsMTAgQEAgQ09Q WSB4IGZyb20gc3RkaW4gKG9uX2Vycm9yIGlnbm9yZSwgb25fZXJyb3IgaWdub3JlKTsKIEVSUk9S OiAgY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMKIExJTkUgMTogQ09QWSB4IGZyb20g c3RkaW4gKG9uX2Vycm9yIGlnbm9yZSwgb25fZXJyb3IgaWdub3JlKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorQ09QWSB4IGZyb20gc3RkaW4gKG9uX2Vy cm9yIHNldF9udWxsLCBvbl9lcnJvciBpZ25vcmUpOworRVJST1I6ICBjb25mbGljdGluZyBvciBy ZWR1bmRhbnQgb3B0aW9ucworTElORSAxOiBDT1BZIHggZnJvbSBzdGRpbiAob25fZXJyb3Igc2V0 X251bGwsIG9uX2Vycm9yIGlnbm9yZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXgogQ09QWSB4IGZyb20gc3RkaW4gKGxvZ192ZXJib3NpdHkgZGVmYXVs dCwgbG9nX3ZlcmJvc2l0eSB2ZXJib3NlKTsKIEVSUk9SOiAgY29uZmxpY3Rpbmcgb3IgcmVkdW5k YW50IG9wdGlvbnMKIExJTkUgMTogQ09QWSB4IGZyb20gc3RkaW4gKGxvZ192ZXJib3NpdHkgZGVm YXVsdCwgbG9nX3ZlcmJvc2l0eSB2ZXJiLi4uCkBAIC05Miw2ICs5NiwxMCBAQCBDT1BZIHggZnJv bSBzdGRpbiAoZm9ybWF0IEJJTkFSWSwgbnVsbCAneCcpOwogRVJST1I6ICBjYW5ub3Qgc3BlY2lm eSBOVUxMIGluIEJJTkFSWSBtb2RlCiBDT1BZIHggZnJvbSBzdGRpbiAoZm9ybWF0IEJJTkFSWSwg b25fZXJyb3IgaWdub3JlKTsKIEVSUk9SOiAgb25seSBPTl9FUlJPUiBTVE9QIGlzIGFsbG93ZWQg aW4gQklOQVJZIG1vZGUKK0NPUFkgeCBmcm9tIHN0ZGluIChmb3JtYXQgQklOQVJZLCBvbl9lcnJv ciBzZXRfbnVsbCk7CitFUlJPUjogIG9ubHkgT05fRVJST1IgU1RPUCBpcyBhbGxvd2VkIGluIEJJ TkFSWSBtb2RlCitDT1BZIHggZnJvbSBzdGRpbiAob25fZXJyb3Igc2V0X251bGwsIHJlamVjdF9s aW1pdCAyKTsKK0VSUk9SOiAgQ09QWSBSRUpFQ1RfTElNSVQgcmVxdWlyZXMgT05fRVJST1IgdG8g YmUgc2V0IHRvIElHTk9SRQogQ09QWSB4IGZyb20gc3RkaW4gKG9uX2Vycm9yIHVuc3VwcG9ydGVk KTsKIEVSUk9SOiAgQ09QWSBPTl9FUlJPUiAidW5zdXBwb3J0ZWQiIG5vdCByZWNvZ25pemVkCiBM SU5FIDE6IENPUFkgeCBmcm9tIHN0ZGluIChvbl9lcnJvciB1bnN1cHBvcnRlZCk7CkBAIC0xMjQs NiArMTMyLDEwIEBAIENPUFkgeCB0byBzdGRvdXQgKGZvcm1hdCBCSU5BUlksIG9uX2Vycm9yIHVu c3VwcG9ydGVkKTsKIEVSUk9SOiAgQ09QWSBPTl9FUlJPUiBjYW5ub3QgYmUgdXNlZCB3aXRoIENP UFkgVE8KIExJTkUgMTogQ09QWSB4IHRvIHN0ZG91dCAoZm9ybWF0IEJJTkFSWSwgb25fZXJyb3Ig dW5zdXBwb3J0ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBe CitDT1BZIHggdG8gc3Rkb3V0IChvbl9lcnJvciBzZXRfbnVsbCk7CitFUlJPUjogIENPUFkgT05f RVJST1IgY2Fubm90IGJlIHVzZWQgd2l0aCBDT1BZIFRPCitMSU5FIDE6IENPUFkgeCB0byBzdGRv dXQgKG9uX2Vycm9yIHNldF9udWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXgogQ09Q WSB4IGZyb20gc3RkaW4gKGxvZ192ZXJib3NpdHkgdW5zdXBwb3J0ZWQpOwogRVJST1I6ICBDT1BZ IExPR19WRVJCT1NJVFkgInVuc3VwcG9ydGVkIiBub3QgcmVjb2duaXplZAogTElORSAxOiBDT1BZ IHggZnJvbSBzdGRpbiAobG9nX3ZlcmJvc2l0eSB1bnN1cHBvcnRlZCk7CkBAIC03NjksNiArNzgx LDUxIEBAIENPTlRFWFQ6ICBDT1BZIGNoZWNrX2lnbl9lcnIKIE5PVElDRTogIHNraXBwaW5nIHJv dyBkdWUgdG8gZGF0YSB0eXBlIGluY29tcGF0aWJpbGl0eSBhdCBsaW5lIDggZm9yIGNvbHVtbiAi ayI6ICJhIgogQ09OVEVYVDogIENPUFkgY2hlY2tfaWduX2VycgogTk9USUNFOiAgNiByb3dzIHdl cmUgc2tpcHBlZCBkdWUgdG8gZGF0YSB0eXBlIGluY29tcGF0aWJpbGl0eQorQ1JFQVRFIERPTUFJ TiBkX2ludF9ub3RfbnVsbCBBUyBJTlQgTk9UIE5VTEwgQ0hFQ0sodmFsdWUgPiAwKTsKK0NSRUFU RSBET01BSU4gZF9pbnRfcG9zaXRpdmVfbWF5YmVfbnVsbCBBUyBJTlQgQ0hFQ0sodmFsdWUgPiAw KTsKK0NSRUFURSBUQUJMRSB0X29uX2Vycm9yX251bGwgKGEgZF9pbnRfbm90X251bGwsIGIgZF9p bnRfcG9zaXRpdmVfbWF5YmVfbnVsbCwgYyBJTlQpOworXHBzZXQgbnVsbCBOVUxMCistLWZhaWws IGNvbHVtbiBhIGNhbm5vdCBzZXQgdG8gbnVsbCB2YWx1ZQorQ09QWSB0X29uX2Vycm9yX251bGwg RlJPTSBTVERJTiBXSVRIIChvbl9lcnJvciBzZXRfbnVsbCk7CitFUlJPUjogIGRvbWFpbiBkX2lu dF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworQ09OVEVYVDogIENPUFkgdF9v bl9lcnJvcl9udWxsLCBsaW5lIDEsIGNvbHVtbiBhOiBudWxsIGlucHV0CistLWZhaWwsIGNvbHVt biBhIGlzIGRvbWFpbiB3aXRoIG5vdC1udWxsIGNvbnN0cmFpbnQKK0NPUFkgdF9vbl9lcnJvcl9u dWxsIEZST00gU1RESU4gV0lUSCAob25fZXJyb3Igc2V0X251bGwpOworRVJST1I6ICBkb21haW4g ZF9pbnRfbm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKK0NPTlRFWFQ6ICBDT1BZ IHRfb25fZXJyb3JfbnVsbCwgbGluZSAxLCBjb2x1bW4gYTogImEiCistLWZhaWwsIGNvbHVtbiBh IGNhbm5vdCBzZXQgdG8gbnVsbCB2YWx1ZQorQ09QWSB0X29uX2Vycm9yX251bGwgRlJPTSBTVERJ TiBXSVRIIChvbl9lcnJvciBzZXRfbnVsbCk7CitFUlJPUjogIGRvbWFpbiBkX2ludF9ub3RfbnVs bCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworQ09OVEVYVDogIENPUFkgdF9vbl9lcnJvcl9u dWxsLCBsaW5lIDEsIGNvbHVtbiBhOiAiLTEiCistLWZhaWwuIGxlc3MgZGF0YQorQ09QWSB0X29u X2Vycm9yX251bGwgRlJPTSBTVERJTiBXSVRIIChkZWxpbWl0ZXIgJywnLCBvbl9lcnJvciBzZXRf bnVsbCk7CitFUlJPUjogIG1pc3NpbmcgZGF0YSBmb3IgY29sdW1uICJjIgorQ09OVEVYVDogIENP UFkgdF9vbl9lcnJvcl9udWxsLCBsaW5lIDE6ICIxLDEiCistLWZhaWwuIGV4dHJhIGRhdGEKK0NP UFkgdF9vbl9lcnJvcl9udWxsIEZST00gU1RESU4gV0lUSCAoZGVsaW1pdGVyICcsJywgb25fZXJy b3Igc2V0X251bGwpOworRVJST1I6ICBleHRyYSBkYXRhIGFmdGVyIGxhc3QgZXhwZWN0ZWQgY29s dW1uCitDT05URVhUOiAgQ09QWSB0X29uX2Vycm9yX251bGwsIGxpbmUgMTogIjEsMiwzLDQiCist LW9rCitDT1BZIHRfb25fZXJyb3JfbnVsbCBGUk9NIFNURElOIFdJVEggKG9uX2Vycm9yIHNldF9u dWxsLCBsb2dfdmVyYm9zaXR5IHZlcmJvc2UpOworTk9USUNFOiAgc2V0dGluZyB0byBudWxsIGR1 ZSB0byBkYXRhIHR5cGUgaW5jb21wYXRpYmlsaXR5IGF0IGxpbmUgMSBmb3IgY29sdW1uICJiIjog IngxIgorQ09OVEVYVDogIENPUFkgdF9vbl9lcnJvcl9udWxsCitOT1RJQ0U6ICBzZXR0aW5nIHRv IG51bGwgZHVlIHRvIGRhdGEgdHlwZSBpbmNvbXBhdGliaWxpdHkgYXQgbGluZSAxIGZvciBjb2x1 bW4gImMiOiAieXgiCitDT05URVhUOiAgQ09QWSB0X29uX2Vycm9yX251bGwKK05PVElDRTogIHNl dHRpbmcgdG8gbnVsbCBkdWUgdG8gZGF0YSB0eXBlIGluY29tcGF0aWJpbGl0eSBhdCBsaW5lIDIg Zm9yIGNvbHVtbiAiYiI6ICJ6eCIKK0NPTlRFWFQ6ICBDT1BZIHRfb25fZXJyb3JfbnVsbAorTk9U SUNFOiAgc2V0dGluZyB0byBudWxsIGR1ZSB0byBkYXRhIHR5cGUgaW5jb21wYXRpYmlsaXR5IGF0 IGxpbmUgMyBmb3IgY29sdW1uICJjIjogImVhIgorQ09OVEVYVDogIENPUFkgdF9vbl9lcnJvcl9u dWxsCitOT1RJQ0U6ICBpbnZhbGlkIHZhbHVlcyBpbiAzIHJvd3Mgd2VyZSByZXBsYWNlZCB3aXRo IG51bGwgZHVlIHRvIGRhdGEgdHlwZSBpbmNvbXBhdGliaWxpdHkKKy0tIGNoZWNrIGluc2VydGVk IGNvbnRlbnQKK3NlbGVjdCAqIGZyb20gdF9vbl9lcnJvcl9udWxsOworIGEgIHwgIGIgICB8ICBj ICAgCistLS0tKy0tLS0tLSstLS0tLS0KKyAxMCB8IE5VTEwgfCBOVUxMCisgMTEgfCBOVUxMIHwg ICAxMgorIDEzIHwgICAxNCB8IE5VTEwKKygzIHJvd3MpCisKK1xwc2V0IG51bGwgJycKIC0tIHRl c3RzIGZvciBvbl9lcnJvciBvcHRpb24gd2l0aCBsb2dfdmVyYm9zaXR5IGFuZCBudWxsIGNvbnN0 cmFpbnQgdmlhIGRvbWFpbgogQ1JFQVRFIERPTUFJTiBkY2hlY2tfaWduX2VycjIgdmFyY2hhcigx NSkgTk9UIE5VTEw7CiBDUkVBVEUgVEFCTEUgY2hlY2tfaWduX2VycjIgKG4gaW50LCBtIGludFtd LCBrIGludCwgbCBkY2hlY2tfaWduX2VycjIpOwpAQCAtODI4LDYgKzg4NSw5IEBAIERST1AgVklF VyBpbnN0ZWFkX29mX2luc2VydF90YmxfdmlldzsKIERST1AgVklFVyBpbnN0ZWFkX29mX2luc2Vy dF90Ymxfdmlld18yOwogRFJPUCBGVU5DVElPTiBmdW5faW5zdGVhZF9vZl9pbnNlcnRfdGJsKCk7 CiBEUk9QIFRBQkxFIGNoZWNrX2lnbl9lcnI7CitEUk9QIFRBQkxFIHRfb25fZXJyb3JfbnVsbDsK K0RST1AgRE9NQUlOIGRfaW50X25vdF9udWxsOworRFJPUCBET01BSU4gZF9pbnRfcG9zaXRpdmVf bWF5YmVfbnVsbDsKIERST1AgVEFCTEUgY2hlY2tfaWduX2VycjI7CiBEUk9QIERPTUFJTiBkY2hl Y2tfaWduX2VycjI7CiBEUk9QIFRBQkxFIGhhcmRfZXJyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY29weTIuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weTIuc3FsCmlu ZGV4IDQ1MjczNTU3Y2UwLi5kMjdmMzQ5NWNmNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvY29weTIuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkyLnNxbApAQCAt NjcsMTIgKzY3LDE1IEBAIENPUFkgeCBmcm9tIHN0ZGluIChmb3JjZV9udWxsIChhKSwgZm9yY2Vf bnVsbCAoYikpOwogQ09QWSB4IGZyb20gc3RkaW4gKGNvbnZlcnRfc2VsZWN0aXZlbHkgKGEpLCBj b252ZXJ0X3NlbGVjdGl2ZWx5IChiKSk7CiBDT1BZIHggZnJvbSBzdGRpbiAoZW5jb2RpbmcgJ3Nx bF9hc2NpaScsIGVuY29kaW5nICdzcWxfYXNjaWknKTsKIENPUFkgeCBmcm9tIHN0ZGluIChvbl9l cnJvciBpZ25vcmUsIG9uX2Vycm9yIGlnbm9yZSk7CitDT1BZIHggZnJvbSBzdGRpbiAob25fZXJy b3Igc2V0X251bGwsIG9uX2Vycm9yIGlnbm9yZSk7CiBDT1BZIHggZnJvbSBzdGRpbiAobG9nX3Zl cmJvc2l0eSBkZWZhdWx0LCBsb2dfdmVyYm9zaXR5IHZlcmJvc2UpOwogCiAtLSBpbmNvcnJlY3Qg b3B0aW9ucwogQ09QWSB4IGZyb20gc3RkaW4gKGZvcm1hdCBCSU5BUlksIGRlbGltaXRlciAnLCcp OwogQ09QWSB4IGZyb20gc3RkaW4gKGZvcm1hdCBCSU5BUlksIG51bGwgJ3gnKTsKIENPUFkgeCBm cm9tIHN0ZGluIChmb3JtYXQgQklOQVJZLCBvbl9lcnJvciBpZ25vcmUpOworQ09QWSB4IGZyb20g c3RkaW4gKGZvcm1hdCBCSU5BUlksIG9uX2Vycm9yIHNldF9udWxsKTsKK0NPUFkgeCBmcm9tIHN0 ZGluIChvbl9lcnJvciBzZXRfbnVsbCwgcmVqZWN0X2xpbWl0IDIpOwogQ09QWSB4IGZyb20gc3Rk aW4gKG9uX2Vycm9yIHVuc3VwcG9ydGVkKTsKIENPUFkgeCBmcm9tIHN0ZGluIChmb3JtYXQgVEVY VCwgZm9yY2VfcXVvdGUoYSkpOwogQ09QWSB4IGZyb20gc3RkaW4gKGZvcm1hdCBURVhULCBmb3Jj ZV9xdW90ZSAqKTsKQEAgLTg3LDYgKzkwLDcgQEAgQ09QWSB4IGZyb20gc3RkaW4gKGZvcm1hdCBU RVhULCBmb3JjZV9udWxsICopOwogQ09QWSB4IHRvIHN0ZG91dCAoZm9ybWF0IENTViwgZm9yY2Vf bnVsbChhKSk7CiBDT1BZIHggdG8gc3Rkb3V0IChmb3JtYXQgQ1NWLCBmb3JjZV9udWxsICopOwog Q09QWSB4IHRvIHN0ZG91dCAoZm9ybWF0IEJJTkFSWSwgb25fZXJyb3IgdW5zdXBwb3J0ZWQpOwor Q09QWSB4IHRvIHN0ZG91dCAob25fZXJyb3Igc2V0X251bGwpOwogQ09QWSB4IGZyb20gc3RkaW4g KGxvZ192ZXJib3NpdHkgdW5zdXBwb3J0ZWQpOwogQ09QWSB4IGZyb20gc3RkaW4gd2l0aCAocmVq ZWN0X2xpbWl0IDEpOwogQ09QWSB4IGZyb20gc3RkaW4gd2l0aCAob25fZXJyb3IgaWdub3JlLCBy ZWplY3RfbGltaXQgMCk7CkBAIC01MzQsNiArNTM4LDQ1IEBAIGEJezJ9CTIKIDgJezh9CTgKIFwu CiAKK0NSRUFURSBET01BSU4gZF9pbnRfbm90X251bGwgQVMgSU5UIE5PVCBOVUxMIENIRUNLKHZh bHVlID4gMCk7CitDUkVBVEUgRE9NQUlOIGRfaW50X3Bvc2l0aXZlX21heWJlX251bGwgQVMgSU5U IENIRUNLKHZhbHVlID4gMCk7CitDUkVBVEUgVEFCTEUgdF9vbl9lcnJvcl9udWxsIChhIGRfaW50 X25vdF9udWxsLCBiIGRfaW50X3Bvc2l0aXZlX21heWJlX251bGwsIGMgSU5UKTsKKworXHBzZXQg bnVsbCBOVUxMCistLWZhaWwsIGNvbHVtbiBhIGNhbm5vdCBzZXQgdG8gbnVsbCB2YWx1ZQorQ09Q WSB0X29uX2Vycm9yX251bGwgRlJPTSBTVERJTiBXSVRIIChvbl9lcnJvciBzZXRfbnVsbCk7Citc TgkxMQkxMworXC4KKworLS1mYWlsLCBjb2x1bW4gYSBpcyBkb21haW4gd2l0aCBub3QtbnVsbCBj b25zdHJhaW50CitDT1BZIHRfb25fZXJyb3JfbnVsbCBGUk9NIFNURElOIFdJVEggKG9uX2Vycm9y IHNldF9udWxsKTsKK2EJMTEJMTQKK1wuCisKKy0tZmFpbCwgY29sdW1uIGEgY2Fubm90IHNldCB0 byBudWxsIHZhbHVlCitDT1BZIHRfb25fZXJyb3JfbnVsbCBGUk9NIFNURElOIFdJVEggKG9uX2Vy cm9yIHNldF9udWxsKTsKKy0xCTExCTEzCitcLgorCistLWZhaWwuIGxlc3MgZGF0YQorQ09QWSB0 X29uX2Vycm9yX251bGwgRlJPTSBTVERJTiBXSVRIIChkZWxpbWl0ZXIgJywnLCBvbl9lcnJvciBz ZXRfbnVsbCk7CisxLDEKK1wuCistLWZhaWwuIGV4dHJhIGRhdGEKK0NPUFkgdF9vbl9lcnJvcl9u dWxsIEZST00gU1RESU4gV0lUSCAoZGVsaW1pdGVyICcsJywgb25fZXJyb3Igc2V0X251bGwpOwor MSwyLDMsNAorXC4KKworLS1vaworQ09QWSB0X29uX2Vycm9yX251bGwgRlJPTSBTVERJTiBXSVRI IChvbl9lcnJvciBzZXRfbnVsbCwgbG9nX3ZlcmJvc2l0eSB2ZXJib3NlKTsKKzEwCXgxCXl4Cisx MQl6eAkxMgorMTMJMTQJZWEKK1wuCisKKy0tIGNoZWNrIGluc2VydGVkIGNvbnRlbnQKK3NlbGVj dCAqIGZyb20gdF9vbl9lcnJvcl9udWxsOworXHBzZXQgbnVsbCAnJwogLS0gdGVzdHMgZm9yIG9u X2Vycm9yIG9wdGlvbiB3aXRoIGxvZ192ZXJib3NpdHkgYW5kIG51bGwgY29uc3RyYWludCB2aWEg ZG9tYWluCiBDUkVBVEUgRE9NQUlOIGRjaGVja19pZ25fZXJyMiB2YXJjaGFyKDE1KSBOT1QgTlVM TDsKIENSRUFURSBUQUJMRSBjaGVja19pZ25fZXJyMiAobiBpbnQsIG0gaW50W10sIGsgaW50LCBs IGRjaGVja19pZ25fZXJyMik7CkBAIC02MDMsNiArNjQ2LDkgQEAgRFJPUCBWSUVXIGluc3RlYWRf b2ZfaW5zZXJ0X3RibF92aWV3OwogRFJPUCBWSUVXIGluc3RlYWRfb2ZfaW5zZXJ0X3RibF92aWV3 XzI7CiBEUk9QIEZVTkNUSU9OIGZ1bl9pbnN0ZWFkX29mX2luc2VydF90YmwoKTsKIERST1AgVEFC TEUgY2hlY2tfaWduX2VycjsKK0RST1AgVEFCTEUgdF9vbl9lcnJvcl9udWxsOworRFJPUCBET01B SU4gZF9pbnRfbm90X251bGw7CitEUk9QIERPTUFJTiBkX2ludF9wb3NpdGl2ZV9tYXliZV9udWxs OwogRFJPUCBUQUJMRSBjaGVja19pZ25fZXJyMjsKIERST1AgRE9NQUlOIGRjaGVja19pZ25fZXJy MjsKIERST1AgVEFCTEUgaGFyZF9lcnI7Ci0tIAoyLjM0LjEKCg== --000000000000a4cdae063203d507--