Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vqSvq-00BJTZ-1d for pgsql-hackers@arkaria.postgresql.org; Thu, 12 Feb 2026 09:24:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vqSvp-007f59-2M for pgsql-hackers@arkaria.postgresql.org; Thu, 12 Feb 2026 09:24:18 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vqSvo-007f51-30 for pgsql-hackers@lists.postgresql.org; Thu, 12 Feb 2026 09:24:18 +0000 Received: from mail-lf1-x134.google.com ([2a00:1450:4864:20::134]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vqSvm-00000000GBc-2Al1 for pgsql-hackers@lists.postgresql.org; Thu, 12 Feb 2026 09:24:16 +0000 Received: by mail-lf1-x134.google.com with SMTP id 2adb3069b0e04-59de0b7c28aso3099423e87.1 for ; Thu, 12 Feb 2026 01:24:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770888253; cv=none; d=google.com; s=arc-20240605; b=KzOxGEkvenuCGS+oEg6Tw/g/6BneFr3I/uaGEAy0Wo1D0KLvcDly82cXLc+JmLzSxu 7ZQBN/liHp6A9QV5Ql9X17zjx7SoEmSTWIFh5On5xpCJVCH4Iqu/VwSk/6l1jjctcjHH 7r0U845pvLcEs/1n/e2bt0fy9YgfOhEeZQGhlq0QiFvvXNeYERWy832pStyDgYwdsACI pVIFdtYbhPG58a5C7cHVlRIJ5SZsllcx28KSo0ubJ0VcNXplmBC6p2Rpe6hRjZijQiRw xe5t8ZKM3w+7Rgq1XdcRYw4RkwYNyQ3yJLgQRvIPDghg/R+zd98SadPya7Uda5HamSzr sFiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=n6QS2jQMZiAtEjNmjyj8t6wHCf/ax2e7DdOfWI2ChiE=; fh=xw66gSxB338BD6jjmBDM3+aCXSSuQaELEpOAFUZIZDY=; b=HyM27lzn1ANppec6ODa0IJVmXSyzGc6eK/bK/wfkjBySvT9Wc9BT01CWSNx+r0qO3O vuvdpCPCFKlCSMNAqf6goKic6qrxd/jmL984KFtrjjLNAY4ClVrBCqdFmUTxL+7Wx3f6 3PZRcydm40uKNUgxXzuYWAr49C5FNI/Gs+YTE4j33uuDAjbGU6IG04Nogd2Mjn+umnck ADZdzMzUW9i0J/YwYKRzDMoVtOT8QJgtPz6bo1wl3YSFTi7BmGnnAm5BuXYrcjuwKpVO W+AS0pSQ+mzQ5M2VwifncdCdYGADgMt1Ih1lTbnBVJlmUWV5ZYVXoL3MbgI7sOUabm0m WuAQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770888253; x=1771493053; 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=n6QS2jQMZiAtEjNmjyj8t6wHCf/ax2e7DdOfWI2ChiE=; b=VuJpKfpKd5fqotuW5NVmgXazJ3DnezUpfB2bqoPEPrPe0JFP+GpOlu9Cdcn7l6WaXM mU7sGkSfwwNuGzBtAJcvMTcij3cIy3enU31q18wK5Xa4j66yq06zd4jElSacivLXYH9K US2Y4y3sdSDLbAZAO3Is7oCjYl4iPEu5pIeljf97bTCESLxphAH586+6m/EVt82BAz96 r3AGF22OMDXjIGMv3vpPxS3U4+ACkjGLEPIcbwft8EmIUfjSPOjPjel8VDG6saLnVuSh Yjd7VpYafIgM5iR85NVVGR58L8eTvlWhSGPaEsJXxtSlZANnyajeIP+zhkBctLe1DHS3 o/Yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770888253; x=1771493053; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=n6QS2jQMZiAtEjNmjyj8t6wHCf/ax2e7DdOfWI2ChiE=; b=iP79RRubEEnzCXSBi27oBNOWdXfSMb0ZB8GiKCzNlSKdAZbs012A8Fy1zh0QpZHAgt VSUK61EmuSfvCGiGGgb3UPM7g5Z4j4OX/oYocwG2xI1lJOnA2k3ORwJJ1FTtcja5xHhu STEp35DKKEFdGJZs+WqoN4/T3kw+KNjJsFXm57k91bC1a18iYT/1/e1zXT6jJxO+B8r3 WEX/7Id4V5sB7LfAo6T/D5at8mPHB3ilAPGCA0/poVQk95YU+arw2sty1X7WA1EXdkcX 2MYLrifjLmZOu7qz89jZD9ugu4koJr7zIS9pCIkuJgxVkhRszpQgkIsr/ZhwLRI7ql68 nGaQ== X-Gm-Message-State: AOJu0Yxi/lQHJz4ruU10Nz9pFvQdMg35MfglD2hFS1srnhjIlrJyHkcM +HD9yggaX9xJOWMW6odFYiTk4/UUJaHS5ppDIY8Mu1FT7MVzO+nxyT+yZZq6ZvaEGAWo3FnnWz8 f2fheN3w7KaAPJowNkTwTBOc3iYg5/8A= X-Gm-Gg: AZuq6aLhpjyufWnVmQOUCuffUHPq8nFDhoKTxoPYaaIS4PjsQ60U/ei2IOqxOTtCH/D /9oOt22BJrzqk2oqZBdjjjq5Rhl4083Tcyl5FjbDIuzqvtpcURsUXqfzO2H3hWyUu68xPSjPGl0 cF6pnsf+pl25egvgA28WYbFd15IZBCwIceBzphc2SY9t1bOYFuyXAiezjXJD0L+6C+PxSDpELP2 ylFsTx9k4nA0caf5llp7HFCyEx00Fwb0+zJ0lUP8HnR4DNKY/holPb9+jTfNHA9PR49oisIrQes RBX7RH3krw== X-Received: by 2002:a05:6512:1595:b0:59e:6338:c832 with SMTP id 2adb3069b0e04-59e64f2dbcfmr522851e87.1.1770888252172; Thu, 12 Feb 2026 01:24:12 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Ajin Cherian Date: Thu, 12 Feb 2026 20:23:59 +1100 X-Gm-Features: AZwV_Qi_1VJNTYnIbevgmMhFR5rc8iijXF6eOZr1s_kPX3J61KFaQIYFF1UrEgY Message-ID: Subject: Re: [PATCH] Support automatic sequence replication To: shveta malik Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000355f66064a9d0d2b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000355f66064a9d0d2b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Feb 6, 2026 at 8:15=E2=80=AFPM shveta malik wrote: > > On Thu, Feb 5, 2026 at 10:33=E2=80=AFAM Ajin Cherian = wrote: > Thank You for the patch. I haven=E2=80=99t reviewed the details yet, but = it > would be good to evaluate whether we really need to start the sequence > sync worker so deep inside the apply worker. Currently, the caller of > ProcessSequencesForSync(), namely ProcessSyncingRelations() is invoked > for every apply message to process possible state-changes of relation > and start worker (tablesync/sequence-sync etc). Since monitoring > state-change behavior is no longer required for sequences, should we > consider moving this logic to the main loop of the apply worker, > possibly within LogicalRepApplyLoop()? There, we could check whether > the table has any sequences and, if a worker is not already running, > start one. Thoughts? > I've moved this to LogicalRepApplyLoop() On Mon, Feb 9, 2026 at 10:55=E2=80=AFAM Peter Smith = wrote: > > Some review comments for v3-0001. > > =3D=3D=3D=3D=3D=3D > .../replication/logical/sequencesync.c > > copy_sequences: > > 1. > - if (sync_status =3D=3D COPYSEQ_SUCCESS) > + > + /* > + * For sequences in READY state, only sync if there's drift > + */ > + if (relstate =3D=3D SUBREL_STATE_READY && sync_status =3D=3D COPYSEQ_SU= CCESS) > + { > + should_sync =3D check_sequence_drift(seqinfo); > + if (should_sync) > + drift_detected =3D true; > + } > + > + if (sync_status =3D=3D COPYSEQ_SUCCESS && should_sync) > sync_status =3D copy_sequence(seqinfo, > - sequence_rel->rd_rel->relowner); > + sequence_rel->rd_rel->relowner, > + relstate); > + else if (sync_status =3D=3D COPYSEQ_SUCCESS && !should_sync) > + sync_status =3D COPYSEQ_NOWORK; > > I'm struggling somewhat to follow this logic. > > For example, every condition refers to COPYSEQ_SUCCESS -- is that > really necessary; can't this all be boiled down to something like > below? > > SUGGESTION > > /* > * For sequences in INIT state, always sync. > * Otherwise, for sequences in READY state, only sync if there's drift. > */ > if (sync_status =3D=3D COPYSEQ_SUCCESS) > { > if ((relstate =3D=3D SUBREL_STATE_INIT) || check_sequence_drift(seqinfo= )) > sync_status =3D copy_sequence(...); > else > sync_status =3D COPYSEQ_NOWORK; > } Changed as suggested. On Wed, Feb 11, 2026 at 2:30=E2=80=AFPM shveta malik wrote: > > On Fri, Feb 6, 2026 at 2:47=E2=80=AFPM shveta malik wrote: > > > Few more comments: > > 1) > + /* Run sync for sequences in READY state */ > + sequence_copied |=3D LogicalRepSyncSequences(LogRepWorkerWalRcvConn, > SUBREL_STATE_READY); > + > + /* Call initial sync for sequences in INIT state */ > + sequence_copied |=3D LogicalRepSyncSequences(LogRepWorkerWalRcvConn, > SUBREL_STATE_INIT); > > Above logic means we ping primary twice for one seq-sync cycle? Is it > possible to do it in below way: > > Get all sequences from the publisher in one go. > If local-seq's state is INIT, copy those sequences, move the state to REA= DY. > If local-seq's state is READY, check the drift and proceed accordingly. > > i.e, there should be a single call to LogicalRepSyncSequences() and > relstate shouldn't even be an argument. > Changed as suggested. > 2) > GetSequence: > + /* Open and lock the sequence relation */ > + seqrel =3D table_open(relid, AccessShareLock); > > GetSequence is called from check_sequence_drift and > check_sequence_drift() from copy_sequences(). In copy_sequences(), we > already open the seq's (localrelid) table in > get_and_validate_seq_info() and give it as output (see sequence_rel). > Same can be passed to this instead of trying opening the table again. > > 3) > + /* Verify it's actually a sequence */ > + if (seqrel->rd_rel->relkind !=3D RELKIND_SEQUENCE) > + ereport(ERROR, > + (errcode(ERRCODE_WRONG_OBJECT_TYPE), > + errmsg("\"%s\" is not a sequence", > + RelationGetRelationName(seqrel)))); > Changed these. Other than these, I've changed seqinfos from being a global static list to a list that gets passed around and destroyed in each iteration. I haven't addressed the upgrade issue raised by Vignesh and Shveta in this patch. I will address that in the next patch. Here's patch v4 addressing the above comments. regards, Ajin Cherian Fujitsu Australia --000000000000355f66064a9d0d2b Content-Type: application/octet-stream; name="v4-0001-Support-automatic-sequence-replication.patch" Content-Disposition: attachment; filename="v4-0001-Support-automatic-sequence-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlj947220 RnJvbSBkYjA1M2M1ZTNlNmE5NzM4ZjMyZDBmMzIyMzI4MmRkM2QxMjhiYzhhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGl0c2FqaW5AZ21haWwuY29tPgpEYXRl OiBUaHUsIDEyIEZlYiAyMDI2IDIwOjE2OjE2ICsxMTAwClN1YmplY3Q6IFtQQVRDSCB2NF0gU3Vw cG9ydCBhdXRvbWF0aWMgc2VxdWVuY2UgcmVwbGljYXRpb24uCgpMb2dpY2FsIHJlcGxpY2F0aW9u IHNlcXVlbmNlcyBjYW4gZHJpZnQgYmV0d2VlbiBwdWJsaXNoZXIgYW5kCnN1YnNjcmliZXIgYXMg dmFsdWVzIGFyZSBjb25zdW1lZCBpbmRlcGVuZGVudGx5IG9uIGVhY2ggbm9kZS4KUHJldmlvdXNs eSwgdGhlIHNlcXVlbmNlIHN5bmMgd29ya2VyIGV4aXRlZCBhZnRlciB0aGUgaW5pdGlhbApzeW5j aHJvbml6YXRpb24sIGFsbG93aW5nIHNlcXVlbmNlcyB0byBkaXZlcmdlIG92ZXIgdGltZS4KClRo aXMgY2hhbmdlIGtlZXBzIHRoZSBzZXF1ZW5jZSBzeW5jIHdvcmtlciBydW5uaW5nIGNvbnRpbnVv dXNseQpzbyBpdCBjYW4gbW9uaXRvciBzZXF1ZW5jZXMgYW5kIHJlc3luY2hyb25pemUgdGhlbSB3 aGVuIGRyaWZ0CmlzIGRldGVjdGVkLiBUaGUgd29ya2VyIHVzZXMgYW4gYWRhcHRpdmUgc2xlZXAg aW50ZXJ2YWw6Cml0IHN0YXJ0cyBhdCAyIHNlY29uZHMsIGRvdWJsZXMgdXAgdG8gYSBtYXhpbXVt IG9mIDMwIHNlY29uZHMKd2hlbiBubyBkcmlmdCBpcyBvYnNlcnZlZCwgYW5kIHJlc2V0cyB0byB0 aGUgbWluaW11bSBpbnRlcnZhbApvbmNlIGRyaWZ0IGlzIGZvdW5kLgoKU2luY2Ugc3luY2hyb25p emF0aW9uIGlzIG5vdyBjb250aW51b3VzLApBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0gg U0VRVUVOQ0VTIGlzIG5vIGxvbmdlciBuZWVkZWQKYW5kIGhhcyBiZWVuIHJlbW92ZWQuCgpTZXF1 ZW5jZXMgcmVtYWluIGluIHRoZSBSRUFEWSBzdGF0ZSBkdXJpbmcgY29udGludW91cwpzeW5jaHJv bml6YXRpb24uCgpBdXRob3I6IEFqaW4gQ2hlcmlhbiBpdHNhamluQGdtYWlsLmNvbQotLS0KIGRv Yy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogZG9j L3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbCAgICAgICAgIHwgIDU2ICstLS0KIGRv Yy9zcmMvc2dtbC9yZWYvYWx0ZXJfc3Vic2NyaXB0aW9uLnNnbWwgICAgICB8ICAzMCAtLQogc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgICAgICAgICAgIHwgIDI3ICsrCiBzcmMv YmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgICAgICAgfCAgNjUgLS0tLQogc3Jj L2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAgICAgICAgICAgICAgIHwgICA5IC0KIC4uLi9y ZXBsaWNhdGlvbi9sb2dpY2FsL3NlcXVlbmNlc3luYy5jICAgICAgICB8IDI5NCArKysrKysrKysr KysrLS0tLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc3luY3V0aWxzLmMgICB8 ICA0OCArKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICB8 ICAgMyArCiBzcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMgICAgICAgICAgICAgICAgfCAg IDQgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICAgICAgfCAgIDEg LQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI2X3N0YXRzLnBsICAgICAgICAgIHwgICAyICsK IHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzNl9zZXF1ZW5jZXMucGwgICAgICB8ICA3MSArLS0t LQogMTQgZmlsZXMgY2hhbmdlZCwgMjk0IGluc2VydGlvbnMoKyksIDMyMyBkZWxldGlvbnMoLSkK IG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9zZXF1ZW5jZXN5bmMuYwoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5z Z21sIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKaW5kZXggMzMyMTkzNTY1ZTIuLmVjNTFh ODdjMjUzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvY2F0YWxvZ3Muc2dtbApAQCAtODI2MSwxMSArODI2MSw5IEBAIFNDUkFNLVNIQS0y NTYkPHJlcGxhY2VhYmxlPiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJl cGxhY2VhYmxlPiZsCiAgIDxwYXJhPgogICAgVGhpcyBjYXRhbG9nIGNvbnRhaW5zIHRhYmxlcyBh bmQgc2VxdWVuY2VzIGtub3duIHRvIHRoZSBzdWJzY3JpcHRpb24KICAgIGFmdGVyIHJ1bm5pbmc6 Ci0gICA8bGluayBsaW5rZW5kPSJzcWwtY3JlYXRlc3Vic2NyaXB0aW9uIj48Y29tbWFuZD5DUkVB VEUgU1VCU0NSSVBUSU9OPC9jb21tYW5kPjwvbGluaz4sCisgICA8bGluayBsaW5rZW5kPSJzcWwt Y3JlYXRlc3Vic2NyaXB0aW9uIj48Y29tbWFuZD5DUkVBVEUgU1VCU0NSSVBUSU9OPC9jb21tYW5k PjwvbGluaz4sIG9yCiAgICA8bGluayBsaW5rZW5kPSJzcWwtYWx0ZXJzdWJzY3JpcHRpb24tcGFy YW1zLXJlZnJlc2gtcHVibGljYXRpb24iPgotICAgPGNvbW1hbmQ+QUxURVIgU1VCU0NSSVBUSU9O IC4uLiBSRUZSRVNIIFBVQkxJQ0FUSU9OPC9jb21tYW5kPjwvbGluaz4sIG9yCi0gICA8bGluayBs aW5rZW5kPSJzcWwtYWx0ZXJzdWJzY3JpcHRpb24tcGFyYW1zLXJlZnJlc2gtc2VxdWVuY2VzIj4K LSAgIDxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBTRVFVRU5DRVM8L2Nv bW1hbmQ+PC9saW5rPi4KKyAgIDxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVT SCBQVUJMSUNBVElPTjwvY29tbWFuZD48L2xpbms+LgogICA8L3BhcmE+CiAKICAgPHRhYmxlPgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbCBiL2RvYy9z cmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKaW5kZXggNTAyOGZlOWFmMDkuLmNmZTlj Mjc4OGM0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKQEAgLTE3NzUsMjAg KzE3NzUsMTQgQEAgUHVibGljYXRpb25zOgogICAgICAgdG8gc3luY2hyb25pemUgb25seSBuZXds eSBhZGRlZCBzZXF1ZW5jZXMuCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgotICAgIDxs aXN0aXRlbT4KLSAgICAgPHBhcmE+Ci0gICAgICB1c2UgPGxpbmsgbGlua2VuZD0ic3FsLWFsdGVy c3Vic2NyaXB0aW9uLXBhcmFtcy1yZWZyZXNoLXNlcXVlbmNlcyI+Ci0gICAgICA8Y29tbWFuZD5B TFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggU0VRVUVOQ0VTPC9jb21tYW5kPjwvbGluaz4K LSAgICAgIHRvIHJlLXN5bmNocm9uaXplIGFsbCBzZXF1ZW5jZXMgY3VycmVudGx5IGtub3duIHRv IHRoZSBzdWJzY3JpcHRpb24uCi0gICAgIDwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgogICAgPC9p dGVtaXplZGxpc3Q+CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KICAgIEEgPGZpcnN0dGVybT5zZXF1 ZW5jZSBzeW5jaHJvbml6YXRpb24gd29ya2VyPC9maXJzdHRlcm0+IHdpbGwgYmUgc3RhcnRlZAot ICAgYWZ0ZXIgZXhlY3V0aW5nIGFueSBvZiB0aGUgYWJvdmUgc3Vic2NyaWJlciBjb21tYW5kcywg YW5kIHdpbGwgZXhpdCBvbmNlIHRoZQotICAgc2VxdWVuY2VzIGFyZSBzeW5jaHJvbml6ZWQuCisg ICBhZnRlciBleGVjdXRpbmcgYW55IG9mIHRoZSBhYm92ZSBzdWJzY3JpYmVyIGNvbW1hbmRzLiBU aGUgd29ya2VyIHdpbGwKKyAgIHJlbWFpbiBydW5uaW5nIGZvciB0aGUgbGlmZSBvZiB0aGUgc3Vi c2NyaXB0aW9uLCBwZXJpb2RpY2FsbHkKKyAgIHN5bmNocm9uaXppbmcgYWxsIHB1Ymxpc2hlZCBz ZXF1ZW5jZXMuCiAgIDwvcGFyYT4KICAgPHBhcmE+CiAgICBUaGUgYWJpbGl0eSB0byBsYXVuY2gg YSBzZXF1ZW5jZSBzeW5jaHJvbml6YXRpb24gd29ya2VyIGlzIGxpbWl0ZWQgYnkgdGhlCkBAIC0x ODE1LDIxICsxODA5LDcgQEAgUHVibGljYXRpb25zOgogICA8L3NlY3QyPgogCiAgIDxzZWN0MiBp ZD0ic2VxdWVuY2VzLW91dC1vZi1zeW5jIj4KLSAgIDx0aXRsZT5SZWZyZXNoaW5nIE91dC1vZi1T eW5jIFNlcXVlbmNlczwvdGl0bGU+Ci0gICA8cGFyYT4KLSAgICBTdWJzY3JpYmVyIHNlcXVlbmNl IHZhbHVlcyB3aWxsIGJlY29tZSBvdXQgb2Ygc3luYyBhcyB0aGUgcHVibGlzaGVyCi0gICAgYWR2 YW5jZXMgdGhlbS4KLSAgIDwvcGFyYT4KLSAgIDxwYXJhPgotICAgIFRvIGRldGVjdCB0aGlzLCBj b21wYXJlIHRoZQotICAgIDxsaW5rIGxpbmtlbmQ9ImNhdGFsb2ctcGctc3Vic2NyaXB0aW9uLXJl bCI+cGdfc3Vic2NyaXB0aW9uX3JlbDwvbGluaz4uPHN0cnVjdGZpZWxkPnNyc3VibHNuPC9zdHJ1 Y3RmaWVsZD4KLSAgICBvbiB0aGUgc3Vic2NyaWJlciB3aXRoIHRoZSA8c3RydWN0ZmllbGQ+cGFn ZV9sc248L3N0cnVjdGZpZWxkPiBvYnRhaW5lZAotICAgIGZyb20gdGhlIDxsaW5rIGxpbmtlbmQ9 ImZ1bmMtcGctZ2V0LXNlcXVlbmNlLWRhdGEiPjxmdW5jdGlvbj5wZ19nZXRfc2VxdWVuY2VfZGF0 YTwvZnVuY3Rpb24+PC9saW5rPgotICAgIGZ1bmN0aW9uIGZvciB0aGUgc2VxdWVuY2Ugb24gdGhl IHB1Ymxpc2hlci4gVGhlbiBydW4KLSAgICA8bGluayBsaW5rZW5kPSJzcWwtYWx0ZXJzdWJzY3Jp cHRpb24tcGFyYW1zLXJlZnJlc2gtc2VxdWVuY2VzIj4KLSAgICA8Y29tbWFuZD5BTFRFUiBTVUJT Q1JJUFRJT04gLi4uIFJFRlJFU0ggU0VRVUVOQ0VTPC9jb21tYW5kPjwvbGluaz4gdG8KLSAgICBy ZS1zeW5jaHJvbml6ZSBpZiBuZWNlc3NhcnkuCi0gICA8L3BhcmE+CisgICA8dGl0bGU+T3V0LW9m LVN5bmMgU2VxdWVuY2VzPC90aXRsZT4KICAgIDx3YXJuaW5nPgogICAgIDxwYXJhPgogICAgICBF YWNoIHNlcXVlbmNlIGNhY2hlcyBhIGJsb2NrIG9mIHZhbHVlcyAodHlwaWNhbGx5IDMyKSBpbiBt ZW1vcnkgYmVmb3JlCkBAIC0xOTYxLDE2ICsxOTQxLDYgQEAgUHVibGljYXRpb25zOgogLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQogICAgICAgICA2MTAgfCB0ICAgICAgICAg fCAwLzAxN0NFREY4CiAoMSByb3cpCi08L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgPHBh cmE+Ci0gICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc2VxdWVuY2UgcGFnZSBMU05zIG9u IHRoZSBwdWJsaXNoZXIgYW5kIHRoZQotICAgIHNlcXVlbmNlIHBhZ2UgTFNOcyBvbiB0aGUgc3Vi c2NyaWJlciBpbmRpY2F0ZXMgdGhhdCB0aGUgc2VxdWVuY2VzIGFyZSBvdXQKLSAgICBvZiBzeW5j LiBSZS1zeW5jaHJvbml6ZSBhbGwgc2VxdWVuY2VzIGtub3duIHRvIHRoZSBzdWJzY3JpYmVyIHVz aW5nCi0gICAgPGxpbmsgbGlua2VuZD0ic3FsLWFsdGVyc3Vic2NyaXB0aW9uLXBhcmFtcy1yZWZy ZXNoLXNlcXVlbmNlcyI+Ci0gICAgPGNvbW1hbmQ+QUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZS RVNIIFNFUVVFTkNFUzwvY29tbWFuZD48L2xpbms+LgotPHByb2dyYW1saXN0aW5nPgotLyogc3Vi ICMgKi8gQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgUkVGUkVTSCBTRVFVRU5DRVM7CiA8L3Byb2dy YW1saXN0aW5nPjwvcGFyYT4KIAogICAgPHBhcmE+CkBAIC0yMzMzLDI0ICsyMzAzLDYgQEAgQ09O VEVYVDogIHByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiAicGdf MTYzOTUiIGR1cmluZyAiSU5TRVIKICAgICA8L3BhcmE+CiAgICA8L2xpc3RpdGVtPgogCi0gICA8 bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgIEluY3JlbWVudGFsIHNlcXVlbmNlIGNoYW5nZXMg YXJlIG5vdCByZXBsaWNhdGVkLiAgQWx0aG91Z2ggdGhlIGRhdGEgaW4KLSAgICAgc2VyaWFsIG9y IGlkZW50aXR5IGNvbHVtbnMgYmFja2VkIGJ5IHNlcXVlbmNlcyB3aWxsIGJlIHJlcGxpY2F0ZWQg YXMgcGFydAotICAgICBvZiB0aGUgdGFibGUsIHRoZSBzZXF1ZW5jZXMgdGhlbXNlbHZlcyBkbyBu b3QgcmVwbGljYXRlIG9uZ29pbmcgY2hhbmdlcy4KLSAgICAgT24gdGhlIHN1YnNjcmliZXIsIGEg c2VxdWVuY2Ugd2lsbCByZXRhaW4gdGhlIGxhc3QgdmFsdWUgaXQgc3luY2hyb25pemVkCi0gICAg IGZyb20gdGhlIHB1Ymxpc2hlci4gSWYgdGhlIHN1YnNjcmliZXIgaXMgdXNlZCBhcyBhIHJlYWQt b25seSBkYXRhYmFzZSwKLSAgICAgdGhlbiB0aGlzIHNob3VsZCB0eXBpY2FsbHkgbm90IGJlIGEg cHJvYmxlbS4gIElmLCBob3dldmVyLCBzb21lIGtpbmQgb2YKLSAgICAgc3dpdGNob3ZlciBvciBm YWlsb3ZlciB0byB0aGUgc3Vic2NyaWJlciBkYXRhYmFzZSBpcyBpbnRlbmRlZCwgdGhlbiB0aGUK LSAgICAgc2VxdWVuY2VzIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZCB0byB0aGUgbGF0ZXN0IHZh bHVlcywgZWl0aGVyIGJ5Ci0gICAgIGV4ZWN1dGluZyA8bGluayBsaW5rZW5kPSJzcWwtYWx0ZXJz dWJzY3JpcHRpb24tcGFyYW1zLXJlZnJlc2gtc2VxdWVuY2VzIj4KLSAgICAgPGNvbW1hbmQ+QUxU RVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFNFUVVFTkNFUzwvY29tbWFuZD48L2xpbms+Ci0g ICAgIG9yIGJ5IGNvcHlpbmcgdGhlIGN1cnJlbnQgZGF0YSBmcm9tIHRoZSBwdWJsaXNoZXIgKHBl cmhhcHMgdXNpbmcKLSAgICAgPGNvbW1hbmQ+cGdfZHVtcDwvY29tbWFuZD4pIG9yIGJ5IGRldGVy bWluaW5nIGEgc3VmZmljaWVudGx5IGhpZ2ggdmFsdWUKLSAgICAgZnJvbSB0aGUgdGFibGVzIHRo ZW1zZWx2ZXMuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQogICAgPGxpc3RpdGVtPgog ICAgIDxwYXJhPgogICAgICBSZXBsaWNhdGlvbiBvZiA8Y29tbWFuZD5UUlVOQ0FURTwvY29tbWFu ZD4gY29tbWFuZHMgaXMgc3VwcG9ydGVkLCBidXQKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9y ZWYvYWx0ZXJfc3Vic2NyaXB0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3N1YnNj cmlwdGlvbi5zZ21sCmluZGV4IDI3YzA2NDM5ZjRmLi5jMGZkNDI2ZDcxMiAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9zdWJzY3JpcHRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvcmVmL2FsdGVyX3N1YnNjcmlwdGlvbi5zZ21sCkBAIC0yNiw3ICsyNiw2IEBAIEFMVEVSIFNV QlNDUklQVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFi bGU+IFNFVCBQVUJMSUNBCiBBTFRFUiBTVUJTQ1JJUFRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBBREQgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnB1YmxpY2F0aW9uX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5d IFsgV0lUSCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9vcHRp b248L3JlcGxhY2VhYmxlPiBbPSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dmFsdWU8 L3JlcGxhY2VhYmxlPl0gWywgLi4uIF0gKSBdCiBBTFRFUiBTVUJTQ1JJUFRJT04gPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBEUk9QIFBVQkxJQ0FUSU9O IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9uYW1lPC9yZXBsYWNl YWJsZT4gWywgLi4uXSBbIFdJVEggKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVi bGljYXRpb25fb3B0aW9uPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPnZhbHVlPC9yZXBsYWNlYWJsZT5dIFssIC4uLiBdICkgXQogQUxURVIgU1VCU0NSSVBU SU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gUkVG UkVTSCBQVUJMSUNBVElPTiBbIFdJVEggKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ cmVmcmVzaF9vcHRpb248L3JlcGxhY2VhYmxlPiBbPSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+dmFsdWU8L3JlcGxhY2VhYmxlPl0gWywgLi4uIF0gKSBdCi1BTFRFUiBTVUJTQ1JJUFRJ T04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBSRUZS RVNIIFNFUVVFTkNFUwogQUxURVIgU1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gRU5BQkxFCiBBTFRFUiBTVUJTQ1JJUFRJT04gPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBESVNBQkxFCiBB TFRFUiBTVUJTQ1JJUFRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3Jl cGxhY2VhYmxlPiBTRVQgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c3Vic2NyaXB0 aW9uX3BhcmFtZXRlcjwvcmVwbGFjZWFibGU+IFs9IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj52YWx1ZTwvcmVwbGFjZWFibGU+XSBbLCAuLi4gXSApCkBAIC0xOTAsMTEgKzE4OSw2IEBA IEFMVEVSIFNVQlNDUklQVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwv cmVwbGFjZWFibGU+IFJFTkFNRSBUTyA8CiAgICAgICAgICAgUHJldmlvdXNseSBzdWJzY3JpYmVk IHRhYmxlcyBhcmUgbm90IGNvcGllZCwgZXZlbiBpZiBhIHRhYmxlJ3Mgcm93CiAgICAgICAgICAg ZmlsdGVyIDxsaXRlcmFsPldIRVJFPC9saXRlcmFsPiBjbGF1c2UgaGFzIHNpbmNlIGJlZW4gbW9k aWZpZWQuCiAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICBQcmV2 aW91c2x5IHN1YnNjcmliZWQgc2VxdWVuY2VzIGFyZSBub3QgcmUtc3luY2hyb25pemVkLiBUbyBk byB0aGF0LAotICAgICAgICAgIHVzZSA8bGluayBsaW5rZW5kPSJzcWwtYWx0ZXJzdWJzY3JpcHRp b24tcGFyYW1zLXJlZnJlc2gtc2VxdWVuY2VzIj4KLSAgICAgICAgICA8Y29tbWFuZD5BTFRFUiBT VUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggU0VRVUVOQ0VTPC9jb21tYW5kPjwvbGluaz4uCi0gICAg ICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICBTZWUgPHhyZWYgbGlua2Vu ZD0ic2VxdWVuY2UtZGVmaW5pdGlvbi1taXNtYXRjaGVzIi8+IGZvciByZWNvbW1lbmRhdGlvbnMg b24gaG93CiAgICAgICAgICAgdG8gaGFuZGxlIGFueSB3YXJuaW5ncyBhYm91dCBzZXF1ZW5jZSBk ZWZpbml0aW9uIGRpZmZlcmVuY2VzIGJldHdlZW4KQEAgLTIxOSwzMCArMjEzLDYgQEAgQUxURVIg U1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNl YWJsZT4gUkVOQU1FIFRPIDwKICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAK LSAgIDx2YXJsaXN0ZW50cnkgaWQ9InNxbC1hbHRlcnN1YnNjcmlwdGlvbi1wYXJhbXMtcmVmcmVz aC1zZXF1ZW5jZXMiPgotICAgIDx0ZXJtPjxsaXRlcmFsPlJFRlJFU0ggU0VRVUVOQ0VTPC9saXRl cmFsPjwvdGVybT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgIDxwYXJhPgotICAgICAgUmUtc3luY2hy b25pemUgc2VxdWVuY2UgZGF0YSB3aXRoIHRoZSBwdWJsaXNoZXIuIFVubGlrZQotICAgICAgPGxp bmsgbGlua2VuZD0ic3FsLWFsdGVyc3Vic2NyaXB0aW9uLXBhcmFtcy1yZWZyZXNoLXB1YmxpY2F0 aW9uIj4KLSAgICAgIDxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJM SUNBVElPTjwvY29tbWFuZD48L2xpbms+IHdoaWNoCi0gICAgICBvbmx5IGhhcyB0aGUgYWJpbGl0 eSB0byBzeW5jaHJvbml6ZSBuZXdseSBhZGRlZCBzZXF1ZW5jZXMsCi0gICAgICA8bGl0ZXJhbD5S RUZSRVNIIFNFUVVFTkNFUzwvbGl0ZXJhbD4gd2lsbCByZS1zeW5jaHJvbml6ZSB0aGUgc2VxdWVu Y2UKLSAgICAgIGRhdGEgZm9yIGFsbCBjdXJyZW50bHkgc3Vic2NyaWJlZCBzZXF1ZW5jZXMuIEl0 IGRvZXMgbm90IGFkZCBvciByZW1vdmUKLSAgICAgIHNlcXVlbmNlcyBmcm9tIHRoZSBzdWJzY3Jp cHRpb24gdG8gbWF0Y2ggdGhlIHB1YmxpY2F0aW9uLgotICAgICA8L3BhcmE+Ci0gICAgIDxwYXJh PgotICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9InNlcXVlbmNlLWRlZmluaXRpb24tbWlzbWF0Y2hl cyIvPiBmb3IKLSAgICAgIHJlY29tbWVuZGF0aW9ucyBvbiBob3cgdG8gaGFuZGxlIGFueSB3YXJu aW5ncyBhYm91dCBzZXF1ZW5jZSBkZWZpbml0aW9uCi0gICAgICBkaWZmZXJlbmNlcyBiZXR3ZWVu IHRoZSBwdWJsaXNoZXIgYW5kIHRoZSBzdWJzY3JpYmVyLgotICAgICA8L3BhcmE+Ci0gICAgIDxw YXJhPgotICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9InNlcXVlbmNlcy1vdXQtb2Ytc3luYyIvPiBm b3IgcmVjb21tZW5kYXRpb25zIG9uIGhvdyB0bwotICAgICAgaWRlbnRpZnkgYW5kIGhhbmRsZSBv dXQtb2Ytc3luYyBzZXF1ZW5jZXMuCi0gICAgIDwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICAg PC92YXJsaXN0ZW50cnk+Ci0KICAgIDx2YXJsaXN0ZW50cnkgaWQ9InNxbC1hbHRlcnN1YnNjcmlw dGlvbi1wYXJhbXMtZW5hYmxlIj4KICAgICA8dGVybT48bGl0ZXJhbD5FTkFCTEU8L2xpdGVyYWw+ PC90ZXJtPgogICAgIDxsaXN0aXRlbT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3NlcXVlbmNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4IGUxYjgw OGJiYjYwLi4zY2EzODJlODliOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2Vx dWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBAIC05MjksNiAr OTI5LDMzIEBAIGxhc3R2YWwoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fSU5UNjQocmVz dWx0KTsKIH0KIAorLyoKKyAqIFJlYWQgdGhlIGN1cnJlbnQgc2VxdWVuY2UgdmFsdWVzIChsYXN0 X3ZhbHVlIGFuZCBpc19jYWxsZWQpCisgKgorICogVGhpcyBpcyBhIHJlYWQtb25seSBvcGVyYXRp b24gdGhhdCBhY3F1aXJlcyBBY2Nlc3NTaGFyZUxvY2sgb24gdGhlIHNlcXVlbmNlLgorICogVXNl ZCBieSBsb2dpY2FsIHJlcGxpY2F0aW9uIHNlcXVlbmNlIHN5bmNocm9uaXphdGlvbiB0byBkZXRl Y3QgZHJpZnQuCisgKi8KK3ZvaWQKK0dldFNlcXVlbmNlKFJlbGF0aW9uIHNlcXJlbCwgaW50NjQg Kmxhc3RfdmFsdWUsIGJvb2wgKmlzX2NhbGxlZCkKK3sKKwlCdWZmZXIJCWJ1ZjsKKwlIZWFwVHVw bGVEYXRhIHNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXE7CisKKwkvKiBDb25m aXJtIHRoYXQgdGhlIHJlbGF0aW9uIGlzIGEgc2VxdWVuY2UgKi8KKwlBc3NlcnQoc2VxcmVsLT5y ZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9TRVFVRU5DRSk7CisKKwkvKiBSZWFkIHRoZSBzZXF1 ZW5jZSB0dXBsZSAqLworCXNlcSA9IHJlYWRfc2VxX3R1cGxlKHNlcXJlbCwgJmJ1ZiwgJnNlcXR1 cGxlKTsKKworCS8qIEV4dHJhY3QgdGhlIHZhbHVlcyAqLworCSpsYXN0X3ZhbHVlID0gc2VxLT5s YXN0X3ZhbHVlOworCSppc19jYWxsZWQgPSBzZXEtPmlzX2NhbGxlZDsKKworCS8qIFJlbGVhc2Ug YnVmZmVyICovCisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworfQorCiAvKgogICogTWFpbiBp bnRlcm5hbCBwcm9jZWR1cmUgdGhhdCBoYW5kbGVzIDIgJiAzIGFyZyBmb3JtcyBvZiBTRVRWQUwu CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCmluZGV4IDBiM2M4NDk5 YjQ5Li5jMWI5MDNjNTkwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2Ny aXB0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMu YwpAQCAtMTE4Myw1OCArMTE4Myw2IEBAIEFsdGVyU3Vic2NyaXB0aW9uX3JlZnJlc2goU3Vic2Ny aXB0aW9uICpzdWIsIGJvb2wgY29weV9kYXRhLAogCQl0YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7 CiB9CiAKLS8qCi0gKiBNYXJrcyBhbGwgc2VxdWVuY2VzIHdpdGggSU5JVCBzdGF0ZS4KLSAqLwot c3RhdGljIHZvaWQKLUFsdGVyU3Vic2NyaXB0aW9uX3JlZnJlc2hfc2VxKFN1YnNjcmlwdGlvbiAq c3ViKQotewotCWNoYXIJICAgKmVyciA9IE5VTEw7Ci0JV2FsUmVjZWl2ZXJDb25uICp3cmNvbm47 Ci0JYm9vbAkJbXVzdF91c2VfcGFzc3dvcmQ7Ci0KLQkvKiBMb2FkIHRoZSBsaWJyYXJ5IHByb3Zp ZGluZyB1cyBsaWJwcSBjYWxscy4gKi8KLQlsb2FkX2ZpbGUoImxpYnBxd2FscmVjZWl2ZXIiLCBm YWxzZSk7Ci0KLQkvKiBUcnkgdG8gY29ubmVjdCB0byB0aGUgcHVibGlzaGVyLiAqLwotCW11c3Rf dXNlX3Bhc3N3b3JkID0gc3ViLT5wYXNzd29yZHJlcXVpcmVkICYmICFzdWItPm93bmVyc3VwZXJ1 c2VyOwotCXdyY29ubiA9IHdhbHJjdl9jb25uZWN0KHN1Yi0+Y29ubmluZm8sIHRydWUsIHRydWUs IG11c3RfdXNlX3Bhc3N3b3JkLAotCQkJCQkJCXN1Yi0+bmFtZSwgJmVycik7Ci0JaWYgKCF3cmNv bm4pCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJ TFVSRSksCi0JCQkJZXJybXNnKCJzdWJzY3JpcHRpb24gXCIlc1wiIGNvdWxkIG5vdCBjb25uZWN0 IHRvIHRoZSBwdWJsaXNoZXI6ICVzIiwKLQkJCQkJICAgc3ViLT5uYW1lLCBlcnIpKTsKLQotCVBH X1RSWSgpOwotCXsKLQkJTGlzdAkgICAqc3VicmVsX3N0YXRlczsKLQotCQljaGVja19wdWJsaWNh dGlvbnNfb3JpZ2luX3NlcXVlbmNlcyh3cmNvbm4sIHN1Yi0+cHVibGljYXRpb25zLCB0cnVlLAot CQkJCQkJCQkJCQlzdWItPm9yaWdpbiwgTlVMTCwgMCwgc3ViLT5uYW1lKTsKLQotCQkvKiBHZXQg bG9jYWwgc2VxdWVuY2UgbGlzdC4gKi8KLQkJc3VicmVsX3N0YXRlcyA9IEdldFN1YnNjcmlwdGlv blJlbGF0aW9ucyhzdWItPm9pZCwgZmFsc2UsIHRydWUsIGZhbHNlKTsKLQkJZm9yZWFjaF9wdHIo U3Vic2NyaXB0aW9uUmVsU3RhdGUsIHN1YnJlbCwgc3VicmVsX3N0YXRlcykKLQkJewotCQkJT2lk CQkJcmVsaWQgPSBzdWJyZWwtPnJlbGlkOwotCi0JCQlVcGRhdGVTdWJzY3JpcHRpb25SZWxTdGF0 ZShzdWItPm9pZCwgcmVsaWQsIFNVQlJFTF9TVEFURV9JTklULAotCQkJCQkJCQkJICAgSW52YWxp ZFhMb2dSZWNQdHIsIGZhbHNlKTsKLQkJCWVyZXBvcnQoREVCVUcxLAotCQkJCQllcnJtc2dfaW50 ZXJuYWwoInNlcXVlbmNlIFwiJXMuJXNcIiBvZiBzdWJzY3JpcHRpb24gXCIlc1wiIHNldCB0byBJ TklUIHN0YXRlIiwKLQkJCQkJCQkJCWdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFj ZShyZWxpZCkpLAotCQkJCQkJCQkJZ2V0X3JlbF9uYW1lKHJlbGlkKSwKLQkJCQkJCQkJCXN1Yi0+ bmFtZSkpOwotCQl9Ci0JfQotCVBHX0ZJTkFMTFkoKTsKLQl7Ci0JCXdhbHJjdl9kaXNjb25uZWN0 KHdyY29ubik7Ci0JfQotCVBHX0VORF9UUlkoKTsKLX0KLQogLyoKICAqIENvbW1vbiBjaGVja3Mg Zm9yIGFsdGVyaW5nIGZhaWxvdmVyLCB0d29fcGhhc2UsIGFuZCByZXRhaW5fZGVhZF90dXBsZXMK ICAqIG9wdGlvbnMuCkBAIC0xODcxLDE5ICsxODE5LDYgQEAgQWx0ZXJTdWJzY3JpcHRpb24oUGFy c2VTdGF0ZSAqcHN0YXRlLCBBbHRlclN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJCQkJYnJlYWs7 CiAJCQl9CiAKLQkJY2FzZSBBTFRFUl9TVUJTQ1JJUFRJT05fUkVGUkVTSF9TRVFVRU5DRVM6Ci0J CQl7Ci0JCQkJaWYgKCFzdWItPmVuYWJsZWQpCi0JCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJ ZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKLQkJCQkJ CQllcnJtc2coIiVzIGlzIG5vdCBhbGxvd2VkIGZvciBkaXNhYmxlZCBzdWJzY3JpcHRpb25zIiwK LQkJCQkJCQkJICAgIkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBTRVFVRU5DRVMiKSk7 Ci0KLQkJCQlBbHRlclN1YnNjcmlwdGlvbl9yZWZyZXNoX3NlcShzdWIpOwotCi0JCQkJYnJlYWs7 Ci0JCQl9Ci0KIAkJY2FzZSBBTFRFUl9TVUJTQ1JJUFRJT05fU0tJUDoKIAkJCXsKIAkJCQlwYXJz ZV9zdWJzY3JpcHRpb25fb3B0aW9ucyhwc3RhdGUsIHN0bXQtPm9wdGlvbnMsIFNVQk9QVF9MU04s ICZvcHRzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFj a2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IDcxM2VlNWMxMGEyLi45ZDM2MjEyNzYzMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIv Z3JhbS55CkBAIC0xMTA2OSwxNSArMTEwNjksNiBAQCBBbHRlclN1YnNjcmlwdGlvblN0bXQ6CiAJ CQkJCW4tPm9wdGlvbnMgPSAkNjsKIAkJCQkJJCQgPSAoTm9kZSAqKSBuOwogCQkJCX0KLQkJCXwg QUxURVIgU1VCU0NSSVBUSU9OIG5hbWUgUkVGUkVTSCBTRVFVRU5DRVMKLQkJCQl7Ci0JCQkJCUFs dGVyU3Vic2NyaXB0aW9uU3RtdCAqbiA9Ci0JCQkJCQltYWtlTm9kZShBbHRlclN1YnNjcmlwdGlv blN0bXQpOwotCi0JCQkJCW4tPmtpbmQgPSBBTFRFUl9TVUJTQ1JJUFRJT05fUkVGUkVTSF9TRVFV RU5DRVM7Ci0JCQkJCW4tPnN1Ym5hbWUgPSAkMzsKLQkJCQkJJCQgPSAoTm9kZSAqKSBuOwotCQkJ CX0KIAkJCXwgQUxURVIgU1VCU0NSSVBUSU9OIG5hbWUgQUREX1AgUFVCTElDQVRJT04gbmFtZV9s aXN0IG9wdF9kZWZpbml0aW9uCiAJCQkJewogCQkJCQlBbHRlclN1YnNjcmlwdGlvblN0bXQgKm4g PQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zZXF1ZW5jZXN5 bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2VxdWVuY2VzeW5jLmMKb2xk IG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAxNjVmOTA5YjNiYS4uZTRjMDhhYzEw NjMKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zZXF1ZW5jZXN5bmMuYwor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NlcXVlbmNlc3luYy5jCkBAIC0x OSwxMCArMTksNiBAQAogICogQ1JFQVRFIFNVQlNDUklQVElPTgogICogQUxURVIgU1VCU0NSSVBU SU9OIC4uLiBSRUZSRVNIIFBVQkxJQ0FUSU9OCiAgKgotICogRXhlY3V0aW5nIHRoZSBmb2xsb3dp bmcgY29tbWFuZCByZXNldHMgYWxsIHNlcXVlbmNlcyBpbiB0aGUgc3Vic2NyaXB0aW9uIHRvCi0g KiBzdGF0ZSBJTklULCB0cmlnZ2VyaW5nIHJlLXN5bmNocm9uaXphdGlvbjoKLSAqIEFMVEVSIFNV QlNDUklQVElPTiAuLi4gUkVGUkVTSCBTRVFVRU5DRVMKLSAqCiAgKiBUaGUgYXBwbHkgd29ya2Vy IHBlcmlvZGljYWxseSBzY2FucyBwZ19zdWJzY3JpcHRpb25fcmVsIGZvciBzZXF1ZW5jZXMgaW4K ICAqIElOSVQgc3RhdGUuIFdoZW4gc3VjaCBzZXF1ZW5jZXMgYXJlIGZvdW5kLCBpdCBzcGF3bnMg YSBzZXF1ZW5jZXN5bmMgd29ya2VyCiAgKiB0byBoYW5kbGUgc3luY2hyb25pemF0aW9uLgpAQCAt MzYsOCArMzIsMjQgQEAKICAqIGxvY2FsIHN1YnNjcmliZXIsIGFuZCBmaW5hbGx5IG1hcmtzIGVh Y2ggc2VxdWVuY2UgYXMgUkVBRFkgdXBvbiBzdWNjZXNzZnVsCiAgKiBzeW5jaHJvbml6YXRpb24u CiAgKgorICogVGhlIHNlcXVlbmNlc3luYyB3b3JrZXIgdGhlbiBmZXRjaGVzIGFsbCBzZXF1ZW5j ZXMgdGhhdCBhcmUKKyAqIGluIHRoZSBSRUFEWSBzdGF0ZSwgcXVlcmllcyB0aGUgcHVibGlzaGVy IGZvciBjdXJyZW50IHNlcXVlbmNlIHZhbHVlcywgYW5kCisgKiB1cGRhdGVzIGFueSBzZXF1ZW5j ZXMgdGhhdCBoYXZlIGRyaWZ0ZWQgYW5kIHRoZW4gZ29lcyB0byBzbGVlcC4gVGhlIHNsZWVwCisg KiBpbnRlcnZhbCBzdGFydHMgYXMgU0VRU1lOQ19NSU5fU0xFRVBfTVMgYW5kIGRvdWJsZXMgYWZ0 ZXIgZWFjaCB3YWtlIGN5Y2xlCisgKiAodXAgdG8gU0VRU1lOQ19NQVhfU0xFRVBfTVMpLiBXaGVu IGRyaWZ0IGlzIGRldGVjdGVkLCB0aGUgaW50ZXJ2YWwgcmVzZXRzIHRvCisgKiB0aGUgbWluaW11 bSB0byBlbnN1cmUgdGltZWx5IHVwZGF0ZXMuCisgKgorICogQWZ0ZXIgQ1JFQVRFIFNVQlNDUklQ VElPTiwgc2VxdWVuY2VzIGJlZ2luIGluIHRoZSBJTklUIHN0YXRlLiBTZXF1ZW5jZXMKKyAqIGFk ZGVkIHRocm91Z2ggQUxURVIgU1VCU0NSSVBUSU9OLi4gUkVGUkVTSCBQVUJMSUNBVElPTiBhbHNv IHN0YXJ0IGluIHRoZSBJTklUCisgKiBzdGF0ZS4gQWxsIElOSVQgc2VxdWVuY2VzIGFyZSBzeW5j aHJvbml6ZWQgdW5jb25kaXRpb25hbGx5LCB0aGVuIHRyYW5zaXRpb24KKyAqIHRvIHRoZSBSRUFE WSBzdGF0ZS4gT25jZSBpbiB0aGUgUkVBRFkgc3RhdGUsIHNlcXVlbmNlcyBhcmUgY2hlY2tlZCBm b3IgZHJpZnQKKyAqIGZyb20gdGhlIHB1Ymxpc2hlciBhbmQgc3luY2hyb25pemVkIG9ubHkgd2hl biBkcmlmdCBpcyBkZXRlY3RlZC4KKyAqCiAgKiBTZXF1ZW5jZSBzdGF0ZSB0cmFuc2l0aW9ucyBm b2xsb3cgdGhpcyBwYXR0ZXJuOgotICogICBJTklUIC0+IFJFQURZCisgKiAgSU5JVCAtLT4gUkVB RFkgLT4tKworICogICAgICAgICAgICAgXiAgICAgIHwgKGNoZWNrL3N5bmNocm9ueml6ZSkKKyAq ICAgICAgICAgICAgIHwgICAgICB8CisgKiAgICAgICAgICAgICArLS08LS0tKwogICoKICAqIFRv IGF2b2lkIGNyZWF0aW5nIHRvbyBtYW55IHRyYW5zYWN0aW9ucywgdXAgdG8gTUFYX1NFUVVFTkNF U19TWU5DX1BFUl9CQVRDSAogICogc2VxdWVuY2VzIGFyZSBzeW5jaHJvbml6ZWQgcGVyIHRyYW5z YWN0aW9uLiBUaGUgbG9ja3Mgb24gdGhlIHNlcXVlbmNlCkBAIC03OCwxMCArOTAsMTUgQEAgdHlw ZWRlZiBlbnVtIENvcHlTZXFSZXN1bHQKIAlDT1BZU0VRX1NVQ0NFU1MsCiAJQ09QWVNFUV9NSVNN QVRDSCwKIAlDT1BZU0VRX0lOU1VGRklDSUVOVF9QRVJNLAotCUNPUFlTRVFfU0tJUFBFRAorCUNP UFlTRVFfU0tJUFBFRCwKKwlDT1BZU0VRX05PV09SSywKIH0gQ29weVNlcVJlc3VsdDsKIAotc3Rh dGljIExpc3QgKnNlcWluZm9zID0gTklMOworLyogU2xlZXAgaW50ZXJ2YWxzIGZvciBzeW5jICov CisjZGVmaW5lIFNFUVNZTkNfTUlOX1NMRUVQX01TIDIwMDAJCS8qIDIgc2Vjb25kcyAqLworI2Rl ZmluZSBTRVFTWU5DX01BWF9TTEVFUF9NUyAzMDAwMAkJLyogMzAgc2Vjb25kcyAqLworCitzdGF0 aWMgbG9uZyBzbGVlcF9tcyA9IFNFUVNZTkNfTUlOX1NMRUVQX01TOwogCiAvKgogICogQXBwbHkg d29ya2VyIGRldGVybWluZXMgaWYgc2VxdWVuY2Ugc3luY2hyb25pemF0aW9uIGlzIG5lZWRlZC4K QEAgLTE0NCw3ICsxNjEsNyBAQCBQcm9jZXNzU2VxdWVuY2VzRm9yU3luYyh2b2lkKQogICogZm9y IHRoZSBnaXZlbiBsaXN0IG9mIHNlcXVlbmNlIGluZGV4ZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1n ZXRfc2VxdWVuY2VzX3N0cmluZyhMaXN0ICpzZXFpbmRleGVzLCBTdHJpbmdJbmZvIGJ1ZikKK2dl dF9zZXF1ZW5jZXNfc3RyaW5nKExpc3QgKnNlcWluZGV4ZXMsIExpc3QgKnNlcWluZm9zLCBTdHJp bmdJbmZvIGJ1ZikKIHsKIAlyZXNldFN0cmluZ0luZm8oYnVmKTsKIAlmb3JlYWNoX2ludChzZXFp ZHgsIHNlcWluZGV4ZXMpCkBAIC0xNzEsNyArMTg4LDcgQEAgZ2V0X3NlcXVlbmNlc19zdHJpbmco TGlzdCAqc2VxaW5kZXhlcywgU3RyaW5nSW5mbyBidWYpCiAgKi8KIHN0YXRpYyB2b2lkCiByZXBv cnRfc2VxdWVuY2VfZXJyb3JzKExpc3QgKm1pc21hdGNoZWRfc2Vxc19pZHgsIExpc3QgKmluc3Vm ZnBlcm1fc2Vxc19pZHgsCi0JCQkJCSAgIExpc3QgKm1pc3Npbmdfc2Vxc19pZHgpCisJCQkJCSAg IExpc3QgKm1pc3Npbmdfc2Vxc19pZHgsIExpc3QgKnNlcWluZm9zKQogewogCVN0cmluZ0luZm8J c2Vxc3RyOwogCkBAIC0xODMsNyArMjAwLDcgQEAgcmVwb3J0X3NlcXVlbmNlX2Vycm9ycyhMaXN0 ICptaXNtYXRjaGVkX3NlcXNfaWR4LCBMaXN0ICppbnN1ZmZwZXJtX3NlcXNfaWR4LAogCiAJaWYg KG1pc21hdGNoZWRfc2Vxc19pZHgpCiAJewotCQlnZXRfc2VxdWVuY2VzX3N0cmluZyhtaXNtYXRj aGVkX3NlcXNfaWR4LCBzZXFzdHIpOworCQlnZXRfc2VxdWVuY2VzX3N0cmluZyhtaXNtYXRjaGVk X3NlcXNfaWR4LCBzZXFpbmZvcywgc2Vxc3RyKTsKIAkJZXJlcG9ydChXQVJOSU5HLAogCQkJCWVy cmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCiAJCQkJZXJy bXNnX3BsdXJhbCgibWlzbWF0Y2hlZCBvciByZW5hbWVkIHNlcXVlbmNlIG9uIHN1YnNjcmliZXIg KCVzKSIsCkBAIC0xOTQsNyArMjExLDcgQEAgcmVwb3J0X3NlcXVlbmNlX2Vycm9ycyhMaXN0ICpt aXNtYXRjaGVkX3NlcXNfaWR4LCBMaXN0ICppbnN1ZmZwZXJtX3NlcXNfaWR4LAogCiAJaWYgKGlu c3VmZnBlcm1fc2Vxc19pZHgpCiAJewotCQlnZXRfc2VxdWVuY2VzX3N0cmluZyhpbnN1ZmZwZXJt X3NlcXNfaWR4LCBzZXFzdHIpOworCQlnZXRfc2VxdWVuY2VzX3N0cmluZyhpbnN1ZmZwZXJtX3Nl cXNfaWR4LCBzZXFpbmZvcywgc2Vxc3RyKTsKIAkJZXJlcG9ydChXQVJOSU5HLAogCQkJCWVycmNv ZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCiAJCQkJZXJybXNn X3BsdXJhbCgiaW5zdWZmaWNpZW50IHByaXZpbGVnZXMgb24gc2VxdWVuY2UgKCVzKSIsCkBAIC0y MDUsNyArMjIyLDcgQEAgcmVwb3J0X3NlcXVlbmNlX2Vycm9ycyhMaXN0ICptaXNtYXRjaGVkX3Nl cXNfaWR4LCBMaXN0ICppbnN1ZmZwZXJtX3NlcXNfaWR4LAogCiAJaWYgKG1pc3Npbmdfc2Vxc19p ZHgpCiAJewotCQlnZXRfc2VxdWVuY2VzX3N0cmluZyhtaXNzaW5nX3NlcXNfaWR4LCBzZXFzdHIp OworCQlnZXRfc2VxdWVuY2VzX3N0cmluZyhtaXNzaW5nX3NlcXNfaWR4LCBzZXFpbmZvcywgc2Vx c3RyKTsKIAkJZXJlcG9ydChXQVJOSU5HLAogCQkJCWVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9U X0lOX1BSRVJFUVVJU0lURV9TVEFURSksCiAJCQkJZXJybXNnX3BsdXJhbCgibWlzc2luZyBzZXF1 ZW5jZSBvbiBwdWJsaXNoZXIgKCVzKSIsCkBAIC0yMjksNyArMjQ2LDggQEAgcmVwb3J0X3NlcXVl bmNlX2Vycm9ycyhMaXN0ICptaXNtYXRjaGVkX3NlcXNfaWR4LCBMaXN0ICppbnN1ZmZwZXJtX3Nl cXNfaWR4LAogICovCiBzdGF0aWMgQ29weVNlcVJlc3VsdAogZ2V0X2FuZF92YWxpZGF0ZV9zZXFf aW5mbyhUdXBsZVRhYmxlU2xvdCAqc2xvdCwgUmVsYXRpb24gKnNlcXVlbmNlX3JlbCwKLQkJCQkJ CSAgTG9naWNhbFJlcFNlcXVlbmNlSW5mbyAqKnNlcWluZm8sIGludCAqc2VxaWR4KQorCQkJCQkJ ICBMb2dpY2FsUmVwU2VxdWVuY2VJbmZvICoqc2VxaW5mbywgaW50ICpzZXFpZHgsCisJCQkJCQkg IExpc3QgKnNlcWluZm9zKQogewogCWJvb2wJCWlzbnVsbDsKIAlpbnQJCQljb2wgPSAwOwpAQCAt MzI1LDExICszNDMsMTIgQEAgZ2V0X2FuZF92YWxpZGF0ZV9zZXFfaW5mbyhUdXBsZVRhYmxlU2xv dCAqc2xvdCwgUmVsYXRpb24gKnNlcXVlbmNlX3JlbCwKIH0KIAogLyoKLSAqIEFwcGx5IHJlbW90 ZSBzZXF1ZW5jZSBzdGF0ZSB0byBsb2NhbCBzZXF1ZW5jZSBhbmQgbWFyayBpdCBhcwotICogc3lu Y2hyb25pemVkIChSRUFEWSkuCisgKiBBcHBseSByZW1vdGUgc2VxdWVuY2Ugc3RhdGUgdG8gbG9j YWwgc2VxdWVuY2UuIElmIHdlIGFyZSBkb2luZyB0aGlzCisgKiBmb3Igc2VxdWVuY2VzIGluIHRo ZSBJTklUIHN0YXRlLCBtb3ZlIHRoZW0gdG8gdGhlIFJFQURZIHN0YXRlIG9uY2UKKyAqIHN5bmNo cm9uaXplZC4KICAqLwogc3RhdGljIENvcHlTZXFSZXN1bHQKLWNvcHlfc2VxdWVuY2UoTG9naWNh bFJlcFNlcXVlbmNlSW5mbyAqc2VxaW5mbywgT2lkIHNlcW93bmVyKQorY29weV9zZXF1ZW5jZShM b2dpY2FsUmVwU2VxdWVuY2VJbmZvICpzZXFpbmZvLCBPaWQgc2Vxb3duZXIsIGNoYXIgcmVsc3Rh dGUpCiB7CiAJVXNlckNvbnRleHQgdWN4dDsKIAlBY2xSZXN1bHQJYWNscmVzdWx0OwpAQCAtMzY4 LDE5ICszODcsNDYgQEAgY29weV9zZXF1ZW5jZShMb2dpY2FsUmVwU2VxdWVuY2VJbmZvICpzZXFp bmZvLCBPaWQgc2Vxb3duZXIpCiAKIAkvKgogCSAqIFJlY29yZCB0aGUgcmVtb3RlIHNlcXVlbmNl J3MgTFNOIGluIHBnX3N1YnNjcmlwdGlvbl9yZWwgYW5kIG1hcmsgdGhlCi0JICogc2VxdWVuY2Ug YXMgUkVBRFkuCisJICogc2VxdWVuY2UgYXMgUkVBRFkgaWYgdXBkYXRpbmcgYSBzZXF1ZW5jZSB0 aGF0IGlzIGluIElOSVQgc3RhdGUuCiAJICovCi0JVXBkYXRlU3Vic2NyaXB0aW9uUmVsU3RhdGUo TXlTdWJzY3JpcHRpb24tPm9pZCwgc2Vxb2lkLCBTVUJSRUxfU1RBVEVfUkVBRFksCi0JCQkJCQkJ ICAgc2VxaW5mby0+cGFnZV9sc24sIGZhbHNlKTsKKwlpZiAocmVsc3RhdGUgPT0gU1VCUkVMX1NU QVRFX0lOSVQpCisJCVVwZGF0ZVN1YnNjcmlwdGlvblJlbFN0YXRlKE15U3Vic2NyaXB0aW9uLT5v aWQsIHNlcW9pZCwgU1VCUkVMX1NUQVRFX1JFQURZLAorCQkJCQkJCQkgICBzZXFpbmZvLT5wYWdl X2xzbiwgZmFsc2UpOwogCiAJcmV0dXJuIENPUFlTRVFfU1VDQ0VTUzsKIH0KIAorLyoKKyAqIGNo ZWNrX3NlcXVlbmNlX2RyaWZ0CisgKgorICogQ2hlY2sgaWYgdGhlIHJlbW90ZSBzZXF1ZW5jZSB2 YWx1ZXMgZGlmZmVyIGZyb20gdGhlIGxvY2FsIHNlcXVlbmNlLgorICogUmV0dXJucyB0cnVlL2Zh bHNlIGlmIGFueSBzZXF1ZW5jZXMgZHJpZnRlZC4KKyAqLworc3RhdGljIGJvb2wKK2NoZWNrX3Nl cXVlbmNlX2RyaWZ0KFJlbGF0aW9uIHNlcXVlbmNlX3JlbCwgTG9naWNhbFJlcFNlcXVlbmNlSW5m byAqc2VxaW5mbykKK3sKKwlpbnQ2NAkJbG9jYWxfbGFzdF92YWx1ZTsKKwlib29sCQlsb2NhbF9p c19jYWxsZWQ7CisKKwkvKiBHZXQgY3VycmVudCBsb2NhbCBzZXF1ZW5jZSBzdGF0ZSAqLworCUdl dFNlcXVlbmNlKHNlcXVlbmNlX3JlbCwgJmxvY2FsX2xhc3RfdmFsdWUsICZsb2NhbF9pc19jYWxs ZWQpOworCisJLyogQ2hlY2sgaWYgdmFsdWVzIGhhdmUgZHJpZnRlZCBhbmQgcmV0dXJuIGFjY29y ZGluZ2x5ICovCisJcmV0dXJuIChsb2NhbF9sYXN0X3ZhbHVlICE9IHNlcWluZm8tPmxhc3RfdmFs dWUgfHwKKwkJbG9jYWxfaXNfY2FsbGVkICE9IHNlcWluZm8tPmlzX2NhbGxlZCk7Cit9CisKIC8q CiAgKiBDb3B5IGV4aXN0aW5nIGRhdGEgb2Ygc2VxdWVuY2VzIGZyb20gdGhlIHB1Ymxpc2hlci4K KyAqCisgKiBJZiByZWxzdGF0ZSBpcyBTVUJSRUxfU1RBVEVfUkVBRFksIG9ubHkgc3luY2hyb25p emUgc2VxdWVuY2VzIHRoYXQKKyAqIGhhdmUgZHJpZnRlZCBmcm9tIHRoZWlyIHB1Ymxpc2hlciB2 YWx1ZXMuIE90aGVyd2lzZSwgc3luY2hyb25pemUKKyAqIGFsbCBzZXF1ZW5jZXMuCisgKgorICog UmV0dXJucyB0cnVlL2ZhbHNlIGlmIGFueSBzZXF1ZW5jZXMgd2VyZSBhY3R1YWxseSBjb3BpZWQu CiAgKi8KLXN0YXRpYyB2b2lkCi1jb3B5X3NlcXVlbmNlcyhXYWxSZWNlaXZlckNvbm4gKmNvbm4p CitzdGF0aWMgYm9vbAorY29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpjb25uLCBMaXN0 ICpzZXFpbmZvcywgY2hhciByZWxzdGF0ZSkKIHsKIAlpbnQJCQljdXJfYmF0Y2hfYmFzZV9pbmRl eCA9IDA7CiAJaW50CQkJbl9zZXFpbmZvcyA9IGxpc3RfbGVuZ3RoKHNlcWluZm9zKTsKQEAgLTM5 MCwxMyArNDM2LDEwIEBAIGNvcHlfc2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKIAlT dHJpbmdJbmZvCXNlcXN0ciA9IG1ha2VTdHJpbmdJbmZvKCk7CiAJU3RyaW5nSW5mbwljbWQgPSBt YWtlU3RyaW5nSW5mbygpOwogCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCWJvb2wJCXNlcXVlbmNl X2NvcGllZCA9IGZhbHNlOwogCiAjZGVmaW5lIE1BWF9TRVFVRU5DRVNfU1lOQ19QRVJfQkFUQ0gg MTAwCiAKLQllbG9nKERFQlVHMSwKLQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHNlcXVlbmNlIHN5 bmNocm9uaXphdGlvbiBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiAtIHRvdGFsIHVuc3luY2hyb25p emVkOiAlZCIsCi0JCSBNeVN1YnNjcmlwdGlvbi0+bmFtZSwgbl9zZXFpbmZvcyk7Ci0KIAl3aGls ZSAoY3VyX2JhdGNoX2Jhc2VfaW5kZXggPCBuX3NlcWluZm9zKQogCXsKIAkJT2lkCQkJc2VxUm93 W1JFTU9URV9TRVFfQ09MX0NPVU5UXSA9IHtJTlQ4T0lELCBJTlQ4T0lELApAQCAtNDA2LDYgKzQ0 OSw3IEBAIGNvcHlfc2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKIAkJaW50CQkJYmF0 Y2hfbWlzbWF0Y2hlZF9jb3VudCA9IDA7CiAJCWludAkJCWJhdGNoX3NraXBwZWRfY291bnQgPSAw OwogCQlpbnQJCQliYXRjaF9pbnN1ZmZwZXJtX2NvdW50ID0gMDsKKwkJaW50CQkJYmF0Y2hfbm9f ZHJpZnQgPSAwOwogCQlpbnQJCQliYXRjaF9taXNzaW5nX2NvdW50OwogCQlSZWxhdGlvbglzZXF1 ZW5jZV9yZWwgPSBOVUxMOwogCkBAIC01MDEsMjAgKzU0NSwzMyBAQCBjb3B5X3NlcXVlbmNlcyhX YWxSZWNlaXZlckNvbm4gKmNvbm4pCiAJCQl9CiAKIAkJCXN5bmNfc3RhdHVzID0gZ2V0X2FuZF92 YWxpZGF0ZV9zZXFfaW5mbyhzbG90LCAmc2VxdWVuY2VfcmVsLAotCQkJCQkJCQkJCQkJCSZzZXFp bmZvLCAmc2VxaWR4KTsKKwkJCQkJCQkJCQkJCQkmc2VxaW5mbywgJnNlcWlkeCwgc2VxaW5mb3Mp OworCisJCQkvKgorCQkJICogRm9yIHNlcXVlbmNlcyBpbiBJTklUIHN0YXRlLCBhbHdheXMgc3lu Yy4KKwkJCSAqIE90aGVyd2lzZSwgZm9yIHNlcXVlbmNlcyBpbiBSRUFEWSBzdGF0ZSwgb25seSBz eW5jIGlmIHRoZXJlJ3MgZHJpZnQuCisJCQkgKi8KIAkJCWlmIChzeW5jX3N0YXR1cyA9PSBDT1BZ U0VRX1NVQ0NFU1MpCi0JCQkJc3luY19zdGF0dXMgPSBjb3B5X3NlcXVlbmNlKHNlcWluZm8sCi0J CQkJCQkJCQkJCXNlcXVlbmNlX3JlbC0+cmRfcmVsLT5yZWxvd25lcik7CisJCQl7CisJCQkJaWYg KChyZWxzdGF0ZSA9PSBTVUJSRUxfU1RBVEVfSU5JVCkgfHwgY2hlY2tfc2VxdWVuY2VfZHJpZnQo c2VxdWVuY2VfcmVsLCBzZXFpbmZvKSkKKwkJCQkJc3luY19zdGF0dXMgPSBjb3B5X3NlcXVlbmNl KHNlcWluZm8sCisJCQkJCQkJCQkJCQlzZXF1ZW5jZV9yZWwtPnJkX3JlbC0+cmVsb3duZXIsCisJ CQkJCQkJCQkJCQlyZWxzdGF0ZSk7CisJCQkJZWxzZQorCQkJCQlzeW5jX3N0YXR1cyA9IENPUFlT RVFfTk9XT1JLOworCQkJfQogCiAJCQlzd2l0Y2ggKHN5bmNfc3RhdHVzKQogCQkJewogCQkJCWNh c2UgQ09QWVNFUV9TVUNDRVNTOgogCQkJCQllbG9nKERFQlVHMSwKLQkJCQkJCSAibG9naWNhbCBy ZXBsaWNhdGlvbiBzeW5jaHJvbml6YXRpb24gZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIsIHNlcXVl bmNlIFwiJXMuJXNcIiBoYXMgZmluaXNoZWQiLAorCQkJCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9u IHN5bmMgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIsIHNlcXVlbmNlIFwiJXMuJXNcIiBoYXMgYmVl biB1cGRhdGVkIiwKIAkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+bmFtZSwgc2VxaW5mby0+bnNwbmFt ZSwKIAkJCQkJCSBzZXFpbmZvLT5zZXFuYW1lKTsKIAkJCQkJYmF0Y2hfc3VjY2VlZGVkX2NvdW50 Kys7CisJCQkJCXNlcXVlbmNlX2NvcGllZCA9IHRydWU7CiAJCQkJCWJyZWFrOworCiAJCQkJY2Fz ZSBDT1BZU0VRX01JU01BVENIOgogCiAJCQkJCS8qCkBAIC01MjgsNiArNTg1LDcgQEAgY29weV9z ZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpjb25uKQogCQkJCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY3R4KTsKIAkJCQkJYmF0Y2hfbWlzbWF0Y2hlZF9jb3VudCsrOwogCQkJCQlicmVhazsK KwogCQkJCWNhc2UgQ09QWVNFUV9JTlNVRkZJQ0lFTlRfUEVSTToKIAogCQkJCQkvKgpAQCAtNTQx LDYgKzU5OSw3IEBAIGNvcHlfc2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKIAkJCQkJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CiAJCQkJCWJhdGNoX2luc3VmZnBlcm1fY291 bnQrKzsKIAkJCQkJYnJlYWs7CisKIAkJCQljYXNlIENPUFlTRVFfU0tJUFBFRDoKIAogCQkJCQkv KgpAQCAtNTU4LDYgKzYxNywxNSBAQCBjb3B5X3NlcXVlbmNlcyhXYWxSZWNlaXZlckNvbm4gKmNv bm4pCiAJCQkJCQliYXRjaF9za2lwcGVkX2NvdW50Kys7CiAJCQkJCX0KIAkJCQkJYnJlYWs7CisK KwkJCQljYXNlIENPUFlTRVFfTk9XT1JLOgorCQkJCQkvKiBOb3RoaW5nIHRvIGRvICovCisJCQkJ CWJhdGNoX25vX2RyaWZ0Kys7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJZWxv ZyhFUlJPUiwgInVucmVjb2duaXplZCBTZXF1ZW5jZSByZXBsaWNhdGlvbiByZXN1bHQ6ICVkIiwg KGludCkgc3luY19zdGF0dXMpOworCiAJCQl9CiAKIAkJCWlmIChzZXF1ZW5jZV9yZWwpCkBAIC01 NzIsMTQgKzY0MCwxNiBAQCBjb3B5X3NlcXVlbmNlcyhXYWxSZWNlaXZlckNvbm4gKmNvbm4pCiAJ CWJhdGNoX21pc3NpbmdfY291bnQgPSBiYXRjaF9zaXplIC0gKGJhdGNoX3N1Y2NlZWRlZF9jb3Vu dCArCiAJCQkJCQkJCQkJCWJhdGNoX21pc21hdGNoZWRfY291bnQgKwogCQkJCQkJCQkJCQliYXRj aF9pbnN1ZmZwZXJtX2NvdW50ICsKLQkJCQkJCQkJCQkJYmF0Y2hfc2tpcHBlZF9jb3VudCk7CisJ CQkJCQkJCQkJCWJhdGNoX3NraXBwZWRfY291bnQgKworCQkJCQkJCQkJCQliYXRjaF9ub19kcmlm dCk7CiAKIAkJZWxvZyhERUJVRzEsCi0JCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gc2VxdWVuY2Ug c3luY2hyb25pemF0aW9uIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIC0gYmF0Y2ggIyVkID0gJWQg YXR0ZW1wdGVkLCAlZCBzdWNjZWVkZWQsICVkIG1pc21hdGNoZWQsICVkIGluc3VmZmljaWVudCBw ZXJtaXNzaW9uLCAlZCBtaXNzaW5nIGZyb20gcHVibGlzaGVyLCAlZCBza2lwcGVkIiwKLQkJCSBN eVN1YnNjcmlwdGlvbi0+bmFtZSwKLQkJCSAoY3VyX2JhdGNoX2Jhc2VfaW5kZXggLyBNQVhfU0VR VUVOQ0VTX1NZTkNfUEVSX0JBVENIKSArIDEsCi0JCQkgYmF0Y2hfc2l6ZSwgYmF0Y2hfc3VjY2Vl ZGVkX2NvdW50LCBiYXRjaF9taXNtYXRjaGVkX2NvdW50LAotCQkJIGJhdGNoX2luc3VmZnBlcm1f Y291bnQsIGJhdGNoX21pc3NpbmdfY291bnQsIGJhdGNoX3NraXBwZWRfY291bnQpOworCQkgImxv Z2ljYWwgcmVwbGljYXRpb24gc2VxdWVuY2Ugc3luY2hyb25pemF0aW9uIGZvciBzdWJzY3JpcHRp b24gXCIlc1wiIC0gZm9yIHNlcXVlbmNlcyBpbiAlcyBzdGF0ZSBiYXRjaCAjJWQgPSAlZCBhdHRl bXB0ZWQsICVkIHN1Y2NlZWRlZCwgJWQgbWlzbWF0Y2hlZCwgJWQgaW5zdWZmaWNpZW50IHBlcm1p c3Npb24sICVkIG1pc3NpbmcgZnJvbSBwdWJsaXNoZXIsICVkIHNraXBwZWQsICVkIG5vIGRyaWZ0 IiwKKwkJIE15U3Vic2NyaXB0aW9uLT5uYW1lLAorCQkgKHJlbHN0YXRlID09ICdyJykgPyAiUkVB RFkiIDogKHJlbHN0YXRlID09ICdpJykgPyAiSU5JVCIgIDogIlVOS05PV04iLAorCQkgKGN1cl9i YXRjaF9iYXNlX2luZGV4IC8gTUFYX1NFUVVFTkNFU19TWU5DX1BFUl9CQVRDSCkgKyAxLAorCQkg YmF0Y2hfc2l6ZSwgYmF0Y2hfc3VjY2VlZGVkX2NvdW50LCBiYXRjaF9taXNtYXRjaGVkX2NvdW50 LAorCQkgYmF0Y2hfaW5zdWZmcGVybV9jb3VudCwgYmF0Y2hfbWlzc2luZ19jb3VudCwgYmF0Y2hf c2tpcHBlZF9jb3VudCwgYmF0Y2hfbm9fZHJpZnQpOwogCiAJCS8qIENvbW1pdCB0aGlzIGJhdGNo LCBhbmQgcHJlcGFyZSBmb3IgbmV4dCBiYXRjaCAqLwogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKQEAgLTYwNyw1MSArNjc3LDU1IEBAIGNvcHlfc2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29u biAqY29ubikKIAogCS8qIFJlcG9ydCBtaXNtYXRjaGVzLCBwZXJtaXNzaW9uIGlzc3Vlcywgb3Ig bWlzc2luZyBzZXF1ZW5jZXMgKi8KIAlyZXBvcnRfc2VxdWVuY2VfZXJyb3JzKG1pc21hdGNoZWRf c2Vxc19pZHgsIGluc3VmZnBlcm1fc2Vxc19pZHgsCi0JCQkJCQkgICBtaXNzaW5nX3NlcXNfaWR4 KTsKKwkJCQkJCSAgIG1pc3Npbmdfc2Vxc19pZHgsIHNlcWluZm9zKTsKKworCXJldHVybiBzZXF1 ZW5jZV9jb3BpZWQ7CiB9CiAKIC8qCiAgKiBJZGVudGlmaWVzIHNlcXVlbmNlcyB0aGF0IHJlcXVp cmUgc3luY2hyb25pemF0aW9uIGFuZCBpbml0aWF0ZXMgdGhlCiAgKiBzeW5jaHJvbml6YXRpb24g cHJvY2Vzcy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgc2VxdWVuY2VzIGhhdmUgYmVlbiB1cGRh dGVkLgogICovCi1zdGF0aWMgdm9pZAotTG9naWNhbFJlcFN5bmNTZXF1ZW5jZXModm9pZCkKK3N0 YXRpYyBib29sCitMb2dpY2FsUmVwU3luY1NlcXVlbmNlcyhXYWxSZWNlaXZlckNvbm4gKmNvbm4p CiB7Ci0JY2hhcgkgICAqZXJyOwotCWJvb2wJCW11c3RfdXNlX3Bhc3N3b3JkOwogCVJlbGF0aW9u CXJlbDsKIAlIZWFwVHVwbGUJdHVwOwotCVNjYW5LZXlEYXRhIHNrZXlbMl07CisJU2NhbktleURh dGEgc2tleVsxXTsKIAlTeXNTY2FuRGVzYyBzY2FuOwogCU9pZAkJCXN1YmlkID0gTXlMb2dpY2Fs UmVwV29ya2VyLT5zdWJpZDsKLQlTdHJpbmdJbmZvRGF0YSBhcHBfbmFtZTsKKwlib29sCQlzZXF1 ZW5jZV9jb3BpZWQgPSBmYWxzZTsKKwlMaXN0CSAgICpzZXFpbmZvcyA9IE5JTDsKKwlMaXN0CSAg ICppbml0X3NlcXMgPSBOSUw7CisJTGlzdAkgICAqcmVhZHlfc2VxcyA9IE5JTDsKIAogCVN0YXJ0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKIAlyZWwgPSB0YWJsZV9vcGVuKFN1YnNjcmlwdGlvblJl bFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CiAKKwkvKiBTY2FuIGZvciBhbGwgc2VxdWVu Y2VzIGJlbG9uZ2luZyB0byB0aGlzIHN1YnNjcmlwdGlvbiAqLwogCVNjYW5LZXlJbml0KCZza2V5 WzBdLAogCQkJCUFudW1fcGdfc3Vic2NyaXB0aW9uX3JlbF9zcnN1YmlkLAogCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKIAkJCQlPYmplY3RJZEdldERhdHVtKHN1YmlkKSk7CiAK LQlTY2FuS2V5SW5pdCgmc2tleVsxXSwKLQkJCQlBbnVtX3BnX3N1YnNjcmlwdGlvbl9yZWxfc3Jz dWJzdGF0ZSwKLQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfQ0hBUkVRLAotCQkJCUNoYXJH ZXREYXR1bShTVUJSRUxfU1RBVEVfSU5JVCkpOwotCiAJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihyZWwsIEludmFsaWRPaWQsIGZhbHNlLAotCQkJCQkJCSAgTlVMTCwgMiwgc2tleSk7CisJCQkJ CQkJICBOVUxMLCAxLCBza2V5KTsKKwogCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cCA9IHN5 c3RhYmxlX2dldG5leHQoc2NhbikpKQogCXsKIAkJRm9ybV9wZ19zdWJzY3JpcHRpb25fcmVsIHN1 YnJlbDsKIAkJTG9naWNhbFJlcFNlcXVlbmNlSW5mbyAqc2VxOwogCQlSZWxhdGlvbglzZXF1ZW5j ZV9yZWw7CiAJCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCQljaGFyCQlyZWxzdGF0ZTsKIAogCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOwogCiAJCXN1YnJlbCA9IChGb3JtX3BnX3N1YnNjcmlwdGlv bl9yZWwpIEdFVFNUUlVDVCh0dXApOworCQlyZWxzdGF0ZSA9IHN1YnJlbC0+c3JzdWJzdGF0ZTsK IAogCQlzZXF1ZW5jZV9yZWwgPSB0cnlfdGFibGVfb3BlbihzdWJyZWwtPnNycmVsaWQsIFJvd0V4 Y2x1c2l2ZUxvY2spOwogCkBAIC02NjYsNiArNzQwLDE5IEBAIExvZ2ljYWxSZXBTeW5jU2VxdWVu Y2VzKHZvaWQpCiAJCQljb250aW51ZTsKIAkJfQogCisJCS8qIEVycm9yIG9uIHVuZXhwZWN0ZWQg c3RhdGVzICovCisJCWlmIChyZWxzdGF0ZSAhPSBTVUJSRUxfU1RBVEVfSU5JVCAmJiByZWxzdGF0 ZSAhPSBTVUJSRUxfU1RBVEVfUkVBRFkpCisJCXsKKwkJCXRhYmxlX2Nsb3NlKHNlcXVlbmNlX3Jl bCwgTm9Mb2NrKTsKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JK RUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJ1bmV4cGVjdGVk IHJlbHN0YXRlICclYycgZm9yIHNlcXVlbmNlIFwiJXMuJXNcIiBpbiBzdWJzY3JpcHRpb24gXCIl c1wiIiwKKwkJCQkJCQlyZWxzdGF0ZSwKKwkJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRp b25HZXROYW1lc3BhY2Uoc2VxdWVuY2VfcmVsKSksCisJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUoc2VxdWVuY2VfcmVsKSwKKwkJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJ fQorCiAJCS8qCiAJCSAqIFdvcmtlciBuZWVkcyB0byBwcm9jZXNzIHNlcXVlbmNlcyBhY3Jvc3Mg dHJhbnNhY3Rpb24gYm91bmRhcnksIHNvCiAJCSAqIGFsbG9jYXRlIHRoZW0gdW5kZXIgbG9uZy1s aXZlZCBjb250ZXh0LgpAQCAtNjc4LDYgKzc2NSwxMiBAQCBMb2dpY2FsUmVwU3luY1NlcXVlbmNl cyh2b2lkKQogCQlzZXEtPnNlcW5hbWUgPSBwc3RyZHVwKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHNlcXVlbmNlX3JlbCkpOwogCQlzZXFpbmZvcyA9IGxhcHBlbmQoc2VxaW5mb3MsIHNlcSk7CiAK KwkJLyogU2VwYXJhdGUgc2VxdWVuY2VzIGJ5IHN0YXRlIGZvciBwcm9jZXNzaW5nICovCisJCWlm IChyZWxzdGF0ZSA9PSBTVUJSRUxfU1RBVEVfSU5JVCkKKwkJCWluaXRfc2VxcyA9IGxhcHBlbmQo aW5pdF9zZXFzLCBzZXEpOworCQllbHNlIGlmIChyZWxzdGF0ZSA9PSBTVUJSRUxfU1RBVEVfUkVB RFkpCisJCQlyZWFkeV9zZXFzID0gbGFwcGVuZChyZWFkeV9zZXFzLCBzZXEpOworCiAJCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwogCiAJCXRhYmxlX2Nsb3NlKHNlcXVlbmNlX3JlbCwg Tm9Mb2NrKTsKQEAgLTY5MywzNiArNzg2LDMwIEBAIExvZ2ljYWxSZXBTeW5jU2VxdWVuY2VzKHZv aWQpCiAJICogRXhpdCBlYXJseSBpZiBubyBjYXRhbG9nIGVudHJpZXMgZm91bmQsIGxpa2VseSBk dWUgdG8gY29uY3VycmVudCBkcm9wcy4KIAkgKi8KIAlpZiAoIXNlcWluZm9zKQotCQlyZXR1cm47 CisJCXJldHVybiBmYWxzZTsKIAotCS8qIElzIHRoZSB1c2Ugb2YgYSBwYXNzd29yZCBtYW5kYXRv cnk/ICovCi0JbXVzdF91c2VfcGFzc3dvcmQgPSBNeVN1YnNjcmlwdGlvbi0+cGFzc3dvcmRyZXF1 aXJlZCAmJgotCQkhTXlTdWJzY3JpcHRpb24tPm93bmVyc3VwZXJ1c2VyOworCS8qIFByb2Nlc3Mg SU5JVCBzZXF1ZW5jZXMgZmlyc3QgKi8KKwlpZiAoaW5pdF9zZXFzKQorCXsKKwkJc2VxdWVuY2Vf Y29waWVkIHw9IGNvcHlfc2VxdWVuY2VzKGNvbm4sIGluaXRfc2VxcywgU1VCUkVMX1NUQVRFX0lO SVQpOworCX0KIAotCWluaXRTdHJpbmdJbmZvKCZhcHBfbmFtZSk7Ci0JYXBwZW5kU3RyaW5nSW5m bygmYXBwX25hbWUsICJwZ18ldV9zZXF1ZW5jZV9zeW5jXyIgVUlOVDY0X0ZPUk1BVCwKLQkJCQkJ IE15U3Vic2NyaXB0aW9uLT5vaWQsIEdldFN5c3RlbUlkZW50aWZpZXIoKSk7CisJLyogVGhlbiBw cm9jZXNzIFJFQURZIHNlcXVlbmNlcyAqLworCWlmIChyZWFkeV9zZXFzKQorCXsKKwkJc2VxdWVu Y2VfY29waWVkIHw9IGNvcHlfc2VxdWVuY2VzKGNvbm4sIHJlYWR5X3NlcXMsIFNVQlJFTF9TVEFU RV9SRUFEWSk7CisJfQogCi0JLyoKLQkgKiBFc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gdG8gdGhl IHB1Ymxpc2hlciBmb3Igc2VxdWVuY2Ugc3luY2hyb25pemF0aW9uLgotCSAqLwotCUxvZ1JlcFdv cmtlcldhbFJjdkNvbm4gPQotCQl3YWxyY3ZfY29ubmVjdChNeVN1YnNjcmlwdGlvbi0+Y29ubmlu Zm8sIHRydWUsIHRydWUsCi0JCQkJCSAgIG11c3RfdXNlX3Bhc3N3b3JkLAotCQkJCQkgICBhcHBf bmFtZS5kYXRhLCAmZXJyKTsKLQlpZiAoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiA9PSBOVUxMKQot CQllcmVwb3J0KEVSUk9SLAotCQkJCWVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUp LAotCQkJCWVycm1zZygic2VxdWVuY2VzeW5jIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNc IiBjb3VsZCBub3QgY29ubmVjdCB0byB0aGUgcHVibGlzaGVyOiAlcyIsCi0JCQkJCSAgIE15U3Vi c2NyaXB0aW9uLT5uYW1lLCBlcnIpKTsKLQotCXBmcmVlKGFwcF9uYW1lLmRhdGEpOwotCi0JY29w eV9zZXF1ZW5jZXMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubik7CisJLyogQ2xlYW4gdXAgKi8KKwls aXN0X2ZyZWUoaW5pdF9zZXFzKTsKKwlsaXN0X2ZyZWUocmVhZHlfc2Vxcyk7CisJbGlzdF9mcmVl KHNlcWluZm9zKTsKKworCXJldHVybiBzZXF1ZW5jZV9jb3BpZWQ7CiB9CiAKIC8qCi0gKiBFeGVj dXRlIHRoZSBpbml0aWFsIHN5bmMgd2l0aCBlcnJvciBoYW5kbGluZy4gRGlzYWJsZSB0aGUgc3Vi c2NyaXB0aW9uLAorICogRXhlY3V0ZSB0aGUgc2VxdWVuY2Ugc3luYyB3aXRoIGVycm9yIGhhbmRs aW5nLiBEaXNhYmxlIHRoZSBzdWJzY3JpcHRpb24sCiAgKiBpZiByZXF1aXJlZC4KICAqCiAgKiBO b3RlIHRoYXQgd2UgZG9uJ3QgaGFuZGxlIEZBVEFMIGVycm9ycyB3aGljaCBhcmUgcHJvYmFibHkg YmVjYXVzZSBvZiBzeXN0ZW0KQEAgLTczNSw4ICs4MjIsNjcgQEAgc3RhcnRfc2VxdWVuY2Vfc3lu Yyh2b2lkKQogCiAJUEdfVFJZKCk7CiAJewotCQkvKiBDYWxsIGluaXRpYWwgc3luYy4gKi8KLQkJ TG9naWNhbFJlcFN5bmNTZXF1ZW5jZXMoKTsKKwkJY2hhciAgICAgICAqZXJyOworCQlib29sCQlt dXN0X3VzZV9wYXNzd29yZDsKKwkJU3RyaW5nSW5mb0RhdGEgYXBwX25hbWU7CisKKwkJLyogSXMg dGhlIHVzZSBvZiBhIHBhc3N3b3JkIG1hbmRhdG9yeT8gKi8KKwkJbXVzdF91c2VfcGFzc3dvcmQg PSBNeVN1YnNjcmlwdGlvbi0+cGFzc3dvcmRyZXF1aXJlZCAmJgorCQkJIU15U3Vic2NyaXB0aW9u LT5vd25lcnN1cGVydXNlcjsKKworCQlpbml0U3RyaW5nSW5mbygmYXBwX25hbWUpOworCQlhcHBl bmRTdHJpbmdJbmZvKCZhcHBfbmFtZSwgInBnXyV1X3NlcXVlbmNlX3N5bmNfIiBVSU5UNjRfRk9S TUFULAorCQkJCQkJIE15U3Vic2NyaXB0aW9uLT5vaWQsIEdldFN5c3RlbUlkZW50aWZpZXIoKSk7 CisKKwkJLyoKKwkJICogRXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwdWJsaXNoZXIg Zm9yIHNlcXVlbmNlIHN5bmNocm9uaXphdGlvbi4KKwkJICovCisJCUxvZ1JlcFdvcmtlcldhbFJj dkNvbm4gPQorCQkJd2FscmN2X2Nvbm5lY3QoTXlTdWJzY3JpcHRpb24tPmNvbm5pbmZvLCB0cnVl LCB0cnVlLAorCQkJCQkJICAgbXVzdF91c2VfcGFzc3dvcmQsCisJCQkJCQkgICBhcHBfbmFtZS5k YXRhLCAmZXJyKTsKKwkJaWYgKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4gPT0gTlVMTCkKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUpLAor CQkJCQllcnJtc2coInNlcXVlbmNlc3luYyB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIg Y291bGQgbm90IGNvbm5lY3QgdG8gdGhlIHB1Ymxpc2hlcjogJXMiLAorCQkJCQkJICAgTXlTdWJz Y3JpcHRpb24tPm5hbWUsIGVycikpOworCisJCXBmcmVlKGFwcF9uYW1lLmRhdGEpOworCisJCWZv ciAoOzspCisJCXsKKwkJCWJvb2wgc2VxdWVuY2VfY29waWVkID0gZmFsc2U7CisKKwkJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJCS8qCisJCQkgKiBTeW5jaHJvbml6ZSBhbGwgc2VxdWVu Y2VzIChib3RoIFJFQURZIGFuZCBJTklUIHN0YXRlcykuCisJCQkgKiBUaGUgZnVuY3Rpb24gd2ls bCBwcm9jZXNzIElOSVQgc2VxdWVuY2VzIGZpcnN0LCB0aGVuIFJFQURZIHNlcXVlbmNlcy4KKwkJ CSAqLworCQkJc2VxdWVuY2VfY29waWVkID0gTG9naWNhbFJlcFN5bmNTZXF1ZW5jZXMoTG9nUmVw V29ya2VyV2FsUmN2Q29ubik7CisKKwkJCS8qIEFkanVzdCBzbGVlcCBpbnRlcnZhbCBiYXNlZCBv biB3aGV0aGVyIHNlcXVlbmNlcyB3ZXJlIGNvcGllZCBvdmVyICovCisJCQlpZiAoc2VxdWVuY2Vf Y29waWVkKQorCQkJeworCQkJCXNsZWVwX21zID0gU0VRU1lOQ19NSU5fU0xFRVBfTVM7CisJCQl9 CisJCQllbHNlCisJCQl7CisKKwkJCS8qCisJCQkgKiBEb3VibGUgdGhlIHNsZWVwIHRpbWUsIGJ1 dCBub3QgYmV5b25kCisJCQkgKiB0aGUgbWF4aW11bSBhbGxvd2FibGUgdmFsdWUuCisJCQkgKi8K KwkJCQlzbGVlcF9tcyA9IE1pbihzbGVlcF9tcyAqIDIsIFNFUVNZTkNfTUFYX1NMRUVQX01TKTsK KwkJCX0KKworCQkJLyogU2xlZXAgZm9yIHRoZSBjb25maWd1cmVkIGludGVydmFsICovCisJCQko dm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVP VVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCSBzbGVlcF9tcywKKwkJCQkJCQkgV0FJ VF9FVkVOVF9MT0dJQ0FMX1NZTkNfU1RBVEVfQ0hBTkdFKTsKKwkJCVJlc2V0TGF0Y2goTXlMYXRj aCk7CisJCX0KIAl9CiAJUEdfQ0FUQ0goKTsKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3N5bmN1dGlscy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9zeW5jdXRpbHMuYwppbmRleCA1MzVmZmI2ZjA5ZS4uYWM3NjY5YmMyNzMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc3luY3V0aWxzLmMKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zeW5jdXRpbHMuYwpAQCAtMTcxLDcgKzE3 MSw2IEBAIFByb2Nlc3NTeW5jaW5nUmVsYXRpb25zKFhMb2dSZWNQdHIgY3VycmVudF9sc24pCiAK IAkJY2FzZSBXT1JLRVJUWVBFX0FQUExZOgogCQkJUHJvY2Vzc1N5bmNpbmdUYWJsZXNGb3JBcHBs eShjdXJyZW50X2xzbik7Ci0JCQlQcm9jZXNzU2VxdWVuY2VzRm9yU3luYygpOwogCQkJYnJlYWs7 CiAKIAkJY2FzZSBXT1JLRVJUWVBFX1NFUVVFTkNFU1lOQzoKQEAgLTE5MCwxMyArMTg5LDEzIEBA IFByb2Nlc3NTeW5jaW5nUmVsYXRpb25zKFhMb2dSZWNQdHIgY3VycmVudF9sc24pCiAgKgogICog VGhlIHBnX3N1YnNjcmlwdGlvbl9yZWwgY2F0YWxvZyBpcyBzaGFyZWQgYnkgdGFibGVzIGFuZCBz ZXF1ZW5jZXMuIENoYW5nZXMKICAqIHRvIGVpdGhlciBzZXF1ZW5jZXMgb3IgdGFibGVzIGNhbiBh ZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHJlbGF0aW9uIHN0YXRlcywgc28KLSAqIHdlIGlkZW50aWZ5 IG5vbi1SRUFEWSB0YWJsZXMgYW5kIG5vbi1SRUFEWSBzZXF1ZW5jZXMgdG9nZXRoZXIgdG8gZW5z dXJlCisgKiB3ZSBpZGVudGlmeSBub24tUkVBRFkgdGFibGVzIGFuZCBzZXF1ZW5jZXMgKGluIGFu eSBzdGF0ZSkgdG9nZXRoZXIgdG8gZW5zdXJlCiAgKiBjb25zaXN0ZW5jeS4KICAqCiAgKiBoYXNf cGVuZGluZ19zdWJ0YWJsZXM6IHRydWUgaWYgdGhlIHN1YnNjcmlwdGlvbiBoYXMgb25lIG9yIG1v cmUgdGFibGVzIHRoYXQKICAqIGFyZSBub3QgaW4gUkVBRFkgc3RhdGUsIG90aGVyd2lzZSBmYWxz ZS4KICAqIGhhc19wZW5kaW5nX3N1YnNlcXVlbmNlczogdHJ1ZSBpZiB0aGUgc3Vic2NyaXB0aW9u IGhhcyBvbmUgb3IgbW9yZSBzZXF1ZW5jZXMKLSAqIHRoYXQgYXJlIG5vdCBpbiBSRUFEWSBzdGF0 ZSwgb3RoZXJ3aXNlIGZhbHNlLgorICogKGluIGFueSBzdGF0ZSksIG90aGVyd2lzZSBmYWxzZS4K ICAqLwogdm9pZAogRmV0Y2hSZWxhdGlvblN0YXRlcyhib29sICpoYXNfcGVuZGluZ19zdWJ0YWJs ZXMsCkBAIC0yMDQsNTMgKzIwMyw0NyBAQCBGZXRjaFJlbGF0aW9uU3RhdGVzKGJvb2wgKmhhc19w ZW5kaW5nX3N1YnRhYmxlcywKIAkJCQkJYm9vbCAqc3RhcnRlZF90eCkKIHsKIAkvKgotCSAqIGhh c19zdWJ0YWJsZXMgYW5kIGhhc19zdWJzZXF1ZW5jZXNfbm9uX3JlYWR5IGFyZSBkZWNsYXJlZCBh cyBzdGF0aWMsCisJICogaGFzX3N1YnRhYmxlcyBhbmQgaGFzX3N1YnNlcXVlbmNlcyBhcmUgZGVj bGFyZWQgYXMgc3RhdGljLAogCSAqIHNpbmNlIHRoZSBzYW1lIHZhbHVlIGNhbiBiZSB1c2VkIHVu dGlsIHRoZSBzeXN0ZW0gdGFibGUgaXMgaW52YWxpZGF0ZWQuCiAJICovCiAJc3RhdGljIGJvb2wg aGFzX3N1YnRhYmxlcyA9IGZhbHNlOwotCXN0YXRpYyBib29sIGhhc19zdWJzZXF1ZW5jZXNfbm9u X3JlYWR5ID0gZmFsc2U7Ci0KKwlzdGF0aWMgYm9vbCBoYXNfc3Vic2VxdWVuY2VzID0gZmFsc2U7 CiAJKnN0YXJ0ZWRfdHggPSBmYWxzZTsKLQogCWlmIChyZWxhdGlvbl9zdGF0ZXNfdmFsaWRpdHkg IT0gU1lOQ19SRUxBVElPTlNfU1RBVEVfVkFMSUQpCiAJewogCQlNZW1vcnlDb250ZXh0IG9sZGN0 eDsKIAkJTGlzdAkgICAqcnN0YXRlczsKKwkJTGlzdAkgICAqc2VxX3N0YXRlczsKIAkJU3Vic2Ny aXB0aW9uUmVsU3RhdGUgKnJzdGF0ZTsKLQogCQlyZWxhdGlvbl9zdGF0ZXNfdmFsaWRpdHkgPSBT WU5DX1JFTEFUSU9OU19TVEFURV9SRUJVSUxEX1NUQVJURUQ7Ci0JCWhhc19zdWJzZXF1ZW5jZXNf bm9uX3JlYWR5ID0gZmFsc2U7Ci0KKwkJaGFzX3N1YnNlcXVlbmNlcyA9IGZhbHNlOwogCQkvKiBD bGVhbiB0aGUgb2xkIGxpc3RzLiAqLwogCQlsaXN0X2ZyZWVfZGVlcCh0YWJsZV9zdGF0ZXNfbm90 X3JlYWR5KTsKIAkJdGFibGVfc3RhdGVzX25vdF9yZWFkeSA9IE5JTDsKLQogCQlpZiAoIUlzVHJh bnNhY3Rpb25TdGF0ZSgpKQogCQl7CiAJCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCQkJ KnN0YXJ0ZWRfdHggPSB0cnVlOwogCQl9Ci0KLQkJLyogRmV0Y2ggdGFibGVzIGFuZCBzZXF1ZW5j ZXMgdGhhdCBhcmUgaW4gbm9uLVJFQURZIHN0YXRlLiAqLwotCQlyc3RhdGVzID0gR2V0U3Vic2Ny aXB0aW9uUmVsYXRpb25zKE15U3Vic2NyaXB0aW9uLT5vaWQsIHRydWUsIHRydWUsCisJCS8qIEZl dGNoIHRhYmxlcyB0aGF0IGFyZSBpbiBub24tUkVBRFkgc3RhdGUuICovCisJCXJzdGF0ZXMgPSBH ZXRTdWJzY3JpcHRpb25SZWxhdGlvbnMoTXlTdWJzY3JpcHRpb24tPm9pZCwgdHJ1ZSwgZmFsc2Us CiAJCQkJCQkJCQkJICAgdHJ1ZSk7Ci0KKwkJLyogRmV0Y2ggYWxsIHNlcXVlbmNlcyAocmVnYXJk bGVzcyBvZiBzdGF0ZSkuICovCisJCXNlcV9zdGF0ZXMgPSBHZXRTdWJzY3JpcHRpb25SZWxhdGlv bnMoTXlTdWJzY3JpcHRpb24tPm9pZCwgZmFsc2UsIHRydWUsCisJCQkJCQkJCQkJCSAgZmFsc2Up OwogCQkvKiBBbGxvY2F0ZSB0aGUgdHJhY2tpbmcgaW5mbyBpbiBhIHBlcm1hbmVudCBtZW1vcnkg Y29udGV4dC4gKi8KIAkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKENhY2hlTWVtb3J5 Q29udGV4dCk7CiAJCWZvcmVhY2hfcHRyKFN1YnNjcmlwdGlvblJlbFN0YXRlLCBzdWJyZWwsIHJz dGF0ZXMpCiAJCXsKLQkJCWlmIChnZXRfcmVsX3JlbGtpbmQoc3VicmVsLT5yZWxpZCkgPT0gUkVM S0lORF9TRVFVRU5DRSkKLQkJCQloYXNfc3Vic2VxdWVuY2VzX25vbl9yZWFkeSA9IHRydWU7Ci0J CQllbHNlCi0JCQl7Ci0JCQkJcnN0YXRlID0gcGFsbG9jX29iamVjdChTdWJzY3JpcHRpb25SZWxT dGF0ZSk7Ci0JCQkJbWVtY3B5KHJzdGF0ZSwgc3VicmVsLCBzaXplb2YoU3Vic2NyaXB0aW9uUmVs U3RhdGUpKTsKLQkJCQl0YWJsZV9zdGF0ZXNfbm90X3JlYWR5ID0gbGFwcGVuZCh0YWJsZV9zdGF0 ZXNfbm90X3JlYWR5LAotCQkJCQkJCQkJCQkJIHJzdGF0ZSk7Ci0JCQl9CisJCQlyc3RhdGUgPSBw YWxsb2Nfb2JqZWN0KFN1YnNjcmlwdGlvblJlbFN0YXRlKTsKKwkJCW1lbWNweShyc3RhdGUsIHN1 YnJlbCwgc2l6ZW9mKFN1YnNjcmlwdGlvblJlbFN0YXRlKSk7CisJCQl0YWJsZV9zdGF0ZXNfbm90 X3JlYWR5ID0gbGFwcGVuZCh0YWJsZV9zdGF0ZXNfbm90X3JlYWR5LAorCQkJCQkJCQkJCQkgcnN0 YXRlKTsKIAkJfQorCQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNlcXVlbmNlcy4gKi8KKwkJ aGFzX3N1YnNlcXVlbmNlcyA9IChzZXFfc3RhdGVzICE9IE5JTCk7CiAJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjdHgpOwotCisJCWxpc3RfZnJlZV9kZWVwKHNlcV9zdGF0ZXMpOwogCQkvKgog CQkgKiBEb2VzIHRoZSBzdWJzY3JpcHRpb24gaGF2ZSB0YWJsZXM/CiAJCSAqCkBAIC0yNjAsNyAr MjUzLDYgQEAgRmV0Y2hSZWxhdGlvblN0YXRlcyhib29sICpoYXNfcGVuZGluZ19zdWJ0YWJsZXMs CiAJCSAqLwogCQloYXNfc3VidGFibGVzID0gKHRhYmxlX3N0YXRlc19ub3RfcmVhZHkgIT0gTklM KSB8fAogCQkJSGFzU3Vic2NyaXB0aW9uVGFibGVzKE15U3Vic2NyaXB0aW9uLT5vaWQpOwotCiAJ CS8qCiAJCSAqIElmIHRoZSBzdWJzY3JpcHRpb24gcmVsYXRpb24gY2FjaGUgaGFzIGJlZW4gaW52 YWxpZGF0ZWQgc2luY2Ugd2UKIAkJICogZW50ZXJlZCB0aGlzIHJvdXRpbmUsIHdlIHN0aWxsIHVz ZSBhbmQgcmV0dXJuIHRoZSByZWxhdGlvbnMgd2UganVzdApAQCAtMjcxLDEwICsyNjMsOCBAQCBG ZXRjaFJlbGF0aW9uU3RhdGVzKGJvb2wgKmhhc19wZW5kaW5nX3N1YnRhYmxlcywKIAkJaWYgKHJl bGF0aW9uX3N0YXRlc192YWxpZGl0eSA9PSBTWU5DX1JFTEFUSU9OU19TVEFURV9SRUJVSUxEX1NU QVJURUQpCiAJCQlyZWxhdGlvbl9zdGF0ZXNfdmFsaWRpdHkgPSBTWU5DX1JFTEFUSU9OU19TVEFU RV9WQUxJRDsKIAl9Ci0KIAlpZiAoaGFzX3BlbmRpbmdfc3VidGFibGVzKQogCQkqaGFzX3BlbmRp bmdfc3VidGFibGVzID0gaGFzX3N1YnRhYmxlczsKLQogCWlmIChoYXNfcGVuZGluZ19zdWJzZXF1 ZW5jZXMpCi0JCSpoYXNfcGVuZGluZ19zdWJzZXF1ZW5jZXMgPSBoYXNfc3Vic2VxdWVuY2VzX25v bl9yZWFkeTsKKwkJKmhhc19wZW5kaW5nX3N1YnNlcXVlbmNlcyA9IGhhc19zdWJzZXF1ZW5jZXM7 CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCAzMjcyNWM0 ODYyMy4uNWE5MTM5YWNlNjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3Jr ZXIuYwpAQCAtNDIxOSw2ICs0MjE5LDkgQEAgTG9naWNhbFJlcEFwcGx5TG9vcChYTG9nUmVjUHRy IGxhc3RfcmVjZWl2ZWQpCiAJCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKIAkJfQog CisJCS8qIENoZWNrIGlmIGFueSBuZXcgc2VxdWVuY2VzIG5lZWQgc3luY2luZyAqLworCQlQcm9j ZXNzU2VxdWVuY2VzRm9yU3luYygpOworCiAJCWlmIChyYyAmIFdMX1RJTUVPVVQpCiAJCXsKIAkJ CS8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMgYi9zcmMvYmlu L3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKaW5kZXggOGI5MWJjMDAwNjIuLmI4YmRmZWJiMTVhIDEw MDY0NAotLS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKKysrIGIvc3JjL2Jpbi9w c3FsL3RhYi1jb21wbGV0ZS5pbi5jCkBAIC0yMzMxLDggKzIzMzEsOCBAQCBtYXRjaF9wcmV2aW91 c193b3JkcyhpbnQgcGF0dGVybl9pZCwKIAkvKiBBTFRFUiBTVUJTQ1JJUFRJT04gPG5hbWU+ICov CiAJZWxzZSBpZiAoTWF0Y2hlcygiQUxURVIiLCAiU1VCU0NSSVBUSU9OIiwgTWF0Y2hBbnkpKQog CQlDT01QTEVURV9XSVRIKCJDT05ORUNUSU9OIiwgIkVOQUJMRSIsICJESVNBQkxFIiwgIk9XTkVS IFRPIiwKLQkJCQkJICAiUkVOQU1FIFRPIiwgIlJFRlJFU0ggUFVCTElDQVRJT04iLCAiUkVGUkVT SCBTRVFVRU5DRVMiLAotCQkJCQkgICJTRVQiLCAiU0tJUCAoIiwgIkFERCBQVUJMSUNBVElPTiIs ICJEUk9QIFBVQkxJQ0FUSU9OIik7CisJCQkJCSAgIlJFTkFNRSBUTyIsICJSRUZSRVNIIFBVQkxJ Q0FUSU9OIiwgIlNFVCIsICJTS0lQICgiLAorCQkJCQkgICJBREQgUFVCTElDQVRJT04iLCAiRFJP UCBQVUJMSUNBVElPTiIpOwogCS8qIEFMVEVSIFNVQlNDUklQVElPTiA8bmFtZT4gUkVGUkVTSCAq LwogCWVsc2UgaWYgKE1hdGNoZXMoIkFMVEVSIiwgIlNVQlNDUklQVElPTiIsIE1hdGNoQW55LCBN YXRjaEFueU4sICJSRUZSRVNIIikpCiAJCUNPTVBMRVRFX1dJVEgoIlBVQkxJQ0FUSU9OIiwgIlNF UVVFTkNFUyIpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggMmMzYzRhM2YwNzQuLmYwMGVl YTlmYmQxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCisrKyBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgZXh0ZXJu IE9iamVjdEFkZHJlc3MgQWx0ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2Vx U3RtdCAqc3RtdCk7CiBleHRlcm4gdm9pZCBTZXF1ZW5jZUNoYW5nZVBlcnNpc3RlbmNlKE9pZCBy ZWxpZCwgY2hhciBuZXdyZWxwZXJzaXN0ZW5jZSk7CiBleHRlcm4gdm9pZCBEZWxldGVTZXF1ZW5j ZVR1cGxlKE9pZCByZWxpZCk7CiBleHRlcm4gdm9pZCBSZXNldFNlcXVlbmNlKE9pZCBzZXFfcmVs aWQpOworZXh0ZXJuIHZvaWQgR2V0U2VxdWVuY2UoUmVsYXRpb24gc2VxcmVsLCBpbnQ2NCAqbGFz dF92YWx1ZSwgYm9vbCAqaXNfY2FsbGVkKTsKIGV4dGVybiB2b2lkIFNldFNlcXVlbmNlKE9pZCBy ZWxpZCwgaW50NjQgbmV4dCwgYm9vbCBpc2NhbGxlZCk7CiBleHRlcm4gdm9pZCBSZXNldFNlcXVl bmNlQ2FjaGVzKHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggNjQ2ZDZjZWQ3NjMu LjQzYjMyOTJmZDJjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC00MzkxLDcgKzQzOTEsNiBA QCB0eXBlZGVmIGVudW0gQWx0ZXJTdWJzY3JpcHRpb25UeXBlCiAJQUxURVJfU1VCU0NSSVBUSU9O X0FERF9QVUJMSUNBVElPTiwKIAlBTFRFUl9TVUJTQ1JJUFRJT05fRFJPUF9QVUJMSUNBVElPTiwK IAlBTFRFUl9TVUJTQ1JJUFRJT05fUkVGUkVTSF9QVUJMSUNBVElPTiwKLQlBTFRFUl9TVUJTQ1JJ UFRJT05fUkVGUkVTSF9TRVFVRU5DRVMsCiAJQUxURVJfU1VCU0NSSVBUSU9OX0VOQUJMRUQsCiAJ QUxURVJfU1VCU0NSSVBUSU9OX1NLSVAsCiB9IEFsdGVyU3Vic2NyaXB0aW9uVHlwZTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyNl9zdGF0cy5wbCBiL3NyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAyNl9zdGF0cy5wbAppbmRleCA1ZDQ1NzA2MGEwMi4uMmZlMjA5ZjQ2MWYg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyNl9zdGF0cy5wbAorKysgYi9z cmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjZfc3RhdHMucGwKQEAgLTE2LDYgKzE2LDggQEAgJG5v ZGVfcHVibGlzaGVyLT5zdGFydDsKICMgQ3JlYXRlIHN1YnNjcmliZXIgbm9kZS4KIG15ICRub2Rl X3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXIn KTsKICRub2RlX3N1YnNjcmliZXItPmluaXQ7Ciskbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29u ZigncG9zdGdyZXNxbC5jb25mJywKKwkibWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9 IDEwIik7CiAkbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKIAogCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9zdWJzY3JpcHRpb24vdC8wMzZfc2VxdWVuY2VzLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9u L3QvMDM2X3NlcXVlbmNlcy5wbAppbmRleCA0NzE3ODBhMzU4NS4uOWMzMDhjZjRmMmEgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzNl9zZXF1ZW5jZXMucGwKKysrIGIvc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM2X3NlcXVlbmNlcy5wbApAQCAtNzUsOCArNzUsNyBAQCBp cygkcmVzdWx0LCAnMTAwfHQnLAogCiAjIyMjIyMjIyMjCiAjIyBBTFRFUiBTVUJTQ1JJUFRJT04g Li4uIFJFRlJFU0ggUFVCTElDQVRJT04gc2hvdWxkIGNhdXNlIHN5bmMgb2YgbmV3Ci0jIHNlcXVl bmNlcyBvZiB0aGUgcHVibGlzaGVyLCBidXQgY2hhbmdlcyB0byBleGlzdGluZyBzZXF1ZW5jZXMg c2hvdWxkCi0jIG5vdCBiZSBzeW5jZWQuCisjIHNlcXVlbmNlcyBvZiB0aGUgcHVibGlzaGVyLgog IyMjIyMjIyMjIwogCiAjIENyZWF0ZSBhIG5ldyBzZXF1ZW5jZSAncmVncmVzc19zMicsIGFuZCB1 cGRhdGUgZXhpc3Rpbmcgc2VxdWVuY2UgJ3JlZ3Jlc3NfczEnCkBAIC05NywxOSArOTYsNiBAQCAk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAogJG5vZGVfc3Vic2NyaWJlci0+ cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCAkc3luY2VkX3F1ZXJ5KQogICBvciBkaWUgIlRp bWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBzdWJzY3JpYmVyIHRvIHN5bmNocm9uaXplIGRhdGEi OwogCi0kcmVzdWx0ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywg cXEoCi0JU0VMRUNUIGxhc3RfdmFsdWUsIGlzX2NhbGxlZCBGUk9NIHJlZ3Jlc3NfczE7Ci0pKTsK LWlzKCRyZXN1bHQsICcyMDB8dCcsICdDaGVjayBzZXF1ZW5jZSB2YWx1ZSBpbiB0aGUgcHVibGlz aGVyJyk7Ci0KLSMgQ2hlY2sgLSBleGlzdGluZyBzZXF1ZW5jZSAoJ3JlZ3Jlc3NfczEnKSBpcyBu b3Qgc3luY2VkCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAotCSdwb3N0 Z3JlcycsIHFxKAotCVNFTEVDVCBsYXN0X3ZhbHVlLCBpc19jYWxsZWQgRlJPTSByZWdyZXNzX3Mx OwotKSk7Ci1pcygkcmVzdWx0LCAnMTAwfHQnLCAnUkVGUkVTSCBQVUJMSUNBVElPTiB3aWxsIG5v dCBzeW5jIGV4aXN0aW5nIHNlcXVlbmNlJyk7Ci0KICMgQ2hlY2sgLSBuZXdseSBwdWJsaXNoZWQg c2VxdWVuY2UgKCdyZWdyZXNzX3MyJykgaXMgc3luY2VkCiAkcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKAogCSdwb3N0Z3JlcycsIHFxKApAQCAtMTE5LDEyICsxMDUsOSBAQCBp cygkcmVzdWx0LCAnMTAwfHQnLAogCSdSRUZSRVNIIFBVQkxJQ0FUSU9OIHdpbGwgc3luYyBuZXds eSBwdWJsaXNoZWQgc2VxdWVuY2UnKTsKIAogIyMjIyMjIyMjIwotIyBUZXN0OiBSRUZSRVNIIFNF UVVFTkNFUyBhbmQgUkVGUkVTSCBQVUJMSUNBVElPTiAoY29weV9kYXRhID0gZmFsc2UpCi0jCi0j IDEuIEFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBTRVFVRU5DRVMgc2hvdWxkIHJlLXN5 bmNocm9uaXplIGFsbAotIyAgICBleGlzdGluZyBzZXF1ZW5jZXMsIGJ1dCBub3Qgc3luY2hyb25p emUgbmV3bHkgYWRkZWQgb25lcy4KLSMgMi4gQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNI IFBVQkxJQ0FUSU9OIHdpdGggKGNvcHlfZGF0YSA9IGZhbHNlKSBzaG91bGQKLSMgICAgYWxzbyBu b3QgdXBkYXRlIHNlcXVlbmNlIHZhbHVlcyBmb3IgbmV3bHkgYWRkZWQgc2VxdWVuY2VzLgorIyBU ZXN0OgorIyAxLiBBdXRvbWF0aWMgdXBkYXRlIG9mIGV4aXN0aW5nIHNlcXVlbmNlIHZhbHVlcwor IyAyLiBOZXdseSBhZGRlZCBzZXF1ZW5jZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQu CiAjIyMjIyMjIyMjCiAKICMgQ3JlYXRlIGEgbmV3IHNlcXVlbmNlICdyZWdyZXNzX3MzJywgYW5k IHVwZGF0ZSB0aGUgZXhpc3Rpbmcgc2VxdWVuY2UKQEAgLTEzOCw1MSArMTIxLDI1IEBAICRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAogCUlOU0VSVCBJTlRPIHJlZ3Jlc3Nfc2VxX3Rlc3QgU0VM RUNUIG5leHR2YWwoJ3JlZ3Jlc3NfczInKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCk7CiAp KTsKIAotIyAxLiBEbyBBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggU0VRVUVOQ0VTCi0k cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHFxKAot CUFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3NlcV9zdWIgUkVGUkVTSCBTRVFVRU5DRVM7Ci0p KTsKLSRub2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywgJHN5bmNl ZF9xdWVyeSkKLSAgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Igc3Vic2NyaWJl ciB0byBzeW5jaHJvbml6ZSBkYXRhIjsKLQogIyBDaGVjayAtIGV4aXN0aW5nIHNlcXVlbmNlcyAo J3JlZ3Jlc3NfczEnIGFuZCAncmVncmVzc19zMicpIGFyZSBzeW5jZWQKLSRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXEoCi0JU0VMRUNUIGxhc3Rf dmFsdWUsIGlzX2NhbGxlZCBGUk9NIHJlZ3Jlc3NfczE7Ci0pKTsKLWlzKCRyZXN1bHQsICcyMDB8 dCcsICdSRUZSRVNIIFNFUVVFTkNFUyB3aWxsIHN5bmMgZXhpc3Rpbmcgc2VxdWVuY2VzJyk7Ci0k cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHFxKAot CVNFTEVDVCBsYXN0X3ZhbHVlLCBpc19jYWxsZWQgRlJPTSByZWdyZXNzX3MyOwotKSk7Ci1pcygk cmVzdWx0LCAnMjAwfHQnLCAnUkVGUkVTSCBTRVFVRU5DRVMgd2lsbCBzeW5jIGV4aXN0aW5nIHNl cXVlbmNlcycpOwogCi0jIENoZWNrIC0gbmV3bHkgcHVibGlzaGVkIHNlcXVlbmNlICgncmVncmVz c19zMycpIGlzIG5vdCBzeW5jZWQKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoCi0JJ3Bvc3RncmVzJywgcXEoCi0JU0VMRUNUIGxhc3RfdmFsdWUsIGlzX2NhbGxlZCBGUk9N IHJlZ3Jlc3NfczM7Ci0pKTsKLWlzKCRyZXN1bHQsICcxfGYnLAotCSdSRUZSRVNIIFNFUVVFTkNF UyB3aWxsIG5vdCBzeW5jIG5ld2x5IHB1Ymxpc2hlZCBzZXF1ZW5jZScpOworIyBQb2xsIHVudGls IHJlZ3Jlc3NfczEgcmVmbGVjdHMgdGhlIHVwZGF0ZWQgc2VxdWVuY2UgdmFsdWUKKyRub2RlX3N1 YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKyAgICBxcShTRUxFQ1QgbGFz dF92YWx1ZSA9IDIwMCBBTkQgaXNfY2FsbGVkID0gJ3QnIEZST00gcmVncmVzc19zMTspKQorICBv ciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciByZWdyZXNzX3MxIHNlcXVlbmNlIHRv IHN5bmMiOwogCi0jIDIuIERvIEFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJMSUNB VElPTiB3aXRoIGNvcHlfZGF0YSBhcyBmYWxzZQotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxcSgKLQlBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVz c19zZXFfc3ViIFJFRlJFU0ggUFVCTElDQVRJT04gV0lUSCAoY29weV9kYXRhID0gZmFsc2UpOwot KSk7Ci0kbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICRzeW5j ZWRfcXVlcnkpCi0gIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN1YnNjcmli ZXIgdG8gc3luY2hyb25pemUgZGF0YSI7CisjIFBvbGwgdW50aWwgcmVncmVzc19zMiByZWZsZWN0 cyB0aGUgdXBkYXRlZCBzZXF1ZW5jZSB2YWx1ZQorJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVy eV91bnRpbCgncG9zdGdyZXMnLAorICAgIHFxKFNFTEVDVCBsYXN0X3ZhbHVlID0gMjAwIEFORCBp c19jYWxsZWQgPSAndCcgRlJPTSByZWdyZXNzX3MyOykpCisgIG9yIGRpZSAiVGltZWQgb3V0IHdo aWxlIHdhaXRpbmcgZm9yIHJlZ3Jlc3NfczIgc2VxdWVuY2UgdG8gc3luYyI7CiAKLSMgQ2hlY2sg LSBuZXdseSBwdWJsaXNoZWQgc2VxdWVuY2UgKCdyZWdyZXNzX3MzJykgaXMgbm90IHN5bmNlZCB3 aXRoIGNvcHlfZGF0YQotIyBhcyBmYWxzZS4KKyMgQ2hlY2sgLSBuZXdseSBwdWJsaXNoZWQgc2Vx dWVuY2UgKCdyZWdyZXNzX3MzJykgaXMgbm90IHN5bmNlZAogJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgKIAkncG9zdGdyZXMnLCBxcSgKIAlTRUxFQ1QgbGFzdF92YWx1ZSwg aXNfY2FsbGVkIEZST00gcmVncmVzc19zMzsKICkpOwogaXMoJHJlc3VsdCwgJzF8ZicsCi0JJ1JF RlJFU0ggUFVCTElDQVRJT04gd2lsbCBub3Qgc3luYyBuZXdseSBwdWJsaXNoZWQgc2VxdWVuY2Ug d2l0aCBjb3B5X2RhdGEgYXMgZmFsc2UnCi0pOworCSdOZXdseSBwdWJsaXNoZWQgc2VxdWVuY2Vz IGFyZSBub3Qgc3luY2VkIGF1dG9tYXRpY2FsbHknKTsKIAogIyMjIyMjIyMjIwogIyBBTFRFUiBT VUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04gc2hvdWxkIHJlcG9ydCBhbiBlcnJv ciB3aGVuOgotLSAKMi40Ny4zCgo= --000000000000355f66064a9d0d2b--