From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: martin rudalics via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#59862: quit-restore per window buffer Date: Tue, 30 Jul 2024 10:20:37 +0200 Message-ID: <38aedd8d-8966-44eb-afc0-79b4db412483@gmx.at> References: <86fsds8mlm.fsf@mail.linkov.net> <8243325e-ed03-4e9e-b64f-c8225fb6dc60@gmx.at> <18173da7-32e1-4f14-bbea-9a8fa66af7dd@gmx.at> <86plsxmc6d.fsf@mail.linkov.net> <86r0d4ezdc.fsf@mail.linkov.net> <0d01a044-d7d6-456a-9ba9-d987faad4332@gmx.at> <86frthjq4y.fsf@mail.linkov.net> <743dc4dd-cf09-4c5e-9209-b63a47480e0b@gmx.at> <86msnne7ut.fsf@mail.linkov.net> <86plsgrfvu.fsf@mail.linkov.net> <86le2b12ni.fsf@mail.linkov.net> <86y169kafb.fsf@mail.linkov.net> <61c4f245-3dd8-4e24-9c84-7ddd4cfe3c49@gmx.at> <86a5ioo269.fsf@mail.linkov.net> <867cdr3xs7.fsf@mail.linkov.net> <3f399d4f-3dd2-4624-b857-e198f70b5565@gmx.at> <86h6csct0w.fsf@mail.linkov.net> Reply-To: martin rudalics Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------RMD6CDRucDauQxOc8ngRmTVZ" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="6882"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla Thunderbird Cc: 59862@debbugs.gnu.org To: Juri Linkov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue Jul 30 10:22:22 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sYi7g-0001cs-HC for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 30 Jul 2024 10:22:21 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sYi7G-0000xj-Gs; Tue, 30 Jul 2024 04:21:54 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sYi7A-0000ev-Od for bug-gnu-emacs@gnu.org; Tue, 30 Jul 2024 04:21:49 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sYi7A-0003RB-ET for bug-gnu-emacs@gnu.org; Tue, 30 Jul 2024 04:21:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=In-Reply-To:From:References:MIME-Version:Date:To:Subject; bh=EJzOaoPjLtw25aaZIfV0V+4JsC43KppegYOpA8roAWU=; b=teSHlHGPi3B0qJesFwN/4UR+ol8DnAziL0VNcztA9f+pL6foRwoCNy9mRXk+HXZDyJT7nf2e7+FmUZXgz1ojUaK2iZUMlefBZzBXnF44q8+d8fntI6D6k/jrsYNdsv3S4PcMxTBayqSEJ+qKLezqv5qYAQq4ocE39s7z0kvWJFbybV1ibZO0J6gJoCIeDIhzqNVJg7FtFvfBhSl6XiAyVRRFzTdthK7oztzrGbdpJ29DaF+q37rypVP5i777fzIDjOsXLaoD+kysNJOLiprECNqpJYFSoaJPT+MonqKcRpyyJN2hQzTFDCMwbZe/J9nYH/FtKvyiYXVBTScB6WEZkg==; Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1sYi7O-0006H4-8I for bug-gnu-emacs@gnu.org; Tue, 30 Jul 2024 04:22:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 30 Jul 2024 08:22:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 59862 X-GNU-PR-Package: emacs Original-Received: via spool by 59862-submit@debbugs.gnu.org id=B59862.172232767224041 (code B ref 59862); Tue, 30 Jul 2024 08:22:02 +0000 Original-Received: (at 59862) by debbugs.gnu.org; 30 Jul 2024 08:21:12 +0000 Original-Received: from localhost ([127.0.0.1]:46919 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sYi6X-0006Fe-8N for submit@debbugs.gnu.org; Tue, 30 Jul 2024 04:21:12 -0400 Original-Received: from mout.gmx.net ([212.227.17.22]:49359) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sYi6S-0006Ew-2g for 59862@debbugs.gnu.org; Tue, 30 Jul 2024 04:21:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.at; s=s31663417; t=1722327638; x=1722932438; i=rudalics@gmx.at; bh=EJzOaoPjLtw25aaZIfV0V+4JsC43KppegYOpA8roAWU=; h=X-UI-Sender-Class:Content-Type:Message-ID:Date:MIME-Version: Subject:To:Cc:References:From:In-Reply-To:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=ohyzahp4q20Qdm2/5fSLUAyLLVsiijU8ADSyLM/adMxoxsXU+xRAepkPlXH0BjV0 x4PhEJJLgbC/wqkUkPHI5IC8P0CRKeUhoBkDUcz9JUHzceyk6gCuBqVVgbYsl0lmO RsaDXxlgEN2UT/bu6bxjAVveJHxC0IcMf/C3gVShXRmJmcPW9+tQj6BYEg2AelSsh gfENaQJh4oA38jygSG1SUM7uZrBrsbNeVHex9wu/BOGrBVwOh/Cvfly5dwwNVaL5B Rb5pm16Xq1B/BR+n/2UJF80IXJ1heTnehLHjkhY5ed/7EJGKYyCu6iLFV/a6ZzRCl SD9YRXZkyu6oau7Q+Q== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Original-Received: from [192.168.31.113] ([212.95.5.61]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MQMuX-1sv4Qp2Nnd-00VOiZ; Tue, 30 Jul 2024 10:20:38 +0200 Content-Language: en-US In-Reply-To: <86h6csct0w.fsf@mail.linkov.net> X-Provags-ID: V03:K1:EF7UOoVpRzPKL03RYfTmOYJr1NHRkbKOUZIgbGQ6KQZl1KcfpGT tb+8a8skSi+mJYFwBM9aY8oMWvOiO3ZT+xsAo+R1Um3zEwG+SOZfEfW98c5GMre1mVufDMb LIDIMy0vuE3Xpz+RULrOgw9Yb34aDNQkrWqkFUsSy8ylsZhmyOtnPYmCqU6kUc7RmzwD2I+ VDY4TFvJqAORHD19cAWlA== UI-OutboundReport: notjunk:1;M01:P0:D7RdHCJyu8M=;e8fsoZ/MiBoR0PlKsmhp8ICtj/6 XYKDBuZMObVUfXdYNU+7vRVFd01duqHGd9GUr4s1oe+qXTf5Y5Br3EF1cgBx40OrwsDdbxkU7 ZzbLFLiP0qD6vZ4KM08vFEd0tmbqWqz+a63rjxeKPEFauvIE01EoSE5sKJMrPU88D5xuoPWTk xQyL3PUdtX6BaYYIB/o1mvh9eLL5NoOzfbY8k+IgY5pSkCII9XXsohuqFyAQ9uzHrVuao3yy6 IbhlXkh1H3odjyDG7gRdSYSn+qgGIfMciKDRf3280gUpEpN3pFc7hrLT79+OVjChOR86+S9Yh xH9ZMYzvRA/LhRxjr28YrhcGUGLcGGNF5ofZo/ncGDIgYpA85YmjJkxCTqozR4Z33Cgl+lx7G xMsNGJgjXqcJzqDC61Du93Mbgl+Gl72XkD60FkATwpqpR3c+IFxKZM/CbJFNdqM5kyYTv0HCp GS3S+YYEt/hdSRJivAA9hkG+zL7jUC7QaT2eXI83A5q+ze+pGWKZdjy9UaMc08TdpqwOI8hDh uNMipCrXa19glxVUNrJixammKMn7F7t5VzyXp8P3HEd2KEzQXjMuN0vO31ptdr8HUcsoBtaAg i+CrXaUhLiJaL+08VXghJLrellcjhGdPygmv3L1XjXYFnryGLAexFLSJ9f/SrSHbjRAbQS/28 IRIobgAtG4+VDv85sMp12ErMlO0q4kb0Ju4FC/K3BPDX1RjY7b+btL13qs1CzGM2gN50eVMtY aczdyNjXQ7S3CB7SRjXrEHJOuP4olXhH7vCBGeNeVIxpfIvmzlpGBDtzzuHA/N+YAUasptVc X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:289547 Archived-At: This is a multi-part message in MIME format. --------------RMD6CDRucDauQxOc8ngRmTVZ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit > OTOH, I tried to add the tab case handling to the same places > where the frame case is handled, and everything works nicely > with this patch applied over your previous patches: After fixing a few other inconsistencies find my final version of the patch here. The ChangeLog is below. If you see no further problems, I'll install it and you can add your changes on top of it. martin Improve window/buffer handling code The purpose of these changes is to improve the code handling the display of buffers in windows, switching to previous and next buffers in windows and restoring a previous state after quitting or killing buffers. In particular it does: - Add a new window parameter 'quit-restore-prev' so a window can keep its initial 'quit-restore' parameter and undoing a sequence of quit window operations becomes more reliable (Bug#59862). - Optionally have 'kill-buffer' call 'quit-restore-window' for all windows showing the argument buffer (Bug#59862). - Add a new hook so it's possible to avoid that a window gets deleted implicitly by functions like 'kill-buffer' (Bug#71386). - Add a new option to make 'quit-restore-window' delete windows more aggressively (Bug#59862). - Immediately remove killed buffers from all windows' previous and next buffers. For windows that are already dead, use a weak hash table to be used by 'kill-buffer'. This avoids any special handling of such windows by the garbage collector. - Immediately remove 'quit-restore' and 'quit-restore-prev' window parameters that reference killed buffers. These parameters have no more use once their buffers got killed. - Make sure that internal windows do not have any previous and next buffers. This fixes a silly memory leak. - Make sure that after set_window_buffer and some wset_buffer calls the buffer now shown in the window does not appear in the lists of that window's previous and next buffers. The old behavior could make functions investigating these lists erroneously believe that there still existed some other buffer to switch to. * src/alloc.c (mark_discard_killed_buffers): Remove function. (mark_window): No more filter previous and next buffer lists. * src/window.h (struct window): Move up prev_buffers and next-buffers in structure; they are now treated by the collector as usual. * src/window.c (window_discard_buffer_from_alist) (window_discard_buffer_from_list) (window_discard_buffer_from_window) (window_discard_buffer_from_dead_windows) (Fwindow_discard_buffer): New functions. (set_window_buffer): Discard BUFFER from WINDOW's previous and next buffers. (make_parent_window): Make sure internal windows have no previous and next buffers. (make_window): Don't initialize window's previous and next buffers, they are handled by allocate_window now. (Fdelete_window_internal): Add WINDOW to window_dead_windows_table. (Fset_window_configuration): Remove resurrected window from window_dead_windows_table. Make sure buffers set by wset_buffer calls are not recorded in window's previous and next buffers. (delete_all_child_windows): Add deleted windows to window_dead_windows_table. (window_dead_windows_table): New weak hash table to record dead windows that are stored in saved window configurations. * src/buffer.c (Fkill_buffer): Call new function 'window_discard_buffer_from_dead_windows'. * lisp/window.el (window-deletable-functions): New hook. (window-deletable-p): Update doc-string. Run 'window-deletable-functions' (Bug#71386). (unrecord-window-buffer): New argument ALL. Move body to 'window-discard-buffer-from-window' so that if ALL is non-nil, WINDOW's 'quit-restore' and 'quit-restore-prev' parameters get removed too. (switch-to-prev-buffer): Don't care about killed buffers here; 'replace-buffer-in-windows' should have done that already. Use 'unrecord-window-buffer'. (switch-to-next-buffer): Don't care about killed buffers here; 'replace-buffer-in-windows' should do that now. (kill-buffer-quit-windows): New option. (delete-windows-on): Update doc-string. Handle new option 'kill-buffer-quit-windows'. Update 'unrecord-window-buffer' calls. (replace-buffer-in-windows): Update doc-string. Handle new option 'kill-buffer-quit-windows' (Bug#59862). Update call to 'unrecord-window-buffer'. (quit-restore-window-no-switch): New option. (quit-restore-window): Update doc-string. Handle additional values of BURY-OR-KILL so to not kill a buffer about to be killed by the caller. Handle 'quit-restore-prev' parameter (Bug#59862). Handle new option 'quit-restore-window-no-switch' (Bug#59862). (quit-windows-on): Update doc-string. Call 'quit-window-hook' and call 'quit-restore-window' directly so that the buffer does not get buried or killed by the latter. Update 'unrecord-window-buffer' call. (display-buffer-record-window): Update doc-string. Handle new `quit-restore-prev' parameter (Bug#59862). (switch-to-buffer): Call 'display-buffer-record-window' so a latter 'quit-restore-window' can use its parameters. * doc/lispref/windows.texi (Deleting Windows): Describe implicit deletion of windows and new hook 'window-deletable-functions'. (Buffers and Windows): Update description of 'replace-buffer-in-windows'. Describe new option 'kill-buffer-quit-windows'. (Quitting Windows): Describe 'quit-restore-prev' parameter and new option 'quit-restore-window-no-switch'. Update description of 'quit-restore-window'. (Window Parameters): Mention 'quit-restore-prev' parameter. * etc/NEWS: Add entries for 'window-deletable-functions', 'kill-buffer-quit-windows', 'quit-restore-window-no-switch'. mention new parameter 'quit-restore-prev' and new argument values for 'quit-restore-window'. --------------RMD6CDRucDauQxOc8ngRmTVZ Content-Type: text/x-patch; charset=UTF-8; name="window-buffer-changes.diff" Content-Disposition: attachment; filename="window-buffer-changes.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9saXNwcmVmL3dpbmRvd3MudGV4aSBiL2RvYy9saXNwcmVmL3dp bmRvd3MudGV4aQppbmRleCBmNTk2M2Q5ODRlOS4uNjU2YTQ0ZGZjYmYgMTAwNjQ0Ci0tLSBh L2RvYy9saXNwcmVmL3dpbmRvd3MudGV4aQorKysgYi9kb2MvbGlzcHJlZi93aW5kb3dzLnRl eGkKQEAgLTE2NDcsNiArMTY0Nyw0NSBAQCBEZWxldGluZyBXaW5kb3dzCiBhcmUgdGhlIG9w cG9zaXRlIG9mIHdoYXQgdGhleSBhcmUgaW4gdGhvc2Ugb3RoZXIgZnVuY3Rpb25zLgogQGVu ZCBkZWZmbgogCitAY2luZGV4IGltcGxpY2l0IGRlbGV0aW9uIG9mIHdpbmRvd3MKK0BjaW5k ZXggZGVsZXRpbmcgd2luZG93cyBpbXBsaWNpdGx5CisKKyAgVGhlIGFib3ZlIGNvbW1hbmRz IGRlbGV0ZSB3aW5kb3dzIGV4cGxpY2l0bHkuICBIb3dldmVyLCBFbWFjcyBtYXkgYWxzbwor ZGVsZXRlIGEgd2luZG93IGltcGxpY2l0bHkgd2hlbiBpdCB0aGlua3MgdGhhdCBpdCdzIG1v cmUgaW50dWl0aXZlIHRvCitlbGltaW5hdGUgaXQgcmF0aGVyIHRoYW4gc2hvd2luZyBzb21l IHVucmVsYXRlZCBidWZmZXIgaW4gaXQuICBGdW5jdGlvbnMKK3RoYXQgbWF5IGRlbGV0ZSB3 aW5kb3dzIGltcGxpY2l0bHkgYXJlIEBjb2Rle2tpbGwtYnVmZmVyfQorKEBweHJlZntLaWxs aW5nIEJ1ZmZlcnN9KSwgQGNvZGV7cXVpdC1yZXN0b3JlLXdpbmRvd30gKEBweHJlZntRdWl0 dGluZworV2luZG93c30pIGFuZCBAY29kZXtidXJ5LWJ1ZmZlcn0gKEBweHJlZntCdWZmZXIg TGlzdH0pLiAgU29tZSBvZiB0aGVzZQorZGVsZXRlIGEgd2luZG93IGlmIGFuZCBvbmx5IGlm IHRoYXQgd2luZG93IGlzIGRlZGljYXRlZCB0byBpdHMgYnVmZmVyCisoQHB4cmVme0RlZGlj YXRlZCBXaW5kb3dzfSkuICBPdGhlcnMgZGVsZXRlIGEgd2luZG93IHdoZW4gdGhhdCB3aW5k b3cKK2hhcyBiZWVuIGNyZWF0ZWQgYnkgQGNvZGV7ZGlzcGxheS1idWZmZXJ9IChAcHhyZWZ7 RGlzcGxheWluZyBCdWZmZXJzfSkuCitTb21lIHdpbGwgYWxzbyB0cnkgdG8gZGVsZXRlIGEg d2luZG93J3MgZnJhbWUgdG9nZXRoZXIgd2l0aCB0aGUgd2luZG93LAorcHJvdmlkZWQgdGhl cmUgYXJlIG90aGVyIGZyYW1lcyBvbiB0aGUgc2FtZSB0ZXJtaW5hbCBhbmQgdGhlIGZyYW1l IGRvZXMKK25vdCBob3N0IHRoZSBhY3RpdmUgbWluaWJ1ZmZlciB3aW5kb3cuCisKKyAgVGhl IGhvb2sgZGVzY3JpYmVkIG5leHQgY2FuIGJlIHVzZWQgdG8gYXZvaWQgdGhhdCBhIHdpbmRv dyBnZXRzCitkZWxldGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucy4KKworQGRlZm9wdCB3aW5kb3ct ZGVsZXRhYmxlLWZ1bmN0aW9ucworVGhpcyBpcyBhbiBhYm5vcm1hbCBob29rIHRoYXQgY2Fu IGJlIHVzZWQgdG8gYXZvaWQgdGhhdCBhIHdpbmRvdyBnZXRzCitkZWxldGVkIGltcGxpY2l0 bHkuICBUaGUgdmFsdWUgc2hvdWxkIGJlIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCB0YWtl Cit0d28gYXJndW1lbnRzLiAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSB3aW5kb3cgYWJv dXQgdG8gYmUgZGVsZXRlZC4KK1RoZSBzZWNvbmQgYXJndW1lbnQsIGlmIG5vbi1AY29kZXtu aWx9LCBtZWFucyB0aGF0IHRoZSB3aW5kb3cgaXMgdGhlCitvbmx5IHdpbmRvdyBvbiBpdHMg ZnJhbWUgYW5kIHdvdWxkIGJlIGRlbGV0ZWQgdG9nZXRoZXIgd2l0aCBpdHMgZnJhbWUuCitU aGUgd2luZG93J3MgYnVmZmVyIGlzIGN1cnJlbnQgd2hlbiBydW5uaW5nIHRoaXMgaG9vay4K KworSWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm5zIEBjb2Rle25pbH0sIHRoZSB3 aW5kb3cgd2lsbCBub3QgYmUKK2RlbGV0ZWQgYW5kIGFub3RoZXIgYnVmZmVyIHdpbGwgYmUg c2hvd24gaW4gaXQuICBUaGlzIGhvb2sgaXMgcnVuCisoaW5kaXJlY3RseSkgYnkgdGhlIGZ1 bmN0aW9ucyBAY29kZXtxdWl0LXJlc3RvcmUtd2luZG93fSwKK0Bjb2Rle2tpbGwtYnVmZmVy fSBhbmQgQGNvZGV7YnVyeS1idWZmZXJ9LiAgSXQgaXMgbm90IHJ1biBieSBmdW5jdGlvbnMK K3RoYXQgZGVsZXRlIHdpbmRvd3MgZXhwbGljaXRseSBsaWtlIEBjb2Rle2RlbGV0ZS13aW5k b3d9LAorQGNvZGV7ZGVsZXRlLW90aGVyLXdpbmRvd3N9IG9yIEBjb2Rle2RlbGV0ZS13aW5k b3dzLW9ufS4KKworVGhlIHB1cnBvc2Ugb2YgdGhpcyBob29rIGlzIHRvIGdpdmUgaXRzIGNs aWVudHMgYSBjaGFuY2UgdG8gc2F2ZSBhCit3aW5kb3cgb3IgaXRzIGZyYW1lIGZyb20gZGVs ZXRpb24gYmVjYXVzZSB0aGV5IG1pZ2h0IHN0aWxsIHdhbnQgdG8gdXNlCit0aGF0IHdpbmRv dyBvciBmcmFtZSBmb3IgdGhlaXIgb3duIHB1cnBvc2VzLgorQGVuZCBkZWZvcHQKKwogCiBA bm9kZSBSZWNvbWJpbmluZyBXaW5kb3dzCiBAc2VjdGlvbiBSZWNvbWJpbmluZyBXaW5kb3dz CkBAIC0yMjk3LDE2ICsyMzM2LDQxIEBAIEJ1ZmZlcnMgYW5kIFdpbmRvd3MKIHRoZSBuYW1l IG9mIGFuIGV4aXN0aW5nIGJ1ZmZlcjsgaWYgb21pdHRlZCBvciBAY29kZXtuaWx9LCBpdCBk ZWZhdWx0cyB0bwogdGhlIGN1cnJlbnQgYnVmZmVyLgogCi1UaGUgcmVwbGFjZW1lbnQgYnVm ZmVyIGluIGVhY2ggd2luZG93IGlzIGNob3NlbiB2aWEKK1RoZSByZXBsYWNlbWVudCBidWZm ZXIgaW4gZWFjaCB3aW5kb3cgaXMgdXN1YWxseSBjaG9zZW4gdmlhCiBAY29kZXtzd2l0Y2gt dG8tcHJldi1idWZmZXJ9IChAcHhyZWZ7V2luZG93IEhpc3Rvcnl9KS4gIFdpdGggdGhlCiBl eGNlcHRpb24gb2Ygc2lkZSB3aW5kb3dzIChAcHhyZWZ7U2lkZSBXaW5kb3dzfSksIGFueSBk ZWRpY2F0ZWQgd2luZG93CiBkaXNwbGF5aW5nIEB2YXJ7YnVmZmVyLW9yLW5hbWV9IGlzIGRl bGV0ZWQgaWYgcG9zc2libGUgKEBweHJlZntEZWRpY2F0ZWQKIFdpbmRvd3N9KS4gIElmIHN1 Y2ggYSB3aW5kb3cgaXMgdGhlIG9ubHkgd2luZG93IG9uIGl0cyBmcmFtZSBhbmQgdGhlcmUK LWFyZSBvdGhlciBmcmFtZXMgb24gdGhlIHNhbWUgdGVybWluYWwsIHRoZSBmcmFtZSBpcyBk ZWxldGVkIGFzIHdlbGwuCi1JZiB0aGUgZGVkaWNhdGVkIHdpbmRvdyBpcyB0aGUgb25seSB3 aW5kb3cgb24gdGhlIG9ubHkgZnJhbWUgb24gaXRzCithcmUgb3RoZXIgZnJhbWVzIG9uIHRo ZSBzYW1lIHRlcm1pbmFsLCB0aGUgZnJhbWUgaXMgZGVsZXRlZCBhcyB3ZWxsLiAgSWYKK3Ro ZSBkZWRpY2F0ZWQgd2luZG93IGlzIHRoZSBvbmx5IHdpbmRvdyBvbiB0aGUgb25seSBmcmFt ZSBvbiBpdHMKIHRlcm1pbmFsLCB0aGUgYnVmZmVyIGlzIHJlcGxhY2VkIGFueXdheS4KKwor VGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGRlY2lkZSB3aGF0IHRv IGRvIHdpdGggd2luZG93cword2hvc2UgYnVmZmVycyBhcmUgYWJvdXQgdG8gYmUga2lsbGVk IGJ5IEBjb2Rle2tpbGwtYnVmZmVyfQorKEBweHJlZntLaWxsaW5nIEJ1ZmZlcnN9KS4gIEl0 IHdpbGwsIGhvd2V2ZXIsIGFsc28gcmVtb3ZlIHRoZSBidWZmZXIKK3NwZWNpZmllZCBieSBA dmFye2J1ZmZlci1vci1uYW1lfSBmcm9tIHRoZSBsaXN0cyBvZiBwcmV2aW91cyBhbmQgbmV4 dAorYnVmZmVycyAoQHB4cmVme1dpbmRvdyBIaXN0b3J5fSkgb2YgYWxsIHdpbmRvd3MgKGlu Y2x1ZGluZyBkZWFkIHdpbmRvd3MKK3RoYXQgYXJlIG9ubHkgcmVmZXJlbmNlZCBieSB3aW5k b3cgY29uZmlndXJhdGlvbnMpIGFuZCByZW1vdmUgYW55CitAY29kZXtxdWl0LXJlc3RvcmV9 IG9yIEBjb2Rle3F1aXQtcmVzdG9yZS1wcmV2fSBwYXJhbWV0ZXJzCisoQHB4cmVme1dpbmRv dyBQYXJhbWV0ZXJzfSkgcmVmZXJlbmNpbmcgdGhhdCBidWZmZXIuCiBAZW5kIGRlZmZuCiAK K0J5IGRlZmF1bHQsIEBjb2Rle3JlcGxhY2UtYnVmZmVyLWluLXdpbmRvd3N9IGRlbGV0ZXMg b25seSB3aW5kb3dzCitkZWRpY2F0ZWQgdG8gdGhlaXIgYnVmZmVycyBhbmQgaWdub3JlcyBh bnkgQGNvZGV7cXVpdC1yZXN0b3JlfSBvcgorQGNvZGV7cXVpdC1yZXN0b3JlLXByZXZ9IHBh cmFtZXRlcnMgb2YgdGhlIHdpbmRvd3MgaXQgd29ya3Mgb24uICBUaGUKK2ZvbGxvd2luZyBv cHRpb24gaXMgdXNlZnVsIGZvciBjaXJjdW12ZW50aW5nIHRoZXNlIHJlc3RyaWN0aW9ucy4K KworQGRlZm9wdCBraWxsLWJ1ZmZlci1xdWl0LXdpbmRvd3MKK0lmIHRoaXMgb3B0aW9uIGlz IEBjb2Rle25pbH0sIEBjb2Rle2tpbGwtYnVmZmVyfSAoYW5kIGluIGNvbnNlcXVlbmNlCitA Y29kZXtyZXBsYWNlLWJ1ZmZlci1pbi13aW5kb3dzfSkgbWF5IG9ubHkgZGVsZXRlIHdpbmRv d3MgdGhhdCBhcmUKK2RlZGljYXRlZCB0byB0aGUgYnVmZmVyIGFib3V0IHRvIGJlIGtpbGxl ZC4gIElmIHRoaXMgaXMgbm9uLUBjb2Rle25pbH0sCitAY29kZXtyZXBsYWNlLWJ1ZmZlci1p bi13aW5kb3dzfSBoYXMgQGNvZGV7cXVpdC1yZXN0b3JlLXdpbmRvd30KKyhAcHhyZWZ7UXVp dHRpbmcgV2luZG93c30pIGRlYWwgd2l0aCBhbnkgc3VjaCB3aW5kb3cuICBUaGF0IGZ1bmN0 aW9uIG1heQorZGVsZXRlIHN1Y2ggYSB3aW5kb3cgZXZlbiBpZiBpdCdzIG5vdCBkZWRpY2F0 ZWQgdG8gaXRzIGJ1ZmZlci4gIEFsc28sCitAY29kZXtkZWxldGUtd2luZG93cy1vbn0gd2ls bCB1c2UgQGNvZGV7cXVpdC1yZXN0b3JlLXdpbmRvd30gYXMgZmFsbGJhY2sKK3doZW4gYSB3 aW5kb3cgY2Fubm90IGJlIGRlbGV0ZWQgYW5kIGFub3RoZXIgYnVmZmVyIG11c3QgYmUgc2hv d24gaW4gaXQuCitAZW5kIGRlZm9wdAorCiAKIEBub2RlIFN3aXRjaGluZyBCdWZmZXJzCiBA c2VjdGlvbiBTd2l0Y2hpbmcgdG8gYSBCdWZmZXIgaW4gYSBXaW5kb3cKQEAgLTQ1MzIsNiAr NDU5NiwxNSBAQCBRdWl0dGluZyBXaW5kb3dzCiAKIEBpdGVtIGtpbGwKIFRoaXMgbWVhbnMg dG8ga2lsbCBAdmFye3dpbmRvd30ncyBidWZmZXIuCisKK0BpdGVtIGtpbGxpbmcKK1RoaXMg aXMgaGFuZGxlZCBsaWtlIEBjb2Rle2tpbGx9IGJ1dCBhc3N1bWVzIHRoYXQgQHZhcnt3aW5k b3d9J3MgYnVmZmVyCitnZXRzIGtpbGxlZCBlbHNld2hlcmUuICBUaGlzIHZhbHVlIGlzIHVz ZWQgYnkKK0Bjb2Rle3JlcGxhY2UtYnVmZmVyLWluLXdpbmRvd3N9IGFuZCBAY29kZXtxdWl0 LXdpbmRvd3Mtb259LgorCitAaXRlbSBidXJ5aW5nCitUaGlzIGlzIGhhbmRsZWQgbGlrZSBA Y29kZXtidXJ5fSBidXQgYXNzdW1lcyB0aGF0IEB2YXJ7d2luZG93fSdzIGJ1ZmZlcgorZ2V0 cyBidXJpZWQgZWxzZXdoZXJlLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGJ5IEBjb2Rle3F1aXQt d2luZG93cy1vbn0uCiBAZW5kIHRhYmxlCiAKIFRoZSBhcmd1bWVudCBAdmFye2J1cnktb3It a2lsbH0gYWxzbyBzcGVjaWZpZXMgd2hhdCB0byBkbyB3aXRoCkBAIC00NTQxLDE0ICs0NjE0 LDE4IEBAIFF1aXR0aW5nIFdpbmRvd3MKIGRlbGV0ZSB0aGUgZnJhbWUuICBPdGhlcndpc2Us IHRoZSBmYXRlIG9mIHRoZSBmcmFtZSBpcyBkZXRlcm1pbmVkIGJ5CiBjYWxsaW5nIEBjb2Rl e2ZyYW1lLWF1dG8taGlkZS1mdW5jdGlvbn0gKHNlZSBiZWxvdykgd2l0aCB0aGF0IGZyYW1l IGFzCiBzb2xlIGFyZ3VtZW50LgotCi1UaGlzIGZ1bmN0aW9uIGFsd2F5cyBzZXRzIEB2YXJ7 d2luZG93fSdzIEBjb2Rle3F1aXQtcmVzdG9yZX0gcGFyYW1ldGVyCi10byBAY29kZXtuaWx9 IHVubGVzcyBpdCBkZWxldGVzIHRoZSB3aW5kb3cuCiBAZW5kIGRlZnVuCiAKLVRoZSB3aW5k b3cgQHZhcnt3aW5kb3d9J3MgQGNvZGV7cXVpdC1yZXN0b3JlfSBwYXJhbWV0ZXIgKEBweHJl ZntXaW5kb3cKLVBhcmFtZXRlcnN9KSBzaG91bGQgYmUgQGNvZGV7bmlsfSBvciBhIGxpc3Qg b2YgZm91ciBlbGVtZW50czoKLUBjIEZJWE1FOiBkZXNjcmliZSB3aGF0IHF1aXQtcmVzdG9y ZS13aW5kb3cgZG9lcyBpZiB0aGlzIGlzIG5pbC4KKyAgQSB3aW5kb3cncyBAY29kZXtxdWl0 LXJlc3RvcmV9IGFuZCBAY29kZXtxdWl0LXJlc3RvcmUtcHJldn0gcGFyYW1ldGVycworKEBw eHJlZntXaW5kb3cgUGFyYW1ldGVyc30pIGd1aWRlIEBjb2Rle3F1aXQtcmVzdG9yZS13aW5k b3d9IHRocm91Z2ggaXRzCitwcm9jZXNzIG9mIGRlYWxpbmcgd2l0aCBpdHMgQHZhcnt3aW5k b3d9IGFyZ3VtZW50LiAgSWYgc3VjaCBhIHBhcmFtZXRlcgoraXMgYWJzZW50IG9yIEBjb2Rl e25pbH0sIHRoaXMgdXN1YWxseSBtZWFucyB0aGF0IHRoZSB3aW5kb3cgaGFzIGJlZW4KK2Ny ZWF0ZWQgYnkgYSBjb21tYW5kIGxpa2UgQGNvZGV7c3BsaXQtd2luZG93LWJlbG93fSBvcgor QGNvZGV7c3BsaXQtd2luZG93LXJpZ2h0fSAoQHB4cmVme1NwbGl0IFdpbmRvdywsLCBlbWFj cywgVGhlIEdOVSBFbWFjcworTWFudWFsfSkgYW5kIEBjb2Rle3F1aXQtcmVzdG9yZS13aW5k b3d9IHdpbGwgZGVsZXRlIHRoZSB3aW5kb3cgb25seSBpZgoraXQgd2FzIGRlZGljYXRlZCB0 byBpdHMgYnVmZmVyLgorCisgIElmIG5vbi1AY29kZXtuaWx9LCBhbnkgc3VjaCBwYXJhbWV0 ZXIgaXMgYSBsaXN0IG9mIGZvdXIgZWxlbWVudHM6CiAKIEBsaXNwCiAoQHZhcnttZXRob2R9 IEB2YXJ7b2J1ZmZlcn0gQHZhcntvd2luZG93fSBAdmFye3RoaXMtYnVmZmVyfSkKQEAgLTQ1 ODYsMTcgKzQ2NjMsMTcgQEAgUXVpdHRpbmcgV2luZG93cwogQHZhcnt3aW5kb3d9LCBpdCB0 cmllcyB0byBzZWxlY3QgQHZhcntvd2luZG93fS4KIAogVGhlIGZvdXJ0aCBlbGVtZW50LCBA dmFye3RoaXMtYnVmZmVyfSwgaXMgdGhlIGJ1ZmZlciB3aG9zZSBkaXNwbGF5aW5nCi1zZXQg dGhlIEBjb2Rle3F1aXQtcmVzdG9yZX0gcGFyYW1ldGVyLiAgUXVpdHRpbmcgQHZhcnt3aW5k b3d9IG1heSBkZWxldGUKLXRoYXQgd2luZG93IG9ubHkgaWYgaXQgc3RpbGwgc2hvd3MgdGhh dCBidWZmZXIuCi0KLVF1aXR0aW5nIEB2YXJ7d2luZG93fSB0cmllcyB0byBkZWxldGUgaXQg aWYgYW5kIG9ubHkgaWYgKDEpCi1AdmFye21ldGhvZH0gaXMgZWl0aGVyIEBjb2Rle3dpbmRv d30gb3IgQGNvZGV7ZnJhbWV9LCAoMikgdGhlIHdpbmRvdwotaGFzIG5vIGhpc3Rvcnkgb2Yg cHJldmlvdXNseS1kaXNwbGF5ZWQgYnVmZmVycyBhbmQgKDMpCi1AdmFye3RoaXMtYnVmZmVy fSBlcXVhbHMgdGhlIGJ1ZmZlciBjdXJyZW50bHkgZGlzcGxheWVkIGluCi1AdmFye3dpbmRv d30uICBJZiBAdmFye3dpbmRvd30gaXMgcGFydCBvZiBhbiBhdG9taWMgd2luZG93Ci0oQHB4 cmVme0F0b21pYyBXaW5kb3dzfSksIHF1aXR0aW5nIHdpbGwgdHJ5IHRvIGRlbGV0ZSB0aGUg cm9vdCBvZiB0aGF0Ci1hdG9taWMgd2luZG93IGluc3RlYWQuICBJbiBlaXRoZXIgY2FzZSwg aXQgdHJpZXMgdG8gYXZvaWQgc2lnbmFsaW5nIGFuCi1lcnJvciB3aGVuIEB2YXJ7d2luZG93 fSBjYW5ub3QgYmUgZGVsZXRlZC4KK3NldCB0aGUgQGNvZGV7cXVpdC1yZXN0b3JlfSBwYXJh bWV0ZXIuICBRdWl0dGluZyBAdmFye3dpbmRvd30gd2lsbCB1c2UKK3RoZSBpbmZvcm1hdGlv biBzdG9yZWQgYnkgdGhhdCBwYXJhbWV0ZXIgaWYgYW5kIG9ubHkgaWYgaXQgc3RpbGwgc2hv d3MKK3RoYXQgYnVmZmVyLgorCitAY29kZXtxdWl0LXJlc3RvcmUtd2luZG93fSB0cmllcyB0 byBkZWxldGUgaXRzIEB2YXJ7d2luZG93fSBpZiAoMSkKK0B2YXJ7bWV0aG9kfSBpcyBlaXRo ZXIgQGNvZGV7d2luZG93fSBvciBAY29kZXtmcmFtZX0sICgyKSB0aGUgd2luZG93IGhhcwor bm8gaGlzdG9yeSBvZiBwcmV2aW91c2x5LWRpc3BsYXllZCBidWZmZXJzIGFuZCAoMykgQHZh cnt0aGlzLWJ1ZmZlcn0KK2VxdWFscyB0aGUgYnVmZmVyIGN1cnJlbnRseSBkaXNwbGF5ZWQg aW4gQHZhcnt3aW5kb3d9LiAgSWYgQHZhcnt3aW5kb3d9CitpcyBwYXJ0IG9mIGFuIGF0b21p YyB3aW5kb3cgKEBweHJlZntBdG9taWMgV2luZG93c30pLCBpdCB3aWxsIHRyeSB0bworZGVs ZXRlIHRoZSByb290IG9mIHRoYXQgYXRvbWljIHdpbmRvdyBpbnN0ZWFkLiAgSW4gZWl0aGVy IGNhc2UsIGl0IHRyaWVzCit0byBhdm9pZCBzaWduYWxpbmcgYW4gZXJyb3Igd2hlbiBAdmFy e3dpbmRvd30gY2Fubm90IGJlIGRlbGV0ZWQuCiAKIElmIEB2YXJ7b2J1ZmZlcn0gaXMgYSBs aXN0LCBhbmQgQHZhcntwcmV2LWJ1ZmZlcn0gaXMgc3RpbGwgbGl2ZSwKIHF1aXR0aW5nIGRp c3BsYXlzIEB2YXJ7cHJldi1idWZmZXJ9IGluIEB2YXJ7d2luZG93fSBhY2NvcmRpbmcgdG8g dGhlCkBAIC00NjA4LDYgKzQ2ODUsNTggQEAgUXVpdHRpbmcgV2luZG93cwogYnVmZmVycyAo QHB4cmVme1dpbmRvdyBIaXN0b3J5fSksIHRoZSBtb3N0IHJlY2VudCBidWZmZXIgaW4gdGhh dAogaGlzdG9yeSB3aWxsIGJlIGRpc3BsYXllZC4KIAorICBDb25jZXB0dWFsbHksIHRoZSBA Y29kZXtxdWl0LXJlc3RvcmV9IHBhcmFtZXRlciBpcyB1c2VkIGZvciB1bmRvaW5nCit0aGUg Zmlyc3QgYnVmZmVyIGRpc3BsYXkgb3BlcmF0aW9uIGZvciBhIHNwZWNpZmljIHdpbmRvdy4g IFRoZQorQGNvZGV7cXVpdC1yZXN0b3JlLXByZXZ9IHBhcmFtZXRlciBpcyB1c2VkIGZvciB1 bmRvaW5nIHRoZSBsYXN0IGJ1ZmZlcgorZGlzcGxheSBvcGVyYXRpb24gaW4gYSByb3cgb2Yg c3VjaCBvcGVyYXRpb25zIGZvciBhIHNwZWNpZmljIHdpbmRvdy4KK0FueSBidWZmZXIgZGlz cGxheSBvcGVyYXRpb24gZm9yIHRoYXQgd2luZG93IHRoYXQgaGFwcGVuZWQgaW4gYmV0d2Vl biwKK2lzIHVuZG9uZSBieSBkaXNwbGF5aW5nIHRoZSBidWZmZXIgcHJldmlvdXNseSBzaG93 biBpbiB0aGF0IHdpbmRvdy4KKworICBAY29kZXtkaXNwbGF5LWJ1ZmZlcn0gc2V0cyB1cCB0 aGUgQGNvZGV7cXVpdC1yZXN0b3JlfSBwYXJhbWV0ZXIgb2YgYW55Cit3aW5kb3cgaXQgdXNl cyB3aGVuIHRoYXQgd2luZG93IGhhcyBiZWVuIGVpdGhlciBjcmVhdGVkIGJ5IGl0IG9yIGhh cyBubworbm9uLUBjb2Rle25pbH0gQGNvZGV7cXVpdC1yZXN0b3JlfSBwYXJhbWV0ZXIuICBJ ZiB0aGUgd2luZG93IGFscmVhZHkgaGFzCithIEBjb2Rle3F1aXQtcmVzdG9yZX0gcGFyYW1l dGVyLCBAY29kZXtkaXNwbGF5LWJ1ZmZlcn0gYWRkcyBhCitAY29kZXtxdWl0LXJlc3RvcmUt cHJldn0gcGFyYW1ldGVyIHdob3NlIEB2YXJ7bWV0aG9kfSBlbGVtZW50IGlzIGVpdGhlcgor QGNvZGV7c2FtZX0gb3IgQGNvZGV7b3RoZXJ9LiAgSW4gZWl0aGVyIGNhc2UsIGlmIHRoZSB3 aW5kb3cgYWxyZWFkeSBoYXMKK2EgQGNvZGV7cXVpdC1yZXN0b3JlLXByZXZ9IG9yIEBjb2Rl e3F1aXQtcmVzdG9yZX0gcGFyYW1ldGVyLCBpdCBtYXkKK3VwZGF0ZSB0aGF0IHBhcmFtZXRl cidzIGNvbnRlbnRzLgorCisgIEBjb2Rle3F1aXQtcmVzdG9yZS13aW5kb3d9IG5vdyBmaXJz dCB0cmllcyB0byBmaW5kIGEgc3VpdGFibGUKK0Bjb2Rle3F1aXQtcmVzdG9yZS1wcmV2fSBw YXJhbWV0ZXIgZm9yIGl0cyB3aW5kb3cgdGVsbGluZyB3aGljaCBidWZmZXIKK3RvIHNob3cg aW5zdGVhZC4gIElmIGl0IGRvZXNuJ3QgZmluZCBvbmUsIGl0IHdpbGwgbG9vayBmb3IgYSBz dWl0YWJsZQorQGNvZGV7cXVpdC1yZXN0b3JlfSBwYXJhbWV0ZXIgdG8gZWl0aGVyIGRlbGV0 ZSB0aGUgd2luZG93IG9yIHNob3cKK2Fub3RoZXIgYnVmZmVyIGluIGl0LgorCisgIE9uY2Ug aXQgaGFzIHVzZWQgb25lIG9mIHRoZXNlIHBhcmFtZXRlcnMsIEBjb2Rle3F1aXQtcmVzdG9y ZS13aW5kb3d9CityZXNldHMgaXQgdG8gQGNvZGV7bmlsfS4gIFBhcmFtZXRlcnMgaXQgZGlk IG5vdCB1c2UgYXJlIGxlZnQgYWxvbmUuICBBbnkKK29mIHRoZXNlIHBhcmFtZXRlcnMgYXJl IGFsc28gcmVzZXQgYnkgQGNvZGV7cmVwbGFjZS1idWZmZXItaW4td2luZG93c30KKyhAcHhy ZWZ7QnVmZmVycyBhbmQgV2luZG93c30pIHdoZW4gdGhleSByZWZlcmVuY2UgYSBidWZmZXIg dGhhdCBpcyBhYm91dAordG8gYmUga2lsbGVkLCBlaXRoZXIgYXMgdGhlIGJ1ZmZlciBzcGVj aWZpZWQgYnkgQHZhcntwcmV2LWJ1ZmZlcn0gb3IgYXMKK3RoZSBidWZmZXIgc3BlY2lmaWVk IGJ5IEB2YXJ7dGhpcy1idWZmZXJ9LgorCisgIEFsbCBvcGVyYXRpb25zIG9uIHRoZXNlIHBh cmFtZXRlcnMgYXJlIHN1cHBvc2VkIHRvIHByZXNlcnZlIHRoZQorZm9sbG93aW5nIGludmFy aWFudDogSWYgYSB3aW5kb3cgaGFzIGEgbm9uLUBjb2Rle25pbH0KK0Bjb2Rle3F1aXQtcmVz dG9yZS1wcmV2fSBwYXJhbWV0ZXIsIGl0IGFsc28gaGFzIGEgbm9uLUBjb2Rle25pbH0KK0Bj b2Rle3F1aXQtcmVzdG9yZX0gcGFyYW1ldGVyLgorCitUaGUgZm9sbG93aW5nIG9wdGlvbiBh bGxvd3MgQGNvZGV7cXVpdC1yZXN0b3JlLXdpbmRvd30gdG8gZGVsZXRlIGl0cword2luZG93 IG1vcmUgYWdncmVzc2l2ZWx5LgorCitAZGVmb3B0IHF1aXQtcmVzdG9yZS13aW5kb3ctbm8t c3dpdGNoCitJZiB0aGlzIG9wdGlvbiBpcyBAY29kZXtuaWx9LCBAY29kZXtxdWl0LXJlc3Rv cmUtd2luZG93fSB3aWxsIGFsd2F5cworY2FsbCBAY29kZXtzd2l0Y2gtdG8tcHJldi1idWZm ZXJ9IHVubGVzcyB0aGUgd2luZG93IGhhcyBiZWVuIG1hZGUgYnkKK0Bjb2Rle2Rpc3BsYXkt YnVmZmVyfS4gIElmIHRoaXMgaXMgQGNvZGV7dH0sIEBjb2Rle3F1aXQtcmVzdG9yZS13aW5k b3d9Cit3aWxsIHRyeSBoYXJkIHRvIHN3aXRjaCBvbmx5IHRvIGJ1ZmZlcnMgcHJldmlvdXNs eSBzaG93biBpbiB0aGF0IHdpbmRvdy4KK0lmIHRoaXMgaXMgdGhlIHN5bWJvbCBAY29kZXtz a2lwLWZpcnN0fSwgaXQgd2lsbCBzd2l0Y2ggdG8gYSBwcmV2aW91cworYnVmZmVyIGlmIGFu ZCBvbmx5IHRoZSB3aW5kb3cgaGFzIGF0IGxlYXN0IHR3byBwcmV2aW91cyBidWZmZXJzLgor CitJbiBlaXRoZXIgY2FzZSwgaWYgQGNvZGV7cXVpdC1yZXN0b3JlLXdpbmRvd30gZG9lc24n dCBzd2l0Y2ggdG8gYQorcHJldmlvdXMgYnVmZmVyLCBpdCB3aWxsIHRyeSB0byBkZWxldGUg dGhlIHdpbmRvdyAoYW5kIG1heWJlIGl0cworZnJhbWUpIGluc3RlYWQuICBOb3RlIGFsc28g dGhhdCBpZiBhIHdpbmRvdyBpcyBkZWRpY2F0ZWQsCitAY29kZXtxdWl0LXJlc3RvcmUtd2lu ZG93fSB3aWxsIHVzdWFsbHkgbm90IHN3aXRjaCB0byBhIHByZXZpb3VzCitidWZmZXIgaW4g aXQgZWl0aGVyLgorQGVuZCBkZWZvcHQKKwogQGlnbm9yZQogQGMgRklYTUU6IFNob3VsZCB3 ZSBkb2N1bWVudCBkaXNwbGF5LWJ1ZmZlci1yZXVzZS13aW5kb3c/CiBJZiB3ZSBkb2N1bWVu dCBkaXNwbGF5LWJ1ZmZlci1yZWNvcmQtd2luZG93LCBpdCBzaG91bGQgYmUgd2l0aCBAZGVm dW4uCkBAIC02NjY4LDEyICs2Nzk3LDE0IEBAIFdpbmRvdyBQYXJhbWV0ZXJzCiBAY29kZXt3 aW5kb3ctcHJlc2VydmUtc2l6ZX0gKEBweHJlZntQcmVzZXJ2aW5nIFdpbmRvdyBTaXplc30p LgogCiBAaXRlbSBxdWl0LXJlc3RvcmUKK0BpdGVtIHF1aXQtcmVzdG9yZS1wcmV2CiBAdmlu ZGV4IHF1aXQtcmVzdG9yZUByeywgYSB3aW5kb3cgcGFyYW1ldGVyfQotVGhpcyBwYXJhbWV0 ZXIgaXMgaW5zdGFsbGVkIGJ5IHRoZSBidWZmZXIgZGlzcGxheSBmdW5jdGlvbnMKK0B2aW5k ZXggcXVpdC1yZXN0b3JlLXByZXZAcnssIGEgd2luZG93IHBhcmFtZXRlcn0KK1RoZXNlIHBh cmFtZXRlcnMgYXJlcyBpbnN0YWxsZWQgYnkgdGhlIGJ1ZmZlciBkaXNwbGF5IGZ1bmN0aW9u cwogKEBweHJlZntDaG9vc2luZyBXaW5kb3d9KSBhbmQgY29uc3VsdGVkIGJ5IEBjb2Rle3F1 aXQtcmVzdG9yZS13aW5kb3d9Ci0oQHB4cmVme1F1aXR0aW5nIFdpbmRvd3N9KS4gIEl0IGlz IGEgbGlzdCBvZiBmb3VyIGVsZW1lbnRzLCBzZWUgdGhlCi1kZXNjcmlwdGlvbiBvZiBAY29k ZXtxdWl0LXJlc3RvcmUtd2luZG93fSBpbiBAcmVme1F1aXR0aW5nIFdpbmRvd3N9Ci1mb3Ig ZGV0YWlscy4KKyhAcHhyZWZ7UXVpdHRpbmcgV2luZG93c30pLiAgVGhleSBhcmUgbGlzdHMg b2YgZm91ciBlbGVtZW50cywgc2VlIHRoZQorZGVzY3JpcHRpb24gb2YgQGNvZGV7cXVpdC1y ZXN0b3JlLXdpbmRvd30gaW4gQHJlZntRdWl0dGluZyBXaW5kb3dzfSBmb3IKK2RldGFpbHMu CiAKIEBpdGVtIHdpbmRvdy1zaWRlCiBAaXRlbXggd2luZG93LXNsb3QKZGlmZiAtLWdpdCBh L2V0Yy9ORVdTIGIvZXRjL05FV1MKaW5kZXggYzkwN2VjNDBmYTEuLmRlN2FlN2IwMzI2IDEw MDY0NAotLS0gYS9ldGMvTkVXUworKysgYi9ldGMvTkVXUwpAQCAtNDMsNiArNDMsMzcgQEAg VGhlICdmaW5kLWZ1bmN0aW9uJywgJ2ZpbmQtbGlicmFyeScsICdmaW5kLWZhY2UtZGVmaW5p dGlvbicsIGFuZAogJ2ZpbmQtdmFyaWFibGUnIGNvbW1hbmRzIG5vdyBhbGxvdyByZXRyaWV2 aW5nIHByZXZpb3VzIGlucHV0IHVzaW5nIHRoZQogdXN1YWwgbWluaWJ1ZmZlciBoaXN0b3J5 IGNvbW1hbmRzLiAgRWFjaCBjb21tYW5kIGhhcyBhIHNlcGFyYXRlIGhpc3RvcnkuCiAKKwwK KyoqIFdpbmRvd3MKKworKysrCisqKiogTmV3IGhvb2sgJ3dpbmRvdy1kZWxldGFibGUtZnVu Y3Rpb25zJy4KK1RoaXMgYWJub3JtYWwgaG9vayBnaXZlcyBpdHMgY2xpZW50IGEgd2F5IHRv IHNhdmUgYSB3aW5kb3cgZnJvbSBnZXR0aW5nCitkZWxldGVkIGltcGxpY2l0bHkgYnkgZnVu Y3Rpb25zIGxpa2UgJ2tpbGwtYnVmZmVyJywgJ2J1cnktYnVmZmVyJyBhbmQKKydxdWl0LXJl c3RvcmUtd2luZG93JywKKworKysrCisqKiogTmV3IG9wdGlvbiAna2lsbC1idWZmZXItcXVp dC13aW5kb3dzJy4KK1RoaXMgb3B0aW9uIGhhcyAna2lsbC1idWZmZXInIGNhbGwgJ3F1aXQt cmVzdG9yZS13aW5kb3cnIHRvIGhhbmRsZSB0aGUKK2Z1cnRoZXIgZGVzdGlueSBvZiBhbnkg d2luZG93IHNob3dpbmcgdGhlIGJ1ZmZlciB0byBiZSBraWxsZWQuCisKKysrKworKioqIE5l dyB3aW5kb3cgcGFyYW1ldGVyICdxdWl0LXJlc3RvcmUtcHJldicuCitUaGlzIHBhcmFtZXRl ciBpcyBzZXQgdXAgYnkgJ2Rpc3BsYXktYnVmZmVyJyB3aGVuIGl0IGRldGVjdHMgdGhhdCB0 aGUKK3dpbmRvdyB1c2VkIGFscmVhZHkgaGFzIGEgJ3F1aXQtcmVzdG9yZScgcGFyYW1ldGVy LiAgSXRzIHByZXNlbmNlIGdpdmVzCisncXVpdC1yZXN0b3JlLXdpbmRvdycgYSB3YXkgdG8g dW5kbyBhIHNlcXVlbmNlIG9mIGJ1ZmZlciBkaXNwbGF5CitvcGVyYXRpb25zIG1vcmUgaW50 dWl0aXZlbHkuCisKKysrKworKioqICdxdWl0LXJlc3RvcmUtd2luZG93JyBub3cgaGFuZGxl cyB0aGUgdmFsdWVzICdraWxsaW5nJyBhbmQgJ2J1cnlpbmcnCitmb3IgaXRzIEJVUlktT1It S0lMTCBhcmd1bWVudCBqdXN0IGxpa2UgJ2tpbGwnIGFuZCAnYnVyeScgYnV0IGFzc3VtZXMK K3RoYXQgdGhlIGFjdHVhbCBraWxsaW5nIG9yIGJ1cnlpbmcgb2YgdGhlIGJ1ZmZlciBpcyBk b25lIGJ5IHRoZSBjYWxsZXIuCisKKysrKworKioqIE5ldyBvcHRpb24gJ3F1aXQtcmVzdG9y ZS13aW5kb3ctbm8tc3dpdGNoJy4KK1dpdGggdGhpcyBvcHRpb24gc2V0LCAncXVpdC1yZXN0 b3JlLXdpbmRvdycgd2lsbCBkZWxldGUgaXRzIHdpbmRvdyBtb3JlCithZ2dyZXNzaXZlbHkg cmF0aGVyIHRoYW4gc3dpdGNoaW5nIHRvIHNvbWUgb3RoZXIgYnVmZmVyIGluIGl0LgorCiAM CiAqIEVkaXRpbmcgQ2hhbmdlcyBpbiBFbWFjcyAzMS4xCiAKZGlmZiAtLWdpdCBhL2xpc3Av d2luZG93LmVsIGIvbGlzcC93aW5kb3cuZWwKaW5kZXggMDA2Y2ZhMTk1MjUuLjQ2ODc4NjBk YjExIDEwMDY0NAotLS0gYS9saXNwL3dpbmRvdy5lbAorKysgYi9saXNwL3dpbmRvdy5lbApA QCAtNDEwNCwxMiArNDEwNCwzNSBAQCBvbmUtd2luZG93LXAKIAkobmV4dC13aW5kb3cgYmFz ZS13aW5kb3cgKGlmIG5vbWluaSAnYXJnKSBhbGwtZnJhbWVzKSkpKQogDAogOzs7IERlbGV0 aW5nIHdpbmRvd3MuCi0oZGVmdW4gd2luZG93LWRlbGV0YWJsZS1wICgmb3B0aW9uYWwgd2lu ZG93KQorKGRlZmN1c3RvbSB3aW5kb3ctZGVsZXRhYmxlLWZ1bmN0aW9ucyBuaWwKKyAgICJB Ym5vcm1hbCBob29rIHRvIGRlY2lkZSB3aGV0aGVyIGEgd2luZG93IG1heSBiZSBpbXBsaWNp dGx5IGRlbGV0ZWQuCitUaGUgdmFsdWUgc2hvdWxkIGJlIGEgbGlzdCBvZiBmdW5jdGlvbnMg dGhhdCB0YWtlIHR3byBhcmd1bWVudHMuICBUaGUKK2ZpcnN0IGFyZ3VtZW50IGlzIHRoZSB3 aW5kb3cgYWJvdXQgdG8gYmUgZGVsZXRlZC4gIFRoZSBzZWNvbmQgYXJndW1lbnQKK2lmIG5v bi1uaWwsIG1lYW5zIHRoYXQgdGhlIHdpbmRvdyBpcyB0aGUgb25seSB3aW5kb3cgb24gaXRz IGZyYW1lIGFuZAorc2hvdWxkIGJlIGRlbGV0ZWQgdG9nZXRoZXIgd2l0aCBpdHMgZnJhbWUu ICBUaGUgd2luZG93J3MgYnVmZmVyIGlzCitjdXJyZW50IHdoZW4gcnVubmluZyB0aGlzIGhv b2suCisKK0lmIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgcmV0dXJucyBuaWwsIHRoZSB3aW5k b3cgd2lsbCBub3QgYmUgZGVsZXRlZAorYW5kIGFub3RoZXIgYnVmZmVyIHdpbGwgYmUgc2hv d24gaW4gaXQuICBUaGlzIGhvb2sgaXMgcnVuIGltcGxpY2l0bHkgYnkKK3RoZSBmdW5jdGlv bnMgYHF1aXQtcmVzdG9yZS13aW5kb3cnLCBga2lsbC1idWZmZXInIGFuZCBgYnVyeS1idWZm ZXInLgorSXQgaXMgbm90IHJ1biBieSBgZGVsZXRlLXdpbmRvdycgYW5kIGBkZWxldGUtd2lu ZG93cy1vbicuICBUaGUgcHVycG9zZQorb2YgdGhpcyBob29rIGlzIHRvIGdpdmUgaXRzIGNs aWVudHMgYSBjaGFuY2UgdG8gc2F2ZSBhIHdpbmRvdyBvciBpdHMKK2ZyYW1lIGZyb20gZGVs ZXRpb24gYmVjYXVzZSB0aGV5IG1pZ2h0IHN0aWxsIHdhbnQgdG8gdXNlIHRoYXQgd2luZG93 IG9yCitmcmFtZSBmb3IgdGhlaXIgb3duIHB1cnBvc2VzLiIKKyAgOnR5cGUgJ2hvb2sKKyAg OnZlcnNpb24gIjMxLjEiCisgIDpncm91cCAnd2luZG93cykKKworKGRlZnVuIHdpbmRvdy1k ZWxldGFibGUtcCAoJm9wdGlvbmFsIHdpbmRvdyBuby1ydW4pCiAgICJSZXR1cm4gdCBpZiBX SU5ET1cgY2FuIGJlIHNhZmVseSBkZWxldGVkIGZyb20gaXRzIGZyYW1lLgogV0lORE9XIG11 c3QgYmUgYSB2YWxpZCB3aW5kb3cgYW5kIGRlZmF1bHRzIHRvIHRoZSBzZWxlY3RlZCBvbmUu CiAKIFJldHVybiBgZnJhbWUnIGlmIFdJTkRPVyBpcyB0aGUgcm9vdCB3aW5kb3cgb2YgaXRz IGZyYW1lIGFuZCB0aGF0Ci1mcmFtZSBjYW4gYmUgc2FmZWx5IGRlbGV0ZWQuIgorZnJhbWUg Y2FuIGJlIHNhZmVseSBkZWxldGVkLgorCitVbmxlc3MgdGhlIG9wdGlvbmFsIGFyZ3VtZW50 IE5PLVJVTiBpcyBub24tbmlsLCBydW4gdGhlIGFibm9ybWFsIGhvb2sKK2B3aW5kb3ctZGVs ZXRhYmxlLWZ1bmN0aW9ucycgYW5kIHJldHVybiBuaWwgaWYgYW55IGZ1bmN0aW9uIG9uIHRo YXQgaG9vaworcmV0dXJucyBuaWwuIgogICAoc2V0cSB3aW5kb3cgKHdpbmRvdy1ub3JtYWxp emUtd2luZG93IHdpbmRvdykpCiAKICAgKHVubGVzcyAob3IgaWdub3JlLXdpbmRvdy1wYXJh bWV0ZXJzCkBAIC00MTM3LDE0ICs0MTYwLDIyIEBAIHdpbmRvdy1kZWxldGFibGUtcAogCQkg ICAgKGFuZCBtaW5pYnVmIChlcSBmcmFtZSAod2luZG93LWZyYW1lIG1pbmlidWYpKQogICAg ICAgICAgICAgICAgICAgICAgICAgIChub3QgKGVxIChkZWZhdWx0LXRvcGxldmVsLXZhbHVl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWluaWJ1ZmZlci1mb2xs b3dzLXNlbGVjdGVkLWZyYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHQpKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQpKSkpCisJCSAg KG9yIG5vLXJ1bgorCQkgICAgICAobm90ICh3aXRoLWN1cnJlbnQtYnVmZmVyICh3aW5kb3ct YnVmZmVyIHdpbmRvdykKKwkJCSAgICAgKHJ1bi1ob29rLXdpdGgtYXJncy11bnRpbC1mYWls dXJlCisJCQkgICAgICAnd2luZG93LWRlbGV0YWJsZS1mdW5jdGlvbnMgd2luZG93IHQpKSkp KQogCSdmcmFtZSkpCiAgICAgICgod2luZG93LW1pbmlidWZmZXItcCB3aW5kb3cpCiAgICAg ICA7OyBJZiBXSU5ET1cgaXMgdGhlIG1pbmlidWZmZXIgd2luZG93IG9mIGEgbm9uLW1pbmli dWZmZXItb25seQogICAgICAgOzsgZnJhbWUsIGl0IGNhbm5vdCBiZSBkZWxldGVkIHNlcGFy YXRlbHkuCiAgICAgICBuaWwpCi0gICAgICgob3IgaWdub3JlLXdpbmRvdy1wYXJhbWV0ZXJz Ci0JICAobm90IChlcSB3aW5kb3cgKHdpbmRvdy1tYWluLXdpbmRvdyBmcmFtZSkpKSkKKyAg ICAgKChhbmQgKG9yIGlnbm9yZS13aW5kb3ctcGFyYW1ldGVycworCSAgICAgICAobm90IChl cSB3aW5kb3cgKHdpbmRvdy1tYWluLXdpbmRvdyBmcmFtZSkpKSkKKwkgICAob3Igbm8tcnVu CisJICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh3aW5kb3ctYnVmZmVyIHdpbmRvdykK KwkJIChydW4taG9vay13aXRoLWFyZ3MtdW50aWwtZmFpbHVyZQorCQkgICd3aW5kb3ctZGVs ZXRhYmxlLWZ1bmN0aW9ucyB3aW5kb3cgbmlsKSkpKQogICAgICAgOzsgT3RoZXJ3aXNlLCBX SU5ET1cgY2FuIGJlIGRlbGV0ZWQgdW5sZXNzIGl0IGlzIHRoZSBtYWluIHdpbmRvdwogICAg ICAgOzsgb2YgaXRzIGZyYW1lLgogICAgICAgdCkpKSkKQEAgLTQ1MTUsMTcgKzQ1NDYsMjYg QEAgcmVjb3JkLXdpbmRvdy1idWZmZXIKICAgICAgIChwdXNoLXdpbmRvdy1idWZmZXItb250 by1wcmV2IHdpbmRvdykKICAgICAgIChydW4taG9va3MgJ2J1ZmZlci1saXN0LXVwZGF0ZS1o b29rKSkpKQogCi0oZGVmdW4gdW5yZWNvcmQtd2luZG93LWJ1ZmZlciAoJm9wdGlvbmFsIHdp bmRvdyBidWZmZXIpCisoZGVmdW4gdW5yZWNvcmQtd2luZG93LWJ1ZmZlciAoJm9wdGlvbmFs IHdpbmRvdyBidWZmZXIgYWxsKQogICAiVW5yZWNvcmQgQlVGRkVSIGluIFdJTkRPVy4KLVdJ TkRPVyBtdXN0IGJlIGEgbGl2ZSB3aW5kb3cgYW5kIGRlZmF1bHRzIHRvIHRoZSBzZWxlY3Rl ZCBvbmUuCi1CVUZGRVIgbXVzdCBiZSBhIGxpdmUgYnVmZmVyIGFuZCBkZWZhdWx0cyB0byB0 aGUgYnVmZmVyIG9mCi1XSU5ET1cuIgorV0lORE9XIG11c3QgYmUgYSBsaXZlIHdpbmRvdyBh bmQgZGVmYXVsdHMgdG8gdGhlIHNlbGVjdGVkIG9uZS4gIEJVRkZFUgorbXVzdCBiZSBhIGxp dmUgYnVmZmVyIGFuZCBkZWZhdWx0cyB0byB0aGUgYnVmZmVyIG9mIFdJTkRPVyAoYWx0aG91 Z2gKK3RoYXQgZGVmYXVsdCBoYXJkbHkgbWFrZXMgYW55IHNlbnNlKS4KKworTWFrZSBCVUZG RVIgZGlzYXBwZWFyIGZyb20gbW9zdCBjb21wb25lbnRzIHNwZWNpZmllZCBieSB0aGUgb2Jq ZWN0IG9mCitXSU5ET1cuICBUaGlzIGluY2x1ZGVzIHRoZSBidWZmZXJzIHByZXZpb3VzbHkg c2hvd24gaW4gV0lORE9XIGFzIHdlbGwgYXMKK2FueSBidWZmZXJzIG1lbnRpb25lZCBieSBX SU5ET1cncyBgcXVpdC1yZXN0b3JlJyBhbmQgYHF1aXQtcmVzdG9yZS1wcmV2JworcGFyYW1l dGVycy4KKworVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYHJlcGxhY2UtYnVmZmVyLWlu LXdpbmRvd3MnIHdoaWNoIGlzIG1haW5seQorY29uY2VybmVkIHdpdGggZmluZGluZyBhbm90 aGVyIGJ1ZmZlciBmb3IgYWxsIHdpbmRvd3Mgc2hvd2luZyBhIGJ1ZmZlcgorYWJvdXQgdG8g YmUga2lsbGVkLiAgSXQncyBhbHNvIGNhbGxlZCBieSBgZGVsZXRlLXdpbmRvd3Mtb24nIGFu ZAorYHF1aXQtd2luZG93cy1vbicgYW5kIHNob3VsZCBiZSBjYWxsZWQgd2hlcmV2ZXIgdGhl IHRyYWNlcyBvZiBhIGJ1ZmZlcgorc2hvdWxkIGJlIGVyYXNlZCBmcm9tIHRoZSB3aW5kb3cg aGFuZGxpbmcgc3Vic3lzdGVtLiIKICAgKGxldCogKCh3aW5kb3cgKHdpbmRvdy1ub3JtYWxp emUtd2luZG93IHdpbmRvdyB0KSkKIAkgKGJ1ZmZlciAob3IgYnVmZmVyICh3aW5kb3ctYnVm ZmVyIHdpbmRvdykpKSkKLSAgICAoc2V0LXdpbmRvdy1wcmV2LWJ1ZmZlcnMKLSAgICAgd2lu ZG93IChhc3NxLWRlbGV0ZS1hbGwgYnVmZmVyICh3aW5kb3ctcHJldi1idWZmZXJzIHdpbmRv dykpKQotICAgIChzZXQtd2luZG93LW5leHQtYnVmZmVycwotICAgICB3aW5kb3cgKGRlbHEg YnVmZmVyICh3aW5kb3ctbmV4dC1idWZmZXJzIHdpbmRvdykpKSkpCisgICAgKHdoZW4gKGJ1 ZmZlci1saXZlLXAgYnVmZmVyKQorICAgICAgKHdpbmRvdy1kaXNjYXJkLWJ1ZmZlci1mcm9t LXdpbmRvdyBidWZmZXIgd2luZG93IGFsbCkpKSkKIAogKGRlZnVuIHNldC13aW5kb3ctYnVm ZmVyLXN0YXJ0LWFuZC1wb2ludCAod2luZG93IGJ1ZmZlciAmb3B0aW9uYWwgc3RhcnQgcG9p bnQpCiAgICJTZXQgV0lORE9XJ3MgYnVmZmVyIHRvIEJVRkZFUi4KQEAgLTQ2ODMsNyArNDcy Myw3IEBAIHN3aXRjaC10by1wcmV2LWJ1ZmZlcgogICAgICAgICAgICAoKG9yIHN3aXRjaC10 by1wcmV2LWJ1ZmZlci1za2lwCiAgICAgICAgICAgICAgICAgKG5vdCBzd2l0Y2gtdG8tdmlz aWJsZS1idWZmZXIpKQogICAgICAgICAgICAgZnJhbWUpKSkKLSAgICAgICAgIGVudHJ5IG5l dy1idWZmZXIga2lsbGVkLWJ1ZmZlcnMgc2tpcHBlZCkKKyAgICAgICAgIGVudHJ5IG5ldy1i dWZmZXIgc2tpcHBlZCkKICAgICAod2hlbiAod2luZG93LW1pbmlidWZmZXItcCB3aW5kb3cp CiAgICAgICA7OyBEb24ndCBzd2l0Y2ggaW4gbWluaWJ1ZmZlciB3aW5kb3cuCiAgICAgICAo dW5sZXNzIChzZXRxIHdpbmRvdyAobWluaWJ1ZmZlci1zZWxlY3RlZC13aW5kb3cpKQpAQCAt NDY5OSwxNCArNDczOSwxNCBAQCBzd2l0Y2gtdG8tcHJldi1idWZmZXIKICAgICAgIChkb2xp c3QgKGVudHJ5ICh3aW5kb3ctcHJldi1idWZmZXJzIHdpbmRvdykpCiAJKHdoZW4gKGFuZCAo bm90IChlcSAoY2FyIGVudHJ5KSBvbGQtYnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAo c2V0cSBuZXctYnVmZmVyIChjYXIgZW50cnkpKQotCQkgICAob3IgKGJ1ZmZlci1saXZlLXAg bmV3LWJ1ZmZlcikKLQkJICAgICAgIChub3QgKHNldHEga2lsbGVkLWJ1ZmZlcnMKLQkJCQkg IChjb25zIG5ldy1idWZmZXIga2lsbGVkLWJ1ZmZlcnMpKSkpCi0gICAgICAgICAgICAgICAg ICAgKG9yIChudWxsIHByZWQpIChmdW5jYWxsIHByZWQgbmV3LWJ1ZmZlcikpCisJCSAgIDs7 IEJld2FyZTogbmV3LWJ1ZmZlciBtaWdodCBoYXZlIGJlZW4ga2lsbGVkIGJ5CisJCSAgIDs7 IGEgZnVuY3Rpb24gb24gJ2J1ZmZlci1wcmVkaWNhdGUnLgorCQkgICAoYnVmZmVyLWxpdmUt cCBuZXctYnVmZmVyKQorCQkgICAob3IgKG51bGwgcHJlZCkgKGZ1bmNhbGwgcHJlZCBuZXct YnVmZmVyKSkKIAkJICAgOzsgV2hlbiBCVVJZLU9SLUtJTEwgaXMgbmlsLCBhdm9pZCBzd2l0 Y2hpbmcgdG8gYQogCQkgICA7OyBidWZmZXIgaW4gV0lORE9XJ3MgbmV4dCBidWZmZXJzIGxp c3QuCiAJCSAgIChvciBidXJ5LW9yLWtpbGwgKG5vdCAobWVtcSBuZXctYnVmZmVyIG5leHQt YnVmZmVycykpKSkKLSAgICAgICAgICAoaWYgKHN3aXRjaC10by1wcmV2LWJ1ZmZlci1za2lw LXAgc2tpcCB3aW5kb3cgbmV3LWJ1ZmZlciBidXJ5LW9yLWtpbGwpCisJICAoaWYgKHN3aXRj aC10by1wcmV2LWJ1ZmZlci1za2lwLXAgc2tpcCB3aW5kb3cgbmV3LWJ1ZmZlciBidXJ5LW9y LWtpbGwpCiAJICAgICAgKHNldHEgc2tpcHBlZCBuZXctYnVmZmVyKQogCSAgICAoc2V0LXdp bmRvdy1idWZmZXItc3RhcnQtYW5kLXBvaW50CiAJICAgICB3aW5kb3cgbmV3LWJ1ZmZlciAo bnRoIDEgZW50cnkpIChudGggMiBlbnRyeSkpCkBAIC00NzQwLDExICs0NzgwLDcgQEAgc3dp dGNoLXRvLXByZXYtYnVmZmVyCiAJOzsgU2NhbiByZXZlcnRlZCBuZXh0IGJ1ZmZlcnMgbGFz dCAobXVzdCBub3QgdXNlIG5yZXZlcnNlCiAJOzsgaGVyZSEpLgogCShkb2xpc3QgKGJ1ZmZl ciAocmV2ZXJzZSBuZXh0LWJ1ZmZlcnMpKQotCSAgOzsgQWN0dWFsbHksIGJ1ZmZlciBfbXVz dF8gYmUgbGl2ZSBoZXJlIHNpbmNlIG90aGVyd2lzZSBpdAotCSAgOzsgd291bGQgaGF2ZSBi ZWVuIGNhdWdodCBpbiB0aGUgc2NhbiBvZiBwcmV2aW91cyBidWZmZXJzLgotCSAgKHdoZW4g KGFuZCAob3IgKGJ1ZmZlci1saXZlLXAgYnVmZmVyKQotCQkJIChub3QgKHNldHEga2lsbGVk LWJ1ZmZlcnMKLQkJCQkgICAgKGNvbnMgYnVmZmVyIGtpbGxlZC1idWZmZXJzKSkpKQorCSAg KHdoZW4gKGFuZCAoYnVmZmVyLWxpdmUtcCBidWZmZXIpCiAJCSAgICAgKG5vdCAoZXEgYnVm ZmVyIG9sZC1idWZmZXIpKQogICAgICAgICAgICAgICAgICAgICAgKG9yIChudWxsIHByZWQp IChmdW5jYWxsIHByZWQgYnVmZmVyKSkKIAkJICAgICAoc2V0cSBlbnRyeSAoYXNzcSBidWZm ZXIgKHdpbmRvdy1wcmV2LWJ1ZmZlcnMgd2luZG93KSkpKQpAQCAtNDc2NSw5ICs0ODAxLDcg QEAgc3dpdGNoLXRvLXByZXYtYnVmZmVyCiAJCQkgIChhc3NxIG9sZC1idWZmZXIgKHdpbmRv dy1wcmV2LWJ1ZmZlcnMgd2luZG93KSkpKSkKIAkgIDs7IFJlbW92ZSBgb2xkLWJ1ZmZlcicg ZnJvbSBXSU5ET1cncyBwcmV2aW91cyBhbmQgKHJlc3RvcmVkIGxpc3QKIAkgIDs7IG9mKSBu ZXh0IGJ1ZmZlcnMuCi0JICAoc2V0LXdpbmRvdy1wcmV2LWJ1ZmZlcnMKLQkgICB3aW5kb3cg KGFzc3EtZGVsZXRlLWFsbCBvbGQtYnVmZmVyICh3aW5kb3ctcHJldi1idWZmZXJzIHdpbmRv dykpKQotCSAgKHNldC13aW5kb3ctbmV4dC1idWZmZXJzIHdpbmRvdyAoZGVscSBvbGQtYnVm ZmVyIG5leHQtYnVmZmVycykpCisJICAodW5yZWNvcmQtd2luZG93LWJ1ZmZlciB3aW5kb3cg b2xkLWJ1ZmZlcikKIAkgICh3aGVuIGVudHJ5CiAJICAgIDs7IEFwcGVuZCBvbGQtYnVmZmVy J3MgZW50cnkgdG8gbGlzdCBvZiBXSU5ET1cncyBwcmV2aW91cwogCSAgICA7OyBidWZmZXJz IHNvIGl0J3MgbGVzcyBsaWtlbHkgdG8gZ2V0IHN3aXRjaGVkIHRvIHNvb24gYnV0CkBAIC00 NzgwLDE0ICs0ODE0LDYgQEAgc3dpdGNoLXRvLXByZXYtYnVmZmVyCiAgICAgICAoc2V0LXdp bmRvdy1uZXh0LWJ1ZmZlcnMKICAgICAgICB3aW5kb3cgKGNvbnMgb2xkLWJ1ZmZlciAoZGVs cSBvbGQtYnVmZmVyIG5leHQtYnVmZmVycykpKSkKIAotICAgIDs7IFJlbW92ZSBraWxsZWQg YnVmZmVycyBmcm9tIFdJTkRPVydzIHByZXZpb3VzIGFuZCBuZXh0IGJ1ZmZlcnMuCi0gICAg KHdoZW4ga2lsbGVkLWJ1ZmZlcnMKLSAgICAgIChkb2xpc3QgKGJ1ZmZlciBraWxsZWQtYnVm ZmVycykKLQkoc2V0LXdpbmRvdy1wcmV2LWJ1ZmZlcnMKLQkgd2luZG93IChhc3NxLWRlbGV0 ZS1hbGwgYnVmZmVyICh3aW5kb3ctcHJldi1idWZmZXJzIHdpbmRvdykpKQotCShzZXQtd2lu ZG93LW5leHQtYnVmZmVycwotCSB3aW5kb3cgKGRlbHEgYnVmZmVyICh3aW5kb3ctbmV4dC1i dWZmZXJzIHdpbmRvdykpKSkpCi0KICAgICA7OyBSZXR1cm4gbmV3LWJ1ZmZlci4KICAgICBu ZXctYnVmZmVyKSkKIApAQCAtNDgxOSw3ICs0ODQ1LDcgQEAgc3dpdGNoLXRvLW5leHQtYnVm ZmVyCiAgICAgICAgICAgICgob3Igc3dpdGNoLXRvLXByZXYtYnVmZmVyLXNraXAKICAgICAg ICAgICAgICAgICAobm90IHN3aXRjaC10by12aXNpYmxlLWJ1ZmZlcikpCiAgICAgICAgICAg ICBmcmFtZSkpKQotCSBuZXctYnVmZmVyIGVudHJ5IGtpbGxlZC1idWZmZXJzIHNraXBwZWQp CisJIG5ldy1idWZmZXIgZW50cnkgc2tpcHBlZCkKICAgICAod2hlbiAod2luZG93LW1pbmli dWZmZXItcCB3aW5kb3cpCiAgICAgICA7OyBEb24ndCBzd2l0Y2ggaW4gbWluaWJ1ZmZlciB3 aW5kb3cuCiAgICAgICAodW5sZXNzIChzZXRxIHdpbmRvdyAobWluaWJ1ZmZlci1zZWxlY3Rl ZC13aW5kb3cpKQpAQCAtNDgzMiw5ICs0ODU4LDcgQEAgc3dpdGNoLXRvLW5leHQtYnVmZmVy CiAgICAgKGNhdGNoICdmb3VuZAogICAgICAgOzsgU2NhbiBXSU5ET1cncyBuZXh0IGJ1ZmZl cnMgZmlyc3QuCiAgICAgICAoZG9saXN0IChidWZmZXIgbmV4dC1idWZmZXJzKQotCSh3aGVu IChhbmQgKG9yIChidWZmZXItbGl2ZS1wIGJ1ZmZlcikKLQkJICAgICAgIChub3QgKHNldHEg a2lsbGVkLWJ1ZmZlcnMKLQkJCQkgIChjb25zIGJ1ZmZlciBraWxsZWQtYnVmZmVycykpKSkK Kwkod2hlbiAoYW5kIChidWZmZXItbGl2ZS1wIGJ1ZmZlcikKIAkJICAgKG5vdCAoZXEgYnVm ZmVyIG9sZC1idWZmZXIpKQogICAgICAgICAgICAgICAgICAgIChvciAobnVsbCBwcmVkKSAo ZnVuY2FsbCBwcmVkIGJ1ZmZlcikpCiAJCSAgIChzZXRxIGVudHJ5IChhc3NxIGJ1ZmZlciAo d2luZG93LXByZXYtYnVmZmVycyB3aW5kb3cpKSkpCkBAIC00ODY3LDkgKzQ4OTEsNyBAQCBz d2l0Y2gtdG8tbmV4dC1idWZmZXIKIAkod2hlbiAoYW5kIChub3QgKGVxIG5ldy1idWZmZXIg KGNhciBlbnRyeSkpKQogICAgICAgICAgICAgICAgICAgIChub3QgKGVxIG9sZC1idWZmZXIg KGNhciBlbnRyeSkpKQogICAgICAgICAgICAgICAgICAgIChzZXRxIG5ldy1idWZmZXIgKGNh ciBlbnRyeSkpCi0JCSAgIChvciAoYnVmZmVyLWxpdmUtcCBuZXctYnVmZmVyKQotCQkgICAg ICAgKG5vdCAoc2V0cSBraWxsZWQtYnVmZmVycwotCQkJCSAgKGNvbnMgbmV3LWJ1ZmZlciBr aWxsZWQtYnVmZmVycykpKSkKKwkJICAgKGJ1ZmZlci1saXZlLXAgbmV3LWJ1ZmZlcikKICAg ICAgICAgICAgICAgICAgICAob3IgKG51bGwgcHJlZCkgKGZ1bmNhbGwgcHJlZCBuZXctYnVm ZmVyKSkpCiAgICAgICAgICAgKGlmIChzd2l0Y2gtdG8tcHJldi1idWZmZXItc2tpcC1wIHNr aXAgd2luZG93IG5ldy1idWZmZXIpCiAJICAgICAgKHNldHEgc2tpcHBlZCAob3Igc2tpcHBl ZCBuZXctYnVmZmVyKSkKQEAgLTQ4ODUsMTQgKzQ5MDcsNiBAQCBzd2l0Y2gtdG8tbmV4dC1i dWZmZXIKICAgICA7OyBSZW1vdmUgYG5ldy1idWZmZXInIGZyb20gYW5kIHJlc3RvcmUgV0lO RE9XJ3MgbmV4dCBidWZmZXJzLgogICAgIChzZXQtd2luZG93LW5leHQtYnVmZmVycyB3aW5k b3cgKGRlbHEgbmV3LWJ1ZmZlciBuZXh0LWJ1ZmZlcnMpKQogCi0gICAgOzsgUmVtb3ZlIGtp bGxlZCBidWZmZXJzIGZyb20gV0lORE9XJ3MgcHJldmlvdXMgYW5kIG5leHQgYnVmZmVycy4K LSAgICAod2hlbiBraWxsZWQtYnVmZmVycwotICAgICAgKGRvbGlzdCAoYnVmZmVyIGtpbGxl ZC1idWZmZXJzKQotCShzZXQtd2luZG93LXByZXYtYnVmZmVycwotCSB3aW5kb3cgKGFzc3Et ZGVsZXRlLWFsbCBidWZmZXIgKHdpbmRvdy1wcmV2LWJ1ZmZlcnMgd2luZG93KSkpCi0JKHNl dC13aW5kb3ctbmV4dC1idWZmZXJzCi0JIHdpbmRvdyAoZGVscSBidWZmZXIgKHdpbmRvdy1u ZXh0LWJ1ZmZlcnMgd2luZG93KSkpKSkKLQogICAgIDs7IFJldHVybiBuZXctYnVmZmVyLgog ICAgIG5ldy1idWZmZXIpKQogCkBAIC01MDQ0LDYgKzUwNTgsMTggQEAgcHJldmlvdXMtYnVm ZmVyCiAgICAgICAgICAgICAgICAgIChub3QgKG9yIGV4ZWN1dGluZy1rYmQtbWFjcm8gbm9u aW50ZXJhY3RpdmUpKSkKICAgICAgICAgKHVzZXItZXJyb3IgIk5vIHByZXZpb3VzIGJ1ZmZl ciIpKSkpKSkKIAorKGRlZmN1c3RvbSBraWxsLWJ1ZmZlci1xdWl0LXdpbmRvd3MgbmlsCisg ICJOb24tbmlsIG1lYW5zIGtpbGxpbmcgYnVmZmVycyBzaGFsbCBxdWl0IHdpbmRvd3MuCitJ ZiB0aGlzIGlzIG5pbCwga2lsbGluZyBhIGJ1ZmZlciBtYXkgb25seSBkZWxldGUgd2luZG93 cyBkZWRpY2F0ZWQgdG8KK3RoYXQgYnVmZmVyLiAgT3RoZXJ3aXNlLCBga2lsbC1idWZmZXIn IGhhcyBgcXVpdC1yZXN0b3JlLXdpbmRvdycgZGVhbAord2l0aCBhbnkgd2luZG93IHNob3dp bmcgdGhlIGJ1ZmZlciB0byBiZSBraWxsZWQuICBUaGF0IGZ1bmN0aW9uIG1heQorZGVsZXRl IHN1Y2ggYSB3aW5kb3cgZXZlbiBpZiBpdCdzIG5vdCBkZWRpY2F0ZWQgdG8gaXRzIGJ1ZmZl ci4gIEFsc28sCitgZGVsZXRlLXdpbmRvd3Mtb24nIHdpbGwgdXNlIGBxdWl0LXJlc3RvcmUt d2luZG93JyBhcyBmYWxsYmFjayB3aGVuIGEKK3dpbmRvdyBjYW5ub3QgYmUgZGVsZXRlZCBv dGhlcndpc2UuIgorICA6dHlwZSAnYm9vbGVhbgorICA6dmVyc2lvbiAiMzEuMSIKKyAgOmdy b3VwICd3aW5kb3dzKQorCiAoZGVmdW4gZGVsZXRlLXdpbmRvd3Mtb24gKCZvcHRpb25hbCBi dWZmZXItb3ItbmFtZSBmcmFtZSkKICAgIkRlbGV0ZSBhbGwgd2luZG93cyBzaG93aW5nIEJV RkZFUi1PUi1OQU1FLgogQlVGRkVSLU9SLU5BTUUgbWF5IGJlIGEgYnVmZmVyIG9yIHRoZSBu YW1lIG9mIGFuIGV4aXN0aW5nIGJ1ZmZlcgpAQCAtNTA3NSwyMSArNTEwMSwyMiBAQCBkZWxl dGUtd2luZG93cy1vbgogdXNlIFxcW3VuaXZlcnNhbC1hcmd1bWVudF0gMCB0byBzcGVjaWZ5 IGFsbCB3aW5kb3dzIG9ubHkgb24KIHRoZSBjdXJyZW50IHRlcm1pbmFsJ3MgZnJhbWVzLgog Ci1JZiBhIGZyYW1lJ3Mgcm9vdCB3aW5kb3cgc2hvd3MgdGhlIGJ1ZmZlciBzcGVjaWZpZWQg YnkKLUJVRkZFUi1PUi1OQU1FIGFuZCBpcyBkZWRpY2F0ZWQgdG8gdGhhdCBidWZmZXIgYW5k IHRoYXQgZnJhbWUKLWRvZXMgbm90IGhvc3QgdGhlIGFjdGl2ZSBtaW5pYnVmZmVyIHdpbmRv dyBhbmQgdGhlcmUgaXMgYXQgbGVhc3QKLW9uZSBvdGhlciBmcmFtZSBvbiB0aGF0IGZyYW1l J3MgdGVybWluYWwsIGRlbGV0ZSB0aGF0IGZyYW1lLgotT3RoZXJ3aXNlLCBkbyBub3QgZGVs ZXRlIGEgZnJhbWUncyByb290IHdpbmRvdyBpZiBpdCBzaG93cyB0aGUKLWJ1ZmZlciBzcGVj aWZpZWQgYnkgQlVGRkVSLU9SLU5BTUUgYW5kIGRvIG5vdCBkZWxldGUgYW55IGZyYW1lJ3MK LW1haW4gd2luZG93IHNob3dpbmcgdGhhdCBidWZmZXIgZWl0aGVyLiAgUmF0aGVyLCBpbiBh bnkgc3VjaAotY2FzZSwgY2FsbCBgc3dpdGNoLXRvLXByZXYtYnVmZmVyJyB0byBzaG93IGFu b3RoZXIgYnVmZmVyIGluIHRoYXQKLXdpbmRvdyBhbmQgbWFrZSBzdXJlIHRoZSB3aW5kb3cg aXMgbm8gbW9yZSBkZWRpY2F0ZWQgdG8gaXRzCi1idWZmZXIuCi0KLUlmIHRoZSBidWZmZXIg c3BlY2lmaWVkIGJ5IEJVRkZFUi1PUi1OQU1FIGlzIHNob3duIGluIGEKLW1pbmlidWZmZXIg d2luZG93LCBkbyBub3RoaW5nIGZvciB0aGF0IHdpbmRvdy4gIEZvciBhbnkgd2luZG93Ci10 aGF0IGRvZXMgbm90IHNob3cgdGhhdCBidWZmZXIsIHJlbW92ZSB0aGUgYnVmZmVyIGZyb20g dGhhdAotd2luZG93J3MgbGlzdHMgb2YgcHJldmlvdXMgYW5kIG5leHQgYnVmZmVycy4iCitJ ZiBhIGZyYW1lJ3Mgcm9vdCB3aW5kb3cgc2hvd3MgdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkg QlVGRkVSLU9SLU5BTUUsCitpcyBkZWRpY2F0ZWQgdG8gdGhhdCBidWZmZXIsIHRoYXQgZnJh bWUgZG9lcyBub3QgaG9zdCB0aGUgYWN0aXZlCittaW5pYnVmZmVyIHdpbmRvdyBhbmQgdGhl cmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGZyYW1lIG9uIHRoYXQgZnJhbWUncwordGVybWlu YWwsIGRlbGV0ZSB0aGF0IGZyYW1lLiAgT3RoZXJ3aXNlLCBkbyBub3QgZGVsZXRlIGEgZnJh bWUncyByb290Cit3aW5kb3cgaWYgaXQgc2hvd3MgdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkg QlVGRkVSLU9SLU5BTUUgYW5kIGRvIG5vdAorZGVsZXRlIGFueSBmcmFtZSdzIG1haW4gd2lu ZG93IHNob3dpbmcgdGhhdCBidWZmZXIgZWl0aGVyLiAgUmF0aGVyLCBpbgorYW55IHN1Y2gg Y2FzZSwgY2FsbCBlaXRoZXIgYHF1aXQtcmVzdG9yZS13aW5kb3cnIChwcm92aWRlZAorYGtp bGwtYnVmZmVyLXF1aXQtd2luZG93cycgaXMgbm9uLW5pbCkgb3IgYHN3aXRjaC10by1wcmV2 LWJ1ZmZlcicgdG8KK3Nob3cgYW5vdGhlciBidWZmZXIgaW4gdGhhdCB3aW5kb3cgYW5kIG1h a2Ugc3VyZSB0aGUgd2luZG93IGlzIG5vIG1vcmUKK2RlZGljYXRlZCB0byBpdHMgYnVmZmVy LgorCitJZiB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBCVUZGRVItT1ItTkFNRSBpcyBzaG93 biBpbiBhIG1pbmlidWZmZXIKK3dpbmRvdywgZG8gbm90aGluZyBmb3IgdGhhdCB3aW5kb3cu ICBGb3IgYW55IHdpbmRvdyB0aGF0IGRvZXMgbm90IHNob3cKK3RoYXQgYnVmZmVyLCByZW1v dmUgdGhlIGJ1ZmZlciBmcm9tIHRoYXQgd2luZG93J3MgbGlzdHMgb2YgcHJldmlvdXMgYW5k CituZXh0IGJ1ZmZlcnMgYW5kIHJlbW92ZSBhbnkgYHF1aXQtcmVzdG9yZScgYW5kIGBxdWl0 LXJlc3RvcmUtcHJldicKK3BhcmFtZXRlcnMgbmFtaW5nIGl0LiIKICAgKGludGVyYWN0aXZl CiAgICAobGV0ICgoZnJhbWUgKGNvbmQKICAgICAgICAgICAgICAgICAgKChhbmQgKG51bWJl cnAgY3VycmVudC1wcmVmaXgtYXJnKQpAQCAtNTEwNywxMSArNTEzNCwxMiBAQCBkZWxldGUt d2luZG93cy1vbgogICAgICAgICAgICBmcmFtZSkpKQogICAobGV0ICgoYnVmZmVyICh3aW5k b3ctbm9ybWFsaXplLWJ1ZmZlciBidWZmZXItb3ItbmFtZSkpCiAJOzsgSGFuZGxlIHRoZSAi aW52ZXJ0ZWQiIG1lYW5pbmcgb2YgdGhlIEZSQU1FIGFyZ3VtZW50IHdydCBvdGhlcgotCTs7 IGB3aW5kb3ctbGlzdC0xJyBiYXNlZCBmdW5jdGlvbi4KLQkoYWxsLWZyYW1lcyAoY29uZCAo KG5vdCBmcmFtZSkgdCkgKChlcSBmcmFtZSB0KSBuaWwpICh0IGZyYW1lKSkpKQotICAgIChk b2xpc3QgKHdpbmRvdyAod2luZG93LWxpc3QtMSBuaWwgbmlsIGFsbC1mcmFtZXMpKQorCTs7 IGB3aW5kb3ctbGlzdC0xJyBiYXNlZCBmdW5jdGlvbnMuCisJKGZyYW1lcyAoY29uZCAoKG5v dCBmcmFtZSkgdCkgKChlcSBmcmFtZSB0KSBuaWwpICh0IGZyYW1lKSkpKQorICAgIChkb2xp c3QgKHdpbmRvdyAod2luZG93LWxpc3QtMSBuaWwgJ25vbWluaSBmcmFtZXMpKQogICAgICAg KGlmIChlcSAod2luZG93LWJ1ZmZlciB3aW5kb3cpIGJ1ZmZlcikKLQkgIChsZXQgKChkZWxl dGFibGUgKHdpbmRvdy1kZWxldGFibGUtcCB3aW5kb3cpKQorCSAgOzsgRG9uJ3QgcnVuICd3 aW5kb3ctZGVsZXRhYmxlLWZ1bmN0aW9ucycuCisJICAobGV0ICgoZGVsZXRhYmxlICh3aW5k b3ctZGVsZXRhYmxlLXAgd2luZG93IHQpKQogICAgICAgICAgICAgICAgIChkZWRpY2F0ZWQg KHdpbmRvdy1kZWRpY2F0ZWQtcCB3aW5kb3cpKSkKIAkgICAgKGNvbmQKIAkgICAgICgoYW5k IChlcSBkZWxldGFibGUgJ2ZyYW1lKSBkZWRpY2F0ZWQpCkBAIC01MTIwLDQzICs1MTQ4LDc3 IEBAIGRlbGV0ZS13aW5kb3dzLW9uCiAJICAgICAoKGVxIGRlbGV0YWJsZSB0KQogCSAgICAg IDs7IERlbGV0ZSB3aW5kb3cuCiAJICAgICAgKGRlbGV0ZS13aW5kb3cgd2luZG93KSkKKwkg ICAgIChraWxsLWJ1ZmZlci1xdWl0LXdpbmRvd3MKKwkgICAgICAocXVpdC1yZXN0b3JlLXdp bmRvdyB3aW5kb3cgJ2J1cnkpCisJICAgICAgKHdoZW4gKHdpbmRvdy1saXZlLXAgd2luZG93 KQorCQk7OyBVbnJlY29yZCBCVUZGRVIgaW4gdGhpcyB3aW5kb3cuCisJCSh1bnJlY29yZC13 aW5kb3ctYnVmZmVyIHdpbmRvdyBidWZmZXIgdCkpKQogCSAgICAgKHQKIAkgICAgICA7OyBJ biB3aW5kb3cgc3dpdGNoIHRvIHByZXZpb3VzIGJ1ZmZlci4KIAkgICAgICAoc2V0LXdpbmRv dy1kZWRpY2F0ZWQtcCB3aW5kb3cgbmlsKQogCSAgICAgIChzd2l0Y2gtdG8tcHJldi1idWZm ZXIgd2luZG93ICdidXJ5KQotICAgICAgICAgICAgICA7OyBSZXN0b3JlIHRoZSBkZWRpY2F0 ZWQgJ3NpZGUnIGZsYWcuCi0gICAgICAgICAgICAgICh3aGVuIChlcSBkZWRpY2F0ZWQgJ3Np ZGUpCi0gICAgICAgICAgICAgICAgKHNldC13aW5kb3ctZGVkaWNhdGVkLXAgd2luZG93ICdz aWRlKSkpKSkKKwkgICAgICA7OyBSZXN0b3JlIHRoZSBkZWRpY2F0ZWQgJ3NpZGUnIGZsYWcu CisJICAgICAgKHdoZW4gKGVxIGRlZGljYXRlZCAnc2lkZSkKKyAgICAgICAgICAgICAgICAo c2V0LXdpbmRvdy1kZWRpY2F0ZWQtcCB3aW5kb3cgJ3NpZGUpKQorCSAgICAgICh3aGVuICh3 aW5kb3ctbGl2ZS1wIHdpbmRvdykKKwkJOzsgVW5yZWNvcmQgQlVGRkVSIGluIHRoaXMgd2lu ZG93LgorCQkodW5yZWNvcmQtd2luZG93LWJ1ZmZlciB3aW5kb3cgYnVmZmVyIHQpKSkpKQog CTs7IElmIGEgd2luZG93IGRvZXNuJ3Qgc2hvdyBCVUZGRVIsIHVucmVjb3JkIEJVRkZFUiBp biBpdC4KLQkodW5yZWNvcmQtd2luZG93LWJ1ZmZlciB3aW5kb3cgYnVmZmVyKSkpKSkKKwko dW5yZWNvcmQtd2luZG93LWJ1ZmZlciB3aW5kb3cgYnVmZmVyIHQpKSkpKQogCiAoZGVmdW4g cmVwbGFjZS1idWZmZXItaW4td2luZG93cyAoJm9wdGlvbmFsIGJ1ZmZlci1vci1uYW1lKQog ICAiUmVwbGFjZSBCVUZGRVItT1ItTkFNRSB3aXRoIHNvbWUgb3RoZXIgYnVmZmVyIGluIGFs bCB3aW5kb3dzIHNob3dpbmcgaXQuCi1CVUZGRVItT1ItTkFNRSBtYXkgYmUgYSBidWZmZXIg b3IgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgYnVmZmVyCi1hbmQgZGVmYXVsdHMgdG8gdGhl IGN1cnJlbnQgYnVmZmVyLgotCi1XaXRoIHRoZSBleGNlcHRpb24gb2Ygc2lkZSB3aW5kb3dz LCB3aGVuIGEgd2luZG93IHNob3dpbmcgQlVGRkVSLU9SLU5BTUUKLWlzIGRlZGljYXRlZCwg dGhhdCB3aW5kb3cgaXMgZGVsZXRlZC4gIElmIHRoYXQgd2luZG93IGlzIHRoZSBvbmx5IHdp bmRvdwotb24gaXRzIGZyYW1lLCB0aGUgZnJhbWUgaXMgZGVsZXRlZCB0b28gd2hlbiB0aGVy ZSBhcmUgb3RoZXIgZnJhbWVzIGxlZnQuCi1JZiB0aGVyZSBhcmUgbm8gb3RoZXIgZnJhbWVz IGxlZnQsIHNvbWUgb3RoZXIgYnVmZmVyIGlzIGRpc3BsYXllZCBpbiB0aGF0CitCVUZGRVIt T1ItTkFNRSBtYXkgYmUgYSBidWZmZXIgb3IgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgYnVm ZmVyIGFuZAorZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLiAgTWluaWJ1ZmZlciB3 aW5kb3dzIGFyZSBub3QgY29uc2lkZXJlZC4KKworSWYgdGhlIG9wdGlvbiBga2lsbC1idWZm ZXItcXVpdC13aW5kb3dzJyBpcyBuaWwsIGJlaGF2ZSBhcyBmb2xsb3dzOiBXaXRoCit0aGUg ZXhjZXB0aW9uIG9mIHNpZGUgd2luZG93cywgd2hlbiBhIHdpbmRvdyBzaG93aW5nIEJVRkZF Ui1PUi1OQU1FIGlzCitkZWRpY2F0ZWQsIGRlbGV0ZSB0aGF0IHdpbmRvdy4gIElmIHRoYXQg d2luZG93IGlzIHRoZSBvbmx5IHdpbmRvdyBvbiBpdHMKK2ZyYW1lLCBkZWxldGUgaXRzIGZy YW1lIHdoZW4gdGhlcmUgYXJlIG90aGVyIGZyYW1lcyBsZWZ0LiAgSW4gYW55IG90aGVyCitj YXNlLCBjYWxsIGBzd2l0Y2gtdG8tcHJldi1idWZmZXInIHRvIGRpc3BsYXkgc29tZSBvdGhl ciBidWZmZXIgaW4gdGhhdAogd2luZG93LgogCi1UaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhl IGJ1ZmZlciBkZW5vdGVkIGJ5IEJVRkZFUi1PUi1OQU1FIGZyb20KLWFsbCB3aW5kb3ctbG9j YWwgYnVmZmVyIGxpc3RzLiIKK0lmIGBraWxsLWJ1ZmZlci1xdWl0LXdpbmRvd3MnIGlzIG5v bi1uaWwsIGNhbGwgYHF1aXQtcmVzdG9yZS13aW5kb3cnIGZvcgorYW55IHdpbmRvdyBzaG93 aW5nIEJVRkZFUi1PUi1OQU1FIHdpdGggdGhlIGFyZ3VtZW50IEJVUlktT1ItS0lMTCBzZXQg dG8KK2BraWxsaW5nJyB0byBhdm9pZCB0aGF0IHRoZSBsYXR0ZXIga2lsbHMgdGhlIGJ1ZmZl ciBwcmVtYXR1cmVseS4KKworSW4gZWl0aGVyIGNhc2UsIHJlbW92ZSB0aGUgYnVmZmVyIGRl bm90ZWQgYnkgQlVGRkVSLU9SLU5BTUUgZnJvbSB0aGUKK2xpc3RzIG9mIHByZXZpb3VzIGFu ZCBuZXh0IGJ1ZmZlcnMgb2YgYWxsIHdpbmRvd3MgYW5kIHJlbW92ZSBhbnkKK2BxdWl0LXJl c3RvcmUnIG9yIGBxdWl0LXJlc3RvcmUtcHJldicgcGFyYW1ldGVycyBtZW50aW9uaW5nIGl0 LgorCitJZiwgZm9yIGFueSB3aW5kb3cgc2hvd2luZyBCVUZGRVItT1ItTkFNRSBydW5uaW5n IHRoZSBhYm5vcm1hbCBob29rCitgd2luZG93LWRlbGV0YWJsZS1mdW5jdGlvbnMnIHJldHVy bnMgbmlsLCBkbyBub3QgZGVsZXRlIHRoYXQgd2luZG93IGJ1dAorc2hvdyBzb21lIG90aGVy IGJ1ZmZlciBpbiB0aGF0IHdpbmRvdy4KKworVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkg YGtpbGwtYnVmZmVyJyB3aGljaCBraWxscyB0aGUgYnVmZmVyCitzcGVjaWZpZWQgYnkgYGJ1 ZmZlci1vci1uYW1lJyBhZnRlcndhcmRzLiAgSXQgbmV2ZXIga2lsbHMgYSBidWZmZXIgYnkK K2l0c2VsZi4iCiAgIChpbnRlcmFjdGl2ZSAiYkJ1ZmZlciB0byByZXBsYWNlOiAiKQogICAo bGV0ICgoYnVmZmVyICh3aW5kb3ctbm9ybWFsaXplLWJ1ZmZlciBidWZmZXItb3ItbmFtZSkp KQorICAgIDs7IFNjYW4gYWxsIHdpbmRvd3MuICBXZSBoYXZlIHRvIHVucmVjb3JkIEJVRkZF Ui1PUi1OQU1FIGluIHRob3NlCisgICAgOzsgbm90IHNob3dpbmcgaXQuCiAgICAgKGRvbGlz dCAod2luZG93ICh3aW5kb3ctbGlzdC0xIG5pbCBuaWwgdCkpCi0gICAgICAoaWYgKGVxICh3 aW5kb3ctYnVmZmVyIHdpbmRvdykgYnVmZmVyKQotICAgICAgICAgIDs7IERlbGV0ZSBhIGRl ZGljYXRlZCB3aW5kb3cgdW5sZXNzIGl0IGlzIGEgc2lkZSB3aW5kb3cuCi0gICAgICAgICAg KGxldCAoKGRlZGljYXRlZC1zaWRlIChlcSAod2luZG93LWRlZGljYXRlZC1wIHdpbmRvdykg J3NpZGUpKSkKLSAgICAgICAgICAgICh3aGVuIChvciBkZWRpY2F0ZWQtc2lkZSAobm90ICh3 aW5kb3ctLWRlbGV0ZSB3aW5kb3cgdCB0KSkpCi0gICAgICAgICAgICAgIDs7IFN3aXRjaCB0 byBhbm90aGVyIGJ1ZmZlciBpbiB0aGF0IHdpbmRvdy4KLSAgICAgICAgICAgICAgKHNldC13 aW5kb3ctZGVkaWNhdGVkLXAgd2luZG93IG5pbCkKLSAgICAgICAgICAgICAgKGlmIChzd2l0 Y2gtdG8tcHJldi1idWZmZXIgd2luZG93ICdraWxsKQorICAgICAgKHdoZW4gKGVxICh3aW5k b3ctYnVmZmVyIHdpbmRvdykgYnVmZmVyKQorCShpZiBraWxsLWJ1ZmZlci1xdWl0LXdpbmRv d3MKKwkgICAgKHF1aXQtcmVzdG9yZS13aW5kb3cgd2luZG93ICdraWxsaW5nKQorCSAgKGxl dCAoKGRlZGljYXRlZC1zaWRlIChlcSAod2luZG93LWRlZGljYXRlZC1wIHdpbmRvdykgJ3Np ZGUpKSkKKyAgICAgICAgICAgICh3aGVuIChvciBkZWRpY2F0ZWQtc2lkZSAobm90ICh3aW5k b3ctLWRlbGV0ZSB3aW5kb3cgdCAna2lsbCkpKQorCSAgICAgIDs7IFN3aXRjaCB0byBhbm90 aGVyIGJ1ZmZlciBpbiB0aGF0IHdpbmRvdy4KKwkgICAgICAoc2V0LXdpbmRvdy1kZWRpY2F0 ZWQtcCB3aW5kb3cgbmlsKQorCSAgICAgIChpZiAoc3dpdGNoLXRvLXByZXYtYnVmZmVyIHdp bmRvdyAna2lsbCkKICAgICAgICAgICAgICAgICAgIChhbmQgZGVkaWNhdGVkLXNpZGUgKHNl dC13aW5kb3ctZGVkaWNhdGVkLXAgd2luZG93ICdzaWRlKSkKLSAgICAgICAgICAgICAgICAo d2luZG93LS1kZWxldGUgd2luZG93IG5pbCAna2lsbCkpKSkKLQk7OyBVbnJlY29yZCBCVUZG RVIgaW4gV0lORE9XLgotCSh1bnJlY29yZC13aW5kb3ctYnVmZmVyIHdpbmRvdyBidWZmZXIp KSkpKQorCQkod2luZG93LS1kZWxldGUgd2luZG93IG5pbCAna2lsbCkpKSkpKQorCisJKHdo ZW4gKHdpbmRvdy1saXZlLXAgd2luZG93KQorCSAgOzsgSWYgdGhlIGZvdXJ0aCBlbGVtZW50 cyBvZiB0aGUgJ3F1aXQtcmVzdG9yZScgb3IKKwkgIDs7ICdxdWl0LXJlc3RvcmUtcHJldicg cGFyYW1ldGVycyBlcXVhbCBCVUZGRVIsIHRoZXNlCisJICA7OyBwYXJhbWV0ZXJzIGJlY29t ZSB1c2VsZXNzIC0gaW4gJ3F1aXQtcmVzdG9yZS13aW5kb3cnIHRoZQorCSAgOzsgZm91cnRo IGVsZW1lbnQgbXVzdCBlcXVhbCB0aGUgYnVmZmVyIG9mIFdJTkRPVyBpbiBvcmRlciB0bwor CSAgOzsgdXNlIHRoYXQgcGFyYW1ldGVyLiAgSWYgQlVGRkVSIGlzIG1lbnRpb25lZCBpbiB0 aGUgc2Vjb25kCisJICA7OyBlbGVtZW50IG9mIHRoZSBwYXJhbWV0ZXIsICdxdWl0LXJlc3Rv cmUtd2luZG93JyBjYW5ub3QKKwkgIDs7IHBvc3NpYmx5IHNob3cgQlVGRkVSIGluc3RlYWQ7 IHNvIHRoaXMgcGFyYW1ldGVyIGJlY29tZXMKKwkgIDs7IHVzZWxlc3MgdG9vLgorCSAgKHVu cmVjb3JkLXdpbmRvdy1idWZmZXIgd2luZG93IGJ1ZmZlciB0KSkpKSkKIAogKGRlZmN1c3Rv bSBxdWl0LXdpbmRvdy1ob29rIG5pbAogICAiSG9vayBydW4gYmVmb3JlIHBlcmZvcm1pbmcg YW55IG90aGVyIGFjdGlvbnMgaW4gdGhlIGBxdWl0LXdpbmRvdycgY29tbWFuZC4iCkBAIC01 MTY0LDYgKzUyMjYsMjMgQEAgcXVpdC13aW5kb3ctaG9vawogICA6dmVyc2lvbiAiMjcuMSIK ICAgOmdyb3VwICd3aW5kb3dzKQogCisoZGVmY3VzdG9tIHF1aXQtcmVzdG9yZS13aW5kb3ct bm8tc3dpdGNoIG5pbAorICAiTm9uLW5pbCBtZWFucyBgcXVpdC1yZXN0b3JlLXdpbmRvdycg cHJlZmVyYWJseSB3b24ndCBzd2l0Y2ggYnVmZmVycy4KK0lmIHRoaXMgaXMgbmlsLCBgcXVp dC1yZXN0b3JlLXdpbmRvdycgdW5jb25kaXRpb25hbGx5IGNhbGxzCitgc3dpdGNoLXRvLXBy ZXYtYnVmZmVyJyB1bmxlc3MgdGhlIHdpbmRvdyBpcyBkZWRpY2F0ZWQgb3IgaGFzIGJlZW4g bWFkZQorYnkgYGRpc3BsYXktYnVmZmVyJy4gIElmIHRoaXMgaXMgdCwgYHF1aXQtcmVzdG9y ZS13aW5kb3cnIHdpbGwgdHJ5IHRvCitkZWxldGUgdGhlIHdpbmRvdyB1bmxlc3MgYSBsaXZl IGJ1ZmZlciBleGlzdHMgdGhhdCB3YXMgcHJldmlvdXNseSBzaG93bgoraW4gdGhhdCB3aW5k b3cuICBJZiB0aGlzIGlzIHRoZSBzeW1ib2wgYHNraXAtZmlyc3QnLCBpdCB3aWxsIHN3aXRj aCB0byBhCitwcmV2aW91cyBidWZmZXIgb25seSBpZiB0aGVyZSBhcmUgYXQgbGVhc3QgdHdv IG9mIHRoZW0uCisKK1RoZSBuZXQgZWZmZWN0IG9mIG1ha2luZyB0aGlzIG5vbi1uaWwgaXMg dGhhdCBpZiBgcXVpdC1yZXN0b3JlLXdpbmRvdycKK2RvZXNuJ3QgZmluZCBhIHN1aXRhYmxl IGJ1ZmZlciBwcmV2aW91c2x5IHNob3duIGluIHRoZSB3aW5kb3csIGl0IHdpbGwKK3JhdGhl ciB0cnkgdG8gZGVsZXRlIHRoZSB3aW5kb3cgKGFuZCBtYXliZSBpdHMgZnJhbWUpIHRoYW4g c2hvdyBhIGJ1ZmZlcgordGhlIHdpbmRvdyBoYXMgbmV2ZXIgc2hvd24gYmVmb3JlLiIKKyAg OnR5cGUgJ2Jvb2xlYW4KKyAgOnZlcnNpb24gIjMxLjEiCisgIDpncm91cCAnd2luZG93cykK KwogKGRlZnVuIHdpbmRvdy0tcXVpdC1yZXN0b3JlLXNlbGVjdC13aW5kb3cgKHdpbmRvdykK ICAgIlNlbGVjdCBXSU5ET1cgYWZ0ZXIgaGF2aW5nIHF1aXQgYW5vdGhlciBvbmUuCiBEbyBu b3Qgc2VsZWN0IGFuIGluYWN0aXZlIG1pbmlidWZmZXIgd2luZG93LiIKQEAgLTUxNzYsMTcg KzUyNTUsMjEgQEAgcXVpdC1yZXN0b3JlLXdpbmRvdwogICAiUXVpdCBXSU5ET1cgYW5kIGRl YWwgd2l0aCBpdHMgYnVmZmVyLgogV0lORE9XIG11c3QgYmUgYSBsaXZlIHdpbmRvdyBhbmQg ZGVmYXVsdHMgdG8gdGhlIHNlbGVjdGVkIG9uZS4KIAotQWNjb3JkaW5nIHRvIGluZm9ybWF0 aW9uIHN0b3JlZCBpbiBXSU5ET1cncyBgcXVpdC1yZXN0b3JlJyB3aW5kb3cKLXBhcmFtZXRl ciBlaXRoZXIgKDEpIGRlbGV0ZSBXSU5ET1cgYW5kIGl0cyBmcmFtZSwgKDIpIGRlbGV0ZQot V0lORE9XIGJ1dCBsZWF2ZSBpdHMgZnJhbWUgYWxvbmUsICgzKSByZXN0b3JlIHRoZSBidWZm ZXIKLXByZXZpb3VzbHkgc2hvd24gaW4gV0lORE9XLCBvciAoNCkgbWFrZSBXSU5ET1cgZGlz cGxheSBzb21lIG90aGVyCi1idWZmZXIuICBJZiBXSU5ET1cgaXMgbm90IGRlbGV0ZWQsIHJl c2V0IGl0cyBgcXVpdC1yZXN0b3JlJwotcGFyYW1ldGVyIHRvIG5pbC4gIFNlZSBJbmZvIG5v ZGUgYChlbGlzcCkgUXVpdHRpbmcgV2luZG93cycgZm9yCi1tb3JlIGRldGFpbHMuCitBY2Nv cmRpbmcgdG8gaW5mb3JtYXRpb24gc3RvcmVkIGluIFdJTkRPVydzIGBxdWl0LXJlc3RvcmUn IGFuZAorYHF1aXQtcmVzdG9yZS1wcmV2JyBwYXJhbWV0ZXJzIGVpdGhlciAoMSkgZGVsZXRl IFdJTkRPVyBhbmQgaXRzCitmcmFtZSwgKDIpIGRlbGV0ZSBXSU5ET1cgYnV0IGxlYXZlIGl0 cyBmcmFtZSBhbG9uZSwgKDMpIHJlc3RvcmUgdGhlCitidWZmZXIgcHJldmlvdXNseSBzaG93 biBpbiBXSU5ET1csIG9yICg0KSBtYWtlIFdJTkRPVyBkaXNwbGF5IHNvbWUgb3RoZXIKK2J1 ZmZlci4gIEluIGNhc2UgKDMpIHNldCBhbnkgb2YgdGhlc2UgcGFyYW1ldGVycyB0byBuaWwg aWYgaXQgaGFzIGJlZW4KK3VzZWQgdG8gcmVzdG9yZSB0aGUgcHJldmlvdXNseSBzaG93biBi dWZmZXIuICBTZWUgSW5mbyBub2RlIGAoZWxpc3ApCitRdWl0dGluZyBXaW5kb3dzJyBmb3Ig bW9yZSBkZXRhaWxzLgogCi1JZiBXSU5ET1cncyBkZWRpY2F0ZWQgZmxhZyBpcyB0LCB0cnkg dG8gZGVsZXRlIFdJTkRPVy4gIElmIGl0Ci1lcXVhbHMgdGhlIHZhbHVlIGBzaWRlJywgcmVz dG9yZSB0aGF0IHZhbHVlIHdoZW4gV0lORE9XIGlzIG5vdAotZGVsZXRlZC4KK0lmIFdJTkRP VydzIGRlZGljYXRlZCBmbGFnIGlzIHQsIHRyeSB0byBkZWxldGUgV0lORE9XLiAgSWYgaXQg ZXF1YWxzIHRoZQordmFsdWUgYHNpZGUnLCByZXN0b3JlIHRoYXQgdmFsdWUgd2hlbiBXSU5E T1cgaXMgbm90IGRlbGV0ZWQuICBXaGV0aGVyCitXSU5ET1cgb3IgaXRzIGZyYW1lIGdldCBk ZWxldGVkIGNhbiBiZSBmdXJ0aGVyIGNvbnRyb2xsZWQgdmlhIHRoZSBvcHRpb24KK2BxdWl0 LXJlc3RvcmUtd2luZG93LW5vLXN3aXRjaCcuCisKK0lmIHJ1bm5pbmcgdGhlIGFibm9ybWFs IGhvb2sgYHdpbmRvdy1kZWxldGFibGUtZnVuY3Rpb25zJyByZXR1cm5zIG5pbCwKK2RvIG5v dCBkZWxldGUgV0lORE9XIGJ1dCBzaG93IHNvbWUgb3RoZXIgYnVmZmVyIGluIGl0LgogCiBP cHRpb25hbCBzZWNvbmQgYXJndW1lbnQgQlVSWS1PUi1LSUxMIHRlbGxzIGhvdyB0byBwcm9j ZWVkIHdpdGgKIHRoZSBidWZmZXIgb2YgV0lORE9XLiAgVGhlIGZvbGxvd2luZyB2YWx1ZXMg YXJlIGhhbmRsZWQ6CkBAIC01MjA2LDIxICs1Mjg5LDMxIEBAIHF1aXQtcmVzdG9yZS13aW5k b3cKICAgbW9zdCByZWxpYWJsZSByZW1lZHkgdG8gbm90IGhhdmUgYHN3aXRjaC10by1wcmV2 LWJ1ZmZlcicgc3dpdGNoCiAgIHRvIHRoaXMgYnVmZmVyIGFnYWluIHdpdGhvdXQga2lsbGlu ZyB0aGUgYnVmZmVyLgogCi1ga2lsbCcgbWVhbnMgdG8ga2lsbCBXSU5ET1cncyBidWZmZXIu IgorYGtpbGwnIG1lYW5zIHRvIGtpbGwgV0lORE9XJ3MgYnVmZmVyLgorCitga2lsbGluZycg aXMgbGlrZSBga2lsbCcgYnV0IG1lYW5zIHRoYXQgV0lORE9XJ3MgYnVmZmVyIHdpbGwgZ2V0 IGtpbGxlZAorZWxzZXdoZXJlLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGJ5IGByZXBsYWNlLWJ1 ZmZlci1pbi13aW5kb3dzJyBhbmQKK2BxdWl0LXdpbmRvd3Mtb24nLgorCitgYnVyeWluZycg aXMgbGlrZSBgYnVyeScgYnV0IG1lYW5zIHRoYXQgV0lORE9XJ3MgYnVmZmVyIHdpbGwgZ2V0 IGJ1cmllZAorZWxzZXdoZXJlLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGJ5IGBxdWl0LXdpbmRv d3Mtb24nLiIKICAgKHNldHEgd2luZG93ICh3aW5kb3ctbm9ybWFsaXplLXdpbmRvdyB3aW5k b3cgdCkpCiAgIChsZXQqICgoYnVmZmVyICh3aW5kb3ctYnVmZmVyIHdpbmRvdykpCiAJIChx dWl0LXJlc3RvcmUgKHdpbmRvdy1wYXJhbWV0ZXIgd2luZG93ICdxdWl0LXJlc3RvcmUpKQor CSAocXVpdC1yZXN0b3JlLXByZXYgKHdpbmRvdy1wYXJhbWV0ZXIgd2luZG93ICdxdWl0LXJl c3RvcmUtcHJldikpCiAJIChxdWl0LXJlc3RvcmUtMiAobnRoIDIgcXVpdC1yZXN0b3JlKSkK KwkgKHF1aXQtcmVzdG9yZS1wcmV2LTIgKG50aCAyIHF1aXQtcmVzdG9yZS1wcmV2KSkKICAg ICAgICAgIChwcmV2LWJ1ZmZlciAoY2F0Y2ggJ3ByZXYtYnVmZmVyCiAgICAgICAgICAgICAg ICAgICAgICAgICAoZG9saXN0IChidWYgKHdpbmRvdy1wcmV2LWJ1ZmZlcnMgd2luZG93KSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAoZXEgKGNhciBidWYpIGJ1ZmZl cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhyb3cgJ3ByZXYtYnVmZmVyIChj YXIgYnVmKSkpKSkpCiAgICAgICAgICAoZGVkaWNhdGVkICh3aW5kb3ctZGVkaWNhdGVkLXAg d2luZG93KSkKLQkgcXVhZCBlbnRyeSkKKwkgcXVhZCBlbnRyeSByZXNldC1wcmV2KQogICAg IChjb25kCiAgICAgIDs7IEZpcnN0IHRyeSB0byBkZWxldGUgZGVkaWNhdGVkIHdpbmRvd3Mg dGhhdCBhcmUgbm90IHNpZGUgd2luZG93cy4KICAgICAgKChhbmQgZGVkaWNhdGVkIChub3Qg KGVxIGRlZGljYXRlZCAnc2lkZSkpCi0gICAgICAgICAgICh3aW5kb3ctLWRlbGV0ZSB3aW5k b3cgJ2RlZGljYXRlZCAoZXEgYnVyeS1vci1raWxsICdraWxsKSkpCisgICAgICAgICAgICh3 aW5kb3ctLWRlbGV0ZQorCSAgICB3aW5kb3cgJ2RlZGljYXRlZCAobWVtcSBidXJ5LW9yLWtp bGwgJyhraWxsIGtpbGxpbmcpKSkpCiAgICAgICA7OyBJZiB0aGUgcHJldmlvdXNseSBzZWxl Y3RlZCB3aW5kb3cgaXMgc3RpbGwgYWxpdmUsIHNlbGVjdCBpdC4KICAgICAgICh3aW5kb3ct LXF1aXQtcmVzdG9yZS1zZWxlY3Qtd2luZG93IHF1aXQtcmVzdG9yZS0yKSkKICAgICAgKChh bmQgKG5vdCBwcmV2LWJ1ZmZlcikKQEAgLTUyNDEsMTAgKzUzMzQsMjcgQEAgcXVpdC1yZXN0 b3JlLXdpbmRvdwogCSAgICh3aW5kb3ctLWRlbGV0ZSB3aW5kb3cgbmlsIChlcSBidXJ5LW9y LWtpbGwgJ2tpbGwpKSkKICAgICAgIDs7IElmIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHdp bmRvdyBpcyBzdGlsbCBhbGl2ZSwgc2VsZWN0IGl0LgogICAgICAgKHdpbmRvdy0tcXVpdC1y ZXN0b3JlLXNlbGVjdC13aW5kb3cgcXVpdC1yZXN0b3JlLTIpKQotICAgICAoKGFuZCAobGlz dHAgKHNldHEgcXVhZCAobnRoIDEgcXVpdC1yZXN0b3JlKSkpCi0JICAgKGJ1ZmZlci1saXZl LXAgKGNhciBxdWFkKSkKLQkgICAoZXEgKG50aCAzIHF1aXQtcmVzdG9yZSkgYnVmZmVyKSkK LSAgICAgIDs7IFNob3cgYW5vdGhlciBidWZmZXIgc3RvcmVkIGluIHF1aXQtcmVzdG9yZSBw YXJhbWV0ZXIuCisgICAgICgoYW5kIChvciAoYW5kIHF1aXQtcmVzdG9yZS13aW5kb3ctbm8t c3dpdGNoIChub3QgcHJldi1idWZmZXIpKQorCSAgICAgICA7OyBJZ25vcmUgZmlyc3Qgb2Yg dGhlIHByZXZpb3VzIGJ1ZmZlcnMgaWYKKwkgICAgICAgOzsgJ3F1aXQtcmVzdG9yZS13aW5k b3ctbm8tc3dpdGNoJyBzYXlzIHNvLgorCSAgICAgICAoYW5kIChlcSBxdWl0LXJlc3RvcmUt d2luZG93LW5vLXN3aXRjaCAnc2tpcC1maXJzdCkKKwkJICAgIChub3QgKGNkciAod2luZG93 LXByZXYtYnVmZmVycyB3aW5kb3cpKSkpKQorCSAgIDs7IERlbGV0ZSBXSU5ET1cgaWYgcG9z c2libGUuCisJICAgKHdpbmRvdy0tZGVsZXRlCisJICAgIHdpbmRvdyBuaWwgKG1lbXEgYnVy eS1vci1raWxsICcoa2lsbCBraWxsaW5nKSkpKQorICAgICAgOzsgSWYgdGhlIHByZXZpb3Vz bHkgc2VsZWN0ZWQgd2luZG93IGlzIHN0aWxsIGFsaXZlLCBzZWxlY3QgaXQuCisgICAgICAo d2luZG93LS1xdWl0LXJlc3RvcmUtc2VsZWN0LXdpbmRvdyBxdWl0LXJlc3RvcmUtMikpCisg ICAgICgob3IgKGFuZCAobGlzdHAgKHNldHEgcXVhZCAobnRoIDEgcXVpdC1yZXN0b3JlLXBy ZXYpKSkKKwkgICAgICAgKGJ1ZmZlci1saXZlLXAgKGNhciBxdWFkKSkKKwkgICAgICAgKGVx IChudGggMyBxdWl0LXJlc3RvcmUtcHJldikgYnVmZmVyKQorCSAgICAgICA7OyBVc2Ugc2Vs ZWN0ZWQgd2luZG93IGZyb20gcXVpdC1yZXN0b3JlLXByZXYuCisJICAgICAgIChzZXRxIHF1 aXQtcmVzdG9yZS0yIHF1aXQtcmVzdG9yZS1wcmV2LTIpCisJICAgICAgIDs7IFdlIHdhbnQg dG8gcmVzZXQgcXVpdC1yZXN0b3JlLXByZXYgb25seS4KKwkgICAgICAgKHNldHEgcmVzZXQt cHJldiB0KSkKKwkgIChhbmQgKGxpc3RwIChzZXRxIHF1YWQgKG50aCAxIHF1aXQtcmVzdG9y ZSkpKQorCSAgICAgICAoYnVmZmVyLWxpdmUtcCAoY2FyIHF1YWQpKQorCSAgICAgICAoZXEg KG50aCAzIHF1aXQtcmVzdG9yZSkgYnVmZmVyKSkpCisgICAgICA7OyBTaG93IGFub3RoZXIg YnVmZmVyIHN0b3JlZCBpbiBxdWl0LXJlc3RvcmUoLXByZXYpIHBhcmFtZXRlci4KICAgICAg ICh3aGVuIChhbmQgKGludGVnZXJwIChudGggMyBxdWFkKSkKIAkJIChpZiAod2luZG93LWNv bWJpbmVkLXAgd2luZG93KQogICAgICAgICAgICAgICAgICAgICAgKC89IChudGggMyBxdWFk KSAod2luZG93LXRvdGFsLWhlaWdodCB3aW5kb3cpKQpAQCAtNTI2OSwyNyArNTM3OSwyNiBA QCBxdWl0LXJlc3RvcmUtd2luZG93CiAgICAgICA7OyBEZWFsIHdpdGggdGhlIGJ1ZmZlciB3 ZSBqdXN0IHJlbW92ZWQgZnJvbSBXSU5ET1cuCiAgICAgICAoc2V0cSBlbnRyeSAoYW5kIChl cSBidXJ5LW9yLWtpbGwgJ2FwcGVuZCkKIAkJICAgICAgIChhc3NxIGJ1ZmZlciAod2luZG93 LXByZXYtYnVmZmVycyB3aW5kb3cpKSkpCi0gICAgICAod2hlbiBidXJ5LW9yLWtpbGwKKyAg ICAgICh3aGVuIChtZW1xIGJ1cnktb3Ita2lsbCAnKGJ1cnkgYnVyeWluZyBraWxsIGtpbGxp bmcpKQogCTs7IFJlbW92ZSBidWZmZXIgZnJvbSBXSU5ET1cncyBwcmV2aW91cyBhbmQgbmV4 dCBidWZmZXJzLgotCShzZXQtd2luZG93LXByZXYtYnVmZmVycwotCSB3aW5kb3cgKGFzc3Et ZGVsZXRlLWFsbCBidWZmZXIgKHdpbmRvdy1wcmV2LWJ1ZmZlcnMgd2luZG93KSkpCi0JKHNl dC13aW5kb3ctbmV4dC1idWZmZXJzCi0JIHdpbmRvdyAoZGVscSBidWZmZXIgKHdpbmRvdy1u ZXh0LWJ1ZmZlcnMgd2luZG93KSkpKQorCSh1bnJlY29yZC13aW5kb3ctYnVmZmVyIHdpbmRv dyBidWZmZXIpKQogICAgICAgKHdoZW4gZW50cnkKIAk7OyBBcHBlbmQgb2xkIGJ1ZmZlcidz IGVudHJ5IHRvIGxpc3Qgb2YgV0lORE9XJ3MgcHJldmlvdXMKIAk7OyBidWZmZXJzIHNvIGl0 J3MgbGVzcyBsaWtlbHkgdG8gZ2V0IHN3aXRjaGVkIHRvIHNvb24gYnV0CiAJOzsgYGRpc3Bs YXktYnVmZmVyLWluLXByZXZpb3VzLXdpbmRvdycgY2FuIG5ldmVydGhlbGVzcyBmaW5kIGl0 LgogCShzZXQtd2luZG93LXByZXYtYnVmZmVycwogCSB3aW5kb3cgKGFwcGVuZCAod2luZG93 LXByZXYtYnVmZmVycyB3aW5kb3cpIChsaXN0IGVudHJ5KSkpKQotICAgICAgOzsgUmVzZXQg dGhlIHF1aXQtcmVzdG9yZSBwYXJhbWV0ZXIuCi0gICAgICAoc2V0LXdpbmRvdy1wYXJhbWV0 ZXIgd2luZG93ICdxdWl0LXJlc3RvcmUgbmlsKQotICAgICAgOzsgU2VsZWN0IG9sZCB3aW5k b3cuCisgICAgICA7OyBSZXNldCB0aGUgcXVpdC1yZXN0b3JlKC1wcmV2KSBwYXJhbWV0ZXIu CisgICAgICAoc2V0LXdpbmRvdy1wYXJhbWV0ZXIgd2luZG93ICdxdWl0LXJlc3RvcmUtcHJl diBuaWwpCisgICAgICAodW5sZXNzIHJlc2V0LXByZXYKKwk7OyBJZiBxdWl0LXJlc3RvcmUt cHJldiB3YXMgbm90IHVzZWQsIHJlc2V0IHRoZSBxdWl0LXJlc3RvcmUKKwk7OyBwYXJhbWV0 ZXIKKwkoc2V0LXdpbmRvdy1wYXJhbWV0ZXIgd2luZG93ICdxdWl0LXJlc3RvcmUgbmlsKSkK ICAgICAgIDs7IElmIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHdpbmRvdyBpcyBzdGlsbCBh bGl2ZSwgc2VsZWN0IGl0LgogICAgICAgKHdpbmRvdy0tcXVpdC1yZXN0b3JlLXNlbGVjdC13 aW5kb3cgcXVpdC1yZXN0b3JlLTIpKQogICAgICAodAotICAgICAgOzsgU2hvdyBzb21lIG90 aGVyIGJ1ZmZlciBpbiBXSU5ET1cgYW5kIHJlc2V0IHRoZSBxdWl0LXJlc3RvcmUKLSAgICAg IDs7IHBhcmFtZXRlci4KLSAgICAgIChzZXQtd2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3F1 aXQtcmVzdG9yZSBuaWwpCisgICAgICA7OyBTaG93IHNvbWUgb3RoZXIgYnVmZmVyIGluIFdJ TkRPVyBhbmQgbGVhdmUgdGhlCisgICAgICA7OyBxdWl0LXJlc3RvcmUoLXByZXYpIHBhcmFt ZXRlcnMgYWxvbmUgKEp1cmkncyBpZGVhKS4KICAgICAgIDs7IE1ha2Ugc3VyZSB0aGF0IFdJ TkRPVyBpcyBubyBtb3JlIGRlZGljYXRlZC4KICAgICAgIChzZXQtd2luZG93LWRlZGljYXRl ZC1wIHdpbmRvdyBuaWwpCiAgICAgICA7OyBUcnkgdG8gc3dpdGNoIHRvIGEgcHJldmlvdXMg YnVmZmVyLiAgRGVsZXRlIHRoZSB3aW5kb3cgb25seSBpZgpAQCAtNTI5NywxNiArNTQwNiwx NCBAQCBxdWl0LXJlc3RvcmUtd2luZG93CiAgICAgICAoaWYgKHN3aXRjaC10by1wcmV2LWJ1 ZmZlciB3aW5kb3cgYnVyeS1vci1raWxsKQogICAgICAgICAgICh3aGVuIChlcSBkZWRpY2F0 ZWQgJ3NpZGUpCiAgICAgICAgICAgICAoc2V0LXdpbmRvdy1kZWRpY2F0ZWQtcCB3aW5kb3cg J3NpZGUpKQotICAgICAgICAod2luZG93LS1kZWxldGUgd2luZG93IG5pbCAoZXEgYnVyeS1v ci1raWxsICdraWxsKSkKLSAgICAgIDs7IElmIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHdp bmRvdyBpcyBzdGlsbCBhbGl2ZSwgc2VsZWN0IGl0LgotICAgICAgKHdpbmRvdy0tcXVpdC1y ZXN0b3JlLXNlbGVjdC13aW5kb3cgcXVpdC1yZXN0b3JlLTIpKSkpCi0KKyAgICAgICAgKHdp bmRvdy0tZGVsZXRlCisJIHdpbmRvdyBuaWwgKG1lbXEgYnVyeS1vci1raWxsICcoa2lsbCBr aWxsaW5nKSkpKSkpCiAgICAgOzsgRGVhbCB3aXRoIHRoZSBidWZmZXIuCiAgICAgKGNvbmQK ICAgICAgKChub3QgKGJ1ZmZlci1saXZlLXAgYnVmZmVyKSkpCiAgICAgICgoZXEgYnVyeS1v ci1raWxsICdraWxsKQogICAgICAgKGtpbGwtYnVmZmVyIGJ1ZmZlcikpCi0gICAgIChidXJ5 LW9yLWtpbGwKKyAgICAgKChlcSBidXJ5LW9yLWtpbGwgJ2J1cnkpCiAgICAgICAoYnVyeS1i dWZmZXItaW50ZXJuYWwgYnVmZmVyKSkpKSkKIAogKGRlZnVuIHF1aXQtd2luZG93ICgmb3B0 aW9uYWwga2lsbCB3aW5kb3cpCkBAIC01MzM2LDE4ICs1NDQzLDMxIEBAIHF1aXQtd2luZG93 cy1vbgogQlVGRkVSLU9SLU5BTUUuICBPcHRpb25hbCBhcmd1bWVudCBGUkFNRSBpcyBoYW5k bGVkIGFzIGJ5CiBgZGVsZXRlLXdpbmRvd3Mtb24nLgogCi1UaGlzIGZ1bmN0aW9uIGNhbGxz IGBxdWl0LXdpbmRvdycgb24gYWxsIGNhbmRpZGF0ZSB3aW5kb3dzCi1zaG93aW5nIEJVRkZF Ui1PUi1OQU1FLiIKK1RoaXMgZnVuY3Rpb24gY2FsbHMgYHF1aXQtcmVzdG9yZS13aW5kb3cn IG9uIGFsbCBjYW5kaWRhdGUgd2luZG93cworc2hvd2luZyBCVUZGRVItT1ItTkFNRS4gIElu IGFkZGl0aW9uLCBpdCByZW1vdmVzIHRoZSBidWZmZXIgZGVub3RlZCBieQorQlVGRkVSLU9S LU5BTUUgZnJvbSBhbGwgd2luZG93LWxvY2FsIGJ1ZmZlciBsaXN0cyBhbmQgcmVtb3ZlcyBh bnkKK2BxdWl0LXJlc3RvcmUnIG9yIGBxdWl0LXJlc3RvcmUtcHJldicgcGFyYW1ldGVycyBt ZW50aW9uaW5nIGl0LiIKICAgKGludGVyYWN0aXZlICJiUXVpdCB3aW5kb3dzIG9uIChidWZm ZXIpOlxuUCIpCiAgIChsZXQgKChidWZmZXIgKHdpbmRvdy1ub3JtYWxpemUtYnVmZmVyIGJ1 ZmZlci1vci1uYW1lKSkKIAk7OyBIYW5kbGUgdGhlICJpbnZlcnRlZCIgbWVhbmluZyBvZiB0 aGUgRlJBTUUgYXJndW1lbnQgd3J0IG90aGVyCi0JOzsgYHdpbmRvdy1saXN0LTEnIGJhc2Vk IGZ1bmN0aW9uLgotCShhbGwtZnJhbWVzIChjb25kICgobm90IGZyYW1lKSB0KSAoKGVxIGZy YW1lIHQpIG5pbCkgKHQgZnJhbWUpKSkpCi0gICAgKGRvbGlzdCAod2luZG93ICh3aW5kb3ct bGlzdC0xIG5pbCBuaWwgYWxsLWZyYW1lcykpCi0gICAgICAoaWYgKGVxICh3aW5kb3ctYnVm ZmVyIHdpbmRvdykgYnVmZmVyKQotCSAgKHF1aXQtd2luZG93IGtpbGwgd2luZG93KQotCTs7 IElmIGEgd2luZG93IGRvZXNuJ3Qgc2hvdyBCVUZGRVIsIHVucmVjb3JkIEJVRkZFUiBpbiBp dC4KLQkodW5yZWNvcmQtd2luZG93LWJ1ZmZlciB3aW5kb3cgYnVmZmVyKSkpKSkKKwk7OyBg d2luZG93LWxpc3QnIGJhc2VkIGZ1bmN0aW9uLgorCShmcmFtZXMgKGNvbmQgKChub3QgZnJh bWUpIHQpICgoZXEgZnJhbWUgdCkgbmlsKSAodCBmcmFtZSkpKSkKKyAgICAoZG9saXN0ICh3 aW5kb3cgKHdpbmRvdy1saXN0LTEgbmlsIG5pbCBmcmFtZXMpKQorICAgICAgKHdoZW4gKGVx ICh3aW5kb3ctYnVmZmVyIHdpbmRvdykgYnVmZmVyKQorCSh3aXRoLWN1cnJlbnQtYnVmZmVy IGJ1ZmZlcgorCSAgKHJ1bi1ob29rcyAncXVpdC13aW5kb3ctaG9vaykpCisJKHF1aXQtcmVz dG9yZS13aW5kb3cKKwkgd2luZG93IChpZiBraWxsICdraWxsaW5nICdidXJ5aW5nKSkpCisK KyAgICAgICh3aGVuICh3aW5kb3ctbGl2ZS1wIHdpbmRvdykKKwk7OyBVbnJlY29yZCBCVUZG RVIgaW4gdGhpcyB3aW5kb3cuCisJKHVucmVjb3JkLXdpbmRvdy1idWZmZXIgd2luZG93IGJ1 ZmZlciB0KSkpCisKKyAgICA7OyBEZWFsIHdpdGggQlVGRkVSLU9SLU5BTUUuCisgICAgKGNv bmQKKyAgICAgKChub3QgKGJ1ZmZlci1saXZlLXAgYnVmZmVyKSkpCisgICAgIChraWxsIChr aWxsLWJ1ZmZlciBidWZmZXIpKQorICAgICAodCAoYnVyeS1idWZmZXItaW50ZXJuYWwgYnVm ZmVyKSkpKSkKIAwKIChkZWZ1biB3aW5kb3ctLWNvbWJpbmF0aW9uLXJlc2l6YWJsZSAocGFy ZW50ICZvcHRpb25hbCBob3Jpem9udGFsKQogICAiUmV0dXJuIG51bWJlciBvZiBwaXhlbHMg cmVjb3ZlcmFibGUgZnJvbSBoZWlnaHQgb2Ygd2luZG93IFBBUkVOVC4KQEAgLTY2NTcsMzQg KzY3NzcsNDIgQEAgZGlzcGxheS1idWZmZXItcmVjb3JkLXdpbmRvdwogcHJldmlvdXNseSBz aG93biBpbiB0aGUgd2luZG93LCB0aGF0IGJ1ZmZlcidzIHdpbmRvdyBzdGFydCBhbmQKIHdp bmRvdyBwb2ludCwgYW5kIHRoZSB3aW5kb3cncyBoZWlnaHQuICBUaGUgdGhpcmQgZWxlbWVu dCBpcyB0aGUKIHdpbmRvdyBzZWxlY3RlZCBhdCB0aGUgdGltZSB0aGUgcGFyYW1ldGVyIHdh cyBjcmVhdGVkLiAgVGhlCi1mb3VydGggZWxlbWVudCBpcyBCVUZGRVIuIgorZm91cnRoIGVs ZW1lbnQgaXMgQlVGRkVSLgorCitJZiBUWVBFIGlzIGByZXVzZScsIEJVRkZFUiBpcyBkaWZm ZXJlbnQgZnJvbSB0aGUgb25lIGN1cnJlbnRseSBkaXNwbGF5ZWQKK2luIFdJTkRPVywgYW5k IFdJTkRPVyBhbHJlYWR5IGhhcyBhIGBxdWl0LXJlc3RvcmUnIHBhcmFtZXRlciwgaW5zdGFs bCBvcgordXBkYXRlIGEgYHF1aXQtcmVzdG9yZS1wcmV2JyBwYXJhbWV0ZXIgZm9yIHRoaXMg d2luZG93LiAgVGhpcyBhbGxvd3MgZm9yCitxdWl0dGluZyBXSU5ET1cgaW4gYSBzaW1pbGFy IGZhc2hpb24gYnV0IGFsc28ga2VlcHMgdGhlIHZlcnkgZmlyc3QKK2BxdWl0LXJlc3RvcmUn IHBhcmFtZXRlciBzdG9yZWQgZm9yIHRoaXMgd2luZG93IGFyb3VuZC4gIENvbnNlcXVlbnRs eSwKK1dJTkRPVyAob3IgaXRzIGZyYW1lKSBjYW4gYmUgZXZlbnR1YWxseSBkZWxldGVkIGJ5 IGBxdWl0LXJlc3RvcmUtd2lkb3cnCitpZiB0aGF0IHBhcmFtZXRlcidzIGZvdXJ0aCBlbGVt ZW50IGVxdWFscyBXSU5ET1cncyBidWZmZXIuIgogICAoY29uZAogICAgKChlcSB0eXBlICdy ZXVzZSkKLSAgICAoaWYgKGVxICh3aW5kb3ctYnVmZmVyIHdpbmRvdykgYnVmZmVyKQotCTs7 IFdJTkRPVyBzaG93cyBCVUZGRVIgYWxyZWFkeS4gIFVwZGF0ZSBXSU5ET1cncyBxdWl0LXJl c3RvcmUKLQk7OyBwYXJhbWV0ZXIsIGlmIGFueS4KLQkobGV0ICgocXVpdC1yZXN0b3JlICh3 aW5kb3ctcGFyYW1ldGVyIHdpbmRvdyAncXVpdC1yZXN0b3JlKSkpCisgICAgKGxldCAoKHF1 aXQtcmVzdG9yZSAod2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3F1aXQtcmVzdG9yZSkpKQor ICAgICAgKGlmIChlcSAod2luZG93LWJ1ZmZlciB3aW5kb3cpIGJ1ZmZlcikKKwkgIDs7IFdJ TkRPVyBzaG93cyBCVUZGRVIgYWxyZWFkeS4gIFVwZGF0ZSBXSU5ET1cncyBxdWl0LXJlc3Rv cmUKKwkgIDs7IHBhcmFtZXRlciwgaWYgYW55LgogCSAgKHdoZW4gKGNvbnNwIHF1aXQtcmVz dG9yZSkKIAkgICAgKHNldGNhciBxdWl0LXJlc3RvcmUgJ3NhbWUpCiAJICAgIDs7IFRoZSBz ZWxlY3RlZC13aW5kb3cgbWlnaHQgaGF2ZSBjaGFuZ2VkIGluCiAJICAgIDs7IGJldHdlZW4g KEJ1ZyMyMDM1MykuCiAJICAgICh1bmxlc3MgKG9yIChlcSB3aW5kb3cgKHNlbGVjdGVkLXdp bmRvdykpCi0gICAgICAgICAgICAgICAgICAgICAgICAoZXEgd2luZG93IChudGggMiBxdWl0 LXJlc3RvcmUpKSkKLQkgICAgICAoc2V0Y2FyIChjZGRyIHF1aXQtcmVzdG9yZSkgKHNlbGVj dGVkLXdpbmRvdykpKSkpCi0gICAgICA7OyBXSU5ET1cgc2hvd3MgYW5vdGhlciBidWZmZXIu Ci0gICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAod2luZG93LWJ1ZmZlciB3aW5kb3cpCi0J KHNldC13aW5kb3ctcGFyYW1ldGVyCi0JIHdpbmRvdyAncXVpdC1yZXN0b3JlCi0JIChsaXN0 ICdvdGhlcgotCSAgICAgICA7OyBBIHF1YWRydXBsZSBvZiBXSU5ET1cncyBidWZmZXIsIHN0 YXJ0LCBwb2ludCBhbmQgaGVpZ2h0LgotCSAgICAgICAobGlzdCAoY3VycmVudC1idWZmZXIp ICh3aW5kb3ctc3RhcnQgd2luZG93KQotCQkgICAgIDs7IFByZXNlcnZlIHdpbmRvdy1wb2lu dC1pbnNlcnRpb24tdHlwZSAoQnVnIzEyODU1KS4KLQkJICAgICAoY29weS1tYXJrZXIKLQkJ ICAgICAgKHdpbmRvdy1wb2ludCB3aW5kb3cpIHdpbmRvdy1wb2ludC1pbnNlcnRpb24tdHlw ZSkKLQkJICAgICAoaWYgKHdpbmRvdy1jb21iaW5lZC1wIHdpbmRvdykKLSAgICAgICAgICAg ICAgICAgICAgICAgICAod2luZG93LXRvdGFsLWhlaWdodCB3aW5kb3cpCi0gICAgICAgICAg ICAgICAgICAgICAgICh3aW5kb3ctdG90YWwtd2lkdGggd2luZG93KSkpCi0JICAgICAgIChz ZWxlY3RlZC13aW5kb3cpIGJ1ZmZlcikpKSkpCisJCQkoZXEgd2luZG93IChudGggMiBxdWl0 LXJlc3RvcmUpKSkKKwkgICAgICAoc2V0Y2FyIChjZGRyIHF1aXQtcmVzdG9yZSkgKHNlbGVj dGVkLXdpbmRvdykpKSkKKwk7OyBXSU5ET1cgc2hvd3MgYW5vdGhlciBidWZmZXIuCisJKHdp dGgtY3VycmVudC1idWZmZXIgKHdpbmRvdy1idWZmZXIgd2luZG93KQorCSAgKHNldC13aW5k b3ctcGFyYW1ldGVyCisJICAgd2luZG93IChpZiBxdWl0LXJlc3RvcmUgJ3F1aXQtcmVzdG9y ZS1wcmV2ICdxdWl0LXJlc3RvcmUpCisJICAgKGxpc3QgJ290aGVyCisJCSA7OyBBIHF1YWRy dXBsZSBvZiBXSU5ET1cncyBidWZmZXIsIHN0YXJ0LCBwb2ludCBhbmQgaGVpZ2h0LgorCQkg KGxpc3QgKGN1cnJlbnQtYnVmZmVyKSAod2luZG93LXN0YXJ0IHdpbmRvdykKKwkJICAgICAg IDs7IFByZXNlcnZlIHdpbmRvdy1wb2ludC1pbnNlcnRpb24tdHlwZSAoQnVnIzEyODU1KS4K KwkJICAgICAgIChjb3B5LW1hcmtlcgorCQkJKHdpbmRvdy1wb2ludCB3aW5kb3cpIHdpbmRv dy1wb2ludC1pbnNlcnRpb24tdHlwZSkKKwkJICAgICAgIChpZiAod2luZG93LWNvbWJpbmVk LXAgd2luZG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdpbmRvdy10b3RhbC1o ZWlnaHQgd2luZG93KQorCQkJICh3aW5kb3ctdG90YWwtd2lkdGggd2luZG93KSkpCisJCSAo c2VsZWN0ZWQtd2luZG93KSBidWZmZXIpKSkpKSkKICAgICgoZXEgdHlwZSAnd2luZG93KQog ICAgIDs7IFdJTkRPVyBoYXMgYmVlbiBjcmVhdGVkIG9uIGFuIGV4aXN0aW5nIGZyYW1lLgog ICAgIChzZXQtd2luZG93LXBhcmFtZXRlcgpAQCAtOTEyOSw2ICs5MjU3LDkgQEAgc3dpdGNo LXRvLWJ1ZmZlcgogYXMgcHJlc2NyaWJlZCBieSB0aGUgb3B0aW9uIGBzd2l0Y2gtdG8tYnVm ZmVyLXByZXNlcnZlLXdpbmRvdy1wb2ludCcuCiBPdGhlcndpc2UsIHRoZXNlIGFyZSBsZWZ0 IGFsb25lLgogCitJbiBlaXRoZXIgY2FzZSwgY2FsbCBgZGlzcGxheS1idWZmZXItcmVjb3Jk LXdpbmRvdycgdG8gYXZvaWQgZGlzcnVwdGluZworYSBzZXF1ZW5jZSBvZiBgZGlzcGxheS1i dWZmZXInIG9wZXJhdGlvbnMgdXNpbmcgdGhpcyB3aW5kb3cuCisKIFJldHVybiB0aGUgYnVm ZmVyIHN3aXRjaGVkIHRvLiIKICAgKGludGVyYWN0aXZlCiAgICAobGV0ICgoZm9yY2Utc2Ft ZS13aW5kb3cKQEAgLTkxODksNiArOTMyMCwxMSBAQCBzd2l0Y2gtdG8tYnVmZmVyCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIpKQogCSAgICAgICAoZGlz cGxheWVkIChhbmQgKGVxIHByZXNlcnZlLXdpbi1wb2ludCAnYWxyZWFkeS1kaXNwbGF5ZWQp CiAJCQkgICAgICAgKGdldC1idWZmZXItd2luZG93IGJ1ZmZlciAwKSkpKQorCisJICA7OyBN YWtlIHN1cmUgcXVpdHRpbmcgdGhlIHdpbmRvdyB3b3Jrcy4KKwkgICh1bmxlc3Mgc3dpdGNo LXRvLWJ1ZmZlci1vYmV5LWRpc3BsYXktYWN0aW9ucworCSAgICAoZGlzcGxheS1idWZmZXIt cmVjb3JkLXdpbmRvdyAncmV1c2UgKHNlbGVjdGVkLXdpbmRvdykgYnVmZmVyKSkKKwogCSAg KHNldC13aW5kb3ctYnVmZmVyIG5pbCBidWZmZXIpCiAJICAod2hlbiAoYW5kIGVudHJ5IChv ciAoZXEgcHJlc2VydmUtd2luLXBvaW50IHQpIGRpc3BsYXllZCkpCiAJICAgIDs7IFRyeSB0 byByZXN0b3JlIHN0YXJ0IGFuZCBwb2ludCBvZiBidWZmZXIgaW4gdGhlIHNlbGVjdGVkCmRp ZmYgLS1naXQgYS9zcmMvYWxsb2MuYyBiL3NyYy9hbGxvYy5jCmluZGV4IDQ4YjE3MGI4NjZm Li4wNmZlMTJjZmYzZCAxMDA2NDQKLS0tIGEvc3JjL2FsbG9jLmMKKysrIGIvc3JjL2FsbG9j LmMKQEAgLTcwMDksMzMgKzcwMDksNiBAQCBtYXJrX2ZhY2VfY2FjaGUgKHN0cnVjdCBmYWNl X2NhY2hlICpjKQogICAgIH0KIH0KIAotLyogUmVtb3ZlIGtpbGxlZCBidWZmZXJzIG9yIGl0 ZW1zIHdob3NlIGNhciBpcyBhIGtpbGxlZCBidWZmZXIgZnJvbQotICAgTElTVCwgYW5kIG1h cmsgb3RoZXIgaXRlbXMuICBSZXR1cm4gY2hhbmdlZCBMSVNULCB3aGljaCBpcyBtYXJrZWQu ICAqLwotCi1zdGF0aWMgTGlzcF9PYmplY3QKLW1hcmtfZGlzY2FyZF9raWxsZWRfYnVmZmVy cyAoTGlzcF9PYmplY3QgbGlzdCkKLXsKLSAgTGlzcF9PYmplY3QgdGFpbCwgKnByZXYgPSAm bGlzdDsKLQotICBmb3IgKHRhaWwgPSBsaXN0OyBDT05TUCAodGFpbCkgJiYgIWNvbnNfbWFy a2VkX3AgKFhDT05TICh0YWlsKSk7Ci0gICAgICAgdGFpbCA9IFhDRFIgKHRhaWwpKQotICAg IHsKLSAgICAgIExpc3BfT2JqZWN0IHRlbSA9IFhDQVIgKHRhaWwpOwotICAgICAgaWYgKENP TlNQICh0ZW0pKQotCXRlbSA9IFhDQVIgKHRlbSk7Ci0gICAgICBpZiAoQlVGRkVSUCAodGVt KSAmJiAhQlVGRkVSX0xJVkVfUCAoWEJVRkZFUiAodGVtKSkpCi0JKnByZXYgPSBYQ0RSICh0 YWlsKTsKLSAgICAgIGVsc2UKLQl7Ci0JICBzZXRfY29uc19tYXJrZWQgKFhDT05TICh0YWls KSk7Ci0JICBtYXJrX29iamVjdCAoWENBUiAodGFpbCkpOwotCSAgcHJldiA9IHhjZHJfYWRk ciAodGFpbCk7Ci0JfQotICAgIH0KLSAgbWFya19vYmplY3QgKHRhaWwpOwotICByZXR1cm4g bGlzdDsKLX0KLQogc3RhdGljIHZvaWQKIG1hcmtfZnJhbWUgKHN0cnVjdCBMaXNwX1ZlY3Rv ciAqcHRyKQogewpAQCAtNzA5MCwxNSArNzA2Myw2IEBAIG1hcmtfd2luZG93IChzdHJ1Y3Qg TGlzcF9WZWN0b3IgKnB0cikKICAgICAgIG1hcmtfZ2x5cGhfbWF0cml4ICh3LT5jdXJyZW50 X21hdHJpeCk7CiAgICAgICBtYXJrX2dseXBoX21hdHJpeCAody0+ZGVzaXJlZF9tYXRyaXgp OwogICAgIH0KLQotICAvKiBGaWx0ZXIgb3V0IGtpbGxlZCBidWZmZXJzIGZyb20gYm90aCBi dWZmZXIgbGlzdHMKLSAgICAgaW4gYXR0ZW1wdCB0byBoZWxwIEdDIHRvIHJlY2xhaW0ga2ls bGVkIGJ1ZmZlcnMgZmFzdGVyLgotICAgICBXZSBjYW4gZG8gaXQgZWxzZXdoZXJlIGZvciBs aXZlIHdpbmRvd3MsIGJ1dCB0aGlzIGlzIHRoZQotICAgICBiZXN0IHBsYWNlIHRvIGRvIGl0 IGZvciBkZWFkIHdpbmRvd3MuICAqLwotICB3c2V0X3ByZXZfYnVmZmVycwotICAgICh3LCBt YXJrX2Rpc2NhcmRfa2lsbGVkX2J1ZmZlcnMgKHctPnByZXZfYnVmZmVycykpOwotICB3c2V0 X25leHRfYnVmZmVycwotICAgICh3LCBtYXJrX2Rpc2NhcmRfa2lsbGVkX2J1ZmZlcnMgKHct Pm5leHRfYnVmZmVycykpOwogfQogCiAvKiBFbnRyeSBvZiB0aGUgbWFyayBzdGFjay4gICov CmRpZmYgLS1naXQgYS9zcmMvYnVmZmVyLmMgYi9zcmMvYnVmZmVyLmMKaW5kZXggNzQ0YjBl ZjU1NDguLjZlYzQwYWZmNjQ2IDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmMKKysrIGIvc3Jj L2J1ZmZlci5jCkBAIC0yMDEyLDYgKzIwMTIsMTMgQEAgREVGVU4gKCJraWxsLWJ1ZmZlciIs IEZraWxsX2J1ZmZlciwgU2tpbGxfYnVmZmVyLCAwLCAxLCAiYktpbGwgYnVmZmVyOiAiLAog ICAgICBidWZmZXIgKGJ1ZyMxMDExNCkuICAqLwogICByZXBsYWNlX2J1ZmZlcl9pbl93aW5k b3dzIChidWZmZXIpOwogCisgIC8qIEZvciBkZWFkIHdpbmRvd3MgdGhhdCBoYXZlIG5vdCBi ZWVuIGNvbGxlY3RlZCB5ZXQsIHJlbW92ZSB0aGlzCisgICAgIGJ1ZmZlciBmcm9tIHRob3Nl IHdpbmRvd3MnIGxpc3RzIG9mIHByZXZpb3VzbHkgYW5kIG5leHQgc2hvd24KKyAgICAgYnVm ZmVycyBhbmQgcmVtb3ZlIGFueSAncXVpdC1yZXN0b3JlJyBvciAncXVpdC1yZXN0b3JlLXBy ZXYnCisgICAgIHBhcmFtZXRlcnMgbWVudGlvbmluZyB0aGUgYnVmZmVyLiAgKi8KKyAgaWYg KFhGSVhOVU0gKEJWQVIgKGIsIGRpc3BsYXlfY291bnQpKSA+IDApCisgICAgd2luZG93X2Rp c2NhcmRfYnVmZmVyX2Zyb21fZGVhZF93aW5kb3dzIChidWZmZXIpOworCiAgIC8qIEV4aXQg aWYgcmVwbGFjaW5nIHRoZSBidWZmZXIgaW4gd2luZG93cyBoYXMga2lsbGVkIG91ciBidWZm ZXIuICAqLwogICBpZiAoIUJVRkZFUl9MSVZFX1AgKGIpKQogICAgIHJldHVybiBRdDsKZGlm ZiAtLWdpdCBhL3NyYy93aW5kb3cuYyBiL3NyYy93aW5kb3cuYwppbmRleCA0YmIzNmI2NzMz YS4uNTU5OTE5Njg5YTMgMTAwNjQ0Ci0tLSBhL3NyYy93aW5kb3cuYworKysgYi9zcmMvd2lu ZG93LmMKQEAgLTMyNzcsNiArMzI3NywxMTMgQEAgd2luZG93X3BpeGVsX3RvX3RvdGFsIChM aXNwX09iamVjdCBmcmFtZSwgTGlzcF9PYmplY3QgaG9yaXpvbnRhbCkKIH0KIAogCisvKiog UmVtb3ZlIGFsbCBvY2N1cnJlbmNlcyBvZiBlbGVtZW50IHdob3NlIGNhciBpcyBCVUZGRVIg ZnJvbSBBTElTVC4KKyAgICBSZXR1cm4gY2hhbmdlZCBBTElTVC4gICovCitzdGF0aWMgTGlz cF9PYmplY3QKK3dpbmRvd19kaXNjYXJkX2J1ZmZlcl9mcm9tX2FsaXN0IChMaXNwX09iamVj dCBidWZmZXIsIExpc3BfT2JqZWN0IGFsaXN0KQoreworICBMaXNwX09iamVjdCB0YWlsLCAq cHJldiA9ICZhbGlzdDsKKworICBmb3IgKHRhaWwgPSBhbGlzdDsgQ09OU1AgKHRhaWwpOyB0 YWlsID0gWENEUiAodGFpbCkpCisgICAgeworICAgICAgTGlzcF9PYmplY3QgdGVtID0gWENB UiAodGFpbCk7CisKKyAgICAgIHRlbSA9IFhDQVIgKHRlbSk7CisKKyAgICAgIGlmIChFUSAo dGVtLCBidWZmZXIpKQorCSpwcmV2ID0gWENEUiAodGFpbCk7CisgICAgICBlbHNlCisJcHJl diA9IHhjZHJfYWRkciAodGFpbCk7CisgICAgfQorCisgIHJldHVybiBhbGlzdDsKK30KKwor LyoqIFJlbW92ZSBhbGwgb2NjdXJyZW5jZXMgb2YgQlVGRkVSIGZyb20gTElTVC4gIFJldHVy biBjaGFuZ2VkCisgICAgTElTVC4gICovCitzdGF0aWMgTGlzcF9PYmplY3QKK3dpbmRvd19k aXNjYXJkX2J1ZmZlcl9mcm9tX2xpc3QgKExpc3BfT2JqZWN0IGJ1ZmZlciwgTGlzcF9PYmpl Y3QgbGlzdCkKK3sKKyAgTGlzcF9PYmplY3QgdGFpbCwgKnByZXYgPSAmbGlzdDsKKworICBm b3IgKHRhaWwgPSBsaXN0OyBDT05TUCAodGFpbCk7IHRhaWwgPSBYQ0RSICh0YWlsKSkKKyAg ICBpZiAoRVEgKFhDQVIgKHRhaWwpLCBidWZmZXIpKQorICAgICAgKnByZXYgPSBYQ0RSICh0 YWlsKTsKKyAgICBlbHNlCisgICAgICBwcmV2ID0geGNkcl9hZGRyICh0YWlsKTsKKworICBy ZXR1cm4gbGlzdDsKK30KKworLyoqIFJlbW92ZSBCVUZGRVIgZnJvbSB0aGUgbGlzdHMgb2Yg cHJldmlvdXMgYW5kIG5leHQgYnVmZmVycyBvZiBvYmplY3QKKyAgICBXSU5ET1cuICBBTEwg dHJ1ZSBtZWFucyByZW1vdmUgYW55IGBxdWl0LXJlc3RvcmUnIGFuZAorICAgIGBxdWl0LXJl c3RvcmUtcHJldicgcGFyYW1ldGVyIG9mIFdJTkRPVyByZWZlcmVuY2luZyBCVUZGRVIgdG9v LiAgKi8KK3N0YXRpYyB2b2lkCit3aW5kb3dfZGlzY2FyZF9idWZmZXJfZnJvbV93aW5kb3cg KExpc3BfT2JqZWN0IGJ1ZmZlciwgTGlzcF9PYmplY3Qgd2luZG93LCBib29sIGFsbCkKK3sK KyAgc3RydWN0IHdpbmRvdyAqdyA9IFhXSU5ET1cgKHdpbmRvdyk7CisKKyAgd3NldF9wcmV2 X2J1ZmZlcnMKKyAgICAodywgd2luZG93X2Rpc2NhcmRfYnVmZmVyX2Zyb21fYWxpc3QgKGJ1 ZmZlciwgdy0+cHJldl9idWZmZXJzKSk7CisgIHdzZXRfbmV4dF9idWZmZXJzCisgICAgKHcs IHdpbmRvd19kaXNjYXJkX2J1ZmZlcl9mcm9tX2xpc3QgKGJ1ZmZlciwgdy0+bmV4dF9idWZm ZXJzKSk7CisKKyAgaWYgKGFsbCkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCBxdWl0X3Jl c3RvcmUgPSB3aW5kb3dfcGFyYW1ldGVyICh3LCBRcXVpdF9yZXN0b3JlKTsKKyAgICAgIExp c3BfT2JqZWN0IHF1aXRfcmVzdG9yZV9wcmV2ID0gd2luZG93X3BhcmFtZXRlciAodywgUXF1 aXRfcmVzdG9yZV9wcmV2KTsKKyAgICAgIExpc3BfT2JqZWN0IHF1YWQ7CisKKyAgICAgIGlm IChFUSAoYnVmZmVyLCBGbnRoIChtYWtlX2ZpeG51bSAoMyksIHF1aXRfcmVzdG9yZV9wcmV2 KSkKKwkgIHx8IChDT05TUCAocXVhZCA9IEZjYXIgKEZjZHIgKHF1aXRfcmVzdG9yZV9wcmV2 KSkpCisJICAgICAgJiYgRVEgKEZjYXIgKHF1YWQpLCBidWZmZXIpKSkKKwlGc2V0X3dpbmRv d19wYXJhbWV0ZXIgKHdpbmRvdywgUXF1aXRfcmVzdG9yZV9wcmV2LCBRbmlsKTsKKworICAg ICAgaWYgKEVRIChidWZmZXIsIEZudGggKG1ha2VfZml4bnVtICgzKSwgcXVpdF9yZXN0b3Jl KSkKKwkgIHx8IChDT05TUCAocXVhZCA9IEZjYXIgKEZjZHIgKHF1aXRfcmVzdG9yZSkpKQor CSAgICAgICYmIEVRIChGY2FyIChxdWFkKSwgYnVmZmVyKSkpCisJeworCSAgRnNldF93aW5k b3dfcGFyYW1ldGVyICh3aW5kb3csIFFxdWl0X3Jlc3RvcmUsCisJCQkJIHdpbmRvd19wYXJh bWV0ZXIgKHcsIFFxdWl0X3Jlc3RvcmVfcHJldikpOworCSAgRnNldF93aW5kb3dfcGFyYW1l dGVyICh3aW5kb3csIFFxdWl0X3Jlc3RvcmVfcHJldiwgUW5pbCk7CisJfQorICAgIH0KK30K KworLyoqIFJlbW92ZSBCVUZGRVIgZnJvbSB0aGUgbGlzdHMgb2YgcHJldmlvdXMgYW5kIG5l eHQgYnVmZmVycyBhbmQgdGhlCisgICAgYHF1aXQtcmVzdG9yZScgYW5kIGBxdWl0LXJlc3Rv cmUtcHJldicgcGFyYW1ldGVycyBvZiBhbnkgZGVhZAorICAgIFdJTkRPVy4gICovCit2b2lk Cit3aW5kb3dfZGlzY2FyZF9idWZmZXJfZnJvbV9kZWFkX3dpbmRvd3MgKExpc3BfT2JqZWN0 IGJ1ZmZlcikKK3sKKyAgc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCA9IFhIQVNIX1RBQkxF ICh3aW5kb3dfZGVhZF93aW5kb3dzX3RhYmxlKTsKKworICBET0hBU0ggKGgsIGssIHYpCisg ICAgd2luZG93X2Rpc2NhcmRfYnVmZmVyX2Zyb21fd2luZG93IChidWZmZXIsIHYsIHRydWUp OworfQorCitERUZVTiAoIndpbmRvdy1kaXNjYXJkLWJ1ZmZlci1mcm9tLXdpbmRvdyIsIEZ3 aW5kb3dfZGlzY2FyZF9idWZmZXIsCisgICAgICAgU3dpbmRvd19kaXNjYXJkX2J1ZmZlciwg MiwgMywgMCwKKyAgICAgICBkb2M6IC8qIERpc2NhcmQgQlVGRkVSIGZyb20gV0lORE9XLgor RGlzY2FyZCBzcGVjaWZpZWQgbGl2ZSBCVUZGRVIgZnJvbSB0aGUgbGlzdHMgb2YgcHJldmlv dXMgYW5kIG5leHQKK2J1ZmZlcnMgb2Ygc3BlY2lmaWVkIGxpdmUgV0lORE9XLgorCitPcHRp b25hbCBhcmd1bWVudCBBTEwgbm9uLW5pbCBtZWFucyBkaXNjYXJkIGFueSBgcXVpdC1yZXN0 b3JlJyBhbmQKK2BxdWl0LXJlc3RvcmUtcHJldicgcGFyYW1ldGVycyBvZiBXSU5ET1cgcmVm ZXJlbmNpbmcgQlVGRkVSIHRvby4gICovKQorICAoTGlzcF9PYmplY3QgYnVmZmVyLCBMaXNw X09iamVjdCB3aW5kb3csIExpc3BfT2JqZWN0IGFsbCkKK3sKKyAgaWYgKCFCVUZGRVJfTElW RV9QIChYQlVGRkVSIChidWZmZXIpKSkKKyAgICBlcnJvciAoIk5vdCBhIGxpdmUgYnVmZmVy Iik7CisKKyAgaWYgKCFXSU5ET1dfTElWRV9QICh3aW5kb3cpKQorICAgIGVycm9yICgiTm90 IGEgbGl2ZSB3aW5kb3ciKTsKKworICB3aW5kb3dfZGlzY2FyZF9idWZmZXJfZnJvbV93aW5k b3cgKGJ1ZmZlciwgd2luZG93LCAhTklMUCAoYWxsKSk7CisKKyAgcmV0dXJuIFFuaWw7Cit9 CisKKwogREVGVU4gKCJkZWxldGUtb3RoZXItd2luZG93cy1pbnRlcm5hbCIsIEZkZWxldGVf b3RoZXJfd2luZG93c19pbnRlcm5hbCwKICAgICAgICBTZGVsZXRlX290aGVyX3dpbmRvd3Nf aW50ZXJuYWwsIDAsIDIsICIiLAogICAgICAgIGRvYzogLyogTWFrZSBXSU5ET1cgZmlsbCBp dHMgZnJhbWUuCkBAIC00MTQwLDYgKzQyNDcsOSBAQCBzZXRfd2luZG93X2J1ZmZlciAoTGlz cF9PYmplY3Qgd2luZG93LCBMaXNwX09iamVjdCBidWZmZXIsCiAgIHctPndpbmRvd19lbmRf dnBvcyA9IDA7CiAgIHctPmxhc3RfY3Vyc29yX3Zwb3MgPSAwOwogCisgIC8qIERpc2NhcmQg QlVGRkVSIGZyb20gV0lORE9XJ3MgcHJldmlvdXMgYW5kIG5leHQgYnVmZmVycy4gICovCisg IHdpbmRvd19kaXNjYXJkX2J1ZmZlcl9mcm9tX3dpbmRvdyAoYnVmZmVyLCB3aW5kb3csIGZh bHNlKTsKKwogICBpZiAoIShrZWVwX21hcmdpbnNfcCAmJiBzYW1lYnVmKSkKICAgICB7IC8q IElmIHdlJ3JlIG5vdCBhY3R1YWxseSBjaGFuZ2luZyB0aGUgYnVmZmVyLCBkb24ndCByZXNl dCBoc2Nyb2xsCiAJIGFuZCB2c2Nyb2xsLiAgUmVzZXR0aW5nIGhzY3JvbGwgYW5kIHZzY3Jv bGwgaGVyZSBpcyBwcm9ibGVtYXRpYwpAQCAtNDQwMiw2ICs0NTEyLDEwIEBAIG1ha2VfcGFy ZW50X3dpbmRvdyAoTGlzcF9PYmplY3Qgd2luZG93LCBib29sIGhvcmZsYWcpCiAgIHdzZXRf YnVmZmVyIChwLCBRbmlsKTsKICAgd3NldF9jb21iaW5hdGlvbiAocCwgaG9yZmxhZywgd2lu ZG93KTsKICAgd3NldF9jb21iaW5hdGlvbl9saW1pdCAocCwgUW5pbCk7CisgIC8qIFJlc2V0 IGFueSBwcmV2aW91cyBhbmQgbmV4dCBidWZmZXJzIG9mIHAgd2hpY2ggaGF2ZSBiZWVuIGlu c3RhbGxlZAorICAgICBieSB0aGUgbWVtY3B5IGFib3ZlLiAgKi8KKyAgd3NldF9wcmV2X2J1 ZmZlcnMgKHAsIFFuaWwpOworICB3c2V0X25leHRfYnVmZmVycyAocCwgUW5pbCk7CiAgIHdz ZXRfd2luZG93X3BhcmFtZXRlcnMgKHAsIFFuaWwpOwogfQogCkBAIC00NDI2LDEwICs0NTQw LDYgQEAgbWFrZV93aW5kb3cgKHZvaWQpCiAgIHdzZXRfdmVydGljYWxfc2Nyb2xsX2Jhcl90 eXBlICh3LCBRdCk7CiAgIHdzZXRfaG9yaXpvbnRhbF9zY3JvbGxfYmFyX3R5cGUgKHcsIFF0 KTsKICAgd3NldF9jdXJzb3JfdHlwZSAodywgUXQpOwotICAvKiBUaGVzZSBMaXNwIGZpZWxk cyBhcmUgbWFya2VkIHNwZWNpYWxseSBzbyB0aGV5J3JlIG5vdCBzZXQgdG8gbmlsIGJ5Ci0g ICAgIGFsbG9jYXRlX3dpbmRvdy4gICovCi0gIHdzZXRfcHJldl9idWZmZXJzICh3LCBRbmls KTsKLSAgd3NldF9uZXh0X2J1ZmZlcnMgKHcsIFFuaWwpOwogCiAgIC8qIEluaXRpYWxpemUg bm9uLUxpc3AgZGF0YS4gIE5vdGUgdGhhdCBhbGxvY2F0ZV93aW5kb3cgemVyb2VzIG91dCBh bGwKICAgICAgbm9uLUxpc3AgZGF0YSwgc28gZG8gaXQgb25seSBmb3Igc2xvdHMgd2hpY2gg c2hvdWxkIG5vdCBiZSB6ZXJvLiAgKi8KQEAgLTUyNTIsNiArNTM2MiwxMSBAQCBERUZVTiAo ImRlbGV0ZS13aW5kb3ctaW50ZXJuYWwiLCBGZGVsZXRlX3dpbmRvd19pbnRlcm5hbCwgU2Rl bGV0ZV93aW5kb3dfaW50ZXJuYQogCSAgdW5jaGFpbl9tYXJrZXIgKFhNQVJLRVIgKHctPm9s ZF9wb2ludG0pKTsKIAkgIHVuY2hhaW5fbWFya2VyIChYTUFSS0VSICh3LT5zdGFydCkpOwog CSAgd3NldF9idWZmZXIgKHcsIFFuaWwpOworCSAgLyogQWRkIFdJTkRPVyB0byB0YWJsZSBv ZiBkZWFkIHdpbmRvd3Mgc28gd2hlbiBraWxsaW5nIGEgYnVmZmVyCisJICAgICBXSU5ET1cg bWVudGlvbnMsIGFsbCByZWZlcmVuY2VzIHRvIHRoYXQgYnVmZmVyIGNhbiBiZSByZW1vdmVk CisJICAgICBhbmQgdGhlIGJ1ZmZlciBiZSBjb2xsZWN0ZWQuICAqLworCSAgRnB1dGhhc2gg KG1ha2VfZml4bnVtICh3LT5zZXF1ZW5jZV9udW1iZXIpLAorCQkgICAgd2luZG93LCB3aW5k b3dfZGVhZF93aW5kb3dzX3RhYmxlKTsKIAl9CiAKICAgICAgIGlmIChOSUxQIChzLT5wcmV2 KSAmJiBOSUxQIChzLT5uZXh0KSkKQEAgLTczNTYsMTIgKzc0NzEsMjEgQEAgREVGVU4gKCJz ZXQtd2luZG93LWNvbmZpZ3VyYXRpb24iLCBGc2V0X3dpbmRvd19jb25maWd1cmF0aW9uLAog CQl9CiAJICAgIH0KIAorCSAgLyogUmVtb3ZlIHdpbmRvdyBmcm9tIHRoZSB0YWJsZSBvZiBk ZWFkIHdpbmRvd3MuICAqLworCSAgRnJlbWhhc2ggKG1ha2VfZml4bnVtICh3LT5zZXF1ZW5j ZV9udW1iZXIpLAorCQkgICAgd2luZG93X2RlYWRfd2luZG93c190YWJsZSk7CisKIAkgIGlm ICgoTklMUCAoZG9udF9zZXRfbWluaXdpbmRvdykgfHwgIU1JTklfV0lORE9XX1AgKHcpKQog CSAgICAgICYmIEJVRkZFUlAgKHAtPmJ1ZmZlcikgJiYgQlVGRkVSX0xJVkVfUCAoWEJVRkZF UiAocC0+YnVmZmVyKSkpCiAJICAgIC8qIElmIHNhdmVkIGJ1ZmZlciBpcyBhbGl2ZSwgaW5z dGFsbCBpdCwgdW5sZXNzIGl0J3MgYQogCSAgICAgICBtaW5pYnVmZmVyIHdlIGV4cGxpY2l0 bHkgcHJvaGliaXQuICAqLwogCSAgICB7Ci0JICAgICAgd3NldF9idWZmZXIgKHcsIHAtPmJ1 ZmZlcik7CisJICAgICAgaWYgKCFFUSAody0+Y29udGVudHMsIHAtPmJ1ZmZlcikpCisJCXsK KwkJICB3c2V0X2J1ZmZlciAodywgcC0+YnVmZmVyKTsKKwkJICB3aW5kb3dfZGlzY2FyZF9i dWZmZXJfZnJvbV93aW5kb3cgKHctPmNvbnRlbnRzLCB3aW5kb3csIGZhbHNlKTsKKwkJfQor CiAJICAgICAgdy0+c3RhcnRfYXRfbGluZV9iZWcgPSAhTklMUCAocC0+c3RhcnRfYXRfbGlu ZV9iZWcpOwogCSAgICAgIHNldF9tYXJrZXJfcmVzdHJpY3RlZCAody0+c3RhcnQsIHAtPnN0 YXJ0LCB3LT5jb250ZW50cyk7CiAJICAgICAgc2V0X21hcmtlcl9yZXN0cmljdGVkICh3LT5w b2ludG0sIHAtPnBvaW50bSwgdy0+Y29udGVudHMpOwpAQCAtNzQwNiw2ICs3NTMwLDcgQEAg REVGVU4gKCJzZXQtd2luZG93LWNvbmZpZ3VyYXRpb24iLCBGc2V0X3dpbmRvd19jb25maWd1 cmF0aW9uLAogCQkgcmVjcmVhdGUgKnNjcmF0Y2gqIGluIHRoZSBjb3Vyc2UgKHBhcnQgb2Yg SnVhbm1hJ3MgYnMtc2hvdwogCQkgc2NlbmFyaW8gZnJvbSBNYXJjaCAyMDExKS4gICovCiAJ ICAgICAgd3NldF9idWZmZXIgKHcsIG90aGVyX2J1ZmZlcl9zYWZlbHkgKEZjdXJyZW50X2J1 ZmZlciAoKSkpOworCSAgICAgIHdpbmRvd19kaXNjYXJkX2J1ZmZlcl9mcm9tX3dpbmRvdyAo dy0+Y29udGVudHMsIHdpbmRvdywgZmFsc2UpOwogCSAgICAgIC8qIFRoaXMgd2lsbCBzZXQg dGhlIG1hcmtlcnMgdG8gYmVnaW5uaW5nIG9mIHZpc2libGUKIAkJIHJhbmdlLiAgKi8KIAkg ICAgICBzZXRfbWFya2VyX3Jlc3RyaWN0ZWRfYm90aCAody0+c3RhcnQsIHctPmNvbnRlbnRz LCAwLCAwKTsKQEAgLTc1ODUsNiArNzcxMCwxMSBAQCBkZWxldGVfYWxsX2NoaWxkX3dpbmRv d3MgKExpc3BfT2JqZWN0IHdpbmRvdykKIAkgcG9zc2libGUgcmVzdXJyZWN0aW9uIGluIEZz ZXRfd2luZG93X2NvbmZpZ3VyYXRpb24uICAqLwogICAgICAgd3NldF9jb21iaW5hdGlvbl9s aW1pdCAodywgdy0+Y29udGVudHMpOwogICAgICAgd3NldF9idWZmZXIgKHcsIFFuaWwpOwor ICAgICAgLyogQWRkIFdJTkRPVyB0byB0YWJsZSBvZiBkZWFkIHdpbmRvd3Mgc28gd2hlbiBr aWxsaW5nIGEgYnVmZmVyCisJIFdJTkRPVyBtZW50aW9ucywgYWxsIHJlZmVyZW5jZXMgdG8g dGhhdCBidWZmZXIgY2FuIGJlIHJlbW92ZWQKKwkgYW5kIHRoZSBidWZmZXIgYmUgY29sbGVj dGVkLiAgKi8KKyAgICAgIEZwdXRoYXNoIChtYWtlX2ZpeG51bSAody0+c2VxdWVuY2VfbnVt YmVyKSwKKwkJd2luZG93LCB3aW5kb3dfZGVhZF93aW5kb3dzX3RhYmxlKTsKICAgICB9CiAK ICAgVndpbmRvd19saXN0ID0gUW5pbDsKQEAgLTg1OTQsNiArODcyNCw4IEBAIHN5bXNfb2Zf d2luZG93ICh2b2lkKQogICBERUZTWU0gKFFjb25maWd1cmF0aW9uLCAiY29uZmlndXJhdGlv biIpOwogICBERUZTWU0gKFFkZWxldGUsICJkZWxldGUiKTsKICAgREVGU1lNIChRZGVkaWNh dGVkLCAiZGVkaWNhdGVkIik7CisgIERFRlNZTSAoUXF1aXRfcmVzdG9yZSwgInF1aXQtcmVz dG9yZSIpOworICBERUZTWU0gKFFxdWl0X3Jlc3RvcmVfcHJldiwgInF1aXQtcmVzdG9yZS1w cmV2Iik7CiAKICAgREVGVkFSX0xJU1AgKCJ0ZW1wLWJ1ZmZlci1zaG93LWZ1bmN0aW9uIiwg VnRlbXBfYnVmZmVyX3Nob3dfZnVuY3Rpb24sCiAJICAgICAgIGRvYzogLyogTm9uLW5pbCBt ZWFucyBjYWxsIGFzIGZ1bmN0aW9uIHRvIGRpc3BsYXkgYSBoZWxwIGJ1ZmZlci4KQEAgLTg5 MTcsNiArOTA0OSwxNyBAQCBzeW1zX29mX3dpbmRvdyAodm9pZCkKIGRpc3BsYXllZCBhZnRl ciBhIHNjcm9sbGluZyBvcGVyYXRpb24gdG8gYmUgc29tZXdoYXQgaW5hY2N1cmF0ZS4gICov KTsKICAgZmFzdF9idXRfaW1wcmVjaXNlX3Njcm9sbGluZyA9IGZhbHNlOwogCisgIERFRlZB Ul9MSVNQICgid2luZG93LWRlYWQtd2luZG93cy10YWJsZSIsIHdpbmRvd19kZWFkX3dpbmRv d3NfdGFibGUsCisgICAgZG9jOiAvKiBIYXNoIHRhYmxlIG9mIGRlYWQgd2luZG93cy4KK0Vh Y2ggZW50cnkgaW4gdGhpcyB0YWJsZSBtYXBzIGEgd2luZG93IG51bWJlciB0byBhIHdpbmRv dyBvYmplY3QuCitFbnRyaWVzIGFyZSBhZGRlZCBieSBgZGVsZXRlLXdpbmRvdy1pbnRlcm5h bCcgYW5kIGFyZSByZW1vdmVkIGJ5IHRoZQorZ2FyYmFnZSBjb2xsZWN0b3IuCisKK1RoaXMg dGFibGUgaXMgbWFpbnRhaW5lZCBieSBjb2RlIGluIHdpbmRvdy5jIGFuZCBpcyBtYWRlIHZp c2libGUgaW4KK0VsaXNwIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuICAqLyk7CisgIHdp bmRvd19kZWFkX3dpbmRvd3NfdGFibGUKKyAgICA9IENBTExOIChGbWFrZV9oYXNoX3RhYmxl LCBRQ3dlYWtuZXNzLCBRdCk7CisKICAgZGVmc3ViciAoJlNzZWxlY3RlZF93aW5kb3cpOwog ICBkZWZzdWJyICgmU29sZF9zZWxlY3RlZF93aW5kb3cpOwogICBkZWZzdWJyICgmU21pbmli dWZmZXJfd2luZG93KTsKQEAgLTkwMzIsNiArOTE3NSw3IEBAIHN5bXNfb2Zfd2luZG93ICh2 b2lkKQogICBkZWZzdWJyICgmU3dpbmRvd19wYXJhbWV0ZXJzKTsKICAgZGVmc3ViciAoJlN3 aW5kb3dfcGFyYW1ldGVyKTsKICAgZGVmc3ViciAoJlNzZXRfd2luZG93X3BhcmFtZXRlcik7 CisgIGRlZnN1YnIgKCZTd2luZG93X2Rpc2NhcmRfYnVmZmVyKTsKICAgZGVmc3ViciAoJlN3 aW5kb3dfY3Vyc29yX3R5cGUpOwogICBkZWZzdWJyICgmU3NldF93aW5kb3dfY3Vyc29yX3R5 cGUpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3dpbmRvdy5oIGIvc3JjL3dpbmRvdy5oCmluZGV4 IDg2OTMyMTgxMjUyLi4zMzVlMGEzNDUzZSAxMDA2NDQKLS0tIGEvc3JjL3dpbmRvdy5oCisr KyBiL3NyYy93aW5kb3cuaApAQCAtMTQyLDYgKzE0MiwxMiBAQCAjZGVmaW5lIFdJTkRPV19I X0lOQ0xVREVECiAgICAgICAgYXMgd2VsbC4gICovCiAgICAgTGlzcF9PYmplY3QgY29udGVu dHM7CiAKKyAgICAvKiBBIGxpc3Qgb2YgPGJ1ZmZlciwgd2luZG93LXN0YXJ0LCB3aW5kb3ct cG9pbnQ+IHRyaXBsZXMgbGlzdGluZworICAgICAgIGJ1ZmZlcnMgcHJldmlvdXNseSBzaG93 biBpbiB0aGlzIHdpbmRvdy4gICovCisgICAgTGlzcF9PYmplY3QgcHJldl9idWZmZXJzOwor ICAgIC8qIExpc3Qgb2YgYnVmZmVycyByZS1zaG93biBpbiB0aGlzIHdpbmRvdy4gICovCisg ICAgTGlzcF9PYmplY3QgbmV4dF9idWZmZXJzOworCiAgICAgLyogVGhlIG9sZCBidWZmZXIg b2YgdGhpcyB3aW5kb3csIHNldCB0byB0aGlzIHdpbmRvdydzIGJ1ZmZlciBieQogICAgICAg IHJ1bl93aW5kb3dfY2hhbmdlX2Z1bmN0aW9ucyBldmVyeSB0aW1lIGl0IHNlZXMgdGhpcyB3 aW5kb3cuCiAgICAgICAgVW51c2VkIGZvciBpbnRlcm5hbCB3aW5kb3dzLiAgKi8KQEAgLTIx OCwxNCArMjI0LDYgQEAgI2RlZmluZSBXSU5ET1dfSF9JTkNMVURFRAogICAgIHN0cnVjdCBn bHlwaF9tYXRyaXggKmN1cnJlbnRfbWF0cml4OwogICAgIHN0cnVjdCBnbHlwaF9tYXRyaXgg KmRlc2lyZWRfbWF0cml4OwogCi0gICAgLyogVGhlIHR3byBMaXNwX09iamVjdCBmaWVsZHMg YmVsb3cgYXJlIG1hcmtlZCBpbiBhIHNwZWNpYWwgd2F5LAotICAgICAgIHdoaWNoIGlzIHdo eSB0aGV5J3JlIHBsYWNlZCBhZnRlciBgY3VycmVudF9tYXRyaXgnLiAgKi8KLSAgICAvKiBB IGxpc3Qgb2YgPGJ1ZmZlciwgd2luZG93LXN0YXJ0LCB3aW5kb3ctcG9pbnQ+IHRyaXBsZXMg bGlzdGluZwotICAgICAgIGJ1ZmZlcnMgcHJldmlvdXNseSBzaG93biBpbiB0aGlzIHdpbmRv dy4gICovCi0gICAgTGlzcF9PYmplY3QgcHJldl9idWZmZXJzOwotICAgIC8qIExpc3Qgb2Yg YnVmZmVycyByZS1zaG93biBpbiB0aGlzIHdpbmRvdy4gICovCi0gICAgTGlzcF9PYmplY3Qg bmV4dF9idWZmZXJzOwotCiAgICAgLyogTnVtYmVyIHNheWluZyBob3cgcmVjZW50bHkgd2lu ZG93IHdhcyBzZWxlY3RlZC4gICovCiAgICAgRU1BQ1NfSU5UIHVzZV90aW1lOwogCkBAIC0x MjI4LDYgKzEyMjYsNyBAQCAjZGVmaW5lIENIRUNLX0xJVkVfV0lORE9XKFdJTkRPVykJCQkJ XAogZXh0ZXJuIHZvaWQgd3NldF9idWZmZXIgKHN0cnVjdCB3aW5kb3cgKiwgTGlzcF9PYmpl Y3QpOwogZXh0ZXJuIGJvb2wgd2luZG93X291dGRhdGVkIChzdHJ1Y3Qgd2luZG93ICopOwog ZXh0ZXJuIHB0cmRpZmZfdCB3aW5kb3dfcG9pbnQgKHN0cnVjdCB3aW5kb3cgKncpOworZXh0 ZXJuIHZvaWQgd2luZG93X2Rpc2NhcmRfYnVmZmVyX2Zyb21fZGVhZF93aW5kb3dzIChMaXNw X09iamVjdCk7CiBleHRlcm4gdm9pZCBpbml0X3dpbmRvd19vbmNlICh2b2lkKTsKIGV4dGVy biB2b2lkIGluaXRfd2luZG93ICh2b2lkKTsKIGV4dGVybiB2b2lkIHN5bXNfb2Zfd2luZG93 ICh2b2lkKTsK --------------RMD6CDRucDauQxOc8ngRmTVZ--