From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Keith David Bershatsky Newsgroups: gmane.emacs.bugs Subject: bug#22873: #22873 (multiple fake cursors); and, #17684 (crosshairs / fill-column). Date: Wed, 04 Mar 2020 01:03:10 -0800 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Wed_Mar__4_01:03:10_2020-1" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="79162"; mail-complaints-to="usenet@ciao.gmane.io" Cc: mbork@mbork.pl, rms@gnu.org, johnw@gnu.org, akioburns@icloud.com To: 22873@debbugs.gnu.org,17684@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Mar 04 10:04:59 2020 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 1j9PxZ-000GbL-7p for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 04 Mar 2020 10:04:57 +0100 Original-Received: from localhost ([::1]:59310 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j9PxY-0007Ue-79 for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 04 Mar 2020 04:04:56 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:49597) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j9Pwm-0007Ru-OR for bug-gnu-emacs@gnu.org; Wed, 04 Mar 2020 04:04:11 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j9Pwk-0000wQ-9f for bug-gnu-emacs@gnu.org; Wed, 04 Mar 2020 04:04:08 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:34372) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1j9Pwg-0000p6-Ry for bug-gnu-emacs@gnu.org; Wed, 04 Mar 2020 04:04:06 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1j9Pwg-0007Uz-Mi for bug-gnu-emacs@gnu.org; Wed, 04 Mar 2020 04:04:02 -0500 X-Loop: help-debbugs@gnu.org In-Reply-To: Resent-From: Keith David Bershatsky Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 04 Mar 2020 09:04:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 22873 X-GNU-PR-Package: emacs Original-Received: via spool by 22873-submit@debbugs.gnu.org id=B22873.158331259928762 (code B ref 22873); Wed, 04 Mar 2020 09:04:02 +0000 Original-Received: (at 22873) by debbugs.gnu.org; 4 Mar 2020 09:03:19 +0000 Original-Received: from localhost ([127.0.0.1]:40344 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j9Pvy-0007Tp-SA for submit@debbugs.gnu.org; Wed, 04 Mar 2020 04:03:18 -0500 Original-Received: from gateway24.websitewelcome.com ([192.185.50.252]:24007) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j9Pvw-0007TZ-KJ for 22873@debbugs.gnu.org; Wed, 04 Mar 2020 04:03:17 -0500 Original-Received: from cm14.websitewelcome.com (cm14.websitewelcome.com [100.42.49.7]) by gateway24.websitewelcome.com (Postfix) with ESMTP id 2685B1993A for <22873@debbugs.gnu.org>; Wed, 4 Mar 2020 03:03:16 -0600 (CST) Original-Received: from gator3053.hostgator.com ([50.87.144.69]) by cmsmtp with SMTP id 9Pvvj1qAVXVkQ9PvvjLqtH; Wed, 04 Mar 2020 03:03:16 -0600 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lawlist.com ; s=default; h=Content-Type:MIME-Version:Subject:Cc:To:From:Message-ID:Date: Sender:Reply-To:Content-Transfer-Encoding:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=kfANWl8rg2ub655fc+3KfEwPoU06Lh5DJKIwIKF8wCY=; b=Z9TE5K9qaNYm/Gld4a4dbVw8L/ PJscDdBdMclKecGR+z0dSEVM/0t976f8myM1IIwC6VQScImIaEDjiJKkCtBhdFPj6wcRxcEoUao2v n2MuXGuKvVxZ0rQ3HiTXZYYC/DSRtixkAAI2B5k+S5d0yXr2jQPTEv9wdouhfazE7PlVh6S1RGrnj 7eM/PBIVp2xtmbCsqnDR+FjTAiCvVYSWaWdEt46mNxv7IVX5yFMvPv/yWZ8t55o1Y0YJAURY7tayg FINsStEB9Rm7DAbh4TPZQqyMvRt+vnpTK1wibXSUpPeApIucrSUWax4grYT05mrBQZTZLo8riSH4Y /Nl9WmMg==; Original-Received: from cpe-45-48-239-195.socal.res.rr.com ([45.48.239.195]:59173 helo=server.local) by gator3053.hostgator.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1j9Pvr-000YYW-HH; Wed, 04 Mar 2020 03:03:14 -0600 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator3053.hostgator.com X-AntiAbuse: Original Domain - debbugs.gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - lawlist.com X-BWhitelist: no X-Source-IP: 45.48.239.195 X-Source-L: No X-Exim-ID: 1j9Pvr-000YYW-HH X-Source-Sender: cpe-45-48-239-195.socal.res.rr.com (server.local) [45.48.239.195]:59173 X-Source-Auth: lawlist X-Email-Count: 8 X-Source-Cap: bGF3bGlzdDtsYXdsaXN0O2dhdG9yMzA1My5ob3N0Z2F0b3IuY29t X-Local-Domain: yes X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 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" Xref: news.gmane.io gmane.emacs.bugs:176829 Archived-At: --Multipart_Wed_Mar__4_01:03:10_2020-1 Content-Type: text/plain; charset=US-ASCII VERSION: 022.007 [03/03/2020] CHANGELOG: - nsterm.m: Bug fix in `mc_ns_draw_window_cursor' relating to a situation where the `cursor_glyph` is NULL and the face_id is invalid. In such a situation, we now use the DEFAULT_FACE_ID. - Pursuant to the written request of Drew Adams on 01-27-2020 to change the name of the "crosshairs.el" Lisp file to something else, said file has been changed to the file name of "+-mode.el". - Miscellaneous tidying-up of code. VIDEOS: w32: https://youtu.be/r3BdJVlsAnQ ns: https://youtu.be/bc1h8jtbXmw x11: https://youtu.be/aCIFhD2Xz5s SCREENSHOTS: https://www.lawlist.com/images/22873_17684_light_dark_backgrounds.png SETUP: Step 1: git clone -b master git://git.sv.gnu.org/emacs.git Step 2: In the new emacs folder, go back to an Emacs version from 07/14/2019: git reset --hard ac57c5093829ee09084c562bbbc1c412179be13d Step 3: From within the new emacs folder created in Step 1, apply the patch: git apply /path/to/the/patch.diff Step 4: ./autogen.sh Step 5: ./configure ... [your custom options] Step 6: make Step 7: make install USAGE: - For a minimal working example of built-in fake cursors, type: M-x mc-test ;;; TURN ON FAKE CURSORS (buffer position, cursor-type, cursor color): (setq mc-conf '((1 "hbar" "magenta") (2 "bar" "purple") (3 "box" "#00FF00") (4 "hollow" "#0000FF") (5 ("hbar" 3) [1.0 0.0 1.0]) (6 ("bar" 3) [0.0 1.0 1.0]) (7 "framed" "OrangeRed"))) ;;; TURN OFF FAKE CURSORS: (setq mc-conf nil) - To try out both the crosshairs feature and the visible fill column indicator feature, type: M-x +-mode - To try out just the visible fill column indicator feature, type: M-x fc-mode - To try out built-in fake cursors with Magnar Sveen's multiple-cursors package, that package must be installed. If the multiple-cursors package is already installed, then just (require '+-mode) and `+-mode.el` will redefine a few of the multiple-cursors functions and set up a few keyboard shortcuts. If the multiple-cursors package by Magnar Sveen is not already installed, then here are two easy ways to install that package: Type: M-x mc-install OR, evaluate the following snippet: (progn (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) (package-initialize) (package-refresh-contents) (package-install 'multiple-cursors) (mc/built-in-cursors)) NOTES: - Our journey begins at the outset of `update_window' when `mc_update_window_dryrun' performs a `!draw_p` simulation to create a new cache of fake cursors that are stored in the `w->mc_matrix`. The cache of fake cursors from the previous redisplay is copied to a temporary `mc_matrix` under the name of `old_matrix`. `mc_update_text_area' (used for `!draw_p` / `draw_p` situations) calls `mc_draw_glyphs' (writes glyphs to the glass) followed by `mc_draw_row' (writes fake cursors to the glass immediately thereafter). At the tail end of `mc_update_window_dryrun', `mc_update_window_erase' compares the new `w->mc_matrix` with the `old_matrix` to determine which fake cursors are the same -- setting the `same_p` boolean struct member accordingly for each applicable fake cursor within the `w->mc_matrix`. All fake cursors in the `old_matrix` that are `!same_p` get erased at this juncture. [Fn 1.] After the dryrun is complete, `update_window' does the real thing -- `draw_p`. As to the `from_where` situations of SKIPPED, POST_CHANGED, UNCHANGED, and SET_CURSOR_TWO, `mc_helper' compares the incoming tentative fake cursor with the `w->mc_matrix` to see if it has previously been marked as `same_p` -- if it is `!same_p`, then the fake cursor is drawn and we `return`. Fake cursors that have a `cursor_type` of MC_LEFT_FRINGE_BITMAP or MC_RIGHT_FRINGE_BITMAP are always reset even if they are `same_p`. As to the `from_where` situations of SCRIBE_ONE, SCRIBE_TWO, SCRIBE_THREE, and NOWHERE, `mc_helper' always causes fake cursors to be drawn (because new glyphs were written to the glass, or the area to the right of the display line was cleared) and we `return`. . Fn. 1: Even though writing new glyphs to the glass (SCRIBE_ONE, SCRIBE_TWO, and SCRIBE_THREE) would erase fake cursors within those boundaries, it is still necessary to erase `!same_p` fake cursors prior thereto. This is because `scrolling_window' occurs before new glyphs are written and `rif->scroll_run_hook' may copy one or more rows to other areas of the glass. It is not worth the effort to programmatically track both the _copied_ fake cursors and the _original_ fake cursors from the previous redisplay cycle, whose glyphs may remain where they are in the current redisplay cycle because they satisfy the `GLYPH_EQUAL_P' test. - The rest of our journey takes place wherever `draw_glyphs' would ordinarily be called, excluding `update_text_area'. If features 17684/22873 are active, `mc_redraw_row' calls `mc_draw_glyphs' (writes glyphs to the glass) and fake cursors are written to the glass immediately thereafter (if the coordinates coincide with prerecorded data in the `w->mc_matrix`). The functions containing the aforementioned calls are: . `gui_insert_glyphs' . `gui_fix_overlapping_area' . `draw_row_with_mouse_face' . `expose_area' . `expose_line' . `redraw_overlapped_rows' [which has been incorporated into `update_window'] - As to `mc_scrolling_window', it would appear that there is no tangible benefit to rotating the current/prospective cache of fake cursors to compare the data before removing the fake cursors. When scrolling the display, only _some_ lines are copied to new locations. Areas that are not overwritten may have fake cursors and those may not necessarily be removed if desired/current matrix glyphs are equal. The test for `GLYPH_EQUAL_P' does not take into consideration the existence of a fake cursor, and the glyph (with a fake cursor) may not be updated as a result thereof. As to lines that are not copied, portions may be updated and fake cursors would be removed thereby. `mc_rotate_matrix' and `mc_reverse_vpos' were removed with patch v. 022.002. - NS: As of 09/28/2018 (7946445962372c4255180af45cb7c857f1b0b5fa), the NS port no longer does anything useful during `update_window' except mark dirty rectangles. All drawing is now done when the MacOS calls `drawRect', which in turn calls `expose_frame'. This was done to add support for MacOS Mojave .... TODO: - When an idle-timer fires and point is at the end of a horizontally scrolled line in a narrow window, the temporary horizontal scroll is canceled. Create a minimal working example and file a bug report. (progn (defun test () (interactive) (let ((ov (make-overlay (point) (1+ (point)) nil t t))) (overlay-put ov 'face '(:foreground "red")))) (global-set-key [f5] 'test) (split-window-horizontally) (switch-to-buffer (get-buffer-create "foo")) (setq bidi-display-reordering nil) (setq-local auto-hscroll-mode 'current-line) (dotimes (i 80) (insert (char-to-string (+ 65 i))))) - `ns_draw_window_cursor' calls `ns_clip_to_rect', which does _not_ take `row->clip` into consideration when drawing cursors with `NSRectFill'. When it comes time to draw glyphs on top of the box/hollow family of cursors, `row->clip` is taken into consideration by `get_glyph_string_clip'. Fake cursors can be drawn even though the glyphs cannot, resulting in hollow/box family of cursors without text. The issue can be reproduced with M-x mc-test. [A temporary workaround is to disable `row->clip` while drawing the glyphs.] https://lists.gnu.org/archive/html/emacs-devel/2019-04/msg00009.html - Deal with left/right overwritten glyphs in the w32 and X ports of Emacs. - The current test for `auto_hscroll_mode_p' only looks for `current_line` and all five related tests are based upon that assumption, which may not be true. - Multiple Cursors: If point is in the middle of a composite character, then select a fully composed character so that the fake cursor is visible. - Implement functionality similar to the Lisp multiple-cursors by Magnar Sveen. - Follow up with the Emacs team re bug#32177; i.e., (Current line number shifts one column to the left.) - Follow up with the Emacs team re bug#32060; i.e., Horizontal Scrolling (Current Line): Wrong line gets h-scrolled. - Determine if bug #28936 needs to be fixed and help the Emacs team re same. - Is there any additional meaningful optimization that can be added to the three calls of `mc_pre_scroll_clean'? - There is a bug affecting an older version of Emacs for the NS port that causes partial line flickering when the same characters are grouped together (;;;;;;) and MC_GLYPHLESS cursors are above or below -- having the same background color as the frame; e.g., black on black (used to erase a glyphless cursor). The partial flickering is only noticeable with rapid fire; e.g., holding down the right/left arrow key. When changing the color of the glyphless cursor, the issue is not present. [@lawlist has verified that the X and HPOS coordinates are accurate.] --Multipart_Wed_Mar__4_01:03:10_2020-1 Content-Type: application/diff; type=patch Content-Disposition: attachment; filename="2020_03_03__22_21_51_685.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvKy1tb2RlLmVsIGIvbGlzcC8rLW1vZGUuZWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiMGY3NAotLS0gL2Rldi9udWxsCisrKyBiL2xpc3Av Ky1tb2RlLmVsCkBAIC0wLDAgKzEsMTI5MiBAQAorOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7 OzsgRVhBTVBMRTogIFVsdHJhbGlnaHQgaW1wbGVtZW50YXRpb24gb2YgYSBob3Jpem9udGFsIHJ1 bGVyLgorOzs7Cis7OzsgKHNldHEgdHJ1bmNhdGUtbGluZXMgdAorOzs7ICAgICAgIGNyb3NzaGFp cnMgdAorOzs7ICAgICAgIGZjLXZpc2libGUgbmlsCis7OzsgICAgICAgY2gtaG9yaXpvbnRhbC1y dWxlciB0Cis7OzsgICAgICAgY2gtdmVydGljYWwtcnVsZXIgbmlsKQorCis7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7OzsKKzs7OyBCRUdJTiBtb2RpZmljYXRpb24gb2YgdGhlIE11bHRpcGxlIEN1cnNv cnMgbGlicmFyeSB3cml0dGVuIGJ5ICBNYWduYXIgU3ZlZW4uCisKKyhkZWZ2YXIgcGFja2FnZS1h cmNoaXZlcykKKworKGRlZnZhciBtYy0tbWF4LWN1cnNvcnMtb3JpZ2luYWwpCisoZGVmdmFyIG1j L21heC1jdXJzb3JzKQorKGRlZnZhciBtYy0tbWF4LWN1cnNvcnMtb3JpZ2luYWwpCisoZGVmdmFy IG1jL21heC1jdXJzb3JzKQorKGRlZnZhciBtYy9hbHdheXMtcnVuLWZvci1hbGwpCisoZGVmdmFy IG1jLS10aGlzLWNvbW1hbmQpCisoZGVmdmFyIG1jL2NtZHMtdG8tcnVuLW9uY2UpCisoZGVmdmFy IG1jLS1kZWZhdWx0LWNtZHMtdG8tcnVuLWZvci1hbGwpCisoZGVmdmFyIG1jL2NtZHMtdG8tcnVu LWZvci1hbGwpCisoZGVmdmFyIG1jLS1kZWZhdWx0LWNtZHMtdG8tcnVuLW9uY2UpCisoZGVmdmFy IG1jLS1leGVjdXRpbmctY29tbWFuZC1mb3ItZmFrZS1jdXJzb3IpCisKKyhkZWNsYXJlLWZ1bmN0 aW9uIG1jL21ha2UtY3Vyc29yLW92ZXJsYXktYXQtcG9pbnQgImV4dDptdWx0aXBsZS1jdXJzb3Jz LWNvcmUiKQorKGRlY2xhcmUtZnVuY3Rpb24gbXVsdGlwbGUtY3Vyc29ycy1tb2RlICJleHQ6bXVs dGlwbGUtY3Vyc29ycy1jb3JlIikKKyhkZWNsYXJlLWZ1bmN0aW9uIG1jL251bS1jdXJzb3JzICJl eHQ6bXVsdGlwbGUtY3Vyc29ycy1jb3JlIikKKyhkZWNsYXJlLWZ1bmN0aW9uIG1jL3JlbW92ZS1m YWtlLWN1cnNvcnMgImV4dDptdWx0aXBsZS1jdXJzb3JzLWNvcmUiKQorKGRlY2xhcmUtZnVuY3Rp b24gbWMvY3JlYXRlLWN1cnNvci1pZCAiZXh0Om11bHRpcGxlLWN1cnNvcnMtY29yZSIpCisoZGVj bGFyZS1mdW5jdGlvbiBtYy9zdG9yZS1jdXJyZW50LXN0YXRlLWluLW92ZXJsYXkgImV4dDptdWx0 aXBsZS1jdXJzb3JzLWNvcmUiKQorKGRlY2xhcmUtZnVuY3Rpb24gbWMvcG9wLXN0YXRlLWZyb20t b3ZlcmxheSAiZXh0Om11bHRpcGxlLWN1cnNvcnMtY29yZSIpCisoZGVjbGFyZS1mdW5jdGlvbiBt Yy9tYWtlLXJlZ2lvbi1vdmVybGF5LWJldHdlZW4tcG9pbnQtYW5kLW1hcmsgImV4dDptdWx0aXBs ZS1jdXJzb3JzLWNvcmUiKQorKGRlY2xhcmUtZnVuY3Rpb24gbWMvZXhlY3V0ZS1jb21tYW5kLWZv ci1hbGwtZmFrZS1jdXJzb3JzICJleHQ6bXVsdGlwbGUtY3Vyc29ycy1jb3JlIikKKyhkZWNsYXJl LWZ1bmN0aW9uIG1jL3Byb21wdC1mb3ItaW5jbHVzaW9uLWluLXdoaXRlbGlzdCAiZXh0Om11bHRp cGxlLWN1cnNvcnMtY29yZSIpCisoZGVjbGFyZS1mdW5jdGlvbiBtYy9hbGwtZmFrZS1jdXJzb3Jz ICJleHQ6bXVsdGlwbGUtY3Vyc29ycy1jb3JlIikKKyhkZWNsYXJlLWZ1bmN0aW9uIG1jL21hcmst bmV4dC1saWtlLXRoaXMgImV4dDptYy1tYXJrLW1vcmUiKQorKGRlY2xhcmUtZnVuY3Rpb24gbWMv bWFyay1wcmV2aW91cy1saWtlLXRoaXMgICJleHQ6bWMtbWFyay1tb3JlIikKKyhkZWNsYXJlLWZ1 bmN0aW9uIG1jL2FsbC1mYWtlLWN1cnNvcnMgImV4dDptdWx0aXBsZS1jdXJzb3JzLWNvcmUiKQor KGRlY2xhcmUtZnVuY3Rpb24gbWMtLXJlc2V0LXJlYWQtcHJvbXB0cyAiZXh0Om11bHRpcGxlLWN1 cnNvcnMtY29yZSIpCisKKyhkZWZtYWNybyBtYy9zYXZlLWV4Y3Vyc2lvbiAoJnJlc3QgZm9ybXMp CisgICJTYXZlcyBhbmQgcmVzdG9yZXMgYWxsIHRoZSBzdGF0ZSB0aGF0IG11bHRpcGxlLWN1cnNv cnMgY2FyZXMgYWJvdXQuIgorICAobGV0ICgoY3MgKG1ha2Utc3ltYm9sICJjdXJyZW50LXN0YXRl IikpKQorICAgIGAobGV0ICgoLGNzIChtYy9zdG9yZS1jdXJyZW50LXN0YXRlLWluLW92ZXJsYXkK KyAgICAgICAgICAgICAgICAgKG1ha2Utb3ZlcmxheSAocG9pbnQpIChwb2ludCkgbmlsIG5pbCB0 KSkpKQorICAgICAgIChvdmVybGF5LXB1dCAsY3MgJ3R5cGUgJ29yaWdpbmFsLWN1cnNvcikKKyAg ICAgICAoc2F2ZS1leGN1cnNpb24gLEBmb3JtcykKKyAgICAgICAobWMvcG9wLXN0YXRlLWZyb20t b3ZlcmxheSAsY3MpKSkpCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmdW4gbWMvYnVpbHQtaW4tY3Vy c29ycyAoKQorIkxvYWQgdGhlIG1vZGlmaWNhdGlvbnMgdGhhdCBlbmFibGUgdGhlIG11bHRpcGxl LWN1cnNvcnMgcGFja2FnZSAoTWFnbmFyIFN2ZWVuKQordG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhl IGJ1aWx0LWluIGZha2UgY3Vyc29ycy4iCisKKyAgKGRlZmluZS1rZXkgZ2xvYmFsLW1hcCBbUy1t b3VzZS0xXSAnbWMvYWRkLWN1cnNvci1vbi1jbGljaykKKyAgKGRlZmluZS1rZXkgZ2xvYmFsLW1h cCBbP1xNLWRdICdtYy9tYXJrLW5leHQtbGlrZS10aGlzLWN5Y2xlLWZvcndhcmQpCisgIChkZWZp bmUta2V5IGdsb2JhbC1tYXAgWz9cTS1EXSAnbWMvbWFyay1wcmV2aW91cy1saWtlLXRoaXMtY3lj bGUtZm9yd2FyZCkKKyAgKGRlZmluZS1rZXkgZ2xvYmFsLW1hcCBbP1xzLWRdICdtYy9tYXJrLW5l eHQtbGlrZS10aGlzLWN5Y2xlLWZvcndhcmQpCisgIChkZWZpbmUta2V5IGdsb2JhbC1tYXAgWz9c cy1EXSAnbWMvbWFyay1wcmV2aW91cy1saWtlLXRoaXMtY3ljbGUtZm9yd2FyZCkKKyAgKGRlZmlu ZS1rZXkgZ2xvYmFsLW1hcCAoa2JkICI8Qy1zLTI2ODYzMjA3MT4iKSAnbWMvbWFyay1hbGwtbGlr ZS10aGlzKQorICAoZGVmaW5lLWtleSBnbG9iYWwtbWFwIChrYmQgIkMtcy1nIikgJ21jL21hcmst YWxsLWxpa2UtdGhpcykKKyAgKGRlZmluZS1rZXkgZ2xvYmFsLW1hcCAoa2JkICJTLXMtZCIpICdt Yy9tYXJrLXByZXZpb3VzLWxpa2UtdGhpcy1jeWNsZS1mb3J3YXJkKQorICAoZGVmaW5lLWtleSBn bG9iYWwtbWFwIChrYmQgIkMtbCIpICdtYy9lZGl0LWVuZHMtb2YtbGluZXMpCisgIChkZWZpbmUt a2V5IGdsb2JhbC1tYXAgKGtiZCAiQy1TLWwiKSAnbWMvZWRpdC1iZWdpbm5pbmdzLW9mLWxpbmVz KQorCisgIChhZGQtaG9vayAnbXVsdGlwbGUtY3Vyc29ycy1tb2RlLWRpc2FibGVkLWhvb2sKKyAg ICAgICAgICAgIChsYW1iZGEgKCkgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ21jLWNvbmYpKSkKKwor ICAoZGVmdmFyIG1jL3VzZS1idWlsdC1pbi1jdXJzb3JzIHQKKyAgIldoZXRoZXIgdG8gdXNlIHRo ZSBidWlsdC1pbiBmYWtlIGN1cnNvcnMuIikKKworICAoZGVmdW4gbWMvY3JlYXRlLWZha2UtY3Vy c29yLWF0LXBvaW50ICgmb3B0aW9uYWwgaWQpCisgICAgIkFkZCBhIGZha2UgY3Vyc29yIGFuZCBw b3NzaWJseSBhIGZha2UgYWN0aXZlIHJlZ2lvbiBvdmVybGF5IGJhc2VkIG9uIHBvaW50IGFuZCBt YXJrLgorICBTYXZlcyB0aGUgY3VycmVudCBzdGF0ZSBpbiB0aGUgb3ZlcmxheSB0byBiZSByZXN0 b3JlZCBsYXRlci4iCisgICAgKHVubGVzcyBtYy0tbWF4LWN1cnNvcnMtb3JpZ2luYWwKKyAgICAg IChzZXRxIG1jLS1tYXgtY3Vyc29ycy1vcmlnaW5hbCBtYy9tYXgtY3Vyc29ycykpCisgICAgKHdo ZW4gbWMvbWF4LWN1cnNvcnMKKyAgICAgICh1bmxlc3MgKDwgKG1jL251bS1jdXJzb3JzKSBtYy9t YXgtY3Vyc29ycykKKyAgICAgICAgKGlmICh5ZXMtb3Itbm8tcCAoZm9ybWF0ICIlZCBhY3RpdmUg Y3Vyc29ycy4gQ29udGludWU/ICIgKG1jL251bS1jdXJzb3JzKSkpCisgICAgICAgICAgICAoc2V0 cSBtYy9tYXgtY3Vyc29ycyAocmVhZC1udW1iZXIgIkVudGVyIGEgbmV3LCB0ZW1wb3JhcnkgbWF4 aW11bTogIikpCisgICAgICAgICAgKG1jL3JlbW92ZS1mYWtlLWN1cnNvcnMpCisgICAgICAgICAg KGVycm9yICJBYm9ydGVkOiB0b28gbWFueSBjdXJzb3JzIikpKSkKKyAgICAobGV0ICgob3Zlcmxh eQorICAgICAgICAgICAgKGlmIG1jL3VzZS1idWlsdC1pbi1jdXJzb3JzCisgICAgICAgICAgICAg IChtYWtlLW92ZXJsYXkgKHBvaW50KSAocG9pbnQpKQorICAgICAgICAgICAgICAobWMvbWFrZS1j dXJzb3Itb3ZlcmxheS1hdC1wb2ludCkpKSkKKyAgICAgIChvdmVybGF5LXB1dCBvdmVybGF5ICdt Yy1pZCAob3IgaWQgKG1jL2NyZWF0ZS1jdXJzb3ItaWQpKSkKKyAgICAgIChvdmVybGF5LXB1dCBv dmVybGF5ICd0eXBlICdmYWtlLWN1cnNvcikKKyAgICAgIChvdmVybGF5LXB1dCBvdmVybGF5ICdw cmlvcml0eSAxMDApCisgICAgICAobWMvc3RvcmUtY3VycmVudC1zdGF0ZS1pbi1vdmVybGF5IG92 ZXJsYXkpCisgICAgICAod2hlbiAodXNlLXJlZ2lvbi1wKQorICAgICAgICAob3ZlcmxheS1wdXQg b3ZlcmxheSAncmVnaW9uLW92ZXJsYXkKKyAgICAgICAgICAgICAgICAgICAgIChtYy9tYWtlLXJl Z2lvbi1vdmVybGF5LWJldHdlZW4tcG9pbnQtYW5kLW1hcmspKSkKKyAgICAgIG92ZXJsYXkpKQor CisgIChkZWZ1biBtYy9leGVjdXRlLWNvbW1hbmQtZm9yLWFsbC1mYWtlLWN1cnNvcnMgKGNtZCkK KyAgICAiQ2FsbHMgQ01EIGludGVyYWN0aXZlbHkgZm9yIGVhY2ggY3Vyc29yLgorICBJdCB3b3Jr cyBieSBtb3ZpbmcgcG9pbnQgdG8gdGhlIGZha2UgY3Vyc29yLCBzZXR0aW5nCisgIHVwIHRoZSBw cm9wZXIgZW52aXJvbm1lbnQsIGFuZCB0aGVuIHJlbW92aW5nIHRoZSBjdXJzb3IuCisgIEFmdGVy IGV4ZWN1dGluZyB0aGUgY29tbWFuZCwgaXQgc2V0cyB1cCBhIG5ldyBmYWtlCisgIGN1cnNvciB3 aXRoIHVwZGF0ZWQgaW5mby4iCisgICAgKG1jL3NhdmUtZXhjdXJzaW9uCisgICAgICA7OzsgT21p dCBgbWMvc2F2ZS13aW5kb3ctc2Nyb2xsJyBiZWNhdXNlIGl0IGNhdXNlcyBub24tc2VsZWN0ZWQg d2luZG93cworICAgICAgOzs7IHRvIGJlIHJlZGlzcGxheWVkLCByZXN1bHRpbmcgaW4gdW5kdWUg c2xvd2Rvd24gb2YgY3Jvc3NoYWlycy4KKyAgICAgIChtYXBjIGAobGFtYmRhIChjdXJzb3IpCisg ICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICAgICAgICAgICAgKG1jL2V4ZWN1 dGUtY29tbWFuZC1mb3ItZmFrZS1jdXJzb3IgY21kIGN1cnNvcikpKQorICAgICAgICAgICAgKG1j L2FsbC1mYWtlLWN1cnNvcnMpKSkKKyAgICAobWMtLXJlc2V0LXJlYWQtcHJvbXB0cykpCisKKyAg KGRlZnVuIG1jL2V4ZWN1dGUtdGhpcy1jb21tYW5kLWZvci1hbGwtY3Vyc29ycy0xICgpCisgICAg IlVzZWQgd2l0aCBwb3N0LWNvbW1hbmQtaG9vayB0byBleGVjdXRlIHN1cHBvcnRlZCBjb21tYW5k cyBmb3IgYWxsIGN1cnNvcnMuCisgIC0gIEl0IHVzZXMgdHdvIGxpc3RzIG9mIGNvbW1hbmRzIHRv IGtub3cgd2hhdCB0byBkbzogdGhlIHJ1bi1vbmNlCisgIGxpc3QgYW5kIHRoZSBydW4tZm9yLWFs bCBsaXN0LiBJZiBhIGNvbW1hbmQgaXMgaW4gbmVpdGhlciBvZiB0aGVzZSBsaXN0cywKKyAgaXQg d2lsbCBwcm9tcHQgZm9yIHRoZSBwcm9wZXIgYWN0aW9uIGFuZCB0aGVuIHNhdmUgdGhhdCBwcmVm ZXJlbmNlLgorICAtICBTb21lIGNvbW1hbmRzIGFyZSBzbyB1bnN1cHBvcnRlZCB0aGF0IHRoZXkg YXJlIGV2ZW4gcHJldmVudGVkIGZvcgorICB0aGUgb3JpZ2luYWwgY3Vyc29yLCB0byBpbmZvcm0g YWJvdXQgdGhlIGxhY2sgb2Ygc3VwcG9ydC4iCisgICAgKHVubGVzcyBtYy0tZXhlY3V0aW5nLWNv bW1hbmQtZm9yLWZha2UtY3Vyc29yCisgICAgICAoaWYgKGVxIDEgKG1jL251bS1jdXJzb3JzKSkg Ozsgbm8gZmFrZSBjdXJzb3JzPyBkaXNhYmxlIG1jLW1vZGUKKyAgICAgICAgICAobXVsdGlwbGUt Y3Vyc29ycy1tb2RlIDApCisgICAgICAgICh3aGVuIHRoaXMtb3JpZ2luYWwtY29tbWFuZAorICAg ICAgICAgIChsZXQgKChvcmlnaW5hbC1jb21tYW5kIChvciBtYy0tdGhpcy1jb21tYW5kCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21tYW5kLXJlbWFwcGluZyB0aGlz LW9yaWdpbmFsLWNvbW1hbmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoaXMtb3JpZ2luYWwtY29tbWFuZCkpKQorICAgICAgICAgICAgOzsgc2tpcCBrZXlib2FyZCBt YWNyb3MsIHNpbmNlIHRoZXkgd2lsbCBnZW5lcmF0ZSBhY3R1YWwgY29tbWFuZHMgdGhhdCBhcmUK KyAgICAgICAgICAgIDs7IGFsc28gcnVuIGluIHRoZSBjb21tYW5kIGxvb3AgLSB3ZSdsbCBoYW5k bGUgdGhvc2UgbGF0ZXIgaW5zdGVhZC4KKyAgICAgICAgICAgICh3aGVuIChmdW5jdGlvbnAgb3Jp Z2luYWwtY29tbWFuZCkKKyAgICAgICAgICAgICAgOzsgaWYgaXQncyBhIGxhbWJkYSwgd2UgY2Fu J3Qga25vdyBpZiBpdCdzIHN1cHBvcnRlZCBvciBub3QKKyAgICAgICAgICAgICAgOzsgLSBzbyBn byBhaGVhZCBhbmQgYXNzdW1lIGl0J3Mgb2ssIGJlY2F1c2Ugd2UncmUganVzdCBvcHRpbWlzdGlj IGxpa2UgdGhhdAorICAgICAgICAgICAgICAoaWYgKG9yIChub3QgKHN5bWJvbHAgb3JpZ2luYWwt Y29tbWFuZCkpCisgICAgICAgICAgICAgICAgICAgICAgOzsgbGFtYmRhIHJlZ2lzdGVyZWQgYnkg c21hcnRyZXAKKyAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXByZWZpeC1wICIoIiAoc3lt Ym9sLW5hbWUgb3JpZ2luYWwtY29tbWFuZCkpKQorICAgICAgICAgICAgICAgICAgKG1jL2V4ZWN1 dGUtY29tbWFuZC1mb3ItYWxsLWZha2UtY3Vyc29ycyBvcmlnaW5hbC1jb21tYW5kKQorICAgICAg ICAgICAgICAgIDs7IHNtYXJ0cmVwIGBpbnRlcm4ncyBjb21tYW5kcyBpbnRvIG93biBvYmFycmF5 IHRvIGhlbHAKKyAgICAgICAgICAgICAgICA7OyBgZGVzY3JpYmUtYmluZGluZ3MnLiAgU28sIGxl dCdzIHJlLWBpbnRlcm4nIGhlcmUgdG8KKyAgICAgICAgICAgICAgICA7OyBtYWtlIHRoZSBjb21t YW5kIGNvbXBhcmFibGUgYnkgYGVxJy4KKyAgICAgICAgICAgICAgICAoc2V0cSBvcmlnaW5hbC1j b21tYW5kIChpbnRlcm4gKHN5bWJvbC1uYW1lIG9yaWdpbmFsLWNvbW1hbmQpKSkKKyAgICAgICAg ICAgICAgICA7OyBvdGhlcndpc2UgaXQncyBhIHN5bWJvbCwgYW5kIHdlIGNhbiBiZSBtb3JlIHRo b3JvdWdoCisgICAgICAgICAgICAgICAgKGlmIChnZXQgb3JpZ2luYWwtY29tbWFuZCAnbWMtLXVu c3VwcG9ydGVkKQorICAgICAgICAgICAgICAgICAgICAobWVzc2FnZSAiJVMgaXMgbm90IHN1cHBv cnRlZCB3aXRoIG11bHRpcGxlIGN1cnNvcnMlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb3JpZ2luYWwtY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0IG9y aWdpbmFsLWNvbW1hbmQgJ21jLS11bnN1cHBvcnRlZCkpCisgICAgICAgICAgICAgICAgICAod2hl biAoYW5kIG9yaWdpbmFsLWNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5v dCAobWVtcSBvcmlnaW5hbC1jb21tYW5kIG1jLS1kZWZhdWx0LWNtZHMtdG8tcnVuLW9uY2UpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm90IChtZW1xIG9yaWdpbmFsLWNvbW1hbmQg bWMvY21kcy10by1ydW4tb25jZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBt Yy9hbHdheXMtcnVuLWZvci1hbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICht ZW1xIG9yaWdpbmFsLWNvbW1hbmQgbWMtLWRlZmF1bHQtY21kcy10by1ydW4tZm9yLWFsbCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZW1xIG9yaWdpbmFsLWNvbW1hbmQgbWMv Y21kcy10by1ydW4tZm9yLWFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICht Yy9wcm9tcHQtZm9yLWluY2x1c2lvbi1pbi13aGl0ZWxpc3Qgb3JpZ2luYWwtY29tbWFuZCkpKQor ICAgICAgICAgICAgICAgICAgICAobWMvZXhlY3V0ZS1jb21tYW5kLWZvci1hbGwtZmFrZS1jdXJz b3JzIG9yaWdpbmFsLWNvbW1hbmQpKSkpCisgICAgICAgICAgICAgICh3aGVuIG1jL3VzZS1idWls dC1pbi1jdXJzb3JzCisgICAgICAgICAgICAgICAgKHNldHEgbWMtY29uZgorICAgICAgICAgICAg ICAgICAgICAgICAgKG1hcGNhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICh4 KSAobGlzdCAob3ZlcmxheS1zdGFydCB4KSAiYmFyIiBuaWwpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAobWMvYWxsLWZha2UtY3Vyc29ycykpKSkpKSkpKSkKKworICAoZGVmdW4gbWMvbWFy ay1uZXh0LWxpa2UtdGhpcy1jeWNsZS1mb3J3YXJkICgpCisgICJNYXJrcyBuZXh0IG9jY3VyZW5j ZSBvZiB3b3JkIGxpa2UgdGhpcyBhbmQgYWR2YW5jZXMgY3Vyc29yIHRvIHRoaXMgb2NjdXJyZW5j ZSIKKyAgKGludGVyYWN0aXZlKQorICAgIChtYy9tYXJrLW5leHQtbGlrZS10aGlzIDEpKQorCisg IChkZWZ1biBtYy9tYXJrLXByZXZpb3VzLWxpa2UtdGhpcy1jeWNsZS1mb3J3YXJkICgpCisgICJN YXJrcyBuZXh0IG9jY3VycmVuY2Ugb2Ygd29yZCBsaWtlIHRoaXMgYW5kIGFkdmFuY2VzIGN1cnNv ciB0byB0aGlzIG9jY3VycmVuY2UiCisgIChpbnRlcmFjdGl2ZSkKKyAgICAobWMvbWFyay1wcmV2 aW91cy1saWtlLXRoaXMgMSkpCisKKyAgKGFkZC10by1saXN0ICdtYy0tZGVmYXVsdC1jbWRzLXRv LXJ1bi1vbmNlICdtYy9tYXJrLW5leHQtbGlrZS10aGlzLWN5Y2xlLWZvcndhcmQpCisKKyAgKGFk ZC10by1saXN0ICdtYy0tZGVmYXVsdC1jbWRzLXRvLXJ1bi1vbmNlICdtYy9tYXJrLXByZXZpb3Vz LWxpa2UtdGhpcy1jeWNsZS1mb3J3YXJkKQorCisgIChtZXNzYWdlICJtYy9idWlsdC1pbi1jdXJz b3JzOiAgVGhlIG11bHRpcGxlLWN1cnNvcnMgbGlicmFyeSBpcyByZWFkeSB0byB1c2UuIikpCisK Kzs7OyMjI2F1dG9sb2FkCisoZGVmdW4gbWMtaW5zdGFsbCAoKQorIlRvIHVzZSBtdWx0aXBsZS1j dXJzb3JzIGFmdGVyIHJlc3RhcnRpbmcgRW1hY3MsIG1ha2Ugc3VyZSB0aGF0IHRoZSBmb2xsb3dp bmcgbGluZQorYXBwZWFycyBzb21ld2hlcmUgaW4gdGhlIC5lbWFjcy9pbml0LmVsOiAgKHBhY2th Z2UtaW5pdGlhbGl6ZSkiCisoaW50ZXJhY3RpdmUpCisgIChyZXF1aXJlICdwYWNrYWdlKQorICAo YWRkLXRvLWxpc3QgJ3BhY2thZ2UtYXJjaGl2ZXMgJygibWVscGEiIC4gImh0dHA6Ly9tZWxwYS5t aWxrYm94Lm5ldC9wYWNrYWdlcy8iKSB0KQorICAocGFja2FnZS1pbml0aWFsaXplKQorICAocGFj a2FnZS1yZWZyZXNoLWNvbnRlbnRzKQorICAoaWYgKGxvY2F0ZS1saWJyYXJ5ICJtdWx0aXBsZS1j dXJzb3JzLWNvcmUiKQorICAgICh1bmxlc3MgKGZlYXR1cmVwICdtdWx0aXBsZS1jdXJzb3JzLWNv cmUpCisgICAgICAocmVxdWlyZSAnbXVsdGlwbGUtY3Vyc29ycy1jb3JlKSkKKyAgICAocGFja2Fn ZS1pbnN0YWxsICdtdWx0aXBsZS1jdXJzb3JzKSkKKyAgKG1jL2J1aWx0LWluLWN1cnNvcnMpKQor Cis7OyAoZXZhbC1hZnRlci1sb2FkICJtdWx0aXBsZS1jdXJzb3JzLWNvcmUiCis7OyAgICcocHJv Z24KKzs7ICAgICAgKG1jL2J1aWx0LWluLWN1cnNvcnMpKSkKKworKGNvbmQKKyAgKChhbmQgKGxv Y2F0ZS1saWJyYXJ5ICJtdWx0aXBsZS1jdXJzb3JzLWNvcmUiKQorICAgICAgICAobm90IChmZWF0 dXJlcCAnbXVsdGlwbGUtY3Vyc29ycy1jb3JlKSkpCisgICAgKHJlcXVpcmUgJ211bHRpcGxlLWN1 cnNvcnMtY29yZSkKKyAgICAobWMvYnVpbHQtaW4tY3Vyc29ycykpCisgICgoZmVhdHVyZXAgJ211 bHRpcGxlLWN1cnNvcnMtY29yZSkKKyAgICAobWMvYnVpbHQtaW4tY3Vyc29ycykpKQorCis7Ozsg RU5EIG1vZGlmaWNhdGlvbiBvZiB0aGUgTXVsdGlwbGUgQ3Vyc29ycyBsaWJyYXJ5IHdyaXR0ZW4g YnkgIE1hZ25hciBTdmVlbi4KKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OzsgQnVpbHQt aW4gYnVmZmVyLWxvY2FsIHZhcmlhYmxlcyBkZWZpbmVkIGluIGBidWZmZXIuY2A6CisKKzs7OyAg YG1jLXJlYWwtZmFrZS1jdXJzb3InCis7OzsgIGBtYy1jb25mJworOzs7ICBgbWMtaW5hY3RpdmUt d2luZG93cycKKzs7OyAgYGNyb3NzaGFpcnMnCis7OzsgIGBjaC1ob3Jpem9udGFsLXJ1bGVyJwor Ozs7ICBgY2gtdmVydGljYWwtcnVsZXInCis7OzsgIGBjaC1pbmFjdGl2ZS13aW5kb3dzJworOzs7 ICBgbWMtc3RkZXJyJworOzs7ICBgZmMtdmlzaWJsZScKKzs7OyAgYGZjLWluYWN0aXZlLXdpbmRv dycKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OzsgRkFDRVMKKworKGRlZmdyb3VwICst bW9kZSBuaWwKKyAgIkZhY2VzIGZvciB0aGUgdmVydGljYWwgcnVsZXIuIgorICA6Z3JvdXAgJ2Nv bnZlbmllbmNlKQorCisoZGVmZmFjZSArLWZvcm0tZmVlZC1mYWNlCisgICcoKHQgKDpmb3JlZ3Jv dW5kICJtYWdlbnRhIikpKQorICAiRmFjZSBmb3IgYCstZm9ybS1mZWVkLWZhY2UnLiIKKyAgOmdy b3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstbmV3bGluZS1mYWNlCisgICcoKHQgKDpmb3JlZ3Jv dW5kICIjNTU1NTU1IikpKQorICAiRmFjZSBmb3IgYCstbmV3bGluZS1mYWNlJy4iCisgIDpncm91 cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXNwYWNlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQg IkRhcmtSZWQiKSkpCisgICJGYWNlIGZvciBgKy1zcGFjZS1mYWNlJy4iCisgIDpncm91cCAnKy1t b2RlKQorCisoZGVmZmFjZSArLXRhYi1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJjeWFuIikp KQorICAiRmFjZSBmb3IgYCstdGFiLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZm YWNlICstdGFiLXNwYWNlci1mYWNlCisgICcoKHQgKDpiYWNrZ3JvdW5kICJncmV5MjUiKSkpCisg ICJGYWNlIGZvciBgKy10YWItc3BhY2VyLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhk ZWZmYWNlICstbGVmdC1mcmluZ2UtY3VycmVudC1saW5lLWZhY2UKKyAgJygodCAoOmZvcmVncm91 bmQgImdyZWVuIikpKQorICAiRmFjZSBmb3IgYCstbGVmdC1mcmluZ2UtY3VycmVudC1saW5lLWZh Y2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstbGVmdC1mcmluZ2UtY3Vyc29y LWFsdC1vbmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiYmx1ZSIpKSkKKyAgIkZhY2UgZm9y IGArLWxlZnQtZnJpbmdlLWN1cnNvci1hbHQtb25lLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUp CisKKyhkZWZmYWNlICstbGVmdC1mcmluZ2UtY3Vyc29yLWFsdC10d28tZmFjZQorICAnKCh0ICg6 Zm9yZWdyb3VuZCAicmVkIikpKQorICAiRmFjZSBmb3IgYCstbGVmdC1mcmluZ2UtY3Vyc29yLWFs dC10d28tZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1ob2xsb3ctcmVj dGFuZ2xlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImNoYXJ0cmV1c2UiKSkpCisgICJGYWNl IGZvciBgKy1ob2xsb3ctcmVjdGFuZ2xlLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhk ZWZmYWNlICstYmFja3NsYXNoLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImdyZXkyNSIpKSkK KyAgIkZhY2UgZm9yIGArLWJhY2tzbGFzaC1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCiso ZGVmZmFjZSArLWZyaW5nZS1xdWVzdGlvbi1tYXJrLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQg ImdyZWVuIikpKQorICAiRmFjZSBmb3IgYCstZnJpbmdlLXF1ZXN0aW9uLW1hcmstZmFjZScuIgor ICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtZXhjbGFtYXRpb24tbWFyay1m YWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJjeWFuIikpKQorICAiRmFjZSBmb3IgYCstZnJpbmdl LWV4Y2xhbWF0aW9uLW1hcmstZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2Ug Ky1mcmluZ2UtbGVmdC1hcnJvdy1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJwdXJwbGUiKSkp CisgICJGYWNlIGZvciBgKy1mcmluZ2UtbGVmdC1hcnJvdy1mYWNlJy4iCisgIDpncm91cCAnKy1t b2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1yaWdodC1hcnJvdy1mYWNlCisgICcoKHQgKDpmb3Jl Z3JvdW5kICJGb3Jlc3RHcmVlbiIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1yaWdodC1hcnJv dy1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS11cC1hcnJv dy1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJSb3lhbEJsdWUiKSkpCisgICJGYWNlIGZvciBg Ky1mcmluZ2UtdXAtYXJyb3ctZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2Ug Ky1mcmluZ2UtZG93bi1hcnJvdy1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJjeWFuIikpKQor ICAiRmFjZSBmb3IgYCstZnJpbmdlLWRvd24tYXJyb3ctZmFjZScuIgorICA6Z3JvdXAgJystbW9k ZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdy1mYWNlCisgICcoKHQgKDpm b3JlZ3JvdW5kICJncmV5MjUiKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtbGVmdC1jdXJseS1h cnJvdy1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1yaWdo dC1jdXJseS1hcnJvdy1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICIjM2MzYzNjIikpKQorICAi RmFjZSBmb3IgYCstZnJpbmdlLXJpZ2h0LWN1cmx5LWFycm93LWZhY2UnLiIKKyAgOmdyb3VwICcr LW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWxlZnQtdHJpYW5nbGUtZmFjZQorICAnKCh0ICg6 Zm9yZWdyb3VuZCAicmVkIikpKQorICAiRmFjZSBmb3IgYCstZnJpbmdlLWxlZnQtdHJpYW5nbGUt ZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtcmlnaHQtdHJp YW5nbGUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAieWVsbG93IikpKQorICAiRmFjZSBmb3Ig YCstZnJpbmdlLXJpZ2h0LXRyaWFuZ2xlLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhk ZWZmYWNlICstZnJpbmdlLXRvcC1sZWZ0LWFuZ2xlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQg Im1hZ2VudGEiKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtdG9wLWxlZnQtYW5nbGUtZmFjZScu IgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtdG9wLXJpZ2h0LWFuZ2xl LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIm9yYW5nZSIpKSkKKyAgIkZhY2UgZm9yIGArLWZy aW5nZS10b3AtcmlnaHQtYW5nbGUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZh Y2UgKy1mcmluZ2UtYm90dG9tLWxlZnQtYW5nbGUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAi bWFnZW50YSIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1ib3R0b20tbGVmdC1hbmdsZS1mYWNl Jy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1ib3R0b20tcmlnaHQt YW5nbGUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIpKSkKKyAgIkZhY2UgZm9y IGArLWZyaW5nZS1ib3R0b20tcmlnaHQtYW5nbGUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkK KworKGRlZmZhY2UgKy1mcmluZ2UtbGVmdC1icmFja2V0LWZhY2UKKyAgJygodCAoOmZvcmVncm91 bmQgInllbGxvdyIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1sZWZ0LWJyYWNrZXQtZmFjZScu IgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtcmlnaHQtYnJhY2tldC1m YWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJncmVlbiIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5n ZS1yaWdodC1icmFja2V0LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICst ZnJpbmdlLWZpbGxlZC1yZWN0YW5nbGUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiY2hhcnRy ZXVzZSIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1maWxsZWQtcmVjdGFuZ2xlLWZhY2UnLiIK KyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWhvbGxvdy1zcXVhcmUtZmFj ZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiY2hhcnRyZXVzZSIpKSkKKyAgIkZhY2UgZm9yIGArLWZy aW5nZS1ob2xsb3ctc3F1YXJlLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNl ICstZnJpbmdlLWZpbGxlZC1zcXVhcmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiY2hhcnRy ZXVzZSIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1maWxsZWQtc3F1YXJlLWZhY2UnLiIKKyAg Omdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWhvcml6b250YWwtYmFyLWZhY2UK KyAgJygodCAoOmZvcmVncm91bmQgImNoYXJ0cmV1c2UiKSkpCisgICJGYWNlIGZvciBgKy1mcmlu Z2UtaG9yaXpvbnRhbC1iYXItZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2Ug Ky1mcmluZ2UtZW1wdHktbGluZS1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJEYXJrR3JlZW4i KSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtZW1wdHktbGluZS1mYWNlJy4iCisgIDpncm91cCAn Ky1tb2RlKQorCisoZGVmZmFjZSArLXBhcmVucy1vbmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3Vu ZCAibWFnZW50YSIpKSkKKyAgIkZhY2UgZm9yIGArLXBhcmVucy1vbmUtZmFjZScuIgorICA6Z3Jv dXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1wYXJlbnMtdHdvLWZhY2UKKyAgJygodCAoOmZvcmVn cm91bmQgInJlZCIpKSkKKyAgIkZhY2UgZm9yIGArLXBhcmVucy10d28tZmFjZScuIgorICA6Z3Jv dXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1wYXJlbnMtdGhyZWUtZmFjZQorICAnKCh0ICg6Zm9y ZWdyb3VuZCAieWVsbG93IikpKQorICAiRmFjZSBmb3IgYCstcGFyZW5zLXRocmVlLWZhY2UnLiIK KyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstcGFyZW5zLWZvdXItZmFjZQorICAnKCh0 ICg6Zm9yZWdyb3VuZCAiZ3JlZW4iKSkpCisgICJGYWNlIGZvciBgKy1wYXJlbnMtZm91ci1mYWNl Jy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBhcmVucy1maXZlLWZhY2UKKyAg JygodCAoOmZvcmVncm91bmQgImN5YW4iKSkpCisgICJGYWNlIGZvciBgKy1wYXJlbnMtZml2ZS1m YWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBhcmVucy1zaXgtZmFjZQor ICAnKCh0ICg6Zm9yZWdyb3VuZCAib3JhbmdlIikpKQorICAiRmFjZSBmb3IgYCstcGFyZW5zLXNp eC1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBhcmVucy1zZXZlbi1m YWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJwdXJwbGUiKSkpCisgICJGYWNlIGZvciBgKy1wYXJl bnMtc2V2ZW4tZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1wYXJlbnMt ZWlnaHQtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiYmx1ZSIpKSkKKyAgIkZhY2UgZm9yIGAr LXBhcmVucy1laWdodC1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBh cmVucy1uaW5lLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImJyb3duIikpKQorICAiRmFjZSBm b3IgYCstcGFyZW5zLW5pbmUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2Ug Ky1wYXJlbnMtdGVuLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIndoaXRlIikpKQorICAiRmFj ZSBmb3IgYCstcGFyZW5zLXRlbi1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCis7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzs7OyBWQVJJQUJMRVMKKworKGRlZnZhciArLW1vZGUpCisKKyhk ZWZ2YXIgKy1maWxsLWNvbHVtbiB0CisiV2hlbiBub24tbmlsLCBkaXNwbGF5IGEgdmlzaWJsZSBm aWxsIGNvbHVtbiBpbmRpY2F0b3IuICBJZiBgZmMtbW9kZScKK2lzIGFjdGl2YXRlIHdoZW4gYCst bW9kZScgaXMgdHVybmVkIG9uLCB0aGUgZm9ybWVyIHdpbGwgYmUgdHVybmVkIG9mZi4iKQorKG1h a2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICcrLWZpbGwtY29sdW1uKQorCisoZGVmdmFyICstYnVm ZmVyLWRpc3BsYXktdGFibGUKKyAgKGxldCogKChmZi1jaGFyID9cdTAwNDYpCisgICAgICAgICAo ZGlzcGxheS10YWJsZSAobWFrZS1kaXNwbGF5LXRhYmxlKSkKKyAgICAgICAgIChnbHlwaC1mb3Jt LWZlZWQgKG1ha2UtZ2x5cGgtY29kZSBmZi1jaGFyICcrLWZvcm0tZmVlZC1mYWNlKSkKKyAgICAg ICAgIChnbHlwaC1waWxjcm93IChtYWtlLWdseXBoLWNvZGUgP1x1MDBCNiAnKy1uZXdsaW5lLWZh Y2UpKQorICAgICAgICAgKGdseXBoLXNwYWNlIChtYWtlLWdseXBoLWNvZGUgP1x1MDBCNyAnKy1z cGFjZS1mYWNlKSkKKyAgICAgICAgIChnbHlwaC10YWIgKG1ha2UtZ2x5cGgtY29kZSA/XHUwMEJC ICcrLXRhYi1mYWNlKSkKKyAgICAgICAgIChnbHlwaC10YWItc3BhY2VyIChtYWtlLWdseXBoLWNv ZGUgP1x0ICcrLXRhYi1zcGFjZXItZmFjZSkpKQorICAgIChhc2V0IGRpc3BsYXktdGFibGUgP1xu IGBbLGdseXBoLXBpbGNyb3cgP1xuXSkKKyAgICAoYXNldCBkaXNwbGF5LXRhYmxlID9cZiBgWyxn bHlwaC1mb3JtLWZlZWQgLGdseXBoLWZvcm0tZmVlZF0pCisgICAgOzs7IG1pbmltdW0gdGFiLXdp ZHRoIGlzIGAyYAorICAgIDs7IChhc2V0IGRpc3BsYXktdGFibGUgP1x0IGBbLGdseXBoLXRhYiA/ XHRdKQorICAgIChhc2V0IGRpc3BsYXktdGFibGUgP1x0IGBbLGdseXBoLXRhYiAsZ2x5cGgtdGFi LXNwYWNlcl0pCisgICAgOzs7IHRhYi13aWR0aCBhbHdheXMgZXF1YWxzIGAxYAorICAgIDs7IChh c2V0IGRpc3BsYXktdGFibGUgP1x0IGBbLGdseXBoLXRhYl0pCisgICAgKGFzZXQgZGlzcGxheS10 YWJsZSA/XHMgYFssZ2x5cGgtc3BhY2VdKQorICAgIGRpc3BsYXktdGFibGUpCisgICJUaGUgYGJ1 ZmZlci1kaXNwbGF5LXRhYmxlJyB0aGF0IGlzIHVzZWQgd2hlbiBgKy1tb2RlJyBpcyBhY3RpdmUu IikKKworKGRlZnZhciArLWZvcnRod2l0aCBuaWwKKyAgIklmIG5vbi1uaWwsIHRoZW4gdGhlIGZ1 bmN0aW9ucyB3aWxsIHJ1biBvbiB0aGUgYHBvc3QtY29tbWFuZC1ob29rJzsKK290aGVyd2lzZSwg dGhlIGZ1bmN0aW9ucyB3aWxsIHJ1biBvbiB0aGUgaWRsZS10aW1lci4iKQorKG1ha2UtdmFyaWFi bGUtYnVmZmVyLWxvY2FsICcrLWZvcnRod2l0aCkKKworKGRlZnZhciArLXRpbWVyLXZhciBuaWwK KyJUaW1lciB1c2VkIHRvIGhpZ2hsaWdodCBjdXJyZW50IGNvbHVtbiB3aGVuZXZlciBFbWFjcyBp cyBpZGxlLiIpCisKKyhkZWZ2YXIgKy1pZGxlLXRpbWVyLXNlY29uZHMgMC41CisgICJUaGUgbnVt YmVyIG9mIHNlY29uZHMgdG8gZGVsYXkgYmVmb3JlIHRoZSBmdW5jdGlvbnMgYXR0YWNoZWQgdG8g dGhlIGlkbGUtdGltZXIKK2lmIGArLWZvcnRod2l0aCcgaXMgbm9uLW5pbC4iKQorKG1ha2UtdmFy aWFibGUtYnVmZmVyLWxvY2FsICcrLWlkbGUtdGltZXItc2Vjb25kcykKKworKGRlZnZhciArLXRy dW5jYXRlLWxpbmVzLW1ham9yLW1vZGVzICcoKQorICAiTGlzdCBvZiBtYWpvciBtb2RlcyB3ZXJl IHRydW5jYXRlIGxpbmVzIHNoYWxsIGJlIGVuYWJsZWQuIikKKworKGRlZnZhciArLXRydW5jYXRl LWxpbmVzLWRlcml2ZWQtbW9kZXMgJyhwcm9nLW1vZGUpCisgICJMaXN0IG9mIGRlcml2ZWQgbW9k ZXMgd2VyZSB0cnVuY2F0ZSBsaW5lcyBzaGFsbCBiZSBlbmFibGVkLiIpCisKKyhkZWZ2YXIgKy0t c2F2ZWQtc3RhdGUgbmlsCisgICJVc2VkIHRvIHN0b3JlL3Jlc3RvcmUgY2VydGFpbiBidWZmZXIt bG9jYWwgdmFyaWFibGVzIHdoZW4gZW5hYmxpbmcvZGlzYWJsaW5nKQorYCstbW9kZScuIikKKwor KGRlZnZhciArLXBhcmVucy1oaWdobGlnaHQgdAorICAiRHJhdy9lcmFzZSBtYXRjaGluZyBwYXJl bnRoZXNlcyB3aGVuIG5vbi1uaWwuIikKKyhtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnKy1w YXJlbnMtaGlnaGxpZ2h0KQorCisoZGVmdmFyICstcGFyZW5zLWluYWN0aXZlLXdpbmRvd3MgdAor ICAiV2hlbiBub24tbmlsLCBkaXNwbGF5IG1hdGNoaW5nIHBhcmVudGhlc2VzIGluIHRoZSBpbmFj dGl2ZSB3aW5kb3cuIikKKyhtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnKy1wYXJlbnMtaW5h Y3RpdmUtd2luZG93cykKKworKGRlZnZhciArLXBhcmVucy1leGNsdXNpb25zICcobXdoZWVsLXNj cm9sbCkKKyAgIkxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgd2lsbCBwcmV2ZW50IG1hdGNoaW5nIHBh cmVudGhlc2VzIGZyb20gdXBkYXRpbmcuIikKKworKGRlZnZhciArLXBhcmVucy1mcm9tLWZuIG5p bAorICAiQ3VzdG9tIGZ1bmN0aW9uIHRvIGRldGVybWluZSBob3cgZmFyIGJhY2sgdG93YXJkcyB0 aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlCitzaG91bGQgYCstcGFyZW5zLWZuJyBzZWFyY2ggZm9y IG1hdGNoaW5nIHBhcmVudGhlc2VzIC0tIHRoZSByZXN1bHQgdGhyb3duIGZyb20KK3RoaXMgY3Vz dG9tIGZ1bmN0aW9uIG11c3QgYmUgYSBidWZmZXIgcG9pbnQuICBJZiBubyBjdXN0b20gZnVuY3Rp b24gaXMgZGVmaW5lZCwKK3RoZW4gYCstcGFyZW5zLWZuJyB3aWxsIHVzZSBgcG9pbnQtbWluJy4i KQorCisoZGVmdmFyICstcGFyZW5zLW92ZXJsYXlzLWV4aXN0LXAgbmlsCisiU2ltcGxlIHRlc3Qg dG8gc2VlIHdoZXRoZXIgdGhlIHBhcmVucyBvdmVybGF5cyBoYXZlIGJlZW4gcGxhY2VkLgorVGhp cyBjb3VsZCBiZSBhIGRpZmZlcmVudCBraW5kIG9mIHRlc3QgLS0gZS5nLiwgc2Nhbm5pbmcgZm9y IHRoZQorcHJlc2VuY2Ugb2Ygc3BlY2lmaWMgb3ZlcmxheXMsIGJ1dCBwZXJoYXBzIHRoYXQgaXMg b3ZlcmtpbGwuIikKKyhtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnKy1wYXJlbnMtb3Zlcmxh eXMtZXhpc3QtcCkKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OzsgRlVOQ1RJT05TCisK KyhkZWZ2YXIgY29tcGlsYXRpb24tc2Nyb2xsLW91dHB1dCkKKworOzs7IyMjYXV0b2xvYWQKKyhk ZWZ1biBtYy1oZWxsby13b3JsZCAoKQorKGludGVyYWN0aXZlKQorICAoc2V0cSBjb21waWxhdGlv bi1zY3JvbGwtb3V0cHV0IHQpCisgIChjb21waWxlICJ3aGlsZSA6OyBkbyBlY2hvIFwiSGVsbG8t V29ybGRcIjsgc2xlZXAgMTsgZG9uZSIpKQorCis7OzsjIyNhdXRvbG9hZAorKGRlZnVuIG1jLXRl c3QgKCkKKyJEcmF3IGZha2UgY3Vyc29ycyBhdCBhbGwgUE9TIGRlZmluZWQgaW4gdGhlIGBtYy1j b25mJy4gIE11bHRpcGxlIGZha2UgY3Vyc29ycworYXJlIHN1cHBvcnRlZCBieSBHVUkgdmVyc2lv bnMgb2YgRW1hY3MgYnVpbHQgZm9yIFgsIFdpbmRvd3MgYW5kIE9TWC4KK1BvcHVsYXIgZm9ybXMg b2Ygc3BlY2lmeWluZyBjb2xvcnMgc3VjaCBhcyBcInJlZFwiIGFuZCBcIiNGRjAwMDBcIiBhcmUg bm93CitzdXBwb3J0ZWQsIGFzIHdlbGwgYXMgTFNMIGNvbG9yIHZlY3RvcnMgc3VjaCBhcyBbMS4w IDAuMCAwLjBdLiAgRm9yIHRob3NlIHVzZXJzCit3aG8gY2hvb3NlIHRoZSBmb3JtZXIgZmFtaWxp YXIgbWV0aG9kcyBvZiBzcGVjaWZ5aW5nIGNvbG9ycyB3aXRoIHN0cmluZ3MsCitgbWNfY29sb3Jf dmVjdG9yX2NhbGMnIHdpbGwgY29udmVydCB0aG9zZSBzdHJpbmdzIHRvIExTTCBjb2xvciB2ZWN0 b3JzLgorVGhlIGNvbG9yIHZlY3RvcnMgYXJlIGNvbW1vbmx5IHJlZmVycmVkIHRvIGFzIExTTCAo VGhlIExpbmRlbiBTY3JpcHRpbmcgTGFuZ3VhZ2UpLgorYG5zdGVybS5tJyB1c2VzIGBOU0NvbG9y Jywgd2hpY2ggd29ya3Mgd2VsbCB3aXRoIExTTC4gIGB3MzJ0ZXJtLmMnIHVzZXMKK2BQQUxFVFRF UkdCJyBvciBgUkdCJywgYW5kIHRoZSBjb252ZXJzaW9uIGZyb20gTFNMIGlzIGRvbmUgaW50ZXJu YWxseSBieQorbXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBMU0wgY29sb3IgdmVjdG9y IGJ5IDI1NS4gIGB4dGVybS5jJyB1c2VzCitgeF9tYWtlX3RydWVjb2xvcl9waXhlbCcsIHdoaWNo IHVzZXMgMTYtYml0IFJHQiAtLSB0aGUgY29udmVyc2lvbiBmcm9tIExTTAoraGFwcGVucyBpbnRl cm5hbGx5IGJ5IG11bHRpcGx5aW5nIGVhY2ggZWxlbWVudCBvZiB0aGUgTFNMIGNvbG9yIHZlY3Rv ciBieSA2NTUzNS4iCisoaW50ZXJhY3RpdmUpCisgIChsZXQgKChidWZmZXIgKGdldC1idWZmZXIt Y3JlYXRlICIqTUMtVEVTVCoiKSkpCisgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCisg ICAgICAoZXJhc2UtYnVmZmVyKQorICAgICAgKGluc2VydCAiVGhpcyBpcyBhIHRlc3QhIikKKyAg ICAgIChzZXRxIG1jLWNvbmYgJygoMSAiaGJhciIgIm1hZ2VudGEiKQorICAgICAgICAgICAgICAg ICAgICAgICgyICJiYXIiICJwdXJwbGUiKQorICAgICAgICAgICAgICAgICAgICAgICgzICJib3gi ICIjMDBGRjAwIikKKyAgICAgICAgICAgICAgICAgICAgICAoNCAiaG9sbG93IiAiIzAwMDBGRiIp CisgICAgICAgICAgICAgICAgICAgICAgKDUgKCJoYmFyIiAzKSBbMS4wIDAuMCAxLjBdKQorICAg ICAgICAgICAgICAgICAgICAgICg2ICgiYmFyIiAzKSBbMC4wIDEuMCAxLjBdKQorICAgICAgICAg ICAgICAgICAgICAgICg3ICJmcmFtZWQiICJPcmFuZ2VSZWQiKQorICAgICAgICAgICAgICAgICAg ICAgICg4ICJib3giICJncmV5MjUiKQorICAgICAgICAgICAgICAgICAgICAgICg5ICJib3giICJn cmV5NzUiKSkpKQorICAgIChzZWxlY3Qtd2luZG93IChkaXNwbGF5LWJ1ZmZlciBidWZmZXIpKSkp CisKKyhkZWZ1biArLXRpbWVyLWZuICgpCisiU2luY2UgdGhpcyBmaXJlcyBnbG9iYWxseSwgd2Ug bXVzdCBjb250cm9sIHdoaWNoIGJ1ZmZlcnMgY3Jvc3NoYWlycyBhcHBlYXIgaW4uIgorICAod2hl biArLW1vZGUKKyAgICAodW5sZXNzIChvciAobWVtcSBsYXN0LWNvbW1hbmQgKy1wYXJlbnMtZXhj bHVzaW9ucykKKyAgICAgICAgICAgICAgICAobnVsbCArLXBhcmVucy1oaWdobGlnaHQpKQorICAg ICAgKCstcGFyZW5zLWZuKSkKKyAgICAod2hlbiArLXRpbWVyLXZhcgorICAgICAgKHNldHEgdGlt ZXItaWRsZS1saXN0IChkZWxxICstdGltZXItdmFyIHRpbWVyLWlkbGUtbGlzdCkpCisgICAgICAo c2V0cSArLXRpbWVyLXZhciBuaWwpKSkpCisKKyhkZWZ1biArLWRyYXctZm9ydGh3aXRoICgpCisi SW1tZWRpYXRlbHkgZGVsZXRlL2RyYXcgbWF0Y2hpbmcgcGFyZW50aGVzZXMuIgorICAoKy1kcmF3 LWNyb3NzaGFpcnMgJ2ZvcmNlKSkKKworKGRlZnVuICstZHJhdy1jcm9zc2hhaXJzICgmb3B0aW9u YWwgZm9yY2UpCisiSW1tZWRpYXRlbHkgZGVsZXRlIG1hdGNoaW5nIHBhcmVudGhlc2VzLiAgSWYg Rk9SQ0UgaXMgbm9uLW5pbCwgdGhlbiBpbW1lZGlhdGVseQorZHJhdyBtYXRjaGluZyBwYXJlbnRo ZXNpczsgb3RoZXJ3aXNlLCBkcmF3IHRoZW0gb24gYW4gaWRsZS10aWVyLiIKKyAgKHdoZW4gKy1t b2RlCisgICAgKHdoZW4gKy10aW1lci12YXIKKyAgICAgIChzZXRxIHRpbWVyLWlkbGUtbGlzdCAo ZGVscSArLXRpbWVyLXZhciB0aW1lci1pZGxlLWxpc3QpKQorICAgICAgKHNldHEgKy10aW1lci12 YXIgbmlsKSkKKyAgICAodW5sZXNzIChvciAobWVtcSB0aGlzLWNvbW1hbmQgKy1wYXJlbnMtZXhj bHVzaW9ucykKKyAgICAgICAgICAgICAgICAoYW5kIChudWxsICstcGFyZW5zLWhpZ2hsaWdodCkK KyAgICAgICAgICAgICAgICAgICAgIChudWxsICstcGFyZW5zLW92ZXJsYXlzLWV4aXN0LXApKSkK KyAgICAgICgrLWRlbGV0ZS1wYXJlbnMtb3ZlcmxheXMpKQorICAgIChpZiBmb3JjZQorICAgICAg KHdoZW4gKy1wYXJlbnMtaGlnaGxpZ2h0CisgICAgICAgICgrLXBhcmVucy1mbikpCisgICAgICAo c2V0cSArLXRpbWVyLXZhciAocnVuLXdpdGgtaWRsZS10aW1lciArLWlkbGUtdGltZXItc2Vjb25k cyBuaWwgIycrLXRpbWVyLWZuKSkpKSkKKworKGRlZnZhciBmYy1tb2RlKQorCis7OzsjIyNhdXRv bG9hZAorKGRlZmluZS1taW5vci1tb2RlICstbW9kZQorIk1pbm9yIG1vZGUgZm9yIGRpc3BsYXlp bmcgYSBob3Jpem9udGFsIHJ1bGVyLiIKKyAgOmluaXQtdmFsdWUgbmlsCisgIDpsaWdodGVyICIg KyIKKyAgOmtleW1hcCBuaWwKKyAgOmdsb2JhbCBuaWwKKyAgOmdyb3VwICcrLW1vZGUKKyAgKGNv bmQKKyAgICAoKy1tb2RlCisgICAgICA7OzsgYCstbW9kZScgaGFzIHRoZSBhYmlsaXR5IHRvIGFs c28gZGlzcGxheSBhIGZpbGwgY29sdW1uIGluZGljYXRvci4KKyAgICAgIDs7OyBTZWUgdGhlIHZh cmlhYmxlIGArLWZpbGwtY29sdW1uJy4KKyAgICAgICh3aGVuIGZjLW1vZGUKKyAgICAgICAgKGZj LW1vZGUgLTEpKQorICAgICAgKHdoZW4gKGFuZCBnbG9iYWwtZWxkb2MtbW9kZQorICAgICAgICAg ICAgICAgICAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55KQorICAgICAgICAgICAgICAgICAo ZXF1YWwgY3VycmVudC1wcmVmaXgtYXJnICcoNCkpKQorICAgICAgICAoZ2xvYmFsLWVsZG9jLW1v ZGUgLTEpKQorICAgICAgKHdoZW4gKGFuZCBqaXQtbG9jay1jb250ZXh0LXRpbWVyCisgICAgICAg ICAgICAgICAgIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisgICAgICAgICAgICAgICAg IChlcXVhbCBjdXJyZW50LXByZWZpeC1hcmcgJyg0KSkpCisgICAgICAgICh3aGVuICh0aW1lcnAg aml0LWxvY2stY29udGV4dC10aW1lcikKKyAgICAgICAgICAoY2FuY2VsLXRpbWVyIGppdC1sb2Nr LWNvbnRleHQtdGltZXIpKQorICAgICAgICA7OyAoc2V0cSBqaXQtbG9jay1jb250ZXh0LXRpbWVy IChydW4td2l0aC1pZGxlLXRpbWVyIDUuMCAncmVwZWF0ICdqaXQtbG9jay1jb250ZXh0LWZvbnRp ZnkpKQorICAgICAgICAoc2V0cSBqaXQtbG9jay1jb250ZXh0LXRpbWVyIG5pbCkpCisgICAgICAo d2hlbiAoYW5kIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisgICAgICAgICAgICAgICAg IChlcXVhbCBjdXJyZW50LXByZWZpeC1hcmcgJyg0KSkpCisgICAgICAgICh3aGVuICh0aW1lcnAg dW5kby1hdXRvLWN1cnJlbnQtYm91bmRhcnktdGltZXIpCisgICAgICAgICAgKGNhbmNlbC10aW1l ciB1bmRvLWF1dG8tY3VycmVudC1ib3VuZGFyeS10aW1lcikpCisgICAgICAgIChmc2V0ICd1bmRv LWF1dG8tLXVuZG9hYmxlLWNoYW5nZQorICAgICAgICAgICAgICAobGFtYmRhICgpIChhZGQtdG8t bGlzdCAndW5kby1hdXRvLS11bmRvYWJseS1jaGFuZ2VkLWJ1ZmZlcnMgKGN1cnJlbnQtYnVmZmVy KSkpKQorICAgICAgICAoZnNldCAndW5kby1hdXRvLWFtYWxnYW1hdGUgJ2lnbm9yZSkpCisgICAg ICAod2hlbiBibGluay1jdXJzb3ItbW9kZQorICAgICAgICAoYmxpbmstY3Vyc29yLW1vZGUgLTEp CisgICAgICAgICh3aGVuIChtZW1xICdibGluay1jdXJzb3ItY2hlY2sgcG9zdC1jb21tYW5kLWhv b2spCisgICAgICAgICAgKHJlbW92ZS1ob29rICdwb3N0LWNvbW1hbmQtaG9vayAnYmxpbmstY3Vy c29yLWNoZWNrKSkpCisgICAgICAoc2V0cSBjcm9zc2hhaXJzIHQpCisgICAgICAod2hlbiArLWZp bGwtY29sdW1uCisgICAgICAgIChzZXRxIGZjLXZpc2libGUgdCkpCisgICAgICA7OzsgYGF1dG8t Y29tcG9zaXRpb24tbW9kZScgaXMgbmVlZGVkIGZvciBjcm9zc2hhaXJzIHRvIHByb3Blcmx5IGNh bGN1bGF0ZQorICAgICAgOzs7IGNvb3JkaW5hdGVzIG9mIGNvbXBvc2l0aW9uIGNoYXJhY3RlcnMu ICBBdXRvbWF0aWNhbGx5IGJlY29tZXMgcGVybWFuZW50bHkKKyAgICAgIDs7OyBidWZmZXItbG9j YWwgd2hlbiBzZXQuCisgICAgICAodW5sZXNzIGF1dG8tY29tcG9zaXRpb24tbW9kZQorICAgICAg ICAoc2V0cSBhdXRvLWNvbXBvc2l0aW9uLW1vZGUgdCkpCisgICAgICA7OzsgQGxhd2xpc3QgaXMg Zm9jdXNpbmcgdGhlIGluaXRpYWwgZGV2ZWxvcG1lbnQgb2YgZmVhdHVyZSByZXF1ZXN0cyAjMTc2 ODQKKyAgICAgIDs7OyBhbmQgIzIyODczIG9uIEwyUiBsYW5ndWFnZXMuICBUaGUgZmVhdHVyZSB0 ZXN0IGZpbGUgdXNlZCBieSBAbGF3bGlzdAorICAgICAgOzs7IGJvZ3MgRW1hY3MgZG93biB1bmxl c3MgYGJpZGktZGlzcGxheS1yZW9yZGVyaW5nJyBpcyBzZXQgdG8gYSBuaWwgdmFsdWUuCisgICAg ICA7OzsgSG93ZXZlciwgbW9zdCB1c2VycyB3aWxsIHByb2JhYmx5IG5vdCB3YW50IHRoaXMgcGFy dGljdWxhciBzZXR0aW5nLgorICAgICAgKHVubGVzcyAobnVsbCBiaWRpLWRpc3BsYXktcmVvcmRl cmluZykKKyAgICAgICAgKHNldHEgYmlkaS1kaXNwbGF5LXJlb3JkZXJpbmcgbmlsKSkKKyAgICAg IChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJystLXNhdmVkLXN0YXRlKSBuaWwpCisgICAgICAo ZG9saXN0ICh2YXIgJyhidWZmZXItZGlzcGxheS10YWJsZQorICAgICAgICAgICAgICAgICAgICAg ZnJpbmdlLWluZGljYXRvci1hbGlzdAorICAgICAgICAgICAgICAgICAgICAgdGFiLXdpZHRoCisg ICAgICAgICAgICAgICAgICAgICBsaW5lLW1vdmUtdmlzdWFsCisgICAgICAgICAgICAgICAgICAg ICB0cnVuY2F0ZS1saW5lcworICAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGUtcGFydGlhbC13 aWR0aC13aW5kb3dzCisgICAgICAgICAgICAgICAgICAgICB3b3JkLXdyYXApKQorICAgICAgICAo d2hlbiAobG9jYWwtdmFyaWFibGUtcCB2YXIpCisgICAgICAgICAgKHB1c2ggKGNvbnMgdmFyIChz eW1ib2wtdmFsdWUgdmFyKSkgKy0tc2F2ZWQtc3RhdGUpKSkKKyAgICAgIChzZXRxIGZpbGwtY29s dW1uIDgwKQorICAgICAgKHNldHEgZGlzcGxheS1saW5lLW51bWJlcnMgdCkKKyAgICAgIChzZXRx LWxvY2FsIGF1dG8taHNjcm9sbC1tb2RlICdjdXJyZW50LWxpbmUpCisgICAgICAoc2V0cS1sb2Nh bCBoc2Nyb2xsLXN0ZXAgNSkKKyAgICAgIChzZXRxIGJ1ZmZlci1kaXNwbGF5LXRhYmxlICstYnVm ZmVyLWRpc3BsYXktdGFibGUpCisgICAgICAoc2V0cSB0YWItd2lkdGggNCkKKyAgICAgIChzZXQg KG1ha2UtbG9jYWwtdmFyaWFibGUgJ2xpbmUtbW92ZS12aXN1YWwpIHQpCisgICAgICAoc2V0cSB0 cnVuY2F0ZS1saW5lcworICAgICAgICAoY29uZAorICAgICAgICAgICgobGV0ICgobHN0ICstdHJ1 bmNhdGUtbGluZXMtZGVyaXZlZC1tb2RlcykKKyAgICAgICAgICAgICAgICAgIG1vZGUpCisgICAg ICAgICAgICAoY2F0Y2ggJ2ZvdW5kCisgICAgICAgICAgICAgICh3aGlsZSAoc2V0cSBtb2RlIChw b3AgbHN0KSkKKyAgICAgICAgICAgICAgICAod2hlbiAoZGVyaXZlZC1tb2RlLXAgbW9kZSkKKyAg ICAgICAgICAgICAgICAgICh0aHJvdyAnZm91bmQgdCkpKSkpKQorICAgICAgICAgICAoKG1lbXEg bWFqb3ItbW9kZSArLXRydW5jYXRlLWxpbmVzLW1ham9yLW1vZGVzKSkKKyAgICAgICAgICAgKHQK KyAgICAgICAgICAgICBuaWwpKSkKKyAgICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ3Ry dW5jYXRlLXBhcnRpYWwtd2lkdGgtd2luZG93cykgbmlsKQorICAgICAgKHNldHEgd29yZC13cmFw IHQpCisgICAgICAoc2V0cSBpbmRpY2F0ZS1lbXB0eS1saW5lcyB0KQorICAgICAgKHNldHEgaW5k aWNhdGUtYnVmZmVyLWJvdW5kYXJpZXMgJ2xlZnQpCisgICAgICAoc2V0cSBmcmluZ2UtaW5kaWNh dG9yLWFsaXN0CisgICAgICAgICAgOzs7IGhzY2xfYWxsX3RlbXBfcCB8IGhzY2xfdGVtcF9wCisg ICAgICAgICcoKCstaHNjbC10ZW1wIC4gKCstc2luZ2xlLWFuZ2xlLWxlZnQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgKy1kb3VibGUtYW5nbGUtbGVmdCkpCisgICAgICAgICAgOzs7IGhzY2xf YWxsX3Blcm1fMF9wIHwgaHNjbF9hbGxfcGVybV8xX3AgfCBoc2NsX2FsbF9wZXJtXzJfcCB8IGhz Y2xfcGVybV9wCisgICAgICAgICAgKCstaHNjbC1wZXJtIC4gKCstc2luZ2xlLWFuZ2xlLXVwCisg ICAgICAgICAgICAgICAgICAgICAgICAgICstZG91YmxlLWFuZ2xlLXVwCisgICAgICAgICAgICAg ICAgICAgICAgICAgICstdHJpcGxlLWFuZ2xlLXVwCisgICAgICAgICAgICAgICAgICAgICAgICAg ICstcXVhZHJ1cGxlLWFuZ2xlLXVwKSkKKyAgICAgICAgICAoKy1vdmVybGF5LWFycm93IC4gKCst ZnJpbmdlLWxlZnQtYXJyb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstZnJpbmdl LXJpZ2h0LWFycm93KSkKKyAgICAgICAgICAodHJ1bmNhdGlvbiAuICgrLWZyaW5nZS1sZWZ0LWFy cm93CisgICAgICAgICAgICAgICAgICAgICAgICAgKy1mcmluZ2UtcmlnaHQtYXJyb3cpKQorICAg ICAgICAgIChjb250aW51YXRpb24gLiAoKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdworICAgICAg ICAgICAgICAgICAgICAgICAgICAgKy1iYWNrc2xhc2gpKQorICAgICAgICAgIChvdmVybGF5LWFy cm93IC4gKy1mcmluZ2UtcmlnaHQtdHJpYW5nbGUpCisgICAgICAgICAgKHVwIC4gKy1mcmluZ2Ut dXAtYXJyb3cpCisgICAgICAgICAgKGRvd24gLiArLWZyaW5nZS1kb3duLWFycm93KQorICAgICAg ICAgICh0b3AgLiArLWZyaW5nZS10b3AtbGVmdC1hbmdsZSkKKyAgICAgICAgICAoYm90dG9tIC4g Ky1mcmluZ2UtYm90dG9tLXJpZ2h0LWFuZ2xlKQorICAgICAgICAgICh0b3AtYm90dG9tIC4gKCst ZnJpbmdlLWxlZnQtYnJhY2tldAorICAgICAgICAgICAgICAgICAgICAgICAgICstZnJpbmdlLXJp Z2h0LWJyYWNrZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICArLWZyaW5nZS10b3AtcmlnaHQt YW5nbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICArLWZyaW5nZS10b3AtbGVmdC1hbmdsZSkp CisgICAgICAgICAgKGVtcHR5LWxpbmUgLiArLWZyaW5nZS1lbXB0eS1saW5lKQorICAgICAgICAg ICh1bmtub3duIC4gKy1mcmluZ2UtcXVlc3Rpb24tbWFyaykpKQorICAgICAgKHNldHEgZnJpbmdl LWN1cnNvci1hbGlzdCAnKChib3ggLiArLWZyaW5nZS1sZWZ0LXRyaWFuZ2xlKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChob2xsb3cgLiArLWhvbGxvdy1yZWN0YW5nbGUpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJhciAuICstdmVydGljYWwtYmFyKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYmFyIC4gKy1mcmluZ2UtaG9yaXpv bnRhbC1iYXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhvbGxvdy1zbWFs bCAuICstZnJpbmdlLWhvbGxvdy1zcXVhcmUpKSkKKyAgICAgIChpZiAob3IgKy1mb3J0aHdpdGgK KyAgICAgICAgICAgICAgKGVxdWFsIGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKSkKKyAgICAgICAg KGFkZC1ob29rICdwb3N0LWNvbW1hbmQtaG9vayAnKy1kcmF3LWZvcnRod2l0aCAnYXBwZW5kICds b2NhbCkKKyAgICAgICAgKGFkZC1ob29rICdwb3N0LWNvbW1hbmQtaG9vayAnKy1kcmF3LWNyb3Nz aGFpcnMgJ2FwcGVuZCAnbG9jYWwpKQorICAgICAgKHdoZW4gKy1mb3J0aHdpdGgKKyAgICAgICAg KGFkZC1ob29rICd3aW5kb3ctY29uZmlndXJhdGlvbi1jaGFuZ2UtaG9vayAnKy1kcmF3LWZvcnRo d2l0aCBuaWwgJ2xvY2FsKSkKKyAgICAgIChhZGQtaG9vayAnY2hhbmdlLW1ham9yLW1vZGUtaG9v ayAndHVybi1vZmYtKy1tb2RlIG5pbCAnbG9jYWwpCisgICAgICA7OzsgTWF0Y2hpbmcgcGFyZW50 aGVzZXMgZHJhd2luZyBmb3J0aHdpdGggaW50ZXJmZXJlcyB3aXRoIHlhc25pcHBldC4KKyAgICAg ICh3aGVuICstZm9ydGh3aXRoCisgICAgICAgIChzZXRxICstcGFyZW5zLWhpZ2hsaWdodCBuaWwp KQorICAgICAgKHdoZW4gKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKKyAgICAgICAgKGNv bmQKKyAgICAgICAgICAoKy1mb3J0aHdpdGgKKyAgICAgICAgICAgIChtZXNzYWdlICJUdXJuZWQg T04gYCstbW9kZScgLS0gRHJhdyBtYXRjaGluZyBwYXJlbnRoZXNlcyBpbW1lZGlhdGVseS4iKSkK KyAgICAgICAgICAoKGVxdWFsIGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKQorICAgICAgICAgICAg Ozs7IE1hdGNoaW5nIHBhcmVudGhlc2VzIHdpbGwgYmUgZHJhd24gaW1tZWRpYXRlbHkuCisgICAg ICAgICAgICAobWVzc2FnZSAiVHVybmVkIE9OIGArLW1vZGUnIC0tIE9wdGltaXplZCBmb3IgZGVi dWdnaW5nIHB1cnBvc2VzLiIpKQorICAgICAgICAgICh0CisgICAgICAgICAgICAobWVzc2FnZSAi VHVybmVkIE9OIGArLW1vZGUnLiIpKSkpKQorICAgICh0CisgICAgICAoa2lsbC1sb2NhbC12YXJp YWJsZSAnZmlsbC1jb2x1bW4pCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnYXV0by1oc2Ny b2xsLW1vZGUpCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnaHNjcm9sbC1zdGVwKQorICAg ICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2Nyb3NzaGFpcnMpCisgICAgICAoa2lsbC1sb2NhbC12 YXJpYWJsZSAnZmMtdmlzaWJsZSkKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdkaXNwbGF5 LWxpbmUtbnVtYmVycykKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdkaXNwbGF5LWxpbmUt bnVtYmVycy13aWR0aCkKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdtYy1jb25mKQorICAg ICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2J1ZmZlci1kaXNwbGF5LXRhYmxlKQorICAgICAgKGtp bGwtbG9jYWwtdmFyaWFibGUgJ3RhYi13aWR0aCkKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxl ICdsaW5lLW1vdmUtdmlzdWFsKQorICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ3RydW5jYXRl LWxpbmVzKQorICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ3RydW5jYXRlLXBhcnRpYWwtd2lk dGgtd2luZG93cykKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICd3b3JkLXdyYXApCisgICAg ICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnaW5kaWNhdGUtZW1wdHktbGluZXMpCisgICAgICAoa2ls bC1sb2NhbC12YXJpYWJsZSAnaW5kaWNhdGUtYnVmZmVyLWJvdW5kYXJpZXMpCisgICAgICAoa2ls bC1sb2NhbC12YXJpYWJsZSAnZnJpbmdlLWluZGljYXRvci1hbGlzdCkKKyAgICAgIChraWxsLWxv Y2FsLXZhcmlhYmxlICdmcmluZ2UtY3Vyc29yLWFsaXN0KQorICAgICAgKGtpbGwtbG9jYWwtdmFy aWFibGUgJystZm9ydGh3aXRoKQorICAgICAgKGRvbGlzdCAoc2F2ZWQgKy0tc2F2ZWQtc3RhdGUp CisgICAgICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgKGNhciBzYXZlZCkpIChjZHIgc2F2 ZWQpKSkKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICcrLS1zYXZlZC1zdGF0ZSkKKyAgICAg ICgrLWRlbGV0ZS1wYXJlbnMtb3ZlcmxheXMpCisgICAgICAod2hlbiAobWVtcSAnKy1kcmF3LWZv cnRod2l0aCBwb3N0LWNvbW1hbmQtaG9vaykKKyAgICAgICAgKHJlbW92ZS1ob29rICdwb3N0LWNv bW1hbmQtaG9vayAnKy1kcmF3LWZvcnRod2l0aCAnbG9jYWwpKQorICAgICAgKHdoZW4gKG1lbXEg JystZHJhdy1jcm9zc2hhaXJzIHBvc3QtY29tbWFuZC1ob29rKQorICAgICAgICAocmVtb3ZlLWhv b2sgJ3Bvc3QtY29tbWFuZC1ob29rICcrLWRyYXctY3Jvc3NoYWlycyAnbG9jYWwpKQorICAgICAg KHdoZW4gKG1lbXEgJystZHJhdy1mb3J0aHdpdGggd2luZG93LWNvbmZpZ3VyYXRpb24tY2hhbmdl LWhvb2spCisgICAgICAgIChyZW1vdmUtaG9vayAnd2luZG93LWNvbmZpZ3VyYXRpb24tY2hhbmdl LWhvb2sgJystZHJhdy1mb3J0aHdpdGggJ2xvY2FsKSkKKyAgICAgIChyZW1vdmUtaG9vayAnY2hh bmdlLW1ham9yLW1vZGUtaG9vayAndHVybi1vZmYtKy1tb2RlICdsb2NhbCkKKyAgICAgICh3aGVu ICstdGltZXItdmFyCisgICAgICAgIChzZXRxIHRpbWVyLWlkbGUtbGlzdCAoZGVscSArLXRpbWVy LXZhciB0aW1lci1pZGxlLWxpc3QpKQorICAgICAgICAoc2V0cSArLXRpbWVyLXZhciBuaWwpKQor ICAgICAgKHdoZW4gKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKKyAgICAgICAgKG1lc3Nh Z2UgIlR1cm5lZCBPRkYgYCstbW9kZScuIikpKSkpCisKKyhkZWZ1biB0dXJuLW9mZi0rLW1vZGUg KCkKKyAgKCstbW9kZSAtMSkpCisKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworCisoZGVmdW4g Ky1wYXJlbnMtZm4gKCkKKyAgIkRvYy1zdHJpbmcuIgorICAobGV0KiAoKG9wb2ludCAocG9pbnQp KQorICAgICAgICAgKGZyb20gKGlmICstcGFyZW5zLWZyb20tZm4KKyAgICAgICAgICAgICAgICAg KGZ1bmNhbGwgKy1wYXJlbnMtZnJvbS1mbikKKyAgICAgICAgICAgICAgICAgKHBvaW50LW1pbikp KQorICAgICAgICAgKHdpbiAoc2VsZWN0ZWQtd2luZG93KSkKKyAgICAgICAgIChpIDApCisgICAg ICAgICAocHJlY2VkaW5nLWNoYXIgKHByZWNlZGluZy1jaGFyKSkKKyAgICAgICAgIChvY2hhciAo Y2hhci1hZnRlciBvcG9pbnQpKQorICAgICAgICAgKHBvczEKKyAgICAgICAgICAgKGNvbmQKKyAg ICAgICAgICAgICAoKGFuZCBvY2hhcgorICAgICAgICAgICAgICAgICAgIChvciA7OzsgKGNoYXIt dG8tc3RyaW5nIDQwKSA9PiBvcGVuaW5nIHBhcmVudGhlc2lzCisgICAgICAgICAgICAgICAgICAg ICAgICg9IG9jaGFyIDQwKQorICAgICAgICAgICAgICAgICAgICAgICA7OzsgKGNoYXItdG8tc3Ry aW5nIDkxKSA9PiBvcGVuaW5nIHNxdWFyZSBicmFja2V0CisgICAgICAgICAgICAgICAgICAgICAg ICg9IG9jaGFyIDkxKQorICAgICAgICAgICAgICAgICAgICAgICA7OzsgKGNoYXItdG8tc3RyaW5n IDEyMykgPT4gb3BlbmluZyB3YXZ5IGJyYWNrZXQKKyAgICAgICAgICAgICAgICAgICAgICAgKD0g b2NoYXIgMTIzKSkpCisgICAgICAgICAgICAgICAgKG1pbiAoMSsgb3BvaW50KSAocG9pbnQtbWF4 KSkpCisgICAgICAgICAgICAgKChvciA7OzsgKGNoYXItdG8tc3RyaW5nIDQxKSA9PiBjbG9zaW5n IHBhcmVudGhlc2lzCisgICAgICAgICAgICAgICAgICAoPSBwcmVjZWRpbmctY2hhciA0MSkKKyAg ICAgICAgICAgICAgICAgIDs7OyAoY2hhci10by1zdHJpbmcgOTMpID0+IGNsb3Npbmcgc3F1YXJl IGJyYWNrZXQKKyAgICAgICAgICAgICAgICAgICg9IHByZWNlZGluZy1jaGFyIDkzKQorICAgICAg ICAgICAgICAgICAgOzs7IChjaGFyLXRvLXN0cmluZyAxMjUpID0+IGNsb3Npbmcgd2F2eSBicmFj a2V0CisgICAgICAgICAgICAgICAgICAoPSBwcmVjZWRpbmctY2hhciAxMjUpKQorICAgICAgICAg ICAgICAgIChtYXggKHBvaW50LW1pbikgKDEtIG9wb2ludCkpKQorICAgICAgICAgICAgICh0Cisg ICAgICAgICAgICAgICAgb3BvaW50KSkpCisgICAgICAgICBwb3MyCisgICAgICAgICBzZWxlY3Rl ZC1mYWNlKQorICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbAor ICAgICAgICAod2hpbGUgKHNldHEgcG9zMSAobnRoIDEgKHBhcnNlLXBhcnRpYWwtc2V4cCBmcm9t IHBvczEpKSkKKyAgICAgICAgICAoc2V0cSBwb3MyIChzY2FuLXNleHBzIHBvczEgMSkpCisgICAg ICAgICAgKGlmICg9IGkgMTApCisgICAgICAgICAgICAoc2V0cSBpIDEpCisgICAgICAgICAgICAo c2V0cSBpICgxKyBpKSkpCisgICAgICAgICAgKHNldHEgc2VsZWN0ZWQtZmFjZSAoY29uZAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKD0gaSAxKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICcrLXBhcmVucy1vbmUtZmFjZSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKCg9IGkgMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn Ky1wYXJlbnMtdHdvLWZhY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBp IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLXRocmVlLWZh Y2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDQpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLWZvdXItZmFjZSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCg9IGkgNSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnKy1wYXJlbnMtZml2ZS1mYWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKD0gaSA2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrLXBhcmVu cy1zaXgtZmFjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCg9IGkgNykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKy1wYXJlbnMtc2V2ZW4tZmFjZSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCg9IGkgOCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnKy1wYXJlbnMtZWlnaHQtZmFjZSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKCg9IGkgOSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnKy1wYXJlbnMtbmluZS1mYWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KD0gaSAxMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKy1wYXJlbnMtdGVu LWZhY2UpKSkKKyAgICAgICAgICAobGV0ICgob3YgKG1ha2Utb3ZlcmxheSBwb3MxICgxKyBwb3Mx KSkpKQorICAgICAgICAgICAgKHVubGVzcyArLXBhcmVucy1pbmFjdGl2ZS13aW5kb3dzCisgICAg ICAgICAgICAgIChvdmVybGF5LXB1dCBvdiAnd2luZG93IHdpbikpCisgICAgICAgICAgICAob3Zl cmxheS1wdXQgb3YgJ2ZhY2Ugc2VsZWN0ZWQtZmFjZSkpCisgICAgICAgICAgKHdoZW4gcG9zMgor ICAgICAgICAgICAgKGxldCAoKG92IChtYWtlLW92ZXJsYXkgKDEtIHBvczIpIHBvczIpKSkKKyAg ICAgICAgICAgICAgKHVubGVzcyArLXBhcmVucy1pbmFjdGl2ZS13aW5kb3dzCisgICAgICAgICAg ICAgICAgKG92ZXJsYXktcHV0IG92ICd3aW5kb3cgd2luKSkKKyAgICAgICAgICAgICAgKG92ZXJs YXktcHV0IG92ICdmYWNlIHNlbGVjdGVkLWZhY2UpKSkpCisgICAgICAgIChlcnJvciBuaWwpKSkK KyAgICAoc2V0cSArLXBhcmVucy1vdmVybGF5cy1leGlzdC1wIHQpKSkKKworKGRlZnVuICstcmVt b3ZlLW92ZXJsYXlzIChiZWcgZW5kIG5hbWUgdmFsKQorIlJlbW92ZSB0aGUgb3ZlcmxheXMgdGhh dCBhcmUgYGVxdWFsLWluY2x1ZGluZy1wcm9wZXJ0aWVzYC4KK0luY2x1ZGVzIGEgdW5pcXVlIHNp dHVhdGlvbiB3aGVuIGFuIG92ZXJsYXkgd2l0aCBhbiBgJ2FmdGVyLXN0cmluZ2AgcHJvcGVydHkK K2lzIGF0IHRoZSB2ZXJ5IGVuZCBvZiBhIG5hcnJvd2VkLWJ1ZmZlci4iCisgIChsZXQqICgocG9p bnQtbWF4IChwb2ludC1tYXgpKQorICAgICAgICAgKHBvaW50LW1pbiAocG9pbnQtbWluKSkKKyAg ICAgICAgIChuYXJyb3dlZC1wIChidWZmZXItbmFycm93ZWQtcCkpCisgICAgICAgICAoYmVnIChp ZiBiZWcgYmVnIHBvaW50LW1pbikpCisgICAgICAgICAoZW5kCisgICAgICAgICAgIChjb25kCisg ICAgICAgICAgICAgKChhbmQKKyAgICAgICAgICAgICAgICAgKG5vdCBuYXJyb3dlZC1wKQorICAg ICAgICAgICAgICAgICBlbmQpCisgICAgICAgICAgICAgICBlbmQpCisgICAgICAgICAgICAgKChh bmQKKyAgICAgICAgICAgICAgICAgKG5vdCBuYXJyb3dlZC1wKQorICAgICAgICAgICAgICAgICAo bnVsbCBlbmQpKQorICAgICAgICAgICAgICAgcG9pbnQtbWF4KQorICAgICAgICAgICAgICgoYW5k CisgICAgICAgICAgICAgICAgIG5hcnJvd2VkLXAKKyAgICAgICAgICAgICAgICAgZW5kCisgICAg ICAgICAgICAgICAgICg8IGVuZCBwb2ludC1tYXgpKQorICAgICAgICAgICAgICAgZW5kKQorICAg ICAgICAgICAgICgoYW5kCisgICAgICAgICAgICAgICAgIG5hcnJvd2VkLXAKKyAgICAgICAgICAg ICAgICAgZW5kCisgICAgICAgICAgICAgICAgICg9IGVuZCBwb2ludC1tYXgpKQorICAgICAgICAg ICAgICAgKDErIGVuZCkpCisgICAgICAgICAgICAgKChhbmQKKyAgICAgICAgICAgICAgICAgbmFy cm93ZWQtcAorICAgICAgICAgICAgICAgICAobnVsbCBlbmQpKQorICAgICAgICAgICAgICAgKDEr IHBvaW50LW1heCkpICkpCisgICAgICAgICAob3ZlcmxheXMKKyAgICAgICAgICAgKHByb2duCisg ICAgICAgICAgICAgKG92ZXJsYXktcmVjZW50ZXIgZW5kKQorICAgICAgICAgICAgIChvdmVybGF5 cy1pbiBiZWcgZW5kKSkpKQorICAgICh3aGVuIChhbmQgYmVnIGVuZCBuYW1lIHZhbCkKKyAgICAg IChkb2xpc3QgKG8gb3ZlcmxheXMpCisgICAgICAgIChjb25kCisgICAgICAgICAgKChhbmQgKGVx IG5hbWUgJ2ZhY2UpCisgICAgICAgICAgICAgICAgKGVxIChvdmVybGF5LWdldCBvIG5hbWUpIHZh bCkpCisgICAgICAgICAgICA7OyBFaXRoZXIgcHVzaCB0aGlzIG92ZXJsYXkgb3V0c2lkZSBiZWcu Li5lbmQKKyAgICAgICAgICAgIDs7IG9yIHNwbGl0IGl0IHRvIGV4Y2x1ZGUgYmVnLi4uZW5kCisg ICAgICAgICAgICA7OyBvciBkZWxldGUgaXQgZW50aXJlbHkgKGlmIGl0IGlzIGNvbnRhaW5lZCBp biBiZWcuLi5lbmQpLgorICAgICAgICAgICAgKGlmICg8IChvdmVybGF5LXN0YXJ0IG8pIGJlZykK KyAgICAgICAgICAgICAgICAoaWYgKD4gKG92ZXJsYXktZW5kIG8pIGVuZCkKKyAgICAgICAgICAg ICAgKHByb2duCisgICAgICAgICAgICAgICAgKG1vdmUtb3ZlcmxheSAoY29weS1vdmVybGF5IG8p CisgICAgICAgICAgICAgICAgICAob3ZlcmxheS1zdGFydCBvKSBiZWcpCisgICAgICAgICAgICAg ICAgKG1vdmUtb3ZlcmxheSBvIGVuZCAob3ZlcmxheS1lbmQgbykpKQorICAgICAgICAgICAgICAg ICAgKG1vdmUtb3ZlcmxheSBvIChvdmVybGF5LXN0YXJ0IG8pIGJlZykpCisgICAgICAgICAgICAg IChpZiAoPiAob3ZlcmxheS1lbmQgbykgZW5kKQorICAgICAgICAgICAgICAgICAgKG1vdmUtb3Zl cmxheSBvIGVuZCAob3ZlcmxheS1lbmQgbykpCisgICAgICAgICAgICAgICAgKGRlbGV0ZS1vdmVy bGF5IG8pKSkpCisgICAgICAgICAgKChhbmQgKG5vdCAoZXEgbmFtZSAnZmFjZSkpCisgICAgICAg ICAgICAgICAgKGVxdWFsLWluY2x1ZGluZy1wcm9wZXJ0aWVzIChvdmVybGF5LWdldCBvIG5hbWUp IHZhbCkpCisgICAgICAgICAgICAoZGVsZXRlLW92ZXJsYXkgbykpKSkpKSkKKworKGRlZnVuICst ZGVsZXRlLXBhcmVucy1vdmVybGF5cyAoKQorICAod2hlbiArLXBhcmVucy1vdmVybGF5cy1leGlz dC1wCisgICAgKGRvbGlzdCAoZmFjZSAnKCstcGFyZW5zLW9uZS1mYWNlCisgICAgICAgICAgICAg ICAgICAgICstcGFyZW5zLXR3by1mYWNlCisgICAgICAgICAgICAgICAgICAgICstcGFyZW5zLXRo cmVlLWZhY2UKKyAgICAgICAgICAgICAgICAgICAgKy1wYXJlbnMtZm91ci1mYWNlCisgICAgICAg ICAgICAgICAgICAgICstcGFyZW5zLWZpdmUtZmFjZQorICAgICAgICAgICAgICAgICAgICArLXBh cmVucy1zaXgtZmFjZQorICAgICAgICAgICAgICAgICAgICArLXBhcmVucy1zZXZlbi1mYWNlCisg ICAgICAgICAgICAgICAgICAgICstcGFyZW5zLWVpZ2h0LWZhY2UKKyAgICAgICAgICAgICAgICAg ICAgKy1wYXJlbnMtbmluZS1mYWNlCisgICAgICAgICAgICAgICAgICAgICstcGFyZW5zLXRlbi1m YWNlKSkKKyAgICAgICgrLXJlbW92ZS1vdmVybGF5cyBuaWwgbmlsICdmYWNlIGZhY2UpKQorICAg IChzZXRxICstcGFyZW5zLW92ZXJsYXlzLWV4aXN0LXAgbmlsKSkpCisKKzs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7OworCis7OzsgTW9kaWZpY2F0aW9uIGJ5IEBsYXdsaXN0IG9mIGBmcmluZ2UtaGVs cGVyLWNvbnZlcnQnIHdyaXR0ZW4gYnkKKzs7OyBOaWtvbGFqIFNjaHVtYWNoZXIgLS0gaHR0cHM6 Ly9naXRodWIuY29tL25zY2h1bS9mcmluZ2UtaGVscGVyLmVsCisoZGVmdW4gKy1mcmluZ2UtaGVs cGVyLWRlY2ltYWwgKCZyZXN0IHN0cmluZ3MpCisiQ29udmVydCBTVFJJTkdTIGludG8gYSB2ZWN0 b3IgdXNhYmxlIGZvciBgZGVmaW5lLWZyaW5nZS1iaXRtYXAnLgorRWFjaCBzdHJpbmcgaW4gU1RS SU5HUyByZXByZXNlbnRzIGEgbGluZSBvZiB0aGUgZnJpbmdlIGJpdG1hcC4KK1BlcmlvZHMgKC4p IGFyZSBiYWNrZ3JvdW5kLWNvbG9yZWQgcGl4ZWw7IFhzIGFyZSBmb3JlZ3JvdW5kLWNvbG9yZWQu IFRoZQorZnJpbmdlIGJpdG1hcCBhbHdheXMgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQuIElmIHRo ZSBmcmluZ2UgaGFzIGhhbGYKK3dpZHRoLCBvbmx5IHRoZSBsZWZ0IDQgcGl4ZWxzIG9mIGFuIDgg cGl4ZWwgYml0bWFwIHdpbGwgYmUgc2hvd24uCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBj b2RlIGRlZmluZXMgYSBkaWFnb25hbCBsaW5lLgorXCgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAor XCJYWC4uLi4uLlwiCitcIi4uWFguLi4uXCIKK1wiLi4uLlhYLi5cIgorXCIuLi4uLi5YWFwiXCki CisgICh1bmxlc3MgKGNkciBzdHJpbmdzKQorICAgIChzZXRxIHN0cmluZ3MgKHNwbGl0LXN0cmlu ZyAoY2FyIHN0cmluZ3MpICJcbiIpKSkKKyAgKGFwcGx5ICd2ZWN0b3IKKyAgICAobWFwY2FyCisg ICAgICAobGFtYmRhIChzdHIpCisgICAgICAgIChsZXQgKChudW0gMCkpCisgICAgICAgICAgKGRv bGlzdCAoYyAoc3RyaW5nLXRvLWxpc3Qgc3RyKSkKKyAgICAgICAgICAgIChzZXRxIG51bSAoKyAo KiBudW0gMikgKGlmIChlcSBjID8uKSAwIDEpKSkpCisgICAgICAgICAgbnVtKSkKKyAgICAgIHN0 cmluZ3MpKSkKKworOzs7IE1vZGlmaWNhdGlvbiBieSBAbGF3bGlzdCBvZiBgZnJpbmdlLWhlbHBl ci1jb252ZXJ0JyB3cml0dGVuIGJ5Cis7OzsgTmlrb2xhaiBTY2h1bWFjaGVyIC0tIGh0dHBzOi8v Z2l0aHViLmNvbS9uc2NodW0vZnJpbmdlLWhlbHBlci5lbAorKGRlZnVuICstZnJpbmdlLWhlbHBl ci1oZXhhZGVjaW1hbCAoJnJlc3Qgc3RyaW5ncykKKyJDb252ZXJ0IFNUUklOR1MgaW50byBhIHZl Y3RvciB1c2FibGUgZm9yIGBkZWZpbmUtZnJpbmdlLWJpdG1hcCcuCitFYWNoIHN0cmluZyBpbiBT VFJJTkdTIHJlcHJlc2VudHMgYSBsaW5lIG9mIHRoZSBmcmluZ2UgYml0bWFwLgorUGVyaW9kcyAo LikgYXJlIGJhY2tncm91bmQtY29sb3JlZCBwaXhlbDsgWHMgYXJlIGZvcmVncm91bmQtY29sb3Jl ZC4gVGhlCitmcmluZ2UgYml0bWFwIGFsd2F5cyBpcyBhbGlnbmVkIHRvIHRoZSByaWdodC4gSWYg dGhlIGZyaW5nZSBoYXMgaGFsZgord2lkdGgsIG9ubHkgdGhlIGxlZnQgNCBwaXhlbHMgb2YgYW4g OCBwaXhlbCBiaXRtYXAgd2lsbCBiZSBzaG93bi4KK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5n IGNvZGUgZGVmaW5lcyBhIGRpYWdvbmFsIGxpbmUuCitcKCstZnJpbmdlLWhlbHBlci1oZXhhZGVj aW1hbAorXCJYWC4uLi4uLlwiCitcIi4uWFguLi4uXCIKK1wiLi4uLlhYLi5cIgorXCIuLi4uLi5Y WFwiXCkiCisgICh1bmxlc3MgKGNkciBzdHJpbmdzKQorICAgIChzZXRxIHN0cmluZ3MgKHNwbGl0 LXN0cmluZyAoY2FyIHN0cmluZ3MpICJcbiIpKSkKKyAgKG1hcGNvbmNhdCAnaWRlbnRpdHkKKyAg ICAobWFwY2FyCisgICAgICAobGFtYmRhIChzdHIpCisgICAgICAgIChsZXQgKChudW0gMCkKKyAg ICAgICAgICAgICAgcmVzdWx0KQorICAgICAgICAgIChkb2xpc3QgKGMgKHN0cmluZy10by1saXN0 IHN0cikpCisgICAgICAgICAgICAoc2V0cSBudW0gKCsgKCogbnVtIDIpIChpZiAoZXEgYyA/Likg MCAxKSkpKQorICAgICAgICAgIChpZiAoPSBudW0gMCkKKyAgICAgICAgICAgICIweDAwIgorICAg ICAgICAgICAgKGZvcm1hdCAiJSMteCIgbnVtKSkpKQorICAgICAgc3RyaW5ncykKKyAgICAiLCAi KSkKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OzsgRlJJTkdFIEJJVE1BUFMKKworKGRl ZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1xdWVzdGlvbi1tYXJrICgrLWZyaW5nZS1oZWxw ZXItZGVjaW1hbAorIi4ueHh4eC4uIgorIi54eHh4eHguIgorInh4Li4uLnh4IgorInh4Li4uLnh4 IgorIi4uLi54eC4uIgorIi4uLnh4Li4uIgorIi4uLnh4Li4uIgorIi4uLi4uLi4uIgorIi4uLnh4 Li4uIgorIi4uLnh4Li4uIikgbmlsIG5pbCAnY2VudGVyKQorCisoZGVmaW5lLWZyaW5nZS1iaXRt YXAgJystZnJpbmdlLWV4Y2xhbWF0aW9uLW1hcmsgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisi Li4uWFguLi4iCisiLi4uWFguLi4iCisiLi4uWFguLi4iCisiLi4uWFguLi4iCisiLi4uWFguLi4i CisiLi4uWFguLi4iCisiLi4uWFguLi4iCisiLi4uLi4uLi4iCisiLi4uWFguLi4iCisiLi4uWFgu Li4iKSBuaWwgbmlsICdjZW50ZXIpCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2Ut bGVmdC1hcnJvdyAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIuLi54eC4uLiIKKyIuLnh4Li4u LiIKKyIueHguLi4uLiIKKyJ4eHh4eHguLiIKKyJ4eHh4eHguLiIKKyIueHguLi4uLiIKKyIuLnh4 Li4uLiIKKyIuLi54eC4uLiIpIG5pbCBuaWwgJ2NlbnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0 bWFwICcrLWZyaW5nZS1yaWdodC1hcnJvdyAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIuLi54 eC4uLiIKKyIuLi4ueHguLiIKKyIuLi4uLnh4LiIKKyIuLnh4eHh4eCIKKyIuLnh4eHh4eCIKKyIu Li4uLnh4LiIKKyIuLi4ueHguLiIKKyIuLi54eC4uLiIpIG5pbCBuaWwgJ2NlbnRlcikKKworKGRl ZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS11cC1hcnJvdyAoKy1mcmluZ2UtaGVscGVyLWRl Y2ltYWwKKyIuLi54eC4uLiIKKyIuLnh4eHguLiIKKyIueHh4eHh4LiIKKyJ4eHh4eHh4eCIKKyIu Li54eC4uLiIKKyIuLi54eC4uLiIKKyIuLi54eC4uLiIKKyIuLi54eC4uLiIpIG5pbCBuaWwgJ3Rv cCkKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1kb3duLWFycm93ICgrLWZyaW5n ZS1oZWxwZXItZGVjaW1hbAorIi4uLnh4Li4uIgorIi4uLnh4Li4uIgorIi4uLnh4Li4uIgorIi4u Lnh4Li4uIgorInh4eHh4eHh4IgorIi54eHh4eHguIgorIi4ueHh4eC4uIgorIi4uLnh4Li4uIikg bmlsIG5pbCAnYm90dG9tKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWxlZnQt Y3VybHktYXJyb3cgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisiLi4ueHh4eC4iCisiLi54eHh4 eC4iCisiLnh4Li4uLi4iCisiLnh4eC4ueC4iCisiLnh4eHh4eC4iCisiLi54eHh4eC4iCisiLi4u eHh4eC4iCisiLi54eHh4eC4iKSBuaWwgbmlsICdjZW50ZXIpCisKKyhkZWZpbmUtZnJpbmdlLWJp dG1hcCAnKy1mcmluZ2UtcmlnaHQtY3VybHktYXJyb3cgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFs CisiLnh4eHguLi4iCisiLnh4eHh4Li4iCisiLi4uLi54eC4iCisiLnguLnh4eC4iCisiLnh4eHh4 eC4iCisiLnh4eHh4Li4iCisiLnh4eHguLi4iCisiLnh4eHh4Li4iKSBuaWwgbmlsICdjZW50ZXIp CisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtbGVmdC10cmlhbmdsZSAoKy1mcmlu Z2UtaGVscGVyLWRlY2ltYWwKKyIuLi4uLi54eCIKKyIuLi4ueHh4eCIKKyIuLi54eHh4eCIKKyIu Lnh4eHh4eCIKKyIuLnh4eHh4eCIKKyIuLi54eHh4eCIKKyIuLi4ueHh4eCIKKyIuLi4uLi54eCIp IG5pbCBuaWwgJ2NlbnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1yaWdo dC10cmlhbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyJ4eC4uLi4uLiIKKyJ4eHh4Li4u LiIKKyJ4eHh4eC4uLiIKKyJ4eHh4eHguLiIKKyJ4eHh4eHguLiIKKyJ4eHh4eC4uLiIKKyJ4eHh4 Li4uLiIKKyJ4eC4uLi4uLiIpIG5pbCBuaWwgJ2NlbnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0 bWFwICcrLWZyaW5nZS10b3AtbGVmdC1hbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyJ4 eHh4eHguLiIKKyJ4eHh4eHguLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIK KyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyIuLi4uLi4uLiIpIG5pbCBuaWwgJ3RvcCkKKworKGRl ZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS10b3AtcmlnaHQtYW5nbGUgKCstZnJpbmdlLWhl bHBlci1kZWNpbWFsCisiLi54eHh4eHgiCisiLi54eHh4eHgiCisiLi4uLi4ueHgiCisiLi4uLi4u eHgiCisiLi4uLi4ueHgiCisiLi4uLi4ueHgiCisiLi4uLi4ueHgiCisiLi4uLi4uLi4iKSBuaWwg bmlsICd0b3ApCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtYm90dG9tLWxlZnQt YW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisieHguLi4uLi4iCisieHguLi4uLi4iCisi eHguLi4uLi4iCisieHguLi4uLi4iCisieHguLi4uLi4iCisieHh4eHh4Li4iCisieHh4eHh4Li4i KSBuaWwgbmlsICdib3R0b20pCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtYm90 dG9tLXJpZ2h0LWFuZ2xlICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorIi4uLi4uLnh4IgorIi4u Li4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4ueHh4eHh4Igor Ii4ueHh4eHh4IikgbmlsIG5pbCAnYm90dG9tKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJyst ZnJpbmdlLWxlZnQtYnJhY2tldCAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyJ4eHh4eHguLiIK KyJ4eHh4eHguLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4u LiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eHh4eHguLiIKKyJ4eHh4eHguLiIpIG5pbCBu aWwgJ2NlbnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1yaWdodC1icmFj a2V0ICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorIi4ueHh4eHh4IgorIi4ueHh4eHh4IgorIi4u Li4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4Igor Ii4uLi4uLnh4IgorIi4ueHh4eHh4IgorIi4ueHh4eHh4IikgbmlsIG5pbCAnY2VudGVyKQorCiso ZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWZpbGxlZC1yZWN0YW5nbGUgKCstZnJpbmdl LWhlbHBlci1kZWNpbWFsCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4 eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisi eHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4i KSBuaWwgbmlsICdjZW50ZXIpCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtaG9s bG93LXNxdWFyZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIueHh4eHh4LiIKKyIueC4uLi54 LiIKKyIueC4uLi54LiIKKyIueC4uLi54LiIKKyIueC4uLi54LiIKKyIueHh4eHh4LiIpIG5pbCBu aWwgJ2NlbnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1maWxsZWQtc3F1 YXJlICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorIi54eHh4eHguIgorIi54eHh4eHguIgorIi54 eHh4eHguIgorIi54eHh4eHguIgorIi54eHh4eHguIgorIi54eHh4eHguIikgbmlsIG5pbCAnY2Vu dGVyKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWhvcml6b250YWwtYmFyICgr LWZyaW5nZS1oZWxwZXItZGVjaW1hbAorInh4eHh4eHguIgorInh4eHh4eHguIikgbmlsIG5pbCAn Ym90dG9tKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWVtcHR5LWxpbmUgKCst ZnJpbmdlLWhlbHBlci1kZWNpbWFsCisiLi4uLi4uLi4iCisiLi54eHh4Li4iCisiLi4uLi4uLi4i CisiLi4uLi4uLi4iCisiLi54eHh4Li4iCisiLi4uLi4uLi4iKSBuaWwgbmlsICcodG9wIHQpKQor Cis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzs7OyBgc2V0LWZyaW5nZS1iaXRtYXAtZmFjZScK KworKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystc21pbGV5LWZhY2UgJystbGVmdC1mcmluZ2Ut Y3VycmVudC1saW5lLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWhvbGxvdy1y ZWN0YW5nbGUgJystaG9sbG93LXJlY3RhbmdsZS1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAt ZmFjZSAnKy1iYWNrc2xhc2ggJystYmFja3NsYXNoLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1h cC1mYWNlICcrLWZyaW5nZS1xdWVzdGlvbi1tYXJrICcrLWZyaW5nZS1xdWVzdGlvbi1tYXJrLWZh Y2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1leGNsYW1hdGlvbi1tYXJr ICcrLWZyaW5nZS1leGNsYW1hdGlvbi1tYXJrLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1m YWNlICcrLWZyaW5nZS1sZWZ0LWFycm93ICcrLWZyaW5nZS1sZWZ0LWFycm93LWZhY2UpCisKKyhz ZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1yaWdodC1hcnJvdyAnKy1mcmluZ2Utcmln aHQtYXJyb3ctZmFjZSkKKworKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLXVwLWFy cm93ICcrLWZyaW5nZS11cC1hcnJvdy1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAn Ky1mcmluZ2UtZG93bi1hcnJvdyAnKy1mcmluZ2UtZG93bi1hcnJvdy1mYWNlKQorCisoc2V0LWZy aW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdyAnKy1mcmluZ2UtbGVm dC1jdXJseS1hcnJvdy1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2Ut cmlnaHQtY3VybHktYXJyb3cgJystZnJpbmdlLXJpZ2h0LWN1cmx5LWFycm93LWZhY2UpCisKKyhz ZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1sZWZ0LXRyaWFuZ2xlICcrLWZyaW5nZS1s ZWZ0LXRyaWFuZ2xlLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1y aWdodC10cmlhbmdsZSAnKy1mcmluZ2UtcmlnaHQtdHJpYW5nbGUtZmFjZSkKKworKHNldC1mcmlu Z2UtYml0bWFwLWZhY2UgJystZnJpbmdlLXRvcC1sZWZ0LWFuZ2xlICcrLWZyaW5nZS10b3AtbGVm dC1hbmdsZS1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtdG9wLXJp Z2h0LWFuZ2xlICcrLWZyaW5nZS10b3AtcmlnaHQtYW5nbGUtZmFjZSkKKworKHNldC1mcmluZ2Ut Yml0bWFwLWZhY2UgJystZnJpbmdlLWJvdHRvbS1sZWZ0LWFuZ2xlICcrLWZyaW5nZS1ib3R0b20t bGVmdC1hbmdsZS1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtYm90 dG9tLXJpZ2h0LWFuZ2xlICcrLWZyaW5nZS1ib3R0b20tcmlnaHQtYW5nbGUtZmFjZSkKKworKHNl dC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLWxlZnQtYnJhY2tldCAnKy1mcmluZ2UtbGVm dC1icmFja2V0LWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1yaWdo dC1icmFja2V0ICcrLWZyaW5nZS1yaWdodC1icmFja2V0LWZhY2UpCisKKyhzZXQtZnJpbmdlLWJp dG1hcC1mYWNlICcrLWZyaW5nZS1maWxsZWQtcmVjdGFuZ2xlICcrLWZyaW5nZS1maWxsZWQtcmVj dGFuZ2xlLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1ob2xsb3ct c3F1YXJlICcrLWZyaW5nZS1ob2xsb3ctc3F1YXJlLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1h cC1mYWNlICcrLWZyaW5nZS1maWxsZWQtc3F1YXJlICcrLWZyaW5nZS1maWxsZWQtc3F1YXJlLWZh Y2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1ob3Jpem9udGFsLWJhciAn Ky1mcmluZ2UtaG9yaXpvbnRhbC1iYXItZmFjZSkKKworKHNldC1mcmluZ2UtYml0bWFwLWZhY2Ug JystZnJpbmdlLWVtcHR5LWxpbmUgJystZnJpbmdlLWVtcHR5LWxpbmUtZmFjZSkKKworOzs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OzsgRklMTC1DT0xVTU4tTU9ERQorCisoZGVmdmFyIGZjLW1v ZGUpCisKKyhkZWZ2YXIgZmMtdGltZXItdmFyIG5pbAorIlRpbWVyIHVzZWQgdG8gaGlnaGxpZ2h0 IGN1cnJlbnQgY29sdW1uIHdoZW5ldmVyIEVtYWNzIGlzIGlkbGUuIikKKworOzs7IyMjYXV0b2xv YWQKKyhkZWZpbmUtbWlub3ItbW9kZSBmYy1tb2RlCisiTWlub3IgbW9kZSBmb3IgZGlzcGxheWlu ZyBhIHZpc3VhbCBmaWxsIGNvbHVtbi4iCisgIDppbml0LXZhbHVlIG5pbAorICA6bGlnaHRlciAi IEZDIgorICA6a2V5bWFwIG5pbAorICA6Z2xvYmFsIG5pbAorICA6Z3JvdXAgJ2ZjLW1vZGUKKyAg KGNvbmQKKyAgICA7OzsgYCstbW9kZScgaGFzIHRoZSBhYmlsaXR5IHRvIGFsc28gZGlzcGxheSBh IGZpbGwgY29sdW1uIGluZGljYXRvci4KKyAgICA7OzsgU2VlIHRoZSB2YXJpYWJsZSBgKy1maWxs LWNvbHVtbicuCisgICAgKChhbmQgZmMtbW9kZSArLW1vZGUpCisgICAgICAoc2V0cSBmYy1tb2Rl IG5pbCkKKyAgICAgIChtZXNzYWdlICJUdXJuZWQgT0ZGIGBmYy1tb2RlJyAoJXMpIC0tIHNlZSB0 aGUgdmFyaWFibGUgYCstZmlsbC1jb2x1bW4nLiIgKGN1cnJlbnQtYnVmZmVyKSkpCisgICAgKGZj LW1vZGUKKyAgICAgICh3aGVuIChhbmQgZ2xvYmFsLWVsZG9jLW1vZGUKKyAgICAgICAgICAgICAg ICAgKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKKyAgICAgICAgICAgICAgICAgKGVxdWFs IGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKSkKKyAgICAgICAgKGdsb2JhbC1lbGRvYy1tb2RlIC0x KSkKKyAgICAgICh3aGVuIChhbmQgaml0LWxvY2stY29udGV4dC10aW1lcgorICAgICAgICAgICAg ICAgICAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55KQorICAgICAgICAgICAgICAgICAoZXF1 YWwgY3VycmVudC1wcmVmaXgtYXJnICcoNCkpKQorICAgICAgICAod2hlbiAodGltZXJwIGppdC1s b2NrLWNvbnRleHQtdGltZXIpCisgICAgICAgICAgKGNhbmNlbC10aW1lciBqaXQtbG9jay1jb250 ZXh0LXRpbWVyKSkKKyAgICAgICAgOzsgKHNldHEgaml0LWxvY2stY29udGV4dC10aW1lciAocnVu LXdpdGgtaWRsZS10aW1lciA1LjAgJ3JlcGVhdCAnaml0LWxvY2stY29udGV4dC1mb250aWZ5KSkK KyAgICAgICAgKHNldHEgaml0LWxvY2stY29udGV4dC10aW1lciBuaWwpKQorICAgICAgKHdoZW4g KGFuZCAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55KQorICAgICAgICAgICAgICAgICAoZXF1 YWwgY3VycmVudC1wcmVmaXgtYXJnICcoNCkpKQorICAgICAgICAod2hlbiAodGltZXJwIHVuZG8t YXV0by1jdXJyZW50LWJvdW5kYXJ5LXRpbWVyKQorICAgICAgICAgIChjYW5jZWwtdGltZXIgdW5k by1hdXRvLWN1cnJlbnQtYm91bmRhcnktdGltZXIpKQorICAgICAgICAoZnNldCAndW5kby1hdXRv LS11bmRvYWJsZS1jaGFuZ2UKKyAgICAgICAgICAgICAgKGxhbWJkYSAoKSAoYWRkLXRvLWxpc3Qg J3VuZG8tYXV0by0tdW5kb2FibHktY2hhbmdlZC1idWZmZXJzIChjdXJyZW50LWJ1ZmZlcikpKSkK KyAgICAgICAgKGZzZXQgJ3VuZG8tYXV0by1hbWFsZ2FtYXRlICdpZ25vcmUpKQorICAgICAgKHdo ZW4gYmxpbmstY3Vyc29yLW1vZGUKKyAgICAgICAgKGJsaW5rLWN1cnNvci1tb2RlIC0xKQorICAg ICAgICAod2hlbiAobWVtcSAnYmxpbmstY3Vyc29yLWNoZWNrIHBvc3QtY29tbWFuZC1ob29rKQor ICAgICAgICAgIChyZW1vdmUtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgJ2JsaW5rLWN1cnNvci1j aGVjaykpKQorICAgICAgKHNldHEgZmMtdmlzaWJsZSB0KQorICAgICAgOzs7IGBhdXRvLWNvbXBv c2l0aW9uLW1vZGUnIGlzIG5lZWRlZCBmb3IgY3Jvc3NoYWlycyB0byBwcm9wZXJseSBjYWxjdWxh dGUKKyAgICAgIDs7OyBjb29yZGluYXRlcyBvZiBjb21wb3NpdGlvbiBjaGFyYWN0ZXJzLiAgQXV0 b21hdGljYWxseSBiZWNvbWVzIHBlcm1hbmVudGx5CisgICAgICA7OzsgYnVmZmVyLWxvY2FsIHdo ZW4gc2V0LgorICAgICAgKHVubGVzcyBhdXRvLWNvbXBvc2l0aW9uLW1vZGUKKyAgICAgICAgKHNl dHEgYXV0by1jb21wb3NpdGlvbi1tb2RlIHQpKQorICAgICAgOzs7IEBsYXdsaXN0IGlzIGZvY3Vz aW5nIHRoZSBpbml0aWFsIGRldmVsb3BtZW50IG9mIGZlYXR1cmUgcmVxdWVzdHMgIzE3Njg0Cisg ICAgICA7OzsgYW5kICMyMjg3MyBvbiBMMlIgbGFuZ3VhZ2VzLiAgVGhlIGZlYXR1cmUgdGVzdCBm aWxlIHVzZWQgYnkgQGxhd2xpc3QKKyAgICAgIDs7OyBib2dzIEVtYWNzIGRvd24gdW5sZXNzIGBi aWRpLWRpc3BsYXktcmVvcmRlcmluZycgaXMgc2V0IHRvIGEgbmlsIHZhbHVlLgorICAgICAgOzs7 IEhvd2V2ZXIsIG1vc3QgdXNlcnMgd2lsbCBwcm9iYWJseSBub3Qgd2FudCB0aGlzIHBhcnRpY3Vs YXIgc2V0dGluZy4KKyAgICAgICh1bmxlc3MgKG51bGwgYmlkaS1kaXNwbGF5LXJlb3JkZXJpbmcp CisgICAgICAgIChzZXRxIGJpZGktZGlzcGxheS1yZW9yZGVyaW5nIG5pbCkpCisgICAgICAodW5s ZXNzIChhbmQgKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKKyAgICAgICAgICAgICAgICAg ICAoZXF1YWwgY3VycmVudC1wcmVmaXgtYXJnICcoNCkpKQorICAgICAgICAoc2V0cSBmaWxsLWNv bHVtbiA4MCkKKyAgICAgICAgKGFkZC1ob29rICdjaGFuZ2UtbWFqb3ItbW9kZS1ob29rICd0dXJu LW9mZi1mYy1tb2RlIG5pbCAnbG9jYWwpKQorICAgICAgKHdoZW4gKGNhbGxlZC1pbnRlcmFjdGl2 ZWx5LXAgJ2FueSkKKyAgICAgICAgKGlmIChlcXVhbCBjdXJyZW50LXByZWZpeC1hcmcgJyg0KSkK KyAgICAgICAgICAobWVzc2FnZSAiVHVybmVkIE9OIGBmYy1tb2RlJyAtLSBkZWJ1Z2dpbmcgbW9k ZS4iKQorICAgICAgICAgIChtZXNzYWdlICJUdXJuZWQgT04gYGZjLW1vZGUnLiIpKSkpCisgICAg KHQKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdmaWxsLWNvbHVtbikKKyAgICAgIChraWxs LWxvY2FsLXZhcmlhYmxlICdmYy12aXNpYmxlKQorICAgICAgKHJlbW92ZS1ob29rICdjaGFuZ2Ut bWFqb3ItbW9kZS1ob29rICd0dXJuLW9mZi1mYy1tb2RlICdsb2NhbCkKKyAgICAgICh3aGVuIChj YWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisgICAgICAgIChtZXNzYWdlICJUdXJuZWQgT0ZG IGBmYy1tb2RlJy4iKSkpKSkKKworKGRlZnVuIHR1cm4tb2ZmLWZjLW1vZGUgKCkKKyAgKGZjLW1v ZGUgLTEpKQorCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKworKHByb3ZpZGUgJystbW9kZSkK ZGlmZiAtLWdpdCBhL2xpc3AvZmFjZXMuZWwgYi9saXNwL2ZhY2VzLmVsCmluZGV4IGY5ZThjNmMu LjkxNzY4ZjEgMTAwNjQ0Ci0tLSBhL2xpc3AvZmFjZXMuZWwKKysrIGIvbGlzcC9mYWNlcy5lbApA QCAtMjUxMiw2ICsyNTEyLDYzNCBAQCBub24tbmlsLiIKICAgOmdyb3VwICdiYXNpYy1mYWNlcwog ICA6Z3JvdXAgJ2Rpc3BsYXktZmlsbC1jb2x1bW4taW5kaWNhdG9yKQogCisKKzs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7OworOzs7IGJlZ2luIE1VTFRJUExFLUNVUlNPUlMKKworKGRlZmZhY2UgKy1k ZWJ1Z2dpbmctZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiT3JhbmdlUmVkIikpKQorICAiRmFj ZSBmb3IgYCstZGVidWdnaW5nLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNl ICstc3BlY2lhbC1jaGFyYWN0ZXItZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiY3lhbiIpKSkK KyAgIkZhY2UgZm9yIGArLXNwZWNpYWwtY2hhcmFjdGVyLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1v ZGUpCisKKyhkZWZmYWNlICstb3ZlcmxheS1hcnJvdy1wcmUtenYtZmFjZQorICAnKCh0ICg6Zm9y ZWdyb3VuZCAicmVkIikpKQorICAiRmFjZSBmb3IgYCstb3ZlcmxheS1hcnJvdy1wcmUtenYtZmFj ZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1vdmVybGF5LWFycm93LWluYWN0 aXZlLXByZS16di1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJEYXJrU2xhdGVHcmV5IikpKQor ICAiRmFjZSBmb3IgYCstb3ZlcmxheS1hcnJvdy1pbmFjdGl2ZS1wcmUtenYtZmFjZScuIgorICA6 Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1vdmVybGF5LWFycm93LWhzY2wtcHJlLXp2LWZh Y2UKKyAgJygodCAoOmZvcmVncm91bmQgIkRhcmtHcmVlbiIpKSkKKyAgIkZhY2UgZm9yIGArLW92 ZXJsYXktYXJyb3ctaHNjbC1wcmUtenYtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRl ZmZhY2UgKy1vdmVybGF5LWFycm93LWhzY2wtaW5hY3RpdmUtcHJlLXp2LWZhY2UKKyAgJygodCAo OmZvcmVncm91bmQgIkRhcmtTbGF0ZUdyZXkiKSkpCisgICJGYWNlIGZvciBgKy1vdmVybGF5LWFy cm93LWhzY2wtaW5hY3RpdmUtcHJlLXp2LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhk ZWZmYWNlICstcmVhbC1mYWtlLWN1cnNvci1wcmUtenYtZmFjZQorICAnKCgoKGNsYXNzIGNvbG9y KSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJj eWFuIiA6YmFja2dyb3VuZCAiRGFya0JsdWUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNv bG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAibWFnZW50YSIg OmJhY2tncm91bmQgIkxpZ2h0U2t5Qmx1ZSIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29s b3JzIDE2KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgImN5YW4iIDpiYWNr Z3JvdW5kICJEYXJrQmx1ZSIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAo YmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJtYWdlbnRhIiA6YmFja2dyb3Vu ZCAiTGlnaHRTa3lCbHVlIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgOCkpCisg ICAgIDpmb3JlZ3JvdW5kICJ3aGl0ZSIgOmJhY2tncm91bmQgImJsdWUiKQorICAgICgoKHR5cGUg dHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQgOmZvcmVn cm91bmQgInBpbmsiIDpiYWNrZ3JvdW5kICJncmF5IikpCisgICJGYWNlIGZvciBgKy1yZWFsLWZh a2UtY3Vyc29yLXByZS16di1mYWNlJy4KK0FzIHRvIGEgaG9sbG93IHN0eWxlIGN1cnNvciwgdGhl IDpmb3JlZ3JvdW5kIHBhcmFtZXRlciBpcyB1c2VkIGZvciB0aGUgYm9yZGVyIGFuZAordGhlIDpi YWNrZ3JvdW5kIHBhcmFtZXRlciBpcyB1c2VkIGZvciB0aGUgaW5uZXIgZmlsbGVkIHNoYWRpbmcu ICBUaGUgY2hhcmFjdGVyCityZXRhaW5zIGl0cyBvd24gZm9yZWdyb3VuZCBjb2xvciBhbmQgaXMg dW5hZmZlY3RlZCBieSB0aGlzIHBhcnRpY3VsYXIgZmFjZS4iCisgIDpncm91cCAnKy1tb2RlKQor CisoZGVmZmFjZSArLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtcHJlLXp2LWZhY2UKKyAgJygo KChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6 Zm9yZWdyb3VuZCAiI2ZmMDBmZiIgOmJhY2tncm91bmQgIkZvcmVzdEdyZWVuIikKKyAgICAoKChj bGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZv cmVncm91bmQgIk9yYW5nZVJlZCIgOmJhY2tncm91bmQgImdyZXk3MCIpCisgICAgKCgoY2xhc3Mg Y29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91 bmQgIiNmZjAwZmYiIDpiYWNrZ3JvdW5kICJGb3Jlc3RHcmVlbiIpCisgICAgKCgoY2xhc3MgY29s b3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5k ICJPcmFuZ2VSZWQiIDpiYWNrZ3JvdW5kICJncmV5NzAiKQorICAgICgoKGNsYXNzIGNvbG9yKSAo bWluLWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIiA6YmFja2dyb3VuZCAiYmx1 ZSIpCisgICAgKCgodHlwZSB0dHkpIChjbGFzcyBtb25vKSkKKyAgICAgOmludmVyc2UtdmlkZW8g dCkKKyAgICAodCA6Zm9yZWdyb3VuZCAicGluayIgOmJhY2tncm91bmQgImdyYXkiKSkKKyAgIkZh Y2UgZm9yIGArLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtcHJlLXp2LWZhY2UnLgorQXMgdG8g YSBob2xsb3cgc3R5bGUgY3Vyc29yLCB0aGUgOmZvcmVncm91bmQgcGFyYW1ldGVyIGlzIHVzZWQg Zm9yIHRoZSBib3JkZXIgYW5kCit0aGUgOmJhY2tncm91bmQgcGFyYW1ldGVyIGlzIHVzZWQgZm9y IHRoZSBpbm5lciBmaWxsZWQgc2hhZGluZy4gIFRoZSBjaGFyYWN0ZXIKK3JldGFpbnMgaXRzIG93 biBmb3JlZ3JvdW5kIGNvbG9yIGFuZCBpcyB1bmFmZmVjdGVkIGJ5IHRoaXMgcGFydGljdWxhciBm YWNlLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstcmVhbC1mYWtlLWN1cnNvci1h dC16di1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3Vu ZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgInJlZCIgOmJhY2tncm91bmQgIkRhcmtCbHVlIikK KyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSkK KyAgICAgOmZvcmVncm91bmQgImN5YW4iIDpiYWNrZ3JvdW5kICJMaWdodFNreUJsdWUiKQorICAg ICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFyaykpCisgICAg IDpmb3JlZ3JvdW5kICJyZWQiIDpiYWNrZ3JvdW5kICJEYXJrQmx1ZSIpCisgICAgKCgoY2xhc3Mg Y29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3Jv dW5kICJjeWFuIiA6YmFja2dyb3VuZCAiTGlnaHRTa3lCbHVlIikKKyAgICAoKChjbGFzcyBjb2xv cikgKG1pbi1jb2xvcnMgOCkpCisgICAgIDpmb3JlZ3JvdW5kICJ3aGl0ZSIgOmJhY2tncm91bmQg ImJsdWUiKQorICAgICgoKHR5cGUgdHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZp ZGVvIHQpCisgICAgKHQgOmZvcmVncm91bmQgInBpbmsiIDpiYWNrZ3JvdW5kICJncmF5IikpCisg ICJGYWNlIGZvciBgKy1yZWFsLWZha2UtY3Vyc29yLWF0LXp2LWZhY2UnLgorQXMgdG8gYSBob2xs b3cgc3R5bGUgY3Vyc29yLCB0aGUgOmZvcmVncm91bmQgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIHRo ZSBib3JkZXIgYW5kCit0aGUgOmJhY2tncm91bmQgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIHRoZSBp bm5lciBmaWxsZWQgc2hhZGluZy4gIFRoZSBjaGFyYWN0ZXIKK3JldGFpbnMgaXRzIG93biBmb3Jl Z3JvdW5kIGNvbG9yIGFuZCBpcyB1bmFmZmVjdGVkIGJ5IHRoaXMgcGFydGljdWxhciBmYWNlLiIK KyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstcmVhbC1mYWtlLWN1cnNvci1pbmFjdGl2 ZS1hdC16di1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dy b3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgImJsdWUiIDpiYWNrZ3JvdW5kICJGb3Jlc3RH cmVlbiIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBs aWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJibHVlIiA6YmFja2dyb3VuZCAiZ3JleTcwIikKKyAg ICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRhcmspKQorICAg ICA6Zm9yZWdyb3VuZCAiYmx1ZSIgOmJhY2tncm91bmQgIkZvcmVzdEdyZWVuIikKKyAgICAoKChj bGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZv cmVncm91bmQgImJsdWUiIDpiYWNrZ3JvdW5kICJncmV5NzAiKQorICAgICgoKGNsYXNzIGNvbG9y KSAobWluLWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIiA6YmFja2dyb3VuZCAi Ymx1ZSIpCisgICAgKCgodHlwZSB0dHkpIChjbGFzcyBtb25vKSkKKyAgICAgOmludmVyc2Utdmlk ZW8gdCkKKyAgICAodCA6Zm9yZWdyb3VuZCAicGluayIgOmJhY2tncm91bmQgImdyYXkiKSkKKyAg IkZhY2UgZm9yIGArLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtYXQtenYtZmFjZScuCitBcyB0 byBhIGhvbGxvdyBzdHlsZSBjdXJzb3IsIHRoZSA6Zm9yZWdyb3VuZCBwYXJhbWV0ZXIgaXMgdXNl ZCBmb3IgdGhlIGJvcmRlciBhbmQKK3RoZSA6YmFja2dyb3VuZCBwYXJhbWV0ZXIgaXMgdXNlZCBm b3IgdGhlIGlubmVyIGZpbGxlZCBzaGFkaW5nLiAgVGhlIGNoYXJhY3RlcgorcmV0YWlucyBpdHMg b3duIGZvcmVncm91bmQgY29sb3IgYW5kIGlzIHVuYWZmZWN0ZWQgYnkgdGhpcyBwYXJ0aWN1bGFy IGZhY2UuIgorICA6Z3JvdXAgJystbW9kZW8pCisKKyhkZWZmYWNlICstcmVhbC1mYWtlLWN1cnNv ci1hdC1yZWdpb24tcHJlLXp2LWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMg ODgpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiY2hvY29sYXRlNCIgOmJh Y2tncm91bmQgIiM4Yjc5NWUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkg KGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAicGluayIgOmJhY2tncm91bmQg ImJsYWNrIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5k IGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiY2hvY29sYXRlNCIgOmJhY2tncm91bmQgIiM4Yjc5 NWUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgbGln aHQpKQorICAgICA6Zm9yZWdyb3VuZCAicGluayIgOmJhY2tncm91bmQgImJsYWNrIikKKyAgICAo KChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgOCkpCisgICAgIDpmb3JlZ3JvdW5kICJ3aGl0ZSIg OmJhY2tncm91bmQgImJsdWUiKQorICAgICgoKHR5cGUgdHR5KSAoY2xhc3MgbW9ubykpCisgICAg IDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQgOmZvcmVncm91bmQgInBpbmsiIDpiYWNrZ3JvdW5k ICJncmF5IikpCisgICJGYWNlIGZvciBgKy1yZWFsLWZha2UtY3Vyc29yLWF0LXJlZ2lvbi1wcmUt enYtZmFjZScuCitBcyB0byBhIGhvbGxvdyBzdHlsZSBjdXJzb3IsIHRoZSBgOmZvcmVncm91bmRg IHBhcmFtZXRlciBpcyB1c2VkIGZvciB0aGUgaW5uZXIKK2ZpbGxlZCBzaGFkaW5nIHdoZW4gYGN1 cnNvcl9nbHlwaC0+Y2hhcnBvc2AgaXMgX2F0XyB0aGUgcmVnaW9uIGJlZ2lubmluZzsgdGhlCitg OmJhY2tncm91bmRgIHBhcmFtZXRlciBpcyB1c2VkIGZvciB0aGUgaW5uZXIgZmlsbGVkIHNoYWRp bmcgd2hlbgorYGN1cnNvcl9nbHlwaC0+Y2hhcnBvc2AgaXMgX2F0XyB0aGUgcmVnaW9uIGVuZC4g IFRoZSBjaGFyYWN0ZXIgcmV0YWlucyBpdHMgb3duCitmb3JlZ3JvdW5kIGNvbG9yIGFuZCBpcyB1 bmFmZmVjdGVkIGJ5IHRoaXMgZmFjZS4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSAr LXJlYWwtZmFrZS1jdXJzb3ItaW4tcmVnaW9uLXByZS16di1mYWNlCisgICcoKCgoY2xhc3MgY29s b3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQg Im9yYW5nZSIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3Vu ZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJwdXJwbGUiKQorICAgICgoKGNsYXNzIGNvbG9y KSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJv cmFuZ2UiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQg bGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAicHVycGxlIikKKyAgICAoKChjbGFzcyBjb2xvcikg KG1pbi1jb2xvcnMgOCkpCisgICAgIDpmb3JlZ3JvdW5kICJncmF5NTAiKQorICAgICgoKHR5cGUg dHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQgOmZvcmVn cm91bmQgInB1cnBsZSIpKQorICAiRmFjZSBmb3IgYCstcmVhbC1mYWtlLWN1cnNvci1pbi1yZWdp b24tcHJlLXp2LWZhY2UnLgorQXMgdG8gYSBob2xsb3cgc3R5bGUgY3Vyc29yLCB0aGUgYDpmb3Jl Z3JvdW5kYCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgdGhlIGlubmVyCitmaWxsZWQgc2hhZGluZyB3 aGVuIGBjdXJzb3JfZ2x5cGgtPmNoYXJwb3NgIGlzIF9pbl8gdGhlIHJlZ2lvbiBiZWdpbm5pbmcu ICBUaGUKK2NoYXJhY3RlciByZXRhaW5zIGl0cyBvd24gZm9yZWdyb3VuZCBjb2xvciBhbmQgaXMg dW5hZmZlY3RlZCBieSB0aGlzIGZhY2UuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2Ug Ky1iYXItcHJlLXp2LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIm1hZ2VudGExIikpKQorICAi RmFjZSBmb3IgYCstYmFyLXByZS16di1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVm ZmFjZSArLWJhci1hdC16di1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJ5ZWxsb3ciKSkpCisg ICJGYWNlIGZvciBgKy1iYXItYXQtenYtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRl ZmZhY2UgKy1iYXItcG9zdC16di1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJtYWdlbnRhNCIp KSkKKyAgIkZhY2UgZm9yIGArLWJhci1wb3N0LXp2LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUp CisKKyhkZWZmYWNlICstcmV2ZXJzZWQtYmFyLXByZS16di1mYWNlCisgICcoKHQgKDpmb3JlZ3Jv dW5kICJjeWFuMSIpKSkKKyAgIkZhY2UgZm9yIGArLXJldmVyc2VkLWJhci1wcmUtenYtZmFjZScu IgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1yZXZlcnNlZC1iYXItYXQtenYtZmFj ZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiY2hhcnRyZXVzZSIpKSkKKyAgIkZhY2UgZm9yIGArLXJl dmVyc2VkLWJhci1hdC16di1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSAr LXJldmVyc2VkLWJhci1wb3N0LXp2LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImN5YW40Iikp KQorICAiRmFjZSBmb3IgYCstcmV2ZXJzZWQtYmFyLXBvc3QtenYtZmFjZScuIgorICA6Z3JvdXAg JystbW9kZSkKKworKGRlZmZhY2UgKy1ldmVuLXByZS16di1mYWNlCisgICcoKCgoY2xhc3MgY29s b3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQg InllbGxvdyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3Vu ZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJjeWFuMSIpCisgICAgKCgoY2xhc3MgY29sb3Ip IChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgInll bGxvdyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBs aWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJjeWFuMSIpCisgICAgKCgoY2xhc3MgY29sb3IpICht aW4tY29sb3JzIDgpKQorICAgICA6Zm9yZWdyb3VuZCAid2hpdGUiKQorICAgICgoKHR5cGUgdHR5 KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQgOmZvcmVncm91 bmQgInBpbmsiKSkKKyAgIkZhY2UgZm9yIGArLWV2ZW4tcHJlLXp2LWZhY2UnLiIKKyAgOmdyb3Vw ICcrLW1vZGUpCisKKyhkZWZmYWNlICstZXZlbi1pbmFjdGl2ZS1wcmUtenYtZmFjZQorICAnKCgo KGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpm b3JlZ3JvdW5kICIjZWVlOGFhIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgp IChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgImJsdWUxIikKKyAgICAoKChj bGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9y ZWdyb3VuZCAiI2VlZThhYSIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAo YmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJibHVlMSIpCisgICAgKCgoY2xh c3MgY29sb3IpIChtaW4tY29sb3JzIDgpKQorICAgICA6Zm9yZWdyb3VuZCAid2hpdGUiKQorICAg ICgoKHR5cGUgdHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAg KHQgOmZvcmVncm91bmQgInBpbmsiKSkKKyAgIkZhY2UgZm9yIGArLWV2ZW4taW5hY3RpdmUtcHJl LXp2LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZXZlbi1hdC16di1m YWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBkYXJr KSkKKyAgICAgOmZvcmVncm91bmQgIkRlZXBQaW5rMSIpCisgICAgKCgoY2xhc3MgY29sb3IpICht aW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJEZWVw UGluazEiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQg ZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJEZWVwUGluazEiKQorICAgICgoKGNsYXNzIGNvbG9y KSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAi RGVlcFBpbmsxIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgOCkpCisgICAgIDpm b3JlZ3JvdW5kICJ3aGl0ZSIpCisgICAgKCgodHlwZSB0dHkpIChjbGFzcyBtb25vKSkKKyAgICAg OmludmVyc2UtdmlkZW8gdCkKKyAgICAodCA6Zm9yZWdyb3VuZCAicGluayIpKQorICAiRmFjZSBm b3IgYCstZXZlbi1hdC16di1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSAr LWV2ZW4taW5hY3RpdmUtYXQtenYtZmFjZQorICAnKCgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9y cyA4OCkgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJEZWVwUGluazQiKQor ICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpKQor ICAgICA6Zm9yZWdyb3VuZCAiRGVlcFBpbms0IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1j b2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiRGVlcFBpbms0 IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGxpZ2h0 KSkKKyAgICAgOmZvcmVncm91bmQgIkRlZXBQaW5rNCIpCisgICAgKCgoY2xhc3MgY29sb3IpICht aW4tY29sb3JzIDgpKQorICAgICA6Zm9yZWdyb3VuZCAid2hpdGUiKQorICAgICgoKHR5cGUgdHR5 KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQgOmZvcmVncm91 bmQgInBpbmsiKSkKKyAgIkZhY2UgZm9yIGArLWV2ZW4taW5hY3RpdmUtYXQtenYtZmFjZScuIgor ICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1ldmVuLXBvc3QtenYtZmFjZQorICAnKCgo KGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpm b3JlZ3JvdW5kICJEYXJrT2xpdmVHcmVlbjMiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNv bG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAiY3lhbjQiKQor ICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFyaykpCisg ICAgIDpmb3JlZ3JvdW5kICJEYXJrT2xpdmVHcmVlbjMiKQorICAgICgoKGNsYXNzIGNvbG9yKSAo bWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAiY3lh bjQiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91 bmQgIndoaXRlIikKKyAgICAoKCh0eXBlIHR0eSkgKGNsYXNzIG1vbm8pKQorICAgICA6aW52ZXJz ZS12aWRlbyB0KQorICAgICh0IDpmb3JlZ3JvdW5kICJwaW5rIikpCisgICJGYWNlIGZvciBgKy1l dmVuLXBvc3QtenYtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1ldmVu LWluYWN0aXZlLXBvc3QtenYtZmFjZQorICAnKCgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4 OCkgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJEYXJrT2xpdmVHcmVlbjQi KQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQp KQorICAgICA6Zm9yZWdyb3VuZCAiUm95YWxCbHVlIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1p bi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiRGFya09s aXZlR3JlZW40IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3Jv dW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgIlJveWFsQmx1ZSIpCisgICAgKCgoY2xhc3Mg Y29sb3IpIChtaW4tY29sb3JzIDgpKQorICAgICA6Zm9yZWdyb3VuZCAid2hpdGUiKQorICAgICgo KHR5cGUgdHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQg OmZvcmVncm91bmQgInBpbmsiKSkKKyAgIkZhY2UgZm9yIGArLWV2ZW4taW5hY3RpdmUtcG9zdC16 di1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLW9kZC1wcmUtenYtZmFj ZQorICAnKCgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykp CisgICAgIDpmb3JlZ3JvdW5kICJyZWQxIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xv cnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgInJlZDEiKQorICAg ICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFyaykpCisgICAg IDpmb3JlZ3JvdW5kICJyZWQxIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYp IChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgInJlZDEiKQorICAgICgoKGNs YXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIikKKyAg ICAoKCh0eXBlIHR0eSkgKGNsYXNzIG1vbm8pKQorICAgICA6aW52ZXJzZS12aWRlbyB0KQorICAg ICh0IDpmb3JlZ3JvdW5kICJwaW5rIikpCisgICJGYWNlIGZvciBgKy1vZGQtcHJlLXp2LWZhY2Un LiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstb2RkLWluYWN0aXZlLXByZS16di1m YWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBkYXJr KSkKKyAgICAgOmZvcmVncm91bmQgIiNmZjYzNDciKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWlu LWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAiI2ZmNjM0 NyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBkYXJr KSkKKyAgICAgOmZvcmVncm91bmQgIiNmZjYzNDciKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWlu LWNvbG9ycyAxNikgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAiI2ZmNjM0 NyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDgpKQorICAgICA6Zm9yZWdyb3Vu ZCAid2hpdGUiKQorICAgICgoKHR5cGUgdHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNl LXZpZGVvIHQpCisgICAgKHQgOmZvcmVncm91bmQgInBpbmsiKSkKKyAgIkZhY2UgZm9yIGArLW9k ZC1pbmFjdGl2ZS1wcmUtenYtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2Ug Ky1vZGQtYXQtenYtZmFjZQorICAnKCgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJh Y2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJTdGVlbEJsdWUzIikKKyAgICAoKChj bGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZv cmVncm91bmQgIlN0ZWVsQmx1ZTMiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAx NikgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJTdGVlbEJsdWUzIikKKyAg ICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAg ICAgOmZvcmVncm91bmQgIlN0ZWVsQmx1ZTMiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNv bG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIikKKyAgICAoKCh0eXBlIHR0eSkgKGNs YXNzIG1vbm8pKQorICAgICA6aW52ZXJzZS12aWRlbyB0KQorICAgICh0IDpmb3JlZ3JvdW5kICJw aW5rIikpCisgICJGYWNlIGZvciBgKy1vZGQtYXQtenYtZmFjZScuIgorICA6Z3JvdXAgJystbW9k ZSkKKworKGRlZmZhY2UgKy1vZGQtaW5hY3RpdmUtYXQtenYtZmFjZQorICAnKCgoKGNsYXNzIGNv bG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5k ICJTdGVlbEJsdWU0IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNr Z3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgIlN0ZWVsQmx1ZTQiKQorICAgICgoKGNs YXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3Jl Z3JvdW5kICJTdGVlbEJsdWU0IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYp IChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgIlN0ZWVsQmx1ZTQiKQorICAg ICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRl IikKKyAgICAoKCh0eXBlIHR0eSkgKGNsYXNzIG1vbm8pKQorICAgICA6aW52ZXJzZS12aWRlbyB0 KQorICAgICh0IDpmb3JlZ3JvdW5kICJwaW5rIikpCisgICJGYWNlIGZvciBgKy1vZGQtaW5hY3Rp dmUtYXQtenYtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1vZGQtcG9z dC16di1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3Vu ZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgInNpZW5uYTEiKQorICAgICgoKGNsYXNzIGNvbG9y KSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAi RGFya1NhbG1vbiIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dy b3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgInNpZW5uYTEiKQorICAgICgoKGNsYXNzIGNv bG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3Vu ZCAiRGFya1NhbG1vbiIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDgpKQorICAg ICA6Zm9yZWdyb3VuZCAid2hpdGUiKQorICAgICgoKHR5cGUgdHR5KSAoY2xhc3MgbW9ubykpCisg ICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQgOmZvcmVncm91bmQgInBpbmsiKSkKKyAgIkZh Y2UgZm9yIGArLW9kZC1wb3N0LXp2LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZm YWNlICstb2RkLWluYWN0aXZlLXBvc3QtenYtZmFjZQorICAnKCgoKGNsYXNzIGNvbG9yKSAobWlu LWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJzaWVubmE0 IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0 KSkKKyAgICAgOmZvcmVncm91bmQgInNpZW5uYTQiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWlu LWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJzaWVubmE0 IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGxpZ2h0 KSkKKyAgICAgOmZvcmVncm91bmQgInNpZW5uYTQiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWlu LWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIikKKyAgICAoKCh0eXBlIHR0eSkg KGNsYXNzIG1vbm8pKQorICAgICA6aW52ZXJzZS12aWRlbyB0KQorICAgICh0IDpmb3JlZ3JvdW5k ICJwaW5rIikpCisgICJGYWNlIGZvciBgKy1vZGQtaW5hY3RpdmUtcG9zdC16di1mYWNlJy4iCisg IDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBvc3QtZmlsbC1wcmUtenYtZmFjZQorICAn KCgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykpCisgICAg IDpmb3JlZ3JvdW5kICJncmVlbjEiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4 OCkgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAiZ3JlZW4xIikKKyAgICAo KChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6 Zm9yZWdyb3VuZCAiZ3JlZW4xIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYp IChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgImdyZWVuMSIpCisgICAgKCgo Y2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDgpKQorICAgICA6Zm9yZWdyb3VuZCAid2hpdGUiKQor ICAgICgoKHR5cGUgdHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisg ICAgKHQgOmZvcmVncm91bmQgInBpbmsiKSkKKyAgIkZhY2UgZm9yIGArLXBvc3QtZmlsbC1wcmUt enYtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1wb3N0LWZpbGwtaW5h Y3RpdmUtcHJlLXp2LWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChi YWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiZ3JlZW40IikKKyAgICAoKChjbGFz cyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVn cm91bmQgImdyZWVuNCIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFj a2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgImdyZWVuNCIpCisgICAgKCgoY2xhc3Mg Y29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3Jv dW5kICJncmVlbjQiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAg OmZvcmVncm91bmQgIndoaXRlIikKKyAgICAoKCh0eXBlIHR0eSkgKGNsYXNzIG1vbm8pKQorICAg ICA6aW52ZXJzZS12aWRlbyB0KQorICAgICh0IDpmb3JlZ3JvdW5kICJwaW5rIikpCisgICJGYWNl IGZvciBgKy1wb3N0LWZpbGwtaW5hY3RpdmUtcHJlLXp2LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1v ZGUpCisKKyhkZWZmYWNlICstcG9zdC1maWxsLWF0LXp2LWZhY2UKKyAgJygoKChjbGFzcyBjb2xv cikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAi cHVycGxlMyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3Vu ZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJyZWQxIikKKyAgICAoKChjbGFzcyBjb2xvcikg KG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAicHVy cGxlMyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBs aWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJyZWQxIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1p bi1jb2xvcnMgOCkpCisgICAgIDpmb3JlZ3JvdW5kICJ3aGl0ZSIpCisgICAgKCgodHlwZSB0dHkp IChjbGFzcyBtb25vKSkKKyAgICAgOmludmVyc2UtdmlkZW8gdCkKKyAgICAodCA6Zm9yZWdyb3Vu ZCAicGluayIpKQorICAiRmFjZSBmb3IgYCstcG9zdC1maWxsLWF0LXp2LWZhY2UnLiIKKyAgOmdy b3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstcG9zdC1maWxsLWluYWN0aXZlLWF0LXp2LWZhY2UK KyAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGRhcmspKQor ICAgICA6Zm9yZWdyb3VuZCAicHVycGxlNCIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29s b3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJyZWQ0IikKKyAg ICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRhcmspKQorICAg ICA6Zm9yZWdyb3VuZCAicHVycGxlNCIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3Jz IDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJyZWQ0IikKKyAgICAo KChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgOCkpCisgICAgIDpmb3JlZ3JvdW5kICJ3aGl0ZSIp CisgICAgKCgodHlwZSB0dHkpIChjbGFzcyBtb25vKSkKKyAgICAgOmludmVyc2UtdmlkZW8gdCkK KyAgICAodCA6Zm9yZWdyb3VuZCAicGluayIpKQorICAiRmFjZSBmb3IgYCstcG9zdC1maWxsLWlu YWN0aXZlLWF0LXp2LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstcG9z dC1maWxsLXBvc3QtenYtZmFjZQorICAnKCgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkg KGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJQYWxlR3JlZW4zIikKKyAgICAo KChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAg OmZvcmVncm91bmQgIlBhbGVHcmVlbjMiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9y cyAxNikgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJQYWxlR3JlZW4zIikK KyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGxpZ2h0KSkK KyAgICAgOmZvcmVncm91bmQgIlBhbGVHcmVlbjMiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWlu LWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIikKKyAgICAoKCh0eXBlIHR0eSkg KGNsYXNzIG1vbm8pKQorICAgICA6aW52ZXJzZS12aWRlbyB0KQorICAgICh0IDpmb3JlZ3JvdW5k ICJwaW5rIikpCisgICJGYWNlIGZvciBgKy1wb3N0LWZpbGwtcG9zdC16di1mYWNlJy4iCisgIDpn cm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBvc3QtZmlsbC1pbmFjdGl2ZS1wb3N0LXp2LWZh Y2UKKyAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGRhcmsp KQorICAgICA6Zm9yZWdyb3VuZCAiUGFsZUdyZWVuNCIpCisgICAgKCgoY2xhc3MgY29sb3IpICht aW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJEYXJr T2xpdmVHcmVlbiIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dy b3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgIlBhbGVHcmVlbjQiKQorICAgICgoKGNsYXNz IGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdy b3VuZCAiRGFya09saXZlR3JlZW4iKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4 KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIikKKyAgICAoKCh0eXBlIHR0eSkgKGNsYXNzIG1v bm8pKQorICAgICA6aW52ZXJzZS12aWRlbyB0KQorICAgICh0IDpmb3JlZ3JvdW5kICJwaW5rIikp CisgICJGYWNlIGZvciBgKy1wb3N0LWZpbGwtaW5hY3RpdmUtcG9zdC16di1mYWNlJy4iCisgIDpn cm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSBmYy1wcmUtenYtZmFjZQorICAnKCgoKGNsYXNzIGNv bG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5k ICJncmV5MTUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91 bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAiZ3JleTE1IikKKyAgICAoKChjbGFzcyBjb2xv cikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAi Z3JleTE1IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5k IGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgImdyZXkxNSIpCisgICAgKCgoY2xhc3MgY29sb3Ip IChtaW4tY29sb3JzIDgpKQorICAgICA6Zm9yZWdyb3VuZCAid2hpdGUiKQorICAgICgoKHR5cGUg dHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQgOmZvcmVn cm91bmQgInBpbmsiKSkKKyAgIkZhY2UgZm9yIGBmYy1wcmUtenYtZmFjZScgaW4gdGhlIGFjdGl2 ZSB3aW5kb3cuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgZmMtaW5hY3RpdmUtcHJl LXp2LWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5k IGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiYmx1ZSIpCisgICAgKCgoY2xhc3MgY29sb3IpICht aW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJncmV5 NjAiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFy aykpCisgICAgIDpmb3JlZ3JvdW5kICJibHVlIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1j b2xvcnMgMTYpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgImdyZXk2MCIp CisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDgpKQorICAgICA6Zm9yZWdyb3VuZCAi d2hpdGUiKQorICAgICgoKHR5cGUgdHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZp ZGVvIHQpCisgICAgKHQgOmZvcmVncm91bmQgInBpbmsiKSkKKyAgIkZhY2UgZm9yIGBmYy1pbmFj dGl2ZS1wcmUtenYtZmFjZScgaW4gdGhlIGluYWN0aXZlIHdpbmRvdy4iCisgIDpncm91cCAnKy1t b2RlKQorCisoZGVmZmFjZSBmYy1hdC16di1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChtaW4t Y29sb3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgIk9yYW5nZVJl ZCIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdo dCkpCisgICAgIDpmb3JlZ3JvdW5kICJPcmFuZ2VSZWQiKQorICAgICgoKGNsYXNzIGNvbG9yKSAo bWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJPcmFu Z2VSZWQiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQg bGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAiT3JhbmdlUmVkIikKKyAgICAoKChjbGFzcyBjb2xv cikgKG1pbi1jb2xvcnMgOCkpCisgICAgIDpmb3JlZ3JvdW5kICJ3aGl0ZSIpCisgICAgKCgodHlw ZSB0dHkpIChjbGFzcyBtb25vKSkKKyAgICAgOmludmVyc2UtdmlkZW8gdCkKKyAgICAodCA6Zm9y ZWdyb3VuZCAicGluayIpKQorICAiRmFjZSBmb3IgYGZjLWF0LXp2LWZhY2UnIGluIHRoZSBhY3Rp dmUgd2luZG93LiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlIGZjLWluYWN0aXZlLWF0 LXp2LWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5k IGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAieWVsbG93IikKKyAgICAoKChjbGFzcyBjb2xvcikg KG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgInll bGxvdyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBk YXJrKSkKKyAgICAgOmZvcmVncm91bmQgInllbGxvdyIpCisgICAgKCgoY2xhc3MgY29sb3IpICht aW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJ5ZWxs b3ciKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91 bmQgIndoaXRlIikKKyAgICAoKCh0eXBlIHR0eSkgKGNsYXNzIG1vbm8pKQorICAgICA6aW52ZXJz ZS12aWRlbyB0KQorICAgICh0IDpmb3JlZ3JvdW5kICJwaW5rIikpCisgICJGYWNlIGZvciBgZmMt aW5hY3RpdmUtYXQtenYtZmFjZScgaW4gdGhlIGluYWN0aXZlIHdpbmRvdy4iCisgIDpncm91cCAn Ky1tb2RlKQorCisoZGVmZmFjZSBmYy1wb3N0LXp2LWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikg KG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiZ3Jh eTQwIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxp Z2h0KSkKKyAgICAgOmZvcmVncm91bmQgImdyZXk1NSIpCisgICAgKCgoY2xhc3MgY29sb3IpICht aW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgImdyYXk0 MCIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBsaWdo dCkpCisgICAgIDpmb3JlZ3JvdW5kICJncmV5NTUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWlu LWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIikKKyAgICAoKCh0eXBlIHR0eSkg KGNsYXNzIG1vbm8pKQorICAgICA6aW52ZXJzZS12aWRlbyB0KQorICAgICh0IDpmb3JlZ3JvdW5k ICJwaW5rIikpCisgICJGYWNlIGZvciBgZmMtcG9zdC16di1mYWNlJyBpbiB0aGUgYWN0aXZlIHdp bmRvdy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSBmYy1pbmFjdGl2ZS1wb3N0LXp2 LWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGRh cmspKQorICAgICA6Zm9yZWdyb3VuZCAiRGFya0JsdWUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAo bWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAiZ3Jl eTg1IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRh cmspKQorICAgICA6Zm9yZWdyb3VuZCAiRGFya0JsdWUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAo bWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAiZ3Jl eTg1IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgOCkpCisgICAgIDpmb3JlZ3Jv dW5kICJ3aGl0ZSIpCisgICAgKCgodHlwZSB0dHkpIChjbGFzcyBtb25vKSkKKyAgICAgOmludmVy c2UtdmlkZW8gdCkKKyAgICAodCA6Zm9yZWdyb3VuZCAicGluayIpKQorICAiRmFjZSBmb3IgYGZj LWluYWN0aXZlLXBvc3QtenYtZmFjZScgaW4gdGhlIGluYWN0aXZlIHdpbmRvdy4iCisgIDpncm91 cCAnKy1tb2RlKQorCisoZGVmZmFjZSBmYy1vcG9pbnQtcHJlLXp2LWZhY2UKKyAgJygodCAoOmZv cmVncm91bmQgIm1hZ2VudGExIikpKQorICAiRmFjZSBmb3IgYGZjLW9wb2ludC1wcmUtenYtZmFj ZScgaW4gdGhlIGFjdGl2ZSB3aW5kb3cuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2Ug ZmMtb3BvaW50LWluYWN0aXZlLXByZS16di1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJtYWdl bnRhNCIpKSkKKyAgIkZhY2UgZm9yIGBmYy1vcG9pbnQtaW5hY3RpdmUtcHJlLXp2LWZhY2UnIGlu IHRoZSBpbmFjdGl2ZSB3aW5kb3cuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgZmMt b3BvaW50LWF0LXp2LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImN5YW4xIikpKQorICAiRmFj ZSBmb3IgYGZjLW9wb2ludC1hdC16di1mYWNlJyBpbiB0aGUgYWN0aXZlIHdpbmRvdy4iCisgIDpn cm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSBmYy1vcG9pbnQtaW5hY3RpdmUtYXQtenYtZmFjZQor ICAnKCh0ICg6Zm9yZWdyb3VuZCAiY3lhbjQiKSkpCisgICJGYWNlIGZvciBgZmMtb3BvaW50LWlu YWN0aXZlLWF0LXp2LWZhY2UnIGluIHRoZSBpbmFjdGl2ZSB3aW5kb3cuIgorICA6Z3JvdXAgJyst bW9kZSkKKworKGRlZmZhY2UgZmMtb3BvaW50LXBvc3QtenYtZmFjZQorICAnKCh0ICg6Zm9yZWdy b3VuZCAicHVycGxlMyIpKSkKKyAgIkZhY2UgZm9yIGBmYy1vcG9pbnQtcG9zdC16di1mYWNlJyBp biB0aGUgYWN0aXZlIHdpbmRvdy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSBmYy1v cG9pbnQtaW5hY3RpdmUtcG9zdC16di1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJwdXJwbGU0 IikpKQorICAiRmFjZSBmb3IgYGZjLW9wb2ludC1pbmFjdGl2ZS1wb3N0LXp2LWZhY2UnIGluIHRo ZSBpbmFjdGl2ZSB3aW5kb3cuIgorICA6Z3JvdXAgJystbW9kZSkKKworOzs7IGVuZCBNVUxUSVBM RS1DVVJTT1JTCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKworCiAoZGVmZmFjZSBlc2NhcGUt Z2x5cGgKICAgJygoKChiYWNrZ3JvdW5kIGRhcmspKSA6Zm9yZWdyb3VuZCAiY3lhbiIpCiAgICAg OzsgU2VlIHRoZSBjb21tZW50IGluIG1pbmlidWZmZXItcHJvbXB0IGZvcgpkaWZmIC0tZ2l0IGEv c3JjL2J1ZmZlci5jIGIvc3JjL2J1ZmZlci5jCmluZGV4IDIwOWUyOWYuLmQ4OThhOTQgMTAwNjQ0 Ci0tLSBhL3NyYy9idWZmZXIuYworKysgYi9zcmMvYnVmZmVyLmMKQEAgLTEzMyw2ICsxMzMsNjkg QEAgQ0hFQ0tfT1ZFUkxBWSAoTGlzcF9PYmplY3QgeCkKIAogLyogVGhlc2Ugc2V0dGVycyBhcmUg dXNlZCBvbmx5IGluIHRoaXMgZmlsZSwgc28gdGhleSBjYW4gYmUgcHJpdmF0ZS4KICAgIFRoZSBw dWJsaWMgc2V0dGVycyBhcmUgaW5saW5lIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGJ1ZmZlci5oLiAg Ki8KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIGJlZ2luIE1VTFRJUExFLUNVUlNP UlMgKi8KKworc3RhdGljIHZvaWQKK2JzZXRfbWNfcmVhbF9mYWtlX2N1cnNvciAoc3RydWN0IGJ1 ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5tY19yZWFsX2Zha2VfY3Vyc29yXyA9 IHZhbDsKK30KKworc3RhdGljIHZvaWQKK2JzZXRfbWNfY29uZiAoc3RydWN0IGJ1ZmZlciAqYiwg TGlzcF9PYmplY3QgdmFsKQoreworICBiLT5tY19jb25mXyA9IHZhbDsKK30KKworc3RhdGljIHZv aWQKK2JzZXRfbWNfaW5hY3RpdmVfd2luZG93cyAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmpl Y3QgdmFsKQoreworICBiLT5tY19pbmFjdGl2ZV93aW5kb3dzXyA9IHZhbDsKK30KKworc3RhdGlj IHZvaWQKK2JzZXRfY3Jvc3NoYWlycyAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFs KQoreworICBiLT5jcm9zc2hhaXJzXyA9IHZhbDsKK30KKworc3RhdGljIHZvaWQKK2JzZXRfY2hf aG9yaXpvbnRhbF9ydWxlciAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQorewor ICBiLT5jaF9ob3Jpem9udGFsX3J1bGVyXyA9IHZhbDsKK30KKworc3RhdGljIHZvaWQKK2JzZXRf Y2hfdmVydGljYWxfcnVsZXIgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sK KyAgYi0+Y2hfdmVydGljYWxfcnVsZXJfID0gdmFsOworfQorCitzdGF0aWMgdm9pZAorYnNldF9j aF9pbmFjdGl2ZV93aW5kb3dzIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7 CisgIGItPmNoX2luYWN0aXZlX3dpbmRvd3NfID0gdmFsOworfQorCitzdGF0aWMgdm9pZAorYnNl dF9mY192aXNpYmxlIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGIt PmZjX3Zpc2libGVfID0gdmFsOworfQorCitzdGF0aWMgdm9pZAorYnNldF9mY19pbmFjdGl2ZV93 aW5kb3dzIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPmZjX2lu YWN0aXZlX3dpbmRvd3NfID0gdmFsOworfQorCisvKiBlbmQgTVVMVElQTEUtQ1VSU09SUyAqLwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisKKwogc3RhdGljIHZvaWQKIGJzZXRfYWJicmV2X21v ZGUgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKIHsKQEAgLTUxNDUsNiArNTIw OCwyNCBAQCBpbml0X2J1ZmZlcl9vbmNlICh2b2lkKQogICBic2V0X2xhc3Rfc2VsZWN0ZWRfd2lu ZG93ICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBtYWtlX2ZpeG51bSAoMCkpOwogCiAgIGlkeCA9IDE7 CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisK KyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIG1jX3JlYWxfZmFrZV9j dXJzb3IpLCBpZHgpOyArK2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxf ZmxhZ3MsIG1jX2NvbmYpLCBpZHgpOyArK2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZm ZXJfbG9jYWxfZmxhZ3MsIG1jX2luYWN0aXZlX3dpbmRvd3MpLCBpZHgpOyArK2lkeDsKKyAgWFNF VEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIGNyb3NzaGFpcnMpLCBpZHgpOyAr K2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIGNoX2hvcml6 b250YWxfcnVsZXIpLCBpZHgpOyArK2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJf bG9jYWxfZmxhZ3MsIGNoX3ZlcnRpY2FsX3J1bGVyKSwgaWR4KTsgKytpZHg7CisgIFhTRVRGQVNU SU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBjaF9pbmFjdGl2ZV93aW5kb3dzKSwgaWR4 KTsgKytpZHg7CisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBmY192 aXNpYmxlKSwgaWR4KTsgKytpZHg7CisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2Fs X2ZsYWdzLCBmY19pbmFjdGl2ZV93aW5kb3dzKSwgaWR4KTsgKytpZHg7CisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworCisKICAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxh Z3MsIG1vZGVfbGluZV9mb3JtYXQpLCBpZHgpOyArK2lkeDsKICAgWFNFVEZBU1RJTlQgKEJWQVIg KCZidWZmZXJfbG9jYWxfZmxhZ3MsIGFiYnJldl9tb2RlKSwgaWR4KTsgKytpZHg7CiAgIFhTRVRG QVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBvdmVyd3JpdGVfbW9kZSksIGlkeCk7 ICsraWR4OwpAQCAtNTIzMSw2ICs1MzEyLDI0IEBAIGluaXRfYnVmZmVyX29uY2UgKHZvaWQpCiAg IC8qIE11c3QgZG8gdGhlc2UgYmVmb3JlIG1ha2luZyB0aGUgZmlyc3QgYnVmZmVyISAqLwogCiAg IC8qIHJlYWwgc2V0dXAgaXMgZG9uZSBpbiBiaW5kaW5ncy5lbCAqLworCisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIGJzZXRfbWNfcmVhbF9m YWtlX2N1cnNvciAoJmJ1ZmZlcl9kZWZhdWx0cywgUWhvbGxvdyk7CisgIGJzZXRfbWNfY29uZiAo JmJ1ZmZlcl9kZWZhdWx0cywgUW5pbCk7CisgIGJzZXRfbWNfaW5hY3RpdmVfd2luZG93cyAoJmJ1 ZmZlcl9kZWZhdWx0cywgUXQpOworICBic2V0X2Nyb3NzaGFpcnMgKCZidWZmZXJfZGVmYXVsdHMs IFFuaWwpOworICBic2V0X2NoX2hvcml6b250YWxfcnVsZXIgKCZidWZmZXJfZGVmYXVsdHMsIFF0 KTsKKyAgYnNldF9jaF92ZXJ0aWNhbF9ydWxlciAoJmJ1ZmZlcl9kZWZhdWx0cywgUXQpOworICBi c2V0X2NoX2luYWN0aXZlX3dpbmRvd3MgKCZidWZmZXJfZGVmYXVsdHMsIFF0KTsKKyAgYnNldF9m Y192aXNpYmxlICgmYnVmZmVyX2RlZmF1bHRzLCBRbmlsKTsKKyAgYnNldF9mY19pbmFjdGl2ZV93 aW5kb3dzICgmYnVmZmVyX2RlZmF1bHRzLCBRdCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LworCisKICAgYnNldF9tb2RlX2xpbmVfZm9ybWF0ICgmYnVmZmVyX2RlZmF1bHRzLCBidWlsZF9w dXJlX2Nfc3RyaW5nICgiJS0iKSk7CiAgIGJzZXRfaGVhZGVyX2xpbmVfZm9ybWF0ICgmYnVmZmVy X2RlZmF1bHRzLCBRbmlsKTsKICAgYnNldF9hYmJyZXZfbW9kZSAoJmJ1ZmZlcl9kZWZhdWx0cywg UW5pbCk7CkBAIC01NDYxLDYgKzU1NjAsNTEgQEAgZGVmdmFyX3Blcl9idWZmZXIgKHN0cnVjdCBM aXNwX0J1ZmZlcl9PYmpmd2QgKmJvX2Z3ZCwgY29uc3QgY2hhciAqbmFtZXN0cmluZywKIHZvaWQK IHN5bXNfb2ZfYnVmZmVyICh2b2lkKQogeworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor LyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIERFRlNZTSAoUW1jX3JlYWxfZmFrZV9jdXJzb3Is ICJtYy1yZWFsLWZha2UtY3Vyc29yIik7CisgIERFRlZBUl9QRVJfQlVGRkVSICgibWMtcmVhbC1m YWtlLWN1cnNvciIsICZCVkFSIChjdXJyZW50X2J1ZmZlciwgbWNfcmVhbF9mYWtlX2N1cnNvciks IFFuaWwsCisgICAgZG9jOiAvKiBBIGJ1ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIHNldCB0aGUgY3Vy c29yIHR5cGUgb2YgdGhlIHJlYWwgZmFrZSBjdXJzb3IuICovKTsKKworICBERUZTWU0gKFFtY19j b25mLCAibWMtY29uZiIpOworICBERUZWQVJfUEVSX0JVRkZFUiAoIm1jLWNvbmYiLCAmQlZBUiAo Y3VycmVudF9idWZmZXIsIG1jX2NvbmYpLCBRbmlsLAorICAgIGRvYzogLyogQSBidWZlci1sb2Nh bCB2YXJpYWJsZSB0byBzdG9yZSB0aGUgdmFsdWUgb2YgdGhlIG11bHRpcGxlIGN1cnNvcnMgdG8g YmUgZGlzcGxheWVkCitkdXJpbmcgdGhlIG5leHQgcmVkaXNwbGF5LiAqLyk7CisKKyAgREVGU1lN IChRbWNfaW5hY3RpdmVfd2luZG93cywgIm1jLWluYWN0aXZlLXdpbmRvd3MiKTsKKyAgREVGVkFS X1BFUl9CVUZGRVIgKCJtYy1pbmFjdGl2ZS13aW5kb3dzIiwgJkJWQVIgKGN1cnJlbnRfYnVmZmVy LCBtY19pbmFjdGl2ZV93aW5kb3dzKSwgUW5pbCwKKyAgICBkb2M6IC8qIFdoZW4gbm9uLW5pbCwg ZHJhdyBtdWx0aXBsZSBjdXJzb3JzIGluIGluYWN0aXZlIHdpbmRvd3MuICovKTsKKworICBERUZT WU0gKFFjcm9zc2hhaXJzLCAiY3Jvc3NoYWlycyIpOworICBERUZWQVJfUEVSX0JVRkZFUiAoImNy b3NzaGFpcnMiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIGNyb3NzaGFpcnMpLCBRbmlsLAorICAg IGRvYzogLyogQSBidWZlci1sb2NhbCB2YXJpYWJsZSB0byBhY3RpdmF0ZS9kZWFjdGl2YXRlIGNy b3NzaGFpcnMuICovKTsKKworICBERUZTWU0gKFFjaF9ob3Jpem9udGFsX3J1bGVyLCAiY2gtaG9y aXpvbnRhbC1ydWxlciIpOworICBERUZWQVJfUEVSX0JVRkZFUiAoImNoLWhvcml6b250YWwtcnVs ZXIiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIGNoX2hvcml6b250YWxfcnVsZXIpLCBRbmlsLAor ICAgIGRvYzogLyogQSBidWZlci1sb2NhbCB2YXJpYWJsZSB0byBhY3RpdmF0ZS9kZWFjdGl2YXRl IHRoZSBjcm9zc2hhaXJzIGhvcml6b250YWwgcnVsZXIuICovKTsKKworICBERUZTWU0gKFFjaF92 ZXJ0aWNhbF9ydWxlciwgImNoLXZlcnRpY2FsLXJ1bGVyIik7CisgIERFRlZBUl9QRVJfQlVGRkVS ICgiY2gtdmVydGljYWwtcnVsZXIiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIGNoX3ZlcnRpY2Fs X3J1bGVyKSwgUW5pbCwKKyAgICBkb2M6IC8qIEEgYnVmZXItbG9jYWwgdmFyaWFibGUgdG8gYWN0 aXZhdGUvZGVhY3RpdmF0ZSB0aGUgY3Jvc3NoYWlycyB2ZXJ0aWNhbCBydWxlci4gKi8pOworCisg IERFRlNZTSAoUWNoX2luYWN0aXZlX3dpbmRvd3MsICJjaC1pbmFjdGl2ZS13aW5kb3dzIik7Cisg IERFRlZBUl9QRVJfQlVGRkVSICgiY2gtaW5hY3RpdmUtd2luZG93cyIsICZCVkFSIChjdXJyZW50 X2J1ZmZlciwgY2hfaW5hY3RpdmVfd2luZG93cyksIFFuaWwsCisgICAgZG9jOiAvKiBXaGVuIG5v bi1uaWwsIGRyYXcgY3Jvc3NoYWlycyBpbiBpbmFjdGl2ZSB3aW5kb3dzLiAqLyk7CisKKyAgREVG U1lNIChRZmNfdmlzaWJsZSwgImZjLXZpc2libGUiKTsKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJm Yy12aXNpYmxlIiwgJkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBmY192aXNpYmxlKSwgUW5pbCwKKyAg ICBkb2M6IC8qIEEgYnVmZXItbG9jYWwgdmFyaWFibGUgdG8gdHVybiBvbi9vZmYgdGhlIG11bHRp cGxlIGN1cnNvcnMgZmlsbCBjb2x1bW4uICovKTsKKworICBERUZTWU0gKFFmY192aXNpYmxlX2lu YWN0aXZlX3dpbmRvdywgImZjLWluYWN0aXZlLXdpbmRvdyIpOworICBERUZWQVJfUEVSX0JVRkZF UiAoImZjLWluYWN0aXZlLXdpbmRvd3MiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIGZjX2luYWN0 aXZlX3dpbmRvd3MpLCBRbmlsLAorICAgIGRvYzogLyogV2hlbiBub24tbmlsLCBkcmF3IG11bHRp cGxlIGN1cnNvcnMgZmlsbCBjb2x1bW4gaW4gaW5hY3RpdmUgd2luZG93cy4gKi8pOworCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKworCiAgIHN0YXRpY3BybyAoJmxhc3Rfb3ZlcmxheV9tb2Rp ZmljYXRpb25faG9va3MpOwogICBsYXN0X292ZXJsYXlfbW9kaWZpY2F0aW9uX2hvb2tzID0gbWFr ZV9uaWxfdmVjdG9yICgxMCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuaCBiL3NyYy9idWZm ZXIuaAppbmRleCAyMDgwYTZmLi4xYWRhOTNlIDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmgKKysr IGIvc3JjL2J1ZmZlci5oCkBAIC03NDAsNiArNzQwLDQwIEBAIHN0cnVjdCBidWZmZXIKICAgICAg aW4gdGhlIGRpc3BsYXkgb2YgdGhpcyBidWZmZXIuICAqLwogICBMaXNwX09iamVjdCBleHRyYV9s aW5lX3NwYWNpbmdfOwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUt Q1VSU09SUyAqLworCisgIC8qIFRoZSBjdXJzb3IgdHlwZSBvZiB0aGUgcmVhbCBmYWtlIGN1cnNv ci4gKi8KKyAgTGlzcF9PYmplY3QgbWNfcmVhbF9mYWtlX2N1cnNvcl87CisKKyAgLyogVGhlIG5h bWUgb2YgbGlzdCB1c2VkIGJ5IG11bHRpcGxlIGN1cnNvcnMgZm9yIG5leHQgcmVkaXNwbGF5LiAq LworICBMaXNwX09iamVjdCBtY19jb25mXzsKKworICAvKiBXaGV0aGVyIHRvIGRyYXcgbXVsdGlw bGUgY3Vyc29ycyBpbiBpbmFjdGl2ZSB3aW5kb3dzLiAqLworICBMaXNwX09iamVjdCBtY19pbmFj dGl2ZV93aW5kb3dzXzsKKworICAvKiBUaGUgbmFtZSBvZiB0aGUgYnVmZmVyLWxvY2FsIHZhcmlh YmxlLiAqLworICBMaXNwX09iamVjdCBjcm9zc2hhaXJzXzsKKworICAvKiBUaGUgbmFtZSBvZiB0 aGUgY3Jvc3NoYWlycyBob3Jpem9udGFsIHJ1bGVyLiAqLworICBMaXNwX09iamVjdCBjaF9ob3Jp em9udGFsX3J1bGVyXzsKKworICAvKiBUaGUgbmFtZSBvZiB0aGUgY3Jvc3NoYWlycyB2ZXJ0aWNh bCBydWxlci4gKi8KKyAgTGlzcF9PYmplY3QgY2hfdmVydGljYWxfcnVsZXJfOworCisgIC8qIFdo ZXRoZXIgdG8gZHJhdyBjcm9zc2hhaXJzIGluIGluYWN0aXZlIHdpbmRvd3MuICovCisgIExpc3Bf T2JqZWN0IGNoX2luYWN0aXZlX3dpbmRvd3NfOworCisgIC8qIFRoZSBuYW1lIG9mIHRoZSBidWZm ZXItbG9jYWwgdmFyaWFibGUuICovCisgIExpc3BfT2JqZWN0IGZjX3Zpc2libGVfOworCisgIC8q IFdoZXRoZXIgdG8gZHJhdyBtdWx0aXBsZSBjdXJzb3JzIGZpbGwgY29sdW1uIGluIGluYWN0aXZl IHdpbmRvd3MuICovCisgIExpc3BfT2JqZWN0IGZjX2luYWN0aXZlX3dpbmRvd3NfOworCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKworCiAgIC8qIEN1cnNvciB0eXBlIHRvIGRpc3BsYXkgaW4g bm9uLXNlbGVjdGVkIHdpbmRvd3MuCiAgICAgIHQgbWVhbnMgdG8gdXNlIGhvbGxvdyBib3ggY3Vy c29yLgogICAgICBTZWUgYGN1cnNvci10eXBlJyBmb3Igb3RoZXIgdmFsdWVzLiAgKi8KQEAgLTc5 MSwxNCArODI1LDIxIEBAIHN0cnVjdCBidWZmZXIKICAgICAgYW4gaW5kaXJlY3QgYnVmZmVyIHNp bmNlIGl0IGNvdW50cyBhcyBpdHMgYmFzZSBidWZmZXIuICAqLwogICBpbnQgd2luZG93X2NvdW50 OwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLwor CiAgIC8qIEEgbm9uLXplcm8gdmFsdWUgaW4gc2xvdCBJRFggbWVhbnMgdGhhdCBwZXItYnVmZmVy IHZhcmlhYmxlCiAgICAgIHdpdGggaW5kZXggSURYIGhhcyBhIGxvY2FsIHZhbHVlIGluIHRoaXMg YnVmZmVyLiAgVGhlIGluZGV4IElEWAogICAgICBmb3IgYSBidWZmZXItbG9jYWwgdmFyaWFibGUg aXMgc3RvcmVkIGluIHRoYXQgdmFyaWFibGUncyBzbG90CiAgICAgIGluIGJ1ZmZlcl9sb2NhbF9m bGFncyBhcyBhIExpc3AgaW50ZWdlci4gIElmIHRoZSBpbmRleCBpcyAtMSwKICAgICAgdGhpcyBt ZWFucyB0aGUgdmFyaWFibGUgaXMgYWx3YXlzIGxvY2FsIGluIGFsbCBidWZmZXJzLiAgKi8KLSNk ZWZpbmUgTUFYX1BFUl9CVUZGRVJfVkFSUyA1MAorI2RlZmluZSBNQVhfUEVSX0JVRkZFUl9WQVJT IDYwCiAgIGNoYXIgbG9jYWxfZmxhZ3NbTUFYX1BFUl9CVUZGRVJfVkFSU107CiAKKy8qICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLworCisKICAgLyogU2V0IHRvIHRoZSBtb2R0aW1lIG9mIHRoZSB2aXNp dGVkIGZpbGUgd2hlbiByZWFkIG9yIHdyaXR0ZW4uCiAgICAgIG1vZHRpbWUudHZfbnNlYyA9PSBO T05FWElTVEVOVF9NT0RUSU1FX05TRUNTIG1lYW5zCiAgICAgIHZpc2l0ZWQgZmlsZSB3YXMgbm9u ZXhpc3RlbnQuICBtb2R0aW1lLnR2X25zZWMgPT0KQEAgLTkwNyw2ICs5NDgsNjkgQEAgWEJVRkZF UiAoTGlzcF9PYmplY3QgYSkKIC8qIE1vc3QgY29kZSBzaG91bGQgdXNlIHRoZXNlIGZ1bmN0aW9u cyB0byBzZXQgTGlzcCBmaWVsZHMgaW4gc3RydWN0CiAgICBidWZmZXIuICAoU29tZSBzZXR0ZXJz IHRoYXQgYXJlIHByaXZhdGUgdG8gYSBzaW5nbGUgLmMgZmlsZSBhcmUKICAgIGRlZmluZWQgYXMg c3RhdGljIGluIHRob3NlIGZpbGVzLikgICovCisKKworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisvKiBiZWdpbiBNVUxUSVBMRS1DVVJTT1JTICovCisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9t Y19yZWFsX2Zha2VfY3Vyc29yIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7 CisgIGItPm1jX3JlYWxfZmFrZV9jdXJzb3JfID0gdmFsOworfQorCitJTkxJTkUgdm9pZAorYnNl dF9ibHZfbWNfY29uZiAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBi LT5tY19jb25mXyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRfYmx2X21jX2luYWN0aXZl X3dpbmRvd3MgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgYi0+bWNf aW5hY3RpdmVfd2luZG93c18gPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9jcm9z c2hhaXJzIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPmNyb3Nz aGFpcnNfID0gdmFsOworfQorCitJTkxJTkUgdm9pZAorYnNldF9ibHZfY2hfaG9yaXpvbnRhbF9y dWxlciAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5jaF9ob3Jp em9udGFsX3J1bGVyXyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRfYmx2X2NoX3ZlcnRp Y2FsX3J1bGVyIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPmNo X3ZlcnRpY2FsX3J1bGVyXyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRfYmx2X2NoX2lu YWN0aXZlX3dpbmRvd3MgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAg Yi0+Y2hfaW5hY3RpdmVfd2luZG93c18gPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCitic2V0X2Js dl9mY192aXNpYmxlIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGIt PmZjX3Zpc2libGVfID0gdmFsOworfQorCitJTkxJTkUgdm9pZAorYnNldF9ibHZfZmNfaW5hY3Rp dmVfd2luZG93cyAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5m Y19pbmFjdGl2ZV93aW5kb3dzXyA9IHZhbDsKK30KKworLyogZW5kIE1VTFRJUExFLUNVUlNPUlMg Ki8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIElOTElORSB2b2lkCiBic2V0X2JpZGlf cGFyYWdyYXBoX2RpcmVjdGlvbiAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQog ewpkaWZmIC0tZ2l0IGEvc3JjL2Rpc3BleHRlcm4uaCBiL3NyYy9kaXNwZXh0ZXJuLmgKaW5kZXgg NGU5NDdkYS4uOGRiNWIwYiAxMDA2NDQKLS0tIGEvc3JjL2Rpc3BleHRlcm4uaAorKysgYi9zcmMv ZGlzcGV4dGVybi5oCkBAIC0xNDUsNiArMTQ1LDEzMSBAQCB0eXBlZGVmIHZvaWQgKkVtYWNzX0N1 cnNvcjsKICNkZWZpbmUgTmF0aXZlUmVjdGFuZ2xlIGludAogI2VuZGlmCiAKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBiZWdpbiBNVUxUSVBMRS1DVVJTT1JTICovCisKK2V4dGVybiBi b29sIG1jX3N0ZGVycl9wIEVYVEVSTkFMTFlfVklTSUJMRTsKKworc3RydWN0IGdseXBoOworCitz dHJ1Y3QgZ2x5cGhfcm93OworCitzdHJ1Y3QgZ2x5cGhfbWF0cml4OworCitlbnVtIGRyYXdfZ2x5 cGhzX2ZhY2U7CisKK2VudW0gZ2x5cGhfcm93X2FyZWE7CisKK3N0cnVjdCBtY19tYXRyaXg7CisK K2VudW0gbWNfY2FjaGVfdHlwZTsKKworZW51bSBtY19jdXJzb3JfdHlwZTsKKworZW51bSBtY19m bGF2b3I7CisKK3N0cnVjdCBtY19SR0I7CisKK3N0cnVjdCBtY19lc3NlbnRpYWxzOworCitlbnVt IG1jX2RyYXdfcm93X3R5cGU7CisKK2VudW0gbWNfZW5naW5lX3R5cGU7CisKK2VudW0gbWNfcm93 X3Bvc2l0aW9uOworCitlbnVtIG1jX3JlZHJhd19yb3dfdHlwZTsKKworZW51bSBkcmF3X2dseXBo X2FjdGlvbjsKKworZXh0ZXJuIExpc3BfT2JqZWN0IG1jX2xpc3RuIChwdHJkaWZmX3QsIExpc3Bf T2JqZWN0LCAuLi4pOworCitleHRlcm4gTGlzcF9PYmplY3QgbWNfbnRoIChpbnQsIExpc3BfT2Jq ZWN0KTsKKworZXh0ZXJuIExpc3BfT2JqZWN0IG1jX2Fzc3EgKExpc3BfT2JqZWN0LCBMaXNwX09i amVjdCk7CisKK2V4dGVybiBlbnVtIG1jX3Jvd19wb3NpdGlvbiBtY19yb3dfcG9zaXRpb24gKHN0 cnVjdCB3aW5kb3cgKiwgc3RydWN0IGdseXBoX3JvdyAqLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdseXBoX3JvdyAqLCBpbnQpOworCitleHRl cm4gcHRyZGlmZl90IG1jX3JlZ2lvbl9saW1pdCAoYm9vbCk7CisKK2V4dGVybiBzdHJ1Y3QgZ2x5 cGggKiBtY19nZXRfY3Vyc29yX2dseXBoIChzdHJ1Y3Qgd2luZG93ICosIHN0cnVjdCBnbHlwaF9t YXRyaXggKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZ2x5cGhfcm93ICosIGludCwgaW50KTsKKworZXh0ZXJuIHZvaWQgbWNfeHdfY29sb3JfdmFs dWVzIChzdHJ1Y3Qgd2luZG93ICosIExpc3BfT2JqZWN0LCBzdHJ1Y3QgbWNfUkdCICopOworCitl eHRlcm4gYm9vbCBtY191cGRhdGVfd2luZG93X2ZyaW5nZXMgKHN0cnVjdCB3aW5kb3cgKiwgYm9v bCk7CisKK2V4dGVybiBjaGFyICogbWNfd2luZG93IChzdHJ1Y3Qgd2luZG93ICopOworCitleHRl cm4gY2hhciAqIG1jX2NoYXJfdG9fc3RyaW5nIChpbnQpOworCitleHRlcm4gY2hhciAqIG1jX2N1 cnNvcl90eXBlX3RvX3N0cmluZyAoZW51bSBtY19jdXJzb3JfdHlwZSk7CisKK2V4dGVybiBjaGFy ICogbWNfZmxhdm9yX3RvX3N0cmluZyAoZW51bSBtY19mbGF2b3IpOworCitleHRlcm4gY2hhciAq IG1jX2NhY2hlX3R5cGVfdG9fc3RyaW5nIChlbnVtIG1jX2NhY2hlX3R5cGUpOworCitleHRlcm4g Y2hhciAqIG1jX3JlZHJhd19yb3dfdHlwZV90b19zdHJpbmcgKGVudW0gbWNfcmVkcmF3X3Jvd190 eXBlKTsKKworZXh0ZXJuIHZvaWQgbWNfY2FjaGVfaW5zcGVjdG9yIChzdHJ1Y3Qgd2luZG93ICos IHN0cnVjdCBtY19tYXRyaXgpOworCitleHRlcm4gYm9vbCBtY190cmF2ZXJzZV9jYWNoZV9wIChz dHJ1Y3QgbWNfbWF0cml4LCBlbnVtIG1jX2NhY2hlX3R5cGUsIGludCwgaW50KTsKKworZXh0ZXJu IHZvaWQgbWNfZHJhd19mcmluZ2VfYml0bWFwIChzdHJ1Y3Qgd2luZG93ICosIHN0cnVjdCBnbHlw aF9yb3cgKiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1j X2N1cnNvcl90eXBlKTsKKworZXh0ZXJuIGludCBtY19nZXRfZnJpbmdlX2JpdG1hcCAoc3RydWN0 IHdpbmRvdyAqLCBMaXNwX09iamVjdCwgaW50LCBpbnQpOworCitleHRlcm4gdm9pZCBtY19lbmdp bmUgKHN0cnVjdCB3aW5kb3cgKiwgc3RydWN0IGdseXBoX21hdHJpeCAqLCBzdHJ1Y3QgZ2x5cGhf cm93ICosCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaCAqLCBpbnQsIGludCwg aW50LCBpbnQsIGludCwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1jX2N1cnNv cl90eXBlLCBpbnQsIHN0cnVjdCBnbHlwaF9tYXRyaXggKiwKKyAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IG1jX2Vzc2VudGlhbHMsIGVudW0gbWNfcm93X3Bvc2l0aW9uLCBzdHJ1Y3QgbWNf UkdCLAorICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1jX2VuZ2luZV90eXBlLCBib29sLCBl bnVtIG1jX2RyYXdfcm93X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWNfY2Fj aGVfdHlwZSk7CisKK2V4dGVybiB2b2lkIG1jX3NldF9lc3NlbnRpYWxzIChzdHJ1Y3Qgd2luZG93 ICosIHN0cnVjdCBtY19lc3NlbnRpYWxzICopOworCitleHRlcm4gdm9pZCBtY19kcmF3X3JvdyAo c3RydWN0IHdpbmRvdyAqLCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICosIHN0cnVjdCBnbHlwaF9yb3cg KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5cGggKiwgaW50LCBpbnQsIGlu dCwgc3RydWN0IGdseXBoX21hdHJpeCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBtY19lc3NlbnRpYWxzLCBlbnVtIG1jX3Jvd19wb3NpdGlvbiwgYm9vbCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBlbnVtIG1jX2RyYXdfcm93X3R5cGUpOworCitleHRlcm4gYm9vbCBtY19y ZWRyYXdfcm93IChzdHJ1Y3Qgd2luZG93ICosIHN0cnVjdCBnbHlwaF9tYXRyaXggKiwgc3RydWN0 IGdseXBoX3JvdyAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnbHlwaF9yb3df YXJlYSwgaW50LCBpbnQsIGludCwgYm9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu dW0gZHJhd19nbHlwaHNfZmFjZSwgZW51bSBtY19yZWRyYXdfcm93X3R5cGUpOworCitleHRlcm4g dm9pZCBtY19yZXNldF9jYWNoZSAoc3RydWN0IHdpbmRvdyAqKTsKKworZXh0ZXJuIHZvaWQgbWNf ZHJhd19jdXJzb3JfZ2x5cGggKHN0cnVjdCB3aW5kb3cgKiwgc3RydWN0IGdseXBoX21hdHJpeCAq LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKiwg ZW51bSBkcmF3X2dseXBoc19mYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCwgaW50LCBpbnQsIHN0cnVjdCBtY19SR0IsIGVudW0gbWNfZmxhdm9yLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWNfY3Vyc29yX3R5cGUsIGludCwgYm9vbCwg Ym9vbCk7CisKK2V4dGVybiB2b2lkIG1jX2VyYXNlX2N1cnNvciAoc3RydWN0IHdpbmRvdyAqLCBz dHJ1Y3QgZ2x5cGhfbWF0cml4ICosIHN0cnVjdCBnbHlwaF9yb3cgKiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IG1jX21hdHJpeCwgaW50LCBpbnQsIGludCwgaW50LCBlbnVt IG1jX2ZsYXZvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBtY19jdXJzb3Jf dHlwZSwgaW50KTsKKworZXh0ZXJuIHZvaWQgbWNfZHJhd19lcmFzZV9oeWJyaWQgKHN0cnVjdCB3 aW5kb3cgKiwgc3RydWN0IGdseXBoX21hdHJpeCAqLCBzdHJ1Y3QgZ2x5cGhfcm93ICosCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu dCwgaW50LCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBtY19j dXJzb3JfdHlwZSwgaW50LCBzdHJ1Y3QgbWNfUkdCLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvb2wsIGVudW0gbWNfZmxhdm9yLCBib29sKTsKKworZXh0ZXJuIGludCBtY19k cmF3X2dseXBocyAoc3RydWN0IHdpbmRvdyAqLCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICosIHN0cnVj dCBnbHlwaF9yb3cgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtY19tYXRy aXgsIGludCwgZW51bSBnbHlwaF9yb3dfYXJlYSwgcHRyZGlmZl90LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHRyZGlmZl90LCBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2UsIGludCwgaW50LCBz dHJ1Y3QgbWNfUkdCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBtY19mbGF2b3Is IGVudW0gbWNfY3Vyc29yX3R5cGUsIGludCwgYm9vbCwgYm9vbCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gZHJhd19nbHlwaF9hY3Rpb24sIGJvb2wpOworCitleHRlcm4gc3RydWN0 IGdseXBoX21hdHJpeCAqIG1jX3NhdmVfZ2x5cGhfbWF0cml4IChzdHJ1Y3QgZ2x5cGhfbWF0cml4 ICopOworCitleHRlcm4gdm9pZCBtY19yZXN0b3JlX2dseXBoX21hdHJpeCAoc3RydWN0IGdseXBo X21hdHJpeCAqLCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICopOworCisvKiBlbmQgTVVMVElQTEUtQ1VS U09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogLyogVGV4dCBjdXJzb3IgdHlw ZXMuICAqLwogCiBlbnVtIHRleHRfY3Vyc29yX2tpbmRzCkBAIC00MDQsNiArNTI5LDE4IEBAIHN0 cnVjdCBnbHlwaF9zbGljZQogCiBzdHJ1Y3QgZ2x5cGgKIHsKKworCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBpbnQgcmVsYXRpdmVfeCwgaHBv czsKKworICBwdHJkaWZmX3QgYnl0ZXBvczsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisK KwogICAvKiBQb3NpdGlvbiBmcm9tIHdoaWNoIHRoaXMgZ2x5cGggd2FzIGRyYXduLiAgSWYgYG9i amVjdCcgYmVsb3cgaXMgYQogICAgICBMaXNwIHN0cmluZywgdGhpcyBpcyBhbiBpbmRleCBpbnRv IHRoYXQgc3RyaW5nLiAgSWYgaXQgaXMgYQogICAgICBidWZmZXIsIHRoaXMgaXMgYSBwb3NpdGlv biBpbiB0aGF0IGJ1ZmZlci4gIEluIGFkZGl0aW9uLCBzb21lCkBAIC0xMjcwLDYgKzE0MDcsMjgg QEAgZW51bSBkcmF3X2dseXBoc19mYWNlCiAKIHN0cnVjdCBnbHlwaF9zdHJpbmcKIHsKKworCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgIGJv b2xfYmYgbGVmdF9vdmVyd3JpdHRlbl9wIDogMTsKKworICAgIGJvb2xfYmYgcmlnaHRfb3Zlcndy aXR0ZW5fcCA6IDE7CisKKyAgICBib29sX2JmIHJlY3RhbmdsZV9udWtlZF9wIDogMTsKKworICAg IGJvb2xfYmYgYmFja2dyb3VuZF9udWtlZF9wIDogMTsKKworICAgIGVudW0gZHJhd19nbHlwaF9h Y3Rpb24KKyAgICB7CisgICAgICBNQ19EUkFXX0dMWVBIX1NUUklORywKKyAgICAgIE1DX0VSQVNF X0dMWVBIX1NUUklORworICAgIH0gYWN0aW9uX3R5cGU7CisKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworCisKICAgLyogWC1vcmlnaW4gb2YgdGhlIHN0cmluZy4gICovCiAgIGludCB4OwogCkBA IC0yODM0LDYgKzI5OTMsMjkgQEAgdHlwZWRlZiB2b2lkICgqZnJhbWVfcGFybV9oYW5kbGVyKSAo c3RydWN0IGZyYW1lICosIExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCk7CiAKIHN0cnVjdCByZWRp c3BsYXlfaW50ZXJmYWNlCiB7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxU SVBMRS1DVVJTT1JTICovCisKKy8qIGByZWRpc3BsYXlfaW50ZXJmYWNlJyBpbiBgbnN0ZXJtLm1g IHwgYHczMnRlcm0uY2AgfCBgeHRlcm0uY2AgbXVzdCBiZSBpbiB0aGUKK2V4YWN0IHNhbWUgb3Jk ZXIgYXMgdGhlIGByZWRpc3BsYXlfaW50ZXJmYWNlJyBpbiBgZGlzcGV4dGVybi5oYCEgKi8KKwor ICAvKiBgbWNfbnNfZHJhd193aW5kb3dfY3Vyc29yJyB8IGBtY193MzJfZHJhd193aW5kb3dfY3Vy c29yJyB8IGBtY194X2RyYXdfd2luZG93X2N1cnNvcicgKi8KKyAgdm9pZCAoKm1jX3NjcmliZV9j dXJzb3IpIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsCisg ICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBoX3JvdywgaW50IHgsIGludCBmeCwgaW50IHks IGludCBmeSwgaW50IGhwb3MsCisgICAgICAgIGludCB2cG9zLCBpbnQgd2QsIGludCBoLCBzdHJ1 Y3QgbWNfUkdCIGxzbCwgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZSwKKyAgICAgICAg aW50IGN1cnNvcl93aWR0aCwgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yLCBib29sIG9uX3As IGJvb2wgYWN0aXZlX3ApOworCisgIC8qIGBtY19uc19kcmF3X2dseXBoX3N0cmluZycgfCBgbWNf dzMyX2RyYXdfZ2x5cGhfc3RyaW5nJyB8IGBtY194X2RyYXdfZ2x5cGhfc3RyaW5nJyAqLworICB2 b2lkICgqbWNfc2NyaWJlX3N0cmluZykgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIHN0cnVjdCBn bHlwaF9tYXRyaXggKm1hdHJpeCwKKyAgICAgICAgc3RydWN0IGdseXBoX3JvdyAqcm93LCBzdHJ1 Y3QgbWNfbWF0cml4IG1jX21hdHJpeCwgc3RydWN0IG1jX1JHQiBsc2wsCisgICAgICAgIGVudW0g bWNfZmxhdm9yIGdseXBoX2ZsYXZvciwgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZSwg aW50IHdkLAorICAgICAgICBib29sIGFjdGl2ZV9wLCBib29sIGN1cnNvcl9nY19wKTsKKworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisKKwogICAvKiBIYW5kbGVycyBmb3Igc2V0dGluZyBmcmFt ZSBwYXJhbWV0ZXJzLiAgKi8KICAgZnJhbWVfcGFybV9oYW5kbGVyICpmcmFtZV9wYXJtX2hhbmRs ZXJzOwogCmRpZmYgLS1naXQgYS9zcmMvZGlzcG5ldy5jIGIvc3JjL2Rpc3BuZXcuYwppbmRleCAw MTMxYjYzLi44NTg3ZmViIDEwMDY0NAotLS0gYS9zcmMvZGlzcG5ldy5jCisrKyBiL3NyYy9kaXNw bmV3LmMKQEAgLTU2LDYgKzU2LDE3ODIgQEAgYWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJZiBub3Qs IHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KICNpbmNsdWRlICJ3MzIu aCIKICNlbmRpZgogDAorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogYmVnaW4gTVVM VElQTEUtQ1VSU09SUyAqLworCitzdHJ1Y3QgZ2x5cGhzX3NraXBwZWQKK3sKKyAgcHRyZGlmZl90 IGFsbG9jYXRlZDsKKyAgcHRyZGlmZl90IHVzZWQ7CisgIHN0cnVjdCBza2lwcGVkX2l0ZW1zCisg ICAgeworICAgICAgaW50IHg7CisgICAgICBpbnQgaHBvczsKKyAgICAgIGJvb2wgZW5hYmxlZF9w OworICAgIH0gKnNraXBwZWQ7Cit9IGFycmF5X2dseXBoc19za2lwcGVkOworCitzdHJ1Y3QgbWNf cm93X2VudHJ5Cit7CisgIGludCBvbGRfdXNlcywgbmV3X3VzZXM7CisgIGludCBuZXdfbGluZV9u dW1iZXI7CisgIHB0cmRpZmZfdCBidWNrZXQ7CisgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdzsKKyAg c3RydWN0IG1jX3Jvd19lbnRyeSAqbmV4dDsKK307CitzdGF0aWMgc3RydWN0IG1jX3Jvd19lbnRy eSAqbWNfcm93X2VudHJ5X3Bvb2w7CitzdGF0aWMgcHRyZGlmZl90IG1jX3Jvd19lbnRyeV9wb29s X3NpemU7CitzdGF0aWMgcHRyZGlmZl90IG1jX3Jvd19lbnRyeV9pZHg7CitzdGF0aWMgc3RydWN0 IG1jX3Jvd19lbnRyeSAqKm1jX3Jvd190YWJsZTsKK3N0YXRpYyBwdHJkaWZmX3QgbWNfcm93X3Rh YmxlX3NpemU7CitzdGF0aWMgc3RydWN0IG1jX3Jvd19lbnRyeSAqKm1jX29sZF9saW5lcywgKipt Y19uZXdfbGluZXM7CitzdGF0aWMgcHRyZGlmZl90IG1jX29sZF9saW5lc19zaXplLCBtY19uZXdf bGluZXNfc2l6ZTsKK3N0YXRpYyBzdHJ1Y3QgcnVuICptY19ydW5fcG9vbDsKK3N0YXRpYyBwdHJk aWZmX3QgbWNfcnVuc19zaXplOworc3RhdGljIHN0cnVjdCBydW4gKiptY19ydW5zOworCitzdGF0 aWMgYm9vbCB1cGRhdGVfd2luZG93X2xpbmUgKHN0cnVjdCB3aW5kb3cgKiwgaW50LCBib29sICop OworCitzdGF0aWMgdm9pZCB1cGRhdGVfbWFyZ2luYWxfYXJlYSAoc3RydWN0IHdpbmRvdyAqLCBz dHJ1Y3QgZ2x5cGhfcm93ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBnbHlwaF9yb3dfYXJlYSwgaW50KTsKKworc3RhdGljIHZvaWQgbWFrZV9jdXJyZW50IChzdHJ1 Y3QgZ2x5cGhfbWF0cml4ICosIHN0cnVjdCBnbHlwaF9tYXRyaXggKiwgaW50KTsKKworc3RhdGlj IGJvb2wgcm93X2VxdWFsX3AgKHN0cnVjdCBnbHlwaF9yb3cgKiwgc3RydWN0IGdseXBoX3JvdyAq LCBib29sKTsKKworc3RhdGljIHZvaWQgYXNzaWduX3JvdyAoc3RydWN0IGdseXBoX3JvdyAqLCBz dHJ1Y3QgZ2x5cGhfcm93ICopOworCitzdGF0aWMgYm9vbAorbWNfdmVyaWZ5X3Jvd19oYXNoIChz dHJ1Y3QgZ2x5cGhfcm93ICpyb3cpCit7CisgIHJldHVybiByb3ctPmhhc2ggPT0gcm93X2hhc2gg KHJvdyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWNfcm93X2VudHJ5ICoKK21jX2FkZF9yb3dfZW50 cnkgKHN0cnVjdCBnbHlwaF9yb3cgKnJvdykKK3sKKyAgc3RydWN0IG1jX3Jvd19lbnRyeSAqZW50 cnk7CisgIHB0cmRpZmZfdCBpID0gcm93LT5oYXNoICUgbWNfcm93X3RhYmxlX3NpemU7CisgIGVu dHJ5ID0gbWNfcm93X3RhYmxlW2ldOworICBlYXNzZXJ0IChlbnRyeSB8fCBtY192ZXJpZnlfcm93 X2hhc2ggKHJvdykpOworICB3aGlsZSAoZW50cnkgJiYgIXJvd19lcXVhbF9wIChlbnRyeS0+cm93 LCByb3csIDEpKQorICAgIGVudHJ5ID0gZW50cnktPm5leHQ7CisgIGlmIChlbnRyeSA9PSBOVUxM KQorICAgIHsKKyAgICAgIGVudHJ5ID0gbWNfcm93X2VudHJ5X3Bvb2wgKyBtY19yb3dfZW50cnlf aWR4Kys7CisgICAgICBlbnRyeS0+cm93ID0gcm93OworICAgICAgZW50cnktPm9sZF91c2VzID0g ZW50cnktPm5ld191c2VzID0gMDsKKyAgICAgIGVudHJ5LT5uZXdfbGluZV9udW1iZXIgPSAwOwor ICAgICAgZW50cnktPmJ1Y2tldCA9IGk7CisgICAgICBlbnRyeS0+bmV4dCA9IG1jX3Jvd190YWJs ZVtpXTsKKyAgICAgIG1jX3Jvd190YWJsZVtpXSA9IGVudHJ5OworICAgIH0KKyAgcmV0dXJuIGVu dHJ5OworfQorCitzdHJ1Y3QgbWNfbWF0cml4CittY19zYXZlX2NhY2hlX21hdHJpeCAoc3RydWN0 IG1jX21hdHJpeCBtYXRyaXgpCit7CisgIHN0cnVjdCBtY19tYXRyaXggc2F2ZWQ7CisgIHNhdmVk LnZwb3NfYWxsb2NhdGVkID0gbWF0cml4LnZwb3NfYWxsb2NhdGVkOworICBzYXZlZC52cG9zX3Vz ZWQgPSBtYXRyaXgudnBvc191c2VkOworICBzYXZlZC52cG9zID0geHphbGxvYyAoc2F2ZWQudnBv c19hbGxvY2F0ZWQgKiBzaXplb2YgKnNhdmVkLnZwb3MpOworICBmb3IgKGVudW0gbWNfY2FjaGVf dHlwZSBjYWNoZV90eXBlID0gTUNfQ0FDSEU7CisgICAgICAgY2FjaGVfdHlwZSA8IE5PX0NBQ0hF OworICAgICAgICsrY2FjaGVfdHlwZSkKKyAgICBzYXZlZC5jdXJzb3JzX3VzZWRbY2FjaGVfdHlw ZV0gPSBtYXRyaXguY3Vyc29yc191c2VkW2NhY2hlX3R5cGVdOworICBmb3IgKGludCB2bnRoID0g MDsgdm50aCA8IG1hdHJpeC52cG9zX2FsbG9jYXRlZDsgKyt2bnRoKQorICAgIHsKKyAgICAgIGZv ciAoZW51bSBtY19jYWNoZV90eXBlIGNhY2hlX3R5cGUgPSBNQ19DQUNIRTsKKyAgICAgICAgICAg Y2FjaGVfdHlwZSA8IE5PX0NBQ0hFOworICAgICAgICAgICArK2NhY2hlX3R5cGUpCisgICAgICAg IHsKKyAgICAgICAgICBzYXZlZC52cG9zW3ZudGhdLmNhY2hlX2FsbG9jYXRlZFtjYWNoZV90eXBl XSA9IG1hdHJpeC52cG9zW3ZudGhdLmNhY2hlX2FsbG9jYXRlZFtjYWNoZV90eXBlXTsKKyAgICAg ICAgICBzYXZlZC52cG9zW3ZudGhdLmNhY2hlX3VzZWRbY2FjaGVfdHlwZV0gPSBtYXRyaXgudnBv c1t2bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5cGVdOworICAgICAgICAgIGlmIChtYXRyaXgudnBv c1t2bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5cGVdKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBwdHJkaWZmX3QgbmJ5dGVzID0gbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVfdXNlZFtjYWNo ZV90eXBlXSAqIHNpemVvZiAoc3RydWN0IG1jX2NvbnRlbnRzKTsKKyAgICAgICAgICAgICAgc2F2 ZWQudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXSA9IHhtYWxsb2MgKG5ieXRlcyk7CisgICAg ICAgICAgICAgIG1lbWNweSAoc2F2ZWQudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXSwgbWF0 cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV0sIG5ieXRlcyk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiBzYXZlZDsKK30KKwordm9pZAorbWNfeGZyZWVf Y2FjaGVfbWF0cml4IChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgbWNfbWF0cml4ICptYXRyaXgp Cit7CisgIGlmIChtYXRyaXgtPnZwb3MgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIGZvciAoaW50 IHZudGggPSAwOyB2bnRoIDwgbWF0cml4LT52cG9zX2FsbG9jYXRlZDsgKyt2bnRoKQorICAgIHsK KyAgICAgIGZvciAoZW51bSBtY19jYWNoZV90eXBlIGNhY2hlX3R5cGUgPSBNQ19DQUNIRTsKKyAg ICAgICAgICAgY2FjaGVfdHlwZSA8IE5PX0NBQ0hFOworICAgICAgICAgICArK2NhY2hlX3R5cGUp CisgICAgICAgIGlmIChtYXRyaXgtPnZwb3Nbdm50aF0uY2FjaGVfYWxsb2NhdGVkW2NhY2hlX3R5 cGVdID4gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICB4ZnJlZSAobWF0cml4LT52cG9zW3Zu dGhdLmNhY2hlW2NhY2hlX3R5cGVdKTsKKyAgICAgICAgICAgIG1hdHJpeC0+dnBvc1t2bnRoXS5j YWNoZVtjYWNoZV90eXBlXSA9IE5VTEw7CisgICAgICAgICAgICBtYXRyaXgtPnZwb3Nbdm50aF0u Y2FjaGVfYWxsb2NhdGVkW2NhY2hlX3R5cGVdID0gMDsKKyAgICAgICAgICAgIG1hdHJpeC0+dnBv c1t2bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5cGVdID0gMDsKKyAgICAgICAgICB9CisgICAgfQor ICB4ZnJlZSAobWF0cml4LT52cG9zKTsKKyAgbWF0cml4LT52cG9zID0gTlVMTDsKKyAgbWF0cml4 LT52cG9zX2FsbG9jYXRlZCA9IDA7CisgIG1hdHJpeC0+dnBvc191c2VkID0gMDsKKyAgZm9yIChl bnVtIG1jX2NhY2hlX3R5cGUgY2FjaGVfdHlwZSA9IE1DX0NBQ0hFOworICAgICAgIGNhY2hlX3R5 cGUgPCBOT19DQUNIRTsKKyAgICAgICArK2NhY2hlX3R5cGUpCisgICAgbWF0cml4LT5jdXJzb3Jz X3VzZWRbY2FjaGVfdHlwZV0gPSAwOworfQorCitzdHJ1Y3QgZ2x5cGhfbWF0cml4ICoKK21jX3Nh dmVfZ2x5cGhfbWF0cml4IChzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgpCit7CisgIHN0cnVj dCBnbHlwaF9tYXRyaXggKnNhdmVkID0geHphbGxvYyAoc2l6ZW9mICpzYXZlZCk7CisgIC8vIE5P VF9DT1BJRUQ6ICBzdHJ1Y3QgZ2x5cGhfcG9vbCAqcG9vbDsKKyAgc2F2ZWQtPnJvd3NfYWxsb2Nh dGVkID0gbWF0cml4LT5yb3dzX2FsbG9jYXRlZDsKKyAgc2F2ZWQtPm5yb3dzID0gbWF0cml4LT5u cm93czsKKyAgc2F2ZWQtPnJvd3MgPSB4emFsbG9jIChzYXZlZC0+bnJvd3MgKiBzaXplb2YgKnNh dmVkLT5yb3dzKTsKKyAgc2F2ZWQtPm1hdHJpeF94ID0gbWF0cml4LT5tYXRyaXhfeDsKKyAgc2F2 ZWQtPm1hdHJpeF95ID0gbWF0cml4LT5tYXRyaXhfeTsKKyAgc2F2ZWQtPm1hdHJpeF93ID0gbWF0 cml4LT5tYXRyaXhfdzsKKyAgc2F2ZWQtPm1hdHJpeF9oID0gbWF0cml4LT5tYXRyaXhfaDsKKyAg c2F2ZWQtPndpbmRvd19waXhlbF9sZWZ0ID0gbWF0cml4LT53aW5kb3dfcGl4ZWxfbGVmdDsKKyAg c2F2ZWQtPndpbmRvd19waXhlbF90b3AgPSBtYXRyaXgtPndpbmRvd19waXhlbF90b3A7CisgIHNh dmVkLT53aW5kb3dfaGVpZ2h0ID0gbWF0cml4LT53aW5kb3dfaGVpZ2h0OworICBzYXZlZC0+d2lu ZG93X3dpZHRoID0gbWF0cml4LT53aW5kb3dfd2lkdGg7CisgIHNhdmVkLT53aW5kb3dfdnNjcm9s bCA9IG1hdHJpeC0+d2luZG93X3ZzY3JvbGw7CisgIHNhdmVkLT5sZWZ0X21hcmdpbl9nbHlwaHMg PSBtYXRyaXgtPmxlZnRfbWFyZ2luX2dseXBoczsKKyAgc2F2ZWQtPnJpZ2h0X21hcmdpbl9nbHlw aHMgPSBtYXRyaXgtPnJpZ2h0X21hcmdpbl9nbHlwaHM7CisgIHNhdmVkLT5ub19zY3JvbGxpbmdf cCA9IG1hdHJpeC0+bm9fc2Nyb2xsaW5nX3A7CisgIHNhdmVkLT5oZWFkZXJfbGluZV9wID0gbWF0 cml4LT5oZWFkZXJfbGluZV9wOworI2lmZGVmIEdMWVBIX0RFQlVHCisgIC8vIHNhdmVkLT5tZXRo b2QgPSBtYXRyaXgtPm1ldGhvZDsKKyNlbmRpZgorICAvLyBOT1QgQ09QSUVEOiAgc3RydWN0IGJ1 ZmZlciAqYnVmZmVyOworICBzYXZlZC0+YmVndiA9IG1hdHJpeC0+YmVndjsKKyAgc2F2ZWQtPnp2 ID0gbWF0cml4LT56djsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzYXZlZC0+bnJvd3M7ICsraSkK KyAgICB7CisgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpmcm9tID0gbWF0cml4LT5yb3dzICsgaTsK KyAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKnRvID0gc2F2ZWQtPnJvd3MgKyBpOworICAgICAgcHRy ZGlmZl90IG5ieXRlcyA9IGZyb20tPnVzZWRbVEVYVF9BUkVBXSAqIHNpemVvZiAoc3RydWN0IGds eXBoKTsKKyAgICAgIHRvLT5nbHlwaHNbVEVYVF9BUkVBXSA9IHhtYWxsb2MgKG5ieXRlcyk7Cisg ICAgICBtZW1jcHkgKHRvLT5nbHlwaHNbVEVYVF9BUkVBXSwgZnJvbS0+Z2x5cGhzW1RFWFRfQVJF QV0sIG5ieXRlcyk7CisgICAgICB0by0+dXNlZFtURVhUX0FSRUFdID0gZnJvbS0+dXNlZFtURVhU X0FSRUFdOworICAgICAgdG8tPmhhc2ggPSBmcm9tLT5oYXNoOworICAgICAgdG8tPnggPSBmcm9t LT54OworICAgICAgdG8tPnkgPSBmcm9tLT55OworICAgICAgdG8tPnBpeGVsX3dpZHRoID0gZnJv bS0+cGl4ZWxfd2lkdGg7CisgICAgICB0by0+YXNjZW50ID0gZnJvbS0+YXNjZW50OworICAgICAg dG8tPmhlaWdodCA9IGZyb20tPmhlaWdodDsKKyAgICAgIHRvLT5waHlzX2FzY2VudCA9IGZyb20t PnBoeXNfYXNjZW50OworICAgICAgdG8tPnBoeXNfaGVpZ2h0ID0gZnJvbS0+cGh5c19oZWlnaHQ7 CisgICAgICB0by0+dmlzaWJsZV9oZWlnaHQgPSBmcm9tLT52aXNpYmxlX2hlaWdodDsKKyAgICAg IHRvLT5leHRyYV9saW5lX3NwYWNpbmcgPSBmcm9tLT5leHRyYV9saW5lX3NwYWNpbmc7CisgICAg ICB0by0+c3RhcnQgPSBmcm9tLT5zdGFydDsKKyAgICAgIHRvLT5lbmQgPSBmcm9tLT5lbmQ7Cisg ICAgICB0by0+bWlucG9zID0gZnJvbS0+bWlucG9zOworICAgICAgdG8tPm1heHBvcyA9IGZyb20t Pm1heHBvczsKKyAgICAgIHRvLT5vdmVybGF5X2Fycm93X2JpdG1hcCA9IGZyb20tPm92ZXJsYXlf YXJyb3dfYml0bWFwOworICAgICAgdG8tPmxlZnRfdXNlcl9mcmluZ2VfYml0bWFwID0gZnJvbS0+ bGVmdF91c2VyX2ZyaW5nZV9iaXRtYXA7CisgICAgICB0by0+cmlnaHRfdXNlcl9mcmluZ2VfYml0 bWFwID0gZnJvbS0+cmlnaHRfdXNlcl9mcmluZ2VfYml0bWFwOworICAgICAgdG8tPmxlZnRfZnJp bmdlX2JpdG1hcCA9IGZyb20tPmxlZnRfZnJpbmdlX2JpdG1hcDsKKyAgICAgIHRvLT5yaWdodF9m cmluZ2VfYml0bWFwID0gZnJvbS0+cmlnaHRfZnJpbmdlX2JpdG1hcDsKKyAgICAgIHRvLT5sZWZ0 X3VzZXJfZnJpbmdlX2ZhY2VfaWQgPSBmcm9tLT5sZWZ0X3VzZXJfZnJpbmdlX2ZhY2VfaWQ7Cisg ICAgICB0by0+cmlnaHRfdXNlcl9mcmluZ2VfZmFjZV9pZCA9IGZyb20tPnJpZ2h0X3VzZXJfZnJp bmdlX2ZhY2VfaWQ7CisgICAgICB0by0+bGVmdF9mcmluZ2VfZmFjZV9pZCA9IGZyb20tPmxlZnRf ZnJpbmdlX2ZhY2VfaWQ7CisgICAgICB0by0+cmlnaHRfZnJpbmdlX2ZhY2VfaWQgPSBmcm9tLT5y aWdodF9mcmluZ2VfZmFjZV9pZDsKKyAgICAgIHRvLT5sZWZ0X2ZyaW5nZV9vZmZzZXQgPSBmcm9t LT5sZWZ0X2ZyaW5nZV9vZmZzZXQ7CisgICAgICB0by0+cmlnaHRfZnJpbmdlX29mZnNldCA9IGZy b20tPnJpZ2h0X2ZyaW5nZV9vZmZzZXQ7CisgICAgICB0by0+ZnJpbmdlX2JpdG1hcF9wZXJpb2Rp Y19wID0gZnJvbS0+ZnJpbmdlX2JpdG1hcF9wZXJpb2RpY19wOworICAgICAgdG8tPnJlZHJhd19m cmluZ2VfYml0bWFwc19wID0gZnJvbS0+cmVkcmF3X2ZyaW5nZV9iaXRtYXBzX3A7CisgICAgICB0 by0+ZW5hYmxlZF9wID0gZnJvbS0+ZW5hYmxlZF9wOworICAgICAgdG8tPnRydW5jYXRlZF9vbl9s ZWZ0X3AgPSBmcm9tLT50cnVuY2F0ZWRfb25fbGVmdF9wOworICAgICAgdG8tPnRydW5jYXRlZF9v bl9yaWdodF9wID0gZnJvbS0+dHJ1bmNhdGVkX29uX3JpZ2h0X3A7CisgICAgICB0by0+Y29udGlu dWVkX3AgPSBmcm9tLT5jb250aW51ZWRfcDsKKyAgICAgIHRvLT5kaXNwbGF5c190ZXh0X3AgPSBm cm9tLT5kaXNwbGF5c190ZXh0X3A7CisgICAgICB0by0+ZW5kc19hdF96dl9wID0gZnJvbS0+ZW5k c19hdF96dl9wOworICAgICAgdG8tPmZpbGxfbGluZV9wID0gZnJvbS0+ZmlsbF9saW5lX3A7Cisg ICAgICB0by0+aW5kaWNhdGVfZW1wdHlfbGluZV9wID0gZnJvbS0+aW5kaWNhdGVfZW1wdHlfbGlu ZV9wOworICAgICAgdG8tPmNvbnRhaW5zX292ZXJsYXBwaW5nX2dseXBoc19wID0gZnJvbS0+Y29u dGFpbnNfb3ZlcmxhcHBpbmdfZ2x5cGhzX3A7CisgICAgICB0by0+ZnVsbF93aWR0aF9wID0gZnJv bS0+ZnVsbF93aWR0aF9wOworICAgICAgdG8tPm1vZGVfbGluZV9wID0gZnJvbS0+bW9kZV9saW5l X3A7CisgICAgICB0by0+b3ZlcmxhcHBlZF9wID0gZnJvbS0+b3ZlcmxhcHBlZF9wOworICAgICAg dG8tPmVuZHNfaW5fbWlkZGxlX29mX2NoYXJfcCA9IGZyb20tPmVuZHNfaW5fbWlkZGxlX29mX2No YXJfcDsKKyAgICAgIHRvLT5zdGFydHNfaW5fbWlkZGxlX29mX2NoYXJfcCA9IGZyb20tPnN0YXJ0 c19pbl9taWRkbGVfb2ZfY2hhcl9wOworICAgICAgdG8tPm92ZXJsYXBwaW5nX3AgPSBmcm9tLT5v dmVybGFwcGluZ19wOworICAgICAgdG8tPm1vdXNlX2ZhY2VfcCA9IGZyb20tPm1vdXNlX2ZhY2Vf cDsKKyAgICAgIHRvLT5lbmRzX2luX25ld2xpbmVfZnJvbV9zdHJpbmdfcCA9IGZyb20tPmVuZHNf aW5fbmV3bGluZV9mcm9tX3N0cmluZ19wOworICAgICAgdG8tPmV4YWN0X3dpbmRvd193aWR0aF9s aW5lX3AgPSBmcm9tLT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wOworICAgICAgdG8tPmN1cnNv cl9pbl9mcmluZ2VfcCA9IGZyb20tPmN1cnNvcl9pbl9mcmluZ2VfcDsKKyAgICAgIHRvLT5lbmRz X2luX2VsbGlwc2lzX3AgPSBmcm9tLT5lbmRzX2luX2VsbGlwc2lzX3A7CisgICAgICB0by0+aW5k aWNhdGVfYm9iX3AgPSBmcm9tLT5pbmRpY2F0ZV9ib2JfcDsKKyAgICAgIHRvLT5pbmRpY2F0ZV90 b3BfbGluZV9wID0gZnJvbS0+aW5kaWNhdGVfdG9wX2xpbmVfcDsKKyAgICAgIHRvLT5pbmRpY2F0 ZV9lb2JfcCA9IGZyb20tPmluZGljYXRlX2VvYl9wOworICAgICAgdG8tPmluZGljYXRlX2JvdHRv bV9saW5lX3AgPSBmcm9tLT5pbmRpY2F0ZV9ib3R0b21fbGluZV9wOworICAgICAgdG8tPnJldmVy c2VkX3AgPSBmcm9tLT5yZXZlcnNlZF9wOworICAgICAgdG8tPmNvbnRpbnVhdGlvbl9saW5lc193 aWR0aCA9IGZyb20tPmNvbnRpbnVhdGlvbl9saW5lc193aWR0aDsKKyAgICAgIHRvLT5jbGlwID0g ZnJvbS0+Y2xpcDsKKyAgICAgIGlmIChmcm9tLT51c2VkW0xFRlRfTUFSR0lOX0FSRUFdKQorICAg ICAgICB7CisgICAgICAgICAgbmJ5dGVzID0gZnJvbS0+dXNlZFtMRUZUX01BUkdJTl9BUkVBXSAq IHNpemVvZiAoc3RydWN0IGdseXBoKTsKKyAgICAgICAgICB0by0+Z2x5cGhzW0xFRlRfTUFSR0lO X0FSRUFdID0geG1hbGxvYyAobmJ5dGVzKTsKKyAgICAgICAgICBtZW1jcHkgKHRvLT5nbHlwaHNb TEVGVF9NQVJHSU5fQVJFQV0sIGZyb20tPmdseXBoc1tMRUZUX01BUkdJTl9BUkVBXSwgbmJ5dGVz KTsKKyAgICAgICAgICB0by0+dXNlZFtMRUZUX01BUkdJTl9BUkVBXSA9IGZyb20tPnVzZWRbTEVG VF9NQVJHSU5fQVJFQV07CisgICAgICAgIH0KKyAgICAgIGlmIChmcm9tLT51c2VkW1JJR0hUX01B UkdJTl9BUkVBXSkKKyAgICAgICAgeworICAgICAgICAgIG5ieXRlcyA9IGZyb20tPnVzZWRbUklH SFRfTUFSR0lOX0FSRUFdICogc2l6ZW9mIChzdHJ1Y3QgZ2x5cGgpOworICAgICAgICAgIHRvLT5n bHlwaHNbUklHSFRfTUFSR0lOX0FSRUFdID0geG1hbGxvYyAobmJ5dGVzKTsKKyAgICAgICAgICBt ZW1jcHkgKHRvLT5nbHlwaHNbUklHSFRfTUFSR0lOX0FSRUFdLCBmcm9tLT5nbHlwaHNbUklHSFRf TUFSR0lOX0FSRUFdLCBuYnl0ZXMpOworICAgICAgICAgIHRvLT51c2VkW1JJR0hUX01BUkdJTl9B UkVBXSA9IGZyb20tPnVzZWRbUklHSFRfTUFSR0lOX0FSRUFdOworICAgICAgICB9CisgICAgfQor ICByZXR1cm4gc2F2ZWQ7Cit9CisKK3ZvaWQKK21jX3Jlc3RvcmVfZ2x5cGhfbWF0cml4IChzdHJ1 Y3QgZ2x5cGhfbWF0cml4ICpzYXZlZCwgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4KQorewor ICAvKiBOT1RFOiAgQXNzdW1lcyB0aGUgbWF0cml4IGJlaW5nIHJlc3RvcmVkIGFscmVhZHkgZXhp c3RzLiAqLworICAvLyBOT1QgUkVTVE9SRUQ6ICBzdHJ1Y3QgZ2x5cGhfcG9vbCAqcG9vbDsKKyAg bWF0cml4LT5yb3dzX2FsbG9jYXRlZCA9IHNhdmVkLT5yb3dzX2FsbG9jYXRlZDsKKyAgbWF0cml4 LT5ucm93cyA9IHNhdmVkLT5ucm93czsKKyAgbWF0cml4LT5tYXRyaXhfeCA9IHNhdmVkLT5tYXRy aXhfeDsKKyAgbWF0cml4LT5tYXRyaXhfeSA9IHNhdmVkLT5tYXRyaXhfeTsKKyAgbWF0cml4LT5t YXRyaXhfdyA9IHNhdmVkLT5tYXRyaXhfdzsKKyAgbWF0cml4LT5tYXRyaXhfaCA9IHNhdmVkLT5t YXRyaXhfaDsKKyAgbWF0cml4LT53aW5kb3dfcGl4ZWxfbGVmdCA9IHNhdmVkLT53aW5kb3dfcGl4 ZWxfbGVmdDsKKyAgbWF0cml4LT53aW5kb3dfcGl4ZWxfdG9wID0gc2F2ZWQtPndpbmRvd19waXhl bF90b3A7CisgIG1hdHJpeC0+d2luZG93X2hlaWdodCA9IHNhdmVkLT53aW5kb3dfaGVpZ2h0Owor ICBtYXRyaXgtPndpbmRvd193aWR0aCA9IHNhdmVkLT53aW5kb3dfd2lkdGg7CisgIG1hdHJpeC0+ d2luZG93X3ZzY3JvbGwgPSBzYXZlZC0+d2luZG93X3ZzY3JvbGw7CisgIG1hdHJpeC0+bGVmdF9t YXJnaW5fZ2x5cGhzID0gc2F2ZWQtPmxlZnRfbWFyZ2luX2dseXBoczsKKyAgbWF0cml4LT5yaWdo dF9tYXJnaW5fZ2x5cGhzID0gc2F2ZWQtPnJpZ2h0X21hcmdpbl9nbHlwaHM7CisgIG1hdHJpeC0+ bm9fc2Nyb2xsaW5nX3AgPSBzYXZlZC0+bm9fc2Nyb2xsaW5nX3A7CisgIG1hdHJpeC0+aGVhZGVy X2xpbmVfcCA9IHNhdmVkLT5oZWFkZXJfbGluZV9wOworI2lmZGVmIEdMWVBIX0RFQlVHCisgIC8v IG1hdHJpeC0+bWV0aG9kID0gc2F2ZWQtPm1ldGhvZDsKKyNlbmRpZgorICAvLyBOT1QgUkVTVE9S RUQ6ICBzdHJ1Y3QgYnVmZmVyICpidWZmZXI7CisgIG1hdHJpeC0+YmVndiA9IHNhdmVkLT5iZWd2 OworICBtYXRyaXgtPnp2ID0gc2F2ZWQtPnp2OworICBmb3IgKGludCBpID0gMDsgaSA8IHNhdmVk LT5ucm93czsgKytpKQorICAgIHsKKyAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKmZyb20gPSBzYXZl ZC0+cm93cyArIGk7CisgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICp0byA9IG1hdHJpeC0+cm93cyAr IGk7CisgICAgICBwdHJkaWZmX3QgbmJ5dGVzID0gZnJvbS0+dXNlZFtURVhUX0FSRUFdICogc2l6 ZW9mIChzdHJ1Y3QgZ2x5cGgpOworICAgICAgbWVtY3B5ICh0by0+Z2x5cGhzW1RFWFRfQVJFQV0s IGZyb20tPmdseXBoc1tURVhUX0FSRUFdLCBuYnl0ZXMpOworICAgICAgdG8tPnVzZWRbVEVYVF9B UkVBXSA9IGZyb20tPnVzZWRbVEVYVF9BUkVBXTsKKyAgICAgIHRvLT5oYXNoID0gZnJvbS0+aGFz aDsKKyAgICAgIHRvLT54ID0gZnJvbS0+eDsKKyAgICAgIHRvLT55ID0gZnJvbS0+eTsKKyAgICAg IHRvLT5waXhlbF93aWR0aCA9IGZyb20tPnBpeGVsX3dpZHRoOworICAgICAgdG8tPmFzY2VudCA9 IGZyb20tPmFzY2VudDsKKyAgICAgIHRvLT5oZWlnaHQgPSBmcm9tLT5oZWlnaHQ7CisgICAgICB0 by0+cGh5c19hc2NlbnQgPSBmcm9tLT5waHlzX2FzY2VudDsKKyAgICAgIHRvLT5waHlzX2hlaWdo dCA9IGZyb20tPnBoeXNfaGVpZ2h0OworICAgICAgdG8tPnZpc2libGVfaGVpZ2h0ID0gZnJvbS0+ dmlzaWJsZV9oZWlnaHQ7CisgICAgICB0by0+ZXh0cmFfbGluZV9zcGFjaW5nID0gZnJvbS0+ZXh0 cmFfbGluZV9zcGFjaW5nOworICAgICAgdG8tPnN0YXJ0ID0gZnJvbS0+c3RhcnQ7CisgICAgICB0 by0+ZW5kID0gZnJvbS0+ZW5kOworICAgICAgdG8tPm1pbnBvcyA9IGZyb20tPm1pbnBvczsKKyAg ICAgIHRvLT5tYXhwb3MgPSBmcm9tLT5tYXhwb3M7CisgICAgICB0by0+b3ZlcmxheV9hcnJvd19i aXRtYXAgPSBmcm9tLT5vdmVybGF5X2Fycm93X2JpdG1hcDsKKyAgICAgIHRvLT5sZWZ0X3VzZXJf ZnJpbmdlX2JpdG1hcCA9IGZyb20tPmxlZnRfdXNlcl9mcmluZ2VfYml0bWFwOworICAgICAgdG8t PnJpZ2h0X3VzZXJfZnJpbmdlX2JpdG1hcCA9IGZyb20tPnJpZ2h0X3VzZXJfZnJpbmdlX2JpdG1h cDsKKyAgICAgIHRvLT5sZWZ0X2ZyaW5nZV9iaXRtYXAgPSBmcm9tLT5sZWZ0X2ZyaW5nZV9iaXRt YXA7CisgICAgICB0by0+cmlnaHRfZnJpbmdlX2JpdG1hcCA9IGZyb20tPnJpZ2h0X2ZyaW5nZV9i aXRtYXA7CisgICAgICB0by0+bGVmdF91c2VyX2ZyaW5nZV9mYWNlX2lkID0gZnJvbS0+bGVmdF91 c2VyX2ZyaW5nZV9mYWNlX2lkOworICAgICAgdG8tPnJpZ2h0X3VzZXJfZnJpbmdlX2ZhY2VfaWQg PSBmcm9tLT5yaWdodF91c2VyX2ZyaW5nZV9mYWNlX2lkOworICAgICAgdG8tPmxlZnRfZnJpbmdl X2ZhY2VfaWQgPSBmcm9tLT5sZWZ0X2ZyaW5nZV9mYWNlX2lkOworICAgICAgdG8tPnJpZ2h0X2Zy aW5nZV9mYWNlX2lkID0gZnJvbS0+cmlnaHRfZnJpbmdlX2ZhY2VfaWQ7CisgICAgICB0by0+bGVm dF9mcmluZ2Vfb2Zmc2V0ID0gZnJvbS0+bGVmdF9mcmluZ2Vfb2Zmc2V0OworICAgICAgdG8tPnJp Z2h0X2ZyaW5nZV9vZmZzZXQgPSBmcm9tLT5yaWdodF9mcmluZ2Vfb2Zmc2V0OworICAgICAgdG8t PmZyaW5nZV9iaXRtYXBfcGVyaW9kaWNfcCA9IGZyb20tPmZyaW5nZV9iaXRtYXBfcGVyaW9kaWNf cDsKKyAgICAgIHRvLT5yZWRyYXdfZnJpbmdlX2JpdG1hcHNfcCA9IGZyb20tPnJlZHJhd19mcmlu Z2VfYml0bWFwc19wOworICAgICAgdG8tPmVuYWJsZWRfcCA9IGZyb20tPmVuYWJsZWRfcDsKKyAg ICAgIHRvLT50cnVuY2F0ZWRfb25fbGVmdF9wID0gZnJvbS0+dHJ1bmNhdGVkX29uX2xlZnRfcDsK KyAgICAgIHRvLT50cnVuY2F0ZWRfb25fcmlnaHRfcCA9IGZyb20tPnRydW5jYXRlZF9vbl9yaWdo dF9wOworICAgICAgdG8tPmNvbnRpbnVlZF9wID0gZnJvbS0+Y29udGludWVkX3A7CisgICAgICB0 by0+ZGlzcGxheXNfdGV4dF9wID0gZnJvbS0+ZGlzcGxheXNfdGV4dF9wOworICAgICAgdG8tPmVu ZHNfYXRfenZfcCA9IGZyb20tPmVuZHNfYXRfenZfcDsKKyAgICAgIHRvLT5maWxsX2xpbmVfcCA9 IGZyb20tPmZpbGxfbGluZV9wOworICAgICAgdG8tPmluZGljYXRlX2VtcHR5X2xpbmVfcCA9IGZy b20tPmluZGljYXRlX2VtcHR5X2xpbmVfcDsKKyAgICAgIHRvLT5jb250YWluc19vdmVybGFwcGlu Z19nbHlwaHNfcCA9IGZyb20tPmNvbnRhaW5zX292ZXJsYXBwaW5nX2dseXBoc19wOworICAgICAg dG8tPmZ1bGxfd2lkdGhfcCA9IGZyb20tPmZ1bGxfd2lkdGhfcDsKKyAgICAgIHRvLT5tb2RlX2xp bmVfcCA9IGZyb20tPm1vZGVfbGluZV9wOworICAgICAgdG8tPm92ZXJsYXBwZWRfcCA9IGZyb20t Pm92ZXJsYXBwZWRfcDsKKyAgICAgIHRvLT5lbmRzX2luX21pZGRsZV9vZl9jaGFyX3AgPSBmcm9t LT5lbmRzX2luX21pZGRsZV9vZl9jaGFyX3A7CisgICAgICB0by0+c3RhcnRzX2luX21pZGRsZV9v Zl9jaGFyX3AgPSBmcm9tLT5zdGFydHNfaW5fbWlkZGxlX29mX2NoYXJfcDsKKyAgICAgIHRvLT5v dmVybGFwcGluZ19wID0gZnJvbS0+b3ZlcmxhcHBpbmdfcDsKKyAgICAgIHRvLT5tb3VzZV9mYWNl X3AgPSBmcm9tLT5tb3VzZV9mYWNlX3A7CisgICAgICB0by0+ZW5kc19pbl9uZXdsaW5lX2Zyb21f c3RyaW5nX3AgPSBmcm9tLT5lbmRzX2luX25ld2xpbmVfZnJvbV9zdHJpbmdfcDsKKyAgICAgIHRv LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wID0gZnJvbS0+ZXhhY3Rfd2luZG93X3dpZHRoX2xp bmVfcDsKKyAgICAgIHRvLT5jdXJzb3JfaW5fZnJpbmdlX3AgPSBmcm9tLT5jdXJzb3JfaW5fZnJp bmdlX3A7CisgICAgICB0by0+ZW5kc19pbl9lbGxpcHNpc19wID0gZnJvbS0+ZW5kc19pbl9lbGxp cHNpc19wOworICAgICAgdG8tPmluZGljYXRlX2JvYl9wID0gZnJvbS0+aW5kaWNhdGVfYm9iX3A7 CisgICAgICB0by0+aW5kaWNhdGVfdG9wX2xpbmVfcCA9IGZyb20tPmluZGljYXRlX3RvcF9saW5l X3A7CisgICAgICB0by0+aW5kaWNhdGVfZW9iX3AgPSBmcm9tLT5pbmRpY2F0ZV9lb2JfcDsKKyAg ICAgIHRvLT5pbmRpY2F0ZV9ib3R0b21fbGluZV9wID0gZnJvbS0+aW5kaWNhdGVfYm90dG9tX2xp bmVfcDsKKyAgICAgIHRvLT5yZXZlcnNlZF9wID0gZnJvbS0+cmV2ZXJzZWRfcDsKKyAgICAgIHRv LT5jb250aW51YXRpb25fbGluZXNfd2lkdGggPSBmcm9tLT5jb250aW51YXRpb25fbGluZXNfd2lk dGg7CisgICAgICB0by0+Y2xpcCA9IGZyb20tPmNsaXA7CisgICAgICB4ZnJlZSAoZnJvbS0+Z2x5 cGhzW1RFWFRfQVJFQV0pOworICAgICAgbmJ5dGVzID0gZnJvbS0+dXNlZFtMRUZUX01BUkdJTl9B UkVBXSAqIHNpemVvZiAoc3RydWN0IGdseXBoKTsKKyAgICAgIGlmIChuYnl0ZXMpCisgICAgICAg IHsKKyAgICAgICAgICBtZW1jcHkgKHRvLT5nbHlwaHNbTEVGVF9NQVJHSU5fQVJFQV0sIGZyb20t PmdseXBoc1tMRUZUX01BUkdJTl9BUkVBXSwgbmJ5dGVzKTsKKyAgICAgICAgICB0by0+dXNlZFtM RUZUX01BUkdJTl9BUkVBXSA9IGZyb20tPnVzZWRbTEVGVF9NQVJHSU5fQVJFQV07CisgICAgICAg ICAgeGZyZWUgKGZyb20tPmdseXBoc1tMRUZUX01BUkdJTl9BUkVBXSk7CisgICAgICAgIH0KKyAg ICAgIGVsc2UKKyAgICAgICAgdG8tPnVzZWRbTEVGVF9NQVJHSU5fQVJFQV0gPSAwOworICAgICAg bmJ5dGVzID0gZnJvbS0+dXNlZFtSSUdIVF9NQVJHSU5fQVJFQV0gKiBzaXplb2YgKHN0cnVjdCBn bHlwaCk7CisgICAgICBpZiAobmJ5dGVzKQorICAgICAgICB7CisgICAgICAgICAgbWVtY3B5ICh0 by0+Z2x5cGhzW1JJR0hUX01BUkdJTl9BUkVBXSwgZnJvbS0+Z2x5cGhzW1JJR0hUX01BUkdJTl9B UkVBXSwgbmJ5dGVzKTsKKyAgICAgICAgICB0by0+dXNlZFtSSUdIVF9NQVJHSU5fQVJFQV0gPSBm cm9tLT51c2VkW1JJR0hUX01BUkdJTl9BUkVBXTsKKyAgICAgICAgICB4ZnJlZSAoZnJvbS0+Z2x5 cGhzW1JJR0hUX01BUkdJTl9BUkVBXSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAg dG8tPnVzZWRbUklHSFRfTUFSR0lOX0FSRUFdID0gMDsKKyAgICB9CisgIHhmcmVlIChzYXZlZC0+ cm93cyk7CisgIHhmcmVlIChzYXZlZCk7Cit9CisKK3ZvaWQKK21jX3hmcmVlX2dseXBoX21hdHJp eCAoc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4KQoreworICBmb3IgKGludCBpID0gMDsgaSA8 IG1hdHJpeC0+bnJvd3M7ICsraSkKKyAgICB7CisgICAgICBwdHJkaWZmX3QgbmJ5dGVzOworICAg ICAgc3RydWN0IGdseXBoX3JvdyAqcm93ID0gbWF0cml4LT5yb3dzICsgaTsKKyAgICAgIG5ieXRl cyA9IHJvdy0+dXNlZFtURVhUX0FSRUFdICogc2l6ZW9mIChzdHJ1Y3QgZ2x5cGgpOworICAgICAg aWYgKG5ieXRlcykKKyAgICAgICAgeGZyZWUgKHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0pOworICAg ICAgbmJ5dGVzID0gcm93LT51c2VkW0xFRlRfTUFSR0lOX0FSRUFdICogc2l6ZW9mIChzdHJ1Y3Qg Z2x5cGgpOworICAgICAgaWYgKG5ieXRlcykKKyAgICAgICAgeGZyZWUgKHJvdy0+Z2x5cGhzW0xF RlRfTUFSR0lOX0FSRUFdKTsKKyAgICAgIG5ieXRlcyA9IHJvdy0+dXNlZFtSSUdIVF9NQVJHSU5f QVJFQV0gKiBzaXplb2YgKHN0cnVjdCBnbHlwaCk7CisgICAgICBpZiAobmJ5dGVzKQorICAgICAg ICB4ZnJlZSAocm93LT5nbHlwaHNbUklHSFRfTUFSR0lOX0FSRUFdKTsKKyAgICB9CisgIHhmcmVl IChtYXRyaXgtPnJvd3MpOworICB4ZnJlZSAobWF0cml4KTsKK30KKworLyogVHJ5IHRvIHJldXNl IHBhcnQgb2YgdGhlIGN1cnJlbnQgZGlzcGxheSBvZiBXIGJ5IHNjcm9sbGluZyBsaW5lcy4KKyAg IEhFQURFUl9MSU5FX1AgbWVhbnMgVyBoYXMgYSBoZWFkZXIgbGluZS4KKyAgIC4gVGhlIGFsZ29y aXRobSBpcyB0YWtlbiBmcm9tIENvbW11bmljYXRpb25zIG9mIHRoZSBBQ00sIEFwcjc4ICJBIFRl Y2huaXF1ZQorICAgICBmb3IgSXNvbGF0aW5nIERpZmZlcmVuY2VzIEJldHdlZW4gRmlsZXMuIiAg SXQgc2hvdWxkIHRha2UgTyhOKSB0aW1lLgorICAgQSBzaG9ydCBvdXRsaW5lIG9mIHRoZSBzdGVw cyBvZiB0aGUgYWxnb3JpdGhtOgorICAgICAxLiBTa2lwIGxpbmVzIGVxdWFsIGF0IHRoZSBzdGFy dCBhbmQgZW5kIG9mIGJvdGggbWF0cmljZXMuCisgICAgIDIuIEVudGVyIHJvd3MgaW4gdGhlIGN1 cnJlbnQgYW5kIGRlc2lyZWQgbWF0cml4IGludG8gYSBzeW1ib2wgdGFibGUsCisgICAgICAgIGNv dW50aW5nIGhvdyBvZnRlbiB0aGV5IGFwcGVhciBpbiBib3RoIG1hdHJpY2VzLgorICAgICAzLiBS b3dzIHRoYXQgYXBwZWFyIGV4YWN0bHkgb25jZSBpbiBib3RoIG1hdHJpY2VzIHNlcnZlIGFzIGFu Y2hvcnMsIGkuZS4gd2UKKyAgICAgICAgYXNzdW1lIHRoYXQgc3VjaCBsaW5lcyBhcmUgbGlrZWx5 IHRvIGhhdmUgYmVlbiBtb3ZlZC4KKyAgICAgNC4gU3RhcnRpbmcgZnJvbSBhbmNob3IgbGluZXMs IGV4dGVuZCByZWdpb25zIHRvIGJlIHNjcm9sbGVkIGJvdGggZm9yd2FyZAorICAgICAgICBhbmQg YmFja3dhcmQuCisgICBWYWx1ZSBpcworICAgICAtMSBpZiBhbGwgcm93cyB3ZXJlIGZvdW5kIHRv IGJlIGVxdWFsLgorICAgICAwIHRvIGluZGljYXRlIHRoYXQgd2UgZGlkIG5vdCBzY3JvbGwgdGhl IGRpc3BsYXksIG9yCisgICAgIDEgaWYgd2UgZGlkIHNjcm9sbC4gKi8KK3N0YXRpYyBpbnQKK21j X3Njcm9sbGluZ193aW5kb3cgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgaGVhZGVyX2xpbmVfcCkK K3sKKyAgc3RydWN0IGdseXBoX21hdHJpeCAqZGVzaXJlZF9tYXRyaXggPSB3LT5kZXNpcmVkX21h dHJpeDsKKyAgc3RydWN0IGdseXBoX21hdHJpeCAqY3VycmVudF9tYXRyaXggPSB3LT5jdXJyZW50 X21hdHJpeDsKKyAgaW50IHliID0gd2luZG93X3RleHRfYm90dG9tX3kgKHcpOworICBwdHJkaWZm X3QgaTsKKyAgaW50IGosIGZpcnN0X29sZCwgZmlyc3RfbmV3LCBsYXN0X29sZCwgbGFzdF9uZXc7 CisgIGludCBucnVucywgcnVuX2lkeDsKKyAgcHRyZGlmZl90IG47CisgIHN0cnVjdCBtY19yb3df ZW50cnkgKmVudHJ5OworICAvLyBzdHJ1Y3QgcmVkaXNwbGF5X2ludGVyZmFjZSAqcmlmID0gRlJB TUVfUklGIChYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpKTsKKyAgLyogU2tpcCBvdmVyIHJvd3Mg ZXF1YWwgYXQgdGhlIHN0YXJ0LiAqLworICBmb3IgKGkgPSBoZWFkZXJfbGluZV9wOyBpIDwgY3Vy cmVudF9tYXRyaXgtPm5yb3dzIC0gMTsgKytpKQorICAgIHsKKyAgICAgIHN0cnVjdCBnbHlwaF9y b3cgKmQgPSBNQVRSSVhfUk9XIChkZXNpcmVkX21hdHJpeCwgaSk7CisgICAgICBzdHJ1Y3QgZ2x5 cGhfcm93ICpjID0gTUFUUklYX1JPVyAoY3VycmVudF9tYXRyaXgsIGkpOworICAgICAgaWYgKGMt PmVuYWJsZWRfcAorICAgICAgICAgICYmIGQtPmVuYWJsZWRfcAorICAgICAgICAgICYmICFkLT5y ZWRyYXdfZnJpbmdlX2JpdG1hcHNfcAorICAgICAgICAgICYmIGMtPnkgPT0gZC0+eQorICAgICAg ICAgICYmIE1BVFJJWF9ST1dfQk9UVE9NX1kgKGMpIDw9IHliCisgICAgICAgICAgJiYgTUFUUklY X1JPV19CT1RUT01fWSAoZCkgPD0geWIKKyAgICAgICAgICAmJiByb3dfZXF1YWxfcCAoYywgZCwg MSkpCisgICAgICAgIHsKKyAgICAgICAgICBhc3NpZ25fcm93IChjLCBkKTsKKyAgICAgICAgICBk LT5lbmFibGVkX3AgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAg YnJlYWs7CisgICAgfQorI2lmZGVmIEhBVkVfWFdJREdFVFMKKyAgLyogQ3VycmVudGx5IHRoaXMg c2VlbXMgbmVlZGVkIHRvIGRldGVjdCB4d2lkZ2V0IG1vdmVtZW50IHJlbGlhYmx5LiAqLworICAg IHJldHVybiAwOworI2VuZGlmCisgIC8qIEdpdmUgdXAgaWYgc29tZSByb3dzIGluIHRoZSBkZXNp cmVkIG1hdHJpeCBhcmUgbm90IGVuYWJsZWQuICovCisgIGlmICghIE1BVFJJWF9ST1dfRU5BQkxF RF9QIChkZXNpcmVkX21hdHJpeCwgaSkpCisgICAgcmV0dXJuIC0xOworICBmaXJzdF9vbGQgPSBm aXJzdF9uZXcgPSBpOworICAvKiBTZXQgbGFzdF9uZXcgdG8gdGhlIGluZGV4ICsgMSBvZiB0aGUg cm93IHRoYXQgcmVhY2hlcyB0aGUKKyAgICAgYm90dG9tIGJvdW5kYXJ5IGluIHRoZSBkZXNpcmVk IG1hdHJpeC4gIEdpdmUgdXAgaWYgd2UgZmluZCBhCisgICAgIGRpc2FibGVkIHJvdyBiZWZvcmUg d2UgcmVhY2ggdGhlIGJvdHRvbSBib3VuZGFyeS4gKi8KKyAgaSA9IGZpcnN0X25ldyArIDE7Cisg IHdoaWxlIChpIDwgZGVzaXJlZF9tYXRyaXgtPm5yb3dzIC0gMSkKKyAgICB7CisgICAgICBpbnQg Ym90dG9tOworICAgICAgaWYgKCEgTUFUUklYX1JPV19FTkFCTEVEX1AgKGRlc2lyZWRfbWF0cml4 LCBpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBib3R0b20gPSBNQVRSSVhfUk9XX0JPVFRP TV9ZIChNQVRSSVhfUk9XIChkZXNpcmVkX21hdHJpeCwgaSkpOworICAgICAgaWYgKGJvdHRvbSA8 PSB5YikKKyAgICAgICAgKytpOworICAgICAgaWYgKGJvdHRvbSA+PSB5YikKKyAgICAgICAgYnJl YWs7CisgICAgfQorICBsYXN0X25ldyA9IGk7CisgIC8qIFNldCBsYXN0X29sZCB0byB0aGUgaW5k ZXggKyAxIG9mIHRoZSByb3cgdGhhdCByZWFjaGVzIHRoZSBib3R0b20KKyAgICAgYm91bmRhcnkg aW4gdGhlIGN1cnJlbnQgbWF0cml4LiAgV2UgZG9uJ3QgbG9vayBhdCB0aGUgZW5hYmxlZAorICAg ICBmbGFnIGhlcmUgYmVjYXVzZSB3ZSBwbGFuIHRvIHJldXNlIHBhcnQgb2YgdGhlIGRpc3BsYXkg ZXZlbiBpZgorICAgICBvdGhlciBwYXJ0cyBhcmUgZGlzYWJsZWQuICovCisgIGkgPSBmaXJzdF9v bGQgKyAxOworICB3aGlsZSAoaSA8IGN1cnJlbnRfbWF0cml4LT5ucm93cyAtIDEpCisgICAgewor ICAgICAgaW50IGJvdHRvbSA9IE1BVFJJWF9ST1dfQk9UVE9NX1kgKE1BVFJJWF9ST1cgKGN1cnJl bnRfbWF0cml4LCBpKSk7CisgICAgICBpZiAoYm90dG9tIDw9IHliKQorICAgICAgICArK2k7Cisg ICAgICBpZiAoYm90dG9tID49IHliKQorICAgICAgICBicmVhazsKKyAgICB9CisgIGxhc3Rfb2xk ID0gaTsKKyAgLyogU2tpcCBvdmVyIHJvd3MgZXF1YWwgYXQgdGhlIGJvdHRvbS4gKi8KKyAgaSA9 IGxhc3RfbmV3OworICBqID0gbGFzdF9vbGQ7CisgIHdoaWxlIChpIC0gMSA+IGZpcnN0X25ldwor ICAgICAgICAgJiYgaiAtIDEgPiBmaXJzdF9vbGQKKyAgICAgICAgICYmIE1BVFJJWF9ST1dfRU5B QkxFRF9QIChjdXJyZW50X21hdHJpeCwgaiAtIDEpCisgICAgICAgICAmJiAoTUFUUklYX1JPVyAo Y3VycmVudF9tYXRyaXgsIGogLSAxKS0+eQorICAgICAgICAgICAgID09IE1BVFJJWF9ST1cgKGRl c2lyZWRfbWF0cml4LCBpIC0gMSktPnkpCisgICAgICAgICAmJiAhTUFUUklYX1JPVyAoZGVzaXJl ZF9tYXRyaXgsIGkgLSAxKS0+cmVkcmF3X2ZyaW5nZV9iaXRtYXBzX3AKKyAgICAgICAgICYmIHJv d19lcXVhbF9wIChNQVRSSVhfUk9XIChkZXNpcmVkX21hdHJpeCwgaSAtIDEpLAorICAgICAgICAg ICAgICAgICAgICAgICAgIE1BVFJJWF9ST1cgKGN1cnJlbnRfbWF0cml4LCBqIC0gMSksIDEpKQor ICAgIC0taSwgLS1qOworICBsYXN0X25ldyA9IGk7CisgIGxhc3Rfb2xkID0gajsKKyAgLyogTm90 aGluZyB0byBkbyBpZiBhbGwgcm93cyBhcmUgZXF1YWwuICovCisgIGlmIChsYXN0X25ldyA9PSBm aXJzdF9uZXcpCisgICAgcmV0dXJuIDA7CisgIC8qIENoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93 IGluIHNpemUgY2FsY3VsYXRpb24uCisgICAgIElmIG5leHRfYWxtb3N0X3ByaW1lIGNoZWNrcyAo TikgZm9yIGRpdmlzaWJpbGl0eSBieSAyLi4xMCwgdGhlbgorICAgICBpdCBjYW4gcmV0dXJuIGF0 IG1vc3QgTiArIDEwLCBlLmcuLCBuZXh0X2FsbW9zdF9wcmltZSAoMSkgPT0gMTEuCisgICAgIFNv LCBzZXQgbmV4dF9hbG1vc3RfcHJpbWVfaW5jcmVtZW50X21heCB0byAxMC4KKyAgICAgSXQncyBq dXN0IGEgY29pbmNpZGVuY2UgdGhhdCBuZXh0X2FsbW9zdF9wcmltZV9pbmNyZW1lbnRfbWF4ID09 CisgICAgIE5FWFRfQUxNT1NUX1BSSU1FX0xJTUlUIC0gMS4gIElmIE5FWFRfQUxNT1NUX1BSSU1F X0xJTUlUIHdlcmUKKyAgICAgMTMsIHRoZW4gbmV4dF9hbG1vc3RfcHJpbWVfaW5jcmVtZW50X21h eCB3b3VsZCBiZSAxNCwgZS5nLiwKKyAgICAgYmVjYXVzZSBuZXh0X2FsbW9zdF9wcmltZSAoMTEz KSB3b3VsZCBiZSAxMjcuICovCisgIHsKKyAgICB2ZXJpZnkgKE5FWFRfQUxNT1NUX1BSSU1FX0xJ TUlUID09IDExKTsKKyAgICBlbnVtIHsgbmV4dF9hbG1vc3RfcHJpbWVfaW5jcmVtZW50X21heCA9 IDEwIH07CisgICAgcHRyZGlmZl90IHJvd190YWJsZV9tYXggPQorICAgICAgKG1pbiAoUFRSRElG Rl9NQVgsIFNJWkVfTUFYKSAvICgzICogc2l6ZW9mICptY19yb3dfdGFibGUpCisgICAgICAgLSBu ZXh0X2FsbW9zdF9wcmltZV9pbmNyZW1lbnRfbWF4KTsKKyAgICBwdHJkaWZmX3QgY3VycmVudF9u cm93c19tYXggPSByb3dfdGFibGVfbWF4IC0gZGVzaXJlZF9tYXRyaXgtPm5yb3dzOworICAgIGlm IChjdXJyZW50X25yb3dzX21heCA8IGN1cnJlbnRfbWF0cml4LT5ucm93cykKKyAgICAgIG1lbW9y eV9mdWxsIChTSVpFX01BWCk7CisgIH0KKyAgLyogUmVhbGxvY2F0ZSB2ZWN0b3JzLCB0YWJsZXMg ZXRjLiBpZiBuZWNlc3NhcnkuICovCisgIGlmIChjdXJyZW50X21hdHJpeC0+bnJvd3MgPiBtY19v bGRfbGluZXNfc2l6ZSkKKyAgICBtY19vbGRfbGluZXMgPSB4cGFsbG9jIChtY19vbGRfbGluZXMs ICZtY19vbGRfbGluZXNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X21h dHJpeC0+bnJvd3MgLSBtY19vbGRfbGluZXNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBJTlRfTUFYLCBzaXplb2YgKm1jX29sZF9saW5lcyk7CisgIGlmIChkZXNpcmVkX21hdHJpeC0+ bnJvd3MgPiBtY19uZXdfbGluZXNfc2l6ZSkKKyAgICBtY19uZXdfbGluZXMgPSB4cGFsbG9jICht Y19uZXdfbGluZXMsICZtY19uZXdfbGluZXNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBkZXNpcmVkX21hdHJpeC0+bnJvd3MgLSBtY19uZXdfbGluZXNfc2l6ZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBJTlRfTUFYLCBzaXplb2YgKm1jX25ld19saW5lcyk7CisgIG4gPSBkZXNp cmVkX21hdHJpeC0+bnJvd3M7CisgIG4gKz0gY3VycmVudF9tYXRyaXgtPm5yb3dzOworICBpZiAo bWNfcm93X3RhYmxlX3NpemUgPCAzICogbikKKyAgICB7CisgICAgICBwdHJkaWZmX3Qgc2l6ZSA9 IG5leHRfYWxtb3N0X3ByaW1lICgzICogbik7CisgICAgICBtY19yb3dfdGFibGUgPSB4bnJlYWxs b2MgKG1jX3Jvd190YWJsZSwgc2l6ZSwgc2l6ZW9mICptY19yb3dfdGFibGUpOworICAgICAgbWNf cm93X3RhYmxlX3NpemUgPSBzaXplOworICAgICAgbWVtc2V0IChtY19yb3dfdGFibGUsIDAsIHNp emUgKiBzaXplb2YgKm1jX3Jvd190YWJsZSk7CisgICAgfQorICBpZiAobiA+IG1jX3Jvd19lbnRy eV9wb29sX3NpemUpCisgICAgbWNfcm93X2VudHJ5X3Bvb2wgPSB4cGFsbG9jIChtY19yb3dfZW50 cnlfcG9vbCwgJm1jX3Jvd19lbnRyeV9wb29sX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuIC0gbWNfcm93X2VudHJ5X3Bvb2xfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0xLCBzaXplb2YgKm1jX3Jvd19lbnRyeV9wb29sKTsKKyAgaWYgKGRlc2lyZWRf bWF0cml4LT5ucm93cyA+IG1jX3J1bnNfc2l6ZSkKKyAgICB7CisgICAgICBtY19ydW5zID0geG5y ZWFsbG9jIChtY19ydW5zLCBkZXNpcmVkX21hdHJpeC0+bnJvd3MsIHNpemVvZiAqbWNfcnVucyk7 CisgICAgICBtY19ydW5fcG9vbCA9IHhucmVhbGxvYyAobWNfcnVuX3Bvb2wsIGRlc2lyZWRfbWF0 cml4LT5ucm93cywgc2l6ZW9mICptY19ydW5fcG9vbCk7CisgICAgICBtY19ydW5zX3NpemUgPSBk ZXNpcmVkX21hdHJpeC0+bnJvd3M7CisgICAgfQorICBucnVucyA9IHJ1bl9pZHggPSAwOworICBt Y19yb3dfZW50cnlfaWR4ID0gMDsKKyAgLyogQWRkIHJvd3MgZnJvbSB0aGUgY3VycmVudCBhbmQg ZGVzaXJlZCBtYXRyaXggdG8gdGhlIGhhc2ggdGFibGUKKyAgICAgcm93X2hhc2hfdGFibGUgdG8g YmUgYWJsZSB0byBmaW5kIGVxdWFsIG9uZXMgcXVpY2tseS4gKi8KKyAgZm9yIChpID0gZmlyc3Rf b2xkOyBpIDwgbGFzdF9vbGQ7ICsraSkKKyAgICB7CisgICAgICBpZiAoTUFUUklYX1JPV19FTkFC TEVEX1AgKGN1cnJlbnRfbWF0cml4LCBpKSkKKyAgICAgICAgeworICAgICAgICAgIGVudHJ5ID0g bWNfYWRkX3Jvd19lbnRyeSAoTUFUUklYX1JPVyAoY3VycmVudF9tYXRyaXgsIGkpKTsKKyAgICAg ICAgICBtY19vbGRfbGluZXNbaV0gPSBlbnRyeTsKKyAgICAgICAgICArK2VudHJ5LT5vbGRfdXNl czsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBtY19vbGRfbGluZXNbaV0gPSBOVUxM OworICAgIH0KKyAgZm9yIChpID0gZmlyc3RfbmV3OyBpIDwgbGFzdF9uZXc7ICsraSkKKyAgICB7 CisgICAgICBlYXNzZXJ0IChNQVRSSVhfUk9XX0VOQUJMRURfUCAoZGVzaXJlZF9tYXRyaXgsIGkp KTsKKyAgICAgIGVudHJ5ID0gbWNfYWRkX3Jvd19lbnRyeSAoTUFUUklYX1JPVyAoZGVzaXJlZF9t YXRyaXgsIGkpKTsKKyAgICAgICsrZW50cnktPm5ld191c2VzOworICAgICAgZW50cnktPm5ld19s aW5lX251bWJlciA9IGk7CisgICAgICBtY19uZXdfbGluZXNbaV0gPSBlbnRyeTsKKyAgICB9Cisg IC8qIElkZW50aWZ5IG1vdmVzIGJhc2VkIG9uIGxpbmVzIHRoYXQgYXJlIHVuaXF1ZSBhbmQgZXF1 YWwKKyAgICAgaW4gYm90aCBtYXRyaWNlcy4gKi8KKyAgZm9yIChpID0gZmlyc3Rfb2xkOyBpIDwg bGFzdF9vbGQ7KQorICAgIGlmIChtY19vbGRfbGluZXNbaV0KKyAgICAgICAgJiYgbWNfb2xkX2xp bmVzW2ldLT5vbGRfdXNlcyA9PSAxCisgICAgICAgICYmIG1jX29sZF9saW5lc1tpXS0+bmV3X3Vz ZXMgPT0gMSkKKyAgICAgIHsKKyAgICAgICAgaW50IHAsIHE7CisgICAgICAgIGludCBuZXdfbGlu ZSA9IG1jX29sZF9saW5lc1tpXS0+bmV3X2xpbmVfbnVtYmVyOworICAgICAgICBzdHJ1Y3QgcnVu ICpydW4gPSBtY19ydW5fcG9vbCArIHJ1bl9pZHgrKzsKKyAgICAgICAgLyogUmVjb3JkIG1vdmUu ICovCisgICAgICAgIHJ1bi0+Y3VycmVudF92cG9zID0gaTsKKyAgICAgICAgcnVuLT5jdXJyZW50 X3kgPSBNQVRSSVhfUk9XIChjdXJyZW50X21hdHJpeCwgaSktPnk7CisgICAgICAgIHJ1bi0+ZGVz aXJlZF92cG9zID0gbmV3X2xpbmU7CisgICAgICAgIHJ1bi0+ZGVzaXJlZF95ID0gTUFUUklYX1JP VyAoZGVzaXJlZF9tYXRyaXgsIG5ld19saW5lKS0+eTsKKyAgICAgICAgcnVuLT5ucm93cyA9IDE7 CisgICAgICAgIHJ1bi0+aGVpZ2h0ID0gTUFUUklYX1JPVyAoY3VycmVudF9tYXRyaXgsIGkpLT5o ZWlnaHQ7CisgICAgICAgIC8qIEV4dGVuZCBiYWNrd2FyZC4gKi8KKyAgICAgICAgcCA9IGkgLSAx OworICAgICAgICBxID0gbmV3X2xpbmUgLSAxOworICAgICAgICB3aGlsZSAocCA+IGZpcnN0X29s ZAorICAgICAgICAgICAgICAgJiYgcSA+IGZpcnN0X25ldworICAgICAgICAgICAgICAgJiYgbWNf b2xkX2xpbmVzW3BdID09IG1jX25ld19saW5lc1txXSkKKyAgICAgICAgICB7CisgICAgICAgICAg ICBpbnQgaCA9IE1BVFJJWF9ST1cgKGN1cnJlbnRfbWF0cml4LCBwKS0+aGVpZ2h0OworICAgICAg ICAgICAgLS1ydW4tPmN1cnJlbnRfdnBvczsKKyAgICAgICAgICAgIC0tcnVuLT5kZXNpcmVkX3Zw b3M7CisgICAgICAgICAgICArK3J1bi0+bnJvd3M7CisgICAgICAgICAgICBydW4tPmhlaWdodCAr PSBoOworICAgICAgICAgICAgcnVuLT5kZXNpcmVkX3kgLT0gaDsKKyAgICAgICAgICAgIHJ1bi0+ Y3VycmVudF95IC09IGg7CisgICAgICAgICAgICAtLXAsIC0tcTsKKyAgICAgICAgICB9CisgICAg ICAgIC8qIEV4dGVuZCBmb3J3YXJkLiAqLworICAgICAgICBwID0gaSArIDE7CisgICAgICAgIHEg PSBuZXdfbGluZSArIDE7CisgICAgICAgIHdoaWxlIChwIDwgbGFzdF9vbGQKKyAgICAgICAgICAg ICAgICYmIHEgPCBsYXN0X25ldworICAgICAgICAgICAgICAgJiYgbWNfb2xkX2xpbmVzW3BdID09 IG1jX25ld19saW5lc1txXSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgaCA9IE1BVFJJ WF9ST1cgKGN1cnJlbnRfbWF0cml4LCBwKS0+aGVpZ2h0OworICAgICAgICAgICAgKytydW4tPm5y b3dzOworICAgICAgICAgICAgcnVuLT5oZWlnaHQgKz0gaDsKKyAgICAgICAgICAgICsrcCwgKytx OworICAgICAgICAgIH0KKyAgICAgICAgLyogSW5zZXJ0IHJ1biBpbnRvIGxpc3Qgb2YgYWxsIHJ1 bnMuICBPcmRlciBydW5zIGJ5IGNvcGllZAorICAgICAgICAgICBwaXhlbCBsaW5lcy4gIE5vdGUg dGhhdCB3ZSByZWNvcmQgcnVucyB0aGF0IGRvbid0IGhhdmUgdG8KKyAgICAgICAgICAgYmUgY29w aWVkIGJlY2F1c2UgdGhleSBhcmUgYWxyZWFkeSBpbiBwbGFjZS4gIFRoaXMgaXMgZG9uZQorICAg ICAgICAgICBiZWNhdXNlIHdlIGNhbiBhdm9pZCBjYWxsaW5nIHVwZGF0ZV93aW5kb3dfbGluZSBp biB0aGlzCisgICAgICAgICAgIGNhc2UuICovCisgICAgICAgIGZvciAocCA9IDA7IHAgPCBucnVu cyAmJiBtY19ydW5zW3BdLT5oZWlnaHQgPiBydW4tPmhlaWdodDsgKytwKQorICAgICAgICAgIDsK KyAgICAgICAgZm9yIChxID0gbnJ1bnM7IHEgPiBwOyAtLXEpCisgICAgICAgICAgbWNfcnVuc1tx XSA9IG1jX3J1bnNbcSAtIDFdOworICAgICAgICBtY19ydW5zW3BdID0gcnVuOworICAgICAgICAr K25ydW5zOworICAgICAgICBpICs9IHJ1bi0+bnJvd3M7CisgICAgICB9CisgICAgICBlbHNlCisg ICAgICAgICsraTsKKyAgLyogRG8gdGhlIG1vdmVzLiAgRG8gaXQgaW4gYSB3YXkgdGhhdCB3ZSBk b24ndCBvdmVyd3JpdGUgc29tZXRoaW5nCisgICAgIHdlIHdhbnQgdG8gY29weSBsYXRlciBvbi4g IFRoaXMgaXMgbm90IHNvbHZhYmxlIGluIGdlbmVyYWwKKyAgICAgYmVjYXVzZSB0aGVyZSBpcyBv bmx5IG9uZSBkaXNwbGF5IGFuZCB3ZSBkb24ndCBoYXZlIGEgd2F5IHRvCisgICAgIGV4Y2hhbmdl IGFyZWFzIG9uIHRoaXMgZGlzcGxheS4gIEV4YW1wbGU6CisgICAgICAgICAgKy0tLS0tLS0tLS0t KyAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgfCAgICAgQSAgICAgfCAgICAgICB8ICAg ICBCICAgICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgLS0+ICArLS0tLS0tLS0tLS0rCisg ICAgICAgICAgfCAgICAgQiAgICAgfCAgICAgICB8ICAgICBBICAgICB8CisgICAgICAgICAgKy0t LS0tLS0tLS0tKyAgICAgICArLS0tLS0tLS0tLS0rCisgICAgIEluc3RlYWQsIHByZWZlciBiaWdn ZXIgbW92ZXMsIGFuZCBpbnZhbGlkYXRlIG1vdmVzIHRoYXQgd291bGQKKyAgICAgY29weSBmcm9t IHdoZXJlIHdlIGNvcGllZCB0by4gKi8KKyAgZm9yIChpID0gMDsgaSA8IG5ydW5zOyArK2kpCisg ICAgaWYgKG1jX3J1bnNbaV0tPm5yb3dzID4gMCkKKyAgICAgIHsKKyAgICAgICAgc3RydWN0IHJ1 biAqciA9IG1jX3J1bnNbaV07CisgICAgICAgIGlmIChyLT5jdXJyZW50X3kgIT0gci0+ZGVzaXJl ZF95KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vICBmcHJpbnRmIChzdGRlcnIsICIlczog IHItPmN1cnJlbnQvZGVzaXJlZF92cG9zICglZC8lZCkgfCByLT5jdXJyZW50L2Rlc2lyZWRfeSAo JWQvJWQpXG4iLAorICAgICAgICAgICAgLy8gICAgICAgICAgIHItPmN1cnJlbnRfeSA8IHItPmRl c2lyZWRfeSA/ICLihpMiIDogIuKGkSIsCisgICAgICAgICAgICAvLyAgICAgICAgICAgci0+Y3Vy cmVudF92cG9zLCByLT5kZXNpcmVkX3Zwb3MsIHItPmN1cnJlbnRfeSwgci0+ZGVzaXJlZF95KTsK KyAgICAgICAgICAgIC8vICByaWYtPmNsZWFyX3dpbmRvd19tb3VzZV9mYWNlICh3KTsKKyAgICAg ICAgICAgIC8vICByaWYtPnNjcm9sbF9ydW5faG9vayAodywgcik7CisgICAgICAgICAgfQorICAg ICAgICAvKiBUcnVuY2F0ZSBydW5zIHRoYXQgY29weSB0byB3aGVyZSB3ZSBjb3BpZWQgdG8sIGFu ZAorICAgICAgICAgICBpbnZhbGlkYXRlIHJ1bnMgdGhhdCBjb3B5IGZyb20gd2hlcmUgd2UgY29w aWVkIHRvLiAqLworICAgICAgICBmb3IgKGogPSBucnVucyAtIDE7IGogPiBpOyAtLWopCisgICAg ICAgICAgeworICAgICAgICAgICAgc3RydWN0IHJ1biAqcCA9IG1jX3J1bnNbal07CisgICAgICAg ICAgICBib29sIHRydW5jYXRlZF9wID0gMDsKKyAgICAgICAgICAgIGlmIChwLT5ucm93cyA+IDAK KyAgICAgICAgICAgICAgICAmJiBwLT5kZXNpcmVkX3kgPCByLT5kZXNpcmVkX3kgKyByLT5oZWln aHQKKyAgICAgICAgICAgICAgICAmJiBwLT5kZXNpcmVkX3kgKyBwLT5oZWlnaHQgPiByLT5kZXNp cmVkX3kpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocC0+ZGVzaXJlZF95 IDwgci0+ZGVzaXJlZF95KQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICBwLT5ucm93cyA9IHItPmRlc2lyZWRfdnBvcyAtIHAtPmRlc2lyZWRfdnBvczsKKyAgICAgICAg ICAgICAgICAgICAgcC0+aGVpZ2h0ID0gci0+ZGVzaXJlZF95IC0gcC0+ZGVzaXJlZF95OworICAg ICAgICAgICAgICAgICAgICB0cnVuY2F0ZWRfcCA9IDE7CisgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICBpbnQgbnJvd3NfY29waWVkID0gKHItPmRlc2lyZWRfdnBvcyArIHItPm5yb3dzCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwLT5kZXNpcmVkX3Zwb3MpOwor ICAgICAgICAgICAgICAgICAgICBpZiAocC0+bnJvd3MgPD0gbnJvd3NfY29waWVkKQorICAgICAg ICAgICAgICAgICAgICAgIHAtPm5yb3dzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBoZWlnaHRfY29waWVkID0gKHItPmRlc2lyZWRfeSArIHItPmhlaWdodAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHAtPmRlc2lyZWRfeSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIHAtPmN1cnJlbnRfdnBvcyArPSBucm93c19jb3BpZWQ7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmRlc2lyZWRfdnBvcyArPSBucm93c19jb3BpZWQ7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPm5yb3dzIC09IG5yb3dzX2NvcGllZDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgcC0+Y3VycmVudF95ICs9IGhlaWdodF9jb3BpZWQ7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmRlc2lyZWRfeSArPSBoZWlnaHRfY29waWVkOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5oZWlnaHQgLT0gaGVpZ2h0X2NvcGllZDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVkX3AgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAoci0+Y3VycmVudF95ICE9IHItPmRlc2lyZWRfeQorICAgICAgICAgICAgICAgIC8q IFRoZSBjb25kaXRpb24gYmVsb3cgaXMgZXF1aXZhbGVudCB0bworICAgICAgICAgICAgICAgICAg ICgocC0+Y3VycmVudF95ID49IHItPmRlc2lyZWRfeQorICAgICAgICAgICAgICAgICAgICAgJiYg cC0+Y3VycmVudF95IDwgci0+ZGVzaXJlZF95ICsgci0+aGVpZ2h0KQorICAgICAgICAgICAgICAg ICAgICB8fCAocC0+Y3VycmVudF95ICsgcC0+aGVpZ2h0ID4gci0+ZGVzaXJlZF95CisgICAgICAg ICAgICAgICAgICAgICAgICAmJiAocC0+Y3VycmVudF95ICsgcC0+aGVpZ2h0CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPD0gci0+ZGVzaXJlZF95ICsgci0+aGVpZ2h0KSkpCisgICAgICAg ICAgICAgICAgICAgYmVjYXVzZSB3ZSBoYXZlIDAgPCBwLT5oZWlnaHQgPD0gci0+aGVpZ2h0LiAq LworICAgICAgICAgICAgICAgICYmIHAtPmN1cnJlbnRfeSA8IHItPmRlc2lyZWRfeSArIHItPmhl aWdodAorICAgICAgICAgICAgICAgICYmIHAtPmN1cnJlbnRfeSArIHAtPmhlaWdodCA+IHItPmRl c2lyZWRfeSkKKyAgICAgICAgICAgICAgcC0+bnJvd3MgPSAwOworICAgICAgICAgICAgLyogUmVv cmRlciBydW5zIGJ5IGNvcGllZCBwaXhlbCBsaW5lcyBpZiB0cnVuY2F0ZWQuICovCisgICAgICAg ICAgICBpZiAodHJ1bmNhdGVkX3AgJiYgcC0+bnJvd3MgPiAwKQorICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgaW50IGsgPSBucnVucyAtIDE7CisgICAgICAgICAgICAgICAgd2hpbGUg KG1jX3J1bnNba10tPm5yb3dzID09IDAgfHwgbWNfcnVuc1trXS0+aGVpZ2h0IDwgcC0+aGVpZ2h0 KQorICAgICAgICAgICAgICAgICAgay0tOworICAgICAgICAgICAgICAgIG1lbW1vdmUgKG1jX3J1 bnMgKyBqLCBtY19ydW5zICsgaiArIDEsIChrIC0gaikgKiBzaXplb2YgKCptY19ydW5zKSk7Cisg ICAgICAgICAgICAgICAgbWNfcnVuc1trXSA9IHA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICB9CisgICAgICAgIC8qIEFzc2lnbiBtYXRyaXggcm93cy4gKi8KKyAgICAgICAgZm9yIChqID0g MDsgaiA8IHItPm5yb3dzOyArK2opCisgICAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IGds eXBoX3JvdyAqZnJvbSwgKnRvOworICAgICAgICAgICAgYm9vbCB0b19vdmVybGFwcGVkX3A7Cisg ICAgICAgICAgICB0byA9IE1BVFJJWF9ST1cgKGN1cnJlbnRfbWF0cml4LCByLT5kZXNpcmVkX3Zw b3MgKyBqKTsKKyAgICAgICAgICAgIGZyb20gPSBNQVRSSVhfUk9XIChkZXNpcmVkX21hdHJpeCwg ci0+ZGVzaXJlZF92cG9zICsgaik7CisgICAgICAgICAgICB0b19vdmVybGFwcGVkX3AgPSB0by0+ b3ZlcmxhcHBlZF9wOworICAgICAgICAgICAgZnJvbS0+cmVkcmF3X2ZyaW5nZV9iaXRtYXBzX3Ag PSBmcm9tLT5mcmluZ2VfYml0bWFwX3BlcmlvZGljX3A7CisgICAgICAgICAgICBhc3NpZ25fcm93 ICh0bywgZnJvbSk7CisgICAgICAgICAgICAvKiBUaGUgYWJvdmUgYGFzc2lnbl9yb3cnIGFjdHVh bGx5IGRvZXMgc3dhcCwgc28gaWYgd2UgaGFkCisgICAgICAgICAgICAgICBhbiBvdmVybGFwIGlu IHRoZSBjb3B5IGRlc3RpbmF0aW9uIG9mIHR3byBydW5zLCB0aGVuCisgICAgICAgICAgICAgICB0 aGUgc2Vjb25kIHJ1biB3b3VsZCBhc3NpZ24gYSBwcmV2aW91c2x5IGRpc2FibGVkIGJvZ3VzCisg ICAgICAgICAgICAgICByb3cuICBCdXQgdGhhbmtzIHRvIHRoZSB0cnVuY2F0aW9uIGNvZGUgaW4g dGhlCisgICAgICAgICAgICAgICBwcmVjZWRpbmcgZm9yLWxvb3AsIHdlIG5vIGxvbmdlciBoYXZl IHN1Y2ggYW4gb3ZlcmxhcCwKKyAgICAgICAgICAgICAgIGFuZCB0aHVzIHRoZSBhc3NpZ25lZCBy b3cgc2hvdWxkIGFsd2F5cyBiZSBlbmFibGVkLiAqLworICAgICAgICAgICAgZWFzc2VydCAodG8t PmVuYWJsZWRfcCk7CisgICAgICAgICAgICBmcm9tLT5lbmFibGVkX3AgPSBmYWxzZTsKKyAgICAg ICAgICAgIHRvLT5vdmVybGFwcGVkX3AgPSB0b19vdmVybGFwcGVkX3A7CisgICAgICAgICAgfQor ICAgICAgfQorICAvKiBDbGVhciB0aGUgaGFzaCB0YWJsZSwgZm9yIHRoZSBuZXh0IHRpbWUuICov CisgIGZvciAoaSA9IDA7IGkgPCBtY19yb3dfZW50cnlfaWR4OyArK2kpCisgICAgbWNfcm93X3Rh YmxlW21jX3Jvd19lbnRyeV9wb29sW2ldLmJ1Y2tldF0gPSBOVUxMOworICAvKiBWYWx1ZSBpcyAx IHRvIGluZGljYXRlIHRoYXQgd2Ugc2Nyb2xsZWQgdGhlIGRpc3BsYXkuICovCisgIHJldHVybiBu cnVucyA+IDA7Cit9CisKKy8qIGBtY191cGRhdGVfdGV4dF9hcmVhJyAoY3Vyc29yIHJvdyk6ICBg ZGVzaXJlZF9yb3dgIC8gYGRlc2lyZWRfcm93YCAvIGB2cG9zYAorICAgYG1jX3VwZGF0ZV90ZXh0 X2FyZWEnIChub3QgY3Vyc29yIHJvdyk6ICBgY3VycmVudF9yb3dgIC8gYGRlc2lyZWRfcm93YCAv IGB2cG9zYAorICAgYG1jX3VwZGF0ZV93aW5kb3dfZHJ5cnVuJzogIGBjdXJyZW50X3Jvd2AgLyBg Y3VycmVudF9yb3dgIC8gYHZwb3NgCisgICBgdXBkYXRlX3dpbmRvdyc6ICBgY3VycmVudF9yb3dg IC8gYGN1cnJlbnRfcm93YCAvIGB2cG9zYAorICAgYG1jX3VwZGF0ZV93aW5kb3dfZnJpbmdlcyc6 ICBgY3VycmVudF9yb3dgIC8gYGN1cnJlbnRfcm93YCAvIGB2cG9zYCovCitlbnVtIG1jX3Jvd19w b3NpdGlvbgorbWNfcm93X3Bvc2l0aW9uIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhf cm93ICpjdXJyZW50X3Jvdywgc3RydWN0IGdseXBoX3JvdyAqZGVzaXJlZF9yb3csIGludCB2cG9z KQoreworICBpbnQgaGVhZGVyX2xpbmVfZm9ybWF0ID0gV0lORE9XX0hFQURFUl9MSU5FX0hFSUdI VCAodyk7CisgIHB0cmRpZmZfdCBib2JfZGlzcmVnYXJkX25hcnJvdyA9IEJVRl9CRUcgKFhCVUZG RVIgKHctPmNvbnRlbnRzKSk7CisgIHB0cmRpZmZfdCBlb2JfZGlzcmVnYXJkX25hcnJvdyA9IEJV Rl9aIChYQlVGRkVSICh3LT5jb250ZW50cykpOworICBwdHJkaWZmX3QgYm9iX3Jlc3BlY3RfbmFy cm93ID0gQlVGX0JFR1YgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSk7CisgIHB0cmRpZmZfdCBlb2Jf cmVzcGVjdF9uYXJyb3cgPSBCVUZfWlYgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSk7CisgIHB0cmRp ZmZfdCBidWZmZXJfc2l6ZSA9IGVvYl9kaXNyZWdhcmRfbmFycm93IC0gYm9iX2Rpc3JlZ2FyZF9u YXJyb3c7CisgIGJvb2wgYnVmZmVyX25hcnJvd2VkX3AgPSAoZW9iX3Jlc3BlY3RfbmFycm93IC0g Ym9iX3Jlc3BlY3RfbmFycm93ICE9IGJ1ZmZlcl9zaXplKTsKKyAgLyogRXhjZXB0IGFzIHRvIHRo ZSBjdXJzb3Igcm93ICh3aGljaCBpcyBwcm9jZXNzZWQgYmVmb3JlIGFsbCBvdGhlciByb3dzKSwg d2UKKyAgcmVseSB1cG9uIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGN1cnJlbnQgbWF0cml4LiAg QXMgdG8gdGhlIGN1cnNvciByb3csIHdlCisgIHJlcGx5IHVwb24gdGhlIHByZXZpb3VzIHJvdyBp biB0aGUgZGVzaXJlZCBtYXRyaXggLS0gdGhpcyBpcyBhY2NlcHRhYmxlIGJlY2F1c2UKKyAgdGhl IHBvaW50ZXJzIGJldHdlZW4gZGVzaXJlZC9jdXJyZW50IHJvdyBtYXRyaWNlcyBoYXZlIG5vdCB5 ZXQgYmVlbiBzd2FwcGVkIGJ5CisgIGBtYWtlX2N1cnJlbnQnIGluIGB1cGRhdGVfd2luZG93X2xp bmUnLCBvciBiZWNhdXNlIHRoZSBwcmV2aW91cyByb3cgd291bGQgYmUKKyAgdGhlIHNhbWUgaW4g Ym90aCBtYXRyaWNlcyBpZiB3ZSBqdW1wZWQgdG8gYHNldF9jdXJzb3I6YCB3aXRoaW4gYHVwZGF0 ZV93aW5kb3cnCisgIGFuZCBgbWNfdXBkYXRlX3dpbmRvd19kcnlydW4nLiAqLworICBpbnQgcHJl dl9tYXRyaXhfcm93X3N0YXJ0X2J5dGVwb3MgPSAodnBvcyAhPSAwKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/IE1BVFJJWF9ST1dfU1RBUlRfQllURVBPUyAoY3VycmVu dF9yb3cgLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC0xOwor ICBpbnQgcHJldl9tYXRyaXhfcm93X2VuZF9ieXRlcG9zID0gKHZwb3MgIT0gMCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUFUUklYX1JPV19FTkRfQllURVBPUyAoY3Vy cmVudF9yb3cgLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtMTsK KyAgaW50IG1hdHJpeF9yb3dfc3RhcnRfYnl0ZXBvcyA9IE1BVFJJWF9ST1dfU1RBUlRfQllURVBP UyAoZGVzaXJlZF9yb3cpOworICBpbnQgbWF0cml4X3Jvd19lbmRfYnl0ZXBvcyA9IE1BVFJJWF9S T1dfRU5EX0JZVEVQT1MgKGRlc2lyZWRfcm93KTsKKyAgLyogVGhlIGZpcnN0IGNvbmRpdGlvbiB0 ZXN0cyBmb3IgYSBzb2xpdGFyeSByb3cgY29udGFpbmluZyBaViwgcHJlY2VkZWQgYnkgYQorICBy b3cgY29udGFpbmluZyBhIHBlbnVsdGltYXRlIGdseXBoIHdpdGggYSBjaGFycG9zIG9mIFpWIC0g MSBmb2xsb3dlZCBieSBhbiBlbmQKKyAgb2Ygcm93IHNwYWNlIGdseXBoIHdpdGggYSBjaGFycG9z IG9mIDAuICBUaGUgb3RoZXIgY29uZGl0aW9ucyB0ZXN0IGZvciBhbiBlbXB0eQorICBidWZmZXIg KG5vdCBuYXJyb3dlZCksIG9yIGFuIGVtcHR5IG5hcnJvd2VkIGJ1ZmZlci4gKi8KKyAgYm9vbCBy b3dfYXRfenZfcCA9ICgodnBvcyAhPSAwCisgICAgICAgICAgICAgICAgICAgICAgICYmIChjdXJy ZW50X3JvdyAtIDEpLT51c2VkW1RFWFRfQVJFQV0gPiAwCisgICAgICAgICAgICAgICAgICAgICAg ICYmIHByZXZfbWF0cml4X3Jvd19zdGFydF9ieXRlcG9zICE9IHByZXZfbWF0cml4X3Jvd19lbmRf Ynl0ZXBvcworICAgICAgICAgICAgICAgICAgICAgICAmJiAhKGN1cnJlbnRfcm93IC0gMSktPmVu ZHNfYXRfenZfcAorICAgICAgICAgICAgICAgICAgICAgICAmJiBtYXRyaXhfcm93X3N0YXJ0X2J5 dGVwb3MgPT0gbWF0cml4X3Jvd19lbmRfYnl0ZXBvcworICAgICAgICAgICAgICAgICAgICAgICAm JiBkZXNpcmVkX3Jvdy0+ZW5kc19hdF96dl9wKQorICAgICAgICAgICAgICAgICAgICAgIHx8ICgo KGhlYWRlcl9saW5lX2Zvcm1hdCA+IDAgJiYgdnBvcyA9PSAxKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgfHwgKGhlYWRlcl9saW5lX2Zvcm1hdCA9PSAwICYmIHZwb3MgPT0gMCkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIGJ1ZmZlcl9uYXJyb3dlZF9wCisgICAgICAgICAgICAg ICAgICAgICAgICAgICYmIGJvYl9yZXNwZWN0X25hcnJvdyA9PSBlb2JfcmVzcGVjdF9uYXJyb3cp CisgICAgICAgICAgICAgICAgICAgICAgfHwgKCgoaGVhZGVyX2xpbmVfZm9ybWF0ID4gMCAmJiB2 cG9zID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaGVhZGVyX2xpbmVfZm9y bWF0ID09IDAgJiYgdnBvcyA9PSAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYm9i X2Rpc3JlZ2FyZF9uYXJyb3cgPT0gZW9iX2Rpc3JlZ2FyZF9uYXJyb3cpKTsKKyAgLyogSWYgbGlu ZS1udW1iZXJzIGFyZSBhY3RpdmUsIHRoZW4gc3BhY2UgZ2x5cGggcGFkZGluZyBlcXVhbCB0byBp dHMgd2lkdGgKKyAgY291bnRlZCBpbiBIUE9TIGFyZSBmb2xsb3dlZCBieSBhIHNpbmdsZSByb3cg ZW5kIHNwYWNlIGdseXBoLiAgTGluZSBudW1iZXIKKyAgcGFkZGluZyBzcGFjZSBnbHlwaHMgaGF2 ZSBhIGNoYXJwb3Mgb2YgLTEsIHdoZXJlYXMgdGhlIGVuZCBvZiByb3cgc3BhY2UgZ2x5cGgKKyAg aGFzIGEgY2hhcnBvcyBvZiAwLiAgSWYgbGluZSBudW1iZXJzIGFyZSBpbmFjdGl2ZSwgdGhlbiB0 aGUgcm93IHdpbGwgY29udGFpbgorICBhIHNvbGl0YXJ5IHNwYWNlIGdseXBoIHdpdGggYSBjaGFy cG9zIG9mIC0xLiAqLworICBib29sIHJvd19iZXlvbmRfenZfcCA9IChtYXRyaXhfcm93X3N0YXJ0 X2J5dGVwb3MgPT0gbWF0cml4X3Jvd19lbmRfYnl0ZXBvcworICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiAhcm93X2F0X3p2X3ApOworICByZXR1cm4gKHJvd19hdF96dl9wKQorICAgICAgICAg ICA/IEFUX1pWCisgICAgICAgICA6IChyb3dfYmV5b25kX3p2X3ApCisgICAgICAgICAgID8gUE9T VF9aVgorICAgICAgICAgOiBQUkVfWlY7Cit9CisKKy8qIFVwZGF0ZSB0aGUgZGlzcGxheSBvZiB0 aGUgdGV4dCBhcmVhIG9mIHJvdyBWUE9TIGluIHdpbmRvdyBXLgorICAgVmFsdWUgaXMgdHJ1ZSBp ZiBkaXNwbGF5IGhhcyBjaGFuZ2VkLiAqLworc3RhdGljIGJvb2wKK21jX3VwZGF0ZV90ZXh0X2Fy ZWEgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnVwZGF0ZWRfcm93LCBpbnQg dnBvcywKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9tYXRyaXggKmN1cnNvcl9t YXRyaXgsCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfZXNzZW50aWFscyBlc3NlbnRp YWxzLCBib29sIGRyYXdfcCkKK3sKKyAgYm9vbCBkZWJ1Z19wID0gZmFsc2U7CisgIHN0cnVjdCBn bHlwaF9yb3cgKmN1cnJlbnRfcm93ID0gTUFUUklYX1JPVyAody0+Y3VycmVudF9tYXRyaXgsIHZw b3MpOworICBzdHJ1Y3QgZ2x5cGhfcm93ICpkZXNpcmVkX3JvdyA9IE1BVFJJWF9ST1cgKHctPmRl c2lyZWRfbWF0cml4LCB2cG9zKTsKKyAgc3RydWN0IHJlZGlzcGxheV9pbnRlcmZhY2UgKnJpZiA9 IEZSQU1FX1JJRiAoWEZSQU1FIChXSU5ET1dfRlJBTUUgKHcpKSk7CisgIGJvb2wgY2hhbmdlZF9w ID0gMDsKKyAgc3RydWN0IG1jX1JHQiBsc2wgPSB7LnJlZCA9IC0xLjAsIC5ncmVlbiA9IC0xLjAs IC5ibHVlID0gLTEuMH07CisgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IE5PX0ZMQVZP UjsKKyAgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZSA9IE5PX0NVUlNPUjsKKyAgaW50 IHdkID0gLTE7CisgIGJvb2wgY3Vyc29yX2djX3AgPSBmYWxzZTsKKyAgc3RydWN0IGdseXBoX21h dHJpeCAqZGVzaXJlZF9tYXRyaXggPSB3LT5kZXNpcmVkX21hdHJpeDsKKyAgaWYgKGRlYnVnX3Ap CisgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfdXBkYXRlX3RleHRfYXJlYSAoJXMpOiAgdnBvcyAo JWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgIG1jX3dpbmRvdyAodyksIHZwb3MpOworICAv KiBJbmFzbXVjaCBhcyB3ZSBwcm9jZXNzIHRoZSBjdXJzb3Igcm93IGJlZm9yZSBhbGwgb3RoZXIg cm93cywgd2UgY2FuIHJlbHkKKyAgdXBvbiB0aGUgcHJldmlvdXMgYGRlc2lyZWRfcm93YCB0byBi ZSBhY2N1cmF0ZS4gKi8KKyAgZW51bSBtY19yb3dfcG9zaXRpb24gcm93X3Bvc2l0aW9uID0gIG1j X3Jvd19wb3NpdGlvbiAodywgdnBvcyA9PSB3LT5jdXJzb3IudnBvcworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGRlc2lyZWRfcm93 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogY3VycmVudF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRlc2lyZWRfcm93LCB2cG9zKTsKKyAgLyogSWYgcm93cyBhcmUg YXQgZGlmZmVyZW50IFggb3IgWSwgb3Igcm93cyBoYXZlIGRpZmZlcmVudCBoZWlnaHQsCisgICAg IG9yIHRoZSBjdXJyZW50IHJvdyBpcyBtYXJrZWQgaW52YWxpZCwgd3JpdGUgdGhlIGVudGlyZSBs aW5lLiAqLworICBpZiAoIWN1cnJlbnRfcm93LT5lbmFibGVkX3AKKyAgICAgIHx8IGRlc2lyZWRf cm93LT55ICE9IGN1cnJlbnRfcm93LT55CisgICAgICB8fCBkZXNpcmVkX3Jvdy0+YXNjZW50ICE9 IGN1cnJlbnRfcm93LT5hc2NlbnQKKyAgICAgIHx8IGRlc2lyZWRfcm93LT5waHlzX2FzY2VudCAh PSBjdXJyZW50X3Jvdy0+cGh5c19hc2NlbnQKKyAgICAgIHx8IGRlc2lyZWRfcm93LT5waHlzX2hl aWdodCAhPSBjdXJyZW50X3Jvdy0+cGh5c19oZWlnaHQKKyAgICAgIHx8IGRlc2lyZWRfcm93LT52 aXNpYmxlX2hlaWdodCAhPSBjdXJyZW50X3Jvdy0+dmlzaWJsZV9oZWlnaHQKKyAgICAgIHx8IGN1 cnJlbnRfcm93LT5vdmVybGFwcGVkX3AKKyAgICAgIC8qIFRoaXMgbmV4dCBsaW5lIGlzIG5lY2Vz c2FyeSBmb3IgY29ycmVjdGx5IHJlZHJhd2luZworICAgICAgICAgbW91c2UtZmFjZSBhcmVhcyBh ZnRlciBzY3JvbGxpbmcgYW5kIG90aGVyIG9wZXJhdGlvbnMuCisgICAgICAgICBIb3dldmVyLCBp dCBjYXVzZXMgZXhjZXNzaXZlIGZsaWNrZXJpbmcgd2hlbiBtb3VzZSBpcyBtb3ZlZAorICAgICAg ICAgYWNyb3NzIHRoZSBtb2RlIGxpbmUuICBMdWNraWx5LCB0dXJuaW5nIGl0IG9mZiBmb3IgdGhl IG1vZGUKKyAgICAgICAgIGxpbmUgZG9lc24ndCBzZWVtIHRvIGh1cnQgYW55dGhpbmcuIC0tIGN5 ZC4KKyAgICAgICAgIEJ1dCBpdCBpcyBzdGlsbCBuZWVkZWQgZm9yIHRoZSBoZWFkZXIgbGluZS4g LS0ga2ZzLiAqLworICAgICAgfHwgKGN1cnJlbnRfcm93LT5tb3VzZV9mYWNlX3AKKyAgICAgICAg ICAmJiAhKGN1cnJlbnRfcm93LT5tb2RlX2xpbmVfcCAmJiB2cG9zID4gMCkpCisgICAgICB8fCBj dXJyZW50X3Jvdy0+eCAhPSBkZXNpcmVkX3Jvdy0+eCkKKyAgICB7CisgICAgICBvdXRwdXRfY3Vy c29yX3RvICh3LCB2cG9zLCAwLCBkZXNpcmVkX3Jvdy0+eSwgZGVzaXJlZF9yb3ctPngpOworICAg ICAgaWYgKGRlYnVnX3ApCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIldSSVRFIEVOVElSRSBS T1c6XG5cCisgICAgICAgICAgdnBvcyAoJWQpIHwgY2hhciAoJWQvJXMpIHwgc3RhcnRfeDogKCVk KSB8IHN0YXJ0X2hwb3MgKCVkLyVkKVxuIiwKKyAgICAgICAgICB2cG9zLCBkZXNpcmVkX3Jvdy0+ Z2x5cGhzW1RFWFRfQVJFQV0tPnUuY2gsCisgICAgICAgICAgbWNfY2hhcl90b19zdHJpbmcgKGRl c2lyZWRfcm93LT5nbHlwaHNbVEVYVF9BUkVBXS0+dS5jaCksCisgICAgICAgICAgZGVzaXJlZF9y b3ctPngsIDAsIGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxKTsKKyAgICAgIGlmIChk ZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICB7CisgICAgICAgICAgYmxvY2tf aW5wdXQgKCk7CisgICAgICAgICAgaW50IGxlbiA9IGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJF QV07CisgICAgICAgICAgaW50IGhwb3MgPSBkZXNpcmVkX3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV0g LSB1cGRhdGVkX3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV07CisgICAgICAgICAgdy0+b3V0cHV0X2N1 cnNvci54ID0KKyAgICAgICAgICAgIG1jX2RyYXdfZ2x5cGhzICh3LCBkZXNpcmVkX21hdHJpeCwg dXBkYXRlZF9yb3csIHctPm1jX21hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3 LT5vdXRwdXRfY3Vyc29yLngsIFRFWFRfQVJFQSwgaHBvcywgaHBvcyArIGxlbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEUkFXX05PUk1BTF9URVhULCAwLCB2cG9zLCBsc2wsIGdseXBo X2ZsYXZvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfdHlwZSwgd2QsIGVz c2VudGlhbHMuYWN0aXZlX3AsIGN1cnNvcl9nY19wLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1DX0RSQVdfR0xZUEhfU1RSSU5HLCBkcmF3X3ApOworICAgICAgICAgIHctPm91dHB1dF9j dXJzb3IuaHBvcyArPSBsZW47CisgICAgICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAgICAg fQorICAgICAgLyogQ2xlYXIgdG8gZW5kIG9mIHdpbmRvdy4gKi8KKyAgICAgIGlmIChkcmF3X3Ap CisgICAgICAgIHJpZi0+Y2xlYXJfZW5kX29mX2xpbmUgKHcsIHVwZGF0ZWRfcm93LCBURVhUX0FS RUEsIC0xKTsKKyAgICAgIGNoYW5nZWRfcCA9IDE7CisgICAgICAvKiBUaGlzIGVyYXNlcyB0aGUg Y3Vyc29yLiAgV2UgZG8gdGhpcyBoZXJlIGJlY2F1c2UKKyAgICAgICAgIG5vdGljZW92ZXJ3cml0 dGVuX3RleHRfY3Vyc29yIGNhbm5vdCBlYXNpbHkgY2hlY2sgdGhpcywgd2hpY2gKKyAgICAgICAg IG1pZ2h0IGluZGljYXRlIHRoYXQgdGhlIHdob2xlIGZ1bmN0aW9uYWxpdHkgb2YKKyAgICAgICAg IG5vdGljZW92ZXJ3cml0dGVuX3RleHRfY3Vyc29yIHdvdWxkIGJldHRlciBiZSBpbXBsZW1lbnRl ZCBoZXJlLgorICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIHdlIG5lZWQgbm90aWNlb3Zlcndy aXR0ZW5fdGV4dF9jdXJzb3IgYXMgbG9uZworICAgICAgICAgYXMgbW91c2UgaGlnaGxpZ2h0aW5n IGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgb3V0c2lkZSBvZgorICAgICAgICAgcmVkaXNwbGF5LiAq LworICAgICAgaWYgKHZwb3MgPT0gdy0+cGh5c19jdXJzb3IudnBvcykKKyAgICAgICAgdy0+cGh5 c19jdXJzb3Jfb25fcCA9IDA7CisgICAgICAvKiBUaGUgZW50aXJlIHJvdyB3YXMgcmVkcmF3biBh Ym92ZSwgc28gYWxsIGZha2UgY3Vyc29ycyBtdXN0IGJlIHJlZHJhd24uICovCisgICAgICBtY19k cmF3X3JvdyAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRfcm93LCBkZXNpcmVkX3Jvdy0+Z2x5 cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICAgICAgICAgICAgZGVzaXJlZF9yb3ctPngsIGRlc2ly ZWRfcm93LT51c2VkW1RFWFRfQVJFQV0sIHZwb3MsCisgICAgICAgICAgICAgICAgICAgY3Vyc29y X21hdHJpeCwgZXNzZW50aWFscywgcm93X3Bvc2l0aW9uLCBkcmF3X3AsIFNDUklCRV9PTkUpOwor ICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIGludCBzdG9wLCBpLCB4OworICAgICAg ICBzdHJ1Y3QgZ2x5cGggKmN1cnJlbnRfZ2x5cGggPSBjdXJyZW50X3Jvdy0+Z2x5cGhzW1RFWFRf QVJFQV07CisgICAgICAgIHN0cnVjdCBnbHlwaCAqZGVzaXJlZF9nbHlwaCA9IGRlc2lyZWRfcm93 LT5nbHlwaHNbVEVYVF9BUkVBXTsKKyAgICAgICAgYm9vbCBvdmVybGFwcGluZ19nbHlwaHNfcCA9 IGN1cnJlbnRfcm93LT5jb250YWluc19vdmVybGFwcGluZ19nbHlwaHNfcDsKKyAgICAgICAgaW50 IGRlc2lyZWRfc3RvcF9wb3MgPSBkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdOworICAgICAg ICBib29sIGFib3J0X3NraXBwaW5nID0gMDsKKyAgICAgICAgLyogSWYgdGhlIGRlc2lyZWQgcm93 IGV4dGVuZHMgaXRzIGZhY2UgdG8gdGhlIHRleHQgYXJlYSBlbmQsIGFuZCB1bmxlc3MgdGhlCisg ICAgICAgIGN1cnJlbnQgcm93IGFsc28gZG9lcyBzbyBhdCB0aGUgc2FtZSBwb3NpdGlvbiwgbWFr ZSBzdXJlIHdlIHdyaXRlIGF0IGxlYXN0IG9uZQorICAgICAgICBnbHlwaCwgc28gdGhhdCB0aGUg ZmFjZSBleHRlbnNpb24gYWN0dWFsbHkgdGFrZXMgcGxhY2UuICovCisgICAgICAgIGlmIChNQVRS SVhfUk9XX0VYVEVORFNfRkFDRV9QIChkZXNpcmVkX3JvdykKKyAgICAgICAgICAgICYmIChkZXNp cmVkX3N0b3BfcG9zIDwgY3VycmVudF9yb3ctPnVzZWRbVEVYVF9BUkVBXQorICAgICAgICAgICAg ICAgIHx8IChkZXNpcmVkX3N0b3BfcG9zID09IGN1cnJlbnRfcm93LT51c2VkW1RFWFRfQVJFQV0K KyAgICAgICAgICAgICAgICAgICAgJiYgIU1BVFJJWF9ST1dfRVhURU5EU19GQUNFX1AgKGN1cnJl bnRfcm93KSkpKQorICAgICAgICAgIC0tZGVzaXJlZF9zdG9wX3BvczsKKyAgICAgICAgc3RvcCA9 IG1pbiAoY3VycmVudF9yb3ctPnVzZWRbVEVYVF9BUkVBXSwgZGVzaXJlZF9zdG9wX3Bvcyk7Cisg ICAgICAgIGkgPSAwOworICAgICAgICB4ID0gZGVzaXJlZF9yb3ctPng7CisgICAgICAgIGludCBj bGVhcl90b194ID0gMDsKKworICAgICAgICAvKiBMb29wIG92ZXIgZ2x5cGhzIHRoYXQgY3VycmVu dCBhbmQgZGVzaXJlZCByb3cgbWF5IGhhdmUgaW4gY29tbW9uLiAqLworICAgICAgICB3aGlsZSAo aSA8IHN0b3ApCisgICAgICAgICAgeworICAgICAgICAgICAgYXJyYXlfZ2x5cGhzX3NraXBwZWQu dXNlZCA9IDA7CisgICAgICAgICAgICBib29sIGNhbl9za2lwX3AgPSAhYWJvcnRfc2tpcHBpbmc7 CisgICAgICAgICAgICAvKiBTa2lwIG92ZXIgZ2x5cGhzIHRoYXQgYm90aCByb3dzIGhhdmUgaW4g Y29tbW9uLiAgVGhlc2UgZG9uJ3QgaGF2ZQorICAgICAgICAgICAgdG8gYmUgd3JpdHRlbi4gIFdl IGNhbid0IHNraXAgaWYgdGhlIGxhc3QgY3VycmVudCBnbHlwaCBvdmVybGFwcyB0aGUKKyAgICAg ICAgICAgIGdseXBoIHRvIGl0cyByaWdodC4gIEZvciBleGFtcGxlLCBjb25zaWRlciBhIGN1cnJl bnQgcm93IG9mIGBpZicgd2l0aAorICAgICAgICAgICAgdGhlIGBmJyBpbiBDb3VyaWVyIGJvbGQg c28gdGhhdCBpdCBvdmVybGFwcyB0aGUgYCAnIHRvIGl0cyByaWdodC4KKyAgICAgICAgICAgIElm IHRoZSBkZXNpcmVkIHJvdyBpcyBgICcsIHdlIHdvdWxkIHNraXAgb3ZlciB0aGUgc3BhY2UgYWZ0 ZXIgdGhlCisgICAgICAgICAgICBgaWYnIGFuZCB0aGVyZSB3b3VsZCByZW1haW4gYSBwaXhlbCBm cm9tIHRoZSBgZicgb24gdGhlIHNjcmVlbi4gKi8KKyAgICAgICAgICAgIGlmIChvdmVybGFwcGlu Z19nbHlwaHNfcCAmJiBpID4gMCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0 cnVjdCBnbHlwaCAqZ2x5cGggPSAmY3VycmVudF9yb3ctPmdseXBoc1tURVhUX0FSRUFdW2kgLSAx XTsKKyAgICAgICAgICAgICAgICBpbnQgbGVmdCwgcmlnaHQ7CisgICAgICAgICAgICAgICAgcmlm LT5nZXRfZ2x5cGhfb3ZlcmhhbmdzIChnbHlwaCwgWEZSQU1FICh3LT5mcmFtZSksICZsZWZ0LCAm cmlnaHQpOworICAgICAgICAgICAgICAgIGNhbl9za2lwX3AgPSAocmlnaHQgPT0gMCAmJiAhYWJv cnRfc2tpcHBpbmcpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2FuX3NraXBf cCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBzdGFydF9ocG9zID0gaTsK KyAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHN0b3AKKyAgICAgICAgICAgICAgICAgICAgICAg JiYgR0xZUEhfRVFVQUxfUCAoZGVzaXJlZF9nbHlwaCwgY3VycmVudF9nbHlwaCkpCisgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICsrYXJyYXlfZ2x5cGhzX3NraXBwZWQu dXNlZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5X2dseXBoc19za2lwcGVkLmFsbG9j YXRlZCA8IGFycmF5X2dseXBoc19za2lwcGVkLnVzZWQpCisgICAgICAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZF9hbGxvYyA9IGFycmF5X2dseXBoc19z a2lwcGVkLmFsbG9jYXRlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZXdfZWx0cyA9 IGFycmF5X2dseXBoc19za2lwcGVkLnVzZWQgLSBhcnJheV9nbHlwaHNfc2tpcHBlZC5hbGxvY2F0 ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9nbHlwaHNfc2tpcHBlZC5za2lwcGVk ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeHBhbGxvYyAoYXJyYXlfZ2x5cGhzX3NraXBw ZWQuc2tpcHBlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFycmF5X2ds eXBoc19za2lwcGVkLmFsbG9jYXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmV3X2VsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVF9NQVgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAqYXJyYXlfZ2x5cGhz X3NraXBwZWQuc2tpcHBlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQgKGFycmF5 X2dseXBoc19za2lwcGVkLnNraXBwZWQgKyBvbGRfYWxsb2MsIDAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoYXJyYXlfZ2x5cGhzX3NraXBwZWQuYWxsb2NhdGVkIC0gb2xkX2Fs bG9jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZiAqYXJyYXlf Z2x5cGhzX3NraXBwZWQuc2tpcHBlZCk7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICBpbnQgbnRoID0gYXJyYXlfZ2x5cGhzX3NraXBwZWQudXNlZCAtIDE7Cisg ICAgICAgICAgICAgICAgICAgIGFycmF5X2dseXBoc19za2lwcGVkLnNraXBwZWRbbnRoXS54ID0g eDsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlfZ2x5cGhzX3NraXBwZWQuc2tpcHBlZFtudGhd Lmhwb3MgPSBpOworICAgICAgICAgICAgICAgICAgICBhcnJheV9nbHlwaHNfc2tpcHBlZC5za2lw cGVkW250aF0uZW5hYmxlZF9wID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgeCArPSBkZXNp cmVkX2dseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgKytkZXNpcmVkX2ds eXBoLCArK2N1cnJlbnRfZ2x5cGgsICsraTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAvKiBDb25zaWRlciB0aGUgY2FzZSB0aGF0IHRoZSBjdXJyZW50IHJvdyBjb250YWlu cyAieHh4IHBwcCBnZ2ciIGluCisgICAgICAgICAgICAgICAgaXRhbGljIENvdXJpZXIgZm9udCwg YW5kIHRoZSBkZXNpcmVkIHJvdyBpcyAieHh4IGdnZyIuICBUaGUgY2hhcmFjdGVyIGBwJworICAg ICAgICAgICAgICAgIGhhcyBsYmVhcmluZywgYGcnIGhhcyBub3QuICBUaGUgbG9vcCBhYm92ZSB3 aWxsIHN0b3AgaW4gZnJvbnQgb2YgdGhlCisgICAgICAgICAgICAgICAgZmlyc3QgYHAnIGluIHRo ZSBjdXJyZW50IHJvdy4gIElmIHdlIHdvdWxkIHN0YXJ0IHdyaXRpbmcgZ2x5cGhzIHRoZXJlLCB3 ZQorICAgICAgICAgICAgICAgIHdvdWxkbid0IGVyYXNlIHRoZSBsYmVhcmluZyBvZiB0aGUgYHAn LiAgVGhlIHJlc3Qgb2YgdGhlIGxiZWFyaW5nIHByb2JsZW0KKyAgICAgICAgICAgICAgICBpcyB0 aGVuIHRha2VuIGNhcmUgb2YgYnkgZHJhd19nbHlwaHMuICovCisgICAgICAgICAgICAgICAgaWYg KG92ZXJsYXBwaW5nX2dseXBoc19wCisgICAgICAgICAgICAgICAgICAgICYmIGkgPiAwCisgICAg ICAgICAgICAgICAgICAgICYmIGkgPCBjdXJyZW50X3Jvdy0+dXNlZFtURVhUX0FSRUFdCisgICAg ICAgICAgICAgICAgICAgICYmIChjdXJyZW50X3Jvdy0+dXNlZFtURVhUX0FSRUFdICE9IGRlc2ly ZWRfcm93LT51c2VkW1RFWFRfQVJFQV0pKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICBpbnQgbGVmdCwgcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgIHJpZi0+Z2V0 X2dseXBoX292ZXJoYW5ncyAoY3VycmVudF9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBYRlJBTUUgKHctPmZyYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVm dCwgJnJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlZnQgPiAwICYmIGkgPiAw KQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC0taSwg LS1kZXNpcmVkX2dseXBoLCAtLWN1cnJlbnRfZ2x5cGg7CisgICAgICAgICAgICAgICAgICAgICAg ICB4IC09IGRlc2lyZWRfZ2x5cGgtPnBpeGVsX3dpZHRoOworICAgICAgICAgICAgICAgICAgICAg ICAgbGVmdCAtPSBkZXNpcmVkX2dseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIEFib3J0IHRoZSBza2lwcGluZyBhbGdvcml0 aG0gaWYgd2UgZW5kIHVwIGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICBvdXIgc3RhcnRp bmcgcG9pbnQsIHRvIGF2b2lkIGxvb3BpbmcgKGJ1ZyMxMDcwKS4KKyAgICAgICAgICAgICAgICAg ICAgICAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIGxiZWFyaW5nIGlzIGxhcmdlciB0aGFuCisg ICAgICAgICAgICAgICAgICAgICAgIHRoZSBwaXhlbCB3aWR0aC4gKi8KKyAgICAgICAgICAgICAg ICAgICAgYWJvcnRfc2tpcHBpbmcgPSAoaSA8IHN0YXJ0X2hwb3MpOworICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBUcnkgdG8gYXZvaWQgd3JpdGlu ZyB0aGUgZW50aXJlIHJlc3Qgb2YgdGhlIGRlc2lyZWQgcm93CisgICAgICAgICAgICAgICBieSBs b29raW5nIGZvciBhIHJlc3luYyBwb2ludC4gIFRoaXMgbWFpbmx5IHByZXZlbnRzCisgICAgICAg ICAgICAgICBtb2RlIGxpbmUgZmxpY2tlcmluZyBpbiB0aGUgY2FzZSB0aGUgbW9kZSBsaW5lIGlz IGluCisgICAgICAgICAgICAgICBmaXhlZC1waXRjaCBmb250LCB3aGljaCBpdCB1c3VhbGx5IHdp bGwgYmUuICovCisgICAgICAgICAgICBpZiAoaSA8IGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJF QV0pCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgc3RhcnRfeCA9IHgsIHN0 YXJ0X2hwb3MgPSBpOworICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaCAqc3RhcnQgPSBkZXNp cmVkX2dseXBoOworICAgICAgICAgICAgICAgIGludCBjdXJyZW50X3ggPSB4OworICAgICAgICAg ICAgICAgIGJvb2wgc2tpcF9maXJzdF9wID0gIWNhbl9za2lwX3A7CisgICAgICAgICAgICAgICAg LyogRmluZCB0aGUgbmV4dCBnbHlwaCB0aGF0J3MgZXF1YWwgYWdhaW4uICovCisgICAgICAgICAg ICAgICAgd2hpbGUgKGkgPCBzdG9wCisgICAgICAgICAgICAgICAgICAgICAgICYmIChza2lwX2Zp cnN0X3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFHTFlQSF9FUVVBTF9QIChkZXNp cmVkX2dseXBoLCBjdXJyZW50X2dseXBoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgeCA9 PSBjdXJyZW50X3gpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHgg Kz0gZGVzaXJlZF9nbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGN1cnJl bnRfeCArPSBjdXJyZW50X2dseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICAgICAgICAgICAg KytkZXNpcmVkX2dseXBoLCArK2N1cnJlbnRfZ2x5cGgsICsraTsKKyAgICAgICAgICAgICAgICAg ICAgc2tpcF9maXJzdF9wID0gMDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBmb3IgKGludCBlbHQgPSAwOworICAgICAgICAgICAgICAgICAgICAgZWx0IDwgYXJyYXlfZ2x5 cGhzX3NraXBwZWQudXNlZDsKKyAgICAgICAgICAgICAgICAgICAgICsrZWx0KQorICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IGFycmF5X2dseXBoc19za2lw cGVkLnNraXBwZWRbZWx0XS54OworICAgICAgICAgICAgICAgICAgICBpbnQgaHBvcyA9IGFycmF5 X2dseXBoc19za2lwcGVkLnNraXBwZWRbZWx0XS5ocG9zOworICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZ2x5cGggKnRhcmdldF9nbHlwaCA9CisgICAgICAgICAgICAgICAgICAgICAgbWNfZ2V0 X2N1cnNvcl9nbHlwaCAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRfcm93LCBocG9zLCB2cG9z KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlYnVnX3ApCisgICAgICAgICAgICAgICAgICAg ICAgZnByaW50ZiAoc3RkZXJyLCAiU0tJUFBFRDogIHZwb3MgKCVkKSB8IGNoYXIgKCVkLyVzKSB8 IHg6ICglZCkgfCBocG9zICglZC8lZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2cG9zLCB0YXJnZXRfZ2x5cGgtPnUuY2gsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtY19jaGFyX3RvX3N0cmluZyAodGFyZ2V0X2dseXBoLT51LmNo KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIGhwb3MsIHVwZGF0 ZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgbWNfZHJh d19yb3cgKHcsIGRlc2lyZWRfbWF0cml4LCB1cGRhdGVkX3JvdywgdGFyZ2V0X2dseXBoLCB4LCAx LCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX21hdHJpeCwg ZXNzZW50aWFscywgcm93X3Bvc2l0aW9uLCBkcmF3X3AsIFNLSVBQRUQpOworICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpID09IHN0YXJ0X2hwb3MgfHwgeCAhPSBjdXJy ZW50X3gpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGkgPSBzdGFy dF9ocG9zOworICAgICAgICAgICAgICAgICAgICB4ID0gc3RhcnRfeDsKKyAgICAgICAgICAgICAg ICAgICAgZGVzaXJlZF9nbHlwaCA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXRwdXRfY3Vyc29yX3RvICh3 LCB2cG9zLCBzdGFydF9ocG9zLCBkZXNpcmVkX3Jvdy0+eSwgc3RhcnRfeCk7CisgICAgICAgICAg ICAgICAgLyogUmUtZHJhdyBhIHBvcnRpb24gb2YgdGhlIHJvdy4gKi8KKyAgICAgICAgICAgICAg ICBpZiAoZGVidWdfcCkKKyAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlJFRFJB VyBTRUdNRU5UOlxuXAorICAgICAgICAgICAgICAgICAgICB2cG9zICglZCkgfCBjaGFyICglZC8l cykgfCB4OiAoJWQpIHwgaHBvcyAoJWQvJWQpIHwgbGVuZ3RoICglZClcbiIsCisgICAgICAgICAg ICAgICAgICAgIHZwb3MsIHN0YXJ0LT51LmNoLCBtY19jaGFyX3RvX3N0cmluZyAoc3RhcnQtPnUu Y2gpLAorICAgICAgICAgICAgICAgICAgICBzdGFydF94LCBzdGFydF9ocG9zLCB1cGRhdGVkX3Jv dy0+dXNlZFtURVhUX0FSRUFdIC0gMSwgaSAtIHN0YXJ0X2hwb3MpOworICAgICAgICAgICAgICAg IGJsb2NrX2lucHV0ICgpOworICAgICAgICAgICAgICAgIGludCBsZW4gPSBpIC0gc3RhcnRfaHBv czsKKyAgICAgICAgICAgICAgICBpbnQgaHBvcyA9IHN0YXJ0IC0gdXBkYXRlZF9yb3ctPmdseXBo c1tURVhUX0FSRUFdOworICAgICAgICAgICAgICAgIHctPm91dHB1dF9jdXJzb3IueCA9CisgICAg ICAgICAgICAgICAgICBtY19kcmF3X2dseXBocyAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRf cm93LCB3LT5tY19tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy0+ b3V0cHV0X2N1cnNvci54LCBURVhUX0FSRUEsIGhwb3MsIGhwb3MgKyBsZW4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRFJBV19OT1JNQUxfVEVYVCwgMCwgdnBvcywgbHNsLCBn bHlwaF9mbGF2b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX3R5 cGUsIHdkLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGN1cnNvcl9nY19wLCBNQ19EUkFXX0dMWVBIX1NUUklORywgZHJhd19wKTsKKyAgICAg ICAgICAgICAgICB3LT5vdXRwdXRfY3Vyc29yLmhwb3MgKz0gbGVuOworICAgICAgICAgICAgICAg IHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgICAgICAgbWNfZHJhd19yb3cgKHcsIGRlc2ly ZWRfbWF0cml4LCB1cGRhdGVkX3Jvdywgc3RhcnQsIHN0YXJ0X3gsIGkgLSBzdGFydF9ocG9zLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cG9zLCBjdXJzb3JfbWF0cml4LCBlc3NlbnRp YWxzLCByb3dfcG9zaXRpb24sIGRyYXdfcCwgU0NSSUJFX1RXTyk7CisgICAgICAgICAgICAgICAg Y2hhbmdlZF9wID0gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAv KiBXcml0ZSB0aGUgcmVzdC4gKi8KKyAgICAgICAgaWYgKGkgPCBkZXNpcmVkX3Jvdy0+dXNlZFtU RVhUX0FSRUFdKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dF9jdXJzb3JfdG8gKHcs IHZwb3MsIGksIGRlc2lyZWRfcm93LT55LCB4KTsKKyAgICAgICAgICAgIGlmIChkZWJ1Z19wKQor ICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJEUkFXIFJFTUFJTkRFUiBPRiBUSEUgUk9X OlxuXAorICAgICAgICAgICAgICAgIHZwb3MgKCVkKSB8IGNoYXIgKCVkLyVzKSB8IHg6ICglZCkg fCBocG9zICglZC8lZCkgfCBsZW5ndGggKCVkKVxuIiwKKyAgICAgICAgICAgICAgICB2cG9zLCBk ZXNpcmVkX2dseXBoLT51LmNoLCBtY19jaGFyX3RvX3N0cmluZyAoZGVzaXJlZF9nbHlwaC0+dS5j aCksCisgICAgICAgICAgICAgICAgeCwgaSwgZGVzaXJlZF9yb3ctPnVzZWRbVEVYVF9BUkVBXSAt IDEsIGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSBpKTsKKyAgICAgICAgICAgIGJsb2Nr X2lucHV0ICgpOworICAgICAgICAgICAgaW50IGxlbiA9IGRlc2lyZWRfcm93LT51c2VkW1RFWFRf QVJFQV0gLSBpOworICAgICAgICAgICAgaW50IGhwb3MgPSBkZXNpcmVkX2dseXBoIC0gdXBkYXRl ZF9yb3ctPmdseXBoc1tURVhUX0FSRUFdOworICAgICAgICAgICAgdy0+b3V0cHV0X2N1cnNvci54 ID0KKyAgICAgICAgICAgICAgbWNfZHJhd19nbHlwaHMgKHcsIGRlc2lyZWRfbWF0cml4LCB1cGRh dGVkX3Jvdywgdy0+bWNfbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy0+ b3V0cHV0X2N1cnNvci54LCBURVhUX0FSRUEsIGhwb3MsIGhwb3MgKyBsZW4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEUkFXX05PUk1BTF9URVhULCAwLCB2cG9zLCBsc2wsIGdseXBo X2ZsYXZvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl90eXBlLCB3ZCwg ZXNzZW50aWFscy5hY3RpdmVfcCwgY3Vyc29yX2djX3AsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBNQ19EUkFXX0dMWVBIX1NUUklORywgZHJhd19wKTsKKyAgICAgICAgICAgIHctPm91 dHB1dF9jdXJzb3IuaHBvcyArPSBsZW47CisgICAgICAgICAgICB1bmJsb2NrX2lucHV0ICgpOwor ICAgICAgICAgICAgLyogRklYTUU6ICBBbHRob3VnaCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY2Fj aGUgYmV0d2VlbiB0aGUgZW5kIG9mCisgICAgICAgICAgICB1cGRhdGVkX3JvdyBhbmQgdGhlIHJp Z2h0IHdpbmRvdyBlZGdlLCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGRyYXcKKyAgICAgICAgICAg IHRob3NlIGZha2UgY3Vyc29ycy4gQWx0aG91Z2ggd2UgbWF5IG5vdCBiZSBhYmxlIHRvIHNlZSBp dCB3aXRoIHRoZQorICAgICAgICAgICAgbmFrZWQgZXllLCB0aG9zZSBmYWtlIGN1cnNvcnMgYXJl IGJlaW5nIHN1cGVyaW1wb3NlZCBvbiB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAgIGZha2UgY3Vy c29ycyB0aGF0IGRvIG5vdCBnZXQgZXJhc2VkIGJ5IHRoZSBjb2RlIGluIHRoZSBzZWN0aW9uIGJl bG93LgorICAgICAgICAgICAgSXQgd291bGQgYmUgYmV0dGVyIHRvIG9ubHkgdXBkYXRlIHRoZSBj YWNoZSBhbmQgc3VwcHJlc3MgZG91YmxlLWRyYXdpbmcKKyAgICAgICAgICAgIHRoZSBmYWtlIGN1 cnNvcnMgZm9yIHRoZSBhZm9yZW1lbnRpb25lZCBhcmVhIGF0IGlzc3VlLiAqLworICAgICAgICAg ICAgbWNfZHJhd19yb3cgKHcsIGRlc2lyZWRfbWF0cml4LCB1cGRhdGVkX3JvdywgZGVzaXJlZF9n bHlwaCwgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkX3Jvdy0+dXNlZFtURVhU X0FSRUFdIC0gaSwgdnBvcywgY3Vyc29yX21hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBlc3NlbnRpYWxzLCByb3dfcG9zaXRpb24sIGRyYXdfcCwgU0NSSUJFX1RIUkVFKTsKKyAgICAg ICAgICAgIGNoYW5nZWRfcCA9IDE7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIEV2ZXJ5dGhp bmcgYWZ0ZXIgdGhlIHByZXZpb3VzIGNoYW5nZSByZW1haW5lZCB0aGUgc2FtZS4gIGBpYCBhbmQg YHhgIHdlcmUKKyAgICAgICAgICBpbmNyZW1lbnRlZCB0byB0aGUgZW5kIG9mIHRoZSBnbHlwaCBy b3cuICBpID09IGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJFQV0KKyAgICAgICAgICBUaGUgYHct Pm91dHB1dF9jdXJzb3IueC95L2hwb3MvdnBvc2AgaXMgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlv dXMgY2hhbmdlLgorICAgICAgICAgIFdoZW4gdGhpcyBzaXR1YXRpb24gZXhpc3RzLCB0aGUgZGlz dGFuY2UgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSBnbHlwaCByb3cgYW5kCisgICAgICAgICAgdGhl IHJpZ2h0IGVkZ2Ugb2YgdGhlIHdpbmRvdyB3aWxsIF9ub3RfIGJlIGNsZWFyZWQuICBUaGVyZWZv cmUsIGl0IGlzIG9rYXkgdG8KKyAgICAgICAgICBkcmF3IHRoZSBmbG9hdGluZyBnbHlwaHMgZm9y IHRoZSBob3Jpem9udGFsL3ZlcnRpY2FsIHJ1bGVycyBoZXJlLiAqLworICAgICAgICAgIGVsc2Ug aWYgKGNoYW5nZWRfcAorICAgICAgICAgICAgICAgICAgICYmIHctPm91dHB1dF9jdXJzb3IuaHBv cyAhPSB1cGRhdGVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICBpbnQgeCA9IHctPm91dHB1dF9jdXJzb3IueDsKKyAgICAgICAgICAgICAgaW50IGhw b3MgPSB3LT5vdXRwdXRfY3Vyc29yLmhwb3M7CisgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaCAq c3RhcnQgPSBtY19nZXRfY3Vyc29yX2dseXBoICh3LCBkZXNpcmVkX21hdHJpeCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRf cm93LCBocG9zLCB2cG9zKTsKKyAgICAgICAgICAgICAgaWYgKHctPm91dHB1dF9jdXJzb3IueCA9 PSB1cGRhdGVkX3Jvdy0+cGl4ZWxfd2lkdGgpCisgICAgICAgICAgICAgICAgeCAtPSBzdGFydC0+ cGl4ZWxfd2lkdGg7CisgICAgICAgICAgICAgIGlmIChkZWJ1Z19wKQorICAgICAgICAgICAgICAg IGZwcmludGYgKHN0ZGVyciwgIlBPU1QtQ0hBTkdFRDogIHZwb3MgKCVkKSB8IHggKCVkKSB8IGhw b3MgKCVkLyVkKSB8IGNoYXIgKCVkLyVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZwb3MsIHgsIGhwb3MsIHVwZGF0ZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQtPnUuY2gsIG1jX2NoYXJfdG9f c3RyaW5nIChzdGFydC0+dS5jaCkpOworICAgICAgICAgICAgICBtY19kcmF3X3JvdyAodywgZGVz aXJlZF9tYXRyaXgsIHVwZGF0ZWRfcm93LCBzdGFydCwgeCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVwZGF0ZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSBocG9zLCB2cG9zLCBjdXJzb3Jf bWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNzZW50aWFscywgcm93X3Bvc2l0 aW9uLCBkcmF3X3AsIFBPU1RfQ0hBTkdFRCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv KiBUaGVyZSB3ZXJlIG5vIGNoYW5nZXMgYW5kIGkgPT0gZGVzaXJlZF9yb3ctPnVzZWRbVEVYVF9B UkVBXSAqLworICAgICAgICAgICAgZWxzZSBpZiAoIWNoYW5nZWRfcCkKKyAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgIGlmIChkZWJ1Z19wKQorICAgICAgICAgICAgICAgICAgZnByaW50 ZiAoc3RkZXJyLCAiVU5DSEFOR0VEIC0tIFdSSVRFIEVOVElSRSBMSU5FOiAgdnBvcyAoJWQpIHwg cm93LT51c2VkICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZw b3MsIHVwZGF0ZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxKTsKKyAgICAgICAgICAgICAgICBt Y19kcmF3X3JvdyAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRfcm93LCBkZXNpcmVkX3Jvdy0+ Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRf cm93LT54LCBkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdLCB2cG9zLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjdXJzb3JfbWF0cml4LCBlc3NlbnRpYWxzLCByb3dfcG9zaXRpb24s IGRyYXdfcCwgVU5DSEFOR0VEKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgIC8qIE1heWJl IGNsZWFyIHRvIGVuZCBvZiBsaW5lLiAqLworICAgICAgICBpZiAoTUFUUklYX1JPV19FWFRFTkRT X0ZBQ0VfUCAoZGVzaXJlZF9yb3cpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIElmIG5l dyByb3cgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSB0ZXh0IGFyZWEsIG5vdGhpbmcKKyAgICAg ICAgICAgICAgIGhhcyB0byBiZSBjbGVhcmVkLCBpZiBhbmQgb25seSBpZiB3ZSBkaWQgYSB3cml0 ZV9nbHlwaHMKKyAgICAgICAgICAgICAgIGFib3ZlLiAgVGhpcyBpcyBtYWRlIHN1cmUgYnkgc2V0 dGluZyBkZXNpcmVkX3N0b3BfcG9zCisgICAgICAgICAgICAgICBhcHByb3ByaWF0ZWx5IGFib3Zl LiAqLworICAgICAgICAgICAgZWFzc2VydCAoaSA8IGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJF QV0KKyAgICAgICAgICAgICAgICAgICAgIHx8ICgoZGVzaXJlZF9yb3ctPnVzZWRbVEVYVF9BUkVB XSA9PSBjdXJyZW50X3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICAgICAgICAgICAgICAg ICAgICYmIE1BVFJJWF9ST1dfRVhURU5EU19GQUNFX1AgKGN1cnJlbnRfcm93KSkpOworICAgICAg ICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChNQVRSSVhfUk9XX0VYVEVORFNfRkFDRV9QIChjdXJy ZW50X3JvdykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIElmIG9sZCByb3cgZXh0 ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSB0ZXh0IGFyZWEsIGNsZWFyLiAqLworICAgICAgICAgICAg ICBpZiAoaSA+PSBkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICAgICAgICAg IG91dHB1dF9jdXJzb3JfdG8gKHcsIHZwb3MsIGksIGRlc2lyZWRfcm93LT55LCBkZXNpcmVkX3Jv dy0+cGl4ZWxfd2lkdGgpOworICAgICAgICAgICAgICBpZiAoZHJhd19wKQorICAgICAgICAgICAg ICAgIHJpZi0+Y2xlYXJfZW5kX29mX2xpbmUgKHcsIHVwZGF0ZWRfcm93LCBURVhUX0FSRUEsIC0x KTsKKyAgICAgICAgICAgICAgY2xlYXJfdG9feCA9IC0xOworICAgICAgICAgICAgICBjaGFuZ2Vk X3AgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZGVzaXJlZF9yb3ct PnBpeGVsX3dpZHRoIDwgY3VycmVudF9yb3ctPnBpeGVsX3dpZHRoKQorICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIGNsZWFyIHRvIHRoZSBlbmQgb2YgdGhlIG9s ZCByb3cuICBFdmVyeXRoaW5nCisgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhhdCBwb3NpdGlv biBzaG91bGQgYmUgY2xlYXIgYWxyZWFkeS4gKi8KKyAgICAgICAgICAgICAgICBpbnQgeGxpbTsK KyAgICAgICAgICAgICAgICBpZiAoaSA+PSBkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdKQor ICAgICAgICAgICAgICAgICAgb3V0cHV0X2N1cnNvcl90byAodywgdnBvcywgaSwgZGVzaXJlZF9y b3ctPnksIGRlc2lyZWRfcm93LT5waXhlbF93aWR0aCk7CisgICAgICAgICAgICAgICAgLyogSWYg Y3Vyc29yIGlzIGRpc3BsYXllZCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLCBtYWtlIHN1cmUKKyAg ICAgICAgICAgICAgICAgICBpdCdzIGNsZWFyZWQuICBOb3dhZGF5cyB3ZSBkb24ndCBoYXZlIGEg cGh5c19jdXJzb3JfZ2x5cGgKKyAgICAgICAgICAgICAgICAgICB3aXRoIHdoaWNoIHRvIGVyYXNl IHRoZSBjdXJzb3IgKGJlY2F1c2UgdGhpcyBtZXRob2QKKyAgICAgICAgICAgICAgICAgICBkb2Vz bid0IHdvcmsgd2l0aCBsYmVhcmluZy9yYmVhcmluZyksIHNvIHdlIG11c3QgZG8gaXQgdGhpcyB3 YXkuICovCisgICAgICAgICAgICAgICAgaWYgKHZwb3MgPT0gdy0+cGh5c19jdXJzb3IudnBvcwor ICAgICAgICAgICAgICAgICAgICAmJiAoZGVzaXJlZF9yb3ctPnJldmVyc2VkX3AKKyAgICAgICAg ICAgICAgICAgICAgICAgID8gKHctPnBoeXNfY3Vyc29yLmhwb3MgPCAwKQorICAgICAgICAgICAg ICAgICAgICAgICAgOiAody0+cGh5c19jdXJzb3IuaHBvcyA+PSBkZXNpcmVkX3Jvdy0+dXNlZFtU RVhUX0FSRUFdKSkpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHct PnBoeXNfY3Vyc29yX29uX3AgPSAwOworICAgICAgICAgICAgICAgICAgICB4bGltID0gLTE7Cisg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgICAgIHhsaW0gPSBjdXJyZW50X3Jvdy0+cGl4ZWxfd2lkdGg7CisgICAgICAgICAgICAgICAg aWYgKGRyYXdfcCkKKyAgICAgICAgICAgICAgICAgIHJpZi0+Y2xlYXJfZW5kX29mX2xpbmUgKHcs IHVwZGF0ZWRfcm93LCBURVhUX0FSRUEsIHhsaW0pOworICAgICAgICAgICAgICAgIGNsZWFyX3Rv X3ggPSB4bGltOworICAgICAgICAgICAgICAgIGNoYW5nZWRfcCA9IDE7CisgICAgICAgICAgICAg IH0KKworICAgICAgICBpZiAoY2hhbmdlZF9wCisgICAgICAgICAgICAmJiBjbGVhcl90b194ICE9 IDApCisgICAgICAgICAgeworICAgICAgICAgICAgaW50IHRleHRfYXJlYV93aWR0aCA9IHdpbmRv d19ib3hfd2lkdGggKHcsIFRFWFRfQVJFQSk7CisgICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGRl YnVnX2ZnID0gey5yZWQgPSAwLjg2NywgLmdyZWVuID0gMC44NjcsIC5ibHVlID0gMC44Njd9Owor ICAgICAgICAgICAgc3RydWN0IGdseXBoICp0YXJnZXRfZ2x5cGggPQorICAgICAgICAgICAgICB1 cGRhdGVkX3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gKyB1cGRhdGVkX3Jvdy0+dXNlZFtURVhUX0FS RUFdIC0gMTsKKyAgICAgICAgICAgIC8qIGBtY19lbmdpbmUnIG9ubHkgZHJhd3MgYW4gTUNfR0xZ UEggd2hlbiB4IDwgdXBkYXRlZF9yb3ctPnBpeGVsX3dpZHRoLgorICAgICAgICAgICAgVGhlIGN1 cnJlbnQgZGVzaWduIGluaGliaXRzIGRyYXdpbmcgb3ZlciBhbiBleGlzdGluZyBnbHlwaCBhdCB0 aGUgZW5kIG9mIGEKKyAgICAgICAgICAgIHdvcmQtd3JhcHBlZCBsaW5lLiAgU2FpZCBnbHlwaCBy ZWNlaXZlcyBhIGZha2UgY3Vyc29yIGluIGVpdGhlciBvbmUgb2YgdGhlCisgICAgICAgICAgICBw cmV2aW91cyBzZWN0aW9ucyBhYm92ZSwgYW5kIHNob3VsZCBub3QgYmUgb3ZlcndyaXR0ZW4gd2l0 aCBhbm90aGVyIG9uZS4KKyAgICAgICAgICAgIFRoaXMgZGVzaWduIGlzIG5lZWRlZCBiZWNhdXNl IGEgd29yZC13cmFwcGVkIGxpbmUgZG9lcyBub3QgcmVjZWl2ZSBhbiBleHRyYQorICAgICAgICAg ICAgc3BhY2UgbGlrZSBub24td29yZC13cmFwcGVkIGxpbmVzIGRvLiAqLworICAgICAgICAgICAg aW50IHggPSB1cGRhdGVkX3Jvdy0+cGl4ZWxfd2lkdGg7CisgICAgICAgICAgICBpbnQgaHBvcyA9 IHVwZGF0ZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxOworICAgICAgICAgICAgaW50IHhfbGlt aXQgPSAoY2xlYXJfdG9feCA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0ZXh0 X2FyZWFfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbGVhcl90b194OworICAg ICAgICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKHctPmNvbnRlbnRzKTsKKyAgICAg ICAgICAgIGJvb2wgZmlsbF9jb2x1bW5fdHJ1bXBzX3AgPSAoIU5JTFAgKEJWQVIgKGIsIGNoX3Zl cnRpY2FsX3J1bGVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgIU5JTFAgKEJWQVIgKGIsIGZjX3Zpc2libGUpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA9PSBlc3NlbnRpYWxzLmZjX3gpOworICAg ICAgICAgICAgaWYgKG1jX3N0ZGVycl9wKQorICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIs ICJtY191cGRhdGVfdGV4dF9hcmVhIChmbG9hdGluZyk6ICB2cG9zICglZCkgfCB4X2xpbWl0ICgl ZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnBvcywgeF9saW1pdCk7Cisg ICAgICAgICAgICBpZiAoQlVGRkVSUCAody0+Y29udGVudHMpCisgICAgICAgICAgICAgICAgJiYg IU5JTFAgKEJWQVIgKGIsIGZjX3Zpc2libGUpKQorICAgICAgICAgICAgICAgICYmIChlc3NlbnRp YWxzLmFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgIHx8ICghZXNzZW50aWFscy5hY3RpdmVf cAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIGZjX2luYWN0aXZl X3dpbmRvd3MpKSkpCisgICAgICAgICAgICAgICAgJiYgeCA8IHRleHRfYXJlYV93aWR0aAorICAg ICAgICAgICAgICAgICYmIGVzc2VudGlhbHMuZmNfeCA+PSB4CisgICAgICAgICAgICAgICAgJiYg dGFyZ2V0X2dseXBoICE9IE5VTEwKKyAgICAgICAgICAgICAgICAmJiBkcmF3X3ApCisgICAgICAg ICAgICAgIG1jX2VuZ2luZSAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRfcm93LCB0YXJnZXRf Z2x5cGgsIFRFWFRfQVJFQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB4LCB4X2xpbWl0LCB1 cGRhdGVkX3Jvdy0+eSwgaHBvcywgdnBvcywgTUNfQkFSLCAxLAorICAgICAgICAgICAgICAgICAg ICAgICAgIGN1cnNvcl9tYXRyaXgsIGVzc2VudGlhbHMsIHJvd19wb3NpdGlvbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBkZWJ1Z19wID8gZGVidWdfZmcgOiBlc3NlbnRpYWxzLmZjX2ZnW3Jv d19wb3NpdGlvbl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgRklMTF9DT0xVTU4sIGRyYXdf cCwgTk9XSEVSRSwgTk9fQ0FDSEUpOworICAgICAgICAgICAgaWYgKEJVRkZFUlAgKHctPmNvbnRl bnRzKQorICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBjcm9zc2hhaXJzKSkKKyAg ICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaG9yaXpvbnRhbF9ydWxlcikpCisg ICAgICAgICAgICAgICAgJiYgKGVzc2VudGlhbHMuYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAg ICAgfHwgKCFlc3NlbnRpYWxzLmFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAh TklMUCAoQlZBUiAoYiwgY2hfaW5hY3RpdmVfd2luZG93cykpKSkKKyAgICAgICAgICAgICAgICAm JiB4IDwgdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgICAgJiYgdnBvcyA9PSB3LT5jdXJz b3IudnBvcworICAgICAgICAgICAgICAgICYmIHRhcmdldF9nbHlwaCAhPSBOVUxMCisgICAgICAg ICAgICAgICAgJiYgZHJhd19wKQorICAgICAgICAgICAgICBtY19lbmdpbmUgKHcsIGRlc2lyZWRf bWF0cml4LCB1cGRhdGVkX3JvdywgdGFyZ2V0X2dseXBoLCBURVhUX0FSRUEsCisgICAgICAgICAg ICAgICAgICAgICAgICAgeCwgeF9saW1pdCwgdXBkYXRlZF9yb3ctPnksIGhwb3MsIHZwb3MsIE1D X0hCQVIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX21hdHJpeCwgZXNzZW50 aWFscywgcm93X3Bvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX3AgPyBk ZWJ1Z19mZyA6IGVzc2VudGlhbHMuY2hfZmdbcm93X3Bvc2l0aW9uXSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBIT1JJWk9OVEFMX1JVTEVSLCBkcmF3X3AsIE5PV0hFUkUsIE5PX0NBQ0hFKTsK KyAgICAgICAgICAgIGlmIChCVUZGRVJQICh3LT5jb250ZW50cykKKyAgICAgICAgICAgICAgICAm JiAhTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlycykpCisgICAgICAgICAgICAgICAgJiYgIU5JTFAg KEJWQVIgKGIsIGNoX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAgICAgICAgICAmJiAoZXNzZW50 aWFscy5hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICB8fCAoIWVzc2VudGlhbHMuYWN0aXZl X3AKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBjaF9pbmFjdGl2 ZV93aW5kb3dzKSkpKQorICAgICAgICAgICAgICAgICYmICFmaWxsX2NvbHVtbl90cnVtcHNfcAor ICAgICAgICAgICAgICAgICYmIHggPCB0ZXh0X2FyZWFfd2lkdGgKKyAgICAgICAgICAgICAgICAm JiB2cG9zICE9IHctPmN1cnNvci52cG9zCisgICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLngg Pj0geAorICAgICAgICAgICAgICAgICYmIHRhcmdldF9nbHlwaCAhPSBOVUxMCisgICAgICAgICAg ICAgICAgJiYgZHJhd19wKQorICAgICAgICAgICAgICBtY19lbmdpbmUgKHcsIGRlc2lyZWRfbWF0 cml4LCB1cGRhdGVkX3JvdywgdGFyZ2V0X2dseXBoLCBURVhUX0FSRUEsCisgICAgICAgICAgICAg ICAgICAgICAgICAgeCwgeF9saW1pdCwgdXBkYXRlZF9yb3ctPnksIGhwb3MsIHZwb3MsIE1DX0JB UiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfbWF0cml4LCBlc3NlbnRpYWxz LCByb3dfcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfcCA/IGRlYnVn X2ZnIDogZXNzZW50aWFscy5jaF9mZ1tyb3dfcG9zaXRpb25dLAorICAgICAgICAgICAgICAgICAg ICAgICAgIFZFUlRJQ0FMX1JVTEVSLCBkcmF3X3AsIE5PV0hFUkUsIE5PX0NBQ0hFKTsKKyAgICAg ICAgICB9CisKKyAgICAgIH0KKyAgcmV0dXJuIGNoYW5nZWRfcDsKK30KKworLyogVXBkYXRlIHJv dyBWUE9TIGluIHdpbmRvdyBXLiAgVmFsdWUgaXMgdHJ1ZSBpZiBkaXNwbGF5IGhhcyBiZWVuIGNo YW5nZWQuICovCitzdGF0aWMgYm9vbAorbWNfdXBkYXRlX3dpbmRvd19saW5lIChzdHJ1Y3Qgd2lu ZG93ICp3LCBpbnQgdnBvcywgYm9vbCAqbW91c2VfZmFjZV9vdmVyd3JpdHRlbl9wLAorICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICpjdXJzb3JfbWF0cml4LAorICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfZXNzZW50aWFscyBlc3NlbnRpYWxzLCBib29s IGRyYXdfcCkKK3sKKyAgc3RydWN0IGdseXBoX3JvdyAqY3VycmVudF9yb3cgPSBNQVRSSVhfUk9X ICh3LT5jdXJyZW50X21hdHJpeCwgdnBvcyk7CisgIHN0cnVjdCBnbHlwaF9yb3cgKmRlc2lyZWRf cm93ID0gTUFUUklYX1JPVyAody0+ZGVzaXJlZF9tYXRyaXgsIHZwb3MpOworICBzdHJ1Y3QgcmVk aXNwbGF5X2ludGVyZmFjZSAqcmlmID0gRlJBTUVfUklGIChYRlJBTUUgKFdJTkRPV19GUkFNRSAo dykpKTsKKyAgYm9vbCBjaGFuZ2VkX3AgPSAwOworICAvKiBBIHJvdyBjYW4gYmUgY29tcGxldGVs eSBpbnZpc2libGUgaW4gY2FzZSBhIGRlc2lyZWQgbWF0cml4IHdhcworICAgICBidWlsdCB3aXRo IGEgdnNjcm9sbCBhbmQgdGhlbiBtYWtlX2N1cnNvcl9saW5lX2Z1bGx5X3Zpc2libGUgc2hpZnRz CisgICAgIHRoZSBtYXRyaXguICBNYWtlIHN1cmUgdG8gbWFrZSBzdWNoIHJvd3MgY3VycmVudCBh bnl3YXksIHNpbmNlCisgICAgIHdlIG5lZWQgdGhlIGNvcnJlY3QgeS1wb3NpdGlvbiwgZm9yIGV4 YW1wbGUsIGluIHRoZSBjdXJyZW50IG1hdHJpeC4gKi8KKyAgaWYgKGRlc2lyZWRfcm93LT5tb2Rl X2xpbmVfcAorICAgICAgfHwgZGVzaXJlZF9yb3ctPnZpc2libGVfaGVpZ2h0ID4gMCkKKyAgICB7 CisgICAgICBlYXNzZXJ0IChkZXNpcmVkX3Jvdy0+ZW5hYmxlZF9wKTsKKyAgICAgIC8qIFVwZGF0 ZSBkaXNwbGF5IG9mIHRoZSBsZWZ0IG1hcmdpbiBhcmVhLCBpZiB0aGVyZSBpcyBvbmUuICovCisg ICAgICBpZiAoIWRlc2lyZWRfcm93LT5mdWxsX3dpZHRoX3AgJiYgdy0+bGVmdF9tYXJnaW5fY29s cyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICBjaGFuZ2VkX3AgPSAxOworICAgICAgICAgIHVw ZGF0ZV9tYXJnaW5hbF9hcmVhICh3LCBkZXNpcmVkX3JvdywgTEVGVF9NQVJHSU5fQVJFQSwgdnBv cyk7CisgICAgICAgICAgLyogU2V0dGluZyB0aGlzIGZsYWcgd2lsbCBlbnN1cmUgdGhlIHZlcnRp Y2FsIGJvcmRlciwgaWYKKyAgICAgICAgICAgICBhbnksIGJldHdlZW4gdGhpcyB3aW5kb3cgYW5k IHRoZSBvbmUgb24gaXRzIGxlZnQgd2lsbCBiZQorICAgICAgICAgICAgIHJlZHJhd24uICBUaGlz IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHVwZGF0aW5nIHRoZSBsZWZ0CisgICAgICAgICAgICAgbWFy Z2luIGFyZWEgY2FuIHBvdGVudGlhbGx5IGRyYXcgb3ZlciB0aGUgYm9yZGVyLiAqLworICAgICAg ICAgIGN1cnJlbnRfcm93LT5yZWRyYXdfZnJpbmdlX2JpdG1hcHNfcCA9IDE7CisgICAgICAgIH0K KyAgICAgIGJvb2wgdXBkYXRlZF9wID0gbWNfdXBkYXRlX3RleHRfYXJlYSAodywgZGVzaXJlZF9y b3csIHZwb3MsIGN1cnNvcl9tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVzc2VudGlhbHMsIGRyYXdfcCk7CisgICAgICAvKiBVcGRhdGUgdGhlIGRp c3BsYXkgb2YgdGhlIHRleHQgYXJlYS4gKi8KKyAgICAgIGlmICh1cGRhdGVkX3ApCisgICAgICAg IHsKKyAgICAgICAgICBjaGFuZ2VkX3AgPSAxOworICAgICAgICAgIGlmIChjdXJyZW50X3Jvdy0+ bW91c2VfZmFjZV9wKQorICAgICAgICAgICAgKm1vdXNlX2ZhY2Vfb3ZlcndyaXR0ZW5fcCA9IDE7 CisgICAgICAgIH0KKyAgICAgIC8qIFVwZGF0ZSBkaXNwbGF5IG9mIHRoZSByaWdodCBtYXJnaW4g YXJlYSwgaWYgdGhlcmUgaXMgb25lLiAqLworICAgICAgaWYgKCFkZXNpcmVkX3Jvdy0+ZnVsbF93 aWR0aF9wICYmIHctPnJpZ2h0X21hcmdpbl9jb2xzID4gMCkKKyAgICAgICAgeworICAgICAgICAg IGNoYW5nZWRfcCA9IDE7CisgICAgICAgICAgdXBkYXRlX21hcmdpbmFsX2FyZWEgKHcsIGRlc2ly ZWRfcm93LCBSSUdIVF9NQVJHSU5fQVJFQSwgdnBvcyk7CisgICAgICAgIH0KKyAgICAgIC8qIERy YXcgdHJ1bmNhdGlvbiBtYXJrcyBldGMuICovCisgICAgICBpZiAoIWN1cnJlbnRfcm93LT5lbmFi bGVkX3AKKyAgICAgICAgICB8fCBkZXNpcmVkX3Jvdy0+eSAhPSBjdXJyZW50X3Jvdy0+eQorICAg ICAgICAgIHx8IGRlc2lyZWRfcm93LT52aXNpYmxlX2hlaWdodCAhPSBjdXJyZW50X3Jvdy0+dmlz aWJsZV9oZWlnaHQKKyAgICAgICAgICB8fCBkZXNpcmVkX3Jvdy0+Y3Vyc29yX2luX2ZyaW5nZV9w ICE9IGN1cnJlbnRfcm93LT5jdXJzb3JfaW5fZnJpbmdlX3AKKyAgICAgICAgICB8fCBkZXNpcmVk X3Jvdy0+b3ZlcmxheV9hcnJvd19iaXRtYXAgIT0gY3VycmVudF9yb3ctPm92ZXJsYXlfYXJyb3df Yml0bWFwCisgICAgICAgICAgfHwgY3VycmVudF9yb3ctPnJlZHJhd19mcmluZ2VfYml0bWFwc19w CisgICAgICAgICAgfHwgZGVzaXJlZF9yb3ctPm1vZGVfbGluZV9wICE9IGN1cnJlbnRfcm93LT5t b2RlX2xpbmVfcAorICAgICAgICAgIHx8IGRlc2lyZWRfcm93LT5leGFjdF93aW5kb3dfd2lkdGhf bGluZV9wICE9IGN1cnJlbnRfcm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wCisgICAgICAg ICAgfHwgKE1BVFJJWF9ST1dfQ09OVElOVUFUSU9OX0xJTkVfUCAoZGVzaXJlZF9yb3cpCisgICAg ICAgICAgICAgICE9IE1BVFJJWF9ST1dfQ09OVElOVUFUSU9OX0xJTkVfUCAoY3VycmVudF9yb3cp KSkKKyAgICAgICAgcmlmLT5hZnRlcl91cGRhdGVfd2luZG93X2xpbmVfaG9vayAodywgZGVzaXJl ZF9yb3cpOworICAgIH0KKyAgLyogVXBkYXRlIGN1cnJlbnRfcm93IGZyb20gZGVzaXJlZF9yb3cu ICovCisgIG1ha2VfY3VycmVudCAody0+ZGVzaXJlZF9tYXRyaXgsIHctPmN1cnJlbnRfbWF0cml4 LCB2cG9zKTsKKyAgcmV0dXJuIGNoYW5nZWRfcDsKK30KKwordm9pZAorbWNfdXBkYXRlX3dpbmRv d19lcmFzZSAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IG1jX21hdHJpeCBvbGRfbWF0cml4KQor eworICBib29sIGRlYnVnX3AgPSBmYWxzZTsKKyAgYm9vbCBnb19vbmVfcCA9IChvbGRfbWF0cml4 LmN1cnNvcnNfdXNlZFtNQ19DQUNIRV0gPiAwCisgICAgICAgICAgICAgICAgICAgfHwgb2xkX21h dHJpeC5jdXJzb3JzX3VzZWRbQ0hfQ0FDSEVdID4gMAorICAgICAgICAgICAgICAgICAgIHx8IG9s ZF9tYXRyaXguY3Vyc29yc191c2VkW0ZDX0NBQ0hFXSA+IDApOworICBib29sIGdvX3R3b19wID0g KEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgICAgICAgICAgICAgICYmICghTklMUCAoQlZB UiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfdmlzaWJsZSkp CisgICAgICAgICAgICAgICAgICAgICAgIHx8ICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250 ZW50cyksIG1jX2NvbmYpKSkpOworICBib29sIHVwZGF0aW5nX2ZyYW1lX3AgPSBmYWxzZTsKKyAg c3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIGlmIChYRlJBTUUgKHctPmZy YW1lKSAhPSBmLT5tY191cGRhdGluZ19mcmFtZQorICAgICAgJiYgKGdvX29uZV9wIHx8IGdvX3R3 b19wKSkKKyAgICB7CisgICAgICB1cGRhdGluZ19mcmFtZV9wID0gdHJ1ZTsKKyAgICAgIHVwZGF0 ZV9iZWdpbiAoZik7CisgICAgfQorICBpZiAody0+cGh5c19jdXJzb3Jfb25fcAorICAgICAgJiYg Z29fdHdvX3ApCisgICAgZXJhc2VfcGh5c19jdXJzb3IgKHcpOworICBmb3IgKGludCB2bnRoID0g MDsKKyAgICAgICBnb19vbmVfcAorICAgICAgICYmIHZudGggPCB3LT5tY19tYXRyaXgudnBvc191 c2VkOworICAgICAgICsrdm50aCkKKyAgICB7CisgICAgICBmb3IgKGVudW0gbWNfY2FjaGVfdHlw ZSBjYWNoZV90eXBlID0gTUNfQ0FDSEU7CisgICAgICAgICAgIGNhY2hlX3R5cGUgPCBOT19DQUNI RTsKKyAgICAgICAgICAgKytjYWNoZV90eXBlKQorICAgICAgICBmb3IgKGludCBudGhfMCA9IDA7 CisgICAgICAgICAgICAgbWNfdHJhdmVyc2VfY2FjaGVfcCAob2xkX21hdHJpeCwgY2FjaGVfdHlw ZSwgdm50aCwgbnRoXzApOworICAgICAgICAgICAgICsrbnRoXzApCisgICAgICAgICAgeworICAg ICAgICAgICAgYm9vbCBzYW1lX3AgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoaW50IHdfbnRo ID0gMDsgd19udGggPCB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5 cGVdOyArK3dfbnRoKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtZV9wIHw9 IChvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmdseXBoLnR5 cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50 aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmdseXBoLnR5cGUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmICgob2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250 aF8wXS5nbHlwaC5ieXRlcG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHct Pm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5nbHlwaC5ieXRl cG9zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChvbGRfbWF0cml4LnZwb3Nb dm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLnJvd19wb3NpdGlvbiA9PSBBVF9aVgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRo XS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0ucm93X3Bvc2l0aW9uID09IEFUX1pWKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVb Y2FjaGVfdHlwZV1bbnRoXzBdLnJvd19wb3NpdGlvbiA9PSBQT1NUX1pWCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2Nh Y2hlX3R5cGVdW3dfbnRoXS5yb3dfcG9zaXRpb24gPT0gUE9TVF9aVikpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiAoKG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBl XVtudGhfMF0uZ2x5cGguY2hhcnBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9 PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uZ2x5cGgu Y2hhcnBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAob2xkX21hdHJpeC52 cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5yb3dfcG9zaXRpb24gPT0gQVRfWlYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nb dm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLnJvd19wb3NpdGlvbiA9PSBBVF9aVikKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAob2xkX21hdHJpeC52cG9zW3ZudGhdLmNh Y2hlW2NhY2hlX3R5cGVdW250aF8wXS5yb3dfcG9zaXRpb24gPT0gUE9TVF9aVgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVt3X250aF0ucm93X3Bvc2l0aW9uID09IFBPU1RfWlYpKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5 cGVdW250aF8wXS5nbHlwaC51LnZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3 LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uZ2x5cGgudS52 YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5j YWNoZVtjYWNoZV90eXBlXVtudGhfMF0uZ2x5cGguZmFjZV9pZAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA9PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3 X250aF0uZ2x5cGguZmFjZV9pZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb2xkX21h dHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5nbHlwaC5wYWRkaW5nX3AK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0u Y2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmdseXBoLnBhZGRpbmdfcAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250 aF8wXS5nbHlwaC5sZWZ0X2JveF9saW5lX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmdseXBo LmxlZnRfYm94X2xpbmVfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb2xkX21hdHJp eC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5nbHlwaC5yaWdodF9ib3hfbGlu ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHctPm1jX21hdHJpeC52cG9zW3Zu dGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5nbHlwaC5yaWdodF9ib3hfbGluZV9wCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2Fj aGVfdHlwZV1bbnRoXzBdLmdseXBoLnZvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmds eXBoLnZvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBv c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uZ2x5cGgucGl4ZWxfd2lkdGgKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVb Y2FjaGVfdHlwZV1bd19udGhdLmdseXBoLnBpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBd LmdseXBoLnNsaWNlLmltZy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHctPm1j X21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5nbHlwaC5zbGljZS5p bWcueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhd LmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5nbHlwaC5zbGljZS5pbWcueQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA9PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90 eXBlXVt3X250aF0uZ2x5cGguc2xpY2UuaW1nLnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uZ2x5cGgu c2xpY2UuaW1nLndpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHctPm1jX21h dHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5nbHlwaC5zbGljZS5pbWcu d2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRo XS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uZ2x5cGguc2xpY2UuaW1nLmhlaWdodAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA9PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtj YWNoZV90eXBlXVt3X250aF0uZ2x5cGguc2xpY2UuaW1nLmhlaWdodAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250 aF8wXS5nbHlwaC5zbGljZS5jbXAuZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9 PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uZ2x5cGgu c2xpY2UuY21wLmZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgu dnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0ueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA9PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3 X250aF0ueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3Zu dGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5meAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA9PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0u ZngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5j YWNoZVtjYWNoZV90eXBlXVtudGhfMF0ueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9 PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0ueQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2Nh Y2hlX3R5cGVdW250aF8wXS5meQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3LT5t Y19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uZnkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90 eXBlXVtudGhfMF0uaHBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3LT5tY19t YXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uaHBvcworICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5 cGVdW250aF8wXS52cG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHctPm1jX21h dHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS52cG9zCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlw ZV1bbnRoXzBdLndkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHctPm1jX21hdHJp eC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS53ZAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250 aF8wXS5oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHctPm1jX21hdHJpeC52cG9z W3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5oCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmN1 cnNvcl90eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHctPm1jX21hdHJpeC52 cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5jdXJzb3JfdHlwZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5 cGVdW250aF8wXS5jdXJzb3Jfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0g dy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmN1cnNvcl93 aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhd LmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5mZy5yZWQKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhd LmZnLnJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3Zu dGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5mZy5ncmVlbgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA9PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3 X250aF0uZmcuZ3JlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgu dnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uZmcuYmx1ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA9PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90 eXBlXVt3X250aF0uZmcuYmx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb2xkX21h dHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5iZy5yZWQKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2Fj aGVfdHlwZV1bd19udGhdLmJnLnJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb2xk X21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5iZy5ncmVlbgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVt3X250aF0uYmcuZ3JlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uYmcuYmx1 ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3LT5tY19tYXRyaXgudnBvc1t2bnRo XS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uYmcuYmx1ZQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5h Y3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3LT5tY19tYXRyaXgudnBv c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uYWN0aXZlX3AKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtu dGhfMF0uZ2x5cGhfZmxhdm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHctPm1j X21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5nbHlwaF9mbGF2b3IK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhfMF0uZW5hYmxlZF9wCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgID09IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5l bmFibGVkX3ApOworICAgICAgICAgICAgICAgIGlmIChzYW1lX3ApCisgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1Z19wKQorICAgICAgICAgICAgICAgICAg ICAgIGZwcmludGYgKHN0ZGVyciwgIkhJVCAoJXMpOiAgdnBvcyAoJWQpIHwgaHBvcyAoJWQpIHwg Y2hhciAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNh Y2hlX3R5cGUgPT0gTUNfQ0FDSEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID8gIk1DIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAo Y2FjaGVfdHlwZSA9PSBDSF9DQUNIRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgPyAiQ0giCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 IChjYWNoZV90eXBlID09IEZDX0NBQ0hFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA/ICJGQyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDogIk5PIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHctPm1jX21h dHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS52cG9zLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2Fj aGVbY2FjaGVfdHlwZV1bd19udGhdLmhwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtY19jaGFyX3RvX3N0cmluZyAody0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2Fj aGVbY2FjaGVfdHlwZV1bd19udGhdLmdseXBoLnUuY2gpKTsKKyAgICAgICAgICAgICAgICAgICAg dy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLnNhbWVfcCA9 IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVidWdfcCkKKyAgICAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICAgIGludCBvbGRfY2FjaGVfdXNlZCA9IG9sZF9tYXRyaXgu dnBvc1t2bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5cGVdOworICAgICAgICAgICAgICAgICAgICAg IGludCBuZXdfY2FjaGVfdXNlZCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlX3VzZWRb Y2FjaGVfdHlwZV07CisgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTUlT UyAoJXMpOiAgdnBvcyAoJWQpIHwgaHBvcyAoJWQgdi4gJWQpIHwgY2hhciAoJXMgdi4gJXMpIHwg Y2FjaGVfdXNlZCAoJWQgdi4gJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNhY2hlX3R5cGUgPT0gTUNfQ0FDSEUpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgID8gIk1DIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiAoY2FjaGVfdHlwZSA9PSBDSF9DQUNIRSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPyAiQ0giCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6IChjYWNoZV90eXBlID09IEZDX0NBQ0hFKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/ICJGQyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogIk5PIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS52cG9z LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX21hdHJpeC52cG9z W3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5ocG9zLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVf dHlwZV1bd19udGhdLmhwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtY19jaGFyX3RvX3N0cmluZyAob2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5 cGVdW250aF8wXS5nbHlwaC51LmNoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1jX2NoYXJfdG9fc3RyaW5nICh3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtj YWNoZV90eXBlXVt3X250aF0uZ2x5cGgudS5jaCksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvbGRfY2FjaGVfdXNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5ld19jYWNoZV91c2VkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXNhbWVfcCkKKyAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgIC8qIGBtYXRyaXhfcm93JyBpbiBgZGlzcG5ldy5jYCBjb250YWlucyB0 aGUgZm9sbG93aW5nIHRlc3RzLAorICAgICAgICAgICAgICAgIGVhc3NlcnQgKG1hdHJpeCAmJiBt YXRyaXgtPnJvd3MpOworICAgICAgICAgICAgICAgIGVhc3NlcnQgKHJvdyA+PSAwICYmIHJvdyA8 IG1hdHJpeC0+bnJvd3MpOyAqLworICAgICAgICAgICAgICAgIGJvb2wgYmFyZl9jcmFzaF9vbmUg PSAody0+Y3VycmVudF9tYXRyaXggJiYgdy0+Y3VycmVudF9tYXRyaXgtPnJvd3MpID8gZmFsc2Ug OiB0cnVlOworICAgICAgICAgICAgICAgIGlmIChiYXJmX2NyYXNoX29uZSkKKyAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGJvb2wgYmFyZl9jcmFzaF90d28gPSAo dm50aCA+PSAwICYmIHZudGggPCB3LT5jdXJyZW50X21hdHJpeC0+bnJvd3MpID8gZmFsc2UgOiB0 cnVlOworICAgICAgICAgICAgICAgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKnZudGhfcm93 ID0gTUFUUklYX1JPVyAody0+Y3VycmVudF9tYXRyaXgsIHZudGgpOworICAgICAgICAgICAgICAg IGludCB4XzAgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBd Lng7CisgICAgICAgICAgICAgICAgaW50IGZ4XzAgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2Fj aGVbY2FjaGVfdHlwZV1bbnRoXzBdLmZ4OworICAgICAgICAgICAgICAgIGludCB5XzAgPSBvbGRf bWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLnk7CisgICAgICAgICAg ICAgICAgaW50IGZ5XzAgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1b bnRoXzBdLmZ5OworICAgICAgICAgICAgICAgIGludCBocG9zXzAgPSBvbGRfbWF0cml4LnZwb3Nb dm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmhwb3M7CisgICAgICAgICAgICAgICAgaW50 IHZwb3NfMCA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0u dnBvczsKKyAgICAgICAgICAgICAgICBpbnQgd2RfMCA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5j YWNoZVtjYWNoZV90eXBlXVtudGhfMF0ud2Q7CisgICAgICAgICAgICAgICAgaW50IGhfMCA9IG9s ZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uaDsKKyAgICAgICAg ICAgICAgICBlbnVtIG1jX2N1cnNvcl90eXBlIGN1cnNvcl90eXBlXzAgPSBvbGRfbWF0cml4LnZw b3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmN1cnNvcl90eXBlOworICAgICAgICAg ICAgICAgIGludCBjdXJzb3Jfd2lkdGhfMCA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtj YWNoZV90eXBlXVtudGhfMF0uY3Vyc29yX3dpZHRoOworICAgICAgICAgICAgICAgIC8vICBzdHJ1 Y3QgbWNfUkdCIGxzbF9mZ18wID0gey5yZWQgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVb Y2FjaGVfdHlwZV1bbnRoXzBdLmZnLnJlZCwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAuZ3JlZW4gPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2Fj aGVfdHlwZV1bbnRoXzBdLmZnLmdyZWVuLAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC5ibHVlID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hl X3R5cGVdW250aF8wXS5mZy5ibHVlfTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGxz bF9iZ18wID0gey5yZWQgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1b bnRoXzBdLmJnLnJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC5ncmVlbiA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0u YmcuZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYmx1 ZSA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uYmcuYmx1 ZX07CisgICAgICAgICAgICAgICAgYm9vbCBhY3RpdmVfcF8wID0gb2xkX21hdHJpeC52cG9zW3Zu dGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5hY3RpdmVfcDsKKyAgICAgICAgICAgICAgICBl bnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3JfMCA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhfMF0uZ2x5cGhfZmxhdm9yOworICAgICAgICAgICAgICAgIGJvb2wg ZW5hYmxlZF9wXzAgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRo XzBdLmVuYWJsZWRfcDsKKyAgICAgICAgICAgICAgICBpZiAodnBvc18wID09IHZudGgKKyAgICAg ICAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yXzAgPT0gTUNfR0xZUEgKKyAgICAgICAgICAg ICAgICAgICAgJiYgZW5hYmxlZF9wXzAKKyAgICAgICAgICAgICAgICAgICAgJiYgdm50aF9yb3ct PmVuYWJsZWRfcCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWNf ZXJhc2VfY3Vyc29yICh3LCB3LT5jdXJyZW50X21hdHJpeCwgdm50aF9yb3csIG9sZF9tYXRyaXgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeF8wLCB5XzAsIGhwb3NfMCwg dnBvc18wLCBnbHlwaF9mbGF2b3JfMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjdXJzb3JfdHlwZV8wLCB3ZF8wKTsKKyAgICAgICAgICAgICAgICAgICAgb2xkX21hdHJp eC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5lbmFibGVkX3AgPSBmYWxzZTsK KyAgICAgICAgICAgICAgICAgICAgLS1vbGRfbWF0cml4LmN1cnNvcnNfdXNlZFtjYWNoZV90eXBl XTsKKyAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgaW5hZHZlcnRlbnRseSBlcmFzZWQgYW5v dGhlciBmYWtlIGN1cnNvciBhdCB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICBIUE9TIHRo YXQgaXMgc3RpbGwgZW5hYmxlZF9wIGluIHRoZSBgb2xkX21hdHJpeGAsIHRoZW4gcmVkcmF3IGl0 LiAqLworICAgICAgICAgICAgICAgICAgICBmb3IgKGVudW0gbWNfY2FjaGVfdHlwZSBjYWNoZV90 eXBlID0gTUNfQ0FDSEU7CisgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfdHlwZSA8IE5P X0NBQ0hFOworICAgICAgICAgICAgICAgICAgICAgICAgICsrY2FjaGVfdHlwZSkKKyAgICAgICAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBudGhfMSA9 IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jX3RyYXZlcnNlX2NhY2hlX3AgKG9s ZF9tYXRyaXgsIGNhY2hlX3R5cGUsIHZudGgsIG50aF8xKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKytudGhfMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCB4XzEgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVb Y2FjaGVfdHlwZV1bbnRoXzFdLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZ4 XzEgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzFdLmZ4Owor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5XzEgPSBvbGRfbWF0cml4LnZwb3Nbdm50 aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzFdLnk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGZ5XzEgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRo XzFdLmZ5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBocG9zXzEgPSBvbGRfbWF0 cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzFdLmhwb3M7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHZwb3NfMSA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhfMV0udnBvczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgd2RfMSA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMV0u d2Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhfMSA9IG9sZF9tYXRyaXgudnBv c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMV0uaDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIG1jX2N1cnNvcl90eXBlIGN1cnNvcl90eXBlXzEgPSBvbGRfbWF0cml4LnZw b3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzFdLmN1cnNvcl90eXBlOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBjdXJzb3Jfd2lkdGhfMSA9IG9sZF9tYXRyaXgudnBvc1t2 bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMV0uY3Vyc29yX3dpZHRoOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBtY19SR0IgbHNsX2ZnXzEgPSB7LnJlZCA9IG9sZF9tYXRy aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMV0uZmcucmVkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdyZWVuID0gb2xk X21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8xXS5mZy5ncmVlbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ibHVl ID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8xXS5mZy5ibHVl fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgc3RydWN0IG1jX1JHQiBsc2xfYmdf MSA9IHsucmVkID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8x XS5iZy5yZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAg ICAgICAgICAgICAgLmdyZWVuID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5 cGVdW250aF8xXS5iZy5ncmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAuYmx1ZSA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhfMV0uYmcuYmx1ZX07CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYm9vbCBhY3RpdmVfcF8xID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5 cGVdW250aF8xXS5hY3RpdmVfcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1j X2ZsYXZvciBnbHlwaF9mbGF2b3JfMSA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo ZV90eXBlXVtudGhfMV0uZ2x5cGhfZmxhdm9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgZW5hYmxlZF9wXzEgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlw ZV1bbnRoXzFdLmVuYWJsZWRfcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGdv X3BfMSA9IChocG9zXzAgPT0gaHBvc18xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgZW5hYmxlZF9wXzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmICghZ29fcF8xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW1vdmVfcF8xID0gZmFsc2U7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWNfZHJhd19lcmFzZV9oeWJyaWQgKHcsIHctPmN1cnJl bnRfbWF0cml4LCB2bnRoX3JvdywgeF8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmeF8xLCB5XzEsIGZ5XzEsIGhwb3NfMSwgdnBvc18xLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZF8xLCBoXzEs IGN1cnNvcl90eXBlXzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGN1cnNvcl93aWR0aF8xLCBsc2xfZmdfMSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlX3BfMSwgZ2x5cGhfZmxhdm9yXzEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92 ZV9wXzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodnBv c18wID09IHZudGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVuYWJsZWRfcF8wCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB2bnRoX3Jvdy0+ZW5hYmxlZF9wKQorICAgICAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW1vdmVfcF8wID0g dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywgdy0+ Y3VycmVudF9tYXRyaXgsIHZudGhfcm93LCB4XzAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZ4XzAsIHlfMCwgZnlfMCwgaHBvc18wLCB2cG9zXzAsIHdkXzAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhfMCwgY3Vyc29y X3R5cGVfMCwgY3Vyc29yX3dpZHRoXzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxzbF9iZ18wLCBhY3RpdmVfcF8wLCBnbHlwaF9mbGF2b3JfMCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX3BfMCk7CisgICAg ICAgICAgICAgICAgICAgICAgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVd W250aF8wXS5lbmFibGVkX3AgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAtLW9sZF9t YXRyaXguY3Vyc29yc191c2VkW2NhY2hlX3R5cGVdOworICAgICAgICAgICAgICAgICAgICAgIC8q IElmIHdlIGluYWR2ZXJ0ZW50bHkgZXJhc2VkIGFub3RoZXIgZmFrZSBjdXJzb3IgYXQgdGhlIHNh bWUKKyAgICAgICAgICAgICAgICAgICAgICBIUE9TIHRoYXQgaXMgc3RpbGwgZW5hYmxlZF9wIGlu IHRoZSBgb2xkX21hdHJpeGAsIHRoZW4gcmVkcmF3IGl0LiAqLworICAgICAgICAgICAgICAgICAg ICAgIGZvciAoZW51bSBtY19jYWNoZV90eXBlIGNhY2hlX3R5cGUgPSBNQ19DQUNIRTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX3R5cGUgPCBOT19DQUNIRTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICsrY2FjaGVfdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgbnRoXzIgPSAwOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1jX3RyYXZlcnNlX2NhY2hlX3AgKG9sZF9tYXRyaXgsIGNh Y2hlX3R5cGUsIHZudGgsIG50aF8yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr K250aF8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCB4XzIgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVf dHlwZV1bbnRoXzJdLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnhfMiA9 IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMl0uZng7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeV8yID0gb2xkX21hdHJpeC52cG9zW3ZudGhd LmNhY2hlW2NhY2hlX3R5cGVdW250aF8yXS55OworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGZ5XzIgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRo XzJdLmZ5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhwb3NfMiA9IG9sZF9t YXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMl0uaHBvczsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCB2cG9zXzIgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0u Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXzJdLnZwb3M7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgd2RfMiA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtu dGhfMl0ud2Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaF8yID0gb2xkX21h dHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8yXS5oOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZV8yID0gb2xk X21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8yXS5jdXJzb3JfdHlwZTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJzb3Jfd2lkdGhfMiA9IG9sZF9t YXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMl0uY3Vyc29yX3dpZHRoOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2xfZmdfMiA9IHsu cmVkID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8yXS5mZy5y ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC5ncmVlbiA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhf Ml0uZmcuZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC5ibHVlID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5 cGVdW250aF8yXS5mZy5ibHVlfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBz dHJ1Y3QgbWNfUkdCIGxzbF9iZ18yID0gey5yZWQgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2Fj aGVbY2FjaGVfdHlwZV1bbnRoXzJdLmJnLnJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ncmVlbiA9IG9sZF9tYXRyaXgudnBv c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMl0uYmcuZ3JlZW4sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYmx1ZSA9IG9s ZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMl0uYmcuYmx1ZX07Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdGl2ZV9wXzIgPSBvbGRfbWF0cml4 LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzJdLmFjdGl2ZV9wOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yXzIgPSBvbGRf bWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzJdLmdseXBoX2ZsYXZvcjsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5hYmxlZF9wXzIgPSBvbGRfbWF0 cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzJdLmVuYWJsZWRfcDsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ29fcF8yID0gKGhwb3NfMCA9PSBocG9zXzIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGZ4XzAgPD0g ZnhfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZnhf MCArIHdkXzAgPiBmeF8yICsgd2RfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgZW5hYmxlZF9wXzIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCFnb19wXzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW1vdmVfcF8yID0gZmFsc2U7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywg dy0+Y3VycmVudF9tYXRyaXgsIHZudGhfcm93LCB4XzIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnhfMiwgeV8yLCBmeV8yLCBocG9zXzIsIHZw b3NfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3ZF8yLCBoXzIsIGN1cnNvcl90eXBlXzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX3dpZHRoXzIsIGxzbF9mZ18yLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9wXzIs IGdseXBoX2ZsYXZvcl8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlbW92ZV9wXzIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgfQorICBpZiAodXBkYXRpbmdfZnJhbWVfcCkK KyAgICB1cGRhdGVfZW5kIChmKTsKK30KKwordm9pZAorbWNfdXBkYXRlX3dpbmRvd19kcnlydW4g KHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgZm9yY2VfcCwgc3RydWN0IG1jX2Vzc2VudGlhbHMgZXNz ZW50aWFscykKK3sKKyAgaWYgKCFCVUZGRVJQICh3LT5jb250ZW50cykpCisgICAgcmV0dXJuOwor CisgIGlmICh3LT5tY19tYXRyaXguY3Vyc29yc191c2VkW01DX0NBQ0hFXSA9PSAwCisgICAgICAm JiB3LT5tY19tYXRyaXguY3Vyc29yc191c2VkW0NIX0NBQ0hFXSA9PSAwCisgICAgICAmJiB3LT5t Y19tYXRyaXguY3Vyc29yc191c2VkW0ZDX0NBQ0hFXSA9PSAwCisgICAgICAmJiBOSUxQIChCVkFS IChYQlVGRkVSICh3LT5jb250ZW50cyksIG1jX2NvbmYpKQorICAgICAgJiYgTklMUCAoQlZBUiAo WEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICYmIE5JTFAgKEJWQVIg KFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfdmlzaWJsZSkpKQorICAgIHJldHVybjsKKworICAv LyBjbG9ja190IGNsb2NrX3N0YXJ0ID0gY2xvY2soKTsKKworICBib29sIGRyYXdfcCA9IGZhbHNl OworCisgIHN0cnVjdCBnbHlwaF9tYXRyaXggKnNhdmVkX2Rlc2lyZWQgPSBtY19zYXZlX2dseXBo X21hdHJpeCAody0+ZGVzaXJlZF9tYXRyaXgpOworICBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICpzYXZl ZF9jdXJyZW50ID0gbWNfc2F2ZV9nbHlwaF9tYXRyaXggKHctPmN1cnJlbnRfbWF0cml4KTsKKwor ICBzdHJ1Y3QgbWNfbWF0cml4IG9sZF9tYXRyaXggPSBtY19zYXZlX2NhY2hlX21hdHJpeCAody0+ bWNfbWF0cml4KTsKKworICBtY19yZXNldF9jYWNoZSAodyk7CisKKyAgc3RydWN0IGdseXBoX21h dHJpeCAqY3Vyc29yX21hdHJpeCA9IE5VTEw7CisKKyAgc3RydWN0IGdseXBoX21hdHJpeCAqZGVz aXJlZF9tYXRyaXggPSB3LT5kZXNpcmVkX21hdHJpeDsKKyAgYm9vbCBwYXVzZWRfcDsKKyAgaW50 IHByZWVtcHRfY291bnQgPSBiYXVkX3JhdGUgLyAyNDAwICsgMTsKKworI2lmZGVmIEdMWVBIX0RF QlVHCisgIC8qIENoZWNrIHRoYXQgVydzIGZyYW1lIGRvZXNuJ3QgaGF2ZSBnbHlwaCBtYXRyaWNl cy4gKi8KKyAgZWFzc2VydCAoRlJBTUVfV0lORE9XX1AgKFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3 KSkpKTsKKyNlbmRpZgorCisgIC8qIENoZWNrIHBlbmRpbmcgaW5wdXQgdGhlIGZpcnN0IHRpbWUg c28gdGhhdCB3ZSBjYW4gcXVpY2tseSByZXR1cm4uICovCisgIGlmICghZm9yY2VfcCkKKyAgICBk ZXRlY3RfaW5wdXRfcGVuZGluZ19pZ25vcmVfc3F1ZWV6YWJsZXMgKCk7CisKKyAgLyogSWYgZm9y Y2VkIHRvIGNvbXBsZXRlIHRoZSB1cGRhdGUsIG9yIGlmIG5vIGlucHV0IGlzIHBlbmRpbmcsIGRv IHRoZSB1cGRhdGUuICovCisgIGlmIChmb3JjZV9wIHx8ICFpbnB1dF9wZW5kaW5nIHx8ICFOSUxQ IChkb19tb3VzZV90cmFja2luZykpCisgICAgeworICAgICAgc3RydWN0IGdseXBoX3JvdyAqaGVh ZGVyX2xpbmVfcm93OworICAgICAgYm9vbCBjaGFuZ2VkX3AgPSAwOworICAgICAgYm9vbCBtb3Vz ZV9mYWNlX292ZXJ3cml0dGVuX3AgPSAwOworICAgICAgaW50IG5fdXBkYXRlZCA9IDA7CisgICAg ICAvLyAgc3RydWN0IHJlZGlzcGxheV9pbnRlcmZhY2UgKnJpZiA9IEZSQU1FX1JJRiAoWEZSQU1F IChXSU5ET1dfRlJBTUUgKHcpKSk7CisgICAgICAvLyAgcmlmLT51cGRhdGVfd2luZG93X2JlZ2lu X2hvb2sgKHcpOworICAgICAgaW50IHliID0gd2luZG93X3RleHRfYm90dG9tX3kgKHcpOworICAg ICAgc3RydWN0IGdseXBoX3JvdyAqcm93ID0gTUFUUklYX1JPVyAoZGVzaXJlZF9tYXRyaXgsIDAp OworICAgICAgc3RydWN0IGdseXBoX3JvdyAqZW5kID0gTUFUUklYX01PREVfTElORV9ST1cgKGRl c2lyZWRfbWF0cml4KTsKKworICAgICAgLyogVGFrZSBub3RlIG9mIHRoZSBoZWFkZXIgbGluZSwg aWYgdGhlcmUgaXMgb25lLiAgV2Ugd2lsbAorICAgICAgICAgdXBkYXRlIGl0IGJlbG93LCBhZnRl ciB1cGRhdGluZyBhbGwgb2YgdGhlIHdpbmRvdydzIGxpbmVzLiAqLworICAgICAgaWYgKHJvdy0+ bW9kZV9saW5lX3ApCisgICAgICAgIHsKKyAgICAgICAgICBoZWFkZXJfbGluZV9yb3cgPSByb3c7 CisgICAgICAgICAgKytyb3c7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGhl YWRlcl9saW5lX3JvdyA9IE5VTEw7CisKKyAgICAgIC8qIFVwZGF0ZSB0aGUgbW9kZSBsaW5lLCBp ZiBuZWNlc3NhcnkuICovCisgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICptb2RlX2xpbmVfcm93ID0g TUFUUklYX01PREVfTElORV9ST1cgKGRlc2lyZWRfbWF0cml4KTsKKyAgICAgIGlmIChtb2RlX2xp bmVfcm93LT5tb2RlX2xpbmVfcCAmJiBtb2RlX2xpbmVfcm93LT5lbmFibGVkX3ApCisgICAgICAg IHsKKyAgICAgICAgICBtb2RlX2xpbmVfcm93LT55ID0geWIgKyBXSU5ET1dfU0NST0xMX0JBUl9B UkVBX0hFSUdIVCAodyk7CisgICAgICAgICAgdXBkYXRlX3dpbmRvd19saW5lICh3LCBNQVRSSVhf Uk9XX1ZQT1MgKG1vZGVfbGluZV9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRlc2lyZWRfbWF0cml4KSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZtb3VzZV9mYWNlX292ZXJ3cml0dGVuX3ApOworICAgICAgICB9CisKKyAgICAg IC8qIEZpbmQgZmlyc3QgZW5hYmxlZCByb3cuICBPcHRpbWl6YXRpb25zIGluIHJlZGlzcGxheV9p bnRlcm5hbAorICAgICAgICAgbWF5IGxlYWQgdG8gYW4gdXBkYXRlIHdpdGggb25seSBvbmUgcm93 IGVuYWJsZWQuICBUaGVyZSBtYXkKKyAgICAgICAgIGJlIGFsc28gY29tcGxldGVseSBlbXB0eSBt YXRyaWNlcy4gKi8KKyAgICAgIHdoaWxlIChyb3cgPCBlbmQgJiYgIXJvdy0+ZW5hYmxlZF9wKQor ICAgICAgICArK3JvdzsKKworICAgICAgLyogVHJ5IHJldXNpbmcgcGFydCBvZiB0aGUgZGlzcGxh eSBieSBjb3B5aW5nLiAqLworICAgICAgaWYgKHJvdyA8IGVuZCAmJiAhdy0+ZGVzaXJlZF9tYXRy aXgtPm5vX3Njcm9sbGluZ19wKQorICAgICAgICB7CisgICAgICAgICAgaW50IHJjID0gbWNfc2Ny b2xsaW5nX3dpbmRvdyAodywgaGVhZGVyX2xpbmVfcm93ICE9IE5VTEwpOworICAgICAgICAgIGlm IChyYyA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIEFsbCByb3dzIHdlcmUg Zm91bmQgdG8gYmUgZXF1YWwuICovCisgICAgICAgICAgICAgIHBhdXNlZF9wID0gMDsKKyAgICAg ICAgICAgICAgZ290byBzZXRfY3Vyc29yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz ZSBpZiAocmMgPiAwKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogV2UndmUg c2Nyb2xsZWQgdGhlIGRpc3BsYXkuICovCisgICAgICAgICAgICAgICAgZm9yY2VfcCA9IDE7Cisg ICAgICAgICAgICAgICAgY2hhbmdlZF9wID0gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgICAvKiBQcm9jZXNzIHRoZSBjdXJzb3Igcm93IGF0IHRoZSBvdXRzZXQgaWYgaXQgaXMg d2l0aGluIGBkZXNpcmVkX21hdHJpeGAuCisgICAgICBXaGVuIHByb2Nlc3NpbmcgYWxsIG90aGVy IHJvd3MsIHdlIHdpbGwgcXVlcnkgdGhlIGB3LT5jdXJyZW50X21hdHJpeGAgZm9yIGRhdGEKKyAg ICAgIHJlbGF0aW5nIHRvIHRoZSBjdXJzb3Igcm93LiAgYG1ha2VfY3VycmVudGAgKHdpdGhpbiBg dXBkYXRlX3dpbmRvd19saW5lJykKKyAgICAgIHVwZGF0ZXMgdGhlIGB3LT5jdXJyZW50X21hdHJp eGAgZm9yIHRoZSBhcHBsaWNhYmxlIHJvdy4gIEluIGRvaW5nIHNvLCBob3dldmVyLAorICAgICAg dGhlIGFwcGxpY2FibGUgcm93IGluIHRoZSBkZXNpcmVkIG1hdHJpeCBpcyBhbHRlcmVkIHN1Y2gg dGhhdCB3ZSBjYW4gbm8gbG9uZ2VyCisgICAgICByZWx5IHVwb24gdGhlIGFjY3VyYWN5IG9mIGBS T1ctPnVzZWRbVEVYVF9BUkVBXWAuICBUaGVyZWZvcmUsIHdlIG11c3Qgbm93IHJlbHkKKyAgICAg IGV4Y2x1c2l2ZWx5IHVwb24gYHctPmN1cnJlbnRfbWF0cml4JyBmb3IgY3Vyc29yIHJvdyBiYXNl ZCBkZWNpc2lvbnMuICovCisgICAgICBmb3IgKHN0cnVjdCBnbHlwaF9yb3cgKm1jX3JvdyA9IHJv dzsKKyAgICAgICAgICAgbWNfcm93IDwgZW5kICYmIChmb3JjZV9wIHx8ICFpbnB1dF9wZW5kaW5n KTsKKyAgICAgICAgICAgKyttY19yb3cpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgdnBvcyA9 IE1BVFJJWF9ST1dfVlBPUyAobWNfcm93LCB3LT5kZXNpcmVkX21hdHJpeCk7CisgICAgICAgICAg aWYgKG1jX3Jvdy0+ZW5hYmxlZF9wCisgICAgICAgICAgICAgICYmIHZwb3MgPT0gdy0+Y3Vyc29y LnZwb3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGN1cnNvcl9tYXRyaXggPSB3LT5k ZXNpcmVkX21hdHJpeDsKKyAgICAgICAgICAgICAgaWYgKCFmb3JjZV9wICYmICsrbl91cGRhdGVk ICUgcHJlZW1wdF9jb3VudCA9PSAwKQorICAgICAgICAgICAgICAgIGRldGVjdF9pbnB1dF9wZW5k aW5nX2lnbm9yZV9zcXVlZXphYmxlcyAoKTsKKyAgICAgICAgICAgICAgY2hhbmdlZF9wIHw9IG1j X3VwZGF0ZV93aW5kb3dfbGluZSAodywgdnBvcywgJm1vdXNlX2ZhY2Vfb3ZlcndyaXR0ZW5fcCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29y X21hdHJpeCwgZXNzZW50aWFscywgZHJhd19wKTsKKyAgICAgICAgICAgICAgaWYgKE1BVFJJWF9S T1dfQk9UVE9NX1kgKHJvdykgPj0geWIpCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IHZw b3MgKyAxOyBpIDwgdy0+Y3VycmVudF9tYXRyaXgtPm5yb3dzIC0gMTsgKytpKQorICAgICAgICAg ICAgICAgICAgU0VUX01BVFJJWF9ST1dfRU5BQkxFRF9QICh3LT5jdXJyZW50X21hdHJpeCwgaSwg ZmFsc2UpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgY3Vyc29yX21hdHJpeCA9IHctPmN1cnJlbnRfbWF0cml4OworICAgICAgLyogVXBkYXRl IHRoZSByZXN0IG9mIHRoZSBsaW5lcy4gKi8KKyAgICAgIGZvciAoOyByb3cgPCBlbmQgJiYgKGZv cmNlX3AgfHwgIWlucHV0X3BlbmRpbmcpOyArK3JvdykKKyAgICAgICAgLyogc2Nyb2xsaW5nX3dp bmRvdyByZXNldHMgdGhlIGVuYWJsZWRfcCBmbGFnIG9mIHRoZSByb3dzIGl0IHJldXNlcyBmcm9t CisgICAgICAgIGN1cnJlbnRfbWF0cml4LiAqLworICAgICAgICBpZiAocm93LT5lbmFibGVkX3Ap CisgICAgICAgICAgeworICAgICAgICAgICAgaW50IHZwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKHJv dywgdy0+ZGVzaXJlZF9tYXRyaXgpOworICAgICAgICAgICAgLyogSWYgdGhlIGBjdXJzb3Jfcm93 YCBpcyB3aXRoaW4gdGhlIGBkZXNpcmVkX21hdHJpeGAsIHRoZW4gaXQgd2FzCisgICAgICAgICAg ICBwcm9jZXNzZWQgaGVyZWluYWJvdmUgYW5kIHNob3VsZCBiZSBza2lwcGVkIGF0IHRoaXMgdGlt ZS4gKi8KKyAgICAgICAgICAgIGlmICh2cG9zID09IHctPmN1cnNvci52cG9zKQorICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIC8qIFdlJ2xsIGhh dmUgdG8gcGxheSBhIGxpdHRsZSBiaXQgd2l0aCB3aGVuIHRvCisgICAgICAgICAgICAgICBkZXRl Y3RfaW5wdXRfcGVuZGluZy4gIElmIGl0J3MgZG9uZSB0b28gb2Z0ZW4sCisgICAgICAgICAgICAg ICBzY3JvbGxpbmcgbGFyZ2Ugd2luZG93cyB3aXRoIHJlcGVhdGVkIHNjcm9sbC11cAorICAgICAg ICAgICAgICAgY29tbWFuZHMgd2lsbCB0b28gcXVpY2tseSBwYXVzZSByZWRpc3BsYXkuICovCisg ICAgICAgICAgICBpZiAoIWZvcmNlX3AgJiYgKytuX3VwZGF0ZWQgJSBwcmVlbXB0X2NvdW50ID09 IDApCisgICAgICAgICAgICAgIGRldGVjdF9pbnB1dF9wZW5kaW5nX2lnbm9yZV9zcXVlZXphYmxl cyAoKTsKKyAgICAgICAgICAgIGNoYW5nZWRfcCB8PSBtY191cGRhdGVfd2luZG93X2xpbmUgKHcs IHZwb3MsICZtb3VzZV9mYWNlX292ZXJ3cml0dGVuX3AsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfbWF0cml4LCBlc3NlbnRpYWxzLCBkcmF3 X3ApOworICAgICAgICAgICAgLyogTWFyayBhbGwgcm93cyBiZWxvdyB0aGUgbGFzdCB2aXNpYmxl IG9uZSBpbiB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgbWF0cml4IGFzIGludmFsaWQuICBU aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mCisgICAgICAgICAgICAgICB2YXJpYWJsZSBsaW5l IGhlaWdodHMuICBDb25zaWRlciB0aGUgY2FzZSBvZiB0aHJlZQorICAgICAgICAgICAgICAgc3Vj Y2Vzc2l2ZSByZWRpc3BsYXlzLCB3aGVyZSB0aGUgZmlyc3QgZGlzcGxheXMgNQorICAgICAgICAg ICAgICAgbGluZXMsIHRoZSBzZWNvbmQgMyBsaW5lcywgYW5kIHRoZSB0aGlyZCA1IGxpbmVzIGFn YWluLgorICAgICAgICAgICAgICAgSWYgdGhlIHNlY29uZCByZWRpc3BsYXkgd291bGRuJ3QgbWFy ayByb3dzIGluIHRoZQorICAgICAgICAgICAgICAgY3VycmVudCBtYXRyaXggaW52YWxpZCwgdGhl IHRoaXJkIHJlZGlzcGxheSBtaWdodCBiZQorICAgICAgICAgICAgICAgdGVtcHRlZCB0byBvcHRp bWl6ZSByZWRpc3BsYXkgYmFzZWQgb24gbGluZXMgZGlzcGxheWVkCisgICAgICAgICAgICAgICBp biB0aGUgZmlyc3QgcmVkaXNwbGF5LiAqLworICAgICAgICAgICAgaWYgKE1BVFJJWF9ST1dfQk9U VE9NX1kgKHJvdykgPj0geWIpCisgICAgICAgICAgICAgIGZvciAoaSA9IHZwb3MgKyAxOyBpIDwg dy0+Y3VycmVudF9tYXRyaXgtPm5yb3dzIC0gMTsgKytpKQorICAgICAgICAgICAgICAgIFNFVF9N QVRSSVhfUk9XX0VOQUJMRURfUCAody0+Y3VycmVudF9tYXRyaXgsIGksIGZhbHNlKTsKKyAgICAg ICAgICB9CisgICAgICAvKiBXYXMgZGlzcGxheSBwcmVlbXB0ZWQ/ICovCisgICAgICBwYXVzZWRf cCA9IHJvdyA8IGVuZDsKKyAgICAgIHNldF9jdXJzb3I6CisgICAgICAvKiBJZiB3ZSBqdW1wZWQg aGVyZSBmcm9tIGBzZXRfY3Vyc29yYCwgdGhlbiBzZXQgdGhlIGBjdXJzb3JfbWF0cml4YC4gKi8K KyAgICAgIGlmIChjdXJzb3JfbWF0cml4ID09IE5VTEwpCisgICAgICAgIGN1cnNvcl9tYXRyaXgg PSB3LT5jdXJyZW50X21hdHJpeDsKKyAgICAgIC8qIFJlc2V0IGByb3dgIHRvIDAgc28gdGhhdCBm YWtlIGN1cnNvcnMgY2FuIGJlIGRyYXduIG9uIHJvd3MgcHJlY2VkaW5nIHRoZQorICAgICAgZmly c3QgYHJvdy0+ZW5hYmxlZF9wYC4gIEp1c3QgcHJpb3IgdG8gdGhlIGNhbGwgdG8gYHNjcm9sbGlu Z193aW5kb3cnIGFib3ZlLAorICAgICAgYHJvd2Agd2FzIGFkdmFuY2VkIHRvIHRoZSBmaXJzdCBg cm93LT5lbmFibGVkX3BgLiAqLworICAgICAgZm9yIChzdHJ1Y3QgZ2x5cGhfcm93ICpkZXNpcmVk X3JvdyA9IE1BVFJJWF9ST1cgKHctPmRlc2lyZWRfbWF0cml4LCAwKTsKKyAgICAgICAgICAgZGVz aXJlZF9yb3cgPCBlbmQKKyAgICAgICAgICAgJiYgKGZvcmNlX3AgfHwgIWlucHV0X3BlbmRpbmcp CisgICAgICAgICAgIC8qIFczMiBFbWFjcyBjcmFzaGVzIG9uIHN0YXJ0dXAgd2l0aG91dCBhIEJV RkZFUlAgY2hlY2suICovCisgICAgICAgICAgICYmIEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAg ICAgICAgICAmJiAoIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfY29uZikp CisgICAgICAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBj cm9zc2hhaXJzKSkKKyAgICAgICAgICAgICAgIHx8ICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5j b250ZW50cyksIGZjX3Zpc2libGUpKSk7CisgICAgICAgICAgICsrZGVzaXJlZF9yb3cpCisgICAg ICAgIHsKKyAgICAgICAgICBpbnQgdnBvcyA9IE1BVFJJWF9ST1dfVlBPUyAoZGVzaXJlZF9yb3cs IHctPmRlc2lyZWRfbWF0cml4KTsKKyAgICAgICAgICBpZiAoZGVzaXJlZF9yb3ctPmVuYWJsZWRf cCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKmN1 cnJlbnRfcm93ID0gTUFUUklYX1JPVyAody0+Y3VycmVudF9tYXRyaXgsIHZwb3MpOworICAgICAg ICAgIGVudW0gbWNfcm93X3Bvc2l0aW9uIHJvd19wb3NpdGlvbiA9IG1jX3Jvd19wb3NpdGlvbiAo dywgY3VycmVudF9yb3csIGN1cnJlbnRfcm93LCB2cG9zKTsKKyAgICAgICAgICBpZiAoY3VycmVu dF9yb3ctPmVuYWJsZWRfcCkKKyAgICAgICAgICAgIG1jX2RyYXdfcm93ICh3LCB3LT5jdXJyZW50 X21hdHJpeCwgY3VycmVudF9yb3csIGN1cnJlbnRfcm93LT5nbHlwaHNbVEVYVF9BUkVBXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3Jvdy0+eCwgY3VycmVudF9yb3ctPnVzZWRb VEVYVF9BUkVBXSwgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfbWF0cml4 LCBlc3NlbnRpYWxzLCByb3dfcG9zaXRpb24sIGRyYXdfcCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBTRVRfQ1VSU09SX09ORSk7CisgICAgICAgIH0KKworICAgICAgbWNfcmVzdG9yZV9nbHlw aF9tYXRyaXggKHNhdmVkX2Rlc2lyZWQsIHctPmRlc2lyZWRfbWF0cml4KTsKKyAgICAgIG1jX3Jl c3RvcmVfZ2x5cGhfbWF0cml4IChzYXZlZF9jdXJyZW50LCB3LT5jdXJyZW50X21hdHJpeCk7CisK KyAgICAgIG1jX3VwZGF0ZV93aW5kb3dfZXJhc2UgKHcsIG9sZF9tYXRyaXgpOworCisgICAgICBt Y194ZnJlZV9jYWNoZV9tYXRyaXggKHcsICZvbGRfbWF0cml4KTsKKworICAgIH0KKyAgLy8gY2xv Y2tfdCBjbG9ja19lbmQgPSBjbG9jaygpOworICAvLyBkb3VibGUgY3B1X3RpbWVfdXNlZCA9ICgo ZG91YmxlKSAoY2xvY2tfZW5kIC0gY2xvY2tfc3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOworICAv LyBmcHJpbnRmIChzdGRlcnIsICJtY19zY3JvbGxpbmdfd2luZG93ICglcyk6ICBUSU1FICglZilc biIsIG1jX3dpbmRvdyAodyksIGNwdV90aW1lX3VzZWQpOworfQorCisvKiBlbmQgTVVMVElQTEUt Q1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogLyogU3RydWN0dXJlIHRv IHBhc3MgZGltZW5zaW9ucyBhcm91bmQuICBVc2VkIGZvciBjaGFyYWN0ZXIgYm91bmRpbmcKICAg IGJveGVzLCBnbHlwaCBtYXRyaXggZGltZW5zaW9ucyBhbmQgYWxpa2UuICAqLwogCkBAIC0yMjQx LDYgKzQwMTcsMTYgQEAgZnJlZV93aW5kb3dfbWF0cmljZXMgKHN0cnVjdCB3aW5kb3cgKncpCiAJ ICBmcmVlX2dseXBoX21hdHJpeCAody0+Y3VycmVudF9tYXRyaXgpOwogCSAgZnJlZV9nbHlwaF9t YXRyaXggKHctPmRlc2lyZWRfbWF0cml4KTsKIAkgIHctPmN1cnJlbnRfbWF0cml4ID0gdy0+ZGVz aXJlZF9tYXRyaXggPSBOVUxMOworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVM VElQTEUtQ1VSU09SUyAqLworCisgIG1jX3hmcmVlX2NhY2hlX21hdHJpeCAodywgJnctPm1jX21h dHJpeCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAl9CiAKICAgICAgIC8qIE5l eHQgd2luZG93IG9uIHNhbWUgbGV2ZWwuICAqLwpAQCAtMzM4Nyw2ICs1MTczLDI2IEBAIGNoZWNr X2N1cnJlbnRfbWF0cml4X2ZsYWdzIChzdHJ1Y3Qgd2luZG93ICp3KQogc3RhdGljIGJvb2wKIHVw ZGF0ZV93aW5kb3cgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgZm9yY2VfcCkKIHsKKworCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBpZiAobWNf c3RkZXJyX3ApCisgICAgZnByaW50ZiAoc3RkZXJyLCAidXBkYXRlX3dpbmRvdyAoJXMpXG4iLCBt Y193aW5kb3cgKHcpKTsKKworICBzdHJ1Y3QgbWNfZXNzZW50aWFscyBlc3NlbnRpYWxzOworICBt Y19zZXRfZXNzZW50aWFscyAodywgJmVzc2VudGlhbHMpOworCisgIG1jX3VwZGF0ZV93aW5kb3df ZHJ5cnVuICh3LCBmb3JjZV9wLCBlc3NlbnRpYWxzKTsKKworICBzdHJ1Y3QgZ2x5cGhfbWF0cml4 ICpjdXJzb3JfbWF0cml4ID0gTlVMTDsKKworICBib29sIGRyYXdfcCA9IHRydWU7CisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworCisKICAgc3RydWN0IGdseXBoX21hdHJpeCAqZGVzaXJlZF9t YXRyaXggPSB3LT5kZXNpcmVkX21hdHJpeDsKICAgYm9vbCBwYXVzZWRfcDsKICAgaW50IHByZWVt cHRfY291bnQgPSBjbGlwX3RvX2JvdW5kcyAoMSwgYmF1ZF9yYXRlIC8gMjQwMCArIDEsIElOVF9N QVgpOwpAQCAtMzQ2NCw2ICs1MjcwLDQ3IEBAIHVwZGF0ZV93aW5kb3cgKHN0cnVjdCB3aW5kb3cg KncsIGJvb2wgZm9yY2VfcCkKIAkgICAgfQogCX0KIAorCisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAvKiBQcm9jZXNzIHRoZSBjdXJzb3Igcm93 IGF0IHRoZSBvdXRzZXQgaWYgaXQgaXMgd2l0aGluIGBkZXNpcmVkX21hdHJpeGAuCisgIFdoZW4g cHJvY2Vzc2luZyBhbGwgb3RoZXIgcm93cywgd2Ugd2lsbCBxdWVyeSB0aGUgYHctPmN1cnJlbnRf bWF0cml4YCBmb3IgZGF0YQorICByZWxhdGluZyB0byB0aGUgY3Vyc29yIHJvdy4gIGBtYWtlX2N1 cnJlbnRgICh3aXRoaW4gYHVwZGF0ZV93aW5kb3dfbGluZScpCisgIHVwZGF0ZXMgdGhlIGB3LT5j dXJyZW50X21hdHJpeGAgZm9yIHRoZSBhcHBsaWNhYmxlIHJvdy4gIEluIGRvaW5nIHNvLCBob3dl dmVyLAorICB0aGUgYXBwbGljYWJsZSByb3cgaW4gdGhlIGRlc2lyZWQgbWF0cml4IGlzIGFsdGVy ZWQgc3VjaCB0aGF0IHdlIGNhbiBubyBsb25nZXIKKyAgcmVseSB1cG9uIHRoZSBhY2N1cmFjeSBv ZiBgUk9XLT51c2VkW1RFWFRfQVJFQV1gLiAgVGhlcmVmb3JlLCB3ZSBtdXN0IG5vdyByZWx5Cisg IGV4Y2x1c2l2ZWx5IHVwb24gYHctPmN1cnJlbnRfbWF0cml4JyBmb3IgY3Vyc29yIHJvdyBiYXNl ZCBkZWNpc2lvbnMuICovCisgIGZvciAoc3RydWN0IGdseXBoX3JvdyAqbWNfcm93ID0gcm93Owor ICAgICAgIG1jX3JvdyA8IGVuZCAmJiAoZm9yY2VfcCB8fCAhaW5wdXRfcGVuZGluZyk7CisgICAg ICAgKyttY19yb3cpCisgICAgeworICAgICAgaW50IHZwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKG1j X3JvdywgZGVzaXJlZF9tYXRyaXgpOworICAgICAgaWYgKG1jX3Jvdy0+ZW5hYmxlZF9wCisgICAg ICAgICAgJiYgdnBvcyA9PSB3LT5jdXJzb3IudnBvcykKKyAgICAgICAgeworICAgICAgICAgIGN1 cnNvcl9tYXRyaXggPSBkZXNpcmVkX21hdHJpeDsKKyAgICAgICAgICBpZiAoIWZvcmNlX3AgJiYg KytuX3VwZGF0ZWQgJSBwcmVlbXB0X2NvdW50ID09IDApCisgICAgICAgICAgICBkZXRlY3RfaW5w dXRfcGVuZGluZ19pZ25vcmVfc3F1ZWV6YWJsZXMgKCk7CisgICAgICAgICAgY2hhbmdlZF9wIHw9 IChCVUZGRVJQICh3LT5jb250ZW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICghTklM UCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtY19jb25mKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9z c2hhaXJzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhIE5JTFAgKEJWQVIgKFhC VUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfdmlzaWJsZSkpKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgPyBtY191cGRhdGVfd2luZG93X2xpbmUgKHcsIHZwb3MsICZtb3VzZV9mYWNlX292ZXJ3cml0 dGVuX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj dXJzb3JfbWF0cml4LCBlc3NlbnRpYWxzLCBkcmF3X3ApCisgICAgICAgICAgICAgICAgICAgICAg IDogdXBkYXRlX3dpbmRvd19saW5lICh3LCB2cG9zLCAmbW91c2VfZmFjZV9vdmVyd3JpdHRlbl9w KTsKKyAgICAgICAgICBpZiAoTUFUUklYX1JPV19CT1RUT01fWSAocm93KSA+PSB5YikKKyAgICAg ICAgICAgIGZvciAoaW50IGkgPSB2cG9zICsgMTsgaSA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93 cyAtIDE7ICsraSkKKyAgICAgICAgICAgICAgU0VUX01BVFJJWF9ST1dfRU5BQkxFRF9QICh3LT5j dXJyZW50X21hdHJpeCwgaSwgZmFsc2UpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg ICAgfQorCisgIGN1cnNvcl9tYXRyaXggPSB3LT5jdXJyZW50X21hdHJpeDsKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisKKwogICAgICAgLyogVXBkYXRlIHRoZSByZXN0IG9mIHRoZSBsaW5l cy4gICovCiAgICAgICBmb3IgKDsgcm93IDwgZW5kICYmIChmb3JjZV9wIHx8ICFpbnB1dF9wZW5k aW5nKTsgKytyb3cpCiAJLyogc2Nyb2xsaW5nX3dpbmRvdyByZXNldHMgdGhlIGVuYWJsZWRfcCBm bGFnIG9mIHRoZSByb3dzIGl0CkBAIC0zNDcxLDYgKzUzMTgsMTkgQEAgdXBkYXRlX3dpbmRvdyAo c3RydWN0IHdpbmRvdyAqdywgYm9vbCBmb3JjZV9wKQogCWlmIChyb3ctPmVuYWJsZWRfcCkKIAkg IHsKIAkgICAgaW50IHZwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKHJvdywgZGVzaXJlZF9tYXRyaXgp OworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLwor CisgICAgICAgICAgLyogSWYgdGhlIGBjdXJzb3Jfcm93YCBpcyB3aXRoaW4gdGhlIGBkZXNpcmVk X21hdHJpeGAsIHRoZW4gaXQgd2FzCisgICAgICAgICAgcHJvY2Vzc2VkIGhlcmVpbmFib3ZlIGFu ZCBzaG91bGQgYmUgc2tpcHBlZCBhdCB0aGlzIHRpbWUuICovCisgICAgICAgICAgaWYgKHZwb3Mg PT0gdy0+Y3Vyc29yLnZwb3MpCisgICAgICAgICAgY29udGludWU7CisKKy8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiAqLworCisKIAkgICAgaW50IGk7CiAKIAkgICAgLyogV2UnbGwgaGF2ZSB0byBwbGF5 IGEgbGl0dGxlIGJpdCB3aXRoIHdoZW4gdG8KQEAgLTM0NzksOCArNTMzOSwyMSBAQCB1cGRhdGVf d2luZG93IChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIGZvcmNlX3ApCiAJICAgICAgIGNvbW1hbmRz IHdpbGwgdG9vIHF1aWNrbHkgcGF1c2UgcmVkaXNwbGF5LiAgKi8KIAkgICAgaWYgKCFmb3JjZV9w ICYmICsrbl91cGRhdGVkICUgcHJlZW1wdF9jb3VudCA9PSAwKQogCSAgICAgIGRldGVjdF9pbnB1 dF9wZW5kaW5nX2lnbm9yZV9zcXVlZXphYmxlcyAoKTsKLQkgICAgY2hhbmdlZF9wIHw9IHVwZGF0 ZV93aW5kb3dfbGluZSAodywgdnBvcywKLQkJCQkJICAgICAmbW91c2VfZmFjZV9vdmVyd3JpdHRl bl9wKTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMg Ki8KKworICAgICAgICAgIGNoYW5nZWRfcCB8PSAoQlVGRkVSUCAody0+Y29udGVudHMpCisgICAg ICAgICAgICAgICAgICAgICAgICAmJiAoIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRz KSwgbWNfY29uZikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIU5JTFAgKEJWQVIg KFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfHwgISBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGZjX3Zpc2li bGUpKSkpCisgICAgICAgICAgICAgICAgICAgICAgID8gbWNfdXBkYXRlX3dpbmRvd19saW5lICh3 LCB2cG9zLCAmbW91c2VfZmFjZV9vdmVyd3JpdHRlbl9wLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX21hdHJpeCwgZXNzZW50aWFscywgZHJh d19wKQorICAgICAgICAgICAgICAgICAgICAgICA6IHVwZGF0ZV93aW5kb3dfbGluZSAodywgdnBv cywgJm1vdXNlX2ZhY2Vfb3ZlcndyaXR0ZW5fcCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LworCiAKIAkgICAgLyogTWFyayBhbGwgcm93cyBiZWxvdyB0aGUgbGFzdCB2aXNpYmxlIG9uZSBp biB0aGUgY3VycmVudAogCSAgICAgICBtYXRyaXggYXMgaW52YWxpZC4gIFRoaXMgaXMgbmVjZXNz YXJ5IGJlY2F1c2Ugb2YKQEAgLTM1MDEsNiArNTM3NCw0MSBAQCB1cGRhdGVfd2luZG93IChzdHJ1 Y3Qgd2luZG93ICp3LCBib29sIGZvcmNlX3ApCiAKICAgICBzZXRfY3Vyc29yOgogCisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIC8qIElmIHdl IGp1bXBlZCBoZXJlIGZyb20gYHNldF9jdXJzb3JgLCB0aGVuIHNldCB0aGUgYGN1cnNvcl9tYXRy aXhgLiAqLworICBpZiAoY3Vyc29yX21hdHJpeCA9PSBOVUxMKQorICAgIGN1cnNvcl9tYXRyaXgg PSB3LT5jdXJyZW50X21hdHJpeDsKKworICAvKiBSZXNldCBgcm93YCB0byAwIHNvIHRoYXQgZmFr ZSBjdXJzb3JzIGNhbiBiZSBkcmF3biBvbiByb3dzIHByZWNlZGluZyB0aGUKKyAgZmlyc3QgYHJv dy0+ZW5hYmxlZF9wYC4gIEp1c3QgcHJpb3IgdG8gdGhlIGNhbGwgdG8gYHNjcm9sbGluZ193aW5k b3cnIGFib3ZlLAorICBgcm93YCB3YXMgYWR2YW5jZWQgdG8gdGhlIGZpcnN0IGByb3ctPmVuYWJs ZWRfcGAuICovCisgIGZvciAoc3RydWN0IGdseXBoX3JvdyAqZGVzaXJlZF9yb3cgPSBNQVRSSVhf Uk9XIChkZXNpcmVkX21hdHJpeCwgMCk7CisgICAgICAgZGVzaXJlZF9yb3cgPCBlbmQKKyAgICAg ICAmJiAoZm9yY2VfcCB8fCAhaW5wdXRfcGVuZGluZykKKyAgICAgICAvKiBXMzIgRW1hY3MgY3Jh c2hlcyBvbiBzdGFydHVwIHdpdGhvdXQgYSBCVUZGRVJQIGNoZWNrLiAqLworICAgICAgICYmIEJV RkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgICYmICghTklMUCAoQlZBUiAoWEJVRkZFUiAody0+ Y29udGVudHMpLCBtY19jb25mKSkKKyAgICAgICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIg KHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAgICAgIHx8ICFOSUxQIChCVkFSIChY QlVGRkVSICh3LT5jb250ZW50cyksIGZjX3Zpc2libGUpKSk7CisgICAgICAgKytkZXNpcmVkX3Jv dykKKyAgICB7CisgICAgICBpbnQgdnBvcyA9IE1BVFJJWF9ST1dfVlBPUyAoZGVzaXJlZF9yb3cs IGRlc2lyZWRfbWF0cml4KTsKKyAgICAgIGlmIChkZXNpcmVkX3Jvdy0+ZW5hYmxlZF9wKQorICAg ICAgICBjb250aW51ZTsKKyAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKmN1cnJlbnRfcm93ID0gTUFU UklYX1JPVyAody0+Y3VycmVudF9tYXRyaXgsIHZwb3MpOworICAgICAgZW51bSBtY19yb3dfcG9z aXRpb24gcm93X3Bvc2l0aW9uID0gbWNfcm93X3Bvc2l0aW9uICh3LCBjdXJyZW50X3JvdywgY3Vy cmVudF9yb3csIHZwb3MpOworICAgICAgaWYgKGN1cnJlbnRfcm93LT5lbmFibGVkX3ApCisgICAg ICAgIG1jX2RyYXdfcm93ICh3LCB3LT5jdXJyZW50X21hdHJpeCwgY3VycmVudF9yb3csIGN1cnJl bnRfcm93LT5nbHlwaHNbVEVYVF9BUkVBXSwKKyAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRf cm93LT54LCBjdXJyZW50X3Jvdy0+dXNlZFtURVhUX0FSRUFdLCB2cG9zLAorICAgICAgICAgICAg ICAgICAgICAgY3Vyc29yX21hdHJpeCwgZXNzZW50aWFscywgcm93X3Bvc2l0aW9uLCBkcmF3X3As IFNFVF9DVVJTT1JfVFdPKTsKKyAgICB9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisK ICAgICAgIC8qIFVwZGF0ZSB0aGUgaGVhZGVyIGxpbmUgYWZ0ZXIgc2Nyb2xsaW5nIGJlY2F1c2Ug YSBuZXcgaGVhZGVyCiAJIGxpbmUgd291bGQgb3RoZXJ3aXNlIG92ZXJ3cml0ZSBsaW5lcyBhdCB0 aGUgdG9wIG9mIHRoZSB3aW5kb3cKIAkgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuICAqLwpAQCAtMzUx Niw3ICs1NDI0LDQ5IEBAIHVwZGF0ZV93aW5kb3cgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgZm9y Y2VfcCkKICNpZmRlZiBIQVZFX1dJTkRPV19TWVNURU0KIAkgIGlmIChjaGFuZ2VkX3AgJiYgcmlm LT5maXhfb3ZlcmxhcHBpbmdfYXJlYSkKIAkgICAgewotCSAgICAgIHJlZHJhd19vdmVybGFwcGVk X3Jvd3MgKHcsIHliKTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExF LUNVUlNPUlMgKi8KKworLyogYHJlZHJhd19vdmVybGFwcGVkX3Jvd3MnOiAgUmVkcmF3IGxpbmVz IGZyb20gdGhlIGN1cnJlbnQgbWF0cml4IG9mIHdpbmRvdyBXCit0aGF0IGFyZSBvdmVybGFwcGVk IGJ5IG90aGVyIHJvd3MuICBZQiBpcyBib3R0b20tbW9zdCB5LXBvc2l0aW9uIGluIFcuICBJZiBy b3dzCitvdmVybGFwcGluZyBvdGhlcnMgaGF2ZSBiZWVuIGNoYW5nZWQsIHRoZSByb3dzIGJlaW5n IG92ZXJsYXBwZWQgaGF2ZSB0byBiZQorcmVkcmF3bi4gIFRoaXMgd29uJ3QgZHJhdyBsaW5lcyB0 aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGRyYXduIGluIHVwZGF0ZV93aW5kb3cKK2xpbmUgYmVjYXVz ZSBvdmVybGFwcGVkX3AgaW4gZGVzaXJlZCByb3dzIGlzIDAsIHNvIGFmdGVyIHJvdyBhc3NpZ25t ZW50CitvdmVybGFwcGVkX3AgaW4gY3VycmVudCByb3dzIGlzIDAuICovCisgIHN0cnVjdCBmcmFt ZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwg dy0+Y3VycmVudF9tYXRyaXgtPm5yb3dzOyArK2kpCisgICAgeworICAgICAgc3RydWN0IGdseXBo X3JvdyAqcm93ID0gdy0+Y3VycmVudF9tYXRyaXgtPnJvd3MgKyBpOworICAgICAgaWYgKCFyb3ct PmVuYWJsZWRfcCkKKyAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UgaWYgKHJvdy0+bW9kZV9s aW5lX3ApCisgICAgICAgICAgY29udGludWU7CisgICAgICBpZiAocm93LT5vdmVybGFwcGVkX3Ap CisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGVudW0gZ2x5cGhfcm93X2FyZWEgYXJlYSA9IExF RlRfTUFSR0lOX0FSRUE7IGFyZWEgPCBMQVNUX0FSRUE7ICsrYXJlYSkKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgb3V0cHV0X2N1cnNvcl90byAodywgaSwgMCwgcm93LT55LCBhcmVhID09 IFRFWFRfQVJFQSA/IHJvdy0+eCA6IDApOworICAgICAgICAgICAgICBpZiAoIW1jX3JlZHJhd19y b3cgKHcsIHctPmN1cnJlbnRfbWF0cml4LCByb3csIGFyZWEsIHJvdy0+eCwgMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPnVzZWRbYXJlYV0sIHRydWUsIERSQVdfTk9S TUFMX1RFWFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFX1dJTkRP V19fUkVEUkFXX09WRVJMQVBQRURfUk9XUykKKyAgICAgICAgICAgICAgICAgICYmIHJvdy0+dXNl ZFthcmVhXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBGUkFNRV9SSUYg KGYpLT53cml0ZV9nbHlwaHMgKHcsIHJvdywgcm93LT5nbHlwaHNbYXJlYV0sIGFyZWEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0+dXNlZFthcmVh XSk7CisgICAgICAgICAgICAgICAgICBGUkFNRV9SSUYgKGYpLT5jbGVhcl9lbmRfb2ZfbGluZSAo dywgcm93LCBhcmVhLCAtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICAgIHJvdy0+b3ZlcmxhcHBlZF9wID0gMDsKKyAgICAgICAgfQorICAgICAgaWYgKE1BVFJJ WF9ST1dfQk9UVE9NX1kgKHJvdykgPj0geWIpCisgICAgICAgIGJyZWFrOworICAgIH0KKworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisKKwogCSAgICAgIHJlZHJhd19vdmVybGFwcGluZ19yb3dz ICh3LCB5Yik7CiAJICAgIH0KICNlbmRpZgpAQCAtMzUzNiw4ICs1NDg2LDIwIEBAIHVwZGF0ZV93 aW5kb3cgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgZm9yY2VfcCkKICNlbmRpZgogCiAjaWZkZWYg SEFWRV9XSU5ET1dfU1lTVEVNCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxU SVBMRS1DVVJTT1JTICovCisKKyAgaWYgKEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgJiYg IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKQorICAgIG1j X3VwZGF0ZV93aW5kb3dfZnJpbmdlcyAodywgMCk7CisgICAgZWxzZQogICAgICAgdXBkYXRlX3dp bmRvd19mcmluZ2VzICh3LCAwKTsKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAg ICAgLyogRW5kIHRoZSB1cGRhdGUgb2Ygd2luZG93IFcuICBEb24ndCBzZXQgdGhlIGN1cnNvciBp ZiB3ZQogICAgICAgICAgcGF1c2VkIHVwZGF0aW5nIHRoZSBkaXNwbGF5IGJlY2F1c2UgaW4gdGhp cyBjYXNlLAogICAgICAgICAgc2V0X3dpbmRvd19jdXJzb3JfYWZ0ZXJfdXBkYXRlIGhhc24ndCBi ZWVuIGNhbGxlZCwgYW5kCmRpZmYgLS1naXQgYS9zcmMvZnJhbWUuaCBiL3NyYy9mcmFtZS5oCmlu ZGV4IGZhNDVhMzIuLjUzYWQxMzEgMTAwNjQ0Ci0tLSBhL3NyYy9mcmFtZS5oCisrKyBiL3NyYy9m cmFtZS5oCkBAIC0yMDUsNiArMjA1LDE2IEBAIHN0cnVjdCBmcmFtZQogICBMaXNwX09iamVjdCB0 b29sX2Jhcl9pdGVtczsKICAgLyogdG9vbF9iYXJfaXRlbXMgc2hvdWxkIGJlIHRoZSBsYXN0IExp c3BfT2JqZWN0IG1lbWJlci4gICovCiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBN VUxUSVBMRS1DVVJTT1JTICovCisKKyAgLyogTm9uLW5pbCB3aGVuIHRoZSBmcmFtZSBpcyBpbiB0 aGUgcHJvY2VzcyBvZiBiZWluZyB1cGRhdGVkLiAqLworICBzdHJ1Y3QgZnJhbWUgKm1jX3VwZGF0 aW5nX2ZyYW1lOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIC8qIENhY2hlIG9m IHJlYWxpemVkIGZhY2VzLiAgKi8KICAgc3RydWN0IGZhY2VfY2FjaGUgKmZhY2VfY2FjaGU7CiAK ZGlmZiAtLWdpdCBhL3NyYy9mcmluZ2UuYyBiL3NyYy9mcmluZ2UuYwppbmRleCBkMGQ1OTkyLi42 NjM4NWZmIDEwMDY0NAotLS0gYS9zcmMvZnJpbmdlLmMKKysrIGIvc3JjL2ZyaW5nZS5jCkBAIC00 MzcsOCArNDM3LDQ2MiBAQCBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZW1wdHlfbGluZV9iaXRzW10g PSB7CiAjZGVmaW5lIFNUQU5EQVJEX0JJVE1BUF9IRUlHSFQoYml0cykgKHNpemVvZiAoYml0cykv QllURVNfUEVSX0JJVE1BUF9ST1cpCiAjZGVmaW5lIEZSQklUUyhiaXRzKSAgYml0cywgU1RBTkRB UkRfQklUTUFQX0hFSUdIVCAoYml0cykKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8q IGJlZ2luIE1VTFRJUExFLUNVUlNPUlMgKi8KKworLyogYCstZnJpbmdlLWhlbHBlci1kZWNpbWFs JyBkZWZpbmVkIGluIGArLW1vZGUuZWxgICovCisKKy8qIFRPRE86ICBDb25zaWRlciBhZGRpbmcg dGhlIGZvbGxvd2luZyBmcmluZ2UgYml0bWFwczoKKyAgKGRlZmluZS1mcmluZ2UtYml0bWFwICdi cmVha3BvaW50ICJceDNjXHg3ZVx4ZmZceGZmXHhmZlx4ZmZceDdlXHgzYyIpCisgIChkZWZpbmUt ZnJpbmdlLWJpdG1hcCAnaG9sbG93LXJpZ2h0LXRyaWFuZ2xlICJceGUwXHg5MFx4ODhceDg0XHg4 NFx4ODhceDkwXHhlMCIpICovCisKKy8qIDI0CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVj aW1hbAorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4u IgorICAgICAgInguLnh4Li4uIgorICAgICAgInguLi54eC4uIgorICAgICAgInguLi4ueHguIgor ICAgICAgIngueHh4eHh4IgorICAgICAgIngueHh4eHh4IgorICAgICAgInguLi4ueHguIgorICAg ICAgInguLi54eC4uIgorICAgICAgInguLnh4Li4uIgorICAgICAgInguLi4uLi4uIgorICAgICAg InguLi4uLi4uIgorICAgICAgInguLi4uLi4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQg bWNfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93X2JpdHNbXSA9eworICAweDgwLCAweDgwLCAweDgw LCAweDk4LCAweDhjLCAweDg2LCAweGJmLAorICAweGJmLCAweDg2LCAweDhjLCAweDk4LCAweDgw LCAweDgwLCAweDgwfTsKKworLyogMjUKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFs CisgICAgICAiLi4uLi4ueHgiCisgICAgICAiLi4uLi4ueHgiCisgICAgICAiLi4uLi4ueHgiCisg ICAgICAiLnh4Li4ueHgiCisgICAgICAiLi54eC4ueHgiCisgICAgICAiLi4ueHgueHgiCisgICAg ICAieHh4eHh4eHgiCisgICAgICAieHh4eHh4eHgiCisgICAgICAiLi4ueHgueHgiCisgICAgICAi Li54eC4ueHgiCisgICAgICAiLnh4Li4ueHgiCisgICAgICAiLi4uLi4ueHgiCisgICAgICAiLi4u Li4ueHgiCisgICAgICAiLi4uLi4ueHgiKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19y ZXZlcnNlZF92ZXJ0aWNhbF9iYXJfcmlnaHRfYXJyb3dfYml0c1tdID17CisgIDB4MywgMHgzLCAw eDMsIDB4NjMsIDB4MzMsIDB4MWIsIDB4ZmYsIDB4ZmYsIDB4MWIsIDB4MzMsIDB4NjMsIDB4Mywg MHgzLCAweDN9OworCisvKiAyNgorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAg ICAgICJ4eHh4eHh4eCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAg ICJ4Li54eC4ueCIKKyAgICAgICJ4Li4ueHgueCIKKyAgICAgICJ4Li4uLnh4eCIKKyAgICAgICJ4 Lnh4eHh4eCIKKyAgICAgICJ4Lnh4eHh4eCIKKyAgICAgICJ4Li4uLnh4eCIKKyAgICAgICJ4Li4u eHgueCIKKyAgICAgICJ4Li54eC4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4u eCIKKyAgICAgICJ4eHh4eHh4eCIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX2hvbGxv d19yZWN0YW5nbGVfcmlnaHRfYXJyb3dfYml0c1tdID17CisgIDB4ZmYsIDB4ODEsIDB4ODEsIDB4 OTksIDB4OGQsIDB4ODcsIDB4YmYsCisgIDB4YmYsIDB4ODcsIDB4OGQsIDB4OTksIDB4ODEsIDB4 ODEsIDB4ZmZ9OworCisvKiAyNworICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAg ICAgICJ4eHh4eHh4eCIKKyAgICAgICJ4Li4uLi54eCIKKyAgICAgICJ4Li4uLi54eCIKKyAgICAg ICJ4Lnh4Li54eCIKKyAgICAgICJ4Li54eC54eCIKKyAgICAgICJ4Li4ueHh4eCIKKyAgICAgICJ4 eHh4eHh4eCIKKyAgICAgICJ4eHh4eHh4eCIKKyAgICAgICJ4Li4ueHh4eCIKKyAgICAgICJ4Li54 eC54eCIKKyAgICAgICJ4Lnh4Li54eCIKKyAgICAgICJ4Li4uLi54eCIKKyAgICAgICJ4Li4uLi54 eCIKKyAgICAgICJ4eHh4eHh4eCIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX3JldmVy c2VkX2hvbGxvd19yZWN0YW5nbGVfcmlnaHRfYXJyb3dfYml0c1tdID17CisgIDB4ZmYsIDB4ODEs IDB4ODEsIDB4YjEsIDB4OTksIDB4OGQsIDB4ZmYsCisgIDB4ZmYsIDB4OGQsIDB4OTksIDB4YjEs IDB4ODEsIDB4ODEsIDB4ZmZ9OworCisvKiAyOAorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRl Y2ltYWwKKyAgICAgICJ4eHh4eHh4eCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4u eCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIK KyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAg ICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAg ICJ4Li4uLi4ueCIKKyAgICAgICJ4eHh4eHh4eCIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0 IG1jX2hvbGxvd19yZWN0YW5nbGVfYml0c1tdID17CisgIDB4ZmYsIDB4ODEsIDB4ODEsIDB4ODEs IDB4ODEsIDB4ODEsIDB4ODEsCisgIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEs IDB4ZmZ9OworCisvKiAyOQorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAg ICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4 Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4u Li4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4u LiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIK KyAgICAgICJ4Li4uLi4uLiIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX3ZlcnRpY2Fs X2Jhcl9iaXRzW10gPXsKKyAgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4 MCwKKyAgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MH07CisKKy8qIDMw CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIi4uLi4uLnh4IgorICAg ICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4IgorICAgICAg Ii4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4u Li4uLnh4IgorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4u Lnh4IgorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4 IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyX2Jp dHNbXSA9eworICAweDMsIDB4MywgMHgzLCAweDMsIDB4MywgMHgzLCAweDMsIDB4MywgMHgzLCAw eDMsIDB4MywgMHgzLCAweDMsIDB4M307CisKKy8qIDMxCisgICAgKCstZnJpbmdlLWhlbHBlci1o ZXhhZGVjaW1hbAorICAgICAgInh4Li4uLi4uIgorICAgICAgInh4Li4uLi4uIgorICAgICAgIiB4 eC4uLi4uIgorICAgICAgIi54eC4uLi4uIgorICAgICAgIi4ueHguLi4uIgorICAgICAgIi4ueHgu Li4uIgorICAgICAgIi4uLnh4Li4uIgorICAgICAgIi4uLnh4Li4uIgorICAgICAgIi4uLi54eC4u IgorICAgICAgIi4uLi54eC4uIgorICAgICAgIi4uLi4ueHguIgorICAgICAgIi4uLi4ueHguIgor ICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4IikKKyovCitzdGF0aWMgdW5zaWduZWQg c2hvcnQgbWNfYmFja3NsYXNoX2JpdHNbXSA9eworICAweGMwLCAweGMwLCAweGUwLCAweDYwLCAw eDMwLCAweDMwLCAweDE4LCAweDE4LCAweGMsIDB4YywgMHg2LCAweDYsIDB4MywgMHgzfTsKKwor LyogMzIKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieHguLi4uLi4i CisgICAgICAieHguLi4uLi4iCisgICAgICAieHh4Li4uLi4iCisgICAgICAieHh4Li4uLi4iCisg ICAgICAieC54eC4uLi4iCisgICAgICAieC54eC4uLi4iCisgICAgICAieC4ueHguLi4iCisgICAg ICAieC4ueHguLi4iCisgICAgICAieC4uLnh4Li4iCisgICAgICAieC4uLnh4Li4iCisgICAgICAi eC4uLi54eC4iCisgICAgICAieC4uLi54eC4iCisgICAgICAieC4uLi4ueHgiCisgICAgICAieC4u Li4ueHgiKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY192ZXJ0aWNhbF9iYXJfYmFja3Ns YXNoX2JpdHNbXSA9eworICAweGMwLCAweGMwLCAweGUwLCAweGUwLCAweGIwLCAweGIwLCAweDk4 LAorICAweDk4LCAweDhjLCAweDhjLCAweDg2LCAweDg2LCAweDgzLCAweDgzfTsKKworLyogMzMK KyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAiLnh4eHh4eC4iCisgICAg ICAieHh4eC54Li4iCisgICAgICAieHh4eC54Li4iCisgICAgICAieHh4eC54Li4iCisgICAgICAi Lnh4eC54Li4iCisgICAgICAiLi4ueC54Li4iCisgICAgICAiLi4ueC54Li4iCisgICAgICAiLi4u eC54Li4iCisgICAgICAiLi4ueC54Li4iCisgICAgICAiLi4ueC54Li4iCisgICAgICAiLi4ueC54 Li4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19waWxjcm93X2JpdHNbXSA9eworICAw eDdlLCAweGY0LCAweGY0LCAweGY0LCAweDc0LCAweDE0LCAweDE0LCAweDE0LCAweDE0LCAweDE0 LCAweDE0fTsKKworLyogMzQKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAg ICAiLi54eHh4Li4iCisgICAgICAiLnh4eHh4eC4iCisgICAgICAieC4ueHguLngiCisgICAgICAi eC4ueHguLngiCisgICAgICAieHh4eHh4eHgiCisgICAgICAieHguLi4ueHgiCisgICAgICAieHh4 Li54eHgiCisgICAgICAiLnh4eHh4eC4iCisgICAgICAiLi54eHh4Li4iKQorKi8KK3N0YXRpYyB1 bnNpZ25lZCBzaG9ydCBtY19zbWlsZXlfZmFjZV9iaXRzW10gPXsKKyAgMHgzYywgMHg3ZSwgMHg5 OSwgMHg5OSwgMHhmZiwgMHhjMywgMHhlNywgMHg3ZSwgMHgzY307CisKKy8qIDM1CisgICAgKCst ZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIi4ueC4uLi4uIgorICAgICAgIi4uLngu Li4uIgorICAgICAgIi4uLi54Li4uIgorICAgICAgIi4uLi4ueC4uIgorICAgICAgIi4uLi54Li4u IgorICAgICAgIi4uLnguLi4uIgorICAgICAgIi4ueC4uLi4uIikKKyovCitzdGF0aWMgdW5zaWdu ZWQgc2hvcnQgbWNfc2luZ2xlX2FuZ2xlX3JpZ2h0X2JpdHNbXSA9eworICAweDIwLCAweDEwLCAw eDgsIDB4NCwgMHg4LCAweDEwLCAweDIwfTsKKworLyogMzYKKyAgICAoKy1mcmluZ2UtaGVscGVy LWhleGFkZWNpbWFsCisgICAgICAiLi4uLi54Li4iCisgICAgICAiLi4uLnguLi4iCisgICAgICAi Li4ueC4uLi4iCisgICAgICAiLi54Li4uLi4iCisgICAgICAiLi4ueC4uLi4iCisgICAgICAiLi4u LnguLi4iCisgICAgICAiLi4uLi54Li4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19z aW5nbGVfYW5nbGVfbGVmdF9iaXRzW10gPXsKKyAgMHg0LCAweDgsIDB4MTAsIDB4MjAsIDB4MTAs IDB4OCwgMHg0fTsKKworLyogMzcKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisg ICAgICAieHgueHguLi4iCisgICAgICAiLnh4Lnh4Li4iCisgICAgICAiLi54eC54eC4iCisgICAg ICAiLi4ueHgueHgiCisgICAgICAiLi54eC54eC4iCisgICAgICAiLnh4Lnh4Li4iCisgICAgICAi eHgueHguLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19kb3VibGVfYW5nbGVfcmln aHRfYml0c1tdID17CisgIDB4ZDgsIDB4NmMsIDB4MzYsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDh9 OworCisvKiAzOAorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICIuLi54 eC54eCIKKyAgICAgICIuLnh4Lnh4LiIKKyAgICAgICIueHgueHguLiIKKyAgICAgICJ4eC54eC4u LiIKKyAgICAgICIueHgueHguLiIKKyAgICAgICIuLnh4Lnh4LiIKKyAgICAgICIuLi54eC54eCIp CisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX2RvdWJsZV9hbmdsZV9sZWZ0X2JpdHNbXSA9 eworICAweDFiLCAweDM2LCAweDZjLCAweGQ4LCAweDZjLCAweDM2LCAweDFifTsKKworLyogMzkK KyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieC54LnguLi4iCisgICAg ICAiLngueC54Li4iCisgICAgICAiLi54LngueC4iCisgICAgICAiLi4ueC54LngiCisgICAgICAi Li54LngueC4iCisgICAgICAiLngueC54Li4iCisgICAgICAieC54LnguLi4iKQorKi8KK3N0YXRp YyB1bnNpZ25lZCBzaG9ydCBtY190cmlwbGVfYW5nbGVfcmlnaHRfYml0c1tdID17CisgIDB4YTgs IDB4NTQsIDB4MmEsIDB4MTUsIDB4MmEsIDB4NTQsIDB4YTh9OworCisvKiA0MAorICAgICgrLWZy aW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICIuLi54LngueCIKKyAgICAgICIuLngueC54 LiIKKyAgICAgICIueC54LnguLiIKKyAgICAgICJ4LngueC4uLiIKKyAgICAgICIueC54LnguLiIK KyAgICAgICIuLngueC54LiIKKyAgICAgICIuLi54LngueCIpCisqLworc3RhdGljIHVuc2lnbmVk IHNob3J0IG1jX3RyaXBsZV9hbmdsZV9sZWZ0X2JpdHNbXSA9eworICAweDE1LCAweDJhLCAweDU0 LCAweGE4LCAweDU0LCAweDJhLCAweDE1fTsKKworLyogNDEKKyAgICAoKy1mcmluZ2UtaGVscGVy LWhleGFkZWNpbWFsCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAi Li4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4ueC4uLi4iCisgICAgICAiLi54 LnguLi4iCisgICAgICAiLnguLi54Li4iCisgICAgICAieC4uLi4ueC4iCisgICAgICAiLi4uLi4u Li4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4i KQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19zaW5nbGVfYW5nbGVfdXBfYml0c1tdID17 CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4NDQsIDB4ODIsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDB9OworCisvKiA0MgorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRl Y2ltYWwKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICIuLi4uLi4u LiIKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICJ4Li4uLi54LiIKKyAgICAgICIueC4uLnguLiIK KyAgICAgICIuLngueC4uLiIKKyAgICAgICIuLi54Li4uLiIKKyAgICAgICIuLi4uLi4uLiIKKyAg ICAgICIuLi4uLi4uLiIKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICIuLi4uLi4uLiIpCisqLwor c3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX3NpbmdsZV9hbmdsZV9kb3duX2JpdHNbXSA9eworICAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDQ0LCAweDI4LCAweDEwLCAweDAwLCAweDAw LCAweDAwLCAweDAwfTsKKworLyogNDMKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFs CisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisg ICAgICAiLi4ueC4uLi4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLnguLi54Li4iCisgICAg ICAieC4ueC4ueC4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLnguLi54Li4iCisgICAgICAi eC4uLi4ueC4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4u Li4uLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19kb3VibGVfYW5nbGVfdXBfYml0 c1tdID17CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4NDQsIDB4OTIsIDB4Mjgs IDB4NDQsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDB9OworCisvKiA0NAorICAgICgrLWZyaW5nZS1o ZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICIuLi4uLi4uLiIKKyAg ICAgICIuLi4uLi4uLiIKKyAgICAgICJ4Li4uLi54LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAg ICIuLngueC4uLiIKKyAgICAgICJ4Li54Li54LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAgICIu LngueC4uLiIKKyAgICAgICIuLi54Li4uLiIKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICIuLi4u Li4uLiIKKyAgICAgICIuLi4uLi4uLiIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX2Rv dWJsZV9hbmdsZV9kb3duX2JpdHNbXSA9eworICAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDQ0 LCAweDI4LCAweDkyLCAweDQ0LCAweDI4LCAweDEwLCAweDAwLCAweDAwLCAweDAwfTsKKworLyog NDUKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAiLi4uLi4uLi4iCisg ICAgICAiLi4ueC4uLi4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLnguLi54Li4iCisgICAg ICAieC4ueC4ueC4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLnguLi54Li4iCisgICAgICAi eC4ueC4ueC4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLnguLi54Li4iCisgICAgICAieC4u Li4ueC4iCisgICAgICAiLi4uLi4uLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY190 cmlwbGVfYW5nbGVfdXBfYml0c1tdID17CisgIDB4MDAsIDB4MTAsIDB4MjgsIDB4NDQsIDB4OTIs IDB4MjgsIDB4NDQsIDB4OTIsIDB4MjgsIDB4NDQsIDB4ODIsIDB4MDB9OworCisvKiA0NgorICAg ICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICJ4 Li4uLi54LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICJ4Li54 Li54LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICJ4Li54Li54 LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICIuLi54Li4uLiIK KyAgICAgICIuLi4uLi4uLiIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX3F1YWRydXBs ZV9hbmdsZV9kb3duX2JpdHNbXSA9eworICAweDAwLCAweDgyLCAweDQ0LCAweDI4LCAweDkyLCAw eDQ0LCAweDI4LCAweDkyLCAweDQ0LCAweDI4LCAweDEwLCAweDAwfTsKKworLyogNDcKKyAgICAo Ky1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAiLi4ueC4uLi4iCisgICAgICAiLi54 LnguLi4iCisgICAgICAiLnguLi54Li4iCisgICAgICAieC4ueC4ueC4iCisgICAgICAiLi54Lngu Li4iCisgICAgICAiLnguLi54Li4iCisgICAgICAieC4ueC4ueC4iCisgICAgICAiLi54LnguLi4i CisgICAgICAiLnguLi54Li4iCisgICAgICAieC4ueC4ueC4iCisgICAgICAiLi54LnguLi4iCisg ICAgICAiLnguLi54Li4iCisgICAgICAieC4uLi4ueC4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBz aG9ydCBtY19xdWFkcnVwbGVfYW5nbGVfdXBfYml0c1tdID17CisgIDB4MTAsIDB4MjgsIDB4NDQs IDB4OTIsIDB4MjgsIDB4NDQsIDB4OTIsIDB4MjgsIDB4NDQsIDB4OTIsIDB4MjgsIDB4NDQsIDB4 ODJ9OworCisvKiA0OAorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4 Li4uLi54LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICJ4Li54 Li54LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICJ4Li54Li54 LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICJ4Li54Li54LiIK KyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICIuLi54Li4uLiIpCisq Lworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX3RyaXBsZV9hbmdsZV9kb3duX2JpdHNbXSA9ewor ICAweDgyLCAweDQ0LCAweDI4LCAweDkyLCAweDQ0LCAweDI4LCAweDkyLCAweDQ0LCAweDI4LCAw eDkyLCAweDQ0LCAweDI4LCAweDEwfTsKKwogLyogTk9URTogIFRoZSBvcmRlciBvZiB0aGVzZSBi aXRtYXBzIG11c3QgbWF0Y2ggdGhlIHNlcXVlbmNlCi0gICB1c2VkIGluIGZyaW5nZS5lbCB0byBk ZWZpbmUgdGhlIGNvcnJlc3BvbmRpbmcgc3ltYm9scy4gICovCisgICB1c2VkIGluIGZyaW5nZS5l bCB0byBkZWZpbmUgdGhlIGNvcnJlc3BvbmRpbmcgc3ltYm9scy4gKi8KIAogc3RhdGljIHN0cnVj dCBmcmluZ2VfYml0bWFwIHN0YW5kYXJkX2JpdG1hcHNbXSA9CiB7CkBAIC00NjYsOCArOTIwLDEw NzIgQEAgc3RhdGljIHN0cnVjdCBmcmluZ2VfYml0bWFwIHN0YW5kYXJkX2JpdG1hcHNbXSA9CiAg IHsgRlJCSVRTICh2ZXJ0aWNhbF9iYXJfYml0cyksICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9D RU5URVIsIDAgfSwKICAgeyBGUkJJVFMgKGhvcml6b250YWxfYmFyX2JpdHMpLCAgICAgOCwgMCwg QUxJR05fQklUTUFQX0JPVFRPTSwgMCB9LAogICB7IEZSQklUUyAoZW1wdHlfbGluZV9iaXRzKSwg ICAgICAgICA4LCAzLCBBTElHTl9CSVRNQVBfVE9QLCAgICAwIH0sCisKKyAgLyogMjQgKi8KKyAg e0ZSQklUUyAobWNfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93X2JpdHMpLCA4LCAwLCBBTElHTl9C SVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogMjUgKi8KKyAge0ZSQklUUyAobWNfcmV2ZXJzZWRfdmVy dGljYWxfYmFyX3JpZ2h0X2Fycm93X2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAw fSwKKyAgLyogMjYgKi8KKyAge0ZSQklUUyAobWNfaG9sbG93X3JlY3RhbmdsZV9yaWdodF9hcnJv d19iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDI3ICovCisgIHtG UkJJVFMgKG1jX3JldmVyc2VkX2hvbGxvd19yZWN0YW5nbGVfcmlnaHRfYXJyb3dfYml0cyksIDgs IDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAvKiAyOCAqLworICB7RlJCSVRTIChtY19o b2xsb3dfcmVjdGFuZ2xlX2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAg LyogMjkgKi8KKyAge0ZSQklUUyAobWNfdmVydGljYWxfYmFyX2JpdHMpLCA4LCAwLCBBTElHTl9C SVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogMzAgKi8KKyAge0ZSQklUUyAobWNfcmV2ZXJzZWRfdmVy dGljYWxfYmFyX2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogMzEg Ki8KKyAge0ZSQklUUyAobWNfYmFja3NsYXNoX2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VO VEVSLCAwfSwKKyAgLyogMzIgKi8KKyAge0ZSQklUUyAobWNfdmVydGljYWxfYmFyX2JhY2tzbGFz aF9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDMzICovCisgIHtG UkJJVFMgKG1jX3BpbGNyb3dfYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDB9LAor ICAvKiAzNCAqLworICB7RlJCSVRTIChtY19zbWlsZXlfZmFjZV9iaXRzKSwgOCwgMCwgQUxJR05f QklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDM1ICovCisgIHtGUkJJVFMgKG1jX3NpbmdsZV9hbmds ZV9yaWdodF9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDM2ICov CisgIHtGUkJJVFMgKG1jX3NpbmdsZV9hbmdsZV9sZWZ0X2JpdHMpLCA4LCAwLCBBTElHTl9CSVRN QVBfQ0VOVEVSLCAwfSwKKyAgLyogMzcgKi8KKyAge0ZSQklUUyAobWNfZG91YmxlX2FuZ2xlX3Jp Z2h0X2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogMzggKi8KKyAg e0ZSQklUUyAobWNfZG91YmxlX2FuZ2xlX2xlZnRfYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9D RU5URVIsIDB9LAorICAvKiAzOSAqLworICB7RlJCSVRTIChtY190cmlwbGVfYW5nbGVfcmlnaHRf Yml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAvKiA0MCAqLworICB7RlJC SVRTIChtY190cmlwbGVfYW5nbGVfbGVmdF9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRF UiwgMH0sCisgIC8qIDQxICovCisgIHtGUkJJVFMgKG1jX3NpbmdsZV9hbmdsZV91cF9iaXRzKSwg OCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDQyICovCisgIHtGUkJJVFMgKG1j X3NpbmdsZV9hbmdsZV9kb3duX2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwK KyAgLyogNDMgKi8KKyAge0ZSQklUUyAobWNfZG91YmxlX2FuZ2xlX3VwX2JpdHMpLCA4LCAwLCBB TElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogNDQgKi8KKyAge0ZSQklUUyAobWNfZG91Ymxl X2FuZ2xlX2Rvd25fYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAvKiA0 NSAqLworICB7RlJCSVRTIChtY190cmlwbGVfYW5nbGVfdXBfYml0cyksIDgsIDAsIEFMSUdOX0JJ VE1BUF9DRU5URVIsIDB9LAorICAvKiA0NiAqLworICB7RlJCSVRTIChtY190cmlwbGVfYW5nbGVf ZG93bl9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDQ3ICovCisg IHtGUkJJVFMgKG1jX3F1YWRydXBsZV9hbmdsZV91cF9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQ X0NFTlRFUiwgMH0sCisgIC8qIDQ4ICovCisgIHtGUkJJVFMgKG1jX3F1YWRydXBsZV9hbmdsZV9k b3duX2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKIH07CiAKKy8qIFVzZSB0 aGlzIHRvIHN1cHByZXNzIGdjYydzIGAuLi5tYXkgYmUgdXNlZCBiZWZvcmUgaW5pdGlhbGl6ZWQn IHdhcm5pbmdzLiAqLworI2lmZGVmIGxpbnQKKyMgZGVmaW5lIE1DX0lGX0xJTlQoQ29kZSkgQ29k ZQorI2Vsc2UKKyMgZGVmaW5lIE1DX0lGX0xJTlQoQ29kZSkgLyogZW1wdHkgKi8KKyNlbmRpZgor CitzdGF0aWMgc3RydWN0IGZyaW5nZV9iaXRtYXAgKiBnZXRfZnJpbmdlX2JpdG1hcF9kYXRhIChp bnQpOworCisvKiBudGggMCA9PiBmYWxzZSwgZmFsc2UKKyAgIG50aCAxID0+IHRydWUsIGZhbHNl CisgICBudGggMiA9PiBmYWxzZSwgdHJ1ZQorICAgbnRoIDMgPT4gdHJ1ZSwgdHJ1ZQorICBMb29r dXAgaW4gYnVmZmVyLWxvY2FsIGZyaW5nZS1pbmRpY2F0b3ItYWxpc3QgYmVmb3JlIGdsb2JhbCBh bGlzdC4KKyAgICAgRWxlbWVudHMgYXJlOgorICBCSVRNQVAgICAgLS0gdXNlIGZvciBhbGwKKyAg KEwgUikgICAgLS0gdXNlIGZvciBsZWZ0IHJpZ2h0ICh3aGV0aGVyIHBhcnRpYWwgb3Igbm90KQor ICAoTCBSIFBMIFBSKSAgLS0gdXNlIGZvciBsZWZ0IHJpZ2h0IHBhcnRpYWwtbGVmdCBwYXJ0aWFs LXJpZ2h0CisgIElmIGFueSB2YWx1ZSBpbiBsb2NhbCBiaW5kaW5nIGlzIG5vdCBwcmVzZW50IG9y IHQsIHVzZSBnbG9iYWwgdmFsdWUuCisgICAgIElmIHBhcnRpYWwsIGxvb2t1cCBwYXJ0aWFsIGJp dG1hcCBpbiBkZWZhdWx0IHZhbHVlIGlmIG5vdCBmb3VuZCBoZXJlLgorICAgICBJZiBub3QgcGFy dGlhbCwgb3Igbm8gcGFydGlhbCBzcGVjIGlzIHByZXNlbnQsIHVzZSBub24tcGFydGlhbCBiaXRt YXAuICovCitpbnQKK21jX2dldF9mcmluZ2VfYml0bWFwIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNw X09iamVjdCBiaXRtYXAsIGludCByaWdodF9wLCBpbnQgcGFydGlhbF9wKQoreworICBMaXNwX09i amVjdCBjbWFwLCBibTEgPSBRbmlsLCBibTIgPSBRbmlsLCBibTsKKyAgRU1BQ1NfSU5UIGxuMSA9 IDAsIGxuMiA9IDA7CisgIGludCBpeDEgPSByaWdodF9wOworICBpbnQgaXgyID0gaXgxICsgKHBh cnRpYWxfcCA/IDIgOiAwKTsKKyAgaWYgKChjbWFwID0gQlZBUiAoWEJVRkZFUiAody0+Y29udGVu dHMpLCBmcmluZ2VfaW5kaWNhdG9yX2FsaXN0KSksICFOSUxQIChjbWFwKSkKKyAgICB7CisgICAg ICBibTEgPSBtY19hc3NxIChiaXRtYXAsIGNtYXApOworICAgICAgaWYgKENPTlNQIChibTEpKQor ICB7CisgICAgaWYgKChibTEgPSBYQ0RSIChibTEpKSwgTklMUCAoYm0xKSkKKyAgICAgIHJldHVy biBNQ19OT19GUklOR0VfQklUTUFQOworICAgIGlmIChDT05TUCAoYm0xKSkKKyAgICAgIHsKKyAg ICAgICAgbG4xID0gWEZJWE5VTSAoRmxlbmd0aCAoYm0xKSk7CisgICAgICAgIGlmIChwYXJ0aWFs X3ApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGxuMSA+IGl4MikKKyAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIGJtID0gbWNfbnRoIChpeDIsIGJtMSk7CisgICAgICAgICAg ICAgICAgaWYgKCFFUSAoYm0sIFF0KSkKKyAgICAgICAgICAgICAgICAgIGdvdG8gZm91bmQ7Cisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAg eworICAgICAgICAgICAgICBpZiAobG4xID4gaXgxKQorICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgIGJtID0gbWNfbnRoIChpeDEsIGJtMSk7CisgICAgICAgICAgICAgICAgICBp ZiAoIUVRIChibSwgUXQpKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGZvdW5kOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgIH0KKyAgICBlbHNlIGlmICgoYm0gPSBi bTEsICFFUSAoYm0sIFF0KSkpCisgICAgICBnb3RvIGZvdW5kOworICB9CisgICAgfQorICBpZiAo IUVRIChjbWFwLCBCVkFSICgmYnVmZmVyX2RlZmF1bHRzLCBmcmluZ2VfaW5kaWNhdG9yX2FsaXN0 KSkKKyAgICAgICYmICFOSUxQIChCVkFSICgmYnVmZmVyX2RlZmF1bHRzLCBmcmluZ2VfaW5kaWNh dG9yX2FsaXN0KSkpCisgICAgeworICAgICAgYm0yID0gbWNfYXNzcSAoYml0bWFwLCBCVkFSICgm YnVmZmVyX2RlZmF1bHRzLCBmcmluZ2VfaW5kaWNhdG9yX2FsaXN0KSk7CisgICAgICBpZiAoQ09O U1AgKGJtMikpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKGJtMiA9IFhDRFIgKGJtMikpLCAh TklMUCAoYm0yKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKENPTlNQIChibTIp KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGxuMiA9IFhGSVhOVU0gKEZs ZW5ndGggKGJtMikpOworICAgICAgICAgICAgICAgICAgaWYgKHBhcnRpYWxfcCkKKyAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGlmIChsbjIgPiBpeDIpCisgICAg ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJtID0gbWNf bnRoIChpeDIsIGJtMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRVEgKGJtLCBR dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmb3VuZDsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgaWYgKGxuMSA+IGl4MSkKKyAgICB7 CisgICAgICBibSA9IG1jX250aCAoaXgxLCBibTEpOworICAgICAgaWYgKCFFUSAoYm0sIFF0KSkK KyAgICAgICAgZ290byBmb3VuZDsKKyAgICB9CisgIGlmIChsbjIgPiBpeDEpCisgICAgeworICAg ICAgYm0gPSBtY19udGggKGl4MSwgYm0yKTsKKyAgICAgIGlmICghRVEgKGJtLCBRdCkpCisgICAg ICAgIGdvdG8gZm91bmQ7CisgICAgICByZXR1cm4gTUNfTk9fRlJJTkdFX0JJVE1BUDsKKyAgICB9 CisgICAgZWxzZSBpZiAoKGJtID0gYm0yLCBOSUxQIChibSkpKQorICAgICAgcmV0dXJuIE1DX05P X0ZSSU5HRV9CSVRNQVA7CisgIGZvdW5kOgorICByZXR1cm4gbG9va3VwX2ZyaW5nZV9iaXRtYXAg KGJtKTsKK30KKworc3RhdGljIGludAorbWNfZ2V0X2xvZ2ljYWxfY3Vyc29yX2JpdG1hcCAoc3Ry dWN0IHdpbmRvdyAqdywgTGlzcF9PYmplY3QgY3Vyc29yKQoreworICBMaXNwX09iamVjdCBjbWFw LCBibSA9IFFuaWw7CisgIGlmICgoY21hcCA9IEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwg ZnJpbmdlX2N1cnNvcl9hbGlzdCkpLCAhTklMUCAoY21hcCkpCisgICAgeworICAgICAgYm0gPSBt Y19hc3NxIChjdXJzb3IsIGNtYXApOworICAgICAgaWYgKENPTlNQIChibSkpCisgICAgICAgIHsK KyAgICAgICAgICBpZiAoKGJtID0gWENEUiAoYm0pKSwgTklMUCAoYm0pKQorICAgICAgICAgICAg cmV0dXJuIE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICAgICAgcmV0dXJuIGxvb2t1cF9mcmlu Z2VfYml0bWFwIChibSk7CisgICAgICAgIH0KKyAgICB9CisgIGlmIChFUSAoY21hcCwgQlZBUiAo JmJ1ZmZlcl9kZWZhdWx0cywgZnJpbmdlX2N1cnNvcl9hbGlzdCkpKQorICAgIHJldHVybiBNQ19O T19GUklOR0VfQklUTUFQOworICBibSA9IG1jX2Fzc3EgKGN1cnNvciwgQlZBUiAoJmJ1ZmZlcl9k ZWZhdWx0cywgZnJpbmdlX2N1cnNvcl9hbGlzdCkpOworICBpZiAoIUNPTlNQIChibSkgfHwgKChi bSA9IFhDRFIgKGJtKSksIE5JTFAgKGJtKSkpCisgICAgcmV0dXJuIE1DX05PX0ZSSU5HRV9CSVRN QVA7CisgIHJldHVybiBsb29rdXBfZnJpbmdlX2JpdG1hcCAoYm0pOworfQorCitzdGF0aWMgaW50 CittY19nZXRfbG9naWNhbF9mcmluZ2VfYml0bWFwIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09i amVjdCBiaXRtYXAsIGludCByaWdodF9wLCBpbnQgcGFydGlhbF9wKQoreworICBMaXNwX09iamVj dCBjbWFwLCBibTEgPSBRbmlsLCBibTIgPSBRbmlsLCBibTsKKyAgRU1BQ1NfSU5UIGxuMSA9IDAs IGxuMiA9IDA7CisgIGludCBpeDEgPSByaWdodF9wOworICBpbnQgaXgyID0gaXgxICsgKHBhcnRp YWxfcCA/IDIgOiAwKTsKKyAgLyogTG9va3VwIGluIGJ1ZmZlci1sb2NhbCBmcmluZ2UtaW5kaWNh dG9yLWFsaXN0IGJlZm9yZSBnbG9iYWwgYWxpc3QuCisgICAgIEVsZW1lbnRzIGFyZToKKyAgQklU TUFQICAgIC0tIHVzZSBmb3IgYWxsCisgIChMIFIpICAgIC0tIHVzZSBmb3IgbGVmdCByaWdodCAo d2hldGhlciBwYXJ0aWFsIG9yIG5vdCkKKyAgKEwgUiBQTCBQUikgIC0tIHVzZSBmb3IgbGVmdCBy aWdodCBwYXJ0aWFsLWxlZnQgcGFydGlhbC1yaWdodAorICBJZiBhbnkgdmFsdWUgaW4gbG9jYWwg YmluZGluZyBpcyBub3QgcHJlc2VudCBvciB0LCB1c2UgZ2xvYmFsIHZhbHVlLgorICAgICBJZiBw YXJ0aWFsLCBsb29rdXAgcGFydGlhbCBiaXRtYXAgaW4gZGVmYXVsdCB2YWx1ZSBpZiBub3QgZm91 bmQgaGVyZS4KKyAgICAgSWYgbm90IHBhcnRpYWwsIG9yIG5vIHBhcnRpYWwgc3BlYyBpcyBwcmVz ZW50LCB1c2Ugbm9uLXBhcnRpYWwgYml0bWFwLiAqLworICBpZiAoKGNtYXAgPSBCVkFSIChYQlVG RkVSICh3LT5jb250ZW50cyksIGZyaW5nZV9pbmRpY2F0b3JfYWxpc3QpKSwgIU5JTFAgKGNtYXAp KQorICAgIHsKKyAgICAgIGJtMSA9IG1jX2Fzc3EgKGJpdG1hcCwgY21hcCk7CisgICAgICBpZiAo Q09OU1AgKGJtMSkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKGJtMSA9IFhDRFIgKGJtMSkp LCBOSUxQIChibTEpKQorICAgICAgICAgICAgcmV0dXJuIE1DX05PX0ZSSU5HRV9CSVRNQVA7Cisg ICAgICAgICAgaWYgKENPTlNQIChibTEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBs bjEgPSBYRklYTlVNIChGbGVuZ3RoIChibTEpKTsKKyAgICAgICAgICAgICAgaWYgKHBhcnRpYWxf cCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAobG4xID4gaXgyKQor ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgYm0gPSBtY19udGgg KGl4MiwgYm0xKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIUVRIChibSwgUXQpKQorICAg ICAgICAgICAgICAgICAgICAgICAgZ290byBmb3VuZDsKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsbjEgPiBpeDEpCisgICAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYm0gPSBtY19udGggKGl4MSwgYm0xKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRVEgKGJtLCBRdCkpCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gZm91bmQ7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKGJtID0g Ym0xLCAhRVEgKGJtLCBRdCkpKQorICAgICAgICAgICAgICBnb3RvIGZvdW5kOworICAgICAgICB9 CisgICAgfQorICBpZiAoIUVRIChjbWFwLCBCVkFSICgmYnVmZmVyX2RlZmF1bHRzLCBmcmluZ2Vf aW5kaWNhdG9yX2FsaXN0KSkKKyAgICAgICYmICFOSUxQIChCVkFSICgmYnVmZmVyX2RlZmF1bHRz LCBmcmluZ2VfaW5kaWNhdG9yX2FsaXN0KSkpCisgICAgeworICAgICAgYm0yID0gbWNfYXNzcSAo Yml0bWFwLCBCVkFSICgmYnVmZmVyX2RlZmF1bHRzLCBmcmluZ2VfaW5kaWNhdG9yX2FsaXN0KSk7 CisgICAgICBpZiAoQ09OU1AgKGJtMikpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKGJtMiA9 IFhDRFIgKGJtMikpLCAhTklMUCAoYm0yKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg aWYgKENPTlNQIChibTIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGxu MiA9IFhGSVhOVU0gKEZsZW5ndGggKGJtMikpOworICAgICAgICAgICAgICAgICAgaWYgKHBhcnRp YWxfcCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGlmIChs bjIgPiBpeDIpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIGJtID0gbWNfbnRoIChpeDIsIGJtMik7CisgICAgICAgICAgICAgICAgICAgICAgICAg IGlmICghRVEgKGJtLCBRdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmb3Vu ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgaWYgKGxu MSA+IGl4MSkKKyAgICB7CisgICAgICBibSA9IG1jX250aCAoaXgxLCBibTEpOworICAgICAgaWYg KCFFUSAoYm0sIFF0KSkKKyAgICAgICAgZ290byBmb3VuZDsKKyAgICB9CisgIGlmIChsbjIgPiBp eDEpCisgICAgeworICAgICAgYm0gPSBtY19udGggKGl4MSwgYm0yKTsKKyAgICAgIGlmICghRVEg KGJtLCBRdCkpCisgICAgICAgIGdvdG8gZm91bmQ7CisgICAgICByZXR1cm4gTUNfTk9fRlJJTkdF X0JJVE1BUDsKKyAgICB9CisgICAgZWxzZSBpZiAoKGJtID0gYm0yLCBOSUxQIChibSkpKQorICAg ICAgcmV0dXJuIE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgIGZvdW5kOgorICByZXR1cm4gbG9va3Vw X2ZyaW5nZV9iaXRtYXAgKGJtKTsKK30KKworLyogUmVjYWxjdWxhdGUgdGhlIGJpdG1hcHMgdG8g c2hvdyBpbiB0aGUgZnJpbmdlcyBvZiB3aW5kb3cgVy4KKyAgIE9ubHkgbWFyayByb3dzIHdpdGgg bW9kaWZpZWQgYml0bWFwcyBmb3IgdXBkYXRlIGluIHJlZHJhd19mcmluZ2VfYml0bWFwc19wLgor ICAgSWYgS0VFUF9DVVJSRU5UX1AgaXMgMCwgdXBkYXRlIGN1cnJlbnRfbWF0cml4IHRvby4gKi8K K2Jvb2wKK21jX3VwZGF0ZV93aW5kb3dfZnJpbmdlcyAoc3RydWN0IHdpbmRvdyAqdywgYm9vbCBr ZWVwX2N1cnJlbnRfcCkKK3sKKyAgc3RydWN0IGdseXBoX3JvdyAqcm93LCAqY3VyID0gMDsKKyAg aW50IHliID0gd2luZG93X3RleHRfYm90dG9tX3kgKHcpOworICBpbnQgcm4sIG5yb3dzID0gdy0+ Y3VycmVudF9tYXRyaXgtPm5yb3dzOworICBpbnQgeTsKKyAgYm9vbCByZWRyYXdfcCA9IDA7Cisg IExpc3BfT2JqZWN0IGJvdW5kYXJ5X3RvcCA9IFFuaWwsIGJvdW5kYXJ5X2JvdCA9IFFuaWw7Cisg IExpc3BfT2JqZWN0IGFycm93X3RvcCA9IFFuaWwsIGFycm93X2JvdCA9IFFuaWw7CisgIExpc3Bf T2JqZWN0IGVtcHR5X3BvczsKKyAgTGlzcF9PYmplY3QgaW5kID0gUW5pbDsKKyNkZWZpbmUgTUFY X0JJVE1BUF9DQUNIRSAoOCo0KQorICBpbnQgYml0bWFwX2NhY2hlW01BWF9CSVRNQVBfQ0FDSEVd OworICBpbnQgdG9wX2luZF9ybiwgYm90X2luZF9ybjsKKyAgaW50IHRvcF9pbmRfbWluX3ksIGJv dF9pbmRfbWF4X3k7CisgIC8qIHRvcF9pbmRfcm4gaXMgc2V0IHRvIGEgbm9ubmVnYXRpdmUgdmFs dWUgd2hlbmV2ZXIKKyAgICAgcm93LT5pbmRpY2F0ZV9ib2JfcCBpcyBzZXQsIHNvIGl0J3MgT0sg dGhhdCB0b3Bfcm93X2VuZHNfYXRfenZfcAorICAgICBpcyBub3QgaW5pdGlhbGl6ZWQgaGVyZS4g IFNpbWlsYXJseSBmb3IgYm90X2luZF9ybiwKKyAgICAgcm93LT5pbmRpY2F0ZV9lb2JfcCBhbmQg Ym90X3Jvd19lbmRzX2F0X3p2X3AuICovCisgIGludCB0b3Bfcm93X2VuZHNfYXRfenZfcCBNQ19J Rl9MSU5UICg9IDApLCBib3Rfcm93X2VuZHNfYXRfenZfcCBNQ19JRl9MSU5UICg9IDApOworICBp ZiAody0+cHNldWRvX3dpbmRvd19wKQorICAgIHJldHVybiAwOworICBpZiAoIU1JTklfV0lORE9X X1AgKHcpCisgICAgICAmJiAoaW5kID0gQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBpbmRp Y2F0ZV9idWZmZXJfYm91bmRhcmllcyksICFOSUxQIChpbmQpKSkKKyAgICB7CisgICAgICBpZiAo RVEgKGluZCwgUWxlZnQpIHx8IEVRIChpbmQsIFFyaWdodCkpCisgICAgICAgIGJvdW5kYXJ5X3Rv cCA9IGJvdW5kYXJ5X2JvdCA9IGFycm93X3RvcCA9IGFycm93X2JvdCA9IGluZDsKKyAgICAgICAg ZWxzZSBpZiAoQ09OU1AgKGluZCkKKyAgICAgICAgICAgICAgICAgJiYgQ09OU1AgKFhDQVIgKGlu ZCkpKQorICAgICAgICB7CisgICAgICAgICAgTGlzcF9PYmplY3QgcG9zOworICAgICAgICAgIGlm IChwb3MgPSBtY19hc3NxIChRdCwgaW5kKSwgIU5JTFAgKHBvcykpCisgICAgICAgICAgICBib3Vu ZGFyeV90b3AgPSBib3VuZGFyeV9ib3QgPSBhcnJvd190b3AgPSBhcnJvd19ib3QgPSBYQ0RSIChw b3MpOworICAgICAgICAgIGlmIChwb3MgPSBtY19hc3NxIChRdG9wLCBpbmQpLCAhTklMUCAocG9z KSkKKyAgICAgICAgICAgIGJvdW5kYXJ5X3RvcCA9IFhDRFIgKHBvcyk7CisgICAgICAgICAgaWYg KHBvcyA9IG1jX2Fzc3EgKFFib3R0b20sIGluZCksICFOSUxQIChwb3MpKQorICAgICAgICAgICAg Ym91bmRhcnlfYm90ID0gWENEUiAocG9zKTsKKyAgICAgICAgICBpZiAocG9zID0gbWNfYXNzcSAo UXVwLCBpbmQpLCAhTklMUCAocG9zKSkKKyAgICAgICAgICAgIGFycm93X3RvcCA9IFhDRFIgKHBv cyk7CisgICAgICAgICAgaWYgKHBvcyA9IG1jX2Fzc3EgKFFkb3duLCBpbmQpLCAhTklMUCAocG9z KSkKKyAgICAgICAgICAgIGFycm93X2JvdCA9IFhDRFIgKHBvcyk7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZQorICAgICAgICAgIC8qIEFueXRoaW5nIGVsc2UgbWVhbnMgYm91bmRhcnkgb24gbGVm dCBhbmQgbm8gYXJyb3dzLiAqLworICAgICAgICAgIGJvdW5kYXJ5X3RvcCA9IGJvdW5kYXJ5X2Jv dCA9IFFsZWZ0OworICAgIH0KKyAgdG9wX2luZF9ybiA9IGJvdF9pbmRfcm4gPSAtMTsKKyAgaWYg KCFOSUxQIChpbmQpKQorICAgIHsKKyAgICAgIGZvciAoeSA9IHctPnZzY3JvbGwsIHJuID0gMDsK KyAgICAgICAgICAgeSA8IHliICYmIHJuIDwgbnJvd3M7CisgICAgICAgICAgIHkgKz0gcm93LT5o ZWlnaHQsICsrcm4pCisgICAgICAgIHsKKyAgICAgICAgICByb3cgPSB3LT5kZXNpcmVkX21hdHJp eC0+cm93cyArIHJuOworICAgICAgICAgIGlmICghcm93LT5lbmFibGVkX3ApCisgICAgICAgICAg ICByb3cgPSB3LT5jdXJyZW50X21hdHJpeC0+cm93cyArIHJuOworICAgICAgICAgIHJvdy0+aW5k aWNhdGVfYm9iX3AgPSByb3ctPmluZGljYXRlX3RvcF9saW5lX3AgPSAwOworICAgICAgICAgIHJv dy0+aW5kaWNhdGVfZW9iX3AgPSByb3ctPmluZGljYXRlX2JvdHRvbV9saW5lX3AgPSAwOworICAg ICAgICAgIGlmICghcm93LT5tb2RlX2xpbmVfcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgaWYgKHRvcF9pbmRfcm4gPCAwICYmIHJvdy0+dmlzaWJsZV9oZWlnaHQgPiAwKQorICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmIChNQVRSSVhfUk9XX1NUQVJUX0NIQVJQ T1MgKHJvdykgPD0gQlVGX0JFR1YgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSkKKyAgICAgICAgICAg ICAgICAgICAgICAmJiAhTUFUUklYX1JPV19QQVJUSUFMTFlfVklTSUJMRV9BVF9UT1BfUCAodywg cm93KSkKKyAgICAgICAgICAgICAgICAgICAgcm93LT5pbmRpY2F0ZV9ib2JfcCA9ICFOSUxQIChi b3VuZGFyeV90b3ApOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg ICAgICAgcm93LT5pbmRpY2F0ZV90b3BfbGluZV9wID0gIU5JTFAgKGFycm93X3RvcCk7CisgICAg ICAgICAgICAgICAgICB0b3BfaW5kX3JuID0gcm47CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICBpZiAoYm90X2luZF9ybiA8IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgaWYgKE1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKHJvdykgPj0gQlVGX1pWIChYQlVG RkVSICh3LT5jb250ZW50cykpCisgICAgICAgICAgICAgICAgICAgICAgJiYgIU1BVFJJWF9ST1df UEFSVElBTExZX1ZJU0lCTEVfQVRfQk9UVE9NX1AgKHcsIHJvdykpCisgICAgICAgICAgICAgICAg ICAgIHJvdy0+aW5kaWNhdGVfZW9iX3AgPSAhTklMUCAoYm91bmRhcnlfYm90KSwgYm90X2luZF9y biA9IHJuOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh5ICsgcm93LT5oZWlnaHQgPj0g eWIpCisgICAgICAgICAgICAgICAgICAgICAgcm93LT5pbmRpY2F0ZV9ib3R0b21fbGluZV9wID0g IU5JTFAgKGFycm93X2JvdCksIGJvdF9pbmRfcm4gPSBybjsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIGVtcHR5X3BvcyA9IEJWQVIgKFhCVUZG RVIgKHctPmNvbnRlbnRzKSwgaW5kaWNhdGVfZW1wdHlfbGluZXMpOworICBpZiAoIU5JTFAgKGVt cHR5X3BvcykgJiYgIUVRIChlbXB0eV9wb3MsIFFyaWdodCkpCisgICAgZW1wdHlfcG9zID0gV0lO RE9XX0xFRlRfRlJJTkdFX1dJRFRIICh3KSA9PSAwID8gUXJpZ2h0IDogUWxlZnQ7CisgIGZvciAo eSA9IDA7IHkgPCBNQVhfQklUTUFQX0NBQ0hFOyB5KyspCisgICAgYml0bWFwX2NhY2hlW3ldID0g LTE7CisjZGVmaW5lIE1DX0xFRlRfRlJJTkdFKGNhY2hlLCB3aGljaCwgcGFydGlhbF9wKQkJCVwK KyAgKGJpdG1hcF9jYWNoZVtjYWNoZSo0K3BhcnRpYWxfcF0gPj0gMAkJCQlcCisgICA/IGJpdG1h cF9jYWNoZVtjYWNoZSo0K3BhcnRpYWxfcF0JCQkJXAorICAgOiAoYml0bWFwX2NhY2hlW2NhY2hl KjQrcGFydGlhbF9wXSA9CQkJCVwKKyAgICAgIG1jX2dldF9sb2dpY2FsX2ZyaW5nZV9iaXRtYXAg KHcsIHdoaWNoLCAwLCBwYXJ0aWFsX3ApKSkKKyNkZWZpbmUgTUNfUklHSFRfRlJJTkdFKGNhY2hl LCB3aGljaCwgcGFydGlhbF9wKQkJCVwKKyAgKGJpdG1hcF9jYWNoZVtjYWNoZSo0KzIrcGFydGlh bF9wXSA+PSAwCQkJXAorICAgPyBiaXRtYXBfY2FjaGVbY2FjaGUqNCsyK3BhcnRpYWxfcF0JCQkJ XAorICAgOiAoYml0bWFwX2NhY2hlW2NhY2hlKjQrMitwYXJ0aWFsX3BdID0JCQlcCisgICAgICBt Y19nZXRfbG9naWNhbF9mcmluZ2VfYml0bWFwICh3LCB3aGljaCwgMSwgcGFydGlhbF9wKSkpCisg IC8qIEV4dGVuZCB0b3AtYWxpZ25lZCB0b3AgaW5kaWNhdG9yIChvciBib3R0b20tYWxpZ25lZCBi b3R0b20KKyAgICAgaW5kaWNhdG9yKSB0byBhZGphY2VudCByb3dzIGlmIGl0IGRvZXNuJ3QgZml0 IGluIG9uZSByb3cuICovCisgIHRvcF9pbmRfbWluX3kgPSBib3RfaW5kX21heF95ID0gLTE7Cisg IGlmICh0b3BfaW5kX3JuID49IDApCisgICAgeworICAgICAgaW50IGJuID0gTUNfTk9fRlJJTkdF X0JJVE1BUDsKKyAgICAgIHJvdyA9IHctPmRlc2lyZWRfbWF0cml4LT5yb3dzICsgdG9wX2luZF9y bjsKKyAgICAgIGlmICghcm93LT5lbmFibGVkX3ApCisgICAgICAgIHJvdyA9IHctPmN1cnJlbnRf bWF0cml4LT5yb3dzICsgdG9wX2luZF9ybjsKKyAgICAgIHRvcF9yb3dfZW5kc19hdF96dl9wID0g cm93LT5lbmRzX2F0X3p2X3A7CisgICAgICBpZiAocm93LT5pbmRpY2F0ZV9ib2JfcCkKKyAgICAg ICAgeworICAgICAgICAgIGlmIChFUSAoYm91bmRhcnlfdG9wLCBRbGVmdCkpCisgICAgICAgICAg ICBibiA9ICgocm93LT5pbmRpY2F0ZV9lb2JfcCAmJiBFUSAoYm91bmRhcnlfYm90LCBRbGVmdCkp CisgICAgICAgICAgICAgICAgICA/IE1DX0xFRlRfRlJJTkdFICgxLCBRdG9wX2JvdHRvbSwgcm93 LT5lbmRzX2F0X3p2X3ApCisgICAgICAgICAgICAgICAgICA6IE1DX0xFRlRfRlJJTkdFICgyLCBR dG9wLCAwKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGJuID0gKChyb3ctPmlu ZGljYXRlX2VvYl9wICYmIEVRIChib3VuZGFyeV9ib3QsIFFyaWdodCkpCisgICAgICAgICAgICAg ICAgICAgID8gTUNfUklHSFRfRlJJTkdFICgxLCBRdG9wX2JvdHRvbSwgcm93LT5lbmRzX2F0X3p2 X3ApCisgICAgICAgICAgICAgICAgICAgIDogTUNfUklHSFRfRlJJTkdFICgyLCBRdG9wLCAwKSk7 CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV90b3BfbGluZV9wKQor ICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChFUSAoYXJyb3dfdG9wLCBRbGVmdCkpCisgICAg ICAgICAgICAgIGJuID0gTUNfTEVGVF9GUklOR0UgKDYsIFF1cCwgMCk7CisgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICBibiA9IE1DX1JJR0hUX0ZSSU5HRSAoNiwgUXVwLCAwKTsK KyAgICAgICAgICB9CisgICAgICBpZiAoYm4gIT0gTUNfTk9fRlJJTkdFX0JJVE1BUCkKKyAgICAg ICAgeworICAgICAgICAgIHN0cnVjdCBmcmluZ2VfYml0bWFwICpmYiA9IGdldF9mcmluZ2VfYml0 bWFwX2RhdGEgKGJuKTsKKyAgICAgICAgICBpZiAoZmItPmFsaWduID09IEFMSUdOX0JJVE1BUF9U T1AgJiYgZmItPnBlcmlvZCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdHJ1 Y3QgZ2x5cGhfcm93ICpyb3cxOworICAgICAgICAgICAgICBpbnQgdG9wX2luZF9tYXhfeTsKKyAg ICAgICAgICAgICAgdG9wX2luZF9taW5feSA9IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcp OworICAgICAgICAgICAgICB0b3BfaW5kX21heF95ID0gdG9wX2luZF9taW5feSArIGZiLT5oZWln aHQ7CisgICAgICAgICAgICAgIGlmICh0b3BfaW5kX21heF95ID4geWIpCisgICAgICAgICAgICAg ICAgdG9wX2luZF9tYXhfeSA9IHliOworICAgICAgICAgICAgICBmb3IgKHkgPSByb3ctPnkgKyBy b3ctPmhlaWdodCwgcm4gPSB0b3BfaW5kX3JuICsgMTsKKyAgICAgICAgICAgICAgICAgICB5IDwg dG9wX2luZF9tYXhfeSAmJiBybiA8IG5yb3dzOworICAgICAgICAgICAgICAgICAgIHkgKz0gcm93 MS0+aGVpZ2h0LCBybisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlm IChib3RfaW5kX3JuID49IDAgJiYgcm4gPj0gYm90X2luZF9ybikKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICByb3cxID0gdy0+ZGVzaXJlZF9tYXRyaXgtPnJv d3MgKyBybjsKKyAgICAgICAgICAgICAgICAgIGlmICghcm93MS0+ZW5hYmxlZF9wKQorICAgICAg ICAgICAgICAgICAgICByb3cxID0gdy0+Y3VycmVudF9tYXRyaXgtPnJvd3MgKyBybjsKKyAgICAg ICAgICAgICAgICAgIHJvdzEtPmluZGljYXRlX2JvYl9wID0gcm93LT5pbmRpY2F0ZV9ib2JfcDsK KyAgICAgICAgICAgICAgICAgIHJvdzEtPmluZGljYXRlX3RvcF9saW5lX3AgPSByb3ctPmluZGlj YXRlX3RvcF9saW5lX3A7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgfQorICBpZiAoYm90X2luZF9ybiA+PSAwKQorICAgIHsKKyAgICAgIGludCBibiA9 IE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICByb3cgPSB3LT5kZXNpcmVkX21hdHJpeC0+cm93 cyArIGJvdF9pbmRfcm47CisgICAgICBpZiAoIXJvdy0+ZW5hYmxlZF9wKQorICAgICAgICByb3cg PSB3LT5jdXJyZW50X21hdHJpeC0+cm93cyArIGJvdF9pbmRfcm47CisgICAgICBib3Rfcm93X2Vu ZHNfYXRfenZfcCA9IHJvdy0+ZW5kc19hdF96dl9wOworICAgICAgaWYgKHJvdy0+aW5kaWNhdGVf ZW9iX3ApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoRVEgKGJvdW5kYXJ5X2JvdCwgUWxlZnQp KQorICAgICAgICAgICAgYm4gPSBNQ19MRUZUX0ZSSU5HRSAoMywgUWJvdHRvbSwgcm93LT5lbmRz X2F0X3p2X3ApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBibiA9IE1DX1JJR0hU X0ZSSU5HRSAoMywgUWJvdHRvbSwgcm93LT5lbmRzX2F0X3p2X3ApOworICAgICAgICB9CisgICAg ICAgIGVsc2UgaWYgKHJvdy0+aW5kaWNhdGVfYm90dG9tX2xpbmVfcCkKKyAgICAgICAgICB7Cisg ICAgICAgICAgICBpZiAoRVEgKGFycm93X2JvdCwgUWxlZnQpKQorICAgICAgICAgICAgICBibiA9 IE1DX0xFRlRfRlJJTkdFICg3LCBRZG93biwgMCk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgICBibiA9IE1DX1JJR0hUX0ZSSU5HRSAoNywgUWRvd24sIDApOworICAgICAgICAg IH0KKyAgICAgIGlmIChibiAhPSBNQ19OT19GUklOR0VfQklUTUFQKQorICAgICAgICB7CisgICAg ICAgICAgc3RydWN0IGZyaW5nZV9iaXRtYXAgKmZiID0gZ2V0X2ZyaW5nZV9iaXRtYXBfZGF0YSAo Ym4pOworICAgICAgICAgIGlmIChmYi0+YWxpZ24gPT0gQUxJR05fQklUTUFQX0JPVFRPTSAmJiBm Yi0+cGVyaW9kID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cnVjdCBnbHlw aF9yb3cgKnJvdzE7CisgICAgICAgICAgICAgIGludCBib3RfaW5kX21pbl95OworICAgICAgICAg ICAgICBib3RfaW5kX21heF95ID0gcm93LT55ICsgcm93LT52aXNpYmxlX2hlaWdodDsKKyAgICAg ICAgICAgICAgYm90X2luZF9taW5feSA9IGJvdF9pbmRfbWF4X3kgLSBmYi0+aGVpZ2h0OworICAg ICAgICAgICAgICBpZiAoYm90X2luZF9taW5feSA8IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQg KHcpKQorICAgICAgICAgICAgICAgIGJvdF9pbmRfbWluX3kgPSBXSU5ET1dfSEVBREVSX0xJTkVf SEVJR0hUICh3KTsKKyAgICAgICAgICAgICAgZm9yICh5ID0gcm93LT55LCBybiA9IGJvdF9pbmRf cm4gLSAxOworICAgICAgICAgICAgICAgICAgIHkgPj0gYm90X2luZF9taW5feSAmJiBybiA+PSAw OworICAgICAgICAgICAgICAgICAgIHkgLT0gcm93MS0+aGVpZ2h0LCBybi0tKQorICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmICh0b3BfaW5kX3JuID49IDAgJiYgcm4gPD0g dG9wX2luZF9ybikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICByb3cxID0gdy0+ZGVzaXJlZF9tYXRyaXgtPnJvd3MgKyBybjsKKyAgICAgICAgICAgICAgICAg IGlmICghcm93MS0+ZW5hYmxlZF9wKQorICAgICAgICAgICAgICAgICAgICByb3cxID0gdy0+Y3Vy cmVudF9tYXRyaXgtPnJvd3MgKyBybjsKKyAgICAgICAgICAgICAgICAgIHJvdzEtPmluZGljYXRl X2VvYl9wID0gcm93LT5pbmRpY2F0ZV9lb2JfcDsKKyAgICAgICAgICAgICAgICAgIHJvdzEtPmlu ZGljYXRlX2JvdHRvbV9saW5lX3AgPSByb3ctPmluZGljYXRlX2JvdHRvbV9saW5lX3A7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICBib29sIGF1 dG9faHNjcm9sbF9tb2RlX3AgPSBFUSAoRmJ1ZmZlcl9sb2NhbF92YWx1ZSAoUWF1dG9faHNjcm9s bF9tb2RlLCB3LT5jb250ZW50cyksIFFjdXJyZW50X2xpbmUpOworICAvKiBFWEFNUExFOiAgKHNj cm9sbC1sZWZ0IDUpICovCisgIGJvb2wgaHNjbF9hbGxfdGVtcF9wID0gKHctPnN1c3BlbmRfYXV0 b19oc2Nyb2xsCisgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGF1dG9faHNjcm9sbF9tb2Rl X3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+aHNjcm9sbCA+IDAKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgdy0+bWluX2hzY3JvbGwgPT0gMCk7CisgIC8qIEVYQU1QTEU6 ICBDLXUgQy14IDwgYW5kIGRvIG5vdGhpbmcuICovCisgIGJvb2wgaHNjbF9hbGxfcGVybV8wX3Ag PSAody0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiBhdXRvX2hzY3JvbGxfbW9kZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+ aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5faHNjcm9s bCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5faHNjcm9sbCA9PSB3 LT5oc2Nyb2xsKTsKKyAgLyogRVhBTVBMRTogIEMtdSBDLXggPCBhbmQgZG8gc29tZXRoaW5nIGVs c2UgYmVzaWRlcyBob3Jpem9udGFsbHkgc2Nyb2xsaW5nIHRoZQorICAgICAgICAgICAgICAgY3Vy cmVudCBsaW5lIGRpZmZlcmVudGx5LgorICAgICAgICAgICAgICAgQ3VycmVudCBsaW5lIGlzIF9u b3RfIGhvcml6b250YWxseSBzY3JvbGxlZCBkaWZmZXJlbnRseS4gKi8KKyAgYm9vbCBoc2NsX2Fs bF9wZXJtXzFfcCA9ICghdy0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiBhdXRvX2hzY3JvbGxfbW9kZV9wCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgdy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3 LT5taW5faHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5f aHNjcm9sbCA9PSB3LT5oc2Nyb2xsKTsKKyAgLyogRVhBTVBMRTogIEMtdSBDLXggPCBhbmQgLi4u CisgICAgICAgICAgICAgICBDdXJyZW50IGxpbmUgaXMgX25vdF8gaG9yaXpvbnRhbGx5IHNjcm9s bGVkIGRpZmZlcmVudGx5LiAqLworICBib29sIGhzY2xfYWxsX3Blcm1fMl9wID0gKCF3LT5zdXNw ZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGF1dG9faHNj cm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID09 IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5faHNjcm9sbCA+IDAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5faHNjcm9sbCAhPSB3LT5oc2Nyb2xs KTsKKyAgLyogRVhBTVBMRTogIChzY3JvbGwtbGVmdCA1KTsgYW5kLCB0aGVuIHByZXNzIHRoZSBs ZWZ0IGFycm93IGtleSBvbmUgdGltZS4KKyAgICAgICAgICAgICAgIEN1cnJlbnQgbGluZSBfaXNf IGhvcml6b250YWxseSBzY3JvbGxlZCBkaWZmZXJlbnRseS4qLworICBib29sIGhzY2xfdGVtcF9w ID0gKCF3LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICYmIGF1 dG9faHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4g MAorICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID09IDApOworICAvKiBF WEFNUExFOiAgQy11IEMteCA8IGFuZCBkbyBzb21ldGhpbmcgdGhhdCBjYXVzZXMgdGhlIGN1cnJl bnQgbGluZSB0byBiZQorICAgICAgICAgICAgICAgaG9yaXpvbnRhbGx5IHNjcm9sbGVkIGRpZmZl cmVudGx5LgorICAgICAgICAgICAgICAgQ3VycmVudCBsaW5lIF9pc18gaG9yaXpvbnRhbGx5IHNj cm9sbGVkIGRpZmZlcmVudGx5LiAqLworICBib29sIGhzY2xfcGVybV9wID0gKCF3LT5zdXNwZW5k X2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICYmIGF1dG9faHNjcm9sbF9tb2Rl X3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAg ICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID4gMAorICAgICAgICAgICAgICAgICAgICAgICYm IHctPm1pbl9oc2Nyb2xsICE9IHctPmhzY3JvbGwpOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJB TUUgKHctPmZyYW1lKTsKKyAgZm9yICh5ID0gdy0+dnNjcm9sbCwgcm4gPSAwOworICAgICAgIHkg PCB5YiAmJiBybiA8IG5yb3dzOworICAgICAgIHkgKz0gcm93LT5oZWlnaHQsIHJuKyspCisgICAg eworICBpbnQgbGVmdCwgcmlnaHQ7CisgIHVuc2lnbmVkIGxlZnRfZmFjZV9pZCwgcmlnaHRfZmFj ZV9pZDsKKyAgaW50IGxlZnRfb2Zmc2V0LCByaWdodF9vZmZzZXQ7CisgIGJvb2wgcGVyaW9kaWNf cDsKKyAgcm93ID0gdy0+ZGVzaXJlZF9tYXRyaXgtPnJvd3MgKyBybjsKKyAgY3VyID0gdy0+Y3Vy cmVudF9tYXRyaXgtPnJvd3MgKyBybjsKKyAgaW50IHZudGhfZG0gPSBNQVRSSVhfUk9XX1ZQT1Mg KHctPmRlc2lyZWRfbWF0cml4LT5yb3dzICsgcm4sIHctPmRlc2lyZWRfbWF0cml4KTsKKyAgaW50 IHZudGhfY20gPSBNQVRSSVhfUk9XX1ZQT1MgKHctPmN1cnJlbnRfbWF0cml4LT5yb3dzICsgcm4s IHctPmN1cnJlbnRfbWF0cml4KTsKKyAgZW51bSBtY19yb3dfcG9zaXRpb24gcm93X3Bvc2l0aW9u ID0gbWNfcm93X3Bvc2l0aW9uICh3LCBjdXIsIGN1ciwgdm50aF9jbSk7CisgIGludCBtY19sZWZ0 X2ZyaW5nZV9iaXRtYXAgPSBNQ19OT19GUklOR0VfQklUTUFQOworICBpbnQgbWNfbGVmdF9mcmlu Z2VfZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgaW50IG1jX3JpZ2h0X2ZyaW5nZV9iaXRt YXAgPSBNQ19OT19GUklOR0VfQklUTUFQOworICBpbnQgbWNfcmlnaHRfZnJpbmdlX2ZhY2VfaWQg PSBERUZBVUxUX0ZBQ0VfSUQ7CisgIGVudW0gbWNfY2FjaGVfdHlwZSBjYWNoZV90eXBlID0gQ0hf Q0FDSEU7CisgIGZvciAoaW50IG50aCA9IDA7CisgICAgICAgbWNfdHJhdmVyc2VfY2FjaGVfcCAo dy0+bWNfbWF0cml4LCBjYWNoZV90eXBlLCB2bnRoX2NtLCBudGgpOworICAgICAgICsrbnRoKQor ICAgIHsKKyAgICAgIC8vICBpbnQgeCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhfY21dLmNhY2hl W2NhY2hlX3R5cGVdW250aF0ueDsKKyAgICAgIC8vICBpbnQgZnggPSB3LT5tY19tYXRyaXgudnBv c1t2bnRoX2NtXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmZ4OworICAgICAgLy8gIGludCB5ID0g dy0+bWNfbWF0cml4LnZwb3Nbdm50aF9jbV0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS55OworICAg ICAgLy8gIGludCBmeSA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhfY21dLmNhY2hlW2NhY2hlX3R5 cGVdW250aF0uZnk7CisgICAgICAvLyAgaW50IGhwb3MgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRo X2NtXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmhwb3M7CisgICAgICBpbnQgdnBvcyA9IHctPm1j X21hdHJpeC52cG9zW3ZudGhfY21dLmNhY2hlW2NhY2hlX3R5cGVdW250aF0udnBvczsKKyAgICAg IC8vICBpbnQgd2QgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoX2NtXS5jYWNoZVtjYWNoZV90eXBl XVtudGhdLndkOworICAgICAgLy8gIGludCBoID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF9jbV0u Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5oOworICAgICAgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJz b3JfdHlwZSA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhfY21dLmNhY2hlW2NhY2hlX3R5cGVdW250 aF0uY3Vyc29yX3R5cGU7CisgICAgICAvLyAgaW50IGN1cnNvcl93aWR0aCA9IHctPm1jX21hdHJp eC52cG9zW3ZudGhfY21dLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uY3Vyc29yX3dpZHRoOworICAg ICAgLy8gIHN0cnVjdCBtY19SR0IgbHNsX2ZnID0gey5yZWQgPSB3LT5tY19tYXRyaXgudnBvc1t2 bnRoX2NtXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmZnLnJlZCwKKyAgICAgIC8vICAgICAgICAg ICAgICAgICAgICAgICAgICAuZ3JlZW4gPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoX2NtXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhdLmZnLmdyZWVuLAorICAgICAgLy8gICAgICAgICAgICAgICAgICAg ICAgICAgIC5ibHVlID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF9jbV0uY2FjaGVbY2FjaGVfdHlw ZV1bbnRoXS5mZy5ibHVlfTsKKyAgICAgIC8vICBzdHJ1Y3QgbWNfUkdCIGxzbF9iZyA9IHsucmVk ID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF9jbV0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5iZy5y ZWQsCisgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgLmdyZWVuID0gdy0+bWNfbWF0 cml4LnZwb3Nbdm50aF9jbV0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5iZy5ncmVlbiwKKyAgICAg IC8vICAgICAgICAgICAgICAgICAgICAgICAgICAuYmx1ZSA9IHctPm1jX21hdHJpeC52cG9zW3Zu dGhfY21dLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uYmcuYmx1ZX07CisgICAgICBib29sIGFjdGl2 ZV9wID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF9jbV0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5h Y3RpdmVfcDsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IHctPm1jX21hdHJp eC52cG9zW3ZudGhfY21dLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGhfZmxhdm9yOworICAg ICAgYm9vbCBlbmFibGVkX3AgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoX2NtXS5jYWNoZVtjYWNo ZV90eXBlXVtudGhdLmVuYWJsZWRfcDsKKyAgICAgIGlmICgodnBvcyA9PSB2bnRoX2RtIHx8IHZw b3MgPT0gdm50aF9jbSkKKyAgICAgICAgICAmJiBnbHlwaF9mbGF2b3IgPT0gTUNfT1ZFUkxBWV9B UlJPV19CSVRNQVAKKyAgICAgICAgICAmJiAhaHNjbF9hbGxfdGVtcF9wCisgICAgICAgICAgJiYg IWhzY2xfdGVtcF9wCisgICAgICAgICAgJiYgIWhzY2xfcGVybV9wCisgICAgICAgICAgJiYgIWhz Y2xfYWxsX3Blcm1fMF9wCisgICAgICAgICAgJiYgIWhzY2xfYWxsX3Blcm1fMV9wCisgICAgICAg ICAgJiYgIWhzY2xfYWxsX3Blcm1fMl9wCisgICAgICAgICAgJiYgZW5hYmxlZF9wKQorICAgICAg ICB7CisgICAgICAgICAgaW50IGZyaW5nZV9iaXRtYXAgPSBNQ19OT19GUklOR0VfQklUTUFQOwor ICAgICAgICAgIGVudW0gZmFjZV9pZCBvdmVybGF5X2Fycm93X2ZhY2VfaWQgPQorICAgICAgICAg ICAgKCFhY3RpdmVfcAorICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5j b250ZW50cyksIGNoX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICAgICAgICAgID8gbG9va3VwX2Rl cml2ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1vdmVybGF5LWFycm93LWluYWN0aXZlLXByZS16 di1mYWNlIiksIEZSSU5HRV9GQUNFX0lELCB0cnVlKQorICAgICAgICAgICAgOiAoYWN0aXZlX3Ap CisgICAgICAgICAgICAgID8gbG9va3VwX2Rlcml2ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1v dmVybGF5LWFycm93LXByZS16di1mYWNlIiksIEZSSU5HRV9GQUNFX0lELCB0cnVlKQorICAgICAg ICAgICAgOiBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICAgICAgbWNfbGVmdF9mcmluZ2VfZmFjZV9p ZCA9IChjdXJzb3JfdHlwZSA9PSBNQ19MRUZUX0ZSSU5HRV9CSVRNQVApCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/IG92ZXJsYXlfYXJyb3dfZmFjZV9pZAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICAgICAg aWYgKHctPmhzY3JvbGwgIT0gMCkKKyAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRf ZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1vdmVybGF5LWFycm93IiksIGZhbHNlLCB0cnVl KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dl dF9mcmluZ2VfYml0bWFwICh3LCBpbnRlcm4gKCIrLW92ZXJsYXktYXJyb3ciKSwgdHJ1ZSwgdHJ1 ZSk7CisgICAgICAgICAgbWNfbGVmdF9mcmluZ2VfYml0bWFwID0gKGN1cnNvcl90eXBlID09IE1D X0xFRlRfRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PyBmcmluZ2VfYml0bWFwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNf Tk9fRlJJTkdFX0JJVE1BUDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgodnBvcyA9PSB2 bnRoX2RtIHx8IHZwb3MgPT0gdm50aF9jbSkKKyAgICAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxh dm9yID09IE1DX09WRVJMQVlfQVJST1dfQklUTUFQCisgICAgICAgICAgICAgICAgICYmIChoc2Ns X2FsbF90ZW1wX3AKKyAgICAgICAgICAgICAgICAgICAgIHx8IGhzY2xfYWxsX3Blcm1fMF9wCisg ICAgICAgICAgICAgICAgICAgICB8fCBoc2NsX2FsbF9wZXJtXzFfcAorICAgICAgICAgICAgICAg ICAgICAgfHwgaHNjbF9hbGxfcGVybV8yX3AKKyAgICAgICAgICAgICAgICAgICAgIHx8IGhzY2xf dGVtcF9wCisgICAgICAgICAgICAgICAgICAgICB8fCBoc2NsX3Blcm1fcCkKKyAgICAgICAgICAg ICAgICAgJiYgZW5hYmxlZF9wKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBmcmluZ2Vf Yml0bWFwID0gTUNfTk9fRlJJTkdFX0JJVE1BUDsKKyAgICAgICAgICAgIGVudW0gZmFjZV9pZCBv dmVybGF5X2Fycm93X2ZhY2VfaWQgPQorICAgICAgICAgICAgICAoIWFjdGl2ZV9wCisgICAgICAg ICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjaF9pbmFjdGl2 ZV93aW5kb3dzKSkpCisgICAgICAgICAgICAgID8gbG9va3VwX2Rlcml2ZWRfZmFjZSAodywgZiwg aW50ZXJuICgiKy1vdmVybGF5LWFycm93LWhzY2wtaW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgRlJJ TkdFX0ZBQ0VfSUQsIHRydWUpCisgICAgICAgICAgICAgIDogKGFjdGl2ZV9wKQorICAgICAgICAg ICAgICAgID8gbG9va3VwX2Rlcml2ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1vdmVybGF5LWFy cm93LWhzY2wtcHJlLXp2LWZhY2UiKSwgRlJJTkdFX0ZBQ0VfSUQsIHRydWUpCisgICAgICAgICAg ICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAgICAgICAgbWNfbGVmdF9mcmluZ2VfZmFjZV9p ZCA9IChjdXJzb3JfdHlwZSA9PSBNQ19MRUZUX0ZSSU5HRV9CSVRNQVApCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgID8gb3ZlcmxheV9hcnJvd19mYWNlX2lkCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAg ICAgICAgaWYgKGhzY2xfYWxsX3Blcm1fMF9wKQorICAgICAgICAgICAgICBmcmluZ2VfYml0bWFw ID0gbWNfZ2V0X2ZyaW5nZV9iaXRtYXAgKHcsIGludGVybiAoIistaHNjbC1wZXJtIiksIGZhbHNl LCBmYWxzZSk7CisgICAgICAgICAgICAgIGVsc2UgaWYgKGhzY2xfYWxsX3Blcm1fMV9wKQorICAg ICAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRfZnJpbmdlX2JpdG1hcCAodywgaW50 ZXJuICgiKy1oc2NsLXBlcm0iKSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIGVsc2Ug aWYgKGhzY2xfYWxsX3Blcm1fMl9wKQorICAgICAgICAgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9 IG1jX2dldF9mcmluZ2VfYml0bWFwICh3LCBpbnRlcm4gKCIrLWhzY2wtcGVybSIpLCBmYWxzZSwg dHJ1ZSk7CisgICAgICAgICAgICAgICAgICBlbHNlIGlmIChoc2NsX3Blcm1fcCkKKyAgICAgICAg ICAgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9mcmluZ2VfYml0bWFwICh3LCBpbnRl cm4gKCIrLWhzY2wtcGVybSIpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxz ZSBpZiAoaHNjbF9hbGxfdGVtcF9wKQorICAgICAgICAgICAgICAgICAgICAgIGZyaW5nZV9iaXRt YXAgPSBtY19nZXRfZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1oc2NsLXRlbXAiKSwgZmFs c2UsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChoc2NsX3RlbXBfcCkK KyAgICAgICAgICAgICAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRfZnJpbmdlX2Jp dG1hcCAodywgaW50ZXJuICgiKy1oc2NsLXRlbXAiKSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAg ICAgbWNfbGVmdF9mcmluZ2VfYml0bWFwID0gKGN1cnNvcl90eXBlID09IE1DX0xFRlRfRlJJTkdF X0JJVE1BUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZyaW5nZV9i aXRtYXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1DX05PX0ZSSU5H RV9CSVRNQVA7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCh2cG9zID09IHZudGhf ZG0gfHwgdnBvcyA9PSB2bnRoX2NtKQorICAgICAgICAgICAgICAgICAgICAmJiAoZ2x5cGhfZmxh dm9yID09IE1DX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAg ICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJ R0hUX0FSUk9XCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNf SE9MTE9XX1JFQ1RBTkdMRQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9y ID09IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICAgICAg fHwgZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVwor ICAgICAgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JB UgorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VE X1ZFUlRJQ0FMX0JBUgorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09 IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gpCisgICAgICAgICAgICAgICAgICAgICYmIGVuYWJs ZWRfcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgTGlzcF9PYmplY3QgYml0bWFwX2Zs YXZvciA9IChnbHlwaF9mbGF2b3IgPT0gTUNfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVykK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUW1jX2hvbGxvd19y ZWN0YW5nbGVfcmlnaHRfYXJyb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDogKGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJ R0hUX0FSUk9XKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ IFFtY19yZXZlcnNlZF9ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaF9mbGF2b3IgPT0gTUNfSE9MTE9X X1JFQ1RBTkdMRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PyBRbWNfaG9sbG93X3JlY3RhbmdsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiAoZ2x5cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVykK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBRbWNfdmVydGlj YWxfYmFyX3JpZ2h0X2Fycm93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6IChnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSX1JJR0hUX0FS Uk9XKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFtY19y ZXZlcnNlZF92ZXJ0aWNhbF9iYXJfcmlnaHRfYXJyb3cKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogKGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVIpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUW1jX3ZlcnRpY2Fs X2JhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGhf Zmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPyBRbWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaF9mbGF2b3IgPT0g TUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgPyBRbWNfdmVydGljYWxfYmFyX2JhY2tzbGFzaAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBRbmlsOworICAgICAgICAgICAgICBtY19y aWdodF9mcmluZ2VfYml0bWFwID0gKGN1cnNvcl90eXBlID09IE1DX1JJR0hUX0ZSSU5HRV9CSVRN QVApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsb29rdXBfZnJp bmdlX2JpdG1hcCAoYml0bWFwX2ZsYXZvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6IE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICAgICAgICAgIG1jX3JpZ2h0 X2ZyaW5nZV9mYWNlX2lkID0KKyAgICAgICAgICAgICAgICAoY3Vyc29yX3R5cGUgPT0gTUNfUklH SFRfRlJJTkdFX0JJVE1BUAorICAgICAgICAgICAgICAgICAmJiByb3dfcG9zaXRpb24gPT0gUFJF X1pWCisgICAgICAgICAgICAgICAgICYmIChnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfSE9M TE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhf Zmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAg ICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUikp CisgICAgICAgICAgICAgICAgICA/IGxvb2t1cF9kZXJpdmVkX2ZhY2UgKHcsIGYsIGludGVybiAo IistcmV2ZXJzZWQtYmFyLXByZS16di1mYWNlIiksIEZSSU5HRV9GQUNFX0lELCB0cnVlKQorICAg ICAgICAgICAgICAgIDogKGN1cnNvcl90eXBlID09IE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVAKKyAg ICAgICAgICAgICAgICAgICAmJiByb3dfcG9zaXRpb24gPT0gQVRfWlYKKyAgICAgICAgICAgICAg ICAgICAmJiAoZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX0hPTExPV19SRUNUQU5HTEVfUklH SFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1JF VkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICAgICB8 fCBnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSKSkKKyAgICAgICAgICAg ICAgICAgID8gbG9va3VwX2Rlcml2ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZXZlcnNlZC1i YXItYXQtenYtZmFjZSIpLCBGUklOR0VfRkFDRV9JRCwgdHJ1ZSkKKyAgICAgICAgICAgICAgICA6 IChjdXJzb3JfdHlwZSA9PSBNQ19SSUdIVF9GUklOR0VfQklUTUFQCisgICAgICAgICAgICAgICAg ICAgJiYgcm93X3Bvc2l0aW9uID09IFBPU1RfWlYKKyAgICAgICAgICAgICAgICAgICAmJiAoZ2x5 cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1cKKyAg ICAgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJ Q0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICAgICB8fCBnbHlwaF9mbGF2 b3IgPT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSKSkKKyAgICAgICAgICAgICAgICAgID8gbG9v a3VwX2Rlcml2ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZXZlcnNlZC1iYXItcG9zdC16di1m YWNlIiksIEZSSU5HRV9GQUNFX0lELCB0cnVlKQorICAgICAgICAgICAgICAgIDogKGN1cnNvcl90 eXBlID09IE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVAKKyAgICAgICAgICAgICAgICAgICAmJiByb3df cG9zaXRpb24gPT0gUFJFX1pWCisgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9 IE1DX1JFVkVSU0VEX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAg ICAgICAmJiBnbHlwaF9mbGF2b3IgIT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSX1JJR0hUX0FS Uk9XCisgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9IE1DX1JFVkVSU0VEX1ZF UlRJQ0FMX0JBUikKKyAgICAgICAgICAgICAgICAgID8gbG9va3VwX2Rlcml2ZWRfZmFjZSAodywg ZiwgaW50ZXJuICgiKy1iYXItcHJlLXp2LWZhY2UiKSwgRlJJTkdFX0ZBQ0VfSUQsIHRydWUpCisg ICAgICAgICAgICAgICAgOiAoY3Vyc29yX3R5cGUgPT0gTUNfUklHSFRfRlJJTkdFX0JJVE1BUAor ICAgICAgICAgICAgICAgICAgICYmIHJvd19wb3NpdGlvbiA9PSBBVF9aVgorICAgICAgICAgICAg ICAgICAgICYmIGdseXBoX2ZsYXZvciAhPSBNQ19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJ R0hUX0FSUk9XCisgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9IE1DX1JFVkVS U0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICYmIGdseXBo X2ZsYXZvciAhPSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIpCisgICAgICAgICAgICAgICAgICA/ IGxvb2t1cF9kZXJpdmVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistYmFyLWF0LXp2LWZhY2UiKSwg RlJJTkdFX0ZBQ0VfSUQsIHRydWUpCisgICAgICAgICAgICAgICAgOiAoY3Vyc29yX3R5cGUgPT0g TUNfUklHSFRfRlJJTkdFX0JJVE1BUAorICAgICAgICAgICAgICAgICAgICYmIHJvd19wb3NpdGlv biA9PSBQT1NUX1pWCisgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9IE1DX1JF VkVSU0VEX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAm JiBnbHlwaF9mbGF2b3IgIT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisg ICAgICAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9IE1DX1JFVkVSU0VEX1ZFUlRJQ0FM X0JBUikKKyAgICAgICAgICAgICAgICAgID8gbG9va3VwX2Rlcml2ZWRfZmFjZSAodywgZiwgaW50 ZXJuICgiKy1iYXItcG9zdC16di1mYWNlIiksIEZSSU5HRV9GQUNFX0lELCB0cnVlKQorICAgICAg ICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICBpZiAoIXJvdy0+ZW5hYmxlZF9wKQorICAgICAgICByb3cgPSBjdXI7CisgICAgICBsZWZ0 X2ZhY2VfaWQgPSByaWdodF9mYWNlX2lkID0gREVGQVVMVF9GQUNFX0lEOworICAgICAgbGVmdF9v ZmZzZXQgPSByaWdodF9vZmZzZXQgPSAwOworICAgICAgcGVyaW9kaWNfcCA9IDA7CisgICAgICAv KiBEZWNpZGUgd2hpY2ggYml0bWFwIHRvIGRyYXcgaW4gdGhlIGxlZnQgZnJpbmdlLiAqLworICAg ICAgaWYgKFdJTkRPV19MRUZUX0ZSSU5HRV9XSURUSCAodykgPT0gMCkKKyAgICAgICAgbGVmdCA9 IE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICBlbHNlIGlmIChyb3ctPmxlZnRfdXNlcl9mcmlu Z2VfYml0bWFwICE9IE1DX05PX0ZSSU5HRV9CSVRNQVApCisgICAgICAgIHsKKyAgICAgICAgICBs ZWZ0ID0gcm93LT5sZWZ0X3VzZXJfZnJpbmdlX2JpdG1hcDsKKyAgICAgICAgICBsZWZ0X2ZhY2Vf aWQgPSByb3ctPmxlZnRfdXNlcl9mcmluZ2VfZmFjZV9pZDsKKyAgICAgICAgfQorICAgICAgZWxz ZSBpZiAoKCFyb3ctPnJldmVyc2VkX3AgJiYgcm93LT50cnVuY2F0ZWRfb25fbGVmdF9wKQorICAg ICAgICAgICAgICAgfHwgKHJvdy0+cmV2ZXJzZWRfcCAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdo dF9wKSkKKyAgICAgICAgbGVmdCA9IE1DX0xFRlRfRlJJTkdFICgwLCBRdHJ1bmNhdGlvbiwgMCk7 CisgICAgICBlbHNlIGlmIChyb3ctPmluZGljYXRlX2JvYl9wICYmIEVRIChib3VuZGFyeV90b3As IFFsZWZ0KSkKKyAgICAgICAgeworICAgICAgICAgIGxlZnQgPSAoKHJvdy0+aW5kaWNhdGVfZW9i X3AgJiYgRVEgKGJvdW5kYXJ5X2JvdCwgUWxlZnQpKQorICAgICAgICAgICAgICAgICA/IE1DX0xF RlRfRlJJTkdFICgxLCBRdG9wX2JvdHRvbSwgdG9wX3Jvd19lbmRzX2F0X3p2X3ApCisgICAgICAg ICAgICAgICAgIDogTUNfTEVGVF9GUklOR0UgKDIsIFF0b3AsIDApKTsKKyAgICAgICAgICBpZiAo dG9wX2luZF9taW5feSA+PSAwKQorICAgICAgICAgICAgbGVmdF9vZmZzZXQgPSB0b3BfaW5kX21p bl95IC0gcm93LT55OworICAgICAgICB9CisgICAgICBlbHNlIGlmIChyb3ctPmluZGljYXRlX2Vv Yl9wICYmIEVRIChib3VuZGFyeV9ib3QsIFFsZWZ0KSkKKyAgICAgICAgeworICAgICAgICAgIGxl ZnQgPSBNQ19MRUZUX0ZSSU5HRSAoMywgUWJvdHRvbSwgYm90X3Jvd19lbmRzX2F0X3p2X3ApOwor ICAgICAgICAgIGlmIChib3RfaW5kX21heF95ID49IDApCisgICAgICAgICAgICBsZWZ0X29mZnNl dCA9IGJvdF9pbmRfbWF4X3kgLSAocm93LT55ICsgcm93LT52aXNpYmxlX2hlaWdodCk7CisgICAg ICAgIH0KKyAgICAgIGVsc2UgaWYgKCghcm93LT5yZXZlcnNlZF9wICYmIE1BVFJJWF9ST1dfQ09O VElOVUFUSU9OX0xJTkVfUCAocm93KSkKKyAgICAgICAgICAgICAgIHx8IChyb3ctPnJldmVyc2Vk X3AgJiYgcm93LT5jb250aW51ZWRfcCkpCisgICAgICAgIGxlZnQgPSBNQ19MRUZUX0ZSSU5HRSAo NCwgUWNvbnRpbnVhdGlvbiwgMCk7CisgICAgICBlbHNlIGlmIChyb3ctPmluZGljYXRlX2VtcHR5 X2xpbmVfcCAmJiBFUSAoZW1wdHlfcG9zLCBRbGVmdCkpCisgICAgICAgIGxlZnQgPSBNQ19MRUZU X0ZSSU5HRSAoNSwgUWVtcHR5X2xpbmUsIDApOworICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0 ZV90b3BfbGluZV9wICYmIEVRIChhcnJvd190b3AsIFFsZWZ0KSkKKyAgICAgICAgeworICAgICAg ICAgIGxlZnQgPSBNQ19MRUZUX0ZSSU5HRSAoNiwgUXVwLCAwKTsKKyAgICAgICAgICBpZiAodG9w X2luZF9taW5feSA+PSAwKQorICAgICAgICAgICAgbGVmdF9vZmZzZXQgPSB0b3BfaW5kX21pbl95 IC0gcm93LT55OworICAgICAgICB9CisgICAgICBlbHNlIGlmIChyb3ctPmluZGljYXRlX2JvdHRv bV9saW5lX3AgJiYgRVEgKGFycm93X2JvdCwgUWxlZnQpKQorICAgICAgICB7CisgICAgICAgICAg bGVmdCA9IE1DX0xFRlRfRlJJTkdFICg3LCBRZG93biwgMCk7CisgICAgICAgICAgaWYgKGJvdF9p bmRfbWF4X3kgPj0gMCkKKyAgICAgICAgICAgIGxlZnRfb2Zmc2V0ID0gYm90X2luZF9tYXhfeSAt IChyb3ctPnkgKyByb3ctPnZpc2libGVfaGVpZ2h0KTsKKyAgICAgICAgfQorICAgICAgZWxzZQor ICAgICAgICBsZWZ0ID0gTUNfTk9fRlJJTkdFX0JJVE1BUDsKKyAgICAgIC8qIERlY2lkZSB3aGlj aCBiaXRtYXAgdG8gZHJhdyBpbiB0aGUgcmlnaHQgZnJpbmdlLiAqLworICAgICAgaWYgKFdJTkRP V19SSUdIVF9GUklOR0VfV0lEVEggKHcpID09IDApCisgICAgICAgIHJpZ2h0ID0gTUNfTk9fRlJJ TkdFX0JJVE1BUDsKKyAgICAgIGVsc2UgaWYgKHJvdy0+cmlnaHRfdXNlcl9mcmluZ2VfYml0bWFw ICE9IE1DX05PX0ZSSU5HRV9CSVRNQVApCisgICAgICAgIHsKKyAgICAgICAgICByaWdodCA9IHJv dy0+cmlnaHRfdXNlcl9mcmluZ2VfYml0bWFwOworICAgICAgICAgIHJpZ2h0X2ZhY2VfaWQgPSBy b3ctPnJpZ2h0X3VzZXJfZnJpbmdlX2ZhY2VfaWQ7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYg KCghcm93LT5yZXZlcnNlZF9wICYmIHJvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3ApCisgICAgICAg ICAgICAgICB8fCAocm93LT5yZXZlcnNlZF9wICYmIHJvdy0+dHJ1bmNhdGVkX29uX2xlZnRfcCkp CisgICAgICAgIHJpZ2h0ID0gTUNfUklHSFRfRlJJTkdFICgwLCBRdHJ1bmNhdGlvbiwgMCk7Cisg ICAgICBlbHNlIGlmIChyb3ctPmluZGljYXRlX2JvYl9wICYmIEVRIChib3VuZGFyeV90b3AsIFFy aWdodCkpCisgICAgICAgIHsKKyAgICAgICAgICByaWdodCA9ICgocm93LT5pbmRpY2F0ZV9lb2Jf cCAmJiBFUSAoYm91bmRhcnlfYm90LCBRcmlnaHQpKQorICAgICAgICAgICAgID8gTUNfUklHSFRf RlJJTkdFICgxLCBRdG9wX2JvdHRvbSwgdG9wX3Jvd19lbmRzX2F0X3p2X3ApCisgICAgICAgICAg ICAgOiBNQ19SSUdIVF9GUklOR0UgKDIsIFF0b3AsIDApKTsKKyAgICAgICAgICBpZiAodG9wX2lu ZF9taW5feSA+PSAwKQorICAgICAgICAgICAgcmlnaHRfb2Zmc2V0ID0gdG9wX2luZF9taW5feSAt IHJvdy0+eTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV9lb2JfcCAm JiBFUSAoYm91bmRhcnlfYm90LCBRcmlnaHQpKQorICAgICAgICB7CisgICAgICAgICAgcmlnaHQg PSBNQ19SSUdIVF9GUklOR0UgKDMsIFFib3R0b20sIGJvdF9yb3dfZW5kc19hdF96dl9wKTsKKyAg ICAgICAgICBpZiAoYm90X2luZF9tYXhfeSA+PSAwKQorICAgICAgICAgICAgcmlnaHRfb2Zmc2V0 ID0gYm90X2luZF9tYXhfeSAtIChyb3ctPnkgKyByb3ctPnZpc2libGVfaGVpZ2h0KTsKKyAgICAg ICAgfQorICAgICAgZWxzZSBpZiAoKCFyb3ctPnJldmVyc2VkX3AgJiYgcm93LT5jb250aW51ZWRf cCkKKyAgICAgICAgICAgICAgIHx8IChyb3ctPnJldmVyc2VkX3AgJiYgTUFUUklYX1JPV19DT05U SU5VQVRJT05fTElORV9QIChyb3cpKSkKKyAgICAgICAgcmlnaHQgPSBNQ19SSUdIVF9GUklOR0Ug KDQsIFFjb250aW51YXRpb24sIDApOworICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV90b3Bf bGluZV9wICYmIEVRIChhcnJvd190b3AsIFFyaWdodCkpCisgICAgICAgIHsKKyAgICAgICAgICBy aWdodCA9IE1DX1JJR0hUX0ZSSU5HRSAoNiwgUXVwLCAwKTsKKyAgICAgICAgICBpZiAodG9wX2lu ZF9taW5feSA+PSAwKQorICAgICAgICAgICAgcmlnaHRfb2Zmc2V0ID0gdG9wX2luZF9taW5feSAt IHJvdy0+eTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV9ib3R0b21f bGluZV9wICYmIEVRIChhcnJvd19ib3QsIFFyaWdodCkpCisgICAgICAgIHsKKyAgICAgICAgICBy aWdodCA9IE1DX1JJR0hUX0ZSSU5HRSAoNywgUWRvd24sIDApOworICAgICAgICAgIGlmIChib3Rf aW5kX21heF95ID49IDApCisgICAgICAgICAgICByaWdodF9vZmZzZXQgPSBib3RfaW5kX21heF95 IC0gKHJvdy0+eSArIHJvdy0+dmlzaWJsZV9oZWlnaHQpOworICAgICAgICB9CisgICAgICBlbHNl IGlmIChyb3ctPmluZGljYXRlX2VtcHR5X2xpbmVfcCAmJiBFUSAoZW1wdHlfcG9zLCBRcmlnaHQp KQorICAgICAgICByaWdodCA9IE1DX1JJR0hUX0ZSSU5HRSAoNSwgUWVtcHR5X2xpbmUsIDApOwor ICAgICAgZWxzZQorICAgICAgICByaWdodCA9IE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICBw ZXJpb2RpY19wID0gKGdldF9mcmluZ2VfYml0bWFwX2RhdGEgKGxlZnQpLT5wZXJpb2QgIT0gMAor ICAgICAgICAgICAgICAgICAgICB8fCBnZXRfZnJpbmdlX2JpdG1hcF9kYXRhIChyaWdodCktPnBl cmlvZCAhPSAwKTsKKyAgICAgIGlmIChyb3ctPnkgIT0gY3VyLT55CisgICAgICAgICAgfHwgcm93 LT52aXNpYmxlX2hlaWdodCAhPSBjdXItPnZpc2libGVfaGVpZ2h0CisgICAgICAgICAgfHwgcm93 LT5lbmRzX2F0X3p2X3AgIT0gY3VyLT5lbmRzX2F0X3p2X3AKKyAgICAgICAgICB8fCBsZWZ0ICE9 IGN1ci0+bGVmdF9mcmluZ2VfYml0bWFwCisgICAgICAgICAgfHwgcmlnaHQgIT0gY3VyLT5yaWdo dF9mcmluZ2VfYml0bWFwCisgICAgICAgICAgfHwgbGVmdF9mYWNlX2lkICE9IGN1ci0+bGVmdF9m cmluZ2VfZmFjZV9pZAorICAgICAgICAgIHx8IHJpZ2h0X2ZhY2VfaWQgIT0gY3VyLT5yaWdodF9m cmluZ2VfZmFjZV9pZAorICAgICAgICAgIHx8IGxlZnRfb2Zmc2V0ICE9IGN1ci0+bGVmdF9mcmlu Z2Vfb2Zmc2V0CisgICAgICAgICAgfHwgcmlnaHRfb2Zmc2V0ICE9IGN1ci0+cmlnaHRfZnJpbmdl X29mZnNldAorICAgICAgICAgIHx8IHBlcmlvZGljX3AgIT0gY3VyLT5mcmluZ2VfYml0bWFwX3Bl cmlvZGljX3AKKyAgICAgICAgICB8fCBjdXItPnJlZHJhd19mcmluZ2VfYml0bWFwc19wKQorICAg ICAgICB7CisgICAgICAgICAgcmVkcmF3X3AgPSAxLCByb3ctPnJlZHJhd19mcmluZ2VfYml0bWFw c19wID0gMTsKKyAgICAgICAgICBpZiAoIWtlZXBfY3VycmVudF9wKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBjdXItPnJlZHJhd19mcmluZ2VfYml0bWFwc19wID0gMTsKKyAgICAgICAg ICAgICAgaWYgKG1jX2xlZnRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQCisg ICAgICAgICAgICAgICAgICB8fCBtY19yaWdodF9mcmluZ2VfYml0bWFwICE9IE1DX05PX0ZSSU5H RV9CSVRNQVApCisgICAgICAgICAgICAgICAgY3VyLT5mcmluZ2VfYml0bWFwX3BlcmlvZGljX3Ag PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjdXItPmZy aW5nZV9iaXRtYXBfcGVyaW9kaWNfcCA9IHBlcmlvZGljX3A7CisgICAgICAgICAgICAgIGlmICht Y19sZWZ0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgICAg ICAgICBjdXItPmxlZnRfZnJpbmdlX2JpdG1hcCA9IG1jX2xlZnRfZnJpbmdlX2JpdG1hcDsKKyAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjdXItPmxlZnRfZnJpbmdlX2Jp dG1hcCA9IGxlZnQ7CisgICAgICAgICAgICAgIGlmIChtY19sZWZ0X2ZyaW5nZV9iaXRtYXAgIT0g TUNfTk9fRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICBjdXItPmxlZnRfZnJpbmdlX2Zh Y2VfaWQgPSBtY19sZWZ0X2ZyaW5nZV9mYWNlX2lkOworICAgICAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICAgIGN1ci0+bGVmdF9mcmluZ2VfZmFjZV9pZCA9IGxlZnRfZmFjZV9pZDsK KyAgICAgICAgICAgICAgaWYgKG1jX2xlZnRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19GUklOR0Vf QklUTUFQKQorICAgICAgICAgICAgICAgIGN1ci0+bGVmdF9mcmluZ2Vfb2Zmc2V0ID0gMDsKKyAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjdXItPmxlZnRfZnJpbmdlX29m ZnNldCA9IGxlZnRfb2Zmc2V0OworICAgICAgICAgICAgICBpZiAobWNfcmlnaHRfZnJpbmdlX2Jp dG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQKQorICAgICAgICAgICAgICAgIGN1ci0+cmlnaHRf ZnJpbmdlX2JpdG1hcCA9IG1jX3JpZ2h0X2ZyaW5nZV9iaXRtYXA7CisgICAgICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgICAgY3VyLT5yaWdodF9mcmluZ2VfYml0bWFwID0gcmlnaHQ7 CisgICAgICAgICAgICAgIGlmIChtY19yaWdodF9mcmluZ2VfYml0bWFwICE9IE1DX05PX0ZSSU5H RV9CSVRNQVApCisgICAgICAgICAgICAgICAgY3VyLT5yaWdodF9mcmluZ2VfZmFjZV9pZCA9IG1j X3JpZ2h0X2ZyaW5nZV9mYWNlX2lkOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICAgIGN1ci0+cmlnaHRfZnJpbmdlX2ZhY2VfaWQgPSByaWdodF9mYWNlX2lkOworICAgICAg ICAgICAgICBpZiAobWNfcmlnaHRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQ KQorICAgICAgICAgICAgICAgIGN1ci0+cmlnaHRfZnJpbmdlX29mZnNldCA9IDA7CisgICAgICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgY3VyLT5yaWdodF9mcmluZ2Vfb2Zmc2V0 ID0gcmlnaHRfb2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBpZiAocm93 LT5vdmVybGF5X2Fycm93X2JpdG1hcCA8IDApCisgICAgICAgIHJvdy0+b3ZlcmxheV9hcnJvd19i aXRtYXAgPSBtY19nZXRfbG9naWNhbF9mcmluZ2VfYml0bWFwICh3LCBRb3ZlcmxheV9hcnJvdywg MCwgMCk7CisgICAgICBpZiAocm93LT5vdmVybGF5X2Fycm93X2JpdG1hcCAhPSBjdXItPm92ZXJs YXlfYXJyb3dfYml0bWFwKQorICAgICAgICB7CisgICAgICAgICAgcmVkcmF3X3AgPSAxLCByb3ct PnJlZHJhd19mcmluZ2VfYml0bWFwc19wID0gMTsKKyAgICAgICAgICBpZiAoIWtlZXBfY3VycmVu dF9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjdXItPnJlZHJhd19mcmluZ2VfYml0 bWFwc19wID0gMTsKKyAgICAgICAgICAgICAgY3VyLT5vdmVybGF5X2Fycm93X2JpdG1hcCA9IHJv dy0+b3ZlcmxheV9hcnJvd19iaXRtYXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg IGlmIChtY19sZWZ0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJTkdFX0JJVE1BUAorICAgICAg ICAgIHx8IG1jX3JpZ2h0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJTkdFX0JJVE1BUCkKKyAg ICAgICAgcm93LT5mcmluZ2VfYml0bWFwX3BlcmlvZGljX3AgPSBmYWxzZTsKKyAgICAgICAgZWxz ZQorICAgICAgICAgIHJvdy0+ZnJpbmdlX2JpdG1hcF9wZXJpb2RpY19wID0gcGVyaW9kaWNfcDsK KyAgICAgIGlmIChtY19sZWZ0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJTkdFX0JJVE1BUCkK KyAgICAgICAgcm93LT5sZWZ0X2ZyaW5nZV9iaXRtYXAgPSBtY19sZWZ0X2ZyaW5nZV9iaXRtYXA7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICByb3ctPmxlZnRfZnJpbmdlX2JpdG1hcCA9IGxlZnQ7 CisgICAgICBpZiAobWNfbGVmdF9mcmluZ2VfYml0bWFwICE9IE1DX05PX0ZSSU5HRV9CSVRNQVAp CisgICAgICAgIHJvdy0+bGVmdF9mcmluZ2VfZmFjZV9pZCA9IG1jX2xlZnRfZnJpbmdlX2ZhY2Vf aWQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByb3ctPmxlZnRfZnJpbmdlX2ZhY2VfaWQgPSBs ZWZ0X2ZhY2VfaWQ7CisgICAgICBpZiAobWNfbGVmdF9mcmluZ2VfYml0bWFwICE9IE1DX05PX0ZS SU5HRV9CSVRNQVApCisgICAgICAgIHJvdy0+bGVmdF9mcmluZ2Vfb2Zmc2V0ID0gMDsKKyAgICAg ICAgZWxzZQorICAgICAgICAgIHJvdy0+bGVmdF9mcmluZ2Vfb2Zmc2V0ID0gbGVmdF9vZmZzZXQ7 CisgICAgICBpZiAobWNfcmlnaHRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQ KQorICAgICAgICByb3ctPnJpZ2h0X2ZyaW5nZV9iaXRtYXAgPSBtY19yaWdodF9mcmluZ2VfYml0 bWFwOworICAgICAgICBlbHNlCisgICAgICAgICAgcm93LT5yaWdodF9mcmluZ2VfYml0bWFwID0g cmlnaHQ7CisgICAgICBpZiAobWNfcmlnaHRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19GUklOR0Vf QklUTUFQKQorICAgICAgICByb3ctPnJpZ2h0X2ZyaW5nZV9mYWNlX2lkID0gbWNfcmlnaHRfZnJp bmdlX2ZhY2VfaWQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByb3ctPnJpZ2h0X2ZyaW5nZV9m YWNlX2lkID0gcmlnaHRfZmFjZV9pZDsKKyAgICAgIGlmIChtY19yaWdodF9mcmluZ2VfYml0bWFw ICE9IE1DX05PX0ZSSU5HRV9CSVRNQVApCisgICAgICAgIHJvdy0+cmlnaHRfZnJpbmdlX29mZnNl dCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByb3ctPnJpZ2h0X2ZyaW5nZV9vZmZzZXQg PSByaWdodF9vZmZzZXQ7CisgICAgfQorICByZXR1cm4gcmVkcmF3X3AgJiYgIWtlZXBfY3VycmVu dF9wOworfQorCitzdGF0aWMgTGlzcF9PYmplY3QgKmZyaW5nZV9mYWNlczsKKworLyogRHJhdyB0 aGUgYml0bWFwIFdISUNIIGluIG9uZSBvZiB0aGUgbGVmdCBvciByaWdodCBmcmluZ2VzIG9mCisg ICB3aW5kb3cgVy4gIFJPVyBpcyB0aGUgZ2x5cGggcm93IGZvciB3aGljaCB0byBkaXNwbGF5IHRo ZSBiaXRtYXA7IGl0CisgICBkZXRlcm1pbmVzIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBhdCB3aGlj aCB0aGUgYml0bWFwIGhhcyB0byBiZQorICAgZHJhd24uCisgICBMRUZUX1AgaXMgMSBmb3IgbGVm dCBmcmluZ2UsIDAgZm9yIHJpZ2h0IGZyaW5nZS4KKyovCitzdGF0aWMgdm9pZAorbWNfZHJhd19m cmluZ2VfYml0bWFwXzEgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywg aW50IGxlZnRfcCwgaW50IG92ZXJsYXksIGludCB3aGljaCkKK3sKKyAgc3RydWN0IGZyYW1lICpm ID0gWEZSQU1FIChXSU5ET1dfRlJBTUUgKHcpKTsKKyAgc3RydWN0IGRyYXdfZnJpbmdlX2JpdG1h cF9wYXJhbXMgcDsKKyAgc3RydWN0IGZyaW5nZV9iaXRtYXAgKmZiOworICBpbnQgcGVyaW9kOwor ICBpbnQgZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgaW50IG9mZnNldCwgaGVhZGVyX2xp bmVfaGVpZ2h0OworICBwLm92ZXJsYXlfcCA9IChvdmVybGF5ICYgMSkgPT0gMTsKKyAgcC5jdXJz b3JfcCA9IChvdmVybGF5ICYgMikgPT0gMjsKKyAgaWYgKHdoaWNoICE9IE1DX05PX0ZSSU5HRV9C SVRNQVApCisgICAgeworICAgICAgb2Zmc2V0ID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAobGVm dF9wKQorICAgICAgeworICAgICAgICB3aGljaCA9IHJvdy0+bGVmdF9mcmluZ2VfYml0bWFwOwor ICAgICAgICBmYWNlX2lkID0gcm93LT5sZWZ0X2ZyaW5nZV9mYWNlX2lkOworICAgICAgICBvZmZz ZXQgPSByb3ctPmxlZnRfZnJpbmdlX29mZnNldDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAg ICAgeworICAgICAgICAgIHdoaWNoID0gcm93LT5yaWdodF9mcmluZ2VfYml0bWFwOworICAgICAg ICAgIGZhY2VfaWQgPSByb3ctPnJpZ2h0X2ZyaW5nZV9mYWNlX2lkOworICAgICAgICAgIG9mZnNl dCA9IHJvdy0+cmlnaHRfZnJpbmdlX29mZnNldDsKKyAgICAgICAgfQorICBpZiAoZmFjZV9pZCA9 PSBERUZBVUxUX0ZBQ0VfSUQpCisgICAgeworICAgICAgTGlzcF9PYmplY3QgZmFjZSA9IGZyaW5n ZV9mYWNlc1t3aGljaF07CisgICAgICBmYWNlX2lkID0gTklMUCAoZmFjZSkgPyBsb29rdXBfbmFt ZWRfZmFjZSAodywgZiwgUWZyaW5nZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiBsb29rdXBfZGVyaXZlZF9mYWNlICh3LCBmLCBmYWNlLCBGUklOR0VfRkFDRV9JRCwgMCk7 CisgICAgICBpZiAoZmFjZV9pZCA8IDApCisgICAgICAgIGZhY2VfaWQgPSBGUklOR0VfRkFDRV9J RDsKKyAgICB9CisgIGZiID0gZ2V0X2ZyaW5nZV9iaXRtYXBfZGF0YSAod2hpY2gpOworICBwZXJp b2QgPSBmYi0+cGVyaW9kOworICAvKiBDb252ZXJ0IHJvdyB0byBmcmFtZSBjb29yZGluYXRlcy4g Ki8KKyAgcC55ID0gV0lORE9XX1RPX0ZSQU1FX1BJWEVMX1kgKHcsIHJvdy0+eSkgKyBvZmZzZXQ7 CisgIHAud2hpY2ggPSB3aGljaDsKKyAgcC5iaXRzID0gZmItPmJpdHM7CisgIHAud2QgPSBmYi0+ d2lkdGg7CisgIHAuaCA9IGZiLT5oZWlnaHQ7CisgIHAuZGggPSAocGVyaW9kID4gMCA/IChwLnkg JSBwZXJpb2QpIDogMCk7CisgIHAuaCAtPSBwLmRoOworICAvKiBBZGp1c3QgeSB0byB0aGUgb2Zm c2V0IGluIHRoZSByb3cgdG8gc3RhcnQgZHJhd2luZyB0aGUgYml0bWFwLiAqLworICBzd2l0Y2gg KGZiLT5hbGlnbikKKyAgICB7CisgICAgY2FzZSBBTElHTl9CSVRNQVBfQ0VOVEVSOgorICAgICAg cC55ICs9IChyb3ctPmhlaWdodCAtIHAuaCkgLyAyOworICAgICAgYnJlYWs7CisgICAgY2FzZSBB TElHTl9CSVRNQVBfQk9UVE9NOgorICAgICAgcC55ICs9IChyb3ctPnZpc2libGVfaGVpZ2h0IC0g cC5oKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQUxJR05fQklUTUFQX1RPUDoKKyAgICAgIGJy ZWFrOworICAgIH0KKyAgcC5mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBmYWNlX2lkKTsKKyAgaWYg KHAuZmFjZSA9PSBOVUxMKQorICAgIHsKKyAgICAgIC8qIFRoaXMgY291bGQgaGFwcGVuIGFmdGVy IGNsZWFyaW5nIGZhY2UgY2FjaGUuCisgICAgICBCdXQgaXQgc2hvdWxkbid0IGhhcHBlbiBhbnlt b3JlLiAgKytrZnMgKi8KKyAgICAgIHJldHVybjsKKyAgICB9CisgIHByZXBhcmVfZmFjZV9mb3Jf ZGlzcGxheSAoZiwgcC5mYWNlKTsKKyAgLyogQ2xlYXIgbGVmdCBmcmluZ2UgaWYgbm8gYml0bWFw IHRvIGRyYXcgb3IgaWYgYml0bWFwIGRvZXNuJ3QgZmlsbAorICAgICB0aGUgZnJpbmdlLiAqLwor ICBwLmJ4ID0gLTE7CisgIGhlYWRlcl9saW5lX2hlaWdodCA9IFdJTkRPV19IRUFERVJfTElORV9I RUlHSFQgKHcpOworICBwLmJ5ID0gV0lORE9XX1RPX0ZSQU1FX1BJWEVMX1kgKHcsIG1heCAoaGVh ZGVyX2xpbmVfaGVpZ2h0LCByb3ctPnkpKTsKKyAgcC5ueSA9IHJvdy0+dmlzaWJsZV9oZWlnaHQ7 CisgIGlmIChsZWZ0X3ApCisgICAgeworICAgICAgaW50IHdkID0gV0lORE9XX0xFRlRfRlJJTkdF X1dJRFRIICh3KTsKKyAgICAgIGludCB4ID0gd2luZG93X2JveF9sZWZ0ICh3LCAoV0lORE9XX0hB U19GUklOR0VTX09VVFNJREVfTUFSR0lOUyAodykKKyAgICAgICAgICAgPyBMRUZUX01BUkdJTl9B UkVBCisgICAgICAgICAgIDogVEVYVF9BUkVBKSk7CisgICAgICBpZiAocC53ZCA+IHdkKQorICAg ICAgICBwLndkID0gd2Q7CisgICAgICBwLnggPSB4IC0gcC53ZCAtICh3ZCAtIHAud2QpIC8gMjsK KyAgICAgIGlmIChwLndkIDwgd2QgfHwgcC55ID4gcC5ieSB8fCBwLnkgKyBwLmggPCBwLmJ5ICsg cC5ueSkKKyAgICAgICAgeworICAgICAgICAgIC8qIElmIFcgaGFzIGEgdmVydGljYWwgYm9yZGVy IHRvIGl0cyBsZWZ0LCBkb24ndCBkcmF3IG92ZXIgaXQuICovCisgICAgICAgICAgd2QgLT0gKCgh V0lORE9XX0xFRlRNT1NUX1AgKHcpCisgICAgICAgICAgICAvKiBUaGlzIGNvdWxkIGJlIHdyb25n IHdoZW4gd2UgYWxsb3cgd2luZG93IGxvY2FsCisgICAgICAgICAgICAgICByaWdodCBkaXZpZGVy cyAtIGJ1dCB0aGUgd2luZG93IG9uIHRoZSBsZWZ0IGlzIGhhcmQKKyAgICAgICAgICAgICAgIHRv IGdldC4gKi8KKyAgICAgICAgICAgICYmICFGUkFNRV9SSUdIVF9ESVZJREVSX1dJRFRIIChmKQor ICAgICAgICAgICAgJiYgIVdJTkRPV19IQVNfVkVSVElDQUxfU0NST0xMX0JBUiAodykKKyAgICAg ICAgICAgIC8qIEJ1dCBkb24ndCByZWR1Y2UgdGhlIGZyaW5nZSB3aWR0aCBpZiB0aGUgd2luZG93 CisgICAgICAgICAgICAgICBoYXMgYSBsZWZ0IG1hcmdpbiwgYmVjYXVzZSB0aGF0IG1lYW5zIHdl IGFyZSBub3QKKyAgICAgICAgICAgICAgIGluIGRhbmdlciBvZiBkcmF3aW5nIG92ZXIgdGhlIHZl cnRpY2FsIGJvcmRlciwKKyAgICAgICAgICAgICAgIGFuZCBPVE9IIGxlYXZpbmcgb3V0IHRoYXQg b25lIHBpeGVsIGxlYXZlcyBiZWhpbmQKKyAgICAgICAgICAgICAgIHRyYWNlcyBvZiB0aGUgY3Vy c29yLCBpZiBpdCB3YXMgaW4gY29sdW1uIHplcm8KKyAgICAgICAgICAgICAgIGJlZm9yZSBkcmF3 aW5nIG5vbi1lbXB0eSBtYXJnaW4gYXJlYS4gKi8KKyAgICAgICAgICAgICYmIHctPmxlZnRfbWFy Z2luX2NvbHMgPT0gMCkKKyAgICAgICAgICAgPyAxIDogMCk7CisgICAgICAgICAgcC5ieCA9IHgg LSB3ZDsKKyAgICAgICAgICBwLm54ID0gd2Q7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICBpbnQgeCA9IHdpbmRvd19ib3hfcmlnaHQgKHcsCisgICAgICAgIChXSU5ET1df SEFTX0ZSSU5HRVNfT1VUU0lERV9NQVJHSU5TICh3KQorICAgICAgICAgPyBSSUdIVF9NQVJHSU5f QVJFQQorICAgICAgICAgOiBURVhUX0FSRUEpKTsKKyAgICAgIGludCB3ZCA9IFdJTkRPV19SSUdI VF9GUklOR0VfV0lEVEggKHcpOworICAgICAgaWYgKHAud2QgPiB3ZCkKKyAgICAgICAgcC53ZCA9 IHdkOworICAgICAgcC54ID0geCArICh3ZCAtIHAud2QpIC8gMjsKKyAgICAgIC8qIENsZWFyIHJp Z2h0IGZyaW5nZSBpZiBubyBiaXRtYXAgdG8gZHJhdyBvZiBpZiBiaXRtYXAgZG9lc24ndCBmaWxs CisgICB0aGUgZnJpbmdlLiAqLworICAgICAgaWYgKHAud2QgPCB3ZCB8fCBwLnkgPiBwLmJ5IHx8 IHAueSArIHAuaCA8IHAuYnkgKyBwLm55KQorICAgICAgICB7CisgICAgICAgICAgcC5ieCA9IHg7 CisgICAgICAgICAgcC5ueCA9IHdkOworICAgICAgICB9CisgICAgfQorICBpZiAocC54ID49IFdJ TkRPV19CT1hfTEVGVF9FREdFX1ggKHcpCisgICAgICAmJiAocC54ICsgcC53ZCkgPD0gV0lORE9X X0JPWF9MRUZUX0VER0VfWCAodykgKyBXSU5ET1dfUElYRUxfV0lEVEggKHcpKQorICAgIEZSQU1F X1JJRiAoZiktPmRyYXdfZnJpbmdlX2JpdG1hcCAodywgcm93LCAmcCk7Cit9CisKK3ZvaWQKK21j X2RyYXdfZnJpbmdlX2JpdG1hcCAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX3JvdyAq cm93LCBpbnQgbGVmdF9wLCBlbnVtIG1jX2N1cnNvcl90eXBlIGN1cnNvcl90eXBlKQoreworICBp bnQgb3ZlcmxheSA9IDA7CisgIGlmIChsZWZ0X3AgPT0gcm93LT5yZXZlcnNlZF9wICYmIHJvdy0+ Y3Vyc29yX2luX2ZyaW5nZV9wKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IGN1cnNvciA9IFFu aWw7CisgICAgICBzd2l0Y2ggKGN1cnNvcl90eXBlKQorICAgICAgICB7CisgICAgICAgIGNhc2Ug TUNfRlJBTUVEX0JPWDoKKyAgICAgICAgICBpZiAocm93LT52aXNpYmxlX2hlaWdodCA+PSBTVEFO REFSRF9CSVRNQVBfSEVJR0hUIChob2xsb3dfcmVjdGFuZ2xlX2JpdHMpKQorICAgICAgICAgICAg Y3Vyc29yID0gUWhvbGxvdzsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBjdXJzb3IgPSBR aG9sbG93X3NtYWxsOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1DX0hPTExPV19C T1g6CisgICAgICAgICAgaWYgKHJvdy0+dmlzaWJsZV9oZWlnaHQgPj0gU1RBTkRBUkRfQklUTUFQ X0hFSUdIVCAoaG9sbG93X3JlY3RhbmdsZV9iaXRzKSkKKyAgICAgICAgICAgIGN1cnNvciA9IFFo b2xsb3c7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgY3Vyc29yID0gUWhvbGxvd19zbWFs bDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNQ19GSUxMRURfQk9YOgorICAgICAg ICAgIGN1cnNvciA9IFFib3g7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTUNfQkFS OgorICAgICAgICAgIGN1cnNvciA9IFFiYXI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh c2UgTUNfSEJBUjoKKyAgICAgICAgICBjdXJzb3IgPSBRaGJhcjsKKyAgICAgICAgICBicmVhazsK KyAgICAgICAgY2FzZSBNQ19OT19GUklOR0VfQklUTUFQOgorICAgICAgICBjYXNlIE1DX05PX0NV UlNPUjoKKyAgICAgICAgY2FzZSBNQ19SSUdIVF9GUklOR0VfQklUTUFQOgorICAgICAgICBjYXNl IE1DX0xFRlRfRlJJTkdFX0JJVE1BUDoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICB3LT5w aHlzX2N1cnNvcl9vbl9wID0gMDsKKyAgICAgICAgICByb3ctPmN1cnNvcl9pbl9mcmluZ2VfcCA9 IDA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGlmICghTklMUCAoY3Vyc29y KSkKKyAgICAgICAgeworICAgICAgICAgIGludCBibSA9IG1jX2dldF9sb2dpY2FsX2N1cnNvcl9i aXRtYXAgKHcsIGN1cnNvcik7CisgICAgICAgICAgaWYgKGJtICE9IE1DX05PX0ZSSU5HRV9CSVRN QVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1jX2RyYXdfZnJpbmdlX2JpdG1hcF8x ICh3LCByb3csIGxlZnRfcCwgMiwgYm0pOworICAgICAgICAgICAgICBvdmVybGF5ID0gRVEgKGN1 cnNvciwgUWJveCkgPyAzIDogMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg bWNfZHJhd19mcmluZ2VfYml0bWFwXzEgKHcsIHJvdywgbGVmdF9wLCBvdmVybGF5LCBNQ19OT19G UklOR0VfQklUTUFQKTsKKyAgaWYgKGxlZnRfcCAmJiByb3ctPm92ZXJsYXlfYXJyb3dfYml0bWFw ICE9IE1DX05PX0ZSSU5HRV9CSVRNQVApCisgICAgbWNfZHJhd19mcmluZ2VfYml0bWFwXzEgKHcs IHJvdywgMSwgMSwgcm93LT5vdmVybGF5X2Fycm93X2JpdG1hcCk7Cit9CisKKy8qIGVuZCBNVUxU SVBMRS1DVVJTT1JTICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAjZGVmaW5lIE5P X0ZSSU5HRV9CSVRNQVAgMAogI2RlZmluZSBVTkRFRl9GUklOR0VfQklUTUFQIDEKICNkZWZpbmUg TUFYX1NUQU5EQVJEX0ZSSU5HRV9CSVRNQVBTIEFSUkFZRUxUUyAoc3RhbmRhcmRfYml0bWFwcykK QEAgLTE2OTksNiArMzIxNywxNjggQEAgUmV0dXJuIG5pbCBpZiBQT1MgaXMgbm90IHZpc2libGUg aW4gV0lORE9XLiAgKi8pCiB2b2lkCiBzeW1zX29mX2ZyaW5nZSAodm9pZCkKIHsKKworCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKy8qIGJlZ2luIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAv KiAoZ2V0ICdlbXB0eS1saW5lICdmcmluZ2UpID0+IDIzID0+IHRoZSBsYXN0IHN0YW5kYXJkLWJp dG1hcCBiZWZvcmUgdGhpcyBvbmUuCisgIFNlZSBgZnJpbmdlLmVsYC4gKi8KKworICAvKiAyNCAq LworICBERUZTWU0gKFFtY192ZXJ0aWNhbF9iYXJfcmlnaHRfYXJyb3csICIrLXZlcnRpY2FsLWJh ci1yaWdodC1hcnJvdyIpOworICBWZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX3ZlcnRpY2Fs X2Jhcl9yaWdodF9hcnJvdywgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3ZlcnRpY2Fs X2Jhcl9yaWdodF9hcnJvdywgUWZyaW5nZSwgbWFrZV9maXhudW0gKDI0KSk7CisgIC8qIChnZXQg JystdmVydGljYWwtYmFyLXJpZ2h0LWFycm93ICdmcmluZ2UpID0+IDI0ICovCisKKyAgLyogMjUg Ki8KKyAgREVGU1lNIChRbWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93LCAiKy1y ZXZlcnNlZC12ZXJ0aWNhbC1iYXItcmlnaHQtYXJyb3ciKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0g RmNvbnMgKFFtY19yZXZlcnNlZF92ZXJ0aWNhbF9iYXJfcmlnaHRfYXJyb3csIFZmcmluZ2VfYml0 bWFwcyk7CisgIEZwdXQgKFFtY19yZXZlcnNlZF92ZXJ0aWNhbF9iYXJfcmlnaHRfYXJyb3csIFFm cmluZ2UsIG1ha2VfZml4bnVtICgyNSkpOworICAvKiAoZ2V0ICcrLXJldmVyc2VkLXZlcnRpY2Fs LWJhci1yaWdodC1hcnJvdyAnZnJpbmdlKSA9PiAyNSAqLworCisgIC8qIDI2ICovCisgIERFRlNZ TSAoUW1jX2hvbGxvd19yZWN0YW5nbGVfcmlnaHRfYXJyb3csICIrLWhvbGxvdy1yZWN0YW5nbGUt cmlnaHQtYXJyb3ciKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19ob2xsb3dfcmVj dGFuZ2xlX3JpZ2h0X2Fycm93LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfaG9sbG93 X3JlY3RhbmdsZV9yaWdodF9hcnJvdywgUWZyaW5nZSwgbWFrZV9maXhudW0gKDI2KSk7CisgIC8q IChnZXQgJystaG9sbG93LXJlY3RhbmdsZS1yaWdodC1hcnJvdyAnZnJpbmdlKSA9PiAyNiAqLwor CisgIC8qIDI3ICovCisgIERFRlNZTSAoUW1jX3JldmVyc2VkX2hvbGxvd19yZWN0YW5nbGVfcmln aHRfYXJyb3csICIrLXJldmVyc2VkLWhvbGxvdy1yZWN0YW5nbGUtcmlnaHQtYXJyb3ciKTsKKyAg VmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19yZXZlcnNlZF9ob2xsb3dfcmVjdGFuZ2xlX3Jp Z2h0X2Fycm93LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfcmV2ZXJzZWRfaG9sbG93 X3JlY3RhbmdsZV9yaWdodF9hcnJvdywgUWZyaW5nZSwgbWFrZV9maXhudW0gKDI3KSk7CisgIC8q IChnZXQgJystcmV2ZXJzZWQtaG9sbG93LXJlY3RhbmdsZS1yaWdodC1hcnJvdyAnZnJpbmdlKSA9 PiAyNyAqLworCisgIC8qIDI4ICovCisgIERFRlNZTSAoUW1jX2hvbGxvd19yZWN0YW5nbGUsICIr LWhvbGxvdy1yZWN0YW5nbGUiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19ob2xs b3dfcmVjdGFuZ2xlLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfaG9sbG93X3JlY3Rh bmdsZSwgUWZyaW5nZSwgbWFrZV9maXhudW0gKDI4KSk7CisgIC8qIChnZXQgJystaG9sbG93LXJl Y3RhbmdsZSAnZnJpbmdlKSA9PiAyOCAqLworCisgIC8qIDI5ICovCisgIERFRlNZTSAoUW1jX3Zl cnRpY2FsX2JhciwgIistdmVydGljYWwtYmFyIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25z IChRbWNfdmVydGljYWxfYmFyLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfdmVydGlj YWxfYmFyLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMjkpKTsKKyAgLyogKGdldCAnKy12ZXJ0aWNh bC1iYXIgJ2ZyaW5nZSkgPT4gMjkgKi8KKworICAvKiAzMCAqLworICBERUZTWU0gKFFtY19yZXZl cnNlZF92ZXJ0aWNhbF9iYXIsICIrLXJldmVyc2VkLXZlcnRpY2FsLWJhciIpOworICBWZnJpbmdl X2JpdG1hcHMgPSBGY29ucyAoUW1jX3JldmVyc2VkX3ZlcnRpY2FsX2JhciwgVmZyaW5nZV9iaXRt YXBzKTsKKyAgRnB1dCAoUW1jX3JldmVyc2VkX3ZlcnRpY2FsX2JhciwgUWZyaW5nZSwgbWFrZV9m aXhudW0gKDMwKSk7CisgIC8qIChnZXQgJystcmV2ZXJzZWQtdmVydGljYWwtYmFyICdmcmluZ2Up ID0+IDMwICovCisKKyAgLyogMzEgKi8KKyAgREVGU1lNIChRbWNfYmFja3NsYXNoLCAiKy1iYWNr c2xhc2giKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19iYWNrc2xhc2gsIFZmcmlu Z2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY19iYWNrc2xhc2gsIFFmcmluZ2UsIG1ha2VfZml4bnVt ICgzMSkpOworICAvKiAoZ2V0ICcrLWJhY2tzbGFzaCAnZnJpbmdlKSA9PiAzMSAqLworCisgIC8q IDMyICovCisgIERFRlNZTSAoUW1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xhc2gsICIrLXZlcnRpY2Fs LWJhci1iYWNrc2xhc2giKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY192ZXJ0aWNh bF9iYXJfYmFja3NsYXNoLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfdmVydGljYWxf YmFyX2JhY2tzbGFzaCwgUWZyaW5nZSwgbWFrZV9maXhudW0gKDMyKSk7CisgIC8qIChnZXQgJyst dmVydGljYWwtYmFyLWJhY2tzbGFzaCAnZnJpbmdlKSA9PiAzMiAqLworCisgIC8qIDMzICovCisg IERFRlNZTSAoUW1jX3BpbGNyb3csICIrLXBpbGNyb3ciKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0g RmNvbnMgKFFtY19waWxjcm93LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfcGlsY3Jv dywgUWZyaW5nZSwgbWFrZV9maXhudW0gKDMzKSk7CisgIC8qIChnZXQgJystcGlsY3JvdyAnZnJp bmdlKSA9PiAzMyAqLworCisgIC8qIDM0ICovCisgIERFRlNZTSAoUW1jX3NtaWxleV9mYWNlLCAi Ky1zbWlsZXktZmFjZSIpOworICBWZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX3NtaWxleV9m YWNlLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfc21pbGV5X2ZhY2UsIFFmcmluZ2Us IG1ha2VfZml4bnVtICgzNCkpOworICAvKiAoZ2V0ICcrLXNtaWxleS1mYWNlICdmcmluZ2UpID0+ IDM0ICovCisKKyAgLyogMzUgKi8KKyAgREVGU1lNIChRbWNfc2luZ2xlX2FuZ2xlX3JpZ2h0LCAi Ky1zaW5nbGUtYW5nbGUtcmlnaHQiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19z aW5nbGVfYW5nbGVfcmlnaHQsIFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY19zaW5nbGVf YW5nbGVfcmlnaHQsIFFmcmluZ2UsIG1ha2VfZml4bnVtICgzNSkpOworICAvKiAoZ2V0ICcrLXJp Z2h0LXNpbmdsZS1hbmdsZSAnZnJpbmdlKSA9PiAzNSAqLworCisgIC8qIDM2ICovCisgIERFRlNZ TSAoUW1jX3NpbmdsZV9hbmdsZV9sZWZ0LCAiKy1zaW5nbGUtYW5nbGUtbGVmdCIpOworICBWZnJp bmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX3NpbmdsZV9hbmdsZV9sZWZ0LCBWZnJpbmdlX2JpdG1h cHMpOworICBGcHV0IChRbWNfc2luZ2xlX2FuZ2xlX2xlZnQsIFFmcmluZ2UsIG1ha2VfZml4bnVt ICgzNikpOworICAvKiAoZ2V0ICcrLWxlZnQtZG91YmxlLWFuZ2xlICdmcmluZ2UpID0+IDM2ICov CisKKyAgLyogMzcgKi8KKyAgREVGU1lNIChRbWNfZG91YmxlX2FuZ2xlX3JpZ2h0LCAiKy1kb3Vi bGUtYW5nbGUtcmlnaHQiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19kb3VibGVf YW5nbGVfcmlnaHQsIFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY19kb3VibGVfYW5nbGVf cmlnaHQsIFFmcmluZ2UsIG1ha2VfZml4bnVtICgzNykpOworICAvKiAoZ2V0ICcrLXJpZ2h0LWRv dWJsZS1hbmdsZSAnZnJpbmdlKSA9PiAzNyAqLworCisgIC8qIDM4ICovCisgIERFRlNZTSAoUW1j X2RvdWJsZV9hbmdsZV9sZWZ0LCAiKy1kb3VibGUtYW5nbGUtbGVmdCIpOworICBWZnJpbmdlX2Jp dG1hcHMgPSBGY29ucyAoUW1jX2RvdWJsZV9hbmdsZV9sZWZ0LCBWZnJpbmdlX2JpdG1hcHMpOwor ICBGcHV0IChRbWNfZG91YmxlX2FuZ2xlX2xlZnQsIFFmcmluZ2UsIG1ha2VfZml4bnVtICgzOCkp OworICAvKiAoZ2V0ICcrLWxlZnQtZG91YmxlLWFuZ2xlICdmcmluZ2UpID0+IDM4ICovCisKKyAg LyogMzkgKi8KKyAgREVGU1lNIChRbWNfdHJpcGxlX2FuZ2xlX3JpZ2h0LCAiKy10cmlwbGUtYW5n bGUtcmlnaHQiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY190cmlwbGVfYW5nbGVf cmlnaHQsIFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY190cmlwbGVfYW5nbGVfcmlnaHQs IFFmcmluZ2UsIG1ha2VfZml4bnVtICgzOSkpOworICAvKiAoZ2V0ICcrLXRyaXBsZS1hbmdsZS1y aWdodCAnZnJpbmdlKSA9PiAzOSAqLworCisgIC8qIDQwICovCisgIERFRlNZTSAoUW1jX3RyaXBs ZV9hbmdsZV9sZWZ0LCAiKy10cmlwbGUtYW5nbGUtbGVmdCIpOworICBWZnJpbmdlX2JpdG1hcHMg PSBGY29ucyAoUW1jX3RyaXBsZV9hbmdsZV9sZWZ0LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0 IChRbWNfdHJpcGxlX2FuZ2xlX2xlZnQsIFFmcmluZ2UsIG1ha2VfZml4bnVtICg0MCkpOworICAv KiAoZ2V0ICcrLXRyaXBsZS1hbmdsZS1sZWZ0ICdmcmluZ2UpID0+IDQwICovCisKKyAgLyogNDEg Ki8KKyAgREVGU1lNIChRbWNfc2luZ2xlX2FuZ2xlX3VwLCAiKy1zaW5nbGUtYW5nbGUtdXAiKTsK KyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19zaW5nbGVfYW5nbGVfdXAsIFZmcmluZ2Vf Yml0bWFwcyk7CisgIEZwdXQgKFFtY19zaW5nbGVfYW5nbGVfdXAsIFFmcmluZ2UsIG1ha2VfZml4 bnVtICg0MSkpOworICAvKiAoZ2V0ICcrLXNpbmdsZS1hbmdsZS11cCAnZnJpbmdlKSA9PiA0MSAq LworCisgIC8qIDQyICovCisgIERFRlNZTSAoUW1jX3NpbmdsZV9hbmdsZV9kb3duLCAiKy1zaW5n bGUtYW5nbGUtZG93biIpOworICBWZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX3NpbmdsZV9h bmdsZV9kb3duLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfc2luZ2xlX2FuZ2xlX2Rv d24sIFFmcmluZ2UsIG1ha2VfZml4bnVtICg0MikpOworICAvKiAoZ2V0ICcrLXNpbmdsZS1hbmds ZS1kb3duICdmcmluZ2UpID0+IDQyICovCisKKyAgLyogNDMgKi8KKyAgREVGU1lNIChRbWNfZG91 YmxlX2FuZ2xlX3VwLCAiKy1kb3VibGUtYW5nbGUtdXAiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0g RmNvbnMgKFFtY19kb3VibGVfYW5nbGVfdXAsIFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFt Y19kb3VibGVfYW5nbGVfdXAsIFFmcmluZ2UsIG1ha2VfZml4bnVtICg0MykpOworICAvKiAoZ2V0 ICcrLWRvdWJsZS1hbmdsZS11cCAnZnJpbmdlKSA9PiA0MyAqLworCisgIC8qIDQ0ICovCisgIERF RlNZTSAoUW1jX2RvdWJsZV9hbmdsZV9kb3duLCAiKy1kb3VibGUtYW5nbGUtZG93biIpOworICBW ZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX2RvdWJsZV9hbmdsZV9kb3duLCBWZnJpbmdlX2Jp dG1hcHMpOworICBGcHV0IChRbWNfZG91YmxlX2FuZ2xlX2Rvd24sIFFmcmluZ2UsIG1ha2VfZml4 bnVtICg0NCkpOworICAvKiAoZ2V0ICcrLWRvdWJsZS1hbmdsZS1kb3duICdmcmluZ2UpID0+IDQ0 ICovCisKKyAgLyogNDUgKi8KKyAgREVGU1lNIChRbWNfdHJpcGxlX2FuZ2xlX3VwLCAiKy10cmlw bGUtYW5nbGUtdXAiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY190cmlwbGVfYW5n bGVfdXAsIFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY190cmlwbGVfYW5nbGVfdXAsIFFm cmluZ2UsIG1ha2VfZml4bnVtICg0NSkpOworICAvKiAoZ2V0ICcrLXRyaXBsZS1hbmdsZS11cCAn ZnJpbmdlKSA9PiA0NSAqLworCisgIC8qIDQ2ICovCisgIERFRlNZTSAoUW1jX3RyaXBsZV9hbmds ZV9kb3duLCAiKy10cmlwbGUtYW5nbGUtZG93biIpOworICBWZnJpbmdlX2JpdG1hcHMgPSBGY29u cyAoUW1jX3RyaXBsZV9hbmdsZV9kb3duLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNf dHJpcGxlX2FuZ2xlX2Rvd24sIFFmcmluZ2UsIG1ha2VfZml4bnVtICg0NikpOworICAvKiAoZ2V0 ICcrLXRyaXBsZS1hbmdsZS1kb3duICdmcmluZ2UpID0+IDQ2ICovCisKKyAgLyogNDcgKi8KKyAg REVGU1lNIChRbWNfcXVhZHJ1cGxlX2FuZ2xlX3VwLCAiKy1xdWFkcnVwbGUtYW5nbGUtdXAiKTsK KyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19xdWFkcnVwbGVfYW5nbGVfdXAsIFZmcmlu Z2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY19xdWFkcnVwbGVfYW5nbGVfdXAsIFFmcmluZ2UsIG1h a2VfZml4bnVtICg0NykpOworICAvKiAoZ2V0ICcrLXF1YWRydXBsZS1hbmdsZS11cCAnZnJpbmdl KSA9PiA0NyAqLworCisgIC8qIDQ4ICovCisgIERFRlNZTSAoUW1jX3F1YWRydXBsZV9hbmdsZV9k b3duLCAiKy1xdWFkcnVwbGUtYW5nbGUtZG93biIpOworICBWZnJpbmdlX2JpdG1hcHMgPSBGY29u cyAoUW1jX3F1YWRydXBsZV9hbmdsZV9kb3duLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChR bWNfcXVhZHJ1cGxlX2FuZ2xlX2Rvd24sIFFmcmluZ2UsIG1ha2VfZml4bnVtICg0OCkpOworICAv KiAoZ2V0ICcrLXF1YWRydXBsZS1hbmdsZS1kb3duICdmcmluZ2UpID0+IDQ4ICovCisKKy8qIGVu ZCBNVUxUSVBMRS1DVVJTT1JTICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIERF RlNZTSAoUXRydW5jYXRpb24sICJ0cnVuY2F0aW9uIik7CiAgIERFRlNZTSAoUWNvbnRpbnVhdGlv biwgImNvbnRpbnVhdGlvbiIpOwogICBERUZTWU0gKFFvdmVybGF5X2Fycm93LCAib3ZlcmxheS1h cnJvdyIpOwpkaWZmIC0tZ2l0IGEvc3JjL25zdGVybS5oIGIvc3JjL25zdGVybS5oCmluZGV4IDk3 NzNlYjMuLmUzNGExMTYgMTAwNjQ0Ci0tLSBhL3NyYy9uc3Rlcm0uaAorKysgYi9zcmMvbnN0ZXJt LmgKQEAgLTY2Myw2ICs2NjMsMTYgQEAgdHlwZWRlZiBpZCBpbnN0YW5jZXR5cGU7CiAKIEBpbnRl cmZhY2UgRW1hY3NTY3JvbGxlciA6IE5TU2Nyb2xsZXIKICAgeworCisKKy8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICAgTlNSZWN0IG1jX3JlY3Rh bmdsZTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgc3RydWN0IHdpbmRvdyAq d2luZG93OwogICAgc3RydWN0IGZyYW1lICpmcmFtZTsKICAgIE5TUmVzcG9uZGVyICpwcmV2UmVz cG9uZGVyOwpAQCAtNjgzLDYgKzY5MywxOCBAQCB0eXBlZGVmIGlkIGluc3RhbmNldHlwZTsKICAg IGludCBlbV93aG9sZTsKICAgIH0KIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1V TFRJUExFLUNVUlNPUlMgKi8KKworLSAodm9pZCltY19zZXRfcmVjdGFuZ2xlOiAoTlNSZWN0KXJl Y3Q7CistIChOU1JlY3QpbWNfZ2V0X3JlY3RhbmdsZTsKKy0gKHN0cnVjdCB3aW5kb3cgKiltY19n ZXRfd2luZG93OworLSAoYm9vbCltY19qdWRnZTsKKworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisKKwogLSAoaW5zdGFuY2V0eXBlKSBpbml0RnJhbWU6IChOU1JlY3QgKXIgd2luZG93OiAoTGlz cF9PYmplY3Qpd2luOwogLSAodm9pZClzZXRGcmFtZTogKE5TUmVjdClyOwogCmRpZmYgLS1naXQg YS9zcmMvbnN0ZXJtLm0gYi9zcmMvbnN0ZXJtLm0KaW5kZXggMDIzMzE4Mi4uYjA4NDU0NSAxMDA2 NDQKLS0tIGEvc3JjL25zdGVybS5tCisrKyBiL3NyYy9uc3Rlcm0ubQpAQCAtNzYsNiArNzYsOTc5 IEBAIFVwZGF0ZWQgYnkgQ2hyaXN0aWFuIExpbXBhY2ggKGNocmlzQG5pY2UuY2gpCiBzdGF0aWMg RW1hY3NNZW51ICptYWluTWVudTsKICNlbmRpZgogCisKKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LworLyogYmVnaW4gTVVMVElQTEUtQ1VSU09SUyAqLworCitzdGF0aWMgQk9PTCBuc19jbGlwX3Rv X3JlY3QgKHN0cnVjdCBmcmFtZSAqLCBOU1JlY3QgKiwgaW50KTsKKworc3RhdGljIHZvaWQgbnNf cmVzZXRfY2xpcHBpbmcgKHN0cnVjdCBmcmFtZSAqKTsKKworc3RhdGljIHZvaWQgbnNfZHVtcGds eXBoc19ib3hfb3JfcmVsaWVmIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworCitzdGF0aWMgdm9p ZCBuc19kcmF3X2NvbXBvc2l0ZV9nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAoc3RydWN0IGdseXBo X3N0cmluZyAqKTsKKworc3RhdGljIGludCBuc19nZXRfZ2x5cGhfc3RyaW5nX2NsaXBfcmVjdCAo c3RydWN0IGdseXBoX3N0cmluZyAqLCBOYXRpdmVSZWN0YW5nbGUgKik7CisKK3N0YXRpYyB2b2lk IG5zX2RyYXdfcmVsaWVmIChOU1JlY3QsIGludCwgY2hhciwgY2hhciwgY2hhciwgY2hhciwgY2hh ciwgc3RydWN0IGdseXBoX3N0cmluZyAqKTsKKworc3RhdGljIHZvaWQgbnNfZHJhd19ib3ggKE5T UmVjdCwgQ0dGbG9hdCwgTlNDb2xvciAqLCBjaGFyLCBjaGFyKTsKKworc3RhdGljIHZvaWQgbnNf ZHJhd191bmRlcndhdmUgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiwgRW1hY3NDR0Zsb2F0LCBFbWFj c0NHRmxvYXQpOworCisvKiBDdXJyZW50IGRlc2lnbiBhc3N1bWVzIHRoYXQgYWxwaGEgaXMgMS4w ICovCit2b2lkCittY194d19jb2xvcl92YWx1ZXMgKHN0cnVjdCB3aW5kb3cgKncsIExpc3BfT2Jq ZWN0IGNvbG9yLCBzdHJ1Y3QgbWNfUkdCICpsc2wpCit7CisgIENIRUNLX1NUUklORyAoY29sb3Ip OworICBOU0NvbG9yICogY29sOworICBFbWFjc0NHRmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxw aGE7CisgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKE5VTEwpOworICBibG9ja19pbnB1dCAoKTsKKyAg aWYgKG5zX2xpc3BfdG9fY29sb3IgKGNvbG9yLCAmY29sKSkKKyAgICB7CisgICAgICB1bmJsb2Nr X2lucHV0ICgpOworICAgICAgbHNsLT5yZWQgPSAtMS4wOworICAgICAgbHNsLT5ncmVlbiA9IC0x LjA7CisgICAgICBsc2wtPmJsdWUgPSAtMS4wOworICAgIH0KKyAgW1tjb2wgY29sb3JVc2luZ0Rl ZmF1bHRDb2xvclNwYWNlXQorICAgICAgICBnZXRSZWQ6ICZyZWQgZ3JlZW46ICZncmVlbiBibHVl OiAmYmx1ZSBhbHBoYTogJmFscGhhXTsKKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgbHNsLT5yZWQg PSByZWQ7CisgIGxzbC0+Z3JlZW4gPSBncmVlbjsKKyAgbHNsLT5ibHVlID0gYmx1ZTsKK30KKwor LyogV2hlbiBgbWNfdXBkYXRlX3dpbmRvd19kcnlydW4nIGNhbGxzIGBtY191cGRhdGVfd2luZG93 X2VyYXNlJywgaXQgaXMgbmVjZXNzYXJ5CisgICB0byB1c2UgdGhlIGBtY19tYXRyaXhgIGZyb20g dGhlIHByZXZpb3VzIGNvbW1hbmQgbG9vcCAtLSB0aGUgYHctPm1hdHJpeGAgZm9yCisgICB0aGUg Y3VycmVudCBjb21tYW5kIGxvb3AgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkIGV2ZW4gdGhvdWdo IHRoZSBjb250ZW50cyBvZgorICAgdGhlIHdpbmRvdyBoYXZlIG5vdCB5ZXQgYmVlbiB1cGRhdGVk LiAgSW4gb3RoZXIgY2FzZXMsIHdlIHVzZSBgdy0+bWNfbWF0cml4YC4gKi8KK3N0YXRpYyB2b2lk CittY19uc19kcmF3X292ZXJ3cml0dGVuIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzLCBzdHJ1Y3Qg Z2x5cGhfbWF0cml4ICptYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5 cGhfcm93ICpyb3csIHN0cnVjdCBtY19tYXRyaXggbWNfbWF0cml4LAorICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGdseXBoICpjdXJzb3JfZ2x5cGgpCit7CisgIC8vICBpbnQgdnBvcyA9 IE1BVFJJWF9ST1dfVlBPUyAocm93LCBtYXRyaXgpOworICAvLyAgY2xvY2tfdCBjbG9ja19zdGFy dCA9IGNsb2NrKCk7CisgIC8vIG5zX2RyYXdfdW5kZXJ3YXZlIChzLCBzLT53aWR0aCwgcy0+eCk7 CisgIE5TQ29sb3IgKmhvbGxvd19jb2xvciA9IEZSQU1FX0JBQ0tHUk9VTkRfQ09MT1IgKHMtPmYp OworICBzdHJ1Y3QgZmFjZSAqZmFjZSA9IEZBQ0VfRlJPTV9JRCAocy0+ZiwgREVGQVVMVF9GQUNF X0lEKTsKKyAgaW50IHZudGggPSBNQVRSSVhfUk9XX1ZQT1MgKHJvdywgbWF0cml4KTsKKyAgLyog U1RSRVRDSF9HTFlQSCBtYXkgY29udGFpbiBtb3JlIHRoYW4gb25lIGZha2UgY3Vyc29yIGF0IHRo ZSBzYW1lIEhQT1MuCisgIE5PVEU6ICBBIGZha2UgY3Vyc29yIGZyb20gb25lIGNhY2hlIG1heSBv dmVyd3JpdGUgYSBmYWtlIGN1cnNvciBmcm9tIGFub3RoZXIKKyAgY2FjaGUgLS0gdGh1cywgd2Ug bXVzdCBjaGVjayB0aGVtIGFsbCBmb3Igb3ZlcndyaXR0ZW4gZmFrZSBjdXJzb3JzLiAqLworICBm b3IgKGVudW0gbWNfY2FjaGVfdHlwZSBjYWNoZV90eXBlID0gTUNfQ0FDSEU7CisgICAgICAgY2Fj aGVfdHlwZSA8IE5PX0NBQ0hFOworICAgICAgICsrY2FjaGVfdHlwZSkKKyAgICB7CisgICAgICBm b3IgKGludCBudGggPSAwOworICAgICAgICAgICBzCisgICAgICAgICAgICYmIG1jX3RyYXZlcnNl X2NhY2hlX3AgKG1jX21hdHJpeCwgY2FjaGVfdHlwZSwgdm50aCwgbnRoKTsKKyAgICAgICAgICAg KytudGgpCisgICAgICAgIHsKKyAgICAgICAgICAvLyAgaW50IHggPSBtY19tYXRyaXgudnBvc1t2 bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLng7CisgICAgICAgICAgaW50IGZ4ID0gbWNfbWF0 cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5meDsKKyAgICAgICAgICAvLyAg aW50IHkgPSBtY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLnk7Cisg ICAgICAgICAgaW50IGZ5ID0gbWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1b bnRoXS5meTsKKyAgICAgICAgICBpbnQgaHBvcyA9IG1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hl W2NhY2hlX3R5cGVdW250aF0uaHBvczsKKyAgICAgICAgICBpbnQgdnBvcyA9IG1jX21hdHJpeC52 cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0udnBvczsKKyAgICAgICAgICBpbnQgd2Qg PSBtY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLndkOworICAgICAg ICAgIGludCBoID0gbWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5o OworICAgICAgICAgIGVudW0gbWNfY3Vyc29yX3R5cGUgY3Vyc29yX3R5cGUgPSBtY19tYXRyaXgu dnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmN1cnNvcl90eXBlOworICAgICAgICAg IC8vICBpbnQgY3Vyc29yX3dpZHRoID0gbWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVf dHlwZV1bbnRoXS5jdXJzb3Jfd2lkdGg7CisgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2xfZmcg PSB7LnJlZCA9IG1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZmcu cmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ncmVlbiA9IG1jX21hdHJp eC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZmcuZ3JlZW4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLmJsdWUgPSBtY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhdLmZnLmJsdWV9OworICAgICAgICAgIC8vICBzdHJ1Y3QgbWNfUkdC IGxzbF9iZyA9IHsucmVkID0gbWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1b bnRoXS5iZy5yZWQsCisgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIC5ncmVl biA9IG1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uYmcuZ3JlZW4s CisgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIC5ibHVlID0gbWNfbWF0cml4 LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5iZy5ibHVlfTsKKyAgICAgICAgICBi b29sIGFjdGl2ZV9wID0gbWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRo XS5hY3RpdmVfcDsKKyAgICAgICAgICAvLyAgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yID0g bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlwaF9mbGF2b3I7 CisgICAgICAgICAgYm9vbCBlbmFibGVkX3AgPSBtY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtj YWNoZV90eXBlXVtudGhdLmVuYWJsZWRfcDsKKyAgICAgICAgICBib29sIGdvX3AgPSAodnBvcyA9 PSB2bnRoCisgICAgICAgICAgICAgICAgICAgICAgICYmIGhwb3MgPT0gY3Vyc29yX2dseXBoLT5o cG9zCisgICAgICAgICAgICAgICAgICAgICAgICYmIGVuYWJsZWRfcCk7CisgICAgICAgICAgaWYg KCFnb19wKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgTlNSZWN0IHI7CisgICAg ICAgICAgci5vcmlnaW4ueCA9IGZ4OworICAgICAgICAgIHIub3JpZ2luLnkgPSBmeTsKKyAgICAg ICAgICByLnNpemUuaGVpZ2h0ID0gaDsKKyAgICAgICAgICByLnNpemUud2lkdGggPSB3ZDsKKyAg ICAgICAgICBbW05TQ29sb3IgY29sb3JXaXRoQ2FsaWJyYXRlZFJlZDogbHNsX2ZnLnJlZAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWVuOiBsc2xfZmcuZ3JlZW4KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx1ZTogbHNsX2ZnLmJsdWUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYTogMS4wXSBzZXRdOworICAg ICAgaWYgKGN1cnNvcl90eXBlID09IE1DX0ZSQU1FRF9CT1gpCisgICAgICAgIHsKKyAgICAgICAg ICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAocy0+dy0+Y29udGVudHMpOworICAgICAgICAg IGJvb2wgcmVnaW9uX2FjdGl2ZV9wID0gKCFOSUxQIChWdHJhbnNpZW50X21hcmtfbW9kZSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgbWFya19h Y3RpdmUpKSk7CisgICAgICAgICAgcHRyZGlmZl90IHJlZ2lvbl9iZWcgPSAocmVnaW9uX2FjdGl2 ZV9wKSA/IG1jX3JlZ2lvbl9saW1pdCAoMSkgOiAtMTsKKyAgICAgICAgICBwdHJkaWZmX3QgcmVn aW9uX2VuZCA9IChyZWdpb25fYWN0aXZlX3ApID8gbWNfcmVnaW9uX2xpbWl0ICgwKSA6IC0xOwor ICAgICAgICAgIGlmIChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAgICAgJiYgYWN0aXZlX3AK KyAgICAgICAgICAgICAgJiYgY3Vyc29yX2dseXBoLT5jaGFycG9zID09IHJlZ2lvbl9iZWcpCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX3Jl Z2lvbl9iZWdfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlIChzLT53LCBzLT5mLCBpbnRlcm4g KCIrLXJlYWwtZmFrZS1jdXJzb3ItYXQtcmVnaW9uLXByZS16di1mYWNlIiksIHRydWUpOworICAg ICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fYmVnX2ZhY2UgPSBG QUNFX0ZST01fSUQgKHMtPmYsIGhvbGxvd19hY3RpdmVfcmVnaW9uX2JlZ19mYWNlX2lkKTsKKyAg ICAgICAgICAgICAgTlNDb2xvciAqaG9sbG93X2FjdGl2ZV9yZWdpb25fYmVnX2NvbG9yID0gbnNf bG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdST1VORCAoaG9sbG93X2FjdGl2ZV9y ZWdpb25fYmVnX2ZhY2UpLCBzLT5mKTsKKyAgICAgICAgICAgICAgaG9sbG93X2NvbG9yID0gaG9s bG93X2FjdGl2ZV9yZWdpb25fYmVnX2NvbG9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAg ZWxzZSBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAmJiBhY3RpdmVf cAorICAgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX2dseXBoLT5jaGFycG9zID09IHJlZ2lv bl9lbmQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9s bG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAocy0+dywg cy0+ZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWF0LXJlZ2lvbi1wcmUtenYtZmFjZSIp LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdp b25fZW5kX2ZhY2UgPSBGQUNFX0ZST01fSUQgKHMtPmYsIGhvbGxvd19hY3RpdmVfcmVnaW9uX2Vu ZF9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICBOU0NvbG9yICpob2xsb3dfYWN0aXZlX3JlZ2lv bl9lbmRfY29sb3IgPSBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9CQUNLR1JPVU5E IChob2xsb3dfYWN0aXZlX3JlZ2lvbl9lbmRfZmFjZSksIHMtPmYpOworICAgICAgICAgICAgICAg IGhvbGxvd19jb2xvciA9IGhvbGxvd19hY3RpdmVfcmVnaW9uX2VuZF9jb2xvcjsKKyAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmIChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAg ICAgICAgICAgICAgICAgJiYgYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgY3Vy c29yX2dseXBoLT5jaGFycG9zID4gcmVnaW9uX2JlZworICAgICAgICAgICAgICAgICAgICAgICAm JiBjdXJzb3JfZ2x5cGgtPmNoYXJwb3MgPCByZWdpb25fZW5kKQorICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZXR3 ZWVuX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAocy0+dywgcy0+ZiwgaW50ZXJuICgiKy1y ZWFsLWZha2UtY3Vyc29yLWluLXJlZ2lvbi1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAg ICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZXR3ZWVuX2ZhY2Ug PSBGQUNFX0ZST01fSUQgKHMtPmYsIGhvbGxvd19hY3RpdmVfcmVnaW9uX2JldHdlZW5fZmFjZV9p ZCk7CisgICAgICAgICAgICAgICAgICBOU0NvbG9yICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZXR3 ZWVuX2NvbG9yID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdST1VORCAo aG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9mYWNlKSwgcy0+Zik7CisgICAgICAgICAgICAg ICAgICBob2xsb3dfY29sb3IgPSBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZXR3ZWVuX2NvbG9yOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhY3RpdmVfcCkKKyAg ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxv d19hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlIChzLT53LCBzLT5mLCBpbnRlcm4g KCIrLXJlYWwtZmFrZS1jdXJzb3ItcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKHMt PmYsIGhvbGxvd19hY3RpdmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgICAgIE5TQ29sb3Ig KmhvbGxvd19hY3RpdmVfY29sb3IgPSBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9C QUNLR1JPVU5EIChob2xsb3dfYWN0aXZlX2ZhY2UpLCBzLT5mKTsKKyAgICAgICAgICAgICAgICAg ICAgaG9sbG93X2NvbG9yID0gaG9sbG93X2FjdGl2ZV9jb2xvcjsKKyAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhY3RpdmVfcCkKKyAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfaW5hY3Rp dmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlIChzLT53LCBzLT5mLCBpbnRlcm4gKCIrLXJl YWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19pbmFjdGl2ZV9mYWNlID0gRkFDRV9GUk9N X0lEIChzLT5mLCBob2xsb3dfaW5hY3RpdmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgICAg ICAgTlNDb2xvciAqaG9sbG93X2luYWN0aXZlX2NvbG9yID0gbnNfbG9va3VwX2luZGV4ZWRfY29s b3IgKE5TX0ZBQ0VfQkFDS0dST1VORCAoaG9sbG93X2luYWN0aXZlX2ZhY2UpLCBzLT5mKTsKKyAg ICAgICAgICAgICAgICAgICAgICBob2xsb3dfY29sb3IgPSBob2xsb3dfaW5hY3RpdmVfY29sb3I7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmYWNl ICYmIE5TX0ZBQ0VfQkFDS0dST1VORCAoZmFjZSkgPT0gbnNfaW5kZXhfY29sb3IgKEZSQU1FX0NV UlNPUl9DT0xPUiAocy0+ZiksIHMtPmYpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFtuc19s b29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9GT1JFR1JPVU5EIChmYWNlKSwgcy0+Zikgc2V0 XTsKKyAgICAgICAgICAgIGhvbGxvd19jb2xvciA9IEZSQU1FX0NVUlNPUl9DT0xPUiAocy0+Zik7 CisgICAgICAgICAgfQorICAgICAgICAgIHN3aXRjaCAoY3Vyc29yX3R5cGUpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIGNhc2UgTUNfTk9fRlJJTkdFX0JJVE1BUDoKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBNQ19OT19DVVJTT1I6CisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgTUNfUklHSFRfRlJJTkdFX0JJVE1BUDoK KyAgICAgICAgICAgICAgY2FzZSBNQ19MRUZUX0ZSSU5HRV9CSVRNQVA6CisgICAgICAgICAgICAg IGNhc2UgTUNfRklMTEVEX0JPWDoKKyAgICAgICAgICAgICAgICBOU1JlY3RGaWxsIChyKTsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBNQ19GUkFNRURfQk9YOgor ICAgICAgICAgICAgICAgIE5TUmVjdEZpbGwgKHIpOworICAgICAgICAgICAgICAgIFtob2xsb3df Y29sb3Igc2V0XTsKKyAgICAgICAgICAgICAgICBOU1JlY3RGaWxsIChOU0luc2V0UmVjdCAociwg MSwgMSkpOworICAgICAgICAgICAgICAgIFtGUkFNRV9DVVJTT1JfQ09MT1IgKHMtPmYpIHNldF07 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgTUNfSE9MTE9XX0JP WDoKKyAgICAgICAgICAgICAgICBOU1JlY3RGaWxsIChyKTsKKyAgICAgICAgICAgICAgICBbaG9s bG93X2NvbG9yIHNldF07CisgICAgICAgICAgICAgICAgTlNSZWN0RmlsbCAoTlNJbnNldFJlY3Qg KHIsIDEsIDEpKTsKKyAgICAgICAgICAgICAgICBbRlJBTUVfQ1VSU09SX0NPTE9SIChzLT5mKSBz ZXRdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIE1DX0hCQVI6 CisgICAgICAgICAgICAgICAgTlNSZWN0RmlsbCAocik7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgIGNhc2UgTUNfQkFSOgorICAgICAgICAgICAgICAgIE5TUmVjdEZpbGwg KHIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIC8q IElmIGEgZ2x5cGggZXhpc3RzIChzLT5jaGFyMmIgIT0gTlVMTCksIHRoZW4gZHJhdyB0aGUgZ2x5 cGggb24gdG9wIG9mIHRoZQorICAgICAgICAgIG5ld2x5IGRyYXduIHJlY3RhbmdsZSB0aGF0IHdh cyBjcmVhdGVkIGhlcmVpbmFib3ZlLiAgVG8gdGhlIGV4dGVudCB0aGF0IHdlCisgICAgICAgICAg d2FudCB0byBkb3VibGUtaW1wcmludCBnbHlwaHMgdG8gbWFrZSB0aGVtIGFwcGVhciB0byBiZSBz ZW1pLWJvbGQsIGl0IGNhbgorICAgICAgICAgIGJlIGRvbmUgaGVyZSBmb3IgYWxsIGN1cnNvciB0 eXBlcy4gIFRoZSBib3gtc3R5bGUgY3Vyc29ycyBhcmUgaW1wcmludGVkCisgICAgICAgICAgd2l0 aCBnbHlwaHMgb25seSBvbmUgKDEpIHRpbWUuICBUaGUgc2VtaS1ib2xkIGFwcGVhcmFuY2UgaXMg aGVscGZ1bCB3aGVuCisgICAgICAgICAgZGVidWdnaW5nIHRvIHNlZSB0aGF0IHRoZSBjb29yZGlu YXRlcyBhcmUgY29ycmVjdC4gKi8KKyAgICAgICAgICBpZiAocy0+Y2hhcjJiICE9IE5VTEwKKyAg ICAgICAgICAgICAgJiYgKGN1cnNvcl90eXBlID09IE1DX0ZJTExFRF9CT1gKKyAgICAgICAgICAg ICAgICAgIHx8IGN1cnNvcl90eXBlID09IE1DX0ZSQU1FRF9CT1gKKyAgICAgICAgICAgICAgICAg IHx8IGN1cnNvcl90eXBlID09IE1DX0hPTExPV19CT1gpKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICBCT09MIGlzQ29tcG9zaXRlID0gcy0+Zmlyc3RfZ2x5cGgtPnR5cGUgPT0gQ09NUE9T SVRFX0dMWVBIOworICAgICAgICAgICAgICBpZiAoaXNDb21wb3NpdGUpCisgICAgICAgICAgICAg ICAgbnNfZHJhd19jb21wb3NpdGVfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHMpOworICAgICAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg c3RydWN0IGZvbnQgKmZvbnQgPSBzLT5mYWNlLT5mb250OworICAgICAgICAgICAgICAgICAgICBp ZiAoIWZvbnQpCisgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IEZSQU1FX0ZPTlQgKHMtPmYp OworICAgICAgICAgICAgICAgICAgICBib29sIHdpdGhfYmdfcCA9IGZhbHNlOworICAgICAgICAg ICAgICAgICAgICBmb250LT5kcml2ZXItPmRyYXcgKHMsIHMtPmNtcF9mcm9tLCBzLT5uY2hhcnMs IHMtPngsIHMtPnliYXNlLCB3aXRoX2JnX3ApOworICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAvLyAgY2xvY2tfdCBjbG9ja19lbmQgPSBjbG9j aygpOworICAvLyAgZG91YmxlIGNwdV90aW1lX3VzZWQgPSAoKGRvdWJsZSkgKGNsb2NrX2VuZCAt IGNsb2NrX3N0YXJ0KSkgLyBDTE9DS1NfUEVSX1NFQzsKKyAgLy8gIGZwcmludGYgKHN0ZGVyciwg Im5zX2RyYXdfb3ZlcndyaXR0ZW4gKCVkKTogIFRJTUUgKCVmKVxuIiwgdnBvcywgY3B1X3RpbWVf dXNlZCk7Cit9CisKK3N0YXRpYyB2b2lkCittY19uc19kcmF3X3dpbmRvd19jdXJzb3IgKHN0cnVj dCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwgc3RydWN0IGdseXBoX3Jv dyAqcm93LAorICAgICAgICAgICAgICAgICAgaW50IHgsIGludCBmeCwgaW50IHksIGludCBmeSwg aW50IGhwb3MsIGludCB2cG9zLCBpbnQgd2QsIGludCBoLAorICAgICAgICAgICAgICAgICAgc3Ry dWN0IG1jX1JHQiBsc2wsIGVudW0gbWNfY3Vyc29yX3R5cGUgY3Vyc29yX3R5cGUsCisgICAgICAg ICAgICAgICAgICBpbnQgY3Vyc29yX3dpZHRoLCBlbnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3Is IGJvb2wgb25fcCwgYm9vbCBhY3RpdmVfcCkKK3sKKyAgLyogVGhlIHByaW9yIGJ1ZyBvZiBhIGRv dWJsZSBpbXByaW50IG9uIHRoZSBnbHlwaCB3aGVyZSBhbiBNQ19IQkFSIGFuZAorICBNQ19CQVIg aXMgcGxhY2VkIGlzIHF1aXRlIGhlbHBmdWwgdG8gdmlzdWFsaXplIGVycm9ycyB3aGVuIGRlYnVn Z2luZy4gKi8KKyAgYm9vbCBkZWJ1Z19wID0gZmFsc2U7CisvKgorICBpZiAobWNfc3RkZXJyX3Ap CisgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfbnNfZHJhd193aW5kb3dfY3Vyc29yICglcyk6XG5c CisgIHggKCVkKSB8IGZ4ICglZCkgfCB5ICglZCkgfCBmeSAoJWQpIHwgaHBvcyAoJWQpIHwgdnBv cyAoJWQpXG5cCisgIHdkICglZCkgfCBoICglZCkgfCBSR0IgKCVmLyVmLyVmKVxuXAorICBjdXJz b3JfdHlwZSAoJXMpIHwgY3Vyc29yX3dpZHRoICglZCkgfCBvbl9wICglcykgfCBhY3RpdmVfcCAo JXMpXG5cCisgIGdseXBoX2ZsYXZvciAoJXMpXG4iLAorICBtY193aW5kb3cgKHcpLCB4LCBmeCwg eSwgZnksIGhwb3MsIHZwb3MsIHdkLCBoLCBsc2wucmVkLCBsc2wuYmx1ZSwgbHNsLmdyZWVuLAor ICBtY19jdXJzb3JfdHlwZV90b19zdHJpbmcgKGN1cnNvcl90eXBlKSwgY3Vyc29yX3dpZHRoLCBv bl9wID8gInkiIDogIm4iLAorICBhY3RpdmVfcCA/ICJ5IiA6ICJuIiwgbWNfZmxhdm9yX3RvX3N0 cmluZyAoZ2x5cGhfZmxhdm9yKSk7CisqLworICBOU1JlY3QgciwgczsKKyAgc3RydWN0IGZyYW1l ICpmID0gV0lORE9XX1hGUkFNRSAodyk7CisgIHN0cnVjdCBnbHlwaCAqY3Vyc29yX2dseXBoID0g bWNfZ2V0X2N1cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIGhwb3MsIHZwb3MpOworICBlbnVt IGZhY2VfaWQgY3Vyc29yX2dseXBoX2ZhY2VfaWQgPSAoY3Vyc29yX2dseXBoID09IE5VTEwpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gREVGQVVMVF9GQUNFX0lECisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3Vyc29yX2dseXBoLT5mYWNl X2lkOworICBzdHJ1Y3QgZmFjZSAqZmFjZTsKKyAgTlNDb2xvciAqaG9sbG93X2NvbG9yID0gRlJB TUVfQkFDS0dST1VORF9DT0xPUiAoZik7CisgIC8qIElmIGN1cnNvciBpcyBvdXQgb2YgYm91bmRz LCBkb24ndCBkcmF3IGdhcmJhZ2UuICBUaGlzIGNhbiBoYXBwZW4KKyAgICAgaW4gbWluaS1idWZm ZXIgd2luZG93cyB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGVjaG8gYXJlYSBnbHlwaHMKKyAgICAg YW5kIG1pbmktYnVmZmVyLiAqLworICBpZiAoIW9uX3ApCisgICAgcmV0dXJuOworICBpZiAoY3Vy c29yX3R5cGUgPT0gTUNfTk9fQ1VSU09SKQorICAgIHJldHVybjsKKyAgLyogVGhlIGZyaW5nZSBi aXRtYXBzIGFyZSBwcmVzZW50bHkgaGFuZGxlZCBlbHNld2hlcmUsIGJ1dCBjb3VsZCBzb21lZGF5 IGJlCisgIG1hbmFnZWQgKGluIHBhcnQpIGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlLiAqLworICBp ZiAocm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wCisgICAgICAmJiAocm93LT5yZXZlcnNl ZF9wCisgICAgICAgICA/IChocG9zIDwgMCkKKyAgICAgICAgIDogKGhwb3MgPj0gcm93LT51c2Vk W1RFWFRfQVJFQV0pKSkKKyAgICB7CisgICAgICByb3ctPmN1cnNvcl9pbl9mcmluZ2VfcCA9IHRy dWU7CisgICAgICBtY19kcmF3X2ZyaW5nZV9iaXRtYXAgKHcsIHJvdywgcm93LT5yZXZlcnNlZF9w LCBjdXJzb3JfdHlwZSk7CisgICAgICByZXR1cm47CisgICAgfQorICByLm9yaWdpbi54ID0gZng7 CisgIHIub3JpZ2luLnkgPSBmeTsKKyAgci5zaXplLmhlaWdodCA9IGg7CisgIHIuc2l6ZS53aWR0 aCA9IHdkOworICAvKiBgbnNfY2xpcF90b19yZWN0JyBtdXN0IHByZWNlZGUgdGhlIHNldHRpbmcg b2YgZmFjZXMgc28gYXMgdG8gYXZvaWQKKyAgICAgdW5zaWdodGx5IGdkYiBlcnJvciBtZXNzYWdl cyB0aGF0IGFyZSBuZXh0IHRvIGltcG9zc2libGUgdG8gZGVidWc6CisgICAgICAgVGh1IE1hciAy OCAxMzo1NDozMiBzZXJ2ZXIubG9jYWwgRW1hY3NbMTcyMDddIDxFcnJvcj46CisgICAgICAgQ0dD b250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yOiBpbnZhbGlkIGNvbnRleHQgMHgwLiAqLworICBp ZiAoIW5zX2NsaXBfdG9fcmVjdCAoZiwgJnIsIDEpKQorICAgIHJldHVybjsKKyAgZmFjZSA9IEZB Q0VfRlJPTV9JRCAoZiwgY3Vyc29yX2dseXBoX2ZhY2VfaWQpOworLyogRVhBTVBMRSBPRiBIT1cg VE8gTE9PSy1VUCBBIENPTE9SOgorICAgICBlbnVtIGZhY2VfaWQgZmFjZV9pZCA9IGxvb2t1cF9u YW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLWJhci1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAg ICAgc3RydWN0IGZhY2UgKmZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZhY2VfaWQpOworICAgICBO U0NvbG9yICpjb2xvciA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVHUk9V TkQgKGZhY2UpLCBmKTsKKyAgLSAgRVhBTVBMRSBPRiBIT1cgVE8gUFJJTlQgQSBDT0xPUiBUTyBT VERFUlI6CisgICAgIExpc3BfT2JqZWN0IGZvcmVncm91bmQgPSBmYWNlLT5sZmFjZVtMRkFDRV9G T1JFR1JPVU5EX0lOREVYXTsKKyAgICAgTGlzcF9PYmplY3QgYmFja2dyb3VuZCA9IGZhY2UtPmxm YWNlW0xGQUNFX0JBQ0tHUk9VTkRfSU5ERVhdOworICAgICBmcHJpbnRmIChzdGRlcnIsICJcbmZv cmVncm91bmQgKCVzKSB8IGJhY2tncm91bmQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAoIU5JTFAgKGZvcmVncm91bmQpID8gU1NEQVRBIChmb3JlZ3JvdW5kKSA6ICJOSUxQIiksCisg ICAgICAgICAgICAgICAgICAgICAgKCFOSUxQIChiYWNrZ3JvdW5kKSA/IFNTREFUQSAoYmFja2dy b3VuZCkgOiAiTklMUCIpKTsKKyAgLSAgRVhBTVBMRSBPRiBIT1cgVE8gQ1JFQVRFIEEgQ09MT1Ig V0lUSCBSR0IvTFNMIGZsb2F0IHZhbHVlczoKKyAgICAgTlNDb2xvciAqbXlfY29sb3IgPSBbTlND b2xvciBjb2xvcldpdGhDYWxpYnJhdGVkUmVkOiAxLjAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWVuOiAxLjAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHVlOiAxLjAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhOiAxLjBdOworICAt ICBBTFRFUk5BVElWRSBFWEFNUExFOgorICAgICBlbnVtIGZhY2VfaWQgZGVidWdnaW5nX2ZhY2Vf aWQgPSBsb29rdXBfbmFtZWRfZmFjZSAocy0+dywgcy0+ZiwgaW50ZXJuICgiKy1kZWJ1Z2dpbmct ZmFjZSIpLCB0cnVlKTsKKyAgICAgc3RydWN0IGZhY2UgKmRlYnVnZ2luZ19mYWNlID0gRkFDRV9G Uk9NX0lEIChzLT5mLCBkZWJ1Z2dpbmdfZmFjZV9pZCk7CisgICAgIE5TQ29sb3IgKmNvbG9yID0g bnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdST1VORCAoZGVidWdnaW5nX2Zh Y2UpLCBzLT5mKTsKKyAgICAgW2NvbG9yIHNldF07ICovCisgIGlmIChnbHlwaF9mbGF2b3IgPT0g TUNfR0xZUEgKKyAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19HTFlQSExFU1MpCisgICAgW1tO U0NvbG9yIGNvbG9yV2l0aENhbGlicmF0ZWRSZWQ6IGxzbC5yZWQKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBncmVlbjogbHNsLmdyZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJsdWU6IGxzbC5ibHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxw aGE6IDEuMF0gc2V0XTsKKyAgICBlbHNlCisgICAgICBbRlJBTUVfQ1VSU09SX0NPTE9SIChmKSBz ZXRdOworICBpZiAoY3Vyc29yX3R5cGUgPT0gTUNfRlJBTUVEX0JPWCkKKyAgICB7CisgICAgICBz dHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAody0+Y29udGVudHMpOworICAgICAgYm9vbCByZWdp b25fYWN0aXZlX3AgPSAoIU5JTFAgKFZ0cmFuc2llbnRfbWFya19tb2RlKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIG1hcmtfYWN0aXZlKSkpOworICAg ICAgcHRyZGlmZl90IHJlZ2lvbl9iZWcgPSAocmVnaW9uX2FjdGl2ZV9wKSA/IG1jX3JlZ2lvbl9s aW1pdCAoMSkgOiAtMTsKKyAgICAgIHB0cmRpZmZfdCByZWdpb25fZW5kID0gKHJlZ2lvbl9hY3Rp dmVfcCkgPyBtY19yZWdpb25fbGltaXQgKDApIDogLTE7CisgICAgICBpZiAocmVnaW9uX2FjdGl2 ZV9wCisgICAgICAgICAgJiYgYWN0aXZlX3AKKyAgICAgICAgICAmJiBjdXJzb3JfZ2x5cGgtPmNo YXJwb3MgPT0gcmVnaW9uX2JlZykKKyAgICAgICAgeworICAgICAgICAgIGVudW0gZmFjZV9pZCBo b2xsb3dfYWN0aXZlX3JlZ2lvbl9iZWdfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBm LCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItYXQtcmVnaW9uLXByZS16di1mYWNlIiksIHRy dWUpOworICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZWdfZmFj ZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9yZWdpb25fYmVnX2ZhY2VfaWQpOwor ICAgICAgICAgIE5TQ29sb3IgKmhvbGxvd19hY3RpdmVfcmVnaW9uX2JlZ19jb2xvciA9IG5zX2xv b2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVHUk9VTkQgKGhvbGxvd19hY3RpdmVfcmVn aW9uX2JlZ19mYWNlKSwgZik7CisgICAgICAgICAgaG9sbG93X2NvbG9yID0gaG9sbG93X2FjdGl2 ZV9yZWdpb25fYmVnX2NvbG9yOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJlZ2lvbl9h Y3RpdmVfcAorICAgICAgICAgICAgICAgICAmJiBhY3RpdmVfcAorICAgICAgICAgICAgICAgICAm JiBjdXJzb3JfZ2x5cGgtPmNoYXJwb3MgPT0gcmVnaW9uX2VuZCkKKyAgICAgICAgICB7CisgICAg ICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2VfaWQgPSBs b29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWF0LXJl Z2lvbi1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xs b3dfYWN0aXZlX3JlZ2lvbl9lbmRfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2 ZV9yZWdpb25fZW5kX2ZhY2VfaWQpOworICAgICAgICAgICAgTlNDb2xvciAqaG9sbG93X2FjdGl2 ZV9yZWdpb25fZW5kX2NvbG9yID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfQkFD S0dST1VORCAoaG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2UpLCBmKTsKKyAgICAgICAgICAg IGhvbGxvd19jb2xvciA9IGhvbGxvd19hY3RpdmVfcmVnaW9uX2VuZF9jb2xvcjsKKyAgICAgICAg ICB9CisgICAgICAgICAgZWxzZSBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAgICAgICAgICAg ICAgJiYgYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAmJiBjdXJzb3JfZ2x5cGgtPmNoYXJw b3MgPiByZWdpb25fYmVnCisgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX2dseXBoLT5jaGFy cG9zIDwgcmVnaW9uX2VuZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZW51bSBmYWNl X2lkIGhvbGxvd19hY3RpdmVfcmVnaW9uX2JldHdlZW5fZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9m YWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItaW4tcmVnaW9uLXByZS16di1m YWNlIiksIHRydWUpOworICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9y ZWdpb25fYmV0d2Vlbl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lv bl9iZXR3ZWVuX2ZhY2VfaWQpOworICAgICAgICAgICAgICBOU0NvbG9yICpob2xsb3dfYWN0aXZl X3JlZ2lvbl9iZXR3ZWVuX2NvbG9yID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0Vf Rk9SRUdST1VORCAoaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9mYWNlKSwgZik7CisgICAg ICAgICAgICAgIGhvbGxvd19jb2xvciA9IGhvbGxvd19hY3RpdmVfcmVnaW9uX2JldHdlZW5fY29s b3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChhY3RpdmVfcCkKKyAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX2Zh Y2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vy c29yLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpo b2xsb3dfYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFjZV9p ZCk7CisgICAgICAgICAgICAgICAgTlNDb2xvciAqaG9sbG93X2FjdGl2ZV9jb2xvciA9IG5zX2xv b2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0JBQ0tHUk9VTkQgKGhvbGxvd19hY3RpdmVfZmFj ZSksIGYpOworICAgICAgICAgICAgICAgIGhvbGxvd19jb2xvciA9IGhvbGxvd19hY3RpdmVfY29s b3I7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgLyogVGhlIHJlZ2lvbiBpcyBfbm90 XyB2aXNpYmxlIGluIHRoZSBpbmFjdGl2ZSB3aW5kb3cgYmVjYXVzZSB0aGUgb3ZlcmxheSB3aW5k b3cgcHJvcGVydHkgaXMgdXNlZC4gKi8KKyAgICAgICAgICAgICAgZWxzZSBpZiAoIWFjdGl2ZV9w KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xs b3dfaW5hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIr LXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2luYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01f SUQgKGYsIGhvbGxvd19pbmFjdGl2ZV9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgIE5TQ29s b3IgKmhvbGxvd19pbmFjdGl2ZV9jb2xvciA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19G QUNFX0JBQ0tHUk9VTkQgKGhvbGxvd19pbmFjdGl2ZV9mYWNlKSwgZik7CisgICAgICAgICAgICAg ICAgICBob2xsb3dfY29sb3IgPSBob2xsb3dfaW5hY3RpdmVfY29sb3I7CisgICAgICAgICAgICAg ICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChmYWNlICYmIE5TX0ZBQ0VfQkFDS0dST1VORCAoZmFj ZSkgPT0gbnNfaW5kZXhfY29sb3IgKEZSQU1FX0NVUlNPUl9DT0xPUiAoZiksIGYpKQorICAgICAg eworICAgICAgICBbbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdST1VORCAo ZmFjZSksIGYpIHNldF07CisgICAgICAgIGhvbGxvd19jb2xvciA9IEZSQU1FX0NVUlNPUl9DT0xP UiAoZik7CisgICAgICB9CisjaWZkZWYgTlNfSU1QTF9DT0NPQQorICBOU0Rpc2FibGVTY3JlZW5V cGRhdGVzICgpOworI2VuZGlmCisgIHN3aXRjaCAoY3Vyc29yX3R5cGUpCisgICAgeworICAgICAg Y2FzZSBNQ19OT19GUklOR0VfQklUTUFQOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTUNf Tk9fQ1VSU09SOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTUNfUklHSFRfRlJJTkdFX0JJ VE1BUDoKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE1DX0xFRlRfRlJJTkdFX0JJVE1BUDoK KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE1DX0ZJTExFRF9CT1g6CisgICAgICAgIE5TUmVj dEZpbGwgKHIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTUNfRlJBTUVEX0JPWDoKKyAg ICAgICAgTlNSZWN0RmlsbCAocik7CisgICAgICAgIFtob2xsb3dfY29sb3Igc2V0XTsKKyAgICAg ICAgTlNSZWN0RmlsbCAoTlNJbnNldFJlY3QgKHIsIDEsIDEpKTsKKyAgICAgICAgW0ZSQU1FX0NV UlNPUl9DT0xPUiAoZikgc2V0XTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE1DX0hPTExP V19CT1g6CisgICAgICAgIE5TUmVjdEZpbGwgKHIpOworICAgICAgICBbaG9sbG93X2NvbG9yIHNl dF07CisgICAgICAgIE5TUmVjdEZpbGwgKE5TSW5zZXRSZWN0IChyLCAxLCAxKSk7CisgICAgICAg IFtGUkFNRV9DVVJTT1JfQ09MT1IgKGYpIHNldF07CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz ZSBNQ19IQkFSOgorICAgICAgICBOU1JlY3RGaWxsIChyKTsKKyAgICAgICAgYnJlYWs7CisgICAg ICBjYXNlIE1DX0JBUjoKKyAgICAgICAgcyA9IHI7CisgICAgICAgIC8qIEBsYXdsaXN0IGlzIGZv Y3VzaW5nIHRoZSBpbml0aWFsIGRldmVsb3BtZW50IG9mIGZlYXR1cmUgcmVxdWVzdHMKKyAgICAg ICAgIzE3Njg0IGFuZCAjMjI4NzMgb24gTDJSIGxhbmd1YWdlcy4gKi8KKyAgICAgICAgaWYgKGds eXBoX2ZsYXZvciAhPSBNQ19HTFlQSAorICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9IE1D X0dMWVBITEVTUykKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBJZiB0aGUgY2hhcmFjdGVy IHVuZGVyIGN1cnNvciBpcyBSMkwsIGRyYXcgdGhlIGJhciBjdXJzb3IKKyAgICAgICAgICAgICAg IG9uIHRoZSByaWdodCBvZiBpdHMgZ2x5cGgsIHJhdGhlciB0aGFuIG9uIHRoZSBsZWZ0LiAqLwor ICAgICAgICAgICAgaWYgKChjdXJzb3JfZ2x5cGgtPnJlc29sdmVkX2xldmVsICYgMSkgIT0gMCkK KyAgICAgICAgICAgICAgcy5vcmlnaW4ueCArPSBjdXJzb3JfZ2x5cGgtPnBpeGVsX3dpZHRoIC0g cy5zaXplLndpZHRoOworICAgICAgICAgIH0KKyAgICAgICAgTlNSZWN0RmlsbCAocyk7CisgICAg ICAgIGJyZWFrOworICAgIH0KKyAgbnNfcmVzZXRfY2xpcHBpbmcgKGYpOworICAvKiBkcmF3IHRo ZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciAqLworICBpZiAoZ2x5cGhfZmxhdm9yICE9IE1D X0dMWVBITEVTUworICAgICAgJiYgKGN1cnNvcl90eXBlID09IE1DX0ZSQU1FRF9CT1gKKyAgICAg ICAgICB8fCBjdXJzb3JfdHlwZSA9PSBNQ19GSUxMRURfQk9YCisgICAgICAgICAgfHwgY3Vyc29y X3R5cGUgPT0gTUNfSE9MTE9XX0JPWAorICAgICAgICAgIHx8IChkZWJ1Z19wCisgICAgICAgICAg ICAgICYmIGN1cnNvcl90eXBlID09IE1DX0hCQVIpCisgICAgICAgICAgfHwgKGRlYnVnX3AKKyAg ICAgICAgICAgICAgJiYgY3Vyc29yX3R5cGUgPT0gTUNfQkFSKSkpCisgICAgeworICAgICAgLyog YGN1cnNvcl9nY19wYCBpcyB1c2VkIG9ubHkgYnkgYHczMnRlcm0uY2AgYW5kIGB4dGVybS5jJy4g Ki8KKyAgICAgIGJvb2wgY3Vyc29yX2djX3AgPSBmYWxzZTsKKyAgICAgIGNvbnN0IEVtYWNzX1Jl Y3RhbmdsZSAqc2F2ZWRfY2xpcCA9IE5VTEw7CisgICAgICBpZiAocm93LT5jbGlwICE9IE5VTEwp CisgICAgICAgIHsKKyAgICAgICAgICBzYXZlZF9jbGlwID0gcm93LT5jbGlwOworICAgICAgICAg IHJvdy0+Y2xpcCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIG1jX2RyYXdfY3Vyc29yX2dseXBo ICh3LCBtYXRyaXgsIHJvdywgRFJBV19DVVJTT1IsIHgsIGhwb3MsIHZwb3MsIGxzbCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9mbGF2b3IsIGN1cnNvcl90eXBlLCB3ZCwgYWN0 aXZlX3AsIGN1cnNvcl9nY19wKTsKKyAgICAgIGlmIChzYXZlZF9jbGlwICE9IE5VTEwpCisgICAg ICAgIHJvdy0+Y2xpcCA9IHNhdmVkX2NsaXA7CisgICAgfQorI2lmZGVmIE5TX0lNUExfQ09DT0EK KyAgTlNFbmFibGVTY3JlZW5VcGRhdGVzICgpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCitt Y19uc19kcmF3X3RleHRfZGVjb3JhdGlvbiAoc3RydWN0IGdseXBoX3N0cmluZyAqcywgc3RydWN0 IGZhY2UgKmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgTlNDb2xvciAqZGVmYXVsdENv bCwgQ0dGbG9hdCB3aWR0aCwgQ0dGbG9hdCB4KQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIERy YXcgdW5kZXJsaW5lLCBvdmVybGluZSwgYW5kIHN0cmlrZS10aHJvdWdoIG9uIGdseXBoIHN0cmlu ZyBzLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3sKKyAgaWYgKHMtPmZvcl9vdmVybGFwcykK KyAgICByZXR1cm47CisgIC8qIERvIHVuZGVybGluZS4gKi8KKyAgaWYgKGZhY2UtPnVuZGVybGlu ZV9wKQorICAgIHsKKyAgICAgIGlmIChzLT5mYWNlLT51bmRlcmxpbmVfdHlwZSA9PSBGQUNFX1VO REVSX1dBVkUpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZmFjZS0+dW5kZXJsaW5lX2RlZmF1 bHRlZF9wKQorICAgICAgICAgICAgW2RlZmF1bHRDb2wgc2V0XTsKKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgW25zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChmYWNlLT51bmRlcmxpbmVf Y29sb3IsIHMtPmYpIHNldF07CisgICAgICAgICAgbnNfZHJhd191bmRlcndhdmUgKHMsIHdpZHRo LCB4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzLT5mYWNlLT51bmRlcmxpbmVfdHlw ZSA9PSBGQUNFX1VOREVSX0xJTkUpCisgICAgICAgICAgeworICAgICAgICAgICAgTlNSZWN0IHI7 CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRoaWNrbmVzcywgcG9zaXRpb247CisgICAgICAg ICAgICAvKiBJZiB0aGUgcHJldiB3YXMgdW5kZXJsaW5lZCwgbWF0Y2ggaXRzIGFwcGVhcmFuY2Uu ICovCisgICAgICAgICAgICBpZiAocy0+cHJldiAmJiBzLT5wcmV2LT5mYWNlLT51bmRlcmxpbmVf cAorICAgICAgICAgICAgICAgICYmIHMtPnByZXYtPmZhY2UtPnVuZGVybGluZV90eXBlID09IEZB Q0VfVU5ERVJfTElORQorICAgICAgICAgICAgICAgICYmIHMtPnByZXYtPnVuZGVybGluZV90aGlj a25lc3MgPiAwKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0g cy0+cHJldi0+dW5kZXJsaW5lX3RoaWNrbmVzczsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbiA9 IHMtPnByZXYtPnVuZGVybGluZV9wb3NpdGlvbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgc3RydWN0IGZv bnQgKmZvbnQ7CisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRlc2NlbnQ7CisgICAg ICAgICAgICAgICAgICBmb250PXMtPmZvbnQ7CisgICAgICAgICAgICAgICAgICBkZXNjZW50ID0g cy0+eSArIHMtPmhlaWdodCAtIHMtPnliYXNlOworICAgICAgICAgICAgICAgICAgLyogVXNlIHVu ZGVybGluZSB0aGlja25lc3Mgb2YgZm9udCwgZGVmYXVsdGluZyB0byAxLiAqLworICAgICAgICAg ICAgICAgICAgdGhpY2tuZXNzID0gKGZvbnQgJiYgZm9udC0+dW5kZXJsaW5lX3RoaWNrbmVzcyA+ IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvbnQtPnVuZGVybGluZV90aGlj a25lc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMTsKKyAgICAgICAgICAgICAg ICAgIC8qIERldGVybWluZSB0aGUgb2Zmc2V0IG9mIHVuZGVybGluaW5nIGZyb20gdGhlIGJhc2Vs aW5lLiAqLworICAgICAgICAgICAgICAgICAgaWYgKHhfdW5kZXJsaW5lX2F0X2Rlc2NlbnRfbGlu ZSkKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBkZXNjZW50IC0gdGhpY2tuZXNzOwor ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4X3VzZV91bmRlcmxpbmVfcG9zaXRpb25fcHJv cGVydGllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBmb250ICYmIGZvbnQtPnVu ZGVybGluZV9wb3NpdGlvbiA+PSAwKQorICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0g Zm9udC0+dW5kZXJsaW5lX3Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg KGZvbnQpCisgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGxyb3VuZCAoZm9udC0+ ZGVzY2VudCAvIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgICAgICAgICAgICBwb3NpdGlvbiA9IHVuZGVybGluZV9taW5pbXVtX29mZnNldDsKKyAgICAg ICAgICAgICAgICAgIHBvc2l0aW9uID0gbWF4IChwb3NpdGlvbiwgdW5kZXJsaW5lX21pbmltdW1f b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSB1bmRlcmxpbmluZyBpcyBub3Qg Y3JvcHBlZC4gKi8KKyAgICAgICAgICAgICAgICAgIGlmIChkZXNjZW50IDw9IHBvc2l0aW9uKQor ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBk ZXNjZW50IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICB0aGlja25lc3MgPSAxOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlc2NlbnQgPCBw b3NpdGlvbiArIHRoaWNrbmVzcykKKyAgICAgICAgICAgICAgICAgICAgICB0aGlja25lc3MgPSAx OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMtPnVuZGVybGluZV90aGlja25lc3Mg PSB0aGlja25lc3M7CisgICAgICAgICAgICBzLT51bmRlcmxpbmVfcG9zaXRpb24gPSBwb3NpdGlv bjsKKyAgICAgICAgICAgIHIgPSBOU01ha2VSZWN0ICh4LCBzLT55YmFzZSArIHBvc2l0aW9uLCB3 aWR0aCwgdGhpY2tuZXNzKTsKKyAgICAgICAgICAgIGlmIChmYWNlLT51bmRlcmxpbmVfZGVmYXVs dGVkX3ApCisgICAgICAgICAgICAgIFtkZWZhdWx0Q29sIHNldF07CisgICAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICBbbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKGZhY2UtPnVuZGVy bGluZV9jb2xvciwgcy0+Zikgc2V0XTsKKyAgICAgICAgICAgIE5TUmVjdEZpbGwgKHIpOworICAg ICAgICAgIH0KKyAgICB9CisgIC8qIERvIG92ZXJsaW5lLiBXZSBmb2xsb3cgb3RoZXIgdGVybXMg aW4gdXNpbmcgYSB0aGlja25lc3Mgb2YgMQorICAgICBhbmQgaWdub3Jpbmcgb3ZlcmxpbmVfbWFy Z2luLiAqLworICBpZiAoZmFjZS0+b3ZlcmxpbmVfcCkKKyAgICB7CisgICAgICBOU1JlY3QgcjsK KyAgICAgIHIgPSBOU01ha2VSZWN0ICh4LCBzLT55LCB3aWR0aCwgMSk7CisgICAgICBpZiAoZmFj ZS0+b3ZlcmxpbmVfY29sb3JfZGVmYXVsdGVkX3ApCisgICAgICAgIFtkZWZhdWx0Q29sIHNldF07 CisgICAgICAgIGVsc2UKKyAgICAgICAgICBbbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKGZhY2Ut Pm92ZXJsaW5lX2NvbG9yLCBzLT5mKSBzZXRdOworICAgICAgTlNSZWN0RmlsbCAocik7CisgICAg fQorICAvKiBEbyBzdHJpa2UtdGhyb3VnaC4gIFdlIGZvbGxvdyBvdGhlciB0ZXJtcyBmb3IgdGhp Y2tuZXNzIGFuZAorICAgICB2ZXJ0aWNhbCBwb3NpdGlvbi4qLworICBpZiAoZmFjZS0+c3RyaWtl X3Rocm91Z2hfcCkKKyAgICB7CisgICAgICBOU1JlY3QgcjsKKyAgICAgIHVuc2lnbmVkIGxvbmcg ZHk7CisgICAgICBkeSA9IGxyaW50ICgocy0+aGVpZ2h0IC0gMSkgLyAyKTsKKyAgICAgIHIgPSBO U01ha2VSZWN0ICh4LCBzLT55ICsgZHksIHdpZHRoLCAxKTsKKyAgICAgIGlmIChmYWNlLT5zdHJp a2VfdGhyb3VnaF9jb2xvcl9kZWZhdWx0ZWRfcCkKKyAgICAgICAgW2RlZmF1bHRDb2wgc2V0XTsK KyAgICAgICAgZWxzZQorICAgICAgICAgIFtuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoZmFjZS0+ c3RyaWtlX3Rocm91Z2hfY29sb3IsIHMtPmYpIHNldF07CisgICAgICBOU1JlY3RGaWxsIChyKTsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCittY19uc19kdW1wZ2x5cGhzX3N0cmV0Y2ggKHN0cnVj dCBnbHlwaF9zdHJpbmcgKnMsIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGdseXBoX3JvdyAqcm93LCBzdHJ1Y3QgbWNfbWF0cml4 IG1jX21hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdkKQoreworICBOU1Jl Y3QgclsyXTsKKyAgaW50IG4sIGk7CisgIHN0cnVjdCBmYWNlICpmYWNlOworICBOU0NvbG9yICpm Z0NvbCwgKmJnQ29sOworICBpZiAoIXMtPmJhY2tncm91bmRfZmlsbGVkX3ApCisgICAgeworICAg ICAgbiA9IG5zX2dldF9nbHlwaF9zdHJpbmdfY2xpcF9yZWN0IChzLCByKTsKKyAgICAgIGlmICgh bnNfY2xpcF90b19yZWN0IChzLT5mLCByLCBuKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgKnIg PSBOU01ha2VSZWN0IChzLT54LCBzLT55LCBzLT5iYWNrZ3JvdW5kX3dpZHRoLCBzLT5oZWlnaHQp OworICAgICAgaWYgKHMtPmhsID09IERSQVdfTU9VU0VfRkFDRSkKKyAgICAgICAgeworICAgICAg ICAgIGZhY2UgPSBGQUNFX0ZST01fSUQgKHMtPmYsIE1PVVNFX0hMX0lORk8gKHMtPmYpLT5tb3Vz ZV9mYWNlX2ZhY2VfaWQpOworICAgICAgICAgIGlmICghZmFjZSkKKyAgICAgICAgICAgIGZhY2Ug PSBGQUNFX0ZST01fSUQgKHMtPmYsIE1PVVNFX0ZBQ0VfSUQpOworICAgICAgICB9CisgICAgICAg IGVsc2UKKyAgICAgICAgIGZhY2UgPSBGQUNFX0ZST01fSUQgKHMtPmYsIHMtPmZpcnN0X2dseXBo LT5mYWNlX2lkKTsKKyAgICAgIGJnQ29sID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZB Q0VfQkFDS0dST1VORCAoZmFjZSksIHMtPmYpOworICAgICAgZmdDb2wgPSBuc19sb29rdXBfaW5k ZXhlZF9jb2xvciAoTlNfRkFDRV9GT1JFR1JPVU5EIChmYWNlKSwgcy0+Zik7CisgICAgICBmb3Ig KGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCFzLT5yb3ctPmZ1 bGxfd2lkdGhfcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IG92ZXJydW4sIGxl ZnRvdmVycnVuOworICAgICAgICAgICAgICAvKiB0cnVuY2F0ZSB0byBhdm9pZCBvdmVyd3JpdGlu ZyBmcmluZ2UgYW5kL29yIHNjcm9sbGJhciAqLworICAgICAgICAgICAgICBvdmVycnVuID0gbWF4 ICgwLCAocy0+eCArIHMtPmJhY2tncm91bmRfd2lkdGgpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtIChXSU5ET1dfQk9YX1JJR0hUX0VER0VfWCAocy0+dykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0gV0lORE9XX1JJR0hUX0ZSSU5HRV9XSURUSCAocy0+dykpKTsK KyAgICAgICAgICAgICAgICAgICAgcltpXS5zaXplLndpZHRoIC09IG92ZXJydW47CisgICAgICAg ICAgICAgIC8qIHRydW5jYXRlIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHRvIGxlZnQgb2YgdGhlIHdp bmRvdyBib3ggKi8KKyAgICAgICAgICAgICAgbGVmdG92ZXJydW4gPSAoV0lORE9XX0JPWF9MRUZU X0VER0VfWCAocy0+dykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXSU5ET1dfTEVG VF9GUklOR0VfV0lEVEggKHMtPncpKSAtIHMtPng7CisgICAgICAgICAgICAgIGlmIChsZWZ0b3Zl cnJ1biA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcltpXS5vcmln aW4ueCArPSBsZWZ0b3ZlcnJ1bjsKKyAgICAgICAgICAgICAgICAgIHJbaV0uc2l6ZS53aWR0aCAt PSBsZWZ0b3ZlcnJ1bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgW2JnQ29sIHNldF07CisgICAgICAgICAgLyogTk9URTogdW5kZXIgTlMgdGhpcyBpcyBOT1Qg dXNlZCB0byBkcmF3IGN1cnNvcnMsIGJ1dCB3ZSBtdXN0IGF2b2lkCisgICAgICAgICAgICAgb3Zl cndyaXRpbmcgY3Vyc29yICh1c3VhbGx5IHdoZW4gY3Vyc29yIG9uIGEgdGFiKSAqLworICAgICAg ICAgIGlmIChzLT5obCA9PSBEUkFXX0NVUlNPUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgLyogRklYTUU6ICBEbyB3ZSBzdGlsbCBuZWVkIHRvIHByZXZlbnQgdGhpcyBzZWN0aW9uIG9m IGNvZGUgZnJvbQorICAgICAgICAgICAgICBlcmFzaW5nIHRoZSBmYWtlIE1DX0hCQVIgdGhhdCBl eHRlbmRzIHRoZSBlbnRpcmUgbGVuZ3RoIG9mIHRoZQorICAgICAgICAgICAgICBTVFJFVENIX0dM WVBIPyAgVGhpcyBtYXkgaGF2ZSBiZWVuIGRvbmUgcHJpb3IgdG8gdGhlIGZpeCByZWxhdGluZwor ICAgICAgICAgICAgICB0byBsZWZ0L3JpZ2h0IG92ZXJ3cml0dGVuIGdseXBocy4gKi8KKyAgICAg ICAgICAgICAgcltpXS5zaXplLmhlaWdodCAtPSAxOworICAgICAgICAgICAgICAvLyAgZW51bSBm YWNlX2lkIGRlYnVnZ2luZ19mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHMtPncsIHMtPmYs IGludGVybiAoIistZGVidWdnaW5nLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgIC8vICBz dHJ1Y3QgZmFjZSAqZGVidWdnaW5nX2ZhY2UgPSBGQUNFX0ZST01fSUQgKHMtPmYsIGRlYnVnZ2lu Z19mYWNlX2lkKTsKKyAgICAgICAgICAgICAgLy8gIE5TQ29sb3IgKmNvbG9yID0gbnNfbG9va3Vw X2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdST1VORCAoZGVidWdnaW5nX2ZhY2UpLCBzLT5m KTsKKyAgICAgICAgICAgICAgLy8gIFtjb2xvciBzZXRdOworICAgICAgICAgICAgICBDR0Zsb2F0 IHggPSByW2ldLm9yaWdpbi54OworICAgICAgICAgICAgICBDR0Zsb2F0IHdpZHRoID0gd2Q7Cisg ICAgICAgICAgICAgIHJbaV0uc2l6ZS53aWR0aCAtPSB3aWR0aDsKKyAgICAgICAgICAgICAgcltp XS5vcmlnaW4ueCArPSB3aWR0aDsKKyAgICAgICAgICAgICAgTlNSZWN0RmlsbCAocltpXSk7Cisg ICAgICAgICAgICAgIC8qIERyYXcgb3ZlcmxpbmluZywgZXRjLiBvbiB0aGUgY3Vyc29yLiAqLwor ICAgICAgICAgICAgICBpZiAocy0+dy0+cGh5c19jdXJzb3JfdHlwZSA9PSBNQ19GSUxMRURfQk9Y KQorICAgICAgICAgICAgICAgIG1jX25zX2RyYXdfdGV4dF9kZWNvcmF0aW9uIChzLCBmYWNlLCBi Z0NvbCwgd2lkdGgsIHgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg IG1jX25zX2RyYXdfdGV4dF9kZWNvcmF0aW9uIChzLCBmYWNlLCBmZ0NvbCwgd2lkdGgsIHgpOwor ICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgLy8gIGludCBy eCA9IHJbaV0ub3JpZ2luLng7CisgIC8vICBpbnQgcnkgPSByW2ldLm9yaWdpbi55OworICAvLyAg aW50IHJ3ID0gcltpXS5zaXplLndpZHRoOworICAvLyAgaW50IHJoID0gcltpXS5zaXplLmhlaWdo dDsKKyAgLy8gIGZwcmludGYgKHN0ZGVyciwgIm1jX25zX2R1bXBnbHlwaHNfc3RyZXRjaDogIHZw b3MgKCVkKSB8IHJ4ICglZCkgfCByeSAoJWQpIHwgcncgKCVkKSB8IHJoICglZClcbiIsCisgIC8v ICAgICAgICAgICAgICAgICAgIHMtPmZpcnN0X2dseXBoLT52cG9zLCByeCwgcnksIHJ3LCByaCk7 CisgICAgICAgICAgICAgIE5TUmVjdEZpbGwgKHJbaV0pOworICAgICAgICAgICAgfQorICAgICAg ICAgIC8qIERyYXcgb3ZlcmxpbmluZywgZXRjLiBvbiB0aGUgc3RyZXRjaCBnbHlwaCAob3IgdGhl IHBhcnQKKyAgICAgICAgICAgICBvZiB0aGUgc3RyZXRjaCBnbHlwaCBhZnRlciB0aGUgY3Vyc29y KS4gKi8KKyAgICAgICAgICBtY19uc19kcmF3X3RleHRfZGVjb3JhdGlvbiAocywgZmFjZSwgZmdD b2wsIHJbaV0uc2l6ZS53aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcltpXS5vcmlnaW4ueCk7CisgICAgICAgIH0KKyAgICAgIGlmICgocy0+bGVmdF9vdmVyd3Jp dHRlbl9wIHx8IHMtPnJpZ2h0X292ZXJ3cml0dGVuX3ApCisgICAgICAgICAgJiYgKHMtPmFjdGlv bl90eXBlID09IE1DX0RSQVdfR0xZUEhfU1RSSU5HIHx8IHMtPmFjdGlvbl90eXBlID09IE1DX0VS QVNFX0dMWVBIX1NUUklORykpCisgICAgICAgIG1jX25zX2RyYXdfb3ZlcndyaXR0ZW4gKHMsIG1h dHJpeCwgcm93LCBtY19tYXRyaXgsIHMtPmZpcnN0X2dseXBoKTsKKyAgICAgIG5zX3Jlc2V0X2Ns aXBwaW5nIChzLT5mKTsKKyAgICAgIHMtPmJhY2tncm91bmRfZmlsbGVkX3AgPSAxOworICAgIH0K K30KKworc3RhdGljIHZvaWQKK21jX25zX2R1bXBnbHlwaHNfaW1hZ2UgKHN0cnVjdCBnbHlwaF9z dHJpbmcgKnMsIE5TUmVjdCByLCBzdHJ1Y3QgbWNfUkdCIGxzbCwKKyAgICAgICAgICAgICAgICAg ICAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciwgZW51bSBtY19jdXJzb3JfdHlwZSBj dXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWN0aXZlX3ApCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICAgICAgUmVuZGVycyBhbiBpbWFnZSBhbmQgYXNzb2NpYXRlZCBi b3JkZXJzLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3sKKyAgRW1hY3NJbWFnZSAqaW1nID0g cy0+aW1nLT5waXhtYXA7CisgIGludCBib3hfbGluZV92d2lkdGggPSBtYXggKHMtPmZhY2UtPmJv eF9saW5lX3dpZHRoLCAwKTsKKyAgaW50IHggPSBzLT54LCB5ID0gcy0+eWJhc2UgLSBpbWFnZV9h c2NlbnQgKHMtPmltZywgcy0+ZmFjZSwgJnMtPnNsaWNlKTsKKyAgaW50IGJnX3gsIGJnX3ksIGJn X2hlaWdodDsKKyAgaW50IHRoOworICBjaGFyIHJhaXNlZF9wOworICBOU1JlY3QgYnI7CisgIHN0 cnVjdCBmYWNlICpmYWNlOworICBOU0NvbG9yICp0ZENvbDsKKyAgTlNUUkFDRSAoIm1jX25zX2R1 bXBnbHlwaHNfaW1hZ2UiKTsKKyAgaWYgKHMtPmZhY2UtPmJveCAhPSBGQUNFX05PX0JPWAorICAg ICAgJiYgcy0+Zmlyc3RfZ2x5cGgtPmxlZnRfYm94X2xpbmVfcCAmJiBzLT5zbGljZS54ID09IDAp CisgICAgeCArPSBhYnMgKHMtPmZhY2UtPmJveF9saW5lX3dpZHRoKTsKKyAgYmdfeCA9IHg7Cisg IGJnX3kgPSAgcy0+c2xpY2UueSA9PSAwID8gcy0+eSA6IHMtPnkgKyBib3hfbGluZV92d2lkdGg7 CisgIGJnX2hlaWdodCA9IHMtPmhlaWdodDsKKyAgLyogb3RoZXIgdGVybXMgaGF2ZSB0aGlzLCBi dXQgd2FzIGNhdXNpbmcgcHJvYmxlbXMgdy90YWJiYXIgbW9kZSAqLworICAvKiAtIDIgKiBib3hf bGluZV92d2lkdGg7ICovCisgIGlmIChzLT5zbGljZS54ID09IDApIHggKz0gcy0+aW1nLT5obWFy Z2luOworICBpZiAocy0+c2xpY2UueSA9PSAwKSB5ICs9IHMtPmltZy0+dm1hcmdpbjsKKyAgLyog RHJhdyBCRzogaWYgd2UgbmVlZCBsYXJnZXIgYXJlYSB0aGFuIGltYWdlIGl0c2VsZiBjbGVhcmVk LCBkbyB0aGF0LAorICAgICBvdGhlcndpc2UsIHNpbmNlIHdlIGNvbXBvc2l0ZSB0aGUgaW1hZ2Ug dW5kZXIgTlMgKGluc3RlYWQgb2YgbXVja2luZworICAgICB3aXRoIGl0cyBiYWNrZ3JvdW5kIGNv bG9yKSwgd2UgbXVzdCBjbGVhciBqdXN0IHRoZSBpbWFnZSBhcmVhLiAqLworICBpZiAocy0+aGwg PT0gRFJBV19NT1VTRV9GQUNFKQorICAgIHsKKyAgICAgIGZhY2UgPSBGQUNFX0ZST01fSUQgKHMt PmYsIE1PVVNFX0hMX0lORk8gKHMtPmYpLT5tb3VzZV9mYWNlX2ZhY2VfaWQpOworICAgICAgaWYg KCFmYWNlKQorICAgICAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBNT1VTRV9GQUNFX0lE KTsKKyAgICB9CisgIGVsc2UKKyAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBzLT5maXJz dF9nbHlwaC0+ZmFjZV9pZCk7CisgIFtuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9C QUNLR1JPVU5EIChmYWNlKSwgcy0+Zikgc2V0XTsKKyAgaWYgKGJnX2hlaWdodCA+IHMtPnNsaWNl LmhlaWdodCB8fCBzLT5pbWctPmhtYXJnaW4gfHwgcy0+aW1nLT52bWFyZ2luCisgICAgICB8fCBz LT5pbWctPm1hc2sgfHwgcy0+aW1nLT5waXhtYXAgPT0gMCB8fCBzLT53aWR0aCAhPSBzLT5iYWNr Z3JvdW5kX3dpZHRoKQorICAgIHsKKyAgICAgIGJyID0gTlNNYWtlUmVjdCAoYmdfeCwgYmdfeSwg cy0+YmFja2dyb3VuZF93aWR0aCwgYmdfaGVpZ2h0KTsKKyAgICAgIHMtPmJhY2tncm91bmRfZmls bGVkX3AgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgICBiciA9IE5TTWFrZVJlY3QgKHgsIHks IHMtPnNsaWNlLndpZHRoLCBzLT5zbGljZS5oZWlnaHQpOworICBOU1JlY3RGaWxsIChicik7Cisg IC8qIERyYXcgdGhlIGltYWdlLi4gZG8gd2UgbmVlZCB0byBkcmF3IHBsYWNlaG9sZGVyIGlmIGlt ZyA9PW5pbD8gKi8KKyAgaWYgKGltZyAhPSBuaWwpCisgICAgeworI2lmZGVmIE5TX0lNUExfQ09D T0EKKyAgICAgIE5TUmVjdCBkciA9IE5TTWFrZVJlY3QgKHgsIHksIHMtPnNsaWNlLndpZHRoLCBz LT5zbGljZS5oZWlnaHQpOworICAgICAgTlNSZWN0IGlyID0gTlNNYWtlUmVjdCAocy0+c2xpY2Uu eCwgcy0+c2xpY2UueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnNsaWNlLndp ZHRoLCBzLT5zbGljZS5oZWlnaHQpOworICAgICAgW2ltZyBkcmF3SW5SZWN0OiBkcgorICAgICAg ICAgICAgIGZyb21SZWN0OiBpcgorICAgICAgICAgICAgIG9wZXJhdGlvbjogTlNDb21wb3NpdGVT b3VyY2VPdmVyCisgICAgICAgICAgICAgIGZyYWN0aW9uOiAxLjAKKyAgICAgICAgICAgcmVzcGVj dEZsaXBwZWQ6IFlFUworICAgICAgICAgICAgICAgIGhpbnRzOiBuaWxdOworI2Vsc2UKKyAgICAg IFtpbWcgY29tcG9zaXRlVG9Qb2ludDogTlNNYWtlUG9pbnQgKHgsIHkgKyBzLT5zbGljZS5oZWln aHQpCisgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IE5TQ29tcG9zaXRlU291cmNlT3Zlcl07 CisjZW5kaWYKKyAgICB9CisgIGlmIChzLT5obCA9PSBEUkFXX0NVUlNPUikKKyAgICB7CisgICAg ICBbRlJBTUVfQ1VSU09SX0NPTE9SIChzLT5mKSBzZXRdOworICAgICAgaWYgKHMtPnctPnBoeXNf Y3Vyc29yX3R5cGUgPT0gTUNfRklMTEVEX0JPWCkKKyAgICAgICAgdGRDb2wgPSBuc19sb29rdXBf aW5kZXhlZF9jb2xvciAoTlNfRkFDRV9CQUNLR1JPVU5EIChmYWNlKSwgcy0+Zik7CisgICAgICAg IGVsc2UKKyAgICAgICAgICAvKiBDdXJyZW50bHkgb24gTlMgaW1nLT5tYXNrIGlzIGFsd2F5cyAw LiBTaW5jZQorICAgICAgICAgICAgIGdldF93aW5kb3dfY3Vyc29yX3R5cGUgc3BlY2lmaWVzIGEg aG9sbG93IGJveCBjdXJzb3Igd2hlbiBvbgorICAgICAgICAgICAgIGEgbm9uLW1hc2tlZCBpbWFn ZSB3ZSBuZXZlciByZWFjaCB0aGlzIGNsYXVzZS4gQnV0IHdlIHB1dCBpdAorICAgICAgICAgICAg IGluIGluIGFudGljaXBhdGlvbiBvZiBiZXR0ZXIgc3VwcG9ydCBmb3IgaW1hZ2UgbWFza3Mgb24g TlMuICovCisgICAgICAgICAgdGRDb2wgPSBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFD RV9GT1JFR1JPVU5EIChmYWNlKSwgcy0+Zik7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHRkQ29s ID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdST1VORCAoZmFjZSksIHMt PmYpOworICAvKiBEcmF3IHVuZGVybGluZSwgb3ZlcmxpbmUsIHN0cmlrZS10aHJvdWdoLiAqLwor ICBtY19uc19kcmF3X3RleHRfZGVjb3JhdGlvbiAocywgZmFjZSwgdGRDb2wsIGJyLnNpemUud2lk dGgsIGJyLm9yaWdpbi54KTsKKyAgLyogRHJhdyByZWxpZWYsIGlmIHJlcXVlc3RlZCAqLworICBp ZiAocy0+aW1nLT5yZWxpZWYgfHwgcy0+aGwgPT1EUkFXX0lNQUdFX1JBSVNFRCB8fCBzLT5obCA9 PURSQVdfSU1BR0VfU1VOS0VOKQorICAgIHsKKyAgICAgIGlmIChzLT5obCA9PSBEUkFXX0lNQUdF X1NVTktFTiB8fCBzLT5obCA9PSBEUkFXX0lNQUdFX1JBSVNFRCkKKyAgICAgICAgeworICAgICAg ICAgIHRoID0gdG9vbF9iYXJfYnV0dG9uX3JlbGllZiA+PSAwID8KKyAgICAgICAgICAgIHRvb2xf YmFyX2J1dHRvbl9yZWxpZWYgOiBERUZBVUxUX1RPT0xfQkFSX0JVVFRPTl9SRUxJRUY7CisgICAg ICAgICAgcmFpc2VkX3AgPSAocy0+aGwgPT0gRFJBV19JTUFHRV9SQUlTRUQpOworICAgICAgICB9 CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICB0aCA9IGFicyAocy0+aW1n LT5yZWxpZWYpOworICAgICAgICAgICAgcmFpc2VkX3AgPSAocy0+aW1nLT5yZWxpZWYgPiAwKTsK KyAgICAgICAgICB9CisgICAgICByLm9yaWdpbi54ID0geCAtIHRoOworICAgICAgci5vcmlnaW4u eSA9IHkgLSB0aDsKKyAgICAgIHIuc2l6ZS53aWR0aCA9IHMtPnNsaWNlLndpZHRoICsgMip0aC0x OworICAgICAgci5zaXplLmhlaWdodCA9IHMtPnNsaWNlLmhlaWdodCArIDIqdGgtMTsKKyAgICAg IG5zX2RyYXdfcmVsaWVmIChyLCB0aCwgcmFpc2VkX3AsCisgICAgICAgICAgICAgICAgICAgICAg cy0+c2xpY2UueSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgIHMtPnNsaWNlLnkgKyBzLT5z bGljZS5oZWlnaHQgPT0gcy0+aW1nLT5oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgcy0+ c2xpY2UueCA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgIHMtPnNsaWNlLnggKyBzLT5zbGlj ZS53aWR0aCA9PSBzLT5pbWctPndpZHRoLCBzKTsKKyAgICB9CisgIC8qIElmIHRoZXJlIGlzIG5v IG1hc2ssIHRoZSBiYWNrZ3JvdW5kIHdvbid0IGJlIHNlZW4sCisgICAgIHNvIGRyYXcgYSByZWN0 YW5nbGUgb24gdGhlIGltYWdlIGZvciB0aGUgY3Vyc29yLgorICAgICBEbyB0aGlzIGZvciBhbGwg aW1hZ2VzLCBnZXR0aW5nIHRyYW5zcGFyZW5jeSByaWdodCBpcyBub3QgcmVsaWFibGUuICovCisg IGlmIChzLT5obCA9PSBEUkFXX0NVUlNPUikKKyAgICB7CisgICAgICBpbnQgdGhpY2tuZXNzID0g YWJzIChzLT5pbWctPnJlbGllZik7CisgICAgICBpZiAodGhpY2tuZXNzID09IDApIHRoaWNrbmVz cyA9IDE7CisgICAgaWYgKGdseXBoX2ZsYXZvciA9PSBNQ19HTFlQSAorICAgICAgICB8fCBnbHlw aF9mbGF2b3IgPT0gTUNfR0xZUEhMRVNTKQorICAgICAgeworICAgICAgICBOU0NvbG9yICpib3Jk ZXJfY29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhDYWxpYnJhdGVkUmVkOiBsc2wucmVkCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Jl ZW46IGxzbC5ncmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBibHVlOiBsc2wuYmx1ZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhOiAxLjBdOworICAgICAgICBu c19kcmF3X2JveCAoYnIsIHRoaWNrbmVzcywgYm9yZGVyX2NvbG9yLCAxLCAxKTsKKyAgICAgIH0K KyAgICAgIGVsc2UKKyAgICAgICAgbnNfZHJhd19ib3ggKGJyLCB0aGlja25lc3MsIEZSQU1FX0NV UlNPUl9DT0xPUiAocy0+ZiksIDEsIDEpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK21jX25z X21heWJlX2R1bXBnbHlwaHNfYmFja2dyb3VuZCAoc3RydWN0IGdseXBoX3N0cmluZyAqcywgY2hh ciBmb3JjZV9wKQoreworICBOU1RSQUNFICgibWNfbnNfbWF5YmVfZHVtcGdseXBoc19iYWNrZ3Jv dW5kIik7CisgIGlmICghcy0+YmFja2dyb3VuZF9maWxsZWRfcC8qIHx8IHMtPmhsID09IERSQVdf TU9VU0VfRkFDRSovKQorICAgIHsKKyAgICAgIGludCBib3hfbGluZV93aWR0aCA9IG1heCAocy0+ ZmFjZS0+Ym94X2xpbmVfd2lkdGgsIDApOworICAgICAgaWYgKEZPTlRfSEVJR0hUIChzLT5mb250 KSA8IHMtPmhlaWdodCAtIDIgKiBib3hfbGluZV93aWR0aAorICAgICAgICAgIC8qIFdoZW4geGRp c3AuYyBpZ25vcmVzIEZPTlRfSEVJR0hULCB3ZSBjYW5ub3QgdHJ1c3QgZm9udAorICAgICAgICAg ICAgIGRpbWVuc2lvbnMsIHNpbmNlIHRoZSBhY3R1YWwgZ2x5cGhzIG1pZ2h0IGJlIG11Y2gKKyAg ICAgICAgICAgICBzbWFsbGVyLiAgU28gaW4gdGhhdCBjYXNlIHdlIGFsd2F5cyBjbGVhciB0aGUg cmVjdGFuZ2xlCisgICAgICAgICAgICAgd2l0aCBiYWNrZ3JvdW5kIGNvbG9yLiAqLworICAgICAg ICAgIHx8IEZPTlRfVE9PX0hJR0ggKHMtPmZvbnQpCisgICAgICAgICAgfHwgcy0+Zm9udF9ub3Rf Zm91bmRfcCB8fCBzLT5leHRlbmRzX3RvX2VuZF9vZl9saW5lX3AgfHwgZm9yY2VfcCkKKyAgICAg ICAgeworICAgICAgICAgIHN0cnVjdCBmYWNlICpmYWNlOworICAgICAgICAgIGlmIChzLT5obCA9 PSBEUkFXX01PVVNFX0ZBQ0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZhY2UgPSBG QUNFX0ZST01fSUQgKHMtPmYsIE1PVVNFX0hMX0lORk8gKHMtPmYpLT5tb3VzZV9mYWNlX2ZhY2Vf aWQpOworICAgICAgICAgICAgICBpZiAoIWZhY2UpCisgICAgICAgICAgICAgICAgZmFjZSA9IEZB Q0VfRlJPTV9JRCAocy0+ZiwgTU9VU0VfRkFDRV9JRCk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgIGZhY2UgPSBGQUNFX0ZST01fSUQgKHMtPmYsIHMtPmZp cnN0X2dseXBoLT5mYWNlX2lkKTsKKyAgICAgICAgICBpZiAoIWZhY2UtPnN0aXBwbGUpCisgICAg ICAgICAgICBbKE5TX0ZBQ0VfQkFDS0dST1VORCAoZmFjZSkgIT0gMAorICAgICAgICAgICAgICA/ IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0JBQ0tHUk9VTkQgKGZhY2UpLCBzLT5m KQorICAgICAgICAgICAgICA6IEZSQU1FX0JBQ0tHUk9VTkRfQ09MT1IgKHMtPmYpKSBzZXRdOwor ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RydWN0 IG5zX2Rpc3BsYXlfaW5mbyAqZHB5aW5mbyA9IEZSQU1FX0RJU1BMQVlfSU5GTyAocy0+Zik7Cisg ICAgICAgICAgICAgICAgW1tkcHlpbmZvLT5iaXRtYXBzW2ZhY2UtPnN0aXBwbGUtMV0uaW1nIHN0 aXBwbGVNYXNrXSBzZXRdOworICAgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKHMtPmhsICE9 IERSQVdfQ1VSU09SKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzLT5yZWN0YW5nbGVf bnVrZWRfcCA9IHRydWU7CisgICAgICAgICAgICAgIE5TUmVjdCByID0gTlNNYWtlUmVjdCAocy0+ eCwgcy0+eSArIGJveF9saW5lX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcy0+YmFja2dyb3VuZF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHMtPmhlaWdodC0yKmJveF9saW5lX3dpZHRoKTsKKyAgICAgICAgICAgICAgTlNSZWN0 RmlsbCAocik7CisgICAgICAgICAgICB9CisgICAgICAgICAgcy0+YmFja2dyb3VuZF9maWxsZWRf cCA9IDE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCittY19uc19kcmF3X2ds eXBoX3N0cmluZyAoc3RydWN0IGdseXBoX3N0cmluZyAqcywgc3RydWN0IGdseXBoX21hdHJpeCAq bWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywg c3RydWN0IG1jX21hdHJpeCBtY19tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IG1jX1JHQiBsc2wsIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBlbnVtIG1jX2N1cnNvcl90eXBlIGN1cnNvcl90eXBlLCBpbnQgd2QsIGJv b2wgYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdXJzb3JfZ2NfcCkK Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICBFeHRlcm5hbCAoUklGKTogTWFpbiBkcmF3LXRl eHQgY2FsbC4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit7CisgIE5TUmVjdCByWzJdOworICBp bnQgbjsKKyAgY2hhciBib3hfZHJhd25fcCA9IDA7CisgIHN0cnVjdCBmb250ICpmb250ID0gcy0+ ZmFjZS0+Zm9udDsKKyAgaWYgKCFmb250KQorICAgIGZvbnQgPSBGUkFNRV9GT05UIChzLT5mKTsK KyAgTlNUUkFDRV9XSEVOIChOU1RSQUNFX0dST1VQX0dMWVBIUywgIm1jX25zX2RyYXdfZ2x5cGhf c3RyaW5nIik7CisgIGlmIChzLT5uZXh0ICYmIHMtPnJpZ2h0X292ZXJoYW5nICYmICFzLT5mb3Jf b3ZlcmxhcHMpCisgICAgeworICAgICAgaW50IHdpZHRoOworICAgICAgc3RydWN0IGdseXBoX3N0 cmluZyAqbmV4dDsKKyAgICAgIGZvciAod2lkdGggPSAwLCBuZXh0ID0gcy0+bmV4dDsKKyAgICAg ICAgICAgbmV4dCAmJiB3aWR0aCA8IHMtPnJpZ2h0X292ZXJoYW5nOworICAgICAgICAgICB3aWR0 aCArPSBuZXh0LT53aWR0aCwgbmV4dCA9IG5leHQtPm5leHQpCisgICAgICAgIGlmIChuZXh0LT5m aXJzdF9nbHlwaC0+dHlwZSAhPSBJTUFHRV9HTFlQSCkKKyAgICAgICAgICB7CisgICAgICAgICAg ICBpZiAobmV4dC0+Zmlyc3RfZ2x5cGgtPnR5cGUgIT0gU1RSRVRDSF9HTFlQSCkKKyAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIG4gPSBuc19nZXRfZ2x5cGhfc3RyaW5nX2NsaXBfcmVj dCAocy0+bmV4dCwgcik7CisgICAgICAgICAgICAgICAgaWYgKCFuc19jbGlwX3RvX3JlY3QgKHMt PmYsIHIsIG4pKQorICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIG1j X25zX21heWJlX2R1bXBnbHlwaHNfYmFja2dyb3VuZCAocy0+bmV4dCwgMSk7CisgICAgICAgICAg ICAgICAgbnNfcmVzZXRfY2xpcHBpbmcgKHMtPmYpOworICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtY19uc19kdW1wZ2x5cGhzX3N0cmV0Y2ggKHMt Pm5leHQsIG1hdHJpeCwgcm93LCBtY19tYXRyaXgsIHdkKTsKKyAgICAgICAgICAgIG5leHQtPm51 bV9jbGlwcyA9IDA7CisgICAgICAgICAgfQorICAgIH0KKyAgaWYgKCFzLT5mb3Jfb3ZlcmxhcHMg JiYgcy0+ZmFjZS0+Ym94ICE9IEZBQ0VfTk9fQk9YCisgICAgICAmJiAocy0+Zmlyc3RfZ2x5cGgt PnR5cGUgPT0gQ0hBUl9HTFlQSAorICAgICAgICAgIHx8IHMtPmZpcnN0X2dseXBoLT50eXBlID09 IENPTVBPU0lURV9HTFlQSCkpCisgICAgeworICAgICAgbiA9IG5zX2dldF9nbHlwaF9zdHJpbmdf Y2xpcF9yZWN0IChzLCByKTsKKyAgICAgIGlmICghbnNfY2xpcF90b19yZWN0IChzLT5mLCByLCBu KSkKKyAgICAgICAgcmV0dXJuOworICAgICAgbWNfbnNfbWF5YmVfZHVtcGdseXBoc19iYWNrZ3Jv dW5kIChzLCAxKTsKKyAgICAgIG5zX2R1bXBnbHlwaHNfYm94X29yX3JlbGllZiAocyk7CisgICAg ICBuc19yZXNldF9jbGlwcGluZyAocy0+Zik7CisgICAgICBib3hfZHJhd25fcCA9IDE7CisgICAg fQorICBzd2l0Y2ggKHMtPmZpcnN0X2dseXBoLT50eXBlKQorICAgIHsKKyAgICBjYXNlIElNQUdF X0dMWVBIOgorICAgICAgbiA9IG5zX2dldF9nbHlwaF9zdHJpbmdfY2xpcF9yZWN0IChzLCByKTsK KyAgICAgIGlmICghbnNfY2xpcF90b19yZWN0IChzLT5mLCByLCBuKSkKKyAgICAgICAgcmV0dXJu OworICAgICAgbWNfbnNfZHVtcGdseXBoc19pbWFnZSAocywgclswXSwgbHNsLCBnbHlwaF9mbGF2 b3IsIGN1cnNvcl90eXBlLCBhY3RpdmVfcCk7CisgICAgICBuc19yZXNldF9jbGlwcGluZyAocy0+ Zik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNUUkVUQ0hfR0xZUEg6CisgICAgICBtY19uc19k dW1wZ2x5cGhzX3N0cmV0Y2ggKHMsIG1hdHJpeCwgcm93LCBtY19tYXRyaXgsIHdkKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgQ0hBUl9HTFlQSDoKKyAgICBjYXNlIENPTVBPU0lURV9HTFlQSDoK KyAgICAgIG4gPSBuc19nZXRfZ2x5cGhfc3RyaW5nX2NsaXBfcmVjdCAocywgcik7CisgICAgICBp ZiAoIW5zX2NsaXBfdG9fcmVjdCAocy0+ZiwgciwgbikpCisgICAgICAgIHJldHVybjsKKyAgICAg IGlmIChzLT5mb3Jfb3ZlcmxhcHMKKyAgICAgICAgICB8fCAocy0+Y21wX2Zyb20gPiAwCisgICAg ICAgICAgICAgICYmICEgcy0+Zmlyc3RfZ2x5cGgtPnUuY21wLmF1dG9tYXRpYykpCisgICAgICAg IHMtPmJhY2tncm91bmRfZmlsbGVkX3AgPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgbWNf bnNfbWF5YmVfZHVtcGdseXBoc19iYWNrZ3JvdW5kIChzLCBzLT5maXJzdF9nbHlwaC0+dHlwZSA9 PSBDT01QT1NJVEVfR0xZUEgpOworICAgICAgaW50IGZsYWdzID0gKHMtPmhsID09IERSQVdfQ1VS U09SKQorICAgICAgICAgICAgICAgICAgICA/IE5TX0RVTVBHTFlQSF9DVVJTT1IKKyAgICAgICAg ICAgICAgICAgIDogKHMtPmhsID09IERSQVdfTU9VU0VfRkFDRSkKKyAgICAgICAgICAgICAgICAg ICAgPyBOU19EVU1QR0xZUEhfTU9VU0VGQUNFCisgICAgICAgICAgICAgICAgICA6IChzLT5mb3Jf b3ZlcmxhcHMpCisgICAgICAgICAgICAgICAgICAgID8gTlNfRFVNUEdMWVBIX0ZPUkVHUk9VTkQK KyAgICAgICAgICAgICAgICAgIDogTlNfRFVNUEdMWVBIX05PUk1BTDsKKyAgICAgIHVuc2lnbmVk IGxvbmcgc2F2ZWRfZmcgPSBOU19GQUNFX0ZPUkVHUk9VTkQgKHMtPmZhY2UpOworICAgICAgaWYg KHMtPmhsID09IERSQVdfQ1VSU09SICYmIGN1cnNvcl90eXBlID09IE1DX0ZJTExFRF9CT1gpCisg ICAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIHRtcCA9IE5TX0ZBQ0VfQkFDS0dST1VO RCAocy0+ZmFjZSk7CisgICAgICAgICAgTlNfRkFDRV9CQUNLR1JPVU5EIChzLT5mYWNlKSA9IE5T X0ZBQ0VfRk9SRUdST1VORCAocy0+ZmFjZSk7CisgICAgICAgICAgTlNfRkFDRV9GT1JFR1JPVU5E IChzLT5mYWNlKSA9IHRtcDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzLT5obCA9PSBE UkFXX0NVUlNPUgorICAgICAgICAgICAgICAgICAmJiBjdXJzb3JfdHlwZSA9PSBNQ19GUkFNRURf Qk9YCisgICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wKQorICAgICAgICAgIHsKKyAgICAgICAg ICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQgPQorICAgICAgICAgICAgICBs b29rdXBfbmFtZWRfZmFjZSAocy0+dywgcy0+ZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29y LXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19h Y3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAocy0+ZiwgaG9sbG93X2FjdGl2ZV9mYWNlX2lkKTsK KyAgICAgICAgICAgIE5TX0ZBQ0VfRk9SRUdST1VORCAocy0+ZmFjZSkgPSBOU19GQUNFX0ZPUkVH Uk9VTkQgKGhvbGxvd19hY3RpdmVfZmFjZSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2Ug aWYgKHMtPmhsID09IERSQVdfQ1VSU09SCisgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX3R5 cGUgPT0gTUNfRlJBTUVEX0JPWAorICAgICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2luYWN0aXZlX2Zh Y2VfaWQgPQorICAgICAgICAgICAgICAgIGxvb2t1cF9uYW1lZF9mYWNlIChzLT53LCBzLT5mLCBp bnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7 CisgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfaW5hY3RpdmVfZmFjZSA9IEZBQ0Vf RlJPTV9JRCAocy0+ZiwgaG9sbG93X2luYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICBO U19GQUNFX0ZPUkVHUk9VTkQgKHMtPmZhY2UpID0gTlNfRkFDRV9GT1JFR1JPVU5EIChob2xsb3df aW5hY3RpdmVfZmFjZSk7CisgICAgICAgICAgICB9CisgICAgICBpZiAocy0+Zmlyc3RfZ2x5cGgt PnR5cGUgPT0gQ09NUE9TSVRFX0dMWVBIKQorICAgICAgICBuc19kcmF3X2NvbXBvc2l0ZV9nbHlw aF9zdHJpbmdfZm9yZWdyb3VuZCAocyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAg ICAgICAgICBib29sIHdpdGhfYmdfcCA9ICgoZmxhZ3MgPT0gTlNfRFVNUEdMWVBIX05PUk1BTCAm JiAhcy0+YmFja2dyb3VuZF9maWxsZWRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHx8IGZsYWdzID09IE5TX0RVTVBHTFlQSF9NT1VTRUZBQ0UpOworICAgICAgICAgICAgaWYgKHdp dGhfYmdfcCkKKyAgICAgICAgICAgICAgcy0+YmFja2dyb3VuZF9udWtlZF9wID0gdHJ1ZTsKKyAg ICAgICAgICAgIGZvbnQtPmRyaXZlci0+ZHJhdyAocywgcy0+Y21wX2Zyb20sIHMtPm5jaGFycywg cy0+eCwgcy0+eWJhc2UsIHdpdGhfYmdfcCk7CisgICAgICAgICAgfQorICAgICAgTlNDb2xvciAq Y29sID0gKE5TX0ZBQ0VfRk9SRUdST1VORCAocy0+ZmFjZSkgIT0gMAorICAgICAgICAgICAgICAg ICAgICAgPyBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9GT1JFR1JPVU5EIChzLT5m YWNlKSwgcy0+ZikKKyAgICAgICAgICAgICAgICAgICAgIDogRlJBTUVfRk9SRUdST1VORF9DT0xP UiAocy0+ZikpOworICAgICAgW2NvbCBzZXRdOworICAgICAgLyogRHJhdyB1bmRlcmxpbmUsIG92 ZXJsaW5lLCBzdHJpa2UtdGhyb3VnaC4gKi8KKyAgICAgIG1jX25zX2RyYXdfdGV4dF9kZWNvcmF0 aW9uIChzLCBzLT5mYWNlLCBjb2wsIHMtPndpZHRoLCBzLT54KTsKKyAgICAgIGlmIChzLT5maXJz dF9nbHlwaC0+dHlwZSAhPSBDT01QT1NJVEVfR0xZUEgKKyAgICAgICAgICAmJiAocy0+bGVmdF9v dmVyd3JpdHRlbl9wIHx8IHMtPnJpZ2h0X292ZXJ3cml0dGVuX3ApCisgICAgICAgICAgJiYgKHMt PmJhY2tncm91bmRfbnVrZWRfcCB8fCBzLT5yZWN0YW5nbGVfbnVrZWRfcCkKKyAgICAgICAgICAm JiAocy0+YWN0aW9uX3R5cGUgPT0gTUNfRFJBV19HTFlQSF9TVFJJTkcgfHwgcy0+YWN0aW9uX3R5 cGUgPT0gTUNfRVJBU0VfR0xZUEhfU1RSSU5HKSkKKyAgICAgICAgbWNfbnNfZHJhd19vdmVyd3Jp dHRlbiAocywgbWF0cml4LCByb3csIG1jX21hdHJpeCwgcy0+Zmlyc3RfZ2x5cGgpOworICAgICAg aWYgKHMtPmhsID09IERSQVdfQ1VSU09SCisgICAgICAgICAgJiYgY3Vyc29yX3R5cGUgPT0gTUNf RklMTEVEX0JPWCkKKyAgICAgICAgeworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdG1wID0gTlNf RkFDRV9CQUNLR1JPVU5EIChzLT5mYWNlKTsKKyAgICAgICAgICBOU19GQUNFX0JBQ0tHUk9VTkQg KHMtPmZhY2UpID0gTlNfRkFDRV9GT1JFR1JPVU5EIChzLT5mYWNlKTsKKyAgICAgICAgICBOU19G QUNFX0ZPUkVHUk9VTkQgKHMtPmZhY2UpID0gdG1wOworICAgICAgICB9CisgICAgICAgIGVsc2Ug aWYgKHMtPmhsID09IERSQVdfQ1VSU09SCisgICAgICAgICAgICAgICAgICYmIGN1cnNvcl90eXBl ID09IE1DX0ZSQU1FRF9CT1gpCisgICAgICAgICAgTlNfRkFDRV9GT1JFR1JPVU5EIChzLT5mYWNl KSA9IHNhdmVkX2ZnOworICAgICAgbnNfcmVzZXRfY2xpcHBpbmcgKHMtPmYpOworICAgICAgYnJl YWs7CisgICAgY2FzZSBHTFlQSExFU1NfR0xZUEg6CisgICAgICBuID0gbnNfZ2V0X2dseXBoX3N0 cmluZ19jbGlwX3JlY3QgKHMsIHIpOworICAgICAgaWYgKCFuc19jbGlwX3RvX3JlY3QgKHMtPmYs IHIsIG4pKQorICAgICAgICByZXR1cm47CisgICAgICBpZiAocy0+Zm9yX292ZXJsYXBzCisgICAg ICAgICAgfHwgKHMtPmNtcF9mcm9tID4gMAorICAgICAgICAgICAgICAmJiAhIHMtPmZpcnN0X2ds eXBoLT51LmNtcC5hdXRvbWF0aWMpKQorICAgICAgICBzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wID0g MTsKKyAgICAgIGVsc2UKKyAgICAgICAgbWNfbnNfbWF5YmVfZHVtcGdseXBoc19iYWNrZ3JvdW5k IChzLCBzLT5maXJzdF9nbHlwaC0+dHlwZSA9PSBDT01QT1NJVEVfR0xZUEgpOworICAgICAgbnNf cmVzZXRfY2xpcHBpbmcgKHMtPmYpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg IGVtYWNzX2Fib3J0ICgpOworICAgIH0KKyAgLyogRHJhdyBib3ggaWYgbm90IGRvbmUgYWxyZWFk eS4gKi8KKyAgaWYgKCFzLT5mb3Jfb3ZlcmxhcHMKKyAgICAgICYmICFib3hfZHJhd25fcAorICAg ICAgJiYgcy0+ZmFjZS0+Ym94ICE9IEZBQ0VfTk9fQk9YKQorICAgIHsKKyAgICAgIG4gPSBuc19n ZXRfZ2x5cGhfc3RyaW5nX2NsaXBfcmVjdCAocywgcik7CisgICAgICBpZiAoIW5zX2NsaXBfdG9f cmVjdCAocy0+ZiwgciwgbikpCisgICAgICAgIHJldHVybjsKKyAgICAgIG5zX2R1bXBnbHlwaHNf Ym94X29yX3JlbGllZiAocyk7CisgICAgICBuc19yZXNldF9jbGlwcGluZyAocy0+Zik7CisgICAg fQorICBzLT5udW1fY2xpcHMgPSAwOworfQorCisvKiBlbmQgTVVMVElQTEUtQ1VSU09SUyAqLwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisKKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAg TlNUUkFDRSwgVHJhY2Ugc3VwcG9ydC4KQEAgLTEwNzksNiArMjA1MiwxNiBAQCBzdGF0aWMgTlNS ZWN0IGNvbnN0cmFpbl9mcmFtZV9yZWN0KE5TUmVjdCBmcmFtZVJlY3QsIGJvb2wgaXNGdWxsc2Ny ZWVuKQogICAgZXh0ZXJuYWwgKFJJRikgY2FsbDsgd2hvbGUgZnJhbWUsIGNhbGxlZCBiZWZvcmUg Z3VpX3VwZGF0ZV93aW5kb3dfYmVnaW4KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiB7CisKKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgZi0+ bWNfdXBkYXRpbmdfZnJhbWUgPSBmOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAj aWZkZWYgTlNfSU1QTF9DT0NPQQogICBFbWFjc1ZpZXcgKnZpZXcgPSBGUkFNRV9OU19WSUVXIChm KTsKIApAQCAtMTEwOSw2ICsyMDkyLDE2IEBAIHN0YXRpYyBOU1JlY3QgY29uc3RyYWluX2ZyYW1l X3JlY3QoTlNSZWN0IGZyYW1lUmVjdCwgYm9vbCBpc0Z1bGxzY3JlZW4pCiAKIC8qICAgaWYgKGYg PT0gTU9VU0VfSExfSU5GTyAoZiktPm1vdXNlX2ZhY2VfbW91c2VfZnJhbWUpICovCiAgIE1PVVNF X0hMX0lORk8gKGYpLT5tb3VzZV9mYWNlX2RlZmVyID0gMDsKKworCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBmLT5tY191cGRhdGluZ19mcmFt ZSA9IE5VTEw7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIH0KIAogCkBAIC00NzU5 LDYgKzU3NTIsMTcgQEAgaW4gY2VydGFpbiBzaXR1YXRpb25zIChyYXBpZCBpbmNvbWluZyBldmVu dHMpLgogICAgICAgYmFyID0gW1tFbWFjc1Njcm9sbGVyIGFsbG9jXSBpbml0RnJhbWU6IHIgd2lu ZG93OiB3aW5dOwogICAgICAgd3NldF92ZXJ0aWNhbF9zY3JvbGxfYmFyICh3aW5kb3csIG1ha2Vf bWludF9wdHIgKGJhcikpOwogICAgICAgdXBkYXRlX3AgPSBZRVM7CisKKworLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgICAgIC8qIFRoaXMgaXMg b25seSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiAqLworICAgICAgW2JhciBtY19zZXRfcmVjdGFu Z2xlOiByXTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgIH0KICAgZWxzZQog ICAgIHsKQEAgLTQ3NjYsMTIgKzU3NzAsMzAgQEAgaW4gY2VydGFpbiBzaXR1YXRpb25zIChyYXBp ZCBpbmNvbWluZyBldmVudHMpLgogICAgICAgYmFyID0gWE5TX1NDUk9MTF9CQVIgKHdpbmRvdy0+ dmVydGljYWxfc2Nyb2xsX2Jhcik7CiAgICAgICBvbGRSZWN0ID0gW2JhciBmcmFtZV07CiAgICAg ICByLnNpemUud2lkdGggPSBvbGRSZWN0LnNpemUud2lkdGg7CisKKworLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKICAgICAgIGlmIChGUkFNRV9MSVZF X1AgKGYpICYmICFOU0VxdWFsUmVjdHMgKG9sZFJlY3QsIHIpKQogICAgICAgICB7CisgICAgICAg ICAgLyogVGhlIG1haW4gd2luZG93IGhhcyBwcm9iYWJseSBiZWVuIHJlc2l6ZWQuICBHcmFjaW91 c2x5IGRlbGV0ZSB0aGUKKyAgICAgICAgICBvbGQgc2Nyb2xsIGJhciB3aXRob3V0IHJlcGFpbnRp bmcgaXRzIHJlY3RhbmdsZTsgYW5kLCBjcmVhdGUgYSBuZXcKKyAgICAgICAgICBzY3JvbGwgYmFy IGVsc2V3aGVyZS4qLwogICAgICAgICAgIGlmIChvbGRSZWN0Lm9yaWdpbi54ICE9IHIub3JpZ2lu LngpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIG5zX2NsZWFyX2ZyYW1lX2FyZWEgKGYs IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgIFtiYXIgbWNfanVkZ2Vd OworICAgICAgICAgICAgICBiYXIgPSBbW0VtYWNzU2Nyb2xsZXIgYWxsb2NdIGluaXRGcmFtZTog ciB3aW5kb3c6IHdpbl07CisgICAgICAgICAgICAgIHdzZXRfdmVydGljYWxfc2Nyb2xsX2JhciAo d2luZG93LCBtYWtlX21pbnRfcHRyIChiYXIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGVsc2UKICAgICAgICAgICBbYmFyIHNldEZyYW1lOiByXTsKICAgICAgICAgfQorCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKworCiAgICAgfQogCiAgIGlmICh1cGRhdGVfcCkKQEAgLTQ5MzEs OSArNTk1Myw1NyBAQCBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKHJhcGlkIGluY29taW5nIGV2ZW50 cykuCiAgICAgewogICAgICAgdmlldyA9IFtzdWJ2aWV3cyBvYmplY3RBdEluZGV4OiBpXTsKICAg ICAgIGlmICghW3ZpZXcgaXNLaW5kT2ZDbGFzczogW0VtYWNzU2Nyb2xsZXIgY2xhc3NdXSkgY29u dGludWU7Ci0gICAgICBpZiAoW3ZpZXcganVkZ2VdKQorCisKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIC8qIGBYU0VUV0lORE9XJyB3aWxsIHNv bWV0aW1lcyBjYXVzZSBFbWFjcyB0byBjcmFzaCB3aGVuIHJ1bm5pbmcgdW5kZXIgZ2RiIGV2ZW4K KyAgdGhvdWdoICh3ICE9IE5VTEwpLiAgVGhlcmVmb3JlLCB3ZSBjYW5ub3QgcmVsaWFibHkgdXNl IGBXSU5ET1dfTElWRV9QJy4gKi8KKyAgc3RydWN0IHdpbmRvdyAqdyA9IFt2aWV3IG1jX2dldF93 aW5kb3ddOworICBpZiAodyAhPSBOVUxMCisgICAgICAmJiBOSUxQICh3LT5jb250ZW50cykpCisg ICAgeworICAgICAgQk9PTCBkZWJ1Z19wID0gZmFsc2U7CisgICAgICBpZiAoZGVidWdfcAorICAg ICAgICAgIC8qIGB3aW5kb3dfYm94JyBjYWxscyBgd2luZG93X2JveF9oZWlnaHQnLCB3aGljaCB3 aWxsIGNhdXNlIEVtYWNzIHRvCisgICAgICAgICAgY3Jhc2ggaWYgRlJBTUVQICh3LT5mcmFtZSkg aXMgbm90IHNhdGlzZmllZC4gKi8KKyAgICAgICAgICAmJiBGUkFNRVAgKHctPmZyYW1lKSkKKyAg ICAgICAgeworICAgICAgICAgIE5TUmVjdCByMCA9IFt2aWV3IG1jX2dldF9yZWN0YW5nbGVdOwor ICAgICAgICAgIGludCB4MCA9IE5TTWluWCAocjApOworICAgICAgICAgIGludCB5MCA9IE5TTWlu WSAocjApOworICAgICAgICAgIGludCB3ZDAgPSBOU1dpZHRoIChyMCk7CisgICAgICAgICAgaW50 IGgwID0gTlNIZWlnaHQgKHIwKTsKKyAgICAgICAgICBpbnQgd2luZG93X3ksIHdpbmRvd19oZWln aHQ7CisgICAgICAgICAgd2luZG93X2JveCAodywgQU5ZX0FSRUEsIDAsICZ3aW5kb3dfeSwgMCwg JndpbmRvd19oZWlnaHQpOworICAgICAgICAgIGludCB0b3AgPSB3aW5kb3dfeTsKKyAgICAgICAg ICBpbnQgaGVpZ2h0ID0gd2luZG93X2hlaWdodDsKKyAgICAgICAgICBpbnQgd2lkdGggPSBXSU5E T1dfQ09ORklHX1NDUk9MTF9CQVJfQ09MUyAodykgKiBGUkFNRV9DT0xVTU5fV0lEVEggKGYpOwor ICAgICAgICAgIGludCBsZWZ0ID0gV0lORE9XX1NDUk9MTF9CQVJfQVJFQV9YICh3KTsKKyAgICAg ICAgICBOU1JlY3QgcjEgPSBOU01ha2VSZWN0IChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOwor ICAgICAgICAgIC8qIFRoZSBwYXJlbnQgdmlldyBpcyBmbGlwcGVkLCBzbyB3ZSBuZWVkIHRvIGZs aXAgeSB2YWx1ZS4gKi8KKyAgICAgICAgICBFbWFjc1ZpZXcgKmZyYW1lX3ZpZXcgPSBGUkFNRV9O U19WSUVXIChmKTsKKyAgICAgICAgICBOU1JlY3QgdiA9IFtmcmFtZV92aWV3IGZyYW1lXTsKKyAg ICAgICAgICByMS5vcmlnaW4ueSA9ICh2LnNpemUuaGVpZ2h0IC0gcjEuc2l6ZS5oZWlnaHQgLSBy MS5vcmlnaW4ueSk7CisgICAgICAgICAgaW50IHgxID0gTlNNaW5YIChyMSk7CisgICAgICAgICAg aW50IHkxID0gTlNNaW5ZIChyMSk7CisgICAgICAgICAgaW50IHdkMSA9IE5TV2lkdGggKHIxKTsK KyAgICAgICAgICBpbnQgaDEgPSBOU0hlaWdodCAocjEpOworICAgICAgICAgIGZwcmludGYgKHN0 ZGVyciwgIiVzIC0tIERFQUQ6XG5cCisgICAgICAgICAgeDAveDEgKCVkLyVkKSB8IHkwL3kxICgl ZC8lZCkgfCB3ZDAvd2QxICglZC8lZCkgfCBoMC9oMSAoJWQvJWQpXG4iLAorICAgICAgICAgIG1j X3dpbmRvdyAodyksIHgwLCB4MSwgeTAsIHkxLCB3ZDAsIHdkMSwgaDAsIGgxKTsKKyAgICAgICAg fQorICAgICAgaWYgKFt2aWV3IG1jX2p1ZGdlXSkKICAgICAgICAgcmVtb3ZlZCA9IFlFUzsKICAg ICB9CisgICAgZWxzZSBpZiAoW3ZpZXcganVkZ2VdKQorICAgICAgcmVtb3ZlZCA9IFlFUzsKKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisKKworICAgIH0KIAogICBpZiAocmVtb3ZlZCkKICAg ICBbZXZpZXcgdXBkYXRlRnJhbWVTaXplOiBOT107CkBAIC01MDc0LDYgKzYxNDQsMjAgQEAgc3Rh dGljIExpc3BfT2JqZWN0IG5zX3N0cmluZ190b19saXNwbW9kIChjb25zdCBjaGFyICpzKQogZXh0 ZXJuIGZyYW1lX3Bhcm1faGFuZGxlciBuc19mcmFtZV9wYXJtX2hhbmRsZXJzW107CiBzdGF0aWMg c3RydWN0IHJlZGlzcGxheV9pbnRlcmZhY2UgbnNfcmVkaXNwbGF5X2ludGVyZmFjZSA9CiB7CisK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKy8q IGByZWRpc3BsYXlfaW50ZXJmYWNlJyBpbiBgbnN0ZXJtLm1gIG11c3QgYmUgaW4gdGhlIGV4YWN0 IHNhbWUgb3JkZXIgYXMgdGhlCitgcmVkaXNwbGF5X2ludGVyZmFjZScgaW4gYGRpc3BleHRlcm4u aGAhICovCisKKyAgbWNfbnNfZHJhd193aW5kb3dfY3Vyc29yLAorICBtY19uc19kcmF3X2dseXBo X3N0cmluZywKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICBuc19mcmFtZV9wYXJt X2hhbmRsZXJzLAogICBndWlfcHJvZHVjZV9nbHlwaHMsCiAgIGd1aV93cml0ZV9nbHlwaHMsCkBA IC04NzExLDYgKzk3OTUsNDkgQEAgLSAoQk9PTCljYW5CZWNvbWVNYWluV2luZG93CiAKIEBpbXBs ZW1lbnRhdGlvbiBFbWFjc1Njcm9sbGVyCiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisv KiBNVUxUSVBMRS1DVVJTT1JTICovCisKKy0gKHZvaWQpbWNfc2V0X3JlY3RhbmdsZTogKE5TUmVj dClyZWN0Cit7CisgIG1jX3JlY3RhbmdsZSA9IHJlY3Q7Cit9CisKKy0gKE5TUmVjdCltY19nZXRf cmVjdGFuZ2xlCit7CisgIHJldHVybiBtY19yZWN0YW5nbGU7Cit9CisKKy0gKHN0cnVjdCB3aW5k b3cgKiltY19nZXRfd2luZG93Cit7CisgIHJldHVybiB3aW5kb3c7Cit9CisKKy0gKGJvb2wpbWNf anVkZ2UKK3sKKyAgTlNUUkFDRSAoIltFbWFjc1Njcm9sbGVyIG1jX2p1ZGdlXSIpOworICBib29s IHJldCA9IGNvbmRlbW5lZDsKKyAgYmxvY2tfaW5wdXQgKCk7CisgIGlmIChjb25kZW1uZWQpCisg ICAgeworICAgICAgLyogZW5zdXJlIG90aGVyIHNjcm9sbGJhciB1cGRhdGVzIGFmdGVyIGRlbGV0 aW9uICovCisgICAgICBFbWFjc1ZpZXcgKnZpZXcgPSAoRW1hY3NWaWV3ICopRlJBTUVfTlNfVklF VyAoZnJhbWUpOworICAgICAgaWYgKHZpZXcgIT0gbmlsKQorICAgICAgICB2aWV3LT5zY3JvbGxi YXJzTmVlZGluZ1VwZGF0ZSsrOworICAgIH0KKyAgaWYgKHdpbmRvdykKKyAgICB3c2V0X3ZlcnRp Y2FsX3Njcm9sbF9iYXIgKHdpbmRvdywgUW5pbCk7CisgIHdpbmRvdyA9IDA7CisgIFtzZWxmIHJl bW92ZUZyb21TdXBlcnZpZXdXaXRob3V0TmVlZGluZ0Rpc3BsYXldOworICBbc2VsZiByZWxlYXNl XTsKKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgcmV0dXJuIHJldDsKK30KKworLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisKKwogLyogZm9yIHJlcGVhdCBidXR0b24gcHVzaCAqLwogI2RlZmluZSBT Q1JPTExfQkFSX0ZJUlNUX0RFTEFZIDAuNQogI2RlZmluZSBTQ1JPTExfQkFSX0NPTlRJTlVPVVNf REVMQVkgKDEuMCAvIDE1KQpkaWZmIC0tZ2l0IGEvc3JjL3czMnRlcm0uYyBiL3NyYy93MzJ0ZXJt LmMKaW5kZXggYzZlMTc1ZS4uZmExMTVjMCAxMDA2NDQKLS0tIGEvc3JjL3czMnRlcm0uYworKysg Yi9zcmMvdzMydGVybS5jCkBAIC02Miw2ICs2MiwxMTY4IEBAIGFsb25nIHdpdGggR05VIEVtYWNz LiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAjaW5j bHVkZSAiYml0bWFwcy9ncmF5LnhibSIKICNlbmRpZgogDAorCisKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworLyogYmVnaW4gTVVMVElQTEUtQ1VSU09SUyAqLworCit0eXBlZGVmIHN0cnVjdCB7 CisgIHVuc2lnbmVkIGxvbmcgcGl4ZWw7CisgIHVuc2lnbmVkIHNob3J0IHJlZCwgZ3JlZW4sIGJs dWU7CisgIGNoYXIgZmxhZ3M7CisgIGNoYXIgcGFkOworfSBtY19YQ29sb3I7CisKKyNpZmRlZiBH TFlQSF9ERUJVRworc3RhdGljIHZvaWQgdzMyX2NoZWNrX2ZvbnQgKHN0cnVjdCBmcmFtZSAqLCBz dHJ1Y3QgZm9udCAqKTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBYQ2hhbmdlR0MgKHZvaWQgKiwg RW1hY3NfR0MgKiwgdW5zaWduZWQgbG9uZywgRW1hY3NfR0MgKik7CisKK3N0YXRpYyB2b2lkIHcz Ml9kcmF3X3VuZGVyd2F2ZSAoc3RydWN0IGdseXBoX3N0cmluZyAqLCBDT0xPUlJFRik7CisKK3N0 YXRpYyB2b2lkIHczMl9zZXRfbW9kZV9saW5lX2ZhY2VfZ2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcg Kik7CisKK3N0YXRpYyB2b2lkIHczMl9zZXRfbW91c2VfZmFjZV9nYyAoc3RydWN0IGdseXBoX3N0 cmluZyAqKTsKKworc3RhdGljIHZvaWQgdzMyX2NsaXBfdG9fcm93IChzdHJ1Y3Qgd2luZG93ICos IHN0cnVjdCBnbHlwaF9yb3cgKiwgZW51bSBnbHlwaF9yb3dfYXJlYSwgSERDKTsKKworc3RhdGlj IHZvaWQgdzMyX3NldF9jbGlwX3JlY3RhbmdsZSAoSERDLCBSRUNUICopOworCitzdGF0aWMgdm9p ZCB3MzJfc2V0X2dseXBoX3N0cmluZ19jbGlwcGluZyAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsK Kworc3RhdGljIHZvaWQgdzMyX2RyYXdfZ2x5cGhfc3RyaW5nX2JnX3JlY3QgKHN0cnVjdCBnbHlw aF9zdHJpbmcgKiwgaW50LCBpbnQsIGludCwgaW50KTsKKworc3RhdGljIHZvaWQgdzMyX2RyYXdf Z2x5cGhfc3RyaW5nX2JhY2tncm91bmQgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiwgYm9vbCk7CisK K3N0YXRpYyB2b2lkIHczMl9kcmF3X2dseXBoX3N0cmluZ19ib3ggKHN0cnVjdCBnbHlwaF9zdHJp bmcgKik7CisKK3N0YXRpYyB2b2lkIHczMl9zZXRfZ2x5cGhfc3RyaW5nX2NsaXBwaW5nX2V4YWN0 bHkgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiwgc3RydWN0IGdseXBoX3N0cmluZyAqKTsKKworc3Rh dGljIHZvaWQgdzMyX2RyYXdfaW1hZ2VfZ2x5cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5n ICopOworCitzdGF0aWMgdm9pZCB3MzJfZHJhd19nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAoc3Ry dWN0IGdseXBoX3N0cmluZyAqKTsKKworc3RhdGljIHZvaWQgdzMyX2RyYXdfY29tcG9zaXRlX2ds eXBoX3N0cmluZ19mb3JlZ3JvdW5kIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworCitzdGF0aWMg dm9pZCB3MzJfZHJhd19nbHlwaGxlc3NfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHN0cnVjdCBn bHlwaF9zdHJpbmcgKik7CisKKyNkZWZpbmUgTUNfVzMyX0NPTE9SKHBlKSAgUkdCIChwZS5wZVJl ZCwgcGUucGVHcmVlbiwgcGUucGVCbHVlKQorCisjZGVmaW5lIE1DX1czMl9TRVRfQ09MT1IocGUs IGNvbG9yKSBcCisgIGRvIFwKKyAgICB7IFwKKyAgICAgIHBlLnBlUmVkID0gR2V0UlZhbHVlIChj b2xvcik7IFwKKyAgICAgIHBlLnBlR3JlZW4gPSBHZXRHVmFsdWUgKGNvbG9yKTsgXAorICAgICAg cGUucGVCbHVlID0gR2V0QlZhbHVlIChjb2xvcik7IFwKKyAgICAgIHBlLnBlRmxhZ3MgPSAwOyBc CisgICAgfSB3aGlsZSAoMCkKKwordm9pZAorbWNfcHJvY2Vzc19xdWl0X2ZsYWcgKHZvaWQpCit7 CisgIExpc3BfT2JqZWN0IGZsYWcgPSBWcXVpdF9mbGFnOworICBWcXVpdF9mbGFnID0gUW5pbDsK KyAgaWYgKEVRIChmbGFnLCBRa2lsbF9lbWFjcykpCisgICAgRmtpbGxfZW1hY3MgKFFuaWwpOwor ICBpZiAoRVEgKFZ0aHJvd19vbl9pbnB1dCwgZmxhZykpCisgICAgRnRocm93IChWdGhyb3dfb25f aW5wdXQsIFF0KTsKKyAgRnNpZ25hbCAoUXF1aXQsIFFuaWwpOworfQorCisjZGVmaW5lIE1DX1FV SVQJCQkJCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIGlmICghTklMUCAoVnF1aXRfZmxhZykgJiYg TklMUCAoVmluaGliaXRfcXVpdCkpCVwKKyAgICAgIG1jX3Byb2Nlc3NfcXVpdF9mbGFnICgpOwkJ CQlcCisgICAgZWxzZSBpZiAocGVuZGluZ19zaWduYWxzKQkJCQlcCisgICAgICBwcm9jZXNzX3Bl bmRpbmdfc2lnbmFscyAoKTsJCQlcCisgIH0gd2hpbGUgKGZhbHNlKQorCitzdGF0aWMgTGlzcF9P YmplY3QKK21jX3czMl9jb2xvcl9tYXBfbG9va3VwIChjb25zdCBjaGFyICpjb2xvcm5hbWUpCit7 CisgIExpc3BfT2JqZWN0IHRhaWwsIHJldCA9IFFuaWw7CisgIGJsb2NrX2lucHV0ICgpOworICBm b3IgKHRhaWwgPSBWdzMyX2NvbG9yX21hcDsgQ09OU1AgKHRhaWwpOyB0YWlsID0gWENEUiAodGFp bCkpCisgICAgeworICAgICAgcmVnaXN0ZXIgTGlzcF9PYmplY3QgZWx0LCB0ZW07CisgICAgICBl bHQgPSBYQ0FSICh0YWlsKTsKKyAgICAgIGlmICghQ09OU1AgKGVsdCkpIGNvbnRpbnVlOworICAg ICAgdGVtID0gWENBUiAoZWx0KTsKKyAgICAgIGlmIChsc3RyY21waSAoU1NEQVRBICh0ZW0pLCBj b2xvcm5hbWUpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICByZXQgPSBGY2RyIChlbHQpOwor ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBNQ19RVUlUOworICAgIH0KKyAgdW5i bG9ja19pbnB1dCAoKTsKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIExpc3BfT2JqZWN0Citt Y194X3RvX3czMl9jb2xvciAoY29uc3QgY2hhciAqIGNvbG9ybmFtZSkKK3sKKyAgcmVnaXN0ZXIg TGlzcF9PYmplY3QgcmV0ID0gUW5pbDsKKyAgYmxvY2tfaW5wdXQgKCk7CisgIGlmIChjb2xvcm5h bWVbMF0gPT0gJyMnKQorICAgIHsKKyAgICAgIC8qIENvdWxkIGJlIGFuIG9sZC1zdHlsZSBSR0Ig RGV2aWNlIHNwZWNpZmljYXRpb24uICovCisgICAgICBpbnQgc2l6ZSA9IHN0cmxlbiAoY29sb3Ju YW1lICsgMSk7CisgICAgICBjaGFyICpjb2xvciA9IGFsbG9jYSAoc2l6ZSArIDEpOworICAgICAg c3RyY3B5IChjb2xvciwgY29sb3JuYW1lICsgMSk7CisgICAgICBpZiAoc2l6ZSA9PSAzIHx8IHNp emUgPT0gNiB8fCBzaXplID09IDkgfHwgc2l6ZSA9PSAxMikKKyAgICAgICAgeworICAgICAgICAg IFVJTlQgY29sb3J2YWw7CisgICAgICAgICAgaW50IGksIHBvczsKKyAgICAgICAgICBwb3MgPSAw OworICAgICAgICAgIHNpemUgLz0gMzsKKyAgICAgICAgICBjb2xvcnZhbCA9IDA7CisgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg Y2hhciAqZW5kOworICAgICAgICAgICAgICBjaGFyIHQ7CisgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgdmFsdWU7CisgICAgICAgICAgICAgIC8qIFRoZSBjaGVjayBmb3IgJ3gnIGluIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uYWwgdGFrZXMgaW50bworICAgICAgICAgICAgICBhY2NvdW50IHRo ZSBmYWN0IHRoYXQgc3RydG9sIGFsbG93cyBhICIweCIgaW4gZnJvbnQgb2YKKyAgICAgICAgICAg ICAgb3VyIG51bWJlcnMsIGFuZCB3ZSBkb24ndC4gKi8KKyAgICAgICAgICAgICAgaWYgKCFpc3hk aWdpdCAoY29sb3JbMF0pIHx8IGNvbG9yWzFdID09ICd4JykKKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgdCA9IGNvbG9yW3NpemVdOworICAgICAgICAgICAgICBjb2xvcltz aXplXSA9ICdcMCc7CisgICAgICAgICAgICAgIHZhbHVlID0gc3RydG91bCAoY29sb3IsICZlbmQs IDE2KTsKKyAgICAgICAgICAgICAgY29sb3Jbc2l6ZV0gPSB0OworICAgICAgICAgICAgICBpZiAo ZXJybm8gPT0gRVJBTkdFIHx8IGVuZCAtIGNvbG9yICE9IHNpemUpCisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgIHN3aXRjaCAoc2l6ZSkKKyAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAq IDB4MTA7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6 CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAg ICAgICAgICAgICAgICB2YWx1ZSAvPSAweDEwOworICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgdmFsdWUgLz0gMHgxMDA7 CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIGNvbG9ydmFsIHw9ICh2YWx1ZSA8PCBwb3MpOworICAgICAgICAgICAgICBwb3MgKz0gMHg4 OworICAgICAgICAgICAgICBpZiAoaSA9PSAyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgICAgICAgICBYU0VUSU5UIChy ZXQsIGNvbG9ydmFsKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICBjb2xvciA9IGVuZDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0KKyAgZWxzZSBpZiAoc3RybmljbXAgKGNvbG9ybmFtZSwgInJnYjoiLCA0KSA9 PSAwKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmNvbG9yOworICAgICAgVUlOVCBjb2xvcnZh bDsKKyAgICAgIGludCBpLCBwb3M7CisgICAgICBwb3MgPSAwOworICAgICAgY29sb3J2YWwgPSAw OworICAgICAgY29sb3IgPSBjb2xvcm5hbWUgKyA0OworICAgICAgZm9yIChpID0gMDsgaSA8IDM7 IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGNoYXIgKmVuZDsKKyAgICAgICAgICB1bnNpZ25l ZCBsb25nIHZhbHVlOworICAgICAgICAgIC8qIFRoZSBjaGVjayBmb3IgJ3gnIGluIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uYWwgdGFrZXMgaW50bworICAgICAgICAgICAgIGFjY291bnQgdGhlIGZh Y3QgdGhhdCBzdHJ0b2wgYWxsb3dzIGEgIjB4IiBpbiBmcm9udCBvZgorICAgICAgICAgICAgIG91 ciBudW1iZXJzLCBhbmQgd2UgZG9uJ3QuICovCisgICAgICAgICAgaWYgKCFpc3hkaWdpdCAoY29s b3JbMF0pIHx8IGNvbG9yWzFdID09ICd4JykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IHZhbHVlID0gc3RydG91bCAoY29sb3IsICZlbmQsIDE2KTsKKyAgICAgICAgICBpZiAoZXJybm8g PT0gRVJBTkdFKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgc3dpdGNoIChlbmQgLSBj b2xvcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAg dmFsdWUgPSB2YWx1ZSAqIDB4MTAgKyB2YWx1ZTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAz OgorICAgICAgICAgICAgICB2YWx1ZSAvPSAweDEwOworICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgdmFsdWUgLz0gMHgxMDA7CisgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgdmFsdWUg PSBVTE9OR19NQVg7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKHZhbHVlID09IFVMT05H X01BWCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNvbG9ydmFsIHw9ICh2YWx1ZSA8 PCBwb3MpOworICAgICAgICAgIHBvcyArPSAweDg7CisgICAgICAgICAgaWYgKGkgPT0gMikKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCplbmQgIT0gJ1wwJykKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAgICAgICAg ICAgWFNFVElOVCAocmV0LCBjb2xvcnZhbCk7CisgICAgICAgICAgICAgIHJldHVybiByZXQ7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgaWYgKCplbmQgIT0gJy8nKQorICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY29sb3IgPSBlbmQgKyAxOworICAgICAgICB9CisgICAgfQorICAgIGVs c2UgaWYgKHN0cm5pY21wIChjb2xvcm5hbWUsICJyZ2JpOiIsIDUpID09IDApCisgICAgICB7Cisg ICAgICAgIC8qIFRoaXMgaXMgYW4gUkdCIEludGVuc2l0eSBzcGVjaWZpY2F0aW9uLiAqLworICAg ICAgICBjb25zdCBjaGFyICpjb2xvcjsKKyAgICAgICAgVUlOVCBjb2xvcnZhbDsKKyAgICAgICAg aW50IGksIHBvczsKKyAgICAgICAgcG9zID0gMDsKKyAgICAgICAgY29sb3J2YWwgPSAwOworICAg ICAgICBjb2xvciA9IGNvbG9ybmFtZSArIDU7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBp KyspCisgICAgICAgICAgeworICAgICAgICAgICAgY2hhciAqZW5kOworICAgICAgICAgICAgZG91 YmxlIHZhbHVlOworICAgICAgICAgICAgVUlOVCB2YWw7CisgICAgICAgICAgICB2YWx1ZSA9IHN0 cnRvZCAoY29sb3IsICZlbmQpOworICAgICAgICAgICAgaWYgKGVycm5vID09IEVSQU5HRSkKKyAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAodmFsdWUgPCAwLjAgfHwgdmFsdWUg PiAxLjApCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdmFsID0gKFVJTlQpKDB4 MTAwICogdmFsdWUpOworICAgICAgICAgICAgLyogV2UgdXNlZCAweDEwMCBpbnN0ZWFkIG9mIDB4 RkYgdG8gZ2l2ZSBhIGNvbnRpbnVvdXMKKyAgICAgICAgICAgICAgIHJhbmdlIGJldHdlZW4gMC4w IGFuZCAxLjAgaW5jbHVzaXZlLiAgVGhlIG5leHQgc3RhdGVtZW50CisgICAgICAgICAgICAgICBm aXhlcyB0aGUgMS4wIGNhc2UuICovCisgICAgICAgICAgICBpZiAodmFsID09IDB4MTAwKQorICAg ICAgICAgICAgICB2YWwgPSAweEZGOworICAgICAgICAgICAgY29sb3J2YWwgfD0gKHZhbCA8PCBw b3MpOworICAgICAgICAgICAgcG9zICs9IDB4ODsKKyAgICAgICAgICAgIGlmIChpID09IDIpCisg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKmVuZCAhPSAnXDAnKQorICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAg ICAgICAgICAgICAgICBYU0VUSU5UIChyZXQsIGNvbG9ydmFsKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4gcmV0OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKmVuZCAhPSAnLycp CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY29sb3IgPSBlbmQgKyAxOworICAg ICAgICAgIH0KKyAgICAgIH0KKyAgLyogSSBhbSBub3QgZ29pbmcgdG8gYXR0ZW1wdCB0byBoYW5k bGUgYW55IG9mIHRoZSBDSUUgY29sb3Igc2NoZW1lcworICAgICBvciBUZWtIVkMsIHNpbmNlIEkg ZG9uJ3Qga25vdyB0aGUgYWxnb3JpdGhtcyBmb3IgY29udmVyc2lvbiB0byBSR0IuCisgICAgIElm IHdlIGZhaWwgdG8gbG9va3VwIHRoZSBjb2xvciBuYW1lIGluIHczMl9jb2xvcl9tYXAsIHRoZW4g Y2hlY2sgdGhlCisgICAgIGNvbG9ybmFtZSB0byBzZWUgaWYgaXQgY2FuIGJlIGNydWRlbHkgYXBw cm94aW1hdGVkOiBJZiB0aGUgWCBjb2xvcgorICAgICBlbmRzIGluIGEgbnVtYmVyIChlLmcuLCAi ZGFya3NlYWdyZWVuMiIpLCBzdHJpcCB0aGUgbnVtYmVyIGFuZAorICAgICByZXR1cm4gdGhlIHJl c3VsdCBvZiBsb29raW5nIHVwIHRoZSBiYXNlIGNvbG9yIG5hbWUuICovCisgIHJldCA9IG1jX3cz Ml9jb2xvcl9tYXBfbG9va3VwIChjb2xvcm5hbWUpOworICBpZiAoTklMUCAocmV0KSkKKyAgICB7 CisgICAgICBpbnQgbGVuID0gc3RybGVuIChjb2xvcm5hbWUpOworICAgICAgaWYgKGlzZGlnaXQg KGNvbG9ybmFtZVtsZW4gLSAxXSkpCisgICAgICAgIHsKKyAgICAgICAgICBjaGFyICpwdHIsICph cHByb3ggPSBhbGxvY2EgKGxlbiArIDEpOworICAgICAgICAgIHN0cmNweSAoYXBwcm94LCBjb2xv cm5hbWUpOworICAgICAgICAgIHB0ciA9ICZhcHByb3hbbGVuIC0gMV07CisgICAgICAgICAgd2hp bGUgKHB0ciA+IGFwcHJveCAmJiBpc2RpZ2l0ICgqcHRyKSkKKyAgICAgICAgICAgICpwdHItLSA9 ICdcMCc7CisgICAgICAgICAgcmV0ID0gbWNfdzMyX2NvbG9yX21hcF9sb29rdXAgKGFwcHJveCk7 CisgICAgICAgIH0KKyAgICB9CisgIHVuYmxvY2tfaW5wdXQgKCk7CisgIHJldHVybiByZXQ7Cit9 CisKKy8qIERlY2lkZSBpZiBjb2xvciBuYW1lZCBDT0xPUiBpcyB2YWxpZCBmb3IgdGhlIGRpc3Bs YXkgYXNzb2NpYXRlZCB3aXRoCisgICB0aGUgc2VsZWN0ZWQgZnJhbWU7IGlmIHNvLCByZXR1cm4g dGhlIHJnYiB2YWx1ZXMgaW4gQ09MT1JfREVGLgorICAgSWYgQUxMT0MgaXMgbm9uemVybywgYWxs b2NhdGUgYSBuZXcgY29sb3JtYXAgY2VsbC4gKi8KK2ludAorbWNfdzMyX2RlZmluZWRfY29sb3Ig KHN0cnVjdCBmcmFtZSAqZiwgY29uc3QgY2hhciAqY29sb3IsIG1jX1hDb2xvciAqY29sb3JfZGVm LCBib29sIGFsbG9jX3ApCit7CisgIHJlZ2lzdGVyIExpc3BfT2JqZWN0IHRlbTsKKyAgQ09MT1JS RUYgdzMyX2NvbG9yX3JlZjsKKyAgdGVtID0gbWNfeF90b193MzJfY29sb3IgKGNvbG9yKTsKKyAg aWYgKCFOSUxQICh0ZW0pKQorICAgIHsKKyAgICAgIGlmIChmKQorICAgICAgICB7CisgICAgICAg ICAgLyogQXBwbHkgZ2FtbWEgY29ycmVjdGlvbi4gKi8KKyAgICAgICAgICB3MzJfY29sb3JfcmVm ID0gWFVGSVhOVU1fUkFXICh0ZW0pOworICAgICAgICAgIGdhbW1hX2NvcnJlY3QgKGYsICZ3MzJf Y29sb3JfcmVmKTsKKyAgICAgICAgICBYU0VUSU5UICh0ZW0sIHczMl9jb2xvcl9yZWYpOworICAg ICAgICB9CisgICAgICAvKiBNYXAgdGhpcyBjb2xvciB0byB0aGUgcGFsZXR0ZSBpZiBpdCBpcyBl bmFibGVkLiAqLworICAgICAgaWYgKCFOSUxQIChWdzMyX2VuYWJsZV9wYWxldHRlKSkKKyAgICAg ICAgeworICAgICAgICAgIHN0cnVjdCB3MzJfcGFsZXR0ZV9lbnRyeSAqIGVudHJ5ID0gb25lX3cz Ml9kaXNwbGF5X2luZm8uY29sb3JfbGlzdDsKKyAgICAgICAgICBzdHJ1Y3QgdzMyX3BhbGV0dGVf ZW50cnkgKiogcHJldiA9ICZvbmVfdzMyX2Rpc3BsYXlfaW5mby5jb2xvcl9saXN0OworICAgICAg ICAgIC8qIGNoZWNrIGlmIGNvbG9yIGlzIGFscmVhZHkgbWFwcGVkICovCisgICAgICAgICAgd2hp bGUgKGVudHJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoTUNfVzMyX0NPTE9S IChlbnRyeS0+ZW50cnkpID09IFhVRklYTlVNX1JBVyAodGVtKSkKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgcHJldiA9ICZlbnRyeS0+bmV4dDsKKyAgICAgICAgICAgICAg ZW50cnkgPSBlbnRyeS0+bmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoZW50cnkg PT0gTlVMTCAmJiBhbGxvY19wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBub3Qg YWxyZWFkeSBtYXBwZWQsIHNvIGFkZCB0byBsaXN0ICovCisgICAgICAgICAgICAgIGVudHJ5ID0g eG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgdzMyX3BhbGV0dGVfZW50cnkpKTsKKyAgICAgICAgICAg ICAgTUNfVzMyX1NFVF9DT0xPUiAoZW50cnktPmVudHJ5LCBYVUZJWE5VTV9SQVcgKHRlbSkpOwor ICAgICAgICAgICAgICBlbnRyeS0+bmV4dCA9IE5VTEw7CisgICAgICAgICAgICAgICpwcmV2ID0g ZW50cnk7CisgICAgICAgICAgICAgIG9uZV93MzJfZGlzcGxheV9pbmZvLm51bV9jb2xvcnMrKzsK KyAgICAgICAgICAgICAgLyogc2V0IGZsYWcgdGhhdCBwYWxldHRlIG11c3QgYmUgcmVnZW5lcmF0 ZWQgKi8KKyAgICAgICAgICAgICAgb25lX3czMl9kaXNwbGF5X2luZm8ucmVnZW5fcGFsZXR0ZSA9 IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIC8qIEVuc3VyZSBDT0xPUlJF RiB2YWx1ZSBpcyBzbmFwcGVkIHRvIG5lYXJlc3QgY29sb3IgaW4gKGRlZmF1bHQpCisgICAgICAg ICBwYWxldHRlIGJ5IHNpbXVsYXRpbmcgdGhlIFBBTEVUVEVSR0IgbWFjcm8uICBUaGlzIHdvcmtz IHdoZXRoZXIKKyAgICAgICAgIG9yIG5vdCB0aGUgZGlzcGxheSBkZXZpY2UgaGFzIGEgcGFsZXR0 ZS4gKi8KKyAgICAgIHczMl9jb2xvcl9yZWYgPSBYVUZJWE5VTV9SQVcgKHRlbSkgfCAweDIwMDAw MDA7CisgICAgICBjb2xvcl9kZWYtPnBpeGVsID0gdzMyX2NvbG9yX3JlZjsKKyAgICAgIGNvbG9y X2RlZi0+cmVkID0gR2V0UlZhbHVlICh3MzJfY29sb3JfcmVmKSAqIDI1NjsKKyAgICAgIGNvbG9y X2RlZi0+Z3JlZW4gPSBHZXRHVmFsdWUgKHczMl9jb2xvcl9yZWYpICogMjU2OworICAgICAgY29s b3JfZGVmLT5ibHVlID0gR2V0QlZhbHVlICh3MzJfY29sb3JfcmVmKSAqIDI1NjsKKyAgICAgIHJl dHVybiAxOworICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIHJldHVybiAwOworICAg ICAgfQorfQorCit2b2lkCittY194d19jb2xvcl92YWx1ZXMgKHN0cnVjdCB3aW5kb3cgKncsIExp c3BfT2JqZWN0IGNvbG9yLCBzdHJ1Y3QgbWNfUkdCICpsc2wpCit7CisgIENIRUNLX1NUUklORyAo Y29sb3IpOworICBtY19YQ29sb3IgdGVtcDsKKyAgc3RydWN0IGZyYW1lICpmID0gZGVjb2RlX3dp bmRvd19zeXN0ZW1fZnJhbWUgKHctPmZyYW1lKTsKKyAgaWYgKG1jX3czMl9kZWZpbmVkX2NvbG9y IChmLCBTU0RBVEEgKGNvbG9yKSwgJnRlbXAsIGZhbHNlKSkKKyAgICB7CisgICAgICBsc2wtPnJl ZCA9ICgoR2V0UlZhbHVlICh0ZW1wLnBpeGVsKSA8PCA4KSB8IEdldFJWYWx1ZSAodGVtcC5waXhl bCkpIC8gNjU1MzUuMDsKKyAgICAgIGxzbC0+Z3JlZW4gPSAoKEdldEdWYWx1ZSAodGVtcC5waXhl bCkgPDwgOCkgfCBHZXRHVmFsdWUgKHRlbXAucGl4ZWwpKSAvIDY1NTM1LjA7CisgICAgICBsc2wt PmJsdWUgPSAoKEdldEJWYWx1ZSAodGVtcC5waXhlbCkgPDwgOCkgfCBHZXRCVmFsdWUgKHRlbXAu cGl4ZWwpKSAvIDY1NTM1LjA7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgbHNs LT5yZWQgPSAtMS4wOworICAgICAgICBsc2wtPmdyZWVuID0gLTEuMDsKKyAgICAgICAgbHNsLT5i bHVlID0gLTEuMDsKKyAgICAgIH0KK30KKworLyogRHJhdyBzdHJldGNoIGdseXBoIHN0cmluZyBT LiAqLworc3RhdGljIHZvaWQKK21jX3czMl9kcmF3X3N0cmV0Y2hfZ2x5cGhfc3RyaW5nIChzdHJ1 Y3QgZ2x5cGhfc3RyaW5nICpzKQoreworICBlYXNzZXJ0IChzLT5maXJzdF9nbHlwaC0+dHlwZSA9 PSBTVFJFVENIX0dMWVBIKTsKKyAgaWYgKHMtPmhsID09IERSQVdfQ1VSU09SCisgICAgICAmJiAh eF9zdHJldGNoX2N1cnNvcl9wKQorICAgIHsKKyAgICAgIC8qIElmIGB4LXN0cmV0Y2gtY3Vyc29y JyBpcyBuaWwsIGRvbid0IGRyYXcgYSBibG9jayBjdXJzb3IgYXMgd2lkZSBhcyB0aGUKKyAgICAg IHN0cmV0Y2ggZ2x5cGguICovCisgICAgICBpbnQgd2lkdGgsIGJhY2tncm91bmRfd2lkdGggPSBz LT5iYWNrZ3JvdW5kX3dpZHRoOworICAgICAgaW50IHggPSBzLT54OworICAgICAgaWYgKCFzLT5y b3ctPnJldmVyc2VkX3ApCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgbGVmdF94ID0gd2luZG93 X2JveF9sZWZ0X29mZnNldCAocy0+dywgVEVYVF9BUkVBKTsKKyAgICAgICAgICBpZiAoeCA8IGxl ZnRfeCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYmFja2dyb3VuZF93aWR0aCAtPSBs ZWZ0X3ggLSB4OworICAgICAgICAgICAgICB4ID0gbGVmdF94OworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgIHsKKyAgICAgICAgICAgLyogSW4gUjJMIHJv d3MsIGRyYXcgdGhlIGN1cnNvciBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGUKKyAgICAgICAgICAg ICAgc3RyZXRjaCBnbHlwaC4gKi8KKyAgICAgICAgICAgaW50IHJpZ2h0X3ggPSB3aW5kb3dfYm94 X3JpZ2h0IChzLT53LCBURVhUX0FSRUEpOworICAgICAgICAgICBpZiAoeCArIGJhY2tncm91bmRf d2lkdGggPiByaWdodF94KQorICAgICAgICAgICAgIGJhY2tncm91bmRfd2lkdGggLT0geCAtIHJp Z2h0X3g7CisgICAgICAgICAgIHggKz0gYmFja2dyb3VuZF93aWR0aDsKKyAgICAgICAgIH0KKyAg ICAgIHdpZHRoID0gbWluIChGUkFNRV9DT0xVTU5fV0lEVEggKHMtPmYpLCBiYWNrZ3JvdW5kX3dp ZHRoKTsKKyAgICAgIGlmIChzLT5yb3ctPnJldmVyc2VkX3ApCisgICAgICAgIHggLT0gd2lkdGg7 CisgICAgICAvKiBEcmF3IGN1cnNvci4gKi8KKyAgICAgIHczMl9kcmF3X2dseXBoX3N0cmluZ19i Z19yZWN0IChzLCB4LCBzLT55LCB3aWR0aCwgcy0+aGVpZ2h0KTsKKyAgICAgIC8qIENsZWFyIHJl c3QgdXNpbmcgdGhlIEdDIG9mIHRoZSBvcmlnaW5hbCBub24tY3Vyc29yIGZhY2UuICovCisgICAg ICBpZiAod2lkdGggPCBiYWNrZ3JvdW5kX3dpZHRoKQorICAgICAgICB7CisgICAgICAgICAgRW1h Y3NfR0MgKmdjID0gcy0+ZmFjZS0+Z2M7CisgICAgICAgICAgaW50IHkgPSBzLT55OworICAgICAg ICAgIGludCB3ID0gYmFja2dyb3VuZF93aWR0aCAtIHdpZHRoLCBoID0gcy0+aGVpZ2h0OworICAg ICAgICAgIFJFQ1QgcjsKKyAgICAgICAgICBIREMgaGRjID0gcy0+aGRjOworICAgICAgICAgIGlm ICghcy0+cm93LT5yZXZlcnNlZF9wKQorICAgICAgICAgICAgeCArPSB3aWR0aDsKKyAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgeCA9IHMtPng7CisgICAgICAgICAgaWYgKHMtPnJvdy0+ bW91c2VfZmFjZV9wCisgICAgICAgICAgICAgICYmIGN1cnNvcl9pbl9tb3VzZV9mYWNlX3AgKHMt PncpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB3MzJfc2V0X21vdXNlX2ZhY2VfZ2Mg KHMpOworICAgICAgICAgICAgICBnYyA9IHMtPmdjOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICBnYyA9IHMtPmZhY2UtPmdjOworICAgICAgICAgIGdldF9n bHlwaF9zdHJpbmdfY2xpcF9yZWN0IChzLCAmcik7CisgICAgICAgICAgdzMyX3NldF9jbGlwX3Jl Y3RhbmdsZSAoaGRjLCAmcik7CisjaWYgMCAvKiBUT0RPOiBzdGlwcGxlICovCisgICAgICAgICAg aWYgKHMtPmZhY2UtPnN0aXBwbGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIEZp bGwgYmFja2dyb3VuZCB3aXRoIGEgc3RpcHBsZSBwYXR0ZXJuLiAqLworICAgICAgICAgICAgICBY U2V0RmlsbFN0eWxlIChzLT5kaXNwbGF5LCBnYywgRmlsbE9wYXF1ZVN0aXBwbGVkKTsKKyAgICAg ICAgICAgICAgWEZpbGxSZWN0YW5nbGUgKHMtPmRpc3BsYXksIHMtPndpbmRvdywgZ2MsIHgsIHks IHcsIGgpOworICAgICAgICAgICAgICBYU2V0RmlsbFN0eWxlIChzLT5kaXNwbGF5LCBnYywgRmls bFNvbGlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgdzMyX2ZpbGxfYXJlYSAocy0+Ziwgcy0+aGRjLCBn Yy0+YmFja2dyb3VuZCwgeCwgeSwgdywgaCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0KKyAgICBlbHNlIGlmICghcy0+YmFja2dyb3VuZF9maWxsZWRfcCkKKyAgICAgIHsKKyAg ICAgICAgaW50IGJhY2tncm91bmRfd2lkdGggPSBzLT5iYWNrZ3JvdW5kX3dpZHRoOworICAgICAg ICBpbnQgeCA9IHMtPngsIGxlZnRfeCA9IHdpbmRvd19ib3hfbGVmdF9vZmZzZXQgKHMtPncsIFRF WFRfQVJFQSk7CisgICAgICAgIC8qIERvbid0IGRyYXcgaW50byBsZWZ0IG1hcmdpbiwgZnJpbmdl IG9yIHNjcm9sbGJhciBhcmVhCisgICAgICAgICAgIGV4Y2VwdCBmb3IgaGVhZGVyIGxpbmUgYW5k IG1vZGUgbGluZS4gKi8KKyAgICAgICAgaWYgKHggPCBsZWZ0X3ggJiYgIXMtPnJvdy0+bW9kZV9s aW5lX3ApCisgICAgICAgICAgeworICAgICAgICAgICAgYmFja2dyb3VuZF93aWR0aCAtPSBsZWZ0 X3ggLSB4OworICAgICAgICAgICAgeCA9IGxlZnRfeDsKKyAgICAgICAgICB9CisgICAgICAgIGlm IChiYWNrZ3JvdW5kX3dpZHRoID4gMCkKKyAgICAgICAgICB3MzJfZHJhd19nbHlwaF9zdHJpbmdf YmdfcmVjdCAocywgeCwgcy0+eSwgYmFja2dyb3VuZF93aWR0aCwgcy0+aGVpZ2h0KTsKKyAgICAg IH0KKyAgcy0+YmFja2dyb3VuZF9maWxsZWRfcCA9IHRydWU7Cit9CisKKy8qIFNldCBTLT5nYyB0 byBhIHN1aXRhYmxlIEdDIGZvciBkcmF3aW5nIGdseXBoIHN0cmluZyBTIGluIGN1cnNvcgorICAg ZmFjZS4gKi8KK3N0YXRpYyB2b2lkCittY193MzJfc2V0X2N1cnNvcl9nYyAoc3RydWN0IGdseXBo X3N0cmluZyAqcywgYm9vbCBjdXJzb3JfZ2NfcCkKK3sKKyAgaWYgKGN1cnNvcl9nY19wKQorICAg IHsKKyAgICAgIHMtPmdjID0gcy0+Zi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2M7CisgICAg ICByZXR1cm47CisgICAgfQorICBpZiAocy0+Zm9udCA9PSBGUkFNRV9GT05UIChzLT5mKQorICAg ICAgJiYgcy0+ZmFjZS0+YmFja2dyb3VuZCA9PSBGUkFNRV9CQUNLR1JPVU5EX1BJWEVMIChzLT5m KQorICAgICAgJiYgcy0+ZmFjZS0+Zm9yZWdyb3VuZCA9PSBGUkFNRV9GT1JFR1JPVU5EX1BJWEVM IChzLT5mKQorICAgICAgLyogU29tZXRpbWVzIHdlIGFyZSBub3QgY2FsbGVkIGZvciBlYWNoIGNo YW5nZSBpbiB0aGUgZGVmYXVsdAorICAgICAgZmFjZSdzIGJhY2tncm91bmQgY29sb3IgKGUuZy4s IGJ1ZyMyNjg1MSksIHNvIHRoZSBhZGRpdGlvbmFsCisgICAgICB0ZXN0IGluIHRoZSBuZXh0IGxp bmUgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gcmVzeW5jLiAqLworICAgICAgJiYgcy0+Zi0+b3V0cHV0 X2RhdGEudzMyLT5jdXJzb3JfZ2MtPmZvcmVncm91bmQgPT0gcy0+ZmFjZS0+YmFja2dyb3VuZAor ICAgICAgJiYgIXMtPmNtcCkKKyAgICBzLT5nYyA9IHMtPmYtPm91dHB1dF9kYXRhLnczMi0+Y3Vy c29yX2djOworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogQ3Vyc29yIG9uIG5vbi1kZWZh dWx0IGZhY2U6IG11c3QgbWVyZ2UuICovCisgICAgICAgIEVtYWNzX0dDIHhnY3Y7CisgICAgICAg IHVuc2lnbmVkIGxvbmcgbWFzazsKKyAgICAgICAgeGdjdi5iYWNrZ3JvdW5kID0gcy0+Zi0+b3V0 cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWw7CisgICAgICAgIHhnY3YuZm9yZWdyb3VuZCA9IHMt PmZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgIC8qIElmIHRoZSBnbHlwaCB3b3VsZCBiZSBpbnZp c2libGUsIHRyeSBhIGRpZmZlcmVudCBmb3JlZ3JvdW5kLiAqLworICAgICAgICBpZiAoeGdjdi5m b3JlZ3JvdW5kID09IHhnY3YuYmFja2dyb3VuZCkKKyAgICAgICAgICB4Z2N2LmZvcmVncm91bmQg PSBzLT5mYWNlLT5mb3JlZ3JvdW5kOworICAgICAgICBpZiAoeGdjdi5mb3JlZ3JvdW5kID09IHhn Y3YuYmFja2dyb3VuZCkKKyAgICAgICAgICB4Z2N2LmZvcmVncm91bmQgPSBzLT5mLT5vdXRwdXRf ZGF0YS53MzItPmN1cnNvcl9mb3JlZ3JvdW5kX3BpeGVsOworICAgICAgICBpZiAoeGdjdi5mb3Jl Z3JvdW5kID09IHhnY3YuYmFja2dyb3VuZCkKKyAgICAgICAgICB4Z2N2LmZvcmVncm91bmQgPSBz LT5mYWNlLT5mb3JlZ3JvdW5kOworICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGN1cnNvciBpcyBk aXN0aW5jdCBmcm9tIHRleHQgaW4gdGhpcyBmYWNlLiAqLworICAgICAgICBpZiAoeGdjdi5iYWNr Z3JvdW5kID09IHMtPmZhY2UtPmJhY2tncm91bmQKKyAgICAgICAgICAgICYmIHhnY3YuZm9yZWdy b3VuZCA9PSBzLT5mYWNlLT5mb3JlZ3JvdW5kKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHhn Y3YuYmFja2dyb3VuZCA9IHMtPmZhY2UtPmZvcmVncm91bmQ7CisgICAgICAgICAgICB4Z2N2LmZv cmVncm91bmQgPSBzLT5mYWNlLT5iYWNrZ3JvdW5kOworICAgICAgICAgIH0KKyAgICAgICAgSUZf REVCVUcgKHczMl9jaGVja19mb250IChzLT5mLCBzLT5mb250KSk7CisgICAgICAgIG1hc2sgPSBH Q0ZvcmVncm91bmQgfCBHQ0JhY2tncm91bmQ7CisgICAgICAgIGlmIChGUkFNRV9ESVNQTEFZX0lO Rk8gKHMtPmYpLT5zY3JhdGNoX2N1cnNvcl9nYykKKyAgICAgICAgICBYQ2hhbmdlR0MgKE5VTEws IEZSQU1FX0RJU1BMQVlfSU5GTyAocy0+ZiktPnNjcmF0Y2hfY3Vyc29yX2djLCBtYXNrLCAmeGdj dik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgRlJBTUVfRElTUExBWV9JTkZPIChzLT5m KS0+c2NyYXRjaF9jdXJzb3JfZ2MKKyAgICAgICAgICAgICAgPSBYQ3JlYXRlR0MgKE5VTEwsIEZS QU1FX1czMl9XSU5ET1cgKHMtPmYpLCBtYXNrLCAmeGdjdik7CisgICAgICAgIHMtPmdjID0gRlJB TUVfRElTUExBWV9JTkZPIChzLT5mKS0+c2NyYXRjaF9jdXJzb3JfZ2M7CisgICAgICB9Cit9CisK Ky8qIFNldCBTLT5nYyBvZiBnbHlwaCBzdHJpbmcgUyBmb3IgZHJhd2luZyB0aGF0IGdseXBoIHN0 cmluZy4gIFNldAorICAgUy0+c3RpcHBsZWRfcCB0byBhIG5vbi16ZXJvIHZhbHVlIGlmIHRoZSBm YWNlIG9mIFMgaGFzIGEgc3RpcHBsZSBwYXR0ZXJuLiAqLworc3RhdGljIGlubGluZSB2b2lkCitt Y193MzJfc2V0X2dseXBoX3N0cmluZ19nYyAoc3RydWN0IGdseXBoX3N0cmluZyAqcywgYm9vbCBj dXJzb3JfZ2NfcCkKK3sKKyAgcHJlcGFyZV9mYWNlX2Zvcl9kaXNwbGF5IChzLT5mLCBzLT5mYWNl KTsKKyAgaWYgKHMtPmhsID09IERSQVdfTk9STUFMX1RFWFQpCisgICAgeworICAgICAgcy0+Z2Mg PSBzLT5mYWNlLT5nYzsKKyAgICAgIHMtPnN0aXBwbGVkX3AgPSBzLT5mYWNlLT5zdGlwcGxlICE9 IDA7CisgICAgfQorICAgIGVsc2UgaWYgKHMtPmhsID09IERSQVdfSU5WRVJTRV9WSURFTykKKyAg ICAgIHsKKyAgICAgICAgdzMyX3NldF9tb2RlX2xpbmVfZmFjZV9nYyAocyk7CisgICAgICAgIHMt PnN0aXBwbGVkX3AgPSBzLT5mYWNlLT5zdGlwcGxlICE9IDA7CisgICAgICB9CisgICAgICBlbHNl IGlmIChzLT5obCA9PSBEUkFXX0NVUlNPUikKKyAgICAgICAgeworICAgICAgICAgIG1jX3czMl9z ZXRfY3Vyc29yX2djIChzLCBjdXJzb3JfZ2NfcCk7CisgICAgICAgICAgcy0+c3RpcHBsZWRfcCA9 IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHMtPmhsID09IERSQVdfTU9VU0Vf RkFDRSkKKyAgICAgICAgICB7CisgICAgICAgICAgICB3MzJfc2V0X21vdXNlX2ZhY2VfZ2MgKHMp OworICAgICAgICAgICAgcy0+c3RpcHBsZWRfcCA9IHMtPmZhY2UtPnN0aXBwbGUgIT0gMDsKKyAg ICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAocy0+aGwgPT0gRFJBV19JTUFHRV9SQUlTRUQK KyAgICAgICAgICAgICAgICAgICB8fCBzLT5obCA9PSBEUkFXX0lNQUdFX1NVTktFTikKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgcy0+Z2MgPSBzLT5mYWNlLT5nYzsKKyAgICAgICAgICAg ICAgcy0+c3RpcHBsZWRfcCA9IHMtPmZhY2UtPnN0aXBwbGUgIT0gMDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZW1hY3NfYWJvcnQgKCk7CisgIC8qIEdD IG11c3QgaGF2ZSBiZWVuIHNldC4gKi8KKyAgZWFzc2VydCAocy0+Z2MgIT0gMCk7Cit9CisKKy8q IERyYXcgYSBob2xsb3cgYm94IGN1cnNvciBvbiB3aW5kb3cgVyBpbiBnbHlwaCByb3cgUk9XLiAq Lworc3RhdGljIHZvaWQKK21jX3czMl9kcmF3X2hvbGxvd19jdXJzb3IgKHN0cnVjdCB3aW5kb3cg KncsIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgaW50IHgsIGludCBmeCwgaW50IHksIGludCBmeSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBocG9zLCBpbnQgdnBvcywgaW50IHdkLCBp bnQgaCkKK3sKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FIChXSU5ET1dfRlJBTUUgKHcpKTsK KyAgSERDIGhkYzsKKyAgUkVDVCByZWN0OworICBIQlJVU0ggaGIgPSBDcmVhdGVTb2xpZEJydXNo IChmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCk7CisgIC8qIEdldCB0aGUgZ2x5cGgg dGhlIGN1cnNvciBpcyBvbi4gIElmIHdlIGNhbid0IHRlbGwgYmVjYXVzZQorICAgICB0aGUgY3Vy cmVudCBtYXRyaXggaXMgaW52YWxpZCBvciBzdWNoLCBnaXZlIHVwLiAqLworICBzdHJ1Y3QgZ2x5 cGggKmN1cnNvcl9nbHlwaCA9IG1jX2dldF9jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBo cG9zLCB2cG9zKTsKKyAgaWYgKGN1cnNvcl9nbHlwaCA9PSBOVUxMKQorICAgIHsKKyAgICAgIERl bGV0ZU9iamVjdCAoaGIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgaW50IHJsID0gZng7Cisg IGludCBydCA9IGZ5OworICBpbnQgcnIgPSBybCArIHdkOworICBpbnQgcmIgPSBydCArIGg7Cisg IC8vICBmcHJpbnRmIChzdGRlcnIsICJNQ19IT0xMT1dfQk9YOiAgcmwgKCVkKSB8IHJ0ICglZCkg fCByciAoJWQpIHwgcmIgKCVkKVxuIiwKKyAgLy8gICAgICAgICAgICAgICAgICAgcmwsIHJ0LCBy ciwgcmIpOworICByZWN0LmxlZnQgPSBybDsKKyAgcmVjdC50b3AgPSBydDsKKyAgcmVjdC5yaWdo dCA9IHJyOworICByZWN0LmJvdHRvbSA9IHJiOworICBoZGMgPSBnZXRfZnJhbWVfZGMgKGYpOwor ICAvKiBTZXQgY2xpcHBpbmcsIGRyYXcgdGhlIHJlY3RhbmdsZSwgYW5kIHJlc2V0IGNsaXBwaW5n IGFnYWluLiAqLworICB3MzJfY2xpcF90b19yb3cgKHcsIHJvdywgVEVYVF9BUkVBLCBoZGMpOwor ICBGcmFtZVJlY3QgKGhkYywgJnJlY3QsIGhiKTsKKyAgRGVsZXRlT2JqZWN0IChoYik7CisgIHcz Ml9zZXRfY2xpcF9yZWN0YW5nbGUgKGhkYywgTlVMTCk7CisgIHJlbGVhc2VfZnJhbWVfZGMgKGYs IGhkYyk7Cit9CisKKy8qIERyYXcgYSBiYXIgY3Vyc29yIG9uIHdpbmRvdyBXIGluIGdseXBoIHJv dyBST1cuICovCitzdGF0aWMgdm9pZAorbWNfdzMyX2RyYXdfYmFyX2N1cnNvciAoc3RydWN0IHdp bmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpy b3csCisgIGludCB4LCBpbnQgZngsIGludCB5LCBpbnQgZnksIGludCBocG9zLCBpbnQgdnBvcywg aW50IHdkLCBpbnQgaCwgaW50IHdpZHRoLAorICBlbnVtIG1jX2N1cnNvcl90eXBlIGtpbmQsIGJv b2wgY3Vyc29yX2djX2ludmlzaWJsZV9va2F5X3ApCit7CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhG UkFNRSAody0+ZnJhbWUpOworICAvKiBJZiBjdXJzb3IgaXMgb3V0IG9mIGJvdW5kcywgZG9uJ3Qg ZHJhdyBnYXJiYWdlLiAgVGhpcyBjYW4gaGFwcGVuCisgICAgIGluIG1pbmktYnVmZmVyIHdpbmRv d3Mgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBlY2hvIGFyZWEgZ2x5cGhzCisgICAgIGFuZCBtaW5p LWJ1ZmZlci4gKi8KKyAgc3RydWN0IGdseXBoICpjdXJzb3JfZ2x5cGggPSBtY19nZXRfY3Vyc29y X2dseXBoICh3LCBtYXRyaXgsIHJvdywgaHBvcywgdnBvcyk7CisgIGlmIChjdXJzb3JfZ2x5cGgg PT0gTlVMTCkKKyAgICByZXR1cm47CisgIC8qIElmIG9uIGFuIGltYWdlLCBkcmF3IGxpa2UgYSBu b3JtYWwgY3Vyc29yLiAgVGhhdCdzIHVzdWFsbHkgYmV0dGVyCisgICAgIHZpc2libGUgdGhhbiBk cmF3aW5nIGEgYmFyLCBlc3AuIGlmIHRoZSBpbWFnZSBpcyBsYXJnZSBzbyB0aGF0CisgICAgIHRo ZSBiYXIgbWlnaHQgbm90IGJlIGluIHRoZSB3aW5kb3cuICovCisgIGlmIChjdXJzb3JfZ2x5cGgt PnR5cGUgPT0gSU1BR0VfR0xZUEgpCisgICAgeworICAgICAgc3RydWN0IG1jX1JHQiBsc2wgPSB7 LnJlZCA9IC0xLjAsIC5ncmVlbiA9IC0xLjAsIC5ibHVlID0gLTEuMH07CisgICAgICBlbnVtIG1j X2ZsYXZvciBnbHlwaF9mbGF2b3IgPSBOT19GTEFWT1I7CisgICAgICBlbnVtIG1jX2N1cnNvcl90 eXBlIGN1cnNvcl90eXBlID0gTUNfSE9MTE9XX0JPWDsKKyAgICAgIGJvb2wgYWN0aXZlX3AgPSBm YWxzZTsKKyAgICAgIGJvb2wgY3Vyc29yX2djX3AgPSBmYWxzZTsKKyAgICAgIG1jX2RyYXdfY3Vy c29yX2dseXBoICh3LCBtYXRyaXgsIHJvdywgRFJBV19DVVJTT1IsIHgsIGhwb3MsIHZwb3MsIGxz bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9mbGF2b3IsIGN1cnNvcl90eXBl LCB3ZCwgYWN0aXZlX3AsIGN1cnNvcl9nY19wKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgewor ICAgICAgICBDT0xPUlJFRiBjdXJzb3JfY29sb3IgPSBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNv cl9waXhlbDsKKyAgICAgICAgc3RydWN0IGZhY2UgKmZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGN1 cnNvcl9nbHlwaC0+ZmFjZV9pZCk7CisgICAgICAgIEhEQyBoZGM7CisgICAgICAgIC8qIElmIHRo ZSBnbHlwaCdzIGJhY2tncm91bmQgZXF1YWxzIHRoZSBjb2xvciB3ZSBub3JtYWxseSBkcmF3Cisg ICAgICAgIHRoZSBiYXIgY3Vyc29yIGluLCB0aGUgYmFyIGN1cnNvciBpbiBpdHMgbm9ybWFsIGNv bG9yIGlzCisgICAgICAgIGludmlzaWJsZS4gIFVzZSB0aGUgZ2x5cGgncyBmb3JlZ3JvdW5kIGNv bG9yIGluc3RlYWQgaW4gdGhpcworICAgICAgICBjYXNlLCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0 IHRoZSBnbHlwaCdzIGNvbG9ycyBhcmUgY2hvc2VuIHNvCisgICAgICAgIHRoYXQgdGhlIGdseXBo IGlzIGxlZ2libGUuICovCisgICAgICAgIGlmIChmYWNlLT5iYWNrZ3JvdW5kID09IGN1cnNvcl9j b2xvcgorICAgICAgICAgICAgJiYgIWN1cnNvcl9nY19pbnZpc2libGVfb2theV9wKQorICAgICAg ICAgIGN1cnNvcl9jb2xvciA9IGZhY2UtPmZvcmVncm91bmQ7CisgICAgICAgIGludCBkZWZhdWx0 X2Z4ID0gV0lORE9XX1RFWFRfVE9fRlJBTUVfUElYRUxfWCAodywgeCk7CisgICAgICAgIGhkYyA9 IGdldF9mcmFtZV9kYyAoZik7CisgICAgICAgIHczMl9jbGlwX3RvX3JvdyAodywgcm93LCBURVhU X0FSRUEsIGhkYyk7CisgICAgICAgIGludCByeCA9IGZ4OworICAgICAgICBpbnQgcnkgPSBmeTsK KyAgICAgICAgaW50IHJ3ID0gd2Q7CisgICAgICAgIGludCByaCA9IGg7CisgICAgICAgIC8vICBm cHJpbnRmIChzdGRlcnIsICJNQ19IQkFSOiAgZnggKCVkKSB8IGZ5ICglZCkgfCB3ZCAoJWQpIHwg aCAoJWQpXG4iLAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICByeCwgcnksIHJ3LCByaCk7 CisgICAgICAgIHczMl9maWxsX2FyZWEgKGYsIGhkYywgY3Vyc29yX2NvbG9yLCByeCwgcnksIHJ3 LCByaCk7CisgICAgICAgIHczMl9zZXRfY2xpcF9yZWN0YW5nbGUgKGhkYywgTlVMTCk7CisgICAg ICAgIHJlbGVhc2VfZnJhbWVfZGMgKGYsIGhkYyk7CisgICAgICB9Cit9CisKKy8qIFJJRjogRHJh dyBvciBjbGVhciBjdXJzb3Igb24gd2luZG93IFcuICovCitzdGF0aWMgdm9pZAorbWNfdzMyX2Ry YXdfd2luZG93X2N1cnNvciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAq bWF0cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisgICAgICAgICAgICAgICAgICBpbnQgeCwg aW50IGZ4LCBpbnQgeSwgaW50IGZ5LCBpbnQgaHBvcywgaW50IHZwb3MsIGludCB3ZCwgaW50IGgs CisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGxzbCwgZW51bSBtY19jdXJzb3JfdHlw ZSBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgIGludCBjdXJzb3Jfd2lkdGgsIGVudW0g bWNfZmxhdm9yIGdseXBoX2ZsYXZvciwgYm9vbCBvbl9wLCBib29sIGFjdGl2ZV9wKQoreworICBp ZiAob25fcCkKKyAgICB7CisgICAgICAvKiBJZiB0aGlzIGlzIHRoZSBhY3RpdmUgY3Vyc29yLCB3 ZSBuZWVkIHRvIHRyYWNrIGl0IHdpdGggdGhlCisgICAgICBzeXN0ZW0gY2FyZXQsIHNvIHRoaXJk IHBhcnR5IHNvZnR3YXJlIGxpa2Ugc2NyZWVuIG1hZ25pZmllcnMKKyAgICAgIGFuZCBzcGVlY2gg c3ludGhlc2l6ZXJzIGNhbiBmb2xsb3cgdGhlIGN1cnNvci4gKi8KKyAgICAgIGlmIChhY3RpdmVf cCkKKyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9X X0ZSQU1FICh3KSk7CisgICAgICAgICAgSFdORCBod25kID0gRlJBTUVfVzMyX1dJTkRPVyAoZik7 CisgICAgICAgICAgdzMyX3N5c3RlbV9jYXJldF94CisgICAgICAgICAgICA9IFdJTkRPV19URVhU X1RPX0ZSQU1FX1BJWEVMX1ggKHcsIHgpOworICAgICAgICAgIC8qIEZJWE1FOiAgV2hhdCBzaG91 bGQgd2UgdXNlIGluc3RlYWQgb2YgYHctPnBoeXNfY3Vyc29yX2FzY2VudCc/ICovCisgICAgICAg ICAgdzMyX3N5c3RlbV9jYXJldF95CisgICAgICAgICAgICA9IChXSU5ET1dfVE9fRlJBTUVfUElY RUxfWSAodywgeSkKKyAgICAgICAgICAgICAgICsgcm93LT5hc2NlbnQgLSB3LT5waHlzX2N1cnNv cl9hc2NlbnQpOworICAgICAgICAgIHczMl9zeXN0ZW1fY2FyZXRfd2luZG93ID0gdzsKKyAgICAg ICAgICB3MzJfc3lzdGVtX2NhcmV0X2hkcl9oZWlnaHQgPSBXSU5ET1dfSEVBREVSX0xJTkVfSEVJ R0hUICh3KTsKKyAgICAgICAgICB3MzJfc3lzdGVtX2NhcmV0X21vZGVfaGVpZ2h0ID0gV0lORE9X X01PREVfTElORV9IRUlHSFQgKHcpOworICAgICAgICAgIFBvc3RNZXNzYWdlIChod25kLCBXTV9J TUVfU1RBUlRDT01QT1NJVElPTiwgMCwgMCk7CisgICAgICAgICAgLyogSWYgdGhlIHNpemUgb2Yg dGhlIGFjdGl2ZSBjdXJzb3IgY2hhbmdlZCwgZGVzdHJveSB0aGUgb2xkCisgICAgICAgICAgICAg c3lzdGVtIGNhcmV0LiAqLworICAgICAgICAgIGlmICh3MzJfc3lzdGVtX2NhcmV0X2h3bmQKKyAg ICAgICAgICAgICAgJiYgKHczMl9zeXN0ZW1fY2FyZXRfaGVpZ2h0ICE9IGgpKQorICAgICAgICAg ICAgUG9zdE1lc3NhZ2UgKGh3bmQsIFdNX0VNQUNTX0RFU1RST1lfQ0FSRVQsIDAsIDApOworICAg ICAgICAgIHczMl9zeXN0ZW1fY2FyZXRfaGVpZ2h0ID0gaDsKKyAgICAgICAgICAvKiBNb3ZlIHRo ZSBzeXN0ZW0gY2FyZXQuICovCisgICAgICAgICAgUG9zdE1lc3NhZ2UgKGh3bmQsIFdNX0VNQUNT X1RSQUNLX0NBUkVULCAwLCAwKTsKKyAgICAgICAgfQorICAgICAgLyogVGhlIGZyaW5nZSBiaXRt YXBzIGFyZSBwcmVzZW50bHkgaGFuZGxlZCBlbHNld2hlcmUsIGJ1dCBjb3VsZCBzb21lZGF5Cisg ICAgICBiZSBtYW5hZ2VkIChpbiBwYXJ0KSBhdCB0aGlzIHNlY3Rpb24gb2YgY29kZS4gKi8KKyAg ICAgIGlmIChyb3ctPmV4YWN0X3dpbmRvd193aWR0aF9saW5lX3AKKyAgICAgICAgICAmJiAocm93 LT5yZXZlcnNlZF9wCisgICAgICAgICAgICAgPyAoaHBvcyA8IDApCisgICAgICAgICAgICAgOiAo aHBvcyA+PSByb3ctPnVzZWRbVEVYVF9BUkVBXSkpKQorICAgICAgICB7CisgICAgICAgICAgcm93 LT5jdXJzb3JfaW5fZnJpbmdlX3AgPSB0cnVlOworICAgICAgICAgIG1jX2RyYXdfZnJpbmdlX2Jp dG1hcCAodywgcm93LCByb3ctPnJldmVyc2VkX3AsIGN1cnNvcl90eXBlKTsKKyAgICAgICAgICBy ZXR1cm47CisgICAgICAgIH0KKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FIChXSU5ET1dfRlJB TUUgKHcpKTsKKyAgQ09MT1JSRUYgb3JpZ2luYWxfY3Vyc29yX3BpeGVsID0gZi0+b3V0cHV0X2Rh dGEudzMyLT5jdXJzb3JfcGl4ZWw7CisgIC8qIHh0ZXJtLmMveHRlcm0uaCB1c2UgR0M7IHdoZXJl YXMsIHczMnRlcm0uYy93MzJ0ZXJtLmggdXNlIEVtYWNzX0dDICogKi8KKyAgRW1hY3NfR0MgKm9y aWdpbmFsX2N1cnNvcl9nYyA9IGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djOworICAvKiBP biBXaW5kb3dzLCBSR0IgdmFsdWVzIGFyZSAwLTI1NSwgbm90IDAtNjU1MzUuICovCisgIGludCBy ZWQgPSBtaW4gKDI1NSwgMjU1ICogbHNsLnJlZCk7CisgIGludCBncmVlbiA9IG1pbiAoMjU1LCAy NTUgKiBsc2wuZ3JlZW4pOworICBpbnQgYmx1ZSA9IG1pbiAoMjU1LCAyNTUgKiBsc2wuYmx1ZSk7 CisgIENPTE9SUkVGIGNvbG9yX3BpeGVsID0gUEFMRVRURVJHQiAocmVkLCBncmVlbiwgYmx1ZSk7 CisgIHN3aXRjaCAoY3Vyc29yX3R5cGUpCisgIHsKKyAgICBjYXNlIE1DX05PX0ZSSU5HRV9CSVRN QVA6CisgICAgICBicmVhazsKKyAgICBjYXNlIE1DX05PX0NVUlNPUjoKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgTUNfUklHSFRfRlJJTkdFX0JJVE1BUDoKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug TUNfTEVGVF9GUklOR0VfQklUTUFQOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNQ19GUkFNRURf Qk9YOgorICAgIHsKKyAgICAgIHN0cnVjdCBnbHlwaCAqY3Vyc29yX2dseXBoID0gbWNfZ2V0X2N1 cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIGhwb3MsIHZwb3MpOworICAgICAgaWYgKGN1cnNv cl9nbHlwaCA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgICBFbWFjc19HQyBnY192YWx1 ZXM7CisgICAgICB1bnNpZ25lZCBsb25nIG1hc2sgPSBHQ0ZvcmVncm91bmQgfCBHQ0JhY2tncm91 bmQ7CisgICAgICBzdHJ1Y3QgZmFjZSAqZGVmYXVsdF9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBE RUZBVUxUX0ZBQ0VfSUQpOworICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKHctPmNv bnRlbnRzKTsKKyAgICAgIGJvb2wgcmVnaW9uX2FjdGl2ZV9wID0gKCFOSUxQIChWdHJhbnNpZW50 X21hcmtfbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFS IChiLCBtYXJrX2FjdGl2ZSkpKTsKKyAgICAgIHB0cmRpZmZfdCByZWdpb25fYmVnID0gKHJlZ2lv bl9hY3RpdmVfcCkgPyBtY19yZWdpb25fbGltaXQgKDEpIDogLTE7CisgICAgICBwdHJkaWZmX3Qg cmVnaW9uX2VuZCA9IChyZWdpb25fYWN0aXZlX3ApID8gbWNfcmVnaW9uX2xpbWl0ICgwKSA6IC0x OworICAgICAgaWYgKGN1cnNvcl9nbHlwaC0+dHlwZSAhPSBJTUFHRV9HTFlQSCAmJiBsc2wucmVk ID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAgICAgICAgeworICAg ICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3Jf Z2MnIGJ5IGJvcnJvd2luZyB0aGUKKyAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIGB4X21ha2Vf Z2MnIGluIHczMmZucy5jLiAqLworICAgICAgICAgIGlmIChyZWdpb25fYWN0aXZlX3AKKyAgICAg ICAgICAgICAgJiYgYWN0aXZlX3AKKyAgICAgICAgICAgICAgJiYgY3Vyc29yX2dseXBoLT5jaGFy cG9zID09IHJlZ2lvbl9iZWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVudW0gZmFj ZV9pZCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZWdfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNl ICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItYXQtcmVnaW9uLXByZS16di1mYWNl IiksIHRydWUpOworICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdp b25fYmVnX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfcmVnaW9uX2JlZ19m YWNlX2lkKTsKKyAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfZmFjZV9p ZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3It cHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3df YWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFjZV9pZCk7Cisg ICAgICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gaG9sbG93X2FjdGl2ZV9mYWNlLT5m b3JlZ3JvdW5kOworICAgICAgICAgICAgICBnY192YWx1ZXMuYmFja2dyb3VuZCA9IGhvbGxvd19h Y3RpdmVfcmVnaW9uX2JlZ19mYWNlLT5mb3JlZ3JvdW5kOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZWxzZSBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAmJiBh Y3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX2dseXBoLT5jaGFycG9zID09 IHJlZ2lvbl9lbmQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnVtIGZhY2Vf aWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAo dywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWF0LXJlZ2lvbi1wcmUtenYtZmFjZSIp LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdp b25fZW5kX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfcmVnaW9uX2VuZF9m YWNlX2lkKTsKKyAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNl X2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNv ci1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9s bG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQp OworICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gaG9sbG93X2FjdGl2ZV9m YWNlLT5mb3JlZ3JvdW5kOworICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5iYWNrZ3JvdW5kID0g aG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAgICAgICAg ICAgICAgICAgICYmIGFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9n bHlwaC0+Y2hhcnBvcyA+IHJlZ2lvbl9iZWcKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgY3Vy c29yX2dseXBoLT5jaGFycG9zIDwgcmVnaW9uX2VuZCkKKyAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9m YWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1 cnNvci1pbi1yZWdpb24tcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9mYWNlID0gRkFDRV9GUk9N X0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZXR3ZWVuX2ZhY2VfaWQpOworICAgICAgICAg ICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1l ZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItcHJlLXp2LWZhY2UiKSwg dHJ1ZSk7CisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9mYWNl ID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAg ICAgICAgZ2NfdmFsdWVzLmZvcmVncm91bmQgPSBob2xsb3dfYWN0aXZlX2ZhY2UtPmZvcmVncm91 bmQ7CisgICAgICAgICAgICAgICAgICBnY192YWx1ZXMuYmFja2dyb3VuZCA9IGhvbGxvd19hY3Rp dmVfcmVnaW9uX2JldHdlZW5fZmFjZS0+Zm9yZWdyb3VuZDsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgZWxzZSBpZiAoYWN0aXZlX3ApCisgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQgPSBs b29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLXByZS16 di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93 X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOwor ICAgICAgICAgICAgICAgICAgICBnY192YWx1ZXMuZm9yZWdyb3VuZCA9IGhvbGxvd19hY3RpdmVf ZmFjZS0+Zm9yZWdyb3VuZDsKKyAgICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91 bmQgPSBob2xsb3dfYWN0aXZlX2ZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYWN0aXZlX3ApCisgICAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2luYWN0aXZl X2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2Ut Y3Vyc29yLWluYWN0aXZlLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBmYWNlICpob2xsb3dfaW5hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwg aG9sbG93X2luYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICAgICAgICAgIGdjX3ZhbHVl cy5mb3JlZ3JvdW5kID0gaG9sbG93X2luYWN0aXZlX2ZhY2UtPmZvcmVncm91bmQ7CisgICAgICAg ICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQgPSBob2xsb3dfaW5hY3RpdmVfZmFj ZS0+YmFja2dyb3VuZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgIGYtPm91dHB1 dF9kYXRhLnczMi0+Y3Vyc29yX2djID0gWENyZWF0ZUdDIChOVUxMLCBGUkFNRV9XMzJfV0lORE9X IChmKSwgbWFzaywgJmdjX3ZhbHVlcyk7CisgICAgICAgICAgYmxvY2tfaW5wdXQgKCk7CisgICAg ICAgICAgLyogRm9yY2UgYG1jX3czMl9zZXRfY3Vyc29yX2djJyB0byB1c2UgYHMtPmYtPm91dHB1 dF9kYXRhLnczMi0+Y3Vyc29yX2djJy4gKi8KKyAgICAgICAgICBib29sIGN1cnNvcl9nY19wID0g dHJ1ZTsKKyAgICAgICAgICBtY19kcmF3X2N1cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIERS QVdfQ1VSU09SLCB4LCBocG9zLCB2cG9zLCBsc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdkLCBhY3RpdmVfcCwgY3Vyc29yX2dj X3ApOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djID0gb3JpZ2luYWxf Y3Vyc29yX2djOworICAgICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgLyogVGVt cG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCcuICovCisg ICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwgPSBjb2xvcl9waXhlbDsK KyAgICAgICAgICBtY193MzJfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBtYXRyaXgsIHJvdywgeCwg ZngsIHksIGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCk7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEu dzMyLT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJzb3JfcGl4ZWw7CisgICAgICAgIH0KKyAg ICAgICAgZWxzZSBpZiAoY3Vyc29yX2dseXBoLT50eXBlID09IElNQUdFX0dMWVBIICYmIGxzbC5y ZWQgPj0gMCAmJiBsc2wuZ3JlZW4gPj0gMCAmJiBsc2wuYmx1ZSA+PSAwKQorICAgICAgICAgIHsK KyAgICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5j dXJzb3JfcGl4ZWwnLiAqLworICAgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3Jf cGl4ZWwgPSBjb2xvcl9waXhlbDsKKyAgICAgICAgICAgIG1jX3czMl9kcmF3X2hvbGxvd19jdXJz b3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdkLCBoKTsKKyAg ICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gb3JpZ2luYWxfY3Vy c29yX3BpeGVsOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5j dXJzb3JfZ2MnIGJ5IGJvcnJvd2luZyB0aGUKKyAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBv ZiBgeF9tYWtlX2djJyBpbiB3MzJmbnMuYy4gKi8KKyAgICAgICAgICAgICAgaWYgKHJlZ2lvbl9h Y3RpdmVfcAorICAgICAgICAgICAgICAgICAgJiYgYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAg ICYmIGN1cnNvcl9nbHlwaC0+Y2hhcnBvcyA9PSByZWdpb25fYmVnKQorICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9i ZWdfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFr ZS1jdXJzb3ItYXQtcmVnaW9uLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAg ICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfcmVnaW9uX2JlZ19mYWNlID0gRkFDRV9GUk9N X0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZWdfZmFjZV9pZCk7CisgICAgICAgICAgICAg ICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2Zh Y2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1wcmUtenYtZmFjZSIpLCB0cnVl KTsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX2ZhY2UgPSBG QUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAg ICBnY192YWx1ZXMuZm9yZWdyb3VuZCA9IGhvbGxvd19hY3RpdmVfZmFjZS0+Zm9yZWdyb3VuZDsK KyAgICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5iYWNrZ3JvdW5kID0gaG9sbG93X2FjdGl2ZV9y ZWdpb25fYmVnX2ZhY2UtPmZvcmVncm91bmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIGVsc2UgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAg ICYmIGFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX2dseXBoLT5j aGFycG9zID09IHJlZ2lvbl9lbmQpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9lbmRfZmFjZV9pZCA9IGxv b2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItYXQtcmVn aW9uLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFj ZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxv d19hY3RpdmVfcmVnaW9uX2VuZF9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgICAgZW51bSBm YWNlX2lkIGhvbGxvd19hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBp bnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01f SUQgKGYsIGhvbGxvd19hY3RpdmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgICAgIGdjX3Zh bHVlcy5mb3JlZ3JvdW5kID0gaG9sbG93X2FjdGl2ZV9mYWNlLT5mb3JlZ3JvdW5kOworICAgICAg ICAgICAgICAgICAgICBnY192YWx1ZXMuYmFja2dyb3VuZCA9IGhvbGxvd19hY3RpdmVfcmVnaW9u X2VuZF9mYWNlLT5iYWNrZ3JvdW5kOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgZWxzZSBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBhY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX2dseXBo LT5jaGFycG9zID4gcmVnaW9uX2JlZworICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3Vy c29yX2dseXBoLT5jaGFycG9zIDwgcmVnaW9uX2VuZCkKKyAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9i ZXR3ZWVuX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFs LWZha2UtY3Vyc29yLWluLXJlZ2lvbi1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9mYWNl ID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZXR3ZWVuX2ZhY2VfaWQp OworICAgICAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX2ZhY2Vf aWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29y LXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNl ICpob2xsb3dfYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFj ZV9pZCk7CisgICAgICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmZvcmVncm91bmQgPSBob2xs b3dfYWN0aXZlX2ZhY2UtPmZvcmVncm91bmQ7CisgICAgICAgICAgICAgICAgICAgICAgZ2NfdmFs dWVzLmJhY2tncm91bmQgPSBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZXR3ZWVuX2ZhY2UtPmZvcmVn cm91bmQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp ZiAoYWN0aXZlX3ApCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9m YWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItcHJlLXp2LWZhY2UiKSwgdHJ1 ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9m YWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAg ICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmZvcmVncm91bmQgPSBob2xsb3dfYWN0aXZlX2ZhY2Ut PmZvcmVncm91bmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBnY192YWx1ZXMuYmFja2dyb3Vu ZCA9IGhvbGxvd19hY3RpdmVfZmFjZS0+YmFja2dyb3VuZDsKKyAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFjdGl2ZV9wKQorICAgICAgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQg aG9sbG93X2luYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJu ICgiKy1yZWFsLWZha2UtY3Vyc29yLWluYWN0aXZlLXByZS16di1mYWNlIiksIHRydWUpOworICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2luYWN0aXZlX2ZhY2Ug PSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19pbmFjdGl2ZV9mYWNlX2lkKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmZvcmVncm91bmQgPSBob2xsb3dfaW5hY3RpdmVfZmFj ZS0+Zm9yZWdyb3VuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tn cm91bmQgPSBob2xsb3dfaW5hY3RpdmVfZmFjZS0+YmFja2dyb3VuZDsKKyAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2Mg PSBYQ3JlYXRlR0MgKE5VTEwsIEZSQU1FX1czMl9XSU5ET1cgKGYpLCBtYXNrLCAmZ2NfdmFsdWVz KTsKKyAgICAgICAgICAgICAgYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgICAgIC8qIEZvcmNl IGBtY193MzJfc2V0X2N1cnNvcl9nYycgdG8gdXNlIGBzLT5mLT5vdXRwdXRfZGF0YS53MzItPmN1 cnNvcl9nYycuICovCisgICAgICAgICAgICAgIGJvb2wgY3Vyc29yX2djX3AgPSB0cnVlOworICAg ICAgICAgICAgICBtY19kcmF3X2N1cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIERSQVdfQ1VS U09SLCB4LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bHNsLCBnbHlwaF9mbGF2b3IsIGN1cnNvcl90eXBlLCB3ZCwgYWN0aXZlX3AsIGN1cnNvcl9nY19w KTsKKyAgICAgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2MgPSBvcmlnaW5h bF9jdXJzb3JfZ2M7CisgICAgICAgICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAg ICAgIG1jX3czMl9kcmF3X2hvbGxvd19jdXJzb3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwg ZnksIGhwb3MsIHZwb3MsIHdkLCBoKTsKKyAgICAgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAg IH0KKyAgICBjYXNlIE1DX0hPTExPV19CT1g6CisgICAgeworICAgICAgaWYgKGxzbC5yZWQgPj0g MCAmJiBsc2wuZ3JlZW4gPj0gMCAmJiBsc2wuYmx1ZSA+PSAwKQorICAgICAgICB7CisgICAgICAg ICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhl bCcuICovCisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwgPSBjb2xv cl9waXhlbDsKKyAgICAgICAgICBtY193MzJfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBtYXRyaXgs IHJvdywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCk7CisgICAgICAgICAgZi0+b3V0 cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJzb3JfcGl4ZWw7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIG1jX3czMl9kcmF3X2hvbGxvd19jdXJzb3Ig KHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdkLCBoKTsKKyAgICAg IGJyZWFrOworICAgIH0KKyAgICBjYXNlIE1DX0ZJTExFRF9CT1g6CisgICAgeworICAgICAgaWYg KGxzbC5yZWQgPj0gMCAmJiBsc2wuZ3JlZW4gPj0gMCAmJiBsc2wuYmx1ZSA+PSAwKQorICAgICAg ICB7CisgICAgICAgICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS53MzIt PmN1cnNvcl9nYycgYnkgYm9ycm93aW5nIHRoZQorICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2Yg YHhfbWFrZV9nYycgaW4gdzMyZm5zLmMuICovCisgICAgICAgICAgYmxvY2tfaW5wdXQgKCk7Cisg ICAgICAgICAgRW1hY3NfR0MgZ2NfdmFsdWVzOworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWFz ayA9IEdDRm9yZWdyb3VuZCB8IEdDQmFja2dyb3VuZDsKKyAgICAgICAgICBnY192YWx1ZXMuZm9y ZWdyb3VuZCA9IEZSQU1FX0JBQ0tHUk9VTkRfUElYRUwgKGYpOworICAgICAgICAgIGdjX3ZhbHVl cy5iYWNrZ3JvdW5kID0gY29sb3JfcGl4ZWw7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMy LT5jdXJzb3JfZ2MgPSBYQ3JlYXRlR0MgKE5VTEwsIEZSQU1FX1czMl9XSU5ET1cgKGYpLCBtYXNr LCAmZ2NfdmFsdWVzKTsKKyAgICAgICAgICAvKiBGb3JjZSBgbWNfdzMyX3NldF9jdXJzb3JfZ2Mn IHRvIHVzZSBgcy0+Zi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2MnLiAqLworICAgICAgICAg IGJvb2wgY3Vyc29yX2djX3AgPSB0cnVlOworICAgICAgICAgIG1jX2RyYXdfY3Vyc29yX2dseXBo ICh3LCBtYXRyaXgsIHJvdywgRFJBV19DVVJTT1IsIHgsIGhwb3MsIHZwb3MsIGxzbCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgd2Qs IGFjdGl2ZV9wLCBjdXJzb3JfZ2NfcCk7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5j dXJzb3JfZ2MgPSBvcmlnaW5hbF9jdXJzb3JfZ2M7CisgICAgICAgICAgdW5ibG9ja19pbnB1dCAo KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgYm9v bCBjdXJzb3JfZ2NfcCA9IGZhbHNlOworICAgICAgICAgICAgbWNfZHJhd19jdXJzb3JfZ2x5cGgg KHcsIG1hdHJpeCwgcm93LCBEUkFXX0NVUlNPUiwgeCwgaHBvcywgdnBvcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsc2wsIGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdk LCBhY3RpdmVfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfZ2Nf cCk7CisgICAgICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTUNfQkFSOgor ICAgIHsKKyAgICAgIGlmIChsc2wucmVkID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJs dWUgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+ b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwnLiAqLworICAgICAgICAgIGYtPm91dHB1dF9k YXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gY29sb3JfcGl4ZWw7CisgICAgICAgICAgYm9vbCBjdXJz b3JfZ2NfaW52aXNpYmxlX29rYXlfcCA9IHRydWU7CisgICAgICAgICAgbWNfdzMyX2RyYXdfYmFy X2N1cnNvciAodywgbWF0cml4LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCwgY3Vyc29yX3dpZHRoLCBNQ19CQVIs IGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wKTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53 MzItPmN1cnNvcl9waXhlbCA9IG9yaWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAgICAgfQorICAg ICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgYm9vbCBjdXJzb3JfZ2NfaW52aXNp YmxlX29rYXlfcCA9IGZhbHNlOworICAgICAgICAgICAgbWNfdzMyX2RyYXdfYmFyX2N1cnNvciAo dywgbWF0cml4LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBoLCBjdXJzb3Jfd2lkdGgsIE1DX0JBUiwgY3Vyc29y X2djX2ludmlzaWJsZV9va2F5X3ApOworICAgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0K KyAgICBjYXNlIE1DX0hCQVI6CisgICAgeworICAgICAgaWYgKGxzbC5yZWQgPj0gMCAmJiBsc2wu Z3JlZW4gPj0gMCAmJiBsc2wuYmx1ZSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgLyogVGVt cG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCcuICovCisg ICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwgPSBjb2xvcl9waXhlbDsK KyAgICAgICAgICBib29sIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wID0gdHJ1ZTsKKyAgICAg ICAgICBtY193MzJfZHJhd19iYXJfY3Vyc29yICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHksIGZ5 LCBocG9zLCB2cG9zLCB3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLCBj dXJzb3Jfd2lkdGgsIE1DX0hCQVIsIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wKTsKKyAgICAg ICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCA9IG9yaWdpbmFsX2N1cnNvcl9w aXhlbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAg Ym9vbCBjdXJzb3JfZ2NfaW52aXNpYmxlX29rYXlfcCA9IGZhbHNlOworICAgICAgICAgICAgbWNf dzMyX2RyYXdfYmFyX2N1cnNvciAodywgbWF0cml4LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywg dnBvcywgd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLCBjdXJzb3Jf d2lkdGgsIE1DX0hCQVIsIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wKTsKKyAgICAgICAgICB9 CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGVtYWNzX2Fib3J0ICgp OworICB9CisgICAgfQorfQorCisvKiBEcmF3IGdseXBoIHN0cmluZyBTLiAgVGhlIGBtY19tYXRy aXhgIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdoZW4gZXJhc2luZworICAgZmFrZSBjdXJz b3JzIGR1cmluZyBgbWNfdXBkYXRlX3dpbmRvd19lcmFzZScgYW5kIHJlZHJhd2luZyBmYWtlIGN1 cnNvcnMgb24KKyAgIGxlZnQvcmlnaHQgb3ZlcndyaXR0ZW4gZ2x5cGhzLiAqLworc3RhdGljIHZv aWQKK21jX3czMl9kcmF3X2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBoX3N0cmluZyAqcywgc3Ry dWN0IGdseXBoX21hdHJpeCAqbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZ2x5cGhfcm93ICpyb3csIHN0cnVjdCBtY19tYXRyaXggbWNfbWF0cml4LAorICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGxzbCwgZW51bSBtY19mbGF2b3IgZ2x5cGhf Zmxhdm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1jX2N1cnNvcl90eXBlIGN1 cnNvcl90eXBlLCBpbnQgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBi b29sIGFjdGl2ZV9wLCBib29sIGN1cnNvcl9nY19wKQoreworICBib29sIHJlbGllZl9kcmF3bl9w ID0gMDsKKyAgLyogSWYgUyBkcmF3cyBpbnRvIHRoZSBiYWNrZ3JvdW5kIG9mIGl0cyBzdWNjZXNz b3IsIGRyYXcgdGhlCisgICAgIGJhY2tncm91bmQgb2YgdGhlIHN1Y2Nlc3NvciBmaXJzdCBzbyB0 aGF0IFMgY2FuIGRyYXcgaW50byBpdC4KKyAgICAgVGhpcyBtYWtlcyBTLT5uZXh0IHVzZSBYRHJh d1N0cmluZyBpbnN0ZWFkIG9mIFhEcmF3SW1hZ2VTdHJpbmcuICovCisgIGlmIChzLT5uZXh0ICYm IHMtPnJpZ2h0X292ZXJoYW5nICYmICFzLT5mb3Jfb3ZlcmxhcHMpCisgICAgeworICAgICAgaW50 IHdpZHRoOworICAgICAgc3RydWN0IGdseXBoX3N0cmluZyAqbmV4dDsKKyAgICAgIGZvciAod2lk dGggPSAwLCBuZXh0ID0gcy0+bmV4dDsKKyAgICAgICAgICAgbmV4dCAmJiB3aWR0aCA8IHMtPnJp Z2h0X292ZXJoYW5nOworICAgICAgICAgICB3aWR0aCArPSBuZXh0LT53aWR0aCwgbmV4dCA9IG5l eHQtPm5leHQpCisgICAgICAgIGlmIChuZXh0LT5maXJzdF9nbHlwaC0+dHlwZSAhPSBJTUFHRV9H TFlQSCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBtY193MzJfc2V0X2dseXBoX3N0cmluZ19n YyAobmV4dCwgY3Vyc29yX2djX3ApOworICAgICAgICAgICAgdzMyX3NldF9nbHlwaF9zdHJpbmdf Y2xpcHBpbmcgKG5leHQpOworICAgICAgICAgICAgaWYgKG5leHQtPmZpcnN0X2dseXBoLT50eXBl ID09IFNUUkVUQ0hfR0xZUEgpCisgICAgICAgICAgICAgIG1jX3czMl9kcmF3X3N0cmV0Y2hfZ2x5 cGhfc3RyaW5nIChuZXh0KTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHcz Ml9kcmF3X2dseXBoX3N0cmluZ19iYWNrZ3JvdW5kIChuZXh0LCB0cnVlKTsKKyAgICAgICAgICAg IG5leHQtPm51bV9jbGlwcyA9IDA7CisgICAgICAgICAgfQorICAgIH0KKyAgLyogU2V0IHVwIFMt PmdjLCBzZXQgY2xpcHBpbmcgYW5kIGRyYXcgUy4gKi8KKyAgbWNfdzMyX3NldF9nbHlwaF9zdHJp bmdfZ2MgKHMsIGN1cnNvcl9nY19wKTsKKyAgLyogRHJhdyByZWxpZWYgKGlmIGFueSkgaW4gYWR2 YW5jZSBmb3IgY2hhci9jb21wb3NpdGlvbiBzbyB0aGF0IHRoZQorICAgICBnbHlwaCBzdHJpbmcg Y2FuIGJlIGRyYXduIG92ZXIgaXQuICovCisgIGlmICghcy0+Zm9yX292ZXJsYXBzCisgICAgICAm JiBzLT5mYWNlLT5ib3ggIT0gRkFDRV9OT19CT1gKKyAgICAgICYmIChzLT5maXJzdF9nbHlwaC0+ dHlwZSA9PSBDSEFSX0dMWVBICisgICAgICAgICAgfHwgcy0+Zmlyc3RfZ2x5cGgtPnR5cGUgPT0g Q09NUE9TSVRFX0dMWVBIKSkKKyAgICB7CisgICAgICB3MzJfc2V0X2dseXBoX3N0cmluZ19jbGlw cGluZyAocyk7CisgICAgICB3MzJfZHJhd19nbHlwaF9zdHJpbmdfYmFja2dyb3VuZCAocywgdHJ1 ZSk7CisgICAgICB3MzJfZHJhd19nbHlwaF9zdHJpbmdfYm94IChzKTsKKyAgICAgIHczMl9zZXRf Z2x5cGhfc3RyaW5nX2NsaXBwaW5nIChzKTsKKyAgICAgIHJlbGllZl9kcmF3bl9wID0gMTsKKyAg ICB9CisgIGVsc2UgaWYgKCFzLT5jbGlwX2hlYWQgLyogZHJhd19nbHlwaHMgZGlkbid0IHNwZWNp ZnkgYSBjbGlwIG1hc2suICovCisgICAgICAgICAgICYmICFzLT5jbGlwX3RhaWwKKyAgICAgICAg ICAgJiYgKChzLT5wcmV2ICYmIHMtPnByZXYtPmhsICE9IHMtPmhsICYmIHMtPmxlZnRfb3Zlcmhh bmcpCisgICAgICAgICAgICAgICB8fCAocy0+bmV4dCAmJiBzLT5uZXh0LT5obCAhPSBzLT5obCAm JiBzLT5yaWdodF9vdmVyaGFuZykpKQorICAgIC8qIFdlIG11c3QgY2xpcCBqdXN0IHRoaXMgZ2x5 cGguICBsZWZ0X292ZXJoYW5nIHBhcnQgaGFzIGFscmVhZHkKKyAgICAgICBkcmF3biB3aGVuIHMt PnByZXYgd2FzIGRyYXduLCBhbmQgcmlnaHRfb3ZlcmhhbmcgcGFydCB3aWxsIGJlCisgICAgICAg ZHJhd24gbGF0ZXIgd2hlbiBzLT5uZXh0IGlzIGRyYXduLiAqLworICAgIHczMl9zZXRfZ2x5cGhf c3RyaW5nX2NsaXBwaW5nX2V4YWN0bHkgKHMsIHMpOworICBlbHNlCisgICAgdzMyX3NldF9nbHlw aF9zdHJpbmdfY2xpcHBpbmcgKHMpOworICBzd2l0Y2ggKHMtPmZpcnN0X2dseXBoLT50eXBlKQor ICAgIHsKKyAgICBjYXNlIElNQUdFX0dMWVBIOgorICAgICAgdzMyX2RyYXdfaW1hZ2VfZ2x5cGhf c3RyaW5nIChzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU1RSRVRDSF9HTFlQSDoKKyAgICAg IG1jX3czMl9kcmF3X3N0cmV0Y2hfZ2x5cGhfc3RyaW5nIChzKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgQ0hBUl9HTFlQSDoKKyAgICAgIGlmIChzLT5mb3Jfb3ZlcmxhcHMpCisgICAgICAgIHMt PmJhY2tncm91bmRfZmlsbGVkX3AgPSB0cnVlOworICAgICAgZWxzZQorICAgICAgICB3MzJfZHJh d19nbHlwaF9zdHJpbmdfYmFja2dyb3VuZCAocywgZmFsc2UpOworICAgICAgdzMyX2RyYXdfZ2x5 cGhfc3RyaW5nX2ZvcmVncm91bmQgKHMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDT01QT1NJ VEVfR0xZUEg6CisgICAgICBpZiAocy0+Zm9yX292ZXJsYXBzIHx8IChzLT5jbXBfZnJvbSA+IDAK KyAgICAgICAgICAmJiAhIHMtPmZpcnN0X2dseXBoLT51LmNtcC5hdXRvbWF0aWMpKQorICAgICAg ICBzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wID0gdHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgdzMy X2RyYXdfZ2x5cGhfc3RyaW5nX2JhY2tncm91bmQgKHMsIHRydWUpOworICAgICAgdzMyX2RyYXdf Y29tcG9zaXRlX2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChzKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgR0xZUEhMRVNTX0dMWVBIOgorICAgICAgaWYgKHMtPmZvcl9vdmVybGFwcykKKyAgICAg ICAgcy0+YmFja2dyb3VuZF9maWxsZWRfcCA9IHRydWU7CisgICAgICBlbHNlCisgICAgICAgIHcz Ml9kcmF3X2dseXBoX3N0cmluZ19iYWNrZ3JvdW5kIChzLCBmYWxzZSk7CisgICAgICB3MzJfZHJh d19nbHlwaGxlc3NfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHMpOworICAgICAgYnJlYWs7Cisg ICAgZGVmYXVsdDoKKyAgICAgIGVtYWNzX2Fib3J0ICgpOworICAgIH0KKyAgaWYgKCFzLT5mb3Jf b3ZlcmxhcHMpCisgICAgeworICAgICAgLyogRHJhdyB1bmRlcmxpbmUuICovCisgICAgICBpZiAo cy0+ZmFjZS0+dW5kZXJsaW5lX3ApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAocy0+ZmFjZS0+ dW5kZXJsaW5lX3R5cGUgPT0gRkFDRV9VTkRFUl9XQVZFKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICBDT0xPUlJFRiBjb2xvcjsKKyAgICAgICAgICAgICAgaWYgKHMtPmZhY2UtPnVuZGVy bGluZV9kZWZhdWx0ZWRfcCkKKyAgICAgICAgICAgICAgICBjb2xvciA9IHMtPmdjLT5mb3JlZ3Jv dW5kOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGNvbG9yID0gcy0+ ZmFjZS0+dW5kZXJsaW5lX2NvbG9yOworICAgICAgICAgICAgICB3MzJfZHJhd191bmRlcndhdmUg KHMsIGNvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChzLT5mYWNlLT51 bmRlcmxpbmVfdHlwZSA9PSBGQUNFX1VOREVSX0xJTkUpCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgdGhpY2tuZXNzLCBwb3NpdGlvbjsKKyAgICAgICAgICAgICAg aW50IHk7CisgICAgICAgICAgICAgIGlmIChzLT5wcmV2ICYmIHMtPnByZXYtPmZhY2UtPnVuZGVy bGluZV9wCisgICAgICAgICAgICAgICAgICAmJiBzLT5wcmV2LT5mYWNlLT51bmRlcmxpbmVfdHlw ZSA9PSBGQUNFX1VOREVSX0xJTkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgLyogV2UgdXNlIHRoZSBzYW1lIHVuZGVybGluZSBzdHlsZSBhcyB0aGUgcHJldmlvdXMgb25l LiAqLworICAgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gcy0+cHJldi0+dW5kZXJsaW5lX3Ro aWNrbmVzczsKKyAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcy0+cHJldi0+dW5kZXJsaW5l X3Bvc2l0aW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgdW5kZXJsaW5lIHRoaWNr bmVzcy4gIERlZmF1bHQgaXMgMSBwaXhlbC4gKi8KKyAgICAgICAgICAgICAgICAgIGlmIChzLT5m b250ICYmIHMtPmZvbnQtPnVuZGVybGluZV90aGlja25lc3MgPiAwKQorICAgICAgICAgICAgICAg ICAgICB0aGlja25lc3MgPSBzLT5mb250LT51bmRlcmxpbmVfdGhpY2tuZXNzOworICAgICAgICAg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gMTsKKyAg ICAgICAgICAgICAgICAgIGlmICh4X3VuZGVybGluZV9hdF9kZXNjZW50X2xpbmUpCisgICAgICAg ICAgICAgICAgICAgIHBvc2l0aW9uID0gKHMtPmhlaWdodCAtIHRoaWNrbmVzcykgLSAocy0+eWJh c2UgLSBzLT55KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgdW5kZXJsaW5lIHBvc2l0 aW9uLiAgVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IHZlcnRpY2FsIG9mZnNldCBpbiBwaXhlbHMgZnJvbSB0aGUgYmFzZWxpbmUgdG8gdGhlIHRvcCBv ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHVuZGVybGluZS4gIFRoaXMgaXMgYSBz aWduZWQgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg c3BlY3MsIGFuZCBpdHMgZGVmYXVsdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9V TkQgKChtYXhpbXVtX2Rlc2NlbnQpIC8gMiksIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJPVU5EICh4KSA9IGZsb29yICh4ICsgMC41KSAgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh4X3VzZV91bmRlcmxpbmVfcG9zaXRpb25fcHJvcGVydGllcworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIHMtPmZvbnQgJiYgcy0+Zm9udC0+dW5kZXJsaW5lX3Bvc2l0aW9u ID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcy0+Zm9udC0+dW5k ZXJsaW5lX3Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocy0+Zm9u dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAocy0+Zm9udC0+ZGVzY2Vu dCArIDEpIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBw b3NpdGlvbiA9IG1heCAocG9zaXRpb24sIHVuZGVybGluZV9taW5pbXVtX29mZnNldCk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAvKiBDaGVjayB0aGUgc2FuaXR5IG9mIHRoaWNr bmVzcyBhbmQgcG9zaXRpb24uICBXZSBzaG91bGQKKyAgICAgICAgICAgICAgICAgYXZvaWQgZHJh d2luZyB1bmRlcmxpbmUgb3V0IG9mIHRoZSBjdXJyZW50IGxpbmUgYXJlYS4gKi8KKyAgICAgICAg ICAgICAgaWYgKHMtPnkgKyBzLT5oZWlnaHQgPD0gcy0+eWJhc2UgKyBwb3NpdGlvbikKKyAgICAg ICAgICAgICAgICBwb3NpdGlvbiA9IChzLT5oZWlnaHQgLSAxKSAtIChzLT55YmFzZSAtIHMtPnkp OworICAgICAgICAgICAgICBpZiAocy0+eSArIHMtPmhlaWdodCA8IHMtPnliYXNlICsgcG9zaXRp b24gKyB0aGlja25lc3MpCisgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gKHMtPnkgKyBzLT5o ZWlnaHQpIC0gKHMtPnliYXNlICsgcG9zaXRpb24pOworICAgICAgICAgICAgICBzLT51bmRlcmxp bmVfdGhpY2tuZXNzID0gdGhpY2tuZXNzOworICAgICAgICAgICAgICBzLT51bmRlcmxpbmVfcG9z aXRpb24gPXBvc2l0aW9uOworICAgICAgICAgICAgICB5ID0gcy0+eWJhc2UgKyBwb3NpdGlvbjsK KyAgICAgICAgICAgICAgaWYgKHMtPmZhY2UtPnVuZGVybGluZV9kZWZhdWx0ZWRfcCkKKyAgICAg ICAgICAgICAgICB3MzJfZmlsbF9hcmVhIChzLT5mLCBzLT5oZGMsIHMtPmdjLT5mb3JlZ3JvdW5k LCBzLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksIHMtPndpZHRoLCAxKTsK KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB3MzJfZmlsbF9hcmVhIChz LT5mLCBzLT5oZGMsIHMtPmZhY2UtPnVuZGVybGluZV9jb2xvciwgcy0+eCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHksIHMtPndpZHRoLCAxKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgLyogRHJhdyBvdmVybGluZS4gKi8KKyAgICAgIGlmIChzLT5mYWNlLT5v dmVybGluZV9wKQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyBkeSA9IDAsIGgg PSAxOworICAgICAgICAgIGlmIChzLT5mYWNlLT5vdmVybGluZV9jb2xvcl9kZWZhdWx0ZWRfcCkK KyAgICAgICAgICAgIHczMl9maWxsX2FyZWEgKHMtPmYsIHMtPmhkYywgcy0+Z2MtPmZvcmVncm91 bmQsIHMtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT55ICsgZHksIHMtPndpZHRo LCBoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgdzMyX2ZpbGxfYXJlYSAocy0+ Ziwgcy0+aGRjLCBzLT5mYWNlLT5vdmVybGluZV9jb2xvciwgcy0+eCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcy0+eSArIGR5LCBzLT53aWR0aCwgaCk7CisgICAgICAgIH0KKyAgICAg IC8qIERyYXcgc3RyaWtlLXRocm91Z2guICovCisgICAgICBpZiAocy0+ZmFjZS0+c3RyaWtlX3Ro cm91Z2hfcAorICAgICAgICAgICYmICFGT05UX1RFWFRNRVRSSUMgKHMtPmZvbnQpLnRtU3RydWNr T3V0KQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyBoID0gMTsKKyAgICAgICAg ICB1bnNpZ25lZCBsb25nIGR5ID0gKHMtPmhlaWdodCAtIGgpIC8gMjsKKyAgICAgICAgICBpZiAo cy0+ZmFjZS0+c3RyaWtlX3Rocm91Z2hfY29sb3JfZGVmYXVsdGVkX3ApCisgICAgICAgICAgICB3 MzJfZmlsbF9hcmVhIChzLT5mLCBzLT5oZGMsIHMtPmdjLT5mb3JlZ3JvdW5kLCBzLT54LCBzLT55 ICsgZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT53aWR0aCwgaCk7CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgIHczMl9maWxsX2FyZWEgKHMtPmYsIHMtPmhkYywgcy0+ ZmFjZS0+c3RyaWtlX3Rocm91Z2hfY29sb3IsIHMtPngsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHMtPnkgKyBkeSwgcy0+d2lkdGgsIGgpOworICAgICAgICB9CisgICAgICAvKiBEcmF3 IHJlbGllZiBpZiBub3QgeWV0IGRyYXduLiAqLworICAgICAgaWYgKCFyZWxpZWZfZHJhd25fcCAm JiBzLT5mYWNlLT5ib3ggIT0gRkFDRV9OT19CT1gpCisgICAgICAgIHczMl9kcmF3X2dseXBoX3N0 cmluZ19ib3ggKHMpOworICAgICAgaWYgKHMtPnByZXYpCisgICAgICAgIHsKKyAgICAgICAgICBz dHJ1Y3QgZ2x5cGhfc3RyaW5nICpwcmV2OworICAgICAgICAgIGZvciAocHJldiA9IHMtPnByZXY7 IHByZXY7IHByZXYgPSBwcmV2LT5wcmV2KQorICAgICAgICAgICAgaWYgKHByZXYtPmhsICE9IHMt PmhsCisgICAgICAgICAgICAgICAgJiYgcHJldi0+eCArIHByZXYtPndpZHRoICsgcHJldi0+cmln aHRfb3ZlcmhhbmcgPiBzLT54KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyog QXMgcHJldiB3YXMgZHJhd24gd2hpbGUgY2xpcHBlZCB0byBpdHMgb3duIGFyZWEsIHdlCisgICAg ICAgICAgICAgICAgICAgbXVzdCBkcmF3IHRoZSByaWdodF9vdmVyaGFuZyBwYXJ0IHVzaW5nIHMt PmhsIG5vdy4gKi8KKyAgICAgICAgICAgICAgICBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2Ugc2F2ZSA9 IHByZXYtPmhsOworICAgICAgICAgICAgICAgIHByZXYtPmhsID0gcy0+aGw7CisgICAgICAgICAg ICAgICAgbWNfdzMyX3NldF9nbHlwaF9zdHJpbmdfZ2MgKHByZXYsIGN1cnNvcl9nY19wKTsKKyAg ICAgICAgICAgICAgICB3MzJfc2V0X2dseXBoX3N0cmluZ19jbGlwcGluZ19leGFjdGx5IChzLCBw cmV2KTsKKyAgICAgICAgICAgICAgICBpZiAocHJldi0+Zmlyc3RfZ2x5cGgtPnR5cGUgPT0gQ0hB Ul9HTFlQSCkKKyAgICAgICAgICAgICAgICAgIHczMl9kcmF3X2dseXBoX3N0cmluZ19mb3JlZ3Jv dW5kIChwcmV2KTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg dzMyX2RyYXdfY29tcG9zaXRlX2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChwcmV2KTsKKyAgICAg ICAgICAgICAgICB3MzJfc2V0X2NsaXBfcmVjdGFuZ2xlIChwcmV2LT5oZGMsIE5VTEwpOworICAg ICAgICAgICAgICAgIHByZXYtPmhsID0gc2F2ZTsKKyAgICAgICAgICAgICAgICBwcmV2LT5udW1f Y2xpcHMgPSAwOworICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGlmIChzLT5uZXh0 KQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IGdseXBoX3N0cmluZyAqbmV4dDsKKyAgICAg ICAgICBmb3IgKG5leHQgPSBzLT5uZXh0OyBuZXh0OyBuZXh0ID0gbmV4dC0+bmV4dCkKKyAgICAg ICAgICAgIGlmIChuZXh0LT5obCAhPSBzLT5obAorICAgICAgICAgICAgICAgICYmIG5leHQtPngg LSBuZXh0LT5sZWZ0X292ZXJoYW5nIDwgcy0+eCArIHMtPndpZHRoKQorICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgLyogQXMgbmV4dCB3aWxsIGJlIGRyYXduIHdoaWxlIGNsaXBwZWQg dG8gaXRzIG93biBhcmVhLAorICAgICAgICAgICAgICAgICAgIHdlIG11c3QgZHJhdyB0aGUgbGVm dF9vdmVyaGFuZyBwYXJ0IHVzaW5nIHMtPmhsIG5vdy4gKi8KKyAgICAgICAgICAgICAgICBlbnVt IGRyYXdfZ2x5cGhzX2ZhY2Ugc2F2ZSA9IG5leHQtPmhsOworICAgICAgICAgICAgICAgIG5leHQt PmhsID0gcy0+aGw7CisgICAgICAgICAgICAgICAgbWNfdzMyX3NldF9nbHlwaF9zdHJpbmdfZ2Mg KG5leHQsIGN1cnNvcl9nY19wKTsKKyAgICAgICAgICAgICAgICB3MzJfc2V0X2dseXBoX3N0cmlu Z19jbGlwcGluZ19leGFjdGx5IChzLCBuZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAobmV4dC0+ Zmlyc3RfZ2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSCkKKyAgICAgICAgICAgICAgICAgIHczMl9k cmF3X2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChuZXh0KTsKKyAgICAgICAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICAgICAgdzMyX2RyYXdfY29tcG9zaXRlX2dseXBoX3N0cmluZ19m b3JlZ3JvdW5kIChuZXh0KTsKKyAgICAgICAgICAgICAgICB3MzJfc2V0X2NsaXBfcmVjdGFuZ2xl IChuZXh0LT5oZGMsIE5VTEwpOworICAgICAgICAgICAgICAgIG5leHQtPmhsID0gc2F2ZTsKKyAg ICAgICAgICAgICAgICBuZXh0LT5udW1fY2xpcHMgPSAwOworICAgICAgICAgICAgICAgIG5leHQt PmNsaXBfaGVhZCA9IHMtPm5leHQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KyAgLyogUmVzZXQgY2xpcHBpbmcuICovCisgIHczMl9zZXRfY2xpcF9yZWN0YW5nbGUgKHMtPmhk YywgTlVMTCk7CisgIHMtPm51bV9jbGlwcyA9IDA7Cit9CisKKy8qIGVuZCBNVUxUSVBMRS1DVVJT T1JTICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAvKiBGcmluZ2UgYml0bWFwcy4g ICovCiAKIHN0YXRpYyBpbnQgbWF4X2ZyaW5nZV9ibXAgPSAwOwpAQCAtNTQyLDYgKzE3MDQsMTUg QEAgdzMyX3VwZGF0ZV9iZWdpbiAoc3RydWN0IGZyYW1lICpmKQogICBpZiAoISBGUkFNRV9XMzJf UCAoZikpCiAgICAgcmV0dXJuOwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVM VElQTEUtQ1VSU09SUyAqLworCisgIGYtPm1jX3VwZGF0aW5nX2ZyYW1lID0gZjsKKworLyogKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqICovCisKKwogICAvKiBSZWdlbmVyYXRlIGRpc3BsYXkgcGFsZXR0ZSBi ZWZvcmUgZHJhd2luZyBpZiBsaXN0IG9mIHJlcXVlc3RlZAogICAgICBjb2xvcnMgaGFzIGNoYW5n ZWQuICovCiAgIGlmIChkaXNwbGF5X2luZm8tPnJlZ2VuX3BhbGV0dGUpCkBAIC02NzQsNiArMTg0 NSwxNiBAQCB3MzJfdXBkYXRlX2VuZCAoc3RydWN0IGZyYW1lICpmKQogCiAgIC8qIE1vdXNlIGhp Z2hsaWdodCBtYXkgYmUgZGlzcGxheWVkIGFnYWluLiAgKi8KICAgTU9VU0VfSExfSU5GTyAoZikt Pm1vdXNlX2ZhY2VfZGVmZXIgPSBmYWxzZTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K Ky8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBmLT5tY191cGRhdGluZ19mcmFtZSA9IE5VTEw7 CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIH0KIAogCkBAIC00MDAyLDEzICs1MTgz LDc0IEBAIHczMl9zZXRfdmVydGljYWxfc2Nyb2xsX2JhciAoc3RydWN0IHdpbmRvdyAqdywKIAkg ICAgICByZWxlYXNlX2ZyYW1lX2RjIChmLCBoZGMpOwogCSAgICAgIHczMl9jbGVhcl91bmRlcl9p bnRlcm5hbF9ib3JkZXIgKGYpOwogCSAgICB9CisKKworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisvKiBiZWdpbiBNVUxUSVBMRS1DVVJTT1JTICovCisKKy8qIFJFUEFJTlRJTkcgV0hFTiBSRU1P VklORyBTQ1JPTEwgQkFSOgorCistIFNlcXVlbmNlIG9mIEV2ZW50czoKKworICAuIGByZWRpc3Bs YXlfaW50ZXJuYWwnIGNhbGxzIHRoZSBgY29uZGVtbl9zY3JvbGxfYmFyc19ob29rJywgd2hpY2gg bWFya3MgYWxsCisgICAgc2Nyb2xsIGJhcnMgYXMgY2FuZGlkYXRlcyBmb3IgZGVsZXRpb24uCisK KyAgLiBUaGVuIGByZWRpc3BsYXlfaW50ZXJuYWwnIGNhbGxzIGByZWRpc3BsYXlfd2luZG93cycs IHdoaWNoIHdhbGtzIHRoZQorICAgIHdpbmRvdy10cmVlIGFuZCBleGFtaW5lcyBlYWNoIHdpbmRv dywgd2hlcmVieSBlYWNoIHdpbmRvdyB0aGF0IGlzIHN0aWxsIGFsaXZlCisgICAgaW4gdGhlIHdp bmRvdy10cmVlICJyZWRlZW1zIiBpdHMgc2Nyb2xsIGJhcnMgYnkgbWFya2luZyB0aGVtIG5vdCB0 byBiZQorICAgIGRlbGV0ZWQuCisKKyAgLiBUaGVuIGByZWRpc3BsYXlfaW50ZXJuYWwnIGNhbGxz IGBqdWRnZV9zY3JvbGxfYmFyc19ob29rJywgd2hpY2ggcmVtb3ZlcyBhbGwKKyAgICB0aGUgc2Ny b2xsIGJhcnMgdGhhdCB3ZXJlIG5vdCAicmVkZWVtZWQiLgorCisgIC4gQW5kIG9ubHkgYWZ0ZXIg dGhhdCBgcmVkaXNwbGF5X2ludGVybmFsJyBjYWxscyBgdXBkYXRlX2ZyYW1lJywgd2hpY2ggY2Fs bHMKKyAgICBgdXBkYXRlX3dpbmRvdycgZm9yIGVhY2ggbGl2ZSB3aW5kb3csIGFuZCB0aGF0IGVu ZHMgdXAgY2FsbGluZyBgZHJhd19nbHlwaHMnCisgICAgdG8gZGVsaXZlciB0aGUgdXBkYXRlZCBj b250ZW50cyB0byB0aGUgZ2xhc3MuCisKKy0gT2JzZXJ2YXRpb25zIGJ5IEBsYXdsaXN0OgorCisg IC4gQWx0aG91Z2ggdGhlIGNhbGwgdG8gcmVtb3ZlL2FkZCBzY3JvbGwgYmFycyBoYXBwZW5zIGVh cmxpZXIgaW4gdGltZSwgaXQgaXMKKyAgICBub3QgYWN0dWFsbHkgcHJvY2Vzc2VkIGJ5IEVtYWNz IHVudGlsIHRoZSB0YWlsIGVuZCBvZiBgcmVhZF9jaGFyJywgYXQKKyAgICBhcHByb3hpbWF0ZWx5 IHdoZW4gdGhlIGNhbGwgdG8gYHJlYWRfZGVjb2RlZF9ldmVudF9mcm9tX21haW5fcXVldWUnIG9j Y3Vycy4KKworICAuIEFsdGhvdWdoIGEgc2Nyb2xsIGJhciBtYXkgbm8gbG9uZ2VyIGJlIHZpc2li bGUgYmVjYXVzZSBpdCB3YXMgb3ZlcndyaXR0ZW4KKyAgICBkdXJpbmcgYHVwZGF0ZV93aW5kb3cn LCBFbWFjcyB0cmllcyB0byByZW1vdmUgdGhlIG91dGRhdGVkIHNjcm9sbCBiYXIKKyAgICBhbnl3 YXkgYW5kIHRoYXQgaXMgd2hhdCBlcmFzZXMgdGhlIGZha2UgY3Vyc29ycyBhbG9uZyB0aGUgcmVj dGFuZ2xlIG9mIHRoZQorICAgIHZlcnRpY2FsIHNjcm9sbCBiYXIuCisKKyAgLiBBdCBhYm91dCB0 aGUgZXhhY3Qgc2FtZSB0aW1lIHRoYXQgdGhlIHNjcm9sbCBiYXIgaW4gdGhlIGNlbnRlciBvZiB0 aGUgc2NyZWVuCisgICAgZ2V0cyBlcmFzZWQsIHRoZSByaWdodCBzY3JvbGwgYmFyIG9uIHRoZSBm YXIgcmlnaHQgb2YgdGhlIHdpbmRvdyBpcyBhZGRlZC4KKworLSBUaGUgZXh0ZXJuYWwgZnVuY3Rp b24gYE1vdmVXaW5kb3cnIChieSBNaWNyb3NvZnQpIHVwZGF0ZXMgYm90aCB0aGUgb2xkIGFuZCBu ZXcKKyAgcmVjdGFuZ2xlcy93aW5kb3dzIGlmIHRoZSBib29sZWFuIGFyZ3VtZW50IGZvciBgYlJl cGFpbnRgIGlzIFRSVUUuCisKKy0gVGhlIGV4dGVybmFsIGZ1bmN0aW9uIGBEZXN0cm95V2luZG93 JyAoYnkgTWljcm9zb2Z0KSB1cGRhdGVzL3JlcGFpbnRzIHRoZQorICByZWN0YW5nbGUvd2luZG93 IHRoYXQgaXMgcmVtb3ZlZC4gIFtJbiBleHBlcmltZW50aW5nIHdpdGggYExvY2tXaW5kb3dVcGRh dGUnCisgIChieSBNaWNyb3NvZnQpLCBAbGF3bGlzdCB3YXMgdW5hYmxlIHRvIHByZXZlbnQgdGhl IHVwZGF0ZS9yZXBhaW50Ll0KKworLSBUaGUgZXh0ZXJuYWwgZnVuY3Rpb24gYFNldFdpbmRvd1Bv cycgKGJ5IE1pY3Jvc29mdCkgdXBkYXRlcy9yZXBhaW50cyB0aGUKKyAgcmVjdGFuZ2xlL3dpbmRv dyB0aGF0IGlzIHJlbW92ZWQuICBAbGF3bGlzdCBoYXMgbm90IHlldCBleHBlcmltZW50ZWQgd2l0 aAorICBhbHRlcmluZyB0aGUgbGFzdCBhcmd1bWVudCB1RmxhZ3MgdG8gc2VlIGlmIGl0IGlzIHBv c3NpYmxlIHRvIHByZXZlbnQgdXBkYXRlIC8KKyAgcmVwYWludC4KKworV2hlbiBhIHVzZXIgZW5s YXJnZXMgdGhlIHdpZHRoIG9mIGEgbWFpbiB3aW5kb3csIGB1cGRhdGVfd2luZG93JyByZWRyYXdz IHRoZQorc2NyZWVuIGxpbmVzIGFuZCB0aGUgb2xkIHNjcm9sbCBiYXIgd2luZG93IGlzIGVyYXNl ZCBpbiB0aGUgcHJvY2VzcyBieSBhCitjb21iaW5hdGlvbiBvZiBgZHJhd19nbHlwaHMnIGFuZCBg eF9jbGVhcl9lbmRfb2ZfbGluZScuICBJbiB0aGF0IHNpdHVhdGlvbiwgdGhlCitvbGQgYGJhci0+ bGVmdGAgd2lsbCBiZSBsZXNzLXRoYW4gdGhlIG5ldyBgbGVmdGAgc2Nyb2xsIGJhciBjb29yZGlu YXRlLiAgSW4gb3JkZXIKK3RvIHByZXNlcnZlIHRoZSBmYWtlIGN1cnNvcnMgdGhhdCB3ZXJlIGxh aWQgZHVyaW5nIGB1cGRhdGVfd2luZG93JyB3aGVuCisobGVmdCA+IGJhci0+bGVmdCksIHdlIHdh bnQgdG8gc3VwcHJlc3MgcmVwYWludGluZyB0aGUgb2xkIHNjcm9sbC4gIFdoZW4gYSB1c2VyCitz aHJpbmtzIHRoZSB3aWR0aCBvZiBhIHdpbmRvdywgd2Ugd2FudCB0byByZXBhaW50IHNvIHRoYXQg dGhlIG5ldyBzY3JvbGwgYmFyCit3aW5kb3cgaXMgdXBkYXRlZC4gKi8KKwogICAgICAgICAgIC8q IE1ha2Ugc3VyZSBzY3JvbGwgYmFyIGlzICJ2aXNpYmxlIiBiZWZvcmUgbW92aW5nLCB0byBlbnN1 cmUgdGhlCiAgICAgICAgICAgICAgYXJlYSBvZiB0aGUgcGFyZW50IHdpbmRvdyBub3cgZXhwb3Nl ZCB3aWxsIGJlIHJlZnJlc2hlZC4gICovCi0gICAgICAgICAgbXlfc2hvd193aW5kb3cgKGYsIGh3 bmQsIFNXX0hJREUpOwotLyoqICAgICAgICAgICBNb3ZlV2luZG93IChod25kLCBsZWZ0LCB0b3As IHdpZHRoLCBtYXggKGhlaWdodCwgMSksIFRSVUUpOyAqKi8KLQkgIC8qIFRyeSB0byBub3QgZHJh dyBvdmVyIGNoaWxkIGZyYW1lcy4gICovCi0JICBTZXRXaW5kb3dQb3MgKGh3bmQsIEhXTkRfQk9U VE9NLCBsZWZ0LCB0b3AsIHdpZHRoLCBtYXggKGhlaWdodCwgMSksCi0gICAgICAgICAgICAgICAg ICAgICAgICBTV1BfRlJBTUVDSEFOR0VEKTsKKyAgICAgICAgICBpZiAobGVmdCA8PSBiYXItPmxl ZnQpCisgICAgICAgICAgICBteV9zaG93X3dpbmRvdyAoZiwgaHduZCwgU1dfSElERSk7CisgICAg ICAgICAgTW92ZVdpbmRvdyAoaHduZCwgbGVmdCwgdG9wLCB3aWR0aCwgbWF4IChoZWlnaHQsIDEp LCBsZWZ0IDw9IGJhci0+bGVmdCk7CisKKy8qIGVuZCBNVUxUSVBMRS1DVVJTT1JTICovCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKwogCiAJICBzaS5jYlNpemUgPSBzaXplb2YgKHNpKTsKIAkg IHNpLmZNYXNrID0gU0lGX1JBTkdFOwpAQCAtNDI3Nyw2ICs1NTE5LDIxIEBAIHczMl9qdWRnZV9z Y3JvbGxfYmFycyAoc3RydWN0IGZyYW1lICpmKQogICAgIHsKICAgICAgIHN0cnVjdCBzY3JvbGxf YmFyICpiID0gWFNDUk9MTF9CQVIgKGJhcik7CiAKKworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgICAgIC8qIGBEZXN0cm95V2luZG93JyB3aXRo aW4gYHhfc2Nyb2xsX2Jhcl9yZW1vdmUnIHJlcGFpbnRzIHRoZSByZWN0YW5nbGUuCisgICAgICBU aGVyZWZvcmUsIHdlIGZpcnN0IHNlbmQgYSBtZXNzYWdlIHRvIGluaGliaXQgcmVwYWludGluZy4g Ki8KKyAgICAgIGlmICghV0lORE9XX0xJVkVfUCAoYi0+d2luZG93KSkKKyAgICAgICAgeworICAg ICAgICAgIEhXTkQgaHduZCA9IFNDUk9MTF9CQVJfVzMyX1dJTkRPVyAoYik7CisgICAgICAgICAg U2VuZE1lc3NhZ2UgKGh3bmQsIFdNX1NFVFJFRFJBVywgZmFsc2UsIDApOworICAgICAgICB9CisK Ky8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICAgIHczMl9zY3JvbGxfYmFyX3JlbW92 ZSAoYik7CiAKICAgICAgIG5leHQgPSBiLT5uZXh0OwpAQCAtNzA4OCw2ICs4MzQ1LDIwIEBAIGV4 dGVybiBmcmFtZV9wYXJtX2hhbmRsZXIgdzMyX2ZyYW1lX3Bhcm1faGFuZGxlcnNbXTsKIAogc3Rh dGljIHN0cnVjdCByZWRpc3BsYXlfaW50ZXJmYWNlIHczMl9yZWRpc3BsYXlfaW50ZXJmYWNlID0K IHsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8K KworLyogYHJlZGlzcGxheV9pbnRlcmZhY2UnIGluIGB3MzJ0ZXJtLmNgIG11c3QgYmUgaW4gdGhl IGV4YWN0IHNhbWUgb3JkZXIgYXMgdGhlCitgcmVkaXNwbGF5X2ludGVyZmFjZScgaW4gYGRpc3Bl eHRlcm4uaGAhICovCisKKyAgbWNfdzMyX2RyYXdfd2luZG93X2N1cnNvciwKKyAgbWNfdzMyX2Ry YXdfZ2x5cGhfc3RyaW5nLAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIHczMl9m cmFtZV9wYXJtX2hhbmRsZXJzLAogICBndWlfcHJvZHVjZV9nbHlwaHMsCiAgIGd1aV93cml0ZV9n bHlwaHMsCmRpZmYgLS1naXQgYS9zcmMvd2luZG93LmggYi9zcmMvd2luZG93LmgKaW5kZXggNmIw ZjBlNS4uMTRkZDM4YSAxMDA2NDQKLS0tIGEvc3JjL3dpbmRvdy5oCisrKyBiL3NyYy93aW5kb3cu aApAQCAtMzI0LDYgKzMyNCwxNDcgQEAgc3RydWN0IHdpbmRvdwogCiAjaWZkZWYgSEFWRV9XSU5E T1dfU1lTVEVNCiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBiZWdpbiBNVUxUSVBM RS1DVVJTT1JTICovCisKKy8qIFN1ZmZpeGVzIGZvciB0aGUgYG1jYCB3aW5kb3cgcG9pbnRlciBw cmVmaXguICovCitzdHJ1Y3QgbXVsdGlwbGVfY3Vyc29ycworeworICAvKiBUaGUgcmVjb3JkZWQg cGl4ZWwgd2lkdGggb2YgdGhlIGxhc3QgbGluZSBudW1iZXIgZHJhd24gZHVyaW5nIHJlZGlzcGxh eSAqLworICBpbnQgbG51bV9waXhlbF93aWR0aDsKK30gbWM7CisKK3N0cnVjdCBtY19tYXRyaXgK K3sKKyAgcHRyZGlmZl90IHZwb3NfYWxsb2NhdGVkOworICBwdHJkaWZmX3QgdnBvc191c2VkOwor ICBwdHJkaWZmX3QgY3Vyc29yc191c2VkWzRdOworICBlbnVtIG1jX2NhY2hlX3R5cGUKKyAgewor ICAgIE1DX0NBQ0hFLAorICAgIENIX0NBQ0hFLAorICAgIEZDX0NBQ0hFLAorICAgIE5PX0NBQ0hF CisgIH0gY2FjaGVfdHlwZTsKKyAgc3RydWN0IG1jX3Zwb3MKKyAgeworICAgIHB0cmRpZmZfdCBj YWNoZV9hbGxvY2F0ZWRbNF07CisgICAgcHRyZGlmZl90IGNhY2hlX3VzZWRbNF07CisgICAgc3Ry dWN0IG1jX2NvbnRlbnRzCisgICAgeworICAgICAgYm9vbF9iZiBzYW1lX3AgOiAxOworICAgICAg c3RydWN0IGdseXBoIGdseXBoOworICAgICAgaW50IHg7CisgICAgICBpbnQgZng7CisgICAgICBp bnQgeTsKKyAgICAgIGludCBmeTsKKyAgICAgIGludCBocG9zOworICAgICAgaW50IHZwb3M7Cisg ICAgICBpbnQgd2Q7CisgICAgICBpbnQgaDsKKyAgICAgIGVudW0gbWNfY3Vyc29yX3R5cGUKKyAg ICAgIHsKKyAgICAgICAgLyogTk9URTogIFRoZSBmcmluZ2UgYml0bWFwIGZyYW1ld29yayByZWxp ZXMgdXBvbiBNQ19OT19GUklOR0VfQklUTUFQCisgICAgICAgIGhhdmluZyBhIHZhbHVlIG9mIHpl cm8gKDApLiAqLworICAgICAgICBNQ19OT19GUklOR0VfQklUTUFQLAorICAgICAgICBNQ19OT19D VVJTT1IsCisgICAgICAgIE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVAsCisgICAgICAgIE1DX0xFRlRf RlJJTkdFX0JJVE1BUCwKKyAgICAgICAgTUNfRlJBTUVEX0JPWCwKKyAgICAgICAgTUNfRklMTEVE X0JPWCwKKyAgICAgICAgTUNfSE9MTE9XX0JPWCwKKyAgICAgICAgTUNfQkFSLAorICAgICAgICBN Q19IQkFSCisgICAgICB9IGN1cnNvcl90eXBlOworICAgICAgaW50IGN1cnNvcl93aWR0aDsKKyAg ICAgIHN0cnVjdCBtY19SR0IKKyAgICAgIHsKKyAgICAgICAgZG91YmxlIHJlZDsKKyAgICAgICAg ZG91YmxlIGdyZWVuOworICAgICAgICBkb3VibGUgYmx1ZTsKKyAgICAgIH0gZmcsIGJnOworICAg ICAgYm9vbF9iZiBhY3RpdmVfcCA6IDE7CisgICAgICBlbnVtIG1jX2ZsYXZvcgorICAgICAgewor ICAgICAgICBOT19GTEFWT1IsCisgICAgICAgIE1DX0dMWVBILAorICAgICAgICBNQ19HTFlQSExF U1MsCisgICAgICAgIE1DX09WRVJMQVlfQVJST1dfQklUTUFQLAorICAgICAgICBNQ19QSUxDUk9X LAorICAgICAgICBNQ19IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XLAorICAgICAgICBNQ19S RVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XLAorICAgICAgICBNQ19IT0xMT1df UkVDVEFOR0xFLAorICAgICAgICBNQ19WRVJUSUNBTF9CQVJfUklHSFRfQVJST1csCisgICAgICAg IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVywKKyAgICAgICAgTUNfVkVSVElD QUxfQkFSLAorICAgICAgICBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIsCisgICAgICAgIE1DX1ZF UlRJQ0FMX0JBUl9CQUNLU0xBU0gKKyAgICAgIH0gZ2x5cGhfZmxhdm9yOworICAgICAgZW51bSBt Y19yb3dfcG9zaXRpb24KKyAgICAgIHsKKyAgICAgICAgUFJFX1pWLAorICAgICAgICBBVF9aViwK KyAgICAgICAgUE9TVF9aVgorICAgICAgfSByb3dfcG9zaXRpb247CisgICAgICBib29sX2JmIGVu YWJsZWRfcCA6IDE7CisgICAgfSAqY2FjaGVbNF07CisgIH0gKnZwb3M7CisgIC8qIFVzZWQgZWxz ZXdoZXJlLiAqLworICBzdHJ1Y3QgbWNfZXNzZW50aWFscworICB7CisgICAgYm9vbF9iZiBhY3Rp dmVfcCA6IDE7CisgICAgc3RydWN0IG1jX1JHQiBjaF9mZ1szXSwgZmNfZmdbM10sIHNwX2ZnOwor ICAgIGludCBmY194OworICAgIGludCB6djsKKyAgICBpbnQgenZfYnl0ZTsKKyAgfSBlc3NlbnRp YWxzOworICAvKiBVc2VkIGVsc2V3aGVyZS4gKi8KKyAgZW51bSBtY19lbmdpbmVfdHlwZQorICB7 CisgICAgTVVMVElQTEVfQ1VSU09SUywKKyAgICBIT1JJWk9OVEFMX1JVTEVSLAorICAgIFZFUlRJ Q0FMX1JVTEVSLAorICAgIEZJTExfQ09MVU1OLAorICAgIENVUlNPUl9JTkRJQ0FUT1IKKyAgfSBh Y3Rpb25fdHlwZTsKKyAgLyogVXNlZCBlbHNld2hlcmUuICovCisgIGVudW0gbWNfcHJlX3Njcm9s bF9jbGVhbl90eXBlCisgIHsKKyAgICBUUllfV0lORE9XX1JFVVNJTkdfQ1VSUkVOVF9NQVRSSVhf RE9XTiwKKyAgICBUUllfV0lORE9XX1JFVVNJTkdfQ1VSUkVOVF9NQVRSSVhfVVAsCisgICAgVFJZ X1dJTkRPV19JRAorICB9IG1jX3ByZV9zY3JvbGxfY2xlYW5fdHlwZV9fZnJvbV93aGVyZTsKKyAg LyogVXNlZCBlbHNld2hlcmUuICovCisgIGVudW0gbWNfZHJhd19yb3dfdHlwZQorICB7CisgICAg Tk9XSEVSRSwKKyAgICBTQ1JJQkVfT05FLAorICAgIFNDUklCRV9UV08sCisgICAgU0NSSUJFX1RI UkVFLAorICAgIFNLSVBQRUQsCisgICAgUE9TVF9DSEFOR0VELAorICAgIFVOQ0hBTkdFRCwKKyAg ICBTRVRfQ1VSU09SX09ORSwKKyAgICBTRVRfQ1VSU09SX1RXTworICB9IG1jX2RyYXdfcm93X3R5 cGVfX2Zyb21fd2hlcmU7CisgIC8qIFVzZWQgZWxzZXdoZXJlLiAqLworICBlbnVtIG1jX3JlZHJh d19yb3dfdHlwZQorICB7CisgICAgVVBEQVRFX1dJTkRPV19fUkVEUkFXX09WRVJMQVBQRURfUk9X UywKKyAgICBHVUlfSU5TRVJUX0dMWVBIUywKKyAgICBHVUlfRklYX09WRVJMQVBQSU5HX0FSRUEs CisgICAgRFJBV19ST1dfV0lUSF9NT1VTRV9GQUNFLAorICAgIEVYUE9TRV9BUkVBX09ORSwKKyAg ICBFWFBPU0VfQVJFQV9UV08sCisgICAgRVhQT1NFX0xJTkUKKyAgfSBtY19yZWRyYXdfcm93X3R5 cGVfX2Zyb21fd2hlcmU7Cit9IG1jX21hdHJpeDsKKworLyogZW5kIE1VTFRJUExFLUNVUlNPUlMg Ki8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICAvKiBDdXJzb3IgdHlwZSBvZiBs YXN0IGN1cnNvciBkcmF3biBvbiB0aGUgd2luZG93LiAgKi8KICAgICBlbnVtIHRleHRfY3Vyc29y X2tpbmRzIHBoeXNfY3Vyc29yX3R5cGU7CiAKZGlmZiAtLWdpdCBhL3NyYy94ZGlzcC5jIGIvc3Jj L3hkaXNwLmMKaW5kZXggNTBmNjQ0My4uMzEzNzg4YSAxMDA2NDQKLS0tIGEvc3JjL3hkaXNwLmMK KysrIGIvc3JjL3hkaXNwLmMKQEAgLTk2Miw2ICs5NjIsNDg3NCBAQCBzdGF0aWMgdm9pZCBzaG93 X21vdXNlX2ZhY2UgKE1vdXNlX0hMSW5mbyAqLCBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2UpOwogc3Rh dGljIGJvb2wgY29vcmRzX2luX21vdXNlX2ZhY2VfcCAoc3RydWN0IHdpbmRvdyAqLCBpbnQsIGlu dCk7CiAKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBiZWdpbiBNVUxUSVBMRS1DVVJT T1JTICovCisKKy8qIE1VTFRJUExFLUNVUlNPUlM6ICBFbWFjcyBCdWcgIzIyODczIChmZWF0dXJl IHJlcXVlc3QpCisKKyAgQ1JPU1NIQUlSUzogIEVtYWNzIEJ1ZyAjMTc2ODQgKGZlYXR1cmUgcmVx dWVzdCkKKworCitWRVJTSU9OOiAgMDIyLjAwNyBbMDMvMDMvMjAyMF0KKworCitDSEFOR0VMT0c6 CisKKy0gbnN0ZXJtLm06ICBCdWcgZml4IGluIGBtY19uc19kcmF3X3dpbmRvd19jdXJzb3InIHJl bGF0aW5nIHRvIGEgc2l0dWF0aW9uIHdoZXJlCisgIHRoZSBgY3Vyc29yX2dseXBoYCBpcyBOVUxM IGFuZCB0aGUgZmFjZV9pZCBpcyBpbnZhbGlkLiAgSW4gc3VjaCBhIHNpdHVhdGlvbiwKKyAgd2Ug bm93IHVzZSB0aGUgREVGQVVMVF9GQUNFX0lELgorCistIFB1cnN1YW50IHRvIHRoZSB3cml0dGVu IHJlcXVlc3Qgb2YgRHJldyBBZGFtcyBvbiAwMS0yNy0yMDIwIHRvIGNoYW5nZSB0aGUgbmFtZQor ICBvZiB0aGUgImNyb3NzaGFpcnMuZWwiIExpc3AgZmlsZSB0byBzb21ldGhpbmcgZWxzZSwgc2Fp ZCBmaWxlIGhhcyBiZWVuIGNoYW5nZWQKKyAgdG8gdGhlIGZpbGUgbmFtZSBvZiAiKy1tb2RlLmVs Ii4KKworLSBNaXNjZWxsYW5lb3VzIHRpZHlpbmctdXAgb2YgY29kZS4KKworCitWSURFT1M6CisK K3czMjogIGh0dHBzOi8veW91dHUuYmUvcjNCZEpWbHNBblEKKworbnM6ICBodHRwczovL3lvdXR1 LmJlL2JjMWg4anRiWG13CisKK3gxMTogIGh0dHBzOi8veW91dHUuYmUvYUNJRmhEMlh6NXMKKwor CitTQ1JFRU5TSE9UUzoKKworaHR0cHM6Ly93d3cubGF3bGlzdC5jb20vaW1hZ2VzLzIyODczXzE3 Njg0X2xpZ2h0X2RhcmtfYmFja2dyb3VuZHMucG5nCisKKworU0VUVVA6CisKK1N0ZXAgMTogIGdp dCBjbG9uZSAtYiBtYXN0ZXIgZ2l0Oi8vZ2l0LnN2LmdudS5vcmcvZW1hY3MuZ2l0CisKK1N0ZXAg MjogIEluIHRoZSBuZXcgZW1hY3MgZm9sZGVyLCBnbyBiYWNrIHRvIGFuIEVtYWNzIHZlcnNpb24g ZnJvbSAwNy8xNC8yMDE5OgorCitnaXQgcmVzZXQgLS1oYXJkIGFjNTdjNTA5MzgyOWVlMDkwODRj NTYyYmJiYzFjNDEyMTc5YmUxM2QKKworU3RlcCAzOiAgRnJvbSB3aXRoaW4gdGhlIG5ldyBlbWFj cyBmb2xkZXIgY3JlYXRlZCBpbiBTdGVwIDEsIGFwcGx5IHRoZSBwYXRjaDoKKworZ2l0IGFwcGx5 IC9wYXRoL3RvL3RoZS9wYXRjaC5kaWZmCisKK1N0ZXAgNDogIC4vYXV0b2dlbi5zaAorCitTdGVw IDU6ICAuL2NvbmZpZ3VyZSAuLi4gW3lvdXIgY3VzdG9tIG9wdGlvbnNdCisKK1N0ZXAgNjogIG1h a2UKKworU3RlcCA3OiAgbWFrZSBpbnN0YWxsCisKKworVVNBR0U6CisKKy0gRm9yIGEgbWluaW1h bCB3b3JraW5nIGV4YW1wbGUgb2YgYnVpbHQtaW4gZmFrZSBjdXJzb3JzLCB0eXBlOiAgTS14IG1j LXRlc3QKKworICA7OzsgVFVSTiBPTiBGQUtFIENVUlNPUlMgKGJ1ZmZlciBwb3NpdGlvbiwgY3Vy c29yLXR5cGUsIGN1cnNvciBjb2xvcik6CisKKyAgKHNldHEgbWMtY29uZiAnKCgxICJoYmFyIiAi bWFnZW50YSIpCisgICAgICAgICAgICAgICAgICAoMiAiYmFyIiAicHVycGxlIikKKyAgICAgICAg ICAgICAgICAgICgzICJib3giICIjMDBGRjAwIikKKyAgICAgICAgICAgICAgICAgICg0ICJob2xs b3ciICIjMDAwMEZGIikKKyAgICAgICAgICAgICAgICAgICg1ICgiaGJhciIgMykgWzEuMCAwLjAg MS4wXSkKKyAgICAgICAgICAgICAgICAgICg2ICgiYmFyIiAzKSBbMC4wIDEuMCAxLjBdKQorICAg ICAgICAgICAgICAgICAgKDcgImZyYW1lZCIgIk9yYW5nZVJlZCIpKSkKKworICA7OzsgVFVSTiBP RkYgRkFLRSBDVVJTT1JTOgorCisgIChzZXRxIG1jLWNvbmYgbmlsKQorCistIFRvIHRyeSBvdXQg Ym90aCB0aGUgY3Jvc3NoYWlycyBmZWF0dXJlIGFuZCB0aGUgdmlzaWJsZSBmaWxsIGNvbHVtbiBp bmRpY2F0b3IKKyAgZmVhdHVyZSwgdHlwZTogIE0teCArLW1vZGUKKworLSBUbyB0cnkgb3V0IGp1 c3QgdGhlIHZpc2libGUgZmlsbCBjb2x1bW4gaW5kaWNhdG9yIGZlYXR1cmUsIHR5cGU6ICBNLXgg ZmMtbW9kZQorCistIFRvIHRyeSBvdXQgYnVpbHQtaW4gZmFrZSBjdXJzb3JzIHdpdGggTWFnbmFy IFN2ZWVuJ3MgbXVsdGlwbGUtY3Vyc29ycyBwYWNrYWdlLAorICB0aGF0IHBhY2thZ2UgbXVzdCBi ZSBpbnN0YWxsZWQuICBJZiB0aGUgbXVsdGlwbGUtY3Vyc29ycyBwYWNrYWdlIGlzIGFscmVhZHkK KyAgaW5zdGFsbGVkLCB0aGVuIGp1c3QgKHJlcXVpcmUgJystbW9kZSkgYW5kIGArLW1vZGUuZWxg IHdpbGwgcmVkZWZpbmUgYQorICBmZXcgb2YgdGhlIG11bHRpcGxlLWN1cnNvcnMgZnVuY3Rpb25z IGFuZCBzZXQgdXAgYSBmZXcga2V5Ym9hcmQgc2hvcnRjdXRzLgorICBJZiB0aGUgbXVsdGlwbGUt Y3Vyc29ycyBwYWNrYWdlIGJ5IE1hZ25hciBTdmVlbiBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQs IHRoZW4KKyAgaGVyZSBhcmUgdHdvIGVhc3kgd2F5cyB0byBpbnN0YWxsIHRoYXQgcGFja2FnZToK KworICBUeXBlOiAgTS14IG1jLWluc3RhbGwKKworICBPUiwgZXZhbHVhdGUgdGhlIGZvbGxvd2lu ZyBzbmlwcGV0OgorCisgIChwcm9nbgorICAgIChyZXF1aXJlICdwYWNrYWdlKQorICAgIChhZGQt dG8tbGlzdCAncGFja2FnZS1hcmNoaXZlcyAnKCJtZWxwYSIgLiAiaHR0cDovL21lbHBhLm1pbGti b3gubmV0L3BhY2thZ2VzLyIpIHQpCisgICAgKHBhY2thZ2UtaW5pdGlhbGl6ZSkKKyAgICAocGFj a2FnZS1yZWZyZXNoLWNvbnRlbnRzKQorICAgIChwYWNrYWdlLWluc3RhbGwgJ211bHRpcGxlLWN1 cnNvcnMpCisgICAgKG1jL2J1aWx0LWluLWN1cnNvcnMpKQorCisKK05PVEVTOgorCistIE91ciBq b3VybmV5IGJlZ2lucyBhdCB0aGUgb3V0c2V0IG9mIGB1cGRhdGVfd2luZG93JyB3aGVuCisgIGBt Y191cGRhdGVfd2luZG93X2RyeXJ1bicgcGVyZm9ybXMgYSBgIWRyYXdfcGAgc2ltdWxhdGlvbiB0 byBjcmVhdGUgYSBuZXcKKyAgY2FjaGUgb2YgZmFrZSBjdXJzb3JzIHRoYXQgYXJlIHN0b3JlZCBp biB0aGUgYHctPm1jX21hdHJpeGAuICBUaGUgY2FjaGUgb2YKKyAgZmFrZSBjdXJzb3JzIGZyb20g dGhlIHByZXZpb3VzIHJlZGlzcGxheSBpcyBjb3BpZWQgdG8gYSB0ZW1wb3JhcnkgYG1jX21hdHJp eGAKKyAgdW5kZXIgdGhlIG5hbWUgb2YgYG9sZF9tYXRyaXhgLiAgYG1jX3VwZGF0ZV90ZXh0X2Fy ZWEnICh1c2VkIGZvciBgIWRyYXdfcGAgLworICBgZHJhd19wYCBzaXR1YXRpb25zKSBjYWxscyBg bWNfZHJhd19nbHlwaHMnICh3cml0ZXMgZ2x5cGhzIHRvIHRoZSBnbGFzcykKKyAgZm9sbG93ZWQg YnkgYG1jX2RyYXdfcm93JyAod3JpdGVzIGZha2UgY3Vyc29ycyB0byB0aGUgZ2xhc3MgaW1tZWRp YXRlbHkKKyAgdGhlcmVhZnRlcikuICBBdCB0aGUgdGFpbCBlbmQgb2YgYG1jX3VwZGF0ZV93aW5k b3dfZHJ5cnVuJywKKyAgYG1jX3VwZGF0ZV93aW5kb3dfZXJhc2UnIGNvbXBhcmVzIHRoZSBuZXcg YHctPm1jX21hdHJpeGAgd2l0aCB0aGUgYG9sZF9tYXRyaXhgCisgIHRvIGRldGVybWluZSB3aGlj aCBmYWtlIGN1cnNvcnMgYXJlIHRoZSBzYW1lIC0tIHNldHRpbmcgdGhlIGBzYW1lX3BgIGJvb2xl YW4KKyAgc3RydWN0IG1lbWJlciBhY2NvcmRpbmdseSBmb3IgZWFjaCBhcHBsaWNhYmxlIGZha2Ug Y3Vyc29yIHdpdGhpbiB0aGUKKyAgYHctPm1jX21hdHJpeGAuICBBbGwgZmFrZSBjdXJzb3JzIGlu IHRoZSBgb2xkX21hdHJpeGAgdGhhdCBhcmUgYCFzYW1lX3BgIGdldAorICBlcmFzZWQgYXQgdGhp cyBqdW5jdHVyZS4gIFtGbiAxLl0gIEFmdGVyIHRoZSBkcnlydW4gaXMgY29tcGxldGUsCisgIGB1 cGRhdGVfd2luZG93JyBkb2VzIHRoZSByZWFsIHRoaW5nIC0tIGBkcmF3X3BgLiAgQXMgdG8gdGhl IGBmcm9tX3doZXJlYAorICBzaXR1YXRpb25zIG9mIFNLSVBQRUQsIFBPU1RfQ0hBTkdFRCwgVU5D SEFOR0VELCBhbmQgU0VUX0NVUlNPUl9UV08sCisgIGBtY19oZWxwZXInIGNvbXBhcmVzIHRoZSBp bmNvbWluZyB0ZW50YXRpdmUgZmFrZSBjdXJzb3Igd2l0aCB0aGUKKyAgYHctPm1jX21hdHJpeGAg dG8gc2VlIGlmIGl0IGhhcyBwcmV2aW91c2x5IGJlZW4gbWFya2VkIGFzIGBzYW1lX3BgIC0tIGlm IGl0IGlzCisgIGAhc2FtZV9wYCwgdGhlbiB0aGUgZmFrZSBjdXJzb3IgaXMgZHJhd24gYW5kIHdl IGByZXR1cm5gLiAgRmFrZSBjdXJzb3JzIHRoYXQKKyAgaGF2ZSBhIGBjdXJzb3JfdHlwZWAgb2Yg TUNfTEVGVF9GUklOR0VfQklUTUFQIG9yIE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVAgYXJlCisgIGFs d2F5cyByZXNldCBldmVuIGlmIHRoZXkgYXJlIGBzYW1lX3BgLiAgQXMgdG8gdGhlIGBmcm9tX3do ZXJlYCBzaXR1YXRpb25zIG9mCisgIFNDUklCRV9PTkUsIFNDUklCRV9UV08sIFNDUklCRV9USFJF RSwgYW5kIE5PV0hFUkUsIGBtY19oZWxwZXInIGFsd2F5cyBjYXVzZXMKKyAgZmFrZSBjdXJzb3Jz IHRvIGJlIGRyYXduIChiZWNhdXNlIG5ldyBnbHlwaHMgd2VyZSB3cml0dGVuIHRvIHRoZSBnbGFz cywgb3IgdGhlCisgIGFyZWEgdG8gdGhlIHJpZ2h0IG9mIHRoZSBkaXNwbGF5IGxpbmUgd2FzIGNs ZWFyZWQpIGFuZCB3ZSBgcmV0dXJuYC4KKworLiBGbi4gMTogIEV2ZW4gdGhvdWdoIHdyaXRpbmcg bmV3IGdseXBocyB0byB0aGUgZ2xhc3MgKFNDUklCRV9PTkUsIFNDUklCRV9UV08sCisgIGFuZCBT Q1JJQkVfVEhSRUUpIHdvdWxkIGVyYXNlIGZha2UgY3Vyc29ycyB3aXRoaW4gdGhvc2UgYm91bmRh cmllcywgaXQgaXMKKyAgc3RpbGwgbmVjZXNzYXJ5IHRvIGVyYXNlIGAhc2FtZV9wYCBmYWtlIGN1 cnNvcnMgcHJpb3IgdGhlcmV0by4gIFRoaXMgaXMKKyAgYmVjYXVzZSBgc2Nyb2xsaW5nX3dpbmRv dycgb2NjdXJzIGJlZm9yZSBuZXcgZ2x5cGhzIGFyZSB3cml0dGVuIGFuZAorICBgcmlmLT5zY3Jv bGxfcnVuX2hvb2snIG1heSBjb3B5IG9uZSBvciBtb3JlIHJvd3MgdG8gb3RoZXIgYXJlYXMgb2Yg dGhlIGdsYXNzLgorICBJdCBpcyBub3Qgd29ydGggdGhlIGVmZm9ydCB0byBwcm9ncmFtbWF0aWNh bGx5IHRyYWNrIGJvdGggdGhlIF9jb3BpZWRfIGZha2UKKyAgY3Vyc29ycyBhbmQgdGhlIF9vcmln aW5hbF8gZmFrZSBjdXJzb3JzIGZyb20gdGhlIHByZXZpb3VzIHJlZGlzcGxheSBjeWNsZSwKKyAg d2hvc2UgZ2x5cGhzIG1heSByZW1haW4gd2hlcmUgdGhleSBhcmUgaW4gdGhlIGN1cnJlbnQgcmVk aXNwbGF5IGN5Y2xlIGJlY2F1c2UKKyAgdGhleSBzYXRpc2Z5IHRoZSBgR0xZUEhfRVFVQUxfUCcg dGVzdC4KKworLSBUaGUgcmVzdCBvZiBvdXIgam91cm5leSB0YWtlcyBwbGFjZSB3aGVyZXZlciBg ZHJhd19nbHlwaHMnIHdvdWxkIG9yZGluYXJpbHkgYmUKKyAgY2FsbGVkLCBleGNsdWRpbmcgYHVw ZGF0ZV90ZXh0X2FyZWEnLiAgSWYgZmVhdHVyZXMgMTc2ODQvMjI4NzMgYXJlIGFjdGl2ZSwKKyAg YG1jX3JlZHJhd19yb3cnIGNhbGxzIGBtY19kcmF3X2dseXBocycgKHdyaXRlcyBnbHlwaHMgdG8g dGhlIGdsYXNzKSBhbmQgZmFrZQorICBjdXJzb3JzIGFyZSB3cml0dGVuIHRvIHRoZSBnbGFzcyBp bW1lZGlhdGVseSB0aGVyZWFmdGVyIChpZiB0aGUgY29vcmRpbmF0ZXMKKyAgY29pbmNpZGUgd2l0 aCBwcmVyZWNvcmRlZCBkYXRhIGluIHRoZSBgdy0+bWNfbWF0cml4YCkuICBUaGUgZnVuY3Rpb25z CisgIGNvbnRhaW5pbmcgdGhlIGFmb3JlbWVudGlvbmVkIGNhbGxzIGFyZToKKyAgLiBgZ3VpX2lu c2VydF9nbHlwaHMnCisgIC4gYGd1aV9maXhfb3ZlcmxhcHBpbmdfYXJlYScKKyAgLiBgZHJhd19y b3dfd2l0aF9tb3VzZV9mYWNlJworICAuIGBleHBvc2VfYXJlYScKKyAgLiBgZXhwb3NlX2xpbmUn CisgIC4gYHJlZHJhd19vdmVybGFwcGVkX3Jvd3MnIFt3aGljaCBoYXMgYmVlbiBpbmNvcnBvcmF0 ZWQgaW50byBgdXBkYXRlX3dpbmRvdyddCisKKy0gQXMgdG8gYG1jX3Njcm9sbGluZ193aW5kb3cn LCBpdCB3b3VsZCBhcHBlYXIgdGhhdCB0aGVyZSBpcyBubyB0YW5naWJsZQorICBiZW5lZml0IHRv IHJvdGF0aW5nIHRoZSBjdXJyZW50L3Byb3NwZWN0aXZlIGNhY2hlIG9mIGZha2UgY3Vyc29ycyB0 byBjb21wYXJlCisgIHRoZSBkYXRhIGJlZm9yZSByZW1vdmluZyB0aGUgZmFrZSBjdXJzb3JzLiAg V2hlbiBzY3JvbGxpbmcgdGhlIGRpc3BsYXksIG9ubHkKKyAgX3NvbWVfIGxpbmVzIGFyZSBjb3Bp ZWQgdG8gbmV3IGxvY2F0aW9ucy4gIEFyZWFzIHRoYXQgYXJlIG5vdCBvdmVyd3JpdHRlbiBtYXkK KyAgaGF2ZSBmYWtlIGN1cnNvcnMgYW5kIHRob3NlIG1heSBub3QgbmVjZXNzYXJpbHkgYmUgcmVt b3ZlZCBpZiBkZXNpcmVkL2N1cnJlbnQKKyAgbWF0cml4IGdseXBocyBhcmUgZXF1YWwuICBUaGUg dGVzdCBmb3IgYEdMWVBIX0VRVUFMX1AnIGRvZXMgbm90IHRha2UgaW50bworICBjb25zaWRlcmF0 aW9uIHRoZSBleGlzdGVuY2Ugb2YgYSBmYWtlIGN1cnNvciwgYW5kIHRoZSBnbHlwaCAod2l0aCBh IGZha2UKKyAgY3Vyc29yKSBtYXkgbm90IGJlIHVwZGF0ZWQgYXMgYSByZXN1bHQgdGhlcmVvZi4g IEFzIHRvIGxpbmVzIHRoYXQgYXJlIG5vdAorICBjb3BpZWQsIHBvcnRpb25zIG1heSBiZSB1cGRh dGVkIGFuZCBmYWtlIGN1cnNvcnMgd291bGQgYmUgcmVtb3ZlZCB0aGVyZWJ5LgorICBgbWNfcm90 YXRlX21hdHJpeCcgYW5kIGBtY19yZXZlcnNlX3Zwb3MnIHdlcmUgcmVtb3ZlZCB3aXRoIHBhdGNo IHYuIDAyMi4wMDIuCisKKy0gTlM6ICBBcyBvZiAwOS8yOC8yMDE4ICg3OTQ2NDQ1OTYyMzcyYzQy NTUxODBhZjQ1Y2I3Yzg1N2YxYjBiNWZhKSwgdGhlIE5TIHBvcnQKKyAgbm8gbG9uZ2VyIGRvZXMg YW55dGhpbmcgdXNlZnVsIGR1cmluZyBgdXBkYXRlX3dpbmRvdycgZXhjZXB0IG1hcmsgZGlydHkK KyAgcmVjdGFuZ2xlcy4gIEFsbCBkcmF3aW5nIGlzIG5vdyBkb25lIHdoZW4gdGhlIE1hY09TIGNh bGxzIGBkcmF3UmVjdCcsIHdoaWNoIGluCisgIHR1cm4gY2FsbHMgYGV4cG9zZV9mcmFtZScuICBU aGlzIHdhcyBkb25lIHRvIGFkZCBzdXBwb3J0IGZvciBNYWNPUyBNb2phdmUgLi4uLgorCisKK1RP RE86CisKKy0gV2hlbiBhbiBpZGxlLXRpbWVyIGZpcmVzIGFuZCBwb2ludCBpcyBhdCB0aGUgZW5k IG9mIGEgaG9yaXpvbnRhbGx5IHNjcm9sbGVkCisgIGxpbmUgaW4gYSBuYXJyb3cgd2luZG93LCB0 aGUgdGVtcG9yYXJ5IGhvcml6b250YWwgc2Nyb2xsIGlzIGNhbmNlbGVkLiAgQ3JlYXRlCisgIGEg bWluaW1hbCB3b3JraW5nIGV4YW1wbGUgYW5kIGZpbGUgYSBidWcgcmVwb3J0LgorCisgIChwcm9n bgorICAgIChkZWZ1biB0ZXN0ICgpCisgICAgKGludGVyYWN0aXZlKQorICAgICAgKGxldCAoKG92 IChtYWtlLW92ZXJsYXkgKHBvaW50KSAoMSsgKHBvaW50KSkgbmlsIHQgdCkpKQorICAgICAgICAo b3ZlcmxheS1wdXQgb3YgJ2ZhY2UgJyg6Zm9yZWdyb3VuZCAicmVkIikpKSkKKyAgICAoZ2xvYmFs LXNldC1rZXkgW2Y1XSAndGVzdCkKKyAgICAoc3BsaXQtd2luZG93LWhvcml6b250YWxseSkKKyAg ICAoc3dpdGNoLXRvLWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgImZvbyIpKQorICAgIChzZXRx IGJpZGktZGlzcGxheS1yZW9yZGVyaW5nIG5pbCkKKyAgICAoc2V0cS1sb2NhbCBhdXRvLWhzY3Jv bGwtbW9kZSAnY3VycmVudC1saW5lKQorICAgIChkb3RpbWVzIChpIDgwKQorICAgICAgKGluc2Vy dCAoY2hhci10by1zdHJpbmcgKCsgNjUgaSkpKSkpCisKKy0gYG5zX2RyYXdfd2luZG93X2N1cnNv cicgY2FsbHMgYG5zX2NsaXBfdG9fcmVjdCcsIHdoaWNoIGRvZXMgX25vdF8gdGFrZQorICBgcm93 LT5jbGlwYCBpbnRvIGNvbnNpZGVyYXRpb24gd2hlbiBkcmF3aW5nIGN1cnNvcnMgd2l0aCBgTlNS ZWN0RmlsbCcuICBXaGVuCisgIGl0IGNvbWVzIHRpbWUgdG8gZHJhdyBnbHlwaHMgb24gdG9wIG9m IHRoZSBib3gvaG9sbG93IGZhbWlseSBvZiBjdXJzb3JzLAorICBgcm93LT5jbGlwYCBpcyB0YWtl biBpbnRvIGNvbnNpZGVyYXRpb24gYnkgYGdldF9nbHlwaF9zdHJpbmdfY2xpcCcuICBGYWtlCisg IGN1cnNvcnMgY2FuIGJlIGRyYXduIGV2ZW4gdGhvdWdoIHRoZSBnbHlwaHMgY2Fubm90LCByZXN1 bHRpbmcgaW4gaG9sbG93L2JveAorICBmYW1pbHkgb2YgY3Vyc29ycyB3aXRob3V0IHRleHQuICBU aGUgaXNzdWUgY2FuIGJlIHJlcHJvZHVjZWQgd2l0aCBNLXggbWMtdGVzdC4KKyAgW0EgdGVtcG9y YXJ5IHdvcmthcm91bmQgaXMgdG8gZGlzYWJsZSBgcm93LT5jbGlwYCB3aGlsZSBkcmF3aW5nIHRo ZSBnbHlwaHMuXQorICBodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2VtYWNzLWRl dmVsLzIwMTktMDQvbXNnMDAwMDkuaHRtbAorCistIERlYWwgd2l0aCBsZWZ0L3JpZ2h0IG92ZXJ3 cml0dGVuIGdseXBocyBpbiB0aGUgdzMyIGFuZCBYIHBvcnRzIG9mIEVtYWNzLgorCistIFRoZSBj dXJyZW50IHRlc3QgZm9yIGBhdXRvX2hzY3JvbGxfbW9kZV9wJyBvbmx5IGxvb2tzIGZvciBgY3Vy cmVudF9saW5lYCBhbmQKKyAgYWxsIGZpdmUgcmVsYXRlZCB0ZXN0cyBhcmUgYmFzZWQgdXBvbiB0 aGF0IGFzc3VtcHRpb24sIHdoaWNoIG1heSBub3QgYmUgdHJ1ZS4KKworLSBNdWx0aXBsZSBDdXJz b3JzOiAgSWYgcG9pbnQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbXBvc2l0ZSBjaGFyYWN0ZXIs IHRoZW4KKyAgc2VsZWN0IGEgZnVsbHkgY29tcG9zZWQgY2hhcmFjdGVyIHNvIHRoYXQgdGhlIGZh a2UgY3Vyc29yIGlzIHZpc2libGUuCisKKy0gSW1wbGVtZW50IGZ1bmN0aW9uYWxpdHkgc2ltaWxh ciB0byB0aGUgTGlzcCBtdWx0aXBsZS1jdXJzb3JzIGJ5IE1hZ25hciBTdmVlbi4KKworLSBGb2xs b3cgdXAgd2l0aCB0aGUgRW1hY3MgdGVhbSByZSBidWcjMzIxNzc7IGkuZS4sIChDdXJyZW50IGxp bmUgbnVtYmVyIHNoaWZ0cworICBvbmUgY29sdW1uIHRvIHRoZSBsZWZ0LikKKworLSBGb2xsb3cg dXAgd2l0aCB0aGUgRW1hY3MgdGVhbSByZSBidWcjMzIwNjA7IGkuZS4sIEhvcml6b250YWwgU2Ny b2xsaW5nCisgIChDdXJyZW50IExpbmUpOiAgV3JvbmcgbGluZSBnZXRzIGgtc2Nyb2xsZWQuCisK Ky0gRGV0ZXJtaW5lIGlmIGJ1ZyAjMjg5MzYgbmVlZHMgdG8gYmUgZml4ZWQgYW5kIGhlbHAgdGhl IEVtYWNzIHRlYW0gcmUgc2FtZS4KKworLSBJcyB0aGVyZSBhbnkgYWRkaXRpb25hbCBtZWFuaW5n ZnVsIG9wdGltaXphdGlvbiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUKKyAgdGhyZWUgY2FsbHMg b2YgYG1jX3ByZV9zY3JvbGxfY2xlYW4nPworCistIFRoZXJlIGlzIGEgYnVnIGFmZmVjdGluZyBh biBvbGRlciB2ZXJzaW9uIG9mIEVtYWNzIGZvciB0aGUgTlMgcG9ydCB0aGF0IGNhdXNlcworICBw YXJ0aWFsIGxpbmUgZmxpY2tlcmluZyB3aGVuIHRoZSBzYW1lIGNoYXJhY3RlcnMgYXJlIGdyb3Vw ZWQgdG9nZXRoZXIgKDs7Ozs7OykKKyAgYW5kIE1DX0dMWVBITEVTUyBjdXJzb3JzIGFyZSBhYm92 ZSBvciBiZWxvdyAtLSBoYXZpbmcgdGhlIHNhbWUgYmFja2dyb3VuZCBjb2xvcgorICBhcyB0aGUg ZnJhbWU7IGUuZy4sIGJsYWNrIG9uIGJsYWNrICh1c2VkIHRvIGVyYXNlIGEgZ2x5cGhsZXNzIGN1 cnNvcikuICBUaGUKKyAgcGFydGlhbCBmbGlja2VyaW5nIGlzIG9ubHkgbm90aWNlYWJsZSB3aXRo IHJhcGlkIGZpcmU7IGUuZy4sIGhvbGRpbmcgZG93biB0aGUKKyAgcmlnaHQvbGVmdCBhcnJvdyBr ZXkuICBXaGVuIGNoYW5naW5nIHRoZSBjb2xvciBvZiB0aGUgZ2x5cGhsZXNzIGN1cnNvciwgdGhl CisgIGlzc3VlIGlzIG5vdCBwcmVzZW50LiAgW0BsYXdsaXN0IGhhcyB2ZXJpZmllZCB0aGF0IHRo ZSBYIGFuZCBIUE9TIGNvb3JkaW5hdGVzCisgIGFyZSBhY2N1cmF0ZS5dCisKKworREVCVUdHSU5H OgorCit4ZGlzcC5jOiAgWENoYXIyYiA9PiB1bnNpZ25lZAorCituc3Rlcm0ubTogIFhSZWN0YW5n bGUgPT4gY29uc3QgRW1hY3NfUmVjdGFuZ2xlCisKK3czMnRlcm0uYzogIFhHQ1ZhbHVlcyA9PiBF bWFjc19HQyAod2hpY2ggaGFzIG5vIGBmb250YCBzdHJ1Y3QgbWVtYmVyKS4KKyAgICAgICAgICAg IG1hc2sgPT4gVGhlIG1hc3RlciBicmFuY2ggbm8gbG9uZ2VyIHVzZXMgR0NGb250IGFzIGEgY29t cG9uZW50LgorCituc19mb2N1cyArIG5zX2NsaXBfdG9fcm93ID0+IG5zX2NsaXBfdG9fcmVjdCBb Qk9PTCAuLi4gc3RydWN0IGZyYW1lICosIE5TUmVjdCAqLCBpbnQpCisKK25zX3VuZm9jdXMgPT4g bnNfcmVzZXRfY2xpcHBpbmcKKworbWFrZV9zYXZlX3B0ciA9PiBtYWtlX21pbnRfcHRyCisKK3Jv dy0+Z2x5cGhzW1RFWFRfQVJFQV1baHBvc10ucGl4ZWxfd2lkdGgKKwordy0+Y3VycmVudF9tYXRy aXgtPnJvd3NbMl0tPmdseXBoc1tURVhUX0FSRUFdW2hwb3NdLnBpeGVsX3dpZHRoCisKK3ctPmN1 cnJlbnRfbWF0cml4LT5yb3dzWzJdLmVuYWJsZWRfcAorCit3LT5jdXJyZW50X21hdHJpeC0+cm93 c1syXS51c2VkW1RFWFRfQVJFQV0KKworUkFOR0VEX0lOVEVHRVJQID0+IFJBTkdFRF9GSVhOVU1Q CisKK1RZUEVfUkFOR0VEX0lOVEVHRVJQID0+IFRZUEVfUkFOR0VEX0ZJWE5VTVAKKworbWFrZV9u dW1iZXIgPT4gbWFrZV9maXhudW0KKworWElOVCA9PiBYRklYTlVNCisKK1hGQVNUSU5UID0+IFhG SVhOQVQKKworc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIE9SCitzdHJ1 Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworCitMaXNwX09iamVjdCBz dHJpbmcgPSBGcHJpbjFfdG9fc3RyaW5nIChpX3N0b3JlLCBRbmlsKTsKK2NoYXIgKmNoYXJfc3Ry aW5nID0gU1NEQVRBIChzdHJpbmcpOworZnByaW50ZiAoc3RkZXJyLCAiaV9zdG9yZTogICVzXG4i LCBjaGFyX3N0cmluZyk7CisKK2NoYXIgKndfY29udGVudHMgPSAoQlVGRkVSUCAody0+Y29udGVu dHMpICYmIFNUUklOR1AgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbmFtZSkpKQorICAg ICAgICAgICAgICAgICAgID8gU1NEQVRBIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG5h bWUpKQorICAgICAgICAgICAgICAgICAgIDogIm5pbCI7CitmcHJpbnRmIChzdGRlcnIsICJcbkJ1 ZmZlciAoJXMpXG4iLCB3X2NvbnRlbnRzKTsKKworc3RydWN0IGZhY2UgKmZhY2UgPSAuLi4KK0xp c3BfT2JqZWN0IGZvcmVncm91bmQgPSBmYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVY XTsKK0xpc3BfT2JqZWN0IGJhY2tncm91bmQgPSBmYWNlLT5sZmFjZVtMRkFDRV9CQUNLR1JPVU5E X0lOREVYXTsKK2ZwcmludGYgKHN0ZGVyciwgIlxuZm9yZWdyb3VuZCAoJXMpIHwgYmFja2dyb3Vu ZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAoIU5JTFAgKGZvcmVncm91bmQpID8gU1NEQVRB IChmb3JlZ3JvdW5kKSA6ICJOSUxQIiksCisgICAgICAgICAgICAgICAgICghTklMUCAoYmFja2dy b3VuZCkgPyBTU0RBVEEgKGJhY2tncm91bmQpIDogIk5JTFAiKSk7CisKK2ZwcmludGYgKHN0ZGVy ciwgIk15IGxpc3Agb2JqZWN0OiAgJXNcbiIsIFNTREFUQSAoRmNoYXJfdG9fc3RyaW5nIChtYWtl X2ZpeG51bSAoMTAxKSkpKTsKKworZnByaW50ZiAoc3RkZXJyLCAic3RyaW5nOiAlcyB8IGludDog JWRcbiIsICJmb28iLCA2OSk7CisKK2lmIChCVUZGRVJQICh3LT5jb250ZW50cykgJiYgU1RSSU5H UCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBuYW1lKSkpCisgIGZwcmludGYgKHN0ZGVy ciwgIm5zX3VwZGF0ZV93aW5kb3dfZW5kOiAgJXNcbiIsIFNTREFUQSAoQlZBUiAoWEJVRkZFUiAo dy0+Y29udGVudHMpLCBuYW1lKSkpOworCitlYXNzZXJ0IChCVUZfQkVHIChiKSA8PSBjaGFycG9z ICYmIGNoYXJwb3MgPD0gQlVGX1ogKGIpKTsKK2Jvb2wgYmFyZl9jcmFzaCA9IChCVUZfQkVHIChi KSA8PSBjaGFycG9zICYmIGNoYXJwb3MgPD0gQlVGX1ogKGIpKSA/IGZhbHNlIDogdHJ1ZTsgKi8K KworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxmdG9hc3RyLmg+CisKK2Jvb2wgbWNfc3Rk ZXJyX3AgPSBmYWxzZTsKKworI2lmZGVmIEhBVkVfTlRHVUkKKyNkZWZpbmUgTUNfT1BUSU9OQUxf SERDKGhkYykgIEhEQyBoZGMsCisjZGVmaW5lIE1DX0RFQ0xBUkVfSERDKGhkYykgICBIREMgaGRj OworI2RlZmluZSBNQ19BTExPQ0FURV9IREMoaGRjLCBmKSBoZGMgPSBnZXRfZnJhbWVfZGMgKChm KSkKKyNkZWZpbmUgTUNfUkVMRUFTRV9IREMoaGRjLCBmKSAgcmVsZWFzZV9mcmFtZV9kYyAoKGYp LCAoaGRjKSkKKyNlbmRpZgorCisjaWZuZGVmIE1DX09QVElPTkFMX0hEQworI2RlZmluZSBNQ19P UFRJT05BTF9IREMoaGRjKQorI2RlZmluZSBNQ19ERUNMQVJFX0hEQyhoZGMpCisjZGVmaW5lIE1D X0FMTE9DQVRFX0hEQyhoZGMsIGYpCisjZGVmaW5lIE1DX1JFTEVBU0VfSERDKGhkYywgZikKKyNl bmRpZgorCitzdGF0aWMgaW50IGxlZnRfb3ZlcndyaXR0ZW4gKHN0cnVjdCBnbHlwaF9zdHJpbmcg Kik7CitzdGF0aWMgaW50IHJpZ2h0X292ZXJ3cml0dGVuIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICop Oworc3RhdGljIGludCBsZWZ0X292ZXJ3cml0aW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOwor c3RhdGljIGludCByaWdodF9vdmVyd3JpdGluZyAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsKK3N0 YXRpYyB2b2lkIGFwcGVuZF9nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiosIHN0 cnVjdCBnbHlwaF9zdHJpbmcgKiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworc3RhdGljIHZvaWQgcHJlcGVuZF9nbHlwaF9zdHJpbmdf bGlzdHMgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiosIHN0cnVjdCBnbHlwaF9zdHJpbmcgKiosCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdseXBoX3N0cmlu ZyAqLCBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworc3RhdGljIHZvaWQgYXBwZW5kX2dseXBoX3N0 cmluZ19saXN0cyAoc3RydWN0IGdseXBoX3N0cmluZyAqKiwgc3RydWN0IGdseXBoX3N0cmluZyAq KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9z dHJpbmcgKiwgc3RydWN0IGdseXBoX3N0cmluZyAqKTsKK3N0YXRpYyB2b2lkIGluaXRfZ2x5cGhf c3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIE1DX09QVElPTkFMX0hEQyAoaGRjKSB1bnNp Z25lZCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB3aW5kb3cgKiwg c3RydWN0IGdseXBoX3JvdyAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0g Z2x5cGhfcm93X2FyZWEsIGludCwgZW51bSBkcmF3X2dseXBoc19mYWNlKTsKK3N0YXRpYyB2b2lk IGNvbXB1dGVfb3ZlcmhhbmdzX2FuZF94IChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIGludCwgYm9v bCk7CitzdGF0aWMgc3RydWN0IGdseXBoX3N0cmluZyAqIGdseXBoX3N0cmluZ19jb250YWluaW5n X2JhY2tncm91bmRfd2lkdGggKHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CitzdGF0aWMgdm9pZCBz ZXRfZ2x5cGhfc3RyaW5nX2JhY2tncm91bmRfd2lkdGggKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiwg aW50LCBpbnQpOworc3RhdGljIGludCBmaWxsX2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBoX3N0 cmluZyAqLCBpbnQsIGludCwgaW50LCBpbnQpOworc3RhdGljIGludCBmaWxsX2dzdHJpbmdfZ2x5 cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIGludCwgaW50LCBpbnQsIGludCk7Citz dGF0aWMgaW50IGZpbGxfY29tcG9zaXRlX2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBoX3N0cmlu ZyAqLCBzdHJ1Y3QgZmFjZSAqLCBpbnQpOworc3RhdGljIGludCBmaWxsX3N0cmV0Y2hfZ2x5cGhf c3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIGludCwgaW50KTsKK3N0YXRpYyB2b2lkIGZp bGxfaW1hZ2VfZ2x5cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworc3RhdGljIGlu dCBmaWxsX2dseXBobGVzc19nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiwgaW50 LCBpbnQsIGludCwgaW50KTsKKworI2lmZGVmIEhBVkVfTlRHVUkKKyNkZWZpbmUgTUNfSU5JVF9H TFlQSF9TVFJJTkcocywgY2hhcjJiLCB3LCByb3csIGFyZWEsIHN0YXJ0LCBobCkgXAorICBpbml0 X2dseXBoX3N0cmluZyAocywgaGRjLCBjaGFyMmIsIHcsIHJvdywgYXJlYSwgc3RhcnQsIGhsKQor I2Vsc2UKKyNkZWZpbmUgTUNfSU5JVF9HTFlQSF9TVFJJTkcocywgY2hhcjJiLCB3LCByb3csIGFy ZWEsIHN0YXJ0LCBobCkgXAorICBpbml0X2dseXBoX3N0cmluZyAocywgY2hhcjJiLCB3LCByb3cs IGFyZWEsIHN0YXJ0LCBobCkKKyNlbmRpZgorCisjZGVmaW5lIE1DX0JVSUxEX1NUUkVUQ0hfR0xZ UEhfU1RSSU5HKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNUX1gpICAgXAorICAg ICBkbwkJCQkJCQkJCSAgICBcCisgICAgICAgewkJCQkJCQkJICAgIFwKKwkgcyA9IGFsbG9jYSAo c2l6ZW9mICpzKTsJCQkJCSAgICBcCisJIE1DX0lOSVRfR0xZUEhfU1RSSU5HIChzLCBOVUxMLCB3 LCByb3csIGFyZWEsIFNUQVJULCBITCk7CQkgICAgXAorCSBTVEFSVCA9IGZpbGxfc3RyZXRjaF9n bHlwaF9zdHJpbmcgKHMsIFNUQVJULCBFTkQpOyAgICAgICAgICAgICAgICAgXAorCSBhcHBlbmRf Z2x5cGhfc3RyaW5nICgmSEVBRCwgJlRBSUwsIHMpOwkJCQkgICAgXAorICAgICAgICAgcy0+eCA9 IChYKTsJCQkJCQkJICAgIFwKKyAgICAgICB9CQkJCQkJCQkgICAgXAorICAgICB3aGlsZSAoZmFs c2UpCisKKyNkZWZpbmUgTUNfQlVJTERfSU1BR0VfR0xZUEhfU1RSSU5HKFNUQVJULCBFTkQsIEhF QUQsIFRBSUwsIEhMLCBYLCBMQVNUX1gpIFwKKyAgICAgZG8JCQkJCQkJCQlcCisgICAgICAgewkJ CQkJCQkJXAorCSBzID0gYWxsb2NhIChzaXplb2YgKnMpOwkJCQkJXAorCSBNQ19JTklUX0dMWVBI X1NUUklORyAocywgTlVMTCwgdywgcm93LCBhcmVhLCBTVEFSVCwgSEwpOwkJXAorCSBmaWxsX2lt YWdlX2dseXBoX3N0cmluZyAocyk7CQkJCQlcCisJIGFwcGVuZF9nbHlwaF9zdHJpbmcgKCZIRUFE LCAmVEFJTCwgcyk7CQkJCVwKKwkgKytTVEFSVDsJCQkJCQkJXAorICAgICAgICAgcy0+eCA9IChY KTsJCQkJCQkJXAorICAgICAgIH0JCQkJCQkJCVwKKyAgICAgd2hpbGUgKGZhbHNlKQorCisjaWZu ZGVmIEhBVkVfWFdJREdFVFMKKyMgZGVmaW5lIE1DX0JVSUxEX1hXSURHRVRfR0xZUEhfU1RSSU5H KFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNUX1gpIFwKKyAgICAgZWFzc3VtZSAo ZmFsc2UpCisjZWxzZQorIyBkZWZpbmUgTUNfQlVJTERfWFdJREdFVF9HTFlQSF9TVFJJTkcoU1RB UlQsIEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExBU1RfWCkgXAorICAgICBkbwkJCQkJCQkJCVwK KyAgICAgICB7CQkJCQkJCQlcCisJIHMgPSBhbGxvY2EgKHNpemVvZiAqcyk7CQkJCQlcCisJIE1D X0lOSVRfR0xZUEhfU1RSSU5HIChzLCBOVUxMLCB3LCByb3csIGFyZWEsIFNUQVJULCBITCk7CQlc CisJIGZpbGxfeHdpZGdldF9nbHlwaF9zdHJpbmcgKHMpOwkJCQkJXAorCSBhcHBlbmRfZ2x5cGhf c3RyaW5nICgmKEhFQUQpLCAmKFRBSUwpLCBzKTsJCQlcCisJICsrKFNUQVJUKTsJCQkJCQkJXAor ICAgICAgICAgcy0+eCA9IChYKTsJCQkJCQkJXAorICAgICAgIH0JCQkJCQkJCVwKKyAgICAgd2hp bGUgKGZhbHNlKQorI2VuZGlmCisKKyNkZWZpbmUgTUNfQlVJTERfQ0hBUl9HTFlQSF9TVFJJTkdT KFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNUX1gpCSAgIFwKKyAgICAgZG8JCQkJ CQkJCQkgICBcCisgICAgICAgewkJCQkJCQkJICAgXAorCSBpbnQgZmFjZV9pZDsJCQkJCQkJICAg XAorCSB1bnNpZ25lZCAqY2hhcjJiOwkJCQkJCSAgIFwKKwkJCQkJCQkJCSAgIFwKKwkgZmFjZV9p ZCA9IChyb3cpLT5nbHlwaHNbYXJlYV1bU1RBUlRdLmZhY2VfaWQ7CQkJICAgXAorCQkJCQkJCQkJ ICAgXAorCSBzID0gYWxsb2NhIChzaXplb2YgKnMpOwkJCQkJICAgXAorCSBTQUZFX05BTExPQ0Eg KGNoYXIyYiwgMSwgKEVORCkgLSAoU1RBUlQpKTsJCQkgICBcCisJIE1DX0lOSVRfR0xZUEhfU1RS SU5HIChzLCBjaGFyMmIsIHcsIHJvdywgYXJlYSwgU1RBUlQsIEhMKTsJICAgXAorCSBhcHBlbmRf Z2x5cGhfc3RyaW5nICgmSEVBRCwgJlRBSUwsIHMpOwkJCQkgICBcCisJIHMtPnggPSAoWCk7CQkJ CQkJCSAgIFwKKwkgU1RBUlQgPSBmaWxsX2dseXBoX3N0cmluZyAocywgZmFjZV9pZCwgU1RBUlQs IEVORCwgb3ZlcmxhcHMpOwkgICBcCisgICAgICAgfQkJCQkJCQkJICAgXAorICAgICB3aGlsZSAo ZmFsc2UpCisKKyNkZWZpbmUgTUNfQlVJTERfQ09NUE9TSVRFX0dMWVBIX1NUUklORyhTVEFSVCwg RU5ELCBIRUFELCBUQUlMLCBITCwgWCwgTEFTVF9YKSBcCisgIGRvIHsJCQkJCQkJCQkgICAgXAor ICAgIGludCBmYWNlX2lkID0gKHJvdyktPmdseXBoc1thcmVhXVtTVEFSVF0uZmFjZV9pZDsJCQkg ICAgXAorICAgIHN0cnVjdCBmYWNlICpiYXNlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZhY2Vf aWQpOwkJICAgIFwKKyAgICBwdHJkaWZmX3QgY21wX2lkID0gKHJvdyktPmdseXBoc1thcmVhXVtT VEFSVF0udS5jbXAuaWQ7CQkgICAgXAorICAgIHN0cnVjdCBjb21wb3NpdGlvbiAqY21wID0gY29t cG9zaXRpb25fdGFibGVbY21wX2lkXTsJCSAgICBcCisgICAgdW5zaWduZWQgKmNoYXIyYjsJCQkJ CQkJICAgIFwKKyAgICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpmaXJzdF9zID0gTlVMTDsJCQkJICAg IFwKKyAgICBpbnQgbjsJCQkJCQkJCSAgICBcCisJCQkJCQkJCQkgICAgXAorICAgIFNBRkVfTkFM TE9DQSAoY2hhcjJiLCAxLCBjbXAtPmdseXBoX2xlbik7CQkJCSAgICBcCisJCQkJCQkJCQkgICAg XAorICAgIGZvciAobiA9IDA7IG4gPCBjbXAtPmdseXBoX2xlbjspCQkJCQkgICAgXAorICAgICAg ewkJCQkJCQkJCSAgICBcCisJcyA9IGFsbG9jYSAoc2l6ZW9mICpzKTsJCQkJCQkgICAgXAorCU1D X0lOSVRfR0xZUEhfU1RSSU5HIChzLCBjaGFyMmIsIHcsIHJvdywgYXJlYSwgU1RBUlQsIEhMKTsJ CSAgICBcCisJYXBwZW5kX2dseXBoX3N0cmluZyAoJihIRUFEKSwgJihUQUlMKSwgcyk7CQkJICAg IFwKKwlzLT5jbXAgPSBjbXA7CQkJCQkJCSAgICBcCisJcy0+Y21wX2Zyb20gPSBuOwkJCQkJCSAg ICBcCisJcy0+eCA9IChYKTsJCQkJCQkJICAgIFwKKwlpZiAobiA9PSAwKQkJCQkJCQkgICAgXAor CSAgZmlyc3RfcyA9IHM7CQkJCQkJCSAgICBcCisJbiA9IGZpbGxfY29tcG9zaXRlX2dseXBoX3N0 cmluZyAocywgYmFzZV9mYWNlLCBvdmVybGFwcyk7CSAgICBcCisgICAgICB9CQkJCQkJCQkJICAg IFwKKwkJCQkJCQkJCSAgICBcCisgICAgKytTVEFSVDsJCQkJCQkJCSAgICBcCisgICAgcyA9IGZp cnN0X3M7CQkJCQkJCSAgICBcCisgIH0gd2hpbGUgKGZhbHNlKQorCisjZGVmaW5lIE1DX0JVSUxE X0dTVFJJTkdfR0xZUEhfU1RSSU5HKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNU X1gpIFwKKyAgZG8gewkJCQkJCQkJCSAgXAorICAgIGludCBmYWNlX2lkOwkJCQkJCQkgIFwKKyAg ICB1bnNpZ25lZCAqY2hhcjJiOwkJCQkJCQkgIFwKKyAgICBMaXNwX09iamVjdCBnc3RyaW5nOwkJ CQkJCSAgXAorCQkJCQkJCQkJICBcCisgICAgZmFjZV9pZCA9IChyb3cpLT5nbHlwaHNbYXJlYV1b U1RBUlRdLmZhY2VfaWQ7CQkJICBcCisgICAgZ3N0cmluZyA9IChjb21wb3NpdGlvbl9nc3RyaW5n X2Zyb21faWQJCQkJICBcCisJICAgICAgICgocm93KS0+Z2x5cGhzW2FyZWFdW1NUQVJUXS51LmNt cC5pZCkpOwkJCSAgXAorICAgIHMgPSBhbGxvY2EgKHNpemVvZiAqcyk7CQkJCQkJICBcCisgICAg U0FGRV9OQUxMT0NBIChjaGFyMmIsIDEsIExHU1RSSU5HX0dMWVBIX0xFTiAoZ3N0cmluZykpOwkJ ICBcCisgICAgTUNfSU5JVF9HTFlQSF9TVFJJTkcgKHMsIGNoYXIyYiwgdywgcm93LCBhcmVhLCBT VEFSVCwgSEwpOwkJICBcCisgICAgYXBwZW5kX2dseXBoX3N0cmluZyAoJihIRUFEKSwgJihUQUlM KSwgcyk7CQkJCSAgXAorICAgIHMtPnggPSAoWCk7CQkJCQkJCQkgIFwKKyAgICBTVEFSVCA9IGZp bGxfZ3N0cmluZ19nbHlwaF9zdHJpbmcgKHMsIGZhY2VfaWQsIFNUQVJULCBFTkQsIG92ZXJsYXBz KTsgXAorICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBNQ19CVUlMRF9HTFlQSExFU1NfR0xZ UEhfU1RSSU5HKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNUX1gpIFwKKyAgZG8J CQkJCQkJCQkgICAgXAorICAgIHsJCQkJCQkJCQkgICAgXAorICAgICAgaW50IGZhY2VfaWQ7CQkJ CQkJCSAgICBcCisJCQkJCQkJCQkgICAgXAorICAgICAgZmFjZV9pZCA9IChyb3cpLT5nbHlwaHNb YXJlYV1bU1RBUlRdLmZhY2VfaWQ7CQkJICAgIFwKKwkJCQkJCQkJCSAgICBcCisgICAgICBzID0g YWxsb2NhIChzaXplb2YgKnMpOwkJCQkJCSAgICBcCisgICAgICBNQ19JTklUX0dMWVBIX1NUUklO RyAocywgTlVMTCwgdywgcm93LCBhcmVhLCBTVEFSVCwgSEwpOwkJICAgIFwKKyAgICAgIGFwcGVu ZF9nbHlwaF9zdHJpbmcgKCZIRUFELCAmVEFJTCwgcyk7CQkJCSAgICBcCisgICAgICBzLT54ID0g KFgpOwkJCQkJCQkgICAgXAorICAgICAgU1RBUlQgPSBmaWxsX2dseXBobGVzc19nbHlwaF9zdHJp bmcgKHMsIGZhY2VfaWQsIFNUQVJULCBFTkQsCSAgICBcCisJCQkJCSAgIG92ZXJsYXBzKTsJCQkg ICAgXAorICAgIH0JCQkJCQkJCQkgICAgXAorICB3aGlsZSAoZmFsc2UpCisKKyNkZWZpbmUgTUNf QlVJTERfR0xZUEhfU1RSSU5HU18xKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNU X1gpCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIEhFQUQgPSBUQUlM ID0gTlVMTDsJCQkJCQlcCisgICAgICB3aGlsZSAoU1RBUlQgPCBFTkQpCQkJCQkJXAorCXsJCQkJ CQkJCVwKKwkgIHN0cnVjdCBnbHlwaCAqZmlyc3RfZ2x5cGggPSAocm93KS0+Z2x5cGhzW2FyZWFd ICsgU1RBUlQ7CVwKKwkgIHN3aXRjaCAoZmlyc3RfZ2x5cGgtPnR5cGUpCQkJCQlcCisJICAgIHsJ CQkJCQkJCVwKKwkgICAgY2FzZSBDSEFSX0dMWVBIOgkJCQkJCVwKKwkgICAgICBNQ19CVUlMRF9D SEFSX0dMWVBIX1NUUklOR1MgKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsCQlcCisJCQkJCUhMLCBY LCBMQVNUX1gpOwkJCVwKKwkgICAgICBicmVhazsJCQkJCQkJXAorCQkJCQkJCQkJXAorCSAgICBj YXNlIENPTVBPU0lURV9HTFlQSDoJCQkJCVwKKwkgICAgICBpZiAoZmlyc3RfZ2x5cGgtPnUuY21w LmF1dG9tYXRpYykJCQkJXAorCQlNQ19CVUlMRF9HU1RSSU5HX0dMWVBIX1NUUklORyAoU1RBUlQs IEVORCwgSEVBRCwgVEFJTCwJXAorCQkJCQkgICAgSEwsIFgsIExBU1RfWCk7CQlcCisJICAgICAg ZWxzZQkJCQkJCQlcCisJCU1DX0JVSUxEX0NPTVBPU0lURV9HTFlQSF9TVFJJTkcgKFNUQVJULCBF TkQsIEhFQUQsIFRBSUwsCVwKKwkJCQkJICAgICAgSEwsIFgsIExBU1RfWCk7CQlcCisJICAgICAg YnJlYWs7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkgICAgY2FzZSBTVFJFVENIX0dMWVBIOgkJCQkJ CVwKKwkgICAgICBNQ19CVUlMRF9TVFJFVENIX0dMWVBIX1NUUklORyAoU1RBUlQsIEVORCwgSEVB RCwgVEFJTCwJXAorCQkJCQkgIEhMLCBYLCBMQVNUX1gpOwkJXAorCSAgICAgIGJyZWFrOwkJCQkJ CQlcCisJCQkJCQkJCQlcCisJICAgIGNhc2UgSU1BR0VfR0xZUEg6CQkJCQkJXAorCSAgICAgIE1D X0JVSUxEX0lNQUdFX0dMWVBIX1NUUklORyAoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwJCVwKKwkJ CQkJSEwsIFgsIExBU1RfWCk7CQkJXAorCSAgICAgIGJyZWFrOworCisjZGVmaW5lIE1DX0JVSUxE X0dMWVBIX1NUUklOR1NfWFcoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExBU1RfWCkJ XAorICAgICAgICAgICAgY2FzZSBYV0lER0VUX0dMWVBIOiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBNQ19CVUlMRF9YV0lER0VUX0dMWVBI X1NUUklORyAoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgICAgICAgXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSEwsIFgsIExBU1RfWCk7ICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgICBicmVhazsKKworI2RlZmluZSBNQ19CVUlMRF9HTFlQSF9TVFJJTkdT XzIoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExBU1RfWCkJXAorCSAgICBjYXNlIEdM WVBITEVTU19HTFlQSDoJCQkJCVwKKwkgICAgICBNQ19CVUlMRF9HTFlQSExFU1NfR0xZUEhfU1RS SU5HIChTVEFSVCwgRU5ELCBIRUFELCBUQUlMLAlcCisJCQkJCSAgICBITCwgWCwgTEFTVF9YKTsJ CVwKKwkgICAgICBicmVhazsJCQkJCQkJXAorCQkJCQkJCQkJXAorCSAgICBkZWZhdWx0OgkJCQkJ CQlcCisJICAgICAgZW1hY3NfYWJvcnQgKCk7CQkJCQkJXAorCSAgICB9CQkJCQkJCQlcCisJCQkJ CQkJCQlcCisJICBpZiAocykJCQkJCQkJXAorCSAgICB7CQkJCQkJCQlcCisJICAgICAgc2V0X2ds eXBoX3N0cmluZ19iYWNrZ3JvdW5kX3dpZHRoIChzLCBTVEFSVCwgTEFTVF9YKTsJXAorCSAgICAg IChYKSArPSBzLT53aWR0aDsJCQkJCQlcCisJICAgIH0JCQkJCQkJCVwKKwl9CQkJCQkJCQlcCisg ICAgfSB3aGlsZSAoZmFsc2UpCisKKyNkZWZpbmUgTUNfQlVJTERfR0xZUEhfU1RSSU5HUyhTVEFS VCwgRU5ELCBIRUFELCBUQUlMLCBITCwgWCwgTEFTVF9YKQlcCisgICAgTUNfQlVJTERfR0xZUEhf U1RSSU5HU18xKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNUX1gpCVwKKyAgICBN Q19CVUlMRF9HTFlQSF9TVFJJTkdTX1hXKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBM QVNUX1gpCVwKKyAgICBNQ19CVUlMRF9HTFlQSF9TVFJJTkdTXzIoU1RBUlQsIEVORCwgSEVBRCwg VEFJTCwgSEwsIFgsIExBU1RfWCkKKworLyogU2V0IHZhcmlhYmxlcyBXSURUSCBhbmQgQllURVMg Zm9yIGEgbXVsdGlieXRlIHNlcXVlbmNlIHN0YXJ0aW5nIGF0IFAuCisgICBEUCBpcyBhIGRpc3Bs YXkgdGFibGUgb3IgTlVMTC4gKi8KKyNkZWZpbmUgTUNfTVVMVElCWVRFX0JZVEVTX1dJRFRIKHAs IGRwLCBieXRlcywgd2lkdGgpCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIGludCBjaDsJCQkJ CQkJCVwKKwkJCQkJCQkJCQlcCisgICAgY2ggPSBTVFJJTkdfQ0hBUl9BTkRfTEVOR1RIIChwLCBi eXRlcyk7CQkJCVwKKyAgICBpZiAoQllURVNfQllfQ0hBUl9IRUFEICgqcCkgIT0gYnl0ZXMpCQkJ CVwKKyAgICAgIHdpZHRoID0gYnl0ZXMgKiA0OwkJCQkJCVwKKyAgICBlbHNlCQkJCQkJCQlcCisg ICAgICB7CQkJCQkJCQkJXAorCWlmIChkcCAhPSAwICYmIFZFQ1RPUlAgKERJU1BfQ0hBUl9WRUNU T1IgKGRwLCBjaCkpKQkJXAorCSAgd2lkdGggPSBzYW5pdGl6ZV9jaGFyX3dpZHRoIChBU0laRSAo RElTUF9DSEFSX1ZFQ1RPUiAoZHAsIGNoKSkpOyBcCisJZWxzZQkJCQkJCQkJXAorCSAgd2lkdGgg PSBDSEFSQUNURVJfV0lEVEggKGNoKTsJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgIH0gd2hp bGUgKDApCisKK0xpc3BfT2JqZWN0CittY192ZWN0b3IgKGludCBsZW5ndGgpCit7CisgIHN0cnVj dCBMaXNwX1ZlY3RvciAqcCA9IGFsbG9jYXRlX3ZlY3RvciAobGVuZ3RoKTsKKyAgZm9yIChwdHJk aWZmX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICBwLT5jb250ZW50c1tpXSA9IFFuaWw7 CisgIHJldHVybiBtYWtlX2xpc3BfcHRyIChwLCBMaXNwX1ZlY3Rvcmxpa2UpOworfQorCitMaXNw X09iamVjdAorbWNfbGlzdG4gKHB0cmRpZmZfdCBjb3VudCwgTGlzcF9PYmplY3QgYXJnLCAuLi4p Cit7CisgIGVhc3N1bWUgKDAgPCBjb3VudCk7CisgIExpc3BfT2JqZWN0IHZhbCA9IEZjb25zIChh cmcsIFFuaWwpOworICBMaXNwX09iamVjdCB0YWlsID0gdmFsOworICB2YV9saXN0IGFwOworICB2 YV9zdGFydCAoYXAsIGFyZyk7CisgIGZvciAocHRyZGlmZl90IGkgPSAxOyBpIDwgY291bnQ7IGkr KykKKyAgICB7CisgICAgICBMaXNwX09iamVjdCBlbGVtID0gRmNvbnMgKHZhX2FyZyAoYXAsIExp c3BfT2JqZWN0KSwgUW5pbCk7CisgICAgICBYU0VUQ0RSICh0YWlsLCBlbGVtKTsKKyAgICAgIHRh aWwgPSBlbGVtOworICAgIH0KKyAgdmFfZW5kIChhcCk7CisgIHJldHVybiB2YWw7Cit9CisKK0xp c3BfT2JqZWN0CittY19tZW1xIChMaXNwX09iamVjdCBlbHQsIExpc3BfT2JqZWN0IGxpc3QpCit7 CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICghQ09OU1AgKGxpc3QpIHx8IEVRIChYQ0FS IChsaXN0KSwgZWx0KSkKKyAgICAgICAgYnJlYWs7CisgICAgICBsaXN0ID0gWENEUiAobGlzdCk7 CisgICAgICBpZiAoIUNPTlNQIChsaXN0KSB8fCBFUSAoWENBUiAobGlzdCksIGVsdCkpCisgICAg ICAgIGJyZWFrOworICAgICAgbGlzdCA9IFhDRFIgKGxpc3QpOworICAgICAgaWYgKCFDT05TUCAo bGlzdCkgfHwgRVEgKFhDQVIgKGxpc3QpLCBlbHQpKQorICAgICAgICBicmVhazsKKyAgICAgIGxp c3QgPSBYQ0RSIChsaXN0KTsKKyAgICB9CisgIHJldHVybiBsaXN0OworfQorCitMaXNwX09iamVj dAorbWNfbnRoIChpbnQgbnVtLCBMaXNwX09iamVjdCBsaXN0KQoreworICBmb3IgKGludCBpID0g MDsgaSA8IG51bSAmJiAhTklMUCAobGlzdCk7IGkrKykKKyAgICBsaXN0ID0gWENEUiAobGlzdCk7 CisgIGlmIChDT05TUCAobGlzdCkpCisgICAgcmV0dXJuIFhDQVIgKGxpc3QpOworICAgIGVsc2UK KyAgICAgIHJldHVybiBRbmlsOworfQorCitMaXNwX09iamVjdAorbWNfYXNzcSAoTGlzcF9PYmpl Y3Qga2V5LCBMaXNwX09iamVjdCBsaXN0KQoreworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBp ZiAoIUNPTlNQIChsaXN0KQorICAgICAgICAgIHx8IChDT05TUCAoWENBUiAobGlzdCkpCisgICAg ICAgICAgICAgICYmIEVRIChYQ0FSIChYQ0FSIChsaXN0KSksIGtleSkpKQorICAgICAgICBicmVh azsKKyAgICAgIGxpc3QgPSBYQ0RSIChsaXN0KTsKKyAgICAgIGlmICghQ09OU1AgKGxpc3QpCisg ICAgICAgICAgfHwgKENPTlNQIChYQ0FSIChsaXN0KSkKKyAgICAgICAgICAgICAgJiYgRVEgKFhD QVIgKFhDQVIgKGxpc3QpKSwga2V5KSkpCisgICAgICAgIGJyZWFrOworICAgICAgbGlzdCA9IFhD RFIgKGxpc3QpOworICAgICAgaWYgKCFDT05TUCAobGlzdCkKKyAgICAgICAgICB8fCAoQ09OU1Ag KFhDQVIgKGxpc3QpKQorICAgICAgICAgICAgICAmJiBFUSAoWENBUiAoWENBUiAobGlzdCkpLCBr ZXkpKSkKKyAgICAgICAgYnJlYWs7CisgICAgICBsaXN0ID0gWENEUiAobGlzdCk7CisgICAgfQor ICBpZiAoQ09OU1AgKGxpc3QpKQorICAgIHJldHVybiBYQ0FSIChsaXN0KTsKKyAgICBlbHNlCisg ICAgICByZXR1cm4gUW5pbDsKK30KKworTGlzcF9PYmplY3QKK21jX2Fzc29jIChMaXNwX09iamVj dCBrZXksIExpc3BfT2JqZWN0IGxpc3QpCit7CisgIExpc3BfT2JqZWN0IGNhcjsKKyAgd2hpbGUg KDEpCisgICAgeworICAgICAgaWYgKCFDT05TUCAobGlzdCkKKyAgICAgICAgICB8fCAoQ09OU1Ag KFhDQVIgKGxpc3QpKQorICAgICAgICAgICAgICAmJiAoY2FyID0gWENBUiAoWENBUiAobGlzdCkp LAorICAgICAgICAgICAgICAgICAgRVEgKGNhciwga2V5KSB8fCAhTklMUCAoRmVxdWFsIChjYXIs IGtleSkpKSkpCisgICAgICAgIGJyZWFrOworICAgICAgbGlzdCA9IFhDRFIgKGxpc3QpOworICAg ICAgaWYgKCFDT05TUCAobGlzdCkKKyAgICAgICAgICB8fCAoQ09OU1AgKFhDQVIgKGxpc3QpKQor ICAgICAgICAgICAgICAmJiAoY2FyID0gWENBUiAoWENBUiAobGlzdCkpLAorICAgICAgICAgICAg ICAgICAgRVEgKGNhciwga2V5KSB8fCAhTklMUCAoRmVxdWFsIChjYXIsIGtleSkpKSkpCisgICAg ICAgIGJyZWFrOworICAgICAgbGlzdCA9IFhDRFIgKGxpc3QpOworICAgICAgaWYgKCFDT05TUCAo bGlzdCkKKyAgICAgICAgICB8fCAoQ09OU1AgKFhDQVIgKGxpc3QpKQorICAgICAgICAgICAgICAm JiAoY2FyID0gWENBUiAoWENBUiAobGlzdCkpLAorICAgICAgICAgICAgICAgICAgRVEgKGNhciwg a2V5KSB8fCAhTklMUCAoRmVxdWFsIChjYXIsIGtleSkpKSkpCisgICAgICAgIGJyZWFrOworICAg ICAgbGlzdCA9IFhDRFIgKGxpc3QpOworICAgIH0KKyAgaWYgKENPTlNQIChsaXN0KSkKKyAgICBy ZXR1cm4gWENBUiAobGlzdCk7CisgICAgZWxzZQorICAgICAgcmV0dXJuIFFuaWw7Cit9CisKK0xp c3BfT2JqZWN0CittY19wbGlzdF9nZXQgKExpc3BfT2JqZWN0IHBsaXN0LCBMaXNwX09iamVjdCBw cm9wKQoreworICBMaXNwX09iamVjdCB0YWlsLCBoYWxmdGFpbDsKKyAgLyogaGFsZnRhaWwgaXMg dXNlZCB0byBkZXRlY3QgY2lyY3VsYXIgbGlzdHMuICAqLworICB0YWlsID0gaGFsZnRhaWwgPSBw bGlzdDsKKyAgd2hpbGUgKENPTlNQICh0YWlsKSAmJiBDT05TUCAoWENEUiAodGFpbCkpKQorICAg IHsKKyAgICAgIGlmIChFUSAocHJvcCwgWENBUiAodGFpbCkpKQorICAgICAgICByZXR1cm4gWENB UiAoWENEUiAodGFpbCkpOworICAgICAgdGFpbCA9IFhDRFIgKFhDRFIgKHRhaWwpKTsKKyAgICAg IGhhbGZ0YWlsID0gWENEUiAoaGFsZnRhaWwpOworICAgICAgaWYgKEVRICh0YWlsLCBoYWxmdGFp bCkpCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIFFuaWw7Cit9CisKKy8qIFJFR0lP TiBCRUdJTjogIG1jX3JlZ2lvbl9saW1pdCAoMSkKKyAgIFJFR0lPTiBFTkQ6ICBtY19yZWdpb25f bGltaXQgKDApICovCitwdHJkaWZmX3QKK21jX3JlZ2lvbl9saW1pdCAoYm9vbCBiZWdpbl9wKQor eworICBpZiAoIU5JTFAgKFZ0cmFuc2llbnRfbWFya19tb2RlKQorICAgICAgJiYgTklMUCAoVm1h cmtfZXZlbl9pZl9pbmFjdGl2ZSkKKyAgICAgICYmIE5JTFAgKEJWQVIgKGN1cnJlbnRfYnVmZmVy LCBtYXJrX2FjdGl2ZSkpKQorICAgIHhzaWduYWwwIChRbWFya19pbmFjdGl2ZSk7CisgIExpc3Bf T2JqZWN0IG1hcmtlciA9IEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBtYXJrKTsKKyAgaW50IG0gPSAo WE1BUktFUiAobWFya2VyKS0+YnVmZmVyKQorICAgICAgICAgID8gWE1BUktFUiAobWFya2VyKS0+ Y2hhcnBvcworICAgICAgICAgIDogLTE7CisgIHJldHVybiAobSA9PSAtMSkKKyAgICAgICAgICAg PyAtMQorICAgICAgICAgOiAoUFQgPCBtKSA9PSBiZWdpbl9wCisgICAgICAgICAgID8gUFQKKyAg ICAgICAgIDogY2xpcF90b19ib3VuZHMgKEJFR1YsIG0sIFpWKTsKK30KKworLyogQ2hlY2sgdGhl IHByZXNlbmNlIG9mIGEgZGlzcGxheSBwcm9wZXJ0eSBhbmQgY29tcHV0ZSBpdHMgd2lkdGguCisg ICBJZiBhIHByb3BlcnR5IHdhcyBmb3VuZCBhbmQgaXRzIHdpZHRoIHdhcyBmb3VuZCBhcyB3ZWxs LCByZXR1cm4KKyAgIGl0cyB3aWR0aCAoPj0gMCkgYW5kIHNldCB0aGUgcG9zaXRpb24gb2YgdGhl IGVuZCBvZiB0aGUgcHJvcGVydHkKKyAgIGluIEVORFBPUy4KKyAgIE90aGVyd2lzZSBqdXN0IHJl dHVybiAtMS4gKi8KK3N0YXRpYyBpbnQKK21jX2NoZWNrX2Rpc3BsYXlfd2lkdGggKHB0cmRpZmZf dCBwb3MsIHB0cmRpZmZfdCBjb2wsIHB0cmRpZmZfdCAqZW5kcG9zKQoreworICBMaXNwX09iamVj dCB2YWwsIG92ZXJsYXk7CisgIGlmIChDT05TUCAodmFsID0gZ2V0X2NoYXJfcHJvcGVydHlfYW5k X292ZXJsYXkKKyAgICAgICAgICAgICAgKG1ha2VfZml4bnVtIChwb3MpLCBRZGlzcGxheSwgUW5p bCwgJm92ZXJsYXkpKQorICAgICAgJiYgRVEgKFFzcGFjZSwgWENBUiAodmFsKSkpCisgICAgeyAv KiBGSVhNRTogVXNlIGNhbGNfcGl4ZWxfd2lkdGhfb3JfaGVpZ2h0LiAqLworICAgICAgTGlzcF9P YmplY3QgcGxpc3QgPSBYQ0RSICh2YWwpLCBwcm9wOworICAgICAgaW50IHdpZHRoID0gLTE7Cisg ICAgICBFTUFDU19JTlQgYWxpZ25fdG9fbWF4ID0gKGNvbCA8IE1PU1RfUE9TSVRJVkVfRklYTlVN IC0gSU5UX01BWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoRU1BQ1NfSU5U KSBJTlRfTUFYICsgY29sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1PU1Rf UE9TSVRJVkVfRklYTlVNKTsKKyAgICAgIGlmICgocHJvcCA9IG1jX3BsaXN0X2dldCAocGxpc3Qs IFFDd2lkdGgpLCBSQU5HRURfRklYTlVNUCAoMCwgcHJvcCwgSU5UX01BWCkpCisgICAgICAgICAg fHwgKHByb3AgPSBtY19wbGlzdF9nZXQgKHBsaXN0LCBRQ3JlbGF0aXZlX3dpZHRoKSwKKyAgICAg ICAgICAgICAgUkFOR0VEX0ZJWE5VTVAgKDAsIHByb3AsIElOVF9NQVgpKSkKKyAgICAgICAgd2lk dGggPSBYRklYTlVNIChwcm9wKTsKKyAgICAgICAgZWxzZSBpZiAoRkxPQVRQIChwcm9wKSAmJiAw IDw9IFhGTE9BVF9EQVRBIChwcm9wKQorICAgICAgICAgICAgICAgICAmJiBYRkxPQVRfREFUQSAo cHJvcCkgPD0gSU5UX01BWCkKKyAgICAgICAgICB3aWR0aCA9IChpbnQpKFhGTE9BVF9EQVRBIChw cm9wKSArIDAuNSk7CisgICAgICAgICAgZWxzZSBpZiAoKHByb3AgPSBtY19wbGlzdF9nZXQgKHBs aXN0LCBRQ2FsaWduX3RvKSwKKyAgICAgICAgICAgICAgICAgICAgUkFOR0VEX0ZJWE5VTVAgKGNv bCwgcHJvcCwgYWxpZ25fdG9fbWF4KSkpCisgICAgICAgICAgICB3aWR0aCA9IFhGSVhOVU0gKHBy b3ApIC0gY29sOworICAgICAgICAgICAgICBlbHNlIGlmIChGTE9BVFAgKHByb3ApICYmIGNvbCA8 PSBYRkxPQVRfREFUQSAocHJvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgKFhGTE9BVF9E QVRBIChwcm9wKSA8PSBhbGlnbl90b19tYXgpKQorICAgICAgICAgICAgICAgIHdpZHRoID0gKGlu dCkoWEZMT0FUX0RBVEEgKHByb3ApICsgMC41KSAtIGNvbDsKKyAgICAgIGlmICh3aWR0aCA+PSAw KQorICAgICAgICB7CisgICAgICAgICAgcHRyZGlmZl90IHN0YXJ0OworICAgICAgICAgIGlmIChP VkVSTEFZUCAob3ZlcmxheSkpCisgICAgICAgICAgICAqZW5kcG9zID0gT1ZFUkxBWV9QT1NJVElP TiAoT1ZFUkxBWV9FTkQgKG92ZXJsYXkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgZ2V0X3Byb3BlcnR5X2FuZF9yYW5nZSAocG9zLCBRZGlzcGxheSwgJnZhbCwgJnN0YXJ0LCBl bmRwb3MsIFFuaWwpOworICAgICAgICAgIC8qIEZvciA6cmVsYXRpdmUtd2lkdGgsIHdlIG5lZWQg dG8gbXVsdGlwbHkgYnkgdGhlIGNvbHVtbgorICAgICAgICAgICAgIHdpZHRoIG9mIHRoZSBjaGFy YWN0ZXIgYXQgUE9TLCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMS4gKi8KKyAgICAgICAgICBpZiAo IU5JTFAgKG1jX3BsaXN0X2dldCAocGxpc3QsIFFDcmVsYXRpdmVfd2lkdGgpKQorICAgICAgICAg ICAgICAmJiAhTklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIsIGVuYWJsZV9tdWx0aWJ5dGVfY2hh cmFjdGVycykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgYiwgd2Q7CisgICAg ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBCWVRFX1BPU19BRERSIChDSEFSX1RPX0JZVEUg KHBvcykpOworICAgICAgICAgICAgICBNQ19NVUxUSUJZVEVfQllURVNfV0lEVEggKHAsIGJ1ZmZl cl9kaXNwbGF5X3RhYmxlICgpLCBiLCB3ZCk7CisgICAgICAgICAgICAgIHdpZHRoICo9IHdkOwor ICAgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiB3aWR0aDsKKyAgICAgICAgfQorICAgIH0K KyAgcmV0dXJuIC0xOworfQorCisvKiBUcnkgdG8gY29tcG9zZSB0aGUgY2hhcmFjdGVycyBhdCBD SEFSUE9TIGFjY29yZGluZyB0byBjb21wb3NpdGlvbgorICAgcnVsZSBSVUxFIChbUEFUVEVSTiBQ UkVWLUNIQVJTIEZVTkNdKS4gIExJTUlUIGxpbWl0cyB0aGUgY2hhcmFjdGVycworICAgdG8gY29t cG9zZS4gIFNUUklORywgaWYgbm90IG5pbCwgaXMgYSB0YXJnZXQgc3RyaW5nLiAgV0lOIGlzIGEK KyAgIHdpbmRvdyB3aGVyZSB0aGUgY2hhcmFjdGVycyBhcmUgYmVpbmcgZGlzcGxheWVkLiAgSWYg Y2hhcmFjdGVycyBhcmUKKyAgIHN1Y2Nlc3NmdWxseSBjb21wb3NlZCwgcmV0dXJuIHRoZSBjb21w b3NpdGlvbiBhcyBhIGdseXBoLXN0cmluZworICAgb2JqZWN0LiAgT3RoZXJ3aXNlIHJldHVybiBu aWwuICAqLworc3RhdGljIExpc3BfT2JqZWN0CittY19hdXRvY21wX2NoYXJzIChMaXNwX09iamVj dCBydWxlLCBwdHJkaWZmX3QgY2hhcnBvcywgcHRyZGlmZl90IGJ5dGVwb3MsCisgICAgICAgICAg ICAgICAgICBwdHJkaWZmX3QgbGltaXQsIHN0cnVjdCB3aW5kb3cgKndpbiwgc3RydWN0IGZhY2Ug KmZhY2UsCisgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBzdHJpbmcpCit7CisgIHB0cmRp ZmZfdCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFN RSAod2luLT5mcmFtZSk7CisgIExpc3BfT2JqZWN0IHBvcyA9IG1ha2VfZml4bnVtIChjaGFycG9z KTsKKyAgcHRyZGlmZl90IHRvOworICBwdHJkaWZmX3QgcHQgPSBQVCwgcHRfYnl0ZSA9IFBUX0JZ VEU7CisgIExpc3BfT2JqZWN0IHJlLCBmb250X29iamVjdCwgbGdzdHJpbmc7CisgIHB0cmRpZmZf dCBsZW47CisgIHJlY29yZF91bndpbmRfc2F2ZV9tYXRjaF9kYXRhICgpOworICByZSA9IEFSRUYg KHJ1bGUsIDApOworICBpZiAoTklMUCAocmUpKQorICAgIGxlbiA9IDE7CisgIGVsc2UgaWYgKCEg U1RSSU5HUCAocmUpKQorICAgIHJldHVybiB1bmJpbmRfdG8gKGNvdW50LCBRbmlsKTsKKyAgZWxz ZSBpZiAoKGxlbiA9IGZhc3RfbG9va2luZ19hdCAocmUsIGNoYXJwb3MsIGJ5dGVwb3MsIGxpbWl0 LCAtMSwgc3RyaW5nKSkKKyAgICAgICAgICAgPiAwKQorICAgIHsKKyAgICAgIGlmIChOSUxQIChz dHJpbmcpKQorICAgICAgICBsZW4gPSBCWVRFX1RPX0NIQVIgKGJ5dGVwb3MgKyBsZW4pIC0gY2hh cnBvczsKKyAgICAgIGVsc2UKKyAgICAgICAgbGVuID0gc3RyaW5nX2J5dGVfdG9fY2hhciAoc3Ry aW5nLCBieXRlcG9zICsgbGVuKSAtIGNoYXJwb3M7CisgICAgfQorICBpZiAobGVuIDw9IDApCisg ICAgcmV0dXJuIHVuYmluZF90byAoY291bnQsIFFuaWwpOworICB0byA9IGxpbWl0ID0gY2hhcnBv cyArIGxlbjsKKyNpZmRlZiBIQVZFX1dJTkRPV19TWVNURU0KKyAgaWYgKEZSQU1FX1dJTkRPV19Q IChmKSkKKyAgICB7CisgICAgICBmb250X29iamVjdCA9IGZvbnRfcmFuZ2UgKGNoYXJwb3MsIGJ5 dGVwb3MsICZ0bywgd2luLCBmYWNlLCBzdHJpbmcpOworICAgICAgaWYgKCEgRk9OVF9PQkpFQ1Rf UCAoZm9udF9vYmplY3QpCisgICAgICAgICAgfHwgKCEgTklMUCAocmUpCisgICAgICAgICAgICAg ICYmIHRvIDwgbGltaXQKKyAgICAgICAgICAgICAgJiYgKGZhc3RfbG9va2luZ19hdCAocmUsIGNo YXJwb3MsIGJ5dGVwb3MsIHRvLCAtMSwgc3RyaW5nKSA8PSAwKSkpCisgICAgICAgIHJldHVybiB1 bmJpbmRfdG8gKGNvdW50LCBRbmlsKTsKKyAgICB9CisgIGVsc2UKKyNlbmRpZiAgICAgICAgLyog bm90IEhBVkVfV0lORE9XX1NZU1RFTSAqLworICAgIGZvbnRfb2JqZWN0ID0gd2luLT5mcmFtZTsK KyAgbGdzdHJpbmcgPSBGY29tcG9zaXRpb25fZ2V0X2dzdHJpbmcgKHBvcywgbWFrZV9maXhudW0g KHRvKSwgZm9udF9vYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJpbmcpOworICBpZiAoTklMUCAoTEdTVFJJTkdfSUQgKGxnc3RyaW5nKSkpCisgICAgewor ICAgICAgLyogU2F2ZSBwb2ludCBhcyBtYXJrZXIgYmVmb3JlIGNhbGxpbmcgb3V0IHRvIGxpc3Au ICAqLworICAgICAgaWYgKE5JTFAgKHN0cmluZykpCisgICAgICAgIHJlY29yZF91bndpbmRfcHJv dGVjdCAocmVzdG9yZV9wb2ludF91bndpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnVpbGRfbWFya2VyIChjdXJyZW50X2J1ZmZlciwgcHQsIHB0X2J5dGUpKTsKKyAgICAgIGxn c3RyaW5nID0gc2FmZV9jYWxsICg2LCBWYXV0b19jb21wb3NpdGlvbl9mdW5jdGlvbiwgQVJFRiAo cnVsZSwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zLCBtYWtlX2ZpeG51bSAo dG8pLCBmb250X29iamVjdCwgc3RyaW5nKTsKKyAgICB9CisgIHJldHVybiB1bmJpbmRfdG8gKGNv dW50LCBsZ3N0cmluZyk7Cit9CisKKy8qIENoZWNrIGlmIHRoZSBjaGFyYWN0ZXIgYXQgQ0hBUlBP UyAoYW5kIEJZVEVQT1MpIGlzIGNvbXBvc2VkCisgICAocG9zc2libHkgd2l0aCB0aGUgZm9sbG93 aW5nIGNoYXJhY3RlcnMpIG9uIHdpbmRvdyBXLiAgRU5EUE9TIGxpbWl0cworICAgY2hhcmFjdGVy cyB0byBiZSBjb21wb3NlZC4gIEZBQ0UsIGlmIG5vbi1OVUxMLCBpcyBhIGJhc2UgZmFjZSBvZgor ICAgdGhlIGNoYXJhY3Rlci4gIElmIFNUUklORyBpcyBub3QgbmlsLCBpdCBpcyBhIHN0cmluZyBj b250YWluaW5nIHRoZQorICAgY2hhcmFjdGVyIHRvIGNoZWNrLCBhbmQgQ0hBUlBPUyBhbmQgQllU RVBPUyBhcmUgaW5kaWNlcyBpbiB0aGUKKyAgIHN0cmluZy4gIEluIHRoYXQgY2FzZSwgRkFDRSBt dXN0IG5vdCBiZSBOVUxMLgorICAgSWYgdGhlIGNoYXJhY3RlciBpcyBjb21wb3NlZCwgc2V0dXAg bWVtYmVycyBvZiBDTVBfSVQgKGlkLCBuZ2x5cGhzLAorICAgZnJvbSwgdG8sIHJldmVyc2VkX3Ap LCBhbmQgcmV0dXJuIHRydWUuICBPdGhlcndpc2UsIHVwZGF0ZQorICAgQ01QX0lULT5zdG9wX3Bv cywgYW5kIHJldHVybiBmYWxzZS4gICovCitib29sCittY19jb21wb3NpdGlvbl9yZXNlYXRfaXQg KHN0cnVjdCBjb21wb3NpdGlvbl9pdCAqY21wX2l0LCBwdHJkaWZmX3QgY2hhcnBvcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90IGJ5dGVwb3MsIHB0cmRpZmZfdCBlbmRwb3Ms IHN0cnVjdCB3aW5kb3cgKncsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNl ICpmYWNlLCBMaXNwX09iamVjdCBzdHJpbmcpCit7CisgIGlmIChjbXBfaXQtPmNoID09IC0yKQor ICAgIHsKKyAgICAgIGNvbXBvc2l0aW9uX2NvbXB1dGVfc3RvcF9wb3MgKGNtcF9pdCwgY2hhcnBv cywgYnl0ZXBvcywgZW5kcG9zLCBzdHJpbmcpOworICAgICAgaWYgKGNtcF9pdC0+Y2ggPT0gLTIg fHwgY21wX2l0LT5zdG9wX3BvcyAhPSBjaGFycG9zKQorICAgICAgICAvKiBUaGUgY3VycmVudCBw b3NpdGlvbiBpcyBub3QgY29tcG9zZWQuICAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg IGlmIChlbmRwb3MgPCAwKQorICAgIGVuZHBvcyA9IE5JTFAgKHN0cmluZykgPyBCRUdWIDogMDsK KyAgaWYgKGNtcF9pdC0+Y2ggPCAwKQorICAgIHsKKyAgICAgIC8qIFdlIGFyZSBsb29raW5nIGF0 IGEgc3RhdGljIGNvbXBvc2l0aW9uLiAgKi8KKyAgICAgIHB0cmRpZmZfdCBzdGFydCwgZW5kOwor ICAgICAgTGlzcF9PYmplY3QgcHJvcDsKKyAgICAgIGZpbmRfY29tcG9zaXRpb24gKGNoYXJwb3Ms IC0xLCAmc3RhcnQsICZlbmQsICZwcm9wLCBzdHJpbmcpOworICAgICAgY21wX2l0LT5pZCA9IGdl dF9jb21wb3NpdGlvbl9pZCAoY2hhcnBvcywgYnl0ZXBvcywgZW5kIC0gc3RhcnQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wLCBzdHJpbmcpOworICAgICAgaWYg KGNtcF9pdC0+aWQgPCAwKQorICAgICAgICBnb3RvIG5vX2NvbXBvc2l0aW9uOworICAgICAgY21w X2l0LT5uY2hhcnMgPSBlbmQgLSBzdGFydDsKKyAgICAgIGNtcF9pdC0+bmdseXBocyA9IGNvbXBv c2l0aW9uX3RhYmxlW2NtcF9pdC0+aWRdLT5nbHlwaF9sZW47CisgICAgfQorICBlbHNlIGlmICh3 KQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IGxnc3RyaW5nID0gUW5pbDsKKyAgICAgIExpc3Bf T2JqZWN0IHZhbCwgZWx0OworICAgICAgcHRyZGlmZl90IGk7CisgICAgICB2YWwgPSBDSEFSX1RB QkxFX1JFRiAoVmNvbXBvc2l0aW9uX2Z1bmN0aW9uX3RhYmxlLCBjbXBfaXQtPmNoKTsKKyAgICAg IGZvciAoaSA9IDA7IGkgPCBjbXBfaXQtPnJ1bGVfaWR4OyBpKyssIHZhbCA9IFhDRFIgKHZhbCkp OworICAgICAgaWYgKGNoYXJwb3MgPCBlbmRwb3MpCisgICAgICAgIHsKKyAgICAgICAgICBmb3Ig KDsgQ09OU1AgKHZhbCk7IHZhbCA9IFhDRFIgKHZhbCkpCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIGVsdCA9IFhDQVIgKHZhbCk7CisgICAgICAgICAgICAgIGlmICghIFZFQ1RPUlAgKGVs dCkgfHwgQVNJWkUgKGVsdCkgIT0gMworICAgICAgICAgICAgICAgICAgfHwgISBJTlRFR0VSUCAo QVJFRiAoZWx0LCAxKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg IGlmIChYRklYTkFUIChBUkVGIChlbHQsIDEpKSAhPSBjbXBfaXQtPmxvb2tiYWNrKQorICAgICAg ICAgICAgICAgIGdvdG8gbm9fY29tcG9zaXRpb247CisgICAgICAgICAgICAgIGxnc3RyaW5nID0g bWNfYXV0b2NtcF9jaGFycyAoZWx0LCBjaGFycG9zLCBieXRlcG9zLCBlbmRwb3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdywgZmFjZSwgc3RyaW5nKTsKKyAgICAg ICAgICAgICAgaWYgKGNvbXBvc2l0aW9uX2dzdHJpbmdfcCAobGdzdHJpbmcpKQorICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBsZ3N0cmluZyA9IFFuaWw7CisgICAgICAgICAg ICAgIC8qIENvbXBvc2l0aW9uIGZhaWxlZCBwZXJoYXBzIGJlY2F1c2UgdGhlIGZvbnQgZG9lc24n dAorICAgICAgICAgICAgICAgICBzdXBwb3J0IHN1ZmZpY2llbnQgcmFuZ2Ugb2YgY2hhcmFjdGVy cy4gIFRyeSB0aGUKKyAgICAgICAgICAgICAgICAgb3RoZXIgY29tcG9zaXRpb24gcnVsZXMgaWYg YW55LiAgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjbXBfaXQtPnJldmVyc2VkX3AgPSAw OworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBwdHJkaWZmX3Qg Y3BvcyA9IGNoYXJwb3MsIGJwb3MgPSBieXRlcG9zOworICAgICAgICAgIGNtcF9pdC0+cmV2ZXJz ZWRfcCA9IDE7CisgICAgICAgICAgZWx0ID0gWENBUiAodmFsKTsKKyAgICAgICAgICBpZiAoY21w X2l0LT5sb29rYmFjayA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNwb3MgPSBj aGFycG9zIC0gY21wX2l0LT5sb29rYmFjazsKKyAgICAgICAgICAgICAgaWYgKFNUUklOR1AgKHN0 cmluZykpCisgICAgICAgICAgICAgICAgYnBvcyA9IHN0cmluZ19jaGFyX3RvX2J5dGUgKHN0cmlu ZywgY3Bvcyk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicG9zID0gQ0hB Ul9UT19CWVRFIChjcG9zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBsZ3N0cmluZyA9IG1j X2F1dG9jbXBfY2hhcnMgKGVsdCwgY3BvcywgYnBvcywgY2hhcnBvcyArIDEsIHcsIGZhY2UsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcpOworICAgICAgICAgIGlm ICghIGNvbXBvc2l0aW9uX2dzdHJpbmdfcCAobGdzdHJpbmcpCisgICAgICAgICAgICAgIHx8IGNw b3MgKyBMR1NUUklOR19DSEFSX0xFTiAobGdzdHJpbmcpIC0gMSAhPSBjaGFycG9zKQorICAgICAg ICAgICAgLyogQ29tcG9zaXRpb24gZmFpbGVkIG9yIGRpZG4ndCBjb3ZlciB0aGUgY3VycmVudAor ICAgICAgICAgICAgICAgY2hhcmFjdGVyLiAgKi8KKyAgICAgICAgICAgIGdvdG8gbm9fY29tcG9z aXRpb247CisgICAgICAgIH0KKyAgICAgIGlmIChOSUxQIChsZ3N0cmluZykpCisgICAgICAgIGdv dG8gbm9fY29tcG9zaXRpb247CisgICAgICBpZiAoTklMUCAoTEdTVFJJTkdfSUQgKGxnc3RyaW5n KSkpCisgICAgICAgIGxnc3RyaW5nID0gY29tcG9zaXRpb25fZ3N0cmluZ19wdXRfY2FjaGUgKGxn c3RyaW5nLCAtMSk7CisgICAgICBjbXBfaXQtPmlkID0gWEZJWE5VTSAoTEdTVFJJTkdfSUQgKGxn c3RyaW5nKSk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgTEdTVFJJTkdfR0xZUEhfTEVOIChsZ3N0 cmluZyk7IGkrKykKKyAgICAgICAgaWYgKE5JTFAgKExHU1RSSU5HX0dMWVBIIChsZ3N0cmluZywg aSkpKQorICAgICAgICAgIGJyZWFrOworICAgICAgY21wX2l0LT5uZ2x5cGhzID0gaTsKKyAgICAg IGNtcF9pdC0+ZnJvbSA9IDA7CisgICAgICBjbXBfaXQtPnRvID0gaTsKKyAgICB9CisgIGVsc2UK KyAgICBnb3RvIG5vX2NvbXBvc2l0aW9uOworICByZXR1cm4gMTsKKyBub19jb21wb3NpdGlvbjoK KyAgaWYgKGNoYXJwb3MgPT0gZW5kcG9zKQorICAgIHJldHVybiAwOworICBpZiAoY2hhcnBvcyA8 IGVuZHBvcykKKyAgICB7CisgICAgICBjaGFycG9zKys7CisgICAgICBpZiAoTklMUCAoc3RyaW5n KSkKKyAgICAgICAgSU5DX1BPUyAoYnl0ZXBvcyk7CisgICAgICBlbHNlCisgICAgICAgIGJ5dGVw b3MgKz0gQllURVNfQllfQ0hBUl9IRUFEICgqKFNEQVRBIChzdHJpbmcpICsgYnl0ZXBvcykpOwor ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGNoYXJwb3MtLTsKKyAgICAgIC8qIEJZVEVQT1Mg aXMgY2FsY3VsYXRlZCBpbiBjb21wb3NpdGlvbl9jb21wdXRlX3N0b3BfcG9zICovCisgICAgICBi eXRlcG9zID0gLTE7CisgICAgfQorICBpZiAoY21wX2l0LT5yZXZlcnNlZF9wKQorICAgIGVuZHBv cyA9IC0xOworICBjb21wb3NpdGlvbl9jb21wdXRlX3N0b3BfcG9zIChjbXBfaXQsIGNoYXJwb3Ms IGJ5dGVwb3MsIGVuZHBvcywgc3RyaW5nKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFNjYW5uaW5n IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBsaW5lLCBzdG9wIGF0IHRoZSBidWZm ZXIKKyAgIHBvc2l0aW9uIEVORFBPUyBvciBhdCB0aGUgY29sdW1uIEdPQUxDT0wgb3IgYXQgdGhl IGVuZCBvZiBsaW5lLCB3aGljaGV2ZXIKKyAgIGNvbWVzIGZpcnN0LgorICAgUmV0dXJuIHRoZSBy ZXN1bHRpbmcgYnVmZmVyIHBvc2l0aW9uIGFuZCBjb2x1bW4gaW4gRU5EUE9TIGFuZCBHT0FMQ09M LgorICAgUFJFVkNPTCBnZXRzIHNldCB0byB0aGUgY29sdW1uIG9mIHRoZSBwcmV2aW91cyBwb3Np dGlvbiAoaXQncyBhbHdheXMKKyAgIHN0cmljdGx5IHNtYWxsZXIgdGhhbiB0aGUgZ29hbCBjb2x1 bW4pLiAqLwordm9pZAorbWNfc2Nhbl9mb3JfY29sdW1uIChwdHJkaWZmX3QgKmVuZHBvcywgRU1B Q1NfSU5UICpnb2FsY29sLCBwdHJkaWZmX3QgKnByZXZjb2wsIHB0cmRpZmZfdCBwdCkKK3sKKyAg RU1BQ1NfSU5UIGxhc3Rfa25vd25fY29sdW1uX21vZGlmaWVkID0gMDsKKyAgcHRyZGlmZl90IGxh c3Rfa25vd25fY29sdW1uID0gMDsKKyAgaW50IHRhYl93aWR0aCA9IFNBTkVfVEFCX1dJRFRIIChj dXJyZW50X2J1ZmZlcik7CisgIGJvb2wgY3RsX2Fycm93ID0gIU5JTFAgKEJWQVIgKGN1cnJlbnRf YnVmZmVyLCBjdGxfYXJyb3cpKTsKKyAgc3RydWN0IExpc3BfQ2hhcl9UYWJsZSAqZHAgPSBidWZm ZXJfZGlzcGxheV90YWJsZSAoKTsKKyAgYm9vbCBtdWx0aWJ5dGUgPSAhTklMUCAoQlZBUiAoY3Vy cmVudF9idWZmZXIsIGVuYWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVycykpOworICBzdHJ1Y3QgY29t cG9zaXRpb25faXQgY21wX2l0OworICBMaXNwX09iamVjdCB3aW5kb3c7CisgIHN0cnVjdCB3aW5k b3cgKnc7CisgIC8qIFN0YXJ0IHRoZSBzY2FuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBsaW5l IHdpdGggY29sdW1uIG51bWJlciAwLiAqLworICByZWdpc3RlciBwdHJkaWZmX3QgY29sID0gMCwg cHJldl9jb2wgPSAwOworICBFTUFDU19JTlQgZ29hbCA9IGdvYWxjb2wgPyAqZ29hbGNvbCA6IE1P U1RfUE9TSVRJVkVfRklYTlVNOworICBwdHJkaWZmX3QgZW5kID0gZW5kcG9zID8gKmVuZHBvcyA6 IHB0OworICBwdHJkaWZmX3Qgc2Nhbiwgc2Nhbl9ieXRlLCBuZXh0X2JvdW5kYXJ5OworICBzY2Fu ID0gZmluZF9uZXdsaW5lIChwdCwgQ0hBUl9UT19CWVRFIChwdCksIEJFR1YsIEJFR1ZfQllURSwg LTEsIE5VTEwsICZzY2FuX2J5dGUsIDEpOworICBuZXh0X2JvdW5kYXJ5ID0gc2NhbjsKKyAgd2lu ZG93ID0gRmdldF9idWZmZXJfd2luZG93IChGY3VycmVudF9idWZmZXIgKCksIFFuaWwpOworICB3 ID0gISBOSUxQICh3aW5kb3cpID8gWFdJTkRPVyAod2luZG93KSA6IE5VTEw7CisgIG1lbXNldCAo JmNtcF9pdCwgMCwgc2l6ZW9mIGNtcF9pdCk7CisgIGNtcF9pdC5pZCA9IC0xOworICBjb21wb3Np dGlvbl9jb21wdXRlX3N0b3BfcG9zICgmY21wX2l0LCBzY2FuLCBzY2FuX2J5dGUsIGVuZCwgUW5p bCk7CisgIC8qIFNjYW4gZm9yd2FyZCB0byB0aGUgdGFyZ2V0IHBvc2l0aW9uLiAqLworICB3aGls ZSAoc2NhbiA8IGVuZCkKKyAgICB7CisgICAgICBpbnQgYzsKKyAgICAgIC8qIE9jY2FzaW9uYWxs eSB3ZSBtYXkgbmVlZCB0byBza2lwIGludmlzaWJsZSB0ZXh0LiAqLworICAgICAgd2hpbGUgKHNj YW4gPT0gbmV4dF9ib3VuZGFyeSkKKyAgICAgICAgeworICAgICAgICAgIHB0cmRpZmZfdCBvbGRf c2NhbiA9IHNjYW47CisgICAgICAgICAgLyogVGhpcyB1cGRhdGVzIE5FWFRfQk9VTkRBUlkgdG8g dGhlIG5leHQgcGxhY2UKKyAgICAgICAgICAgICB3aGVyZSB3ZSBtaWdodCBuZWVkIHRvIHNraXAg bW9yZSBpbnZpc2libGUgdGV4dC4gKi8KKyAgICAgICAgICBzY2FuID0gc2tpcF9pbnZpc2libGUg KHNjYW4sICZuZXh0X2JvdW5kYXJ5LCBlbmQsIFFuaWwpOworICAgICAgICAgIGlmIChzY2FuICE9 IG9sZF9zY2FuKQorICAgICAgICAgICAgc2Nhbl9ieXRlID0gQ0hBUl9UT19CWVRFIChzY2FuKTsK KyAgICAgICAgICBpZiAoc2NhbiA+PSBlbmQpCisgICAgICAgICAgICBnb3RvIGVuZGxvb3A7Cisg ICAgICAgIH0KKyAgICAgIC8qIFRlc3QgcmVhY2hpbmcgdGhlIGdvYWwgY29sdW1uLiAgV2UgZG8g dGhpcyBhZnRlciBza2lwcGluZworICAgaW52aXNpYmxlIGNoYXJhY3RlcnMsIHNvIHRoYXQgd2Ug cHV0IHBvaW50IGJlZm9yZSB0aGUKKyAgIGNoYXJhY3RlciBvbiB3aGljaCB0aGUgY3Vyc29yIHdp bGwgYXBwZWFyLiAqLworICAgICAgaWYgKGNvbCA+PSBnb2FsKQorICAgICAgICBicmVhazsKKyAg ICAgIHByZXZfY29sID0gY29sOworICAgICAgeyAvKiBDaGVjayBkaXNwbGF5IHByb3BlcnR5LiAq LworICAgICAgICBwdHJkaWZmX3QgZW5kcDsKKyAgICAgICAgaW50IHdpZHRoID0gbWNfY2hlY2tf ZGlzcGxheV93aWR0aCAoc2NhbiwgY29sLCAmZW5kcCk7CisgICAgICAgIGlmICh3aWR0aCA+PSAw KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNvbCArPSB3aWR0aDsKKyAgICAgICAgICAgIGlm IChlbmRwID4gc2NhbikgLyogQXZvaWQgaW5maW5pdGUgbG9vcHMgd2l0aCAwLXdpZHRoIG92ZXJs YXlzLiAqLworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2NhbiA9IGVuZHA7Cisg ICAgICAgICAgICAgICAgc2Nhbl9ieXRlID0gQ0hBUl9UT19CWVRFIChzY2FuKTsKKyAgICAgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgIH0K KyAgICAgIC8qIENoZWNrIGNvbXBvc2l0aW9uIHNlcXVlbmNlLiAqLworICAgICAgaWYgKGNtcF9p dC5pZCA+PSAwCisgICAgICAgICAgfHwgKHNjYW4gPT0gY21wX2l0LnN0b3BfcG9zCisgICAgICAg ICAgICAgICYmIG1jX2NvbXBvc2l0aW9uX3Jlc2VhdF9pdCAoJmNtcF9pdCwgc2Nhbiwgc2Nhbl9i eXRlLCBlbmQsIHcsIE5VTEwsIFFuaWwpKSkKKyAgICAgICAgY29tcG9zaXRpb25fdXBkYXRlX2l0 ICgmY21wX2l0LCBzY2FuLCBzY2FuX2J5dGUsIFFuaWwpOworICAgICAgaWYgKGNtcF9pdC5pZCA+ PSAwKQorICAgICAgICB7CisgICAgICAgICAgc2NhbiArPSBjbXBfaXQubmNoYXJzOworICAgICAg ICAgIHNjYW5fYnl0ZSArPSBjbXBfaXQubmJ5dGVzOworICAgICAgICAgIGlmIChzY2FuIDw9IGVu ZCkKKyAgICAgICAgICAgIGNvbCArPSBjbXBfaXQud2lkdGg7CisgICAgICAgICAgaWYgKGNtcF9p dC50byA9PSBjbXBfaXQubmdseXBocykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY21w X2l0LmlkID0gLTE7CisgICAgICAgICAgICAgIGNvbXBvc2l0aW9uX2NvbXB1dGVfc3RvcF9wb3Mg KCZjbXBfaXQsIHNjYW4sIHNjYW5fYnl0ZSwgZW5kLCBRbmlsKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgY21wX2l0LmZyb20gPSBjbXBfaXQudG87Cisg ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIGMgPSBGRVRDSF9CWVRFIChzY2Fu X2J5dGUpOworICAgICAgLyogU2VlIGlmIHRoZXJlIGlzIGEgZGlzcGxheSB0YWJsZSBhbmQgaXQg cmVsYXRlcyB0byB0aGlzIGNoYXJhY3Rlci4gKi8KKyAgICAgIGlmIChkcCAhPSAwCisgICAgICAg ICAgJiYgISAobXVsdGlieXRlICYmIExFQURJTkdfQ09ERV9QIChjKSkKKyAgICAgICAgICAmJiBW RUNUT1JQIChESVNQX0NIQVJfVkVDVE9SIChkcCwgYykpKQorICAgICAgICB7CisgICAgICAgICAg TGlzcF9PYmplY3QgY2hhcnZlYzsKKyAgICAgICAgICBwdHJkaWZmX3QgaSwgbjsKKyAgICAgICAg ICAvKiBUaGlzIGNoYXJhY3RlciBpcyBkaXNwbGF5ZWQgdXNpbmcgYSB2ZWN0b3Igb2YgZ2x5cGhz LgorICAgICAgICAgICAgIFVwZGF0ZSB0aGUgY29sdW1uL3Bvc2l0aW9uIGJhc2VkIG9uIHRob3Nl IGdseXBocy4gKi8KKyAgICAgICAgICBjaGFydmVjID0gRElTUF9DSEFSX1ZFQ1RPUiAoZHAsIGMp OworICAgICAgICAgIG4gPSBBU0laRSAoY2hhcnZlYyk7CisgICAgICAgICAgZm9yIChpID0gMDsg aSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogVGhpcyBzaG91bGQg YmUgaGFuZGxlZCB0aGUgc2FtZSBhcworICAgICAgICAgICAgICBuZXh0X2VsZW1lbnRfZnJvbV9k aXNwbGF5X3ZlY3RvciBkb2VzIGl0LiAqLworICAgICAgICAgICAgICBMaXNwX09iamVjdCBlbnRy eSA9IEFSRUYgKGNoYXJ2ZWMsIGkpOworICAgICAgICAgICAgICBpZiAoR0xZUEhfQ09ERV9QIChl bnRyeSkpCisgICAgICAgICAgICAgICAgYyA9IEdMWVBIX0NPREVfQ0hBUiAoZW50cnkpOworICAg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYyA9ICcgJzsKKyAgICAgICAgICAgICAg aWYgKGMgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICBnb3RvIGVuZGxvb3A7CisgICAgICAgICAg ICAgIGlmIChjID09ICdccicgJiYgRVEgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBzZWxlY3RpdmVf ZGlzcGxheSksIFF0KSkKKyAgICAgICAgICAgICAgICBnb3RvIGVuZGxvb3A7CisgICAgICAgICAg ICAgIGlmIChjID09ICdcdCcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg Y29sICs9IHRhYl93aWR0aDsKKyAgICAgICAgICAgICAgICAgIGNvbCA9IGNvbCAvIHRhYl93aWR0 aCAqIHRhYl93aWR0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgKytjb2w7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoZSBkaXNwbGF5IHRhYmxlIGRv ZXNuJ3QgYWZmZWN0IHRoaXMgY2hhcmFjdGVyOworICAgICAgICAgICAgICAgaXQgZGlzcGxheXMg YXMgaXRzZWxmLiAqLworICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykKKyAgICAgICAgICAgICAg Z290byBlbmRsb29wOworICAgICAgICAgICAgaWYgKGMgPT0gJ1xyJyAmJiBFUSAoQlZBUiAoY3Vy cmVudF9idWZmZXIsIHNlbGVjdGl2ZV9kaXNwbGF5KSwgUXQpKQorICAgICAgICAgICAgICBnb3Rv IGVuZGxvb3A7CisgICAgICAgICAgICBpZiAoYyA9PSAnXHQnKQorICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgY29sICs9IHRhYl93aWR0aDsKKyAgICAgICAgICAgICAgICBjb2wgPSBj b2wgLyB0YWJfd2lkdGggKiB0YWJfd2lkdGg7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgZWxzZSBpZiAobXVsdGlieXRlICYmIExFQURJTkdfQ09ERV9QIChjKSkKKyAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBtdWx0aS1ieXRlIGZvcm0uICov CisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdHI7CisgICAgICAgICAgICAgICAg ICBpbnQgYnl0ZXMsIHdpZHRoOworICAgICAgICAgICAgICAgICAgcHRyID0gQllURV9QT1NfQURE UiAoc2Nhbl9ieXRlKTsKKyAgICAgICAgICAgICAgICAgIE1DX01VTFRJQllURV9CWVRFU19XSURU SCAocHRyLCBkcCwgYnl0ZXMsIHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgIC8qIFN1YnRyYWN0 IG9uZSB0byBjb21wZW5zYXRlIGZvciB0aGUgaW5jcmVtZW50CisgICAgICAgICAgICAgICAgICB0 aGF0IGlzIGdvaW5nIHRvIGhhcHBlbiBiZWxvdy4gKi8KKyAgICAgICAgICAgICAgICAgIHNjYW5f Ynl0ZSArPSBieXRlcyAtIDE7CisgICAgICAgICAgICAgICAgICBjb2wgKz0gd2lkdGg7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN0bF9hcnJvdyAmJiAoYyA8 IDA0MCB8fCBjID09IDAxNzcpKQorICAgICAgICAgICAgICAgICAgY29sICs9IDI7CisgICAgICAg ICAgICAgICAgICBlbHNlIGlmIChjIDwgMDQwIHx8IGMgPj0gMDE3NykKKyAgICAgICAgICAgICAg ICAgICAgY29sICs9IDQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICAgICAgICBjb2wrKzsKKyAgICAgICAgICB9CisgICAgICBzY2FuKys7CisgICAgICBzY2FuX2J5 dGUrKzsKKyAgICB9CisgZW5kbG9vcDoKKyAgbGFzdF9rbm93bl9jb2x1bW4gPSBjb2w7CisgIGxh c3Rfa25vd25fY29sdW1uX3BvaW50ID0gcHQ7CisgIGxhc3Rfa25vd25fY29sdW1uX21vZGlmaWVk ID0gTU9ESUZGOworICBpZiAoZ29hbGNvbCkKKyAgICAqZ29hbGNvbCA9IGNvbDsKKyAgaWYgKGVu ZHBvcykKKyAgICAqZW5kcG9zID0gc2NhbjsKKyAgaWYgKHByZXZjb2wpCisgICAgKnByZXZjb2wg PSBwcmV2X2NvbDsKK30KKworcHRyZGlmZl90CittY19jdXJyZW50X2NvbHVtbiAoc3RydWN0IHdp bmRvdyAqdywgcHRyZGlmZl90IHB0KQoreworICAvKiBgYnVmX2NoYXJwb3NfdG9fYnl0ZXBvcyc6 ICBlYXNzZXJ0IChCVUZfQkVHIChiKSA8PSBjaGFycG9zICYmIGNoYXJwb3MgPD0gQlVGX1ogKGIp KTsgKi8KKyAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKHctPmNvbnRlbnRzKTsKKyAgc3Ry dWN0IGJ1ZmZlciAqb2xkX2J1ZmZlciA9IE5VTEw7CisgIGlmIChiICE9IGN1cnJlbnRfYnVmZmVy KQorICAgIHsKKyAgICAgIG9sZF9idWZmZXIgPSBjdXJyZW50X2J1ZmZlcjsKKyAgICAgIHNldF9i dWZmZXJfaW50ZXJuYWwgKGIpOworICAgIH0KKyAgYm9vbCBiYXJmX2NyYXNoID0gKEJVRl9CRUcg KGIpIDw9IHB0ICYmIHB0IDw9IEJVRl9aIChiKSkgPyBmYWxzZSA6IHRydWU7CisgIGlmIChiYXJm X2NyYXNoKQorICAgIHsKKyAgICAgIGlmIChvbGRfYnVmZmVyKQorICAgICAgICBzZXRfYnVmZmVy X2ludGVybmFsIChvbGRfYnVmZmVyKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgRU1BQ1Nf SU5UIGxhc3Rfa25vd25fY29sdW1uX21vZGlmaWVkID0gMDsKKyAgcHRyZGlmZl90IGxhc3Rfa25v d25fY29sdW1uID0gMDsKKyAgcHRyZGlmZl90IGNvbDsKKyAgdW5zaWduZWQgY2hhciAqcHRyLCAq c3RvcDsKKyAgYm9vbCB0YWJfc2VlbjsKKyAgcHRyZGlmZl90IHBvc3RfdGFiOworICBpbnQgYzsK KyAgaW50IHRhYl93aWR0aCA9IFNBTkVfVEFCX1dJRFRIIChjdXJyZW50X2J1ZmZlcik7CisgIGJv b2wgY3RsX2Fycm93ID0gIU5JTFAgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBjdGxfYXJyb3cpKTsK KyAgc3RydWN0IExpc3BfQ2hhcl9UYWJsZSAqZHAgPSBidWZmZXJfZGlzcGxheV90YWJsZSAoKTsK KyAgaWYgKHB0ID09IGxhc3Rfa25vd25fY29sdW1uX3BvaW50CisgICAgICAmJiBNT0RJRkYgPT0g bGFzdF9rbm93bl9jb2x1bW5fbW9kaWZpZWQpCisgICAgeworICAgICAgaWYgKG9sZF9idWZmZXIp CisgICAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKG9sZF9idWZmZXIpOworICAgICAgcmV0dXJu IGxhc3Rfa25vd25fY29sdW1uOworICAgIH0KKyAgLyogSWYgdGhlIGJ1ZmZlciBoYXMgb3Zlcmxh eXMsIHRleHQgcHJvcGVydGllcywKKyAgICAgb3IgbXVsdGlieXRlIGNoYXJhY3RlcnMsIHVzZSBh IG1vcmUgZ2VuZXJhbCBhbGdvcml0aG0uICovCisgIGlmIChidWZmZXJfaW50ZXJ2YWxzIChjdXJy ZW50X2J1ZmZlcikKKyAgICAgIHx8IGJ1ZmZlcl9oYXNfb3ZlcmxheXMgKCkKKyAgICAgIHx8IFog IT0gWl9CWVRFKQorICAgIHsKKyAgICAgIEVNQUNTX0lOVCBjb2wgPSBNT1NUX1BPU0lUSVZFX0ZJ WE5VTTsKKyAgICAgIG1jX3NjYW5fZm9yX2NvbHVtbiAoJnB0LCAmY29sLCBOVUxMLCBwdCk7Cisg ICAgICB7CisgICAgICAgIGlmIChvbGRfYnVmZmVyKQorICAgICAgICAgIHNldF9idWZmZXJfaW50 ZXJuYWwgKG9sZF9idWZmZXIpOworICAgICAgICByZXR1cm4gY29sOworICAgICAgfQorICAgIH0K KyAgLyogU2NhbiBiYWNrd2FyZHMgZnJvbSBwb2ludCB0byB0aGUgcHJldmlvdXMgbmV3bGluZSwK KyAgICAgY291bnRpbmcgd2lkdGguICBUYWIgY2hhcmFjdGVycyBhcmUgdGhlIG9ubHkgY29tcGxp Y2F0ZWQgY2FzZS4gKi8KKyAgLyogTWFrZSBhIHBvaW50ZXIgZm9yIGRlY3JlbWVudGluZyB0aHJv dWdoIHRoZSBjaGFycyBiZWZvcmUgcG9pbnQuICovCisgIHB0ciA9IEJZVEVfUE9TX0FERFIgKENI QVJfVE9fQllURSAocHQpIC0gMSkgKyAxOworICAvKiBNYWtlIGEgcG9pbnRlciB0byB3aGVyZSBj b25zZWN1dGl2ZSBjaGFycyBsZWF2ZSBvZmYsCisgICAgIGdvaW5nIGJhY2t3YXJkcyBmcm9tIHBv aW50LiAqLworICBpZiAocHQgPT0gQkVHVikKKyAgICBzdG9wID0gcHRyOworICAgIGVsc2UgaWYg KHB0IDw9IEdQVCB8fCBCRUdWID4gR1BUKQorICAgICAgc3RvcCA9IEJFR1ZfQUREUjsKKyAgICAg IGVsc2UKKyAgICAgICAgc3RvcCA9IEdBUF9FTkRfQUREUjsKKyAgY29sID0gMCwgdGFiX3NlZW4g PSAwLCBwb3N0X3RhYiA9IDA7CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIHB0cmRpZmZfdCBp LCBuOworICAgICAgTGlzcF9PYmplY3QgY2hhcnZlYzsKKyAgICAgIGlmIChwdHIgPT0gc3RvcCkK KyAgICAgICAgeworICAgICAgICAgIC8qIFdlIHN0b3BwZWQgZWl0aGVyIGZvciB0aGUgYmVnaW5u aW5nIG9mIHRoZSBidWZmZXIKKyAgICAgICAgICAgICBvciBmb3IgdGhlIGdhcC4gKi8KKyAgICAg ICAgICBpZiAocHRyID09IEJFR1ZfQUREUikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IC8qIEl0IHdhcyB0aGUgZ2FwLiAgSnVtcCBiYWNrIG92ZXIgaXQuICovCisgICAgICAgICAgc3Rv cCA9IEJFR1ZfQUREUjsKKyAgICAgICAgICBwdHIgPSBHUFRfQUREUjsKKyAgICAgICAgICAvKiBD aGVjayB3aGV0aGVyIHRoYXQgYnJpbmdzIHVzIHRvIGJlZ2lubmluZyBvZiBidWZmZXIuICovCisg ICAgICAgICAgaWYgKEJFR1YgPj0gR1BUKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICAgIGMgPSAqLS1wdHI7CisgICAgICBpZiAoZHAgJiYgVkVDVE9SUCAoRElTUF9DSEFSX1ZF Q1RPUiAoZHAsIGMpKSkKKyAgICAgICAgeworICAgICAgICAgIGNoYXJ2ZWMgPSBESVNQX0NIQVJf VkVDVE9SIChkcCwgYyk7CisgICAgICAgICAgbiA9IEFTSVpFIChjaGFydmVjKTsKKyAgICAgICAg fQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgY2hhcnZlYyA9IFFuaWw7 CisgICAgICAgICAgICBuID0gMTsKKyAgICAgICAgICB9CisgICAgICBmb3IgKGkgPSBuIC0gMTsg aSA+PSAwOyAtLWkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoVkVDVE9SUCAoY2hhcnZlYykp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkIGJlIGhhbmRsZWQg dGhlIHNhbWUgYXMKKyAgICAgICAgICAgbmV4dF9lbGVtZW50X2Zyb21fZGlzcGxheV92ZWN0b3Ig ZG9lcyBpdC4gKi8KKyAgICAgICAgICAgICAgTGlzcF9PYmplY3QgZW50cnkgPSBBUkVGIChjaGFy dmVjLCBpKTsKKyAgICAgICAgICAgICAgaWYgKEdMWVBIX0NPREVfUCAoZW50cnkpKQorICAgICAg ICAgICAgICAgIGMgPSBHTFlQSF9DT0RFX0NIQVIgKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgICBjID0gJyAnOworICAgICAgICAgICAgfQorICAgICAgICAg IGlmIChjID49IDA0MCAmJiBjIDwgMDE3NykKKyAgICAgICAgICAgIGNvbCsrOworICAgICAgICAg ICAgZWxzZSBpZiAoYyA9PSAnXG4nCisgICAgICAgICAgICAgICAgICAgICB8fCAoYyA9PSAnXHIn CisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgRVEgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBz ZWxlY3RpdmVfZGlzcGxheSksIFF0KSkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICBwdHIrKzsKKyAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0X29mX2xpbmVfZm91bmQ7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnXHQnKQorICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmICh0YWJfc2VlbikKKyAgICAgICAgICAgICAg ICAgICAgY29sID0gKChjb2wgKyB0YWJfd2lkdGgpIC8gdGFiX3dpZHRoKSAqIHRhYl93aWR0aDsK KyAgICAgICAgICAgICAgICAgIHBvc3RfdGFiICs9IGNvbDsKKyAgICAgICAgICAgICAgICAgIGNv bCA9IDA7CisgICAgICAgICAgICAgICAgICB0YWJfc2VlbiA9IDE7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFZFQ1RPUlAgKGNoYXJ2ZWMpKQorICAgICAgICAg ICAgICAgICAgLyogV2l0aCBhIGRpc3BsYXkgdGFibGUgZW50cnksIEMgaXMgZGlzcGxheWVkIGFz IGlzLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgIG5vdCBkaXNwbGF5ZWQgYXMgXE5OTiBvciBh cyBeTi4gIElmIEMgaXMgYSBzaW5nbGUtYnl0ZQorICAgICAgICAgICAgICAgICAgICAgY2hhcmFj dGVyLCBpdCB0YWtlcyBvbmUgY29sdW1uLiAgSWYgQyBpcyBtdWx0aS1ieXRlIGluCisgICAgICAg ICAgICAgICAgICAgICBhIHVuaWJ5dGUgYnVmZmVyLCBpdCdzIHRyYW5zbGF0ZWQgdG8gdW5pYnl0 ZSwgc28gaXQKKyAgICAgICAgICAgICAgICAgICAgIGFsc28gdGFrZXMgb25lIGNvbHVtbi4gKi8K KyAgICAgICAgICAgICAgICAgICsrY29sOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICAgICAgICBjb2wgKz0gKGN0bF9hcnJvdyAmJiBjIDwgMDIwMCkgPyAyIDogNDsKKyAg ICAgICAgfQorICAgIH0KKyBzdGFydF9vZl9saW5lX2ZvdW5kOgorICBpZiAodGFiX3NlZW4pCisg ICAgeworICAgICAgY29sID0gKChjb2wgKyB0YWJfd2lkdGgpIC8gdGFiX3dpZHRoKSAqIHRhYl93 aWR0aDsKKyAgICAgIGNvbCArPSBwb3N0X3RhYjsKKyAgICB9CisgIGxhc3Rfa25vd25fY29sdW1u ID0gY29sOworICBsYXN0X2tub3duX2NvbHVtbl9wb2ludCA9IHB0OworICBsYXN0X2tub3duX2Nv bHVtbl9tb2RpZmllZCA9IE1PRElGRjsKKyAgaWYgKG9sZF9idWZmZXIpCisgICAgc2V0X2J1ZmZl cl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7CisgIHJldHVybiBjb2w7Cit9CisKK0RFRlVOICgibWMt Y3VycmVudC1jb2x1bW4iLCBGbWNfY3VycmVudF9jb2x1bW4sIFNtY19jdXJyZW50X2NvbHVtbiwg MiwgMiwgMCwKKyAgICAgICBkb2M6IC8qIFJldHVybiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBv ZiBwb2ludC4gIEJlZ2lubmluZyBvZiBsaW5lIGlzIGNvbHVtbiAwLgorVGhpcyBpcyBjYWxjdWxh dGVkIGJ5IGFkZGluZyB0b2dldGhlciB0aGUgd2lkdGhzIG9mIGFsbCB0aGUgZGlzcGxheWVkCity ZXByZXNlbnRhdGlvbnMgb2YgdGhlIGNoYXJhY3RlciBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUg cHJldmlvdXMgbGluZQorYW5kIHBvaW50IChlLmcuLCBjb250cm9sIGNoYXJhY3RlcnMgd2lsbCBo YXZlIGEgd2lkdGggb2YgMiBvciA0LCB0YWJzCit3aWxsIGhhdmUgYSB2YXJpYWJsZSB3aWR0aCku CitJZ25vcmVzIGZpbml0ZSB3aWR0aCBvZiBmcmFtZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIGZ1 bmN0aW9uIG1heSByZXR1cm4KK3ZhbHVlcyBncmVhdGVyIHRoYW4gKGZyYW1lLXdpZHRoKS4KK1do ZXRoZXIgdGhlIGxpbmUgaXMgdmlzaWJsZSAoaWYgYHNlbGVjdGl2ZS1kaXNwbGF5JyBpcyB0KSBo YXMgbm8gZWZmZWN0OworaG93ZXZlciwgXk0gaXMgdHJlYXRlZCBhcyBlbmQgb2YgbGluZSB3aGVu IGBzZWxlY3RpdmUtZGlzcGxheScgaXMgdC4KK1RleHQgdGhhdCBoYXMgYW4gaW52aXNpYmxlIHBy b3BlcnR5IGlzIGNvbnNpZGVyZWQgYXMgaGF2aW5nIHdpZHRoIDAsIHVubGVzcworYGJ1ZmZlci1p bnZpc2liaWxpdHktc3BlYycgc3BlY2lmaWVzIHRoYXQgaXQgaXMgcmVwbGFjZWQgYnkgYW4gZWxs aXBzaXMuICAqLykKKyAgKExpc3BfT2JqZWN0IHdpbmRvdywgTGlzcF9PYmplY3QgcHQpCit7Cisg IHN0cnVjdCB3aW5kb3cgKncgPSBkZWNvZGVfbGl2ZV93aW5kb3cgKHdpbmRvdyk7CisgIExpc3Bf T2JqZWN0IHRlbXA7CisgIFhTRVRGQVNUSU5UICh0ZW1wLCBtY19jdXJyZW50X2NvbHVtbiAodywg WEZJWE5VTSAocHQpKSk7CisgIHJldHVybiB0ZW1wOworfQorCisvKiBVU0FHRTogIGZwcmludGYg KHN0ZGVyciwgIkZSQU1FICglcykiLCBtY19mcmFtZSAoZikpOyAqLworY2hhciAqCittY19mcmFt ZSAoc3RydWN0IGZyYW1lICpmKQoreworICBMaXNwX09iamVjdCBmcmFtZTsKKyAgWFNFVEZSQU1F IChmcmFtZSwgZik7CisgIHJldHVybiBTU0RBVEEgKEZwcmluMV90b19zdHJpbmcgKGZyYW1lLCBR bmlsKSk7Cit9CisKKy8qIFVTQUdFOiAgZnByaW50ZiAoc3RkZXJyLCAiV0lORE9XICglcykiLCBt Y193aW5kb3cgKHcpKTsgKi8KK2NoYXIgKgorbWNfd2luZG93IChzdHJ1Y3Qgd2luZG93ICp3KQor eworICBMaXNwX09iamVjdCB3aW5kb3c7CisgIFhTRVRXSU5ET1cgKHdpbmRvdywgdyk7CisgIHJl dHVybiBTU0RBVEEgKEZwcmluMV90b19zdHJpbmcgKHdpbmRvdywgUW5pbCkpOworfQorCisvKiBV U0FHRTogIGZwcmludGYgKHN0ZGVyciwgIkNIQVJBQ1RFUiAoJXMpIiwgbWNfY2hhcl90b19zdHJp bmcgKGdseXBoLT51LmNoKSk7ICovCitjaGFyICoKK21jX2NoYXJfdG9fc3RyaW5nIChpbnQgYXJn KQoreworICBMaXNwX09iamVjdCBjaGFyYWN0ZXIgPSAoMCA8PSBhcmcgJiYgYXJnIDw9IE1BWF9D SEFSKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBGY2hhcl90b19zdHJpbmcgKG1ha2Vf Zml4bnVtIChhcmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBRbmlsOworICBjaGFy ICogcmVzdWx0ID0gKCFOSUxQIChjaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAgICAgJiYgYXJn ID09IDkpCisgICAgICAgICAgICAgICAgICAgID8gIlxcdCIKKyAgICAgICAgICAgICAgICAgIDog KCFOSUxQIChjaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAgICAgICAmJiBhcmcgPT0gMTApCisg ICAgICAgICAgICAgICAgICAgID8gIlxcbiIKKyAgICAgICAgICAgICAgICAgIDogKCFOSUxQIChj aGFyYWN0ZXIpCisgICAgICAgICAgICAgICAgICAgICAmJiBhcmcgPT0gMzIpCisgICAgICAgICAg ICAgICAgICAgID8gIlxccyIKKyAgICAgICAgICAgICAgICAgIDogKCFOSUxQIChjaGFyYWN0ZXIp CisgICAgICAgICAgICAgICAgICAgICAmJiBhcmcgIT0gOQorICAgICAgICAgICAgICAgICAgICAg JiYgYXJnICE9IDEwCisgICAgICAgICAgICAgICAgICAgICAmJiBhcmcgIT0gMzIpCisgICAgICAg ICAgICAgICAgICAgID8gU1NEQVRBIChjaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAgICA6ICJc XD8iOworICByZXR1cm4gcmVzdWx0OworfQorCitpbnQKK21jX2xpc3BfdG9fY3Vyc29yX3R5cGUg KExpc3BfT2JqZWN0IGFyZykKK3sKKyAgY2hhciAqc3RyOworICBpZiAoWFRZUEUgKGFyZykgPT0g TGlzcF9TdHJpbmcpCisgICAgc3RyID0gU1NEQVRBIChhcmcpOworICAgIGVsc2UgaWYgKFhUWVBF IChhcmcpID09IExpc3BfU3ltYm9sKQorICAgICAgc3RyID0gU1NEQVRBIChTWU1CT0xfTkFNRSAo YXJnKSk7CisgICAgICBlbHNlIHJldHVybiAtMTsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgIm5vIikp CisgICAgcmV0dXJuIE1DX05PX0NVUlNPUjsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgIm1jLWxlZnQt ZnJpbmdlLWJpdG1hcCIpKQorICAgIHJldHVybiBNQ19MRUZUX0ZSSU5HRV9CSVRNQVA7CisgIGlm ICghc3RyY21wIChzdHIsICJtYy1yaWdodC1mcmluZ2UtYml0bWFwIikpCisgICAgcmV0dXJuIE1D X1JJR0hUX0ZSSU5HRV9CSVRNQVA7CisgIGlmICghc3RyY21wIChzdHIsICJib3giKSkKKyAgICBy ZXR1cm4gTUNfRklMTEVEX0JPWDsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgImZyYW1lZCIpKQorICAg IHJldHVybiBNQ19GUkFNRURfQk9YOworICBpZiAoIXN0cmNtcCAoc3RyLCAiaG9sbG93IikpCisg ICAgcmV0dXJuIE1DX0hPTExPV19CT1g7CisgIGlmICghc3RyY21wIChzdHIsICJiYXIiKSkKKyAg ICByZXR1cm4gTUNfQkFSOworICBpZiAoIXN0cmNtcCAoc3RyLCAiaGJhciIpKQorICAgIHJldHVy biBNQ19IQkFSOworICByZXR1cm4gLTE7Cit9CisKKy8qIFVTQUdFOiAgZnByaW50ZiAoc3RkZXJy LCAiQ1VSU09SIFRZUEUgKCVzKSIsIG1jX2N1cnNvcl90eXBlX3RvX3N0cmluZyAoYXJnKSk7ICov CitjaGFyICoKK21jX2N1cnNvcl90eXBlX3RvX3N0cmluZyAoZW51bSBtY19jdXJzb3JfdHlwZSBj dXJzb3JfdHlwZSkKK3sKKyAgc3dpdGNoIChjdXJzb3JfdHlwZSkKKyAgICB7CisgICAgICBjYXNl IE1DX0ZJTExFRF9CT1g6IHJldHVybiAiTUNfRklMTEVEX0JPWCI7CisgICAgICBjYXNlIE1DX0ZS QU1FRF9CT1g6IHJldHVybiAiTUNfRlJBTUVEX0JPWCI7CisgICAgICBjYXNlIE1DX0hPTExPV19C T1g6IHJldHVybiAiTUNfSE9MTE9XX0JPWCI7CisgICAgICBjYXNlIE1DX0JBUjogcmV0dXJuICJN Q19CQVIiOworICAgICAgY2FzZSBNQ19IQkFSOiByZXR1cm4gIk1DX0hCQVIiOworICAgICAgY2Fz ZSBNQ19MRUZUX0ZSSU5HRV9CSVRNQVA6IHJldHVybiAiTUNfTEVGVF9GUklOR0VfQklUTUFQIjsK KyAgICAgIGNhc2UgTUNfUklHSFRfRlJJTkdFX0JJVE1BUDogcmV0dXJuICJNQ19SSUdIVF9GUklO R0VfQklUTUFQIjsKKyAgICAgIGNhc2UgTUNfTk9fRlJJTkdFX0JJVE1BUDogcmV0dXJuICJNQ19O T19GUklOR0VfQklUTUFQIjsKKyAgICAgIGNhc2UgTUNfTk9fQ1VSU09SOgorICAgICAgZGVmYXVs dDoKKyAgICAgIHJldHVybiAiTUNfTk9fQ1VSU09SIjsKKyAgICB9Cit9CisKKy8qIFVTQUdFOiAg ZnByaW50ZiAoc3RkZXJyLCAiR0xZUEggRkxBVk9SICglcykiLCBtY19mbGF2b3JfdG9fc3RyaW5n IChhcmcpKTsgKi8KK2NoYXIgKgorbWNfZmxhdm9yX3RvX3N0cmluZyAoZW51bSBtY19mbGF2b3Ig Z2x5cGhfZmxhdm9yKQoreworICBzd2l0Y2ggKGdseXBoX2ZsYXZvcikKKyAgICB7CisgICAgICBj YXNlIE5PX0ZMQVZPUjogcmV0dXJuICJOT19GTEFWT1IiOworICAgICAgY2FzZSBNQ19HTFlQSDog cmV0dXJuICJNQ19HTFlQSCI7CisgICAgICBjYXNlIE1DX0dMWVBITEVTUzogcmV0dXJuICJNQ19H TFlQSExFU1MiOworICAgICAgY2FzZSBNQ19PVkVSTEFZX0FSUk9XX0JJVE1BUDogcmV0dXJuICJN Q19PVkVSTEFZX0FSUk9XX0JJVE1BUCI7CisgICAgICBjYXNlIE1DX1BJTENST1c6IHJldHVybiAi TUNfUElMQ1JPVyI7CisgICAgICBjYXNlIE1DX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1c6 IHJldHVybiAiTUNfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVyI7CisgICAgICBjYXNlIE1D X1JFVkVSU0VEX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1c6IHJldHVybiAiTUNfUkVWRVJT RURfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVyI7CisgICAgICBjYXNlIE1DX0hPTExPV19S RUNUQU5HTEU6IHJldHVybiAiTUNfSE9MTE9XX1JFQ1RBTkdMRSI7CisgICAgICBjYXNlIE1DX1ZF UlRJQ0FMX0JBUl9SSUdIVF9BUlJPVzogcmV0dXJuICJNQ19WRVJUSUNBTF9CQVJfUklHSFRfQVJS T1ciOworICAgICAgY2FzZSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1c6IHJl dHVybiAiTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XIjsKKyAgICAgIGNhc2Ug TUNfVkVSVElDQUxfQkFSOiByZXR1cm4gIk1DX1ZFUlRJQ0FMX0JBUiI7CisgICAgICBjYXNlIE1D X1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUjogcmV0dXJuICJNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIi OworICAgICAgY2FzZSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNIOiByZXR1cm4gIk1DX1ZFUlRJ Q0FMX0JBUl9CQUNLU0xBU0giOworICAgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAiVU5LTk9X TiI7CisgICAgfQorfQorCisvKiBVU0FHRTogIGZwcmludGYgKHN0ZGVyciwgIkNBQ0hFLVRZUEUg KCVzKSIsIG1jX2NhY2hlX3R5cGVfdG9fc3RyaW5nIChhcmcpKTsgKi8KK2NoYXIgKgorbWNfY2Fj aGVfdHlwZV90b19zdHJpbmcgKGVudW0gbWNfY2FjaGVfdHlwZSBjYWNoZV90eXBlKQoreworICBz d2l0Y2ggKGNhY2hlX3R5cGUpCisgICAgeworICAgICAgY2FzZSBOT19DQUNIRTogcmV0dXJuICJO T19DQUNIRSI7CisgICAgICBjYXNlIE1DX0NBQ0hFOiByZXR1cm4gIk1DX0NBQ0hFIjsKKyAgICAg IGNhc2UgQ0hfQ0FDSEU6IHJldHVybiAiQ0hfQ0FDSEUiOworICAgICAgY2FzZSBGQ19DQUNIRTog cmV0dXJuICJGQ19DQUNIRSI7CisgICAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuICJVTktOT1dO IjsKKyAgICB9Cit9CisKKy8qIFVTQUdFOiAgZnByaW50ZiAoc3RkZXJyLCAiQUNUSU9OLVRZUEUg KCVzKSIsIG1jX2VuZ2luZV90eXBlX3RvX3N0cmluZyAoYXJnKSk7ICovCitjaGFyICoKK21jX2Vu Z2luZV90eXBlX3RvX3N0cmluZyAoZW51bSBtY19lbmdpbmVfdHlwZSBhY3Rpb25fdHlwZSkKK3sK KyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAgICB7CisgICAgICBjYXNlIE1VTFRJUExFX0NVUlNP UlM6IHJldHVybiAiTVVMVElQTEVfQ1VSU09SUyI7CisgICAgICBjYXNlIEhPUklaT05UQUxfUlVM RVI6IHJldHVybiAiSE9SSVpPTlRBTF9SVUxFUiI7CisgICAgICBjYXNlIFZFUlRJQ0FMX1JVTEVS OiByZXR1cm4gIlZFUlRJQ0FMX1JVTEVSIjsKKyAgICAgIGNhc2UgRklMTF9DT0xVTU46IHJldHVy biAiRklMTF9DT0xVTU4iOworICAgICAgY2FzZSBDVVJTT1JfSU5ESUNBVE9SOiByZXR1cm4gIkNV UlNPUl9JTkRJQ0FUT1IiOworICAgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAiVU5LTk9XTiI7 CisgICAgfQorfQorCisvKiBVU0FHRTogIGZwcmludGYgKHN0ZGVyciwgIkZST01fV0hFUkUgKCVz KSIsIG1jX2RyYXdfcm93X3R5cGVfdG9fc3RyaW5nIChhcmcpKTsgKi8KK2NoYXIgKgorbWNfZHJh d19yb3dfdHlwZV90b19zdHJpbmcgKGVudW0gbWNfZHJhd19yb3dfdHlwZSBmcm9tX3doZXJlKQor eworICBzd2l0Y2ggKGZyb21fd2hlcmUpCisgICAgeworICAgICAgY2FzZSBOT1dIRVJFOiByZXR1 cm4gIk5PV0hFUkUiOworICAgICAgY2FzZSBTQ1JJQkVfT05FOiByZXR1cm4gIlNDUklCRV9PTkUi OworICAgICAgY2FzZSBTQ1JJQkVfVFdPOiByZXR1cm4gIlNDUklCRV9UV08iOworICAgICAgY2Fz ZSBTQ1JJQkVfVEhSRUU6IHJldHVybiAiU0NSSUJFX1RIUkVFIjsKKyAgICAgIGNhc2UgU0tJUFBF RDogcmV0dXJuICJTS0lQUEVEIjsKKyAgICAgIGNhc2UgUE9TVF9DSEFOR0VEOiByZXR1cm4gIlBP U1RfQ0hBTkdFRCI7CisgICAgICBjYXNlIFVOQ0hBTkdFRDogcmV0dXJuICJVTkNIQU5HRUQiOwor ICAgICAgY2FzZSBTRVRfQ1VSU09SX09ORTogcmV0dXJuICJTRVRfQ1VSU09SX09ORSI7CisgICAg ICBjYXNlIFNFVF9DVVJTT1JfVFdPOiByZXR1cm4gIlNFVF9DVVJTT1JfVFdPIjsKKyAgICAgIGRl ZmF1bHQ6CisgICAgICByZXR1cm4gIlVOS05PV04iOworICAgIH0KK30KKworLyogVVNBR0U6ICBm cHJpbnRmIChzdGRlcnIsICJGUk9NX1dIRVJFICglcykiLCBtY19kcmF3X3Jvd190eXBlX3RvX3N0 cmluZyAoYXJnKSk7ICovCitjaGFyICoKK21jX3JlZHJhd19yb3dfdHlwZV90b19zdHJpbmcgKGVu dW0gbWNfcmVkcmF3X3Jvd190eXBlIGZyb21fd2hlcmUpCit7CisgIHN3aXRjaCAoZnJvbV93aGVy ZSkKKyAgICB7CisgICAgICBjYXNlIFVQREFURV9XSU5ET1dfX1JFRFJBV19PVkVSTEFQUEVEX1JP V1M6IHJldHVybiAiVVBEQVRFX1dJTkRPV19fUkVEUkFXX09WRVJMQVBQRURfUk9XUyI7CisgICAg ICBjYXNlIEdVSV9JTlNFUlRfR0xZUEhTOiByZXR1cm4gIkdVSV9JTlNFUlRfR0xZUEhTIjsKKyAg ICAgIGNhc2UgR1VJX0ZJWF9PVkVSTEFQUElOR19BUkVBOiByZXR1cm4gIkdVSV9GSVhfT1ZFUkxB UFBJTkdfQVJFQSI7CisgICAgICBjYXNlIERSQVdfUk9XX1dJVEhfTU9VU0VfRkFDRTogcmV0dXJu ICJEUkFXX1JPV19XSVRIX01PVVNFX0ZBQ0UiOworICAgICAgY2FzZSBFWFBPU0VfQVJFQV9PTkU6 IHJldHVybiAiRVhQT1NFX0FSRUFfT05FIjsKKyAgICAgIGNhc2UgRVhQT1NFX0FSRUFfVFdPOiBy ZXR1cm4gIkVYUE9TRV9BUkVBX1RXTyI7CisgICAgICBjYXNlIEVYUE9TRV9MSU5FOiByZXR1cm4g IkVYUE9TRV9MSU5FIjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gIlVOS05PV04iOwor ICAgIH0KK30KKwordm9pZAorbWNfY2FjaGVfaW5zcGVjdG9yIChzdHJ1Y3Qgd2luZG93ICp3LCBz dHJ1Y3QgbWNfbWF0cml4IG1hdHJpeCkKK3sKKyAgaW50IHZwb3NfYWxsb2NhdGVkID0gdy0+bWNf bWF0cml4LnZwb3NfYWxsb2NhdGVkOworICBpbnQgdnBvc191c2VkID0gdy0+bWNfbWF0cml4LnZw b3NfdXNlZDsKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICBtYXRyaXgudnBvc19hbGxvY2F0ZWQg KCVkKSB8IG1hdHJpeC52cG9zX3VzZWQgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICBtY193 aW5kb3cgKHcpLCB2cG9zX2FsbG9jYXRlZCwgdnBvc191c2VkKTsKKyAgZm9yIChlbnVtIG1jX2Nh Y2hlX3R5cGUgY2FjaGVfdHlwZSA9IE1DX0NBQ0hFOworICAgICAgIGNhY2hlX3R5cGUgPCBOT19D QUNIRTsKKyAgICAgICArK2NhY2hlX3R5cGUpCisgICAgeworICAgICAgaW50IGN1cnNvcnNfdXNl ZCA9IHctPm1jX21hdHJpeC5jdXJzb3JzX3VzZWRbY2FjaGVfdHlwZV07CisgICAgICBmcHJpbnRm IChzdGRlcnIsICIgIG1hdHJpeC5jdXJzb3JzX3VzZWRbJXNdICglZClcbiIsCisgICAgICAgICAg ICAgICAgICAgICAgIG1jX2NhY2hlX3R5cGVfdG9fc3RyaW5nIChjYWNoZV90eXBlKSwgY3Vyc29y c191c2VkKTsKKyAgICB9CisgIGZvciAoaW50IHZudGggPSAwOworICAgICAgIHZudGggPCB3LT5t Y19tYXRyaXgudnBvc191c2VkOworICAgICAgICsrdm50aCkKKyAgICB7CisgICAgICBmb3IgKGVu dW0gbWNfY2FjaGVfdHlwZSBjYWNoZV90eXBlID0gTUNfQ0FDSEU7CisgICAgICAgICAgIGNhY2hl X3R5cGUgPCBOT19DQUNIRTsKKyAgICAgICAgICAgKytjYWNoZV90eXBlKQorICAgICAgICB7Cisg ICAgICAgICAgaW50IGNhY2hlX2FsbG9jYXRlZCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNh Y2hlX2FsbG9jYXRlZFtjYWNoZV90eXBlXTsKKyAgICAgICAgICBpbnQgY2FjaGVfdXNlZCA9IHct Pm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlX3VzZWRbY2FjaGVfdHlwZV07CisgICAgICAgICAg ZnByaW50ZiAoc3RkZXJyLCAiICAgIHZudGggKCVkKSB8IGNhY2hlX2FsbG9jYXRlZFslc10gKCVk KSB8IGNhY2hlX3VzZWRbJXNdICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2 bnRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNfY2FjaGVfdHlwZV90b19zdHJpbmcg KGNhY2hlX3R5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfYWxsb2NhdGVk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNfY2FjaGVfdHlwZV90b19zdHJpbmcgKGNh Y2hlX3R5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfdXNlZCk7CisgICAg ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQKK21jX3NldF9sc2xfYmcgKHN0cnVjdCB3aW5kb3cgKncs IGVudW0gZmFjZV9pZCBmYWNlX2lkLCBzdHJ1Y3QgbWNfUkdCICpsc2wpCit7CisgIHN0cnVjdCBm cmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICBzdHJ1Y3QgZmFjZSAqZmFjZTsKKyAgaWYg KCFOSUxQIChWZmFjZV9yZW1hcHBpbmdfYWxpc3QpCisgICAgICAmJiAoZmFjZV9pZCA9PSBERUZB VUxUX0ZBQ0VfSUQgLyogUWRlZmF1bHQgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IE1PREVf TElORV9GQUNFX0lEIC8qIFFtb2RlX2xpbmUgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IE1P REVfTElORV9JTkFDVElWRV9GQUNFX0lEIC8qIFFtb2RlX2xpbmVfaW5hY3RpdmUgKi8KKyAgICAg ICAgICB8fCBmYWNlX2lkID09IEhFQURFUl9MSU5FX0ZBQ0VfSUQgLyogUWhlYWRlcl9saW5lICov CisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBUT09MX0JBUl9GQUNFX0lEIC8qIFF0b29sX2JhciAq LworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gRlJJTkdFX0ZBQ0VfSUQgLyogUWZyaW5nZSAqLwor ICAgICAgICAgIHx8IGZhY2VfaWQgPT0gU0NST0xMX0JBUl9GQUNFX0lEIC8qIFFzY3JvbGxfYmFy ICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBCT1JERVJfRkFDRV9JRCAvKiBRYm9yZGVyICov CisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBDVVJTT1JfRkFDRV9JRCAvKiBRY3Vyc29yICovCisg ICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT1VTRV9GQUNFX0lEIC8qIFFtb3VzZSAqLworICAgICAg ICAgIHx8IGZhY2VfaWQgPT0gTUVOVV9GQUNFX0lEIC8qIFFtZW51ICovCisgICAgICAgICAgfHwg ZmFjZV9pZCA9PSBXSU5ET1dfRElWSURFUl9GQUNFX0lEIC8qIFF3aW5kb3dfZGl2aWRlciAqLwor ICAgICAgICAgIHx8IGZhY2VfaWQgPT0gV0lORE9XX0RJVklERVJfRklSU1RfUElYRUxfRkFDRV9J RCAvKiBRd2luZG93X2RpdmlkZXJfZmlyc3RfcGl4ZWwgKi8KKyAgICAgICAgICB8fCBmYWNlX2lk ID09IFdJTkRPV19ESVZJREVSX0xBU1RfUElYRUxfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXJf bGFzdF9waXhlbCAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gVkVSVElDQUxfQk9SREVSX0ZB Q0VfSUQgLyogUXZlcnRpY2FsX2JvcmRlciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gSU5U RVJOQUxfQk9SREVSX0ZBQ0VfSUQpKSAvKiBRaW50ZXJuYWxfYm9yZGVyICovCisgICAgZmFjZSA9 IEZBQ0VfRlJPTV9JRCAoZiwgbG9va3VwX2Jhc2ljX2ZhY2UgKHcsIGYsIGZhY2VfaWQpKTsKKyAg ICBlbHNlCisgICAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChmLCBmYWNlX2lkKTsKKyAgTGlzcF9P YmplY3QgY29sb3IgPSAoZmFjZSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgID8gZmFj ZS0+bGZhY2VbTEZBQ0VfQkFDS0dST1VORF9JTkRFWF0KKyAgICAgICAgICAgICAgICAgICAgICA6 IGJ1aWxkX3N0cmluZyAoIk9yYW5nZVJlZCIpOworICBtY194d19jb2xvcl92YWx1ZXMgKHcsIGNv bG9yLCBsc2wpOworfQorCit2b2lkCittY19zZXRfZXNzZW50aWFscyAoc3RydWN0IHdpbmRvdyAq dywgc3RydWN0IG1jX2Vzc2VudGlhbHMgKmVzc2VudGlhbHMpCit7CisgIGlmICghQlVGRkVSUCAo dy0+Y29udGVudHMpKQorICAgIHJldHVybjsKKyAgaWYgKE5JTFAgKEJWQVIgKFhCVUZGRVIgKHct PmNvbnRlbnRzKSwgbWNfY29uZikpCisgICAgICAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5j b250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgJiYgTklMUCAoQlZBUiAoWEJVRkZFUiAody0+ Y29udGVudHMpLCBmY192aXNpYmxlKSkpCisgICAgcmV0dXJuOworICBzdHJ1Y3QgZnJhbWUgKmYg PSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgZXNzZW50aWFscy0+YWN0aXZlX3AgPSAodyA9PSBYV0lO RE9XIChmLT5zZWxlY3RlZF93aW5kb3cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGYg PT0gRlJBTUVfRElTUExBWV9JTkZPIChmKS0+aGlnaGxpZ2h0X2ZyYW1lKTsKKyAgc3RydWN0IGJ1 ZmZlciAqYiA9IFhCVUZGRVIgKHctPmNvbnRlbnRzKTsKKyAgc3RydWN0IGJ1ZmZlciAqb2xkX2J1 ZmZlciA9IE5VTEw7CisgIHB0cmRpZmZfdCBvcG9pbnQgPSAodyA9PSBYV0lORE9XIChzZWxlY3Rl ZF93aW5kb3cpKQorICAgICAgICAgICAgICAgICAgICAgPyBQVAorICAgICAgICAgICAgICAgICAg ICAgOiBYRklYTlVNIChGbWFya2VyX3Bvc2l0aW9uICh3LT5wb2ludG0pKTsKKyAgcHRyZGlmZl90 IGN1cnJlbnRfY29sID0gbWNfY3VycmVudF9jb2x1bW4gKHcsIG9wb2ludCk7CisgIGludCBmcmFt ZV9jaGFyX3dpZHRoID0gRlJBTUVfQ09MVU1OX1dJRFRIIChmKTsKKyAgYm9vbCBmaWxsX2NvbHVt bl9wID0gIU5JTFAgKEJWQVIgKGIsIGZpbGxfY29sdW1uKSk7CisgIGludCBmaWxsX2NvbCA9IFhG SVhOVU0gKEJWQVIgKGIsIGZpbGxfY29sdW1uKSk7CisgIGludCBoc2NsX3ggPSB3LT5oc2Nyb2xs ICogZnJhbWVfY2hhcl93aWR0aDsKKyAgaWYgKGIgIT0gY3VycmVudF9idWZmZXIpCisgICAgewor ICAgICAgb2xkX2J1ZmZlciA9IGN1cnJlbnRfYnVmZmVyOworICAgICAgc2V0X2J1ZmZlcl9pbnRl cm5hbCAoYik7CisgICAgfQorICBlc3NlbnRpYWxzLT56diA9IFpWOworICBlc3NlbnRpYWxzLT56 dl9ieXRlID0gWlZfQllURTsKKyAgZXNzZW50aWFscy0+ZmNfeCA9IChmaWxsX2NvbHVtbl9wCisg ICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKFZkaXNwbGF5X2xpbmVfbnVtYmVycykpCisg ICAgICAgICAgICAgICAgICAgICAgID8gKGZpbGxfY29sICogZnJhbWVfY2hhcl93aWR0aCkgKyB3 LT5tYy5sbnVtX3BpeGVsX3dpZHRoIC0gaHNjbF94CisgICAgICAgICAgICAgICAgICAgICA6IChm aWxsX2NvbHVtbl9wCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBOSUxQIChWZGlzcGxheV9s aW5lX251bWJlcnMpKQorICAgICAgICAgICAgICAgICAgICAgICA/IChmaWxsX2NvbCAqIGZyYW1l X2NoYXJfd2lkdGgpIC0gaHNjbF94CisgICAgICAgICAgICAgICAgICAgICA6IDA7CisgIGlmIChv bGRfYnVmZmVyKQorICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKG9sZF9idWZmZXIpOworICBlbnVt IGZhY2VfaWQgZmlsbF9jb2x1bW5fcHJlX3p2X2ZhY2VfaWQgPQorICAgICghZXNzZW50aWFscy0+ YWN0aXZlX3AKKyAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNf aW5hY3RpdmVfd2luZG93cykpCisgICAgICYmIE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRl bnRzKSwgY3Jvc3NoYWlycykpKQorICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50 ZXJuICgiZmMtaW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgdHJ1ZSkKKyAgICA6ICghZXNzZW50aWFs cy0+YWN0aXZlX3AKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMp LCBmY19pbmFjdGl2ZV93aW5kb3dzKSkKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAo dy0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hf dmVydGljYWxfcnVsZXIpKQorICAgICAgICYmIHctPmN1cnNvci54ID09IGVzc2VudGlhbHMtPmZj X3gpCisgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCJmYy1vcG9pbnQt aW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgdHJ1ZSkKKyAgICA6IChlc3NlbnRpYWxzLT5hY3RpdmVf cAorICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFp cnMpKQorICAgICAgICYmICFOSUxQIChCVkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisgICAg ICAgJiYgdy0+Y3Vyc29yLnggPT0gZXNzZW50aWFscy0+ZmNfeCkKKyAgICAgID8gbG9va3VwX25h bWVkX2ZhY2UgKHcsIGYsIGludGVybiAoImZjLW9wb2ludC1wcmUtenYtZmFjZSIpLCB0cnVlKQor ICAgIDogKCFlc3NlbnRpYWxzLT5hY3RpdmVfcAorICAgICAgICYmICFOSUxQIChCVkFSIChYQlVG RkVSICh3LT5jb250ZW50cyksIGZjX2luYWN0aXZlX3dpbmRvd3MpKQorICAgICAgICYmICFOSUxQ IChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgICYmICFO SUxQIChCVkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgJiYgdy0+Y3Vyc29yLngg IT0gZXNzZW50aWFscy0+ZmNfeCkKKyAgICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGlu dGVybiAoImZjLWluYWN0aXZlLXByZS16di1mYWNlIiksIHRydWUpCisgICAgOiAoZXNzZW50aWFs cy0+YWN0aXZlX3AKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMp LCBjcm9zc2hhaXJzKSkKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfdmVydGljYWxfcnVs ZXIpKQorICAgICAgICYmIHctPmN1cnNvci54ICE9IGVzc2VudGlhbHMtPmZjX3gpCisgICAgICA/ IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCJmYy1wcmUtenYtZmFjZSIpLCB0cnVl KQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoImZjLXByZS16di1mYWNl IiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqZmlsbF9jb2x1bW5fcHJlX3p2X2ZhY2UgPSBGQUNF X0ZST01fSUQgKGYsIGZpbGxfY29sdW1uX3ByZV96dl9mYWNlX2lkKTsKKyAgTGlzcF9PYmplY3Qg ZmlsbF9jb2x1bW5fcHJlX3p2X2NvbG9yID0gZmlsbF9jb2x1bW5fcHJlX3p2X2ZhY2UtPmxmYWNl W0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOworICBzdHJ1Y3QgbWNfUkdCIGZjX3ByZV96dl9mZzsK KyAgbWNfeHdfY29sb3JfdmFsdWVzICh3LCBmaWxsX2NvbHVtbl9wcmVfenZfY29sb3IsICZmY19w cmVfenZfZmcpOworICBlc3NlbnRpYWxzLT5mY19mZ1tQUkVfWlZdLnJlZCA9IGZjX3ByZV96dl9m Zy5yZWQ7CisgIGVzc2VudGlhbHMtPmZjX2ZnW1BSRV9aVl0uZ3JlZW4gPSBmY19wcmVfenZfZmcu Z3JlZW47CisgIGVzc2VudGlhbHMtPmZjX2ZnW1BSRV9aVl0uYmx1ZSA9IGZjX3ByZV96dl9mZy5i bHVlOworICBlbnVtIGZhY2VfaWQgZmlsbF9jb2x1bW5fYXRfenZfZmFjZV9pZCA9CisgICAgKCFl c3NlbnRpYWxzLT5hY3RpdmVfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29u dGVudHMpLCBmY19pbmFjdGl2ZV93aW5kb3dzKSkKKyAgICAgJiYgTklMUCAoQlZBUiAoWEJVRkZF UiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkpCisgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNl ICh3LCBmLCBpbnRlcm4gKCJmYy1pbmFjdGl2ZS1hdC16di1mYWNlIiksIHRydWUpCisgICAgOiAo IWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHct PmNvbnRlbnRzKSwgZmNfaW5hY3RpdmVfd2luZG93cykpCisgICAgICAgJiYgIU5JTFAgKEJWQVIg KFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAgJiYgIU5JTFAgKEJW QVIgKGIsIGNoX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAmJiB3LT5jdXJzb3IueCA9PSBlc3Nl bnRpYWxzLT5mY194KQorICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgi ZmMtb3BvaW50LWluYWN0aXZlLWF0LXp2LWZhY2UiKSwgdHJ1ZSkKKyAgICA6IChlc3NlbnRpYWxz LT5hY3RpdmVfcAorICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyks IGNyb3NzaGFpcnMpKQorICAgICAgICYmICFOSUxQIChCVkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxl cikpCisgICAgICAgJiYgdy0+Y3Vyc29yLnggPT0gZXNzZW50aWFscy0+ZmNfeCkKKyAgICAgID8g bG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoImZjLW9wb2ludC1hdC16di1mYWNlIiks IHRydWUpCisgICAgOiAoIWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICAgJiYgIU5JTFAgKEJW QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfaW5hY3RpdmVfd2luZG93cykpCisgICAgICAg JiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAg ICAgJiYgIU5JTFAgKEJWQVIgKGIsIGNoX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAmJiB3LT5j dXJzb3IueCAhPSBlc3NlbnRpYWxzLT5mY194KQorICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAo dywgZiwgaW50ZXJuICgiZmMtaW5hY3RpdmUtYXQtenYtZmFjZSIpLCB0cnVlKQorICAgIDogKGVz c2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNv bnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIGNoX3ZlcnRp Y2FsX3J1bGVyKSkKKyAgICAgICAmJiB3LT5jdXJzb3IueCAhPSBlc3NlbnRpYWxzLT5mY194KQor ICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiZmMtYXQtenYtZmFjZSIp LCB0cnVlKQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoImZjLWF0LXp2 LWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNlICpmaWxsX2NvbHVtbl9hdF96dl9mYWNlID0g RkFDRV9GUk9NX0lEIChmLCBmaWxsX2NvbHVtbl9hdF96dl9mYWNlX2lkKTsKKyAgTGlzcF9PYmpl Y3QgZmlsbF9jb2x1bW5fYXRfenZfY29sb3IgPSBmaWxsX2NvbHVtbl9hdF96dl9mYWNlLT5sZmFj ZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgc3RydWN0IG1jX1JHQiBmY19hdF96dl9mZzsK KyAgbWNfeHdfY29sb3JfdmFsdWVzICh3LCBmaWxsX2NvbHVtbl9hdF96dl9jb2xvciwgJmZjX2F0 X3p2X2ZnKTsKKyAgZXNzZW50aWFscy0+ZmNfZmdbQVRfWlZdLnJlZCA9IGZjX2F0X3p2X2ZnLnJl ZDsKKyAgZXNzZW50aWFscy0+ZmNfZmdbQVRfWlZdLmdyZWVuID0gZmNfYXRfenZfZmcuZ3JlZW47 CisgIGVzc2VudGlhbHMtPmZjX2ZnW0FUX1pWXS5ibHVlID0gZmNfYXRfenZfZmcuYmx1ZTsKKyAg ZW51bSBmYWNlX2lkIGZpbGxfY29sdW1uX3Bvc3RfenZfZmFjZV9pZCA9CisgICAgKCFlc3NlbnRp YWxzLT5hY3RpdmVfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMp LCBmY19pbmFjdGl2ZV93aW5kb3dzKSkKKyAgICAgJiYgTklMUCAoQlZBUiAoWEJVRkZFUiAody0+ Y29udGVudHMpLCBjcm9zc2hhaXJzKSkpCisgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBm LCBpbnRlcm4gKCJmYy1pbmFjdGl2ZS1wb3N0LXp2LWZhY2UiKSwgdHJ1ZSkKKyAgICA6ICghZXNz ZW50aWFscy0+YWN0aXZlX3AKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29u dGVudHMpLCBmY19pbmFjdGl2ZV93aW5kb3dzKSkKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJV RkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAmJiAhTklMUCAoQlZBUiAo YiwgY2hfdmVydGljYWxfcnVsZXIpKQorICAgICAgICYmIHctPmN1cnNvci54ID09IGVzc2VudGlh bHMtPmZjX3gpCisgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCJmYy1v cG9pbnQtaW5hY3RpdmUtcG9zdC16di1mYWNlIiksIHRydWUpCisgICAgOiAoZXNzZW50aWFscy0+ YWN0aXZlX3AKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBj cm9zc2hhaXJzKSkKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfdmVydGljYWxfcnVsZXIp KQorICAgICAgICYmIHctPmN1cnNvci54ID09IGVzc2VudGlhbHMtPmZjX3gpCisgICAgICA/IGxv b2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCJmYy1vcG9pbnQtcG9zdC16di1mYWNlIiks IHRydWUpCisgICAgOiAoIWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICAgJiYgIU5JTFAgKEJW QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfaW5hY3RpdmVfd2luZG93cykpCisgICAgICAg JiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAg ICAgJiYgIU5JTFAgKEJWQVIgKGIsIGNoX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAmJiB3LT5j dXJzb3IueCAhPSBlc3NlbnRpYWxzLT5mY194KQorICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAo dywgZiwgaW50ZXJuICgiZmMtaW5hY3RpdmUtcG9zdC16di1mYWNlIiksIHRydWUpCisgICAgOiAo ZXNzZW50aWFscy0+YWN0aXZlX3AKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+ Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfdmVy dGljYWxfcnVsZXIpKQorICAgICAgICYmIHctPmN1cnNvci54ICE9IGVzc2VudGlhbHMtPmZjX3gp CisgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCJmYy1wb3N0LXp2LWZh Y2UiKSwgdHJ1ZSkKKyAgICA6IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCJmYy1w b3N0LXp2LWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNlICpmaWxsX2NvbHVtbl9wb3N0X3p2 X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZpbGxfY29sdW1uX3Bvc3RfenZfZmFjZV9pZCk7Cisg IExpc3BfT2JqZWN0IGZpbGxfY29sdW1uX3Bvc3RfenZfY29sb3IgPSBmaWxsX2NvbHVtbl9wb3N0 X3p2X2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOworICBzdHJ1Y3QgbWNfUkdC IGZjX3Bvc3RfenZfZmc7CisgIG1jX3h3X2NvbG9yX3ZhbHVlcyAodywgZmlsbF9jb2x1bW5fcG9z dF96dl9jb2xvciwgJmZjX3Bvc3RfenZfZmcpOworICBlc3NlbnRpYWxzLT5mY19mZ1tQT1NUX1pW XS5yZWQgPSBmY19wb3N0X3p2X2ZnLnJlZDsKKyAgZXNzZW50aWFscy0+ZmNfZmdbUE9TVF9aVl0u Z3JlZW4gPSBmY19wb3N0X3p2X2ZnLmdyZWVuOworICBlc3NlbnRpYWxzLT5mY19mZ1tQT1NUX1pW XS5ibHVlID0gZmNfcG9zdF96dl9mZy5ibHVlOworICBlbnVtIGZhY2VfaWQgZXZlbl9wcmVfenZf ZmFjZV9pZCA9CisgICAgKCFlc3NlbnRpYWxzLT5hY3RpdmVfcAorICAgICAmJiAhTklMUCAoQlZB UiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjaF9pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgPyBs b29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1ldmVuLWluYWN0aXZlLXByZS16di1m YWNlIiksIHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1l dmVuLXByZS16di1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqZXZlbl9wcmVfenZfZmFj ZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZXZlbl9wcmVfenZfZmFjZV9pZCk7CisgIExpc3BfT2JqZWN0 IGV2ZW5fcHJlX3p2X2NvbG9yID0gZXZlbl9wcmVfenZfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdS T1VORF9JTkRFWF07CisgIHN0cnVjdCBtY19SR0IgZXZlbl9wcmVfenZfZmc7CisgIG1jX3h3X2Nv bG9yX3ZhbHVlcyAodywgZXZlbl9wcmVfenZfY29sb3IsICZldmVuX3ByZV96dl9mZyk7CisgIGVu dW0gZmFjZV9pZCBldmVuX2F0X3p2X2ZhY2VfaWQgPQorICAgICghZXNzZW50aWFscy0+YWN0aXZl X3AKKyAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfaW5hY3Rp dmVfd2luZG93cykpKQorICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIist ZXZlbi1pbmFjdGl2ZS1hdC16di1mYWNlIiksIHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFj ZSAodywgZiwgaW50ZXJuICgiKy1ldmVuLWF0LXp2LWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBm YWNlICpldmVuX2F0X3p2X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGV2ZW5fYXRfenZfZmFjZV9p ZCk7CisgIExpc3BfT2JqZWN0IGV2ZW5fYXRfenZfY29sb3IgPSBldmVuX2F0X3p2X2ZhY2UtPmxm YWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOworICBzdHJ1Y3QgbWNfUkdCIGV2ZW5fYXRfenZf Zmc7CisgIG1jX3h3X2NvbG9yX3ZhbHVlcyAodywgZXZlbl9hdF96dl9jb2xvciwgJmV2ZW5fYXRf enZfZmcpOworICBlbnVtIGZhY2VfaWQgZXZlbl9wb3N0X3p2X2ZhY2VfaWQgPQorICAgICghZXNz ZW50aWFscy0+YWN0aXZlX3AKKyAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRl bnRzKSwgY2hfaW5hY3RpdmVfd2luZG93cykpKQorICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcs IGYsIGludGVybiAoIistZXZlbi1pbmFjdGl2ZS1wb3N0LXp2LWZhY2UiKSwgdHJ1ZSkKKyAgICA6 IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLWV2ZW4tcG9zdC16di1mYWNlIiks IHRydWUpOworICBzdHJ1Y3QgZmFjZSAqZXZlbl9wb3N0X3p2X2ZhY2UgPSBGQUNFX0ZST01fSUQg KGYsIGV2ZW5fcG9zdF96dl9mYWNlX2lkKTsKKyAgTGlzcF9PYmplY3QgZXZlbl9wb3N0X3p2X2Nv bG9yID0gZXZlbl9wb3N0X3p2X2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOwor ICBzdHJ1Y3QgbWNfUkdCIGV2ZW5fcG9zdF96dl9mZzsKKyAgbWNfeHdfY29sb3JfdmFsdWVzICh3 LCBldmVuX3Bvc3RfenZfY29sb3IsICZldmVuX3Bvc3RfenZfZmcpOworICBlbnVtIGZhY2VfaWQg b2RkX3ByZV96dl9mYWNlX2lkID0KKyAgICAoIWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICYm ICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNoX2luYWN0aXZlX3dpbmRvd3Mp KSkKKyAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW9kZC1pbmFjdGl2 ZS1wcmUtenYtZmFjZSIpLCB0cnVlKQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGlu dGVybiAoIistb2RkLXByZS16di1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqb2RkX3By ZV96dl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBvZGRfcHJlX3p2X2ZhY2VfaWQpOworICBMaXNw X09iamVjdCBvZGRfcHJlX3p2X2NvbG9yID0gb2RkX3ByZV96dl9mYWNlLT5sZmFjZVtMRkFDRV9G T1JFR1JPVU5EX0lOREVYXTsKKyAgc3RydWN0IG1jX1JHQiBvZGRfcHJlX3p2X2ZnOworICBtY194 d19jb2xvcl92YWx1ZXMgKHcsIG9kZF9wcmVfenZfY29sb3IsICZvZGRfcHJlX3p2X2ZnKTsKKyAg ZW51bSBmYWNlX2lkIG9kZF9hdF96dl9mYWNlX2lkID0KKyAgICAoIWVzc2VudGlhbHMtPmFjdGl2 ZV9wCisgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNoX2luYWN0 aXZlX3dpbmRvd3MpKSkKKyAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIr LW9kZC1pbmFjdGl2ZS1hdC16di1mYWNlIiksIHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFj ZSAodywgZiwgaW50ZXJuICgiKy1vZGQtYXQtenYtZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0IGZh Y2UgKm9kZF9hdF96dl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBvZGRfYXRfenZfZmFjZV9pZCk7 CisgIExpc3BfT2JqZWN0IG9kZF9hdF96dl9jb2xvciA9IG9kZF9hdF96dl9mYWNlLT5sZmFjZVtM RkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgc3RydWN0IG1jX1JHQiBvZGRfYXRfenZfZmc7Cisg IG1jX3h3X2NvbG9yX3ZhbHVlcyAodywgb2RkX2F0X3p2X2NvbG9yLCAmb2RkX2F0X3p2X2ZnKTsK KyAgZW51bSBmYWNlX2lkIG9kZF9wb3N0X3p2X2ZhY2VfaWQgPQorICAgICghZXNzZW50aWFscy0+ YWN0aXZlX3AKKyAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hf aW5hY3RpdmVfd2luZG93cykpKQorICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVy biAoIistb2RkLWluYWN0aXZlLXBvc3QtenYtZmFjZSIpLCB0cnVlKQorICAgIDogbG9va3VwX25h bWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb2RkLXBvc3QtenYtZmFjZSIpLCB0cnVlKTsKKyAg c3RydWN0IGZhY2UgKm9kZF9wb3N0X3p2X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIG9kZF9wb3N0 X3p2X2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBvZGRfcG9zdF96dl9jb2xvciA9IG9kZF9wb3N0 X3p2X2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOworICBzdHJ1Y3QgbWNfUkdC IG9kZF9wb3N0X3p2X2ZnOworICBtY194d19jb2xvcl92YWx1ZXMgKHcsIG9kZF9wb3N0X3p2X2Nv bG9yLCAmb2RkX3Bvc3RfenZfZmcpOworICBlbnVtIGZhY2VfaWQgcG9zdF9maWxsX3ByZV96dl9m YWNlX2lkID0KKyAgICAoIWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICYmICFOSUxQIChCVkFS IChYQlVGRkVSICh3LT5jb250ZW50cyksIGNoX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICA/IGxv b2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXBvc3QtZmlsbC1pbmFjdGl2ZS1wcmUt enYtZmFjZSIpLCB0cnVlKQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAo IistcG9zdC1maWxsLXByZS16di1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqcG9zdF9m aWxsX3ByZV96dl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBwb3N0X2ZpbGxfcHJlX3p2X2ZhY2Vf aWQpOworICBMaXNwX09iamVjdCBwb3N0X2ZpbGxfcHJlX3p2X2NvbG9yID0gcG9zdF9maWxsX3By ZV96dl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgc3RydWN0IG1jX1JH QiBwb3N0X2ZpbGxfcHJlX3p2X2ZnOworICBtY194d19jb2xvcl92YWx1ZXMgKHcsIHBvc3RfZmls bF9wcmVfenZfY29sb3IsICZwb3N0X2ZpbGxfcHJlX3p2X2ZnKTsKKyAgZW51bSBmYWNlX2lkIHBv c3RfZmlsbF9hdF96dl9mYWNlX2lkID0KKyAgICAoIWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAg ICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNoX2luYWN0aXZlX3dpbmRv d3MpKSkKKyAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXBvc3QtZmls bC1pbmFjdGl2ZS1hdC16di1mYWNlIiksIHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAo dywgZiwgaW50ZXJuICgiKy1wb3N0LWZpbGwtYXQtenYtZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0 IGZhY2UgKnBvc3RfZmlsbF9hdF96dl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBwb3N0X2ZpbGxf YXRfenZfZmFjZV9pZCk7CisgIExpc3BfT2JqZWN0IHBvc3RfZmlsbF9hdF96dl9jb2xvciA9IHBv c3RfZmlsbF9hdF96dl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgc3Ry dWN0IG1jX1JHQiBwb3N0X2ZpbGxfYXRfenZfZmc7CisgIG1jX3h3X2NvbG9yX3ZhbHVlcyAodywg cG9zdF9maWxsX2F0X3p2X2NvbG9yLCAmcG9zdF9maWxsX2F0X3p2X2ZnKTsKKyAgZW51bSBmYWNl X2lkIHBvc3RfZmlsbF9wb3N0X3p2X2ZhY2VfaWQgPQorICAgICghZXNzZW50aWFscy0+YWN0aXZl X3AKKyAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfaW5hY3Rp dmVfd2luZG93cykpKQorICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIist cG9zdC1maWxsLWluYWN0aXZlLXBvc3QtenYtZmFjZSIpLCB0cnVlKQorICAgIDogbG9va3VwX25h bWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcG9zdC1maWxsLXBvc3QtenYtZmFjZSIpLCB0cnVl KTsKKyAgc3RydWN0IGZhY2UgKnBvc3RfZmlsbF9wb3N0X3p2X2ZhY2UgPSBGQUNFX0ZST01fSUQg KGYsIHBvc3RfZmlsbF9wb3N0X3p2X2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBwb3N0X2ZpbGxf cG9zdF96dl9jb2xvciA9IHBvc3RfZmlsbF9wb3N0X3p2X2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVH Uk9VTkRfSU5ERVhdOworICBzdHJ1Y3QgbWNfUkdCIHBvc3RfZmlsbF9wb3N0X3p2X2ZnOworICBt Y194d19jb2xvcl92YWx1ZXMgKHcsIHBvc3RfZmlsbF9wb3N0X3p2X2NvbG9yLCAmcG9zdF9maWxs X3Bvc3RfenZfZmcpOworICBlbnVtIGZhY2VfaWQgc3BlY2lhbF9jaGFyX2ZhY2VfaWQgPQorICAg IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXNwZWNpYWwtY2hhcmFjdGVyLWZh Y2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNlICpzcGVjaWFsX2NoYXJfZmFjZSA9IEZBQ0VfRlJP TV9JRCAoZiwgc3BlY2lhbF9jaGFyX2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBzcGVjaWFsX2No YXJfZmdfY29sb3IgPSBzcGVjaWFsX2NoYXJfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9J TkRFWF07CisgIHN0cnVjdCBtY19SR0Igc3BfZm9yZWdyb3VuZDsKKyAgbWNfeHdfY29sb3JfdmFs dWVzICh3LCBzcGVjaWFsX2NoYXJfZmdfY29sb3IsICZzcF9mb3JlZ3JvdW5kKTsKKyAgZXNzZW50 aWFscy0+c3BfZmcucmVkID0gc3BfZm9yZWdyb3VuZC5yZWQ7CisgIGVzc2VudGlhbHMtPnNwX2Zn LmdyZWVuID0gc3BfZm9yZWdyb3VuZC5ncmVlbjsKKyAgZXNzZW50aWFscy0+c3BfZmcuYmx1ZSA9 IHNwX2ZvcmVncm91bmQuYmx1ZTsKKyAgLyogcmVkICovCisgIGlmICgoIWZpbGxfY29sdW1uX3AK KyAgICAgICAmJiBjdXJyZW50X2NvbCAlIDIgIT0gMCkKKyAgICAgIHx8IChmaWxsX2NvbHVtbl9w CisgICAgICAgICAgJiYgY3VycmVudF9jb2wgJSAyICE9IDAKKyAgICAgICAgICAmJiBjdXJyZW50 X2NvbCA8PSBmaWxsX2NvbCkpCisgICAgeworICAgICAgZXNzZW50aWFscy0+Y2hfZmdbUFJFX1pW XS5yZWQgPSBvZGRfcHJlX3p2X2ZnLnJlZDsKKyAgICAgIGVzc2VudGlhbHMtPmNoX2ZnW1BSRV9a Vl0uZ3JlZW4gPSBvZGRfcHJlX3p2X2ZnLmdyZWVuOworICAgICAgZXNzZW50aWFscy0+Y2hfZmdb UFJFX1pWXS5ibHVlID0gb2RkX3ByZV96dl9mZy5ibHVlOworICAgICAgZXNzZW50aWFscy0+Y2hf ZmdbQVRfWlZdLnJlZCA9IG9kZF9hdF96dl9mZy5yZWQ7CisgICAgICBlc3NlbnRpYWxzLT5jaF9m Z1tBVF9aVl0uZ3JlZW4gPSBvZGRfYXRfenZfZmcuZ3JlZW47CisgICAgICBlc3NlbnRpYWxzLT5j aF9mZ1tBVF9aVl0uYmx1ZSA9IG9kZF9hdF96dl9mZy5ibHVlOworICAgICAgZXNzZW50aWFscy0+ Y2hfZmdbUE9TVF9aVl0ucmVkID0gb2RkX3Bvc3RfenZfZmcucmVkOworICAgICAgZXNzZW50aWFs cy0+Y2hfZmdbUE9TVF9aVl0uZ3JlZW4gPSBvZGRfcG9zdF96dl9mZy5ncmVlbjsKKyAgICAgIGVz c2VudGlhbHMtPmNoX2ZnW1BPU1RfWlZdLmJsdWUgPSBvZGRfcG9zdF96dl9mZy5ibHVlOworICAg IH0KKyAgICAvKiB5ZWxsb3cgKi8KKyAgICBlbHNlIGlmICgoIWZpbGxfY29sdW1uX3AKKyAgICAg ICAgICAgICAgJiYgY3VycmVudF9jb2wgJSAyID09IDApCisgICAgICAgICAgICAgfHwgKGZpbGxf Y29sdW1uX3AKKyAgICAgICAgICAgICAgICAgJiYgY3VycmVudF9jb2wgJSAyID09IDAKKyAgICAg ICAgICAgICAgICAgJiYgY3VycmVudF9jb2wgPD0gZmlsbF9jb2wpKQorICAgICAgeworICAgICAg ICBlc3NlbnRpYWxzLT5jaF9mZ1tQUkVfWlZdLnJlZCA9IGV2ZW5fcHJlX3p2X2ZnLnJlZDsKKyAg ICAgICAgZXNzZW50aWFscy0+Y2hfZmdbUFJFX1pWXS5ncmVlbiA9IGV2ZW5fcHJlX3p2X2ZnLmdy ZWVuOworICAgICAgICBlc3NlbnRpYWxzLT5jaF9mZ1tQUkVfWlZdLmJsdWUgPSBldmVuX3ByZV96 dl9mZy5ibHVlOworICAgICAgICBlc3NlbnRpYWxzLT5jaF9mZ1tBVF9aVl0ucmVkID0gZXZlbl9h dF96dl9mZy5yZWQ7CisgICAgICAgIGVzc2VudGlhbHMtPmNoX2ZnW0FUX1pWXS5ncmVlbiA9IGV2 ZW5fYXRfenZfZmcuZ3JlZW47CisgICAgICAgIGVzc2VudGlhbHMtPmNoX2ZnW0FUX1pWXS5ibHVl ID0gZXZlbl9hdF96dl9mZy5ibHVlOworICAgICAgICBlc3NlbnRpYWxzLT5jaF9mZ1tQT1NUX1pW XS5yZWQgPSBldmVuX3Bvc3RfenZfZmcucmVkOworICAgICAgICBlc3NlbnRpYWxzLT5jaF9mZ1tQ T1NUX1pWXS5ncmVlbiA9IGV2ZW5fcG9zdF96dl9mZy5ncmVlbjsKKyAgICAgICAgZXNzZW50aWFs cy0+Y2hfZmdbUE9TVF9aVl0uYmx1ZSA9IGV2ZW5fcG9zdF96dl9mZy5ibHVlOworICAgICAgfQor ICAgICAgLyogZ3JlZW4gKi8KKyAgICAgIGVsc2UgaWYgKGZpbGxfY29sdW1uX3AKKyAgICAgICAg ICAgICAgICYmIGN1cnJlbnRfY29sID4gZmlsbF9jb2wpCisgICAgICAgIHsKKyAgICAgICAgICBl c3NlbnRpYWxzLT5jaF9mZ1tQUkVfWlZdLnJlZCA9IHBvc3RfZmlsbF9wcmVfenZfZmcucmVkOwor ICAgICAgICAgIGVzc2VudGlhbHMtPmNoX2ZnW1BSRV9aVl0uZ3JlZW4gPSBwb3N0X2ZpbGxfcHJl X3p2X2ZnLmdyZWVuOworICAgICAgICAgIGVzc2VudGlhbHMtPmNoX2ZnW1BSRV9aVl0uYmx1ZSA9 IHBvc3RfZmlsbF9wcmVfenZfZmcuYmx1ZTsKKyAgICAgICAgICBlc3NlbnRpYWxzLT5jaF9mZ1tB VF9aVl0ucmVkID0gcG9zdF9maWxsX2F0X3p2X2ZnLnJlZDsKKyAgICAgICAgICBlc3NlbnRpYWxz LT5jaF9mZ1tBVF9aVl0uZ3JlZW4gPSBwb3N0X2ZpbGxfYXRfenZfZmcuZ3JlZW47CisgICAgICAg ICAgZXNzZW50aWFscy0+Y2hfZmdbQVRfWlZdLmJsdWUgPSBwb3N0X2ZpbGxfYXRfenZfZmcuYmx1 ZTsKKyAgICAgICAgICBlc3NlbnRpYWxzLT5jaF9mZ1tQT1NUX1pWXS5yZWQgPSBwb3N0X2ZpbGxf cG9zdF96dl9mZy5yZWQ7CisgICAgICAgICAgZXNzZW50aWFscy0+Y2hfZmdbUE9TVF9aVl0uZ3Jl ZW4gPSBwb3N0X2ZpbGxfcG9zdF96dl9mZy5ncmVlbjsKKyAgICAgICAgICBlc3NlbnRpYWxzLT5j aF9mZ1tQT1NUX1pWXS5ibHVlID0gcG9zdF9maWxsX3Bvc3RfenZfZmcuYmx1ZTsKKyAgICAgICAg fQorfQorCit2b2lkCittY19jb2xvcl9waWNrZXIgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBn bHlwaCAqZ2x5cGgsIHN0cnVjdCBtY19lc3NlbnRpYWxzIGVzc2VudGlhbHMsCisgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBtY19SR0IgKmxzbF9mZywgaW50IHBvc2ludCwgZW51bSBtY19jdXJz b3JfdHlwZSBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgZW51bSBtY19yb3dfcG9z aXRpb24gcm93X3Bvc2l0aW9uLCBlbnVtIG1jX2VuZ2luZV90eXBlIGFjdGlvbl90eXBlKQorewor ICBzd2l0Y2ggKGFjdGlvbl90eXBlKQorICB7CisgICAgY2FzZSBNVUxUSVBMRV9DVVJTT1JTOgor ICAgIHsKKyAgICAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICAgICAg cHRyZGlmZl90IGN1cnJlbnRfY29sID0gbWNfY3VycmVudF9jb2x1bW4gKHcsIHBvc2ludCk7Cisg ICAgICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAody0+Y29udGVudHMpOworICAgICAgYm9v bCBmaWxsX2NvbHVtbl9wID0gIU5JTFAgKEJWQVIgKGIsIGZpbGxfY29sdW1uKSk7CisgICAgICBp bnQgZmlsbF9jb2wgPSAoZmlsbF9jb2x1bW5fcCkKKyAgICAgICAgICAgICAgICAgICAgID8gWEZJ WE5VTSAoQlZBUiAoYiwgZmlsbF9jb2x1bW4pKQorICAgICAgICAgICAgICAgICAgICAgOiAwOwor ICAgICAgZW51bSBmYWNlX2lkIGV2ZW5fZmFjZV9pZCA9CisgICAgICAgICghZXNzZW50aWFscy5h Y3RpdmVfcAorICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwg Y2hfaW5hY3RpdmVfd2luZG93cykpKQorICAgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBm LCBpbnRlcm4gKCIrLWV2ZW4taW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgdHJ1ZSkKKyAgICAgICAg OiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1ldmVuLXByZS16di1mYWNlIiks IHRydWUpOworICAgICAgc3RydWN0IGZhY2UgKmV2ZW5fZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwg ZXZlbl9mYWNlX2lkKTsKKyAgICAgIExpc3BfT2JqZWN0IGV2ZW5fY29sb3IgPSBldmVuX2ZhY2Ut PmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOworICAgICAgc3RydWN0IG1jX1JHQiBldmVu X2ZvcmVncm91bmQ7CisgICAgICBtY194d19jb2xvcl92YWx1ZXMgKHcsIGV2ZW5fY29sb3IsICZl dmVuX2ZvcmVncm91bmQpOworICAgICAgZW51bSBmYWNlX2lkIG9kZF9mYWNlX2lkID0KKyAgICAg ICAgKCFlc3NlbnRpYWxzLmFjdGl2ZV9wCisgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZF UiAody0+Y29udGVudHMpLCBjaF9pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgICAgID8gbG9va3Vw X25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb2RkLWluYWN0aXZlLXByZS16di1mYWNlIiks IHRydWUpCisgICAgICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb2Rk LXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgc3RydWN0IGZhY2UgKm9kZF9mYWNlID0gRkFD RV9GUk9NX0lEIChmLCBvZGRfZmFjZV9pZCk7CisgICAgICBMaXNwX09iamVjdCBvZGRfY29sb3Ig PSBvZGRfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CisgICAgICBzdHJ1Y3Qg bWNfUkdCIG9kZF9mb3JlZ3JvdW5kOworICAgICAgbWNfeHdfY29sb3JfdmFsdWVzICh3LCBvZGRf Y29sb3IsICZvZGRfZm9yZWdyb3VuZCk7CisgICAgICBlbnVtIGZhY2VfaWQgYmV5b25kX2ZpbGxf ZmFjZV9pZCA9CisgICAgICAgICghZXNzZW50aWFscy5hY3RpdmVfcAorICAgICAgICAgJiYgIU5J TFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfaW5hY3RpdmVfd2luZG93cykpKQor ICAgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXBvc3QtZmlsbC1p bmFjdGl2ZS1wcmUtenYtZmFjZSIpLCB0cnVlKQorICAgICAgICA6IGxvb2t1cF9uYW1lZF9mYWNl ICh3LCBmLCBpbnRlcm4gKCIrLXBvc3QtZmlsbC1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAg IHN0cnVjdCBmYWNlICpiZXlvbmRfZmlsbF9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBiZXlvbmRf ZmlsbF9mYWNlX2lkKTsKKyAgICAgIExpc3BfT2JqZWN0IGJleW9uZF9maWxsX2NvbG9yID0gYmV5 b25kX2ZpbGxfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CisgICAgICBzdHJ1 Y3QgbWNfUkdCIGJleW9uZF9maWxsX2ZvcmVncm91bmQ7CisgICAgICBtY194d19jb2xvcl92YWx1 ZXMgKHcsIGJleW9uZF9maWxsX2NvbG9yLCAmYmV5b25kX2ZpbGxfZm9yZWdyb3VuZCk7CisgICAg ICAvKiByZWQgKi8KKyAgICAgIGlmICgoIWZpbGxfY29sdW1uX3AKKyAgICAgICAgICAgJiYgY3Vy cmVudF9jb2wgJSAyICE9IDAKKyAgICAgICAgICAgJiYgcm93X3Bvc2l0aW9uID09IFBSRV9aVikK KyAgICAgICAgICB8fCAoZmlsbF9jb2x1bW5fcAorICAgICAgICAgICAgICAmJiBjdXJyZW50X2Nv bCAlIDIgIT0gMAorICAgICAgICAgICAgICAmJiBjdXJyZW50X2NvbCA8PSBmaWxsX2NvbAorICAg ICAgICAgICAgICAmJiByb3dfcG9zaXRpb24gPT0gUFJFX1pWKSkKKyAgICAgICAgeworICAgICAg ICAgIGxzbF9mZy0+cmVkID0gb2RkX2ZvcmVncm91bmQucmVkOworICAgICAgICAgIGxzbF9mZy0+ Z3JlZW4gPSBvZGRfZm9yZWdyb3VuZC5ncmVlbjsKKyAgICAgICAgICBsc2xfZmctPmJsdWUgPSBv ZGRfZm9yZWdyb3VuZC5ibHVlOworICAgICAgICB9CisgICAgICAgIC8qIHllbGxvdyAqLworICAg ICAgICBlbHNlIGlmICgoIWZpbGxfY29sdW1uX3AKKyAgICAgICAgICAgICAgICAgICYmIGN1cnJl bnRfY29sICUgMiA9PSAwCisgICAgICAgICAgICAgICAgICAmJiByb3dfcG9zaXRpb24gPT0gUFJF X1pWKQorICAgICAgICAgICAgICAgICB8fCAoZmlsbF9jb2x1bW5fcAorICAgICAgICAgICAgICAg ICAgICAgJiYgY3VycmVudF9jb2wgJSAyID09IDAKKyAgICAgICAgICAgICAgICAgICAgICYmIGN1 cnJlbnRfY29sIDw9IGZpbGxfY29sCisgICAgICAgICAgICAgICAgICAgICAmJiByb3dfcG9zaXRp b24gPT0gUFJFX1pWKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBsc2xfZmctPnJlZCA9IGV2 ZW5fZm9yZWdyb3VuZC5yZWQ7CisgICAgICAgICAgICBsc2xfZmctPmdyZWVuID0gZXZlbl9mb3Jl Z3JvdW5kLmdyZWVuOworICAgICAgICAgICAgbHNsX2ZnLT5ibHVlID0gZXZlbl9mb3JlZ3JvdW5k LmJsdWU7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIGdyZWVuICovCisgICAgICAgICAgZWxz ZSBpZiAoZmlsbF9jb2x1bW5fcAorICAgICAgICAgICAgICAgICAgICYmIGN1cnJlbnRfY29sID4g ZmlsbF9jb2wKKyAgICAgICAgICAgICAgICAgICAmJiByb3dfcG9zaXRpb24gPT0gUFJFX1pWKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBsc2xfZmctPnJlZCA9IGJleW9uZF9maWxsX2Zv cmVncm91bmQucmVkOworICAgICAgICAgICAgICBsc2xfZmctPmdyZWVuID0gYmV5b25kX2ZpbGxf Zm9yZWdyb3VuZC5ncmVlbjsKKyAgICAgICAgICAgICAgbHNsX2ZnLT5ibHVlID0gYmV5b25kX2Zp bGxfZm9yZWdyb3VuZC5ibHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo cm93X3Bvc2l0aW9uID09IEFUX1pWKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg bHNsX2ZnLT5yZWQgPSBlc3NlbnRpYWxzLnNwX2ZnLnJlZDsKKyAgICAgICAgICAgICAgICBsc2xf ZmctPmdyZWVuID0gZXNzZW50aWFscy5zcF9mZy5ncmVlbjsKKyAgICAgICAgICAgICAgICBsc2xf ZmctPmJsdWUgPSBlc3NlbnRpYWxzLnNwX2ZnLmJsdWU7CisgICAgICAgICAgICAgIH0KKyAgICAg IGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhPUklaT05UQUxfUlVMRVI6CisgICAgeworICAgICAg aWYgKGdseXBoICE9IE5VTEwKKyAgICAgICAgICAmJiBnbHlwaC0+dS5jaCA9PSA5NQorICAgICAg ICAgICYmIGN1cnNvcl90eXBlID09IE1DX0hCQVIpCisgICAgICAgIHsKKyAgICAgICAgICBsc2xf ZmctPnJlZCA9IGVzc2VudGlhbHMuc3BfZmcucmVkOworICAgICAgICAgIGxzbF9mZy0+Z3JlZW4g PSBlc3NlbnRpYWxzLnNwX2ZnLmdyZWVuOworICAgICAgICAgIGxzbF9mZy0+Ymx1ZSA9IGVzc2Vu dGlhbHMuc3BfZmcuYmx1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgewor ICAgICAgICAgICAgbHNsX2ZnLT5yZWQgPSBlc3NlbnRpYWxzLmNoX2ZnW3Jvd19wb3NpdGlvbl0u cmVkOworICAgICAgICAgICAgbHNsX2ZnLT5ncmVlbiA9IGVzc2VudGlhbHMuY2hfZmdbcm93X3Bv c2l0aW9uXS5ncmVlbjsKKyAgICAgICAgICAgIGxzbF9mZy0+Ymx1ZSA9IGVzc2VudGlhbHMuY2hf Zmdbcm93X3Bvc2l0aW9uXS5ibHVlOworICAgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0K KyAgICBjYXNlIFZFUlRJQ0FMX1JVTEVSOgorICAgIHsKKyAgICAgIGxzbF9mZy0+cmVkID0gZXNz ZW50aWFscy5jaF9mZ1tyb3dfcG9zaXRpb25dLnJlZDsKKyAgICAgIGxzbF9mZy0+Z3JlZW4gPSBl c3NlbnRpYWxzLmNoX2ZnW3Jvd19wb3NpdGlvbl0uZ3JlZW47CisgICAgICBsc2xfZmctPmJsdWUg PSBlc3NlbnRpYWxzLmNoX2ZnW3Jvd19wb3NpdGlvbl0uYmx1ZTsKKyAgICAgIGJyZWFrOworICAg IH0KKyAgICBjYXNlIEZJTExfQ09MVU1OOgorICAgIHsKKyAgICAgIGxzbF9mZy0+cmVkID0gZXNz ZW50aWFscy5mY19mZ1tyb3dfcG9zaXRpb25dLnJlZDsKKyAgICAgIGxzbF9mZy0+Z3JlZW4gPSBl c3NlbnRpYWxzLmZjX2ZnW3Jvd19wb3NpdGlvbl0uZ3JlZW47CisgICAgICBsc2xfZmctPmJsdWUg PSBlc3NlbnRpYWxzLmZjX2ZnW3Jvd19wb3NpdGlvbl0uYmx1ZTsKKyAgICAgIGJyZWFrOworICAg IH0KKyAgICBjYXNlIENVUlNPUl9JTkRJQ0FUT1I6CisgICAgeworICAgICAgc3RydWN0IGZyYW1l ICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgICAgICBlbnVtIGZhY2VfaWQgY3Vyc29yX2ZhY2Vf aWQgPQorICAgICAgICAoIWVzc2VudGlhbHMuYWN0aXZlX3AKKyAgICAgICAgICYmICFOSUxQIChC VkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNoX2luYWN0aXZlX3dpbmRvd3MpKQorICAgICAg ICAgJiYgcm93X3Bvc2l0aW9uID09IFBSRV9aVikKKyAgICAgICAgICA/IGxvb2t1cF9uYW1lZF9m YWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtcHJlLXp2LWZh Y2UiKSwgdHJ1ZSkKKyAgICAgICAgOiAoZXNzZW50aWFscy5hY3RpdmVfcAorICAgICAgICAgICAm JiByb3dfcG9zaXRpb24gPT0gUFJFX1pWKQorICAgICAgICAgID8gbG9va3VwX25hbWVkX2ZhY2Ug KHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1wcmUtenYtZmFjZSIpLCB0cnVlKQor ICAgICAgICA6ICghZXNzZW50aWFscy5hY3RpdmVfcAorICAgICAgICAgICAmJiAhTklMUCAoQlZB UiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjaF9pbmFjdGl2ZV93aW5kb3dzKSkKKyAgICAgICAg ICAgJiYgcm93X3Bvc2l0aW9uID09IEFUX1pWKQorICAgICAgICAgICAgPyBsb29rdXBfbmFtZWRf ZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWluYWN0aXZlLWF0LXp2LWZh Y2UiKSwgdHJ1ZSkKKyAgICAgICAgOiAoZXNzZW50aWFscy5hY3RpdmVfcAorICAgICAgICAgICAm JiByb3dfcG9zaXRpb24gPT0gQVRfWlYpCisgICAgICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAo dywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWF0LXp2LWZhY2UiKSwgdHJ1ZSkKKyAg ICAgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vy c29yLWF0LXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICBzdHJ1Y3QgZmFjZSAqY3Vyc29yX2ZhY2Ug PSBGQUNFX0ZST01fSUQgKGYsIGN1cnNvcl9mYWNlX2lkKTsKKyAgICAgIExpc3BfT2JqZWN0IGN1 cnNvcl9jb2xvciA9IGN1cnNvcl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsK KyAgICAgIG1jX3h3X2NvbG9yX3ZhbHVlcyAodywgY3Vyc29yX2NvbG9yLCBsc2xfZmcpOworICAg ICAgYnJlYWs7CisgICAgfQorICB9Cit9CisKKy8qIERyYXcgZ2x5cGhzIGJldHdlZW4gU1RBUlQg YW5kIEVORCBpbiBBUkVBIG9mIFJPVyBvbiB3aW5kb3cgVywKKyAgIHN0YXJ0aW5nIGF0IHgtcG9z aXRpb24gWC4gIFggaXMgcmVsYXRpdmUgdG8gQVJFQSBpbiBXLiAgSEwgaXMgYQorICAgZmFjZS1v dmVycmlkZSB3aXRoIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKKyAgIC0gIERSQVdfTk9STUFMX1RF WFQgIGRyYXcgbm9ybWFsbHkKKyAgIC0gIERSQVdfQ1VSU09SICAgIGRyYXcgaW4gY3Vyc29yIGZh Y2UKKyAgIC0gIERSQVdfTU9VU0VfRkFDRSAgZHJhdyBpbiBtb3VzZSBmYWNlLgorICAgLSAgRFJB V19JTlZFUlNFX1ZJREVPICBkcmF3IGluIG1vZGUgbGluZSBmYWNlCisgICAtICBEUkFXX0lNQUdF X1NVTktFTiAgZHJhdyBhbiBpbWFnZSB3aXRoIGEgc3Vua2VuIHJlbGllZiBhcm91bmQgaXQKKyAg IC0gIERSQVdfSU1BR0VfUkFJU0VEICBkcmF3IGFuIGltYWdlIHdpdGggYSByYWlzZWQgcmVsaWVm IGFyb3VuZCBpdAorICAgSWYgT1ZFUkxBUFMgaXMgbm9uLXplcm8sIGRyYXcgb25seSB0aGUgZm9y ZWdyb3VuZCBvZiBjaGFyYWN0ZXJzIGFuZAorICAgY2xpcCB0byB0aGUgcGh5c2ljYWwgaGVpZ2h0 IG9mIFJPVy4gIE5vbi16ZXJvIHZhbHVlIGFsc28gZGVmaW5lcworICAgdGhlIG92ZXJsYXBwaW5n IHBhcnQgdG8gYmUgZHJhd246CisgICAtICBPVkVSTEFQU19QUkVEICAgIG92ZXJsYXAgd2l0aCBw cmVjZWRpbmcgcm93cworICAgLSAgT1ZFUkxBUFNfU1VDQyAgICBvdmVybGFwIHdpdGggc3VjY2Vl ZGluZyByb3dzCisgICAtICBPVkVSTEFQU19CT1RIICAgIG92ZXJsYXAgd2l0aCBib3RoIHByZWNl ZGluZy9zdWNjZWVkaW5nIHJvd3MKKyAgIC0gIE9WRVJMQVBTX0VSQVNFRF9DVVJTT1IgIG92ZXJs YXAgd2l0aCBlcmFzZWQgY3Vyc29yIGFyZWEKKyAgIFZhbHVlIGlzIHRoZSB4LXBvc2l0aW9uIHJl YWNoZWQsIHJlbGF0aXZlIHRvIEFSRUEgb2YgVy4gKi8KK2ludAorbWNfZHJhd19nbHlwaHMgKHN0 cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwgc3RydWN0IGdseXBo X3JvdyAqcm93LAorICAgICAgICAgICAgICAgIHN0cnVjdCBtY19tYXRyaXggbWNfbWF0cml4LCBp bnQgeCwgZW51bSBnbHlwaF9yb3dfYXJlYSBhcmVhLAorICAgICAgICAgICAgICAgIHB0cmRpZmZf dCBzdGFydCwgcHRyZGlmZl90IGVuZCwgZW51bSBkcmF3X2dseXBoc19mYWNlIGhsLAorICAgICAg ICAgICAgICAgIGludCBvdmVybGFwcywgaW50IHZwb3MsIHN0cnVjdCBtY19SR0IgbHNsLAorICAg ICAgICAgICAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciwgZW51bSBtY19jdXJzb3Jf dHlwZSBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICBpbnQgd2QsIGJvb2wgYWN0aXZlX3As IGJvb2wgY3Vyc29yX2djX3AsCisgICAgICAgICAgICAgICAgZW51bSBkcmF3X2dseXBoX2FjdGlv biBhY3Rpb25fdHlwZSwgYm9vbCBkcmF3X3ApCit7CisgIGludCBzdGFydF94ID0geDsKKyAgaW50 IHJlbGF0aXZlX3ggPSAwOworICBpbnQgbGVuZ3RoID0gMDsKKyAgLy8gIGlmIChtY19zdGRlcnJf cCkKKyAgLy8gICAgeworICAvLyAgICAgIGludCBzdGFydF9ocG9zID0gc3RhcnQ7CisgIC8vICAg ICAgaW50IGVuZF9ocG9zID0gZW5kOworICAvLyAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX2Ry YXdfZ2x5cGhzICglZCk6ICBzdGFydF94ICglZCkgfCBzdGFydF9ocG9zICglZCkgfCBlbmRfaHBv cyAoJWQpXG4iLAorICAvLyAgICAgICAgICAgICAgICAgICAgICAgdnBvcywgc3RhcnRfeCwgc3Rh cnRfaHBvcywgZW5kX2hwb3MpOworICAvLyAgICB9CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFN RSAoV0lORE9XX0ZSQU1FICh3KSk7CisgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKmhlYWQsICp0YWls OworICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzOworICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpjbGlw X2hlYWQgPSBOVUxMLCAqY2xpcF90YWlsID0gTlVMTDsKKyAgaW50IGksIGosIHhfcmVhY2hlZCwg bGFzdF94LCBhcmVhX2xlZnQgPSAwOworICBNQ19ERUNMQVJFX0hEQyAoaGRjKTsKKyAgTUNfQUxM T0NBVEVfSERDIChoZGMsIGYpOworICAvKiBMZXQncyByYXRoZXIgYmUgcGFyYW5vaWQgdGhhbiBn ZXR0aW5nIGEgU0VHVi4gKi8KKyAgZW5kID0gbWluIChlbmQsIHJvdy0+dXNlZFthcmVhXSk7Cisg IHN0YXJ0ID0gY2xpcF90b19ib3VuZHMgKDAsIHN0YXJ0LCBlbmQpOworICAvKiBUcmFuc2xhdGUg WCB0byBmcmFtZSBjb29yZGluYXRlcy4gIFNldCBsYXN0X3ggdG8gdGhlIHJpZ2h0CisgICAgIGVu ZCBvZiB0aGUgZHJhd2luZyBhcmVhLiAqLworICBpZiAocm93LT5mdWxsX3dpZHRoX3ApCisgICAg eworICAgICAgLyogWCBpcyByZWxhdGl2ZSB0byB0aGUgbGVmdCBlZGdlIG9mIFcsIHdpdGhvdXQg c2Nyb2xsIGJhcnMKKyAgIG9yIGZyaW5nZXMuICovCisgICAgICBhcmVhX2xlZnQgPSBXSU5ET1df TEVGVF9FREdFX1ggKHcpOworICAgICAgbGFzdF94ID0gKFdJTkRPV19MRUZUX0VER0VfWCAodykg KyBXSU5ET1dfUElYRUxfV0lEVEggKHcpCisgICAgICAgICAgICAgICAgLSAocm93LT5tb2RlX2xp bmVfcCA/IFdJTkRPV19SSUdIVF9ESVZJREVSX1dJRFRIICh3KSA6IDApKTsKKyAgICB9CisgICAg ZWxzZQorICAgICAgeworICAgICAgICBhcmVhX2xlZnQgPSB3aW5kb3dfYm94X2xlZnQgKHcsIGFy ZWEpOworICAgICAgICBsYXN0X3ggPSBhcmVhX2xlZnQgKyB3aW5kb3dfYm94X3dpZHRoICh3LCBh cmVhKTsKKyAgICAgIH0KKyAgeCArPSBhcmVhX2xlZnQ7CisgIC8qIEJ1aWxkIGEgZG91Ymx5LWxp bmtlZCBsaXN0IG9mIGdseXBoX3N0cmluZyBzdHJ1Y3R1cmVzIGJldHdlZW4KKyAgICAgaGVhZCBh bmQgdGFpbCBmcm9tIHdoYXQgd2UgaGF2ZSB0byBkcmF3LiAgTm90ZSB0aGF0IHRoZSBtYWNybwor ICAgICBNQ19CVUlMRF9HTFlQSF9TVFJJTkdTIHdpbGwgbW9kaWZ5IGl0cyBzdGFydCBwYXJhbWV0 ZXIuICBUaGF0J3MKKyAgICAgdGhlIHJlYXNvbiB3ZSB1c2UgYSBzZXBhcmF0ZSB2YXJpYWJsZSBg aScuICovCisgIGkgPSBzdGFydDsKKyAgVVNFX1NBRkVfQUxMT0NBOworICBNQ19CVUlMRF9HTFlQ SF9TVFJJTkdTIChpLCBlbmQsIGhlYWQsIHRhaWwsIGhsLCB4LCBsYXN0X3gpOworICBpZiAodGFp bCkKKyAgICB7CisgICAgICBzID0gZ2x5cGhfc3RyaW5nX2NvbnRhaW5pbmdfYmFja2dyb3VuZF93 aWR0aCAodGFpbCk7CisgICAgICB4X3JlYWNoZWQgPSBzLT54ICsgcy0+YmFja2dyb3VuZF93aWR0 aDsKKyAgICB9CisgICAgZWxzZQorICAgICAgeF9yZWFjaGVkID0geDsKKyAgLyogSWYgdGhlcmUg YXJlIGFueSBnbHlwaHMgd2l0aCBsYmVhcmluZyA8IDAgb3IgcmJlYXJpbmcgPiB3aWR0aCBpbgor ICAgICB0aGUgcm93LCByZWRyYXcgc29tZSBnbHlwaHMgaW4gZnJvbnQgb3IgZm9sbG93aW5nIHRo ZSBnbHlwaAorICAgICBzdHJpbmdzIGJ1aWx0IGFib3ZlLiAqLworICBpZiAoaGVhZCAmJiAhb3Zl cmxhcHMgJiYgcm93LT5jb250YWluc19vdmVybGFwcGluZ19nbHlwaHNfcCkKKyAgICB7CisgICAg ICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpoLCAqdDsKKyAgICAgIE1vdXNlX0hMSW5mbyAqaGxpbmZv ID0gTU9VU0VfSExfSU5GTyAoZik7CisgICAgICBpbnQgbW91c2VfYmVnX2NvbCBVTklOSVQsIG1v dXNlX2VuZF9jb2wgVU5JTklUOworICAgICAgYm9vbCBjaGVja19tb3VzZV9mYWNlID0gZmFsc2U7 CisgICAgICBpbnQgZHVtbXlfeCA9IDA7CisgICAgICAvKiBJZiBtb3VzZSBoaWdobGlnaHRpbmcg aXMgb24sIHdlIG1heSBuZWVkIHRvIGRyYXcgYWRqYWNlbnQKKyAgIGdseXBocyB1c2luZyBtb3Vz ZS1mYWNlIGhpZ2hsaWdodGluZy4gKi8KKyAgICAgIGlmIChhcmVhID09IFRFWFRfQVJFQSAmJiBy b3ctPm1vdXNlX2ZhY2VfcAorICAgICAgICAgICYmIGhsaW5mby0+bW91c2VfZmFjZV9iZWdfcm93 ID49IDAKKyAgICAgICAgICAmJiBobGluZm8tPm1vdXNlX2ZhY2VfZW5kX3JvdyA+PSAwKQorICAg ICAgICB7CisgICAgICAgICAgcHRyZGlmZl90IHJvd192cG9zID0gTUFUUklYX1JPV19WUE9TIChy b3csIHctPmN1cnJlbnRfbWF0cml4KTsKKyAgICAgICAgICBpZiAocm93X3Zwb3MgPj0gaGxpbmZv LT5tb3VzZV9mYWNlX2JlZ19yb3cKKyAgICAgICAgICAgICAgJiYgcm93X3Zwb3MgPD0gaGxpbmZv LT5tb3VzZV9mYWNlX2VuZF9yb3cpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNoZWNr X21vdXNlX2ZhY2UgPSB0cnVlOworICAgICAgICAgICAgICBtb3VzZV9iZWdfY29sID0gKHJvd192 cG9zID09IGhsaW5mby0+bW91c2VfZmFjZV9iZWdfcm93KQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgPyBobGluZm8tPm1vdXNlX2ZhY2VfYmVnX2NvbAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiAwOworICAgICAgICAgICAgICBtb3VzZV9lbmRfY29sID0gKHJvd192cG9z ID09IGhsaW5mby0+bW91c2VfZmFjZV9lbmRfcm93KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPyBobGluZm8tPm1vdXNlX2ZhY2VfZW5kX2NvbAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiByb3ctPnVzZWRbVEVYVF9BUkVBXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgLyogQ29tcHV0ZSBvdmVyaGFuZ3MgZm9yIGFsbCBnbHlwaCBzdHJpbmdzLiAqLwor ICAgICAgaWYgKEZSQU1FX1JJRiAoZiktPmNvbXB1dGVfZ2x5cGhfc3RyaW5nX292ZXJoYW5ncykK KyAgICAgICAgZm9yIChzID0gaGVhZDsgczsgcyA9IHMtPm5leHQpCisgICAgICAgICAgRlJBTUVf UklGIChmKS0+Y29tcHV0ZV9nbHlwaF9zdHJpbmdfb3ZlcmhhbmdzIChzKTsKKyAgICAgIC8qIFBy ZXBlbmQgZ2x5cGggc3RyaW5ncyBmb3IgZ2x5cGhzIGluIGZyb250IG9mIHRoZSBmaXJzdCBnbHlw aAorICAgICAgc3RyaW5nIHRoYXQgYXJlIG92ZXJ3cml0dGVuIGJlY2F1c2Ugb2YgdGhlIGZpcnN0 IGdseXBoCisgICAgICBzdHJpbmcncyBsZWZ0IG92ZXJoYW5nLiAgVGhlIGJhY2tncm91bmQgb2Yg YWxsIHN0cmluZ3MKKyAgICAgIHByZXBlbmRlZCBtdXN0IGJlIGRyYXduIGJlY2F1c2UgdGhlIGZp cnN0IGdseXBoIHN0cmluZworICAgICAgZHJhd3Mgb3ZlciBpdC4gKi8KKyAgICAgIGkgPSBsZWZ0 X292ZXJ3cml0dGVuIChoZWFkKTsKKyAgICAgIGlmIChpID49IDApCisgICAgICAgIHsKKyAgICAg ICAgICBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2Ugb3ZlcmxhcF9obDsKKyAgICAgICAgICAvKiBJZiB0 aGlzIHJvdyBjb250YWlucyBtb3VzZSBoaWdobGlnaHRpbmcsIGF0dGVtcHQgdG8gZHJhdworICAg ICAgICAgICAgIHRoZSBvdmVybGFwcGVkIGdseXBocyB3aXRoIHRoZSBjb3JyZWN0IGhpZ2hsaWdo dC4gIFRoaXMKKyAgICAgICAgICAgICBjb2RlIGZhaWxzIGlmIHRoZSBvdmVybGFwIGVuY29tcGFz c2VzIG1vcmUgdGhhbiBvbmUgZ2x5cGgKKyAgICAgICAgICAgICBhbmQgbW91c2UtaGlnaGxpZ2h0 IHNwYW5zIG9ubHkgc29tZSBvZiB0aGVzZSBnbHlwaHMuCisgICAgICAgICAgICAgSG93ZXZlciwg bWFraW5nIGl0IHdvcmsgcGVyZmVjdGx5IGludm9sdmVzIGEgbG90IG1vcmUKKyAgICAgICAgICAg ICBjb2RlLCBhbmQgSSBkb24ndCBrbm93IGlmIHRoZSBwYXRob2xvZ2ljYWwgY2FzZSBvY2N1cnMg aW4KKyAgICAgICAgICAgICBwcmFjdGljZSwgc28gd2UnbGwgc3RpY2sgdG8gdGhpcyBmb3Igbm93 LiAgLS0tIGN5ZCAgKi8KKyAgICAgICAgICBpZiAoY2hlY2tfbW91c2VfZmFjZQorICAgICAgICAg ICAgICAmJiBtb3VzZV9iZWdfY29sIDwgc3RhcnQgJiYgbW91c2VfZW5kX2NvbCA+IGkpCisgICAg ICAgICAgICBvdmVybGFwX2hsID0gRFJBV19NT1VTRV9GQUNFOworICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICBvdmVybGFwX2hsID0gRFJBV19OT1JNQUxfVEVYVDsKKyAgICAgICAgICBp ZiAoaGwgIT0gb3ZlcmxhcF9obCkKKyAgICAgICAgICAgIGNsaXBfaGVhZCA9IGhlYWQ7CisgICAg ICAgICAgaiA9IGk7CisgICAgICAgICAgTUNfQlVJTERfR0xZUEhfU1RSSU5HUyAoaiwgc3RhcnQs IGgsIHQsIG92ZXJsYXBfaGwsIGR1bW15X3gsIGxhc3RfeCk7CisgICAgICAgICAgLyogVGhlIGBs ZWZ0X292ZXJ3cml0dGVuYCBiZWhhdmlvciB0aGF0IGVyYXNlcyB0aGUgZmFrZSBjdXJzb3JzIHRy YWNlcyB0bworICAgICAgICAgIGBmb250LT5kcml2ZXItPmRyYXdgIGluIGBuc19kcmF3X2dseXBo X3N0cmluZyc7IGFuZCwgdGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlCisgICAgICAgICAgZHJh d24gYnkgYG5zX2R1bXBnbHlwaHNfc3RyZXRjaCc7IGFuZCwgYG5zX21heWJlX2R1bXBnbHlwaHNf YmFja2dyb3VuZCcgd2hpY2gKKyAgICAgICAgICBlcmFzZXMgdGhlIGFwcGxpY2FibGUgcmVjdGFu Z2xlLiAqLworICAgICAgICAgIC8qIEVYQU1QTEU6ICAJTQorICAgICAgICAgIEluIHRoaXMgZXhh bXBsZSwgd2UgaGF2ZSBhIHZpc2libGUgMTg3ICjCuykgdGhhdCBpcyBmb2xsb3dlZCBieSBhIHZp c2libGUKKyAgICAgICAgICBUQUJfU1RSRVRDSCAoYXMgYSByZXN1bHQgb2YgYSBjb3JyZXNwb25k aW5nIGBidWZmZXItZGlzcGxheS10YWJsZScgZW50cnkpLAorICAgICAgICAgIGZvbGxvd2VkIGJ5 IHdpZGUgIk0iLCBmb2xsb3dlZCBieSBhIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGdseXBoIHJv dworICAgICAgICAgICh3aGljaCBoYXMgbm8gYnVmZmVyIHBvc2l0aW9uKS4gIFdoZW4gcGxhY2lu ZyBhIGZha2UgY3Vyc29yIG9uIHRoZSAiTSIsCisgICAgICAgICAgaGwgPT0gRFJBV19DVVJTT1Ig YW5kIHRoZSBTVFJFVENIX0dMWVBIIGlzIGBsZWZ0X292ZXJ3cml0dGVuYC4gIERyYXdpbmcKKyAg ICAgICAgICBub3JtYWwgdGV4dCBkdXJpbmcgYHVwZGF0ZV93aW5kb3cnIChEUkFXX05PUk1BTF9U RVhUKSBjYW4gYWxzbyBlcmFzZSBmYWtlCisgICAgICAgICAgY3Vyc29ycyB0aGF0IGFyZSBgbGVm dF9vdmVyd3JpdHRlbicuICovCisgICAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgICBmb3Ig KHMgPSBoOyBzOyBzID0gcy0+bmV4dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcy0+ bGVmdF9vdmVyd3JpdHRlbl9wID0gdHJ1ZTsKKyAgICAgICAgICAgICAgcy0+YWN0aW9uX3R5cGUg PSBhY3Rpb25fdHlwZTsKKyAgICAgICAgICAgICAgbGVuZ3RoICs9IHMtPmZpcnN0X2dseXBoLT5w aXhlbF93aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICByZWxhdGl2ZV94ID0gc3RhcnRf eCAtIGxlbmd0aDsKKyAgICAgICAgICBmb3IgKHMgPSBoOyBzOyBzID0gcy0+bmV4dCkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgcy0+Zmlyc3RfZ2x5cGgtPnJlbGF0aXZlX3ggPSByZWxh dGl2ZV94OworICAgICAgICAgICAgICByZWxhdGl2ZV94ICs9IHMtPmZpcnN0X2dseXBoLT5waXhl bF93aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBzdGFydCA9IGk7CisgICAgICAgICAg Y29tcHV0ZV9vdmVyaGFuZ3NfYW5kX3ggKHQsIGhlYWQtPngsIHRydWUpOworICAgICAgICAgIHBy ZXBlbmRfZ2x5cGhfc3RyaW5nX2xpc3RzICgmaGVhZCwgJnRhaWwsIGgsIHQpOworICAgICAgICAg IGlmIChjbGlwX2hlYWQgPT0gTlVMTCkKKyAgICAgICAgICAgIGNsaXBfaGVhZCA9IGhlYWQ7Cisg ICAgICAgIH0KKyAgICAgIC8qIFByZXBlbmQgZ2x5cGggc3RyaW5ncyBmb3IgZ2x5cGhzIGluIGZy b250IG9mIHRoZSBmaXJzdCBnbHlwaAorICAgICAgc3RyaW5nIHRoYXQgb3ZlcndyaXRlIHRoYXQg Z2x5cGggc3RyaW5nIGJlY2F1c2Ugb2YgdGhlaXIKKyAgICAgIHJpZ2h0IG92ZXJoYW5nLiAgRm9y IHRoZXNlIHN0cmluZ3MsIG9ubHkgdGhlIGZvcmVncm91bmQgbXVzdAorICAgICAgYmUgZHJhd24s IGJlY2F1c2UgaXQgZHJhd3Mgb3ZlciB0aGUgZ2x5cGggc3RyaW5nIGF0IGBoZWFkJy4KKyAgICAg IFRoZSBiYWNrZ3JvdW5kIG11c3Qgbm90IGJlIGRyYXduIGJlY2F1c2UgdGhpcyB3b3VsZCBvdmVy d3JpdGUKKyAgICAgIHJpZ2h0IG92ZXJoYW5ncyBvZiBwcmVjZWRpbmcgZ2x5cGhzIGZvciB3aGlj aCBubyBnbHlwaAorICAgICAgc3RyaW5ncyBleGlzdC4gKi8KKyAgICAgIGkgPSBsZWZ0X292ZXJ3 cml0aW5nIChoZWFkKTsKKyAgICAgIGlmIChpID49IDApCisgICAgICAgIHsKKyAgICAgICAgICBl bnVtIGRyYXdfZ2x5cGhzX2ZhY2Ugb3ZlcmxhcF9obDsKKyAgICAgICAgICBpZiAoY2hlY2tfbW91 c2VfZmFjZQorICAgICAgICAgICAgICAmJiBtb3VzZV9iZWdfY29sIDwgc3RhcnQgJiYgbW91c2Vf ZW5kX2NvbCA+IGkpCisgICAgICAgICAgICBvdmVybGFwX2hsID0gRFJBV19NT1VTRV9GQUNFOwor ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBvdmVybGFwX2hsID0gRFJBV19OT1JNQUxf VEVYVDsKKyAgICAgICAgICBpZiAoaGwgPT0gb3ZlcmxhcF9obCB8fCBjbGlwX2hlYWQgPT0gTlVM TCkKKyAgICAgICAgICAgIGNsaXBfaGVhZCA9IGhlYWQ7CisgICAgICAgICAgTUNfQlVJTERfR0xZ UEhfU1RSSU5HUyAoaSwgc3RhcnQsIGgsIHQsIG92ZXJsYXBfaGwsIGR1bW15X3gsIGxhc3RfeCk7 CisgICAgICAgICAgZm9yIChzID0gaDsgczsgcyA9IHMtPm5leHQpCisgICAgICAgICAgICBzLT5i YWNrZ3JvdW5kX2ZpbGxlZF9wID0gdHJ1ZTsKKyAgICAgICAgICBjb21wdXRlX292ZXJoYW5nc19h bmRfeCAodCwgaGVhZC0+eCwgdHJ1ZSk7CisgICAgICAgICAgcHJlcGVuZF9nbHlwaF9zdHJpbmdf bGlzdHMgKCZoZWFkLCAmdGFpbCwgaCwgdCk7CisgICAgICAgIH0KKyAgICAgIC8qIEFwcGVuZCBn bHlwaHMgc3RyaW5ncyBmb3IgZ2x5cGhzIGZvbGxvd2luZyB0aGUgbGFzdCBnbHlwaAorICAgICAg c3RyaW5nIHRhaWwgdGhhdCBhcmUgb3ZlcndyaXR0ZW4gYnkgdGFpbC4gIFRoZSBiYWNrZ3JvdW5k IG9mCisgICAgICB0aGVzZSBzdHJpbmdzIGhhcyB0byBiZSBkcmF3biBiZWNhdXNlIHRhaWwncyBm b3JlZ3JvdW5kIGRyYXdzCisgICAgICBvdmVyIGl0LiAqLworICAgICAgaSA9IHJpZ2h0X292ZXJ3 cml0dGVuICh0YWlsKTsKKyAgICAgIGlmIChpID49IDApCisgICAgICAgIHsKKyAgICAgICAgICBl bnVtIGRyYXdfZ2x5cGhzX2ZhY2Ugb3ZlcmxhcF9obDsKKyAgICAgICAgICBpZiAoY2hlY2tfbW91 c2VfZmFjZQorICAgICAgICAgICAgICAmJiBtb3VzZV9iZWdfY29sIDwgaSAmJiBtb3VzZV9lbmRf Y29sID4gZW5kKQorICAgICAgICAgICAgb3ZlcmxhcF9obCA9IERSQVdfTU9VU0VfRkFDRTsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgb3ZlcmxhcF9obCA9IERSQVdfTk9STUFMX1RF WFQ7CisgICAgICAgICAgaWYgKGhsICE9IG92ZXJsYXBfaGwpCisgICAgICAgICAgICBjbGlwX3Rh aWwgPSB0YWlsOworICAgICAgICAgIE1DX0JVSUxEX0dMWVBIX1NUUklOR1MgKGVuZCwgaSwgaCwg dCwgb3ZlcmxhcF9obCwgeCwgbGFzdF94KTsKKyAgICAgICAgLyogVGhlIGByaWdodF9vdmVyd3Jp dHRlbmAgYmVoYXZpb3IgdGhhdCBlcmFzZXMgdGhlIGZha2UgY3Vyc29ycyB0cmFjZXMgdG8KKyAg ICAgICAgYGZvbnQtPmRyaXZlci0+ZHJhd2AgaW4gYG5zX2RyYXdfZ2x5cGhfc3RyaW5nJzsgYW5k LCB0aGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUKKyAgICAgICAgZHJhd24gYnkgYG5zX2R1bXBn bHlwaHNfc3RyZXRjaCc7IGFuZCwgYG5zX21heWJlX2R1bXBnbHlwaHNfYmFja2dyb3VuZCcgd2hp Y2gKKyAgICAgICAgZXJhc2VzIHRoZSBhcHBsaWNhYmxlIHJlY3RhbmdsZS4gKi8KKyAgICAgICAg LyogRVhBTVBMRTogICJFbWFjcyBHdWlkZWQgVG91cglPdmVydmlldyIuCisgICAgICAgIHJpZ2h0 X292ZXJ3cml0dGVuIChHTlUgRW1hY3Mgd2VsY29tZSBzY3JlZW4gd2l0aG91dCBgYnVmZmVyLWRp c3BsYXktdGFibGUnKQorICAgICAgICBhbmQgdGhlIHJlYWwgZmFrZSBjdXJzb3IgaXMgdG8gdGhl IGltbWVkaWF0ZSByaWdodCBvZiB0aGUgd29yZCAiVG91ciI6ICovCisgICAgICAgIHJlbGF0aXZl X3ggPSBzdGFydF94OworICAgICAgICBmb3IgKHMgPSBoOyBzOyBzID0gcy0+bmV4dCkKKyAgICAg ICAgICB7CisgICAgICAgICAgICBzLT5yaWdodF9vdmVyd3JpdHRlbl9wID0gdHJ1ZTsKKyAgICAg ICAgICAgIHMtPmFjdGlvbl90eXBlID0gYWN0aW9uX3R5cGU7CisgICAgICAgICAgICByZWxhdGl2 ZV94ICs9IHMtPmZpcnN0X2dseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICAgIHMtPmZpcnN0 X2dseXBoLT5yZWxhdGl2ZV94ID0gcmVsYXRpdmVfeDsKKyAgICAgICAgICB9CisgICAgICAgICAg LyogQmVjYXVzZSBNQ19CVUlMRF9HTFlQSF9TVFJJTkdTIHVwZGF0ZXMgdGhlIGZpcnN0IGFyZ3Vt ZW50LAorICAgICAgICAgIHdlIGRvbid0IGhhdmUgYGVuZCA9IGk7JyBoZXJlLiAqLworICAgICAg ICAgIGNvbXB1dGVfb3ZlcmhhbmdzX2FuZF94IChoLCB0YWlsLT54ICsgdGFpbC0+d2lkdGgsIGZh bHNlKTsKKyAgICAgICAgICBhcHBlbmRfZ2x5cGhfc3RyaW5nX2xpc3RzICgmaGVhZCwgJnRhaWws IGgsIHQpOworICAgICAgICAgIGlmIChjbGlwX3RhaWwgPT0gTlVMTCkKKyAgICAgICAgICAgIGNs aXBfdGFpbCA9IHRhaWw7CisgICAgICAgIH0KKyAgICAgIC8qIEFwcGVuZCBnbHlwaCBzdHJpbmdz IGZvciBnbHlwaHMgZm9sbG93aW5nIHRoZSBsYXN0IGdseXBoCisgICAgICBzdHJpbmcgdGFpbCB0 aGF0IG92ZXJ3cml0ZSB0YWlsLiAgVGhlIGZvcmVncm91bmQgb2Ygc3VjaAorICAgICAgZ2x5cGhz IGhhcyB0byBiZSBkcmF3biBiZWNhdXNlIGl0IHdyaXRlcyBpbnRvIHRoZSBiYWNrZ3JvdW5kCisg ICAgICBvZiB0YWlsLiAgVGhlIGJhY2tncm91bmQgbXVzdCBub3QgYmUgZHJhd24gYmVjYXVzZSBp dCBjb3VsZAorICAgICAgcGFpbnQgb3ZlciB0aGUgZm9yZWdyb3VuZCBvZiBmb2xsb3dpbmcgZ2x5 cGhzLiAqLworICAgICAgaSA9IHJpZ2h0X292ZXJ3cml0aW5nICh0YWlsKTsKKyAgICAgIGlmIChp ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2Ugb3Zlcmxh cF9obDsKKyAgICAgICAgICBpZiAoY2hlY2tfbW91c2VfZmFjZQorICAgICAgICAgICAgICAmJiBt b3VzZV9iZWdfY29sIDwgaSAmJiBtb3VzZV9lbmRfY29sID4gZW5kKQorICAgICAgICAgICAgb3Zl cmxhcF9obCA9IERSQVdfTU9VU0VfRkFDRTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgb3ZlcmxhcF9obCA9IERSQVdfTk9STUFMX1RFWFQ7CisgICAgICAgICAgaWYgKGhsID09IG92 ZXJsYXBfaGwgfHwgY2xpcF90YWlsID09IE5VTEwpCisgICAgICAgICAgICBjbGlwX3RhaWwgPSB0 YWlsOworICAgICAgICAgIGkrKzsgICAgICAvKiBXZSBtdXN0IGluY2x1ZGUgdGhlIEl0aCBnbHlw aC4gKi8KKyAgICAgICAgICBNQ19CVUlMRF9HTFlQSF9TVFJJTkdTIChlbmQsIGksIGgsIHQsIG92 ZXJsYXBfaGwsIHgsIGxhc3RfeCk7CisgICAgICAgICAgZm9yIChzID0gaDsgczsgcyA9IHMtPm5l eHQpCisgICAgICAgICAgICBzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wID0gdHJ1ZTsKKyAgICAgICAg ICBjb21wdXRlX292ZXJoYW5nc19hbmRfeCAoaCwgdGFpbC0+eCArIHRhaWwtPndpZHRoLCBmYWxz ZSk7CisgICAgICAgICAgYXBwZW5kX2dseXBoX3N0cmluZ19saXN0cyAoJmhlYWQsICZ0YWlsLCBo LCB0KTsKKyAgICAgICAgfQorICAgICAgdGFpbCA9IGdseXBoX3N0cmluZ19jb250YWluaW5nX2Jh Y2tncm91bmRfd2lkdGggKHRhaWwpOworICAgICAgaWYgKGNsaXBfdGFpbCkKKyAgICAgICAgY2xp cF90YWlsID0gZ2x5cGhfc3RyaW5nX2NvbnRhaW5pbmdfYmFja2dyb3VuZF93aWR0aCAoY2xpcF90 YWlsKTsKKyAgICAgIGlmIChjbGlwX2hlYWQgfHwgY2xpcF90YWlsKQorICAgICAgICBmb3IgKHMg PSBoZWFkOyBzOyBzID0gcy0+bmV4dCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzLT5jbGlw X2hlYWQgPSBjbGlwX2hlYWQ7CisgICAgICAgICAgICBzLT5jbGlwX3RhaWwgPSBjbGlwX3RhaWw7 CisgICAgICAgICAgfQorICAgIH0KKyAgLyogRHJhdyBhbGwgc3RyaW5ncy4gKi8KKyAgZm9yIChz ID0gaGVhZDsgcyAmJiBkcmF3X3A7IHMgPSBzLT5uZXh0KQorICAgIEZSQU1FX1JJRiAoZiktPm1j X3NjcmliZV9zdHJpbmcgKHMsIG1hdHJpeCwgcm93LCBtY19tYXRyaXgsIGxzbCwgZ2x5cGhfZmxh dm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl90eXBlLCB3 ZCwgYWN0aXZlX3AsIGN1cnNvcl9nY19wKTsKKyNpZm5kZWYgSEFWRV9OUworICAvKiBXaGVuIGZv Y3VzIGEgc29sZSBmcmFtZSBhbmQgbW92ZSBob3Jpem9udGFsbHksIHRoaXMgY2xlYXJzIG9uX3AK KyAgICAgY2F1c2luZyBhIGZhaWx1cmUgdG8gZXJhc2UgcHJldiBjdXJzb3IgcG9zaXRpb24uICov CisgIGlmIChhcmVhID09IFRFWFRfQVJFQQorICAgICAgJiYgIXJvdy0+ZnVsbF93aWR0aF9wCisg ICAgICAvKiBXaGVuIGRyYXdpbmcgb3ZlcmxhcHBpbmcgcm93cywgb25seSB0aGUgZ2x5cGggc3Ry aW5ncycKKyAgICAgIGZvcmVncm91bmQgaXMgZHJhd24sIHdoaWNoIGRvZXNuJ3QgZXJhc2UgYSBj dXJzb3IgY29tcGxldGVseS4gKi8KKyAgICAgICYmICFvdmVybGFwcykKKyAgICB7CisgICAgICBp bnQgeDAgPSBjbGlwX2hlYWQgPyBjbGlwX2hlYWQtPnggOiAoaGVhZCA/IGhlYWQtPnggOiB4KTsK KyAgICAgIGludCB4MSA9IChjbGlwX3RhaWwgPyBjbGlwX3RhaWwtPnggKyBjbGlwX3RhaWwtPmJh Y2tncm91bmRfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodGFpbCA/IHRhaWwt PnggKyB0YWlsLT5iYWNrZ3JvdW5kX3dpZHRoIDogeCkpOworICAgICAgeDAgLT0gYXJlYV9sZWZ0 OworICAgICAgeDEgLT0gYXJlYV9sZWZ0OworICAgICAgbm90aWNlX292ZXJ3cml0dGVuX2N1cnNv ciAodywgVEVYVF9BUkVBLCB4MCwgeDEsCisgICAgICAgICByb3ctPnksIE1BVFJJWF9ST1dfQk9U VE9NX1kgKHJvdykpOworICAgIH0KKyNlbmRpZgorICAvKiBWYWx1ZSBpcyB0aGUgeC1wb3NpdGlv biB1cCB0byB3aGljaCBkcmF3biwgcmVsYXRpdmUgdG8gQVJFQSBvZiBXLgorICAgICBUaGlzIGRv ZXNuJ3QgaW5jbHVkZSBwYXJ0cyBkcmF3biBiZWNhdXNlIG9mIG92ZXJoYW5ncy4gKi8KKyAgaWYg KHJvdy0+ZnVsbF93aWR0aF9wKQorICAgIHhfcmVhY2hlZCA9IEZSQU1FX1RPX1dJTkRPV19QSVhF TF9YICh3LCB4X3JlYWNoZWQpOworICBlbHNlCisgICAgeF9yZWFjaGVkIC09IGFyZWFfbGVmdDsK KyAgTUNfUkVMRUFTRV9IREMgKGhkYywgZik7CisgIFNBRkVfRlJFRSAoKTsKKyAgcmV0dXJuIHhf cmVhY2hlZDsKK30KKworLyogRHJhdyB0aGUgY3Vyc29yIGdseXBoIG9mIHdpbmRvdyBXIGluIGds eXBoIHJvdyBST1cuICBTZWUgdGhlCisgICBjb21tZW50IG9mIGRyYXdfZ2x5cGhzIGZvciB0aGUg bWVhbmluZyBvZiBITC4gKi8KK3ZvaWQKK21jX2RyYXdfY3Vyc29yX2dseXBoIChzdHJ1Y3Qgd2lu ZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cgKnJv dywKKyAgICAgICAgICAgICAgICAgICAgICBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2UgaGwsIGludCB4 LCBpbnQgaHBvcywgaW50IHZwb3MsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1jX1JH QiBsc2wsIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciwKKyAgICAgICAgICAgICAgICAgICAg ICBlbnVtIG1jX2N1cnNvcl90eXBlIGN1cnNvcl90eXBlLCBpbnQgd2QsIGJvb2wgYWN0aXZlX3As CisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdXJzb3JfZ2NfcCkKK3sKKyAgLy8gIHN0cnVj dCBnbHlwaCAqY3Vyc29yX2dseXBoID0gbWNfZ2V0X2N1cnNvcl9nbHlwaCAodywgbWF0cml4LCBy b3csIGhwb3MsIHZwb3MpOworICAvLyAgZnByaW50ZiAoc3RkZXJyLCAibWNfZHJhd19jdXJzb3Jf Z2x5cGg6ICBjaCAoJWQpIHwgeCAoJWQpLCBocG9zICglZCksIHZwb3MoJWQpLCBobCAoJWQpXG4i LAorICAvLyAgICAgICAgICAgICAgICAgICAgY3Vyc29yX2dseXBoLT51LmNoLCB4LCBocG9zLCB2 cG9zLCBobCk7CisgIGJsb2NrX2lucHV0ICgpOworICBib29sIGRyYXdfcCA9IHRydWU7CisgIG1j X2RyYXdfZ2x5cGhzICh3LCBtYXRyaXgsIHJvdywgdy0+bWNfbWF0cml4LCB4LCBURVhUX0FSRUEs IGhwb3MsIGhwb3MgKyAxLCBobCwKKyAgICAgICAgICAgICAgICAgIDAsIHZwb3MsIGxzbCwgZ2x5 cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgd2QsIGFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICAg Y3Vyc29yX2djX3AsIE1DX0RSQVdfR0xZUEhfU1RSSU5HLCBkcmF3X3ApOworICB1bmJsb2NrX2lu cHV0ICgpOworICAvKiBXaGVuIHdlIGVyYXNlIHRoZSBjdXJzb3IsIGFuZCBST1cgaXMgb3Zlcmxh cHBlZCBieSBvdGhlciByb3dzLCBtYWtlCisgIHN1cmUgdGhhdCB0aGVzZSBvdmVybGFwcGluZyBw YXJ0cyBvZiBvdGhlciByb3dzIGFyZSByZWRyYXduLiAqLworICBpZiAoaGwgPT0gRFJBV19OT1JN QUxfVEVYVCAmJiByb3ctPm92ZXJsYXBwZWRfcCkKKyAgICB7CisgICAgICBpZiAocm93ID4gbWF0 cml4LT5yb3dzCisgICAgICAgICAgJiYgTUFUUklYX1JPV19PVkVSTEFQU19TVUNDX1AgKHJvdyAt IDEpKQorICAgICAgICBndWlfZml4X292ZXJsYXBwaW5nX2FyZWEgKHcsIHJvdyAtIDEsIFRFWFRf QVJFQSwgT1ZFUkxBUFNfRVJBU0VEX0NVUlNPUik7CisgICAgICBpZiAoTUFUUklYX1JPV19CT1RU T01fWSAocm93KSA8IHdpbmRvd190ZXh0X2JvdHRvbV95ICh3KQorICAgICAgICAgICYmIE1BVFJJ WF9ST1dfT1ZFUkxBUFNfUFJFRF9QIChyb3cgKyAxKSkKKyAgICAgICAgZ3VpX2ZpeF9vdmVybGFw cGluZ19hcmVhICh3LCByb3cgKyAxLCBURVhUX0FSRUEsIE9WRVJMQVBTX0VSQVNFRF9DVVJTT1Ip OworICAgIH0KK30KKwordm9pZAorbWNfZXJhc2VfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBz dHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywKKyAgICAg ICAgICAgICAgICAgc3RydWN0IG1jX21hdHJpeCBtY19tYXRyaXgsIGludCB4LCBpbnQgeSwgaW50 IGhwb3MsIGludCB2cG9zLAorICAgICAgICAgICAgICAgICBlbnVtIG1jX2ZsYXZvciBnbHlwaF9m bGF2b3IsIGVudW0gbWNfY3Vyc29yX3R5cGUgY3Vyc29yX3R5cGUsIGludCB3ZCkKK3sKKyAgYm9v bCBkZWJ1Z19wID0gZmFsc2U7CisgIGlmIChkZWJ1Z19wKQorICAgIGZwcmludGYgKHN0ZGVyciwg Im1jX2VyYXNlX2N1cnNvcjogIHggKCVkKSB8IHkgKCVkKSB8IGhwb3MgKCVkKSB8IHZwb3MgKCVk KSB8IHdkICglZClcblwKKyAgICBnbHlwaF9mbGF2b3IgKCVzKSB8IGN1cnNvcl90eXBlICglcylc biIsCisgICAgeCwgeSwgaHBvcywgdnBvcywgd2QsCisgICAgbWNfZmxhdm9yX3RvX3N0cmluZyAo Z2x5cGhfZmxhdm9yKSwgbWNfY3Vyc29yX3R5cGVfdG9fc3RyaW5nIChjdXJzb3JfdHlwZSkpOwor ICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgTW91c2VfSExJbmZvICpo bGluZm8gPSBNT1VTRV9ITF9JTkZPIChmKTsKKyAgYm9vbCBtb3VzZV9mYWNlX2hlcmVfcCA9IGZh bHNlOworICBzdHJ1Y3QgZ2x5cGggKmN1cnNvcl9nbHlwaDsKKyAgZW51bSBkcmF3X2dseXBoc19m YWNlIGhsOworICAvKiBObyBjdXJzb3IgZGlzcGxheWVkIG9yIHJvdyBpbnZhbGlkYXRlZCA9PiBu b3RoaW5nIHRvIGRvIG9uIHRoZSBzY3JlZW4uICovCisgIGlmIChjdXJzb3JfdHlwZSA9PSBNQ19O T19DVVJTT1IpCisgICAgeworICAgICAgaWYgKGRlYnVnX3ApCisgICAgICAgIGZwcmludGYgKHN0 ZGVyciwgIm1jX2VyYXNlX2N1cnNvcjogIHJldHVybiAoJWQpXG4iLCAxKTsKKyAgICAgIHJldHVy bjsKKyAgICB9CisgIC8qIFZQT1MgPj0gbWF0cml4LT5ucm93cyBtZWFucyB0aGF0IHdpbmRvdyBo YXMgYmVlbiByZXNpemVkLgorICAgICBEb24ndCBib3RoZXIgdG8gZXJhc2UgdGhlIGN1cnNvci4g Ki8KKyAgaWYgKHZwb3MgPj0gbWF0cml4LT5ucm93cykKKyAgICB7CisgICAgICBpZiAoZGVidWdf cCkKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfZXJhc2VfY3Vyc29yOiAgcmV0dXJuICgl ZClcbiIsIDIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyogSWYgcm93IGNvbnRhaW5pbmcg Y3Vyc29yIGlzIG1hcmtlZCBpbnZhbGlkLCB0aGVyZSBpcyBub3RoaW5nIHdlCisgICAgIGNhbiBk by4gKi8KKyAgaWYgKCFyb3ctPmVuYWJsZWRfcCkKKyAgICB7CisgICAgICBpZiAoZGVidWdfcCkK KyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfZXJhc2VfY3Vyc29yOiAgcmV0dXJuICglZClc biIsIDMpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyogSWYgbGluZSBzcGFjaW5nIGlzID4g MCwgb2xkIGN1cnNvciBtYXkgb25seSBiZSBwYXJ0aWFsbHkgdmlzaWJsZSBpbgorICAgICB3aW5k b3cgYWZ0ZXIgc3BsaXQtd2luZG93LiAgU28gYWRqdXN0IHZpc2libGUgaGVpZ2h0LiAqLworICBy b3ctPnZpc2libGVfaGVpZ2h0ID0gbWluIChyb3ctPnZpc2libGVfaGVpZ2h0LAorICAgICAgICAg ICAgd2luZG93X3RleHRfYm90dG9tX3kgKHcpIC0gcm93LT55KTsKKyAgLyogSWYgcm93IGlzIGNv bXBsZXRlbHkgaW52aXNpYmxlLCBkb24ndCBhdHRlbXB0IHRvIGRlbGV0ZSBhIGN1cnNvciB3aGlj aAorICAgICBpc24ndCB0aGVyZS4gIFRoaXMgY2FuIGhhcHBlbiBpZiBjdXJzb3IgaXMgYXQgdG9w IG9mIGEgd2luZG93LCBhbmQKKyAgICAgd2Ugc3dpdGNoIHRvIGEgYnVmZmVyIHdpdGggYSBoZWFk ZXIgbGluZSBpbiB0aGF0IHdpbmRvdy4gKi8KKyAgaWYgKHJvdy0+dmlzaWJsZV9oZWlnaHQgPD0g MCkKKyAgICB7CisgICAgICBpZiAoZGVidWdfcCkKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAi bWNfZXJhc2VfY3Vyc29yOiAgcmV0dXJuICglZClcbiIsIDQpOworICAgICAgcmV0dXJuOworICAg IH0KKyAgLyogSWYgY3Vyc29yIGlzIGluIHRoZSBmcmluZ2UsIGVyYXNlIGJ5IGRyYXdpbmcgYWN0 dWFsIGJpdG1hcCB0aGVyZS4gKi8KKyAgaWYgKHJvdy0+Y3Vyc29yX2luX2ZyaW5nZV9wCisgICAg ICAmJiBnbHlwaF9mbGF2b3IgIT0gTUNfR0xZUEgpCisgICAgeworICAgICAgcm93LT5jdXJzb3Jf aW5fZnJpbmdlX3AgPSBmYWxzZTsKKyAgICAgIG1jX2RyYXdfZnJpbmdlX2JpdG1hcCAodywgcm93 LCByb3ctPnJldmVyc2VkX3AsIGN1cnNvcl90eXBlKTsKKyAgICAgIGlmIChkZWJ1Z19wKQorICAg ICAgICBmcHJpbnRmIChzdGRlcnIsICJtY19lcmFzZV9jdXJzb3I6ICByZXR1cm4gKCVkKVxuIiwg NSk7CisgICAgICByZXR1cm47CisgICAgfQorICAvKiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUg bmV3IHJvdyBpcyBzaG9ydGVyIHRoYW4gdGhlIG9sZCBvbmUuCisgICAgIEluIHRoaXMgY2FzZSwg ZWl0aGVyIGRyYXdfZ2x5cGhzIG9yIGNsZWFyX2VuZF9vZl9saW5lCisgICAgIHNob3VsZCBoYXZl IGNsZWFyZWQgdGhlIGN1cnNvci4gIE5vdGUgdGhhdCB3ZSB3b3VsZG4ndCBiZQorICAgICBhYmxl IHRvIGVyYXNlIHRoZSBjdXJzb3IgaW4gdGhpcyBjYXNlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBh CisgICAgIGN1cnNvciBnbHlwaCBhdCBoYW5kLiAqLworICBpZiAoKHJvdy0+cmV2ZXJzZWRfcAor ICAgICAgID8gKGhwb3MgPCAwKQorICAgICAgIDogKGhwb3MgPj0gcm93LT51c2VkW1RFWFRfQVJF QV0pKSkKKyAgICB7CisgICAgICBpZiAoZGVidWdfcCkKKyAgICAgICAgZnByaW50ZiAoc3RkZXJy LCAibWNfZXJhc2VfY3Vyc29yOiAgcmV0dXJuICglZClcbiIsIDYpOworICAgICAgcmV0dXJuOwor ICAgIH0KKyAgLyogV2hlbiB0aGUgd2luZG93IGlzIGhzY3JvbGxlZCwgY3Vyc29yIGhwb3MgY2Fu IGxlZ2l0aW1hdGVseSBiZSBvdXQKKyAgICAgb2YgYm91bmRzLCBidXQgd2UgZHJhdyB0aGUgY3Vy c29yIGF0IHRoZSBjb3JyZXNwb25kaW5nIHdpbmRvdworICAgICBtYXJnaW4gaW4gdGhhdCBjYXNl LiAqLworICBpZiAoIXJvdy0+cmV2ZXJzZWRfcCAmJiBocG9zIDwgMCkKKyAgICBocG9zID0gMDsK KyAgaWYgKHJvdy0+cmV2ZXJzZWRfcCAmJiBocG9zID49IHJvdy0+dXNlZFtURVhUX0FSRUFdKQor ICAgIGhwb3MgPSByb3ctPnVzZWRbVEVYVF9BUkVBXSAtIDE7CisgIC8qIElmIHRoZSBjdXJzb3Ig aXMgaW4gdGhlIG1vdXNlIGZhY2UgYXJlYSwgcmVkaXNwbGF5IHRoYXQgd2hlbiB3ZSBjbGVhciB0 aGUgY3Vyc29yLiAqLworICBpZiAoISBOSUxQIChobGluZm8tPm1vdXNlX2ZhY2Vfd2luZG93KQor ICAgICAgJiYgY29vcmRzX2luX21vdXNlX2ZhY2VfcCAodywgaHBvcywgdnBvcykKKyAgICAgIC8q IERvbid0IHJlZHJhdyB0aGUgY3Vyc29yJ3Mgc3BvdCBpbiBtb3VzZSBmYWNlIGlmIGl0IGlzIGF0 IHRoZQorICAgICAgZW5kIG9mIGEgbGluZSAob24gYSBuZXdsaW5lKS4gIFRoZSBjdXJzb3IgYXBw ZWFycyB0aGVyZSwgYnV0CisgICAgICBtb3VzZSBoaWdobGlnaHRpbmcgZG9lcyBub3QuICovCisg ICAgICAmJiByb3ctPnVzZWRbVEVYVF9BUkVBXSA+IGhwb3MgJiYgaHBvcyA+PSAwKQorICAgIG1v dXNlX2ZhY2VfaGVyZV9wID0gdHJ1ZTsKKyAgLyogTWF5YmUgY2xlYXIgdGhlIGRpc3BsYXkgdW5k ZXIgdGhlIGN1cnNvci4gKi8KKyAgaWYgKGN1cnNvcl90eXBlID09IE1DX0hPTExPV19CT1gKKyAg ICAgIHx8IGN1cnNvcl90eXBlID09IE1DX0ZSQU1FRF9CT1gpCisgICAgeworICAgICAgaW50IHRl bXBfeCA9IHg7CisgICAgICBpbnQgaGVhZGVyX2xpbmVfaGVpZ2h0ID0gV0lORE9XX0hFQURFUl9M SU5FX0hFSUdIVCAodyk7CisgICAgICBjdXJzb3JfZ2x5cGggPSBtY19nZXRfY3Vyc29yX2dseXBo ICh3LCBtYXRyaXgsIHJvdywgaHBvcywgdnBvcyk7CisgICAgICBpZiAoY3Vyc29yX2dseXBoID09 IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZGVidWdfcCkKKyAgICAgICAgICAgIGZw cmludGYgKHN0ZGVyciwgIm1jX2VyYXNlX2N1cnNvcjogIHJldHVybiAoJWQpXG4iLCA3KTsKKyAg ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIGludCB0ZW1wX3dkID0gY3Vyc29yX2ds eXBoLT5waXhlbF93aWR0aDsKKyAgICAgIGlmICh0ZW1wX3ggPCAwKQorICAgICAgICB7CisgICAg ICAgICAgdGVtcF93ZCArPSB0ZW1wX3g7CisgICAgICAgICAgdGVtcF94ID0gMDsKKyAgICAgICAg fQorICAgICAgdGVtcF93ZCA9IG1pbiAod2QsIHdpbmRvd19ib3hfd2lkdGggKHcsIFRFWFRfQVJF QSkgLSB0ZW1wX3gpOworICAgICAgaW50IGZ5ID0gV0lORE9XX1RPX0ZSQU1FX1BJWEVMX1kgKHcs IG1heCAoaGVhZGVyX2xpbmVfaGVpZ2h0LCByb3ctPnkpKTsKKyAgICAgIGludCBmeCA9IFdJTkRP V19URVhUX1RPX0ZSQU1FX1BJWEVMX1ggKHcsIHRlbXBfeCk7CisgICAgICBpZiAodGVtcF93ZCA+ IDApCisgICAgICAgIEZSQU1FX1JJRiAoZiktPmNsZWFyX2ZyYW1lX2FyZWEgKGYsIGZ4LCBmeSwg dGVtcF93ZCwgcm93LT52aXNpYmxlX2hlaWdodCk7CisgICAgfQorICAvKiBFcmFzZSB0aGUgY3Vy c29yIGJ5IHJlZHJhd2luZyB0aGUgY2hhcmFjdGVyIHVuZGVybmVhdGggaXQuICovCisgIGlmICht b3VzZV9mYWNlX2hlcmVfcCkKKyAgICBobCA9IERSQVdfTU9VU0VfRkFDRTsKKyAgICBlbHNlCisg ICAgICBobCA9IERSQVdfTk9STUFMX1RFWFQ7CisgIHN0cnVjdCBtY19SR0IgbHNsID0gey5yZWQg PSAtMS4wLCAuZ3JlZW4gPSAtMS4wLCAuYmx1ZSA9IC0xLjB9OworICBib29sIGFjdGl2ZV9wID0g ZmFsc2U7CisgIGJvb2wgY3Vyc29yX2djX3AgPSBmYWxzZTsKKyAgLy8gIHN0cnVjdCBnbHlwaCAq Y3Vyc29yX2dseXBoID0gbWNfZ2V0X2N1cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIGhwb3Ms IHZwb3MpOworICAvLyAgZnByaW50ZiAoc3RkZXJyLCAibWNfZHJhd19jdXJzb3JfZ2x5cGg6ICBj aCAoJWQpIHwgeCAoJWQpLCBocG9zICglZCksIHZwb3MoJWQpLCBobCAoJWQpXG4iLAorICAvLyAg ICAgICAgICAgICAgICAgICAgY3Vyc29yX2dseXBoLT51LmNoLCB4LCBocG9zLCB2cG9zLCBobCk7 CisgIGJsb2NrX2lucHV0ICgpOworICBib29sIGRyYXdfcCA9IHRydWU7CisgIG1jX2RyYXdfZ2x5 cGhzICh3LCBtYXRyaXgsIHJvdywgbWNfbWF0cml4LCB4LCBURVhUX0FSRUEsIGhwb3MsIGhwb3Mg KyAxLCBobCwgMCwKKyAgICAgICAgICAgICAgICAgIHZwb3MsIGxzbCwgZ2x5cGhfZmxhdm9yLCBj dXJzb3JfdHlwZSwgd2QsIGFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICAgY3Vyc29yX2djX3As IE1DX0VSQVNFX0dMWVBIX1NUUklORywgZHJhd19wKTsKKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAg LyogV2hlbiB3ZSBlcmFzZSB0aGUgY3Vyc29yLCBhbmQgUk9XIGlzIG92ZXJsYXBwZWQgYnkgb3Ro ZXIgcm93cywgbWFrZQorICBzdXJlIHRoYXQgdGhlc2Ugb3ZlcmxhcHBpbmcgcGFydHMgb2Ygb3Ro ZXIgcm93cyBhcmUgcmVkcmF3bi4gKi8KKyAgaWYgKGhsID09IERSQVdfTk9STUFMX1RFWFQgJiYg cm93LT5vdmVybGFwcGVkX3ApCisgICAgeworICAgICAgaWYgKHJvdyA+IG1hdHJpeC0+cm93cwor ICAgICAgICAgICYmIE1BVFJJWF9ST1dfT1ZFUkxBUFNfU1VDQ19QIChyb3cgLSAxKSkKKyAgICAg ICAgZ3VpX2ZpeF9vdmVybGFwcGluZ19hcmVhICh3LCByb3cgLSAxLCBURVhUX0FSRUEsIE9WRVJM QVBTX0VSQVNFRF9DVVJTT1IpOworICAgICAgaWYgKE1BVFJJWF9ST1dfQk9UVE9NX1kgKHJvdykg PCB3aW5kb3dfdGV4dF9ib3R0b21feSAodykKKyAgICAgICAgICAmJiBNQVRSSVhfUk9XX09WRVJM QVBTX1BSRURfUCAocm93ICsgMSkpCisgICAgICAgIGd1aV9maXhfb3ZlcmxhcHBpbmdfYXJlYSAo dywgcm93ICsgMSwgVEVYVF9BUkVBLCBPVkVSTEFQU19FUkFTRURfQ1VSU09SKTsKKyAgICB9Cit9 CisKKy8qCistIERyYXcgYWxsIGdseXBoIGN1cnNvcnMsIGJ1dCBlcmFzZSB3aXRoIGBtY19lcmFz ZV9jdXJzb3InLgorLSBEcmF3L2VyYXNlIGFsbCBnbHlwaGxlc3MgY3Vyc29ycy4KKy0gV2hlbiBg IXJlbW92ZV9wYCwgc2V0IHRoZSByb3cgZGF0YSByZWxhdGluZyB0byBmcmluZ2UgYml0bWFwcy4K KyAgYGRyYXdfcm93X2ZyaW5nZV9iaXRtYXBzJyAod2l0aGluIGBleHBvc2VfbGluZScgYW5kIGBk cmF3X3dpbmRvd19mcmluZ2VzJykKKyAgaXMgdGhlIG1lY2hhbmlzbSB0aGF0IGRyYXdzIHRoZSBm cmluZ2UgYml0bWFwcy4gKi8KK3ZvaWQKK21jX2RyYXdfZXJhc2VfaHlicmlkIChzdHJ1Y3Qgd2lu ZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cgKnJv dywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IGZ4LCBpbnQgeSwgaW50IGZ5LCBp bnQgaHBvcywgaW50IHZwb3MsIGludCB3ZCwgaW50IGgsCisgICAgICAgICAgICAgICAgICAgICAg ZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZSwgaW50IGN1cnNvcl93aWR0aCwKKyAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGxzbCwgYm9vbCBhY3RpdmVfcCwgZW51bSBt Y19mbGF2b3IgZ2x5cGhfZmxhdm9yLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVtb3Zl X3ApCit7CisgIC8qIGBtYXRyaXhfcm93JyBpbiBgZGlzcG5ldy5jYCBjb250YWlucyB0aGUgZm9s bG93aW5nIHRlc3RzLAorICBlYXNzZXJ0IChtYXRyaXggJiYgbWF0cml4LT5yb3dzKTsKKyAgZWFz c2VydCAocm93ID49IDAgJiYgcm93IDwgbWF0cml4LT5ucm93cyk7ICovCisgIGJvb2wgYmFyZl9j cmFzaF9vbmUgPSAobWF0cml4ICYmIG1hdHJpeC0+cm93cykgPyBmYWxzZSA6IHRydWU7CisgIGlm IChiYXJmX2NyYXNoX29uZSkKKyAgICByZXR1cm47CisgIGJvb2wgYmFyZl9jcmFzaF90d28gPSAo dnBvcyA+PSAwICYmIHZwb3MgPCBtYXRyaXgtPm5yb3dzKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYg KGJhcmZfY3Jhc2hfdHdvKQorICAgIHJldHVybjsKKyAgaWYgKHggPCAwCisgICAgICB8fCB5IDwg MAorICAgICAgfHwgaHBvcyA8IDAKKyAgICAgIHx8IHZwb3MgPCAwKQorICAgIHJldHVybjsKKyAg c3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIGJvb2wgYXV0b19oc2Nyb2xs X21vZGVfcCA9IEVRIChGYnVmZmVyX2xvY2FsX3ZhbHVlIChRYXV0b19oc2Nyb2xsX21vZGUsIHct PmNvbnRlbnRzKSwgUWN1cnJlbnRfbGluZSk7CisgIC8qIEVYQU1QTEU6ICAoc2Nyb2xsLWxlZnQg NSkgKi8KKyAgYm9vbCBoc2NsX2FsbF90ZW1wX3AgPSAody0+c3VzcGVuZF9hdXRvX2hzY3JvbGwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0b19oc2Nyb2xsX21vZGVfcAorICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiB3LT5taW5faHNjcm9sbCA9PSAwKTsKKyAgLyogRVhBTVBMRTogIEMtdSBDLXgg PCBhbmQgZG8gbm90aGluZy4gKi8KKyAgYm9vbCBoc2NsX2FsbF9wZXJtXzBfcCA9ICh3LT5zdXNw ZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGF1dG9faHNj cm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4g MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID4gMAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID09IHctPmhzY3JvbGwp OworICAvKiBFWEFNUExFOiAgQy11IEMteCA8IGFuZCBkbyBzb21ldGhpbmcgZWxzZSBiZXNpZGVz IGhvcml6b250YWxseSBzY3JvbGxpbmcgdGhlCisgICAgICAgICAgICAgICBjdXJyZW50IGxpbmUg ZGlmZmVyZW50bHkuCisgICAgICAgICAgICAgICBDdXJyZW50IGxpbmUgaXMgX25vdF8gaG9yaXpv bnRhbGx5IHNjcm9sbGVkIGRpZmZlcmVudGx5LiAqLworICBib29sIGhzY2xfYWxsX3Blcm1fMV9w ID0gKCF3LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIGF1dG9faHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3 LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Ny b2xsID4gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID09 IHctPmhzY3JvbGwpOworICAvKiBFWEFNUExFOiAgQy11IEMteCA8IGFuZCAuLi4KKyAgICAgICAg ICAgICAgIEN1cnJlbnQgbGluZSBpcyBfbm90XyBob3Jpem9udGFsbHkgc2Nyb2xsZWQgZGlmZmVy ZW50bHkuICovCisgIGJvb2wgaHNjbF9hbGxfcGVybV8yX3AgPSAoIXctPnN1c3BlbmRfYXV0b19o c2Nyb2xsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0b19oc2Nyb2xsX21vZGVf cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmhzY3JvbGwgPT0gMAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID4gMAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsICE9IHctPmhzY3JvbGwpOworICAvKiBF WEFNUExFOiAgKHNjcm9sbC1sZWZ0IDUpOyBhbmQsIHRoZW4gcHJlc3MgdGhlIGxlZnQgYXJyb3cg a2V5IG9uZSB0aW1lLgorICAgICAgICAgICAgICAgQ3VycmVudCBsaW5lIF9pc18gaG9yaXpvbnRh bGx5IHNjcm9sbGVkIGRpZmZlcmVudGx5LiovCisgIGJvb2wgaHNjbF90ZW1wX3AgPSAoIXctPnN1 c3BlbmRfYXV0b19oc2Nyb2xsCisgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0b19oc2Nyb2xs X21vZGVfcAorICAgICAgICAgICAgICAgICAgICAgICYmIHctPmhzY3JvbGwgPiAwCisgICAgICAg ICAgICAgICAgICAgICAgJiYgdy0+bWluX2hzY3JvbGwgPT0gMCk7CisgIC8qIEVYQU1QTEU6ICBD LXUgQy14IDwgYW5kIGRvIHNvbWV0aGluZyB0aGF0IGNhdXNlcyB0aGUgY3VycmVudCBsaW5lIHRv IGJlCisgICAgICAgICAgICAgICBob3Jpem9udGFsbHkgc2Nyb2xsZWQgZGlmZmVyZW50bHkuCisg ICAgICAgICAgICAgICBDdXJyZW50IGxpbmUgX2lzXyBob3Jpem9udGFsbHkgc2Nyb2xsZWQgZGlm ZmVyZW50bHkuICovCisgIGJvb2wgaHNjbF9wZXJtX3AgPSAoIXctPnN1c3BlbmRfYXV0b19oc2Ny b2xsCisgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0b19oc2Nyb2xsX21vZGVfcAorICAgICAg ICAgICAgICAgICAgICAgICYmIHctPmhzY3JvbGwgPiAwCisgICAgICAgICAgICAgICAgICAgICAg JiYgdy0+bWluX2hzY3JvbGwgPiAwCisgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWluX2hz Y3JvbGwgIT0gdy0+aHNjcm9sbCk7CisgIGludCBmcmluZ2VfYml0bWFwID0gTUNfTk9fRlJJTkdF X0JJVE1BUDsKKyAgaW50IGZhY2VfaWQgPSBERUZBVUxUX0ZBQ0VfSUQ7CisgIGlmICghcmVtb3Zl X3AKKyAgICAgICYmIGdseXBoX2ZsYXZvciA9PSBNQ19PVkVSTEFZX0FSUk9XX0JJVE1BUAorICAg ICAgJiYgIWhzY2xfYWxsX3RlbXBfcAorICAgICAgJiYgIWhzY2xfdGVtcF9wCisgICAgICAmJiAh aHNjbF9wZXJtX3AKKyAgICAgICYmICFoc2NsX2FsbF9wZXJtXzBfcAorICAgICAgJiYgIWhzY2xf YWxsX3Blcm1fMV9wCisgICAgICAmJiAhaHNjbF9hbGxfcGVybV8yX3ApCisgICAgeworICAgICAg ZW51bSBmYWNlX2lkIG92ZXJsYXlfYXJyb3dfZmFjZV9pZCA9CisgICAgICAgICghYWN0aXZlX3AK KyAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNoX2luYWN0 aXZlX3dpbmRvd3MpKSkKKyAgICAgICAgPyBsb29rdXBfZGVyaXZlZF9mYWNlICh3LCBmLCBpbnRl cm4gKCIrLW92ZXJsYXktYXJyb3ctaW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgRlJJTkdFX0ZBQ0Vf SUQsIHRydWUpCisgICAgICAgIDogKGFjdGl2ZV9wKQorICAgICAgICAgID8gbG9va3VwX2Rlcml2 ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1vdmVybGF5LWFycm93LXByZS16di1mYWNlIiksIEZS SU5HRV9GQUNFX0lELCB0cnVlKQorICAgICAgICA6IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgIGZh Y2VfaWQgPSAoY3Vyc29yX3R5cGUgPT0gTUNfTEVGVF9GUklOR0VfQklUTUFQKQorICAgICAgICAg ICAgICAgID8gb3ZlcmxheV9hcnJvd19mYWNlX2lkCisgICAgICAgICAgICAgICAgOiBERUZBVUxU X0ZBQ0VfSUQ7CisgICAgICBpZiAody0+aHNjcm9sbCAhPSAwKQorICAgICAgICBmcmluZ2VfYml0 bWFwID0gbWNfZ2V0X2ZyaW5nZV9iaXRtYXAgKHcsIGludGVybiAoIistb3ZlcmxheS1hcnJvdyIp LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBmcmluZ2VfYml0bWFwID0g bWNfZ2V0X2ZyaW5nZV9iaXRtYXAgKHcsIGludGVybiAoIistb3ZlcmxheS1hcnJvdyIpLCB0cnVl LCB0cnVlKTsKKyAgICAgIHJvdy0+bGVmdF9mcmluZ2VfYml0bWFwID0gKGN1cnNvcl90eXBlID09 IE1DX0xFRlRfRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PyBmcmluZ2VfYml0bWFwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNfTk9f RlJJTkdFX0JJVE1BUDsKKyAgICAgIHJvdy0+bGVmdF9mcmluZ2VfZmFjZV9pZCA9IGZhY2VfaWQ7 CisgICAgICByb3ctPmxlZnRfZnJpbmdlX29mZnNldCA9IDA7CisgICAgICByb3ctPmZyaW5nZV9i aXRtYXBfcGVyaW9kaWNfcCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlIGlmICghcmVtb3ZlX3AK KyAgICAgICAgICAgICAmJiBnbHlwaF9mbGF2b3IgPT0gTUNfT1ZFUkxBWV9BUlJPV19CSVRNQVAK KyAgICAgICAgICAgICAmJiAoaHNjbF9hbGxfdGVtcF9wCisgICAgICAgICAgICAgICAgIHx8IGhz Y2xfYWxsX3Blcm1fMF9wCisgICAgICAgICAgICAgICAgIHx8IGhzY2xfYWxsX3Blcm1fMV9wCisg ICAgICAgICAgICAgICAgIHx8IGhzY2xfYWxsX3Blcm1fMl9wCisgICAgICAgICAgICAgICAgIHx8 IGhzY2xfdGVtcF9wCisgICAgICAgICAgICAgICAgIHx8IGhzY2xfcGVybV9wKSkKKyAgICAgIHsK KyAgICAgICAgZW51bSBmYWNlX2lkIG92ZXJsYXlfYXJyb3dfZmFjZV9pZCA9CisgICAgICAgICAg KCFhY3RpdmVfcAorICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVu dHMpLCBjaF9pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgICAgICAgPyBsb29rdXBfZGVyaXZlZF9m YWNlICh3LCBmLCBpbnRlcm4gKCIrLW92ZXJsYXktYXJyb3ctaHNjbC1pbmFjdGl2ZS1wcmUtenYt ZmFjZSIpLCBGUklOR0VfRkFDRV9JRCwgdHJ1ZSkKKyAgICAgICAgICA6IChhY3RpdmVfcCkKKyAg ICAgICAgICAgID8gbG9va3VwX2Rlcml2ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1vdmVybGF5 LWFycm93LWhzY2wtcHJlLXp2LWZhY2UiKSwgRlJJTkdFX0ZBQ0VfSUQsIHRydWUpCisgICAgICAg ICAgOiBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICAgIGZhY2VfaWQgPSAoY3Vyc29yX3R5cGUgPT0g TUNfTEVGVF9GUklOR0VfQklUTUFQKQorICAgICAgICAgICAgICAgICAgPyBvdmVybGF5X2Fycm93 X2ZhY2VfaWQKKyAgICAgICAgICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAgICBp ZiAoaHNjbF9hbGxfcGVybV8wX3ApCisgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9m cmluZ2VfYml0bWFwICh3LCBpbnRlcm4gKCIrLWhzY2wtcGVybSIpLCBmYWxzZSwgZmFsc2UpOwor ICAgICAgICAgIGVsc2UgaWYgKGhzY2xfYWxsX3Blcm1fMV9wKQorICAgICAgICAgICAgZnJpbmdl X2JpdG1hcCA9IG1jX2dldF9mcmluZ2VfYml0bWFwICh3LCBpbnRlcm4gKCIrLWhzY2wtcGVybSIp LCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChoc2NsX2FsbF9wZXJtXzJfcCkK KyAgICAgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9mcmluZ2VfYml0bWFwICh3LCBp bnRlcm4gKCIrLWhzY2wtcGVybSIpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICAgIGVsc2Ug aWYgKGhzY2xfcGVybV9wKQorICAgICAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRf ZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1oc2NsLXBlcm0iKSwgdHJ1ZSwgdHJ1ZSk7Cisg ICAgICAgICAgICAgICAgZWxzZSBpZiAoaHNjbF9hbGxfdGVtcF9wKQorICAgICAgICAgICAgICAg ICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9mcmluZ2VfYml0bWFwICh3LCBpbnRlcm4gKCIrLWhz Y2wtdGVtcCIpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHNj bF90ZW1wX3ApCisgICAgICAgICAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRfZnJp bmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1oc2NsLXRlbXAiKSwgdHJ1ZSwgZmFsc2UpOworICAg ICAgICByb3ctPmxlZnRfZnJpbmdlX2JpdG1hcCA9IChjdXJzb3JfdHlwZSA9PSBNQ19MRUZUX0ZS SU5HRV9CSVRNQVApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmcmluZ2Vf Yml0bWFwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNQ19OT19GUklOR0Vf QklUTUFQOworICAgICAgICByb3ctPmxlZnRfZnJpbmdlX2ZhY2VfaWQgPSBmYWNlX2lkOworICAg ICAgICByb3ctPmxlZnRfZnJpbmdlX29mZnNldCA9IDA7CisgICAgICAgIHJvdy0+ZnJpbmdlX2Jp dG1hcF9wZXJpb2RpY19wID0gZmFsc2U7CisgICAgICB9CisgICAgICBlbHNlIGlmICghcmVtb3Zl X3AKKyAgICAgICAgICAgICAgICYmIChnbHlwaF9mbGF2b3IgPT0gTUNfSE9MTE9XX1JFQ1RBTkdM RV9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19S RVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XCisgICAgICAgICAgICAgICAgICAg fHwgZ2x5cGhfZmxhdm9yID09IE1DX0hPTExPV19SRUNUQU5HTEUKKyAgICAgICAgICAgICAgICAg ICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAg ICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9S SUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19WRVJU SUNBTF9CQVIKKyAgICAgICAgICAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJT RURfVkVSVElDQUxfQkFSCisgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1D X1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gpKQorICAgICAgICB7CisgICAgICAgICAgTGlzcF9PYmpl Y3QgYml0bWFwX2ZsYXZvciA9IChnbHlwaF9mbGF2b3IgPT0gTUNfSE9MTE9XX1JFQ1RBTkdMRV9S SUdIVF9BUlJPVykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBRbWNf aG9sbG93X3JlY3RhbmdsZV9yaWdodF9hcnJvdworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6IChnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfSE9MTE9XX1JFQ1RBTkdM RV9SSUdIVF9BUlJPVykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ IFFtY19yZXZlcnNlZF9ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdseXBoX2ZsYXZvciA9PSBNQ19IT0xMT1dfUkVD VEFOR0xFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUW1jX2hv bGxvd19yZWN0YW5nbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAo Z2x5cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFtY192ZXJ0aWNhbF9iYXJfcmlnaHRfYXJy b3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGhfZmxhdm9y ID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVykKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFtY19yZXZlcnNlZF92ZXJ0aWNhbF9iYXJfcmln aHRfYXJyb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGhf Zmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA/IFFtY192ZXJ0aWNhbF9iYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiAoZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFtY19yZXZlcnNlZF92 ZXJ0aWNhbF9iYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5 cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPyBRbWNfdmVydGljYWxfYmFyX2JhY2tzbGFzaAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFFuaWw7CisgICAgICAgICAgZnJp bmdlX2JpdG1hcCA9IChjdXJzb3JfdHlwZSA9PSBNQ19SSUdIVF9GUklOR0VfQklUTUFQKQorICAg ICAgICAgICAgICAgICAgICAgICAgICA/IGxvb2t1cF9mcmluZ2VfYml0bWFwIChiaXRtYXBfZmxh dm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1DX05PX0ZSSU5HRV9CSVRNQVA7Cisg ICAgICAgICAgZmFjZV9pZCA9IChjdXJzb3JfdHlwZSA9PSBNQ19SSUdIVF9GUklOR0VfQklUTUFQ CisgICAgICAgICAgICAgICAgICAgICAmJiAoZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX0hP TExPV19SRUNUQU5HTEVfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCBn bHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAg ICAgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJ Q0FMX0JBUikpCisgICAgICAgICAgICAgICAgICAgICAgPyBsb29rdXBfZGVyaXZlZF9mYWNlICh3 LCBmLCBpbnRlcm4gKCIrLXJldmVyc2VkLWJhci1wcmUtenYtZmFjZSIpLCBGUklOR0VfRkFDRV9J RCwgdHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX3R5cGUgPT0gTUNfUklHSFRf RlJJTkdFX0JJVE1BUAorICAgICAgICAgICAgICAgICAgICAgICAmJiBnbHlwaF9mbGF2b3IgIT0g TUNfUkVWRVJTRURfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAg ICAgICAgICAmJiBnbHlwaF9mbGF2b3IgIT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSX1JJR0hU X0FSUk9XCisgICAgICAgICAgICAgICAgICAgICAgICYmIGdseXBoX2ZsYXZvciAhPSBNQ19SRVZF UlNFRF9WRVJUSUNBTF9CQVIpCisgICAgICAgICAgICAgICAgICAgICAgPyBsb29rdXBfZGVyaXZl ZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLWJhci1wcmUtenYtZmFjZSIpLCBGUklOR0VfRkFDRV9J RCwgdHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgOiBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICAg ICAgcm93LT5jdXJzb3JfaW5fZnJpbmdlX3AgPSBmYWxzZTsKKyAgICAgICAgICByb3ctPnJpZ2h0 X2ZyaW5nZV9iaXRtYXAgPSBmcmluZ2VfYml0bWFwOworICAgICAgICAgIHJvdy0+cmlnaHRfZnJp bmdlX2ZhY2VfaWQgPSBmYWNlX2lkOworICAgICAgICAgIHJvdy0+cmlnaHRfZnJpbmdlX29mZnNl dCA9IDA7CisgICAgICAgICAgcm93LT5mcmluZ2VfYml0bWFwX3BlcmlvZGljX3AgPSBmYWxzZTsK KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChnbHlwaF9mbGF2b3IgPT0gTUNfR0xZUEgKKyAg ICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX0dMWVBITEVTUykKKyAgICAgICAg ICB7CisgICAgICAgICAgICBib29sIG9uX3AgPSB0cnVlOworICAgICAgICAgICAgRlJBTUVfUklG IChmKS0+bWNfc2NyaWJlX2N1cnNvciAodywgbWF0cml4LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBv cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwb3MsIHdk LCBoLCBsc2wsIGN1cnNvcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3Vyc29yX3dpZHRoLCBnbHlwaF9mbGF2b3IsIG9uX3AsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfcCk7CisgICAgICAgICAg fQorfQorCisvKiBEdW1wIGNvbnRlbnRzIG9mIGdseXBoIEdMWVBIIHRvIHN0ZGVyci4gIFJPVyBh bmQgQVJFQSBhcmUKKyAgIHRoZSBnbHlwaCByb3cgYW5kIGFyZWEgd2hlcmUgdGhlIGdseXBoIGNv bWVzIGZyb20uICovCit2b2lkCittY19kdW1wX2dseXBoIChzdHJ1Y3QgZ2x5cGhfcm93ICpyb3cs IHN0cnVjdCBnbHlwaCAqZ2x5cGgsIGludCBhcmVhLAorICAgICAgICAgICAgICAgaW50IHJlbGF0 aXZlX3gsIGludCB2cG9zKQoreworICBib29sIGdseXBoX3p2X3AgPSAoZ2x5cGggLSByb3ctPmds eXBoc1thcmVhXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAgICAgICAm JiBNQVRSSVhfUk9XX0VORF9DSEFSUE9TIChyb3cpID09IFpWKTsKKyAgaWYgKGdseXBoLT50eXBl ID09IENIQVJfR0xZUEgKKyAgICAgIHx8IGdseXBoLT50eXBlID09IEdMWVBITEVTU19HTFlQSCkK KyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsCisgICAgICAgICIgJTUicEQiZC8lLTVkICU1 ZCAlYyAlOSJwRCJkICVjICUzZCAweCUwNnggJTRkICUxLjFkJTEuMWQgICUzZCAlcyAlc1xuIiwK KyAgICAgICAgZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAgICAgICAoKHJvdy0+ dXNlZFthcmVhXSA9PSAwKSA/IDAgOiByb3ctPnVzZWRbYXJlYV0gLSAxKSwKKyAgICAgICAgcmVs YXRpdmVfeCwKKyAgICAgICAgKGdseXBoLT50eXBlID09IENIQVJfR0xZUEgKKyAgICAgICAgID8g J0MnCisgICAgICAgICA6ICdHJyksCisgICAgICAgIGdseXBoLT5jaGFycG9zLAorICAgICAgICAo QlVGRkVSUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgID8gJ0InCisgICAgICAgICA6IChTVFJJ TkdQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgPyAnUycKKyAgICAgICAgICAgIDogKE5J TFAgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAgICAgICA/ICcwJworICAgICAgICAgICAgICAg OiAnLScpKSksCisgICAgICAgIGdseXBoLT5waXhlbF93aWR0aCwKKyAgICAgICAgZ2x5cGgtPnUu Y2gsCisgICAgICAgIGdseXBoLT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+bGVmdF9ib3hfbGlu ZV9wLAorICAgICAgICBnbHlwaC0+cmlnaHRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPmhw b3MsIGdseXBoX3p2X3AgPyAiWlYiIDogIi0tIiwKKyAgICAgICAgbWNfY2hhcl90b19zdHJpbmcg KGdseXBoLT51LmNoKSk7CisgICAgfQorICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBTVFJFVENI X0dMWVBIKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgIiAlNSJwRCJk LyUtNWQgJTVkICVjICU5InBEImQgJWMgJTNkIDB4JTA2eCAlNGQgJTEuMWQlMS4xZCAgJTNkICVz ICVzXG4iLAorICAgICAgICBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAg ICgocm93LT51c2VkW2FyZWFdID09IDApID8gMCA6IHJvdy0+dXNlZFthcmVhXSAtIDEpLAorICAg ICAgICByZWxhdGl2ZV94LAorICAgICAgICAnUycsCisgICAgICAgIGdseXBoLT5jaGFycG9zLAor ICAgICAgICAoQlVGRkVSUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJ0InCisgICAg ICAgICAgOiAoU1RSSU5HUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJ1MnCisgICAg ICAgICAgOiAoTklMUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJzAnCisgICAgICAg ICAgOiAnLScpKSksCisgICAgICAgIGdseXBoLT5waXhlbF93aWR0aCwKKyAgICAgICAgMHUsCisg ICAgICAgIGdseXBoLT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+bGVmdF9ib3hfbGluZV9wLAor ICAgICAgICBnbHlwaC0+cmlnaHRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPmhwb3MsIGds eXBoX3p2X3AgPyAiWlYiIDogIi0tIiwKKyAgICAgICAgIlxcUyIpOworICAgIH0KKyAgZWxzZSBp ZiAoZ2x5cGgtPnR5cGUgPT0gSU1BR0VfR0xZUEgpCisgICAgeworICAgICAgZnByaW50ZiAoc3Rk ZXJyLAorICAgICAgICAiICU1InBEImQvJS01ZCAlNWQgJWMgJTkicEQiZCAlYyAlM2QgMHglMDZ4 ICU0ZCAlMS4xZCUxLjFkICAlM2QgJXMgJWNcbiIsCisgICAgICAgIGdseXBoIC0gcm93LT5nbHlw aHNbVEVYVF9BUkVBXSwKKyAgICAgICAgKChyb3ctPnVzZWRbYXJlYV0gPT0gMCkgPyAwIDogcm93 LT51c2VkW2FyZWFdIC0gMSksCisgICAgICAgIHJlbGF0aXZlX3gsCisgICAgICAgICdJJywKKyAg ICAgICAgZ2x5cGgtPmNoYXJwb3MsCisgICAgICAgIChCVUZGRVJQIChnbHlwaC0+b2JqZWN0KQor ICAgICAgICAgICAgPyAnQicKKyAgICAgICAgICA6IChTVFJJTkdQIChnbHlwaC0+b2JqZWN0KQor ICAgICAgICAgICAgPyAnUycKKyAgICAgICAgICA6IChOSUxQIChnbHlwaC0+b2JqZWN0KQorICAg ICAgICAgICAgPyAnMCcKKyAgICAgICAgICA6ICctJykpKSwKKyAgICAgICAgZ2x5cGgtPnBpeGVs X3dpZHRoLAorICAgICAgICAodW5zaWduZWQgaW50KSBnbHlwaC0+dS5pbWdfaWQsCisgICAgICAg IGdseXBoLT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+bGVmdF9ib3hfbGluZV9wLAorICAgICAg ICBnbHlwaC0+cmlnaHRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPmhwb3MsIGdseXBoX3p2 X3AgPyAiWlYiIDogIi0tIiwKKyAgICAgICAgJy4nKTsKKyAgICB9CisgIGVsc2UgaWYgKGdseXBo LT50eXBlID09IENPTVBPU0lURV9HTFlQSCkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIs CisgICAgICAgICIgJTUicEQiZC8lLTVkICU1ZCAlYyAlOSJwRCJkICVjICUzZCAweCUwNngiLAor ICAgICAgICBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICgocm93LT51 c2VkW2FyZWFdID09IDApID8gMCA6IHJvdy0+dXNlZFthcmVhXSAtIDEpLAorICAgICAgICByZWxh dGl2ZV94LAorICAgICAgICAnKycsCisgICAgICAgIGdseXBoLT5jaGFycG9zLAorICAgICAgICAo QlVGRkVSUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJ0InCisgICAgICAgICAgOiAo U1RSSU5HUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJ1MnCisgICAgICAgICAgOiAo TklMUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJzAnCisgICAgICAgICAgOiAnLScp KSksCisgICAgICAgIGdseXBoLT5waXhlbF93aWR0aCwKKyAgICAgICAgKHVuc2lnbmVkIGludCkg Z2x5cGgtPnUuY21wLmlkKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAlNGQgJTEuMWQlMS4x ZCIsCisgICAgICAgIGdseXBoLT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+bGVmdF9ib3hfbGlu ZV9wLAorICAgICAgICBnbHlwaC0+cmlnaHRfYm94X2xpbmVfcCk7CisgICAgICBpZiAoZ2x5cGgt PnUuY21wLmF1dG9tYXRpYykKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAlM2QgJXMgLiBb JWQtJWRdXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoLT5ocG9zLCBnbHlwaF96 dl9wID8gIlpWIiA6ICItLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGgtPnNsaWNl LmNtcC5mcm9tLCBnbHlwaC0+c2xpY2UuY21wLnRvKTsKKyAgICAgICAgZWxzZQorICAgICAgICBm cHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIH0KKyAgZWxzZSBpZiAoZ2x5cGgtPnR5cGUgPT0g WFdJREdFVF9HTFlQSCkKKyAgICB7CisjaWZuZGVmIEhBVkVfWFdJREdFVFMKKyAgICAgIGVhc3N1 bWUgKGZhbHNlKTsKKyNlbHNlCisgICAgICBmcHJpbnRmIChzdGRlcnIsCisgICAgICAgICIgICU1 ZC8lLTVkICU1ZCAlNGMgJTZkICVjICUzZCAweCUwNXggJTRkICUxLjFkJTEuMWQgICUzZCAlcyAl Y1xuIiwKKyAgICAgICAgZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAgICAgICAo KHJvdy0+dXNlZFthcmVhXSA9PSAwKSA/IDAgOiByb3ctPnVzZWRbYXJlYV0gLSAxKSwKKyAgICAg ICAgcmVsYXRpdmVfeCwKKyAgICAgICAgJ1gnLAorICAgICAgICBnbHlwaC0+Y2hhcnBvcywKKyAg ICAgICAgKEJVRkZFUlAgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAgID8gJ0InCisgICAgICAg ICA6IChTVFJJTkdQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgPyAnUycKKyAgICAgICAg IDogJy0nKSksCisgICAgICAgIGdseXBoLT5waXhlbF93aWR0aCwKKyAgICAgICAgZ2x5cGgtPmZh Y2VfaWQsCisgICAgICAgIGdseXBoLT5sZWZ0X2JveF9saW5lX3AsCisgICAgICAgIGdseXBoLT5y aWdodF9ib3hfbGluZV9wLAorICAgICAgICBnbHlwaC0+dS54d2lkZ2V0LAorICAgICAgICBnbHlw aC0+aHBvcywgZ2x5cGhfenZfcCA/ICJaViIgOiAiLS0iLAorICAgICAgICAnLicpOworI2VuZGlm CisgICAgfQorfQorCisvKiBEdW1wIHRoZSBjb250ZW50cyBvZiBnbHlwaCByb3cgYXQgVlBPUyBp biBNQVRSSVggdG8gc3RkZXJyLgorICAgR0xZUEhTIDAgbWVhbnMgZG9uJ3Qgc2hvdyBnbHlwaCBj b250ZW50cy4KKyAgIEdMWVBIUyAxIG1lYW5zIHNob3cgZ2x5cGhzIGluIHNob3J0IGZvcm0KKyAg IEdMWVBIUyA+IDEgbWVhbnMgc2hvdyBnbHlwaHMgaW4gbG9uZyBmb3JtLiAqLwordm9pZAorbWNf ZHVtcF9nbHlwaF9yb3cgKHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgaW50IHZwb3MsIGludCBnbHlw aHMpCit7CisgIGludCByZWxhdGl2ZV94ID0gMDsKKyAgaWYgKGdseXBocyAhPSAxKQorICAgIHsK KyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuRFVNUCBHTFlQSCBST1dcbiIpOworICAgICAgZnBy aW50ZiAoc3RkZXJyLCAiUm93ICAgICBTdGFydCAgICAgICBFbmQgVXNlZCBvRT48XFxDVFpGZXNt ICAgICBYICAgIFkgICAgVyAgICBIICAgIFYgICAgQSAgICBQXG4iKTsKKyAgICAgIGZwcmludGYg KHN0ZGVyciwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisgICAgICBmcHJpbnRmIChzdGRl cnIsICIlM2QgJTkicEQiZCAlOSJwRCJkICU0ZCAlMS4xZCUxLjFkJTEuMWQlMS4xZFwKKyUxLjFk JTEuMWQlMS4xZCUxLjFkJTEuMWQlMS4xZCUxLjFkJTEuMWQgICU0ZCAlNGQgJTRkICU0ZCAlNGQg JTRkICU0ZFxuIiwKKyAgICAgICAgIHZwb3MsCisgICAgICAgICBNQVRSSVhfUk9XX1NUQVJUX0NI QVJQT1MgKHJvdyksCisgICAgICAgICBNQVRSSVhfUk9XX0VORF9DSEFSUE9TIChyb3cpLAorICAg ICAgICAgcm93LT51c2VkW1RFWFRfQVJFQV0sCisgICAgICAgICByb3ctPmNvbnRhaW5zX292ZXJs YXBwaW5nX2dseXBoc19wLAorICAgICAgICAgcm93LT5lbmFibGVkX3AsCisgICAgICAgICByb3ct PnRydW5jYXRlZF9vbl9sZWZ0X3AsCisgICAgICAgICByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9w LAorICAgICAgICAgcm93LT5jb250aW51ZWRfcCwKKyAgICAgICAgIE1BVFJJWF9ST1dfQ09OVElO VUFUSU9OX0xJTkVfUCAocm93KSwKKyAgICAgICAgIE1BVFJJWF9ST1dfRElTUExBWVNfVEVYVF9Q IChyb3cpLAorICAgICAgICAgcm93LT5lbmRzX2F0X3p2X3AsCisgICAgICAgICByb3ctPmZpbGxf bGluZV9wLAorICAgICAgICAgcm93LT5lbmRzX2luX21pZGRsZV9vZl9jaGFyX3AsCisgICAgICAg ICByb3ctPnN0YXJ0c19pbl9taWRkbGVfb2ZfY2hhcl9wLAorICAgICAgICAgcm93LT5tb3VzZV9m YWNlX3AsCisgICAgICAgICByb3ctPngsCisgICAgICAgICByb3ctPnksCisgICAgICAgICByb3ct PnBpeGVsX3dpZHRoLAorICAgICAgICAgcm93LT5oZWlnaHQsCisgICAgICAgICByb3ctPnZpc2li bGVfaGVpZ2h0LAorICAgICAgICAgcm93LT5hc2NlbnQsCisgICAgICAgICByb3ctPnBoeXNfYXNj ZW50KTsKKyAgICAgIC8qIFRoZSBuZXh0IDMgbGluZXMgc2hvdWxkIGFsaWduIHRvICJTdGFydCIg aW4gdGhlIGhlYWRlci4gKi8KKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICAlOSJwRCJkICU5 InBEImRcdCU1ZFxuIiwgcm93LT5zdGFydC5vdmVybGF5X3N0cmluZ19pbmRleCwKKyAgICAgICAg IHJvdy0+ZW5kLm92ZXJsYXlfc3RyaW5nX2luZGV4LAorICAgICAgICAgcm93LT5jb250aW51YXRp b25fbGluZXNfd2lkdGgpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgICU5InBEImQgJTki cEQiZFxuIiwKKyAgICAgICAgIENIQVJQT1MgKHJvdy0+c3RhcnQuc3RyaW5nX3BvcyksCisgICAg ICAgICBDSEFSUE9TIChyb3ctPmVuZC5zdHJpbmdfcG9zKSk7CisgICAgICBmcHJpbnRmIChzdGRl cnIsICIgICAgJTlkICU5ZFxuIiwgcm93LT5zdGFydC5kcHZlY19pbmRleCwKKyAgICAgICAgIHJv dy0+ZW5kLmRwdmVjX2luZGV4KTsKKyAgICB9CisgIGlmIChnbHlwaHMgPiAxKQorICAgIHsKKyAg ICAgIGZvciAoaW50IGFyZWEgPSBMRUZUX01BUkdJTl9BUkVBOyBhcmVhIDwgTEFTVF9BUkVBOyAr K2FyZWEpCisgICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgZ2x5cGggKmdseXBoID0gcm93LT5n bHlwaHNbYXJlYV07CisgICAgICAgICAgc3RydWN0IGdseXBoICpnbHlwaF9lbmQgPSBnbHlwaCAr IHJvdy0+dXNlZFthcmVhXTsKKyAgICAgICAgICAvKiBHbHlwaCBmb3IgYSBsaW5lIGVuZCBpbiB0 ZXh0LiAqLworICAgICAgICAgIGlmIChhcmVhID09IFRFWFRfQVJFQSAmJiBnbHlwaCA9PSBnbHlw aF9lbmQgJiYgZ2x5cGgtPmNoYXJwb3MgPiAwKQorICAgICAgICAgICAgKytnbHlwaF9lbmQ7Cisg ICAgICAgICAgaWYgKGdseXBoIDwgZ2x5cGhfZW5kKQorICAgICAgICAgICAgZnByaW50ZiAoc3Rk ZXJyLCAiR2x5cGgjL1RvdGFsIFJlbC5YIFQgICAgICAgUG9zIE8gICBXICAgICBDb2RlIEZhY2Ug TFIgSFBPUyBaViBDXG4iKTsKKyAgICAgICAgICBmb3IgKDsgZ2x5cGggPCBnbHlwaF9lbmQ7ICsr Z2x5cGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1jX2R1bXBfZ2x5cGggKHJvdywg Z2x5cGgsIGFyZWEsIHJlbGF0aXZlX3gsIHZwb3MpOworICAgICAgICAgICAgICByZWxhdGl2ZV94 ICs9IGdseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KyAgICBlbHNlIGlmIChnbHlwaHMgPT0gMSkKKyAgICAgIHsKKyAgICAgICAgY2hhciBzW1NIUlRf TUFYICsgNF07CisgICAgICAgIGZvciAoaW50IGFyZWEgPSBMRUZUX01BUkdJTl9BUkVBOyBhcmVh IDwgTEFTVF9BUkVBOyArK2FyZWEpCisgICAgICAgICAgeworICAgICAgICAgICAgaW50IGk7Cisg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93LT51c2VkW2FyZWFdOyArK2kpCisgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5cGggKmdseXBoID0gcm93LT5nbHlw aHNbYXJlYV0gKyBpOworICAgICAgICAgICAgICAgIGlmIChpID09IHJvdy0+dXNlZFthcmVhXSAt IDEKKyAgICAgICAgICAgICAgICAgICAgJiYgYXJlYSA9PSBURVhUX0FSRUEKKyAgICAgICAgICAg ICAgICAgICAgJiYgTklMUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgICAgICAgICAgJiYg Z2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSAorICAgICAgICAgICAgICAgICAgICAmJiBnbHlwaC0+ dS5jaCA9PSAnICcpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0 cmNweSAoJnNbaV0sICJbXFxuXSIpOworICAgICAgICAgICAgICAgICAgICBpICs9IDQ7CisgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9 PSBDSEFSX0dMWVBICisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBnbHlwaC0+dS5jaCA8 IDB4ODAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGdseXBoLT51LmNoID49ICcgJykK KyAgICAgICAgICAgICAgICAgICAgc1tpXSA9IGdseXBoLT51LmNoOworICAgICAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgc1tpXSA9ICcuJzsKKyAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgc1tpXSA9ICdcMCc7CisgICAgICAgICAgICBmcHJpbnRmIChzdGRl cnIsICIlM2Q6ICglZCkgJyVzJ1xuIiwgdnBvcywgcm93LT5lbmFibGVkX3AsIHMpOworICAgICAg ICAgIH0KKyAgICAgIH0KK30KKworREVGVU4gKCJtYy1kdW1wLWdseXBoLXJvdyIsIEZtY19kdW1w X2dseXBoX3JvdywgU21jX2R1bXBfZ2x5cGhfcm93LCAxLCAyLCAiUCIsCisgICAgICAgZG9jOiAv KiBEdW1wIGdseXBoIHJvdyBST1cgdG8gc3RkZXJyLgorSW50ZXJhY3RpdmVseSwgUk9XIGlzIHRo ZSBwcmVmaXggbnVtZXJpYyBhcmd1bWVudCBhbmQgZGVmYXVsdHMgdG8KK3RoZSByb3cgd2hpY2gg ZGlzcGxheXMgcG9pbnQuCitPcHRpb25hbCBhcmd1bWVudCBHTFlQSFMgMCBtZWFucyBkb24ndCBk dW1wIGdseXBocy4KK0dMWVBIUyAxIG1lYW5zIGR1bXAgZ2x5cGhzIGluIHNob3J0IGZvcm0uCitH TFlQSFMgPiAxIG9yIG9taXR0ZWQgbWVhbnMgZHVtcCBnbHlwaHMgaW4gbG9uZyBmb3JtLiAgKi8p CisgIChMaXNwX09iamVjdCByb3csIExpc3BfT2JqZWN0IGdseXBocykKK3sKKyAgc3RydWN0IHdp bmRvdyAqdyA9IFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyk7CisgIHN0cnVjdCBnbHlwaF9tYXRy aXggKm1hdHJpeCA9IHctPmN1cnJlbnRfbWF0cml4OworICBFTUFDU19JTlQgdnBvczsKKyAgaWYg KE5JTFAgKHJvdykpCisgICAgeworICAgICAgaW50IGQxLCBkMiwgZDMsIGQ0LCBkNSwgeXBvczsK KyAgICAgIGJvb2wgdmlzaWJsZV9wID0gcG9zX3Zpc2libGVfcCAodywgUFQsICZkMSwgJmQyLCAm ZDMsICZkNCwgJmQ1LCAmeXBvcyk7CisgICAgICBpbnQgaGVhZGVyX2xpbmVfaGVpZ2h0ID0gV0lO RE9XX0hFQURFUl9MSU5FX0hFSUdIVCAodyk7CisgICAgICBpbnQgdm9mZnNldCA9IChoZWFkZXJf bGluZV9oZWlnaHQgPiAwCisgICAgICAgICAgICAgICAgICAgICAmJiB5cG9zID4gMCkKKyAgICAg ICAgICAgICAgICAgICAgICA/IHlwb3MgKyAxCisgICAgICAgICAgICAgICAgICAgICAgOiB5cG9z OworICAgICAgaWYgKHZpc2libGVfcCkKKyAgICAgICAgdnBvcyA9IHZvZmZzZXQ7CisgICAgICAg IGVsc2UKKyAgICAgICAgICB2cG9zID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgeworICAg ICAgICBDSEVDS19OVU1CRVIgKHJvdyk7CisgICAgICAgIHZwb3MgPSBYRklYTlVNIChyb3cpOwor ICAgICAgfQorICBpZiAodnBvcyA+PSAwICYmIHZwb3MgPCBtYXRyaXgtPm5yb3dzKQorICAgIG1j X2R1bXBfZ2x5cGhfcm93IChNQVRSSVhfUk9XIChtYXRyaXgsIHZwb3MpLAorICAgICAgICB2cG9z LAorICAgICAgICBUWVBFX1JBTkdFRF9GSVhOVU1QIChpbnQsIGdseXBocykgPyBYRklYTlVNIChn bHlwaHMpIDogMik7CisgIHJldHVybiBRbmlsOworfQorCit2b2lkCittY19kdW1wX2dseXBoX21h dHJpeCAoc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBpbnQgZ2x5cGhzKQoreworICBpbnQg aTsKKyAgZm9yIChpID0gMDsgaSA8IG1hdHJpeC0+bnJvd3M7ICsraSkKKyAgICBtY19kdW1wX2ds eXBoX3JvdyAoTUFUUklYX1JPVyAobWF0cml4LCBpKSwgaSwgZ2x5cGhzKTsKK30KKworREVGVU4g KCJtYy1kdW1wLWdseXBoLW1hdHJpeCIsIEZtY19kdW1wX2dseXBoX21hdHJpeCwKKyAgICAgICBT bWNfZHVtcF9nbHlwaF9tYXRyaXgsIDAsIDEsICJwIiwKKyAgICAgICBkb2M6IC8qIER1bXAgdGhl IGN1cnJlbnQgbWF0cml4IG9mIHRoZSBzZWxlY3RlZCB3aW5kb3cgdG8gc3RkZXJyLgorU2hvd3Mg Y29udGVudHMgb2YgZ2x5cGggcm93IHN0cnVjdHVyZXMuICBXaXRoIG5vbi1uaWwKK3BhcmFtZXRl ciBHTFlQSFMsIGR1bXAgZ2x5cGhzIGFzIHdlbGwuICBJZiBHTFlQSFMgaXMgMSBzaG93CitnbHlw aHMgaW4gc2hvcnQgZm9ybSwgb3RoZXJ3aXNlIHNob3cgZ2x5cGhzIGluIGxvbmcgZm9ybS4KKy0g SW50ZXJhY3RpdmVseSwgbm8gYXJndW1lbnQgbWVhbnMgc2hvdyBnbHlwaHMgaW4gc2hvcnQgZm9y bTsKK3dpdGggbnVtZXJpYyBhcmd1bWVudCwgaXRzIHZhbHVlIGlzIHBhc3NlZCBhcyB0aGUgR0xZ UEhTIGZsYWcuICAqLykKKyAgKExpc3BfT2JqZWN0IGdseXBocykKK3sKKyAgc3RydWN0IHdpbmRv dyAqdyA9IFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyk7CisgIHN0cnVjdCBidWZmZXIgKmJ1ZmZl ciA9IFhCVUZGRVIgKHctPmNvbnRlbnRzKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiUFQgPSAlInBE ImQsIEJFR1YgPSAlInBEImQuIFpWID0gJSJwRCJkXG4iLAorICAgICBCVUZfUFQgKGJ1ZmZlciks IEJVRl9CRUdWIChidWZmZXIpLCBCVUZfWlYgKGJ1ZmZlcikpOworICBmcHJpbnRmIChzdGRlcnIs ICJDdXJzb3IgeCA9ICVkLCB5ID0gJWQsIGhwb3MgPSAlZCwgdnBvcyA9ICVkXG4iLAorICAgICB3 LT5jdXJzb3IueCwgdy0+Y3Vyc29yLnksIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcyk7 CisgIGZwcmludGYgKHN0ZGVyciwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PVxuIik7CisgIG1jX2R1bXBfZ2x5cGhfbWF0cml4ICh3LT5jdXJyZW50X21hdHJp eCwKKyAgICAgICAgIFRZUEVfUkFOR0VEX0ZJWE5VTVAgKGludCwgZ2x5cGhzKSA/IFhGSVhOVU0g KGdseXBocykgOiAwKTsKKyAgcmV0dXJuIFFuaWw7Cit9CisKK2Jvb2wKK21jX3RyYXZlcnNlX2Nh Y2hlX3AgKHN0cnVjdCBtY19tYXRyaXggbWF0cml4LCBlbnVtIG1jX2NhY2hlX3R5cGUgY2FjaGVf dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIGludCB2bnRoLCBpbnQgbnRoKQoreworICBpZiAo dm50aCA8IG1hdHJpeC52cG9zX3VzZWQKKyAgICAgICYmIG1hdHJpeC5jdXJzb3JzX3VzZWRbY2Fj aGVfdHlwZV0gPiAwCisgICAgICAmJiBudGggPCBtYXRyaXgudnBvc1t2bnRoXS5jYWNoZV91c2Vk W2NhY2hlX3R5cGVdKQorICAgIHJldHVybiB0cnVlOworICAgIGVsc2UKKyAgICAgIHJldHVybiBm YWxzZTsKK30KKwordm9pZAorbWNfcmVzZXRfY2FjaGUgKHN0cnVjdCB3aW5kb3cgKncpCit7Cisg IGlmICghQlVGRkVSUCAody0+Y29udGVudHMpKQorICAgIHJldHVybjsKKyAgZm9yIChlbnVtIG1j X2NhY2hlX3R5cGUgY2FjaGVfdHlwZSA9IE1DX0NBQ0hFOworICAgICAgIGNhY2hlX3R5cGUgPCBO T19DQUNIRTsKKyAgICAgICArK2NhY2hlX3R5cGUpCisgICAgeworICAgICAgYm9vbCBidmFyX2Fj dGl2ZV9wOworICAgICAgc3dpdGNoIChjYWNoZV90eXBlKQorICAgICAgICB7CisgICAgICAgICAg Y2FzZSBOT19DQUNIRToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICAgICAgfQorICAgICAgICAgIGNhc2UgTUNfQ0FDSEU6CisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgIGlmIChCVUZGRVJQICh3LT5jb250ZW50cykKKyAgICAgICAgICAgICAgICAgICYm IE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfY29uZikpKQorICAgICAgICAg ICAgICAgIGJ2YXJfYWN0aXZlX3AgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChC VUZGRVJQICh3LT5jb250ZW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhTklMUCAo QlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtY19jb25mKSkpCisgICAgICAgICAgICAgICAg ICBidmFyX2FjdGl2ZV9wID0gdHJ1ZTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICB9CisgICAgICAgICAgY2FzZSBDSF9DQUNIRToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgaWYgKEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgICAgICAgICAgICAgJiYgTklMUCAo QlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkpCisgICAgICAgICAgICAg ICAgYnZhcl9hY3RpdmVfcCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKEJVRkZF UlAgKHctPmNvbnRlbnRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFS IChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKSkKKyAgICAgICAgICAgICAgICAg IGJ2YXJfYWN0aXZlX3AgPSB0cnVlOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICBjYXNlIEZDX0NBQ0hFOgorICAgICAgICAgICAgeworICAgICAgICAgICAg ICBpZiAoQlVGRkVSUCAody0+Y29udGVudHMpCisgICAgICAgICAgICAgICAgICAmJiBOSUxQIChC VkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGZjX3Zpc2libGUpKSkKKyAgICAgICAgICAgICAg ICBidmFyX2FjdGl2ZV9wID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoQlVGRkVS UCAody0+Y29udGVudHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIg KFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfdmlzaWJsZSkpKQorICAgICAgICAgICAgICAgICAg YnZhcl9hY3RpdmVfcCA9IHRydWU7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICBpZiAoIWJ2YXJfYWN0aXZlX3ApCisgICAgICAgIHsKKyAgICAg ICAgICAvKiBEZWNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgdG8gYSBiYXJlIG1pbmltdW0u ICovCisgICAgICAgICAgZm9yIChpbnQgdm50aCA9IDA7IHZudGggPCB3LT5tY19tYXRyaXgudnBv c191c2VkOyArK3ZudGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICh3LT5tY19t YXRyaXgudnBvc1t2bnRoXS5jYWNoZV9hbGxvY2F0ZWRbY2FjaGVfdHlwZV0gPiAxKQorICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNh Y2hlW2NhY2hlX3R5cGVdID0KKyAgICAgICAgICAgICAgICAgICAgeG5yZWFsbG9jICh3LT5tY19t YXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXSwgMSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YgKnctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hl X3R5cGVdKTsKKyAgICAgICAgICAgICAgICAgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hl X2FsbG9jYXRlZFtjYWNoZV90eXBlXSA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5cGVdID0gMDsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICB3LT5tY19tYXRyaXguY3Vyc29yc191c2VkW2NhY2hl X3R5cGVdID0gMDsKKyAgICAgICAgfQorICAgICAgICAvLyAgQWx0aG91Z2ggaXQgd291bGQgbm90 IGJlIHZlcnkgZWZmaWNpZW50LCBpdCBpcyBwb3NzaWJsZSB0byBzZXQKKyAgICAgICAgLy8gIHRo ZSBfdXNlZF8gZWxlbWVudHMgb2YgdGhlIGFycmF5IHRvIHplcm8uICBJbiBzdWNoIGEgY2FzZSwg dGhlCisgICAgICAgIC8vICAuLi5fZWx0cy5hbGxvY2F0ZWRbY2FjaGVfdHlwZV0gd291bGQgcmVt YWluIHRoZSBzYW1lLgorICAgICAgICAvLyAgbWVtc2V0ICh3LT5tY19tYXRyaXgudnBvc1tAXS5j YWNoZVtjYWNoZV90eXBlXSwgMCwgdy0+bWNfbWF0cml4LnZwb3NbQF0uY2FjaGVfdXNlZFtjYWNo ZV90eXBlXQorICAgICAgICAvLyAgICAgICAgICAqIChzaXplb2YgKnctPm1jX21hdHJpeC52cG9z W0BdLmNhY2hlW2NhY2hlX3R5cGVdKSk7CisgICAgICAgIC8vICBBdCB0aGlzIHRpbWUsIHdlIGFy ZSBpbnN0ZWFkIGxlYXZpbmcgdGhlIGFycmF5IGFzLWlzIHdpdGggdGhlCisgICAgICAgIC8vICB1 bmRlcnN0YW5kaW5nIHRoYXQgaXQgd2lsbCBjb250YWluIG91dGRhdGVkIGRhdGEgKGFrYSBnYXJi YWdlKS4KKyAgICAgICAgLy8gIFVzaW5nIHRoZSBjb3VudGVyIGB3LT5tY19tYXRyaXgudnBvc1tA XS5jYWNoZV91c2VkW2NhY2hlX3R5cGVdYCwgd2UgdHJhY2sgY3VycmVudCBkYXRhLgorICAgICAg ICBlbHNlIGlmIChidmFyX2FjdGl2ZV9wKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAo aW50IHZudGggPSAwOyB2bnRoIDwgdy0+bWNfbWF0cml4LnZwb3NfdXNlZDsgKyt2bnRoKQorICAg ICAgICAgICAgICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5cGVd ID0gMDsKKyAgICAgICAgICAgIHctPm1jX21hdHJpeC5jdXJzb3JzX3VzZWRbY2FjaGVfdHlwZV0g PSAwOworICAgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCittY19oZWxwZXIgKHN0 cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwgc3RydWN0IGdseXBo X3JvdyAqcm93LAorICAgICAgICAgICBzdHJ1Y3QgZ2x5cGggKmdseXBoLCBpbnQgeCwgaW50IGZ4 LCBpbnQgeSwgaW50IGZ5LCBpbnQgaHBvcywgaW50IHZwb3MsCisgICAgICAgICAgIGludCB3ZCwg aW50IGgsIGVudW0gbWNfY3Vyc29yX3R5cGUgY3Vyc29yX3R5cGUsIGludCBjdXJzb3Jfd2lkdGgs CisgICAgICAgICAgIGVudW0gbWNfcm93X3Bvc2l0aW9uIHJvd19wb3NpdGlvbiwgc3RydWN0IG1j X1JHQiBmb3JlZ3JvdW5kLAorICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGJhY2tncm91bmQsIGJv b2wgYWN0aXZlX3AsIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciwKKyAgICAgICAgICAgYm9v bCBkcmF3X3AsIGVudW0gbWNfZHJhd19yb3dfdHlwZSBmcm9tX3doZXJlLAorICAgICAgICAgICBl bnVtIG1jX2NhY2hlX3R5cGUgY2FjaGVfdHlwZSwgZW51bSBtY19lbmdpbmVfdHlwZSBhY3Rpb25f dHlwZSkKK3sKKyAgaW50IHZudGggPSBNQVRSSVhfUk9XX1ZQT1MgKHJvdywgbWF0cml4KTsKKyAg aWYgKG1jX3N0ZGVycl9wCisgICAgICAmJiBkcmF3X3ApCisgICAgeworICAgICAgaW50IGNoYXJw b3MgPSBnbHlwaC0+Y2hhcnBvczsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxubWNfaGVscGVy ICglcyk6ICBmcm9tX3doZXJlICglcylcblwKKyAgYWN0aW9uX3R5cGUgKCVzKSB8IGZsYXZvciAo JXMpIHwgY2hhcnBvcyAoJWQpXG5cCisgIGNoYXIgKCVzKSB8IHggKCVkKSB8IGZ4ICglZCkgfCB5 ICglZCkgfCBmeSAoJWQpIHwgaHBvcyAoJWQvJWQpIHwgdnBvcyAoJWQpXG5cCisgIHdkICglZCkg fCBoICglZCkgfCBjdXJzb3JfdHlwZSAoJXMpIHwgY3Vyc29yX3dpZHRoICglZCkgfCBhY3RpdmVf cCAoJXMpXG5cCisgIEZHLVJHQiAoJWYvJWYvJWYpIHwgQkctUkdCICglZi8lZi8lZilcbiIsCisg ICAgICBtY193aW5kb3cgKHcpLCBtY19kcmF3X3Jvd190eXBlX3RvX3N0cmluZyAoZnJvbV93aGVy ZSksCisgICAgICBtY19lbmdpbmVfdHlwZV90b19zdHJpbmcgKGFjdGlvbl90eXBlKSwgbWNfZmxh dm9yX3RvX3N0cmluZyAoZ2x5cGhfZmxhdm9yKSwKKyAgICAgIGNoYXJwb3MsIG1jX2NoYXJfdG9f c3RyaW5nIChnbHlwaC0+dS5jaCksIHgsIGZ4LCB5LCBmeSwgaHBvcywKKyAgICAgIHJvdy0+dXNl ZFtURVhUX0FSRUFdIC0gMSwgdnBvcywgd2QsIGgsIG1jX2N1cnNvcl90eXBlX3RvX3N0cmluZyAo Y3Vyc29yX3R5cGUpLAorICAgICAgY3Vyc29yX3dpZHRoLCAoYWN0aXZlX3AgPyAidHJ1ZSIgOiAi ZmFsc2UiKSwgZm9yZWdyb3VuZC5yZWQsIGZvcmVncm91bmQuZ3JlZW4sCisgICAgICBmb3JlZ3Jv dW5kLmJsdWUsIGJhY2tncm91bmQucmVkLCBiYWNrZ3JvdW5kLmdyZWVuLCBiYWNrZ3JvdW5kLmJs dWUpOworICAgIH0KKyAgYm9vbCByZW1vdmVfcCA9IGZhbHNlOworICBpZiAoZHJhd19wCisgICAg ICAmJiAoZnJvbV93aGVyZSA9PSBTS0lQUEVECisgICAgICAgICAgfHwgZnJvbV93aGVyZSA9PSBQ T1NUX0NIQU5HRUQKKyAgICAgICAgICB8fCBmcm9tX3doZXJlID09IFVOQ0hBTkdFRAorICAgICAg ICAgIHx8IGZyb21fd2hlcmUgPT0gU0VUX0NVUlNPUl9UV08pKQorICAgIHsKKyAgICAgIGJvb2wg c2FtZV9wID0gZmFsc2U7CisgICAgICBmb3IgKGludCBudGggPSAwOyBudGggPCB3LT5tY19tYXRy aXgudnBvc1t2bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5cGVdOyArK250aCkKKyAgICAgICAgewor ICAgICAgICAgIHNhbWVfcCB8PQorICAgICAgICAgICAgKHctPm1jX21hdHJpeC52cG9zW3ZudGhd LmNhY2hlW2NhY2hlX3R5cGVdW250aF0uc2FtZV9wID09IHRydWUKKyAgICAgICAgICAgICAmJiB3 LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnR5cGUg PT0gZ2x5cGgtPnR5cGUKKyAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5j YWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLmJ5dGVwb3MgPT0gZ2x5cGgtPmJ5dGVwb3MKKyAg ICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtu dGhdLmdseXBoLmNoYXJwb3MgPT0gZ2x5cGgtPmNoYXJwb3MKKyAgICAgICAgICAgICAmJiB3LT5t Y19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnUudmFsID09 IGdseXBoLT51LnZhbAorICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNh Y2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGguZmFjZV9pZCA9PSBnbHlwaC0+ZmFjZV9pZAorICAg ICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250 aF0uZ2x5cGgucGFkZGluZ19wID09IGdseXBoLT5wYWRkaW5nX3AKKyAgICAgICAgICAgICAmJiB3 LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLmxlZnRf Ym94X2xpbmVfcCA9PSBnbHlwaC0+bGVmdF9ib3hfbGluZV9wCisgICAgICAgICAgICAgJiYgdy0+ bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlwaC5yaWdodF9i b3hfbGluZV9wID09IGdseXBoLT5yaWdodF9ib3hfbGluZV9wCisgICAgICAgICAgICAgJiYgdy0+ bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlwaC52b2Zmc2V0 ID09IGdseXBoLT52b2Zmc2V0CisgICAgICAgICAgICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50 aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlwaC5waXhlbF93aWR0aCA9PSBnbHlwaC0+cGl4 ZWxfd2lkdGgKKyAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtj YWNoZV90eXBlXVtudGhdLmdseXBoLnNsaWNlLmltZy54ID09IGdseXBoLT5zbGljZS5pbWcueAor ICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVd W250aF0uZ2x5cGguc2xpY2UuaW1nLnkgPT0gZ2x5cGgtPnNsaWNlLmltZy55CisgICAgICAgICAg ICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlw aC5zbGljZS5pbWcud2lkdGggPT0gZ2x5cGgtPnNsaWNlLmltZy53aWR0aAorICAgICAgICAgICAg ICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGgu c2xpY2UuaW1nLmhlaWdodCA9PSBnbHlwaC0+c2xpY2UuaW1nLmhlaWdodAorICAgICAgICAgICAg ICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGgu c2xpY2UuY21wLmZyb20gPT0gZ2x5cGgtPnNsaWNlLmNtcC5mcm9tCisgICAgICAgICAgICAgJiYg dy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS54ID09IHgKKyAg ICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtu dGhdLmZ4ID09IGZ4CisgICAgICAgICAgICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2Fj aGVbY2FjaGVfdHlwZV1bbnRoXS55ID09IHkKKyAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgu dnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmZ5ID09IGZ5CisgICAgICAgICAgICAg JiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5ocG9zID09 IGhwb3MKKyAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo ZV90eXBlXVtudGhdLnZwb3MgPT0gdnBvcworICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52 cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0ud2QgPT0gd2QKKyAgICAgICAgICAgICAm JiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmggPT0gaAor ICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVd W250aF0uY3Vyc29yX3R5cGUgPT0gY3Vyc29yX3R5cGUKKyAgICAgICAgICAgICAmJiB3LT5tY19t YXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmN1cnNvcl93aWR0aCA9PSBj dXJzb3Jfd2lkdGgKKyAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhdLmZnLnJlZCA9PSBmb3JlZ3JvdW5kLnJlZAorICAgICAgICAgICAg ICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZmcuZ3Jl ZW4gPT0gZm9yZWdyb3VuZC5ncmVlbgorICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9z W3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZmcuYmx1ZSA9PSBmb3JlZ3JvdW5kLmJsdWUK KyAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBl XVtudGhdLmJnLnJlZCA9PSBiYWNrZ3JvdW5kLnJlZAorICAgICAgICAgICAgICYmIHctPm1jX21h dHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uYmcuZ3JlZW4gPT0gYmFja2dy b3VuZC5ncmVlbgorICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hl W2NhY2hlX3R5cGVdW250aF0uYmcuYmx1ZSA9PSBiYWNrZ3JvdW5kLmJsdWUKKyAgICAgICAgICAg ICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmFjdGl2 ZV9wID09IGFjdGl2ZV9wCisgICAgICAgICAgICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0u Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlwaF9mbGF2b3IgPT0gZ2x5cGhfZmxhdm9yCisgICAg ICAgICAgICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRo XS5yb3dfcG9zaXRpb24gPT0gcm93X3Bvc2l0aW9uCisgICAgICAgICAgICAgJiYgdy0+bWNfbWF0 cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5lbmFibGVkX3AgPT0gdHJ1ZSk7 CisgICAgICAgIH0KKyAgICAgIC8qIEluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZXJlIGFyZSBubyBj aGFuZ2VzIChlLmcuLCBDLWcpLCB3ZSBzdGlsbCBuZWVkIHRvCisgICAgICByZXNldCB0aGUgbGVm dC9yaWdodCBmcmluZ2UgYml0bWFwIGluZGljYXRvcnMuICovCisgICAgICBpZiAoIXNhbWVfcAor ICAgICAgICAgIHx8IGN1cnNvcl90eXBlID09IE1DX0xFRlRfRlJJTkdFX0JJVE1BUAorICAgICAg ICAgIHx8IGN1cnNvcl90eXBlID09IE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVApCisgICAgICAgIG1j X2RyYXdfZXJhc2VfaHlicmlkICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHksIGZ5LCBocG9zLCB2 cG9zLCB3ZCwgaCwgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj dXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsIGFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIHJlbW92ZV9w KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZSBpZiAoZHJhd19wCisgICAgICAgICAg ICAgJiYgKGZyb21fd2hlcmUgPT0gU0NSSUJFX09ORQorICAgICAgICAgICAgICAgICB8fCBmcm9t X3doZXJlID09IFNDUklCRV9UV08KKyAgICAgICAgICAgICAgICAgfHwgZnJvbV93aGVyZSA9PSBT Q1JJQkVfVEhSRUUKKyAgICAgICAgICAgICAgICAgfHwgZnJvbV93aGVyZSA9PSBOT1dIRVJFKSkK KyAgICAgIHsKKyAgICAgICAgbWNfZHJhd19lcmFzZV9oeWJyaWQgKHcsIG1hdHJpeCwgcm93LCB4 LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdkLCBoLCBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgYWN0aXZlX3AsIGds eXBoX2ZsYXZvciwgcmVtb3ZlX3ApOworICAgICAgICByZXR1cm47CisgICAgICB9CisgIGlmIChj YWNoZV90eXBlID09IE5PX0NBQ0hFKQorICAgIHJldHVybjsKKyAgKyt3LT5tY19tYXRyaXguY3Vy c29yc191c2VkW2NhY2hlX3R5cGVdOworICBpZiAodm50aCA+PSB3LT5tY19tYXRyaXgudnBvc191 c2VkKQorICAgIHctPm1jX21hdHJpeC52cG9zX3VzZWQgPSB2bnRoICsgMTsKKyAgaWYgKHctPm1j X21hdHJpeC52cG9zX2FsbG9jYXRlZCA8IHctPm1jX21hdHJpeC52cG9zX3VzZWQpCisgICAgewor ICAgICAgaW50IG9sZF9hbGxvYyA9IHctPm1jX21hdHJpeC52cG9zX2FsbG9jYXRlZDsKKyAgICAg IGludCBuZXdfZWx0cyA9IHctPm1jX21hdHJpeC52cG9zX3VzZWQgLSB3LT5tY19tYXRyaXgudnBv c19hbGxvY2F0ZWQ7CisgICAgICB3LT5tY19tYXRyaXgudnBvcyA9IHhwYWxsb2MgKHctPm1jX21h dHJpeC52cG9zLCAmdy0+bWNfbWF0cml4LnZwb3NfYWxsb2NhdGVkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuZXdfZWx0cywgSU5UX01BWCwgc2l6ZW9mICp3LT5tY19tYXRy aXgudnBvcyk7CisgICAgICBtZW1zZXQgKHctPm1jX21hdHJpeC52cG9zICsgb2xkX2FsbG9jLCAw LAorICAgICAgICAgICAgICAgKHctPm1jX21hdHJpeC52cG9zX2FsbG9jYXRlZCAtIG9sZF9hbGxv YykgKiBzaXplb2YgKnctPm1jX21hdHJpeC52cG9zKTsKKyAgICB9CisgICsrdy0+bWNfbWF0cml4 LnZwb3Nbdm50aF0uY2FjaGVfdXNlZFtjYWNoZV90eXBlXTsKKyAgaWYgKHctPm1jX21hdHJpeC52 cG9zW3ZudGhdLmNhY2hlX2FsbG9jYXRlZFtjYWNoZV90eXBlXSA8IHctPm1jX21hdHJpeC52cG9z W3ZudGhdLmNhY2hlX3VzZWRbY2FjaGVfdHlwZV0pCisgICAgeworICAgICAgaW50IG9sZF9hbGxv YyA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlX2FsbG9jYXRlZFtjYWNoZV90eXBlXTsK KyAgICAgIGludCBuZXdfZWx0cyA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlX3VzZWRb Y2FjaGVfdHlwZV0gLSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZV9hbGxvY2F0ZWRbY2Fj aGVfdHlwZV07CisgICAgICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBl XSA9IHhwYWxsb2MgKHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVfYWxsb2NhdGVkW2NhY2hlX3R5cGVdLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuZXdfZWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSU5UX01BWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICp3LT5tY19tYXRyaXgudnBvc1t2bnRo XS5jYWNoZVtjYWNoZV90eXBlXSk7CisgICAgICBtZW1zZXQgKHctPm1jX21hdHJpeC52cG9zW3Zu dGhdLmNhY2hlW2NhY2hlX3R5cGVdICsgb2xkX2FsbG9jLCAwLAorICAgICAgICAgICAgICAgKHct Pm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlX2FsbG9jYXRlZFtjYWNoZV90eXBlXSAtIG9sZF9h bGxvYykKKyAgICAgICAgICAgICAgICAgKiBzaXplb2YgKnctPm1jX21hdHJpeC52cG9zW3ZudGhd LmNhY2hlW2NhY2hlX3R5cGVdKTsKKyAgICB9CisgIGludCBudGggPSB3LT5tY19tYXRyaXgudnBv c1t2bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5cGVdIC0gMTsKKyAgdy0+bWNfbWF0cml4LnZwb3Nb dm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5zYW1lX3AgPSBmYWxzZTsKKyAgdy0+bWNfbWF0 cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlwaC50eXBlID0gZ2x5cGgt PnR5cGU7CisgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0u Z2x5cGguYnl0ZXBvcyA9IGdseXBoLT5ieXRlcG9zOworICB3LT5tY19tYXRyaXgudnBvc1t2bnRo XS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLmNoYXJwb3MgPSBnbHlwaC0+Y2hhcnBvczsK KyAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlwaC51 LnZhbCA9IGdseXBoLT51LnZhbDsKKyAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2Fj aGVfdHlwZV1bbnRoXS5nbHlwaC51LmNoID0gZ2x5cGgtPnUuY2g7CisgIHctPm1jX21hdHJpeC52 cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGguZmFjZV9pZCA9IGdseXBoLT5m YWNlX2lkOworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhd LmdseXBoLnBhZGRpbmdfcCA9IGdseXBoLT5wYWRkaW5nX3A7CisgIHctPm1jX21hdHJpeC52cG9z W3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGgubGVmdF9ib3hfbGluZV9wID0gZ2x5 cGgtPmxlZnRfYm94X2xpbmVfcDsKKyAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2Fj aGVfdHlwZV1bbnRoXS5nbHlwaC5yaWdodF9ib3hfbGluZV9wID0gZ2x5cGgtPnJpZ2h0X2JveF9s aW5lX3A7CisgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0u Z2x5cGgudm9mZnNldCA9IGdseXBoLT52b2Zmc2V0OworICB3LT5tY19tYXRyaXgudnBvc1t2bnRo XS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnBpeGVsX3dpZHRoID0gZ2x5cGgtPnBpeGVs X3dpZHRoOworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhd LmdseXBoLnNsaWNlLmltZy54ID0gZ2x5cGgtPnNsaWNlLmltZy54OworICB3LT5tY19tYXRyaXgu dnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnNsaWNlLmltZy55ID0gZ2x5 cGgtPnNsaWNlLmltZy55OworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90 eXBlXVtudGhdLmdseXBoLnNsaWNlLmltZy53aWR0aCA9IGdseXBoLT5zbGljZS5pbWcud2lkdGg7 CisgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGgu c2xpY2UuaW1nLmhlaWdodCA9IGdseXBoLT5zbGljZS5pbWcuaGVpZ2h0OworICB3LT5tY19tYXRy aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnNsaWNlLmNtcC5mcm9t ID0gZ2x5cGgtPnNsaWNlLmNtcC5mcm9tOworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhdLnggPSB4OworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhdLmZ4ID0gZng7CisgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNh Y2hlW2NhY2hlX3R5cGVdW250aF0ueSA9IHk7CisgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNh Y2hlW2NhY2hlX3R5cGVdW250aF0uZnkgPSBmeTsKKyAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0u Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5ocG9zID0gaHBvczsKKyAgdy0+bWNfbWF0cml4LnZwb3Nb dm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS52cG9zID0gdnBvczsKKyAgdy0+bWNfbWF0cml4 LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS53ZCA9IHdkOworICB3LT5tY19tYXRy aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmggPSBoOworICB3LT5tY19tYXRy aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmN1cnNvcl90eXBlID0gY3Vyc29y X3R5cGU7CisgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0u Y3Vyc29yX3dpZHRoID0gY3Vyc29yX3dpZHRoOworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5j YWNoZVtjYWNoZV90eXBlXVtudGhdLmZnLnJlZCA9IGZvcmVncm91bmQucmVkOworICB3LT5tY19t YXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmZnLmdyZWVuID0gZm9yZWdy b3VuZC5ncmVlbjsKKyAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1b bnRoXS5mZy5ibHVlID0gZm9yZWdyb3VuZC5ibHVlOworICB3LT5tY19tYXRyaXgudnBvc1t2bnRo XS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmJnLnJlZCA9IGJhY2tncm91bmQucmVkOworICB3LT5t Y19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmJnLmdyZWVuID0gYmFj a2dyb3VuZC5ncmVlbjsKKyAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlw ZV1bbnRoXS5iZy5ibHVlID0gYmFja2dyb3VuZC5ibHVlOworICB3LT5tY19tYXRyaXgudnBvc1t2 bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmFjdGl2ZV9wID0gYWN0aXZlX3A7CisgIHctPm1j X21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGhfZmxhdm9yID0g Z2x5cGhfZmxhdm9yOworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBl XVtudGhdLnJvd19wb3NpdGlvbiA9IHJvd19wb3NpdGlvbjsKKyAgdy0+bWNfbWF0cml4LnZwb3Nb dm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5lbmFibGVkX3AgPSB0cnVlOworfQorCisvKiBS ZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBnbHlwaCBXJ3MgcGh5c2ljYWwgY3Vyc29yIGlzIG9uLiAg VmFsdWUgaXMgbnVsbCBpZiBXJ3MKKyAgIG1hdHJpeCBpcyBpbnZhbGlkLCBzbyB0aGF0IG5vIG1l YW5pbmdmdWwgZ2x5cGggY2FuIGJlIHJldHVybmVkLiAqLworc3RydWN0IGdseXBoICoKK21jX2dl dF9jdXJzb3JfZ2x5cGggKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1h dHJpeCwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgaW50IGhw b3MsIGludCB2cG9zKQoreworICBzdHJ1Y3QgZ2x5cGggKmdseXBoOworICBpZiAoISh2cG9zID49 IDAKKyAgICAgICAgJiYgdnBvcyA8IG1hdHJpeC0+bnJvd3MpKQorICAgIHJldHVybiBOVUxMOwor ICBpZiAoIXJvdy0+ZW5hYmxlZF9wKQorICAgIHJldHVybiBOVUxMOworICBpZiAody0+aHNjcm9s bCkKKyAgICB7CisgICAgICAvKiBXaGVuIHRoZSB3aW5kb3cgaXMgaHNjcm9sbGVkLCBjdXJzb3Ig aHBvcyBjYW4gbGVnaXRpbWF0ZWx5IGJlCisgICAgICBvdXQgb2YgYm91bmRzLCBidXQgd2UgZHJh dyB0aGUgY3Vyc29yIGF0IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICB3aW5kb3cgbWFyZ2luIGlu IHRoYXQgY2FzZS4gKi8KKyAgICAgIGlmICghcm93LT5yZXZlcnNlZF9wICYmIGhwb3MgPCAwKQor ICAgICAgICBocG9zID0gMDsKKyAgICAgIGlmIChyb3ctPnJldmVyc2VkX3AgJiYgaHBvcyA+PSBy b3ctPnVzZWRbVEVYVF9BUkVBXSkKKyAgICAgICAgaHBvcyA9IHJvdy0+dXNlZFtURVhUX0FSRUFd IC0gMTsKKyAgICB9CisgIGlmICgwIDw9IGhwb3MgJiYgaHBvcyA8IHJvdy0+dXNlZFtURVhUX0FS RUFdKQorICAgIGdseXBoID0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSArIGhwb3M7CisgICAgZWxz ZQorICAgICAgZ2x5cGggPSBOVUxMOworICByZXR1cm4gZ2x5cGg7Cit9CisKKy8qIFRoaXMgZnVu Y3Rpb24gZGlmZmVycyBzdWJzdGFudGlhbGx5IGZyb20gYGdldF9waHlzX2N1cnNvcl9nZW9tZXRy eScuCisgICBgeHRlcm0uY2A6ICBgbWNfeF9kcmF3X2hvbGxvd19jdXJzb3JgIGNhbGxzIGB4X2Ry YXdfcmVjdGFuZ2xlJywgd2hpY2ggcmVxdWlyZXMKKyAgIGEgV0QgLSAxIGFuZCBIIC0gMS4gIFNv IHRoYXQgYG1jX2dldF9jdXJzb3JfZ2VvbWV0cnlgIGNhbiBiZSB1c2VkIGZvciBhbGwKKyAgIHBs YXRmb3JtcywgYG1jX3hfZHJhd19ob2xsb3dfY3Vyc29yYCBzdWJ0cmFjdHMgdGhlIGV4dHJhIHBp eGVsIGZyb20gV0QgYW5kIEguCisgICBGWDogIEZyYW1lIHJlbGF0aXZlIGNvb3JkaW5hdGUgZm9y IHdpbmRvdyByZWxhdGl2ZSBYLgorICAgRlk6ICBGcmFtZSByZWxhdGl2ZSBjb29yZGluYXRlIG9m IFJPVy0+WTsgaS5lLiwgdG9wIG9mIHRoZSBsaW5lLiAgRm9yIGFuCisgICAgICAgIE1DX0hCQVIs IHVzZSBST1ctPlkgKyBST1ctPlZJU0lCTEVfSEVJR0hUIC0gMSBwaXhlbCBzbyB0aGF0IGl0Cisg ICAgICAgIGlzIHBhbGNlZCBhdCB0aGUgdmVyeSBib3R0b20gb2YgdGhlIHZpc2libGUgcm93Lgor ICAgV0Q6ICBHTFlQSC0+UElYRUxfV0lEVEgsIGV4Y2VwdCB3aGVuIGRlYWxpbmcgd2l0aCBhIFNU UkVUQ0hfR0xZUEggd2hlbiB3ZSB0YWtlCisgICAgICAgIGludG8gY29uc2lkZXJhdGlvbiBgeC1z dHJldGNoLWN1cnNvcicgYW5kIGBjdXJzb3JfdHlwZWAuCisgICBIOiAgTUNfSEJBUiBpcyAxIHBp eGVsLCBhbmQgYWxsIG90aGVycyBhcmUgUk9XLT5WSVNJQkxFX0hFSUdIVC4KKyAgICAgICBGSVhN RTogIEFkZCBjb25kaXRpb25zIGZvciB1c2VyLXNwZWNpZmllZCB0aGlja25lc3Mgb2YgTUNfQkFS IGFuZAorICAgICAgICAgICAgICAgTUNfSEJBUiBhcyB0byBgbWMtcmVhbC1mYWtlLWN1cnNvcicu CisgICBNVUxUSVBMRV9DVVJTT1JTOiAgV2UgZG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uLgorICAg SE9SSVpPTlRBTF9SVUxFUjogIFdlIHdhbnQgYSB1bml2ZXJzYWwgRlkgY29vcmRpbmF0ZSBmb3Ig YSBsZXZlbCBydWxlci4KKyAgIFZFUlRJQ0FMX1JVTEVSIGFuZCBGSUxMX0NPTFVNTjogIFdlIHdh bnQgYW4gSCB0aGF0IGVuc3VyZXMgbm8gZ2FwIGJldHdlZW4gdGhlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy9uZXh0IGxpbmUuICBUaGUgRlggY29vcmRpbmF0 ZSBpcyBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V3aGVyZTog IGB3LT5jdXJzb3IueGAgLyBgbWMuZmNfeGAuICovCit2b2lkCittY19nZXRfY3Vyc29yX2dlb21l dHJ5IChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsCisgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csIGludCB4LCBpbnQgKmZ4 LCBpbnQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZnksIGludCBocG9zLCBpbnQg dnBvcywgaW50ICpoLAorICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBtY19jdXJzb3JfdHlw ZSBjdXJzb3JfdHlwZSwgaW50IGN1cnNvcl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg IGludCAqd2QpCit7CisgIHN0cnVjdCBnbHlwaCAqZ2x5cGggPSBtY19nZXRfY3Vyc29yX2dseXBo ICh3LCBtYXRyaXgsIHJvdywgaHBvcywgdnBvcyk7CisgIGlmIChnbHlwaCA9PSBOVUxMKQorICAg IHJldHVybjsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FIChXSU5ET1dfRlJBTUUgKHcpKTsK KyAgKmZ4ID0gV0lORE9XX1RFWFRfVE9fRlJBTUVfUElYRUxfWCAodywgeCk7CisgICpoID0gcm93 LT52aXNpYmxlX2hlaWdodDsKKyAgLyogRG9uJ3QgbGV0IHRoZSBjdXJzb3IgZXhjZWVkIHRoZSBk aW1lbnNpb25zIG9mIHRoZSByb3csIHNvIHRoYXQKKyAgdGhlIHVwcGVyL2xvd2VyIHNpZGUgb2Yg dGhlIGJveCBhcmVuJ3QgY2xpcHBlZC4gICovCisgIGludCB3X2hlYWRlcl9saW5lX2hlaWdodCA9 IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcpOworICBpbnQgd190ZXh0X2JvdHRvbV95ID0g d2luZG93X3RleHRfYm90dG9tX3kgKHcpIC0gKmg7CisgIGlmICh5IDwgd19oZWFkZXJfbGluZV9o ZWlnaHQpCisgICAgeworICAgICAgKmggPSBtYXggKCpoIC0gKHdfaGVhZGVyX2xpbmVfaGVpZ2h0 IC0geSkgKyAxLCAqaCk7CisgICAgICB5ID0gd19oZWFkZXJfbGluZV9oZWlnaHQgLSAxOworICAg ICAgLy8gZnByaW50ZiAoc3RkZXJyLCAiQ09ORElUSU9OICMgMVxuIik7CisgICAgfQorICAgZWxz ZSBpZiAoeSA+IHdfdGV4dF9ib3R0b21feSkKKyAgICAgeworICAgICAgICpoICs9IHkgLSB3X3Rl eHRfYm90dG9tX3k7CisgICAgICAgeSA9IHdfdGV4dF9ib3R0b21feTsKKyAgICAgICAvLyBmcHJp bnRmIChzdGRlcnIsICJDT05ESVRJT04gIyAyXG4iKTsKKyAgICAgfQorICAqZnkgPSBXSU5ET1df VE9fRlJBTUVfUElYRUxfWSAodywgeSk7CisgIHN3aXRjaCAoY3Vyc29yX3R5cGUpCisgICAgewor ICAgICAgY2FzZSBNQ19CQVI6CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoY3Vyc29yX3dpZHRo IDwgMSkKKyAgICAgICAgICAgIGN1cnNvcl93aWR0aCA9IG1heCAoRlJBTUVfQ1VSU09SX1dJRFRI IChmKSwgMSk7CisgICAgICAgICAgaWYgKGN1cnNvcl93aWR0aCA8IGdseXBoLT5waXhlbF93aWR0 aCkKKyAgICAgICAgICAqd2QgPSBjdXJzb3Jfd2lkdGg7CisgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyAgICAgIGNhc2UgTUNfSEJBUjoKKyAgICAgICAgeworICAgICAgICAgIGludCBjdXJz b3JfaGVpZ2h0ID0gKGN1cnNvcl93aWR0aCA8IDEpID8gbHJpbnQgKDAuMjUgKiAqaCkgOiBjdXJz b3Jfd2lkdGg7CisgICAgICAgICAgaWYgKGN1cnNvcl9oZWlnaHQgPiByb3ctPmhlaWdodCkKKyAg ICAgICAgICAgIGN1cnNvcl9oZWlnaHQgPSByb3ctPmhlaWdodDsKKyAgICAgICAgICAvKiBDdXJz b3Igc21hbGxlciB0aGFuIGxpbmUgaGVpZ2h0LCBzbyBtb3ZlIGRvd24uICovCisgICAgICAgICAg aWYgKCpoID4gY3Vyc29yX2hlaWdodCkKKyAgICAgICAgICAgICpmeSArPSAqaCAtIGN1cnNvcl9o ZWlnaHQ7CisgICAgICAgICAgKmggPSBjdXJzb3JfaGVpZ2h0OworICAgICAgICAgICp3ZCA9IGds eXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgY2Fz ZSBNQ19SSUdIVF9GUklOR0VfQklUTUFQOgorICAgICAgY2FzZSBNQ19MRUZUX0ZSSU5HRV9CSVRN QVA6CisgICAgICBjYXNlIE1DX05PX0ZSSU5HRV9CSVRNQVA6CisgICAgICBjYXNlIE1DX05PX0NV UlNPUjoKKyAgICAgIGNhc2UgTUNfRlJBTUVEX0JPWDoKKyAgICAgIGNhc2UgTUNfRklMTEVEX0JP WDoKKyAgICAgIGNhc2UgTUNfSE9MTE9XX0JPWDoKKyAgICAgIGRlZmF1bHQ6CisgICAgICAvKiBD b21wdXRlIHRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlIHRvIGRyYXcuICBJZiBvbiBhIHN0cmV0 Y2ggZ2x5cGgsIGFuZAorICAgICAgYHgtc3RyZXRjaC1jdXJzb3InIGlzIG5pbCwgZG9uJ3QgZHJh dyBhIHJlY3RhbmdsZSBhcyB3aWRlIGFzIHRoZSBnbHlwaCwgYnV0CisgICAgICB1c2UgYSBjYW5v bmljYWwgY2hhcmFjdGVyIHdpZHRoIGluc3RlYWQuICovCisgICAgICAqd2QgPSAoZ2x5cGgtPnR5 cGUgPT0gU1RSRVRDSF9HTFlQSAorICAgICAgICAgICAgICYmICF4X3N0cmV0Y2hfY3Vyc29yX3Ap CisgICAgICAgICAgICA/IG1pbiAoRlJBTUVfQ09MVU1OX1dJRFRIIChmKSwgZ2x5cGgtPnBpeGVs X3dpZHRoKQorICAgICAgICAgICAgOiBnbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgfQorLyoKKyAg ICAgIGZwcmludGYgKHN0ZGVyciwgImN1cnNvcl93aWR0aDogKCVkKSB8IHggKCVkKSB8ICpmeCAo JWQpIHwgeSAoJWQpIHwgKmZ5ICglZCksICp3ZCAoJWQpIHwgKmggKCVkKVxuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgY3Vyc29yX3dpZHRoLCB4LCAqZngsIHksICpmeSwgKndkLCAqaCk7Cisq LworfQorCit2b2lkCittY19lbmdpbmUgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9t YXRyaXggKm1hdHJpeCwgc3RydWN0IGdseXBoX3JvdyAqcm93LAorICAgICAgICAgICBzdHJ1Y3Qg Z2x5cGggKmdseXBoLCBpbnQgYXJlYSwgaW50IHJlbGF0aXZlX3gsIGludCB4X2xpbWl0LCBpbnQg eSwKKyAgICAgICAgICAgaW50IGhwb3MsIGludCB2cG9zLCBlbnVtIG1jX2N1cnNvcl90eXBlIGN1 cnNvcl90eXBlLCBpbnQgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICBzdHJ1Y3QgZ2x5cGhfbWF0 cml4ICpjdXJzb3JfbWF0cml4LCBzdHJ1Y3QgbWNfZXNzZW50aWFscyBlc3NlbnRpYWxzLAorICAg ICAgICAgICBlbnVtIG1jX3Jvd19wb3NpdGlvbiByb3dfcG9zaXRpb24sIHN0cnVjdCBtY19SR0Ig Zm9yZWdyb3VuZCwKKyAgICAgICAgICAgZW51bSBtY19lbmdpbmVfdHlwZSBhY3Rpb25fdHlwZSwg Ym9vbCBkcmF3X3AsCisgICAgICAgICAgIGVudW0gbWNfZHJhd19yb3dfdHlwZSBmcm9tX3doZXJl LCBlbnVtIG1jX2NhY2hlX3R5cGUgY2FjaGVfdHlwZSkKK3sKKyAgaW50IG9wb2ludF94ID0gdy0+ Y3Vyc29yLng7CisgIGludCBvcG9pbnRfeSA9IHctPmN1cnNvci55OworICBpbnQgb3BvaW50X2hw b3MgPSB3LT5jdXJzb3IuaHBvczsKKyAgaW50IG9wb2ludF92cG9zID0gdy0+Y3Vyc29yLnZwb3M7 CisgIGludCBmeCwgZnksIGgsIHdkOworICBtY19nZXRfY3Vyc29yX2dlb21ldHJ5ICh3LCBtYXRy aXgsIHJvdywgcmVsYXRpdmVfeCwgJmZ4LCB5LCAmZnksIGhwb3MsIHZwb3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICZoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCAmd2QpOworICBp bnQgb3BvaW50X2Z4ID0gV0lORE9XX1RFWFRfVE9fRlJBTUVfUElYRUxfWCAodywgb3BvaW50X3gp OworICBpbnQgZmNfZnggPSBXSU5ET1dfVEVYVF9UT19GUkFNRV9QSVhFTF9YICh3LCBlc3NlbnRp YWxzLmZjX3gpOworICBib29sIGdseXBoX3p2X3AgPSAoZ2x5cGggLSByb3ctPmdseXBoc1tURVhU X0FSRUFdID09IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICYmIE1B VFJJWF9ST1dfRU5EX0NIQVJQT1MgKHJvdykgPT0gWlYpOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBY RlJBTUUgKHctPmZyYW1lKTsKKyAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKHctPmNvbnRl bnRzKTsKKyAgaW50IHRleHRfYXJlYV93aWR0aCA9IHdpbmRvd19ib3hfd2lkdGggKHcsIFRFWFRf QVJFQSk7CisgIHN0cnVjdCBnbHlwaF9yb3cgKmN1cnNvcl9yb3cgPSAody0+Y3Vyc29yLnZwb3Mg IT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1BVFJJWF9ST1cgKGN1 cnNvcl9tYXRyaXgsIHctPmN1cnNvci52cG9zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiBOVUxMOworICBzdHJ1Y3QgZ2x5cGggKmN1cnNvcl9nbHlwaCA9ICh3LT5jdXJzb3Iu dnBvcyAhPSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1jX2dldF9jdXJz b3JfZ2x5cGggKHcsIGN1cnNvcl9tYXRyaXgsIGN1cnNvcl9yb3csCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LT5jdXJzb3IuaHBvcywgdy0+ Y3Vyc29yLnZwb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMOworICBi b29sIGN1cnNvcl9hdF9mcmluZ2VfcCA9IChjdXJzb3JfZ2x5cGggPT0gTlVMTAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiBjdXJzb3Jfcm93ICE9IE5VTEwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLmhwb3MgPT0gY3Vyc29yX3Jvdy0+dXNlZFtURVhU X0FSRUFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9yb3ctPmV4YWN0 X3dpbmRvd193aWR0aF9saW5lX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+ Y3Vyc29yLnggPT0gdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIHctPmN1cnNvci54ID09IGN1cnNvcl9yb3ctPnBpeGVsX3dpZHRoKTsKKyAgYm9vbCBjdXJz b3JfYmV5b25kX2ZyaW5nZV9wID0gKGN1cnNvcl9nbHlwaCA9PSBOVUxMCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiBjdXJzb3Jfcm93ICE9IE5VTEwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci5ocG9zID09IGN1cnNvcl9yb3ctPnVzZWRb VEVYVF9BUkVBXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWN1cnNvcl9y b3ctPmV4YWN0X3dpbmRvd193aWR0aF9saW5lX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmIHctPmN1cnNvci54ID49IHRleHRfYXJlYV93aWR0aAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLnggPj0gY3Vyc29yX3Jvdy0+cGl4ZWxfd2lk dGgpOworICBpbnQgZnJhbWVfY2hhcl93aWR0aCA9IEZSQU1FX0NPTFVNTl9XSURUSCAoZik7Cisg IGludCB0ZW1wX2ZhY2VfaWQgPSBnbHlwaC0+ZmFjZV9pZDsKKyAgc3RydWN0IG1jX1JHQiBiYWNr Z3JvdW5kOworICBtY19zZXRfbHNsX2JnICh3LCB0ZW1wX2ZhY2VfaWQsICZiYWNrZ3JvdW5kKTsK KyAgYm9vbCByZWFsX2Zha2VfY3Vyc29yX3AgPSAob3BvaW50X3ggPT0gcmVsYXRpdmVfeAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfaHBvcyA9PSBocG9zCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF95ID09IHJvdy0+eQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfdnBvcyA9PSB2cG9zKTsKKworLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgQkVHSU46ICBDSEFSX0dMWVBI IHwgR0xZUEhMRVNTX0dMWVBIICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAqLworICBpZiAoZ2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSAorICAgICAgfHwgZ2x5cGgt PnR5cGUgPT0gR0xZUEhMRVNTX0dMWVBIKQorICB7CisgICAgaWYgKG1jX3N0ZGVycl9wKQorICAg ICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAiXG4gJTUicEQiZC8lLTVkICU1ZCAlYyAlOSJw RCJkICVjICUzZCAweCUwNnggJTRkICUxLjFkJTEuMWQgICUzZCAlcyAlc1xuIiwKKyAgICAgICAg Z2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAgICAgICAoKHJvdy0+dXNlZFthcmVh XSA9PSAwKSA/IDAgOiByb3ctPnVzZWRbYXJlYV0gLSAxKSwKKyAgICAgICAgcmVsYXRpdmVfeCwK KyAgICAgICAgKGdseXBoLT50eXBlID09IENIQVJfR0xZUEgKKyAgICAgICAgID8gJ0MnCisgICAg ICAgICA6ICdHJyksCisgICAgICAgIGdseXBoLT5jaGFycG9zLAorICAgICAgICAoQlVGRkVSUCAo Z2x5cGgtPm9iamVjdCkKKyAgICAgICAgID8gJ0InCisgICAgICAgICA6IChTVFJJTkdQIChnbHlw aC0+b2JqZWN0KQorICAgICAgICAgICAgPyAnUycKKyAgICAgICAgICAgIDogKE5JTFAgKGdseXBo LT5vYmplY3QpCisgICAgICAgICAgICAgICA/ICcwJworICAgICAgICAgICAgICAgOiAnLScpKSks CisgICAgICAgICAgICAgIGdseXBoLT5waXhlbF93aWR0aCwKKyAgICAgICAgZ2x5cGgtPnUuY2gs CisgICAgICAgIGdseXBoLT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+bGVmdF9ib3hfbGluZV9w LAorICAgICAgICBnbHlwaC0+cmlnaHRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPmhwb3Ms IGdseXBoX3p2X3AgPyAiWlYiIDogIi0tIiwKKyAgICAgICAgbWNfY2hhcl90b19zdHJpbmcgKGds eXBoLT51LmNoKSk7CisgIHN3aXRjaCAoYWN0aW9uX3R5cGUpCisgIHsKKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLworLyogICAgICAgICAgICAgICBNVUxUSVBMRV9DVVJTT1JTOiAgQ0hBUl9HTFlQ SCB8IEdMWVBITEVTU19HTFlQSCAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gKi8KKyAgICBjYXNlIE1VTFRJUExFX0NVUlNPUlM6CisgICAgeworICAgICAgbWNfaGVscGVy ICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIHJlbGF0aXZlX3gsIGZ4LCB5LCBmeSwgaHBvcywgdnBv cywKKyAgICAgICAgICAgICAgICAgd2QsIGgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIHJv d19wb3NpdGlvbiwgZm9yZWdyb3VuZCwKKyAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCwgZXNz ZW50aWFscy5hY3RpdmVfcCwgTUNfR0xZUEgsIGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAg ICAgICAgICAgY2FjaGVfdHlwZSwgYWN0aW9uX3R5cGUpOworICAgICAgYnJlYWs7CisgICAgfQor LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgIEhPUklaT05UQUxfUlVM RVI6ICBDSEFSX0dMWVBIIHwgR0xZUEhMRVNTX0dMWVBIICAgICAgICAgICAgICAgKi8KKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgSE9SSVpPTlRBTF9SVUxFUjoKKyAgICB7Cisg ICAgICBpZiAocmVsYXRpdmVfeCA8IHJvdy0+cGl4ZWxfd2lkdGgKKyAgICAgICAgICAmJiAhcmVh bF9mYWtlX2N1cnNvcl9wKQorICAgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlw aCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAg IHdkLCBoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCByb3dfcG9zaXRpb24sIGZvcmVncm91 bmQsCisgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwg TUNfR0xZUEgsIGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgICBjYWNoZV90 eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBpZiAocmVsYXRpdmVfeCA8IHJvdy0+cGl4ZWxfd2lk dGgpCisgICAgICAgIHsKKyAgICAgICAgICByZWxhdGl2ZV94ICs9IGdseXBoLT5waXhlbF93aWR0 aDsKKyAgICAgICAgICBmeCArPSBnbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICAgIH0KKyAgICAg IGlmIChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0g MQorICAgICAgICAgICYmIHJlbGF0aXZlX3ggPCB4X2xpbWl0KQorICAgICAgICBtY19oZWxwZXIg KHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9z LAorICAgICAgICAgICAgICAgICAgIHhfbGltaXQgLSByZWxhdGl2ZV94LCBoLCBjdXJzb3JfdHlw ZSwgY3Vyc29yX3dpZHRoLCByb3dfcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgZm9yZWdy b3VuZCwgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgTUNfR0xZUEhMRVNTLAorICAg ICAgICAgICAgICAgICAgIGRyYXdfcCwgZnJvbV93aGVyZSwgY2FjaGVfdHlwZSwgYWN0aW9uX3R5 cGUpOworICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAg ICAgICAgICAgICAgIFZFUlRJQ0FMX1JVTEVSOiAgQ0hBUl9HTFlQSCB8IEdMWVBITEVTU19HTFlQ SCAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2Ug VkVSVElDQUxfUlVMRVI6CisgICAgeworICAgICAgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9y ID0gKGN1cnNvcl9hdF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIHJvdy0+Y29udGludWVkX3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID8gTUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiAoY3Vyc29yX2F0X2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiAhcm93LT5jb250aW51ZWRfcAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXJvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3ApCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfVkVSVElDQUxfQkFSCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChjdXJzb3JfYXRfZnJpbmdlX3AK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJvdy0+dHJ1bmNhdGVk X29uX3JpZ2h0X3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNf VkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6IChjdXJzb3JfYmV5b25kX2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdI VF9BUlJPVworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2Jl eW9uZF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg Y3Vyc29yX3Jvdy0+dXNlZFtURVhUX0FSRUFdICE9IDEKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmICFyb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGggLSByb3ctPmdseXBo c1tURVhUX0FSRUFdID09IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94ID49IHJvdy0+cGl4ZWxfd2lkdGgpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfR0xZUEhMRVNTCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaF96dl9wKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBNQ19HTFlQSDsKKyAgICAgIGlmIChnbHlwaF9mbGF2b3Ig PT0gTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9y ID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgIHx8IGds eXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNICisgICAgICAgICAgfHwgZ2x5 cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9 PSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIpCisgICAgICAgIGN1cnNvcl90eXBlID0gTUNfUklH SFRfRlJJTkdFX0JJVE1BUDsKKyAgICAgIHdkID0gMTsKKyAgICAgIG1jX2hlbHBlciAodywgbWF0 cml4LCByb3csIGdseXBoLCByZWxhdGl2ZV94LCBvcG9pbnRfZngsIHksIGZ5LCBocG9zLCB2cG9z LAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93 X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3Nl bnRpYWxzLmFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAg ICAgICAgICAgICAgY2FjaGVfdHlwZSwgYWN0aW9uX3R5cGUpOworICAgICAgYnJlYWs7CisgICAg fQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgIEZJTExfQ09MVU1O OiAgQ0hBUl9HTFlQSCB8IEdMWVBITEVTU19HTFlQSCAgICAgICAgICAgICAgICAgKi8KKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgRklMTF9DT0xVTU46CisgICAgeworICAgICAg ZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yID0gKGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9B UkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJiYgZXNzZW50aWFscy5mY194ID49IHJvdy0+cGl4ZWxfd2lkdGgpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfR0xZUEhMRVNTCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaF96dl9wKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiAoIU5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnMpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIg KHctPmNvbnRlbnRzKSwgY2hfdmVydGljYWxfcnVsZXIpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3kgPT0geQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3Zwb3MgPT0gdnBvcykKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogTUNfR0xZUEg7CisgICAgICB3ZCA9IDE7CisgICAgICBtY19o ZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZmNfZngsIHksIGZ5LCBo cG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93 aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3Jv dW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIGRyYXdfcCwgZnJvbV93aGVy ZSwKKyAgICAgICAgICAgICAgICAgY2FjaGVfdHlwZSwgYWN0aW9uX3R5cGUpOworICAgICAgYnJl YWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBDVVJTT1JfSU5E SUNBVE9SOgorICAgIHsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworICB9CisgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAg ICAgICAgICAgICBFTkQ6ICBDSEFSX0dMWVBIIHwgR0xZUEhMRVNTX0dMWVBIICAgICAgICAgICAg ICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkVHSU46ICBTVFJFVENIX0dM WVBIICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq LworICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBTVFJFVENIX0dMWVBIKQorICB7CisgICAgaWYg KG1jX3N0ZGVycl9wKQorICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAiXG4gJTUicEQi ZC8lLTVkICU1ZCAlYyAlOSJwRCJkICVjICUzZCAweCUwNnggJTRkICUxLjFkJTEuMWQgICUzZCAl cyAlc1xuIiwKKyAgICAgICAgZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAgICAg ICAoKHJvdy0+dXNlZFthcmVhXSA9PSAwKSA/IDAgOiByb3ctPnVzZWRbYXJlYV0gLSAxKSwKKyAg ICAgICAgcmVsYXRpdmVfeCwKKyAgICAgICAgJ1MnLAorICAgICAgICBnbHlwaC0+Y2hhcnBvcywK KyAgICAgICAgKEJVRkZFUlAgKGdseXBoLT5vYmplY3QpCisgICAgICAgICA/ICdCJworICAgICAg ICAgOiAoU1RSSU5HUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJ1MnCisgICAgICAg ICAgICA6IChOSUxQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgICAgPyAnMCcKKyAgICAg ICAgICAgICAgIDogJy0nKSkpLAorICAgICAgICBnbHlwaC0+cGl4ZWxfd2lkdGgsCisgICAgICAg IDB1LAorICAgICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAgICAgICAgZ2x5cGgtPmxlZnRfYm94X2xp bmVfcCwKKyAgICAgICAgZ2x5cGgtPnJpZ2h0X2JveF9saW5lX3AsCisgICAgICAgIGdseXBoLT5o cG9zLCBnbHlwaF96dl9wID8gIlpWIiA6ICItLSIsCisgICAgICAgICJcXFMiKTsKKyAgc3dpdGNo IChhY3Rpb25fdHlwZSkKKyAgeworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAg ICAgICAgICAgICAgICAgIE1VTFRJUExFX0NVUlNPUlM6ICBTVFJFVENIX0dMWVBIICAgICAgICAg ICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgTVVMVElQ TEVfQ1VSU09SUzoKKyAgICB7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlw aCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3 ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5k LAorICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBNQ19H TFlQSCwgZHJhd19wLCBmcm9tX3doZXJlLAorICAgICAgICAgICAgICAgICBjYWNoZV90eXBlLCBh Y3Rpb25fdHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g Ki8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgSE9SSVpPTlRBTF9SVUxFUjogIFNUUkVUQ0hf R0xZUEggICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisg ICAgY2FzZSBIT1JJWk9OVEFMX1JVTEVSOgorICAgIHsKKyAgICAgIGlmIChyZWxhdGl2ZV94IDwg cm93LT5waXhlbF93aWR0aAorICAgICAgICAgICYmICFyZWFsX2Zha2VfY3Vyc29yX3ApCisgICAg ICAgIG1jX2hlbHBlciAodywgbWF0cml4LCByb3csIGdseXBoLCByZWxhdGl2ZV94LCBmeCwgeSwg ZnksIGhwb3MsIHZwb3MsCisgICAgICAgICAgICAgICAgICAgd2QsIGgsIGN1cnNvcl90eXBlLCBj dXJzb3Jfd2lkdGgsIHJvd19wb3NpdGlvbiwgZm9yZWdyb3VuZCwKKyAgICAgICAgICAgICAgICAg ICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBNQ19HTFlQSCwgZHJhd19wLCBmcm9t X3doZXJlLAorICAgICAgICAgICAgICAgICAgIGNhY2hlX3R5cGUsIGFjdGlvbl90eXBlKTsKKyAg ICAgIGlmIChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFd IC0gMQorICAgICAgICAgICYmIHJlbGF0aXZlX3ggPD0geF9saW1pdCkKKyAgICAgICAgeworICAg ICAgICAgIGlmIChyZWxhdGl2ZV94IDwgcm93LT5waXhlbF93aWR0aCkKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgcmVsYXRpdmVfeCArPSBnbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICAg ICAgICAgIGZ4ICs9IGdseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICB0ZW1wX2ZhY2VfaWQgPSAocm93LT5maWxsX2xpbmVfcCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICA/IGdseXBoLT5mYWNlX2lkCisgICAgICAgICAgICAgICAgICAgICAgICAgOiBERUZBVUxU X0ZBQ0VfSUQ7CisgICAgICAgICAgc3RydWN0IG1jX1JHQiBiYWNrZ3JvdW5kOworICAgICAgICAg IG1jX3NldF9sc2xfYmcgKHcsIHRlbXBfZmFjZV9pZCwgJmJhY2tncm91bmQpOworICAgICAgICAg IG1jX2hlbHBlciAodywgbWF0cml4LCByb3csIGdseXBoLCByZWxhdGl2ZV94LCBmeCwgeSwgZnks IGhwb3MsIHZwb3MsCisgICAgICAgICAgICAgICAgICAgICB4X2xpbWl0IC0gcmVsYXRpdmVfeCwg aCwgY3Vyc29yX3R5cGUsIHhfbGltaXQgLSByZWxhdGl2ZV94LAorICAgICAgICAgICAgICAgICAg ICAgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2 ZV9wLAorICAgICAgICAgICAgICAgICAgICAgTUNfR0xZUEhMRVNTLCBkcmF3X3AsIGZyb21fd2hl cmUsIGNhY2hlX3R5cGUsIGFjdGlvbl90eXBlKTsKKyAgICAgICAgfQorICAgICAgYnJlYWs7Cisg ICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAg ICAgVkVSVElDQUxfUlVMRVI6ICBTVFJFVENIX0dMWVBIICAgICAgICAgICAgICAgICAgICAgKi8K Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgVkVSVElDQUxfUlVMRVI6CisgICAg eworICAgICAgaWYgKHJvdy0+ZmlsbF9saW5lX3AKKyAgICAgICAgICAmJiBnbHlwaCAtIHJvdy0+ Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICYmIG9w b2ludF94ID4gcmVsYXRpdmVfeCArIGdseXBoLT5waXhlbF93aWR0aCkKKyAgICAgICAgdGVtcF9m YWNlX2lkID0gZ2x5cGgtPmZhY2VfaWQ7CisgICAgICAgIGVsc2UgaWYgKCFyb3ctPmZpbGxfbGlu ZV9wCisgICAgICAgICAgICAgICAgICYmIGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9 PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAgICYmIG9wb2ludF94ID4gcmVs YXRpdmVfeCArIGdseXBoLT5waXhlbF93aWR0aCkKKyAgICAgICAgICB0ZW1wX2ZhY2VfaWQgPSBE RUZBVUxUX0ZBQ0VfSUQ7CisgICAgICBzdHJ1Y3QgbWNfUkdCIGJhY2tncm91bmQ7CisgICAgICBt Y19zZXRfbHNsX2JnICh3LCB0ZW1wX2ZhY2VfaWQsICZiYWNrZ3JvdW5kKTsKKyAgICAgIGVudW0g bWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IChjdXJzb3JfYXRfZnJpbmdlX3AKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPmNvbnRpbnVlZF9wKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGN1cnNvcl9hdF9mcmluZ2Vf cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXJvdy0+Y29udGlu dWVkX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFyb3ctPnRy dW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA/IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiAoY3Vyc29yX2F0X2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2JleW9uZF9mcmluZ2VfcAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcm93LT50cnVuY2F0ZWRfb25f cmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19SRVZF UlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogKGN1cnNvcl9iZXlvbmRfZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9yb3ctPnVzZWRbVEVYVF9BUkVBXSAhPSAxCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcm93LT50cnVuY2F0ZWRf b25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19S RVZFUlNFRF9WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDogTUNfR0xZUEhMRVNTOworICAgICAgaWYgKGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9C QVJfUklHSFRfQVJST1cKKyAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURf VkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1D X1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gKKyAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNf VkVSVElDQUxfQkFSCisgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZF UlRJQ0FMX0JBUikKKyAgICAgICAgY3Vyc29yX3R5cGUgPSBNQ19SSUdIVF9GUklOR0VfQklUTUFQ OworICAgICAgd2QgPSAxOworICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgs IG9wb2ludF94LCBvcG9pbnRfZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAg ICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3Jv dW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBn bHlwaF9mbGF2b3IsIGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgY2FjaGVf dHlwZSwgYWN0aW9uX3R5cGUpOworICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTExfQ09MVU1OOiAgU1RS RVRDSF9HTFlQSCAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworICAgIGNhc2UgRklMTF9DT0xVTU46CisgICAgeworICAgICAgaWYgKHJvdy0+ZmlsbF9s aW5lX3AKKyAgICAgICAgICAmJiBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93 LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICYmIGVzc2VudGlhbHMuZmNfeCA+IHJlbGF0aXZl X3ggKyBnbHlwaC0+cGl4ZWxfd2lkdGgpCisgICAgICAgIHRlbXBfZmFjZV9pZCA9IGdseXBoLT5m YWNlX2lkOworICAgICAgICBlbHNlIGlmICghcm93LT5maWxsX2xpbmVfcAorICAgICAgICAgICAg ICAgICAmJiBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFd IC0gMQorICAgICAgICAgICAgICAgICAmJiBlc3NlbnRpYWxzLmZjX3ggPiByZWxhdGl2ZV94ICsg Z2x5cGgtPnBpeGVsX3dpZHRoKQorICAgICAgICAgIHRlbXBfZmFjZV9pZCA9IERFRkFVTFRfRkFD RV9JRDsKKyAgICAgIHN0cnVjdCBtY19SR0IgYmFja2dyb3VuZDsKKyAgICAgIG1jX3NldF9sc2xf YmcgKHcsIHRlbXBfZmFjZV9pZCwgJmJhY2tncm91bmQpOworICAgICAgZW51bSBtY19mbGF2b3Ig Z2x5cGhfZmxhdm9yID0gTUNfR0xZUEhMRVNTOworICAgICAgd2QgPSAxOworICAgICAgbWNfaGVs cGVyICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIGVzc2VudGlhbHMuZmNfeCwgZmNfZngsIHksIGZ5 LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNv cl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNr Z3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIGRyYXdfcCwgZnJvbV93 aGVyZSwKKyAgICAgICAgICAgICAgICAgY2FjaGVfdHlwZSwgYWN0aW9uX3R5cGUpOworICAgICAg YnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBDVVJTT1Jf SU5ESUNBVE9SOgorICAgIHsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAqLworICB9CisgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRU5EOiAgU1RSRVRDSF9HTFlQSCAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJFR0lOOiAgSU1BR0Vf R0xZUEggICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBJTUFHRV9HTFlQSCkKKyAgeworICAgIGlm IChtY19zdGRlcnJfcCkKKyAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgIlxuICU1InBE ImQvJS01ZCAlNWQgJWMgJTkicEQiZCAlYyAlM2QgMHglMDZ4ICU0ZCAlMS4xZCUxLjFkICAlM2Qg JXMgJWNcbiIsCisgICAgICAgIGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSwKKyAgICAg ICAgKChyb3ctPnVzZWRbYXJlYV0gPT0gMCkgPyAwIDogcm93LT51c2VkW2FyZWFdIC0gMSksCisg ICAgICAgIHJlbGF0aXZlX3gsCisgICAgICAgICdJJywKKyAgICAgICAgZ2x5cGgtPmNoYXJwb3Ms CisgICAgICAgIChCVUZGRVJQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgPyAnQicKKyAgICAg ICAgIDogKFNUUklOR1AgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAgICA/ICdTJworICAgICAg ICAgICAgOiAoTklMUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgICAgID8gJzAnCisgICAg ICAgICAgICAgICA6ICctJykpKSwKKyAgICAgICAgZ2x5cGgtPnBpeGVsX3dpZHRoLAorICAgICAg ICAodW5zaWduZWQgaW50KSBnbHlwaC0+dS5pbWdfaWQsCisgICAgICAgIGdseXBoLT5mYWNlX2lk LAorICAgICAgICBnbHlwaC0+bGVmdF9ib3hfbGluZV9wLAorICAgICAgICBnbHlwaC0+cmlnaHRf Ym94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPmhwb3MsIGdseXBoX3p2X3AgPyAiWlYiIDogIi0t IiwKKyAgICAgICAgJy4nKTsKKyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAgeworLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBNVUxUSVBMRV9DVVJT T1JTOiAgSU1BR0VfR0xZUEggICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLworICAgIGNhc2UgTVVMVElQTEVfQ1VSU09SUzoKKyAgICB7CisgICAgICBjdXJz b3JfdHlwZSA9IE1DX0hPTExPV19CT1g7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93 LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAg ICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3Jl Z3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9w LCBNQ19HTFlQSCwgZHJhd19wLCBmcm9tX3doZXJlLAorICAgICAgICAgICAgICAgICBjYWNoZV90 eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIEhPUklaT05UQUxfUlVMRVI6ICBJ TUFHRV9HTFlQSCAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t ICovCisgICAgY2FzZSBIT1JJWk9OVEFMX1JVTEVSOgorICAgIHsKKyAgICAgIGN1cnNvcl90eXBl ID0gTUNfSE9MTE9XX0JPWDsKKyAgICAgIGlmICghcmVhbF9mYWtlX2N1cnNvcl9wKQorICAgICAg ICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5 LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAgIHdkLCBoLCBjdXJzb3JfdHlwZSwgY3Vy c29yX3dpZHRoLCByb3dfcG9zaXRpb24sIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgICAg YmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgTUNfR0xZUEgsIGRyYXdfcCwgZnJvbV93 aGVyZSwKKyAgICAgICAgICAgICAgICAgICBjYWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7CisgICAg ICBicmVhazsKKyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAg ICAgICAgICAgICAgICAgVkVSVElDQUxfUlVMRVI6ICBJTUFHRV9HTFlQSCAgICAgICAgICAgICAg ICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBWRVJUSUNBTF9S VUxFUjoKKyAgICB7CisgICAgICBjdXJzb3JfdHlwZSA9IE1DX0hPTExPV19CT1g7CisgICAgICBt Y19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBo cG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93 aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3Jv dW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBNQ19HTFlQSCwgZHJhd19wLCBmcm9tX3doZXJlLAor ICAgICAgICAgICAgICAgICBjYWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBicmVhazsK KyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZJTExfQ09MVU1OOiAgSU1BR0VfR0xZUEggICAgICAgICAgICAgICAgICAgICAgICAq LworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBGSUxMX0NPTFVNTjoKKyAgICB7 CisgICAgICBjdXJzb3JfdHlwZSA9IE1DX0hPTExPV19CT1g7CisgICAgICBtY19oZWxwZXIgKHcs IG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAor ICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bv c2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRp YWxzLmFjdGl2ZV9wLCBNQ19HTFlQSCwgZHJhd19wLCBmcm9tX3doZXJlLAorICAgICAgICAgICAg ICAgICBjYWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIENVUlNPUl9JTkRJQ0FUT1I6CisgICAgewor ICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgIH0KKyAgfQor LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRU5EOiAgSU1BR0VfR0xZUEggICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEJFR0lOOiAgQ09NUE9TSVRFX0dMWVBIICAgICAgICAgICAg ICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgIGVsc2UgaWYgKGds eXBoLT50eXBlID09IENPTVBPU0lURV9HTFlQSCkKKyAgeworICAgIGlmIChtY19zdGRlcnJfcCkK KyAgICAgIHsKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAgICJcbiAlNSJwRCJk LyUtNWQgJTVkICVjICU5InBEImQgJWMgJTNkIDB4JTA2eCIsCisgICAgICAgICAgZ2x5cGggLSBy b3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAgICAgICAgICgocm93LT51c2VkW2FyZWFdID09IDAp ID8gMCA6IHJvdy0+dXNlZFthcmVhXSAtIDEpLAorICAgICAgICAgIHJlbGF0aXZlX3gsCisgICAg ICAgICAgJysnLAorICAgICAgICAgIGdseXBoLT5jaGFycG9zLAorICAgICAgICAgIChCVUZGRVJQ IChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICA/ICdCJworICAgICAgICAgICA6IChTVFJJTkdQ IChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgICA/ICdTJworICAgICAgICAgICAgICA6IChO SUxQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgICAgICA/ICcwJworICAgICAgICAgICAg ICAgICA6ICctJykpKSwKKyAgICAgICAgICBnbHlwaC0+cGl4ZWxfd2lkdGgsCisgICAgICAgICAg KHVuc2lnbmVkIGludCkgZ2x5cGgtPnUuY21wLmlkKTsKKyAgICAgICAgZnByaW50ZiAoc3RkZXJy LCAiICU0ZCAlMS4xZCUxLjFkIiwKKyAgICAgICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAgICAgICAg ICBnbHlwaC0+bGVmdF9ib3hfbGluZV9wLAorICAgICAgICAgIGdseXBoLT5yaWdodF9ib3hfbGlu ZV9wKTsKKyAgICAgIGlmIChnbHlwaC0+dS5jbXAuYXV0b21hdGljKQorICAgICAgICBmcHJpbnRm IChzdGRlcnIsICIgICUzZCAlcyAuIFslZC0lZF1cbiIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgZ2x5cGgtPmhwb3MsIGdseXBoX3p2X3AgPyAiWlYiIDogIi0tIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBnbHlwaC0+c2xpY2UuY21wLmZyb20sIGdseXBoLT5zbGljZS5jbXAudG8pOwor ICAgICAgICBlbHNlCisgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICAgIH0K KyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAgeworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisv KiAgICAgICAgICAgICAgICAgICAgICAgTVVMVElQTEVfQ1VSU09SUzogIENPTVBPU0lURV9HTFlQ SCAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNh c2UgTVVMVElQTEVfQ1VSU09SUzoKKyAgICB7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwg cm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAg ICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBm b3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2 ZV9wLCBNQ19HTFlQSCwgZHJhd19wLCBmcm9tX3doZXJlLAorICAgICAgICAgICAgICAgICBjYWNo ZV90eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICBIT1JJWk9OVEFMX1JVTEVSOiAg Q09NUE9TSVRFX0dMWVBIICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tICovCisgICAgY2FzZSBIT1JJWk9OVEFMX1JVTEVSOgorICAgIHsKKyAgICAgIGlmIChyZWxh dGl2ZV94IDw9IHhfbGltaXQKKyAgICAgICAgICAmJiAhcmVhbF9mYWtlX2N1cnNvcl9wKQorICAg ICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHks IGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAgIHdkLCBoLCBjdXJzb3JfdHlwZSwg Y3Vyc29yX3dpZHRoLCByb3dfcG9zaXRpb24sIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAg ICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgTUNfR0xZUEgsIGRyYXdfcCwgZnJv bV93aGVyZSwKKyAgICAgICAgICAgICAgICAgICBjYWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7Cisg ICAgICBpZiAoZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09IHJvdy0+dXNlZFthcmVh XSAtIDEKKyAgICAgICAgICAmJiByZWxhdGl2ZV94IDw9IHhfbGltaXQpCisgICAgICAgIHsKKyAg ICAgICAgICByZWxhdGl2ZV94ICs9IGdseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICB3aGls ZSAocmVsYXRpdmVfeCA8PSB4X2xpbWl0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBt Y19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBo cG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgIHdkLCBoLCBjdXJzb3JfdHlwZSwg Y3Vyc29yX3dpZHRoLCByb3dfcG9zaXRpb24sIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgTUNfR0xZUEhMRVNTLCBk cmF3X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV93aGVyZSwgY2FjaGVfdHlwZSwg YWN0aW9uX3R5cGUpOworICAgICAgICAgICAgICByZWxhdGl2ZV94ICs9IGZyYW1lX2NoYXJfd2lk dGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgVkVSVElDQUxf UlVMRVI6ICBDT01QT1NJVEVfR0xZUEggICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIFZFUlRJQ0FMX1JVTEVSOgorICAgIHsKKyAgICAgIGVu dW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IChjdXJzb3JfYXRfZnJpbmdlX3AKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPmNvbnRpbnVlZF9wKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xB U0gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGN1cnNvcl9hdF9mcmlu Z2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXJvdy0+Y29u dGludWVkX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFyb3ct PnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA/IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiAoY3Vyc29yX2F0X2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2JleW9uZF9mcmluZ2VfcAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcm93LT50cnVuY2F0ZWRf b25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19S RVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogKGN1cnNvcl9iZXlvbmRfZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9yb3ctPnVzZWRbVEVYVF9BUkVBXSAhPSAx CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcm93LT50cnVuY2F0 ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBN Q19SRVZFUlNFRF9WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogKGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0g LSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA+ PSByb3ctPnBpeGVsX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA/IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAo Z2x5cGhfenZfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19H TFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNfR0xZUEg7 CisgICAgICBpZiAoZ2x5cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVwor ICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklH SFRfQVJST1cKKyAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX0JB Q0tTTEFTSAorICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVIKKyAg ICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSKQorICAg ICAgICBjdXJzb3JfdHlwZSA9IE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVA7CisgICAgICB3ZCA9IDE7 CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgb3Bv aW50X2Z4LCB5LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgd2QsIGgsIGN1cnNv cl90eXBlLCBjdXJzb3Jfd2lkdGgsIHJvd19wb3NpdGlvbiwgZm9yZWdyb3VuZCwKKyAgICAgICAg ICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgZ2x5cGhfZmxhdm9yLCBk cmF3X3AsIGZyb21fd2hlcmUsCisgICAgICAgICAgICAgICAgIGNhY2hlX3R5cGUsIGFjdGlvbl90 eXBlKTsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyog ICAgICAgICAgICAgICAgICAgICAgICAgIEZJTExfQ09MVU1OOiAgQ09NUE9TSVRFX0dMWVBIICAg ICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNl IEZJTExfQ09MVU1OOgorICAgIHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9 IChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVzc2VudGlhbHMuZmNfeCA+ IHJlbGF0aXZlX3gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNf R0xZUEhMRVNTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaF96 dl9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVT UworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIU5JTFAgKEJWQVIgKGIs IGNyb3NzaGFpcnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfdmVydGljYWxfcnVsZXIpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3kgPT0geQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3Zwb3MgPT0g dnBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19HTFlQSExF U1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNfR0xZUEg7CisgICAg ICB3ZCA9IDE7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRp dmVfeCwgZmNfZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwg Y3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAg ICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBnbHlwaF9mbGF2 b3IsIGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgY2FjaGVfdHlwZSwgYWN0 aW9uX3R5cGUpOworICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov CisgICAgY2FzZSBDVVJTT1JfSU5ESUNBVE9SOgorICAgIHsKKyAgICAgIGJyZWFrOworICAgIH0K Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICB9CisgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkQ6ICBDT01QT1NJVEVfR0xZ UEggICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K KworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQkVHSU46ICBYV0lER0VUX0dMWVBIICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBYV0lER0VU X0dMWVBIKQorICB7CisjaWZuZGVmIEhBVkVfWFdJREdFVFMKKyAgICBlYXNzdW1lIChmYWxzZSk7 CisjZWxzZQorICAgIGlmIChtY19zdGRlcnJfcCkKKyAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAg ICAgICAgIlxuICAlNWQvJS01ZCAlNWQgJTRjICU2ZCAlYyAlM2QgMHglMDV4ICU0ZCAlMS4xZCUx LjFkICAlM2QgJXMgJWNcbiIsCisgICAgICAgIGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVB XSwKKyAgICAgICAgKChyb3ctPnVzZWRbYXJlYV0gPT0gMCkgPyAwIDogcm93LT51c2VkW2FyZWFd IC0gMSksCisgICAgICAgIHJlbGF0aXZlX3gsCisgICAgICAgICdYJywKKyAgICAgICAgZ2x5cGgt PmNoYXJwb3MsCisgICAgICAgIChCVUZGRVJQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgPyAn QicKKyAgICAgICAgIDogKFNUUklOR1AgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAgICA/ICdT JworICAgICAgICAgICAgOiAnLScpKSwKKyAgICAgICAgZ2x5cGgtPnBpeGVsX3dpZHRoLAorICAg ICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAgICAgICAgZ2x5cGgtPmxlZnRfYm94X2xpbmVfcCwKKyAg ICAgICAgZ2x5cGgtPnJpZ2h0X2JveF9saW5lX3AsCisgICAgICAgIGdseXBoLT51Lnh3aWRnZXQs CisgICAgICAgIGdseXBoLT5ocG9zLCBnbHlwaF96dl9wID8gIlpWIiA6ICItLSIsCisgICAgICAg ICcuJyk7CisjZW5kaWYKKyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAgeworLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIE1VTFRJUExFX0NVUlNPUlM6 ICBYV0lER0VUX0dMWVBIICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAqLworICAgIGNhc2UgTVVMVElQTEVfQ1VSU09SUzoKKyAgICB7CisgICAgICBtY19oZWxw ZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2 cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwg cm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBl c3NlbnRpYWxzLmFjdGl2ZV9wLCBNQ19HTFlQSCwgZHJhd19wLCBmcm9tX3doZXJlLAorICAgICAg ICAgICAgICAgICBjYWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBicmVhazsKKyAgICB9 CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgSE9S SVpPTlRBTF9SVUxFUjogIFhXSURHRVRfR0xZUEggICAgICAgICAgICAgICAgICAgICAqLworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBIT1JJWk9OVEFMX1JVTEVSOgorICAgIHsK KyAgICAgIGlmIChyZWxhdGl2ZV94IDw9IHhfbGltaXQKKyAgICAgICAgICAmJiAhcmVhbF9mYWtl X2N1cnNvcl9wKQorICAgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVs YXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAgIHdkLCBo LCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCByb3dfcG9zaXRpb24sIGZvcmVncm91bmQsCisg ICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgTUNfR0xZ UEgsIGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgICBjYWNoZV90eXBlLCBh Y3Rpb25fdHlwZSk7CisgICAgICBpZiAoZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09 IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAmJiByZWxhdGl2ZV94IDw9IHhfbGltaXQp CisgICAgICAgIHsKKyAgICAgICAgICByZWxhdGl2ZV94ICs9IGdseXBoLT5waXhlbF93aWR0aDsK KyAgICAgICAgICB3aGlsZSAocmVsYXRpdmVfeCA8PSB4X2xpbWl0KQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVf eCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgIHdkLCBo LCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCByb3dfcG9zaXRpb24sIGZvcmVncm91bmQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwg TUNfR0xZUEhMRVNTLCBkcmF3X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV93aGVy ZSwgY2FjaGVfdHlwZSwgYWN0aW9uX3R5cGUpOworICAgICAgICAgICAgICByZWxhdGl2ZV94ICs9 IGZyYW1lX2NoYXJfd2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFr OworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAg ICAgICAgIFZFUlRJQ0FMX1JVTEVSOiAgWFdJREdFVF9HTFlQSCAgICAgICAgICAgICAgICAgICAg ICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIFZFUlRJQ0FMX1JVTEVSOgor ICAgIHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IChjdXJzb3JfYXRfZnJp bmdlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPmNvbnRp bnVlZF9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJ Q0FMX0JBUl9CQUNLU0xBU0gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog KGN1cnNvcl9hdF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgIXJvdy0+Y29udGludWVkX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmICFyb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2F0X2ZyaW5nZV9wCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9SSUdI VF9BUlJPVworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2Jl eW9uZF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg cm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgPyBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGN1cnNvcl9iZXlvbmRfZnJpbmdlX3AKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9yb3ctPnVzZWRb VEVYVF9BUkVBXSAhPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiAhcm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPyBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogKGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSBy b3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBvcG9pbnRfeCA+PSByb3ctPnBpeGVsX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiAoZ2x5cGhfenZfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgPyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogTUNfR0xZUEg7CisgICAgICBpZiAoZ2x5cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JB Ul9SSUdIVF9BUlJPVworICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9W RVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNf VkVSVElDQUxfQkFSX0JBQ0tTTEFTSAorICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19W RVJUSUNBTF9CQVIKKyAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfVkVS VElDQUxfQkFSKQorICAgICAgICBjdXJzb3JfdHlwZSA9IE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVA7 CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgb3Bv aW50X2Z4LCB5LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgd2QsIGgsIGN1cnNv cl90eXBlLCBjdXJzb3Jfd2lkdGgsIHJvd19wb3NpdGlvbiwgZm9yZWdyb3VuZCwKKyAgICAgICAg ICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgZ2x5cGhfZmxhdm9yLCBk cmF3X3AsIGZyb21fd2hlcmUsCisgICAgICAgICAgICAgICAgIGNhY2hlX3R5cGUsIGFjdGlvbl90 eXBlKTsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyog ICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxMX0NPTFVNTjogIFhXSURHRVRfR0xZUEggICAg ICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNl IEZJTExfQ09MVU1OOgorICAgIHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9 IChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVzc2VudGlhbHMuZmNfeCA+ IHJlbGF0aXZlX3gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNf R0xZUEhMRVNTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaF96 dl9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVT UworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIU5JTFAgKEJWQVIgKGIs IGNyb3NzaGFpcnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfdmVydGljYWxfcnVsZXIpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3kgPT0geQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3Zwb3MgPT0g dnBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19HTFlQSExF U1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNfR0xZUEg7CisgICAg ICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZmNfZngsIHks IGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1 cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBi YWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIGRyYXdfcCwgZnJv bV93aGVyZSwKKyAgICAgICAgICAgICAgICAgY2FjaGVfdHlwZSwgYWN0aW9uX3R5cGUpOworICAg ICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBDVVJT T1JfSU5ESUNBVE9SOgorICAgIHsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLworICB9CisgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRU5EOiAgWFdJREdFVF9HTFlQSCAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK30KKwordm9pZAorbWNf ZHJhd19yb3cgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwg c3RydWN0IGdseXBoX3JvdyAqcm93LAorICAgICAgICAgICAgIHN0cnVjdCBnbHlwaCAqc3RhcnQs IGludCB4LCBpbnQgaHBvc19sZW5ndGgsIGludCB2cG9zLAorICAgICAgICAgICAgIHN0cnVjdCBn bHlwaF9tYXRyaXggKmN1cnNvcl9tYXRyaXgsIHN0cnVjdCBtY19lc3NlbnRpYWxzIGVzc2VudGlh bHMsCisgICAgICAgICAgICAgZW51bSBtY19yb3dfcG9zaXRpb24gcm93X3Bvc2l0aW9uLCBib29s IGRyYXdfcCwgZW51bSBtY19kcmF3X3Jvd190eXBlIGZyb21fd2hlcmUpCit7CisgIC8vICBjbG9j a190IGNsb2NrX3N0YXJ0ID0gY2xvY2soKTsKKyAgLyogVzMyIEVtYWNzIGNyYXNoZXMgb24gc3Rh cnR1cCB3aXRob3V0IGEgYEJVRkZFUlAnIGNoZWNrIGluIGB1cGRhdGVfd2luZG93Jy4gKi8KKyAg aWYgKCFCVUZGRVJQICh3LT5jb250ZW50cykpCisgICAgcmV0dXJuOworICBzdHJ1Y3QgYnVmZmVy ICpiID0gWEJVRkZFUiAody0+Y29udGVudHMpOworICBpZiAoTklMUCAoQlZBUiAoYiwgbWNfY29u ZikpCisgICAgICAmJiBOSUxQIChCVkFSIChiLCBjcm9zc2hhaXJzKSkKKyAgICAgICYmIE5JTFAg KEJWQVIgKGIsIGZjX3Zpc2libGUpKSkKKyAgICByZXR1cm47CisgIHN0cnVjdCBnbHlwaF9yb3cg KmJvdHRvbV9yb3cgPSBNQVRSSVhfQk9UVE9NX1RFWFRfUk9XIChtYXRyaXgsIHcpOworICBpbnQg Ym90dG9tX3Zwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKGJvdHRvbV9yb3csIG1hdHJpeCk7CisgIGlm ICh2cG9zID09IGJvdHRvbV92cG9zKQorICAgIHJldHVybjsKKyAgaWYgKCFyb3ctPnVzZWRbVEVY VF9BUkVBXSkKKyAgICByZXR1cm47CisgIGludCBocG9zX3N0YXJ0ID0gc3RhcnQgLSByb3ctPmds eXBoc1tURVhUX0FSRUFdOworICBpZiAobWNfc3RkZXJyX3ApCisgICAgZnByaW50ZiAoc3RkZXJy LCAibWNfZHJhd19yb3cgKCVkKTogIGRyYXdfcCAoJXMpIHwgaHBvcyAoJWQpIHwgbGVuICglZClc biIsCisgICAgICAgICAgICAgICAgICAgICB2cG9zLCBkcmF3X3AgPyAieSIgOiAibiIsIGhwb3Nf c3RhcnQsIGhwb3NfbGVuZ3RoKTsKKyAgaW50IG9wb2ludF9meCwgb3BvaW50X2Z5LCBvcG9pbnRf d2QsIG9wb2ludF9oOworICBpbnQgdGV4dF9hcmVhX3dpZHRoID0gd2luZG93X2JveF93aWR0aCAo dywgVEVYVF9BUkVBKTsKKyAgaW50IGhlYWRlcl9saW5lX2Zvcm1hdCA9IFdJTkRPV19IRUFERVJf TElORV9IRUlHSFQgKHcpOworICBzdHJ1Y3QgZ2x5cGhfcm93ICpjdXJzb3Jfcm93ID0gKHctPmN1 cnNvci52cG9zICE9IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQVRS SVhfUk9XIChjdXJzb3JfbWF0cml4LCB3LT5jdXJzb3IudnBvcykKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogTlVMTDsKKyAgc3RydWN0IGdseXBoICpjdXJzb3JfZ2x5cGggPSAo dy0+Y3Vyc29yLnZwb3MgIT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBt Y19nZXRfY3Vyc29yX2dseXBoICh3LCBjdXJzb3JfbWF0cml4LCBjdXJzb3Jfcm93LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy0+Y3Vyc29y Lmhwb3MsIHctPmN1cnNvci52cG9zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog TlVMTDsKKyAgYm9vbCBjdXJzb3JfYXRfZnJpbmdlX3AgPSAoY3Vyc29yX2dseXBoID09IE5VTEwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX3JvdyAhPSBOVUxMCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci5ocG9zID09IGN1cnNvcl9yb3ct PnVzZWRbVEVYVF9BUkVBXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjdXJzb3Jf cm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIHctPmN1cnNvci54ID09IHRleHRfYXJlYV93aWR0aAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA9PSBjdXJzb3Jfcm93LT5waXhlbF93aWR0aCk7Cisg IGJvb2wgY3Vyc29yX2JleW9uZF9mcmluZ2VfcCA9IChjdXJzb3JfZ2x5cGggPT0gTlVMTAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX3JvdyAhPSBOVUxMCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IuaHBvcyA9PSBjdXJzb3Jf cm93LT51c2VkW1RFWFRfQVJFQV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm ICFjdXJzb3Jfcm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA+PSB0ZXh0X2FyZWFfd2lkdGgKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci54ID49IGN1cnNvcl9yb3ct PnBpeGVsX3dpZHRoKTsKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAg ICAgICAgICAgICBSRVBMQUNFIFRIRSBSRUFMIENVUlNPUgorKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCisgIGVudW0gZmFjZV9pZCBiZ19mYWNlX2lkID0gKGN1cnNvcl9nbHlwaCAhPSBOVUxMKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY3Vyc29yX2dseXBoLT5mYWNlX2lkCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiBERUZBVUxUX0ZBQ0VfSUQ7CisgIHN0cnVjdCBtY19S R0IgY3Vyc29yX2JnOworICBtY19zZXRfbHNsX2JnICh3LCBiZ19mYWNlX2lkLCAmY3Vyc29yX2Jn KTsKKyAgLyogRklYTUU6ICBQdXQgaW4gc29tZSBjb2RlIHRvIGRlZmF1bHQgdG8gTUNfSE9MTE9X X0JPWCBpZiB0aGUgdXNlciBoYXMKKyAgdW53aXR0aW5nbHkgY29tZSB1cCB3aXRoIHNvbWUgdW5h Y2NlcHRhYmxlIGZvcm0gb2YgdW5yZWNvZ25pemVkIGN1cnNvciB0eXBlLiAqLworICBMaXNwX09i amVjdCBsaXNwX3R5cGUgPSBCVkFSIChiLCBtY19yZWFsX2Zha2VfY3Vyc29yKTsKKyAgZW51bSBt Y19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZSA9IChDT05TUCAobGlzcF90eXBlKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWNfbGlzcF90b19jdXJzb3JfdHlwZSAoWENB UiAobGlzcF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWNf bGlzcF90b19jdXJzb3JfdHlwZSAobGlzcF90eXBlKTsKKyAgaW50IGN1cnNvcl93aWR0aCA9IChD T05TUCAobGlzcF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgID8gWEZJWE5VTSAoWENBUiAo WENEUiAobGlzcF90eXBlKSkpCisgICAgICAgICAgICAgICAgICAgICA6IC0xOworICBzdHJ1Y3Qg bWNfUkdCIGN1cnNvcl9mZzsKKyAgbWNfY29sb3JfcGlja2VyICh3LCBjdXJzb3JfZ2x5cGgsIGVz c2VudGlhbHMsICZjdXJzb3JfZmcsIC0xLCBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAg ICByb3dfcG9zaXRpb24sIENVUlNPUl9JTkRJQ0FUT1IpOworICBib29sIGZpbGxfY29sdW1uX3Ry dW1wc19wID0gKCFOSUxQIChCVkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIGZjX3Zpc2libGUpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci54ID09IGVzc2VudGlhbHMu ZmNfeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFjdXJzb3JfYXRfZnJpbmdl X3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhY3Vyc29yX2JleW9uZF9mcmlu Z2VfcCk7CisgIC8qIFdlIHVzZSBhIHRlc3Qgc2ltaWxhciB0byB0aGUgcmVhbCBmYWtlIGN1cnNv ciBzbyB0aGF0IHRoZSBmcmluZ2UgYml0bWFwIGlzCisgIG9ubHkgZHJhd24gb25jZSBwZXIgd2lu ZG93LiAqLworICBpZiAodnBvcyA9PSB3LT5jdXJzb3IudnBvcworICAgICAgJiYgaHBvc19zdGFy dCArIGhwb3NfbGVuZ3RoID09IHJvdy0+dXNlZFtURVhUX0FSRUFdCisgICAgICAmJiAhTklMUCAo QlZBUiAoYiwgY3Jvc3NoYWlycykpCisgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaG9yaXpv bnRhbF9ydWxlcikpKQorICAgIHsKKyAgICAgIC8qIGZyaW5nZSBiaXRtYXBzIHVzZSBmYWNlX2lk IHRvIHNldCB0aGUgZm9yZWdyb3VuZCBjb2xvci4gIFRoZSBvdmVybGF5LWFycm93CisgICAgICBp cyBwcmVzZW50bHkgdGhlIG9ubHkgc2l0dWF0aW9uIHdoZXJlIHRoZSBgZXNzZW50aWFscy5hY3Rp dmVfcGAgYW5kIGBtaW5pbWFsX3BgIGFyZQorICAgICAgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFw cGxpY2FibGUgZmFjZV9pZC4gKi8KKyAgICAgIHN0cnVjdCBtY19SR0IgbHNsX2ZnID0gey5yZWQg PSAtMS4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdyZWVuID0gLTEuMCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ibHVlID0gLTEuMH07CisgICAgICAvKiBXZSB1 c2UgdGhlIGZpcnN0IGdseXBoIGluIHRoZSByb3csIHdpdGggYW4gWCBhbmQgSFBPUyBvZiB6ZXJv LiAqLworICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgcm93LT5nbHlwaHNbVEVYVF9B UkVBXSwgMCwgLTEsIHctPmN1cnNvci55LCAtMSwKKyAgICAgICAgICAgICAgICAgMCwgdy0+Y3Vy c29yLnZwb3MsIC0xLCAtMSwgTUNfTEVGVF9GUklOR0VfQklUTUFQLCAtMSwgcm93X3Bvc2l0aW9u LAorICAgICAgICAgICAgICAgICBsc2xfZmcsIGN1cnNvcl9iZywgZXNzZW50aWFscy5hY3RpdmVf cCwgTUNfT1ZFUkxBWV9BUlJPV19CSVRNQVAsCisgICAgICAgICAgICAgICAgIGRyYXdfcCwgZnJv bV93aGVyZSwgQ0hfQ0FDSEUsIENVUlNPUl9JTkRJQ0FUT1IpOworICAgIH0KKyAgaWYgKGN1cnNv cl9hdF9mcmluZ2VfcAorICAgICAgJiYgdnBvcyA9PSB3LT5jdXJzb3IudnBvcworICAgICAgJiYg dy0+Y3Vyc29yLmhwb3MgPj0gaHBvc19zdGFydAorICAgICAgJiYgdy0+Y3Vyc29yLmhwb3MgPT0g aHBvc19zdGFydCArIGhwb3NfbGVuZ3RoCisgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY3Jvc3No YWlycykpCisgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaG9yaXpvbnRhbF9ydWxlcikpKQor ICAgIHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IE1DX0hPTExPV19SRUNU QU5HTEU7CisgICAgICBzdHJ1Y3QgZ2x5cGggKmdseXBoID0gcm93LT5nbHlwaHNbVEVYVF9BUkVB XTsKKyAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGhfZW5kID0gZ2x5cGggKyByb3ctPnVzZWRbVEVY VF9BUkVBXTsKKyAgICAgIC8qIEdseXBoIGZvciBhIGxpbmUgZW5kIGluIHRleHQuICovCisgICAg ICBpZiAoZ2x5cGggPT0gZ2x5cGhfZW5kICYmIGdseXBoLT5jaGFycG9zID4gMCkKKyAgICAgICAg KytnbHlwaF9lbmQ7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaF9lbmQg LSAxLCB3LT5jdXJzb3IueCwgLTEsIHctPmN1cnNvci55LCAtMSwKKyAgICAgICAgICAgICAgICAg dy0+Y3Vyc29yLmhwb3MsIHctPmN1cnNvci52cG9zLCAtMSwgLTEsIE1DX1JJR0hUX0ZSSU5HRV9C SVRNQVAsCisgICAgICAgICAgICAgICAgIC0xLCByb3dfcG9zaXRpb24sIGN1cnNvcl9mZywgY3Vy c29yX2JnLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICBnbHlwaF9mbGF2 b3IsIGRyYXdfcCwgZnJvbV93aGVyZSwgQ0hfQ0FDSEUsIENVUlNPUl9JTkRJQ0FUT1IpOworICAg IH0KKyAgLyogQ3Vyc29yIGlzIGJleW9uZCB0aGUgcmlnaHQgZnJpbmdlOyBlLmcuLCB3aGVuIHJp Z2h0IGhvcml6b250YWwgc2Nyb2xsaW5nLiAqLworICBlbHNlIGlmIChjdXJzb3JfYmV5b25kX2Zy aW5nZV9wCisgICAgICAgICAgICYmIHZwb3MgPT0gdy0+Y3Vyc29yLnZwb3MKKyAgICAgICAgICAg JiYgdy0+Y3Vyc29yLmhwb3MgPj0gaHBvc19zdGFydAorICAgICAgICAgICAmJiAoaHBvc19zdGFy dCArIGhwb3NfbGVuZ3RoKSA9PSByb3ctPnVzZWRbVEVYVF9BUkVBXQorICAgICAgICAgICAmJiAh TklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlycykpCisgICAgICAgICAgICYmICFOSUxQIChCVkFSIChi LCBjaF9ob3Jpem9udGFsX3J1bGVyKSkpCisgICAgeworICAgICAgZW51bSBtY19mbGF2b3IgZ2x5 cGhfZmxhdm9yID0gTUNfUkVWRVJTRURfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVzsKKyAg ICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGggPSByb3ctPmdseXBoc1tURVhUX0FSRUFdOworICAgICAg c3RydWN0IGdseXBoICpnbHlwaF9lbmQgPSBnbHlwaCArIHJvdy0+dXNlZFtURVhUX0FSRUFdOwor ICAgICAgLyogR2x5cGggZm9yIGEgbGluZSBlbmQgaW4gdGV4dC4gKi8KKyAgICAgIGlmIChnbHlw aCA9PSBnbHlwaF9lbmQgJiYgZ2x5cGgtPmNoYXJwb3MgPiAwKQorICAgICAgICArK2dseXBoX2Vu ZDsKKyAgICAgIG1jX2hlbHBlciAodywgbWF0cml4LCByb3csIGdseXBoX2VuZCAtIDEsIHJvdy0+ cGl4ZWxfd2lkdGgsIC0xLCB3LT5jdXJzb3IueSwKKyAgICAgICAgICAgICAgICAgLTEsIHJvdy0+ dXNlZFtURVhUX0FSRUFdIC0gMSwgdy0+Y3Vyc29yLnZwb3MsIC0xLCAtMSwKKyAgICAgICAgICAg ICAgICAgTUNfUklHSFRfRlJJTkdFX0JJVE1BUCwgLTEsIHJvd19wb3NpdGlvbiwgY3Vyc29yX2Zn LCBjdXJzb3JfYmcsCisgICAgICAgICAgICAgICAgIGVzc2VudGlhbHMuYWN0aXZlX3AsIGdseXBo X2ZsYXZvciwgZHJhd19wLCBmcm9tX3doZXJlLCBDSF9DQUNIRSwKKyAgICAgICAgICAgICAgICAg Q1VSU09SX0lORElDQVRPUik7CisgICAgfQorICAvKiBFWEFNUExFIChidWZmZXItbG9jYWwpOiAg KHNldHEgbWMtcmVhbC1mYWtlLWN1cnNvciBuaWwvJ25vLyJubyIpICovCisgIGVsc2UgaWYgKCFj dXJzb3JfYXRfZnJpbmdlX3AKKyAgICAgICAgICAgJiYgY3Vyc29yX2dseXBoICE9IE5VTEwKKyAg ICAgICAgICAgJiYgY3Vyc29yX3R5cGUgPT0gTUNfTk9fQ1VSU09SCisgICAgICAgICAgICYmIHZw b3MgPT0gdy0+Y3Vyc29yLnZwb3MKKyAgICAgICAgICAgJiYgdy0+Y3Vyc29yLmhwb3MgPj0gaHBv c19zdGFydAorICAgICAgICAgICAmJiB3LT5jdXJzb3IuaHBvcyA8IGhwb3Nfc3RhcnQgKyBocG9z X2xlbmd0aCkKKyAgICB7CisgICAgICAvKiBXaGVuIGEgdXNlciBoYXMgbm90IHNwZWNpZmllZCBh IHZhbHVlIGZvciBgbWMtcmVhbC1mYWtlLWN1cnNvcicsIG9yIHRoZQorICAgICAgdmFsdWUgaXMg YG5vYCBpbiB0aGUgZm9ybSBvZiBhIHN5bWJvbCBvciBzdHJpbmcsIHRoZW4gdGhlIGRlZmF1bHQg d2UgdXNlCisgICAgICBhbiBNQ19CQVIgYW5kIGFuIE1DX0hCQVIgLS0gYm90aCBoYXZpbmcgYSBj dXJzb3Jfd2lkdGggb2YgMS4gKi8KKyAgICAgIG1jX2dldF9jdXJzb3JfZ2VvbWV0cnkgKHcsIG1h dHJpeCwgcm93LCB3LT5jdXJzb3IueCwgJm9wb2ludF9meCwgdy0+Y3Vyc29yLnksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmb3BvaW50X2Z5LCB3LT5jdXJzb3IuaHBvcywgdy0+Y3Vy c29yLnZwb3MsICZvcG9pbnRfaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DX0JB UiwgMSwgJm9wb2ludF93ZCk7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBjdXJz b3JfZ2x5cGgsIHctPmN1cnNvci54LCBvcG9pbnRfZngsIHctPmN1cnNvci55LAorICAgICAgICAg ICAgICAgICBvcG9pbnRfZnksIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcywgb3BvaW50 X3dkLCBvcG9pbnRfaCwKKyAgICAgICAgICAgICAgICAgTUNfQkFSLCAxLCByb3dfcG9zaXRpb24s IGN1cnNvcl9mZywgY3Vyc29yX2JnLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLAorICAgICAgICAgICAg ICAgICBNQ19HTFlQSExFU1MsIGRyYXdfcCwgZnJvbV93aGVyZSwgTklMUCAoQlZBUiAoYiwgbWNf Y29uZikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA/IENIX0NBQ0hFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IE1DX0NBQ0hFLCBDVVJTT1JfSU5ESUNBVE9SKTsKKyAgICAgIG1jX2dldF9jdXJz b3JfZ2VvbWV0cnkgKHcsIG1hdHJpeCwgcm93LCB3LT5jdXJzb3IueCwgJm9wb2ludF9meCwgdy0+ Y3Vyc29yLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BvaW50X2Z5LCB3LT5j dXJzb3IuaHBvcywgdy0+Y3Vyc29yLnZwb3MsICZvcG9pbnRfaCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE1DX0hCQVIsIDEsICZvcG9pbnRfd2QpOworICAgICAgbWNfaGVscGVyICh3 LCBtYXRyaXgsIHJvdywgY3Vyc29yX2dseXBoLCB3LT5jdXJzb3IueCwgb3BvaW50X2Z4LCB3LT5j dXJzb3IueSwKKyAgICAgICAgICAgICAgICAgb3BvaW50X2Z5LCB3LT5jdXJzb3IuaHBvcywgdy0+ Y3Vyc29yLnZwb3MsIG9wb2ludF93ZCwgb3BvaW50X2gsCisgICAgICAgICAgICAgICAgIE1DX0hC QVIsIDEsIHJvd19wb3NpdGlvbiwgY3Vyc29yX2ZnLCBjdXJzb3JfYmcsIGVzc2VudGlhbHMuYWN0 aXZlX3AsCisgICAgICAgICAgICAgICAgIE1DX0dMWVBILCBkcmF3X3AsIGZyb21fd2hlcmUsIE5J TFAgKEJWQVIgKGIsIG1jX2NvbmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA/IENIX0NBQ0hFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogTUNfQ0FDSEUsIENVUlNPUl9JTkRJQ0FUT1IpOworICAgIH0KKyAg ZWxzZSBpZiAoIWN1cnNvcl9hdF9mcmluZ2VfcAorICAgICAgICAgICAmJiBjdXJzb3JfZ2x5cGgg IT0gTlVMTAorICAgICAgICAgICAmJiB2cG9zID09IHctPmN1cnNvci52cG9zCisgICAgICAgICAg ICYmIHctPmN1cnNvci5ocG9zID49IGhwb3Nfc3RhcnQKKyAgICAgICAgICAgJiYgdy0+Y3Vyc29y Lmhwb3MgPCBocG9zX3N0YXJ0ICsgaHBvc19sZW5ndGgKKyAgICAgICAgICAgJiYgY3Vyc29yX2ds eXBoLT50eXBlICE9IFNUUkVUQ0hfR0xZUEgpCisgICAgeworICAgICAgbWNfZ2V0X2N1cnNvcl9n ZW9tZXRyeSAodywgbWF0cml4LCByb3csIHctPmN1cnNvci54LCAmb3BvaW50X2Z4LCB3LT5jdXJz b3IueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcG9pbnRfZnksIHctPmN1cnNv ci5ocG9zLCB3LT5jdXJzb3IudnBvcywgJm9wb2ludF9oLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgJm9wb2ludF93ZCk7CisgICAgICBt Y19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBjdXJzb3JfZ2x5cGgsIHctPmN1cnNvci54LCBvcG9p bnRfZngsIHctPmN1cnNvci55LAorICAgICAgICAgICAgICAgICBvcG9pbnRfZnksIHctPmN1cnNv ci5ocG9zLCB3LT5jdXJzb3IudnBvcywgb3BvaW50X3dkLCBvcG9pbnRfaCwKKyAgICAgICAgICAg ICAgICAgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBjdXJzb3JfZmcs IGN1cnNvcl9iZywKKyAgICAgICAgICAgICAgICAgZXNzZW50aWFscy5hY3RpdmVfcCwgTUNfR0xZ UEgsIGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgTklMUCAoQlZBUiAoYiwg bWNfY29uZikpCisgICAgICAgICAgICAgICAgID8gQ0hfQ0FDSEUKKyAgICAgICAgICAgICAgICAg OiBNQ19DQUNIRSwgQ1VSU09SX0lORElDQVRPUik7CisgICAgfQorICBlbHNlIGlmICghY3Vyc29y X2F0X2ZyaW5nZV9wCisgICAgICAgICAgICYmIGN1cnNvcl9nbHlwaCAhPSBOVUxMCisgICAgICAg ICAgICYmIHZwb3MgPT0gdy0+Y3Vyc29yLnZwb3MKKyAgICAgICAgICAgJiYgdy0+Y3Vyc29yLmhw b3MgPj0gaHBvc19zdGFydAorICAgICAgICAgICAmJiB3LT5jdXJzb3IuaHBvcyA8IGhwb3Nfc3Rh cnQgKyBocG9zX2xlbmd0aAorICAgICAgICAgICAmJiBjdXJzb3JfZ2x5cGgtPnR5cGUgPT0gU1RS RVRDSF9HTFlQSCkKKyAgICB7CisgICAgICAvKiBJZiBhIHVzZXIgaGFzIHNldCBgeC1zdHJldGNo LWN1cnNvcicgdG8gYSBub24tbmlsIHZhbHVlLCBoZS9zaGUgY2hvc2UgdG8KKyAgICAgIGhhdmUg YSBjdXJzb3IgdGhhdCBzcGFucyB0aGUgZW50aXJlIGxlbmd0aCBvZiB0aGUgU1RSRVRDSF9HTFlQ SC4gKi8KKyAgICAgIGlmICgheF9zdHJldGNoX2N1cnNvcl9wKQorICAgICAgICB7CisgICAgICAg ICAgLyogVGhlIE1DX0hCQVIgc2hhbGwgaGF2ZSBhIGBjdXJzb3Jfd2lkdGhgIG9mIDEuICovCisg ICAgICAgICAgbWNfZ2V0X2N1cnNvcl9nZW9tZXRyeSAodywgbWF0cml4LCByb3csIHctPmN1cnNv ci54LCAmb3BvaW50X2Z4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHctPmN1 cnNvci55LCAmb3BvaW50X2Z5LCB3LT5jdXJzb3IuaHBvcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3LT5jdXJzb3IudnBvcywgJm9wb2ludF9oLCBNQ19IQkFSLCAxLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcG9pbnRfd2QpOworICAgICAgICAgIG1j X2hlbHBlciAodywgbWF0cml4LCByb3csIGN1cnNvcl9nbHlwaCwgdy0+Y3Vyc29yLngsIG9wb2lu dF9meCwKKyAgICAgICAgICAgICAgICAgICAgIHctPmN1cnNvci55LCBvcG9pbnRfZnksIHctPmN1 cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcywKKyAgICAgICAgICAgICAgICAgICAgIG9wb2ludF93 ZCwgb3BvaW50X2gsIE1DX0hCQVIsIDEsIHJvd19wb3NpdGlvbiwgY3Vyc29yX2ZnLAorICAgICAg ICAgICAgICAgICAgICAgY3Vyc29yX2JnLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBNQ19HTFlQSCwg ZHJhd19wLCBmcm9tX3doZXJlLAorICAgICAgICAgICAgICAgICAgICAgTklMUCAoQlZBUiAoYiwg bWNfY29uZikpCisgICAgICAgICAgICAgICAgICAgICA/IENIX0NBQ0hFCisgICAgICAgICAgICAg ICAgICAgICA6IE1DX0NBQ0hFLCBDVVJTT1JfSU5ESUNBVE9SKTsKKyAgICAgICAgfQorICAgICAg bWNfZ2V0X2N1cnNvcl9nZW9tZXRyeSAodywgbWF0cml4LCByb3csIHctPmN1cnNvci54LCAmb3Bv aW50X2Z4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy0+Y3Vyc29yLnksICZvcG9p bnRfZnksIHctPmN1cnNvci5ocG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy0+ Y3Vyc29yLnZwb3MsICZvcG9pbnRfaCwgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjdXJzb3Jfd2lkdGgsICZvcG9pbnRfd2QpOworICAgICAgbWNfaGVscGVyICh3 LCBtYXRyaXgsIHJvdywgY3Vyc29yX2dseXBoLCB3LT5jdXJzb3IueCwgb3BvaW50X2Z4LCB3LT5j dXJzb3IueSwKKyAgICAgICAgICAgICAgICAgb3BvaW50X2Z5LCB3LT5jdXJzb3IuaHBvcywgdy0+ Y3Vyc29yLnZwb3MsIG9wb2ludF93ZCwgb3BvaW50X2gsCisgICAgICAgICAgICAgICAgIGN1cnNv cl90eXBlLCBjdXJzb3Jfd2lkdGgsIHJvd19wb3NpdGlvbiwgY3Vyc29yX2ZnLCBjdXJzb3JfYmcs CisgICAgICAgICAgICAgICAgIGVzc2VudGlhbHMuYWN0aXZlX3AsIE1DX0dMWVBILCBkcmF3X3As IGZyb21fd2hlcmUsCisgICAgICAgICAgICAgICAgIE5JTFAgKEJWQVIgKGIsIG1jX2NvbmYpKQor ICAgICAgICAgICAgICAgICA/IENIX0NBQ0hFCisgICAgICAgICAgICAgICAgIDogTUNfQ0FDSEUs IENVUlNPUl9JTkRJQ0FUT1IpOworICAgIH0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAg ICAgICAgICAgICAgICAgICAgICAgICBEUkFXIEFORCBSRUNPUkQgRkFLRSBDVVJTT1JTCisqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKyAgaWYgKCFlc3NlbnRpYWxzLmFjdGl2ZV9wCisgICAgICAm JiBOSUxQIChCVkFSIChiLCBtY19pbmFjdGl2ZV93aW5kb3dzKSkKKyAgICAgICYmIE5JTFAgKEJW QVIgKGIsIGNoX2luYWN0aXZlX3dpbmRvd3MpKQorICAgICAgJiYgTklMUCAoQlZBUiAoYiwgZmNf aW5hY3RpdmVfd2luZG93cykpKQorICAgIHJldHVybjsKKyAgaWYgKGhwb3NfbGVuZ3RoID09IDEp CisgICAgeworICAgICAgaWYgKCFOSUxQIChCVkFSIChiLCBtY19jb25mKSkKKyAgICAgICAgICAm JiAoZXNzZW50aWFscy5hY3RpdmVfcAorICAgICAgICAgICAgICB8fCAoIWVzc2VudGlhbHMuYWN0 aXZlX3AKKyAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBtY19pbmFjdGl2ZV93 aW5kb3dzKSkpKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRoZSBzcGFjZSBhcHBlbmRlZCB0 byBhIHJvdyBlbmRpbmcgd2l0aCBhIG5ldyBsaW5lCisgICAgICAgICAgZG9lcyBub3QgaGF2ZSBh IGBnbHlwaC0+Y2hhcnBvc2AgKC0xLCAwKSB0aGF0IHdlIGNhbgorICAgICAgICAgIHVzZSBmb3Ig dGhpcyBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uLiAgV2hlbiB0aGVyZSBpcyBhCisgICAgICAgICAg YGJ1ZmZlci1kaXNwbGF5LXRhYmxlJyBlbnRyeSB0aGF0IGFzc2lnbnMgYSB2aXNpYmxlCisgICAg ICAgICAgZ2x5cGggdG8gYSBuZXcgbGluZSwgdGhlcmUgaXMgbm8gcHJvYmxlbSBiZWNhdXNlIHRo YXQKKyAgICAgICAgICBnbHlwaCBoYXMgYSBgZ2x5cGgtPmNoYXJwb3MnIHRoYXQgd2UgY2FuIHVz ZS4gIFdoZW4KKyAgICAgICAgICBubyB2aXNpYmxlIEVPTCBnbHlwaCBleGlzdHMsIHdlIHVzZSB0 aGUgZm9sbG93aW5nCisgICAgICAgICAgdGVzdDogIHRoZSBhcHBlbmRlZCBzcGFjZSBoYXMgYSBw b3NpdGlvbiB0aGF0IGlzIG9uZQorICAgICAgICAgIGxlc3MgdGhhbiB0aGUgZW5kIG9mIHRoZSBt YXRyaXggcm93LiAqLworICAgICAgICAgIGludCBocG9zID0gc3RhcnQgLSByb3ctPmdseXBoc1tU RVhUX0FSRUFdOworICAgICAgICAgIHN0cnVjdCBnbHlwaCAqcHJldmlvdXNfZ2x5cGggPSAoMCA8 PSBocG9zIC0gMSAmJiBocG9zIC0gMSA8IHJvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0g KyBocG9zIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5V TEw7CisgICAgICAgICAgLy8gc3RydWN0IGdseXBoICpsYXN0X2dseXBoID0gcm93LT5nbHlwaHNb VEVYVF9BUkVBXSArIHJvdy0+dXNlZFtURVhUX0FSRUFdIC0gMTsKKyAgICAgICAgICBib29sIHNr aXBfcCA9IChwcmV2aW91c19nbHlwaCAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAg JiYgcHJldmlvdXNfZ2x5cGgtPmNoYXJwb3MgPT0gTUFUUklYX1JPV19FTkRfQ0hBUlBPUyAocm93 KSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzdGFydC0+Ynl0ZXBvcyAhPSBlc3Nl bnRpYWxzLnp2X2J5dGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZQorICAgICAg ICAgICAgICAgICAgICAgICAgLyogV2hlbiBhIGBidWZmZXItZGlzcGxheS10YWJsZScgZW50cnkg Y29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgdmlzaWJsZSB0YWIgY2hhcmFjdGVy ICgiwrsiKSwgdGhlIHN1YnNlcXVlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIFNUUkVUQ0hf R0xZUEggd2lsbCBoYXZlIHRoZSBzYW1lIHN0YXJ0LT5jaGFycG9zCisgICAgICAgICAgICAgICAg ICAgICAgICBhcyB0aGUgYWZvcmVtZW50aW9uZWQgdmlzaWJsZSB0YWIgY2hhcmFjdGVyLiAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgOiAocHJldmlvdXNfZ2x5cGggIT0gTlVMTAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfZ2x5cGgtPmNoYXJwb3MgPT0gc3RhcnQt PmNoYXJwb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZQorICAgICAgICAgICAg ICAgICAgICAgICAgOiBmYWxzZTsKKyAgICAgICAgICBpbnQgcG9zaW50ID0gKHJvd19wb3NpdGlv biA9PSBQT1NUX1pWKQorICAgICAgICAgICAgICAgICAgICAgICAgID8gLTEKKyAgICAgICAgICAg ICAgICAgICAgICAgOiAocm93X3Bvc2l0aW9uID09IEFUX1pWKQorICAgICAgICAgICAgICAgICAg ICAgICAgICA/IGVzc2VudGlhbHMuenYKKyAgICAgICAgICAgICAgICAgICAgICAgOiAoc3RhcnQt PmJ5dGVwb3MgIT0gZXNzZW50aWFscy56dl9ieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIHN0YXJ0IC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbVEVYVF9BUkVB XSAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQVRSSVhfUk9XX0VORF9DSEFSUE9T IChyb3cpIC0gMQorICAgICAgICAgICAgICAgICAgICAgICA6IChzdGFydC0+Ynl0ZXBvcyA9PSBl c3NlbnRpYWxzLnp2X2J5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3RhcnQgLSBy b3ctPmdseXBoc1tURVhUX0FSRUFdID09IHJvdy0+dXNlZFtURVhUX0FSRUFdIC0gMSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICA/IGVzc2VudGlhbHMuenYKKyAgICAgICAgICAgICAgICAgICAg ICAgOiBzdGFydC0+Y2hhcnBvczsKKyAgICAgICAgICBMaXNwX09iamVjdCBzcGVjcyA9IG1jX2Fz c29jIChtYWtlX2ZpeG51bSAocG9zaW50KSwgQlZBUiAoYiwgbWNfY29uZikpOworICAgICAgICAg IGlmICgoKGhlYWRlcl9saW5lX2Zvcm1hdCA+IDAgJiYgdnBvcyA+IDApCisgICAgICAgICAgICAg ICB8fCBoZWFkZXJfbGluZV9mb3JtYXQgPT0gMCkKKyAgICAgICAgICAgICAgJiYgIU5JTFAgKHNw ZWNzKQorICAgICAgICAgICAgICAmJiByb3ctPnkgPD0gd2luZG93X3RleHRfYm90dG9tX3kgKHcp CisgICAgICAgICAgICAgICYmICFza2lwX3AKKyAgICAgICAgICAgICAgJiYgcm93X3Bvc2l0aW9u ICE9IFBPU1RfWlYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGxp c3BfdHlwZSA9IG1jX250aCAoMSwgc3BlY3MpOworICAgICAgICAgICAgICBlbnVtIG1jX2N1cnNv cl90eXBlIGN1cnNvcl90eXBlID0gKENPTlNQIChsaXNwX3R5cGUpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtY19saXNwX3RvX2N1cnNvcl90eXBl IChYQ0FSIChsaXNwX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBtY19saXNwX3RvX2N1cnNvcl90eXBlIChsaXNwX3R5cGUpOworICAgICAg ICAgICAgICBjdXJzb3JfdHlwZSA9IChzdGFydC0+dHlwZSA9PSBJTUFHRV9HTFlQSCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0hPTExPV19CT1gKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6IGN1cnNvcl90eXBlOworICAgICAgICAgICAgICBpbnQgY3Vyc29yX3dpZHRo ID0gKENPTlNQIChsaXNwX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PyBYRklYTlVNIChYQ0FSIChYQ0RSIChsaXNwX3R5cGUpKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogLTE7CisgICAgICAgICAgICAgIExpc3BfT2JqZWN0IG1jX2ZvcmVncm91 bmQgPSBtY19udGggKDIsIHNwZWNzKTsKKyAgICAgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2xf Zmc7CisgICAgICAgICAgICAgIGlmIChTVFJJTkdQIChtY19mb3JlZ3JvdW5kKSkKKyAgICAgICAg ICAgICAgICBtY194d19jb2xvcl92YWx1ZXMgKHcsIG1jX2ZvcmVncm91bmQsICZsc2xfZmcpOwor ICAgICAgICAgICAgICAgIGVsc2UgaWYgKFZFQ1RPUlAgKG1jX2ZvcmVncm91bmQpKQorICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsc2xfZmcucmVkID0gWEZMT0FUX0RB VEEgKEFSRUYgKG1jX2ZvcmVncm91bmQsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgbHNsX2Zn LmdyZWVuID0gWEZMT0FUX0RBVEEgKEFSRUYgKG1jX2ZvcmVncm91bmQsIDEpKTsKKyAgICAgICAg ICAgICAgICAgICAgbHNsX2ZnLmJsdWUgPSBYRkxPQVRfREFUQSAoQVJFRiAobWNfZm9yZWdyb3Vu ZCwgMikpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo TklMUCAobWNfZm9yZWdyb3VuZCkpCisgICAgICAgICAgICAgICAgICAgIG1jX2NvbG9yX3BpY2tl ciAodywgc3RhcnQsIGVzc2VudGlhbHMsICZsc2xfZmcsIHBvc2ludCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfdHlwZSwgcm93X3Bvc2l0aW9uLCBNVUxUSVBM RV9DVVJTT1JTKTsKKyAgICAgICAgICAgICAgaW50IHZwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKHJv dywgbWF0cml4KTsKKyAgICAgICAgICAgICAgaW50IHhfbGltaXQgPSB0ZXh0X2FyZWFfd2lkdGg7 CisgICAgICAgICAgICAgIG1jX2VuZ2luZSAodywgbWF0cml4LCByb3csIHN0YXJ0LCBURVhUX0FS RUEsIHgsIHhfbGltaXQsIHJvdy0+eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCAt IHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sIHZwb3MsIGN1cnNvcl90eXBlLAorICAgICAgICAgICAg ICAgICAgICAgICAgIGN1cnNvcl93aWR0aCwgY3Vyc29yX21hdHJpeCwgZXNzZW50aWFscywgcm93 X3Bvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxzbF9mZywgTVVMVElQTEVfQ1VS U09SUywgZHJhd19wLCBmcm9tX3doZXJlLCBNQ19DQUNIRSk7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgIGlmICghTklMUCAoQlZBUiAoYiwgZmNfdmlzaWJsZSkpCisgICAgICAgICAg JiYgKGVzc2VudGlhbHMuYWN0aXZlX3AKKyAgICAgICAgICAgICAgfHwgKCFlc3NlbnRpYWxzLmFj dGl2ZV9wCisgICAgICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgZmNfaW5hY3RpdmVf d2luZG93cykpKSkKKyAgICAgICAgICAvLyAmJiBlc3NlbnRpYWxzLmZjX3ggPD0gdGV4dF9hcmVh X3dpZHRoCisgICAgICAgICAgJiYgZXNzZW50aWFscy5mY194IDwgdGV4dF9hcmVhX3dpZHRoCisg ICAgICAgICAgJiYgZXNzZW50aWFscy5mY194ID49IHctPm1jLmxudW1fcGl4ZWxfd2lkdGgpCisg ICAgICAgIHsKKyAgICAgICAgICBpbnQgeF9saW1pdCA9IHggKyBzdGFydC0+cGl4ZWxfd2lkdGg7 CisgICAgICAgICAgYm9vbCByZWFsX2Zha2VfY3Vyc29yX3AgPSAody0+Y3Vyc29yLnggPT0gZXNz ZW50aWFscy5mY194CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+ Y3Vyc29yLnkgPT0gcm93LT55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgdy0+Y3Vyc29yLmhwb3MgPT0gc3RhcnQgLSByb3ctPmdseXBoc1tURVhUX0FSRUFdCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLnZwb3MgPT0gdnBv cyk7CisgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2xfZmc7CisgICAgICAgICAgbWNfY29sb3Jf cGlja2VyICh3LCBzdGFydCwgZXNzZW50aWFscywgJmxzbF9mZywgLTEsIE1DX0JBUiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJvd19wb3NpdGlvbiwgRklMTF9DT0xVTU4pOworICAgICAg ICAgIGlmICh4IDwgdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgIC8vIHggKyBzdGFydC0+ cGl4ZWxfd2lkdGggPD0gdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgICYmICgoaGVhZGVy X2xpbmVfZm9ybWF0ID4gMCAmJiB2cG9zID4gMCkKKyAgICAgICAgICAgICAgICAgIHx8IGhlYWRl cl9saW5lX2Zvcm1hdCA9PSAwKQorICAgICAgICAgICAgICAmJiAoKHN0YXJ0ICE9IHJvdy0+Z2x5 cGhzW1RFWFRfQVJFQV0gKyByb3ctPnVzZWRbVEVYVF9BUkVBXSAtIDEKKyAgICAgICAgICAgICAg ICAgICAmJiBlc3NlbnRpYWxzLmZjX3ggPj0geAorICAgICAgICAgICAgICAgICAgICYmIGVzc2Vu dGlhbHMuZmNfeCA8IHggKyBzdGFydC0+cGl4ZWxfd2lkdGgpCisgICAgICAgICAgICAgICAgICB8 fCAoc3RhcnQgPT0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSArIHJvdy0+dXNlZFtURVhUX0FSRUFd IC0gMQorICAgICAgICAgICAgICAgICAgICAgICYmIGVzc2VudGlhbHMuZmNfeCA+PSB4KSkKKyAg ICAgICAgICAgICAgJiYgcm93LT55IDw9IHdpbmRvd190ZXh0X2JvdHRvbV95ICh3KQorICAgICAg ICAgICAgICAmJiAhcmVhbF9mYWtlX2N1cnNvcl9wKQorICAgICAgICAgICAgbWNfZW5naW5lICh3 LCBtYXRyaXgsIHJvdywgc3RhcnQsIFRFWFRfQVJFQSwgeCwgeF9saW1pdCwgcm93LT55LAorICAg ICAgICAgICAgICAgICAgICAgICBzdGFydCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sIHZwb3Ms IE1DX0JBUiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX21hdHJpeCwgZXNzZW50 aWFscywgcm93X3Bvc2l0aW9uLCBsc2xfZmcsCisgICAgICAgICAgICAgICAgICAgICAgIEZJTExf Q09MVU1OLCBkcmF3X3AsIGZyb21fd2hlcmUsIEZDX0NBQ0hFKTsKKyAgICAgICAgfQorICAgICAg aWYgKCFOSUxQIChCVkFSIChiLCBjcm9zc2hhaXJzKSkKKyAgICAgICAgICAmJiAhTklMUCAoQlZB UiAoYiwgY2hfaG9yaXpvbnRhbF9ydWxlcikpCisgICAgICAgICAgJiYgKGVzc2VudGlhbHMuYWN0 aXZlX3AKKyAgICAgICAgICAgICAgfHwgKCFlc3NlbnRpYWxzLmFjdGl2ZV9wCisgICAgICAgICAg ICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaW5hY3RpdmVfd2luZG93cykpKSkKKyAgICAg ICAgICAmJiB2cG9zID09IHctPmN1cnNvci52cG9zKQorICAgICAgICB7CisgICAgICAgICAgaW50 IHhfbGltaXQgPSAoc3RhcnQgPT0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSArIHJvdy0+dXNlZFtU RVhUX0FSRUFdIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgID8gdGV4dF9hcmVhX3dpZHRo CisgICAgICAgICAgICAgICAgICAgICAgICA6IHggKyBzdGFydC0+cGl4ZWxfd2lkdGg7CisgICAg ICAgICAgc3RydWN0IG1jX1JHQiBsc2xfZmc7CisgICAgICAgICAgbWNfY29sb3JfcGlja2VyICh3 LCBzdGFydCwgZXNzZW50aWFscywgJmxzbF9mZywgLTEsIE1DX0hCQVIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICByb3dfcG9zaXRpb24sIEhPUklaT05UQUxfUlVMRVIpOworICAgICAgICAg IC8qIFByZXNlcnZlIHN1cHBvcnQgZm9yIGRlZmF1bHQgYmVoYXZpb3Igc3VjaCB0aGF0IGEgdXNl ciBtYXkKKyAgICAgICAgICBzcGVjaWZ5IHRoZSBoZWlnaHQgb2YgYW4gTUNfSEJBUiwgd2hpY2gg YmVnaW5zIGl0cyBqb3VybmV5CisgICAgICAgICAgYXMgdGhlIGBjdXJzb3Jfd2lkdGgnLiAgYG1j X2dldF9jdXJzb3JfZ2VvbWV0cnknIHJlYWRqdXN0cy4gKi8KKyAgICAgICAgICBtY19lbmdpbmUg KHcsIG1hdHJpeCwgcm93LCBzdGFydCwgVEVYVF9BUkVBLCB4LCB4X2xpbWl0LCByb3ctPnksCisg ICAgICAgICAgICAgICAgICAgICBzdGFydCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sIHZwb3Ms IE1DX0hCQVIsIDEsCisgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfbWF0cml4LCBlc3NlbnRp YWxzLCByb3dfcG9zaXRpb24sIGxzbF9mZywKKyAgICAgICAgICAgICAgICAgICAgIEhPUklaT05U QUxfUlVMRVIsIGRyYXdfcCwgZnJvbV93aGVyZSwgQ0hfQ0FDSEUpOworICAgICAgICB9CisgICAg ICBpZiAoIU5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnMpKQorICAgICAgICAgICYmICFOSUxQIChC VkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgICAgJiYgKGVzc2VudGlhbHMuYWN0 aXZlX3AKKyAgICAgICAgICAgICAgfHwgKCFlc3NlbnRpYWxzLmFjdGl2ZV9wCisgICAgICAgICAg ICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaW5hY3RpdmVfd2luZG93cykpKSkKKyAgICAg ICAgICAmJiAhZmlsbF9jb2x1bW5fdHJ1bXBzX3ApCisgICAgICAgIHsKKyAgICAgICAgICBjdXJz b3JfdHlwZSA9IChzdGFydC0+dHlwZSA9PSBJTUFHRV9HTFlQSCkKKyAgICAgICAgICAgICAgICAg ICAgICAgID8gTUNfSE9MTE9XX0JPWAorICAgICAgICAgICAgICAgICAgICAgICAgOiBNQ19CQVI7 CisgICAgICAgICAgaW50IHhfbGltaXQgPSB0ZXh0X2FyZWFfd2lkdGg7CisgICAgICAgICAgYm9v bCByZWFsX2Zha2VfY3Vyc29yX3AgPSAody0+Y3Vyc29yLnkgPT0gcm93LT55CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLnZwb3MgPT0gdnBvcyk7Cisg ICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2xfZmc7CisgICAgICAgICAgbWNfY29sb3JfcGlja2Vy ICh3LCBzdGFydCwgZXNzZW50aWFscywgJmxzbF9mZywgLTEsIGN1cnNvcl90eXBlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgcm93X3Bvc2l0aW9uLCBWRVJUSUNBTF9SVUxFUik7CisgICAg ICAgICAgaWYgKCgoaGVhZGVyX2xpbmVfZm9ybWF0ID4gMCAmJiB2cG9zID4gMCkKKyAgICAgICAg ICAgICAgIHx8IGhlYWRlcl9saW5lX2Zvcm1hdCA9PSAwKQorICAgICAgICAgICAgICAmJiAoKHN0 YXJ0ICE9IHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gKyByb3ctPnVzZWRbVEVYVF9BUkVBXSAtIDEK KyAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA+PSB4CisgICAgICAgICAgICAgICAg ICAgJiYgdy0+Y3Vyc29yLnggPCB4ICsgc3RhcnQtPnBpeGVsX3dpZHRoKQorICAgICAgICAgICAg ICAgICAgfHwgKHN0YXJ0ID09IHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gKyByb3ctPnVzZWRbVEVY VF9BUkVBXSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA+PSB4KSkK KyAgICAgICAgICAgICAgJiYgcm93LT55IDw9IHdpbmRvd190ZXh0X2JvdHRvbV95ICh3KQorICAg ICAgICAgICAgICAmJiAhcmVhbF9mYWtlX2N1cnNvcl9wKQorICAgICAgICAgICAgbWNfZW5naW5l ICh3LCBtYXRyaXgsIHJvdywgc3RhcnQsIFRFWFRfQVJFQSwgeCwgeF9saW1pdCwgcm93LT55LAor ICAgICAgICAgICAgICAgICAgICAgICBzdGFydCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sIHZw b3MsIGN1cnNvcl90eXBlLCAxLAorICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfbWF0cml4 LCBlc3NlbnRpYWxzLCByb3dfcG9zaXRpb24sIGxzbF9mZywKKyAgICAgICAgICAgICAgICAgICAg ICAgVkVSVElDQUxfUlVMRVIsIGRyYXdfcCwgZnJvbV93aGVyZSwgQ0hfQ0FDSEUpOworICAgICAg ICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaW50IHJlbGF0aXZlX3ggPSAw OworICAgICAgICBmb3IgKGludCBhcmVhID0gTEVGVF9NQVJHSU5fQVJFQTsgYXJlYSA8IExBU1Rf QVJFQTsgKythcmVhKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5 cGggPSByb3ctPmdseXBoc1thcmVhXTsKKyAgICAgICAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGhf ZW5kID0gZ2x5cGggKyByb3ctPnVzZWRbYXJlYV07CisgICAgICAgICAgICAvKiBHbHlwaCBmb3Ig YSBsaW5lIGVuZCBpbiB0ZXh0LiAqLworICAgICAgICAgICAgaWYgKGFyZWEgPT0gVEVYVF9BUkVB ICYmIGdseXBoID09IGdseXBoX2VuZCAmJiBnbHlwaC0+Y2hhcnBvcyA+IDApCisgICAgICAgICAg ICAgICsrZ2x5cGhfZW5kOworICAgICAgICAgICAgZm9yICg7IGdseXBoIDwgZ2x5cGhfZW5kOyAr K2dseXBoKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHZwb3MgIT0gdy0+ Y3Vyc29yLnZwb3MKKyAgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGggIT0gZ2x5cGhfZW5kIC0g MQorICAgICAgICAgICAgICAgICAgICAmJiBlc3NlbnRpYWxzLmZjX3ggPCByZWxhdGl2ZV94Cisg ICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci54IDwgcmVsYXRpdmVfeAorICAgICAgICAg ICAgICAgICAgICAmJiBOSUxQIChCVkFSIChiLCBtY19jb25mKSkpCisgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoIU5JTFAgKEJWQVIgKGIsIG1jX2NvbmYpKQor ICAgICAgICAgICAgICAgICAgICAmJiAoZXNzZW50aWFscy5hY3RpdmVfcAorICAgICAgICAgICAg ICAgICAgICAgICAgfHwgKCFlc3NlbnRpYWxzLmFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIG1jX2luYWN0aXZlX3dpbmRvd3MpKSkpKQorICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBUaGUgc3BhY2UgYXBwZW5k ZWQgdG8gYSByb3cgZW5kaW5nIHdpdGggYSBuZXcgbGluZSBkb2VzCisgICAgICAgICAgICAgICAg ICAgIG5vdCBoYXZlIGEgYGdseXBoLT5jaGFycG9zYCAoLTEsIDApIHRoYXQgd2UgY2FuIHVzZSBm b3IgdGhpcworICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uLiAgV2hl biBhIGBidWZmZXItZGlzcGxheS10YWJsZScgZW50cnkKKyAgICAgICAgICAgICAgICAgICAgYXNz aWducyBhIHZpc2libGUgZ2x5cGggdG8gYSBuZXcgbGluZSwgdGhlcmUgaXMgbm8gcHJvYmxlbQor ICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIHRoYXQgZ2x5cGggaGFzIGEgYGdseXBoLT5jaGFy cG9zJyB0aGF0IHdlIGNhbiB1c2UuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gbm8gdmlzaWJs ZSBFT0wgZ2x5cGggZXhpc3RzLCB3ZSB1c2UgdGhlIGZvbGxvd2luZyB0ZXN0OgorICAgICAgICAg ICAgICAgICAgICB0aGUgYXBwZW5kZWQgc3BhY2UgaGFzIGEgcG9zaXRpb24gdGhhdCBpcyBvbmUg bGVzcyB0aGFuIHRoZQorICAgICAgICAgICAgICAgICAgICBlbmQgb2YgdGhlIG1hdHJpeCByb3cu ICovCisgICAgICAgICAgICAgICAgICAgIGludCBocG9zID0gZ2x5cGggLSByb3ctPmdseXBoc1tU RVhUX0FSRUFdOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5cGggKnByZXZpb3VzX2ds eXBoID0gKDAgPD0gaHBvcyAtIDEgJiYgaHBvcyAtIDEgPCByb3ctPnVzZWRbVEVYVF9BUkVBXSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcm93 LT5nbHlwaHNbVEVYVF9BUkVBXSArIGhwb3MgLSAxCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIC8v IHN0cnVjdCBnbHlwaCAqbGFzdF9nbHlwaCA9IHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gKyByb3ct PnVzZWRbVEVYVF9BUkVBXSAtIDE7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2tpcF9wID0g KHByZXZpb3VzX2dseXBoICE9IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgcHJldmlvdXNfZ2x5cGgtPmNoYXJwb3MgPT0gTUFUUklYX1JPV19FTkRfQ0hBUlBPUyAo cm93KSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGgtPmJ5 dGVwb3MgIT0gZXNzZW50aWFscy56dl9ieXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgPyB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2hl biBhIGBidWZmZXItZGlzcGxheS10YWJsZScgZW50cnkgY29udGFpbnMKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhIHZpc2libGUgdGFiIGNoYXJhY3RlciAoIsK7IiksIHRoZSBz dWJzZXF1ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSRVRDSF9HTFlQ SCB3aWxsIGhhdmUgdGhlIHNhbWUgZ2x5cGgtPmNoYXJwb3MKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcyB0aGUgYWZvcmVtZW50aW9uZWQgdmlzaWJsZSB0YWIgY2hhcmFjdGVy LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHByZXZpb3VzX2dseXBo ICE9IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91 c19nbHlwaC0+Y2hhcnBvcyA9PSBnbHlwaC0+Y2hhcnBvcykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgID8gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGludCBwb3NpbnQgPSAocm93X3Bvc2l0aW9u ID09IFBPU1RfWlYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gLTEKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHJvd19wb3NpdGlvbiA9PSBBVF9aVikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXNzZW50aWFscy56dgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGgtPmJ5dGVwb3MgIT0gZXNzZW50 aWFscy56dl9ieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBnbHlw aCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1BVFJJWF9ST1dfRU5EX0NIQVJQ T1MgKHJvdykgLSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaC0+ Ynl0ZXBvcyA9PSBlc3NlbnRpYWxzLnp2X2J5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRb VEVYVF9BUkVBXSAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXNz ZW50aWFscy56dgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnbHlwaC0+Y2hh cnBvczsKKyAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3Qgc3BlY3MgPSBtY19hc3NvYyAo bWFrZV9maXhudW0gKHBvc2ludCksIEJWQVIgKGIsIG1jX2NvbmYpKTsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKCgoaGVhZGVyX2xpbmVfZm9ybWF0ID4gMCAmJiB2cG9zID4gMCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICB8fCBoZWFkZXJfbGluZV9mb3JtYXQgPT0gMCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICYmICFOSUxQIChzcGVjcykKKyAgICAgICAgICAgICAgICAgICAgICAgICYm IHJvdy0+eSA8PSB3aW5kb3dfdGV4dF9ib3R0b21feSAodykKKyAgICAgICAgICAgICAgICAgICAg ICAgICYmICFza2lwX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIHJvd19wb3NpdGlvbiAh PSBQT1NUX1pWKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIExpc3BfT2JqZWN0IGxpc3BfdHlwZSA9IG1jX250aCAoMSwgc3BlY3MpOworICAgICAgICAg ICAgICAgICAgICAgICAgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZSA9IChDT05TUCAo bGlzcF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA/IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKFhDQVIgKGxpc3BfdHlwZSkp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiBtY19saXNwX3RvX2N1cnNvcl90eXBlIChsaXNwX3R5cGUpOworICAgICAgICAgICAgICAg ICAgICAgICAgY3Vyc29yX3R5cGUgPSAoZ2x5cGgtPnR5cGUgPT0gSU1BR0VfR0xZUEgpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfSE9MTE9XX0JPWAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnNvcl90eXBlOworICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGN1cnNvcl93aWR0aCA9IChDT05TUCAobGlzcF90eXBlKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFhGSVhOVU0gKFhDQVIg KFhDRFIgKGxpc3BfdHlwZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDogLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBtY19mb3Jl Z3JvdW5kID0gbWNfbnRoICgyLCBzcGVjcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgbWNfUkdCIGxzbF9mZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTVFJJTkdQICht Y19mb3JlZ3JvdW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWNfeHdfY29sb3JfdmFs dWVzICh3LCBtY19mb3JlZ3JvdW5kLCAmbHNsX2ZnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgZWxzZSBpZiAoVkVDVE9SUCAobWNfZm9yZWdyb3VuZCkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNsX2ZnLnJlZCA9IFhG TE9BVF9EQVRBIChBUkVGIChtY19mb3JlZ3JvdW5kLCAwKSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsc2xfZmcuZ3JlZW4gPSBYRkxPQVRfREFUQSAoQVJFRiAobWNfZm9yZWdyb3Vu ZCwgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNsX2ZnLmJsdWUgPSBYRkxP QVRfREFUQSAoQVJFRiAobWNfZm9yZWdyb3VuZCwgMikpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChOSUxQIChtY19m b3JlZ3JvdW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jX2NvbG9yX3BpY2tl ciAodywgZ2x5cGgsIGVzc2VudGlhbHMsICZsc2xfZmcsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2ludCwgY3Vyc29yX3R5cGUsIHJvd19wb3NpdGlv biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVVMVElQ TEVfQ1VSU09SUyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdnBvcyA9IE1BVFJJWF9S T1dfVlBPUyAocm93LCBtYXRyaXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHhfbGlt aXQgPSB0ZXh0X2FyZWFfd2lkdGg7CisgICAgICAgICAgICAgICAgICAgICAgICBtY19lbmdpbmUg KHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgYXJlYSwgcmVsYXRpdmVfeCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeF9saW1pdCwgcm93LT55LCBnbHlwaCAtIHJvdy0+Z2x5cGhz W1RFWFRfQVJFQV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwb3MsIGN1 cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9tYXRyaXgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGVzc2VudGlhbHMsIHJvd19wb3NpdGlvbiwgbHNsX2ZnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVUxUSVBMRV9DVVJTT1JTLCBkcmF3X3As IGZyb21fd2hlcmUsIE1DX0NBQ0hFKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFOSUxQIChCVkFSIChiLCBmY192aXNp YmxlKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKGVzc2VudGlhbHMuYWN0aXZlX3AKKyAgICAg ICAgICAgICAgICAgICAgICAgIHx8ICghZXNzZW50aWFscy5hY3RpdmVfcAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBmY19pbmFjdGl2ZV93aW5kb3dzKSkp KQorICAgICAgICAgICAgICAgICAgICAvLyAmJiBlc3NlbnRpYWxzLmZjX3ggPD0gdGV4dF9hcmVh X3dpZHRoCisgICAgICAgICAgICAgICAgICAgICYmIGVzc2VudGlhbHMuZmNfeCA8IHRleHRfYXJl YV93aWR0aAorICAgICAgICAgICAgICAgICAgICAmJiBlc3NlbnRpYWxzLmZjX3ggPj0gdy0+bWMu bG51bV9waXhlbF93aWR0aCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgaW50IHhfbGltaXQgPSB0ZXh0X2FyZWFfd2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGJv b2wgcmVhbF9mYWtlX2N1cnNvcl9wID0gKHctPmN1cnNvci54ID09IGVzc2VudGlhbHMuZmNfeAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJz b3IueSA9PSByb3ctPnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgdy0+Y3Vyc29yLmhwb3MgPT0gZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFd CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmN1 cnNvci52cG9zID09IHZwb3MpOworICAgICAgICAgICAgICAgICAgICBpbnQgaHBvcyA9IGdseXBo IC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1j X1JHQiBsc2xfZmc7CisgICAgICAgICAgICAgICAgICAgIG1jX2NvbG9yX3BpY2tlciAodywgZ2x5 cGgsIGVzc2VudGlhbHMsICZsc2xfZmcsIC0xLCBNQ19CQVIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcm93X3Bvc2l0aW9uLCBGSUxMX0NPTFVNTik7CisgICAgICAgICAg ICAgICAgICAgIGlmIChocG9zID49IGhwb3Nfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAg ICYmIGhwb3MgPCBocG9zX3N0YXJ0ICsgaHBvc19sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAg ICAgIC8vICYmIHJlbGF0aXZlX3ggKyBnbHlwaC0+cGl4ZWxfd2lkdGggPD0gdGV4dF9hcmVhX3dp ZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAmJiByZWxhdGl2ZV94IDwgdGV4dF9hcmVhX3dp ZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGhlYWRlcl9saW5lX2Zvcm1hdCA+IDAg JiYgdnBvcyA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaGVhZGVyX2xpbmVf Zm9ybWF0ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGdseXBoICE9IGdseXBo X2VuZCAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXNzZW50aWFscy5mY194 ID49IHJlbGF0aXZlX3gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXNzZW50aWFs cy5mY194IDwgcmVsYXRpdmVfeCArIGdseXBoLT5waXhlbF93aWR0aCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8fCAoZ2x5cGggPT0gZ2x5cGhfZW5kIC0gMQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBlc3NlbnRpYWxzLmZjX3ggPj0gcmVsYXRpdmVfeCkpCisgICAg ICAgICAgICAgICAgICAgICAgICAmJiByb3ctPnkgPD0gd2luZG93X3RleHRfYm90dG9tX3kgKHcp CisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcmVhbF9mYWtlX2N1cnNvcl9wKQorICAgICAg ICAgICAgICAgICAgICAgIG1jX2VuZ2luZSAodywgbWF0cml4LCByb3csIGdseXBoLCBhcmVhLCBy ZWxhdGl2ZV94LCB4X2xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93 LT55LCBocG9zLCB2cG9zLCBNQ19CQVIsIDEsIGN1cnNvcl9tYXRyaXgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlc3NlbnRpYWxzLCByb3dfcG9zaXRpb24sIGxzbF9mZywgRklM TF9DT0xVTU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3X3AsIGZyb21f d2hlcmUsIEZDX0NBQ0hFKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp ZiAoIU5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnMpKQorICAgICAgICAgICAgICAgICAgICAmJiAh TklMUCAoQlZBUiAoYiwgY2hfaG9yaXpvbnRhbF9ydWxlcikpCisgICAgICAgICAgICAgICAgICAg ICYmIChlc3NlbnRpYWxzLmFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAoIWVz c2VudGlhbHMuYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhTklMUCAo QlZBUiAoYiwgY2hfaW5hY3RpdmVfd2luZG93cykpKSkKKyAgICAgICAgICAgICAgICAgICAgJiYg dnBvcyA9PSB3LT5jdXJzb3IudnBvcykKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgaW50IHhfbGltaXQgPSB0ZXh0X2FyZWFfd2lkdGg7CisgICAgICAgICAgICAgICAg ICAgIGludCBocG9zID0gZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdOworICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGxzbF9mZzsKKyAgICAgICAgICAgICAgICAgICAgbWNf Y29sb3JfcGlja2VyICh3LCBnbHlwaCwgZXNzZW50aWFscywgJmxzbF9mZywgLTEsIE1DX0hCQVIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93X3Bvc2l0aW9uLCBIT1JJ Wk9OVEFMX1JVTEVSKTsKKyAgICAgICAgICAgICAgICAgICAgLyogUHJlc2VydmUgc3VwcG9ydCBm b3IgZGVmYXVsdCBiZWhhdmlvciBzdWNoIHRoYXQgYSB1c2VyIG1heQorICAgICAgICAgICAgICAg ICAgICBzcGVjaWZ5IHRoZSBoZWlnaHQgb2YgYW4gTUNfSEJBUiwgd2hpY2ggYmVnaW5zIGl0cyBq b3VybmV5CisgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBgY3Vyc29yX3dpZHRoJy4gIGBtY19n ZXRfY3Vyc29yX2dlb21ldHJ5JyByZWFkanVzdHMuICovCisgICAgICAgICAgICAgICAgICAgIGlm IChocG9zID49IGhwb3Nfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGhwb3MgPCBo cG9zX3N0YXJ0ICsgaHBvc19sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgbWNfZW5naW5l ICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIGFyZWEsIHJlbGF0aXZlX3gsIHhfbGltaXQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPnksIGhwb3MsIHZwb3MsIE1DX0hCQVIs IDEsIGN1cnNvcl9tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3Nl bnRpYWxzLCByb3dfcG9zaXRpb24sIGxzbF9mZywgSE9SSVpPTlRBTF9SVUxFUiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdfcCwgZnJvbV93aGVyZSwgQ0hfQ0FDSEUpOwor ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghTklMUCAoQlZBUiAoYiwg Y3Jvc3NoYWlycykpCisgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBjaF92 ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgICAgICAgICAgICAgICYmIChlc3NlbnRpYWxzLmFjdGl2 ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAoIWVzc2VudGlhbHMuYWN0aXZlX3AKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaW5hY3RpdmVf d2luZG93cykpKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWZpbGxfY29sdW1uX3RydW1wc19w KQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdXJzb3JfdHlwZSA9 IChnbHlwaC0+dHlwZSA9PSBJTUFHRV9HTFlQSCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA/IE1DX0hPTExPV19CT1gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IE1DX0JBUjsKKyAgICAgICAgICAgICAgICAgICAgaW50IHhfbGltaXQgPSB0ZXh0X2FyZWFf d2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVhbF9mYWtlX2N1cnNvcl9wID0gKHct PmN1cnNvci55ID09IHJvdy0+eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiB3LT5jdXJzb3IudnBvcyA9PSB2cG9zKTsKKyAgICAgICAgICAgICAgICAg ICAgaW50IGhwb3MgPSBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV07CisgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBtY19SR0IgbHNsX2ZnOworICAgICAgICAgICAgICAgICAgICBtY19j b2xvcl9waWNrZXIgKHcsIGdseXBoLCBlc3NlbnRpYWxzLCAmbHNsX2ZnLCAtMSwgY3Vyc29yX3R5 cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93X3Bvc2l0aW9uLCBW RVJUSUNBTF9SVUxFUik7CisgICAgICAgICAgICAgICAgICAgIGlmIChocG9zID49IGhwb3Nfc3Rh cnQKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGhwb3MgPCBocG9zX3N0YXJ0ICsgaHBvc19s ZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICgoaGVhZGVyX2xpbmVfZm9ybWF0ID4g MCAmJiB2cG9zID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBoZWFkZXJfbGlu ZV9mb3JtYXQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICgoZ2x5cGggIT0gZ2x5 cGhfZW5kIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA+ PSByZWxhdGl2ZV94CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci54 IDwgcmVsYXRpdmVfeCArIGdseXBoLT5waXhlbF93aWR0aCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8fCAoZ2x5cGggPT0gZ2x5cGhfZW5kIC0gMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA+PSByZWxhdGl2ZV94KSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICYmIHJvdy0+eSA8PSB3aW5kb3dfdGV4dF9ib3R0b21feSAodykKKyAgICAgICAg ICAgICAgICAgICAgICAgICYmICFyZWFsX2Zha2VfY3Vyc29yX3ApCisgICAgICAgICAgICAgICAg ICAgICAgbWNfZW5naW5lICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIGFyZWEsIHJlbGF0aXZlX3gs IHhfbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPnksIGhwb3Ms IHZwb3MsIGN1cnNvcl90eXBlLCAxLCBjdXJzb3JfbWF0cml4LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXNzZW50aWFscywgcm93X3Bvc2l0aW9uLCBsc2xfZmcsIFZFUlRJQ0FM X1JVTEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd19wLCBmcm9tX3do ZXJlLCBDSF9DQUNIRSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVs YXRpdmVfeCArPSBnbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICB9CisgICAgICB9CisgIC8vICBjbG9ja190IGNsb2NrX2VuZCA9IGNsb2NrKCk7CisgIC8vICBk b3VibGUgY3B1X3RpbWVfdXNlZCA9ICgoZG91YmxlKSAoY2xvY2tfZW5kIC0gY2xvY2tfc3RhcnQp KSAvIENMT0NLU19QRVJfU0VDOworICAvLyAgZnByaW50ZiAoc3RkZXJyLCAibWNfZHJhd19yb3cg KCVzKTogIFRJTUUgKCVmKVxuIiwgbWNfd2luZG93ICh3KSwgY3B1X3RpbWVfdXNlZCk7Cit9CisK K2Jvb2wKK21jX3JlZHJhd19yb3cgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRy aXggKm1hdHJpeCwgc3RydWN0IGdseXBoX3JvdyAqcm93LAorICAgICAgICAgICAgICAgZW51bSBn bHlwaF9yb3dfYXJlYSBhcmVhLCBpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X2hwb3MsIGludCBlbmRf aHBvcywKKyAgICAgICAgICAgICAgIGJvb2wgY2xlYXJfZW9sX3AsIGVudW0gZHJhd19nbHlwaHNf ZmFjZSBobCwKKyAgICAgICAgICAgICAgIGVudW0gbWNfcmVkcmF3X3Jvd190eXBlIGZyb21fd2hl cmUpCit7CisgIGJvb2wgZ29fcCA9ICgody0+bWNfbWF0cml4LmN1cnNvcnNfdXNlZFtNQ19DQUNI RV0gPiAwCisgICAgICAgICAgICAgICAgfHwgdy0+bWNfbWF0cml4LmN1cnNvcnNfdXNlZFtDSF9D QUNIRV0gPiAwCisgICAgICAgICAgICAgICAgfHwgdy0+bWNfbWF0cml4LmN1cnNvcnNfdXNlZFtG Q19DQUNIRV0gPiAwKQorICAgICAgICAgICAgICAgJiYgYXJlYSA9PSBURVhUX0FSRUEKKyAgICAg ICAgICAgICAgICYmIHJvdy0+dXNlZFthcmVhXSk7CisgIGlmICghZ29fcCkKKyAgICByZXR1cm4g ZmFsc2U7CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7Cisg IGludCB2cG9zID0gTUFUUklYX1JPV19WUE9TIChyb3csIG1hdHJpeCk7CisgIGlmIChtY19zdGRl cnJfcCkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJtY19yZWRyYXdfcm93ICglZCk6ICAlc1xuXAor ICBzdGFydF94ICglZCkgfCBzdGFydF9ocG9zICglZCkgfCBlbmRfaHBvcyAoJWQpXG4iLAorICB2 cG9zLCBtY19yZWRyYXdfcm93X3R5cGVfdG9fc3RyaW5nIChmcm9tX3doZXJlKSwgc3RhcnRfeCwg c3RhcnRfaHBvcywgZW5kX2hwb3MpOworICBzdHJ1Y3QgbWNfUkdCIGxzbCA9IHsucmVkID0gLTEu MCwgLmdyZWVuID0gLTEuMCwgLmJsdWUgPSAtMS4wfTsKKyAgZW51bSBtY19mbGF2b3IgZ2x5cGhf Zmxhdm9yID0gTk9fRkxBVk9SOworICBlbnVtIG1jX2N1cnNvcl90eXBlIGN1cnNvcl90eXBlID0g TUNfTk9fQ1VSU09SOworICBpbnQgd2QgPSAtMTsKKyAgYm9vbCBhY3RpdmVfcCA9ICh3ID09IFhX SU5ET1cgKGYtPnNlbGVjdGVkX3dpbmRvdykKKyAgICAgICAgICAgICAgICAgICAmJiBmID09IEZS QU1FX0RJU1BMQVlfSU5GTyAoZiktPmhpZ2hsaWdodF9mcmFtZSk7CisgIGJvb2wgY3Vyc29yX2dj X3AgPSBmYWxzZTsKKyAgaW50IG92ZXJsYXBzID0gMDsKKyAgaW50IHggPSAwOworICBib29sIGRy YXdfcCA9IHRydWU7CisgIC8vICBjbG9ja190IGNsb2NrX3N0YXJ0ID0gY2xvY2soKTsKKyAgaWYg KGVuZF9ocG9zID4gc3RhcnRfaHBvcykKKyAgICB4ID0gbWNfZHJhd19nbHlwaHMgKHcsIG1hdHJp eCwgcm93LCB3LT5tY19tYXRyaXgsIHN0YXJ0X3gsIFRFWFRfQVJFQSwKKyAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXJ0X2hwb3MsIGVuZF9ocG9zLCBobCwgb3ZlcmxhcHMsIHZwb3MsIGxzbCwK KyAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdkLCBh Y3RpdmVfcCwgY3Vyc29yX2djX3AsCisgICAgICAgICAgICAgICAgICAgICAgICBNQ19EUkFXX0dM WVBIX1NUUklORywgZHJhd19wKTsKKyAgLy8gIGNsb2NrX3QgY2xvY2tfZW5kID0gY2xvY2soKTsK KyAgLy8gIGRvdWJsZSB0aW1lX2dseXBocyA9ICgoZG91YmxlKSAoY2xvY2tfZW5kIC0gY2xvY2tf c3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOworICAvKiBgcmVkcmF3X292ZXJsYXBwZWRfcm93cycg Y2FsbHMgYHJpZi0+Y2xlYXJfZW5kX29mX2xpbmUnLiAqLworICBpZiAoY2xlYXJfZW9sX3AKKyAg ICAgICYmIGVuZF9ocG9zID4gc3RhcnRfaHBvcykKKyAgICB7CisgICAgICAvKiBBZHZhbmNlIHRo ZSBvdXRwdXQgY3Vyc29yLiAqLworICAgICAgdy0+b3V0cHV0X2N1cnNvci5ocG9zID0gZW5kX2hw b3M7CisgICAgICB3LT5vdXRwdXRfY3Vyc29yLnggPSB4OworICAgICAgRlJBTUVfUklGIChmKS0+ Y2xlYXJfZW5kX29mX2xpbmUgKHcsIHJvdywgVEVYVF9BUkVBLCAtMSk7CisgICAgfQorICAvLyAg Y2xvY2tfc3RhcnQgPSBjbG9jaygpOworICBpbnQgdm50aCA9IE1BVFJJWF9ST1dfVlBPUyAocm93 LCBtYXRyaXgpOworICAvKiBTVFJFVENIX0dMWVBIIG1heSBjb250YWluIG1vcmUgdGhhbiBvbmUg ZmFrZSBjdXJzb3IgYXQgdGhlIHNhbWUgSFBPUy4gKi8KKyAgZm9yIChlbnVtIG1jX2NhY2hlX3R5 cGUgY2FjaGVfdHlwZSA9IE1DX0NBQ0hFOworICAgICAgIGNhY2hlX3R5cGUgPCBOT19DQUNIRTsK KyAgICAgICArK2NhY2hlX3R5cGUpCisgICAgeworICAgICAgZm9yIChpbnQgbnRoID0gMDsKKyAg ICAgICAgICAgbWNfdHJhdmVyc2VfY2FjaGVfcCAody0+bWNfbWF0cml4LCBjYWNoZV90eXBlLCB2 bnRoLCBudGgpOworICAgICAgICAgICArK250aCkKKyAgICAgICAgeworICAgICAgICAgIGludCB4 ID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS54OworICAg ICAgICAgIGludCBmeCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVd W250aF0uZng7CisgICAgICAgICAgaW50IHkgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhdLnk7CisgICAgICAgICAgaW50IGZ5ID0gdy0+bWNfbWF0cml4LnZw b3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5meTsKKyAgICAgICAgICBpbnQgaHBvcyA9 IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uaHBvczsKKyAg ICAgICAgICBpbnQgdnBvcyA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5 cGVdW250aF0udnBvczsKKyAgICAgICAgICBpbnQgd2QgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRo XS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLndkOworICAgICAgICAgIGludCBoID0gdy0+bWNfbWF0 cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5oOworICAgICAgICAgIGVudW0g bWNfY3Vyc29yX3R5cGUgY3Vyc29yX3R5cGUgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhdLmN1cnNvcl90eXBlOworICAgICAgICAgIGludCBjdXJzb3Jfd2lk dGggPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmN1cnNv cl93aWR0aDsKKyAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGxzbF9mZyA9IHsucmVkID0gdy0+bWNf bWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5mZy5yZWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdyZWVuID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50 aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5mZy5ncmVlbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAuYmx1ZSA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hl X3R5cGVdW250aF0uZmcuYmx1ZX07CisgICAgICAgICAgLy8gIHN0cnVjdCBtY19SR0IgbHNsX2Jn ID0gey5yZWQgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhd LmJnLnJlZCwKKyAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgLmdyZWVuID0g dy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5iZy5ncmVlbiwK KyAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgLmJsdWUgPSB3LT5tY19tYXRy aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmJnLmJsdWV9OworICAgICAgICAg IGJvb2wgYWN0aXZlX3AgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBl XVtudGhdLmFjdGl2ZV9wOworICAgICAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9 IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGhfZmxh dm9yOworICAgICAgICAgIGJvb2wgZW5hYmxlZF9wID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0u Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5lbmFibGVkX3A7CisgICAgICAgICAgaWYgKHZwb3MgPT0g dm50aAorICAgICAgICAgICAgICAmJiAoKGhwb3MgPj0gc3RhcnRfaHBvcworICAgICAgICAgICAg ICAgICAgICYmIGhwb3MgPCBlbmRfaHBvcykKKyAgICAgICAgICAgICAgICAgIC8qIEEgZmxvYXRp bmcgY3Vyc29yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBnbHlwaCByb3cuICovCisgICAgICAgICAg ICAgICAgICB8fCAoaHBvcyArIDEgPT0gc3RhcnRfaHBvcworICAgICAgICAgICAgICAgICAgICAg ICYmIGhwb3MgKyAxID09IGVuZF9ocG9zKSkKKyAgICAgICAgICAgICAgJiYgZW5hYmxlZF9wKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBib29sIHJlbW92ZV9wID0gZmFsc2U7CisgICAg ICAgICAgICAgIG1jX2RyYXdfZXJhc2VfaHlicmlkICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHks IGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGxzbF9mZywgYWN0aXZlX3AsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9mbGF2b3IsIHJlbW92ZV9wKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIHRydWU7CisgIC8vICBjbG9j a19lbmQgPSBjbG9jaygpOworICAvLyAgZG91YmxlIHRpbWVfY3Vyc29ycyA9ICgoZG91YmxlKSAo Y2xvY2tfZW5kIC0gY2xvY2tfc3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOworICAvLyAgZnByaW50 ZiAoc3RkZXJyLCAibWNfcmVkcmF3X3JvdyAoJWQpOiAgaHBvcyAoJWQvJWQpIHwgZ2x5cGhzICgl ZikgfCBjdXJzb3JzICglZilcbiIsCisgIC8vICAgICAgICAgICAgICAgICAgIHZwb3MsIHN0YXJ0 X2hwb3MsIGVuZF9ocG9zLCB0aW1lX2dseXBocywgdGltZV9jdXJzb3JzKTsKK30KKwordm9pZAor bWNfZXJhc2Vfcm93IChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRy aXgsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdykKK3sKKyAgaW50IHZudGggPSBNQVRSSVhfUk9XX1ZQ T1MgKHJvdywgbWF0cml4KTsKKyAgaWYgKG1jX3N0ZGVycl9wKQorICAgIGZwcmludGYgKHN0ZGVy ciwgIm1jX2VyYXNlX3JvdyAoJXMpOiAgdnBvcyAoJWQpXG4iLCBtY193aW5kb3cgKHcpLCB2bnRo KTsKKyAgLy8gIGlmIChtY19zdGRlcnJfcCkKKyAgLy8gICAgZnByaW50ZiAoc3RkZXJyLCAibWNf ZXJhc2VfaGVscGVyICglcyk6ICBjYWNoZSAoJXMpIHwgdnBvcyAoJWQpXG4iLAorICAvLyAgICAg IG1jX3dpbmRvdyAodyksIG1jX2NhY2hlX3R5cGVfdG9fc3RyaW5nIChjYWNoZV90eXBlKSwgdm50 aCk7CisgIGZvciAoZW51bSBtY19jYWNoZV90eXBlIGNhY2hlX3R5cGUgPSBNQ19DQUNIRTsKKyAg ICAgICBjYWNoZV90eXBlIDwgTk9fQ0FDSEU7CisgICAgICAgKytjYWNoZV90eXBlKQorICAgIHsK KyAgICAgIGZvciAoaW50IG50aCA9IDA7CisgICAgICAgICAgIG1jX3RyYXZlcnNlX2NhY2hlX3Ag KHctPm1jX21hdHJpeCwgY2FjaGVfdHlwZSwgdm50aCwgbnRoKTsKKyAgICAgICAgICAgKytudGgp CisgICAgICAgIHsKKyAgICAgICAgICBpbnQgeCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNh Y2hlW2NhY2hlX3R5cGVdW250aF0ueDsKKyAgICAgICAgICBpbnQgZnggPSB3LT5tY19tYXRyaXgu dnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmZ4OworICAgICAgICAgIGludCB5ID0g dy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS55OworICAgICAg ICAgIGludCBmeSA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250 aF0uZnk7CisgICAgICAgICAgaW50IGhwb3MgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhdLmhwb3M7CisgICAgICAgICAgaW50IHZwb3MgPSB3LT5tY19tYXRy aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLnZwb3M7CisgICAgICAgICAgaW50 IHdkID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS53ZDsK KyAgICAgICAgICBpbnQgaCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5 cGVdW250aF0uaDsKKyAgICAgICAgICBlbnVtIG1jX2N1cnNvcl90eXBlIGN1cnNvcl90eXBlID0g dy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5jdXJzb3JfdHlw ZTsKKyAgICAgICAgICBpbnQgY3Vyc29yX3dpZHRoID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0u Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5jdXJzb3Jfd2lkdGg7CisgICAgICAgICAgLy8gIHN0cnVj dCBtY19SR0IgbHNsX2ZnID0gey5yZWQgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtj YWNoZV90eXBlXVtudGhdLmZnLnJlZCwKKyAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAg ICAgICAgLmdyZWVuID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1b bnRoXS5mZy5ncmVlbiwKKyAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgLmJs dWUgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmZnLmJs dWV9OworICAgICAgICAgIHN0cnVjdCBtY19SR0IgbHNsX2JnID0gey5yZWQgPSB3LT5tY19tYXRy aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmJnLnJlZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAuZ3JlZW4gPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5j YWNoZVtjYWNoZV90eXBlXVtudGhdLmJnLmdyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC5ibHVlID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlw ZV1bbnRoXS5iZy5ibHVlfTsKKyAgICAgICAgICBib29sIGFjdGl2ZV9wID0gdy0+bWNfbWF0cml4 LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5hY3RpdmVfcDsKKyAgICAgICAgICBl bnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3IgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo ZVtjYWNoZV90eXBlXVtudGhdLmdseXBoX2ZsYXZvcjsKKyAgICAgICAgICBib29sIGVuYWJsZWRf cCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZW5hYmxl ZF9wOworICAgICAgICAgIC8qIGBtYXRyaXhfcm93JyBpbiBgZGlzcG5ldy5jYCBjb250YWlucyB0 aGUgZm9sbG93aW5nIHRlc3RzLAorICAgICAgICAgIGVhc3NlcnQgKG1hdHJpeCAmJiBtYXRyaXgt PnJvd3MpOworICAgICAgICAgIGVhc3NlcnQgKHJvdyA+PSAwICYmIHJvdyA8IG1hdHJpeC0+bnJv d3MpOyAqLworICAgICAgICAgIGJvb2wgYmFyZl9jcmFzaF9vbmUgPSAobWF0cml4ICYmIG1hdHJp eC0+cm93cykgPyBmYWxzZSA6IHRydWU7CisgICAgICAgICAgaWYgKGJhcmZfY3Jhc2hfb25lKQor ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgYm9vbCBiYXJmX2NyYXNoX3R3byA9ICh2 cG9zID49IDAgJiYgdnBvcyA8IG1hdHJpeC0+bnJvd3MpID8gZmFsc2UgOiB0cnVlOworICAgICAg ICAgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg IGlmICh2cG9zID09IHZudGgKKyAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yID09IE1DX0dM WVBICisgICAgICAgICAgICAgICYmIGVuYWJsZWRfcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgbWNfZXJhc2VfY3Vyc29yICh3LCBtYXRyaXgsIHJvdywgdy0+bWNfbWF0cml4LCB4LCB5 LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2ZsYXZv ciwgY3Vyc29yX3R5cGUsIHdkKTsKKyAgICAgICAgICAgICAgdy0+bWNfbWF0cml4LnZwb3Nbdm50 aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5lbmFibGVkX3AgPSBmYWxzZTsKKyAgICAgICAgICAg ICAgLS13LT5tY19tYXRyaXguY3Vyc29yc191c2VkW2NhY2hlX3R5cGVdOworICAgICAgICAgICAg fQorICAgICAgICAgICAgZWxzZSBpZiAodnBvcyA9PSB2bnRoCisgICAgICAgICAgICAgICAgICAg ICAmJiBlbmFibGVkX3ApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sIHJl bW92ZV9wID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywg bWF0cml4LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGxz bF9iZywgYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds eXBoX2ZsYXZvciwgcmVtb3ZlX3ApOworICAgICAgICAgICAgICAgIHctPm1jX21hdHJpeC52cG9z W3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZW5hYmxlZF9wID0gZmFsc2U7CisgICAgICAg ICAgICAgICAgLS13LT5tY19tYXRyaXguY3Vyc29yc191c2VkW2NhY2hlX3R5cGVdOworICAgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hl X3VzZWRbY2FjaGVfdHlwZV0gPSAwOworICAgIH0KK30KKworLyogRXJhc2UgZmFrZSBjdXJzb3Jz IGZyb20gKG1pbiwgcnVuLmN1cnJlbnRfeSwgcnVuLmRlc2lyZWRfeSkgdG8gZW5kIG9mIHdpbmRv dy4KKyAgVFJZX1dJTkRPV19SRVVTSU5HX0NVUlJFTlRfTUFUUklYX0RPV046CisgICAgcnVuLmhl aWdodCA9IGl0Lmxhc3RfdmlzaWJsZV95IC0gcnVuLmRlc2lyZWRfeQorICAgIFtlbWFjcyAtcTog IEhvbGQgdXAtYXJyb3cga2V5IHRyaWdnZXJpbmcgYXV0by1yZWNlbnRlciBhdCBzY3JvbGwtbWFy Z2luLl0KKyAgVFJZX1dJTkRPV19SRVVTSU5HX0NVUlJFTlRfTUFUUklYX1VQOgorICAgIHJ1bi5o ZWlnaHQgPSBpdC5sYXN0X3Zpc2libGVfeSAtIHJ1bi5jdXJyZW50X3k7CisgICAgW2VtYWNzIC1x OiAgSG9sZCB1cC1hcnJvdyBrZXkgdHJpZ2dlcmluZyBhdXRvLXJlY2VudGVyIGF0IHNjcm9sbC1t YXJnaW4uXQorICBUUllfV0lORE9XX0lEOgorICAgIHJ1bi5oZWlnaHQgPSBpdC5sYXN0X3Zpc2li bGVfeSAtIG1heCAocnVuLmN1cnJlbnRfeSwgcnVuLmRlc2lyZWRfeSkKKyAgICBbQWRkIG9yIHJl bW92ZSBsaW5lcyBmcm9tIHRoZSBidWZmZXI7IGUuZy4sIFJFVCBvciBERUwuXQorICArLS0tLS0t LS0tLS0tLSsgPD0gaXQuY3VycmVudF95ID09IDAKKyAgfCAgICAgICAgICAgICB8CisgIHwgICAg ICAgICAgICAgfCA8PSBydW4uZGVzaXJlZF95ID09IDI3MCBbdXAgKOKGkSldID09IHJ1bi5jdXJy ZW50X3kgPCBydW4uZGVzaXJlZF95CisgIHwgICAgICAgICAgICAgfCAgICBydW4uaGVpZ2h0ID0g aXQubGFzdF92aXNpYmxlX3kgLSBydW4uY3VycmVudF95OworICB8ICAgICAgICAgICAgIHwgICAg cnVuLmhlaWdodCA9PSAxMDgwIC0gNTQwID09IDU0MAorICB8ICAgICAgICAgICAgIHwgICAgW1Ro ZSBlbnRpcmUgYm90dG9tIHJlY3RhbmdsZSBnZXRzIGNvcGllZCB0byB1cHBlciBydW4uZGVzaXJl ZF95Ll0KKyAgfCAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tKyA8PSBydW4uY3VycmVu dF95ID09IDU0MAorICB8ICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICB8IDw9IHJ1bi5k ZXNpcmVkX3kgPT0gODEwIFtkb3duICjihpMpXSA9PSBydW4uY3VycmVudF95ID4gcnVuLmRlc2ly ZWRfeQorICB8ICAgICAgICAgICAgIHwgICAgcnVuLmhlaWdodCA9IGl0Lmxhc3RfdmlzaWJsZV95 IC0gcnVuLmRlc2lyZWRfeQorICB8ICAgICAgICAgICAgIHwgICAgcnVuLmhlaWdodCA9PSAxMDgw IC0gODEwID09IDI3MAorICB8ICAgICAgICAgICAgIHwgICAgW1RvcCBwYXJ0IG9mIHRoZSBsb3dl ciByZWN0YW5nbGUgZ2V0cyBjb3BpZWQgdG8gbG93ZXIgcnVuLmRlc2lyZWRfeS5dCisgIHwgICAg ICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLSsgPD0gaXQubGFzdF92aXNpYmxlX3kgPT0gMTA4 MCAqLwordm9pZAorbWNfcHJlX3Njcm9sbF9jbGVhbiAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0 IHJ1biBydW4sIGludCBzdGFydF92cG9zLAorICAgICAgICAgICAgICAgICAgICAgaW50IG5yb3dz X3Njcm9sbGVkLCBlbnVtIG1jX3ByZV9zY3JvbGxfY2xlYW5fdHlwZSBmcm9tX3doZXJlKQorewor ICBpZiAoTUlOSV9XSU5ET1dfUCAodykpCisgICAgcmV0dXJuOworICBib29sIGdvX29uZV9wID0g KHctPm1jX21hdHJpeC5jdXJzb3JzX3VzZWRbTUNfQ0FDSEVdID4gMAorICAgICAgICAgICAgICAg ICAgIHx8IHctPm1jX21hdHJpeC5jdXJzb3JzX3VzZWRbQ0hfQ0FDSEVdID4gMAorICAgICAgICAg ICAgICAgICAgIHx8IHctPm1jX21hdHJpeC5jdXJzb3JzX3VzZWRbRkNfQ0FDSEVdID4gMCk7Cisg IGJvb2wgZ29fdHdvX3AgPSAoQlVGRkVSUCAody0+Y29udGVudHMpCisgICAgICAgICAgICAgICAg ICAgJiYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKQor ICAgICAgICAgICAgICAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVu dHMpLCBmY192aXNpYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgfHwgIU5JTFAgKEJWQVIg KFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfY29uZikpKSk7CisgIGlmIChtY19zdGRlcnJfcCkK KyAgICBmcHJpbnRmIChzdGRlcnIsICJtY19wcmVfc2Nyb2xsX2NsZWFuICglcyk6XG5cCisgICVz IHwgZ29fb25lX3AgKCVzKSB8IGdvX3R3b19wICglcylcblwKKyAgc3RhcnRfdnBvcyAoJWQpIHwg bnJvd3Nfc2Nyb2xsZWQgKCVkKVxuXAorICAlczogIHJ1bi5jdXJyZW50L2Rlc2lyZWRfeSAoJWQv JWQpIHwgcnVuLmhlaWdodCAoJWQpXG4iLAorICAgIG1jX3dpbmRvdyAodyksIChmcm9tX3doZXJl ID09IFRSWV9XSU5ET1dfUkVVU0lOR19DVVJSRU5UX01BVFJJWF9ET1dOKQorICAgICAgICAgICAg ICAgICAgICAgPyAiVFJZX1dJTkRPV19SRVVTSU5HX0NVUlJFTlRfTUFUUklYX0RPV04iCisgICAg ICAgICAgICAgICAgICAgOiAoZnJvbV93aGVyZSA9PSBUUllfV0lORE9XX1JFVVNJTkdfQ1VSUkVO VF9NQVRSSVhfVVApCisgICAgICAgICAgICAgICAgICAgICA/ICJUUllfV0lORE9XX1JFVVNJTkdf Q1VSUkVOVF9NQVRSSVhfVVAiCisgICAgICAgICAgICAgICAgICAgOiAoZnJvbV93aGVyZSA9PSBU UllfV0lORE9XX0lEKQorICAgICAgICAgICAgICAgICAgICAgPyAiVFJZX1dJTkRPV19JRCIKKyAg ICAgICAgICAgICAgICAgICA6ICJVTktOT1dOIiwKKyAgICBnb19vbmVfcCA/ICJ5ZXMiIDogIm5v IiwgZ29fdHdvX3AgPyAieWVzIiA6ICJubyIsCisgICAgc3RhcnRfdnBvcywgbnJvd3Nfc2Nyb2xs ZWQsCisgICAgcnVuLmN1cnJlbnRfeSA8IHJ1bi5kZXNpcmVkX3kgPyAi4oaTIiA6ICLihpEiLAor ICAgIHJ1bi5jdXJyZW50X3ksIHJ1bi5kZXNpcmVkX3ksIHJ1bi5oZWlnaHQpOworICBpZiAoIWdv X29uZV9wICYmICFnb190d29fcCkKKyAgICByZXR1cm47CisgIGJvb2wgdXBkYXRpbmdfZnJhbWVf cCA9IGZhbHNlOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgaWYg KFhGUkFNRSAody0+ZnJhbWUpICE9IGYtPm1jX3VwZGF0aW5nX2ZyYW1lCisgICAgICAmJiAoZ29f b25lX3AgfHwgZ29fdHdvX3ApKQorICAgIHsKKyAgICAgIHVwZGF0aW5nX2ZyYW1lX3AgPSB0cnVl OworICAgICAgdXBkYXRlX2JlZ2luIChmKTsKKyAgICB9CisgIGlmICh3LT5waHlzX2N1cnNvcl9v bl9wCisgICAgICAmJiBnb190d29fcCkKKyAgICBlcmFzZV9waHlzX2N1cnNvciAodyk7CisgIHN0 cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCA9IHctPmN1cnJlbnRfbWF0cml4OworICBmb3IgKGlu dCB2bnRoID0gc3RhcnRfdnBvczsKKyAgICAgICBtYXRyaXggIT0gTlVMTAorICAgICAgICYmIHZu dGggPCBtYXRyaXgtPm5yb3dzCisgICAgICAgJiYgTUFUUklYX1JPVyAobWF0cml4LCB2bnRoKS0+ ZW5hYmxlZF9wCisgICAgICAgJiYgZ29fb25lX3A7CisgICAgICAgKyt2bnRoKQorICAgIHsKKyAg ICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdyA9IE1BVFJJWF9ST1cgKG1hdHJpeCwgdm50aCk7Cisg ICAgICBtY19lcmFzZV9yb3cgKHcsIG1hdHJpeCwgcm93KTsKKyAgICB9CisgIGlmICh1cGRhdGlu Z19mcmFtZV9wKQorICAgIHVwZGF0ZV9lbmQgKGYpOworICAvLyBtY19yZXNldF9jYWNoZSAodyk7 Cit9CisKK0RFRlVOICgibWMtc3RkZXJyIiwgRm1jX3N0ZGVyciwgU21jX3N0ZGVyciwgMCwgMSwg IlAiLAorICAgICAgIGRvYzogLyogVG9nZ2xlIHRyYWNpbmcgb2YgbXVsdGlwbGUgZmFrZSBjdXJz b3JzLgorV2l0aCBBUkcsIHR1cm4gdHJhY2luZyBvbiBpZiBhbmQgb25seSBpZiBBUkcgaXMgcG9z aXRpdmUuICovKQorICAoTGlzcF9PYmplY3QgYXJnKQoreworICBpZiAoTklMUCAoYXJnKSkKKyAg ICBtY19zdGRlcnJfcCA9ICFtY19zdGRlcnJfcDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGFyZyA9 IEZwcmVmaXhfbnVtZXJpY192YWx1ZSAoYXJnKTsKKyAgICAgIG1jX3N0ZGVycl9wID0gWEZJWE5V TSAoYXJnKSA+IDA7CisgICAgfQorICByZXR1cm4gUW5pbDsKK30KKworLyogZW5kIE1VTFRJUExF LUNVUlNPUlMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAwKIC8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgogCQkgICAgICBXaW5kb3cgZGlzcGxheSBkaW1lbnNpb25zCkBAIC0xNDM5Nyw5ICsxOTI2 NSwyMiBAQCByZWRpc3BsYXlfaW50ZXJuYWwgKHZvaWQpCiAJICAgICAgKnctPmRlc2lyZWRfbWF0 cml4LT5tZXRob2QgPSAwOwogCSAgICAgIGRlYnVnX21ldGhvZF9hZGQgKHcsICJvcHRpbWl6YXRp b24gMSIpOwogI2VuZGlmCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBM RS1DVVJTT1JTICovCisKICNpZmRlZiBIQVZFX1dJTkRPV19TWVNURU0KKyAgaWYgKEJVRkZFUlAg KHctPmNvbnRlbnRzKQorICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRz KSwgY3Jvc3NoYWlycykpKQorICAgIG1jX3VwZGF0ZV93aW5kb3dfZnJpbmdlcyAodywgZmFsc2Up OworICAgIGVsc2UKIAkgICAgICB1cGRhdGVfd2luZG93X2ZyaW5nZXMgKHcsIGZhbHNlKTsKICNl bmRpZgorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAJICAgICAgZ290byB1cGRhdGU7 CiAJICAgIH0KIAkgIGVsc2UKQEAgLTE3NzkyLDEwICsyMjY3MywyMiBAQCByZWRpc3BsYXlfd2lu ZG93IChMaXNwX09iamVjdCB3aW5kb3csIGJvb2wganVzdF90aGlzX29uZV9wKQogICAgIH0KIAog I2lmZGVmIEhBVkVfV0lORE9XX1NZU1RFTQorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor LyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIGJvb2wga2VlcF9jdXJyZW50X3AgPSAoanVzdF90 aGlzX29uZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCF1c2VkX2N1cnJlbnRfbWF0 cml4X3AgJiYgIW92ZXJsYXlfYXJyb3dfc2VlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICB8 fCB3LT5wc2V1ZG9fd2luZG93X3ApOworCisgIGJvb2wgZnJpbmdlc191cGRhdGVkX3AgPSAoQlVG RkVSUCAody0+Y29udGVudHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAg KEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgPyBtY191cGRhdGVfd2luZG93X2ZyaW5nZXMgKHcsIGtlZXBfY3VycmVu dF9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1cGRhdGVfd2luZG93X2ZyaW5nZXMg KHcsIGtlZXBfY3VycmVudF9wKTsKKwogICBpZiAoRlJBTUVfV0lORE9XX1AgKGYpCi0gICAgICAm JiB1cGRhdGVfd2luZG93X2ZyaW5nZXMgKHcsIChqdXN0X3RoaXNfb25lX3AKLQkJCQkgICAgfHwg KCF1c2VkX2N1cnJlbnRfbWF0cml4X3AgJiYgIW92ZXJsYXlfYXJyb3dfc2VlbikKLQkJCQkgICAg fHwgdy0+cHNldWRvX3dpbmRvd19wKSkpCisgICAgICAmJiBmcmluZ2VzX3VwZGF0ZWRfcCkKICAg ICB7CiAgICAgICB1cGRhdGVfYmVnaW4gKGYpOwogICAgICAgYmxvY2tfaW5wdXQgKCk7CkBAIC0x NzgxMCw2ICsyMjcwMyw5IEBAIHJlZGlzcGxheV93aW5kb3cgKExpc3BfT2JqZWN0IHdpbmRvdywg Ym9vbCBqdXN0X3RoaXNfb25lX3ApCiAgICAgICB1cGRhdGVfZW5kIChmKTsKICAgICB9CiAKKy8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAqLworCisKICAgaWYgKFdJTkRPV19CT1RUT01fRElWSURFUl9X SURUSCAodykpCiAgICAgZ3VpX2RyYXdfYm90dG9tX2RpdmlkZXIgKHcpOwogI2VuZGlmIC8qIEhB VkVfV0lORE9XX1NZU1RFTSAqLwpAQCAtMTgxMjUsNiArMjMwMjEsMTYgQEAgdHJ5X3dpbmRvd19y ZXVzaW5nX2N1cnJlbnRfbWF0cml4IChzdHJ1Y3Qgd2luZG93ICp3KQogCSAgICAgIHVwZGF0ZV9i ZWdpbiAoZik7CiAJICAgICAgZ3VpX3VwZGF0ZV93aW5kb3dfYmVnaW4gKHcpOwogCSAgICAgIEZS QU1FX1JJRiAoZiktPmNsZWFyX3dpbmRvd19tb3VzZV9mYWNlICh3KTsKKworCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgIG1jX3ByZV9zY3Jv bGxfY2xlYW4gKHcsIHJ1biwgc3RhcnRfdnBvcywgbnJvd3Nfc2Nyb2xsZWQsIFRSWV9XSU5ET1df UkVVU0lOR19DVVJSRU5UX01BVFJJWF9ET1dOKTsKKworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisKKwogCSAgICAgIEZSQU1FX1JJRiAoZiktPnNjcm9sbF9ydW5faG9vayAodywgJnJ1bik7CiAJ ICAgICAgZ3VpX3VwZGF0ZV93aW5kb3dfZW5kICh3LCBmYWxzZSwgZmFsc2UpOwogCSAgICAgIHVw ZGF0ZV9lbmQgKGYpOwpAQCAtMTgyOTEsNiArMjMxOTcsMTYgQEAgdHJ5X3dpbmRvd19yZXVzaW5n X2N1cnJlbnRfbWF0cml4IChzdHJ1Y3Qgd2luZG93ICp3KQogCSAgdXBkYXRlX2JlZ2luIChmKTsK IAkgIGd1aV91cGRhdGVfd2luZG93X2JlZ2luICh3KTsKIAkgIEZSQU1FX1JJRiAoZiktPmNsZWFy X3dpbmRvd19tb3VzZV9mYWNlICh3KTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8q IE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgIG1jX3ByZV9zY3JvbGxfY2xlYW4gKHcsIHJ1biwg c3RhcnRfdnBvcywgbnJvd3Nfc2Nyb2xsZWQsIFRSWV9XSU5ET1dfUkVVU0lOR19DVVJSRU5UX01B VFJJWF9VUCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgIEZSQU1FX1JJRiAo ZiktPnNjcm9sbF9ydW5faG9vayAodywgJnJ1bik7CiAJICBndWlfdXBkYXRlX3dpbmRvd19lbmQg KHcsIGZhbHNlLCBmYWxzZSk7CiAJICB1cGRhdGVfZW5kIChmKTsKQEAgLTE5MjQ1LDYgKzI0MTYx LDE2IEBAIHRyeV93aW5kb3dfaWQgKHN0cnVjdCB3aW5kb3cgKncpCiAjaWZkZWYgSEFWRV9XSU5E T1dfU1lTVEVNCiAJICBndWlfdXBkYXRlX3dpbmRvd19iZWdpbiAodyk7CiAJICBGUkFNRV9SSUYg KGYpLT5jbGVhcl93aW5kb3dfbW91c2VfZmFjZSAodyk7CisKKworLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgICBtY19wcmVfc2Nyb2xsX2NsZWFu ICh3LCBydW4sIGZpcnN0X3VuY2hhbmdlZF9hdF9lbmRfdnBvcywgZHZwb3MsIFRSWV9XSU5ET1df SUQpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAJICBGUkFNRV9SSUYgKGYpLT5z Y3JvbGxfcnVuX2hvb2sgKHcsICZydW4pOwogCSAgZ3VpX3VwZGF0ZV93aW5kb3dfZW5kICh3LCBm YWxzZSwgZmFsc2UpOwogI2VuZGlmCkBAIC0yMTUyOCw2ICsyNjQ1NCwxNyBAQCBtYXliZV9wcm9k dWNlX2xpbmVfbnVtYmVyIChzdHJ1Y3QgaXQgKml0KQogICAgICAgU0VUX1RFWFRfUE9TICh0ZW1f aXQucG9zaXRpb24sIC0xLCAtMSk7CiAgICAgICBQUk9EVUNFX0dMWVBIUyAoJnRlbV9pdCk7CiAK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAg ICAgIC8qIFRoaXMgcGVybWl0cyB1cyB0byBpbnNwZWN0IHRoZSBIUE9TIG9mIGxpbmUgbnVtYmVy IGdseXBocyBhbmQgdGhlIHNwYWNlCisgICAgICBwYWRkaW5nIGJlZm9yZS9hZnRlciB0aGUgbGlu ZSBudW1iZXJzLiAgV2Ugc2V0IGBnbHlwaC0+aHBvc2AgZWxzZXdoZXJlLiAqLworICAgICAgdGVt X2l0Lmhwb3MgKz0gMTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgICAgLyog U3RvcCBwcm9kdWNpbmcgZ2x5cGhzLCBhbmQgcmVmcmFpbiBmcm9tIHByb2R1Y2luZyB0aGUgbGlu ZQogCSBudW1iZXIsIGlmIHdlIGRvbid0IGhhdmUgZW5vdWdoIHNwYWNlIG9uIHRoaXMgbGluZS4g ICovCiAgICAgICBpZiAodGVtX2l0LmN1cnJlbnRfeCA+PSB3aWR0aF9saW1pdCkKQEAgLTIxNTM5 LDYgKzI2NDc2LDM0IEBAIG1heWJlX3Byb2R1Y2VfbGluZV9udW1iZXIgKHN0cnVjdCBpdCAqaXQp CiAJfQogICAgIH0KIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNV UlNPUlMgKi8KKworICBzdHJ1Y3QgdGV4dF9wb3Mgd3N0YXJ0OworICBTRVRfVEVYVF9QT1NfRlJP TV9NQVJLRVIgKHdzdGFydCwgaXQtPnctPnN0YXJ0KTsKKyAgaWYgKGl0LT5hcmVhID09IFRFWFRf QVJFQQorICAgICAgJiYgSVRfQ0hBUlBPUyAoKml0KSA9PSB3c3RhcnQuY2hhcnBvcykKKyAgICB7 CisgICAgICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAoaXQtPnctPmNvbnRlbnRzKTsKKyAg ICAgIHN0cnVjdCBidWZmZXIgKm9sZF9idWZmZXIgPSBOVUxMOworICAgICAgLyogTmVlZGVkIHNv IHRoYXQgYnVmZmVyLWxvY2FsIHZhbHVlcyBjYW4gYmUgZGV0ZXJtaW5lZDsgZS5nLiwgd2hlbgor ICAgICAgc3dpdGNoaW5nIHRvIHRoZSBtaW5pYnVmZmVyLiAqLworICAgICAgaWYgKGIgIT0gY3Vy cmVudF9idWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICBvbGRfYnVmZmVyID0gY3VycmVudF9i dWZmZXI7CisgICAgICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAoYik7CisgICAgICAgIH0KKyAg ICAgIGl0LT53LT5tYy5sbnVtX3BpeGVsX3dpZHRoID0gKCFOSUxQIChWZGlzcGxheV9saW5lX251 bWJlcnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRlbV9pdC5jdXJy ZW50X3gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOworICAgICAgaWYg KG9sZF9idWZmZXIpCisgICAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKG9sZF9idWZmZXIpOwor ICAgIH0KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAvKiBSZWNvcmQgdGhlIHdp ZHRoIGluIHBpeGVscyB3ZSBuZWVkIGZvciB0aGUgbGluZSBudW1iZXIgZGlzcGxheS4gICovCiAg IGl0LT5sbnVtX3BpeGVsX3dpZHRoID0gdGVtX2l0LmN1cnJlbnRfeDsKICAgLyogQ29weSB0aGUg cHJvZHVjZWQgZ2x5cGhzIGludG8gSVQncyBnbHlwaF9yb3cuICAqLwpAQCAtMjczNjAsNiArMzIz MjUsMTcgQEAgYXBwZW5kX2dseXBoIChzdHJ1Y3QgaXQgKml0KQogCSAgICBnWzFdID0gKmc7CiAJ ICBnbHlwaCA9IGl0LT5nbHlwaF9yb3ctPmdseXBoc1thcmVhXTsKIAl9CisKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgICAgIGdseXBoLT5o cG9zID0gaXQtPmhwb3M7CisgICAgICBnbHlwaC0+Ynl0ZXBvcyA9IElUX0JZVEVQT1MgKCppdCk7 CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICAgIGdseXBoLT5jaGFycG9zID0g Q0hBUlBPUyAoaXQtPnBvc2l0aW9uKTsKICAgICAgIGdseXBoLT5vYmplY3QgPSBpdC0+b2JqZWN0 OwogICAgICAgaWYgKGl0LT5waXhlbF93aWR0aCA+IDApCkBAIC0yNzQ0Miw2ICszMjQxOCwxNyBA QCBhcHBlbmRfY29tcG9zaXRlX2dseXBoIChzdHJ1Y3QgaXQgKml0KQogCSAgICBnWzFdID0gKmc7 CiAJICBnbHlwaCA9IGl0LT5nbHlwaF9yb3ctPmdseXBoc1tpdC0+YXJlYV07CiAJfQorCisKKy8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICAgICBn bHlwaC0+aHBvcyA9IGl0LT5ocG9zOworICAgICAgZ2x5cGgtPmJ5dGVwb3MgPSBJVF9CWVRFUE9T ICgqaXQpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgICAgICBnbHlwaC0+Y2hh cnBvcyA9IGl0LT5jbXBfaXQuY2hhcnBvczsKICAgICAgIGdseXBoLT5vYmplY3QgPSBpdC0+b2Jq ZWN0OwogICAgICAgZWFzc2VydCAoaXQtPnBpeGVsX3dpZHRoIDw9IFNIUlRfTUFYKTsKQEAgLTI3 NjUwLDYgKzMyNjM3LDE3IEBAIHByb2R1Y2VfaW1hZ2VfZ2x5cGggKHN0cnVjdCBpdCAqaXQpCiAJ fQogICAgICAgaWYgKGdseXBoIDwgaXQtPmdseXBoX3Jvdy0+Z2x5cGhzW2FyZWEgKyAxXSkKIAl7 CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisK KyAgICAgIGdseXBoLT5ocG9zID0gaXQtPmhwb3M7CisgICAgICBnbHlwaC0+Ynl0ZXBvcyA9IElU X0JZVEVQT1MgKCppdCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgIGdseXBo LT5jaGFycG9zID0gQ0hBUlBPUyAoaXQtPnBvc2l0aW9uKTsKIAkgIGdseXBoLT5vYmplY3QgPSBp dC0+b2JqZWN0OwogCSAgZ2x5cGgtPnBpeGVsX3dpZHRoID0gY2xpcF90b19ib3VuZHMgKC0xLCBp dC0+cGl4ZWxfd2lkdGgsIFNIUlRfTUFYKTsKQEAgLTI3NzUzLDYgKzMyNzUxLDE3IEBAIHByb2R1 Y2VfeHdpZGdldF9nbHlwaCAoc3RydWN0IGl0ICppdCkKIAl9CiAgICAgICBpZiAoZ2x5cGggPCBp dC0+Z2x5cGhfcm93LT5nbHlwaHNbYXJlYSArIDFdKQogCXsKKworCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgICAgZ2x5cGgtPmhwb3MgPSBp dC0+aHBvczsKKyAgICAgIGdseXBoLT5ieXRlcG9zID0gSVRfQllURVBPUyAoKml0KTsKKworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisKKwogCSAgZ2x5cGgtPmNoYXJwb3MgPSBDSEFSUE9TIChp dC0+cG9zaXRpb24pOwogCSAgZ2x5cGgtPm9iamVjdCA9IGl0LT5vYmplY3Q7CiAJICBnbHlwaC0+ cGl4ZWxfd2lkdGggPSBjbGlwX3RvX2JvdW5kcyAoLTEsIGl0LT5waXhlbF93aWR0aCwgU0hSVF9N QVgpOwpAQCAtMjc4MzksNiArMzI4NDgsMTcgQEAgYXBwZW5kX3N0cmV0Y2hfZ2x5cGggKHN0cnVj dCBpdCAqaXQsIExpc3BfT2JqZWN0IG9iamVjdCwKIAkgICAgd2lkdGggLT0gaXQtPmZpcnN0X3Zp c2libGVfeCAtIGl0LT5jdXJyZW50X3g7CiAJICBlYXNzZXJ0ICh3aWR0aCA+IDApOwogCX0KKwor CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAg ICAgZ2x5cGgtPmhwb3MgPSBpdC0+aHBvczsKKyAgICAgIGdseXBoLT5ieXRlcG9zID0gSVRfQllU RVBPUyAoKml0KTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgICAgZ2x5cGgt PmNoYXJwb3MgPSBDSEFSUE9TIChpdC0+cG9zaXRpb24pOwogICAgICAgZ2x5cGgtPm9iamVjdCA9 IG9iamVjdDsKICAgICAgIC8qIEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIFRZUEVf TUFYIGhlcmUsIGJ1dApAQCAtMjgyOTMsNiArMzMzMTMsMTcgQEAgYXBwZW5kX2dseXBobGVzc19n bHlwaCAoc3RydWN0IGl0ICppdCwgaW50IGZhY2VfaWQsIGJvb2wgZm9yX25vX2ZvbnQsIGludCBs ZW4sCiAJICAgIGdbMV0gPSAqZzsKIAkgIGdseXBoID0gaXQtPmdseXBoX3Jvdy0+Z2x5cGhzW2Fy ZWFdOwogCX0KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNP UlMgKi8KKworICAgICAgZ2x5cGgtPmhwb3MgPSBpdC0+aHBvczsKKyAgICAgIGdseXBoLT5ieXRl cG9zID0gSVRfQllURVBPUyAoKml0KTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwog ICAgICAgZ2x5cGgtPmNoYXJwb3MgPSBDSEFSUE9TIChpdC0+cG9zaXRpb24pOwogICAgICAgZ2x5 cGgtPm9iamVjdCA9IGl0LT5vYmplY3Q7CiAgICAgICBlYXNzZXJ0IChpdC0+cGl4ZWxfd2lkdGgg PD0gU0hSVF9NQVgpOwpAQCAtMjkzNDMsMTAgKzM0Mzc0LDIwIEBAIGd1aV9pbnNlcnRfZ2x5cGhz IChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfcm93ICp1cGRhdGVkX3JvdywKIAogICAv KiBXcml0ZSB0aGUgZ2x5cGhzLiAgKi8KICAgaHBvcyA9IHN0YXJ0IC0gcm93LT5nbHlwaHNbdXBk YXRlZF9hcmVhXTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNV UlNPUlMgKi8KKworICBpZiAoIW1jX3JlZHJhd19yb3cgKHcsIHctPmN1cnJlbnRfbWF0cml4LCBy b3csIHVwZGF0ZWRfYXJlYSwgdy0+b3V0cHV0X2N1cnNvci54LAorICAgICAgICAgICAgICAgICAg ICAgIGhwb3MsIGhwb3MgKyBsZW4sIGZhbHNlLCBEUkFXX05PUk1BTF9URVhULCBHVUlfSU5TRVJU X0dMWVBIUykpCiAgIGRyYXdfZ2x5cGhzICh3LCB3LT5vdXRwdXRfY3Vyc29yLngsIHJvdywgdXBk YXRlZF9hcmVhLAogCSAgICAgICBocG9zLCBocG9zICsgbGVuLAogCSAgICAgICBEUkFXX05PUk1B TF9URVhULCAwKTsKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAvKiBBZHZhbmNl IHRoZSBvdXRwdXQgY3Vyc29yLiAgKi8KICAgdy0+b3V0cHV0X2N1cnNvci5ocG9zICs9IGxlbjsK ICAgdy0+b3V0cHV0X2N1cnNvci54ICs9IHNoaWZ0X2J5X3dpZHRoOwpAQCAtMjk3NzIsOSArMzQ4 MTMsMTkgQEAgZ3VpX2ZpeF9vdmVybGFwcGluZ19hcmVhIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1 Y3QgZ2x5cGhfcm93ICpyb3csCiAJICB3aGlsZSAoaSA8IHJvdy0+dXNlZFthcmVhXQogCQkgJiYg cm93LT5nbHlwaHNbYXJlYV1baV0ub3ZlcmxhcHNfdmVydGljYWxseV9wKTsKIAorCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgICAgaWYgKCFt Y19yZWRyYXdfcm93ICh3LCB3LT5jdXJyZW50X21hdHJpeCwgcm93LCBhcmVhLCBzdGFydF94LCBz dGFydCwgaSwKKyAgICAgICAgICBmYWxzZSwgRFJBV19OT1JNQUxfVEVYVCwgR1VJX0ZJWF9PVkVS TEFQUElOR19BUkVBKSkKIAkgIGRyYXdfZ2x5cGhzICh3LCBzdGFydF94LCByb3csIGFyZWEsCiAJ CSAgICAgICBzdGFydCwgaSwKIAkJICAgICAgIERSQVdfTk9STUFMX1RFWFQsIG92ZXJsYXBzKTsK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogCX0KICAgICAgIGVsc2UKIAl7CkBAIC0z MDAyNSwxMCArMzUwNzYsMjAgQEAgZGlzcGxheV9hbmRfc2V0X2N1cnNvciAoc3RydWN0IHdpbmRv dyAqdywgYm9vbCBvbiwKICAgbmV3X2N1cnNvcl90eXBlID0gZ2V0X3dpbmRvd19jdXJzb3JfdHlw ZSAodywgZ2x5cGgsCiAJCQkJCSAgICAmbmV3X2N1cnNvcl93aWR0aCwgJmFjdGl2ZV9jdXJzb3Ip OwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLwor CiAgIC8qIElmIGN1cnNvciBpcyBjdXJyZW50bHkgYmVpbmcgc2hvd24gYW5kIHdlIGRvbid0IHdh bnQgaXQgdG8gYmUgb3IKICAgICAgaXQgaXMgaW4gdGhlIHdyb25nIHBsYWNlLCBvciB0aGUgY3Vy c29yIHR5cGUgaXMgbm90IHdoYXQgd2Ugd2FudCwKICAgICAgZXJhc2UgaXQuICAqLwogICBpZiAo dy0+cGh5c19jdXJzb3Jfb25fcAorICAgICAgJiYgTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29u dGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICYmIE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNv bnRlbnRzKSwgZmNfdmlzaWJsZSkpCisgICAgICAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5j b250ZW50cyksIG1jX2NvbmYpKQorICAgICAgJiYgdy0+bWNfbWF0cml4LmN1cnNvcnNfdXNlZFtN Q19DQUNIRV0gPT0gMAorICAgICAgJiYgdy0+bWNfbWF0cml4LmN1cnNvcnNfdXNlZFtDSF9DQUNI RV0gPT0gMAorICAgICAgJiYgdy0+bWNfbWF0cml4LmN1cnNvcnNfdXNlZFtGQ19DQUNIRV0gPT0g MAogICAgICAgJiYgKCFvbgogCSAgfHwgdy0+cGh5c19jdXJzb3IueCAhPSB4CiAJICB8fCB3LT5w aHlzX2N1cnNvci55ICE9IHkKQEAgLTMwMDQxLDYgKzM1MTAyLDkgQEAgZGlzcGxheV9hbmRfc2V0 X2N1cnNvciAoc3RydWN0IHdpbmRvdyAqdywgYm9vbCBvbiwKIAkgICAgICAmJiBuZXdfY3Vyc29y X3dpZHRoICE9IHctPnBoeXNfY3Vyc29yX3dpZHRoKSkpCiAgICAgZXJhc2VfcGh5c19jdXJzb3Ig KHcpOwogCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIC8qIERvbid0IGNoZWNrIHBo eXNfY3Vyc29yX29uX3AgaGVyZSBiZWNhdXNlIHRoYXQgZmxhZyBpcyBvbmx5IHNldAogICAgICB0 byBmYWxzZSBpbiBzb21lIGNhc2VzIHdoZXJlIHdlIGtub3cgdGhhdCB0aGUgY3Vyc29yIGhhcyBi ZWVuCiAgICAgIGNvbXBsZXRlbHkgZXJhc2VkLCB0byBhdm9pZCB0aGUgZXh0cmEgd29yayBvZiBl cmFzaW5nIHRoZSBjdXJzb3IKQEAgLTMwMDU5LDkgKzM1MTIzLDIzIEBAIGRpc3BsYXlfYW5kX3Nl dF9jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgb24sCiAgICAgICB3LT5waHlzX2N1cnNv ci52cG9zID0gdnBvczsKICAgICB9CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBN VUxUSVBMRS1DVVJTT1JTICovCisKKyAgaWYgKE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRl bnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250 ZW50cyksIGZjX3Zpc2libGUpKQorICAgICAgJiYgTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29u dGVudHMpLCBtY19jb25mKSkKKyAgICAgICYmIHctPm1jX21hdHJpeC5jdXJzb3JzX3VzZWRbTUNf Q0FDSEVdID09IDAKKyAgICAgICYmIHctPm1jX21hdHJpeC5jdXJzb3JzX3VzZWRbQ0hfQ0FDSEVd ID09IDAKKyAgICAgICYmIHctPm1jX21hdHJpeC5jdXJzb3JzX3VzZWRbRkNfQ0FDSEVdID09IDAp CiAgIEZSQU1FX1JJRiAoZiktPmRyYXdfd2luZG93X2N1cnNvciAodywgZ2x5cGhfcm93LCB4LCB5 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jdXJzb3JfdHlwZSwg bmV3X2N1cnNvcl93aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv biwgYWN0aXZlX2N1cnNvcik7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIH0KIAog CkBAIC0zMDE1NCw3ICszNTIzMiwxOCBAQCBkcmF3X3Jvd193aXRoX21vdXNlX2ZhY2UgKHN0cnVj dCB3aW5kb3cgKncsIGludCBzdGFydF94LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCiAjaWZkZWYg SEFWRV9XSU5ET1dfU1lTVEVNCiAgIGlmIChGUkFNRV9XSU5ET1dfUCAoWEZSQU1FICh3LT5mcmFt ZSkpKQogICAgIHsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNV UlNPUlMgKi8KKworICAgICAgaWYgKCFtY19yZWRyYXdfcm93ICh3LCB3LT5jdXJyZW50X21hdHJp eCwgcm93LCBURVhUX0FSRUEsIHN0YXJ0X3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 YXJ0X2hwb3MsIGVuZF9ocG9zLCBmYWxzZSwgZHJhdywgRFJBV19ST1dfV0lUSF9NT1VTRV9GQUNF KSkKICAgICAgIGRyYXdfZ2x5cGhzICh3LCBzdGFydF94LCByb3csIFRFWFRfQVJFQSwgc3RhcnRf aHBvcywgZW5kX2hwb3MsIGRyYXcsIDApOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwor CiAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zMjIxNCwxMSArMzczMDMsMjMgQEAg ZXhwb3NlX2FyZWEgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgY29u c3QgRW1hY3NfUmVjdGFuZ2xlICpyLAogICBzdHJ1Y3QgZ2x5cGggKmxhc3Q7CiAgIGludCBmaXJz dF94LCBzdGFydF94LCB4OwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQ TEUtQ1VSU09SUyAqLworCiAgIGlmIChhcmVhID09IFRFWFRfQVJFQSAmJiByb3ctPmZpbGxfbGlu ZV9wKQorICAgIHsKKyAgICAgIGlmICghbWNfcmVkcmF3X3JvdyAodywgdy0+Y3VycmVudF9tYXRy aXgsIHJvdywgYXJlYSwgMCwgMCwgcm93LT51c2VkW2FyZWFdLAorICAgICAgICAgICAgICAgICAg ICAgICAgICBmYWxzZSwgRFJBV19OT1JNQUxfVEVYVCwgRVhQT1NFX0FSRUFfT05FKSkKICAgICAv KiBJZiByb3cgZXh0ZW5kcyBmYWNlIHRvIGVuZCBvZiBsaW5lIHdyaXRlIHRoZSB3aG9sZSBsaW5l LiAgKi8KICAgICBkcmF3X2dseXBocyAodywgMCwgcm93LCBhcmVhLAogCQkgMCwgcm93LT51c2Vk W2FyZWFdLAogCQkgRFJBV19OT1JNQUxfVEVYVCwgMCk7CisgICAgfQorCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKworCiAgIGVsc2UKICAgICB7CiAgICAgICAvKiBTZXQgU1RBUlRfWCB0byB0 aGUgd2luZG93LXJlbGF0aXZlIHN0YXJ0IHBvc2l0aW9uIGZvciBkcmF3aW5nIGdseXBocyBvZgpA QCAtMzIyNTAsMTEgKzM3MzUxLDI0IEBAIGV4cG9zZV9hcmVhIChzdHJ1Y3Qgd2luZG93ICp3LCBz dHJ1Y3QgZ2x5cGhfcm93ICpyb3csIGNvbnN0IEVtYWNzX1JlY3RhbmdsZSAqciwKIAkgICsrbGFz dDsKIAl9CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JT ICovCisKICAgICAgIC8qIFJlcGFpbnQuICAqLwotICAgICAgaWYgKGxhc3QgPiBmaXJzdCkKKwor ICAgICAgLyogRmxvYXRpbmcgZmFrZSBjdXJzb3JzIHdpbGwgZXhpc3Qgd2hlbiAobGFzdCA9PSBm aXJzdCkuICovCisgICAgICBpZiAoIW1jX3JlZHJhd19yb3cgKHcsIHctPmN1cnJlbnRfbWF0cml4 LCByb3csIGFyZWEsIGZpcnN0X3ggLSBzdGFydF94LAorICAgICAgICAgICAgICAgICAgICAgICAg ICBmaXJzdCAtIHJvdy0+Z2x5cGhzW2FyZWFdLCBsYXN0IC0gcm93LT5nbHlwaHNbYXJlYV0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBEUkFXX05PUk1BTF9URVhULCBFWFBPU0Vf QVJFQV9UV08pCisgICAgICAgICAgJiYgbGFzdCA+IGZpcnN0KQogCWRyYXdfZ2x5cGhzICh3LCBm aXJzdF94IC0gc3RhcnRfeCwgcm93LCBhcmVhLAogCQkgICAgIGZpcnN0IC0gcm93LT5nbHlwaHNb YXJlYV0sIGxhc3QgLSByb3ctPmdseXBoc1thcmVhXSwKIAkJICAgICBEUkFXX05PUk1BTF9URVhU LCAwKTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgIH0KIH0KIApAQCAtMzIy NjgsMTAgKzM3MzgyLDIyIEBAIGV4cG9zZV9saW5lIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3Qg Z2x5cGhfcm93ICpyb3csIGNvbnN0IEVtYWNzX1JlY3RhbmdsZSAqcikKIHsKICAgZWFzc2VydCAo cm93LT5lbmFibGVkX3ApOwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQ TEUtQ1VSU09SUyAqLworCiAgIGlmIChyb3ctPm1vZGVfbGluZV9wIHx8IHctPnBzZXVkb193aW5k b3dfcCkKKyAgICB7CisgICAgICBpZiAoIW1jX3JlZHJhd19yb3cgKHcsIHctPmN1cnJlbnRfbWF0 cml4LCByb3csIFRFWFRfQVJFQSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcm93 LT51c2VkW1RFWFRfQVJFQV0sIGZhbHNlLCBEUkFXX05PUk1BTF9URVhULCBFWFBPU0VfTElORSkp CiAgICAgZHJhd19nbHlwaHMgKHcsIDAsIHJvdywgVEVYVF9BUkVBLAogCQkgMCwgcm93LT51c2Vk W1RFWFRfQVJFQV0sCiAJCSBEUkFXX05PUk1BTF9URVhULCAwKTsKKyAgICB9CisKKy8qICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLworCisKICAgZWxzZQogICAgIHsKICAgICAgIGlmIChyb3ctPnVzZWRb TEVGVF9NQVJHSU5fQVJFQV0pCkBAIC0zMjgxOSw2ICszNzk0NSwyMiBAQCBndWlfaW50ZXJzZWN0 X3JlY3RhbmdsZXMgKGNvbnN0IEVtYWNzX1JlY3RhbmdsZSAqcjEsIGNvbnN0IEVtYWNzX1JlY3Rh bmdsZSAqcjIsCiB2b2lkCiBzeW1zX29mX3hkaXNwICh2b2lkKQogeworCisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIGRlZnN1YnIgKCZTbWNf ZHVtcF9nbHlwaF9yb3cpOworCisgIGRlZnN1YnIgKCZTbWNfZHVtcF9nbHlwaF9tYXRyaXgpOwor CisgIGRlZnN1YnIgKCZTbWNfY3VycmVudF9jb2x1bW4pOworCisgIGRlZnN1YnIgKCZTbWNfc3Rk ZXJyKTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICBWd2l0aF9lY2hvX2FyZWFf c2F2ZV92ZWN0b3IgPSBRbmlsOwogICBzdGF0aWNwcm8gKCZWd2l0aF9lY2hvX2FyZWFfc2F2ZV92 ZWN0b3IpOwogCmRpZmYgLS1naXQgYS9zcmMveHRlcm0uYyBiL3NyYy94dGVybS5jCmluZGV4IGM5 NmFhNzQuLmQzNGQ4MWQgMTAwNjQ0Ci0tLSBhL3NyYy94dGVybS5jCisrKyBiL3NyYy94dGVybS5j CkBAIC0xMzIsNiArMTMyLDkwNyBAQCBhbG9uZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5vdCwgc2Vl IDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogI2luY2x1ZGUgPFgxMS9YS0Js aWIuaD4KICNlbmRpZgogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogYmVnaW4gTVVM VElQTEUtQ1VSU09SUyAqLworCisjaWZkZWYgR0xZUEhfREVCVUcKK3N0YXRpYyB2b2lkIHhfY2hl Y2tfZm9udCAoc3RydWN0IGZyYW1lICosIHN0cnVjdCBmb250ICopOworI2VuZGlmCisKK3N0YXRp YyB2b2lkIHhfc2V0X21vZGVfbGluZV9mYWNlX2djIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOwor CitzdGF0aWMgdm9pZCB4X3NldF9tb3VzZV9mYWNlX2djIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICop OworCitzdGF0aWMgdm9pZCB4X2NsaXBfdG9fcm93IChzdHJ1Y3Qgd2luZG93ICosIHN0cnVjdCBn bHlwaF9yb3cgKiwgZW51bSBnbHlwaF9yb3dfYXJlYSwgR0MpOworCitzdGF0aWMgdm9pZCB4X2Ry YXdfcmVjdGFuZ2xlIChzdHJ1Y3QgZnJhbWUgKiwgR0MsIGludCwgaW50LCBpbnQsIGludCk7CisK K3N0YXRpYyB2b2lkIHhfcmVzZXRfY2xpcF9yZWN0YW5nbGVzIChzdHJ1Y3QgZnJhbWUgKiwgR0Mp OworCitzdGF0aWMgdm9pZCB4X2ZpbGxfcmVjdGFuZ2xlIChzdHJ1Y3QgZnJhbWUgKiwgR0MsIGlu dCwgaW50LCBpbnQsIGludCk7CisKK3N0YXRpYyB2b2lkIHhfZHJhd19nbHlwaF9zdHJpbmdfYmdf cmVjdCAoc3RydWN0IGdseXBoX3N0cmluZyAqLCBpbnQsIGludCwgaW50LCBpbnQpOworCitzdGF0 aWMgdm9pZCB4X3NldF9jbGlwX3JlY3RhbmdsZXMgKHN0cnVjdCBmcmFtZSAqLCBHQywgWFJlY3Rh bmdsZSAqLCBpbnQpOworCitzdGF0aWMgdm9pZCB4X3NldF9nbHlwaF9zdHJpbmdfY2xpcHBpbmcg KHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHhfZHJhd19nbHlwaF9zdHJp bmdfYmFja2dyb3VuZCAoc3RydWN0IGdseXBoX3N0cmluZyAqLCBib29sKTsKKworc3RhdGljIHZv aWQgeF9kcmF3X2dseXBoX3N0cmluZ19ib3ggKHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0 YXRpYyB2b2lkIHhfc2V0X2dseXBoX3N0cmluZ19jbGlwcGluZ19leGFjdGx5IChzdHJ1Y3QgZ2x5 cGhfc3RyaW5nICosIHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHhfZHJh d19pbWFnZV9nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2 b2lkIHhfZHJhd19nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAoc3RydWN0IGdseXBoX3N0cmluZyAq KTsKKworc3RhdGljIHZvaWQgeF9kcmF3X2NvbXBvc2l0ZV9nbHlwaF9zdHJpbmdfZm9yZWdyb3Vu ZCAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsKKworc3RhdGljIHZvaWQgeF9kcmF3X2dseXBobGVz c19nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsKKworc3Rh dGljIHZvaWQgeF9kcmF3X3VuZGVyd2F2ZSAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsKKworLyog RGVjaWRlIGlmIGNvbG9yIG5hbWVkIENPTE9SX05BTUUgaXMgdmFsaWQgZm9yIHVzZSBvbiBmcmFt ZSBGLiAgSWYKKyAgIHNvLCByZXR1cm4gdGhlIFJHQiB2YWx1ZXMgaW4gQ09MT1IuICBJZiBBTExP Q19QLAorICAgYWxsb2NhdGUgdGhlIGNvbG9yLiAgVmFsdWUgaXMgZmFsc2UgaWYgQ09MT1JfTkFN RSBpcyBpbnZhbGlkLCBvcgorICAgbm8gY29sb3IgY291bGQgYmUgYWxsb2NhdGVkLiAgKi8KK2Jv b2wKK21jX3hfZGVmaW5lZF9jb2xvciAoc3RydWN0IGZyYW1lICpmLCBjb25zdCBjaGFyICpjb2xv cl9uYW1lLCBYQ29sb3IgKmNvbG9yLCBib29sIGFsbG9jX3ApCit7CisgIGJvb2wgc3VjY2Vzc19w ID0gZmFsc2U7CisgIENvbG9ybWFwIGNtYXAgPSBGUkFNRV9YX0NPTE9STUFQIChmKTsKKyAgYmxv Y2tfaW5wdXQgKCk7CisjaWZkZWYgVVNFX0dUSworICBzdWNjZXNzX3AgPSB4Z19jaGVja19zcGVj aWFsX2NvbG9ycyAoZiwgY29sb3JfbmFtZSwgY29sb3IpOworI2VuZGlmCisgIGlmICghc3VjY2Vz c19wKQorICAgIHN1Y2Nlc3NfcCA9IHhfcGFyc2VfY29sb3IgKGYsIGNvbG9yX25hbWUsIGNvbG9y KSAhPSAwOworICBpZiAoc3VjY2Vzc19wICYmIGFsbG9jX3ApCisgICAgc3VjY2Vzc19wID0geF9h bGxvY19uZWFyZXN0X2NvbG9yIChmLCBjbWFwLCBjb2xvcik7CisgIHVuYmxvY2tfaW5wdXQgKCk7 CisgIHJldHVybiBzdWNjZXNzX3A7Cit9CisKK3ZvaWQKK21jX3h3X2NvbG9yX3ZhbHVlcyAoc3Ry dWN0IHdpbmRvdyAqdywgTGlzcF9PYmplY3QgY29sb3IsIHN0cnVjdCBtY19SR0IgKmxzbCkKK3sK KyAgQ0hFQ0tfU1RSSU5HIChjb2xvcik7CisgIFhDb2xvciB0ZW1wOworICBzdHJ1Y3QgZnJhbWUg KmYgPSBkZWNvZGVfd2luZG93X3N5c3RlbV9mcmFtZSAody0+ZnJhbWUpOworICBpZiAobWNfeF9k ZWZpbmVkX2NvbG9yIChmLCBTU0RBVEEgKGNvbG9yKSwgJnRlbXAsIGZhbHNlKSkKKyAgICB7Cisg ICAgICBsc2wtPnJlZCA9IHRlbXAucmVkIC8gNjU1MzUuMDsKKyAgICAgIGxzbC0+Z3JlZW4gPSB0 ZW1wLmdyZWVuIC8gNjU1MzUuMDsKKyAgICAgIGxzbC0+Ymx1ZSA9IHRlbXAuYmx1ZSAvIDY1NTM1 LjA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbHNsLT5yZWQgPSAtMS4wOworICAgICAg bHNsLT5ncmVlbiA9IC0xLjA7CisgICAgICBsc2wtPmJsdWUgPSAtMS4wOworICAgIH0KK30KKwor LyogU2V0IFMtPmdjIHRvIGEgc3VpdGFibGUgR0MgZm9yIGRyYXdpbmcgZ2x5cGggc3RyaW5nIFMg aW4gY3Vyc29yIGZhY2UuICovCitzdGF0aWMgdm9pZAorbWNfeF9zZXRfY3Vyc29yX2djIChzdHJ1 Y3QgZ2x5cGhfc3RyaW5nICpzLCBib29sIGN1cnNvcl9nY19wKQoreworICBpZiAoY3Vyc29yX2dj X3ApCisgICAgeworICAgICAgcy0+Z2MgPSBzLT5mLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2M7 CisgICAgICByZXR1cm47CisgICAgfQorICBpZiAocy0+Zm9udCA9PSBGUkFNRV9GT05UIChzLT5m KQorICAgICAgJiYgcy0+ZmFjZS0+YmFja2dyb3VuZCA9PSBGUkFNRV9CQUNLR1JPVU5EX1BJWEVM IChzLT5mKQorICAgICAgJiYgcy0+ZmFjZS0+Zm9yZWdyb3VuZCA9PSBGUkFNRV9GT1JFR1JPVU5E X1BJWEVMIChzLT5mKQorICAgICAgJiYgIXMtPmNtcCkKKyAgICBzLT5nYyA9IHMtPmYtPm91dHB1 dF9kYXRhLngtPmN1cnNvcl9nYzsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEN1cnNvciBvbiBu b24tZGVmYXVsdCBmYWNlOiBtdXN0IG1lcmdlLiAqLworICAgICAgWEdDVmFsdWVzIHhnY3Y7Cisg ICAgICB1bnNpZ25lZCBsb25nIG1hc2s7CisgICAgICB4Z2N2LmJhY2tncm91bmQgPSBzLT5mLT5v dXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWw7CisgICAgICB4Z2N2LmZvcmVncm91bmQgPSBzLT5m YWNlLT5iYWNrZ3JvdW5kOworICAgICAgLyogSWYgdGhlIGdseXBoIHdvdWxkIGJlIGludmlzaWJs ZSwgdHJ5IGEgZGlmZmVyZW50IGZvcmVncm91bmQuICovCisgICAgICBpZiAoeGdjdi5mb3JlZ3Jv dW5kID09IHhnY3YuYmFja2dyb3VuZCkKKyAgICAgICAgeGdjdi5mb3JlZ3JvdW5kID0gcy0+ZmFj ZS0+Zm9yZWdyb3VuZDsKKyAgICAgIGlmICh4Z2N2LmZvcmVncm91bmQgPT0geGdjdi5iYWNrZ3Jv dW5kKQorICAgICAgICB4Z2N2LmZvcmVncm91bmQgPSBzLT5mLT5vdXRwdXRfZGF0YS54LT5jdXJz b3JfZm9yZWdyb3VuZF9waXhlbDsKKyAgICAgIGlmICh4Z2N2LmZvcmVncm91bmQgPT0geGdjdi5i YWNrZ3JvdW5kKQorICAgICAgICB4Z2N2LmZvcmVncm91bmQgPSBzLT5mYWNlLT5mb3JlZ3JvdW5k OworICAgICAgLyogTWFrZSBzdXJlIHRoZSBjdXJzb3IgaXMgZGlzdGluY3QgZnJvbSB0ZXh0IGlu IHRoaXMgZmFjZS4gKi8KKyAgICAgIGlmICh4Z2N2LmJhY2tncm91bmQgPT0gcy0+ZmFjZS0+YmFj a2dyb3VuZAorICAgICAgICAgICYmIHhnY3YuZm9yZWdyb3VuZCA9PSBzLT5mYWNlLT5mb3JlZ3Jv dW5kKQorICAgICAgICB7CisgICAgICAgICAgeGdjdi5iYWNrZ3JvdW5kID0gcy0+ZmFjZS0+Zm9y ZWdyb3VuZDsKKyAgICAgICAgICB4Z2N2LmZvcmVncm91bmQgPSBzLT5mYWNlLT5iYWNrZ3JvdW5k OworICAgICAgICB9CisgICAgICBJRl9ERUJVRyAoeF9jaGVja19mb250IChzLT5mLCBzLT5mb250 KSk7CisgICAgICB4Z2N2LmdyYXBoaWNzX2V4cG9zdXJlcyA9IEZhbHNlOworICAgICAgbWFzayA9 IEdDRm9yZWdyb3VuZCB8IEdDQmFja2dyb3VuZCB8IEdDR3JhcGhpY3NFeHBvc3VyZXM7CisgICAg ICBpZiAoRlJBTUVfRElTUExBWV9JTkZPIChzLT5mKS0+c2NyYXRjaF9jdXJzb3JfZ2MpCisgICAg ICAgIFhDaGFuZ2VHQyAoRlJBTUVfWF9ESVNQTEFZIChzLT5mKSwgRlJBTUVfRElTUExBWV9JTkZP IChzLT5mKS0+c2NyYXRjaF9jdXJzb3JfZ2MsCisgICAgICAgICAgICAgICAgICAgbWFzaywgJnhn Y3YpOworICAgICAgZWxzZQorICAgICAgICBGUkFNRV9ESVNQTEFZX0lORk8gKHMtPmYpLT5zY3Jh dGNoX2N1cnNvcl9nYworICAgICAgICAgID0gWENyZWF0ZUdDIChGUkFNRV9YX0RJU1BMQVkgKHMt PmYpLCBGUkFNRV9YX1dJTkRPVyAocy0+ZiksIG1hc2ssICZ4Z2N2KTsKKyAgICAgIHMtPmdjID0g RlJBTUVfRElTUExBWV9JTkZPIChzLT5mKS0+c2NyYXRjaF9jdXJzb3JfZ2M7CisgICAgfQorfQor CisvKiBTZXQgUy0+Z2Mgb2YgZ2x5cGggc3RyaW5nIFMgZm9yIGRyYXdpbmcgdGhhdCBnbHlwaCBz dHJpbmcuICBTZXQKKyAgIFMtPnN0aXBwbGVkX3AgdG8gYSBub24temVybyB2YWx1ZSBpZiB0aGUg ZmFjZSBvZiBTIGhhcyBhIHN0aXBwbGUgcGF0dGVybi4gKi8KK3N0YXRpYyB2b2lkCittY194X3Nl dF9nbHlwaF9zdHJpbmdfZ2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIGJvb2wgY3Vyc29yX2dj X3ApCit7CisgIHByZXBhcmVfZmFjZV9mb3JfZGlzcGxheSAocy0+Ziwgcy0+ZmFjZSk7CisgIGlm IChzLT5obCA9PSBEUkFXX05PUk1BTF9URVhUKQorICAgIHsKKyAgICAgIHMtPmdjID0gcy0+ZmFj ZS0+Z2M7CisgICAgICBzLT5zdGlwcGxlZF9wID0gcy0+ZmFjZS0+c3RpcHBsZSAhPSAwOworICAg IH0KKyAgZWxzZSBpZiAocy0+aGwgPT0gRFJBV19JTlZFUlNFX1ZJREVPKQorICAgIHsKKyAgICAg IHhfc2V0X21vZGVfbGluZV9mYWNlX2djIChzKTsKKyAgICAgIHMtPnN0aXBwbGVkX3AgPSBzLT5m YWNlLT5zdGlwcGxlICE9IDA7CisgICAgfQorICBlbHNlIGlmIChzLT5obCA9PSBEUkFXX0NVUlNP UikKKyAgICB7CisgICAgICBtY194X3NldF9jdXJzb3JfZ2MgKHMsIGN1cnNvcl9nY19wKTsKKyAg ICAgIHMtPnN0aXBwbGVkX3AgPSBmYWxzZTsKKyAgICB9CisgIGVsc2UgaWYgKHMtPmhsID09IERS QVdfTU9VU0VfRkFDRSkKKyAgICB7CisgICAgICB4X3NldF9tb3VzZV9mYWNlX2djIChzKTsKKyAg ICAgIHMtPnN0aXBwbGVkX3AgPSBzLT5mYWNlLT5zdGlwcGxlICE9IDA7CisgICAgfQorICBlbHNl IGlmIChzLT5obCA9PSBEUkFXX0lNQUdFX1JBSVNFRAorICAgICAgICAgICB8fCBzLT5obCA9PSBE UkFXX0lNQUdFX1NVTktFTikKKyAgICB7CisgICAgICBzLT5nYyA9IHMtPmZhY2UtPmdjOworICAg ICAgcy0+c3RpcHBsZWRfcCA9IHMtPmZhY2UtPnN0aXBwbGUgIT0gMDsKKyAgICB9CisgIGVsc2UK KyAgICBlbWFjc19hYm9ydCAoKTsKKyAgLyogR0MgbXVzdCBoYXZlIGJlZW4gc2V0LiAqLworICBl YXNzZXJ0IChzLT5nYyAhPSAwKTsKK30KKworLyogRHJhdyBhIGhvbGxvdyBib3ggY3Vyc29yIG9u IHdpbmRvdyBXIGluIGdseXBoIHJvdyBST1cuICovCitzdGF0aWMgdm9pZAorbWNfeF9kcmF3X2hv bGxvd19jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJp eCwgc3RydWN0IGdseXBoX3JvdyAqcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4 LCBpbnQgZngsIGludCB5LCBpbnQgZnksIGludCBocG9zLCBpbnQgdnBvcywgaW50IHdkLCBpbnQg aCkKK3sKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FIChXSU5ET1dfRlJBTUUgKHcpKTsKKyAg c3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvID0gRlJBTUVfRElTUExBWV9JTkZPIChmKTsK KyAgRGlzcGxheSAqZHB5ID0gRlJBTUVfWF9ESVNQTEFZIChmKTsKKyAgWEdDVmFsdWVzIHhnY3Y7 CisgIEdDIGdjOworICAvKiBHZXQgdGhlIGdseXBoIHRoZSBjdXJzb3IgaXMgb24uICBJZiB3ZSBj YW4ndCB0ZWxsIGJlY2F1c2UKKyAgICAgdGhlIGN1cnJlbnQgbWF0cml4IGlzIGludmFsaWQgb3Ig c3VjaCwgZ2l2ZSB1cC4gKi8KKyAgc3RydWN0IGdseXBoICpjdXJzb3JfZ2x5cGggPSBtY19nZXRf Y3Vyc29yX2dseXBoICh3LCBtYXRyaXgsIHJvdywgaHBvcywgdnBvcyk7CisgIGlmIChjdXJzb3Jf Z2x5cGggPT0gTlVMTCkKKyAgICByZXR1cm47CisgIC8qIFRoZSBmb3JlZ3JvdW5kIG9mIGN1cnNv cl9nYyBpcyB0eXBpY2FsbHkgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbAorICAgICBiYWNrZ3JvdW5k IGNvbG9yLCB3aGljaCBjYW4gY2F1c2UgdGhlIGN1cnNvciBib3ggdG8gYmUgaW52aXNpYmxlLiAq LworICB4Z2N2LmZvcmVncm91bmQgPSBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWw7Cisg IGlmIChkcHlpbmZvLT5zY3JhdGNoX2N1cnNvcl9nYykKKyAgICBYQ2hhbmdlR0MgKGRweSwgZHB5 aW5mby0+c2NyYXRjaF9jdXJzb3JfZ2MsIEdDRm9yZWdyb3VuZCwgJnhnY3YpOworICBlbHNlCisg ICAgZHB5aW5mby0+c2NyYXRjaF9jdXJzb3JfZ2MgPSBYQ3JlYXRlR0MgKGRweSwgRlJBTUVfWF9X SU5ET1cgKGYpLAorICAgICAgICAgICAgICBHQ0ZvcmVncm91bmQsICZ4Z2N2KTsKKyAgZ2MgPSBk cHlpbmZvLT5zY3JhdGNoX2N1cnNvcl9nYzsKKyAgLyogU2V0IGNsaXBwaW5nLCBkcmF3IHRoZSBy ZWN0YW5nbGUsIGFuZCByZXNldCBjbGlwcGluZyBhZ2Fpbi4gKi8KKyAgeF9jbGlwX3RvX3JvdyAo dywgcm93LCBURVhUX0FSRUEsIGdjKTsKKyAgLyogYHhfZHJhd19yZWN0YW5nbGUnIG5lZWRzIGEg V0QgYW5kIEggdGhhdCBhcmUgMSBwaXhlbCBsZXNzLiAqLworICBpbnQgcnggPSBmeDsKKyAgaW50 IHJ5ID0gZnk7CisgIGludCBydyA9IHdkIC0gMTsKKyAgaW50IHJoID0gaCAtIDE7CisgIHhfZHJh d19yZWN0YW5nbGUgKGYsIGdjLCByeCwgcnksIHJ3LCByaCk7CisvKgorICBmcHJpbnRmIChzdGRl cnIsICJtY194X2RyYXdfaG9sbG93X2N1cnNvcjogIHJ4ICglZCkgfCByeSAoJWQpIHwgcncgKCVk KSB8IHJoICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgIHJ4LCByeSwgcncsIHJoKTsKKyov CisgIHhfcmVzZXRfY2xpcF9yZWN0YW5nbGVzIChmLCBnYyk7Cit9CisKKy8qIERyYXcgYSBiYXIg Y3Vyc29yIG9uIHdpbmRvdyBXIGluIGdseXBoIHJvdyBST1cuICovCitzdGF0aWMgdm9pZAorbWNf eF9kcmF3X2Jhcl9jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRyaXgg Km1hdHJpeCwgc3RydWN0IGdseXBoX3JvdyAqcm93LAorICAgICAgICAgICAgICAgICAgICAgIGlu dCB4LCBpbnQgZngsIGludCB5LCBpbnQgZnksIGludCBocG9zLCBpbnQgdnBvcywgaW50IHdkLCBp bnQgaCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGVudW0gbWNfY3Vyc29yX3R5 cGUga2luZCwgYm9vbCBjdXJzb3JfZ2NfaW52aXNpYmxlX29rYXlfcCkKK3sKKyAgc3RydWN0IGZy YW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIC8qIElmIGN1cnNvciBpcyBvdXQgb2YgYm91 bmRzLCBkb24ndCBkcmF3IGdhcmJhZ2UuICBUaGlzIGNhbiBoYXBwZW4KKyAgICAgaW4gbWluaS1i dWZmZXIgd2luZG93cyB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGVjaG8gYXJlYSBnbHlwaHMKKyAg ICAgYW5kIG1pbmktYnVmZmVyLiAqLworICBzdHJ1Y3QgZ2x5cGggKmN1cnNvcl9nbHlwaCA9IG1j X2dldF9jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBocG9zLCB2cG9zKTsKKyAgaWYgKGN1 cnNvcl9nbHlwaCA9PSBOVUxMKQorICAgIHJldHVybjsKKyAgLyogRXhwZXJpbWVudGFsIGF2b2lk YW5jZSBvZiBjdXJzb3Igb24geHdpZGdldC4gKi8KKyAgaWYgKGN1cnNvcl9nbHlwaC0+dHlwZSA9 PSBYV0lER0VUX0dMWVBIKQorICAgIHJldHVybjsKKyAgLyogSWYgb24gYW4gaW1hZ2UsIGRyYXcg bGlrZSBhIG5vcm1hbCBjdXJzb3IuICBUaGF0J3MgdXN1YWxseSBiZXR0ZXIKKyAgICAgdmlzaWJs ZSB0aGFuIGRyYXdpbmcgYSBiYXIsIGVzcC4gaWYgdGhlIGltYWdlIGlzIGxhcmdlIHNvIHRoYXQK KyAgICAgdGhlIGJhciBtaWdodCBub3QgYmUgaW4gdGhlIHdpbmRvdy4gKi8KKyAgaWYgKGN1cnNv cl9nbHlwaC0+dHlwZSA9PSBJTUFHRV9HTFlQSCkKKyAgICB7CisgICAgICBzdHJ1Y3QgbWNfUkdC IGxzbCA9IHsucmVkID0gLTEuMCwgLmdyZWVuID0gLTEuMCwgLmJsdWUgPSAtMS4wfTsKKyAgICAg IGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IE5PX0ZMQVZPUjsKKyAgICAgIGVudW0gbWNf Y3Vyc29yX3R5cGUgY3Vyc29yX3R5cGUgPSBNQ19IT0xMT1dfQk9YOworICAgICAgYm9vbCBhY3Rp dmVfcCA9IGZhbHNlOworICAgICAgYm9vbCBjdXJzb3JfZ2NfcCA9IGZhbHNlOworICAgICAgbWNf ZHJhd19jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBEUkFXX0NVUlNPUiwgeCwgaHBvcywg dnBvcywgbHNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2ZsYXZvciwgY3Vy c29yX3R5cGUsIHdkLCBhY3RpdmVfcCwgY3Vyc29yX2djX3ApOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIERpc3BsYXkgKmRweSA9IEZSQU1FX1hfRElTUExBWSAoZik7CisgICAgICBXaW5k b3cgd2luZG93ID0gRlJBTUVfWF9XSU5ET1cgKGYpOworICAgICAgR0MgZ2MgPSBGUkFNRV9ESVNQ TEFZX0lORk8gKGYpLT5zY3JhdGNoX2N1cnNvcl9nYzsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbWFz ayA9IEdDRm9yZWdyb3VuZCB8IEdDQmFja2dyb3VuZCB8IEdDR3JhcGhpY3NFeHBvc3VyZXM7Cisg ICAgICBzdHJ1Y3QgZmFjZSAqZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgY3Vyc29yX2dseXBoLT5m YWNlX2lkKTsKKyAgICAgIFhHQ1ZhbHVlcyB4Z2N2OworICAgICAgLyogSWYgdGhlIGdseXBoJ3Mg YmFja2dyb3VuZCBlcXVhbHMgdGhlIGNvbG9yIHdlIG5vcm1hbGx5IGRyYXcKKyAgIHRoZSBiYXJz IGN1cnNvciBpbiwgdGhlIGJhciBjdXJzb3IgaW4gaXRzIG5vcm1hbCBjb2xvciBpcworICAgaW52 aXNpYmxlLiAgVXNlIHRoZSBnbHlwaCdzIGZvcmVncm91bmQgY29sb3IgaW5zdGVhZCBpbiB0aGlz CisgICBjYXNlLCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBnbHlwaCdzIGNvbG9ycyBhcmUg Y2hvc2VuIHNvCisgICB0aGF0IHRoZSBnbHlwaCBpcyBsZWdpYmxlLiAqLworICAgICAgaWYgKGZh Y2UtPmJhY2tncm91bmQgPT0gZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsCisgICAgICAg ICAgJiYgIWN1cnNvcl9nY19pbnZpc2libGVfb2theV9wKQorICAgICAgICB4Z2N2LmJhY2tncm91 bmQgPSB4Z2N2LmZvcmVncm91bmQgPSBmYWNlLT5mb3JlZ3JvdW5kOworICAgICAgZWxzZQorICAg ICAgICB4Z2N2LmJhY2tncm91bmQgPSB4Z2N2LmZvcmVncm91bmQgPSBmLT5vdXRwdXRfZGF0YS54 LT5jdXJzb3JfcGl4ZWw7CisgICAgICB4Z2N2LmdyYXBoaWNzX2V4cG9zdXJlcyA9IEZhbHNlOwor ICAgICAgaWYgKGdjKQorICAgICAgICBYQ2hhbmdlR0MgKGRweSwgZ2MsIG1hc2ssICZ4Z2N2KTsK KyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGdjID0gWENyZWF0ZUdDIChkcHksIHdp bmRvdywgbWFzaywgJnhnY3YpOworICAgICAgICAgIEZSQU1FX0RJU1BMQVlfSU5GTyAoZiktPnNj cmF0Y2hfY3Vyc29yX2djID0gZ2M7CisgICAgICAgIH0KKyAgICAgIHhfY2xpcF90b19yb3cgKHcs IHJvdywgVEVYVF9BUkVBLCBnYyk7CisgICAgICB4X2ZpbGxfcmVjdGFuZ2xlIChmLCBnYywgZngs IGZ5LCB3ZCwgaCk7CisgICAgICB4X3Jlc2V0X2NsaXBfcmVjdGFuZ2xlcyAoZiwgZ2MpOworICAg IH0KK30KKworLyogUklGOiBEcmF3IGN1cnNvciBvbiB3aW5kb3cgVy4gKi8KK3N0YXRpYyB2b2lk CittY194X2RyYXdfd2luZG93X2N1cnNvciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBo X21hdHJpeCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHgsIGludCBmeCwgaW50IHksIGludCBmeSwgaW50IGhwb3MsIGludCB2cG9z LCBpbnQgd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGgsIHN0cnVjdCBtY19SR0Ig bHNsLCBlbnVtIG1jX2N1cnNvcl90eXBlIGN1cnNvcl90eXBlLAorICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBjdXJzb3Jfd2lkdGgsIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciwgYm9v bCBvbl9wLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWN0aXZlX3ApCit7CisgIHN0 cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7CisgIC8qIFRoZSBmcmlu Z2UgYml0bWFwcyBhcmUgcHJlc2VudGx5IGhhbmRsZWQgZWxzZXdoZXJlLCBidXQgY291bGQgc29t ZWRheQorICBiZSBtYW5hZ2VkIChpbiBwYXJ0KSBhdCB0aGlzIHNlY3Rpb24gb2YgY29kZS4gKi8K KyAgaWYgKG9uX3ApCisgICAgeworICAgICAgaWYgKHJvdy0+ZXhhY3Rfd2luZG93X3dpZHRoX2xp bmVfcAorICAgICAgICAgICYmIChyb3ctPnJldmVyc2VkX3AKKyAgICAgICAgICAgICAgPyAoaHBv cyA8IDApCisgICAgICAgICAgICAgIDogKGhwb3MgPj0gcm93LT51c2VkW1RFWFRfQVJFQV0pKSkK KyAgICAgICAgeworICAgICAgICAgIHJvdy0+Y3Vyc29yX2luX2ZyaW5nZV9wID0gdHJ1ZTsKKyAg ICAgICAgICBtY19kcmF3X2ZyaW5nZV9iaXRtYXAgKHcsIHJvdywgcm93LT5yZXZlcnNlZF9wLCBj dXJzb3JfdHlwZSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICBDb2xvcm1h cCBjbWFwID0gRlJBTUVfWF9DT0xPUk1BUCAoZik7CisgIHVuc2lnbmVkIGxvbmcgb3JpZ2luYWxf Y3Vyc29yX3BpeGVsID0gZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsOworICAvKiB4dGVy bS5jL3h0ZXJtLmggdXNlIEdDOyB3aGVyZWFzLCB3MzJ0ZXJtLmMvdzMydGVybS5oIHVzZSBYR0NW YWx1ZXMgKiAqLworICBYR0NWYWx1ZXMgeGdjdjsKKyAgWEdldEdDVmFsdWVzIChGUkFNRV9YX0RJ U1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIEdDRm9yZWdyb3VuZCwgJnhn Y3YpOworICBYR2V0R0NWYWx1ZXMgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRh LngtPmN1cnNvcl9nYywgR0NCYWNrZ3JvdW5kLCAmeGdjdik7CisgIFhDb2xvciBjb2xvcjsKKyAg Y29sb3IucmVkID0gbWluICg2NTUzNSwgNjU1MzUgKiBsc2wucmVkKTsKKyAgY29sb3IuZ3JlZW4g PSBtaW4gKDY1NTM1LCA2NTUzNSAqIGxzbC5ncmVlbik7CisgIGNvbG9yLmJsdWUgPSBtaW4gKDY1 NTM1LCA2NTUzNSAqIGxzbC5ibHVlKTsKKyAgLyogYHhfYWxsb2NfbmVhcmVzdF9jb2xvcicgc2V0 cyB0aGUgYGNvbG9yLnBpeGVsYC4gKi8KKyAgeF9hbGxvY19uZWFyZXN0X2NvbG9yIChmLCBjbWFw LCAmY29sb3IpOworICBzd2l0Y2ggKGN1cnNvcl90eXBlKQorICB7CisgICAgY2FzZSBNQ19OT19G UklOR0VfQklUTUFQOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNQ19OT19DVVJTT1I6CisgICAg ICBicmVhazsKKyAgICBjYXNlIE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVA6CisgICAgICBicmVhazsK KyAgICBjYXNlIE1DX0xFRlRfRlJJTkdFX0JJVE1BUDoKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug TUNfRlJBTUVEX0JPWDoKKyAgICB7CisgICAgICBzdHJ1Y3QgZ2x5cGggKmN1cnNvcl9nbHlwaCA9 IG1jX2dldF9jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBocG9zLCB2cG9zKTsKKyAgICAg IGlmIChjdXJzb3JfZ2x5cGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgICAgc3RydWN0 IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKHctPmNvbnRlbnRzKTsKKyAgICAgIGJvb2wgcmVnaW9uX2Fj dGl2ZV9wID0gKCFOSUxQIChWdHJhbnNpZW50X21hcmtfbW9kZSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBtYXJrX2FjdGl2ZSkpKTsKKyAgICAgIHB0 cmRpZmZfdCByZWdpb25fYmVnID0gKHJlZ2lvbl9hY3RpdmVfcCkgPyBtY19yZWdpb25fbGltaXQg KDEpIDogLTE7CisgICAgICBwdHJkaWZmX3QgcmVnaW9uX2VuZCA9IChyZWdpb25fYWN0aXZlX3Ap ID8gbWNfcmVnaW9uX2xpbWl0ICgwKSA6IC0xOworICAgICAgaWYgKGN1cnNvcl9nbHlwaC0+dHlw ZSAhPSBJTUFHRV9HTFlQSCAmJiBsc2wucmVkID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNs LmJsdWUgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBg Zi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djJyBieSBib3Jyb3dpbmcgdGhlCisgICAgICAgICAg ZnVuY3Rpb25hbGl0eSBvZiBgeF9tYWtlX2djJyBpbiB4Zm5zLmMuICovCisgICAgICAgICAgaWYg KHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAmJiBhY3RpdmVfcAorICAgICAgICAgICAg ICAmJiBjdXJzb3JfZ2x5cGgtPmNoYXJwb3MgPT0gcmVnaW9uX2JlZykKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfcmVnaW9uX2JlZ19mYWNl X2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNv ci1hdC1yZWdpb24tcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgIHN0cnVjdCBm YWNlICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZWdfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9s bG93X2FjdGl2ZV9yZWdpb25fYmVnX2ZhY2VfaWQpOworICAgICAgICAgICAgICBlbnVtIGZhY2Vf aWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVy biAoIistcmVhbC1mYWtlLWN1cnNvci1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAg ICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9s bG93X2FjdGl2ZV9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1F X1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2FjdGl2 ZV9mYWNlLT5mb3JlZ3JvdW5kKTsKKyAgICAgICAgICAgICAgWFNldEJhY2tncm91bmQgKEZSQU1F X1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2FjdGl2 ZV9yZWdpb25fYmVnX2ZhY2UtPmZvcmVncm91bmQpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgZWxzZSBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAmJiBhY3Rp dmVfcAorICAgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX2dseXBoLT5jaGFycG9zID09IHJl Z2lvbl9lbmQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQg aG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywg ZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWF0LXJlZ2lvbi1wcmUtenYtZmFjZSIpLCB0 cnVlKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25f ZW5kX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfcmVnaW9uX2VuZF9mYWNl X2lkKTsKKyAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lk ID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1w cmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93 X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOwor ICAgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5v dXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19hY3RpdmVfZmFjZS0+Zm9yZWdyb3VuZCk7 CisgICAgICAgICAgICAgICAgWFNldEJhY2tncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYt Pm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2Ut PmJhY2tncm91bmQpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKHJl Z2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAmJiBhY3RpdmVfcAorICAgICAg ICAgICAgICAgICAgICAgICAmJiBjdXJzb3JfZ2x5cGgtPmNoYXJwb3MgPiByZWdpb25fYmVnCisg ICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9nbHlwaC0+Y2hhcnBvcyA8IHJlZ2lvbl9l bmQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhv bGxvd19hY3RpdmVfcmVnaW9uX2JldHdlZW5fZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3 LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItaW4tcmVnaW9uLXByZS16di1mYWNlIiks IHRydWUpOworICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfcmVn aW9uX2JldHdlZW5fZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9yZWdpb25f YmV0d2Vlbl9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3df YWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFs LWZha2UtY3Vyc29yLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgc3Ry dWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2Fj dGl2ZV9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9Y X0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19hY3RpdmVf ZmFjZS0+Zm9yZWdyb3VuZCk7CisgICAgICAgICAgICAgICAgICBYU2V0QmFja2dyb3VuZCAoRlJB TUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfYWN0 aXZlX3JlZ2lvbl9iZXR3ZWVuX2ZhY2UtPmZvcmVncm91bmQpOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBlbHNlIGlmIChhY3RpdmVfcCkKKyAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfZmFjZV9pZCA9 IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItcHJl LXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xs b3dfYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFjZV9pZCk7 CisgICAgICAgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYp LCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19hY3RpdmVfZmFjZS0+Zm9yZWdy b3VuZCk7CisgICAgICAgICAgICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kIChGUkFNRV9YX0RJU1BM QVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19hY3RpdmVfZmFjZS0+ YmFja2dyb3VuZCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNl IGlmICghYWN0aXZlX3ApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2luYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRf ZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWluYWN0aXZlLXByZS16di1m YWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3df aW5hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2luYWN0aXZlX2ZhY2VfaWQp OworICAgICAgICAgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkg KGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19pbmFjdGl2ZV9mYWNlLT5m b3JlZ3JvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICBYU2V0QmFja2dyb3VuZCAoRlJBTUVf WF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfaW5hY3Rp dmVfZmFjZS0+YmFja2dyb3VuZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICBi bG9ja19pbnB1dCAoKTsKKyAgICAgICAgICAvKiBGb3JjZSBgbWNfeF9zZXRfY3Vyc29yX2djJyB0 byB1c2UgYHMtPmYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYycuICovCisgICAgICAgICAgYm9v bCBjdXJzb3JfZ2NfcCA9IHRydWU7CisgICAgICAgICAgbWNfZHJhd19jdXJzb3JfZ2x5cGggKHcs IG1hdHJpeCwgcm93LCBEUkFXX0NVUlNPUiwgeCwgaHBvcywgdnBvcywgbHNsLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9mbGF2b3IsIGN1cnNvcl90eXBlLCB3ZCwgYWN0 aXZlX3AsIGN1cnNvcl9nY19wKTsKKyAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJBTUVfWF9E SVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCB4Z2N2LmZvcmVncm91bmQp OworICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRw dXRfZGF0YS54LT5jdXJzb3JfZ2MsIHhnY3YuYmFja2dyb3VuZCk7CisgICAgICAgICAgdW5ibG9j a19pbnB1dCAoKTsKKyAgICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1dF9k YXRhLngtPmN1cnNvcl9waXhlbCcuICovCisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vy c29yX3BpeGVsID0gY29sb3IucGl4ZWw7CisgICAgICAgICAgbWNfeF9kcmF3X2hvbGxvd19jdXJz b3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdkLCBoKTsKKyAg ICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJzb3Jf cGl4ZWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY3Vyc29yX2dseXBoLT50eXBlID09 IElNQUdFX0dMWVBIICYmIGxzbC5yZWQgPj0gMCAmJiBsc2wuZ3JlZW4gPj0gMCAmJiBsc2wuYmx1 ZSA+PSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBg Zi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsJy4gKi8KKyAgICAgICAgICAgIGYtPm91dHB1 dF9kYXRhLngtPmN1cnNvcl9waXhlbCA9IGNvbG9yLnBpeGVsOworICAgICAgICAgICAgbWNfeF9k cmF3X2hvbGxvd19jdXJzb3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZw b3MsIHdkLCBoKTsKKyAgICAgICAgICAgIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCA9 IG9yaWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1 dF9kYXRhLngtPmN1cnNvcl9nYycgYnkgYm9ycm93aW5nIHRoZQorICAgICAgICAgICAgICBmdW5j dGlvbmFsaXR5IG9mIGB4X21ha2VfZ2MnIGluIHhmbnMuYy4gKi8KKyAgICAgICAgICAgICAgaWYg KHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgJiYgYWN0aXZlX3AKKyAgICAgICAg ICAgICAgICAgICYmIGN1cnNvcl9nbHlwaC0+Y2hhcnBvcyA9PSByZWdpb25fYmVnKQorICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZl X3JlZ2lvbl9iZWdfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIr LXJlYWwtZmFrZS1jdXJzb3ItYXQtcmVnaW9uLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAg ICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfcmVnaW9uX2JlZ19mYWNlID0g RkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZWdfZmFjZV9pZCk7CisgICAg ICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lkID0gbG9va3Vw X25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1wcmUtenYtZmFj ZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZl X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFjZV9pZCk7CisgICAgICAg ICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0 X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfYWN0aXZlX2ZhY2UtPmZvcmVncm91bmQpOworICAg ICAgICAgICAgICAgICAgWFNldEJhY2tncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91 dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2FjdGl2ZV9yZWdpb25fYmVnX2ZhY2UtPmZv cmVncm91bmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChy ZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhY3RpdmVfcAorICAg ICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9nbHlwaC0+Y2hhcnBvcyA9PSByZWdpb25f ZW5kKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBlbnVtIGZhY2Vf aWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAo dywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWF0LXJlZ2lvbi1wcmUtenYtZmFjZSIp LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVf cmVnaW9uX2VuZF9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9l bmRfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0 aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZh a2UtY3Vyc29yLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0 aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJBTUVf WF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfYWN0aXZl X2ZhY2UtPmZvcmVncm91bmQpOworICAgICAgICAgICAgICAgICAgICBYU2V0QmFja2dyb3VuZCAo RlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3df YWN0aXZlX3JlZ2lvbl9lbmRfZmFjZS0+YmFja2dyb3VuZCk7CisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiBjdXJzb3JfZ2x5cGgtPmNoYXJwb3MgPiByZWdpb25fYmVnCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiBjdXJzb3JfZ2x5cGgtPmNoYXJwb3MgPCByZWdpb25fZW5kKQorICAgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19h Y3RpdmVfcmVnaW9uX2JldHdlZW5fZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBp bnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItaW4tcmVnaW9uLXByZS16di1mYWNlIiksIHRydWUp OworICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX3JlZ2lv bl9iZXR3ZWVuX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfcmVnaW9uX2Jl dHdlZW5fZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxv d19hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJl YWwtZmFrZS1jdXJzb3ItcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9s bG93X2FjdGl2ZV9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgICAgICBYU2V0Rm9yZWdyb3Vu ZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xs b3dfYWN0aXZlX2ZhY2UtPmZvcmVncm91bmQpOworICAgICAgICAgICAgICAgICAgICAgIFhTZXRC YWNrZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3Jf Z2MsIGhvbGxvd19hY3RpdmVfcmVnaW9uX2JldHdlZW5fZmFjZS0+Zm9yZWdyb3VuZCk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWN0aXZlX3Ap CisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBm YWNlX2lkIGhvbGxvd19hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBp bnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9mYWNlID0gRkFDRV9G Uk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICAgICAgICAg ICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngt PmN1cnNvcl9nYywgaG9sbG93X2FjdGl2ZV9mYWNlLT5mb3JlZ3JvdW5kKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRw dXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19hY3RpdmVfZmFjZS0+YmFja2dyb3VuZCk7Cisg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFh Y3RpdmVfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19pbmFjdGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVk X2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1pbmFjdGl2ZS1wcmUtenYt ZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhv bGxvd19pbmFjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfaW5hY3RpdmVfZmFj ZV9pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9Y X0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19pbmFjdGl2 ZV9mYWNlLT5mb3JlZ3JvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWFNldEJhY2tn cm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywg aG9sbG93X2luYWN0aXZlX2ZhY2UtPmJhY2tncm91bmQpOworICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICBibG9ja19pbnB1dCAoKTsKKyAgICAgICAgICAgICAgLyogRm9y Y2UgYG1jX3hfc2V0X2N1cnNvcl9nYycgdG8gdXNlIGBzLT5mLT5vdXRwdXRfZGF0YS54LT5jdXJz b3JfZ2MnLiAqLworICAgICAgICAgICAgICBib29sIGN1cnNvcl9nY19wID0gdHJ1ZTsKKyAgICAg ICAgICAgICAgbWNfZHJhd19jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBEUkFXX0NVUlNP UiwgeCwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxz bCwgZ2x5cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgd2QsIGFjdGl2ZV9wLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX2djX3ApOworICAgICAgICAgICAgICBYU2V0 Rm9yZWdyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29y X2djLCB4Z2N2LmZvcmVncm91bmQpOworICAgICAgICAgICAgICBYU2V0QmFja2dyb3VuZCAoRlJB TUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCB4Z2N2LmJhY2tn cm91bmQpOworICAgICAgICAgICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgICAgICAgICAv KiBEcmF3IHRoZSBmcmFtZSBhcm91bmQgdGhlIGJveC4gKi8KKyAgICAgICAgICAgICAgbWNfeF9k cmF3X2hvbGxvd19jdXJzb3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZw b3MsIHdkLCBoKTsKKyAgICAgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl IE1DX0hPTExPV19CT1g6CisgICAgeworICAgICAgaWYgKGxzbC5yZWQgPj0gMCAmJiBsc2wuZ3Jl ZW4gPj0gMCAmJiBsc2wuYmx1ZSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgLyogVGVtcG9y YXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwnLiAqLworICAgICAg ICAgIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCA9IGNvbG9yLnBpeGVsOworICAgICAg ICAgIG1jX3hfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHksIGZ5 LCBocG9zLCB2cG9zLCB3ZCwgaCk7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29y X3BpeGVsID0gb3JpZ2luYWxfY3Vyc29yX3BpeGVsOworICAgICAgICB9CisgICAgICAgIGVsc2UK KyAgICAgICAgICBtY194X2RyYXdfaG9sbG93X2N1cnNvciAodywgbWF0cml4LCByb3csIHgsIGZ4 LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh c2UgTUNfRklMTEVEX0JPWDoKKyAgICB7CisgICAgICBpZiAobHNsLnJlZCA+PSAwICYmIGxzbC5n cmVlbiA+PSAwICYmIGxzbC5ibHVlID49IDApCisgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFj ayBgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djJyBieSBib3Jyb3dpbmcgdGhlCisgICAgICAg IGZ1bmN0aW9uYWxpdHkgb2YgYHhfbWFrZV9nYycgaW4geGZucy5jLiAqLworICAgICAgICB7Cisg ICAgICAgICAgYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1F X1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgRlJBTUVfQkFDS0dS T1VORF9QSVhFTCAoZikpOworICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kIChGUkFNRV9YX0RJU1BM QVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGNvbG9yLnBpeGVsKTsKKyAgICAg ICAgICAvKiBGb3JjZSBgbWNfeF9zZXRfY3Vyc29yX2djJyB0byB1c2UgYHMtPmYtPm91dHB1dF9k YXRhLngtPmN1cnNvcl9nYycuICovCisgICAgICAgICAgYm9vbCBjdXJzb3JfZ2NfcCA9IHRydWU7 CisgICAgICAgICAgbWNfZHJhd19jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBEUkFXX0NV UlNPUiwgeCwgaHBvcywgdnBvcywgbHNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnbHlwaF9mbGF2b3IsIGN1cnNvcl90eXBlLCB3ZCwgYWN0aXZlX3AsIGN1cnNvcl9nY19wKTsK KyAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0 X2RhdGEueC0+Y3Vyc29yX2djLCB4Z2N2LmZvcmVncm91bmQpOworICAgICAgICAgIFhTZXRCYWNr Z3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2Ms IHhnY3YuYmFja2dyb3VuZCk7CisgICAgICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAgICAg fQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgYm9vbCBjdXJzb3JfZ2Nf cCA9IGZhbHNlOworICAgICAgICAgICAgbWNfZHJhd19jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwg cm93LCBEUkFXX0NVUlNPUiwgeCwgaHBvcywgdnBvcywgbHNsLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdkLCBhY3RpdmVfcCwg Y3Vyc29yX2djX3ApOworICAgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl IE1DX0JBUjoKKyAgICB7CisgICAgICBpZiAobHNsLnJlZCA+PSAwICYmIGxzbC5ncmVlbiA+PSAw ICYmIGxzbC5ibHVlID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUZW1wb3JhcmlseSBo aWphY2sgYGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCcuICovCisgICAgICAgICAgZi0+ b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsID0gY29sb3IucGl4ZWw7CisgICAgICAgICAgYm9v bCBjdXJzb3JfZ2NfaW52aXNpYmxlX29rYXlfcCA9IHRydWU7CisgICAgICAgICAgbWNfeF9kcmF3 X2Jhcl9jdXJzb3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdk LCBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGgsIE1DX0JB UiwgY3Vyc29yX2djX2ludmlzaWJsZV9va2F5X3ApOworICAgICAgICAgIGYtPm91dHB1dF9kYXRh LngtPmN1cnNvcl9waXhlbCA9IG9yaWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAgICAgfQorICAg ICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgYm9vbCBjdXJzb3JfZ2NfaW52aXNp YmxlX29rYXlfcCA9IGZhbHNlOworICAgICAgICAgICAgbWNfeF9kcmF3X2Jhcl9jdXJzb3IgKHcs IG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGgsIGN1cnNvcl93aWR0aCwgTUNfQkFSLCBjdXJzb3JfZ2Nf aW52aXNpYmxlX29rYXlfcCk7CisgICAgICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAg IGNhc2UgTUNfSEJBUjoKKyAgICB7CisgICAgICBpZiAobHNsLnJlZCA+PSAwICYmIGxzbC5ncmVl biA+PSAwICYmIGxzbC5ibHVlID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUZW1wb3Jh cmlseSBoaWphY2sgYGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCcuICovCisgICAgICAg ICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsID0gY29sb3IucGl4ZWw7CisgICAgICAg ICAgYm9vbCBjdXJzb3JfZ2NfaW52aXNpYmxlX29rYXlfcCA9IHRydWU7CisgICAgICAgICAgbWNf eF9kcmF3X2Jhcl9jdXJzb3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZw b3MsIHdkLCBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGgs IE1DX0hCQVIsIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wKTsKKyAgICAgICAgICBmLT5vdXRw dXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJzb3JfcGl4ZWw7CisgICAgICAg IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgY3Vyc29yX2dj X2ludmlzaWJsZV9va2F5X3AgPSBmYWxzZTsKKyAgICAgICAgICAgIG1jX3hfZHJhd19iYXJfY3Vy c29yICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCB3ZCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLCBjdXJzb3Jfd2lkdGgsIE1DX0hCQVIsIGN1 cnNvcl9nY19pbnZpc2libGVfb2theV9wKTsKKyAgICAgICAgICB9CisgICAgICBicmVhazsKKyAg ICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGVtYWNzX2Fib3J0ICgpOworICB9CisgICAgICAgIH0K KyNpZmRlZiBIQVZFX1hfSTE4TgorICBpZiAodyA9PSBYV0lORE9XIChmLT5zZWxlY3RlZF93aW5k b3cpKQorICAgIGlmIChGUkFNRV9YSUMgKGYpICYmIChGUkFNRV9YSUNfU1RZTEUgKGYpICYgWElN UHJlZWRpdFBvc2l0aW9uKSkKKyAgICAgIHhpY19zZXRfcHJlZWRpdGFyZWEgKHcsIHgsIHkpOwor I2VuZGlmCisgICAgfQorICBYRmx1c2ggKEZSQU1FX1hfRElTUExBWSAoZikpOworfQorCisvKiBE cmF3IHN0cmV0Y2ggZ2x5cGggc3RyaW5nIFMuICovCitzdGF0aWMgdm9pZAorbWNfeF9kcmF3X3N0 cmV0Y2hfZ2x5cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzKQoreworICBlYXNzZXJ0 IChzLT5maXJzdF9nbHlwaC0+dHlwZSA9PSBTVFJFVENIX0dMWVBIKTsKKyAgaWYgKHMtPmhsID09 IERSQVdfQ1VSU09SCisgICAgICAmJiAheF9zdHJldGNoX2N1cnNvcl9wKQorICAgIHsKKyAgICAg IC8qIElmIGB4LXN0cmV0Y2gtY3Vyc29yJyBpcyBuaWwsIGRvbid0IGRyYXcgYSBibG9jayBjdXJz b3IgYXMgd2lkZSBhcyB0aGUKKyAgICAgIHN0cmV0Y2ggZ2x5cGguICovCisgICAgICBpbnQgd2lk dGgsIGJhY2tncm91bmRfd2lkdGggPSBzLT5iYWNrZ3JvdW5kX3dpZHRoOworICAgICAgaW50IHgg PSBzLT54OworICAgICAgaWYgKCFzLT5yb3ctPnJldmVyc2VkX3ApCisgICAgICAgIHsKKyAgICAg ICAgICBpbnQgbGVmdF94ID0gd2luZG93X2JveF9sZWZ0X29mZnNldCAocy0+dywgVEVYVF9BUkVB KTsKKyAgICAgICAgICBpZiAoeCA8IGxlZnRfeCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgYmFja2dyb3VuZF93aWR0aCAtPSBsZWZ0X3ggLSB4OworICAgICAgICAgICAgICB4ID0gbGVm dF94OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7 CisgICAgICAgICAgICAvKiBJbiBSMkwgcm93cywgZHJhdyB0aGUgY3Vyc29yIG9uIHRoZSByaWdo dCBlZGdlIG9mIHRoZQorICAgICAgICAgICAgICAgc3RyZXRjaCBnbHlwaC4gKi8KKyAgICAgICAg ICAgIGludCByaWdodF94ID0gd2luZG93X2JveF9yaWdodCAocy0+dywgVEVYVF9BUkVBKTsKKyAg ICAgICAgICAgIGlmICh4ICsgYmFja2dyb3VuZF93aWR0aCA+IHJpZ2h0X3gpCisgICAgICAgICAg ICAgIGJhY2tncm91bmRfd2lkdGggLT0geCAtIHJpZ2h0X3g7CisgICAgICAgICAgICB4ICs9IGJh Y2tncm91bmRfd2lkdGg7CisgICAgICAgICAgfQorICAgICAgd2lkdGggPSBtaW4gKEZSQU1FX0NP TFVNTl9XSURUSCAocy0+ZiksIGJhY2tncm91bmRfd2lkdGgpOworICAgICAgaWYgKHMtPnJvdy0+ cmV2ZXJzZWRfcCkKKyAgICAgICAgeCAtPSB3aWR0aDsKKyAgICAgIC8qIERyYXcgY3Vyc29yLiAq LworICAgICAgeF9kcmF3X2dseXBoX3N0cmluZ19iZ19yZWN0IChzLCB4LCBzLT55LCB3aWR0aCwg cy0+aGVpZ2h0KTsKKyAgICAgIC8qIENsZWFyIHJlc3QgdXNpbmcgdGhlIEdDIG9mIHRoZSBvcmln aW5hbCBub24tY3Vyc29yIGZhY2UuICovCisgICAgICBpZiAod2lkdGggPCBiYWNrZ3JvdW5kX3dp ZHRoKQorICAgICAgICB7CisgICAgICAgICAgaW50IHkgPSBzLT55OworICAgICAgICAgIGludCB3 ID0gYmFja2dyb3VuZF93aWR0aCAtIHdpZHRoLCBoID0gcy0+aGVpZ2h0OworICAgICAgICAgIFhS ZWN0YW5nbGUgcjsKKyAgICAgICAgICBHQyBnYzsKKyAgICAgICAgICBpZiAoIXMtPnJvdy0+cmV2 ZXJzZWRfcCkKKyAgICAgICAgICAgIHggKz0gd2lkdGg7CisgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgeCA9IHMtPng7CisgICAgICAgICAgaWYgKHMtPnJvdy0+bW91c2VfZmFjZV9wCisgICAg ICAgICAgICAgICYmIGN1cnNvcl9pbl9tb3VzZV9mYWNlX3AgKHMtPncpKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICB4X3NldF9tb3VzZV9mYWNlX2djIChzKTsKKyAgICAgICAgICAgICAg Z2MgPSBzLT5nYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBn YyA9IHMtPmZhY2UtPmdjOworICAgICAgICAgIGdldF9nbHlwaF9zdHJpbmdfY2xpcF9yZWN0IChz LCAmcik7CisgICAgICAgICAgeF9zZXRfY2xpcF9yZWN0YW5nbGVzIChzLT5mLCBnYywgJnIsIDEp OworICAgICAgICAgIGlmIChzLT5mYWNlLT5zdGlwcGxlKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAvKiBGaWxsIGJhY2tncm91bmQgd2l0aCBhIHN0aXBwbGUgcGF0dGVybi4gKi8KKyAg ICAgICAgICAgICAgWFNldEZpbGxTdHlsZSAoRlJBTUVfWF9ESVNQTEFZIChzLT5mKSwgZ2MsIEZp bGxPcGFxdWVTdGlwcGxlZCk7CisgICAgICAgICAgICAgIHhfZmlsbF9yZWN0YW5nbGUgKHMtPmYs IGdjLCB4LCB5LCB3LCBoKTsKKyAgICAgICAgICAgICAgWFNldEZpbGxTdHlsZSAoRlJBTUVfWF9E SVNQTEFZIChzLT5mKSwgZ2MsIEZpbGxTb2xpZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBYR0NWYWx1ZXMgeGdjdjsKKyAgICAg ICAgICAgICAgWEdldEdDVmFsdWVzIChGUkFNRV9YX0RJU1BMQVkgKHMtPmYpLCBnYywgR0NGb3Jl Z3JvdW5kIHwgR0NCYWNrZ3JvdW5kLCAmeGdjdik7CisgICAgICAgICAgICAgIFhTZXRGb3JlZ3Jv dW5kIChGUkFNRV9YX0RJU1BMQVkgKHMtPmYpLCBnYywgeGdjdi5iYWNrZ3JvdW5kKTsKKyAgICAg ICAgICAgICAgeF9maWxsX3JlY3RhbmdsZSAocy0+ZiwgZ2MsIHgsIHksIHcsIGgpOworICAgICAg ICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChzLT5mKSwgZ2MsIHhnY3Yu Zm9yZWdyb3VuZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgeF9yZXNldF9jbGlwX3JlY3Rh bmdsZXMgKHMtPmYsIGdjKTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoIXMtPmJhY2tn cm91bmRfZmlsbGVkX3ApCisgICAgeworICAgICAgaW50IGJhY2tncm91bmRfd2lkdGggPSBzLT5i YWNrZ3JvdW5kX3dpZHRoOworICAgICAgaW50IHggPSBzLT54LCBsZWZ0X3ggPSB3aW5kb3dfYm94 X2xlZnRfb2Zmc2V0IChzLT53LCBURVhUX0FSRUEpOworICAgICAgLyogRG9uJ3QgZHJhdyBpbnRv IGxlZnQgbWFyZ2luLCBmcmluZ2Ugb3Igc2Nyb2xsYmFyIGFyZWEKKyAgICAgICAgIGV4Y2VwdCBm b3IgaGVhZGVyIGxpbmUgYW5kIG1vZGUgbGluZS4gKi8KKyAgICAgIGlmICh4IDwgbGVmdF94ICYm ICFzLT5yb3ctPm1vZGVfbGluZV9wKQorICAgICAgICB7CisgICAgICAgICAgYmFja2dyb3VuZF93 aWR0aCAtPSBsZWZ0X3ggLSB4OworICAgICAgICAgIHggPSBsZWZ0X3g7CisgICAgICAgIH0KKyAg ICAgIGlmIChiYWNrZ3JvdW5kX3dpZHRoID4gMCkKKyAgICAgICAgeF9kcmF3X2dseXBoX3N0cmlu Z19iZ19yZWN0IChzLCB4LCBzLT55LCBiYWNrZ3JvdW5kX3dpZHRoLCBzLT5oZWlnaHQpOworICAg IH0KKyAgcy0+YmFja2dyb3VuZF9maWxsZWRfcCA9IHRydWU7Cit9CisKKy8qIERyYXcgZ2x5cGgg c3RyaW5nIFMuICBUaGUgYG1jX21hdHJpeGAgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Ugd2hl biBlcmFzaW5nCisgICBmYWtlIGN1cnNvcnMgZHVyaW5nIGBtY191cGRhdGVfd2luZG93X2VyYXNl JyBhbmQgcmVkcmF3aW5nIGZha2UgY3Vyc29ycyBvbgorICAgbGVmdC9yaWdodCBvdmVyd3JpdHRl biBnbHlwaHMuICovCitzdGF0aWMgdm9pZAorbWNfeF9kcmF3X2dseXBoX3N0cmluZyAoc3RydWN0 IGdseXBoX3N0cmluZyAqcywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LAorICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGdseXBoX3JvdyAqcm93LCBzdHJ1Y3QgbWNfbWF0cml4IG1j X21hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtY19SR0IgbHNsLCBlbnVt IG1jX2ZsYXZvciBnbHlwaF9mbGF2b3IsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1j X2N1cnNvcl90eXBlIGN1cnNvcl90eXBlLCBpbnQgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCBhY3RpdmVfcCwgYm9vbCBjdXJzb3JfZ2NfcCkKK3sKKyAgYm9vbCBy ZWxpZWZfZHJhd25fcCA9IGZhbHNlOworICAvKiBJZiBTIGRyYXdzIGludG8gdGhlIGJhY2tncm91 bmQgb2YgaXRzIHN1Y2Nlc3NvcnMsIGRyYXcgdGhlCisgICAgIGJhY2tncm91bmQgb2YgdGhlIHN1 Y2Nlc3NvcnMgZmlyc3Qgc28gdGhhdCBTIGNhbiBkcmF3IGludG8gaXQuCisgICAgIFRoaXMgbWFr ZXMgUy0+bmV4dCB1c2UgWERyYXdTdHJpbmcgaW5zdGVhZCBvZiBYRHJhd0ltYWdlU3RyaW5nLiAq LworICBpZiAocy0+bmV4dCAmJiBzLT5yaWdodF9vdmVyaGFuZyAmJiAhcy0+Zm9yX292ZXJsYXBz KQorICAgIHsKKyAgICAgIGludCB3aWR0aDsKKyAgICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKm5l eHQ7CisgICAgICBmb3IgKHdpZHRoID0gMCwgbmV4dCA9IHMtPm5leHQ7CisgICAgICAgICAgIG5l eHQgJiYgd2lkdGggPCBzLT5yaWdodF9vdmVyaGFuZzsKKyAgICAgICAgICAgd2lkdGggKz0gbmV4 dC0+d2lkdGgsIG5leHQgPSBuZXh0LT5uZXh0KQorICAgICAgICBpZiAobmV4dC0+Zmlyc3RfZ2x5 cGgtPnR5cGUgIT0gSU1BR0VfR0xZUEgpCisgICAgICAgICAgeworICAgICAgICAgICAgbWNfeF9z ZXRfZ2x5cGhfc3RyaW5nX2djIChuZXh0LCBjdXJzb3JfZ2NfcCk7CisgICAgICAgICAgICB4X3Nl dF9nbHlwaF9zdHJpbmdfY2xpcHBpbmcgKG5leHQpOworICAgICAgICAgICAgaWYgKG5leHQtPmZp cnN0X2dseXBoLT50eXBlID09IFNUUkVUQ0hfR0xZUEgpCisgICAgICAgICAgICAgIG1jX3hfZHJh d19zdHJldGNoX2dseXBoX3N0cmluZyAobmV4dCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgIHhfZHJhd19nbHlwaF9zdHJpbmdfYmFja2dyb3VuZCAobmV4dCwgdHJ1ZSk7CisgICAg ICAgICAgICBuZXh0LT5udW1fY2xpcHMgPSAwOworICAgICAgICAgIH0KKyAgICB9CisgIC8qIFNl dCB1cCBTLT5nYywgc2V0IGNsaXBwaW5nIGFuZCBkcmF3IFMuICovCisgIG1jX3hfc2V0X2dseXBo X3N0cmluZ19nYyAocywgY3Vyc29yX2djX3ApOworICAvKiBEcmF3IHJlbGllZiAoaWYgYW55KSBp biBhZHZhbmNlIGZvciBjaGFyL2NvbXBvc2l0aW9uIHNvIHRoYXQgdGhlCisgICAgIGdseXBoIHN0 cmluZyBjYW4gYmUgZHJhd24gb3ZlciBpdC4gKi8KKyAgaWYgKCFzLT5mb3Jfb3ZlcmxhcHMKKyAg ICAgICYmIHMtPmZhY2UtPmJveCAhPSBGQUNFX05PX0JPWAorICAgICAgJiYgKHMtPmZpcnN0X2ds eXBoLT50eXBlID09IENIQVJfR0xZUEgKKyAgICAgICAgICB8fCBzLT5maXJzdF9nbHlwaC0+dHlw ZSA9PSBDT01QT1NJVEVfR0xZUEgpKQorICAgIHsKKyAgICAgIHhfc2V0X2dseXBoX3N0cmluZ19j bGlwcGluZyAocyk7CisgICAgICB4X2RyYXdfZ2x5cGhfc3RyaW5nX2JhY2tncm91bmQgKHMsIHRy dWUpOworICAgICAgeF9kcmF3X2dseXBoX3N0cmluZ19ib3ggKHMpOworICAgICAgeF9zZXRfZ2x5 cGhfc3RyaW5nX2NsaXBwaW5nIChzKTsKKyAgICAgIHJlbGllZl9kcmF3bl9wID0gdHJ1ZTsKKyAg ICB9CisgICAgZWxzZSBpZiAoIXMtPmNsaXBfaGVhZCAvKiBkcmF3X2dseXBocyBkaWRuJ3Qgc3Bl Y2lmeSBhIGNsaXAgbWFzay4gKi8KKyAgICAgICAgICAgICAmJiAhcy0+Y2xpcF90YWlsCisgICAg ICAgICAgICAgJiYgKChzLT5wcmV2ICYmIHMtPnByZXYtPmhsICE9IHMtPmhsICYmIHMtPmxlZnRf b3ZlcmhhbmcpCisgICAgICAgICAgICAgICAgIHx8IChzLT5uZXh0ICYmIHMtPm5leHQtPmhsICE9 IHMtPmhsICYmIHMtPnJpZ2h0X292ZXJoYW5nKSkpCisgICAgICAvKiBXZSBtdXN0IGNsaXAganVz dCB0aGlzIGdseXBoLiAgbGVmdF9vdmVyaGFuZyBwYXJ0IGhhcyBhbHJlYWR5CisgICAgICAgICBk cmF3biB3aGVuIHMtPnByZXYgd2FzIGRyYXduLCBhbmQgcmlnaHRfb3ZlcmhhbmcgcGFydCB3aWxs IGJlCisgICAgICAgICBkcmF3biBsYXRlciB3aGVuIHMtPm5leHQgaXMgZHJhd24uICovCisgICAg ICB4X3NldF9nbHlwaF9zdHJpbmdfY2xpcHBpbmdfZXhhY3RseSAocywgcyk7CisgICAgICBlbHNl CisgICAgICAgIHhfc2V0X2dseXBoX3N0cmluZ19jbGlwcGluZyAocyk7CisgIHN3aXRjaCAocy0+ Zmlyc3RfZ2x5cGgtPnR5cGUpCisgICAgeworICAgIGNhc2UgSU1BR0VfR0xZUEg6CisgICAgICB4 X2RyYXdfaW1hZ2VfZ2x5cGhfc3RyaW5nIChzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgWFdJ REdFVF9HTFlQSDoKKyAgICAgIHhfZHJhd194d2lkZ2V0X2dseXBoX3N0cmluZyAocyk7CisgICAg ICBicmVhazsKKyAgICBjYXNlIFNUUkVUQ0hfR0xZUEg6CisgICAgICBtY194X2RyYXdfc3RyZXRj aF9nbHlwaF9zdHJpbmcgKHMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDSEFSX0dMWVBIOgor ICAgICAgaWYgKHMtPmZvcl9vdmVybGFwcykKKyAgICAgICAgcy0+YmFja2dyb3VuZF9maWxsZWRf cCA9IHRydWU7CisgICAgICBlbHNlCisgICAgICAgIHhfZHJhd19nbHlwaF9zdHJpbmdfYmFja2dy b3VuZCAocywgZmFsc2UpOworICAgICAgeF9kcmF3X2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChz KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ09NUE9TSVRFX0dMWVBIOgorICAgICAgaWYgKHMt PmZvcl9vdmVybGFwcyB8fCAocy0+Y21wX2Zyb20gPiAwCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiAhIHMtPmZpcnN0X2dseXBoLT51LmNtcC5hdXRvbWF0aWMpKQorICAgICAgICBz LT5iYWNrZ3JvdW5kX2ZpbGxlZF9wID0gdHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeF9kcmF3 X2dseXBoX3N0cmluZ19iYWNrZ3JvdW5kIChzLCB0cnVlKTsKKyAgICAgIHhfZHJhd19jb21wb3Np dGVfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBH TFlQSExFU1NfR0xZUEg6CisgICAgICBpZiAocy0+Zm9yX292ZXJsYXBzKQorICAgICAgICBzLT5i YWNrZ3JvdW5kX2ZpbGxlZF9wID0gdHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeF9kcmF3X2ds eXBoX3N0cmluZ19iYWNrZ3JvdW5kIChzLCB0cnVlKTsKKyAgICAgIHhfZHJhd19nbHlwaGxlc3Nf Z2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHMpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK KyAgICAgIGVtYWNzX2Fib3J0ICgpOworICAgIH0KKyAgaWYgKCFzLT5mb3Jfb3ZlcmxhcHMpCisg ICAgeworICAgICAgLyogRHJhdyB1bmRlcmxpbmUuICovCisgICAgICBpZiAocy0+ZmFjZS0+dW5k ZXJsaW5lX3ApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAocy0+ZmFjZS0+dW5kZXJsaW5lX3R5 cGUgPT0gRkFDRV9VTkRFUl9XQVZFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAo cy0+ZmFjZS0+dW5kZXJsaW5lX2RlZmF1bHRlZF9wKQorICAgICAgICAgICAgICAgIHhfZHJhd191 bmRlcndhdmUgKHMpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgWEdDVmFsdWVzIHhnY3Y7CisgICAgICAgICAgICAgICAgICBYR2V0R0NW YWx1ZXMgKEZSQU1FX1hfRElTUExBWSAocy0+ZiksIHMtPmdjLCBHQ0ZvcmVncm91bmQsICZ4Z2N2 KTsKKyAgICAgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKHMt PmYpLCBzLT5nYywgcy0+ZmFjZS0+dW5kZXJsaW5lX2NvbG9yKTsKKyAgICAgICAgICAgICAgICAg IHhfZHJhd191bmRlcndhdmUgKHMpOworICAgICAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQg KEZSQU1FX1hfRElTUExBWSAocy0+ZiksIHMtPmdjLCB4Z2N2LmZvcmVncm91bmQpOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChzLT5mYWNlLT51 bmRlcmxpbmVfdHlwZSA9PSBGQUNFX1VOREVSX0xJTkUpCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgdGhpY2tuZXNzLCBwb3NpdGlvbjsKKyAgICAgICAgICAgICAg aW50IHk7CisgICAgICAgICAgICAgIGlmIChzLT5wcmV2ICYmIHMtPnByZXYtPmZhY2UtPnVuZGVy bGluZV9wCisgICAgICAgICAgICAgICAgICAmJiBzLT5wcmV2LT5mYWNlLT51bmRlcmxpbmVfdHlw ZSA9PSBGQUNFX1VOREVSX0xJTkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgLyogV2UgdXNlIHRoZSBzYW1lIHVuZGVybGluZSBzdHlsZSBhcyB0aGUgcHJldmlvdXMgb25l LiAqLworICAgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gcy0+cHJldi0+dW5kZXJsaW5lX3Ro aWNrbmVzczsKKyAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcy0+cHJldi0+dW5kZXJsaW5l X3Bvc2l0aW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgdW5kZXJsaW5lIHRoaWNr bmVzcy4gIERlZmF1bHQgaXMgMSBwaXhlbC4gKi8KKyAgICAgICAgICAgICAgICAgIGlmIChzLT5m b250ICYmIHMtPmZvbnQtPnVuZGVybGluZV90aGlja25lc3MgPiAwKQorICAgICAgICAgICAgICAg ICAgICB0aGlja25lc3MgPSBzLT5mb250LT51bmRlcmxpbmVfdGhpY2tuZXNzOworICAgICAgICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0aGlja25lc3MgPSAxOworICAgICAg ICAgICAgICAgICAgaWYgKHhfdW5kZXJsaW5lX2F0X2Rlc2NlbnRfbGluZSkKKyAgICAgICAgICAg ICAgICAgICAgcG9zaXRpb24gPSAocy0+aGVpZ2h0IC0gdGhpY2tuZXNzKSAtIChzLT55YmFzZSAt IHMtPnkpOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHRoZSB1bmRlcmxpbmUgcG9zaXRpb24uICBUaGlz IGlzIHRoZSByZWNvbW1lbmRlZAorICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsIG9m ZnNldCBpbiBwaXhlbHMgZnJvbSB0aGUgYmFzZWxpbmUgdG8gdGhlIHRvcCBvZgorICAgICAgICAg ICAgICAgICAgICAgICAgIHRoZSB1bmRlcmxpbmUuICBUaGlzIGlzIGEgc2lnbmVkIHZhbHVlIGFj Y29yZGluZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjcywgYW5kIGl0cyBk ZWZhdWx0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgUk9VTkQgKChtYXhpbXVtIGRlc2Nl bnQpIC8gMiksIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICBST1VORCh4KSA9IGZsb29y ICh4ICsgMC41KSAgKi8KKyAgICAgICAgICAgICAgICAgICAgICBpZiAoeF91c2VfdW5kZXJsaW5l X3Bvc2l0aW9uX3Byb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcy0+Zm9u dCAmJiBzLT5mb250LT51bmRlcmxpbmVfcG9zaXRpb24gPj0gMCkKKyAgICAgICAgICAgICAgICAg ICAgICAgIHBvc2l0aW9uID0gcy0+Zm9udC0+dW5kZXJsaW5lX3Bvc2l0aW9uOworICAgICAgICAg ICAgICAgICAgICAgIGVsc2UgaWYgKHMtPmZvbnQpCisgICAgICAgICAgICAgICAgICAgICAgICBw b3NpdGlvbiA9IChzLT5mb250LT5kZXNjZW50ICsgMSkgLyAyOworICAgICAgICAgICAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdW5kZXJsaW5lX21p bmltdW1fb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBw b3NpdGlvbiA9IG1heCAocG9zaXRpb24sIHVuZGVybGluZV9taW5pbXVtX29mZnNldCk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAvKiBDaGVjayB0aGUgc2FuaXR5IG9mIHRoaWNr bmVzcyBhbmQgcG9zaXRpb24uICBXZSBzaG91bGQKKyAgICAgICAgICAgICAgICAgYXZvaWQgZHJh d2luZyB1bmRlcmxpbmUgb3V0IG9mIHRoZSBjdXJyZW50IGxpbmUgYXJlYS4gKi8KKyAgICAgICAg ICAgICAgaWYgKHMtPnkgKyBzLT5oZWlnaHQgPD0gcy0+eWJhc2UgKyBwb3NpdGlvbikKKyAgICAg ICAgICAgICAgICBwb3NpdGlvbiA9IChzLT5oZWlnaHQgLSAxKSAtIChzLT55YmFzZSAtIHMtPnkp OworICAgICAgICAgICAgICBpZiAocy0+eSArIHMtPmhlaWdodCA8IHMtPnliYXNlICsgcG9zaXRp b24gKyB0aGlja25lc3MpCisgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gKHMtPnkgKyBzLT5o ZWlnaHQpIC0gKHMtPnliYXNlICsgcG9zaXRpb24pOworICAgICAgICAgICAgICBzLT51bmRlcmxp bmVfdGhpY2tuZXNzID0gdGhpY2tuZXNzOworICAgICAgICAgICAgICBzLT51bmRlcmxpbmVfcG9z aXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgeSA9IHMtPnliYXNlICsgcG9zaXRpb247 CisgICAgICAgICAgICAgIGlmIChzLT5mYWNlLT51bmRlcmxpbmVfZGVmYXVsdGVkX3ApCisgICAg ICAgICAgICAgICAgeF9maWxsX3JlY3RhbmdsZSAocy0+Ziwgcy0+Z2MsIHMtPngsIHksIHMtPndp ZHRoLCB0aGlja25lc3MpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgWEdDVmFsdWVzIHhnY3Y7CisgICAgICAgICAgICAgICAgICBYR2V0 R0NWYWx1ZXMgKEZSQU1FX1hfRElTUExBWSAocy0+ZiksIHMtPmdjLCBHQ0ZvcmVncm91bmQsICZ4 Z2N2KTsKKyAgICAgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkg KHMtPmYpLCBzLT5nYywgcy0+ZmFjZS0+dW5kZXJsaW5lX2NvbG9yKTsKKyAgICAgICAgICAgICAg ICAgIHhfZmlsbF9yZWN0YW5nbGUgKHMtPmYsIHMtPmdjLCBzLT54LCB5LCBzLT53aWR0aCwgdGhp Y2tuZXNzKTsKKyAgICAgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BM QVkgKHMtPmYpLCBzLT5nYywgeGdjdi5mb3JlZ3JvdW5kKTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIC8qIERyYXcgb3ZlcmxpbmUuICovCisgICAg ICBpZiAocy0+ZmFjZS0+b3ZlcmxpbmVfcCkKKyAgICAgICAgeworICAgICAgICAgIHVuc2lnbmVk IGxvbmcgZHkgPSAwLCBoID0gMTsKKyAgICAgICAgICBpZiAocy0+ZmFjZS0+b3ZlcmxpbmVfY29s b3JfZGVmYXVsdGVkX3ApCisgICAgICAgICAgICB4X2ZpbGxfcmVjdGFuZ2xlIChzLT5mLCBzLT5n Yywgcy0+eCwgcy0+eSArIGR5LCBzLT53aWR0aCwgaCk7CisgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICBYR0NWYWx1ZXMgeGdjdjsKKyAgICAgICAgICAgICAgWEdl dEdDVmFsdWVzIChGUkFNRV9YX0RJU1BMQVkgKHMtPmYpLCBzLT5nYywgR0NGb3JlZ3JvdW5kLCAm eGdjdik7CisgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKHMt PmYpLCBzLT5nYywgcy0+ZmFjZS0+b3ZlcmxpbmVfY29sb3IpOworICAgICAgICAgICAgICB4X2Zp bGxfcmVjdGFuZ2xlIChzLT5mLCBzLT5nYywgcy0+eCwgcy0+eSArIGR5LCBzLT53aWR0aCwgaCk7 CisgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKHMtPmYpLCBz LT5nYywgeGdjdi5mb3JlZ3JvdW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg LyogRHJhdyBzdHJpa2UtdGhyb3VnaC4gKi8KKyAgICAgIGlmIChzLT5mYWNlLT5zdHJpa2VfdGhy b3VnaF9wKQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyBoID0gMTsKKyAgICAg ICAgICB1bnNpZ25lZCBsb25nIGR5ID0gKHMtPmhlaWdodCAtIGgpIC8gMjsKKyAgICAgICAgICBp ZiAocy0+ZmFjZS0+c3RyaWtlX3Rocm91Z2hfY29sb3JfZGVmYXVsdGVkX3ApCisgICAgICAgICAg ICB4X2ZpbGxfcmVjdGFuZ2xlIChzLT5mLCBzLT5nYywgcy0+eCwgcy0+eSArIGR5LCBzLT53aWR0 aCwgaCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBYR0NW YWx1ZXMgeGdjdjsKKyAgICAgICAgICAgICAgWEdldEdDVmFsdWVzIChGUkFNRV9YX0RJU1BMQVkg KHMtPmYpLCBzLT5nYywgR0NGb3JlZ3JvdW5kLCAmeGdjdik7CisgICAgICAgICAgICAgIFhTZXRG b3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKHMtPmYpLCBzLT5nYywgcy0+ZmFjZS0+c3RyaWtl X3Rocm91Z2hfY29sb3IpOworICAgICAgICAgICAgICB4X2ZpbGxfcmVjdGFuZ2xlIChzLT5mLCBz LT5nYywgcy0+eCwgcy0+eSArIGR5LCBzLT53aWR0aCwgaCk7CisgICAgICAgICAgICAgIFhTZXRG b3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKHMtPmYpLCBzLT5nYywgeGdjdi5mb3JlZ3JvdW5k KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgLyogRHJhdyByZWxpZWYgaWYgbm90 IHlldCBkcmF3bi4gKi8KKyAgICAgIGlmICghcmVsaWVmX2RyYXduX3AgJiYgcy0+ZmFjZS0+Ym94 ICE9IEZBQ0VfTk9fQk9YKQorICAgICAgICAgIHhfZHJhd19nbHlwaF9zdHJpbmdfYm94IChzKTsK KyAgICAgIGlmIChzLT5wcmV2KQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IGdseXBoX3N0 cmluZyAqcHJldjsKKyAgICAgICAgICBmb3IgKHByZXYgPSBzLT5wcmV2OyBwcmV2OyBwcmV2ID0g cHJldi0+cHJldikKKyAgICAgICAgICAgIGlmIChwcmV2LT5obCAhPSBzLT5obAorICAgICAgICAg ICAgICAgICYmIHByZXYtPnggKyBwcmV2LT53aWR0aCArIHByZXYtPnJpZ2h0X292ZXJoYW5nID4g cy0+eCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEFzIHByZXYgd2FzIGRy YXduIHdoaWxlIGNsaXBwZWQgdG8gaXRzIG93biBhcmVhLCB3ZQorICAgICAgICAgICAgICAgICAg IG11c3QgZHJhdyB0aGUgcmlnaHRfb3ZlcmhhbmcgcGFydCB1c2luZyBzLT5obCBub3cuICovCisg ICAgICAgICAgICAgICAgZW51bSBkcmF3X2dseXBoc19mYWNlIHNhdmUgPSBwcmV2LT5obDsKKyAg ICAgICAgICAgICAgICBwcmV2LT5obCA9IHMtPmhsOworICAgICAgICAgICAgICAgIG1jX3hfc2V0 X2dseXBoX3N0cmluZ19nYyAocHJldiwgY3Vyc29yX2djX3ApOworICAgICAgICAgICAgICAgIHhf c2V0X2dseXBoX3N0cmluZ19jbGlwcGluZ19leGFjdGx5IChzLCBwcmV2KTsKKyAgICAgICAgICAg ICAgICBpZiAocHJldi0+Zmlyc3RfZ2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSCkKKyAgICAgICAg ICAgICAgICAgIHhfZHJhd19nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAocHJldik7CisgICAgICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgeF9kcmF3X2NvbXBvc2l0ZV9nbHlwaF9z dHJpbmdfZm9yZWdyb3VuZCAocHJldik7CisgICAgICAgICAgICAgICAgeF9yZXNldF9jbGlwX3Jl Y3RhbmdsZXMgKHByZXYtPmYsIHByZXYtPmdjKTsKKyAgICAgICAgICAgICAgICBwcmV2LT5obCA9 IHNhdmU7CisgICAgICAgICAgICAgICAgcHJldi0+bnVtX2NsaXBzID0gMDsKKyAgICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICBpZiAocy0+bmV4dCkKKyAgICAgICAgeworICAgICAgICAg IHN0cnVjdCBnbHlwaF9zdHJpbmcgKm5leHQ7CisgICAgICAgICAgZm9yIChuZXh0ID0gcy0+bmV4 dDsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHQpCisgICAgICAgICAgICBpZiAobmV4dC0+aGwgIT0g cy0+aGwKKyAgICAgICAgICAgICAgICAmJiBuZXh0LT54IC0gbmV4dC0+bGVmdF9vdmVyaGFuZyA8 IHMtPnggKyBzLT53aWR0aCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEFz IG5leHQgd2lsbCBiZSBkcmF3biB3aGlsZSBjbGlwcGVkIHRvIGl0cyBvd24gYXJlYSwKKyAgICAg ICAgICAgICAgICAgICB3ZSBtdXN0IGRyYXcgdGhlIGxlZnRfb3ZlcmhhbmcgcGFydCB1c2luZyBz LT5obCBub3cuICovCisgICAgICAgICAgICAgICAgZW51bSBkcmF3X2dseXBoc19mYWNlIHNhdmUg PSBuZXh0LT5obDsKKyAgICAgICAgICAgICAgICBuZXh0LT5obCA9IHMtPmhsOworICAgICAgICAg ICAgICAgIG1jX3hfc2V0X2dseXBoX3N0cmluZ19nYyAobmV4dCwgY3Vyc29yX2djX3ApOworICAg ICAgICAgICAgICAgIHhfc2V0X2dseXBoX3N0cmluZ19jbGlwcGluZ19leGFjdGx5IChzLCBuZXh0 KTsKKyAgICAgICAgICAgICAgICBpZiAobmV4dC0+Zmlyc3RfZ2x5cGgtPnR5cGUgPT0gQ0hBUl9H TFlQSCkKKyAgICAgICAgICAgICAgICAgIHhfZHJhd19nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAo bmV4dCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgeF9kcmF3X2Nv bXBvc2l0ZV9nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAobmV4dCk7CisgICAgICAgICAgICAgICAg eF9yZXNldF9jbGlwX3JlY3RhbmdsZXMgKG5leHQtPmYsIG5leHQtPmdjKTsKKyAgICAgICAgICAg ICAgICBuZXh0LT5obCA9IHNhdmU7CisgICAgICAgICAgICAgICAgbmV4dC0+bnVtX2NsaXBzID0g MDsKKyAgICAgICAgICAgICAgICBuZXh0LT5jbGlwX2hlYWQgPSBzLT5uZXh0OworICAgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIC8qIFJlc2V0IGNsaXBwaW5nLiAqLworICB4X3Jl c2V0X2NsaXBfcmVjdGFuZ2xlcyAocy0+Ziwgcy0+Z2MpOworICBzLT5udW1fY2xpcHMgPSAwOwor fQorCisvKiBlbmQgTVVMVElQTEUtQ1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisKKwogLyogRGVmYXVsdCB0byB1c2luZyBYSU0gaWYgYXZhaWxhYmxlLiAgKi8KICNpZmRlZiBV U0VfWElNCiBib29sIHVzZV94aW0gPSB0cnVlOwpAQCAtMTEwOSw2ICsyMDEwLDE2IEBAIHN0YXRp YyB2b2lkCiB4X3VwZGF0ZV9iZWdpbiAoc3RydWN0IGZyYW1lICpmKQogewogICAvKiBOb3RoaW5n IHRvIGRvLiAgKi8KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNV UlNPUlMgKi8KKworICBmLT5tY191cGRhdGluZ19mcmFtZSA9IGY7CisKKy8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiAqLworCisKIH0KIAogLyogRHJhdyBhIHZlcnRpY2FsIHdpbmRvdyBib3JkZXIgZnJv bSAoeCx5MCkgdG8gKHgseTEpICAqLwpAQCAtMTI1NCw2ICsyMTY1LDE2IEBAIHhfdXBkYXRlX2Vu ZCAoc3RydWN0IGZyYW1lICpmKQogICBYRmx1c2ggKEZSQU1FX1hfRElTUExBWSAoZikpOwogICB1 bmJsb2NrX2lucHV0ICgpOwogI2VuZGlmCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisv KiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgZi0+bWNfdXBkYXRpbmdfZnJhbWUgPSBOVUxMOwor CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMg Y2FsbGVkIGZyb20gdmFyaW91cyBwbGFjZXMgaW4geGRpc3AuYwpAQCAtMTMyMzgsNiArMTQxNTks MjAgQEAgZXh0ZXJuIGZyYW1lX3Bhcm1faGFuZGxlciB4X2ZyYW1lX3Bhcm1faGFuZGxlcnNbXTsK IAogc3RhdGljIHN0cnVjdCByZWRpc3BsYXlfaW50ZXJmYWNlIHhfcmVkaXNwbGF5X2ludGVyZmFj ZSA9CiAgIHsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNP UlMgKi8KKworLyogYHJlZGlzcGxheV9pbnRlcmZhY2UnIGluIGB4dGVybS5jYCBtdXN0IGJlIGlu IHRoZSBleGFjdCBzYW1lIG9yZGVyIGFzIHRoZQorYHJlZGlzcGxheV9pbnRlcmZhY2UnIGluIGBk aXNwZXh0ZXJuLmhgISAqLworCisgIG1jX3hfZHJhd193aW5kb3dfY3Vyc29yLAorICBtY194X2Ry YXdfZ2x5cGhfc3RyaW5nLAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgICAgeF9m cmFtZV9wYXJtX2hhbmRsZXJzLAogICAgIGd1aV9wcm9kdWNlX2dseXBocywKICAgICBndWlfd3Jp dGVfZ2x5cGhzLAo= --Multipart_Wed_Mar__4_01:03:10_2020-1--