From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Philipp Stephani Newsgroups: gmane.emacs.devel Subject: Re: JSON->lisp Mapping: Hash vs AList Date: Mon, 18 Dec 2017 20:59:39 +0000 Message-ID: References: <838te5uvee.fsf@gnu.org> <838te1qrkq.fsf@gnu.org> <834lopqft0.fsf@gnu.org> <83k1xjpz5a.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="94eb2c062a5898dd9c0560a3a117" X-Trace: blaine.gmane.org 1513630731 11507 195.159.176.226 (18 Dec 2017 20:58:51 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 18 Dec 2017 20:58:51 +0000 (UTC) Cc: emacs-devel@gnu.org, raman@google.com To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Dec 18 21:58:47 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eR2Um-0002Iq-6S for ged-emacs-devel@m.gmane.org; Mon, 18 Dec 2017 21:58:44 +0100 Original-Received: from localhost ([::1]:41650 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eR2Wi-0005IK-Vg for ged-emacs-devel@m.gmane.org; Mon, 18 Dec 2017 16:00:45 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:49591) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eR2Vw-0005Hd-2A for emacs-devel@gnu.org; Mon, 18 Dec 2017 15:59:58 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eR2Vu-0005iv-Bf for emacs-devel@gnu.org; Mon, 18 Dec 2017 15:59:56 -0500 Original-Received: from mail-qk0-x22b.google.com ([2607:f8b0:400d:c09::22b]:38401) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eR2Vr-0005ha-Jk; Mon, 18 Dec 2017 15:59:51 -0500 Original-Received: by mail-qk0-x22b.google.com with SMTP id z203so20065635qkb.5; Mon, 18 Dec 2017 12:59:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=0S7G9yz+A3ksbuBwZUnkGUwuvWwOccS5Q6rS4+oPaMo=; b=rrPutvrpEb6oqWSvg4fg8+37JeU3mA+88m3ICixNsyvBKZQxHsGOAtxDd0cWpWWIsZ MgTNWdWXI9zVzevwMthwqqMXtzkQjibmv/2kvtvlBtcvLW6YQShgTO2bW2VTRUPpEdtC 8STGOFqsW8LxOprX32yNpitThKgK/rvZNCMs+xFV9UpcqhKJ6SXZVYKl3zhwdSCIn3EQ FtMvI6e5eethHzKA3e+Iz72jLW5fThKBHAuedHZUa44rYZCeIZdLgi38viKWNJ6K2IsO GVfRPtYOM7aHnsKjZSw+Y4vZ9otI+nT3DwVzDJR7XI11QokTWqo/q4WNa6/R9ou0CTcf RSUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=0S7G9yz+A3ksbuBwZUnkGUwuvWwOccS5Q6rS4+oPaMo=; b=ZrtQulJ/vAC87sko097qQ/x8PrAC0wHGL2CL9V6acHNRlme1GYdF3EQ9e5lAsB/bbI rEKYid9mHjG2enl5x7HVdiOl61L45DlLn3lVDghuA4G0cKzwQwy0Nvq+1KrDNo8Sw/4i ZHC4RmmcLgzMR/Gll24JhXW8IgFIECmJuYxMGv4Qo7WixMAQ2dNuXsMz+ppSeePS3m8U GKG8ew2nnOWLAEfb7aI3I6ybuYNtApd3fSdb7e9DXn/PbEblkpAy2E4zlnpVxzkgf98V soh6x04eJxlElauaiUOwGtJWAJGCRQy5YZ991qJuvkI9j9M0Ewl0QjQCLH6oj5gYLTI6 lZHw== X-Gm-Message-State: AKGB3mJdrdQc/nG1SOKEqxEdGn1QPfpl11+wXZv9QKAI5/lN6V+Ch8/M 5V6PJ5T9ol3TdJIc2kfiUhUMi9IX46n2iEyeMa5ehw== X-Google-Smtp-Source: ACJfBot92ZwCcvtshVWnDAN7ojSDL7uOzDe1odMitanPL5Hmr9A8gchbRxxZfLXcM+3nQXWXno+APJs9pHg9ULu79oM= X-Received: by 10.55.122.134 with SMTP id v128mr1611190qkc.354.1513630790536; Mon, 18 Dec 2017 12:59:50 -0800 (PST) In-Reply-To: <83k1xjpz5a.fsf@gnu.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::22b X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:221227 Archived-At: --94eb2c062a5898dd9c0560a3a117 Content-Type: multipart/alternative; boundary="94eb2c062a5898dd990560a3a115" --94eb2c062a5898dd990560a3a115 Content-Type: text/plain; charset="UTF-8" Eli Zaretskii schrieb am Mo., 18. Dez. 2017 um 21:19 Uhr: > > From: Philipp Stephani > > Date: Mon, 18 Dec 2017 19:55:52 +0000 > > Cc: raman@google.com, emacs-devel@gnu.org > > > > @defun json-parse-string string &key (object-type @code{hash-table}) > > > > ? > > > > If that's the right thing, sure. OTOH, cl.texi uses > > @defun cl-fill seq item @t{&key :start :end} > > so probably we should use that? > > No, @t is almost never right, certainly not in code sequences. > At least cl.texi uses it consistently, though. > > > > > > +The keyword argument OBJECT-TYPE specifies which Lisp type is > used to > > > > ^^^^^^^^^^^ > > > > Shouldn't that be `:object-type' (including quotes)? > > > > > > > > Depending on whether we can use &key in a docstring in core. If > so, then this one is correct, see > > e.g. > > > the > > > > docstring of should-error. > > > > > > IMO, the doc string of should-error is no less confusing than this > > > one, because it expects something like ":type 'foo". > > > > > > Arguably yes. Though that has been the convention for cl-lib > functions for a while. > > > > cl-lib enjoyed being in the shadows for too long. I don't think we > > should let that continue any longer, we should fix that. > > > > OK, what's your suggestion? > > I thought I wrote that above. > I've attached a new version of the patch. --94eb2c062a5898dd990560a3a115 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


Eli Za= retskii <eliz@gnu.org> schrieb am= Mo., 18. Dez. 2017 um 21:19=C2=A0Uhr:
> From: Philipp Stephani <p.stephani2@gmail.com>
> Date: Mon, 18 Dec 2017 19:55:52 +0000
> Cc: raman@google= .com, emacs-de= vel@gnu.org
>
>=C2=A0 =C2=A0 @defun json-parse-string string &key (object-type @co= de{hash-table})
>
>=C2=A0 ?
>
> If that's the right thing, sure. OTOH, cl.texi uses
> @defun cl-fill seq item @t{&key :start :end}
> so probably we should use that?

No, @t is almost never right, certainly not in code sequences.

At least cl.texi uses it consistently, though.
=C2=A0

>=C2=A0 >=C2=A0 >=C2=A0 > +The keyword argument OBJECT-TYPE spe= cifies which Lisp type is used to
>=C2=A0 >=C2=A0 >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ^^^^^^^^^^^
>=C2=A0 >=C2=A0 >=C2=A0 Shouldn't that be `:object-type' (= including quotes)?
>=C2=A0 >=C2=A0 >
>=C2=A0 >=C2=A0 > Depending on whether we can use &key in a do= cstring in core. If so, then this one is correct, see
>=C2=A0 e.g.
>=C2=A0 >=C2=A0 the
>=C2=A0 >=C2=A0 > docstring of should-error.
>=C2=A0 >
>=C2=A0 >=C2=A0 IMO, the doc string of should-error is no less confus= ing than this
>=C2=A0 >=C2=A0 one, because it expects something like ":type &#= 39;foo".
>=C2=A0 >
>=C2=A0 > Arguably yes. Though that has been the convention for cl-li= b functions for a while.
>
>=C2=A0 cl-lib enjoyed being in the shadows for too long.=C2=A0 I don= 9;t think we
>=C2=A0 should let that continue any longer, we should fix that.
>
> OK, what's your suggestion?

I thought I wrote that above.

I've = attached a new version of the patch.=C2=A0
--94eb2c062a5898dd990560a3a115-- --94eb2c062a5898dd9c0560a3a117 Content-Type: text/plain; charset="US-ASCII"; name="0001-Allow-JSON-parser-functions-to-return-alists.txt" Content-Disposition: attachment; filename="0001-Allow-JSON-parser-functions-to-return-alists.txt" Content-Transfer-Encoding: base64 Content-ID: <1606b6cb832581411ec1> X-Attachment-Id: 1606b6cb832581411ec1 RnJvbSAzN2UzNTJiNjI4Mjg5ZmE2MWY5ZWY5ZDUyZWY2YzQ1NTVjNTUyNWY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwIFN0ZXBoYW5pIDxwaHN0QGdvb2dsZS5jb20+CkRh dGU6IFdlZCwgMTMgRGVjIDIwMTcgMjM6MzU6MDcgKzAxMDAKU3ViamVjdDogW1BBVENIXSBBbGxv dyBKU09OIHBhcnNlciBmdW5jdGlvbnMgdG8gcmV0dXJuIGFsaXN0cwoKKiBzcmMvanNvbi5jIChG anNvbl9wYXJzZV9zdHJpbmcsIEZqc29uX3BhcnNlX2J1ZmZlcik6IEdpdmUgdGhlc2UKZnVuY3Rp b25zIGEga2V5d29yZCBhcmd1bWVudCB0byBzcGVjaWZ5IHRoZSByZXR1cm4gdHlwZSBmb3IgSlNP TgpvYmplY3RzLgooanNvbl90b19saXNwKTogQ29udmVydCBvYmplY3RzIHRvIGFsaXN0cyBpZiBy ZXF1ZXN0ZWQuCihqc29uX3BhcnNlX29iamVjdF90eXBlKTogTmV3IGhlbHBlciBmdW5jdGlvbiB0 byBwYXJzZSBrZXl3b3JkCmFyZ3VtZW50cy4KCiogdGVzdC9zcmMvanNvbi10ZXN0cy5lbCAoanNv bi1wYXJzZS1zdHJpbmcvb2JqZWN0KTogQWRkIGEgdW5pdCB0ZXN0LgoKKiBkb2MvbGlzcHJlZi90 ZXh0LnRleGkgKFBhcnNpbmcgSlNPTik6IERvY3VtZW50IG5ldyBmdW5jdGlvbmFsaXR5LgotLS0K IGRvYy9saXNwcmVmL3RleHQudGV4aSAgfCAgMjAgKysrKystLS0KIHNyYy9qc29uLmMgICAgICAg ICAgICAgfCAxMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLQogdGVzdC9zcmMvanNvbi10ZXN0cy5lbCB8ICAxNiArKystLS0KIDMgZmlsZXMgY2hhbmdl ZCwgMTIwIGluc2VydGlvbnMoKyksIDQ1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9s aXNwcmVmL3RleHQudGV4aSBiL2RvYy9saXNwcmVmL3RleHQudGV4aQppbmRleCA1YjI4OGQ5NzUw Li40ZmJkODRhMmYxIDEwMDY0NAotLS0gYS9kb2MvbGlzcHJlZi90ZXh0LnRleGkKKysrIGIvZG9j L2xpc3ByZWYvdGV4dC50ZXhpCkBAIC00OTY1LDE0ICs0OTY1LDEzIEBAIFBhcnNpbmcgSlNPTgog CiBAaXRlbQogSlNPTiBoYXMgb25seSBvbmUgbWFwIHR5cGUsIHRoZSBvYmplY3QuICBKU09OIG9i amVjdHMgYXJlIHJlcHJlc2VudGVkCi11c2luZyBMaXNwIGhhc2h0YWJsZXMuCit1c2luZyBMaXNw IGhhc2h0YWJsZXMgb3IgYWxpc3RzLgogCiBAZW5kIGl0ZW1pemUKIAogQG5vaW5kZW50Ci1Ob3Rl IHRoYXQgQGNvZGV7bmlsfSBkb2Vzbid0IHJlcHJlc2VudCBhbnkgSlNPTiB2YWx1ZXM6IHRoaXMg aXMgdG8KLWF2b2lkIGNvbmZ1c2lvbiwgYmVjYXVzZSBAY29kZXtuaWx9IGNvdWxkIGVpdGhlciBy ZXByZXNlbnQKLUBjb2Rle251bGx9LCBAY29kZXtmYWxzZX0sIG9yIGFuIGVtcHR5IGFycmF5LCBh bGwgb2Ygd2hpY2ggYXJlCitOb3RlIHRoYXQgQGNvZGV7bmlsfSByZXByZXNlbnRzIHRoZSBlbXB0 eSBKU09OIG9iamVjdCwgQGNvZGV7QHtAfX0sCitub3QgQGNvZGV7bnVsbH0sIEBjb2Rle2ZhbHNl fSwgb3IgYW4gZW1wdHkgYXJyYXksIGFsbCBvZiB3aGljaCBhcmUKIGRpZmZlcmVudCBKU09OIHZh bHVlcy4KIAogICBJZiBzb21lIExpc3Agb2JqZWN0IGNhbid0IGJlIHJlcHJlc2VudGVkIGluIEpT T04sIHRoZSBzZXJpYWxpemF0aW9uCkBAIC00OTk1LDggKzQ5OTQsMTMgQEAgUGFyc2luZyBKU09O CiAKICAgT25seSB0b3AtbGV2ZWwgdmFsdWVzIChhcnJheXMgYW5kIG9iamVjdHMpIGNhbiBiZSBz ZXJpYWxpemVkIHRvCiBKU09OLiAgVGhlIHN1Ym9iamVjdHMgd2l0aGluIHRoZXNlIHRvcC1sZXZl bCB2YWx1ZXMgY2FuIGJlIG9mIGFueQotdHlwZS4gIExpa2V3aXNlLCB0aGUgcGFyc2luZyBmdW5j dGlvbnMgd2lsbCBvbmx5IHJldHVybiB2ZWN0b3JzIGFuZAotaGFzaHRhYmxlcy4KK3R5cGUuICBM aWtld2lzZSwgdGhlIHBhcnNpbmcgZnVuY3Rpb25zIHdpbGwgb25seSByZXR1cm4gdmVjdG9ycywK K2hhc2h0YWJsZXMsIGFuZCBhbGlzdHMuCisKKyAgVGhlIHBhcnNpbmcgZnVuY3Rpb25zIGFjY2Vw dCBrZXl3b3JkIGFyZ3VtZW50cy4gIEN1cnJlbnRseSBvbmx5IG9uZQora2V5d29yZCBhcmd1bWVu dCwgQGNvZGV7Om9iamVjdC10eXBlfSwgaXMgcmVjb2duaXplZDsgaXRzIHZhbHVlIGNhbiBiZQor ZWl0aGVyIEBjb2Rle2hhc2gtdGFibGV9IHRvIHBhcnNlIEpTT04gb2JqZWN0cyBhcyBoYXNodGFi bGVzIHdpdGgKK3N0cmluZyBrZXlzICh0aGUgZGVmYXVsdCkgb3IgQGNvZGV7YWxpc3R9IHRvIHBh cnNlIHRoZW0gYXMgYWxpc3RzLgogCiBAZGVmdW4ganNvbi1zZXJpYWxpemUgb2JqZWN0CiBUaGlz IGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgTGlzcCBzdHJpbmcgd2hpY2ggY29udGFpbnMgdGhlIEpT T04KQEAgLTUwMDgsMTIgKzUwMTIsMTIgQEAgUGFyc2luZyBKU09OCiBjdXJyZW50IGJ1ZmZlciBi ZWZvcmUgcG9pbnQuCiBAZW5kIGRlZnVuCiAKLUBkZWZ1biBqc29uLXBhcnNlLXN0cmluZyBzdHJp bmcKK0BkZWZ1biBqc29uLXBhcnNlLXN0cmluZyBzdHJpbmcgJmtleSAob2JqZWN0LXR5cGUgJ2hh c2gtdGFibGUpCiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgSlNPTiB2YWx1ZSBpbiBAdmFye3N0 cmluZ30sIHdoaWNoIG11c3QgYmUgYQogTGlzcCBzdHJpbmcuCiBAZW5kIGRlZnVuCiAKLUBkZWZ1 biBqc29uLXBhcnNlLWJ1ZmZlcgorQGRlZnVuIGpzb24tcGFyc2UtYnVmZmVyICZrZXkgKG9iamVj dC10eXBlIEBjb2Rle2hhc2gtdGFibGV9KQogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgbmV4dCBK U09OIHZhbHVlIGZyb20gdGhlIGN1cnJlbnQgYnVmZmVyLAogc3RhcnRpbmcgYXQgcG9pbnQuICBJ dCBtb3ZlcyBwb2ludCB0byB0aGUgcG9zaXRpb24gaW1tZWRpYXRlbHkgYWZ0ZXIKIHRoZSB2YWx1 ZSBpZiBhIHZhbHVlIGNvdWxkIGJlIHJlYWQgYW5kIGNvbnZlcnRlZCB0byBMaXNwOyBvdGhlcndp c2UgaXQKZGlmZiAtLWdpdCBhL3NyYy9qc29uLmMgYi9zcmMvanNvbi5jCmluZGV4IDcyY2E5M2Y2 MjEuLmY5Mzk2YjRlNzIgMTAwNjQ0Ci0tLSBhL3NyYy9qc29uLmMKKysrIGIvc3JjL2pzb24uYwpA QCAtNTA3LDEwICs1MDcsMTUgQEAgT0JKRUNULiAgKi8pCiAgIHJldHVybiB1bmJpbmRfdG8gKGNv dW50LCBRbmlsKTsKIH0KIAorZW51bSBqc29uX29iamVjdF90eXBlIHsKKyAganNvbl9vYmplY3Rf aGFzaHRhYmxlLAorICBqc29uX29iamVjdF9hbGlzdCwKK307CisKIC8qIENvbnZlcnQgYSBKU09O IG9iamVjdCB0byBhIExpc3Agb2JqZWN0LiAgKi8KIAogc3RhdGljIF9HTF9BUkdfTk9OTlVMTCAo KDEpKSBMaXNwX09iamVjdAotanNvbl90b19saXNwIChqc29uX3QgKmpzb24pCitqc29uX3RvX2xp c3AgKGpzb25fdCAqanNvbiwgZW51bSBqc29uX29iamVjdF90eXBlIG9iamVjdF90eXBlKQogewog ICBzd2l0Y2ggKGpzb25fdHlwZW9mIChqc29uKSkKICAgICB7CkBAIC01NDQsNyArNTQ5LDcgQEAg anNvbl90b19saXNwIChqc29uX3QgKmpzb24pCiAgICAgICAgIExpc3BfT2JqZWN0IHJlc3VsdCA9 IEZtYWtlX3ZlY3RvciAobWFrZV9uYXRudW0gKHNpemUpLCBRdW5ib3VuZCk7CiAgICAgICAgIGZv ciAocHRyZGlmZl90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICAgIEFTRVQgKHJlc3Vs dCwgaSwKLSAgICAgICAgICAgICAgICBqc29uX3RvX2xpc3AgKGpzb25fYXJyYXlfZ2V0IChqc29u LCBpKSkpOworICAgICAgICAgICAgICAgIGpzb25fdG9fbGlzcCAoanNvbl9hcnJheV9nZXQgKGpz b24sIGkpLCBvYmplY3RfdHlwZSkpOwogICAgICAgICAtLWxpc3BfZXZhbF9kZXB0aDsKICAgICAg ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgIH0KQEAgLTU1MiwyMyArNTU3LDQ5IEBAIGpzb25fdG9f bGlzcCAoanNvbl90ICpqc29uKQogICAgICAgewogICAgICAgICBpZiAoKytsaXNwX2V2YWxfZGVw dGggPiBtYXhfbGlzcF9ldmFsX2RlcHRoKQogICAgICAgICAgIHhzaWduYWwwIChRanNvbl9vYmpl Y3RfdG9vX2RlZXApOwotICAgICAgICBzaXplX3Qgc2l6ZSA9IGpzb25fb2JqZWN0X3NpemUgKGpz b24pOwotICAgICAgICBpZiAoRklYTlVNX09WRVJGTE9XX1AgKHNpemUpKQotICAgICAgICAgIHhz aWduYWwwIChRb3ZlcmZsb3dfZXJyb3IpOwotICAgICAgICBMaXNwX09iamVjdCByZXN1bHQgPSBD QUxMTiAoRm1ha2VfaGFzaF90YWJsZSwgUUN0ZXN0LCBRZXF1YWwsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRQ3NpemUsIG1ha2VfbmF0bnVtIChzaXplKSk7Ci0gICAgICAg IHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmggPSBYSEFTSF9UQUJMRSAocmVzdWx0KTsKLSAgICAg ICAgY29uc3QgY2hhciAqa2V5X3N0cjsKLSAgICAgICAganNvbl90ICp2YWx1ZTsKLSAgICAgICAg anNvbl9vYmplY3RfZm9yZWFjaCAoanNvbiwga2V5X3N0ciwgdmFsdWUpCisgICAgICAgIExpc3Bf T2JqZWN0IHJlc3VsdDsKKyAgICAgICAgc3dpdGNoIChvYmplY3RfdHlwZSkKICAgICAgICAgICB7 Ci0gICAgICAgICAgICBMaXNwX09iamVjdCBrZXkgPSBqc29uX2J1aWxkX3N0cmluZyAoa2V5X3N0 cik7Ci0gICAgICAgICAgICBFTUFDU19VSU5UIGhhc2g7Ci0gICAgICAgICAgICBwdHJkaWZmX3Qg aSA9IGhhc2hfbG9va3VwIChoLCBrZXksICZoYXNoKTsKLSAgICAgICAgICAgIC8qIEtleXMgaW4g SlNPTiBvYmplY3RzIGFyZSB1bmlxdWUsIHNvIHRoZSBrZXkgY2FuJ3QgYmUKLSAgICAgICAgICAg ICAgIHByZXNlbnQgeWV0LiAgKi8KLSAgICAgICAgICAgIGVhc3NlcnQgKGkgPCAwKTsKLSAgICAg ICAgICAgIGhhc2hfcHV0IChoLCBrZXksIGpzb25fdG9fbGlzcCAodmFsdWUpLCBoYXNoKTsKKyAg ICAgICAgICBjYXNlIGpzb25fb2JqZWN0X2hhc2h0YWJsZToKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgc2l6ZV90IHNpemUgPSBqc29uX29iamVjdF9zaXplIChqc29uKTsKKyAgICAgICAg ICAgICAgaWYgKEZJWE5VTV9PVkVSRkxPV19QIChzaXplKSkKKyAgICAgICAgICAgICAgICB4c2ln bmFsMCAoUW92ZXJmbG93X2Vycm9yKTsKKyAgICAgICAgICAgICAgcmVzdWx0ID0gQ0FMTE4gKEZt YWtlX2hhc2hfdGFibGUsIFFDdGVzdCwgUWVxdWFsLCBRQ3NpemUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtYWtlX25hdG51bSAoc2l6ZSkpOworICAgICAgICAgICAgICBzdHJ1Y3Qg TGlzcF9IYXNoX1RhYmxlICpoID0gWEhBU0hfVEFCTEUgKHJlc3VsdCk7CisgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmtleV9zdHI7CisgICAgICAgICAgICAgIGpzb25fdCAqdmFsdWU7CisgICAg ICAgICAgICAgIGpzb25fb2JqZWN0X2ZvcmVhY2ggKGpzb24sIGtleV9zdHIsIHZhbHVlKQorICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGtleSA9IGpzb25f YnVpbGRfc3RyaW5nIChrZXlfc3RyKTsKKyAgICAgICAgICAgICAgICAgIEVNQUNTX1VJTlQgaGFz aDsKKyAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBpID0gaGFzaF9sb29rdXAgKGgsIGtleSwg Jmhhc2gpOworICAgICAgICAgICAgICAgICAgLyogS2V5cyBpbiBKU09OIG9iamVjdHMgYXJlIHVu aXF1ZSwgc28gdGhlIGtleSBjYW4ndAorICAgICAgICAgICAgICAgICAgICAgYmUgcHJlc2VudCB5 ZXQuICAqLworICAgICAgICAgICAgICAgICAgZWFzc2VydCAoaSA8IDApOworICAgICAgICAgICAg ICAgICAgaGFzaF9wdXQgKGgsIGtleSwganNvbl90b19saXNwICh2YWx1ZSwgb2JqZWN0X3R5cGUp LCBoYXNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfQorICAgICAgICAgIGNhc2UganNvbl9vYmplY3RfYWxpc3Q6CisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIHJlc3VsdCA9IFFuaWw7CisgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmtleV9zdHI7CisgICAgICAgICAgICAgIGpzb25fdCAqdmFsdWU7CisgICAgICAgICAgICAgIGpz b25fb2JqZWN0X2ZvcmVhY2ggKGpzb24sIGtleV9zdHIsIHZhbHVlKQorICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGtleSA9IEZpbnRlcm4gKGpzb25fYnVp bGRfc3RyaW5nIChrZXlfc3RyKSwgUW5pbCk7CisgICAgICAgICAgICAgICAgICByZXN1bHQKKyAg ICAgICAgICAgICAgICAgICAgPSBGY29ucyAoRmNvbnMgKGtleSwganNvbl90b19saXNwICh2YWx1 ZSwgb2JqZWN0X3R5cGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHJlc3VsdCA9IEZucmV2ZXJzZSAocmVz dWx0KTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgZGVm YXVsdDoKKyAgICAgICAgICAgIC8qIENhbid0IGdldCBoZXJlLiAgKi8KKyAgICAgICAgICAgIGVt YWNzX2Fib3J0ICgpOwogICAgICAgICAgIH0KICAgICAgICAgLS1saXNwX2V2YWxfZGVwdGg7CiAg ICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC01NzgsMTUgKzYwOSw0NCBAQCBqc29uX3RvX2xpc3Ag KGpzb25fdCAqanNvbikKICAgZW1hY3NfYWJvcnQgKCk7CiB9CiAKLURFRlVOICgianNvbi1wYXJz ZS1zdHJpbmciLCBGanNvbl9wYXJzZV9zdHJpbmcsIFNqc29uX3BhcnNlX3N0cmluZywgMSwgMSwg TlVMTCwKK3N0YXRpYyBlbnVtIGpzb25fb2JqZWN0X3R5cGUKK2pzb25fcGFyc2Vfb2JqZWN0X3R5 cGUgKHB0cmRpZmZfdCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCit7CisgIHN3aXRjaCAobmFy Z3MpCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgIHJldHVybiBqc29uX29iamVjdF9oYXNodGFi bGU7CisgICAgY2FzZSAyOgorICAgICAgeworICAgICAgICBMaXNwX09iamVjdCBrZXkgPSBhcmdz WzBdOworICAgICAgICBMaXNwX09iamVjdCB2YWx1ZSA9IGFyZ3NbMV07CisgICAgICAgIGlmICgh RVEgKGtleSwgUUNvYmplY3RfdHlwZSkpCisgICAgICAgICAgd3JvbmdfY2hvaWNlIChsaXN0MSAo UUNvYmplY3RfdHlwZSksIGtleSk7CisgICAgICAgIGlmIChFUSAodmFsdWUsIFFoYXNoX3RhYmxl KSkKKyAgICAgICAgICByZXR1cm4ganNvbl9vYmplY3RfaGFzaHRhYmxlOworICAgICAgICBlbHNl IGlmIChFUSAodmFsdWUsIFFhbGlzdCkpCisgICAgICAgICAgcmV0dXJuIGpzb25fb2JqZWN0X2Fs aXN0OworICAgICAgICBlbHNlCisgICAgICAgICAgd3JvbmdfY2hvaWNlIChsaXN0MiAoUWhhc2hf dGFibGUsIFFhbGlzdCksIHZhbHVlKTsKKyAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgd3Jv bmdfdHlwZV9hcmd1bWVudCAoUXBsaXN0cCwgRmxpc3QgKG5hcmdzLCBhcmdzKSk7CisgICAgfQor fQorCitERUZVTiAoImpzb24tcGFyc2Utc3RyaW5nIiwgRmpzb25fcGFyc2Vfc3RyaW5nLCBTanNv bl9wYXJzZV9zdHJpbmcsIDEsIE1BTlksCisgICAgICAgTlVMTCwKICAgICAgICBkb2M6IC8qIFBh cnNlIHRoZSBKU09OIFNUUklORyBpbnRvIGEgTGlzcCBvYmplY3QuCiBUaGlzIGlzIGVzc2VudGlh bGx5IHRoZSByZXZlcnNlIG9wZXJhdGlvbiBvZiBganNvbi1zZXJpYWxpemUnLCB3aGljaAotc2Vl LiAgVGhlIHJldHVybmVkIG9iamVjdCB3aWxsIGJlIGEgdmVjdG9yIG9yIGhhc2h0YWJsZS4gIEl0 cyBlbGVtZW50cwotd2lsbCBiZSBgOm51bGwnLCBgOmZhbHNlJywgdCwgbnVtYmVycywgc3RyaW5n cywgb3IgZnVydGhlciB2ZWN0b3JzIGFuZAotaGFzaHRhYmxlcy4gIElmIHRoZXJlIGFyZSBkdXBs aWNhdGUga2V5cyBpbiBhbiBvYmplY3QsIGFsbCBidXQgdGhlCi1sYXN0IG9uZSBhcmUgaWdub3Jl ZC4gIElmIFNUUklORyBkb2Vzbid0IGNvbnRhaW4gYSB2YWxpZCBKU09OIG9iamVjdCwKLWFuIGVy cm9yIG9mIHR5cGUgYGpzb24tcGFyc2UtZXJyb3InIGlzIHNpZ25hbGVkLiAgKi8pCi0gIChMaXNw X09iamVjdCBzdHJpbmcpCitzZWUuICBUaGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgYmUgYSB2ZWN0 b3IsIGhhc2h0YWJsZSwgb3IgYWxpc3QuICBJdHMKK2VsZW1lbnRzIHdpbGwgYmUgYDpudWxsJywg YDpmYWxzZScsIHQsIG51bWJlcnMsIHN0cmluZ3MsIG9yIGZ1cnRoZXIKK3ZlY3RvcnMsIGhhc2h0 YWJsZXMsIGFuZCBhbGlzdHMuICBJZiB0aGVyZSBhcmUgZHVwbGljYXRlIGtleXMgaW4gYW4KK29i amVjdCwgYWxsIGJ1dCB0aGUgbGFzdCBvbmUgYXJlIGlnbm9yZWQuICBJZiBTVFJJTkcgZG9lc24n dCBjb250YWluIGEKK3ZhbGlkIEpTT04gb2JqZWN0LCBhbiBlcnJvciBvZiB0eXBlIGBqc29uLXBh cnNlLWVycm9yJyBpcyBzaWduYWxlZC4KK1RoZSBrZXl3b3JkIGFyZ3VtZW50IGA6b2JqZWN0LXR5 cGUnIHNwZWNpZmllcyB3aGljaCBMaXNwIHR5cGUgaXMgdXNlZAordG8gcmVwcmVzZW50IG9iamVj dHM7IGl0IGNhbiBiZSBgaGFzaC10YWJsZScgb3IgYGFsaXN0Jy4KK3VzYWdlOiAoc3RyaW5nICZr ZXkgKE9CSkVDVC1UWVBFIFxcPSdoYXNoLXRhYmxlKSkgKi8pCisgIChwdHJkaWZmX3QgbmFyZ3Ms IExpc3BfT2JqZWN0ICphcmdzKQogewogICBwdHJkaWZmX3QgY291bnQgPSBTUEVDUERMX0lOREVY ICgpOwogCkBAIC02MDUsOCArNjY1LDExIEBAIGFuIGVycm9yIG9mIHR5cGUgYGpzb24tcGFyc2Ut ZXJyb3InIGlzIHNpZ25hbGVkLiAgKi8pCiAgICAgfQogI2VuZGlmCiAKKyAgTGlzcF9PYmplY3Qg c3RyaW5nID0gYXJnc1swXTsKICAgTGlzcF9PYmplY3QgZW5jb2RlZCA9IGpzb25fZW5jb2RlIChz dHJpbmcpOwogICBjaGVja19zdHJpbmdfd2l0aG91dF9lbWJlZGRlZF9udWxscyAoZW5jb2RlZCk7 CisgIGVudW0ganNvbl9vYmplY3RfdHlwZSBvYmplY3RfdHlwZQorICAgID0ganNvbl9wYXJzZV9v YmplY3RfdHlwZSAobmFyZ3MgLSAxLCBhcmdzICsgMSk7CiAKICAganNvbl9lcnJvcl90IGVycm9y OwogICBqc29uX3QgKm9iamVjdCA9IGpzb25fbG9hZHMgKFNTREFUQSAoZW5jb2RlZCksIDAsICZl cnJvcik7CkBAIC02MTcsNyArNjgwLDcgQEAgYW4gZXJyb3Igb2YgdHlwZSBganNvbi1wYXJzZS1l cnJvcicgaXMgc2lnbmFsZWQuICAqLykKICAgaWYgKG9iamVjdCAhPSBOVUxMKQogICAgIHJlY29y ZF91bndpbmRfcHJvdGVjdF9wdHIgKGpzb25fcmVsZWFzZV9vYmplY3QsIG9iamVjdCk7CiAKLSAg cmV0dXJuIHVuYmluZF90byAoY291bnQsIGpzb25fdG9fbGlzcCAob2JqZWN0KSk7CisgIHJldHVy biB1bmJpbmRfdG8gKGNvdW50LCBqc29uX3RvX2xpc3AgKG9iamVjdCwgb2JqZWN0X3R5cGUpKTsK IH0KIAogc3RydWN0IGpzb25fcmVhZF9idWZmZXJfZGF0YQpAQCAtNjUwLDEyICs3MTMsMTMgQEAg anNvbl9yZWFkX2J1ZmZlcl9jYWxsYmFjayAodm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLCB2 b2lkICpkYXRhKQogfQogCiBERUZVTiAoImpzb24tcGFyc2UtYnVmZmVyIiwgRmpzb25fcGFyc2Vf YnVmZmVyLCBTanNvbl9wYXJzZV9idWZmZXIsCi0gICAgICAgMCwgMCwgTlVMTCwKKyAgICAgICAw LCBNQU5ZLCBOVUxMLAogICAgICAgIGRvYzogLyogUmVhZCBKU09OIG9iamVjdCBmcm9tIGN1cnJl bnQgYnVmZmVyIHN0YXJ0aW5nIGF0IHBvaW50LgogVGhpcyBpcyBzaW1pbGFyIHRvIGBqc29uLXBh cnNlLXN0cmluZycsIHdoaWNoIHNlZS4gIE1vdmUgcG9pbnQgYWZ0ZXIKIHRoZSBlbmQgb2YgdGhl IG9iamVjdCBpZiBwYXJzaW5nIHdhcyBzdWNjZXNzZnVsLiAgT24gZXJyb3IsIHBvaW50IGlzCi1u b3QgbW92ZWQuICAqLykKLSAgKHZvaWQpCitub3QgbW92ZWQuCit1c2FnZTogKCZrZXkgKE9CSkVD VC1UWVBFIFxcPSdoYXNoLXRhYmxlKSkgICovKQorICAocHRyZGlmZl90IG5hcmdzLCBMaXNwX09i amVjdCAqYXJncykKIHsKICAgcHRyZGlmZl90IGNvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsKIApA QCAtNjc0LDYgKzczOCw4IEBAIG5vdCBtb3ZlZC4gICovKQogICAgIH0KICNlbmRpZgogCisgIGVu dW0ganNvbl9vYmplY3RfdHlwZSBvYmplY3RfdHlwZSA9IGpzb25fcGFyc2Vfb2JqZWN0X3R5cGUg KG5hcmdzLCBhcmdzKTsKKwogICBwdHJkaWZmX3QgcG9pbnQgPSBQVF9CWVRFOwogICBzdHJ1Y3Qg anNvbl9yZWFkX2J1ZmZlcl9kYXRhIGRhdGEgPSB7LnBvaW50ID0gcG9pbnR9OwogICBqc29uX2Vy cm9yX3QgZXJyb3I7CkBAIC02ODcsNyArNzUzLDcgQEAgbm90IG1vdmVkLiAgKi8pCiAgIHJlY29y ZF91bndpbmRfcHJvdGVjdF9wdHIgKGpzb25fcmVsZWFzZV9vYmplY3QsIG9iamVjdCk7CiAKICAg LyogQ29udmVydCBhbmQgdGhlbiBtb3ZlIHBvaW50IG9ubHkgaWYgZXZlcnl0aGluZyBzdWNjZWVk ZWQuICAqLwotICBMaXNwX09iamVjdCBsaXNwID0ganNvbl90b19saXNwIChvYmplY3QpOworICBM aXNwX09iamVjdCBsaXNwID0ganNvbl90b19saXNwIChvYmplY3QsIG9iamVjdF90eXBlKTsKIAog ICAvKiBBZGp1c3QgcG9pbnQgYnkgaG93IG11Y2ggd2UganVzdCByZWFkLiAgKi8KICAgcG9pbnQg Kz0gZXJyb3IucG9zaXRpb247CkBAIC03NTAsNiArODE2LDkgQEAgc3ltc19vZl9qc29uICh2b2lk KQogICBGcHV0IChRanNvbl9wYXJzZV9zdHJpbmcsIFFwdXJlLCBRdCk7CiAgIEZwdXQgKFFqc29u X3BhcnNlX3N0cmluZywgUXNpZGVfZWZmZWN0X2ZyZWUsIFF0KTsKIAorICBERUZTWU0gKFFDb2Jq ZWN0X3R5cGUsICI6b2JqZWN0LXR5cGUiKTsKKyAgREVGU1lNIChRYWxpc3QsICJhbGlzdCIpOwor CiAgIGRlZnN1YnIgKCZTanNvbl9zZXJpYWxpemUpOwogICBkZWZzdWJyICgmU2pzb25faW5zZXJ0 KTsKICAgZGVmc3ViciAoJlNqc29uX3BhcnNlX3N0cmluZyk7CmRpZmYgLS1naXQgYS90ZXN0L3Ny Yy9qc29uLXRlc3RzLmVsIGIvdGVzdC9zcmMvanNvbi10ZXN0cy5lbAppbmRleCAwN2ViNDFkMDkz Li5kYTUxYWFjOGM4IDEwMDY0NAotLS0gYS90ZXN0L3NyYy9qc29uLXRlc3RzLmVsCisrKyBiL3Rl c3Qvc3JjL2pzb24tdGVzdHMuZWwKQEAgLTUyLDEzICs1MiwxNSBAQAogCiAoZXJ0LWRlZnRlc3Qg anNvbi1wYXJzZS1zdHJpbmcvb2JqZWN0ICgpCiAgIChza2lwLXVubGVzcyAoZmJvdW5kcCAnanNv bi1wYXJzZS1zdHJpbmcpKQotICAobGV0ICgoYWN0dWFsCi0gICAgICAgICAoanNvbi1wYXJzZS1z dHJpbmcKLSAgICAgICAgICAieyBcImFiY1wiIDogWzEsIDIsIHRydWVdLCBcImRlZlwiIDogbnVs bCwgXCJhYmNcIiA6IFs5LCBmYWxzZV0gfVxuIikpKQotICAgIChzaG91bGQgKGhhc2gtdGFibGUt cCBhY3R1YWwpKQotICAgIChzaG91bGQgKGVxdWFsIChoYXNoLXRhYmxlLWNvdW50IGFjdHVhbCkg MikpCi0gICAgKHNob3VsZCAoZXF1YWwgKGNsLXNvcnQgKG1hcC1wYWlycyBhY3R1YWwpICMnc3Ry aW5nPCA6a2V5ICMnY2FyKQotICAgICAgICAgICAgICAgICAgICcoKCJhYmMiIC4gWzkgOmZhbHNl XSkgKCJkZWYiIC4gOm51bGwpKSkpKSkKKyAgKGxldCAoKGlucHV0CisgICAgICAgICAieyBcImFi Y1wiIDogWzEsIDIsIHRydWVdLCBcImRlZlwiIDogbnVsbCwgXCJhYmNcIiA6IFs5LCBmYWxzZV0g fVxuIikpCisgICAgKGxldCAoKGFjdHVhbCAoanNvbi1wYXJzZS1zdHJpbmcgaW5wdXQpKSkKKyAg ICAgIChzaG91bGQgKGhhc2gtdGFibGUtcCBhY3R1YWwpKQorICAgICAgKHNob3VsZCAoZXF1YWwg KGhhc2gtdGFibGUtY291bnQgYWN0dWFsKSAyKSkKKyAgICAgIChzaG91bGQgKGVxdWFsIChjbC1z b3J0IChtYXAtcGFpcnMgYWN0dWFsKSAjJ3N0cmluZzwgOmtleSAjJ2NhcikKKyAgICAgICAgICAg ICAgICAgICAgICcoKCJhYmMiIC4gWzkgOmZhbHNlXSkgKCJkZWYiIC4gOm51bGwpKSkpKQorICAg IChzaG91bGQgKGVxdWFsIChqc29uLXBhcnNlLXN0cmluZyBpbnB1dCA6b2JqZWN0LXR5cGUgJ2Fs aXN0KQorICAgICAgICAgICAgICAgICAgICcoKGFiYyAuIFs5IDpmYWxzZV0pIChkZWYgLiA6bnVs bCkpKSkpKQogCiAoZXJ0LWRlZnRlc3QganNvbi1wYXJzZS1zdHJpbmcvc3RyaW5nICgpCiAgIChz a2lwLXVubGVzcyAoZmJvdW5kcCAnanNvbi1wYXJzZS1zdHJpbmcpKQotLSAKMi4xNS4xCgo= --94eb2c062a5898dd9c0560a3a117--