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 1w74ex-004w28-0t for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 04:55:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w74ev-001J3r-2e for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 04:55:30 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w74ev-001J3g-1E for pgsql-hackers@lists.postgresql.org; Mon, 30 Mar 2026 04:55:29 +0000 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w74es-00000001wBY-142a for pgsql-hackers@postgresql.org; Mon, 30 Mar 2026 04:55:29 +0000 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2b24fdac394so7418825ad.3 for ; Sun, 29 Mar 2026 21:55:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774846525; cv=none; d=google.com; s=arc-20240605; b=McA8FlmGSCnpPDdJe5h6s9IwgaM7HA64N6ZEujaTNRJj6X6uV4cSIf0jhWn7C2DSKl Z1H/EYVSz2mArY84+vYv01xK31XBkcA9c0yZkuy6mX4TLQrg9ZgfSvsb83MLVJqisE3g U62bN8WG12snvG/O6TFwAl9Bx922R7Z/luhadJMu5i2kaRulsr7F+GphbeSh9lE9Vv4G hDi2nf+pO5LYdYIDOGZO4KEumeHcKAPCY4wNXhJGXk1bHRsS6FDn2NBkeWx7ELn0rJTr AXlJ6LGq6DozKI7Y5E4nWudOfxijH7YK69LMsu0RZtiEVTNWEVn5nxKhTZzJsHNVO7jt 4ZHw== 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=RXMc+xRQrY2wABVoMJPCz+WSFz4I2U6t8q1I0l9yAY4=; fh=6qyqzuhDXiM588nfNTpVlxauYFZDmFZJDVQERTPgx74=; b=iUq2KY7cKmCK7/PoqcxvdhzPJdezILPyMn2GPoea09lbCMi0wNEuIm5DeXZKPtsZlP BBaAxGTHWiRDGtjdHi9tirWjEz4qHLmzUShUs4etpe7Gbea7k4WX8B39XfFQrTLnGgtM FQCpaZkGm7byzpC5NKHBZPK+doeQNAxEm2eqtbwbWBe5xI5KRO/Imyol2539H56Fmc1f 5v+p2zHUCBfjS5jQj+z+HoFfXJBCjF9a/kX8NbZJkfs2CYNQUh4Rn8nVlbfJkGSKdnYy QuLRmyY+754nu8rp5mS01OSO7vOT4BBYAg2Qys9YqAQoee8pMZV5YTXS7gcHC+6LSOLG rDTw==; darn=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=20251104; t=1774846525; x=1775451325; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=RXMc+xRQrY2wABVoMJPCz+WSFz4I2U6t8q1I0l9yAY4=; b=CFsUTrfMKe8NF+0nL0FeMX9llvbJFAkG7uJUH5+KN1+w/1K1Bd4YPHuPO4mZ016qZ0 4lRqeLDSee5VY0BPm8xNgPIxxpCJFQJlhNUHJwHUUxIo419KJet527lKX7S8lLOZmVFC +JBZ/Y5lc6aYoDdVK3KSoT3z4PfQNyqxt+Z6xpx3JAy28i/ghS8HtroZxOaFn1PDSFnN U/OliZkqd+m8hc5ZGmrRpXunl71yB+UXTH9HLnJ3Oqgevmx0Z8FJNAezp18S6DCPsiMq iqh/71JOtYdXFR5vFmqrL46gR1ZdP+bH1lqLiGEYqEv8LdHDo4VXoupalQxnXFgxtEl6 nAjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774846525; x=1775451325; 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=RXMc+xRQrY2wABVoMJPCz+WSFz4I2U6t8q1I0l9yAY4=; b=dlWMYz8KuxioH9p5vA4FyLo8usMjgCUHCFCo1uuR+RlrDNjLWRyAfI6bj9Jl555ZtT 9V/VIJZIZD0y5v3dkzv8e/Q0ATH9j1hBk+oW2GFfWc2y1LhKdm3PpPiZ1O5yFc9jvy2v eq6loQR5/QrKLvuHxYzDWMVnpgfJ4ehnfxrXB9/roMernGz+SJmLUxc8MFcxUIcn6tCy 3i97A1ES56YYBWMail7tNjEBkvWYPc9vzj9R+ItXlV1Lv53zVzBpUNpiJtELgHq4a4aJ GIIEUof8etWtSVZYTtia2LK13n0yFZMPiZmuQUrXQiIBRjXP73Ku16FDX+VEX9pQvvgo ycDA== X-Forwarded-Encrypted: i=1; AJvYcCV90Hc7mx/J1uoiUjPHPEN2ULDmaj6FBWG1pCFvZdNL+rUUjMX70ejQ8EJtfGlltpD/R4YLQDf3rWzRpEbO@postgresql.org X-Gm-Message-State: AOJu0YwkJbuy11IO3uix2CoBiqXAkliLNKZNmzf9wdmnyRdJBInd5Eic krNtDFnOpCVijzmk+3T0YhRsSjlIALvqIIEilcWKqUdO/V/vGbN/7QPFLI+J219MGGA5jwAYahh XN2bU2hAugWXwBHkC9dlRfiLLOMZXd9g= X-Gm-Gg: ATEYQzzeX+NrfBEzQ57r99MmJGk85g+Ou32D2dNV04IqjXsjCbsfWJkRfCDNqQM0ZbH 7+MHpCM5rO2PimrImaHw8ZSkyc+Q3CZWr89lgoZMDumeHD0oCIMn4vV0x9nk4hSC8SAAGk3apZM psgE1m0H7oBTpkycoSVHlf62S+pP9psfXwWGYqDICtecbgkPvDmodWt2bCEuFSn1ggVLPbl0CRC rehubS1mbsLfiA32GYSd4Kr0z2zb1hwXMbyO9EEF6AalmfxmGQ5LIM0wMaRozIiEU2T7gGhU6ii 7V1cPDre X-Received: by 2002:a17:903:18a:b0:2b0:51f6:d46e with SMTP id d9443c01a7336-2b0cdc3c28amr122997485ad.15.1774846524792; Sun, 29 Mar 2026 21:55:24 -0700 (PDT) MIME-Version: 1.0 References: <2BE661BA-D909-4093-BF78-DB9B0C099337@gmail.com> In-Reply-To: From: Amit Langote Date: Mon, 30 Mar 2026 13:55:07 +0900 X-Gm-Features: AQROBzCtcybFucxq0FlvoUm5e7w7bXRM8ztVNfqiP4DwKMD_HrA5mXtQHxEn6m4 Message-ID: Subject: Re: Eliminating SPI / SQL from some RI triggers - take 3 To: Junwang Zhao Cc: Haibo Yan , Pavel Stehule , PostgreSQL-development , Tomas Vondra Content-Type: multipart/mixed; boundary="000000000000a438c8064e36a87b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a438c8064e36a87b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Mar 25, 2026 at 9:41=E2=80=AFAM Amit Langote wrote: > On Tue, Mar 24, 2026 at 10:56=E2=80=AFPM Amit Langote wrote: > > On Tue, Mar 24, 2026 at 8:47=E2=80=AFPM Amit Langote wrote: > > > > > > Hi Junwang, > > > > > > On Fri, Mar 20, 2026 at 1:20=E2=80=AFAM Junwang Zhao wrote: > > > > I squashed 0004 into 0003 so that each file can be committed indepe= ndently. > > > > I also runned pgindent for each file. > > > > > > Thanks for that. > > > > > > Here's another version. > > > > > > In 0001, I noticed that the condition change in ri_HashCompareOp coul= d > > > be simplified further. Also improved the commentary surrounding that= . > > > I also updated the commit message to clarify parity with the SPI path= . > > > > > > Updated the commit message of 0002 to talk about why caching the > > > snapshot for the entire trigger firing cycle of a given constraint > > > makes a trade off compared to the SPI path which retakes the snapshot > > > for every row checked and could in principle avoid failure for FK row= s > > > whose corresponding PK row was added by a concurrently committed > > > transaction, at least in the READ COMMITTED case. > > > > > > Updated the commit message of 0003 to clarify that it replaces > > > ri_FastPathCheckCached() from 0002 with the BatchAdd/BatchFlush pair, > > > and that the cached resources are used unchanged -- only the probing > > > cadence changes from per-row to per-flush. Per-flush CCI is safe > > > because all AFTER triggers for the buffered rows have already fired > > > by flush time; a new test case is added to show that. > > > > Kept thinking about this on a walk after I sent this and came to the > > conclusion that it might be better to just not cache the snapshot with > > only the above argument in its favor. If repeated GetSnapshotData() > > is expensive, the solution should be to fix that instead of simply > > side-stepping it. > > > > By taking a snapshot per-batch without caching it, and so likewise the > > IndexScanDesc, I'm seeing the same ~3x speedup in the batched > > SK_SEARCHARRAY case, so I don't see much point in being very stubborn > > about snapshot caching. Like in the attached (there's an unrelated > > memory context switch thinko fix). Note that relations (pk_rel, > > idx_rel) and the slot remain cached across the batch; only the > > snapshot and scandesc are taken fresh per flush. > > > > I'll post an updated version tomorrow morning. I think it might be > > better to just merge 0003 into 0002, because without snapshot and > > scandesc caching the standalone value of 0002 is mostly just relation > > and slot caching -- the interesting parts (batch callbacks, lifecycle > > management) are all scaffolding for the batching. So v10 will be two > > patches: 0001 core fast path, 0002 everything else. > > And here's a set like that. I noticed that we don't need a dedicated > scan_cxt now that scandesc is not cached and a few other > simplifications. Junwang pointed out off-list that FK tuples added to RI_FastPathEntry.batch[] were being copied into TopTransactionContext rather than flush_cxt, so they would accumulate until the batch was exhausted rather than being reclaimed per flush. Fixed in ri_FastPathBatchAdd() in 0002. Also added a couple of comments in trigger.c that were missing: an Assert and explanation in RegisterAfterTriggerBatchCallback() clarifying the query_depth >=3D 0 precondition, a comment at the AfterTriggerEndQuery call site explaining why FireAfterTriggerBatchCallbacks() must precede the query_depth decrement and AfterTriggerFreeQuery, and brief intent comments at the AfterTriggerFireDeferred and AfterTriggerSetState call sites. Plan is to commit 0001 tomorrow barring objections and let it sit for a bit before committing 0002. Feedback on 0002, particularly on the AfterTriggerBatchCallback mechanism in trigger.c, welcome in the meantime. -- Thanks, Amit Langote --000000000000a438c8064e36a87b Content-Type: application/octet-stream; name="v11-0002-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Disposition: attachment; filename="v11-0002-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mncpqz2y0 RnJvbSA0YzI1Njc5YjU3ZGZjZmZiNTM4ZGU3MjJjNzIyNDgxOTYxMGU2ZTNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgMzAgTWFyIDIwMjYgMTI6NTg6MjYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MSAyLzJdIEJhdGNoIEZLIHJvd3MgYW5kIHVzZSBTS19TRUFSQ0hBUlJBWSBmb3IgZmFzdC1wYXRo IEZLCiBwcm9iZXMKCkluc3RlYWQgb2YgcHJvYmluZyB0aGUgUEsgaW5kZXggb24gZWFjaCB0cmln Z2VyIGludm9jYXRpb24sIGJ1ZmZlcgpGSyByb3dzIGluIHRoZSBwZXItY29uc3RyYWludCBjYWNo ZSBlbnRyeSAoUklfRmFzdFBhdGhFbnRyeSkgYW5kCmZsdXNoIHRoZW0gYXMgYSBiYXRjaC4gIFdo ZW4gdGhlIGJ1ZmZlciBmaWxscyAoNjQgcm93cykgb3IgdGhlCnRyaWdnZXItZmlyaW5nIGN5Y2xl IGVuZHMsIHJpX0Zhc3RQYXRoQmF0Y2hGbHVzaCgpIHByb2JlcyB0aGUgaW5kZXgKZm9yIGFsbCBi dWZmZXJlZCByb3dzLCBzaGFyaW5nIGEgc2luZ2xlIENvbW1hbmRDb3VudGVySW5jcmVtZW50LApz bmFwc2hvdCwgYW5kIHNlY3VyaXR5IGNvbnRleHQgc3dpdGNoIGFjcm9zcyB0aGUgYmF0Y2guICBQ ZXItZmx1c2gKQ0NJIGlzIHNhZmUgYmVjYXVzZSBhbGwgQUZURVIgdHJpZ2dlcnMgZm9yIHRoZSBi dWZmZXJlZCByb3dzIGhhdmUKYWxyZWFkeSBmaXJlZCBieSBmbHVzaCB0aW1lLgoKRm9yIHNpbmds ZS1jb2x1bW4gZm9yZWlnbiBrZXlzLCB0aGUgZmx1c2ggYnVpbGRzIGFuIEFycmF5VHlwZSBmcm9t CnRoZSBidWZmZXJlZCBGSyB2YWx1ZXMgKGNhc3RpbmcgdG8gdGhlIFBLLXNpZGUgdHlwZSBpZiBu ZWVkZWQpIGFuZApjb25zdHJ1Y3RzIGEgc2NhbiBrZXkgd2l0aCB0aGUgU0tfU0VBUkNIQVJSQVkg ZmxhZy4gIFRoZSBpbmRleCBBTQpzb3J0cyBhbmQgZGVkdXBsaWNhdGVzIHRoZSBhcnJheSBpbnRl cm5hbGx5LCB0aGVuIHdhbGtzIG1hdGNoaW5nCmxlYWYgcGFnZXMgaW4gb25lIG9yZGVyZWQgdHJh dmVyc2FsIGluc3RlYWQgb2YgZGVzY2VuZGluZyBmcm9tIHRoZQpyb290IG9uY2UgcGVyIHJvdy4g IEEgbWF0Y2hlZFtdIGJpdG1hcCB0cmFja3Mgd2hpY2ggYmF0Y2ggaXRlbXMKd2VyZSBzYXRpc2Zp ZWQ7IHVubWF0Y2hlZCBpdGVtcyBhcmUgcmVwb3J0ZWQgYXMgdmlvbGF0aW9ucy4KTXVsdGktY29s dW1uIGZvcmVpZ24ga2V5cyBmYWxsIGJhY2sgdG8gYSBwZXItcm93IHByb2JlIGxvb3AgdmlhCnJp X0Zhc3RQYXRoRmx1c2hMb29wKCkuCgpGSyB0dXBsZXMgYXJlIG1hdGVyaWFsaXplZCB2aWEgRXhl Y0NvcHlTbG90SGVhcFR1cGxlKCkgaW50byBhCnB1cnBvc2Utc3BlY2lmaWMgbWVtb3J5IGNvbnRl eHQgKGZsdXNoX2N4dCksIGNoaWxkIG9mClRvcFRyYW5zYWN0aW9uQ29udGV4dCwgd2hpY2ggaXMg YWxzbyB1c2VkIGZvciBwZXItZmx1c2ggdHJhbnNpZW50Cndvcms6IGNhc3QgcmVzdWx0cywgdGhl IHNlYXJjaCBhcnJheSwgYW5kIGluZGV4IHNjYW4gYWxsb2NhdGlvbnMuClJlc2V0IGFmdGVyIGVh Y2ggZmx1c2g7IGRlbGV0ZWQgaW4gdGVhcmRvd24uCgpUaGUgUEsgcmVsYXRpb24sIGluZGV4LCB0 dXBsZSBzbG90cywgYW5kIGZhc3QtcGF0aCBtZXRhZGF0YSBhcmUKY2FjaGVkIGluIFJJX0Zhc3RQ YXRoRW50cnkgYWNyb3NzIHRyaWdnZXIgaW52b2NhdGlvbnMgd2l0aGluIGEKdHJpZ2dlci1maXJp bmcgYmF0Y2gsIGF2b2lkaW5nIHJlcGVhdGVkIG9wZW4vY2xvc2Ugb3ZlcmhlYWQuICBUaGUKc25h cHNob3QgYW5kIEluZGV4U2NhbkRlc2MgYXJlIHRha2VuIGZyZXNoIHBlciBmbHVzaC4KCnJpX0Zh c3RQYXRoRW5kQmF0Y2goKSBmbHVzaGVzIGFueSBwYXJ0aWFsIGJhdGNoIGJlZm9yZSB0ZWFyaW5n IGRvd24KY2FjaGVkIHJlc291cmNlcy4gIFNpbmNlIHRoZSBGSyByZWxhdGlvbiBtYXkgYWxyZWFk eSBiZSBjbG9zZWQgYnkKZmx1c2ggdGltZSAoZS5nLiBmb3IgZGVmZXJyZWQgY29uc3RyYWludHMg YXQgQ09NTUlUKSwgcmVvcGVucyB0aGUKcmVsYXRpb24gdXNpbmcgZW50cnktPnJpaW5mby0+Zmtf cmVsaWQgaWYgbmVlZGVkLgoKVGhlIG5vbi1jYWNoZWQgcGF0aCAoQUxURVIgVEFCTEUgdmFsaWRh dGlvbikgYnlwYXNzZXMgYmF0Y2hpbmcgYW5kCmNvbnRpbnVlcyB0byBjYWxsIHJpX0Zhc3RQYXRo Q2hlY2soKSBkaXJlY3RseSBwZXIgcm93LgoKTGlmZWN5Y2xlIG1hbmFnZW1lbnQgZm9yIFJJX0Zh c3RQYXRoRW50cnk6CgogIC0gQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjazogQSBuZXcgZ2VuZXJh bC1wdXJwb3NlIGNhbGxiYWNrCiAgICBtZWNoYW5pc20gaW4gdHJpZ2dlci5jLiAgQ2FsbGJhY2tz IHJlZ2lzdGVyZWQgdmlhCiAgICBSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2soKSBm aXJlIGF0IHRoZSBlbmQgb2YgZWFjaAogICAgdHJpZ2dlci1maXJpbmcgYmF0Y2ggKEFmdGVyVHJp Z2dlckVuZFF1ZXJ5IGZvciBpbW1lZGlhdGUKICAgIGNvbnN0cmFpbnRzLCBBZnRlclRyaWdnZXJG aXJlRGVmZXJyZWQgYXQgQ09NTUlULCBhbmQKICAgIEFmdGVyVHJpZ2dlclNldFN0YXRlIGZvciBT RVQgQ09OU1RSQUlOVFMgSU1NRURJQVRFKS4gIFRoZSBSSSBjb2RlCiAgICByZWdpc3RlcnMgcmlf RmFzdFBhdGhFbmRCYXRjaCBhcyBhIGJhdGNoIGNhbGxiYWNrLgoKICAtIEJhdGNoIGNhbGxiYWNr cyBvbmx5IGZpcmUgYXQgdGhlIG91dGVybW9zdCBxdWVyeSBsZXZlbAogICAgKGNoZWNrZWQgaW5z aWRlIEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcyksIHNvIG5lc3RlZAogICAgcXVlcmll cyBmcm9tIFNQSSBpbnNpZGUgb3RoZXIgQUZURVIgdHJpZ2dlcnMgZG8gbm90IHRlYXIgZG93bgog ICAgdGhlIGNhY2hlIG1pZC1iYXRjaC4KCiAgLSBYYWN0Q2FsbGJhY2s6IHJpX0Zhc3RQYXRoWGFj dENhbGxiYWNrIE5VTExzIHRoZSBzdGF0aWMgY2FjaGUKICAgIHBvaW50ZXIgYXQgdHJhbnNhY3Rp b24gZW5kLCBoYW5kbGluZyB0aGUgYWJvcnQgcGF0aCB3aGVyZSB0aGUKICAgIGJhdGNoIGNhbGxi YWNrIG5ldmVyIGZpcmVkLgoKICAtIFN1YlhhY3RDYWxsYmFjazogcmlfRmFzdFBhdGhTdWJYYWN0 Q2FsbGJhY2sgTlVMTHMgdGhlIHN0YXRpYwogICAgY2FjaGUgcG9pbnRlciBvbiBzdWJ0cmFuc2Fj dGlvbiBhYm9ydCwgcHJldmVudGluZyB0aGUgYmF0Y2gKICAgIGNhbGxiYWNrIGZyb20gYWNjZXNz aW5nIGFscmVhZHktcmVsZWFzZWQgcmVzb3VyY2VzLgoKICAtIEFmdGVyVHJpZ2dlckJhdGNoSXNB Y3RpdmUoKTogRXhwb3J0ZWQgYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRydWUKICAgIHdoZW4gYWZ0 ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0aCA+PSAwLiAgRHVyaW5nIEFMVEVSIFRBQkxFIC4uLiBBREQK ICAgIEZPUkVJR04gS0VZIHZhbGlkYXRpb24sIFJJIHRyaWdnZXJzIGFyZSBjYWxsZWQgZGlyZWN0 bHkgb3V0c2lkZQogICAgdGhlIGFmdGVyLXRyaWdnZXIgZnJhbWV3b3JrLCBzbyBiYXRjaCBjYWxs YmFja3Mgd291bGQgbmV2ZXIgZmlyZS4KICAgIFRoZSBmYXN0LXBhdGggY29kZSB1c2VzIHRoaXMg dG8gZmFsbCBiYWNrIHRvIHRoZSBub24tY2FjaGVkCiAgICBwZXItaW52b2NhdGlvbiBwYXRoIGlu IHRoYXQgY29udGV4dC4KClRvZ2V0aGVyIHdpdGggPGNvbW1pdC1oYXNoLTAwMDE+LCBidWxrIEZL IGluc2VydHMgYXJlIH4yLjl4IGZhc3RlcgooaW50IFBLIC8gaW50IEZLLCAxTSByb3dzLCBQSyB0 YWJsZSBhbmQgaW5kZXggY2FjaGVkIGluIG1lbW9yeSkuCgpBdXRob3I6IEFtaXQgTGFuZ290ZSA8 YW1pdGxhbmdvdGUwOUBnbWFpbC5jb20+CkNvLWF1dGhvcmVkLWJ5OiBKdW53YW5nIFpoYW8gPHpo andwa3VAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogSGFpYm8gWWFuIDx0cmlzdGFuLnlpbUBnbWFp bC5jb20+ClRlc3RlZC1ieTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ErSGl3cUY0QzB3czNjTyt6NWNMa1B1dnduQXdrU3A3 c2Z2Z0dqM3lRPUxpNktOTXFBQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvdHJpZ2dlci5jICAgICAgICAgICAgfCAxMDUgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3JpX3RyaWdnZXJzLmMgICAgICAgfCA1ODMgKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2lu Y2x1ZGUvY29tbWFuZHMvdHJpZ2dlci5oICAgICAgICAgICAgfCAgMTggKwogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQgfCAxMjYgKysrKysKIHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbCAgICAgIHwgMTE4ICsrKysrCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICB8ICAgMyArCiA2IGZpbGVzIGNoYW5nZWQsIDk0OSBp bnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYwppbmRleCA2 NTk2ODQzYThkOC4uNGJjMzFjYWJmZjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMKQEAgLTM4OTMs NiArMzg5Myw4IEBAIHR5cGVkZWYgc3RydWN0IEFmdGVyVHJpZ2dlcnNEYXRhCiAJLyogcGVyLXN1 YnRyYW5zYWN0aW9uLWxldmVsIGRhdGE6ICovCiAJQWZ0ZXJUcmlnZ2Vyc1RyYW5zRGF0YSAqdHJh bnNfc3RhY2s7CS8qIGFycmF5IG9mIHN0cnVjdHMgc2hvd24gYmVsb3cgKi8KIAlpbnQJCQltYXh0 cmFuc2RlcHRoOwkvKiBhbGxvY2F0ZWQgbGVuIG9mIGFib3ZlIGFycmF5ICovCisKKwlMaXN0CSAg ICpiYXRjaF9jYWxsYmFja3M7CS8qIExpc3Qgb2YgQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtICov CiB9IEFmdGVyVHJpZ2dlcnNEYXRhOwogCiBzdHJ1Y3QgQWZ0ZXJUcmlnZ2Vyc1F1ZXJ5RGF0YQpA QCAtMzkyOSw2ICszOTMxLDEzIEBAIHN0cnVjdCBBZnRlclRyaWdnZXJzVGFibGVEYXRhCiAJVHVw bGVUYWJsZVNsb3QgKnN0b3Jlc2xvdDsJLyogZm9yIGNvbnZlcnRpbmcgdG8gdHVwbGVzdG9yZSdz IGZvcm1hdCAqLwogfTsKIAorLyogRW50cnkgaW4gYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9jYWxsYmFj a3MgKi8KK3R5cGVkZWYgc3RydWN0IEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbQoreworCUFmdGVy VHJpZ2dlckJhdGNoQ2FsbGJhY2sgY2FsbGJhY2s7CisJdm9pZAkgICAqYXJnOworfSBBZnRlclRy aWdnZXJDYWxsYmFja0l0ZW07CisKIHN0YXRpYyBBZnRlclRyaWdnZXJzRGF0YSBhZnRlclRyaWdn ZXJzOwogCiBzdGF0aWMgdm9pZCBBZnRlclRyaWdnZXJFeGVjdXRlKEVTdGF0ZSAqZXN0YXRlLApA QCAtMzk2NCw2ICszOTczLDcgQEAgc3RhdGljIFNldENvbnN0cmFpbnRTdGF0ZSBTZXRDb25zdHJh aW50U3RhdGVBZGRJdGVtKFNldENvbnN0cmFpbnRTdGF0ZSBzdGF0ZSwKIAkJCQkJCQkJCQkJCQlP aWQgdGdvaWQsIGJvb2wgdGdpc2RlZmVycmVkKTsKIHN0YXRpYyB2b2lkIGNhbmNlbF9wcmlvcl9z dG10X3RyaWdnZXJzKE9pZCByZWxpZCwgQ21kVHlwZSBjbWRUeXBlLCBpbnQgdGdldmVudCk7CiAK K3N0YXRpYyB2b2lkIEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcyh2b2lkKTsKIAogLyoK ICAqIEdldCB0aGUgRkRXIHR1cGxlc3RvcmUgZm9yIHRoZSBjdXJyZW50IHRyaWdnZXIgcXVlcnkg bGV2ZWwsIGNyZWF0aW5nIGl0CkBAIC01MDg5LDYgKzUwOTksNyBAQCBBZnRlclRyaWdnZXJCZWdp blhhY3Qodm9pZCkKIAkgKi8KIAlhZnRlclRyaWdnZXJzLmZpcmluZ19jb3VudGVyID0gKENvbW1h bmRJZCkgMTsJLyogbXVzdG4ndCBiZSAwICovCiAJYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0aCA9 IC0xOworCWFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzID0gTklMOwogCiAJLyoKIAkgKiBW ZXJpZnkgdGhhdCB0aGVyZSBpcyBubyBsZWZ0b3ZlciBzdGF0ZSByZW1haW5pbmcuICBJZiB0aGVz ZSBhc3NlcnRpb25zCkBAIC01MjEwLDYgKzUyMjEsMTUgQEAgQWZ0ZXJUcmlnZ2VyRW5kUXVlcnko RVN0YXRlICplc3RhdGUpCiAJCQlicmVhazsKIAl9CiAKKwkvKgorCSAqIEZpcmUgYmF0Y2ggY2Fs bGJhY2tzIGJlZm9yZSByZWxlYXNpbmcgcXVlcnktbGV2ZWwgc3RvcmFnZSBhbmQgYmVmb3JlCisJ ICogZGVjcmVtZW50aW5nIHF1ZXJ5X2RlcHRoLiAgQ2FsbGJhY2tzIG1heSBkbyByZWFsIHdvcmsg KGluZGV4IHByb2JlcywKKwkgKiBlcnJvciByZXBvcnRpbmcpIGFuZCByZWx5IG9uIHF1ZXJ5X2Rl cHRoIHN0aWxsIHJlZmxlY3RpbmcgdGhlIGN1cnJlbnQKKwkgKiBiYXRjaCBsZXZlbCBzbyB0aGF0 IG5lc3RlZCBjYWxscyBmcm9tIFNQSSBpbnNpZGUgQUZURVIgdHJpZ2dlcnMgYXJlCisJICogY29y cmVjdGx5IHN1cHByZXNzZWQgYnkgRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzJ3MgZGVw dGggZ3VhcmQuCisJICovCisJRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzKCk7CisKIAkv KiBSZWxlYXNlIHF1ZXJ5LWxldmVsLWxvY2FsIHN0b3JhZ2UsIGluY2x1ZGluZyB0dXBsZXN0b3Jl cyBpZiBhbnkgKi8KIAlBZnRlclRyaWdnZXJGcmVlUXVlcnkoJmFmdGVyVHJpZ2dlcnMucXVlcnlf c3RhY2tbYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0aF0pOwogCkBAIC01MzE3LDYgKzUzMzcsOSBA QCBBZnRlclRyaWdnZXJGaXJlRGVmZXJyZWQodm9pZCkKIAkJCWJyZWFrOwkJCQkvKiBhbGwgZmly ZWQgKi8KIAl9CiAKKwkvKiBGbHVzaCBhbnkgZmFzdC1wYXRoIGJhdGNoZXMgYWNjdW11bGF0ZWQg YnkgdGhlIHRyaWdnZXJzIGp1c3QgZmlyZWQuICovCisJRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2Fs bGJhY2tzKCk7CisKIAkvKgogCSAqIFdlIGRvbid0IGJvdGhlciBmcmVlaW5nIHRoZSBldmVudCBs aXN0LCBzaW5jZSBpdCB3aWxsIGdvIGF3YXkgYW55d2F5CiAJICogKGFuZCBtb3JlIGVmZmljaWVu dGx5IHRoYW4gdmlhIHBmcmVlKSBpbiBBZnRlclRyaWdnZXJFbmRYYWN0LgpAQCAtNjA1OSw2ICs2 MDgyLDExIEBAIEFmdGVyVHJpZ2dlclNldFN0YXRlKENvbnN0cmFpbnRzU2V0U3RtdCAqc3RtdCkK IAkJCQlicmVhazsJCQkvKiBhbGwgZmlyZWQgKi8KIAkJfQogCisJCS8qCisJCSAqIEZsdXNoIGFu eSBmYXN0LXBhdGggYmF0Y2hlcyBhY2N1bXVsYXRlZCBieSB0aGUgdHJpZ2dlcnMganVzdCBmaXJl ZC4KKwkJICovCisJCUZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcygpOworCiAJCWlmIChz bmFwc2hvdF9zZXQpCiAJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCX0KQEAgLTY3NTUsMyArNjc4 Myw4MCBAQCBjaGVja19tb2RpZmllZF92aXJ0dWFsX2dlbmVyYXRlZChUdXBsZURlc2MgdHVwZGVz YywgSGVhcFR1cGxlIHR1cGxlKQogCiAJcmV0dXJuIHR1cGxlOwogfQorCisvKgorICogUmVnaXN0 ZXJBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrCisgKgkJUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBi ZSBjYWxsZWQgd2hlbiB0aGUgY3VycmVudCB0cmlnZ2VyLWZpcmluZworICoJCWJhdGNoIGNvbXBs ZXRlcy4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIHRyaWdnZXIgZnVuY3Rp b24ncyBleGVjdXRpb24gY29udGV4dAorICogKGkuZS4sIHdoaWxlIGFmdGVyVHJpZ2dlcnMgc3Rh dGUgaXMgYWN0aXZlKS4KKyAqCisgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBjbGVhcmVkIGFmdGVy IGludm9jYXRpb24sIHNvIHRoZSBjYWxsZXIgbXVzdAorICogcmUtcmVnaXN0ZXIgZm9yIGVhY2gg bmV3IGJhdGNoIGlmIG5lZWRlZC4KKyAqLwordm9pZAorUmVnaXN0ZXJBZnRlclRyaWdnZXJCYXRj aENhbGxiYWNrKEFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCQkJCSAg dm9pZCAqYXJnKQoreworCUFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSAqaXRlbTsKKwlNZW1vcnlD b250ZXh0IG9sZGN4dDsKKworCS8qCisJICogQWxsb2NhdGUgaW4gVG9wVHJhbnNhY3Rpb25Db250 ZXh0IHNvIHRoZSBpdGVtIHN1cnZpdmVzIGZvciB0aGUgZHVyYXRpb24KKwkgKiBvZiB0aGUgYmF0 Y2gsIHdoaWNoIG1heSBzcGFuIG11bHRpcGxlIHRyaWdnZXIgaW52b2NhdGlvbnMuCisJICoKKwkg KiBNdXN0IGJlIGNhbGxlZCB3aGlsZSBhZnRlclRyaWdnZXJzIGlzIGFjdGl2ZSAocXVlcnlfZGVw dGggPj0gMCk7CisJICogY2FsbGJhY2tzIHJlZ2lzdGVyZWQgb3V0c2lkZSBhIHRyaWdnZXItZmly aW5nIGNvbnRleHQgd291bGQgbmV2ZXIgZmlyZS4KKwkgKi8KKwlBc3NlcnQoYWZ0ZXJUcmlnZ2Vy cy5xdWVyeV9kZXB0aCA+PSAwKTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9w VHJhbnNhY3Rpb25Db250ZXh0KTsKKwlpdGVtID0gcGFsbG9jKHNpemVvZihBZnRlclRyaWdnZXJD YWxsYmFja0l0ZW0pKTsKKwlpdGVtLT5jYWxsYmFjayA9IGNhbGxiYWNrOworCWl0ZW0tPmFyZyA9 IGFyZzsKKwlhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyA9CisJCWxhcHBlbmQoYWZ0ZXJU cmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MsIGl0ZW0pOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjeHQpOworfQorCisvKgorICogRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzCisgKgkJ SW52b2tlIGFuZCBjbGVhciBhbGwgcmVnaXN0ZXJlZCBiYXRjaCBjYWxsYmFja3MuCisgKgorICog T25seSBmaXJlcyBhdCB0aGUgb3V0ZXJtb3N0IHF1ZXJ5IGxldmVsIChxdWVyeV9kZXB0aCA9PSAw KSBvciBmcm9tCisgKiB0b3AtbGV2ZWwgb3BlcmF0aW9ucyAocXVlcnlfZGVwdGggPT0gLTEsIGUu Zy4gQWZ0ZXJUcmlnZ2VyRmlyZURlZmVycmVkCisgKiBhdCBDT01NSVQpLiAgTmVzdGVkIHF1ZXJp ZXMgZnJvbSBTUEkgaW5zaWRlIEFGVEVSIHRyaWdnZXJzIHJ1biBhdAorICogZGVwdGggPiAwIGFu ZCBtdXN0IG5vdCB0ZWFyIGRvd24gcmVzb3VyY2VzIHRoZSBvdXRlciBiYXRjaCBzdGlsbCBuZWVk cy4KKyAqLworc3RhdGljIHZvaWQKK0ZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcyh2b2lk KQoreworCUxpc3RDZWxsICAgKmxjOworCisJaWYgKGFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGgg PiAwKQorCQlyZXR1cm47CisKKwlmb3JlYWNoKGxjLCBhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxi YWNrcykKKwl7CisJCUFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSAqaXRlbSA9IGxmaXJzdChsYyk7 CisKKwkJaXRlbS0+Y2FsbGJhY2soaXRlbS0+YXJnKTsKKwl9CisKKwlsaXN0X2ZyZWVfZGVlcChh ZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcyk7CisJYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9jYWxs YmFja3MgPSBOSUw7Cit9CisKKy8qCisgKiBBZnRlclRyaWdnZXJCYXRjaElzQWN0aXZlCisgKgkJ UmV0dXJucyB0cnVlIGlmIHdlJ3JlIGluc2lkZSBhIHF1ZXJ5LWxldmVsIHRyaWdnZXIgYmF0Y2gg d2hlcmUKKyAqCQlyZWdpc3RlcmVkIGJhdGNoIGNhbGxiYWNrcyB3aWxsIGFjdHVhbGx5IGJlIGlu dm9rZWQuCisgKgorICogVGhpcyBpcyBmYWxzZSBkdXJpbmcgdmFsaWRhdGVGb3JlaWduS2V5Q29u c3RyYWludCgpLCB3aGljaCBjYWxscworICogUkkgdHJpZ2dlciBmdW5jdGlvbnMgZGlyZWN0bHkg b3V0c2lkZSB0aGUgYWZ0ZXItdHJpZ2dlciBmcmFtZXdvcmsuCisgKi8KK2Jvb2wKK0FmdGVyVHJp Z2dlckJhdGNoSXNBY3RpdmUodm9pZCkKK3sKKwlyZXR1cm4gYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9k ZXB0aCA+PSAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdn ZXJzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCAxOGQ0ODlk NzkwZC4uMTY2MWEzZWE1YzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90 cmlnZ2Vycy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCkBAIC0x OTYsNiArMTk2LDQ0IEBAIHR5cGVkZWYgc3RydWN0IFJJX0NvbXBhcmVIYXNoRW50cnkKIAlGbWdy SW5mbwljYXN0X2Z1bmNfZmluZm87CS8qIGluIGNhc2Ugd2UgbXVzdCBjb2VyY2UgaW5wdXQgKi8K IH0gUklfQ29tcGFyZUhhc2hFbnRyeTsKIAorLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIEZLIHJv d3MgYnVmZmVyZWQgYmVmb3JlIGZsdXNoaW5nLgorICoKKyAqIExhcmdlciBiYXRjaGVzIGFtb3J0 aXplIHBlci1mbHVzaCBvdmVyaGVhZCBhbmQgbGV0IHRoZSBTS19TRUFSQ0hBUlJBWQorICogcGF0 aCB3YWxrIG1vcmUgbGVhZiBwYWdlcyBpbiBhIHNpbmdsZSBzb3J0ZWQgdHJhdmVyc2FsLiAgQnV0 IGVhY2gKKyAqIGJ1ZmZlcmVkIHJvdyBpcyBhIG1hdGVyaWFsaXplZCBIZWFwVHVwbGUgaW4gZmx1 c2hfY3h0LCBhbmQgdGhlIG1hdGNoZWRbXQorICogc2NhbiBpbiByaV9GYXN0UGF0aEZsdXNoQXJy YXkoKSBpcyBPKGJhdGNoX3NpemUpIHBlciBpbmRleCBtYXRjaC4KKyAqIEJlbmNobWFya2luZyBz aG93ZWQgbGl0dGxlIGRpZmZlcmVuY2UgYmV0d2VlbiAxNiBhbmQgNjQsIHdpdGggMjU2CisgKiBj b25zaXN0ZW50bHkgc2xvd2VyLiAgNjQgaXMgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgKi8KKyNk ZWZpbmUgUklfRkFTVFBBVEhfQkFUQ0hfU0laRQk2NAorCisvKgorICogUklfRmFzdFBhdGhFbnRy eQorICoJCVBlci1jb25zdHJhaW50IGNhY2hlIG9mIHJlc291cmNlcyBuZWVkZWQgYnkgcmlfRmFz dFBhdGhCYXRjaEZsdXNoKCkuCisgKgorICogT25lIGVudHJ5IHBlciBjb25zdHJhaW50LCBrZXll ZCBieSBwZ19jb25zdHJhaW50IE9JRC4gIENyZWF0ZWQgbGF6aWx5CisgKiBieSByaV9GYXN0UGF0 aEdldEVudHJ5KCkgb24gZmlyc3QgdXNlIHdpdGhpbiBhIHRyaWdnZXItZmlyaW5nIGJhdGNoCisg KiBhbmQgdG9ybiBkb3duIGJ5IHJpX0Zhc3RQYXRoVGVhcmRvd24oKSBhdCBiYXRjaCBlbmQuCisg KgorICogRksgdHVwbGVzIGFyZSBidWZmZXJlZCBpbiBiYXRjaFtdIGFjcm9zcyB0cmlnZ2VyIGlu dm9jYXRpb25zIGFuZAorICogZmx1c2hlZCB3aGVuIHRoZSBidWZmZXIgZmlsbHMgb3IgdGhlIGJh dGNoIGVuZHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IFJJX0Zhc3RQYXRoRW50cnkKK3sKKwlPaWQJ CQljb25vaWQ7CQkJLyogaGFzaCBrZXk6IHBnX2NvbnN0cmFpbnQgT0lEICovCisJUmVsYXRpb24J cGtfcmVsOworCVJlbGF0aW9uCWlkeF9yZWw7CisJVHVwbGVUYWJsZVNsb3QgKnBrX3Nsb3Q7CisJ VHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3Q7CisJTWVtb3J5Q29udGV4dCBmbHVzaF9jeHQ7CS8qIHNo b3J0LWxpdmVkIGNvbnRleHQgZm9yIHBlci1mbHVzaCB3b3JrICovCisKKwlIZWFwVHVwbGUJYmF0 Y2hbUklfRkFTVFBBVEhfQkFUQ0hfU0laRV07CisJaW50CQkJYmF0Y2hfY291bnQ7CisKKwkvKiBG b3IgcmlfRmFzdFBhdGhFbmRCYXRjaCgpICovCisJY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJp aW5mbzsKK30gUklfRmFzdFBhdGhFbnRyeTsKIAogLyoKICAqIExvY2FsIGRhdGEKQEAgLTIwNSw2 ICsyNDMsOCBAQCBzdGF0aWMgSFRBQiAqcmlfcXVlcnlfY2FjaGUgPSBOVUxMOwogc3RhdGljIEhU QUIgKnJpX2NvbXBhcmVfY2FjaGUgPSBOVUxMOwogc3RhdGljIGRjbGlzdF9oZWFkIHJpX2NvbnN0 cmFpbnRfY2FjaGVfdmFsaWRfbGlzdDsKIAorc3RhdGljIEhUQUIgKnJpX2Zhc3RwYXRoX2NhY2hl ID0gTlVMTDsKK3N0YXRpYyBib29sIHJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSBm YWxzZTsKIAogLyoKICAqIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKQEAgLTI1NSw2ICsyOTUs MTYgQEAgc3RhdGljIGJvb2wgcmlfUGVyZm9ybUNoZWNrKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZv ICpyaWluZm8sCiAJCQkJCQkJYm9vbCBkZXRlY3ROZXdSb3dzLCBpbnQgZXhwZWN0X09LKTsKIHN0 YXRpYyB2b2lkIHJpX0Zhc3RQYXRoQ2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5m bywKIAkJCQkJCQkgUmVsYXRpb24gZmtfcmVsLCBUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCk7Citz dGF0aWMgdm9pZCByaV9GYXN0UGF0aEJhdGNoQWRkKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpy aWluZm8sCisJCQkJCQkJCVJlbGF0aW9uIGZrX3JlbCwgVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3Qp Oworc3RhdGljIGludAlyaV9GYXN0UGF0aEZsdXNoQXJyYXkoUklfRmFzdFBhdGhFbnRyeSAqZnBl bnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QsCisJCQkJCQkJCSAgY29uc3QgUklfQ29uc3Ry YWludEluZm8gKnJpaW5mbywgUmVsYXRpb24gZmtfcmVsLAorCQkJCQkJCQkgIFNuYXBzaG90IHNu YXBzaG90LCBJbmRleFNjYW5EZXNjIHNjYW5kZXNjKTsKK3N0YXRpYyBpbnQJcmlfRmFzdFBhdGhG bHVzaExvb3AoUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Ns b3QsCisJCQkJCQkJCSBjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBm a19yZWwsCisJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwgSW5kZXhTY2FuRGVzYyBzY2FuZGVz Yyk7CitzdGF0aWMgdm9pZCByaV9GYXN0UGF0aEJhdGNoRmx1c2goUklfRmFzdFBhdGhFbnRyeSAq ZnBlbnRyeSwKKwkJCQkJCQkJICBSZWxhdGlvbiBma19yZWwpOwogc3RhdGljIGJvb2wgcmlfRmFz dFBhdGhQcm9iZU9uZShSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGlkeF9yZWwsCiAJCQkJCQkJ CUluZGV4U2NhbkRlc2Mgc2NhbmRlc2MsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCQlT bmFwc2hvdCBzbmFwc2hvdCwgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKQEAgLTI3 Nyw2ICszMjcsMTAgQEAgcGdfbm9yZXR1cm4gc3RhdGljIHZvaWQgcmlfUmVwb3J0VmlvbGF0aW9u KGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJCQkJCQkJCQkJICAgUmVsYXRpb24g cGtfcmVsLCBSZWxhdGlvbiBma19yZWwsCiAJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnZp b2xhdG9yc2xvdCwgVHVwbGVEZXNjIHR1cGRlc2MsCiAJCQkJCQkJCQkJICAgaW50IHF1ZXJ5bm8s IGJvb2wgaXNfcmVzdHJpY3QsIGJvb2wgcGFydGdvbmUpOworc3RhdGljIFJJX0Zhc3RQYXRoRW50 cnkgKnJpX0Zhc3RQYXRoR2V0RW50cnkoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywK KwkJCQkJCQkJCQkJIFJlbGF0aW9uIGZrX3JlbCk7CitzdGF0aWMgdm9pZCByaV9GYXN0UGF0aEVu ZEJhdGNoKHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCByaV9GYXN0UGF0aFRlYXJkb3duKHZvaWQp OwogCiAKIC8qCkBAIC0zODcsMTIgKzQ0MSwyMiBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRh ICp0cmlnZGF0YSkKIAkgKiBsb2NrLiAgVGhpcyBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0 byB0aGUgU1BJIHBhdGggYmVsb3cgYnV0IGF2b2lkcwogCSAqIHRoZSBwZXItcm93IGV4ZWN1dG9y IG92ZXJoZWFkLgogCSAqCi0JICogcmlfRmFzdFBhdGhDaGVjaygpIHJlcG9ydHMgdGhlIHZpb2xh dGlvbiBpdHNlbGYgKHZpYSBlcmVwb3J0KSBpZiBubwotCSAqIG1hdGNoaW5nIFBLIHJvdyBpcyBm b3VuZCwgc28gaXQgb25seSByZXR1cm5zIG9uIHN1Y2Nlc3MuCisJICogcmlfRmFzdFBhdGhCYXRj aEFkZCgpIGFuZCByaV9GYXN0UGF0aENoZWNrKCkgcmVwb3J0IHRoZSB2aW9sYXRpb24KKwkgKiB0 aGVtc2VsdmVzIGlmIG5vIG1hdGNoaW5nIFBLIHJvdyBpcyBmb3VuZCwgc28gdGhleSBvbmx5IHJl dHVybiBvbgorCSAqIHN1Y2Nlc3MuCiAJICovCiAJaWYgKHJpX2Zhc3RwYXRoX2lzX2FwcGxpY2Fi bGUocmlpbmZvKSkKIAl7Ci0JCXJpX0Zhc3RQYXRoQ2hlY2socmlpbmZvLCBma19yZWwsIG5ld3Ns b3QpOworCQlpZiAoQWZ0ZXJUcmlnZ2VyQmF0Y2hJc0FjdGl2ZSgpKQorCQl7CisJCQkvKiBCYXRj aGVkIHBhdGg6IGJ1ZmZlciBhbmQgcHJvYmUgaW4gZ3JvdXBzICovCisJCQlyaV9GYXN0UGF0aEJh dGNoQWRkKHJpaW5mbywgZmtfcmVsLCBuZXdzbG90KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8q IEFMVEVSIFRBQkxFIHZhbGlkYXRpb246IHBlci1yb3csIG5vIGNhY2hlICovCisJCQlyaV9GYXN0 UGF0aENoZWNrKHJpaW5mbywgZmtfcmVsLCBuZXdzbG90KTsKKwkJfQogCQlyZXR1cm4gUG9pbnRl ckdldERhdHVtKE5VTEwpOwogCX0KIApAQCAtMjY4MSwxMCArMjc0NSwxNCBAQCByaV9QZXJmb3Jt Q2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAogLyoKICAqIHJpX0Zhc3RQ YXRoQ2hlY2sKLSAqCQlQZXJmb3JtIEZLIGV4aXN0ZW5jZSBjaGVjayB2aWEgZGlyZWN0IGluZGV4 IHByb2JlLCBieXBhc3NpbmcgU1BJLgorICoJCVBlcmZvcm0gcGVyIHJvdyBGSyBleGlzdGVuY2Ug Y2hlY2sgdmlhIGRpcmVjdCBpbmRleCBwcm9iZSwKKyAqCQlieXBhc3NpbmcgU1BJLgogICoKICAq IElmIG5vIG1hdGNoaW5nIFBLIHJvdyBleGlzdHMsIHJlcG9ydCB0aGUgdmlvbGF0aW9uIHZpYSBy aV9SZXBvcnRWaW9sYXRpb24oKSwKICAqIG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMg bm9ybWFsbHkuCisgKgorICogTm90ZTogVGhpcyBpcyBvbmx5IHVzZWQgYnkgdGhlIEFMVEVSIFRB QkxFIHZhbGlkYXRpb24gcGF0aC4gT3RoZXIgcGF0aHMgdXNlCisgKiByaV9GYXN0UGF0aEJhdGNo QWRkKCkuCiAgKi8KIHN0YXRpYyB2b2lkCiByaV9GYXN0UGF0aENoZWNrKGNvbnN0IFJJX0NvbnN0 cmFpbnRJbmZvICpyaWluZm8sCkBAIC0yNzQ4LDYgKzI4MTYsMzEyIEBAIHJpX0Zhc3RQYXRoQ2hl Y2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAl0YWJsZV9jbG9zZShwa19yZWws IE5vTG9jayk7CiB9CiAKKy8qCisgKiByaV9GYXN0UGF0aEJhdGNoQWRkCisgKgkJQnVmZmVyIGEg Rksgcm93IGZvciBiYXRjaGVkIHByb2JpbmcuCisgKgorICogQWRkcyB0aGUgcm93IHRvIHRoZSBi YXRjaCBidWZmZXIuICBXaGVuIHRoZSBidWZmZXIgaXMgZnVsbCwgZmx1c2hlcyBhbGwKKyAqIGJ1 ZmZlcmVkIHJvd3MgYnkgcHJvYmluZyB0aGUgUEsgaW5kZXguICBBbnkgdmlvbGF0aW9uIGlzIHJl cG9ydGVkCisgKiBpbW1lZGlhdGVseSBkdXJpbmcgdGhlIGZsdXNoIHZpYSByaV9SZXBvcnRWaW9s YXRpb24gKHdoaWNoIGRvZXMgbm90IHJldHVybikuCisgKgorICogVXNlcyB0aGUgcGVyLWJhdGNo IGNhY2hlIChSSV9GYXN0UGF0aEVudHJ5KSB0byBhdm9pZCBwZXItcm93IHJlbGF0aW9uCisgKiBv cGVuL2Nsb3NlLCBzbG90IGNyZWF0aW9uLCBldGMuCisgKgorICogVGhlIGJhdGNoIGlzIGFsc28g Zmx1c2hlZCBhdCBlbmQgb2YgdHJpZ2dlci1maXJpbmcgY3ljbGUgdmlhCisgKiByaV9GYXN0UGF0 aEVuZEJhdGNoKCkuCisgKi8KK3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aEJhdGNoQWRkKGNvbnN0 IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCVJlbGF0aW9uIGZrX3JlbCwgVHVwbGVU YWJsZVNsb3QgKm5ld3Nsb3QpCit7CisJUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSA9IHJpX0Zh c3RQYXRoR2V0RW50cnkocmlpbmZvLCBma19yZWwpOworCU1lbW9yeUNvbnRleHQgb2xkY3h0Owor CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZwZW50cnktPmZsdXNoX2N4dCk7CisJ ZnBlbnRyeS0+YmF0Y2hbZnBlbnRyeS0+YmF0Y2hfY291bnRdID0KKwkJRXhlY0NvcHlTbG90SGVh cFR1cGxlKG5ld3Nsb3QpOworCWZwZW50cnktPmJhdGNoX2NvdW50Kys7CisJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGN4dCk7CisKKwlpZiAoZnBlbnRyeS0+YmF0Y2hfY291bnQgPj0gUklfRkFT VFBBVEhfQkFUQ0hfU0laRSkKKwkJcmlfRmFzdFBhdGhCYXRjaEZsdXNoKGZwZW50cnksIGZrX3Jl bCk7Cit9CisKKy8qCisgKiByaV9GYXN0UGF0aEJhdGNoRmx1c2gKKyAqCQlGbHVzaCBhbGwgYnVm ZmVyZWQgRksgcm93cyBieSBwcm9iaW5nIHRoZSBQSyBpbmRleC4KKyAqCisgKiBEaXNwYXRjaGVz IHRvIHJpX0Zhc3RQYXRoRmx1c2hBcnJheSgpIGZvciBzaW5nbGUtY29sdW1uIEZLcworICogKHVz aW5nIFNLX1NFQVJDSEFSUkFZKSBvciByaV9GYXN0UGF0aEZsdXNoTG9vcCgpIGZvciBtdWx0aS1j b2x1bW4KKyAqIEZLcyAocGVyLXJvdyBwcm9iaW5nKS4gIFZpb2xhdGlvbnMgYXJlIHJlcG9ydGVk IGltbWVkaWF0ZWx5IHZpYQorICogcmlfUmVwb3J0VmlvbGF0aW9uKCksIHdoaWNoIGRvZXMgbm90 IHJldHVybi4KKyAqLworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoQmF0Y2hGbHVzaChSSV9GYXN0 UGF0aEVudHJ5ICpmcGVudHJ5LCBSZWxhdGlvbiBma19yZWwpCit7CisJY29uc3QgUklfQ29uc3Ry YWludEluZm8gKnJpaW5mbyA9IGZwZW50cnktPnJpaW5mbzsKKwlSZWxhdGlvbglwa19yZWwgPSBm cGVudHJ5LT5wa19yZWw7CisJUmVsYXRpb24JaWR4X3JlbCA9IGZwZW50cnktPmlkeF9yZWw7CisJ VHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3QgPSBmcGVudHJ5LT5ma19zbG90OworCVNuYXBzaG90CXNu YXBzaG90OworCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CisJT2lkCQkJc2F2ZWRfdXNlcmlkOwor CWludAkJCXNhdmVkX3NlY19jb250ZXh0OworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCWludAkJ CXZpb2xhdGlvbl9pbmRleDsKKworCWlmIChmcGVudHJ5LT5iYXRjaF9jb3VudCA9PSAwKQorCQly ZXR1cm47CisKKwlpZiAocmlpbmZvLT5mcG1ldGEgPT0gTlVMTCkKKwkJcmlfcG9wdWxhdGVfZmFz dHBhdGhfbWV0YWRhdGEoKFJJX0NvbnN0cmFpbnRJbmZvICopIHJpaW5mbywKKwkJCQkJCQkJCSAg ZmtfcmVsLCBpZHhfcmVsKTsKKwlBc3NlcnQocmlpbmZvLT5mcG1ldGEpOworCisJLyoKKwkgKiBD Q0kgYW5kIHNlY3VyaXR5IGNvbnRleHQgc3dpdGNoIGFyZSBkb25lIG9uY2UgZm9yIHRoZSBlbnRp cmUgYmF0Y2guCisJICogUGVyLXJvdyBDQ0kgaXMgdW5uZWNlc3NhcnkgYmVjYXVzZSBieSB0aGUg dGltZSBhIGZsdXNoIHJ1bnMsIGFsbCBBRlRFUgorCSAqIHRyaWdnZXJzIGZvciB0aGUgYnVmZmVy ZWQgcm93cyBoYXZlIGFscmVhZHkgZmlyZWQgKHRyaWdnZXIgaW52b2NhdGlvbnMKKwkgKiBzdHJp Y3RseSBhbHRlcm5hdGUgcGVyIHJvdyksIHNvIGEgc2luZ2xlIENDSSBhZHZhbmNlcyBwYXN0IGFs bCB0aGVpcgorCSAqIGVmZmVjdHMuICBQZXItcm93IHNlY3VyaXR5IGNvbnRleHQgc3dpdGNoIGlz IHVubmVjZXNzYXJ5IGJlY2F1c2UgZWFjaAorCSAqIHJvdydzIHByb2JlIHJ1bnMgZW50aXJlbHkg YXMgdGhlIFBLIHRhYmxlIG93bmVyLCBzYW1lIGFzIHRoZSBTUEkgcGF0aAorCSAqIC0tIHRoZSBv bmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgU1BJIHBhdGggc2V0cyBhbmQgcmVzdG9yZXMgdGhl CisJICogY29udGV4dCBwZXIgcm93IHdoZXJlYXMgd2UgZG8gaXQgb25jZSBhcm91bmQgdGhlIHdo b2xlIGJhdGNoLgorCSAqLworCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisJc25hcHNob3Qg PSBSZWdpc3RlclNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisKKwkvKgorCSAq IGJ1aWxkX2luZGV4X3NjYW5rZXlzKCkgbWF5IHBhbGxvYyBjYXN0IHJlc3VsdHMgZm9yIGNyb3Nz LXR5cGUgRktzLiBVc2UKKwkgKiB0aGUgZW50cnkncyBzaG9ydC1saXZlZCBmbHVzaCBjb250ZXh0 IHNvIHRoZXNlIGRvbid0IGFjY3VtdWxhdGUgYWNyb3NzCisJICogYmF0Y2hlcy4KKwkgKi8KKwlv bGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnBlbnRyeS0+Zmx1c2hfY3h0KTsKKworCXNj YW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwgc25hcHNob3QsIE5VTEws CisJCQkJCQkJICAgcmlpbmZvLT5ua2V5cywgMCk7CisKKwlHZXRVc2VySWRBbmRTZWNDb250ZXh0 KCZzYXZlZF91c2VyaWQsICZzYXZlZF9zZWNfY29udGV4dCk7CisJU2V0VXNlcklkQW5kU2VjQ29u dGV4dChSZWxhdGlvbkdldEZvcm0ocGtfcmVsKS0+cmVsb3duZXIsCisJCQkJCQkgICBzYXZlZF9z ZWNfY29udGV4dCB8CisJCQkJCQkgICBTRUNVUklUWV9MT0NBTF9VU0VSSURfQ0hBTkdFIHwKKwkJ CQkJCSAgIFNFQ1VSSVRZX05PRk9SQ0VfUkxTKTsKKworCWlmIChyaWluZm8tPm5rZXlzID09IDEp CisJCXZpb2xhdGlvbl9pbmRleCA9IHJpX0Zhc3RQYXRoRmx1c2hBcnJheShmcGVudHJ5LCBma19z bG90LCByaWluZm8sCisJCQkJCQkJCQkJCQlma19yZWwsIHNuYXBzaG90LCBzY2FuZGVzYyk7CisJ ZWxzZQorCQl2aW9sYXRpb25faW5kZXggPSByaV9GYXN0UGF0aEZsdXNoTG9vcChmcGVudHJ5LCBm a19zbG90LCByaWluZm8sCisJCQkJCQkJCQkJCSAgIGZrX3JlbCwgc25hcHNob3QsIHNjYW5kZXNj KTsKKworCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZWRfdXNlcmlkLCBzYXZlZF9zZWNfY29u dGV4dCk7CisJVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKKwlpbmRleF9lbmRzY2FuKHNj YW5kZXNjKTsKKworCWlmICh2aW9sYXRpb25faW5kZXggPj0gMCkKKwl7CisJCUV4ZWNTdG9yZUhl YXBUdXBsZShmcGVudHJ5LT5iYXRjaFt2aW9sYXRpb25faW5kZXhdLCBma19zbG90LCBmYWxzZSk7 CisJCXJpX1JlcG9ydFZpb2xhdGlvbihyaWluZm8sIHBrX3JlbCwgZmtfcmVsLAorCQkJCQkJICAg Zmtfc2xvdCwgTlVMTCwKKwkJCQkJCSAgIFJJX1BMQU5fQ0hFQ0tfTE9PS1VQUEssIGZhbHNlLCBm YWxzZSk7CisJfQorCisJTWVtb3J5Q29udGV4dFJlc2V0KGZwZW50cnktPmZsdXNoX2N4dCk7CisJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwkvKiBSZXNldC4gKi8KKwlmcGVudHJ5 LT5iYXRjaF9jb3VudCA9IDA7Cit9CisKKy8qCisgKiByaV9GYXN0UGF0aEZsdXNoTG9vcAorICoJ CU11bHRpLWNvbHVtbiBmYWxsYmFjazogcHJvYmUgdGhlIGluZGV4IG9uY2UgcGVyIGJ1ZmZlcmVk IHJvdy4KKyAqCisgKiBVc2VkIGZvciBjb21wb3NpdGUgZm9yZWlnbiBrZXlzIHdoZXJlIFNLX1NF QVJDSEFSUkFZIGRvZXMgbm90CisgKiBhcHBseS4KKyAqCisgKiBSZXR1cm5zIHRoZSBpbmRleCBv ZiB0aGUgZmlyc3QgdmlvbGF0aW5nIHJvdyBpbiB0aGUgYmF0Y2ggYXJyYXksIG9yIC0xIGlmCisg KiBhbGwgcm93cyBhcmUgdmFsaWQuCisgKi8KK3N0YXRpYyBpbnQKK3JpX0Zhc3RQYXRoRmx1c2hM b29wKFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnksIFR1cGxlVGFibGVTbG90ICpma19zbG90LAor CQkJCQkgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRpb24gZmtfcmVsLAor CQkJCQkgU25hcHNob3Qgc25hcHNob3QsIEluZGV4U2NhbkRlc2Mgc2NhbmRlc2MpCit7CisJUmVs YXRpb24JcGtfcmVsID0gZnBlbnRyeS0+cGtfcmVsOworCVJlbGF0aW9uCWlkeF9yZWwgPSBmcGVu dHJ5LT5pZHhfcmVsOworCVR1cGxlVGFibGVTbG90ICpwa19zbG90ID0gZnBlbnRyeS0+cGtfc2xv dDsKKwlEYXR1bQkJcGtfdmFsc1tJTkRFWF9NQVhfS0VZU107CisJY2hhcgkJcGtfbnVsbHNbSU5E RVhfTUFYX0tFWVNdOworCVNjYW5LZXlEYXRhIHNrZXlbSU5ERVhfTUFYX0tFWVNdOworCWJvb2wJ CWZvdW5kID0gdHJ1ZTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgZnBlbnRyeS0+YmF0Y2hfY291 bnQ7IGkrKykKKwl7CisJCUV4ZWNTdG9yZUhlYXBUdXBsZShmcGVudHJ5LT5iYXRjaFtpXSwgZmtf c2xvdCwgZmFsc2UpOworCQlyaV9FeHRyYWN0VmFsdWVzKGZrX3JlbCwgZmtfc2xvdCwgcmlpbmZv LCBmYWxzZSwgcGtfdmFscywgcGtfbnVsbHMpOworCQlidWlsZF9pbmRleF9zY2Fua2V5cyhyaWlu Zm8sIGlkeF9yZWwsIHBrX3ZhbHMsIHBrX251bGxzLCBza2V5KTsKKworCQlmb3VuZCA9IHJpX0Zh c3RQYXRoUHJvYmVPbmUocGtfcmVsLCBpZHhfcmVsLCBzY2FuZGVzYywgcGtfc2xvdCwKKwkJCQkJ CQkJCXNuYXBzaG90LCByaWluZm8sIHNrZXksIHJpaW5mby0+bmtleXMpOworCisJCS8qIFJlcG9y dCBmaXJzdCB1bm1hdGNoZWQgcm93ICovCisJCWlmICghZm91bmQpCisJCQlyZXR1cm4gaTsKKwl9 CisKKwkvKiBBbGwgcGFzcy4gKi8KKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiByaV9GYXN0UGF0 aEZsdXNoQXJyYXkKKyAqCQlTaW5nbGUtY29sdW1uIGZhc3QgcGF0aCB1c2luZyBTS19TRUFSQ0hB UlJBWS4KKyAqCisgKiBCdWlsZHMgYW4gYXJyYXkgb2YgRksgdmFsdWVzIGFuZCBkb2VzIG9uZSBp bmRleCBzY2FuIHdpdGgKKyAqIFNLX1NFQVJDSEFSUkFZLiAgVGhlIGluZGV4IEFNIHNvcnRzIGFu ZCBkZWR1cGxpY2F0ZXMgdGhlIGFycmF5CisgKiBpbnRlcm5hbGx5LCB0aGVuIHdhbGtzIG1hdGNo aW5nIGxlYWYgcGFnZXMgaW4gb3JkZXIuICBFYWNoCisgKiBtYXRjaGVkIFBLIHR1cGxlIGlzIGxv Y2tlZCBhbmQgcmVjaGVja2VkIGFzIGJlZm9yZTsgYSBtYXRjaGVkW10KKyAqIGJpdG1hcCB0cmFj a3Mgd2hpY2ggYmF0Y2ggaXRlbXMgd2VyZSBzYXRpc2ZpZWQuCisgKgorICogUmV0dXJucyB0aGUg aW5kZXggb2YgdGhlIGZpcnN0IHZpb2xhdGluZyByb3cgaW4gdGhlIGJhdGNoIGFycmF5LCBvciAt MSBpZgorICogYWxsIHJvd3MgYXJlIHZhbGlkLgorICovCitzdGF0aWMgaW50CityaV9GYXN0UGF0 aEZsdXNoQXJyYXkoUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZr X3Nsb3QsCisJCQkJCSAgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRpb24g ZmtfcmVsLAorCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LCBJbmRleFNjYW5EZXNjIHNjYW5kZXNj KQoreworCUZhc3RQYXRoTWV0YSAqZnBtZXRhID0gcmlpbmZvLT5mcG1ldGE7CisJUmVsYXRpb24J cGtfcmVsID0gZnBlbnRyeS0+cGtfcmVsOworCVJlbGF0aW9uCWlkeF9yZWwgPSBmcGVudHJ5LT5p ZHhfcmVsOworCVR1cGxlVGFibGVTbG90ICpwa19zbG90ID0gZnBlbnRyeS0+cGtfc2xvdDsKKwlE YXR1bQkJc2VhcmNoX3ZhbHNbUklfRkFTVFBBVEhfQkFUQ0hfU0laRV07CisJYm9vbAkJbWF0Y2hl ZFtSSV9GQVNUUEFUSF9CQVRDSF9TSVpFXTsKKwlpbnQJCQludmFscyA9IGZwZW50cnktPmJhdGNo X2NvdW50OworCURhdHVtCQlwa192YWxzW0lOREVYX01BWF9LRVlTXTsKKwljaGFyCQlwa19udWxs c1tJTkRFWF9NQVhfS0VZU107CisJU2NhbktleURhdGEgc2tleVsxXTsKKwlSSV9Db21wYXJlSGFz aEVudHJ5ICplbnRyeTsKKwlPaWQJCQllbGVtX3R5cGU7CisJaW50MTYJCWVsZW1fbGVuOworCWJv b2wJCWVsZW1fYnl2YWw7CisJY2hhcgkJZWxlbV9hbGlnbjsKKwlBcnJheVR5cGUgICphcnI7CisK KwlBc3NlcnQoZnBtZXRhKTsKKworCW1lbXNldChtYXRjaGVkLCAwLCBudmFscyAqIHNpemVvZihi b29sKSk7CisKKwkvKgorCSAqIEV4dHJhY3QgRksgdmFsdWVzLCBjYXN0aW5nIHRvIHRoZSBvcGVy YXRvcidzIGV4cGVjdGVkIGlucHV0IHR5cGUgaWYKKwkgKiBuZWVkZWQgKGUuZy4gaW50OCBGSyAt PiBpbnQ0IGZvciBpbnQ0OGVxKS4KKwkgKi8KKwllbnRyeSA9IGZwbWV0YS0+Y29tcGFyZV9lbnRy aWVzWzBdOworCWZvciAoaW50IGkgPSAwOyBpIDwgbnZhbHM7IGkrKykKKwl7CisJCUV4ZWNTdG9y ZUhlYXBUdXBsZShmcGVudHJ5LT5iYXRjaFtpXSwgZmtfc2xvdCwgZmFsc2UpOworCQlyaV9FeHRy YWN0VmFsdWVzKGZrX3JlbCwgZmtfc2xvdCwgcmlpbmZvLCBmYWxzZSwgcGtfdmFscywgcGtfbnVs bHMpOworCisJCS8qIENhc3QgaWYgbmVlZGVkIChlLmcuIGludDggRksgLT4gbnVtZXJpYyBQSykg Ki8KKwkJaWYgKE9pZElzVmFsaWQoZW50cnktPmNhc3RfZnVuY19maW5mby5mbl9vaWQpKQorCQkJ c2VhcmNoX3ZhbHNbaV0gPSBGdW5jdGlvbkNhbGwzKCZlbnRyeS0+Y2FzdF9mdW5jX2ZpbmZvLAor CQkJCQkJCQkJCSAgIHBrX3ZhbHNbMF0sCisJCQkJCQkJCQkJICAgSW50MzJHZXREYXR1bSgtMSks CisJCQkJCQkJCQkJICAgQm9vbEdldERhdHVtKGZhbHNlKSk7CisJCWVsc2UKKwkJCXNlYXJjaF92 YWxzW2ldID0gcGtfdmFsc1swXTsKKwl9CisKKwkvKgorCSAqIEFycmF5IGVsZW1lbnQgdHlwZSBt dXN0IG1hdGNoIHRoZSBvcGVyYXRvcidzIHJpZ2h0LWhhbmQgaW5wdXQgdHlwZSwKKwkgKiB3aGlj aCBpcyB3aGF0IHRoZSBpbmRleCBjb21wYXJpc29uIGV4cGVjdHMgb24gdGhlIHNlYXJjaCBzaWRl LgorCSAqIHJpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKCkgc3RvcmVzIGV4YWN0bHkgdGhp cyB2aWEKKwkgKiBnZXRfb3Bfb3BmYW1pbHlfcHJvcGVydGllcygpLCB3aGljaCByZXR1cm5zIHRo ZSBvcGVyYXRvcidzIHJpZ2h0LWhhbmQKKwkgKiB0eXBlIGFzIHRoZSBzdWJ0eXBlIGZvciBjcm9z cy10eXBlIG9wZXJhdG9ycyAoZS5nLiBpbnQ4IGZvciBpbnQ0OGVxKQorCSAqIGFuZCB0aGUgY29t bW9uIHR5cGUgZm9yIHNhbWUtdHlwZSBvcGVyYXRvcnMuCisJICovCisJZWxlbV90eXBlID0gZnBt ZXRhLT5zdWJ0eXBlc1swXTsKKwlBc3NlcnQoT2lkSXNWYWxpZChlbGVtX3R5cGUpKTsKKwlnZXRf dHlwbGVuYnl2YWxhbGlnbihlbGVtX3R5cGUsICZlbGVtX2xlbiwgJmVsZW1fYnl2YWwsICZlbGVt X2FsaWduKTsKKworCWFyciA9IGNvbnN0cnVjdF9hcnJheShzZWFyY2hfdmFscywgbnZhbHMsCisJ CQkJCQkgIGVsZW1fdHlwZSwgZWxlbV9sZW4sIGVsZW1fYnl2YWwsIGVsZW1fYWxpZ24pOworCisJ LyoKKwkgKiBCdWlsZCBzY2FuIGtleSB3aXRoIFNLX1NFQVJDSEFSUkFZLiAgVGhlIGluZGV4IEFN IGNvZGUgd2lsbCBpbnRlcm5hbGx5CisJICogc29ydCBhbmQgZGVkdXBsaWNhdGUsIHRoZW4gd2Fs ayBsZWFmIHBhZ2VzIGluIG9yZGVyLgorCSAqLworCVNjYW5LZXlFbnRyeUluaXRpYWxpemUoJnNr ZXlbMF0sCisJCQkJCQkgICBTS19TRUFSQ0hBUlJBWSwKKwkJCQkJCSAgIDEsCS8qIGF0dG5vICov CisJCQkJCQkgICBmcG1ldGEtPnN0cmF0c1swXSwKKwkJCQkJCSAgIGZwbWV0YS0+c3VidHlwZXNb MF0sCisJCQkJCQkgICBpZHhfcmVsLT5yZF9pbmRjb2xsYXRpb25bMF0sCisJCQkJCQkgICBmcG1l dGEtPnJlZ29wc1swXSwKKwkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bShhcnIpKTsKKworCWluZGV4 X3Jlc2NhbihzY2FuZGVzYywgc2tleSwgMSwgTlVMTCwgMCk7CisKKwkvKgorCSAqIFdhbGsgYWxs IG1hdGNoZXMuICBUaGUgaW5kZXggQU0gcmV0dXJucyB0aGVtIGluIGluZGV4IG9yZGVyLiAgRm9y IGVhY2gKKwkgKiBtYXRjaCwgZmluZCB3aGljaCBiYXRjaCBpdGVtKHMpIGl0IHNhdGlzZmllcy4K KwkgKi8KKwl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRp cmVjdGlvbiwgcGtfc2xvdCkpCisJeworCQlEYXR1bQkJZm91bmRfdmFsOworCQlib29sCQlmb3Vu ZF9udWxsOworCQlib29sCQljb25jdXJyZW50bHlfdXBkYXRlZDsKKwkJU2NhbktleURhdGEgcmVj aGVja19za2V5WzFdOworCisJCWlmICghcmlfTG9ja1BLVHVwbGUocGtfcmVsLCBwa19zbG90LCBz bmFwc2hvdCwgJmNvbmN1cnJlbnRseV91cGRhdGVkKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIEV4 dHJhY3QgdGhlIFBLIHZhbHVlIGZyb20gdGhlIG1hdGNoZWQgYW5kIGxvY2tlZCB0dXBsZSAqLwor CQlmb3VuZF92YWwgPSBzbG90X2dldGF0dHIocGtfc2xvdCwgcmlpbmZvLT5wa19hdHRudW1zWzBd LCAmZm91bmRfbnVsbCk7CisJCUFzc2VydCghZm91bmRfbnVsbCk7CisKKwkJaWYgKGNvbmN1cnJl bnRseV91cGRhdGVkKQorCQl7CisJCQkvKgorCQkJICogQnVpbGQgYSBzaW5nbGUta2V5IHNjYW5r ZXkgZm9yIHJlY2hlY2suICBXZSBuZWVkIHRoZSBhY3R1YWwgUEsKKwkJCSAqIHZhbHVlIHRoYXQg d2FzIGZvdW5kLCBub3QgdGhlIEZLIHNlYXJjaCB2YWx1ZS4KKwkJCSAqLworCQkJU2NhbktleUVu dHJ5SW5pdGlhbGl6ZSgmcmVjaGVja19za2V5WzBdLCAwLCAxLAorCQkJCQkJCQkgICBmcG1ldGEt PnN0cmF0c1swXSwKKwkJCQkJCQkJICAgZnBtZXRhLT5zdWJ0eXBlc1swXSwKKwkJCQkJCQkJICAg aWR4X3JlbC0+cmRfaW5kY29sbGF0aW9uWzBdLAorCQkJCQkJCQkgICBmcG1ldGEtPnJlZ29wc1sw XSwKKwkJCQkJCQkJICAgZm91bmRfdmFsKTsKKwkJCWlmICghcmVjaGVja19tYXRjaGVkX3BrX3R1 cGxlKGlkeF9yZWwsIHJlY2hlY2tfc2tleSwgcGtfc2xvdCkpCisJCQkJY29udGludWU7CisJCX0K KworCQkvKgorCQkgKiBMaW5lYXIgc2NhbiB0byBtYXJrIGFsbCBiYXRjaCBpdGVtcyBtYXRjaGlu ZyB0aGlzIFBLIHZhbHVlLgorCQkgKiBPKGJhdGNoX3NpemUpIHBlciBtYXRjaCwgTyhiYXRjaF9z aXplXjIpIHdvcnN0IGNhc2UgLS0gZmluZSBmb3IgdGhlCisJCSAqIGN1cnJlbnQgYmF0Y2ggc2l6 ZSBvZiA2NC4KKwkJICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnZhbHM7IGkrKykKKwkJewor CQkJaWYgKCFtYXRjaGVkW2ldICYmCisJCQkJRGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xs KCZlbnRyeS0+ZXFfb3ByX2ZpbmZvLAorCQkJCQkJCQkJCQkgICBpZHhfcmVsLT5yZF9pbmRjb2xs YXRpb25bMF0sCisJCQkJCQkJCQkJCSAgIGZvdW5kX3ZhbCwKKwkJCQkJCQkJCQkJICAgc2VhcmNo X3ZhbHNbaV0pKSkKKwkJCQltYXRjaGVkW2ldID0gdHJ1ZTsKKwkJfQorCX0KKworCS8qIFJlcG9y dCBmaXJzdCB1bm1hdGNoZWQgcm93ICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudmFsczsgaSsr KQorCQlpZiAoIW1hdGNoZWRbaV0pCisJCQlyZXR1cm4gaTsKKworCS8qIEFsbCBwYXNzLiAqLwor CXJldHVybiAtMTsKK30KKwogLyoKICAqIHJpX0Zhc3RQYXRoUHJvYmVPbmUKICAqCQlQcm9iZSB0 aGUgUEsgaW5kZXggZm9yIG9uZSBzZXQgb2Ygc2NhbiBrZXlzLCBsb2NrIHRoZSBtYXRjaGluZwpA QCAtMzY3NSwzICs0MDQ5LDIwNCBAQCBSSV9GS2V5X3RyaWdnZXJfdHlwZShPaWQgdGdmb2lkKQog CiAJcmV0dXJuIFJJX1RSSUdHRVJfTk9ORTsKIH0KKworLyoKKyAqIHJpX0Zhc3RQYXRoRW5kQmF0 Y2gKKyAqCQlGbHVzaCByZW1haW5pbmcgcm93cyBhbmQgdGVhciBkb3duIGNhY2hlZCBzdGF0ZS4K KyAqCisgKiBSZWdpc3RlcmVkIGFzIGFuIEFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2suICBOb3Rl OiB0aGUgZmx1c2ggY2FuCisgKiBkbyByZWFsIHdvcmsgKENDSSwgc2VjdXJpdHkgY29udGV4dCBz d2l0Y2gsIGluZGV4IHByb2JlcykgYW5kIGNhbgorICogdGhyb3cgRVJST1Igb24gYSBjb25zdHJh aW50IHZpb2xhdGlvbi4gIElmIHRoYXQgaGFwcGVucywKKyAqIHJpX0Zhc3RQYXRoVGVhcmRvd24g bmV2ZXIgcnVuczsgUmVzb3VyY2VPd25lciArIFhhY3RDYWxsYmFjaworICogaGFuZGxlIHJlc291 cmNlIGNsZWFudXAgb24gdGhlIGFib3J0IHBhdGguCisgKi8KK3N0YXRpYyB2b2lkCityaV9GYXN0 UGF0aEVuZEJhdGNoKHZvaWQgKmFyZykKK3sKKwlIQVNIX1NFUV9TVEFUVVMgc3RhdHVzOworCVJJ X0Zhc3RQYXRoRW50cnkgKmVudHJ5OworCisJaWYgKHJpX2Zhc3RwYXRoX2NhY2hlID09IE5VTEwp CisJCXJldHVybjsKKworCS8qIEZsdXNoIGFueSBwYXJ0aWFsIGJhdGNoZXMgLS0gY2FuIHRocm93 IEVSUk9SICovCisJaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCByaV9mYXN0cGF0aF9jYWNoZSk7CisJ d2hpbGUgKChlbnRyeSA9IGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7CisJ CWlmIChlbnRyeS0+YmF0Y2hfY291bnQgPiAwKQorCQl7CisJCQlSZWxhdGlvbglma19yZWwgPSB0 YWJsZV9vcGVuKGVudHJ5LT5yaWluZm8tPmZrX3JlbGlkLAorCQkJCQkJCQkJCQlBY2Nlc3NTaGFy ZUxvY2spOworCisJCQlyaV9GYXN0UGF0aEJhdGNoRmx1c2goZW50cnksIGZrX3JlbCk7CisJCQl0 YWJsZV9jbG9zZShma19yZWwsIE5vTG9jayk7CisJCX0KKwl9CisKKwkvKiBPcmRlcmx5IHRlYXJk b3duICovCisJcmlfRmFzdFBhdGhUZWFyZG93bigpOworfQorCisvKgorICogcmlfRmFzdFBhdGhU ZWFyZG93bgorICoJCVRlYXIgZG93biBhbGwgY2FjaGVkIGZhc3QtcGF0aCBzdGF0ZS4KKyAqCisg KiBDYWxsZWQgZnJvbSByaV9GYXN0UGF0aEVuZEJhdGNoKCkgYWZ0ZXIgZmx1c2hpbmcgYW55IHJl bWFpbmluZyByb3dzLgorICovCitzdGF0aWMgdm9pZAorcmlfRmFzdFBhdGhUZWFyZG93bih2b2lk KQoreworCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CisJUklfRmFzdFBhdGhFbnRyeSAqZW50cnk7 CisKKwlpZiAocmlfZmFzdHBhdGhfY2FjaGUgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaGFzaF9z ZXFfaW5pdCgmc3RhdHVzLCByaV9mYXN0cGF0aF9jYWNoZSk7CisJd2hpbGUgKChlbnRyeSA9IGhh c2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7CisJCWlmIChlbnRyeS0+aWR4X3Jl bCkKKwkJCWluZGV4X2Nsb3NlKGVudHJ5LT5pZHhfcmVsLCBOb0xvY2spOworCQlpZiAoZW50cnkt PnBrX3JlbCkKKwkJCXRhYmxlX2Nsb3NlKGVudHJ5LT5wa19yZWwsIE5vTG9jayk7CisJCWlmIChl bnRyeS0+cGtfc2xvdCkKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoZW50cnktPnBr X3Nsb3QpOworCQlpZiAoZW50cnktPmZrX3Nsb3QpCisJCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFi bGVTbG90KGVudHJ5LT5ma19zbG90KTsKKwkJaWYgKGVudHJ5LT5mbHVzaF9jeHQpCisJCQlNZW1v cnlDb250ZXh0RGVsZXRlKGVudHJ5LT5mbHVzaF9jeHQpOworCX0KKworCWhhc2hfZGVzdHJveShy aV9mYXN0cGF0aF9jYWNoZSk7CisJcmlfZmFzdHBhdGhfY2FjaGUgPSBOVUxMOworCXJpX2Zhc3Rw YXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgcmlfZmFz dHBhdGhfeGFjdF9jYWxsYmFja19yZWdpc3RlcmVkID0gZmFsc2U7CisKK3N0YXRpYyB2b2lkCity aV9GYXN0UGF0aFhhY3RDYWxsYmFjayhYYWN0RXZlbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwkv KgorCSAqIE9uIGFib3J0LCBSZXNvdXJjZU93bmVyIGFscmVhZHkgcmVsZWFzZWQgcmVsYXRpb25z OyBvbiBjb21taXQsCisJICogcmlfRmFzdFBhdGhUZWFyZG93biBhbHJlYWR5IHJhbi4gIEVpdGhl ciB3YXksIGp1c3QgTlVMTCB0aGUgc3RhdGljCisJICogcG9pbnRlcnMgc28gdGhleSBkb24ndCBk YW5nbGUgaW50byB0aGUgbmV4dCB0cmFuc2FjdGlvbi4KKwkgKi8KKwlyaV9mYXN0cGF0aF9jYWNo ZSA9IE5VTEw7CisJcmlfZmFzdHBhdGhfY2FsbGJhY2tfcmVnaXN0ZXJlZCA9IGZhbHNlOworfQor CitzdGF0aWMgdm9pZAorcmlfRmFzdFBhdGhTdWJYYWN0Q2FsbGJhY2soU3ViWGFjdEV2ZW50IGV2 ZW50LCBTdWJUcmFuc2FjdGlvbklkIG15U3ViaWQsCisJCQkJCQkgICBTdWJUcmFuc2FjdGlvbklk IHBhcmVudFN1YmlkLCB2b2lkICphcmcpCit7CisJaWYgKGV2ZW50ID09IFNVQlhBQ1RfRVZFTlRf QUJPUlRfU1VCKQorCXsKKwkJLyoKKwkJICogUmVzb3VyY2VPd25lciBhbHJlYWR5IHJlbGVhc2Vk IHJlbGF0aW9ucy4gIE5VTEwgdGhlIHN0YXRpYyBwb2ludGVycworCQkgKiBzbyB0aGUgc3RpbGwt cmVnaXN0ZXJlZCBiYXRjaCBjYWxsYmFjayBiZWNvbWVzIGEgbm8tb3AgZm9yIHRoZSByZXN0CisJ CSAqIG9mIHRoaXMgdHJhbnNhY3Rpb24uCisJCSAqLworCQlyaV9mYXN0cGF0aF9jYWNoZSA9IE5V TEw7CisJCXJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSBmYWxzZTsKKwl9Cit9CisK Ky8qCisgKiByaV9GYXN0UGF0aEdldEVudHJ5CisgKgkJTG9vayB1cCBvciBjcmVhdGUgYSBwZXIt YmF0Y2ggY2FjaGUgZW50cnkgZm9yIHRoZSBnaXZlbiBjb25zdHJhaW50LgorICoKKyAqIE9uIGZp cnN0IGNhbGwgZm9yIGEgY29uc3RyYWludCB3aXRoaW4gYSBiYXRjaDogb3BlbnMgcGtfcmVsIGFu ZCB0aGUKKyAqIGluZGV4LCBhbGxvY2F0ZXMgYSByZXN1bHQgc2xvdCwgYW5kIHJlZ2lzdGVycyB0 aGUgY2xlYW51cCBjYWxsYmFjay4KKyAqCisgKiBPbiBzdWJzZXF1ZW50IGNhbGxzOiByZXR1cm5z IHRoZSBleGlzdGluZyBlbnRyeS4KKyAqLworc3RhdGljIFJJX0Zhc3RQYXRoRW50cnkgKgorcmlf RmFzdFBhdGhHZXRFbnRyeShjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlv biBma19yZWwpCit7CisJUklfRmFzdFBhdGhFbnRyeSAqZW50cnk7CisJYm9vbAkJZm91bmQ7CisK KwkvKiBDcmVhdGUgaGFzaCB0YWJsZSBvbiBmaXJzdCB1c2UgaW4gdGhpcyBiYXRjaCAqLworCWlm IChyaV9mYXN0cGF0aF9jYWNoZSA9PSBOVUxMKQorCXsKKwkJSEFTSENUTAkJY3RsOworCisJCWlm ICghcmlfZmFzdHBhdGhfeGFjdF9jYWxsYmFja19yZWdpc3RlcmVkKQorCQl7CisJCQlSZWdpc3Rl clhhY3RDYWxsYmFjayhyaV9GYXN0UGF0aFhhY3RDYWxsYmFjaywgTlVMTCk7CisJCQlSZWdpc3Rl clN1YlhhY3RDYWxsYmFjayhyaV9GYXN0UGF0aFN1YlhhY3RDYWxsYmFjaywgTlVMTCk7CisJCQly aV9mYXN0cGF0aF94YWN0X2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSB0cnVlOworCQl9CisKKwkJY3Rs LmtleXNpemUgPSBzaXplb2YoT2lkKTsKKwkJY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihSSV9GYXN0 UGF0aEVudHJ5KTsKKwkJY3RsLmhjeHQgPSBUb3BUcmFuc2FjdGlvbkNvbnRleHQ7CisJCXJpX2Zh c3RwYXRoX2NhY2hlID0gaGFzaF9jcmVhdGUoIlJJIGZhc3QtcGF0aCBjYWNoZSIsCisJCQkJCQkJ CQkJMTYsCisJCQkJCQkJCQkJJmN0bCwKKwkJCQkJCQkJCQlIQVNIX0VMRU0gfCBIQVNIX0JMT0JT IHwgSEFTSF9DT05URVhUKTsKKwl9CisKKwllbnRyeSA9IGhhc2hfc2VhcmNoKHJpX2Zhc3RwYXRo X2NhY2hlLCAmcmlpbmZvLT5jb25zdHJhaW50X2lkLAorCQkJCQkJSEFTSF9FTlRFUiwgJmZvdW5k KTsKKworCWlmICghZm91bmQpCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwkJT2lkCQkJ c2F2ZWRfdXNlcmlkOworCQlpbnQJCQlzYXZlZF9zZWNfY29udGV4dDsKKworCQkvKgorCQkgKiBa ZXJvIG91dCBub24ta2V5IGZpZWxkcyBzbyByaV9GYXN0UGF0aFRlYXJkb3duIGlzIHNhZmUgaWYg d2UgZXJyb3IKKwkJICogb3V0IGR1cmluZyBwYXJ0aWFsIGluaXRpYWxpemF0aW9uIGJlbG93Lgor CQkgKi8KKwkJbWVtc2V0KCgoY2hhciAqKSBlbnRyeSkgKyBvZmZzZXRvZihSSV9GYXN0UGF0aEVu dHJ5LCBwa19yZWwpLCAwLAorCQkJICAgc2l6ZW9mKFJJX0Zhc3RQYXRoRW50cnkpIC0gb2Zmc2V0 b2YoUklfRmFzdFBhdGhFbnRyeSwgcGtfcmVsKSk7CisKKwkJb2xkY3h0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKFRvcFRyYW5zYWN0aW9uQ29udGV4dCk7CisKKwkJLyoKKwkJICogT3BlbiBQSyB0 YWJsZSBhbmQgaXRzIHVuaXF1ZSBpbmRleC4KKwkJICoKKwkJICogUm93U2hhcmVMb2NrIG9uIHBr X3JlbCBtYXRjaGVzIHdoYXQgdGhlIFNQSSBwYXRoJ3MgU0VMRUNUIC4uLiBGT1IKKwkJICogS0VZ IFNIQVJFIHdvdWxkIGFjcXVpcmUgYXMgYSByZWxhdGlvbi1sZXZlbCBsb2NrLiBBY2Nlc3NTaGFy ZUxvY2sKKwkJICogb24gdGhlIGluZGV4IGlzIHN0YW5kYXJkIGZvciBpbmRleCBzY2Fucy4KKwkJ ICoKKwkJICogV2UgZG9uJ3QgcmVsZWFzZSB0aGVzZSBsb2NrcyB1bnRpbCBlbmQgb2YgdHJhbnNh Y3Rpb24sIG1hdGNoaW5nIFNQSQorCQkgKiBiZWhhdmlvci4KKwkJICovCisJCWVudHJ5LT5wa19y ZWwgPSB0YWJsZV9vcGVuKHJpaW5mby0+cGtfcmVsaWQsIFJvd1NoYXJlTG9jayk7CisJCWVudHJ5 LT5pZHhfcmVsID0gaW5kZXhfb3BlbihyaWluZm8tPmNvbmluZGlkLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJCWVudHJ5LT5wa19zbG90ID0gdGFibGVfc2xvdF9jcmVhdGUoZW50cnktPnBrX3JlbCwg TlVMTCk7CisJCWVudHJ5LT5ma19zbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KFJlbGF0 aW9uR2V0RGVzY3IoZmtfcmVsKSwKKwkJCQkJCQkJCQkJCSAgJlRUU09wc0hlYXBUdXBsZSk7CisK KwkJZW50cnktPmZsdXNoX2N4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BUcmFuc2FjdGlv bkNvbnRleHQsCisJCQkJCQkJCQkJCQkgIlJJIGZhc3QgcGF0aCBmbHVzaCB0ZW1wb3JhcnkgY29u dGV4dCIsCisJCQkJCQkJCQkJCQkgQUxMT0NTRVRfU01BTExfU0laRVMpOworCisJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCisJCS8qIEVuc3VyZSBjbGVhbnVwIGF0IGVuZCBvZiB0 aGlzIHRyaWdnZXItZmlyaW5nIGJhdGNoICovCisJCWlmICghcmlfZmFzdHBhdGhfY2FsbGJhY2tf cmVnaXN0ZXJlZCkKKwkJeworCQkJUmVnaXN0ZXJBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrKHJp X0Zhc3RQYXRoRW5kQmF0Y2gsIE5VTEwpOworCQkJcmlfZmFzdHBhdGhfY2FsbGJhY2tfcmVnaXN0 ZXJlZCA9IHRydWU7CisJCX0KKworCQlHZXRVc2VySWRBbmRTZWNDb250ZXh0KCZzYXZlZF91c2Vy aWQsICZzYXZlZF9zZWNfY29udGV4dCk7CisJCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoUmVsYXRp b25HZXRGb3JtKGVudHJ5LT5wa19yZWwpLT5yZWxvd25lciwKKwkJCQkJCQkgICBzYXZlZF9zZWNf Y29udGV4dCB8CisJCQkJCQkJICAgU0VDVVJJVFlfTE9DQUxfVVNFUklEX0NIQU5HRSB8CisJCQkJ CQkJICAgU0VDVVJJVFlfTk9GT1JDRV9STFMpOworCQlyaV9DaGVja1Blcm1pc3Npb25zKGVudHJ5 LT5wa19yZWwpOworCQlTZXRVc2VySWRBbmRTZWNDb250ZXh0KHNhdmVkX3VzZXJpZCwgc2F2ZWRf c2VjX2NvbnRleHQpOworCisJCS8qIEZvciByaV9GYXN0UGF0aEVuZEJhdGNoKCkgKi8KKwkJZW50 cnktPnJpaW5mbyA9IHJpaW5mbzsKKwl9CisKKwlyZXR1cm4gZW50cnk7Cit9CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jb21tYW5kcy90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy90 cmlnZ2VyLmgKaW5kZXggMjdhZjUyODQ0MDYuLjc2NjQyOThmNWM4IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jb21tYW5kcy90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdHJp Z2dlci5oCkBAIC0yODksNCArMjg5LDIyIEBAIGV4dGVybiB2b2lkIFJJX1BhcnRpdGlvblJlbW92 ZV9DaGVjayhUcmlnZ2VyICp0cmlnZ2VyLCBSZWxhdGlvbiBma19yZWwsCiAKIGV4dGVybiBpbnQJ UklfRktleV90cmlnZ2VyX3R5cGUoT2lkIHRnZm9pZCk7CiAKKy8qCisgKiBDYWxsYmFjayB0eXBl IGZvciBlbmQtb2YtdHJpZ2dlci1iYXRjaCBub3RpZmljYXRpb25zLgorICoKKyAqIFJlZ2lzdGVy ZWQgdmlhIFJlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjaygpLiAgSW52b2tlZCB3aGVu CisgKiBhIGJhdGNoIG9mIGFmdGVyLXRyaWdnZXIgcHJvY2Vzc2luZyBjb21wbGV0ZXM6CisgKgkt IEFmdGVyVHJpZ2dlckVuZFF1ZXJ5KCkgICAgICAoaW1tZWRpYXRlIGNvbnN0cmFpbnRzKQorICoJ LSBBZnRlclRyaWdnZXJGaXJlRGVmZXJyZWQoKSAgKGRlZmVycmVkIGNvbnN0cmFpbnRzIGF0IENP TU1JVCkKKyAqCS0gQWZ0ZXJUcmlnZ2VyU2V0U3RhdGUoKSAgICAgIChTRVQgQ09OU1RSQUlOVFMg SU1NRURJQVRFKQorICoKKyAqIFRoZSBjYWxsYmFjayBsaXN0IGlzIGNsZWFyZWQgYWZ0ZXIgZWFj aCBiYXRjaC4gIENhbGxlcnMgbXVzdAorICogcmUtcmVnaXN0ZXIgaWYgdGhleSBuZWVkIHRvIGJl IGNhbGxlZCBhZ2FpbiBpbiBhIHN1YnNlcXVlbnQgYmF0Y2guCisgKi8KK3R5cGVkZWYgdm9pZCAo KkFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2spICh2b2lkICphcmcpOworCitleHRlcm4gdm9pZCBS ZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2soQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFj ayBjYWxsYmFjaywKKwkJCQkJCQkJCQkJICB2b2lkICphcmcpOworZXh0ZXJuIGJvb2wgQWZ0ZXJU cmlnZ2VyQmF0Y2hJc0FjdGl2ZSh2b2lkKTsKKwogI2VuZGlmCQkJCQkJCS8qIFRSSUdHRVJfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dAppbmRleCAwODI2ZjUx ODAwNC4uMjE3OWQyYThlOGYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Zm9yZWlnbl9rZXkub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9r ZXkub3V0CkBAIC0zNTA0LDMgKzM1MDQsMTI5IEBAIERFVEFJTDogIGRyb3AgY2FzY2FkZXMgdG8g dGFibGUgZmtwYXJ0MTNfdDEKIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgZmtwYXJ0MTNfdDIKIGRy b3AgY2FzY2FkZXMgdG8gdGFibGUgZmtwYXJ0MTNfdDMKIFJFU0VUIHNlYXJjaF9wYXRoOworLS0g VGVzdHMgZm9yZWlnbiBrZXkgY2hlY2sgZmFzdC1wYXRoIG5vLWNhY2hlIHBhdGguCitDUkVBVEUg VEFCTEUgZnBfcGtfYWx0ZXIgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRPIGZwX3Br X2FsdGVyIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsKK0NSRUFURSBUQUJMRSBmcF9m a19hbHRlciAoYSBpbnQpOworSU5TRVJUIElOVE8gZnBfZmtfYWx0ZXIgU0VMRUNUIGdlbmVyYXRl X3NlcmllcygxLCAxMDApOworLS0gVmFsaWRhdGlvbiBwYXRoOiBzaG91bGQgc3VjY2VlZAorQUxU RVIgVEFCTEUgZnBfZmtfYWx0ZXIgQUREIEZPUkVJR04gS0VZIChhKSBSRUZFUkVOQ0VTIGZwX3Br X2FsdGVyOworSU5TRVJUIElOVE8gZnBfZmtfYWx0ZXIgVkFMVUVTICgxMDEpOyAgLS0gc2hvdWxk IGZhaWwgKGNvbnN0cmFpbnQgYWN0aXZlKQorRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRh YmxlICJmcF9ma19hbHRlciIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBfZmtf YWx0ZXJfYV9ma2V5IgorREVUQUlMOiAgS2V5IChhKT0oMTAxKSBpcyBub3QgcHJlc2VudCBpbiB0 YWJsZSAiZnBfcGtfYWx0ZXIiLgorRFJPUCBUQUJMRSBmcF9ma19hbHRlciwgZnBfcGtfYWx0ZXI7 CistLSBTZXBhcmF0ZSB0ZXN0OiB2YWxpZGF0aW9uIGNhdGNoZXMgZXhpc3RpbmcgdmlvbGF0aW9u CitDUkVBVEUgVEFCTEUgZnBfcGtfYWx0ZXIyIChhIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQg SU5UTyBmcF9wa19hbHRlcjIgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9ma19hbHRlcjIg KGEgaW50KTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVyMiBWQUxVRVMgKDEpLCAoMjAwKTsgIC0t IDIwMCBoYXMgbm8gUEsgbWF0Y2gKK0FMVEVSIFRBQkxFIGZwX2ZrX2FsdGVyMiBBREQgRk9SRUlH TiBLRVkgKGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXIyOyAgLS0gc2hvdWxkIGZhaWwKK0VSUk9S OiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtfYWx0ZXIyIiB2aW9sYXRlcyBmb3Jl aWduIGtleSBjb25zdHJhaW50ICJmcF9ma19hbHRlcjJfYV9ma2V5IgorREVUQUlMOiAgS2V5IChh KT0oMjAwKSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfcGtfYWx0ZXIyIi4KK0RST1AgVEFC TEUgZnBfZmtfYWx0ZXIyLCBmcF9wa19hbHRlcjI7CistLSBUZXN0cyB0aGF0IHRoZSBmYXN0LXBh dGggaGFuZGxlcyBjYWNoaW5nIGZvciBtdWx0aXBsZSBjb25zdHJhaW50cworQ1JFQVRFIFRBQkxF IGZwX3BrMSAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX3BrMiAoYiBpbnQg UFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGsxIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5U TyBmcF9wazIgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9tdWx0aV9mayAoCisgICAgYSBp bnQgUkVGRVJFTkNFUyBmcF9wazEsCisgICAgYiBpbnQgUkVGRVJFTkNFUyBmcF9wazIKKyk7CitJ TlNFUlQgSU5UTyBmcF9tdWx0aV9mayBWQUxVRVMgKDEsIDEpOyAgLS0gdHdvIGNvbnN0cmFpbnRz LCBvbmUgYmF0Y2gKK0lOU0VSVCBJTlRPIGZwX211bHRpX2ZrIFZBTFVFUyAoMSwgMik7ICAtLSBz ZWNvbmQgY29uc3RyYWludCBmYWlscworRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxl ICJmcF9tdWx0aV9mayIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBfbXVsdGlf ZmtfYl9ma2V5IgorREVUQUlMOiAgS2V5IChiKT0oMikgaXMgbm90IHByZXNlbnQgaW4gdGFibGUg ImZwX3BrMiIuCitEUk9QIFRBQkxFIGZwX211bHRpX2ZrLCBmcF9wazEsIGZwX3BrMjsKKy0tIFRl c3QgdGhhdCBmYXN0LXBhdGggY2FjaGUgaGFuZGxlcyBkZWZlcnJlZCBjb25zdHJhaW50cyBhbmQg U0VUIENPTlNUUkFJTlRTIElNTUVESUFURQorQ1JFQVRFIFRBQkxFIGZwX3BrX2RlZmVyIChhIGlu dCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfZGVmZXIgKGEgaW50IFJFRkVSRU5D RVMgZnBfcGtfZGVmZXIgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQpOworSU5TRVJUIElO VE8gZnBfcGtfZGVmZXIgVkFMVUVTICgxKSwgKDIpOworQkVHSU47CitJTlNFUlQgSU5UTyBmcF9m a19kZWZlciBWQUxVRVMgKDEpOworSU5TRVJUIElOVE8gZnBfZmtfZGVmZXIgVkFMVUVTICgyKTsK K1NFVCBDT05TVFJBSU5UUyBBTEwgSU1NRURJQVRFOyAgLS0gZmlyZXMgYmF0Y2ggY2FsbGJhY2sg aGVyZQorSU5TRVJUIElOVE8gZnBfZmtfZGVmZXIgVkFMVUVTICgzKTsgIC0tIHNob3VsZCBmYWls LCBhbHNvIHRlc3RzIHRoYXQgY2FjaGUgd2FzIGNsZWFuZWQgdXAKK0VSUk9SOiAgaW5zZXJ0IG9y IHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtfZGVmZXIiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0 cmFpbnQgImZwX2ZrX2RlZmVyX2FfZmtleSIKK0RFVEFJTDogIEtleSAoYSk9KDMpIGlzIG5vdCBw cmVzZW50IGluIHRhYmxlICJmcF9wa19kZWZlciIuCitDT01NSVQ7CitEUk9QIFRBQkxFIGZwX3Br X2RlZmVyLCBmcF9ma19kZWZlcjsKKy0tIFN1YnRyYW5zYWN0aW9uIGFib3J0OiBjYWNoZWQgc3Rh dGUgbXVzdCBiZSBpbnZhbGlkYXRlZCBvbiBST0xMQkFDSyBUTworQ1JFQVRFIFRBQkxFIGZwX3Br X3N1YnhhY3QgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19zdWJ4YWN0 IChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX3N1YnhhY3QpOworSU5TRVJUIElOVE8gZnBfcGtfc3Vi eGFjdCBWQUxVRVMgKDEpLCAoMik7CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3Qg VkFMVUVTICgxKTsKK1NBVkVQT0lOVCBzcDE7CitJTlNFUlQgSU5UTyBmcF9ma19zdWJ4YWN0IFZB TFVFUyAoMik7CitST0xMQkFDSyBUTyBzcDE7CitJTlNFUlQgSU5UTyBmcF9ma19zdWJ4YWN0IFZB TFVFUyAoMSk7CitDT01NSVQ7CitTRUxFQ1QgKiBGUk9NIGZwX2ZrX3N1YnhhY3Q7CisgYSAKKy0t LQorIDEKKyAxCisoMiByb3dzKQorCitEUk9QIFRBQkxFIGZwX2ZrX3N1YnhhY3QsIGZwX3BrX3N1 YnhhY3Q7CistLSBGSyBjaGVjayBtdXN0IHNlZSBQSyByb3dzIGluc2VydGVkIGJ5IGVhcmxpZXIg QUZURVIgdHJpZ2dlcnMKKy0tIGZpcmluZyBvbiB0aGUgc2FtZSBzdGF0ZW1lbnQKK0NSRUFURSBU QUJMRSBmcF9wa19jY2kgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19j Y2kgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfY2NpKTsKK0NSRUFURSBGVU5DVElPTiBmcF9hdXRv X3BrKCkgUkVUVVJOUyB0cmlnZ2VyIEFTICQkCitCRUdJTgorICBSQUlTRSBOT1RJQ0UgJ2ZwX2F1 dG9fcGsgY2FsbGVkJzsKKyAgSU5TRVJUIElOVE8gZnBfcGtfY2NpIFZBTFVFUyAoTkVXLmEpOwor ICBSRVRVUk4gTkVXOworRU5EICQkIExBTkdVQUdFIHBscGdzcWw7CistLSBOYW1lIHNvcnRzIGJl Zm9yZSB0aGUgUkkgdHJpZ2dlciwgc28gZmlyZXMgZmlyc3QgcGVyIHJvdworQ1JFQVRFIFRSSUdH RVIgIkFBQV9hdXRvIiBBRlRFUiBJTlNFUlQgT04gZnBfZmtfY2NpCisgIEZPUiBFQUNIIFJPVyBF WEVDVVRFIEZVTkNUSU9OIGZwX2F1dG9fcGsoKTsKKy0tIFNob3VsZCBzdWNjZWVkOiBBQUFfYXV0 byBwcm92aXNpb25zIHRoZSBQSyByb3cgYmVmb3JlIFJJIGNoZWNrCitJTlNFUlQgSU5UTyBmcF9m a19jY2kgVkFMVUVTICgxKSwgKDIpLCAoMyk7CitOT1RJQ0U6ICBmcF9hdXRvX3BrIGNhbGxlZAor Tk9USUNFOiAgZnBfYXV0b19wayBjYWxsZWQKK05PVElDRTogIGZwX2F1dG9fcGsgY2FsbGVkCitE Uk9QIFRBQkxFIGZwX2ZrX2NjaSwgZnBfcGtfY2NpOworRFJPUCBGVU5DVElPTiBmcF9hdXRvX3Br OworLS0gTXVsdGktY29sdW1uIEZLOiBleGVyY2lzZXMgYmF0Y2hlZCBwZXItcm93IHByb2Jpbmcg d2l0aCBjb21wb3NpdGUga2V5cworQ1JFQVRFIFRBQkxFIGZwX3BrX211bHRpIChhIGludCwgYiBp bnQsIFBSSU1BUlkgS0VZIChhLCBiKSk7CitJTlNFUlQgSU5UTyBmcF9wa19tdWx0aSBTRUxFQ1Qg aSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitDUkVBVEUgVEFCTEUgZnBfZmtf bXVsdGkgKHggaW50LCBhIGludCwgYiBpbnQsCisgICAgRk9SRUlHTiBLRVkgKGEsIGIpIFJFRkVS RU5DRVMgZnBfcGtfbXVsdGkpOworSU5TRVJUIElOVE8gZnBfZmtfbXVsdGkgU0VMRUNUIGksIGks IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOworSU5TRVJUIElOVE8gZnBfZmtfbXVs dGkgVkFMVUVTICgxLCA5OTksIDk5OSk7CitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFi bGUgImZwX2ZrX211bHRpIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJmcF9ma19t dWx0aV9hX2JfZmtleSIKK0RFVEFJTDogIEtleSAoYSwgYik9KDk5OSwgOTk5KSBpcyBub3QgcHJl c2VudCBpbiB0YWJsZSAiZnBfcGtfbXVsdGkiLgorRFJPUCBUQUJMRSBmcF9ma19tdWx0aSwgZnBf cGtfbXVsdGk7CistLSBEZWZlcnJlZCBjb25zdHJhaW50OiBiYXRjaCBmbHVzaGVkIGF0IENPTU1J VCwgbm90IGF0IHN0YXRlbWVudCBlbmQKK0NSRUFURSBUQUJMRSBmcF9wa19jb21taXQgKGEgaW50 IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19jb21taXQgKGEgaW50IFJFRkVSRU5D RVMgZnBfcGtfY29tbWl0CisgICAgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQpOworSU5T RVJUIElOVE8gZnBfcGtfY29tbWl0IFZBTFVFUyAoMSk7CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZw X2ZrX2NvbW1pdCBWQUxVRVMgKDEpOworSU5TRVJUIElOVE8gZnBfZmtfY29tbWl0IFZBTFVFUyAo MSk7CitJTlNFUlQgSU5UTyBmcF9ma19jb21taXQgVkFMVUVTICg5OTkpOworQ09NTUlUOworRVJS T1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJmcF9ma19jb21taXQiIHZpb2xhdGVzIGZv cmVpZ24ga2V5IGNvbnN0cmFpbnQgImZwX2ZrX2NvbW1pdF9hX2ZrZXkiCitERVRBSUw6ICBLZXkg KGEpPSg5OTkpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9wa19jb21taXQiLgorRFJPUCBU QUJMRSBmcF9ma19jb21taXQsIGZwX3BrX2NvbW1pdDsKKy0tIENyb3NzLXR5cGUgRksgd2l0aCBi dWxrIGluc2VydDogaW50OCBGSyByZWZlcmVuY2luZyBpbnQ0IFBLLAorLS0gdmFsdWVzIGNhc3Qg ZHVyaW5nIGFycmF5IGNvbnN0cnVjdGlvbgorQ1JFQVRFIFRBQkxFIGZwX3BrX2Nyb3NzIChhIGlu dDQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtfY3Jvc3MgU0VMRUNUIGdlbmVyYXRl X3NlcmllcygxLCAyMDApOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2Nyb3NzIChhIGludDggUkVGRVJF TkNFUyBmcF9wa19jcm9zcyk7CitJTlNFUlQgSU5UTyBmcF9ma19jcm9zcyBTRUxFQ1QgZ2VuZXJh dGVfc2VyaWVzKDEsIDIwMCk7CitJTlNFUlQgSU5UTyBmcF9ma19jcm9zcyBWQUxVRVMgKDk5OSk7 CitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImZwX2ZrX2Nyb3NzIiB2aW9sYXRl cyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJmcF9ma19jcm9zc19hX2ZrZXkiCitERVRBSUw6ICBL ZXkgKGEpPSg5OTkpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9wa19jcm9zcyIuCitEUk9Q IFRBQkxFIGZwX2ZrX2Nyb3NzLCBmcF9wa19jcm9zczsKKy0tIER1cGxpY2F0ZSBGSyB2YWx1ZXM6 IHdoZW4gdXNpbmcgdGhlIGJhdGNoZWQgU0FPUCBwYXRoLCBldmVyeQorLS0gcm93IG11c3QgYmUg cmVjb2duaXplZCBhcyBzYXRpc2ZpZWQsIG5vdCBqdXN0IHRoZSBmaXJzdCBtYXRjaAorQ1JFQVRF IFRBQkxFIGZwX3BrX2R1cCAoYSBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtf ZHVwIFZBTFVFUyAoMSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfZHVwIChhIGludCBSRUZFUkVOQ0VT IGZwX3BrX2R1cCk7CitJTlNFUlQgSU5UTyBmcF9ma19kdXAgU0VMRUNUIDEgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwKTsKK0RST1AgVEFCTEUgZnBfZmtfZHVwLCBmcF9wa19kdXA7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwKaW5kZXggZTllZTI5MzMxY2IuLjdhNzI5NDg2YmMy IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsCkBAIC0yNDk4LDMgKzI0OTgsMTIx IEBAIFdJVEggY3RlIEFTICgKIAogRFJPUCBTQ0hFTUEgZmtwYXJ0MTMgQ0FTQ0FERTsKIFJFU0VU IHNlYXJjaF9wYXRoOworCistLSBUZXN0cyBmb3JlaWduIGtleSBjaGVjayBmYXN0LXBhdGggbm8t Y2FjaGUgcGF0aC4KK0NSRUFURSBUQUJMRSBmcF9wa19hbHRlciAoYSBpbnQgUFJJTUFSWSBLRVkp OworSU5TRVJUIElOVE8gZnBfcGtfYWx0ZXIgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAp OworQ1JFQVRFIFRBQkxFIGZwX2ZrX2FsdGVyIChhIGludCk7CitJTlNFUlQgSU5UTyBmcF9ma19h bHRlciBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CistLSBWYWxpZGF0aW9uIHBhdGg6 IHNob3VsZCBzdWNjZWVkCitBTFRFUiBUQUJMRSBmcF9ma19hbHRlciBBREQgRk9SRUlHTiBLRVkg KGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXI7CitJTlNFUlQgSU5UTyBmcF9ma19hbHRlciBWQUxV RVMgKDEwMSk7ICAtLSBzaG91bGQgZmFpbCAoY29uc3RyYWludCBhY3RpdmUpCitEUk9QIFRBQkxF IGZwX2ZrX2FsdGVyLCBmcF9wa19hbHRlcjsKKworLS0gU2VwYXJhdGUgdGVzdDogdmFsaWRhdGlv biBjYXRjaGVzIGV4aXN0aW5nIHZpb2xhdGlvbgorQ1JFQVRFIFRBQkxFIGZwX3BrX2FsdGVyMiAo YSBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtfYWx0ZXIyIFZBTFVFUyAoMSk7 CitDUkVBVEUgVEFCTEUgZnBfZmtfYWx0ZXIyIChhIGludCk7CitJTlNFUlQgSU5UTyBmcF9ma19h bHRlcjIgVkFMVUVTICgxKSwgKDIwMCk7ICAtLSAyMDAgaGFzIG5vIFBLIG1hdGNoCitBTFRFUiBU QUJMRSBmcF9ma19hbHRlcjIgQUREIEZPUkVJR04gS0VZIChhKSBSRUZFUkVOQ0VTIGZwX3BrX2Fs dGVyMjsgIC0tIHNob3VsZCBmYWlsCitEUk9QIFRBQkxFIGZwX2ZrX2FsdGVyMiwgZnBfcGtfYWx0 ZXIyOworCistLSBUZXN0cyB0aGF0IHRoZSBmYXN0LXBhdGggaGFuZGxlcyBjYWNoaW5nIGZvciBt dWx0aXBsZSBjb25zdHJhaW50cworQ1JFQVRFIFRBQkxFIGZwX3BrMSAoYSBpbnQgUFJJTUFSWSBL RVkpOworQ1JFQVRFIFRBQkxFIGZwX3BrMiAoYiBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElO VE8gZnBfcGsxIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9wazIgVkFMVUVTICgxKTsKK0NS RUFURSBUQUJMRSBmcF9tdWx0aV9mayAoCisgICAgYSBpbnQgUkVGRVJFTkNFUyBmcF9wazEsCisg ICAgYiBpbnQgUkVGRVJFTkNFUyBmcF9wazIKKyk7CitJTlNFUlQgSU5UTyBmcF9tdWx0aV9mayBW QUxVRVMgKDEsIDEpOyAgLS0gdHdvIGNvbnN0cmFpbnRzLCBvbmUgYmF0Y2gKK0lOU0VSVCBJTlRP IGZwX211bHRpX2ZrIFZBTFVFUyAoMSwgMik7ICAtLSBzZWNvbmQgY29uc3RyYWludCBmYWlscwor RFJPUCBUQUJMRSBmcF9tdWx0aV9maywgZnBfcGsxLCBmcF9wazI7CisKKy0tIFRlc3QgdGhhdCBm YXN0LXBhdGggY2FjaGUgaGFuZGxlcyBkZWZlcnJlZCBjb25zdHJhaW50cyBhbmQgU0VUIENPTlNU UkFJTlRTIElNTUVESUFURQorQ1JFQVRFIFRBQkxFIGZwX3BrX2RlZmVyIChhIGludCBQUklNQVJZ IEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfZGVmZXIgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtf ZGVmZXIgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQpOworSU5TRVJUIElOVE8gZnBfcGtf ZGVmZXIgVkFMVUVTICgxKSwgKDIpOworCitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2RlZmVy IFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9ma19kZWZlciBWQUxVRVMgKDIpOworU0VUIENP TlNUUkFJTlRTIEFMTCBJTU1FRElBVEU7ICAtLSBmaXJlcyBiYXRjaCBjYWxsYmFjayBoZXJlCitJ TlNFUlQgSU5UTyBmcF9ma19kZWZlciBWQUxVRVMgKDMpOyAgLS0gc2hvdWxkIGZhaWwsIGFsc28g dGVzdHMgdGhhdCBjYWNoZSB3YXMgY2xlYW5lZCB1cAorQ09NTUlUOworRFJPUCBUQUJMRSBmcF9w a19kZWZlciwgZnBfZmtfZGVmZXI7CisKKy0tIFN1YnRyYW5zYWN0aW9uIGFib3J0OiBjYWNoZWQg c3RhdGUgbXVzdCBiZSBpbnZhbGlkYXRlZCBvbiBST0xMQkFDSyBUTworQ1JFQVRFIFRBQkxFIGZw X3BrX3N1YnhhY3QgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19zdWJ4 YWN0IChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX3N1YnhhY3QpOworSU5TRVJUIElOVE8gZnBfcGtf c3VieGFjdCBWQUxVRVMgKDEpLCAoMik7CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1Ynhh Y3QgVkFMVUVTICgxKTsKK1NBVkVQT0lOVCBzcDE7CitJTlNFUlQgSU5UTyBmcF9ma19zdWJ4YWN0 IFZBTFVFUyAoMik7CitST0xMQkFDSyBUTyBzcDE7CitJTlNFUlQgSU5UTyBmcF9ma19zdWJ4YWN0 IFZBTFVFUyAoMSk7CitDT01NSVQ7CitTRUxFQ1QgKiBGUk9NIGZwX2ZrX3N1YnhhY3Q7CitEUk9Q IFRBQkxFIGZwX2ZrX3N1YnhhY3QsIGZwX3BrX3N1YnhhY3Q7CisKKy0tIEZLIGNoZWNrIG11c3Qg c2VlIFBLIHJvd3MgaW5zZXJ0ZWQgYnkgZWFybGllciBBRlRFUiB0cmlnZ2VycworLS0gZmlyaW5n IG9uIHRoZSBzYW1lIHN0YXRlbWVudAorQ1JFQVRFIFRBQkxFIGZwX3BrX2NjaSAoYSBpbnQgUFJJ TUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2NjaSAoYSBpbnQgUkVGRVJFTkNFUyBmcF9w a19jY2kpOworCitDUkVBVEUgRlVOQ1RJT04gZnBfYXV0b19waygpIFJFVFVSTlMgdHJpZ2dlciBB UyAkJAorQkVHSU4KKyAgUkFJU0UgTk9USUNFICdmcF9hdXRvX3BrIGNhbGxlZCc7CisgIElOU0VS VCBJTlRPIGZwX3BrX2NjaSBWQUxVRVMgKE5FVy5hKTsKKyAgUkVUVVJOIE5FVzsKK0VORCAkJCBM QU5HVUFHRSBwbHBnc3FsOworCistLSBOYW1lIHNvcnRzIGJlZm9yZSB0aGUgUkkgdHJpZ2dlciwg c28gZmlyZXMgZmlyc3QgcGVyIHJvdworQ1JFQVRFIFRSSUdHRVIgIkFBQV9hdXRvIiBBRlRFUiBJ TlNFUlQgT04gZnBfZmtfY2NpCisgIEZPUiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OIGZwX2F1 dG9fcGsoKTsKKworLS0gU2hvdWxkIHN1Y2NlZWQ6IEFBQV9hdXRvIHByb3Zpc2lvbnMgdGhlIFBL IHJvdyBiZWZvcmUgUkkgY2hlY2sKK0lOU0VSVCBJTlRPIGZwX2ZrX2NjaSBWQUxVRVMgKDEpLCAo MiksICgzKTsKKworRFJPUCBUQUJMRSBmcF9ma19jY2ksIGZwX3BrX2NjaTsKK0RST1AgRlVOQ1RJ T04gZnBfYXV0b19wazsKKworLS0gTXVsdGktY29sdW1uIEZLOiBleGVyY2lzZXMgYmF0Y2hlZCBw ZXItcm93IHByb2Jpbmcgd2l0aCBjb21wb3NpdGUga2V5cworQ1JFQVRFIFRBQkxFIGZwX3BrX211 bHRpIChhIGludCwgYiBpbnQsIFBSSU1BUlkgS0VZIChhLCBiKSk7CitJTlNFUlQgSU5UTyBmcF9w a19tdWx0aSBTRUxFQ1QgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitDUkVB VEUgVEFCTEUgZnBfZmtfbXVsdGkgKHggaW50LCBhIGludCwgYiBpbnQsCisgICAgRk9SRUlHTiBL RVkgKGEsIGIpIFJFRkVSRU5DRVMgZnBfcGtfbXVsdGkpOworSU5TRVJUIElOVE8gZnBfZmtfbXVs dGkgU0VMRUNUIGksIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKSBpOworSU5TRVJU IElOVE8gZnBfZmtfbXVsdGkgVkFMVUVTICgxLCA5OTksIDk5OSk7CitEUk9QIFRBQkxFIGZwX2Zr X211bHRpLCBmcF9wa19tdWx0aTsKKworLS0gRGVmZXJyZWQgY29uc3RyYWludDogYmF0Y2ggZmx1 c2hlZCBhdCBDT01NSVQsIG5vdCBhdCBzdGF0ZW1lbnQgZW5kCitDUkVBVEUgVEFCTEUgZnBfcGtf Y29tbWl0IChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfY29tbWl0IChh IGludCBSRUZFUkVOQ0VTIGZwX3BrX2NvbW1pdAorICAgIERFRkVSUkFCTEUgSU5JVElBTExZIERF RkVSUkVEKTsKK0lOU0VSVCBJTlRPIGZwX3BrX2NvbW1pdCBWQUxVRVMgKDEpOworQkVHSU47CitJ TlNFUlQgSU5UTyBmcF9ma19jb21taXQgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2Nv bW1pdCBWQUxVRVMgKDEpOworSU5TRVJUIElOVE8gZnBfZmtfY29tbWl0IFZBTFVFUyAoOTk5KTsK K0NPTU1JVDsKK0RST1AgVEFCTEUgZnBfZmtfY29tbWl0LCBmcF9wa19jb21taXQ7CisKKy0tIENy b3NzLXR5cGUgRksgd2l0aCBidWxrIGluc2VydDogaW50OCBGSyByZWZlcmVuY2luZyBpbnQ0IFBL LAorLS0gdmFsdWVzIGNhc3QgZHVyaW5nIGFycmF5IGNvbnN0cnVjdGlvbgorQ1JFQVRFIFRBQkxF IGZwX3BrX2Nyb3NzIChhIGludDQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtfY3Jv c3MgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAyMDApOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2Ny b3NzIChhIGludDggUkVGRVJFTkNFUyBmcF9wa19jcm9zcyk7CitJTlNFUlQgSU5UTyBmcF9ma19j cm9zcyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7CitJTlNFUlQgSU5UTyBmcF9ma19j cm9zcyBWQUxVRVMgKDk5OSk7CitEUk9QIFRBQkxFIGZwX2ZrX2Nyb3NzLCBmcF9wa19jcm9zczsK KworLS0gRHVwbGljYXRlIEZLIHZhbHVlczogd2hlbiB1c2luZyB0aGUgYmF0Y2hlZCBTQU9QIHBh dGgsIGV2ZXJ5CistLSByb3cgbXVzdCBiZSByZWNvZ25pemVkIGFzIHNhdGlzZmllZCwgbm90IGp1 c3QgdGhlIGZpcnN0IG1hdGNoCitDUkVBVEUgVEFCTEUgZnBfcGtfZHVwIChhIGludCBQUklNQVJZ IEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19kdXAgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBm cF9ma19kdXAgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfZHVwKTsKK0lOU0VSVCBJTlRPIGZwX2Zr X2R1cCBTRUxFQ1QgMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOworRFJPUCBUQUJMRSBm cF9ma19kdXAsIGZwX3BrX2R1cDsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNjZjYjE4 YmE1YjkuLjJhNWQ5Mzg3ZmFmIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzAsNiAr MzAsOCBAQCBBZGRGb3JlaWduVXBkYXRlVGFyZ2V0c19mdW5jdGlvbgogQWRkckluZm8KIEFmZml4 Tm9kZQogQWZmaXhOb2RlRGF0YQorQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjaworQWZ0ZXJUcmln Z2VyQ2FsbGJhY2tJdGVtCiBBZnRlclRyaWdnZXJFdmVudAogQWZ0ZXJUcmlnZ2VyRXZlbnRDaHVu awogQWZ0ZXJUcmlnZ2VyRXZlbnREYXRhCkBAIC0yNDg1LDYgKzI0ODcsNyBAQCBSSVgKIFJJX0Nv bXBhcmVIYXNoRW50cnkKIFJJX0NvbXBhcmVLZXkKIFJJX0NvbnN0cmFpbnRJbmZvCitSSV9GYXN0 UGF0aEVudHJ5CiBSSV9RdWVyeUhhc2hFbnRyeQogUklfUXVlcnlLZXkKIFJURUtpbmQKLS0gCjIu NDcuMwoK --000000000000a438c8064e36a87b Content-Type: application/octet-stream; name="v11-0001-Add-fast-path-for-foreign-key-constraint-checks.patch" Content-Disposition: attachment; filename="v11-0001-Add-fast-path-for-foreign-key-constraint-checks.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mncpqz351 RnJvbSAwMmIwOGFmZDNiNjQzNzlkYzA4ZWFiMWZiZGM4NWM4YjM2ZmY4MWJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMjQgTWFyIDIwMjYgMTg6Mjg6MDAgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MSAxLzJdIEFkZCBmYXN0IHBhdGggZm9yIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgY2hlY2tzCgpB ZGQgYSBmYXN0LXBhdGggb3B0aW1pemF0aW9uIGZvciBmb3JlaWduIGtleSBjaGVja3MgdGhhdCBi eXBhc3NlcyBTUEkKYnkgZGlyZWN0bHkgcHJvYmluZyB0aGUgdW5pcXVlIGluZGV4IG9uIHRoZSBy ZWZlcmVuY2VkIHRhYmxlLgoKVGhlIGZhc3QgcGF0aCBhcHBsaWVzIHdoZW4gdGhlIHJlZmVyZW5j ZWQgdGFibGUgaXMgbm90IHBhcnRpdGlvbmVkIGFuZAp0aGUgY29uc3RyYWludCBkb2VzIG5vdCBp bnZvbHZlIHRlbXBvcmFsIHNlbWFudGljcy4gIE90aGVyd2lzZSwgdGhlCmV4aXN0aW5nIFNQSSBw YXRoIGlzIHVzZWQuCgpyaV9GYXN0UGF0aENoZWNrKCkgZXh0cmFjdHMgdGhlIEZLIHZhbHVlcywg YnVpbGRzIHNjYW4ga2V5cywgcGVyZm9ybXMKYW4gaW5kZXggc2NhbiwgYW5kIGxvY2tzIHRoZSBt YXRjaGluZyB0dXBsZSB3aXRoIExvY2tUdXBsZUtleVNoYXJlCnZpYSByaV9Mb2NrUEtUdXBsZSgp LCB3aGljaCBoYW5kbGVzIHRoZSBSSS1zcGVjaWZpYyBzdWJzZXQgb2YKdGFibGVfdHVwbGVfbG9j aygpIHJlc3VsdHMuCgpJZiB0aGUgbG9ja2VkIHR1cGxlIHdhcyByZWFjaGVkIGJ5IGNoYXNpbmcg YW4gdXBkYXRlIGNoYWluCih0bWZkLnRyYXZlcnNlZCksIHJlY2hlY2tfbWF0Y2hlZF9wa190dXBs ZSgpIHZlcmlmaWVzIHRoYXQgdGhlIGtleQppcyBzdGlsbCB0aGUgc2FtZSwgZW11bGF0aW5nIEV2 YWxQbGFuUXVhbC4KClRoZSBzY2FuIHVzZXMgR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpLCBtYXRj aGluZyB3aGF0IHRoZSBTUEkgcGF0aAp1c2VzICh2aWEgX1NQSV9leGVjdXRlX3BsYW4gcHVzaGlu ZyBHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkgYXMgdGhlCmFjdGl2ZSBzbmFwc2hvdCkuICBVbmRl ciBSRUFEIENPTU1JVFRFRCB0aGlzIGlzIGEgZnJlc2ggc25hcHNob3Q7CnVuZGVyIFJFUEVBVEFC TEUgUkVBRCAvIFNFUklBTElaQUJMRSBpdCBpcyB0aGUgZnJvemVuIHRyYW5zYWN0aW9uLQpzdGFy dCBzbmFwc2hvdCwgc28gUEsgcm93cyBjb21taXR0ZWQgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIHN0 YXJ0ZWQKYXJlIG5vdCB2aXNpYmxlLgoKVGhlIHJpX0NoZWNrUGVybWlzc2lvbnMoKSBmdW5jdGlv biBwZXJmb3JtcyBzY2hlbWEgVVNBR0UgYW5kIHRhYmxlClNFTEVDVCBjaGVja3MsIG1hdGNoaW5n IHdoYXQgdGhlIFNQSSBwYXRoIGdldHMgaW1wbGljaXRseSB0aHJvdWdoCnRoZSBleGVjdXRvcidz IHBlcm1pc3Npb24gY2hlY2tzLiAgVGhlIGZhc3QgcGF0aCBhbHNvIHN3aXRjaGVzIHRvCnRoZSBQ SyB0YWJsZSBvd25lcidzIHNlY3VyaXR5IGNvbnRleHQgKHdpdGggU0VDVVJJVFlfTk9GT1JDRV9S TFMpCmJlZm9yZSB0aGUgaW5kZXggcHJvYmUsIG1hdGNoaW5nIHRoZSBTUEkgcGF0aCB3aGVyZSB0 aGUgcXVlcnkgcnVucwphcyB0aGUgdGFibGUgb3duZXIuCgpyaV9IYXNoQ29tcGFyZU9wKCkgaXMg YWRqdXN0ZWQgdG8gaGFuZGxlIGNyb3NzLXR5cGUgZXF1YWxpdHkgb3BlcmF0b3JzCihlLmcuIGlu dDQ4ZXEgZm9yIGludDQgUEsgLyBpbnQ4IEZLKSB3aGljaCBjYW4gYXBwZWFyIGluIGNvbnBmZXFv cC4KVGhlIGV4aXN0aW5nIGNvZGUgYXNzZXJ0ZWQgc2FtZS10eXBlIG9wZXJhdG9ycyBvbmx5LCB3 aGljaCB3YXMgY29ycmVjdApmb3IgaXRzIGV4aXN0aW5nIGNhbGxlcnMgKHJpX0tleXNFcXVhbCBj b21wYXJlcyBzYW1lLXR5cGUgRksgY29sdW1uCnZhbHVlcyB2aWEgZmZfZXFfb3BycyksIGJ1dCB0 aGUgZmFzdCBwYXRoIGlzIHRoZSBmaXJzdCBjYWxsZXIgdG8gcGFzcwpwZl9lcV9vcHJzLCB3aGlj aCBjYW4gYmUgY3Jvc3MtdHlwZS4KClBlci1rZXkgbWV0YWRhdGEgKGNvbXBhcmUgZW50cmllcywg b3BlcmF0b3IgcHJvY2VkdXJlcywgc3RyYXRlZ3kKbnVtYmVycykgaXMgY2FjaGVkIGluIFJJX0Nv bnN0cmFpbnRJbmZvIHZpYQpyaV9wb3B1bGF0ZV9mYXN0cGF0aF9tZXRhZGF0YSgpIG9uIGZpcnN0 IHVzZSwgZWxpbWluYXRpbmcgcmVwZWF0ZWQKY2FsbHMgdG8gcmlfSGFzaENvbXBhcmVPcCgpIGFu ZCBnZXRfb3Bfb3BmYW1pbHlfcHJvcGVydGllcygpLgpjb25pbmRpZCBhbmQgcGtfaXNfcGFydGl0 aW9uZWQgYXJlIGFsc28gY2FjaGVkIGF0IGNvbnN0cmFpbnQgbG9hZAp0aW1lLCBhdm9pZGluZyBw ZXItaW52b2NhdGlvbiBzeXNjYWNoZSBsb29rdXBzIGFuZCB0aGUgbmVlZCB0byBvcGVuCnBrX3Jl bCBiZWZvcmUgZGVjaWRpbmcgd2hldGhlciB0aGUgZmFzdCBwYXRoIGFwcGxpZXMuCgpOZXcgcmVn cmVzc2lvbiB0ZXN0cyBjb3ZlciBSTFMgYnlwYXNzIGFuZCBBQ0wgZW5mb3JjZW1lbnQgZm9yIHRo ZQpmYXN0LXBhdGggcGVybWlzc2lvbiBjaGVja3MuICBOZXcgaXNvbGF0aW9uIHRlc3RzIGV4ZXJj aXNlIGNvbmN1cnJlbnQKUEsgdXBkYXRlcyB1bmRlciBib3RoIFJFQUQgQ09NTUlUVEVEIGFuZCBS RVBFQVRBQkxFIFJFQUQuCgpCZW5jaG1hcmtpbmcgc2hvd3MgfjEuOHggc3BlZWR1cCBmb3IgYnVs ayBGSyBpbnNlcnRzIChpbnQgUEsvaW50IEZLLAoxTSByb3dzLCB3aGVyZSBQSyB0YWJsZSBhbmQg aW5kZXggaXMgY2FjaGVkKS4KCkF1dGhvcjogSnVud2FuZyBaaGFvIDx6aGp3cGt1QGdtYWlsLmNv bT4KQ28tYXV0aG9yZWQtYnk6IEFtaXQgTGFuZ290ZSA8YW1pdGxhbmdvdGUwOUBnbWFpbC5jb20+ ClJldmlld2VkLWJ5OiBIYWlibyBZYW4gPHRyaXN0YW4ueWltQGdtYWlsLmNvbT4KVGVzdGVkLWJ5 OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9DQStIaXdxRjRDMHdzM2NPK3o1Y0xrUHV2d25Bd2tTcDdzZnZnR2ozeVE9TGk2S05N cUFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMu YyAgICAgICAgICAgfCA0NjUgKysrKysrKysrKysrKysrKystCiAuLi4vZXhwZWN0ZWQvZmstY29u Y3VycmVudC1way11cGQub3V0ICAgICAgICAgfCAxMDUgKysrKwogc3JjL3Rlc3QvaXNvbGF0aW9u L2lzb2xhdGlvbl9zY2hlZHVsZSAgICAgICAgIHwgICAxICsKIC4uLi9pc29sYXRpb24vc3BlY3Mv ZmstY29uY3VycmVudC1way11cGQuc3BlYyB8ICA1MyArKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9mb3JlaWduX2tleS5vdXQgICAgIHwgIDQ3ICsrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9m b3JlaWduX2tleS5zcWwgICAgICAgICAgfCAgNjQgKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogNyBmaWxlcyBjaGFuZ2VkLCA3MjIgaW5z ZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv aXNvbGF0aW9uL2V4cGVjdGVkL2ZrLWNvbmN1cnJlbnQtcGstdXBkLm91dAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9may1jb25jdXJyZW50LXBrLXVwZC5zcGVj CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCA2MjMwYTJlYTlhZC4uMThkNDg5 ZDc5MGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCkBAIC0yNCwxMiArMjQsMTUg QEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWls cy5oIgorI2luY2x1ZGUgImFjY2Vzcy9za2V5LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3N5c2F0dHIu aCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5o IgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKICNpbmNsdWRl ICJjb21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNp bmNsdWRlICJleGVjdXRvci9zcGkuaCIKQEAgLTkxLDYgKzk0LDcgQEAKICNkZWZpbmUgUklfVFJJ R1RZUEVfVVBEQVRFIDIKICNkZWZpbmUgUklfVFJJR1RZUEVfREVMRVRFIDMKIAordHlwZWRlZiBz dHJ1Y3QgRmFzdFBhdGhNZXRhIEZhc3RQYXRoTWV0YTsKIAogLyoKICAqIFJJX0NvbnN0cmFpbnRJ bmZvCkBAIC0xMzIsOCArMTM2LDI0IEBAIHR5cGVkZWYgc3RydWN0IFJJX0NvbnN0cmFpbnRJbmZv CiAJT2lkCQkJcGVyaW9kX2ludGVyc2VjdF9vcGVyOwkvKiBhbnlyYW5nZSAqIGFueXJhbmdlIChv cgogCQkJCQkJCQkJCSAqIG11bHRpcmFuZ2VzKSAqLwogCWRsaXN0X25vZGUJdmFsaWRfbGluazsJ CS8qIExpbmsgaW4gbGlzdCBvZiB2YWxpZCBlbnRyaWVzICovCisKKwlPaWQJCQljb25pbmRpZDsK Kwlib29sCQlwa19pc19wYXJ0aXRpb25lZDsKKworCUZhc3RQYXRoTWV0YSAqZnBtZXRhOwogfSBS SV9Db25zdHJhaW50SW5mbzsKIAordHlwZWRlZiBzdHJ1Y3QgUklfQ29tcGFyZUhhc2hFbnRyeSBS SV9Db21wYXJlSGFzaEVudHJ5OworCisvKiBGYXN0LXBhdGggbWV0YWRhdGEgZm9yIFJJIGNoZWNr cyBvbiBmb3JlaWduIGtleSByZWZlcmVuY2luZyB0YWJsZXMgKi8KK3R5cGVkZWYgc3RydWN0IEZh c3RQYXRoTWV0YQoreworCVJJX0NvbXBhcmVIYXNoRW50cnkgKmNvbXBhcmVfZW50cmllc1tSSV9N QVhfTlVNS0VZU107CisJUmVnUHJvY2VkdXJlIHJlZ29wc1tSSV9NQVhfTlVNS0VZU107CisJT2lk CQkJc3VidHlwZXNbUklfTUFYX05VTUtFWVNdOworCWludAkJCXN0cmF0c1tSSV9NQVhfTlVNS0VZ U107Cit9IEZhc3RQYXRoTWV0YTsKKwogLyoKICAqIFJJX1F1ZXJ5S2V5CiAgKgpAQCAtMjMzLDYg KzI1MywyMyBAQCBzdGF0aWMgYm9vbCByaV9QZXJmb3JtQ2hlY2soY29uc3QgUklfQ29uc3RyYWlu dEluZm8gKnJpaW5mbywKIAkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqb2xkc2xvdCwgVHVwbGVUYWJs ZVNsb3QgKm5ld3Nsb3QsCiAJCQkJCQkJYm9vbCBpc19yZXN0cmljdCwKIAkJCQkJCQlib29sIGRl dGVjdE5ld1Jvd3MsIGludCBleHBlY3RfT0spOworc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhDaGVj ayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAorCQkJCQkJCSBSZWxhdGlvbiBma19y ZWwsIFR1cGxlVGFibGVTbG90ICpuZXdzbG90KTsKK3N0YXRpYyBib29sIHJpX0Zhc3RQYXRoUHJv YmVPbmUoUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlvbiBpZHhfcmVsLAorCQkJCQkJCQlJbmRleFNj YW5EZXNjIHNjYW5kZXNjLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJU25hcHNob3Qg c25hcHNob3QsIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCQkJCVNjYW5L ZXlEYXRhICpza2V5LCBpbnQgbmtleXMpOworc3RhdGljIGJvb2wgcmlfTG9ja1BLVHVwbGUoUmVs YXRpb24gcGtfcmVsLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgU25hcHNob3Qgc25hcCwKKwkJCQkJ CSAgIGJvb2wgKmNvbmN1cnJlbnRseV91cGRhdGVkKTsKK3N0YXRpYyBib29sIHJpX2Zhc3RwYXRo X2lzX2FwcGxpY2FibGUoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbyk7CitzdGF0aWMg dm9pZCByaV9DaGVja1Blcm1pc3Npb25zKFJlbGF0aW9uIHF1ZXJ5X3JlbCk7CitzdGF0aWMgYm9v bCByZWNoZWNrX21hdGNoZWRfcGtfdHVwbGUoUmVsYXRpb24gaWR4cmVsLCBTY2FuS2V5RGF0YSAq c2tleXMsCisJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKm5ld19zbG90KTsKK3N0YXRpYyB2b2lk IGJ1aWxkX2luZGV4X3NjYW5rZXlzKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJ CQkJCQkJCSBSZWxhdGlvbiBpZHhfcmVsLCBEYXR1bSAqcGtfdmFscywKKwkJCQkJCQkJIGNoYXIg KnBrX251bGxzLCBTY2FuS2V5IHNrZXlzKTsKK3N0YXRpYyB2b2lkIHJpX3BvcHVsYXRlX2Zhc3Rw YXRoX21ldGFkYXRhKFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCQkJCQkJICBSZWxh dGlvbiBma19yZWwsIFJlbGF0aW9uIGlkeF9yZWwpOwogc3RhdGljIHZvaWQgcmlfRXh0cmFjdFZh bHVlcyhSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCSBjb25zdCBS SV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLCBib29sIHJlbF9pc19waywKIAkJCQkJCQkgRGF0dW0g KnZhbHMsIGNoYXIgKm51bGxzKTsKQEAgLTI3NiwxNCArMzEzLDcgQEAgUklfRktleV9jaGVjayhU cmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJaWYgKCF0YWJsZV90dXBsZV9zYXRpc2ZpZXNfc25hcHNo b3QodHJpZ2RhdGEtPnRnX3JlbGF0aW9uLCBuZXdzbG90LCBTbmFwc2hvdFNlbGYpKQogCQlyZXR1 cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwogCi0JLyoKLQkgKiBHZXQgdGhlIHJlbGF0aW9uIGRl c2NyaXB0b3JzIG9mIHRoZSBGSyBhbmQgUEsgdGFibGVzLgotCSAqCi0JICogcGtfcmVsIGlzIG9w ZW5lZCBpbiBSb3dTaGFyZUxvY2sgbW9kZSBzaW5jZSB0aGF0J3Mgd2hhdCBvdXIgZXZlbnR1YWwK LQkgKiBTRUxFQ1QgRk9SIEtFWSBTSEFSRSB3aWxsIGdldCBvbiBpdC4KLQkgKi8KIAlma19yZWwg PSB0cmlnZGF0YS0+dGdfcmVsYXRpb247Ci0JcGtfcmVsID0gdGFibGVfb3BlbihyaWluZm8tPnBr X3JlbGlkLCBSb3dTaGFyZUxvY2spOwogCiAJc3dpdGNoIChyaV9OdWxsQ2hlY2soUmVsYXRpb25H ZXREZXNjcihma19yZWwpLCBuZXdzbG90LCByaWluZm8sIGZhbHNlKSkKIAl7CkBAIC0yOTMsNyAr MzIzLDYgQEAgUklfRktleV9jaGVjayhUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJCQkgKiBObyBm dXJ0aGVyIGNoZWNrIG5lZWRlZCAtIGFuIGFsbC1OVUxMIGtleSBwYXNzZXMgZXZlcnkgdHlwZSBv ZgogCQkJICogZm9yZWlnbiBrZXkgY29uc3RyYWludC4KIAkJCSAqLwotCQkJdGFibGVfY2xvc2Uo cGtfcmVsLCBSb3dTaGFyZUxvY2spOwogCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsK IAogCQljYXNlIFJJX0tFWVNfU09NRV9OVUxMOgpAQCAtMzE4LDcgKzM0Nyw2IEBAIFJJX0ZLZXlf Y2hlY2soVHJpZ2dlckRhdGEgKnRyaWdkYXRhKQogCQkJCQkJCSBlcnJkZXRhaWwoIk1BVENIIEZV TEwgZG9lcyBub3QgYWxsb3cgbWl4aW5nIG9mIG51bGwgYW5kIG5vbm51bGwga2V5IHZhbHVlcy4i KSwKIAkJCQkJCQkgZXJydGFibGVjb25zdHJhaW50KGZrX3JlbCwKIAkJCQkJCQkJCQkJCU5hbWVT dHIocmlpbmZvLT5jb25uYW1lKSkpKTsKLQkJCQkJdGFibGVfY2xvc2UocGtfcmVsLCBSb3dTaGFy ZUxvY2spOwogCQkJCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwogCiAJCQkJY2FzZSBG S0NPTlNUUl9NQVRDSF9TSU1QTEU6CkBAIC0zMjcsNyArMzU1LDYgQEAgUklfRktleV9jaGVjayhU cmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJCQkJCSAqIE1BVENIIFNJTVBMRSAtIGlmIEFOWSBjb2x1 bW4gaXMgbnVsbCwgdGhlIGtleSBwYXNzZXMKIAkJCQkJICogdGhlIGNvbnN0cmFpbnQuCiAJCQkJ CSAqLwotCQkJCQl0YWJsZV9jbG9zZShwa19yZWwsIFJvd1NoYXJlTG9jayk7CiAJCQkJCXJldHVy biBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiAKICNpZmRlZiBOT1RfVVNFRApAQCAtMzUyLDggKzM3 OSwzMSBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRhICp0cmlnZGF0YSkKIAkJCWJyZWFrOwog CX0KIAorCS8qCisJICogRmFzdCBwYXRoOiBwcm9iZSB0aGUgUEsgdW5pcXVlIGluZGV4IGRpcmVj dGx5LCBieXBhc3NpbmcgU1BJLgorCSAqCisJICogRm9yIG5vbi1wYXJ0aXRpb25lZCwgbm9uLXRl bXBvcmFsIEZLcywgd2UgY2FuIHNraXAgdGhlIFNQSSBtYWNoaW5lcnkKKwkgKiAocGxhbiBjYWNo ZSwgZXhlY3V0b3Igc2V0dXAsIGV0Yy4pIGFuZCBkbyBhIGRpcmVjdCBpbmRleCBzY2FuICsgdHVw bGUKKwkgKiBsb2NrLiAgVGhpcyBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byB0aGUgU1BJ IHBhdGggYmVsb3cgYnV0IGF2b2lkcworCSAqIHRoZSBwZXItcm93IGV4ZWN1dG9yIG92ZXJoZWFk LgorCSAqCisJICogcmlfRmFzdFBhdGhDaGVjaygpIHJlcG9ydHMgdGhlIHZpb2xhdGlvbiBpdHNl bGYgKHZpYSBlcmVwb3J0KSBpZiBubworCSAqIG1hdGNoaW5nIFBLIHJvdyBpcyBmb3VuZCwgc28g aXQgb25seSByZXR1cm5zIG9uIHN1Y2Nlc3MuCisJICovCisJaWYgKHJpX2Zhc3RwYXRoX2lzX2Fw cGxpY2FibGUocmlpbmZvKSkKKwl7CisJCXJpX0Zhc3RQYXRoQ2hlY2socmlpbmZvLCBma19yZWws IG5ld3Nsb3QpOworCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworCX0KKwogCVNQSV9j b25uZWN0KCk7CiAKKwkvKgorCSAqIHBrX3JlbCBpcyBvcGVuZWQgaW4gUm93U2hhcmVMb2NrIG1v ZGUgc2luY2UgdGhhdCdzIHdoYXQgb3VyIGV2ZW50dWFsCisJICogU0VMRUNUIEZPUiBLRVkgU0hB UkUgd2lsbCBnZXQgb24gaXQuCisJICovCisJcGtfcmVsID0gdGFibGVfb3BlbihyaWluZm8tPnBr X3JlbGlkLCBSb3dTaGFyZUxvY2spOworCiAJLyogRmV0Y2ggb3IgcHJlcGFyZSBhIHNhdmVkIHBs YW4gZm9yIHRoZSByZWFsIGNoZWNrICovCiAJcmlfQnVpbGRRdWVyeUtleSgmcWtleSwgcmlpbmZv LCBSSV9QTEFOX0NIRUNLX0xPT0tVUFBLKTsKIApAQCAtMjM1Niw2ICsyNDA2LDEyIEBAIHJpX0xv YWRDb25zdHJhaW50SW5mbyhPaWQgY29uc3RyYWludE9pZCkKIAogCXJpaW5mby0+dmFsaWQgPSB0 cnVlOwogCisJcmlpbmZvLT5jb25pbmRpZCA9IGNvbkZvcm0tPmNvbmluZGlkOworCXJpaW5mby0+ cGtfaXNfcGFydGl0aW9uZWQgPQorCQkoZ2V0X3JlbF9yZWxraW5kKHJpaW5mby0+cGtfcmVsaWQp ID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpOworCisJcmlpbmZvLT5mcG1ldGEgPSBOVUxM OworCiAJcmV0dXJuIHJpaW5mbzsKIH0KIApAQCAtMjYyMyw2ICsyNjc5LDM3OCBAQCByaV9QZXJm b3JtQ2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAlyZXR1cm4gU1BJX3By b2Nlc3NlZCAhPSAwOwogfQogCisvKgorICogcmlfRmFzdFBhdGhDaGVjaworICoJCVBlcmZvcm0g RksgZXhpc3RlbmNlIGNoZWNrIHZpYSBkaXJlY3QgaW5kZXggcHJvYmUsIGJ5cGFzc2luZyBTUEku CisgKgorICogSWYgbm8gbWF0Y2hpbmcgUEsgcm93IGV4aXN0cywgcmVwb3J0IHRoZSB2aW9sYXRp b24gdmlhIHJpX1JlcG9ydFZpb2xhdGlvbigpLAorICogb3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24g cmV0dXJucyBub3JtYWxseS4KKyAqLworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoQ2hlY2soY29u c3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKKwkJCQkgUmVsYXRpb24gZmtfcmVsLCBUdXBs ZVRhYmxlU2xvdCAqbmV3c2xvdCkKK3sKKwlSZWxhdGlvbglwa19yZWw7CisJUmVsYXRpb24JaWR4 X3JlbDsKKwlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOworCVR1cGxlVGFibGVTbG90ICpzbG90Owor CURhdHVtCQlwa192YWxzW0lOREVYX01BWF9LRVlTXTsKKwljaGFyCQlwa19udWxsc1tJTkRFWF9N QVhfS0VZU107CisJU2NhbktleURhdGEgc2tleVtJTkRFWF9NQVhfS0VZU107CisJYm9vbAkJZm91 bmQgPSBmYWxzZTsKKwlPaWQJCQlzYXZlZF91c2VyaWQ7CisJaW50CQkJc2F2ZWRfc2VjX2NvbnRl eHQ7CisJU25hcHNob3QJc25hcHNob3Q7CisKKwkvKgorCSAqIEFkdmFuY2UgdGhlIGNvbW1hbmQg Y291bnRlciBzbyB0aGUgc25hcHNob3Qgc2VlcyB0aGUgZWZmZWN0cyBvZiBwcmlvcgorCSAqIHRy aWdnZXJzIGluIHRoaXMgc3RhdGVtZW50LiAgTWlycm9ycyB3aGF0IHRoZSBTUEkgcGF0aCBkb2Vz IGluCisJICogcmlfUGVyZm9ybUNoZWNrKCkuCisJICovCisJQ29tbWFuZENvdW50ZXJJbmNyZW1l bnQoKTsKKwlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hv dCgpKTsKKworCXBrX3JlbCA9IHRhYmxlX29wZW4ocmlpbmZvLT5wa19yZWxpZCwgUm93U2hhcmVM b2NrKTsKKwlpZHhfcmVsID0gaW5kZXhfb3BlbihyaWluZm8tPmNvbmluZGlkLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHBrX3JlbCwgTlVMTCk7CisJc2Nh bmRlc2MgPSBpbmRleF9iZWdpbnNjYW4ocGtfcmVsLCBpZHhfcmVsLAorCQkJCQkJCSAgIHNuYXBz aG90LCBOVUxMLAorCQkJCQkJCSAgIHJpaW5mby0+bmtleXMsIDApOworCisJaWYgKHJpaW5mby0+ ZnBtZXRhID09IE5VTEwpCisJCXJpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKChSSV9Db25z dHJhaW50SW5mbyAqKSByaWluZm8sCisJCQkJCQkJCQkgIGZrX3JlbCwgaWR4X3JlbCk7CisJQXNz ZXJ0KHJpaW5mby0+ZnBtZXRhKTsKKworCUdldFVzZXJJZEFuZFNlY0NvbnRleHQoJnNhdmVkX3Vz ZXJpZCwgJnNhdmVkX3NlY19jb250ZXh0KTsKKwlTZXRVc2VySWRBbmRTZWNDb250ZXh0KFJlbGF0 aW9uR2V0Rm9ybShwa19yZWwpLT5yZWxvd25lciwKKwkJCQkJCSAgIHNhdmVkX3NlY19jb250ZXh0 IHwKKwkJCQkJCSAgIFNFQ1VSSVRZX0xPQ0FMX1VTRVJJRF9DSEFOR0UgfAorCQkJCQkJICAgU0VD VVJJVFlfTk9GT1JDRV9STFMpOworCXJpX0NoZWNrUGVybWlzc2lvbnMocGtfcmVsKTsKKworCXJp X0V4dHJhY3RWYWx1ZXMoZmtfcmVsLCBuZXdzbG90LCByaWluZm8sIGZhbHNlLCBwa192YWxzLCBw a19udWxscyk7CisJYnVpbGRfaW5kZXhfc2NhbmtleXMocmlpbmZvLCBpZHhfcmVsLCBwa192YWxz LCBwa19udWxscywgc2tleSk7CisJZm91bmQgPSByaV9GYXN0UGF0aFByb2JlT25lKHBrX3JlbCwg aWR4X3JlbCwgc2NhbmRlc2MsIHNsb3QsCisJCQkJCQkJCXNuYXBzaG90LCByaWluZm8sIHNrZXks IHJpaW5mby0+bmtleXMpOworCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZWRfdXNlcmlkLCBz YXZlZF9zZWNfY29udGV4dCk7CisJaW5kZXhfZW5kc2NhbihzY2FuZGVzYyk7CisJRXhlY0Ryb3BT aW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKKwlVbnJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3Qp OworCisJaWYgKCFmb3VuZCkKKwkJcmlfUmVwb3J0VmlvbGF0aW9uKHJpaW5mbywgcGtfcmVsLCBm a19yZWwsCisJCQkJCQkgICBuZXdzbG90LCBOVUxMLAorCQkJCQkJICAgUklfUExBTl9DSEVDS19M T09LVVBQSywgZmFsc2UsIGZhbHNlKTsKKworCWluZGV4X2Nsb3NlKGlkeF9yZWwsIE5vTG9jayk7 CisJdGFibGVfY2xvc2UocGtfcmVsLCBOb0xvY2spOworfQorCisvKgorICogcmlfRmFzdFBhdGhQ cm9iZU9uZQorICoJCVByb2JlIHRoZSBQSyBpbmRleCBmb3Igb25lIHNldCBvZiBzY2FuIGtleXMs IGxvY2sgdGhlIG1hdGNoaW5nCisgKgkJdHVwbGUKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYSBt YXRjaGluZyBQSyByb3cgd2FzIGZvdW5kLCBsb2NrZWQsIGFuZCAoaWYKKyAqIGFwcGxpY2FibGUp IHZpc2libGUgdG8gdGhlIHRyYW5zYWN0aW9uIHNuYXBzaG90LgorICovCitzdGF0aWMgYm9vbAor cmlfRmFzdFBhdGhQcm9iZU9uZShSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGlkeF9yZWwsCisJ CQkJCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2MsIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQlT bmFwc2hvdCBzbmFwc2hvdCwgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKKwkJCQkJ U2NhbktleURhdGEgKnNrZXksIGludCBua2V5cykKK3sKKwlib29sCQlmb3VuZCA9IGZhbHNlOwor CisJaW5kZXhfcmVzY2FuKHNjYW5kZXNjLCBza2V5LCBua2V5cywgTlVMTCwgMCk7CisKKwlpZiAo aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkp CisJeworCQlib29sCQljb25jdXJyZW50bHlfdXBkYXRlZDsKKworCQlpZiAocmlfTG9ja1BLVHVw bGUocGtfcmVsLCBzbG90LCBzbmFwc2hvdCwKKwkJCQkJCSAgICZjb25jdXJyZW50bHlfdXBkYXRl ZCkpCisJCXsKKwkJCWlmIChjb25jdXJyZW50bHlfdXBkYXRlZCkKKwkJCQlmb3VuZCA9IHJlY2hl Y2tfbWF0Y2hlZF9wa190dXBsZShpZHhfcmVsLCBza2V5LCBzbG90KTsKKwkJCWVsc2UKKwkJCQlm b3VuZCA9IHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qCisgKiByaV9M b2NrUEtUdXBsZQorICoJCUxvY2sgYSBQSyB0dXBsZSBmb3VuZCBieSB0aGUgZmFzdC1wYXRoIGlu ZGV4IHNjYW4uCisgKgorICogQ2FsbHMgdGFibGVfdHVwbGVfbG9jaygpIGRpcmVjdGx5IHdpdGgg aGFuZGxpbmcgc3BlY2lmaWMgdG8gUkkgY2hlY2tzLgorICogUmV0dXJucyB0cnVlIGlmIHRoZSB0 dXBsZSB3YXMgc3VjY2Vzc2Z1bGx5IGxvY2tlZC4KKyAqCisgKiBTZXRzICpjb25jdXJyZW50bHlf dXBkYXRlZCB0byB0cnVlIGlmIHRoZSBsb2NrZWQgdHVwbGUgd2FzIHJlYWNoZWQKKyAqIGJ5IGZv bGxvd2luZyBhbiB1cGRhdGUgY2hhaW4gKHRtZmQudHJhdmVyc2VkKSwgaW5kaWNhdGluZyB0aGUg Y2FsbGVyCisgKiBzaG91bGQgcmVjaGVjayB0aGUga2V5LgorICovCitzdGF0aWMgYm9vbAorcmlf TG9ja1BLVHVwbGUoUmVsYXRpb24gcGtfcmVsLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgU25hcHNo b3Qgc25hcCwKKwkJCSAgIGJvb2wgKmNvbmN1cnJlbnRseV91cGRhdGVkKQoreworCVRNX0ZhaWx1 cmVEYXRhIHRtZmQ7CisJVE1fUmVzdWx0CXJlc3VsdDsKKwlpbnQJCQlsb2NrZmxhZ3MgPSBUVVBM RV9MT0NLX0ZMQUdfTE9DS19VUERBVEVfSU5fUFJPR1JFU1M7CisKKwkqY29uY3VycmVudGx5X3Vw ZGF0ZWQgPSBmYWxzZTsKKworCWlmICghSXNvbGF0aW9uVXNlc1hhY3RTbmFwc2hvdCgpKQorCQls b2NrZmxhZ3MgfD0gVFVQTEVfTE9DS19GTEFHX0ZJTkRfTEFTVF9WRVJTSU9OOworCisJcmVzdWx0 ID0gdGFibGVfdHVwbGVfbG9jayhwa19yZWwsICZzbG90LT50dHNfdGlkLCBzbmFwLAorCQkJCQkJ CSAgc2xvdCwgR2V0Q3VycmVudENvbW1hbmRJZChmYWxzZSksCisJCQkJCQkJICBMb2NrVHVwbGVL ZXlTaGFyZSwgTG9ja1dhaXRCbG9jaywKKwkJCQkJCQkgIGxvY2tmbGFncywgJnRtZmQpOworCisJ c3dpdGNoIChyZXN1bHQpCisJeworCQljYXNlIFRNX09rOgorCQkJaWYgKHRtZmQudHJhdmVyc2Vk KQorCQkJCSpjb25jdXJyZW50bHlfdXBkYXRlZCA9IHRydWU7CisJCQlyZXR1cm4gdHJ1ZTsKKwor CQljYXNlIFRNX0RlbGV0ZWQ6CisJCQlpZiAoSXNvbGF0aW9uVXNlc1hhY3RTbmFwc2hvdCgpKQor CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1RfUl9TRVJJQUxJWkFU SU9OX0ZBSUxVUkUpLAorCQkJCQkJIGVycm1zZygiY291bGQgbm90IHNlcmlhbGl6ZSBhY2Nlc3Mg ZHVlIHRvIGNvbmN1cnJlbnQgdXBkYXRlIikpKTsKKwkJCXJldHVybiBmYWxzZTsKKworCQljYXNl IFRNX1VwZGF0ZWQ6CisJCQlpZiAoSXNvbGF0aW9uVXNlc1hhY3RTbmFwc2hvdCgpKQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1RfUl9TRVJJQUxJWkFUSU9OX0ZB SUxVUkUpLAorCQkJCQkJIGVycm1zZygiY291bGQgbm90IHNlcmlhbGl6ZSBhY2Nlc3MgZHVlIHRv IGNvbmN1cnJlbnQgdXBkYXRlIikpKTsKKworCQkJLyoKKwkJCSAqIEluIFJFQUQgQ09NTUlUVEVE LCBGSU5EX0xBU1RfVkVSU0lPTiBzaG91bGQgaGF2ZSBjaGFzZWQgdGhlCisJCQkgKiBjaGFpbiBh bmQgcmV0dXJuZWQgVE1fT2suICBHZXR0aW5nIGhlcmUgbWVhbnMgc29tZXRoaW5nCisJCQkgKiB1 bmV4cGVjdGVkIC0tIGZhbGwgdGhyb3VnaCB0byBlcnJvci4KKwkJCSAqLworCQkJZWxvZyhFUlJP UiwgInVuZXhwZWN0ZWQgdGFibGVfdHVwbGVfbG9jayBzdGF0dXM6ICV1IiwgcmVzdWx0KTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVE1fU2VsZk1vZGlmaWVkOgorCisJCQkvKgorCQkJICogVGhlIGN1 cnJlbnQgY29tbWFuZCBvciBhIGxhdGVyIGNvbW1hbmQgaW4gdGhpcyB0cmFuc2FjdGlvbgorCQkJ ICogbW9kaWZpZWQgdGhlIFBLIHJvdy4gIFRoaXMgc2hvdWxkbid0IG5vcm1hbGx5IGhhcHBlbiBk dXJpbmcgYW4KKwkJCSAqIEZLIGNoZWNrICh3ZSdyZSBub3QgbW9kaWZ5aW5nIHBrX3JlbCksIGJ1 dCBoYW5kbGUgaXQgc2FmZWx5IGJ5CisJCQkgKiB0cmVhdGluZyB0aGUgdHVwbGUgYXMgbm90IGZv dW5kLgorCQkJICovCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJY2FzZSBUTV9JbnZpc2libGU6CisJ CQllbG9nKEVSUk9SLCAiYXR0ZW1wdGVkIHRvIGxvY2sgaW52aXNpYmxlIHR1cGxlIik7CisJCQli cmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCB0YWJsZV90 dXBsZV9sb2NrIHN0YXR1czogJXUiLCByZXN1bHQpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJu IGZhbHNlOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCit9CisKK3N0YXRpYyBib29sCity aV9mYXN0cGF0aF9pc19hcHBsaWNhYmxlKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8p Cit7CisJLyoKKwkgKiBQYXJ0aXRpb25lZCByZWZlcmVuY2VkIHRhYmxlcyBhcmUgc2tpcHBlZCBm b3Igc2ltcGxpY2l0eSwgc2luY2UgdGhleQorCSAqIHJlcXVpcmUgcm91dGluZyB0aGUgcHJvYmUg dGhyb3VnaCB0aGUgY29ycmVjdCBwYXJ0aXRpb24gdXNpbmcKKwkgKiBQYXJ0aXRpb25EaXJlY3Rv cnkuCisJICovCisJaWYgKHJpaW5mby0+cGtfaXNfcGFydGl0aW9uZWQpCisJCXJldHVybiBmYWxz ZTsKKworCS8qCisJICogVGVtcG9yYWwgZm9yZWlnbiBrZXlzIHVzZSByYW5nZSBvdmVybGFwIGFu ZCBjb250YWlubWVudCBzZW1hbnRpY3MgKCYmLAorCSAqIDxALCByYW5nZV9hZ2coKSkgdGhhdCBp bmhlcmVudGx5IGludm9sdmUgYWdncmVnYXRpb24gYW5kIG11bHRpcGxlLXJvdworCSAqIHJlYXNv bmluZywgc28gdGhleSBzdGF5IG9uIHRoZSBTUEkgcGF0aC4KKwkgKi8KKwlpZiAocmlpbmZvLT5o YXNwZXJpb2QpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICog cmlfQ2hlY2tQZXJtaXNzaW9ucworICogICBDaGVjayB0aGF0IHRoZSBjdXJyZW50IHVzZXIgaGFz IHBlcm1pc3Npb25zIHRvIGxvb2sgaW50byB0aGUgc2NoZW1hIG9mCisgKiAgIGFuZCBTRUxFQ1Qg ZnJvbSAncXVlcnlfcmVsJworICovCitzdGF0aWMgdm9pZAorcmlfQ2hlY2tQZXJtaXNzaW9ucyhS ZWxhdGlvbiBxdWVyeV9yZWwpCit7CisJQWNsUmVzdWx0CWFjbHJlc3VsdDsKKworCS8qIFVTQUdF IG9uIHNjaGVtYS4gKi8KKwlhY2xyZXN1bHQgPSBvYmplY3RfYWNsY2hlY2soTmFtZXNwYWNlUmVs YXRpb25JZCwKKwkJCQkJCQkJUmVsYXRpb25HZXROYW1lc3BhY2UocXVlcnlfcmVsKSwKKwkJCQkJ CQkJR2V0VXNlcklkKCksIEFDTF9VU0FHRSk7CisJaWYgKGFjbHJlc3VsdCAhPSBBQ0xDSEVDS19P SykKKwkJYWNsY2hlY2tfZXJyb3IoYWNscmVzdWx0LCBPQkpFQ1RfU0NIRU1BLAorCQkJCQkgICBn ZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXROYW1lc3BhY2UocXVlcnlfcmVsKSkpOworCisJ LyogU0VMRUNUIG9uIHJlbGF0aW9uLiAqLworCWFjbHJlc3VsdCA9IHBnX2NsYXNzX2FjbGNoZWNr KFJlbGF0aW9uR2V0UmVsaWQocXVlcnlfcmVsKSwgR2V0VXNlcklkKCksCisJCQkJCQkJCSAgQUNM X1NFTEVDVCk7CisJaWYgKGFjbHJlc3VsdCAhPSBBQ0xDSEVDS19PSykKKwkJYWNsY2hlY2tfZXJy b3IoYWNscmVzdWx0LCBPQkpFQ1RfVEFCTEUsCisJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHF1ZXJ5X3JlbCkpOworfQorCisvKgorICogcmVjaGVja19tYXRjaGVkX3BrX3R1cGxlCisg KgkJQWZ0ZXIgZm9sbG93aW5nIGFuIHVwZGF0ZSBjaGFpbiAodG1mZC50cmF2ZXJzZWQpLCB2ZXJp ZnkgdGhhdAorICoJCXRoZSBsb2NrZWQgUEsgdHVwbGUgc3RpbGwgbWF0Y2hlcyB0aGUgb3JpZ2lu YWwgc2VhcmNoIGtleXMuCisgKgorICogQSBub24ta2V5IHVwZGF0ZSAoZS5nLiBjaGFuZ2luZyBh IG5vbi1QSyBjb2x1bW4pIGNyZWF0ZXMgYSBuZXcgdHVwbGUgdmVyc2lvbgorICogdGhhdCB3ZSd2 ZSBub3cgbG9ja2VkLCBidXQgdGhlIGtleSBpcyB1bmNoYW5nZWQgLS0gdGhhdCdzIGZpbmUuICBB IGtleQorICogdXBkYXRlIG1lYW5zIHRoZSB2YWx1ZSB3ZSB3ZXJlIGxvb2tpbmcgZm9yIGlzIGdv bmUsIHNvIHdlIHNob3VsZCB0cmVhdCBpdCBhcworICogbm90IGZvdW5kLgorICovCitzdGF0aWMg Ym9vbAorcmVjaGVja19tYXRjaGVkX3BrX3R1cGxlKFJlbGF0aW9uIGlkeHJlbCwgU2NhbktleURh dGEgKnNrZXlzLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpuZXdfc2xvdCkKK3sKKwkvKgorCSAq IFRPRE86IEJ1aWxkSW5kZXhJbmZvIGRvZXMgYSBzeXNjYWNoZSBsb29rdXAgKyBwYWxsb2Mgb24g ZXZlcnkgY2FsbC4KKwkgKiBUaGlzIG9ubHkgZmlyZXMgb24gdGhlIGNvbmN1cnJlbnQtdXBkYXRl IHBhdGggKHRtZmQudHJhdmVyc2VkKSwgd2hpY2gKKwkgKiBzaG91bGQgYmUgcmFyZSwgc28gdGhl IGNvc3QgaXMgYWNjZXB0YWJsZSBmb3Igbm93LiAgSWYgcHJvZmlsaW5nIHNob3dzCisJICogb3Ro ZXJ3aXNlLCBjYWNoZSB0aGUgSW5kZXhJbmZvIGluIEZhc3RQYXRoTWV0YS4KKwkgKi8KKwlJbmRl eEluZm8gICppbmRleEluZm8gPSBCdWlsZEluZGV4SW5mbyhpZHhyZWwpOworCURhdHVtCQl2YWx1 ZXNbSU5ERVhfTUFYX0tFWVNdOworCWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZU107CisJYm9v bAkJbWF0Y2hlZCA9IHRydWU7CisKKwkvKiBQSyBpbmRleGVzIG5ldmVyIGhhdmUgdGhlc2UuICov CisJQXNzZXJ0KGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMgPT0gTklMICYmCisJCSAgIGluZGV4 SW5mby0+aWlfRXhjbHVzaW9uT3BzID09IE5VTEwpOworCisJLyogRm9ybSB0aGUgaW5kZXggdmFs dWVzIGFuZCBpc251bGwgZmxhZ3MgZ2l2ZW4gdGhlIHRhYmxlIHR1cGxlLiAqLworCUZvcm1JbmRl eERhdHVtKGluZGV4SW5mbywgbmV3X3Nsb3QsIE5VTEwsIHZhbHVlcywgaXNudWxsKTsKKwlmb3Ig KGludCBpID0gMDsgaSA8IGluZGV4SW5mby0+aWlfTnVtSW5kZXhLZXlBdHRyczsgaSsrKQorCXsK KwkJU2NhbktleURhdGEgKnNrZXkgPSAmc2tleXNbaV07CisKKwkJLyogQSBQSyBjb2x1bW4gY2Fu IG5ldmVyIGJlIHNldCB0byBOVUxMLiAqLworCQlBc3NlcnQoIWlzbnVsbFtpXSk7CisJCWlmICgh RGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZza2V5LT5za19mdW5jLAorCQkJCQkJCQkJ CQlza2V5LT5za19jb2xsYXRpb24sCisJCQkJCQkJCQkJCXZhbHVlc1tpXSwKKwkJCQkJCQkJCQkJ c2tleS0+c2tfYXJndW1lbnQpKSkKKwkJeworCQkJbWF0Y2hlZCA9IGZhbHNlOworCQkJYnJlYWs7 CisJCX0KKwl9CisKKwlyZXR1cm4gbWF0Y2hlZDsKK30KKworLyoKKyAqIGJ1aWxkX2luZGV4X3Nj YW5rZXlzCisgKgkJQnVpbGQgU2NhbktleXMgZm9yIGEgZGlyZWN0IGluZGV4IHByb2JlIG9mIHRo ZSBQSydzIHVuaXF1ZSBpbmRleC4KKyAqCisgKiBVc2VzIGNhY2hlZCBjb21wYXJlIGVudHJpZXMs IG9wZXJhdG9yIHByb2NlZHVyZXMsIGFuZCBzdHJhdGVneSBudW1iZXJzCisgKiBmcm9tIHJpX3Bv cHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKCkgcmF0aGVyIHRoYW4gbG9va2luZyB0aGVtIHVwIG9u CisgKiBlYWNoIGludm9jYXRpb24uICBDYXN0cyBGSyB2YWx1ZXMgdG8gdGhlIG9wZXJhdG9yJ3Mg ZXhwZWN0ZWQgaW5wdXQKKyAqIHR5cGUgaWYgbmVlZGVkLgorICovCitzdGF0aWMgdm9pZAorYnVp bGRfaW5kZXhfc2NhbmtleXMoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKKwkJCQkJ IFJlbGF0aW9uIGlkeF9yZWwsIERhdHVtICpwa192YWxzLAorCQkJCQkgY2hhciAqcGtfbnVsbHMs IFNjYW5LZXkgc2tleXMpCit7CisJRmFzdFBhdGhNZXRhICpmcG1ldGEgPSByaWluZm8tPmZwbWV0 YTsKKworCUFzc2VydChmcG1ldGEpOworCisJLyoKKwkgKiBNYXkgbmVlZCB0byBjYXN0IGVhY2gg b2YgdGhlIGluZGl2aWR1YWwgdmFsdWVzIG9mIHRoZSBmb3JlaWduIGtleSB0bworCSAqIHRoZSBj b3JyZXNwb25kaW5nIFBLIGNvbHVtbidzIHR5cGUgaWYgdGhlIGVxdWFsaXR5IG9wZXJhdG9yIGRl bWFuZHMgaXQuCisJICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCByaWluZm8tPm5rZXlzOyBpKysp CisJeworCQlpZiAocGtfbnVsbHNbaV0gIT0gJ24nKQorCQl7CisJCQlSSV9Db21wYXJlSGFzaEVu dHJ5ICplbnRyeSA9IGZwbWV0YS0+Y29tcGFyZV9lbnRyaWVzW2ldOworCisJCQlpZiAoT2lkSXNW YWxpZChlbnRyeS0+Y2FzdF9mdW5jX2ZpbmZvLmZuX29pZCkpCisJCQkJcGtfdmFsc1tpXSA9IEZ1 bmN0aW9uQ2FsbDMoJmVudHJ5LT5jYXN0X2Z1bmNfZmluZm8sCisJCQkJCQkJCQkJICAgcGtfdmFs c1tpXSwKKwkJCQkJCQkJCQkgICBJbnQzMkdldERhdHVtKC0xKSwJLyogdHlwbW9kICovCisJCQkJ CQkJCQkJICAgQm9vbEdldERhdHVtKGZhbHNlKSk7CS8qIGltcGxpY2l0IGNvZXJjaW9uICovCisJ CX0KKwl9CisKKwkvKgorCSAqIFNldCB1cCBTY2FuS2V5cyBmb3IgdGhlIGluZGV4IHNjYW4uIFRo aXMgaXMgZXNzZW50aWFsbHkgaG93CisJICogRXhlY0luZGV4QnVpbGRTY2FuS2V5cygpIHNldHMg dGhlbSB1cC4KKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IHJpaW5mby0+bmtleXM7IGkrKykK Kwl7CisJCWludAkJCXBrYXR0cm5vID0gaSArIDE7CisKKwkJU2NhbktleUVudHJ5SW5pdGlhbGl6 ZSgmc2tleXNbaV0sIDAsIHBrYXR0cm5vLAorCQkJCQkJCSAgIGZwbWV0YS0+c3RyYXRzW2ldLCBm cG1ldGEtPnN1YnR5cGVzW2ldLAorCQkJCQkJCSAgIGlkeF9yZWwtPnJkX2luZGNvbGxhdGlvbltp XSwgZnBtZXRhLT5yZWdvcHNbaV0sCisJCQkJCQkJICAgcGtfdmFsc1tpXSk7CisJfQorfQorCisv KgorICogcmlfcG9wdWxhdGVfZmFzdHBhdGhfbWV0YWRhdGEKKyAqCQlDYWNoZSBwZXIta2V5IG1l dGFkYXRhIG5lZWRlZCBieSBidWlsZF9pbmRleF9zY2Fua2V5cygpLgorICoKKyAqIExvb2tzIHVw IHRoZSBjb21wYXJlIGhhc2ggZW50cnksIG9wZXJhdG9yIHByb2NlZHVyZSBPSUQsIGFuZCBpbmRl eAorICogc3RyYXRlZ3kvc3VidHlwZSBmb3IgZWFjaCBrZXkgY29sdW1uLiAgQ2FsbGVkIGxhemls eSBvbiBmaXJzdCB1c2UKKyAqIGFuZCBwZXJzaXN0cyBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBS SV9Db25zdHJhaW50SW5mbyBlbnRyeS4KKyAqLworc3RhdGljIHZvaWQKK3JpX3BvcHVsYXRlX2Zh c3RwYXRoX21ldGFkYXRhKFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCQkJICBSZWxh dGlvbiBma19yZWwsIFJlbGF0aW9uIGlkeF9yZWwpCit7CisJRmFzdFBhdGhNZXRhICpmcG1ldGE7 CisJTWVtb3J5Q29udGV4dCBvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5 Q29udGV4dCk7CisKKwlBc3NlcnQocmlpbmZvICE9IE5VTEwgJiYgcmlpbmZvLT52YWxpZCk7CisK KwlmcG1ldGEgPSBwYWxsb2Nfb2JqZWN0KEZhc3RQYXRoTWV0YSk7CisJZm9yIChpbnQgaSA9IDA7 IGkgPCByaWluZm8tPm5rZXlzOyBpKyspCisJeworCQlPaWQJCQllcV9vcHIgPSByaWluZm8tPnBm X2VxX29wcnNbaV07CisJCU9pZAkJCXR5cGVpZCA9IFJJQXR0VHlwZShma19yZWwsIHJpaW5mby0+ ZmtfYXR0bnVtc1tpXSk7CisJCU9pZAkJCWxlZnR0eXBlOworCQlSSV9Db21wYXJlSGFzaEVudHJ5 ICplbnRyeSA9IHJpX0hhc2hDb21wYXJlT3AoZXFfb3ByLCB0eXBlaWQpOworCisJCWZwbWV0YS0+ Y29tcGFyZV9lbnRyaWVzW2ldID0gZW50cnk7CisJCWZwbWV0YS0+cmVnb3BzW2ldID0gZ2V0X29w Y29kZShlcV9vcHIpOworCisJCWdldF9vcF9vcGZhbWlseV9wcm9wZXJ0aWVzKGVxX29wciwKKwkJ CQkJCQkJICAgaWR4X3JlbC0+cmRfb3BmYW1pbHlbaV0sCisJCQkJCQkJCSAgIGZhbHNlLAorCQkJ CQkJCQkgICAmZnBtZXRhLT5zdHJhdHNbaV0sCisJCQkJCQkJCSAgICZsZWZ0dHlwZSwKKwkJCQkJ CQkJICAgJmZwbWV0YS0+c3VidHlwZXNbaV0pOworCX0KKworCXJpaW5mby0+ZnBtZXRhID0gZnBt ZXRhOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCiAvKgogICogRXh0cmFj dCBmaWVsZHMgZnJvbSBhIHR1cGxlIGludG8gRGF0dW0vbnVsbHMgYXJyYXlzCiAgKi8KQEAgLTMx MTgsOCArMzU0NiwxMSBAQCByaV9Db21wYXJlV2l0aENhc3QoT2lkIGVxX29wciwgT2lkIHR5cGVp ZCwgT2lkIGNvbGxpZCwKIC8qCiAgKiByaV9IYXNoQ29tcGFyZU9wIC0KICAqCi0gKiBTZWUgaWYg d2Uga25vdyBob3cgdG8gY29tcGFyZSB0d28gdmFsdWVzLCBhbmQgY3JlYXRlIGEgbmV3IGhhc2gg ZW50cnkKLSAqIGlmIG5vdC4KKyAqIExvb2sgdXAgb3IgY3JlYXRlIGEgY2FjaGUgZW50cnkgZm9y IHRoZSBnaXZlbiBlcXVhbGl0eSBvcGVyYXRvciBhbmQKKyAqIHRoZSBjYWxsZXIncyB2YWx1ZSB0 eXBlICh0eXBlaWQpLiAgVGhlIGVudHJ5IGhvbGRzIHRoZSBvcGVyYXRvcidzCisgKiBGbWdySW5m byBhbmQsIGlmIHR5cGVpZCBkb2Vzbid0IG1hdGNoIHdoYXQgdGhlIG9wZXJhdG9yIGV4cGVjdHMg YXMKKyAqIGl0cyByaWdodC1oYW5kIGlucHV0LCBhIGNhc3QgZnVuY3Rpb24gdG8gY29lcmNlIHRo ZSB2YWx1ZSBiZWZvcmUKKyAqIGNvbXBhcmlzb24uCiAgKi8KIHN0YXRpYyBSSV9Db21wYXJlSGFz aEVudHJ5ICoKIHJpX0hhc2hDb21wYXJlT3AoT2lkIGVxX29wciwgT2lkIHR5cGVpZCkKQEAgLTMx NzUsOCArMzYwNiwxNCBAQCByaV9IYXNoQ29tcGFyZU9wKE9pZCBlcV9vcHIsIE9pZCB0eXBlaWQp CiAJCSAqIG1vbWVudCBzaW5jZSB0aGF0IHdpbGwgbmV2ZXIgYmUgZ2VuZXJhdGVkIGZvciBpbXBs aWNpdCBjb2VyY2lvbnMuCiAJCSAqLwogCQlvcF9pbnB1dF90eXBlcyhlcV9vcHIsICZsZWZ0dHlw ZSwgJnJpZ2h0dHlwZSk7Ci0JCUFzc2VydChsZWZ0dHlwZSA9PSByaWdodHR5cGUpOwotCQlpZiAo dHlwZWlkID09IGxlZnR0eXBlKQorCisJCS8qCisJCSAqIHBmX2VxX29wcnMgKHVzZWQgYnkgdGhl IGZhc3QgcGF0aCkgY2FuIGJlIGNyb3NzLXR5cGUgd2hlbiB0aGUgRksKKwkJICogYW5kIFBLIGNv bHVtbnMgZGlmZmVyIGluIHR5cGUsIGUuZy4gaW50NDhlcSBmb3IgaW50NCBQSyAvIGludDggRksu CisJCSAqIElmIHRoZSBGSyBjb2x1bW4ncyB0eXBlIGFscmVhZHkgbWF0Y2hlcyB3aGF0IHRoZSBv cGVyYXRvciBleHBlY3RzCisJCSAqIGFzIGl0cyByaWdodC1oYW5kIGlucHV0LCBubyBjYXN0IGlz IG5lZWRlZC4KKwkJICovCisJCWlmICh0eXBlaWQgPT0gcmlnaHR0eXBlKQogCQkJY2FzdGZ1bmMg PSBJbnZhbGlkT2lkOwkvKiBzaW1wbGVzdCBjYXNlICovCiAJCWVsc2UKIAkJewpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2ZrLWNvbmN1cnJlbnQtcGstdXBkLm91dCBi L3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9may1jb25jdXJyZW50LXBrLXVwZC5vdXQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRkZDk1MzVkM2MwCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2ZrLWNvbmN1cnJlbnQtcGst dXBkLm91dApAQCAtMCwwICsxLDEwNSBAQAorUGFyc2VkIHRlc3Qgc3BlYyB3aXRoIDMgc2Vzc2lv bnMKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHMyYiBzMnVrZXkgczFiIHMxaSBzMmMgczFjIHMy cyBzMXMKK3N0ZXAgczJiOiBCRUdJTjsKK3N0ZXAgczJ1a2V5OiBVUERBVEUgcGFyZW50IFNFVCBw YXJlbnRfa2V5ID0gMiBXSEVSRSBwYXJlbnRfa2V5ID0gMTsKK3N0ZXAgczFiOiBCRUdJTjsKK3N0 ZXAgczFpOiBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMgKDEsIDEpOyA8d2FpdGluZyAuLi4+Citz dGVwIHMyYzogQ09NTUlUOworc3RlcCBzMWk6IDwuLi4gY29tcGxldGVkPgorRVJST1I6ICBpbnNl cnQgb3IgdXBkYXRlIG9uIHRhYmxlICJjaGlsZCIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3Ry YWludCAiY2hpbGRfcGFyZW50X2tleV9ma2V5Igorc3RlcCBzMWM6IENPTU1JVDsKK3N0ZXAgczJz OiBTRUxFQ1QgKiBGUk9NIHBhcmVudDsKK3BhcmVudF9rZXl8YXV4CistLS0tLS0tLS0tKy0tLQor ICAgICAgICAgMnxmb28KKygxIHJvdykKKworc3RlcCBzMXM6IFNFTEVDVCAqIEZST00gY2hpbGQ7 CitjaGlsZF9rZXl8cGFyZW50X2tleQorLS0tLS0tLS0tKy0tLS0tLS0tLS0KKygwIHJvd3MpCisK Kworc3RhcnRpbmcgcGVybXV0YXRpb246IHMyYiBzMnVhdXggczFiIHMxaSBzMmMgczFjIHMycyBz MXMKK3N0ZXAgczJiOiBCRUdJTjsKK3N0ZXAgczJ1YXV4OiBVUERBVEUgcGFyZW50IFNFVCBhdXgg PSAnYmFyJyBXSEVSRSBwYXJlbnRfa2V5ID0gMTsKK3N0ZXAgczFiOiBCRUdJTjsKK3N0ZXAgczFp OiBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMgKDEsIDEpOworc3RlcCBzMmM6IENPTU1JVDsKK3N0 ZXAgczFjOiBDT01NSVQ7CitzdGVwIHMyczogU0VMRUNUICogRlJPTSBwYXJlbnQ7CitwYXJlbnRf a2V5fGF1eAorLS0tLS0tLS0tLSstLS0KKyAgICAgICAgIDF8YmFyCisoMSByb3cpCisKK3N0ZXAg czFzOiBTRUxFQ1QgKiBGUk9NIGNoaWxkOworY2hpbGRfa2V5fHBhcmVudF9rZXkKKy0tLS0tLS0t LSstLS0tLS0tLS0tCisgICAgICAgIDF8ICAgICAgICAgMQorKDEgcm93KQorCisKK3N0YXJ0aW5n IHBlcm11dGF0aW9uOiBzMmIgczJ1a2V5IHMxYiBzMWkgczJ1a2V5MiBzMmMgczFjIHMycyBzMXMK K3N0ZXAgczJiOiBCRUdJTjsKK3N0ZXAgczJ1a2V5OiBVUERBVEUgcGFyZW50IFNFVCBwYXJlbnRf a2V5ID0gMiBXSEVSRSBwYXJlbnRfa2V5ID0gMTsKK3N0ZXAgczFiOiBCRUdJTjsKK3N0ZXAgczFp OiBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMgKDEsIDEpOyA8d2FpdGluZyAuLi4+CitzdGVwIHMy dWtleTI6IFVQREFURSBwYXJlbnQgU0VUIHBhcmVudF9rZXkgPSAxIFdIRVJFIHBhcmVudF9rZXkg PSAyOworc3RlcCBzMmM6IENPTU1JVDsKK3N0ZXAgczFpOiA8Li4uIGNvbXBsZXRlZD4KK3N0ZXAg czFjOiBDT01NSVQ7CitzdGVwIHMyczogU0VMRUNUICogRlJPTSBwYXJlbnQ7CitwYXJlbnRfa2V5 fGF1eAorLS0tLS0tLS0tLSstLS0KKyAgICAgICAgIDF8Zm9vCisoMSByb3cpCisKK3N0ZXAgczFz OiBTRUxFQ1QgKiBGUk9NIGNoaWxkOworY2hpbGRfa2V5fHBhcmVudF9rZXkKKy0tLS0tLS0tLSst LS0tLS0tLS0tCisgICAgICAgIDF8ICAgICAgICAgMQorKDEgcm93KQorCisKK3N0YXJ0aW5nIHBl cm11dGF0aW9uOiBzMmIgczJ1a2V5IHMzYiBzM2kgczJjIHMzYyBzMnMgczNzCitzdGVwIHMyYjog QkVHSU47CitzdGVwIHMydWtleTogVVBEQVRFIHBhcmVudCBTRVQgcGFyZW50X2tleSA9IDIgV0hF UkUgcGFyZW50X2tleSA9IDE7CitzdGVwIHMzYjogQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVB VEFCTEUgUkVBRDsKK3N0ZXAgczNpOiBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMgKDIsIDEpOyA8 d2FpdGluZyAuLi4+CitzdGVwIHMyYzogQ09NTUlUOworc3RlcCBzM2k6IDwuLi4gY29tcGxldGVk PgorRVJST1I6ICBjb3VsZCBub3Qgc2VyaWFsaXplIGFjY2VzcyBkdWUgdG8gY29uY3VycmVudCB1 cGRhdGUKK3N0ZXAgczNjOiBDT01NSVQ7CitzdGVwIHMyczogU0VMRUNUICogRlJPTSBwYXJlbnQ7 CitwYXJlbnRfa2V5fGF1eAorLS0tLS0tLS0tLSstLS0KKyAgICAgICAgIDJ8Zm9vCisoMSByb3cp CisKK3N0ZXAgczNzOiBTRUxFQ1QgKiBGUk9NIGNoaWxkOworY2hpbGRfa2V5fHBhcmVudF9rZXkK Ky0tLS0tLS0tLSstLS0tLS0tLS0tCisoMCByb3dzKQorCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9u OiBzMmIgczJ1YXV4IHMzYiBzM2kgczJjIHMzYyBzMnMgczNzCitzdGVwIHMyYjogQkVHSU47Citz dGVwIHMydWF1eDogVVBEQVRFIHBhcmVudCBTRVQgYXV4ID0gJ2JhcicgV0hFUkUgcGFyZW50X2tl eSA9IDE7CitzdGVwIHMzYjogQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRDsK K3N0ZXAgczNpOiBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMgKDIsIDEpOworc3RlcCBzMmM6IENP TU1JVDsKK3N0ZXAgczNjOiBDT01NSVQ7CitzdGVwIHMyczogU0VMRUNUICogRlJPTSBwYXJlbnQ7 CitwYXJlbnRfa2V5fGF1eAorLS0tLS0tLS0tLSstLS0KKyAgICAgICAgIDF8YmFyCisoMSByb3cp CisKK3N0ZXAgczNzOiBTRUxFQ1QgKiBGUk9NIGNoaWxkOworY2hpbGRfa2V5fHBhcmVudF9rZXkK Ky0tLS0tLS0tLSstLS0tLS0tLS0tCisgICAgICAgIDJ8ICAgICAgICAgMQorKDEgcm93KQorCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlIGIvc3JjL3Rl c3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZQppbmRleCA0ZTQ2NjU4MGNkNC4uYzFhOTk5 YmYxZDIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUK KysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZQpAQCAtMzcsNiArMzcs NyBAQCB0ZXN0OiBmay1wYXJ0aXRpb25lZC0yCiB0ZXN0OiBmay1zbmFwc2hvdAogdGVzdDogZmst c25hcHNob3QtMgogdGVzdDogZmstc25hcHNob3QtMwordGVzdDogZmstY29uY3VycmVudC1way11 cGQKIHRlc3Q6IHN1YnhpZC1vdmVyZmxvdwogdGVzdDogZXZhbC1wbGFuLXF1YWwKIHRlc3Q6IGV2 YWwtcGxhbi1xdWFsLXRyaWdnZXIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVj cy9may1jb25jdXJyZW50LXBrLXVwZC5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2Zr LWNvbmN1cnJlbnQtcGstdXBkLnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjAzZGM3ZjI2MGNkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9u L3NwZWNzL2ZrLWNvbmN1cnJlbnQtcGstdXBkLnNwZWMKQEAgLTAsMCArMSw1MyBAQAorIyBUZXN0 cyB0aGF0IGFuIElOU0VSVCBvbiByZWZlcmVuY2luZyB0YWJsZSBjb3JyZWN0bHkgZmFpbHMgd2hl bgorIyB0aGUgcmVmZXJlbmNlZCB2YWx1ZSBkaXNhcHBlYXJzIGR1ZSB0byBhIGNvbmN1cnJlbnQg dXBkYXRlCitzZXR1cAoreworICBDUkVBVEUgVEFCTEUgcGFyZW50ICgKKyAgICBwYXJlbnRfa2V5 IGludCBQUklNQVJZIEtFWSwKKyAgICBhdXggICB0ZXh0IE5PVCBOVUxMCisgICk7CisKKyAgQ1JF QVRFIFRBQkxFIGNoaWxkICgKKyAgICBjaGlsZF9rZXkgaW50IFBSSU1BUlkgS0VZLAorICAgIHBh cmVudF9rZXkgaW50OCBOT1QgTlVMTCBSRUZFUkVOQ0VTIHBhcmVudAorICApOworCisgIElOU0VS VCBJTlRPIHBhcmVudCBWQUxVRVMgKDEsICdmb28nKTsKK30KKwordGVhcmRvd24KK3sKKyAgRFJP UCBUQUJMRSBwYXJlbnQsIGNoaWxkOworfQorCitzZXNzaW9uIHMxCitzdGVwIHMxYiAgeyBCRUdJ TjsgfQorc3RlcCBzMWkgeyBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMgKDEsIDEpOyB9CitzdGVw IHMxYyB7IENPTU1JVDsgfQorc3RlcCBzMXMgeyBTRUxFQ1QgKiBGUk9NIGNoaWxkOyB9CisKK3Nl c3Npb24gczIKK3N0ZXAgczJiICB7IEJFR0lOOyB9CitzdGVwIHMydWtleSB7IFVQREFURSBwYXJl bnQgU0VUIHBhcmVudF9rZXkgPSAyIFdIRVJFIHBhcmVudF9rZXkgPSAxOyB9CitzdGVwIHMydWF1 eCB7IFVQREFURSBwYXJlbnQgU0VUIGF1eCA9ICdiYXInIFdIRVJFIHBhcmVudF9rZXkgPSAxOyB9 CitzdGVwIHMydWtleTIgeyBVUERBVEUgcGFyZW50IFNFVCBwYXJlbnRfa2V5ID0gMSBXSEVSRSBw YXJlbnRfa2V5ID0gMjsgfQorc3RlcCBzMmMgeyBDT01NSVQ7IH0KK3N0ZXAgczJzIHsgU0VMRUNU ICogRlJPTSBwYXJlbnQ7IH0KKworc2Vzc2lvbiBzMworc3RlcCBzM2IgeyBCRUdJTiBJU09MQVRJ T04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOyB9CitzdGVwIHMzaSB7IElOU0VSVCBJTlRPIGNoaWxk IFZBTFVFUyAoMiwgMSk7IH0KK3N0ZXAgczNjIHsgQ09NTUlUOyB9CitzdGVwIHMzcyB7IFNFTEVD VCAqIEZST00gY2hpbGQ7IH0KKworIyBmYWlsCitwZXJtdXRhdGlvbiBzMmIgczJ1a2V5IHMxYiBz MWkgczJjIHMxYyBzMnMgczFzCisjIG9rCitwZXJtdXRhdGlvbiBzMmIgczJ1YXV4IHMxYiBzMWkg czJjIHMxYyBzMnMgczFzCisjIG9rCitwZXJtdXRhdGlvbiBzMmIgczJ1a2V5IHMxYiBzMWkgczJ1 a2V5MiBzMmMgczFjIHMycyBzMXMKKworIyBSUjoga2V5IHVwZGF0ZSAtPiBzZXJpYWxpemF0aW9u IGZhaWx1cmUKK3Blcm11dGF0aW9uIHMyYiBzMnVrZXkgczNiIHMzaSBzMmMgczNjIHMycyBzM3MK KyMgUlI6IG5vbi1rZXkgdXBkYXRlIC0+IG9sZCB2ZXJzaW9uIHZpc2libGUgdmlhIHRyYW5zYWN0 aW9uIHNuYXBzaG90CitwZXJtdXRhdGlvbiBzMmIgczJ1YXV4IHMzYiBzM2kgczJjIHMzYyBzMnMg czNzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CmluZGV4IDlhZTRk YmYxYjBhLi4wODI2ZjUxODAwNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9mb3JlaWduX2tleS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWdu X2tleS5vdXQKQEAgLTM3MCw2ICszNzAsNTMgQEAgU0VMRUNUICogRlJPTSBQS1RBQkxFOwogRFJP UCBUQUJMRSBGS1RBQkxFOwogRFJPUCBUQUJMRSBQS1RBQkxFOwogLS0KKy0tIENoZWNrIFJMUwor LS0KK0NSRUFURSBUQUJMRSBQS1RBQkxFICggcHRlc3QxIGludCBQUklNQVJZIEtFWSwgcHRlc3Qy IHRleHQgKTsKK0NSRUFURSBUQUJMRSBGS1RBQkxFICggZnRlc3QxIGludCBSRUZFUkVOQ0VTIFBL VEFCTEUsIGZ0ZXN0MiBpbnQgKTsKKy0tIEluc2VydCB0ZXN0IGRhdGEgaW50byBQS1RBQkxFCitJ TlNFUlQgSU5UTyBQS1RBQkxFIFZBTFVFUyAoMSwgJ1Rlc3QxJyk7CitJTlNFUlQgSU5UTyBQS1RB QkxFIFZBTFVFUyAoMiwgJ1Rlc3QyJyk7CitJTlNFUlQgSU5UTyBQS1RBQkxFIFZBTFVFUyAoMywg J1Rlc3QzJyk7CistLSBHcmFudCBwcml2aWxlZ2VzIG9uIFBLVEFCTEUvRktUQUJMRSB0byB1c2Vy IHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcgorQ1JFQVRFIFVTRVIgcmVncmVzc19mb3JlaWduX2tl eV91c2VyIE5PTE9HSU47CitHUkFOVCBTRUxFQ1QgT04gUEtUQUJMRSBUTyByZWdyZXNzX2ZvcmVp Z25fa2V5X3VzZXI7CitHUkFOVCBTRUxFQ1QsIElOU0VSVCBPTiBGS1RBQkxFIFRPIHJlZ3Jlc3Nf Zm9yZWlnbl9rZXlfdXNlcjsKKy0tIEVuYWJsZSBSTFMgb24gUEtUQUJMRSBhbmQgQ3JlYXRlIHBv bGljaWVzCitBTFRFUiBUQUJMRSBQS1RBQkxFIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CitD UkVBVEUgUE9MSUNZIHBrdGFibGVfdmlld19vZGRfcG9saWN5IE9OIFBLVEFCTEUgVE8gcmVncmVz c19mb3JlaWduX2tleV91c2VyIFVTSU5HIChwdGVzdDEgJSAyID0gMSk7CitBTFRFUiBUQUJMRSBQ S1RBQkxFIE9XTkVSIHRvIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKK1NFVCBST0xFIHJlZ3Jl c3NfZm9yZWlnbl9rZXlfdXNlcjsKK0lOU0VSVCBJTlRPIEZLVEFCTEUgVkFMVUVTICgzLCA1KTsK K0lOU0VSVCBJTlRPIEZLVEFCTEUgVkFMVUVTICgyLCA1KTsgLS0gc3VjY2VzcywgUkVGRVJFTkNF UyBhcmUgbm90IHN1YmplY3QgdG8gcm93IHNlY3VyaXR5CitSRVNFVCBST0xFOworRFJPUCBUQUJM RSBGS1RBQkxFOworRFJPUCBUQUJMRSBQS1RBQkxFOworRFJPUCBVU0VSIHJlZ3Jlc3NfZm9yZWln bl9rZXlfdXNlcjsKKy0tCistLSBDaGVjayBBQ0wKKy0tCitDUkVBVEUgVEFCTEUgUEtUQUJMRSAo IHB0ZXN0MSBpbnQgUFJJTUFSWSBLRVksIHB0ZXN0MiB0ZXh0ICk7CitDUkVBVEUgVEFCTEUgRktU QUJMRSAoIGZ0ZXN0MSBpbnQgUkVGRVJFTkNFUyBQS1RBQkxFLCBmdGVzdDIgaW50ICk7CistLSBJ bnNlcnQgdGVzdCBkYXRhIGludG8gUEtUQUJMRQorSU5TRVJUIElOVE8gUEtUQUJMRSBWQUxVRVMg KDEsICdUZXN0MScpOworSU5TRVJUIElOVE8gUEtUQUJMRSBWQUxVRVMgKDIsICdUZXN0MicpOwor SU5TRVJUIElOVE8gUEtUQUJMRSBWQUxVRVMgKDMsICdUZXN0MycpOworLS0gR3JhbnQgdXNhZ2Ug b24gUEtUQUJMRSB0byB1c2VyIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcgorQ1JFQVRFIFVTRVIg cmVncmVzc19mb3JlaWduX2tleV91c2VyIE5PTE9HSU47CitHUkFOVCBTRUxFQ1QgT04gUEtUQUJM RSBUTyByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CitBTFRFUiBUQUJMRSBQS1RBQkxFIE9XTkVS IHRvIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKKy0tIEluc2VydGluZyBpbnRvIEZLVEFCTEUg c2hvdWxkIHdvcmsKK0lOU0VSVCBJTlRPIEZLVEFCTEUgVkFMVUVTICgzLCA1KTsKKy0tIFJldm9r ZSB1c2FnZSBvbiBQS1RBQkxFIGZyb20gdXNlciByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXIKK1JF Vk9LRSBTRUxFQ1QgT04gUEtUQUJMRSBGUk9NIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKKy0t IEluc2VydGluZyBpbnRvIEZLVEFCTEUgc2hvdWxkIGZhaWwKK0lOU0VSVCBJTlRPIEZLVEFCTEUg VkFMVUVTICgyLCA2KTsKK0VSUk9SOiAgcGVybWlzc2lvbiBkZW5pZWQgZm9yIHRhYmxlIHBrdGFi bGUKK0RST1AgVEFCTEUgRktUQUJMRTsKK0RST1AgVEFCTEUgUEtUQUJMRTsKK0RST1AgVVNFUiBy ZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CistLQogLS0gQ2hlY2sgaW5pdGlhbCBjaGVjayB1cG9u IEFMVEVSIFRBQkxFCiAtLQogQ1JFQVRFIFRBQkxFIFBLVEFCTEUgKCBwdGVzdDEgaW50LCBwdGVz dDIgaW50LCBQUklNQVJZIEtFWShwdGVzdDEsIHB0ZXN0MikgKTsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zv cmVpZ25fa2V5LnNxbAppbmRleCAzYjhjOTViZjg5My4uZTllZTI5MzMxY2IgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9mb3JlaWduX2tleS5zcWwKQEAgLTI0Miw2ICsyNDIsNzAgQEAgU0VMRUNUICogRlJP TSBQS1RBQkxFOwogRFJPUCBUQUJMRSBGS1RBQkxFOwogRFJPUCBUQUJMRSBQS1RBQkxFOwogCist LQorLS0gQ2hlY2sgUkxTCistLQorQ1JFQVRFIFRBQkxFIFBLVEFCTEUgKCBwdGVzdDEgaW50IFBS SU1BUlkgS0VZLCBwdGVzdDIgdGV4dCApOworQ1JFQVRFIFRBQkxFIEZLVEFCTEUgKCBmdGVzdDEg aW50IFJFRkVSRU5DRVMgUEtUQUJMRSwgZnRlc3QyIGludCApOworCistLSBJbnNlcnQgdGVzdCBk YXRhIGludG8gUEtUQUJMRQorSU5TRVJUIElOVE8gUEtUQUJMRSBWQUxVRVMgKDEsICdUZXN0MScp OworSU5TRVJUIElOVE8gUEtUQUJMRSBWQUxVRVMgKDIsICdUZXN0MicpOworSU5TRVJUIElOVE8g UEtUQUJMRSBWQUxVRVMgKDMsICdUZXN0MycpOworCistLSBHcmFudCBwcml2aWxlZ2VzIG9uIFBL VEFCTEUvRktUQUJMRSB0byB1c2VyIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcgorQ1JFQVRFIFVT RVIgcmVncmVzc19mb3JlaWduX2tleV91c2VyIE5PTE9HSU47CitHUkFOVCBTRUxFQ1QgT04gUEtU QUJMRSBUTyByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CitHUkFOVCBTRUxFQ1QsIElOU0VSVCBP TiBGS1RBQkxFIFRPIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKKworLS0gRW5hYmxlIFJMUyBv biBQS1RBQkxFIGFuZCBDcmVhdGUgcG9saWNpZXMKK0FMVEVSIFRBQkxFIFBLVEFCTEUgRU5BQkxF IFJPVyBMRVZFTCBTRUNVUklUWTsKK0NSRUFURSBQT0xJQ1kgcGt0YWJsZV92aWV3X29kZF9wb2xp Y3kgT04gUEtUQUJMRSBUTyByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXIgVVNJTkcgKHB0ZXN0MSAl IDIgPSAxKTsKKworQUxURVIgVEFCTEUgUEtUQUJMRSBPV05FUiB0byByZWdyZXNzX2ZvcmVpZ25f a2V5X3VzZXI7CisKK1NFVCBST0xFIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKKworSU5TRVJU IElOVE8gRktUQUJMRSBWQUxVRVMgKDMsIDUpOworSU5TRVJUIElOVE8gRktUQUJMRSBWQUxVRVMg KDIsIDUpOyAtLSBzdWNjZXNzLCBSRUZFUkVOQ0VTIGFyZSBub3Qgc3ViamVjdCB0byByb3cgc2Vj dXJpdHkKKworUkVTRVQgUk9MRTsKKworRFJPUCBUQUJMRSBGS1RBQkxFOworRFJPUCBUQUJMRSBQ S1RBQkxFOworRFJPUCBVU0VSIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKKworLS0KKy0tIENo ZWNrIEFDTAorLS0KK0NSRUFURSBUQUJMRSBQS1RBQkxFICggcHRlc3QxIGludCBQUklNQVJZIEtF WSwgcHRlc3QyIHRleHQgKTsKK0NSRUFURSBUQUJMRSBGS1RBQkxFICggZnRlc3QxIGludCBSRUZF UkVOQ0VTIFBLVEFCTEUsIGZ0ZXN0MiBpbnQgKTsKKworLS0gSW5zZXJ0IHRlc3QgZGF0YSBpbnRv IFBLVEFCTEUKK0lOU0VSVCBJTlRPIFBLVEFCTEUgVkFMVUVTICgxLCAnVGVzdDEnKTsKK0lOU0VS VCBJTlRPIFBLVEFCTEUgVkFMVUVTICgyLCAnVGVzdDInKTsKK0lOU0VSVCBJTlRPIFBLVEFCTEUg VkFMVUVTICgzLCAnVGVzdDMnKTsKKworLS0gR3JhbnQgdXNhZ2Ugb24gUEtUQUJMRSB0byB1c2Vy IHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcgorQ1JFQVRFIFVTRVIgcmVncmVzc19mb3JlaWduX2tl eV91c2VyIE5PTE9HSU47CitHUkFOVCBTRUxFQ1QgT04gUEtUQUJMRSBUTyByZWdyZXNzX2ZvcmVp Z25fa2V5X3VzZXI7CisKK0FMVEVSIFRBQkxFIFBLVEFCTEUgT1dORVIgdG8gcmVncmVzc19mb3Jl aWduX2tleV91c2VyOworCistLSBJbnNlcnRpbmcgaW50byBGS1RBQkxFIHNob3VsZCB3b3JrCitJ TlNFUlQgSU5UTyBGS1RBQkxFIFZBTFVFUyAoMywgNSk7CisKKy0tIFJldm9rZSB1c2FnZSBvbiBQ S1RBQkxFIGZyb20gdXNlciByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXIKK1JFVk9LRSBTRUxFQ1Qg T04gUEtUQUJMRSBGUk9NIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKKworLS0gSW5zZXJ0aW5n IGludG8gRktUQUJMRSBzaG91bGQgZmFpbAorSU5TRVJUIElOVE8gRktUQUJMRSBWQUxVRVMgKDIs IDYpOworCitEUk9QIFRBQkxFIEZLVEFCTEU7CitEUk9QIFRBQkxFIFBLVEFCTEU7CisKK0RST1Ag VVNFUiByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CisKIC0tCiAtLSBDaGVjayBpbml0aWFsIGNo ZWNrIHVwb24gQUxURVIgVEFCTEUKIC0tCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGUz YzEwMDdhYmRmLi42NmNiMThiYTViOSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTgx Nyw2ICs4MTcsNyBAQCBFeHRlbnNpb25JbmZvCiBFeHRlbnNpb25Mb2NhdGlvbgogRXh0ZW5zaW9u U2libGluZ0NhY2hlCiBFeHRlbnNpb25WZXJzaW9uSW5mbworRmFzdFBhdGhNZXRhCiBGRFdDb2xs YXRlU3RhdGUKIEZEX1NFVAogRklMRQotLSAKMi40Ny4zCgo= --000000000000a438c8064e36a87b--