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 1rS9OC-00BhoV-Oi for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jan 2024 05:32:01 +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 1rS9OB-009m5F-Pm for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jan 2024 05:31:59 +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.94.2) (envelope-from ) id 1rS9OB-009m56-4q for pgsql-hackers@lists.postgresql.org; Tue, 23 Jan 2024 05:31:59 +0000 Received: from mail-vs1-xe34.google.com ([2607:f8b0:4864:20::e34]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rS9O7-002uNG-F5 for pgsql-hackers@postgresql.org; Tue, 23 Jan 2024 05:31:57 +0000 Received: by mail-vs1-xe34.google.com with SMTP id ada2fe7eead31-46af87380c7so44063137.3 for ; Mon, 22 Jan 2024 21:31:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705987914; x=1706592714; darn=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=uc7z1BkVgVYhccU6y0qnJkuvOVQpHkhvXmMGQ70WqCc=; b=ngLs/juTf3S8sGZ5kLH36DCJK4I+7GYHKHa+Focj1CBWcBnRf9bkOruwLgEMrgGDNw WzkEUI66APCSds1XW8PIDjwT1lazlCaW3bOktGIm1don2c+zpzgMsKfT/CO/qpfYJBFQ 8wwaMDaTnoE+Go/du3zNfkgGbXeJ86FsqZ6CCY7p179GEE8P/zXwS1TR2TBBUHBSOrp5 cExryNr1bUpKpx4m/faRTp5ogy5Rhl7we+7aGpFFZLZ7UUdXf+qcV/ur2mDeiOve97M9 Ph61Fc1VX8I2wVjwOninat0WWNyedW/NCcykscbWXBMsb7BpJE7ByWIIm3X28rnTIE/t YHIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705987914; x=1706592714; 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=uc7z1BkVgVYhccU6y0qnJkuvOVQpHkhvXmMGQ70WqCc=; b=McI3JSKj/PCeSpZGI9weFBdbmy1dxgozlWrd+j3KT+HDNcxDRP96+GDtY1/azQ2fEC HreyA+NuSMvyJOgU6x+BZxqCp7Lbj000qoEkiCC+R3xYMYqnYfuA1gP2JnYEDW7lGj0k y5Jym3Ochro1bzwr8ek9rOc1ItTuO59Kl5/81LgsbkxflbRWJJgNMYmAThjkJSqfWdg0 wZTPojS/npwDtKje1EZPwMZfe50XCDjRrCQf1wZy+LAeFJpZWDCEK0dU0loxqCyn3NDx OtLR7tOhZLV9MPcJFMSWpkrMEy2TRpkkTgPkSJ9aQVIgDJhlsa8l5WDGCVpTzHnNLRfQ glUQ== X-Gm-Message-State: AOJu0YxKin2HbgtqFOFpC1fRhhrV9uuj5gJS+/3XSkLgtfv0Mek4gY2d s6xCYKBDpNtXkS9vM8rAIsDe93yJ+5QMOlfUmPP+C1L1dz4zURMLiOIjtpWIY0S+V4jO/0Nmikn vtFqOjEAka7G0GhxV5Q4Z9iPc7yI= X-Google-Smtp-Source: AGHT+IGdOgGG6CE5a4QkWN7DRODVq0Z3cLmQZr2nWmjs8Vgcmr0XsHNQLBevtsmracQnfKVYYv2YgKcrq/tVO/RJ95Y= X-Received: by 2002:a67:ff8d:0:b0:469:5c02:a848 with SMTP id v13-20020a67ff8d000000b004695c02a848mr2344999vsq.33.1705987914193; Mon, 22 Jan 2024 21:31:54 -0800 (PST) MIME-Version: 1.0 References: <8620df11-96e4-4ca3-8f3c-33a479260961@joeconway.com> <4162f7f7-6fd6-4720-98e2-89f80e3de2ed@joeconway.com> In-Reply-To: From: jian he Date: Tue, 23 Jan 2024 13:31:00 +0800 Message-ID: Subject: Re: Emitting JSON to file using COPY TO To: Masahiko Sawada Cc: Joe Conway , Daniel Verite , Andrew Dunstan , Davin Shearer , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000009e28ce060f964365" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009e28ce060f964365 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jan 19, 2024 at 4:10=E2=80=AFPM Masahiko Sawada wrote: > > If I'm not missing, copyto_json.007.diff is the latest patch but it > needs to be rebased to the current HEAD. Here are random comments: > please check the latest version. > if (opts_out->json_mode) > + { > + if (is_from) > + ereport(ERROR, > + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), > + errmsg("cannot use JSON mode in COPY FROM"))); > + } > + else if (opts_out->force_array) > + ereport(ERROR, > + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), > + errmsg("COPY FORCE_ARRAY requires JSON mode"))); > > I think that flatting these two condition make the code more readable: I make it two condition check > if (opts_out->json_mode && is_from) > ereport(ERROR, ...); > > if (!opts_out->json_mode && opts_out->force_array) > ereport(ERROR, ...); > > Also these checks can be moved close to other checks at the end of > ProcessCopyOptions(). > Yes. I did it, please check it. > @@ -3395,6 +3395,10 @@ copy_opt_item: > { > $$ =3D makeDefElem("format", (Node *) makeString("csv= "), @1); > } > + | JSON > + { > + $$ =3D makeDefElem("format", (Node *) makeString("jso= n"), @1); > + } > | HEADER_P > { > $$ =3D makeDefElem("header", (Node *) makeBoolean(tru= e), @1); > @@ -3427,6 +3431,10 @@ copy_opt_item: > { > $$ =3D makeDefElem("encoding", (Node *) makeString($2= ), @1); > } > + | FORCE ARRAY > + { > + $$ =3D makeDefElem("force_array", (Node *) > makeBoolean(true), @1); > + } > ; > > I believe we don't need to support new options in old-style syntax. > > --- > @@ -3469,6 +3477,10 @@ copy_generic_opt_elem: > { > $$ =3D makeDefElem($1, $2, @1); > } > + | FORMAT_LA copy_generic_opt_arg > + { > + $$ =3D makeDefElem("format", $2, @1); > + } > ; > > I think it's not necessary. "format" option is already handled in > copy_generic_opt_elem. > test it, I found out this part is necessary. because a query with WITH like `copy (select 1) to stdout with (format json, force_array false); ` will fail. > --- > +/* need delimiter to start next json array element */ > +static bool json_row_delim_needed =3D false; > > I think it's cleaner to include json_row_delim_needed into CopyToStateDat= a. yes. I agree. So I did it. > --- > Splitting the patch into two patches: add json format and add > force_array option would make reviews easy. > done. one patch for json format, another one for force_array option. I also made the following cases fail. copy copytest to stdout (format csv, force_array false); ERROR: specify COPY FORCE_ARRAY is only allowed in JSON mode. If copy to table then call table_scan_getnextslot no need to worry about the Tupdesc. however if we copy a query output as format json, we may need to consider i= t. cstate->queryDesc->tupDesc is the output of Tupdesc, we can rely on this. for copy a query result to json, I memcpy( cstate->queryDesc->tupDesc) to the the slot's slot->tts_tupleDescriptor so composite_to_json can use cstate->queryDesc->tupDesc to do the work. I guess this will make it more bullet-proof. --0000000000009e28ce060f964365 Content-Type: text/x-patch; charset="US-ASCII"; name="v8-0002-Add-force_array-for-COPY-TO-json-fomrat.patch" Content-Disposition: attachment; filename="v8-0002-Add-force_array-for-COPY-TO-json-fomrat.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrpuzpso0 RnJvbSAyMTRhZDUzNGQxMzczMGNiYTEzMDA4Nzk4YzNkNzBmOGIzNjM0MzZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMjMgSmFuIDIwMjQgMTI6MjY6NDMgKzA4MDAKU3ViamVjdDogW1BBVENIIHY4 IDIvMl0gQWRkIGZvcmNlX2FycmF5IGZvciBDT1BZIFRPIGpzb24gZm9tcmF0LgoKbWFrZSBhZGQg b3BlbiBicmFja2V0cyBhbmQgY2xvc2UgZm9yIHRoZSB3aG9sZSBvdXRwdXQuCnNlcGFyYXRlIGVh Y2gganNvbiByb3cgd2l0aCBjb21tYSBhZnRlciB0aGUgZmlyc3Qgcm93LgotLS0KIGRvYy9zcmMv c2dtbC9yZWYvY29weS5zZ21sICAgICAgICAgfCAxNCArKysrKysrKysrKysrKwogc3JjL2JhY2tl bmQvY29tbWFuZHMvY29weS5jICAgICAgICB8IDE3ICsrKysrKysrKysrKysrKysrCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9jb3B5dG8uYyAgICAgIHwgMzAgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgIHwgIDQgKysrKwogc3Jj L2luY2x1ZGUvY29tbWFuZHMvY29weS5oICAgICAgICB8ICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY29weS5vdXQgfCAyNCArKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsICAgICAgfCAxMCArKysrKysrKysrCiA3IGZpbGVzIGNoYW5n ZWQsIDEwMCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jb3B5 LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbAppbmRleCBjY2Q5MGI2MS4uZDE5MzMy YWMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY29weS5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9yZWYvY29weS5zZ21sCkBAIC00Myw2ICs0Myw3IEBAIENPUFkgeyA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKCA8cmVwbGFjZWFi bGUKICAgICBGT1JDRV9RVU9URSB7ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNv bHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIHwgKiB9CiAgICAgRk9SQ0VfTk9UX05V TEwgeyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFj ZWFibGU+IFssIC4uLl0gKSB8ICogfQogICAgIEZPUkNFX05VTEwgeyAoIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSB8ICog fQorICAgIEZPUkNFX0FSUkFZIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmJvb2xl YW48L3JlcGxhY2VhYmxlPiBdCiAgICAgT05fRVJST1IgJzxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5lcnJvcl9hY3Rpb248L3JlcGxhY2VhYmxlPicKICAgICBFTkNPRElORyAnPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmVuY29kaW5nX25hbWU8L3JlcGxhY2VhYmxlPicKIDwv c3lub3BzaXM+CkBAIC0zNzksNiArMzgwLDE5IEBAIENPUFkgeyA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKCA8cmVwbGFjZWFibGUKICAg ICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgPHRlcm0+PGxpdGVyYWw+Rk9SQ0VfQVJSQVk8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxsaXN0 aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBGb3JjZSBvdXRwdXQgb2Ygc3F1YXJlIGJyYWNrZXRz IGFzIGFycmF5IGRlY29yYXRpb25zIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgIGFuZCBlbmQgb2Yg b3V0cHV0LCBhbmQgY29tbWFzIGJldHdlZW4gdGhlIHJvd3MuIEl0IGlzIGFsbG93ZWQgb25seSBp bgorICAgICAgPGNvbW1hbmQ+Q09QWSBUTzwvY29tbWFuZD4sIGFuZCBvbmx5IHdoZW4gdXNpbmcK KyAgICAgIDxsaXRlcmFsPkpTT048L2xpdGVyYWw+IGZvcm1hdC4gVGhlIGRlZmF1bHQgaXMKKyAg ICAgIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0 ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT48 bGl0ZXJhbD5PTl9FUlJPUjwvbGl0ZXJhbD48L3Rlcm0+CiAgICAgPGxpc3RpdGVtPgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29weS5jCmluZGV4IDVkNWI3MzNkLi5lMTUwNTZlMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29weS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwpAQCAtNDU2 LDYgKzQ1Niw3IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJYm9v bAkJZnJlZXplX3NwZWNpZmllZCA9IGZhbHNlOwogCWJvb2wJCWhlYWRlcl9zcGVjaWZpZWQgPSBm YWxzZTsKIAlib29sCQlvbl9lcnJvcl9zcGVjaWZpZWQgPSBmYWxzZTsKKwlib29sCQlmb3JjZV9h cnJheV9zcGVjaWZpZWQgPSBmYWxzZTsKIAlMaXN0Q2VsbCAgICpvcHRpb247CiAKIAkvKiBTdXBw b3J0IGV4dGVybmFsIHVzZSBmb3Igb3B0aW9uIHNhbml0eSBjaGVja2luZyAqLwpAQCAtNjEwLDYg KzYxMSwxMyBAQCBQcm9jZXNzQ29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJ CQlkZWZlbC0+ZGVmbmFtZSksCiAJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZGVm ZWwtPmxvY2F0aW9uKSkpOwogCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwg ImZvcmNlX2FycmF5IikgPT0gMCkKKwkJeworCQkJaWYgKGZvcmNlX2FycmF5X3NwZWNpZmllZCkK KwkJCQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShkZWZlbCwgcHN0YXRlKTsKKwkJCWZvcmNlX2Fy cmF5X3NwZWNpZmllZCA9IHRydWU7CisJCQlvcHRzX291dC0+Zm9yY2VfYXJyYXkgPSBkZWZHZXRC b29sZWFuKGRlZmVsKTsKKwkJfQogCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJv bl9lcnJvciIpID09IDApCiAJCXsKIAkJCWlmIChvbl9lcnJvcl9zcGVjaWZpZWQpCkBAIC04MDYs NiArODE0LDE1IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJ KGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImNh bm5vdCB1c2UgSlNPTiBtb2RlIGluIENPUFkgRlJPTSIpKSk7CiAKKwlpZiAoIW9wdHNfb3V0LT5q c29uX21vZGUgJiYgb3B0c19vdXQtPmZvcmNlX2FycmF5KQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJD T1BZIEZPUkNFX0FSUkFZIHJlcXVpcmVzIEpTT04gbW9kZSIpKSk7CisJaWYgKCFvcHRzX291dC0+ anNvbl9tb2RlICYmIGZvcmNlX2FycmF5X3NwZWNpZmllZCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygi c3BlY2lmeSBDT1BZIEZPUkNFX0FSUkFZIGlzIG9ubHkgYWxsb3dlZCBpbiBKU09OIG1vZGUiKSkp OworCiAJaWYgKG9wdHNfb3V0LT5kZWZhdWx0X3ByaW50KQogCXsKIAkJaWYgKCFpc19mcm9tKQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9jb3B5dG8uYwppbmRleCA0ZjU1ZDZkNS4uZDkyNDVkZjAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHl0by5jCkBAIC04OCw2ICs4OCw3IEBAIHR5cGVkZWYgc3RydWN0IENvcHlUb1N0YXRlRGF0YQog CUxpc3QJICAgKmF0dG51bWxpc3Q7CQkvKiBpbnRlZ2VyIGxpc3Qgb2YgYXR0bnVtcyB0byBjb3B5 ICovCiAJY2hhcgkgICAqZmlsZW5hbWU7CQkvKiBmaWxlbmFtZSwgb3IgTlVMTCBmb3IgU1RET1VU ICovCiAJYm9vbAkJaXNfcHJvZ3JhbTsJCS8qIGlzICdmaWxlbmFtZScgYSBwcm9ncmFtIHRvIHBv cGVuPyAqLworCWJvb2wJCWpzb25fcm93X2RlbGltX25lZWRlZDsJLyogbmVlZCBkZWxpbWl0ZXIg dG8gc3RhcnQgbmV4dCBqc29uIGFycmF5IGVsZW1lbnQgKi8KIAljb3B5X2RhdGFfZGVzdF9jYiBk YXRhX2Rlc3RfY2I7IC8qIGZ1bmN0aW9uIGZvciB3cml0aW5nIGRhdGEgKi8KIAogCUNvcHlGb3Jt YXRPcHRpb25zIG9wdHM7CkBAIC04NTgsNiArODU5LDE2IEBAIERvQ29weVRvKENvcHlUb1N0YXRl IGNzdGF0ZSkKIAogCQkJQ29weVNlbmRFbmRPZlJvdyhjc3RhdGUpOwogCQl9CisKKwkJLyoKKwkJ ICogSWYgSlNPTiBoYXMgYmVlbiByZXF1ZXN0ZWQsIGFuZCBGT1JDRV9BUlJBWSBoYXMgYmVlbiBz cGVjaWZpZWQgc2VuZAorCQkgKiB0aGUgb3BlbmluZyBicmFja2V0LgorCQkqLworCQlpZiAoY3N0 YXRlLT5vcHRzLmpzb25fbW9kZSAmJiBjc3RhdGUtPm9wdHMuZm9yY2VfYXJyYXkpCisJCXsKKwkJ CUNvcHlTZW5kQ2hhcihjc3RhdGUsICdbJyk7CisJCQlDb3B5U2VuZEVuZE9mUm93KGNzdGF0ZSk7 CisJCX0KIAl9CiAKIAlpZiAoY3N0YXRlLT5yZWwpCkBAIC05MDUsNiArOTE2LDE1IEBAIERvQ29w eVRvKENvcHlUb1N0YXRlIGNzdGF0ZSkKIAkJQ29weVNlbmRFbmRPZlJvdyhjc3RhdGUpOwogCX0K IAorCS8qCisJICogSWYgSlNPTiBoYXMgYmVlbiByZXF1ZXN0ZWQsIGFuZCBGT1JDRV9BUlJBWSBo YXMgYmVlbiBzcGVjaWZpZWQgc2VuZCB0aGUKKwkgKiBjbG9zaW5nIGJyYWNrZXQuCisJKi8KKwlp ZiAoY3N0YXRlLT5vcHRzLmpzb25fbW9kZSAmJiBjc3RhdGUtPm9wdHMuZm9yY2VfYXJyYXkpCisJ eworCQlDb3B5U2VuZENoYXIoY3N0YXRlLCAnXScpOworCQlDb3B5U2VuZEVuZE9mUm93KGNzdGF0 ZSk7CisJfQogCU1lbW9yeUNvbnRleHREZWxldGUoY3N0YXRlLT5yb3djb250ZXh0KTsKIAogCWlm IChmZV9jb3B5KQpAQCAtMTAwNiw2ICsxMDI2LDE2IEBAIENvcHlPbmVSb3dUbyhDb3B5VG9TdGF0 ZSBjc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQogCQlyZXN1bHQgPSBtYWtlU3RyaW5nSW5m bygpOwogCQljb21wb3NpdGVfdG9fanNvbihyb3dkYXRhLCByZXN1bHQsIGZhbHNlKTsKIAorCWlm IChjc3RhdGUtPmpzb25fcm93X2RlbGltX25lZWRlZCAmJiBjc3RhdGUtPm9wdHMuZm9yY2VfYXJy YXkpCisJeworCQlDb3B5U2VuZENoYXIoY3N0YXRlLCAnLCcpOworCX0KKwllbHNlIGlmIChjc3Rh dGUtPm9wdHMuZm9yY2VfYXJyYXkpCisJeworCQkvKiBmaXJzdCByb3cgbmVlZHMgbm8gZGVsaW1p dGVyICovCisJCUNvcHlTZW5kQ2hhcihjc3RhdGUsICcgJyk7CisJCWNzdGF0ZS0+anNvbl9yb3df ZGVsaW1fbmVlZGVkID0gdHJ1ZTsKKwl9CiAJCUNvcHlTZW5kRGF0YShjc3RhdGUsIHJlc3VsdC0+ ZGF0YSwgcmVzdWx0LT5sZW4pOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2Vy L2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggNzAyZjA0YzMuLjRlMTNh MGFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNr ZW5kL3BhcnNlci9ncmFtLnkKQEAgLTM0NjgsNiArMzQ2OCwxMCBAQCBjb3B5X29wdF9pdGVtOgog CQkJCXsKIAkJCQkJJCQgPSBtYWtlRGVmRWxlbSgiZW5jb2RpbmciLCAoTm9kZSAqKSBtYWtlU3Ry aW5nKCQyKSwgQDEpOwogCQkJCX0KKwkJCXwgRk9SQ0UgQVJSQVkKKwkJCQl7CisJCQkJCSQkID0g bWFrZURlZkVsZW0oImZvcmNlX2FycmF5IiwgKE5vZGUgKikgbWFrZUJvb2xlYW4odHJ1ZSksIEAx KTsKKwkJCQl9CiAJCTsKIAogLyogVGhlIGZvbGxvd2luZyBleGlzdCBmb3IgYmFja3dhcmQgY29t cGF0aWJpbGl0eSB3aXRoIHZlcnkgb2xkIHZlcnNpb25zICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jb21tYW5kcy9jb3B5LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKaW5kZXgg ZjU5MWI2MTMuLjUxNjU2ZWVjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5 LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCkBAIC03Miw2ICs3Miw3IEBAIHR5 cGVkZWYgc3RydWN0IENvcHlGb3JtYXRPcHRpb25zCiAJTGlzdAkgICAqZm9yY2VfbnVsbDsJCS8q IGxpc3Qgb2YgY29sdW1uIG5hbWVzICovCiAJYm9vbAkJZm9yY2VfbnVsbF9hbGw7IC8qIEZPUkNF X05VTEwgKj8gKi8KIAlib29sCSAgICpmb3JjZV9udWxsX2ZsYWdzOwkvKiBwZXItY29sdW1uIENT ViBGTiBmbGFncyAqLworCWJvb2wJCWZvcmNlX2FycmF5OwkvKiBhZGQgSlNPTiBhcnJheSBkZWNv cmF0aW9ucyAqLwogCWJvb2wJCWNvbnZlcnRfc2VsZWN0aXZlbHk7CS8qIGRvIHNlbGVjdGl2ZSBi aW5hcnkgY29udmVyc2lvbj8gKi8KIAlDb3B5T25FcnJvckNob2ljZSBvbl9lcnJvcjsgLyogd2hh dCB0byBkbyB3aGVuIGVycm9yIGhhcHBlbmVkICovCiAJTGlzdAkgICAqY29udmVydF9zZWxlY3Q7 IC8qIGxpc3Qgb2YgY29sdW1uIG5hbWVzIChjYW4gYmUgTklMKSAqLwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvY29weS5vdXQKaW5kZXggMGM1YWRlNDcuLjFiMjAwYjBkIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvY29weS5vdXQKQEAgLTU5LDYgKzU5LDMwIEBAIEVSUk9SOiAgY2Fubm90IHNwZWNpZnkgSEVB REVSIGluIEpTT04gbW9kZQogLS0gRXJyb3IKIGNvcHkgY29weXRlc3QgZnJvbSBzdGRvdXQgKGZv cm1hdCBqc29uKTsKIEVSUk9SOiAgY2Fubm90IHVzZSBKU09OIG1vZGUgaW4gQ09QWSBGUk9NCist LUVycm9yCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGNzdiwgZm9yY2VfYXJyYXkg ZmFsc2UpOworRVJST1I6ICBzcGVjaWZ5IENPUFkgRk9SQ0VfQVJSQVkgaXMgb25seSBhbGxvd2Vk IGluIEpTT04gbW9kZQorY29weSBjb3B5dGVzdCBmcm9tIHN0ZGluIChmb3JtYXQganNvbiwgZm9y Y2VfYXJyYXkgdHJ1ZSk7CitFUlJPUjogIGNhbm5vdCB1c2UgSlNPTiBtb2RlIGluIENPUFkgRlJP TQorY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9hcnJheSk7Citb CisgeyJzdHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQorLHsic3R5 bGUiOiJVbml4IiwidGVzdCI6ImFiY1xuZGVmIiwiZmlsbGVyIjoyfQorLHsic3R5bGUiOiJNYWMi LCJ0ZXN0IjoiYWJjXHJkZWYiLCJmaWxsZXIiOjN9CisseyJzdHlsZSI6ImVzY1xcYXBlIiwidGVz dCI6ImFcXHJcXFxyXFxcblxcbmIiLCJmaWxsZXIiOjR9CitdCitjb3B5IGNvcHl0ZXN0IHRvIHN0 ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5IHRydWUpOworWworIHsic3R5bGUiOiJET1Mi LCJ0ZXN0IjoiYWJjXHJcbmRlZiIsImZpbGxlciI6MX0KKyx7InN0eWxlIjoiVW5peCIsInRlc3Qi OiJhYmNcbmRlZiIsImZpbGxlciI6Mn0KKyx7InN0eWxlIjoiTWFjIiwidGVzdCI6ImFiY1xyZGVm IiwiZmlsbGVyIjozfQorLHsic3R5bGUiOiJlc2NcXGFwZSIsInRlc3QiOiJhXFxyXFxcclxcXG5c XG5iIiwiZmlsbGVyIjo0fQorXQorY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29u LCBmb3JjZV9hcnJheSBmYWxzZSk7Cit7InN0eWxlIjoiRE9TIiwidGVzdCI6ImFiY1xyXG5kZWYi LCJmaWxsZXIiOjF9Cit7InN0eWxlIjoiVW5peCIsInRlc3QiOiJhYmNcbmRlZiIsImZpbGxlciI6 Mn0KK3sic3R5bGUiOiJNYWMiLCJ0ZXN0IjoiYWJjXHJkZWYiLCJmaWxsZXIiOjN9Cit7InN0eWxl IjoiZXNjXFxhcGUiLCJ0ZXN0IjoiYVxcclxcXHJcXFxuXFxuYiIsImZpbGxlciI6NH0KIC0tIGVt YmVkZGVkIGVzY2FwZWQgY2hhcmFjdGVycwogY3JlYXRlIHRlbXAgdGFibGUgY29weWpzb250ZXN0 ICgKICAgICBpZCBiaWdzZXJpYWwsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9j b3B5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsCmluZGV4IDk2ZTRmMGI2Li5h MDdkMjdhZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwKQEAgLTY0LDYgKzY0LDE2IEBAIGNvcHkgY29w eXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgaGVhZGVyKTsKIC0tIEVycm9yCiBjb3B5IGNv cHl0ZXN0IGZyb20gc3Rkb3V0IChmb3JtYXQganNvbik7CiAKKy0tRXJyb3IKK2NvcHkgY29weXRl c3QgdG8gc3Rkb3V0IChmb3JtYXQgY3N2LCBmb3JjZV9hcnJheSBmYWxzZSk7Citjb3B5IGNvcHl0 ZXN0IGZyb20gc3RkaW4gKGZvcm1hdCBqc29uLCBmb3JjZV9hcnJheSB0cnVlKTsKKworY29weSBj b3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9hcnJheSk7CisKK2NvcHkgY29w eXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2VfYXJyYXkgdHJ1ZSk7CisKK2NvcHkg Y29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2VfYXJyYXkgZmFsc2UpOworCiAK IC0tIGVtYmVkZGVkIGVzY2FwZWQgY2hhcmFjdGVycwogY3JlYXRlIHRlbXAgdGFibGUgY29weWpz b250ZXN0ICgKLS0gCjIuMzQuMQoK --0000000000009e28ce060f964365 Content-Type: text/x-patch; charset="US-ASCII"; name="v8-0001-Add-another-COPY-fomrat-json.patch" Content-Disposition: attachment; filename="v8-0001-Add-another-COPY-fomrat-json.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrpuzpsz1 RnJvbSAwY2Q0M2JmYmFlYWNlY2FmZmNkODE2N2QxYWFiMDExNWFhMjI5ODQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMjIgSmFuIDIwMjQgMjI6NTg6MzcgKzA4MDAKU3ViamVjdDogW1BBVENIIHY4 IDEvMl0gQWRkIGFub3RoZXIgQ09QWSBmb21yYXQ6IGpzb24uCgp0aGlzIGZvcm1hdCBpcyBvbmx5 IGFsbG93ZWQgaW4gQ09QWSBUTyBvcGVyYXRpb24uCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9jb3B5 LnNnbWwgICAgICAgICB8ICAgNSArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jICAgICAg ICB8ICAxMyArKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYyAgICAgIHwgMTIxICsr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAg ICAgICAgIHwgICA4ICsrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jICAgICAgIHwgICA1 ICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmggICAgICAgIHwgICAxICsKIHNyYy9pbmNs dWRlL3V0aWxzL2pzb24uaCAgICAgICAgICAgfCAgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9jb3B5Lm91dCB8ICA1NCArKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9j b3B5LnNxbCAgICAgIHwgIDM5ICsrKysrKysrKysKIDkgZmlsZXMgY2hhbmdlZCwgMjA0IGluc2Vy dGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYv Y29weS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKaW5kZXggMjFhNWM0YTAuLmNj ZDkwYjYxIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvcmVmL2NvcHkuc2dtbApAQCAtMjA3LDkgKzIwNywxNCBAQCBDT1BZIHsgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICggPHJl cGxhY2VhYmxlCiAgICAgICBTZWxlY3RzIHRoZSBkYXRhIGZvcm1hdCB0byBiZSByZWFkIG9yIHdy aXR0ZW46CiAgICAgICA8bGl0ZXJhbD50ZXh0PC9saXRlcmFsPiwKICAgICAgIDxsaXRlcmFsPmNz djwvbGl0ZXJhbD4gKENvbW1hIFNlcGFyYXRlZCBWYWx1ZXMpLAorICAgICAgPGxpdGVyYWw+anNv bjwvbGl0ZXJhbD4gKEphdmFTY3JpcHQgT2JqZWN0IE5vdGF0aW9uKSwKICAgICAgIG9yIDxsaXRl cmFsPmJpbmFyeTwvbGl0ZXJhbD4uCiAgICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD50ZXh0 PC9saXRlcmFsPi4KICAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSA8bGl0ZXJh bD5qc29uPC9saXRlcmFsPiBvcHRpb24gaXMgYWxsb3dlZCBvbmx5IGluCisgICAgICA8Y29tbWFu ZD5DT1BZIFRPPC9jb21tYW5kPi4KKyAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8 L3Zhcmxpc3RlbnRyeT4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCmluZGV4IGNjMDc4NmM2Li41ZDViNzMzZCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NvcHkuYwpAQCAtNDgwLDYgKzQ4MCw4IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQ YXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJIC8qIGRlZmF1bHQgZm9ybWF0ICovIDsKIAkJCWVsc2Ug aWYgKHN0cmNtcChmbXQsICJjc3YiKSA9PSAwKQogCQkJCW9wdHNfb3V0LT5jc3ZfbW9kZSA9IHRy dWU7CisJCQllbHNlIGlmIChzdHJjbXAoZm10LCAianNvbiIpID09IDApCisJCQkJb3B0c19vdXQt Pmpzb25fbW9kZSA9IHRydWU7CiAJCQllbHNlIGlmIChzdHJjbXAoZm10LCAiYmluYXJ5IikgPT0g MCkKIAkJCQlvcHRzX291dC0+YmluYXJ5ID0gdHJ1ZTsKIAkJCWVsc2UKQEAgLTcxNiw2ICs3MTgs MTEgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29k ZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiY2Fubm90IHNw ZWNpZnkgSEVBREVSIGluIEJJTkFSWSBtb2RlIikpKTsKIAorCWlmIChvcHRzX291dC0+anNvbl9t b2RlICYmIG9wdHNfb3V0LT5oZWFkZXJfbGluZSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygiY2Fubm90 IHNwZWNpZnkgSEVBREVSIGluIEpTT04gbW9kZSIpKSk7CisKIAkvKiBDaGVjayBxdW90ZSAqLwog CWlmICghb3B0c19vdXQtPmNzdl9tb2RlICYmIG9wdHNfb3V0LT5xdW90ZSAhPSBOVUxMKQogCQll cmVwb3J0KEVSUk9SLApAQCAtNzkzLDYgKzgwMCwxMiBAQCBQcm9jZXNzQ29weU9wdGlvbnMoUGFy c2VTdGF0ZSAqcHN0YXRlLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAogCQkJCSBlcnJtc2coIkNPUFkgRlJFRVpFIGNhbm5vdCBiZSB1c2VkIHdpdGggQ09Q WSBUTyIpKSk7CiAKKwkvKiBDaGVjayBqc29uIGZvcm1hdCAgKi8KKwlpZiAob3B0c19vdXQtPmpz b25fbW9kZSAmJiBpc19mcm9tKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgdXNlIEpTT04g bW9kZSBpbiBDT1BZIEZST00iKSkpOworCiAJaWYgKG9wdHNfb3V0LT5kZWZhdWx0X3ByaW50KQog CXsKIAkJaWYgKCFpc19mcm9tKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29w eXRvLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwppbmRleCBkM2RjM2ZjOC4uNGY1 NWQ2ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAi ZXhlY3V0b3IvZXhlY2Rlc2MuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2lu Y2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1 ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRl ICJtYi9wZ193Y2hhci5oIgpAQCAtMzcsNiArMzgsNyBAQAogI2luY2x1ZGUgInJld3JpdGUvcmV3 cml0ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAidGNvcC90 Y29wcHJvdC5oIgorI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKICNpbmNsdWRlICJ1dGlscy9sc3lz Y2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Bh cnRjYWNoZS5oIgpAQCAtMTQ2LDkgKzE0OCwyMCBAQCBTZW5kQ29weUJlZ2luKENvcHlUb1N0YXRl IGNzdGF0ZSkKIAogCXBxX2JlZ2lubWVzc2FnZSgmYnVmLCBQcU1zZ19Db3B5T3V0UmVzcG9uc2Up OwogCXBxX3NlbmRieXRlKCZidWYsIGZvcm1hdCk7CS8qIG92ZXJhbGwgZm9ybWF0ICovCi0JcHFf c2VuZGludDE2KCZidWYsIG5hdHRzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbmF0dHM7IGkrKykKLQkJ cHFfc2VuZGludDE2KCZidWYsIGZvcm1hdCk7IC8qIHBlci1jb2x1bW4gZm9ybWF0cyAqLworCWlm ICghY3N0YXRlLT5vcHRzLmpzb25fbW9kZSkKKwl7CisJCXBxX3NlbmRpbnQxNigmYnVmLCBuYXR0 cyk7CisJCWZvciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQorCQkJcHFfc2VuZGludDE2KCZidWYs IGZvcm1hdCk7IC8qIHBlci1jb2x1bW4gZm9ybWF0cyAqLworCX0KKwllbHNlCisJeworCQkvKgor CQkgKiBKU09OIG1vZGUgaXMgYWx3YXlzIG9uZSBub24tYmluYXJ5IGNvbHVtbgorCQkgKi8KKwkJ cHFfc2VuZGludDE2KCZidWYsIDEpOworCQlwcV9zZW5kaW50MTYoJmJ1ZiwgMCk7CisJfQogCXBx X2VuZG1lc3NhZ2UoJmJ1Zik7CiAJY3N0YXRlLT5jb3B5X2Rlc3QgPSBDT1BZX0ZST05URU5EOwog fQpAQCAtOTA2LDExICs5MTksNyBAQCBEb0NvcHlUbyhDb3B5VG9TdGF0ZSBjc3RhdGUpCiBzdGF0 aWMgdm9pZAogQ29weU9uZVJvd1RvKENvcHlUb1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpCiB7Ci0JYm9vbAkJbmVlZF9kZWxpbSA9IGZhbHNlOwotCUZtZ3JJbmZvICAgKm91dF9m dW5jdGlvbnMgPSBjc3RhdGUtPm91dF9mdW5jdGlvbnM7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250 ZXh0OwotCUxpc3RDZWxsICAgKmN1cjsKLQljaGFyCSAgICpzdHJpbmc7CiAKIAlNZW1vcnlDb250 ZXh0UmVzZXQoY3N0YXRlLT5yb3djb250ZXh0KTsKIAlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKGNzdGF0ZS0+cm93Y29udGV4dCk7CkBAIC05MjEsNTQgKzkzMCw4NCBAQCBDb3B5 T25lUm93VG8oQ29weVRvU3RhdGUgY3N0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKIAkJQ29w eVNlbmRJbnQxNihjc3RhdGUsIGxpc3RfbGVuZ3RoKGNzdGF0ZS0+YXR0bnVtbGlzdCkpOwogCX0K IAotCS8qIE1ha2Ugc3VyZSB0aGUgdHVwbGUgaXMgZnVsbHkgZGVjb25zdHJ1Y3RlZCAqLwotCXNs b3RfZ2V0YWxsYXR0cnMoc2xvdCk7Ci0KLQlmb3JlYWNoKGN1ciwgY3N0YXRlLT5hdHRudW1saXN0 KQorCWlmICghY3N0YXRlLT5vcHRzLmpzb25fbW9kZSkKIAl7Ci0JCWludAkJCWF0dG51bSA9IGxm aXJzdF9pbnQoY3VyKTsKLQkJRGF0dW0JCXZhbHVlID0gc2xvdC0+dHRzX3ZhbHVlc1thdHRudW0g LSAxXTsKLQkJYm9vbAkJaXNudWxsID0gc2xvdC0+dHRzX2lzbnVsbFthdHRudW0gLSAxXTsKKwkJ Ym9vbAkJbmVlZF9kZWxpbSA9IGZhbHNlOworCQlGbWdySW5mbyAgICpvdXRfZnVuY3Rpb25zID0g Y3N0YXRlLT5vdXRfZnVuY3Rpb25zOworCQlMaXN0Q2VsbCAgICpjdXI7CisJCWNoYXIJICAgKnN0 cmluZzsKIAotCQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCi0JCXsKLQkJCWlmIChuZWVkX2Rl bGltKQotCQkJCUNvcHlTZW5kQ2hhcihjc3RhdGUsIGNzdGF0ZS0+b3B0cy5kZWxpbVswXSk7Ci0J CQluZWVkX2RlbGltID0gdHJ1ZTsKLQkJfQorCQkvKiBNYWtlIHN1cmUgdGhlIHR1cGxlIGlzIGZ1 bGx5IGRlY29uc3RydWN0ZWQgKi8KKwkJc2xvdF9nZXRhbGxhdHRycyhzbG90KTsKIAotCQlpZiAo aXNudWxsKQotCQl7Ci0JCQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCi0JCQkJQ29weVNlbmRT dHJpbmcoY3N0YXRlLCBjc3RhdGUtPm9wdHMubnVsbF9wcmludF9jbGllbnQpOwotCQkJZWxzZQot CQkJCUNvcHlTZW5kSW50MzIoY3N0YXRlLCAtMSk7Ci0JCX0KLQkJZWxzZQorCQlmb3JlYWNoKGN1 ciwgY3N0YXRlLT5hdHRudW1saXN0KQogCQl7CisJCQlpbnQJCQlhdHRudW0gPSBsZmlyc3RfaW50 KGN1cik7CisJCQlEYXR1bQkJdmFsdWUgPSBzbG90LT50dHNfdmFsdWVzW2F0dG51bSAtIDFdOwor CQkJYm9vbAkJaXNudWxsID0gc2xvdC0+dHRzX2lzbnVsbFthdHRudW0gLSAxXTsKKwogCQkJaWYg KCFjc3RhdGUtPm9wdHMuYmluYXJ5KQogCQkJewotCQkJCXN0cmluZyA9IE91dHB1dEZ1bmN0aW9u Q2FsbCgmb3V0X2Z1bmN0aW9uc1thdHRudW0gLSAxXSwKLQkJCQkJCQkJCQkJdmFsdWUpOwotCQkJ CWlmIChjc3RhdGUtPm9wdHMuY3N2X21vZGUpCi0JCQkJCUNvcHlBdHRyaWJ1dGVPdXRDU1YoY3N0 YXRlLCBzdHJpbmcsCi0JCQkJCQkJCQkJY3N0YXRlLT5vcHRzLmZvcmNlX3F1b3RlX2ZsYWdzW2F0 dG51bSAtIDFdLAotCQkJCQkJCQkJCWxpc3RfbGVuZ3RoKGNzdGF0ZS0+YXR0bnVtbGlzdCkgPT0g MSk7CisJCQkJaWYgKG5lZWRfZGVsaW0pCisJCQkJCUNvcHlTZW5kQ2hhcihjc3RhdGUsIGNzdGF0 ZS0+b3B0cy5kZWxpbVswXSk7CisJCQkJbmVlZF9kZWxpbSA9IHRydWU7CisJCQl9CisKKwkJCWlm IChpc251bGwpCisJCQl7CisJCQkJaWYgKCFjc3RhdGUtPm9wdHMuYmluYXJ5KQorCQkJCQlDb3B5 U2VuZFN0cmluZyhjc3RhdGUsIGNzdGF0ZS0+b3B0cy5udWxsX3ByaW50X2NsaWVudCk7CiAJCQkJ ZWxzZQotCQkJCQlDb3B5QXR0cmlidXRlT3V0VGV4dChjc3RhdGUsIHN0cmluZyk7CisJCQkJCUNv cHlTZW5kSW50MzIoY3N0YXRlLCAtMSk7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJYnl0ZWEJ ICAgKm91dHB1dGJ5dGVzOworCQkJCWlmICghY3N0YXRlLT5vcHRzLmJpbmFyeSkKKwkJCQl7CisJ CQkJCXN0cmluZyA9IE91dHB1dEZ1bmN0aW9uQ2FsbCgmb3V0X2Z1bmN0aW9uc1thdHRudW0gLSAx XSwKKwkJCQkJCQkJCQkJCXZhbHVlKTsKKwkJCQkJaWYgKGNzdGF0ZS0+b3B0cy5jc3ZfbW9kZSkK KwkJCQkJCUNvcHlBdHRyaWJ1dGVPdXRDU1YoY3N0YXRlLCBzdHJpbmcsCisJCQkJCQkJCQkJCWNz dGF0ZS0+b3B0cy5mb3JjZV9xdW90ZV9mbGFnc1thdHRudW0gLSAxXSwKKwkJCQkJCQkJCQkJbGlz dF9sZW5ndGgoY3N0YXRlLT5hdHRudW1saXN0KSA9PSAxKTsKKwkJCQkJZWxzZQorCQkJCQkJQ29w eUF0dHJpYnV0ZU91dFRleHQoY3N0YXRlLCBzdHJpbmcpOworCQkJCX0KKwkJCQllbHNlCisJCQkJ eworCQkJCQlieXRlYQkgICAqb3V0cHV0Ynl0ZXM7CiAKLQkJCQlvdXRwdXRieXRlcyA9IFNlbmRG dW5jdGlvbkNhbGwoJm91dF9mdW5jdGlvbnNbYXR0bnVtIC0gMV0sCi0JCQkJCQkJCQkJCSAgIHZh bHVlKTsKLQkJCQlDb3B5U2VuZEludDMyKGNzdGF0ZSwgVkFSU0laRShvdXRwdXRieXRlcykgLSBW QVJIRFJTWik7Ci0JCQkJQ29weVNlbmREYXRhKGNzdGF0ZSwgVkFSREFUQShvdXRwdXRieXRlcyks Ci0JCQkJCQkJIFZBUlNJWkUob3V0cHV0Ynl0ZXMpIC0gVkFSSERSU1opOworCQkJCQlvdXRwdXRi eXRlcyA9IFNlbmRGdW5jdGlvbkNhbGwoJm91dF9mdW5jdGlvbnNbYXR0bnVtIC0gMV0sCisJCQkJ CQkJCQkJCQkgICB2YWx1ZSk7CisJCQkJCUNvcHlTZW5kSW50MzIoY3N0YXRlLCBWQVJTSVpFKG91 dHB1dGJ5dGVzKSAtIFZBUkhEUlNaKTsKKwkJCQkJQ29weVNlbmREYXRhKGNzdGF0ZSwgVkFSREFU QShvdXRwdXRieXRlcyksCisJCQkJCQkJCSBWQVJTSVpFKG91dHB1dGJ5dGVzKSAtIFZBUkhEUlNa KTsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CisJZWxzZQorCXsKKwkJRGF0dW0JCXJvd2RhdGE7CisJ CVN0cmluZ0luZm8JcmVzdWx0OworCisJCWlmKCFjc3RhdGUtPnJlbCkKKwkJeworCQkJZm9yIChp bnQgaSA9IDA7IGkgPCBzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5uYXR0czsgaSsrKQorCQkJ eworCQkJCS8qIEZsYXQtY29weSB0aGUgYXR0cmlidXRlIGFycmF5ICovCisJCQkJbWVtY3B5KFR1 cGxlRGVzY0F0dHIoc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvciwgaSksCisJCQkJVHVwbGVEZXNj QXR0cihjc3RhdGUtPnF1ZXJ5RGVzYy0+dHVwRGVzYywgaSksCisJCQkJCQkJCTEgKiBzaXplb2Yo Rm9ybURhdGFfcGdfYXR0cmlidXRlKSk7CisJCQl9CisJCQlCbGVzc1R1cGxlRGVzYyhzbG90LT50 dHNfdHVwbGVEZXNjcmlwdG9yKTsKKwkJfQorCQlyb3dkYXRhID0gRXhlY0ZldGNoU2xvdEhlYXBU dXBsZURhdHVtKHNsb3QpOworCQlyZXN1bHQgPSBtYWtlU3RyaW5nSW5mbygpOworCQljb21wb3Np dGVfdG9fanNvbihyb3dkYXRhLCByZXN1bHQsIGZhbHNlKTsKKworCQlDb3B5U2VuZERhdGEoY3N0 YXRlLCByZXN1bHQtPmRhdGEsIHJlc3VsdC0+bGVuKTsKKwl9CiAKIAlDb3B5U2VuZEVuZE9mUm93 KGNzdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMv YmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IDM0NjBmZWE1Li43MDJmMDRjMyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3Jh bS55CkBAIC0zNDI0LDYgKzM0MjQsMTAgQEAgY29weV9vcHRfaXRlbToKIAkJCQl7CiAJCQkJCSQk ID0gbWFrZURlZkVsZW0oImZvcm1hdCIsIChOb2RlICopIG1ha2VTdHJpbmcoImNzdiIpLCBAMSk7 CiAJCQkJfQorCQkJfCBKU09OCisJCQkJeworCQkJCQkkJCA9IG1ha2VEZWZFbGVtKCJmb3JtYXQi LCAoTm9kZSAqKSBtYWtlU3RyaW5nKCJqc29uIiksIEAxKTsKKwkJCQl9CiAJCQl8IEhFQURFUl9Q CiAJCQkJewogCQkJCQkkJCA9IG1ha2VEZWZFbGVtKCJoZWFkZXIiLCAoTm9kZSAqKSBtYWtlQm9v bGVhbih0cnVlKSwgQDEpOwpAQCAtMzUwNiw2ICszNTEwLDEwIEBAIGNvcHlfZ2VuZXJpY19vcHRf ZWxlbToKIAkJCQl7CiAJCQkJCSQkID0gbWFrZURlZkVsZW0oJDEsICQyLCBAMSk7CiAJCQkJfQor CQkJfCBGT1JNQVRfTEEgY29weV9nZW5lcmljX29wdF9hcmcKKwkJCXsKKwkJCQkkJCA9IG1ha2VE ZWZFbGVtKCJmb3JtYXQiLCAkMiwgQDEpOworCQkJfQogCQk7CiAKIGNvcHlfZ2VuZXJpY19vcHRf YXJnOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9qc29uLmMKaW5kZXggZDcxOWE2MWYuLmZhYmQ0ZTYxIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29uLmMKQEAgLTgzLDggKzgzLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkFnZ1N0YXRlCiAJ SnNvblVuaXF1ZUJ1aWxkZXJTdGF0ZSB1bmlxdWVfY2hlY2s7CiB9IEpzb25BZ2dTdGF0ZTsKIAot c3RhdGljIHZvaWQgY29tcG9zaXRlX3RvX2pzb24oRGF0dW0gY29tcG9zaXRlLCBTdHJpbmdJbmZv IHJlc3VsdCwKLQkJCQkJCQkgIGJvb2wgdXNlX2xpbmVfZmVlZHMpOwogc3RhdGljIHZvaWQgYXJy YXlfZGltX3RvX2pzb24oU3RyaW5nSW5mbyByZXN1bHQsIGludCBkaW0sIGludCBuZGltcywgaW50 ICpkaW1zLAogCQkJCQkJCSAgRGF0dW0gKnZhbHMsIGJvb2wgKm51bGxzLCBpbnQgKnZhbGNvdW50 LAogCQkJCQkJCSAgSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksIE9pZCBvdXRmdW5jb2lkLApA QCAtNTA3LDggKzUwNSw5IEBAIGFycmF5X3RvX2pzb25faW50ZXJuYWwoRGF0dW0gYXJyYXksIFN0 cmluZ0luZm8gcmVzdWx0LCBib29sIHVzZV9saW5lX2ZlZWRzKQogCiAvKgogICogVHVybiBhIGNv bXBvc2l0ZSAvIHJlY29yZCBpbnRvIEpTT04uCisgKiBFeHBvcnRlZCBzbyBDT1BZIFRPIGNhbiB1 c2UgaXQuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBjb21wb3NpdGVfdG9fanNvbihEYXR1bSBj b21wb3NpdGUsIFN0cmluZ0luZm8gcmVzdWx0LCBib29sIHVzZV9saW5lX2ZlZWRzKQogewogCUhl YXBUdXBsZUhlYWRlciB0ZDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHku aCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaAppbmRleCBiM2RhM2NiMC4uZjU5MWI2MTMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaAorKysgYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9jb3B5LmgKQEAgLTUzLDYgKzUzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29weUZv cm1hdE9wdGlvbnMKIAlib29sCQliaW5hcnk7CQkJLyogYmluYXJ5IGZvcm1hdD8gKi8KIAlib29s CQlmcmVlemU7CQkJLyogZnJlZXplIHJvd3Mgb24gbG9hZGluZz8gKi8KIAlib29sCQljc3ZfbW9k ZTsJCS8qIENvbW1hIFNlcGFyYXRlZCBWYWx1ZSBmb3JtYXQ/ICovCisJYm9vbAkJanNvbl9tb2Rl OwkJLyogSlNPTiBmb3JtYXQ/ICovCiAJQ29weUhlYWRlckNob2ljZSBoZWFkZXJfbGluZTsJLyog aGVhZGVyIGxpbmU/ICovCiAJY2hhcgkgICAqbnVsbF9wcmludDsJCS8qIE5VTEwgbWFya2VyIHN0 cmluZyAoc2VydmVyIGVuY29kaW5nISkgKi8KIAlpbnQJCQludWxsX3ByaW50X2xlbjsgLyogbGVu Z3RoIG9mIHNhbWUgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb24uaCBiL3Ny Yy9pbmNsdWRlL3V0aWxzL2pzb24uaAppbmRleCA2ZDdmMWIzOC4uZDU2MzExNzEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb24uaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29u LmgKQEAgLTE3LDYgKzE3LDggQEAKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogCiAvKiBm dW5jdGlvbnMgaW4ganNvbi5jICovCitleHRlcm4gdm9pZCBjb21wb3NpdGVfdG9fanNvbihEYXR1 bSBjb21wb3NpdGUsIFN0cmluZ0luZm8gcmVzdWx0LAorCQkJCQkJCSAgYm9vbCB1c2VfbGluZV9m ZWVkcyk7CiBleHRlcm4gdm9pZCBlc2NhcGVfanNvbihTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgY2hh ciAqc3RyKTsKIGV4dGVybiBjaGFyICpKc29uRW5jb2RlRGF0ZVRpbWUoY2hhciAqYnVmLCBEYXR1 bSB2YWx1ZSwgT2lkIHR5cGlkLAogCQkJCQkJCQljb25zdCBpbnQgKnR6cCk7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9jb3B5Lm91dAppbmRleCBiNDgzNjVlYy4uMGM1YWRlNDcgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9jb3B5Lm91dApAQCAtNDIsNiArNDIsNjAgQEAgY29weSBjb3B5dGVzdDMgdG8gc3Rk b3V0IGNzdiBoZWFkZXI7CiBjMSwiY29sIHdpdGggLCBjb21tYSIsImNvbCB3aXRoICIiIHF1b3Rl IgogMSxhLDEKIDIsYiwyCistLS0gdGVzdCBjb3B5aW5nIGluIEpTT04gbW9kZSB3aXRoIHZhcmlv dXMgc3R5bGVzCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCBqc29uOworeyJzdHlsZSI6IkRPUyIs InRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQoreyJzdHlsZSI6IlVuaXgiLCJ0ZXN0Ijoi YWJjXG5kZWYiLCJmaWxsZXIiOjJ9Cit7InN0eWxlIjoiTWFjIiwidGVzdCI6ImFiY1xyZGVmIiwi ZmlsbGVyIjozfQoreyJzdHlsZSI6ImVzY1xcYXBlIiwidGVzdCI6ImFcXHJcXFxyXFxcblxcbmIi LCJmaWxsZXIiOjR9Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24pOworeyJz dHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQoreyJzdHlsZSI6IlVu aXgiLCJ0ZXN0IjoiYWJjXG5kZWYiLCJmaWxsZXIiOjJ9Cit7InN0eWxlIjoiTWFjIiwidGVzdCI6 ImFiY1xyZGVmIiwiZmlsbGVyIjozfQoreyJzdHlsZSI6ImVzY1xcYXBlIiwidGVzdCI6ImFcXHJc XFxyXFxcblxcbmIiLCJmaWxsZXIiOjR9CistLSBFcnJvcgorY29weSBjb3B5dGVzdCB0byBzdGRv dXQgKGZvcm1hdCBqc29uLCBoZWFkZXIpOworRVJST1I6ICBjYW5ub3Qgc3BlY2lmeSBIRUFERVIg aW4gSlNPTiBtb2RlCistLSBFcnJvcgorY29weSBjb3B5dGVzdCBmcm9tIHN0ZG91dCAoZm9ybWF0 IGpzb24pOworRVJST1I6ICBjYW5ub3QgdXNlIEpTT04gbW9kZSBpbiBDT1BZIEZST00KKy0tIGVt YmVkZGVkIGVzY2FwZWQgY2hhcmFjdGVycworY3JlYXRlIHRlbXAgdGFibGUgY29weWpzb250ZXN0 ICgKKyAgICBpZCBiaWdzZXJpYWwsCisgICAgZjEgdGV4dCwKKyAgICBmMiB0aW1lc3RhbXB0eik7 CitpbnNlcnQgaW50byBjb3B5anNvbnRlc3QKKyAgc2VsZWN0IGcuaSwKKyAgICAgICAgIENBU0Ug V0hFTiBnLmkgJSAyID0gMCBUSEVOCisgICAgICAgICAgICdsaW5lIHdpdGggJycgaW4gaXQ6ICcg fHwgZy5pOjp0ZXh0CisgICAgICAgICBFTFNFCisgICAgICAgICAgICdsaW5lIHdpdGggIiBpbiBp dDogJyB8fCBnLmk6OnRleHQKKyAgICAgICAgIEVORCwKKyAgICAgICAgICdNb24gRmViIDEwIDE3 OjMyOjAxIDE5OTcgUFNUJworICBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDUpIGFzIGcoaSk7Citp bnNlcnQgaW50byBjb3B5anNvbnRlc3QgKGYxKSB2YWx1ZXMKKyhFJ2FhYVwiYmJiJzo6dGV4dCks CisoRSdhYWFcXGJiYic6OnRleHQpLAorKEUnYWFhXC9iYmInOjp0ZXh0KSwKKyhFJ2FhYVxiYmJi Jzo6dGV4dCksCisoRSdhYWFcZmJiYic6OnRleHQpLAorKEUnYWFhXG5iYmInOjp0ZXh0KSwKKyhF J2FhYVxyYmJiJzo6dGV4dCksCisoRSdhYWFcdGJiYic6OnRleHQpOworY29weSBjb3B5anNvbnRl c3QgdG8gc3Rkb3V0IGpzb247Cit7ImlkIjoxLCJmMSI6ImxpbmUgd2l0aCBcIiBpbiBpdDogMSIs ImYyIjoiMTk5Ny0wMi0xMFQxNzozMjowMS0wODowMCJ9Cit7ImlkIjoyLCJmMSI6ImxpbmUgd2l0 aCAnIGluIGl0OiAyIiwiZjIiOiIxOTk3LTAyLTEwVDE3OjMyOjAxLTA4OjAwIn0KK3siaWQiOjMs ImYxIjoibGluZSB3aXRoIFwiIGluIGl0OiAzIiwiZjIiOiIxOTk3LTAyLTEwVDE3OjMyOjAxLTA4 OjAwIn0KK3siaWQiOjQsImYxIjoibGluZSB3aXRoICcgaW4gaXQ6IDQiLCJmMiI6IjE5OTctMDIt MTBUMTc6MzI6MDEtMDg6MDAifQoreyJpZCI6NSwiZjEiOiJsaW5lIHdpdGggXCIgaW4gaXQ6IDUi LCJmMiI6IjE5OTctMDItMTBUMTc6MzI6MDEtMDg6MDAifQoreyJpZCI6MSwiZjEiOiJhYWFcImJi YiIsImYyIjpudWxsfQoreyJpZCI6MiwiZjEiOiJhYWFcXGJiYiIsImYyIjpudWxsfQoreyJpZCI6 MywiZjEiOiJhYWEvYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo0LCJmMSI6ImFhYVxiYmJiIiwiZjIi Om51bGx9Cit7ImlkIjo1LCJmMSI6ImFhYVxmYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo2LCJmMSI6 ImFhYVxuYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo3LCJmMSI6ImFhYVxyYmJiIiwiZjIiOm51bGx9 Cit7ImlkIjo4LCJmMSI6ImFhYVx0YmJiIiwiZjIiOm51bGx9CiBjcmVhdGUgdGVtcCB0YWJsZSBj b3B5dGVzdDQgKAogCWMxIGludCwKIAkiY29sbmFtZSB3aXRoIHRhYjogCSIgdGV4dCk7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NvcHkuc3FsCmluZGV4IDQzZDJlOTA2Li45NmU0ZjBiNiAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvY29weS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5z cWwKQEAgLTU0LDYgKzU0LDQ1IEBAIHRoaXMgaXMganVzdCBhIGxpbmUgZnVsbCBvZiBqdW5rIHRo YXQgd291bGQgZXJyb3Igb3V0IGlmIHBhcnNlZAogCiBjb3B5IGNvcHl0ZXN0MyB0byBzdGRvdXQg Y3N2IGhlYWRlcjsKIAorLS0tIHRlc3QgY29weWluZyBpbiBKU09OIG1vZGUgd2l0aCB2YXJpb3Vz IHN0eWxlcworY29weSBjb3B5dGVzdCB0byBzdGRvdXQganNvbjsKKworY29weSBjb3B5dGVzdCB0 byBzdGRvdXQgKGZvcm1hdCBqc29uKTsKKworLS0gRXJyb3IKK2NvcHkgY29weXRlc3QgdG8gc3Rk b3V0IChmb3JtYXQganNvbiwgaGVhZGVyKTsKKy0tIEVycm9yCitjb3B5IGNvcHl0ZXN0IGZyb20g c3Rkb3V0IChmb3JtYXQganNvbik7CisKKworLS0gZW1iZWRkZWQgZXNjYXBlZCBjaGFyYWN0ZXJz CitjcmVhdGUgdGVtcCB0YWJsZSBjb3B5anNvbnRlc3QgKAorICAgIGlkIGJpZ3NlcmlhbCwKKyAg ICBmMSB0ZXh0LAorICAgIGYyIHRpbWVzdGFtcHR6KTsKKworaW5zZXJ0IGludG8gY29weWpzb250 ZXN0CisgIHNlbGVjdCBnLmksCisgICAgICAgICBDQVNFIFdIRU4gZy5pICUgMiA9IDAgVEhFTgor ICAgICAgICAgICAnbGluZSB3aXRoICcnIGluIGl0OiAnIHx8IGcuaTo6dGV4dAorICAgICAgICAg RUxTRQorICAgICAgICAgICAnbGluZSB3aXRoICIgaW4gaXQ6ICcgfHwgZy5pOjp0ZXh0CisgICAg ICAgICBFTkQsCisgICAgICAgICAnTW9uIEZlYiAxMCAxNzozMjowMSAxOTk3IFBTVCcKKyAgZnJv bSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBhcyBnKGkpOworCitpbnNlcnQgaW50byBjb3B5anNvbnRl c3QgKGYxKSB2YWx1ZXMKKyhFJ2FhYVwiYmJiJzo6dGV4dCksCisoRSdhYWFcXGJiYic6OnRleHQp LAorKEUnYWFhXC9iYmInOjp0ZXh0KSwKKyhFJ2FhYVxiYmJiJzo6dGV4dCksCisoRSdhYWFcZmJi Yic6OnRleHQpLAorKEUnYWFhXG5iYmInOjp0ZXh0KSwKKyhFJ2FhYVxyYmJiJzo6dGV4dCksCiso RSdhYWFcdGJiYic6OnRleHQpOworCitjb3B5IGNvcHlqc29udGVzdCB0byBzdGRvdXQganNvbjsK KwogY3JlYXRlIHRlbXAgdGFibGUgY29weXRlc3Q0ICgKIAljMSBpbnQsCiAJImNvbG5hbWUgd2l0 aCB0YWI6IAkiIHRleHQpOwotLSAKMi4zNC4xCgo= --0000000000009e28ce060f964365--